diff --git a/bin/ccmake b/bin/ccmake
index a05fde2..3ec5e8e 100755
--- a/bin/ccmake
+++ b/bin/ccmake
Binary files differ
diff --git a/bin/cmake b/bin/cmake
index 5434528..67fbd69 100755
--- a/bin/cmake
+++ b/bin/cmake
Binary files differ
diff --git a/bin/cpack b/bin/cpack
index 37aefe4..adca012 100755
--- a/bin/cpack
+++ b/bin/cpack
Binary files differ
diff --git a/bin/ctest b/bin/ctest
index f5f6d6a..fe2db5b 100755
--- a/bin/ctest
+++ b/bin/ctest
Binary files differ
diff --git a/doc/cmake-3.18/Copyright.txt b/doc/cmake-3.18/Copyright.txt
deleted file mode 100644
index b867d01..0000000
--- a/doc/cmake-3.18/Copyright.txt
+++ /dev/null
@@ -1,132 +0,0 @@
-CMake - Cross Platform Makefile Generator
-Copyright 2000-2020 Kitware, Inc. and Contributors
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-* Redistributions of source code must retain the above copyright
-  notice, this list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright
-  notice, this list of conditions and the following disclaimer in the
-  documentation and/or other materials provided with the distribution.
-
-* Neither the name of Kitware, Inc. nor the names of Contributors
-  may be used to endorse or promote products derived from this
-  software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-------------------------------------------------------------------------------
-
-The following individuals and institutions are among the Contributors:
-
-* Aaron C. Meadows <cmake@shadowguarddev.com>
-* Adriaan de Groot <groot@kde.org>
-* Aleksey Avdeev <solo@altlinux.ru>
-* Alexander Neundorf <neundorf@kde.org>
-* Alexander Smorkalov <alexander.smorkalov@itseez.com>
-* Alexey Sokolov <sokolov@google.com>
-* Alex Merry <alex.merry@kde.org>
-* Alex Turbov <i.zaufi@gmail.com>
-* Andreas Pakulat <apaku@gmx.de>
-* Andreas Schneider <asn@cryptomilk.org>
-* André Rigland Brodtkorb <Andre.Brodtkorb@ifi.uio.no>
-* Axel Huebl, Helmholtz-Zentrum Dresden - Rossendorf
-* Benjamin Eikel
-* Bjoern Ricks <bjoern.ricks@gmail.com>
-* Brad Hards <bradh@kde.org>
-* Christopher Harvey
-* Christoph Grüninger <foss@grueninger.de>
-* Clement Creusot <creusot@cs.york.ac.uk>
-* Daniel Blezek <blezek@gmail.com>
-* Daniel Pfeifer <daniel@pfeifer-mail.de>
-* Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
-* Eran Ifrah <eran.ifrah@gmail.com>
-* Esben Mose Hansen, Ange Optimization ApS
-* Geoffrey Viola <geoffrey.viola@asirobots.com>
-* Google Inc
-* Gregor Jasny
-* Helio Chissini de Castro <helio@kde.org>
-* Ilya Lavrenov <ilya.lavrenov@itseez.com>
-* Insight Software Consortium <insightsoftwareconsortium.org>
-* Jan Woetzel
-* Julien Schueller
-* Kelly Thompson <kgt@lanl.gov>
-* Laurent Montel <montel@kde.org>
-* Konstantin Podsvirov <konstantin@podsvirov.pro>
-* Mario Bensi <mbensi@ipsquad.net>
-* Martin Gräßlin <mgraesslin@kde.org>
-* Mathieu Malaterre <mathieu.malaterre@gmail.com>
-* Matthaeus G. Chajdas
-* Matthias Kretz <kretz@kde.org>
-* Matthias Maennich <matthias@maennich.net>
-* Michael Hirsch, Ph.D. <www.scivision.co>
-* Michael Stürmer
-* Miguel A. Figueroa-Villanueva
-* Mike Jackson
-* Mike McQuaid <mike@mikemcquaid.com>
-* Nicolas Bock <nicolasbock@gmail.com>
-* Nicolas Despres <nicolas.despres@gmail.com>
-* Nikita Krupen'ko <krnekit@gmail.com>
-* NVIDIA Corporation <www.nvidia.com>
-* OpenGamma Ltd. <opengamma.com>
-* Patrick Stotko <stotko@cs.uni-bonn.de>
-* Per Øyvind Karlsen <peroyvind@mandriva.org>
-* Peter Collingbourne <peter@pcc.me.uk>
-* Petr Gotthard <gotthard@honeywell.com>
-* Philip Lowman <philip@yhbt.com>
-* Philippe Proulx <pproulx@efficios.com>
-* Raffi Enficiaud, Max Planck Society
-* Raumfeld <raumfeld.com>
-* Roger Leigh <rleigh@codelibre.net>
-* Rolf Eike Beer <eike@sf-mail.de>
-* Roman Donchenko <roman.donchenko@itseez.com>
-* Roman Kharitonov <roman.kharitonov@itseez.com>
-* Ruslan Baratov
-* Sebastian Holtermann <sebholt@xwmw.org>
-* Stephen Kelly <steveire@gmail.com>
-* Sylvain Joubert <joubert.sy@gmail.com>
-* The Qt Company Ltd.
-* Thomas Sondergaard <ts@medical-insight.com>
-* Tobias Hunger <tobias.hunger@qt.io>
-* Todd Gamblin <tgamblin@llnl.gov>
-* Tristan Carel
-* University of Dundee
-* Vadim Zhukov
-* Will Dicharry <wdicharry@stellarscience.com>
-
-See version control history for details of individual contributions.
-
-The above copyright and license notice applies to distributions of
-CMake in source and binary form.  Third-party software packages supplied
-with CMake under compatible licenses provide their own copyright notices
-documented in corresponding subdirectories or source files.
-
-------------------------------------------------------------------------------
-
-CMake was initially developed by Kitware with the following sponsorship:
-
- * National Library of Medicine at the National Institutes of Health
-   as part of the Insight Segmentation and Registration Toolkit (ITK).
-
- * US National Labs (Los Alamos, Livermore, Sandia) ASC Parallel
-   Visualization Initiative.
-
- * National Alliance for Medical Image Computing (NAMIC) is funded by the
-   National Institutes of Health through the NIH Roadmap for Medical Research,
-   Grant U54 EB005149.
-
- * Kitware, Inc.
diff --git a/doc/cmake-3.18/cmcurl/COPYING b/doc/cmake-3.18/cmcurl/COPYING
deleted file mode 100644
index 9d9e4af..0000000
--- a/doc/cmake-3.18/cmcurl/COPYING
+++ /dev/null
@@ -1,22 +0,0 @@
-COPYRIGHT AND PERMISSION NOTICE
-
-Copyright (c) 1996 - 2020, Daniel Stenberg, <daniel@haxx.se>, and many
-contributors, see the THANKS file.
-
-All rights reserved.
-
-Permission to use, copy, modify, and distribute this software for any purpose
-with or without fee is hereby granted, provided that the above copyright
-notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
-NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
-OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of a copyright holder shall not
-be used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization of the copyright holder.
diff --git a/doc/cmake-3.18/cmlibarchive/COPYING b/doc/cmake-3.18/cmlibarchive/COPYING
deleted file mode 100644
index 14bbefa..0000000
--- a/doc/cmake-3.18/cmlibarchive/COPYING
+++ /dev/null
@@ -1,66 +0,0 @@
-The libarchive distribution as a whole is Copyright by Tim Kientzle
-and is subject to the copyright notice reproduced at the bottom of
-this file.
-
-Each individual file in this distribution should have a clear
-copyright/licensing statement at the beginning of the file.  If any do
-not, please let me know and I will rectify it.  The following is
-intended to summarize the copyright status of the individual files;
-the actual statements in the files are controlling.
-
-* Except as listed below, all C sources (including .c and .h files)
-  and documentation files are subject to the copyright notice reproduced
-  at the bottom of this file.
-
-* The following source files are also subject in whole or in part to
-  a 3-clause UC Regents copyright; please read the individual source
-  files for details:
-   libarchive/archive_entry.c
-   libarchive/archive_read_support_filter_compress.c
-   libarchive/archive_write_add_filter_compress.c
-   libarchive/mtree.5
-
-* The following source files are in the public domain:
-   libarchive/archive_getdate.c
-
-* The following source files are triple-licensed with the ability to choose
-  from CC0 1.0 Universal, OpenSSL or Apache 2.0 licenses:
-   libarchive/archive_blake2.h
-   libarchive/archive_blake2_impl.h
-   libarchive/archive_blake2s_ref.c
-   libarchive/archive_blake2sp_ref.c
-
-* The build files---including Makefiles, configure scripts,
-  and auxiliary scripts used as part of the compile process---have
-  widely varying licensing terms.  Please check individual files before
-  distributing them to see if those restrictions apply to you.
-
-I intend for all new source code to use the license below and hope over
-time to replace code with other licenses with new implementations that
-do use the license below.  The varying licensing of the build scripts
-seems to be an unavoidable mess.
-
-
-Copyright (c) 2003-2018 <author(s)>
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer
-   in this position and unchanged.
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/doc/cmake-3.22/Copyright.txt b/doc/cmake-3.22/Copyright.txt
new file mode 100644
index 0000000..7f51293
--- /dev/null
+++ b/doc/cmake-3.22/Copyright.txt
@@ -0,0 +1,132 @@
+CMake - Cross Platform Makefile Generator
+Copyright 2000-2021 Kitware, Inc. and Contributors
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+* Redistributions of source code must retain the above copyright
+  notice, this list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright
+  notice, this list of conditions and the following disclaimer in the
+  documentation and/or other materials provided with the distribution.
+
+* Neither the name of Kitware, Inc. nor the names of Contributors
+  may be used to endorse or promote products derived from this
+  software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+------------------------------------------------------------------------------
+
+The following individuals and institutions are among the Contributors:
+
+* Aaron C. Meadows <cmake@shadowguarddev.com>
+* Adriaan de Groot <groot@kde.org>
+* Aleksey Avdeev <solo@altlinux.ru>
+* Alexander Neundorf <neundorf@kde.org>
+* Alexander Smorkalov <alexander.smorkalov@itseez.com>
+* Alexey Sokolov <sokolov@google.com>
+* Alex Merry <alex.merry@kde.org>
+* Alex Turbov <i.zaufi@gmail.com>
+* Andreas Pakulat <apaku@gmx.de>
+* Andreas Schneider <asn@cryptomilk.org>
+* André Rigland Brodtkorb <Andre.Brodtkorb@ifi.uio.no>
+* Axel Huebl, Helmholtz-Zentrum Dresden - Rossendorf
+* Benjamin Eikel
+* Bjoern Ricks <bjoern.ricks@gmail.com>
+* Brad Hards <bradh@kde.org>
+* Christopher Harvey
+* Christoph Grüninger <foss@grueninger.de>
+* Clement Creusot <creusot@cs.york.ac.uk>
+* Daniel Blezek <blezek@gmail.com>
+* Daniel Pfeifer <daniel@pfeifer-mail.de>
+* Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+* Eran Ifrah <eran.ifrah@gmail.com>
+* Esben Mose Hansen, Ange Optimization ApS
+* Geoffrey Viola <geoffrey.viola@asirobots.com>
+* Google Inc
+* Gregor Jasny
+* Helio Chissini de Castro <helio@kde.org>
+* Ilya Lavrenov <ilya.lavrenov@itseez.com>
+* Insight Software Consortium <insightsoftwareconsortium.org>
+* Jan Woetzel
+* Julien Schueller
+* Kelly Thompson <kgt@lanl.gov>
+* Konstantin Podsvirov <konstantin@podsvirov.pro>
+* Laurent Montel <montel@kde.org>
+* Mario Bensi <mbensi@ipsquad.net>
+* Martin Gräßlin <mgraesslin@kde.org>
+* Mathieu Malaterre <mathieu.malaterre@gmail.com>
+* Matthaeus G. Chajdas
+* Matthias Kretz <kretz@kde.org>
+* Matthias Maennich <matthias@maennich.net>
+* Michael Hirsch, Ph.D. <www.scivision.co>
+* Michael Stürmer
+* Miguel A. Figueroa-Villanueva
+* Mike Jackson
+* Mike McQuaid <mike@mikemcquaid.com>
+* Nicolas Bock <nicolasbock@gmail.com>
+* Nicolas Despres <nicolas.despres@gmail.com>
+* Nikita Krupen'ko <krnekit@gmail.com>
+* NVIDIA Corporation <www.nvidia.com>
+* OpenGamma Ltd. <opengamma.com>
+* Patrick Stotko <stotko@cs.uni-bonn.de>
+* Per Øyvind Karlsen <peroyvind@mandriva.org>
+* Peter Collingbourne <peter@pcc.me.uk>
+* Petr Gotthard <gotthard@honeywell.com>
+* Philip Lowman <philip@yhbt.com>
+* Philippe Proulx <pproulx@efficios.com>
+* Raffi Enficiaud, Max Planck Society
+* Raumfeld <raumfeld.com>
+* Roger Leigh <rleigh@codelibre.net>
+* Rolf Eike Beer <eike@sf-mail.de>
+* Roman Donchenko <roman.donchenko@itseez.com>
+* Roman Kharitonov <roman.kharitonov@itseez.com>
+* Ruslan Baratov
+* Sebastian Holtermann <sebholt@xwmw.org>
+* Stephen Kelly <steveire@gmail.com>
+* Sylvain Joubert <joubert.sy@gmail.com>
+* The Qt Company Ltd.
+* Thomas Sondergaard <ts@medical-insight.com>
+* Tobias Hunger <tobias.hunger@qt.io>
+* Todd Gamblin <tgamblin@llnl.gov>
+* Tristan Carel
+* University of Dundee
+* Vadim Zhukov
+* Will Dicharry <wdicharry@stellarscience.com>
+
+See version control history for details of individual contributions.
+
+The above copyright and license notice applies to distributions of
+CMake in source and binary form.  Third-party software packages supplied
+with CMake under compatible licenses provide their own copyright notices
+documented in corresponding subdirectories or source files.
+
+------------------------------------------------------------------------------
+
+CMake was initially developed by Kitware with the following sponsorship:
+
+ * National Library of Medicine at the National Institutes of Health
+   as part of the Insight Segmentation and Registration Toolkit (ITK).
+
+ * US National Labs (Los Alamos, Livermore, Sandia) ASC Parallel
+   Visualization Initiative.
+
+ * National Alliance for Medical Image Computing (NAMIC) is funded by the
+   National Institutes of Health through the NIH Roadmap for Medical Research,
+   Grant U54 EB005149.
+
+ * Kitware, Inc.
diff --git a/doc/cmake-3.22/cmcurl/COPYING b/doc/cmake-3.22/cmcurl/COPYING
new file mode 100644
index 0000000..48f1447
--- /dev/null
+++ b/doc/cmake-3.22/cmcurl/COPYING
@@ -0,0 +1,22 @@
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright (c) 1996 - 2021, Daniel Stenberg, <daniel@haxx.se>, and many
+contributors, see the THANKS file.
+
+All rights reserved.
+
+Permission to use, copy, modify, and distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright
+notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
+OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder shall not
+be used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization of the copyright holder.
diff --git a/doc/cmake-3.22/cmlibarchive/COPYING b/doc/cmake-3.22/cmlibarchive/COPYING
new file mode 100644
index 0000000..1b97235
--- /dev/null
+++ b/doc/cmake-3.22/cmlibarchive/COPYING
@@ -0,0 +1,65 @@
+The libarchive distribution as a whole is Copyright by Tim Kientzle
+and is subject to the copyright notice reproduced at the bottom of
+this file.
+
+Each individual file in this distribution should have a clear
+copyright/licensing statement at the beginning of the file.  If any do
+not, please let me know and I will rectify it.  The following is
+intended to summarize the copyright status of the individual files;
+the actual statements in the files are controlling.
+
+* Except as listed below, all C sources (including .c and .h files)
+  and documentation files are subject to the copyright notice reproduced
+  at the bottom of this file.
+
+* The following source files are also subject in whole or in part to
+  a 3-clause UC Regents copyright; please read the individual source
+  files for details:
+   libarchive/archive_read_support_filter_compress.c
+   libarchive/archive_write_add_filter_compress.c
+   libarchive/mtree.5
+
+* The following source files are in the public domain:
+   libarchive/archive_getdate.c
+
+* The following source files are triple-licensed with the ability to choose
+  from CC0 1.0 Universal, OpenSSL or Apache 2.0 licenses:
+   libarchive/archive_blake2.h
+   libarchive/archive_blake2_impl.h
+   libarchive/archive_blake2s_ref.c
+   libarchive/archive_blake2sp_ref.c
+
+* The build files---including Makefiles, configure scripts,
+  and auxiliary scripts used as part of the compile process---have
+  widely varying licensing terms.  Please check individual files before
+  distributing them to see if those restrictions apply to you.
+
+I intend for all new source code to use the license below and hope over
+time to replace code with other licenses with new implementations that
+do use the license below.  The varying licensing of the build scripts
+seems to be an unavoidable mess.
+
+
+Copyright (c) 2003-2018 <author(s)>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer
+   in this position and unchanged.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/doc/cmake-3.18/cmliblzma/COPYING b/doc/cmake-3.22/cmliblzma/COPYING
similarity index 100%
rename from doc/cmake-3.18/cmliblzma/COPYING
rename to doc/cmake-3.22/cmliblzma/COPYING
diff --git a/doc/cmake-3.18/cmlibrhash/COPYING b/doc/cmake-3.22/cmlibrhash/COPYING
similarity index 100%
rename from doc/cmake-3.18/cmlibrhash/COPYING
rename to doc/cmake-3.22/cmlibrhash/COPYING
diff --git a/doc/cmake-3.18/cmlibuv/LICENSE b/doc/cmake-3.22/cmlibuv/LICENSE
similarity index 100%
rename from doc/cmake-3.18/cmlibuv/LICENSE
rename to doc/cmake-3.22/cmlibuv/LICENSE
diff --git a/doc/cmake-3.18/cmnghttp2/COPYING b/doc/cmake-3.22/cmnghttp2/COPYING
similarity index 100%
rename from doc/cmake-3.18/cmnghttp2/COPYING
rename to doc/cmake-3.22/cmnghttp2/COPYING
diff --git a/doc/cmake-3.18/cmsys/Copyright.txt b/doc/cmake-3.22/cmsys/Copyright.txt
similarity index 100%
rename from doc/cmake-3.18/cmsys/Copyright.txt
rename to doc/cmake-3.22/cmsys/Copyright.txt
diff --git a/doc/cmake-3.18/cmzlib/Copyright.txt b/doc/cmake-3.22/cmzlib/Copyright.txt
similarity index 100%
rename from doc/cmake-3.18/cmzlib/Copyright.txt
rename to doc/cmake-3.22/cmzlib/Copyright.txt
diff --git a/doc/cmake-3.18/cmzstd/LICENSE b/doc/cmake-3.22/cmzstd/LICENSE
similarity index 100%
rename from doc/cmake-3.18/cmzstd/LICENSE
rename to doc/cmake-3.22/cmzstd/LICENSE
diff --git a/share/cmake-3.18/Help/command/DEVICE_LINK_OPTIONS.txt b/share/cmake-3.18/Help/command/DEVICE_LINK_OPTIONS.txt
deleted file mode 100644
index 3f0226f..0000000
--- a/share/cmake-3.18/Help/command/DEVICE_LINK_OPTIONS.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-
-When a device link step is involved, which is controlled by
-:prop_tgt:`CUDA_SEPARABLE_COMPILATION` and
-:prop_tgt:`CUDA_RESOLVE_DEVICE_SYMBOLS` properties and policy :policy:`CMP0105`,
-the raw options will be delivered to the host and device link steps (wrapped in
-``-Xcompiler`` or equivalent for device link). Options wrapped with
-``$<DEVICE_LINK:...>``
-:manual:`generator expression <cmake-generator-expressions(7)>` will be used
-only for the device link step. Options wrapped with ``$<HOST_LINK:...>``
-:manual:`generator expression <cmake-generator-expressions(7)>` will be used
-only for the host link step.
diff --git a/share/cmake-3.18/Help/command/FIND_XXX.txt b/share/cmake-3.18/Help/command/FIND_XXX.txt
deleted file mode 100644
index 4a62c5b..0000000
--- a/share/cmake-3.18/Help/command/FIND_XXX.txt
+++ /dev/null
@@ -1,161 +0,0 @@
-A short-hand signature is:
-
-.. parsed-literal::
-
-   |FIND_XXX| (<VAR> name1 [path1 path2 ...])
-
-The general signature is:
-
-.. parsed-literal::
-
-   |FIND_XXX| (
-             <VAR>
-             name | |NAMES|
-             [HINTS path1 [path2 ... ENV var]]
-             [PATHS path1 [path2 ... ENV var]]
-             [PATH_SUFFIXES suffix1 [suffix2 ...]]
-             [DOC "cache documentation string"]
-             [REQUIRED]
-             [NO_DEFAULT_PATH]
-             [NO_PACKAGE_ROOT_PATH]
-             [NO_CMAKE_PATH]
-             [NO_CMAKE_ENVIRONMENT_PATH]
-             [NO_SYSTEM_ENVIRONMENT_PATH]
-             [NO_CMAKE_SYSTEM_PATH]
-             [CMAKE_FIND_ROOT_PATH_BOTH |
-              ONLY_CMAKE_FIND_ROOT_PATH |
-              NO_CMAKE_FIND_ROOT_PATH]
-            )
-
-This command is used to find a |SEARCH_XXX_DESC|.
-A cache entry named by ``<VAR>`` is created to store the result
-of this command.
-If the |SEARCH_XXX| is found the result is stored in the variable
-and the search will not be repeated unless the variable is cleared.
-If nothing is found, the result will be ``<VAR>-NOTFOUND``.
-The ``REQUIRED`` option stops processing with an error message if nothing
-is found, otherwise the search will be attempted again the
-next time |FIND_XXX| is invoked with the same variable.
-
-Options include:
-
-``NAMES``
-  Specify one or more possible names for the |SEARCH_XXX|.
-
-  When using this to specify names with and without a version
-  suffix, we recommend specifying the unversioned name first
-  so that locally-built packages can be found before those
-  provided by distributions.
-
-``HINTS``, ``PATHS``
-  Specify directories to search in addition to the default locations.
-  The ``ENV var`` sub-option reads paths from a system environment
-  variable.
-
-``PATH_SUFFIXES``
-  Specify additional subdirectories to check below each directory
-  location otherwise considered.
-
-``DOC``
-  Specify the documentation string for the ``<VAR>`` cache entry.
-
-``REQUIRED``
-  Stop processing with an error message if nothing is found.
-
-If ``NO_DEFAULT_PATH`` is specified, then no additional paths are
-added to the search.
-If ``NO_DEFAULT_PATH`` is not specified, the search process is as follows:
-
-.. |FIND_PACKAGE_ROOT_PREFIX_PATH_XXX_SUBDIR| replace::
-   |prefix_XXX_SUBDIR| for each ``<prefix>`` in the
-   :variable:`<PackageName>_ROOT` CMake variable and the
-   :envvar:`<PackageName>_ROOT` environment variable if
-   called from within a find module loaded by
-   :command:`find_package(<PackageName>)`
-
-.. |CMAKE_PREFIX_PATH_XXX_SUBDIR| replace::
-   |prefix_XXX_SUBDIR| for each ``<prefix>`` in :variable:`CMAKE_PREFIX_PATH`
-
-.. |SYSTEM_ENVIRONMENT_PREFIX_PATH_XXX_SUBDIR| replace::
-   |prefix_XXX_SUBDIR| for each ``<prefix>/[s]bin`` in ``PATH``, and
-   |entry_XXX_SUBDIR| for other entries in ``PATH``
-
-.. |CMAKE_SYSTEM_PREFIX_PATH_XXX_SUBDIR| replace::
-   |prefix_XXX_SUBDIR| for each ``<prefix>`` in
-   :variable:`CMAKE_SYSTEM_PREFIX_PATH`
-
-1. If called from within a find module or any other script loaded by a call to
-   :command:`find_package(<PackageName>)`, search prefixes unique to the
-   current package being found.  Specifically, look in the
-   :variable:`<PackageName>_ROOT` CMake variable and the
-   :envvar:`<PackageName>_ROOT` environment variable.
-   The package root variables are maintained as a stack, so if called from
-   nested find modules or config packages, root paths from the parent's find
-   module or config package will be searched after paths from the current
-   module or package.  In other words, the search order would be
-   ``<CurrentPackage>_ROOT``, ``ENV{<CurrentPackage>_ROOT}``,
-   ``<ParentPackage>_ROOT``, ``ENV{<ParentPackage>_ROOT}``, etc.
-   This can be skipped if ``NO_PACKAGE_ROOT_PATH`` is passed or by setting
-   the :variable:`CMAKE_FIND_USE_PACKAGE_ROOT_PATH` to ``FALSE``.
-   See policy :policy:`CMP0074`.
-
-   * |FIND_PACKAGE_ROOT_PREFIX_PATH_XXX|
-
-2. Search paths specified in cmake-specific cache variables.
-   These are intended to be used on the command line with a ``-DVAR=value``.
-   The values are interpreted as :ref:`semicolon-separated lists <CMake Language Lists>`.
-   This can be skipped if ``NO_CMAKE_PATH`` is passed or by setting the
-   :variable:`CMAKE_FIND_USE_CMAKE_PATH` to ``FALSE``.
-
-   * |CMAKE_PREFIX_PATH_XXX|
-   * |CMAKE_XXX_PATH|
-   * |CMAKE_XXX_MAC_PATH|
-
-3. Search paths specified in cmake-specific environment variables.
-   These are intended to be set in the user's shell configuration,
-   and therefore use the host's native path separator
-   (``;`` on Windows and ``:`` on UNIX).
-   This can be skipped if ``NO_CMAKE_ENVIRONMENT_PATH`` is passed or
-   by setting the :variable:`CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH` to ``FALSE``.
-
-   * |CMAKE_PREFIX_PATH_XXX|
-   * |CMAKE_XXX_PATH|
-   * |CMAKE_XXX_MAC_PATH|
-
-4. Search the paths specified by the ``HINTS`` option.
-   These should be paths computed by system introspection, such as a
-   hint provided by the location of another item already found.
-   Hard-coded guesses should be specified with the ``PATHS`` option.
-
-5. Search the standard system environment variables.
-   This can be skipped if ``NO_SYSTEM_ENVIRONMENT_PATH`` is passed or by
-   setting the :variable:`CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH` to ``FALSE``.
-
-   * |SYSTEM_ENVIRONMENT_PATH_XXX|
-   * |SYSTEM_ENVIRONMENT_PATH_WINDOWS_XXX|
-
-6. Search cmake variables defined in the Platform files
-   for the current system.  This can be skipped if ``NO_CMAKE_SYSTEM_PATH``
-   is passed or by setting the :variable:`CMAKE_FIND_USE_CMAKE_SYSTEM_PATH`
-   to ``FALSE``.
-
-   * |CMAKE_SYSTEM_PREFIX_PATH_XXX|
-   * |CMAKE_SYSTEM_XXX_PATH|
-   * |CMAKE_SYSTEM_XXX_MAC_PATH|
-
-   The platform paths that these variables contain are locations that
-   typically include installed software. An example being ``/usr/local`` for
-   UNIX based platforms.
-
-7. Search the paths specified by the PATHS option
-   or in the short-hand version of the command.
-   These are typically hard-coded guesses.
-
-.. |FIND_ARGS_XXX| replace:: <VAR> NAMES name
-
-On macOS the :variable:`CMAKE_FIND_FRAMEWORK` and
-:variable:`CMAKE_FIND_APPBUNDLE` variables determine the order of
-preference between Apple-style and unix-style package components.
-
-.. include:: FIND_XXX_ROOT.txt
-.. include:: FIND_XXX_ORDER.txt
diff --git a/share/cmake-3.18/Help/command/LINK_OPTIONS_LINKER.txt b/share/cmake-3.18/Help/command/LINK_OPTIONS_LINKER.txt
deleted file mode 100644
index 3f66181..0000000
--- a/share/cmake-3.18/Help/command/LINK_OPTIONS_LINKER.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-To pass options to the linker tool, each compiler driver has its own syntax.
-The ``LINKER:`` prefix and ``,`` separator can be used to specify, in a portable
-way, options to pass to the linker tool. ``LINKER:`` is replaced by the
-appropriate driver option and ``,`` by the appropriate driver separator.
-The driver prefix and driver separator are given by the values of the
-:variable:`CMAKE_<LANG>_LINKER_WRAPPER_FLAG` and
-:variable:`CMAKE_<LANG>_LINKER_WRAPPER_FLAG_SEP` variables.
-
-For example, ``"LINKER:-z,defs"`` becomes ``-Xlinker -z -Xlinker defs`` for
-``Clang`` and ``-Wl,-z,defs`` for ``GNU GCC``.
-
-The ``LINKER:`` prefix can be specified as part of a ``SHELL:`` prefix
-expression.
-
-The ``LINKER:`` prefix supports, as an alternative syntax, specification of
-arguments using the ``SHELL:`` prefix and space as separator. The previous
-example then becomes ``"LINKER:SHELL:-z defs"``.
-
-.. note::
-
-  Specifying the ``SHELL:`` prefix anywhere other than at the beginning of the
-  ``LINKER:`` prefix is not supported.
diff --git a/share/cmake-3.18/Help/command/OPTIONS_SHELL.txt b/share/cmake-3.18/Help/command/OPTIONS_SHELL.txt
deleted file mode 100644
index 0f8ec32..0000000
--- a/share/cmake-3.18/Help/command/OPTIONS_SHELL.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-The final set of compile or link options used for a target is constructed by
-accumulating options from the current target and the usage requirements of
-its dependencies.  The set of options is de-duplicated to avoid repetition.
-While beneficial for individual options, the de-duplication step can break
-up option groups.  For example, ``-D A -D B`` becomes ``-D A B``.  One may
-specify a group of options using shell-like quoting along with a ``SHELL:``
-prefix.  The ``SHELL:`` prefix is dropped, and the rest of the option string
-is parsed using the :command:`separate_arguments` ``UNIX_COMMAND`` mode.
-For example, ``"SHELL:-D A" "SHELL:-D B"`` becomes ``-D A -D B``.
diff --git a/share/cmake-3.18/Help/command/add_compile_definitions.rst b/share/cmake-3.18/Help/command/add_compile_definitions.rst
deleted file mode 100644
index e10aba0..0000000
--- a/share/cmake-3.18/Help/command/add_compile_definitions.rst
+++ /dev/null
@@ -1,25 +0,0 @@
-add_compile_definitions
------------------------
-
-Add preprocessor definitions to the compilation of source files.
-
-.. code-block:: cmake
-
-  add_compile_definitions(<definition> ...)
-
-Adds preprocessor definitions to the compiler command line.
-
-The preprocessor definitions are added to the :prop_dir:`COMPILE_DEFINITIONS`
-directory property for the current ``CMakeLists`` file. They are also added to
-the :prop_tgt:`COMPILE_DEFINITIONS` target property for each target in the
-current ``CMakeLists`` file.
-
-Definitions are specified using the syntax ``VAR`` or ``VAR=value``.
-Function-style definitions are not supported. CMake will automatically
-escape the value correctly for the native build system (note that CMake
-language syntax may require escapes to specify some values).
-
-Arguments to ``add_compile_definitions`` may use "generator expressions" with
-the syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)`
-manual for available expressions.  See the :manual:`cmake-buildsystem(7)`
-manual for more on defining buildsystem properties.
diff --git a/share/cmake-3.18/Help/command/add_custom_command.rst b/share/cmake-3.18/Help/command/add_custom_command.rst
deleted file mode 100644
index 9279748..0000000
--- a/share/cmake-3.18/Help/command/add_custom_command.rst
+++ /dev/null
@@ -1,281 +0,0 @@
-add_custom_command
-------------------
-
-Add a custom build rule to the generated build system.
-
-There are two main signatures for ``add_custom_command``.
-
-Generating Files
-^^^^^^^^^^^^^^^^
-
-The first signature is for adding a custom command to produce an output:
-
-.. code-block:: cmake
-
-  add_custom_command(OUTPUT output1 [output2 ...]
-                     COMMAND command1 [ARGS] [args1...]
-                     [COMMAND command2 [ARGS] [args2...] ...]
-                     [MAIN_DEPENDENCY depend]
-                     [DEPENDS [depends...]]
-                     [BYPRODUCTS [files...]]
-                     [IMPLICIT_DEPENDS <lang1> depend1
-                                      [<lang2> depend2] ...]
-                     [WORKING_DIRECTORY dir]
-                     [COMMENT comment]
-                     [DEPFILE depfile]
-                     [JOB_POOL job_pool]
-                     [VERBATIM] [APPEND] [USES_TERMINAL]
-                     [COMMAND_EXPAND_LISTS])
-
-This defines a command to generate specified ``OUTPUT`` file(s).
-A target created in the same directory (``CMakeLists.txt`` file)
-that specifies any output of the custom command as a source file
-is given a rule to generate the file using the command at build time.
-Do not list the output in more than one independent target that
-may build in parallel or the two instances of the rule may conflict
-(instead use the :command:`add_custom_target` command to drive the
-command and make the other targets depend on that one).
-In makefile terms this creates a new target in the following form::
-
-  OUTPUT: MAIN_DEPENDENCY DEPENDS
-          COMMAND
-
-The options are:
-
-``APPEND``
-  Append the ``COMMAND`` and ``DEPENDS`` option values to the custom
-  command for the first output specified.  There must have already
-  been a previous call to this command with the same output.
-  The ``COMMENT``, ``MAIN_DEPENDENCY``, and ``WORKING_DIRECTORY``
-  options are currently ignored when APPEND is given, but may be
-  used in the future.
-
-``BYPRODUCTS``
-  Specify the files the command is expected to produce but whose
-  modification time may or may not be newer than the dependencies.
-  If a byproduct name is a relative path it will be interpreted
-  relative to the build tree directory corresponding to the
-  current source directory.
-  Each byproduct file will be marked with the :prop_sf:`GENERATED`
-  source file property automatically.
-
-  Explicit specification of byproducts is supported by the
-  :generator:`Ninja` generator to tell the ``ninja`` build tool
-  how to regenerate byproducts when they are missing.  It is
-  also useful when other build rules (e.g. custom commands)
-  depend on the byproducts.  Ninja requires a build rule for any
-  generated file on which another rule depends even if there are
-  order-only dependencies to ensure the byproducts will be
-  available before their dependents build.
-
-  The :ref:`Makefile Generators` will remove ``BYPRODUCTS`` and other
-  :prop_sf:`GENERATED` files during ``make clean``.
-
-``COMMAND``
-  Specify the command-line(s) to execute at build time.
-  If more than one ``COMMAND`` is specified they will be executed in order,
-  but *not* necessarily composed into a stateful shell or batch script.
-  (To run a full script, use the :command:`configure_file` command or the
-  :command:`file(GENERATE)` command to create it, and then specify
-  a ``COMMAND`` to launch it.)
-  The optional ``ARGS`` argument is for backward compatibility and
-  will be ignored.
-
-  If ``COMMAND`` specifies an executable target name (created by the
-  :command:`add_executable` command), it will automatically be replaced
-  by the location of the executable created at build time if either of
-  the following is true:
-
-  * The target is not being cross-compiled (i.e. the
-    :variable:`CMAKE_CROSSCOMPILING` variable is not set to true).
-  * The target is being cross-compiled and an emulator is provided (i.e.
-    its :prop_tgt:`CROSSCOMPILING_EMULATOR` target property is set).
-    In this case, the contents of :prop_tgt:`CROSSCOMPILING_EMULATOR` will be
-    prepended to the command before the location of the target executable.
-
-  If neither of the above conditions are met, it is assumed that the
-  command name is a program to be found on the ``PATH`` at build time.
-
-  Arguments to ``COMMAND`` may use
-  :manual:`generator expressions <cmake-generator-expressions(7)>`.
-  Use the ``TARGET_FILE`` generator expression to refer to the location of
-  a target later in the command line (i.e. as a command argument rather
-  than as the command to execute).
-
-  Whenever a target is used as a command to execute or is mentioned in a
-  generator expression as a command argument, a target-level dependency
-  will be added automatically so that the mentioned target will be built
-  before any target using this custom command.  However this does NOT add
-  a file-level dependency that would cause the custom command to re-run
-  whenever the executable is recompiled.  List target names with
-  the ``DEPENDS`` option to add such file-level dependencies.
-
-``COMMENT``
-  Display the given message before the commands are executed at
-  build time.
-
-``DEPENDS``
-  Specify files on which the command depends.  Each argument is converted
-  to a dependency as follows:
-
-  1. If the argument is the name of a target (created by the
-     :command:`add_custom_target`, :command:`add_executable`, or
-     :command:`add_library` command) a target-level dependency is
-     created to make sure the target is built before any target
-     using this custom command.  Additionally, if the target is an
-     executable or library, a file-level dependency is created to
-     cause the custom command to re-run whenever the target is
-     recompiled.
-
-  2. If the argument is an absolute path, a file-level dependency
-     is created on that path.
-
-  3. If the argument is the name of a source file that has been
-     added to a target or on which a source file property has been set,
-     a file-level dependency is created on that source file.
-
-  4. If the argument is a relative path and it exists in the current
-     source directory, a file-level dependency is created on that
-     file in the current source directory.
-
-  5. Otherwise, a file-level dependency is created on that path relative
-     to the current binary directory.
-
-  If any dependency is an ``OUTPUT`` of another custom command in the same
-  directory (``CMakeLists.txt`` file), CMake automatically brings the other
-  custom command into the target in which this command is built.
-  A target-level dependency is added if any dependency is listed as
-  ``BYPRODUCTS`` of a target or any of its build events in the same
-  directory to ensure the byproducts will be available.
-
-  If ``DEPENDS`` is not specified, the command will run whenever
-  the ``OUTPUT`` is missing; if the command does not actually
-  create the ``OUTPUT``, the rule will always run.
-
-  Arguments to ``DEPENDS`` may use
-  :manual:`generator expressions <cmake-generator-expressions(7)>`.
-
-``COMMAND_EXPAND_LISTS``
-  Lists in ``COMMAND`` arguments will be expanded, including those
-  created with
-  :manual:`generator expressions <cmake-generator-expressions(7)>`,
-  allowing ``COMMAND`` arguments such as
-  ``${CC} "-I$<JOIN:$<TARGET_PROPERTY:foo,INCLUDE_DIRECTORIES>,;-I>" foo.cc``
-  to be properly expanded.
-
-``IMPLICIT_DEPENDS``
-  Request scanning of implicit dependencies of an input file.
-  The language given specifies the programming language whose
-  corresponding dependency scanner should be used.
-  Currently only ``C`` and ``CXX`` language scanners are supported.
-  The language has to be specified for every file in the
-  ``IMPLICIT_DEPENDS`` list.  Dependencies discovered from the
-  scanning are added to those of the custom command at build time.
-  Note that the ``IMPLICIT_DEPENDS`` option is currently supported
-  only for Makefile generators and will be ignored by other generators.
-
-``JOB_POOL``
-  Specify a :prop_gbl:`pool <JOB_POOLS>` for the :generator:`Ninja`
-  generator. Incompatible with ``USES_TERMINAL``, which implies
-  the ``console`` pool.
-  Using a pool that is not defined by :prop_gbl:`JOB_POOLS` causes
-  an error by ninja at build time.
-
-``MAIN_DEPENDENCY``
-  Specify the primary input source file to the command.  This is
-  treated just like any value given to the ``DEPENDS`` option
-  but also suggests to Visual Studio generators where to hang
-  the custom command. Each source file may have at most one command
-  specifying it as its main dependency. A compile command (i.e. for a
-  library or an executable) counts as an implicit main dependency which
-  gets silently overwritten by a custom command specification.
-
-``OUTPUT``
-  Specify the output files the command is expected to produce.
-  If an output name is a relative path it will be interpreted
-  relative to the build tree directory corresponding to the
-  current source directory.
-  Each output file will be marked with the :prop_sf:`GENERATED`
-  source file property automatically.
-  If the output of the custom command is not actually created
-  as a file on disk it should be marked with the :prop_sf:`SYMBOLIC`
-  source file property.
-
-``USES_TERMINAL``
-  The command will be given direct access to the terminal if possible.
-  With the :generator:`Ninja` generator, this places the command in
-  the ``console`` :prop_gbl:`pool <JOB_POOLS>`.
-
-``VERBATIM``
-  All arguments to the commands will be escaped properly for the
-  build tool so that the invoked command receives each argument
-  unchanged.  Note that one level of escapes is still used by the
-  CMake language processor before add_custom_command even sees the
-  arguments.  Use of ``VERBATIM`` is recommended as it enables
-  correct behavior.  When ``VERBATIM`` is not given the behavior
-  is platform specific because there is no protection of
-  tool-specific special characters.
-
-``WORKING_DIRECTORY``
-  Execute the command with the given current working directory.
-  If it is a relative path it will be interpreted relative to the
-  build tree directory corresponding to the current source directory.
-
-  Arguments to ``WORKING_DIRECTORY`` may use
-  :manual:`generator expressions <cmake-generator-expressions(7)>`.
-
-``DEPFILE``
-  Specify a ``.d`` depfile for the :generator:`Ninja` generator.
-  A ``.d`` file holds dependencies usually emitted by the custom
-  command itself.
-  Using ``DEPFILE`` with other generators than Ninja is an error.
-
-Build Events
-^^^^^^^^^^^^
-
-The second signature adds a custom command to a target such as a
-library or executable.  This is useful for performing an operation
-before or after building the target.  The command becomes part of the
-target and will only execute when the target itself is built.  If the
-target is already built, the command will not execute.
-
-.. code-block:: cmake
-
-  add_custom_command(TARGET <target>
-                     PRE_BUILD | PRE_LINK | POST_BUILD
-                     COMMAND command1 [ARGS] [args1...]
-                     [COMMAND command2 [ARGS] [args2...] ...]
-                     [BYPRODUCTS [files...]]
-                     [WORKING_DIRECTORY dir]
-                     [COMMENT comment]
-                     [VERBATIM] [USES_TERMINAL]
-                     [COMMAND_EXPAND_LISTS])
-
-This defines a new command that will be associated with building the
-specified ``<target>``.  The ``<target>`` must be defined in the current
-directory; targets defined in other directories may not be specified.
-
-When the command will happen is determined by which
-of the following is specified:
-
-``PRE_BUILD``
-  On :ref:`Visual Studio Generators`, run before any other rules are
-  executed within the target.
-  On other generators, run just before ``PRE_LINK`` commands.
-``PRE_LINK``
-  Run after sources have been compiled but before linking the binary
-  or running the librarian or archiver tool of a static library.
-  This is not defined for targets created by the
-  :command:`add_custom_target` command.
-``POST_BUILD``
-  Run after all other rules within the target have been executed.
-
-.. note::
-  Because generator expressions can be used in custom commands,
-  it is possible to define ``COMMAND`` lines or whole custom commands
-  which evaluate to empty strings for certain configurations.
-  For **Visual Studio 2010 (and newer)** generators these command
-  lines or custom commands will be omitted for the specific
-  configuration and no "empty-string-command" will be added.
-
-  This allows to add individual build events for every configuration.
diff --git a/share/cmake-3.18/Help/command/add_custom_target.rst b/share/cmake-3.18/Help/command/add_custom_target.rst
deleted file mode 100644
index 56ab414..0000000
--- a/share/cmake-3.18/Help/command/add_custom_target.rst
+++ /dev/null
@@ -1,149 +0,0 @@
-add_custom_target
------------------
-
-Add a target with no output so it will always be built.
-
-.. code-block:: cmake
-
-  add_custom_target(Name [ALL] [command1 [args1...]]
-                    [COMMAND command2 [args2...] ...]
-                    [DEPENDS depend depend depend ... ]
-                    [BYPRODUCTS [files...]]
-                    [WORKING_DIRECTORY dir]
-                    [COMMENT comment]
-                    [JOB_POOL job_pool]
-                    [VERBATIM] [USES_TERMINAL]
-                    [COMMAND_EXPAND_LISTS]
-                    [SOURCES src1 [src2...]])
-
-Adds a target with the given name that executes the given commands.
-The target has no output file and is *always considered out of date*
-even if the commands try to create a file with the name of the target.
-Use the :command:`add_custom_command` command to generate a file with
-dependencies.  By default nothing depends on the custom target.  Use
-the :command:`add_dependencies` command to add dependencies to or
-from other targets.
-
-The options are:
-
-``ALL``
-  Indicate that this target should be added to the default build
-  target so that it will be run every time (the command cannot be
-  called ``ALL``).
-
-``BYPRODUCTS``
-  Specify the files the command is expected to produce but whose
-  modification time may or may not be updated on subsequent builds.
-  If a byproduct name is a relative path it will be interpreted
-  relative to the build tree directory corresponding to the
-  current source directory.
-  Each byproduct file will be marked with the :prop_sf:`GENERATED`
-  source file property automatically.
-
-  Explicit specification of byproducts is supported by the
-  :generator:`Ninja` generator to tell the ``ninja`` build tool
-  how to regenerate byproducts when they are missing.  It is
-  also useful when other build rules (e.g. custom commands)
-  depend on the byproducts.  Ninja requires a build rule for any
-  generated file on which another rule depends even if there are
-  order-only dependencies to ensure the byproducts will be
-  available before their dependents build.
-
-  The :ref:`Makefile Generators` will remove ``BYPRODUCTS`` and other
-  :prop_sf:`GENERATED` files during ``make clean``.
-
-``COMMAND``
-  Specify the command-line(s) to execute at build time.
-  If more than one ``COMMAND`` is specified they will be executed in order,
-  but *not* necessarily composed into a stateful shell or batch script.
-  (To run a full script, use the :command:`configure_file` command or the
-  :command:`file(GENERATE)` command to create it, and then specify
-  a ``COMMAND`` to launch it.)
-
-  If ``COMMAND`` specifies an executable target name (created by the
-  :command:`add_executable` command), it will automatically be replaced
-  by the location of the executable created at build time if either of
-  the following is true:
-
-  * The target is not being cross-compiled (i.e. the
-    :variable:`CMAKE_CROSSCOMPILING` variable is not set to true).
-  * The target is being cross-compiled and an emulator is provided (i.e.
-    its :prop_tgt:`CROSSCOMPILING_EMULATOR` target property is set).
-    In this case, the contents of :prop_tgt:`CROSSCOMPILING_EMULATOR` will be
-    prepended to the command before the location of the target executable.
-
-  If neither of the above conditions are met, it is assumed that the
-  command name is a program to be found on the ``PATH`` at build time.
-
-  Arguments to ``COMMAND`` may use
-  :manual:`generator expressions <cmake-generator-expressions(7)>`.
-  Use the ``TARGET_FILE`` generator expression to refer to the location of
-  a target later in the command line (i.e. as a command argument rather
-  than as the command to execute).
-
-  Whenever a target is used as a command to execute or is mentioned in a
-  generator expression as a command argument, a target-level dependency
-  will be added automatically so that the mentioned target will be built
-  before this custom target.
-
-  The command and arguments are optional and if not specified an empty
-  target will be created.
-
-``COMMENT``
-  Display the given message before the commands are executed at
-  build time.
-
-``DEPENDS``
-  Reference files and outputs of custom commands created with
-  :command:`add_custom_command` command calls in the same directory
-  (``CMakeLists.txt`` file).  They will be brought up to date when
-  the target is built.
-  A target-level dependency is added if any dependency is a byproduct
-  of a target or any of its build events in the same directory to ensure
-  the byproducts will be available before this target is built.
-
-  Use the :command:`add_dependencies` command to add dependencies
-  on other targets.
-
-``COMMAND_EXPAND_LISTS``
-  Lists in ``COMMAND`` arguments will be expanded, including those
-  created with
-  :manual:`generator expressions <cmake-generator-expressions(7)>`,
-  allowing ``COMMAND`` arguments such as
-  ``${CC} "-I$<JOIN:$<TARGET_PROPERTY:foo,INCLUDE_DIRECTORIES>,;-I>" foo.cc``
-  to be properly expanded.
-
-``JOB_POOL``
-  Specify a :prop_gbl:`pool <JOB_POOLS>` for the :generator:`Ninja`
-  generator. Incompatible with ``USES_TERMINAL``, which implies
-  the ``console`` pool.
-  Using a pool that is not defined by :prop_gbl:`JOB_POOLS` causes
-  an error by ninja at build time.
-
-``SOURCES``
-  Specify additional source files to be included in the custom target.
-  Specified source files will be added to IDE project files for
-  convenience in editing even if they have no build rules.
-
-``VERBATIM``
-  All arguments to the commands will be escaped properly for the
-  build tool so that the invoked command receives each argument
-  unchanged.  Note that one level of escapes is still used by the
-  CMake language processor before ``add_custom_target`` even sees
-  the arguments.  Use of ``VERBATIM`` is recommended as it enables
-  correct behavior.  When ``VERBATIM`` is not given the behavior
-  is platform specific because there is no protection of
-  tool-specific special characters.
-
-``USES_TERMINAL``
-  The command will be given direct access to the terminal if possible.
-  With the :generator:`Ninja` generator, this places the command in
-  the ``console`` :prop_gbl:`pool <JOB_POOLS>`.
-
-``WORKING_DIRECTORY``
-  Execute the command with the given current working directory.
-  If it is a relative path it will be interpreted relative to the
-  build tree directory corresponding to the current source directory.
-
-  Arguments to ``WORKING_DIRECTORY`` may use
-  :manual:`generator expressions <cmake-generator-expressions(7)>`.
diff --git a/share/cmake-3.18/Help/command/add_dependencies.rst b/share/cmake-3.18/Help/command/add_dependencies.rst
deleted file mode 100644
index de219a5..0000000
--- a/share/cmake-3.18/Help/command/add_dependencies.rst
+++ /dev/null
@@ -1,23 +0,0 @@
-add_dependencies
-----------------
-
-Add a dependency between top-level targets.
-
-.. code-block:: cmake
-
-  add_dependencies(<target> [<target-dependency>]...)
-
-Makes a top-level ``<target>`` depend on other top-level targets to
-ensure that they build before ``<target>`` does.  A top-level target
-is one created by one of the :command:`add_executable`,
-:command:`add_library`, or :command:`add_custom_target` commands
-(but not targets generated by CMake like ``install``).
-
-Dependencies added to an :ref:`imported target <Imported Targets>`
-or an :ref:`interface library <Interface Libraries>` are followed
-transitively in its place since the target itself does not build.
-
-See the ``DEPENDS`` option of :command:`add_custom_target` and
-:command:`add_custom_command` commands for adding file-level
-dependencies in custom rules.  See the :prop_sf:`OBJECT_DEPENDS`
-source file property to add file-level dependencies to object files.
diff --git a/share/cmake-3.18/Help/command/add_executable.rst b/share/cmake-3.18/Help/command/add_executable.rst
deleted file mode 100644
index e073228..0000000
--- a/share/cmake-3.18/Help/command/add_executable.rst
+++ /dev/null
@@ -1,99 +0,0 @@
-add_executable
---------------
-
-.. only:: html
-
-  .. contents::
-
-Add an executable to the project using the specified source files.
-
-Normal Executables
-^^^^^^^^^^^^^^^^^^
-
-.. code-block:: cmake
-
-  add_executable(<name> [WIN32] [MACOSX_BUNDLE]
-                 [EXCLUDE_FROM_ALL]
-                 [source1] [source2 ...])
-
-Adds an executable target called ``<name>`` to be built from the source
-files listed in the command invocation.  (The source files can be omitted
-here if they are added later using :command:`target_sources`.)  The
-``<name>`` corresponds to the logical target name and must be globally
-unique within a project.  The actual file name of the executable built is
-constructed based on conventions of the native platform (such as
-``<name>.exe`` or just ``<name>``).
-
-By default the executable file will be created in the build tree
-directory corresponding to the source tree directory in which the
-command was invoked.  See documentation of the
-:prop_tgt:`RUNTIME_OUTPUT_DIRECTORY` target property to change this
-location.  See documentation of the :prop_tgt:`OUTPUT_NAME` target property
-to change the ``<name>`` part of the final file name.
-
-If ``WIN32`` is given the property :prop_tgt:`WIN32_EXECUTABLE` will be
-set on the target created.  See documentation of that target property for
-details.
-
-If ``MACOSX_BUNDLE`` is given the corresponding property will be set on
-the created target.  See documentation of the :prop_tgt:`MACOSX_BUNDLE`
-target property for details.
-
-If ``EXCLUDE_FROM_ALL`` is given the corresponding property will be set on
-the created target.  See documentation of the :prop_tgt:`EXCLUDE_FROM_ALL`
-target property for details.
-
-Source arguments to ``add_executable`` may use "generator expressions" with
-the syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)`
-manual for available expressions.  See the :manual:`cmake-buildsystem(7)`
-manual for more on defining buildsystem properties.
-
-See also :prop_sf:`HEADER_FILE_ONLY` on what to do if some sources are
-pre-processed, and you want to have the original sources reachable from
-within IDE.
-
-Imported Executables
-^^^^^^^^^^^^^^^^^^^^
-
-.. code-block:: cmake
-
-  add_executable(<name> IMPORTED [GLOBAL])
-
-An :ref:`IMPORTED executable target <Imported Targets>` references an
-executable file located outside the project.  No rules are generated to
-build it, and the :prop_tgt:`IMPORTED` target property is ``True``.  The
-target name has scope in the directory in which it is created and below, but
-the ``GLOBAL`` option extends visibility.  It may be referenced like any
-target built within the project.  ``IMPORTED`` executables are useful
-for convenient reference from commands like :command:`add_custom_command`.
-Details about the imported executable are specified by setting properties
-whose names begin in ``IMPORTED_``.  The most important such property is
-:prop_tgt:`IMPORTED_LOCATION` (and its per-configuration version
-:prop_tgt:`IMPORTED_LOCATION_<CONFIG>`) which specifies the location of
-the main executable file on disk.  See documentation of the ``IMPORTED_*``
-properties for more information.
-
-Alias Executables
-^^^^^^^^^^^^^^^^^
-
-.. code-block:: cmake
-
-  add_executable(<name> ALIAS <target>)
-
-Creates an :ref:`Alias Target <Alias Targets>`, such that ``<name>`` can
-be used to refer to ``<target>`` in subsequent commands.  The ``<name>``
-does not appear in the generated buildsystem as a make target.  The
-``<target>`` may not be an ``ALIAS``.
-
-An ``ALIAS`` to a non-``GLOBAL`` :ref:`Imported Target <Imported Targets>`
-has scope in the directory in which the alias is created and below.
-The :prop_tgt:`ALIAS_GLOBAL` target property can be used to check if the
-alias is global or not.
-
-``ALIAS`` targets can be used as targets to read properties
-from, executables for custom commands and custom targets.  They can also be
-tested for existence with the regular :command:`if(TARGET)` subcommand.
-The ``<name>`` may not be used to modify properties of ``<target>``, that
-is, it may not be used as the operand of :command:`set_property`,
-:command:`set_target_properties`, :command:`target_link_libraries` etc.
-An ``ALIAS`` target may not be installed or exported.
diff --git a/share/cmake-3.18/Help/command/add_library.rst b/share/cmake-3.18/Help/command/add_library.rst
deleted file mode 100644
index 01c415a..0000000
--- a/share/cmake-3.18/Help/command/add_library.rst
+++ /dev/null
@@ -1,187 +0,0 @@
-add_library
------------
-
-.. only:: html
-
-   .. contents::
-
-Add a library to the project using the specified source files.
-
-Normal Libraries
-^^^^^^^^^^^^^^^^
-
-.. code-block:: cmake
-
-  add_library(<name> [STATIC | SHARED | MODULE]
-              [EXCLUDE_FROM_ALL]
-              [source1] [source2 ...])
-
-Adds a library target called ``<name>`` to be built from the source files
-listed in the command invocation.  (The source files can be omitted here
-if they are added later using :command:`target_sources`.)  The ``<name>``
-corresponds to the logical target name and must be globally unique within
-a project.  The actual file name of the library built is constructed based
-on conventions of the native platform (such as ``lib<name>.a`` or
-``<name>.lib``).
-
-``STATIC``, ``SHARED``, or ``MODULE`` may be given to specify the type of
-library to be created.  ``STATIC`` libraries are archives of object files
-for use when linking other targets.  ``SHARED`` libraries are linked
-dynamically and loaded at runtime.  ``MODULE`` libraries are plugins that
-are not linked into other targets but may be loaded dynamically at runtime
-using dlopen-like functionality.  If no type is given explicitly the
-type is ``STATIC`` or ``SHARED`` based on whether the current value of the
-variable :variable:`BUILD_SHARED_LIBS` is ``ON``.  For ``SHARED`` and
-``MODULE`` libraries the :prop_tgt:`POSITION_INDEPENDENT_CODE` target
-property is set to ``ON`` automatically.
-A ``SHARED`` or ``STATIC`` library may be marked with the :prop_tgt:`FRAMEWORK`
-target property to create an macOS Framework.
-
-If a library does not export any symbols, it must not be declared as a
-``SHARED`` library.  For example, a Windows resource DLL or a managed C++/CLI
-DLL that exports no unmanaged symbols would need to be a ``MODULE`` library.
-This is because CMake expects a ``SHARED`` library to always have an
-associated import library on Windows.
-
-By default the library file will be created in the build tree directory
-corresponding to the source tree directory in which the command was
-invoked.  See documentation of the :prop_tgt:`ARCHIVE_OUTPUT_DIRECTORY`,
-:prop_tgt:`LIBRARY_OUTPUT_DIRECTORY`, and
-:prop_tgt:`RUNTIME_OUTPUT_DIRECTORY` target properties to change this
-location.  See documentation of the :prop_tgt:`OUTPUT_NAME` target
-property to change the ``<name>`` part of the final file name.
-
-If ``EXCLUDE_FROM_ALL`` is given the corresponding property will be set on
-the created target.  See documentation of the :prop_tgt:`EXCLUDE_FROM_ALL`
-target property for details.
-
-Source arguments to ``add_library`` may use "generator expressions" with
-the syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)`
-manual for available expressions.  See the :manual:`cmake-buildsystem(7)`
-manual for more on defining buildsystem properties.
-
-See also :prop_sf:`HEADER_FILE_ONLY` on what to do if some sources are
-pre-processed, and you want to have the original sources reachable from
-within IDE.
-
-Imported Libraries
-^^^^^^^^^^^^^^^^^^
-
-.. code-block:: cmake
-
-  add_library(<name> <SHARED|STATIC|MODULE|OBJECT|UNKNOWN> IMPORTED
-              [GLOBAL])
-
-An :ref:`IMPORTED library target <Imported Targets>` references a library
-file located outside the project.  No rules are generated to build it, and
-the :prop_tgt:`IMPORTED` target property is ``True``.  The target name has
-scope in the directory in which it is created and below, but the ``GLOBAL``
-option extends visibility.  It may be referenced like any target built
-within the project.  ``IMPORTED`` libraries are useful for convenient
-reference from commands like :command:`target_link_libraries`.  Details
-about the imported library are specified by setting properties whose names
-begin in ``IMPORTED_`` and ``INTERFACE_``.
-
-The most important properties are:
-
-* :prop_tgt:`IMPORTED_LOCATION` (and its per-configuration
-  variant :prop_tgt:`IMPORTED_LOCATION_<CONFIG>`) which specifies the
-  location of the main library file on disk.
-* :prop_tgt:`IMPORTED_OBJECTS` (and :prop_tgt:`IMPORTED_OBJECTS_<CONFIG>`)
-  for object libraries, specifies the locations of object files on disk.
-* :prop_tgt:`PUBLIC_HEADER` files to be installed during :command:`install` invocation
-
-See documentation of the ``IMPORTED_*`` and ``INTERFACE_*`` properties
-for more information.
-
-An ``UNKNOWN`` library type is typically only used in the implementation of
-:ref:`Find Modules`.  It allows the path to an imported library (often found
-using the :command:`find_library` command) to be used without having to know
-what type of library it is.  This is especially useful on Windows where a
-static library and a DLL's import library both have the same file extension.
-
-Object Libraries
-^^^^^^^^^^^^^^^^
-
-.. code-block:: cmake
-
-  add_library(<name> OBJECT <src>...)
-
-Creates an :ref:`Object Library <Object Libraries>`.  An object library
-compiles source files but does not archive or link their object files into a
-library.  Instead other targets created by :command:`add_library` or
-:command:`add_executable` may reference the objects using an expression of the
-form ``$<TARGET_OBJECTS:objlib>`` as a source, where ``objlib`` is the
-object library name.  For example:
-
-.. code-block:: cmake
-
-  add_library(... $<TARGET_OBJECTS:objlib> ...)
-  add_executable(... $<TARGET_OBJECTS:objlib> ...)
-
-will include objlib's object files in a library and an executable
-along with those compiled from their own sources.  Object libraries
-may contain only sources that compile, header files, and other files
-that would not affect linking of a normal library (e.g. ``.txt``).
-They may contain custom commands generating such sources, but not
-``PRE_BUILD``, ``PRE_LINK``, or ``POST_BUILD`` commands.  Some native build
-systems (such as Xcode) may not like targets that have only object files, so
-consider adding at least one real source file to any target that references
-``$<TARGET_OBJECTS:objlib>``.
-
-Alias Libraries
-^^^^^^^^^^^^^^^
-
-.. code-block:: cmake
-
-  add_library(<name> ALIAS <target>)
-
-Creates an :ref:`Alias Target <Alias Targets>`, such that ``<name>`` can be
-used to refer to ``<target>`` in subsequent commands.  The ``<name>`` does
-not appear in the generated buildsystem as a make target.  The ``<target>``
-may not be an ``ALIAS``.
-
-An ``ALIAS`` to a non-``GLOBAL`` :ref:`Imported Target <Imported Targets>`
-has scope in the directory in which the alias is created and below.
-The :prop_tgt:`ALIAS_GLOBAL` target property can be used to check if the
-alias is global or not.
-
-``ALIAS`` targets can be used as linkable targets and as targets to
-read properties from.  They can also be tested for existence with the
-regular :command:`if(TARGET)` subcommand.  The ``<name>`` may not be used
-to modify properties of ``<target>``, that is, it may not be used as the
-operand of :command:`set_property`, :command:`set_target_properties`,
-:command:`target_link_libraries` etc.  An ``ALIAS`` target may not be
-installed or exported.
-
-Interface Libraries
-^^^^^^^^^^^^^^^^^^^
-
-.. code-block:: cmake
-
-  add_library(<name> INTERFACE [IMPORTED [GLOBAL]])
-
-Creates an :ref:`Interface Library <Interface Libraries>`.  An ``INTERFACE``
-library target does not directly create build output, though it may
-have properties set on it and it may be installed, exported and
-imported. Typically the ``INTERFACE_*`` properties are populated on
-the interface target using the commands:
-
-* :command:`set_property`,
-* :command:`target_link_libraries(INTERFACE)`,
-* :command:`target_link_options(INTERFACE)`,
-* :command:`target_include_directories(INTERFACE)`,
-* :command:`target_compile_options(INTERFACE)`,
-* :command:`target_compile_definitions(INTERFACE)`, and
-* :command:`target_sources(INTERFACE)`,
-
-and then it is used as an argument to :command:`target_link_libraries`
-like any other target.
-
-An ``INTERFACE`` :ref:`Imported Target <Imported Targets>` may also be
-created with this signature.  An ``IMPORTED`` library target references a
-library defined outside the project.  The target name has scope in the
-directory in which it is created and below, but the ``GLOBAL`` option
-extends visibility.  It may be referenced like any target built within
-the project.  ``IMPORTED`` libraries are useful for convenient reference
-from commands like :command:`target_link_libraries`.
diff --git a/share/cmake-3.18/Help/command/add_link_options.rst b/share/cmake-3.18/Help/command/add_link_options.rst
deleted file mode 100644
index faa4afb..0000000
--- a/share/cmake-3.18/Help/command/add_link_options.rst
+++ /dev/null
@@ -1,33 +0,0 @@
-add_link_options
-----------------
-
-Add options to the link step for executable, shared library or module
-library targets in the current directory and below that are added after
-this command is invoked.
-
-.. code-block:: cmake
-
-  add_link_options(<option> ...)
-
-This command can be used to add any link options, but alternative commands
-exist to add libraries (:command:`target_link_libraries` or
-:command:`link_libraries`).  See documentation of the
-:prop_dir:`directory <LINK_OPTIONS>` and
-:prop_tgt:`target <LINK_OPTIONS>` ``LINK_OPTIONS`` properties.
-
-.. note::
-
-  This command cannot be used to add options for static library targets,
-  since they do not use a linker.  To add archiver or MSVC librarian flags,
-  see the :prop_tgt:`STATIC_LIBRARY_OPTIONS` target property.
-
-Arguments to ``add_link_options`` may use "generator expressions" with
-the syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)`
-manual for available expressions.  See the :manual:`cmake-buildsystem(7)`
-manual for more on defining buildsystem properties.
-
-.. include:: DEVICE_LINK_OPTIONS.txt
-
-.. include:: OPTIONS_SHELL.txt
-
-.. include:: LINK_OPTIONS_LINKER.txt
diff --git a/share/cmake-3.18/Help/command/add_test.rst b/share/cmake-3.18/Help/command/add_test.rst
deleted file mode 100644
index a77ba37..0000000
--- a/share/cmake-3.18/Help/command/add_test.rst
+++ /dev/null
@@ -1,76 +0,0 @@
-add_test
---------
-
-Add a test to the project to be run by :manual:`ctest(1)`.
-
-.. code-block:: cmake
-
-  add_test(NAME <name> COMMAND <command> [<arg>...]
-           [CONFIGURATIONS <config>...]
-           [WORKING_DIRECTORY <dir>]
-           [COMMAND_EXPAND_LISTS])
-
-Adds a test called ``<name>``.  The test name may not contain spaces,
-quotes, or other characters special in CMake syntax.  The options are:
-
-``COMMAND``
-  Specify the test command-line.  If ``<command>`` specifies an
-  executable target (created by :command:`add_executable`) it will
-  automatically be replaced by the location of the executable created
-  at build time.
-
-``CONFIGURATIONS``
-  Restrict execution of the test only to the named configurations.
-
-``WORKING_DIRECTORY``
-  Set the :prop_test:`WORKING_DIRECTORY` test property to
-  specify the working directory in which to execute the test.
-  If not specified the test will be run with the current working
-  directory set to the build directory corresponding to the
-  current source directory.
-
-``COMMAND_EXPAND_LISTS``
-  Lists in ``COMMAND`` arguments will be expanded, including those
-  created with
-  :manual:`generator expressions <cmake-generator-expressions(7)>`.
-
-The given test command is expected to exit with code ``0`` to pass and
-non-zero to fail, or vice-versa if the :prop_test:`WILL_FAIL` test
-property is set.  Any output written to stdout or stderr will be
-captured by :manual:`ctest(1)` but does not affect the pass/fail status
-unless the :prop_test:`PASS_REGULAR_EXPRESSION`,
-:prop_test:`FAIL_REGULAR_EXPRESSION` or
-:prop_test:`SKIP_REGULAR_EXPRESSION` test property is used.
-
-The ``COMMAND`` and ``WORKING_DIRECTORY`` options may use "generator
-expressions" with the syntax ``$<...>``.  See the
-:manual:`cmake-generator-expressions(7)` manual for available expressions.
-
-Example usage:
-
-.. code-block:: cmake
-
-  add_test(NAME mytest
-           COMMAND testDriver --config $<CONFIGURATION>
-                              --exe $<TARGET_FILE:myexe>)
-
-This creates a test ``mytest`` whose command runs a ``testDriver`` tool
-passing the configuration name and the full path to the executable
-file produced by target ``myexe``.
-
-.. note::
-
-  CMake will generate tests only if the :command:`enable_testing`
-  command has been invoked.  The :module:`CTest` module invokes the
-  command automatically unless the ``BUILD_TESTING`` option is turned
-  ``OFF``.
-
----------------------------------------------------------------------
-
-.. code-block:: cmake
-
-  add_test(<name> <command> [<arg>...])
-
-Add a test called ``<name>`` with the given command-line.  Unlike
-the above ``NAME`` signature no transformation is performed on the
-command-line to support target names or generator expressions.
diff --git a/share/cmake-3.18/Help/command/build_command.rst b/share/cmake-3.18/Help/command/build_command.rst
deleted file mode 100644
index 6659005..0000000
--- a/share/cmake-3.18/Help/command/build_command.rst
+++ /dev/null
@@ -1,45 +0,0 @@
-build_command
--------------
-
-Get a command line to build the current project.
-This is mainly intended for internal use by the :module:`CTest` module.
-
-.. code-block:: cmake
-
-  build_command(<variable>
-                [CONFIGURATION <config>]
-                [TARGET <target>]
-                [PROJECT_NAME <projname>] # legacy, causes warning
-               )
-
-Sets the given ``<variable>`` to a command-line string of the form::
-
- <cmake> --build . [--config <config>] [--target <target>...] [-- -i]
-
-where ``<cmake>`` is the location of the :manual:`cmake(1)` command-line
-tool, and ``<config>`` and ``<target>`` are the values provided to the
-``CONFIGURATION`` and ``TARGET`` options, if any.  The trailing ``-- -i``
-option is added for :ref:`Makefile Generators` if policy :policy:`CMP0061`
-is not set to ``NEW``.
-
-When invoked, this ``cmake --build`` command line will launch the
-underlying build system tool.
-
-.. code-block:: cmake
-
-  build_command(<cachevariable> <makecommand>)
-
-This second signature is deprecated, but still available for backwards
-compatibility.  Use the first signature instead.
-
-It sets the given ``<cachevariable>`` to a command-line string as
-above but without the ``--target`` option.
-The ``<makecommand>`` is ignored but should be the full path to
-devenv, nmake, make or one of the end user build tools
-for legacy invocations.
-
-.. note::
- In CMake versions prior to 3.0 this command returned a command
- line that directly invokes the native build tool for the current
- generator.  Their implementation of the ``PROJECT_NAME`` option
- had no useful effects, so CMake now warns on use of the option.
diff --git a/share/cmake-3.18/Help/command/cmake_host_system_information.rst b/share/cmake-3.18/Help/command/cmake_host_system_information.rst
deleted file mode 100644
index 2e9563a..0000000
--- a/share/cmake-3.18/Help/command/cmake_host_system_information.rst
+++ /dev/null
@@ -1,50 +0,0 @@
-cmake_host_system_information
------------------------------
-
-Query host system specific information.
-
-.. code-block:: cmake
-
-  cmake_host_system_information(RESULT <variable> QUERY <key> ...)
-
-Queries system information of the host system on which cmake runs.
-One or more ``<key>`` can be provided to select the information to be
-queried.  The list of queried values is stored in ``<variable>``.
-
-``<key>`` can be one of the following values:
-
-============================= ================================================
-Key                           Description
-============================= ================================================
-``NUMBER_OF_LOGICAL_CORES``   Number of logical cores
-``NUMBER_OF_PHYSICAL_CORES``  Number of physical cores
-``HOSTNAME``                  Hostname
-``FQDN``                      Fully qualified domain name
-``TOTAL_VIRTUAL_MEMORY``      Total virtual memory in MiB [#mebibytes]_
-``AVAILABLE_VIRTUAL_MEMORY``  Available virtual memory in MiB [#mebibytes]_
-``TOTAL_PHYSICAL_MEMORY``     Total physical memory in MiB [#mebibytes]_
-``AVAILABLE_PHYSICAL_MEMORY`` Available physical memory in MiB [#mebibytes]_
-``IS_64BIT``                  One if processor is 64Bit
-``HAS_FPU``                   One if processor has floating point unit
-``HAS_MMX``                   One if processor supports MMX instructions
-``HAS_MMX_PLUS``              One if processor supports Ext. MMX instructions
-``HAS_SSE``                   One if processor supports SSE instructions
-``HAS_SSE2``                  One if processor supports SSE2 instructions
-``HAS_SSE_FP``                One if processor supports SSE FP instructions
-``HAS_SSE_MMX``               One if processor supports SSE MMX instructions
-``HAS_AMD_3DNOW``             One if processor supports 3DNow instructions
-``HAS_AMD_3DNOW_PLUS``        One if processor supports 3DNow+ instructions
-``HAS_IA64``                  One if IA64 processor emulating x86
-``HAS_SERIAL_NUMBER``         One if processor has serial number
-``PROCESSOR_SERIAL_NUMBER``   Processor serial number
-``PROCESSOR_NAME``            Human readable processor name
-``PROCESSOR_DESCRIPTION``     Human readable full processor description
-``OS_NAME``                   See :variable:`CMAKE_HOST_SYSTEM_NAME`
-``OS_RELEASE``                The OS sub-type e.g. on Windows ``Professional``
-``OS_VERSION``                The OS build ID
-``OS_PLATFORM``               See :variable:`CMAKE_HOST_SYSTEM_PROCESSOR`
-============================= ================================================
-
-.. rubric:: Footnotes
-
-.. [#mebibytes] One MiB (mebibyte) is equal to 1024x1024 bytes.
diff --git a/share/cmake-3.18/Help/command/cmake_language.rst b/share/cmake-3.18/Help/command/cmake_language.rst
deleted file mode 100644
index 0988097..0000000
--- a/share/cmake-3.18/Help/command/cmake_language.rst
+++ /dev/null
@@ -1,99 +0,0 @@
-cmake_language
---------------
-
-Call meta-operations on CMake commands.
-
-Synopsis
-^^^^^^^^
-
-.. parsed-literal::
-
-  cmake_language(`CALL`_ <command> [<args>...])
-  cmake_language(`EVAL`_ CODE <code>...)
-
-Introduction
-^^^^^^^^^^^^
-
-This command will call meta-operations on built-in CMake commands or
-those created via the :command:`macro` or :command:`function` commands.
-
-``cmake_language`` does not introduce a new variable or policy scope.
-
-Calling Commands
-^^^^^^^^^^^^^^^^
-
-.. _CALL:
-
-.. code-block:: cmake
-
-  cmake_language(CALL <command> [<args>...])
-
-Calls the named ``<command>`` with the given arguments (if any).
-For example, the code:
-
-.. code-block:: cmake
-
-  set(message_command "message")
-  cmake_language(CALL ${message_command} STATUS "Hello World!")
-
-is equivalent to
-
-.. code-block:: cmake
-
-  message(STATUS "Hello World!")
-
-.. note::
-  To ensure consistency of the code, the following commands are not allowed:
-
-  * ``if`` / ``elseif`` / ``else`` / ``endif``
-  * ``while`` / ``endwhile``
-  * ``foreach`` / ``endforeach``
-  * ``function`` / ``endfunction``
-  * ``macro`` / ``endmacro``
-
-Evaluating Code
-^^^^^^^^^^^^^^^
-
-.. _EVAL:
-
-.. code-block:: cmake
-
-  cmake_language(EVAL CODE <code>...)
-
-Evaluates the ``<code>...`` as CMake code.
-
-For example, the code:
-
-.. code-block:: cmake
-
-  set(A TRUE)
-  set(B TRUE)
-  set(C TRUE)
-  set(condition "(A AND B) OR C")
-
-  cmake_language(EVAL CODE "
-    if (${condition})
-      message(STATUS TRUE)
-    else()
-      message(STATUS FALSE)
-    endif()"
-  )
-
-is equivalent to
-
-.. code-block:: cmake
-
-  set(A TRUE)
-  set(B TRUE)
-  set(C TRUE)
-  set(condition "(A AND B) OR C")
-
-  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/eval.cmake "
-    if (${condition})
-      message(STATUS TRUE)
-    else()
-      message(STATUS FALSE)
-    endif()"
-  )
-
-  include(${CMAKE_CURRENT_BINARY_DIR}/eval.cmake)
diff --git a/share/cmake-3.18/Help/command/cmake_minimum_required.rst b/share/cmake-3.18/Help/command/cmake_minimum_required.rst
deleted file mode 100644
index e6ebcf0..0000000
--- a/share/cmake-3.18/Help/command/cmake_minimum_required.rst
+++ /dev/null
@@ -1,68 +0,0 @@
-cmake_minimum_required
-----------------------
-
-Require a minimum version of cmake.
-
-.. code-block:: cmake
-
-  cmake_minimum_required(VERSION <min>[...<max>] [FATAL_ERROR])
-
-Sets the minimum required version of cmake for a project.
-Also updates the policy settings as explained below.
-
-``<min>`` and the optional ``<max>`` are each CMake versions of the form
-``major.minor[.patch[.tweak]]``, and the ``...`` is literal.
-
-If the running version of CMake is lower than the ``<min>`` required
-version it will stop processing the project and report an error.
-The optional ``<max>`` version, if specified, must be at least the
-``<min>`` version and affects policy settings as described below.
-If the running version of CMake is older than 3.12, the extra ``...``
-dots will be seen as version component separators, resulting in the
-``...<max>`` part being ignored and preserving the pre-3.12 behavior
-of basing policies on ``<min>``.
-
-The ``FATAL_ERROR`` option is accepted but ignored by CMake 2.6 and
-higher.  It should be specified so CMake versions 2.4 and lower fail
-with an error instead of just a warning.
-
-.. note::
-  Call the ``cmake_minimum_required()`` command at the beginning of
-  the top-level ``CMakeLists.txt`` file even before calling the
-  :command:`project` command.  It is important to establish version
-  and policy settings before invoking other commands whose behavior
-  they may affect.  See also policy :policy:`CMP0000`.
-
-  Calling ``cmake_minimum_required()`` inside a :command:`function`
-  limits some effects to the function scope when invoked.  Such calls
-  should not be made with the intention of having global effects.
-
-Policy Settings
-^^^^^^^^^^^^^^^
-
-The ``cmake_minimum_required(VERSION)`` command implicitly invokes the
-:command:`cmake_policy(VERSION)` command to specify that the current
-project code is written for the given range of CMake versions.
-All policies known to the running version of CMake and introduced
-in the ``<min>`` (or ``<max>``, if specified) version or earlier will
-be set to use ``NEW`` behavior.  All policies introduced in later
-versions will be unset.  This effectively requests behavior preferred
-as of a given CMake version and tells newer CMake versions to warn
-about their new policies.
-
-When a ``<min>`` version higher than 2.4 is specified the command
-implicitly invokes
-
-.. code-block:: cmake
-
-  cmake_policy(VERSION <min>[...<max>])
-
-which sets CMake policies based on the range of versions specified.
-When a ``<min>`` version 2.4 or lower is given the command implicitly
-invokes
-
-.. code-block:: cmake
-
-  cmake_policy(VERSION 2.4[...<max>])
-
-which enables compatibility features for CMake 2.4 and lower.
diff --git a/share/cmake-3.18/Help/command/cmake_parse_arguments.rst b/share/cmake-3.18/Help/command/cmake_parse_arguments.rst
deleted file mode 100644
index fcd36d0..0000000
--- a/share/cmake-3.18/Help/command/cmake_parse_arguments.rst
+++ /dev/null
@@ -1,109 +0,0 @@
-cmake_parse_arguments
----------------------
-
-Parse function or macro arguments.
-
-.. code-block:: cmake
-
-  cmake_parse_arguments(<prefix> <options> <one_value_keywords>
-                        <multi_value_keywords> <args>...)
-
-  cmake_parse_arguments(PARSE_ARGV <N> <prefix> <options>
-                        <one_value_keywords> <multi_value_keywords>)
-
-This command is for use in macros or functions.
-It processes the arguments given to that macro or function,
-and defines a set of variables which hold the values of the
-respective options.
-
-The first signature reads processes arguments passed in the ``<args>...``.
-This may be used in either a :command:`macro` or a :command:`function`.
-
-The ``PARSE_ARGV`` signature is only for use in a :command:`function`
-body.  In this case the arguments that are parsed come from the
-``ARGV#`` variables of the calling function.  The parsing starts with
-the ``<N>``-th argument, where ``<N>`` is an unsigned integer.  This allows for
-the values to have special characters like ``;`` in them.
-
-The ``<options>`` argument contains all options for the respective macro,
-i.e.  keywords which can be used when calling the macro without any value
-following, like e.g.  the ``OPTIONAL`` keyword of the :command:`install`
-command.
-
-The ``<one_value_keywords>`` argument contains all keywords for this macro
-which are followed by one value, like e.g. ``DESTINATION`` keyword of the
-:command:`install` command.
-
-The ``<multi_value_keywords>`` argument contains all keywords for this
-macro which can be followed by more than one value, like e.g. the
-``TARGETS`` or ``FILES`` keywords of the :command:`install` command.
-
-.. note::
-
-   All keywords shall be unique. I.e. every keyword shall only be specified
-   once in either ``<options>``, ``<one_value_keywords>`` or
-   ``<multi_value_keywords>``. A warning will be emitted if uniqueness is
-   violated.
-
-When done, ``cmake_parse_arguments`` will consider for each of the
-keywords listed in ``<options>``, ``<one_value_keywords>`` and
-``<multi_value_keywords>`` a variable composed of the given ``<prefix>``
-followed by ``"_"`` and the name of the respective keyword.  These
-variables will then hold the respective value from the argument list
-or be undefined if the associated option could not be found.
-For the ``<options>`` keywords, these will always be defined,
-to ``TRUE`` or ``FALSE``, whether the option is in the argument list or not.
-
-All remaining arguments are collected in a variable
-``<prefix>_UNPARSED_ARGUMENTS`` that will be undefined if all arguments
-were recognized. This can be checked afterwards to see
-whether your macro was called with unrecognized parameters.
-
-``<one_value_keywords>`` and ``<multi_value_keywords>`` that were given no
-values at all are collected in a variable ``<prefix>_KEYWORDS_MISSING_VALUES``
-that will be undefined if all keywords received values. This can be checked
-to see if there were keywords without any values given.
-
-Consider the following example macro, ``my_install()``, which takes similar
-arguments to the real :command:`install` command:
-
-.. code-block:: cmake
-
-   macro(my_install)
-       set(options OPTIONAL FAST)
-       set(oneValueArgs DESTINATION RENAME)
-       set(multiValueArgs TARGETS CONFIGURATIONS)
-       cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}"
-                             "${multiValueArgs}" ${ARGN} )
-
-       # ...
-
-Assume ``my_install()`` has been called like this:
-
-.. code-block:: cmake
-
-   my_install(TARGETS foo bar DESTINATION bin OPTIONAL blub CONFIGURATIONS)
-
-After the ``cmake_parse_arguments`` call the macro will have set or undefined
-the following variables::
-
-   MY_INSTALL_OPTIONAL = TRUE
-   MY_INSTALL_FAST = FALSE # was not used in call to my_install
-   MY_INSTALL_DESTINATION = "bin"
-   MY_INSTALL_RENAME <UNDEFINED> # was not used
-   MY_INSTALL_TARGETS = "foo;bar"
-   MY_INSTALL_CONFIGURATIONS <UNDEFINED> # was not used
-   MY_INSTALL_UNPARSED_ARGUMENTS = "blub" # nothing expected after "OPTIONAL"
-   MY_INSTALL_KEYWORDS_MISSING_VALUES = "CONFIGURATIONS"
-            # No value for "CONFIGURATIONS" given
-
-You can then continue and process these variables.
-
-Keywords terminate lists of values, e.g. if directly after a
-``one_value_keyword`` another recognized keyword follows, this is
-interpreted as the beginning of the new option.  E.g.
-``my_install(TARGETS foo DESTINATION OPTIONAL)`` would result in
-``MY_INSTALL_DESTINATION`` set to ``"OPTIONAL"``, but as ``OPTIONAL``
-is a keyword itself ``MY_INSTALL_DESTINATION`` will be empty (but added
-to ``MY_INSTALL_KEYWORDS_MISSING_VALUES``) and ``MY_INSTALL_OPTIONAL`` will
-therefore be set to ``TRUE``.
diff --git a/share/cmake-3.18/Help/command/cmake_policy.rst b/share/cmake-3.18/Help/command/cmake_policy.rst
deleted file mode 100644
index 4bc7807..0000000
--- a/share/cmake-3.18/Help/command/cmake_policy.rst
+++ /dev/null
@@ -1,108 +0,0 @@
-cmake_policy
-------------
-
-Manage CMake Policy settings.  See the :manual:`cmake-policies(7)`
-manual for defined policies.
-
-As CMake evolves it is sometimes necessary to change existing behavior
-in order to fix bugs or improve implementations of existing features.
-The CMake Policy mechanism is designed to help keep existing projects
-building as new versions of CMake introduce changes in behavior.  Each
-new policy (behavioral change) is given an identifier of the form
-``CMP<NNNN>`` where ``<NNNN>`` is an integer index.  Documentation
-associated with each policy describes the ``OLD`` and ``NEW`` behavior
-and the reason the policy was introduced.  Projects may set each policy
-to select the desired behavior.  When CMake needs to know which behavior
-to use it checks for a setting specified by the project.  If no
-setting is available the ``OLD`` behavior is assumed and a warning is
-produced requesting that the policy be set.
-
-Setting Policies by CMake Version
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The ``cmake_policy`` command is used to set policies to ``OLD`` or ``NEW``
-behavior.  While setting policies individually is supported, we
-encourage projects to set policies based on CMake versions:
-
-.. code-block:: cmake
-
-  cmake_policy(VERSION <min>[...<max>])
-
-``<min>`` and the optional ``<max>`` are each CMake versions of the form
-``major.minor[.patch[.tweak]]``, and the ``...`` is literal.  The ``<min>``
-version must be at least ``2.4`` and at most the running version of CMake.
-The ``<max>`` version, if specified, must be at least the ``<min>`` version
-but may exceed the running version of CMake.  If the running version of
-CMake is older than 3.12, the extra ``...`` dots will be seen as version
-component separators, resulting in the ``...<max>`` part being ignored and
-preserving the pre-3.12 behavior of basing policies on ``<min>``.
-
-This specifies that the current CMake code is written for the given
-range of CMake versions.  All policies known to the running version of CMake
-and introduced in the ``<min>`` (or ``<max>``, if specified) version
-or earlier will be set to use ``NEW`` behavior.  All policies
-introduced in later versions will be unset (unless the
-:variable:`CMAKE_POLICY_DEFAULT_CMP<NNNN>` variable sets a default).
-This effectively requests behavior preferred as of a given CMake
-version and tells newer CMake versions to warn about their new policies.
-
-Note that the :command:`cmake_minimum_required(VERSION)`
-command implicitly calls ``cmake_policy(VERSION)`` too.
-
-Setting Policies Explicitly
-^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. code-block:: cmake
-
-  cmake_policy(SET CMP<NNNN> NEW)
-  cmake_policy(SET CMP<NNNN> OLD)
-
-Tell CMake to use the ``OLD`` or ``NEW`` behavior for a given policy.
-Projects depending on the old behavior of a given policy may silence a
-policy warning by setting the policy state to ``OLD``.  Alternatively
-one may fix the project to work with the new behavior and set the
-policy state to ``NEW``.
-
-.. include:: ../policy/DEPRECATED.txt
-
-Checking Policy Settings
-^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. code-block:: cmake
-
-  cmake_policy(GET CMP<NNNN> <variable>)
-
-Check whether a given policy is set to ``OLD`` or ``NEW`` behavior.
-The output ``<variable>`` value will be ``OLD`` or ``NEW`` if the
-policy is set, and empty otherwise.
-
-CMake Policy Stack
-^^^^^^^^^^^^^^^^^^
-
-CMake keeps policy settings on a stack, so changes made by the
-``cmake_policy`` command affect only the top of the stack.  A new entry on
-the policy stack is managed automatically for each subdirectory to
-protect its parents and siblings.  CMake also manages a new entry for
-scripts loaded by :command:`include` and :command:`find_package` commands
-except when invoked with the ``NO_POLICY_SCOPE`` option
-(see also policy :policy:`CMP0011`).
-The ``cmake_policy`` command provides an interface to manage custom
-entries on the policy stack:
-
-.. code-block:: cmake
-
-  cmake_policy(PUSH)
-  cmake_policy(POP)
-
-Each ``PUSH`` must have a matching ``POP`` to erase any changes.
-This is useful to make temporary changes to policy settings.
-Calls to the :command:`cmake_minimum_required(VERSION)`,
-``cmake_policy(VERSION)``, or ``cmake_policy(SET)`` commands
-influence only the current top of the policy stack.
-
-Commands created by the :command:`function` and :command:`macro`
-commands record policy settings when they are created and
-use the pre-record policies when they are invoked.  If the function or
-macro implementation sets policies, the changes automatically
-propagate up through callers until they reach the closest nested
-policy stack entry.
diff --git a/share/cmake-3.18/Help/command/configure_file.rst b/share/cmake-3.18/Help/command/configure_file.rst
deleted file mode 100644
index 29e85bd..0000000
--- a/share/cmake-3.18/Help/command/configure_file.rst
+++ /dev/null
@@ -1,135 +0,0 @@
-configure_file
---------------
-
-Copy a file to another location and modify its contents.
-
-.. code-block:: cmake
-
-  configure_file(<input> <output>
-                 [COPYONLY] [ESCAPE_QUOTES] [@ONLY]
-                 [NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])
-
-Copies an ``<input>`` file to an ``<output>`` file and substitutes
-variable values referenced as ``@VAR@`` or ``${VAR}`` in the input
-file content.  Each variable reference will be replaced with the
-current value of the variable, or the empty string if the variable
-is not defined.  Furthermore, input lines of the form
-
-.. code-block:: c
-
-  #cmakedefine VAR ...
-
-will be replaced with either
-
-.. code-block:: c
-
-  #define VAR ...
-
-or
-
-.. code-block:: c
-
-  /* #undef VAR */
-
-depending on whether ``VAR`` is set in CMake to any value not considered
-a false constant by the :command:`if` command.  The "..." content on the
-line after the variable name, if any, is processed as above.
-Input file lines of the form ``#cmakedefine01 VAR`` will be replaced with
-either ``#define VAR 1`` or ``#define VAR 0`` similarly.
-The result lines (with the exception of the ``#undef`` comments) can be
-indented using spaces and/or tabs between the ``#`` character
-and the ``cmakedefine`` or ``cmakedefine01`` words. This whitespace
-indentation will be preserved in the output lines:
-
-.. code-block:: c
-
-  #  cmakedefine VAR
-  #  cmakedefine01 VAR
-
-will be replaced, if ``VAR`` is defined, with
-
-.. code-block:: c
-
-  #  define VAR
-  #  define VAR 1
-
-If the input file is modified the build system will re-run CMake to
-re-configure the file and generate the build system again.
-The generated file is modified and its timestamp updated on subsequent
-cmake runs only if its content is changed.
-
-The arguments are:
-
-``<input>``
-  Path to the input file.  A relative path is treated with respect to
-  the value of :variable:`CMAKE_CURRENT_SOURCE_DIR`.  The input path
-  must be a file, not a directory.
-
-``<output>``
-  Path to the output file or directory.  A relative path is treated
-  with respect to the value of :variable:`CMAKE_CURRENT_BINARY_DIR`.
-  If the path names an existing directory the output file is placed
-  in that directory with the same file name as the input file.
-
-``COPYONLY``
-  Copy the file without replacing any variable references or other
-  content.  This option may not be used with ``NEWLINE_STYLE``.
-
-``ESCAPE_QUOTES``
-  Escape any substituted quotes with backslashes (C-style).
-
-``@ONLY``
-  Restrict variable replacement to references of the form ``@VAR@``.
-  This is useful for configuring scripts that use ``${VAR}`` syntax.
-
-``NEWLINE_STYLE <style>``
-  Specify the newline style for the output file.  Specify
-  ``UNIX`` or ``LF`` for ``\n`` newlines, or specify
-  ``DOS``, ``WIN32``, or ``CRLF`` for ``\r\n`` newlines.
-  This option may not be used with ``COPYONLY``.
-
-Example
-^^^^^^^
-
-Consider a source tree containing a ``foo.h.in`` file:
-
-.. code-block:: c
-
-  #cmakedefine FOO_ENABLE
-  #cmakedefine FOO_STRING "@FOO_STRING@"
-
-An adjacent ``CMakeLists.txt`` may use ``configure_file`` to
-configure the header:
-
-.. code-block:: cmake
-
-  option(FOO_ENABLE "Enable Foo" ON)
-  if(FOO_ENABLE)
-    set(FOO_STRING "foo")
-  endif()
-  configure_file(foo.h.in foo.h @ONLY)
-
-This creates a ``foo.h`` in the build directory corresponding to
-this source directory.  If the ``FOO_ENABLE`` option is on, the
-configured file will contain:
-
-.. code-block:: c
-
-  #define FOO_ENABLE
-  #define FOO_STRING "foo"
-
-Otherwise it will contain:
-
-.. code-block:: c
-
-  /* #undef FOO_ENABLE */
-  /* #undef FOO_STRING */
-
-One may then use the :command:`include_directories` command to
-specify the output directory as an include directory:
-
-.. code-block:: cmake
-
-  include_directories(${CMAKE_CURRENT_BINARY_DIR})
-
-so that sources may include the header as ``#include <foo.h>``.
diff --git a/share/cmake-3.18/Help/command/continue.rst b/share/cmake-3.18/Help/command/continue.rst
deleted file mode 100644
index 31c7089..0000000
--- a/share/cmake-3.18/Help/command/continue.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-continue
---------
-
-Continue to the top of enclosing foreach or while loop.
-
-.. code-block:: cmake
-
-  continue()
-
-The ``continue`` command allows a cmake script to abort the rest of a block
-in a :command:`foreach` or :command:`while` loop, and start at the top of
-the next iteration.
-
-See also the :command:`break` command.
diff --git a/share/cmake-3.18/Help/command/ctest_build.rst b/share/cmake-3.18/Help/command/ctest_build.rst
deleted file mode 100644
index 66e1844..0000000
--- a/share/cmake-3.18/Help/command/ctest_build.rst
+++ /dev/null
@@ -1,78 +0,0 @@
-ctest_build
------------
-
-Perform the :ref:`CTest Build Step` as a :ref:`Dashboard Client`.
-
-::
-
-  ctest_build([BUILD <build-dir>] [APPEND]
-              [CONFIGURATION <config>]
-              [FLAGS <flags>]
-              [PROJECT_NAME <project-name>]
-              [TARGET <target-name>]
-              [NUMBER_ERRORS <num-err-var>]
-              [NUMBER_WARNINGS <num-warn-var>]
-              [RETURN_VALUE <result-var>]
-              [CAPTURE_CMAKE_ERROR <result-var>]
-              )
-
-Build the project and store results in ``Build.xml``
-for submission with the :command:`ctest_submit` command.
-
-The :variable:`CTEST_BUILD_COMMAND` variable may be set to explicitly
-specify the build command line.  Otherwise the build command line is
-computed automatically based on the options given.
-
-The options are:
-
-``BUILD <build-dir>``
-  Specify the top-level build directory.  If not given, the
-  :variable:`CTEST_BINARY_DIRECTORY` variable is used.
-
-``APPEND``
-  Mark ``Build.xml`` for append to results previously submitted to a
-  dashboard server since the last :command:`ctest_start` call.
-  Append semantics are defined by the dashboard server in use.
-  This does *not* cause results to be appended to a ``.xml`` file
-  produced by a previous call to this command.
-
-``CONFIGURATION <config>``
-  Specify the build configuration (e.g. ``Debug``).  If not
-  specified the ``CTEST_BUILD_CONFIGURATION`` variable will be checked.
-  Otherwise the ``-C <cfg>`` option given to the :manual:`ctest(1)`
-  command will be used, if any.
-
-``FLAGS <flags>``
-  Pass additional arguments to the underlying build command.
-  If not specified the ``CTEST_BUILD_FLAGS`` variable will be checked.
-  This can, e.g., be used to trigger a parallel build using the
-  ``-j`` option of make. See the :module:`ProcessorCount` module
-  for an example.
-
-``PROJECT_NAME <project-name>``
-  Ignored.  This was once used but is no longer needed.
-
-``TARGET <target-name>``
-  Specify the name of a target to build.  If not specified the
-  ``CTEST_BUILD_TARGET`` variable will be checked.  Otherwise the
-  default target will be built.  This is the "all" target
-  (called ``ALL_BUILD`` in :ref:`Visual Studio Generators`).
-
-``NUMBER_ERRORS <num-err-var>``
-  Store the number of build errors detected in the given variable.
-
-``NUMBER_WARNINGS <num-warn-var>``
-  Store the number of build warnings detected in the given variable.
-
-``RETURN_VALUE <result-var>``
-  Store the return value of the native build tool in the given variable.
-
-``CAPTURE_CMAKE_ERROR <result-var>``
-  Store in the ``<result-var>`` variable -1 if there are any errors running
-  the command and prevent ctest from returning non-zero if an error occurs.
-
-``QUIET``
-  Suppress any CTest-specific non-error output that would have been
-  printed to the console otherwise.  The summary of warnings / errors,
-  as well as the output from the native build tool is unaffected by
-  this option.
diff --git a/share/cmake-3.18/Help/command/ctest_configure.rst b/share/cmake-3.18/Help/command/ctest_configure.rst
deleted file mode 100644
index 2dea07b..0000000
--- a/share/cmake-3.18/Help/command/ctest_configure.rst
+++ /dev/null
@@ -1,46 +0,0 @@
-ctest_configure
----------------
-
-Perform the :ref:`CTest Configure Step` as a :ref:`Dashboard Client`.
-
-::
-
-  ctest_configure([BUILD <build-dir>] [SOURCE <source-dir>] [APPEND]
-                  [OPTIONS <options>] [RETURN_VALUE <result-var>] [QUIET]
-                  [CAPTURE_CMAKE_ERROR <result-var>])
-
-Configure the project build tree and record results in ``Configure.xml``
-for submission with the :command:`ctest_submit` command.
-
-The options are:
-
-``BUILD <build-dir>``
-  Specify the top-level build directory.  If not given, the
-  :variable:`CTEST_BINARY_DIRECTORY` variable is used.
-
-``SOURCE <source-dir>``
-  Specify the source directory.  If not given, the
-  :variable:`CTEST_SOURCE_DIRECTORY` variable is used.
-
-``APPEND``
-  Mark ``Configure.xml`` for append to results previously submitted to a
-  dashboard server since the last :command:`ctest_start` call.
-  Append semantics are defined by the dashboard server in use.
-  This does *not* cause results to be appended to a ``.xml`` file
-  produced by a previous call to this command.
-
-``OPTIONS <options>``
-  Specify command-line arguments to pass to the configuration tool.
-
-``RETURN_VALUE <result-var>``
-  Store in the ``<result-var>`` variable the return value of the native
-  configuration tool.
-
-``CAPTURE_CMAKE_ERROR <result-var>``
-  Store in the ``<result-var>`` variable -1 if there are any errors running
-  the command and prevent ctest from returning non-zero if an error occurs.
-
-``QUIET``
-  Suppress any CTest-specific non-error messages that would have
-  otherwise been printed to the console.  Output from the underlying
-  configure command is not affected.
diff --git a/share/cmake-3.18/Help/command/ctest_coverage.rst b/share/cmake-3.18/Help/command/ctest_coverage.rst
deleted file mode 100644
index d50f634..0000000
--- a/share/cmake-3.18/Help/command/ctest_coverage.rst
+++ /dev/null
@@ -1,46 +0,0 @@
-ctest_coverage
---------------
-
-Perform the :ref:`CTest Coverage Step` as a :ref:`Dashboard Client`.
-
-::
-
-  ctest_coverage([BUILD <build-dir>] [APPEND]
-                 [LABELS <label>...]
-                 [RETURN_VALUE <result-var>]
-                 [CAPTURE_CMAKE_ERROR <result-var>]
-                 [QUIET]
-                 )
-
-Collect coverage tool results and stores them in ``Coverage.xml``
-for submission with the :command:`ctest_submit` command.
-
-The options are:
-
-``BUILD <build-dir>``
-  Specify the top-level build directory.  If not given, the
-  :variable:`CTEST_BINARY_DIRECTORY` variable is used.
-
-``APPEND``
-  Mark ``Coverage.xml`` for append to results previously submitted to a
-  dashboard server since the last :command:`ctest_start` call.
-  Append semantics are defined by the dashboard server in use.
-  This does *not* cause results to be appended to a ``.xml`` file
-  produced by a previous call to this command.
-
-``LABELS``
-  Filter the coverage report to include only source files labeled
-  with at least one of the labels specified.
-
-``RETURN_VALUE <result-var>``
-  Store in the ``<result-var>`` variable ``0`` if coverage tools
-  ran without error and non-zero otherwise.
-
-``CAPTURE_CMAKE_ERROR <result-var>``
-  Store in the ``<result-var>`` variable -1 if there are any errors running
-  the command and prevent ctest from returning non-zero if an error occurs.
-
-``QUIET``
-  Suppress any CTest-specific non-error output that would have been
-  printed to the console otherwise.  The summary indicating how many
-  lines of code were covered is unaffected by this option.
diff --git a/share/cmake-3.18/Help/command/ctest_memcheck.rst b/share/cmake-3.18/Help/command/ctest_memcheck.rst
deleted file mode 100644
index 288b65a..0000000
--- a/share/cmake-3.18/Help/command/ctest_memcheck.rst
+++ /dev/null
@@ -1,38 +0,0 @@
-ctest_memcheck
---------------
-
-Perform the :ref:`CTest MemCheck Step` as a :ref:`Dashboard Client`.
-
-::
-
-  ctest_memcheck([BUILD <build-dir>] [APPEND]
-                 [START <start-number>]
-                 [END <end-number>]
-                 [STRIDE <stride-number>]
-                 [EXCLUDE <exclude-regex>]
-                 [INCLUDE <include-regex>]
-                 [EXCLUDE_LABEL <label-exclude-regex>]
-                 [INCLUDE_LABEL <label-include-regex>]
-                 [EXCLUDE_FIXTURE <regex>]
-                 [EXCLUDE_FIXTURE_SETUP <regex>]
-                 [EXCLUDE_FIXTURE_CLEANUP <regex>]
-                 [PARALLEL_LEVEL <level>]
-                 [TEST_LOAD <threshold>]
-                 [SCHEDULE_RANDOM <ON|OFF>]
-                 [STOP_TIME <time-of-day>]
-                 [RETURN_VALUE <result-var>]
-                 [DEFECT_COUNT <defect-count-var>]
-                 [QUIET]
-                 )
-
-
-Run tests with a dynamic analysis tool and store results in
-``MemCheck.xml`` for submission with the :command:`ctest_submit`
-command.
-
-Most options are the same as those for the :command:`ctest_test` command.
-
-The options unique to this command are:
-
-``DEFECT_COUNT <defect-count-var>``
-  Store in the ``<defect-count-var>`` the number of defects found.
diff --git a/share/cmake-3.18/Help/command/ctest_start.rst b/share/cmake-3.18/Help/command/ctest_start.rst
deleted file mode 100644
index f0704ac..0000000
--- a/share/cmake-3.18/Help/command/ctest_start.rst
+++ /dev/null
@@ -1,83 +0,0 @@
-ctest_start
------------
-
-Starts the testing for a given model
-
-::
-
-  ctest_start(<model> [<source> [<binary>]] [GROUP <group>] [QUIET])
-
-  ctest_start([<model> [<source> [<binary>]]] [GROUP <group>] APPEND [QUIET])
-
-Starts the testing for a given model.  The command should be called
-after the binary directory is initialized.
-
-The parameters are as follows:
-
-``<model>``
-  Set the dashboard model. Must be one of ``Experimental``, ``Continuous``, or
-  ``Nightly``. This parameter is required unless ``APPEND`` is specified.
-
-``<source>``
-  Set the source directory. If not specified, the value of
-  :variable:`CTEST_SOURCE_DIRECTORY` is used instead.
-
-``<binary>``
-  Set the binary directory. If not specified, the value of
-  :variable:`CTEST_BINARY_DIRECTORY` is used instead.
-
-``GROUP <group>``
-  If ``GROUP`` is used, the submissions will go to the specified group on the
-  CDash server. If no ``GROUP`` is specified, the name of the model is used by
-  default. This replaces the deprecated option ``TRACK``. Despite the name
-  change its behavior is unchanged.
-
-``APPEND``
-  If ``APPEND`` is used, the existing ``TAG`` is used rather than creating a new
-  one based on the current time stamp. If you use ``APPEND``, you can omit the
-  ``<model>`` and ``GROUP <group>`` parameters, because they will be read from
-  the generated ``TAG`` file. For example:
-
-  .. code-block:: cmake
-
-    ctest_start(Experimental GROUP GroupExperimental)
-
-  Later, in another ``ctest -S`` script:
-
-  .. code-block:: cmake
-
-    ctest_start(APPEND)
-
-  When the second script runs ``ctest_start(APPEND)``, it will read the
-  ``Experimental`` model and ``GroupExperimental`` group from the ``TAG`` file
-  generated by the first ``ctest_start()`` command. Please note that if you
-  call ``ctest_start(APPEND)`` and specify a different model or group than
-  in the first ``ctest_start()`` command, a warning will be issued, and the
-  new model and group will be used.
-
-``QUIET``
-  If ``QUIET`` is used, CTest will suppress any non-error messages that it
-  otherwise would have printed to the console.
-
-The parameters for ``ctest_start()`` can be issued in any order, with the
-exception that ``<model>``, ``<source>``, and ``<binary>`` have to appear
-in that order with respect to each other. The following are all valid and
-equivalent:
-
-.. code-block:: cmake
-
-  ctest_start(Experimental path/to/source path/to/binary GROUP SomeGroup QUIET APPEND)
-
-  ctest_start(GROUP SomeGroup Experimental QUIET path/to/source APPEND path/to/binary)
-
-  ctest_start(APPEND QUIET Experimental path/to/source GROUP SomeGroup path/to/binary)
-
-However, for the sake of readability, it is recommended that you order your
-parameters in the order listed at the top of this page.
-
-If the :variable:`CTEST_CHECKOUT_COMMAND` variable (or the
-:variable:`CTEST_CVS_CHECKOUT` variable) is set, its content is treated as
-command-line.  The command is invoked with the current working directory set
-to the parent of the source directory, even if the source directory already
-exists.  This can be used to create the source tree from a version control
-repository.
diff --git a/share/cmake-3.18/Help/command/ctest_submit.rst b/share/cmake-3.18/Help/command/ctest_submit.rst
deleted file mode 100644
index 983fc20..0000000
--- a/share/cmake-3.18/Help/command/ctest_submit.rst
+++ /dev/null
@@ -1,104 +0,0 @@
-ctest_submit
-------------
-
-Perform the :ref:`CTest Submit Step` as a :ref:`Dashboard Client`.
-
-::
-
-  ctest_submit([PARTS <part>...] [FILES <file>...]
-               [SUBMIT_URL <url>]
-               [BUILD_ID <result-var>]
-               [HTTPHEADER <header>]
-               [RETRY_COUNT <count>]
-               [RETRY_DELAY <delay>]
-               [RETURN_VALUE <result-var>]
-               [CAPTURE_CMAKE_ERROR <result-var>]
-               [QUIET]
-               )
-
-Submit results to a dashboard server.
-By default all available parts are submitted.
-
-The options are:
-
-``PARTS <part>...``
-  Specify a subset of parts to submit.  Valid part names are::
-
-    Start      = nothing
-    Update     = ctest_update results, in Update.xml
-    Configure  = ctest_configure results, in Configure.xml
-    Build      = ctest_build results, in Build.xml
-    Test       = ctest_test results, in Test.xml
-    Coverage   = ctest_coverage results, in Coverage.xml
-    MemCheck   = ctest_memcheck results, in DynamicAnalysis.xml
-    Notes      = Files listed by CTEST_NOTES_FILES, in Notes.xml
-    ExtraFiles = Files listed by CTEST_EXTRA_SUBMIT_FILES
-    Upload     = Files prepared for upload by ctest_upload(), in Upload.xml
-    Submit     = nothing
-    Done       = Build is complete, in Done.xml
-
-``FILES <file>...``
-  Specify an explicit list of specific files to be submitted.
-  Each individual file must exist at the time of the call.
-
-``SUBMIT_URL <url>``
-  The ``http`` or ``https`` URL of the dashboard server to send the submission
-  to.  If not given, the :variable:`CTEST_SUBMIT_URL` variable is used.
-
-``BUILD_ID <result-var>``
-  Store in the ``<result-var>`` variable the ID assigned to this build by
-  CDash.
-
-``HTTPHEADER <HTTP-header>``
-  Specify HTTP header to be included in the request to CDash during submission.
-  For example, CDash can be configured to only accept submissions from
-  authenticated clients. In this case, you should provide a bearer token in your
-  header:
-
-  .. code-block:: cmake
-
-    ctest_submit(HTTPHEADER "Authorization: Bearer <auth-token>")
-
-  This suboption can be repeated several times for multiple headers.
-
-``RETRY_COUNT <count>``
-  Specify how many times to retry a timed-out submission.
-
-``RETRY_DELAY <delay>``
-  Specify how long (in seconds) to wait after a timed-out submission
-  before attempting to re-submit.
-
-``RETURN_VALUE <result-var>``
-  Store in the ``<result-var>`` variable ``0`` for success and
-  non-zero on failure.
-
-``CAPTURE_CMAKE_ERROR <result-var>``
-  Store in the ``<result-var>`` variable -1 if there are any errors running
-  the command and prevent ctest from returning non-zero if an error occurs.
-
-``QUIET``
-  Suppress all non-error messages that would have otherwise been
-  printed to the console.
-
-Submit to CDash Upload API
-^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-::
-
-  ctest_submit(CDASH_UPLOAD <file> [CDASH_UPLOAD_TYPE <type>]
-               [SUBMIT_URL <url>]
-               [HTTPHEADER <header>]
-               [RETRY_COUNT <count>]
-               [RETRY_DELAY <delay>]
-               [RETURN_VALUE <result-var>]
-               [QUIET])
-
-This second signature is used to upload files to CDash via the CDash
-file upload API. The API first sends a request to upload to CDash along
-with a content hash of the file. If CDash does not already have the file,
-then it is uploaded. Along with the file, a CDash type string is specified
-to tell CDash which handler to use to process the data.
-
-This signature accepts the ``SUBMIT_URL``, ``BUILD_ID``, ``HTTPHEADER``,
-``RETRY_COUNT``, ``RETRY_DELAY``, ``RETURN_VALUE`` and ``QUIET`` options
-as described above.
diff --git a/share/cmake-3.18/Help/command/ctest_test.rst b/share/cmake-3.18/Help/command/ctest_test.rst
deleted file mode 100644
index 3589296..0000000
--- a/share/cmake-3.18/Help/command/ctest_test.rst
+++ /dev/null
@@ -1,144 +0,0 @@
-ctest_test
-----------
-
-Perform the :ref:`CTest Test Step` as a :ref:`Dashboard Client`.
-
-::
-
-  ctest_test([BUILD <build-dir>] [APPEND]
-             [START <start-number>]
-             [END <end-number>]
-             [STRIDE <stride-number>]
-             [EXCLUDE <exclude-regex>]
-             [INCLUDE <include-regex>]
-             [EXCLUDE_LABEL <label-exclude-regex>]
-             [INCLUDE_LABEL <label-include-regex>]
-             [EXCLUDE_FIXTURE <regex>]
-             [EXCLUDE_FIXTURE_SETUP <regex>]
-             [EXCLUDE_FIXTURE_CLEANUP <regex>]
-             [PARALLEL_LEVEL <level>]
-             [RESOURCE_SPEC_FILE <file>]
-             [TEST_LOAD <threshold>]
-             [SCHEDULE_RANDOM <ON|OFF>]
-             [STOP_ON_FAILURE]
-             [STOP_TIME <time-of-day>]
-             [RETURN_VALUE <result-var>]
-             [CAPTURE_CMAKE_ERROR <result-var>]
-             [REPEAT <mode>:<n>]
-             [QUIET]
-             )
-
-Run tests in the project build tree and store results in
-``Test.xml`` for submission with the :command:`ctest_submit` command.
-
-The options are:
-
-``BUILD <build-dir>``
-  Specify the top-level build directory.  If not given, the
-  :variable:`CTEST_BINARY_DIRECTORY` variable is used.
-
-``APPEND``
-  Mark ``Test.xml`` for append to results previously submitted to a
-  dashboard server since the last :command:`ctest_start` call.
-  Append semantics are defined by the dashboard server in use.
-  This does *not* cause results to be appended to a ``.xml`` file
-  produced by a previous call to this command.
-
-``START <start-number>``
-  Specify the beginning of a range of test numbers.
-
-``END <end-number>``
-  Specify the end of a range of test numbers.
-
-``STRIDE <stride-number>``
-  Specify the stride by which to step across a range of test numbers.
-
-``EXCLUDE <exclude-regex>``
-  Specify a regular expression matching test names to exclude.
-
-``INCLUDE <include-regex>``
-  Specify a regular expression matching test names to include.
-  Tests not matching this expression are excluded.
-
-``EXCLUDE_LABEL <label-exclude-regex>``
-  Specify a regular expression matching test labels to exclude.
-
-``INCLUDE_LABEL <label-include-regex>``
-  Specify a regular expression matching test labels to include.
-  Tests not matching this expression are excluded.
-
-``EXCLUDE_FIXTURE <regex>``
-  If a test in the set of tests to be executed requires a particular fixture,
-  that fixture's setup and cleanup tests would normally be added to the test
-  set automatically. This option prevents adding setup or cleanup tests for
-  fixtures matching the ``<regex>``. Note that all other fixture behavior is
-  retained, including test dependencies and skipping tests that have fixture
-  setup tests that fail.
-
-``EXCLUDE_FIXTURE_SETUP <regex>``
-  Same as ``EXCLUDE_FIXTURE`` except only matching setup tests are excluded.
-
-``EXCLUDE_FIXTURE_CLEANUP <regex>``
-  Same as ``EXCLUDE_FIXTURE`` except only matching cleanup tests are excluded.
-
-``PARALLEL_LEVEL <level>``
-  Specify a positive number representing the number of tests to
-  be run in parallel.
-
-``RESOURCE_SPEC_FILE <file>``
-  Specify a
-  :ref:`resource specification file <ctest-resource-specification-file>`. See
-  :ref:`ctest-resource-allocation` for more information.
-
-``TEST_LOAD <threshold>``
-  While running tests in parallel, try not to start tests when they
-  may cause the CPU load to pass above a given threshold.  If not
-  specified the :variable:`CTEST_TEST_LOAD` variable will be checked,
-  and then the ``--test-load`` command-line argument to :manual:`ctest(1)`.
-  See also the ``TestLoad`` setting in the :ref:`CTest Test Step`.
-
-``REPEAT <mode>:<n>``
-  Run tests repeatedly based on the given ``<mode>`` up to ``<n>`` times.
-  The modes are:
-
-  ``UNTIL_FAIL``
-    Require each test to run ``<n>`` times without failing in order to pass.
-    This is useful in finding sporadic failures in test cases.
-
-  ``UNTIL_PASS``
-    Allow each test to run up to ``<n>`` times in order to pass.
-    Repeats tests if they fail for any reason.
-    This is useful in tolerating sporadic failures in test cases.
-
-  ``AFTER_TIMEOUT``
-    Allow each test to run up to ``<n>`` times in order to pass.
-    Repeats tests only if they timeout.
-    This is useful in tolerating sporadic timeouts in test cases
-    on busy machines.
-
-``SCHEDULE_RANDOM <ON|OFF>``
-  Launch tests in a random order.  This may be useful for detecting
-  implicit test dependencies.
-
-``STOP_ON_FAILURE``
-  Stop the execution of the tests once one has failed.
-
-``STOP_TIME <time-of-day>``
-  Specify a time of day at which the tests should all stop running.
-
-``RETURN_VALUE <result-var>``
-  Store in the ``<result-var>`` variable ``0`` if all tests passed.
-  Store non-zero if anything went wrong.
-
-``CAPTURE_CMAKE_ERROR <result-var>``
-  Store in the ``<result-var>`` variable -1 if there are any errors running
-  the command and prevent ctest from returning non-zero if an error occurs.
-
-``QUIET``
-  Suppress any CTest-specific non-error messages that would have otherwise
-  been printed to the console.  Output from the underlying test command is not
-  affected.  Summary info detailing the percentage of passing tests is also
-  unaffected by the ``QUIET`` option.
-
-See also the :variable:`CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE`
-and :variable:`CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE` variables.
diff --git a/share/cmake-3.18/Help/command/ctest_update.rst b/share/cmake-3.18/Help/command/ctest_update.rst
deleted file mode 100644
index 96a11c9..0000000
--- a/share/cmake-3.18/Help/command/ctest_update.rst
+++ /dev/null
@@ -1,39 +0,0 @@
-ctest_update
-------------
-
-Perform the :ref:`CTest Update Step` as a :ref:`Dashboard Client`.
-
-::
-
-  ctest_update([SOURCE <source-dir>]
-               [RETURN_VALUE <result-var>]
-               [CAPTURE_CMAKE_ERROR <result-var>]
-               [QUIET])
-
-Update the source tree from version control and record results in
-``Update.xml`` for submission with the :command:`ctest_submit` command.
-
-The options are:
-
-``SOURCE <source-dir>``
-  Specify the source directory.  If not given, the
-  :variable:`CTEST_SOURCE_DIRECTORY` variable is used.
-
-``RETURN_VALUE <result-var>``
-  Store in the ``<result-var>`` variable the number of files
-  updated or ``-1`` on error.
-
-``CAPTURE_CMAKE_ERROR <result-var>``
-  Store in the ``<result-var>`` variable -1 if there are any errors running
-  the command and prevent ctest from returning non-zero if an error occurs.
-
-``QUIET``
-  Tell CTest to suppress most non-error messages that it would
-  have otherwise printed to the console.  CTest will still report
-  the new revision of the repository and any conflicting files
-  that were found.
-
-The update always follows the version control branch currently checked
-out in the source directory.  See the :ref:`CTest Update Step`
-documentation for information about variables that change the behavior
-of ``ctest_update()``.
diff --git a/share/cmake-3.18/Help/command/ctest_upload.rst b/share/cmake-3.18/Help/command/ctest_upload.rst
deleted file mode 100644
index 39d9de1..0000000
--- a/share/cmake-3.18/Help/command/ctest_upload.rst
+++ /dev/null
@@ -1,22 +0,0 @@
-ctest_upload
-------------
-
-Upload files to a dashboard server as a :ref:`Dashboard Client`.
-
-::
-
-  ctest_upload(FILES <file>... [QUIET] [CAPTURE_CMAKE_ERROR <result-var>])
-
-The options are:
-
-``FILES <file>...``
-  Specify a list of files to be sent along with the build results to the
-  dashboard server.
-
-``QUIET``
-  Suppress any CTest-specific non-error output that would have been
-  printed to the console otherwise.
-
-``CAPTURE_CMAKE_ERROR <result-var>``
-  Store in the ``<result-var>`` variable -1 if there are any errors running
-  the command and prevent ctest from returning non-zero if an error occurs.
diff --git a/share/cmake-3.18/Help/command/enable_language.rst b/share/cmake-3.18/Help/command/enable_language.rst
deleted file mode 100644
index fdc44f2..0000000
--- a/share/cmake-3.18/Help/command/enable_language.rst
+++ /dev/null
@@ -1,25 +0,0 @@
-enable_language
----------------
-Enable a language (CXX/C/OBJC/OBJCXX/Fortran/etc)
-
-.. code-block:: cmake
-
-  enable_language(<lang> [OPTIONAL] )
-
-Enables support for the named language in CMake.  This is
-the same as the :command:`project` command but does not create any of the extra
-variables that are created by the project command.  Example languages
-are ``CXX``, ``C``, ``CUDA``, ``OBJC``, ``OBJCXX``, ``Fortran``, and ``ASM``.
-
-If enabling ``ASM``, enable it last so that CMake can check whether
-compilers for other languages like ``C`` work for assembly too.
-
-This command must be called in file scope, not in a function call.
-Furthermore, it must be called in the highest directory common to all
-targets using the named language directly for compiling sources or
-indirectly through link dependencies.  It is simplest to enable all
-needed languages in the top-level directory of a project.
-
-The ``OPTIONAL`` keyword is a placeholder for future implementation and
-does not currently work. Instead you can use the :module:`CheckLanguage`
-module to verify support before enabling.
diff --git a/share/cmake-3.18/Help/command/execute_process.rst b/share/cmake-3.18/Help/command/execute_process.rst
deleted file mode 100644
index b32025f..0000000
--- a/share/cmake-3.18/Help/command/execute_process.rst
+++ /dev/null
@@ -1,129 +0,0 @@
-execute_process
----------------
-
-Execute one or more child processes.
-
-.. code-block:: cmake
-
-  execute_process(COMMAND <cmd1> [<arguments>]
-                  [COMMAND <cmd2> [<arguments>]]...
-                  [WORKING_DIRECTORY <directory>]
-                  [TIMEOUT <seconds>]
-                  [RESULT_VARIABLE <variable>]
-                  [RESULTS_VARIABLE <variable>]
-                  [OUTPUT_VARIABLE <variable>]
-                  [ERROR_VARIABLE <variable>]
-                  [INPUT_FILE <file>]
-                  [OUTPUT_FILE <file>]
-                  [ERROR_FILE <file>]
-                  [OUTPUT_QUIET]
-                  [ERROR_QUIET]
-                  [COMMAND_ECHO <where>]
-                  [OUTPUT_STRIP_TRAILING_WHITESPACE]
-                  [ERROR_STRIP_TRAILING_WHITESPACE]
-                  [ENCODING <name>]
-                  [ECHO_OUTPUT_VARIABLE]
-                  [ECHO_ERROR_VARIABLE])
-
-Runs the given sequence of one or more commands.
-
-Commands are executed concurrently as a pipeline, with the standard
-output of each process piped to the standard input of the next.
-A single standard error pipe is used for all processes.
-
-Options:
-
-``COMMAND``
- A child process command line.
-
- CMake executes the child process using operating system APIs directly.
- All arguments are passed VERBATIM to the child process.
- No intermediate shell is used, so shell operators such as ``>``
- are treated as normal arguments.
- (Use the ``INPUT_*``, ``OUTPUT_*``, and ``ERROR_*`` options to
- redirect stdin, stdout, and stderr.)
-
- If a sequential execution of multiple commands is required, use multiple
- :command:`execute_process` calls with a single ``COMMAND`` argument.
-
-``WORKING_DIRECTORY``
- The named directory will be set as the current working directory of
- the child processes.
-
-``TIMEOUT``
- After the specified number of seconds (fractions allowed), all unfinished
- child processes will be terminated, and the ``RESULT_VARIABLE`` will be
- set to a string mentioning the "timeout".
-
-``RESULT_VARIABLE``
- The variable will be set to contain the result of last child process.
- This will be an integer return code from the last child or a string
- describing an error condition.
-
-``RESULTS_VARIABLE <variable>``
- The variable will be set to contain the result of all processes as a
- :ref:`semicolon-separated list <CMake Language Lists>`, in order of the
- given ``COMMAND`` arguments.  Each entry will be an integer return code
- from the corresponding child or a string describing an error condition.
-
-``OUTPUT_VARIABLE``, ``ERROR_VARIABLE``
- The variable named will be set with the contents of the standard output
- and standard error pipes, respectively.  If the same variable is named
- for both pipes their output will be merged in the order produced.
-
-``INPUT_FILE, OUTPUT_FILE``, ``ERROR_FILE``
- The file named will be attached to the standard input of the first
- process, standard output of the last process, or standard error of
- all processes, respectively.  If the same file is named for both
- output and error then it will be used for both.
-
-``OUTPUT_QUIET``, ``ERROR_QUIET``
- The standard output or standard error results will be quietly ignored.
-
-``COMMAND_ECHO <where>``
- The command being run will be echo'ed to ``<where>`` with ``<where>``
- being set to one of ``STDERR``, ``STDOUT`` or ``NONE``.
- See the :variable:`CMAKE_EXECUTE_PROCESS_COMMAND_ECHO` variable for a way
- to control the default behavior when this option is not present.
-
-``ENCODING <name>``
- On Windows, the encoding that is used to decode output from the process.
- Ignored on other platforms.
- Valid encoding names are:
-
- ``NONE``
-   Perform no decoding.  This assumes that the process output is encoded
-   in the same way as CMake's internal encoding (UTF-8).
-   This is the default.
- ``AUTO``
-   Use the current active console's codepage or if that isn't
-   available then use ANSI.
- ``ANSI``
-   Use the ANSI codepage.
- ``OEM``
-   Use the original equipment manufacturer (OEM) code page.
- ``UTF8`` or ``UTF-8``
-   Use the UTF-8 codepage. Prior to CMake 3.11.0, only ``UTF8`` was accepted
-   for this encoding. In CMake 3.11.0, ``UTF-8`` was added for consistency with
-   the `UTF-8 RFC <https://www.ietf.org/rfc/rfc3629>`_ naming convention.
-
-``ECHO_OUTPUT_VARIABLE``, ``ECHO_ERROR_VARIABLE``
-  The standard output or standard error will not be exclusively redirected to
-  the configured variables.
-
-  The output will be duplicated, it will be sent into the configured variables
-  and also on standard output or standard error.
-
-  This is analogous to the ``tee`` Unix command.
-
-If more than one ``OUTPUT_*`` or ``ERROR_*`` option is given for the
-same pipe the precedence is not specified.
-If no ``OUTPUT_*`` or ``ERROR_*`` options are given the output will
-be shared with the corresponding pipes of the CMake process itself.
-
-The :command:`execute_process` command is a newer more powerful version of
-:command:`exec_program`, but the old command has been kept for compatibility.
-Both commands run while CMake is processing the project prior to build
-system generation.  Use :command:`add_custom_target` and
-:command:`add_custom_command` to create custom commands that run at
-build time.
diff --git a/share/cmake-3.18/Help/command/export.rst b/share/cmake-3.18/Help/command/export.rst
deleted file mode 100644
index 2ca7056..0000000
--- a/share/cmake-3.18/Help/command/export.rst
+++ /dev/null
@@ -1,86 +0,0 @@
-export
-------
-
-Export targets from the build tree for use by outside projects.
-
-.. code-block:: cmake
-
-  export(EXPORT <export-name> [NAMESPACE <namespace>] [FILE <filename>])
-
-Creates a file ``<filename>`` that may be included by outside projects to
-import targets from the current project's build tree.  This is useful
-during cross-compiling to build utility executables that can run on
-the host platform in one project and then import them into another
-project being compiled for the target platform.  If the ``NAMESPACE``
-option is given the ``<namespace>`` string will be prepended to all target
-names written to the file.
-
-Target installations are associated with the export ``<export-name>``
-using the ``EXPORT`` option of the :command:`install(TARGETS)` command.
-
-The file created by this command is specific to the build tree and
-should never be installed.  See the :command:`install(EXPORT)` command to
-export targets from an installation tree.
-
-The properties set on the generated IMPORTED targets will have the
-same values as the final values of the input TARGETS.
-
-.. code-block:: cmake
-
-  export(TARGETS [target1 [target2 [...]]] [NAMESPACE <namespace>]
-         [APPEND] FILE <filename> [EXPORT_LINK_INTERFACE_LIBRARIES])
-
-This signature is similar to the ``EXPORT`` signature, but targets are listed
-explicitly rather than specified as an export-name.  If the APPEND option is
-given the generated code will be appended to the file instead of overwriting it.
-The EXPORT_LINK_INTERFACE_LIBRARIES keyword, if present, causes the
-contents of the properties matching
-``(IMPORTED_)?LINK_INTERFACE_LIBRARIES(_<CONFIG>)?`` to be exported, when
-policy CMP0022 is NEW.  If a library target is included in the export
-but a target to which it links is not included the behavior is
-unspecified.
-
-.. note::
-
-  :ref:`Object Libraries` under :generator:`Xcode` have special handling if
-  multiple architectures are listed in :variable:`CMAKE_OSX_ARCHITECTURES`.
-  In this case they will be exported as :ref:`Interface Libraries` with
-  no object files available to clients.  This is sufficient to satisfy
-  transitive usage requirements of other targets that link to the
-  object libraries in their implementation.
-
-.. code-block:: cmake
-
-  export(PACKAGE <PackageName>)
-
-Store the current build directory in the CMake user package registry
-for package ``<PackageName>``.  The :command:`find_package` command may consider the
-directory while searching for package ``<PackageName>``.  This helps dependent
-projects find and use a package from the current project's build tree
-without help from the user.  Note that the entry in the package
-registry that this command creates works only in conjunction with a
-package configuration file (``<PackageName>Config.cmake``) that works with the
-build tree. In some cases, for example for packaging and for system
-wide installations, it is not desirable to write the user package
-registry.
-
-By default the ``export(PACKAGE)`` command does nothing (see policy
-:policy:`CMP0090`) because populating the user package registry has effects
-outside the source and build trees.  Set the
-:variable:`CMAKE_EXPORT_PACKAGE_REGISTRY` variable to add build directories to
-the CMake user package registry.
-
-.. code-block:: cmake
-
-  export(TARGETS [target1 [target2 [...]]]  [ANDROID_MK <filename>])
-
-This signature exports cmake built targets to the android ndk build system
-by creating an Android.mk file that references the prebuilt targets. The
-Android NDK supports the use of prebuilt libraries, both static and shared.
-This allows cmake to build the libraries of a project and make them available
-to an ndk build system complete with transitive dependencies, include flags
-and defines required to use the libraries. The signature takes a list of
-targets and puts them in the Android.mk file specified by the ``<filename>``
-given. This signature can only be used if policy CMP0022 is NEW for all
-targets given. A error will be issued if that policy is set to OLD for one
-of the targets.
diff --git a/share/cmake-3.18/Help/command/file.rst b/share/cmake-3.18/Help/command/file.rst
deleted file mode 100644
index 693c059..0000000
--- a/share/cmake-3.18/Help/command/file.rst
+++ /dev/null
@@ -1,955 +0,0 @@
-file
-----
-
-File manipulation command.
-
-Synopsis
-^^^^^^^^
-
-.. parsed-literal::
-
-  `Reading`_
-    file(`READ`_ <filename> <out-var> [...])
-    file(`STRINGS`_ <filename> <out-var> [...])
-    file(`\<HASH\> <HASH_>`_ <filename> <out-var>)
-    file(`TIMESTAMP`_ <filename> <out-var> [...])
-    file(`GET_RUNTIME_DEPENDENCIES`_ [...])
-
-  `Writing`_
-    file({`WRITE`_ | `APPEND`_} <filename> <content>...)
-    file({`TOUCH`_ | `TOUCH_NOCREATE`_} [<file>...])
-    file(`GENERATE`_ OUTPUT <output-file> [...])
-    file(`CONFIGURE`_ OUTPUT <output-file> CONTENT <content> [...])
-
-  `Filesystem`_
-    file({`GLOB`_ | `GLOB_RECURSE`_} <out-var> [...] [<globbing-expr>...])
-    file(`RENAME`_ <oldname> <newname>)
-    file({`REMOVE`_ | `REMOVE_RECURSE`_ } [<files>...])
-    file(`MAKE_DIRECTORY`_ [<dir>...])
-    file({`COPY`_ | `INSTALL`_} <file>... DESTINATION <dir> [...])
-    file(`SIZE`_ <filename> <out-var>)
-    file(`READ_SYMLINK`_ <linkname> <out-var>)
-    file(`CREATE_LINK`_ <original> <linkname> [...])
-
-  `Path Conversion`_
-    file(`RELATIVE_PATH`_ <out-var> <directory> <file>)
-    file({`TO_CMAKE_PATH`_ | `TO_NATIVE_PATH`_} <path> <out-var>)
-
-  `Transfer`_
-    file(`DOWNLOAD`_ <url> <file> [...])
-    file(`UPLOAD`_ <file> <url> [...])
-
-  `Locking`_
-    file(`LOCK`_ <path> [...])
-
-  `Archiving`_
-    file(`ARCHIVE_CREATE`_ OUTPUT <archive> PATHS <paths>... [...])
-    file(`ARCHIVE_EXTRACT`_ INPUT <archive> [...])
-
-Reading
-^^^^^^^
-
-.. _READ:
-
-.. code-block:: cmake
-
-  file(READ <filename> <variable>
-       [OFFSET <offset>] [LIMIT <max-in>] [HEX])
-
-Read content from a file called ``<filename>`` and store it in a
-``<variable>``.  Optionally start from the given ``<offset>`` and
-read at most ``<max-in>`` bytes.  The ``HEX`` option causes data to
-be converted to a hexadecimal representation (useful for binary data). If the
-``HEX`` option is specified, letters in the output (``a`` through ``f``) are in
-lowercase.
-
-.. _STRINGS:
-
-.. code-block:: cmake
-
-  file(STRINGS <filename> <variable> [<options>...])
-
-Parse a list of ASCII strings from ``<filename>`` and store it in
-``<variable>``.  Binary data in the file are ignored.  Carriage return
-(``\r``, CR) characters are ignored.  The options are:
-
-``LENGTH_MAXIMUM <max-len>``
- Consider only strings of at most a given length.
-
-``LENGTH_MINIMUM <min-len>``
- Consider only strings of at least a given length.
-
-``LIMIT_COUNT <max-num>``
- Limit the number of distinct strings to be extracted.
-
-``LIMIT_INPUT <max-in>``
- Limit the number of input bytes to read from the file.
-
-``LIMIT_OUTPUT <max-out>``
- Limit the number of total bytes to store in the ``<variable>``.
-
-``NEWLINE_CONSUME``
- Treat newline characters (``\n``, LF) as part of string content
- instead of terminating at them.
-
-``NO_HEX_CONVERSION``
- Intel Hex and Motorola S-record files are automatically converted to
- binary while reading unless this option is given.
-
-``REGEX <regex>``
- Consider only strings that match the given regular expression.
-
-``ENCODING <encoding-type>``
- Consider strings of a given encoding.  Currently supported encodings are:
- UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE.  If the ENCODING option
- is not provided and the file has a Byte Order Mark, the ENCODING option
- will be defaulted to respect the Byte Order Mark.
-
-For example, the code
-
-.. code-block:: cmake
-
-  file(STRINGS myfile.txt myfile)
-
-stores a list in the variable ``myfile`` in which each item is a line
-from the input file.
-
-.. _HASH:
-
-.. code-block:: cmake
-
-  file(<HASH> <filename> <variable>)
-
-Compute a cryptographic hash of the content of ``<filename>`` and
-store it in a ``<variable>``.  The supported ``<HASH>`` algorithm names
-are those listed by the :ref:`string(\<HASH\>) <Supported Hash Algorithms>`
-command.
-
-.. _TIMESTAMP:
-
-.. code-block:: cmake
-
-  file(TIMESTAMP <filename> <variable> [<format>] [UTC])
-
-Compute a string representation of the modification time of ``<filename>``
-and store it in ``<variable>``.  Should the command be unable to obtain a
-timestamp variable will be set to the empty string ("").
-
-See the :command:`string(TIMESTAMP)` command for documentation of
-the ``<format>`` and ``UTC`` options.
-
-.. _GET_RUNTIME_DEPENDENCIES:
-
-.. code-block:: cmake
-
-  file(GET_RUNTIME_DEPENDENCIES
-    [RESOLVED_DEPENDENCIES_VAR <deps_var>]
-    [UNRESOLVED_DEPENDENCIES_VAR <unresolved_deps_var>]
-    [CONFLICTING_DEPENDENCIES_PREFIX <conflicting_deps_prefix>]
-    [EXECUTABLES [<executable_files>...]]
-    [LIBRARIES [<library_files>...]]
-    [MODULES [<module_files>...]]
-    [DIRECTORIES [<directories>...]]
-    [BUNDLE_EXECUTABLE <bundle_executable_file>]
-    [PRE_INCLUDE_REGEXES [<regexes>...]]
-    [PRE_EXCLUDE_REGEXES [<regexes>...]]
-    [POST_INCLUDE_REGEXES [<regexes>...]]
-    [POST_EXCLUDE_REGEXES [<regexes>...]]
-    )
-
-Recursively get the list of libraries depended on by the given files.
-
-Please note that this sub-command is not intended to be used in project mode.
-Instead, use it in an :command:`install(CODE)` or :command:`install(SCRIPT)`
-block. For example:
-
-.. code-block:: cmake
-
-  install(CODE [[
-    file(GET_RUNTIME_DEPENDENCIES
-      # ...
-      )
-    ]])
-
-The arguments are as follows:
-
-``RESOLVED_DEPENDENCIES_VAR <deps_var>``
-  Name of the variable in which to store the list of resolved dependencies.
-
-``UNRESOLVED_DEPENDENCIES_VAR <unresolved_deps_var>``
-  Name of the variable in which to store the list of unresolved dependencies.
-  If this variable is not specified, and there are any unresolved dependencies,
-  an error is issued.
-
-``CONFLICTING_DEPENDENCIES_PREFIX <conflicting_deps_prefix>``
-  Variable prefix in which to store conflicting dependency information.
-  Dependencies are conflicting if two files with the same name are found in
-  two different directories. The list of filenames that conflict are stored in
-  ``<conflicting_deps_prefix>_FILENAMES``. For each filename, the list of paths
-  that were found for that filename are stored in
-  ``<conflicting_deps_prefix>_<filename>``.
-
-``EXECUTABLES <executable_files>``
-  List of executable files to read for dependencies. These are executables that
-  are typically created with :command:`add_executable`, but they do not have to
-  be created by CMake. On Apple platforms, the paths to these files determine
-  the value of ``@executable_path`` when recursively resolving the libraries.
-  Specifying any kind of library (``STATIC``, ``MODULE``, or ``SHARED``) here
-  will result in undefined behavior.
-
-``LIBRARIES <library_files>``
-  List of library files to read for dependencies. These are libraries that are
-  typically created with :command:`add_library(SHARED)`, but they do not have
-  to be created by CMake. Specifying ``STATIC`` libraries, ``MODULE``
-  libraries, or executables here will result in undefined behavior.
-
-``MODULES <module_files>``
-  List of loadable module files to read for dependencies. These are modules
-  that are typically created with :command:`add_library(MODULE)`, but they do
-  not have to be created by CMake. They are typically used by calling
-  ``dlopen()`` at runtime rather than linked at link time with ``ld -l``.
-  Specifying ``STATIC`` libraries, ``SHARED`` libraries, or executables here
-  will result in undefined behavior.
-
-``DIRECTORIES <directories>``
-  List of additional directories to search for dependencies. On Linux
-  platforms, these directories are searched if the dependency is not found in
-  any of the other usual paths. If it is found in such a directory, a warning
-  is issued, because it means that the file is incomplete (it does not list all
-  of the directories that contain its dependencies). On Windows platforms,
-  these directories are searched if the dependency is not found in any of the
-  other search paths, but no warning is issued, because searching other paths
-  is a normal part of Windows dependency resolution. On Apple platforms, this
-  argument has no effect.
-
-``BUNDLE_EXECUTABLE <bundle_executable_file>``
-  Executable to treat as the "bundle executable" when resolving libraries. On
-  Apple platforms, this argument determines the value of ``@executable_path``
-  when recursively resolving libraries for ``LIBRARIES`` and ``MODULES`` files.
-  It has no effect on ``EXECUTABLES`` files. On other platforms, it has no
-  effect. This is typically (but not always) one of the executables in the
-  ``EXECUTABLES`` argument which designates the "main" executable of the
-  package.
-
-The following arguments specify filters for including or excluding libraries to
-be resolved. See below for a full description of how they work.
-
-``PRE_INCLUDE_REGEXES <regexes>``
-  List of pre-include regexes through which to filter the names of
-  not-yet-resolved dependencies.
-
-``PRE_EXCLUDE_REGEXES <regexes>``
-  List of pre-exclude regexes through which to filter the names of
-  not-yet-resolved dependencies.
-
-``POST_INCLUDE_REGEXES <regexes>``
-  List of post-include regexes through which to filter the names of resolved
-  dependencies.
-
-``POST_EXCLUDE_REGEXES <regexes>``
-  List of post-exclude regexes through which to filter the names of resolved
-  dependencies.
-
-These arguments can be used to exclude unwanted system libraries when
-resolving the dependencies, or to include libraries from a specific
-directory. The filtering works as follows:
-
-1. If the not-yet-resolved dependency matches any of the
-   ``PRE_INCLUDE_REGEXES``, steps 2 and 3 are skipped, and the dependency
-   resolution proceeds to step 4.
-2. If the not-yet-resolved dependency matches any of the
-   ``PRE_EXCLUDE_REGEXES``, dependency resolution stops for that dependency.
-3. Otherwise, dependency resolution proceeds.
-4. ``file(GET_RUNTIME_DEPENDENCIES)`` searches for the dependency according to
-   the linking rules of the platform (see below).
-5. If the dependency is found, and its full path matches one of the
-   ``POST_INCLUDE_REGEXES``, the full path is added to the resolved
-   dependencies, and ``file(GET_RUNTIME_DEPENDENCIES)`` recursively resolves
-   that library's own dependencies. Otherwise, resolution proceeds to step 6.
-6. If the dependency is found, but its full path matches one of the
-   ``POST_EXCLUDE_REGEXES``, it is not added to the resolved dependencies, and
-   dependency resolution stops for that dependency.
-7. If the dependency is found, and its full path does not match either
-   ``POST_INCLUDE_REGEXES`` or ``POST_EXCLUDE_REGEXES``, the full path is added
-   to the resolved dependencies, and ``file(GET_RUNTIME_DEPENDENCIES)``
-   recursively resolves that library's own dependencies.
-
-Different platforms have different rules for how dependencies are resolved.
-These specifics are described here.
-
-On Linux platforms, library resolution works as follows:
-
-1. If the depending file does not have any ``RUNPATH`` entries, and the library
-   exists in one of the depending file's ``RPATH`` entries, or its parents', in
-   that order, the dependency is resolved to that file.
-2. Otherwise, if the depending file has any ``RUNPATH`` entries, and the
-   library exists in one of those entries, the dependency is resolved to that
-   file.
-3. Otherwise, if the library exists in one of the directories listed by
-   ``ldconfig``, the dependency is resolved to that file.
-4. Otherwise, if the library exists in one of the ``DIRECTORIES`` entries, the
-   dependency is resolved to that file. In this case, a warning is issued,
-   because finding a file in one of the ``DIRECTORIES`` means that the
-   depending file is not complete (it does not list all the directories from
-   which it pulls dependencies).
-5. Otherwise, the dependency is unresolved.
-
-On Windows platforms, library resolution works as follows:
-
-1. The dependent DLL name is converted to lowercase. Windows DLL names are
-   case-insensitive, and some linkers mangle the case of the DLL dependency
-   names. However, this makes it more difficult for ``PRE_INCLUDE_REGEXES``,
-   ``PRE_EXCLUDE_REGEXES``, ``POST_INCLUDE_REGEXES``, and
-   ``POST_EXCLUDE_REGEXES`` to properly filter DLL names - every regex would
-   have to check for both uppercase and lowercase letters. For example:
-
-   .. code-block:: cmake
-
-     file(GET_RUNTIME_DEPENDENCIES
-       # ...
-       PRE_INCLUDE_REGEXES "^[Mm][Yy][Ll][Ii][Bb][Rr][Aa][Rr][Yy]\\.[Dd][Ll][Ll]$"
-       )
-
-   Converting the DLL name to lowercase allows the regexes to only match
-   lowercase names, thus simplifying the regex. For example:
-
-   .. code-block:: cmake
-
-     file(GET_RUNTIME_DEPENDENCIES
-       # ...
-       PRE_INCLUDE_REGEXES "^mylibrary\\.dll$"
-       )
-
-   This regex will match ``mylibrary.dll`` regardless of how it is cased,
-   either on disk or in the depending file. (For example, it will match
-   ``mylibrary.dll``, ``MyLibrary.dll``, and ``MYLIBRARY.DLL``.)
-
-   Please note that the directory portion of any resolved DLLs retains its
-   casing and is not converted to lowercase. Only the filename portion is
-   converted.
-
-2. (**Not yet implemented**) If the depending file is a Windows Store app, and
-   the dependency is listed as a dependency in the application's package
-   manifest, the dependency is resolved to that file.
-3. Otherwise, if the library exists in the same directory as the depending
-   file, the dependency is resolved to that file.
-4. Otherwise, if the library exists in either the operating system's
-   ``system32`` directory or the ``Windows`` directory, in that order, the
-   dependency is resolved to that file.
-5. Otherwise, if the library exists in one of the directories specified by
-   ``DIRECTORIES``, in the order they are listed, the dependency is resolved to
-   that file. In this case, a warning is not issued, because searching other
-   directories is a normal part of Windows library resolution.
-6. Otherwise, the dependency is unresolved.
-
-On Apple platforms, library resolution works as follows:
-
-1. If the dependency starts with ``@executable_path/``, and an ``EXECUTABLES``
-   argument is in the process of being resolved, and replacing
-   ``@executable_path/`` with the directory of the executable yields an
-   existing file, the dependency is resolved to that file.
-2. Otherwise, if the dependency starts with ``@executable_path/``, and there is
-   a ``BUNDLE_EXECUTABLE`` argument, and replacing ``@executable_path/`` with
-   the directory of the bundle executable yields an existing file, the
-   dependency is resolved to that file.
-3. Otherwise, if the dependency starts with ``@loader_path/``, and replacing
-   ``@loader_path/`` with the directory of the depending file yields an
-   existing file, the dependency is resolved to that file.
-4. Otherwise, if the dependency starts with ``@rpath/``, and replacing
-   ``@rpath/`` with one of the ``RPATH`` entries of the depending file yields
-   an existing file, the dependency is resolved to that file. Note that
-   ``RPATH`` entries that start with ``@executable_path/`` or ``@loader_path/``
-   also have these items replaced with the appropriate path.
-5. Otherwise, if the dependency is an absolute file that exists, the dependency
-   is resolved to that file.
-6. Otherwise, the dependency is unresolved.
-
-This function accepts several variables that determine which tool is used for
-dependency resolution:
-
-.. variable:: CMAKE_GET_RUNTIME_DEPENDENCIES_PLATFORM
-
-  Determines which operating system and executable format the files are built
-  for. This could be one of several values:
-
-  * ``linux+elf``
-  * ``windows+pe``
-  * ``macos+macho``
-
-  If this variable is not specified, it is determined automatically by system
-  introspection.
-
-.. variable:: CMAKE_GET_RUNTIME_DEPENDENCIES_TOOL
-
-  Determines the tool to use for dependency resolution. It could be one of
-  several values, depending on the value of
-  :variable:`CMAKE_GET_RUNTIME_DEPENDENCIES_PLATFORM`:
-
-  ================================================= =============================================
-     ``CMAKE_GET_RUNTIME_DEPENDENCIES_PLATFORM``       ``CMAKE_GET_RUNTIME_DEPENDENCIES_TOOL``
-  ================================================= =============================================
-  ``linux+elf``                                     ``objdump``
-  ``windows+pe``                                    ``dumpbin``
-  ``windows+pe``                                    ``objdump``
-  ``macos+macho``                                   ``otool``
-  ================================================= =============================================
-
-  If this variable is not specified, it is determined automatically by system
-  introspection.
-
-.. variable:: CMAKE_GET_RUNTIME_DEPENDENCIES_COMMAND
-
-  Determines the path to the tool to use for dependency resolution. This is the
-  actual path to ``objdump``, ``dumpbin``, or ``otool``.
-
-  If this variable is not specified, it is determined by the value of
-  ``CMAKE_OBJDUMP`` if set, else by system introspection.
-
-Writing
-^^^^^^^
-
-.. _WRITE:
-.. _APPEND:
-
-.. code-block:: cmake
-
-  file(WRITE <filename> <content>...)
-  file(APPEND <filename> <content>...)
-
-Write ``<content>`` into a file called ``<filename>``.  If the file does
-not exist, it will be created.  If the file already exists, ``WRITE``
-mode will overwrite it and ``APPEND`` mode will append to the end.
-Any directories in the path specified by ``<filename>`` that do not
-exist will be created.
-
-If the file is a build input, use the :command:`configure_file` command
-to update the file only when its content changes.
-
-.. _TOUCH:
-.. _TOUCH_NOCREATE:
-
-.. code-block:: cmake
-
-  file(TOUCH [<files>...])
-  file(TOUCH_NOCREATE [<files>...])
-
-Create a file with no content if it does not yet exist. If the file already
-exists, its access and/or modification will be updated to the time when the
-function call is executed.
-
-Use TOUCH_NOCREATE to touch a file if it exists but not create it. If a file
-does not exist it will be silently ignored.
-
-With TOUCH and TOUCH_NOCREATE the contents of an existing file will not be
-modified.
-
-.. _GENERATE:
-
-.. code-block:: cmake
-
-  file(GENERATE OUTPUT output-file
-       <INPUT input-file|CONTENT content>
-       [CONDITION expression])
-
-Generate an output file for each build configuration supported by the current
-:manual:`CMake Generator <cmake-generators(7)>`.  Evaluate
-:manual:`generator expressions <cmake-generator-expressions(7)>`
-from the input content to produce the output content.  The options are:
-
-``CONDITION <condition>``
-  Generate the output file for a particular configuration only if
-  the condition is true.  The condition must be either ``0`` or ``1``
-  after evaluating generator expressions.
-
-``CONTENT <content>``
-  Use the content given explicitly as input.
-
-``INPUT <input-file>``
-  Use the content from a given file as input.
-  A relative path is treated with respect to the value of
-  :variable:`CMAKE_CURRENT_SOURCE_DIR`.  See policy :policy:`CMP0070`.
-
-``OUTPUT <output-file>``
-  Specify the output file name to generate.  Use generator expressions
-  such as ``$<CONFIG>`` to specify a configuration-specific output file
-  name.  Multiple configurations may generate the same output file only
-  if the generated content is identical.  Otherwise, the ``<output-file>``
-  must evaluate to an unique name for each configuration.
-  A relative path (after evaluating generator expressions) is treated
-  with respect to the value of :variable:`CMAKE_CURRENT_BINARY_DIR`.
-  See policy :policy:`CMP0070`.
-
-Exactly one ``CONTENT`` or ``INPUT`` option must be given.  A specific
-``OUTPUT`` file may be named by at most one invocation of ``file(GENERATE)``.
-Generated files are modified and their timestamp updated on subsequent cmake
-runs only if their content is changed.
-
-Note also that ``file(GENERATE)`` does not create the output file until the
-generation phase. The output file will not yet have been written when the
-``file(GENERATE)`` command returns, it is written only after processing all
-of a project's ``CMakeLists.txt`` files.
-
-.. _CONFIGURE:
-
-.. code-block:: cmake
-
-  file(CONFIGURE OUTPUT output-file
-       CONTENT content
-       [ESCAPE_QUOTES] [@ONLY]
-       [NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])
-
-Generate an output file using the input given by ``CONTENT`` and substitute
-variable values referenced as ``@VAR@`` or ``${VAR}`` contained therein. The
-substitution rules behave the same as the :command:`configure_file` command.
-In order to match :command:`configure_file`'s behavior, generator expressions
-are not supported for both ``OUTPUT`` and ``CONTENT``.
-
-The arguments are:
-
-``OUTPUT <output-file>``
-  Specify the output file name to generate. A relative path is treated with
-  respect to the value of :variable:`CMAKE_CURRENT_BINARY_DIR`.
-  ``<output-file>`` does not support generator expressions.
-
-``CONTENT <content>``
-  Use the content given explicitly as input.
-  ``<content>`` does not support generator expressions.
-
-``ESCAPE_QUOTES``
-  Escape any substituted quotes with backslashes (C-style).
-
-``@ONLY``
-  Restrict variable replacement to references of the form ``@VAR@``.
-  This is useful for configuring scripts that use ``${VAR}`` syntax.
-
-``NEWLINE_STYLE <style>``
-  Specify the newline style for the output file.  Specify
-  ``UNIX`` or ``LF`` for ``\n`` newlines, or specify
-  ``DOS``, ``WIN32``, or ``CRLF`` for ``\r\n`` newlines.
-
-Filesystem
-^^^^^^^^^^
-
-.. _GLOB:
-.. _GLOB_RECURSE:
-
-.. code-block:: cmake
-
-  file(GLOB <variable>
-       [LIST_DIRECTORIES true|false] [RELATIVE <path>] [CONFIGURE_DEPENDS]
-       [<globbing-expressions>...])
-  file(GLOB_RECURSE <variable> [FOLLOW_SYMLINKS]
-       [LIST_DIRECTORIES true|false] [RELATIVE <path>] [CONFIGURE_DEPENDS]
-       [<globbing-expressions>...])
-
-Generate a list of files that match the ``<globbing-expressions>`` and
-store it into the ``<variable>``.  Globbing expressions are similar to
-regular expressions, but much simpler.  If ``RELATIVE`` flag is
-specified, the results will be returned as relative paths to the given
-path.  The results will be ordered lexicographically.
-
-On Windows and macOS, globbing is case-insensitive even if the underlying
-filesystem is case-sensitive (both filenames and globbing expressions are
-converted to lowercase before matching).  On other platforms, globbing is
-case-sensitive.
-
-If the ``CONFIGURE_DEPENDS`` flag is specified, CMake will add logic
-to the main build system check target to rerun the flagged ``GLOB`` commands
-at build time. If any of the outputs change, CMake will regenerate the build
-system.
-
-By default ``GLOB`` lists directories - directories are omitted in result if
-``LIST_DIRECTORIES`` is set to false.
-
-.. note::
-  We do not recommend using GLOB to collect a list of source files from
-  your source tree.  If no CMakeLists.txt file changes when a source is
-  added or removed then the generated build system cannot know when to
-  ask CMake to regenerate.
-  The ``CONFIGURE_DEPENDS`` flag may not work reliably on all generators, or if
-  a new generator is added in the future that cannot support it, projects using
-  it will be stuck. Even if ``CONFIGURE_DEPENDS`` works reliably, there is
-  still a cost to perform the check on every rebuild.
-
-Examples of globbing expressions include::
-
-  *.cxx      - match all files with extension cxx
-  *.vt?      - match all files with extension vta,...,vtz
-  f[3-5].txt - match files f3.txt, f4.txt, f5.txt
-
-The ``GLOB_RECURSE`` mode will traverse all the subdirectories of the
-matched directory and match the files.  Subdirectories that are symlinks
-are only traversed if ``FOLLOW_SYMLINKS`` is given or policy
-:policy:`CMP0009` is not set to ``NEW``.
-
-By default ``GLOB_RECURSE`` omits directories from result list - setting
-``LIST_DIRECTORIES`` to true adds directories to result list.
-If ``FOLLOW_SYMLINKS`` is given or policy :policy:`CMP0009` is not set to
-``NEW`` then ``LIST_DIRECTORIES`` treats symlinks as directories.
-
-Examples of recursive globbing include::
-
-  /dir/*.py  - match all python files in /dir and subdirectories
-
-.. _RENAME:
-
-.. code-block:: cmake
-
-  file(RENAME <oldname> <newname>)
-
-Move a file or directory within a filesystem from ``<oldname>`` to
-``<newname>``, replacing the destination atomically.
-
-.. _REMOVE:
-.. _REMOVE_RECURSE:
-
-.. code-block:: cmake
-
-  file(REMOVE [<files>...])
-  file(REMOVE_RECURSE [<files>...])
-
-Remove the given files.  The ``REMOVE_RECURSE`` mode will remove the given
-files and directories, also non-empty directories. No error is emitted if a
-given file does not exist.  Relative input paths are evaluated with respect
-to the current source directory.  Empty input paths are ignored with a warning.
-
-.. _MAKE_DIRECTORY:
-
-.. code-block:: cmake
-
-  file(MAKE_DIRECTORY [<directories>...])
-
-Create the given directories and their parents as needed.
-
-.. _COPY:
-.. _INSTALL:
-
-.. code-block:: cmake
-
-  file(<COPY|INSTALL> <files>... DESTINATION <dir>
-       [FILE_PERMISSIONS <permissions>...]
-       [DIRECTORY_PERMISSIONS <permissions>...]
-       [NO_SOURCE_PERMISSIONS] [USE_SOURCE_PERMISSIONS]
-       [FOLLOW_SYMLINK_CHAIN]
-       [FILES_MATCHING]
-       [[PATTERN <pattern> | REGEX <regex>]
-        [EXCLUDE] [PERMISSIONS <permissions>...]] [...])
-
-The ``COPY`` signature copies files, directories, and symlinks to a
-destination folder.  Relative input paths are evaluated with respect
-to the current source directory, and a relative destination is
-evaluated with respect to the current build directory.  Copying
-preserves input file timestamps, and optimizes out a file if it exists
-at the destination with the same timestamp.  Copying preserves input
-permissions unless explicit permissions or ``NO_SOURCE_PERMISSIONS``
-are given (default is ``USE_SOURCE_PERMISSIONS``).
-
-If ``FOLLOW_SYMLINK_CHAIN`` is specified, ``COPY`` will recursively resolve
-the symlinks at the paths given until a real file is found, and install
-a corresponding symlink in the destination for each symlink encountered. For
-each symlink that is installed, the resolution is stripped of the directory,
-leaving only the filename, meaning that the new symlink points to a file in
-the same directory as the symlink. This feature is useful on some Unix systems,
-where libraries are installed as a chain of symlinks with version numbers, with
-less specific versions pointing to more specific versions.
-``FOLLOW_SYMLINK_CHAIN`` will install all of these symlinks and the library
-itself into the destination directory. For example, if you have the following
-directory structure:
-
-* ``/opt/foo/lib/libfoo.so.1.2.3``
-* ``/opt/foo/lib/libfoo.so.1.2 -> libfoo.so.1.2.3``
-* ``/opt/foo/lib/libfoo.so.1 -> libfoo.so.1.2``
-* ``/opt/foo/lib/libfoo.so -> libfoo.so.1``
-
-and you do:
-
-.. code-block:: cmake
-
-  file(COPY /opt/foo/lib/libfoo.so DESTINATION lib FOLLOW_SYMLINK_CHAIN)
-
-This will install all of the symlinks and ``libfoo.so.1.2.3`` itself into
-``lib``.
-
-See the :command:`install(DIRECTORY)` command for documentation of
-permissions, ``FILES_MATCHING``, ``PATTERN``, ``REGEX``, and
-``EXCLUDE`` options.  Copying directories preserves the structure
-of their content even if options are used to select a subset of
-files.
-
-The ``INSTALL`` signature differs slightly from ``COPY``: it prints
-status messages (subject to the :variable:`CMAKE_INSTALL_MESSAGE` variable),
-and ``NO_SOURCE_PERMISSIONS`` is default.
-Installation scripts generated by the :command:`install` command
-use this signature (with some undocumented options for internal use).
-
-.. _SIZE:
-
-.. code-block:: cmake
-
-  file(SIZE <filename> <variable>)
-
-Determine the file size of the ``<filename>`` and put the result in
-``<variable>`` variable. Requires that ``<filename>`` is a valid path
-pointing to a file and is readable.
-
-.. _READ_SYMLINK:
-
-.. code-block:: cmake
-
-  file(READ_SYMLINK <linkname> <variable>)
-
-This subcommand queries the symlink ``<linkname>`` and stores the path it
-points to in the result ``<variable>``.  If ``<linkname>`` does not exist or
-is not a symlink, CMake issues a fatal error.
-
-Note that this command returns the raw symlink path and does not resolve
-a relative path.  The following is an example of how to ensure that an
-absolute path is obtained:
-
-.. code-block:: cmake
-
-  set(linkname "/path/to/foo.sym")
-  file(READ_SYMLINK "${linkname}" result)
-  if(NOT IS_ABSOLUTE "${result}")
-    get_filename_component(dir "${linkname}" DIRECTORY)
-    set(result "${dir}/${result}")
-  endif()
-
-.. _CREATE_LINK:
-
-.. code-block:: cmake
-
-  file(CREATE_LINK <original> <linkname>
-       [RESULT <result>] [COPY_ON_ERROR] [SYMBOLIC])
-
-Create a link ``<linkname>`` that points to ``<original>``.
-It will be a hard link by default, but providing the ``SYMBOLIC`` option
-results in a symbolic link instead.  Hard links require that ``original``
-exists and is a file, not a directory.  If ``<linkname>`` already exists,
-it will be overwritten.
-
-The ``<result>`` variable, if specified, receives the status of the operation.
-It is set to ``0`` upon success or an error message otherwise.  If ``RESULT``
-is not specified and the operation fails, a fatal error is emitted.
-
-Specifying ``COPY_ON_ERROR`` enables copying the file as a fallback if
-creating the link fails.  It can be useful for handling situations such as
-``<original>`` and ``<linkname>`` being on different drives or mount points,
-which would make them unable to support a hard link.
-
-Path Conversion
-^^^^^^^^^^^^^^^
-
-.. _RELATIVE_PATH:
-
-.. code-block:: cmake
-
-  file(RELATIVE_PATH <variable> <directory> <file>)
-
-Compute the relative path from a ``<directory>`` to a ``<file>`` and
-store it in the ``<variable>``.
-
-.. _TO_CMAKE_PATH:
-.. _TO_NATIVE_PATH:
-
-.. code-block:: cmake
-
-  file(TO_CMAKE_PATH "<path>" <variable>)
-  file(TO_NATIVE_PATH "<path>" <variable>)
-
-The ``TO_CMAKE_PATH`` mode converts a native ``<path>`` into a cmake-style
-path with forward-slashes (``/``).  The input can be a single path or a
-system search path like ``$ENV{PATH}``.  A search path will be converted
-to a cmake-style list separated by ``;`` characters.
-
-The ``TO_NATIVE_PATH`` mode converts a cmake-style ``<path>`` into a native
-path with platform-specific slashes (``\`` on Windows and ``/`` elsewhere).
-
-Always use double quotes around the ``<path>`` to be sure it is treated
-as a single argument to this command.
-
-Transfer
-^^^^^^^^
-
-.. _DOWNLOAD:
-.. _UPLOAD:
-
-.. code-block:: cmake
-
-  file(DOWNLOAD <url> <file> [<options>...])
-  file(UPLOAD   <file> <url> [<options>...])
-
-The ``DOWNLOAD`` mode downloads the given ``<url>`` to a local ``<file>``.
-The ``UPLOAD`` mode uploads a local ``<file>`` to a given ``<url>``.
-
-Options to both ``DOWNLOAD`` and ``UPLOAD`` are:
-
-``INACTIVITY_TIMEOUT <seconds>``
-  Terminate the operation after a period of inactivity.
-
-``LOG <variable>``
-  Store a human-readable log of the operation in a variable.
-
-``SHOW_PROGRESS``
-  Print progress information as status messages until the operation is
-  complete.
-
-``STATUS <variable>``
-  Store the resulting status of the operation in a variable.
-  The status is a ``;`` separated list of length 2.
-  The first element is the numeric return value for the operation,
-  and the second element is a string value for the error.
-  A ``0`` numeric error means no error in the operation.
-
-``TIMEOUT <seconds>``
-  Terminate the operation after a given total time has elapsed.
-
-``USERPWD <username>:<password>``
-  Set username and password for operation.
-
-``HTTPHEADER <HTTP-header>``
-  HTTP header for operation. Suboption can be repeated several times.
-
-``NETRC <level>``
-  Specify whether the .netrc file is to be used for operation.  If this
-  option is not specified, the value of the ``CMAKE_NETRC`` variable
-  will be used instead.
-  Valid levels are:
-
-  ``IGNORED``
-    The .netrc file is ignored.
-    This is the default.
-  ``OPTIONAL``
-    The .netrc file is optional, and information in the URL is preferred.
-    The file will be scanned to find which ever information is not specified
-    in the URL.
-  ``REQUIRED``
-    The .netrc file is required, and information in the URL is ignored.
-
-``NETRC_FILE <file>``
-  Specify an alternative .netrc file to the one in your home directory,
-  if the ``NETRC`` level is ``OPTIONAL`` or ``REQUIRED``. If this option
-  is not specified, the value of the ``CMAKE_NETRC_FILE`` variable will
-  be used instead.
-
-If neither ``NETRC`` option is given CMake will check variables
-``CMAKE_NETRC`` and ``CMAKE_NETRC_FILE``, respectively.
-
-``TLS_VERIFY <ON|OFF>``
-  Specify whether to verify the server certificate for ``https://`` URLs.
-  The default is to *not* verify.
-
-``TLS_CAINFO <file>``
-  Specify a custom Certificate Authority file for ``https://`` URLs.
-
-For ``https://`` URLs CMake must be built with OpenSSL support.  ``TLS/SSL``
-certificates are not checked by default.  Set ``TLS_VERIFY`` to ``ON`` to
-check certificates. If neither ``TLS`` option is given CMake will check
-variables ``CMAKE_TLS_VERIFY`` and ``CMAKE_TLS_CAINFO``, respectively.
-
-Additional options to ``DOWNLOAD`` are:
-
-``EXPECTED_HASH ALGO=<value>``
-
-  Verify that the downloaded content hash matches the expected value, where
-  ``ALGO`` is one of the algorithms supported by ``file(<HASH>)``.
-  If it does not match, the operation fails with an error.
-
-``EXPECTED_MD5 <value>``
-  Historical short-hand for ``EXPECTED_HASH MD5=<value>``.
-
-Locking
-^^^^^^^
-
-.. _LOCK:
-
-.. code-block:: cmake
-
-  file(LOCK <path> [DIRECTORY] [RELEASE]
-       [GUARD <FUNCTION|FILE|PROCESS>]
-       [RESULT_VARIABLE <variable>]
-       [TIMEOUT <seconds>])
-
-Lock a file specified by ``<path>`` if no ``DIRECTORY`` option present and file
-``<path>/cmake.lock`` otherwise. File will be locked for scope defined by
-``GUARD`` option (default value is ``PROCESS``). ``RELEASE`` option can be used
-to unlock file explicitly. If option ``TIMEOUT`` is not specified CMake will
-wait until lock succeed or until fatal error occurs. If ``TIMEOUT`` is set to
-``0`` lock will be tried once and result will be reported immediately. If
-``TIMEOUT`` is not ``0`` CMake will try to lock file for the period specified
-by ``<seconds>`` value. Any errors will be interpreted as fatal if there is no
-``RESULT_VARIABLE`` option. Otherwise result will be stored in ``<variable>``
-and will be ``0`` on success or error message on failure.
-
-Note that lock is advisory - there is no guarantee that other processes will
-respect this lock, i.e. lock synchronize two or more CMake instances sharing
-some modifiable resources. Similar logic applied to ``DIRECTORY`` option -
-locking parent directory doesn't prevent other ``LOCK`` commands to lock any
-child directory or file.
-
-Trying to lock file twice is not allowed.  Any intermediate directories and
-file itself will be created if they not exist.  ``GUARD`` and ``TIMEOUT``
-options ignored on ``RELEASE`` operation.
-
-Archiving
-^^^^^^^^^
-
-.. _ARCHIVE_CREATE:
-
-.. code-block:: cmake
-
-  file(ARCHIVE_CREATE OUTPUT <archive>
-    PATHS <paths>...
-    [FORMAT <format>]
-    [COMPRESSION <compression>]
-    [MTIME <mtime>]
-    [VERBOSE])
-
-Creates the specified ``<archive>`` file with the files and directories
-listed in ``<paths>``.  Note that ``<paths>`` must list actual files or
-directories, wildcards are not supported.
-
-Use the ``FORMAT`` option to specify the archive format.  Supported values
-for ``<format>`` are ``7zip``, ``gnutar``, ``pax``, ``paxr``, ``raw`` and
-``zip``.  If ``FORMAT`` is not given, the default format is ``paxr``.
-
-Some archive formats allow the type of compression to be specified.
-The ``7zip`` and ``zip`` archive formats already imply a specific type of
-compression.  The other formats use no compression by default, but can be
-directed to do so with the ``COMPRESSION`` option.  Valid values for
-``<compression>`` are ``None``, ``BZip2``, ``GZip``, ``XZ``, and ``Zstd``.
-
-.. note::
-  With ``FORMAT`` set to ``raw`` only one file will be compressed with the
-  compression type specified by ``COMPRESSION``.
-
-The ``VERBOSE`` option enables verbose output for the archive operation.
-
-To specify the modification time recorded in tarball entries, use
-the ``MTIME`` option.
-
-.. _ARCHIVE_EXTRACT:
-
-.. code-block:: cmake
-
-  file(ARCHIVE_EXTRACT INPUT <archive>
-    [DESTINATION <dir>]
-    [PATTERNS <patterns>...]
-    [LIST_ONLY]
-    [VERBOSE])
-
-Extracts or lists the content of the specified ``<archive>``.
-
-The directory where the content of the archive will be extracted to can
-be specified using the ``DESTINATION`` option.  If the directory does not
-exist, it will be created.  If ``DESTINATION`` is not given, the current
-binary directory will be used.
-
-If required, you may select which files and directories to list or extract
-from the archive using the specified ``<patterns>``.  Wildcards are supported.
-If the ``PATTERNS`` option is not given, the entire archive will be listed or
-extracted.
-
-``LIST_ONLY`` will list the files in the archive rather than extract them.
-
-With ``VERBOSE``, the command will produce verbose output.
diff --git a/share/cmake-3.18/Help/command/find_file.rst b/share/cmake-3.18/Help/command/find_file.rst
deleted file mode 100644
index 3f03f37..0000000
--- a/share/cmake-3.18/Help/command/find_file.rst
+++ /dev/null
@@ -1,36 +0,0 @@
-find_file
----------
-
-.. |FIND_XXX| replace:: find_file
-.. |NAMES| replace:: NAMES name1 [name2 ...]
-.. |SEARCH_XXX| replace:: full path to a file
-.. |SEARCH_XXX_DESC| replace:: full path to named file
-.. |prefix_XXX_SUBDIR| replace:: ``<prefix>/include``
-.. |entry_XXX_SUBDIR| replace:: ``<entry>/include``
-
-.. |FIND_PACKAGE_ROOT_PREFIX_PATH_XXX| replace::
-   ``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`
-   is set, and |FIND_PACKAGE_ROOT_PREFIX_PATH_XXX_SUBDIR|
-.. |CMAKE_PREFIX_PATH_XXX| replace::
-   ``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`
-   is set, and |CMAKE_PREFIX_PATH_XXX_SUBDIR|
-.. |CMAKE_XXX_PATH| replace:: :variable:`CMAKE_INCLUDE_PATH`
-.. |CMAKE_XXX_MAC_PATH| replace:: :variable:`CMAKE_FRAMEWORK_PATH`
-
-.. |SYSTEM_ENVIRONMENT_PATH_XXX| replace:: The directories in ``PATH`` and ``INCLUDE``.
-.. |SYSTEM_ENVIRONMENT_PATH_WINDOWS_XXX| replace:: On Windows hosts:
-      ``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`
-      is set, and |SYSTEM_ENVIRONMENT_PREFIX_PATH_XXX_SUBDIR|.
-
-.. |CMAKE_SYSTEM_PREFIX_PATH_XXX| replace::
-   ``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`
-   is set, and |CMAKE_SYSTEM_PREFIX_PATH_XXX_SUBDIR|
-.. |CMAKE_SYSTEM_XXX_PATH| replace::
-   :variable:`CMAKE_SYSTEM_INCLUDE_PATH`
-.. |CMAKE_SYSTEM_XXX_MAC_PATH| replace::
-   :variable:`CMAKE_SYSTEM_FRAMEWORK_PATH`
-
-.. |CMAKE_FIND_ROOT_PATH_MODE_XXX| replace::
-   :variable:`CMAKE_FIND_ROOT_PATH_MODE_INCLUDE`
-
-.. include:: FIND_XXX.txt
diff --git a/share/cmake-3.18/Help/command/find_library.rst b/share/cmake-3.18/Help/command/find_library.rst
deleted file mode 100644
index 8a55aca..0000000
--- a/share/cmake-3.18/Help/command/find_library.rst
+++ /dev/null
@@ -1,81 +0,0 @@
-find_library
-------------
-
-.. |FIND_XXX| replace:: find_library
-.. |NAMES| replace:: NAMES name1 [name2 ...] [NAMES_PER_DIR]
-.. |SEARCH_XXX| replace:: library
-.. |SEARCH_XXX_DESC| replace:: library
-.. |prefix_XXX_SUBDIR| replace:: ``<prefix>/lib``
-.. |entry_XXX_SUBDIR| replace:: ``<entry>/lib``
-
-.. |FIND_PACKAGE_ROOT_PREFIX_PATH_XXX| replace::
-   ``<prefix>/lib/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE` is set,
-   and |FIND_PACKAGE_ROOT_PREFIX_PATH_XXX_SUBDIR|
-.. |CMAKE_PREFIX_PATH_XXX| replace::
-   ``<prefix>/lib/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE` is set,
-   and |CMAKE_PREFIX_PATH_XXX_SUBDIR|
-.. |CMAKE_XXX_PATH| replace:: :variable:`CMAKE_LIBRARY_PATH`
-.. |CMAKE_XXX_MAC_PATH| replace:: :variable:`CMAKE_FRAMEWORK_PATH`
-
-.. |SYSTEM_ENVIRONMENT_PATH_XXX| replace:: The directories in ``PATH`` and ``INCLUDE``.
-.. |SYSTEM_ENVIRONMENT_PATH_WINDOWS_XXX| replace:: On Windows hosts:
-      ``<prefix>/lib/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`
-      is set, and |SYSTEM_ENVIRONMENT_PREFIX_PATH_XXX_SUBDIR|.
-
-.. |CMAKE_SYSTEM_PREFIX_PATH_XXX| replace::
-   ``<prefix>/lib/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE` is set,
-   and |CMAKE_SYSTEM_PREFIX_PATH_XXX_SUBDIR|
-.. |CMAKE_SYSTEM_XXX_PATH| replace::
-   :variable:`CMAKE_SYSTEM_LIBRARY_PATH`
-.. |CMAKE_SYSTEM_XXX_MAC_PATH| replace::
-   :variable:`CMAKE_SYSTEM_FRAMEWORK_PATH`
-
-.. |CMAKE_FIND_ROOT_PATH_MODE_XXX| replace::
-   :variable:`CMAKE_FIND_ROOT_PATH_MODE_LIBRARY`
-
-.. include:: FIND_XXX.txt
-
-When more than one value is given to the ``NAMES`` option this command by
-default will consider one name at a time and search every directory
-for it.  The ``NAMES_PER_DIR`` option tells this command to consider one
-directory at a time and search for all names in it.
-
-Each library name given to the ``NAMES`` option is first considered
-as a library file name and then considered with platform-specific
-prefixes (e.g. ``lib``) and suffixes (e.g. ``.so``).  Therefore one
-may specify library file names such as ``libfoo.a`` directly.
-This can be used to locate static libraries on UNIX-like systems.
-
-If the library found is a framework, then ``<VAR>`` will be set to the full
-path to the framework ``<fullPath>/A.framework``.  When a full path to a
-framework is used as a library, CMake will use a ``-framework A``, and a
-``-F<fullPath>`` to link the framework to the target.
-
-If the :variable:`CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX` variable is set all
-search paths will be tested as normal, with the suffix appended, and with
-all matches of ``lib/`` replaced with
-``lib${CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX}/``.  This variable overrides
-the :prop_gbl:`FIND_LIBRARY_USE_LIB32_PATHS`,
-:prop_gbl:`FIND_LIBRARY_USE_LIBX32_PATHS`,
-and :prop_gbl:`FIND_LIBRARY_USE_LIB64_PATHS` global properties.
-
-If the :prop_gbl:`FIND_LIBRARY_USE_LIB32_PATHS` global property is set
-all search paths will be tested as normal, with ``32/`` appended, and
-with all matches of ``lib/`` replaced with ``lib32/``.  This property is
-automatically set for the platforms that are known to need it if at
-least one of the languages supported by the :command:`project` command
-is enabled.
-
-If the :prop_gbl:`FIND_LIBRARY_USE_LIBX32_PATHS` global property is set
-all search paths will be tested as normal, with ``x32/`` appended, and
-with all matches of ``lib/`` replaced with ``libx32/``.  This property is
-automatically set for the platforms that are known to need it if at
-least one of the languages supported by the :command:`project` command
-is enabled.
-
-If the :prop_gbl:`FIND_LIBRARY_USE_LIB64_PATHS` global property is set
-all search paths will be tested as normal, with ``64/`` appended, and
-with all matches of ``lib/`` replaced with ``lib64/``.  This property is
-automatically set for the platforms that are known to need it if at
-least one of the languages supported by the :command:`project` command
-is enabled.
diff --git a/share/cmake-3.18/Help/command/find_package.rst b/share/cmake-3.18/Help/command/find_package.rst
deleted file mode 100644
index 857de78..0000000
--- a/share/cmake-3.18/Help/command/find_package.rst
+++ /dev/null
@@ -1,426 +0,0 @@
-find_package
-------------
-
-.. only:: html
-
-   .. contents::
-
-Find an external project, and load its settings.
-
-.. _`basic signature`:
-
-Basic Signature and Module Mode
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. code-block:: cmake
-
-  find_package(<PackageName> [version] [EXACT] [QUIET] [MODULE]
-               [REQUIRED] [[COMPONENTS] [components...]]
-               [OPTIONAL_COMPONENTS components...]
-               [NO_POLICY_SCOPE])
-
-Finds and loads settings from an external project.  ``<PackageName>_FOUND``
-will be set to indicate whether the package was found.  When the
-package is found package-specific information is provided through
-variables and :ref:`Imported Targets` documented by the package itself.  The
-``QUIET`` option disables informational messages, including those indicating
-that the package cannot be found if it is not ``REQUIRED``.  The ``REQUIRED``
-option stops processing with an error message if the package cannot be found.
-
-A package-specific list of required components may be listed after the
-``COMPONENTS`` option (or after the ``REQUIRED`` option if present).
-Additional optional components may be listed after
-``OPTIONAL_COMPONENTS``.  Available components and their influence on
-whether a package is considered to be found are defined by the target
-package.
-
-The ``[version]`` argument requests a version with which the package found
-should be compatible (format is ``major[.minor[.patch[.tweak]]]``).  The
-``EXACT`` option requests that the version be matched exactly.  If no
-``[version]`` and/or component list is given to a recursive invocation
-inside a find-module, the corresponding arguments are forwarded
-automatically from the outer call (including the ``EXACT`` flag for
-``[version]``).  Version support is currently provided only on a
-package-by-package basis (see the `Version Selection`_ section below).
-
-See the :command:`cmake_policy` command documentation for discussion
-of the ``NO_POLICY_SCOPE`` option.
-
-The command has two modes by which it searches for packages: "Module"
-mode and "Config" mode.  The above signature selects Module mode.
-If no module is found the command falls back to Config mode, described
-below. This fall back is disabled if the ``MODULE`` option is given.
-
-In Module mode, CMake searches for a file called ``Find<PackageName>.cmake``.
-The file is first searched in the :variable:`CMAKE_MODULE_PATH`,
-then among the :ref:`Find Modules` provided by the CMake installation.
-If the file is found, it is read and processed by CMake.  It is responsible
-for finding the package, checking the version, and producing any needed
-messages.  Some find-modules provide limited or no support for versioning;
-check the module documentation.
-
-If the ``MODULE`` option is not specified in the above signature,
-CMake first searches for the package using Module mode. Then, if the
-package is not found, it searches again using Config mode. A user
-may set the variable :variable:`CMAKE_FIND_PACKAGE_PREFER_CONFIG` to
-``TRUE`` to direct CMake first search using Config mode before falling
-back to Module mode.
-
-Full Signature and Config Mode
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-User code should generally look for packages using the above `basic
-signature`_.  The remainder of this command documentation specifies the
-full command signature and details of the search process.  Project
-maintainers wishing to provide a package to be found by this command
-are encouraged to read on.
-
-The complete Config mode command signature is
-
-.. code-block:: cmake
-
-  find_package(<PackageName> [version] [EXACT] [QUIET]
-               [REQUIRED] [[COMPONENTS] [components...]]
-               [OPTIONAL_COMPONENTS components...]
-               [CONFIG|NO_MODULE]
-               [NO_POLICY_SCOPE]
-               [NAMES name1 [name2 ...]]
-               [CONFIGS config1 [config2 ...]]
-               [HINTS path1 [path2 ... ]]
-               [PATHS path1 [path2 ... ]]
-               [PATH_SUFFIXES suffix1 [suffix2 ...]]
-               [NO_DEFAULT_PATH]
-               [NO_PACKAGE_ROOT_PATH]
-               [NO_CMAKE_PATH]
-               [NO_CMAKE_ENVIRONMENT_PATH]
-               [NO_SYSTEM_ENVIRONMENT_PATH]
-               [NO_CMAKE_PACKAGE_REGISTRY]
-               [NO_CMAKE_BUILDS_PATH] # Deprecated; does nothing.
-               [NO_CMAKE_SYSTEM_PATH]
-               [NO_CMAKE_SYSTEM_PACKAGE_REGISTRY]
-               [CMAKE_FIND_ROOT_PATH_BOTH |
-                ONLY_CMAKE_FIND_ROOT_PATH |
-                NO_CMAKE_FIND_ROOT_PATH])
-
-The ``CONFIG`` option, the synonymous ``NO_MODULE`` option, or the use
-of options not specified in the `basic signature`_ all enforce pure Config
-mode.  In pure Config mode, the command skips Module mode search and
-proceeds at once with Config mode search.
-
-Config mode search attempts to locate a configuration file provided by the
-package to be found.  A cache entry called ``<PackageName>_DIR`` is created to
-hold the directory containing the file.  By default the command
-searches for a package with the name ``<PackageName>``.  If the ``NAMES`` option
-is given the names following it are used instead of ``<PackageName>``.
-The command searches for a file called ``<PackageName>Config.cmake`` or
-``<lower-case-package-name>-config.cmake`` for each name specified.
-A replacement set of possible configuration file names may be given
-using the ``CONFIGS`` option.  The search procedure is specified below.
-Once found, the configuration file is read and processed by CMake.
-Since the file is provided by the package it already knows the
-location of package contents.  The full path to the configuration file
-is stored in the cmake variable ``<PackageName>_CONFIG``.
-
-All configuration files which have been considered by CMake while
-searching for an installation of the package with an appropriate
-version are stored in the cmake variable ``<PackageName>_CONSIDERED_CONFIGS``,
-the associated versions in ``<PackageName>_CONSIDERED_VERSIONS``.
-
-If the package configuration file cannot be found CMake will generate
-an error describing the problem unless the ``QUIET`` argument is
-specified.  If ``REQUIRED`` is specified and the package is not found a
-fatal error is generated and the configure step stops executing.  If
-``<PackageName>_DIR`` has been set to a directory not containing a
-configuration file CMake will ignore it and search from scratch.
-
-Package maintainers providing CMake package configuration files are
-encouraged to name and install them such that the `Search Procedure`_
-outlined below will find them without requiring use of additional options.
-
-Version Selection
-^^^^^^^^^^^^^^^^^
-
-When the ``[version]`` argument is given Config mode will only find a
-version of the package that claims compatibility with the requested
-version (format is ``major[.minor[.patch[.tweak]]]``).  If the ``EXACT``
-option is given only a version of the package claiming an exact match
-of the requested version may be found.  CMake does not establish any
-convention for the meaning of version numbers.  Package version
-numbers are checked by "version" files provided by the packages
-themselves.  For a candidate package configuration file
-``<config-file>.cmake`` the corresponding version file is located next
-to it and named either ``<config-file>-version.cmake`` or
-``<config-file>Version.cmake``.  If no such version file is available
-then the configuration file is assumed to not be compatible with any
-requested version.  A basic version file containing generic version
-matching code can be created using the
-:module:`CMakePackageConfigHelpers` module.  When a version file
-is found it is loaded to check the requested version number.  The
-version file is loaded in a nested scope in which the following
-variables have been defined:
-
-``PACKAGE_FIND_NAME``
-  the ``<PackageName>``
-``PACKAGE_FIND_VERSION``
-  full requested version string
-``PACKAGE_FIND_VERSION_MAJOR``
-  major version if requested, else 0
-``PACKAGE_FIND_VERSION_MINOR``
-  minor version if requested, else 0
-``PACKAGE_FIND_VERSION_PATCH``
-  patch version if requested, else 0
-``PACKAGE_FIND_VERSION_TWEAK``
-  tweak version if requested, else 0
-``PACKAGE_FIND_VERSION_COUNT``
-  number of version components, 0 to 4
-
-The version file checks whether it satisfies the requested version and
-sets these variables:
-
-``PACKAGE_VERSION``
-  full provided version string
-``PACKAGE_VERSION_EXACT``
-  true if version is exact match
-``PACKAGE_VERSION_COMPATIBLE``
-  true if version is compatible
-``PACKAGE_VERSION_UNSUITABLE``
-  true if unsuitable as any version
-
-These variables are checked by the ``find_package`` command to determine
-whether the configuration file provides an acceptable version.  They
-are not available after the ``find_package`` call returns.  If the version
-is acceptable the following variables are set:
-
-``<PackageName>_VERSION``
-  full provided version string
-``<PackageName>_VERSION_MAJOR``
-  major version if provided, else 0
-``<PackageName>_VERSION_MINOR``
-  minor version if provided, else 0
-``<PackageName>_VERSION_PATCH``
-  patch version if provided, else 0
-``<PackageName>_VERSION_TWEAK``
-  tweak version if provided, else 0
-``<PackageName>_VERSION_COUNT``
-  number of version components, 0 to 4
-
-and the corresponding package configuration file is loaded.
-When multiple package configuration files are available whose version files
-claim compatibility with the version requested it is unspecified which
-one is chosen: unless the variable :variable:`CMAKE_FIND_PACKAGE_SORT_ORDER`
-is set no attempt is made to choose a highest or closest version number.
-
-To control the order in which ``find_package`` checks for compatibility use
-the two variables :variable:`CMAKE_FIND_PACKAGE_SORT_ORDER` and
-:variable:`CMAKE_FIND_PACKAGE_SORT_DIRECTION`.
-For instance in order to select the highest version one can set
-
-.. code-block:: cmake
-
-  SET(CMAKE_FIND_PACKAGE_SORT_ORDER NATURAL)
-  SET(CMAKE_FIND_PACKAGE_SORT_DIRECTION DEC)
-
-before calling ``find_package``.
-
-Search Procedure
-^^^^^^^^^^^^^^^^
-
-CMake constructs a set of possible installation prefixes for the
-package.  Under each prefix several directories are searched for a
-configuration file.  The tables below show the directories searched.
-Each entry is meant for installation trees following Windows (``W``), UNIX
-(``U``), or Apple (``A``) conventions::
-
-  <prefix>/                                                       (W)
-  <prefix>/(cmake|CMake)/                                         (W)
-  <prefix>/<name>*/                                               (W)
-  <prefix>/<name>*/(cmake|CMake)/                                 (W)
-  <prefix>/(lib/<arch>|lib*|share)/cmake/<name>*/                 (U)
-  <prefix>/(lib/<arch>|lib*|share)/<name>*/                       (U)
-  <prefix>/(lib/<arch>|lib*|share)/<name>*/(cmake|CMake)/         (U)
-  <prefix>/<name>*/(lib/<arch>|lib*|share)/cmake/<name>*/         (W/U)
-  <prefix>/<name>*/(lib/<arch>|lib*|share)/<name>*/               (W/U)
-  <prefix>/<name>*/(lib/<arch>|lib*|share)/<name>*/(cmake|CMake)/ (W/U)
-
-On systems supporting macOS :prop_tgt:`FRAMEWORK` and :prop_tgt:`BUNDLE`, the
-following directories are searched for Frameworks or Application Bundles
-containing a configuration file::
-
-  <prefix>/<name>.framework/Resources/                    (A)
-  <prefix>/<name>.framework/Resources/CMake/              (A)
-  <prefix>/<name>.framework/Versions/*/Resources/         (A)
-  <prefix>/<name>.framework/Versions/*/Resources/CMake/   (A)
-  <prefix>/<name>.app/Contents/Resources/                 (A)
-  <prefix>/<name>.app/Contents/Resources/CMake/           (A)
-
-In all cases the ``<name>`` is treated as case-insensitive and corresponds
-to any of the names specified (``<PackageName>`` or names given by ``NAMES``).
-
-Paths with ``lib/<arch>`` are enabled if the
-:variable:`CMAKE_LIBRARY_ARCHITECTURE` variable is set. ``lib*`` includes one
-or more of the values ``lib64``, ``lib32``, ``libx32`` or ``lib`` (searched in
-that order).
-
-* Paths with ``lib64`` are searched on 64 bit platforms if the
-  :prop_gbl:`FIND_LIBRARY_USE_LIB64_PATHS` property is set to ``TRUE``.
-* Paths with ``lib32`` are searched on 32 bit platforms if the
-  :prop_gbl:`FIND_LIBRARY_USE_LIB32_PATHS` property is set to ``TRUE``.
-* Paths with ``libx32`` are searched on platforms using the x32 ABI
-  if the :prop_gbl:`FIND_LIBRARY_USE_LIBX32_PATHS` property is set to ``TRUE``.
-* The ``lib`` path is always searched.
-
-If ``PATH_SUFFIXES`` is specified, the suffixes are appended to each
-(``W``) or (``U``) directory entry one-by-one.
-
-This set of directories is intended to work in cooperation with
-projects that provide configuration files in their installation trees.
-Directories above marked with (``W``) are intended for installations on
-Windows where the prefix may point at the top of an application's
-installation directory.  Those marked with (``U``) are intended for
-installations on UNIX platforms where the prefix is shared by multiple
-packages.  This is merely a convention, so all (``W``) and (``U``) directories
-are still searched on all platforms.  Directories marked with (``A``) are
-intended for installations on Apple platforms.  The
-:variable:`CMAKE_FIND_FRAMEWORK` and :variable:`CMAKE_FIND_APPBUNDLE`
-variables determine the order of preference.
-
-The set of installation prefixes is constructed using the following
-steps.  If ``NO_DEFAULT_PATH`` is specified all ``NO_*`` options are
-enabled.
-
-1. Search paths specified in the :variable:`<PackageName>_ROOT` CMake
-   variable and the :envvar:`<PackageName>_ROOT` environment variable,
-   where ``<PackageName>`` is the package to be found.
-   The package root variables are maintained as a stack so if
-   called from within a find module, root paths from the parent's find
-   module will also be searched after paths for the current package.
-   This can be skipped if ``NO_PACKAGE_ROOT_PATH`` is passed or by setting
-   the :variable:`CMAKE_FIND_USE_PACKAGE_ROOT_PATH` to ``FALSE``.
-   See policy :policy:`CMP0074`.
-
-2. Search paths specified in cmake-specific cache variables.  These
-   are intended to be used on the command line with a ``-DVAR=value``.
-   The values are interpreted as :ref:`semicolon-separated lists <CMake Language Lists>`.
-   This can be skipped if ``NO_CMAKE_PATH`` is passed or by setting the
-   :variable:`CMAKE_FIND_USE_CMAKE_PATH` to ``FALSE``:
-
-   * :variable:`CMAKE_PREFIX_PATH`
-   * :variable:`CMAKE_FRAMEWORK_PATH`
-   * :variable:`CMAKE_APPBUNDLE_PATH`
-
-3. Search paths specified in cmake-specific environment variables.
-   These are intended to be set in the user's shell configuration,
-   and therefore use the host's native path separator
-   (``;`` on Windows and ``:`` on UNIX).
-   This can be skipped if ``NO_CMAKE_ENVIRONMENT_PATH`` is passed or by setting
-   the :variable:`CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH` to ``FALSE``:
-
-   * ``<PackageName>_DIR``
-   * :envvar:`CMAKE_PREFIX_PATH`
-   * ``CMAKE_FRAMEWORK_PATH``
-   * ``CMAKE_APPBUNDLE_PATH``
-
-4. Search paths specified by the ``HINTS`` option.  These should be paths
-   computed by system introspection, such as a hint provided by the
-   location of another item already found.  Hard-coded guesses should
-   be specified with the ``PATHS`` option.
-
-5. Search the standard system environment variables.  This can be
-   skipped if ``NO_SYSTEM_ENVIRONMENT_PATH`` is passed  or by setting the
-   :variable:`CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH` to ``FALSE``. Path entries
-   ending in ``/bin`` or ``/sbin`` are automatically converted to their
-   parent directories:
-
-   * ``PATH``
-
-6. Search paths stored in the CMake :ref:`User Package Registry`.
-   This can be skipped if ``NO_CMAKE_PACKAGE_REGISTRY`` is passed or by
-   setting the variable :variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY`
-   to ``FALSE`` or the deprecated variable
-   :variable:`CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY` to ``TRUE``.
-
-   See the :manual:`cmake-packages(7)` manual for details on the user
-   package registry.
-
-7. Search cmake variables defined in the Platform files for the
-   current system.  This can be skipped if ``NO_CMAKE_SYSTEM_PATH`` is
-   passed or by setting the :variable:`CMAKE_FIND_USE_CMAKE_SYSTEM_PATH`
-   to ``FALSE``:
-
-   * :variable:`CMAKE_SYSTEM_PREFIX_PATH`
-   * :variable:`CMAKE_SYSTEM_FRAMEWORK_PATH`
-   * :variable:`CMAKE_SYSTEM_APPBUNDLE_PATH`
-
-   The platform paths that these variables contain are locations that
-   typically include installed software. An example being ``/usr/local`` for
-   UNIX based platforms.
-
-8. Search paths stored in the CMake :ref:`System Package Registry`.
-   This can be skipped if ``NO_CMAKE_SYSTEM_PACKAGE_REGISTRY`` is passed
-   or by setting the :variable:`CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY`
-   variable to ``FALSE`` or the deprecated variable
-   :variable:`CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY` to ``TRUE``.
-
-   See the :manual:`cmake-packages(7)` manual for details on the system
-   package registry.
-
-9. Search paths specified by the ``PATHS`` option.  These are typically
-   hard-coded guesses.
-
-.. |FIND_XXX| replace:: find_package
-.. |FIND_ARGS_XXX| replace:: <PackageName>
-.. |CMAKE_FIND_ROOT_PATH_MODE_XXX| replace::
-   :variable:`CMAKE_FIND_ROOT_PATH_MODE_PACKAGE`
-
-.. include:: FIND_XXX_ROOT.txt
-.. include:: FIND_XXX_ORDER.txt
-
-By default the value stored in the result variable will be the path at
-which the file is found.  The :variable:`CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS`
-variable may be set to ``TRUE`` before calling ``find_package`` in order
-to resolve symbolic links and store the real path to the file.
-
-Every non-REQUIRED ``find_package`` call can be disabled by setting the
-:variable:`CMAKE_DISABLE_FIND_PACKAGE_<PackageName>` variable to ``TRUE``.
-
-Package File Interface Variables
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-When loading a find module or package configuration file ``find_package``
-defines variables to provide information about the call arguments (and
-restores their original state before returning):
-
-``CMAKE_FIND_PACKAGE_NAME``
-  the ``<PackageName>`` which is searched for
-``<PackageName>_FIND_REQUIRED``
-  true if ``REQUIRED`` option was given
-``<PackageName>_FIND_QUIETLY``
-  true if ``QUIET`` option was given
-``<PackageName>_FIND_VERSION``
-  full requested version string
-``<PackageName>_FIND_VERSION_MAJOR``
-  major version if requested, else 0
-``<PackageName>_FIND_VERSION_MINOR``
-  minor version if requested, else 0
-``<PackageName>_FIND_VERSION_PATCH``
-  patch version if requested, else 0
-``<PackageName>_FIND_VERSION_TWEAK``
-  tweak version if requested, else 0
-``<PackageName>_FIND_VERSION_COUNT``
-  number of version components, 0 to 4
-``<PackageName>_FIND_VERSION_EXACT``
-  true if ``EXACT`` option was given
-``<PackageName>_FIND_COMPONENTS``
-  list of requested components
-``<PackageName>_FIND_REQUIRED_<c>``
-  true if component ``<c>`` is required,
-  false if component ``<c>`` is optional
-
-In Module mode the loaded find module is responsible to honor the
-request detailed by these variables; see the find module for details.
-In Config mode ``find_package`` handles ``REQUIRED``, ``QUIET``, and
-``[version]`` options automatically but leaves it to the package
-configuration file to handle components in a way that makes sense
-for the package.  The package configuration file may set
-``<PackageName>_FOUND`` to false to tell ``find_package`` that component
-requirements are not satisfied.
diff --git a/share/cmake-3.18/Help/command/find_path.rst b/share/cmake-3.18/Help/command/find_path.rst
deleted file mode 100644
index 52ffe3c..0000000
--- a/share/cmake-3.18/Help/command/find_path.rst
+++ /dev/null
@@ -1,41 +0,0 @@
-find_path
----------
-
-.. |FIND_XXX| replace:: find_path
-.. |NAMES| replace:: NAMES name1 [name2 ...]
-.. |SEARCH_XXX| replace:: file in a directory
-.. |SEARCH_XXX_DESC| replace:: directory containing the named file
-.. |prefix_XXX_SUBDIR| replace:: ``<prefix>/include``
-.. |entry_XXX_SUBDIR| replace:: ``<entry>/include``
-
-.. |FIND_PACKAGE_ROOT_PREFIX_PATH_XXX| replace::
-   ``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`
-   is set, and |FIND_PACKAGE_ROOT_PREFIX_PATH_XXX_SUBDIR|
-.. |CMAKE_PREFIX_PATH_XXX| replace::
-   ``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`
-   is set, and |CMAKE_PREFIX_PATH_XXX_SUBDIR|
-.. |CMAKE_XXX_PATH| replace:: :variable:`CMAKE_INCLUDE_PATH`
-.. |CMAKE_XXX_MAC_PATH| replace:: :variable:`CMAKE_FRAMEWORK_PATH`
-
-.. |SYSTEM_ENVIRONMENT_PATH_XXX| replace:: The directories in ``PATH`` and ``INCLUDE``.
-.. |SYSTEM_ENVIRONMENT_PATH_WINDOWS_XXX| replace:: On Windows hosts:
-      ``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`
-      is set, and |SYSTEM_ENVIRONMENT_PREFIX_PATH_XXX_SUBDIR|.
-
-.. |CMAKE_SYSTEM_PREFIX_PATH_XXX| replace::
-   ``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`
-   is set, and |CMAKE_SYSTEM_PREFIX_PATH_XXX_SUBDIR|
-.. |CMAKE_SYSTEM_XXX_PATH| replace::
-   :variable:`CMAKE_SYSTEM_INCLUDE_PATH`
-.. |CMAKE_SYSTEM_XXX_MAC_PATH| replace::
-   :variable:`CMAKE_SYSTEM_FRAMEWORK_PATH`
-
-.. |CMAKE_FIND_ROOT_PATH_MODE_XXX| replace::
-   :variable:`CMAKE_FIND_ROOT_PATH_MODE_INCLUDE`
-
-.. include:: FIND_XXX.txt
-
-When searching for frameworks, if the file is specified as ``A/b.h``, then
-the framework search will look for ``A.framework/Headers/b.h``.  If that
-is found the path will be set to the path to the framework.  CMake
-will convert this to the correct ``-F`` option to include the file.
diff --git a/share/cmake-3.18/Help/command/foreach.rst b/share/cmake-3.18/Help/command/foreach.rst
deleted file mode 100644
index a01a104..0000000
--- a/share/cmake-3.18/Help/command/foreach.rst
+++ /dev/null
@@ -1,127 +0,0 @@
-foreach
--------
-
-Evaluate a group of commands for each value in a list.
-
-.. code-block:: cmake
-
-  foreach(<loop_var> <items>)
-    <commands>
-  endforeach()
-
-where ``<items>`` is a list of items that are separated by
-semicolon or whitespace.
-All commands between ``foreach`` and the matching ``endforeach`` are recorded
-without being invoked.  Once the ``endforeach`` is evaluated, the recorded
-list of commands is invoked once for each item in ``<items>``.
-At the beginning of each iteration the variable ``loop_var`` will be set
-to the value of the current item.
-
-The commands :command:`break` and :command:`continue` provide means to
-escape from the normal control flow.
-
-Per legacy, the :command:`endforeach` command admits
-an optional ``<loop_var>`` argument.
-If used, it must be a verbatim
-repeat of the argument of the opening
-``foreach`` command.
-
-.. code-block:: cmake
-
-  foreach(<loop_var> RANGE <stop>)
-
-In this variant, ``foreach`` iterates over the numbers
-0, 1, ... up to (and including) the nonnegative integer ``<stop>``.
-
-.. code-block:: cmake
-
-  foreach(<loop_var> RANGE <start> <stop> [<step>])
-
-In this variant, ``foreach`` iterates over the numbers from
-``<start>`` up to at most ``<stop>`` in steps of ``<step>``.
-If ``<step>`` is not specified, then the step size is 1.
-The three arguments ``<start>`` ``<stop>`` ``<step>`` must
-all be nonnegative integers, and ``<stop>`` must not be
-smaller than ``<start>``; otherwise you enter the danger zone
-of undocumented behavior that may change in future releases.
-
-.. code-block:: cmake
-
-  foreach(<loop_var> IN [LISTS [<lists>]] [ITEMS [<items>]])
-
-In this variant, ``<lists>`` is a whitespace or semicolon
-separated list of list-valued variables. The ``foreach``
-command iterates over each item in each given list.
-The ``<items>`` following the ``ITEMS`` keyword are processed
-as in the first variant of the ``foreach`` command.
-The forms ``LISTS A`` and ``ITEMS ${A}`` are
-equivalent.
-
-The following example shows how the ``LISTS`` option is
-processed:
-
-.. code-block:: cmake
-
-  set(A 0;1)
-  set(B 2 3)
-  set(C "4 5")
-  set(D 6;7 8)
-  set(E "")
-  foreach(X IN LISTS A B C D E)
-      message(STATUS "X=${X}")
-  endforeach()
-
-yields
-::
-
-  -- X=0
-  -- X=1
-  -- X=2
-  -- X=3
-  -- X=4 5
-  -- X=6
-  -- X=7
-  -- X=8
-
-
-.. code-block:: cmake
-
-  foreach(<loop_var>... IN ZIP_LISTS <lists>)
-
-In this variant, ``<lists>`` is a whitespace or semicolon
-separated list of list-valued variables. The ``foreach``
-command iterates over each list simultaneously setting the
-iteration variables as follows:
-
-- if the only ``loop_var`` given, then it sets a series of
-  ``loop_var_N`` variables to the current item from the
-  corresponding list;
-- if multiple variable names passed, their count should match
-  the lists variables count;
-- if any of the lists are shorter, the corresponding iteration
-  variable is not defined for the current iteration.
-
-.. code-block:: cmake
-
-  list(APPEND English one two three four)
-  list(APPEND Bahasa satu dua tiga)
-
-  foreach(num IN ZIP_LISTS English Bahasa)
-      message(STATUS "num_0=${num_0}, num_1=${num_1}")
-  endforeach()
-
-  foreach(en ba IN ZIP_LISTS English Bahasa)
-      message(STATUS "en=${en}, ba=${ba}")
-  endforeach()
-
-yields
-::
-
-  -- num_0=one, num_1=satu
-  -- num_0=two, num_1=dua
-  -- num_0=three, num_1=tiga
-  -- num_0=four, num_1=
-  -- en=one, ba=satu
-  -- en=two, ba=dua
-  -- en=three, ba=tiga
-  -- en=four, ba=
diff --git a/share/cmake-3.18/Help/command/function.rst b/share/cmake-3.18/Help/command/function.rst
deleted file mode 100644
index 7a9b907..0000000
--- a/share/cmake-3.18/Help/command/function.rst
+++ /dev/null
@@ -1,74 +0,0 @@
-function
---------
-
-Start recording a function for later invocation as a command.
-
-.. code-block:: cmake
-
-  function(<name> [<arg1> ...])
-    <commands>
-  endfunction()
-
-Defines a function named ``<name>`` that takes arguments named
-``<arg1>``, ...  The ``<commands>`` in the function definition
-are recorded; they are not executed until the function is invoked.
-
-Per legacy, the :command:`endfunction` command admits an optional
-``<name>`` argument. If used, it must be a verbatim repeat of the
-argument of the opening ``function`` command.
-
-A function opens a new scope: see :command:`set(var PARENT_SCOPE)` for
-details.
-
-See the :command:`cmake_policy()` command documentation for the behavior
-of policies inside functions.
-
-See the :command:`macro()` command documentation for differences
-between CMake functions and macros.
-
-Invocation
-^^^^^^^^^^
-
-The function invocation is case-insensitive. A function defined as
-
-.. code-block:: cmake
-
-  function(foo)
-    <commands>
-  endfunction()
-
-can be invoked through any of
-
-.. code-block:: cmake
-
-  foo()
-  Foo()
-  FOO()
-  cmake_language(CALL foo)
-
-and so on. However, it is strongly recommended to stay with the
-case chosen in the function definition. Typically functions use
-all-lowercase names.
-
-The :command:`cmake_language(CALL ...)` command can also be used to
-invoke the function.
-
-Arguments
-^^^^^^^^^
-
-When the function is invoked, the recorded ``<commands>`` are first
-modified by replacing formal parameters (``${arg1}``, ...) with the
-arguments passed, and then invoked as normal commands.
-
-In addition to referencing the formal parameters you can reference the
-``ARGC`` variable which will be set to the number of arguments passed
-into the function as well as ``ARGV0``, ``ARGV1``, ``ARGV2``, ...  which
-will have the actual values of the arguments passed in.  This facilitates
-creating functions with optional arguments.
-
-Furthermore, ``ARGV`` holds the list of all arguments given to the
-function and ``ARGN`` holds the list of arguments past the last expected
-argument.  Referencing to ``ARGV#`` arguments beyond ``ARGC`` have
-undefined behavior.  Checking that ``ARGC`` is greater than ``#`` is
-the only way to ensure that ``ARGV#`` was passed to the function as an
-extra argument.
diff --git a/share/cmake-3.18/Help/command/get_directory_property.rst b/share/cmake-3.18/Help/command/get_directory_property.rst
deleted file mode 100644
index 218efa9..0000000
--- a/share/cmake-3.18/Help/command/get_directory_property.rst
+++ /dev/null
@@ -1,29 +0,0 @@
-get_directory_property
-----------------------
-
-Get a property of ``DIRECTORY`` scope.
-
-.. code-block:: cmake
-
-  get_directory_property(<variable> [DIRECTORY <dir>] <prop-name>)
-
-Stores a property of directory scope in the named ``<variable>``.
-The ``DIRECTORY`` argument specifies another directory from which
-to retrieve the property value instead of the current directory.
-The specified directory must have already been traversed by CMake.
-
-If the property is not defined for the nominated directory scope,
-an empty string is returned.  In the case of ``INHERITED`` properties,
-if the property is not found for the nominated directory scope,
-the search will chain to a parent scope as described for the
-:command:`define_property` command.
-
-.. code-block:: cmake
-
-  get_directory_property(<variable> [DIRECTORY <dir>]
-                         DEFINITION <var-name>)
-
-Get a variable definition from a directory.  This form is useful to
-get a variable definition from another directory.
-
-See also the more general :command:`get_property` command.
diff --git a/share/cmake-3.18/Help/command/get_filename_component.rst b/share/cmake-3.18/Help/command/get_filename_component.rst
deleted file mode 100644
index 9bbf877..0000000
--- a/share/cmake-3.18/Help/command/get_filename_component.rst
+++ /dev/null
@@ -1,55 +0,0 @@
-get_filename_component
-----------------------
-
-Get a specific component of a full filename.
-
-.. code-block:: cmake
-
-  get_filename_component(<var> <FileName> <mode> [CACHE])
-
-Sets ``<var>`` to a component of ``<FileName>``, where ``<mode>`` is one of:
-
-::
-
- DIRECTORY = Directory without file name
- NAME      = File name without directory
- EXT       = File name longest extension (.b.c from d/a.b.c)
- NAME_WE   = File name without directory or longest extension
- LAST_EXT  = File name last extension (.c from d/a.b.c)
- NAME_WLE  = File name without directory or last extension
- PATH      = Legacy alias for DIRECTORY (use for CMake <= 2.8.11)
-
-Paths are returned with forward slashes and have no trailing slashes.
-If the optional ``CACHE`` argument is specified, the result variable is
-added to the cache.
-
-.. code-block:: cmake
-
-  get_filename_component(<var> <FileName> <mode> [BASE_DIR <dir>] [CACHE])
-
-Sets ``<var>`` to the absolute path of ``<FileName>``, where ``<mode>`` is one
-of:
-
-::
-
- ABSOLUTE  = Full path to file
- REALPATH  = Full path to existing file with symlinks resolved
-
-If the provided ``<FileName>`` is a relative path, it is evaluated relative
-to the given base directory ``<dir>``.  If no base directory is
-provided, the default base directory will be
-:variable:`CMAKE_CURRENT_SOURCE_DIR`.
-
-Paths are returned with forward slashes and have no trailing slashes.  If the
-optional ``CACHE`` argument is specified, the result variable is added to the
-cache.
-
-.. code-block:: cmake
-
-  get_filename_component(<var> <FileName> PROGRAM [PROGRAM_ARGS <arg_var>] [CACHE])
-
-The program in ``<FileName>`` will be found in the system search path or
-left as a full path.  If ``PROGRAM_ARGS`` is present with ``PROGRAM``, then
-any command-line arguments present in the ``<FileName>`` string are split
-from the program name and stored in ``<arg_var>``.  This is used to
-separate a program name from its arguments in a command line string.
diff --git a/share/cmake-3.18/Help/command/get_property.rst b/share/cmake-3.18/Help/command/get_property.rst
deleted file mode 100644
index 0602518..0000000
--- a/share/cmake-3.18/Help/command/get_property.rst
+++ /dev/null
@@ -1,85 +0,0 @@
-get_property
-------------
-
-Get a property.
-
-.. code-block:: cmake
-
-  get_property(<variable>
-               <GLOBAL             |
-                DIRECTORY [<dir>]  |
-                TARGET    <target> |
-                SOURCE    <source> |
-                          [DIRECTORY <dir> | TARGET_DIRECTORY <target>] |
-                INSTALL   <file>   |
-                TEST      <test>   |
-                CACHE     <entry>  |
-                VARIABLE           >
-               PROPERTY <name>
-               [SET | DEFINED | BRIEF_DOCS | FULL_DOCS])
-
-Gets one property from one object in a scope.
-
-The first argument specifies the variable in which to store the result.
-The second argument determines the scope from which to get the property.
-It must be one of the following:
-
-``GLOBAL``
-  Scope is unique and does not accept a name.
-
-``DIRECTORY``
-  Scope defaults to the current directory but another
-  directory (already processed by CMake) may be named by the
-  full or relative path ``<dir>``.
-  See also the :command:`get_directory_property` command.
-
-``TARGET``
-  Scope must name one existing target.
-  See also the :command:`get_target_property` command.
-
-``SOURCE``
-  Scope must name one source file.  By default, the source file's property
-  will be read from the current source directory's scope, but this can be
-  overridden with one of the following sub-options:
-
-  ``DIRECTORY <dir>``
-    The source file property will be read from the ``<dir>`` directory's
-    scope.  CMake must already know about that source directory, either by
-    having added it through a call to :command:`add_subdirectory` or ``<dir>``
-    being the top level source directory.  Relative paths are treated as
-    relative to the current source directory.
-
-  ``TARGET_DIRECTORY <target>``
-    The source file property will be read from the directory scope in which
-    ``<target>`` was created (``<target>`` must therefore already exist).
-
-  See also the :command:`get_source_file_property` command.
-
-``INSTALL``
-  Scope must name one installed file path.
-
-``TEST``
-  Scope must name one existing test.
-  See also the :command:`get_test_property` command.
-
-``CACHE``
-  Scope must name one cache entry.
-
-``VARIABLE``
-  Scope is unique and does not accept a name.
-
-The required ``PROPERTY`` option is immediately followed by the name of
-the property to get.  If the property is not set an empty value is
-returned, although some properties support inheriting from a parent scope
-if defined to behave that way (see :command:`define_property`).
-
-If the ``SET`` option is given the variable is set to a boolean
-value indicating whether the property has been set.  If the ``DEFINED``
-option is given the variable is set to a boolean value indicating
-whether the property has been defined such as with the
-:command:`define_property` command.
-
-If ``BRIEF_DOCS`` or ``FULL_DOCS`` is given then the variable is set to a
-string containing documentation for the requested property.  If
-documentation is requested for a property that has not been defined
-``NOTFOUND`` is returned.
diff --git a/share/cmake-3.18/Help/command/get_source_file_property.rst b/share/cmake-3.18/Help/command/get_source_file_property.rst
deleted file mode 100644
index 76ed776..0000000
--- a/share/cmake-3.18/Help/command/get_source_file_property.rst
+++ /dev/null
@@ -1,40 +0,0 @@
-get_source_file_property
-------------------------
-
-Get a property for a source file.
-
-.. code-block:: cmake
-
-  get_source_file_property(<variable> <file>
-                           [DIRECTORY <dir> | TARGET_DIRECTORY <target>]
-                           <property>)
-
-Gets a property from a source file.  The value of the property is
-stored in the specified ``<variable>``.  If the source property is not found,
-the behavior depends on whether it has been defined to be an ``INHERITED``
-property or not (see :command:`define_property`).  Non-inherited properties
-will set ``variable`` to ``NOTFOUND``, whereas inherited properties will search
-the relevant parent scope as described for the :command:`define_property`
-command and if still unable to find the property, ``variable`` will be set to
-an empty string.
-
-By default, the source file's property will be read from the current source
-directory's scope, but this can be overridden with one of the following
-sub-options:
-
-``DIRECTORY <dir>``
-  The source file property will be read from the ``<dir>`` directory's
-  scope.  CMake must already know about that source directory, either by
-  having added it through a call to :command:`add_subdirectory` or ``<dir>``
-  being the top level source directory.  Relative paths are treated as
-  relative to the current source directory.
-
-``TARGET_DIRECTORY <target>``
-  The source file property will be read from the directory scope in which
-  ``<target>`` was created (``<target>`` must therefore already exist).
-
-Use :command:`set_source_files_properties` to set property values.  Source
-file properties usually control how the file is built. One property that is
-always there is :prop_sf:`LOCATION`.
-
-See also the more general :command:`get_property` command.
diff --git a/share/cmake-3.18/Help/command/if.rst b/share/cmake-3.18/Help/command/if.rst
deleted file mode 100644
index be992df..0000000
--- a/share/cmake-3.18/Help/command/if.rst
+++ /dev/null
@@ -1,280 +0,0 @@
-if
---
-
-Conditionally execute a group of commands.
-
-Synopsis
-^^^^^^^^
-
-.. code-block:: cmake
-
-  if(<condition>)
-    <commands>
-  elseif(<condition>) # optional block, can be repeated
-    <commands>
-  else()              # optional block
-    <commands>
-  endif()
-
-Evaluates the ``condition`` argument of the ``if`` clause according to the
-`Condition syntax`_ described below. If the result is true, then the
-``commands`` in the ``if`` block are executed.
-Otherwise, optional ``elseif`` blocks are processed in the same way.
-Finally, if no ``condition`` is true, ``commands`` in the optional ``else``
-block are executed.
-
-Per legacy, the :command:`else` and :command:`endif` commands admit
-an optional ``<condition>`` argument.
-If used, it must be a verbatim
-repeat of the argument of the opening
-``if`` command.
-
-.. _`Condition Syntax`:
-
-Condition Syntax
-^^^^^^^^^^^^^^^^
-
-The following syntax applies to the ``condition`` argument of
-the ``if``, ``elseif`` and :command:`while` clauses.
-
-Compound conditions are evaluated in the following order of precedence:
-Innermost parentheses are evaluated first. Next come unary tests such
-as ``EXISTS``, ``COMMAND``, and ``DEFINED``.  Then binary tests such as
-``EQUAL``, ``LESS``, ``LESS_EQUAL``, ``GREATER``, ``GREATER_EQUAL``,
-``STREQUAL``, ``STRLESS``, ``STRLESS_EQUAL``, ``STRGREATER``,
-``STRGREATER_EQUAL``, ``VERSION_EQUAL``, ``VERSION_LESS``,
-``VERSION_LESS_EQUAL``, ``VERSION_GREATER``, ``VERSION_GREATER_EQUAL``,
-and ``MATCHES``.  Then the boolean operators in the order ``NOT``,  ``AND``,
-and finally ``OR``.
-
-Possible conditions are:
-
-``if(<constant>)``
- True if the constant is ``1``, ``ON``, ``YES``, ``TRUE``, ``Y``,
- or a non-zero number.  False if the constant is ``0``, ``OFF``,
- ``NO``, ``FALSE``, ``N``, ``IGNORE``, ``NOTFOUND``, the empty string,
- or ends in the suffix ``-NOTFOUND``.  Named boolean constants are
- case-insensitive.  If the argument is not one of these specific
- constants, it is treated as a variable or string and the following
- signature is used.
-
-``if(<variable|string>)``
- True if given a variable that is defined to a value that is not a false
- constant.  False otherwise.  (Note macro arguments are not variables.)
-
-``if(NOT <condition>)``
- True if the condition is not true.
-
-``if(<cond1> AND <cond2>)``
- True if both conditions would be considered true individually.
-
-``if(<cond1> OR <cond2>)``
- True if either condition would be considered true individually.
-
-``if(COMMAND command-name)``
- True if the given name is a command, macro or function that can be
- invoked.
-
-``if(POLICY policy-id)``
- True if the given name is an existing policy (of the form ``CMP<NNNN>``).
-
-``if(TARGET target-name)``
- True if the given name is an existing logical target name created
- by a call to the :command:`add_executable`, :command:`add_library`,
- or :command:`add_custom_target` command that has already been invoked
- (in any directory).
-
-``if(TEST test-name)``
- True if the given name is an existing test name created by the
- :command:`add_test` command.
-
-``if(EXISTS path-to-file-or-directory)``
- True if the named file or directory exists.  Behavior is well-defined
- only for full paths. Resolves symbolic links, i.e. if the named file or
- directory is a symbolic link, returns true if the target of the
- symbolic link exists.
-
-``if(file1 IS_NEWER_THAN file2)``
- True if ``file1`` is newer than ``file2`` or if one of the two files doesn't
- exist.  Behavior is well-defined only for full paths.  If the file
- time stamps are exactly the same, an ``IS_NEWER_THAN`` comparison returns
- true, so that any dependent build operations will occur in the event
- of a tie.  This includes the case of passing the same file name for
- both file1 and file2.
-
-``if(IS_DIRECTORY path-to-directory)``
- True if the given name is a directory.  Behavior is well-defined only
- for full paths.
-
-``if(IS_SYMLINK file-name)``
- True if the given name is a symbolic link.  Behavior is well-defined
- only for full paths.
-
-``if(IS_ABSOLUTE path)``
- True if the given path is an absolute path.
-
-``if(<variable|string> MATCHES regex)``
- True if the given string or variable's value matches the given regular
- condition.  See :ref:`Regex Specification` for regex format.
- ``()`` groups are captured in :variable:`CMAKE_MATCH_<n>` variables.
-
-``if(<variable|string> LESS <variable|string>)``
- True if the given string or variable's value is a valid number and less
- than that on the right.
-
-``if(<variable|string> GREATER <variable|string>)``
- True if the given string or variable's value is a valid number and greater
- than that on the right.
-
-``if(<variable|string> EQUAL <variable|string>)``
- True if the given string or variable's value is a valid number and equal
- to that on the right.
-
-``if(<variable|string> LESS_EQUAL <variable|string>)``
- True if the given string or variable's value is a valid number and less
- than or equal to that on the right.
-
-``if(<variable|string> GREATER_EQUAL <variable|string>)``
- True if the given string or variable's value is a valid number and greater
- than or equal to that on the right.
-
-``if(<variable|string> STRLESS <variable|string>)``
- True if the given string or variable's value is lexicographically less
- than the string or variable on the right.
-
-``if(<variable|string> STRGREATER <variable|string>)``
- True if the given string or variable's value is lexicographically greater
- than the string or variable on the right.
-
-``if(<variable|string> STREQUAL <variable|string>)``
- True if the given string or variable's value is lexicographically equal
- to the string or variable on the right.
-
-``if(<variable|string> STRLESS_EQUAL <variable|string>)``
- True if the given string or variable's value is lexicographically less
- than or equal to the string or variable on the right.
-
-``if(<variable|string> STRGREATER_EQUAL <variable|string>)``
- True if the given string or variable's value is lexicographically greater
- than or equal to the string or variable on the right.
-
-``if(<variable|string> VERSION_LESS <variable|string>)``
- Component-wise integer version number comparison (version format is
- ``major[.minor[.patch[.tweak]]]``, omitted components are treated as zero).
- Any non-integer version component or non-integer trailing part of a version
- component effectively truncates the string at that point.
-
-``if(<variable|string> VERSION_GREATER <variable|string>)``
- Component-wise integer version number comparison (version format is
- ``major[.minor[.patch[.tweak]]]``, omitted components are treated as zero).
- Any non-integer version component or non-integer trailing part of a version
- component effectively truncates the string at that point.
-
-``if(<variable|string> VERSION_EQUAL <variable|string>)``
- Component-wise integer version number comparison (version format is
- ``major[.minor[.patch[.tweak]]]``, omitted components are treated as zero).
- Any non-integer version component or non-integer trailing part of a version
- component effectively truncates the string at that point.
-
-``if(<variable|string> VERSION_LESS_EQUAL <variable|string>)``
- Component-wise integer version number comparison (version format is
- ``major[.minor[.patch[.tweak]]]``, omitted components are treated as zero).
- Any non-integer version component or non-integer trailing part of a version
- component effectively truncates the string at that point.
-
-``if(<variable|string> VERSION_GREATER_EQUAL <variable|string>)``
- Component-wise integer version number comparison (version format is
- ``major[.minor[.patch[.tweak]]]``, omitted components are treated as zero).
- Any non-integer version component or non-integer trailing part of a version
- component effectively truncates the string at that point.
-
-``if(<variable|string> IN_LIST <variable>)``
- True if the given element is contained in the named list variable.
-
-``if(DEFINED <name>|CACHE{<name>}|ENV{<name>})``
- True if a variable, cache variable or environment variable
- with given ``<name>`` is defined. The value of the variable
- does not matter. Note that macro arguments are not variables.
-
-``if((condition) AND (condition OR (condition)))``
- The conditions inside the parenthesis are evaluated first and then
- the remaining condition is evaluated as in the previous examples.
- Where there are nested parenthesis the innermost are evaluated as part
- of evaluating the condition that contains them.
-
-Variable Expansion
-^^^^^^^^^^^^^^^^^^
-
-The if command was written very early in CMake's history, predating
-the ``${}`` variable evaluation syntax, and for convenience evaluates
-variables named by its arguments as shown in the above signatures.
-Note that normal variable evaluation with ``${}`` applies before the if
-command even receives the arguments.  Therefore code like
-
-.. code-block:: cmake
-
- set(var1 OFF)
- set(var2 "var1")
- if(${var2})
-
-appears to the if command as
-
-.. code-block:: cmake
-
-  if(var1)
-
-and is evaluated according to the ``if(<variable>)`` case documented
-above.  The result is ``OFF`` which is false.  However, if we remove the
-``${}`` from the example then the command sees
-
-.. code-block:: cmake
-
-  if(var2)
-
-which is true because ``var2`` is defined to ``var1`` which is not a false
-constant.
-
-Automatic evaluation applies in the other cases whenever the
-above-documented condition syntax accepts ``<variable|string>``:
-
-* The left hand argument to ``MATCHES`` is first checked to see if it is
-  a defined variable, if so the variable's value is used, otherwise the
-  original value is used.
-
-* If the left hand argument to ``MATCHES`` is missing it returns false
-  without error
-
-* Both left and right hand arguments to ``LESS``, ``GREATER``, ``EQUAL``,
-  ``LESS_EQUAL``, and ``GREATER_EQUAL``, are independently tested to see if
-  they are defined variables, if so their defined values are used otherwise
-  the original value is used.
-
-* Both left and right hand arguments to ``STRLESS``, ``STRGREATER``,
-  ``STREQUAL``, ``STRLESS_EQUAL``, and ``STRGREATER_EQUAL`` are independently
-  tested to see if they are defined variables, if so their defined values are
-  used otherwise the original value is used.
-
-* Both left and right hand arguments to ``VERSION_LESS``,
-  ``VERSION_GREATER``, ``VERSION_EQUAL``, ``VERSION_LESS_EQUAL``, and
-  ``VERSION_GREATER_EQUAL`` are independently tested to see if they are defined
-  variables, if so their defined values are used otherwise the original value
-  is used.
-
-* The right hand argument to ``NOT`` is tested to see if it is a boolean
-  constant, if so the value is used, otherwise it is assumed to be a
-  variable and it is dereferenced.
-
-* The left and right hand arguments to ``AND`` and ``OR`` are independently
-  tested to see if they are boolean constants, if so they are used as
-  such, otherwise they are assumed to be variables and are dereferenced.
-
-To prevent ambiguity, potential variable or keyword names can be
-specified in a :ref:`Quoted Argument` or a :ref:`Bracket Argument`.
-A quoted or bracketed variable or keyword will be interpreted as a
-string and not dereferenced or interpreted.
-See policy :policy:`CMP0054`.
-
-There is no automatic evaluation for environment or cache
-:ref:`Variable References`.  Their values must be referenced as
-``$ENV{<name>}`` or ``$CACHE{<name>}`` wherever the above-documented
-condition syntax accepts ``<variable|string>``.
diff --git a/share/cmake-3.18/Help/command/include_external_msproject.rst b/share/cmake-3.18/Help/command/include_external_msproject.rst
deleted file mode 100644
index 540a13a..0000000
--- a/share/cmake-3.18/Help/command/include_external_msproject.rst
+++ /dev/null
@@ -1,26 +0,0 @@
-include_external_msproject
---------------------------
-
-Include an external Microsoft project file in a workspace.
-
-.. code-block:: cmake
-
-  include_external_msproject(projectname location
-                             [TYPE projectTypeGUID]
-                             [GUID projectGUID]
-                             [PLATFORM platformName]
-                             dep1 dep2 ...)
-
-Includes an external Microsoft project in the generated workspace
-file.  Currently does nothing on UNIX.  This will create a target
-named ``[projectname]``.  This can be used in the :command:`add_dependencies`
-command to make things depend on the external project.
-
-``TYPE``, ``GUID`` and ``PLATFORM`` are optional parameters that allow one to
-specify the type of project, id (``GUID``) of the project and the name of
-the target platform.  This is useful for projects requiring values
-other than the default (e.g.  WIX projects).
-
-If the imported project has different configuration names than the
-current project, set the :prop_tgt:`MAP_IMPORTED_CONFIG_<CONFIG>`
-target property to specify the mapping.
diff --git a/share/cmake-3.18/Help/command/include_guard.rst b/share/cmake-3.18/Help/command/include_guard.rst
deleted file mode 100644
index 877aa86..0000000
--- a/share/cmake-3.18/Help/command/include_guard.rst
+++ /dev/null
@@ -1,46 +0,0 @@
-include_guard
--------------
-
-Provides an include guard for the file currently being processed by CMake.
-
-.. code-block:: cmake
-
-  include_guard([DIRECTORY|GLOBAL])
-
-Sets up an include guard for the current CMake file (see the
-:variable:`CMAKE_CURRENT_LIST_FILE` variable documentation).
-
-CMake will end its processing of the current file at the location of the
-:command:`include_guard` command if the current file has already been
-processed for the applicable scope (see below). This provides functionality
-similar to the include guards commonly used in source headers or to the
-``#pragma once`` directive. If the current file has been processed previously
-for the applicable scope, the effect is as though :command:`return` had been
-called. Do not call this command from inside a function being defined within
-the current file.
-
-An optional argument specifying the scope of the guard may be provided.
-Possible values for the option are:
-
-``DIRECTORY``
-  The include guard applies within the current directory and below. The file
-  will only be included once within this directory scope, but may be included
-  again by other files outside of this directory (i.e. a parent directory or
-  another directory not pulled in by :command:`add_subdirectory` or
-  :command:`include` from the current file or its children).
-
-``GLOBAL``
-  The include guard applies globally to the whole build. The current file
-  will only be included once regardless of the scope.
-
-If no arguments given, ``include_guard`` has the same scope as a variable,
-meaning that the include guard effect is isolated by the most recent
-function scope or current directory if no inner function scopes exist.
-In this case the command behavior is the same as:
-
-.. code-block:: cmake
-
-  if(__CURRENT_FILE_VAR__)
-    return()
-  endif()
-  set(__CURRENT_FILE_VAR__ TRUE)
diff --git a/share/cmake-3.18/Help/command/install.rst b/share/cmake-3.18/Help/command/install.rst
deleted file mode 100644
index c8df7d9..0000000
--- a/share/cmake-3.18/Help/command/install.rst
+++ /dev/null
@@ -1,733 +0,0 @@
-install
--------
-
-Specify rules to run at install time.
-
-Synopsis
-^^^^^^^^
-
-.. parsed-literal::
-
-  install(`TARGETS`_ <target>... [...])
-  install({`FILES`_ | `PROGRAMS`_} <file>... [...])
-  install(`DIRECTORY`_ <dir>... [...])
-  install(`SCRIPT`_ <file> [...])
-  install(`CODE`_ <code> [...])
-  install(`EXPORT`_ <export-name> [...])
-
-Introduction
-^^^^^^^^^^^^
-
-This command generates installation rules for a project.  Install rules
-specified by calls to the ``install()`` command within a source directory
-are executed in order during installation.  Install rules in subdirectories
-added by calls to the :command:`add_subdirectory` command are interleaved
-with those in the parent directory to run in the order declared (see
-policy :policy:`CMP0082`).
-
-There are multiple signatures for this command.  Some of them define
-installation options for files and targets.  Options common to
-multiple signatures are covered here but they are valid only for
-signatures that specify them.  The common options are:
-
-``DESTINATION``
-  Specify the directory on disk to which a file will be installed.
-  Arguments can be relative or absolute paths.
-
-  If a relative path is given it is interpreted relative to the value
-  of the :variable:`CMAKE_INSTALL_PREFIX` variable.
-  The prefix can be relocated at install time using the ``DESTDIR``
-  mechanism explained in the :variable:`CMAKE_INSTALL_PREFIX` variable
-  documentation.
-
-  If an absolute path (with a leading slash or drive letter) is given
-  it is used verbatim.
-
-  As absolute paths are not supported by :manual:`cpack <cpack(1)>` installer
-  generators, it is preferable to use relative paths throughout.
-
-``PERMISSIONS``
-  Specify permissions for installed files.  Valid permissions are
-  ``OWNER_READ``, ``OWNER_WRITE``, ``OWNER_EXECUTE``, ``GROUP_READ``,
-  ``GROUP_WRITE``, ``GROUP_EXECUTE``, ``WORLD_READ``, ``WORLD_WRITE``,
-  ``WORLD_EXECUTE``, ``SETUID``, and ``SETGID``.  Permissions that do
-  not make sense on certain platforms are ignored on those platforms.
-
-``CONFIGURATIONS``
-  Specify a list of build configurations for which the install rule
-  applies (Debug, Release, etc.). Note that the values specified for
-  this option only apply to options listed AFTER the ``CONFIGURATIONS``
-  option. For example, to set separate install paths for the Debug and
-  Release configurations, do the following:
-
-  .. code-block:: cmake
-
-    install(TARGETS target
-            CONFIGURATIONS Debug
-            RUNTIME DESTINATION Debug/bin)
-    install(TARGETS target
-            CONFIGURATIONS Release
-            RUNTIME DESTINATION Release/bin)
-
-  Note that ``CONFIGURATIONS`` appears BEFORE ``RUNTIME DESTINATION``.
-
-``COMPONENT``
-  Specify an installation component name with which the install rule
-  is associated, such as "runtime" or "development".  During
-  component-specific installation only install rules associated with
-  the given component name will be executed.  During a full installation
-  all components are installed unless marked with ``EXCLUDE_FROM_ALL``.
-  If ``COMPONENT`` is not provided a default component "Unspecified" is
-  created.  The default component name may be controlled with the
-  :variable:`CMAKE_INSTALL_DEFAULT_COMPONENT_NAME` variable.
-
-``EXCLUDE_FROM_ALL``
-  Specify that the file is excluded from a full installation and only
-  installed as part of a component-specific installation
-
-``RENAME``
-  Specify a name for an installed file that may be different from the
-  original file.  Renaming is allowed only when a single file is
-  installed by the command.
-
-``OPTIONAL``
-  Specify that it is not an error if the file to be installed does
-  not exist.
-
-Command signatures that install files may print messages during
-installation.  Use the :variable:`CMAKE_INSTALL_MESSAGE` variable
-to control which messages are printed.
-
-Many of the ``install()`` variants implicitly create the directories
-containing the installed files. If
-:variable:`CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS` is set, these
-directories will be created with the permissions specified. Otherwise,
-they will be created according to the uname rules on Unix-like platforms.
-Windows platforms are unaffected.
-
-Installing Targets
-^^^^^^^^^^^^^^^^^^
-
-.. _`install(TARGETS)`:
-.. _TARGETS:
-
-.. code-block:: cmake
-
-  install(TARGETS targets... [EXPORT <export-name>]
-          [[ARCHIVE|LIBRARY|RUNTIME|OBJECTS|FRAMEWORK|BUNDLE|
-            PRIVATE_HEADER|PUBLIC_HEADER|RESOURCE]
-           [DESTINATION <dir>]
-           [PERMISSIONS permissions...]
-           [CONFIGURATIONS [Debug|Release|...]]
-           [COMPONENT <component>]
-           [NAMELINK_COMPONENT <component>]
-           [OPTIONAL] [EXCLUDE_FROM_ALL]
-           [NAMELINK_ONLY|NAMELINK_SKIP]
-          ] [...]
-          [INCLUDES DESTINATION [<dir> ...]]
-          )
-
-The ``TARGETS`` form specifies rules for installing targets from a
-project.  There are several kinds of target :ref:`Output Artifacts`
-that may be installed:
-
-``ARCHIVE``
-  Target artifacts of this kind include:
-
-  * *Static libraries*
-    (except on macOS when marked as ``FRAMEWORK``, see below);
-  * *DLL import libraries*
-    (on all Windows-based systems including Cygwin; they have extension
-    ``.lib``, in contrast to the ``.dll`` libraries that go to ``RUNTIME``);
-  * On AIX, the *linker import file* created for executables with
-    :prop_tgt:`ENABLE_EXPORTS` enabled.
-
-``LIBRARY``
-  Target artifacts of this kind include:
-
-  * *Shared libraries*, except
-
-    - DLLs (these go to ``RUNTIME``, see below),
-    - on macOS when marked as ``FRAMEWORK`` (see below).
-
-``RUNTIME``
-  Target artifacts of this kind include:
-
-  * *Executables*
-    (except on macOS when marked as ``MACOSX_BUNDLE``, see ``BUNDLE`` below);
-  * DLLs (on all Windows-based systems including Cygwin; note that the
-    accompanying import libraries are of kind ``ARCHIVE``).
-
-``OBJECTS``
-  Object files associated with *object libraries*.
-
-``FRAMEWORK``
-  Both static and shared libraries marked with the ``FRAMEWORK``
-  property are treated as ``FRAMEWORK`` targets on macOS.
-
-``BUNDLE``
-  Executables marked with the :prop_tgt:`MACOSX_BUNDLE` property are treated as
-  ``BUNDLE`` targets on macOS.
-
-``PUBLIC_HEADER``
-  Any :prop_tgt:`PUBLIC_HEADER` files associated with a library are installed in
-  the destination specified by the ``PUBLIC_HEADER`` argument on non-Apple
-  platforms. Rules defined by this argument are ignored for :prop_tgt:`FRAMEWORK`
-  libraries on Apple platforms because the associated files are installed
-  into the appropriate locations inside the framework folder. See
-  :prop_tgt:`PUBLIC_HEADER` for details.
-
-``PRIVATE_HEADER``
-  Similar to ``PUBLIC_HEADER``, but for ``PRIVATE_HEADER`` files. See
-  :prop_tgt:`PRIVATE_HEADER` for details.
-
-``RESOURCE``
-  Similar to ``PUBLIC_HEADER`` and ``PRIVATE_HEADER``, but for
-  ``RESOURCE`` files. See :prop_tgt:`RESOURCE` for details.
-
-For each of these arguments given, the arguments following them only apply
-to the target or file type specified in the argument. If none is given, the
-installation properties apply to all target types. If only one is given then
-only targets of that type will be installed (which can be used to install
-just a DLL or just an import library.)
-
-For regular executables, static libraries and shared libraries, the
-``DESTINATION`` argument is not required.  For these target types, when
-``DESTINATION`` is omitted, a default destination will be taken from the
-appropriate variable from :module:`GNUInstallDirs`, or set to a built-in
-default value if that variable is not defined.  The same is true for the
-public and private headers associated with the installed targets through the
-:prop_tgt:`PUBLIC_HEADER` and :prop_tgt:`PRIVATE_HEADER` target properties.
-A destination must always be provided for module libraries, Apple bundles and
-frameworks.  A destination can be omitted for interface and object libraries,
-but they are handled differently (see the discussion of this topic toward the
-end of this section).
-
-The following table shows the target types with their associated variables and
-built-in defaults that apply when no destination is given:
-
-================== =============================== ======================
-   Target Type         GNUInstallDirs Variable        Built-In Default
-================== =============================== ======================
-``RUNTIME``        ``${CMAKE_INSTALL_BINDIR}``     ``bin``
-``LIBRARY``        ``${CMAKE_INSTALL_LIBDIR}``     ``lib``
-``ARCHIVE``        ``${CMAKE_INSTALL_LIBDIR}``     ``lib``
-``PRIVATE_HEADER`` ``${CMAKE_INSTALL_INCLUDEDIR}`` ``include``
-``PUBLIC_HEADER``  ``${CMAKE_INSTALL_INCLUDEDIR}`` ``include``
-================== =============================== ======================
-
-Projects wishing to follow the common practice of installing headers into a
-project-specific subdirectory will need to provide a destination rather than
-rely on the above.
-
-To make packages compliant with distribution filesystem layout policies, if
-projects must specify a ``DESTINATION``, it is recommended that they use a
-path that begins with the appropriate :module:`GNUInstallDirs` variable.
-This allows package maintainers to control the install destination by setting
-the appropriate cache variables.  The following example shows a static library
-being installed to the default destination provided by
-:module:`GNUInstallDirs`, but with its headers installed to a project-specific
-subdirectory that follows the above recommendation:
-
-.. code-block:: cmake
-
-  add_library(mylib STATIC ...)
-  set_target_properties(mylib PROPERTIES PUBLIC_HEADER mylib.h)
-  include(GNUInstallDirs)
-  install(TARGETS mylib
-          PUBLIC_HEADER
-            DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/myproj
-  )
-
-In addition to the common options listed above, each target can accept
-the following additional arguments:
-
-``NAMELINK_COMPONENT``
-  On some platforms a versioned shared library has a symbolic link such
-  as::
-
-    lib<name>.so -> lib<name>.so.1
-
-  where ``lib<name>.so.1`` is the soname of the library and ``lib<name>.so``
-  is a "namelink" allowing linkers to find the library when given
-  ``-l<name>``. The ``NAMELINK_COMPONENT`` option is similar to the
-  ``COMPONENT`` option, but it changes the installation component of a shared
-  library namelink if one is generated. If not specified, this defaults to the
-  value of ``COMPONENT``. It is an error to use this parameter outside of a
-  ``LIBRARY`` block.
-
-  Consider the following example:
-
-  .. code-block:: cmake
-
-    install(TARGETS mylib
-            LIBRARY
-              COMPONENT Libraries
-              NAMELINK_COMPONENT Development
-            PUBLIC_HEADER
-              COMPONENT Development
-           )
-
-  In this scenario, if you choose to install only the ``Development``
-  component, both the headers and namelink will be installed without the
-  library. (If you don't also install the ``Libraries`` component, the
-  namelink will be a dangling symlink, and projects that link to the library
-  will have build errors.) If you install only the ``Libraries`` component,
-  only the library will be installed, without the headers and namelink.
-
-  This option is typically used for package managers that have separate
-  runtime and development packages. For example, on Debian systems, the
-  library is expected to be in the runtime package, and the headers and
-  namelink are expected to be in the development package.
-
-  See the :prop_tgt:`VERSION` and :prop_tgt:`SOVERSION` target properties for
-  details on creating versioned shared libraries.
-
-``NAMELINK_ONLY``
-  This option causes the installation of only the namelink when a library
-  target is installed. On platforms where versioned shared libraries do not
-  have namelinks or when a library is not versioned, the ``NAMELINK_ONLY``
-  option installs nothing. It is an error to use this parameter outside of a
-  ``LIBRARY`` block.
-
-  When ``NAMELINK_ONLY`` is given, either ``NAMELINK_COMPONENT`` or
-  ``COMPONENT`` may be used to specify the installation component of the
-  namelink, but ``COMPONENT`` should generally be preferred.
-
-``NAMELINK_SKIP``
-  Similar to ``NAMELINK_ONLY``, but it has the opposite effect: it causes the
-  installation of library files other than the namelink when a library target
-  is installed. When neither ``NAMELINK_ONLY`` or ``NAMELINK_SKIP`` are given,
-  both portions are installed. On platforms where versioned shared libraries
-  do not have symlinks or when a library is not versioned, ``NAMELINK_SKIP``
-  installs the library. It is an error to use this parameter outside of a
-  ``LIBRARY`` block.
-
-  If ``NAMELINK_SKIP`` is specified, ``NAMELINK_COMPONENT`` has no effect. It
-  is not recommended to use ``NAMELINK_SKIP`` in conjunction with
-  ``NAMELINK_COMPONENT``.
-
-The `install(TARGETS)`_ command can also accept the following options at the
-top level:
-
-``EXPORT``
-  This option associates the installed target files with an export called
-  ``<export-name>``.  It must appear before any target options.  To actually
-  install the export file itself, call `install(EXPORT)`_, documented below.
-  See documentation of the :prop_tgt:`EXPORT_NAME` target property to change
-  the name of the exported target.
-
-``INCLUDES DESTINATION``
-  This option specifies a list of directories which will be added to the
-  :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` target property of the
-  ``<targets>`` when exported by the `install(EXPORT)`_ command. If a
-  relative path is specified, it is treated as relative to the
-  ``$<INSTALL_PREFIX>``.
-
-One or more groups of properties may be specified in a single call to
-the ``TARGETS`` form of this command.  A target may be installed more than
-once to different locations.  Consider hypothetical targets ``myExe``,
-``mySharedLib``, and ``myStaticLib``.  The code:
-
-.. code-block:: cmake
-
-  install(TARGETS myExe mySharedLib myStaticLib
-          RUNTIME DESTINATION bin
-          LIBRARY DESTINATION lib
-          ARCHIVE DESTINATION lib/static)
-  install(TARGETS mySharedLib DESTINATION /some/full/path)
-
-will install ``myExe`` to ``<prefix>/bin`` and ``myStaticLib`` to
-``<prefix>/lib/static``.  On non-DLL platforms ``mySharedLib`` will be
-installed to ``<prefix>/lib`` and ``/some/full/path``.  On DLL platforms
-the ``mySharedLib`` DLL will be installed to ``<prefix>/bin`` and
-``/some/full/path`` and its import library will be installed to
-``<prefix>/lib/static`` and ``/some/full/path``.
-
-:ref:`Interface Libraries` may be listed among the targets to install.
-They install no artifacts but will be included in an associated ``EXPORT``.
-If :ref:`Object Libraries` are listed but given no destination for their
-object files, they will be exported as :ref:`Interface Libraries`.
-This is sufficient to satisfy transitive usage requirements of other
-targets that link to the object libraries in their implementation.
-
-Installing a target with the :prop_tgt:`EXCLUDE_FROM_ALL` target property
-set to ``TRUE`` has undefined behavior.
-
-`install(TARGETS)`_ can install targets that were created in
-other directories.  When using such cross-directory install rules, running
-``make install`` (or similar) from a subdirectory will not guarantee that
-targets from other directories are up-to-date.  You can use
-:command:`target_link_libraries` or :command:`add_dependencies`
-to ensure that such out-of-directory targets are built before the
-subdirectory-specific install rules are run.
-
-An install destination given as a ``DESTINATION`` argument may
-use "generator expressions" with the syntax ``$<...>``.  See the
-:manual:`cmake-generator-expressions(7)` manual for available expressions.
-
-Installing Files
-^^^^^^^^^^^^^^^^
-
-.. _`install(FILES)`:
-.. _`install(PROGRAMS)`:
-.. _FILES:
-.. _PROGRAMS:
-
-.. code-block:: cmake
-
-  install(<FILES|PROGRAMS> files...
-          TYPE <type> | DESTINATION <dir>
-          [PERMISSIONS permissions...]
-          [CONFIGURATIONS [Debug|Release|...]]
-          [COMPONENT <component>]
-          [RENAME <name>] [OPTIONAL] [EXCLUDE_FROM_ALL])
-
-The ``FILES`` form specifies rules for installing files for a project.
-File names given as relative paths are interpreted with respect to the
-current source directory.  Files installed by this form are by default
-given permissions ``OWNER_WRITE``, ``OWNER_READ``, ``GROUP_READ``, and
-``WORLD_READ`` if no ``PERMISSIONS`` argument is given.
-
-The ``PROGRAMS`` form is identical to the ``FILES`` form except that the
-default permissions for the installed file also include ``OWNER_EXECUTE``,
-``GROUP_EXECUTE``, and ``WORLD_EXECUTE``.  This form is intended to install
-programs that are not targets, such as shell scripts.  Use the ``TARGETS``
-form to install targets built within the project.
-
-The list of ``files...`` given to ``FILES`` or ``PROGRAMS`` may use
-"generator expressions" with the syntax ``$<...>``.  See the
-:manual:`cmake-generator-expressions(7)` manual for available expressions.
-However, if any item begins in a generator expression it must evaluate
-to a full path.
-
-Either a ``TYPE`` or a ``DESTINATION`` must be provided, but not both.
-A ``TYPE`` argument specifies the generic file type of the files being
-installed.  A destination will then be set automatically by taking the
-corresponding variable from :module:`GNUInstallDirs`, or by using a
-built-in default if that variable is not defined.  See the table below for
-the supported file types and their corresponding variables and built-in
-defaults.  Projects can provide a ``DESTINATION`` argument instead of a
-file type if they wish to explicitly define the install destination.
-
-======================= ================================== =========================
-   ``TYPE`` Argument         GNUInstallDirs Variable           Built-In Default
-======================= ================================== =========================
-``BIN``                 ``${CMAKE_INSTALL_BINDIR}``        ``bin``
-``SBIN``                ``${CMAKE_INSTALL_SBINDIR}``       ``sbin``
-``LIB``                 ``${CMAKE_INSTALL_LIBDIR}``        ``lib``
-``INCLUDE``             ``${CMAKE_INSTALL_INCLUDEDIR}``    ``include``
-``SYSCONF``             ``${CMAKE_INSTALL_SYSCONFDIR}``    ``etc``
-``SHAREDSTATE``         ``${CMAKE_INSTALL_SHARESTATEDIR}`` ``com``
-``LOCALSTATE``          ``${CMAKE_INSTALL_LOCALSTATEDIR}`` ``var``
-``RUNSTATE``            ``${CMAKE_INSTALL_RUNSTATEDIR}``   ``<LOCALSTATE dir>/run``
-``DATA``                ``${CMAKE_INSTALL_DATADIR}``       ``<DATAROOT dir>``
-``INFO``                ``${CMAKE_INSTALL_INFODIR}``       ``<DATAROOT dir>/info``
-``LOCALE``              ``${CMAKE_INSTALL_LOCALEDIR}``     ``<DATAROOT dir>/locale``
-``MAN``                 ``${CMAKE_INSTALL_MANDIR}``        ``<DATAROOT dir>/man``
-``DOC``                 ``${CMAKE_INSTALL_DOCDIR}``        ``<DATAROOT dir>/doc``
-======================= ================================== =========================
-
-Projects wishing to follow the common practice of installing headers into a
-project-specific subdirectory will need to provide a destination rather than
-rely on the above.
-
-Note that some of the types' built-in defaults use the ``DATAROOT`` directory as
-a prefix. The ``DATAROOT`` prefix is calculated similarly to the types, with
-``CMAKE_INSTALL_DATAROOTDIR`` as the variable and ``share`` as the built-in
-default. You cannot use ``DATAROOT`` as a ``TYPE`` parameter; please use
-``DATA`` instead.
-
-To make packages compliant with distribution filesystem layout policies, if
-projects must specify a ``DESTINATION``, it is recommended that they use a
-path that begins with the appropriate :module:`GNUInstallDirs` variable.
-This allows package maintainers to control the install destination by setting
-the appropriate cache variables.  The following example shows how to follow
-this advice while installing headers to a project-specific subdirectory:
-
-.. code-block:: cmake
-
-  include(GNUInstallDirs)
-  install(FILES mylib.h
-          DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/myproj
-  )
-
-An install destination given as a ``DESTINATION`` argument may
-use "generator expressions" with the syntax ``$<...>``.  See the
-:manual:`cmake-generator-expressions(7)` manual for available expressions.
-
-Installing Directories
-^^^^^^^^^^^^^^^^^^^^^^
-
-.. _`install(DIRECTORY)`:
-.. _DIRECTORY:
-
-.. code-block:: cmake
-
-  install(DIRECTORY dirs...
-          TYPE <type> | DESTINATION <dir>
-          [FILE_PERMISSIONS permissions...]
-          [DIRECTORY_PERMISSIONS permissions...]
-          [USE_SOURCE_PERMISSIONS] [OPTIONAL] [MESSAGE_NEVER]
-          [CONFIGURATIONS [Debug|Release|...]]
-          [COMPONENT <component>] [EXCLUDE_FROM_ALL]
-          [FILES_MATCHING]
-          [[PATTERN <pattern> | REGEX <regex>]
-           [EXCLUDE] [PERMISSIONS permissions...]] [...])
-
-The ``DIRECTORY`` form installs contents of one or more directories to a
-given destination.  The directory structure is copied verbatim to the
-destination.  The last component of each directory name is appended to
-the destination directory but a trailing slash may be used to avoid
-this because it leaves the last component empty.  Directory names
-given as relative paths are interpreted with respect to the current
-source directory.  If no input directory names are given the
-destination directory will be created but nothing will be installed
-into it.  The ``FILE_PERMISSIONS`` and ``DIRECTORY_PERMISSIONS`` options
-specify permissions given to files and directories in the destination.
-If ``USE_SOURCE_PERMISSIONS`` is specified and ``FILE_PERMISSIONS`` is not,
-file permissions will be copied from the source directory structure.
-If no permissions are specified files will be given the default
-permissions specified in the ``FILES`` form of the command, and the
-directories will be given the default permissions specified in the
-``PROGRAMS`` form of the command.
-
-The ``MESSAGE_NEVER`` option disables file installation status output.
-
-Installation of directories may be controlled with fine granularity
-using the ``PATTERN`` or ``REGEX`` options.  These "match" options specify a
-globbing pattern or regular expression to match directories or files
-encountered within input directories.  They may be used to apply
-certain options (see below) to a subset of the files and directories
-encountered.  The full path to each input file or directory (with
-forward slashes) is matched against the expression.  A ``PATTERN`` will
-match only complete file names: the portion of the full path matching
-the pattern must occur at the end of the file name and be preceded by
-a slash.  A ``REGEX`` will match any portion of the full path but it may
-use ``/`` and ``$`` to simulate the ``PATTERN`` behavior.  By default all
-files and directories are installed whether or not they are matched.
-The ``FILES_MATCHING`` option may be given before the first match option
-to disable installation of files (but not directories) not matched by
-any expression.  For example, the code
-
-.. code-block:: cmake
-
-  install(DIRECTORY src/ DESTINATION include/myproj
-          FILES_MATCHING PATTERN "*.h")
-
-will extract and install header files from a source tree.
-
-Some options may follow a ``PATTERN`` or ``REGEX`` expression and are applied
-only to files or directories matching them.  The ``EXCLUDE`` option will
-skip the matched file or directory.  The ``PERMISSIONS`` option overrides
-the permissions setting for the matched file or directory.  For
-example the code
-
-.. code-block:: cmake
-
-  install(DIRECTORY icons scripts/ DESTINATION share/myproj
-          PATTERN "CVS" EXCLUDE
-          PATTERN "scripts/*"
-          PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
-                      GROUP_EXECUTE GROUP_READ)
-
-will install the ``icons`` directory to ``share/myproj/icons`` and the
-``scripts`` directory to ``share/myproj``.  The icons will get default
-file permissions, the scripts will be given specific permissions, and any
-``CVS`` directories will be excluded.
-
-Either a ``TYPE`` or a ``DESTINATION`` must be provided, but not both.
-A ``TYPE`` argument specifies the generic file type of the files within the
-listed directories being installed.  A destination will then be set
-automatically by taking the corresponding variable from
-:module:`GNUInstallDirs`, or by using a built-in default if that variable
-is not defined.  See the table below for the supported file types and their
-corresponding variables and built-in defaults.  Projects can provide a
-``DESTINATION`` argument instead of a file type if they wish to explicitly
-define the install destination.
-
-======================= ================================== =========================
-   ``TYPE`` Argument         GNUInstallDirs Variable           Built-In Default
-======================= ================================== =========================
-``BIN``                 ``${CMAKE_INSTALL_BINDIR}``        ``bin``
-``SBIN``                ``${CMAKE_INSTALL_SBINDIR}``       ``sbin``
-``LIB``                 ``${CMAKE_INSTALL_LIBDIR}``        ``lib``
-``INCLUDE``             ``${CMAKE_INSTALL_INCLUDEDIR}``    ``include``
-``SYSCONF``             ``${CMAKE_INSTALL_SYSCONFDIR}``    ``etc``
-``SHAREDSTATE``         ``${CMAKE_INSTALL_SHARESTATEDIR}`` ``com``
-``LOCALSTATE``          ``${CMAKE_INSTALL_LOCALSTATEDIR}`` ``var``
-``RUNSTATE``            ``${CMAKE_INSTALL_RUNSTATEDIR}``   ``<LOCALSTATE dir>/run``
-``DATA``                ``${CMAKE_INSTALL_DATADIR}``       ``<DATAROOT dir>``
-``INFO``                ``${CMAKE_INSTALL_INFODIR}``       ``<DATAROOT dir>/info``
-``LOCALE``              ``${CMAKE_INSTALL_LOCALEDIR}``     ``<DATAROOT dir>/locale``
-``MAN``                 ``${CMAKE_INSTALL_MANDIR}``        ``<DATAROOT dir>/man``
-``DOC``                 ``${CMAKE_INSTALL_DOCDIR}``        ``<DATAROOT dir>/doc``
-======================= ================================== =========================
-
-Note that some of the types' built-in defaults use the ``DATAROOT`` directory as
-a prefix. The ``DATAROOT`` prefix is calculated similarly to the types, with
-``CMAKE_INSTALL_DATAROOTDIR`` as the variable and ``share`` as the built-in
-default. You cannot use ``DATAROOT`` as a ``TYPE`` parameter; please use
-``DATA`` instead.
-
-To make packages compliant with distribution filesystem layout policies, if
-projects must specify a ``DESTINATION``, it is recommended that they use a
-path that begins with the appropriate :module:`GNUInstallDirs` variable.
-This allows package maintainers to control the install destination by setting
-the appropriate cache variables.
-
-The list of ``dirs...`` given to ``DIRECTORY`` and an install destination
-given as a ``DESTINATION`` argument may use "generator expressions"
-with the syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)`
-manual for available expressions.
-
-Custom Installation Logic
-^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. _`install(CODE)`:
-.. _`install(SCRIPT)`:
-.. _CODE:
-.. _SCRIPT:
-
-.. code-block:: cmake
-
-  install([[SCRIPT <file>] [CODE <code>]]
-          [COMPONENT <component>] [EXCLUDE_FROM_ALL] [...])
-
-The ``SCRIPT`` form will invoke the given CMake script files during
-installation.  If the script file name is a relative path it will be
-interpreted with respect to the current source directory.  The ``CODE``
-form will invoke the given CMake code during installation.  Code is
-specified as a single argument inside a double-quoted string.  For
-example, the code
-
-.. code-block:: cmake
-
-  install(CODE "MESSAGE(\"Sample install message.\")")
-
-will print a message during installation.
-
-``<file>`` or ``<code>`` may use "generator expressions" with the syntax
-``$<...>`` (in the case of ``<file>``, this refers to their use in the file
-name, not the file's contents).  See the
-:manual:`cmake-generator-expressions(7)` manual for available expressions.
-
-Installing Exports
-^^^^^^^^^^^^^^^^^^
-
-.. _`install(EXPORT)`:
-.. _EXPORT:
-
-.. code-block:: cmake
-
-  install(EXPORT <export-name> DESTINATION <dir>
-          [NAMESPACE <namespace>] [[FILE <name>.cmake]|
-          [PERMISSIONS permissions...]
-          [CONFIGURATIONS [Debug|Release|...]]
-          [EXPORT_LINK_INTERFACE_LIBRARIES]
-          [COMPONENT <component>]
-          [EXCLUDE_FROM_ALL])
-  install(EXPORT_ANDROID_MK <export-name> DESTINATION <dir> [...])
-
-The ``EXPORT`` form generates and installs a CMake file containing code to
-import targets from the installation tree into another project.
-Target installations are associated with the export ``<export-name>``
-using the ``EXPORT`` option of the `install(TARGETS)`_ signature
-documented above.  The ``NAMESPACE`` option will prepend ``<namespace>`` to
-the target names as they are written to the import file.  By default
-the generated file will be called ``<export-name>.cmake`` but the ``FILE``
-option may be used to specify a different name.  The value given to
-the ``FILE`` option must be a file name with the ``.cmake`` extension.
-If a ``CONFIGURATIONS`` option is given then the file will only be installed
-when one of the named configurations is installed.  Additionally, the
-generated import file will reference only the matching target
-configurations.  The ``EXPORT_LINK_INTERFACE_LIBRARIES`` keyword, if
-present, causes the contents of the properties matching
-``(IMPORTED_)?LINK_INTERFACE_LIBRARIES(_<CONFIG>)?`` to be exported, when
-policy :policy:`CMP0022` is ``NEW``.
-
-.. note::
-  The installed ``<export-name>.cmake`` file may come with additional
-  per-configuration ``<export-name>-*.cmake`` files to be loaded by
-  globbing.  Do not use an export name that is the same as the package
-  name in combination with installing a ``<package-name>-config.cmake``
-  file or the latter may be incorrectly matched by the glob and loaded.
-
-When a ``COMPONENT`` option is given, the listed ``<component>`` implicitly
-depends on all components mentioned in the export set. The exported
-``<name>.cmake`` file will require each of the exported components to be
-present in order for dependent projects to build properly. For example, a
-project may define components ``Runtime`` and ``Development``, with shared
-libraries going into the ``Runtime`` component and static libraries and
-headers going into the ``Development`` component. The export set would also
-typically be part of the ``Development`` component, but it would export
-targets from both the ``Runtime`` and ``Development`` components. Therefore,
-the ``Runtime`` component would need to be installed if the ``Development``
-component was installed, but not vice versa. If the ``Development`` component
-was installed without the ``Runtime`` component, dependent projects that try
-to link against it would have build errors. Package managers, such as APT and
-RPM, typically handle this by listing the ``Runtime`` component as a dependency
-of the ``Development`` component in the package metadata, ensuring that the
-library is always installed if the headers and CMake export file are present.
-
-In addition to cmake language files, the ``EXPORT_ANDROID_MK`` mode maybe
-used to specify an export to the android ndk build system.  This mode
-accepts the same options as the normal export mode.  The Android
-NDK supports the use of prebuilt libraries, both static and shared. This
-allows cmake to build the libraries of a project and make them available
-to an ndk build system complete with transitive dependencies, include flags
-and defines required to use the libraries.
-
-The ``EXPORT`` form is useful to help outside projects use targets built
-and installed by the current project.  For example, the code
-
-.. code-block:: cmake
-
-  install(TARGETS myexe EXPORT myproj DESTINATION bin)
-  install(EXPORT myproj NAMESPACE mp_ DESTINATION lib/myproj)
-  install(EXPORT_ANDROID_MK myproj DESTINATION share/ndk-modules)
-
-will install the executable ``myexe`` to ``<prefix>/bin`` and code to import
-it in the file ``<prefix>/lib/myproj/myproj.cmake`` and
-``<prefix>/share/ndk-modules/Android.mk``.  An outside project
-may load this file with the include command and reference the ``myexe``
-executable from the installation tree using the imported target name
-``mp_myexe`` as if the target were built in its own tree.
-
-.. note::
-  This command supercedes the :command:`install_targets` command and
-  the :prop_tgt:`PRE_INSTALL_SCRIPT` and :prop_tgt:`POST_INSTALL_SCRIPT`
-  target properties.  It also replaces the ``FILES`` forms of the
-  :command:`install_files` and :command:`install_programs` commands.
-  The processing order of these install rules relative to
-  those generated by :command:`install_targets`,
-  :command:`install_files`, and :command:`install_programs` commands
-  is not defined.
-
-Generated Installation Script
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. note::
-
-  Use of this feature is not recommended. Please consider using the
-  ``--install`` argument of :manual:`cmake(1)` instead.
-
-The ``install()`` command generates a file, ``cmake_install.cmake``, inside
-the build directory, which is used internally by the generated install target
-and by CPack. You can also invoke this script manually with ``cmake -P``. This
-script accepts several variables:
-
-``COMPONENT``
-  Set this variable to install only a single CPack component as opposed to all
-  of them. For example, if you only want to install the ``Development``
-  component, run ``cmake -DCOMPONENT=Development -P cmake_install.cmake``.
-
-``BUILD_TYPE``
-  Set this variable to change the build type if you are using a multi-config
-  generator. For example, to install with the ``Debug`` configuration, run
-  ``cmake -DBUILD_TYPE=Debug -P cmake_install.cmake``.
-
-``DESTDIR``
-  This is an environment variable rather than a CMake variable. It allows you
-  to change the installation prefix on UNIX systems. See :envvar:`DESTDIR` for
-  details.
diff --git a/share/cmake-3.18/Help/command/install_files.rst b/share/cmake-3.18/Help/command/install_files.rst
deleted file mode 100644
index ff074a8..0000000
--- a/share/cmake-3.18/Help/command/install_files.rst
+++ /dev/null
@@ -1,41 +0,0 @@
-install_files
--------------
-
-.. deprecated:: 3.0
-
-  Use the :command:`install(FILES)` command instead.
-
-This command has been superceded by the :command:`install` command.  It is
-provided for compatibility with older CMake code.  The ``FILES`` form is
-directly replaced by the ``FILES`` form of the :command:`install`
-command.  The regexp form can be expressed more clearly using the ``GLOB``
-form of the :command:`file` command.
-
-::
-
-  install_files(<dir> extension file file ...)
-
-Create rules to install the listed files with the given extension into
-the given directory.  Only files existing in the current source tree
-or its corresponding location in the binary tree may be listed.  If a
-file specified already has an extension, that extension will be
-removed first.  This is useful for providing lists of source files
-such as foo.cxx when you want the corresponding foo.h to be installed.
-A typical extension is ``.h``.
-
-::
-
-  install_files(<dir> regexp)
-
-Any files in the current source directory that match the regular
-expression will be installed.
-
-::
-
-  install_files(<dir> FILES file file ...)
-
-Any files listed after the ``FILES`` keyword will be installed explicitly
-from the names given.  Full paths are allowed in this form.
-
-The directory ``<dir>`` is relative to the installation prefix, which is
-stored in the variable :variable:`CMAKE_INSTALL_PREFIX`.
diff --git a/share/cmake-3.18/Help/command/install_programs.rst b/share/cmake-3.18/Help/command/install_programs.rst
deleted file mode 100644
index fab6482..0000000
--- a/share/cmake-3.18/Help/command/install_programs.rst
+++ /dev/null
@@ -1,36 +0,0 @@
-install_programs
-----------------
-
-.. deprecated:: 3.0
-
-  Use the :command:`install(PROGRAMS)` command instead.
-
-This command has been superceded by the :command:`install` command.  It is
-provided for compatibility with older CMake code.  The ``FILES`` form is
-directly replaced by the ``PROGRAMS`` form of the :command:`install`
-command.  The regexp form can be expressed more clearly using the ``GLOB``
-form of the :command:`file` command.
-
-::
-
-  install_programs(<dir> file1 file2 [file3 ...])
-  install_programs(<dir> FILES file1 [file2 ...])
-
-Create rules to install the listed programs into the given directory.
-Use the ``FILES`` argument to guarantee that the file list version of the
-command will be used even when there is only one argument.
-
-::
-
-  install_programs(<dir> regexp)
-
-In the second form any program in the current source directory that
-matches the regular expression will be installed.
-
-This command is intended to install programs that are not built by
-cmake, such as shell scripts.  See the ``TARGETS`` form of the
-:command:`install` command to create installation rules for targets built
-by cmake.
-
-The directory ``<dir>`` is relative to the installation prefix, which is
-stored in the variable :variable:`CMAKE_INSTALL_PREFIX`.
diff --git a/share/cmake-3.18/Help/command/install_targets.rst b/share/cmake-3.18/Help/command/install_targets.rst
deleted file mode 100644
index c9efdce..0000000
--- a/share/cmake-3.18/Help/command/install_targets.rst
+++ /dev/null
@@ -1,19 +0,0 @@
-install_targets
----------------
-
-.. deprecated:: 3.0
-
-  Use the :command:`install(TARGETS)` command instead.
-
-This command has been superceded by the :command:`install` command.  It is
-provided for compatibility with older CMake code.
-
-::
-
-  install_targets(<dir> [RUNTIME_DIRECTORY dir] target target)
-
-Create rules to install the listed targets into the given directory.
-The directory ``<dir>`` is relative to the installation prefix, which is
-stored in the variable :variable:`CMAKE_INSTALL_PREFIX`.  If
-``RUNTIME_DIRECTORY`` is specified, then on systems with special runtime
-files (Windows DLL), the files will be copied to that directory.
diff --git a/share/cmake-3.18/Help/command/link_directories.rst b/share/cmake-3.18/Help/command/link_directories.rst
deleted file mode 100644
index 9cb8faa..0000000
--- a/share/cmake-3.18/Help/command/link_directories.rst
+++ /dev/null
@@ -1,51 +0,0 @@
-link_directories
-----------------
-
-Add directories in which the linker will look for libraries.
-
-.. code-block:: cmake
-
-  link_directories([AFTER|BEFORE] directory1 [directory2 ...])
-
-Adds the paths in which the linker should search for libraries.
-Relative paths given to this command are interpreted as relative to
-the current source directory, see :policy:`CMP0015`.
-
-The directories are added to the :prop_dir:`LINK_DIRECTORIES` directory
-property for the current ``CMakeLists.txt`` file, converting relative
-paths to absolute as needed.
-The command will apply only to targets created after it is called.
-
-By default the directories specified are appended onto the current list of
-directories.  This default behavior can be changed by setting
-:variable:`CMAKE_LINK_DIRECTORIES_BEFORE` to ``ON``.  By using
-``AFTER`` or ``BEFORE`` explicitly, you can select between appending and
-prepending, independent of the default.
-
-Arguments to ``link_directories`` may use "generator expressions" with
-the syntax "$<...>".  See the :manual:`cmake-generator-expressions(7)`
-manual for available expressions.  See the :manual:`cmake-buildsystem(7)`
-manual for more on defining buildsystem properties.
-
-.. note::
-
-  This command is rarely necessary and should be avoided where there are
-  other choices.  Prefer to pass full absolute paths to libraries where
-  possible, since this ensures the correct library will always be linked.
-  The :command:`find_library` command provides the full path, which can
-  generally be used directly in calls to :command:`target_link_libraries`.
-  Situations where a library search path may be needed include:
-
-  - Project generators like Xcode where the user can switch target
-    architecture at build time, but a full path to a library cannot
-    be used because it only provides one architecture (i.e. it is not
-    a universal binary).
-  - Libraries may themselves have other private library dependencies
-    that expect to be found via ``RPATH`` mechanisms, but some linkers
-    are not able to fully decode those paths (e.g. due to the presence
-    of things like ``$ORIGIN``).
-
-  If a library search path must be provided, prefer to localize the effect
-  where possible by using the :command:`target_link_directories` command
-  rather than ``link_directories()``.  The target-specific command can also
-  control how the search directories propagate to other dependent targets.
diff --git a/share/cmake-3.18/Help/command/list.rst b/share/cmake-3.18/Help/command/list.rst
deleted file mode 100644
index 4d339a0..0000000
--- a/share/cmake-3.18/Help/command/list.rst
+++ /dev/null
@@ -1,332 +0,0 @@
-list
-----
-
-List operations.
-
-Synopsis
-^^^^^^^^
-
-.. parsed-literal::
-
-  `Reading`_
-    list(`LENGTH`_ <list> <out-var>)
-    list(`GET`_ <list> <element index> [<index> ...] <out-var>)
-    list(`JOIN`_ <list> <glue> <out-var>)
-    list(`SUBLIST`_ <list> <begin> <length> <out-var>)
-
-  `Search`_
-    list(`FIND`_ <list> <value> <out-var>)
-
-  `Modification`_
-    list(`APPEND`_ <list> [<element>...])
-    list(`FILTER`_ <list> {INCLUDE | EXCLUDE} REGEX <regex>)
-    list(`INSERT`_ <list> <index> [<element>...])
-    list(`POP_BACK`_ <list> [<out-var>...])
-    list(`POP_FRONT`_ <list> [<out-var>...])
-    list(`PREPEND`_ <list> [<element>...])
-    list(`REMOVE_ITEM`_ <list> <value>...)
-    list(`REMOVE_AT`_ <list> <index>...)
-    list(`REMOVE_DUPLICATES`_ <list>)
-    list(`TRANSFORM`_ <list> <ACTION> [...])
-
-  `Ordering`_
-    list(`REVERSE`_ <list>)
-    list(`SORT`_ <list> [...])
-
-Introduction
-^^^^^^^^^^^^
-
-The list subcommands ``APPEND``, ``INSERT``, ``FILTER``, ``PREPEND``,
-``POP_BACK``, ``POP_FRONT``, ``REMOVE_AT``, ``REMOVE_ITEM``,
-``REMOVE_DUPLICATES``, ``REVERSE`` and ``SORT`` may create
-new values for the list within the current CMake variable scope.  Similar to
-the :command:`set` command, the LIST command creates new variable values in
-the current scope, even if the list itself is actually defined in a parent
-scope.  To propagate the results of these operations upwards, use
-:command:`set` with ``PARENT_SCOPE``, :command:`set` with
-``CACHE INTERNAL``, or some other means of value propagation.
-
-.. note::
-
-  A list in cmake is a ``;`` separated group of strings.  To create a
-  list the set command can be used.  For example, ``set(var a b c d e)``
-  creates a list with ``a;b;c;d;e``, and ``set(var "a b c d e")`` creates a
-  string or a list with one item in it.   (Note macro arguments are not
-  variables, and therefore cannot be used in LIST commands.)
-
-.. note::
-
-  When specifying index values, if ``<element index>`` is 0 or greater, it
-  is indexed from the beginning of the list, with 0 representing the
-  first list element.  If ``<element index>`` is -1 or lesser, it is indexed
-  from the end of the list, with -1 representing the last list element.
-  Be careful when counting with negative indices: they do not start from
-  0.  -0 is equivalent to 0, the first list element.
-
-Reading
-^^^^^^^
-
-.. _LENGTH:
-
-.. code-block:: cmake
-
-  list(LENGTH <list> <output variable>)
-
-Returns the list's length.
-
-.. _GET:
-
-.. code-block:: cmake
-
-  list(GET <list> <element index> [<element index> ...] <output variable>)
-
-Returns the list of elements specified by indices from the list.
-
-.. _JOIN:
-
-.. code-block:: cmake
-
-  list(JOIN <list> <glue> <output variable>)
-
-Returns a string joining all list's elements using the glue string.
-To join multiple strings, which are not part of a list, use ``JOIN`` operator
-from :command:`string` command.
-
-.. _SUBLIST:
-
-.. code-block:: cmake
-
-  list(SUBLIST <list> <begin> <length> <output variable>)
-
-Returns a sublist of the given list.
-If ``<length>`` is 0, an empty list will be returned.
-If ``<length>`` is -1 or the list is smaller than ``<begin>+<length>`` then
-the remaining elements of the list starting at ``<begin>`` will be returned.
-
-Search
-^^^^^^
-
-.. _FIND:
-
-.. code-block:: cmake
-
-  list(FIND <list> <value> <output variable>)
-
-Returns the index of the element specified in the list or -1
-if it wasn't found.
-
-Modification
-^^^^^^^^^^^^
-
-.. _APPEND:
-
-.. code-block:: cmake
-
-  list(APPEND <list> [<element> ...])
-
-Appends elements to the list.
-
-.. _FILTER:
-
-.. code-block:: cmake
-
-  list(FILTER <list> <INCLUDE|EXCLUDE> REGEX <regular_expression>)
-
-Includes or removes items from the list that match the mode's pattern.
-In ``REGEX`` mode, items will be matched against the given regular expression.
-
-For more information on regular expressions see also the
-:command:`string` command.
-
-.. _INSERT:
-
-.. code-block:: cmake
-
-  list(INSERT <list> <element_index> <element> [<element> ...])
-
-Inserts elements to the list to the specified location.
-
-.. _POP_BACK:
-
-.. code-block:: cmake
-
-  list(POP_BACK <list> [<out-var>...])
-
-If no variable name is given, removes exactly one element. Otherwise,
-assign the last element's value to the given variable and removes it,
-up to the last variable name given.
-
-.. _POP_FRONT:
-
-.. code-block:: cmake
-
-  list(POP_FRONT <list> [<out-var>...])
-
-If no variable name is given, removes exactly one element. Otherwise,
-assign the first element's value to the given variable and removes it,
-up to the last variable name given.
-
-.. _PREPEND:
-
-.. code-block:: cmake
-
-  list(PREPEND <list> [<element> ...])
-
-Insert elements to the 0th position in the list.
-
-.. _REMOVE_ITEM:
-
-.. code-block:: cmake
-
-  list(REMOVE_ITEM <list> <value> [<value> ...])
-
-Removes all instances of the given items from the list.
-
-.. _REMOVE_AT:
-
-.. code-block:: cmake
-
-  list(REMOVE_AT <list> <index> [<index> ...])
-
-Removes items at given indices from the list.
-
-.. _REMOVE_DUPLICATES:
-
-.. code-block:: cmake
-
-  list(REMOVE_DUPLICATES <list>)
-
-Removes duplicated items in the list. The relative order of items is preserved,
-but if duplicates are encountered, only the first instance is preserved.
-
-.. _TRANSFORM:
-
-.. code-block:: cmake
-
-  list(TRANSFORM <list> <ACTION> [<SELECTOR>]
-                        [OUTPUT_VARIABLE <output variable>])
-
-Transforms the list by applying an action to all or, by specifying a
-``<SELECTOR>``, to the selected elements of the list, storing the result
-in-place or in the specified output variable.
-
-.. note::
-
-   The ``TRANSFORM`` sub-command does not change the number of elements in the
-   list. If a ``<SELECTOR>`` is specified, only some elements will be changed,
-   the other ones will remain the same as before the transformation.
-
-``<ACTION>`` specifies the action to apply to the elements of the list.
-The actions have exactly the same semantics as sub-commands of the
-:command:`string` command.  ``<ACTION>`` must be one of the following:
-
-``APPEND``, ``PREPEND``: Append, prepend specified value to each element of
-the list.
-
-  .. code-block:: cmake
-
-    list(TRANSFORM <list> <APPEND|PREPEND> <value> ...)
-
-``TOUPPER``, ``TOLOWER``: Convert each element of the list to upper, lower
-characters.
-
-  .. code-block:: cmake
-
-    list(TRANSFORM <list> <TOLOWER|TOUPPER> ...)
-
-``STRIP``: Remove leading and trailing spaces from each element of the
-list.
-
-  .. code-block:: cmake
-
-    list(TRANSFORM <list> STRIP ...)
-
-``GENEX_STRIP``: Strip any
-:manual:`generator expressions <cmake-generator-expressions(7)>` from each
-element of the list.
-
-  .. code-block:: cmake
-
-    list(TRANSFORM <list> GENEX_STRIP ...)
-
-``REPLACE``: Match the regular expression as many times as possible and
-substitute the replacement expression for the match for each element
-of the list
-(Same semantic as ``REGEX REPLACE`` from :command:`string` command).
-
-  .. code-block:: cmake
-
-    list(TRANSFORM <list> REPLACE <regular_expression>
-                                  <replace_expression> ...)
-
-``<SELECTOR>`` determines which elements of the list will be transformed.
-Only one type of selector can be specified at a time.  When given,
-``<SELECTOR>`` must be one of the following:
-
-``AT``: Specify a list of indexes.
-
-  .. code-block:: cmake
-
-    list(TRANSFORM <list> <ACTION> AT <index> [<index> ...] ...)
-
-``FOR``: Specify a range with, optionally, an increment used to iterate over
-the range.
-
-  .. code-block:: cmake
-
-    list(TRANSFORM <list> <ACTION> FOR <start> <stop> [<step>] ...)
-
-``REGEX``: Specify a regular expression. Only elements matching the regular
-expression will be transformed.
-
-  .. code-block:: cmake
-
-    list(TRANSFORM <list> <ACTION> REGEX <regular_expression> ...)
-
-
-Ordering
-^^^^^^^^
-
-.. _REVERSE:
-
-.. code-block:: cmake
-
-  list(REVERSE <list>)
-
-Reverses the contents of the list in-place.
-
-.. _SORT:
-
-.. code-block:: cmake
-
-  list(SORT <list> [COMPARE <compare>] [CASE <case>] [ORDER <order>])
-
-Sorts the list in-place alphabetically.
-Use the ``COMPARE`` keyword to select the comparison method for sorting.
-The ``<compare>`` option should be one of:
-
-* ``STRING``: Sorts a list of strings alphabetically.  This is the
-  default behavior if the ``COMPARE`` option is not given.
-* ``FILE_BASENAME``: Sorts a list of pathnames of files by their basenames.
-* ``NATURAL``: Sorts a list of strings using natural order
-  (see ``strverscmp(3)`` manual), i.e. such that contiguous digits
-  are compared as whole numbers.
-  For example: the following list `10.0 1.1 2.1 8.0 2.0 3.1`
-  will be sorted as `1.1 2.0 2.1 3.1 8.0 10.0` if the ``NATURAL``
-  comparison is selected where it will be sorted as
-  `1.1 10.0 2.0 2.1 3.1 8.0` with the ``STRING`` comparison.
-
-Use the ``CASE`` keyword to select a case sensitive or case insensitive
-sort mode.  The ``<case>`` option should be one of:
-
-* ``SENSITIVE``: List items are sorted in a case-sensitive manner.  This is
-  the default behavior if the ``CASE`` option is not given.
-* ``INSENSITIVE``: List items are sorted case insensitively.  The order of
-  items which differ only by upper/lowercase is not specified.
-
-To control the sort order, the ``ORDER`` keyword can be given.
-The ``<order>`` option should be one of:
-
-* ``ASCENDING``: Sorts the list in ascending order.  This is the default
-  behavior when the ``ORDER`` option is not given.
-* ``DESCENDING``: Sorts the list in descending order.
diff --git a/share/cmake-3.18/Help/command/macro.rst b/share/cmake-3.18/Help/command/macro.rst
deleted file mode 100644
index 797a90d..0000000
--- a/share/cmake-3.18/Help/command/macro.rst
+++ /dev/null
@@ -1,150 +0,0 @@
-macro
------
-
-Start recording a macro for later invocation as a command
-
-.. code-block:: cmake
-
-  macro(<name> [<arg1> ...])
-    <commands>
-  endmacro()
-
-Defines a macro named ``<name>`` that takes arguments named
-``<arg1>``, ... Commands listed after macro, but before the
-matching :command:`endmacro()`, are not executed until the macro
-is invoked.
-
-Per legacy, the :command:`endmacro` command admits an optional
-``<name>`` argument. If used, it must be a verbatim repeat of the
-argument of the opening ``macro`` command.
-
-See the :command:`cmake_policy()` command documentation for the behavior
-of policies inside macros.
-
-See the :ref:`Macro vs Function` section below for differences
-between CMake macros and :command:`functions <function>`.
-
-Invocation
-^^^^^^^^^^
-
-The macro invocation is case-insensitive. A macro defined as
-
-.. code-block:: cmake
-
-  macro(foo)
-    <commands>
-  endmacro()
-
-can be invoked through any of
-
-.. code-block:: cmake
-
-  foo()
-  Foo()
-  FOO()
-  cmake_language(CALL foo)
-
-and so on. However, it is strongly recommended to stay with the
-case chosen in the macro definition.  Typically macros use
-all-lowercase names.
-
-The :command:`cmake_language(CALL ...)` command can also be used to
-invoke the macro.
-
-Arguments
-^^^^^^^^^
-
-When a macro is invoked, the commands recorded in the macro are
-first modified by replacing formal parameters (``${arg1}``, ...)
-with the arguments passed, and then invoked as normal commands.
-
-In addition to referencing the formal parameters you can reference the
-values ``${ARGC}`` which will be set to the number of arguments passed
-into the function as well as ``${ARGV0}``, ``${ARGV1}``, ``${ARGV2}``,
-...  which will have the actual values of the arguments passed in.
-This facilitates creating macros with optional arguments.
-
-Furthermore, ``${ARGV}`` holds the list of all arguments given to the
-macro and ``${ARGN}`` holds the list of arguments past the last expected
-argument.
-Referencing to ``${ARGV#}`` arguments beyond ``${ARGC}`` have undefined
-behavior. Checking that ``${ARGC}`` is greater than ``#`` is the only
-way to ensure that ``${ARGV#}`` was passed to the function as an extra
-argument.
-
-.. _`Macro vs Function`:
-
-Macro vs Function
-^^^^^^^^^^^^^^^^^
-
-The ``macro`` command is very similar to the :command:`function` command.
-Nonetheless, there are a few important differences.
-
-In a function, ``ARGN``, ``ARGC``, ``ARGV`` and ``ARGV0``, ``ARGV1``, ...
-are true variables in the usual CMake sense.  In a macro, they are not,
-they are string replacements much like the C preprocessor would do
-with a macro.  This has a number of consequences, as explained in
-the :ref:`Argument Caveats` section below.
-
-Another difference between macros and functions is the control flow.
-A function is executed by transferring control from the calling
-statement to the function body.  A macro is executed as if the macro
-body were pasted in place of the calling statement.  This has the
-consequence that a :command:`return()` in a macro body does not
-just terminate execution of the macro; rather, control is returned
-from the scope of the macro call.  To avoid confusion, it is recommended
-to avoid :command:`return()` in macros altogether.
-
-Unlike a function, the :variable:`CMAKE_CURRENT_FUNCTION`,
-:variable:`CMAKE_CURRENT_FUNCTION_LIST_DIR`,
-:variable:`CMAKE_CURRENT_FUNCTION_LIST_FILE`,
-:variable:`CMAKE_CURRENT_FUNCTION_LIST_LINE` variables are not
-set for a macro.
-
-.. _`Argument Caveats`:
-
-Argument Caveats
-^^^^^^^^^^^^^^^^
-
-Since ``ARGN``, ``ARGC``, ``ARGV``, ``ARGV0`` etc. are not variables,
-you will NOT be able to use commands like
-
-.. code-block:: cmake
-
- if(ARGV1) # ARGV1 is not a variable
- if(DEFINED ARGV2) # ARGV2 is not a variable
- if(ARGC GREATER 2) # ARGC is not a variable
- foreach(loop_var IN LISTS ARGN) # ARGN is not a variable
-
-In the first case, you can use ``if(${ARGV1})``.  In the second and
-third case, the proper way to check if an optional variable was
-passed to the macro is to use ``if(${ARGC} GREATER 2)``.  In the
-last case, you can use ``foreach(loop_var ${ARGN})`` but this will
-skip empty arguments.  If you need to include them, you can use
-
-.. code-block:: cmake
-
- set(list_var "${ARGN}")
- foreach(loop_var IN LISTS list_var)
-
-Note that if you have a variable with the same name in the scope from
-which the macro is called, using unreferenced names will use the
-existing variable instead of the arguments. For example:
-
-.. code-block:: cmake
-
- macro(bar)
-   foreach(arg IN LISTS ARGN)
-     <commands>
-   endforeach()
- endmacro()
-
- function(foo)
-   bar(x y z)
- endfunction()
-
- foo(a b c)
-
-Will loop over ``a;b;c`` and not over ``x;y;z`` as one might have expected.
-If you want true CMake variables and/or better CMake scope control you
-should look at the function command.
diff --git a/share/cmake-3.18/Help/command/mark_as_advanced.rst b/share/cmake-3.18/Help/command/mark_as_advanced.rst
deleted file mode 100644
index e52e623..0000000
--- a/share/cmake-3.18/Help/command/mark_as_advanced.rst
+++ /dev/null
@@ -1,30 +0,0 @@
-mark_as_advanced
-----------------
-
-Mark cmake cached variables as advanced.
-
-.. code-block:: cmake
-
-  mark_as_advanced([CLEAR|FORCE] <var1> ...)
-
-Sets the advanced/non-advanced state of the named
-cached variables.
-
-An advanced variable will not be displayed in any
-of the cmake GUIs unless the ``show advanced`` option is on.
-In script mode, the advanced/non-advanced state has no effect.
-
-If the keyword ``CLEAR`` is given
-then advanced variables are changed back to unadvanced.
-If the keyword ``FORCE`` is given
-then the variables are made advanced.
-If neither ``FORCE`` nor ``CLEAR`` is specified,
-new values will be marked as advanced, but if a
-variable already has an advanced/non-advanced state,
-it will not be changed.
-
-.. note::
-
-  Policy :policy:`CMP0102` affects the behavior of the ``mark_as_advanced``
-  call. When set to ``NEW``, variables passed to this command which are not
-  already in the cache are ignored. See policy :policy:`CMP0102`.
diff --git a/share/cmake-3.18/Help/command/math.rst b/share/cmake-3.18/Help/command/math.rst
deleted file mode 100644
index ddb1ec6..0000000
--- a/share/cmake-3.18/Help/command/math.rst
+++ /dev/null
@@ -1,37 +0,0 @@
-math
-----
-
-Evaluate a mathematical expression.
-
-.. code-block:: cmake
-
-  math(EXPR <variable> "<expression>" [OUTPUT_FORMAT <format>])
-
-Evaluates a mathematical ``<expression>`` and sets ``<variable>`` to the
-resulting value.  The result of the expression must be representable as a
-64-bit signed integer.
-
-The mathematical expression must be given as a string (i.e. enclosed in
-double quotation marks). An example is ``"5 * (10 + 13)"``.
-Supported operators are ``+``, ``-``, ``*``, ``/``, ``%``, ``|``, ``&``,
-``^``, ``~``, ``<<``, ``>>``, and ``(...)``; they have the same meaning
-as in C code.
-
-Hexadecimal numbers are recognized when prefixed with ``0x``, as in C code.
-
-The result is formatted according to the option ``OUTPUT_FORMAT``,
-where ``<format>`` is one of
-
-``HEXADECIMAL``
-  Hexadecimal notation as in C code, i. e. starting with "0x".
-``DECIMAL``
-  Decimal notation. Which is also used if no ``OUTPUT_FORMAT`` option
-  is specified.
-
-
-For example
-
-.. code-block:: cmake
-
-  math(EXPR value "100 * 0xA" OUTPUT_FORMAT DECIMAL)      # value is set to "1000"
-  math(EXPR value "100 * 0xA" OUTPUT_FORMAT HEXADECIMAL)  # value is set to "0x3e8"
diff --git a/share/cmake-3.18/Help/command/message.rst b/share/cmake-3.18/Help/command/message.rst
deleted file mode 100644
index 6bc0e4c..0000000
--- a/share/cmake-3.18/Help/command/message.rst
+++ /dev/null
@@ -1,182 +0,0 @@
-message
--------
-
-Log a message.
-
-Synopsis
-^^^^^^^^
-
-.. parsed-literal::
-
-  `General messages`_
-    message([<mode>] "message text" ...)
-
-  `Reporting checks`_
-    message(<checkState> "message text" ...)
-
-
-General messages
-^^^^^^^^^^^^^^^^
-
-.. code-block:: cmake
-
-  message([<mode>] "message text" ...)
-
-Record the specified message text in the log.  If more than one message
-string is given, they are concatenated into a single message with no
-separator between the strings.
-
-The optional ``<mode>`` keyword determines the type of message, which
-influences the way the message is handled:
-
-``FATAL_ERROR``
-  CMake Error, stop processing and generation.
-
-``SEND_ERROR``
-  CMake Error, continue processing, but skip generation.
-
-``WARNING``
-  CMake Warning, continue processing.
-
-``AUTHOR_WARNING``
-  CMake Warning (dev), continue processing.
-
-``DEPRECATION``
-  CMake Deprecation Error or Warning if variable
-  :variable:`CMAKE_ERROR_DEPRECATED` or :variable:`CMAKE_WARN_DEPRECATED`
-  is enabled, respectively, else no message.
-
-(none) or ``NOTICE``
-  Important message printed to stderr to attract user's attention.
-
-``STATUS``
-  The main interesting messages that project users might be interested in.
-  Ideally these should be concise, no more than a single line, but still
-  informative.
-
-``VERBOSE``
-  Detailed informational messages intended for project users.  These messages
-  should provide additional details that won't be of interest in most cases,
-  but which may be useful to those building the project when they want deeper
-  insight into what's happening.
-
-``DEBUG``
-  Detailed informational messages intended for developers working on the
-  project itself as opposed to users who just want to build it.  These messages
-  will not typically be of interest to other users building the project and
-  will often be closely related to internal implementation details.
-
-``TRACE``
-  Fine-grained messages with very low-level implementation details.  Messages
-  using this log level would normally only be temporary and would expect to be
-  removed before releasing the project, packaging up the files, etc.
-
-The CMake command-line tool displays ``STATUS`` to ``TRACE`` messages on stdout
-with the message preceded by two hyphens and a space.  All other message types
-are sent to stderr and are not prefixed with hyphens.  The
-:manual:`CMake GUI <cmake-gui(1)>` displays all messages in its log area.
-The :manual:`curses interface <ccmake(1)>` shows ``STATUS`` to ``TRACE``
-messages one at a time on a status line and other messages in an
-interactive pop-up box.  The ``--log-level`` command-line option to each of
-these tools can be used to control which messages will be shown.
-To make a log level persist between CMake runs, the
-:variable:`CMAKE_MESSAGE_LOG_LEVEL` variable can be set instead.
-Note that the command line option takes precedence over the cache variable.
-
-Messages of log levels ``NOTICE`` and below will have each line preceded
-by the content of the :variable:`CMAKE_MESSAGE_INDENT` variable (converted to
-a single string by concatenating its list items).  For ``STATUS`` to ``TRACE``
-messages, this indenting content will be inserted after the hyphens.
-
-Messages of log levels ``NOTICE`` and below can also have each line preceded
-with context of the form ``[some.context.example]``.  The content between the
-square brackets is obtained by converting the :variable:`CMAKE_MESSAGE_CONTEXT`
-list variable to a dot-separated string.  The message context will always
-appear before any indenting content but after any automatically added leading
-hyphens. By default, message context is not shown, it has to be explicitly
-enabled by giving the :manual:`cmake <cmake(1)>` ``--log-context``
-command-line option or by setting the :variable:`CMAKE_MESSAGE_CONTEXT_SHOW`
-variable to true.  See the :variable:`CMAKE_MESSAGE_CONTEXT` documentation for
-usage examples.
-
-CMake Warning and Error message text displays using a simple markup
-language.  Non-indented text is formatted in line-wrapped paragraphs
-delimited by newlines.  Indented text is considered pre-formatted.
-
-
-Reporting checks
-^^^^^^^^^^^^^^^^
-
-A common pattern in CMake output is a message indicating the start of some
-sort of check, followed by another message reporting the result of that check.
-For example:
-
-.. code-block:: cmake
-
-  message(STATUS "Looking for someheader.h")
-  #... do the checks, set checkSuccess with the result
-  if(checkSuccess)
-    message(STATUS "Looking for someheader.h - found")
-  else()
-    message(STATUS "Looking for someheader.h - not found")
-  endif()
-
-This can be more robustly and conveniently expressed using the ``CHECK_...``
-keyword form of the ``message()`` command:
-
-.. code-block:: cmake
-
-  message(<checkState> "message" ...)
-
-where ``<checkState>`` must be one of the following:
-
-  ``CHECK_START``
-    Record a concise message about the check about to be performed.
-
-  ``CHECK_PASS``
-    Record a successful result for a check.
-
-  ``CHECK_FAIL``
-    Record an unsuccessful result for a check.
-
-When recording a check result, the command repeats the message from the most
-recently started check for which no result has yet been reported, then some
-separator characters and then the message text provided after the
-``CHECK_PASS`` or ``CHECK_FAIL`` keyword.  Check messages are always reported
-at ``STATUS`` log level.
-
-Checks may be nested and every ``CHECK_START`` should have exactly one
-matching ``CHECK_PASS`` or ``CHECK_FAIL``.
-The :variable:`CMAKE_MESSAGE_INDENT` variable can also be used to add
-indenting to nested checks if desired.  For example:
-
-.. code-block:: cmake
-
-  message(CHECK_START "Finding my things")
-  list(APPEND CMAKE_MESSAGE_INDENT "  ")
-  unset(missingComponents)
-
-  message(CHECK_START "Finding partA")
-  # ... do check, assume we find A
-  message(CHECK_PASS "found")
-
-  message(CHECK_START "Finding partB")
-  # ... do check, assume we don't find B
-  list(APPEND missingComponents B)
-  message(CHECK_FAIL "not found")
-
-  list(POP_BACK CMAKE_MESSAGE_INDENT)
-  if(missingComponents)
-    message(CHECK_FAIL "missing components: ${missingComponents}")
-  else()
-    message(CHECK_PASS "all components found")
-  endif()
-
-Output from the above would appear something like the following::
-
-  -- Finding my things
-  --   Finding partA
-  --   Finding partA - found
-  --   Finding partB
-  --   Finding partB - not found
-  -- Finding my things - missing components: B
diff --git a/share/cmake-3.18/Help/command/project.rst b/share/cmake-3.18/Help/command/project.rst
deleted file mode 100644
index b6093d3..0000000
--- a/share/cmake-3.18/Help/command/project.rst
+++ /dev/null
@@ -1,133 +0,0 @@
-project
--------
-
-Set the name of the project.
-
-Synopsis
-^^^^^^^^
-
-.. code-block:: cmake
-
- project(<PROJECT-NAME> [<language-name>...])
- project(<PROJECT-NAME>
-         [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
-         [DESCRIPTION <project-description-string>]
-         [HOMEPAGE_URL <url-string>]
-         [LANGUAGES <language-name>...])
-
-Sets the name of the project, and stores it in the variable
-:variable:`PROJECT_NAME`. When called from the top-level
-``CMakeLists.txt`` also stores the project name in the
-variable :variable:`CMAKE_PROJECT_NAME`.
-
-Also sets the variables
-
-* :variable:`PROJECT_SOURCE_DIR`,
-  :variable:`<PROJECT-NAME>_SOURCE_DIR`
-* :variable:`PROJECT_BINARY_DIR`,
-  :variable:`<PROJECT-NAME>_BINARY_DIR`
-
-Further variables are set by the optional arguments described in the following.
-If any of these arguments is not used, then the corresponding variables are
-set to the empty string.
-
-Options
-^^^^^^^
-
-The options are:
-
-``VERSION <version>``
-  Optional; may not be used unless policy :policy:`CMP0048` is
-  set to ``NEW``.
-
-  Takes a ``<version>`` argument composed of non-negative integer components,
-  i.e. ``<major>[.<minor>[.<patch>[.<tweak>]]]``,
-  and sets the variables
-
-  * :variable:`PROJECT_VERSION`,
-    :variable:`<PROJECT-NAME>_VERSION`
-  * :variable:`PROJECT_VERSION_MAJOR`,
-    :variable:`<PROJECT-NAME>_VERSION_MAJOR`
-  * :variable:`PROJECT_VERSION_MINOR`,
-    :variable:`<PROJECT-NAME>_VERSION_MINOR`
-  * :variable:`PROJECT_VERSION_PATCH`,
-    :variable:`<PROJECT-NAME>_VERSION_PATCH`
-  * :variable:`PROJECT_VERSION_TWEAK`,
-    :variable:`<PROJECT-NAME>_VERSION_TWEAK`.
-
-  When the ``project()`` command is called from the top-level ``CMakeLists.txt``,
-  then the version is also stored in the variable :variable:`CMAKE_PROJECT_VERSION`.
-
-``DESCRIPTION <project-description-string>``
-  Optional.
-  Sets the variables
-
-  * :variable:`PROJECT_DESCRIPTION`, :variable:`<PROJECT-NAME>_DESCRIPTION`
-
-  to ``<project-description-string>``.
-  It is recommended that this description is a relatively short string,
-  usually no more than a few words.
-
-  When the ``project()`` command is called from the top-level ``CMakeLists.txt``,
-  then the description is also stored in the variable :variable:`CMAKE_PROJECT_DESCRIPTION`.
-
-``HOMEPAGE_URL <url-string>``
-  Optional.
-  Sets the variables
-
-  * :variable:`PROJECT_HOMEPAGE_URL`, :variable:`<PROJECT-NAME>_HOMEPAGE_URL`
-
-  to ``<url-string>``, which should be the canonical home URL for the project.
-
-  When the ``project()`` command is called from the top-level ``CMakeLists.txt``,
-  then the URL also is stored in the variable :variable:`CMAKE_PROJECT_HOMEPAGE_URL`.
-
-``LANGUAGES <language-name>...``
-  Optional.
-  Can also be specified without ``LANGUAGES`` keyword per the first, short signature.
-
-  Selects which programming languages are needed to build the project.
-  Supported languages include ``C``, ``CXX`` (i.e.  C++), ``CUDA``,
-  ``OBJC`` (i.e. Objective-C), ``OBJCXX``, ``Fortran``, and ``ASM``.
-  By default ``C`` and ``CXX`` are enabled if no language options are given.
-  Specify language ``NONE``, or use the ``LANGUAGES`` keyword and list no languages,
-  to skip enabling any languages.
-
-  If enabling ``ASM``, list it last so that CMake can check whether
-  compilers for other languages like ``C`` work for assembly too.
-
-The variables set through the ``VERSION``, ``DESCRIPTION`` and ``HOMEPAGE_URL``
-options are intended for use as default values in package metadata and documentation.
-
-Code Injection
-^^^^^^^^^^^^^^
-
-If the :variable:`CMAKE_PROJECT_INCLUDE_BEFORE` or
-:variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE_BEFORE` variables are set,
-the files they point to will be included as the first step of the
-``project()`` command.
-If both are set, then :variable:`CMAKE_PROJECT_INCLUDE_BEFORE` will be
-included before :variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE_BEFORE`.
-
-If the :variable:`CMAKE_PROJECT_INCLUDE` or
-:variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE` variables are set, the files
-they point to will be included as the last step of the ``project()`` command.
-If both are set, then :variable:`CMAKE_PROJECT_INCLUDE` will be included before
-:variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE`.
-
-Usage
-^^^^^
-
-The top-level ``CMakeLists.txt`` file for a project must contain a
-literal, direct call to the ``project()`` command; loading one
-through the :command:`include` command is not sufficient.  If no such
-call exists, CMake will issue a warning and pretend there is a
-``project(Project)`` at the top to enable the default languages
-(``C`` and ``CXX``).
-
-.. note::
-  Call the ``project()`` command near the top of the top-level
-  ``CMakeLists.txt``, but *after* calling :command:`cmake_minimum_required`.
-  It is important to establish version and policy settings before invoking
-  other commands whose behavior they may affect.
-  See also policy :policy:`CMP0000`.
diff --git a/share/cmake-3.18/Help/command/return.rst b/share/cmake-3.18/Help/command/return.rst
deleted file mode 100644
index 830992c..0000000
--- a/share/cmake-3.18/Help/command/return.rst
+++ /dev/null
@@ -1,19 +0,0 @@
-return
-------
-
-Return from a file, directory or function.
-
-.. code-block:: cmake
-
-  return()
-
-Returns from a file, directory or function.  When this command is
-encountered in an included file (via :command:`include` or
-:command:`find_package`), it causes processing of the current file to stop
-and control is returned to the including file.  If it is encountered in a
-file which is not included by another file, e.g.  a ``CMakeLists.txt``,
-control is returned to the parent directory if there is one.  If return is
-called in a function, control is returned to the caller of the function.
-
-Note that a :command:`macro <macro>`, unlike a :command:`function <function>`,
-is expanded in place and therefore cannot handle ``return()``.
diff --git a/share/cmake-3.18/Help/command/separate_arguments.rst b/share/cmake-3.18/Help/command/separate_arguments.rst
deleted file mode 100644
index ab3d5c1..0000000
--- a/share/cmake-3.18/Help/command/separate_arguments.rst
+++ /dev/null
@@ -1,46 +0,0 @@
-separate_arguments
-------------------
-
-Parse command-line arguments into a semicolon-separated list.
-
-.. code-block:: cmake
-
-  separate_arguments(<variable> <mode> <args>)
-
-Parses a space-separated string ``<args>`` into a list of items,
-and stores this list in semicolon-separated standard form in ``<variable>``.
-
-This function is intended for parsing command-line arguments.
-The entire command line must be passed as one string in the
-argument ``<args>``.
-
-The exact parsing rules depend on the operating system.
-They are specified by the ``<mode>`` argument which must
-be one of the following keywords:
-
-``UNIX_COMMAND``
-  Arguments are separated by unquoted whitespace.
-  Both single-quote and double-quote pairs are respected.
-  A backslash escapes the next literal character (``\"`` is ``"``);
-  there are no special escapes (``\n`` is just ``n``).
-
-``WINDOWS_COMMAND``
-  A Windows command-line is parsed using the same
-  syntax the runtime library uses to construct argv at startup.  It
-  separates arguments by whitespace that is not double-quoted.
-  Backslashes are literal unless they precede double-quotes.  See the
-  MSDN article `Parsing C Command-Line Arguments`_ for details.
-
-``NATIVE_COMMAND``
-  Proceeds as in ``WINDOWS_COMMAND`` mode if the host system is Windows.
-  Otherwise proceeds as in ``UNIX_COMMAND`` mode.
-
-.. _`Parsing C Command-Line Arguments`: https://msdn.microsoft.com/library/a1y7w461.aspx
-
-.. code-block:: cmake
-
-  separate_arguments(<var>)
-
-Convert the value of ``<var>`` to a semi-colon separated list.  All
-spaces are replaced with ';'.  This helps with generating command
-lines.
diff --git a/share/cmake-3.18/Help/command/set.rst b/share/cmake-3.18/Help/command/set.rst
deleted file mode 100644
index c0e02e2..0000000
--- a/share/cmake-3.18/Help/command/set.rst
+++ /dev/null
@@ -1,104 +0,0 @@
-set
----
-
-Set a normal, cache, or environment variable to a given value.
-See the :ref:`cmake-language(7) variables <CMake Language Variables>`
-documentation for the scopes and interaction of normal variables
-and cache entries.
-
-Signatures of this command that specify a ``<value>...`` placeholder
-expect zero or more arguments.  Multiple arguments will be joined as
-a :ref:`semicolon-separated list <CMake Language Lists>` to form the actual variable
-value to be set.  Zero arguments will cause normal variables to be
-unset.  See the :command:`unset` command to unset variables explicitly.
-
-Set Normal Variable
-^^^^^^^^^^^^^^^^^^^
-
-.. code-block:: cmake
-
-  set(<variable> <value>... [PARENT_SCOPE])
-
-Sets the given ``<variable>`` in the current function or directory scope.
-
-If the ``PARENT_SCOPE`` option is given the variable will be set in
-the scope above the current scope.  Each new directory or function
-creates a new scope.  This command will set the value of a variable
-into the parent directory or calling function (whichever is applicable
-to the case at hand). The previous state of the variable's value stays the
-same in the current scope (e.g., if it was undefined before, it is still
-undefined and if it had a value, it is still that value).
-
-Set Cache Entry
-^^^^^^^^^^^^^^^
-
-.. code-block:: cmake
-
-  set(<variable> <value>... CACHE <type> <docstring> [FORCE])
-
-Sets the given cache ``<variable>`` (cache entry).  Since cache entries
-are meant to provide user-settable values this does not overwrite
-existing cache entries by default.  Use the ``FORCE`` option to
-overwrite existing entries.
-
-The ``<type>`` must be specified as one of:
-
-``BOOL``
-  Boolean ``ON/OFF`` value.  :manual:`cmake-gui(1)` offers a checkbox.
-
-``FILEPATH``
-  Path to a file on disk.  :manual:`cmake-gui(1)` offers a file dialog.
-
-``PATH``
-  Path to a directory on disk.  :manual:`cmake-gui(1)` offers a file dialog.
-
-``STRING``
-  A line of text.  :manual:`cmake-gui(1)` offers a text field or a
-  drop-down selection if the :prop_cache:`STRINGS` cache entry
-  property is set.
-
-``INTERNAL``
-  A line of text.  :manual:`cmake-gui(1)` does not show internal entries.
-  They may be used to store variables persistently across runs.
-  Use of this type implies ``FORCE``.
-
-The ``<docstring>`` must be specified as a line of text providing
-a quick summary of the option for presentation to :manual:`cmake-gui(1)`
-users.
-
-If the cache entry does not exist prior to the call or the ``FORCE``
-option is given then the cache entry will be set to the given value.
-Furthermore, any normal variable binding in the current scope will
-be removed to expose the newly cached value to any immediately
-following evaluation.
-
-It is possible for the cache entry to exist prior to the call but
-have no type set if it was created on the :manual:`cmake(1)` command
-line by a user through the ``-D<var>=<value>`` option without
-specifying a type.  In this case the ``set`` command will add the
-type.  Furthermore, if the ``<type>`` is ``PATH`` or ``FILEPATH``
-and the ``<value>`` provided on the command line is a relative path,
-then the ``set`` command will treat the path as relative to the
-current working directory and convert it to an absolute path.
-
-Set Environment Variable
-^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. code-block:: cmake
-
-  set(ENV{<variable>} [<value>])
-
-Sets an :manual:`Environment Variable <cmake-env-variables(7)>`
-to the given value.
-Subsequent calls of ``$ENV{<variable>}`` will return this new value.
-
-This command affects only the current CMake process, not the process
-from which CMake was called, nor the system environment at large,
-nor the environment of subsequent build or test processes.
-
-If no argument is given after ``ENV{<variable>}`` or if ``<value>`` is
-an empty string, then this command will clear any existing value of the
-environment variable.
-
-Arguments after ``<value>`` are ignored. If extra arguments are found,
-then an author warning is issued.
diff --git a/share/cmake-3.18/Help/command/set_property.rst b/share/cmake-3.18/Help/command/set_property.rst
deleted file mode 100644
index 93c2d9c..0000000
--- a/share/cmake-3.18/Help/command/set_property.rst
+++ /dev/null
@@ -1,96 +0,0 @@
-set_property
-------------
-
-Set a named property in a given scope.
-
-.. code-block:: cmake
-
-  set_property(<GLOBAL                      |
-                DIRECTORY [<dir>]           |
-                TARGET    [<target1> ...]   |
-                SOURCE    [<src1> ...]
-                          [DIRECTORY <dirs> ...] |
-                          [TARGET_DIRECTORY <targets> ...]
-                INSTALL   [<file1> ...]     |
-                TEST      [<test1> ...]     |
-                CACHE     [<entry1> ...]    >
-               [APPEND] [APPEND_STRING]
-               PROPERTY <name> [<value1> ...])
-
-Sets one property on zero or more objects of a scope.
-
-The first argument determines the scope in which the property is set.
-It must be one of the following:
-
-``GLOBAL``
-  Scope is unique and does not accept a name.
-
-``DIRECTORY``
-  Scope defaults to the current directory but another directory
-  (already processed by CMake) may be named by full or relative path.
-  See also the :command:`set_directory_properties` command.
-
-``TARGET``
-  Scope may name zero or more existing targets.
-  See also the :command:`set_target_properties` command.
-
-``SOURCE``
-  Scope may name zero or more source files.  By default, source file properties
-  are only visible to targets added in the same directory (``CMakeLists.txt``).
-  Visibility can be set in other directory scopes using one or both of the
-  following sub-options:
-
-  ``DIRECTORY <dirs>...``
-    The source file property will be set in each of the ``<dirs>``
-    directories' scopes.  CMake must already know about each of these
-    source directories, either by having added them through a call to
-    :command:`add_subdirectory` or it being the top level source directory.
-    Relative paths are treated as relative to the current source directory.
-
-  ``TARGET_DIRECTORY <targets>...``
-    The source file property will be set in each of the directory scopes
-    where any of the specified ``<targets>`` were created (the ``<targets>``
-    must therefore already exist).
-
-  See also the :command:`set_source_files_properties` command.
-
-``INSTALL``
-  Scope may name zero or more installed file paths.
-  These are made available to CPack to influence deployment.
-
-  Both the property key and value may use generator expressions.
-  Specific properties may apply to installed files and/or directories.
-
-  Path components have to be separated by forward slashes,
-  must be normalized and are case sensitive.
-
-  To reference the installation prefix itself with a relative path use ``.``.
-
-  Currently installed file properties are only defined for
-  the WIX generator where the given paths are relative
-  to the installation prefix.
-
-``TEST``
-  Scope may name zero or more existing tests.
-  See also the :command:`set_tests_properties` command.
-
-``CACHE``
-  Scope must name zero or more cache existing entries.
-
-The required ``PROPERTY`` option is immediately followed by the name of
-the property to set.  Remaining arguments are used to compose the
-property value in the form of a semicolon-separated list.
-
-If the ``APPEND`` option is given the list is appended to any existing
-property value (except that empty values are ignored and not appended).
-If the ``APPEND_STRING`` option is given the string is
-appended to any existing property value as string, i.e. it results in a
-longer string and not a list of strings.  When using ``APPEND`` or
-``APPEND_STRING`` with a property defined to support ``INHERITED``
-behavior (see :command:`define_property`), no inheriting occurs when
-finding the initial value to append to.  If the property is not already
-directly set in the nominated scope, the command will behave as though
-``APPEND`` or ``APPEND_STRING`` had not been given.
-
-See the :manual:`cmake-properties(7)` manual for a list of properties
-in each scope.
diff --git a/share/cmake-3.18/Help/command/set_source_files_properties.rst b/share/cmake-3.18/Help/command/set_source_files_properties.rst
deleted file mode 100644
index 9558b40..0000000
--- a/share/cmake-3.18/Help/command/set_source_files_properties.rst
+++ /dev/null
@@ -1,37 +0,0 @@
-set_source_files_properties
----------------------------
-
-Source files can have properties that affect how they are built.
-
-.. code-block:: cmake
-
-  set_source_files_properties(<files> ...
-                              [DIRECTORY <dirs> ...]
-                              [TARGET_DIRECTORY <targets> ...]
-                              PROPERTIES <prop1> <value1>
-                              [<prop2> <value2>] ...)
-
-Sets properties associated with source files using a key/value paired
-list.
-
-By default, source file properties are only visible to targets added in the
-same directory (``CMakeLists.txt``).  Visibility can be set in other directory
-scopes using one or both of the following options:
-
-``DIRECTORY <dirs>...``
-  The source file properties will be set in each of the ``<dirs>``
-  directories' scopes.  CMake must already know about each of these
-  source directories, either by having added them through a call to
-  :command:`add_subdirectory` or it being the top level source directory.
-  Relative paths are treated as relative to the current source directory.
-
-``TARGET_DIRECTORY <targets>...``
-  The source file properties will be set in each of the directory scopes
-  where any of the specified ``<targets>`` were created (the ``<targets>``
-  must therefore already exist).
-
-Use :command:`get_source_file_property` to get property values.
-See also the :command:`set_property(SOURCE)` command.
-
-See :ref:`Source File Properties` for the list of properties known
-to CMake.
diff --git a/share/cmake-3.18/Help/command/site_name.rst b/share/cmake-3.18/Help/command/site_name.rst
deleted file mode 100644
index 1bcaead..0000000
--- a/share/cmake-3.18/Help/command/site_name.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-site_name
----------
-
-Set the given variable to the name of the computer.
-
-.. code-block:: cmake
-
-  site_name(variable)
diff --git a/share/cmake-3.18/Help/command/source_group.rst b/share/cmake-3.18/Help/command/source_group.rst
deleted file mode 100644
index 5ae9e51..0000000
--- a/share/cmake-3.18/Help/command/source_group.rst
+++ /dev/null
@@ -1,60 +0,0 @@
-source_group
-------------
-
-Define a grouping for source files in IDE project generation.
-There are two different signatures to create source groups.
-
-.. code-block:: cmake
-
-  source_group(<name> [FILES <src>...] [REGULAR_EXPRESSION <regex>])
-  source_group(TREE <root> [PREFIX <prefix>] [FILES <src>...])
-
-Defines a group into which sources will be placed in project files.
-This is intended to set up file tabs in Visual Studio.
-The options are:
-
-``TREE``
- CMake will automatically detect, from ``<src>`` files paths, source groups
- it needs to create, to keep structure of source groups analogically to the
- actual files and directories structure in the project. Paths of ``<src>``
- files will be cut to be relative to ``<root>``.
-
-``PREFIX``
- Source group and files located directly in ``<root>`` path, will be placed
- in ``<prefix>`` source groups.
-
-``FILES``
- Any source file specified explicitly will be placed in group
- ``<name>``.  Relative paths are interpreted with respect to the
- current source directory.
-
-``REGULAR_EXPRESSION``
- Any source file whose name matches the regular expression will
- be placed in group ``<name>``.
-
-If a source file matches multiple groups, the *last* group that
-explicitly lists the file with ``FILES`` will be favored, if any.
-If no group explicitly lists the file, the *last* group whose
-regular expression matches the file will be favored.
-
-The ``<name>`` of the group and ``<prefix>`` argument may contain forward
-slashes or backslashes to specify subgroups.  Backslashes need to be escaped
-appropriately:
-
-.. code-block:: cmake
-
-  source_group(base/subdir ...)
-  source_group(outer\\inner ...)
-  source_group(TREE <root> PREFIX sources\\inc ...)
-
-For backwards compatibility, the short-hand signature
-
-.. code-block:: cmake
-
-  source_group(<name> <regex>)
-
-is equivalent to
-
-.. code-block:: cmake
-
-  source_group(<name> REGULAR_EXPRESSION <regex>)
diff --git a/share/cmake-3.18/Help/command/string.rst b/share/cmake-3.18/Help/command/string.rst
deleted file mode 100644
index cfcf914..0000000
--- a/share/cmake-3.18/Help/command/string.rst
+++ /dev/null
@@ -1,472 +0,0 @@
-string
-------
-
-String operations.
-
-Synopsis
-^^^^^^^^
-
-.. parsed-literal::
-
-  `Search and Replace`_
-    string(`FIND`_ <string> <substring> <out-var> [...])
-    string(`REPLACE`_ <match-string> <replace-string> <out-var> <input>...)
-    string(`REGEX MATCH`_ <match-regex> <out-var> <input>...)
-    string(`REGEX MATCHALL`_ <match-regex> <out-var> <input>...)
-    string(`REGEX REPLACE`_ <match-regex> <replace-expr> <out-var> <input>...)
-
-  `Manipulation`_
-    string(`APPEND`_ <string-var> [<input>...])
-    string(`PREPEND`_ <string-var> [<input>...])
-    string(`CONCAT`_ <out-var> [<input>...])
-    string(`JOIN`_ <glue> <out-var> [<input>...])
-    string(`TOLOWER`_ <string> <out-var>)
-    string(`TOUPPER`_ <string> <out-var>)
-    string(`LENGTH`_ <string> <out-var>)
-    string(`SUBSTRING`_ <string> <begin> <length> <out-var>)
-    string(`STRIP`_ <string> <out-var>)
-    string(`GENEX_STRIP`_ <string> <out-var>)
-    string(`REPEAT`_ <string> <count> <out-var>)
-
-  `Comparison`_
-    string(`COMPARE`_ <op> <string1> <string2> <out-var>)
-
-  `Hashing`_
-    string(`\<HASH\> <HASH_>`_ <out-var> <input>)
-
-  `Generation`_
-    string(`ASCII`_ <number>... <out-var>)
-    string(`HEX`_ <string> <out-var>)
-    string(`CONFIGURE`_ <string> <out-var> [...])
-    string(`MAKE_C_IDENTIFIER`_ <string> <out-var>)
-    string(`RANDOM`_ [<option>...] <out-var>)
-    string(`TIMESTAMP`_ <out-var> [<format string>] [UTC])
-    string(`UUID`_ <out-var> ...)
-
-Search and Replace
-^^^^^^^^^^^^^^^^^^
-
-Search and Replace With Plain Strings
-"""""""""""""""""""""""""""""""""""""
-
-.. _FIND:
-
-.. code-block:: cmake
-
-  string(FIND <string> <substring> <output_variable> [REVERSE])
-
-Return the position where the given ``<substring>`` was found in
-the supplied ``<string>``.  If the ``REVERSE`` flag was used, the command will
-search for the position of the last occurrence of the specified
-``<substring>``.  If the ``<substring>`` is not found, a position of -1 is
-returned.
-
-The ``string(FIND)`` subcommand treats all strings as ASCII-only characters.
-The index stored in ``<output_variable>`` will also be counted in bytes,
-so strings containing multi-byte characters may lead to unexpected results.
-
-.. _REPLACE:
-
-.. code-block:: cmake
-
-  string(REPLACE <match_string>
-         <replace_string> <output_variable>
-         <input> [<input>...])
-
-Replace all occurrences of ``<match_string>`` in the ``<input>``
-with ``<replace_string>`` and store the result in the ``<output_variable>``.
-
-Search and Replace With Regular Expressions
-"""""""""""""""""""""""""""""""""""""""""""
-
-.. _`REGEX MATCH`:
-
-.. code-block:: cmake
-
-  string(REGEX MATCH <regular_expression>
-         <output_variable> <input> [<input>...])
-
-Match the ``<regular_expression>`` once and store the match in the
-``<output_variable>``.
-All ``<input>`` arguments are concatenated before matching.
-Regular expressions are specified in the subsection just below.
-
-.. _`REGEX MATCHALL`:
-
-.. code-block:: cmake
-
-  string(REGEX MATCHALL <regular_expression>
-         <output_variable> <input> [<input>...])
-
-Match the ``<regular_expression>`` as many times as possible and store the
-matches in the ``<output_variable>`` as a list.
-All ``<input>`` arguments are concatenated before matching.
-
-.. _`REGEX REPLACE`:
-
-.. code-block:: cmake
-
-  string(REGEX REPLACE <regular_expression>
-         <replacement_expression> <output_variable>
-         <input> [<input>...])
-
-Match the ``<regular_expression>`` as many times as possible and substitute
-the ``<replacement_expression>`` for the match in the output.
-All ``<input>`` arguments are concatenated before matching.
-
-The ``<replacement_expression>`` may refer to parenthesis-delimited
-subexpressions of the match using ``\1``, ``\2``, ..., ``\9``.  Note that
-two backslashes (``\\1``) are required in CMake code to get a backslash
-through argument parsing.
-
-.. _`Regex Specification`:
-
-Regex Specification
-"""""""""""""""""""
-
-The following characters have special meaning in regular expressions:
-
-``^``
-  Matches at beginning of input
-``$``
-  Matches at end of input
-``.``
-  Matches any single character
-``\<char>``
-  Matches the single character specified by ``<char>``.  Use this to
-  match special regex characters, e.g. ``\.`` for a literal ``.``
-  or ``\\`` for a literal backslash ``\``.  Escaping a non-special
-  character is unnecessary but allowed, e.g. ``\a`` matches ``a``.
-``[ ]``
-  Matches any character(s) inside the brackets
-``[^ ]``
-  Matches any character(s) not inside the brackets
-``-``
-  Inside brackets, specifies an inclusive range between
-  characters on either side e.g. ``[a-f]`` is ``[abcdef]``
-  To match a literal ``-`` using brackets, make it the first
-  or the last character e.g. ``[+*/-]`` matches basic
-  mathematical operators.
-``*``
-  Matches preceding pattern zero or more times
-``+``
-  Matches preceding pattern one or more times
-``?``
-  Matches preceding pattern zero or once only
-``|``
-  Matches a pattern on either side of the ``|``
-``()``
-  Saves a matched subexpression, which can be referenced
-  in the ``REGEX REPLACE`` operation. Additionally it is saved
-  by all regular expression-related commands, including
-  e.g. :command:`if(MATCHES)`, in the variables
-  :variable:`CMAKE_MATCH_<n>` for ``<n>`` 0..9.
-
-``*``, ``+`` and ``?`` have higher precedence than concatenation.  ``|``
-has lower precedence than concatenation.  This means that the regular
-expression ``^ab+d$`` matches ``abbd`` but not ``ababd``, and the regular
-expression ``^(ab|cd)$`` matches ``ab`` but not ``abd``.
-
-CMake language :ref:`Escape Sequences` such as ``\t``, ``\r``, ``\n``,
-and ``\\`` may be used to construct literal tabs, carriage returns,
-newlines, and backslashes (respectively) to pass in a regex.  For example:
-
-* The quoted argument ``"[ \t\r\n]"`` specifies a regex that matches
-  any single whitespace character.
-* The quoted argument ``"[/\\]"`` specifies a regex that matches
-  a single forward slash ``/`` or backslash ``\``.
-* The quoted argument ``"[A-Za-z0-9_]"`` specifies a regex that matches
-  any single "word" character in the C locale.
-* The quoted argument ``"\\(\\a\\+b\\)"`` specifies a regex that matches
-  the exact string ``(a+b)``.  Each ``\\`` is parsed in a quoted argument
-  as just ``\``, so the regex itself is actually ``\(\a\+\b\)``.  This
-  can alternatively be specified in a :ref:`bracket argument` without
-  having to escape the backslashes, e.g. ``[[\(\a\+\b\)]]``.
-
-Manipulation
-^^^^^^^^^^^^
-
-.. _APPEND:
-
-.. code-block:: cmake
-
-  string(APPEND <string_variable> [<input>...])
-
-Append all the ``<input>`` arguments to the string.
-
-.. _PREPEND:
-
-.. code-block:: cmake
-
-  string(PREPEND <string_variable> [<input>...])
-
-Prepend all the ``<input>`` arguments to the string.
-
-.. _CONCAT:
-
-.. code-block:: cmake
-
-  string(CONCAT <output_variable> [<input>...])
-
-Concatenate all the ``<input>`` arguments together and store
-the result in the named ``<output_variable>``.
-
-.. _JOIN:
-
-.. code-block:: cmake
-
-  string(JOIN <glue> <output_variable> [<input>...])
-
-Join all the ``<input>`` arguments together using the ``<glue>``
-string and store the result in the named ``<output_variable>``.
-
-To join a list's elements, prefer to use the ``JOIN`` operator
-from the :command:`list` command.  This allows for the elements to have
-special characters like ``;`` in them.
-
-.. _TOLOWER:
-
-.. code-block:: cmake
-
-  string(TOLOWER <string> <output_variable>)
-
-Convert ``<string>`` to lower characters.
-
-.. _TOUPPER:
-
-.. code-block:: cmake
-
-  string(TOUPPER <string> <output_variable>)
-
-Convert ``<string>`` to upper characters.
-
-.. _LENGTH:
-
-.. code-block:: cmake
-
-  string(LENGTH <string> <output_variable>)
-
-Store in an ``<output_variable>`` a given string's length in bytes.
-Note that this means if ``<string>`` contains multi-byte characters, the
-result stored in ``<output_variable>`` will *not* be the number of characters.
-
-.. _SUBSTRING:
-
-.. code-block:: cmake
-
-  string(SUBSTRING <string> <begin> <length> <output_variable>)
-
-Store in an ``<output_variable>`` a substring of a given ``<string>``.  If
-``<length>`` is ``-1`` the remainder of the string starting at ``<begin>``
-will be returned.  If ``<string>`` is shorter than ``<length>`` then the
-end of the string is used instead.
-
-Both ``<begin>`` and ``<length>`` are counted in bytes, so care must
-be exercised if ``<string>`` could contain multi-byte characters.
-
-.. note::
-  CMake 3.1 and below reported an error if ``<length>`` pointed past
-  the end of ``<string>``.
-
-.. _STRIP:
-
-.. code-block:: cmake
-
-  string(STRIP <string> <output_variable>)
-
-Store in an ``<output_variable>`` a substring of a given ``<string>`` with
-leading and trailing spaces removed.
-
-.. _GENEX_STRIP:
-
-.. code-block:: cmake
-
-  string(GENEX_STRIP <string> <output_variable>)
-
-Strip any :manual:`generator expressions <cmake-generator-expressions(7)>`
-from the input ``<string>`` and store the result in the ``<output_variable>``.
-
-.. _REPEAT:
-
-.. code-block:: cmake
-
-  string(REPEAT <string> <count> <output_variable>)
-
-Produce the output string as the input ``<string>`` repeated ``<count>`` times.
-
-Comparison
-^^^^^^^^^^
-
-.. _COMPARE:
-
-.. code-block:: cmake
-
-  string(COMPARE LESS <string1> <string2> <output_variable>)
-  string(COMPARE GREATER <string1> <string2> <output_variable>)
-  string(COMPARE EQUAL <string1> <string2> <output_variable>)
-  string(COMPARE NOTEQUAL <string1> <string2> <output_variable>)
-  string(COMPARE LESS_EQUAL <string1> <string2> <output_variable>)
-  string(COMPARE GREATER_EQUAL <string1> <string2> <output_variable>)
-
-Compare the strings and store true or false in the ``<output_variable>``.
-
-.. _`Supported Hash Algorithms`:
-
-Hashing
-^^^^^^^
-
-.. _`HASH`:
-
-.. code-block:: cmake
-
-  string(<HASH> <output_variable> <input>)
-
-Compute a cryptographic hash of the ``<input>`` string.
-The supported ``<HASH>`` algorithm names are:
-
-``MD5``
-  Message-Digest Algorithm 5, RFC 1321.
-``SHA1``
-  US Secure Hash Algorithm 1, RFC 3174.
-``SHA224``
-  US Secure Hash Algorithms, RFC 4634.
-``SHA256``
-  US Secure Hash Algorithms, RFC 4634.
-``SHA384``
-  US Secure Hash Algorithms, RFC 4634.
-``SHA512``
-  US Secure Hash Algorithms, RFC 4634.
-``SHA3_224``
-  Keccak SHA-3.
-``SHA3_256``
-  Keccak SHA-3.
-``SHA3_384``
-  Keccak SHA-3.
-``SHA3_512``
-  Keccak SHA-3.
-
-Generation
-^^^^^^^^^^
-
-.. _ASCII:
-
-.. code-block:: cmake
-
-  string(ASCII <number> [<number> ...] <output_variable>)
-
-Convert all numbers into corresponding ASCII characters.
-
-.. _HEX:
-
-.. code-block:: cmake
-
-  string(HEX <string> <output_variable>)
-
-Convert each byte in the input ``<string>`` to its hexadecimal representation
-and store the concatenated hex digits in the ``<output_variable>``. Letters in
-the output (``a`` through ``f``) are in lowercase.
-
-.. _CONFIGURE:
-
-.. code-block:: cmake
-
-  string(CONFIGURE <string> <output_variable>
-         [@ONLY] [ESCAPE_QUOTES])
-
-Transform a ``<string>`` like :command:`configure_file` transforms a file.
-
-.. _MAKE_C_IDENTIFIER:
-
-.. code-block:: cmake
-
-  string(MAKE_C_IDENTIFIER <string> <output_variable>)
-
-Convert each non-alphanumeric character in the input ``<string>`` to an
-underscore and store the result in the ``<output_variable>``.  If the first
-character of the ``<string>`` is a digit, an underscore will also be prepended
-to the result.
-
-.. _RANDOM:
-
-.. code-block:: cmake
-
-  string(RANDOM [LENGTH <length>] [ALPHABET <alphabet>]
-         [RANDOM_SEED <seed>] <output_variable>)
-
-Return a random string of given ``<length>`` consisting of
-characters from the given ``<alphabet>``.  Default length is 5 characters
-and default alphabet is all numbers and upper and lower case letters.
-If an integer ``RANDOM_SEED`` is given, its value will be used to seed the
-random number generator.
-
-.. _TIMESTAMP:
-
-.. code-block:: cmake
-
-  string(TIMESTAMP <output_variable> [<format_string>] [UTC])
-
-Write a string representation of the current date
-and/or time to the ``<output_variable>``.
-
-If the command is unable to obtain a timestamp, the ``<output_variable>``
-will be set to the empty string ``""``.
-
-The optional ``UTC`` flag requests the current date/time representation to
-be in Coordinated Universal Time (UTC) rather than local time.
-
-The optional ``<format_string>`` may contain the following format
-specifiers:
-
-::
-
-   %%        A literal percent sign (%).
-   %d        The day of the current month (01-31).
-   %H        The hour on a 24-hour clock (00-23).
-   %I        The hour on a 12-hour clock (01-12).
-   %j        The day of the current year (001-366).
-   %m        The month of the current year (01-12).
-   %b        Abbreviated month name (e.g. Oct).
-   %B        Full month name (e.g. October).
-   %M        The minute of the current hour (00-59).
-   %s        Seconds since midnight (UTC) 1-Jan-1970 (UNIX time).
-   %S        The second of the current minute.
-             60 represents a leap second. (00-60)
-   %U        The week number of the current year (00-53).
-   %w        The day of the current week. 0 is Sunday. (0-6)
-   %a        Abbreviated weekday name (e.g. Fri).
-   %A        Full weekday name (e.g. Friday).
-   %y        The last two digits of the current year (00-99)
-   %Y        The current year.
-
-Unknown format specifiers will be ignored and copied to the output
-as-is.
-
-If no explicit ``<format_string>`` is given, it will default to:
-
-::
-
-   %Y-%m-%dT%H:%M:%S    for local time.
-   %Y-%m-%dT%H:%M:%SZ   for UTC.
-
-.. note::
-
-  If the ``SOURCE_DATE_EPOCH`` environment variable is set,
-  its value will be used instead of the current time.
-  See https://reproducible-builds.org/specs/source-date-epoch/ for details.
-
-.. _UUID:
-
-.. code-block:: cmake
-
-  string(UUID <output_variable> NAMESPACE <namespace> NAME <name>
-         TYPE <MD5|SHA1> [UPPER])
-
-Create a universally unique identifier (aka GUID) as per RFC4122
-based on the hash of the combined values of ``<namespace>``
-(which itself has to be a valid UUID) and ``<name>``.
-The hash algorithm can be either ``MD5`` (Version 3 UUID) or
-``SHA1`` (Version 5 UUID).
-A UUID has the format ``xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx``
-where each ``x`` represents a lower case hexadecimal character.
-Where required, an uppercase representation can be requested
-with the optional ``UPPER`` flag.
diff --git a/share/cmake-3.18/Help/command/target_compile_definitions.rst b/share/cmake-3.18/Help/command/target_compile_definitions.rst
deleted file mode 100644
index 9e9c690..0000000
--- a/share/cmake-3.18/Help/command/target_compile_definitions.rst
+++ /dev/null
@@ -1,39 +0,0 @@
-target_compile_definitions
---------------------------
-
-Add compile definitions to a target.
-
-.. code-block:: cmake
-
-  target_compile_definitions(<target>
-    <INTERFACE|PUBLIC|PRIVATE> [items1...]
-    [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
-
-Specifies compile definitions to use when compiling a given ``<target>``.  The
-named ``<target>`` must have been created by a command such as
-:command:`add_executable` or :command:`add_library` and must not be an
-:ref:`ALIAS target <Alias Targets>`.
-
-The ``INTERFACE``, ``PUBLIC`` and ``PRIVATE`` keywords are required to
-specify the scope of the following arguments.  ``PRIVATE`` and ``PUBLIC``
-items will populate the :prop_tgt:`COMPILE_DEFINITIONS` property of
-``<target>``. ``PUBLIC`` and ``INTERFACE`` items will populate the
-:prop_tgt:`INTERFACE_COMPILE_DEFINITIONS` property of ``<target>``.
-(:ref:`IMPORTED targets <Imported Targets>` only support ``INTERFACE`` items.)
-The following arguments specify compile definitions.  Repeated calls for the
-same ``<target>`` append items in the order called.
-
-Arguments to ``target_compile_definitions`` may use "generator expressions"
-with the syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)`
-manual for available expressions.  See the :manual:`cmake-buildsystem(7)`
-manual for more on defining buildsystem properties.
-
-Any leading ``-D`` on an item will be removed.  Empty items are ignored.
-For example, the following are all equivalent:
-
-.. code-block:: cmake
-
-  target_compile_definitions(foo PUBLIC FOO)
-  target_compile_definitions(foo PUBLIC -DFOO)  # -D removed
-  target_compile_definitions(foo PUBLIC "" FOO) # "" ignored
-  target_compile_definitions(foo PUBLIC -D FOO) # -D becomes "", then ignored
diff --git a/share/cmake-3.18/Help/command/target_compile_features.rst b/share/cmake-3.18/Help/command/target_compile_features.rst
deleted file mode 100644
index c5401e6..0000000
--- a/share/cmake-3.18/Help/command/target_compile_features.rst
+++ /dev/null
@@ -1,33 +0,0 @@
-target_compile_features
------------------------
-
-Add expected compiler features to a target.
-
-.. code-block:: cmake
-
-  target_compile_features(<target> <PRIVATE|PUBLIC|INTERFACE> <feature> [...])
-
-Specifies compiler features required when compiling a given target.  If the
-feature is not listed in the :variable:`CMAKE_C_COMPILE_FEATURES`,
-:variable:`CMAKE_CUDA_COMPILE_FEATURES`, or :variable:`CMAKE_CXX_COMPILE_FEATURES`
-variables, then an error will be reported by CMake.  If the use of the feature requires
-an additional compiler flag, such as ``-std=gnu++11``, the flag will be added
-automatically.
-
-The ``INTERFACE``, ``PUBLIC`` and ``PRIVATE`` keywords are required to
-specify the scope of the features.  ``PRIVATE`` and ``PUBLIC`` items will
-populate the :prop_tgt:`COMPILE_FEATURES` property of ``<target>``.
-``PUBLIC`` and ``INTERFACE`` items will populate the
-:prop_tgt:`INTERFACE_COMPILE_FEATURES` property of ``<target>``.
-(:ref:`IMPORTED targets <Imported Targets>` only support ``INTERFACE`` items.)
-Repeated calls for the same ``<target>`` append items.
-
-The named ``<target>`` must have been created by a command such as
-:command:`add_executable` or :command:`add_library` and must not be an
-:ref:`ALIAS target <Alias Targets>`.
-
-Arguments to ``target_compile_features`` may use "generator expressions"
-with the syntax ``$<...>``.
-See the :manual:`cmake-generator-expressions(7)` manual for available
-expressions.  See the :manual:`cmake-compile-features(7)` manual for
-information on compile features and a list of supported compilers.
diff --git a/share/cmake-3.18/Help/command/target_compile_options.rst b/share/cmake-3.18/Help/command/target_compile_options.rst
deleted file mode 100644
index 3c733c5..0000000
--- a/share/cmake-3.18/Help/command/target_compile_options.rst
+++ /dev/null
@@ -1,50 +0,0 @@
-target_compile_options
-----------------------
-
-Add compile options to a target.
-
-.. code-block:: cmake
-
-  target_compile_options(<target> [BEFORE]
-    <INTERFACE|PUBLIC|PRIVATE> [items1...]
-    [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
-
-Adds options to the :prop_tgt:`COMPILE_OPTIONS` or
-:prop_tgt:`INTERFACE_COMPILE_OPTIONS` target properties. These options
-are used when compiling the given ``<target>``, which must have been
-created by a command such as :command:`add_executable` or
-:command:`add_library` and must not be an :ref:`ALIAS target <Alias Targets>`.
-
-Arguments
-^^^^^^^^^
-
-If ``BEFORE`` is specified, the content will be prepended to the property
-instead of being appended.
-
-The ``INTERFACE``, ``PUBLIC`` and ``PRIVATE`` keywords are required to
-specify the scope of the following arguments.  ``PRIVATE`` and ``PUBLIC``
-items will populate the :prop_tgt:`COMPILE_OPTIONS` property of
-``<target>``.  ``PUBLIC`` and ``INTERFACE`` items will populate the
-:prop_tgt:`INTERFACE_COMPILE_OPTIONS` property of ``<target>``.
-(:ref:`IMPORTED targets <Imported Targets>` only support ``INTERFACE`` items.)
-The following arguments specify compile options.  Repeated calls for the same
-``<target>`` append items in the order called.
-
-Arguments to ``target_compile_options`` may use "generator expressions"
-with the syntax ``$<...>``. See the :manual:`cmake-generator-expressions(7)`
-manual for available expressions.  See the :manual:`cmake-buildsystem(7)`
-manual for more on defining buildsystem properties.
-
-.. include:: OPTIONS_SHELL.txt
-
-See Also
-^^^^^^^^
-
-This command can be used to add any options. However, for adding
-preprocessor definitions and include directories it is recommended
-to use the more specific commands :command:`target_compile_definitions`
-and :command:`target_include_directories`.
-
-For directory-wide settings, there is the command :command:`add_compile_options`.
-
-For file-specific settings, there is the source file property :prop_sf:`COMPILE_OPTIONS`.
diff --git a/share/cmake-3.18/Help/command/target_include_directories.rst b/share/cmake-3.18/Help/command/target_include_directories.rst
deleted file mode 100644
index 660e15c..0000000
--- a/share/cmake-3.18/Help/command/target_include_directories.rst
+++ /dev/null
@@ -1,62 +0,0 @@
-target_include_directories
---------------------------
-
-Add include directories to a target.
-
-.. code-block:: cmake
-
-  target_include_directories(<target> [SYSTEM] [BEFORE]
-    <INTERFACE|PUBLIC|PRIVATE> [items1...]
-    [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
-
-Specifies include directories to use when compiling a given target.
-The named ``<target>`` must have been created by a command such
-as :command:`add_executable` or :command:`add_library` and must not be an
-:ref:`ALIAS target <Alias Targets>`.
-
-If ``BEFORE`` is specified, the content will be prepended to the property
-instead of being appended.
-
-The ``INTERFACE``, ``PUBLIC`` and ``PRIVATE`` keywords are required to specify
-the scope of the following arguments.  ``PRIVATE`` and ``PUBLIC`` items will
-populate the :prop_tgt:`INCLUDE_DIRECTORIES` property of ``<target>``.
-``PUBLIC`` and ``INTERFACE`` items will populate the
-:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` property of ``<target>``.
-(:ref:`IMPORTED targets <Imported Targets>` only support ``INTERFACE`` items.)
-The following arguments specify include directories.
-
-Specified include directories may be absolute paths or relative paths.
-Repeated calls for the same <target> append items in the order called.  If
-``SYSTEM`` is specified, the compiler will be told the
-directories are meant as system include directories on some platforms
-(signalling this setting might achieve effects such as the compiler
-skipping warnings, or these fixed-install system files not being
-considered in dependency calculations - see compiler docs).  If ``SYSTEM``
-is used together with ``PUBLIC`` or ``INTERFACE``, the
-:prop_tgt:`INTERFACE_SYSTEM_INCLUDE_DIRECTORIES` target property will be
-populated with the specified directories.
-
-Arguments to ``target_include_directories`` may use "generator expressions"
-with the syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)`
-manual for available expressions.  See the :manual:`cmake-buildsystem(7)`
-manual for more on defining buildsystem properties.
-
-Include directories usage requirements commonly differ between the build-tree
-and the install-tree.  The ``BUILD_INTERFACE`` and ``INSTALL_INTERFACE``
-generator expressions can be used to describe separate usage requirements
-based on the usage location.  Relative paths are allowed within the
-``INSTALL_INTERFACE`` expression and are interpreted relative to the
-installation prefix.  For example:
-
-.. code-block:: cmake
-
-  target_include_directories(mylib PUBLIC
-    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/mylib>
-    $<INSTALL_INTERFACE:include/mylib>  # <prefix>/include/mylib
-  )
-
-Creating Relocatable Packages
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. |INTERFACE_PROPERTY_LINK| replace:: :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES`
-.. include:: /include/INTERFACE_INCLUDE_DIRECTORIES_WARNING.txt
diff --git a/share/cmake-3.18/Help/command/target_link_directories.rst b/share/cmake-3.18/Help/command/target_link_directories.rst
deleted file mode 100644
index 76da94d..0000000
--- a/share/cmake-3.18/Help/command/target_link_directories.rst
+++ /dev/null
@@ -1,55 +0,0 @@
-target_link_directories
------------------------
-
-Add link directories to a target.
-
-.. code-block:: cmake
-
-  target_link_directories(<target> [BEFORE]
-    <INTERFACE|PUBLIC|PRIVATE> [items1...]
-    [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
-
-Specifies the paths in which the linker should search for libraries when
-linking a given target.  Each item can be an absolute or relative path,
-with the latter being interpreted as relative to the current source
-directory.  These items will be added to the link command.
-
-The named ``<target>`` must have been created by a command such as
-:command:`add_executable` or :command:`add_library` and must not be an
-:ref:`ALIAS target <Alias Targets>`.
-
-The ``INTERFACE``, ``PUBLIC`` and ``PRIVATE`` keywords are required to
-specify the scope of the items that follow them.  ``PRIVATE`` and
-``PUBLIC`` items will populate the :prop_tgt:`LINK_DIRECTORIES` property
-of ``<target>``.  ``PUBLIC`` and ``INTERFACE`` items will populate the
-:prop_tgt:`INTERFACE_LINK_DIRECTORIES` property of ``<target>``
-(:ref:`IMPORTED targets <Imported Targets>` only support ``INTERFACE`` items).
-Each item specifies a link directory and will be converted to an absolute
-path if necessary before adding it to the relevant property.  Repeated
-calls for the same ``<target>`` append items in the order called.
-
-If ``BEFORE`` is specified, the content will be prepended to the relevant
-property instead of being appended.
-
-Arguments to ``target_link_directories`` may use "generator expressions"
-with the syntax ``$<...>``. See the :manual:`cmake-generator-expressions(7)`
-manual for available expressions.  See the :manual:`cmake-buildsystem(7)`
-manual for more on defining buildsystem properties.
-
-.. note::
-
-  This command is rarely necessary and should be avoided where there are
-  other choices.  Prefer to pass full absolute paths to libraries where
-  possible, since this ensures the correct library will always be linked.
-  The :command:`find_library` command provides the full path, which can
-  generally be used directly in calls to :command:`target_link_libraries`.
-  Situations where a library search path may be needed include:
-
-  - Project generators like Xcode where the user can switch target
-    architecture at build time, but a full path to a library cannot
-    be used because it only provides one architecture (i.e. it is not
-    a universal binary).
-  - Libraries may themselves have other private library dependencies
-    that expect to be found via ``RPATH`` mechanisms, but some linkers
-    are not able to fully decode those paths (e.g. due to the presence
-    of things like ``$ORIGIN``).
diff --git a/share/cmake-3.18/Help/command/target_link_libraries.rst b/share/cmake-3.18/Help/command/target_link_libraries.rst
deleted file mode 100644
index c2e7e8a..0000000
--- a/share/cmake-3.18/Help/command/target_link_libraries.rst
+++ /dev/null
@@ -1,310 +0,0 @@
-target_link_libraries
----------------------
-
-.. only:: html
-
-   .. contents::
-
-Specify libraries or flags to use when linking a given target and/or
-its dependents.  :ref:`Usage requirements <Target Usage Requirements>`
-from linked library targets will be propagated.  Usage requirements
-of a target's dependencies affect compilation of its own sources.
-
-Overview
-^^^^^^^^
-
-This command has several signatures as detailed in subsections below.
-All of them have the general form
-
-.. code-block:: cmake
-
-  target_link_libraries(<target> ... <item>... ...)
-
-The named ``<target>`` must have been created by a command such as
-:command:`add_executable` or :command:`add_library` and must not be an
-:ref:`ALIAS target <Alias Targets>`.  If policy :policy:`CMP0079` is not
-set to ``NEW`` then the target must have been created in the current
-directory.  Repeated calls for the same ``<target>`` append items in
-the order called.
-
-Each ``<item>`` may be:
-
-* **A library target name**: The generated link line will have the
-  full path to the linkable library file associated with the target.
-  The buildsystem will have a dependency to re-link ``<target>`` if
-  the library file changes.
-
-  The named target must be created by :command:`add_library` within
-  the project or as an :ref:`IMPORTED library <Imported Targets>`.
-  If it is created within the project an ordering dependency will
-  automatically be added in the build system to make sure the named
-  library target is up-to-date before the ``<target>`` links.
-
-  If an imported library has the :prop_tgt:`IMPORTED_NO_SONAME`
-  target property set, CMake may ask the linker to search for
-  the library instead of using the full path
-  (e.g. ``/usr/lib/libfoo.so`` becomes ``-lfoo``).
-
-  The full path to the target's artifact will be quoted/escaped for
-  the shell automatically.
-
-* **A full path to a library file**: The generated link line will
-  normally preserve the full path to the file. The buildsystem will
-  have a dependency to re-link ``<target>`` if the library file changes.
-
-  There are some cases where CMake may ask the linker to search for
-  the library (e.g. ``/usr/lib/libfoo.so`` becomes ``-lfoo``), such
-  as when a shared library is detected to have no ``SONAME`` field.
-  See policy :policy:`CMP0060` for discussion of another case.
-
-  If the library file is in a macOS framework, the ``Headers`` directory
-  of the framework will also be processed as a
-  :ref:`usage requirement <Target Usage Requirements>`.  This has the same
-  effect as passing the framework directory as an include directory.
-
-  On :ref:`Visual Studio Generators` for VS 2010 and above, library files
-  ending in ``.targets`` will be treated as MSBuild targets files and
-  imported into generated project files.  This is not supported by other
-  generators.
-
-  The full path to the library file will be quoted/escaped for
-  the shell automatically.
-
-* **A plain library name**: The generated link line will ask the linker
-  to search for the library (e.g. ``foo`` becomes ``-lfoo`` or ``foo.lib``).
-
-  The library name/flag is treated as a command-line string fragment and
-  will be used with no extra quoting or escaping.
-
-* **A link flag**: Item names starting with ``-``, but not ``-l`` or
-  ``-framework``, are treated as linker flags.  Note that such flags will
-  be treated like any other library link item for purposes of transitive
-  dependencies, so they are generally safe to specify only as private link
-  items that will not propagate to dependents.
-
-  Link flags specified here are inserted into the link command in the same
-  place as the link libraries. This might not be correct, depending on
-  the linker. Use the :prop_tgt:`LINK_OPTIONS` target property or
-  :command:`target_link_options` command to add link
-  flags explicitly. The flags will then be placed at the toolchain-defined
-  flag position in the link command.
-
-  The link flag is treated as a command-line string fragment and
-  will be used with no extra quoting or escaping.
-
-* **A generator expression**: A ``$<...>`` :manual:`generator expression
-  <cmake-generator-expressions(7)>` may evaluate to any of the above
-  items or to a :ref:`semicolon-separated list <CMake Language Lists>` of them.
-  If the ``...`` contains any ``;`` characters, e.g. after evaluation
-  of a ``${list}`` variable, be sure to use an explicitly quoted
-  argument ``"$<...>"`` so that this command receives it as a
-  single ``<item>``.
-
-  Additionally, a generator expression may be used as a fragment of
-  any of the above items, e.g. ``foo$<1:_d>``.
-
-  Note that generator expressions will not be used in OLD handling of
-  policy :policy:`CMP0003` or policy :policy:`CMP0004`.
-
-* A ``debug``, ``optimized``, or ``general`` keyword immediately followed
-  by another ``<item>``.  The item following such a keyword will be used
-  only for the corresponding build configuration.  The ``debug`` keyword
-  corresponds to the ``Debug`` configuration (or to configurations named
-  in the :prop_gbl:`DEBUG_CONFIGURATIONS` global property if it is set).
-  The ``optimized`` keyword corresponds to all other configurations.  The
-  ``general`` keyword corresponds to all configurations, and is purely
-  optional.  Higher granularity may be achieved for per-configuration
-  rules by creating and linking to
-  :ref:`IMPORTED library targets <Imported Targets>`.
-  These keywords are interpreted immediately by this command and therefore
-  have no special meaning when produced by a generator expression.
-
-Items containing ``::``, such as ``Foo::Bar``, are assumed to be
-:ref:`IMPORTED <Imported Targets>` or :ref:`ALIAS <Alias Targets>` library
-target names and will cause an error if no such target exists.
-See policy :policy:`CMP0028`.
-
-See the :manual:`cmake-buildsystem(7)` manual for more on defining
-buildsystem properties.
-
-Libraries for a Target and/or its Dependents
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. code-block:: cmake
-
-  target_link_libraries(<target>
-                        <PRIVATE|PUBLIC|INTERFACE> <item>...
-                       [<PRIVATE|PUBLIC|INTERFACE> <item>...]...)
-
-The ``PUBLIC``, ``PRIVATE`` and ``INTERFACE`` keywords can be used to
-specify both the link dependencies and the link interface in one command.
-Libraries and targets following ``PUBLIC`` are linked to, and are made
-part of the link interface.  Libraries and targets following ``PRIVATE``
-are linked to, but are not made part of the link interface.  Libraries
-following ``INTERFACE`` are appended to the link interface and are not
-used for linking ``<target>``.
-
-Libraries for both a Target and its Dependents
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. code-block:: cmake
-
-  target_link_libraries(<target> <item>...)
-
-Library dependencies are transitive by default with this signature.
-When this target is linked into another target then the libraries
-linked to this target will appear on the link line for the other
-target too.  This transitive "link interface" is stored in the
-:prop_tgt:`INTERFACE_LINK_LIBRARIES` target property and may be overridden
-by setting the property directly.  When :policy:`CMP0022` is not set to
-``NEW``, transitive linking is built in but may be overridden by the
-:prop_tgt:`LINK_INTERFACE_LIBRARIES` property.  Calls to other signatures
-of this command may set the property making any libraries linked
-exclusively by this signature private.
-
-Libraries for a Target and/or its Dependents (Legacy)
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. code-block:: cmake
-
-  target_link_libraries(<target>
-                        <LINK_PRIVATE|LINK_PUBLIC> <lib>...
-                       [<LINK_PRIVATE|LINK_PUBLIC> <lib>...]...)
-
-The ``LINK_PUBLIC`` and ``LINK_PRIVATE`` modes can be used to specify both
-the link dependencies and the link interface in one command.
-
-This signature is for compatibility only.  Prefer the ``PUBLIC`` or
-``PRIVATE`` keywords instead.
-
-Libraries and targets following ``LINK_PUBLIC`` are linked to, and are
-made part of the :prop_tgt:`INTERFACE_LINK_LIBRARIES`.  If policy
-:policy:`CMP0022` is not ``NEW``, they are also made part of the
-:prop_tgt:`LINK_INTERFACE_LIBRARIES`.  Libraries and targets following
-``LINK_PRIVATE`` are linked to, but are not made part of the
-:prop_tgt:`INTERFACE_LINK_LIBRARIES` (or :prop_tgt:`LINK_INTERFACE_LIBRARIES`).
-
-Libraries for Dependents Only (Legacy)
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. code-block:: cmake
-
-  target_link_libraries(<target> LINK_INTERFACE_LIBRARIES <item>...)
-
-The ``LINK_INTERFACE_LIBRARIES`` mode appends the libraries to the
-:prop_tgt:`INTERFACE_LINK_LIBRARIES` target property instead of using them
-for linking.  If policy :policy:`CMP0022` is not ``NEW``, then this mode
-also appends libraries to the :prop_tgt:`LINK_INTERFACE_LIBRARIES` and its
-per-configuration equivalent.
-
-This signature is for compatibility only.  Prefer the ``INTERFACE`` mode
-instead.
-
-Libraries specified as ``debug`` are wrapped in a generator expression to
-correspond to debug builds.  If policy :policy:`CMP0022` is
-not ``NEW``, the libraries are also appended to the
-:prop_tgt:`LINK_INTERFACE_LIBRARIES_DEBUG <LINK_INTERFACE_LIBRARIES_<CONFIG>>`
-property (or to the properties corresponding to configurations listed in
-the :prop_gbl:`DEBUG_CONFIGURATIONS` global property if it is set).
-Libraries specified as ``optimized`` are appended to the
-:prop_tgt:`INTERFACE_LINK_LIBRARIES` property.  If policy :policy:`CMP0022`
-is not ``NEW``, they are also appended to the
-:prop_tgt:`LINK_INTERFACE_LIBRARIES` property.  Libraries specified as
-``general`` (or without any keyword) are treated as if specified for both
-``debug`` and ``optimized``.
-
-Linking Object Libraries
-^^^^^^^^^^^^^^^^^^^^^^^^
-
-:ref:`Object Libraries` may be used as the ``<target>`` (first) argument
-of ``target_link_libraries`` to specify dependencies of their sources
-on other libraries.  For example, the code
-
-.. code-block:: cmake
-
-  add_library(A SHARED a.c)
-  target_compile_definitions(A PUBLIC A)
-
-  add_library(obj OBJECT obj.c)
-  target_compile_definitions(obj PUBLIC OBJ)
-  target_link_libraries(obj PUBLIC A)
-
-compiles ``obj.c`` with ``-DA -DOBJ`` and establishes usage requirements
-for ``obj`` that propagate to its dependents.
-
-Normal libraries and executables may link to :ref:`Object Libraries`
-to get their objects and usage requirements.  Continuing the above
-example, the code
-
-.. code-block:: cmake
-
-  add_library(B SHARED b.c)
-  target_link_libraries(B PUBLIC obj)
-
-compiles ``b.c`` with ``-DA -DOBJ``, creates shared library ``B``
-with object files from ``b.c`` and ``obj.c``, and links ``B`` to ``A``.
-Furthermore, the code
-
-.. code-block:: cmake
-
-  add_executable(main main.c)
-  target_link_libraries(main B)
-
-compiles ``main.c`` with ``-DA -DOBJ`` and links executable ``main``
-to ``B`` and ``A``.  The object library's usage requirements are
-propagated transitively through ``B``, but its object files are not.
-
-:ref:`Object Libraries` may "link" to other object libraries to get
-usage requirements, but since they do not have a link step nothing
-is done with their object files.  Continuing from the above example,
-the code:
-
-.. code-block:: cmake
-
-  add_library(obj2 OBJECT obj2.c)
-  target_link_libraries(obj2 PUBLIC obj)
-
-  add_executable(main2 main2.c)
-  target_link_libraries(main2 obj2)
-
-compiles ``obj2.c`` with ``-DA -DOBJ``, creates executable ``main2``
-with object files from ``main2.c`` and ``obj2.c``, and links ``main2``
-to ``A``.
-
-In other words, when :ref:`Object Libraries` appear in a target's
-:prop_tgt:`INTERFACE_LINK_LIBRARIES` property they will be
-treated as :ref:`Interface Libraries`, but when they appear in
-a target's :prop_tgt:`LINK_LIBRARIES` property their object files
-will be included in the link too.
-
-Cyclic Dependencies of Static Libraries
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The library dependency graph is normally acyclic (a DAG), but in the case
-of mutually-dependent ``STATIC`` libraries CMake allows the graph to
-contain cycles (strongly connected components).  When another target links
-to one of the libraries, CMake repeats the entire connected component.
-For example, the code
-
-.. code-block:: cmake
-
-  add_library(A STATIC a.c)
-  add_library(B STATIC b.c)
-  target_link_libraries(A B)
-  target_link_libraries(B A)
-  add_executable(main main.c)
-  target_link_libraries(main A)
-
-links ``main`` to ``A B A B``.  While one repetition is usually
-sufficient, pathological object file and symbol arrangements can require
-more.  One may handle such cases by using the
-:prop_tgt:`LINK_INTERFACE_MULTIPLICITY` target property or by manually
-repeating the component in the last ``target_link_libraries`` call.
-However, if two archives are really so interdependent they should probably
-be combined into a single archive, perhaps by using :ref:`Object Libraries`.
-
-Creating Relocatable Packages
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. |INTERFACE_PROPERTY_LINK| replace:: :prop_tgt:`INTERFACE_LINK_LIBRARIES`
-.. include:: /include/INTERFACE_LINK_LIBRARIES_WARNING.txt
diff --git a/share/cmake-3.18/Help/command/target_link_options.rst b/share/cmake-3.18/Help/command/target_link_options.rst
deleted file mode 100644
index 89038e3..0000000
--- a/share/cmake-3.18/Help/command/target_link_options.rst
+++ /dev/null
@@ -1,50 +0,0 @@
-target_link_options
--------------------
-
-Add options to the link step for an executable, shared library or module
-library target.
-
-.. code-block:: cmake
-
-  target_link_options(<target> [BEFORE]
-    <INTERFACE|PUBLIC|PRIVATE> [items1...]
-    [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
-
-The named ``<target>`` must have been created by a command such as
-:command:`add_executable` or :command:`add_library` and must not be an
-:ref:`ALIAS target <Alias Targets>`.
-
-This command can be used to add any link options, but alternative commands
-exist to add libraries (:command:`target_link_libraries` or
-:command:`link_libraries`).  See documentation of the
-:prop_dir:`directory <LINK_OPTIONS>` and
-:prop_tgt:`target <LINK_OPTIONS>` ``LINK_OPTIONS`` properties.
-
-.. note::
-
-  This command cannot be used to add options for static library targets,
-  since they do not use a linker.  To add archiver or MSVC librarian flags,
-  see the :prop_tgt:`STATIC_LIBRARY_OPTIONS` target property.
-
-If ``BEFORE`` is specified, the content will be prepended to the property
-instead of being appended.
-
-The ``INTERFACE``, ``PUBLIC`` and ``PRIVATE`` keywords are required to
-specify the scope of the following arguments.  ``PRIVATE`` and ``PUBLIC``
-items will populate the :prop_tgt:`LINK_OPTIONS` property of
-``<target>``.  ``PUBLIC`` and ``INTERFACE`` items will populate the
-:prop_tgt:`INTERFACE_LINK_OPTIONS` property of ``<target>``.
-(:ref:`IMPORTED targets <Imported Targets>` only support ``INTERFACE`` items.)
-The following arguments specify link options.  Repeated calls for the same
-``<target>`` append items in the order called.
-
-Arguments to ``target_link_options`` may use "generator expressions"
-with the syntax ``$<...>``. See the :manual:`cmake-generator-expressions(7)`
-manual for available expressions.  See the :manual:`cmake-buildsystem(7)`
-manual for more on defining buildsystem properties.
-
-.. include:: DEVICE_LINK_OPTIONS.txt
-
-.. include:: OPTIONS_SHELL.txt
-
-.. include:: LINK_OPTIONS_LINKER.txt
diff --git a/share/cmake-3.18/Help/command/target_precompile_headers.rst b/share/cmake-3.18/Help/command/target_precompile_headers.rst
deleted file mode 100644
index d4280b1..0000000
--- a/share/cmake-3.18/Help/command/target_precompile_headers.rst
+++ /dev/null
@@ -1,123 +0,0 @@
-target_precompile_headers
--------------------------
-
-Add a list of header files to precompile.
-
-Precompiling header files can speed up compilation by creating a partially
-processed version of some header files, and then using that version during
-compilations rather than repeatedly parsing the original headers.
-
-Main Form
-^^^^^^^^^
-
-.. code-block:: cmake
-
-  target_precompile_headers(<target>
-    <INTERFACE|PUBLIC|PRIVATE> [header1...]
-    [<INTERFACE|PUBLIC|PRIVATE> [header2...] ...])
-
-The command adds header files to the :prop_tgt:`PRECOMPILE_HEADERS` and/or
-:prop_tgt:`INTERFACE_PRECOMPILE_HEADERS` target properties of ``<target>``.
-The named ``<target>`` must have been created by a command such as
-:command:`add_executable` or :command:`add_library` and must not be an
-:ref:`ALIAS target <Alias Targets>`.
-
-The ``INTERFACE``, ``PUBLIC`` and ``PRIVATE`` keywords are required to
-specify the scope of the following arguments.  ``PRIVATE`` and ``PUBLIC``
-items will populate the :prop_tgt:`PRECOMPILE_HEADERS` property of
-``<target>``.  ``PUBLIC`` and ``INTERFACE`` items will populate the
-:prop_tgt:`INTERFACE_PRECOMPILE_HEADERS` property of ``<target>``
-(:ref:`IMPORTED targets <Imported Targets>` only support ``INTERFACE`` items).
-Repeated calls for the same ``<target>`` will append items in the order called.
-
-Projects should generally avoid using ``PUBLIC`` or ``INTERFACE`` for targets
-that will be :ref:`exported <install(EXPORT)>`, or they should at least use
-the ``$<BUILD_INTERFACE:...>`` generator expression to prevent precompile
-headers from appearing in an installed exported target.  Consumers of a target
-should typically be in control of what precompile headers they use, not have
-precompile headers forced on them by the targets being consumed (since
-precompile headers are not typically usage requirements).  A notable exception
-to this is where an :ref:`interface library <Interface Libraries>` is created
-to define a commonly used set of precompile headers in one place and then other
-targets link to that interface library privately.  In this case, the interface
-library exists specifically to propagate the precompile headers to its
-consumers and the consumer is effectively still in control, since it decides
-whether to link to the interface library or not.
-
-The list of header files is used to generate a header file named
-``cmake_pch.h|xx`` which is used to generate the precompiled header file
-(``.pch``, ``.gch``, ``.pchi``) artifact.  The ``cmake_pch.h|xx`` header
-file will be force included (``-include`` for GCC, ``/FI`` for MSVC) to
-all source files, so sources do not need to have ``#include "pch.h"``.
-
-Header file names specified with angle brackets (e.g. ``<unordered_map>``) or
-explicit double quotes (escaped for the :manual:`cmake-language(7)`,
-e.g. ``[["other_header.h"]]``) will be treated as is, and include directories
-must be available for the compiler to find them.  Other header file names
-(e.g. ``project_header.h``) are interpreted as being relative to the current
-source directory (e.g. :variable:`CMAKE_CURRENT_SOURCE_DIR`) and will be
-included by absolute path.  For example:
-
-.. code-block:: cmake
-
-  target_precompile_headers(myTarget
-    PUBLIC
-      project_header.h
-    PRIVATE
-      [["other_header.h"]]
-      <unordered_map>
-  )
-
-Arguments to ``target_precompile_headers()`` may use "generator expressions"
-with the syntax ``$<...>``.
-See the :manual:`cmake-generator-expressions(7)` manual for available
-expressions.
-The ``$<COMPILE_LANGUAGE:...>`` generator expression is particularly
-useful for specifying a language-specific header to precompile for
-only one language (e.g. ``CXX`` and not ``C``).  In this case, header
-file names that are not explicitly in double quotes or angle brackets
-must be specified by absolute path.  Also, when specifying angle brackets
-inside a generator expression, be sure to encode the closing ``>`` as
-``$<ANGLE-R>``.  For example:
-
-.. code-block:: cmake
-
-  target_precompile_headers(mylib PRIVATE
-    "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/cxx_only.h>"
-    "$<$<COMPILE_LANGUAGE:C>:<stddef.h$<ANGLE-R>>"
-    "$<$<COMPILE_LANGUAGE:CXX>:<cstddef$<ANGLE-R>>"
-  )
-
-
-Reusing Precompile Headers
-^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The command also supports a second signature which can be used to specify that
-one target re-uses a precompiled header file artifact from another target
-instead of generating its own:
-
-.. code-block:: cmake
-
-  target_precompile_headers(<target> REUSE_FROM <other_target>)
-
-This form sets the :prop_tgt:`PRECOMPILE_HEADERS_REUSE_FROM` property to
-``<other_target>`` and adds a dependency such that ``<target>`` will depend
-on ``<other_target>``.  CMake will halt with an error if the
-:prop_tgt:`PRECOMPILE_HEADERS` property of ``<target>`` is already set when
-the ``REUSE_FROM`` form is used.
-
-.. note::
-
-  The ``REUSE_FROM`` form requires the same set of compiler options,
-  compiler flags and compiler definitions for both ``<target>`` and
-  ``<other_target>``.  Some compilers (e.g. GCC) may issue a warning if the
-  precompiled header file cannot be used (``-Winvalid-pch``).
-
-See Also
-^^^^^^^^
-
-To disable precompile headers for specific targets, see the
-:prop_tgt:`DISABLE_PRECOMPILE_HEADERS` target property.
-
-To prevent precompile headers from being used when compiling a specific
-source file, see the :prop_sf:`SKIP_PRECOMPILE_HEADERS` source file property.
diff --git a/share/cmake-3.18/Help/command/target_sources.rst b/share/cmake-3.18/Help/command/target_sources.rst
deleted file mode 100644
index 27e737b..0000000
--- a/share/cmake-3.18/Help/command/target_sources.rst
+++ /dev/null
@@ -1,34 +0,0 @@
-target_sources
---------------
-
-Add sources to a target.
-
-.. code-block:: cmake
-
-  target_sources(<target>
-    <INTERFACE|PUBLIC|PRIVATE> [items1...]
-    [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
-
-Specifies sources to use when compiling a given target.  Relative
-source file paths are interpreted as being relative to the current
-source directory (i.e. :variable:`CMAKE_CURRENT_SOURCE_DIR`).  The
-named ``<target>`` must have been created by a command such as
-:command:`add_executable` or :command:`add_library` and must not be an
-:ref:`ALIAS target <Alias Targets>`.
-
-The ``INTERFACE``, ``PUBLIC`` and ``PRIVATE`` keywords are required to
-specify the scope of the following arguments.  ``PRIVATE`` and ``PUBLIC``
-items will populate the :prop_tgt:`SOURCES` property of
-``<target>``.  ``PUBLIC`` and ``INTERFACE`` items will populate the
-:prop_tgt:`INTERFACE_SOURCES` property of ``<target>``.
-(:ref:`IMPORTED targets <Imported Targets>` only support ``INTERFACE`` items.)
-The following arguments specify sources.  Repeated calls for the same
-``<target>`` append items in the order called.
-
-Arguments to ``target_sources`` may use "generator expressions"
-with the syntax ``$<...>``. See the :manual:`cmake-generator-expressions(7)`
-manual for available expressions.  See the :manual:`cmake-buildsystem(7)`
-manual for more on defining buildsystem properties.
-
-See also the :policy:`CMP0076` policy for older behavior related to the
-handling of relative source file paths.
diff --git a/share/cmake-3.18/Help/command/try_compile.rst b/share/cmake-3.18/Help/command/try_compile.rst
deleted file mode 100644
index 323077a..0000000
--- a/share/cmake-3.18/Help/command/try_compile.rst
+++ /dev/null
@@ -1,192 +0,0 @@
-try_compile
------------
-
-.. only:: html
-
-   .. contents::
-
-Try building some code.
-
-Try Compiling Whole Projects
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. code-block:: cmake
-
-  try_compile(<resultVar> <bindir> <srcdir>
-              <projectName> [<targetName>] [CMAKE_FLAGS <flags>...]
-              [OUTPUT_VARIABLE <var>])
-
-Try building a project.  The success or failure of the ``try_compile``,
-i.e. ``TRUE`` or ``FALSE`` respectively, is returned in ``<resultVar>``.
-
-In this form, ``<srcdir>`` should contain a complete CMake project with a
-``CMakeLists.txt`` file and all sources.  The ``<bindir>`` and ``<srcdir>``
-will not be deleted after this command is run.  Specify ``<targetName>`` to
-build a specific target instead of the ``all`` or ``ALL_BUILD`` target.  See
-below for the meaning of other options.
-
-Try Compiling Source Files
-^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. code-block:: cmake
-
-  try_compile(<resultVar> <bindir> <srcfile|SOURCES srcfile...>
-              [CMAKE_FLAGS <flags>...]
-              [COMPILE_DEFINITIONS <defs>...]
-              [LINK_OPTIONS <options>...]
-              [LINK_LIBRARIES <libs>...]
-              [OUTPUT_VARIABLE <var>]
-              [COPY_FILE <fileName> [COPY_FILE_ERROR <var>]]
-              [<LANG>_STANDARD <std>]
-              [<LANG>_STANDARD_REQUIRED <bool>]
-              [<LANG>_EXTENSIONS <bool>]
-              )
-
-Try building an executable or static library from one or more source files
-(which one is determined by the :variable:`CMAKE_TRY_COMPILE_TARGET_TYPE`
-variable).  The success or failure of the ``try_compile``, i.e. ``TRUE`` or
-``FALSE`` respectively, is returned in ``<resultVar>``.
-
-In this form, one or more source files must be provided.  If
-:variable:`CMAKE_TRY_COMPILE_TARGET_TYPE` is unset or is set to ``EXECUTABLE``,
-the sources must include a definition for ``main`` and CMake will create a
-``CMakeLists.txt`` file to build the source(s) as an executable.
-If :variable:`CMAKE_TRY_COMPILE_TARGET_TYPE` is set to ``STATIC_LIBRARY``,
-a static library will be built instead and no definition for ``main`` is
-required.  For an executable, the generated ``CMakeLists.txt`` file would
-contain something like the following:
-
-.. code-block:: cmake
-
-  add_definitions(<expanded COMPILE_DEFINITIONS from caller>)
-  include_directories(${INCLUDE_DIRECTORIES})
-  link_directories(${LINK_DIRECTORIES})
-  add_executable(cmTryCompileExec <srcfile>...)
-  target_link_options(cmTryCompileExec PRIVATE <LINK_OPTIONS from caller>)
-  target_link_libraries(cmTryCompileExec ${LINK_LIBRARIES})
-
-The options are:
-
-``CMAKE_FLAGS <flags>...``
-  Specify flags of the form ``-DVAR:TYPE=VALUE`` to be passed to
-  the ``cmake`` command-line used to drive the test build.
-  The above example shows how values for variables
-  ``INCLUDE_DIRECTORIES``, ``LINK_DIRECTORIES``, and ``LINK_LIBRARIES``
-  are used.
-
-``COMPILE_DEFINITIONS <defs>...``
-  Specify ``-Ddefinition`` arguments to pass to :command:`add_definitions`
-  in the generated test project.
-
-``COPY_FILE <fileName>``
-  Copy the built executable or static library to the given ``<fileName>``.
-
-``COPY_FILE_ERROR <var>``
-  Use after ``COPY_FILE`` to capture into variable ``<var>`` any error
-  message encountered while trying to copy the file.
-
-``LINK_LIBRARIES <libs>...``
-  Specify libraries to be linked in the generated project.
-  The list of libraries may refer to system libraries and to
-  :ref:`Imported Targets <Imported Targets>` from the calling project.
-
-  If this option is specified, any ``-DLINK_LIBRARIES=...`` value
-  given to the ``CMAKE_FLAGS`` option will be ignored.
-
-``LINK_OPTIONS <options>...``
-  Specify link step options to pass to :command:`target_link_options` or to
-  set the :prop_tgt:`STATIC_LIBRARY_OPTIONS` target property in the generated
-  project, depending on the :variable:`CMAKE_TRY_COMPILE_TARGET_TYPE` variable.
-
-``OUTPUT_VARIABLE <var>``
-  Store the output from the build process in the given variable.
-
-``<LANG>_STANDARD <std>``
-  Specify the :prop_tgt:`C_STANDARD`, :prop_tgt:`CXX_STANDARD`,
-  :prop_tgt:`OBJC_STANDARD`, :prop_tgt:`OBJCXX_STANDARD`,
-  or :prop_tgt:`CUDA_STANDARD` target property of the generated project.
-
-``<LANG>_STANDARD_REQUIRED <bool>``
-  Specify the :prop_tgt:`C_STANDARD_REQUIRED`,
-  :prop_tgt:`CXX_STANDARD_REQUIRED`, :prop_tgt:`OBJC_STANDARD_REQUIRED`,
-  :prop_tgt:`OBJCXX_STANDARD_REQUIRED`,or :prop_tgt:`CUDA_STANDARD_REQUIRED`
-  target property of the generated project.
-
-``<LANG>_EXTENSIONS <bool>``
-  Specify the :prop_tgt:`C_EXTENSIONS`, :prop_tgt:`CXX_EXTENSIONS`,
-  :prop_tgt:`OBJC_EXTENSIONS`, :prop_tgt:`OBJCXX_EXTENSIONS`,
-  or :prop_tgt:`CUDA_EXTENSIONS` target property of the generated project.
-
-In this version all files in ``<bindir>/CMakeFiles/CMakeTmp`` will be
-cleaned automatically.  For debugging, ``--debug-trycompile`` can be
-passed to ``cmake`` to avoid this clean.  However, multiple sequential
-``try_compile`` operations reuse this single output directory.  If you use
-``--debug-trycompile``, you can only debug one ``try_compile`` call at a time.
-The recommended procedure is to protect all ``try_compile`` calls in your
-project by ``if(NOT DEFINED <resultVar>)`` logic, configure with cmake
-all the way through once, then delete the cache entry associated with
-the try_compile call of interest, and then re-run cmake again with
-``--debug-trycompile``.
-
-Other Behavior Settings
-^^^^^^^^^^^^^^^^^^^^^^^
-
-If set, the following variables are passed in to the generated
-try_compile CMakeLists.txt to initialize compile target properties with
-default values:
-
-* :variable:`CMAKE_CUDA_RUNTIME_LIBRARY`
-* :variable:`CMAKE_ENABLE_EXPORTS`
-* :variable:`CMAKE_LINK_SEARCH_START_STATIC`
-* :variable:`CMAKE_LINK_SEARCH_END_STATIC`
-* :variable:`CMAKE_MSVC_RUNTIME_LIBRARY`
-* :variable:`CMAKE_POSITION_INDEPENDENT_CODE`
-
-If :policy:`CMP0056` is set to ``NEW``, then
-:variable:`CMAKE_EXE_LINKER_FLAGS` is passed in as well.
-
-If :policy:`CMP0083` is set to ``NEW``, then in order to obtain correct
-behavior at link time, the ``check_pie_supported()`` command from the
-:module:`CheckPIESupported` module must be called before using the
-:command:`try_compile` command.
-
-The current settings of :policy:`CMP0065` and :policy:`CMP0083` are propagated
-through to the generated test project.
-
-Set the :variable:`CMAKE_TRY_COMPILE_CONFIGURATION` variable to choose
-a build configuration.
-
-Set the :variable:`CMAKE_TRY_COMPILE_TARGET_TYPE` variable to specify
-the type of target used for the source file signature.
-
-Set the :variable:`CMAKE_TRY_COMPILE_PLATFORM_VARIABLES` variable to specify
-variables that must be propagated into the test project.  This variable is
-meant for use only in toolchain files and is only honored by the
-``try_compile()`` command for the source files form, not when given a whole
-project.
-
-If :policy:`CMP0067` is set to ``NEW``, or any of the ``<LANG>_STANDARD``,
-``<LANG>_STANDARD_REQUIRED``, or ``<LANG>_EXTENSIONS`` options are used,
-then the language standard variables are honored:
-
-* :variable:`CMAKE_C_STANDARD`
-* :variable:`CMAKE_C_STANDARD_REQUIRED`
-* :variable:`CMAKE_C_EXTENSIONS`
-* :variable:`CMAKE_CXX_STANDARD`
-* :variable:`CMAKE_CXX_STANDARD_REQUIRED`
-* :variable:`CMAKE_CXX_EXTENSIONS`
-* :variable:`CMAKE_OBJC_STANDARD`
-* :variable:`CMAKE_OBJC_STANDARD_REQUIRED`
-* :variable:`CMAKE_OBJC_EXTENSIONS`
-* :variable:`CMAKE_OBJCXX_STANDARD`
-* :variable:`CMAKE_OBJCXX_STANDARD_REQUIRED`
-* :variable:`CMAKE_OBJCXX_EXTENSIONS`
-* :variable:`CMAKE_CUDA_STANDARD`
-* :variable:`CMAKE_CUDA_STANDARD_REQUIRED`
-* :variable:`CMAKE_CUDA_EXTENSIONS`
-
-Their values are used to set the corresponding target properties in
-the generated project (unless overridden by an explicit option).
-
-For the :generator:`Green Hills MULTI` generator the GHS toolset and target
-system customization cache variables are also propagated into the test project.
diff --git a/share/cmake-3.18/Help/command/try_run.rst b/share/cmake-3.18/Help/command/try_run.rst
deleted file mode 100644
index d401ebe..0000000
--- a/share/cmake-3.18/Help/command/try_run.rst
+++ /dev/null
@@ -1,103 +0,0 @@
-try_run
--------
-
-.. only:: html
-
-   .. contents::
-
-Try compiling and then running some code.
-
-Try Compiling and Running Source Files
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. code-block:: cmake
-
-  try_run(<runResultVar> <compileResultVar>
-          <bindir> <srcfile> [CMAKE_FLAGS <flags>...]
-          [COMPILE_DEFINITIONS <defs>...]
-          [LINK_OPTIONS <options>...]
-          [LINK_LIBRARIES <libs>...]
-          [COMPILE_OUTPUT_VARIABLE <var>]
-          [RUN_OUTPUT_VARIABLE <var>]
-          [OUTPUT_VARIABLE <var>]
-          [ARGS <args>...])
-
-Try compiling a ``<srcfile>``.  Returns ``TRUE`` or ``FALSE`` for success
-or failure in ``<compileResultVar>``.  If the compile succeeded, runs the
-executable and returns its exit code in ``<runResultVar>``.  If the
-executable was built, but failed to run, then ``<runResultVar>`` will be
-set to ``FAILED_TO_RUN``.  See the :command:`try_compile` command for
-information on how the test project is constructed to build the source file.
-
-The options are:
-
-``CMAKE_FLAGS <flags>...``
-  Specify flags of the form ``-DVAR:TYPE=VALUE`` to be passed to
-  the ``cmake`` command-line used to drive the test build.
-  The example in :command:`try_compile` shows how values for variables
-  ``INCLUDE_DIRECTORIES``, ``LINK_DIRECTORIES``, and ``LINK_LIBRARIES``
-  are used.
-
-``COMPILE_DEFINITIONS <defs>...``
-  Specify ``-Ddefinition`` arguments to pass to :command:`add_definitions`
-  in the generated test project.
-
-``COMPILE_OUTPUT_VARIABLE <var>``
-  Report the compile step build output in a given variable.
-
-``LINK_LIBRARIES <libs>...``
-  Specify libraries to be linked in the generated project.
-  The list of libraries may refer to system libraries and to
-  :ref:`Imported Targets <Imported Targets>` from the calling project.
-
-  If this option is specified, any ``-DLINK_LIBRARIES=...`` value
-  given to the ``CMAKE_FLAGS`` option will be ignored.
-
-``LINK_OPTIONS <options>...``
-  Specify link step options to pass to :command:`target_link_options` in the
-  generated project.
-
-``OUTPUT_VARIABLE <var>``
-  Report the compile build output and the output from running the executable
-  in the given variable.  This option exists for legacy reasons.  Prefer
-  ``COMPILE_OUTPUT_VARIABLE`` and ``RUN_OUTPUT_VARIABLE`` instead.
-
-``RUN_OUTPUT_VARIABLE <var>``
-  Report the output from running the executable in a given variable.
-
-Other Behavior Settings
-^^^^^^^^^^^^^^^^^^^^^^^
-
-Set the :variable:`CMAKE_TRY_COMPILE_CONFIGURATION` variable to choose
-a build configuration.
-
-Behavior when Cross Compiling
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-When cross compiling, the executable compiled in the first step
-usually cannot be run on the build host.  The ``try_run`` command checks
-the :variable:`CMAKE_CROSSCOMPILING` variable to detect whether CMake is in
-cross-compiling mode.  If that is the case, it will still try to compile
-the executable, but it will not try to run the executable unless the
-:variable:`CMAKE_CROSSCOMPILING_EMULATOR` variable is set.  Instead it
-will create cache variables which must be filled by the user or by
-presetting them in some CMake script file to the values the executable
-would have produced if it had been run on its actual target platform.
-These cache entries are:
-
-``<runResultVar>``
-  Exit code if the executable were to be run on the target platform.
-
-``<runResultVar>__TRYRUN_OUTPUT``
-  Output from stdout and stderr if the executable were to be run on
-  the target platform.  This is created only if the
-  ``RUN_OUTPUT_VARIABLE`` or ``OUTPUT_VARIABLE`` option was used.
-
-In order to make cross compiling your project easier, use ``try_run``
-only if really required.  If you use ``try_run``, use the
-``RUN_OUTPUT_VARIABLE`` or ``OUTPUT_VARIABLE`` options only if really
-required.  Using them will require that when cross-compiling, the cache
-variables will have to be set manually to the output of the executable.
-You can also "guard" the calls to ``try_run`` with an :command:`if`
-block checking the :variable:`CMAKE_CROSSCOMPILING` variable and
-provide an easy-to-preset alternative for this case.
diff --git a/share/cmake-3.18/Help/command/variable_watch.rst b/share/cmake-3.18/Help/command/variable_watch.rst
deleted file mode 100644
index ce69bcf..0000000
--- a/share/cmake-3.18/Help/command/variable_watch.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-variable_watch
---------------
-
-Watch the CMake variable for change.
-
-.. code-block:: cmake
-
-  variable_watch(<variable> [<command>])
-
-If the specified ``<variable>`` changes, a message will be printed
-to inform about the change.
-
-Additionally, if ``<command>`` is given, this command will be executed.
-The command will receive the following arguments:
-``COMMAND(<variable> <access> <value> <current_list_file> <stack>)``
diff --git a/share/cmake-3.18/Help/cpack_gen/archive.rst b/share/cmake-3.18/Help/cpack_gen/archive.rst
deleted file mode 100644
index 3656aa2..0000000
--- a/share/cmake-3.18/Help/cpack_gen/archive.rst
+++ /dev/null
@@ -1,75 +0,0 @@
-CPack Archive Generator
------------------------
-
-CPack generator for packaging files into an archive, which can have
-any of the following formats:
-
-  - 7Z - 7zip - (.7z)
-  - TBZ2 (.tar.bz2)
-  - TGZ (.tar.gz)
-  - TXZ (.tar.xz)
-  - TZ (.tar.Z)
-  - TZST (.tar.zst)
-  - ZIP (.zip)
-
-When this generator is called from ``CPackSourceConfig.cmake`` (or through
-the ``package_source`` target), then the generated archive will contain all
-files in the project directory, except those specified in
-:variable:`CPACK_SOURCE_IGNORE_FILES`.  The following is one example of
-packaging all source files of a project:
-
-.. code-block:: cmake
-
-  set(CPACK_SOURCE_GENERATOR "TGZ")
-  set(CPACK_SOURCE_IGNORE_FILES
-    \\.git/
-    build/
-    ".*~$"
-  )
-  set(CPACK_VERBATIM_VARIABLES YES)
-  include(CPack)
-
-When this generator is called from ``CPackConfig.cmake`` (or through the
-``package`` target), then the generated archive will contain all files
-that have been installed via CMake's :command:`install` command (and the
-deprecated commands :command:`install_files`, :command:`install_programs`,
-and :command:`install_targets`).
-
-Variables specific to CPack Archive generator
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. variable:: CPACK_ARCHIVE_FILE_NAME
-              CPACK_ARCHIVE_<component>_FILE_NAME
-
-  Package file name without extension. The extension is determined from the
-  archive format (see list above) and automatically appended to the file name.
-  The default is ``<CPACK_PACKAGE_FILE_NAME>[-<component>]``, with spaces
-  replaced by '-'.
-
-.. variable:: CPACK_ARCHIVE_COMPONENT_INSTALL
-
-  Enable component packaging. If enabled (ON), then the archive generator
-  creates  multiple packages. The default is OFF, which means that a single
-  package containing files of all components is generated.
-
-Variables used by CPack Archive generator
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-These variables are used by the Archive generator, but are also available to
-CPack generators which are essentially archives at their core. These include:
-
-  - :cpack_gen:`CPack Cygwin Generator`
-  - :cpack_gen:`CPack FreeBSD Generator`
-
-.. variable:: CPACK_ARCHIVE_THREADS
-
-  The number of threads to use when performing the compression. If set to
-  ``0``, the number of available cores on the machine will be used instead.
-  The default is ``1`` which limits compression to a single thread. Note that
-  not all compression modes support threading in all environments. Currently,
-  only the XZ compression may support it.
-
-.. note::
-
-    Official CMake binaries available on ``cmake.org`` ship with a ``liblzma``
-    that does not support parallel compression.
diff --git a/share/cmake-3.18/Help/cpack_gen/bundle.rst b/share/cmake-3.18/Help/cpack_gen/bundle.rst
deleted file mode 100644
index b16dbda..0000000
--- a/share/cmake-3.18/Help/cpack_gen/bundle.rst
+++ /dev/null
@@ -1,66 +0,0 @@
-CPack Bundle Generator
-----------------------
-
-CPack Bundle generator (macOS) specific options
-
-Variables specific to CPack Bundle generator
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Installers built on macOS using the Bundle generator use the
-aforementioned DragNDrop (``CPACK_DMG_xxx``) variables, plus the following
-Bundle-specific parameters (``CPACK_BUNDLE_xxx``).
-
-.. variable:: CPACK_BUNDLE_NAME
-
- The name of the generated bundle. This appears in the macOS Finder as the
- bundle name. Required.
-
-.. variable:: CPACK_BUNDLE_PLIST
-
- Path to an macOS Property List (``.plist``) file that will be used
- for the generated bundle. This
- assumes that the caller has generated or specified their own ``Info.plist``
- file. Required.
-
-.. variable:: CPACK_BUNDLE_ICON
-
- Path to an macOS icon file that will be used as the icon for the generated
- bundle. This is the icon that appears in the macOS Finder for the bundle, and
- in the macOS dock when the bundle is opened. Required.
-
-.. variable:: CPACK_BUNDLE_STARTUP_COMMAND
-
- Path to a startup script. This is a path to an executable or script that
- will be run whenever an end-user double-clicks the generated bundle in the
- macOS Finder. Optional.
-
-.. variable:: CPACK_BUNDLE_APPLE_CERT_APP
-
- The name of your Apple supplied code signing certificate for the application.
- The name usually takes the form ``Developer ID Application: [Name]`` or
- ``3rd Party Mac Developer Application: [Name]``. If this variable is not set
- the application will not be signed.
-
-.. variable:: CPACK_BUNDLE_APPLE_ENTITLEMENTS
-
- The name of the Property List (``.plist``) file that contains your Apple
- entitlements for sandboxing your application. This file is required
- for submission to the macOS App Store.
-
-.. variable:: CPACK_BUNDLE_APPLE_CODESIGN_FILES
-
- A list of additional files that you wish to be signed. You do not need to
- list the main application folder, or the main executable. You should
- list any frameworks and plugins that are included in your app bundle.
-
-.. variable:: CPACK_BUNDLE_APPLE_CODESIGN_PARAMETER
-
- Additional parameter that will passed to ``codesign``.
- Default value: ``--deep -f``
-
-.. variable:: CPACK_COMMAND_CODESIGN
-
- Path to the ``codesign(1)`` command used to sign applications with an
- Apple cert. This variable can be used to override the automatically
- detected command (or specify its location if the auto-detection fails
- to find it).
diff --git a/share/cmake-3.18/Help/cpack_gen/cygwin.rst b/share/cmake-3.18/Help/cpack_gen/cygwin.rst
deleted file mode 100644
index c65653e..0000000
--- a/share/cmake-3.18/Help/cpack_gen/cygwin.rst
+++ /dev/null
@@ -1,28 +0,0 @@
-CPack Cygwin Generator
-----------------------
-
-Cygwin CPack generator (Cygwin).
-
-Variables affecting the CPack Cygwin generator
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-  - :variable:`CPACK_ARCHIVE_THREADS`
-
-Variables specific to CPack Cygwin generator
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The
-following variable is specific to installers build on and/or for
-Cygwin:
-
-.. variable:: CPACK_CYGWIN_PATCH_NUMBER
-
- The Cygwin patch number.  FIXME: This documentation is incomplete.
-
-.. variable:: CPACK_CYGWIN_PATCH_FILE
-
- The Cygwin patch file.  FIXME: This documentation is incomplete.
-
-.. variable:: CPACK_CYGWIN_BUILD_SCRIPT
-
- The Cygwin build script.  FIXME: This documentation is incomplete.
diff --git a/share/cmake-3.18/Help/cpack_gen/deb.rst b/share/cmake-3.18/Help/cpack_gen/deb.rst
deleted file mode 100644
index bf50c55..0000000
--- a/share/cmake-3.18/Help/cpack_gen/deb.rst
+++ /dev/null
@@ -1,565 +0,0 @@
-CPack DEB Generator
--------------------
-
-The built in (binary) CPack DEB generator (Unix only)
-
-Variables specific to CPack Debian (DEB) generator
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The CPack DEB generator may be used to create DEB package using :module:`CPack`.
-The CPack DEB generator is a :module:`CPack` generator thus it uses the
-``CPACK_XXX`` variables used by :module:`CPack`.
-
-The CPack DEB generator should work on any Linux host but it will produce
-better deb package when Debian specific tools ``dpkg-xxx`` are usable on
-the build system.
-
-The CPack DEB generator has specific features which are controlled by the
-specifics ``CPACK_DEBIAN_XXX`` variables.
-
-``CPACK_DEBIAN_<COMPONENT>_XXXX`` variables may be used in order to have
-**component** specific values.  Note however that ``<COMPONENT>`` refers to
-the **grouping name** written in upper case. It may be either a component name
-or a component GROUP name.
-
-Here are some CPack DEB generator wiki resources that are here for historic
-reasons and are no longer maintained but may still prove useful:
-
- - https://gitlab.kitware.com/cmake/community/-/wikis/doc/cpack/Configuration
- - https://gitlab.kitware.com/cmake/community/-/wikis/doc/cpack/PackageGenerators#deb-unix-only
-
-List of CPack DEB generator specific variables:
-
-.. variable:: CPACK_DEB_COMPONENT_INSTALL
-
- Enable component packaging for CPackDEB
-
- * Mandatory : NO
- * Default   : OFF
-
- If enabled (ON) multiple packages are generated. By default a single package
- containing files of all components is generated.
-
-.. variable:: CPACK_DEBIAN_PACKAGE_NAME
-              CPACK_DEBIAN_<COMPONENT>_PACKAGE_NAME
-
- Set Package control field (variable is automatically transformed to lower
- case).
-
- * Mandatory : YES
- * Default   :
-
-   - :variable:`CPACK_PACKAGE_NAME` for non-component based
-     installations
-   - :variable:`CPACK_DEBIAN_PACKAGE_NAME` suffixed with -<COMPONENT>
-     for component-based installations.
-
- See https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Source
-
-.. variable:: CPACK_DEBIAN_FILE_NAME
-              CPACK_DEBIAN_<COMPONENT>_FILE_NAME
-
- Package file name.
-
- * Mandatory : YES
- * Default   : ``<CPACK_PACKAGE_FILE_NAME>[-<component>].deb``
-
- This may be set to ``DEB-DEFAULT`` to allow the CPack DEB generator to generate
- package file name by itself in deb format::
-
-   <PackageName>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb
-
- Alternatively provided package file name must end
- with either ``.deb`` or ``.ipk`` suffix.
-
- .. note::
-
-   Preferred setting of this variable is ``DEB-DEFAULT`` but for backward
-   compatibility with the CPack DEB generator in CMake prior to version 3.6 this
-   feature is disabled by default.
-
- .. note::
-
-   By using non default filenames duplicate names may occur. Duplicate files
-   get overwritten and it is up to the packager to set the variables in a
-   manner that will prevent such errors.
-
-.. variable:: CPACK_DEBIAN_PACKAGE_EPOCH
-
- The Debian package epoch
-
- * Mandatory : No
- * Default   : -
-
- Optional number that should be incremented when changing versioning schemas
- or fixing mistakes in the version numbers of older packages.
-
-.. variable:: CPACK_DEBIAN_PACKAGE_VERSION
-
- The Debian package version
-
- * Mandatory : YES
- * Default   : :variable:`CPACK_PACKAGE_VERSION`
-
- This variable may contain only alphanumerics (A-Za-z0-9) and the characters
- . + - ~ (full stop, plus, hyphen, tilde) and should start with a digit. If
- :variable:`CPACK_DEBIAN_PACKAGE_RELEASE` is not set then hyphens are not
- allowed.
-
- .. note::
-
-   For backward compatibility with CMake 3.9 and lower a failed test of this
-   variable's content is not a hard error when both
-   :variable:`CPACK_DEBIAN_PACKAGE_RELEASE` and
-   :variable:`CPACK_DEBIAN_PACKAGE_EPOCH` variables are not set. An author
-   warning is reported instead.
-
-.. variable:: CPACK_DEBIAN_PACKAGE_RELEASE
-
- The Debian package release - Debian revision number.
-
- * Mandatory : No
- * Default   : -
-
- This is the numbering of the DEB package itself, i.e. the version of the
- packaging and not the version of the content (see
- :variable:`CPACK_DEBIAN_PACKAGE_VERSION`). One may change the default value
- if the previous packaging was buggy and/or you want to put here a fancy Linux
- distro specific numbering.
-
-.. variable:: CPACK_DEBIAN_PACKAGE_ARCHITECTURE
-              CPACK_DEBIAN_<COMPONENT>_PACKAGE_ARCHITECTURE
-
- The Debian package architecture
-
- * Mandatory : YES
- * Default   : Output of ``dpkg --print-architecture`` (or ``i386``
-   if ``dpkg`` is not found)
-
-.. variable:: CPACK_DEBIAN_PACKAGE_DEPENDS
-              CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS
-
- Sets the Debian dependencies of this package.
-
- * Mandatory : NO
- * Default   :
-
-   - An empty string for non-component based installations
-   - :variable:`CPACK_DEBIAN_PACKAGE_DEPENDS` for component-based
-     installations.
-
- .. note::
-
-   If :variable:`CPACK_DEBIAN_PACKAGE_SHLIBDEPS` or
-   more specifically :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_SHLIBDEPS`
-   is set for this component, the discovered dependencies will be appended
-   to :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS` instead of
-   :variable:`CPACK_DEBIAN_PACKAGE_DEPENDS`. If
-   :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS` is an empty string,
-   only the automatically discovered dependencies will be set for this
-   component.
-
- Example::
-
-   set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.3.1-6), libc6 (< 2.4)")
-
-.. variable:: CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS
-
- Sets inter component dependencies if listed with
- :variable:`CPACK_COMPONENT_<compName>_DEPENDS` variables.
-
- * Mandatory : NO
- * Default   : -
-
-.. variable:: CPACK_DEBIAN_PACKAGE_MAINTAINER
-
- The Debian package maintainer
-
- * Mandatory : YES
- * Default   : ``CPACK_PACKAGE_CONTACT``
-
-.. variable:: CPACK_DEBIAN_PACKAGE_DESCRIPTION
-              CPACK_DEBIAN_<COMPONENT>_DESCRIPTION
-
- The Debian package description
-
- * Mandatory : YES
- * Default   :
-
-   - :variable:`CPACK_DEBIAN_<COMPONENT>_DESCRIPTION` (component
-     based installers only) if set, or :variable:`CPACK_DEBIAN_PACKAGE_DESCRIPTION` if set, or
-   - :variable:`CPACK_COMPONENT_<compName>_DESCRIPTION` (component
-     based installers only) if set, or :variable:`CPACK_PACKAGE_DESCRIPTION` if set, or
-   - content of the file specified in :variable:`CPACK_PACKAGE_DESCRIPTION_FILE` if set
-
- If after that description is not set, :variable:`CPACK_PACKAGE_DESCRIPTION_SUMMARY` going to be
- used if set. Otherwise, :variable:`CPACK_PACKAGE_DESCRIPTION_SUMMARY` will be added as the first
- line of description as defined in `Debian Policy Manual`_.
-
-.. _Debian Policy Manual: https://www.debian.org/doc/debian-policy/ch-controlfields.html#description
-
-.. variable:: CPACK_DEBIAN_PACKAGE_SECTION
-              CPACK_DEBIAN_<COMPONENT>_PACKAGE_SECTION
-
- Set Section control field e.g. admin, devel, doc, ...
-
- * Mandatory : YES
- * Default   : "devel"
-
- See https://www.debian.org/doc/debian-policy/ch-archive.html#s-subsections
-
-.. variable:: CPACK_DEBIAN_ARCHIVE_TYPE
-
- The archive format used for creating the Debian package.
-
- * Mandatory : YES
- * Default   : "gnutar"
-
- Possible value is:
-
- - gnutar
-
- .. note::
-
-   This variable previously defaulted to the ``paxr`` value, but ``dpkg``
-   has never supported that tar format. For backwards compatibility the
-   ``paxr`` value will be mapped to ``gnutar`` and a deprecation message
-   will be emitted.
-
-.. variable:: CPACK_DEBIAN_COMPRESSION_TYPE
-
- The compression used for creating the Debian package.
-
- * Mandatory : YES
- * Default   : "gzip"
-
- Possible values are:
-
- - lzma
- - xz
- - bzip2
- - gzip
-
-.. variable:: CPACK_DEBIAN_PACKAGE_PRIORITY
-              CPACK_DEBIAN_<COMPONENT>_PACKAGE_PRIORITY
-
- Set Priority control field e.g. required, important, standard, optional,
- extra
-
- * Mandatory : YES
- * Default   : "optional"
-
- See https://www.debian.org/doc/debian-policy/ch-archive.html#s-priorities
-
-.. variable:: CPACK_DEBIAN_PACKAGE_HOMEPAGE
-
- The URL of the web site for this package, preferably (when applicable) the
- site from which the original source can be obtained and any additional
- upstream documentation or information may be found.
-
- * Mandatory : NO
- * Default   : :variable:`CMAKE_PROJECT_HOMEPAGE_URL`
-
- .. note::
-
-   The content of this field is a simple URL without any surrounding
-   characters such as <>.
-
-.. variable:: CPACK_DEBIAN_PACKAGE_SHLIBDEPS
-              CPACK_DEBIAN_<COMPONENT>_PACKAGE_SHLIBDEPS
-
- May be set to ON in order to use ``dpkg-shlibdeps`` to generate
- better package dependency list.
-
- * Mandatory : NO
- * Default   :
-
-   - :variable:`CPACK_DEBIAN_PACKAGE_SHLIBDEPS` if set or
-   - OFF
-
- .. note::
-
-   You may need set :variable:`CMAKE_INSTALL_RPATH` to an appropriate value
-   if you use this feature, because if you don't ``dpkg-shlibdeps``
-   may fail to find your own shared libs.
-   See https://gitlab.kitware.com/cmake/community/-/wikis/doc/cmake/RPATH-handling
-
-.. variable:: CPACK_DEBIAN_PACKAGE_DEBUG
-
- May be set when invoking cpack in order to trace debug information
- during the CPack DEB generator run.
-
- * Mandatory : NO
- * Default   : -
-
-.. variable:: CPACK_DEBIAN_PACKAGE_PREDEPENDS
-              CPACK_DEBIAN_<COMPONENT>_PACKAGE_PREDEPENDS
-
- Sets the `Pre-Depends` field of the Debian package.
- Like :variable:`Depends <CPACK_DEBIAN_PACKAGE_DEPENDS>`, except that it
- also forces ``dpkg`` to complete installation of the packages named
- before even starting the installation of the package which declares the
- pre-dependency.
-
- * Mandatory : NO
- * Default   :
-
-   - An empty string for non-component based installations
-   - :variable:`CPACK_DEBIAN_PACKAGE_PREDEPENDS` for component-based
-     installations.
-
- See http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps
-
-.. variable:: CPACK_DEBIAN_PACKAGE_ENHANCES
-              CPACK_DEBIAN_<COMPONENT>_PACKAGE_ENHANCES
-
- Sets the `Enhances` field of the Debian package.
- Similar to :variable:`Suggests <CPACK_DEBIAN_PACKAGE_SUGGESTS>` but works
- in the opposite direction: declares that a package can enhance the
- functionality of another package.
-
- * Mandatory : NO
- * Default   :
-
-   - An empty string for non-component based installations
-   - :variable:`CPACK_DEBIAN_PACKAGE_ENHANCES` for component-based
-     installations.
-
- See http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps
-
-.. variable:: CPACK_DEBIAN_PACKAGE_BREAKS
-              CPACK_DEBIAN_<COMPONENT>_PACKAGE_BREAKS
-
- Sets the `Breaks` field of the Debian package.
- When a binary package (P) declares that it breaks other packages (B),
- ``dpkg`` will not allow the package (P) which declares `Breaks` be
- **unpacked** unless the packages that will be broken (B) are deconfigured
- first.
- As long as the package (P) is configured, the previously deconfigured
- packages (B) cannot be reconfigured again.
-
- * Mandatory : NO
- * Default   :
-
-   - An empty string for non-component based installations
-   - :variable:`CPACK_DEBIAN_PACKAGE_BREAKS` for component-based
-     installations.
-
- See https://www.debian.org/doc/debian-policy/ch-relationships.html#s-breaks
-
-.. variable:: CPACK_DEBIAN_PACKAGE_CONFLICTS
-              CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONFLICTS
-
- Sets the `Conflicts` field of the Debian package.
- When one binary package declares a conflict with another using a `Conflicts`
- field, ``dpkg`` will not allow them to be unpacked on the system at
- the same time.
-
- * Mandatory : NO
- * Default   :
-
-   - An empty string for non-component based installations
-   - :variable:`CPACK_DEBIAN_PACKAGE_CONFLICTS` for component-based
-     installations.
-
- See https://www.debian.org/doc/debian-policy/ch-relationships.html#s-conflicts
-
- .. note::
-
-   This is a stronger restriction than
-   :variable:`Breaks <CPACK_DEBIAN_PACKAGE_BREAKS>`, which prevents the
-   broken package from being configured while the breaking package is in
-   the "Unpacked" state but allows both packages to be unpacked at the same
-   time.
-
-.. variable:: CPACK_DEBIAN_PACKAGE_PROVIDES
-              CPACK_DEBIAN_<COMPONENT>_PACKAGE_PROVIDES
-
- Sets the `Provides` field of the Debian package.
- A virtual package is one which appears in the `Provides` control field of
- another package.
-
- * Mandatory : NO
- * Default   :
-
-   - An empty string for non-component based installations
-   - :variable:`CPACK_DEBIAN_PACKAGE_PROVIDES` for component-based
-     installations.
-
- See https://www.debian.org/doc/debian-policy/ch-relationships.html#s-virtual
-
-.. variable:: CPACK_DEBIAN_PACKAGE_REPLACES
-              CPACK_DEBIAN_<COMPONENT>_PACKAGE_REPLACES
-
- Sets the `Replaces` field of the Debian package.
- Packages can declare in their control file that they should overwrite
- files in certain other packages, or completely replace other packages.
-
- * Mandatory : NO
- * Default   :
-
-   - An empty string for non-component based installations
-   - :variable:`CPACK_DEBIAN_PACKAGE_REPLACES` for component-based
-     installations.
-
- See http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps
-
-.. variable:: CPACK_DEBIAN_PACKAGE_RECOMMENDS
-              CPACK_DEBIAN_<COMPONENT>_PACKAGE_RECOMMENDS
-
- Sets the `Recommends` field of the Debian package.
- Allows packages to declare a strong, but not absolute, dependency on other
- packages.
-
- * Mandatory : NO
- * Default   :
-
-   - An empty string for non-component based installations
-   - :variable:`CPACK_DEBIAN_PACKAGE_RECOMMENDS` for component-based
-     installations.
-
- See http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps
-
-.. variable:: CPACK_DEBIAN_PACKAGE_SUGGESTS
-              CPACK_DEBIAN_<COMPONENT>_PACKAGE_SUGGESTS
-
- Sets the `Suggests` field of the Debian package.
- Allows packages to declare a suggested package install grouping.
-
- * Mandatory : NO
- * Default   :
-
-   - An empty string for non-component based installations
-   - :variable:`CPACK_DEBIAN_PACKAGE_SUGGESTS` for component-based
-     installations.
-
- See http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps
-
-.. variable:: CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS
-
- * Mandatory : NO
- * Default   : OFF
-
- Allows to generate shlibs control file automatically. Compatibility is defined by
- :variable:`CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY` variable value.
-
- .. note::
-
-   Libraries are only considered if they have both library name and version
-   set. This can be done by setting SOVERSION property with
-   :command:`set_target_properties` command.
-
-.. variable:: CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY
-
- Compatibility policy for auto-generated shlibs control file.
-
- * Mandatory : NO
- * Default   : "="
-
- Defines compatibility policy for auto-generated shlibs control file.
- Possible values: "=", ">="
-
- See https://www.debian.org/doc/debian-policy/ch-sharedlibs.html#s-sharedlibs-shlibdeps
-
-.. variable:: CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
-              CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONTROL_EXTRA
-
- This variable allow advanced user to add custom script to the
- control.tar.gz.
- Typical usage is for conffiles, postinst, postrm, prerm.
-
- * Mandatory : NO
- * Default   : -
-
- Usage::
-
-  set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
-      "${CMAKE_CURRENT_SOURCE_DIR}/prerm;${CMAKE_CURRENT_SOURCE_DIR}/postrm")
-
- .. note::
-
-   The original permissions of the files will be used in the final
-   package unless the variable
-   :variable:`CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION` is set.
-   In particular, the scripts should have the proper executable
-   flag prior to the generation of the package.
-
-.. variable:: CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION
-              CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONTROL_STRICT_PERMISSION
-
- This variable indicates if the Debian policy on control files should be
- strictly followed.
-
- * Mandatory : NO
- * Default   : FALSE
-
- Usage::
-
-  set(CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION TRUE)
-
- .. note::
-
-   This overrides the permissions on the original files, following the rules
-   set by Debian policy
-   https://www.debian.org/doc/debian-policy/ch-files.html#s-permissions-owners
-
-.. variable:: CPACK_DEBIAN_PACKAGE_SOURCE
-              CPACK_DEBIAN_<COMPONENT>_PACKAGE_SOURCE
-
- Sets the ``Source`` field of the binary Debian package.
- When the binary package name is not the same as the source package name
- (in particular when several components/binaries are generated from one
- source) the source from which the binary has been generated should be
- indicated with the field ``Source``.
-
- * Mandatory : NO
- * Default   :
-
-   - An empty string for non-component based installations
-   - :variable:`CPACK_DEBIAN_PACKAGE_SOURCE` for component-based
-     installations.
-
- See https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Source
-
- .. note::
-
-   This value is not interpreted. It is possible to pass an optional
-   revision number of the referenced source package as well.
-
-Packaging of debug information
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Dbgsym packages contain debug symbols for debugging packaged binaries.
-
-Dbgsym packaging has its own set of variables:
-
-.. variable:: CPACK_DEBIAN_DEBUGINFO_PACKAGE
-              CPACK_DEBIAN_<component>_DEBUGINFO_PACKAGE
-
- Enable generation of dbgsym .ddeb package(s).
-
- * Mandatory : NO
- * Default   : OFF
-
-.. note::
-
- Binaries must contain debug symbols before packaging so use either ``Debug``
- or ``RelWithDebInfo`` for :variable:`CMAKE_BUILD_TYPE` variable value.
-
-Building Debian packages on Windows
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-To communicate UNIX file permissions from the install stage
-to the CPack DEB generator the "cmake_mode_t" NTFS
-alternate data stream (ADT) is used.
-
-When a filesystem without ADT support is used only owner read/write
-permissions can be preserved.
-
-Reproducible packages
-^^^^^^^^^^^^^^^^^^^^^
-
-The environment variable ``SOURCE_DATE_EPOCH`` may be set to a UNIX
-timestamp, defined as the number of seconds, excluding leap seconds,
-since 01 Jan 1970 00:00:00 UTC.  If set, the CPack DEB generator will
-use its value for timestamps in the package.
diff --git a/share/cmake-3.18/Help/cpack_gen/dmg.rst b/share/cmake-3.18/Help/cpack_gen/dmg.rst
deleted file mode 100644
index cede0f2..0000000
--- a/share/cmake-3.18/Help/cpack_gen/dmg.rst
+++ /dev/null
@@ -1,110 +0,0 @@
-CPack DragNDrop Generator
--------------------------
-
-The DragNDrop CPack generator (macOS) creates a DMG image.
-
-Variables specific to CPack DragNDrop generator
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The following variables are specific to the DragNDrop installers built
-on macOS:
-
-.. variable:: CPACK_DMG_VOLUME_NAME
-
- The volume name of the generated disk image. Defaults to
- CPACK_PACKAGE_FILE_NAME.
-
-.. variable:: CPACK_DMG_FORMAT
-
- The disk image format. Common values are ``UDRO`` (UDIF read-only), ``UDZO`` (UDIF
- zlib-compressed) or ``UDBZ`` (UDIF bzip2-compressed). Refer to ``hdiutil(1)`` for
- more information on other available formats. Defaults to ``UDZO``.
-
-.. variable:: CPACK_DMG_DS_STORE
-
- Path to a custom ``.DS_Store`` file. This ``.DS_Store`` file can be used to
- specify the Finder window position/geometry and layout (such as hidden
- toolbars, placement of the icons etc.). This file has to be generated by
- the Finder (either manually or through AppleScript) using a normal folder
- from which the ``.DS_Store`` file can then be extracted.
-
-.. variable:: CPACK_DMG_DS_STORE_SETUP_SCRIPT
-
- Path to a custom AppleScript file.  This AppleScript is used to generate
- a ``.DS_Store`` file which specifies the Finder window position/geometry and
- layout (such as hidden toolbars, placement of the icons etc.).
- By specifying a custom AppleScript there is no need to use
- ``CPACK_DMG_DS_STORE``, as the ``.DS_Store`` that is generated by the AppleScript
- will be packaged.
-
-.. variable:: CPACK_DMG_BACKGROUND_IMAGE
-
- Path to an image file to be used as the background.  This file will be
- copied to ``.background``/``background.<ext>``, where ``<ext>`` is the original image file
- extension.  The background image is installed into the image before
- ``CPACK_DMG_DS_STORE_SETUP_SCRIPT`` is executed or ``CPACK_DMG_DS_STORE`` is
- installed.  By default no background image is set.
-
-.. variable:: CPACK_DMG_DISABLE_APPLICATIONS_SYMLINK
-
- Default behaviour is to include a symlink to ``/Applications`` in the DMG.
- Set this option to ``ON`` to avoid adding the symlink.
-
-.. variable:: CPACK_DMG_SLA_DIR
-
-  Directory where license and menu files for different languages are stored.
-  Setting this causes CPack to look for a ``<language>.menu.txt`` and
-  ``<language>.license.txt`` or ``<language>.license.rtf`` file for every
-  language defined in ``CPACK_DMG_SLA_LANGUAGES``.  If both this variable and
-  ``CPACK_RESOURCE_FILE_LICENSE`` are set, CPack will only look for the menu
-  files and use the same license file for all languages.  If both
-  ``<language>.license.txt`` and ``<language>.license.rtf`` exist, the ``.txt``
-  file will be used.
-
-.. variable:: CPACK_DMG_SLA_LANGUAGES
-
-  Languages for which a license agreement is provided when mounting the
-  generated DMG. A menu file consists of 9 lines of text. The first line is
-  is the name of the language itself, uppercase, in English (e.g. German).
-  The other lines are translations of the following strings:
-
-  - Agree
-  - Disagree
-  - Print
-  - Save...
-  - You agree to the terms of the License Agreement when you click the
-    "Agree" button.
-  - Software License Agreement
-  - This text cannot be saved. The disk may be full or locked, or the file
-    may be locked.
-  - Unable to print. Make sure you have selected a printer.
-
-  For every language in this list, CPack will try to find files
-  ``<language>.menu.txt`` and ``<language>.license.txt`` in the directory
-  specified by the :variable:`CPACK_DMG_SLA_DIR` variable.
-
-.. variable:: CPACK_DMG_<component>_FILE_NAME
-
- File name when packaging ``<component>`` as its own DMG
- (``CPACK_COMPONENTS_GROUPING`` set to IGNORE).
-
- - Default: ``CPACK_PACKAGE_FILE_NAME-<component>``
-
-.. variable:: CPACK_COMMAND_HDIUTIL
-
- Path to the ``hdiutil(1)`` command used to operate on disk image files on
- macOS. This variable can be used to override the automatically detected
- command (or specify its location if the auto-detection fails to find it).
-
-.. variable:: CPACK_COMMAND_SETFILE
-
- Path to the ``SetFile(1)`` command used to set extended attributes on files and
- directories on macOS. This variable can be used to override the
- automatically detected command (or specify its location if the
- auto-detection fails to find it).
-
-.. variable:: CPACK_COMMAND_REZ
-
- Path to the ``Rez(1)`` command used to compile resources on macOS. This
- variable can be used to override the automatically detected command (or
- specify its location if the auto-detection fails to find it).
diff --git a/share/cmake-3.18/Help/cpack_gen/external.rst b/share/cmake-3.18/Help/cpack_gen/external.rst
deleted file mode 100644
index 406f6be..0000000
--- a/share/cmake-3.18/Help/cpack_gen/external.rst
+++ /dev/null
@@ -1,283 +0,0 @@
-CPack External Generator
-------------------------
-
-CPack provides many generators to create packages for a variety of platforms
-and packaging systems. The intention is for CMake/CPack to be a complete
-end-to-end solution for building and packaging a software project. However, it
-may not always be possible to use CPack for the entire packaging process, due
-to either technical limitations or policies that require the use of certain
-tools. For this reason, CPack provides the "External" generator, which allows
-external packaging software to take advantage of some of the functionality
-provided by CPack, such as component installation and the dependency graph.
-
-Integration with External Packaging Tools
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The CPack External generator generates a ``.json`` file containing the
-CPack internal metadata, which gives external software information
-on how to package the software. External packaging software may itself
-invoke CPack, consume the generated metadata,
-install and package files as required.
-
-Alternatively CPack can invoke an external packaging software
-through an optional custom CMake script in
-:variable:`CPACK_EXTERNAL_PACKAGE_SCRIPT` instead.
-
-Staging of installation files may also optionally be
-taken care of by the generator when enabled through the
-:variable:`CPACK_EXTERNAL_ENABLE_STAGING` variable.
-
-JSON Format
-^^^^^^^^^^^
-
-The JSON metadata file contains a list of CPack components and component groups,
-the various options passed to :command:`cpack_add_component` and
-:command:`cpack_add_component_group`, the dependencies between the components
-and component groups, and various other options passed to CPack.
-
-The JSON's root object will always provide two fields:
-``formatVersionMajor`` and ``formatVersionMinor``, which are always integers
-that describe the output format of the generator. Backwards-compatible changes
-to the output format (for example, adding a new field that didn't exist before)
-cause the minor version to be incremented, and backwards-incompatible changes
-(for example, deleting a field or changing its meaning) cause the major version
-to be incremented and the minor version reset to 0. The format version is
-always of the format ``major.minor``. In other words, it always has exactly two
-parts, separated by a period.
-
-You can request one or more specific versions of the output format as described
-below with :variable:`CPACK_EXTERNAL_REQUESTED_VERSIONS`. The output format will
-have a major version that exactly matches the requested major version, and a
-minor version that is greater than or equal to the requested minor version. If
-no version is requested with :variable:`CPACK_EXTERNAL_REQUESTED_VERSIONS`, the
-latest known major version is used by default. Currently, the only supported
-format is 1.0, which is described below.
-
-Version 1.0
-***********
-
-In addition to the standard format fields, format version 1.0 provides the
-following fields in the root:
-
-``components``
-  The ``components`` field is an object with component names as the keys and
-  objects describing the components as the values. The component objects have
-  the following fields:
-
-  ``name``
-    The name of the component. This is always the same as the key in the
-    ``components`` object.
-
-  ``displayName``
-    The value of the ``DISPLAY_NAME`` field passed to
-    :command:`cpack_add_component`.
-
-  ``description``
-    The value of the ``DESCRIPTION`` field passed to
-    :command:`cpack_add_component`.
-
-  ``isHidden``
-    True if ``HIDDEN`` was passed to :command:`cpack_add_component`, false if
-    it was not.
-
-  ``isRequired``
-    True if ``REQUIRED`` was passed to :command:`cpack_add_component`, false if
-    it was not.
-
-  ``isDisabledByDefault``
-    True if ``DISABLED`` was passed to :command:`cpack_add_component`, false if
-    it was not.
-
-  ``group``
-    Only present if ``GROUP`` was passed to :command:`cpack_add_component`. If
-    so, this field is a string value containing the component's group.
-
-  ``dependencies``
-    An array of components the component depends on. This contains the values
-    in the ``DEPENDS`` argument passed to :command:`cpack_add_component`. If no
-    ``DEPENDS`` argument was passed, this is an empty list.
-
-  ``installationTypes``
-    An array of installation types the component is part of. This contains the
-    values in the ``INSTALL_TYPES`` argument passed to
-    :command:`cpack_add_component`. If no ``INSTALL_TYPES`` argument was
-    passed, this is an empty list.
-
-  ``isDownloaded``
-    True if ``DOWNLOADED`` was passed to :command:`cpack_add_component`, false
-    if it was not.
-
-  ``archiveFile``
-    The name of the archive file passed with the ``ARCHIVE_FILE`` argument to
-    :command:`cpack_add_component`. If no ``ARCHIVE_FILE`` argument was passed,
-    this is an empty string.
-
-``componentGroups``
-  The ``componentGroups`` field is an object with component group names as the
-  keys and objects describing the component groups as the values. The component
-  group objects have the following fields:
-
-  ``name``
-    The name of the component group. This is always the same as the key in the
-    ``componentGroups`` object.
-
-  ``displayName``
-    The value of the ``DISPLAY_NAME`` field passed to
-    :command:`cpack_add_component_group`.
-
-  ``description``
-    The value of the ``DESCRIPTION`` field passed to
-    :command:`cpack_add_component_group`.
-
-  ``parentGroup``
-    Only present if ``PARENT_GROUP`` was passed to
-    :command:`cpack_add_component_group`. If so, this field is a string value
-    containing the component group's parent group.
-
-  ``isExpandedByDefault``
-    True if ``EXPANDED`` was passed to :command:`cpack_add_component_group`,
-    false if it was not.
-
-  ``isBold``
-    True if ``BOLD_TITLE`` was passed to :command:`cpack_add_component_group`,
-    false if it was not.
-
-  ``components``
-    An array of names of components that are direct members of the group
-    (components that have this group as their ``GROUP``). Components of
-    subgroups are not included.
-
-  ``subgroups``
-    An array of names of component groups that are subgroups of the group
-    (groups that have this group as their ``PARENT_GROUP``).
-
-``installationTypes``
-  The ``installationTypes`` field is an object with installation type names as
-  the keys and objects describing the installation types as the values. The
-  installation type objects have the following fields:
-
-  ``name``
-    The name of the installation type. This is always the same as the key in
-    the ``installationTypes`` object.
-
-  ``displayName``
-    The value of the ``DISPLAY_NAME`` field passed to
-    :command:`cpack_add_install_type`.
-
-  ``index``
-    The integer index of the installation type in the list.
-
-``projects``
-  The ``projects`` field is an array of objects describing CMake projects which
-  comprise the CPack project. The values in this field are derived from
-  :variable:`CPACK_INSTALL_CMAKE_PROJECTS`. In most cases, this will be only a
-  single project. The project objects have the following fields:
-
-  ``projectName``
-    The project name passed to :variable:`CPACK_INSTALL_CMAKE_PROJECTS`.
-
-  ``component``
-    The name of the component or component set which comprises the project.
-
-  ``directory``
-    The build directory of the CMake project. This is the directory which
-    contains the ``cmake_install.cmake`` script.
-
-  ``subDirectory``
-    The subdirectory to install the project into inside the CPack package.
-
-``packageName``
-  The package name given in :variable:`CPACK_PACKAGE_NAME`. Only present if
-  this option is set.
-
-``packageVersion``
-  The package version given in :variable:`CPACK_PACKAGE_VERSION`. Only present
-  if this option is set.
-
-``packageDescriptionFile``
-  The package description file given in
-  :variable:`CPACK_PACKAGE_DESCRIPTION_FILE`. Only present if this option is
-  set.
-
-``packageDescriptionSummary``
-  The package description summary given in
-  :variable:`CPACK_PACKAGE_DESCRIPTION_SUMMARY`. Only present if this option is
-  set.
-
-``buildConfig``
-  The build configuration given to CPack with the ``-C`` option. Only present
-  if this option is set.
-
-``defaultDirectoryPermissions``
-  The default directory permissions given in
-  :variable:`CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS`. Only present if this
-  option is set.
-
-``setDestdir``
-  True if :variable:`CPACK_SET_DESTDIR` is true, false if it is not.
-
-``packagingInstallPrefix``
-  The install prefix given in :variable:`CPACK_PACKAGING_INSTALL_PREFIX`. Only
-  present if :variable:`CPACK_SET_DESTDIR` is true.
-
-``stripFiles``
-  True if :variable:`CPACK_STRIP_FILES` is true, false if it is not.
-
-``warnOnAbsoluteInstallDestination``
-  True if :variable:`CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION` is true, false
-  if it is not.
-
-``errorOnAbsoluteInstallDestination``
-  True if :variable:`CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION` is true,
-  false if it is not.
-
-Variables specific to CPack External generator
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. variable:: CPACK_EXTERNAL_REQUESTED_VERSIONS
-
-  This variable is used to request a specific version of the CPack External
-  generator. It is a list of ``major.minor`` values, separated by semicolons.
-
-  If this variable is set to a non-empty value, the CPack External generator
-  will iterate through each item in the list to search for a version that it
-  knows how to generate. Requested versions should be listed in order of
-  descending preference by the client software, as the first matching version
-  in the list will be generated.
-
-  The generator knows how to generate the version if it has a versioned
-  generator whose major version exactly matches the requested major version,
-  and whose minor version is greater than or equal to the requested minor
-  version. For example, if ``CPACK_EXTERNAL_REQUESTED_VERSIONS`` contains 1.0, and
-  the CPack External generator knows how to generate 1.1, it will generate 1.1.
-  If the generator doesn't know how to generate a version in the list, it skips
-  the version and looks at the next one. If it doesn't know how to generate any
-  of the requested versions, an error is thrown.
-
-  If this variable is not set, or is empty, the CPack External generator will
-  generate the highest major and minor version that it knows how to generate.
-
-  If an invalid version is encountered in ``CPACK_EXTERNAL_REQUESTED_VERSIONS`` (one
-  that doesn't match ``major.minor``, where ``major`` and ``minor`` are
-  integers), it is ignored.
-
-.. variable:: CPACK_EXTERNAL_ENABLE_STAGING
-
-  This variable can be set to true to enable optional installation
-  into a temporary staging area which can then be picked up
-  and packaged by an external packaging tool.
-  The top level directory used by CPack for the current packaging
-  task is contained in ``CPACK_TOPLEVEL_DIRECTORY``.
-  It is automatically cleaned up on each run before packaging is initiated
-  and can be used for custom temporary files required by
-  the external packaging tool.
-  It also contains the staging area ``CPACK_TEMPORARY_DIRECTORY``
-  into which CPack performs the installation when staging is enabled.
-
-.. variable:: CPACK_EXTERNAL_PACKAGE_SCRIPT
-
-  This variable can optionally specify the full path to
-  a CMake script file to be run as part of the CPack invocation.
-  It is invoked after (optional) staging took place and may
-  run an external packaging tool. The script has access to
-  the variables defined by the CPack config file.
diff --git a/share/cmake-3.18/Help/cpack_gen/freebsd.rst b/share/cmake-3.18/Help/cpack_gen/freebsd.rst
deleted file mode 100644
index 47a7784..0000000
--- a/share/cmake-3.18/Help/cpack_gen/freebsd.rst
+++ /dev/null
@@ -1,143 +0,0 @@
-CPack FreeBSD Generator
------------------------
-
-The built in (binary) CPack FreeBSD (pkg) generator (Unix only)
-
-Variables affecting the CPack FreeBSD (pkg) generator
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-  - :variable:`CPACK_ARCHIVE_THREADS`
-
-Variables specific to CPack FreeBSD (pkg) generator
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The CPack FreeBSD generator may be used to create pkg(8) packages -- these may
-be used on FreeBSD, DragonflyBSD, NetBSD, OpenBSD, but also on Linux or OSX,
-depending on the installed package-management tools -- using :module:`CPack`.
-
-The CPack FreeBSD generator is a :module:`CPack` generator and uses the
-``CPACK_XXX`` variables used by :module:`CPack`. It tries to re-use packaging
-information that may already be specified for Debian packages for the
-:cpack_gen:`CPack DEB Generator`. It also tries to re-use RPM packaging
-information when Debian does not specify.
-
-The CPack FreeBSD generator should work on any host with libpkg installed. The
-packages it produces are specific to the host architecture and ABI.
-
-The CPack FreeBSD generator sets package-metadata through
-``CPACK_FREEBSD_XXX`` variables. The CPack FreeBSD generator, unlike the
-CPack Deb generator, does not specially support componentized packages; a
-single package is created from all the software artifacts created through
-CMake.
-
-All of the variables can be set specifically for FreeBSD packaging in
-the CPackConfig file or in CMakeLists.txt, but most of them have defaults
-that use general settings (e.g. CMAKE_PROJECT_NAME) or Debian-specific
-variables when those make sense (e.g. the homepage of an upstream project
-is usually unchanged by the flavor of packaging). When there is no Debian
-information to fall back on, but the RPM packaging has it, fall back to
-the RPM information (e.g. package license).
-
-.. variable:: CPACK_FREEBSD_PACKAGE_NAME
-
-  Sets the package name (in the package manifest, but also affects the
-  output filename).
-
-  * Mandatory: YES
-  * Default:
-
-    - :variable:`CPACK_PACKAGE_NAME` (this is always set by CPack itself,
-      based on CMAKE_PROJECT_NAME).
-
-.. variable:: CPACK_FREEBSD_PACKAGE_COMMENT
-
-  Sets the package comment. This is the short description displayed by
-  pkg(8) in standard "pkg info" output.
-
-  * Mandatory: YES
-  * Default:
-
-    - :variable:`CPACK_PACKAGE_DESCRIPTION_SUMMARY` (this is always set
-      by CPack itself, if nothing else sets it explicitly).
-    - :variable:`PROJECT_DESCRIPTION` (this can be set with the DESCRIPTION
-      parameter for :command:`project`).
-
-.. variable:: CPACK_FREEBSD_PACKAGE_DESCRIPTION
-
-  Sets the package description. This is the long description of the package,
-  given by "pkg info" with a specific package as argument.
-
-  * Mandatory: YES
-  * Default:
-
-    - :variable:`CPACK_DEBIAN_PACKAGE_DESCRIPTION` (this may be set already
-      for Debian packaging, so we may as well re-use it).
-
-.. variable:: CPACK_FREEBSD_PACKAGE_WWW
-
-  The URL of the web site for this package, preferably (when applicable) the
-  site from which the original source can be obtained and any additional
-  upstream documentation or information may be found.
-
-  * Mandatory: YES
-  * Default:
-
-   - :variable:`CMAKE_PROJECT_HOMEPAGE_URL`, or if that is not set,
-     :variable:`CPACK_DEBIAN_PACKAGE_HOMEPAGE` (this may be set already
-     for Debian packaging, so we may as well re-use it).
-
-.. variable:: CPACK_FREEBSD_PACKAGE_LICENSE
-
-  The license, or licenses, which apply to this software package. This must
-  be one or more license-identifiers that pkg recognizes as acceptable license
-  identifiers (e.g. "GPLv2").
-
-  * Mandatory: YES
-  * Default:
-
-    - :variable:`CPACK_RPM_PACKAGE_LICENSE`
-
-.. variable:: CPACK_FREEBSD_PACKAGE_LICENSE_LOGIC
-
-  This variable is only of importance if there is more than one license.
-  The default is "single", which is only applicable to a single license.
-  Other acceptable values are determined by pkg -- those are "dual" or "multi" --
-  meaning choice (OR) or simultaneous (AND) application of the licenses.
-
-  * Mandatory: NO
-  * Default: single
-
-.. variable:: CPACK_FREEBSD_PACKAGE_MAINTAINER
-
-  The FreeBSD maintainer (e.g. kde@freebsd.org) of this package.
-
-  * Mandatory: YES
-  * Default: none
-
-.. variable:: CPACK_FREEBSD_PACKAGE_ORIGIN
-
-  The origin (ports label) of this package; for packages built by CPack
-  outside of the ports system this is of less importance. The default
-  puts the package somewhere under misc/, as a stopgap.
-
-  * Mandatory: YES
-  * Default: misc/<package name>
-
-.. variable:: CPACK_FREEBSD_PACKAGE_CATEGORIES
-
-  The ports categories where this package lives (if it were to be built
-  from ports). If none is set a single category is determined based on
-  the package origin.
-
-  * Mandatory: YES
-  * Default: derived from ORIGIN
-
-.. variable:: CPACK_FREEBSD_PACKAGE_DEPS
-
-  A list of package origins that should be added as package dependencies.
-  These are in the form <category>/<packagename>, e.g. x11/libkonq.
-  No version information needs to be provided (this is not included
-  in the manifest).
-
-  * Mandatory: NO
-  * Default: empty
diff --git a/share/cmake-3.18/Help/cpack_gen/ifw.rst b/share/cmake-3.18/Help/cpack_gen/ifw.rst
deleted file mode 100644
index 776bb46..0000000
--- a/share/cmake-3.18/Help/cpack_gen/ifw.rst
+++ /dev/null
@@ -1,347 +0,0 @@
-CPack IFW Generator
--------------------
-
-Configure and run the Qt Installer Framework to generate a Qt installer.
-
-.. only:: html
-
-  .. contents::
-
-Overview
-^^^^^^^^
-
-This :manual:`cpack generator <cpack-generators(7)>` generates
-configuration and meta information for the `Qt Installer Framework
-<http://doc.qt.io/qtinstallerframework/index.html>`_ (QtIFW),
-and runs QtIFW tools to generate a Qt installer.
-
-QtIFW provides tools and utilities to create installers for
-the platforms supported by `Qt <https://www.qt.io>`_: Linux,
-Microsoft Windows, and macOS.
-
-To make use of this generator, QtIFW needs to be installed.
-The :module:`CPackIFW` module looks for the location of the
-QtIFW command-line utilities, and defines several commands to
-control the behavior of this generator.
-
-Variables
-^^^^^^^^^
-
-You can use the following variables to change behavior of CPack ``IFW``
-generator.
-
-Debug
-"""""
-
-.. variable:: CPACK_IFW_VERBOSE
-
- Set to ``ON`` to enable addition debug output.
- By default is ``OFF``.
-
-Package
-"""""""
-
-.. variable:: CPACK_IFW_PACKAGE_TITLE
-
- Name of the installer as displayed on the title bar.
- By default used :variable:`CPACK_PACKAGE_DESCRIPTION_SUMMARY`.
-
-.. variable:: CPACK_IFW_PACKAGE_PUBLISHER
-
- Publisher of the software (as shown in the Windows Control Panel).
- By default used :variable:`CPACK_PACKAGE_VENDOR`.
-
-.. variable:: CPACK_IFW_PRODUCT_URL
-
- URL to a page that contains product information on your web site.
-
-.. variable:: CPACK_IFW_PACKAGE_ICON
-
- Filename for a custom installer icon. The actual file is '.icns' (macOS),
- '.ico' (Windows). No functionality on Unix.
-
-.. variable:: CPACK_IFW_PACKAGE_WINDOW_ICON
-
- Filename for a custom window icon in PNG format for the Installer
- application.
-
-.. variable:: CPACK_IFW_PACKAGE_LOGO
-
- Filename for a logo is used as QWizard::LogoPixmap.
-
-.. variable:: CPACK_IFW_PACKAGE_WATERMARK
-
- Filename for a watermark is used as QWizard::WatermarkPixmap.
-
-.. variable:: CPACK_IFW_PACKAGE_BANNER
-
- Filename for a banner is used as QWizard::BannerPixmap.
-
-.. variable:: CPACK_IFW_PACKAGE_BACKGROUND
-
- Filename for an image used as QWizard::BackgroundPixmap (only used by MacStyle).
-
-.. variable:: CPACK_IFW_PACKAGE_WIZARD_STYLE
-
- Wizard style to be used ("Modern", "Mac", "Aero" or "Classic").
-
-.. variable:: CPACK_IFW_PACKAGE_STYLE_SHEET
-
- Filename for a stylesheet.
-
-.. variable:: CPACK_IFW_PACKAGE_WIZARD_DEFAULT_WIDTH
-
- Default width of the wizard in pixels. Setting a banner image will override this.
-
-.. variable:: CPACK_IFW_PACKAGE_WIZARD_DEFAULT_HEIGHT
-
- Default height of the wizard in pixels. Setting a watermark image will override this.
-
-.. variable:: CPACK_IFW_PACKAGE_TITLE_COLOR
-
- Color of the titles and subtitles (takes an HTML color code, such as "#88FF33").
-
-.. variable:: CPACK_IFW_PACKAGE_START_MENU_DIRECTORY
-
- Name of the default program group for the product in the Windows Start menu.
-
- By default used :variable:`CPACK_IFW_PACKAGE_NAME`.
-
-.. variable:: CPACK_IFW_TARGET_DIRECTORY
-
- Default target directory for installation.
- By default used
- "@ApplicationsDir@/:variable:`CPACK_PACKAGE_INSTALL_DIRECTORY`"
- (variables embedded in '@' are expanded by the
- `QtIFW scripting engine <https://doc.qt.io/qtinstallerframework/scripting.html>`_).
-
- You can use predefined variables.
-
-.. variable:: CPACK_IFW_ADMIN_TARGET_DIRECTORY
-
- Default target directory for installation with administrator rights.
-
- You can use predefined variables.
-
-.. variable:: CPACK_IFW_PACKAGE_GROUP
-
- The group, which will be used to configure the root package
-
-.. variable:: CPACK_IFW_PACKAGE_NAME
-
- The root package name, which will be used if configuration group is not
- specified
-
-.. variable:: CPACK_IFW_PACKAGE_MAINTENANCE_TOOL_NAME
-
- Filename of the generated maintenance tool.
- The platform-specific executable file extension is appended.
-
- By default used QtIFW defaults (``maintenancetool``).
-
-.. variable:: CPACK_IFW_PACKAGE_REMOVE_TARGET_DIR
-
- Set to ``OFF`` if the target directory should not be deleted when uninstalling.
-
- Is ``ON`` by default
-
-.. variable:: CPACK_IFW_PACKAGE_MAINTENANCE_TOOL_INI_FILE
-
- Filename for the configuration of the generated maintenance tool.
-
- By default used QtIFW defaults (``maintenancetool.ini``).
-
-.. variable:: CPACK_IFW_PACKAGE_ALLOW_NON_ASCII_CHARACTERS
-
- Set to ``ON`` if the installation path can contain non-ASCII characters.
-
- Is ``ON`` for QtIFW less 2.0 tools.
-
-.. variable:: CPACK_IFW_PACKAGE_ALLOW_SPACE_IN_PATH
-
- Set to ``OFF`` if the installation path cannot contain space characters.
-
- Is ``ON`` for QtIFW less 2.0 tools.
-
-.. variable:: CPACK_IFW_PACKAGE_CONTROL_SCRIPT
-
- Filename for a custom installer control script.
-
-.. variable:: CPACK_IFW_PACKAGE_RESOURCES
-
- List of additional resources ('.qrc' files) to include in the installer
- binary.
-
- You can use :command:`cpack_ifw_add_package_resources` command to resolve
- relative paths.
-
-.. variable:: CPACK_IFW_PACKAGE_FILE_EXTENSION
-
- The target binary extension.
-
- On Linux, the name of the target binary is automatically extended with
- '.run', if you do not specify the extension.
-
- On Windows, the target is created as an application with the extension
- '.exe', which is automatically added, if not supplied.
-
- On Mac, the target is created as an DMG disk image with the extension
- '.dmg', which is automatically added, if not supplied.
-
-.. variable:: CPACK_IFW_REPOSITORIES_ALL
-
- The list of remote repositories.
-
- The default value of this variable is computed by CPack and contains
- all repositories added with command :command:`cpack_ifw_add_repository`
- or updated with command :command:`cpack_ifw_update_repository`.
-
-.. variable:: CPACK_IFW_DOWNLOAD_ALL
-
- If this is ``ON`` all components will be downloaded.
- By default is ``OFF`` or used value
- from ``CPACK_DOWNLOAD_ALL`` if set
-
-Components
-""""""""""
-
-.. variable:: CPACK_IFW_RESOLVE_DUPLICATE_NAMES
-
- Resolve duplicate names when installing components with groups.
-
-.. variable:: CPACK_IFW_PACKAGES_DIRECTORIES
-
- Additional prepared packages dirs that will be used to resolve
- dependent components.
-
-.. variable:: CPACK_IFW_REPOSITORIES_DIRECTORIES
-
- Additional prepared repository dirs that will be used to resolve and
- repack dependent components. This feature available only
- since QtIFW 3.1.
-
-QtIFW Tools
-"""""""""""
-
-.. variable:: CPACK_IFW_FRAMEWORK_VERSION
-
- The version of used QtIFW tools.
-
-The following variables provide the locations of the QtIFW
-command-line tools as discovered by the module :module:`CPackIFW`.
-These variables are cached, and may be configured if needed.
-
-.. variable:: CPACK_IFW_BINARYCREATOR_EXECUTABLE
-
- The path to ``binarycreator``.
-
-.. variable:: CPACK_IFW_REPOGEN_EXECUTABLE
-
- The path to ``repogen``.
-
-.. variable:: CPACK_IFW_INSTALLERBASE_EXECUTABLE
-
- The path to ``installerbase``.
-
-.. variable:: CPACK_IFW_DEVTOOL_EXECUTABLE
-
- The path to ``devtool``.
-
-Hints for Finding QtIFW
-"""""""""""""""""""""""
-
-Generally, the CPack ``IFW`` generator automatically finds QtIFW tools,
-but if you don't use a default path for installation of the QtIFW tools,
-the path may be specified in either a CMake or an environment variable:
-
-.. variable:: CPACK_IFW_ROOT
-
- An CMake variable which specifies the location of the QtIFW tool suite.
-
- The variable will be cached in the ``CPackConfig.cmake`` file and used at
- CPack runtime.
-
-.. variable:: QTIFWDIR
-
- An environment variable which specifies the location of the QtIFW tool
- suite.
-
-.. note::
-  The specified path should not contain "bin" at the end
-  (for example: "D:\\DevTools\\QtIFW2.0.5").
-
-The :variable:`CPACK_IFW_ROOT` variable has a higher priority and overrides
-the value of the :variable:`QTIFWDIR` variable.
-
-Other Settings
-^^^^^^^^^^^^^^
-
-Online installer
-""""""""""""""""
-
-By default, this generator generates an *offline installer*. This means that
-that all packaged files are fully contained in the installer executable.
-
-In contrast, an *online installer* will download some or all components from
-a remote server.
-
-The ``DOWNLOADED`` option in the :command:`cpack_add_component` command
-specifies that a component is to be downloaded. Alternatively, the ``ALL``
-option in the :command:`cpack_configure_downloads` command specifies that
-`all` components are to be be downloaded.
-
-The :command:`cpack_ifw_add_repository` command and the
-:variable:`CPACK_IFW_DOWNLOAD_ALL` variable allow for more specific
-configuration.
-
-When there are online components, CPack will write them to archive files.
-The help page of the :module:`CPackComponent` module, especially the section
-on the :command:`cpack_configure_downloads` function, explains how to make
-these files accessible from a download URL.
-
-Internationalization
-""""""""""""""""""""
-
-Some variables and command arguments support internationalization via
-CMake script. This is an optional feature.
-
-Installers created by QtIFW tools have built-in support for
-internationalization and many phrases are localized to many languages,
-but this does not apply to the description of the your components and groups
-that will be distributed.
-
-Localization of the description of your components and groups is useful for
-users of your installers.
-
-A localized variable or argument can contain a single default value, and a
-set of pairs the name of the locale and the localized value.
-
-For example:
-
-.. code-block:: cmake
-
-   set(LOCALIZABLE_VARIABLE "Default value"
-     en "English value"
-     en_US "American value"
-     en_GB "Great Britain value"
-     )
-
-See Also
-^^^^^^^^
-
-Qt Installer Framework Manual:
-
-* Index page:
-  http://doc.qt.io/qtinstallerframework/index.html
-
-* Component Scripting:
-  http://doc.qt.io/qtinstallerframework/scripting.html
-
-* Predefined Variables:
-  http://doc.qt.io/qtinstallerframework/scripting.html#predefined-variables
-
-* Promoting Updates:
-  http://doc.qt.io/qtinstallerframework/ifw-updates.html
-
-Download Qt Installer Framework for your platform from Qt site:
- http://download.qt.io/official_releases/qt-installer-framework
diff --git a/share/cmake-3.18/Help/cpack_gen/nsis.rst b/share/cmake-3.18/Help/cpack_gen/nsis.rst
deleted file mode 100644
index 0dd876e..0000000
--- a/share/cmake-3.18/Help/cpack_gen/nsis.rst
+++ /dev/null
@@ -1,161 +0,0 @@
-CPack NSIS Generator
---------------------
-
-CPack Nullsoft Scriptable Install System (NSIS) generator specific options.
-
-The NSIS generator requires NSIS 3.0 or newer.
-
-Variables specific to CPack NSIS generator
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The following variables are specific to the graphical installers built
-on Windows Nullsoft Scriptable Install System.
-
-.. variable:: CPACK_NSIS_INSTALL_ROOT
-
- The default installation directory presented to the end user by the NSIS
- installer is under this root dir. The full directory presented to the end
- user is: ``${CPACK_NSIS_INSTALL_ROOT}/${CPACK_PACKAGE_INSTALL_DIRECTORY}``
-
-.. variable:: CPACK_NSIS_MUI_ICON
-
- An icon filename.  The name of a ``*.ico`` file used as the main icon for the
- generated install program.
-
-.. variable:: CPACK_NSIS_MUI_UNIICON
-
- An icon filename.  The name of a ``*.ico`` file used as the main icon for the
- generated uninstall program.
-
-.. variable:: CPACK_NSIS_INSTALLER_MUI_ICON_CODE
-
- undocumented.
-
-.. variable:: CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP
-
- The filename of a bitmap to use as the NSIS ``MUI_WELCOMEFINISHPAGE_BITMAP``.
-
-.. variable:: CPACK_NSIS_MUI_UNWELCOMEFINISHPAGE_BITMAP
-
- The filename of a bitmap to use as the NSIS ``MUI_UNWELCOMEFINISHPAGE_BITMAP``.
-
-.. variable:: CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS
-
- Extra NSIS commands that will be added to the beginning of the install
- Section, before your install tree is available on the target system.
-
-.. variable:: CPACK_NSIS_EXTRA_INSTALL_COMMANDS
-
- Extra NSIS commands that will be added to the end of the install Section,
- after your install tree is available on the target system.
-
-.. variable:: CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS
-
- Extra NSIS commands that will be added to the uninstall Section, before
- your install tree is removed from the target system.
-
-.. variable:: CPACK_NSIS_COMPRESSOR
-
- The arguments that will be passed to the NSIS `SetCompressor` command.
-
-.. variable:: CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL
-
- Ask about uninstalling previous versions first.  If this is set to ``ON``,
- then an installer will look for previous installed versions and if one is
- found, ask the user whether to uninstall it before proceeding with the
- install.
-
-.. variable:: CPACK_NSIS_MODIFY_PATH
-
- Modify ``PATH`` toggle.  If this is set to ``ON``, then an extra page will appear
- in the installer that will allow the user to choose whether the program
- directory should be added to the system ``PATH`` variable.
-
-.. variable:: CPACK_NSIS_DISPLAY_NAME
-
- The display name string that appears in the Windows `Apps & features`
- in `Control Panel`
-
-.. variable:: CPACK_NSIS_PACKAGE_NAME
-
- The title displayed at the top of the installer.
-
-.. variable:: CPACK_NSIS_INSTALLED_ICON_NAME
-
- A path to the executable that contains the installer icon.
-
-.. variable:: CPACK_NSIS_HELP_LINK
-
- URL to a web site providing assistance in installing your application.
-
-.. variable:: CPACK_NSIS_URL_INFO_ABOUT
-
- URL to a web site providing more information about your application.
-
-.. variable:: CPACK_NSIS_CONTACT
-
- Contact information for questions and comments about the installation
- process.
-
-.. variable:: CPACK_NSIS_<compName>_INSTALL_DIRECTORY
-
- Custom install directory for the specified component ``<compName>`` instead
- of ``$INSTDIR``.
-
-.. variable:: CPACK_NSIS_CREATE_ICONS_EXTRA
-
- Additional NSIS commands for creating `Start Menu` shortcuts.
-
-.. variable:: CPACK_NSIS_DELETE_ICONS_EXTRA
-
- Additional NSIS commands to uninstall `Start Menu` shortcuts.
-
-.. variable:: CPACK_NSIS_EXECUTABLES_DIRECTORY
-
- Creating NSIS `Start Menu` links assumes that they are in ``bin`` unless this
- variable is set.  For example, you would set this to ``exec`` if your
- executables are in an exec directory.
-
-.. variable:: CPACK_NSIS_MUI_FINISHPAGE_RUN
-
- Specify an executable to add an option to run on the finish page of the
- NSIS installer.
-
-.. variable:: CPACK_NSIS_MENU_LINKS
-
- Specify links in ``[application]`` menu.  This should contain a list of pair
- ``link`` ``link name``. The link may be a URL or a path relative to
- installation prefix.  Like::
-
-  set(CPACK_NSIS_MENU_LINKS
-      "doc/cmake-@CMake_VERSION_MAJOR@.@CMake_VERSION_MINOR@/cmake.html"
-      "CMake Help" "https://cmake.org" "CMake Web Site")
-
-.. variable:: CPACK_NSIS_UNINSTALL_NAME
-
- Specify the name of the program to uninstall the version.
- Default is ``Uninstall``.
-
-.. variable:: CPACK_NSIS_WELCOME_TITLE
-
-  The title to display on the top of the page for the welcome page.
-
-.. variable:: CPACK_NSIS_WELCOME_TITLE_3LINES
-
- Display the title in the welcome page on 3 lines instead of 2.
-
-.. variable:: CPACK_NSIS_FINISH_TITLE
-
- The title to display on the top of the page for the finish page.
-
-.. variable:: CPACK_NSIS_FINISH_TITLE_3LINES
-
- Display the title in the finish page on 3 lines instead of 2.
-
-.. variable:: CPACK_NSIS_MUI_HEADERIMAGE
-
- The image to display on the header of installers pages.
-
-.. variable:: CPACK_NSIS_MANIFEST_DPI_AWARE
-
- If set, declares that the installer is DPI-aware.
diff --git a/share/cmake-3.18/Help/cpack_gen/nuget.rst b/share/cmake-3.18/Help/cpack_gen/nuget.rst
deleted file mode 100644
index f8aa626..0000000
--- a/share/cmake-3.18/Help/cpack_gen/nuget.rst
+++ /dev/null
@@ -1,189 +0,0 @@
-CPack NuGet Generator
----------------------
-
-When build a NuGet package there is no direct way to control an output
-filename due a lack of the corresponding CLI option of NuGet, so there
-is no ``CPACK_NUGET_PACKAGE_FILENAME`` variable. To form the output filename
-NuGet uses the package name and the version according to its built-in rules.
-
-Also, be aware that including a top level directory
-(``CPACK_INCLUDE_TOPLEVEL_DIRECTORY``) is ignored by this generator.
-
-
-Variables specific to CPack NuGet generator
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The CPack NuGet generator may be used to create NuGet packages using
-:module:`CPack`. The CPack NuGet generator is a :module:`CPack` generator thus
-it uses the ``CPACK_XXX`` variables used by :module:`CPack`.
-
-The CPack NuGet generator has specific features which are controlled by the
-specifics ``CPACK_NUGET_XXX`` variables. In the "one per group" mode
-(see :variable:`CPACK_COMPONENTS_GROUPING`), ``<compName>`` placeholder
-in the variables below would contain a group name (uppercased and turned into
-a "C" identifier).
-
-List of CPack NuGet generator specific variables:
-
-.. variable:: CPACK_NUGET_COMPONENT_INSTALL
-
- Enable component packaging for CPack NuGet generator
-
- * Mandatory : NO
- * Default   : OFF
-
-.. variable:: CPACK_NUGET_PACKAGE_NAME
-              CPACK_NUGET_<compName>_PACKAGE_NAME
-
- The NUGET package name.
-
- * Mandatory : YES
- * Default   : :variable:`CPACK_PACKAGE_NAME`
-
-.. variable:: CPACK_NUGET_PACKAGE_VERSION
-              CPACK_NUGET_<compName>_PACKAGE_VERSION
-
- The NuGet package version.
-
- * Mandatory : YES
- * Default   : :variable:`CPACK_PACKAGE_VERSION`
-
-.. variable:: CPACK_NUGET_PACKAGE_DESCRIPTION
-              CPACK_NUGET_<compName>_PACKAGE_DESCRIPTION
-
- A long description of the package for UI display.
-
- * Mandatory : YES
- * Default   :
-    - :variable:`CPACK_COMPONENT_<compName>_DESCRIPTION`,
-    - ``CPACK_COMPONENT_GROUP_<groupName>_DESCRIPTION``,
-    - :variable:`CPACK_PACKAGE_DESCRIPTION`
-
-.. variable:: CPACK_NUGET_PACKAGE_AUTHORS
-              CPACK_NUGET_<compName>_PACKAGE_AUTHORS
-
- A comma-separated list of packages authors, matching the profile names
- on nuget.org_. These are displayed in the NuGet Gallery on
- nuget.org_ and are used to cross-reference packages by the same
- authors.
-
- * Mandatory : YES
- * Default   : :variable:`CPACK_PACKAGE_VENDOR`
-
-.. variable:: CPACK_NUGET_PACKAGE_TITLE
-              CPACK_NUGET_<compName>_PACKAGE_TITLE
-
- A human-friendly title of the package, typically used in UI displays
- as on nuget.org_ and the Package Manager in Visual Studio. If not
- specified, the package ID is used.
-
- * Mandatory : NO
- * Default   :
-    - :variable:`CPACK_COMPONENT_<compName>_DISPLAY_NAME`,
-    - ``CPACK_COMPONENT_GROUP_<groupName>_DISPLAY_NAME``
-
-.. variable:: CPACK_NUGET_PACKAGE_OWNERS
-              CPACK_NUGET_<compName>_PACKAGE_OWNERS
-
- A comma-separated list of the package creators using profile names
- on nuget.org_. This is often the same list as in authors,
- and is ignored when uploading the package to nuget.org_.
-
- * Mandatory : NO
- * Default   : -
-
-.. variable:: CPACK_NUGET_PACKAGE_HOMEPAGE_URL
-              CPACK_NUGET_<compName>_PACKAGE_HOMEPAGE_URL
-
- A URL for the package's home page, often shown in UI displays as well
- as nuget.org_.
-
- * Mandatory : NO
- * Default   : :variable:`CPACK_PACKAGE_HOMEPAGE_URL`
-
-.. variable:: CPACK_NUGET_PACKAGE_LICENSEURL
-              CPACK_NUGET_<compName>_PACKAGE_LICENSEURL
-
- A URL for the package's license, often shown in UI displays as well
- as nuget.org_.
-
- * Mandatory : NO
- * Default   : -
-
-.. variable:: CPACK_NUGET_PACKAGE_ICONURL
-              CPACK_NUGET_<compName>_PACKAGE_ICONURL
-
- A URL for a 64x64 image with transparency background to use as the
- icon for the package in UI display.
-
- * Mandatory : NO
- * Default   : -
-
-.. variable:: CPACK_NUGET_PACKAGE_DESCRIPTION_SUMMARY
-              CPACK_NUGET_<compName>_PACKAGE_DESCRIPTION_SUMMARY
-
- A short description of the package for UI display. If omitted, a
- truncated version of description is used.
-
- * Mandatory : NO
- * Default   : :variable:`CPACK_PACKAGE_DESCRIPTION_SUMMARY`
-
-.. variable:: CPACK_NUGET_PACKAGE_RELEASE_NOTES
-              CPACK_NUGET_<compName>_PACKAGE_RELEASE_NOTES
-
- A description of the changes made in this release of the package,
- often used in UI like the Updates tab of the Visual Studio Package
- Manager in place of the package description.
-
- * Mandatory : NO
- * Default   : -
-
-.. variable:: CPACK_NUGET_PACKAGE_COPYRIGHT
-              CPACK_NUGET_<compName>_PACKAGE_COPYRIGHT
-
- Copyright details for the package.
-
- * Mandatory : NO
- * Default   : -
-
-.. variable:: CPACK_NUGET_PACKAGE_TAGS
-              CPACK_NUGET_<compName>_PACKAGE_TAGS
-
- A space-delimited list of tags and keywords that describe the
- package and aid discoverability of packages through search and
- filtering.
-
- * Mandatory : NO
- * Default   : -
-
-.. variable:: CPACK_NUGET_PACKAGE_DEPENDENCIES
-              CPACK_NUGET_<compName>_PACKAGE_DEPENDENCIES
-
- A list of package dependencies.
-
- * Mandatory : NO
- * Default   : -
-
-.. variable:: CPACK_NUGET_PACKAGE_DEPENDENCIES_<dependency>_VERSION
-              CPACK_NUGET_<compName>_PACKAGE_DEPENDENCIES_<dependency>_VERSION
-
- A `version specification`_ for the particular dependency, where
- ``<dependency>`` is an item of the dependency list (see above)
- transformed with ``MAKE_C_IDENTIFIER`` function of :command:`string`
- command.
-
- * Mandatory : NO
- * Default   : -
-
-.. variable:: CPACK_NUGET_PACKAGE_DEBUG
-
- Enable debug messages while executing CPack NuGet generator.
-
- * Mandatory : NO
- * Default   : OFF
-
-
-.. _nuget.org: http://nuget.org
-.. _version specification: https://docs.microsoft.com/en-us/nuget/reference/package-versioning#version-ranges-and-wildcards
-
-.. NuGet spec docs https://docs.microsoft.com/en-us/nuget/reference/nuspec
diff --git a/share/cmake-3.18/Help/cpack_gen/packagemaker.rst b/share/cmake-3.18/Help/cpack_gen/packagemaker.rst
deleted file mode 100644
index c2a450e..0000000
--- a/share/cmake-3.18/Help/cpack_gen/packagemaker.rst
+++ /dev/null
@@ -1,79 +0,0 @@
-CPack PackageMaker Generator
-----------------------------
-
-PackageMaker CPack generator (macOS).
-
-.. deprecated:: 3.17
-
-  Xcode no longer distributes the PackageMaker tools.
-  This CPack generator will be removed in a future version of CPack.
-
-Variables specific to CPack PackageMaker generator
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The following variable is specific to installers built on Mac
-macOS using PackageMaker:
-
-.. variable:: CPACK_OSX_PACKAGE_VERSION
-
- The version of macOS that the resulting PackageMaker archive should be
- compatible with. Different versions of macOS support different
- features. For example, CPack can only build component-based installers for
- macOS 10.4 or newer, and can only build installers that download
- components on-the-fly for macOS 10.5 or newer. If left blank, this value
- will be set to the minimum version of macOS that supports the requested
- features. Set this variable to some value (e.g., 10.4) only if you want to
- guarantee that your installer will work on that version of macOS, and
- don't mind missing extra features available in the installer shipping with
- later versions of macOS.
-
-.. variable:: CPACK_PACKAGEMAKER_BACKGROUND
-
- Adds a background to Distribtion XML if specified. The value contains the
- path to image in ``Resources`` directory.
-
-.. variable:: CPACK_PACKAGEMAKER_BACKGROUND_ALIGNMENT
-
- Adds an ``alignment`` attribute to the background in Distribution XML.
- Refer to Apple documentation for valid values.
-
-.. variable:: CPACK_PACKAGEMAKER_BACKGROUND_SCALING
-
- Adds a ``scaling`` attribute to the background in Distribution XML.
- Refer to Apple documentation for valid values.
-
-.. variable:: CPACK_PACKAGEMAKER_BACKGROUND_MIME_TYPE
-
- Adds a ``mime-type`` attribute to the background in Distribution XML.
- The option contains MIME type of an image.
-
-.. variable:: CPACK_PACKAGEMAKER_BACKGROUND_UTI
-
- Adds an ``uti`` attribute to the background in Distribution XML.
- The option contains UTI type of an image.
-
-.. variable:: CPACK_PACKAGEMAKER_BACKGROUND_DARKAQUA
-
- Adds a background for the Dark Aqua theme to Distribution XML if
- specified. The value contains the path to image in ``Resources``
- directory.
-
-.. variable:: CPACK_PACKAGEMAKER_BACKGROUND_DARKAQUA_ALIGNMENT
-
- Does the same as :variable:`CPACK_PACKAGEMAKER_BACKGROUND_ALIGNMENT` option,
- but for the dark theme.
-
-.. variable:: CPACK_PACKAGEMAKER_BACKGROUND_DARKAQUA_SCALING
-
- Does the same as :variable:`CPACK_PACKAGEMAKER_BACKGROUND_SCALING` option,
- but for the dark theme.
-
-.. variable:: CPACK_PACKAGEMAKER_BACKGROUND_DARKAQUA_MIME_TYPE
-
- Does the same as :variable:`CPACK_PACKAGEMAKER_BACKGROUND_MIME_TYPE` option,
- but for the dark theme.
-
-.. variable:: CPACK_PACKAGEMAKER_BACKGROUND_DARKAQUA_UTI
-
- Does the same as :variable:`CPACK_PACKAGEMAKER_BACKGROUND_UTI` option,
- but for the dark theme.
diff --git a/share/cmake-3.18/Help/cpack_gen/productbuild.rst b/share/cmake-3.18/Help/cpack_gen/productbuild.rst
deleted file mode 100644
index 82b79ae..0000000
--- a/share/cmake-3.18/Help/cpack_gen/productbuild.rst
+++ /dev/null
@@ -1,118 +0,0 @@
-CPack productbuild Generator
-----------------------------
-
-productbuild CPack generator (macOS).
-
-Variables specific to CPack productbuild generator
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The following variable is specific to installers built on Mac
-macOS using ProductBuild:
-
-.. variable:: CPACK_COMMAND_PRODUCTBUILD
-
- Path to the ``productbuild(1)`` command used to generate a product archive for
- the macOS Installer or Mac App Store.  This variable can be used to override
- the automatically detected command (or specify its location if the
- auto-detection fails to find it).
-
-.. variable:: CPACK_PRODUCTBUILD_IDENTITY_NAME
-
- Adds a digital signature to the resulting package.
-
-
-.. variable:: CPACK_PRODUCTBUILD_KEYCHAIN_PATH
-
- Specify a specific keychain to search for the signing identity.
-
-
-.. variable:: CPACK_COMMAND_PKGBUILD
-
- Path to the ``pkgbuild(1)`` command used to generate an macOS component package
- on macOS.  This variable can be used to override the automatically detected
- command (or specify its location if the auto-detection fails to find it).
-
-
-.. variable:: CPACK_PKGBUILD_IDENTITY_NAME
-
- Adds a digital signature to the resulting package.
-
-
-.. variable:: CPACK_PKGBUILD_KEYCHAIN_PATH
-
- Specify a specific keychain to search for the signing identity.
-
-
-.. variable:: CPACK_PREFLIGHT_<COMP>_SCRIPT
-
- Full path to a file that will be used as the ``preinstall`` script for the
- named ``<COMP>`` component's package, where ``<COMP>`` is the uppercased
- component name.  No ``preinstall`` script is added if this variable is not
- defined for a given component.
-
-
-.. variable:: CPACK_POSTFLIGHT_<COMP>_SCRIPT
-
- Full path to a file that will be used as the ``postinstall`` script for the
- named ``<COMP>`` component's package, where ``<COMP>`` is the uppercased
- component name.  No ``postinstall`` script is added if this variable is not
- defined for a given component.
-
-.. variable:: CPACK_PRODUCTBUILD_RESOURCES_DIR
-
- If specified the productbuild generator copies files from this directory
- (including subdirectories) to the ``Resources`` directory. This is done
- before the :variable:`CPACK_RESOURCE_FILE_WELCOME`,
- :variable:`CPACK_RESOURCE_FILE_README`, and
- :variable:`CPACK_RESOURCE_FILE_LICENSE` files are copied.
-
-.. variable:: CPACK_PRODUCTBUILD_BACKGROUND
-
- Adds a background to Distribtion XML if specified. The value contains the
- path to image in ``Resources`` directory.
-
-.. variable:: CPACK_PRODUCTBUILD_BACKGROUND_ALIGNMENT
-
- Adds an ``alignment`` attribute to the background in Distribution XML.
- Refer to Apple documentation for valid values.
-
-.. variable:: CPACK_PRODUCTBUILD_BACKGROUND_SCALING
-
- Adds a ``scaling`` attribute to the background in Distribution XML.
- Refer to Apple documentation for valid values.
-
-.. variable:: CPACK_PRODUCTBUILD_BACKGROUND_MIME_TYPE
-
- Adds a ``mime-type`` attribute to the background in Distribution XML.
- The option contains MIME type of an image.
-
-.. variable:: CPACK_PRODUCTBUILD_BACKGROUND_UTI
-
- Adds an ``uti`` attribute to the background in Distribution XML.
- The option contains UTI type of an image.
-
-.. variable:: CPACK_PRODUCTBUILD_BACKGROUND_DARKAQUA
-
- Adds a background for the Dark Aqua theme to Distribution XML if
- specified. The value contains the path to image in ``Resources``
- directory.
-
-.. variable:: CPACK_PRODUCTBUILD_BACKGROUND_DARKAQUA_ALIGNMENT
-
- Does the same as :variable:`CPACK_PRODUCTBUILD_BACKGROUND_ALIGNMENT` option,
- but for the dark theme.
-
-.. variable:: CPACK_PRODUCTBUILD_BACKGROUND_DARKAQUA_SCALING
-
- Does the same as :variable:`CPACK_PRODUCTBUILD_BACKGROUND_SCALING` option,
- but for the dark theme.
-
-.. variable:: CPACK_PRODUCTBUILD_BACKGROUND_DARKAQUA_MIME_TYPE
-
- Does the same as :variable:`CPACK_PRODUCTBUILD_BACKGROUND_MIME_TYPE` option,
- but for the dark theme.
-
-.. variable:: CPACK_PRODUCTBUILD_BACKGROUND_DARKAQUA_UTI
-
- Does the same as :variable:`CPACK_PRODUCTBUILD_BACKGROUND_UTI` option,
- but for the dark theme.
diff --git a/share/cmake-3.18/Help/cpack_gen/rpm.rst b/share/cmake-3.18/Help/cpack_gen/rpm.rst
deleted file mode 100644
index ccb7ebd..0000000
--- a/share/cmake-3.18/Help/cpack_gen/rpm.rst
+++ /dev/null
@@ -1,959 +0,0 @@
-CPack RPM Generator
--------------------
-
-The built in (binary) CPack RPM generator (Unix only)
-
-Variables specific to CPack RPM generator
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The CPack RPM generator may be used to create RPM packages using :module:`CPack`.
-The CPack RPM generator is a :module:`CPack` generator thus it uses the
-``CPACK_XXX`` variables used by :module:`CPack`.
-
-The CPack RPM generator has specific features which are controlled by the specifics
-``CPACK_RPM_XXX`` variables.
-
-``CPACK_RPM_<COMPONENT>_XXXX`` variables may be used in order to have
-**component** specific values.  Note however that ``<COMPONENT>`` refers to the
-**grouping name** written in upper case. It may be either a component name or
-a component GROUP name. Usually those variables correspond to RPM spec file
-entities. One may find information about spec files here
-http://www.rpm.org/wiki/Docs
-
-.. note::
-
- `<COMPONENT>` part of variables is preferred to be in upper case (e.g. if
- component is named ``foo`` then use ``CPACK_RPM_FOO_XXXX`` variable name format)
- as is with other ``CPACK_<COMPONENT>_XXXX`` variables.
- For the purposes of back compatibility (CMake/CPack version 3.5 and lower)
- support for same cased component (e.g. ``fOo`` would be used as
- ``CPACK_RPM_fOo_XXXX``) is still supported for variables defined in older
- versions of CMake/CPack but is not guaranteed for variables that
- will be added in the future. For the sake of back compatibility same cased
- component variables also override upper cased versions where both are
- present.
-
-Here are some CPack RPM generator wiki resources that are here for historic
-reasons and are no longer maintained but may still prove useful:
-
- - https://gitlab.kitware.com/cmake/community/-/wikis/doc/cpack/Configuration
- - https://gitlab.kitware.com/cmake/community/-/wikis/doc/cpack/PackageGenerators#rpm-unix-only
-
-List of CPack RPM generator specific variables:
-
-.. variable:: CPACK_RPM_COMPONENT_INSTALL
-
- Enable component packaging for CPack RPM generator
-
- * Mandatory : NO
- * Default   : OFF
-
- If enabled (``ON``) multiple packages are generated. By default
- a single package containing files of all components is generated.
-
-.. variable:: CPACK_RPM_PACKAGE_SUMMARY
-              CPACK_RPM_<component>_PACKAGE_SUMMARY
-
- The RPM package summary.
-
- * Mandatory : YES
- * Default   : :variable:`CPACK_PACKAGE_DESCRIPTION_SUMMARY`
-
-.. variable:: CPACK_RPM_PACKAGE_NAME
-              CPACK_RPM_<component>_PACKAGE_NAME
-
- The RPM package name.
-
- * Mandatory : YES
- * Default   : :variable:`CPACK_PACKAGE_NAME`
-
-.. variable:: CPACK_RPM_FILE_NAME
-              CPACK_RPM_<component>_FILE_NAME
-
- Package file name.
-
- * Mandatory : YES
- * Default   : ``<CPACK_PACKAGE_FILE_NAME>[-<component>].rpm`` with spaces
-               replaced by '-'
-
- This may be set to ``RPM-DEFAULT`` to allow ``rpmbuild`` tool to generate package
- file name by itself.
- Alternatively provided package file name must end with ``.rpm`` suffix.
-
- .. note::
-
-   By using user provided spec file, rpm macro extensions such as for
-   generating ``debuginfo`` packages or by simply using multiple components more
-   than one rpm file may be generated, either from a single spec file or from
-   multiple spec files (each component execution produces its own spec file).
-   In such cases duplicate file names may occur as a result of this variable
-   setting or spec file content structure. Duplicate files get overwritten
-   and it is up to the packager to set the variables in a manner that will
-   prevent such errors.
-
-.. variable:: CPACK_RPM_MAIN_COMPONENT
-
- Main component that is packaged without component suffix.
-
- * Mandatory : NO
- * Default   : -
-
- This variable can be set to any component or group name so that component or
- group rpm package is generated without component suffix in filename and
- package name.
-
-.. variable:: CPACK_RPM_PACKAGE_EPOCH
-
- The RPM package epoch
-
- * Mandatory : No
- * Default   : -
-
- Optional number that should be incremented when changing versioning schemas
- or fixing mistakes in the version numbers of older packages.
-
-.. variable:: CPACK_RPM_PACKAGE_VERSION
-
- The RPM package version.
-
- * Mandatory : YES
- * Default   : :variable:`CPACK_PACKAGE_VERSION`
-
-.. variable:: CPACK_RPM_PACKAGE_ARCHITECTURE
-              CPACK_RPM_<component>_PACKAGE_ARCHITECTURE
-
- The RPM package architecture.
-
- * Mandatory : YES
- * Default   : Native architecture output by ``uname -m``
-
- This may be set to ``noarch`` if you know you are building a ``noarch`` package.
-
-.. variable:: CPACK_RPM_PACKAGE_RELEASE
-
- The RPM package release.
-
- * Mandatory : YES
- * Default   : 1
-
- This is the numbering of the RPM package itself, i.e. the version of the
- packaging and not the version of the content (see
- :variable:`CPACK_RPM_PACKAGE_VERSION`). One may change the default value if
- the previous packaging was buggy and/or you want to put here a fancy Linux
- distro specific numbering.
-
-.. note::
-
- This is the string that goes into the RPM ``Release:`` field. Some distros
- (e.g. Fedora, CentOS) require ``1%{?dist}`` format and not just a number.
- ``%{?dist}`` part can be added by setting :variable:`CPACK_RPM_PACKAGE_RELEASE_DIST`.
-
-.. variable:: CPACK_RPM_PACKAGE_RELEASE_DIST
-
- The dist tag that is added  RPM ``Release:`` field.
-
- * Mandatory : NO
- * Default   : OFF
-
- This is the reported ``%{dist}`` tag from the current distribution or empty
- ``%{dist}`` if RPM macro is not set. If this variable is set then RPM
- ``Release:`` field value is set to ``${CPACK_RPM_PACKAGE_RELEASE}%{?dist}``.
-
-.. variable:: CPACK_RPM_PACKAGE_LICENSE
-
- The RPM package license policy.
-
- * Mandatory : YES
- * Default   : "unknown"
-
-.. variable:: CPACK_RPM_PACKAGE_GROUP
-              CPACK_RPM_<component>_PACKAGE_GROUP
-
- The RPM package group.
-
- * Mandatory : YES
- * Default   : "unknown"
-
-.. variable:: CPACK_RPM_PACKAGE_VENDOR
-
- The RPM package vendor.
-
- * Mandatory : YES
- * Default   : CPACK_PACKAGE_VENDOR if set or "unknown"
-
-.. variable:: CPACK_RPM_PACKAGE_URL
-              CPACK_RPM_<component>_PACKAGE_URL
-
- The projects URL.
-
- * Mandatory : NO
- * Default   : :variable:`CMAKE_PROJECT_HOMEPAGE_URL`
-
-.. variable:: CPACK_RPM_PACKAGE_DESCRIPTION
-              CPACK_RPM_<component>_PACKAGE_DESCRIPTION
-
- RPM package description.
-
- * Mandatory : YES
- * Default : :variable:`CPACK_COMPONENT_<compName>_DESCRIPTION` (component
-   based installers only) if set, :variable:`CPACK_PACKAGE_DESCRIPTION_FILE`
-   if set or "no package description available"
-
-.. variable:: CPACK_RPM_COMPRESSION_TYPE
-
- RPM compression type.
-
- * Mandatory : NO
- * Default   : -
-
- May be used to override RPM compression type to be used to build the
- RPM. For example some Linux distribution now default to ``lzma`` or ``xz``
- compression whereas older cannot use such RPM. Using this one can enforce
- compression type to be used.
-
- Possible values are:
-
- - lzma
- - xz
- - bzip2
- - gzip
-
-.. variable:: CPACK_RPM_PACKAGE_AUTOREQ
-              CPACK_RPM_<component>_PACKAGE_AUTOREQ
-
- RPM spec autoreq field.
-
- * Mandatory : NO
- * Default   : -
-
- May be used to enable (``1``, ``yes``) or disable (``0``, ``no``) automatic
- shared libraries dependency detection. Dependencies are added to requires list.
-
- .. note::
-
-   By default automatic dependency detection is enabled by rpm generator.
-
-.. variable:: CPACK_RPM_PACKAGE_AUTOPROV
-              CPACK_RPM_<component>_PACKAGE_AUTOPROV
-
- RPM spec autoprov field.
-
- * Mandatory : NO
- * Default   : -
-
- May be used to enable (``1``, ``yes``) or disable (``0``, ``no``)
- automatic listing of shared libraries that are provided by the package.
- Shared libraries are added to provides list.
-
- .. note::
-
-   By default automatic provides detection is enabled by rpm generator.
-
-.. variable:: CPACK_RPM_PACKAGE_AUTOREQPROV
-              CPACK_RPM_<component>_PACKAGE_AUTOREQPROV
-
- RPM spec autoreqprov field.
-
- * Mandatory : NO
- * Default   : -
-
- Variable enables/disables autoreq and autoprov at the same time.
- See :variable:`CPACK_RPM_PACKAGE_AUTOREQ` and
- :variable:`CPACK_RPM_PACKAGE_AUTOPROV` for more details.
-
- .. note::
-
-   By default automatic detection feature is enabled by rpm.
-
-.. variable:: CPACK_RPM_PACKAGE_REQUIRES
-              CPACK_RPM_<component>_PACKAGE_REQUIRES
-
- RPM spec requires field.
-
- * Mandatory : NO
- * Default   : -
-
- May be used to set RPM dependencies (requires). Note that you must enclose
- the complete requires string between quotes, for example::
-
-  set(CPACK_RPM_PACKAGE_REQUIRES "python >= 2.5.0, cmake >= 2.8")
-
- The required package list of an RPM file could be printed with::
-
-  rpm -qp --requires file.rpm
-
-.. variable:: CPACK_RPM_PACKAGE_CONFLICTS
-              CPACK_RPM_<component>_PACKAGE_CONFLICTS
-
- RPM spec conflicts field.
-
- * Mandatory : NO
- * Default   : -
-
- May be used to set negative RPM dependencies (conflicts). Note that you must
- enclose the complete requires string between quotes, for example::
-
-  set(CPACK_RPM_PACKAGE_CONFLICTS "libxml2")
-
- The conflicting package list of an RPM file could be printed with::
-
-  rpm -qp --conflicts file.rpm
-
-.. variable:: CPACK_RPM_PACKAGE_REQUIRES_PRE
-              CPACK_RPM_<component>_PACKAGE_REQUIRES_PRE
-
- RPM spec requires(pre) field.
-
- * Mandatory : NO
- * Default   : -
-
- May be used to set RPM preinstall dependencies (requires(pre)). Note that
- you must enclose the complete requires string between quotes, for example::
-
-  set(CPACK_RPM_PACKAGE_REQUIRES_PRE "shadow-utils, initscripts")
-
-.. variable:: CPACK_RPM_PACKAGE_REQUIRES_POST
-              CPACK_RPM_<component>_PACKAGE_REQUIRES_POST
-
- RPM spec requires(post) field.
-
- * Mandatory : NO
- * Default   : -
-
- May be used to set RPM postinstall dependencies (requires(post)). Note that
- you must enclose the complete requires string between quotes, for example::
-
-  set(CPACK_RPM_PACKAGE_REQUIRES_POST "shadow-utils, initscripts")
-
-.. variable:: CPACK_RPM_PACKAGE_REQUIRES_POSTUN
-              CPACK_RPM_<component>_PACKAGE_REQUIRES_POSTUN
-
- RPM spec requires(postun) field.
-
- * Mandatory : NO
- * Default   : -
-
- May be used to set RPM postuninstall dependencies (requires(postun)). Note
- that you must enclose the complete requires string between quotes, for
- example::
-
-  set(CPACK_RPM_PACKAGE_REQUIRES_POSTUN "shadow-utils, initscripts")
-
-.. variable:: CPACK_RPM_PACKAGE_REQUIRES_PREUN
-              CPACK_RPM_<component>_PACKAGE_REQUIRES_PREUN
-
- RPM spec requires(preun) field.
-
- * Mandatory : NO
- * Default   : -
-
- May be used to set RPM preuninstall dependencies (requires(preun)). Note that
- you must enclose the complete requires string between quotes, for example::
-
-  set(CPACK_RPM_PACKAGE_REQUIRES_PREUN "shadow-utils, initscripts")
-
-.. variable:: CPACK_RPM_PACKAGE_SUGGESTS
-              CPACK_RPM_<component>_PACKAGE_SUGGESTS
-
- RPM spec suggest field.
-
- * Mandatory : NO
- * Default   : -
-
- May be used to set weak RPM dependencies (suggests). Note that you must
- enclose the complete requires string between quotes.
-
-.. variable:: CPACK_RPM_PACKAGE_PROVIDES
-              CPACK_RPM_<component>_PACKAGE_PROVIDES
-
- RPM spec provides field.
-
- * Mandatory : NO
- * Default   : -
-
- May be used to set RPM dependencies (provides). The provided package list
- of an RPM file could be printed with::
-
-  rpm -qp --provides file.rpm
-
-.. variable:: CPACK_RPM_PACKAGE_OBSOLETES
-              CPACK_RPM_<component>_PACKAGE_OBSOLETES
-
- RPM spec obsoletes field.
-
- * Mandatory : NO
- * Default   : -
-
- May be used to set RPM packages that are obsoleted by this one.
-
-.. variable:: CPACK_RPM_PACKAGE_RELOCATABLE
-
- build a relocatable RPM.
-
- * Mandatory : NO
- * Default   : CPACK_PACKAGE_RELOCATABLE
-
- If this variable is set to TRUE or ON, the CPack RPM generator will try
- to build a relocatable RPM package. A relocatable RPM may
- be installed using::
-
-  rpm --prefix or --relocate
-
- in order to install it at an alternate place see rpm(8). Note that
- currently this may fail if :variable:`CPACK_SET_DESTDIR` is set to ``ON``. If
- :variable:`CPACK_SET_DESTDIR` is set then you will get a warning message but
- if there is file installed with absolute path you'll get unexpected behavior.
-
-.. variable:: CPACK_RPM_SPEC_INSTALL_POST
-
- Deprecated - use :variable:`CPACK_RPM_SPEC_MORE_DEFINE` instead.
-
- * Mandatory : NO
- * Default   : -
- * Deprecated: YES
-
- May be used to override the ``__spec_install_post`` section within the
- generated spec file.  This affects the install step during package creation,
- not during package installation.  For adding operations to be performed
- during package installation, use
- :variable:`CPACK_RPM_POST_INSTALL_SCRIPT_FILE` instead.
-
-.. variable:: CPACK_RPM_SPEC_MORE_DEFINE
-
- RPM extended spec definitions lines.
-
- * Mandatory : NO
- * Default   : -
-
- May be used to add any ``%define`` lines to the generated spec file.  An
- example of its use is to prevent stripping of executables (but note that
- this may also disable other default post install processing)::
-
-   set(CPACK_RPM_SPEC_MORE_DEFINE "%define __spec_install_post /bin/true")
-
-.. variable:: CPACK_RPM_PACKAGE_DEBUG
-
- Toggle CPack RPM generator debug output.
-
- * Mandatory : NO
- * Default   : -
-
- May be set when invoking cpack in order to trace debug information
- during CPack RPM run. For example you may launch CPack like this::
-
-  cpack -D CPACK_RPM_PACKAGE_DEBUG=1 -G RPM
-
-.. variable:: CPACK_RPM_USER_BINARY_SPECFILE
-              CPACK_RPM_<componentName>_USER_BINARY_SPECFILE
-
- A user provided spec file.
-
- * Mandatory : NO
- * Default   : -
-
- May be set by the user in order to specify a USER binary spec file
- to be used by the CPack RPM generator instead of generating the file.
- The specified file will be processed by configure_file( @ONLY).
-
-.. variable:: CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE
-
- Spec file template.
-
- * Mandatory : NO
- * Default   : -
-
- If set CPack will generate a template for USER specified binary
- spec file and stop with an error. For example launch CPack like this::
-
-  cpack -D CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE=1 -G RPM
-
- The user may then use this file in order to hand-craft is own
- binary spec file which may be used with
- :variable:`CPACK_RPM_USER_BINARY_SPECFILE`.
-
-.. variable:: CPACK_RPM_PRE_INSTALL_SCRIPT_FILE
-              CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE
-              CPACK_RPM_PRE_TRANS_SCRIPT_FILE
-
- Path to file containing pre install/uninstall/transaction script.
-
- * Mandatory : NO
- * Default   : -
-
- May be used to embed a pre installation/uninstallation/transaction script in the spec file.
- The referred script file (or both) will be read and directly
- put after the ``%pre`` or ``%preun`` section
- If :variable:`CPACK_RPM_COMPONENT_INSTALL` is set to ON the install/uninstall/transaction
- script for each component can be overridden with
- ``CPACK_RPM_<COMPONENT>_PRE_INSTALL_SCRIPT_FILE``,
- ``CPACK_RPM_<COMPONENT>_PRE_UNINSTALL_SCRIPT_FILE``, and
- ``CPACK_RPM_<COMPONENT>_PRE_TRANS_SCRIPT_FILE``
- One may verify which scriptlet has been included with::
-
-  rpm -qp --scripts  package.rpm
-
-.. variable:: CPACK_RPM_POST_INSTALL_SCRIPT_FILE
-              CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE
-              CPACK_RPM_POST_TRANS_SCRIPT_FILE
-
- Path to file containing post install/uninstall/transaction script.
-
- * Mandatory : NO
- * Default   : -
-
- May be used to embed a post installation/uninstallation/transaction script in the spec file.
- The referred script file (or both) will be read and directly
- put after the ``%post`` or ``%postun`` section.
- If :variable:`CPACK_RPM_COMPONENT_INSTALL` is set to ON the install/uninstall/transaction
- script for each component can be overridden with
- ``CPACK_RPM_<COMPONENT>_POST_INSTALL_SCRIPT_FILE``,
- ``CPACK_RPM_<COMPONENT>_POST_UNINSTALL_SCRIPT_FILE``, and
- ``CPACK_RPM_<COMPONENT>_POST_TRANS_SCRIPT_FILE``
- One may verify which scriptlet has been included with::
-
-  rpm -qp --scripts  package.rpm
-
-.. variable:: CPACK_RPM_USER_FILELIST
-              CPACK_RPM_<COMPONENT>_USER_FILELIST
-
- * Mandatory : NO
- * Default   : -
-
- May be used to explicitly specify ``%(<directive>)`` file line
- in the spec file. Like ``%config(noreplace)`` or any other directive
- that be found in the ``%files`` section. You can have multiple directives
- per line, as in ``%attr(600,root,root) %config(noreplace)``. Since
- the CPack RPM generator is generating the list of files (and directories) the
- user specified files of the ``CPACK_RPM_<COMPONENT>_USER_FILELIST`` list will
- be removed from the generated list. If referring to directories do
- not add a trailing slash.
-
-.. variable:: CPACK_RPM_CHANGELOG_FILE
-
- RPM changelog file.
-
- * Mandatory : NO
- * Default   : -
-
- May be used to embed a changelog in the spec file.
- The referred file will be read and directly put after the ``%changelog``
- section.
-
-.. variable:: CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST
-
- list of path to be excluded.
-
- * Mandatory : NO
- * Default   : /etc /etc/init.d /usr /usr/bin /usr/include /usr/lib
-               /usr/libx32 /usr/lib64 /usr/share /usr/share/aclocal
-               /usr/share/doc
-
- May be used to exclude path (directories or files) from the auto-generated
- list of paths discovered by CPack RPM. The default value contains a
- reasonable set of values if the variable is not defined by the user. If the
- variable is defined by the user then the CPack RPM generator will NOT any of
- the default path. If you want to add some path to the default list then you
- can use :variable:`CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION` variable.
-
-.. variable:: CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION
-
- additional list of path to be excluded.
-
- * Mandatory : NO
- * Default   : -
-
- May be used to add more exclude path (directories or files) from the initial
- default list of excluded paths. See
- :variable:`CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST`.
-
-.. variable:: CPACK_RPM_RELOCATION_PATHS
-
- Packages relocation paths list.
-
- * Mandatory : NO
- * Default   : -
-
- May be used to specify more than one relocation path per relocatable RPM.
- Variable contains a list of relocation paths that if relative are prefixed
- by the value of :variable:`CPACK_RPM_<COMPONENT>_PACKAGE_PREFIX` or by the
- value of :variable:`CPACK_PACKAGING_INSTALL_PREFIX` if the component version
- is not provided.
- Variable is not component based as its content can be used to set a different
- path prefix for e.g. binary dir and documentation dir at the same time.
- Only prefixes that are required by a certain component are added to that
- component - component must contain at least one file/directory/symbolic link
- with :variable:`CPACK_RPM_RELOCATION_PATHS` prefix for a certain relocation
- path to be added. Package will not contain any relocation paths if there are
- no files/directories/symbolic links on any of the provided prefix locations.
- Packages that either do not contain any relocation paths or contain
- files/directories/symbolic links that are outside relocation paths print
- out an ``AUTHOR_WARNING`` that RPM will be partially relocatable.
-
-.. variable:: CPACK_RPM_<COMPONENT>_PACKAGE_PREFIX
-
- Per component relocation path install prefix.
-
- * Mandatory : NO
- * Default   : CPACK_PACKAGING_INSTALL_PREFIX
-
- May be used to set per component :variable:`CPACK_PACKAGING_INSTALL_PREFIX`
- for relocatable RPM packages.
-
-.. variable:: CPACK_RPM_NO_INSTALL_PREFIX_RELOCATION
-              CPACK_RPM_NO_<COMPONENT>_INSTALL_PREFIX_RELOCATION
-
- Removal of default install prefix from relocation paths list.
-
- * Mandatory : NO
- * Default   : CPACK_PACKAGING_INSTALL_PREFIX or CPACK_RPM_<COMPONENT>_PACKAGE_PREFIX
-               are treated as one of relocation paths
-
- May be used to remove CPACK_PACKAGING_INSTALL_PREFIX and CPACK_RPM_<COMPONENT>_PACKAGE_PREFIX
- from relocatable RPM prefix paths.
-
-.. variable:: CPACK_RPM_ADDITIONAL_MAN_DIRS
-
- * Mandatory : NO
- * Default   : -
-
- May be used to set additional man dirs that could potentially be compressed
- by brp-compress RPM macro. Variable content must be a list of regular
- expressions that point to directories containing man files or to man files
- directly. Note that in order to compress man pages a path must also be
- present in brp-compress RPM script and that brp-compress script must be
- added to RPM configuration by the operating system.
-
- Regular expressions that are added by default were taken from brp-compress
- RPM macro:
-
- - /usr/man/man.*
- - /usr/man/.*/man.*
- - /usr/info.*
- - /usr/share/man/man.*
- - /usr/share/man/.*/man.*
- - /usr/share/info.*
- - /usr/kerberos/man.*
- - /usr/X11R6/man/man.*
- - /usr/lib/perl5/man/man.*
- - /usr/share/doc/.*/man/man.*
- - /usr/lib/.*/man/man.*
-
-.. variable:: CPACK_RPM_DEFAULT_USER
-              CPACK_RPM_<compName>_DEFAULT_USER
-
- default user ownership of RPM content
-
- * Mandatory : NO
- * Default   : root
-
- Value should be user name and not UID.
- Note that <compName> must be in upper-case.
-
-.. variable:: CPACK_RPM_DEFAULT_GROUP
-              CPACK_RPM_<compName>_DEFAULT_GROUP
-
- default group ownership of RPM content
-
- * Mandatory : NO
- * Default   : root
-
- Value should be group name and not GID.
- Note that <compName> must be in upper-case.
-
-.. variable:: CPACK_RPM_DEFAULT_FILE_PERMISSIONS
-              CPACK_RPM_<compName>_DEFAULT_FILE_PERMISSIONS
-
- default permissions used for packaged files
-
- * Mandatory : NO
- * Default   : - (system default)
-
- Accepted values are lists with ``PERMISSIONS``. Valid permissions
- are:
-
- - OWNER_READ
- - OWNER_WRITE
- - OWNER_EXECUTE
- - GROUP_READ
- - GROUP_WRITE
- - GROUP_EXECUTE
- - WORLD_READ
- - WORLD_WRITE
- - WORLD_EXECUTE
-
- Note that <compName> must be in upper-case.
-
-.. variable:: CPACK_RPM_DEFAULT_DIR_PERMISSIONS
-              CPACK_RPM_<compName>_DEFAULT_DIR_PERMISSIONS
-
- default permissions used for packaged directories
-
- * Mandatory : NO
- * Default   : - (system default)
-
- Accepted values are lists with PERMISSIONS. Valid permissions
- are the same as for :variable:`CPACK_RPM_DEFAULT_FILE_PERMISSIONS`.
- Note that <compName> must be in upper-case.
-
-.. variable:: CPACK_RPM_INSTALL_WITH_EXEC
-
- force execute permissions on programs and shared libraries
-
- * Mandatory : NO
- * Default   : - (system default)
-
- Force set owner, group and world execute permissions on programs and shared
- libraries. This can be used for creating valid rpm packages on systems such
- as Debian where shared libraries do not have execute permissions set.
-
-.. note::
-
- Programs and shared libraries without execute permissions are ignored during
- separation of debug symbols from the binary for debuginfo packages.
-
-Packaging of Symbolic Links
-^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The CPack RPM generator supports packaging of symbolic links::
-
-  execute_process(COMMAND ${CMAKE_COMMAND}
-    -E create_symlink <relative_path_location> <symlink_name>)
-  install(FILES ${CMAKE_CURRENT_BINARY_DIR}/<symlink_name>
-    DESTINATION <symlink_location> COMPONENT libraries)
-
-Symbolic links will be optimized (paths will be shortened if possible)
-before being added to the package or if multiple relocation paths are
-detected, a post install symlink relocation script will be generated.
-
-Symbolic links may point to locations that are not packaged by the same
-package (either a different component or even not packaged at all) but
-those locations will be treated as if they were a part of the package
-while determining if symlink should be either created or present in a
-post install script - depending on relocation paths.
-
-Symbolic links that point to locations outside packaging path produce a
-warning and are treated as non relocatable permanent symbolic links.
-
-Currently there are a few limitations though:
-
-* For component based packaging component interdependency is not checked
-  when processing symbolic links. Symbolic links pointing to content of
-  a different component are treated the same way as if pointing to location
-  that will not be packaged.
-
-* Symbolic links pointing to a location through one or more intermediate
-  symbolic links will not be handled differently - if the intermediate
-  symbolic link(s) is also on a relocatable path, relocating it during
-  package installation may cause initial symbolic link to point to an
-  invalid location.
-
-Packaging of debug information
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Debuginfo packages contain debug symbols and sources for debugging packaged
-binaries.
-
-Debuginfo RPM packaging has its own set of variables:
-
-.. variable:: CPACK_RPM_DEBUGINFO_PACKAGE
-              CPACK_RPM_<component>_DEBUGINFO_PACKAGE
-
- Enable generation of debuginfo RPM package(s).
-
- * Mandatory : NO
- * Default   : OFF
-
-.. note::
-
- Binaries must contain debug symbols before packaging so use either ``Debug``
- or ``RelWithDebInfo`` for :variable:`CMAKE_BUILD_TYPE` variable value.
-
-.. note::
-
- Packages generated from packages without binary files, with binary files but
- without execute permissions or without debug symbols will cause packaging
- termination.
-
-.. variable:: CPACK_BUILD_SOURCE_DIRS
-
- Provides locations of root directories of source files from which binaries
- were built.
-
- * Mandatory : YES if :variable:`CPACK_RPM_DEBUGINFO_PACKAGE` is set
- * Default   : -
-
-.. note::
-
- For CMake project :variable:`CPACK_BUILD_SOURCE_DIRS` is set by default to
- point to :variable:`CMAKE_SOURCE_DIR` and :variable:`CMAKE_BINARY_DIR` paths.
-
-.. note::
-
- Sources with path prefixes that do not fall under any location provided with
- :variable:`CPACK_BUILD_SOURCE_DIRS` will not be present in debuginfo package.
-
-.. variable:: CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX
-              CPACK_RPM_<component>_BUILD_SOURCE_DIRS_PREFIX
-
- Prefix of location where sources will be placed during package installation.
-
- * Mandatory : YES if :variable:`CPACK_RPM_DEBUGINFO_PACKAGE` is set
- * Default   : "/usr/src/debug/<CPACK_PACKAGE_FILE_NAME>" and
-               for component packaging "/usr/src/debug/<CPACK_PACKAGE_FILE_NAME>-<component>"
-
-.. note::
-
- Each source path prefix is additionally suffixed by ``src_<index>`` where
- index is index of the path used from :variable:`CPACK_BUILD_SOURCE_DIRS`
- variable. This produces ``<CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX>/src_<index>``
- replacement path.
- Limitation is that replaced path part must be shorter or of equal
- length than the length of its replacement. If that is not the case either
- :variable:`CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX` variable has to be set to
- a shorter path or source directories must be placed on a longer path.
-
-.. variable:: CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS
-
- Directories containing sources that should be excluded from debuginfo packages.
-
- * Mandatory : NO
- * Default   : "/usr /usr/src /usr/src/debug"
-
- Listed paths are owned by other RPM packages and should therefore not be
- deleted on debuginfo package uninstallation.
-
-.. variable:: CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS_ADDITION
-
- Paths that should be appended to :variable:`CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS`
- for exclusion.
-
- * Mandatory : NO
- * Default   : -
-
-.. variable:: CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE
-
- Create a single debuginfo package even if components packaging is set.
-
- * Mandatory : NO
- * Default   : OFF
-
- When this variable is enabled it produces a single debuginfo package even if
- component packaging is enabled.
-
- When using this feature in combination with components packaging and there is
- more than one component this variable requires :variable:`CPACK_RPM_MAIN_COMPONENT`
- to be set.
-
-.. note::
-
- If none of the :variable:`CPACK_RPM_<component>_DEBUGINFO_PACKAGE` variables
- is set then :variable:`CPACK_RPM_DEBUGINFO_PACKAGE` is automatically set to
- ``ON`` when :variable:`CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE` is set.
-
-.. variable:: CPACK_RPM_DEBUGINFO_FILE_NAME
-              CPACK_RPM_<component>_DEBUGINFO_FILE_NAME
-
- Debuginfo package file name.
-
- * Mandatory : NO
- * Default   : rpmbuild tool generated package file name
-
- Alternatively provided debuginfo package file name must end with ``.rpm``
- suffix and should differ from file names of other generated packages.
-
- Variable may contain ``@cpack_component@`` placeholder which will be
- replaced by component name if component packaging is enabled otherwise it
- deletes the placeholder.
-
- Setting the variable to ``RPM-DEFAULT`` may be used to explicitly set
- filename generation to default.
-
-.. note::
-
- :variable:`CPACK_RPM_FILE_NAME` also supports rpmbuild tool generated package
- file name - disabled by default but can be enabled by setting the variable to
- ``RPM-DEFAULT``.
-
-Packaging of sources (SRPM)
-^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-SRPM packaging is enabled by setting :variable:`CPACK_RPM_PACKAGE_SOURCES`
-variable while usually using :variable:`CPACK_INSTALLED_DIRECTORIES` variable
-to provide directory containing CMakeLists.txt and source files.
-
-For CMake projects SRPM package would be produced by executing::
-
-  cpack -G RPM --config ./CPackSourceConfig.cmake
-
-.. note::
-
- Produced SRPM package is expected to be built with :manual:`cmake(1)` executable
- and packaged with :manual:`cpack(1)` executable so CMakeLists.txt has to be
- located in root source directory and must be able to generate binary rpm
- packages by executing ``cpack -G`` command. The two executables as well as
- rpmbuild must also be present when generating binary rpm packages from the
- produced SRPM package.
-
-Once the SRPM package is generated it can be used to generate binary packages
-by creating a directory structure for rpm generation and executing rpmbuild
-tool::
-
-  mkdir -p build_dir/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
-  rpmbuild --define "_topdir <path_to_build_dir>" --rebuild <SRPM_file_name>
-
-Generated packages will be located in build_dir/RPMS directory or its sub
-directories.
-
-.. note::
-
- SRPM package internally uses CPack/RPM generator to generate binary packages
- so CMakeScripts.txt can decide during the SRPM to binary rpm generation step
- what content the package(s) should have as well as how they should be packaged
- (monolithic or components). CMake can decide this for e.g. by reading environment
- variables set by the package manager before starting the process of generating
- binary rpm packages. This way a single SRPM package can be used to produce
- different binary rpm packages on different platforms depending on the platform's
- packaging rules.
-
-Source RPM packaging has its own set of variables:
-
-.. variable:: CPACK_RPM_PACKAGE_SOURCES
-
- Should the content be packaged as a source rpm (default is binary rpm).
-
- * Mandatory : NO
- * Default   : OFF
-
-.. note::
-
- For cmake projects :variable:`CPACK_RPM_PACKAGE_SOURCES` variable is set
- to ``OFF`` in CPackConfig.cmake and ``ON`` in CPackSourceConfig.cmake
- generated files.
-
-.. variable:: CPACK_RPM_SOURCE_PKG_BUILD_PARAMS
-
- Additional command-line parameters provided to :manual:`cmake(1)` executable.
-
- * Mandatory : NO
- * Default   : -
-
-.. variable:: CPACK_RPM_SOURCE_PKG_PACKAGING_INSTALL_PREFIX
-
- Packaging install prefix that would be provided in :variable:`CPACK_PACKAGING_INSTALL_PREFIX`
- variable for producing binary RPM packages.
-
- * Mandatory : YES
- * Default   : "/"
-
-.. VARIABLE:: CPACK_RPM_BUILDREQUIRES
-
- List of source rpm build dependencies.
-
- * Mandatory : NO
- * Default   : -
-
- May be used to set source RPM build dependencies (BuildRequires). Note that
- you must enclose the complete build requirements string between quotes, for
- example::
-
-  set(CPACK_RPM_BUILDREQUIRES "python >= 2.5.0, cmake >= 2.8")
diff --git a/share/cmake-3.18/Help/cpack_gen/wix.rst b/share/cmake-3.18/Help/cpack_gen/wix.rst
deleted file mode 100644
index 7fb5a12..0000000
--- a/share/cmake-3.18/Help/cpack_gen/wix.rst
+++ /dev/null
@@ -1,288 +0,0 @@
-CPack WIX Generator
--------------------
-
-CPack WIX generator specific options
-
-Variables specific to CPack WIX generator
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The following variables are specific to the installers built on
-Windows using WiX.
-
-.. variable:: CPACK_WIX_UPGRADE_GUID
-
- Upgrade GUID (``Product/@UpgradeCode``)
-
- Will be automatically generated unless explicitly provided.
-
- It should be explicitly set to a constant generated globally unique
- identifier (GUID) to allow your installers to replace existing
- installations that use the same GUID.
-
- You may for example explicitly set this variable in your
- CMakeLists.txt to the value that has been generated per default.  You
- should not use GUIDs that you did not generate yourself or which may
- belong to other projects.
-
- A GUID shall have the following fixed length syntax::
-
-  XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
-
- (each X represents an uppercase hexadecimal digit)
-
-.. variable:: CPACK_WIX_PRODUCT_GUID
-
- Product GUID (``Product/@Id``)
-
- Will be automatically generated unless explicitly provided.
-
- If explicitly provided this will set the Product Id of your installer.
-
- The installer will abort if it detects a pre-existing installation that
- uses the same GUID.
-
- The GUID shall use the syntax described for CPACK_WIX_UPGRADE_GUID.
-
-.. variable:: CPACK_WIX_LICENSE_RTF
-
- RTF License File
-
- If CPACK_RESOURCE_FILE_LICENSE has an .rtf extension it is used as-is.
-
- If CPACK_RESOURCE_FILE_LICENSE has an .txt extension it is implicitly
- converted to RTF by the WIX Generator.
- The expected encoding of the .txt file is UTF-8.
-
- With CPACK_WIX_LICENSE_RTF you can override the license file used by the
- WIX Generator in case CPACK_RESOURCE_FILE_LICENSE is in an unsupported
- format or the .txt -> .rtf conversion does not work as expected.
-
-.. variable:: CPACK_WIX_PRODUCT_ICON
-
- The Icon shown next to the program name in Add/Remove programs.
-
- If set, this icon is used in place of the default icon.
-
-.. variable:: CPACK_WIX_UI_REF
-
- This variable allows you to override the Id of the ``<UIRef>`` element
- in the WiX template.
-
- The default is ``WixUI_InstallDir`` in case no CPack components have
- been defined and ``WixUI_FeatureTree`` otherwise.
-
-.. variable:: CPACK_WIX_UI_BANNER
-
- The bitmap will appear at the top of all installer pages other than the
- welcome and completion dialogs.
-
- If set, this image will replace the default banner image.
-
- This image must be 493 by 58 pixels.
-
-.. variable:: CPACK_WIX_UI_DIALOG
-
- Background bitmap used on the welcome and completion dialogs.
-
- If this variable is set, the installer will replace the default dialog
- image.
-
- This image must be 493 by 312 pixels.
-
-.. variable:: CPACK_WIX_PROGRAM_MENU_FOLDER
-
- Start menu folder name for launcher.
-
- If this variable is not set, it will be initialized with CPACK_PACKAGE_NAME
-
- If this variable is set to ``.``, then application shortcuts will be
- created directly in the start menu and the uninstaller shortcut will be
- omitted.
-
-.. variable:: CPACK_WIX_CULTURES
-
- Language(s) of the installer
-
- Languages are compiled into the WixUI extension library.  To use them,
- simply provide the name of the culture.  If you specify more than one
- culture identifier in a comma or semicolon delimited list, the first one
- that is found will be used.  You can find a list of supported languages at:
- http://wix.sourceforge.net/manual-wix3/WixUI_localization.htm
-
-.. variable:: CPACK_WIX_TEMPLATE
-
- Template file for WiX generation
-
- If this variable is set, the specified template will be used to generate
- the WiX wxs file.  This should be used if further customization of the
- output is required.
-
- If this variable is not set, the default MSI template included with CMake
- will be used.
-
-.. variable:: CPACK_WIX_PATCH_FILE
-
- Optional list of XML files with fragments to be inserted into
- generated WiX sources
-
- This optional variable can be used to specify an XML file that the
- WIX generator will use to inject fragments into its generated
- source files.
-
- Patch files understood by the CPack WIX generator
- roughly follow this RELAX NG compact schema:
-
- .. code-block:: none
-
-    start = CPackWiXPatch
-
-    CPackWiXPatch = element CPackWiXPatch { CPackWiXFragment* }
-
-    CPackWiXFragment = element CPackWiXFragment
-    {
-        attribute Id { string },
-        fragmentContent*
-    }
-
-    fragmentContent = element * - CPackWiXFragment
-    {
-        (attribute * { text } | text | fragmentContent)*
-    }
-
- Currently fragments can be injected into most
- Component, File, Directory and Feature elements.
-
- The following additional special Ids can be used:
-
- * ``#PRODUCT`` for the ``<Product>`` element.
- * ``#PRODUCTFEATURE`` for the root ``<Feature>`` element.
-
- The following example illustrates how this works.
-
- Given that the WIX generator creates the following XML element:
-
- .. code-block:: xml
-
-    <Component Id="CM_CP_applications.bin.my_libapp.exe" Guid="*"/>
-
- The following XML patch file may be used to inject an Environment element
- into it:
-
- .. code-block:: xml
-
-    <CPackWiXPatch>
-      <CPackWiXFragment Id="CM_CP_applications.bin.my_libapp.exe">
-        <Environment Id="MyEnvironment" Action="set"
-          Name="MyVariableName" Value="MyVariableValue"/>
-      </CPackWiXFragment>
-    </CPackWiXPatch>
-
-.. variable:: CPACK_WIX_EXTRA_SOURCES
-
- Extra WiX source files
-
- This variable provides an optional list of extra WiX source files (.wxs)
- that should be compiled and linked.  The full path to source files is
- required.
-
-.. variable:: CPACK_WIX_EXTRA_OBJECTS
-
- Extra WiX object files or libraries
-
- This variable provides an optional list of extra WiX object (.wixobj)
- and/or WiX library (.wixlib) files.  The full path to objects and libraries
- is required.
-
-.. variable:: CPACK_WIX_EXTENSIONS
-
- This variable provides a list of additional extensions for the WiX
- tools light and candle.
-
-.. variable:: CPACK_WIX_<TOOL>_EXTENSIONS
-
- This is the tool specific version of CPACK_WIX_EXTENSIONS.
- ``<TOOL>`` can be either LIGHT or CANDLE.
-
-.. variable:: CPACK_WIX_<TOOL>_EXTRA_FLAGS
-
- This list variable allows you to pass additional
- flags to the WiX tool ``<TOOL>``.
-
- Use it at your own risk.
- Future versions of CPack may generate flags which may be in conflict
- with your own flags.
-
- ``<TOOL>`` can be either LIGHT or CANDLE.
-
-.. variable:: CPACK_WIX_CMAKE_PACKAGE_REGISTRY
-
- If this variable is set the generated installer will create
- an entry in the windows registry key
- ``HKEY_LOCAL_MACHINE\Software\Kitware\CMake\Packages\<PackageName>``
- The value for ``<PackageName>`` is provided by this variable.
-
- Assuming you also install a CMake configuration file this will
- allow other CMake projects to find your package with
- the :command:`find_package` command.
-
-.. variable:: CPACK_WIX_PROPERTY_<PROPERTY>
-
- This variable can be used to provide a value for
- the Windows Installer property ``<PROPERTY>``
-
- The following list contains some example properties that can be used to
- customize information under
- "Programs and Features" (also known as "Add or Remove Programs")
-
- * ARPCOMMENTS - Comments
- * ARPHELPLINK - Help and support information URL
- * ARPURLINFOABOUT - General information URL
- * ARPURLUPDATEINFO - Update information URL
- * ARPHELPTELEPHONE - Help and support telephone number
- * ARPSIZE - Size (in kilobytes) of the application
-
-.. variable:: CPACK_WIX_ROOT_FEATURE_TITLE
-
- Sets the name of the root install feature in the WIX installer. Same as
- CPACK_COMPONENT_<compName>_DISPLAY_NAME for components.
-
-.. variable:: CPACK_WIX_ROOT_FEATURE_DESCRIPTION
-
- Sets the description of the root install feature in the WIX installer. Same as
- CPACK_COMPONENT_<compName>_DESCRIPTION for components.
-
-.. variable:: CPACK_WIX_SKIP_PROGRAM_FOLDER
-
- If this variable is set to true, the default install location
- of the generated package will be CPACK_PACKAGE_INSTALL_DIRECTORY directly.
- The install location will not be located relatively below
- ProgramFiles or ProgramFiles64.
-
-  .. note::
-    Installers created with this feature do not take differences
-    between the system on which the installer is created
-    and the system on which the installer might be used into account.
-
-    It is therefore possible that the installer e.g. might try to install
-    onto a drive that is unavailable or unintended or a path that does not
-    follow the localization or convention of the system on which the
-    installation is performed.
-
-.. variable:: CPACK_WIX_ROOT_FOLDER_ID
-
- This variable allows specification of a custom root folder ID.
- The generator specific ``<64>`` token can be used for
- folder IDs that come in 32-bit and 64-bit variants.
- In 32-bit builds the token will expand empty while in 64-bit builds
- it will expand to ``64``.
-
- When unset generated installers will default installing to
- ``ProgramFiles<64>Folder``.
-
-.. variable:: CPACK_WIX_ROOT
-
- This variable can optionally be set to the root directory
- of a custom WiX Toolset installation.
-
- When unspecified CPack will try to locate a WiX Toolset
- installation via the ``WIX`` environment variable instead.
diff --git a/share/cmake-3.18/Help/envvar/ASM_DIALECT.rst b/share/cmake-3.18/Help/envvar/ASM_DIALECT.rst
deleted file mode 100644
index a06e3cb..0000000
--- a/share/cmake-3.18/Help/envvar/ASM_DIALECT.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-ASM<DIALECT>
-------------
-
-.. include:: ENV_VAR.txt
-
-Preferred executable for compiling a specific dialect of assembly language
-files. ``ASM<DIALECT>`` can be ``ASM``, ``ASM_NASM`` (Netwide Assembler),
-``ASM_MASM`` (Microsoft Assembler) or ``ASM-ATT`` (Assembler AT&T).
-Will only be used by CMake on the first configuration to determine
-``ASM<DIALECT>`` compiler, after which the value for ``ASM<DIALECT>`` is stored
-in the cache as
-:variable:`CMAKE_ASM<DIALECT>_COMPILER <CMAKE_<LANG>_COMPILER>`. For subsequent
-configuration runs, the environment variable will be ignored in favor of
-:variable:`CMAKE_ASM<DIALECT>_COMPILER <CMAKE_<LANG>_COMPILER>`.
diff --git a/share/cmake-3.18/Help/envvar/CC.rst b/share/cmake-3.18/Help/envvar/CC.rst
deleted file mode 100644
index ef12059..0000000
--- a/share/cmake-3.18/Help/envvar/CC.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CC
---
-
-.. include:: ENV_VAR.txt
-
-Preferred executable for compiling ``C`` language files. Will only be used by
-CMake on the first configuration to determine ``C`` compiler, after which the
-value for ``CC`` is stored in the cache as
-:variable:`CMAKE_C_COMPILER <CMAKE_<LANG>_COMPILER>`. For any configuration run
-(including the first), the environment variable will be ignored if the
-:variable:`CMAKE_C_COMPILER <CMAKE_<LANG>_COMPILER>` variable is defined.
diff --git a/share/cmake-3.18/Help/envvar/CCMAKE_COLORS.rst b/share/cmake-3.18/Help/envvar/CCMAKE_COLORS.rst
deleted file mode 100644
index d4750c3..0000000
--- a/share/cmake-3.18/Help/envvar/CCMAKE_COLORS.rst
+++ /dev/null
@@ -1,34 +0,0 @@
-CCMAKE_COLORS
--------------
-
-Determines what colors are used by the CMake curses interface,
-when run on a terminal that supports colors.
-The syntax follows the same conventions as ``LS_COLORS``;
-that is, a list of key/value pairs separated by ``:``.
-
-Keys are a single letter corresponding to a CMake cache variable type:
-
-- ``s``: A ``STRING``.
-- ``p``: A ``FILEPATH``.
-- ``c``: A value which has an associated list of choices.
-- ``y``: A ``BOOL`` which has a true-like value (e.g. ``ON``, ``YES``).
-- ``n``: A ``BOOL`` which has a false-like value (e.g. ``OFF``, ``NO``).
-
-Values are an integer number that specifies what color to use.
-``0`` is black (you probably don't want to use that).
-Others are determined by your terminal's color support.
-Most (color) terminals will support at least 8 or 16 colors.
-Some will support up to 256 colors. The colors will likely match
-`this chart <https://upload.wikimedia.org/wikipedia/commons/1/15/Xterm_256color_chart.svg>`_,
-although the first 16 colors may match the original
-`CGA color palette <https://en.wikipedia.org/wiki/Color_Graphics_Adapter#Color_palette>`_.
-(Many modern terminal emulators also allow their color palette,
-at least for the first 16 colors, to be configured by the user.)
-
-Note that fairly minimal checking is done for bad colors
-(although a value higher than what curses believes your terminal supports
-will be silently ignored) or bad syntax.
-
-For example::
-
-  CCMAKE_COLORS='s=39:p=220:c=207:n=196:y=46'
diff --git a/share/cmake-3.18/Help/envvar/CMAKE_BUILD_PARALLEL_LEVEL.rst b/share/cmake-3.18/Help/envvar/CMAKE_BUILD_PARALLEL_LEVEL.rst
deleted file mode 100644
index 199ca3e..0000000
--- a/share/cmake-3.18/Help/envvar/CMAKE_BUILD_PARALLEL_LEVEL.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_BUILD_PARALLEL_LEVEL
---------------------------
-
-.. include:: ENV_VAR.txt
-
-Specifies the maximum number of concurrent processes to use when building
-using the ``cmake --build`` command line
-:ref:`Build Tool Mode <Build Tool Mode>`.
-
-If this variable is defined empty the native build tool's default number is
-used.
diff --git a/share/cmake-3.18/Help/envvar/CMAKE_EXPORT_COMPILE_COMMANDS.rst b/share/cmake-3.18/Help/envvar/CMAKE_EXPORT_COMPILE_COMMANDS.rst
deleted file mode 100644
index e9e0810..0000000
--- a/share/cmake-3.18/Help/envvar/CMAKE_EXPORT_COMPILE_COMMANDS.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CMAKE_EXPORT_COMPILE_COMMANDS
------------------------------
-
-.. include:: ENV_VAR.txt
-
-The default value for :variable:`CMAKE_EXPORT_COMPILE_COMMANDS` when there
-is no explicit configuration given on the first run while creating a new
-build tree.  On later runs in an existing build tree the value persists in
-the cache as :variable:`CMAKE_EXPORT_COMPILE_COMMANDS`.
diff --git a/share/cmake-3.18/Help/envvar/CMAKE_GENERATOR.rst b/share/cmake-3.18/Help/envvar/CMAKE_GENERATOR.rst
deleted file mode 100644
index f2d055f..0000000
--- a/share/cmake-3.18/Help/envvar/CMAKE_GENERATOR.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-CMAKE_GENERATOR
----------------
-
-.. include:: ENV_VAR.txt
-
-Specifies the CMake default generator to use when no generator is supplied
-with ``-G``. If the provided value doesn't name a generator known by CMake,
-the internal default is used.  Either way the resulting generator selection
-is stored in the :variable:`CMAKE_GENERATOR` variable.
-
-Some generators may be additionally configured using the environment
-variables:
-
-* :envvar:`CMAKE_GENERATOR_PLATFORM`
-* :envvar:`CMAKE_GENERATOR_TOOLSET`
-* :envvar:`CMAKE_GENERATOR_INSTANCE`
diff --git a/share/cmake-3.18/Help/envvar/CMAKE_GENERATOR_INSTANCE.rst b/share/cmake-3.18/Help/envvar/CMAKE_GENERATOR_INSTANCE.rst
deleted file mode 100644
index 1654fa1..0000000
--- a/share/cmake-3.18/Help/envvar/CMAKE_GENERATOR_INSTANCE.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-CMAKE_GENERATOR_INSTANCE
-------------------------
-
-.. include:: ENV_VAR.txt
-
-Default value for :variable:`CMAKE_GENERATOR_INSTANCE` if no Cache entry is
-present. This value is only applied if :envvar:`CMAKE_GENERATOR` is set.
diff --git a/share/cmake-3.18/Help/envvar/CMAKE_GENERATOR_PLATFORM.rst b/share/cmake-3.18/Help/envvar/CMAKE_GENERATOR_PLATFORM.rst
deleted file mode 100644
index 917b30b..0000000
--- a/share/cmake-3.18/Help/envvar/CMAKE_GENERATOR_PLATFORM.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CMAKE_GENERATOR_PLATFORM
-------------------------
-
-.. include:: ENV_VAR.txt
-
-Default value for :variable:`CMAKE_GENERATOR_PLATFORM` if no Cache entry
-is present and no value is specified by :manual:`cmake(1)` ``-A`` option.
-This value is only applied if :envvar:`CMAKE_GENERATOR` is set.
diff --git a/share/cmake-3.18/Help/envvar/CMAKE_GENERATOR_TOOLSET.rst b/share/cmake-3.18/Help/envvar/CMAKE_GENERATOR_TOOLSET.rst
deleted file mode 100644
index 7ac3856..0000000
--- a/share/cmake-3.18/Help/envvar/CMAKE_GENERATOR_TOOLSET.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CMAKE_GENERATOR_TOOLSET
------------------------
-
-.. include:: ENV_VAR.txt
-
-Default value for :variable:`CMAKE_GENERATOR_TOOLSET` if no Cache entry
-is present and no value is specified by :manual:`cmake(1)` ``-T`` option.
-This value is only applied if :envvar:`CMAKE_GENERATOR` is set.
diff --git a/share/cmake-3.18/Help/envvar/CMAKE_LANG_COMPILER_LAUNCHER.rst b/share/cmake-3.18/Help/envvar/CMAKE_LANG_COMPILER_LAUNCHER.rst
deleted file mode 100644
index 4f91e9a..0000000
--- a/share/cmake-3.18/Help/envvar/CMAKE_LANG_COMPILER_LAUNCHER.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-CMAKE_<LANG>_COMPILER_LAUNCHER
-------------------------------
-
-.. include:: ENV_VAR.txt
-
-Default compiler launcher to use for the specified language. Will only be used
-by CMake to initialize the variable on the first configuration. Afterwards, it
-is available through the cache setting of the variable of the same name. For
-any configuration run (including the first), the environment variable will be
-ignored if the :variable:`CMAKE_<LANG>_COMPILER_LAUNCHER` variable is defined.
diff --git a/share/cmake-3.18/Help/envvar/CMAKE_NO_VERBOSE.rst b/share/cmake-3.18/Help/envvar/CMAKE_NO_VERBOSE.rst
deleted file mode 100644
index 149efbd..0000000
--- a/share/cmake-3.18/Help/envvar/CMAKE_NO_VERBOSE.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CMAKE_NO_VERBOSE
-----------------
-
-Disables verbose output from CMake when :envvar:`VERBOSE` environment variable
-is set.
-
-Only your build tool of choice will still print verbose output when you start
-to actually build your project.
diff --git a/share/cmake-3.18/Help/envvar/CSFLAGS.rst b/share/cmake-3.18/Help/envvar/CSFLAGS.rst
deleted file mode 100644
index 8762982..0000000
--- a/share/cmake-3.18/Help/envvar/CSFLAGS.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-CSFLAGS
--------
-
-.. include:: ENV_VAR.txt
-
-Preferred executable for compiling ``CSharp`` language files. Will only be
-used by CMake on the first configuration to determine ``CSharp`` default
-compilation flags, after which the value for ``CSFLAGS`` is stored in the cache
-as :variable:`CMAKE_CSharp_FLAGS <CMAKE_<LANG>_FLAGS>`. For any configuration
-run (including the first), the environment variable will be ignored if the
-:variable:`CMAKE_CSharp_FLAGS <CMAKE_<LANG>_FLAGS>` variable is defined.
-
-See also :variable:`CMAKE_CSharp_FLAGS_INIT <CMAKE_<LANG>_FLAGS_INIT>`.
diff --git a/share/cmake-3.18/Help/envvar/CTEST_PROGRESS_OUTPUT.rst b/share/cmake-3.18/Help/envvar/CTEST_PROGRESS_OUTPUT.rst
deleted file mode 100644
index b36a6b8..0000000
--- a/share/cmake-3.18/Help/envvar/CTEST_PROGRESS_OUTPUT.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-CTEST_PROGRESS_OUTPUT
----------------------
-
-.. include:: ENV_VAR.txt
-
-Boolean environment variable that affects how :manual:`ctest <ctest(1)>`
-command output reports overall progress.  When set to ``1``, ``TRUE``, ``ON`` or anything
-else that evaluates to boolean true, progress is reported by repeatedly
-updating the same line.  This greatly reduces the overall verbosity, but is
-only supported when output is sent directly to a terminal.  If the environment
-variable is not set or has a value that evaluates to false, output is reported
-normally with each test having its own start and end lines logged to the
-output.
-
-The ``--progress`` option to :manual:`ctest <ctest(1)>` overrides this
-environment variable if both are given.
diff --git a/share/cmake-3.18/Help/envvar/CUDACXX.rst b/share/cmake-3.18/Help/envvar/CUDACXX.rst
deleted file mode 100644
index 10c0f9d..0000000
--- a/share/cmake-3.18/Help/envvar/CUDACXX.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CUDACXX
--------
-
-.. include:: ENV_VAR.txt
-
-Preferred executable for compiling ``CUDA`` language files. Will only be used by
-CMake on the first configuration to determine ``CUDA`` compiler, after which the
-value for ``CUDA`` is stored in the cache as
-:variable:`CMAKE_CUDA_COMPILER <CMAKE_<LANG>_COMPILER>`. For any configuration
-run (including the first), the environment variable will be ignored if the
-:variable:`CMAKE_CUDA_COMPILER <CMAKE_<LANG>_COMPILER>` variable is defined.
diff --git a/share/cmake-3.18/Help/envvar/CUDAFLAGS.rst b/share/cmake-3.18/Help/envvar/CUDAFLAGS.rst
deleted file mode 100644
index 14c5d84..0000000
--- a/share/cmake-3.18/Help/envvar/CUDAFLAGS.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-CUDAFLAGS
----------
-
-.. include:: ENV_VAR.txt
-
-Default compilation flags to be used when compiling ``CUDA`` files. Will only be
-used by CMake on the first configuration to determine ``CUDA`` default
-compilation flags, after which the value for ``CUDAFLAGS`` is stored in the
-cache as :variable:`CMAKE_CUDA_FLAGS <CMAKE_<LANG>_FLAGS>`. For any configuration
-run (including the first), the environment variable will be ignored if
-the :variable:`CMAKE_CUDA_FLAGS <CMAKE_<LANG>_FLAGS>` variable is defined.
-
-See also :variable:`CMAKE_CUDA_FLAGS_INIT <CMAKE_<LANG>_FLAGS_INIT>`.
diff --git a/share/cmake-3.18/Help/envvar/CUDAHOSTCXX.rst b/share/cmake-3.18/Help/envvar/CUDAHOSTCXX.rst
deleted file mode 100644
index b9f65bd..0000000
--- a/share/cmake-3.18/Help/envvar/CUDAHOSTCXX.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-CUDAHOSTCXX
------------
-
-.. include:: ENV_VAR.txt
-
-Preferred executable for compiling host code when compiling ``CUDA``
-language files. Will only be used by CMake on the first configuration to
-determine ``CUDA`` host compiler, after which the value for ``CUDAHOSTCXX`` is
-stored in the cache as :variable:`CMAKE_CUDA_HOST_COMPILER`. For any
-configuration run (including the first), the environment variable will be
-ignored if the :variable:`CMAKE_CUDA_HOST_COMPILER` variable is defined.
-
-This environment variable is primarily meant for use with projects that
-enable ``CUDA`` as a first-class language.  The :module:`FindCUDA`
-module will also use it to initialize its ``CUDA_HOST_COMPILER`` setting.
diff --git a/share/cmake-3.18/Help/envvar/CXX.rst b/share/cmake-3.18/Help/envvar/CXX.rst
deleted file mode 100644
index d655350..0000000
--- a/share/cmake-3.18/Help/envvar/CXX.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CXX
----
-
-.. include:: ENV_VAR.txt
-
-Preferred executable for compiling ``CXX`` language files. Will only be used by
-CMake on the first configuration to determine ``CXX`` compiler, after which the
-value for ``CXX`` is stored in the cache as
-:variable:`CMAKE_CXX_COMPILER <CMAKE_<LANG>_COMPILER>`. For any configuration
-run (including the first), the environment variable will be ignored if the
-:variable:`CMAKE_CXX_COMPILER <CMAKE_<LANG>_COMPILER>` variable is defined.
diff --git a/share/cmake-3.18/Help/envvar/FC.rst b/share/cmake-3.18/Help/envvar/FC.rst
deleted file mode 100644
index d6cabbc..0000000
--- a/share/cmake-3.18/Help/envvar/FC.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-FC
---
-
-.. include:: ENV_VAR.txt
-
-Preferred executable for compiling ``Fortran`` language files. Will only be used
-by CMake on the first configuration to determine ``Fortran`` compiler, after
-which the value for ``Fortran`` is stored in the cache as
-:variable:`CMAKE_Fortran_COMPILER <CMAKE_<LANG>_COMPILER>`. For any
-configuration run (including the first), the environment variable will be
-ignored if the :variable:`CMAKE_Fortran_COMPILER <CMAKE_<LANG>_COMPILER>`
-variable is defined.
diff --git a/share/cmake-3.18/Help/envvar/OBJC.rst b/share/cmake-3.18/Help/envvar/OBJC.rst
deleted file mode 100644
index 30c0d13..0000000
--- a/share/cmake-3.18/Help/envvar/OBJC.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-OBJC
-----
-
-.. include:: ENV_VAR.txt
-
-Preferred executable for compiling ``OBJC`` language files. Will only be used
-by CMake on the first configuration to determine ``OBJC`` compiler, after
-which the value for ``OBJC`` is stored in the cache as
-:variable:`CMAKE_OBJC_COMPILER <CMAKE_<LANG>_COMPILER>`. For any configuration
-run (including the first), the environment variable will be ignored if the
-:variable:`CMAKE_OBJC_COMPILER <CMAKE_<LANG>_COMPILER>` variable is defined.
-
-If ``OBJC`` is not defined, the :envvar:`CC` environment variable will
-be checked instead.
diff --git a/share/cmake-3.18/Help/envvar/OBJCXX.rst b/share/cmake-3.18/Help/envvar/OBJCXX.rst
deleted file mode 100644
index a72f7e7..0000000
--- a/share/cmake-3.18/Help/envvar/OBJCXX.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-OBJCXX
-------
-
-.. include:: ENV_VAR.txt
-
-Preferred executable for compiling ``OBJCXX`` language files. Will only be used
-by CMake on the first configuration to determine ``OBJCXX`` compiler, after
-which the value for ``OBJCXX`` is stored in the cache as
-:variable:`CMAKE_OBJCXX_COMPILER <CMAKE_<LANG>_COMPILER>`. For any configuration
-run (including the first), the environment variable will be ignored if the
-:variable:`CMAKE_OBJCXX_COMPILER <CMAKE_<LANG>_COMPILER>` variable is defined.
-
-If ``OBJCXX`` is not defined, the :envvar:`CXX` environment variable will
-be checked instead.
diff --git a/share/cmake-3.18/Help/envvar/PackageName_ROOT.rst b/share/cmake-3.18/Help/envvar/PackageName_ROOT.rst
deleted file mode 100644
index 82b0a06..0000000
--- a/share/cmake-3.18/Help/envvar/PackageName_ROOT.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-<PackageName>_ROOT
-------------------
-
-.. include:: ENV_VAR.txt
-
-Calls to :command:`find_package(<PackageName>)` will search in prefixes
-specified by the ``<PackageName>_ROOT`` environment variable, where
-``<PackageName>`` is the name given to the :command:`find_package` call
-and ``_ROOT`` is literal.  For example, ``find_package(Foo)`` will search
-prefixes specified in the ``Foo_ROOT`` environment variable (if set).
-See policy :policy:`CMP0074`.
-
-This variable may hold a single prefix or a list of prefixes separated
-by ``:`` on UNIX or ``;`` on Windows (the same as the ``PATH`` environment
-variable convention on those platforms).
-
-See also the :variable:`<PackageName>_ROOT` CMake variable.
diff --git a/share/cmake-3.18/Help/envvar/RC.rst b/share/cmake-3.18/Help/envvar/RC.rst
deleted file mode 100644
index 557520e..0000000
--- a/share/cmake-3.18/Help/envvar/RC.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-RC
---
-
-.. include:: ENV_VAR.txt
-
-Preferred executable for compiling ``resource`` files. Will only be used by CMake
-on the first configuration to determine ``resource`` compiler, after which the
-value for ``RC`` is stored in the cache as
-:variable:`CMAKE_RC_COMPILER <CMAKE_<LANG>_COMPILER>`. For any configuration run
-(including the first), the environment variable will be ignored if the
-:variable:`CMAKE_RC_COMPILER <CMAKE_<LANG>_COMPILER>` variable is defined.
diff --git a/share/cmake-3.18/Help/envvar/SWIFTC.rst b/share/cmake-3.18/Help/envvar/SWIFTC.rst
deleted file mode 100644
index b12e51d..0000000
--- a/share/cmake-3.18/Help/envvar/SWIFTC.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-SWIFTC
-------
-
-.. include:: ENV_VAR.txt
-
-Preferred executable for compiling ``Swift`` language files. Will only be used by
-CMake on the first configuration to determine ``Swift`` compiler, after which the
-value for ``SWIFTC`` is stored in the cache as
-:variable:`CMAKE_Swift_COMPILER <CMAKE_<LANG>_COMPILER>`. For any configuration run
-(including the first), the environment variable will be ignored if the
-:variable:`CMAKE_Swift_COMPILER <CMAKE_<LANG>_COMPILER>` variable is defined.
diff --git a/share/cmake-3.18/Help/envvar/VERBOSE.rst b/share/cmake-3.18/Help/envvar/VERBOSE.rst
deleted file mode 100644
index 2d775a5..0000000
--- a/share/cmake-3.18/Help/envvar/VERBOSE.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-VERBOSE
--------
-
-Activates verbose output from CMake and your build tools of choice when
-you start to actually build your project.
-
-Note that any given value is ignored. It's just checked for existence.
-
-See also :ref:`Build Tool Mode <Build Tool Mode>` and
-:envvar:`CMAKE_NO_VERBOSE` environment variable
diff --git a/share/cmake-3.18/Help/generator/CodeBlocks.rst b/share/cmake-3.18/Help/generator/CodeBlocks.rst
deleted file mode 100644
index d830542..0000000
--- a/share/cmake-3.18/Help/generator/CodeBlocks.rst
+++ /dev/null
@@ -1,32 +0,0 @@
-CodeBlocks
-----------
-
-Generates CodeBlocks project files.
-
-Project files for CodeBlocks will be created in the top directory and
-in every subdirectory which features a ``CMakeLists.txt`` file containing
-a :command:`project` call.  Additionally a hierarchy of makefiles is generated
-into the build tree.
-The :variable:`CMAKE_CODEBLOCKS_EXCLUDE_EXTERNAL_FILES` variable may
-be set to ``ON`` to exclude any files which are located outside of
-the project root directory.
-The appropriate make program can build the
-project through the default ``all`` target.  An ``install`` target is
-also provided.
-
-This "extra" generator may be specified as:
-
-``CodeBlocks - MinGW Makefiles``
- Generate with :generator:`MinGW Makefiles`.
-
-``CodeBlocks - NMake Makefiles``
- Generate with :generator:`NMake Makefiles`.
-
-``CodeBlocks - NMake Makefiles JOM``
- Generate with :generator:`NMake Makefiles JOM`.
-
-``CodeBlocks - Ninja``
- Generate with :generator:`Ninja`.
-
-``CodeBlocks - Unix Makefiles``
- Generate with :generator:`Unix Makefiles`.
diff --git a/share/cmake-3.18/Help/generator/CodeLite.rst b/share/cmake-3.18/Help/generator/CodeLite.rst
deleted file mode 100644
index 46fa5be..0000000
--- a/share/cmake-3.18/Help/generator/CodeLite.rst
+++ /dev/null
@@ -1,28 +0,0 @@
-CodeLite
-----------
-
-Generates CodeLite project files.
-
-Project files for CodeLite will be created in the top directory and
-in every subdirectory which features a CMakeLists.txt file containing
-a :command:`project` call.
-The :variable:`CMAKE_CODELITE_USE_TARGETS` variable may be set to ``ON``
-to change the default behavior from projects to targets as the basis
-for project files.
-The appropriate make program can build the
-project through the default ``all`` target.  An ``install`` target
-is also provided.
-
-This "extra" generator may be specified as:
-
-``CodeLite - MinGW Makefiles``
- Generate with :generator:`MinGW Makefiles`.
-
-``CodeLite - NMake Makefiles``
- Generate with :generator:`NMake Makefiles`.
-
-``CodeLite - Ninja``
- Generate with :generator:`Ninja`.
-
-``CodeLite - Unix Makefiles``
- Generate with :generator:`Unix Makefiles`.
diff --git a/share/cmake-3.18/Help/generator/Green Hills MULTI.rst b/share/cmake-3.18/Help/generator/Green Hills MULTI.rst
deleted file mode 100644
index dffc679..0000000
--- a/share/cmake-3.18/Help/generator/Green Hills MULTI.rst
+++ /dev/null
@@ -1,69 +0,0 @@
-Green Hills MULTI
------------------
-
-Generates Green Hills MULTI project files (experimental, work-in-progress).
-
-The buildsystem has predetermined build-configuration settings that can be controlled
-via the :variable:`CMAKE_BUILD_TYPE` variable.
-
-Customizations that are used to pick toolset and target system:
-
-The ``-A <arch>`` can be supplied for setting the target architecture.
-``<arch>`` usually is one of ``arm``, ``ppc``, ``86``, etcetera.
-If the target architecture is not specified then
-the default architecture of ``arm`` will be used.
-
-The ``-T <toolset>`` option can be used to set the directory location of the toolset.
-Both absolute and relative paths are valid. Relative paths use ``GHS_TOOLSET_ROOT``
-as the root. If the toolset is not specified then the latest toolset found in
-``GHS_TOOLSET_ROOT`` will be used.
-
-Cache variables that are used for toolset and target system customization:
-
-* ``GHS_TARGET_PLATFORM``
-
-  | Defaults to ``integrity``.
-  | Usual values are ``integrity``, ``threadx``, ``uvelosity``, ``velosity``,
-    ``vxworks``, ``standalone``.
-
-* ``GHS_PRIMARY_TARGET``
-
-  | Sets ``primaryTarget`` entry in project file.
-  | Defaults to ``<arch>_<GHS_TARGET_PLATFORM>.tgt``.
-
-* ``GHS_TOOLSET_ROOT``
-
-  | Root path for ``toolset`` searches.
-  | Defaults to ``C:/ghs`` in Windows or ``/usr/ghs`` in Linux.
-
-* ``GHS_OS_ROOT``
-
-  | Root path for RTOS searches.
-  | Defaults to ``C:/ghs`` in Windows or ``/usr/ghs`` in Linux.
-
-* ``GHS_OS_DIR`` and ``GHS_OS_DIR_OPTION``
-
-  | Sets ``-os_dir`` entry in project file.
-  | Defaults to latest platform OS installation at ``GHS_OS_ROOT``.  Set this value if
-    a specific RTOS is to be used.
-  | ``GHS_OS_DIR_OPTION`` default value is ``-os_dir``.
-
-* ``GHS_BSP_NAME``
-
-  | Sets ``-bsp`` entry in project file.
-  | Defaults to ``sim<arch>`` for ``integrity`` platforms.
-
-Customizations are available through the following cache variables:
-
-* ``GHS_CUSTOMIZATION``
-* ``GHS_GPJ_MACROS``
-
-The following properties are available:
-
-* :prop_tgt:`GHS_INTEGRITY_APP`
-* :prop_tgt:`GHS_NO_SOURCE_GROUP_FILE`
-
-.. note::
-  This generator is deemed experimental as of CMake |release|
-  and is still a work in progress.  Future versions of CMake
-  may make breaking changes as the generator matures.
diff --git a/share/cmake-3.18/Help/generator/NMake Makefiles JOM.rst b/share/cmake-3.18/Help/generator/NMake Makefiles JOM.rst
deleted file mode 100644
index 3a8744c..0000000
--- a/share/cmake-3.18/Help/generator/NMake Makefiles JOM.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-NMake Makefiles JOM
--------------------
-
-Generates JOM makefiles.
diff --git a/share/cmake-3.18/Help/generator/Ninja Multi-Config.rst b/share/cmake-3.18/Help/generator/Ninja Multi-Config.rst
deleted file mode 100644
index f480eb8..0000000
--- a/share/cmake-3.18/Help/generator/Ninja Multi-Config.rst
+++ /dev/null
@@ -1,87 +0,0 @@
-Ninja Multi-Config
-------------------
-
-Generates multiple ``build-<Config>.ninja`` files.
-
-This generator is very much like the :generator:`Ninja` generator, but with
-some key differences. Only these differences will be discussed in this
-document.
-
-Unlike the :generator:`Ninja` generator, ``Ninja Multi-Config`` generates
-multiple configurations at once with :variable:`CMAKE_CONFIGURATION_TYPES`
-instead of only one configuration with :variable:`CMAKE_BUILD_TYPE`. One
-``build-<Config>.ninja`` file will be generated for each of these
-configurations (with ``<Config>`` being the configuration name.) These files
-are intended to be run with ``ninja -f build-<Config>.ninja``. A
-``build.ninja`` file is also generated, using the configuration from either
-:variable:`CMAKE_DEFAULT_BUILD_TYPE` or the first item from
-:variable:`CMAKE_CONFIGURATION_TYPES`.
-
-``cmake --build . --config <Config>`` will always use ``build-<Config>.ninja``
-to build. If no ``--config`` argument is specified, ``cmake --build .`` will
-default to ``build-Debug.ninja``, unless a ``build.ninja`` is generated (see
-below), in which case that will be used instead.
-
-Each ``build-<Config>.ninja`` file contains ``<target>`` targets as well as
-``<target>:<Config>`` targets, where ``<Config>`` is the same as the
-configuration specified in ``build-<Config>.ninja`` Additionally, if
-cross-config mode is enabled, ``build-<Config>.ninja`` may contain
-``<target>:<OtherConfig>`` targets, where ``<OtherConfig>`` is a cross-config,
-as well as ``<target>:all``, which builds the target in all cross-configs. See
-below for how to enable cross-config mode.
-
-The ``Ninja Multi-Config`` generator recognizes the following variables:
-
-:variable:`CMAKE_CONFIGURATION_TYPES`
-  Specifies the total set of configurations to build.
-
-:variable:`CMAKE_CROSS_CONFIGS`
-  Specifies a :ref:`semicolon-separated list <CMake Language Lists>` of
-  configurations available from all ``build-<Config>.ninja`` files.
-
-:variable:`CMAKE_DEFAULT_BUILD_TYPE`
-  Specifies the configuration to use by default in a ``build.ninja`` file.
-
-:variable:`CMAKE_DEFAULT_CONFIGS`
-  Specifies a :ref:`semicolon-separated list <CMake Language Lists>` of
-  configurations to build for a target in ``build.ninja``
-  if no ``:<Config>`` suffix is specified.
-
-Consider the following example:
-
-.. code-block:: cmake
-
-  cmake_minimum_required(VERSION 3.16)
-  project(MultiConfigNinja C)
-
-  add_executable(generator generator.c)
-  add_custom_command(OUTPUT generated.c COMMAND generator generated.c)
-  add_library(generated ${CMAKE_BINARY_DIR}/generated.c)
-
-Now assume you configure the project with ``Ninja Multi-Config`` and run one of
-the following commands:
-
-.. code-block:: shell
-
-  ninja -f build-Debug.ninja generated
-  # OR
-  cmake --build . --config Debug --target generated
-
-This would build the ``Debug`` configuration of ``generator``, which would be
-used to generate ``generated.c``, which would be used to build the ``Debug``
-configuration of ``generated``.
-
-But if :variable:`CMAKE_CROSS_CONFIGS` is set to ``all``, and you run the
-following instead:
-
-.. code-block:: shell
-
-  ninja -f build-Release.ninja generated:Debug
-  # OR
-  cmake --build . --config Release --target generated:Debug
-
-This would build the ``Release`` configuration of ``generator``, which would be
-used to generate ``generated.c``, which would be used to build the ``Debug``
-configuration of ``generated``. This is useful for running a release-optimized
-version of a generator utility while still building the debug version of the
-targets built with the generated code.
diff --git a/share/cmake-3.18/Help/generator/Ninja.rst b/share/cmake-3.18/Help/generator/Ninja.rst
deleted file mode 100644
index 08ee81b..0000000
--- a/share/cmake-3.18/Help/generator/Ninja.rst
+++ /dev/null
@@ -1,42 +0,0 @@
-Ninja
------
-
-Generates ``build.ninja`` files.
-
-A ``build.ninja`` file is generated into the build tree.  Use the ninja
-program to build the project through the ``all`` target and install the
-project through the ``install`` (or ``install/strip``) target.
-
-For each subdirectory ``sub/dir`` of the project, additional targets
-are generated:
-
-``sub/dir/all``
-  Depends on all targets required by the subdirectory.
-
-``sub/dir/install``
-  Runs the install step in the subdirectory, if any.
-
-``sub/dir/install/strip``
-  Runs the install step in the subdirectory followed by a ``CMAKE_STRIP`` command,
-  if any.
-
-  The ``CMAKE_STRIP`` variable will contain the platform's ``strip`` utility, which
-  removes symbols information from generated binaries.
-
-``sub/dir/test``
-  Runs the test step in the subdirectory, if any.
-
-``sub/dir/package``
-  Runs the package step in the subdirectory, if any.
-
-Fortran Support
-^^^^^^^^^^^^^^^
-
-The ``Ninja`` generator conditionally supports Fortran when the ``ninja``
-tool is at least version 1.10 (which has the required features).
-
-See Also
-^^^^^^^^
-
-The :generator:`Ninja Multi-Config` generator is similar to the ``Ninja``
-generator, but generates multiple configurations at once.
diff --git a/share/cmake-3.18/Help/generator/Visual Studio 10 2010.rst b/share/cmake-3.18/Help/generator/Visual Studio 10 2010.rst
deleted file mode 100644
index 4bf9a8f..0000000
--- a/share/cmake-3.18/Help/generator/Visual Studio 10 2010.rst
+++ /dev/null
@@ -1,43 +0,0 @@
-Visual Studio 10 2010
----------------------
-
-Generates Visual Studio 10 (VS 2010) project files.
-
-For compatibility with CMake versions prior to 3.0, one may specify this
-generator using the name ``Visual Studio 10`` without the year component.
-
-Project Types
-^^^^^^^^^^^^^
-
-Only Visual C++ and C# projects may be generated.  Other types of
-projects (Database, Website, etc.) are not supported.
-
-Platform Selection
-^^^^^^^^^^^^^^^^^^
-
-The default target platform name (architecture) is ``Win32``.
-
-The :variable:`CMAKE_GENERATOR_PLATFORM` variable may be set, perhaps
-via the :manual:`cmake(1)` ``-A`` option, to specify a target platform
-name (architecture).  For example:
-
-* ``cmake -G "Visual Studio 10 2010" -A Win32``
-* ``cmake -G "Visual Studio 10 2010" -A x64``
-* ``cmake -G "Visual Studio 10 2010" -A Itanium``
-
-For compatibility with CMake versions prior to 3.1, one may specify
-a target platform name optionally at the end of the generator name.
-This is supported only for:
-
-``Visual Studio 10 2010 Win64``
-  Specify target platform ``x64``.
-
-``Visual Studio 10 2010 IA64``
-  Specify target platform ``Itanium``.
-
-Toolset Selection
-^^^^^^^^^^^^^^^^^
-
-The ``v100`` toolset that comes with Visual Studio 10 2010 is selected by
-default.  The :variable:`CMAKE_GENERATOR_TOOLSET` option may be set, perhaps
-via the :manual:`cmake(1)` ``-T`` option, to specify another toolset.
diff --git a/share/cmake-3.18/Help/generator/Visual Studio 11 2012.rst b/share/cmake-3.18/Help/generator/Visual Studio 11 2012.rst
deleted file mode 100644
index 5d89a6e..0000000
--- a/share/cmake-3.18/Help/generator/Visual Studio 11 2012.rst
+++ /dev/null
@@ -1,48 +0,0 @@
-Visual Studio 11 2012
----------------------
-
-Generates Visual Studio 11 (VS 2012) project files.
-
-For compatibility with CMake versions prior to 3.0, one may specify this
-generator using the name "Visual Studio 11" without the year component.
-
-Project Types
-^^^^^^^^^^^^^
-
-Only Visual C++ and C# projects may be generated.  Other types of
-projects (JavaScript, Database, Website, etc.) are not supported.
-
-Platform Selection
-^^^^^^^^^^^^^^^^^^
-
-The default target platform name (architecture) is ``Win32``.
-
-The :variable:`CMAKE_GENERATOR_PLATFORM` variable may be set, perhaps
-via the :manual:`cmake(1)` ``-A`` option, to specify a target platform
-name (architecture).  For example:
-
-* ``cmake -G "Visual Studio 11 2012" -A Win32``
-* ``cmake -G "Visual Studio 11 2012" -A x64``
-* ``cmake -G "Visual Studio 11 2012" -A ARM``
-* ``cmake -G "Visual Studio 11 2012" -A <WinCE-SDK>``
-  (Specify a target platform matching a Windows CE SDK name.)
-
-For compatibility with CMake versions prior to 3.1, one may specify
-a target platform name optionally at the end of the generator name.
-This is supported only for:
-
-``Visual Studio 11 2012 Win64``
-  Specify target platform ``x64``.
-
-``Visual Studio 11 2012 ARM``
-  Specify target platform ``ARM``.
-
-``Visual Studio 11 2012 <WinCE-SDK>``
-  Specify target platform matching a Windows CE SDK name.
-
-Toolset Selection
-^^^^^^^^^^^^^^^^^
-
-The ``v110`` toolset that comes with Visual Studio 11 2012 is selected by
-default.  The :variable:`CMAKE_GENERATOR_TOOLSET` option may be set, perhaps
-via the :manual:`cmake(1)` ``-T`` option, to specify another toolset.
diff --git a/share/cmake-3.18/Help/generator/Visual Studio 12 2013.rst b/share/cmake-3.18/Help/generator/Visual Studio 12 2013.rst
deleted file mode 100644
index fb8e021..0000000
--- a/share/cmake-3.18/Help/generator/Visual Studio 12 2013.rst
+++ /dev/null
@@ -1,48 +0,0 @@
-Visual Studio 12 2013
----------------------
-
-Generates Visual Studio 12 (VS 2013) project files.
-
-For compatibility with CMake versions prior to 3.0, one may specify this
-generator using the name "Visual Studio 12" without the year component.
-
-Project Types
-^^^^^^^^^^^^^
-
-Only Visual C++ and C# projects may be generated.  Other types of
-projects (JavaScript, Powershell, Python, etc.) are not supported.
-
-Platform Selection
-^^^^^^^^^^^^^^^^^^
-
-The default target platform name (architecture) is ``Win32``.
-
-The :variable:`CMAKE_GENERATOR_PLATFORM` variable may be set, perhaps
-via the :manual:`cmake(1)` ``-A`` option, to specify a target platform
-name (architecture).  For example:
-
-* ``cmake -G "Visual Studio 12 2013" -A Win32``
-* ``cmake -G "Visual Studio 12 2013" -A x64``
-* ``cmake -G "Visual Studio 12 2013" -A ARM``
-
-For compatibility with CMake versions prior to 3.1, one may specify
-a target platform name optionally at the end of the generator name.
-This is supported only for:
-
-``Visual Studio 12 2013 Win64``
-  Specify target platform ``x64``.
-
-``Visual Studio 12 2013 ARM``
-  Specify target platform ``ARM``.
-
-Toolset Selection
-^^^^^^^^^^^^^^^^^
-
-The ``v120`` toolset that comes with Visual Studio 12 2013 is selected by
-default.  The :variable:`CMAKE_GENERATOR_TOOLSET` option may be set, perhaps
-via the :manual:`cmake(1)` ``-T`` option, to specify another toolset.
-
-.. |VS_TOOLSET_HOST_ARCH_DEFAULT| replace::
-   By default this generator uses the 32-bit variant even on a 64-bit host.
-
-.. include:: VS_TOOLSET_HOST_ARCH.txt
diff --git a/share/cmake-3.18/Help/generator/Visual Studio 14 2015.rst b/share/cmake-3.18/Help/generator/Visual Studio 14 2015.rst
deleted file mode 100644
index 7383f7a..0000000
--- a/share/cmake-3.18/Help/generator/Visual Studio 14 2015.rst
+++ /dev/null
@@ -1,45 +0,0 @@
-Visual Studio 14 2015
----------------------
-
-Generates Visual Studio 14 (VS 2015) project files.
-
-Project Types
-^^^^^^^^^^^^^
-
-Only Visual C++ and C# projects may be generated.  Other types of
-projects (JavaScript, Powershell, Python, etc.) are not supported.
-
-Platform Selection
-^^^^^^^^^^^^^^^^^^
-
-The default target platform name (architecture) is ``Win32``.
-
-The :variable:`CMAKE_GENERATOR_PLATFORM` variable may be set, perhaps
-via the :manual:`cmake(1)` ``-A`` option, to specify a target platform
-name (architecture).  For example:
-
-* ``cmake -G "Visual Studio 14 2015" -A Win32``
-* ``cmake -G "Visual Studio 14 2015" -A x64``
-* ``cmake -G "Visual Studio 14 2015" -A ARM``
-
-For compatibility with CMake versions prior to 3.1, one may specify
-a target platform name optionally at the end of the generator name.
-This is supported only for:
-
-``Visual Studio 14 2015 Win64``
-  Specify target platform ``x64``.
-
-``Visual Studio 14 2015 ARM``
-  Specify target platform ``ARM``.
-
-Toolset Selection
-^^^^^^^^^^^^^^^^^
-
-The ``v140`` toolset that comes with Visual Studio 14 2015 is selected by
-default.  The :variable:`CMAKE_GENERATOR_TOOLSET` option may be set, perhaps
-via the :manual:`cmake(1)` ``-T`` option, to specify another toolset.
-
-.. |VS_TOOLSET_HOST_ARCH_DEFAULT| replace::
-   By default this generator uses the 32-bit variant even on a 64-bit host.
-
-.. include:: VS_TOOLSET_HOST_ARCH.txt
diff --git a/share/cmake-3.18/Help/generator/Visual Studio 15 2017.rst b/share/cmake-3.18/Help/generator/Visual Studio 15 2017.rst
deleted file mode 100644
index 7e6f0fb..0000000
--- a/share/cmake-3.18/Help/generator/Visual Studio 15 2017.rst
+++ /dev/null
@@ -1,62 +0,0 @@
-Visual Studio 15 2017
----------------------
-
-Generates Visual Studio 15 (VS 2017) project files.
-
-Project Types
-^^^^^^^^^^^^^
-
-Only Visual C++ and C# projects may be generated.  Other types of
-projects (JavaScript, Powershell, Python, etc.) are not supported.
-
-Instance Selection
-^^^^^^^^^^^^^^^^^^
-
-VS 2017 supports multiple installations on the same machine.
-The :variable:`CMAKE_GENERATOR_INSTANCE` variable may be set as a
-cache entry containing the absolute path to a Visual Studio instance.
-If the value is not specified explicitly by the user or a toolchain file,
-CMake queries the Visual Studio Installer to locate VS instances, chooses
-one, and sets the variable as a cache entry to hold the value persistently.
-
-When CMake first chooses an instance, if the ``VS150COMNTOOLS`` environment
-variable is set and points to the ``Common7/Tools`` directory within
-one of the instances, that instance will be used.  Otherwise, if more
-than one instance is installed we do not define which one is chosen
-by default.
-
-Platform Selection
-^^^^^^^^^^^^^^^^^^
-
-The default target platform name (architecture) is ``Win32``.
-
-The :variable:`CMAKE_GENERATOR_PLATFORM` variable may be set, perhaps
-via the :manual:`cmake(1)` ``-A`` option, to specify a target platform
-name (architecture).  For example:
-
-* ``cmake -G "Visual Studio 15 2017" -A Win32``
-* ``cmake -G "Visual Studio 15 2017" -A x64``
-* ``cmake -G "Visual Studio 15 2017" -A ARM``
-* ``cmake -G "Visual Studio 15 2017" -A ARM64``
-
-For compatibility with CMake versions prior to 3.1, one may specify
-a target platform name optionally at the end of the generator name.
-This is supported only for:
-
-``Visual Studio 15 2017 Win64``
-  Specify target platform ``x64``.
-
-``Visual Studio 15 2017 ARM``
-  Specify target platform ``ARM``.
-
-Toolset Selection
-^^^^^^^^^^^^^^^^^
-
-The ``v141`` toolset that comes with Visual Studio 15 2017 is selected by
-default.  The :variable:`CMAKE_GENERATOR_TOOLSET` option may be set, perhaps
-via the :manual:`cmake(1)` ``-T`` option, to specify another toolset.
-
-.. |VS_TOOLSET_HOST_ARCH_DEFAULT| replace::
-   By default this generator uses the 32-bit variant even on a 64-bit host.
-
-.. include:: VS_TOOLSET_HOST_ARCH.txt
diff --git a/share/cmake-3.18/Help/generator/Visual Studio 16 2019.rst b/share/cmake-3.18/Help/generator/Visual Studio 16 2019.rst
deleted file mode 100644
index 4aec7f7..0000000
--- a/share/cmake-3.18/Help/generator/Visual Studio 16 2019.rst
+++ /dev/null
@@ -1,54 +0,0 @@
-Visual Studio 16 2019
----------------------
-
-Generates Visual Studio 16 (VS 2019) project files.
-
-Project Types
-^^^^^^^^^^^^^
-
-Only Visual C++ and C# projects may be generated.  Other types of
-projects (JavaScript, Powershell, Python, etc.) are not supported.
-
-Instance Selection
-^^^^^^^^^^^^^^^^^^
-
-VS 2019 supports multiple installations on the same machine.
-The :variable:`CMAKE_GENERATOR_INSTANCE` variable may be set as a
-cache entry containing the absolute path to a Visual Studio instance.
-If the value is not specified explicitly by the user or a toolchain file,
-CMake queries the Visual Studio Installer to locate VS instances, chooses
-one, and sets the variable as a cache entry to hold the value persistently.
-
-When CMake first chooses an instance, if the ``VS160COMNTOOLS`` environment
-variable is set and points to the ``Common7/Tools`` directory within
-one of the instances, that instance will be used.  Otherwise, if more
-than one instance is installed we do not define which one is chosen
-by default.
-
-Platform Selection
-^^^^^^^^^^^^^^^^^^
-
-The default target platform name (architecture) is that of the host
-and is provided in the :variable:`CMAKE_VS_PLATFORM_NAME_DEFAULT` variable.
-
-The :variable:`CMAKE_GENERATOR_PLATFORM` variable may be set, perhaps
-via the :manual:`cmake(1)` ``-A`` option, to specify a target platform
-name (architecture).  For example:
-
-* ``cmake -G "Visual Studio 16 2019" -A Win32``
-* ``cmake -G "Visual Studio 16 2019" -A x64``
-* ``cmake -G "Visual Studio 16 2019" -A ARM``
-* ``cmake -G "Visual Studio 16 2019" -A ARM64``
-
-Toolset Selection
-^^^^^^^^^^^^^^^^^
-
-The ``v142`` toolset that comes with Visual Studio 16 2019 is selected by
-default.  The :variable:`CMAKE_GENERATOR_TOOLSET` option may be set, perhaps
-via the :manual:`cmake(1)` ``-T`` option, to specify another toolset.
-
-.. |VS_TOOLSET_HOST_ARCH_DEFAULT| replace::
-   By default this generator uses the 64-bit variant on x64 hosts and
-   the 32-bit variant otherwise.
-
-.. include:: VS_TOOLSET_HOST_ARCH.txt
diff --git a/share/cmake-3.18/Help/generator/Visual Studio 9 2008.rst b/share/cmake-3.18/Help/generator/Visual Studio 9 2008.rst
deleted file mode 100644
index a09d047..0000000
--- a/share/cmake-3.18/Help/generator/Visual Studio 9 2008.rst
+++ /dev/null
@@ -1,32 +0,0 @@
-Visual Studio 9 2008
---------------------
-
-Generates Visual Studio 9 2008 project files.
-
-Platform Selection
-^^^^^^^^^^^^^^^^^^
-
-The default target platform name (architecture) is ``Win32``.
-
-The :variable:`CMAKE_GENERATOR_PLATFORM` variable may be set, perhaps
-via the :manual:`cmake(1)` ``-A`` option, to specify a target platform
-name (architecture).  For example:
-
-* ``cmake -G "Visual Studio 9 2008" -A Win32``
-* ``cmake -G "Visual Studio 9 2008" -A x64``
-* ``cmake -G "Visual Studio 9 2008" -A Itanium``
-* ``cmake -G "Visual Studio 9 2008" -A <WinCE-SDK>``
-  (Specify a target platform matching a Windows CE SDK name.)
-
-For compatibility with CMake versions prior to 3.1, one may specify
-a target platform name optionally at the end of the generator name.
-This is supported only for:
-
-``Visual Studio 9 2008 Win64``
-  Specify target platform ``x64``.
-
-``Visual Studio 9 2008 IA64``
-  Specify target platform ``Itanium``.
-
-``Visual Studio 9 2008 <WinCE-SDK>``
-  Specify target platform matching a Windows CE SDK name.
diff --git a/share/cmake-3.18/Help/generator/Xcode.rst b/share/cmake-3.18/Help/generator/Xcode.rst
deleted file mode 100644
index d893ac5..0000000
--- a/share/cmake-3.18/Help/generator/Xcode.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-Xcode
------
-
-Generate Xcode project files.
-
-This supports Xcode 5.0 and above.
-
-Toolset Selection
-^^^^^^^^^^^^^^^^^
-
-By default Xcode is allowed to select its own default toolchain.
-The :variable:`CMAKE_GENERATOR_TOOLSET` option may be set, perhaps
-via the :manual:`cmake(1)` ``-T`` option, to specify another toolset.
diff --git a/share/cmake-3.18/Help/index.rst b/share/cmake-3.18/Help/index.rst
deleted file mode 100644
index 4d9a9c8..0000000
--- a/share/cmake-3.18/Help/index.rst
+++ /dev/null
@@ -1,104 +0,0 @@
-.. title:: CMake Reference Documentation
-
-Introduction
-############
-
-CMake is a tool to manage building of source code.  Originally, CMake was
-designed as a generator for various dialects of ``Makefile``, today
-CMake generates modern buildsystems such as ``Ninja`` as well as project
-files for IDEs such as Visual Studio and Xcode.
-
-CMake is widely used for the C and C++ languages, but it may be used to
-build source code of other languages too.
-
-People encountering CMake for the first time may have different initial
-goals.  To learn how to build a source code package downloaded from the
-internet, start with the :guide:`User Interaction Guide`.
-This will detail the steps needed to run the :manual:`cmake(1)` or
-:manual:`cmake-gui(1)` executable and how to choose a generator, and
-how to complete the build.
-
-The :guide:`Using Dependencies Guide` is aimed at developers
-wishing to get started using a third-party library.
-
-For developers starting a project using CMake, the :guide:`CMake Tutorial`
-is a suitable starting point.  The :manual:`cmake-buildsystem(7)`
-manual is aimed at developers expanding their knowledge of maintaining
-a buildsystem and becoming familiar with the build targets that
-can be represented in CMake.  The :manual:`cmake-packages(7)` manual
-explains how to create packages which can easily be consumed by
-third-party CMake-based buildsystems.
-
-Command-Line Tools
-##################
-
-.. toctree::
-   :maxdepth: 1
-
-   /manual/cmake.1
-   /manual/ctest.1
-   /manual/cpack.1
-
-Interactive Dialogs
-###################
-
-.. toctree::
-   :maxdepth: 1
-
-   /manual/cmake-gui.1
-   /manual/ccmake.1
-
-Reference Manuals
-#################
-
-.. toctree::
-   :maxdepth: 1
-
-   /manual/cmake-buildsystem.7
-   /manual/cmake-commands.7
-   /manual/cmake-compile-features.7
-   /manual/cmake-developer.7
-   /manual/cmake-env-variables.7
-   /manual/cmake-file-api.7
-   /manual/cmake-generator-expressions.7
-   /manual/cmake-generators.7
-   /manual/cmake-language.7
-   /manual/cmake-modules.7
-   /manual/cmake-packages.7
-   /manual/cmake-policies.7
-   /manual/cmake-properties.7
-   /manual/cmake-qt.7
-   /manual/cmake-server.7
-   /manual/cmake-toolchains.7
-   /manual/cmake-variables.7
-   /manual/cpack-generators.7
-
-.. only:: not man
-
- Guides
- ######
-
- .. toctree::
-    :maxdepth: 1
-
-    /guide/tutorial/index
-    /guide/user-interaction/index
-    /guide/using-dependencies/index
-
-.. only:: html or text
-
- Release Notes
- #############
-
- .. toctree::
-    :maxdepth: 1
-
-    /release/index
-
-.. only:: html
-
- Index and Search
- ################
-
- * :ref:`genindex`
- * :ref:`search`
diff --git a/share/cmake-3.18/Help/manual/OPTIONS_BUILD.txt b/share/cmake-3.18/Help/manual/OPTIONS_BUILD.txt
deleted file mode 100644
index 0947e41..0000000
--- a/share/cmake-3.18/Help/manual/OPTIONS_BUILD.txt
+++ /dev/null
@@ -1,126 +0,0 @@
-``-S <path-to-source>``
- Path to root directory of the CMake project to build.
-
-``-B <path-to-build>``
- Path to directory which CMake will use as the root of build directory.
-
- If the directory doesn't already exist CMake will make it.
-
-``-C <initial-cache>``
- Pre-load a script to populate the cache.
-
- When CMake is first run in an empty build tree, it creates a
- ``CMakeCache.txt`` file and populates it with customizable settings for
- the project.  This option may be used to specify a file from which
- to load cache entries before the first pass through the project's
- CMake listfiles.  The loaded entries take priority over the
- project's default values.  The given file should be a CMake script
- containing :command:`set` commands that use the ``CACHE`` option, not a
- cache-format file.
-
- References to :variable:`CMAKE_SOURCE_DIR` and :variable:`CMAKE_BINARY_DIR`
- within the script evaluate to the top-level source and build tree.
-
-``-D <var>:<type>=<value>, -D <var>=<value>``
- Create or update a CMake ``CACHE`` entry.
-
- When CMake is first run in an empty build tree, it creates a
- ``CMakeCache.txt`` file and populates it with customizable settings for
- the project.  This option may be used to specify a setting that
- takes priority over the project's default value.  The option may be
- repeated for as many ``CACHE`` entries as desired.
-
- If the ``:<type>`` portion is given it must be one of the types
- specified by the :command:`set` command documentation for its
- ``CACHE`` signature.
- If the ``:<type>`` portion is omitted the entry will be created
- with no type if it does not exist with a type already.  If a
- command in the project sets the type to ``PATH`` or ``FILEPATH``
- then the ``<value>`` will be converted to an absolute path.
-
- This option may also be given as a single argument:
- ``-D<var>:<type>=<value>`` or ``-D<var>=<value>``.
-
-``-U <globbing_expr>``
- Remove matching entries from CMake ``CACHE``.
-
- This option may be used to remove one or more variables from the
- ``CMakeCache.txt`` file, globbing expressions using ``*`` and ``?`` are
- supported.  The option may be repeated for as many ``CACHE`` entries as
- desired.
-
- Use with care, you can make your ``CMakeCache.txt`` non-working.
-
-``-G <generator-name>``
- Specify a build system generator.
-
- CMake may support multiple native build systems on certain
- platforms.  A generator is responsible for generating a particular
- build system.  Possible generator names are specified in the
- :manual:`cmake-generators(7)` manual.
-
- If not specified, CMake checks the :envvar:`CMAKE_GENERATOR` environment
- variable and otherwise falls back to a builtin default selection.
-
-``-T <toolset-spec>``
- Toolset specification for the generator, if supported.
-
- Some CMake generators support a toolset specification to tell
- the native build system how to choose a compiler.  See the
- :variable:`CMAKE_GENERATOR_TOOLSET` variable for details.
-
-``-A <platform-name>``
- Specify platform name if supported by generator.
-
- Some CMake generators support a platform name to be given to the
- native build system to choose a compiler or SDK.  See the
- :variable:`CMAKE_GENERATOR_PLATFORM` variable for details.
-
-``-Wno-dev``
- Suppress developer warnings.
-
- Suppress warnings that are meant for the author of the
- ``CMakeLists.txt`` files. By default this will also turn off
- deprecation warnings.
-
-``-Wdev``
- Enable developer warnings.
-
- Enable warnings that are meant for the author of the ``CMakeLists.txt``
- files. By default this will also turn on deprecation warnings.
-
-``-Werror=dev``
- Make developer warnings errors.
-
- Make warnings that are meant for the author of the ``CMakeLists.txt`` files
- errors. By default this will also turn on deprecated warnings as errors.
-
-``-Wno-error=dev``
- Make developer warnings not errors.
-
- Make warnings that are meant for the author of the ``CMakeLists.txt`` files not
- errors. By default this will also turn off deprecated warnings as errors.
-
-``-Wdeprecated``
- Enable deprecated functionality warnings.
-
- Enable warnings for usage of deprecated functionality, that are meant
- for the author of the ``CMakeLists.txt`` files.
-
-``-Wno-deprecated``
- Suppress deprecated functionality warnings.
-
- Suppress warnings for usage of deprecated functionality, that are meant
- for the author of the ``CMakeLists.txt`` files.
-
-``-Werror=deprecated``
- Make deprecated macro and function warnings errors.
-
- Make warnings for usage of deprecated macros and functions, that are meant
- for the author of the ``CMakeLists.txt`` files, errors.
-
-``-Wno-error=deprecated``
- Make deprecated macro and function warnings not errors.
-
- Make warnings for usage of deprecated macros and functions, that are meant
- for the author of the ``CMakeLists.txt`` files, not errors.
diff --git a/share/cmake-3.18/Help/manual/VS-Choose-Arch.png b/share/cmake-3.18/Help/manual/VS-Choose-Arch.png
deleted file mode 100644
index 816b0f4..0000000
--- a/share/cmake-3.18/Help/manual/VS-Choose-Arch.png
+++ /dev/null
Binary files differ
diff --git a/share/cmake-3.18/Help/manual/cmake-buildsystem.7.rst b/share/cmake-3.18/Help/manual/cmake-buildsystem.7.rst
deleted file mode 100644
index d8142a2..0000000
--- a/share/cmake-3.18/Help/manual/cmake-buildsystem.7.rst
+++ /dev/null
@@ -1,1011 +0,0 @@
-.. cmake-manual-description: CMake Buildsystem Reference
-
-cmake-buildsystem(7)
-********************
-
-.. only:: html
-
-   .. contents::
-
-Introduction
-============
-
-A CMake-based buildsystem is organized as a set of high-level logical
-targets.  Each target corresponds to an executable or library, or
-is a custom target containing custom commands.  Dependencies between the
-targets are expressed in the buildsystem to determine the build order
-and the rules for regeneration in response to change.
-
-Binary Targets
-==============
-
-Executables and libraries are defined using the :command:`add_executable`
-and :command:`add_library` commands.  The resulting binary files have
-appropriate :prop_tgt:`PREFIX`, :prop_tgt:`SUFFIX` and extensions for the platform targeted.
-Dependencies between binary targets are expressed using the
-:command:`target_link_libraries` command:
-
-.. code-block:: cmake
-
-  add_library(archive archive.cpp zip.cpp lzma.cpp)
-  add_executable(zipapp zipapp.cpp)
-  target_link_libraries(zipapp archive)
-
-``archive`` is defined as a ``STATIC`` library -- an archive containing objects
-compiled from ``archive.cpp``, ``zip.cpp``, and ``lzma.cpp``.  ``zipapp``
-is defined as an executable formed by compiling and linking ``zipapp.cpp``.
-When linking the ``zipapp`` executable, the ``archive`` static library is
-linked in.
-
-Binary Executables
-------------------
-
-The :command:`add_executable` command defines an executable target:
-
-.. code-block:: cmake
-
-  add_executable(mytool mytool.cpp)
-
-Commands such as :command:`add_custom_command`, which generates rules to be
-run at build time can transparently use an :prop_tgt:`EXECUTABLE <TYPE>`
-target as a ``COMMAND`` executable.  The buildsystem rules will ensure that
-the executable is built before attempting to run the command.
-
-Binary Library Types
---------------------
-
-.. _`Normal Libraries`:
-
-Normal Libraries
-^^^^^^^^^^^^^^^^
-
-By default, the :command:`add_library` command defines a ``STATIC`` library,
-unless a type is specified.  A type may be specified when using the command:
-
-.. code-block:: cmake
-
-  add_library(archive SHARED archive.cpp zip.cpp lzma.cpp)
-
-.. code-block:: cmake
-
-  add_library(archive STATIC archive.cpp zip.cpp lzma.cpp)
-
-The :variable:`BUILD_SHARED_LIBS` variable may be enabled to change the
-behavior of :command:`add_library` to build shared libraries by default.
-
-In the context of the buildsystem definition as a whole, it is largely
-irrelevant whether particular libraries are ``SHARED`` or ``STATIC`` --
-the commands, dependency specifications and other APIs work similarly
-regardless of the library type.  The ``MODULE`` library type is
-dissimilar in that it is generally not linked to -- it is not used in
-the right-hand-side of the :command:`target_link_libraries` command.
-It is a type which is loaded as a plugin using runtime techniques.
-If the library does not export any unmanaged symbols (e.g. Windows
-resource DLL, C++/CLI DLL), it is required that the library not be a
-``SHARED`` library because CMake expects ``SHARED`` libraries to export
-at least one symbol.
-
-.. code-block:: cmake
-
-  add_library(archive MODULE 7z.cpp)
-
-.. _`Apple Frameworks`:
-
-Apple Frameworks
-""""""""""""""""
-
-A ``SHARED`` library may be marked with the :prop_tgt:`FRAMEWORK`
-target property to create an macOS or iOS Framework Bundle.
-The ``MACOSX_FRAMEWORK_IDENTIFIER`` sets ``CFBundleIdentifier`` key
-and it uniquely identifies the bundle.
-
-.. code-block:: cmake
-
-  add_library(MyFramework SHARED MyFramework.cpp)
-  set_target_properties(MyFramework PROPERTIES
-    FRAMEWORK TRUE
-    FRAMEWORK_VERSION A
-    MACOSX_FRAMEWORK_IDENTIFIER org.cmake.MyFramework
-  )
-
-.. _`Object Libraries`:
-
-Object Libraries
-^^^^^^^^^^^^^^^^
-
-The ``OBJECT`` library type defines a non-archival collection of object files
-resulting from compiling the given source files.  The object files collection
-may be used as source inputs to other targets:
-
-.. code-block:: cmake
-
-  add_library(archive OBJECT archive.cpp zip.cpp lzma.cpp)
-
-  add_library(archiveExtras STATIC $<TARGET_OBJECTS:archive> extras.cpp)
-
-  add_executable(test_exe $<TARGET_OBJECTS:archive> test.cpp)
-
-The link (or archiving) step of those other targets will use the object
-files collection in addition to those from their own sources.
-
-Alternatively, object libraries may be linked into other targets:
-
-.. code-block:: cmake
-
-  add_library(archive OBJECT archive.cpp zip.cpp lzma.cpp)
-
-  add_library(archiveExtras STATIC extras.cpp)
-  target_link_libraries(archiveExtras PUBLIC archive)
-
-  add_executable(test_exe test.cpp)
-  target_link_libraries(test_exe archive)
-
-The link (or archiving) step of those other targets will use the object
-files from ``OBJECT`` libraries that are *directly* linked.  Additionally,
-usage requirements of the ``OBJECT`` libraries will be honored when compiling
-sources in those other targets.  Furthermore, those usage requirements
-will propagate transitively to dependents of those other targets.
-
-Object libraries may not be used as the ``TARGET`` in a use of the
-:command:`add_custom_command(TARGET)` command signature.  However,
-the list of objects can be used by :command:`add_custom_command(OUTPUT)`
-or :command:`file(GENERATE)` by using ``$<TARGET_OBJECTS:objlib>``.
-
-Build Specification and Usage Requirements
-==========================================
-
-The :command:`target_include_directories`, :command:`target_compile_definitions`
-and :command:`target_compile_options` commands specify the build specifications
-and the usage requirements of binary targets.  The commands populate the
-:prop_tgt:`INCLUDE_DIRECTORIES`, :prop_tgt:`COMPILE_DEFINITIONS` and
-:prop_tgt:`COMPILE_OPTIONS` target properties respectively, and/or the
-:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES`, :prop_tgt:`INTERFACE_COMPILE_DEFINITIONS`
-and :prop_tgt:`INTERFACE_COMPILE_OPTIONS` target properties.
-
-Each of the commands has a ``PRIVATE``, ``PUBLIC`` and ``INTERFACE`` mode.  The
-``PRIVATE`` mode populates only the non-``INTERFACE_`` variant of the target
-property and the ``INTERFACE`` mode populates only the ``INTERFACE_`` variants.
-The ``PUBLIC`` mode populates both variants of the respective target property.
-Each command may be invoked with multiple uses of each keyword:
-
-.. code-block:: cmake
-
-  target_compile_definitions(archive
-    PRIVATE BUILDING_WITH_LZMA
-    INTERFACE USING_ARCHIVE_LIB
-  )
-
-Note that usage requirements are not designed as a way to make downstreams
-use particular :prop_tgt:`COMPILE_OPTIONS` or
-:prop_tgt:`COMPILE_DEFINITIONS` etc for convenience only.  The contents of
-the properties must be **requirements**, not merely recommendations or
-convenience.
-
-See the :ref:`Creating Relocatable Packages` section of the
-:manual:`cmake-packages(7)` manual for discussion of additional care
-that must be taken when specifying usage requirements while creating
-packages for redistribution.
-
-Target Properties
------------------
-
-The contents of the :prop_tgt:`INCLUDE_DIRECTORIES`,
-:prop_tgt:`COMPILE_DEFINITIONS` and :prop_tgt:`COMPILE_OPTIONS` target
-properties are used appropriately when compiling the source files of a
-binary target.
-
-Entries in the :prop_tgt:`INCLUDE_DIRECTORIES` are added to the compile line
-with ``-I`` or ``-isystem`` prefixes and in the order of appearance in the
-property value.
-
-Entries in the :prop_tgt:`COMPILE_DEFINITIONS` are prefixed with ``-D`` or
-``/D`` and added to the compile line in an unspecified order.  The
-:prop_tgt:`DEFINE_SYMBOL` target property is also added as a compile
-definition as a special convenience case for ``SHARED`` and ``MODULE``
-library targets.
-
-Entries in the :prop_tgt:`COMPILE_OPTIONS` are escaped for the shell and added
-in the order of appearance in the property value.  Several compile options have
-special separate handling, such as :prop_tgt:`POSITION_INDEPENDENT_CODE`.
-
-The contents of the :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES`,
-:prop_tgt:`INTERFACE_COMPILE_DEFINITIONS` and
-:prop_tgt:`INTERFACE_COMPILE_OPTIONS` target properties are
-*Usage Requirements* -- they specify content which consumers
-must use to correctly compile and link with the target they appear on.
-For any binary target, the contents of each ``INTERFACE_`` property on
-each target specified in a :command:`target_link_libraries` command is
-consumed:
-
-.. code-block:: cmake
-
-  set(srcs archive.cpp zip.cpp)
-  if (LZMA_FOUND)
-    list(APPEND srcs lzma.cpp)
-  endif()
-  add_library(archive SHARED ${srcs})
-  if (LZMA_FOUND)
-    # The archive library sources are compiled with -DBUILDING_WITH_LZMA
-    target_compile_definitions(archive PRIVATE BUILDING_WITH_LZMA)
-  endif()
-  target_compile_definitions(archive INTERFACE USING_ARCHIVE_LIB)
-
-  add_executable(consumer)
-  # Link consumer to archive and consume its usage requirements. The consumer
-  # executable sources are compiled with -DUSING_ARCHIVE_LIB.
-  target_link_libraries(consumer archive)
-
-Because it is common to require that the source directory and corresponding
-build directory are added to the :prop_tgt:`INCLUDE_DIRECTORIES`, the
-:variable:`CMAKE_INCLUDE_CURRENT_DIR` variable can be enabled to conveniently
-add the corresponding directories to the :prop_tgt:`INCLUDE_DIRECTORIES` of
-all targets.  The variable :variable:`CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE`
-can be enabled to add the corresponding directories to the
-:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` of all targets.  This makes use of
-targets in multiple different directories convenient through use of the
-:command:`target_link_libraries` command.
-
-
-.. _`Target Usage Requirements`:
-
-Transitive Usage Requirements
------------------------------
-
-The usage requirements of a target can transitively propagate to dependents.
-The :command:`target_link_libraries` command has ``PRIVATE``,
-``INTERFACE`` and ``PUBLIC`` keywords to control the propagation.
-
-.. code-block:: cmake
-
-  add_library(archive archive.cpp)
-  target_compile_definitions(archive INTERFACE USING_ARCHIVE_LIB)
-
-  add_library(serialization serialization.cpp)
-  target_compile_definitions(serialization INTERFACE USING_SERIALIZATION_LIB)
-
-  add_library(archiveExtras extras.cpp)
-  target_link_libraries(archiveExtras PUBLIC archive)
-  target_link_libraries(archiveExtras PRIVATE serialization)
-  # archiveExtras is compiled with -DUSING_ARCHIVE_LIB
-  # and -DUSING_SERIALIZATION_LIB
-
-  add_executable(consumer consumer.cpp)
-  # consumer is compiled with -DUSING_ARCHIVE_LIB
-  target_link_libraries(consumer archiveExtras)
-
-Because ``archive`` is a ``PUBLIC`` dependency of ``archiveExtras``, the
-usage requirements of it are propagated to ``consumer`` too.  Because
-``serialization`` is a ``PRIVATE`` dependency of ``archiveExtras``, the usage
-requirements of it are not propagated to ``consumer``.
-
-Generally, a dependency should be specified in a use of
-:command:`target_link_libraries` with the ``PRIVATE`` keyword if it is used by
-only the implementation of a library, and not in the header files.  If a
-dependency is additionally used in the header files of a library (e.g. for
-class inheritance), then it should be specified as a ``PUBLIC`` dependency.
-A dependency which is not used by the implementation of a library, but only by
-its headers should be specified as an ``INTERFACE`` dependency.  The
-:command:`target_link_libraries` command may be invoked with multiple uses of
-each keyword:
-
-.. code-block:: cmake
-
-  target_link_libraries(archiveExtras
-    PUBLIC archive
-    PRIVATE serialization
-  )
-
-Usage requirements are propagated by reading the ``INTERFACE_`` variants
-of target properties from dependencies and appending the values to the
-non-``INTERFACE_`` variants of the operand.  For example, the
-:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` of dependencies is read and
-appended to the :prop_tgt:`INCLUDE_DIRECTORIES` of the operand.  In cases
-where order is relevant and maintained, and the order resulting from the
-:command:`target_link_libraries` calls does not allow correct compilation,
-use of an appropriate command to set the property directly may update the
-order.
-
-For example, if the linked libraries for a target must be specified
-in the order ``lib1`` ``lib2`` ``lib3`` , but the include directories must
-be specified in the order ``lib3`` ``lib1`` ``lib2``:
-
-.. code-block:: cmake
-
-  target_link_libraries(myExe lib1 lib2 lib3)
-  target_include_directories(myExe
-    PRIVATE $<TARGET_PROPERTY:lib3,INTERFACE_INCLUDE_DIRECTORIES>)
-
-Note that care must be taken when specifying usage requirements for targets
-which will be exported for installation using the :command:`install(EXPORT)`
-command.  See :ref:`Creating Packages` for more.
-
-.. _`Compatible Interface Properties`:
-
-Compatible Interface Properties
--------------------------------
-
-Some target properties are required to be compatible between a target and
-the interface of each dependency.  For example, the
-:prop_tgt:`POSITION_INDEPENDENT_CODE` target property may specify a
-boolean value of whether a target should be compiled as
-position-independent-code, which has platform-specific consequences.
-A target may also specify the usage requirement
-:prop_tgt:`INTERFACE_POSITION_INDEPENDENT_CODE` to communicate that
-consumers must be compiled as position-independent-code.
-
-.. code-block:: cmake
-
-  add_executable(exe1 exe1.cpp)
-  set_property(TARGET exe1 PROPERTY POSITION_INDEPENDENT_CODE ON)
-
-  add_library(lib1 SHARED lib1.cpp)
-  set_property(TARGET lib1 PROPERTY INTERFACE_POSITION_INDEPENDENT_CODE ON)
-
-  add_executable(exe2 exe2.cpp)
-  target_link_libraries(exe2 lib1)
-
-Here, both ``exe1`` and ``exe2`` will be compiled as position-independent-code.
-``lib1`` will also be compiled as position-independent-code because that is the
-default setting for ``SHARED`` libraries.  If dependencies have conflicting,
-non-compatible requirements :manual:`cmake(1)` issues a diagnostic:
-
-.. code-block:: cmake
-
-  add_library(lib1 SHARED lib1.cpp)
-  set_property(TARGET lib1 PROPERTY INTERFACE_POSITION_INDEPENDENT_CODE ON)
-
-  add_library(lib2 SHARED lib2.cpp)
-  set_property(TARGET lib2 PROPERTY INTERFACE_POSITION_INDEPENDENT_CODE OFF)
-
-  add_executable(exe1 exe1.cpp)
-  target_link_libraries(exe1 lib1)
-  set_property(TARGET exe1 PROPERTY POSITION_INDEPENDENT_CODE OFF)
-
-  add_executable(exe2 exe2.cpp)
-  target_link_libraries(exe2 lib1 lib2)
-
-The ``lib1`` requirement ``INTERFACE_POSITION_INDEPENDENT_CODE`` is not
-"compatible" with the :prop_tgt:`POSITION_INDEPENDENT_CODE` property of
-the ``exe1`` target.  The library requires that consumers are built as
-position-independent-code, while the executable specifies to not built as
-position-independent-code, so a diagnostic is issued.
-
-The ``lib1`` and ``lib2`` requirements are not "compatible".  One of them
-requires that consumers are built as position-independent-code, while
-the other requires that consumers are not built as position-independent-code.
-Because ``exe2`` links to both and they are in conflict, a diagnostic is
-issued.
-
-To be "compatible", the :prop_tgt:`POSITION_INDEPENDENT_CODE` property,
-if set must be either the same, in a boolean sense, as the
-:prop_tgt:`INTERFACE_POSITION_INDEPENDENT_CODE` property of all transitively
-specified dependencies on which that property is set.
-
-This property of "compatible interface requirement" may be extended to other
-properties by specifying the property in the content of the
-:prop_tgt:`COMPATIBLE_INTERFACE_BOOL` target property.  Each specified property
-must be compatible between the consuming target and the corresponding property
-with an ``INTERFACE_`` prefix from each dependency:
-
-.. code-block:: cmake
-
-  add_library(lib1Version2 SHARED lib1_v2.cpp)
-  set_property(TARGET lib1Version2 PROPERTY INTERFACE_CUSTOM_PROP ON)
-  set_property(TARGET lib1Version2 APPEND PROPERTY
-    COMPATIBLE_INTERFACE_BOOL CUSTOM_PROP
-  )
-
-  add_library(lib1Version3 SHARED lib1_v3.cpp)
-  set_property(TARGET lib1Version3 PROPERTY INTERFACE_CUSTOM_PROP OFF)
-
-  add_executable(exe1 exe1.cpp)
-  target_link_libraries(exe1 lib1Version2) # CUSTOM_PROP will be ON
-
-  add_executable(exe2 exe2.cpp)
-  target_link_libraries(exe2 lib1Version2 lib1Version3) # Diagnostic
-
-Non-boolean properties may also participate in "compatible interface"
-computations.  Properties specified in the
-:prop_tgt:`COMPATIBLE_INTERFACE_STRING`
-property must be either unspecified or compare to the same string among
-all transitively specified dependencies. This can be useful to ensure
-that multiple incompatible versions of a library are not linked together
-through transitive requirements of a target:
-
-.. code-block:: cmake
-
-  add_library(lib1Version2 SHARED lib1_v2.cpp)
-  set_property(TARGET lib1Version2 PROPERTY INTERFACE_LIB_VERSION 2)
-  set_property(TARGET lib1Version2 APPEND PROPERTY
-    COMPATIBLE_INTERFACE_STRING LIB_VERSION
-  )
-
-  add_library(lib1Version3 SHARED lib1_v3.cpp)
-  set_property(TARGET lib1Version3 PROPERTY INTERFACE_LIB_VERSION 3)
-
-  add_executable(exe1 exe1.cpp)
-  target_link_libraries(exe1 lib1Version2) # LIB_VERSION will be "2"
-
-  add_executable(exe2 exe2.cpp)
-  target_link_libraries(exe2 lib1Version2 lib1Version3) # Diagnostic
-
-The :prop_tgt:`COMPATIBLE_INTERFACE_NUMBER_MAX` target property specifies
-that content will be evaluated numerically and the maximum number among all
-specified will be calculated:
-
-.. code-block:: cmake
-
-  add_library(lib1Version2 SHARED lib1_v2.cpp)
-  set_property(TARGET lib1Version2 PROPERTY INTERFACE_CONTAINER_SIZE_REQUIRED 200)
-  set_property(TARGET lib1Version2 APPEND PROPERTY
-    COMPATIBLE_INTERFACE_NUMBER_MAX CONTAINER_SIZE_REQUIRED
-  )
-
-  add_library(lib1Version3 SHARED lib1_v3.cpp)
-  set_property(TARGET lib1Version3 PROPERTY INTERFACE_CONTAINER_SIZE_REQUIRED 1000)
-
-  add_executable(exe1 exe1.cpp)
-  # CONTAINER_SIZE_REQUIRED will be "200"
-  target_link_libraries(exe1 lib1Version2)
-
-  add_executable(exe2 exe2.cpp)
-  # CONTAINER_SIZE_REQUIRED will be "1000"
-  target_link_libraries(exe2 lib1Version2 lib1Version3)
-
-Similarly, the :prop_tgt:`COMPATIBLE_INTERFACE_NUMBER_MIN` may be used to
-calculate the numeric minimum value for a property from dependencies.
-
-Each calculated "compatible" property value may be read in the consumer at
-generate-time using generator expressions.
-
-Note that for each dependee, the set of properties specified in each
-compatible interface property must not intersect with the set specified in
-any of the other properties.
-
-Property Origin Debugging
--------------------------
-
-Because build specifications can be determined by dependencies, the lack of
-locality of code which creates a target and code which is responsible for
-setting build specifications may make the code more difficult to reason about.
-:manual:`cmake(1)` provides a debugging facility to print the origin of the
-contents of properties which may be determined by dependencies.  The properties
-which can be debugged are listed in the
-:variable:`CMAKE_DEBUG_TARGET_PROPERTIES` variable documentation:
-
-.. code-block:: cmake
-
-  set(CMAKE_DEBUG_TARGET_PROPERTIES
-    INCLUDE_DIRECTORIES
-    COMPILE_DEFINITIONS
-    POSITION_INDEPENDENT_CODE
-    CONTAINER_SIZE_REQUIRED
-    LIB_VERSION
-  )
-  add_executable(exe1 exe1.cpp)
-
-In the case of properties listed in :prop_tgt:`COMPATIBLE_INTERFACE_BOOL` or
-:prop_tgt:`COMPATIBLE_INTERFACE_STRING`, the debug output shows which target
-was responsible for setting the property, and which other dependencies also
-defined the property.  In the case of
-:prop_tgt:`COMPATIBLE_INTERFACE_NUMBER_MAX` and
-:prop_tgt:`COMPATIBLE_INTERFACE_NUMBER_MIN`, the debug output shows the
-value of the property from each dependency, and whether the value determines
-the new extreme.
-
-Build Specification with Generator Expressions
-----------------------------------------------
-
-Build specifications may use
-:manual:`generator expressions <cmake-generator-expressions(7)>` containing
-content which may be conditional or known only at generate-time.  For example,
-the calculated "compatible" value of a property may be read with the
-``TARGET_PROPERTY`` expression:
-
-.. code-block:: cmake
-
-  add_library(lib1Version2 SHARED lib1_v2.cpp)
-  set_property(TARGET lib1Version2 PROPERTY
-    INTERFACE_CONTAINER_SIZE_REQUIRED 200)
-  set_property(TARGET lib1Version2 APPEND PROPERTY
-    COMPATIBLE_INTERFACE_NUMBER_MAX CONTAINER_SIZE_REQUIRED
-  )
-
-  add_executable(exe1 exe1.cpp)
-  target_link_libraries(exe1 lib1Version2)
-  target_compile_definitions(exe1 PRIVATE
-      CONTAINER_SIZE=$<TARGET_PROPERTY:CONTAINER_SIZE_REQUIRED>
-  )
-
-In this case, the ``exe1`` source files will be compiled with
-``-DCONTAINER_SIZE=200``.
-
-Configuration determined build specifications may be conveniently set using
-the ``CONFIG`` generator expression.
-
-.. code-block:: cmake
-
-  target_compile_definitions(exe1 PRIVATE
-      $<$<CONFIG:Debug>:DEBUG_BUILD>
-  )
-
-The ``CONFIG`` parameter is compared case-insensitively with the configuration
-being built.  In the presence of :prop_tgt:`IMPORTED` targets, the content of
-:prop_tgt:`MAP_IMPORTED_CONFIG_DEBUG <MAP_IMPORTED_CONFIG_<CONFIG>>` is also
-accounted for by this expression.
-
-Some buildsystems generated by :manual:`cmake(1)` have a predetermined
-build-configuration set in the :variable:`CMAKE_BUILD_TYPE` variable.  The
-buildsystem for the IDEs such as Visual Studio and Xcode are generated
-independent of the build-configuration, and the actual build configuration
-is not known until build-time.  Therefore, code such as
-
-.. code-block:: cmake
-
-  string(TOLOWER ${CMAKE_BUILD_TYPE} _type)
-  if (_type STREQUAL debug)
-    target_compile_definitions(exe1 PRIVATE DEBUG_BUILD)
-  endif()
-
-may appear to work for :ref:`Makefile Generators` and :generator:`Ninja`
-generators, but is not portable to IDE generators.  Additionally,
-the :prop_tgt:`IMPORTED` configuration-mappings are not accounted for
-with code like this, so it should be avoided.
-
-The unary ``TARGET_PROPERTY`` generator expression and the ``TARGET_POLICY``
-generator expression are evaluated with the consuming target context.  This
-means that a usage requirement specification may be evaluated differently based
-on the consumer:
-
-.. code-block:: cmake
-
-  add_library(lib1 lib1.cpp)
-  target_compile_definitions(lib1 INTERFACE
-    $<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:LIB1_WITH_EXE>
-    $<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:LIB1_WITH_SHARED_LIB>
-    $<$<TARGET_POLICY:CMP0041>:CONSUMER_CMP0041_NEW>
-  )
-
-  add_executable(exe1 exe1.cpp)
-  target_link_libraries(exe1 lib1)
-
-  cmake_policy(SET CMP0041 NEW)
-
-  add_library(shared_lib shared_lib.cpp)
-  target_link_libraries(shared_lib lib1)
-
-The ``exe1`` executable will be compiled with ``-DLIB1_WITH_EXE``, while the
-``shared_lib`` shared library will be compiled with ``-DLIB1_WITH_SHARED_LIB``
-and ``-DCONSUMER_CMP0041_NEW``, because policy :policy:`CMP0041` is
-``NEW`` at the point where the ``shared_lib`` target is created.
-
-The ``BUILD_INTERFACE`` expression wraps requirements which are only used when
-consumed from a target in the same buildsystem, or when consumed from a target
-exported to the build directory using the :command:`export` command.  The
-``INSTALL_INTERFACE`` expression wraps requirements which are only used when
-consumed from a target which has been installed and exported with the
-:command:`install(EXPORT)` command:
-
-.. code-block:: cmake
-
-  add_library(ClimbingStats climbingstats.cpp)
-  target_compile_definitions(ClimbingStats INTERFACE
-    $<BUILD_INTERFACE:ClimbingStats_FROM_BUILD_LOCATION>
-    $<INSTALL_INTERFACE:ClimbingStats_FROM_INSTALLED_LOCATION>
-  )
-  install(TARGETS ClimbingStats EXPORT libExport ${InstallArgs})
-  install(EXPORT libExport NAMESPACE Upstream::
-          DESTINATION lib/cmake/ClimbingStats)
-  export(EXPORT libExport NAMESPACE Upstream::)
-
-  add_executable(exe1 exe1.cpp)
-  target_link_libraries(exe1 ClimbingStats)
-
-In this case, the ``exe1`` executable will be compiled with
-``-DClimbingStats_FROM_BUILD_LOCATION``.  The exporting commands generate
-:prop_tgt:`IMPORTED` targets with either the ``INSTALL_INTERFACE`` or the
-``BUILD_INTERFACE`` omitted, and the ``*_INTERFACE`` marker stripped away.
-A separate project consuming the ``ClimbingStats`` package would contain:
-
-.. code-block:: cmake
-
-  find_package(ClimbingStats REQUIRED)
-
-  add_executable(Downstream main.cpp)
-  target_link_libraries(Downstream Upstream::ClimbingStats)
-
-Depending on whether the ``ClimbingStats`` package was used from the build
-location or the install location, the ``Downstream`` target would be compiled
-with either ``-DClimbingStats_FROM_BUILD_LOCATION`` or
-``-DClimbingStats_FROM_INSTALL_LOCATION``.  For more about packages and
-exporting see the :manual:`cmake-packages(7)` manual.
-
-.. _`Include Directories and Usage Requirements`:
-
-Include Directories and Usage Requirements
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Include directories require some special consideration when specified as usage
-requirements and when used with generator expressions.  The
-:command:`target_include_directories` command accepts both relative and
-absolute include directories:
-
-.. code-block:: cmake
-
-  add_library(lib1 lib1.cpp)
-  target_include_directories(lib1 PRIVATE
-    /absolute/path
-    relative/path
-  )
-
-Relative paths are interpreted relative to the source directory where the
-command appears.  Relative paths are not allowed in the
-:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` of :prop_tgt:`IMPORTED` targets.
-
-In cases where a non-trivial generator expression is used, the
-``INSTALL_PREFIX`` expression may be used within the argument of an
-``INSTALL_INTERFACE`` expression.  It is a replacement marker which
-expands to the installation prefix when imported by a consuming project.
-
-Include directories usage requirements commonly differ between the build-tree
-and the install-tree.  The ``BUILD_INTERFACE`` and ``INSTALL_INTERFACE``
-generator expressions can be used to describe separate usage requirements
-based on the usage location.  Relative paths are allowed within the
-``INSTALL_INTERFACE`` expression and are interpreted relative to the
-installation prefix.  For example:
-
-.. code-block:: cmake
-
-  add_library(ClimbingStats climbingstats.cpp)
-  target_include_directories(ClimbingStats INTERFACE
-    $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/generated>
-    $<INSTALL_INTERFACE:/absolute/path>
-    $<INSTALL_INTERFACE:relative/path>
-    $<INSTALL_INTERFACE:$<INSTALL_PREFIX>/$<CONFIG>/generated>
-  )
-
-Two convenience APIs are provided relating to include directories usage
-requirements.  The :variable:`CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE` variable
-may be enabled, with an equivalent effect to:
-
-.. code-block:: cmake
-
-  set_property(TARGET tgt APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES
-    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR};${CMAKE_CURRENT_BINARY_DIR}>
-  )
-
-for each target affected.  The convenience for installed targets is
-an ``INCLUDES DESTINATION`` component with the :command:`install(TARGETS)`
-command:
-
-.. code-block:: cmake
-
-  install(TARGETS foo bar bat EXPORT tgts ${dest_args}
-    INCLUDES DESTINATION include
-  )
-  install(EXPORT tgts ${other_args})
-  install(FILES ${headers} DESTINATION include)
-
-This is equivalent to appending ``${CMAKE_INSTALL_PREFIX}/include`` to the
-:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` of each of the installed
-:prop_tgt:`IMPORTED` targets when generated by :command:`install(EXPORT)`.
-
-When the :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` of an
-:ref:`imported target <Imported targets>` is consumed, the entries in the
-property are treated as ``SYSTEM`` include directories, as if they were
-listed in the :prop_tgt:`INTERFACE_SYSTEM_INCLUDE_DIRECTORIES` of the
-dependency. This can result in omission of compiler warnings for headers
-found in those directories.  This behavior for :ref:`imported targets` may
-be controlled by setting the :prop_tgt:`NO_SYSTEM_FROM_IMPORTED` target
-property on the *consumers* of imported targets.
-
-If a binary target is linked transitively to a macOS :prop_tgt:`FRAMEWORK`, the
-``Headers`` directory of the framework is also treated as a usage requirement.
-This has the same effect as passing the framework directory as an include
-directory.
-
-Link Libraries and Generator Expressions
-----------------------------------------
-
-Like build specifications, :prop_tgt:`link libraries <LINK_LIBRARIES>` may be
-specified with generator expression conditions.  However, as consumption of
-usage requirements is based on collection from linked dependencies, there is
-an additional limitation that the link dependencies must form a "directed
-acyclic graph".  That is, if linking to a target is dependent on the value of
-a target property, that target property may not be dependent on the linked
-dependencies:
-
-.. code-block:: cmake
-
-  add_library(lib1 lib1.cpp)
-  add_library(lib2 lib2.cpp)
-  target_link_libraries(lib1 PUBLIC
-    $<$<TARGET_PROPERTY:POSITION_INDEPENDENT_CODE>:lib2>
-  )
-  add_library(lib3 lib3.cpp)
-  set_property(TARGET lib3 PROPERTY INTERFACE_POSITION_INDEPENDENT_CODE ON)
-
-  add_executable(exe1 exe1.cpp)
-  target_link_libraries(exe1 lib1 lib3)
-
-As the value of the :prop_tgt:`POSITION_INDEPENDENT_CODE` property of
-the ``exe1`` target is dependent on the linked libraries (``lib3``), and the
-edge of linking ``exe1`` is determined by the same
-:prop_tgt:`POSITION_INDEPENDENT_CODE` property, the dependency graph above
-contains a cycle.  :manual:`cmake(1)` issues a diagnostic in this case.
-
-.. _`Output Artifacts`:
-
-Output Artifacts
-----------------
-
-The buildsystem targets created by the :command:`add_library` and
-:command:`add_executable` commands create rules to create binary outputs.
-The exact output location of the binaries can only be determined at
-generate-time because it can depend on the build-configuration and the
-link-language of linked dependencies etc.  ``TARGET_FILE``,
-``TARGET_LINKER_FILE`` and related expressions can be used to access the
-name and location of generated binaries.  These expressions do not work
-for ``OBJECT`` libraries however, as there is no single file generated
-by such libraries which is relevant to the expressions.
-
-There are three kinds of output artifacts that may be build by targets
-as detailed in the following sections.  Their classification differs
-between DLL platforms and non-DLL platforms.  All Windows-based
-systems including Cygwin are DLL platforms.
-
-.. _`Runtime Output Artifacts`:
-
-Runtime Output Artifacts
-^^^^^^^^^^^^^^^^^^^^^^^^
-
-A *runtime* output artifact of a buildsystem target may be:
-
-* The executable file (e.g. ``.exe``) of an executable target
-  created by the :command:`add_executable` command.
-
-* On DLL platforms: the executable file (e.g. ``.dll``) of a shared
-  library target created by the :command:`add_library` command
-  with the ``SHARED`` option.
-
-The :prop_tgt:`RUNTIME_OUTPUT_DIRECTORY` and :prop_tgt:`RUNTIME_OUTPUT_NAME`
-target properties may be used to control runtime output artifact locations
-and names in the build tree.
-
-.. _`Library Output Artifacts`:
-
-Library Output Artifacts
-^^^^^^^^^^^^^^^^^^^^^^^^
-
-A *library* output artifact of a buildsystem target may be:
-
-* The loadable module file (e.g. ``.dll`` or ``.so``) of a module
-  library target created by the :command:`add_library` command
-  with the ``MODULE`` option.
-
-* On non-DLL platforms: the shared library file (e.g. ``.so`` or ``.dylib``)
-  of a shared library target created by the :command:`add_library`
-  command with the ``SHARED`` option.
-
-The :prop_tgt:`LIBRARY_OUTPUT_DIRECTORY` and :prop_tgt:`LIBRARY_OUTPUT_NAME`
-target properties may be used to control library output artifact locations
-and names in the build tree.
-
-.. _`Archive Output Artifacts`:
-
-Archive Output Artifacts
-^^^^^^^^^^^^^^^^^^^^^^^^
-
-An *archive* output artifact of a buildsystem target may be:
-
-* The static library file (e.g. ``.lib`` or ``.a``) of a static
-  library target created by the :command:`add_library` command
-  with the ``STATIC`` option.
-
-* On DLL platforms: the import library file (e.g. ``.lib``) of a shared
-  library target created by the :command:`add_library` command
-  with the ``SHARED`` option.  This file is only guaranteed to exist if
-  the library exports at least one unmanaged symbol.
-
-* On DLL platforms: the import library file (e.g. ``.lib``) of an
-  executable target created by the :command:`add_executable` command
-  when its :prop_tgt:`ENABLE_EXPORTS` target property is set.
-
-* On AIX: the linker import file (e.g. ``.imp``) of an executable target
-  created by the :command:`add_executable` command when its
-  :prop_tgt:`ENABLE_EXPORTS` target property is set.
-
-The :prop_tgt:`ARCHIVE_OUTPUT_DIRECTORY` and :prop_tgt:`ARCHIVE_OUTPUT_NAME`
-target properties may be used to control archive output artifact locations
-and names in the build tree.
-
-Directory-Scoped Commands
--------------------------
-
-The :command:`target_include_directories`,
-:command:`target_compile_definitions` and
-:command:`target_compile_options` commands have an effect on only one
-target at a time.  The commands :command:`add_compile_definitions`,
-:command:`add_compile_options` and :command:`include_directories` have
-a similar function, but operate at directory scope instead of target
-scope for convenience.
-
-Pseudo Targets
-==============
-
-Some target types do not represent outputs of the buildsystem, but only inputs
-such as external dependencies, aliases or other non-build artifacts.  Pseudo
-targets are not represented in the generated buildsystem.
-
-.. _`Imported Targets`:
-
-Imported Targets
-----------------
-
-An :prop_tgt:`IMPORTED` target represents a pre-existing dependency.  Usually
-such targets are defined by an upstream package and should be treated as
-immutable. After declaring an :prop_tgt:`IMPORTED` target one can adjust its
-target properties by using the customary commands such as
-:command:`target_compile_definitions`, :command:`target_include_directories`,
-:command:`target_compile_options` or :command:`target_link_libraries` just like
-with any other regular target.
-
-:prop_tgt:`IMPORTED` targets may have the same usage requirement properties
-populated as binary targets, such as
-:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES`,
-:prop_tgt:`INTERFACE_COMPILE_DEFINITIONS`,
-:prop_tgt:`INTERFACE_COMPILE_OPTIONS`,
-:prop_tgt:`INTERFACE_LINK_LIBRARIES`, and
-:prop_tgt:`INTERFACE_POSITION_INDEPENDENT_CODE`.
-
-The :prop_tgt:`LOCATION` may also be read from an IMPORTED target, though there
-is rarely reason to do so.  Commands such as :command:`add_custom_command` can
-transparently use an :prop_tgt:`IMPORTED` :prop_tgt:`EXECUTABLE <TYPE>` target
-as a ``COMMAND`` executable.
-
-The scope of the definition of an :prop_tgt:`IMPORTED` target is the directory
-where it was defined.  It may be accessed and used from subdirectories, but
-not from parent directories or sibling directories.  The scope is similar to
-the scope of a cmake variable.
-
-It is also possible to define a ``GLOBAL`` :prop_tgt:`IMPORTED` target which is
-accessible globally in the buildsystem.
-
-See the :manual:`cmake-packages(7)` manual for more on creating packages
-with :prop_tgt:`IMPORTED` targets.
-
-.. _`Alias Targets`:
-
-Alias Targets
--------------
-
-An ``ALIAS`` target is a name which may be used interchangeably with
-a binary target name in read-only contexts.  A primary use-case for ``ALIAS``
-targets is for example or unit test executables accompanying a library, which
-may be part of the same buildsystem or built separately based on user
-configuration.
-
-.. code-block:: cmake
-
-  add_library(lib1 lib1.cpp)
-  install(TARGETS lib1 EXPORT lib1Export ${dest_args})
-  install(EXPORT lib1Export NAMESPACE Upstream:: ${other_args})
-
-  add_library(Upstream::lib1 ALIAS lib1)
-
-In another directory, we can link unconditionally to the ``Upstream::lib1``
-target, which may be an :prop_tgt:`IMPORTED` target from a package, or an
-``ALIAS`` target if built as part of the same buildsystem.
-
-.. code-block:: cmake
-
-  if (NOT TARGET Upstream::lib1)
-    find_package(lib1 REQUIRED)
-  endif()
-  add_executable(exe1 exe1.cpp)
-  target_link_libraries(exe1 Upstream::lib1)
-
-``ALIAS`` targets are not mutable, installable or exportable.  They are
-entirely local to the buildsystem description.  A name can be tested for
-whether it is an ``ALIAS`` name by reading the :prop_tgt:`ALIASED_TARGET`
-property from it:
-
-.. code-block:: cmake
-
-  get_target_property(_aliased Upstream::lib1 ALIASED_TARGET)
-  if(_aliased)
-    message(STATUS "The name Upstream::lib1 is an ALIAS for ${_aliased}.")
-  endif()
-
-.. _`Interface Libraries`:
-
-Interface Libraries
--------------------
-
-An ``INTERFACE`` target has no :prop_tgt:`LOCATION` and is mutable, but is
-otherwise similar to an :prop_tgt:`IMPORTED` target.
-
-It may specify usage requirements such as
-:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES`,
-:prop_tgt:`INTERFACE_COMPILE_DEFINITIONS`,
-:prop_tgt:`INTERFACE_COMPILE_OPTIONS`,
-:prop_tgt:`INTERFACE_LINK_LIBRARIES`,
-:prop_tgt:`INTERFACE_SOURCES`,
-and :prop_tgt:`INTERFACE_POSITION_INDEPENDENT_CODE`.
-Only the ``INTERFACE`` modes of the :command:`target_include_directories`,
-:command:`target_compile_definitions`, :command:`target_compile_options`,
-:command:`target_sources`, and :command:`target_link_libraries` commands
-may be used with ``INTERFACE`` libraries.
-
-A primary use-case for ``INTERFACE`` libraries is header-only libraries.
-
-.. code-block:: cmake
-
-  add_library(Eigen INTERFACE)
-  target_include_directories(Eigen INTERFACE
-    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
-    $<INSTALL_INTERFACE:include/Eigen>
-  )
-
-  add_executable(exe1 exe1.cpp)
-  target_link_libraries(exe1 Eigen)
-
-Here, the usage requirements from the ``Eigen`` target are consumed and used
-when compiling, but it has no effect on linking.
-
-Another use-case is to employ an entirely target-focussed design for usage
-requirements:
-
-.. code-block:: cmake
-
-  add_library(pic_on INTERFACE)
-  set_property(TARGET pic_on PROPERTY INTERFACE_POSITION_INDEPENDENT_CODE ON)
-  add_library(pic_off INTERFACE)
-  set_property(TARGET pic_off PROPERTY INTERFACE_POSITION_INDEPENDENT_CODE OFF)
-
-  add_library(enable_rtti INTERFACE)
-  target_compile_options(enable_rtti INTERFACE
-    $<$<OR:$<COMPILER_ID:GNU>,$<COMPILER_ID:Clang>>:-rtti>
-  )
-
-  add_executable(exe1 exe1.cpp)
-  target_link_libraries(exe1 pic_on enable_rtti)
-
-This way, the build specification of ``exe1`` is expressed entirely as linked
-targets, and the complexity of compiler-specific flags is encapsulated in an
-``INTERFACE`` library target.
-
-The properties permitted to be set on or read from an ``INTERFACE`` library
-are:
-
-* Properties matching ``INTERFACE_*``
-* Built-in properties matching ``COMPATIBLE_INTERFACE_*``
-* ``EXPORT_NAME``
-* ``EXPORT_PROPERTIES``
-* ``IMPORTED``
-* ``MANUALLY_ADDED_DEPENDENCIES``
-* ``NAME``
-* Properties matching ``IMPORTED_LIBNAME_*``
-* Properties matching ``MAP_IMPORTED_CONFIG_*``
-
-``INTERFACE`` libraries may be installed and exported.  Any content they refer
-to must be installed separately:
-
-.. code-block:: cmake
-
-  add_library(Eigen INTERFACE)
-  target_include_directories(Eigen INTERFACE
-    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
-    $<INSTALL_INTERFACE:include/Eigen>
-  )
-
-  install(TARGETS Eigen EXPORT eigenExport)
-  install(EXPORT eigenExport NAMESPACE Upstream::
-    DESTINATION lib/cmake/Eigen
-  )
-  install(FILES
-      ${CMAKE_CURRENT_SOURCE_DIR}/src/eigen.h
-      ${CMAKE_CURRENT_SOURCE_DIR}/src/vector.h
-      ${CMAKE_CURRENT_SOURCE_DIR}/src/matrix.h
-    DESTINATION include/Eigen
-  )
diff --git a/share/cmake-3.18/Help/manual/cmake-commands.7.rst b/share/cmake-3.18/Help/manual/cmake-commands.7.rst
deleted file mode 100644
index 0aa4f75..0000000
--- a/share/cmake-3.18/Help/manual/cmake-commands.7.rst
+++ /dev/null
@@ -1,173 +0,0 @@
-.. cmake-manual-description: CMake Language Command Reference
-
-cmake-commands(7)
-*****************
-
-.. only:: html
-
-   .. contents::
-
-Scripting Commands
-==================
-
-These commands are always available.
-
-.. toctree::
-   :maxdepth: 1
-
-   /command/break
-   /command/cmake_host_system_information
-   /command/cmake_language
-   /command/cmake_minimum_required
-   /command/cmake_parse_arguments
-   /command/cmake_policy
-   /command/configure_file
-   /command/continue
-   /command/else
-   /command/elseif
-   /command/endforeach
-   /command/endfunction
-   /command/endif
-   /command/endmacro
-   /command/endwhile
-   /command/execute_process
-   /command/file
-   /command/find_file
-   /command/find_library
-   /command/find_package
-   /command/find_path
-   /command/find_program
-   /command/foreach
-   /command/function
-   /command/get_cmake_property
-   /command/get_directory_property
-   /command/get_filename_component
-   /command/get_property
-   /command/if
-   /command/include
-   /command/include_guard
-   /command/list
-   /command/macro
-   /command/mark_as_advanced
-   /command/math
-   /command/message
-   /command/option
-   /command/return
-   /command/separate_arguments
-   /command/set
-   /command/set_directory_properties
-   /command/set_property
-   /command/site_name
-   /command/string
-   /command/unset
-   /command/variable_watch
-   /command/while
-
-Project Commands
-================
-
-These commands are available only in CMake projects.
-
-.. toctree::
-   :maxdepth: 1
-
-   /command/add_compile_definitions
-   /command/add_compile_options
-   /command/add_custom_command
-   /command/add_custom_target
-   /command/add_definitions
-   /command/add_dependencies
-   /command/add_executable
-   /command/add_library
-   /command/add_link_options
-   /command/add_subdirectory
-   /command/add_test
-   /command/aux_source_directory
-   /command/build_command
-   /command/create_test_sourcelist
-   /command/define_property
-   /command/enable_language
-   /command/enable_testing
-   /command/export
-   /command/fltk_wrap_ui
-   /command/get_source_file_property
-   /command/get_target_property
-   /command/get_test_property
-   /command/include_directories
-   /command/include_external_msproject
-   /command/include_regular_expression
-   /command/install
-   /command/link_directories
-   /command/link_libraries
-   /command/load_cache
-   /command/project
-   /command/remove_definitions
-   /command/set_source_files_properties
-   /command/set_target_properties
-   /command/set_tests_properties
-   /command/source_group
-   /command/target_compile_definitions
-   /command/target_compile_features
-   /command/target_compile_options
-   /command/target_include_directories
-   /command/target_link_directories
-   /command/target_link_libraries
-   /command/target_link_options
-   /command/target_precompile_headers
-   /command/target_sources
-   /command/try_compile
-   /command/try_run
-
-.. _`CTest Commands`:
-
-CTest Commands
-==============
-
-These commands are available only in CTest scripts.
-
-.. toctree::
-   :maxdepth: 1
-
-   /command/ctest_build
-   /command/ctest_configure
-   /command/ctest_coverage
-   /command/ctest_empty_binary_directory
-   /command/ctest_memcheck
-   /command/ctest_read_custom_files
-   /command/ctest_run_script
-   /command/ctest_sleep
-   /command/ctest_start
-   /command/ctest_submit
-   /command/ctest_test
-   /command/ctest_update
-   /command/ctest_upload
-
-Deprecated Commands
-===================
-
-These commands are deprecated and are only made available to maintain
-backward compatibility.  The documentation of each command states the
-CMake version in which it was deprecated.  Do not use these commands
-in new code.
-
-.. toctree::
-   :maxdepth: 1
-
-   /command/build_name
-   /command/exec_program
-   /command/export_library_dependencies
-   /command/install_files
-   /command/install_programs
-   /command/install_targets
-   /command/load_command
-   /command/make_directory
-   /command/output_required_files
-   /command/qt_wrap_cpp
-   /command/qt_wrap_ui
-   /command/remove
-   /command/subdir_depends
-   /command/subdirs
-   /command/use_mangled_mesa
-   /command/utility_source
-   /command/variable_requires
-   /command/write_file
diff --git a/share/cmake-3.18/Help/manual/cmake-compile-features.7.rst b/share/cmake-3.18/Help/manual/cmake-compile-features.7.rst
deleted file mode 100644
index 05dc038..0000000
--- a/share/cmake-3.18/Help/manual/cmake-compile-features.7.rst
+++ /dev/null
@@ -1,376 +0,0 @@
-.. cmake-manual-description: CMake Compile Features Reference
-
-cmake-compile-features(7)
-*************************
-
-.. only:: html
-
-   .. contents::
-
-Introduction
-============
-
-Project source code may depend on, or be conditional on, the availability
-of certain features of the compiler.  There are three use-cases which arise:
-`Compile Feature Requirements`_, `Optional Compile Features`_
-and `Conditional Compilation Options`_.
-
-While features are typically specified in programming language standards,
-CMake provides a primary user interface based on granular handling of
-the features, not the language standard that introduced the feature.
-
-The :prop_gbl:`CMAKE_C_KNOWN_FEATURES`, :prop_gbl:`CMAKE_CUDA_KNOWN_FEATURES`,
-and :prop_gbl:`CMAKE_CXX_KNOWN_FEATURES` global properties contain all the
-features known to CMake, regardless of compiler support for the feature.
-The :variable:`CMAKE_C_COMPILE_FEATURES`, :variable:`CMAKE_CUDA_COMPILE_FEATURES`
-, and :variable:`CMAKE_CXX_COMPILE_FEATURES` variables contain all features
-CMake knows are known to the compiler, regardless of language standard
-or compile flags needed to use them.
-
-Features known to CMake are named mostly following the same convention
-as the Clang feature test macros.  There are some exceptions, such as
-CMake using ``cxx_final`` and ``cxx_override`` instead of the single
-``cxx_override_control`` used by Clang.
-
-Note that there are no separate compile features properties or variables for
-the ``OBJC`` or ``OBJCXX`` languages.  These are based off ``C`` or ``C++``
-respectively, so the properties and variables for their corresponding base
-language should be used instead.
-
-Compile Feature Requirements
-============================
-
-Compile feature requirements may be specified with the
-:command:`target_compile_features` command.  For example, if a target must
-be compiled with compiler support for the
-:prop_gbl:`cxx_constexpr <CMAKE_CXX_KNOWN_FEATURES>` feature:
-
-.. code-block:: cmake
-
-  add_library(mylib requires_constexpr.cpp)
-  target_compile_features(mylib PRIVATE cxx_constexpr)
-
-In processing the requirement for the ``cxx_constexpr`` feature,
-:manual:`cmake(1)` will ensure that the in-use C++ compiler is capable
-of the feature, and will add any necessary flags such as ``-std=gnu++11``
-to the compile lines of C++ files in the ``mylib`` target.  A
-``FATAL_ERROR`` is issued if the compiler is not capable of the
-feature.
-
-The exact compile flags and language standard are deliberately not part
-of the user interface for this use-case.  CMake will compute the
-appropriate compile flags to use by considering the features specified
-for each target.
-
-Such compile flags are added even if the compiler supports the
-particular feature without the flag. For example, the GNU compiler
-supports variadic templates (with a warning) even if ``-std=gnu++98`` is
-used.  CMake adds the ``-std=gnu++11`` flag if ``cxx_variadic_templates``
-is specified as a requirement.
-
-In the above example, ``mylib`` requires ``cxx_constexpr`` when it
-is built itself, but consumers of ``mylib`` are not required to use a
-compiler which supports ``cxx_constexpr``.  If the interface of
-``mylib`` does require the ``cxx_constexpr`` feature (or any other
-known feature), that may be specified with the ``PUBLIC`` or
-``INTERFACE`` signatures of :command:`target_compile_features`:
-
-.. code-block:: cmake
-
-  add_library(mylib requires_constexpr.cpp)
-  # cxx_constexpr is a usage-requirement
-  target_compile_features(mylib PUBLIC cxx_constexpr)
-
-  # main.cpp will be compiled with -std=gnu++11 on GNU for cxx_constexpr.
-  add_executable(myexe main.cpp)
-  target_link_libraries(myexe mylib)
-
-Feature requirements are evaluated transitively by consuming the link
-implementation.  See :manual:`cmake-buildsystem(7)` for more on
-transitive behavior of build properties and usage requirements.
-
-Requiring Language Standards
-----------------------------
-
-In projects that use a large number of commonly available features from
-a particular language standard (e.g. C++ 11) one may specify a
-meta-feature (e.g. ``cxx_std_11``) that requires use of a compiler mode
-that is at minimum aware of that standard, but could be greater.
-This is simpler than specifying all the features individually, but does
-not guarantee the existence of any particular feature.
-Diagnosis of use of unsupported features will be delayed until compile time.
-
-For example, if C++ 11 features are used extensively in a project's
-header files, then clients must use a compiler mode that is no less
-than C++ 11.  This can be requested with the code:
-
-.. code-block:: cmake
-
-  target_compile_features(mylib PUBLIC cxx_std_11)
-
-In this example, CMake will ensure the compiler is invoked in a mode
-of at-least C++ 11 (or C++ 14, C++ 17, ...), adding flags such as
-``-std=gnu++11`` if necessary.  This applies to sources within ``mylib``
-as well as any dependents (that may include headers from ``mylib``).
-
-Availability of Compiler Extensions
------------------------------------
-
-Because the :prop_tgt:`CXX_EXTENSIONS` target property is ``ON`` by default,
-CMake uses extended variants of language dialects by default, such as
-``-std=gnu++11`` instead of ``-std=c++11``.  That target property may be
-set to ``OFF`` to use the non-extended variant of the dialect flag.  Note
-that because most compilers enable extensions by default, this could
-expose cross-platform bugs in user code or in the headers of third-party
-dependencies.
-
-Optional Compile Features
-=========================
-
-Compile features may be preferred if available, without creating a hard
-requirement.  For example, a library may provides alternative
-implementations depending on whether the ``cxx_variadic_templates``
-feature is available:
-
-.. code-block:: c++
-
-  #if Foo_COMPILER_CXX_VARIADIC_TEMPLATES
-  template<int I, int... Is>
-  struct Interface;
-
-  template<int I>
-  struct Interface<I>
-  {
-    static int accumulate()
-    {
-      return I;
-    }
-  };
-
-  template<int I, int... Is>
-  struct Interface
-  {
-    static int accumulate()
-    {
-      return I + Interface<Is...>::accumulate();
-    }
-  };
-  #else
-  template<int I1, int I2 = 0, int I3 = 0, int I4 = 0>
-  struct Interface
-  {
-    static int accumulate() { return I1 + I2 + I3 + I4; }
-  };
-  #endif
-
-Such an interface depends on using the correct preprocessor defines for the
-compiler features.  CMake can generate a header file containing such
-defines using the :module:`WriteCompilerDetectionHeader` module.  The
-module contains the ``write_compiler_detection_header`` function which
-accepts parameters to control the content of the generated header file:
-
-.. code-block:: cmake
-
-  write_compiler_detection_header(
-    FILE "${CMAKE_CURRENT_BINARY_DIR}/foo_compiler_detection.h"
-    PREFIX Foo
-    COMPILERS GNU
-    FEATURES
-      cxx_variadic_templates
-  )
-
-Such a header file may be used internally in the source code of a project,
-and it may be installed and used in the interface of library code.
-
-For each feature listed in ``FEATURES``, a preprocessor definition
-is created in the header file, and defined to either ``1`` or ``0``.
-
-Additionally, some features call for additional defines, such as the
-``cxx_final`` and ``cxx_override`` features. Rather than being used in
-``#ifdef`` code, the ``final`` keyword is abstracted by a symbol
-which is defined to either ``final``, a compiler-specific equivalent, or
-to empty.  That way, C++ code can be written to unconditionally use the
-symbol, and compiler support determines what it is expanded to:
-
-.. code-block:: c++
-
-  struct Interface {
-    virtual void Execute() = 0;
-  };
-
-  struct Concrete Foo_FINAL {
-    void Execute() Foo_OVERRIDE;
-  };
-
-In this case, ``Foo_FINAL`` will expand to ``final`` if the
-compiler supports the keyword, or to empty otherwise.
-
-In this use-case, the CMake code will wish to enable a particular language
-standard if available from the compiler. The :prop_tgt:`CXX_STANDARD`
-target property variable may be set to the desired language standard
-for a particular target, and the :variable:`CMAKE_CXX_STANDARD` may be
-set to influence all following targets:
-
-.. code-block:: cmake
-
-  write_compiler_detection_header(
-    FILE "${CMAKE_CURRENT_BINARY_DIR}/foo_compiler_detection.h"
-    PREFIX Foo
-    COMPILERS GNU
-    FEATURES
-      cxx_final cxx_override
-  )
-
-  # Includes foo_compiler_detection.h and uses the Foo_FINAL symbol
-  # which will expand to 'final' if the compiler supports the requested
-  # CXX_STANDARD.
-  add_library(foo foo.cpp)
-  set_property(TARGET foo PROPERTY CXX_STANDARD 11)
-
-  # Includes foo_compiler_detection.h and uses the Foo_FINAL symbol
-  # which will expand to 'final' if the compiler supports the feature,
-  # even though CXX_STANDARD is not set explicitly.  The requirement of
-  # cxx_constexpr causes CMake to set CXX_STANDARD internally, which
-  # affects the compile flags.
-  add_library(foo_impl foo_impl.cpp)
-  target_compile_features(foo_impl PRIVATE cxx_constexpr)
-
-The ``write_compiler_detection_header`` function also creates compatibility
-code for other features which have standard equivalents.  For example, the
-``cxx_static_assert`` feature is emulated with a template and abstracted
-via the ``<PREFIX>_STATIC_ASSERT`` and ``<PREFIX>_STATIC_ASSERT_MSG``
-function-macros.
-
-Conditional Compilation Options
-===============================
-
-Libraries may provide entirely different header files depending on
-requested compiler features.
-
-For example, a header at ``with_variadics/interface.h`` may contain:
-
-.. code-block:: c++
-
-  template<int I, int... Is>
-  struct Interface;
-
-  template<int I>
-  struct Interface<I>
-  {
-    static int accumulate()
-    {
-      return I;
-    }
-  };
-
-  template<int I, int... Is>
-  struct Interface
-  {
-    static int accumulate()
-    {
-      return I + Interface<Is...>::accumulate();
-    }
-  };
-
-while a header at ``no_variadics/interface.h`` may contain:
-
-.. code-block:: c++
-
-  template<int I1, int I2 = 0, int I3 = 0, int I4 = 0>
-  struct Interface
-  {
-    static int accumulate() { return I1 + I2 + I3 + I4; }
-  };
-
-It would be possible to write a abstraction ``interface.h`` header
-containing something like:
-
-.. code-block:: c++
-
-  #include "foo_compiler_detection.h"
-  #if Foo_COMPILER_CXX_VARIADIC_TEMPLATES
-  #include "with_variadics/interface.h"
-  #else
-  #include "no_variadics/interface.h"
-  #endif
-
-However this could be unmaintainable if there are many files to
-abstract. What is needed is to use alternative include directories
-depending on the compiler capabilities.
-
-CMake provides a ``COMPILE_FEATURES``
-:manual:`generator expression <cmake-generator-expressions(7)>` to implement
-such conditions.  This may be used with the build-property commands such as
-:command:`target_include_directories` and :command:`target_link_libraries`
-to set the appropriate :manual:`buildsystem <cmake-buildsystem(7)>`
-properties:
-
-.. code-block:: cmake
-
-  add_library(foo INTERFACE)
-  set(with_variadics ${CMAKE_CURRENT_SOURCE_DIR}/with_variadics)
-  set(no_variadics ${CMAKE_CURRENT_SOURCE_DIR}/no_variadics)
-  target_include_directories(foo
-    INTERFACE
-      "$<$<COMPILE_FEATURES:cxx_variadic_templates>:${with_variadics}>"
-      "$<$<NOT:$<COMPILE_FEATURES:cxx_variadic_templates>>:${no_variadics}>"
-    )
-
-Consuming code then simply links to the ``foo`` target as usual and uses
-the feature-appropriate include directory
-
-.. code-block:: cmake
-
-  add_executable(consumer_with consumer_with.cpp)
-  target_link_libraries(consumer_with foo)
-  set_property(TARGET consumer_with CXX_STANDARD 11)
-
-  add_executable(consumer_no consumer_no.cpp)
-  target_link_libraries(consumer_no foo)
-
-Supported Compilers
-===================
-
-CMake is currently aware of the :prop_tgt:`C++ standards <CXX_STANDARD>`
-and :prop_gbl:`compile features <CMAKE_CXX_KNOWN_FEATURES>` available from
-the following :variable:`compiler ids <CMAKE_<LANG>_COMPILER_ID>` as of the
-versions specified for each:
-
-* ``AppleClang``: Apple Clang for Xcode versions 4.4+.
-* ``Clang``: Clang compiler versions 2.9+.
-* ``GNU``: GNU compiler versions 4.4+.
-* ``MSVC``: Microsoft Visual Studio versions 2010+.
-* ``SunPro``: Oracle SolarisStudio versions 12.4+.
-* ``Intel``: Intel compiler versions 12.1+.
-
-CMake is currently aware of the :prop_tgt:`C standards <C_STANDARD>`
-and :prop_gbl:`compile features <CMAKE_C_KNOWN_FEATURES>` available from
-the following :variable:`compiler ids <CMAKE_<LANG>_COMPILER_ID>` as of the
-versions specified for each:
-
-* all compilers and versions listed above for C++.
-* ``GNU``: GNU compiler versions 3.4+
-
-CMake is currently aware of the :prop_tgt:`C++ standards <CXX_STANDARD>` and
-their associated meta-features (e.g. ``cxx_std_11``) available from the
-following :variable:`compiler ids <CMAKE_<LANG>_COMPILER_ID>` as of the
-versions specified for each:
-
-* ``Cray``: Cray Compiler Environment version 8.1+.
-* ``PGI``: PGI version 12.10+.
-* ``XL``: IBM XL version 10.1+.
-
-CMake is currently aware of the :prop_tgt:`C standards <C_STANDARD>` and
-their associated meta-features (e.g. ``c_std_99``) available from the
-following :variable:`compiler ids <CMAKE_<LANG>_COMPILER_ID>` as of the
-versions specified for each:
-
-* all compilers and versions listed above with only meta-features for C++.
-* ``TI``: Texas Instruments compiler.
-
-CMake is currently aware of the :prop_tgt:`CUDA standards <CUDA_STANDARD>` and
-their associated meta-features (e.g. ``cuda_std_11``) available from the
-following :variable:`compiler ids <CMAKE_<LANG>_COMPILER_ID>` as of the
-versions specified for each:
-
-* ``NVIDIA``: NVIDIA nvcc compiler 7.5+.
diff --git a/share/cmake-3.18/Help/manual/cmake-developer.7.rst b/share/cmake-3.18/Help/manual/cmake-developer.7.rst
deleted file mode 100644
index 85ed935..0000000
--- a/share/cmake-3.18/Help/manual/cmake-developer.7.rst
+++ /dev/null
@@ -1,433 +0,0 @@
-.. cmake-manual-description: CMake Developer Reference
-
-cmake-developer(7)
-******************
-
-.. only:: html
-
-   .. contents::
-
-Introduction
-============
-
-This manual is intended for reference by developers working with
-:manual:`cmake-language(7)` code, whether writing their own modules,
-authoring their own build systems, or working on CMake itself.
-
-See https://cmake.org/get-involved/ to get involved in development of
-CMake upstream.  It includes links to contribution instructions, which
-in turn link to developer guides for CMake itself.
-
-.. _`Find Modules`:
-
-Find Modules
-============
-
-A "find module" is a ``Find<PackageName>.cmake`` file to be loaded
-by the :command:`find_package` command when invoked for ``<PackageName>``.
-
-The primary task of a find module is to determine whether a package
-exists on the system, set the ``<PackageName>_FOUND`` variable to reflect
-this and provide any variables, macros and imported targets required to
-use the package.  A find module is useful in cases where an upstream
-library does not provide a
-:ref:`config file package <Config File Packages>`.
-
-The traditional approach is to use variables for everything, including
-libraries and executables: see the `Standard Variable Names`_ section
-below.  This is what most of the existing find modules provided by CMake
-do.
-
-The more modern approach is to behave as much like
-:ref:`config file packages <Config File Packages>` files as possible, by
-providing :ref:`imported target <Imported targets>`.  This has the advantage
-of propagating :ref:`Target Usage Requirements` to consumers.
-
-In either case (or even when providing both variables and imported
-targets), find modules should provide backwards compatibility with old
-versions that had the same name.
-
-A FindFoo.cmake module will typically be loaded by the command::
-
-  find_package(Foo [major[.minor[.patch[.tweak]]]]
-               [EXACT] [QUIET] [REQUIRED]
-               [[COMPONENTS] [components...]]
-               [OPTIONAL_COMPONENTS components...]
-               [NO_POLICY_SCOPE])
-
-See the :command:`find_package` documentation for details on what
-variables are set for the find module.  Most of these are dealt with by
-using :module:`FindPackageHandleStandardArgs`.
-
-Briefly, the module should only locate versions of the package
-compatible with the requested version, as described by the
-``Foo_FIND_VERSION`` family of variables.  If ``Foo_FIND_QUIETLY`` is
-set to true, it should avoid printing messages, including anything
-complaining about the package not being found.  If ``Foo_FIND_REQUIRED``
-is set to true, the module should issue a ``FATAL_ERROR`` if the package
-cannot be found.  If neither are set to true, it should print a
-non-fatal message if it cannot find the package.
-
-Packages that find multiple semi-independent parts (like bundles of
-libraries) should search for the components listed in
-``Foo_FIND_COMPONENTS`` if it is set , and only set ``Foo_FOUND`` to
-true if for each searched-for component ``<c>`` that was not found,
-``Foo_FIND_REQUIRED_<c>`` is not set to true.  The ``HANDLE_COMPONENTS``
-argument of ``find_package_handle_standard_args()`` can be used to
-implement this.
-
-If ``Foo_FIND_COMPONENTS`` is not set, which modules are searched for
-and required is up to the find module, but should be documented.
-
-For internal implementation, it is a generally accepted convention that
-variables starting with underscore are for temporary use only.
-
-
-.. _`CMake Developer Standard Variable Names`:
-
-Standard Variable Names
------------------------
-
-For a ``FindXxx.cmake`` module that takes the approach of setting
-variables (either instead of or in addition to creating imported
-targets), the following variable names should be used to keep things
-consistent between find modules.  Note that all variables start with
-``Xxx_`` to make sure they do not interfere with other find modules; the
-same consideration applies to macros, functions and imported targets.
-
-``Xxx_INCLUDE_DIRS``
-  The final set of include directories listed in one variable for use by
-  client code.  This should not be a cache entry.
-
-``Xxx_LIBRARIES``
-  The libraries to link against to use Xxx. These should include full
-  paths.  This should not be a cache entry.
-
-``Xxx_DEFINITIONS``
-  Definitions to use when compiling code that uses Xxx. This really
-  shouldn't include options such as ``-DHAS_JPEG`` that a client
-  source-code file uses to decide whether to ``#include <jpeg.h>``
-
-``Xxx_EXECUTABLE``
-  Where to find the Xxx tool.
-
-``Xxx_Yyy_EXECUTABLE``
-  Where to find the Yyy tool that comes with Xxx.
-
-``Xxx_LIBRARY_DIRS``
-  Optionally, the final set of library directories listed in one
-  variable for use by client code.  This should not be a cache entry.
-
-``Xxx_ROOT_DIR``
-  Where to find the base directory of Xxx.
-
-``Xxx_VERSION_Yy``
-  Expect Version Yy if true. Make sure at most one of these is ever true.
-
-``Xxx_WRAP_Yy``
-  If False, do not try to use the relevant CMake wrapping command.
-
-``Xxx_Yy_FOUND``
-  If False, optional Yy part of Xxx system is not available.
-
-``Xxx_FOUND``
-  Set to false, or undefined, if we haven't found, or don't want to use
-  Xxx.
-
-``Xxx_NOT_FOUND_MESSAGE``
-  Should be set by config-files in the case that it has set
-  ``Xxx_FOUND`` to FALSE.  The contained message will be printed by the
-  :command:`find_package` command and by
-  ``find_package_handle_standard_args()`` to inform the user about the
-  problem.
-
-``Xxx_RUNTIME_LIBRARY_DIRS``
-  Optionally, the runtime library search path for use when running an
-  executable linked to shared libraries.  The list should be used by
-  user code to create the ``PATH`` on windows or ``LD_LIBRARY_PATH`` on
-  UNIX.  This should not be a cache entry.
-
-``Xxx_VERSION``
-  The full version string of the package found, if any.  Note that many
-  existing modules provide ``Xxx_VERSION_STRING`` instead.
-
-``Xxx_VERSION_MAJOR``
-  The major version of the package found, if any.
-
-``Xxx_VERSION_MINOR``
-  The minor version of the package found, if any.
-
-``Xxx_VERSION_PATCH``
-  The patch version of the package found, if any.
-
-The following names should not usually be used in CMakeLists.txt files, but
-are typically cache variables for users to edit and control the
-behaviour of find modules (like entering the path to a library manually)
-
-``Xxx_LIBRARY``
-  The path of the Xxx library (as used with :command:`find_library`, for
-  example).
-
-``Xxx_Yy_LIBRARY``
-  The path of the Yy library that is part of the Xxx system. It may or
-  may not be required to use Xxx.
-
-``Xxx_INCLUDE_DIR``
-  Where to find headers for using the Xxx library.
-
-``Xxx_Yy_INCLUDE_DIR``
-  Where to find headers for using the Yy library of the Xxx system.
-
-To prevent users being overwhelmed with settings to configure, try to
-keep as many options as possible out of the cache, leaving at least one
-option which can be used to disable use of the module, or locate a
-not-found library (e.g. ``Xxx_ROOT_DIR``).  For the same reason, mark
-most cache options as advanced.  For packages which provide both debug
-and release binaries, it is common to create cache variables with a
-``_LIBRARY_<CONFIG>`` suffix, such as ``Foo_LIBRARY_RELEASE`` and
-``Foo_LIBRARY_DEBUG``.
-
-While these are the standard variable names, you should provide
-backwards compatibility for any old names that were actually in use.
-Make sure you comment them as deprecated, so that no-one starts using
-them.
-
-
-A Sample Find Module
---------------------
-
-We will describe how to create a simple find module for a library ``Foo``.
-
-The top of the module should begin with a license notice, followed by
-a blank line, and then followed by a :ref:`Bracket Comment`.  The comment
-should begin with ``.rst:`` to indicate that the rest of its content is
-reStructuredText-format documentation.  For example:
-
-::
-
-  # Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-  # file Copyright.txt or https://cmake.org/licensing for details.
-
-  #[=======================================================================[.rst:
-  FindFoo
-  -------
-
-  Finds the Foo library.
-
-  Imported Targets
-  ^^^^^^^^^^^^^^^^
-
-  This module provides the following imported targets, if found:
-
-  ``Foo::Foo``
-    The Foo library
-
-  Result Variables
-  ^^^^^^^^^^^^^^^^
-
-  This will define the following variables:
-
-  ``Foo_FOUND``
-    True if the system has the Foo library.
-  ``Foo_VERSION``
-    The version of the Foo library which was found.
-  ``Foo_INCLUDE_DIRS``
-    Include directories needed to use Foo.
-  ``Foo_LIBRARIES``
-    Libraries needed to link to Foo.
-
-  Cache Variables
-  ^^^^^^^^^^^^^^^
-
-  The following cache variables may also be set:
-
-  ``Foo_INCLUDE_DIR``
-    The directory containing ``foo.h``.
-  ``Foo_LIBRARY``
-    The path to the Foo library.
-
-  #]=======================================================================]
-
-The module documentation consists of:
-
-* An underlined heading specifying the module name.
-
-* A simple description of what the module finds.
-  More description may be required for some packages.  If there are
-  caveats or other details users of the module should be aware of,
-  specify them here.
-
-* A section listing imported targets provided by the module, if any.
-
-* A section listing result variables provided by the module.
-
-* Optionally a section listing cache variables used by the module, if any.
-
-If the package provides any macros or functions, they should be listed in
-an additional section, but can be documented by additional ``.rst:``
-comment blocks immediately above where those macros or functions are defined.
-
-The find module implementation may begin below the documentation block.
-Now the actual libraries and so on have to be found.  The code here will
-obviously vary from module to module (dealing with that, after all, is the
-point of find modules), but there tends to be a common pattern for libraries.
-
-First, we try to use ``pkg-config`` to find the library.  Note that we
-cannot rely on this, as it may not be available, but it provides a good
-starting point.
-
-.. code-block:: cmake
-
-  find_package(PkgConfig)
-  pkg_check_modules(PC_Foo QUIET Foo)
-
-This should define some variables starting ``PC_Foo_`` that contain the
-information from the ``Foo.pc`` file.
-
-Now we need to find the libraries and include files; we use the
-information from ``pkg-config`` to provide hints to CMake about where to
-look.
-
-.. code-block:: cmake
-
-  find_path(Foo_INCLUDE_DIR
-    NAMES foo.h
-    PATHS ${PC_Foo_INCLUDE_DIRS}
-    PATH_SUFFIXES Foo
-  )
-  find_library(Foo_LIBRARY
-    NAMES foo
-    PATHS ${PC_Foo_LIBRARY_DIRS}
-  )
-
-If you have a good way of getting the version (from a header file, for
-example), you can use that information to set ``Foo_VERSION`` (although
-note that find modules have traditionally used ``Foo_VERSION_STRING``,
-so you may want to set both).  Otherwise, attempt to use the information
-from ``pkg-config``
-
-.. code-block:: cmake
-
-  set(Foo_VERSION ${PC_Foo_VERSION})
-
-Now we can use :module:`FindPackageHandleStandardArgs` to do most of the
-rest of the work for us
-
-.. code-block:: cmake
-
-  include(FindPackageHandleStandardArgs)
-  find_package_handle_standard_args(Foo
-    FOUND_VAR Foo_FOUND
-    REQUIRED_VARS
-      Foo_LIBRARY
-      Foo_INCLUDE_DIR
-    VERSION_VAR Foo_VERSION
-  )
-
-This will check that the ``REQUIRED_VARS`` contain values (that do not
-end in ``-NOTFOUND``) and set ``Foo_FOUND`` appropriately.  It will also
-cache those values.  If ``Foo_VERSION`` is set, and a required version
-was passed to :command:`find_package`, it will check the requested version
-against the one in ``Foo_VERSION``.  It will also print messages as
-appropriate; note that if the package was found, it will print the
-contents of the first required variable to indicate where it was found.
-
-At this point, we have to provide a way for users of the find module to
-link to the library or libraries that were found.  There are two
-approaches, as discussed in the `Find Modules`_ section above.  The
-traditional variable approach looks like
-
-.. code-block:: cmake
-
-  if(Foo_FOUND)
-    set(Foo_LIBRARIES ${Foo_LIBRARY})
-    set(Foo_INCLUDE_DIRS ${Foo_INCLUDE_DIR})
-    set(Foo_DEFINITIONS ${PC_Foo_CFLAGS_OTHER})
-  endif()
-
-If more than one library was found, all of them should be included in
-these variables (see the `Standard Variable Names`_ section for more
-information).
-
-When providing imported targets, these should be namespaced (hence the
-``Foo::`` prefix); CMake will recognize that values passed to
-:command:`target_link_libraries` that contain ``::`` in their name are
-supposed to be imported targets (rather than just library names), and
-will produce appropriate diagnostic messages if that target does not
-exist (see policy :policy:`CMP0028`).
-
-.. code-block:: cmake
-
-  if(Foo_FOUND AND NOT TARGET Foo::Foo)
-    add_library(Foo::Foo UNKNOWN IMPORTED)
-    set_target_properties(Foo::Foo PROPERTIES
-      IMPORTED_LOCATION "${Foo_LIBRARY}"
-      INTERFACE_COMPILE_OPTIONS "${PC_Foo_CFLAGS_OTHER}"
-      INTERFACE_INCLUDE_DIRECTORIES "${Foo_INCLUDE_DIR}"
-    )
-  endif()
-
-One thing to note about this is that the ``INTERFACE_INCLUDE_DIRECTORIES`` and
-similar properties should only contain information about the target itself, and
-not any of its dependencies.  Instead, those dependencies should also be
-targets, and CMake should be told that they are dependencies of this target.
-CMake will then combine all the necessary information automatically.
-
-The type of the :prop_tgt:`IMPORTED` target created in the
-:command:`add_library` command can always be specified as ``UNKNOWN``
-type.  This simplifies the code in cases where static or shared variants may
-be found, and CMake will determine the type by inspecting the files.
-
-If the library is available with multiple configurations, the
-:prop_tgt:`IMPORTED_CONFIGURATIONS` target property should also be
-populated:
-
-.. code-block:: cmake
-
-  if(Foo_FOUND)
-    if (NOT TARGET Foo::Foo)
-      add_library(Foo::Foo UNKNOWN IMPORTED)
-    endif()
-    if (Foo_LIBRARY_RELEASE)
-      set_property(TARGET Foo::Foo APPEND PROPERTY
-        IMPORTED_CONFIGURATIONS RELEASE
-      )
-      set_target_properties(Foo::Foo PROPERTIES
-        IMPORTED_LOCATION_RELEASE "${Foo_LIBRARY_RELEASE}"
-      )
-    endif()
-    if (Foo_LIBRARY_DEBUG)
-      set_property(TARGET Foo::Foo APPEND PROPERTY
-        IMPORTED_CONFIGURATIONS DEBUG
-      )
-      set_target_properties(Foo::Foo PROPERTIES
-        IMPORTED_LOCATION_DEBUG "${Foo_LIBRARY_DEBUG}"
-      )
-    endif()
-    set_target_properties(Foo::Foo PROPERTIES
-      INTERFACE_COMPILE_OPTIONS "${PC_Foo_CFLAGS_OTHER}"
-      INTERFACE_INCLUDE_DIRECTORIES "${Foo_INCLUDE_DIR}"
-    )
-  endif()
-
-The ``RELEASE`` variant should be listed first in the property
-so that the variant is chosen if the user uses a configuration which is
-not an exact match for any listed ``IMPORTED_CONFIGURATIONS``.
-
-Most of the cache variables should be hidden in the ``ccmake`` interface unless
-the user explicitly asks to edit them.
-
-.. code-block:: cmake
-
-  mark_as_advanced(
-    Foo_INCLUDE_DIR
-    Foo_LIBRARY
-  )
-
-If this module replaces an older version, you should set compatibility variables
-to cause the least disruption possible.
-
-.. code-block:: cmake
-
-  # compatibility variables
-  set(Foo_VERSION_STRING ${Foo_VERSION})
diff --git a/share/cmake-3.18/Help/manual/cmake-env-variables.7.rst b/share/cmake-3.18/Help/manual/cmake-env-variables.7.rst
deleted file mode 100644
index ce1e360..0000000
--- a/share/cmake-3.18/Help/manual/cmake-env-variables.7.rst
+++ /dev/null
@@ -1,92 +0,0 @@
-.. cmake-manual-description: CMake Environment Variables Reference
-
-cmake-env-variables(7)
-**********************
-
-.. only:: html
-
-   .. contents::
-
-This page lists environment variables that have special
-meaning to CMake.
-
-For general information on environment variables, see the
-:ref:`Environment Variables <CMake Language Environment Variables>`
-section in the cmake-language manual.
-
-Environment Variables that Change Behavior
-==========================================
-
-.. toctree::
-   :maxdepth: 1
-
-   /envvar/CMAKE_PREFIX_PATH
-
-Environment Variables that Control the Build
-============================================
-
-.. toctree::
-   :maxdepth: 1
-
-   /envvar/CMAKE_BUILD_PARALLEL_LEVEL
-   /envvar/CMAKE_CONFIG_TYPE
-   /envvar/CMAKE_EXPORT_COMPILE_COMMANDS
-   /envvar/CMAKE_GENERATOR
-   /envvar/CMAKE_GENERATOR_INSTANCE
-   /envvar/CMAKE_GENERATOR_PLATFORM
-   /envvar/CMAKE_GENERATOR_TOOLSET
-   /envvar/CMAKE_LANG_COMPILER_LAUNCHER
-   /envvar/CMAKE_MSVCIDE_RUN_PATH
-   /envvar/CMAKE_NO_VERBOSE
-   /envvar/CMAKE_OSX_ARCHITECTURES
-   /envvar/DESTDIR
-   /envvar/LDFLAGS
-   /envvar/MACOSX_DEPLOYMENT_TARGET
-   /envvar/PackageName_ROOT
-   /envvar/VERBOSE
-
-Environment Variables for Languages
-===================================
-
-.. toctree::
-   :maxdepth: 1
-
-   /envvar/ASM_DIALECT
-   /envvar/ASM_DIALECTFLAGS
-   /envvar/CC
-   /envvar/CFLAGS
-   /envvar/CSFLAGS
-   /envvar/CUDACXX
-   /envvar/CUDAFLAGS
-   /envvar/CUDAHOSTCXX
-   /envvar/CXX
-   /envvar/CXXFLAGS
-   /envvar/FC
-   /envvar/FFLAGS
-   /envvar/OBJC
-   /envvar/OBJCXX
-   /envvar/RC
-   /envvar/RCFLAGS
-   /envvar/SWIFTC
-
-Environment Variables for CTest
-===============================
-
-.. toctree::
-   :maxdepth: 1
-
-   /envvar/CMAKE_CONFIG_TYPE
-   /envvar/CTEST_INTERACTIVE_DEBUG_MODE
-   /envvar/CTEST_OUTPUT_ON_FAILURE
-   /envvar/CTEST_PARALLEL_LEVEL
-   /envvar/CTEST_PROGRESS_OUTPUT
-   /envvar/CTEST_USE_LAUNCHERS_DEFAULT
-   /envvar/DASHBOARD_TEST_FROM_CTEST
-
-Environment Variables for the CMake curses interface
-====================================================
-
-.. toctree::
-   :maxdepth: 1
-
-   /envvar/CCMAKE_COLORS
diff --git a/share/cmake-3.18/Help/manual/cmake-file-api.7.rst b/share/cmake-3.18/Help/manual/cmake-file-api.7.rst
deleted file mode 100644
index cc50952..0000000
--- a/share/cmake-3.18/Help/manual/cmake-file-api.7.rst
+++ /dev/null
@@ -1,1135 +0,0 @@
-.. cmake-manual-description: CMake File-Based API
-
-cmake-file-api(7)
-*****************
-
-.. only:: html
-
-   .. contents::
-
-Introduction
-============
-
-CMake provides a file-based API that clients may use to get semantic
-information about the buildsystems CMake generates.  Clients may use
-the API by writing query files to a specific location in a build tree
-to request zero or more `Object Kinds`_.  When CMake generates the
-buildsystem in that build tree it will read the query files and write
-reply files for the client to read.
-
-The file-based API uses a ``<build>/.cmake/api/`` directory at the top
-of a build tree.  The API is versioned to support changes to the layout
-of files within the API directory.  API file layout versioning is
-orthogonal to the versioning of `Object Kinds`_ used in replies.
-This version of CMake supports only one API version, `API v1`_.
-
-API v1
-======
-
-API v1 is housed in the ``<build>/.cmake/api/v1/`` directory.
-It has the following subdirectories:
-
-``query/``
-  Holds query files written by clients.
-  These may be `v1 Shared Stateless Query Files`_,
-  `v1 Client Stateless Query Files`_, or `v1 Client Stateful Query Files`_.
-
-``reply/``
-  Holds reply files written by CMake whenever it runs to generate a build
-  system.  These are indexed by a `v1 Reply Index File`_ file that may
-  reference additional `v1 Reply Files`_.  CMake owns all reply files.
-  Clients must never remove them.
-
-  Clients may look for and read a reply index file at any time.
-  Clients may optionally create the ``reply/`` directory at any time
-  and monitor it for the appearance of a new reply index file.
-
-v1 Shared Stateless Query Files
--------------------------------
-
-Shared stateless query files allow clients to share requests for
-major versions of the `Object Kinds`_ and get all requested versions
-recognized by the CMake that runs.
-
-Clients may create shared requests by creating empty files in the
-``v1/query/`` directory.  The form is::
-
-  <build>/.cmake/api/v1/query/<kind>-v<major>
-
-where ``<kind>`` is one of the `Object Kinds`_, ``-v`` is literal,
-and ``<major>`` is the major version number.
-
-Files of this form are stateless shared queries not owned by any specific
-client.  Once created they should not be removed without external client
-coordination or human intervention.
-
-v1 Client Stateless Query Files
--------------------------------
-
-Client stateless query files allow clients to create owned requests for
-major versions of the `Object Kinds`_ and get all requested versions
-recognized by the CMake that runs.
-
-Clients may create owned requests by creating empty files in
-client-specific query subdirectories.  The form is::
-
-  <build>/.cmake/api/v1/query/client-<client>/<kind>-v<major>
-
-where ``client-`` is literal, ``<client>`` is a string uniquely
-identifying the client, ``<kind>`` is one of the `Object Kinds`_,
-``-v`` is literal, and ``<major>`` is the major version number.
-Each client must choose a unique ``<client>`` identifier via its
-own means.
-
-Files of this form are stateless queries owned by the client ``<client>``.
-The owning client may remove them at any time.
-
-v1 Client Stateful Query Files
-------------------------------
-
-Stateful query files allow clients to request a list of versions of
-each of the `Object Kinds`_ and get only the most recent version
-recognized by the CMake that runs.
-
-Clients may create owned stateful queries by creating ``query.json``
-files in client-specific query subdirectories.  The form is::
-
-  <build>/.cmake/api/v1/query/client-<client>/query.json
-
-where ``client-`` is literal, ``<client>`` is a string uniquely
-identifying the client, and ``query.json`` is literal.  Each client
-must choose a unique ``<client>`` identifier via its own means.
-
-``query.json`` files are stateful queries owned by the client ``<client>``.
-The owning client may update or remove them at any time.  When a
-given client installation is updated it may then update the stateful
-query it writes to build trees to request newer object versions.
-This can be used to avoid asking CMake to generate multiple object
-versions unnecessarily.
-
-A ``query.json`` file must contain a JSON object:
-
-.. code-block:: json
-
-  {
-    "requests": [
-      { "kind": "<kind>" , "version": 1 },
-      { "kind": "<kind>" , "version": { "major": 1, "minor": 2 } },
-      { "kind": "<kind>" , "version": [2, 1] },
-      { "kind": "<kind>" , "version": [2, { "major": 1, "minor": 2 }] },
-      { "kind": "<kind>" , "version": 1, "client": {} },
-      { "kind": "..." }
-    ],
-    "client": {}
-  }
-
-The members are:
-
-``requests``
-  A JSON array containing zero or more requests.  Each request is
-  a JSON object with members:
-
-  ``kind``
-    Specifies one of the `Object Kinds`_ to be included in the reply.
-
-  ``version``
-    Indicates the version(s) of the object kind that the client
-    understands.  Versions have major and minor components following
-    semantic version conventions.  The value must be
-
-    * a JSON integer specifying a (non-negative) major version number, or
-    * a JSON object containing ``major`` and (optionally) ``minor``
-      members specifying non-negative integer version components, or
-    * a JSON array whose elements are each one of the above.
-
-  ``client``
-    Optional member reserved for use by the client.  This value is
-    preserved in the reply written for the client in the
-    `v1 Reply Index File`_ but is otherwise ignored.  Clients may use
-    this to pass custom information with a request through to its reply.
-
-  For each requested object kind CMake will choose the *first* version
-  that it recognizes for that kind among those listed in the request.
-  The response will use the selected *major* version with the highest
-  *minor* version known to the running CMake for that major version.
-  Therefore clients should list all supported major versions in
-  preferred order along with the minimal minor version required
-  for each major version.
-
-``client``
-  Optional member reserved for use by the client.  This value is
-  preserved in the reply written for the client in the
-  `v1 Reply Index File`_ but is otherwise ignored.  Clients may use
-  this to pass custom information with a query through to its reply.
-
-Other ``query.json`` top-level members are reserved for future use.
-If present they are ignored for forward compatibility.
-
-v1 Reply Index File
--------------------
-
-CMake writes an ``index-*.json`` file to the ``v1/reply/`` directory
-whenever it runs to generate a build system.  Clients must read the
-reply index file first and may read other `v1 Reply Files`_ only by
-following references.  The form of the reply index file name is::
-
-  <build>/.cmake/api/v1/reply/index-<unspecified>.json
-
-where ``index-`` is literal and ``<unspecified>`` is an unspecified
-name selected by CMake.  Whenever a new index file is generated it
-is given a new name and any old one is deleted.  During the short
-time between these steps there may be multiple index files present;
-the one with the largest name in lexicographic order is the current
-index file.
-
-The reply index file contains a JSON object:
-
-.. code-block:: json
-
-  {
-    "cmake": {
-      "version": {
-        "major": 3, "minor": 14, "patch": 0, "suffix": "",
-        "string": "3.14.0", "isDirty": false
-      },
-      "paths": {
-        "cmake": "/prefix/bin/cmake",
-        "ctest": "/prefix/bin/ctest",
-        "cpack": "/prefix/bin/cpack",
-        "root": "/prefix/share/cmake-3.14"
-      },
-      "generator": {
-        "multiConfig": false,
-        "name": "Unix Makefiles"
-      }
-    },
-    "objects": [
-      { "kind": "<kind>",
-        "version": { "major": 1, "minor": 0 },
-        "jsonFile": "<file>" },
-      { "...": "..." }
-    ],
-    "reply": {
-      "<kind>-v<major>": { "kind": "<kind>",
-                           "version": { "major": 1, "minor": 0 },
-                           "jsonFile": "<file>" },
-      "<unknown>": { "error": "unknown query file" },
-      "...": {},
-      "client-<client>": {
-        "<kind>-v<major>": { "kind": "<kind>",
-                             "version": { "major": 1, "minor": 0 },
-                             "jsonFile": "<file>" },
-        "<unknown>": { "error": "unknown query file" },
-        "...": {},
-        "query.json": {
-          "requests": [ {}, {}, {} ],
-          "responses": [
-            { "kind": "<kind>",
-              "version": { "major": 1, "minor": 0 },
-              "jsonFile": "<file>" },
-            { "error": "unknown query file" },
-            { "...": {} }
-          ],
-          "client": {}
-        }
-      }
-    }
-  }
-
-The members are:
-
-``cmake``
-  A JSON object containing information about the instance of CMake that
-  generated the reply.  It contains members:
-
-  ``version``
-    A JSON object specifying the version of CMake with members:
-
-    ``major``, ``minor``, ``patch``
-      Integer values specifying the major, minor, and patch version components.
-    ``suffix``
-      A string specifying the version suffix, if any, e.g. ``g0abc3``.
-    ``string``
-      A string specifying the full version in the format
-      ``<major>.<minor>.<patch>[-<suffix>]``.
-    ``isDirty``
-      A boolean indicating whether the version was built from a version
-      controlled source tree with local modifications.
-
-  ``paths``
-    A JSON object specifying paths to things that come with CMake.
-    It has members for ``cmake``, ``ctest``, and ``cpack`` whose values
-    are JSON strings specifying the absolute path to each tool,
-    represented with forward slashes.  It also has a ``root`` member for
-    the absolute path to the directory containing CMake resources like the
-    ``Modules/`` directory (see :variable:`CMAKE_ROOT`).
-
-  ``generator``
-    A JSON object describing the CMake generator used for the build.
-    It has members:
-
-    ``multiConfig``
-      A boolean specifying whether the generator supports multiple output
-      configurations.
-    ``name``
-      A string specifying the name of the generator.
-    ``platform``
-      If the generator supports :variable:`CMAKE_GENERATOR_PLATFORM`,
-      this is a string specifying the generator platform name.
-
-``objects``
-  A JSON array listing all versions of all `Object Kinds`_ generated
-  as part of the reply.  Each array entry is a
-  `v1 Reply File Reference`_.
-
-``reply``
-  A JSON object mirroring the content of the ``query/`` directory
-  that CMake loaded to produce the reply.  The members are of the form
-
-  ``<kind>-v<major>``
-    A member of this form appears for each of the
-    `v1 Shared Stateless Query Files`_ that CMake recognized as a
-    request for object kind ``<kind>`` with major version ``<major>``.
-    The value is a `v1 Reply File Reference`_ to the corresponding
-    reply file for that object kind and version.
-
-  ``<unknown>``
-    A member of this form appears for each of the
-    `v1 Shared Stateless Query Files`_ that CMake did not recognize.
-    The value is a JSON object with a single ``error`` member
-    containing a string with an error message indicating that the
-    query file is unknown.
-
-  ``client-<client>``
-    A member of this form appears for each client-owned directory
-    holding `v1 Client Stateless Query Files`_.
-    The value is a JSON object mirroring the content of the
-    ``query/client-<client>/`` directory.  The members are of the form:
-
-    ``<kind>-v<major>``
-      A member of this form appears for each of the
-      `v1 Client Stateless Query Files`_ that CMake recognized as a
-      request for object kind ``<kind>`` with major version ``<major>``.
-      The value is a `v1 Reply File Reference`_ to the corresponding
-      reply file for that object kind and version.
-
-    ``<unknown>``
-      A member of this form appears for each of the
-      `v1 Client Stateless Query Files`_ that CMake did not recognize.
-      The value is a JSON object with a single ``error`` member
-      containing a string with an error message indicating that the
-      query file is unknown.
-
-    ``query.json``
-      This member appears for clients using
-      `v1 Client Stateful Query Files`_.
-      If the ``query.json`` file failed to read or parse as a JSON object,
-      this member is a JSON object with a single ``error`` member
-      containing a string with an error message.  Otherwise, this member
-      is a JSON object mirroring the content of the ``query.json`` file.
-      The members are:
-
-      ``client``
-        A copy of the ``query.json`` file ``client`` member, if it exists.
-
-      ``requests``
-        A copy of the ``query.json`` file ``requests`` member, if it exists.
-
-      ``responses``
-        If the ``query.json`` file ``requests`` member is missing or invalid,
-        this member is a JSON object with a single ``error`` member
-        containing a string with an error message.  Otherwise, this member
-        contains a JSON array with a response for each entry of the
-        ``requests`` array, in the same order.  Each response is
-
-        * a JSON object with a single ``error`` member containing a string
-          with an error message, or
-        * a `v1 Reply File Reference`_ to the corresponding reply file for
-          the requested object kind and selected version.
-
-After reading the reply index file, clients may read the other
-`v1 Reply Files`_ it references.
-
-v1 Reply File Reference
-^^^^^^^^^^^^^^^^^^^^^^^
-
-The reply index file represents each reference to another reply file
-using a JSON object with members:
-
-``kind``
-  A string specifying one of the `Object Kinds`_.
-``version``
-  A JSON object with members ``major`` and ``minor`` specifying
-  integer version components of the object kind.
-``jsonFile``
-  A JSON string specifying a path relative to the reply index file
-  to another JSON file containing the object.
-
-v1 Reply Files
---------------
-
-Reply files containing specific `Object Kinds`_ are written by CMake.
-The names of these files are unspecified and must not be interpreted
-by clients.  Clients must first read the `v1 Reply Index File`_ and
-and follow references to the names of the desired response objects.
-
-Reply files (including the index file) will never be replaced by
-files of the same name but different content.  This allows a client
-to read the files concurrently with a running CMake that may generate
-a new reply.  However, after generating a new reply CMake will attempt
-to remove reply files from previous runs that it did not just write.
-If a client attempts to read a reply file referenced by the index but
-finds the file missing, that means a concurrent CMake has generated
-a new reply.  The client may simply start again by reading the new
-reply index file.
-
-.. _`file-api object kinds`:
-
-Object Kinds
-============
-
-The CMake file-based API reports semantic information about the build
-system using the following kinds of JSON objects.  Each kind of object
-is versioned independently using semantic versioning with major and
-minor components.  Every kind of object has the form:
-
-.. code-block:: json
-
-  {
-    "kind": "<kind>",
-    "version": { "major": 1, "minor": 0 },
-    "...": {}
-  }
-
-The ``kind`` member is a string specifying the object kind name.
-The ``version`` member is a JSON object with ``major`` and ``minor``
-members specifying integer components of the object kind's version.
-Additional top-level members are specific to each object kind.
-
-Object Kind "codemodel"
------------------------
-
-The ``codemodel`` object kind describes the build system structure as
-modeled by CMake.
-
-There is only one ``codemodel`` object major version, version 2.
-Version 1 does not exist to avoid confusion with that from
-:manual:`cmake-server(7)` mode.
-
-"codemodel" version 2
-^^^^^^^^^^^^^^^^^^^^^
-
-``codemodel`` object version 2 is a JSON object:
-
-.. code-block:: json
-
-  {
-    "kind": "codemodel",
-    "version": { "major": 2, "minor": 1 },
-    "paths": {
-      "source": "/path/to/top-level-source-dir",
-      "build": "/path/to/top-level-build-dir"
-    },
-    "configurations": [
-      {
-        "name": "Debug",
-        "directories": [
-          {
-            "source": ".",
-            "build": ".",
-            "childIndexes": [ 1 ],
-            "projectIndex": 0,
-            "targetIndexes": [ 0 ],
-            "hasInstallRule": true,
-            "minimumCMakeVersion": {
-              "string": "3.14"
-            }
-          },
-          {
-            "source": "sub",
-            "build": "sub",
-            "parentIndex": 0,
-            "projectIndex": 0,
-            "targetIndexes": [ 1 ],
-            "minimumCMakeVersion": {
-              "string": "3.14"
-            }
-          }
-        ],
-        "projects": [
-          {
-            "name": "MyProject",
-            "directoryIndexes": [ 0, 1 ],
-            "targetIndexes": [ 0, 1 ]
-          }
-        ],
-        "targets": [
-          {
-            "name": "MyExecutable",
-            "directoryIndex": 0,
-            "projectIndex": 0,
-            "jsonFile": "<file>"
-          },
-          {
-            "name": "MyLibrary",
-            "directoryIndex": 1,
-            "projectIndex": 0,
-            "jsonFile": "<file>"
-          }
-        ]
-      }
-    ]
-  }
-
-The members specific to ``codemodel`` objects are:
-
-``paths``
-  A JSON object containing members:
-
-  ``source``
-    A string specifying the absolute path to the top-level source directory,
-    represented with forward slashes.
-
-  ``build``
-    A string specifying the absolute path to the top-level build directory,
-    represented with forward slashes.
-
-``configurations``
-  A JSON array of entries corresponding to available build configurations.
-  On single-configuration generators there is one entry for the value
-  of the :variable:`CMAKE_BUILD_TYPE` variable.  For multi-configuration
-  generators there is an entry for each configuration listed in the
-  :variable:`CMAKE_CONFIGURATION_TYPES` variable.
-  Each entry is a JSON object containing members:
-
-  ``name``
-    A string specifying the name of the configuration, e.g. ``Debug``.
-
-  ``directories``
-    A JSON array of entries each corresponding to a build system directory
-    whose source directory contains a ``CMakeLists.txt`` file.  The first
-    entry corresponds to the top-level directory.  Each entry is a
-    JSON object containing members:
-
-    ``source``
-      A string specifying the path to the source directory, represented
-      with forward slashes.  If the directory is inside the top-level
-      source directory then the path is specified relative to that
-      directory (with ``.`` for the top-level source directory itself).
-      Otherwise the path is absolute.
-
-    ``build``
-      A string specifying the path to the build directory, represented
-      with forward slashes.  If the directory is inside the top-level
-      build directory then the path is specified relative to that
-      directory (with ``.`` for the top-level build directory itself).
-      Otherwise the path is absolute.
-
-    ``parentIndex``
-      Optional member that is present when the directory is not top-level.
-      The value is an unsigned integer 0-based index of another entry in
-      the main ``directories`` array that corresponds to the parent
-      directory that added this directory as a subdirectory.
-
-    ``childIndexes``
-      Optional member that is present when the directory has subdirectories.
-      The value is a JSON array of entries corresponding to child directories
-      created by the :command:`add_subdirectory` or :command:`subdirs`
-      command.  Each entry is an unsigned integer 0-based index of another
-      entry in the main ``directories`` array.
-
-    ``projectIndex``
-      An unsigned integer 0-based index into the main ``projects`` array
-      indicating the build system project to which the this directory belongs.
-
-    ``targetIndexes``
-      Optional member that is present when the directory itself has targets,
-      excluding those belonging to subdirectories.  The value is a JSON
-      array of entries corresponding to the targets.  Each entry is an
-      unsigned integer 0-based index into the main ``targets`` array.
-
-    ``minimumCMakeVersion``
-      Optional member present when a minimum required version of CMake is
-      known for the directory.  This is the ``<min>`` version given to the
-      most local call to the :command:`cmake_minimum_required(VERSION)`
-      command in the directory itself or one of its ancestors.
-      The value is a JSON object with one member:
-
-      ``string``
-        A string specifying the minimum required version in the format::
-
-          <major>.<minor>[.<patch>[.<tweak>]][<suffix>]
-
-        Each component is an unsigned integer and the suffix may be an
-        arbitrary string.
-
-    ``hasInstallRule``
-      Optional member that is present with boolean value ``true`` when
-      the directory or one of its subdirectories contains any
-      :command:`install` rules, i.e. whether a ``make install``
-      or equivalent rule is available.
-
-  ``projects``
-    A JSON array of entries corresponding to the top-level project
-    and sub-projects defined in the build system.  Each (sub-)project
-    corresponds to a source directory whose ``CMakeLists.txt`` file
-    calls the :command:`project` command with a project name different
-    from its parent directory.  The first entry corresponds to the
-    top-level project.
-
-    Each entry is a JSON object containing members:
-
-    ``name``
-      A string specifying the name given to the :command:`project` command.
-
-    ``parentIndex``
-      Optional member that is present when the project is not top-level.
-      The value is an unsigned integer 0-based index of another entry in
-      the main ``projects`` array that corresponds to the parent project
-      that added this project as a sub-project.
-
-    ``childIndexes``
-      Optional member that is present when the project has sub-projects.
-      The value is a JSON array of entries corresponding to the sub-projects.
-      Each entry is an unsigned integer 0-based index of another
-      entry in the main ``projects`` array.
-
-    ``directoryIndexes``
-      A JSON array of entries corresponding to build system directories
-      that are part of the project.  The first entry corresponds to the
-      top-level directory of the project.  Each entry is an unsigned
-      integer 0-based index into the main ``directories`` array.
-
-    ``targetIndexes``
-      Optional member that is present when the project itself has targets,
-      excluding those belonging to sub-projects.  The value is a JSON
-      array of entries corresponding to the targets.  Each entry is an
-      unsigned integer 0-based index into the main ``targets`` array.
-
-  ``targets``
-    A JSON array of entries corresponding to the build system targets.
-    Such targets are created by calls to :command:`add_executable`,
-    :command:`add_library`, and :command:`add_custom_target`, excluding
-    imported targets and interface libraries (which do not generate any
-    build rules).  Each entry is a JSON object containing members:
-
-    ``name``
-      A string specifying the target name.
-
-    ``id``
-      A string uniquely identifying the target.  This matches the ``id``
-      field in the file referenced by ``jsonFile``.
-
-    ``directoryIndex``
-      An unsigned integer 0-based index into the main ``directories`` array
-      indicating the build system directory in which the target is defined.
-
-    ``projectIndex``
-      An unsigned integer 0-based index into the main ``projects`` array
-      indicating the build system project in which the target is defined.
-
-    ``jsonFile``
-      A JSON string specifying a path relative to the codemodel file
-      to another JSON file containing a
-      `"codemodel" version 2 "target" object`_.
-
-"codemodel" version 2 "target" object
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-A codemodel "target" object is referenced by a `"codemodel" version 2`_
-object's ``targets`` array.  Each "target" object is a JSON object
-with members:
-
-``name``
-  A string specifying the logical name of the target.
-
-``id``
-  A string uniquely identifying the target.  The format is unspecified
-  and should not be interpreted by clients.
-
-``type``
-  A string specifying the type of the target.  The value is one of
-  ``EXECUTABLE``, ``STATIC_LIBRARY``, ``SHARED_LIBRARY``,
-  ``MODULE_LIBRARY``, ``OBJECT_LIBRARY``, or ``UTILITY``.
-
-``backtrace``
-  Optional member that is present when a CMake language backtrace to
-  the command in the source code that created the target is available.
-  The value is an unsigned integer 0-based index into the
-  ``backtraceGraph`` member's ``nodes`` array.
-
-``folder``
-  Optional member that is present when the :prop_tgt:`FOLDER` target
-  property is set.  The value is a JSON object with one member:
-
-  ``name``
-    A string specifying the name of the target folder.
-
-``paths``
-  A JSON object containing members:
-
-  ``source``
-    A string specifying the path to the target's source directory,
-    represented with forward slashes.  If the directory is inside the
-    top-level source directory then the path is specified relative to
-    that directory (with ``.`` for the top-level source directory itself).
-    Otherwise the path is absolute.
-
-  ``build``
-    A string specifying the path to the target's build directory,
-    represented with forward slashes.  If the directory is inside the
-    top-level build directory then the path is specified relative to
-    that directory (with ``.`` for the top-level build directory itself).
-    Otherwise the path is absolute.
-
-``nameOnDisk``
-  Optional member that is present for executable and library targets
-  that are linked or archived into a single primary artifact.
-  The value is a string specifying the file name of that artifact on disk.
-
-``artifacts``
-  Optional member that is present for executable and library targets
-  that produce artifacts on disk meant for consumption by dependents.
-  The value is a JSON array of entries corresponding to the artifacts.
-  Each entry is a JSON object containing one member:
-
-  ``path``
-    A string specifying the path to the file on disk, represented with
-    forward slashes.  If the file is inside the top-level build directory
-    then the path is specified relative to that directory.
-    Otherwise the path is absolute.
-
-``isGeneratorProvided``
-  Optional member that is present with boolean value ``true`` if the
-  target is provided by CMake's build system generator rather than by
-  a command in the source code.
-
-``install``
-  Optional member that is present when the target has an :command:`install`
-  rule.  The value is a JSON object with members:
-
-  ``prefix``
-    A JSON object specifying the installation prefix.  It has one member:
-
-    ``path``
-      A string specifying the value of :variable:`CMAKE_INSTALL_PREFIX`.
-
-  ``destinations``
-    A JSON array of entries specifying an install destination path.
-    Each entry is a JSON object with members:
-
-    ``path``
-      A string specifying the install destination path.  The path may
-      be absolute or relative to the install prefix.
-
-    ``backtrace``
-      Optional member that is present when a CMake language backtrace to
-      the :command:`install` command invocation that specified this
-      destination is available.  The value is an unsigned integer 0-based
-      index into the ``backtraceGraph`` member's ``nodes`` array.
-
-``link``
-  Optional member that is present for executables and shared library
-  targets that link into a runtime binary.  The value is a JSON object
-  with members describing the link step:
-
-  ``language``
-    A string specifying the language (e.g. ``C``, ``CXX``, ``Fortran``)
-    of the toolchain is used to invoke the linker.
-
-  ``commandFragments``
-    Optional member that is present when fragments of the link command
-    line invocation are available.  The value is a JSON array of entries
-    specifying ordered fragments.  Each entry is a JSON object with members:
-
-    ``fragment``
-      A string specifying a fragment of the link command line invocation.
-      The value is encoded in the build system's native shell format.
-
-    ``role``
-      A string specifying the role of the fragment's content:
-
-      * ``flags``: link flags.
-      * ``libraries``: link library file paths or flags.
-      * ``libraryPath``: library search path flags.
-      * ``frameworkPath``: macOS framework search path flags.
-
-  ``lto``
-    Optional member that is present with boolean value ``true``
-    when link-time optimization (a.k.a. interprocedural optimization
-    or link-time code generation) is enabled.
-
-  ``sysroot``
-    Optional member that is present when the :variable:`CMAKE_SYSROOT_LINK`
-    or :variable:`CMAKE_SYSROOT` variable is defined.  The value is a
-    JSON object with one member:
-
-    ``path``
-      A string specifying the absolute path to the sysroot, represented
-      with forward slashes.
-
-``archive``
-  Optional member that is present for static library targets.  The value
-  is a JSON object with members describing the archive step:
-
-  ``commandFragments``
-    Optional member that is present when fragments of the archiver command
-    line invocation are available.  The value is a JSON array of entries
-    specifying the fragments.  Each entry is a JSON object with members:
-
-    ``fragment``
-      A string specifying a fragment of the archiver command line invocation.
-      The value is encoded in the build system's native shell format.
-
-    ``role``
-      A string specifying the role of the fragment's content:
-
-      * ``flags``: archiver flags.
-
-  ``lto``
-    Optional member that is present with boolean value ``true``
-    when link-time optimization (a.k.a. interprocedural optimization
-    or link-time code generation) is enabled.
-
-``dependencies``
-  Optional member that is present when the target depends on other targets.
-  The value is a JSON array of entries corresponding to the dependencies.
-  Each entry is a JSON object with members:
-
-  ``id``
-    A string uniquely identifying the target on which this target depends.
-    This matches the main ``id`` member of the other target.
-
-  ``backtrace``
-    Optional member that is present when a CMake language backtrace to
-    the :command:`add_dependencies`, :command:`target_link_libraries`,
-    or other command invocation that created this dependency is
-    available.  The value is an unsigned integer 0-based index into
-    the ``backtraceGraph`` member's ``nodes`` array.
-
-``sources``
-  A JSON array of entries corresponding to the target's source files.
-  Each entry is a JSON object with members:
-
-  ``path``
-    A string specifying the path to the source file on disk, represented
-    with forward slashes.  If the file is inside the top-level source
-    directory then the path is specified relative to that directory.
-    Otherwise the path is absolute.
-
-  ``compileGroupIndex``
-    Optional member that is present when the source is compiled.
-    The value is an unsigned integer 0-based index into the
-    ``compileGroups`` array.
-
-  ``sourceGroupIndex``
-    Optional member that is present when the source is part of a source
-    group either via the :command:`source_group` command or by default.
-    The value is an unsigned integer 0-based index into the
-    ``sourceGroups`` array.
-
-  ``isGenerated``
-    Optional member that is present with boolean value ``true`` if
-    the source is :prop_sf:`GENERATED`.
-
-  ``backtrace``
-    Optional member that is present when a CMake language backtrace to
-    the :command:`target_sources`, :command:`add_executable`,
-    :command:`add_library`, :command:`add_custom_target`, or other
-    command invocation that added this source to the target is
-    available.  The value is an unsigned integer 0-based index into
-    the ``backtraceGraph`` member's ``nodes`` array.
-
-``sourceGroups``
-  Optional member that is present when sources are grouped together by
-  the :command:`source_group` command or by default.  The value is a
-  JSON array of entries corresponding to the groups.  Each entry is
-  a JSON object with members:
-
-  ``name``
-    A string specifying the name of the source group.
-
-  ``sourceIndexes``
-    A JSON array listing the sources belonging to the group.
-    Each entry is an unsigned integer 0-based index into the
-    main ``sources`` array for the target.
-
-``compileGroups``
-  Optional member that is present when the target has sources that compile.
-  The value is a JSON array of entries corresponding to groups of sources
-  that all compile with the same settings.  Each entry is a JSON object
-  with members:
-
-  ``sourceIndexes``
-    A JSON array listing the sources belonging to the group.
-    Each entry is an unsigned integer 0-based index into the
-    main ``sources`` array for the target.
-
-  ``language``
-    A string specifying the language (e.g. ``C``, ``CXX``, ``Fortran``)
-    of the toolchain is used to compile the source file.
-
-  ``compileCommandFragments``
-    Optional member that is present when fragments of the compiler command
-    line invocation are available.  The value is a JSON array of entries
-    specifying ordered fragments.  Each entry is a JSON object with
-    one member:
-
-    ``fragment``
-      A string specifying a fragment of the compile command line invocation.
-      The value is encoded in the build system's native shell format.
-
-  ``includes``
-    Optional member that is present when there are include directories.
-    The value is a JSON array with an entry for each directory.  Each
-    entry is a JSON object with members:
-
-    ``path``
-      A string specifying the path to the include directory,
-      represented with forward slashes.
-
-    ``isSystem``
-      Optional member that is present with boolean value ``true`` if
-      the include directory is marked as a system include directory.
-
-    ``backtrace``
-      Optional member that is present when a CMake language backtrace to
-      the :command:`target_include_directories` or other command invocation
-      that added this include directory is available.  The value is
-      an unsigned integer 0-based index into the ``backtraceGraph``
-      member's ``nodes`` array.
-
-  ``precompileHeaders``
-    Optional member that is present when :command:`target_precompile_headers`
-    or other command invocations set :prop_tgt:`PRECOMPILE_HEADERS` on the
-    target.  The value is a JSON array with an entry for each header.  Each
-    entry is a JSON object with members:
-
-    ``header``
-      Full path to the precompile header file.
-
-    ``backtrace``
-      Optional member that is present when a CMake language backtrace to
-      the :command:`target_precompile_headers` or other command invocation
-      that added this precompiled header is available.  The value is an
-      unsigned integer 0-based index into the ``backtraceGraph`` member's
-      ``nodes`` array.
-
-    This field was added in codemodel version 2.1.
-
-  ``defines``
-    Optional member that is present when there are preprocessor definitions.
-    The value is a JSON array with an entry for each definition.  Each
-    entry is a JSON object with members:
-
-    ``define``
-      A string specifying the preprocessor definition in the format
-      ``<name>[=<value>]``, e.g. ``DEF`` or ``DEF=1``.
-
-    ``backtrace``
-      Optional member that is present when a CMake language backtrace to
-      the :command:`target_compile_definitions` or other command invocation
-      that added this preprocessor definition is available.  The value is
-      an unsigned integer 0-based index into the ``backtraceGraph``
-      member's ``nodes`` array.
-
-  ``sysroot``
-    Optional member that is present when the
-    :variable:`CMAKE_SYSROOT_COMPILE` or :variable:`CMAKE_SYSROOT`
-    variable is defined.  The value is a JSON object with one member:
-
-    ``path``
-      A string specifying the absolute path to the sysroot, represented
-      with forward slashes.
-
-``backtraceGraph``
-  A JSON object describing the graph of backtraces whose nodes are
-  referenced from ``backtrace`` members elsewhere.  The members are:
-
-  ``nodes``
-    A JSON array listing nodes in the backtrace graph.  Each entry
-    is a JSON object with members:
-
-    ``file``
-      An unsigned integer 0-based index into the backtrace ``files`` array.
-
-    ``line``
-      An optional member present when the node represents a line within
-      the file.  The value is an unsigned integer 1-based line number.
-
-    ``command``
-      An optional member present when the node represents a command
-      invocation within the file.  The value is an unsigned integer
-      0-based index into the backtrace ``commands`` array.
-
-    ``parent``
-      An optional member present when the node is not the bottom of
-      the call stack.  The value is an unsigned integer 0-based index
-      of another entry in the backtrace ``nodes`` array.
-
-  ``commands``
-    A JSON array listing command names referenced by backtrace nodes.
-    Each entry is a string specifying a command name.
-
-  ``files``
-    A JSON array listing CMake language files referenced by backtrace nodes.
-    Each entry is a string specifying the path to a file, represented
-    with forward slashes.  If the file is inside the top-level source
-    directory then the path is specified relative to that directory.
-    Otherwise the path is absolute.
-
-Object Kind "cache"
--------------------
-
-The ``cache`` object kind lists cache entries.  These are the
-:ref:`CMake Language Variables` stored in the persistent cache
-(``CMakeCache.txt``) for the build tree.
-
-There is only one ``cache`` object major version, version 2.
-Version 1 does not exist to avoid confusion with that from
-:manual:`cmake-server(7)` mode.
-
-"cache" version 2
-^^^^^^^^^^^^^^^^^
-
-``cache`` object version 2 is a JSON object:
-
-.. code-block:: json
-
-  {
-    "kind": "cache",
-    "version": { "major": 2, "minor": 0 },
-    "entries": [
-      {
-        "name": "BUILD_SHARED_LIBS",
-        "value": "ON",
-        "type": "BOOL",
-        "properties": [
-          {
-            "name": "HELPSTRING",
-            "value": "Build shared libraries"
-          }
-        ]
-      },
-      {
-        "name": "CMAKE_GENERATOR",
-        "value": "Unix Makefiles",
-        "type": "INTERNAL",
-        "properties": [
-          {
-            "name": "HELPSTRING",
-            "value": "Name of generator."
-          }
-        ]
-      }
-    ]
-  }
-
-The members specific to ``cache`` objects are:
-
-``entries``
-  A JSON array whose entries are each a JSON object specifying a
-  cache entry.  The members of each entry are:
-
-  ``name``
-    A string specifying the name of the entry.
-
-  ``value``
-    A string specifying the value of the entry.
-
-  ``type``
-    A string specifying the type of the entry used by
-    :manual:`cmake-gui(1)` to choose a widget for editing.
-
-  ``properties``
-    A JSON array of entries specifying associated
-    :ref:`cache entry properties <Cache Entry Properties>`.
-    Each entry is a JSON object containing members:
-
-    ``name``
-      A string specifying the name of the cache entry property.
-
-    ``value``
-      A string specifying the value of the cache entry property.
-
-Object Kind "cmakeFiles"
-------------------------
-
-The ``cmakeFiles`` object kind lists files used by CMake while
-configuring and generating the build system.  These include the
-``CMakeLists.txt`` files as well as included ``.cmake`` files.
-
-There is only one ``cmakeFiles`` object major version, version 1.
-
-"cmakeFiles" version 1
-^^^^^^^^^^^^^^^^^^^^^^
-
-``cmakeFiles`` object version 1 is a JSON object:
-
-.. code-block:: json
-
-  {
-    "kind": "cmakeFiles",
-    "version": { "major": 1, "minor": 0 },
-    "paths": {
-      "build": "/path/to/top-level-build-dir",
-      "source": "/path/to/top-level-source-dir"
-    },
-    "inputs": [
-      {
-        "path": "CMakeLists.txt"
-      },
-      {
-        "isGenerated": true,
-        "path": "/path/to/top-level-build-dir/.../CMakeSystem.cmake"
-      },
-      {
-        "isExternal": true,
-        "path": "/path/to/external/third-party/module.cmake"
-      },
-      {
-        "isCMake": true,
-        "isExternal": true,
-        "path": "/path/to/cmake/Modules/CMakeGenericSystem.cmake"
-      }
-    ]
-  }
-
-The members specific to ``cmakeFiles`` objects are:
-
-``paths``
-  A JSON object containing members:
-
-  ``source``
-    A string specifying the absolute path to the top-level source directory,
-    represented with forward slashes.
-
-  ``build``
-    A string specifying the absolute path to the top-level build directory,
-    represented with forward slashes.
-
-``inputs``
-  A JSON array whose entries are each a JSON object specifying an input
-  file used by CMake when configuring and generating the build system.
-  The members of each entry are:
-
-  ``path``
-    A string specifying the path to an input file to CMake, represented
-    with forward slashes.  If the file is inside the top-level source
-    directory then the path is specified relative to that directory.
-    Otherwise the path is absolute.
-
-  ``isGenerated``
-    Optional member that is present with boolean value ``true``
-    if the path specifies a file that is under the top-level
-    build directory and the build is out-of-source.
-    This member is not available on in-source builds.
-
-  ``isExternal``
-    Optional member that is present with boolean value ``true``
-    if the path specifies a file that is not under the top-level
-    source or build directories.
-
-  ``isCMake``
-    Optional member that is present with boolean value ``true``
-    if the path specifies a file in the CMake installation.
diff --git a/share/cmake-3.18/Help/manual/cmake-generator-expressions.7.rst b/share/cmake-3.18/Help/manual/cmake-generator-expressions.7.rst
deleted file mode 100644
index 124da44..0000000
--- a/share/cmake-3.18/Help/manual/cmake-generator-expressions.7.rst
+++ /dev/null
@@ -1,791 +0,0 @@
-.. cmake-manual-description: CMake Generator Expressions
-
-cmake-generator-expressions(7)
-******************************
-
-.. only:: html
-
-   .. contents::
-
-Introduction
-============
-
-Generator expressions are evaluated during build system generation to produce
-information specific to each build configuration.
-
-Generator expressions are allowed in the context of many target properties,
-such as :prop_tgt:`LINK_LIBRARIES`, :prop_tgt:`INCLUDE_DIRECTORIES`,
-:prop_tgt:`COMPILE_DEFINITIONS` and others.  They may also be used when using
-commands to populate those properties, such as :command:`target_link_libraries`,
-:command:`target_include_directories`, :command:`target_compile_definitions`
-and others.
-
-They enable conditional linking, conditional definitions used when compiling,
-conditional include directories, and more.  The conditions may be based on
-the build configuration, target properties, platform information or any other
-queryable information.
-
-Generator expressions have the form ``$<...>``.  To avoid confusion, this page
-deviates from most of the CMake documentation in that it omits angular brackets
-``<...>`` around placeholders like ``condition``, ``string``, ``target``,
-among others.
-
-Generator expressions can be nested, as shown in most of the examples below.
-
-.. _`Boolean Generator Expressions`:
-
-Boolean Generator Expressions
-=============================
-
-Boolean expressions evaluate to either ``0`` or ``1``.
-They are typically used to construct the condition in a :ref:`conditional
-generator expression<Conditional Generator Expressions>`.
-
-Available boolean expressions are:
-
-Logical Operators
------------------
-
-``$<BOOL:string>``
-  Converts ``string`` to ``0`` or ``1``. Evaluates to ``0`` if any of the
-  following is true:
-
-  * ``string`` is empty,
-  * ``string`` is a case-insensitive equal of
-    ``0``, ``FALSE``, ``OFF``, ``N``, ``NO``, ``IGNORE``, or ``NOTFOUND``, or
-  * ``string`` ends in the suffix ``-NOTFOUND`` (case-sensitive).
-
-  Otherwise evaluates to ``1``.
-
-``$<AND:conditions>``
-  where ``conditions`` is a comma-separated list of boolean expressions.
-  Evaluates to ``1`` if all conditions are ``1``.
-  Otherwise evaluates to ``0``.
-
-``$<OR:conditions>``
-  where ``conditions`` is a comma-separated list of boolean expressions.
-  Evaluates to ``1`` if at least one of the conditions is ``1``.
-  Otherwise evaluates to ``0``.
-
-``$<NOT:condition>``
-  ``0`` if ``condition`` is ``1``, else ``1``.
-
-String Comparisons
-------------------
-
-``$<STREQUAL:string1,string2>``
-  ``1`` if ``string1`` and ``string2`` are equal, else ``0``.
-  The comparison is case-sensitive.  For a case-insensitive comparison,
-  combine with a :ref:`string transforming generator expression
-  <String Transforming Generator Expressions>`,
-
-  .. code-block:: cmake
-
-    $<STREQUAL:$<UPPER_CASE:${foo}>,"BAR"> # "1" if ${foo} is any of "BAR", "Bar", "bar", ...
-
-``$<EQUAL:value1,value2>``
-  ``1`` if ``value1`` and ``value2`` are numerically equal, else ``0``.
-``$<IN_LIST:string,list>``
-  ``1`` if ``string`` is member of the semicolon-separated ``list``, else ``0``.
-  Uses case-sensitive comparisons.
-``$<VERSION_LESS:v1,v2>``
-  ``1`` if ``v1`` is a version less than ``v2``, else ``0``.
-``$<VERSION_GREATER:v1,v2>``
-  ``1`` if ``v1`` is a version greater than ``v2``, else ``0``.
-``$<VERSION_EQUAL:v1,v2>``
-  ``1`` if ``v1`` is the same version as ``v2``, else ``0``.
-``$<VERSION_LESS_EQUAL:v1,v2>``
-  ``1`` if ``v1`` is a version less than or equal to ``v2``, else ``0``.
-``$<VERSION_GREATER_EQUAL:v1,v2>``
-  ``1`` if ``v1`` is a version greater than or equal to ``v2``, else ``0``.
-
-
-Variable Queries
-----------------
-
-``$<TARGET_EXISTS:target>``
-  ``1`` if ``target`` exists, else ``0``.
-``$<CONFIG:cfg>``
-  ``1`` if config is ``cfg``, else ``0``. This is a case-insensitive comparison.
-  The mapping in :prop_tgt:`MAP_IMPORTED_CONFIG_<CONFIG>` is also considered by
-  this expression when it is evaluated on a property on an :prop_tgt:`IMPORTED`
-  target.
-``$<PLATFORM_ID:platform_ids>``
-  where ``platform_ids`` is a comma-separated list.
-  ``1`` if the CMake's platform id matches any one of the entries in
-  ``platform_ids``, otherwise ``0``.
-  See also the :variable:`CMAKE_SYSTEM_NAME` variable.
-``$<C_COMPILER_ID:compiler_ids>``
-  where ``compiler_ids`` is a comma-separated list.
-  ``1`` if the CMake's compiler id of the C compiler matches any one
-  of the entries in ``compiler_ids``, otherwise ``0``.
-  See also the :variable:`CMAKE_<LANG>_COMPILER_ID` variable.
-``$<CXX_COMPILER_ID:compiler_ids>``
-  where ``compiler_ids`` is a comma-separated list.
-  ``1`` if the CMake's compiler id of the CXX compiler matches any one
-  of the entries in ``compiler_ids``, otherwise ``0``.
-  See also the :variable:`CMAKE_<LANG>_COMPILER_ID` variable.
-``$<CUDA_COMPILER_ID:compiler_ids>``
-  where ``compiler_ids`` is a comma-separated list.
-  ``1`` if the CMake's compiler id of the CUDA compiler matches any one
-  of the entries in ``compiler_ids``, otherwise ``0``.
-  See also the :variable:`CMAKE_<LANG>_COMPILER_ID` variable.
-``$<OBJC_COMPILER_ID:compiler_ids>``
-  where ``compiler_ids`` is a comma-separated list.
-  ``1`` if the CMake's compiler id of the Objective-C compiler matches any one
-  of the entries in ``compiler_ids``, otherwise ``0``.
-  See also the :variable:`CMAKE_<LANG>_COMPILER_ID` variable.
-``$<OBJCXX_COMPILER_ID:compiler_ids>``
-  where ``compiler_ids`` is a comma-separated list.
-  ``1`` if the CMake's compiler id of the Objective-C++ compiler matches any one
-  of the entries in ``compiler_ids``, otherwise ``0``.
-  See also the :variable:`CMAKE_<LANG>_COMPILER_ID` variable.
-``$<Fortran_COMPILER_ID:compiler_ids>``
-  where ``compiler_ids`` is a comma-separated list.
-  ``1`` if the CMake's compiler id of the Fortran compiler matches any one
-  of the entries in ``compiler_ids``, otherwise ``0``.
-  See also the :variable:`CMAKE_<LANG>_COMPILER_ID` variable.
-``$<C_COMPILER_VERSION:version>``
-  ``1`` if the version of the C compiler matches ``version``, otherwise ``0``.
-  See also the :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable.
-``$<CXX_COMPILER_VERSION:version>``
-  ``1`` if the version of the CXX compiler matches ``version``, otherwise ``0``.
-  See also the :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable.
-``$<CUDA_COMPILER_VERSION:version>``
-  ``1`` if the version of the CXX compiler matches ``version``, otherwise ``0``.
-  See also the :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable.
-``$<OBJC_COMPILER_VERSION:version>``
-  ``1`` if the version of the OBJC compiler matches ``version``, otherwise ``0``.
-  See also the :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable.
-``$<OBJCXX_COMPILER_VERSION:version>``
-  ``1`` if the version of the OBJCXX compiler matches ``version``, otherwise ``0``.
-  See also the :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable.
-``$<Fortran_COMPILER_VERSION:version>``
-  ``1`` if the version of the Fortran compiler matches ``version``, otherwise ``0``.
-  See also the :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable.
-``$<TARGET_POLICY:policy>``
-  ``1`` if the ``policy`` was NEW when the 'head' target was created,
-  else ``0``.  If the ``policy`` was not set, the warning message for the policy
-  will be emitted. This generator expression only works for a subset of
-  policies.
-``$<COMPILE_FEATURES:features>``
-  where ``features`` is a comma-spearated list.
-  Evaluates to ``1`` if all of the ``features`` are available for the 'head'
-  target, and ``0`` otherwise. If this expression is used while evaluating
-  the link implementation of a target and if any dependency transitively
-  increases the required :prop_tgt:`C_STANDARD` or :prop_tgt:`CXX_STANDARD`
-  for the 'head' target, an error is reported.  See the
-  :manual:`cmake-compile-features(7)` manual for information on
-  compile features and a list of supported compilers.
-
-.. _`Boolean COMPILE_LANGUAGE Generator Expression`:
-
-``$<COMPILE_LANG_AND_ID:language,compiler_ids>``
-  ``1`` when the language used for compilation unit matches ``language`` and
-  the CMake's compiler id of the language compiler matches any one of the
-  entries in ``compiler_ids``, otherwise ``0``. This expression is a short form
-  for the combination of ``$<COMPILE_LANGUAGE:language>`` and
-  ``$<LANG_COMPILER_ID:compiler_ids>``. This expression may be used to specify
-  compile options, compile definitions, and include directories for source files of a
-  particular language and compiler combination in a target. For example:
-
-  .. code-block:: cmake
-
-    add_executable(myapp main.cpp foo.c bar.cpp zot.cu)
-    target_compile_definitions(myapp
-      PRIVATE $<$<COMPILE_LANG_AND_ID:CXX,AppleClang,Clang>:COMPILING_CXX_WITH_CLANG>
-              $<$<COMPILE_LANG_AND_ID:CXX,Intel>:COMPILING_CXX_WITH_INTEL>
-              $<$<COMPILE_LANG_AND_ID:C,Clang>:COMPILING_C_WITH_CLANG>
-    )
-
-  This specifies the use of different compile definitions based on both
-  the compiler id and compilation language. This example will have a
-  ``COMPILING_CXX_WITH_CLANG`` compile definition when Clang is the CXX
-  compiler, and ``COMPILING_CXX_WITH_INTEL`` when Intel is the CXX compiler.
-  Likewise when the C compiler is Clang it will only see the  ``COMPILING_C_WITH_CLANG``
-  definition.
-
-  Without the ``COMPILE_LANG_AND_ID`` generator expression the same logic
-  would be expressed as:
-
-  .. code-block:: cmake
-
-    target_compile_definitions(myapp
-      PRIVATE $<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CXX_COMPILER_ID:AppleClang,Clang>>:COMPILING_CXX_WITH_CLANG>
-              $<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CXX_COMPILER_ID:Intel>>:COMPILING_CXX_WITH_INTEL>
-              $<$<AND:$<COMPILE_LANGUAGE:C>,$<C_COMPILER_ID:Clang>>:COMPILING_C_WITH_CLANG>
-    )
-
-``$<COMPILE_LANGUAGE:languages>``
-  ``1`` when the language used for compilation unit matches any of the entries
-  in ``languages``, otherwise ``0``.  This expression may be used to specify
-  compile options, compile definitions, and include directories for source files of a
-  particular language in a target. For example:
-
-  .. code-block:: cmake
-
-    add_executable(myapp main.cpp foo.c bar.cpp zot.cu)
-    target_compile_options(myapp
-      PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-fno-exceptions>
-    )
-    target_compile_definitions(myapp
-      PRIVATE $<$<COMPILE_LANGUAGE:CXX>:COMPILING_CXX>
-              $<$<COMPILE_LANGUAGE:CUDA>:COMPILING_CUDA>
-    )
-    target_include_directories(myapp
-      PRIVATE $<$<COMPILE_LANGUAGE:CXX,CUDA>:/opt/foo/headers>
-    )
-
-  This specifies the use of the ``-fno-exceptions`` compile option,
-  ``COMPILING_CXX`` compile definition, and ``cxx_headers`` include
-  directory for C++ only (compiler id checks elided).  It also specifies
-  a ``COMPILING_CUDA`` compile definition for CUDA.
-
-  Note that with :ref:`Visual Studio Generators` and :generator:`Xcode` there
-  is no way to represent target-wide compile definitions or include directories
-  separately for ``C`` and ``CXX`` languages.
-  Also, with :ref:`Visual Studio Generators` there is no way to represent
-  target-wide flags separately for ``C`` and ``CXX`` languages.  Under these
-  generators, expressions for both C and C++ sources will be evaluated
-  using ``CXX`` if there are any C++ sources and otherwise using ``C``.
-  A workaround is to create separate libraries for each source file language
-  instead:
-
-  .. code-block:: cmake
-
-    add_library(myapp_c foo.c)
-    add_library(myapp_cxx bar.cpp)
-    target_compile_options(myapp_cxx PUBLIC -fno-exceptions)
-    add_executable(myapp main.cpp)
-    target_link_libraries(myapp myapp_c myapp_cxx)
-
-.. _`Boolean LINK_LANGUAGE Generator Expression`:
-
-``$<LINK_LANG_AND_ID:language,compiler_ids>``
-  ``1`` when the language used for link step matches ``language`` and the
-  CMake's compiler id of the language linker matches any one of the entries
-  in ``compiler_ids``, otherwise ``0``. This expression is a short form for the
-  combination of ``$<LINK_LANGUAGE:language>`` and
-  ``$<LANG_COMPILER_ID:compiler_ids>``. This expression may be used to specify
-  link libraries, link options, link directories and link dependencies of a
-  particular language and linker combination in a target. For example:
-
-  .. code-block:: cmake
-
-    add_library(libC_Clang ...)
-    add_library(libCXX_Clang ...)
-    add_library(libC_Intel ...)
-    add_library(libCXX_Intel ...)
-
-    add_executable(myapp main.c)
-    if (CXX_CONFIG)
-      target_sources(myapp PRIVATE file.cxx)
-    endif()
-    target_link_libraries(myapp
-      PRIVATE $<$<LINK_LANG_AND_ID:CXX,Clang,AppleClang>:libCXX_Clang>
-              $<$<LINK_LANG_AND_ID:C,Clang,AppleClang>:libC_Clang>
-              $<$<LINK_LANG_AND_ID:CXX,Intel>:libCXX_Intel>
-              $<$<LINK_LANG_AND_ID:C,Intel>:libC_Intel>)
-
-  This specifies the use of different link libraries based on both the
-  compiler id and link language. This example will have target ``libCXX_Clang``
-  as link dependency when ``Clang`` or ``AppleClang`` is the ``CXX``
-  linker, and ``libCXX_Intel`` when ``Intel`` is the ``CXX`` linker.
-  Likewise when the ``C`` linker is ``Clang`` or ``AppleClang``, target
-  ``libC_Clang`` will be added as link dependency and ``libC_Intel`` when
-  ``Intel`` is the ``C`` linker.
-
-  See :ref:`the note related to
-  <Constraints LINK_LANGUAGE Generator Expression>`
-  ``$<LINK_LANGUAGE:language>`` for constraints about the usage of this
-  generator expression.
-
-``$<LINK_LANGUAGE:languages>``
-  ``1`` when the language used for link step matches any of the entries
-  in ``languages``, otherwise ``0``.  This expression may be used to specify
-  link libraries, link options, link directories and link dependencies of a
-  particular language in a target. For example:
-
-  .. code-block:: cmake
-
-    add_library(api_C ...)
-    add_library(api_CXX ...)
-    add_library(api INTERFACE)
-    target_link_options(api INTERFACE $<$<LINK_LANGUAGE:C>:-opt_c>
-                                        $<$<LINK_LANGUAGE:CXX>:-opt_cxx>)
-    target_link_libraries(api INTERFACE $<$<LINK_LANGUAGE:C>:api_C>
-                                        $<$<LINK_LANGUAGE:CXX>:api_CXX>)
-
-    add_executable(myapp1 main.c)
-    target_link_options(myapp1 PRIVATE api)
-
-    add_executable(myapp2 main.cpp)
-    target_link_options(myapp2 PRIVATE api)
-
-  This specifies to use the ``api`` target for linking targets ``myapp1`` and
-  ``myapp2``. In practice, ``myapp1`` will link with target ``api_C`` and
-  option ``-opt_c`` because it will use ``C`` as link language. And ``myapp2``
-  will link with ``api_CXX`` and option ``-opt_cxx`` because ``CXX`` will be
-  the link language.
-
-  .. _`Constraints LINK_LANGUAGE Generator Expression`:
-
-  .. note::
-
-    To determine the link language of a target, it is required to collect,
-    transitively, all the targets which will be linked to it. So, for link
-    libraries properties, a double evaluation will be done. During the first
-    evaluation, ``$<LINK_LANGUAGE:..>`` expressions will always return ``0``.
-    The link language computed after this first pass will be used to do the
-    second pass. To avoid inconsistency, it is required that the second pass
-    do not change the link language. Moreover, to avoid unexpected
-    side-effects, it is required to specify complete entities as part of the
-    ``$<LINK_LANGUAGE:..>`` expression. For example:
-
-    .. code-block:: cmake
-
-      add_library(lib STATIC file.cxx)
-      add_library(libother STATIC file.c)
-
-      # bad usage
-      add_executable(myapp1 main.c)
-      target_link_libraries(myapp1 PRIVATE lib$<$<LINK_LANGUAGE:C>:other>)
-
-      # correct usage
-      add_executable(myapp2 main.c)
-      target_link_libraries(myapp2 PRIVATE $<$<LINK_LANGUAGE:C>:libother>)
-
-    In this example, for ``myapp1``, the first pass will, unexpectedly,
-    determine that the link language is ``CXX`` because the evaluation of the
-    generator expression will be an empty string so ``myapp1`` will depends on
-    target ``lib`` which is ``C++``. On the contrary, for ``myapp2``, the first
-    evaluation will give ``C`` as link language, so the second pass will
-    correctly add target ``libother`` as link dependency.
-
-``$<DEVICE_LINK:list>``
-  Returns the list if it is the device link step, an empty list otherwise.
-  The device link step is controlled by :prop_tgt:`CUDA_SEPARABLE_COMPILATION`
-  and :prop_tgt:`CUDA_RESOLVE_DEVICE_SYMBOLS` properties and
-  policy :policy:`CMP0105`. This expression can only be used to specify link
-  options.
-
-``$<HOST_LINK:list>``
-  Returns the list if it is the normal link step, an empty list otherwise.
-  This expression is mainly useful when a device link step is also involved
-  (see ``$<DEVICE_LINK:list>`` generator expression). This expression can only
-  be used to specify link options.
-
-String-Valued Generator Expressions
-===================================
-
-These expressions expand to some string.
-For example,
-
-.. code-block:: cmake
-
-  include_directories(/usr/include/$<CXX_COMPILER_ID>/)
-
-expands to ``/usr/include/GNU/`` or ``/usr/include/Clang/`` etc, depending on
-the compiler identifier.
-
-String-valued expressions may also be combined with other expressions.
-Here an example for a string-valued expression within a boolean expressions
-within a conditional expression:
-
-.. code-block:: cmake
-
-  $<$<VERSION_LESS:$<CXX_COMPILER_VERSION>,4.2.0>:OLD_COMPILER>
-
-expands to ``OLD_COMPILER`` if the
-:variable:`CMAKE_CXX_COMPILER_VERSION <CMAKE_<LANG>_COMPILER_VERSION>` is less
-than 4.2.0.
-
-And here two nested string-valued expressions:
-
-.. code-block:: cmake
-
-  -I$<JOIN:$<TARGET_PROPERTY:INCLUDE_DIRECTORIES>, -I>
-
-generates a string of the entries in the :prop_tgt:`INCLUDE_DIRECTORIES` target
-property with each entry preceded by ``-I``.
-
-Expanding on the previous example, if one first wants to check if the
-``INCLUDE_DIRECTORIES`` property is non-empty, then it is advisable to
-introduce a helper variable to keep the code readable:
-
-.. code-block:: cmake
-
-  set(prop "$<TARGET_PROPERTY:INCLUDE_DIRECTORIES>") # helper variable
-  $<$<BOOL:${prop}>:-I$<JOIN:${prop}, -I>>
-
-The following string-valued generator expressions are available:
-
-Escaped Characters
-------------------
-
-String literals to escape the special meaning a character would otherwise have:
-
-``$<ANGLE-R>``
-  A literal ``>``. Used for example to compare strings that contain a ``>``.
-``$<COMMA>``
-  A literal ``,``. Used for example to compare strings which contain a ``,``.
-``$<SEMICOLON>``
-  A literal ``;``. Used to prevent list expansion on an argument with ``;``.
-
-.. _`Conditional Generator Expressions`:
-
-Conditional Expressions
------------------------
-
-Conditional generator expressions depend on a boolean condition
-that must be ``0`` or ``1``.
-
-``$<condition:true_string>``
-  Evaluates to ``true_string`` if ``condition`` is ``1``.
-  Otherwise evaluates to the empty string.
-
-``$<IF:condition,true_string,false_string>``
-  Evaluates to ``true_string`` if ``condition`` is ``1``.
-  Otherwise evaluates to ``false_string``.
-
-Typically, the ``condition`` is a :ref:`boolean generator expression
-<Boolean Generator Expressions>`.  For instance,
-
-.. code-block:: cmake
-
-  $<$<CONFIG:Debug>:DEBUG_MODE>
-
-expands to ``DEBUG_MODE`` when the ``Debug`` configuration is used, and
-otherwise expands to the empty string.
-
-.. _`String Transforming Generator Expressions`:
-
-String Transformations
-----------------------
-
-``$<JOIN:list,string>``
-  Joins the list with the content of ``string``.
-``$<REMOVE_DUPLICATES:list>``
-  Removes duplicated items in the given ``list``.
-``$<FILTER:list,INCLUDE|EXCLUDE,regex>``
-  Includes or removes items from ``list`` that match the regular expression ``regex``.
-``$<LOWER_CASE:string>``
-  Content of ``string`` converted to lower case.
-``$<UPPER_CASE:string>``
-  Content of ``string`` converted to upper case.
-
-``$<GENEX_EVAL:expr>``
-  Content of ``expr`` evaluated as a generator expression in the current
-  context. This enables consumption of generator expressions whose
-  evaluation results itself in generator expressions.
-``$<TARGET_GENEX_EVAL:tgt,expr>``
-  Content of ``expr`` evaluated as a generator expression in the context of
-  ``tgt`` target. This enables consumption of custom target properties that
-  themselves contain generator expressions.
-
-  Having the capability to evaluate generator expressions is very useful when
-  you want to manage custom properties supporting generator expressions.
-  For example:
-
-  .. code-block:: cmake
-
-    add_library(foo ...)
-
-    set_property(TARGET foo PROPERTY
-      CUSTOM_KEYS $<$<CONFIG:DEBUG>:FOO_EXTRA_THINGS>
-    )
-
-    add_custom_target(printFooKeys
-      COMMAND ${CMAKE_COMMAND} -E echo $<TARGET_PROPERTY:foo,CUSTOM_KEYS>
-    )
-
-  This naive implementation of the ``printFooKeys`` custom command is wrong
-  because ``CUSTOM_KEYS`` target property is not evaluated and the content
-  is passed as is (i.e. ``$<$<CONFIG:DEBUG>:FOO_EXTRA_THINGS>``).
-
-  To have the expected result (i.e. ``FOO_EXTRA_THINGS`` if config is
-  ``Debug``), it is required to evaluate the output of
-  ``$<TARGET_PROPERTY:foo,CUSTOM_KEYS>``:
-
-  .. code-block:: cmake
-
-    add_custom_target(printFooKeys
-      COMMAND ${CMAKE_COMMAND} -E
-        echo $<TARGET_GENEX_EVAL:foo,$<TARGET_PROPERTY:foo,CUSTOM_KEYS>>
-    )
-
-Variable Queries
-----------------
-
-``$<CONFIG>``
-  Configuration name.
-``$<CONFIGURATION>``
-  Configuration name. Deprecated since CMake 3.0. Use ``CONFIG`` instead.
-``$<PLATFORM_ID>``
-  The current system's CMake platform id.
-  See also the :variable:`CMAKE_SYSTEM_NAME` variable.
-``$<C_COMPILER_ID>``
-  The CMake's compiler id of the C compiler used.
-  See also the :variable:`CMAKE_<LANG>_COMPILER_ID` variable.
-``$<CXX_COMPILER_ID>``
-  The CMake's compiler id of the CXX compiler used.
-  See also the :variable:`CMAKE_<LANG>_COMPILER_ID` variable.
-``$<CUDA_COMPILER_ID>``
-  The CMake's compiler id of the CUDA compiler used.
-  See also the :variable:`CMAKE_<LANG>_COMPILER_ID` variable.
-``$<OBJC_COMPILER_ID>``
-  The CMake's compiler id of the OBJC compiler used.
-  See also the :variable:`CMAKE_<LANG>_COMPILER_ID` variable.
-``$<OBJCXX_COMPILER_ID>``
-  The CMake's compiler id of the OBJCXX compiler used.
-  See also the :variable:`CMAKE_<LANG>_COMPILER_ID` variable.
-``$<Fortran_COMPILER_ID>``
-  The CMake's compiler id of the Fortran compiler used.
-  See also the :variable:`CMAKE_<LANG>_COMPILER_ID` variable.
-``$<C_COMPILER_VERSION>``
-  The version of the C compiler used.
-  See also the :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable.
-``$<CXX_COMPILER_VERSION>``
-  The version of the CXX compiler used.
-  See also the :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable.
-``$<CUDA_COMPILER_VERSION>``
-  The version of the CUDA compiler used.
-  See also the :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable.
-``$<OBJC_COMPILER_VERSION>``
-  The version of the OBJC compiler used.
-  See also the :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable.
-``$<OBJCXX_COMPILER_VERSION>``
-  The version of the OBJCXX compiler used.
-  See also the :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable.
-``$<Fortran_COMPILER_VERSION>``
-  The version of the Fortran compiler used.
-  See also the :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable.
-``$<COMPILE_LANGUAGE>``
-  The compile language of source files when evaluating compile options.
-  See :ref:`the related boolean expression
-  <Boolean COMPILE_LANGUAGE Generator Expression>`
-  ``$<COMPILE_LANGUAGE:language>``
-  for notes about the portability of this generator expression.
-``$<LINK_LANGUAGE>``
-  The link language of target when evaluating link options.
-  See :ref:`the related boolean expression
-  <Boolean LINK_LANGUAGE Generator Expression>` ``$<LINK_LANGUAGE:language>``
-  for notes about the portability of this generator expression.
-
-  .. note::
-
-    This generator expression is not supported by the link libraries
-    properties to avoid side-effects due to the double evaluation of
-    these properties.
-
-Target-Dependent Queries
-------------------------
-
-These queries refer to a target ``tgt``. This can be any runtime artifact,
-namely:
-
-* an executable target created by :command:`add_executable`
-* a shared library target (``.so``, ``.dll`` but not their ``.lib`` import library)
-  created by :command:`add_library`
-* a static library target created by :command:`add_library`
-
-In the following, "the ``tgt`` filename" means the name of the ``tgt``
-binary file. This has to be distinguished from "the target name",
-which is just the string ``tgt``.
-
-``$<TARGET_NAME_IF_EXISTS:tgt>``
-  The target name ``tgt`` if the target exists, an empty string otherwise.
-``$<TARGET_FILE:tgt>``
-  Full path to the ``tgt`` binary file.
-``$<TARGET_FILE_BASE_NAME:tgt>``
-  Base name of ``tgt``, i.e. ``$<TARGET_FILE_NAME:tgt>`` without prefix and
-  suffix.
-  For example, if the ``tgt`` filename is ``libbase.so``, the base name is ``base``.
-
-  See also the :prop_tgt:`OUTPUT_NAME`, :prop_tgt:`ARCHIVE_OUTPUT_NAME`,
-  :prop_tgt:`LIBRARY_OUTPUT_NAME` and :prop_tgt:`RUNTIME_OUTPUT_NAME`
-  target properties and their configuration specific variants
-  :prop_tgt:`OUTPUT_NAME_<CONFIG>`, :prop_tgt:`ARCHIVE_OUTPUT_NAME_<CONFIG>`,
-  :prop_tgt:`LIBRARY_OUTPUT_NAME_<CONFIG>` and
-  :prop_tgt:`RUNTIME_OUTPUT_NAME_<CONFIG>`.
-
-  The :prop_tgt:`<CONFIG>_POSTFIX` and :prop_tgt:`DEBUG_POSTFIX` target
-  properties can also be considered.
-
-  Note that ``tgt`` is not added as a dependency of the target this
-  expression is evaluated on.
-``$<TARGET_FILE_PREFIX:tgt>``
-  Prefix of the ``tgt`` filename (such as ``lib``).
-
-  See also the :prop_tgt:`PREFIX` target property.
-
-  Note that ``tgt`` is not added as a dependency of the target this
-  expression is evaluated on.
-``$<TARGET_FILE_SUFFIX:tgt>``
-  Suffix of the ``tgt`` filename (extension such as ``.so`` or ``.exe``).
-
-  See also the :prop_tgt:`SUFFIX` target property.
-
-  Note that ``tgt`` is not added as a dependency of the target this
-  expression is evaluated on.
-``$<TARGET_FILE_NAME:tgt>``
-  The ``tgt`` filename.
-``$<TARGET_FILE_DIR:tgt>``
-  Directory of the ``tgt`` binary file.
-``$<TARGET_LINKER_FILE:tgt>``
-  File used when linking to the ``tgt`` target.  This will usually
-  be the library that ``tgt`` represents (``.a``, ``.lib``, ``.so``),
-  but for a shared library on DLL platforms, it would be the ``.lib``
-  import library associated with the DLL.
-``$<TARGET_LINKER_FILE_BASE_NAME:tgt>``
-  Base name of file used to link the target ``tgt``, i.e.
-  ``$<TARGET_LINKER_FILE_NAME:tgt>`` without prefix and suffix. For example,
-  if target file name is ``libbase.a``, the base name is ``base``.
-
-  See also the :prop_tgt:`OUTPUT_NAME`, :prop_tgt:`ARCHIVE_OUTPUT_NAME`,
-  and :prop_tgt:`LIBRARY_OUTPUT_NAME` target properties and their configuration
-  specific variants :prop_tgt:`OUTPUT_NAME_<CONFIG>`,
-  :prop_tgt:`ARCHIVE_OUTPUT_NAME_<CONFIG>` and
-  :prop_tgt:`LIBRARY_OUTPUT_NAME_<CONFIG>`.
-
-  The :prop_tgt:`<CONFIG>_POSTFIX` and :prop_tgt:`DEBUG_POSTFIX` target
-  properties can also be considered.
-
-  Note that ``tgt`` is not added as a dependency of the target this
-  expression is evaluated on.
-``$<TARGET_LINKER_FILE_PREFIX:tgt>``
-  Prefix of file used to link target ``tgt``.
-
-  See also the :prop_tgt:`PREFIX` and :prop_tgt:`IMPORT_PREFIX` target
-  properties.
-
-  Note that ``tgt`` is not added as a dependency of the target this
-  expression is evaluated on.
-``$<TARGET_LINKER_FILE_SUFFIX:tgt>``
-  Suffix of file used to link where ``tgt`` is the name of a target.
-
-  The suffix corresponds to the file extension (such as ".so" or ".lib").
-
-  See also the :prop_tgt:`SUFFIX` and :prop_tgt:`IMPORT_SUFFIX` target
-  properties.
-
-  Note that ``tgt`` is not added as a dependency of the target this
-  expression is evaluated on.
-``$<TARGET_LINKER_FILE_NAME:tgt>``
-  Name of file used to link target ``tgt``.
-``$<TARGET_LINKER_FILE_DIR:tgt>``
-  Directory of file used to link target ``tgt``.
-``$<TARGET_SONAME_FILE:tgt>``
-  File with soname (``.so.3``) where ``tgt`` is the name of a target.
-``$<TARGET_SONAME_FILE_NAME:tgt>``
-  Name of file with soname (``.so.3``).
-``$<TARGET_SONAME_FILE_DIR:tgt>``
-  Directory of with soname (``.so.3``).
-``$<TARGET_PDB_FILE:tgt>``
-  Full path to the linker generated program database file (.pdb)
-  where ``tgt`` is the name of a target.
-
-  See also the :prop_tgt:`PDB_NAME` and :prop_tgt:`PDB_OUTPUT_DIRECTORY`
-  target properties and their configuration specific variants
-  :prop_tgt:`PDB_NAME_<CONFIG>` and :prop_tgt:`PDB_OUTPUT_DIRECTORY_<CONFIG>`.
-``$<TARGET_PDB_FILE_BASE_NAME:tgt>``
-  Base name of the linker generated program database file (.pdb)
-  where ``tgt`` is the name of a target.
-
-  The base name corresponds to the target PDB file name (see
-  ``$<TARGET_PDB_FILE_NAME:tgt>``) without prefix and suffix. For example,
-  if target file name is ``base.pdb``, the base name is ``base``.
-
-  See also the :prop_tgt:`PDB_NAME` target property and its configuration
-  specific variant :prop_tgt:`PDB_NAME_<CONFIG>`.
-
-  The :prop_tgt:`<CONFIG>_POSTFIX` and :prop_tgt:`DEBUG_POSTFIX` target
-  properties can also be considered.
-
-  Note that ``tgt`` is not added as a dependency of the target this
-  expression is evaluated on.
-``$<TARGET_PDB_FILE_NAME:tgt>``
-  Name of the linker generated program database file (.pdb).
-``$<TARGET_PDB_FILE_DIR:tgt>``
-  Directory of the linker generated program database file (.pdb).
-``$<TARGET_BUNDLE_DIR:tgt>``
-  Full path to the bundle directory (``my.app``, ``my.framework``, or
-  ``my.bundle``) where ``tgt`` is the name of a target.
-``$<TARGET_BUNDLE_CONTENT_DIR:tgt>``
-  Full path to the bundle content directory where ``tgt`` is the name of a
-  target. For the macOS SDK it leads to ``my.app/Contents``, ``my.framework``,
-  or ``my.bundle/Contents``. For all other SDKs (e.g. iOS) it leads to
-  ``my.app``, ``my.framework``, or ``my.bundle`` due to the flat bundle
-  structure.
-``$<TARGET_PROPERTY:tgt,prop>``
-  Value of the property ``prop`` on the target ``tgt``.
-
-  Note that ``tgt`` is not added as a dependency of the target this
-  expression is evaluated on.
-``$<TARGET_PROPERTY:prop>``
-  Value of the property ``prop`` on the target for which the expression
-  is being evaluated. Note that for generator expressions in
-  :ref:`Target Usage Requirements` this is the consuming target rather
-  than the target specifying the requirement.
-``$<INSTALL_PREFIX>``
-  Content of the install prefix when the target is exported via
-  :command:`install(EXPORT)`, or when evaluated in
-  :prop_tgt:`INSTALL_NAME_DIR`, and empty otherwise.
-
-Output-Related Expressions
---------------------------
-
-``$<TARGET_NAME:...>``
-  Marks ``...`` as being the name of a target.  This is required if exporting
-  targets to multiple dependent export sets.  The ``...`` must be a literal
-  name of a target- it may not contain generator expressions.
-``$<LINK_ONLY:...>``
-  Content of ``...`` except when evaluated in a link interface while
-  propagating :ref:`Target Usage Requirements`, in which case it is the
-  empty string.
-  Intended for use only in an :prop_tgt:`INTERFACE_LINK_LIBRARIES` target
-  property, perhaps via the :command:`target_link_libraries` command,
-  to specify private link dependencies without other usage requirements.
-``$<INSTALL_INTERFACE:...>``
-  Content of ``...`` when the property is exported using :command:`install(EXPORT)`,
-  and empty otherwise.
-``$<BUILD_INTERFACE:...>``
-  Content of ``...`` when the property is exported using :command:`export`, or
-  when the target is used by another target in the same buildsystem. Expands to
-  the empty string otherwise.
-``$<MAKE_C_IDENTIFIER:...>``
-  Content of ``...`` converted to a C identifier.  The conversion follows the
-  same behavior as :command:`string(MAKE_C_IDENTIFIER)`.
-``$<TARGET_OBJECTS:objLib>``
-  List of objects resulting from build of ``objLib``.
-``$<SHELL_PATH:...>``
-  Content of ``...`` converted to shell path style. For example, slashes are
-  converted to backslashes in Windows shells and drive letters are converted
-  to posix paths in MSYS shells. The ``...`` must be an absolute path.
-  The ``...`` may be a :ref:`semicolon-separated list <CMake Language Lists>`
-  of paths, in which case each path is converted individually and a result
-  list is generated using the shell path separator (``:`` on POSIX and
-  ``;`` on Windows).  Be sure to enclose the argument containing this genex
-  in double quotes in CMake source code so that ``;`` does not split arguments.
-
-Debugging
-=========
-
-Since generator expressions are evaluated during generation of the buildsystem,
-and not during processing of ``CMakeLists.txt`` files, it is not possible to
-inspect their result with the :command:`message()` command.
-
-One possible way to generate debug messages is to add a custom target,
-
-.. code-block:: cmake
-
-  add_custom_target(genexdebug COMMAND ${CMAKE_COMMAND} -E echo "$<...>")
-
-The shell command ``make genexdebug`` (invoked after execution of ``cmake``)
-would then print the result of ``$<...>``.
-
-Another way is to write debug messages to a file:
-
-.. code-block:: cmake
-
-  file(GENERATE OUTPUT filename CONTENT "$<...>")
diff --git a/share/cmake-3.18/Help/manual/cmake-generators.7.rst b/share/cmake-3.18/Help/manual/cmake-generators.7.rst
deleted file mode 100644
index 6f88c0a..0000000
--- a/share/cmake-3.18/Help/manual/cmake-generators.7.rst
+++ /dev/null
@@ -1,118 +0,0 @@
-.. cmake-manual-description: CMake Generators Reference
-
-cmake-generators(7)
-*******************
-
-.. only:: html
-
-   .. contents::
-
-Introduction
-============
-
-A *CMake Generator* is responsible for writing the input files for
-a native build system.  Exactly one of the `CMake Generators`_ must be
-selected for a build tree to determine what native build system is to
-be used.  Optionally one of the `Extra Generators`_ may be selected
-as a variant of some of the `Command-Line Build Tool Generators`_ to
-produce project files for an auxiliary IDE.
-
-CMake Generators are platform-specific so each may be available only
-on certain platforms.  The :manual:`cmake(1)` command-line tool ``--help``
-output lists available generators on the current platform.  Use its ``-G``
-option to specify the generator for a new build tree.
-The :manual:`cmake-gui(1)` offers interactive selection of a generator
-when creating a new build tree.
-
-CMake Generators
-================
-
-.. _`Command-Line Build Tool Generators`:
-
-Command-Line Build Tool Generators
-----------------------------------
-
-These generators support command-line build tools.  In order to use them,
-one must launch CMake from a command-line prompt whose environment is
-already configured for the chosen compiler and build tool.
-
-.. _`Makefile Generators`:
-
-Makefile Generators
-^^^^^^^^^^^^^^^^^^^
-
-.. toctree::
-   :maxdepth: 1
-
-   /generator/Borland Makefiles
-   /generator/MSYS Makefiles
-   /generator/MinGW Makefiles
-   /generator/NMake Makefiles
-   /generator/NMake Makefiles JOM
-   /generator/Unix Makefiles
-   /generator/Watcom WMake
-
-Ninja Generators
-^^^^^^^^^^^^^^^^
-
-.. toctree::
-   :maxdepth: 1
-
-   /generator/Ninja
-   /generator/Ninja Multi-Config
-
-.. _`IDE Build Tool Generators`:
-
-IDE Build Tool Generators
--------------------------
-
-These generators support Integrated Development Environment (IDE)
-project files.  Since the IDEs configure their own environment
-one may launch CMake from any environment.
-
-.. _`Visual Studio Generators`:
-
-Visual Studio Generators
-^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. toctree::
-   :maxdepth: 1
-
-   /generator/Visual Studio 6
-   /generator/Visual Studio 7
-   /generator/Visual Studio 7 .NET 2003
-   /generator/Visual Studio 8 2005
-   /generator/Visual Studio 9 2008
-   /generator/Visual Studio 10 2010
-   /generator/Visual Studio 11 2012
-   /generator/Visual Studio 12 2013
-   /generator/Visual Studio 14 2015
-   /generator/Visual Studio 15 2017
-   /generator/Visual Studio 16 2019
-
-Other Generators
-^^^^^^^^^^^^^^^^
-
-.. toctree::
-   :maxdepth: 1
-
-   /generator/Green Hills MULTI
-   /generator/Xcode
-
-Extra Generators
-================
-
-Some of the `CMake Generators`_ listed in the :manual:`cmake(1)`
-command-line tool ``--help`` output may have variants that specify
-an extra generator for an auxiliary IDE tool.  Such generator
-names have the form ``<extra-generator> - <main-generator>``.
-The following extra generators are known to CMake.
-
-.. toctree::
-   :maxdepth: 1
-
-   /generator/CodeBlocks
-   /generator/CodeLite
-   /generator/Eclipse CDT4
-   /generator/Kate
-   /generator/Sublime Text 2
diff --git a/share/cmake-3.18/Help/manual/cmake-gui.1.rst b/share/cmake-3.18/Help/manual/cmake-gui.1.rst
deleted file mode 100644
index ff8311b..0000000
--- a/share/cmake-3.18/Help/manual/cmake-gui.1.rst
+++ /dev/null
@@ -1,44 +0,0 @@
-.. cmake-manual-description: CMake GUI Command-Line Reference
-
-cmake-gui(1)
-************
-
-Synopsis
-========
-
-.. parsed-literal::
-
- cmake-gui [<options>]
- cmake-gui [<options>] {<path-to-source> | <path-to-existing-build>}
- cmake-gui [<options>] -S <path-to-source> -B <path-to-build>
-
-Description
-===========
-
-The **cmake-gui** executable is the CMake GUI.  Project configuration
-settings may be specified interactively.  Brief instructions are
-provided at the bottom of the window when the program is running.
-
-CMake is a cross-platform build system generator.  Projects specify
-their build process with platform-independent CMake listfiles included
-in each directory of a source tree with the name ``CMakeLists.txt``.
-Users build a project by using CMake to generate a build system for a
-native tool on their platform.
-
-Options
-=======
-
-``-S <path-to-source>``
- Path to root directory of the CMake project to build.
-
-``-B <path-to-build>``
- Path to directory which CMake will use as the root of build directory.
-
- If the directory doesn't already exist CMake will make it.
-
-.. include:: OPTIONS_HELP.txt
-
-See Also
-========
-
-.. include:: LINKS.txt
diff --git a/share/cmake-3.18/Help/manual/cmake-modules.7.rst b/share/cmake-3.18/Help/manual/cmake-modules.7.rst
deleted file mode 100644
index 50131e8..0000000
--- a/share/cmake-3.18/Help/manual/cmake-modules.7.rst
+++ /dev/null
@@ -1,319 +0,0 @@
-.. cmake-manual-description: CMake Modules Reference
-
-cmake-modules(7)
-****************
-
-The modules listed here are part of the CMake distribution.
-Projects may provide further modules; their location(s)
-can be specified in the :variable:`CMAKE_MODULE_PATH` variable.
-
-Utility Modules
-^^^^^^^^^^^^^^^
-
-These modules are loaded using the :command:`include` command.
-
-.. toctree::
-   :maxdepth: 1
-
-   /module/AddFileDependencies
-   /module/AndroidTestUtilities
-   /module/BundleUtilities
-   /module/CheckCCompilerFlag
-   /module/CheckCSourceCompiles
-   /module/CheckCSourceRuns
-   /module/CheckCXXCompilerFlag
-   /module/CheckCXXSourceCompiles
-   /module/CheckCXXSourceRuns
-   /module/CheckCXXSymbolExists
-   /module/CheckFortranCompilerFlag
-   /module/CheckFortranFunctionExists
-   /module/CheckFortranSourceCompiles
-   /module/CheckFortranSourceRuns
-   /module/CheckFunctionExists
-   /module/CheckIPOSupported
-   /module/CheckIncludeFileCXX
-   /module/CheckIncludeFile
-   /module/CheckIncludeFiles
-   /module/CheckLanguage
-   /module/CheckLibraryExists
-   /module/CheckLinkerFlag
-   /module/CheckOBJCCompilerFlag
-   /module/CheckOBJCSourceCompiles
-   /module/CheckOBJCSourceRuns
-   /module/CheckOBJCXXCompilerFlag
-   /module/CheckOBJCXXSourceCompiles
-   /module/CheckOBJCXXSourceRuns
-   /module/CheckPIESupported
-   /module/CheckPrototypeDefinition
-   /module/CheckStructHasMember
-   /module/CheckSymbolExists
-   /module/CheckTypeSize
-   /module/CheckVariableExists
-   /module/CMakeAddFortranSubdirectory
-   /module/CMakeBackwardCompatibilityCXX
-   /module/CMakeDependentOption
-   /module/CMakeFindDependencyMacro
-   /module/CMakeFindFrameworks
-   /module/CMakeFindPackageMode
-   /module/CMakeGraphVizOptions
-   /module/CMakePackageConfigHelpers
-   /module/CMakePrintHelpers
-   /module/CMakePrintSystemInformation
-   /module/CMakePushCheckState
-   /module/CMakeVerifyManifest
-   /module/CPackComponent
-   /module/CPackIFW
-   /module/CPackIFWConfigureFile
-   /module/CPack
-   /module/CSharpUtilities
-   /module/CTest
-   /module/CTestCoverageCollectGCOV
-   /module/CTestScriptMode
-   /module/CTestUseLaunchers
-   /module/Dart
-   /module/DeployQt4
-   /module/Documentation
-   /module/ExternalData
-   /module/ExternalProject
-   /module/FeatureSummary
-   /module/FetchContent
-   /module/FindPackageHandleStandardArgs
-   /module/FindPackageMessage
-   /module/FortranCInterface
-   /module/GenerateExportHeader
-   /module/GetPrerequisites
-   /module/GNUInstallDirs
-   /module/GoogleTest
-   /module/InstallRequiredSystemLibraries
-   /module/ProcessorCount
-   /module/SelectLibraryConfigurations
-   /module/SquishTestScript
-   /module/TestBigEndian
-   /module/TestForANSIForScope
-   /module/TestForANSIStreamHeaders
-   /module/TestForSSTREAM
-   /module/TestForSTDNamespace
-   /module/UseEcos
-   /module/UseJavaClassFilelist
-   /module/UseJava
-   /module/UseJavaSymlinks
-   /module/UseSWIG
-   /module/UsewxWidgets
-   /module/WriteCompilerDetectionHeader
-
-Find Modules
-^^^^^^^^^^^^
-
-These modules search for third-party software.
-They are normally called through the :command:`find_package` command.
-
-.. toctree::
-   :maxdepth: 1
-
-   /module/FindALSA
-   /module/FindArmadillo
-   /module/FindASPELL
-   /module/FindAVIFile
-   /module/FindBISON
-   /module/FindBLAS
-   /module/FindBacktrace
-   /module/FindBoost
-   /module/FindBullet
-   /module/FindBZip2
-   /module/FindCABLE
-   /module/FindCoin3D
-   /module/FindCups
-   /module/FindCUDAToolkit
-   /module/FindCURL
-   /module/FindCurses
-   /module/FindCVS
-   /module/FindCxxTest
-   /module/FindCygwin
-   /module/FindDart
-   /module/FindDCMTK
-   /module/FindDevIL
-   /module/FindDoxygen
-   /module/FindEnvModules
-   /module/FindEXPAT
-   /module/FindFLEX
-   /module/FindFLTK2
-   /module/FindFLTK
-   /module/FindFontconfig
-   /module/FindFreetype
-   /module/FindGCCXML
-   /module/FindGDAL
-   /module/FindGettext
-   /module/FindGIF
-   /module/FindGit
-   /module/FindGLEW
-   /module/FindGLUT
-   /module/FindGnuplot
-   /module/FindGnuTLS
-   /module/FindGSL
-   /module/FindGTest
-   /module/FindGTK2
-   /module/FindGTK
-   /module/FindHDF5
-   /module/FindHg
-   /module/FindHSPELL
-   /module/FindHTMLHelp
-   /module/FindIce
-   /module/FindIcotool
-   /module/FindICU
-   /module/FindImageMagick
-   /module/FindIconv
-   /module/FindIntl
-   /module/FindITK
-   /module/FindJasper
-   /module/FindJava
-   /module/FindJNI
-   /module/FindJPEG
-   /module/FindKDE3
-   /module/FindKDE4
-   /module/FindLAPACK
-   /module/FindLATEX
-   /module/FindLibArchive
-   /module/FindLibinput
-   /module/FindLibLZMA
-   /module/FindLibXml2
-   /module/FindLibXslt
-   /module/FindLTTngUST
-   /module/FindLua50
-   /module/FindLua51
-   /module/FindLua
-   /module/FindMatlab
-   /module/FindMFC
-   /module/FindMotif
-   /module/FindMPEG2
-   /module/FindMPEG
-   /module/FindMPI
-   /module/FindODBC
-   /module/FindOpenACC
-   /module/FindOpenAL
-   /module/FindOpenCL
-   /module/FindOpenGL
-   /module/FindOpenMP
-   /module/FindOpenSceneGraph
-   /module/FindOpenSSL
-   /module/FindOpenThreads
-   /module/FindosgAnimation
-   /module/FindosgDB
-   /module/Findosg_functions
-   /module/FindosgFX
-   /module/FindosgGA
-   /module/FindosgIntrospection
-   /module/FindosgManipulator
-   /module/FindosgParticle
-   /module/FindosgPresentation
-   /module/FindosgProducer
-   /module/FindosgQt
-   /module/Findosg
-   /module/FindosgShadow
-   /module/FindosgSim
-   /module/FindosgTerrain
-   /module/FindosgText
-   /module/FindosgUtil
-   /module/FindosgViewer
-   /module/FindosgVolume
-   /module/FindosgWidget
-   /module/FindPatch
-   /module/FindPerlLibs
-   /module/FindPerl
-   /module/FindPHP4
-   /module/FindPhysFS
-   /module/FindPike
-   /module/FindPkgConfig
-   /module/FindPNG
-   /module/FindPostgreSQL
-   /module/FindProducer
-   /module/FindProtobuf
-   /module/FindPython
-   /module/FindPython2
-   /module/FindPython3
-   /module/FindQt3
-   /module/FindQt4
-   /module/FindQuickTime
-   /module/FindRTI
-   /module/FindRuby
-   /module/FindSDL_image
-   /module/FindSDL_mixer
-   /module/FindSDL_net
-   /module/FindSDL
-   /module/FindSDL_sound
-   /module/FindSDL_ttf
-   /module/FindSelfPackers
-   /module/FindSquish
-   /module/FindSQLite3
-   /module/FindSubversion
-   /module/FindSWIG
-   /module/FindTCL
-   /module/FindTclsh
-   /module/FindTclStub
-   /module/FindThreads
-   /module/FindTIFF
-   /module/FindUnixCommands
-   /module/FindVTK
-   /module/FindVulkan
-   /module/FindWget
-   /module/FindWish
-   /module/FindwxWidgets
-   /module/FindXCTest
-   /module/FindXalanC
-   /module/FindXercesC
-   /module/FindX11
-   /module/FindXMLRPC
-   /module/FindZLIB
-
-Deprecated Modules
-^^^^^^^^^^^^^^^^^^^
-
-Deprecated Utility Modules
-==========================
-
-.. toctree::
-   :maxdepth: 1
-
-   /module/CMakeDetermineVSServicePack
-   /module/CMakeExpandImportedTargets
-   /module/CMakeForceCompiler
-   /module/CMakeParseArguments
-   /module/MacroAddFileDependencies
-   /module/TestCXXAcceptsFlag
-   /module/UsePkgConfig
-   /module/Use_wxWindows
-   /module/WriteBasicConfigVersionFile
-
-Deprecated Find Modules
-=======================
-
-.. toctree::
-   :maxdepth: 1
-
-   /module/FindCUDA
-   /module/FindPythonInterp
-   /module/FindPythonLibs
-   /module/FindQt
-   /module/FindwxWindows
-
-Legacy CPack Modules
-====================
-
-These modules used to be mistakenly exposed to the user, and have been moved
-out of user visibility. They are for CPack internal use, and should never be
-used directly.
-
-.. toctree::
-   :maxdepth: 1
-
-   /module/CPackArchive
-   /module/CPackBundle
-   /module/CPackCygwin
-   /module/CPackDeb
-   /module/CPackDMG
-   /module/CPackFreeBSD
-   /module/CPackNSIS
-   /module/CPackNuGet
-   /module/CPackPackageMaker
-   /module/CPackProductBuild
-   /module/CPackRPM
-   /module/CPackWIX
diff --git a/share/cmake-3.18/Help/manual/cmake-packages.7.rst b/share/cmake-3.18/Help/manual/cmake-packages.7.rst
deleted file mode 100644
index 4b2934a..0000000
--- a/share/cmake-3.18/Help/manual/cmake-packages.7.rst
+++ /dev/null
@@ -1,719 +0,0 @@
-.. cmake-manual-description: CMake Packages Reference
-
-cmake-packages(7)
-*****************
-
-.. only:: html
-
-   .. contents::
-
-Introduction
-============
-
-Packages provide dependency information to CMake based buildsystems.  Packages
-are found with the :command:`find_package` command.  The result of
-using :command:`find_package` is either a set of :prop_tgt:`IMPORTED` targets, or
-a set of variables corresponding to build-relevant information.
-
-Using Packages
-==============
-
-CMake provides direct support for two forms of packages,
-`Config-file Packages`_ and `Find-module Packages`_.
-Indirect support for ``pkg-config`` packages is also provided via
-the :module:`FindPkgConfig` module.  In all cases, the basic form
-of :command:`find_package` calls is the same:
-
-.. code-block:: cmake
-
-  find_package(Qt4 4.7.0 REQUIRED) # CMake provides a Qt4 find-module
-  find_package(Qt5Core 5.1.0 REQUIRED) # Qt provides a Qt5 package config file.
-  find_package(LibXml2 REQUIRED) # Use pkg-config via the LibXml2 find-module
-
-In cases where it is known that a package configuration file is provided by
-upstream, and only that should be used, the ``CONFIG`` keyword may be passed
-to :command:`find_package`:
-
-.. code-block:: cmake
-
-  find_package(Qt5Core 5.1.0 CONFIG REQUIRED)
-  find_package(Qt5Gui 5.1.0 CONFIG)
-
-Similarly, the ``MODULE`` keyword says to use only a find-module:
-
-.. code-block:: cmake
-
-  find_package(Qt4 4.7.0 MODULE REQUIRED)
-
-Specifying the type of package explicitly improves the error message shown to
-the user if it is not found.
-
-Both types of packages also support specifying components of a package,
-either after the ``REQUIRED`` keyword:
-
-.. code-block:: cmake
-
-  find_package(Qt5 5.1.0 CONFIG REQUIRED Widgets Xml Sql)
-
-or as a separate ``COMPONENTS`` list:
-
-.. code-block:: cmake
-
-  find_package(Qt5 5.1.0 COMPONENTS Widgets Xml Sql)
-
-or as a separate ``OPTIONAL_COMPONENTS`` list:
-
-.. code-block:: cmake
-
-  find_package(Qt5 5.1.0 COMPONENTS Widgets
-                         OPTIONAL_COMPONENTS Xml Sql
-  )
-
-Handling of ``COMPONENTS`` and ``OPTIONAL_COMPONENTS`` is defined by the
-package.
-
-By setting the :variable:`CMAKE_DISABLE_FIND_PACKAGE_<PackageName>` variable to
-``TRUE``, the ``<PackageName>`` package will not be searched, and will always
-be ``NOTFOUND``.
-
-.. _`Config File Packages`:
-
-Config-file Packages
---------------------
-
-A config-file package is a set of files provided by upstreams for downstreams
-to use. CMake searches in a number of locations for package configuration files, as
-described in the :command:`find_package` documentation.  The most simple way for
-a CMake user to tell :manual:`cmake(1)` to search in a non-standard prefix for
-a package is to set the ``CMAKE_PREFIX_PATH`` cache variable.
-
-Config-file packages are provided by upstream vendors as part of development
-packages, that is, they belong with the header files and any other files
-provided to assist downstreams in using the package.
-
-A set of variables which provide package status information are also set
-automatically when using a config-file package.  The ``<PackageName>_FOUND``
-variable is set to true or false, depending on whether the package was
-found.  The ``<PackageName>_DIR`` cache variable is set to the location of the
-package configuration file.
-
-Find-module Packages
---------------------
-
-A find module is a file with a set of rules for finding the required pieces of
-a dependency, primarily header files and libraries.  Typically, a find module
-is needed when the upstream is not built with CMake, or is not CMake-aware
-enough to otherwise provide a package configuration file.  Unlike a package configuration
-file, it is not shipped with upstream, but is used by downstream to find the
-files by guessing locations of files with platform-specific hints.
-
-Unlike the case of an upstream-provided package configuration file, no single point
-of reference identifies the package as being found, so the ``<PackageName>_FOUND``
-variable is not automatically set by the :command:`find_package` command.  It
-can still be expected to be set by convention however and should be set by
-the author of the Find-module.  Similarly there is no ``<PackageName>_DIR`` variable,
-but each of the artifacts such as library locations and header file locations
-provide a separate cache variable.
-
-See the :manual:`cmake-developer(7)` manual for more information about creating
-Find-module files.
-
-Package Layout
-==============
-
-A config-file package consists of a `Package Configuration File`_ and
-optionally a `Package Version File`_ provided with the project distribution.
-
-Package Configuration File
---------------------------
-
-Consider a project ``Foo`` that installs the following files::
-
-  <prefix>/include/foo-1.2/foo.h
-  <prefix>/lib/foo-1.2/libfoo.a
-
-It may also provide a CMake package configuration file::
-
-  <prefix>/lib/cmake/foo-1.2/FooConfig.cmake
-
-with content defining :prop_tgt:`IMPORTED` targets, or defining variables, such
-as:
-
-.. code-block:: cmake
-
-  # ...
-  # (compute PREFIX relative to file location)
-  # ...
-  set(Foo_INCLUDE_DIRS ${PREFIX}/include/foo-1.2)
-  set(Foo_LIBRARIES ${PREFIX}/lib/foo-1.2/libfoo.a)
-
-If another project wishes to use ``Foo`` it need only to locate the ``FooConfig.cmake``
-file and load it to get all the information it needs about package content
-locations.  Since the package configuration file is provided by the package
-installation it already knows all the file locations.
-
-The :command:`find_package` command may be used to search for the package
-configuration file.  This command constructs a set of installation prefixes
-and searches under each prefix in several locations.  Given the name ``Foo``,
-it looks for a file called ``FooConfig.cmake`` or ``foo-config.cmake``.
-The full set of locations is specified in the :command:`find_package` command
-documentation. One place it looks is::
-
- <prefix>/lib/cmake/Foo*/
-
-where ``Foo*`` is a case-insensitive globbing expression.  In our example the
-globbing expression will match ``<prefix>/lib/cmake/foo-1.2`` and the package
-configuration file will be found.
-
-Once found, a package configuration file is immediately loaded.  It, together
-with a package version file, contains all the information the project needs to
-use the package.
-
-Package Version File
---------------------
-
-When the :command:`find_package` command finds a candidate package configuration
-file it looks next to it for a version file. The version file is loaded to test
-whether the package version is an acceptable match for the version requested.
-If the version file claims compatibility the configuration file is accepted.
-Otherwise it is ignored.
-
-The name of the package version file must match that of the package configuration
-file but has either ``-version`` or ``Version`` appended to the name before
-the ``.cmake`` extension.  For example, the files::
-
- <prefix>/lib/cmake/foo-1.3/foo-config.cmake
- <prefix>/lib/cmake/foo-1.3/foo-config-version.cmake
-
-and::
-
- <prefix>/lib/cmake/bar-4.2/BarConfig.cmake
- <prefix>/lib/cmake/bar-4.2/BarConfigVersion.cmake
-
-are each pairs of package configuration files and corresponding package version
-files.
-
-When the :command:`find_package` command loads a version file it first sets the
-following variables:
-
-``PACKAGE_FIND_NAME``
- The ``<PackageName>``
-
-``PACKAGE_FIND_VERSION``
- Full requested version string
-
-``PACKAGE_FIND_VERSION_MAJOR``
- Major version if requested, else 0
-
-``PACKAGE_FIND_VERSION_MINOR``
- Minor version if requested, else 0
-
-``PACKAGE_FIND_VERSION_PATCH``
- Patch version if requested, else 0
-
-``PACKAGE_FIND_VERSION_TWEAK``
- Tweak version if requested, else 0
-
-``PACKAGE_FIND_VERSION_COUNT``
- Number of version components, 0 to 4
-
-The version file must use these variables to check whether it is compatible or
-an exact match for the requested version and set the following variables with
-results:
-
-``PACKAGE_VERSION``
- Full provided version string
-
-``PACKAGE_VERSION_EXACT``
- True if version is exact match
-
-``PACKAGE_VERSION_COMPATIBLE``
- True if version is compatible
-
-``PACKAGE_VERSION_UNSUITABLE``
- True if unsuitable as any version
-
-Version files are loaded in a nested scope so they are free to set any variables
-they wish as part of their computation. The find_package command wipes out the
-scope when the version file has completed and it has checked the output
-variables. When the version file claims to be an acceptable match for the
-requested version the find_package command sets the following variables for
-use by the project:
-
-``<PackageName>_VERSION``
- Full provided version string
-
-``<PackageName>_VERSION_MAJOR``
- Major version if provided, else 0
-
-``<PackageName>_VERSION_MINOR``
- Minor version if provided, else 0
-
-``<PackageName>_VERSION_PATCH``
- Patch version if provided, else 0
-
-``<PackageName>_VERSION_TWEAK``
- Tweak version if provided, else 0
-
-``<PackageName>_VERSION_COUNT``
- Number of version components, 0 to 4
-
-The variables report the version of the package that was actually found.
-The ``<PackageName>`` part of their name matches the argument given to the
-:command:`find_package` command.
-
-.. _`Creating Packages`:
-
-Creating Packages
-=================
-
-Usually, the upstream depends on CMake itself and can use some CMake facilities
-for creating the package files. Consider an upstream which provides a single
-shared library:
-
-.. code-block:: cmake
-
-  project(UpstreamLib)
-
-  set(CMAKE_INCLUDE_CURRENT_DIR ON)
-  set(CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON)
-
-  set(Upstream_VERSION 3.4.1)
-
-  include(GenerateExportHeader)
-
-  add_library(ClimbingStats SHARED climbingstats.cpp)
-  generate_export_header(ClimbingStats)
-  set_property(TARGET ClimbingStats PROPERTY VERSION ${Upstream_VERSION})
-  set_property(TARGET ClimbingStats PROPERTY SOVERSION 3)
-  set_property(TARGET ClimbingStats PROPERTY
-    INTERFACE_ClimbingStats_MAJOR_VERSION 3)
-  set_property(TARGET ClimbingStats APPEND PROPERTY
-    COMPATIBLE_INTERFACE_STRING ClimbingStats_MAJOR_VERSION
-  )
-
-  install(TARGETS ClimbingStats EXPORT ClimbingStatsTargets
-    LIBRARY DESTINATION lib
-    ARCHIVE DESTINATION lib
-    RUNTIME DESTINATION bin
-    INCLUDES DESTINATION include
-  )
-  install(
-    FILES
-      climbingstats.h
-      "${CMAKE_CURRENT_BINARY_DIR}/climbingstats_export.h"
-    DESTINATION
-      include
-    COMPONENT
-      Devel
-  )
-
-  include(CMakePackageConfigHelpers)
-  write_basic_package_version_file(
-    "${CMAKE_CURRENT_BINARY_DIR}/ClimbingStats/ClimbingStatsConfigVersion.cmake"
-    VERSION ${Upstream_VERSION}
-    COMPATIBILITY AnyNewerVersion
-  )
-
-  export(EXPORT ClimbingStatsTargets
-    FILE "${CMAKE_CURRENT_BINARY_DIR}/ClimbingStats/ClimbingStatsTargets.cmake"
-    NAMESPACE Upstream::
-  )
-  configure_file(cmake/ClimbingStatsConfig.cmake
-    "${CMAKE_CURRENT_BINARY_DIR}/ClimbingStats/ClimbingStatsConfig.cmake"
-    COPYONLY
-  )
-
-  set(ConfigPackageLocation lib/cmake/ClimbingStats)
-  install(EXPORT ClimbingStatsTargets
-    FILE
-      ClimbingStatsTargets.cmake
-    NAMESPACE
-      Upstream::
-    DESTINATION
-      ${ConfigPackageLocation}
-  )
-  install(
-    FILES
-      cmake/ClimbingStatsConfig.cmake
-      "${CMAKE_CURRENT_BINARY_DIR}/ClimbingStats/ClimbingStatsConfigVersion.cmake"
-    DESTINATION
-      ${ConfigPackageLocation}
-    COMPONENT
-      Devel
-  )
-
-The :module:`CMakePackageConfigHelpers` module provides a macro for creating
-a simple ``ConfigVersion.cmake`` file.  This file sets the version of the
-package.  It is read by CMake when :command:`find_package` is called to
-determine the compatibility with the requested version, and to set some
-version-specific variables ``<PackageName>_VERSION``, ``<PackageName>_VERSION_MAJOR``,
-``<PackageName>_VERSION_MINOR`` etc.  The :command:`install(EXPORT)` command is
-used to export the targets in the ``ClimbingStatsTargets`` export-set, defined
-previously by the :command:`install(TARGETS)` command. This command generates
-the ``ClimbingStatsTargets.cmake`` file to contain :prop_tgt:`IMPORTED`
-targets, suitable for use by downstreams and arranges to install it to
-``lib/cmake/ClimbingStats``.  The generated ``ClimbingStatsConfigVersion.cmake``
-and a ``cmake/ClimbingStatsConfig.cmake`` are installed to the same location,
-completing the package.
-
-The generated :prop_tgt:`IMPORTED` targets have appropriate properties set
-to define their :ref:`usage requirements <Target Usage Requirements>`, such as
-:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES`,
-:prop_tgt:`INTERFACE_COMPILE_DEFINITIONS` and other relevant built-in
-``INTERFACE_`` properties.  The ``INTERFACE`` variant of user-defined
-properties listed in :prop_tgt:`COMPATIBLE_INTERFACE_STRING` and
-other :ref:`Compatible Interface Properties` are also propagated to the
-generated :prop_tgt:`IMPORTED` targets.  In the above case,
-``ClimbingStats_MAJOR_VERSION`` is defined as a string which must be
-compatible among the dependencies of any depender.  By setting this custom
-defined user property in this version and in the next version of
-``ClimbingStats``, :manual:`cmake(1)` will issue a diagnostic if there is an
-attempt to use version 3 together with version 4.  Packages can choose to
-employ such a pattern if different major versions of the package are designed
-to be incompatible.
-
-A ``NAMESPACE`` with double-colons is specified when exporting the targets
-for installation.  This convention of double-colons gives CMake a hint that
-the name is an :prop_tgt:`IMPORTED` target when it is used by downstreams
-with the :command:`target_link_libraries` command.  This way, CMake can
-issue a diagnostic if the package providing it has not yet been found.
-
-In this case, when using :command:`install(TARGETS)` the ``INCLUDES DESTINATION``
-was specified.  This causes the ``IMPORTED`` targets to have their
-:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` populated with the ``include``
-directory in the :variable:`CMAKE_INSTALL_PREFIX`.  When the ``IMPORTED``
-target is used by downstream, it automatically consumes the entries from
-that property.
-
-Creating a Package Configuration File
--------------------------------------
-
-In this case, the ``ClimbingStatsConfig.cmake`` file could be as simple as:
-
-.. code-block:: cmake
-
-  include("${CMAKE_CURRENT_LIST_DIR}/ClimbingStatsTargets.cmake")
-
-As this allows downstreams to use the ``IMPORTED`` targets.  If any macros
-should be provided by the ``ClimbingStats`` package, they should
-be in a separate file which is installed to the same location as the
-``ClimbingStatsConfig.cmake`` file, and included from there.
-
-This can also be extended to cover dependencies:
-
-.. code-block:: cmake
-
-  # ...
-  add_library(ClimbingStats SHARED climbingstats.cpp)
-  generate_export_header(ClimbingStats)
-
-  find_package(Stats 2.6.4 REQUIRED)
-  target_link_libraries(ClimbingStats PUBLIC Stats::Types)
-
-As the ``Stats::Types`` target is a ``PUBLIC`` dependency of ``ClimbingStats``,
-downstreams must also find the ``Stats`` package and link to the ``Stats::Types``
-library.  The ``Stats`` package should be found in the ``ClimbingStatsConfig.cmake``
-file to ensure this.  The ``find_dependency`` macro from the
-:module:`CMakeFindDependencyMacro` helps with this by propagating
-whether the package is ``REQUIRED``, or ``QUIET`` etc.  All ``REQUIRED``
-dependencies of a package should be found in the ``Config.cmake`` file:
-
-.. code-block:: cmake
-
-  include(CMakeFindDependencyMacro)
-  find_dependency(Stats 2.6.4)
-
-  include("${CMAKE_CURRENT_LIST_DIR}/ClimbingStatsTargets.cmake")
-  include("${CMAKE_CURRENT_LIST_DIR}/ClimbingStatsMacros.cmake")
-
-The ``find_dependency`` macro also sets ``ClimbingStats_FOUND`` to ``False`` if
-the dependency is not found, along with a diagnostic that the ``ClimbingStats``
-package can not be used without the ``Stats`` package.
-
-If ``COMPONENTS`` are specified when the downstream uses :command:`find_package`,
-they are listed in the ``<PackageName>_FIND_COMPONENTS`` variable. If a particular
-component is non-optional, then the ``<PackageName>_FIND_REQUIRED_<comp>`` will
-be true. This can be tested with logic in the package configuration file:
-
-.. code-block:: cmake
-
-  include(CMakeFindDependencyMacro)
-  find_dependency(Stats 2.6.4)
-
-  include("${CMAKE_CURRENT_LIST_DIR}/ClimbingStatsTargets.cmake")
-  include("${CMAKE_CURRENT_LIST_DIR}/ClimbingStatsMacros.cmake")
-
-  set(_supported_components Plot Table)
-
-  foreach(_comp ${ClimbingStats_FIND_COMPONENTS})
-    if (NOT ";${_supported_components};" MATCHES _comp)
-      set(ClimbingStats_FOUND False)
-      set(ClimbingStats_NOT_FOUND_MESSAGE "Unsupported component: ${_comp}")
-    endif()
-    include("${CMAKE_CURRENT_LIST_DIR}/ClimbingStats${_comp}Targets.cmake")
-  endforeach()
-
-Here, the ``ClimbingStats_NOT_FOUND_MESSAGE`` is set to a diagnosis that the package
-could not be found because an invalid component was specified.  This message
-variable can be set for any case where the ``_FOUND`` variable is set to ``False``,
-and will be displayed to the user.
-
-Creating a Package Configuration File for the Build Tree
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The :command:`export(EXPORT)` command creates an :prop_tgt:`IMPORTED` targets
-definition file which is specific to the build-tree, and is not relocatable.
-This can similarly be used with a suitable package configuration file and
-package version file to define a package for the build tree which may be used
-without installation.  Consumers of the build tree can simply ensure that the
-:variable:`CMAKE_PREFIX_PATH` contains the build directory, or set the
-``ClimbingStats_DIR`` to ``<build_dir>/ClimbingStats`` in the cache.
-
-.. _`Creating Relocatable Packages`:
-
-Creating Relocatable Packages
------------------------------
-
-A relocatable package must not reference absolute paths of files on
-the machine where the package is built that will not exist on the
-machines where the package may be installed.
-
-Packages created by :command:`install(EXPORT)` are designed to be relocatable,
-using paths relative to the location of the package itself.  When defining
-the interface of a target for ``EXPORT``, keep in mind that the include
-directories should be specified as relative paths which are relative to the
-:variable:`CMAKE_INSTALL_PREFIX`:
-
-.. code-block:: cmake
-
-  target_include_directories(tgt INTERFACE
-    # Wrong, not relocatable:
-    $<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/include/TgtName>
-  )
-
-  target_include_directories(tgt INTERFACE
-    # Ok, relocatable:
-    $<INSTALL_INTERFACE:include/TgtName>
-  )
-
-The ``$<INSTALL_PREFIX>``
-:manual:`generator expression <cmake-generator-expressions(7)>` may be used as
-a placeholder for the install prefix without resulting in a non-relocatable
-package.  This is necessary if complex generator expressions are used:
-
-.. code-block:: cmake
-
-  target_include_directories(tgt INTERFACE
-    # Ok, relocatable:
-    $<INSTALL_INTERFACE:$<$<CONFIG:Debug>:$<INSTALL_PREFIX>/include/TgtName>>
-  )
-
-This also applies to paths referencing external dependencies.
-It is not advisable to populate any properties which may contain
-paths, such as :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` and
-:prop_tgt:`INTERFACE_LINK_LIBRARIES`, with paths relevant to dependencies.
-For example, this code may not work well for a relocatable package:
-
-.. code-block:: cmake
-
-  target_link_libraries(ClimbingStats INTERFACE
-    ${Foo_LIBRARIES} ${Bar_LIBRARIES}
-    )
-  target_include_directories(ClimbingStats INTERFACE
-    "$<INSTALL_INTERFACE:${Foo_INCLUDE_DIRS};${Bar_INCLUDE_DIRS}>"
-    )
-
-The referenced variables may contain the absolute paths to libraries
-and include directories **as found on the machine the package was made on**.
-This would create a package with hard-coded paths to dependencies and not
-suitable for relocation.
-
-Ideally such dependencies should be used through their own
-:ref:`IMPORTED targets <Imported Targets>` that have their own
-:prop_tgt:`IMPORTED_LOCATION` and usage requirement properties
-such as :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` populated
-appropriately.  Those imported targets may then be used with
-the :command:`target_link_libraries` command for ``ClimbingStats``:
-
-.. code-block:: cmake
-
-  target_link_libraries(ClimbingStats INTERFACE Foo::Foo Bar::Bar)
-
-With this approach the package references its external dependencies
-only through the names of :ref:`IMPORTED targets <Imported Targets>`.
-When a consumer uses the installed package, the consumer will run the
-appropriate :command:`find_package` commands (via the ``find_dependency``
-macro described above) to find the dependencies and populate the
-imported targets with appropriate paths on their own machine.
-
-Unfortunately many :manual:`modules <cmake-modules(7)>` shipped with
-CMake do not yet provide :ref:`IMPORTED targets <Imported Targets>`
-because their development pre-dated this approach.  This may improve
-incrementally over time.  Workarounds to create relocatable packages
-using such modules include:
-
-* When building the package, specify each ``Foo_LIBRARY`` cache
-  entry as just a library name, e.g. ``-DFoo_LIBRARY=foo``.  This
-  tells the corresponding find module to populate the ``Foo_LIBRARIES``
-  with just ``foo`` to ask the linker to search for the library
-  instead of hard-coding a path.
-
-* Or, after installing the package content but before creating the
-  package installation binary for redistribution, manually replace
-  the absolute paths with placeholders for substitution by the
-  installation tool when the package is installed.
-
-.. _`Package Registry`:
-
-Package Registry
-================
-
-CMake provides two central locations to register packages that have
-been built or installed anywhere on a system:
-
-* `User Package Registry`_
-* `System Package Registry`_
-
-The registries are especially useful to help projects find packages in
-non-standard install locations or directly in their own build trees.
-A project may populate either the user or system registry (using its own
-means, see below) to refer to its location.
-In either case the package should store at the registered location a
-`Package Configuration File`_ (``<PackageName>Config.cmake``) and optionally a
-`Package Version File`_ (``<PackageName>ConfigVersion.cmake``).
-
-The :command:`find_package` command searches the two package registries
-as two of the search steps specified in its documentation.  If it has
-sufficient permissions it also removes stale package registry entries
-that refer to directories that do not exist or do not contain a matching
-package configuration file.
-
-.. _`User Package Registry`:
-
-User Package Registry
----------------------
-
-The User Package Registry is stored in a per-user location.
-The :command:`export(PACKAGE)` command may be used to register a project
-build tree in the user package registry.  CMake currently provides no
-interface to add install trees to the user package registry.  Installers
-must be manually taught to register their packages if desired.
-
-On Windows the user package registry is stored in the Windows registry
-under a key in ``HKEY_CURRENT_USER``.
-
-A ``<PackageName>`` may appear under registry key::
-
-  HKEY_CURRENT_USER\Software\Kitware\CMake\Packages\<PackageName>
-
-as a ``REG_SZ`` value, with arbitrary name, that specifies the directory
-containing the package configuration file.
-
-On UNIX platforms the user package registry is stored in the user home
-directory under ``~/.cmake/packages``.  A ``<PackageName>`` may appear under
-the directory::
-
-  ~/.cmake/packages/<PackageName>
-
-as a file, with arbitrary name, whose content specifies the directory
-containing the package configuration file.
-
-.. _`System Package Registry`:
-
-System Package Registry
------------------------
-
-The System Package Registry is stored in a system-wide location.
-CMake currently provides no interface to add to the system package registry.
-Installers must be manually taught to register their packages if desired.
-
-On Windows the system package registry is stored in the Windows registry
-under a key in ``HKEY_LOCAL_MACHINE``.  A ``<PackageName>`` may appear under
-registry key::
-
-  HKEY_LOCAL_MACHINE\Software\Kitware\CMake\Packages\<PackageName>
-
-as a ``REG_SZ`` value, with arbitrary name, that specifies the directory
-containing the package configuration file.
-
-There is no system package registry on non-Windows platforms.
-
-.. _`Disabling the Package Registry`:
-
-Disabling the Package Registry
-------------------------------
-
-In some cases using the Package Registries is not desirable. CMake
-allows one to disable them using the following variables:
-
-* The :command:`export(PACKAGE)` command does not populate the user
-  package registry when :policy:`CMP0090` is set to ``NEW`` unless the
-  :variable:`CMAKE_EXPORT_PACKAGE_REGISTRY` variable explicitly enables it.
-  When :policy:`CMP0090` is *not* set to ``NEW`` then
-  :command:`export(PACKAGE)` populates the user package registry unless
-  the :variable:`CMAKE_EXPORT_NO_PACKAGE_REGISTRY` variable explicitly
-  disables it.
-* :variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY` disables the
-  User Package Registry in all the :command:`find_package` calls when
-  set to ``FALSE``.
-* Deprecated :variable:`CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY` disables the
-  User Package Registry in all the :command:`find_package` calls when set
-  to ``TRUE``. This variable is ignored when
-  :variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY` has been set.
-* :variable:`CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY` disables
-  the System Package Registry in all the :command:`find_package` calls.
-
-Package Registry Example
-------------------------
-
-A simple convention for naming package registry entries is to use content
-hashes.  They are deterministic and unlikely to collide
-(:command:`export(PACKAGE)` uses this approach).
-The name of an entry referencing a specific directory is simply the content
-hash of the directory path itself.
-
-If a project arranges for package registry entries to exist, such as::
-
- > reg query HKCU\Software\Kitware\CMake\Packages\MyPackage
- HKEY_CURRENT_USER\Software\Kitware\CMake\Packages\MyPackage
-  45e7d55f13b87179bb12f907c8de6fc4 REG_SZ c:/Users/Me/Work/lib/cmake/MyPackage
-  7b4a9844f681c80ce93190d4e3185db9 REG_SZ c:/Users/Me/Work/MyPackage-build
-
-or::
-
- $ cat ~/.cmake/packages/MyPackage/7d1fb77e07ce59a81bed093bbee945bd
- /home/me/work/lib/cmake/MyPackage
- $ cat ~/.cmake/packages/MyPackage/f92c1db873a1937f3100706657c63e07
- /home/me/work/MyPackage-build
-
-then the ``CMakeLists.txt`` code:
-
-.. code-block:: cmake
-
-  find_package(MyPackage)
-
-will search the registered locations for package configuration files
-(``MyPackageConfig.cmake``).  The search order among package registry
-entries for a single package is unspecified and the entry names
-(hashes in this example) have no meaning.  Registered locations may
-contain package version files (``MyPackageConfigVersion.cmake``) to
-tell :command:`find_package` whether a specific location is suitable
-for the version requested.
-
-Package Registry Ownership
---------------------------
-
-Package registry entries are individually owned by the project installations
-that they reference.  A package installer is responsible for adding its own
-entry and the corresponding uninstaller is responsible for removing it.
-
-The :command:`export(PACKAGE)` command populates the user package registry
-with the location of a project build tree.  Build trees tend to be deleted by
-developers and have no "uninstall" event that could trigger removal of their
-entries.  In order to keep the registries clean the :command:`find_package`
-command automatically removes stale entries it encounters if it has sufficient
-permissions.  CMake provides no interface to remove an entry referencing an
-existing build tree once :command:`export(PACKAGE)` has been invoked.
-However, if the project removes its package configuration file from the build
-tree then the entry referencing the location will be considered stale.
diff --git a/share/cmake-3.18/Help/manual/cmake-policies.7.rst b/share/cmake-3.18/Help/manual/cmake-policies.7.rst
deleted file mode 100644
index e98038a..0000000
--- a/share/cmake-3.18/Help/manual/cmake-policies.7.rst
+++ /dev/null
@@ -1,295 +0,0 @@
-.. cmake-manual-description: CMake Policies Reference
-
-cmake-policies(7)
-*****************
-
-.. only:: html
-
-   .. contents::
-
-Introduction
-============
-
-Policies in CMake are used to preserve backward compatible behavior
-across multiple releases.  When a new policy is introduced, newer CMake
-versions will begin to warn about the backward compatible behavior.  It
-is possible to disable the warning by explicitly requesting the OLD, or
-backward compatible behavior using the :command:`cmake_policy` command.
-It is also possible to request ``NEW``, or non-backward compatible behavior
-for a policy, also avoiding the warning.  Each policy can also be set to
-either ``NEW`` or ``OLD`` behavior explicitly on the command line with the
-:variable:`CMAKE_POLICY_DEFAULT_CMP<NNNN>` variable.
-
-A policy is a deprecation mechanism and not a reliable feature toggle.
-A policy should almost never be set to ``OLD``, except to silence warnings
-in an otherwise frozen or stable codebase, or temporarily as part of a
-larger migration path. The ``OLD`` behavior of each policy is undesirable
-and will be replaced with an error condition in a future release.
-
-The :command:`cmake_minimum_required` command does more than report an
-error if a too-old version of CMake is used to build a project.  It
-also sets all policies introduced in that CMake version or earlier to
-``NEW`` behavior.  To manage policies without increasing the minimum required
-CMake version, the :command:`if(POLICY)` command may be used:
-
-.. code-block:: cmake
-
-  if(POLICY CMP0990)
-    cmake_policy(SET CMP0990 NEW)
-  endif()
-
-This has the effect of using the ``NEW`` behavior with newer CMake releases which
-users may be using and not issuing a compatibility warning.
-
-The setting of a policy is confined in some cases to not propagate to the
-parent scope.  For example, if the files read by the :command:`include` command
-or the :command:`find_package` command contain a use of :command:`cmake_policy`,
-that policy setting will not affect the caller by default.  Both commands accept
-an optional ``NO_POLICY_SCOPE`` keyword to control this behavior.
-
-The :variable:`CMAKE_MINIMUM_REQUIRED_VERSION` variable may also be used
-to determine whether to report an error on use of deprecated macros or
-functions.
-
-Policies Introduced by CMake 3.18
-=================================
-
-.. toctree::
-   :maxdepth: 1
-
-   CMP0108: A target cannot link to itself through an alias. </policy/CMP0108>
-   CMP0107: An ALIAS target cannot overwrite another target. </policy/CMP0107>
-   CMP0106: The Documentation module is removed. </policy/CMP0106>
-   CMP0105: Device link step uses the link options. </policy/CMP0105>
-   CMP0104: CMAKE_CUDA_ARCHITECTURES now detected for NVCC, empty CUDA_ARCHITECTURES not allowed. </policy/CMP0104>
-   CMP0103: Multiple export() with same FILE without APPEND is not allowed. </policy/CMP0103>
-
-Policies Introduced by CMake 3.17
-=================================
-
-.. toctree::
-   :maxdepth: 1
-
-   CMP0102: mark_as_advanced() does nothing if a cache entry does not exist. </policy/CMP0102>
-   CMP0101: target_compile_options honors BEFORE keyword in all scopes. </policy/CMP0101>
-   CMP0100: Let AUTOMOC and AUTOUIC process .hh header files. </policy/CMP0100>
-   CMP0099: Link properties are transitive over private dependency on static libraries. </policy/CMP0099>
-   CMP0098: FindFLEX runs flex in CMAKE_CURRENT_BINARY_DIR when executing. </policy/CMP0098>
-
-Policies Introduced by CMake 3.16
-=================================
-
-.. toctree::
-   :maxdepth: 1
-
-   CMP0097: ExternalProject_Add with GIT_SUBMODULES "" initializes no submodules. </policy/CMP0097>
-   CMP0096: project() preserves leading zeros in version components. </policy/CMP0096>
-   CMP0095: RPATH entries are properly escaped in the intermediary CMake install script. </policy/CMP0095>
-
-Policies Introduced by CMake 3.15
-=================================
-
-.. toctree::
-   :maxdepth: 1
-
-   CMP0094: FindPython3, FindPython2 and FindPython use LOCATION for lookup strategy. </policy/CMP0094>
-   CMP0093: FindBoost reports Boost_VERSION in x.y.z format. </policy/CMP0093>
-   CMP0092: MSVC warning flags are not in CMAKE_{C,CXX}_FLAGS by default. </policy/CMP0092>
-   CMP0091: MSVC runtime library flags are selected by an abstraction. </policy/CMP0091>
-   CMP0090: export(PACKAGE) does not populate package registry by default. </policy/CMP0090>
-   CMP0089: Compiler id for IBM Clang-based XL compilers is now XLClang. </policy/CMP0089>
-
-Policies Introduced by CMake 3.14
-=================================
-
-.. toctree::
-   :maxdepth: 1
-
-   CMP0088: FindBISON runs bison in CMAKE_CURRENT_BINARY_DIR when executing. </policy/CMP0088>
-   CMP0087: install(SCRIPT | CODE) supports generator expressions. </policy/CMP0087>
-   CMP0086: UseSWIG honors SWIG_MODULE_NAME via -module flag. </policy/CMP0086>
-   CMP0085: IN_LIST generator expression handles empty list items. </policy/CMP0085>
-   CMP0084: The FindQt module does not exist for find_package(). </policy/CMP0084>
-   CMP0083: Add PIE options when linking executable. </policy/CMP0083>
-   CMP0082: Install rules from add_subdirectory() are interleaved with those in caller. </policy/CMP0082>
-
-
-Policies Introduced by CMake 3.13
-=================================
-
-.. toctree::
-   :maxdepth: 1
-
-   CMP0081: Relative paths not allowed in LINK_DIRECTORIES target property. </policy/CMP0081>
-   CMP0080: BundleUtilities cannot be included at configure time. </policy/CMP0080>
-   CMP0079: target_link_libraries allows use with targets in other directories. </policy/CMP0079>
-   CMP0078: UseSWIG generates standard target names. </policy/CMP0078>
-   CMP0077: option() honors normal variables. </policy/CMP0077>
-   CMP0076: target_sources() command converts relative paths to absolute. </policy/CMP0076>
-
-Policies Introduced by CMake 3.12
-=================================
-
-.. toctree::
-   :maxdepth: 1
-
-   CMP0075: Include file check macros honor CMAKE_REQUIRED_LIBRARIES. </policy/CMP0075>
-   CMP0074: find_package uses PackageName_ROOT variables. </policy/CMP0074>
-   CMP0073: Do not produce legacy _LIB_DEPENDS cache entries. </policy/CMP0073>
-
-Policies Introduced by CMake 3.11
-=================================
-
-.. toctree::
-   :maxdepth: 1
-
-   CMP0072: FindOpenGL prefers GLVND by default when available. </policy/CMP0072>
-
-Policies Introduced by CMake 3.10
-=================================
-
-.. toctree::
-   :maxdepth: 1
-
-   CMP0071: Let AUTOMOC and AUTOUIC process GENERATED files. </policy/CMP0071>
-   CMP0070: Define file(GENERATE) behavior for relative paths. </policy/CMP0070>
-
-Policies Introduced by CMake 3.9
-================================
-
-.. toctree::
-   :maxdepth: 1
-
-   CMP0069: INTERPROCEDURAL_OPTIMIZATION is enforced when enabled. </policy/CMP0069>
-   CMP0068: RPATH settings on macOS do not affect install_name. </policy/CMP0068>
-
-Policies Introduced by CMake 3.8
-================================
-
-.. toctree::
-   :maxdepth: 1
-
-   CMP0067: Honor language standard in try_compile() source-file signature. </policy/CMP0067>
-
-Policies Introduced by CMake 3.7
-================================
-
-.. toctree::
-   :maxdepth: 1
-
-   CMP0066: Honor per-config flags in try_compile() source-file signature. </policy/CMP0066>
-
-Policies Introduced by CMake 3.4
-================================
-
-.. toctree::
-   :maxdepth: 1
-
-   CMP0065: Do not add flags to export symbols from executables without the ENABLE_EXPORTS target property. </policy/CMP0065>
-   CMP0064: Support new TEST if() operator. </policy/CMP0064>
-
-Policies Introduced by CMake 3.3
-================================
-
-.. toctree::
-   :maxdepth: 1
-
-   CMP0063: Honor visibility properties for all target types. </policy/CMP0063>
-   CMP0062: Disallow install() of export() result. </policy/CMP0062>
-   CMP0061: CTest does not by default tell make to ignore errors (-i). </policy/CMP0061>
-   CMP0060: Link libraries by full path even in implicit directories. </policy/CMP0060>
-   CMP0059: Do not treat DEFINITIONS as a built-in directory property. </policy/CMP0059>
-   CMP0058: Ninja requires custom command byproducts to be explicit. </policy/CMP0058>
-   CMP0057: Support new IN_LIST if() operator. </policy/CMP0057>
-
-Policies Introduced by CMake 3.2
-================================
-
-.. toctree::
-   :maxdepth: 1
-
-   CMP0056: Honor link flags in try_compile() source-file signature. </policy/CMP0056>
-   CMP0055: Strict checking for break() command. </policy/CMP0055>
-
-Policies Introduced by CMake 3.1
-================================
-
-.. toctree::
-   :maxdepth: 1
-
-   CMP0054: Only interpret if() arguments as variables or keywords when unquoted. </policy/CMP0054>
-   CMP0053: Simplify variable reference and escape sequence evaluation. </policy/CMP0053>
-   CMP0052: Reject source and build dirs in installed INTERFACE_INCLUDE_DIRECTORIES. </policy/CMP0052>
-   CMP0051: List TARGET_OBJECTS in SOURCES target property. </policy/CMP0051>
-
-Policies Introduced by CMake 3.0
-================================
-
-.. toctree::
-   :maxdepth: 1
-
-   CMP0050: Disallow add_custom_command SOURCE signatures. </policy/CMP0050>
-   CMP0049: Do not expand variables in target source entries. </policy/CMP0049>
-   CMP0048: project() command manages VERSION variables. </policy/CMP0048>
-   CMP0047: Use QCC compiler id for the qcc drivers on QNX. </policy/CMP0047>
-   CMP0046: Error on non-existent dependency in add_dependencies. </policy/CMP0046>
-   CMP0045: Error on non-existent target in get_target_property. </policy/CMP0045>
-   CMP0044: Case sensitive Lang_COMPILER_ID generator expressions. </policy/CMP0044>
-   CMP0043: Ignore COMPILE_DEFINITIONS_Config properties. </policy/CMP0043>
-   CMP0042: MACOSX_RPATH is enabled by default. </policy/CMP0042>
-   CMP0041: Error on relative include with generator expression. </policy/CMP0041>
-   CMP0040: The target in the TARGET signature of add_custom_command() must exist. </policy/CMP0040>
-   CMP0039: Utility targets may not have link dependencies. </policy/CMP0039>
-   CMP0038: Targets may not link directly to themselves. </policy/CMP0038>
-   CMP0037: Target names should not be reserved and should match a validity pattern. </policy/CMP0037>
-   CMP0036: The build_name command should not be called. </policy/CMP0036>
-   CMP0035: The variable_requires command should not be called. </policy/CMP0035>
-   CMP0034: The utility_source command should not be called. </policy/CMP0034>
-   CMP0033: The export_library_dependencies command should not be called. </policy/CMP0033>
-   CMP0032: The output_required_files command should not be called. </policy/CMP0032>
-   CMP0031: The load_command command should not be called. </policy/CMP0031>
-   CMP0030: The use_mangled_mesa command should not be called. </policy/CMP0030>
-   CMP0029: The subdir_depends command should not be called. </policy/CMP0029>
-   CMP0028: Double colon in target name means ALIAS or IMPORTED target. </policy/CMP0028>
-   CMP0027: Conditionally linked imported targets with missing include directories. </policy/CMP0027>
-   CMP0026: Disallow use of the LOCATION target property. </policy/CMP0026>
-   CMP0025: Compiler id for Apple Clang is now AppleClang. </policy/CMP0025>
-   CMP0024: Disallow include export result. </policy/CMP0024>
-
-Policies Introduced by CMake 2.8
-================================
-
-.. toctree::
-   :maxdepth: 1
-
-   CMP0023: Plain and keyword target_link_libraries signatures cannot be mixed. </policy/CMP0023>
-   CMP0022: INTERFACE_LINK_LIBRARIES defines the link interface. </policy/CMP0022>
-   CMP0021: Fatal error on relative paths in INCLUDE_DIRECTORIES target property. </policy/CMP0021>
-   CMP0020: Automatically link Qt executables to qtmain target on Windows. </policy/CMP0020>
-   CMP0019: Do not re-expand variables in include and link information. </policy/CMP0019>
-   CMP0018: Ignore CMAKE_SHARED_LIBRARY_Lang_FLAGS variable. </policy/CMP0018>
-   CMP0017: Prefer files from the CMake module directory when including from there. </policy/CMP0017>
-   CMP0016: target_link_libraries() reports error if its only argument is not a target. </policy/CMP0016>
-   CMP0015: link_directories() treats paths relative to the source dir. </policy/CMP0015>
-   CMP0014: Input directories must have CMakeLists.txt. </policy/CMP0014>
-   CMP0013: Duplicate binary directories are not allowed. </policy/CMP0013>
-   CMP0012: if() recognizes numbers and boolean constants. </policy/CMP0012>
-
-Policies Introduced by CMake 2.6
-================================
-
-.. toctree::
-   :maxdepth: 1
-
-   CMP0011: Included scripts do automatic cmake_policy PUSH and POP. </policy/CMP0011>
-   CMP0010: Bad variable reference syntax is an error. </policy/CMP0010>
-   CMP0009: FILE GLOB_RECURSE calls should not follow symlinks by default. </policy/CMP0009>
-   CMP0008: Libraries linked by full-path must have a valid library file name. </policy/CMP0008>
-   CMP0007: list command no longer ignores empty elements. </policy/CMP0007>
-   CMP0006: Installing MACOSX_BUNDLE targets requires a BUNDLE DESTINATION. </policy/CMP0006>
-   CMP0005: Preprocessor definition values are now escaped automatically. </policy/CMP0005>
-   CMP0004: Libraries linked may not have leading or trailing whitespace. </policy/CMP0004>
-   CMP0003: Libraries linked via full path no longer produce linker search paths. </policy/CMP0003>
-   CMP0002: Logical target names must be globally unique. </policy/CMP0002>
-   CMP0001: CMAKE_BACKWARDS_COMPATIBILITY should no longer be used. </policy/CMP0001>
-   CMP0000: A minimum required CMake version must be specified. </policy/CMP0000>
diff --git a/share/cmake-3.18/Help/manual/cmake-properties.7.rst b/share/cmake-3.18/Help/manual/cmake-properties.7.rst
deleted file mode 100644
index 30b2a05..0000000
--- a/share/cmake-3.18/Help/manual/cmake-properties.7.rst
+++ /dev/null
@@ -1,574 +0,0 @@
-.. cmake-manual-description: CMake Properties Reference
-
-cmake-properties(7)
-*******************
-
-.. only:: html
-
-   .. contents::
-
-.. _`Global Properties`:
-
-Properties of Global Scope
-==========================
-
-.. toctree::
-   :maxdepth: 1
-
-   /prop_gbl/ALLOW_DUPLICATE_CUSTOM_TARGETS
-   /prop_gbl/AUTOGEN_SOURCE_GROUP
-   /prop_gbl/AUTOGEN_TARGETS_FOLDER
-   /prop_gbl/AUTOMOC_SOURCE_GROUP
-   /prop_gbl/AUTOMOC_TARGETS_FOLDER
-   /prop_gbl/AUTORCC_SOURCE_GROUP
-   /prop_gbl/CMAKE_C_KNOWN_FEATURES
-   /prop_gbl/CMAKE_CUDA_KNOWN_FEATURES
-   /prop_gbl/CMAKE_CXX_KNOWN_FEATURES
-   /prop_gbl/CMAKE_ROLE
-   /prop_gbl/DEBUG_CONFIGURATIONS
-   /prop_gbl/DISABLED_FEATURES
-   /prop_gbl/ECLIPSE_EXTRA_CPROJECT_CONTENTS
-   /prop_gbl/ECLIPSE_EXTRA_NATURES
-   /prop_gbl/ENABLED_FEATURES
-   /prop_gbl/ENABLED_LANGUAGES
-   /prop_gbl/FIND_LIBRARY_USE_LIB32_PATHS
-   /prop_gbl/FIND_LIBRARY_USE_LIB64_PATHS
-   /prop_gbl/FIND_LIBRARY_USE_LIBX32_PATHS
-   /prop_gbl/FIND_LIBRARY_USE_OPENBSD_VERSIONING
-   /prop_gbl/GENERATOR_IS_MULTI_CONFIG
-   /prop_gbl/GLOBAL_DEPENDS_DEBUG_MODE
-   /prop_gbl/GLOBAL_DEPENDS_NO_CYCLES
-   /prop_gbl/IN_TRY_COMPILE
-   /prop_gbl/JOB_POOLS
-   /prop_gbl/PACKAGES_FOUND
-   /prop_gbl/PACKAGES_NOT_FOUND
-   /prop_gbl/PREDEFINED_TARGETS_FOLDER
-   /prop_gbl/REPORT_UNDEFINED_PROPERTIES
-   /prop_gbl/RULE_LAUNCH_COMPILE
-   /prop_gbl/RULE_LAUNCH_CUSTOM
-   /prop_gbl/RULE_LAUNCH_LINK
-   /prop_gbl/RULE_MESSAGES
-   /prop_gbl/TARGET_ARCHIVES_MAY_BE_SHARED_LIBS
-   /prop_gbl/TARGET_MESSAGES
-   /prop_gbl/TARGET_SUPPORTS_SHARED_LIBS
-   /prop_gbl/USE_FOLDERS
-   /prop_gbl/XCODE_EMIT_EFFECTIVE_PLATFORM_NAME
-
-.. _`Directory Properties`:
-
-Properties on Directories
-=========================
-
-.. toctree::
-   :maxdepth: 1
-
-   /prop_dir/ADDITIONAL_CLEAN_FILES
-   /prop_dir/BINARY_DIR
-   /prop_dir/BUILDSYSTEM_TARGETS
-   /prop_dir/CACHE_VARIABLES
-   /prop_dir/CLEAN_NO_CUSTOM
-   /prop_dir/CMAKE_CONFIGURE_DEPENDS
-   /prop_dir/COMPILE_DEFINITIONS
-   /prop_dir/COMPILE_OPTIONS
-   /prop_dir/DEFINITIONS
-   /prop_dir/EXCLUDE_FROM_ALL
-   /prop_dir/IMPLICIT_DEPENDS_INCLUDE_TRANSFORM
-   /prop_dir/INCLUDE_DIRECTORIES
-   /prop_dir/INCLUDE_REGULAR_EXPRESSION
-   /prop_dir/INTERPROCEDURAL_OPTIMIZATION_CONFIG
-   /prop_dir/INTERPROCEDURAL_OPTIMIZATION
-   /prop_dir/LABELS
-   /prop_dir/LINK_DIRECTORIES
-   /prop_dir/LINK_OPTIONS
-   /prop_dir/LISTFILE_STACK
-   /prop_dir/MACROS
-   /prop_dir/PARENT_DIRECTORY
-   /prop_dir/RULE_LAUNCH_COMPILE
-   /prop_dir/RULE_LAUNCH_CUSTOM
-   /prop_dir/RULE_LAUNCH_LINK
-   /prop_dir/SOURCE_DIR
-   /prop_dir/SUBDIRECTORIES
-   /prop_dir/TESTS
-   /prop_dir/TEST_INCLUDE_FILES
-   /prop_dir/VARIABLES
-   /prop_dir/VS_GLOBAL_SECTION_POST_section
-   /prop_dir/VS_GLOBAL_SECTION_PRE_section
-   /prop_dir/VS_STARTUP_PROJECT
-
-.. _`Target Properties`:
-
-Properties on Targets
-=====================
-
-.. toctree::
-   :maxdepth: 1
-
-   /prop_tgt/ADDITIONAL_CLEAN_FILES
-   /prop_tgt/AIX_EXPORT_ALL_SYMBOLS
-   /prop_tgt/ALIAS_GLOBAL
-   /prop_tgt/ALIASED_TARGET
-   /prop_tgt/ANDROID_ANT_ADDITIONAL_OPTIONS
-   /prop_tgt/ANDROID_API
-   /prop_tgt/ANDROID_API_MIN
-   /prop_tgt/ANDROID_ARCH
-   /prop_tgt/ANDROID_ASSETS_DIRECTORIES
-   /prop_tgt/ANDROID_GUI
-   /prop_tgt/ANDROID_JAR_DEPENDENCIES
-   /prop_tgt/ANDROID_JAR_DIRECTORIES
-   /prop_tgt/ANDROID_JAVA_SOURCE_DIR
-   /prop_tgt/ANDROID_NATIVE_LIB_DEPENDENCIES
-   /prop_tgt/ANDROID_NATIVE_LIB_DIRECTORIES
-   /prop_tgt/ANDROID_PROCESS_MAX
-   /prop_tgt/ANDROID_PROGUARD
-   /prop_tgt/ANDROID_PROGUARD_CONFIG_PATH
-   /prop_tgt/ANDROID_SECURE_PROPS_PATH
-   /prop_tgt/ANDROID_SKIP_ANT_STEP
-   /prop_tgt/ANDROID_STL_TYPE
-   /prop_tgt/ARCHIVE_OUTPUT_DIRECTORY_CONFIG
-   /prop_tgt/ARCHIVE_OUTPUT_DIRECTORY
-   /prop_tgt/ARCHIVE_OUTPUT_NAME_CONFIG
-   /prop_tgt/ARCHIVE_OUTPUT_NAME
-   /prop_tgt/AUTOGEN_BUILD_DIR
-   /prop_tgt/AUTOGEN_ORIGIN_DEPENDS
-   /prop_tgt/AUTOGEN_PARALLEL
-   /prop_tgt/AUTOGEN_TARGET_DEPENDS
-   /prop_tgt/AUTOMOC
-   /prop_tgt/AUTOMOC_COMPILER_PREDEFINES
-   /prop_tgt/AUTOMOC_DEPEND_FILTERS
-   /prop_tgt/AUTOMOC_EXECUTABLE
-   /prop_tgt/AUTOMOC_MACRO_NAMES
-   /prop_tgt/AUTOMOC_MOC_OPTIONS
-   /prop_tgt/AUTOMOC_PATH_PREFIX
-   /prop_tgt/AUTORCC
-   /prop_tgt/AUTORCC_EXECUTABLE
-   /prop_tgt/AUTORCC_OPTIONS
-   /prop_tgt/AUTOUIC
-   /prop_tgt/AUTOUIC_EXECUTABLE
-   /prop_tgt/AUTOUIC_OPTIONS
-   /prop_tgt/AUTOUIC_SEARCH_PATHS
-   /prop_tgt/BINARY_DIR
-   /prop_tgt/BUILD_RPATH
-   /prop_tgt/BUILD_RPATH_USE_ORIGIN
-   /prop_tgt/BUILD_WITH_INSTALL_NAME_DIR
-   /prop_tgt/BUILD_WITH_INSTALL_RPATH
-   /prop_tgt/BUNDLE_EXTENSION
-   /prop_tgt/BUNDLE
-   /prop_tgt/C_EXTENSIONS
-   /prop_tgt/C_STANDARD
-   /prop_tgt/C_STANDARD_REQUIRED
-   /prop_tgt/COMMON_LANGUAGE_RUNTIME
-   /prop_tgt/COMPATIBLE_INTERFACE_BOOL
-   /prop_tgt/COMPATIBLE_INTERFACE_NUMBER_MAX
-   /prop_tgt/COMPATIBLE_INTERFACE_NUMBER_MIN
-   /prop_tgt/COMPATIBLE_INTERFACE_STRING
-   /prop_tgt/COMPILE_DEFINITIONS
-   /prop_tgt/COMPILE_FEATURES
-   /prop_tgt/COMPILE_FLAGS
-   /prop_tgt/COMPILE_OPTIONS
-   /prop_tgt/COMPILE_PDB_NAME
-   /prop_tgt/COMPILE_PDB_NAME_CONFIG
-   /prop_tgt/COMPILE_PDB_OUTPUT_DIRECTORY
-   /prop_tgt/COMPILE_PDB_OUTPUT_DIRECTORY_CONFIG
-   /prop_tgt/CONFIG_OUTPUT_NAME
-   /prop_tgt/CONFIG_POSTFIX
-   /prop_tgt/CROSSCOMPILING_EMULATOR
-   /prop_tgt/CUDA_ARCHITECTURES
-   /prop_tgt/CUDA_PTX_COMPILATION
-   /prop_tgt/CUDA_SEPARABLE_COMPILATION
-   /prop_tgt/CUDA_RESOLVE_DEVICE_SYMBOLS
-   /prop_tgt/CUDA_RUNTIME_LIBRARY
-   /prop_tgt/CUDA_EXTENSIONS
-   /prop_tgt/CUDA_STANDARD
-   /prop_tgt/CUDA_STANDARD_REQUIRED
-   /prop_tgt/CXX_EXTENSIONS
-   /prop_tgt/CXX_STANDARD
-   /prop_tgt/CXX_STANDARD_REQUIRED
-   /prop_tgt/DEBUG_POSTFIX
-   /prop_tgt/DEFINE_SYMBOL
-   /prop_tgt/DEPLOYMENT_REMOTE_DIRECTORY
-   /prop_tgt/DEPLOYMENT_ADDITIONAL_FILES
-   /prop_tgt/DEPRECATION
-   /prop_tgt/DISABLE_PRECOMPILE_HEADERS
-   /prop_tgt/DOTNET_TARGET_FRAMEWORK
-   /prop_tgt/DOTNET_TARGET_FRAMEWORK_VERSION
-   /prop_tgt/EchoString
-   /prop_tgt/ENABLE_EXPORTS
-   /prop_tgt/EXCLUDE_FROM_ALL
-   /prop_tgt/EXCLUDE_FROM_DEFAULT_BUILD_CONFIG
-   /prop_tgt/EXCLUDE_FROM_DEFAULT_BUILD
-   /prop_tgt/EXPORT_NAME
-   /prop_tgt/EXPORT_PROPERTIES
-   /prop_tgt/FOLDER
-   /prop_tgt/Fortran_FORMAT
-   /prop_tgt/Fortran_MODULE_DIRECTORY
-   /prop_tgt/Fortran_PREPROCESS
-   /prop_tgt/FRAMEWORK
-   /prop_tgt/FRAMEWORK_MULTI_CONFIG_POSTFIX_CONFIG
-   /prop_tgt/FRAMEWORK_VERSION
-   /prop_tgt/GENERATOR_FILE_NAME
-   /prop_tgt/GHS_INTEGRITY_APP
-   /prop_tgt/GHS_NO_SOURCE_GROUP_FILE
-   /prop_tgt/GNUtoMS
-   /prop_tgt/HAS_CXX
-   /prop_tgt/IMPLICIT_DEPENDS_INCLUDE_TRANSFORM
-   /prop_tgt/IMPORTED_COMMON_LANGUAGE_RUNTIME
-   /prop_tgt/IMPORTED_CONFIGURATIONS
-   /prop_tgt/IMPORTED_GLOBAL
-   /prop_tgt/IMPORTED_IMPLIB_CONFIG
-   /prop_tgt/IMPORTED_IMPLIB
-   /prop_tgt/IMPORTED_LIBNAME_CONFIG
-   /prop_tgt/IMPORTED_LIBNAME
-   /prop_tgt/IMPORTED_LINK_DEPENDENT_LIBRARIES_CONFIG
-   /prop_tgt/IMPORTED_LINK_DEPENDENT_LIBRARIES
-   /prop_tgt/IMPORTED_LINK_INTERFACE_LANGUAGES_CONFIG
-   /prop_tgt/IMPORTED_LINK_INTERFACE_LANGUAGES
-   /prop_tgt/IMPORTED_LINK_INTERFACE_LIBRARIES_CONFIG
-   /prop_tgt/IMPORTED_LINK_INTERFACE_LIBRARIES
-   /prop_tgt/IMPORTED_LINK_INTERFACE_MULTIPLICITY_CONFIG
-   /prop_tgt/IMPORTED_LINK_INTERFACE_MULTIPLICITY
-   /prop_tgt/IMPORTED_LOCATION_CONFIG
-   /prop_tgt/IMPORTED_LOCATION
-   /prop_tgt/IMPORTED_NO_SONAME_CONFIG
-   /prop_tgt/IMPORTED_NO_SONAME
-   /prop_tgt/IMPORTED_OBJECTS_CONFIG
-   /prop_tgt/IMPORTED_OBJECTS
-   /prop_tgt/IMPORTED
-   /prop_tgt/IMPORTED_SONAME_CONFIG
-   /prop_tgt/IMPORTED_SONAME
-   /prop_tgt/IMPORT_PREFIX
-   /prop_tgt/IMPORT_SUFFIX
-   /prop_tgt/INCLUDE_DIRECTORIES
-   /prop_tgt/INSTALL_NAME_DIR
-   /prop_tgt/INSTALL_REMOVE_ENVIRONMENT_RPATH
-   /prop_tgt/INSTALL_RPATH
-   /prop_tgt/INSTALL_RPATH_USE_LINK_PATH
-   /prop_tgt/INTERFACE_AUTOUIC_OPTIONS
-   /prop_tgt/INTERFACE_COMPILE_DEFINITIONS
-   /prop_tgt/INTERFACE_COMPILE_FEATURES
-   /prop_tgt/INTERFACE_COMPILE_OPTIONS
-   /prop_tgt/INTERFACE_INCLUDE_DIRECTORIES
-   /prop_tgt/INTERFACE_LINK_DEPENDS
-   /prop_tgt/INTERFACE_LINK_DIRECTORIES
-   /prop_tgt/INTERFACE_LINK_LIBRARIES
-   /prop_tgt/INTERFACE_LINK_OPTIONS
-   /prop_tgt/INTERFACE_PRECOMPILE_HEADERS
-   /prop_tgt/INTERFACE_POSITION_INDEPENDENT_CODE
-   /prop_tgt/INTERFACE_SOURCES
-   /prop_tgt/INTERFACE_SYSTEM_INCLUDE_DIRECTORIES
-   /prop_tgt/INTERPROCEDURAL_OPTIMIZATION_CONFIG
-   /prop_tgt/INTERPROCEDURAL_OPTIMIZATION
-   /prop_tgt/IOS_INSTALL_COMBINED
-   /prop_tgt/JOB_POOL_COMPILE
-   /prop_tgt/JOB_POOL_LINK
-   /prop_tgt/JOB_POOL_PRECOMPILE_HEADER
-   /prop_tgt/LABELS
-   /prop_tgt/LANG_CLANG_TIDY
-   /prop_tgt/LANG_COMPILER_LAUNCHER
-   /prop_tgt/LANG_CPPCHECK
-   /prop_tgt/LANG_CPPLINT
-   /prop_tgt/LANG_INCLUDE_WHAT_YOU_USE
-   /prop_tgt/LANG_VISIBILITY_PRESET
-   /prop_tgt/LIBRARY_OUTPUT_DIRECTORY_CONFIG
-   /prop_tgt/LIBRARY_OUTPUT_DIRECTORY
-   /prop_tgt/LIBRARY_OUTPUT_NAME_CONFIG
-   /prop_tgt/LIBRARY_OUTPUT_NAME
-   /prop_tgt/LINK_DEPENDS_NO_SHARED
-   /prop_tgt/LINK_DEPENDS
-   /prop_tgt/LINKER_LANGUAGE
-   /prop_tgt/LINK_DIRECTORIES
-   /prop_tgt/LINK_FLAGS_CONFIG
-   /prop_tgt/LINK_FLAGS
-   /prop_tgt/LINK_INTERFACE_LIBRARIES_CONFIG
-   /prop_tgt/LINK_INTERFACE_LIBRARIES
-   /prop_tgt/LINK_INTERFACE_MULTIPLICITY_CONFIG
-   /prop_tgt/LINK_INTERFACE_MULTIPLICITY
-   /prop_tgt/LINK_LIBRARIES
-   /prop_tgt/LINK_OPTIONS
-   /prop_tgt/LINK_SEARCH_END_STATIC
-   /prop_tgt/LINK_SEARCH_START_STATIC
-   /prop_tgt/LINK_WHAT_YOU_USE
-   /prop_tgt/LOCATION_CONFIG
-   /prop_tgt/LOCATION
-   /prop_tgt/MACHO_COMPATIBILITY_VERSION
-   /prop_tgt/MACHO_CURRENT_VERSION
-   /prop_tgt/MACOSX_BUNDLE_INFO_PLIST
-   /prop_tgt/MACOSX_BUNDLE
-   /prop_tgt/MACOSX_FRAMEWORK_INFO_PLIST
-   /prop_tgt/MACOSX_RPATH
-   /prop_tgt/MANUALLY_ADDED_DEPENDENCIES
-   /prop_tgt/MAP_IMPORTED_CONFIG_CONFIG
-   /prop_tgt/MSVC_RUNTIME_LIBRARY
-   /prop_tgt/NAME
-   /prop_tgt/NO_SONAME
-   /prop_tgt/NO_SYSTEM_FROM_IMPORTED
-   /prop_tgt/OBJC_EXTENSIONS
-   /prop_tgt/OBJC_STANDARD
-   /prop_tgt/OBJC_STANDARD_REQUIRED
-   /prop_tgt/OBJCXX_EXTENSIONS
-   /prop_tgt/OBJCXX_STANDARD
-   /prop_tgt/OBJCXX_STANDARD_REQUIRED
-   /prop_tgt/OSX_ARCHITECTURES_CONFIG
-   /prop_tgt/OSX_ARCHITECTURES
-   /prop_tgt/OUTPUT_NAME_CONFIG
-   /prop_tgt/OUTPUT_NAME
-   /prop_tgt/PCH_WARN_INVALID
-   /prop_tgt/PDB_NAME_CONFIG
-   /prop_tgt/PDB_NAME
-   /prop_tgt/PDB_OUTPUT_DIRECTORY_CONFIG
-   /prop_tgt/PDB_OUTPUT_DIRECTORY
-   /prop_tgt/POSITION_INDEPENDENT_CODE
-   /prop_tgt/PRECOMPILE_HEADERS
-   /prop_tgt/PRECOMPILE_HEADERS_REUSE_FROM
-   /prop_tgt/PREFIX
-   /prop_tgt/PRIVATE_HEADER
-   /prop_tgt/PROJECT_LABEL
-   /prop_tgt/PUBLIC_HEADER
-   /prop_tgt/RESOURCE
-   /prop_tgt/RULE_LAUNCH_COMPILE
-   /prop_tgt/RULE_LAUNCH_CUSTOM
-   /prop_tgt/RULE_LAUNCH_LINK
-   /prop_tgt/RUNTIME_OUTPUT_DIRECTORY_CONFIG
-   /prop_tgt/RUNTIME_OUTPUT_DIRECTORY
-   /prop_tgt/RUNTIME_OUTPUT_NAME_CONFIG
-   /prop_tgt/RUNTIME_OUTPUT_NAME
-   /prop_tgt/SKIP_BUILD_RPATH
-   /prop_tgt/SOURCE_DIR
-   /prop_tgt/SOURCES
-   /prop_tgt/SOVERSION
-   /prop_tgt/STATIC_LIBRARY_FLAGS_CONFIG
-   /prop_tgt/STATIC_LIBRARY_FLAGS
-   /prop_tgt/STATIC_LIBRARY_OPTIONS
-   /prop_tgt/SUFFIX
-   /prop_tgt/Swift_DEPENDENCIES_FILE
-   /prop_tgt/Swift_LANGUAGE_VERSION
-   /prop_tgt/Swift_MODULE_DIRECTORY
-   /prop_tgt/Swift_MODULE_NAME
-   /prop_tgt/TYPE
-   /prop_tgt/UNITY_BUILD
-   /prop_tgt/UNITY_BUILD_BATCH_SIZE
-   /prop_tgt/UNITY_BUILD_CODE_AFTER_INCLUDE
-   /prop_tgt/UNITY_BUILD_CODE_BEFORE_INCLUDE
-   /prop_tgt/UNITY_BUILD_MODE
-   /prop_tgt/VERSION
-   /prop_tgt/VISIBILITY_INLINES_HIDDEN
-   /prop_tgt/VS_CONFIGURATION_TYPE
-   /prop_tgt/VS_DEBUGGER_COMMAND
-   /prop_tgt/VS_DEBUGGER_COMMAND_ARGUMENTS
-   /prop_tgt/VS_DEBUGGER_ENVIRONMENT
-   /prop_tgt/VS_DEBUGGER_WORKING_DIRECTORY
-   /prop_tgt/VS_DESKTOP_EXTENSIONS_VERSION
-   /prop_tgt/VS_DOTNET_REFERENCE_refname
-   /prop_tgt/VS_DOTNET_REFERENCEPROP_refname_TAG_tagname
-   /prop_tgt/VS_DOTNET_REFERENCES
-   /prop_tgt/VS_DOTNET_REFERENCES_COPY_LOCAL
-   /prop_tgt/VS_DOTNET_TARGET_FRAMEWORK_VERSION
-   /prop_tgt/VS_DOTNET_DOCUMENTATION_FILE
-   /prop_tgt/VS_DPI_AWARE
-   /prop_tgt/VS_GLOBAL_KEYWORD
-   /prop_tgt/VS_GLOBAL_PROJECT_TYPES
-   /prop_tgt/VS_GLOBAL_ROOTNAMESPACE
-   /prop_tgt/VS_GLOBAL_variable
-   /prop_tgt/VS_IOT_EXTENSIONS_VERSION
-   /prop_tgt/VS_IOT_STARTUP_TASK
-   /prop_tgt/VS_JUST_MY_CODE_DEBUGGING
-   /prop_tgt/VS_KEYWORD
-   /prop_tgt/VS_MOBILE_EXTENSIONS_VERSION
-   /prop_tgt/VS_NO_SOLUTION_DEPLOY
-   /prop_tgt/VS_PACKAGE_REFERENCES
-   /prop_tgt/VS_PLATFORM_TOOLSET
-   /prop_tgt/VS_PROJECT_IMPORT
-   /prop_tgt/VS_SCC_AUXPATH
-   /prop_tgt/VS_SCC_LOCALPATH
-   /prop_tgt/VS_SCC_PROJECTNAME
-   /prop_tgt/VS_SCC_PROVIDER
-   /prop_tgt/VS_SDK_REFERENCES
-   /prop_tgt/VS_SOLUTION_DEPLOY
-   /prop_tgt/VS_SOURCE_SETTINGS_tool
-   /prop_tgt/VS_USER_PROPS
-   /prop_tgt/VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION
-   /prop_tgt/VS_WINRT_COMPONENT
-   /prop_tgt/VS_WINRT_EXTENSIONS
-   /prop_tgt/VS_WINRT_REFERENCES
-   /prop_tgt/WIN32_EXECUTABLE
-   /prop_tgt/WINDOWS_EXPORT_ALL_SYMBOLS
-   /prop_tgt/XCODE_ATTRIBUTE_an-attribute
-   /prop_tgt/XCODE_EXPLICIT_FILE_TYPE
-   /prop_tgt/XCODE_GENERATE_SCHEME
-   /prop_tgt/XCODE_PRODUCT_TYPE
-   /prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER
-   /prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN
-   /prop_tgt/XCODE_SCHEME_ARGUMENTS
-   /prop_tgt/XCODE_SCHEME_DEBUG_AS_ROOT
-   /prop_tgt/XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING
-   /prop_tgt/XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER
-   /prop_tgt/XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS
-   /prop_tgt/XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE
-   /prop_tgt/XCODE_SCHEME_ENVIRONMENT
-   /prop_tgt/XCODE_SCHEME_EXECUTABLE
-   /prop_tgt/XCODE_SCHEME_GUARD_MALLOC
-   /prop_tgt/XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP
-   /prop_tgt/XCODE_SCHEME_MALLOC_GUARD_EDGES
-   /prop_tgt/XCODE_SCHEME_MALLOC_SCRIBBLE
-   /prop_tgt/XCODE_SCHEME_MALLOC_STACK
-   /prop_tgt/XCODE_SCHEME_THREAD_SANITIZER
-   /prop_tgt/XCODE_SCHEME_THREAD_SANITIZER_STOP
-   /prop_tgt/XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER
-   /prop_tgt/XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP
-   /prop_tgt/XCODE_SCHEME_WORKING_DIRECTORY
-   /prop_tgt/XCODE_SCHEME_ZOMBIE_OBJECTS
-   /prop_tgt/XCTEST
-
-.. _`Test Properties`:
-
-Properties on Tests
-===================
-
-.. toctree::
-   :maxdepth: 1
-
-   /prop_test/ATTACHED_FILES_ON_FAIL
-   /prop_test/ATTACHED_FILES
-   /prop_test/COST
-   /prop_test/DEPENDS
-   /prop_test/DISABLED
-   /prop_test/ENVIRONMENT
-   /prop_test/FAIL_REGULAR_EXPRESSION
-   /prop_test/FIXTURES_CLEANUP
-   /prop_test/FIXTURES_REQUIRED
-   /prop_test/FIXTURES_SETUP
-   /prop_test/LABELS
-   /prop_test/MEASUREMENT
-   /prop_test/PASS_REGULAR_EXPRESSION
-   /prop_test/PROCESSOR_AFFINITY
-   /prop_test/PROCESSORS
-   /prop_test/REQUIRED_FILES
-   /prop_test/RESOURCE_GROUPS
-   /prop_test/RESOURCE_LOCK
-   /prop_test/RUN_SERIAL
-   /prop_test/SKIP_REGULAR_EXPRESSION
-   /prop_test/SKIP_RETURN_CODE
-   /prop_test/TIMEOUT
-   /prop_test/TIMEOUT_AFTER_MATCH
-   /prop_test/WILL_FAIL
-   /prop_test/WORKING_DIRECTORY
-
-.. _`Source File Properties`:
-
-Properties on Source Files
-==========================
-
-.. toctree::
-   :maxdepth: 1
-
-   /prop_sf/ABSTRACT
-   /prop_sf/AUTORCC_OPTIONS
-   /prop_sf/AUTOUIC_OPTIONS
-   /prop_sf/COMPILE_DEFINITIONS
-   /prop_sf/COMPILE_FLAGS
-   /prop_sf/COMPILE_OPTIONS
-   /prop_sf/EXTERNAL_OBJECT
-   /prop_sf/Fortran_FORMAT
-   /prop_sf/Fortran_PREPROCESS
-   /prop_sf/GENERATED
-   /prop_sf/HEADER_FILE_ONLY
-   /prop_sf/INCLUDE_DIRECTORIES
-   /prop_sf/KEEP_EXTENSION
-   /prop_sf/LABELS
-   /prop_sf/LANGUAGE
-   /prop_sf/LOCATION
-   /prop_sf/MACOSX_PACKAGE_LOCATION
-   /prop_sf/OBJECT_DEPENDS
-   /prop_sf/OBJECT_OUTPUTS
-   /prop_sf/SKIP_AUTOGEN
-   /prop_sf/SKIP_AUTOMOC
-   /prop_sf/SKIP_AUTORCC
-   /prop_sf/SKIP_AUTOUIC
-   /prop_sf/SKIP_PRECOMPILE_HEADERS
-   /prop_sf/SKIP_UNITY_BUILD_INCLUSION
-   /prop_sf/Swift_DEPENDENCIES_FILE
-   /prop_sf/Swift_DIAGNOSTICS_FILE
-   /prop_sf/SYMBOLIC
-   /prop_sf/UNITY_GROUP
-   /prop_sf/VS_COPY_TO_OUT_DIR
-   /prop_sf/VS_CSHARP_tagname
-   /prop_sf/VS_DEPLOYMENT_CONTENT
-   /prop_sf/VS_DEPLOYMENT_LOCATION
-   /prop_sf/VS_INCLUDE_IN_VSIX
-   /prop_sf/VS_RESOURCE_GENERATOR
-   /prop_sf/VS_SETTINGS
-   /prop_sf/VS_SHADER_DISABLE_OPTIMIZATIONS
-   /prop_sf/VS_SHADER_ENABLE_DEBUG
-   /prop_sf/VS_SHADER_ENTRYPOINT
-   /prop_sf/VS_SHADER_FLAGS
-   /prop_sf/VS_SHADER_MODEL
-   /prop_sf/VS_SHADER_OBJECT_FILE_NAME
-   /prop_sf/VS_SHADER_OUTPUT_HEADER_FILE
-   /prop_sf/VS_SHADER_TYPE
-   /prop_sf/VS_SHADER_VARIABLE_NAME
-   /prop_sf/VS_TOOL_OVERRIDE.rst
-   /prop_sf/VS_XAML_TYPE
-   /prop_sf/WRAP_EXCLUDE
-   /prop_sf/XCODE_EXPLICIT_FILE_TYPE
-   /prop_sf/XCODE_FILE_ATTRIBUTES
-   /prop_sf/XCODE_LAST_KNOWN_FILE_TYPE
-
-.. _`Cache Entry Properties`:
-
-Properties on Cache Entries
-===========================
-
-.. toctree::
-   :maxdepth: 1
-
-   /prop_cache/ADVANCED
-   /prop_cache/HELPSTRING
-   /prop_cache/MODIFIED
-   /prop_cache/STRINGS
-   /prop_cache/TYPE
-   /prop_cache/VALUE
-
-.. _`Installed File Properties`:
-
-Properties on Installed Files
-=============================
-
-.. toctree::
-   :maxdepth: 1
-
-   /prop_inst/CPACK_DESKTOP_SHORTCUTS.rst
-   /prop_inst/CPACK_NEVER_OVERWRITE.rst
-   /prop_inst/CPACK_PERMANENT.rst
-   /prop_inst/CPACK_START_MENU_SHORTCUTS.rst
-   /prop_inst/CPACK_STARTUP_SHORTCUTS.rst
-   /prop_inst/CPACK_WIX_ACL.rst
-
-
-Deprecated Properties on Directories
-====================================
-
-.. toctree::
-   :maxdepth: 1
-
-   /prop_dir/ADDITIONAL_MAKE_CLEAN_FILES
-   /prop_dir/COMPILE_DEFINITIONS_CONFIG
-   /prop_dir/TEST_INCLUDE_FILE
-
-
-Deprecated Properties on Targets
-================================
-
-.. toctree::
-   :maxdepth: 1
-
-   /prop_tgt/COMPILE_DEFINITIONS_CONFIG
-   /prop_tgt/POST_INSTALL_SCRIPT
-   /prop_tgt/PRE_INSTALL_SCRIPT
-
-
-Deprecated Properties on Source Files
-=====================================
-
-.. toctree::
-   :maxdepth: 1
-
-   /prop_sf/COMPILE_DEFINITIONS_CONFIG
diff --git a/share/cmake-3.18/Help/manual/cmake-qt.7.rst b/share/cmake-3.18/Help/manual/cmake-qt.7.rst
deleted file mode 100644
index d8d6172..0000000
--- a/share/cmake-3.18/Help/manual/cmake-qt.7.rst
+++ /dev/null
@@ -1,259 +0,0 @@
-.. cmake-manual-description: CMake Qt Features Reference
-
-cmake-qt(7)
-***********
-
-.. only:: html
-
-   .. contents::
-
-Introduction
-============
-
-CMake can find and use Qt 4 and Qt 5 libraries.  The Qt 4 libraries are found
-by the :module:`FindQt4` find-module shipped with CMake, whereas the
-Qt 5 libraries are found using "Config-file Packages" shipped with Qt 5. See
-:manual:`cmake-packages(7)` for more information about CMake packages, and
-see `the Qt cmake manual <http://qt-project.org/doc/qt-5/cmake-manual.html>`_
-for your Qt version.
-
-Qt 4 and Qt 5 may be used together in the same
-:manual:`CMake buildsystem <cmake-buildsystem(7)>`:
-
-.. code-block:: cmake
-
-  cmake_minimum_required(VERSION 3.8.0 FATAL_ERROR)
-
-  project(Qt4And5)
-
-  set(CMAKE_AUTOMOC ON)
-
-  find_package(Qt5 COMPONENTS Widgets DBus REQUIRED)
-  add_executable(publisher publisher.cpp)
-  target_link_libraries(publisher Qt5::Widgets Qt5::DBus)
-
-  find_package(Qt4 REQUIRED)
-  add_executable(subscriber subscriber.cpp)
-  target_link_libraries(subscriber Qt4::QtGui Qt4::QtDBus)
-
-A CMake target may not link to both Qt 4 and Qt 5.  A diagnostic is issued if
-this is attempted or results from transitive target dependency evaluation.
-
-Qt Build Tools
-==============
-
-Qt relies on some bundled tools for code generation, such as ``moc`` for
-meta-object code generation, ``uic`` for widget layout and population,
-and ``rcc`` for virtual file system content generation.  These tools may be
-automatically invoked by :manual:`cmake(1)` if the appropriate conditions
-are met.  The automatic tool invocation may be used with both Qt 4 and Qt 5.
-
-AUTOMOC
-^^^^^^^
-
-The :prop_tgt:`AUTOMOC` target property controls whether :manual:`cmake(1)`
-inspects the C++ files in the target to determine if they require ``moc`` to
-be run, and to create rules to execute ``moc`` at the appropriate time.
-
-If a macro from :prop_tgt:`AUTOMOC_MACRO_NAMES` is found in a header file,
-``moc`` will be run on the file.  The result will be put into a file named
-according to ``moc_<basename>.cpp``.
-If the macro is found in a C++ implementation
-file, the moc output will be put into a file named according to
-``<basename>.moc``, following the Qt conventions.  The ``<basename>.moc`` must
-be included by the user in the C++ implementation file with a preprocessor
-``#include``.
-
-Included ``moc_*.cpp`` and ``*.moc`` files will be generated in the
-``<AUTOGEN_BUILD_DIR>/include`` directory which is
-automatically added to the target's :prop_tgt:`INCLUDE_DIRECTORIES`.
-
-* This differs from CMake 3.7 and below; see their documentation for details.
-
-* For :prop_gbl:`multi configuration generators <GENERATOR_IS_MULTI_CONFIG>`,
-  the include directory is ``<AUTOGEN_BUILD_DIR>/include_<CONFIG>``.
-
-* See :prop_tgt:`AUTOGEN_BUILD_DIR`.
-
-Not included ``moc_<basename>.cpp`` files will be generated in custom
-folders to avoid name collisions and included in a separate
-``<AUTOGEN_BUILD_DIR>/mocs_compilation.cpp`` file which is compiled
-into the target.
-
-* See :prop_tgt:`AUTOGEN_BUILD_DIR`.
-
-The ``moc`` command line will consume the :prop_tgt:`COMPILE_DEFINITIONS` and
-:prop_tgt:`INCLUDE_DIRECTORIES` target properties from the target it is being
-invoked for, and for the appropriate build configuration.
-
-The :prop_tgt:`AUTOMOC` target property may be pre-set for all
-following targets by setting the :variable:`CMAKE_AUTOMOC` variable.  The
-:prop_tgt:`AUTOMOC_MOC_OPTIONS` target property may be populated to set
-options to pass to ``moc``. The :variable:`CMAKE_AUTOMOC_MOC_OPTIONS`
-variable may be populated to pre-set the options for all following targets.
-
-Additional macro names to search for can be added to
-:prop_tgt:`AUTOMOC_MACRO_NAMES`.
-
-Additional ``moc`` dependency file names can be extracted from source code
-by using :prop_tgt:`AUTOMOC_DEPEND_FILTERS`.
-
-Source C++ files can be excluded from :prop_tgt:`AUTOMOC` processing by
-enabling :prop_sf:`SKIP_AUTOMOC` or the broader :prop_sf:`SKIP_AUTOGEN`.
-
-.. _`Qt AUTOUIC`:
-
-AUTOUIC
-^^^^^^^
-
-The :prop_tgt:`AUTOUIC` target property controls whether :manual:`cmake(1)`
-inspects the C++ files in the target to determine if they require ``uic`` to
-be run, and to create rules to execute ``uic`` at the appropriate time.
-
-If a preprocessor ``#include`` directive is found which matches
-``<path>ui_<basename>.h``, and a ``<basename>.ui`` file exists,
-then ``uic`` will be executed to generate the appropriate file.
-The ``<basename>.ui`` file is searched for in the following places
-
-1. ``<source_dir>/<basename>.ui``
-2. ``<source_dir>/<path><basename>.ui``
-3. ``<AUTOUIC_SEARCH_PATHS>/<basename>.ui``
-4. ``<AUTOUIC_SEARCH_PATHS>/<path><basename>.ui``
-
-where ``<source_dir>`` is the directory of the C++ file and
-:prop_tgt:`AUTOUIC_SEARCH_PATHS` is a list of additional search paths.
-
-The generated generated ``ui_*.h`` files are placed in the
-``<AUTOGEN_BUILD_DIR>/include`` directory which is
-automatically added to the target's :prop_tgt:`INCLUDE_DIRECTORIES`.
-
-* This differs from CMake 3.7 and below; see their documentation for details.
-
-* For :prop_gbl:`multi configuration generators <GENERATOR_IS_MULTI_CONFIG>`,
-  the include directory is ``<AUTOGEN_BUILD_DIR>/include_<CONFIG>``.
-
-* See :prop_tgt:`AUTOGEN_BUILD_DIR`.
-
-The :prop_tgt:`AUTOUIC` target property may be pre-set for all following
-targets by setting the :variable:`CMAKE_AUTOUIC` variable.  The
-:prop_tgt:`AUTOUIC_OPTIONS` target property may be populated to set options
-to pass to ``uic``.  The :variable:`CMAKE_AUTOUIC_OPTIONS` variable may be
-populated to pre-set the options for all following targets.  The
-:prop_sf:`AUTOUIC_OPTIONS` source file property may be set on the
-``<basename>.ui`` file to set particular options for the file.  This
-overrides options from the :prop_tgt:`AUTOUIC_OPTIONS` target property.
-
-A target may populate the :prop_tgt:`INTERFACE_AUTOUIC_OPTIONS` target
-property with options that should be used when invoking ``uic``.  This must be
-consistent with the :prop_tgt:`AUTOUIC_OPTIONS` target property content of the
-depender target.  The :variable:`CMAKE_DEBUG_TARGET_PROPERTIES` variable may
-be used to track the origin target of such
-:prop_tgt:`INTERFACE_AUTOUIC_OPTIONS`.  This means that a library which
-provides an alternative translation system for Qt may specify options which
-should be used when running ``uic``:
-
-.. code-block:: cmake
-
-  add_library(KI18n klocalizedstring.cpp)
-  target_link_libraries(KI18n Qt5::Core)
-
-  # KI18n uses the tr2i18n() function instead of tr().  That function is
-  # declared in the klocalizedstring.h header.
-  set(autouic_options
-    -tr tr2i18n
-    -include klocalizedstring.h
-  )
-
-  set_property(TARGET KI18n APPEND PROPERTY
-    INTERFACE_AUTOUIC_OPTIONS ${autouic_options}
-  )
-
-A consuming project linking to the target exported from upstream automatically
-uses appropriate options when ``uic`` is run by :prop_tgt:`AUTOUIC`, as a
-result of linking with the :prop_tgt:`IMPORTED` target:
-
-.. code-block:: cmake
-
-  set(CMAKE_AUTOUIC ON)
-  # Uses a libwidget.ui file:
-  add_library(LibWidget libwidget.cpp)
-  target_link_libraries(LibWidget
-    KF5::KI18n
-    Qt5::Widgets
-  )
-
-Source files can be excluded from :prop_tgt:`AUTOUIC` processing by
-enabling :prop_sf:`SKIP_AUTOUIC` or the broader :prop_sf:`SKIP_AUTOGEN`.
-
-.. _`Qt AUTORCC`:
-
-AUTORCC
-^^^^^^^
-
-The :prop_tgt:`AUTORCC` target property controls whether :manual:`cmake(1)`
-creates rules to execute ``rcc`` at the appropriate time on source files
-which have the suffix ``.qrc``.
-
-.. code-block:: cmake
-
-  add_executable(myexe main.cpp resource_file.qrc)
-
-The :prop_tgt:`AUTORCC` target property may be pre-set for all following targets
-by setting the :variable:`CMAKE_AUTORCC` variable.  The
-:prop_tgt:`AUTORCC_OPTIONS` target property may be populated to set options
-to pass to ``rcc``.  The :variable:`CMAKE_AUTORCC_OPTIONS` variable may be
-populated to pre-set the options for all following targets.  The
-:prop_sf:`AUTORCC_OPTIONS` source file property may be set on the
-``<name>.qrc`` file to set particular options for the file.  This
-overrides options from the :prop_tgt:`AUTORCC_OPTIONS` target property.
-
-Source files can be excluded from :prop_tgt:`AUTORCC` processing by
-enabling :prop_sf:`SKIP_AUTORCC` or the broader :prop_sf:`SKIP_AUTOGEN`.
-
-The ``<ORIGIN>_autogen`` target
-===============================
-
-The ``moc`` and ``uic`` tools are executed as part of a synthesized
-``<ORIGIN>_autogen`` :command:`custom target <add_custom_target>` generated by
-CMake.  By default that ``<ORIGIN>_autogen`` target inherits the dependencies
-of the ``<ORIGIN>`` target (see :prop_tgt:`AUTOGEN_ORIGIN_DEPENDS`).
-Target dependencies may be added to the ``<ORIGIN>_autogen`` target by adding
-them to the :prop_tgt:`AUTOGEN_TARGET_DEPENDS` target property.
-
-Visual Studio Generators
-========================
-
-When using the :manual:`Visual Studio generators <cmake-generators(7)>`, CMake
-generates a ``PRE_BUILD`` :command:`custom command <add_custom_command>`
-instead of the ``<ORIGIN>_autogen`` :command:`custom target <add_custom_target>`
-(for :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`).
-This isn't always possible though and
-an ``<ORIGIN>_autogen`` :command:`custom target <add_custom_target>` is used,
-when either
-
-- the ``<ORIGIN>`` target depends on :prop_sf:`GENERATED` files which aren't
-  excluded from :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC` by
-  :prop_sf:`SKIP_AUTOMOC`, :prop_sf:`SKIP_AUTOUIC`, :prop_sf:`SKIP_AUTOGEN`
-  or :policy:`CMP0071`
-- :prop_tgt:`AUTOGEN_TARGET_DEPENDS` lists a source file
-- :variable:`CMAKE_GLOBAL_AUTOGEN_TARGET` is enabled
-
-qtmain.lib on Windows
-=====================
-
-The Qt 4 and 5 :prop_tgt:`IMPORTED` targets for the QtGui libraries specify
-that the qtmain.lib static library shipped with Qt will be linked by all
-dependent executables which have the :prop_tgt:`WIN32_EXECUTABLE` enabled.
-
-To disable this behavior, enable the ``Qt5_NO_LINK_QTMAIN`` target property for
-Qt 5 based targets or ``QT4_NO_LINK_QTMAIN`` target property for Qt 4 based
-targets.
-
-.. code-block:: cmake
-
-  add_executable(myexe WIN32 main.cpp)
-  target_link_libraries(myexe Qt4::QtGui)
-
-  add_executable(myexe_no_qtmain WIN32 main_no_qtmain.cpp)
-  set_property(TARGET main_no_qtmain PROPERTY QT4_NO_LINK_QTMAIN ON)
-  target_link_libraries(main_no_qtmain Qt4::QtGui)
diff --git a/share/cmake-3.18/Help/manual/cmake-server.7.rst b/share/cmake-3.18/Help/manual/cmake-server.7.rst
deleted file mode 100644
index 8f10b9f..0000000
--- a/share/cmake-3.18/Help/manual/cmake-server.7.rst
+++ /dev/null
@@ -1,744 +0,0 @@
-.. cmake-manual-description: CMake Server
-
-cmake-server(7)
-***************
-
-.. only:: html
-
-   .. contents::
-
-.. deprecated:: 3.15
-
-  This will be removed from a future version of CMake.
-  Clients should use the :manual:`cmake-file-api(7)` instead.
-
-Introduction
-============
-
-:manual:`cmake(1)` is capable of providing semantic information about
-CMake code it executes to generate a buildsystem.  If executed with
-the ``-E server`` command line options, it starts in a long running mode
-and allows a client to request the available information via a JSON protocol.
-
-The protocol is designed to be useful to IDEs, refactoring tools, and
-other tools which have a need to understand the buildsystem in entirety.
-
-A single :manual:`cmake-buildsystem(7)` may describe buildsystem contents
-and build properties which differ based on
-:manual:`generation-time context <cmake-generator-expressions(7)>`
-including:
-
-* The Platform (eg, Windows, APPLE, Linux).
-* The build configuration (eg, Debug, Release, Coverage).
-* The Compiler (eg, MSVC, GCC, Clang) and compiler version.
-* The language of the source files compiled.
-* Available compile features (eg CXX variadic templates).
-* CMake policies.
-
-The protocol aims to provide information to tooling to satisfy several
-needs:
-
-#. Provide a complete and easily parsed source of all information relevant
-   to the tooling as it relates to the source code.  There should be no need
-   for tooling to parse generated buildsystems to access include directories
-   or compile definitions for example.
-#. Semantic information about the CMake buildsystem itself.
-#. Provide a stable interface for reading the information in the CMake cache.
-#. Information for determining when cmake needs to be re-run as a result of
-   file changes.
-
-
-Operation
-=========
-
-Start :manual:`cmake(1)` in the server command mode, supplying the path to
-the build directory to process::
-
-  cmake -E server (--debug|--pipe=<NAMED_PIPE>)
-
-The server will communicate using stdin/stdout (with the ``--debug`` parameter)
-or using a named pipe (with the ``--pipe=<NAMED_PIPE>`` parameter).  Note
-that "named pipe" refers to a local domain socket on Unix and to a named pipe
-on Windows.
-
-When connecting to the server (via named pipe or by starting it in ``--debug``
-mode), the server will reply with a hello message::
-
-  [== "CMake Server" ==[
-  {"supportedProtocolVersions":[{"major":1,"minor":0}],"type":"hello"}
-  ]== "CMake Server" ==]
-
-Messages sent to and from the process are wrapped in magic strings::
-
-  [== "CMake Server" ==[
-  {
-    ... some JSON message ...
-  }
-  ]== "CMake Server" ==]
-
-The server is now ready to accept further requests via the named pipe
-or stdin.
-
-
-Debugging
-=========
-
-CMake server mode can be asked to provide statistics on execution times, etc.
-or to dump a copy of the response into a file. This is done passing a "debug"
-JSON object as a child of the request.
-
-The debug object supports the "showStats" key, which takes a boolean and makes
-the server mode return a "zzzDebug" object with stats as part of its response.
-"dumpToFile" takes a string value and will cause the cmake server to copy
-the response into the given filename.
-
-This is a response from the cmake server with "showStats" set to true::
-
-  [== "CMake Server" ==[
-  {
-    "cookie":"",
-    "errorMessage":"Waiting for type \"handshake\".",
-    "inReplyTo":"unknown",
-   "type":"error",
-    "zzzDebug": {
-      "dumpFile":"/tmp/error.txt",
-      "jsonSerialization":0.011016,
-      "size":111,
-      "totalTime":0.025995
-    }
-  }
-  ]== "CMake Server" ==]
-
-The server has made a copy of this response into the file /tmp/error.txt and
-took 0.011 seconds to turn the JSON response into a string, and it took 0.025
-seconds to process the request in total. The reply has a size of 111 bytes.
-
-
-Protocol API
-============
-
-
-General Message Layout
-----------------------
-
-All messages need to have a "type" value, which identifies the type of
-message that is passed back or forth. E.g. the initial message sent by the
-server is of type "hello". Messages without a type will generate an response
-of type "error".
-
-All requests sent to the server may contain a "cookie" value. This value
-will he handed back unchanged in all responses triggered by the request.
-
-All responses will contain a value "inReplyTo", which may be empty in
-case of parse errors, but will contain the type of the request message
-in all other cases.
-
-
-Type "reply"
-^^^^^^^^^^^^
-
-This type is used by the server to reply to requests.
-
-The message may -- depending on the type of the original request --
-contain values.
-
-Example::
-
-  [== "CMake Server" ==[
-  {"cookie":"zimtstern","inReplyTo":"handshake","type":"reply"}
-  ]== "CMake Server" ==]
-
-
-Type "error"
-^^^^^^^^^^^^
-
-This type is used to return an error condition to the client. It will
-contain an "errorMessage".
-
-Example::
-
-  [== "CMake Server" ==[
-  {"cookie":"","errorMessage":"Protocol version not supported.","inReplyTo":"handshake","type":"error"}
-  ]== "CMake Server" ==]
-
-
-Type "progress"
-^^^^^^^^^^^^^^^
-
-When the server is busy for a long time, it is polite to send back replies of
-type "progress" to the client. These will contain a "progressMessage" with a
-string describing the action currently taking place as well as
-"progressMinimum", "progressMaximum" and "progressCurrent" with integer values
-describing the range of progress.
-
-Messages of type "progress" will be followed by more "progress" messages or with
-a message of type "reply" or "error" that complete the request.
-
-"progress" messages may not be emitted after the "reply" or "error" message for
-the request that triggered the responses was delivered.
-
-
-Type "message"
-^^^^^^^^^^^^^^
-
-A message is triggered when the server processes a request and produces some
-form of output that should be displayed to the user. A Message has a "message"
-with the actual text to display as well as a "title" with a suggested dialog
-box title.
-
-Example::
-
-  [== "CMake Server" ==[
-  {"cookie":"","message":"Something happened.","title":"Title Text","inReplyTo":"handshake","type":"message"}
-  ]== "CMake Server" ==]
-
-
-Type "signal"
-^^^^^^^^^^^^^
-
-The server can send signals when it detects changes in the system state. Signals
-are of type "signal", have an empty "cookie" and "inReplyTo" field and always
-have a "name" set to show which signal was sent.
-
-
-Specific Signals
-----------------
-
-The cmake server may sent signals with the following names:
-
-"dirty" Signal
-^^^^^^^^^^^^^^
-
-The "dirty" signal is sent whenever the server determines that the configuration
-of the project is no longer up-to-date. This happens when any of the files that have
-an influence on the build system is changed.
-
-The "dirty" signal may look like this::
-
-  [== "CMake Server" ==[
-  {
-    "cookie":"",
-    "inReplyTo":"",
-    "name":"dirty",
-    "type":"signal"}
-  ]== "CMake Server" ==]
-
-
-"fileChange" Signal
-^^^^^^^^^^^^^^^^^^^
-
-The "fileChange" signal is sent whenever a watched file is changed. It contains
-the "path" that has changed and a list of "properties" with the kind of change
-that was detected. Possible changes are "change" and "rename".
-
-The "fileChange" signal looks like this::
-
-  [== "CMake Server" ==[
-  {
-    "cookie":"",
-    "inReplyTo":"",
-    "name":"fileChange",
-    "path":"/absolute/CMakeLists.txt",
-    "properties":["change"],
-    "type":"signal"}
-  ]== "CMake Server" ==]
-
-
-Specific Message Types
-----------------------
-
-
-Type "hello"
-^^^^^^^^^^^^
-
-The initial message send by the cmake server on startup is of type "hello".
-This is the only message ever sent by the server that is not of type "reply",
-"progress" or "error".
-
-It will contain "supportedProtocolVersions" with an array of server protocol
-versions supported by the cmake server. These are JSON objects with "major" and
-"minor" keys containing non-negative integer values. Some versions may be marked
-as experimental. These will contain the "isExperimental" key set to true. Enabling
-these requires a special command line argument when starting the cmake server mode.
-
-Within a "major" version all "minor" versions are fully backwards compatible.
-New "minor" versions may introduce functionality in such a way that existing
-clients of the same "major" version will continue to work, provided they
-ignore keys in the output that they do not know about.
-
-Example::
-
-  [== "CMake Server" ==[
-  {"supportedProtocolVersions":[{"major":0,"minor":1}],"type":"hello"}
-  ]== "CMake Server" ==]
-
-
-Type "handshake"
-^^^^^^^^^^^^^^^^
-
-The first request that the client may send to the server is of type "handshake".
-
-This request needs to pass one of the "supportedProtocolVersions" of the "hello"
-type response received earlier back to the server in the "protocolVersion" field.
-Giving the "major" version of the requested protocol version will make the server
-use the latest minor version of that protocol. Use this if you do not explicitly
-need to depend on a specific minor version.
-
-Protocol version 1.0 requires the following attributes to be set:
-
-  * "sourceDirectory" with a path to the sources
-  * "buildDirectory" with a path to the build directory
-  * "generator" with the generator name
-  * "extraGenerator" (optional!) with the extra generator to be used
-  * "platform" with the generator platform (if supported by the generator)
-  * "toolset" with the generator toolset (if supported by the generator)
-
-Protocol version 1.2 makes all but the build directory optional, provided
-there is a valid cache in the build directory that contains all the other
-information already.
-
-Example::
-
-  [== "CMake Server" ==[
-  {"cookie":"zimtstern","type":"handshake","protocolVersion":{"major":0},
-   "sourceDirectory":"/home/code/cmake", "buildDirectory":"/tmp/testbuild",
-   "generator":"Ninja"}
-  ]== "CMake Server" ==]
-
-which will result in a response type "reply"::
-
-  [== "CMake Server" ==[
-  {"cookie":"zimtstern","inReplyTo":"handshake","type":"reply"}
-  ]== "CMake Server" ==]
-
-indicating that the server is ready for action.
-
-
-Type "globalSettings"
-^^^^^^^^^^^^^^^^^^^^^
-
-This request can be sent after the initial handshake. It will return a
-JSON structure with information on cmake state.
-
-Example::
-
-  [== "CMake Server" ==[
-  {"type":"globalSettings"}
-  ]== "CMake Server" ==]
-
-which will result in a response type "reply"::
-
-  [== "CMake Server" ==[
-  {
-    "buildDirectory": "/tmp/test-build",
-    "capabilities": {
-      "generators": [
-        {
-          "extraGenerators": [],
-          "name": "Watcom WMake",
-          "platformSupport": false,
-          "toolsetSupport": false
-        },
-        <...>
-      ],
-      "serverMode": false,
-      "version": {
-        "isDirty": false,
-        "major": 3,
-        "minor": 6,
-        "patch": 20160830,
-        "string": "3.6.20160830-gd6abad",
-        "suffix": "gd6abad"
-      }
-    },
-    "checkSystemVars": false,
-    "cookie": "",
-    "extraGenerator": "",
-    "generator": "Ninja",
-    "debugOutput": false,
-    "inReplyTo": "globalSettings",
-    "sourceDirectory": "/home/code/cmake",
-    "trace": false,
-    "traceExpand": false,
-    "type": "reply",
-    "warnUninitialized": false,
-    "warnUnused": false,
-    "warnUnusedCli": true
-  }
-  ]== "CMake Server" ==]
-
-
-Type "setGlobalSettings"
-^^^^^^^^^^^^^^^^^^^^^^^^
-
-This request can be sent to change the global settings attributes. Unknown
-attributes are going to be ignored. Read-only attributes reported by
-"globalSettings" are all capabilities, buildDirectory, generator,
-extraGenerator and sourceDirectory. Any attempt to set these will be ignored,
-too.
-
-All other settings will be changed.
-
-The server will respond with an empty reply message or an error.
-
-Example::
-
-  [== "CMake Server" ==[
-  {"type":"setGlobalSettings","debugOutput":true}
-  ]== "CMake Server" ==]
-
-CMake will reply to this with::
-
-  [== "CMake Server" ==[
-  {"inReplyTo":"setGlobalSettings","type":"reply"}
-  ]== "CMake Server" ==]
-
-
-Type "configure"
-^^^^^^^^^^^^^^^^
-
-This request will configure a project for build.
-
-To configure a build directory already containing cmake files, it is enough to
-set "buildDirectory" via "setGlobalSettings". To create a fresh build directory
-you also need to set "currentGenerator" and "sourceDirectory" via "setGlobalSettings"
-in addition to "buildDirectory".
-
-You may a list of strings to "configure" via the "cacheArguments" key. These
-strings will be interpreted similar to command line arguments related to
-cache handling that are passed to the cmake command line client.
-
-Example::
-
-  [== "CMake Server" ==[
-  {"type":"configure", "cacheArguments":["-Dsomething=else"]}
-  ]== "CMake Server" ==]
-
-CMake will reply like this (after reporting progress for some time)::
-
-  [== "CMake Server" ==[
-  {"cookie":"","inReplyTo":"configure","type":"reply"}
-  ]== "CMake Server" ==]
-
-
-Type "compute"
-^^^^^^^^^^^^^^
-
-This request will generate build system files in the build directory and
-is only available after a project was successfully "configure"d.
-
-Example::
-
-  [== "CMake Server" ==[
-  {"type":"compute"}
-  ]== "CMake Server" ==]
-
-CMake will reply (after reporting progress information)::
-
-  [== "CMake Server" ==[
-  {"cookie":"","inReplyTo":"compute","type":"reply"}
-  ]== "CMake Server" ==]
-
-
-Type "codemodel"
-^^^^^^^^^^^^^^^^
-
-The "codemodel" request can be used after a project was "compute"d successfully.
-
-It will list the complete project structure as it is known to cmake.
-
-The reply will contain a key "configurations", which will contain a list of
-configuration objects. Configuration objects are used to destinquish between
-different configurations the build directory might have enabled. While most
-generators only support one configuration, others might support several.
-
-Each configuration object can have the following keys:
-
-"name"
-  contains the name of the configuration. The name may be empty.
-"projects"
-  contains a list of project objects, one for each build project.
-
-Project objects define one (sub-)project defined in the cmake build system.
-
-Each project object can have the following keys:
-
-"name"
-  contains the (sub-)projects name.
-"minimumCMakeVersion"
-  contains the minimum cmake version allowed for this project, null if the
-  project doesn't specify one.
-"hasInstallRule"
-  true if the project contains any install rules, false otherwise.
-"sourceDirectory"
-  contains the current source directory
-"buildDirectory"
-  contains the current build directory.
-"targets"
-  contains a list of build system target objects.
-
-Target objects define individual build targets for a certain configuration.
-
-Each target object can have the following keys:
-
-"name"
-  contains the name of the target.
-"type"
-  defines the type of build of the target. Possible values are
-  "STATIC_LIBRARY", "MODULE_LIBRARY", "SHARED_LIBRARY", "OBJECT_LIBRARY",
-  "EXECUTABLE", "UTILITY" and "INTERFACE_LIBRARY".
-"fullName"
-  contains the full name of the build result (incl. extensions, etc.).
-"sourceDirectory"
-  contains the current source directory.
-"buildDirectory"
-  contains the current build directory.
-"isGeneratorProvided"
-  true if the target is auto-created by a generator, false otherwise
-"hasInstallRule"
-  true if the target contains any install rules, false otherwise.
-"installPaths"
-  full path to the destination directories defined by target install rules.
-"artifacts"
-  with a list of build artifacts. The list is sorted with the most
-  important artifacts first (e.g. a .DLL file is listed before a
-  .PDB file on windows).
-"linkerLanguage"
-  contains the language of the linker used to produce the artifact.
-"linkLibraries"
-  with a list of libraries to link to. This value is encoded in the
-  system's native shell format.
-"linkFlags"
-  with a list of flags to pass to the linker. This value is encoded in
-  the system's native shell format.
-"linkLanguageFlags"
-  with the flags for a compiler using the linkerLanguage. This value is
-  encoded in the system's native shell format.
-"frameworkPath"
-  with the framework path (on Apple computers). This value is encoded
-  in the system's native shell format.
-"linkPath"
-  with the link path. This value is encoded in the system's native shell
-  format.
-"sysroot"
-  with the sysroot path.
-"fileGroups"
-  contains the source files making up the target.
-
-FileGroups are used to group sources using similar settings together.
-
-Each fileGroup object may contain the following keys:
-
-"language"
-  contains the programming language used by all files in the group.
-"compileFlags"
-  with a string containing all the flags passed to the compiler
-  when building any of the files in this group. This value is encoded in
-  the system's native shell format.
-"includePath"
-  with a list of include paths. Each include path is an object
-  containing a "path" with the actual include path and "isSystem" with a bool
-  value informing whether this is a normal include or a system include. This
-  value is encoded in the system's native shell format.
-"defines"
-  with a list of defines in the form "SOMEVALUE" or "SOMEVALUE=42". This
-  value is encoded in the system's native shell format.
-"sources"
-  with a list of source files.
-
-All file paths in the fileGroup are either absolute or relative to the
-sourceDirectory of the target.
-
-Example::
-
-  [== "CMake Server" ==[
-  {"type":"codemodel"}
-  ]== "CMake Server" ==]
-
-CMake will reply::
-
-  [== "CMake Server" ==[
-  {
-    "configurations": [
-      {
-        "name": "",
-        "projects": [
-          {
-            "buildDirectory": "/tmp/build/Source/CursesDialog/form",
-            "name": "CMAKE_FORM",
-            "sourceDirectory": "/home/code/src/cmake/Source/CursesDialog/form",
-            "targets": [
-              {
-                "artifacts": [ "/tmp/build/Source/CursesDialog/form/libcmForm.a" ],
-                "buildDirectory": "/tmp/build/Source/CursesDialog/form",
-                "fileGroups": [
-                  {
-                    "compileFlags": "  -std=gnu11",
-                    "defines": [ "CURL_STATICLIB", "LIBARCHIVE_STATIC" ],
-                    "includePath": [ { "path": "/tmp/build/Utilities" }, <...> ],
-                    "isGenerated": false,
-                    "language": "C",
-                    "sources": [ "fld_arg.c", <...> ]
-                  }
-                ],
-                "fullName": "libcmForm.a",
-                "linkerLanguage": "C",
-                "name": "cmForm",
-                "sourceDirectory": "/home/code/src/cmake/Source/CursesDialog/form",
-                "type": "STATIC_LIBRARY"
-              }
-            ]
-          },
-          <...>
-        ]
-      }
-    ],
-    "cookie": "",
-    "inReplyTo": "codemodel",
-    "type": "reply"
-  }
-  ]== "CMake Server" ==]
-
-
-Type "ctestInfo"
-^^^^^^^^^^^^^^^^
-
-The "ctestInfo" request can be used after a project was "compute"d successfully.
-
-It will list the complete project test structure as it is known to cmake.
-
-The reply will contain a key "configurations", which will contain a list of
-configuration objects. Configuration objects are used to destinquish between
-different configurations the build directory might have enabled. While most
-generators only support one configuration, others might support several.
-
-Each configuration object can have the following keys:
-
-"name"
-  contains the name of the configuration. The name may be empty.
-"projects"
-  contains a list of project objects, one for each build project.
-
-Project objects define one (sub-)project defined in the cmake build system.
-
-Each project object can have the following keys:
-
-"name"
-  contains the (sub-)projects name.
-"ctestInfo"
-  contains a list of test objects.
-
-Each test object can have the following keys:
-
-"ctestName"
-  contains the name of the test.
-"ctestCommand"
-  contains the test command.
-"properties"
-  contains a list of test property objects.
-
-Each test property object can have the following keys:
-
-"key"
-  contains the test property key.
-"value"
-  contains the test property value.
-
-
-Type "cmakeInputs"
-^^^^^^^^^^^^^^^^^^
-
-The "cmakeInputs" requests will report files used by CMake as part
-of the build system itself.
-
-This request is only available after a project was successfully
-"configure"d.
-
-Example::
-
-  [== "CMake Server" ==[
-  {"type":"cmakeInputs"}
-  ]== "CMake Server" ==]
-
-CMake will reply with the following information::
-
-  [== "CMake Server" ==[
-  {"buildFiles":
-    [
-      {"isCMake":true,"isTemporary":false,"sources":["/usr/lib/cmake/...", ... ]},
-      {"isCMake":false,"isTemporary":false,"sources":["CMakeLists.txt", ...]},
-      {"isCMake":false,"isTemporary":true,"sources":["/tmp/build/CMakeFiles/...", ...]}
-    ],
-    "cmakeRootDirectory":"/usr/lib/cmake",
-    "sourceDirectory":"/home/code/src/cmake",
-    "cookie":"",
-    "inReplyTo":"cmakeInputs",
-    "type":"reply"
-  }
-  ]== "CMake Server" ==]
-
-All file names are either relative to the top level source directory or
-absolute.
-
-The list of files which "isCMake" set to true are part of the cmake installation.
-
-The list of files witch "isTemporary" set to true are part of the build directory
-and will not survive the build directory getting cleaned out.
-
-
-Type "cache"
-^^^^^^^^^^^^
-
-The "cache" request will list the cached configuration values.
-
-Example::
-
-  [== "CMake Server" ==[
-  {"type":"cache"}
-  ]== "CMake Server" ==]
-
-CMake will respond with the following output::
-
-  [== "CMake Server" ==[
-  {
-    "cookie":"","inReplyTo":"cache","type":"reply",
-    "cache":
-    [
-      {
-        "key":"SOMEVALUE",
-        "properties":
-        {
-          "ADVANCED":"1",
-          "HELPSTRING":"This is not helpful"
-        }
-        "type":"STRING",
-        "value":"TEST"}
-    ]
-  }
-  ]== "CMake Server" ==]
-
-The output can be limited to a list of keys by passing an array of key names
-to the "keys" optional field of the "cache" request.
-
-
-Type "fileSystemWatchers"
-^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The server can watch the filesystem for changes. The "fileSystemWatchers"
-command will report on the files and directories watched.
-
-Example::
-
-  [== "CMake Server" ==[
-  {"type":"fileSystemWatchers"}
-  ]== "CMake Server" ==]
-
-CMake will respond with the following output::
-
-  [== "CMake Server" ==[
-  {
-    "cookie":"","inReplyTo":"fileSystemWatchers","type":"reply",
-    "watchedFiles": [ "/absolute/path" ],
-    "watchedDirectories": [ "/absolute" ]
-  }
-  ]== "CMake Server" ==]
diff --git a/share/cmake-3.18/Help/manual/cmake-toolchains.7.rst b/share/cmake-3.18/Help/manual/cmake-toolchains.7.rst
deleted file mode 100644
index e8badd4..0000000
--- a/share/cmake-3.18/Help/manual/cmake-toolchains.7.rst
+++ /dev/null
@@ -1,666 +0,0 @@
-.. cmake-manual-description: CMake Toolchains Reference
-
-cmake-toolchains(7)
-*******************
-
-.. only:: html
-
-   .. contents::
-
-Introduction
-============
-
-CMake uses a toolchain of utilities to compile, link libraries and create
-archives, and other tasks to drive the build. The toolchain utilities available
-are determined by the languages enabled. In normal builds, CMake automatically
-determines the toolchain for host builds based on system introspection and
-defaults. In cross-compiling scenarios, a toolchain file may be specified
-with information about compiler and utility paths.
-
-Languages
-=========
-
-Languages are enabled by the :command:`project` command.  Language-specific
-built-in variables, such as
-:variable:`CMAKE_CXX_COMPILER <CMAKE_<LANG>_COMPILER>`,
-:variable:`CMAKE_CXX_COMPILER_ID <CMAKE_<LANG>_COMPILER_ID>` etc are set by
-invoking the :command:`project` command.  If no project command
-is in the top-level CMakeLists file, one will be implicitly generated. By default
-the enabled languages are ``C`` and ``CXX``:
-
-.. code-block:: cmake
-
-  project(C_Only C)
-
-A special value of ``NONE`` can also be used with the :command:`project` command
-to enable no languages:
-
-.. code-block:: cmake
-
-  project(MyProject NONE)
-
-The :command:`enable_language` command can be used to enable languages after the
-:command:`project` command:
-
-.. code-block:: cmake
-
-  enable_language(CXX)
-
-When a language is enabled, CMake finds a compiler for that language, and
-determines some information, such as the vendor and version of the compiler,
-the target architecture and bitwidth, the location of corresponding utilities
-etc.
-
-The :prop_gbl:`ENABLED_LANGUAGES` global property contains the languages which
-are currently enabled.
-
-Variables and Properties
-========================
-
-Several variables relate to the language components of a toolchain which are
-enabled. :variable:`CMAKE_<LANG>_COMPILER` is the full path to the compiler used
-for ``<LANG>``. :variable:`CMAKE_<LANG>_COMPILER_ID` is the identifier used
-by CMake for the compiler and :variable:`CMAKE_<LANG>_COMPILER_VERSION` is the
-version of the compiler.
-
-The :variable:`CMAKE_<LANG>_FLAGS` variables and the configuration-specific
-equivalents contain flags that will be added to the compile command when
-compiling a file of a particular language.
-
-As the linker is invoked by the compiler driver, CMake needs a way to determine
-which compiler to use to invoke the linker. This is calculated by the
-:prop_sf:`LANGUAGE` of source files in the target, and in the case of static
-libraries, the language of the dependent libraries. The choice CMake makes may
-be overridden with the :prop_tgt:`LINKER_LANGUAGE` target property.
-
-Toolchain Features
-==================
-
-CMake provides the :command:`try_compile` command and wrapper macros such as
-:module:`CheckCXXSourceCompiles`, :module:`CheckCXXSymbolExists` and
-:module:`CheckIncludeFile` to test capability and availability of various
-toolchain features. These APIs test the toolchain in some way and cache the
-result so that the test does not have to be performed again the next time
-CMake runs.
-
-Some toolchain features have built-in handling in CMake, and do not require
-compile-tests. For example, :prop_tgt:`POSITION_INDEPENDENT_CODE` allows
-specifying that a target should be built as position-independent code, if
-the compiler supports that feature. The :prop_tgt:`<LANG>_VISIBILITY_PRESET`
-and :prop_tgt:`VISIBILITY_INLINES_HIDDEN` target properties add flags for
-hidden visibility, if supported by the compiler.
-
-.. _`Cross Compiling Toolchain`:
-
-Cross Compiling
-===============
-
-If :manual:`cmake(1)` is invoked with the command line parameter
-``-DCMAKE_TOOLCHAIN_FILE=path/to/file``, the file will be loaded early to set
-values for the compilers.
-The :variable:`CMAKE_CROSSCOMPILING` variable is set to true when CMake is
-cross-compiling.
-
-Note that using the :variable:`CMAKE_SOURCE_DIR` or :variable:`CMAKE_BINARY_DIR`
-variables inside a toolchain file is typically undesirable.  The toolchain
-file is used in contexts where these variables have different values when used
-in different places (e.g. as part of a call to :command:`try_compile`).  In most
-cases, where there is a need to evaluate paths inside a toolchain file, the more
-appropriate variable to use would be :variable:`CMAKE_CURRENT_LIST_DIR`, since
-it always has an unambiguous, predictable value.
-
-Cross Compiling for Linux
--------------------------
-
-A typical cross-compiling toolchain for Linux has content such
-as:
-
-.. code-block:: cmake
-
-  set(CMAKE_SYSTEM_NAME Linux)
-  set(CMAKE_SYSTEM_PROCESSOR arm)
-
-  set(CMAKE_SYSROOT /home/devel/rasp-pi-rootfs)
-  set(CMAKE_STAGING_PREFIX /home/devel/stage)
-
-  set(tools /home/devel/gcc-4.7-linaro-rpi-gnueabihf)
-  set(CMAKE_C_COMPILER ${tools}/bin/arm-linux-gnueabihf-gcc)
-  set(CMAKE_CXX_COMPILER ${tools}/bin/arm-linux-gnueabihf-g++)
-
-  set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
-  set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
-  set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
-  set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
-
-The :variable:`CMAKE_SYSTEM_NAME` is the CMake-identifier of the target platform
-to build for.
-
-The :variable:`CMAKE_SYSTEM_PROCESSOR` is the CMake-identifier of the target architecture
-to build for.
-
-The :variable:`CMAKE_SYSROOT` is optional, and may be specified if a sysroot
-is available.
-
-The :variable:`CMAKE_STAGING_PREFIX` is also optional. It may be used to specify
-a path on the host to install to. The :variable:`CMAKE_INSTALL_PREFIX` is always
-the runtime installation location, even when cross-compiling.
-
-The :variable:`CMAKE_<LANG>_COMPILER` variables may be set to full paths, or to
-names of compilers to search for in standard locations.   For toolchains that
-do not support linking binaries without custom flags or scripts one may set
-the :variable:`CMAKE_TRY_COMPILE_TARGET_TYPE` variable to ``STATIC_LIBRARY``
-to tell CMake not to try to link executables during its checks.
-
-CMake ``find_*`` commands will look in the sysroot, and the :variable:`CMAKE_FIND_ROOT_PATH`
-entries by default in all cases, as well as looking in the host system root prefix.
-Although this can be controlled on a case-by-case basis, when cross-compiling, it
-can be useful to exclude looking in either the host or the target for particular
-artifacts. Generally, includes, libraries and packages should be found in the
-target system prefixes, whereas executables which must be run as part of the build
-should be found only on the host and not on the target. This is the purpose of
-the ``CMAKE_FIND_ROOT_PATH_MODE_*`` variables.
-
-.. _`Cray Cross-Compile`:
-
-Cross Compiling for the Cray Linux Environment
-----------------------------------------------
-
-Cross compiling for compute nodes in the Cray Linux Environment can be done
-without needing a separate toolchain file.  Specifying
-``-DCMAKE_SYSTEM_NAME=CrayLinuxEnvironment`` on the CMake command line will
-ensure that the appropriate build settings and search paths are configured.
-The platform will pull its configuration from the current environment
-variables and will configure a project to use the compiler wrappers from the
-Cray Programming Environment's ``PrgEnv-*`` modules if present and loaded.
-
-The default configuration of the Cray Programming Environment is to only
-support static libraries.  This can be overridden and shared libraries
-enabled by setting the ``CRAYPE_LINK_TYPE`` environment variable to
-``dynamic``.
-
-Running CMake without specifying :variable:`CMAKE_SYSTEM_NAME` will
-run the configure step in host mode assuming a standard Linux environment.
-If not overridden, the ``PrgEnv-*`` compiler wrappers will end up getting used,
-which if targeting the either the login node or compute node, is likely not the
-desired behavior.  The exception to this would be if you are building directly
-on a NID instead of cross-compiling from a login node. If trying to build
-software for a login node, you will need to either first unload the
-currently loaded ``PrgEnv-*`` module or explicitly tell CMake to use the
-system compilers in ``/usr/bin`` instead of the Cray wrappers.  If instead
-targeting a compute node is desired, just specify the
-:variable:`CMAKE_SYSTEM_NAME` as mentioned above.
-
-Cross Compiling using Clang
----------------------------
-
-Some compilers such as Clang are inherently cross compilers.
-The :variable:`CMAKE_<LANG>_COMPILER_TARGET` can be set to pass a
-value to those supported compilers when compiling:
-
-.. code-block:: cmake
-
-  set(CMAKE_SYSTEM_NAME Linux)
-  set(CMAKE_SYSTEM_PROCESSOR arm)
-
-  set(triple arm-linux-gnueabihf)
-
-  set(CMAKE_C_COMPILER clang)
-  set(CMAKE_C_COMPILER_TARGET ${triple})
-  set(CMAKE_CXX_COMPILER clang++)
-  set(CMAKE_CXX_COMPILER_TARGET ${triple})
-
-Similarly, some compilers do not ship their own supplementary utilities
-such as linkers, but provide a way to specify the location of the external
-toolchain which will be used by the compiler driver. The
-:variable:`CMAKE_<LANG>_COMPILER_EXTERNAL_TOOLCHAIN` variable can be set in a
-toolchain file to pass the path to the compiler driver.
-
-Cross Compiling for QNX
------------------------
-
-As the Clang compiler the QNX QCC compile is inherently a cross compiler.
-And the :variable:`CMAKE_<LANG>_COMPILER_TARGET` can be set to pass a
-value to those supported compilers when compiling:
-
-.. code-block:: cmake
-
-  set(CMAKE_SYSTEM_NAME QNX)
-
-  set(arch gcc_ntoarmv7le)
-
-  set(CMAKE_C_COMPILER qcc)
-  set(CMAKE_C_COMPILER_TARGET ${arch})
-  set(CMAKE_CXX_COMPILER QCC)
-  set(CMAKE_CXX_COMPILER_TARGET ${arch})
-
-  set(CMAKE_SYSROOT $ENV{QNX_TARGET})
-
-
-Cross Compiling for Windows CE
-------------------------------
-
-Cross compiling for Windows CE requires the corresponding SDK being
-installed on your system.  These SDKs are usually installed under
-``C:/Program Files (x86)/Windows CE Tools/SDKs``.
-
-A toolchain file to configure a Visual Studio generator for
-Windows CE may look like this:
-
-.. code-block:: cmake
-
-  set(CMAKE_SYSTEM_NAME WindowsCE)
-
-  set(CMAKE_SYSTEM_VERSION 8.0)
-  set(CMAKE_SYSTEM_PROCESSOR arm)
-
-  set(CMAKE_GENERATOR_TOOLSET CE800) # Can be omitted for 8.0
-  set(CMAKE_GENERATOR_PLATFORM SDK_AM335X_SK_WEC2013_V310)
-
-The :variable:`CMAKE_GENERATOR_PLATFORM` tells the generator which SDK to use.
-Further :variable:`CMAKE_SYSTEM_VERSION` tells the generator what version of
-Windows CE to use.  Currently version 8.0 (Windows Embedded Compact 2013) is
-supported out of the box.  Other versions may require one to set
-:variable:`CMAKE_GENERATOR_TOOLSET` to the correct value.
-
-Cross Compiling for Windows 10 Universal Applications
------------------------------------------------------
-
-A toolchain file to configure a Visual Studio generator for a
-Windows 10 Universal Application may look like this:
-
-.. code-block:: cmake
-
-  set(CMAKE_SYSTEM_NAME WindowsStore)
-  set(CMAKE_SYSTEM_VERSION 10.0)
-
-A Windows 10 Universal Application targets both Windows Store and
-Windows Phone.  Specify the :variable:`CMAKE_SYSTEM_VERSION` variable
-to be ``10.0`` to build with the latest available Windows 10 SDK.
-Specify a more specific version (e.g. ``10.0.10240.0`` for RTM)
-to build with the corresponding SDK.
-
-Cross Compiling for Windows Phone
----------------------------------
-
-A toolchain file to configure a Visual Studio generator for
-Windows Phone may look like this:
-
-.. code-block:: cmake
-
-  set(CMAKE_SYSTEM_NAME WindowsPhone)
-  set(CMAKE_SYSTEM_VERSION 8.1)
-
-Cross Compiling for Windows Store
----------------------------------
-
-A toolchain file to configure a Visual Studio generator for
-Windows Store may look like this:
-
-.. code-block:: cmake
-
-  set(CMAKE_SYSTEM_NAME WindowsStore)
-  set(CMAKE_SYSTEM_VERSION 8.1)
-
-.. _`Cross Compiling for Android`:
-
-Cross Compiling for Android
----------------------------
-
-A toolchain file may configure cross-compiling for Android by setting the
-:variable:`CMAKE_SYSTEM_NAME` variable to ``Android``.  Further configuration
-is specific to the Android development environment to be used.
-
-For :ref:`Visual Studio Generators`, CMake expects :ref:`NVIDIA Nsight Tegra
-Visual Studio Edition <Cross Compiling for Android with NVIDIA Nsight Tegra
-Visual Studio Edition>` to be installed.  See that section for further
-configuration details.
-
-For :ref:`Makefile Generators` and the :generator:`Ninja` generator,
-CMake expects one of these environments:
-
-* :ref:`NDK <Cross Compiling for Android with the NDK>`
-* :ref:`Standalone Toolchain <Cross Compiling for Android with a Standalone Toolchain>`
-
-CMake uses the following steps to select one of the environments:
-
-* If the :variable:`CMAKE_ANDROID_NDK` variable is set, the NDK at the
-  specified location will be used.
-
-* Else, if the :variable:`CMAKE_ANDROID_STANDALONE_TOOLCHAIN` variable
-  is set, the Standalone Toolchain at the specified location will be used.
-
-* Else, if the :variable:`CMAKE_SYSROOT` variable is set to a directory
-  of the form ``<ndk>/platforms/android-<api>/arch-<arch>``, the ``<ndk>``
-  part will be used as the value of :variable:`CMAKE_ANDROID_NDK` and the
-  NDK will be used.
-
-* Else, if the :variable:`CMAKE_SYSROOT` variable is set to a directory of the
-  form ``<standalone-toolchain>/sysroot``, the ``<standalone-toolchain>`` part
-  will be used as the value of :variable:`CMAKE_ANDROID_STANDALONE_TOOLCHAIN`
-  and the Standalone Toolchain will be used.
-
-* Else, if a cmake variable ``ANDROID_NDK`` is set it will be used
-  as the value of :variable:`CMAKE_ANDROID_NDK`, and the NDK will be used.
-
-* Else, if a cmake variable ``ANDROID_STANDALONE_TOOLCHAIN`` is set, it will be
-  used as the value of :variable:`CMAKE_ANDROID_STANDALONE_TOOLCHAIN`, and the
-  Standalone Toolchain will be used.
-
-* Else, if an environment variable ``ANDROID_NDK_ROOT`` or
-  ``ANDROID_NDK`` is set, it will be used as the value of
-  :variable:`CMAKE_ANDROID_NDK`, and the NDK will be used.
-
-* Else, if an environment variable ``ANDROID_STANDALONE_TOOLCHAIN`` is
-  set then it will be used as the value of
-  :variable:`CMAKE_ANDROID_STANDALONE_TOOLCHAIN`, and the Standalone
-  Toolchain will be used.
-
-* Else, an error diagnostic will be issued that neither the NDK or
-  Standalone Toolchain can be found.
-
-.. _`Cross Compiling for Android with the NDK`:
-
-Cross Compiling for Android with the NDK
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-A toolchain file may configure :ref:`Makefile Generators` or the
-:generator:`Ninja` generator to target Android for cross-compiling.
-
-Configure use of an Android NDK with the following variables:
-
-:variable:`CMAKE_SYSTEM_NAME`
-  Set to ``Android``.  Must be specified to enable cross compiling
-  for Android.
-
-:variable:`CMAKE_SYSTEM_VERSION`
-  Set to the Android API level.  If not specified, the value is
-  determined as follows:
-
-  * If the :variable:`CMAKE_ANDROID_API` variable is set, its value
-    is used as the API level.
-  * If the :variable:`CMAKE_SYSROOT` variable is set, the API level is
-    detected from the NDK directory structure containing the sysroot.
-  * Otherwise, the latest API level available in the NDK is used.
-
-:variable:`CMAKE_ANDROID_ARCH_ABI`
-  Set to the Android ABI (architecture).  If not specified, this
-  variable will default to ``armeabi``.
-  The :variable:`CMAKE_ANDROID_ARCH` variable will be computed
-  from ``CMAKE_ANDROID_ARCH_ABI`` automatically.
-  Also see the :variable:`CMAKE_ANDROID_ARM_MODE` and
-  :variable:`CMAKE_ANDROID_ARM_NEON` variables.
-
-:variable:`CMAKE_ANDROID_NDK`
-  Set to the absolute path to the Android NDK root directory.
-  A ``${CMAKE_ANDROID_NDK}/platforms`` directory must exist.
-  If not specified, a default for this variable will be chosen
-  as specified :ref:`above <Cross Compiling for Android>`.
-
-:variable:`CMAKE_ANDROID_NDK_DEPRECATED_HEADERS`
-  Set to a true value to use the deprecated per-api-level headers
-  instead of the unified headers.  If not specified, the default will
-  be false unless using a NDK that does not provide unified headers.
-
-:variable:`CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION`
-  On NDK r19 or above, this variable must be unset or set to ``clang``.
-  On NDK r18 or below, set this to the version of the NDK toolchain to
-  be selected as the compiler.  If not specified, the default will be
-  the latest available GCC toolchain.
-
-:variable:`CMAKE_ANDROID_STL_TYPE`
-  Set to specify which C++ standard library to use.  If not specified,
-  a default will be selected as described in the variable documentation.
-
-The following variables will be computed and provided automatically:
-
-:variable:`CMAKE_<LANG>_ANDROID_TOOLCHAIN_PREFIX`
-  The absolute path prefix to the binutils in the NDK toolchain.
-
-:variable:`CMAKE_<LANG>_ANDROID_TOOLCHAIN_SUFFIX`
-  The host platform suffix of the binutils in the NDK toolchain.
-
-
-For example, a toolchain file might contain:
-
-.. code-block:: cmake
-
-  set(CMAKE_SYSTEM_NAME Android)
-  set(CMAKE_SYSTEM_VERSION 21) # API level
-  set(CMAKE_ANDROID_ARCH_ABI arm64-v8a)
-  set(CMAKE_ANDROID_NDK /path/to/android-ndk)
-  set(CMAKE_ANDROID_STL_TYPE gnustl_static)
-
-Alternatively one may specify the values without a toolchain file:
-
-.. code-block:: console
-
-  $ cmake ../src \
-    -DCMAKE_SYSTEM_NAME=Android \
-    -DCMAKE_SYSTEM_VERSION=21 \
-    -DCMAKE_ANDROID_ARCH_ABI=arm64-v8a \
-    -DCMAKE_ANDROID_NDK=/path/to/android-ndk \
-    -DCMAKE_ANDROID_STL_TYPE=gnustl_static
-
-.. _`Cross Compiling for Android with a Standalone Toolchain`:
-
-Cross Compiling for Android with a Standalone Toolchain
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-A toolchain file may configure :ref:`Makefile Generators` or the
-:generator:`Ninja` generator to target Android for cross-compiling
-using a standalone toolchain.
-
-Configure use of an Android standalone toolchain with the following variables:
-
-:variable:`CMAKE_SYSTEM_NAME`
-  Set to ``Android``.  Must be specified to enable cross compiling
-  for Android.
-
-:variable:`CMAKE_ANDROID_STANDALONE_TOOLCHAIN`
-  Set to the absolute path to the standalone toolchain root directory.
-  A ``${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}/sysroot`` directory
-  must exist.
-  If not specified, a default for this variable will be chosen
-  as specified :ref:`above <Cross Compiling for Android>`.
-
-:variable:`CMAKE_ANDROID_ARM_MODE`
-  When the standalone toolchain targets ARM, optionally set this to ``ON``
-  to target 32-bit ARM instead of 16-bit Thumb.
-  See variable documentation for details.
-
-:variable:`CMAKE_ANDROID_ARM_NEON`
-  When the standalone toolchain targets ARM v7, optionally set thisto ``ON``
-  to target ARM NEON devices.  See variable documentation for details.
-
-The following variables will be computed and provided automatically:
-
-:variable:`CMAKE_SYSTEM_VERSION`
-  The Android API level detected from the standalone toolchain.
-
-:variable:`CMAKE_ANDROID_ARCH_ABI`
-  The Android ABI detected from the standalone toolchain.
-
-:variable:`CMAKE_<LANG>_ANDROID_TOOLCHAIN_PREFIX`
-  The absolute path prefix to the ``binutils`` in the standalone toolchain.
-
-:variable:`CMAKE_<LANG>_ANDROID_TOOLCHAIN_SUFFIX`
-  The host platform suffix of the ``binutils`` in the standalone toolchain.
-
-For example, a toolchain file might contain:
-
-.. code-block:: cmake
-
-  set(CMAKE_SYSTEM_NAME Android)
-  set(CMAKE_ANDROID_STANDALONE_TOOLCHAIN /path/to/android-toolchain)
-
-Alternatively one may specify the values without a toolchain file:
-
-.. code-block:: console
-
-  $ cmake ../src \
-    -DCMAKE_SYSTEM_NAME=Android \
-    -DCMAKE_ANDROID_STANDALONE_TOOLCHAIN=/path/to/android-toolchain
-
-.. _`Cross Compiling for Android with NVIDIA Nsight Tegra Visual Studio Edition`:
-
-Cross Compiling for Android with NVIDIA Nsight Tegra Visual Studio Edition
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-A toolchain file to configure one of the :ref:`Visual Studio Generators`
-to build using NVIDIA Nsight Tegra targeting Android may look like this:
-
-.. code-block:: cmake
-
-  set(CMAKE_SYSTEM_NAME Android)
-
-The :variable:`CMAKE_GENERATOR_TOOLSET` may be set to select
-the Nsight Tegra "Toolchain Version" value.
-
-See also target properties:
-
-* :prop_tgt:`ANDROID_ANT_ADDITIONAL_OPTIONS`
-* :prop_tgt:`ANDROID_API_MIN`
-* :prop_tgt:`ANDROID_API`
-* :prop_tgt:`ANDROID_ARCH`
-* :prop_tgt:`ANDROID_ASSETS_DIRECTORIES`
-* :prop_tgt:`ANDROID_GUI`
-* :prop_tgt:`ANDROID_JAR_DEPENDENCIES`
-* :prop_tgt:`ANDROID_JAR_DIRECTORIES`
-* :prop_tgt:`ANDROID_JAVA_SOURCE_DIR`
-* :prop_tgt:`ANDROID_NATIVE_LIB_DEPENDENCIES`
-* :prop_tgt:`ANDROID_NATIVE_LIB_DIRECTORIES`
-* :prop_tgt:`ANDROID_PROCESS_MAX`
-* :prop_tgt:`ANDROID_PROGUARD_CONFIG_PATH`
-* :prop_tgt:`ANDROID_PROGUARD`
-* :prop_tgt:`ANDROID_SECURE_PROPS_PATH`
-* :prop_tgt:`ANDROID_SKIP_ANT_STEP`
-* :prop_tgt:`ANDROID_STL_TYPE`
-
-.. _`Cross Compiling for iOS, tvOS, or watchOS`:
-
-Cross Compiling for iOS, tvOS, or watchOS
------------------------------------------
-
-For cross-compiling to iOS, tvOS, or watchOS, the :generator:`Xcode`
-generator is recommended.  The :generator:`Unix Makefiles` or
-:generator:`Ninja` generators can also be used, but they require the
-project to handle more areas like target CPU selection and code signing.
-
-Any of the three systems can be targeted by setting the
-:variable:`CMAKE_SYSTEM_NAME` variable to a value from the table below.
-By default, the latest Device SDK is chosen.  As for all Apple platforms,
-a different SDK (e.g. a simulator) can be selected by setting the
-:variable:`CMAKE_OSX_SYSROOT` variable, although this should rarely be
-necessary (see :ref:`Switching Between Device and Simulator` below).
-A list of available SDKs can be obtained by running ``xcodebuild -showsdks``.
-
-=======  ================= ==================== ================
-OS       CMAKE_SYSTEM_NAME Device SDK (default) Simulator SDK
-=======  ================= ==================== ================
-iOS      iOS               iphoneos             iphonesimulator
-tvOS     tvOS              appletvos            appletvsimulator
-watchOS  watchOS           watchos              watchsimulator
-=======  ================= ==================== ================
-
-For example, to create a CMake configuration for iOS, the following
-command is sufficient:
-
-.. code-block:: console
-
-  cmake .. -GXcode -DCMAKE_SYSTEM_NAME=iOS
-
-Variable :variable:`CMAKE_OSX_ARCHITECTURES` can be used to set architectures
-for both device and simulator. Variable :variable:`CMAKE_OSX_DEPLOYMENT_TARGET`
-can be used to set an iOS/tvOS/watchOS deployment target.
-
-Next configuration will install fat 5 architectures iOS library
-and add the ``-miphoneos-version-min=9.3``/``-mios-simulator-version-min=9.3``
-flags to the compiler:
-
-.. code-block:: console
-
-  $ cmake -S. -B_builds -GXcode \
-      -DCMAKE_SYSTEM_NAME=iOS \
-      "-DCMAKE_OSX_ARCHITECTURES=armv7;armv7s;arm64;i386;x86_64" \
-      -DCMAKE_OSX_DEPLOYMENT_TARGET=9.3 \
-      -DCMAKE_INSTALL_PREFIX=`pwd`/_install \
-      -DCMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH=NO \
-      -DCMAKE_IOS_INSTALL_COMBINED=YES
-
-Example:
-
-.. code-block:: cmake
-
-  # CMakeLists.txt
-  cmake_minimum_required(VERSION 3.14)
-  project(foo)
-  add_library(foo foo.cpp)
-  install(TARGETS foo DESTINATION lib)
-
-Install:
-
-.. code-block:: console
-
-    $ cmake --build _builds --config Release --target install
-
-Check library:
-
-.. code-block:: console
-
-    $ lipo -info _install/lib/libfoo.a
-    Architectures in the fat file: _install/lib/libfoo.a are: i386 armv7 armv7s x86_64 arm64
-
-.. code-block:: console
-
-    $ otool -l _install/lib/libfoo.a | grep -A2 LC_VERSION_MIN_IPHONEOS
-          cmd LC_VERSION_MIN_IPHONEOS
-      cmdsize 16
-      version 9.3
-
-Code Signing
-^^^^^^^^^^^^
-
-Some build artifacts for the embedded Apple platforms require mandatory
-code signing.  If the :generator:`Xcode` generator is being used and
-code signing is required or desired, the development team ID can be
-specified via the ``CMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM`` CMake variable.
-This team ID will then be included in the generated Xcode project.
-By default, CMake avoids the need for code signing during the internal
-configuration phase (i.e compiler ID and feature detection).
-
-.. _`Switching Between Device and Simulator`:
-
-Switching Between Device and Simulator
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-When configuring for any of the embedded platforms, one can target either
-real devices or the simulator.  Both have their own separate SDK, but CMake
-only supports specifying a single SDK for the configuration phase.  This
-means the developer must select one or the other at configuration time.
-When using the :generator:`Xcode` generator, this is less of a limitation
-because Xcode still allows you to build for either a device or a simulator,
-even though configuration was only performed for one of the two.  From
-within the Xcode IDE, builds are performed for the selected "destination"
-platform.  When building from the command line, the desired sdk can be
-specified directly by passing a ``-sdk`` option to the underlying build
-tool (``xcodebuild``).  For example:
-
-.. code-block:: console
-
-  $ cmake --build ... -- -sdk iphonesimulator
-
-Please note that checks made during configuration were performed against
-the configure-time SDK and might not hold true for other SDKs.  Commands
-like :command:`find_package`, :command:`find_library`, etc. store and use
-details only for the configured SDK/platform, so they can be problematic
-if wanting to switch between device and simulator builds. You can follow
-the next rules to make device + simulator configuration work:
-
-- Use explicit ``-l`` linker flag,
-  e.g. ``target_link_libraries(foo PUBLIC "-lz")``
-
-- Use explicit ``-framework`` linker flag,
-  e.g. ``target_link_libraries(foo PUBLIC "-framework CoreFoundation")``
-
-- Use :command:`find_package` only for libraries installed with
-  :variable:`CMAKE_IOS_INSTALL_COMBINED` feature
diff --git a/share/cmake-3.18/Help/manual/cmake-variables.7.rst b/share/cmake-3.18/Help/manual/cmake-variables.7.rst
deleted file mode 100644
index 6480db1..0000000
--- a/share/cmake-3.18/Help/manual/cmake-variables.7.rst
+++ /dev/null
@@ -1,690 +0,0 @@
-.. cmake-manual-description: CMake Variables Reference
-
-cmake-variables(7)
-******************
-
-.. only:: html
-
-   .. contents::
-
-This page documents variables that are provided by CMake
-or have meaning to CMake when set by project code.
-
-For general information on variables, see the
-:ref:`Variables <CMake Language Variables>`
-section in the cmake-language manual.
-
-.. include:: ID_RESERVE.txt
-
-Variables that Provide Information
-==================================
-
-.. toctree::
-   :maxdepth: 1
-
-   /variable/CMAKE_AR
-   /variable/CMAKE_ARGC
-   /variable/CMAKE_ARGV0
-   /variable/CMAKE_BINARY_DIR
-   /variable/CMAKE_BUILD_TOOL
-   /variable/CMAKE_CACHEFILE_DIR
-   /variable/CMAKE_CACHE_MAJOR_VERSION
-   /variable/CMAKE_CACHE_MINOR_VERSION
-   /variable/CMAKE_CACHE_PATCH_VERSION
-   /variable/CMAKE_CFG_INTDIR
-   /variable/CMAKE_COMMAND
-   /variable/CMAKE_CPACK_COMMAND
-   /variable/CMAKE_CROSSCOMPILING
-   /variable/CMAKE_CROSSCOMPILING_EMULATOR
-   /variable/CMAKE_CTEST_COMMAND
-   /variable/CMAKE_CURRENT_BINARY_DIR
-   /variable/CMAKE_CURRENT_FUNCTION
-   /variable/CMAKE_CURRENT_FUNCTION_LIST_DIR
-   /variable/CMAKE_CURRENT_FUNCTION_LIST_FILE
-   /variable/CMAKE_CURRENT_FUNCTION_LIST_LINE
-   /variable/CMAKE_CURRENT_LIST_DIR
-   /variable/CMAKE_CURRENT_LIST_FILE
-   /variable/CMAKE_CURRENT_LIST_LINE
-   /variable/CMAKE_CURRENT_SOURCE_DIR
-   /variable/CMAKE_DEBUG_TARGET_PROPERTIES
-   /variable/CMAKE_DIRECTORY_LABELS
-   /variable/CMAKE_DL_LIBS
-   /variable/CMAKE_DOTNET_TARGET_FRAMEWORK
-   /variable/CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION
-   /variable/CMAKE_EDIT_COMMAND
-   /variable/CMAKE_EXECUTABLE_SUFFIX
-   /variable/CMAKE_EXTRA_GENERATOR
-   /variable/CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES
-   /variable/CMAKE_FIND_DEBUG_MODE
-   /variable/CMAKE_FIND_PACKAGE_NAME
-   /variable/CMAKE_FIND_PACKAGE_SORT_DIRECTION
-   /variable/CMAKE_FIND_PACKAGE_SORT_ORDER
-   /variable/CMAKE_GENERATOR
-   /variable/CMAKE_GENERATOR_INSTANCE
-   /variable/CMAKE_GENERATOR_PLATFORM
-   /variable/CMAKE_GENERATOR_TOOLSET
-   /variable/CMAKE_IMPORT_LIBRARY_PREFIX
-   /variable/CMAKE_IMPORT_LIBRARY_SUFFIX
-   /variable/CMAKE_JOB_POOL_COMPILE
-   /variable/CMAKE_JOB_POOL_LINK
-   /variable/CMAKE_JOB_POOL_PRECOMPILE_HEADER
-   /variable/CMAKE_JOB_POOLS
-   /variable/CMAKE_LANG_COMPILER_AR
-   /variable/CMAKE_LANG_COMPILER_RANLIB
-   /variable/CMAKE_LANG_LINK_LIBRARY_SUFFIX
-   /variable/CMAKE_LINK_LIBRARY_SUFFIX
-   /variable/CMAKE_LINK_SEARCH_END_STATIC
-   /variable/CMAKE_LINK_SEARCH_START_STATIC
-   /variable/CMAKE_MAJOR_VERSION
-   /variable/CMAKE_MAKE_PROGRAM
-   /variable/CMAKE_MATCH_COUNT
-   /variable/CMAKE_MATCH_n
-   /variable/CMAKE_MINIMUM_REQUIRED_VERSION
-   /variable/CMAKE_MINOR_VERSION
-   /variable/CMAKE_NETRC
-   /variable/CMAKE_NETRC_FILE
-   /variable/CMAKE_PARENT_LIST_FILE
-   /variable/CMAKE_PATCH_VERSION
-   /variable/CMAKE_PROJECT_DESCRIPTION
-   /variable/CMAKE_PROJECT_HOMEPAGE_URL
-   /variable/CMAKE_PROJECT_NAME
-   /variable/CMAKE_PROJECT_VERSION
-   /variable/CMAKE_PROJECT_VERSION_MAJOR
-   /variable/CMAKE_PROJECT_VERSION_MINOR
-   /variable/CMAKE_PROJECT_VERSION_PATCH
-   /variable/CMAKE_PROJECT_VERSION_TWEAK
-   /variable/CMAKE_RANLIB
-   /variable/CMAKE_ROOT
-   /variable/CMAKE_RULE_MESSAGES
-   /variable/CMAKE_SCRIPT_MODE_FILE
-   /variable/CMAKE_SHARED_LIBRARY_PREFIX
-   /variable/CMAKE_SHARED_LIBRARY_SUFFIX
-   /variable/CMAKE_SHARED_MODULE_PREFIX
-   /variable/CMAKE_SHARED_MODULE_SUFFIX
-   /variable/CMAKE_SIZEOF_VOID_P
-   /variable/CMAKE_SKIP_INSTALL_RULES
-   /variable/CMAKE_SKIP_RPATH
-   /variable/CMAKE_SOURCE_DIR
-   /variable/CMAKE_STATIC_LIBRARY_PREFIX
-   /variable/CMAKE_STATIC_LIBRARY_SUFFIX
-   /variable/CMAKE_Swift_MODULE_DIRECTORY
-   /variable/CMAKE_Swift_NUM_THREADS
-   /variable/CMAKE_TOOLCHAIN_FILE
-   /variable/CMAKE_TWEAK_VERSION
-   /variable/CMAKE_VERBOSE_MAKEFILE
-   /variable/CMAKE_VERSION
-   /variable/CMAKE_VS_DEVENV_COMMAND
-   /variable/CMAKE_VS_MSBUILD_COMMAND
-   /variable/CMAKE_VS_NsightTegra_VERSION
-   /variable/CMAKE_VS_PLATFORM_NAME
-   /variable/CMAKE_VS_PLATFORM_NAME_DEFAULT
-   /variable/CMAKE_VS_PLATFORM_TOOLSET
-   /variable/CMAKE_VS_PLATFORM_TOOLSET_CUDA
-   /variable/CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR
-   /variable/CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE
-   /variable/CMAKE_VS_PLATFORM_TOOLSET_VERSION
-   /variable/CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION
-   /variable/CMAKE_XCODE_GENERATE_SCHEME
-   /variable/CMAKE_XCODE_PLATFORM_TOOLSET
-   /variable/PROJECT-NAME_BINARY_DIR
-   /variable/PROJECT-NAME_DESCRIPTION
-   /variable/PROJECT-NAME_HOMEPAGE_URL
-   /variable/PROJECT-NAME_SOURCE_DIR
-   /variable/PROJECT-NAME_VERSION
-   /variable/PROJECT-NAME_VERSION_MAJOR
-   /variable/PROJECT-NAME_VERSION_MINOR
-   /variable/PROJECT-NAME_VERSION_PATCH
-   /variable/PROJECT-NAME_VERSION_TWEAK
-   /variable/PROJECT_BINARY_DIR
-   /variable/PROJECT_DESCRIPTION
-   /variable/PROJECT_HOMEPAGE_URL
-   /variable/PROJECT_NAME
-   /variable/PROJECT_SOURCE_DIR
-   /variable/PROJECT_VERSION
-   /variable/PROJECT_VERSION_MAJOR
-   /variable/PROJECT_VERSION_MINOR
-   /variable/PROJECT_VERSION_PATCH
-   /variable/PROJECT_VERSION_TWEAK
-
-Variables that Change Behavior
-==============================
-
-.. toctree::
-   :maxdepth: 1
-
-   /variable/BUILD_SHARED_LIBS
-   /variable/CMAKE_ABSOLUTE_DESTINATION_FILES
-   /variable/CMAKE_APPBUNDLE_PATH
-   /variable/CMAKE_AUTOMOC_RELAXED_MODE
-   /variable/CMAKE_BACKWARDS_COMPATIBILITY
-   /variable/CMAKE_BUILD_TYPE
-   /variable/CMAKE_CODEBLOCKS_COMPILER_ID
-   /variable/CMAKE_CODEBLOCKS_EXCLUDE_EXTERNAL_FILES
-   /variable/CMAKE_CODELITE_USE_TARGETS
-   /variable/CMAKE_COLOR_MAKEFILE
-   /variable/CMAKE_CONFIGURATION_TYPES
-   /variable/CMAKE_DEPENDS_IN_PROJECT_ONLY
-   /variable/CMAKE_DISABLE_FIND_PACKAGE_PackageName
-   /variable/CMAKE_ECLIPSE_GENERATE_LINKED_RESOURCES
-   /variable/CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT
-   /variable/CMAKE_ECLIPSE_MAKE_ARGUMENTS
-   /variable/CMAKE_ECLIPSE_RESOURCE_ENCODING
-   /variable/CMAKE_ECLIPSE_VERSION
-   /variable/CMAKE_ERROR_DEPRECATED
-   /variable/CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION
-   /variable/CMAKE_EXECUTE_PROCESS_COMMAND_ECHO
-   /variable/CMAKE_EXPORT_COMPILE_COMMANDS
-   /variable/CMAKE_EXPORT_PACKAGE_REGISTRY
-   /variable/CMAKE_EXPORT_NO_PACKAGE_REGISTRY
-   /variable/CMAKE_FIND_APPBUNDLE
-   /variable/CMAKE_FIND_FRAMEWORK
-   /variable/CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX
-   /variable/CMAKE_FIND_LIBRARY_PREFIXES
-   /variable/CMAKE_FIND_LIBRARY_SUFFIXES
-   /variable/CMAKE_FIND_NO_INSTALL_PREFIX
-   /variable/CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY
-   /variable/CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY
-   /variable/CMAKE_FIND_PACKAGE_PREFER_CONFIG
-   /variable/CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS
-   /variable/CMAKE_FIND_PACKAGE_WARN_NO_MODULE
-   /variable/CMAKE_FIND_ROOT_PATH
-   /variable/CMAKE_FIND_ROOT_PATH_MODE_INCLUDE
-   /variable/CMAKE_FIND_ROOT_PATH_MODE_LIBRARY
-   /variable/CMAKE_FIND_ROOT_PATH_MODE_PACKAGE
-   /variable/CMAKE_FIND_ROOT_PATH_MODE_PROGRAM
-   /variable/CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH
-   /variable/CMAKE_FIND_USE_CMAKE_PATH
-   /variable/CMAKE_FIND_USE_CMAKE_SYSTEM_PATH
-   /variable/CMAKE_FIND_USE_PACKAGE_REGISTRY
-   /variable/CMAKE_FIND_USE_PACKAGE_ROOT_PATH
-   /variable/CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH
-   /variable/CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY
-   /variable/CMAKE_FRAMEWORK_PATH
-   /variable/CMAKE_IGNORE_PATH
-   /variable/CMAKE_INCLUDE_DIRECTORIES_BEFORE
-   /variable/CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE
-   /variable/CMAKE_INCLUDE_PATH
-   /variable/CMAKE_INSTALL_DEFAULT_COMPONENT_NAME
-   /variable/CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS
-   /variable/CMAKE_INSTALL_MESSAGE
-   /variable/CMAKE_INSTALL_PREFIX
-   /variable/CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT
-   /variable/CMAKE_LIBRARY_PATH
-   /variable/CMAKE_LINK_DIRECTORIES_BEFORE
-   /variable/CMAKE_MFC_FLAG
-   /variable/CMAKE_MAXIMUM_RECURSION_DEPTH
-   /variable/CMAKE_MESSAGE_CONTEXT
-   /variable/CMAKE_MESSAGE_CONTEXT_SHOW
-   /variable/CMAKE_MESSAGE_INDENT
-   /variable/CMAKE_MESSAGE_LOG_LEVEL
-   /variable/CMAKE_MODULE_PATH
-   /variable/CMAKE_POLICY_DEFAULT_CMPNNNN
-   /variable/CMAKE_POLICY_WARNING_CMPNNNN
-   /variable/CMAKE_PREFIX_PATH
-   /variable/CMAKE_PROGRAM_PATH
-   /variable/CMAKE_PROJECT_INCLUDE
-   /variable/CMAKE_PROJECT_INCLUDE_BEFORE
-   /variable/CMAKE_PROJECT_PROJECT-NAME_INCLUDE
-   /variable/CMAKE_PROJECT_PROJECT-NAME_INCLUDE_BEFORE
-   /variable/CMAKE_SKIP_INSTALL_ALL_DEPENDENCY
-   /variable/CMAKE_STAGING_PREFIX
-   /variable/CMAKE_SUBLIME_TEXT_2_ENV_SETTINGS
-   /variable/CMAKE_SUBLIME_TEXT_2_EXCLUDE_BUILD_TREE
-   /variable/CMAKE_SUPPRESS_REGENERATION
-   /variable/CMAKE_SYSROOT
-   /variable/CMAKE_SYSROOT_COMPILE
-   /variable/CMAKE_SYSROOT_LINK
-   /variable/CMAKE_SYSTEM_APPBUNDLE_PATH
-   /variable/CMAKE_SYSTEM_FRAMEWORK_PATH
-   /variable/CMAKE_SYSTEM_IGNORE_PATH
-   /variable/CMAKE_SYSTEM_INCLUDE_PATH
-   /variable/CMAKE_SYSTEM_LIBRARY_PATH
-   /variable/CMAKE_SYSTEM_PREFIX_PATH
-   /variable/CMAKE_SYSTEM_PROGRAM_PATH
-   /variable/CMAKE_USER_MAKE_RULES_OVERRIDE
-   /variable/CMAKE_WARN_DEPRECATED
-   /variable/CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION
-   /variable/CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY
-   /variable/CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER
-   /variable/CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN
-   /variable/CMAKE_XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING
-   /variable/CMAKE_XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER
-   /variable/CMAKE_XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS
-   /variable/CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE
-   /variable/CMAKE_XCODE_SCHEME_ENVIRONMENT
-   /variable/CMAKE_XCODE_SCHEME_GUARD_MALLOC
-   /variable/CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP
-   /variable/CMAKE_XCODE_SCHEME_MALLOC_GUARD_EDGES
-   /variable/CMAKE_XCODE_SCHEME_MALLOC_SCRIBBLE
-   /variable/CMAKE_XCODE_SCHEME_MALLOC_STACK
-   /variable/CMAKE_XCODE_SCHEME_THREAD_SANITIZER
-   /variable/CMAKE_XCODE_SCHEME_THREAD_SANITIZER_STOP
-   /variable/CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER
-   /variable/CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP
-   /variable/CMAKE_XCODE_SCHEME_WORKING_DIRECTORY
-   /variable/CMAKE_XCODE_SCHEME_ZOMBIE_OBJECTS
-   /variable/PackageName_ROOT
-
-Variables that Describe the System
-==================================
-
-.. toctree::
-   :maxdepth: 1
-
-   /variable/ANDROID
-   /variable/APPLE
-   /variable/BORLAND
-   /variable/CMAKE_CL_64
-   /variable/CMAKE_COMPILER_2005
-   /variable/CMAKE_HOST_APPLE
-   /variable/CMAKE_HOST_SOLARIS
-   /variable/CMAKE_HOST_SYSTEM
-   /variable/CMAKE_HOST_SYSTEM_NAME
-   /variable/CMAKE_HOST_SYSTEM_PROCESSOR
-   /variable/CMAKE_HOST_SYSTEM_VERSION
-   /variable/CMAKE_HOST_UNIX
-   /variable/CMAKE_HOST_WIN32
-   /variable/CMAKE_LIBRARY_ARCHITECTURE
-   /variable/CMAKE_LIBRARY_ARCHITECTURE_REGEX
-   /variable/CMAKE_OBJECT_PATH_MAX
-   /variable/CMAKE_SYSTEM
-   /variable/CMAKE_SYSTEM_NAME
-   /variable/CMAKE_SYSTEM_PROCESSOR
-   /variable/CMAKE_SYSTEM_VERSION
-   /variable/CYGWIN
-   /variable/GHS-MULTI
-   /variable/IOS
-   /variable/MINGW
-   /variable/MSVC
-   /variable/MSVC10
-   /variable/MSVC11
-   /variable/MSVC12
-   /variable/MSVC14
-   /variable/MSVC60
-   /variable/MSVC70
-   /variable/MSVC71
-   /variable/MSVC80
-   /variable/MSVC90
-   /variable/MSVC_IDE
-   /variable/MSVC_TOOLSET_VERSION
-   /variable/MSVC_VERSION
-   /variable/MSYS
-   /variable/UNIX
-   /variable/WIN32
-   /variable/WINCE
-   /variable/WINDOWS_PHONE
-   /variable/WINDOWS_STORE
-   /variable/XCODE
-   /variable/XCODE_VERSION
-
-Variables that Control the Build
-================================
-
-.. toctree::
-   :maxdepth: 1
-
-   /variable/CMAKE_AIX_EXPORT_ALL_SYMBOLS
-   /variable/CMAKE_ANDROID_ANT_ADDITIONAL_OPTIONS
-   /variable/CMAKE_ANDROID_API
-   /variable/CMAKE_ANDROID_API_MIN
-   /variable/CMAKE_ANDROID_ARCH
-   /variable/CMAKE_ANDROID_ARCH_ABI
-   /variable/CMAKE_ANDROID_ARM_MODE
-   /variable/CMAKE_ANDROID_ARM_NEON
-   /variable/CMAKE_ANDROID_ASSETS_DIRECTORIES
-   /variable/CMAKE_ANDROID_EXCEPTIONS
-   /variable/CMAKE_ANDROID_GUI
-   /variable/CMAKE_ANDROID_JAR_DEPENDENCIES
-   /variable/CMAKE_ANDROID_JAR_DIRECTORIES
-   /variable/CMAKE_ANDROID_JAVA_SOURCE_DIR
-   /variable/CMAKE_ANDROID_NATIVE_LIB_DEPENDENCIES
-   /variable/CMAKE_ANDROID_NATIVE_LIB_DIRECTORIES
-   /variable/CMAKE_ANDROID_NDK
-   /variable/CMAKE_ANDROID_NDK_DEPRECATED_HEADERS
-   /variable/CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG
-   /variable/CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION
-   /variable/CMAKE_ANDROID_PROCESS_MAX
-   /variable/CMAKE_ANDROID_PROGUARD
-   /variable/CMAKE_ANDROID_PROGUARD_CONFIG_PATH
-   /variable/CMAKE_ANDROID_RTTI
-   /variable/CMAKE_ANDROID_SECURE_PROPS_PATH
-   /variable/CMAKE_ANDROID_SKIP_ANT_STEP
-   /variable/CMAKE_ANDROID_STANDALONE_TOOLCHAIN
-   /variable/CMAKE_ANDROID_STL_TYPE
-   /variable/CMAKE_ARCHIVE_OUTPUT_DIRECTORY
-   /variable/CMAKE_ARCHIVE_OUTPUT_DIRECTORY_CONFIG
-   /variable/CMAKE_AUTOGEN_ORIGIN_DEPENDS
-   /variable/CMAKE_AUTOGEN_PARALLEL
-   /variable/CMAKE_AUTOGEN_VERBOSE
-   /variable/CMAKE_AUTOMOC
-   /variable/CMAKE_AUTOMOC_COMPILER_PREDEFINES
-   /variable/CMAKE_AUTOMOC_DEPEND_FILTERS
-   /variable/CMAKE_AUTOMOC_MACRO_NAMES
-   /variable/CMAKE_AUTOMOC_MOC_OPTIONS
-   /variable/CMAKE_AUTOMOC_PATH_PREFIX
-   /variable/CMAKE_AUTORCC
-   /variable/CMAKE_AUTORCC_OPTIONS
-   /variable/CMAKE_AUTOUIC
-   /variable/CMAKE_AUTOUIC_OPTIONS
-   /variable/CMAKE_AUTOUIC_SEARCH_PATHS
-   /variable/CMAKE_BUILD_RPATH
-   /variable/CMAKE_BUILD_RPATH_USE_ORIGIN
-   /variable/CMAKE_BUILD_WITH_INSTALL_NAME_DIR
-   /variable/CMAKE_BUILD_WITH_INSTALL_RPATH
-   /variable/CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY
-   /variable/CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY_CONFIG
-   /variable/CMAKE_CONFIG_POSTFIX
-   /variable/CMAKE_CROSS_CONFIGS
-   /variable/CMAKE_CTEST_ARGUMENTS
-   /variable/CMAKE_CUDA_SEPARABLE_COMPILATION
-   /variable/CMAKE_CUDA_RESOLVE_DEVICE_SYMBOLS
-   /variable/CMAKE_CUDA_RUNTIME_LIBRARY
-   /variable/CMAKE_DEBUG_POSTFIX
-   /variable/CMAKE_DEFAULT_BUILD_TYPE
-   /variable/CMAKE_DEFAULT_CONFIGS
-   /variable/CMAKE_DISABLE_PRECOMPILE_HEADERS
-   /variable/CMAKE_ENABLE_EXPORTS
-   /variable/CMAKE_EXE_LINKER_FLAGS
-   /variable/CMAKE_EXE_LINKER_FLAGS_CONFIG
-   /variable/CMAKE_EXE_LINKER_FLAGS_CONFIG_INIT
-   /variable/CMAKE_EXE_LINKER_FLAGS_INIT
-   /variable/CMAKE_FOLDER
-   /variable/CMAKE_FRAMEWORK
-   /variable/CMAKE_FRAMEWORK_MULTI_CONFIG_POSTFIX_CONFIG
-   /variable/CMAKE_Fortran_FORMAT
-   /variable/CMAKE_Fortran_MODULE_DIRECTORY
-   /variable/CMAKE_Fortran_PREPROCESS
-   /variable/CMAKE_GHS_NO_SOURCE_GROUP_FILE
-   /variable/CMAKE_GLOBAL_AUTOGEN_TARGET
-   /variable/CMAKE_GLOBAL_AUTOGEN_TARGET_NAME
-   /variable/CMAKE_GLOBAL_AUTORCC_TARGET
-   /variable/CMAKE_GLOBAL_AUTORCC_TARGET_NAME
-   /variable/CMAKE_GNUtoMS
-   /variable/CMAKE_INCLUDE_CURRENT_DIR
-   /variable/CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE
-   /variable/CMAKE_INSTALL_NAME_DIR
-   /variable/CMAKE_INSTALL_REMOVE_ENVIRONMENT_RPATH
-   /variable/CMAKE_INSTALL_RPATH
-   /variable/CMAKE_INSTALL_RPATH_USE_LINK_PATH
-   /variable/CMAKE_INTERPROCEDURAL_OPTIMIZATION
-   /variable/CMAKE_INTERPROCEDURAL_OPTIMIZATION_CONFIG
-   /variable/CMAKE_IOS_INSTALL_COMBINED
-   /variable/CMAKE_LANG_CLANG_TIDY
-   /variable/CMAKE_LANG_COMPILER_LAUNCHER
-   /variable/CMAKE_LANG_CPPCHECK
-   /variable/CMAKE_LANG_CPPLINT
-   /variable/CMAKE_LANG_INCLUDE_WHAT_YOU_USE
-   /variable/CMAKE_LANG_LINK_LIBRARY_FILE_FLAG
-   /variable/CMAKE_LANG_LINK_LIBRARY_FLAG
-   /variable/CMAKE_LANG_VISIBILITY_PRESET
-   /variable/CMAKE_LIBRARY_OUTPUT_DIRECTORY
-   /variable/CMAKE_LIBRARY_OUTPUT_DIRECTORY_CONFIG
-   /variable/CMAKE_LIBRARY_PATH_FLAG
-   /variable/CMAKE_LINK_DEF_FILE_FLAG
-   /variable/CMAKE_LINK_DEPENDS_NO_SHARED
-   /variable/CMAKE_LINK_INTERFACE_LIBRARIES
-   /variable/CMAKE_LINK_LIBRARY_FILE_FLAG
-   /variable/CMAKE_LINK_LIBRARY_FLAG
-   /variable/CMAKE_LINK_WHAT_YOU_USE
-   /variable/CMAKE_MACOSX_BUNDLE
-   /variable/CMAKE_MACOSX_RPATH
-   /variable/CMAKE_MAP_IMPORTED_CONFIG_CONFIG
-   /variable/CMAKE_MODULE_LINKER_FLAGS
-   /variable/CMAKE_MODULE_LINKER_FLAGS_CONFIG
-   /variable/CMAKE_MODULE_LINKER_FLAGS_CONFIG_INIT
-   /variable/CMAKE_MODULE_LINKER_FLAGS_INIT
-   /variable/CMAKE_MSVCIDE_RUN_PATH
-   /variable/CMAKE_MSVC_RUNTIME_LIBRARY
-   /variable/CMAKE_NINJA_OUTPUT_PATH_PREFIX
-   /variable/CMAKE_NO_BUILTIN_CHRPATH
-   /variable/CMAKE_NO_SYSTEM_FROM_IMPORTED
-   /variable/CMAKE_OSX_ARCHITECTURES
-   /variable/CMAKE_OSX_DEPLOYMENT_TARGET
-   /variable/CMAKE_OSX_SYSROOT
-   /variable/CMAKE_PCH_WARN_INVALID
-   /variable/CMAKE_PDB_OUTPUT_DIRECTORY
-   /variable/CMAKE_PDB_OUTPUT_DIRECTORY_CONFIG
-   /variable/CMAKE_POSITION_INDEPENDENT_CODE
-   /variable/CMAKE_RUNTIME_OUTPUT_DIRECTORY
-   /variable/CMAKE_RUNTIME_OUTPUT_DIRECTORY_CONFIG
-   /variable/CMAKE_SHARED_LINKER_FLAGS
-   /variable/CMAKE_SHARED_LINKER_FLAGS_CONFIG
-   /variable/CMAKE_SHARED_LINKER_FLAGS_CONFIG_INIT
-   /variable/CMAKE_SHARED_LINKER_FLAGS_INIT
-   /variable/CMAKE_SKIP_BUILD_RPATH
-   /variable/CMAKE_SKIP_INSTALL_RPATH
-   /variable/CMAKE_STATIC_LINKER_FLAGS
-   /variable/CMAKE_STATIC_LINKER_FLAGS_CONFIG
-   /variable/CMAKE_STATIC_LINKER_FLAGS_CONFIG_INIT
-   /variable/CMAKE_STATIC_LINKER_FLAGS_INIT
-   /variable/CMAKE_TRY_COMPILE_CONFIGURATION
-   /variable/CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
-   /variable/CMAKE_TRY_COMPILE_TARGET_TYPE
-   /variable/CMAKE_UNITY_BUILD
-   /variable/CMAKE_UNITY_BUILD_BATCH_SIZE
-   /variable/CMAKE_USE_RELATIVE_PATHS
-   /variable/CMAKE_VISIBILITY_INLINES_HIDDEN
-   /variable/CMAKE_VS_GLOBALS
-   /variable/CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD
-   /variable/CMAKE_VS_INCLUDE_PACKAGE_TO_DEFAULT_BUILD
-   /variable/CMAKE_VS_JUST_MY_CODE_DEBUGGING
-   /variable/CMAKE_VS_SDK_EXCLUDE_DIRECTORIES
-   /variable/CMAKE_VS_SDK_EXECUTABLE_DIRECTORIES
-   /variable/CMAKE_VS_SDK_INCLUDE_DIRECTORIES
-   /variable/CMAKE_VS_SDK_LIBRARY_DIRECTORIES
-   /variable/CMAKE_VS_SDK_LIBRARY_WINRT_DIRECTORIES
-   /variable/CMAKE_VS_SDK_REFERENCE_DIRECTORIES
-   /variable/CMAKE_VS_SDK_SOURCE_DIRECTORIES
-   /variable/CMAKE_VS_WINRT_BY_DEFAULT
-   /variable/CMAKE_WIN32_EXECUTABLE
-   /variable/CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS
-   /variable/CMAKE_XCODE_ATTRIBUTE_an-attribute
-   /variable/EXECUTABLE_OUTPUT_PATH
-   /variable/LIBRARY_OUTPUT_PATH
-
-Variables for Languages
-=======================
-
-.. toctree::
-   :maxdepth: 1
-
-   /variable/CMAKE_COMPILER_IS_GNUCC
-   /variable/CMAKE_COMPILER_IS_GNUCXX
-   /variable/CMAKE_COMPILER_IS_GNUG77
-   /variable/CMAKE_CUDA_ARCHITECTURES
-   /variable/CMAKE_CUDA_COMPILE_FEATURES
-   /variable/CMAKE_CUDA_HOST_COMPILER
-   /variable/CMAKE_CUDA_EXTENSIONS
-   /variable/CMAKE_CUDA_STANDARD
-   /variable/CMAKE_CUDA_STANDARD_REQUIRED
-   /variable/CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES
-   /variable/CMAKE_CXX_COMPILE_FEATURES
-   /variable/CMAKE_CXX_EXTENSIONS
-   /variable/CMAKE_CXX_STANDARD
-   /variable/CMAKE_CXX_STANDARD_REQUIRED
-   /variable/CMAKE_C_COMPILE_FEATURES
-   /variable/CMAKE_C_EXTENSIONS
-   /variable/CMAKE_C_STANDARD
-   /variable/CMAKE_C_STANDARD_REQUIRED
-   /variable/CMAKE_Fortran_MODDIR_DEFAULT
-   /variable/CMAKE_Fortran_MODDIR_FLAG
-   /variable/CMAKE_Fortran_MODOUT_FLAG
-   /variable/CMAKE_LANG_ANDROID_TOOLCHAIN_MACHINE
-   /variable/CMAKE_LANG_ANDROID_TOOLCHAIN_PREFIX
-   /variable/CMAKE_LANG_ANDROID_TOOLCHAIN_SUFFIX
-   /variable/CMAKE_LANG_ARCHIVE_APPEND
-   /variable/CMAKE_LANG_ARCHIVE_CREATE
-   /variable/CMAKE_LANG_ARCHIVE_FINISH
-   /variable/CMAKE_LANG_COMPILER
-   /variable/CMAKE_LANG_COMPILER_EXTERNAL_TOOLCHAIN
-   /variable/CMAKE_LANG_COMPILER_ID
-   /variable/CMAKE_LANG_COMPILER_LOADED
-   /variable/CMAKE_LANG_COMPILER_PREDEFINES_COMMAND
-   /variable/CMAKE_LANG_COMPILER_TARGET
-   /variable/CMAKE_LANG_COMPILER_VERSION
-   /variable/CMAKE_LANG_COMPILE_OBJECT
-   /variable/CMAKE_LANG_CREATE_SHARED_LIBRARY
-   /variable/CMAKE_LANG_CREATE_SHARED_MODULE
-   /variable/CMAKE_LANG_CREATE_STATIC_LIBRARY
-   /variable/CMAKE_LANG_FLAGS
-   /variable/CMAKE_LANG_FLAGS_CONFIG
-   /variable/CMAKE_LANG_FLAGS_CONFIG_INIT
-   /variable/CMAKE_LANG_FLAGS_DEBUG
-   /variable/CMAKE_LANG_FLAGS_DEBUG_INIT
-   /variable/CMAKE_LANG_FLAGS_INIT
-   /variable/CMAKE_LANG_FLAGS_MINSIZEREL
-   /variable/CMAKE_LANG_FLAGS_MINSIZEREL_INIT
-   /variable/CMAKE_LANG_FLAGS_RELEASE
-   /variable/CMAKE_LANG_FLAGS_RELEASE_INIT
-   /variable/CMAKE_LANG_FLAGS_RELWITHDEBINFO
-   /variable/CMAKE_LANG_FLAGS_RELWITHDEBINFO_INIT
-   /variable/CMAKE_LANG_IGNORE_EXTENSIONS
-   /variable/CMAKE_LANG_IMPLICIT_INCLUDE_DIRECTORIES
-   /variable/CMAKE_LANG_IMPLICIT_LINK_DIRECTORIES
-   /variable/CMAKE_LANG_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES
-   /variable/CMAKE_LANG_IMPLICIT_LINK_LIBRARIES
-   /variable/CMAKE_LANG_LIBRARY_ARCHITECTURE
-   /variable/CMAKE_LANG_LINKER_PREFERENCE
-   /variable/CMAKE_LANG_LINKER_PREFERENCE_PROPAGATES
-   /variable/CMAKE_LANG_LINKER_WRAPPER_FLAG
-   /variable/CMAKE_LANG_LINKER_WRAPPER_FLAG_SEP
-   /variable/CMAKE_LANG_LINK_EXECUTABLE
-   /variable/CMAKE_LANG_OUTPUT_EXTENSION
-   /variable/CMAKE_LANG_SIMULATE_ID
-   /variable/CMAKE_LANG_SIMULATE_VERSION
-   /variable/CMAKE_LANG_SIZEOF_DATA_PTR
-   /variable/CMAKE_LANG_SOURCE_FILE_EXTENSIONS
-   /variable/CMAKE_LANG_STANDARD_INCLUDE_DIRECTORIES
-   /variable/CMAKE_LANG_STANDARD_LIBRARIES
-   /variable/CMAKE_OBJC_EXTENSIONS
-   /variable/CMAKE_OBJC_STANDARD
-   /variable/CMAKE_OBJC_STANDARD_REQUIRED
-   /variable/CMAKE_OBJCXX_EXTENSIONS
-   /variable/CMAKE_OBJCXX_STANDARD
-   /variable/CMAKE_OBJCXX_STANDARD_REQUIRED
-   /variable/CMAKE_Swift_LANGUAGE_VERSION
-   /variable/CMAKE_USER_MAKE_RULES_OVERRIDE_LANG
-
-Variables for CTest
-===================
-
-.. toctree::
-   :maxdepth: 1
-
-   /variable/CTEST_BINARY_DIRECTORY
-   /variable/CTEST_BUILD_COMMAND
-   /variable/CTEST_BUILD_NAME
-   /variable/CTEST_BZR_COMMAND
-   /variable/CTEST_BZR_UPDATE_OPTIONS
-   /variable/CTEST_CHANGE_ID
-   /variable/CTEST_CHECKOUT_COMMAND
-   /variable/CTEST_CONFIGURATION_TYPE
-   /variable/CTEST_CONFIGURE_COMMAND
-   /variable/CTEST_COVERAGE_COMMAND
-   /variable/CTEST_COVERAGE_EXTRA_FLAGS
-   /variable/CTEST_CURL_OPTIONS
-   /variable/CTEST_CUSTOM_COVERAGE_EXCLUDE
-   /variable/CTEST_CUSTOM_ERROR_EXCEPTION
-   /variable/CTEST_CUSTOM_ERROR_MATCH
-   /variable/CTEST_CUSTOM_ERROR_POST_CONTEXT
-   /variable/CTEST_CUSTOM_ERROR_PRE_CONTEXT
-   /variable/CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE
-   /variable/CTEST_CUSTOM_MAXIMUM_NUMBER_OF_ERRORS
-   /variable/CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS
-   /variable/CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE
-   /variable/CTEST_CUSTOM_MEMCHECK_IGNORE
-   /variable/CTEST_CUSTOM_POST_MEMCHECK
-   /variable/CTEST_CUSTOM_POST_TEST
-   /variable/CTEST_CUSTOM_PRE_MEMCHECK
-   /variable/CTEST_CUSTOM_PRE_TEST
-   /variable/CTEST_CUSTOM_TESTS_IGNORE
-   /variable/CTEST_CUSTOM_WARNING_EXCEPTION
-   /variable/CTEST_CUSTOM_WARNING_MATCH
-   /variable/CTEST_CVS_CHECKOUT
-   /variable/CTEST_CVS_COMMAND
-   /variable/CTEST_CVS_UPDATE_OPTIONS
-   /variable/CTEST_DROP_LOCATION
-   /variable/CTEST_DROP_METHOD
-   /variable/CTEST_DROP_SITE
-   /variable/CTEST_DROP_SITE_CDASH
-   /variable/CTEST_DROP_SITE_PASSWORD
-   /variable/CTEST_DROP_SITE_USER
-   /variable/CTEST_EXTRA_COVERAGE_GLOB
-   /variable/CTEST_GIT_COMMAND
-   /variable/CTEST_GIT_INIT_SUBMODULES
-   /variable/CTEST_GIT_UPDATE_CUSTOM
-   /variable/CTEST_GIT_UPDATE_OPTIONS
-   /variable/CTEST_HG_COMMAND
-   /variable/CTEST_HG_UPDATE_OPTIONS
-   /variable/CTEST_LABELS_FOR_SUBPROJECTS
-   /variable/CTEST_MEMORYCHECK_COMMAND
-   /variable/CTEST_MEMORYCHECK_COMMAND_OPTIONS
-   /variable/CTEST_MEMORYCHECK_SANITIZER_OPTIONS
-   /variable/CTEST_MEMORYCHECK_SUPPRESSIONS_FILE
-   /variable/CTEST_MEMORYCHECK_TYPE
-   /variable/CTEST_NIGHTLY_START_TIME
-   /variable/CTEST_P4_CLIENT
-   /variable/CTEST_P4_COMMAND
-   /variable/CTEST_P4_OPTIONS
-   /variable/CTEST_P4_UPDATE_OPTIONS
-   /variable/CTEST_RESOURCE_SPEC_FILE
-   /variable/CTEST_RUN_CURRENT_SCRIPT
-   /variable/CTEST_SCP_COMMAND
-   /variable/CTEST_SITE
-   /variable/CTEST_SUBMIT_URL
-   /variable/CTEST_SOURCE_DIRECTORY
-   /variable/CTEST_SVN_COMMAND
-   /variable/CTEST_SVN_OPTIONS
-   /variable/CTEST_SVN_UPDATE_OPTIONS
-   /variable/CTEST_TEST_LOAD
-   /variable/CTEST_TEST_TIMEOUT
-   /variable/CTEST_TRIGGER_SITE
-   /variable/CTEST_UPDATE_COMMAND
-   /variable/CTEST_UPDATE_OPTIONS
-   /variable/CTEST_UPDATE_VERSION_ONLY
-   /variable/CTEST_UPDATE_VERSION_OVERRIDE
-   /variable/CTEST_USE_LAUNCHERS
-
-Variables for CPack
-===================
-
-.. toctree::
-   :maxdepth: 1
-
-   /variable/CPACK_ABSOLUTE_DESTINATION_FILES
-   /variable/CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY
-   /variable/CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION
-   /variable/CPACK_INCLUDE_TOPLEVEL_DIRECTORY
-   /variable/CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS
-   /variable/CPACK_PACKAGING_INSTALL_PREFIX
-   /variable/CPACK_SET_DESTDIR
-   /variable/CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION
-
-Variable Expansion Operators
-============================
-
-.. toctree::
-   :maxdepth: 1
-
-   /variable/CACHE
-   /variable/ENV
-
-Internal Variables
-==================
-
-CMake has many internal variables.  Most of them are undocumented.
-Some of them, however, were at some point described as normal
-variables, and therefore may be encountered in legacy code. They
-are subject to change, and not recommended for use in project code.
-
-.. toctree::
-   :maxdepth: 1
-
-   /variable/CMAKE_HOME_DIRECTORY
-   /variable/CMAKE_INTERNAL_PLATFORM_ABI
-   /variable/CMAKE_LANG_COMPILER_ABI
-   /variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID
-   /variable/CMAKE_LANG_COMPILER_VERSION_INTERNAL
-   /variable/CMAKE_LANG_PLATFORM_ID
-   /variable/CMAKE_NOT_USING_CONFIG_FLAGS
-   /variable/CMAKE_VS_INTEL_Fortran_PROJECT_VERSION
diff --git a/share/cmake-3.18/Help/manual/cmake.1.rst b/share/cmake-3.18/Help/manual/cmake.1.rst
deleted file mode 100644
index 9becfc6..0000000
--- a/share/cmake-3.18/Help/manual/cmake.1.rst
+++ /dev/null
@@ -1,804 +0,0 @@
-.. cmake-manual-description: CMake Command-Line Reference
-
-cmake(1)
-********
-
-Synopsis
-========
-
-.. parsed-literal::
-
- `Generate a Project Buildsystem`_
-  cmake [<options>] <path-to-source>
-  cmake [<options>] <path-to-existing-build>
-  cmake [<options>] -S <path-to-source> -B <path-to-build>
-
- `Build a Project`_
-  cmake --build <dir> [<options>] [-- <build-tool-options>]
-
- `Install a Project`_
-  cmake --install <dir> [<options>]
-
- `Open a Project`_
-  cmake --open <dir>
-
- `Run a Script`_
-  cmake [{-D <var>=<value>}...] -P <cmake-script-file>
-
- `Run a Command-Line Tool`_
-  cmake -E <command> [<options>]
-
- `Run the Find-Package Tool`_
-  cmake --find-package [<options>]
-
- `View Help`_
-  cmake --help[-<topic>]
-
-Description
-===========
-
-The **cmake** executable is the command-line interface of the cross-platform
-buildsystem generator CMake.  The above `Synopsis`_ lists various actions
-the tool can perform as described in sections below.
-
-To build a software project with CMake, `Generate a Project Buildsystem`_.
-Optionally use **cmake** to `Build a Project`_, `Install a Project`_ or just
-run the corresponding build tool (e.g. ``make``) directly.  **cmake** can also
-be used to `View Help`_.
-
-The other actions are meant for use by software developers writing
-scripts in the :manual:`CMake language <cmake-language(7)>` to support
-their builds.
-
-For graphical user interfaces that may be used in place of **cmake**,
-see :manual:`ccmake <ccmake(1)>` and :manual:`cmake-gui <cmake-gui(1)>`.
-For command-line interfaces to the CMake testing and packaging facilities,
-see :manual:`ctest <ctest(1)>` and :manual:`cpack <cpack(1)>`.
-
-For more information on CMake at large, `see also`_ the links at the end
-of this manual.
-
-
-Introduction to CMake Buildsystems
-==================================
-
-A *buildsystem* describes how to build a project's executables and libraries
-from its source code using a *build tool* to automate the process.  For
-example, a buildsystem may be a ``Makefile`` for use with a command-line
-``make`` tool or a project file for an Integrated Development Environment
-(IDE).  In order to avoid maintaining multiple such buildsystems, a project
-may specify its buildsystem abstractly using files written in the
-:manual:`CMake language <cmake-language(7)>`.  From these files CMake
-generates a preferred buildsystem locally for each user through a backend
-called a *generator*.
-
-To generate a buildsystem with CMake, the following must be selected:
-
-Source Tree
-  The top-level directory containing source files provided by the project.
-  The project specifies its buildsystem using files as described in the
-  :manual:`cmake-language(7)` manual, starting with a top-level file named
-  ``CMakeLists.txt``.  These files specify build targets and their
-  dependencies as described in the :manual:`cmake-buildsystem(7)` manual.
-
-Build Tree
-  The top-level directory in which buildsystem files and build output
-  artifacts (e.g. executables and libraries) are to be stored.
-  CMake will write a ``CMakeCache.txt`` file to identify the directory
-  as a build tree and store persistent information such as buildsystem
-  configuration options.
-
-  To maintain a pristine source tree, perform an *out-of-source* build
-  by using a separate dedicated build tree.  An *in-source* build in
-  which the build tree is placed in the same directory as the source
-  tree is also supported, but discouraged.
-
-Generator
-  This chooses the kind of buildsystem to generate.  See the
-  :manual:`cmake-generators(7)` manual for documentation of all generators.
-  Run ``cmake --help`` to see a list of generators available locally.
-  Optionally use the ``-G`` option below to specify a generator, or simply
-  accept the default CMake chooses for the current platform.
-
-  When using one of the :ref:`Command-Line Build Tool Generators`
-  CMake expects that the environment needed by the compiler toolchain
-  is already configured in the shell.  When using one of the
-  :ref:`IDE Build Tool Generators`, no particular environment is needed.
-
-
-Generate a Project Buildsystem
-==============================
-
-Run CMake with one of the following command signatures to specify the
-source and build trees and generate a buildsystem:
-
-``cmake [<options>] <path-to-source>``
-  Uses the current working directory as the build tree, and
-  ``<path-to-source>`` as the source tree.  The specified path may
-  be absolute or relative to the current working directory.
-  The source tree must contain a ``CMakeLists.txt`` file and must
-  *not* contain a ``CMakeCache.txt`` file because the latter
-  identifies an existing build tree.  For example:
-
-  .. code-block:: console
-
-    $ mkdir build ; cd build
-    $ cmake ../src
-
-``cmake [<options>] <path-to-existing-build>``
-  Uses ``<path-to-existing-build>`` as the build tree, and loads the
-  path to the source tree from its ``CMakeCache.txt`` file, which must
-  have already been generated by a previous run of CMake.  The specified
-  path may be absolute or relative to the current working directory.
-  For example:
-
-  .. code-block:: console
-
-    $ cd build
-    $ cmake .
-
-``cmake [<options>] -S <path-to-source> -B <path-to-build>``
-  Uses ``<path-to-build>`` as the build tree and ``<path-to-source>``
-  as the source tree.  The specified paths may be absolute or relative
-  to the current working directory.  The source tree must contain a
-  ``CMakeLists.txt`` file.  The build tree will be created automatically
-  if it does not already exist.  For example:
-
-  .. code-block:: console
-
-    $ cmake -S src -B build
-
-In all cases the ``<options>`` may be zero or more of the `Options`_ below.
-
-After generating a buildsystem one may use the corresponding native
-build tool to build the project.  For example, after using the
-:generator:`Unix Makefiles` generator one may run ``make`` directly:
-
-  .. code-block:: console
-
-    $ make
-    $ make install
-
-Alternatively, one may use **cmake** to `Build a Project`_ by
-automatically choosing and invoking the appropriate native build tool.
-
-.. _`CMake Options`:
-
-Options
--------
-
-.. include:: OPTIONS_BUILD.txt
-
-``-L[A][H]``
- List non-advanced cached variables.
-
- List ``CACHE`` variables will run CMake and list all the variables from
- the CMake ``CACHE`` that are not marked as ``INTERNAL`` or :prop_cache:`ADVANCED`.
- This will effectively display current CMake settings, which can then be
- changed with ``-D`` option.  Changing some of the variables may result
- in more variables being created.  If ``A`` is specified, then it will
- display also advanced variables.  If ``H`` is specified, it will also
- display help for each variable.
-
-``-N``
- View mode only.
-
- Only load the cache.  Do not actually run configure and generate
- steps.
-
-``--graphviz=[file]``
- Generate graphviz of dependencies, see :module:`CMakeGraphVizOptions` for more.
-
- Generate a graphviz input file that will contain all the library and
- executable dependencies in the project.  See the documentation for
- :module:`CMakeGraphVizOptions` for more details.
-
-``--system-information [file]``
- Dump information about this system.
-
- Dump a wide range of information about the current system.  If run
- from the top of a binary tree for a CMake project it will dump
- additional information such as the cache, log files etc.
-
-``--log-level=<ERROR|WARNING|NOTICE|STATUS|VERBOSE|DEBUG|TRACE>``
- Set the log level.
-
- The :command:`message` command will only output messages of the specified
- log level or higher.  The default log level is ``STATUS``.
-
- To make a log level persist between CMake runs, set
- :variable:`CMAKE_MESSAGE_LOG_LEVEL` as a cache variable instead.
- If both the command line option and the variable are given, the command line
- option takes precedence.
-
- For backward compatibility reasons, ``--loglevel`` is also accepted as a
- synonym for this option.
-
-``--log-context``
- Enable the :command:`message` command outputting context attached to each
- message.
-
- This option turns on showing context for the current CMake run only.
- To make showing the context persistent for all subsequent CMake runs, set
- :variable:`CMAKE_MESSAGE_CONTEXT_SHOW` as a cache variable instead.
- When this command line option is given, :variable:`CMAKE_MESSAGE_CONTEXT_SHOW`
- is ignored.
-
-``--debug-trycompile``
- Do not delete the :command:`try_compile` build tree.
- Only useful on one :command:`try_compile` at a time.
-
- Do not delete the files and directories created for :command:`try_compile`
- calls.  This is useful in debugging failed try_compiles.  It may
- however change the results of the try-compiles as old junk from a
- previous try-compile may cause a different test to either pass or
- fail incorrectly.  This option is best used for one try-compile at a
- time, and only when debugging.
-
-``--debug-output``
- Put cmake in a debug mode.
-
- Print extra information during the cmake run like stack traces with
- :command:`message(SEND_ERROR)` calls.
-
-``--debug-find``
- Put cmake find commands in a debug mode.
-
- Print extra find call information during the cmake run to standard
- error. Output is designed for human consumption and not for parsing.
- See also the :variable:`CMAKE_FIND_DEBUG_MODE` variable for debugging
- a more local part of the project.
-
-``--trace``
- Put cmake in trace mode.
-
- Print a trace of all calls made and from where.
-
-``--trace-expand``
- Put cmake in trace mode.
-
- Like ``--trace``, but with variables expanded.
-
-``--trace-format=<format>``
- Put cmake in trace mode and sets the trace output format.
-
- ``<format>`` can be one of the following values.
-
-   ``human``
-     Prints each trace line in a human-readable format. This is the
-     default format.
-
-   ``json-v1``
-     Prints each line as a separate JSON document. Each document is
-     separated by a newline ( ``\n`` ). It is guaranteed that no
-     newline characters will be present inside a JSON document.
-
-     JSON trace format:
-
-     .. code-block:: json
-
-       {
-         "file": "/full/path/to/the/CMake/file.txt",
-         "line": 0,
-         "cmd": "add_executable",
-         "args": ["foo", "bar"],
-         "time": 1579512535.9687231,
-         "frame": 2
-       }
-
-     The members are:
-
-     ``file``
-       The full path to the CMake source file where the function
-       was called.
-
-     ``line``
-       The line in ``file`` of the function call.
-
-     ``cmd``
-       The name of the function that was called.
-
-     ``args``
-       A string list of all function parameters.
-
-     ``time``
-       Timestamp (seconds since epoch) of the function call.
-
-     ``frame``
-       Stack frame depth of the function that was called.
-
-     Additionally, the first JSON document outputted contains the
-     ``version`` key for the current major and minor version of the
-
-     JSON trace format:
-
-     .. code-block:: json
-
-       {
-         "version": {
-           "major": 1,
-           "minor": 0
-         }
-       }
-
-     The members are:
-
-     ``version``
-       Indicates the version of the JSON format. The version has a
-       major and minor components following semantic version conventions.
-
-``--trace-source=<file>``
- Put cmake in trace mode, but output only lines of a specified file.
-
- Multiple options are allowed.
-
-``--trace-redirect=<file>``
- Put cmake in trace mode and redirect trace output to a file instead of stderr.
-
-``--warn-uninitialized``
- Warn about uninitialized values.
-
- Print a warning when an uninitialized variable is used.
-
-``--warn-unused-vars``
- Warn about unused variables.
-
- Find variables that are declared or set, but not used.
-
-``--no-warn-unused-cli``
- Don't warn about command line options.
-
- Don't find variables that are declared on the command line, but not
- used.
-
-``--check-system-vars``
- Find problems with variable usage in system files.
-
- Normally, unused and uninitialized variables are searched for only
- in :variable:`CMAKE_SOURCE_DIR` and :variable:`CMAKE_BINARY_DIR`.
- This flag tells CMake to warn about other files as well.
-
-``--profiling-output=<path>``
- Used in conjuction with ``--profiling-format`` to output to a given path.
-
-``--profiling-format=<file>``
- Enable the output of profiling data of CMake script in the given format.
-
- This can aid performance analysis of CMake scripts executed. Third party
- applications should be used to process the output into human readable format.
-
- Currently supported values are:
- ``google-trace`` Outputs in Google Trace Format, which can be parsed by the
- about:tracing tab of Google Chrome or using a plugin for a tool like Trace
- Compass.
-
-.. _`Build Tool Mode`:
-
-Build a Project
-===============
-
-CMake provides a command-line signature to build an already-generated
-project binary tree:
-
-.. code-block:: shell
-
-  cmake --build <dir> [<options>] [-- <build-tool-options>]
-
-This abstracts a native build tool's command-line interface with the
-following options:
-
-``--build <dir>``
-  Project binary directory to be built.  This is required and must be first.
-
-``--parallel [<jobs>], -j [<jobs>]``
-  The maximum number of concurrent processes to use when building.
-  If ``<jobs>`` is omitted the native build tool's default number is used.
-
-  The :envvar:`CMAKE_BUILD_PARALLEL_LEVEL` environment variable, if set,
-  specifies a default parallel level when this option is not given.
-
-  Some native build tools always build in parallel.  The use of ``<jobs>``
-  value of ``1`` can be used to limit to a single job.
-
-``--target <tgt>..., -t <tgt>...``
-  Build ``<tgt>`` instead of the default target.  Multiple targets may be
-  given, separated by spaces.
-
-``--config <cfg>``
-  For multi-configuration tools, choose configuration ``<cfg>``.
-
-``--clean-first``
-  Build target ``clean`` first, then build.
-  (To clean only, use ``--target clean``.)
-
-``--use-stderr``
-  Ignored.  Behavior is default in CMake >= 3.0.
-
-``--verbose, -v``
-  Enable verbose output - if supported - including the build commands to be
-  executed.
-
-  This option can be omitted if :envvar:`VERBOSE` environment variable or
-  :variable:`CMAKE_VERBOSE_MAKEFILE` cached variable is set.
-
-
-``--``
-  Pass remaining options to the native tool.
-
-Run ``cmake --build`` with no options for quick help.
-
-Install a Project
-=================
-
-CMake provides a command-line signature to install an already-generated
-project binary tree:
-
-.. code-block:: shell
-
-  cmake --install <dir> [<options>]
-
-This may be used after building a project to run installation without
-using the generated build system or the native build tool.
-The options are:
-
-``--install <dir>``
-  Project binary directory to install. This is required and must be first.
-
-``--config <cfg>``
-  For multi-configuration generators, choose configuration ``<cfg>``.
-
-``--component <comp>``
-  Component-based install. Only install component ``<comp>``.
-
-``--prefix <prefix>``
-  Override the installation prefix, :variable:`CMAKE_INSTALL_PREFIX`.
-
-``--strip``
-  Strip before installing.
-
-``-v, --verbose``
-  Enable verbose output.
-
-  This option can be omitted if :envvar:`VERBOSE` environment variable is set.
-
-Run ``cmake --install`` with no options for quick help.
-
-Open a Project
-==============
-
-.. code-block:: shell
-
-  cmake --open <dir>
-
-Open the generated project in the associated application.  This is only
-supported by some generators.
-
-
-.. _`Script Processing Mode`:
-
-Run a Script
-============
-
-.. code-block:: shell
-
-  cmake [{-D <var>=<value>}...] -P <cmake-script-file> [-- <unparsed-options>...]
-
-Process the given cmake file as a script written in the CMake
-language.  No configure or generate step is performed and the cache
-is not modified.  If variables are defined using ``-D``, this must be
-done before the ``-P`` argument.
-
-Any options after ``--`` are not parsed by CMake, but they are still included
-in the set of :variable:`CMAKE_ARGV<n> <CMAKE_ARGV0>` variables passed to the
-script (including the ``--`` itself).
-
-
-Run a Command-Line Tool
-=======================
-
-CMake provides builtin command-line tools through the signature
-
-.. code-block:: shell
-
-  cmake -E <command> [<options>]
-
-Run ``cmake -E`` or ``cmake -E help`` for a summary of commands.
-Available commands are:
-
-``capabilities``
-  Report cmake capabilities in JSON format. The output is a JSON object
-  with the following keys:
-
-  ``version``
-    A JSON object with version information. Keys are:
-
-    ``string``
-      The full version string as displayed by cmake ``--version``.
-    ``major``
-      The major version number in integer form.
-    ``minor``
-      The minor version number in integer form.
-    ``patch``
-      The patch level in integer form.
-    ``suffix``
-      The cmake version suffix string.
-    ``isDirty``
-      A bool that is set if the cmake build is from a dirty tree.
-
-  ``generators``
-    A list available generators. Each generator is a JSON object with the
-    following keys:
-
-    ``name``
-      A string containing the name of the generator.
-    ``toolsetSupport``
-      ``true`` if the generator supports toolsets and ``false`` otherwise.
-    ``platformSupport``
-      ``true`` if the generator supports platforms and ``false`` otherwise.
-    ``extraGenerators``
-      A list of strings with all the extra generators compatible with
-      the generator.
-
-  ``fileApi``
-    Optional member that is present when the :manual:`cmake-file-api(7)`
-    is available.  The value is a JSON object with one member:
-
-    ``requests``
-      A JSON array containing zero or more supported file-api requests.
-      Each request is a JSON object with members:
-
-      ``kind``
-        Specifies one of the supported :ref:`file-api object kinds`.
-
-      ``version``
-        A JSON array whose elements are each a JSON object containing
-        ``major`` and ``minor`` members specifying non-negative integer
-        version components.
-
-  ``serverMode``
-    ``true`` if cmake supports server-mode and ``false`` otherwise.
-
-``cat <files>...``
-  Concatenate files and print on the standard output.
-
-``chdir <dir> <cmd> [<arg>...]``
-  Change the current working directory and run a command.
-
-``compare_files [--ignore-eol] <file1> <file2>``
-  Check if ``<file1>`` is same as ``<file2>``. If files are the same,
-  then returns ``0``, if not it returns ``1``.  The ``--ignore-eol`` option
-  implies line-wise comparison and ignores LF/CRLF differences.
-
-``copy <file>... <destination>``
-  Copy files to ``<destination>`` (either file or directory).
-  If multiple files are specified, the ``<destination>`` must be
-  directory and it must exist. Wildcards are not supported.
-  ``copy`` does follow symlinks. That means it does not copy symlinks,
-  but the files or directories it point to.
-
-``copy_directory <dir>... <destination>``
-  Copy content of ``<dir>...`` directories to ``<destination>`` directory.
-  If ``<destination>`` directory does not exist it will be created.
-  ``copy_directory`` does follow symlinks.
-
-``copy_if_different <file>... <destination>``
-  Copy files to ``<destination>`` (either file or directory) if
-  they have changed.
-  If multiple files are specified, the ``<destination>`` must be
-  directory and it must exist.
-  ``copy_if_different`` does follow symlinks.
-
-``create_symlink <old> <new>``
-  Create a symbolic link ``<new>`` naming ``<old>``.
-
-  .. note::
-    Path to where ``<new>`` symbolic link will be created has to exist beforehand.
-
-``echo [<string>...]``
-  Displays arguments as text.
-
-``echo_append [<string>...]``
-  Displays arguments as text but no new line.
-
-``env [--unset=NAME]... [NAME=VALUE]... COMMAND [ARG]...``
-  Run command in a modified environment.
-
-``environment``
-  Display the current environment variables.
-
-``false``
-  Do nothing, with an exit code of 1.
-
-``make_directory <dir>...``
-  Create ``<dir>`` directories.  If necessary, create parent
-  directories too.  If a directory already exists it will be
-  silently ignored.
-
-``md5sum <file>...``
-  Create MD5 checksum of files in ``md5sum`` compatible format::
-
-     351abe79cd3800b38cdfb25d45015a15  file1.txt
-     052f86c15bbde68af55c7f7b340ab639  file2.txt
-
-``sha1sum <file>...``
-  Create SHA1 checksum of files in ``sha1sum`` compatible format::
-
-     4bb7932a29e6f73c97bb9272f2bdc393122f86e0  file1.txt
-     1df4c8f318665f9a5f2ed38f55adadb7ef9f559c  file2.txt
-
-``sha224sum <file>...``
-  Create SHA224 checksum of files in ``sha224sum`` compatible format::
-
-     b9b9346bc8437bbda630b0b7ddfc5ea9ca157546dbbf4c613192f930  file1.txt
-     6dfbe55f4d2edc5fe5c9197bca51ceaaf824e48eba0cc453088aee24  file2.txt
-
-``sha256sum <file>...``
-  Create SHA256 checksum of files in ``sha256sum`` compatible format::
-
-     76713b23615d31680afeb0e9efe94d47d3d4229191198bb46d7485f9cb191acc  file1.txt
-     15b682ead6c12dedb1baf91231e1e89cfc7974b3787c1e2e01b986bffadae0ea  file2.txt
-
-``sha384sum <file>...``
-  Create SHA384 checksum of files in ``sha384sum`` compatible format::
-
-     acc049fedc091a22f5f2ce39a43b9057fd93c910e9afd76a6411a28a8f2b8a12c73d7129e292f94fc0329c309df49434  file1.txt
-     668ddeb108710d271ee21c0f3acbd6a7517e2b78f9181c6a2ff3b8943af92b0195dcb7cce48aa3e17893173c0a39e23d  file2.txt
-
-``sha512sum <file>...``
-  Create SHA512 checksum of files in ``sha512sum`` compatible format::
-
-     2a78d7a6c5328cfb1467c63beac8ff21794213901eaadafd48e7800289afbc08e5fb3e86aa31116c945ee3d7bf2a6194489ec6101051083d1108defc8e1dba89  file1.txt
-     7a0b54896fe5e70cca6dd643ad6f672614b189bf26f8153061c4d219474b05dad08c4e729af9f4b009f1a1a280cb625454bf587c690f4617c27e3aebdf3b7a2d  file2.txt
-
-``remove [-f] <file>...``
-  .. deprecated:: 3.17
-
-  Remove the file(s). The planned behaviour was that if any of the
-  listed files already do not exist, the command returns a non-zero exit code,
-  but no message is logged. The ``-f`` option changes the behavior to return a
-  zero exit code (i.e. success) in such situations instead.
-  ``remove`` does not follow symlinks. That means it remove only symlinks
-  and not files it point to.
-
-  The implementation was buggy and always returned 0. It cannot be fixed without
-  breaking backwards compatibility. Use ``rm`` instead.
-
-``remove_directory <dir>...``
-  .. deprecated:: 3.17
-
-  Remove ``<dir>`` directories and their contents. If a directory does
-  not exist it will be silently ignored.  If ``<dir>`` is a symlink to
-  a directory, just the symlink will be removed.
-  Use ``rm`` instead.
-
-``rename <oldname> <newname>``
-  Rename a file or directory (on one volume). If file with the ``<newname>`` name
-  already exists, then it will be silently replaced.
-
-``rm [-rRf] <file> <dir>...``
-  Remove the files ``<file>`` or directories ``dir``.
-  Use ``-r`` or ``-R`` to remove directories and their contents recursively.
-  If any of the listed files/directories do not exist, the command returns a
-  non-zero exit code, but no message is logged. The ``-f`` option changes
-  the behavior to return a zero exit code (i.e. success) in such
-  situations instead.
-
-``server``
-  Launch :manual:`cmake-server(7)` mode.
-
-``sleep <number>...``
-  Sleep for given number of seconds.
-
-``tar [cxt][vf][zjJ] file.tar [<options>] [--] [<pathname>...]``
-  Create or extract a tar or zip archive.  Options are:
-
-  ``c``
-    Create a new archive containing the specified files.
-    If used, the ``<pathname>...`` argument is mandatory.
-  ``x``
-    Extract to disk from the archive.
-    The ``<pathname>...`` argument could be used to extract only selected files
-    or directories.
-    When extracting selected files or directories, you must provide their exact
-    names including the path, as printed by list (``-t``).
-  ``t``
-    List archive contents.
-    The ``<pathname>...`` argument could be used to list only selected files
-    or directories.
-  ``v``
-    Produce verbose output.
-  ``z``
-    Compress the resulting archive with gzip.
-  ``j``
-    Compress the resulting archive with bzip2.
-  ``J``
-    Compress the resulting archive with XZ.
-  ``--zstd``
-    Compress the resulting archive with Zstandard.
-  ``--files-from=<file>``
-    Read file names from the given file, one per line.
-    Blank lines are ignored.  Lines may not start in ``-``
-    except for ``--add-file=<name>`` to add files whose
-    names start in ``-``.
-  ``--format=<format>``
-    Specify the format of the archive to be created.
-    Supported formats are: ``7zip``, ``gnutar``, ``pax``,
-    ``paxr`` (restricted pax, default), and ``zip``.
-  ``--mtime=<date>``
-    Specify modification time recorded in tarball entries.
-  ``--``
-    Stop interpreting options and treat all remaining arguments
-    as file names, even if they start with ``-``.
-
-
-``time <command> [<args>...]``
-  Run command and display elapsed time.
-
-``touch <file>...``
-  Creates ``<file>`` if file do not exist.
-  If ``<file>`` exists, it is changing ``<file>`` access and modification times.
-
-``touch_nocreate <file>...``
-  Touch a file if it exists but do not create it.  If a file does
-  not exist it will be silently ignored.
-
-``true``
-  Do nothing, with an exit code of 0.
-
-Windows-specific Command-Line Tools
------------------------------------
-
-The following ``cmake -E`` commands are available only on Windows:
-
-``delete_regv <key>``
-  Delete Windows registry value.
-
-``env_vs8_wince <sdkname>``
-  Displays a batch file which sets the environment for the provided
-  Windows CE SDK installed in VS2005.
-
-``env_vs9_wince <sdkname>``
-  Displays a batch file which sets the environment for the provided
-  Windows CE SDK installed in VS2008.
-
-``write_regv <key> <value>``
-  Write Windows registry value.
-
-
-Run the Find-Package Tool
-=========================
-
-CMake provides a pkg-config like helper for Makefile-based projects:
-
-.. code-block:: shell
-
-  cmake --find-package [<options>]
-
-It searches a package using :command:`find_package()` and prints the
-resulting flags to stdout.  This can be used instead of pkg-config
-to find installed libraries in plain Makefile-based projects or in
-autoconf-based projects (via ``share/aclocal/cmake.m4``).
-
-.. note::
-  This mode is not well-supported due to some technical limitations.
-  It is kept for compatibility but should not be used in new projects.
-
-
-View Help
-=========
-
-To print selected pages from the CMake documentation, use
-
-.. code-block:: shell
-
-  cmake --help[-<topic>]
-
-with one of the following options:
-
-.. include:: OPTIONS_HELP.txt
-
-
-See Also
-========
-
-.. include:: LINKS.txt
diff --git a/share/cmake-3.18/Help/manual/ctest.1.rst b/share/cmake-3.18/Help/manual/ctest.1.rst
deleted file mode 100644
index d3ab75a..0000000
--- a/share/cmake-3.18/Help/manual/ctest.1.rst
+++ /dev/null
@@ -1,1593 +0,0 @@
-.. cmake-manual-description: CTest Command-Line Reference
-
-ctest(1)
-********
-
-.. contents::
-
-Synopsis
-========
-
-.. parsed-literal::
-
- ctest [<options>]
- ctest --build-and-test <path-to-source> <path-to-build>
-       --build-generator <generator> [<options>...]
-       [--build-options <opts>...] [--test-command <command> [<args>...]]
- ctest {-D <dashboard> | -M <model> -T <action> | -S <script> | -SP <script>}
-       [-- <dashboard-options>...]
-
-Description
-===========
-
-The **ctest** executable is the CMake test driver program.
-CMake-generated build trees created for projects that use the
-:command:`enable_testing` and :command:`add_test` commands have testing support.
-This program will run the tests and report results.
-
-Options
-=======
-
-``-C <cfg>, --build-config <cfg>``
- Choose configuration to test.
-
- Some CMake-generated build trees can have multiple build
- configurations in the same tree.  This option can be used to specify
- which one should be tested.  Example configurations are ``Debug`` and
- ``Release``.
-
-``--progress``
- Enable short progress output from tests.
-
- When the output of **ctest** is being sent directly to a terminal, the
- progress through the set of tests is reported by updating the same line
- rather than printing start and end messages for each test on new lines.
- This can significantly reduce the verbosity of the test output.
- Test completion messages are still output on their own line for failed
- tests and the final test summary will also still be logged.
-
- This option can also be enabled by setting the environment variable
- :envvar:`CTEST_PROGRESS_OUTPUT`.
-
-``-V,--verbose``
- Enable verbose output from tests.
-
- Test output is normally suppressed and only summary information is
- displayed.  This option will show all test output.
-
-``-VV,--extra-verbose``
- Enable more verbose output from tests.
-
- Test output is normally suppressed and only summary information is
- displayed.  This option will show even more test output.
-
-``--debug``
- Displaying more verbose internals of CTest.
-
- This feature will result in a large number of output that is mostly
- useful for debugging dashboard problems.
-
-``--output-on-failure``
- Output anything outputted by the test program if the test should fail.
- This option can also be enabled by setting the
- :envvar:`CTEST_OUTPUT_ON_FAILURE` environment variable
-
-``--stop-on-failure``
- Stop running the tests when the first failure happens.
-
-``-F``
- Enable failover.
-
- This option allows CTest to resume a test set execution that was
- previously interrupted.  If no interruption occurred, the ``-F`` option
- will have no effect.
-
-``-j <jobs>, --parallel <jobs>``
- Run the tests in parallel using the given number of jobs.
-
- This option tells CTest to run the tests in parallel using given
- number of jobs. This option can also be set by setting the
- :envvar:`CTEST_PARALLEL_LEVEL` environment variable.
-
- This option can be used with the :prop_test:`PROCESSORS` test property.
-
- See `Label and Subproject Summary`_.
-
-``--resource-spec-file <file>``
- Run CTest with :ref:`resource allocation <ctest-resource-allocation>` enabled,
- using the
- :ref:`resource specification file <ctest-resource-specification-file>`
- specified in ``<file>``.
-
- When ``ctest`` is run as a `Dashboard Client`_ this sets the
- ``ResourceSpecFile`` option of the `CTest Test Step`_.
-
-``--test-load <level>``
- While running tests in parallel (e.g. with ``-j``), try not to start
- tests when they may cause the CPU load to pass above a given threshold.
-
- When ``ctest`` is run as a `Dashboard Client`_ this sets the
- ``TestLoad`` option of the `CTest Test Step`_.
-
-``-Q,--quiet``
- Make CTest quiet.
-
- This option will suppress all the output.  The output log file will
- still be generated if the ``--output-log`` is specified.  Options such
- as ``--verbose``, ``--extra-verbose``, and ``--debug`` are ignored
- if ``--quiet`` is specified.
-
-``-O <file>, --output-log <file>``
- Output to log file.
-
- This option tells CTest to write all its output to a ``<file>`` log file.
-
-``-N,--show-only[=<format>]``
- Disable actual execution of tests.
-
- This option tells CTest to list the tests that would be run but not
- actually run them.  Useful in conjunction with the ``-R`` and ``-E``
- options.
-
- ``<format>`` can be one of the following values.
-
-   ``human``
-     Human-friendly output.  This is not guaranteed to be stable.
-     This is the default.
-
-   ``json-v1``
-     Dump the test information in JSON format.
-     See `Show as JSON Object Model`_.
-
-``-L <regex>, --label-regex <regex>``
- Run tests with labels matching regular expression.
-
- This option tells CTest to run only the tests whose labels match the
- given regular expression.
-
-``-R <regex>, --tests-regex <regex>``
- Run tests matching regular expression.
-
- This option tells CTest to run only the tests whose names match the
- given regular expression.
-
-``-E <regex>, --exclude-regex <regex>``
- Exclude tests matching regular expression.
-
- This option tells CTest to NOT run the tests whose names match the
- given regular expression.
-
-``-LE <regex>, --label-exclude <regex>``
- Exclude tests with labels matching regular expression.
-
- This option tells CTest to NOT run the tests whose labels match the
- given regular expression.
-
-``-FA <regex>, --fixture-exclude-any <regex>``
- Exclude fixtures matching ``<regex>`` from automatically adding any tests to
- the test set.
-
- If a test in the set of tests to be executed requires a particular fixture,
- that fixture's setup and cleanup tests would normally be added to the test set
- automatically. This option prevents adding setup or cleanup tests for fixtures
- matching the ``<regex>``. Note that all other fixture behavior is retained,
- including test dependencies and skipping tests that have fixture setup tests
- that fail.
-
-``-FS <regex>, --fixture-exclude-setup <regex>``
- Same as ``-FA`` except only matching setup tests are excluded.
-
-``-FC <regex>, --fixture-exclude-cleanup <regex>``
- Same as ``-FA`` except only matching cleanup tests are excluded.
-
-``-D <dashboard>, --dashboard <dashboard>``
- Execute dashboard test.
-
- This option tells CTest to act as a CDash client and perform a
- dashboard test.  All tests are ``<Mode><Test>``, where ``<Mode>`` can be
- ``Experimental``, ``Nightly``, and ``Continuous``, and ``<Test>`` can be
- ``Start``, ``Update``, ``Configure``, ``Build``, ``Test``,
- ``Coverage``, and ``Submit``.
-
- See `Dashboard Client`_.
-
-``-D <var>:<type>=<value>``
- Define a variable for script mode.
-
- Pass in variable values on the command line.  Use in conjunction
- with ``-S`` to pass variable values to a dashboard script.  Parsing ``-D``
- arguments as variable values is only attempted if the value
- following ``-D`` does not match any of the known dashboard types.
-
-``-M <model>, --test-model <model>``
- Sets the model for a dashboard.
-
- This option tells CTest to act as a CDash client where the ``<model>``
- can be ``Experimental``, ``Nightly``, and ``Continuous``.
- Combining ``-M`` and ``-T`` is similar to ``-D``.
-
- See `Dashboard Client`_.
-
-``-T <action>, --test-action <action>``
- Sets the dashboard action to perform.
-
- This option tells CTest to act as a CDash client and perform some
- action such as ``start``, ``build``, ``test`` etc. See
- `Dashboard Client Steps`_ for the full list of actions.
- Combining ``-M`` and ``-T`` is similar to ``-D``.
-
- See `Dashboard Client`_.
-
-``-S <script>, --script <script>``
- Execute a dashboard for a configuration.
-
- This option tells CTest to load in a configuration script which sets
- a number of parameters such as the binary and source directories.
- Then CTest will do what is required to create and run a dashboard.
- This option basically sets up a dashboard and then runs ``ctest -D``
- with the appropriate options.
-
- See `Dashboard Client`_.
-
-``-SP <script>, --script-new-process <script>``
- Execute a dashboard for a configuration.
-
- This option does the same operations as ``-S`` but it will do them in a
- separate process.  This is primarily useful in cases where the
- script may modify the environment and you do not want the modified
- environment to impact other ``-S`` scripts.
-
- See `Dashboard Client`_.
-
-``-I [Start,End,Stride,test#,test#|Test file], --tests-information``
- Run a specific number of tests by number.
-
- This option causes CTest to run tests starting at number ``Start``,
- ending at number ``End``, and incrementing by ``Stride``.  Any additional
- numbers after ``Stride`` are considered individual test numbers.  ``Start``,
- ``End``, or ``Stride`` can be empty.  Optionally a file can be given that
- contains the same syntax as the command line.
-
-``-U, --union``
- Take the Union of ``-I`` and ``-R``.
-
- When both ``-R`` and ``-I`` are specified by default the intersection of
- tests are run.  By specifying ``-U`` the union of tests is run instead.
-
-``--rerun-failed``
- Run only the tests that failed previously.
-
- This option tells CTest to perform only the tests that failed during
- its previous run.  When this option is specified, CTest ignores all
- other options intended to modify the list of tests to run (``-L``, ``-R``,
- ``-E``, ``-LE``, ``-I``, etc).  In the event that CTest runs and no tests
- fail, subsequent calls to CTest with the ``--rerun-failed`` option will run
- the set of tests that most recently failed (if any).
-
-``--repeat <mode>:<n>``
-  Run tests repeatedly based on the given ``<mode>`` up to ``<n>`` times.
-  The modes are:
-
-  ``until-fail``
-    Require each test to run ``<n>`` times without failing in order to pass.
-    This is useful in finding sporadic failures in test cases.
-
-  ``until-pass``
-    Allow each test to run up to ``<n>`` times in order to pass.
-    Repeats tests if they fail for any reason.
-    This is useful in tolerating sporadic failures in test cases.
-
-  ``after-timeout``
-    Allow each test to run up to ``<n>`` times in order to pass.
-    Repeats tests only if they timeout.
-    This is useful in tolerating sporadic timeouts in test cases
-    on busy machines.
-
-``--repeat-until-fail <n>``
- Equivalent to ``--repeat until-fail:<n>``.
-
-``--max-width <width>``
- Set the max width for a test name to output.
-
- Set the maximum width for each test name to show in the output.
- This allows the user to widen the output to avoid clipping the test
- name which can be very annoying.
-
-``--interactive-debug-mode [0|1]``
- Set the interactive mode to ``0`` or ``1``.
-
- This option causes CTest to run tests in either an interactive mode
- or a non-interactive mode.  On Windows this means that in
- non-interactive mode, all system debug pop up windows are blocked.
- In dashboard mode (``Experimental``, ``Nightly``, ``Continuous``), the default
- is non-interactive.  When just running tests not for a dashboard the
- default is to allow popups and interactive debugging.
-
-``--no-label-summary``
- Disable timing summary information for labels.
-
- This option tells CTest not to print summary information for each
- label associated with the tests run.  If there are no labels on the
- tests, nothing extra is printed.
-
- See `Label and Subproject Summary`_.
-
-``--no-subproject-summary``
- Disable timing summary information for subprojects.
-
- This option tells CTest not to print summary information for each
- subproject associated with the tests run.  If there are no subprojects on the
- tests, nothing extra is printed.
-
- See `Label and Subproject Summary`_.
-
-``--build-and-test``
-See `Build and Test Mode`_.
-
-``--test-output-size-passed <size>``
- Limit the output for passed tests to ``<size>`` bytes.
-
-``--test-output-size-failed <size>``
- Limit the output for failed tests to ``<size>`` bytes.
-
-``--overwrite``
- Overwrite CTest configuration option.
-
- By default CTest uses configuration options from configuration file.
- This option will overwrite the configuration option.
-
-``--force-new-ctest-process``
- Run child CTest instances as new processes.
-
- By default CTest will run child CTest instances within the same
- process.  If this behavior is not desired, this argument will
- enforce new processes for child CTest processes.
-
-``--schedule-random``
- Use a random order for scheduling tests.
-
- This option will run the tests in a random order.  It is commonly
- used to detect implicit dependencies in a test suite.
-
-``--submit-index``
- Legacy option for old Dart2 dashboard server feature.
- Do not use.
-
-``--timeout <seconds>``
- Set the default test timeout.
-
- This option effectively sets a timeout on all tests that do not
- already have a timeout set on them via the :prop_test:`TIMEOUT`
- property.
-
-``--stop-time <time>``
- Set a time at which all tests should stop running.
-
- Set a real time of day at which all tests should timeout.  Example:
- ``7:00:00 -0400``.  Any time format understood by the curl date parser
- is accepted.  Local time is assumed if no timezone is specified.
-
-``--print-labels``
- Print all available test labels.
-
- This option will not run any tests, it will simply print the list of
- all labels associated with the test set.
-
-``--no-tests=<[error|ignore]>``
- Regard no tests found either as error or ignore it.
-
- If no tests were found, the default behavior of CTest is to always log an
- error message but to return an error code in script mode only.  This option
- unifies the behavior of CTest by either returning an error code if no tests
- were found or by ignoring it.
-
-.. include:: OPTIONS_HELP.txt
-
-.. _`Label and Subproject Summary`:
-
-Label and Subproject Summary
-============================
-
-CTest prints timing summary information for each ``LABEL`` and subproject
-associated with the tests run. The label time summary will not include labels
-that are mapped to subprojects.
-
-When the :prop_test:`PROCESSORS` test property is set, CTest will display a
-weighted test timing result in label and subproject summaries. The time is
-reported with `sec*proc` instead of just `sec`.
-
-The weighted time summary reported for each label or subproject ``j``
-is computed as::
-
-  Weighted Time Summary for Label/Subproject j =
-      sum(raw_test_time[j,i] * num_processors[j,i], i=1...num_tests[j])
-
-  for labels/subprojects j=1...total
-
-where:
-
-* ``raw_test_time[j,i]``: Wall-clock time for the ``i`` test
-  for the ``j`` label or subproject
-* ``num_processors[j,i]``: Value of the CTest :prop_test:`PROCESSORS` property
-  for the ``i`` test for the ``j`` label or subproject
-* ``num_tests[j]``: Number of tests associated with the ``j`` label or subproject
-* ``total``: Total number of labels or subprojects that have at least one test run
-
-Therefore, the weighted time summary for each label or subproject represents
-the amount of time that CTest gave to run the tests for each label or
-subproject and gives a good representation of the total expense of the tests
-for each label or subproject when compared to other labels or subprojects.
-
-For example, if ``SubprojectA`` showed ``100 sec*proc`` and ``SubprojectB`` showed
-``10 sec*proc``, then CTest allocated approximately 10 times the CPU/core time
-to run the tests for ``SubprojectA`` than for ``SubprojectB`` (e.g. so if effort
-is going to be expended to reduce the cost of the test suite for the whole
-project, then reducing the cost of the test suite for ``SubprojectA`` would
-likely have a larger impact than effort to reduce the cost of the test suite
-for ``SubprojectB``).
-
-.. _`Build and Test Mode`:
-
-Build and Test Mode
-===================
-
-CTest provides a command-line signature to configure (i.e. run cmake on),
-build, and/or execute a test::
-
-  ctest --build-and-test <path-to-source> <path-to-build>
-        --build-generator <generator>
-        [<options>...]
-        [--build-options <opts>...]
-        [--test-command <command> [<args>...]]
-
-The configure and test steps are optional. The arguments to this command line
-are the source and binary directories.  The ``--build-generator`` option *must*
-be provided to use ``--build-and-test``.  If ``--test-command`` is specified
-then that will be run after the build is complete.  Other options that affect
-this mode include:
-
-``--build-target``
- Specify a specific target to build.
-
- If left out the ``all`` target is built.
-
-``--build-nocmake``
- Run the build without running cmake first.
-
- Skip the cmake step.
-
-``--build-run-dir``
- Specify directory to run programs from.
-
- Directory where programs will be after it has been compiled.
-
-``--build-two-config``
- Run CMake twice.
-
-``--build-exe-dir``
- Specify the directory for the executable.
-
-``--build-generator``
- Specify the generator to use. See the :manual:`cmake-generators(7)` manual.
-
-``--build-generator-platform``
- Specify the generator-specific platform.
-
-``--build-generator-toolset``
- Specify the generator-specific toolset.
-
-``--build-project``
- Specify the name of the project to build.
-
-``--build-makeprogram``
- Specify the explicit make program to be used by CMake when configuring and
- building the project. Only applicable for Make and Ninja based generators.
-
-``--build-noclean``
- Skip the make clean step.
-
-``--build-config-sample``
- A sample executable to use to determine the configuration that
- should be used.  e.g.  ``Debug``, ``Release`` etc.
-
-``--build-options``
- Additional options for configuring the build (i.e. for CMake, not for
- the build tool).  Note that if this is specified, the ``--build-options``
- keyword and its arguments must be the last option given on the command
- line, with the possible exception of ``--test-command``.
-
-``--test-command``
- The command to run as the test step with the ``--build-and-test`` option.
- All arguments following this keyword will be assumed to be part of the
- test command line, so it must be the last option given.
-
-``--test-timeout``
- The time limit in seconds
-
-.. _`Dashboard Client`:
-
-Dashboard Client
-================
-
-CTest can operate as a client for the `CDash`_ software quality dashboard
-application.  As a dashboard client, CTest performs a sequence of steps
-to configure, build, and test software, and then submits the results to
-a `CDash`_ server. The command-line signature used to submit to `CDash`_ is::
-
-  ctest (-D <dashboard> | -M <model> -T <action> | -S <script> | -SP <script>)
-        [-- <dashboard-options>...]
-
-Options for Dashboard Client include:
-
-``--group <group>``
- Specify what group you'd like to submit results to
-
- Submit dashboard to specified group instead of default one.  By
- default, the dashboard is submitted to Nightly, Experimental, or
- Continuous group, but by specifying this option, the group can be
- arbitrary.
-
- This replaces the deprecated option ``--track``.
- Despite the name change its behavior is unchanged.
-
-``-A <file>, --add-notes <file>``
- Add a notes file with submission.
-
- This option tells CTest to include a notes file when submitting
- dashboard.
-
-``--tomorrow-tag``
- ``Nightly`` or ``Experimental`` starts with next day tag.
-
- This is useful if the build will not finish in one day.
-
-``--extra-submit <file>[;<file>]``
- Submit extra files to the dashboard.
-
- This option will submit extra files to the dashboard.
-
-``--http1.0``
- Submit using `HTTP 1.0`.
-
- This option will force CTest to use `HTTP 1.0` to submit files to the
- dashboard, instead of `HTTP 1.1`.
-
-``--no-compress-output``
- Do not compress test output when submitting.
-
- This flag will turn off automatic compression of test output.  Use
- this to maintain compatibility with an older version of CDash which
- doesn't support compressed test output.
-
-Dashboard Client Steps
-----------------------
-
-CTest defines an ordered list of testing steps of which some or all may
-be run as a dashboard client:
-
-``Start``
-  Start a new dashboard submission to be composed of results recorded
-  by the following steps.
-  See the `CTest Start Step`_ section below.
-
-``Update``
-  Update the source tree from its version control repository.
-  Record the old and new versions and the list of updated source files.
-  See the `CTest Update Step`_ section below.
-
-``Configure``
-  Configure the software by running a command in the build tree.
-  Record the configuration output log.
-  See the `CTest Configure Step`_ section below.
-
-``Build``
-  Build the software by running a command in the build tree.
-  Record the build output log and detect warnings and errors.
-  See the `CTest Build Step`_ section below.
-
-``Test``
-  Test the software by loading a ``CTestTestfile.cmake``
-  from the build tree and executing the defined tests.
-  Record the output and result of each test.
-  See the `CTest Test Step`_ section below.
-
-``Coverage``
-  Compute coverage of the source code by running a coverage
-  analysis tool and recording its output.
-  See the `CTest Coverage Step`_ section below.
-
-``MemCheck``
-  Run the software test suite through a memory check tool.
-  Record the test output, results, and issues reported by the tool.
-  See the `CTest MemCheck Step`_ section below.
-
-``Submit``
-  Submit results recorded from other testing steps to the
-  software quality dashboard server.
-  See the `CTest Submit Step`_ section below.
-
-Dashboard Client Modes
-----------------------
-
-CTest defines three modes of operation as a dashboard client:
-
-``Nightly``
-  This mode is intended to be invoked once per day, typically at night.
-  It enables the ``Start``, ``Update``, ``Configure``, ``Build``, ``Test``,
-  ``Coverage``, and ``Submit`` steps by default.  Selected steps run even
-  if the ``Update`` step reports no changes to the source tree.
-
-``Continuous``
-  This mode is intended to be invoked repeatedly throughout the day.
-  It enables the ``Start``, ``Update``, ``Configure``, ``Build``, ``Test``,
-  ``Coverage``, and ``Submit`` steps by default, but exits after the
-  ``Update`` step if it reports no changes to the source tree.
-
-``Experimental``
-  This mode is intended to be invoked by a developer to test local changes.
-  It enables the ``Start``, ``Configure``, ``Build``, ``Test``, ``Coverage``,
-  and ``Submit`` steps by default.
-
-Dashboard Client via CTest Command-Line
----------------------------------------
-
-CTest can perform testing on an already-generated build tree.
-Run the ``ctest`` command with the current working directory set
-to the build tree and use one of these signatures::
-
-  ctest -D <mode>[<step>]
-  ctest -M <mode> [ -T <step> ]...
-
-The ``<mode>`` must be one of the above `Dashboard Client Modes`_,
-and each ``<step>`` must be one of the above `Dashboard Client Steps`_.
-
-CTest reads the `Dashboard Client Configuration`_ settings from
-a file in the build tree called either ``CTestConfiguration.ini``
-or ``DartConfiguration.tcl`` (the names are historical).  The format
-of the file is::
-
-  # Lines starting in '#' are comments.
-  # Other non-blank lines are key-value pairs.
-  <setting>: <value>
-
-where ``<setting>`` is the setting name and ``<value>`` is the
-setting value.
-
-In build trees generated by CMake, this configuration file is
-generated by the :module:`CTest` module if included by the project.
-The module uses variables to obtain a value for each setting
-as documented with the settings below.
-
-.. _`CTest Script`:
-
-Dashboard Client via CTest Script
----------------------------------
-
-CTest can perform testing driven by a :manual:`cmake-language(7)`
-script that creates and maintains the source and build tree as
-well as performing the testing steps.  Run the ``ctest`` command
-with the current working directory set outside of any build tree
-and use one of these signatures::
-
-  ctest -S <script>
-  ctest -SP <script>
-
-The ``<script>`` file must call :ref:`CTest Commands` commands
-to run testing steps explicitly as documented below.  The commands
-obtain `Dashboard Client Configuration`_ settings from their
-arguments or from variables set in the script.
-
-Dashboard Client Configuration
-==============================
-
-The `Dashboard Client Steps`_ may be configured by named
-settings as documented in the following sections.
-
-.. _`CTest Start Step`:
-
-CTest Start Step
-----------------
-
-Start a new dashboard submission to be composed of results recorded
-by the following steps.
-
-In a `CTest Script`_, the :command:`ctest_start` command runs this step.
-Arguments to the command may specify some of the step settings.
-The command first runs the command-line specified by the
-``CTEST_CHECKOUT_COMMAND`` variable, if set, to initialize the source
-directory.
-
-Configuration settings include:
-
-``BuildDirectory``
-  The full path to the project build tree.
-
-  * `CTest Script`_ variable: :variable:`CTEST_BINARY_DIRECTORY`
-  * :module:`CTest` module variable: :variable:`PROJECT_BINARY_DIR`
-
-``SourceDirectory``
-  The full path to the project source tree.
-
-  * `CTest Script`_ variable: :variable:`CTEST_SOURCE_DIRECTORY`
-  * :module:`CTest` module variable: :variable:`PROJECT_SOURCE_DIR`
-
-.. _`CTest Update Step`:
-
-CTest Update Step
------------------
-
-In a `CTest Script`_, the :command:`ctest_update` command runs this step.
-Arguments to the command may specify some of the step settings.
-
-Configuration settings to specify the version control tool include:
-
-``BZRCommand``
-  ``bzr`` command-line tool to use if source tree is managed by Bazaar.
-
-  * `CTest Script`_ variable: :variable:`CTEST_BZR_COMMAND`
-  * :module:`CTest` module variable: none
-
-``BZRUpdateOptions``
-  Command-line options to the ``BZRCommand`` when updating the source.
-
-  * `CTest Script`_ variable: :variable:`CTEST_BZR_UPDATE_OPTIONS`
-  * :module:`CTest` module variable: none
-
-``CVSCommand``
-  ``cvs`` command-line tool to use if source tree is managed by CVS.
-
-  * `CTest Script`_ variable: :variable:`CTEST_CVS_COMMAND`
-  * :module:`CTest` module variable: ``CVSCOMMAND``
-
-``CVSUpdateOptions``
-  Command-line options to the ``CVSCommand`` when updating the source.
-
-  * `CTest Script`_ variable: :variable:`CTEST_CVS_UPDATE_OPTIONS`
-  * :module:`CTest` module variable: ``CVS_UPDATE_OPTIONS``
-
-``GITCommand``
-  ``git`` command-line tool to use if source tree is managed by Git.
-
-  * `CTest Script`_ variable: :variable:`CTEST_GIT_COMMAND`
-  * :module:`CTest` module variable: ``GITCOMMAND``
-
-  The source tree is updated by ``git fetch`` followed by
-  ``git reset --hard`` to the ``FETCH_HEAD``.  The result is the same
-  as ``git pull`` except that any local modifications are overwritten.
-  Use ``GITUpdateCustom`` to specify a different approach.
-
-``GITInitSubmodules``
-  If set, CTest will update the repository's submodules before updating.
-
-  * `CTest Script`_ variable: :variable:`CTEST_GIT_INIT_SUBMODULES`
-  * :module:`CTest` module variable: ``CTEST_GIT_INIT_SUBMODULES``
-
-``GITUpdateCustom``
-  Specify a custom command line (as a semicolon-separated list) to run
-  in the source tree (Git work tree) to update it instead of running
-  the ``GITCommand``.
-
-  * `CTest Script`_ variable: :variable:`CTEST_GIT_UPDATE_CUSTOM`
-  * :module:`CTest` module variable: ``CTEST_GIT_UPDATE_CUSTOM``
-
-``GITUpdateOptions``
-  Command-line options to the ``GITCommand`` when updating the source.
-
-  * `CTest Script`_ variable: :variable:`CTEST_GIT_UPDATE_OPTIONS`
-  * :module:`CTest` module variable: ``GIT_UPDATE_OPTIONS``
-
-``HGCommand``
-  ``hg`` command-line tool to use if source tree is managed by Mercurial.
-
-  * `CTest Script`_ variable: :variable:`CTEST_HG_COMMAND`
-  * :module:`CTest` module variable: none
-
-``HGUpdateOptions``
-  Command-line options to the ``HGCommand`` when updating the source.
-
-  * `CTest Script`_ variable: :variable:`CTEST_HG_UPDATE_OPTIONS`
-  * :module:`CTest` module variable: none
-
-``P4Client``
-  Value of the ``-c`` option to the ``P4Command``.
-
-  * `CTest Script`_ variable: :variable:`CTEST_P4_CLIENT`
-  * :module:`CTest` module variable: ``CTEST_P4_CLIENT``
-
-``P4Command``
-  ``p4`` command-line tool to use if source tree is managed by Perforce.
-
-  * `CTest Script`_ variable: :variable:`CTEST_P4_COMMAND`
-  * :module:`CTest` module variable: ``P4COMMAND``
-
-``P4Options``
-  Command-line options to the ``P4Command`` for all invocations.
-
-  * `CTest Script`_ variable: :variable:`CTEST_P4_OPTIONS`
-  * :module:`CTest` module variable: ``CTEST_P4_OPTIONS``
-
-``P4UpdateCustom``
-  Specify a custom command line (as a semicolon-separated list) to run
-  in the source tree (Perforce tree) to update it instead of running
-  the ``P4Command``.
-
-  * `CTest Script`_ variable: none
-  * :module:`CTest` module variable: ``CTEST_P4_UPDATE_CUSTOM``
-
-``P4UpdateOptions``
-  Command-line options to the ``P4Command`` when updating the source.
-
-  * `CTest Script`_ variable: :variable:`CTEST_P4_UPDATE_OPTIONS`
-  * :module:`CTest` module variable: ``CTEST_P4_UPDATE_OPTIONS``
-
-``SVNCommand``
-  ``svn`` command-line tool to use if source tree is managed by Subversion.
-
-  * `CTest Script`_ variable: :variable:`CTEST_SVN_COMMAND`
-  * :module:`CTest` module variable: ``SVNCOMMAND``
-
-``SVNOptions``
-  Command-line options to the ``SVNCommand`` for all invocations.
-
-  * `CTest Script`_ variable: :variable:`CTEST_SVN_OPTIONS`
-  * :module:`CTest` module variable: ``CTEST_SVN_OPTIONS``
-
-``SVNUpdateOptions``
-  Command-line options to the ``SVNCommand`` when updating the source.
-
-  * `CTest Script`_ variable: :variable:`CTEST_SVN_UPDATE_OPTIONS`
-  * :module:`CTest` module variable: ``SVN_UPDATE_OPTIONS``
-
-``UpdateCommand``
-  Specify the version-control command-line tool to use without
-  detecting the VCS that manages the source tree.
-
-  * `CTest Script`_ variable: :variable:`CTEST_UPDATE_COMMAND`
-  * :module:`CTest` module variable: ``<VCS>COMMAND``
-    when ``UPDATE_TYPE`` is ``<vcs>``, else ``UPDATE_COMMAND``
-
-``UpdateOptions``
-  Command-line options to the ``UpdateCommand``.
-
-  * `CTest Script`_ variable: :variable:`CTEST_UPDATE_OPTIONS`
-  * :module:`CTest` module variable: ``<VCS>_UPDATE_OPTIONS``
-    when ``UPDATE_TYPE`` is ``<vcs>``, else ``UPDATE_OPTIONS``
-
-``UpdateType``
-  Specify the version-control system that manages the source
-  tree if it cannot be detected automatically.
-  The value may be ``bzr``, ``cvs``, ``git``, ``hg``,
-  ``p4``, or ``svn``.
-
-  * `CTest Script`_ variable: none, detected from source tree
-  * :module:`CTest` module variable: ``UPDATE_TYPE`` if set,
-    else ``CTEST_UPDATE_TYPE``
-
-.. _`UpdateVersionOnly`:
-
-``UpdateVersionOnly``
-  Specify that you want the version control update command to only
-  discover the current version that is checked out, and not to update
-  to a different version.
-
-  * `CTest Script`_ variable: :variable:`CTEST_UPDATE_VERSION_ONLY`
-
-.. _`UpdateVersionOverride`:
-
-``UpdateVersionOverride``
-  Specify the current version of your source tree.
-
-  When this variable is set to a non-empty string, CTest will report the value
-  you specified rather than using the update command to discover the current
-  version that is checked out. Use of this variable supersedes
-  ``UpdateVersionOnly``. Like ``UpdateVersionOnly``, using this variable tells
-  CTest not to update the source tree to a different version.
-
-  * `CTest Script`_ variable: :variable:`CTEST_UPDATE_VERSION_OVERRIDE`
-
-Additional configuration settings include:
-
-``NightlyStartTime``
-  In the ``Nightly`` dashboard mode, specify the "nightly start time".
-  With centralized version control systems (``cvs`` and ``svn``),
-  the ``Update`` step checks out the version of the software as of
-  this time so that multiple clients choose a common version to test.
-  This is not well-defined in distributed version-control systems so
-  the setting is ignored.
-
-  * `CTest Script`_ variable: :variable:`CTEST_NIGHTLY_START_TIME`
-  * :module:`CTest` module variable: ``NIGHTLY_START_TIME`` if set,
-    else ``CTEST_NIGHTLY_START_TIME``
-
-.. _`CTest Configure Step`:
-
-CTest Configure Step
---------------------
-
-In a `CTest Script`_, the :command:`ctest_configure` command runs this step.
-Arguments to the command may specify some of the step settings.
-
-Configuration settings include:
-
-``ConfigureCommand``
-  Command-line to launch the software configuration process.
-  It will be executed in the location specified by the
-  ``BuildDirectory`` setting.
-
-  * `CTest Script`_ variable: :variable:`CTEST_CONFIGURE_COMMAND`
-  * :module:`CTest` module variable: :variable:`CMAKE_COMMAND`
-    followed by :variable:`PROJECT_SOURCE_DIR`
-
-``LabelsForSubprojects``
-  Specify a semicolon-separated list of labels that will be treated as
-  subprojects. This mapping will be passed on to CDash when configure, test or
-  build results are submitted.
-
-  * `CTest Script`_ variable: :variable:`CTEST_LABELS_FOR_SUBPROJECTS`
-  * :module:`CTest` module variable: ``CTEST_LABELS_FOR_SUBPROJECTS``
-
-  See `Label and Subproject Summary`_.
-
-.. _`CTest Build Step`:
-
-CTest Build Step
-----------------
-
-In a `CTest Script`_, the :command:`ctest_build` command runs this step.
-Arguments to the command may specify some of the step settings.
-
-Configuration settings include:
-
-``DefaultCTestConfigurationType``
-  When the build system to be launched allows build-time selection
-  of the configuration (e.g. ``Debug``, ``Release``), this specifies
-  the default configuration to be built when no ``-C`` option is
-  given to the ``ctest`` command.  The value will be substituted into
-  the value of ``MakeCommand`` to replace the literal string
-  ``${CTEST_CONFIGURATION_TYPE}`` if it appears.
-
-  * `CTest Script`_ variable: :variable:`CTEST_CONFIGURATION_TYPE`
-  * :module:`CTest` module variable: ``DEFAULT_CTEST_CONFIGURATION_TYPE``,
-    initialized by the :envvar:`CMAKE_CONFIG_TYPE` environment variable
-
-``LabelsForSubprojects``
-  Specify a semicolon-separated list of labels that will be treated as
-  subprojects. This mapping will be passed on to CDash when configure, test or
-  build results are submitted.
-
-  * `CTest Script`_ variable: :variable:`CTEST_LABELS_FOR_SUBPROJECTS`
-  * :module:`CTest` module variable: ``CTEST_LABELS_FOR_SUBPROJECTS``
-
-  See `Label and Subproject Summary`_.
-
-``MakeCommand``
-  Command-line to launch the software build process.
-  It will be executed in the location specified by the
-  ``BuildDirectory`` setting.
-
-  * `CTest Script`_ variable: :variable:`CTEST_BUILD_COMMAND`
-  * :module:`CTest` module variable: ``MAKECOMMAND``,
-    initialized by the :command:`build_command` command
-
-``UseLaunchers``
-  For build trees generated by CMake using one of the
-  :ref:`Makefile Generators` or the :generator:`Ninja`
-  generator, specify whether the
-  ``CTEST_USE_LAUNCHERS`` feature is enabled by the
-  :module:`CTestUseLaunchers` module (also included by the
-  :module:`CTest` module).  When enabled, the generated build
-  system wraps each invocation of the compiler, linker, or
-  custom command line with a "launcher" that communicates
-  with CTest via environment variables and files to report
-  granular build warning and error information.  Otherwise,
-  CTest must "scrape" the build output log for diagnostics.
-
-  * `CTest Script`_ variable: :variable:`CTEST_USE_LAUNCHERS`
-  * :module:`CTest` module variable: ``CTEST_USE_LAUNCHERS``
-
-.. _`CTest Test Step`:
-
-CTest Test Step
----------------
-
-In a `CTest Script`_, the :command:`ctest_test` command runs this step.
-Arguments to the command may specify some of the step settings.
-
-Configuration settings include:
-
-``ResourceSpecFile``
-  Specify a
-  :ref:`resource specification file <ctest-resource-specification-file>`.
-
-  * `CTest Script`_ variable: :variable:`CTEST_RESOURCE_SPEC_FILE`
-  * :module:`CTest` module variable: ``CTEST_RESOURCE_SPEC_FILE``
-
-  See :ref:`ctest-resource-allocation` for more information.
-
-``LabelsForSubprojects``
-  Specify a semicolon-separated list of labels that will be treated as
-  subprojects. This mapping will be passed on to CDash when configure, test or
-  build results are submitted.
-
-  * `CTest Script`_ variable: :variable:`CTEST_LABELS_FOR_SUBPROJECTS`
-  * :module:`CTest` module variable: ``CTEST_LABELS_FOR_SUBPROJECTS``
-
-  See `Label and Subproject Summary`_.
-
-``TestLoad``
-  While running tests in parallel (e.g. with ``-j``), try not to start
-  tests when they may cause the CPU load to pass above a given threshold.
-
-  * `CTest Script`_ variable: :variable:`CTEST_TEST_LOAD`
-  * :module:`CTest` module variable: ``CTEST_TEST_LOAD``
-
-``TimeOut``
-  The default timeout for each test if not specified by the
-  :prop_test:`TIMEOUT` test property.
-
-  * `CTest Script`_ variable: :variable:`CTEST_TEST_TIMEOUT`
-  * :module:`CTest` module variable: ``DART_TESTING_TIMEOUT``
-
-.. _`CTest Coverage Step`:
-
-CTest Coverage Step
--------------------
-
-In a `CTest Script`_, the :command:`ctest_coverage` command runs this step.
-Arguments to the command may specify some of the step settings.
-
-Configuration settings include:
-
-``CoverageCommand``
-  Command-line tool to perform software coverage analysis.
-  It will be executed in the location specified by the
-  ``BuildDirectory`` setting.
-
-  * `CTest Script`_ variable: :variable:`CTEST_COVERAGE_COMMAND`
-  * :module:`CTest` module variable: ``COVERAGE_COMMAND``
-
-``CoverageExtraFlags``
-  Specify command-line options to the ``CoverageCommand`` tool.
-
-  * `CTest Script`_ variable: :variable:`CTEST_COVERAGE_EXTRA_FLAGS`
-  * :module:`CTest` module variable: ``COVERAGE_EXTRA_FLAGS``
-
-  These options are the first arguments passed to ``CoverageCommand``.
-
-.. _`CTest MemCheck Step`:
-
-CTest MemCheck Step
--------------------
-
-In a `CTest Script`_, the :command:`ctest_memcheck` command runs this step.
-Arguments to the command may specify some of the step settings.
-
-Configuration settings include:
-
-``MemoryCheckCommand``
-  Command-line tool to perform dynamic analysis.  Test command lines
-  will be launched through this tool.
-
-  * `CTest Script`_ variable: :variable:`CTEST_MEMORYCHECK_COMMAND`
-  * :module:`CTest` module variable: ``MEMORYCHECK_COMMAND``
-
-``MemoryCheckCommandOptions``
-  Specify command-line options to the ``MemoryCheckCommand`` tool.
-  They will be placed prior to the test command line.
-
-  * `CTest Script`_ variable: :variable:`CTEST_MEMORYCHECK_COMMAND_OPTIONS`
-  * :module:`CTest` module variable: ``MEMORYCHECK_COMMAND_OPTIONS``
-
-``MemoryCheckType``
-  Specify the type of memory checking to perform.
-
-  * `CTest Script`_ variable: :variable:`CTEST_MEMORYCHECK_TYPE`
-  * :module:`CTest` module variable: ``MEMORYCHECK_TYPE``
-
-``MemoryCheckSanitizerOptions``
-  Specify options to sanitizers when running with a sanitize-enabled build.
-
-  * `CTest Script`_ variable: :variable:`CTEST_MEMORYCHECK_SANITIZER_OPTIONS`
-  * :module:`CTest` module variable: ``MEMORYCHECK_SANITIZER_OPTIONS``
-
-``MemoryCheckSuppressionFile``
-  Specify a file containing suppression rules for the
-  ``MemoryCheckCommand`` tool.  It will be passed with options
-  appropriate to the tool.
-
-  * `CTest Script`_ variable: :variable:`CTEST_MEMORYCHECK_SUPPRESSIONS_FILE`
-  * :module:`CTest` module variable: ``MEMORYCHECK_SUPPRESSIONS_FILE``
-
-Additional configuration settings include:
-
-``BoundsCheckerCommand``
-  Specify a ``MemoryCheckCommand`` that is known to be command-line
-  compatible with Bounds Checker.
-
-  * `CTest Script`_ variable: none
-  * :module:`CTest` module variable: none
-
-``PurifyCommand``
-  Specify a ``MemoryCheckCommand`` that is known to be command-line
-  compatible with Purify.
-
-  * `CTest Script`_ variable: none
-  * :module:`CTest` module variable: ``PURIFYCOMMAND``
-
-``ValgrindCommand``
-  Specify a ``MemoryCheckCommand`` that is known to be command-line
-  compatible with Valgrind.
-
-  * `CTest Script`_ variable: none
-  * :module:`CTest` module variable: ``VALGRIND_COMMAND``
-
-``ValgrindCommandOptions``
-  Specify command-line options to the ``ValgrindCommand`` tool.
-  They will be placed prior to the test command line.
-
-  * `CTest Script`_ variable: none
-  * :module:`CTest` module variable: ``VALGRIND_COMMAND_OPTIONS``
-
-``DrMemoryCommand``
-  Specify a ``MemoryCheckCommand`` that is known to be a command-line
-  compatible with DrMemory.
-
-  * `CTest Script`_ variable: none
-  * :module:`CTest` module variable: ``DRMEMORY_COMMAND``
-
-``DrMemoryCommandOptions``
-  Specify command-line options to the ``DrMemoryCommand`` tool.
-  They will be placed prior to the test command line.
-
-  * `CTest Script`_ variable: none
-  * :module:`CTest` module variable: ``DRMEMORY_COMMAND_OPTIONS``
-
-.. _`CTest Submit Step`:
-
-CTest Submit Step
------------------
-
-In a `CTest Script`_, the :command:`ctest_submit` command runs this step.
-Arguments to the command may specify some of the step settings.
-
-Configuration settings include:
-
-``BuildName``
-  Describe the dashboard client platform with a short string.
-  (Operating system, compiler, etc.)
-
-  * `CTest Script`_ variable: :variable:`CTEST_BUILD_NAME`
-  * :module:`CTest` module variable: ``BUILDNAME``
-
-``CDashVersion``
-  Legacy option.  Not used.
-
-  * `CTest Script`_ variable: none, detected from server
-  * :module:`CTest` module variable: ``CTEST_CDASH_VERSION``
-
-``CTestSubmitRetryCount``
-  Specify a number of attempts to retry submission on network failure.
-
-  * `CTest Script`_ variable: none,
-    use the :command:`ctest_submit` ``RETRY_COUNT`` option.
-  * :module:`CTest` module variable: ``CTEST_SUBMIT_RETRY_COUNT``
-
-``CTestSubmitRetryDelay``
-  Specify a delay before retrying submission on network failure.
-
-  * `CTest Script`_ variable: none,
-    use the :command:`ctest_submit` ``RETRY_DELAY`` option.
-  * :module:`CTest` module variable: ``CTEST_SUBMIT_RETRY_DELAY``
-
-``CurlOptions``
-  Specify a semicolon-separated list of options to control the
-  Curl library that CTest uses internally to connect to the
-  server.  Possible options are ``CURLOPT_SSL_VERIFYPEER_OFF``
-  and ``CURLOPT_SSL_VERIFYHOST_OFF``.
-
-  * `CTest Script`_ variable: :variable:`CTEST_CURL_OPTIONS`
-  * :module:`CTest` module variable: ``CTEST_CURL_OPTIONS``
-
-``DropLocation``
-  Legacy option.  When ``SubmitURL`` is not set, it is constructed from
-  ``DropMethod``, ``DropSiteUser``, ``DropSitePassword``, ``DropSite``, and
-  ``DropLocation``.
-
-  * `CTest Script`_ variable: :variable:`CTEST_DROP_LOCATION`
-  * :module:`CTest` module variable: ``DROP_LOCATION`` if set,
-    else ``CTEST_DROP_LOCATION``
-
-``DropMethod``
-  Legacy option.  When ``SubmitURL`` is not set, it is constructed from
-  ``DropMethod``, ``DropSiteUser``, ``DropSitePassword``, ``DropSite``, and
-  ``DropLocation``.
-
-  * `CTest Script`_ variable: :variable:`CTEST_DROP_METHOD`
-  * :module:`CTest` module variable: ``DROP_METHOD`` if set,
-    else ``CTEST_DROP_METHOD``
-
-``DropSite``
-  Legacy option.  When ``SubmitURL`` is not set, it is constructed from
-  ``DropMethod``, ``DropSiteUser``, ``DropSitePassword``, ``DropSite``, and
-  ``DropLocation``.
-
-  * `CTest Script`_ variable: :variable:`CTEST_DROP_SITE`
-  * :module:`CTest` module variable: ``DROP_SITE`` if set,
-    else ``CTEST_DROP_SITE``
-
-``DropSitePassword``
-  Legacy option.  When ``SubmitURL`` is not set, it is constructed from
-  ``DropMethod``, ``DropSiteUser``, ``DropSitePassword``, ``DropSite``, and
-  ``DropLocation``.
-
-  * `CTest Script`_ variable: :variable:`CTEST_DROP_SITE_PASSWORD`
-  * :module:`CTest` module variable: ``DROP_SITE_PASSWORD`` if set,
-    else ``CTEST_DROP_SITE_PASWORD``
-
-``DropSiteUser``
-  Legacy option.  When ``SubmitURL`` is not set, it is constructed from
-  ``DropMethod``, ``DropSiteUser``, ``DropSitePassword``, ``DropSite``, and
-  ``DropLocation``.
-
-  * `CTest Script`_ variable: :variable:`CTEST_DROP_SITE_USER`
-  * :module:`CTest` module variable: ``DROP_SITE_USER`` if set,
-    else ``CTEST_DROP_SITE_USER``
-
-``IsCDash``
-  Legacy option.  Not used.
-
-  * `CTest Script`_ variable: :variable:`CTEST_DROP_SITE_CDASH`
-  * :module:`CTest` module variable: ``CTEST_DROP_SITE_CDASH``
-
-``ScpCommand``
-  Legacy option.  Not used.
-
-  * `CTest Script`_ variable: :variable:`CTEST_SCP_COMMAND`
-  * :module:`CTest` module variable: ``SCPCOMMAND``
-
-``Site``
-  Describe the dashboard client host site with a short string.
-  (Hostname, domain, etc.)
-
-  * `CTest Script`_ variable: :variable:`CTEST_SITE`
-  * :module:`CTest` module variable: ``SITE``,
-    initialized by the :command:`site_name` command
-
-``SubmitURL``
-  The ``http`` or ``https`` URL of the dashboard server to send the submission
-  to.
-
-  * `CTest Script`_ variable: :variable:`CTEST_SUBMIT_URL`
-  * :module:`CTest` module variable: ``SUBMIT_URL`` if set,
-    else ``CTEST_SUBMIT_URL``
-
-``TriggerSite``
-  Legacy option.  Not used.
-
-  * `CTest Script`_ variable: :variable:`CTEST_TRIGGER_SITE`
-  * :module:`CTest` module variable: ``TRIGGER_SITE`` if set,
-    else ``CTEST_TRIGGER_SITE``
-
-.. _`Show as JSON Object Model`:
-
-Show as JSON Object Model
-=========================
-
-When the ``--show-only=json-v1`` command line option is given, the test
-information is output in JSON format.  Version 1.0 of the JSON object
-model is defined as follows:
-
-``kind``
-  The string "ctestInfo".
-
-``version``
-  A JSON object specifying the version components.  Its members are
-
-  ``major``
-    A non-negative integer specifying the major version component.
-  ``minor``
-    A non-negative integer specifying the minor version component.
-
-``backtraceGraph``
-    JSON object representing backtrace information with the
-    following members:
-
-    ``commands``
-      List of command names.
-    ``files``
-      List of file names.
-    ``nodes``
-      List of node JSON objects with members:
-
-      ``command``
-        Index into the ``commands`` member of the ``backtraceGraph``.
-      ``file``
-        Index into the ``files`` member of the ``backtraceGraph``.
-      ``line``
-        Line number in the file where the backtrace was added.
-      ``parent``
-        Index into the ``nodes`` member of the ``backtraceGraph``
-        representing the parent in the graph.
-
-``tests``
-  A JSON array listing information about each test.  Each entry
-  is a JSON object with members:
-
-  ``name``
-    Test name.
-  ``config``
-    Configuration that the test can run on.
-    Empty string means any config.
-  ``command``
-    List where the first element is the test command and the
-    remaining elements are the command arguments.
-  ``backtrace``
-    Index into the ``nodes`` member of the ``backtraceGraph``.
-  ``properties``
-    Test properties.
-    Can contain keys for each of the supported test properties.
-
-.. _`ctest-resource-allocation`:
-
-Resource Allocation
-===================
-
-CTest provides a mechanism for tests to specify the resources that they need
-in a fine-grained way, and for users to specify the resources availiable on
-the running machine. This allows CTest to internally keep track of which
-resources are in use and which are free, scheduling tests in a way that
-prevents them from trying to claim resources that are not available.
-
-When the resource allocation feature is used, CTest will not oversubscribe
-resources. For example, if a resource has 8 slots, CTest will not run tests
-that collectively use more than 8 slots at a time. This has the effect of
-limiting how many tests can run at any given time, even if a high ``-j``
-argument is used, if those tests all use some slots from the same resource.
-In addition, it means that a single test that uses more of a resource than is
-available on a machine will not run at all (and will be reported as
-``Not Run``).
-
-A common use case for this feature is for tests that require the use of a GPU.
-Multiple tests can simultaneously allocate memory from a GPU, but if too many
-tests try to do this at once, some of them will fail to allocate, resulting in
-a failed test, even though the test would have succeeded if it had the memory
-it needed. By using the resource allocation feature, each test can specify how
-much memory it requires from a GPU, allowing CTest to schedule tests in a way
-that running several of these tests at once does not exhaust the GPU's memory
-pool.
-
-Please note that CTest has no concept of what a GPU is or how much memory it
-has, nor does it have any way of communicating with a GPU to retrieve this
-information or perform any memory management. CTest simply keeps track of a
-list of abstract resource types, each of which has a certain number of slots
-available for tests to use. Each test specifies the number of slots that it
-requires from a certain resource, and CTest then schedules them in a way that
-prevents the total number of slots in use from exceeding the listed capacity.
-When a test is executed, and slots from a resource are allocated to that test,
-tests may assume that they have exclusive use of those slots for the duration
-of the test's process.
-
-The CTest resource allocation feature consists of two inputs:
-
-* The :ref:`resource specification file <ctest-resource-specification-file>`,
-  described below, which describes the resources available on the system.
-* The :prop_test:`RESOURCE_GROUPS` property of tests, which describes the
-  resources required by the test.
-
-When CTest runs a test, the resources allocated to that test are passed in the
-form of a set of
-:ref:`environment variables <ctest-resource-environment-variables>` as
-described below. Using this information to decide which resource to connect to
-is left to the test writer.
-
-The ``RESOURCE_GROUPS`` property tells CTest what resources a test expects
-to use grouped in a way meaningful to the test.  The test itself must read
-the :ref:`environment variables <ctest-resource-environment-variables>` to
-determine which resources have been allocated to each group.  For example,
-each group may correspond to a process the test will spawn when executed.
-
-Note that even if a test specifies a ``RESOURCE_GROUPS`` property, it is still
-possible for that to test to run without any resource allocation (and without
-the corresponding
-:ref:`environment variables <ctest-resource-environment-variables>`)
-if the user does not pass a resource specification file. Passing this file,
-either through the ``--resource-spec-file`` command-line argument or the
-``RESOURCE_SPEC_FILE`` argument to :command:`ctest_test`, is what activates the
-resource allocation feature. Tests should check the
-``CTEST_RESOURCE_GROUP_COUNT`` environment variable to find out whether or not
-resource allocation is activated. This variable will always (and only) be
-defined if resource allocation is activated. If resource allocation is not
-activated, then the ``CTEST_RESOURCE_GROUP_COUNT`` variable will not exist,
-even if it exists for the parent ``ctest`` process. If a test absolutely must
-have resource allocation, then it can return a failing exit code or use the
-:prop_test:`SKIP_RETURN_CODE` or :prop_test:`SKIP_REGULAR_EXPRESSION`
-properties to indicate a skipped test.
-
-.. _`ctest-resource-specification-file`:
-
-Resource Specification File
----------------------------
-
-The resource specification file is a JSON file which is passed to CTest, either
-on the :manual:`ctest(1)` command line as ``--resource-spec-file``, or as the
-``RESOURCE_SPEC_FILE`` argument of :command:`ctest_test`. If a dashboard script
-is used and ``RESOURCE_SPEC_FILE`` is not specified, the value of
-:variable:`CTEST_RESOURCE_SPEC_FILE` in the dashboard script is used instead.
-If ``--resource-spec-file``, ``RESOURCE_SPEC_FILE``, and
-:variable:`CTEST_RESOURCE_SPEC_FILE` in the dashboard script are not specified,
-the value of :variable:`CTEST_RESOURCE_SPEC_FILE` in the CMake build is used
-instead. If none of these are specified, no resource spec file is used.
-
-The resource specification file must be a JSON object. All examples in this
-document assume the following resource specification file:
-
-.. code-block:: json
-
-  {
-    "version": {
-      "major": 1,
-      "minor": 0
-    },
-    "local": [
-      {
-        "gpus": [
-          {
-            "id": "0",
-            "slots": 2
-          },
-          {
-            "id": "1",
-            "slots": 4
-          },
-          {
-            "id": "2",
-            "slots": 2
-          },
-          {
-            "id": "3"
-          }
-        ],
-        "crypto_chips": [
-          {
-            "id": "card0",
-            "slots": 4
-          }
-        ]
-      }
-    ]
-  }
-
-The members are:
-
-``version``
-  An object containing a ``major`` integer field and a ``minor`` integer field.
-  Currently, the only supported version is major ``1``, minor ``0``. Any other
-  value is an error.
-
-``local``
-  A JSON array of resource sets present on the system.  Currently, this array
-  is restricted to being of size 1.
-
-  Each array element is a JSON object with members whose names are equal to the
-  desired resource types, such as ``gpus``. These names must start with a
-  lowercase letter or an underscore, and subsequent characters can be a
-  lowercase letter, a digit, or an underscore. Uppercase letters are not
-  allowed, because certain platforms have case-insensitive environment
-  variables. See the `Environment Variables`_ section below for
-  more information. It is recommended that the resource type name be the plural
-  of a noun, such as ``gpus`` or ``crypto_chips`` (and not ``gpu`` or
-  ``crypto_chip``.)
-
-  Please note that the names ``gpus`` and ``crypto_chips`` are just examples,
-  and CTest does not interpret them in any way. You are free to make up any
-  resource type you want to meet your own requirements.
-
-  The value for each resource type is a JSON array consisting of JSON objects,
-  each of which describe a specific instance of the specified resource. These
-  objects have the following members:
-
-  ``id``
-    A string consisting of an identifier for the resource. Each character in
-    the identifier can be a lowercase letter, a digit, or an underscore.
-    Uppercase letters are not allowed.
-
-    Identifiers must be unique within a resource type. However, they do not
-    have to be unique across resource types. For example, it is valid to have a
-    ``gpus`` resource named ``0`` and a ``crypto_chips`` resource named ``0``,
-    but not two ``gpus`` resources both named ``0``.
-
-    Please note that the IDs ``0``, ``1``, ``2``, ``3``, and ``card0`` are just
-    examples, and CTest does not interpret them in any way. You are free to
-    make up any IDs you want to meet your own requirements.
-
-  ``slots``
-    An optional unsigned number specifying the number of slots available on the
-    resource. For example, this could be megabytes of RAM on a GPU, or
-    cryptography units available on a cryptography chip. If ``slots`` is not
-    specified, a default value of ``1`` is assumed.
-
-In the example file above, there are four GPUs with ID's 0 through 3. GPU 0 has
-2 slots, GPU 1 has 4, GPU 2 has 2, and GPU 3 has a default of 1 slot. There is
-also one cryptography chip with 4 slots.
-
-``RESOURCE_GROUPS`` Property
-----------------------------
-
-See :prop_test:`RESOURCE_GROUPS` for a description of this property.
-
-.. _`ctest-resource-environment-variables`:
-
-Environment Variables
----------------------
-
-Once CTest has decided which resources to allocate to a test, it passes this
-information to the test executable as a series of environment variables. For
-each example below, we will assume that the test in question has a
-:prop_test:`RESOURCE_GROUPS` property of
-``2,gpus:2;gpus:4,gpus:1,crypto_chips:2``.
-
-The following variables are passed to the test process:
-
-.. envvar:: CTEST_RESOURCE_GROUP_COUNT
-
-  The total number of groups specified by the :prop_test:`RESOURCE_GROUPS`
-  property. For example:
-
-  * ``CTEST_RESOURCE_GROUP_COUNT=3``
-
-  This variable will only be defined if :manual:`ctest(1)` has been given a
-  ``--resource-spec-file``, or if :command:`ctest_test` has been given a
-  ``RESOURCE_SPEC_FILE``. If no resource specification file has been given,
-  this variable will not be defined.
-
-.. envvar:: CTEST_RESOURCE_GROUP_<num>
-
-  The list of resource types allocated to each group, with each item
-  separated by a comma. ``<num>`` is a number from zero to
-  ``CTEST_RESOURCE_GROUP_COUNT`` minus one. ``CTEST_RESOURCE_GROUP_<num>``
-  is defined for each ``<num>`` in this range. For example:
-
-  * ``CTEST_RESOURCE_GROUP_0=gpus``
-  * ``CTEST_RESOURCE_GROUP_1=gpus``
-  * ``CTEST_RESOURCE_GROUP_2=crypto_chips,gpus``
-
-.. envvar:: CTEST_RESOURCE_GROUP_<num>_<resource-type>
-
-  The list of resource IDs and number of slots from each ID allocated to each
-  group for a given resource type. This variable consists of a series of
-  pairs, each pair separated by a semicolon, and with the two items in the pair
-  separated by a comma. The first item in each pair is ``id:`` followed by the
-  ID of a resource of type ``<resource-type>``, and the second item is
-  ``slots:`` followed by the number of slots from that resource allocated to
-  the given group. For example:
-
-  * ``CTEST_RESOURCE_GROUP_0_GPUS=id:0,slots:2``
-  * ``CTEST_RESOURCE_GROUP_1_GPUS=id:2,slots:2``
-  * ``CTEST_RESOURCE_GROUP_2_GPUS=id:1,slots:4;id:3,slots:1``
-  * ``CTEST_RESOURCE_GROUP_2_CRYPTO_CHIPS=id:card0,slots:2``
-
-  In this example, group 0 gets 2 slots from GPU ``0``, group 1 gets 2 slots
-  from GPU ``2``, and group 2 gets 4 slots from GPU ``1``, 1 slot from GPU
-  ``3``, and 2 slots from cryptography chip ``card0``.
-
-  ``<num>`` is a number from zero to ``CTEST_RESOURCE_GROUP_COUNT`` minus one.
-  ``<resource-type>`` is the name of a resource type, converted to uppercase.
-  ``CTEST_RESOURCE_GROUP_<num>_<resource-type>`` is defined for the product
-  of each ``<num>`` in the range listed above and each resource type listed in
-  ``CTEST_RESOURCE_GROUP_<num>``.
-
-  Because some platforms have case-insensitive names for environment variables,
-  the names of resource types may not clash in a case-insensitive environment.
-  Because of this, for the sake of simplicity, all resource types must be
-  listed in all lowercase in the
-  :ref:`resource specification file <ctest-resource-specification-file>` and
-  in the :prop_test:`RESOURCE_GROUPS` property, and they are converted to all
-  uppercase in the ``CTEST_RESOURCE_GROUP_<num>_<resource-type>`` environment
-  variable.
-
-See Also
-========
-
-.. include:: LINKS.txt
-
-.. _`CDash`: http://cdash.org/
diff --git a/share/cmake-3.18/Help/module/CPackArchive.rst b/share/cmake-3.18/Help/module/CPackArchive.rst
deleted file mode 100644
index 8616098..0000000
--- a/share/cmake-3.18/Help/module/CPackArchive.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-CPackArchive
-------------
-
-The documentation for the CPack Archive generator has moved here: :cpack_gen:`CPack Archive Generator`
diff --git a/share/cmake-3.18/Help/module/CPackFreeBSD.rst b/share/cmake-3.18/Help/module/CPackFreeBSD.rst
deleted file mode 100644
index 69701b8..0000000
--- a/share/cmake-3.18/Help/module/CPackFreeBSD.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-CPackFreeBSD
-------------
-
-The documentation for the CPack FreeBSD generator has moved here: :cpack_gen:`CPack FreeBSD Generator`
diff --git a/share/cmake-3.18/Help/module/CPackNuGet.rst b/share/cmake-3.18/Help/module/CPackNuGet.rst
deleted file mode 100644
index 4f39b3a..0000000
--- a/share/cmake-3.18/Help/module/CPackNuGet.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-CPackNuGet
-----------
-
-The documentation for the CPack NuGet generator has moved here: :cpack_gen:`CPack NuGet Generator`
diff --git a/share/cmake-3.18/Help/module/CPackProductBuild.rst b/share/cmake-3.18/Help/module/CPackProductBuild.rst
deleted file mode 100644
index 8cd9198..0000000
--- a/share/cmake-3.18/Help/module/CPackProductBuild.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-CPackProductBuild
------------------
-
-The documentation for the CPack productbuild generator has moved here: :cpack_gen:`CPack productbuild Generator`
diff --git a/share/cmake-3.18/Help/module/UseJavaClassFilelist.rst b/share/cmake-3.18/Help/module/UseJavaClassFilelist.rst
deleted file mode 100644
index b9cd476..0000000
--- a/share/cmake-3.18/Help/module/UseJavaClassFilelist.rst
+++ /dev/null
@@ -1 +0,0 @@
-.. cmake-module:: ../../Modules/UseJavaClassFilelist.cmake
diff --git a/share/cmake-3.18/Help/module/UseJavaSymlinks.rst b/share/cmake-3.18/Help/module/UseJavaSymlinks.rst
deleted file mode 100644
index 2fab8e8..0000000
--- a/share/cmake-3.18/Help/module/UseJavaSymlinks.rst
+++ /dev/null
@@ -1 +0,0 @@
-.. cmake-module:: ../../Modules/UseJavaSymlinks.cmake
diff --git a/share/cmake-3.18/Help/policy/CMP0026.rst b/share/cmake-3.18/Help/policy/CMP0026.rst
deleted file mode 100644
index 3401d4a..0000000
--- a/share/cmake-3.18/Help/policy/CMP0026.rst
+++ /dev/null
@@ -1,29 +0,0 @@
-CMP0026
--------
-
-Disallow use of the LOCATION property for build targets.
-
-CMake 2.8.12 and lower allowed reading the :prop_tgt:`LOCATION` target
-property (and configuration-specific variants) to
-determine the eventual location of build targets.  This relies on the
-assumption that all necessary information is available at
-configure-time to determine the final location and filename of the
-target.  However, this property is not fully determined until later at
-generate-time.  At generate time, the ``$<TARGET_FILE>`` generator
-expression can be used to determine the eventual :prop_tgt:`LOCATION` of a target
-output.
-
-Code which reads the :prop_tgt:`LOCATION` target property can be ported to
-use the ``$<TARGET_FILE>`` generator expression together with the
-:command:`file(GENERATE)` subcommand to generate a file containing
-the target location.
-
-The ``OLD`` behavior for this policy is to allow reading the :prop_tgt:`LOCATION`
-properties from build-targets.  The ``NEW`` behavior for this policy is to
-not to allow reading the :prop_tgt:`LOCATION` properties from build-targets.
-
-This policy was introduced in CMake version 3.0.  CMake version
-|release| warns when the policy is not set and uses ``OLD`` behavior.  Use
-the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0051.rst b/share/cmake-3.18/Help/policy/CMP0051.rst
deleted file mode 100644
index 6b679e5..0000000
--- a/share/cmake-3.18/Help/policy/CMP0051.rst
+++ /dev/null
@@ -1,26 +0,0 @@
-CMP0051
--------
-
-List TARGET_OBJECTS in SOURCES target property.
-
-CMake 3.0 and lower did not include the ``TARGET_OBJECTS``
-:manual:`generator expression <cmake-generator-expressions(7)>` when
-returning the :prop_tgt:`SOURCES` target property.
-
-Configure-time CMake code is not able to handle generator expressions.  If
-using the :prop_tgt:`SOURCES` target property at configure time, it may be
-necessary to first remove generator expressions using the
-:command:`string(GENEX_STRIP)` command.  Generate-time CMake code such as
-:command:`file(GENERATE)` can handle the content without stripping.
-
-The ``OLD`` behavior for this policy is to omit ``TARGET_OBJECTS``
-expressions from the :prop_tgt:`SOURCES` target property.  The ``NEW``
-behavior for this policy is to include ``TARGET_OBJECTS`` expressions
-in the output.
-
-This policy was introduced in CMake version 3.1.
-CMake version |release| warns when the policy is not set and uses
-``OLD`` behavior.  Use the :command:`cmake_policy` command to set it
-to ``OLD`` or ``NEW`` explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0052.rst b/share/cmake-3.18/Help/policy/CMP0052.rst
deleted file mode 100644
index ee2e6e8..0000000
--- a/share/cmake-3.18/Help/policy/CMP0052.rst
+++ /dev/null
@@ -1,27 +0,0 @@
-CMP0052
--------
-
-Reject source and build dirs in installed
-:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES`.
-
-CMake 3.0 and lower allowed subdirectories of the source directory or build
-directory to be in the :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` of
-installed and exported targets, if the directory was also a subdirectory of
-the installation prefix.  This makes the installation depend on the
-existence of the source dir or binary dir, and the installation will be
-broken if either are removed after installation.
-
-See :ref:`Include Directories and Usage Requirements` for more on
-specifying include directories for targets.
-
-The ``OLD`` behavior for this policy is to export the content of the
-:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` with the source or binary
-directory.  The ``NEW`` behavior for this
-policy is to issue an error if such a directory is used.
-
-This policy was introduced in CMake version 3.1.
-CMake version |release| warns when the policy is not set and uses
-``OLD`` behavior.  Use the :command:`cmake_policy` command to set it
-to ``OLD`` or ``NEW`` explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0053.rst b/share/cmake-3.18/Help/policy/CMP0053.rst
deleted file mode 100644
index 032b3e5..0000000
--- a/share/cmake-3.18/Help/policy/CMP0053.rst
+++ /dev/null
@@ -1,50 +0,0 @@
-CMP0053
--------
-
-Simplify variable reference and escape sequence evaluation.
-
-CMake 3.1 introduced a much faster implementation of evaluation of the
-:ref:`Variable References` and :ref:`Escape Sequences` documented in the
-:manual:`cmake-language(7)` manual.  While the behavior is identical
-to the legacy implementation in most cases, some corner cases were
-cleaned up to simplify the behavior.  Specifically:
-
-* Expansion of ``@VAR@`` reference syntax defined by the
-  :command:`configure_file` and :command:`string(CONFIGURE)`
-  commands is no longer performed in other contexts.
-
-* Literal ``${VAR}`` reference syntax may contain only
-  alphanumeric characters (``A-Z``, ``a-z``, ``0-9``) and
-  the characters ``_``, ``.``, ``/``, ``-``, and ``+``.
-  Note that ``$`` is technically allowed in the ``NEW`` behavior, but is
-  invalid for ``OLD`` behavior.  This is due to an oversight during the
-  implementation of :policy:`CMP0053` and its use as a literal variable
-  reference is discouraged for this reason.
-  Variables with other characters in their name may still
-  be referenced indirectly, e.g.
-
-  .. code-block:: cmake
-
-    set(varname "otherwise & disallowed $ characters")
-    message("${${varname}}")
-
-* The setting of policy :policy:`CMP0010` is not considered,
-  so improper variable reference syntax is always an error.
-
-* More characters are allowed to be escaped in variable names.
-  Previously, only ``()#" \@^`` were valid characters to
-  escape. Now any non-alphanumeric, non-semicolon, non-NUL
-  character may be escaped following the ``escape_identity``
-  production in the :ref:`Escape Sequences` section of the
-  :manual:`cmake-language(7)` manual.
-
-The ``OLD`` behavior for this policy is to honor the legacy behavior for
-variable references and escape sequences.  The ``NEW`` behavior is to
-use the simpler variable expansion and escape sequence evaluation rules.
-
-This policy was introduced in CMake version 3.1.
-CMake version |release| warns when the policy is not set and uses
-``OLD`` behavior.  Use the :command:`cmake_policy` command to set
-it to ``OLD`` or ``NEW`` explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0054.rst b/share/cmake-3.18/Help/policy/CMP0054.rst
deleted file mode 100644
index 1e000a6..0000000
--- a/share/cmake-3.18/Help/policy/CMP0054.rst
+++ /dev/null
@@ -1,52 +0,0 @@
-CMP0054
--------
-
-Only interpret :command:`if` arguments as variables or keywords when unquoted.
-
-CMake 3.1 and above no longer implicitly dereference variables or
-interpret keywords in an :command:`if` command argument when
-it is a :ref:`Quoted Argument` or a :ref:`Bracket Argument`.
-
-The ``OLD`` behavior for this policy is to dereference variables and
-interpret keywords even if they are quoted or bracketed.
-The ``NEW`` behavior is to not dereference variables or interpret keywords
-that have been quoted or bracketed.
-
-Given the following partial example:
-
-::
-
-  set(A E)
-  set(E "")
-
-  if("${A}" STREQUAL "")
-    message("Result is TRUE before CMake 3.1 or when CMP0054 is OLD")
-  else()
-    message("Result is FALSE in CMake 3.1 and above if CMP0054 is NEW")
-  endif()
-
-After explicit expansion of variables this gives:
-
-::
-
-  if("E" STREQUAL "")
-
-With the policy set to ``OLD`` implicit expansion reduces this semantically to:
-
-::
-
-  if("" STREQUAL "")
-
-With the policy set to ``NEW`` the quoted arguments will not be
-further dereferenced:
-
-::
-
-  if("E" STREQUAL "")
-
-This policy was introduced in CMake version 3.1.
-CMake version |release| warns when the policy is not set and uses
-``OLD`` behavior.  Use the :command:`cmake_policy` command to set
-it to ``OLD`` or ``NEW`` explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0055.rst b/share/cmake-3.18/Help/policy/CMP0055.rst
deleted file mode 100644
index bc5ad08..0000000
--- a/share/cmake-3.18/Help/policy/CMP0055.rst
+++ /dev/null
@@ -1,19 +0,0 @@
-CMP0055
--------
-
-Strict checking for the :command:`break` command.
-
-CMake 3.1 and lower allowed calls to the :command:`break` command
-outside of a loop context and also ignored any given arguments.
-This was undefined behavior.
-
-The ``OLD`` behavior for this policy is to allow :command:`break` to be placed
-outside of loop contexts and ignores any arguments.  The ``NEW`` behavior for this
-policy is to issue an error if a misplaced break or any arguments are found.
-
-This policy was introduced in CMake version 3.2.
-CMake version |release| warns when the policy is not set and uses
-``OLD`` behavior.  Use the :command:`cmake_policy` command to set it to ``OLD`` or
-``NEW`` explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0056.rst b/share/cmake-3.18/Help/policy/CMP0056.rst
deleted file mode 100644
index 834da84..0000000
--- a/share/cmake-3.18/Help/policy/CMP0056.rst
+++ /dev/null
@@ -1,34 +0,0 @@
-CMP0056
--------
-
-Honor link flags in :command:`try_compile` source-file signature.
-
-The :command:`try_compile` command source-file signature generates a
-``CMakeLists.txt`` file to build the source file into an executable.
-In order to compile the source the same way as it might be compiled
-by the calling project, the generated project sets the value of the
-:variable:`CMAKE_<LANG>_FLAGS` variable to that in the calling project.
-The value of the :variable:`CMAKE_EXE_LINKER_FLAGS` variable may be
-needed in some cases too, but CMake 3.1 and lower did not set it in
-the generated project.  CMake 3.2 and above prefer to set it so that
-linker flags are honored as well as compiler flags.  This policy
-provides compatibility with the pre-3.2 behavior.
-
-The ``OLD`` behavior for this policy is to not set the value of the
-:variable:`CMAKE_EXE_LINKER_FLAGS` variable in the generated test
-project.  The ``NEW`` behavior for this policy is to set the value of
-the :variable:`CMAKE_EXE_LINKER_FLAGS` variable in the test project
-to the same as it is in the calling project.
-
-If the project code does not set the policy explicitly, users may
-set it on the command line by defining the
-:variable:`CMAKE_POLICY_DEFAULT_CMP0056 <CMAKE_POLICY_DEFAULT_CMP<NNNN>>`
-variable in the cache.
-
-This policy was introduced in CMake version 3.2.  Unlike most policies,
-CMake version |release| does *not* warn by default when this policy
-is not set and simply uses ``OLD`` behavior.  See documentation of the
-:variable:`CMAKE_POLICY_WARNING_CMP0056 <CMAKE_POLICY_WARNING_CMP<NNNN>>`
-variable to control the warning.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0057.rst b/share/cmake-3.18/Help/policy/CMP0057.rst
deleted file mode 100644
index 83db186..0000000
--- a/share/cmake-3.18/Help/policy/CMP0057.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-CMP0057
--------
-
-Support new :command:`if` IN_LIST operator.
-
-CMake 3.3 adds support for the new IN_LIST operator.
-
-The ``OLD`` behavior for this policy is to ignore the IN_LIST operator.
-The ``NEW`` behavior is to interpret the IN_LIST operator.
-
-This policy was introduced in CMake version 3.3.
-CMake version |release| warns when the policy is not set and uses
-``OLD`` behavior.  Use the :command:`cmake_policy` command to set
-it to ``OLD`` or ``NEW`` explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0058.rst b/share/cmake-3.18/Help/policy/CMP0058.rst
deleted file mode 100644
index 05efd48..0000000
--- a/share/cmake-3.18/Help/policy/CMP0058.rst
+++ /dev/null
@@ -1,110 +0,0 @@
-CMP0058
--------
-
-Ninja requires custom command byproducts to be explicit.
-
-When an intermediate file generated during the build is consumed
-by an expensive operation or a large tree of dependents, one may
-reduce the work needed for an incremental rebuild by updating the
-file timestamp only when its content changes.  With this approach
-the generation rule must have a separate output file that is always
-updated with a new timestamp that is newer than any dependencies of
-the rule so that the build tool re-runs the rule only when the input
-changes.  We refer to the separate output file as a rule's *witness*
-and the generated file as a rule's *byproduct*.
-
-Byproducts may not be listed as outputs because their timestamps are
-allowed to be older than the inputs.  No build tools (like ``make``)
-that existed when CMake was designed have a way to express byproducts.
-Therefore CMake versions prior to 3.2 had no way to specify them.
-Projects typically left byproducts undeclared in the rules that
-generate them.  For example:
-
-.. code-block:: cmake
-
-  add_custom_command(
-    OUTPUT witness.txt
-    COMMAND ${CMAKE_COMMAND} -E copy_if_different
-            ${CMAKE_CURRENT_SOURCE_DIR}/input.txt
-            byproduct.txt # timestamp may not change
-    COMMAND ${CMAKE_COMMAND} -E touch witness.txt
-    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/input.txt
-    )
-  add_custom_target(Provider DEPENDS witness.txt)
-  add_custom_command(
-    OUTPUT generated.c
-    COMMAND expensive-task -i byproduct.txt -o generated.c
-    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/byproduct.txt
-    )
-  add_library(Consumer generated.c)
-  add_dependencies(Consumer Provider)
-
-This works well for all generators except :generator:`Ninja`.
-The Ninja build tool sees a rule listing ``byproduct.txt``
-as a dependency and no rule listing it as an output.  Ninja then
-complains that there is no way to satisfy the dependency and
-stops building even though there are order-only dependencies
-that ensure ``byproduct.txt`` will exist before its consumers
-need it.  See discussion of this problem in `Ninja Issue 760`_
-for further details on why Ninja works this way.
-
-.. _`Ninja Issue 760`: https://github.com/martine/ninja/issues/760
-
-Instead of leaving byproducts undeclared in the rules that generate
-them, Ninja expects byproducts to be listed along with other outputs.
-Such rules may be marked with a ``restat`` option that tells Ninja
-to check the timestamps of outputs after the rules run.  This
-prevents byproducts whose timestamps do not change from causing
-their dependents to re-build unnecessarily.
-
-Since the above approach does not tell CMake what custom command
-generates ``byproduct.txt``, the Ninja generator does not have
-enough information to add the byproduct as an output of any rule.
-CMake 2.8.12 and above work around this problem and allow projects
-using the above approach to build by generating ``phony`` build
-rules to tell Ninja to tolerate such missing files.  However, this
-workaround prevents Ninja from diagnosing a dependency that is
-really missing.  It also works poorly in in-source builds where
-every custom command dependency, even on source files, needs to
-be treated this way because CMake does not have enough information
-to know which files are generated as byproducts of custom commands.
-
-CMake 3.2 introduced the ``BYPRODUCTS`` option to the
-:command:`add_custom_command` and :command:`add_custom_target`
-commands.  This option allows byproducts to be specified explicitly:
-
-.. code-block:: cmake
-
-  add_custom_command(
-    OUTPUT witness.txt
-    BYPRODUCTS byproduct.txt # explicit byproduct specification
-    COMMAND ${CMAKE_COMMAND} -E copy_if_different
-            ${CMAKE_CURRENT_SOURCE_DIR}/input.txt
-            byproduct.txt # timestamp may not change
-  ...
-
-The ``BYPRODUCTS`` option is used by the :generator:`Ninja` generator
-to list byproducts among the outputs of the custom commands that
-generate them, and is ignored by other generators.
-
-CMake 3.3 and above prefer to require projects to specify custom
-command byproducts explicitly so that it can avoid using the
-``phony`` rule workaround altogether.  Policy ``CMP0058`` was
-introduced to provide compatibility with existing projects that
-still need the workaround.
-
-This policy has no effect on generators other than :generator:`Ninja`.
-The ``OLD`` behavior for this policy is to generate Ninja ``phony``
-rules for unknown dependencies in the build tree.  The ``NEW``
-behavior for this policy is to not generate these and instead
-require projects to specify custom command ``BYPRODUCTS`` explicitly.
-
-This policy was introduced in CMake version 3.3.
-CMake version |release| warns when it sees unknown dependencies in
-out-of-source build trees if the policy is not set and then uses
-``OLD`` behavior.  Use the :command:`cmake_policy` command to set
-the policy to ``OLD`` or ``NEW`` explicitly.  The policy setting
-must be in scope at the end of the top-level ``CMakeLists.txt``
-file of the project and has global effect.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0059.rst b/share/cmake-3.18/Help/policy/CMP0059.rst
deleted file mode 100644
index bce982e..0000000
--- a/share/cmake-3.18/Help/policy/CMP0059.rst
+++ /dev/null
@@ -1,19 +0,0 @@
-CMP0059
--------
-
-Do not treat ``DEFINITIONS`` as a built-in directory property.
-
-CMake 3.3 and above no longer make a list of definitions available through
-the :prop_dir:`DEFINITIONS` directory property.  The
-:prop_dir:`COMPILE_DEFINITIONS` directory property may be used instead.
-
-The ``OLD`` behavior for this policy is to provide the list of flags given
-so far to the :command:`add_definitions` command.  The ``NEW`` behavior is
-to behave as a normal user-defined directory property.
-
-This policy was introduced in CMake version 3.3.
-CMake version |release| warns when the policy is not set and uses
-``OLD`` behavior.  Use the :command:`cmake_policy` command to set
-it to ``OLD`` or ``NEW`` explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0060.rst b/share/cmake-3.18/Help/policy/CMP0060.rst
deleted file mode 100644
index 98ac2cf..0000000
--- a/share/cmake-3.18/Help/policy/CMP0060.rst
+++ /dev/null
@@ -1,65 +0,0 @@
-CMP0060
--------
-
-Link libraries by full path even in implicit directories.
-
-Policy :policy:`CMP0003` was introduced with the intention of always
-linking library files by full path when a full path is given to the
-:command:`target_link_libraries` command.  However, on some platforms
-(e.g. HP-UX) the compiler front-end adds alternative library search paths
-for the current architecture (e.g. ``/usr/lib/<arch>`` has alternatives
-to libraries in ``/usr/lib`` for the current architecture).
-On such platforms the :command:`find_library` may find a library such as
-``/usr/lib/libfoo.so`` that does not belong to the current architecture.
-
-Prior to policy :policy:`CMP0003` projects would still build in such
-cases because the incorrect library path would be converted to ``-lfoo``
-on the link line and the linker would find the proper library in the
-arch-specific search path provided by the compiler front-end implicitly.
-At the time we chose to remain compatible with such projects by always
-converting library files found in implicit link directories to ``-lfoo``
-flags to ask the linker to search for them.  This approach allowed existing
-projects to continue to build while still linking to libraries outside
-implicit link directories via full path (such as those in the build tree).
-
-CMake does allow projects to override this behavior by using an
-:ref:`IMPORTED library target <Imported Targets>` with its
-:prop_tgt:`IMPORTED_LOCATION` property set to the desired full path to
-a library file.  In fact, many :ref:`Find Modules` are learning to provide
-:ref:`Imported Targets` instead of just the traditional ``Foo_LIBRARIES``
-variable listing library files.  However, this makes the link line
-generated for a library found by a Find Module depend on whether it
-is linked through an imported target or not, which is inconsistent.
-Furthermore, this behavior has been a source of confusion because the
-generated link line for a library file depends on its location.  It is
-also problematic for projects trying to link statically because flags
-like ``-Wl,-Bstatic -lfoo -Wl,-Bdynamic`` may be used to help the linker
-select ``libfoo.a`` instead of ``libfoo.so`` but then leak dynamic linking
-to following libraries.  (See the :prop_tgt:`LINK_SEARCH_END_STATIC`
-target property for a solution typically used for that problem.)
-
-When the special case for libraries in implicit link directories was first
-introduced the list of implicit link directories was simply hard-coded
-(e.g. ``/lib``, ``/usr/lib``, and a few others).  Since that time, CMake
-has learned to detect the implicit link directories used by the compiler
-front-end.  If necessary, the :command:`find_library` command could be
-taught to use this information to help find libraries of the proper
-architecture.
-
-For these reasons, CMake 3.3 and above prefer to drop the special case
-and link libraries by full path even when they are in implicit link
-directories.  Policy ``CMP0060`` provides compatibility for existing
-projects.
-
-The ``OLD`` behavior for this policy is to ask the linker to search for
-libraries whose full paths are known to be in implicit link directories.
-The ``NEW`` behavior for this policy is to link libraries by full path even
-if they are in implicit link directories.
-
-This policy was introduced in CMake version 3.3.  Unlike most policies,
-CMake version |release| does *not* warn by default when this policy
-is not set and simply uses ``OLD`` behavior.  See documentation of the
-:variable:`CMAKE_POLICY_WARNING_CMP0060 <CMAKE_POLICY_WARNING_CMP<NNNN>>`
-variable to control the warning.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0061.rst b/share/cmake-3.18/Help/policy/CMP0061.rst
deleted file mode 100644
index 57e4161..0000000
--- a/share/cmake-3.18/Help/policy/CMP0061.rst
+++ /dev/null
@@ -1,26 +0,0 @@
-CMP0061
--------
-
-CTest does not by default tell ``make`` to ignore errors (``-i``).
-
-The :command:`ctest_build` and :command:`build_command` commands no
-longer generate build commands for :ref:`Makefile Generators` with
-the ``-i`` option.  Previously this was done to help build as much
-of tested projects as possible.  However, this behavior is not
-consistent with other generators and also causes the return code
-of the ``make`` tool to be meaningless.
-
-Of course users may still add this option manually by setting
-:variable:`CTEST_BUILD_COMMAND` or the ``MAKECOMMAND`` cache entry.
-See the :ref:`CTest Build Step` ``MakeCommand`` setting documentation
-for their effects.
-
-The ``OLD`` behavior for this policy is to add ``-i`` to ``make``
-calls in CTest.  The ``NEW`` behavior for this policy is to not
-add ``-i``.
-
-This policy was introduced in CMake version 3.3.  Unlike most policies,
-CMake version |release| does *not* warn when this policy is not set and
-simply uses ``OLD`` behavior.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0062.rst b/share/cmake-3.18/Help/policy/CMP0062.rst
deleted file mode 100644
index 0db7aaf..0000000
--- a/share/cmake-3.18/Help/policy/CMP0062.rst
+++ /dev/null
@@ -1,29 +0,0 @@
-CMP0062
--------
-
-Disallow :command:`install` of :command:`export` result.
-
-The :command:`export()` command generates a file containing
-:ref:`Imported Targets`, which is suitable for use from the build
-directory.  It is not suitable for installation because it contains absolute
-paths to buildsystem locations, and is particular to a single build
-configuration.
-
-The :command:`install(EXPORT)` generates and installs files which contain
-:ref:`Imported Targets`.  These files are generated with relative paths
-(unless the user specifies absolute paths), and are designed for
-multi-configuration use.  See :ref:`Creating Packages` for more.
-
-CMake 3.3 no longer allows the use of the :command:`install(FILES)` command
-with the result of the :command:`export()` command.
-
-The ``OLD`` behavior for this policy is to allow installing the result of
-an :command:`export()` command.  The ``NEW`` behavior for this policy is
-not to allow installing the result of an :command:`export()` command.
-
-This policy was introduced in CMake version 3.3.  CMake version
-|release| warns when the policy is not set and uses ``OLD`` behavior.  Use
-the :command:`cmake_policy()` command to set it to ``OLD`` or ``NEW``
-explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0063.rst b/share/cmake-3.18/Help/policy/CMP0063.rst
deleted file mode 100644
index d736d06..0000000
--- a/share/cmake-3.18/Help/policy/CMP0063.rst
+++ /dev/null
@@ -1,28 +0,0 @@
-CMP0063
--------
-
-Honor visibility properties for all target types.
-
-The :prop_tgt:`<LANG>_VISIBILITY_PRESET` and
-:prop_tgt:`VISIBILITY_INLINES_HIDDEN` target properties affect visibility
-of symbols during dynamic linking.  When first introduced these properties
-affected compilation of sources only in shared libraries, module libraries,
-and executables with the :prop_tgt:`ENABLE_EXPORTS` property set.  This
-was sufficient for the basic use cases of shared libraries and executables
-with plugins.  However, some sources may be compiled as part of static
-libraries or object libraries and then linked into a shared library later.
-CMake 3.3 and above prefer to honor these properties for sources compiled
-in all target types.  This policy preserves compatibility for projects
-expecting the properties to work only for some target types.
-
-The ``OLD`` behavior for this policy is to ignore the visibility properties
-for static libraries, object libraries, and executables without exports.
-The ``NEW`` behavior for this policy is to honor the visibility properties
-for all target types.
-
-This policy was introduced in CMake version 3.3.  CMake version
-|release| warns when the policy is not set and uses ``OLD`` behavior.  Use
-the :command:`cmake_policy()` command to set it to ``OLD`` or ``NEW``
-explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0064.rst b/share/cmake-3.18/Help/policy/CMP0064.rst
deleted file mode 100644
index e9a061b..0000000
--- a/share/cmake-3.18/Help/policy/CMP0064.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-CMP0064
--------
-
-Recognize ``TEST`` as a operator for the :command:`if` command.
-
-The ``TEST`` operator was added to the :command:`if` command to determine if a
-given test name was created by the :command:`add_test` command.
-
-The ``OLD`` behavior for this policy is to ignore the ``TEST`` operator.
-The ``NEW`` behavior is to interpret the ``TEST`` operator.
-
-This policy was introduced in CMake version 3.4.  CMake version
-|release| warns when the policy is not set and uses ``OLD`` behavior.  Use
-the :command:`cmake_policy()` command to set it to ``OLD`` or ``NEW``
-explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0065.rst b/share/cmake-3.18/Help/policy/CMP0065.rst
deleted file mode 100644
index b820aad..0000000
--- a/share/cmake-3.18/Help/policy/CMP0065.rst
+++ /dev/null
@@ -1,27 +0,0 @@
-CMP0065
--------
-
-Do not add flags to export symbols from executables without
-the :prop_tgt:`ENABLE_EXPORTS` target property.
-
-CMake 3.3 and below, for historical reasons, always linked executables
-on some platforms with flags like ``-rdynamic`` to export symbols from
-the executables for use by any plugins they may load via ``dlopen``.
-CMake 3.4 and above prefer to do this only for executables that are
-explicitly marked with the :prop_tgt:`ENABLE_EXPORTS` target property.
-
-The ``OLD`` behavior of this policy is to always use the additional link
-flags when linking executables regardless of the value of the
-:prop_tgt:`ENABLE_EXPORTS` target property.
-
-The ``NEW`` behavior of this policy is to only use the additional link
-flags when linking executables if the :prop_tgt:`ENABLE_EXPORTS` target
-property is set to ``True``.
-
-This policy was introduced in CMake version 3.4.  Unlike most policies,
-CMake version |release| does *not* warn by default when this policy
-is not set and simply uses ``OLD`` behavior.  See documentation of the
-:variable:`CMAKE_POLICY_WARNING_CMP0065 <CMAKE_POLICY_WARNING_CMP<NNNN>>`
-variable to control the warning.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0066.rst b/share/cmake-3.18/Help/policy/CMP0066.rst
deleted file mode 100644
index e110ae1..0000000
--- a/share/cmake-3.18/Help/policy/CMP0066.rst
+++ /dev/null
@@ -1,27 +0,0 @@
-CMP0066
--------
-
-Honor per-config flags in :command:`try_compile` source-file signature.
-
-The source file signature of the :command:`try_compile` command uses the value
-of the :variable:`CMAKE_<LANG>_FLAGS` variable in the test project so that the
-test compilation works as it would in the main project.  However, CMake 3.6 and
-below do not also honor config-specific compiler flags such as those in the
-:variable:`CMAKE_<LANG>_FLAGS_DEBUG` variable.  CMake 3.7 and above prefer to
-honor config-specific compiler flags too.  This policy provides compatibility
-for projects that do not expect config-specific compiler flags to be used.
-
-The ``OLD`` behavior of this policy is to ignore config-specific flag
-variables like :variable:`CMAKE_<LANG>_FLAGS_DEBUG` and only use CMake's
-built-in defaults for the current compiler and platform.
-
-The ``NEW`` behavior of this policy is to honor config-specific flag
-variabldes like :variable:`CMAKE_<LANG>_FLAGS_DEBUG`.
-
-This policy was introduced in CMake version 3.7.  Unlike most policies,
-CMake version |release| does *not* warn by default when this policy
-is not set and simply uses ``OLD`` behavior.  See documentation of the
-:variable:`CMAKE_POLICY_WARNING_CMP0066 <CMAKE_POLICY_WARNING_CMP<NNNN>>`
-variable to control the warning.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0067.rst b/share/cmake-3.18/Help/policy/CMP0067.rst
deleted file mode 100644
index f802787..0000000
--- a/share/cmake-3.18/Help/policy/CMP0067.rst
+++ /dev/null
@@ -1,37 +0,0 @@
-CMP0067
--------
-
-Honor language standard in :command:`try_compile` source-file signature.
-
-The :command:`try_compile` source file signature is intended to allow
-callers to check whether they will be able to compile a given source file
-with the current toolchain.  In order to match compiler behavior, any
-language standard mode should match.  However, CMake 3.7 and below did not
-do this.  CMake 3.8 and above prefer to honor the language standard settings
-for ``C``, ``CXX`` (C++), and ``CUDA`` using the values of the variables:
-
-* :variable:`CMAKE_C_STANDARD`
-* :variable:`CMAKE_C_STANDARD_REQUIRED`
-* :variable:`CMAKE_C_EXTENSIONS`
-* :variable:`CMAKE_CXX_STANDARD`
-* :variable:`CMAKE_CXX_STANDARD_REQUIRED`
-* :variable:`CMAKE_CXX_EXTENSIONS`
-* :variable:`CMAKE_CUDA_STANDARD`
-* :variable:`CMAKE_CUDA_STANDARD_REQUIRED`
-* :variable:`CMAKE_CUDA_EXTENSIONS`
-
-This policy provides compatibility for projects that do not expect
-the language standard settings to be used automatically.
-
-The ``OLD`` behavior of this policy is to ignore language standard
-setting variables when generating the ``try_compile`` test project.
-The ``NEW`` behavior of this policy is to honor language standard
-setting variables.
-
-This policy was introduced in CMake version 3.8.  Unlike most policies,
-CMake version |release| does *not* warn by default when this policy
-is not set and simply uses ``OLD`` behavior.  See documentation of the
-:variable:`CMAKE_POLICY_WARNING_CMP0067 <CMAKE_POLICY_WARNING_CMP<NNNN>>`
-variable to control the warning.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0068.rst b/share/cmake-3.18/Help/policy/CMP0068.rst
deleted file mode 100644
index 978a6e3..0000000
--- a/share/cmake-3.18/Help/policy/CMP0068.rst
+++ /dev/null
@@ -1,35 +0,0 @@
-CMP0068
--------
-
-``RPATH`` settings on macOS do not affect ``install_name``.
-
-CMake 3.9 and newer remove any effect the following settings may have on the
-``install_name`` of a target on macOS:
-
-* :prop_tgt:`BUILD_WITH_INSTALL_RPATH` target property
-* :prop_tgt:`SKIP_BUILD_RPATH` target property
-* :variable:`CMAKE_SKIP_RPATH` variable
-* :variable:`CMAKE_SKIP_INSTALL_RPATH` variable
-
-Previously, setting :prop_tgt:`BUILD_WITH_INSTALL_RPATH` had the effect of
-setting both the ``install_name`` of a target to :prop_tgt:`INSTALL_NAME_DIR`
-and the ``RPATH`` to :prop_tgt:`INSTALL_RPATH`.  In CMake 3.9, it only affects
-setting of ``RPATH``.  However, if one wants :prop_tgt:`INSTALL_NAME_DIR` to
-apply to the target in the build tree, one may set
-:prop_tgt:`BUILD_WITH_INSTALL_NAME_DIR`.
-
-If :prop_tgt:`SKIP_BUILD_RPATH`, :variable:`CMAKE_SKIP_RPATH` or
-:variable:`CMAKE_SKIP_INSTALL_RPATH` were used to strip the directory portion
-of the ``install_name`` of a target, one may set ``INSTALL_NAME_DIR=""``
-instead.
-
-The ``OLD`` behavior of this policy is to use the ``RPATH`` settings for
-``install_name`` on macOS.  The ``NEW`` behavior of this policy is to ignore
-the ``RPATH`` settings for ``install_name`` on macOS.
-
-This policy was introduced in CMake version 3.9.  CMake version
-|release| warns when the policy is not set and uses ``OLD`` behavior.
-Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
-explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0069.rst b/share/cmake-3.18/Help/policy/CMP0069.rst
deleted file mode 100644
index 0d5ddfd..0000000
--- a/share/cmake-3.18/Help/policy/CMP0069.rst
+++ /dev/null
@@ -1,92 +0,0 @@
-CMP0069
--------
-
-:prop_tgt:`INTERPROCEDURAL_OPTIMIZATION` is enforced when enabled.
-
-CMake 3.9 and newer prefer to add IPO flags whenever the
-:prop_tgt:`INTERPROCEDURAL_OPTIMIZATION` target property is enabled and
-produce an error if flags are not known to CMake for the current compiler.
-Since a given compiler may not support IPO flags in all environments in which
-it is used, it is now the project's responsibility to use the
-:module:`CheckIPOSupported` module to check for support before enabling the
-:prop_tgt:`INTERPROCEDURAL_OPTIMIZATION` target property.  This approach
-allows a project to conditionally activate IPO when supported.  It also
-allows an end user to set the :variable:`CMAKE_INTERPROCEDURAL_OPTIMIZATION`
-variable in an environment known to support IPO even if the project does
-not enable the property.
-
-Since CMake 3.8 and lower only honored :prop_tgt:`INTERPROCEDURAL_OPTIMIZATION`
-for the Intel compiler on Linux, some projects may unconditionally enable the
-target property.  Policy ``CMP0069`` provides compatibility with such projects.
-
-This policy takes effect whenever the IPO property is enabled.  The ``OLD``
-behavior for this policy is to add IPO flags only for Intel compiler on Linux.
-The ``NEW`` behavior for this policy is to add IPO flags for the current
-compiler or produce an error if CMake does not know the flags.
-
-This policy was introduced in CMake version 3.9.  CMake version
-|release| warns when the policy is not set and uses ``OLD`` behavior.
-Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
-explicitly.
-
-.. include:: DEPRECATED.txt
-
-Examples
-^^^^^^^^
-
-Behave like CMake 3.8 and do not apply any IPO flags except for Intel compiler
-on Linux:
-
-.. code-block:: cmake
-
-  cmake_minimum_required(VERSION 3.8)
-  project(foo)
-
-  # ...
-
-  set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
-
-Use the :module:`CheckIPOSupported` module to detect whether IPO is
-supported by the current compiler, environment, and CMake version.
-Produce a fatal error if support is not available:
-
-.. code-block:: cmake
-
-  cmake_minimum_required(VERSION 3.9) # CMP0069 NEW
-  project(foo)
-
-  include(CheckIPOSupported)
-  check_ipo_supported()
-
-  # ...
-
-  set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
-
-Apply IPO flags only if compiler supports it:
-
-.. code-block:: cmake
-
-  cmake_minimum_required(VERSION 3.9) # CMP0069 NEW
-  project(foo)
-
-  include(CheckIPOSupported)
-
-  # ...
-
-  check_ipo_supported(RESULT result)
-  if(result)
-    set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
-  endif()
-
-Apply IPO flags without any checks.  This may lead to build errors if IPO
-is not supported by the compiler in the current environment.  Produce an
-error if CMake does not know IPO flags for the current compiler:
-
-.. code-block:: cmake
-
-  cmake_minimum_required(VERSION 3.9) # CMP0069 NEW
-  project(foo)
-
-  # ...
-
-  set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
diff --git a/share/cmake-3.18/Help/policy/CMP0070.rst b/share/cmake-3.18/Help/policy/CMP0070.rst
deleted file mode 100644
index 0fb3617..0000000
--- a/share/cmake-3.18/Help/policy/CMP0070.rst
+++ /dev/null
@@ -1,25 +0,0 @@
-CMP0070
--------
-
-Define :command:`file(GENERATE)` behavior for relative paths.
-
-CMake 3.10 and newer define that relative paths given to ``INPUT`` and
-``OUTPUT`` arguments of ``file(GENERATE)`` are interpreted relative to the
-current source and binary directories, respectively.  CMake 3.9 and lower did
-not define any behavior for relative paths but did not diagnose them either
-and accidentally treated them relative to the process working directory.
-Policy ``CMP0070`` provides compatibility with projects that used the old
-undefined behavior.
-
-This policy affects behavior of relative paths given to ``file(GENERATE)``.
-The ``OLD`` behavior for this policy is to treat the paths relative to the
-working directory of CMake.  The ``NEW`` behavior for this policy is to
-interpret relative paths with respect to the current source or binary
-directory of the caller.
-
-This policy was introduced in CMake version 3.10.  CMake version
-|release| warns when the policy is not set and uses ``OLD`` behavior.
-Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
-explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0071.rst b/share/cmake-3.18/Help/policy/CMP0071.rst
deleted file mode 100644
index 855ecf0..0000000
--- a/share/cmake-3.18/Help/policy/CMP0071.rst
+++ /dev/null
@@ -1,42 +0,0 @@
-CMP0071
--------
-
-Let :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC` process
-:prop_sf:`GENERATED` files.
-
-Since version 3.10, CMake processes **regular** and :prop_sf:`GENERATED`
-source files in :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`.
-In earlier CMake versions, only **regular** source files were processed.
-:prop_sf:`GENERATED` source files were ignored silently.
-
-This policy affects how source files that are :prop_sf:`GENERATED`
-get treated in :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`.
-
-The ``OLD`` behavior for this policy is to ignore :prop_sf:`GENERATED`
-source files in :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`.
-
-The ``NEW`` behavior for this policy is to process :prop_sf:`GENERATED`
-source files in :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC` just like regular
-source files.
-
-.. note::
-
-  To silence the ``CMP0071`` warning source files can be excluded from
-  :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC` processing by setting the
-  source file properties :prop_sf:`SKIP_AUTOMOC`, :prop_sf:`SKIP_AUTOUIC` or
-  :prop_sf:`SKIP_AUTOGEN`.
-
-Source skip example::
-
-  # ...
-  set_property(SOURCE /path/to/file1.h PROPERTY SKIP_AUTOMOC ON)
-  set_property(SOURCE /path/to/file2.h PROPERTY SKIP_AUTOUIC ON)
-  set_property(SOURCE /path/to/file3.h PROPERTY SKIP_AUTOGEN ON)
-  # ...
-
-This policy was introduced in CMake version 3.10.  CMake version
-|release| warns when the policy is not set and uses ``OLD`` behavior.
-Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
-explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0072.rst b/share/cmake-3.18/Help/policy/CMP0072.rst
deleted file mode 100644
index 3abbad7..0000000
--- a/share/cmake-3.18/Help/policy/CMP0072.rst
+++ /dev/null
@@ -1,26 +0,0 @@
-CMP0072
--------
-
-:module:`FindOpenGL` prefers GLVND by default when available.
-
-The :module:`FindOpenGL` module provides an ``OpenGL::GL`` target and an
-``OPENGL_LIBRARIES`` variable for projects to use for legacy GL interfaces.
-When both a legacy GL library (e.g. ``libGL.so``) and GLVND libraries
-for OpenGL and GLX (e.g. ``libOpenGL.so`` and ``libGLX.so``) are available,
-the module must choose between them.  It documents an ``OpenGL_GL_PREFERENCE``
-variable that can be used to specify an explicit preference.  When no such
-preference is set, the module must choose a default preference.
-
-CMake 3.11 and above prefer to choose GLVND libraries.  This policy provides
-compatibility with projects that expect the legacy GL library to be used.
-
-The ``OLD`` behavior for this policy is to set ``OpenGL_GL_PREFERENCE`` to
-``LEGACY``.  The ``NEW`` behavior for this policy is to set
-``OpenGL_GL_PREFERENCE`` to ``GLVND``.
-
-This policy was introduced in CMake version 3.11.  CMake version
-|release| warns when the policy is not set and uses ``OLD`` behavior.
-Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
-explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0073.rst b/share/cmake-3.18/Help/policy/CMP0073.rst
deleted file mode 100644
index 9bfa0e9..0000000
--- a/share/cmake-3.18/Help/policy/CMP0073.rst
+++ /dev/null
@@ -1,25 +0,0 @@
-CMP0073
--------
-
-Do not produce legacy ``_LIB_DEPENDS`` cache entries.
-
-Ancient CMake versions once used ``<tgt>_LIB_DEPENDS`` cache entries to
-propagate library link dependencies.  This has long been done by other
-means, leaving the :command:`export_library_dependencies` command as the
-only user of these values.  That command has long been disallowed by
-policy :policy:`CMP0033`, but the ``<tgt>_LIB_DEPENDS`` cache entries
-were left for compatibility with possible non-standard uses by projects.
-
-CMake 3.12 and above now prefer to not produce these cache entries
-at all.  This policy provides compatibility with projects that have
-not been updated to avoid using them.
-
-The ``OLD`` behavior for this policy is to set ``<tgt>_LIB_DEPENDS`` cache
-entries.  The ``NEW`` behavior for this policy is to not set them.
-
-This policy was introduced in CMake version 3.12.  Use the
-:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
-Unlike most policies, CMake version |release| does *not* warn
-when this policy is not set and simply uses ``OLD`` behavior.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0074.rst b/share/cmake-3.18/Help/policy/CMP0074.rst
deleted file mode 100644
index 63ebf7b..0000000
--- a/share/cmake-3.18/Help/policy/CMP0074.rst
+++ /dev/null
@@ -1,23 +0,0 @@
-CMP0074
--------
-
-:command:`find_package` uses ``<PackageName>_ROOT`` variables.
-
-In CMake 3.12 and above the :command:`find_package(<PackageName>)` command now
-searches prefixes specified by the :variable:`<PackageName>_ROOT` CMake
-variable and the :envvar:`<PackageName>_ROOT` environment variable.
-Package roots are maintained as a stack so nested calls to all ``find_*``
-commands inside find modules and config packages also search the roots as
-prefixes.  This policy provides compatibility with projects that have not been
-updated to avoid using ``<PackageName>_ROOT`` variables for other purposes.
-
-The ``OLD`` behavior for this policy is to ignore ``<PackageName>_ROOT``
-variables.  The ``NEW`` behavior for this policy is to use
-``<PackageName>_ROOT`` variables.
-
-This policy was introduced in CMake version 3.12.  CMake version
-|release| warns when the policy is not set and uses ``OLD`` behavior.
-Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
-explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0075.rst b/share/cmake-3.18/Help/policy/CMP0075.rst
deleted file mode 100644
index aa5c3f7..0000000
--- a/share/cmake-3.18/Help/policy/CMP0075.rst
+++ /dev/null
@@ -1,26 +0,0 @@
-CMP0075
--------
-
-Include file check macros honor ``CMAKE_REQUIRED_LIBRARIES``.
-
-In CMake 3.12 and above, the
-
-* ``check_include_file`` macro in the :module:`CheckIncludeFile` module, the
-* ``check_include_file_cxx`` macro in the
-  :module:`CheckIncludeFileCXX` module, and the
-* ``check_include_files`` macro in the :module:`CheckIncludeFiles` module
-
-now prefer to link the check executable to the libraries listed in the
-``CMAKE_REQUIRED_LIBRARIES`` variable.  This policy provides compatibility
-with projects that have not been updated to expect this behavior.
-
-The ``OLD`` behavior for this policy is to ignore ``CMAKE_REQUIRED_LIBRARIES``
-in the include file check macros.  The ``NEW`` behavior of this policy is to
-honor ``CMAKE_REQUIRED_LIBRARIES`` in the include file check macros.
-
-This policy was introduced in CMake version 3.12.  CMake version
-|release| warns when the policy is not set and uses ``OLD`` behavior.
-Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
-explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0076.rst b/share/cmake-3.18/Help/policy/CMP0076.rst
deleted file mode 100644
index dd25f80..0000000
--- a/share/cmake-3.18/Help/policy/CMP0076.rst
+++ /dev/null
@@ -1,26 +0,0 @@
-CMP0076
--------
-
-The :command:`target_sources` command converts relative paths to absolute.
-
-In CMake 3.13 and above, the :command:`target_sources` command now converts
-relative source file paths to absolute paths in the following cases:
-
-* Source files are added to the target's :prop_tgt:`INTERFACE_SOURCES`
-  property.
-* The target's :prop_tgt:`SOURCE_DIR` property differs from
-  :variable:`CMAKE_CURRENT_SOURCE_DIR`.
-
-A path that begins with a generator expression is always left unmodified.
-
-This policy provides compatibility with projects that have not been updated
-to expect this behavior.  The ``OLD`` behavior for this policy is to leave
-all relative source file paths unmodified.  The ``NEW`` behavior of this
-policy is to convert relative paths to absolute according to above rules.
-
-This policy was introduced in CMake version 3.13.  CMake version
-|release| warns when the policy is not set and uses ``OLD`` behavior.
-Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
-explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0077.rst b/share/cmake-3.18/Help/policy/CMP0077.rst
deleted file mode 100644
index 44797b6..0000000
--- a/share/cmake-3.18/Help/policy/CMP0077.rst
+++ /dev/null
@@ -1,52 +0,0 @@
-CMP0077
--------
-
-:command:`option` honors normal variables.
-
-The :command:`option` command is typically used to create a cache entry
-to allow users to set the option.  However, there are cases in which a
-normal (non-cached) variable of the same name as the option may be
-defined by the project prior to calling the :command:`option` command.
-For example, a project that embeds another project as a subdirectory
-may want to hard-code options of the subproject to build the way it needs.
-
-For historical reasons in CMake 3.12 and below the :command:`option`
-command *removes* a normal (non-cached) variable of the same name when:
-
-* a cache entry of the specified name does not exist at all, or
-* a cache entry of the specified name exists but has not been given
-  a type (e.g. via ``-D<name>=ON`` on the command line).
-
-In both of these cases (typically on the first run in a new build tree),
-the :command:`option` command gives the cache entry type ``BOOL`` and
-removes any normal (non-cached) variable of the same name.  In the
-remaining case that the cache entry of the specified name already
-exists and has a type (typically on later runs in a build tree), the
-:command:`option` command changes nothing and any normal variable of
-the same name remains set.
-
-In CMake 3.13 and above the :command:`option` command prefers to
-do nothing when a normal variable of the given name already exists.
-It does not create or update a cache entry or remove the normal variable.
-The new behavior is consistent between the first and later runs in a
-build tree.  This policy provides compatibility with projects that have
-not been updated to expect the new behavior.
-
-When the :command:`option` command sees a normal variable of the given
-name:
-
-* The ``OLD`` behavior for this policy is to proceed even when a normal
-  variable of the same name exists.  If the cache entry does not already
-  exist and have a type then it is created and/or given a type and the
-  normal variable is removed.
-
-* The ``NEW`` behavior for this policy is to do nothing when a normal
-  variable of the same name exists.  The normal variable is not removed.
-  The cache entry is not created or updated and is ignored if it exists.
-
-This policy was introduced in CMake version 3.13.  CMake version
-|release| warns when the policy is not set and uses ``OLD`` behavior.
-Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
-explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0078.rst b/share/cmake-3.18/Help/policy/CMP0078.rst
deleted file mode 100644
index 2e97934..0000000
--- a/share/cmake-3.18/Help/policy/CMP0078.rst
+++ /dev/null
@@ -1,24 +0,0 @@
-CMP0078
--------
-
-:module:`UseSWIG` generates standard target names.
-
-Starting with CMake 3.13, :module:`UseSWIG` generates now standard target
-names. This policy provides compatibility with projects that expect the legacy
-behavior.
-
-The ``OLD`` behavior for this policy relies on
-``UseSWIG_TARGET_NAME_PREFERENCE`` variable that can be used to specify an
-explicit preference.  The value may be one of:
-
-* ``LEGACY``: legacy strategy is applied. Variable
-  ``SWIG_MODULE_<name>_REAL_NAME`` must be used to get real target name.
-  This is the default if not specified.
-* ``STANDARD``: target name matches specified name.
-
-This policy was introduced in CMake version 3.13.  CMake version
-|release| warns when the policy is not set and uses ``OLD`` behavior.
-Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
-explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0079.rst b/share/cmake-3.18/Help/policy/CMP0079.rst
deleted file mode 100644
index 0244d6c..0000000
--- a/share/cmake-3.18/Help/policy/CMP0079.rst
+++ /dev/null
@@ -1,40 +0,0 @@
-CMP0079
--------
-
-:command:`target_link_libraries` allows use with targets in other directories.
-
-Prior to CMake 3.13 the :command:`target_link_libraries` command did not
-accept targets not created in the calling directory as its first argument
-for calls that update the :prop_tgt:`LINK_LIBRARIES` of the target itself.
-It did accidentally accept targets from other directories on calls that
-only update the :prop_tgt:`INTERFACE_LINK_LIBRARIES`, but would simply
-add entries to the property as if the call were made in the original
-directory.  Thus link interface libraries specified this way were always
-looked up by generators in the scope of the original target rather than
-in the scope that called :command:`target_link_libraries`.
-
-CMake 3.13 now allows the :command:`target_link_libraries` command to
-be called from any directory to add link dependencies and link interface
-libraries to targets created in other directories.  The entries are added
-to :prop_tgt:`LINK_LIBRARIES` and :prop_tgt:`INTERFACE_LINK_LIBRARIES`
-using a special (internal) suffix to tell the generators to look up the
-names in the calling scope rather than the scope that created the target.
-
-This policy provides compatibility with projects that already use
-:command:`target_link_libraries` with the ``INTERFACE`` keyword
-on a target in another directory to add :prop_tgt:`INTERFACE_LINK_LIBRARIES`
-entries to be looked up in the target's directory.  Such projects should
-be updated to be aware of the new scoping rules in that case.
-
-The ``OLD`` behavior of this policy is to disallow
-:command:`target_link_libraries` calls naming targets from another directory
-except in the previously accidentally allowed case of using the ``INTERFACE``
-keyword only.  The ``NEW`` behavior of this policy is to allow all such
-calls but use the new scoping rules.
-
-This policy was introduced in CMake version 3.13.  CMake version
-|release| warns when the policy is not set and uses ``OLD`` behavior.
-Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
-explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0080.rst b/share/cmake-3.18/Help/policy/CMP0080.rst
deleted file mode 100644
index 5ce9591..0000000
--- a/share/cmake-3.18/Help/policy/CMP0080.rst
+++ /dev/null
@@ -1,25 +0,0 @@
-CMP0080
--------
-
-:module:`BundleUtilities` cannot be included at configure time.
-
-The macros provided by :module:`BundleUtilities` are intended to be invoked
-at install time rather than at configure time, because they depend on the
-listed targets already existing at the time they are invoked. If they are
-invoked at configure time, the targets haven't been built yet, and the
-commands will fail.
-
-This policy restricts the inclusion of :module:`BundleUtilities` to
-``cmake -P`` style scripts and install rules. Specifically, it looks for the
-presence of :variable:`CMAKE_GENERATOR` and throws a fatal error if it exists.
-
-The ``OLD`` behavior of this policy is to allow :module:`BundleUtilities` to
-be included at configure time. The ``NEW`` behavior of this policy is to
-disallow such inclusion.
-
-This policy was introduced in CMake version 3.13.  CMake version
-|release| warns when the policy is not set and uses ``OLD`` behavior.
-Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
-explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0081.rst b/share/cmake-3.18/Help/policy/CMP0081.rst
deleted file mode 100644
index d3b2872..0000000
--- a/share/cmake-3.18/Help/policy/CMP0081.rst
+++ /dev/null
@@ -1,22 +0,0 @@
-CMP0081
--------
-
-Relative paths not allowed in :prop_tgt:`LINK_DIRECTORIES` target property.
-
-CMake 3.12 and lower allowed the :prop_dir:`LINK_DIRECTORIES` directory
-property to contain relative paths.  The base path for such relative
-entries is not well defined.  CMake 3.13 and later will issue a
-``FATAL_ERROR`` if the :prop_tgt:`LINK_DIRECTORIES` target property
-(which is initialized by the :prop_dir:`LINK_DIRECTORIES` directory property)
-contains a relative path.
-
-The ``OLD`` behavior for this policy is not to warn about relative paths
-in the :prop_tgt:`LINK_DIRECTORIES` target property.  The ``NEW`` behavior for
-this policy is to issue a ``FATAL_ERROR`` if :prop_tgt:`LINK_DIRECTORIES`
-contains a relative path.
-
-This policy was introduced in CMake version 3.13.  CMake version
-|release| warns when the policy is not set and uses ``OLD`` behavior.  Use
-the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0082.rst b/share/cmake-3.18/Help/policy/CMP0082.rst
deleted file mode 100644
index d887616..0000000
--- a/share/cmake-3.18/Help/policy/CMP0082.rst
+++ /dev/null
@@ -1,26 +0,0 @@
-CMP0082
--------
-
-Install rules from :command:`add_subdirectory` calls are interleaved with
-those in caller.
-
-CMake 3.13 and lower ran the install rules from :command:`add_subdirectory`
-after all other install rules, even if :command:`add_subdirectory` was called
-before the other install rules.  CMake 3.14 and above prefer to interleave
-these :command:`add_subdirectory` install rules with the others so that
-they are run in the order they are declared.  This policy provides
-compatibility for projects that have not been updated to expect the
-new behavior.
-
-The ``OLD`` behavior for this policy is to run the install rules from
-:command:`add_subdirectory` after the other install rules.  The ``NEW``
-behavior for this policy is to run all install rules in the order they are
-declared.
-
-This policy was introduced in CMake version 3.14.  Unlike most policies,
-CMake version |release| does *not* warn by default when this policy
-is not set and simply uses ``OLD`` behavior.  See documentation of the
-:variable:`CMAKE_POLICY_WARNING_CMP0082 <CMAKE_POLICY_WARNING_CMP<NNNN>>`
-variable to control the warning.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0083.rst b/share/cmake-3.18/Help/policy/CMP0083.rst
deleted file mode 100644
index e0b09cf..0000000
--- a/share/cmake-3.18/Help/policy/CMP0083.rst
+++ /dev/null
@@ -1,69 +0,0 @@
-CMP0083
--------
-
-To control generation of Position Independent Executable (``PIE``) or not, some
-flags are required at link time.
-
-CMake 3.13 and lower did not add these link flags when
-:prop_tgt:`POSITION_INDEPENDENT_CODE` is set.
-
-The ``OLD`` behavior for this policy is to not manage ``PIE`` link flags. The
-``NEW`` behavior is to add link flags if :prop_tgt:`POSITION_INDEPENDENT_CODE`
-is set:
-
-* Set to ``TRUE``: flags to produce a position independent executable are
-  passed to the linker step. For example ``-pie`` for ``GCC``.
-* Set to ``FALSE``: flags not to produce a position independent executable are
-  passed to the linker step. For example ``-no-pie`` for ``GCC``.
-* Not set: no flags are passed to the linker step.
-
-Since a given linker may not support ``PIE`` flags in all environments in
-which it is used, it is the project's responsibility to use the
-:module:`CheckPIESupported` module to check for support to ensure that the
-:prop_tgt:`POSITION_INDEPENDENT_CODE` target property for executables will be
-honored at link time.
-
-This policy was introduced in CMake version 3.14. Use the
-:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
-Unlike most policies, CMake version |release| does not warn when this policy is
-not set and simply uses ``OLD`` behavior.
-
-.. Note::
-
-   Android platform has a special handling of ``PIE`` so it is not required
-   to use the :module:`CheckPIESupported` module to ensure flags are passed to
-   the linker.
-
-.. include:: DEPRECATED.txt
-
-Examples
-^^^^^^^^
-
-Behave like CMake 3.13 and do not apply any ``PIE`` flags at link stage.
-
-.. code-block:: cmake
-
-  cmake_minimum_required(VERSION 3.13)
-  project(foo)
-
-  # ...
-
-  add_executable(foo ...)
-  set_property(TARGET foo PROPERTY POSITION_INDEPENDENT_CODE TRUE)
-
-Use the :module:`CheckPIESupported` module to detect whether ``PIE`` is
-supported by the current linker and environment.  Apply ``PIE`` flags only
-if the linker supports them.
-
-.. code-block:: cmake
-
-  cmake_minimum_required(VERSION 3.14) # CMP0083 NEW
-  project(foo)
-
-  include(CheckPIESupported)
-  check_pie_supported()
-
-  # ...
-
-  add_executable(foo ...)
-  set_property(TARGET foo PROPERTY POSITION_INDEPENDENT_CODE TRUE)
diff --git a/share/cmake-3.18/Help/policy/CMP0084.rst b/share/cmake-3.18/Help/policy/CMP0084.rst
deleted file mode 100644
index 713d295..0000000
--- a/share/cmake-3.18/Help/policy/CMP0084.rst
+++ /dev/null
@@ -1,26 +0,0 @@
-CMP0084
--------
-
-The :module:`FindQt` module does not exist for :command:`find_package`.
-
-The existence of :module:`FindQt` means that for Qt upstream to provide
-package config files that can be found by ``find_package(Qt)``, the consuming
-project has to explicitly specify ``find_package(Qt CONFIG)``. Removing this
-module gives Qt a path forward for exporting its own config files which can
-easily be found by consuming projects.
-
-This policy pretends that CMake's internal :module:`FindQt` module does not
-exist for :command:`find_package`. If a project really wants to use Qt 3 or 4,
-it can call ``find_package(Qt[34])``, ``include(FindQt)``, or add
-:module:`FindQt` to their :variable:`CMAKE_MODULE_PATH`.
-
-The ``OLD`` behavior of this policy is for :module:`FindQt` to exist for
-:command:`find_package`. The ``NEW`` behavior is to pretend that it doesn't
-exist for :command:`find_package`.
-
-This policy was introduced in CMake version 3.14.  CMake version
-|release| warns when the policy is not set and uses ``OLD`` behavior.
-Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
-explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0085.rst b/share/cmake-3.18/Help/policy/CMP0085.rst
deleted file mode 100644
index d9ec9a2..0000000
--- a/share/cmake-3.18/Help/policy/CMP0085.rst
+++ /dev/null
@@ -1,21 +0,0 @@
-CMP0085
--------
-
-``$<IN_LIST:...>`` handles empty list items.
-
-In CMake 3.13 and lower, the ``$<IN_LIST:...>`` generator expression always
-returned ``0`` if the first argument was empty, even if the list contained an
-empty item. This behavior is inconsistent with the ``IN_LIST`` behavior of
-:command:`if`, which this generator expression is meant to emulate. CMake 3.14
-and later handles this case correctly.
-
-The ``OLD`` behavior of this policy is for ``$<IN_LIST:...>`` to always return
-``0`` if the first argument is empty. The ``NEW`` behavior is to return ``1``
-if the first argument is empty and the list contains an empty item.
-
-This policy was introduced in CMake version 3.14.  CMake version
-|release| warns when the policy is not set and uses ``OLD`` behavior.
-Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
-explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0086.rst b/share/cmake-3.18/Help/policy/CMP0086.rst
deleted file mode 100644
index 4a9e8b8..0000000
--- a/share/cmake-3.18/Help/policy/CMP0086.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-CMP0086
--------
-
-:module:`UseSWIG` honors ``SWIG_MODULE_NAME`` via ``-module`` flag.
-
-Starting with CMake 3.14, :module:`UseSWIG` passes option
-``-module <module_name>`` to ``SWIG`` compiler if the file property
-``SWIG_MODULE_NAME`` is specified. This policy provides compatibility with
-projects that expect the legacy behavior.
-
-The ``OLD`` behavior for this policy is to never pass ``-module`` option.
-The ``NEW`` behavior is to pass ``-module`` option to ``SWIG`` compiler if
-``SWIG_MODULE_NAME`` is specified.
-
-This policy was introduced in CMake version 3.14.  CMake version
-|release| warns when the policy is not set and uses ``OLD`` behavior.
-Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
-explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0087.rst b/share/cmake-3.18/Help/policy/CMP0087.rst
deleted file mode 100644
index 4c45b99..0000000
--- a/share/cmake-3.18/Help/policy/CMP0087.rst
+++ /dev/null
@@ -1,29 +0,0 @@
-CMP0087
--------
-
-:command:`install(CODE)` and :command:`install(SCRIPT)` support generator
-expressions.
-
-In CMake 3.13 and earlier, :command:`install(CODE)` and
-:command:`install(SCRIPT)` did not evaluate generator expressions.  CMake 3.14
-and later will evaluate generator expressions for :command:`install(CODE)` and
-:command:`install(SCRIPT)`.
-
-The ``OLD`` behavior of this policy is for :command:`install(CODE)` and
-:command:`install(SCRIPT)` to not evaluate generator expressions.  The ``NEW``
-behavior is to evaluate generator expressions for :command:`install(CODE)` and
-:command:`install(SCRIPT)`.
-
-Note that it is the value of this policy setting at the end of the directory
-scope that is important, not its setting at the time of the call to
-:command:`install(CODE)` or :command:`install(SCRIPT)`.  This has implications
-for calling these commands from places that have their own policy scope but not
-their own directory scope (e.g. from files brought in via :command:`include()`
-rather than :command:`add_subdirectory()`).
-
-This policy was introduced in CMake version 3.14.  CMake version
-|release| warns when the policy is not set and uses ``OLD`` behavior.
-Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
-explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0088.rst b/share/cmake-3.18/Help/policy/CMP0088.rst
deleted file mode 100644
index 82c04ef..0000000
--- a/share/cmake-3.18/Help/policy/CMP0088.rst
+++ /dev/null
@@ -1,29 +0,0 @@
-CMP0088
--------
-
-:module:`FindBISON` runs bison in :variable:`CMAKE_CURRENT_BINARY_DIR`
-when executing.
-
-The module provides a ``BISON_TARGET`` macro which generates BISON output.
-In CMake 3.13 and below the macro would generate a custom command that runs
-``bison`` in the source directory.  CMake 3.14 and later prefer to run it
-in the build directory and use :variable:`CMAKE_CURRENT_BINARY_DIR` as the
-``WORKING_DIRECTORY`` of its :command:`add_custom_command` invocation.
-This ensures that any implicitly generated file is written to the build
-tree rather than the source.
-
-This policy provides compatibility for projects that have not been updated
-to expect the new behavior.
-
-The ``OLD`` behavior for this policy is for ``BISON_TARGET`` to use
-the current source directory for the ``WORKING_DIRECTORY`` and where
-to generate implicit files. The ``NEW`` behavior of this policy is to
-use the current binary directory for the ``WORKING_DIRECTORY`` and where
-to generate implicit files.
-
-This policy was introduced in CMake version 3.14.  Use the
-:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
-Unlike most policies, CMake version |release| does *not* warn
-when this policy is not set and simply uses ``OLD`` behavior.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0089.rst b/share/cmake-3.18/Help/policy/CMP0089.rst
deleted file mode 100644
index 029de55..0000000
--- a/share/cmake-3.18/Help/policy/CMP0089.rst
+++ /dev/null
@@ -1,30 +0,0 @@
-CMP0089
--------
-
-Compiler id for IBM Clang-based XL compilers is now ``XLClang``.
-
-CMake 3.15 and above recognize that IBM's Clang-based XL compilers
-that define ``__ibmxl__`` are a new front-end distinct from ``xlc``
-with a different command line and set of capabilities.
-CMake now prefers to present this to projects by setting the
-:variable:`CMAKE_<LANG>_COMPILER_ID` variable to ``XLClang`` instead
-of ``XL``.  However, existing projects may assume the compiler id for
-Clang-based XL is just ``XL`` as it was in CMake versions prior to 3.15.
-Therefore this policy determines for Clang-based XL compilers which
-compiler id to report in the :variable:`CMAKE_<LANG>_COMPILER_ID`
-variable after language ``<LANG>`` is enabled by the :command:`project`
-or :command:`enable_language` command.  The policy must be set prior
-to the invocation of either command.
-
-The ``OLD`` behavior for this policy is to use compiler id ``XL``.  The
-``NEW`` behavior for this policy is to use compiler id ``XLClang``.
-
-This policy was introduced in CMake version 3.15.  Use the
-:command:`cmake_policy` command to set this policy to ``OLD`` or ``NEW`` explicitly.
-Unlike most policies, CMake version |release| does *not* warn
-by default when this policy is not set and simply uses ``OLD`` behavior.
-See documentation of the
-:variable:`CMAKE_POLICY_WARNING_CMP0089 <CMAKE_POLICY_WARNING_CMP<NNNN>>`
-variable to control the warning.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0090.rst b/share/cmake-3.18/Help/policy/CMP0090.rst
deleted file mode 100644
index 720c17c..0000000
--- a/share/cmake-3.18/Help/policy/CMP0090.rst
+++ /dev/null
@@ -1,27 +0,0 @@
-CMP0090
--------
-
-:command:`export(PACKAGE)` does not populate package registry by default.
-
-In CMake 3.14 and below the :command:`export(PACKAGE)` command populated the
-user package registry by default and users needed to set the
-:variable:`CMAKE_EXPORT_NO_PACKAGE_REGISTRY` to disable it, e.g. in automated
-build and packaging environments.  Since the user package registry is stored
-outside the build tree, this side effect should not be enabled by default.
-Therefore CMake 3.15 and above prefer that :command:`export(PACKAGE)` does
-nothing unless an explicit :variable:`CMAKE_EXPORT_PACKAGE_REGISTRY` variable
-is set to enable it.  This policy provides compatibility with projects that
-have not been updated.
-
-The ``OLD`` behavior for this policy is for :command:`export(PACKAGE)` command
-to populate the user package registry unless
-:variable:`CMAKE_EXPORT_NO_PACKAGE_REGISTRY` is enabled.
-The ``NEW`` behavior is for :command:`export(PACKAGE)` command to do nothing
-unless the :variable:`CMAKE_EXPORT_PACKAGE_REGISTRY` is enabled.
-
-This policy was introduced in CMake version 3.15.  Use the
-:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
-Unlike most policies, CMake version |release| does *not* warn
-when this policy is not set and simply uses ``OLD`` behavior.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0091.rst b/share/cmake-3.18/Help/policy/CMP0091.rst
deleted file mode 100644
index 1a5878a..0000000
--- a/share/cmake-3.18/Help/policy/CMP0091.rst
+++ /dev/null
@@ -1,49 +0,0 @@
-CMP0091
--------
-
-MSVC runtime library flags are selected by an abstraction.
-
-Compilers targeting the MSVC ABI have flags to select the MSVC runtime library.
-Runtime library selection typically varies with build configuration because
-there is a separate runtime library for Debug builds.
-
-In CMake 3.14 and below, MSVC runtime library selection flags are added to
-the default :variable:`CMAKE_<LANG>_FLAGS_<CONFIG>` cache entries by CMake
-automatically.  This allows users to edit their cache entries to adjust the
-flags.  However, the presence of such default flags is problematic for
-projects that want to choose a different runtime library programmatically.
-In particular, it requires string editing of the
-:variable:`CMAKE_<LANG>_FLAGS_<CONFIG>` variables with knowledge of the
-CMake builtin defaults so they can be replaced.
-
-CMake 3.15 and above prefer to leave the MSVC runtime library selection flags
-out of the default :variable:`CMAKE_<LANG>_FLAGS_<CONFIG>` values and instead
-offer a first-class abstraction.  The :variable:`CMAKE_MSVC_RUNTIME_LIBRARY`
-variable and :prop_tgt:`MSVC_RUNTIME_LIBRARY` target property may be set to
-select the MSVC runtime library.  If they are not set then CMake uses the
-default value ``MultiThreaded$<$<CONFIG:Debug>:Debug>DLL`` which is
-equivalent to the original flags.
-
-This policy provides compatibility with projects that have not been updated
-to be aware of the abstraction.  The policy setting takes effect as of the
-first :command:`project` or :command:`enable_language` command that enables
-a language whose compiler targets the MSVC ABI.
-
-.. note::
-
-  Once the policy has taken effect at the top of a project, that choice
-  must be used throughout the tree.  In projects that have nested projects
-  in subdirectories, be sure to convert everything together.
-
-The ``OLD`` behavior for this policy is to place MSVC runtime library
-flags in the default :variable:`CMAKE_<LANG>_FLAGS_<CONFIG>` cache
-entries and ignore the :variable:`CMAKE_MSVC_RUNTIME_LIBRARY` abstraction.
-The ``NEW`` behavior for this policy is to *not* place MSVC runtime
-library flags in the default cache entries and use the abstraction instead.
-
-This policy was introduced in CMake version 3.15.  Use the
-:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
-Unlike many policies, CMake version |release| does *not* warn
-when this policy is not set and simply uses ``OLD`` behavior.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0092.rst b/share/cmake-3.18/Help/policy/CMP0092.rst
deleted file mode 100644
index 8d3a288..0000000
--- a/share/cmake-3.18/Help/policy/CMP0092.rst
+++ /dev/null
@@ -1,38 +0,0 @@
-CMP0092
--------
-
-MSVC warning flags are not in :variable:`CMAKE_<LANG>_FLAGS` by default.
-
-When using MSVC-like compilers in CMake 3.14 and below, warning flags
-like ``/W3`` are added to :variable:`CMAKE_<LANG>_FLAGS` by default.
-This is problematic for projects that want to choose a different warning
-level programmatically.  In particular, it requires string editing of the
-:variable:`CMAKE_<LANG>_FLAGS` variables with knowledge of the
-CMake builtin defaults so they can be replaced.
-
-CMake 3.15 and above prefer to leave out warning flags from the value of
-:variable:`CMAKE_<LANG>_FLAGS` by default.
-
-This policy provides compatibility with projects that have not been updated
-to expect the lack of warning flags.  The policy setting takes effect as of
-the first :command:`project` or :command:`enable_language` command that
-initializes :variable:`CMAKE_<LANG>_FLAGS` for a given lanuage ``<LANG>``.
-
-.. note::
-
-  Once the policy has taken effect at the top of a project for a given
-  language, that choice must be used throughout the tree for that language.
-  In projects that have nested projects in subdirectories, be sure to
-  convert everything together.
-
-The ``OLD`` behavior for this policy is to place MSVC warning flags in the
-default :variable:`CMAKE_<LANG>_FLAGS` cache entries.  The ``NEW`` behavior
-for this policy is to *not* place MSVC warning flags in the default cache
-entries.
-
-This policy was introduced in CMake version 3.15.  Use the
-:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
-Unlike many policies, CMake version |release| does *not* warn
-when this policy is not set and simply uses ``OLD`` behavior.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0093.rst b/share/cmake-3.18/Help/policy/CMP0093.rst
deleted file mode 100644
index 0ffc493..0000000
--- a/share/cmake-3.18/Help/policy/CMP0093.rst
+++ /dev/null
@@ -1,24 +0,0 @@
-CMP0093
--------
-
-:module:`FindBoost` reports ``Boost_VERSION`` in ``x.y.z`` format.
-
-In CMake 3.14 and below the module would report the Boost version
-number as specified in the preprocessor definition ``BOOST_VERSION`` in
-the ``boost/version.hpp`` file. In CMake 3.15 and later it is preferred
-that the reported version number matches the ``x.y.z`` format reported
-by the CMake package shipped with Boost ``1.70.0`` and later. The macro
-value is still reported in the ``Boost_VERSION_MACRO`` variable.
-
-The ``OLD`` behavior for this policy is for :module:`FindBoost` to report
-``Boost_VERSION`` as specified in the preprocessor definition
-``BOOST_VERSION`` in ``boost/version.hpp``. The ``NEW`` behavior for this
-policy is for :module:`FindBoost` to report ``Boost_VERSION`` in
-``x.y.z`` format.
-
-This policy was introduced in CMake version 3.15.  Use the
-:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
-Unlike many policies, CMake version |release| does *not* warn
-when this policy is not set and simply uses the ``OLD`` behavior.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0094.rst b/share/cmake-3.18/Help/policy/CMP0094.rst
deleted file mode 100644
index 836f30f..0000000
--- a/share/cmake-3.18/Help/policy/CMP0094.rst
+++ /dev/null
@@ -1,22 +0,0 @@
-CMP0094
--------
-
-Modules :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
-use ``LOCATION`` for lookup strategy.
-
-Starting with CMake 3.15, Modules :module:`FindPython3`, :module:`FindPython2`
-and :module:`FindPython` set value ``LOCATION`` for, respectively, variables
-``Python3_FIND_STRATEGY``, ``Python2_FIND_STRATEGY`` and
-``Python_FIND_STRATEGY``. This policy provides compatibility with projects that
-expect the legacy behavior.
-
-The ``OLD`` behavior for this policy set value ``VERSION`` for variables
-``Python3_FIND_STRATEGY``, ``Python2_FIND_STRATEGY`` and
-``Python_FIND_STRATEGY``.
-
-This policy was introduced in CMake version 3.15.  Use the
-:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
-Unlike many policies, CMake version |release| does *not* warn
-when this policy is not set and simply uses the ``OLD`` behavior.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0095.rst b/share/cmake-3.18/Help/policy/CMP0095.rst
deleted file mode 100644
index 4c56a05..0000000
--- a/share/cmake-3.18/Help/policy/CMP0095.rst
+++ /dev/null
@@ -1,30 +0,0 @@
-CMP0095
--------
-
-``RPATH`` entries are properly escaped in the intermediary CMake install script.
-
-In CMake 3.15 and earlier, ``RPATH`` entries set via
-:variable:`CMAKE_INSTALL_RPATH` or via :prop_tgt:`INSTALL_RPATH` have not been
-escaped before being inserted into the ``cmake_install.cmake`` script. Dynamic
-linkers on ELF-based systems (e.g. Linux and FreeBSD) allow certain keywords in
-``RPATH`` entries, such as ``${ORIGIN}`` (More details are available in the
-``ld.so`` man pages on those systems). The syntax of these keywords can match
-CMake's variable syntax. In order to not be substituted (usually to an empty
-string) already by the intermediary ``cmake_install.cmake`` script, the user had
-to double-escape such ``RPATH`` keywords, e.g.
-``set(CMAKE_INSTALL_RPATH "\\\${ORIGIN}/../lib")``. Since the intermediary
-``cmake_install.cmake`` script is an implementation detail of CMake, CMake 3.16
-and later will make sure ``RPATH`` entries are inserted literally by escaping
-any coincidental CMake syntax.
-
-The ``OLD`` behavior of this policy is to not escape ``RPATH`` entries in the
-intermediary ``cmake_install.cmake`` script. The ``NEW`` behavior is to properly
-escape coincidental CMake syntax in ``RPATH`` entries when generating the
-intermediary ``cmake_install.cmake`` script.
-
-This policy was introduced in CMake version 3.16. CMake version |release| warns
-when the policy is not set and detected usage of CMake-like syntax and uses
-``OLD`` behavior. Use the :command:`cmake_policy` command to set it to ``OLD``
-or ``NEW`` explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0096.rst b/share/cmake-3.18/Help/policy/CMP0096.rst
deleted file mode 100644
index 8eaf0f9..0000000
--- a/share/cmake-3.18/Help/policy/CMP0096.rst
+++ /dev/null
@@ -1,25 +0,0 @@
-CMP0096
--------
-
-The :command:`project` command preserves leading zeros in version components.
-
-When a ``VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]`` argument is given
-to the :command:`project` command, it stores the version string in the
-``PROJECT_VERSION`` variable and stores individual integer version components
-in ``PROJECT_VERSION_{MAJOR,MINOR,PATCH,TWEAK}`` variables (see policy
-:policy:`CMP0048`).  CMake 3.15 and below dropped leading zeros from each
-component.  CMake 3.16 and higher prefer to preserve leading zeros.  This
-policy provides compatibility for projects that have not been updated to
-expect the new behavior.
-
-The ``OLD`` behavior of this policy drops leading zeros in all components,
-e.g.  such that version ``1.07.06`` becomes ``1.7.6``.  The ``NEW`` behavior
-of this policy preserves the leading zeros in all components, such that
-version ``1.07.06`` remains unchanged.
-
-This policy was introduced in CMake version 3.16.  Unlike many policies, CMake
-version |release| does *not* warn when this policy is not set and simply uses
-the ``OLD`` behavior.  Use the :command:`cmake_policy` command to set it to
-``OLD`` or ``NEW`` explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0097.rst b/share/cmake-3.18/Help/policy/CMP0097.rst
deleted file mode 100644
index 4840aa6..0000000
--- a/share/cmake-3.18/Help/policy/CMP0097.rst
+++ /dev/null
@@ -1,23 +0,0 @@
-CMP0097
--------
-
-:command:`ExternalProject_Add` with ``GIT_SUBMODULES ""`` initializes no
-submodules.
-
-The module provides a ``GIT_SUBMODULES`` option which controls what submodules
-to initialize and update. Starting with CMake 3.16, explicitly setting
-``GIT_SUBMODULES`` to an empty string means no submodules will be initialized
-or updated.
-
-This policy provides compatibility for projects that have not been updated
-to expect the new behavior.
-
-The ``OLD`` behavior for this policy is for ``GIT_SUBMODULES`` when set to
-an empty string to initialize and update all git submodules.
-The ``NEW`` behavior for this policy is for ``GIT_SUBMODULES`` when set to
-an empty string to initialize and update no git submodules.
-
-This policy was introduced in CMake version 3.16.  Use the
-:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
-Unlike most policies, CMake version |release| does *not* warn
-when this policy is not set and simply uses ``OLD`` behavior.
diff --git a/share/cmake-3.18/Help/policy/CMP0098.rst b/share/cmake-3.18/Help/policy/CMP0098.rst
deleted file mode 100644
index 6d1443b..0000000
--- a/share/cmake-3.18/Help/policy/CMP0098.rst
+++ /dev/null
@@ -1,30 +0,0 @@
-CMP0098
--------
-
-:module:`FindFLEX` runs ``flex`` in directory
-:variable:`CMAKE_CURRENT_BINARY_DIR` when executing.
-
-The module provides a ``FLEX_TARGET`` macro which generates FLEX output.
-In CMake 3.16 and below the macro would generate a custom command that runs
-``flex`` in the current source directory.  CMake 3.17 and later prefer to
-run it in the build directory and use :variable:`CMAKE_CURRENT_BINARY_DIR`
-as the ``WORKING_DIRECTORY`` of its :command:`add_custom_command` invocation.
-This ensures that any implicitly generated file is written relative to the
-build tree rather than the source tree, unless the generated file is
-provided as absolute path.
-
-This policy provides compatibility for projects that have not been updated
-to expect the new behavior.
-
-The ``OLD`` behavior for this policy is for ``FLEX_TARGET`` to use
-the current source directory for the ``WORKING_DIRECTORY`` and where
-to generate implicit files. The ``NEW`` behavior of this policy is to
-use the current binary directory for the ``WORKING_DIRECTORY`` relative to
-which implicit files are generated unless provided as absolute path.
-
-This policy was introduced in CMake version 3.17.  Use the
-:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
-Unlike many policies, CMake version |release| does *not* warn
-when this policy is not set and simply uses ``OLD`` behavior.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0099.rst b/share/cmake-3.18/Help/policy/CMP0099.rst
deleted file mode 100644
index c897e7b..0000000
--- a/share/cmake-3.18/Help/policy/CMP0099.rst
+++ /dev/null
@@ -1,24 +0,0 @@
-CMP0099
--------
-
-Target link properties :prop_tgt:`INTERFACE_LINK_OPTIONS`,
-:prop_tgt:`INTERFACE_LINK_DIRECTORIES` and :prop_tgt:`INTERFACE_LINK_DEPENDS`
-are now transitive over private dependencies of static libraries.
-
-In CMake 3.16 and below the interface link properties attached to libraries
-are not propagated for private dependencies of static libraries.
-Only the libraries themselves are propagated to link the dependent binary.
-CMake 3.17 and later prefer to propagate all interface link properties.
-This policy provides compatibility for projects that have not been updated
-to expect the new behavior.
-
-The ``OLD`` behavior for this policy is to not propagate interface link
-properties. The ``NEW`` behavior of this policy is to propagate interface link
-properties.
-
-This policy was introduced in CMake version 3.17.  Use the
-:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
-Unlike many policies, CMake version |release| does *not* warn
-when this policy is not set and simply uses ``OLD`` behavior.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0100.rst b/share/cmake-3.18/Help/policy/CMP0100.rst
deleted file mode 100644
index b24d013..0000000
--- a/share/cmake-3.18/Help/policy/CMP0100.rst
+++ /dev/null
@@ -1,40 +0,0 @@
-CMP0100
--------
-
-Let :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC` process
-header files that end with a ``.hh`` extension.
-
-Since version 3.17, CMake processes header files that end with a
-``.hh`` extension in :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`.
-In earlier CMake versions, these header files were ignored by
-:prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`.
-
-This policy affects how header files that end with a ``.hh`` extension
-get treated in :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`.
-
-The ``OLD`` behavior for this policy is to ignore ``.hh`` header files
-in :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`.
-
-The ``NEW`` behavior for this policy is to process ``.hh`` header files
-in :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC` just like other header files.
-
-.. note::
-
-  To silence the ``CMP0100`` warning source files can be excluded from
-  :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC` processing by setting the
-  source file properties :prop_sf:`SKIP_AUTOMOC`, :prop_sf:`SKIP_AUTOUIC` or
-  :prop_sf:`SKIP_AUTOGEN`.
-
-  .. code-block:: cmake
-
-    # Source skip example:
-    set_property(SOURCE /path/to/file1.hh PROPERTY SKIP_AUTOMOC ON)
-    set_property(SOURCE /path/to/file2.hh PROPERTY SKIP_AUTOUIC ON)
-    set_property(SOURCE /path/to/file3.hh PROPERTY SKIP_AUTOGEN ON)
-
-This policy was introduced in CMake version 3.17.0.  CMake version
-|release| warns when the policy is not set and uses ``OLD`` behavior.
-Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
-explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0101.rst b/share/cmake-3.18/Help/policy/CMP0101.rst
deleted file mode 100644
index 9941acf..0000000
--- a/share/cmake-3.18/Help/policy/CMP0101.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-CMP0101
--------
-
-:command:`target_compile_options` now honors ``BEFORE`` keyword in all scopes.
-
-In CMake 3.16 and below the :command:`target_compile_options` ignores the
-``BEFORE`` keyword in private scope. CMake 3.17 and later honors
-``BEFORE`` keyword in all scopes. This policy provides compatibility for
-projects that have not been updated to expect the new behavior.
-
-The ``OLD`` behavior for this policy is to not honor ``BEFORE`` keyword in
-private scope. The ``NEW`` behavior of this policy is to honor
-``BEFORE`` keyword in all scopes.
-
-This policy was introduced in CMake version 3.17.  Use the
-:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
-Unlike many policies, CMake version |release| does *not* warn
-when this policy is not set and simply uses ``OLD`` behavior.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0102.rst b/share/cmake-3.18/Help/policy/CMP0102.rst
deleted file mode 100644
index 9859006..0000000
--- a/share/cmake-3.18/Help/policy/CMP0102.rst
+++ /dev/null
@@ -1,25 +0,0 @@
-CMP0102
--------
-
-The :command:`mark_as_advanced` command no longer creates a cache entry if one
-does not already exist.
-
-In CMake 3.16 and below, if a variable was not defined at all or just defined
-locally, the :command:`mark_as_advanced` command would create a new cache
-entry with an ``UNINITIALIZED`` type and no value. When a :command:`find_path`
-(or other similar ``find_`` command) would next run, it would find this
-undefined cache entry and set it up with an empty string value. This process
-would end up deleting the local variable in the process (due to the way the
-cache works), effectively clearing any stored ``find_`` results that were only
-available in the local scope.
-
-The ``OLD`` behavior for this policy is to create the empty cache definition.
-The ``NEW`` behavior of this policy is to ignore variables which do not
-already exist in the cache.
-
-This policy was introduced in CMake version 3.17.  Use the
-:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
-Unlike many policies, CMake version |release| does *not* warn
-when this policy is not set and simply uses ``OLD`` behavior.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0103.rst b/share/cmake-3.18/Help/policy/CMP0103.rst
deleted file mode 100644
index 223e0cb..0000000
--- a/share/cmake-3.18/Help/policy/CMP0103.rst
+++ /dev/null
@@ -1,22 +0,0 @@
-CMP0103
--------
-
-Multiple calls to :command:`export` command with same ``FILE`` without
-``APPEND`` is no longer allowed.
-
-In CMake 3.17 and below, multiple calls to :command:`export` command with the
-same ``FILE`` without ``APPEND`` are accepted silently but only the last
-occurrence is taken into account during the generation.
-
-The ``OLD`` behavior for this policy is to ignore the multiple occurrences of
- :command:`export` command except the last one.
-
-The ``NEW`` behavior of this policy is to raise an error on second call to
-:command:`export` command with same ``FILE`` without ``APPEND``.
-
-This policy was introduced in CMake version 3.18.  CMake version
-|release| warns when the policy is not set and uses ``OLD`` behavior.
-Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
-explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0104.rst b/share/cmake-3.18/Help/policy/CMP0104.rst
deleted file mode 100644
index 8516716..0000000
--- a/share/cmake-3.18/Help/policy/CMP0104.rst
+++ /dev/null
@@ -1,56 +0,0 @@
-CMP0104
--------
-
-Initialize :variable:`CMAKE_CUDA_ARCHITECTURES` when
-:variable:`CMAKE_CUDA_COMPILER_ID <CMAKE_<LANG>_COMPILER_ID>` is ``NVIDIA``.
-Raise an error if :prop_tgt:`CUDA_ARCHITECTURES` is empty.
-
-:variable:`CMAKE_CUDA_ARCHITECTURES` introduced in CMake 3.18 is used to
-initialize :prop_tgt:`CUDA_ARCHITECTURES`, which passes correct code generation
-flags to the CUDA compiler.
-
-Previous to this users had to manually specify the code generation flags. This
-policy is for backwards compatibility with manually specifying code generation
-flags.
-
-The ``OLD`` behavior for this policy is to not initialize
-:variable:`CMAKE_CUDA_ARCHITECTURES` when
-:variable:`CMAKE_CUDA_COMPILER_ID <CMAKE_<LANG>_COMPILER_ID>` is ``NVIDIA``.
-Empty :prop_tgt:`CUDA_ARCHITECTURES` is allowed.
-
-The ``NEW`` behavior of this policy is to initialize
-:variable:`CMAKE_CUDA_ARCHITECTURES` when
-:variable:`CMAKE_CUDA_COMPILER_ID <CMAKE_<LANG>_COMPILER_ID>` is ``NVIDIA``
-and raise an error if :prop_tgt:`CUDA_ARCHITECTURES` is empty during generation.
-
-If :prop_tgt:`CUDA_ARCHITECTURES` is set to a false value no architectures
-flags are passed to the compiler. This is intended to support packagers and
-the rare cases where full control over the passed flags is required.
-
-This policy was introduced in CMake version 3.18.  CMake version
-|release| warns when the policy is not set and uses ``OLD`` behavior.
-Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
-explicitly.
-
-.. include:: DEPRECATED.txt
-
-Examples
-^^^^^^^^
-
-.. code-block:: cmake
-
-  set_property(TARGET tgt PROPERTY CUDA_ARCHITECTURES 35 50 72)
-
-Generates code for real and virtual architectures ``30``, ``50`` and ``72``.
-
-.. code-block:: cmake
-
-  set_property(TARGET tgt PROPERTY CUDA_ARCHITECTURES 70-real 72-virtual)
-
-Generates code for real architecture ``70`` and virtual architecture ``72``.
-
-.. code-block:: cmake
-
-  set_property(TARGET tgt PROPERTY CUDA_ARCHITECTURES OFF)
-
-CMake will not pass any architecture flags to the compiler.
diff --git a/share/cmake-3.18/Help/policy/CMP0105.rst b/share/cmake-3.18/Help/policy/CMP0105.rst
deleted file mode 100644
index 19a1edb..0000000
--- a/share/cmake-3.18/Help/policy/CMP0105.rst
+++ /dev/null
@@ -1,19 +0,0 @@
-CMP0105
--------
-
-:prop_tgt:`LINK_OPTIONS` and :prop_tgt:`INTERFACE_LINK_OPTIONS` target
-properties are now used for the device link step.
-
-In CMake 3.17 and below, link options are not used by the device link step.
-
-The ``OLD`` behavior for this policy is to ignore the link options.
-
-The ``NEW`` behavior of this policy is to use the link options during the
-device link step.
-
-This policy was introduced in CMake version 3.17.  Use the
-:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
-Unlike many policies, CMake version |release| does *not* warn
-when this policy is not set and simply uses ``OLD`` behavior.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0106.rst b/share/cmake-3.18/Help/policy/CMP0106.rst
deleted file mode 100644
index e34d15a..0000000
--- a/share/cmake-3.18/Help/policy/CMP0106.rst
+++ /dev/null
@@ -1,19 +0,0 @@
-CMP0106
--------
-
-The :module:`Documentation` module is removed.
-
-The :module:`Documentation` was added as a support mechanism for the VTK
-project and was tuned for that project. Instead of CMake providing this module
-with (now old) VTK patterns for cache variables and required packages, the
-module is now deprecated by CMake itself.
-
-The ``OLD`` behavior of this policy is for :module:`Documentation` to add
-cache variables and find VTK documentation dependent packages. The ``NEW``
-behavior is to act as an empty module.
-
-This policy was introduced in CMake version 3.18.  CMake version |release|
-warns when the policy is not set and uses ``OLD`` behavior. Use the
-:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0107.rst b/share/cmake-3.18/Help/policy/CMP0107.rst
deleted file mode 100644
index 111bef7..0000000
--- a/share/cmake-3.18/Help/policy/CMP0107.rst
+++ /dev/null
@@ -1,19 +0,0 @@
-CMP0107
--------
-
-It is not allowed to create an ``ALIAS`` target with the same name as an
-another target.
-
-In CMake 3.17 and below, an ``ALIAS`` target can overwrite silently an existing
-target with the same name.
-
-The ``OLD`` behavior for this policy is to allow target overwrite.
-
-The ``NEW`` behavior of this policy is to prevent target overwriting.
-
-This policy was introduced in CMake version 3.17.  Use the
-:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
-Unlike many policies, CMake version |release| does *not* warn
-when this policy is not set and simply uses ``OLD`` behavior.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0108.rst b/share/cmake-3.18/Help/policy/CMP0108.rst
deleted file mode 100644
index 0d54cfa..0000000
--- a/share/cmake-3.18/Help/policy/CMP0108.rst
+++ /dev/null
@@ -1,19 +0,0 @@
-CMP0108
--------
-
-A target is not allowed to link to itself even through an ``ALIAS`` target.
-
-In CMake 3.17 and below, a target can link to a target aliased to itself.
-
-The ``OLD`` behavior for this policy is to allow a target to link to a target
-aliased to itself.
-
-The ``NEW`` behavior of this policy is to prevent a target to link to itself
-through an ``ALIAS`` target.
-
-This policy was introduced in CMake version 3.17.  Use the
-:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
-Unlike many policies, CMake version |release| does *not* warn
-when this policy is not set and simply uses ``OLD`` behavior.
-
-.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/prop_dir/ADDITIONAL_CLEAN_FILES.rst b/share/cmake-3.18/Help/prop_dir/ADDITIONAL_CLEAN_FILES.rst
deleted file mode 100644
index 051d22a..0000000
--- a/share/cmake-3.18/Help/prop_dir/ADDITIONAL_CLEAN_FILES.rst
+++ /dev/null
@@ -1,21 +0,0 @@
-ADDITIONAL_CLEAN_FILES
-----------------------
-
-A :ref:`;-list <CMake Language Lists>` of files or directories that will be
-removed as a part of the global ``clean`` target.  It is useful for
-specifying generated files or directories that are used by multiple targets
-or by CMake itself, or that are generated in ways which cannot be captured as
-outputs or byproducts of custom commands.
-
-If an additional clean file is specific to a single target only, then the
-:prop_tgt:`ADDITIONAL_CLEAN_FILES` target property would usually be a better
-choice than this directory property.
-
-Relative paths are allowed and are interpreted relative to the
-current binary directory.
-
-Contents of ``ADDITIONAL_CLEAN_FILES`` may use
-:manual:`generator expressions <cmake-generator-expressions(7)>`.
-
-This property only works for the :generator:`Ninja` and the Makefile
-generators.  It is ignored by other generators.
diff --git a/share/cmake-3.18/Help/prop_dir/BINARY_DIR.rst b/share/cmake-3.18/Help/prop_dir/BINARY_DIR.rst
deleted file mode 100644
index 597c79a..0000000
--- a/share/cmake-3.18/Help/prop_dir/BINARY_DIR.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-BINARY_DIR
-----------
-
-This read-only directory property reports absolute path to the binary
-directory corresponding to the source on which it is read.
diff --git a/share/cmake-3.18/Help/prop_dir/BUILDSYSTEM_TARGETS.rst b/share/cmake-3.18/Help/prop_dir/BUILDSYSTEM_TARGETS.rst
deleted file mode 100644
index 04bb56e..0000000
--- a/share/cmake-3.18/Help/prop_dir/BUILDSYSTEM_TARGETS.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-BUILDSYSTEM_TARGETS
--------------------
-
-This read-only directory property contains a
-:ref:`semicolon-separated list <CMake Language Lists>` of buildsystem targets added in the
-directory by calls to the :command:`add_library`, :command:`add_executable`,
-and :command:`add_custom_target` commands.  The list does not include any
-:ref:`Imported Targets` or :ref:`Alias Targets`, but does include
-:ref:`Interface Libraries`.  Each entry in the list is the logical name
-of a target, suitable to pass to the :command:`get_property` command
-``TARGET`` option.
diff --git a/share/cmake-3.18/Help/prop_dir/LABELS.rst b/share/cmake-3.18/Help/prop_dir/LABELS.rst
deleted file mode 100644
index de27d90..0000000
--- a/share/cmake-3.18/Help/prop_dir/LABELS.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-LABELS
-------
-
-Specify a list of text labels associated with a directory and all of its
-subdirectories. This is equivalent to setting the :prop_tgt:`LABELS` target
-property and the :prop_test:`LABELS` test property on all targets and tests in
-the current directory and subdirectories. Note: Launchers must enabled to
-propagate labels to targets.
-
-The :variable:`CMAKE_DIRECTORY_LABELS` variable can be used to initialize this
-property.
-
-The list is reported in dashboard submissions.
diff --git a/share/cmake-3.18/Help/prop_dir/LINK_OPTIONS.rst b/share/cmake-3.18/Help/prop_dir/LINK_OPTIONS.rst
deleted file mode 100644
index f229ba6..0000000
--- a/share/cmake-3.18/Help/prop_dir/LINK_OPTIONS.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-LINK_OPTIONS
-------------
-
-List of options to use for the link step of shared library, module
-and executable targets as well as the device link step.
-
-This property holds a :ref:`semicolon-separated list <CMake Language Lists>` of options
-given so far to the :command:`add_link_options` command.
-
-This property is used to initialize the :prop_tgt:`LINK_OPTIONS` target
-property when a target is created, which is used by the generators to set
-the options for the compiler.
-
-Contents of ``LINK_OPTIONS`` may use "generator expressions" with the
-syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)` manual
-for available expressions.  See the :manual:`cmake-buildsystem(7)` manual
-for more on defining buildsystem properties.
diff --git a/share/cmake-3.18/Help/prop_dir/SOURCE_DIR.rst b/share/cmake-3.18/Help/prop_dir/SOURCE_DIR.rst
deleted file mode 100644
index ac98c3b..0000000
--- a/share/cmake-3.18/Help/prop_dir/SOURCE_DIR.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-SOURCE_DIR
-----------
-
-This read-only directory property reports absolute path to the source
-directory on which it is read.
diff --git a/share/cmake-3.18/Help/prop_dir/SUBDIRECTORIES.rst b/share/cmake-3.18/Help/prop_dir/SUBDIRECTORIES.rst
deleted file mode 100644
index 6a0ac80..0000000
--- a/share/cmake-3.18/Help/prop_dir/SUBDIRECTORIES.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-SUBDIRECTORIES
---------------
-
-This read-only directory property contains a
-:ref:`semicolon-separated list <CMake Language Lists>` of subdirectories processed so far by
-the :command:`add_subdirectory` or :command:`subdirs` commands.  Each entry is
-the absolute path to the source directory (containing the ``CMakeLists.txt``
-file).  This is suitable to pass to the :command:`get_property` command
-``DIRECTORY`` option.
-
-.. note::
-
-  The :command:`subdirs` command does not process its arguments until
-  after the calling directory is fully processed.  Therefore looking
-  up this property in the current directory will not see them.
diff --git a/share/cmake-3.18/Help/prop_dir/TESTS.rst b/share/cmake-3.18/Help/prop_dir/TESTS.rst
deleted file mode 100644
index 1c9f6e5..0000000
--- a/share/cmake-3.18/Help/prop_dir/TESTS.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-TESTS
------
-
-List of tests.
-
-This read-only property holds a
-:ref:`semicolon-separated list <CMake Language Lists>` of tests
-defined so far, in the current directory, by the :command:`add_test` command.
diff --git a/share/cmake-3.18/Help/prop_dir/TEST_INCLUDE_FILES.rst b/share/cmake-3.18/Help/prop_dir/TEST_INCLUDE_FILES.rst
deleted file mode 100644
index c3e4602..0000000
--- a/share/cmake-3.18/Help/prop_dir/TEST_INCLUDE_FILES.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-TEST_INCLUDE_FILES
-------------------
-
-A list of cmake files that will be included when ctest is run.
-
-If you specify ``TEST_INCLUDE_FILES``, those files will be included and
-processed when ctest is run on the directory.
diff --git a/share/cmake-3.18/Help/prop_dir/VS_STARTUP_PROJECT.rst b/share/cmake-3.18/Help/prop_dir/VS_STARTUP_PROJECT.rst
deleted file mode 100644
index 2680dfa..0000000
--- a/share/cmake-3.18/Help/prop_dir/VS_STARTUP_PROJECT.rst
+++ /dev/null
@@ -1,18 +0,0 @@
-VS_STARTUP_PROJECT
-------------------
-
-Specify the default startup project in a Visual Studio solution.
-
-The :ref:`Visual Studio Generators` create a ``.sln`` file for each directory
-whose ``CMakeLists.txt`` file calls the :command:`project` command.  Set this
-property in the same directory as a :command:`project` command call (e.g. in
-the top-level ``CMakeLists.txt`` file) to specify the default startup project
-for the corresponding solution file.
-
-The property must be set to the name of an existing target.  This
-will cause that project to be listed first in the generated solution
-file causing Visual Studio to make it the startup project if the
-solution has never been opened before.
-
-If this property is not specified, then the ``ALL_BUILD`` project
-will be the default.
diff --git a/share/cmake-3.18/Help/prop_gbl/AUTOGEN_SOURCE_GROUP.rst b/share/cmake-3.18/Help/prop_gbl/AUTOGEN_SOURCE_GROUP.rst
deleted file mode 100644
index d294eb1..0000000
--- a/share/cmake-3.18/Help/prop_gbl/AUTOGEN_SOURCE_GROUP.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-AUTOGEN_SOURCE_GROUP
---------------------
-
-Name of the  :command:`source_group` for :prop_tgt:`AUTOMOC` and
-:prop_tgt:`AUTORCC` generated files.
-
-Files generated by :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTORCC` are not always
-known at configure time and therefore can't be passed to
-:command:`source_group`.
-:prop_gbl:`AUTOGEN_SOURCE_GROUP` an be used instead to generate or select
-a source group for :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTORCC` generated files.
-
-For :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTORCC` specific overrides see
-:prop_gbl:`AUTOMOC_SOURCE_GROUP` and :prop_gbl:`AUTORCC_SOURCE_GROUP`
-respectively.
diff --git a/share/cmake-3.18/Help/prop_gbl/AUTOMOC_SOURCE_GROUP.rst b/share/cmake-3.18/Help/prop_gbl/AUTOMOC_SOURCE_GROUP.rst
deleted file mode 100644
index 2455dc7..0000000
--- a/share/cmake-3.18/Help/prop_gbl/AUTOMOC_SOURCE_GROUP.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-AUTOMOC_SOURCE_GROUP
---------------------
-
-Name of the  :command:`source_group` for :prop_tgt:`AUTOMOC` generated files.
-
-When set this is used instead of :prop_gbl:`AUTOGEN_SOURCE_GROUP` for
-files generated by :prop_tgt:`AUTOMOC`.
diff --git a/share/cmake-3.18/Help/prop_gbl/AUTORCC_SOURCE_GROUP.rst b/share/cmake-3.18/Help/prop_gbl/AUTORCC_SOURCE_GROUP.rst
deleted file mode 100644
index 65ea95b..0000000
--- a/share/cmake-3.18/Help/prop_gbl/AUTORCC_SOURCE_GROUP.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-AUTORCC_SOURCE_GROUP
---------------------
-
-Name of the  :command:`source_group` for :prop_tgt:`AUTORCC` generated files.
-
-When set this is used instead of :prop_gbl:`AUTOGEN_SOURCE_GROUP` for
-files generated by :prop_tgt:`AUTORCC`.
diff --git a/share/cmake-3.18/Help/prop_gbl/CMAKE_CUDA_KNOWN_FEATURES.rst b/share/cmake-3.18/Help/prop_gbl/CMAKE_CUDA_KNOWN_FEATURES.rst
deleted file mode 100644
index 44e37fe..0000000
--- a/share/cmake-3.18/Help/prop_gbl/CMAKE_CUDA_KNOWN_FEATURES.rst
+++ /dev/null
@@ -1,30 +0,0 @@
-CMAKE_CUDA_KNOWN_FEATURES
--------------------------
-
-List of CUDA features known to this version of CMake.
-
-The features listed in this global property may be known to be available to the
-CUDA compiler.  If the feature is available with the C++ compiler, it will
-be listed in the :variable:`CMAKE_CUDA_COMPILE_FEATURES` variable.
-
-The features listed here may be used with the :command:`target_compile_features`
-command.  See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
-
-
-The features known to this version of CMake are:
-
-``cuda_std_03``
-  Compiler mode is at least CUDA/C++ 03.
-
-``cuda_std_11``
-  Compiler mode is at least CUDA/C++ 11.
-
-``cuda_std_14``
-  Compiler mode is at least CUDA/C++ 14.
-
-``cuda_std_17``
-  Compiler mode is at least CUDA/C++ 17.
-
-``cuda_std_20``
-  Compiler mode is at least CUDA/C++ 20.
diff --git a/share/cmake-3.18/Help/prop_gbl/CMAKE_CXX_KNOWN_FEATURES.rst b/share/cmake-3.18/Help/prop_gbl/CMAKE_CXX_KNOWN_FEATURES.rst
deleted file mode 100644
index b921c6b..0000000
--- a/share/cmake-3.18/Help/prop_gbl/CMAKE_CXX_KNOWN_FEATURES.rst
+++ /dev/null
@@ -1,318 +0,0 @@
-CMAKE_CXX_KNOWN_FEATURES
-------------------------
-
-List of C++ features known to this version of CMake.
-
-The features listed in this global property may be known to be available to the
-C++ compiler.  If the feature is available with the C++ compiler, it will
-be listed in the :variable:`CMAKE_CXX_COMPILE_FEATURES` variable.
-
-The features listed here may be used with the :command:`target_compile_features`
-command.  See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
-
-
-The features known to this version of CMake are:
-
-``cxx_std_98``
-  Compiler mode is at least C++ 98.
-
-``cxx_std_11``
-  Compiler mode is at least C++ 11.
-
-``cxx_std_14``
-  Compiler mode is at least C++ 14.
-
-``cxx_std_17``
-  Compiler mode is at least C++ 17.
-
-``cxx_std_20``
-  Compiler mode is at least C++ 20.
-
-``cxx_aggregate_default_initializers``
-  Aggregate default initializers, as defined in N3605_.
-
-  .. _N3605: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3605.html
-
-``cxx_alias_templates``
-  Template aliases, as defined in N2258_.
-
-  .. _N2258: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf
-
-``cxx_alignas``
-  Alignment control ``alignas``, as defined in N2341_.
-
-  .. _N2341: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf
-
-``cxx_alignof``
-  Alignment control ``alignof``, as defined in N2341_.
-
-  .. _N2341: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf
-
-``cxx_attributes``
-  Generic attributes, as defined in N2761_.
-
-  .. _N2761: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf
-
-``cxx_attribute_deprecated``
-  ``[[deprecated]]`` attribute, as defined in N3760_.
-
-  .. _N3760: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3760.html
-
-``cxx_auto_type``
-  Automatic type deduction, as defined in N1984_.
-
-  .. _N1984: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf
-
-``cxx_binary_literals``
-  Binary literals, as defined in N3472_.
-
-  .. _N3472: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3472.pdf
-
-``cxx_constexpr``
-  Constant expressions, as defined in N2235_.
-
-  .. _N2235: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf
-
-``cxx_contextual_conversions``
-  Contextual conversions, as defined in N3323_.
-
-  .. _N3323: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3323.pdf
-
-``cxx_decltype_incomplete_return_types``
-  Decltype on incomplete return types, as defined in N3276_.
-
-  .. _N3276 : http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3276.pdf
-
-``cxx_decltype``
-  Decltype, as defined in N2343_.
-
-  .. _N2343: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf
-
-``cxx_decltype_auto``
-  ``decltype(auto)`` semantics, as defined in N3638_.
-
-  .. _N3638: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3638.html
-
-``cxx_default_function_template_args``
-  Default template arguments for function templates, as defined in DR226_
-
-  .. _DR226: http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226
-
-``cxx_defaulted_functions``
-  Defaulted functions, as defined in N2346_.
-
-  .. _N2346: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm
-
-``cxx_defaulted_move_initializers``
-  Defaulted move initializers, as defined in N3053_.
-
-  .. _N3053: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html
-
-``cxx_delegating_constructors``
-  Delegating constructors, as defined in N1986_.
-
-  .. _N1986: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf
-
-``cxx_deleted_functions``
-  Deleted functions, as defined in N2346_.
-
-  .. _N2346: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm
-
-``cxx_digit_separators``
-  Digit separators, as defined in N3781_.
-
-  .. _N3781: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3781.pdf
-
-``cxx_enum_forward_declarations``
-  Enum forward declarations, as defined in N2764_.
-
-  .. _N2764: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf
-
-``cxx_explicit_conversions``
-  Explicit conversion operators, as defined in N2437_.
-
-  .. _N2437: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf
-
-``cxx_extended_friend_declarations``
-  Extended friend declarations, as defined in N1791_.
-
-  .. _N1791: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf
-
-``cxx_extern_templates``
-  Extern templates, as defined in N1987_.
-
-  .. _N1987: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm
-
-``cxx_final``
-  Override control ``final`` keyword, as defined in N2928_, N3206_ and N3272_.
-
-  .. _N2928: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm
-  .. _N3206: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm
-  .. _N3272: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm
-
-``cxx_func_identifier``
-  Predefined ``__func__`` identifier, as defined in N2340_.
-
-  .. _N2340: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm
-
-``cxx_generalized_initializers``
-  Initializer lists, as defined in N2672_.
-
-  .. _N2672: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm
-
-``cxx_generic_lambdas``
-  Generic lambdas, as defined in N3649_.
-
-  .. _N3649: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3649.html
-
-``cxx_inheriting_constructors``
-  Inheriting constructors, as defined in N2540_.
-
-  .. _N2540: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm
-
-``cxx_inline_namespaces``
-  Inline namespaces, as defined in N2535_.
-
-  .. _N2535: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm
-
-``cxx_lambdas``
-  Lambda functions, as defined in N2927_.
-
-  .. _N2927: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2927.pdf
-
-``cxx_lambda_init_captures``
-  Initialized lambda captures, as defined in N3648_.
-
-  .. _N3648: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3648.html
-
-``cxx_local_type_template_args``
-  Local and unnamed types as template arguments, as defined in N2657_.
-
-  .. _N2657: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm
-
-``cxx_long_long_type``
-  ``long long`` type, as defined in N1811_.
-
-  .. _N1811: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf
-
-``cxx_noexcept``
-  Exception specifications, as defined in N3050_.
-
-  .. _N3050: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html
-
-``cxx_nonstatic_member_init``
-  Non-static data member initialization, as defined in N2756_.
-
-  .. _N2756: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2756.htm
-
-``cxx_nullptr``
-  Null pointer, as defined in N2431_.
-
-  .. _N2431: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf
-
-``cxx_override``
-  Override control ``override`` keyword, as defined in N2928_, N3206_
-  and N3272_.
-
-  .. _N2928: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm
-  .. _N3206: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm
-  .. _N3272: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm
-
-``cxx_range_for``
-  Range-based for, as defined in N2930_.
-
-  .. _N2930: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2930.html
-
-``cxx_raw_string_literals``
-  Raw string literals, as defined in N2442_.
-
-  .. _N2442: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm
-
-``cxx_reference_qualified_functions``
-  Reference qualified functions, as defined in N2439_.
-
-  .. _N2439: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm
-
-``cxx_relaxed_constexpr``
-  Relaxed constexpr, as defined in N3652_.
-
-  .. _N3652: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3652.html
-
-``cxx_return_type_deduction``
-  Return type deduction on normal functions, as defined in N3386_.
-
-  .. _N3386: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3386.html
-
-``cxx_right_angle_brackets``
-  Right angle bracket parsing, as defined in N1757_.
-
-  .. _N1757: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html
-
-``cxx_rvalue_references``
-  R-value references, as defined in N2118_.
-
-  .. _N2118: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html
-
-``cxx_sizeof_member``
-  Size of non-static data members, as defined in N2253_.
-
-  .. _N2253: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html
-
-``cxx_static_assert``
-  Static assert, as defined in N1720_.
-
-  .. _N1720: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html
-
-``cxx_strong_enums``
-  Strongly typed enums, as defined in N2347_.
-
-  .. _N2347: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf
-
-``cxx_thread_local``
-  Thread-local variables, as defined in N2659_.
-
-  .. _N2659: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm
-
-``cxx_trailing_return_types``
-  Automatic function return type, as defined in N2541_.
-
-  .. _N2541: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm
-
-``cxx_unicode_literals``
-  Unicode string literals, as defined in N2442_.
-
-  .. _N2442: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm
-
-``cxx_uniform_initialization``
-  Uniform initialization, as defined in N2640_.
-
-  .. _N2640: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2640.pdf
-
-``cxx_unrestricted_unions``
-  Unrestricted unions, as defined in N2544_.
-
-  .. _N2544: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf
-
-``cxx_user_literals``
-  User-defined literals, as defined in N2765_.
-
-  .. _N2765: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf
-
-``cxx_variable_templates``
-  Variable templates, as defined in N3651_.
-
-  .. _N3651: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3651.pdf
-
-``cxx_variadic_macros``
-  Variadic macros, as defined in N1653_.
-
-  .. _N1653: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm
-
-``cxx_variadic_templates``
-  Variadic templates, as defined in N2242_.
-
-  .. _N2242: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf
-
-``cxx_template_template_parameters``
-  Template template parameters, as defined in ``ISO/IEC 14882:1998``.
diff --git a/share/cmake-3.18/Help/prop_gbl/CMAKE_C_KNOWN_FEATURES.rst b/share/cmake-3.18/Help/prop_gbl/CMAKE_C_KNOWN_FEATURES.rst
deleted file mode 100644
index e5f896e..0000000
--- a/share/cmake-3.18/Help/prop_gbl/CMAKE_C_KNOWN_FEATURES.rst
+++ /dev/null
@@ -1,35 +0,0 @@
-CMAKE_C_KNOWN_FEATURES
-----------------------
-
-List of C features known to this version of CMake.
-
-The features listed in this global property may be known to be available to the
-C compiler.  If the feature is available with the C compiler, it will
-be listed in the :variable:`CMAKE_C_COMPILE_FEATURES` variable.
-
-The features listed here may be used with the :command:`target_compile_features`
-command.  See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
-
-The features known to this version of CMake are:
-
-``c_std_90``
-  Compiler mode is at least C 90.
-
-``c_std_99``
-  Compiler mode is at least C 99.
-
-``c_std_11``
-  Compiler mode is at least C 11.
-
-``c_function_prototypes``
-  Function prototypes, as defined in ``ISO/IEC 9899:1990``.
-
-``c_restrict``
-  ``restrict`` keyword, as defined in ``ISO/IEC 9899:1999``.
-
-``c_static_assert``
-  Static assert, as defined in ``ISO/IEC 9899:2011``.
-
-``c_variadic_macros``
-  Variadic macros, as defined in ``ISO/IEC 9899:1999``.
diff --git a/share/cmake-3.18/Help/prop_gbl/CMAKE_ROLE.rst b/share/cmake-3.18/Help/prop_gbl/CMAKE_ROLE.rst
deleted file mode 100644
index 27512fa..0000000
--- a/share/cmake-3.18/Help/prop_gbl/CMAKE_ROLE.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-CMAKE_ROLE
-----------
-
-Tells what mode the current running script is in. Could be one of several
-values:
-
-``PROJECT``
-  Running in project mode (processing a ``CMakeLists.txt`` file).
-
-``SCRIPT``
-  Running in ``-P`` script mode.
-
-``FIND_PACKAGE``
-  Running in ``--find-package`` mode.
-
-``CTEST``
-  Running in CTest script mode.
-
-``CPACK``
-  Running in CPack.
diff --git a/share/cmake-3.18/Help/prop_gbl/ECLIPSE_EXTRA_CPROJECT_CONTENTS.rst b/share/cmake-3.18/Help/prop_gbl/ECLIPSE_EXTRA_CPROJECT_CONTENTS.rst
deleted file mode 100644
index 50c41a9..0000000
--- a/share/cmake-3.18/Help/prop_gbl/ECLIPSE_EXTRA_CPROJECT_CONTENTS.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-ECLIPSE_EXTRA_CPROJECT_CONTENTS
--------------------------------
-
-Additional contents to be inserted into the generated Eclipse cproject file.
-
-The cproject file defines the CDT specific information. Some third party IDE's
-are based on Eclipse with the addition of other information specific to that IDE.
-Through this property, it is possible to add this additional contents to
-the generated project.
-It is expected to contain valid XML.
-
-Also see the :prop_gbl:`ECLIPSE_EXTRA_NATURES` property.
diff --git a/share/cmake-3.18/Help/prop_gbl/FIND_LIBRARY_USE_LIB32_PATHS.rst b/share/cmake-3.18/Help/prop_gbl/FIND_LIBRARY_USE_LIB32_PATHS.rst
deleted file mode 100644
index 8396026..0000000
--- a/share/cmake-3.18/Help/prop_gbl/FIND_LIBRARY_USE_LIB32_PATHS.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-FIND_LIBRARY_USE_LIB32_PATHS
-----------------------------
-
-Whether the :command:`find_library` command should automatically search
-``lib32`` directories.
-
-``FIND_LIBRARY_USE_LIB32_PATHS`` is a boolean specifying whether the
-:command:`find_library` command should automatically search the ``lib32``
-variant of directories called ``lib`` in the search path when building 32-bit
-binaries.
-
-See also the :variable:`CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX` variable.
diff --git a/share/cmake-3.18/Help/prop_gbl/FIND_LIBRARY_USE_LIBX32_PATHS.rst b/share/cmake-3.18/Help/prop_gbl/FIND_LIBRARY_USE_LIBX32_PATHS.rst
deleted file mode 100644
index b87b09b..0000000
--- a/share/cmake-3.18/Help/prop_gbl/FIND_LIBRARY_USE_LIBX32_PATHS.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-FIND_LIBRARY_USE_LIBX32_PATHS
------------------------------
-
-Whether the :command:`find_library` command should automatically search
-``libx32`` directories.
-
-``FIND_LIBRARY_USE_LIBX32_PATHS`` is a boolean specifying whether the
-:command:`find_library` command should automatically search the ``libx32``
-variant of directories called ``lib`` in the search path when building
-x32-abi binaries.
-
-See also the :variable:`CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX` variable.
diff --git a/share/cmake-3.18/Help/prop_gbl/GENERATOR_IS_MULTI_CONFIG.rst b/share/cmake-3.18/Help/prop_gbl/GENERATOR_IS_MULTI_CONFIG.rst
deleted file mode 100644
index b8ec8a6..0000000
--- a/share/cmake-3.18/Help/prop_gbl/GENERATOR_IS_MULTI_CONFIG.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-GENERATOR_IS_MULTI_CONFIG
--------------------------
-
-Read-only property that is true on multi-configuration generators.
-
-True when using a multi-configuration generator
-(such as :ref:`Visual Studio Generators` or :generator:`Xcode`).
-Multi-config generators use :variable:`CMAKE_CONFIGURATION_TYPES`
-as the set of configurations and ignore :variable:`CMAKE_BUILD_TYPE`.
diff --git a/share/cmake-3.18/Help/prop_gbl/TARGET_MESSAGES.rst b/share/cmake-3.18/Help/prop_gbl/TARGET_MESSAGES.rst
deleted file mode 100644
index 275b074..0000000
--- a/share/cmake-3.18/Help/prop_gbl/TARGET_MESSAGES.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-TARGET_MESSAGES
----------------
-
-Specify whether to report the completion of each target.
-
-This property specifies whether :ref:`Makefile Generators` should
-add a progress message describing that each target has been completed.
-If the property is not set the default is ``ON``.  Set the property
-to ``OFF`` to disable target completion messages.
-
-This option is intended to reduce build output when little or no
-work needs to be done to bring the build tree up to date.
-
-If a ``CMAKE_TARGET_MESSAGES`` cache entry exists its value
-initializes the value of this property.
-
-Non-Makefile generators currently ignore this property.
-
-See the counterpart property :prop_gbl:`RULE_MESSAGES` to disable
-everything except for target completion messages.
diff --git a/share/cmake-3.18/Help/prop_gbl/XCODE_EMIT_EFFECTIVE_PLATFORM_NAME.rst b/share/cmake-3.18/Help/prop_gbl/XCODE_EMIT_EFFECTIVE_PLATFORM_NAME.rst
deleted file mode 100644
index 9500443..0000000
--- a/share/cmake-3.18/Help/prop_gbl/XCODE_EMIT_EFFECTIVE_PLATFORM_NAME.rst
+++ /dev/null
@@ -1,25 +0,0 @@
-XCODE_EMIT_EFFECTIVE_PLATFORM_NAME
-----------------------------------
-
-Control emission of ``EFFECTIVE_PLATFORM_NAME`` by the :generator:`Xcode`
-generator.
-
-It is required for building the same target with multiple SDKs. A
-common use case is the parallel use of ``iphoneos`` and
-``iphonesimulator`` SDKs.
-
-Three different states possible that control when the :generator:`Xcode`
-generator emits the ``EFFECTIVE_PLATFORM_NAME`` variable:
-
-- If set to ``ON`` it will always be emitted
-- If set to ``OFF`` it will never be emitted
-- If unset (the default) it will only be emitted when the project was
-  configured for an embedded Xcode SDK like iOS, tvOS, watchOS or any
-  of the simulators.
-
-.. note::
-
-  When this behavior is enable for generated Xcode projects, the
-  ``EFFECTIVE_PLATFORM_NAME`` variable will leak into
-  :manual:`Generator expressions <cmake-generator-expressions(7)>`
-  like ``TARGET_FILE`` and will render those mostly unusable.
diff --git a/share/cmake-3.18/Help/prop_inst/CPACK_DESKTOP_SHORTCUTS.rst b/share/cmake-3.18/Help/prop_inst/CPACK_DESKTOP_SHORTCUTS.rst
deleted file mode 100644
index 729ab60..0000000
--- a/share/cmake-3.18/Help/prop_inst/CPACK_DESKTOP_SHORTCUTS.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-CPACK_DESKTOP_SHORTCUTS
------------------------
-
-Species a list of shortcut names that should be created on the `Desktop`
-for this file.
-
-The property is currently only supported by the :cpack_gen:`CPack WIX Generator`.
diff --git a/share/cmake-3.18/Help/prop_inst/CPACK_NEVER_OVERWRITE.rst b/share/cmake-3.18/Help/prop_inst/CPACK_NEVER_OVERWRITE.rst
deleted file mode 100644
index 4789e25..0000000
--- a/share/cmake-3.18/Help/prop_inst/CPACK_NEVER_OVERWRITE.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-CPACK_NEVER_OVERWRITE
----------------------
-
-Request that this file not be overwritten on install or reinstall.
-
-The property is currently only supported by the :cpack_gen:`CPack WIX Generator`.
diff --git a/share/cmake-3.18/Help/prop_inst/CPACK_PERMANENT.rst b/share/cmake-3.18/Help/prop_inst/CPACK_PERMANENT.rst
deleted file mode 100644
index 985de0d..0000000
--- a/share/cmake-3.18/Help/prop_inst/CPACK_PERMANENT.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-CPACK_PERMANENT
----------------
-
-Request that this file not be removed on uninstall.
-
-The property is currently only supported by the :cpack_gen:`CPack WIX Generator`.
diff --git a/share/cmake-3.18/Help/prop_inst/CPACK_STARTUP_SHORTCUTS.rst b/share/cmake-3.18/Help/prop_inst/CPACK_STARTUP_SHORTCUTS.rst
deleted file mode 100644
index d9208b9..0000000
--- a/share/cmake-3.18/Help/prop_inst/CPACK_STARTUP_SHORTCUTS.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-CPACK_STARTUP_SHORTCUTS
------------------------
-
-Species a list of shortcut names that should be created in the `Startup` folder
-for this file.
-
-The property is currently only supported by the :cpack_gen:`CPack WIX Generator`.
diff --git a/share/cmake-3.18/Help/prop_inst/CPACK_START_MENU_SHORTCUTS.rst b/share/cmake-3.18/Help/prop_inst/CPACK_START_MENU_SHORTCUTS.rst
deleted file mode 100644
index 092334a..0000000
--- a/share/cmake-3.18/Help/prop_inst/CPACK_START_MENU_SHORTCUTS.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-CPACK_START_MENU_SHORTCUTS
---------------------------
-
-Species a list of shortcut names that should be created in the `Start Menu`
-for this file.
-
-The property is currently only supported by the :cpack_gen:`CPack WIX Generator`.
diff --git a/share/cmake-3.18/Help/prop_inst/CPACK_WIX_ACL.rst b/share/cmake-3.18/Help/prop_inst/CPACK_WIX_ACL.rst
deleted file mode 100644
index c88f426..0000000
--- a/share/cmake-3.18/Help/prop_inst/CPACK_WIX_ACL.rst
+++ /dev/null
@@ -1,21 +0,0 @@
-CPACK_WIX_ACL
--------------
-
-Specifies access permissions for files or directories
-installed by a WiX installer.
-
-The property can contain multiple list entries,
-each of which has to match the following format.
-
-::
-
-  <user>[@<domain>]=<permission>[,<permission>]
-
-``<user>`` and ``<domain>`` specify the windows user and domain for which the
-``<Permission>`` element should be generated.
-
-``<permission>`` is any of the YesNoType attributes listed here::
-
- http://wixtoolset.org/documentation/manual/v3/xsd/wix/permission.html
-
-The property is currently only supported by the :cpack_gen:`CPack WIX Generator`.
diff --git a/share/cmake-3.18/Help/prop_sf/COMPILE_FLAGS.rst b/share/cmake-3.18/Help/prop_sf/COMPILE_FLAGS.rst
deleted file mode 100644
index c211b89..0000000
--- a/share/cmake-3.18/Help/prop_sf/COMPILE_FLAGS.rst
+++ /dev/null
@@ -1,19 +0,0 @@
-COMPILE_FLAGS
--------------
-
-Additional flags to be added when compiling this source file.
-
-The ``COMPILE_FLAGS`` property, managed as a string, sets additional compiler
-flags used to build source files.  Use :prop_sf:`COMPILE_DEFINITIONS` to pass
-additional preprocessor definitions.
-
-Contents of ``COMPILE_FLAGS`` may use "generator expressions"
-with the syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)`
-manual for available expressions.  However, :generator:`Xcode`
-does not support per-config per-source settings, so expressions
-that depend on the build configuration are not allowed with that
-generator.
-
-.. note::
-
-  This property has been superseded by the :prop_sf:`COMPILE_OPTIONS` property.
diff --git a/share/cmake-3.18/Help/prop_sf/COMPILE_OPTIONS.rst b/share/cmake-3.18/Help/prop_sf/COMPILE_OPTIONS.rst
deleted file mode 100644
index 537dcec..0000000
--- a/share/cmake-3.18/Help/prop_sf/COMPILE_OPTIONS.rst
+++ /dev/null
@@ -1,32 +0,0 @@
-COMPILE_OPTIONS
----------------
-
-List of additional options to pass to the compiler.
-
-This property holds a :ref:`semicolon-separated list <CMake Language Lists>` of options
-and will be added to the list of compile flags when this
-source file builds.
-
-Contents of ``COMPILE_OPTIONS`` may use "generator expressions" with the
-syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)` manual
-for available expressions.  However, :generator:`Xcode`
-does not support per-config per-source settings, so expressions
-that depend on the build configuration are not allowed with that
-generator.
-
-Usage example:
-
-.. code-block:: cmake
-
-  set_source_files_properties(foo.cpp PROPERTIES COMPILE_OPTIONS "-Wno-unused-parameter;-Wno-missing-field-initializer")
-
-Related properties:
-
-* Prefer this property over :prop_sf:`COMPILE_FLAGS`.
-* Use :prop_sf:`COMPILE_DEFINITIONS` to pass additional preprocessor definitions.
-* Use :prop_sf:`INCLUDE_DIRECTORIES` to pass additional include directories.
-
-Related commands:
-
-* :command:`add_compile_options` for directory-wide settings
-* :command:`target_compile_options` for target-specific settings
diff --git a/share/cmake-3.18/Help/prop_sf/Fortran_PREPROCESS.rst b/share/cmake-3.18/Help/prop_sf/Fortran_PREPROCESS.rst
deleted file mode 100644
index 25ea827..0000000
--- a/share/cmake-3.18/Help/prop_sf/Fortran_PREPROCESS.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-Fortran_PREPROCESS
-------------------
-
-Control whether the Fortran source file should be unconditionally preprocessed.
-
-If unset or empty, rely on the compiler to determine whether the file
-should be preprocessed. If explicitly set to ``OFF`` then the file
-does not need to be preprocessed. If explicitly set to ``ON``, then
-the file does need to be preprocessed as part of the compilation step.
-
-When using the :generator:`Ninja` generator, all source files are
-first preprocessed in order to generate module dependency
-information. Setting this property to ``OFF`` will make ``Ninja``
-skip this step.
-
-Consider using the target-wide :prop_tgt:`Fortran_PREPROCESS` property
-if all source files in a target need to be preprocessed.
diff --git a/share/cmake-3.18/Help/prop_sf/GENERATED.rst b/share/cmake-3.18/Help/prop_sf/GENERATED.rst
deleted file mode 100644
index 48ff70c..0000000
--- a/share/cmake-3.18/Help/prop_sf/GENERATED.rst
+++ /dev/null
@@ -1,36 +0,0 @@
-GENERATED
----------
-
-Is this source file generated as part of the build or CMake process.
-
-Tells the internal CMake engine that a source file is generated by an outside
-process such as another build step, or the execution of CMake itself.
-This information is then used to exempt the file from any existence or
-validity checks.
-
-Any file that is
-
-- created by the execution of commands such as
-  :command:`add_custom_command` and :command:`file(GENERATE)`
-- listed as one of the ``BYPRODUCTS`` of an :command:`add_custom_command`
-  or :command:`add_custom_target` command, or
-- created by a CMake ``AUTOGEN`` operation such as :prop_tgt:`AUTOMOC`,
-  :prop_tgt:`AUTORCC`, or :prop_tgt:`AUTOUIC`
-
-will be marked with the ``GENERATED`` property.
-
-When a generated file created as the ``OUTPUT`` of an
-:command:`add_custom_command` command is explicitly listed as a source file
-for any target in the same directory scope (which usually means the same
-``CMakeLists.txt`` file), CMake will automatically create a dependency to
-make sure the file is generated before building that target.
-
-The :ref:`Makefile Generators` will remove ``GENERATED`` files during
-``make clean``.
-
-Generated sources may be hidden in some IDE tools, while in others they might
-be shown. For the special case of sources generated by CMake's :prop_tgt:`AUTOMOC`
-or :prop_tgt:`AUTORCC` functionality, the :prop_gbl:`AUTOGEN_SOURCE_GROUP`,
-:prop_gbl:`AUTOMOC_SOURCE_GROUP` and :prop_gbl:`AUTORCC_SOURCE_GROUP` target
-properties may influence where the generated sources are grouped in the project's
-file lists.
diff --git a/share/cmake-3.18/Help/prop_sf/INCLUDE_DIRECTORIES.rst b/share/cmake-3.18/Help/prop_sf/INCLUDE_DIRECTORIES.rst
deleted file mode 100644
index 23de70e..0000000
--- a/share/cmake-3.18/Help/prop_sf/INCLUDE_DIRECTORIES.rst
+++ /dev/null
@@ -1,18 +0,0 @@
-INCLUDE_DIRECTORIES
--------------------
-
-List of preprocessor include file search directories.
-
-This property holds a :ref:`semicolon-separated list <CMake Language Lists>` of paths
-and will be added to the list of include directories when this
-source file builds. These directories will take precedence over directories
-defined at target level except for :generator:`Xcode` generator due to technical
-limitations.
-
-Relative paths should not be added to this property directly.
-
-Contents of ``INCLUDE_DIRECTORIES`` may use "generator expressions" with
-the syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)` manual
-for available expressions.  However, :generator:`Xcode` does not support
-per-config per-source settings, so expressions that depend on the build
-configuration are not allowed with that generator.
diff --git a/share/cmake-3.18/Help/prop_sf/LANGUAGE.rst b/share/cmake-3.18/Help/prop_sf/LANGUAGE.rst
deleted file mode 100644
index 88d438e..0000000
--- a/share/cmake-3.18/Help/prop_sf/LANGUAGE.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-LANGUAGE
---------
-
-What programming language is the file.
-
-A property that can be set to indicate what programming language the
-source file is.  If it is not set the language is determined based on
-the file extension.  Typical values are ``CXX`` (i.e.  C++), ``C``,
-``CSharp``, ``CUDA``, ``Fortran``, and ``ASM``.  Setting this
-property for a file means this file will be compiled.  Do not set this
-for headers or files that should not be compiled.
diff --git a/share/cmake-3.18/Help/prop_sf/SKIP_AUTOGEN.rst b/share/cmake-3.18/Help/prop_sf/SKIP_AUTOGEN.rst
deleted file mode 100644
index f31185a..0000000
--- a/share/cmake-3.18/Help/prop_sf/SKIP_AUTOGEN.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-SKIP_AUTOGEN
-------------
-
-Exclude the source file from :prop_tgt:`AUTOMOC`, :prop_tgt:`AUTOUIC` and
-:prop_tgt:`AUTORCC` processing (for Qt projects).
-
-For finer exclusion control see :prop_sf:`SKIP_AUTOMOC`,
-:prop_sf:`SKIP_AUTOUIC` and :prop_sf:`SKIP_AUTORCC`.
-
-EXAMPLE
-^^^^^^^
-
-.. code-block:: cmake
-
-  # ...
-  set_property(SOURCE file.h PROPERTY SKIP_AUTOGEN ON)
-  # ...
diff --git a/share/cmake-3.18/Help/prop_sf/SKIP_AUTOMOC.rst b/share/cmake-3.18/Help/prop_sf/SKIP_AUTOMOC.rst
deleted file mode 100644
index a929448..0000000
--- a/share/cmake-3.18/Help/prop_sf/SKIP_AUTOMOC.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-SKIP_AUTOMOC
-------------
-
-Exclude the source file from :prop_tgt:`AUTOMOC` processing (for Qt projects).
-
-For broader exclusion control see :prop_sf:`SKIP_AUTOGEN`.
-
-EXAMPLE
-^^^^^^^
-
-.. code-block:: cmake
-
-  # ...
-  set_property(SOURCE file.h PROPERTY SKIP_AUTOMOC ON)
-  # ...
diff --git a/share/cmake-3.18/Help/prop_sf/SKIP_AUTORCC.rst b/share/cmake-3.18/Help/prop_sf/SKIP_AUTORCC.rst
deleted file mode 100644
index bccccfc..0000000
--- a/share/cmake-3.18/Help/prop_sf/SKIP_AUTORCC.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-SKIP_AUTORCC
-------------
-
-Exclude the source file from :prop_tgt:`AUTORCC` processing (for Qt projects).
-
-For broader exclusion control see :prop_sf:`SKIP_AUTOGEN`.
-
-EXAMPLE
-^^^^^^^
-
-.. code-block:: cmake
-
-  # ...
-  set_property(SOURCE file.qrc PROPERTY SKIP_AUTORCC ON)
-  # ...
diff --git a/share/cmake-3.18/Help/prop_sf/SKIP_AUTOUIC.rst b/share/cmake-3.18/Help/prop_sf/SKIP_AUTOUIC.rst
deleted file mode 100644
index 8c962db..0000000
--- a/share/cmake-3.18/Help/prop_sf/SKIP_AUTOUIC.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-SKIP_AUTOUIC
-------------
-
-Exclude the source file from :prop_tgt:`AUTOUIC` processing (for Qt projects).
-
-:prop_sf:`SKIP_AUTOUIC` can be set on C++ header and source files and on
-``.ui`` files.
-
-For broader exclusion control see :prop_sf:`SKIP_AUTOGEN`.
-
-EXAMPLE
-^^^^^^^
-
-.. code-block:: cmake
-
-  # ...
-  set_property(SOURCE file.h PROPERTY SKIP_AUTOUIC ON)
-  set_property(SOURCE file.cpp PROPERTY SKIP_AUTOUIC ON)
-  set_property(SOURCE widget.ui PROPERTY SKIP_AUTOUIC ON)
-  # ...
diff --git a/share/cmake-3.18/Help/prop_sf/SKIP_PRECOMPILE_HEADERS.rst b/share/cmake-3.18/Help/prop_sf/SKIP_PRECOMPILE_HEADERS.rst
deleted file mode 100644
index 0031da3..0000000
--- a/share/cmake-3.18/Help/prop_sf/SKIP_PRECOMPILE_HEADERS.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-SKIP_PRECOMPILE_HEADERS
------------------------
-
-Is this source file skipped by :prop_tgt:`PRECOMPILE_HEADERS` feature.
-
-This property helps with build problems that one would run into
-when using the :prop_tgt:`PRECOMPILE_HEADERS` feature.
-
-One example would be the usage of Objective-C (``*.m``) files, and
-Objective-C++ (``*.mm``) files, which lead to compilation failure
-because they are treated (in case of Ninja / Makefile generator)
-as C, and CXX respectively. The precompile headers are not
-compatible between languages.
diff --git a/share/cmake-3.18/Help/prop_sf/SKIP_UNITY_BUILD_INCLUSION.rst b/share/cmake-3.18/Help/prop_sf/SKIP_UNITY_BUILD_INCLUSION.rst
deleted file mode 100644
index 6d1e60d..0000000
--- a/share/cmake-3.18/Help/prop_sf/SKIP_UNITY_BUILD_INCLUSION.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP_UNITY_BUILD_INCLUSION
---------------------------
-
-Setting this property to true ensures the source file will be skipped by
-unity builds when its associated target has its :prop_tgt:`UNITY_BUILD`
-property set to true.  The source file will instead be compiled on its own
-in the same way as it would with unity builds disabled.
-
-This property helps with "ODR (One definition rule)" problems where combining
-a particular source file with others might lead to build errors or other
-unintended side effects.
diff --git a/share/cmake-3.18/Help/prop_sf/Swift_DEPENDENCIES_FILE.rst b/share/cmake-3.18/Help/prop_sf/Swift_DEPENDENCIES_FILE.rst
deleted file mode 100644
index faac2df..0000000
--- a/share/cmake-3.18/Help/prop_sf/Swift_DEPENDENCIES_FILE.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-Swift_DEPENDENCIES_FILE
------------------------
-
-This property sets the path for the Swift dependency file (swiftdeps) for the
-source.  If one is not specified, it will default to ``<OBJECT>.swiftdeps``.
diff --git a/share/cmake-3.18/Help/prop_sf/Swift_DIAGNOSTICS_FILE.rst b/share/cmake-3.18/Help/prop_sf/Swift_DIAGNOSTICS_FILE.rst
deleted file mode 100644
index 5bf5d59..0000000
--- a/share/cmake-3.18/Help/prop_sf/Swift_DIAGNOSTICS_FILE.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-Swift_DIAGNOSTICS_FILE
-----------------------
-
-This property controls where the Swift diagnostics are serialized.
diff --git a/share/cmake-3.18/Help/prop_sf/UNITY_GROUP.rst b/share/cmake-3.18/Help/prop_sf/UNITY_GROUP.rst
deleted file mode 100644
index ec6b0f6..0000000
--- a/share/cmake-3.18/Help/prop_sf/UNITY_GROUP.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-UNITY_GROUP
------------
-
-This property controls which *bucket* the source will be part of when
-the :prop_tgt:`UNITY_BUILD_MODE` is set to ``GROUP``.
diff --git a/share/cmake-3.18/Help/prop_sf/VS_COPY_TO_OUT_DIR.rst b/share/cmake-3.18/Help/prop_sf/VS_COPY_TO_OUT_DIR.rst
deleted file mode 100644
index 16c8d83..0000000
--- a/share/cmake-3.18/Help/prop_sf/VS_COPY_TO_OUT_DIR.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-VS_COPY_TO_OUT_DIR
-------------------
-
-Sets the ``<CopyToOutputDirectory>`` tag for a source file in a
-Visual Studio project file. Valid values are ``Never``, ``Always``
-and ``PreserveNewest``.
diff --git a/share/cmake-3.18/Help/prop_sf/VS_CSHARP_tagname.rst b/share/cmake-3.18/Help/prop_sf/VS_CSHARP_tagname.rst
deleted file mode 100644
index 91c4a06..0000000
--- a/share/cmake-3.18/Help/prop_sf/VS_CSHARP_tagname.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-VS_CSHARP_<tagname>
--------------------
-
-Visual Studio and CSharp source-file-specific configuration.
-
-Tell the :manual:`Visual Studio generators <cmake-generators(7)>`
-to set the source file tag ``<tagname>``
-to a given value in the generated Visual Studio CSharp
-project. Ignored on other generators and languages. This property
-can be used to define dependencies between source files or set any
-other Visual Studio specific parameters.
-
-Example usage:
-
-.. code-block:: cmake
-
-  set_source_files_property(<filename>
-           PROPERTIES
-           VS_CSHARP_DependentUpon <other file>
-           VS_CSHARP_SubType "Form")
diff --git a/share/cmake-3.18/Help/prop_sf/VS_DEPLOYMENT_CONTENT.rst b/share/cmake-3.18/Help/prop_sf/VS_DEPLOYMENT_CONTENT.rst
deleted file mode 100644
index 6a38478..0000000
--- a/share/cmake-3.18/Help/prop_sf/VS_DEPLOYMENT_CONTENT.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-VS_DEPLOYMENT_CONTENT
----------------------
-
-Mark a source file as content for deployment with a Windows Phone or
-Windows Store application when built with a
-:manual:`Visual Studio generators <cmake-generators(7)>`.
-The value must evaluate to either ``1`` or ``0`` and may use
-:manual:`generator expressions <cmake-generator-expressions(7)>`
-to make the choice based on the build configuration.
-The ``.vcxproj`` file entry for the source file will be
-marked either ``DeploymentContent`` or ``ExcludedFromBuild``
-for values ``1`` and ``0``, respectively.
diff --git a/share/cmake-3.18/Help/prop_sf/VS_DEPLOYMENT_LOCATION.rst b/share/cmake-3.18/Help/prop_sf/VS_DEPLOYMENT_LOCATION.rst
deleted file mode 100644
index 2ce22fc..0000000
--- a/share/cmake-3.18/Help/prop_sf/VS_DEPLOYMENT_LOCATION.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-VS_DEPLOYMENT_LOCATION
-----------------------
-
-Specifies the deployment location for a content source file with a Windows
-Phone or Windows Store application when built
-with a :manual:`Visual Studio generators <cmake-generators(7)>`.
-This property is only applicable when using :prop_sf:`VS_DEPLOYMENT_CONTENT`.
-The value represent the path relative to the app package and applies to all
-configurations.
diff --git a/share/cmake-3.18/Help/prop_sf/VS_INCLUDE_IN_VSIX.rst b/share/cmake-3.18/Help/prop_sf/VS_INCLUDE_IN_VSIX.rst
deleted file mode 100644
index db470ef..0000000
--- a/share/cmake-3.18/Help/prop_sf/VS_INCLUDE_IN_VSIX.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-VS_INCLUDE_IN_VSIX
-------------------
-
-Boolean property to specify if the file should be included within a
-VSIX (Visual Studio Integration Extension) extension package.
-This is needed for development of Visual Studio extensions.
diff --git a/share/cmake-3.18/Help/prop_sf/VS_RESOURCE_GENERATOR.rst b/share/cmake-3.18/Help/prop_sf/VS_RESOURCE_GENERATOR.rst
deleted file mode 100644
index 97e5aac..0000000
--- a/share/cmake-3.18/Help/prop_sf/VS_RESOURCE_GENERATOR.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-VS_RESOURCE_GENERATOR
----------------------
-
-This property allows to specify the resource generator to be used
-on this file. It defaults to ``PublicResXFileCodeGenerator`` if
-not set.
-
-This property only applies to C# projects.
diff --git a/share/cmake-3.18/Help/prop_sf/VS_SETTINGS.rst b/share/cmake-3.18/Help/prop_sf/VS_SETTINGS.rst
deleted file mode 100644
index 50034fb..0000000
--- a/share/cmake-3.18/Help/prop_sf/VS_SETTINGS.rst
+++ /dev/null
@@ -1,18 +0,0 @@
-VS_SETTINGS
------------
-
-Set any item metadata on a non-built file.
-
-Takes a list of ``Key=Value`` pairs. Tells the Visual Studio generator to set
-``Key`` to ``Value`` as item metadata on the file.
-
-For example:
-
-.. code-block:: cmake
-
-  set_property(SOURCE file.hlsl PROPERTY VS_SETTINGS "Key=Value" "Key2=Value2")
-
-will set ``Key`` to ``Value`` and ``Key2`` to ``Value2`` on the
-``file.hlsl`` item as metadata.
-
-:manual:`Generator expressions <cmake-generator-expressions(7)>` are supported.
diff --git a/share/cmake-3.18/Help/prop_sf/VS_SHADER_DISABLE_OPTIMIZATIONS.rst b/share/cmake-3.18/Help/prop_sf/VS_SHADER_DISABLE_OPTIMIZATIONS.rst
deleted file mode 100644
index 446dd26..0000000
--- a/share/cmake-3.18/Help/prop_sf/VS_SHADER_DISABLE_OPTIMIZATIONS.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-VS_SHADER_DISABLE_OPTIMIZATIONS
--------------------------------
-
-Disable compiler optimizations for an ``.hlsl`` source file.  This adds the
-``-Od`` flag to the command line for the FxCompiler tool.  Specify the value
-``true`` for this property to disable compiler optimizations.
diff --git a/share/cmake-3.18/Help/prop_sf/VS_SHADER_ENABLE_DEBUG.rst b/share/cmake-3.18/Help/prop_sf/VS_SHADER_ENABLE_DEBUG.rst
deleted file mode 100644
index c0e60a3..0000000
--- a/share/cmake-3.18/Help/prop_sf/VS_SHADER_ENABLE_DEBUG.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-VS_SHADER_ENABLE_DEBUG
-----------------------
-
-Enable debugging information for an ``.hlsl`` source file.  This adds the
-``-Zi`` flag to the command line for the FxCompiler tool.  Specify the value
-``true`` to generate debugging information for the compiled shader.
diff --git a/share/cmake-3.18/Help/prop_sf/VS_SHADER_ENTRYPOINT.rst b/share/cmake-3.18/Help/prop_sf/VS_SHADER_ENTRYPOINT.rst
deleted file mode 100644
index fe3471f..0000000
--- a/share/cmake-3.18/Help/prop_sf/VS_SHADER_ENTRYPOINT.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-VS_SHADER_ENTRYPOINT
---------------------
-
-Specifies the name of the entry point for the shader of a ``.hlsl`` source
-file.
diff --git a/share/cmake-3.18/Help/prop_sf/VS_SHADER_FLAGS.rst b/share/cmake-3.18/Help/prop_sf/VS_SHADER_FLAGS.rst
deleted file mode 100644
index 0a53afd..0000000
--- a/share/cmake-3.18/Help/prop_sf/VS_SHADER_FLAGS.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-VS_SHADER_FLAGS
----------------
-
-Set additional Visual Studio shader flags of a ``.hlsl`` source file.
diff --git a/share/cmake-3.18/Help/prop_sf/VS_SHADER_MODEL.rst b/share/cmake-3.18/Help/prop_sf/VS_SHADER_MODEL.rst
deleted file mode 100644
index b1cf0df..0000000
--- a/share/cmake-3.18/Help/prop_sf/VS_SHADER_MODEL.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-VS_SHADER_MODEL
----------------
-
-Specifies the shader model of a ``.hlsl`` source file. Some shader types can
-only be used with recent shader models
diff --git a/share/cmake-3.18/Help/prop_sf/VS_SHADER_OBJECT_FILE_NAME.rst b/share/cmake-3.18/Help/prop_sf/VS_SHADER_OBJECT_FILE_NAME.rst
deleted file mode 100644
index 093bcc6..0000000
--- a/share/cmake-3.18/Help/prop_sf/VS_SHADER_OBJECT_FILE_NAME.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-VS_SHADER_OBJECT_FILE_NAME
---------------------------
-
-Specifies a file name for the compiled shader object file for an ``.hlsl``
-source file.  This adds the ``-Fo`` flag to the command line for the FxCompiler
-tool.
diff --git a/share/cmake-3.18/Help/prop_sf/VS_SHADER_OUTPUT_HEADER_FILE.rst b/share/cmake-3.18/Help/prop_sf/VS_SHADER_OUTPUT_HEADER_FILE.rst
deleted file mode 100644
index e6763d3..0000000
--- a/share/cmake-3.18/Help/prop_sf/VS_SHADER_OUTPUT_HEADER_FILE.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-VS_SHADER_OUTPUT_HEADER_FILE
-----------------------------
-
-Set filename for output header file containing object code of a ``.hlsl``
-source file.
diff --git a/share/cmake-3.18/Help/prop_sf/VS_SHADER_TYPE.rst b/share/cmake-3.18/Help/prop_sf/VS_SHADER_TYPE.rst
deleted file mode 100644
index f104837..0000000
--- a/share/cmake-3.18/Help/prop_sf/VS_SHADER_TYPE.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-VS_SHADER_TYPE
---------------
-
-Set the Visual Studio shader type of a ``.hlsl`` source file.
diff --git a/share/cmake-3.18/Help/prop_sf/VS_SHADER_VARIABLE_NAME.rst b/share/cmake-3.18/Help/prop_sf/VS_SHADER_VARIABLE_NAME.rst
deleted file mode 100644
index 1a5e369..0000000
--- a/share/cmake-3.18/Help/prop_sf/VS_SHADER_VARIABLE_NAME.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-VS_SHADER_VARIABLE_NAME
------------------------
-
-Set name of variable in header file containing object code of a ``.hlsl``
-source file.
diff --git a/share/cmake-3.18/Help/prop_sf/VS_TOOL_OVERRIDE.rst b/share/cmake-3.18/Help/prop_sf/VS_TOOL_OVERRIDE.rst
deleted file mode 100644
index 8bdc5ca..0000000
--- a/share/cmake-3.18/Help/prop_sf/VS_TOOL_OVERRIDE.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-VS_TOOL_OVERRIDE
-----------------
-
-Override the default Visual Studio tool that will be applied to the source file
-with a new tool not based on the extension of the file.
diff --git a/share/cmake-3.18/Help/prop_sf/VS_XAML_TYPE.rst b/share/cmake-3.18/Help/prop_sf/VS_XAML_TYPE.rst
deleted file mode 100644
index 1a274ba..0000000
--- a/share/cmake-3.18/Help/prop_sf/VS_XAML_TYPE.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-VS_XAML_TYPE
-------------
-
-Mark a Extensible Application Markup Language (XAML) source file
-as a different type than the default ``Page``.
-The most common usage would be to set the default ``App.xaml`` file as
-``ApplicationDefinition``.
diff --git a/share/cmake-3.18/Help/prop_sf/XCODE_EXPLICIT_FILE_TYPE.rst b/share/cmake-3.18/Help/prop_sf/XCODE_EXPLICIT_FILE_TYPE.rst
deleted file mode 100644
index b8cf946..0000000
--- a/share/cmake-3.18/Help/prop_sf/XCODE_EXPLICIT_FILE_TYPE.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-XCODE_EXPLICIT_FILE_TYPE
-------------------------
-
-Set the :generator:`Xcode` ``explicitFileType`` attribute on its reference to a
-source file.  CMake computes a default based on file extension but
-can be told explicitly with this property.
-
-See also :prop_sf:`XCODE_LAST_KNOWN_FILE_TYPE`.
diff --git a/share/cmake-3.18/Help/prop_sf/XCODE_FILE_ATTRIBUTES.rst b/share/cmake-3.18/Help/prop_sf/XCODE_FILE_ATTRIBUTES.rst
deleted file mode 100644
index 4c93f44..0000000
--- a/share/cmake-3.18/Help/prop_sf/XCODE_FILE_ATTRIBUTES.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-XCODE_FILE_ATTRIBUTES
----------------------
-
-Add values to the :generator:`Xcode` ``ATTRIBUTES`` setting on its reference to a
-source file.  Among other things, this can be used to set the role on
-a ``.mig`` file::
-
-  set_source_files_properties(defs.mig
-      PROPERTIES
-          XCODE_FILE_ATTRIBUTES "Client;Server"
-  )
diff --git a/share/cmake-3.18/Help/prop_sf/XCODE_LAST_KNOWN_FILE_TYPE.rst b/share/cmake-3.18/Help/prop_sf/XCODE_LAST_KNOWN_FILE_TYPE.rst
deleted file mode 100644
index b21891f..0000000
--- a/share/cmake-3.18/Help/prop_sf/XCODE_LAST_KNOWN_FILE_TYPE.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-XCODE_LAST_KNOWN_FILE_TYPE
---------------------------
-
-Set the :generator:`Xcode` ``lastKnownFileType`` attribute on its reference to
-a source file.  CMake computes a default based on file extension but
-can be told explicitly with this property.
-
-See also :prop_sf:`XCODE_EXPLICIT_FILE_TYPE`, which is preferred
-over this property if set.
diff --git a/share/cmake-3.18/Help/prop_test/DISABLED.rst b/share/cmake-3.18/Help/prop_test/DISABLED.rst
deleted file mode 100644
index 1d469e8..0000000
--- a/share/cmake-3.18/Help/prop_test/DISABLED.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-DISABLED
---------
-
-If set to ``True``, the test will be skipped and its status will be 'Not Run'. A
-``DISABLED`` test will not be counted in the total number of tests and its
-completion status will be reported to CDash as ``Disabled``.
-
-A ``DISABLED`` test does not participate in test fixture dependency resolution.
-If a ``DISABLED`` test has fixture requirements defined in its
-:prop_test:`FIXTURES_REQUIRED` property, it will not cause setup or cleanup
-tests for those fixtures to be added to the test set.
-
-If a test with the :prop_test:`FIXTURES_SETUP` property set is ``DISABLED``,
-the fixture behavior will be as though that setup test was passing and any test
-case requiring that fixture will still run.
diff --git a/share/cmake-3.18/Help/prop_test/ENVIRONMENT.rst b/share/cmake-3.18/Help/prop_test/ENVIRONMENT.rst
deleted file mode 100644
index 102c792..0000000
--- a/share/cmake-3.18/Help/prop_test/ENVIRONMENT.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-ENVIRONMENT
------------
-
-Specify environment variables that should be defined for running a test.
-
-If set to a list of environment variables and values of the form
-``MYVAR=value`` those environment variables will be defined while running
-the test.  The environment is restored to its previous state after the
-test is done.
diff --git a/share/cmake-3.18/Help/prop_test/FAIL_REGULAR_EXPRESSION.rst b/share/cmake-3.18/Help/prop_test/FAIL_REGULAR_EXPRESSION.rst
deleted file mode 100644
index facf902..0000000
--- a/share/cmake-3.18/Help/prop_test/FAIL_REGULAR_EXPRESSION.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-FAIL_REGULAR_EXPRESSION
------------------------
-
-If the output matches this regular expression the test will fail.
-
-If set, if the output matches one of specified regular expressions,
-the test will fail.  Example:
-
-.. code-block:: cmake
-
-  set_tests_properties(mytest PROPERTIES
-    FAIL_REGULAR_EXPRESSION "[^a-z]Error;ERROR;Failed"
-  )
-
-``FAIL_REGULAR_EXPRESSION`` expects a list of regular expressions.
diff --git a/share/cmake-3.18/Help/prop_test/FIXTURES_CLEANUP.rst b/share/cmake-3.18/Help/prop_test/FIXTURES_CLEANUP.rst
deleted file mode 100644
index 3075b4d..0000000
--- a/share/cmake-3.18/Help/prop_test/FIXTURES_CLEANUP.rst
+++ /dev/null
@@ -1,47 +0,0 @@
-FIXTURES_CLEANUP
-----------------
-
-Specifies a list of fixtures for which the test is to be treated as a cleanup
-test. These fixture names are distinct from test case names and are not
-required to have any similarity to the names of tests associated with them.
-
-Fixture cleanup tests are ordinary tests with all of the usual test
-functionality. Setting the ``FIXTURES_CLEANUP`` property for a test has two
-primary effects:
-
-- CTest will ensure the test executes after all other tests which list any of
-  the fixtures in its :prop_test:`FIXTURES_REQUIRED` property.
-
-- If CTest is asked to run only a subset of tests (e.g. using regular
-  expressions or the ``--rerun-failed`` option) and the cleanup test is not in
-  the set of tests to run, it will automatically be added if any tests in the
-  set require any fixture listed in ``FIXTURES_CLEANUP``.
-
-A cleanup test can have multiple fixtures listed in its ``FIXTURES_CLEANUP``
-property. It will execute only once for the whole CTest run, not once for each
-fixture. A fixture can also have more than one cleanup test defined. If there
-are multiple cleanup tests for a fixture, projects can control their order with
-the usual :prop_test:`DEPENDS` test property if necessary.
-
-A cleanup test is allowed to require other fixtures, but not any fixture listed
-in its ``FIXTURES_CLEANUP`` property. For example:
-
-.. code-block:: cmake
-
-  # Ok: Dependent fixture is different to cleanup
-  set_tests_properties(cleanupFoo PROPERTIES
-    FIXTURES_CLEANUP  Foo
-    FIXTURES_REQUIRED Bar
-  )
-
-  # Error: cannot require same fixture as cleanup
-  set_tests_properties(cleanupFoo PROPERTIES
-    FIXTURES_CLEANUP  Foo
-    FIXTURES_REQUIRED Foo
-  )
-
-Cleanup tests will execute even if setup or regular tests for that fixture fail
-or are skipped.
-
-See :prop_test:`FIXTURES_REQUIRED` for a more complete discussion of how to use
-test fixtures.
diff --git a/share/cmake-3.18/Help/prop_test/FIXTURES_REQUIRED.rst b/share/cmake-3.18/Help/prop_test/FIXTURES_REQUIRED.rst
deleted file mode 100644
index e3f60c4..0000000
--- a/share/cmake-3.18/Help/prop_test/FIXTURES_REQUIRED.rst
+++ /dev/null
@@ -1,96 +0,0 @@
-FIXTURES_REQUIRED
------------------
-
-Specifies a list of fixtures the test requires. Fixture names are case
-sensitive and they are not required to have any similarity to test names.
-
-Fixtures are a way to attach setup and cleanup tasks to a set of tests. If a
-test requires a given fixture, then all tests marked as setup tasks for that
-fixture will be executed first (once for the whole set of tests, not once per
-test requiring the fixture). After all tests requiring a particular fixture
-have completed, CTest will ensure all tests marked as cleanup tasks for that
-fixture are then executed. Tests are marked as setup tasks with the
-:prop_test:`FIXTURES_SETUP` property and as cleanup tasks with the
-:prop_test:`FIXTURES_CLEANUP` property. If any of a fixture's setup tests fail,
-all tests listing that fixture in their ``FIXTURES_REQUIRED`` property will not
-be executed. The cleanup tests for the fixture will always be executed, even if
-some setup tests fail.
-
-When CTest is asked to execute only a subset of tests (e.g. by the use of
-regular expressions or when run with the ``--rerun-failed`` command line
-option), it will automatically add any setup or cleanup tests for fixtures
-required by any of the tests that are in the execution set. This behavior can
-be overridden with the ``-FS``, ``-FC`` and ``-FA`` command line options to
-:manual:`ctest(1)` if desired.
-
-Since setup and cleanup tasks are also tests, they can have an ordering
-specified by the :prop_test:`DEPENDS` test property just like any other tests.
-This can be exploited to implement setup or cleanup using multiple tests for a
-single fixture to modularise setup or cleanup logic.
-
-The concept of a fixture is different to that of a resource specified by
-:prop_test:`RESOURCE_LOCK`, but they may be used together. A fixture defines a
-set of tests which share setup and cleanup requirements, whereas a resource
-lock has the effect of ensuring a particular set of tests do not run in
-parallel. Some situations may need both, such as setting up a database,
-serialising test access to that database and deleting the database again at the
-end. For such cases, tests would populate both ``FIXTURES_REQUIRED`` and
-:prop_test:`RESOURCE_LOCK` to combine the two behaviours. Names used for
-:prop_test:`RESOURCE_LOCK` have no relationship with names of fixtures, so note
-that a resource lock does not imply a fixture and vice versa.
-
-Consider the following example which represents a database test scenario
-similar to that mentioned above:
-
-.. code-block:: cmake
-
-  add_test(NAME testsDone   COMMAND emailResults)
-  add_test(NAME fooOnly     COMMAND testFoo)
-  add_test(NAME dbOnly      COMMAND testDb)
-  add_test(NAME dbWithFoo   COMMAND testDbWithFoo)
-  add_test(NAME createDB    COMMAND initDB)
-  add_test(NAME setupUsers  COMMAND userCreation)
-  add_test(NAME cleanupDB   COMMAND deleteDB)
-  add_test(NAME cleanupFoo  COMMAND removeFoos)
-
-  set_tests_properties(setupUsers PROPERTIES DEPENDS createDB)
-
-  set_tests_properties(createDB   PROPERTIES FIXTURES_SETUP    DB)
-  set_tests_properties(setupUsers PROPERTIES FIXTURES_SETUP    DB)
-  set_tests_properties(cleanupDB  PROPERTIES FIXTURES_CLEANUP  DB)
-  set_tests_properties(cleanupFoo PROPERTIES FIXTURES_CLEANUP  Foo)
-  set_tests_properties(testsDone  PROPERTIES FIXTURES_CLEANUP  "DB;Foo")
-
-  set_tests_properties(fooOnly    PROPERTIES FIXTURES_REQUIRED Foo)
-  set_tests_properties(dbOnly     PROPERTIES FIXTURES_REQUIRED DB)
-  set_tests_properties(dbWithFoo  PROPERTIES FIXTURES_REQUIRED "DB;Foo")
-
-  set_tests_properties(dbOnly dbWithFoo createDB setupUsers cleanupDB
-                       PROPERTIES RESOURCE_LOCK DbAccess)
-
-Key points from this example:
-
-- Two fixtures are defined: ``DB`` and ``Foo``. Tests can require a single
-  fixture as ``fooOnly`` and ``dbOnly`` do, or they can depend on multiple
-  fixtures like ``dbWithFoo`` does.
-
-- A ``DEPENDS`` relationship is set up to ensure ``setupUsers`` happens after
-  ``createDB``, both of which are setup tests for the ``DB`` fixture and will
-  therefore be executed before the ``dbOnly`` and ``dbWithFoo`` tests
-  automatically.
-
-- No explicit ``DEPENDS`` relationships were needed to make the setup tests run
-  before or the cleanup tests run after the regular tests.
-
-- The ``Foo`` fixture has no setup tests defined, only a single cleanup test.
-
-- ``testsDone`` is a cleanup test for both the ``DB`` and ``Foo`` fixtures.
-  Therefore, it will only execute once regular tests for both fixtures have
-  finished (i.e. after ``fooOnly``, ``dbOnly`` and ``dbWithFoo``). No
-  ``DEPENDS`` relationship was specified for ``testsDone``, so it is free to
-  run before, after or concurrently with other cleanup tests for either
-  fixture.
-
-- The setup and cleanup tests never list the fixtures they are for in their own
-  ``FIXTURES_REQUIRED`` property, as that would result in a dependency on
-  themselves and be considered an error.
diff --git a/share/cmake-3.18/Help/prop_test/FIXTURES_SETUP.rst b/share/cmake-3.18/Help/prop_test/FIXTURES_SETUP.rst
deleted file mode 100644
index fdb21cc..0000000
--- a/share/cmake-3.18/Help/prop_test/FIXTURES_SETUP.rst
+++ /dev/null
@@ -1,48 +0,0 @@
-FIXTURES_SETUP
---------------
-
-Specifies a list of fixtures for which the test is to be treated as a setup
-test. These fixture names are distinct from test case names and are not
-required to have any similarity to the names of tests associated with them.
-
-Fixture setup tests are ordinary tests with all of the usual test
-functionality. Setting the ``FIXTURES_SETUP`` property for a test has two
-primary effects:
-
-- CTest will ensure the test executes before any other test which lists the
-  fixture name(s) in its :prop_test:`FIXTURES_REQUIRED` property.
-
-- If CTest is asked to run only a subset of tests (e.g. using regular
-  expressions or the ``--rerun-failed`` option) and the setup test is not in
-  the set of tests to run, it will automatically be added if any tests in the
-  set require any fixture listed in ``FIXTURES_SETUP``.
-
-A setup test can have multiple fixtures listed in its ``FIXTURES_SETUP``
-property. It will execute only once for the whole CTest run, not once for each
-fixture. A fixture can also have more than one setup test defined. If there are
-multiple setup tests for a fixture, projects can control their order with the
-usual :prop_test:`DEPENDS` test property if necessary.
-
-A setup test is allowed to require other fixtures, but not any fixture listed
-in its ``FIXTURES_SETUP`` property. For example:
-
-.. code-block:: cmake
-
-  # Ok: dependent fixture is different to setup
-  set_tests_properties(setupFoo PROPERTIES
-    FIXTURES_SETUP    Foo
-    FIXTURES_REQUIRED Bar
-  )
-
-  # Error: cannot require same fixture as setup
-  set_tests_properties(setupFoo PROPERTIES
-    FIXTURES_SETUP    Foo
-    FIXTURES_REQUIRED Foo
-  )
-
-If any of a fixture's setup tests fail, none of the tests listing that fixture
-in its :prop_test:`FIXTURES_REQUIRED` property will be run. Cleanup tests will,
-however, still be executed.
-
-See :prop_test:`FIXTURES_REQUIRED` for a more complete discussion of how to use
-test fixtures.
diff --git a/share/cmake-3.18/Help/prop_test/LABELS.rst b/share/cmake-3.18/Help/prop_test/LABELS.rst
deleted file mode 100644
index 8d75570..0000000
--- a/share/cmake-3.18/Help/prop_test/LABELS.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-LABELS
-------
-
-Specify a list of text labels associated with a test.
-
-The list is reported in dashboard submissions.
diff --git a/share/cmake-3.18/Help/prop_test/PASS_REGULAR_EXPRESSION.rst b/share/cmake-3.18/Help/prop_test/PASS_REGULAR_EXPRESSION.rst
deleted file mode 100644
index 0cd6215..0000000
--- a/share/cmake-3.18/Help/prop_test/PASS_REGULAR_EXPRESSION.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-PASS_REGULAR_EXPRESSION
------------------------
-
-The output must match this regular expression for the test to pass.
-
-If set, the test output will be checked against the specified regular
-expressions and at least one of the regular expressions has to match,
-otherwise the test will fail.  Example:
-
-.. code-block:: cmake
-
-  set_tests_properties(mytest PROPERTIES
-    PASS_REGULAR_EXPRESSION "TestPassed;All ok"
-  )
-
-``PASS_REGULAR_EXPRESSION`` expects a list of regular expressions.
diff --git a/share/cmake-3.18/Help/prop_test/PROCESSOR_AFFINITY.rst b/share/cmake-3.18/Help/prop_test/PROCESSOR_AFFINITY.rst
deleted file mode 100644
index 38ec179..0000000
--- a/share/cmake-3.18/Help/prop_test/PROCESSOR_AFFINITY.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-PROCESSOR_AFFINITY
-------------------
-
-Set to a true value to ask CTest to launch the test process with CPU affinity
-for a fixed set of processors.  If enabled and supported for the current
-platform, CTest will choose a set of processors to place in the CPU affinity
-mask when launching the test process.  The number of processors in the set is
-determined by the :prop_test:`PROCESSORS` test property or the number of
-processors available to CTest, whichever is smaller.  The set of processors
-chosen will be disjoint from the processors assigned to other concurrently
-running tests that also have the ``PROCESSOR_AFFINITY`` property enabled.
diff --git a/share/cmake-3.18/Help/prop_test/RESOURCE_GROUPS.rst b/share/cmake-3.18/Help/prop_test/RESOURCE_GROUPS.rst
deleted file mode 100644
index 63c56ce..0000000
--- a/share/cmake-3.18/Help/prop_test/RESOURCE_GROUPS.rst
+++ /dev/null
@@ -1,70 +0,0 @@
-RESOURCE_GROUPS
----------------
-
-Specify resources required by a test, grouped in a way that is meaningful to
-the test.  See :ref:`resource allocation <ctest-resource-allocation>`
-for more information on how this property integrates into the CTest resource
-allocation feature.
-
-The ``RESOURCE_GROUPS`` property is a :ref:`semicolon-separated list <CMake
-Language Lists>` of group descriptions. Each entry consists of an optional
-number of groups using the description followed by a series of resource
-requirements for those groups. These requirements (and the number of groups)
-are separated by commas. The resource requirements consist of the name of a
-resource type, followed by a colon, followed by an unsigned integer
-specifying the number of slots required on one resource of the given type.
-
-The ``RESOURCE_GROUPS`` property tells CTest what resources a test expects
-to use grouped in a way meaningful to the test.  The test itself must read
-the :ref:`environment variables <ctest-resource-environment-variables>` to
-determine which resources have been allocated to each group.  For example,
-each group may correspond to a process the test will spawn when executed.
-
-Consider the following example:
-
-.. code-block:: cmake
-
-  add_test(NAME MyTest COMMAND MyExe)
-  set_property(TEST MyTest PROPERTY RESOURCE_GROUPS
-    "2,gpus:2"
-    "gpus:4,crypto_chips:2")
-
-In this example, there are two group descriptions (implicitly separated by a
-semicolon.) The content of the first description is ``2,gpus:2``. This
-description specifies 2 groups, each of which requires 2 slots from a single
-GPU. The content of the second description is ``gpus:4,crypto_chips:2``. This
-description does not specify a group count, so a default of 1 is assumed.
-This single group requires 4 slots from a single GPU and 2 slots from a
-single cryptography chip. In total, 3 resource groups are specified for this
-test, each with its own unique requirements.
-
-Note that the number of slots following the resource type specifies slots from
-a *single* instance of the resource. If the resource group can tolerate
-receiving slots from different instances of the same resource, it can indicate
-this by splitting the specification into multiple requirements of one slot. For
-example:
-
-.. code-block:: cmake
-
-  add_test(NAME MyTest COMMAND MyExe)
-  set_property(TEST MyTest PROPERTY RESOURCE_GROUPS
-    "gpus:1,gpus:1,gpus:1,gpus:1")
-
-In this case, the single resource group indicates that it needs four GPU slots,
-all of which may come from separate GPUs (though they don't have to; CTest may
-still assign slots from the same GPU.)
-
-When CTest sets the :ref:`environment variables
-<ctest-resource-environment-variables>` for a test, it assigns a group number
-based on the group description, starting at 0 on the left and the number of
-groups minus 1 on the right. For example, in the example above, the two
-groups in the first description would have IDs of 0 and 1, and the single
-group in the second description would have an ID of 2.
-
-Both the ``RESOURCE_GROUPS`` and :prop_test:`RESOURCE_LOCK` properties serve
-similar purposes, but they are distinct and orthogonal. Resources specified by
-``RESOURCE_GROUPS`` do not affect :prop_test:`RESOURCE_LOCK`, and vice versa.
-Whereas :prop_test:`RESOURCE_LOCK` is a simpler property that is used for
-locking one global resource, ``RESOURCE_GROUPS`` is a more advanced property
-that allows multiple tests to simultaneously use multiple resources of the
-same type, specifying their requirements in a fine-grained manner.
diff --git a/share/cmake-3.18/Help/prop_test/SKIP_REGULAR_EXPRESSION.rst b/share/cmake-3.18/Help/prop_test/SKIP_REGULAR_EXPRESSION.rst
deleted file mode 100644
index 2c6d980..0000000
--- a/share/cmake-3.18/Help/prop_test/SKIP_REGULAR_EXPRESSION.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-SKIP_REGULAR_EXPRESSION
------------------------
-
-If the output matches this regular expression the test will be marked as skipped.
-
-If set, if the output matches one of specified regular expressions,
-the test will be marked as skipped.  Example:
-
-.. code-block:: cmake
-
-  set_property(TEST mytest PROPERTY
-    SKIP_REGULAR_EXPRESSION "[^a-z]Skip" "SKIP" "Skipped"
-  )
-
-``SKIP_REGULAR_EXPRESSION`` expects a list of regular expressions.
-
-See also the :prop_test:`SKIP_RETURN_CODE` property.
diff --git a/share/cmake-3.18/Help/prop_test/TIMEOUT_AFTER_MATCH.rst b/share/cmake-3.18/Help/prop_test/TIMEOUT_AFTER_MATCH.rst
deleted file mode 100644
index d607992..0000000
--- a/share/cmake-3.18/Help/prop_test/TIMEOUT_AFTER_MATCH.rst
+++ /dev/null
@@ -1,39 +0,0 @@
-TIMEOUT_AFTER_MATCH
--------------------
-
-Change a test's timeout duration after a matching line is encountered
-in its output.
-
-Usage
-^^^^^
-
-.. code-block:: cmake
-
- add_test(mytest ...)
- set_property(TEST mytest PROPERTY TIMEOUT_AFTER_MATCH "${seconds}" "${regex}")
-
-Description
-^^^^^^^^^^^
-
-Allow a test ``seconds`` to complete after ``regex`` is encountered in
-its output.
-
-When the test outputs a line that matches ``regex`` its start time is
-reset to the current time and its timeout duration is changed to
-``seconds``.  Prior to this, the timeout duration is determined by the
-:prop_test:`TIMEOUT` property or the :variable:`CTEST_TEST_TIMEOUT`
-variable if either of these are set.  Because the test's start time is
-reset, its execution time will not include any time that was spent
-waiting for the matching output.
-
-:prop_test:`TIMEOUT_AFTER_MATCH` is useful for avoiding spurious
-timeouts when your test must wait for some system resource to become
-available before it can execute.  Set :prop_test:`TIMEOUT` to a longer
-duration that accounts for resource acquisition and use
-:prop_test:`TIMEOUT_AFTER_MATCH` to control how long the actual test
-is allowed to run.
-
-If the required resource can be controlled by CTest you should use
-:prop_test:`RESOURCE_LOCK` instead of :prop_test:`TIMEOUT_AFTER_MATCH`.
-This property should be used when only the test itself can determine
-when its required resources are available.
diff --git a/share/cmake-3.18/Help/prop_tgt/ADDITIONAL_CLEAN_FILES.rst b/share/cmake-3.18/Help/prop_tgt/ADDITIONAL_CLEAN_FILES.rst
deleted file mode 100644
index 3b9d965..0000000
--- a/share/cmake-3.18/Help/prop_tgt/ADDITIONAL_CLEAN_FILES.rst
+++ /dev/null
@@ -1,23 +0,0 @@
-ADDITIONAL_CLEAN_FILES
-----------------------
-
-A :ref:`;-list <CMake Language Lists>` of files or directories that will be
-removed as a part of the global ``clean`` target.  It can be used to specify
-files and directories that are generated as part of building the target or
-that are directly associated with the target in some way (e.g. created as a
-result of running the target).
-
-For custom targets, if such files can be captured as outputs or byproducts
-instead, then that should be preferred over adding them to this property.
-If an additional clean file is used by multiple targets or isn't
-target-specific, then the :prop_dir:`ADDITIONAL_CLEAN_FILES` directory
-property may be the more appropriate property to use.
-
-Relative paths are allowed and are interpreted relative to the
-current binary directory.
-
-Contents of ``ADDITIONAL_CLEAN_FILES`` may use
-:manual:`generator expressions <cmake-generator-expressions(7)>`.
-
-This property only works for the :generator:`Ninja` and the Makefile
-generators.  It is ignored by other generators.
diff --git a/share/cmake-3.18/Help/prop_tgt/AIX_EXPORT_ALL_SYMBOLS.rst b/share/cmake-3.18/Help/prop_tgt/AIX_EXPORT_ALL_SYMBOLS.rst
deleted file mode 100644
index 15ddc0b..0000000
--- a/share/cmake-3.18/Help/prop_tgt/AIX_EXPORT_ALL_SYMBOLS.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-AIX_EXPORT_ALL_SYMBOLS
-----------------------
-
-On AIX, CMake automatically exports all symbols from shared libraries, and
-from executables with the :prop_tgt:`ENABLE_EXPORTS` target property set.
-Explicitly disable this boolean property to suppress the behavior and
-export no symbols by default.  In this case it is expected that the project
-will use other means to export some symbols.
-
-This property is initialized by the value of
-the :variable:`CMAKE_AIX_EXPORT_ALL_SYMBOLS` variable if it is set
-when a target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/ALIAS_GLOBAL.rst b/share/cmake-3.18/Help/prop_tgt/ALIAS_GLOBAL.rst
deleted file mode 100644
index 8854f57..0000000
--- a/share/cmake-3.18/Help/prop_tgt/ALIAS_GLOBAL.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-ALIAS_GLOBAL
-------------
-
-Read-only property indicating of whether an :ref:`ALIAS target <Alias Targets>`
-is globally visible.
-
-The boolean value of this property is ``TRUE`` for aliases to
-:ref:`IMPORTED targets <Imported Targets>` created
-with the ``GLOBAL`` options to :command:`add_executable()` or
-:command:`add_library()`, ``FALSE`` otherwise. It is undefined for
-targets built within the project.
-
-.. note::
-
-  Promoting an :ref:`IMPORTED target <Imported Targets>` from ``LOCAL``
-  to ``GLOBAL`` scope by changing the value or :prop_tgt:`IMPORTED_GLOBAL`
-  target property do not change the scope of local aliases.
diff --git a/share/cmake-3.18/Help/prop_tgt/ANDROID_ANT_ADDITIONAL_OPTIONS.rst b/share/cmake-3.18/Help/prop_tgt/ANDROID_ANT_ADDITIONAL_OPTIONS.rst
deleted file mode 100644
index af6b405..0000000
--- a/share/cmake-3.18/Help/prop_tgt/ANDROID_ANT_ADDITIONAL_OPTIONS.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-ANDROID_ANT_ADDITIONAL_OPTIONS
-------------------------------
-
-Set the additional options for Android Ant build system. This is
-a string value containing all command line options for the Ant build.
-This property is initialized by the value of the
-:variable:`CMAKE_ANDROID_ANT_ADDITIONAL_OPTIONS` variable if it is
-set when a target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/ANDROID_API.rst b/share/cmake-3.18/Help/prop_tgt/ANDROID_API.rst
deleted file mode 100644
index 63464d7..0000000
--- a/share/cmake-3.18/Help/prop_tgt/ANDROID_API.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-ANDROID_API
------------
-
-When :ref:`Cross Compiling for Android with NVIDIA Nsight Tegra Visual Studio
-Edition`, this property sets the Android target API version (e.g. ``15``).
-The version number must be a positive decimal integer.  This property is
-initialized by the value of the :variable:`CMAKE_ANDROID_API` variable if
-it is set when a target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/ANDROID_API_MIN.rst b/share/cmake-3.18/Help/prop_tgt/ANDROID_API_MIN.rst
deleted file mode 100644
index 773ab3f..0000000
--- a/share/cmake-3.18/Help/prop_tgt/ANDROID_API_MIN.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-ANDROID_API_MIN
----------------
-
-Set the Android MIN API version (e.g. ``9``).  The version number
-must be a positive decimal integer.  This property is initialized by
-the value of the :variable:`CMAKE_ANDROID_API_MIN` variable if it is set
-when a target is created.  Native code builds using this API version.
diff --git a/share/cmake-3.18/Help/prop_tgt/ANDROID_ARCH.rst b/share/cmake-3.18/Help/prop_tgt/ANDROID_ARCH.rst
deleted file mode 100644
index 3e07e5a..0000000
--- a/share/cmake-3.18/Help/prop_tgt/ANDROID_ARCH.rst
+++ /dev/null
@@ -1,18 +0,0 @@
-ANDROID_ARCH
-------------
-
-When :ref:`Cross Compiling for Android with NVIDIA Nsight Tegra Visual Studio
-Edition`, this property sets the Android target architecture.
-
-This is a string property that could be set to the one of
-the following values:
-
-* ``armv7-a``: "ARMv7-A (armv7-a)"
-* ``armv7-a-hard``: "ARMv7-A, hard-float ABI (armv7-a)"
-* ``arm64-v8a``: "ARMv8-A, 64bit (arm64-v8a)"
-* ``x86``: "x86 (x86)"
-* ``x86_64``: "x86_64 (x86_64)"
-
-This property is initialized by the value of the
-:variable:`CMAKE_ANDROID_ARCH` variable if it is set
-when a target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/ANDROID_ASSETS_DIRECTORIES.rst b/share/cmake-3.18/Help/prop_tgt/ANDROID_ASSETS_DIRECTORIES.rst
deleted file mode 100644
index 764a582..0000000
--- a/share/cmake-3.18/Help/prop_tgt/ANDROID_ASSETS_DIRECTORIES.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-ANDROID_ASSETS_DIRECTORIES
---------------------------
-
-Set the Android assets directories to copy into the main assets
-folder before build. This a string property that contains the
-directory paths separated by semicolon.
-This property is initialized by the value of the
-:variable:`CMAKE_ANDROID_ASSETS_DIRECTORIES` variable if it is set when
-a target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/ANDROID_GUI.rst b/share/cmake-3.18/Help/prop_tgt/ANDROID_GUI.rst
deleted file mode 100644
index 92e2041..0000000
--- a/share/cmake-3.18/Help/prop_tgt/ANDROID_GUI.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-ANDROID_GUI
------------
-
-When :ref:`Cross Compiling for Android with NVIDIA Nsight Tegra Visual Studio
-Edition`, this property specifies whether to build an executable as an
-application package on Android.
-
-When this property is set to true the executable when built for Android
-will be created as an application package.  This property is initialized
-by the value of the :variable:`CMAKE_ANDROID_GUI` variable if it is set
-when a target is created.
-
-Add the ``AndroidManifest.xml`` source file explicitly to the
-target :command:`add_executable` command invocation to specify the
-root directory of the application package source.
diff --git a/share/cmake-3.18/Help/prop_tgt/ANDROID_JAR_DEPENDENCIES.rst b/share/cmake-3.18/Help/prop_tgt/ANDROID_JAR_DEPENDENCIES.rst
deleted file mode 100644
index 42937c1..0000000
--- a/share/cmake-3.18/Help/prop_tgt/ANDROID_JAR_DEPENDENCIES.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-ANDROID_JAR_DEPENDENCIES
-------------------------
-
-Set the Android property that specifies JAR dependencies.
-This is a string value property. This property is initialized
-by the value of the :variable:`CMAKE_ANDROID_JAR_DEPENDENCIES`
-variable if it is set when a target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/ANDROID_JAR_DIRECTORIES.rst b/share/cmake-3.18/Help/prop_tgt/ANDROID_JAR_DIRECTORIES.rst
deleted file mode 100644
index 54f0a8f..0000000
--- a/share/cmake-3.18/Help/prop_tgt/ANDROID_JAR_DIRECTORIES.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-ANDROID_JAR_DIRECTORIES
------------------------
-
-Set the Android property that specifies directories to search for
-the JAR libraries.
-
-This a string property that contains the directory paths separated by
-semicolons. This property is initialized by the value of the
-:variable:`CMAKE_ANDROID_JAR_DIRECTORIES` variable if it is set when
-a target is created.
-
-Contents of ``ANDROID_JAR_DIRECTORIES`` may use "generator expressions"
-with the syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)`
-manual for available expressions.
diff --git a/share/cmake-3.18/Help/prop_tgt/ANDROID_JAVA_SOURCE_DIR.rst b/share/cmake-3.18/Help/prop_tgt/ANDROID_JAVA_SOURCE_DIR.rst
deleted file mode 100644
index 90ef1ce..0000000
--- a/share/cmake-3.18/Help/prop_tgt/ANDROID_JAVA_SOURCE_DIR.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-ANDROID_JAVA_SOURCE_DIR
------------------------
-
-Set the Android property that defines the Java source code root directories.
-This a string property that contains the directory paths separated by semicolon.
-This property is initialized by the value of the
-:variable:`CMAKE_ANDROID_JAVA_SOURCE_DIR` variable if it is set
-when a target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/ANDROID_NATIVE_LIB_DEPENDENCIES.rst b/share/cmake-3.18/Help/prop_tgt/ANDROID_NATIVE_LIB_DEPENDENCIES.rst
deleted file mode 100644
index 759a37b..0000000
--- a/share/cmake-3.18/Help/prop_tgt/ANDROID_NATIVE_LIB_DEPENDENCIES.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-ANDROID_NATIVE_LIB_DEPENDENCIES
--------------------------------
-
-Set the Android property that specifies the .so dependencies.
-This is a string property.
-
-This property is initialized by the value of the
-:variable:`CMAKE_ANDROID_NATIVE_LIB_DEPENDENCIES` variable if it is set
-when a target is created.
-
-Contents of ``ANDROID_NATIVE_LIB_DEPENDENCIES`` may use
-"generator expressions" with the syntax ``$<...>``. See the
-:manual:`cmake-generator-expressions(7)` manual for
-available expressions.
diff --git a/share/cmake-3.18/Help/prop_tgt/ANDROID_NATIVE_LIB_DIRECTORIES.rst b/share/cmake-3.18/Help/prop_tgt/ANDROID_NATIVE_LIB_DIRECTORIES.rst
deleted file mode 100644
index d0cd29d..0000000
--- a/share/cmake-3.18/Help/prop_tgt/ANDROID_NATIVE_LIB_DIRECTORIES.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-ANDROID_NATIVE_LIB_DIRECTORIES
-------------------------------
-
-Set the Android property that specifies directories to search for the ``.so``
-libraries.
-
-This a string property that contains the directory paths separated
-by semicolons.
-
-This property is initialized by the value of the
-:variable:`CMAKE_ANDROID_NATIVE_LIB_DIRECTORIES` variable if it is set when a
-target is created.
-
-Contents of ``ANDROID_NATIVE_LIB_DIRECTORIES`` may use "generator expressions"
-with the syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)`
-manual for available expressions.
diff --git a/share/cmake-3.18/Help/prop_tgt/ANDROID_PROCESS_MAX.rst b/share/cmake-3.18/Help/prop_tgt/ANDROID_PROCESS_MAX.rst
deleted file mode 100644
index 847acae..0000000
--- a/share/cmake-3.18/Help/prop_tgt/ANDROID_PROCESS_MAX.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-ANDROID_PROCESS_MAX
--------------------
-
-Set the Android property that defines the maximum number of a
-parallel Android NDK compiler processes (e.g. ``4``).
-This property is initialized by the value of the
-:variable:`CMAKE_ANDROID_PROCESS_MAX` variable if it is set
-when a target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/ANDROID_PROGUARD.rst b/share/cmake-3.18/Help/prop_tgt/ANDROID_PROGUARD.rst
deleted file mode 100644
index dafc51e..0000000
--- a/share/cmake-3.18/Help/prop_tgt/ANDROID_PROGUARD.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-ANDROID_PROGUARD
-----------------
-
-When this property is set to true that enables the ProGuard tool to shrink,
-optimize, and obfuscate the code by removing unused code and renaming
-classes, fields, and methods with semantically obscure names.
-This property is initialized by the value of the
-:variable:`CMAKE_ANDROID_PROGUARD` variable if it is set
-when a target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/ANDROID_PROGUARD_CONFIG_PATH.rst b/share/cmake-3.18/Help/prop_tgt/ANDROID_PROGUARD_CONFIG_PATH.rst
deleted file mode 100644
index 0e929d1..0000000
--- a/share/cmake-3.18/Help/prop_tgt/ANDROID_PROGUARD_CONFIG_PATH.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-ANDROID_PROGUARD_CONFIG_PATH
-----------------------------
-
-Set the Android property that specifies the location of the ProGuard
-config file. Leave empty to use the default one.
-This a string property that contains the path to ProGuard config file.
-This property is initialized by the value of the
-:variable:`CMAKE_ANDROID_PROGUARD_CONFIG_PATH` variable if it is set
-when a target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/ANDROID_SECURE_PROPS_PATH.rst b/share/cmake-3.18/Help/prop_tgt/ANDROID_SECURE_PROPS_PATH.rst
deleted file mode 100644
index 9533f1a..0000000
--- a/share/cmake-3.18/Help/prop_tgt/ANDROID_SECURE_PROPS_PATH.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-ANDROID_SECURE_PROPS_PATH
--------------------------
-
-Set the Android property that states the location of the secure properties file.
-This is a string property that contains the file path.
-This property is initialized by the value of the
-:variable:`CMAKE_ANDROID_SECURE_PROPS_PATH` variable
-if it is set when a target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/ANDROID_SKIP_ANT_STEP.rst b/share/cmake-3.18/Help/prop_tgt/ANDROID_SKIP_ANT_STEP.rst
deleted file mode 100644
index 6361896..0000000
--- a/share/cmake-3.18/Help/prop_tgt/ANDROID_SKIP_ANT_STEP.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-ANDROID_SKIP_ANT_STEP
----------------------
-
-Set the Android property that defines whether or not to skip the Ant build step.
-This is a boolean property initialized by the value of the
-:variable:`CMAKE_ANDROID_SKIP_ANT_STEP` variable if it is set when a target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/ANDROID_STL_TYPE.rst b/share/cmake-3.18/Help/prop_tgt/ANDROID_STL_TYPE.rst
deleted file mode 100644
index 386e96e..0000000
--- a/share/cmake-3.18/Help/prop_tgt/ANDROID_STL_TYPE.rst
+++ /dev/null
@@ -1,27 +0,0 @@
-ANDROID_STL_TYPE
-----------------
-
-When :ref:`Cross Compiling for Android with NVIDIA Nsight Tegra Visual Studio
-Edition`, this property specifies the type of STL support for the project.
-This is a string property that could set to the one of the following values:
-
-``none``
-  No C++ Support
-``system``
-  Minimal C++ without STL
-``gabi++_static``
-  GAbi++ Static
-``gabi++_shared``
-  GAbi++ Shared
-``gnustl_static``
-  GNU libstdc++ Static
-``gnustl_shared``
-  GNU libstdc++ Shared
-``stlport_static``
-  STLport Static
-``stlport_shared``
-  STLport Shared
-
-This property is initialized by the value of the
-:variable:`CMAKE_ANDROID_STL_TYPE` variable if it is set when a target is
-created.
diff --git a/share/cmake-3.18/Help/prop_tgt/ARCHIVE_OUTPUT_DIRECTORY.rst b/share/cmake-3.18/Help/prop_tgt/ARCHIVE_OUTPUT_DIRECTORY.rst
deleted file mode 100644
index 4221069..0000000
--- a/share/cmake-3.18/Help/prop_tgt/ARCHIVE_OUTPUT_DIRECTORY.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-ARCHIVE_OUTPUT_DIRECTORY
-------------------------
-
-.. |XXX| replace:: :ref:`ARCHIVE <Archive Output Artifacts>`
-.. |xxx| replace:: archive
-.. |CMAKE_XXX_OUTPUT_DIRECTORY| replace:: CMAKE_ARCHIVE_OUTPUT_DIRECTORY
-.. include:: XXX_OUTPUT_DIRECTORY.txt
-
-See also the :prop_tgt:`ARCHIVE_OUTPUT_DIRECTORY_<CONFIG>` target property.
diff --git a/share/cmake-3.18/Help/prop_tgt/AUTOGEN_BUILD_DIR.rst b/share/cmake-3.18/Help/prop_tgt/AUTOGEN_BUILD_DIR.rst
deleted file mode 100644
index 909b14c..0000000
--- a/share/cmake-3.18/Help/prop_tgt/AUTOGEN_BUILD_DIR.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-AUTOGEN_BUILD_DIR
------------------
-
-Directory where :prop_tgt:`AUTOMOC`, :prop_tgt:`AUTOUIC` and :prop_tgt:`AUTORCC`
-generate files for the target.
-
-The directory is created on demand and automatically added to the
-:prop_tgt:`ADDITIONAL_CLEAN_FILES` target property.
-
-When unset or empty the directory ``<dir>/<target-name>_autogen`` is used where
-``<dir>`` is :variable:`CMAKE_CURRENT_BINARY_DIR` and ``<target-name>``
-is :prop_tgt:`NAME`.
-
-By default :prop_tgt:`AUTOGEN_BUILD_DIR` is unset.
-
-See the :manual:`cmake-qt(7)` manual for more information on using CMake
-with Qt.
diff --git a/share/cmake-3.18/Help/prop_tgt/AUTOGEN_ORIGIN_DEPENDS.rst b/share/cmake-3.18/Help/prop_tgt/AUTOGEN_ORIGIN_DEPENDS.rst
deleted file mode 100644
index 022bab5..0000000
--- a/share/cmake-3.18/Help/prop_tgt/AUTOGEN_ORIGIN_DEPENDS.rst
+++ /dev/null
@@ -1,38 +0,0 @@
-AUTOGEN_ORIGIN_DEPENDS
-----------------------
-
-Switch for forwarding origin target dependencies to the corresponding
-``_autogen`` target.
-
-Targets which have their :prop_tgt:`AUTOMOC` or :prop_tgt:`AUTOUIC` property
-``ON`` have a corresponding ``_autogen`` target which generates
-``moc`` and ``uic`` files.  As this ``_autogen`` target is created at
-generate-time, it is not possible to define dependencies of it using
-e.g.  :command:`add_dependencies`.  Instead the
-:prop_tgt:`AUTOGEN_ORIGIN_DEPENDS` target property decides whether the origin
-target dependencies should be forwarded to the ``_autogen`` target or not.
-
-By default :prop_tgt:`AUTOGEN_ORIGIN_DEPENDS` is initialized from
-:variable:`CMAKE_AUTOGEN_ORIGIN_DEPENDS` which is ``ON`` by default.
-
-In total the dependencies of the ``_autogen`` target are composed from
-
-- forwarded origin target dependencies
-  (enabled by default via :prop_tgt:`AUTOGEN_ORIGIN_DEPENDS`)
-- additional user defined dependencies from :prop_tgt:`AUTOGEN_TARGET_DEPENDS`
-
-See the :manual:`cmake-qt(7)` manual for more information on using CMake
-with Qt.
-
-Note
-^^^^
-
-Disabling :prop_tgt:`AUTOGEN_ORIGIN_DEPENDS` is useful to avoid building of
-origin target dependencies when building the ``_autogen`` target only.
-This is especially interesting when a
-:variable:`global autogen target <CMAKE_GLOBAL_AUTOGEN_TARGET>` is enabled.
-
-When the ``_autogen`` target doesn't require all the origin target's
-dependencies, and :prop_tgt:`AUTOGEN_ORIGIN_DEPENDS` is disabled, it might be
-necessary to extend :prop_tgt:`AUTOGEN_TARGET_DEPENDS` to add missing
-dependencies.
diff --git a/share/cmake-3.18/Help/prop_tgt/AUTOGEN_PARALLEL.rst b/share/cmake-3.18/Help/prop_tgt/AUTOGEN_PARALLEL.rst
deleted file mode 100644
index 968b619..0000000
--- a/share/cmake-3.18/Help/prop_tgt/AUTOGEN_PARALLEL.rst
+++ /dev/null
@@ -1,21 +0,0 @@
-AUTOGEN_PARALLEL
-----------------
-
-Number of parallel ``moc`` or ``uic`` processes to start when using
-:prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`.
-
-The custom ``<origin>_autogen`` target starts a number of threads of which
-each one parses a source file and on demand starts a ``moc`` or ``uic``
-process.  ``AUTOGEN_PARALLEL`` controls how many parallel threads
-(and therefore ``moc`` or ``uic`` processes) are started.
-
-- An empty (or unset) value or the string ``AUTO`` sets the number of
-  threads/processes to the number of physical CPUs on the host system.
-- A positive non zero integer value sets the exact thread/process count.
-- Otherwise a single thread/process is started.
-
-By default ``AUTOGEN_PARALLEL`` is initialized from
-:variable:`CMAKE_AUTOGEN_PARALLEL`.
-
-See the :manual:`cmake-qt(7)` manual for more information on using CMake
-with Qt.
diff --git a/share/cmake-3.18/Help/prop_tgt/AUTOMOC.rst b/share/cmake-3.18/Help/prop_tgt/AUTOMOC.rst
deleted file mode 100644
index c18859b..0000000
--- a/share/cmake-3.18/Help/prop_tgt/AUTOMOC.rst
+++ /dev/null
@@ -1,247 +0,0 @@
-AUTOMOC
--------
-
-Should the target be processed with auto-moc (for Qt projects).
-
-:prop_tgt:`AUTOMOC` is a boolean specifying whether CMake will handle the Qt
-``moc`` preprocessor automatically, i.e.  without having to use the
-:module:`QT4_WRAP_CPP() <FindQt4>` or ``QT5_WRAP_CPP()`` macro.
-Currently Qt4 and Qt5 are supported.
-
-This property is initialized by the value of the :variable:`CMAKE_AUTOMOC`
-variable if it is set when a target is created.
-
-When this property is set ``ON``, CMake will scan the header and
-source files at build time and invoke ``moc`` accordingly.
-
-
-Header file processing
-^^^^^^^^^^^^^^^^^^^^^^
-
-At configuration time, a list of header files that should be scanned by
-:prop_tgt:`AUTOMOC` is computed from the target's sources.
-
-- All header files in the target's sources are added to the scan list.
-- For all C++ source files ``<source_base>.<source_extension>`` in the
-  target's sources, CMake searches for
-
-  - a regular header with the same base name
-    (``<source_base>.<header_extention>``) and
-  - a private header with the same base name and a ``_p`` suffix
-    (``<source_base>_p.<header_extention>``)
-
-  and adds these to the scan list.
-
-At build time, CMake scans each unknown or modified header file from the
-list and searches for
-
-- a Qt macro from :prop_tgt:`AUTOMOC_MACRO_NAMES`,
-- additional file dependencies from the ``FILE`` argument of a
-  ``Q_PLUGIN_METADATA`` macro and
-- additional file dependencies detected by filters defined in
-  :prop_tgt:`AUTOMOC_DEPEND_FILTERS`.
-
-If a Qt macro is found, then the header will be compiled by the ``moc`` to the
-output file ``moc_<base_name>.cpp``.  The complete output file path is
-described in the section `Output file location`_.
-
-The header will be ``moc`` compiled again if a file from the additional file
-dependencies changes.
-
-Header ``moc`` output files ``moc_<base_name>.cpp`` can be included in source
-files.  In the section `Including header moc files in sources`_ there is more
-information on that topic.
-
-
-Source file processing
-^^^^^^^^^^^^^^^^^^^^^^
-
-At build time, CMake scans each unknown or modified C++ source file from the
-target's sources for
-
-- a Qt macro from :prop_tgt:`AUTOMOC_MACRO_NAMES`,
-- includes of header ``moc`` files
-  (see `Including header moc files in sources`_),
-- additional file dependencies from the ``FILE`` argument of a
-  ``Q_PLUGIN_METADATA`` macro and
-- additional file dependencies detected by filters defined in
-  :prop_tgt:`AUTOMOC_DEPEND_FILTERS`.
-
-If a Qt macro is found, then the C++ source file
-``<base>.<source_extension>`` is expected to as well contain an include
-statement
-
-.. code-block:: c++
-
-  #include <<base>.moc> // or
-  #include "<base>.moc"
-
-The source file then will be compiled by the ``moc`` to the output file
-``<base>.moc``.  A description of the complete output file path is in section
-`Output file location`_.
-
-The source will be ``moc`` compiled again if a file from the additional file
-dependencies changes.
-
-Including header moc files in sources
-"""""""""""""""""""""""""""""""""""""
-
-A source file can include the ``moc`` output file of a header
-``<header_base>.<header_extension>`` by using an include statement of
-the form
-
-.. code-block:: c++
-
-  #include <moc_<header_base>.cpp> // or
-  #include "moc_<header_base>.cpp"
-
-If the ``moc`` output file of a header is included by a source, it will
-be generated in a different location than if it was not included.  This is
-described in the section `Output file location`_.
-
-
-Output file location
-^^^^^^^^^^^^^^^^^^^^
-
-Included moc output files
-"""""""""""""""""""""""""
-
-``moc`` output files that are included by a source file will be generated in
-
-- ``<AUTOGEN_BUILD_DIR>/include``
-  for single configuration generators or in
-- ``<AUTOGEN_BUILD_DIR>/include_<CONFIG>``
-  for :prop_gbl:`multi configuration <GENERATOR_IS_MULTI_CONFIG>` generators.
-
-Where ``<AUTOGEN_BUILD_DIR>`` is the value of the target property
-:prop_tgt:`AUTOGEN_BUILD_DIR`.
-
-The include directory is automatically added to the target's
-:prop_tgt:`INCLUDE_DIRECTORIES`.
-
-Not included moc output files
-"""""""""""""""""""""""""""""
-
-``moc`` output files that are not included in a source file will be generated
-in
-
-- ``<AUTOGEN_BUILD_DIR>/<SOURCE_DIR_CHECKSUM>``
-  for single configuration generators or in,
-- ``<AUTOGEN_BUILD_DIR>/include_<CONFIG>/<SOURCE_DIR_CHECKSUM>``
-  for :prop_gbl:`multi configuration <GENERATOR_IS_MULTI_CONFIG>` generators.
-
-Where ``<SOURCE_DIR_CHECKSUM>`` is a checksum computed from the relative
-parent directory path of the ``moc`` input file.  This scheme allows to have
-``moc`` input files with the same name in different directories.
-
-All not included ``moc`` output files will be included automatically by the
-CMake generated file
-
-- ``<AUTOGEN_BUILD_DIR>/mocs_compilation.cpp``,
-
-which is added to the target's sources.
-
-
-Qt version detection
-^^^^^^^^^^^^^^^^^^^^
-
-:prop_tgt:`AUTOMOC` enabled targets need to know the Qt major and minor
-version they're working with.  The major version usually is provided by the
-``INTERFACE_QT_MAJOR_VERSION`` property of the ``Qt[45]Core`` library,
-that the target links to.  To find the minor version, CMake builds a list of
-available Qt versions from
-
-- ``Qt5Core_VERSION_MAJOR`` and ``Qt5Core_VERSION_MINOR`` variables
-  (usually set by ``find_package(Qt5...)``)
-- ``Qt5Core_VERSION_MAJOR`` and ``Qt5Core_VERSION_MINOR`` directory properties
-- ``QT_VERSION_MAJOR`` and ``QT_VERSION_MINOR``  variables
-  (usually set by ``find_package(Qt4...)``)
-- ``QT_VERSION_MAJOR`` and ``QT_VERSION_MINOR``  directory properties
-
-in the context of the :command:`add_executable` or :command:`add_library` call.
-
-Assumed  ``INTERFACE_QT_MAJOR_VERSION`` is a valid number, the first
-entry in the list with a matching major version is taken.  If no matching major
-version was found, an error is generated.
-If  ``INTERFACE_QT_MAJOR_VERSION`` is not a valid number, the first
-entry in the list is taken.
-
-A ``find_package(Qt[45]...)`` call sets the ``QT/Qt5Core_VERSION_MAJOR/MINOR``
-variables.  If the call is in a different context than the
-:command:`add_executable` or :command:`add_library` call, e.g. in a function,
-then the version variables might not be available to the :prop_tgt:`AUTOMOC`
-enabled target.
-In that case the version variables can be forwarded from the
-``find_package(Qt[45]...)`` calling context to the :command:`add_executable`
-or :command:`add_library` calling context as directory properties.
-The following Qt5 example demonstrates the procedure.
-
-.. code-block:: cmake
-
-  function (add_qt5_client)
-    find_package(Qt5 REQUIRED QUIET COMPONENTS Core Widgets)
-    ...
-    set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
-      PROPERTY Qt5Core_VERSION_MAJOR "${Qt5Core_VERSION_MAJOR}")
-    set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
-      PROPERTY Qt5Core_VERSION_MINOR "${Qt5Core_VERSION_MAJOR}")
-    ...
-  endfunction ()
-  ...
-  add_qt5_client()
-  add_executable(myTarget main.cpp)
-  target_link_libraries(myTarget Qt5::QtWidgets)
-  set_property(TARGET myTarget PROPERTY AUTOMOC ON)
-
-
-Modifiers
-^^^^^^^^^
-
-:prop_tgt:`AUTOMOC_EXECUTABLE`:
-The ``moc`` executable will be detected automatically, but can be forced to
-a certain binary using this target property.
-
-:prop_tgt:`AUTOMOC_MOC_OPTIONS`:
-Additional command line options for ``moc`` can be set in this target property.
-
-:prop_tgt:`AUTOMOC_MACRO_NAMES`:
-This list of Qt macro names can be extended to search for additional macros in
-headers and sources.
-
-:prop_tgt:`AUTOMOC_DEPEND_FILTERS`:
-``moc`` dependency file names can be extracted from headers or sources by
-defining file name filters in this target property.
-
-:prop_tgt:`AUTOMOC_COMPILER_PREDEFINES`:
-Compiler pre definitions for ``moc`` are written to the ``moc_predefs.h`` file.
-The generation of this file can be enabled or disabled in this target property.
-
-:prop_sf:`SKIP_AUTOMOC`:
-Sources and headers can be excluded from :prop_tgt:`AUTOMOC` processing by
-setting this source file property.
-
-:prop_sf:`SKIP_AUTOGEN`:
-Source files can be excluded from :prop_tgt:`AUTOMOC`,
-:prop_tgt:`AUTOUIC` and :prop_tgt:`AUTORCC` processing by
-setting this source file property.
-
-:prop_gbl:`AUTOGEN_SOURCE_GROUP`:
-This global property can be used to group files generated by
-:prop_tgt:`AUTOMOC` or :prop_tgt:`AUTORCC` together in an IDE, e.g.  in MSVS.
-
-:prop_gbl:`AUTOGEN_TARGETS_FOLDER`:
-This global property can be used to group :prop_tgt:`AUTOMOC`,
-:prop_tgt:`AUTOUIC` and :prop_tgt:`AUTORCC` targets together in an IDE,
-e.g.  in MSVS.
-
-:variable:`CMAKE_GLOBAL_AUTOGEN_TARGET`:
-A global ``autogen`` target, that depends on all :prop_tgt:`AUTOMOC` or
-:prop_tgt:`AUTOUIC` generated ``<ORIGIN>_autogen`` targets in the project,
-will be generated when this variable is ``ON``.
-
-:prop_tgt:`AUTOGEN_PARALLEL`:
-This target property controls the number of ``moc`` or ``uic`` processes to
-start in parallel during builds.
-
-See the :manual:`cmake-qt(7)` manual for more information on using CMake
-with Qt.
diff --git a/share/cmake-3.18/Help/prop_tgt/AUTOMOC_COMPILER_PREDEFINES.rst b/share/cmake-3.18/Help/prop_tgt/AUTOMOC_COMPILER_PREDEFINES.rst
deleted file mode 100644
index 57a647f..0000000
--- a/share/cmake-3.18/Help/prop_tgt/AUTOMOC_COMPILER_PREDEFINES.rst
+++ /dev/null
@@ -1,24 +0,0 @@
-AUTOMOC_COMPILER_PREDEFINES
----------------------------
-
-Boolean value used by :prop_tgt:`AUTOMOC` to determine if the
-compiler pre definitions file ``moc_predefs.h`` should be generated.
-
-CMake generates a ``moc_predefs.h`` file with compiler pre definitions
-from the output of the command defined in
-:variable:`CMAKE_CXX_COMPILER_PREDEFINES_COMMAND <CMAKE_<LANG>_COMPILER_PREDEFINES_COMMAND>`
-when
-
-- :prop_tgt:`AUTOMOC` is enabled,
-- :prop_tgt:`AUTOMOC_COMPILER_PREDEFINES` is enabled,
-- :variable:`CMAKE_CXX_COMPILER_PREDEFINES_COMMAND <CMAKE_<LANG>_COMPILER_PREDEFINES_COMMAND>` isn't empty and
-- the Qt version is greater or equal 5.8.
-
-The ``moc_predefs.h`` file, which is generated in :prop_tgt:`AUTOGEN_BUILD_DIR`,
-is passed to ``moc`` as the argument to the ``--include`` option.
-
-By default :prop_tgt:`AUTOMOC_COMPILER_PREDEFINES` is initialized from
-:variable:`CMAKE_AUTOMOC_COMPILER_PREDEFINES`, which is ON by default.
-
-See the :manual:`cmake-qt(7)` manual for more information on using CMake
-with Qt.
diff --git a/share/cmake-3.18/Help/prop_tgt/AUTOMOC_DEPEND_FILTERS.rst b/share/cmake-3.18/Help/prop_tgt/AUTOMOC_DEPEND_FILTERS.rst
deleted file mode 100644
index 6eda26c..0000000
--- a/share/cmake-3.18/Help/prop_tgt/AUTOMOC_DEPEND_FILTERS.rst
+++ /dev/null
@@ -1,107 +0,0 @@
-AUTOMOC_DEPEND_FILTERS
-----------------------
-
-Filter definitions used by :prop_tgt:`AUTOMOC` to extract file names from a
-source file that are registered as additional dependencies for the
-``moc`` file of the source file.
-
-Filters are defined as ``KEYWORD;REGULAR_EXPRESSION`` pairs. First the file
-content is searched for ``KEYWORD``. If it is found at least once, then file
-names are extracted by successively searching for ``REGULAR_EXPRESSION`` and
-taking the first match group.
-
-The file name found in the first match group is searched for
-
-- first in the vicinity of the source file
-- and afterwards in the target's :prop_tgt:`INCLUDE_DIRECTORIES`.
-
-If any of the extracted files changes, then the ``moc`` file for the source
-file gets rebuilt even when the source file itself doesn't change.
-
-If any of the extracted files is :prop_sf:`GENERATED` or if it is not in the
-target's sources, then it might be necessary to add it to the
-``_autogen`` target  dependencies.
-See :prop_tgt:`AUTOGEN_TARGET_DEPENDS` for reference.
-
-By default :prop_tgt:`AUTOMOC_DEPEND_FILTERS` is initialized from
-:variable:`CMAKE_AUTOMOC_DEPEND_FILTERS`, which is empty by default.
-
-From Qt 5.15.0 on this variable is ignored as moc is able to output the correct
-dependencies.
-
-See the :manual:`cmake-qt(7)` manual for more information on using CMake
-with Qt.
-
-
-Example 1
-^^^^^^^^^
-
-A header file ``my_class.hpp`` uses a custom macro ``JSON_FILE_MACRO`` which
-is defined in an other header ``macros.hpp``.
-We want the ``moc`` file of ``my_class.hpp`` to depend on the file name
-argument of ``JSON_FILE_MACRO``::
-
-  // my_class.hpp
-  class My_Class : public QObject
-  {
-    Q_OBJECT
-    JSON_FILE_MACRO ( "info.json" )
-  ...
-  };
-
-In ``CMakeLists.txt`` we add a filter to
-:variable:`CMAKE_AUTOMOC_DEPEND_FILTERS` like this::
-
-  list( APPEND CMAKE_AUTOMOC_DEPEND_FILTERS
-    "JSON_FILE_MACRO"
-    "[\n][ \t]*JSON_FILE_MACRO[ \t]*\\([ \t]*\"([^\"]+)\""
-  )
-
-We assume ``info.json`` is a plain (not :prop_sf:`GENERATED`) file that is
-listed in the target's source.  Therefore we do not need to add it to
-:prop_tgt:`AUTOGEN_TARGET_DEPENDS`.
-
-Example 2
-^^^^^^^^^
-
-In the target ``my_target`` a header file ``complex_class.hpp`` uses a
-custom macro ``JSON_BASED_CLASS`` which is defined in an other header
-``macros.hpp``::
-
-  // macros.hpp
-  ...
-  #define JSON_BASED_CLASS(name, json) \
-  class name : public QObject \
-  { \
-    Q_OBJECT \
-    Q_PLUGIN_METADATA(IID "demo" FILE json) \
-    name() {} \
-  };
-  ...
-
-::
-
-  // complex_class.hpp
-  #pragma once
-  JSON_BASED_CLASS(Complex_Class, "meta.json")
-  // end of file
-
-Since ``complex_class.hpp`` doesn't contain a ``Q_OBJECT`` macro it would be
-ignored by :prop_tgt:`AUTOMOC`.  We change this by adding ``JSON_BASED_CLASS``
-to :variable:`CMAKE_AUTOMOC_MACRO_NAMES`::
-
-  list(APPEND CMAKE_AUTOMOC_MACRO_NAMES "JSON_BASED_CLASS")
-
-We want the ``moc`` file of ``complex_class.hpp`` to depend on
-``meta.json``.  So we add a filter to
-:variable:`CMAKE_AUTOMOC_DEPEND_FILTERS`::
-
-  list(APPEND CMAKE_AUTOMOC_DEPEND_FILTERS
-    "JSON_BASED_CLASS"
-    "[\n^][ \t]*JSON_BASED_CLASS[ \t]*\\([^,]*,[ \t]*\"([^\"]+)\""
-  )
-
-Additionally we assume ``meta.json`` is :prop_sf:`GENERATED` which is
-why we have to add it to :prop_tgt:`AUTOGEN_TARGET_DEPENDS`::
-
-  set_property(TARGET my_target APPEND PROPERTY AUTOGEN_TARGET_DEPENDS "meta.json")
diff --git a/share/cmake-3.18/Help/prop_tgt/AUTOMOC_EXECUTABLE.rst b/share/cmake-3.18/Help/prop_tgt/AUTOMOC_EXECUTABLE.rst
deleted file mode 100644
index 6b66ce8..0000000
--- a/share/cmake-3.18/Help/prop_tgt/AUTOMOC_EXECUTABLE.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-AUTOMOC_EXECUTABLE
-------------------
-
-:prop_tgt:`AUTOMOC_EXECUTABLE` is file path pointing to the ``moc``
-executable to use for :prop_tgt:`AUTOMOC` enabled files. Setting
-this property will make CMake skip the automatic detection of the
-``moc`` binary as well as the sanity-tests normally run to ensure
-that the binary is available and working as expected.
-
-Usually this property does not need to be set. Only consider this
-property if auto-detection of ``moc`` can not work -- e.g. because
-you are building the ``moc`` binary as part of your project.
-
-See the :manual:`cmake-qt(7)` manual for more information on using CMake
-with Qt.
diff --git a/share/cmake-3.18/Help/prop_tgt/AUTOMOC_MACRO_NAMES.rst b/share/cmake-3.18/Help/prop_tgt/AUTOMOC_MACRO_NAMES.rst
deleted file mode 100644
index 5329bba..0000000
--- a/share/cmake-3.18/Help/prop_tgt/AUTOMOC_MACRO_NAMES.rst
+++ /dev/null
@@ -1,32 +0,0 @@
-AUTOMOC_MACRO_NAMES
--------------------
-
-A :ref:`semicolon-separated list <CMake Language Lists>` list of macro names used by
-:prop_tgt:`AUTOMOC` to determine if a C++ file needs to be processed by ``moc``.
-
-This property is only used if the :prop_tgt:`AUTOMOC` property is ``ON``
-for this target.
-
-When running :prop_tgt:`AUTOMOC`, CMake searches for the strings listed in
-:prop_tgt:`AUTOMOC_MACRO_NAMES` in C++ source and header files.
-If any of the strings is found
-
-- as the first non space string on a new line or
-- as the first non space string after a ``{`` on a new line,
-
-then the file will be processed by ``moc``.
-
-By default :prop_tgt:`AUTOMOC_MACRO_NAMES` is initialized from
-:variable:`CMAKE_AUTOMOC_MACRO_NAMES`.
-
-See the :manual:`cmake-qt(7)` manual for more information on using CMake
-with Qt.
-
-Example
-^^^^^^^
-
-In this case the ``Q_OBJECT`` macro is hidden inside another macro
-called ``CUSTOM_MACRO``.  To let CMake know that source files that contain
-``CUSTOM_MACRO`` need to be ``moc`` processed, we call::
-
-  set_property(TARGET tgt APPEND PROPERTY AUTOMOC_MACRO_NAMES "CUSTOM_MACRO")
diff --git a/share/cmake-3.18/Help/prop_tgt/AUTOMOC_PATH_PREFIX.rst b/share/cmake-3.18/Help/prop_tgt/AUTOMOC_PATH_PREFIX.rst
deleted file mode 100644
index 3e3059d..0000000
--- a/share/cmake-3.18/Help/prop_tgt/AUTOMOC_PATH_PREFIX.rst
+++ /dev/null
@@ -1,32 +0,0 @@
-AUTOMOC_PATH_PREFIX
--------------------
-
-When this property is ``ON``, CMake will generate the ``-p`` path prefix
-option for ``moc`` on :prop_tgt:`AUTOMOC` enabled Qt targets.
-
-To generate the path prefix, CMake tests if the header compiled by ``moc``
-is in any of the target
-:command:`include directories <target_include_directories>`.  If so, CMake will
-compute the relative path accordingly.  If the header is not in the
-:command:`include directories <target_include_directories>`, CMake will omit
-the ``-p`` path prefix option.  ``moc`` usually generates a
-relative include path in that case.
-
-:prop_tgt:`AUTOMOC_PATH_PREFIX` is initialized from the variable
-:variable:`CMAKE_AUTOMOC_PATH_PREFIX`, which is ``ON`` by default.
-
-See the :manual:`cmake-qt(7)` manual for more information on using CMake
-with Qt.
-
-Reproducible builds
-^^^^^^^^^^^^^^^^^^^
-
-For reproducible builds it is recommended to keep headers that are ``moc``
-compiled in one of the target
-:command:`include directories <target_include_directories>` and set
-:prop_tgt:`AUTOMOC_PATH_PREFIX` to ``ON`` (which is the default).  This ensures
-that:
-
-- ``moc`` output files are identical on different build setups,
-- ``moc`` output files will compile correctly when the source and/or
-  build directory is a symbolic link.
diff --git a/share/cmake-3.18/Help/prop_tgt/AUTORCC.rst b/share/cmake-3.18/Help/prop_tgt/AUTORCC.rst
deleted file mode 100644
index 9a98f44..0000000
--- a/share/cmake-3.18/Help/prop_tgt/AUTORCC.rst
+++ /dev/null
@@ -1,62 +0,0 @@
-AUTORCC
--------
-
-Should the target be processed with auto-rcc (for Qt projects).
-
-:prop_tgt:`AUTORCC` is a boolean specifying whether CMake will handle
-the Qt ``rcc`` code generator automatically, i.e. without having to use
-the :module:`QT4_ADD_RESOURCES() <FindQt4>` or ``QT5_ADD_RESOURCES()``
-macro.  Currently Qt4 and Qt5 are supported.
-
-When this property is ``ON``, CMake will handle ``.qrc`` files added
-as target sources at build time and invoke ``rcc`` accordingly.
-This property is initialized by the value of the :variable:`CMAKE_AUTORCC`
-variable if it is set when a target is created.
-
-By default :prop_tgt:`AUTORCC` is processed by a
-:command:`custom command <add_custom_command>`.
-If the ``.qrc`` file is :prop_sf:`GENERATED`, a
-:command:`custom target <add_custom_target>` is used instead.
-
-When there are multiple ``.qrc`` files with the same name, CMake will
-generate unspecified unique output file names for ``rcc``.  Therefore, if
-``Q_INIT_RESOURCE()`` or ``Q_CLEANUP_RESOURCE()`` need to be used, the
-``.qrc`` file name must be unique.
-
-
-Modifiers
-^^^^^^^^^
-
-:prop_tgt:`AUTORCC_EXECUTABLE`:
-The ``rcc`` executable will be detected automatically, but can be forced to
-a certain binary by setting this target property.
-
-:prop_tgt:`AUTORCC_OPTIONS`:
-Additional command line options for ``rcc`` can be set via this target
-property.  The corresponding :prop_sf:`AUTORCC_OPTIONS` source file property
-can be used to specify options to be applied only to a specific ``.qrc`` file.
-
-:prop_sf:`SKIP_AUTORCC`:
-``.qrc`` files can be excluded from :prop_tgt:`AUTORCC` processing by
-setting this source file property.
-
-:prop_sf:`SKIP_AUTOGEN`:
-Source files can be excluded from :prop_tgt:`AUTOMOC`,
-:prop_tgt:`AUTOUIC` and :prop_tgt:`AUTORCC` processing by
-setting this source file property.
-
-:prop_gbl:`AUTOGEN_SOURCE_GROUP`:
-This global property can be used to group files generated by
-:prop_tgt:`AUTOMOC` or :prop_tgt:`AUTORCC` together in an IDE, e.g.  in MSVS.
-
-:prop_gbl:`AUTOGEN_TARGETS_FOLDER`:
-This global property can be used to group :prop_tgt:`AUTOMOC`,
-:prop_tgt:`AUTOUIC` and :prop_tgt:`AUTORCC` targets together in an IDE,
-e.g.  in MSVS.
-
-:variable:`CMAKE_GLOBAL_AUTORCC_TARGET`:
-A global ``autorcc`` target that depends on all :prop_tgt:`AUTORCC` targets
-in the project will be generated when this variable is ``ON``.
-
-See the :manual:`cmake-qt(7)` manual for more information on using CMake
-with Qt.
diff --git a/share/cmake-3.18/Help/prop_tgt/AUTORCC_EXECUTABLE.rst b/share/cmake-3.18/Help/prop_tgt/AUTORCC_EXECUTABLE.rst
deleted file mode 100644
index ca0fbd7..0000000
--- a/share/cmake-3.18/Help/prop_tgt/AUTORCC_EXECUTABLE.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-AUTORCC_EXECUTABLE
-------------------
-
-:prop_tgt:`AUTORCC_EXECUTABLE` is file path pointing to the ``rcc``
-executable to use for :prop_tgt:`AUTORCC` enabled files. Setting
-this property will make CMake skip the automatic detection of the
-``rcc`` binary as well as the sanity-tests normally run to ensure
-that the binary is available and working as expected.
-
-Usually this property does not need to be set. Only consider this
-property if auto-detection of ``rcc`` can not work -- e.g. because
-you are building the ``rcc`` binary as part of your project.
-
-See the :manual:`cmake-qt(7)` manual for more information on using CMake
-with Qt.
diff --git a/share/cmake-3.18/Help/prop_tgt/AUTOUIC.rst b/share/cmake-3.18/Help/prop_tgt/AUTOUIC.rst
deleted file mode 100644
index cd24f5e..0000000
--- a/share/cmake-3.18/Help/prop_tgt/AUTOUIC.rst
+++ /dev/null
@@ -1,85 +0,0 @@
-AUTOUIC
--------
-
-Should the target be processed with auto-uic (for Qt projects).
-
-:prop_tgt:`AUTOUIC` is a boolean specifying whether CMake will handle
-the Qt ``uic`` code generator automatically, i.e. without having to use
-the :module:`QT4_WRAP_UI() <FindQt4>` or ``QT5_WRAP_UI()`` macro. Currently
-Qt4 and Qt5 are supported.
-
-This property is initialized by the value of the :variable:`CMAKE_AUTOUIC`
-variable if it is set when a target is created.
-
-When this property is ``ON``, CMake will scan the header and source files at
-build time and invoke ``uic`` accordingly.
-
-
-Header and source file processing
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-At build time, CMake scans each header and source file from the
-target's sources for include statements of the form
-
-.. code-block:: c++
-
-  #include "ui_<ui_base>.h"
-
-Once such an include statement is found in a file, CMake searches for the
-``uic`` input file ``<ui_base>.ui``
-
-- in the vicinity of the file and
-- in the :prop_tgt:`AUTOUIC_SEARCH_PATHS` of the target.
-
-If the ``<ui_base>.ui`` file was found, ``uic`` is called on it to generate
-``ui_<ui_base>.h`` in the directory
-
-- ``<AUTOGEN_BUILD_DIR>/include`` for single configuration generators or in
-- ``<AUTOGEN_BUILD_DIR>/include_<CONFIG>`` for
-  :prop_gbl:`multi configuration <GENERATOR_IS_MULTI_CONFIG>` generators.
-
-Where ``<AUTOGEN_BUILD_DIR>`` is the value of the target property
-:prop_tgt:`AUTOGEN_BUILD_DIR`.
-
-The include directory is automatically added to the target's
-:prop_tgt:`INCLUDE_DIRECTORIES`.
-
-
-Modifiers
-^^^^^^^^^
-
-:prop_tgt:`AUTOUIC_EXECUTABLE`:
-The ``uic`` executable will be detected automatically, but can be forced to
-a certain binary using this target property.
-
-:prop_tgt:`AUTOUIC_OPTIONS`:
-Additional command line options for ``uic`` can be set via this target
-property.  The corresponding :prop_sf:`AUTOUIC_OPTIONS` source file property
-can be used to specify options to be applied only to a specific
-``<base_name>.ui`` file.
-
-:prop_sf:`SKIP_AUTOUIC`:
-Source files can be excluded from :prop_tgt:`AUTOUIC` processing by setting
-this source file property.
-
-:prop_sf:`SKIP_AUTOGEN`:
-Source files can be excluded from :prop_tgt:`AUTOMOC`,
-:prop_tgt:`AUTOUIC` and :prop_tgt:`AUTORCC` processing by
-setting this source file property.
-
-:prop_gbl:`AUTOGEN_TARGETS_FOLDER`:
-This global property can be used to group :prop_tgt:`AUTOMOC`,
-:prop_tgt:`AUTOUIC` and :prop_tgt:`AUTORCC` targets together in an IDE,
-e.g.  in MSVS.
-
-:variable:`CMAKE_GLOBAL_AUTOGEN_TARGET`:
-A global ``autogen`` target, that depends on all :prop_tgt:`AUTOMOC` or
-:prop_tgt:`AUTOUIC` generated ``<ORIGIN>_autogen`` targets in the project,
-will be generated when this variable is ``ON``.
-
-:prop_tgt:`AUTOGEN_PARALLEL`:
-This target property controls the number of ``moc`` or ``uic`` processes to
-start in parallel during builds.
-
-See the :manual:`cmake-qt(7)` manual for more information on using CMake
-with Qt.
diff --git a/share/cmake-3.18/Help/prop_tgt/AUTOUIC_EXECUTABLE.rst b/share/cmake-3.18/Help/prop_tgt/AUTOUIC_EXECUTABLE.rst
deleted file mode 100644
index 03bd554..0000000
--- a/share/cmake-3.18/Help/prop_tgt/AUTOUIC_EXECUTABLE.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-AUTOUIC_EXECUTABLE
-------------------
-
-:prop_tgt:`AUTOUIC_EXECUTABLE` is file path pointing to the ``uic``
-executable to use for :prop_tgt:`AUTOUIC` enabled files. Setting
-this property will make CMake skip the automatic detection of the
-``uic`` binary as well as the sanity-tests normally run to ensure
-that the binary is available and working as expected.
-
-Usually this property does not need to be set. Only consider this
-property if auto-detection of ``uic`` can not work -- e.g. because
-you are building the ``uic`` binary as part of your project.
-
-See the :manual:`cmake-qt(7)` manual for more information on using CMake
-with Qt.
diff --git a/share/cmake-3.18/Help/prop_tgt/AUTOUIC_SEARCH_PATHS.rst b/share/cmake-3.18/Help/prop_tgt/AUTOUIC_SEARCH_PATHS.rst
deleted file mode 100644
index 96d9f89..0000000
--- a/share/cmake-3.18/Help/prop_tgt/AUTOUIC_SEARCH_PATHS.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-AUTOUIC_SEARCH_PATHS
---------------------
-
-Search path list used by :prop_tgt:`AUTOUIC` to find included
-``.ui`` files.
-
-This property is initialized by the value of the
-:variable:`CMAKE_AUTOUIC_SEARCH_PATHS` variable if it is set
-when a target is created. Otherwise it is empty.
-
-See the :manual:`cmake-qt(7)` manual for more information on using CMake
-with Qt.
diff --git a/share/cmake-3.18/Help/prop_tgt/BINARY_DIR.rst b/share/cmake-3.18/Help/prop_tgt/BINARY_DIR.rst
deleted file mode 100644
index 246f7e6..0000000
--- a/share/cmake-3.18/Help/prop_tgt/BINARY_DIR.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-BINARY_DIR
-----------
-
-This read-only property reports the value of the
-:variable:`CMAKE_CURRENT_BINARY_DIR` variable in the directory in which
-the target was defined.
diff --git a/share/cmake-3.18/Help/prop_tgt/BUILD_RPATH.rst b/share/cmake-3.18/Help/prop_tgt/BUILD_RPATH.rst
deleted file mode 100644
index d978b94..0000000
--- a/share/cmake-3.18/Help/prop_tgt/BUILD_RPATH.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-BUILD_RPATH
------------
-
-A :ref:`semicolon-separated list <CMake Language Lists>` specifying runtime path (``RPATH``)
-entries to add to binaries linked in the build tree (for platforms that
-support it).  The entries will *not* be used for binaries in the install
-tree.  See also the :prop_tgt:`INSTALL_RPATH` target property.
-
-This property is initialized by the value of the variable
-:variable:`CMAKE_BUILD_RPATH` if it is set when a target is created.
-
-This property supports
-:manual:`generator expressions <cmake-generator-expressions(7)>`.
diff --git a/share/cmake-3.18/Help/prop_tgt/BUILD_RPATH_USE_ORIGIN.rst b/share/cmake-3.18/Help/prop_tgt/BUILD_RPATH_USE_ORIGIN.rst
deleted file mode 100644
index 3378797..0000000
--- a/share/cmake-3.18/Help/prop_tgt/BUILD_RPATH_USE_ORIGIN.rst
+++ /dev/null
@@ -1,24 +0,0 @@
-BUILD_RPATH_USE_ORIGIN
-----------------------
-
-Whether to use relative paths for the build ``RPATH``.
-
-This property is initialized by the value of the variable
-:variable:`CMAKE_BUILD_RPATH_USE_ORIGIN`.
-
-On platforms that support runtime paths (``RPATH``) with the
-``$ORIGIN`` token, setting this property to ``TRUE`` enables relative
-paths in the build ``RPATH`` for executables and shared libraries that
-point to shared libraries in the same build tree.
-
-Normally the build ``RPATH`` of a binary contains absolute paths
-to the directory of each shared library it links to.  The ``RPATH``
-entries for directories contained within the build tree can be made
-relative to enable relocatable builds and to help achieve reproducible
-builds by omitting the build directory from the build environment.
-
-This property has no effect on platforms that do not support the
-``$ORIGIN`` token in ``RPATH``, or when the :variable:`CMAKE_SKIP_RPATH`
-variable is set. The runtime path set through the
-:prop_tgt:`BUILD_RPATH` target property is also unaffected by this
-property.
diff --git a/share/cmake-3.18/Help/prop_tgt/BUILD_WITH_INSTALL_NAME_DIR.rst b/share/cmake-3.18/Help/prop_tgt/BUILD_WITH_INSTALL_NAME_DIR.rst
deleted file mode 100644
index bbb9a24..0000000
--- a/share/cmake-3.18/Help/prop_tgt/BUILD_WITH_INSTALL_NAME_DIR.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-BUILD_WITH_INSTALL_NAME_DIR
----------------------------
-
-``BUILD_WITH_INSTALL_NAME_DIR`` is a boolean specifying whether the macOS
-``install_name`` of a target in the build tree uses the directory given by
-:prop_tgt:`INSTALL_NAME_DIR`.  This setting only applies to targets on macOS.
-
-This property is initialized by the value of the variable
-:variable:`CMAKE_BUILD_WITH_INSTALL_NAME_DIR` if it is set when a target is
-created.
-
-If this property is not set and policy :policy:`CMP0068` is not ``NEW``, the
-value of :prop_tgt:`BUILD_WITH_INSTALL_RPATH` is used in its place.
diff --git a/share/cmake-3.18/Help/prop_tgt/COMMON_LANGUAGE_RUNTIME.rst b/share/cmake-3.18/Help/prop_tgt/COMMON_LANGUAGE_RUNTIME.rst
deleted file mode 100644
index 052ac6d..0000000
--- a/share/cmake-3.18/Help/prop_tgt/COMMON_LANGUAGE_RUNTIME.rst
+++ /dev/null
@@ -1,22 +0,0 @@
-COMMON_LANGUAGE_RUNTIME
------------------------
-
-By setting this target property, the target is configured to build with
-``C++/CLI`` support.
-
-The Visual Studio generator defines the ``clr`` parameter depending on
-the value of ``COMMON_LANGUAGE_RUNTIME``:
-
-* property not set: native C++ (i.e. default)
-* property set but empty: mixed unmanaged/managed C++
-* property set to any non empty value: managed C++
-
-Supported values: ``""``, ``"pure"``, ``"safe"``
-
-This property is only evaluated :ref:`Visual Studio Generators` for
-VS 2010 and above.
-
-To be able to build managed C++ targets with VS 2017 and above the component
-``C++/CLI support`` must be installed, which may not be done by default.
-
-See also :prop_tgt:`IMPORTED_COMMON_LANGUAGE_RUNTIME`
diff --git a/share/cmake-3.18/Help/prop_tgt/COMPILE_FEATURES.rst b/share/cmake-3.18/Help/prop_tgt/COMPILE_FEATURES.rst
deleted file mode 100644
index 46aec4f..0000000
--- a/share/cmake-3.18/Help/prop_tgt/COMPILE_FEATURES.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-COMPILE_FEATURES
-----------------
-
-Compiler features enabled for this target.
-
-The list of features in this property are a subset of the features listed
-in the :variable:`CMAKE_C_COMPILE_FEATURES`, :variable:`CMAKE_CUDA_COMPILE_FEATURES`, and
-:variable:`CMAKE_CXX_COMPILE_FEATURES` variables.
-
-Contents of ``COMPILE_FEATURES`` may use "generator expressions" with the
-syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)` manual for
-available expressions.  See the :manual:`cmake-compile-features(7)` manual
-for information on compile features and a list of supported compilers.
diff --git a/share/cmake-3.18/Help/prop_tgt/COMPILE_OPTIONS.rst b/share/cmake-3.18/Help/prop_tgt/COMPILE_OPTIONS.rst
deleted file mode 100644
index 0cd6836..0000000
--- a/share/cmake-3.18/Help/prop_tgt/COMPILE_OPTIONS.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-COMPILE_OPTIONS
----------------
-
-List of options to pass to the compiler.
-
-This property holds a :ref:`semicolon-separated list <CMake Language Lists>` of options
-specified so far for its target.  Use the :command:`target_compile_options`
-command to append more options.
-
-This property is initialized by the :prop_dir:`COMPILE_OPTIONS` directory
-property when a target is created, and is used by the generators to set
-the options for the compiler.
-
-Contents of ``COMPILE_OPTIONS`` may use "generator expressions" with the
-syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)` manual
-for available expressions.  See the :manual:`cmake-buildsystem(7)` manual
-for more on defining buildsystem properties.
diff --git a/share/cmake-3.18/Help/prop_tgt/COMPILE_PDB_NAME.rst b/share/cmake-3.18/Help/prop_tgt/COMPILE_PDB_NAME.rst
deleted file mode 100644
index 24a9f62..0000000
--- a/share/cmake-3.18/Help/prop_tgt/COMPILE_PDB_NAME.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-COMPILE_PDB_NAME
-----------------
-
-Output name for the MS debug symbol ``.pdb`` file generated by the
-compiler while building source files.
-
-This property specifies the base name for the debug symbols file.
-If not set, the default is unspecified.
-
-.. |PDB_XXX| replace:: :prop_tgt:`PDB_NAME`
-.. include:: COMPILE_PDB_NOTE.txt
diff --git a/share/cmake-3.18/Help/prop_tgt/COMPILE_PDB_NAME_CONFIG.rst b/share/cmake-3.18/Help/prop_tgt/COMPILE_PDB_NAME_CONFIG.rst
deleted file mode 100644
index e4077f5..0000000
--- a/share/cmake-3.18/Help/prop_tgt/COMPILE_PDB_NAME_CONFIG.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-COMPILE_PDB_NAME_<CONFIG>
--------------------------
-
-Per-configuration output name for the MS debug symbol ``.pdb`` file
-generated by the compiler while building source files.
-
-This is the configuration-specific version of :prop_tgt:`COMPILE_PDB_NAME`.
-
-.. |PDB_XXX| replace:: :prop_tgt:`PDB_NAME_<CONFIG>`
-.. include:: COMPILE_PDB_NOTE.txt
diff --git a/share/cmake-3.18/Help/prop_tgt/COMPILE_PDB_OUTPUT_DIRECTORY.rst b/share/cmake-3.18/Help/prop_tgt/COMPILE_PDB_OUTPUT_DIRECTORY.rst
deleted file mode 100644
index 34f49be..0000000
--- a/share/cmake-3.18/Help/prop_tgt/COMPILE_PDB_OUTPUT_DIRECTORY.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-COMPILE_PDB_OUTPUT_DIRECTORY
-----------------------------
-
-Output directory for the MS debug symbol ``.pdb`` file
-generated by the compiler while building source files.
-
-This property specifies the directory into which the MS debug symbols
-will be placed by the compiler.  This property is initialized by the
-value of the :variable:`CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY` variable
-if it is set when a target is created.
-
-.. |PDB_XXX| replace:: :prop_tgt:`PDB_OUTPUT_DIRECTORY`
-.. include:: COMPILE_PDB_NOTE.txt
diff --git a/share/cmake-3.18/Help/prop_tgt/COMPILE_PDB_OUTPUT_DIRECTORY_CONFIG.rst b/share/cmake-3.18/Help/prop_tgt/COMPILE_PDB_OUTPUT_DIRECTORY_CONFIG.rst
deleted file mode 100644
index f261756..0000000
--- a/share/cmake-3.18/Help/prop_tgt/COMPILE_PDB_OUTPUT_DIRECTORY_CONFIG.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-COMPILE_PDB_OUTPUT_DIRECTORY_<CONFIG>
--------------------------------------
-
-Per-configuration output directory for the MS debug symbol ``.pdb`` file
-generated by the compiler while building source files.
-
-This is a per-configuration version of
-:prop_tgt:`COMPILE_PDB_OUTPUT_DIRECTORY`,
-but multi-configuration generators (Visual Studio, Xcode) do NOT append a
-per-configuration subdirectory to the specified directory.  This
-property is initialized by the value of the
-:variable:`CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY_<CONFIG>` variable
-if it is set when a target is created.
-
-.. |PDB_XXX| replace:: :prop_tgt:`PDB_OUTPUT_DIRECTORY_<CONFIG>`
-.. include:: COMPILE_PDB_NOTE.txt
diff --git a/share/cmake-3.18/Help/prop_tgt/CROSSCOMPILING_EMULATOR.rst b/share/cmake-3.18/Help/prop_tgt/CROSSCOMPILING_EMULATOR.rst
deleted file mode 100644
index 87c5978..0000000
--- a/share/cmake-3.18/Help/prop_tgt/CROSSCOMPILING_EMULATOR.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-CROSSCOMPILING_EMULATOR
------------------------
-
-Use the given emulator to run executables created when crosscompiling.
-This command will be added as a prefix to :command:`add_test`,
-:command:`add_custom_command`, and :command:`add_custom_target` commands
-for built target system executables.
-
-If this property contains a :ref:`semicolon-separated list <CMake Language
-Lists>`, then the first value is the command and remaining values are its
-arguments.
-
-This property is initialized by the value of the
-:variable:`CMAKE_CROSSCOMPILING_EMULATOR` variable if it is set when a target
-is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/CUDA_ARCHITECTURES.rst b/share/cmake-3.18/Help/prop_tgt/CUDA_ARCHITECTURES.rst
deleted file mode 100644
index bae3c6f..0000000
--- a/share/cmake-3.18/Help/prop_tgt/CUDA_ARCHITECTURES.rst
+++ /dev/null
@@ -1,40 +0,0 @@
-CUDA_ARCHITECTURES
-------------------
-
-List of architectures to generate device code for.
-
-An architecture can be suffixed by either ``-real`` or ``-virtual`` to specify
-the kind of architecture to generate code for.
-If no suffix is given then code is generated for both real and virtual
-architectures.
-
-A non-empty false value (e.g. ``OFF``) disables adding architectures.
-This is intended to support packagers and rare cases where full control
-over the passed flags is required.
-
-This property is initialized by the value of the :variable:`CMAKE_CUDA_ARCHITECTURES`
-variable if it is set when a target is created.
-
-The ``CUDA_ARCHITECTURES`` target property must be set to a non-empty value on targets
-that compile CUDA sources, or it is an error.  See policy :policy:`CMP0104`.
-
-Examples
-^^^^^^^^
-
-.. code-block:: cmake
-
-  set_property(TARGET tgt PROPERTY CUDA_ARCHITECTURES 35 50 72)
-
-Generates code for real and virtual architectures ``30``, ``50`` and ``72``.
-
-.. code-block:: cmake
-
-  set_property(TARGET tgt PROPERTY CUDA_ARCHITECTURES 70-real 72-virtual)
-
-Generates code for real architecture ``70`` and virtual architecture ``72``.
-
-.. code-block:: cmake
-
-  set_property(TARGET tgt PROPERTY CUDA_ARCHITECTURES OFF)
-
-CMake will not pass any architecture flags to the compiler.
diff --git a/share/cmake-3.18/Help/prop_tgt/CUDA_EXTENSIONS.rst b/share/cmake-3.18/Help/prop_tgt/CUDA_EXTENSIONS.rst
deleted file mode 100644
index 098ca3c..0000000
--- a/share/cmake-3.18/Help/prop_tgt/CUDA_EXTENSIONS.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-CUDA_EXTENSIONS
----------------
-
-Boolean specifying whether compiler specific extensions are requested.
-
-This property specifies whether compiler specific extensions should be
-used.  For some compilers, this results in adding a flag such
-as ``-std=gnu++11`` instead of ``-std=c++11`` to the compile line.  This
-property is ``ON`` by default. The basic CUDA/C++ standard level is
-controlled by the :prop_tgt:`CUDA_STANDARD` target property.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
-
-This property is initialized by the value of
-the :variable:`CMAKE_CUDA_EXTENSIONS` variable if it is set when a target
-is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/CUDA_PTX_COMPILATION.rst b/share/cmake-3.18/Help/prop_tgt/CUDA_PTX_COMPILATION.rst
deleted file mode 100644
index 0ee372b..0000000
--- a/share/cmake-3.18/Help/prop_tgt/CUDA_PTX_COMPILATION.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-CUDA_PTX_COMPILATION
---------------------
-
-Compile CUDA sources to ``.ptx`` files instead of ``.obj`` files
-within :ref:`Object Libraries`.
-
-For example:
-
-.. code-block:: cmake
-
-  add_library(myptx OBJECT a.cu b.cu)
-  set_property(TARGET myptx PROPERTY CUDA_PTX_COMPILATION ON)
diff --git a/share/cmake-3.18/Help/prop_tgt/CUDA_RESOLVE_DEVICE_SYMBOLS.rst b/share/cmake-3.18/Help/prop_tgt/CUDA_RESOLVE_DEVICE_SYMBOLS.rst
deleted file mode 100644
index dae960f..0000000
--- a/share/cmake-3.18/Help/prop_tgt/CUDA_RESOLVE_DEVICE_SYMBOLS.rst
+++ /dev/null
@@ -1,25 +0,0 @@
-CUDA_RESOLVE_DEVICE_SYMBOLS
----------------------------
-
-CUDA only: Enables device linking for the specific library target where
-required.
-
-If set, this will tell the required compilers to enable device linking
-on the library target. Device linking is an additional link step
-required by some CUDA compilers when :prop_tgt:`CUDA_SEPARABLE_COMPILATION` is
-enabled. Normally device linking is deferred until a shared library or
-executable is generated, allowing for multiple static libraries to resolve
-device symbols at the same time when they are used by a shared library or
-executable.
-
-By default static library targets have this property is disabled,
-while shared, module, and executable targets have this property enabled.
-
-Note that device linking is not supported for :ref:`Object Libraries`.
-
-
-For instance:
-
-.. code-block:: cmake
-
-  set_property(TARGET mystaticlib PROPERTY CUDA_RESOLVE_DEVICE_SYMBOLS ON)
diff --git a/share/cmake-3.18/Help/prop_tgt/CUDA_RUNTIME_LIBRARY.rst b/share/cmake-3.18/Help/prop_tgt/CUDA_RUNTIME_LIBRARY.rst
deleted file mode 100644
index 11b344c..0000000
--- a/share/cmake-3.18/Help/prop_tgt/CUDA_RUNTIME_LIBRARY.rst
+++ /dev/null
@@ -1,21 +0,0 @@
-CUDA_RUNTIME_LIBRARY
---------------------
-
-Select the CUDA runtime library for use by compilers targeting the CUDA language.
-
-The allowed case insensitive values are:
-
-.. include:: CUDA_RUNTIME_LIBRARY-VALUES.txt
-
-Contents of ``CUDA_RUNTIME_LIBRARY`` may use
-:manual:`generator expressions <cmake-generator-expressions(7)>`.
-
-If that property is not set then CMake uses an appropriate default
-value based on the compiler to select the CUDA runtime library.
-
-.. note::
-
-  This property has effect only when the ``CUDA`` language is enabled. To
-  control the CUDA runtime linking when only using the CUDA SDK with the
-  ``C`` or ``C++`` language we recommend using the :module:`FindCUDAToolkit`
-  module.
diff --git a/share/cmake-3.18/Help/prop_tgt/CUDA_SEPARABLE_COMPILATION.rst b/share/cmake-3.18/Help/prop_tgt/CUDA_SEPARABLE_COMPILATION.rst
deleted file mode 100644
index d306d7f..0000000
--- a/share/cmake-3.18/Help/prop_tgt/CUDA_SEPARABLE_COMPILATION.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-CUDA_SEPARABLE_COMPILATION
---------------------------
-
-CUDA only: Enables separate compilation of device code
-
-If set this will enable separable compilation for all CUDA files for
-the given target.
-
-For instance:
-
-.. code-block:: cmake
-
-  set_property(TARGET myexe PROPERTY CUDA_SEPARABLE_COMPILATION ON)
-
-This property is initialized by the value of the
-:variable:`CMAKE_CUDA_SEPARABLE_COMPILATION` variable if it is set when a
-target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/CUDA_STANDARD.rst b/share/cmake-3.18/Help/prop_tgt/CUDA_STANDARD.rst
deleted file mode 100644
index 6d6774e..0000000
--- a/share/cmake-3.18/Help/prop_tgt/CUDA_STANDARD.rst
+++ /dev/null
@@ -1,32 +0,0 @@
-CUDA_STANDARD
--------------
-
-The CUDA/C++ standard whose features are requested to build this target.
-
-This property specifies the CUDA/C++ standard whose features are requested
-to build this target.  For some compilers, this results in adding a
-flag such as ``-std=gnu++11`` to the compile line.
-
-Supported values are ``98``, ``03``, ``11``, ``14``, ``17``, ``20``.
-
-If the value requested does not result in a compile flag being added for
-the compiler in use, a previous standard flag will be added instead.  This
-means that using:
-
-.. code-block:: cmake
-
-  set_property(TARGET tgt PROPERTY CUDA_STANDARD 11)
-
-with a compiler which does not support ``-std=gnu++11`` or an equivalent
-flag will not result in an error or warning, but will instead add the
-``-std=gnu++98`` flag if supported.  This "decay" behavior may be controlled
-with the :prop_tgt:`CUDA_STANDARD_REQUIRED` target property.
-Additionally, the :prop_tgt:`CUDA_EXTENSIONS` target property may be used to
-control whether compiler-specific extensions are enabled on a per-target basis.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
-
-This property is initialized by the value of
-the :variable:`CMAKE_CUDA_STANDARD` variable if it is set when a target
-is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/CUDA_STANDARD_REQUIRED.rst b/share/cmake-3.18/Help/prop_tgt/CUDA_STANDARD_REQUIRED.rst
deleted file mode 100644
index b2d5b28..0000000
--- a/share/cmake-3.18/Help/prop_tgt/CUDA_STANDARD_REQUIRED.rst
+++ /dev/null
@@ -1,18 +0,0 @@
-CUDA_STANDARD_REQUIRED
-----------------------
-
-Boolean describing whether the value of :prop_tgt:`CUDA_STANDARD` is a requirement.
-
-If this property is set to ``ON``, then the value of the
-:prop_tgt:`CUDA_STANDARD` target property is treated as a requirement.  If this
-property is ``OFF`` or unset, the :prop_tgt:`CUDA_STANDARD` target property is
-treated as optional and may "decay" to a previous standard if the requested is
-not available.  For compilers that have no notion of a standard level, such as
-MSVC, this has no effect.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
-
-This property is initialized by the value of
-the :variable:`CMAKE_CUDA_STANDARD_REQUIRED` variable if it is set when a
-target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/CXX_EXTENSIONS.rst b/share/cmake-3.18/Help/prop_tgt/CXX_EXTENSIONS.rst
deleted file mode 100644
index 280bb3a..0000000
--- a/share/cmake-3.18/Help/prop_tgt/CXX_EXTENSIONS.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-CXX_EXTENSIONS
---------------
-
-Boolean specifying whether compiler specific extensions are requested.
-
-This property specifies whether compiler specific extensions should be
-used.  For some compilers, this results in adding a flag such
-as ``-std=gnu++11`` instead of ``-std=c++11`` to the compile line.  This
-property is ``ON`` by default. The basic C++ standard level is
-controlled by the :prop_tgt:`CXX_STANDARD` target property.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
-
-This property is initialized by the value of
-the :variable:`CMAKE_CXX_EXTENSIONS` variable if it is set when a target
-is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/CXX_STANDARD.rst b/share/cmake-3.18/Help/prop_tgt/CXX_STANDARD.rst
deleted file mode 100644
index ccc0147..0000000
--- a/share/cmake-3.18/Help/prop_tgt/CXX_STANDARD.rst
+++ /dev/null
@@ -1,34 +0,0 @@
-CXX_STANDARD
-------------
-
-The C++ standard whose features are requested to build this target.
-
-This property specifies the C++ standard whose features are requested
-to build this target.  For some compilers, this results in adding a
-flag such as ``-std=gnu++11`` to the compile line.  For compilers that
-have no notion of a standard level, such as Microsoft Visual C++ before
-2015 Update 3, this has no effect.
-
-Supported values are ``98``, ``11``, ``14``, ``17``, and ``20``.
-
-If the value requested does not result in a compile flag being added for
-the compiler in use, a previous standard flag will be added instead.  This
-means that using:
-
-.. code-block:: cmake
-
-  set_property(TARGET tgt PROPERTY CXX_STANDARD 11)
-
-with a compiler which does not support ``-std=gnu++11`` or an equivalent
-flag will not result in an error or warning, but will instead add the
-``-std=gnu++98`` flag if supported.  This "decay" behavior may be controlled
-with the :prop_tgt:`CXX_STANDARD_REQUIRED` target property.
-Additionally, the :prop_tgt:`CXX_EXTENSIONS` target property may be used to
-control whether compiler-specific extensions are enabled on a per-target basis.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
-
-This property is initialized by the value of
-the :variable:`CMAKE_CXX_STANDARD` variable if it is set when a target
-is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/CXX_STANDARD_REQUIRED.rst b/share/cmake-3.18/Help/prop_tgt/CXX_STANDARD_REQUIRED.rst
deleted file mode 100644
index 697d7f6..0000000
--- a/share/cmake-3.18/Help/prop_tgt/CXX_STANDARD_REQUIRED.rst
+++ /dev/null
@@ -1,18 +0,0 @@
-CXX_STANDARD_REQUIRED
----------------------
-
-Boolean describing whether the value of :prop_tgt:`CXX_STANDARD` is a requirement.
-
-If this property is set to ``ON``, then the value of the
-:prop_tgt:`CXX_STANDARD` target property is treated as a requirement.  If this
-property is ``OFF`` or unset, the :prop_tgt:`CXX_STANDARD` target property is
-treated as optional and may "decay" to a previous standard if the requested is
-not available.  For compilers that have no notion of a standard level, such as
-MSVC, this has no effect.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
-
-This property is initialized by the value of
-the :variable:`CMAKE_CXX_STANDARD_REQUIRED` variable if it is set when a
-target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/C_EXTENSIONS.rst b/share/cmake-3.18/Help/prop_tgt/C_EXTENSIONS.rst
deleted file mode 100644
index 05b14ce..0000000
--- a/share/cmake-3.18/Help/prop_tgt/C_EXTENSIONS.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-C_EXTENSIONS
-------------
-
-Boolean specifying whether compiler specific extensions are requested.
-
-This property specifies whether compiler specific extensions should be
-used.  For some compilers, this results in adding a flag such
-as ``-std=gnu11`` instead of ``-std=c11`` to the compile line.  This
-property is ``ON`` by default. The basic C standard level is
-controlled by the :prop_tgt:`C_STANDARD` target property.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
-
-This property is initialized by the value of
-the :variable:`CMAKE_C_EXTENSIONS` variable if it is set when a target
-is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/C_STANDARD.rst b/share/cmake-3.18/Help/prop_tgt/C_STANDARD.rst
deleted file mode 100644
index 6a05139..0000000
--- a/share/cmake-3.18/Help/prop_tgt/C_STANDARD.rst
+++ /dev/null
@@ -1,34 +0,0 @@
-C_STANDARD
-----------
-
-The C standard whose features are requested to build this target.
-
-This property specifies the C standard whose features are requested
-to build this target.  For some compilers, this results in adding a
-flag such as ``-std=gnu11`` to the compile line.  For compilers that
-have no notion of a C standard level, such as all versions of
-MSVC known as of this version of CMake, this has no effect.
-
-Supported values are ``90``, ``99`` and ``11``.
-
-If the value requested does not result in a compile flag being added for
-the compiler in use, a previous standard flag will be added instead.  This
-means that using:
-
-.. code-block:: cmake
-
-  set_property(TARGET tgt PROPERTY C_STANDARD 11)
-
-with a compiler which does not support ``-std=gnu11`` or an equivalent
-flag will not result in an error or warning, but will instead add the
-``-std=gnu99`` or ``-std=gnu90`` flag if supported.  This "decay" behavior may
-be controlled with the :prop_tgt:`C_STANDARD_REQUIRED` target property.
-Additionally, the :prop_tgt:`C_EXTENSIONS` target property may be used to
-control whether compiler-specific extensions are enabled on a per-target basis.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
-
-This property is initialized by the value of
-the :variable:`CMAKE_C_STANDARD` variable if it is set when a target
-is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/C_STANDARD_REQUIRED.rst b/share/cmake-3.18/Help/prop_tgt/C_STANDARD_REQUIRED.rst
deleted file mode 100644
index acfad98..0000000
--- a/share/cmake-3.18/Help/prop_tgt/C_STANDARD_REQUIRED.rst
+++ /dev/null
@@ -1,18 +0,0 @@
-C_STANDARD_REQUIRED
--------------------
-
-Boolean describing whether the value of :prop_tgt:`C_STANDARD` is a requirement.
-
-If this property is set to ``ON``, then the value of the
-:prop_tgt:`C_STANDARD` target property is treated as a requirement.  If this
-property is ``OFF`` or unset, the :prop_tgt:`C_STANDARD` target property is
-treated as optional and may "decay" to a previous standard if the requested is
-not available.  For compilers that have no notion of a standard level, such as
-MSVC, this has no effect.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
-
-This property is initialized by the value of
-the :variable:`CMAKE_C_STANDARD_REQUIRED` variable if it is set when a
-target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/DEBUG_POSTFIX.rst b/share/cmake-3.18/Help/prop_tgt/DEBUG_POSTFIX.rst
deleted file mode 100644
index 04e312e..0000000
--- a/share/cmake-3.18/Help/prop_tgt/DEBUG_POSTFIX.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-DEBUG_POSTFIX
--------------
-
-See target property ``<CONFIG>_POSTFIX``.
-
-This property is a special case of the more-general ``<CONFIG>_POSTFIX``
-property for the ``DEBUG`` configuration.
diff --git a/share/cmake-3.18/Help/prop_tgt/DEPLOYMENT_ADDITIONAL_FILES.rst b/share/cmake-3.18/Help/prop_tgt/DEPLOYMENT_ADDITIONAL_FILES.rst
deleted file mode 100644
index 5e9c191..0000000
--- a/share/cmake-3.18/Help/prop_tgt/DEPLOYMENT_ADDITIONAL_FILES.rst
+++ /dev/null
@@ -1,18 +0,0 @@
-DEPLOYMENT_ADDITIONAL_FILES
----------------------------
-
-Set the WinCE project ``AdditionalFiles`` in ``DeploymentTool`` in ``.vcproj``
-files generated by the :generator:`Visual Studio 9 2008` generator.
-This is useful when you want to debug on remote WinCE device.
-Specify additional files that will be copied to the device.
-For example:
-
-.. code-block:: cmake
-
-  set_property(TARGET ${TARGET} PROPERTY
-    DEPLOYMENT_ADDITIONAL_FILES "english.lng|local_folder|remote_folder|0"
-    "german.lng|local_folder|remote_folder|0")
-
-produces::
-
-  <DeploymentTool AdditionalFiles="english.lng|local_folder|remote_folder|0;german.lng|local_folder|remote_folder|0" ... />
diff --git a/share/cmake-3.18/Help/prop_tgt/DEPLOYMENT_REMOTE_DIRECTORY.rst b/share/cmake-3.18/Help/prop_tgt/DEPLOYMENT_REMOTE_DIRECTORY.rst
deleted file mode 100644
index 368768a..0000000
--- a/share/cmake-3.18/Help/prop_tgt/DEPLOYMENT_REMOTE_DIRECTORY.rst
+++ /dev/null
@@ -1,18 +0,0 @@
-DEPLOYMENT_REMOTE_DIRECTORY
----------------------------
-
-Set the WinCE project ``RemoteDirectory`` in ``DeploymentTool`` and
-``RemoteExecutable`` in ``DebuggerTool`` in ``.vcproj`` files generated
-by the :generator:`Visual Studio 9 2008` generator.
-This is useful when you want to debug on remote WinCE device.
-For example:
-
-.. code-block:: cmake
-
-  set_property(TARGET ${TARGET} PROPERTY
-    DEPLOYMENT_REMOTE_DIRECTORY "\\FlashStorage")
-
-produces::
-
-  <DeploymentTool RemoteDirectory="\FlashStorage" ... />
-  <DebuggerTool RemoteExecutable="\FlashStorage\target_file" ... />
diff --git a/share/cmake-3.18/Help/prop_tgt/DEPRECATION.rst b/share/cmake-3.18/Help/prop_tgt/DEPRECATION.rst
deleted file mode 100644
index fef2e2e..0000000
--- a/share/cmake-3.18/Help/prop_tgt/DEPRECATION.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-DEPRECATION
------------
-
-Deprecation message from imported target's developer.
-
-``DEPRECATION`` is the message regarding a deprecation status to be displayed
-to downstream users of a target.
diff --git a/share/cmake-3.18/Help/prop_tgt/DISABLE_PRECOMPILE_HEADERS.rst b/share/cmake-3.18/Help/prop_tgt/DISABLE_PRECOMPILE_HEADERS.rst
deleted file mode 100644
index 4cef023..0000000
--- a/share/cmake-3.18/Help/prop_tgt/DISABLE_PRECOMPILE_HEADERS.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-DISABLE_PRECOMPILE_HEADERS
---------------------------
-
-Disables the precompilation of header files specified by
-:prop_tgt:`PRECOMPILE_HEADERS` property.
-
-If the property is not set, CMake will use the value provided
-by :variable:`CMAKE_DISABLE_PRECOMPILE_HEADERS`.
diff --git a/share/cmake-3.18/Help/prop_tgt/DOTNET_TARGET_FRAMEWORK.rst b/share/cmake-3.18/Help/prop_tgt/DOTNET_TARGET_FRAMEWORK.rst
deleted file mode 100644
index 8698eb6..0000000
--- a/share/cmake-3.18/Help/prop_tgt/DOTNET_TARGET_FRAMEWORK.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-DOTNET_TARGET_FRAMEWORK
------------------------
-
-Specify the .NET target framework.
-
-Used to specify the .NET target framework for C++/CLI and C#.  For
-example: ``netcoreapp2.1``.
-
-This property is only evaluated for :ref:`Visual Studio Generators`
-VS 2010 and above.
-
-Can be initialized for all targets using the variable
-:variable:`CMAKE_DOTNET_TARGET_FRAMEWORK`.
diff --git a/share/cmake-3.18/Help/prop_tgt/DOTNET_TARGET_FRAMEWORK_VERSION.rst b/share/cmake-3.18/Help/prop_tgt/DOTNET_TARGET_FRAMEWORK_VERSION.rst
deleted file mode 100644
index b33f4fb..0000000
--- a/share/cmake-3.18/Help/prop_tgt/DOTNET_TARGET_FRAMEWORK_VERSION.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-DOTNET_TARGET_FRAMEWORK_VERSION
--------------------------------
-
-Specify the .NET target framework version.
-
-Used to specify the .NET target framework version for C++/CLI and C#.
-For example: ``v4.5``.
-
-This property is only evaluated for :ref:`Visual Studio Generators`
-VS 2010 and above.
-
-To initialize this variable for all targets set
-:variable:`CMAKE_DOTNET_TARGET_FRAMEWORK` or
-:variable:`CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION`. If both are set,
-the latter is ignored.
diff --git a/share/cmake-3.18/Help/prop_tgt/EXCLUDE_FROM_ALL.rst b/share/cmake-3.18/Help/prop_tgt/EXCLUDE_FROM_ALL.rst
deleted file mode 100644
index c9ece22..0000000
--- a/share/cmake-3.18/Help/prop_tgt/EXCLUDE_FROM_ALL.rst
+++ /dev/null
@@ -1,21 +0,0 @@
-EXCLUDE_FROM_ALL
-----------------
-
-Set this target property to a true (or false) value to exclude (or include)
-the target from the "all" target of the containing directory and its
-ancestors.  If excluded, running e.g. ``make`` in the containing directory
-or its ancestors will not build the target by default.
-
-If this target property is not set then the target will be included in
-the "all" target of the containing directory.  Furthermore, it will be
-included in the "all" target of its ancestor directories unless the
-:prop_dir:`EXCLUDE_FROM_ALL` directory property is set.
-
-With ``EXCLUDE_FROM_ALL`` set to false or not set at all, the target
-will be brought up to date as part of doing a ``make install`` or its
-equivalent for the CMake generator being used.
-
-If a target has ``EXCLUDE_FROM_ALL`` set to true, it may still be listed
-in an :command:`install(TARGETS)` command, but the user is responsible for
-ensuring that the target's build artifacts are not missing or outdated when
-an install is performed.
diff --git a/share/cmake-3.18/Help/prop_tgt/EXPORT_PROPERTIES.rst b/share/cmake-3.18/Help/prop_tgt/EXPORT_PROPERTIES.rst
deleted file mode 100644
index bcf47a6..0000000
--- a/share/cmake-3.18/Help/prop_tgt/EXPORT_PROPERTIES.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-EXPORT_PROPERTIES
------------------
-
-List additional properties to export for a target.
-
-This property contains a list of property names that should be exported by
-the :command:`install(EXPORT)` and :command:`export` commands.  By default
-only a limited number of properties are exported. This property can be used
-to additionally export other properties as well.
-
-Properties starting with ``INTERFACE_`` or ``IMPORTED_`` are not allowed as
-they are reserved for internal CMake use.
-
-Properties containing generator expressions are also not allowed.
diff --git a/share/cmake-3.18/Help/prop_tgt/FRAMEWORK_MULTI_CONFIG_POSTFIX_CONFIG.rst b/share/cmake-3.18/Help/prop_tgt/FRAMEWORK_MULTI_CONFIG_POSTFIX_CONFIG.rst
deleted file mode 100644
index 243c0cd..0000000
--- a/share/cmake-3.18/Help/prop_tgt/FRAMEWORK_MULTI_CONFIG_POSTFIX_CONFIG.rst
+++ /dev/null
@@ -1,26 +0,0 @@
-FRAMEWORK_MULTI_CONFIG_POSTFIX_<CONFIG>
----------------------------------------
-
-Postfix to append to the framework file name for configuration ``<CONFIG>``,
-when using a multi-config generator (like Xcode and Ninja Multi-Config).
-
-When building with configuration ``<CONFIG>`` the value of this property
-is appended to the framework file name built on disk.
-
-For example, given a framework called ``my_fw``, a value of ``_debug``
-for the ``FRAMEWORK_MULTI_CONFIG_POSTFIX_DEBUG`` property, and
-``Debug;Release`` in :variable:`CMAKE_CONFIGURATION_TYPES`, the following
-relevant files would be created for the ``Debug`` and ``Release``
-configurations:
-
-- ``Release/my_fw.framework/my_fw``
-- ``Release/my_fw.framework/Versions/A/my_fw``
-- ``Debug/my_fw.framework/my_fw_debug``
-- ``Debug/my_fw.framework/Versions/A/my_fw_debug``
-
-For framework targets, this property is initialized by the value of the
-:variable:`CMAKE_FRAMEWORK_MULTI_CONFIG_POSTFIX_<CONFIG>` variable if it
-is set when a target is created.
-
-This property is ignored for non-framework targets, and when using single
-config generators.
diff --git a/share/cmake-3.18/Help/prop_tgt/FRAMEWORK_VERSION.rst b/share/cmake-3.18/Help/prop_tgt/FRAMEWORK_VERSION.rst
deleted file mode 100644
index c2ae7b9..0000000
--- a/share/cmake-3.18/Help/prop_tgt/FRAMEWORK_VERSION.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-FRAMEWORK_VERSION
------------------
-
-Version of a framework created using the :prop_tgt:`FRAMEWORK` target
-property (e.g. ``A``).
-
-This property only affects macOS, as iOS doesn't have versioned
-directory structure.
diff --git a/share/cmake-3.18/Help/prop_tgt/Fortran_MODULE_DIRECTORY.rst b/share/cmake-3.18/Help/prop_tgt/Fortran_MODULE_DIRECTORY.rst
deleted file mode 100644
index e061863..0000000
--- a/share/cmake-3.18/Help/prop_tgt/Fortran_MODULE_DIRECTORY.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-Fortran_MODULE_DIRECTORY
-------------------------
-
-Specify output directory for Fortran modules provided by the target.
-
-If the target contains Fortran source files that provide modules and
-the compiler supports a module output directory this specifies the
-directory in which the modules will be placed.  When this property is
-not set the modules will be placed in the build directory
-corresponding to the target's source directory.  If the variable
-:variable:`CMAKE_Fortran_MODULE_DIRECTORY` is set when a target is created its
-value is used to initialize this property.
-
-Note that some compilers will automatically search the module output
-directory for modules USEd during compilation but others will not.  If
-your sources USE modules their location must be specified by
-:prop_tgt:`INCLUDE_DIRECTORIES` regardless of this property.
diff --git a/share/cmake-3.18/Help/prop_tgt/Fortran_PREPROCESS.rst b/share/cmake-3.18/Help/prop_tgt/Fortran_PREPROCESS.rst
deleted file mode 100644
index 47a15c0..0000000
--- a/share/cmake-3.18/Help/prop_tgt/Fortran_PREPROCESS.rst
+++ /dev/null
@@ -1,23 +0,0 @@
-Fortran_PREPROCESS
-------------------
-
-Control whether the Fortran source file should be unconditionally
-preprocessed.
-
-If unset or empty, rely on the compiler to determine whether the file
-should be preprocessed. If explicitly set to ``OFF`` then the file does not
-need to be preprocessed. If explicitly set to ``ON``, then the file does
-need to be preprocessed as part of the compilation step.
-
-When using the :generator:`Ninja` generator, all source files are
-first preprocessed in order to generate module dependency
-information. Setting this property to ``OFF`` will make ``Ninja``
-skip this step.
-
-Use the source-specific :prop_sf:`Fortran_PREPROCESS` property if a single
-file needs to be preprocessed. If the variable
-:variable:`CMAKE_Fortran_PREPROCESS` is set when a target is created its
-value is used to initialize this property.
-
-.. note:: For some compilers, ``NAG``, ``PGI`` and ``Solaris Studio``,
-          setting this to ``OFF`` will have no effect.
diff --git a/share/cmake-3.18/Help/prop_tgt/GHS_INTEGRITY_APP.rst b/share/cmake-3.18/Help/prop_tgt/GHS_INTEGRITY_APP.rst
deleted file mode 100644
index b669781..0000000
--- a/share/cmake-3.18/Help/prop_tgt/GHS_INTEGRITY_APP.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-GHS_INTEGRITY_APP
------------------
-
-``ON`` / ``OFF`` boolean to determine if an executable target should
-be treated as an `Integrity Application`.
-
-If no value is set and if a ``.int`` file is added as a source file to the
-executable target it will be treated as an `Integrity Application`.
-
-Supported on :generator:`Green Hills MULTI`.
diff --git a/share/cmake-3.18/Help/prop_tgt/GHS_NO_SOURCE_GROUP_FILE.rst b/share/cmake-3.18/Help/prop_tgt/GHS_NO_SOURCE_GROUP_FILE.rst
deleted file mode 100644
index 11ce0b2..0000000
--- a/share/cmake-3.18/Help/prop_tgt/GHS_NO_SOURCE_GROUP_FILE.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-GHS_NO_SOURCE_GROUP_FILE
-------------------------
-
-``ON`` / ``OFF`` boolean to control if the project file for a target should
-be one single file or multiple files.
-
-The default behavior or when the property is ``OFF`` is to generate a project
-file for the target and then a sub-project file for each source group.
-
-When this property is ``ON`` or if :variable:`CMAKE_GHS_NO_SOURCE_GROUP_FILE`
-is ``ON`` then only a single project file is generated for the target.
-
-Supported on :generator:`Green Hills MULTI`.
diff --git a/share/cmake-3.18/Help/prop_tgt/IMPLICIT_DEPENDS_INCLUDE_TRANSFORM.rst b/share/cmake-3.18/Help/prop_tgt/IMPLICIT_DEPENDS_INCLUDE_TRANSFORM.rst
deleted file mode 100644
index dc73807..0000000
--- a/share/cmake-3.18/Help/prop_tgt/IMPLICIT_DEPENDS_INCLUDE_TRANSFORM.rst
+++ /dev/null
@@ -1,32 +0,0 @@
-IMPLICIT_DEPENDS_INCLUDE_TRANSFORM
-----------------------------------
-
-Specify #include line transforms for dependencies in a target.
-
-This property specifies rules to transform macro-like #include lines
-during implicit dependency scanning of C and C++ source files.  The
-list of rules must be semicolon-separated with each entry of the form
-"A_MACRO(%)=value-with-%" (the % must be literal).  During dependency
-scanning occurrences of A_MACRO(...) on #include lines will be
-replaced by the value given with the macro argument substituted for
-'%'.  For example, the entry
-
-::
-
-  MYDIR(%)=<mydir/%>
-
-will convert lines of the form
-
-::
-
-  #include MYDIR(myheader.h)
-
-to
-
-::
-
-  #include <mydir/myheader.h>
-
-allowing the dependency to be followed.
-
-This property applies to sources in the target on which it is set.
diff --git a/share/cmake-3.18/Help/prop_tgt/IMPORTED_COMMON_LANGUAGE_RUNTIME.rst b/share/cmake-3.18/Help/prop_tgt/IMPORTED_COMMON_LANGUAGE_RUNTIME.rst
deleted file mode 100644
index 99e3bc4..0000000
--- a/share/cmake-3.18/Help/prop_tgt/IMPORTED_COMMON_LANGUAGE_RUNTIME.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-IMPORTED_COMMON_LANGUAGE_RUNTIME
---------------------------------
-
-Property to define if the target uses ``C++/CLI``.
-
-Ignored for non-imported targets.
-
-See also the :prop_tgt:`COMMON_LANGUAGE_RUNTIME` target property.
diff --git a/share/cmake-3.18/Help/prop_tgt/IMPORTED_GLOBAL.rst b/share/cmake-3.18/Help/prop_tgt/IMPORTED_GLOBAL.rst
deleted file mode 100644
index 1a9129f..0000000
--- a/share/cmake-3.18/Help/prop_tgt/IMPORTED_GLOBAL.rst
+++ /dev/null
@@ -1,30 +0,0 @@
-IMPORTED_GLOBAL
----------------
-
-Indication of whether an :ref:`IMPORTED target <Imported Targets>` is
-globally visible.
-
-The boolean value of this property is True for targets created with the
-``IMPORTED`` ``GLOBAL`` options to :command:`add_executable()` or
-:command:`add_library()`. It is always False for targets built within the
-project.
-
-For targets created with the ``IMPORTED`` option to
-:command:`add_executable()` or :command:`add_library()` but without the
-additional option ``GLOBAL`` this is False, too. However, setting this
-property for such a locally ``IMPORTED`` target to True promotes that
-target to global scope. This promotion can only be done in the same
-directory where that ``IMPORTED`` target was created in the first place.
-
-.. note::
-
-  Once an imported target has been made global, it cannot be changed back to
-  non-global. Therefore, if a project sets this property, it may only
-  provide a value of True. CMake will issue an error if the project tries to
-  set the property to a non-True value, even if the value was already False.
-
-.. note::
-
-  Local :ref:`ALIAS targets <Alias Targets>` created before promoting an
-  :ref:`IMPORTED target <Imported Targets>` from ``LOCAL`` to ``GLOBAL``, keep
-  their initial scope (see :prop_tgt:`ALIAS_GLOBAL` target property).
diff --git a/share/cmake-3.18/Help/prop_tgt/IMPORTED_LIBNAME.rst b/share/cmake-3.18/Help/prop_tgt/IMPORTED_LIBNAME.rst
deleted file mode 100644
index 1943dba..0000000
--- a/share/cmake-3.18/Help/prop_tgt/IMPORTED_LIBNAME.rst
+++ /dev/null
@@ -1,23 +0,0 @@
-IMPORTED_LIBNAME
-----------------
-
-Specify the link library name for an :ref:`imported <Imported Targets>`
-:ref:`Interface Library <Interface Libraries>`.
-
-An interface library builds no library file itself but does specify
-usage requirements for its consumers.  The ``IMPORTED_LIBNAME``
-property may be set to specify a single library name to be placed
-on the link line in place of the interface library target name as
-a requirement for using the interface.
-
-This property is intended for use in naming libraries provided by
-a platform SDK for which the full path to a library file may not
-be known.  The value may be a plain library name such as ``foo``
-but may *not* be a path (e.g. ``/usr/lib/libfoo.so``) or a flag
-(e.g. ``-Wl,...``).  The name is never treated as a library target
-name even if it happens to name one.
-
-The ``IMPORTED_LIBNAME`` property is allowed only on
-:ref:`imported <Imported Targets>` :ref:`Interface Libraries`
-and is rejected on targets of other types (for which
-the :prop_tgt:`IMPORTED_LOCATION` target property may be used).
diff --git a/share/cmake-3.18/Help/prop_tgt/IMPORTED_LIBNAME_CONFIG.rst b/share/cmake-3.18/Help/prop_tgt/IMPORTED_LIBNAME_CONFIG.rst
deleted file mode 100644
index a28b838..0000000
--- a/share/cmake-3.18/Help/prop_tgt/IMPORTED_LIBNAME_CONFIG.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-IMPORTED_LIBNAME_<CONFIG>
--------------------------
-
-<CONFIG>-specific version of :prop_tgt:`IMPORTED_LIBNAME` property.
-
-Configuration names correspond to those provided by the project from
-which the target is imported.
diff --git a/share/cmake-3.18/Help/prop_tgt/IMPORTED_LOCATION.rst b/share/cmake-3.18/Help/prop_tgt/IMPORTED_LOCATION.rst
deleted file mode 100644
index f0a1646..0000000
--- a/share/cmake-3.18/Help/prop_tgt/IMPORTED_LOCATION.rst
+++ /dev/null
@@ -1,31 +0,0 @@
-IMPORTED_LOCATION
------------------
-
-Full path to the main file on disk for an ``IMPORTED`` target.
-
-Set this to the location of an ``IMPORTED`` target file on disk.  For
-executables this is the location of the executable file.  For bundles
-on macOS this is the location of the executable file inside
-``Contents/MacOS`` under the application bundle folder.  For ``STATIC``
-libraries and modules this is the location of the library or module.
-For ``SHARED`` libraries on non-DLL platforms this is the location of the
-shared library.  For frameworks on macOS this is the location of the
-library file symlink just inside the framework folder.  For DLLs this
-is the location of the ``.dll`` part of the library.  For ``UNKNOWN``
-libraries this is the location of the file to be linked.  Ignored for
-non-imported targets.
-
-The ``IMPORTED_LOCATION`` target property may be overridden for a
-given configuration ``<CONFIG>`` by the configuration-specific
-:prop_tgt:`IMPORTED_LOCATION_<CONFIG>` target property.  Furthermore,
-the :prop_tgt:`MAP_IMPORTED_CONFIG_<CONFIG>` target property may be
-used to map between a project's configurations and those of an imported
-target.  If none of these is set then the name of any other configuration
-listed in the :prop_tgt:`IMPORTED_CONFIGURATIONS` target property may be
-selected and its :prop_tgt:`IMPORTED_LOCATION_<CONFIG>` value used.
-
-To get the location of an imported target read one of the :prop_tgt:`LOCATION`
-or ``LOCATION_<CONFIG>`` properties.
-
-For platforms with import libraries (e.g. Windows) see also
-:prop_tgt:`IMPORTED_IMPLIB`.
diff --git a/share/cmake-3.18/Help/prop_tgt/IMPORTED_OBJECTS.rst b/share/cmake-3.18/Help/prop_tgt/IMPORTED_OBJECTS.rst
deleted file mode 100644
index 50a329f..0000000
--- a/share/cmake-3.18/Help/prop_tgt/IMPORTED_OBJECTS.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-IMPORTED_OBJECTS
-----------------
-
-A :ref:`semicolon-separated list <CMake Language Lists>` of absolute paths to the object
-files on disk for an :ref:`imported <Imported targets>`
-:ref:`object library <object libraries>`.
-
-Ignored for non-imported targets.
-
-Projects may skip ``IMPORTED_OBJECTS`` if the configuration-specific
-property :prop_tgt:`IMPORTED_OBJECTS_<CONFIG>` is set instead.
diff --git a/share/cmake-3.18/Help/prop_tgt/IMPORTED_OBJECTS_CONFIG.rst b/share/cmake-3.18/Help/prop_tgt/IMPORTED_OBJECTS_CONFIG.rst
deleted file mode 100644
index 4419ed1..0000000
--- a/share/cmake-3.18/Help/prop_tgt/IMPORTED_OBJECTS_CONFIG.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-IMPORTED_OBJECTS_<CONFIG>
--------------------------
-
-<CONFIG>-specific version of :prop_tgt:`IMPORTED_OBJECTS` property.
-
-Configuration names correspond to those provided by the project from
-which the target is imported.
diff --git a/share/cmake-3.18/Help/prop_tgt/INSTALL_NAME_DIR.rst b/share/cmake-3.18/Help/prop_tgt/INSTALL_NAME_DIR.rst
deleted file mode 100644
index 747615a..0000000
--- a/share/cmake-3.18/Help/prop_tgt/INSTALL_NAME_DIR.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-INSTALL_NAME_DIR
-----------------
-
-macOS directory name for installed targets.
-
-``INSTALL_NAME_DIR`` is a string specifying the directory portion of the
-"install_name" field of shared libraries on macOS to use in the
-installed targets.
-
-This property is initialized by the value of the variable
-:variable:`CMAKE_INSTALL_NAME_DIR` if it is set when a target is
-created.
-
-This property supports :manual:`generator expressions <cmake-generator-expressions(7)>`.
-In particular, the ``$<INSTALL_PREFIX>`` generator expression can be used to set the
-directory relative to the install-time prefix.
diff --git a/share/cmake-3.18/Help/prop_tgt/INSTALL_REMOVE_ENVIRONMENT_RPATH.rst b/share/cmake-3.18/Help/prop_tgt/INSTALL_REMOVE_ENVIRONMENT_RPATH.rst
deleted file mode 100644
index 72dcaa0..0000000
--- a/share/cmake-3.18/Help/prop_tgt/INSTALL_REMOVE_ENVIRONMENT_RPATH.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-INSTALL_REMOVE_ENVIRONMENT_RPATH
---------------------------------
-
-Controls whether toolchain-defined rpaths should be removed during installation.
-
-When a target is being installed, CMake may need to rewrite its rpath
-information.  This occurs when the install rpath (as specified by the
-:prop_tgt:`INSTALL_RPATH` target property) has different contents to the rpath
-that the target was built with.  Some toolchains insert their own rpath
-contents into the binary as part of the build.  By default, CMake will
-preserve those extra inserted contents in the install rpath.  For those
-scenarios where such toolchain-inserted entries need to be discarded during
-install, set the ``INSTALL_REMOVE_ENVIRONMENT_RPATH`` target property to true.
-
-This property is initialized by the value of
-:variable:`CMAKE_INSTALL_REMOVE_ENVIRONMENT_RPATH` when the target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/INTERFACE_COMPILE_FEATURES.rst b/share/cmake-3.18/Help/prop_tgt/INTERFACE_COMPILE_FEATURES.rst
deleted file mode 100644
index 31b594f..0000000
--- a/share/cmake-3.18/Help/prop_tgt/INTERFACE_COMPILE_FEATURES.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-INTERFACE_COMPILE_FEATURES
---------------------------
-
-.. |property_name| replace:: compile features
-.. |command_name| replace:: :command:`target_compile_features`
-.. |PROPERTY_INTERFACE_NAME| replace:: ``INTERFACE_COMPILE_FEATURES``
-.. |PROPERTY_LINK| replace:: :prop_tgt:`COMPILE_FEATURES`
-.. |PROPERTY_GENEX| replace:: ``$<TARGET_PROPERTY:foo,INTERFACE_COMPILE_FEATURES>``
-.. include:: INTERFACE_BUILD_PROPERTY.txt
-
-See the :manual:`cmake-compile-features(7)` manual for information on compile
-features and a list of supported compilers.
diff --git a/share/cmake-3.18/Help/prop_tgt/INTERFACE_LINK_DEPENDS.rst b/share/cmake-3.18/Help/prop_tgt/INTERFACE_LINK_DEPENDS.rst
deleted file mode 100644
index 790554d..0000000
--- a/share/cmake-3.18/Help/prop_tgt/INTERFACE_LINK_DEPENDS.rst
+++ /dev/null
@@ -1,32 +0,0 @@
-INTERFACE_LINK_DEPENDS
-----------------------
-
-Additional public interface files on which a target binary depends for linking.
-
-This property is supported only by :generator:`Ninja` and
-:ref:`Makefile Generators`.
-It is intended to specify dependencies on "linker scripts" for
-custom Makefile link rules.
-
-When target dependencies are specified using :command:`target_link_libraries`,
-CMake will read this property from all target dependencies to determine the
-build properties of the consumer.
-
-Contents of ``INTERFACE_LINK_DEPENDS`` may use "generator expressions"
-with the syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)`
-manual for available expressions.  See the :manual:`cmake-buildsystem(7)`
--manual for more on defining buildsystem properties.
-
-Link dependency files usage requirements commonly differ between the build-tree
-and the install-tree.  The ``BUILD_INTERFACE`` and ``INSTALL_INTERFACE``
-generator expressions can be used to describe separate usage requirements
-based on the usage location.  Relative paths are allowed within the
-``INSTALL_INTERFACE`` expression and are interpreted relative to the
-installation prefix.  For example:
-
-.. code-block:: cmake
-
-  set_property(TARGET mylib PROPERTY INTERFACE_LINK_DEPENDS
-    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/mylinkscript>
-    $<INSTALL_INTERFACE:mylinkscript>  # <prefix>/mylinkscript
-  )
diff --git a/share/cmake-3.18/Help/prop_tgt/INTERFACE_LINK_DIRECTORIES.rst b/share/cmake-3.18/Help/prop_tgt/INTERFACE_LINK_DIRECTORIES.rst
deleted file mode 100644
index 56a4ec0..0000000
--- a/share/cmake-3.18/Help/prop_tgt/INTERFACE_LINK_DIRECTORIES.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-INTERFACE_LINK_DIRECTORIES
---------------------------
-
-.. |property_name| replace:: link directories
-.. |command_name| replace:: :command:`target_link_directories`
-.. |PROPERTY_INTERFACE_NAME| replace:: ``INTERFACE_LINK_DIRECTORIES``
-.. |PROPERTY_LINK| replace:: :prop_tgt:`LINK_DIRECTORIES`
-.. |PROPERTY_GENEX| replace:: ``$<TARGET_PROPERTY:foo,INTERFACE_LINK_DIRECTORIES>``
-.. include:: INTERFACE_BUILD_PROPERTY.txt
diff --git a/share/cmake-3.18/Help/prop_tgt/INTERFACE_LINK_OPTIONS.rst b/share/cmake-3.18/Help/prop_tgt/INTERFACE_LINK_OPTIONS.rst
deleted file mode 100644
index c293b98..0000000
--- a/share/cmake-3.18/Help/prop_tgt/INTERFACE_LINK_OPTIONS.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-INTERFACE_LINK_OPTIONS
-----------------------
-
-.. |property_name| replace:: link options
-.. |command_name| replace:: :command:`target_link_options`
-.. |PROPERTY_INTERFACE_NAME| replace:: ``INTERFACE_LINK_OPTIONS``
-.. |PROPERTY_LINK| replace:: :prop_tgt:`LINK_OPTIONS`
-.. |PROPERTY_GENEX| replace:: ``$<TARGET_PROPERTY:foo,INTERFACE_LINK_OPTIONS>``
-.. include:: INTERFACE_BUILD_PROPERTY.txt
diff --git a/share/cmake-3.18/Help/prop_tgt/INTERFACE_PRECOMPILE_HEADERS.rst b/share/cmake-3.18/Help/prop_tgt/INTERFACE_PRECOMPILE_HEADERS.rst
deleted file mode 100644
index e285407..0000000
--- a/share/cmake-3.18/Help/prop_tgt/INTERFACE_PRECOMPILE_HEADERS.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-INTERFACE_PRECOMPILE_HEADERS
-----------------------------
-
-List of interface header files to precompile into consuming targets.
-
-Targets may populate this property to publish the header files
-for consuming targets to precompile.  The :command:`target_precompile_headers`
-command populates this property with values given to the ``PUBLIC`` and
-``INTERFACE`` keywords.  Projects may also get and set the property directly.
-See the discussion in :command:`target_precompile_headers` for guidance on
-appropriate use of this property for installed or exported targets.
-
-Contents of ``INTERFACE_PRECOMPILE_HEADERS`` may use "generator expressions"
-with the syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)`
-manual for available expressions.  See the :manual:`cmake-buildsystem(7)`
-manual for more on defining buildsystem properties.
diff --git a/share/cmake-3.18/Help/prop_tgt/INTERFACE_SOURCES.rst b/share/cmake-3.18/Help/prop_tgt/INTERFACE_SOURCES.rst
deleted file mode 100644
index a224b68..0000000
--- a/share/cmake-3.18/Help/prop_tgt/INTERFACE_SOURCES.rst
+++ /dev/null
@@ -1,18 +0,0 @@
-INTERFACE_SOURCES
------------------
-
-List of interface sources to compile into consuming targets.
-
-Targets may populate this property to publish the sources
-for consuming targets to compile.  The :command:`target_sources` command
-populates this property with values given to the ``PUBLIC`` and
-``INTERFACE`` keywords.  Projects may also get and set the property directly.
-
-When target dependencies are specified using :command:`target_link_libraries`,
-CMake will read this property from all target dependencies to determine the
-sources of the consumer.
-
-Contents of ``INTERFACE_SOURCES`` may use "generator expressions"
-with the syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)`
-manual for available expressions.  See the :manual:`cmake-buildsystem(7)`
-manual for more on defining buildsystem properties.
diff --git a/share/cmake-3.18/Help/prop_tgt/IOS_INSTALL_COMBINED.rst b/share/cmake-3.18/Help/prop_tgt/IOS_INSTALL_COMBINED.rst
deleted file mode 100644
index 59f67a7..0000000
--- a/share/cmake-3.18/Help/prop_tgt/IOS_INSTALL_COMBINED.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-IOS_INSTALL_COMBINED
---------------------
-
-Build a combined (device and simulator) target when installing.
-
-When this property is set to set to false (which is the default) then it will
-either be built with the device SDK or the simulator SDK depending on the SDK
-set. But if this property is set to true then the target will at install time
-also be built for the corresponding SDK and combined into one library.
-
-This feature requires at least Xcode version 6.
diff --git a/share/cmake-3.18/Help/prop_tgt/JOB_POOL_PRECOMPILE_HEADER.rst b/share/cmake-3.18/Help/prop_tgt/JOB_POOL_PRECOMPILE_HEADER.rst
deleted file mode 100644
index ece28a4..0000000
--- a/share/cmake-3.18/Help/prop_tgt/JOB_POOL_PRECOMPILE_HEADER.rst
+++ /dev/null
@@ -1,21 +0,0 @@
-JOB_POOL_PRECOMPILE_HEADER
---------------------------
-
-Ninja only: Pool used for generating pre-compiled headers.
-
-The number of parallel compile processes could be limited by defining
-pools with the global :prop_gbl:`JOB_POOLS`
-property and then specifying here the pool name.
-
-For instance:
-
-.. code-block:: cmake
-
-  set_property(TARGET myexe PROPERTY JOB_POOL_PRECOMPILE_HEADER two_jobs)
-
-This property is initialized by the value of
-:variable:`CMAKE_JOB_POOL_PRECOMPILE_HEADER`.
-
-If neither :prop_tgt:`JOB_POOL_PRECOMPILE_HEADER` nor
-:variable:`CMAKE_JOB_POOL_PRECOMPILE_HEADER` are set then
-:prop_tgt:`JOB_POOL_COMPILE` will be used for this task.
diff --git a/share/cmake-3.18/Help/prop_tgt/LANG_CLANG_TIDY.rst b/share/cmake-3.18/Help/prop_tgt/LANG_CLANG_TIDY.rst
deleted file mode 100644
index 2bfef66..0000000
--- a/share/cmake-3.18/Help/prop_tgt/LANG_CLANG_TIDY.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-<LANG>_CLANG_TIDY
------------------
-
-This property is implemented only when ``<LANG>`` is ``C`` or ``CXX``.
-
-Specify a :ref:`semicolon-separated list <CMake Language Lists>` containing a command
-line for the ``clang-tidy`` tool.  The :ref:`Makefile Generators`
-and the :generator:`Ninja` generator will run this tool along with the
-compiler and report a warning if the tool reports any problems.
-
-This property is initialized by the value of
-the :variable:`CMAKE_<LANG>_CLANG_TIDY` variable if it is set
-when a target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/LANG_COMPILER_LAUNCHER.rst b/share/cmake-3.18/Help/prop_tgt/LANG_COMPILER_LAUNCHER.rst
deleted file mode 100644
index a6f2b24..0000000
--- a/share/cmake-3.18/Help/prop_tgt/LANG_COMPILER_LAUNCHER.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-<LANG>_COMPILER_LAUNCHER
-------------------------
-
-This property is implemented only when ``<LANG>`` is ``C``, ``CXX``,
-``Fortran``, ``OBJC``, ``OBJCXX``, or ``CUDA``.
-
-Specify a :ref:`semicolon-separated list <CMake Language Lists>` containing a command line
-for a compiler launching tool. The :ref:`Makefile Generators` and the
-:generator:`Ninja` generator will run this tool and pass the compiler and
-its arguments to the tool. Some example tools are distcc and ccache.
-
-This property is initialized by the value of
-the :variable:`CMAKE_<LANG>_COMPILER_LAUNCHER` variable if it is set
-when a target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/LANG_CPPCHECK.rst b/share/cmake-3.18/Help/prop_tgt/LANG_CPPCHECK.rst
deleted file mode 100644
index 60785d0..0000000
--- a/share/cmake-3.18/Help/prop_tgt/LANG_CPPCHECK.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-<LANG>_CPPCHECK
----------------
-
-This property is supported only when ``<LANG>`` is ``C`` or ``CXX``.
-
-Specify a :ref:`semicolon-separated list <CMake Language Lists>` containing a command line
-for the ``cppcheck`` static analysis tool.  The :ref:`Makefile Generators`
-and the :generator:`Ninja` generator will run ``cppcheck`` along with the
-compiler and report any problems.  If the command-line specifies the
-exit code options to ``cppcheck`` then the build  will fail if the
-tool returns non-zero.
-
-This property is initialized by the value of the
-:variable:`CMAKE_<LANG>_CPPCHECK` variable if it is set when a target is
-created.
diff --git a/share/cmake-3.18/Help/prop_tgt/LANG_CPPLINT.rst b/share/cmake-3.18/Help/prop_tgt/LANG_CPPLINT.rst
deleted file mode 100644
index 9944c88..0000000
--- a/share/cmake-3.18/Help/prop_tgt/LANG_CPPLINT.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-<LANG>_CPPLINT
---------------
-
-This property is supported only when ``<LANG>`` is ``C`` or ``CXX``.
-
-Specify a :ref:`semicolon-separated list <CMake Language Lists>` containing a command line
-for the ``cpplint`` style checker.  The :ref:`Makefile Generators` and the
-:generator:`Ninja` generator will run ``cpplint`` along with the compiler
-and report any problems.
-
-This property is initialized by the value of the
-:variable:`CMAKE_<LANG>_CPPLINT` variable if it is set when a target is
-created.
diff --git a/share/cmake-3.18/Help/prop_tgt/LANG_INCLUDE_WHAT_YOU_USE.rst b/share/cmake-3.18/Help/prop_tgt/LANG_INCLUDE_WHAT_YOU_USE.rst
deleted file mode 100644
index 35220e4..0000000
--- a/share/cmake-3.18/Help/prop_tgt/LANG_INCLUDE_WHAT_YOU_USE.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-<LANG>_INCLUDE_WHAT_YOU_USE
----------------------------
-
-This property is implemented only when ``<LANG>`` is ``C`` or ``CXX``.
-
-Specify a :ref:`semicolon-separated list <CMake Language Lists>` containing a command
-line for the ``include-what-you-use`` tool.  The :ref:`Makefile Generators`
-and the :generator:`Ninja` generator will run this tool along with the
-compiler and report a warning if the tool reports any problems.
-
-This property is initialized by the value of
-the :variable:`CMAKE_<LANG>_INCLUDE_WHAT_YOU_USE` variable if it is set
-when a target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/LIBRARY_OUTPUT_DIRECTORY.rst b/share/cmake-3.18/Help/prop_tgt/LIBRARY_OUTPUT_DIRECTORY.rst
deleted file mode 100644
index 785a57b..0000000
--- a/share/cmake-3.18/Help/prop_tgt/LIBRARY_OUTPUT_DIRECTORY.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-LIBRARY_OUTPUT_DIRECTORY
-------------------------
-
-.. |XXX| replace:: :ref:`LIBRARY <Library Output Artifacts>`
-.. |xxx| replace:: library
-.. |CMAKE_XXX_OUTPUT_DIRECTORY| replace:: CMAKE_LIBRARY_OUTPUT_DIRECTORY
-.. include:: XXX_OUTPUT_DIRECTORY.txt
-
-See also the :prop_tgt:`LIBRARY_OUTPUT_DIRECTORY_<CONFIG>` target property.
diff --git a/share/cmake-3.18/Help/prop_tgt/LINK_DEPENDS_NO_SHARED.rst b/share/cmake-3.18/Help/prop_tgt/LINK_DEPENDS_NO_SHARED.rst
deleted file mode 100644
index 5c6778d..0000000
--- a/share/cmake-3.18/Help/prop_tgt/LINK_DEPENDS_NO_SHARED.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-LINK_DEPENDS_NO_SHARED
-----------------------
-
-Do not depend on linked shared library files.
-
-Set this property to true to tell CMake generators not to add
-file-level dependencies on the shared library files linked by this
-target.  Modification to the shared libraries will not be sufficient
-to re-link this target.  Logical target-level dependencies will not be
-affected so the linked shared libraries will still be brought up to
-date before this target is built.
-
-This property is initialized by the value of the variable
-CMAKE_LINK_DEPENDS_NO_SHARED if it is set when a target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/LINK_DIRECTORIES.rst b/share/cmake-3.18/Help/prop_tgt/LINK_DIRECTORIES.rst
deleted file mode 100644
index c2905b3..0000000
--- a/share/cmake-3.18/Help/prop_tgt/LINK_DIRECTORIES.rst
+++ /dev/null
@@ -1,18 +0,0 @@
-LINK_DIRECTORIES
-----------------
-
-List of directories to use for the link step of shared library, module
-and executable targets.
-
-This property holds a :ref:`semicolon-separated list <CMake Language Lists>` of directories
-specified so far for its target.  Use the :command:`target_link_directories`
-command to append more search directories.
-
-This property is initialized by the :prop_dir:`LINK_DIRECTORIES` directory
-property when a target is created, and is used by the generators to set
-the search directories for the linker.
-
-Contents of ``LINK_DIRECTORIES`` may use "generator expressions" with the
-syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)` manual
-for available expressions.  See the :manual:`cmake-buildsystem(7)` manual
-for more on defining buildsystem properties.
diff --git a/share/cmake-3.18/Help/prop_tgt/LINK_OPTIONS.rst b/share/cmake-3.18/Help/prop_tgt/LINK_OPTIONS.rst
deleted file mode 100644
index ff3ee87..0000000
--- a/share/cmake-3.18/Help/prop_tgt/LINK_OPTIONS.rst
+++ /dev/null
@@ -1,28 +0,0 @@
-LINK_OPTIONS
-------------
-
-List of options to use for the link step of shared library, module
-and executable targets as well as the device link step. Targets that are static
-libraries need to use the :prop_tgt:`STATIC_LIBRARY_OPTIONS` target property.
-
-These options are used for both normal linking and device linking
-(see policy :policy:`CMP0105`). To control link options for normal and device
-link steps, ``$<HOST_LINK>`` and ``$<DEVICE_LINK>``
-:manual:`generator expressions <cmake-generator-expressions(7)>` can be used.
-
-This property holds a :ref:`semicolon-separated list <CMake Language Lists>` of
-options specified so far for its target.  Use the :command:`target_link_options`
-command to append more options.
-
-This property is initialized by the :prop_dir:`LINK_OPTIONS` directory
-property when a target is created, and is used by the generators to set
-the options for the compiler.
-
-Contents of ``LINK_OPTIONS`` may use "generator expressions" with the
-syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)` manual
-for available expressions.  See the :manual:`cmake-buildsystem(7)` manual
-for more on defining buildsystem properties.
-
-.. note::
-
-  This property must be used in preference to :prop_tgt:`LINK_FLAGS` property.
diff --git a/share/cmake-3.18/Help/prop_tgt/LINK_WHAT_YOU_USE.rst b/share/cmake-3.18/Help/prop_tgt/LINK_WHAT_YOU_USE.rst
deleted file mode 100644
index 32d6edb..0000000
--- a/share/cmake-3.18/Help/prop_tgt/LINK_WHAT_YOU_USE.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-LINK_WHAT_YOU_USE
----------------------------
-
-This is a boolean option that when set to ``TRUE`` will automatically run
-``ldd -r -u`` on the target after it is linked. In addition, the linker flag
-``-Wl,--no-as-needed`` will be passed to the target with the link command so
-that all libraries specified on the command line will be linked into the
-target. This will result in the link producing a list of libraries that
-provide no symbols used by this target but are being linked to it.
-This is only applicable to executable and shared library targets and
-will only work when ld and ldd accept the flags used.
-
-This property is initialized by the value of
-the :variable:`CMAKE_LINK_WHAT_YOU_USE` variable if it is set
-when a target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/MACHO_COMPATIBILITY_VERSION.rst b/share/cmake-3.18/Help/prop_tgt/MACHO_COMPATIBILITY_VERSION.rst
deleted file mode 100644
index 26d5cc8..0000000
--- a/share/cmake-3.18/Help/prop_tgt/MACHO_COMPATIBILITY_VERSION.rst
+++ /dev/null
@@ -1,25 +0,0 @@
-MACHO_COMPATIBILITY_VERSION
----------------------------
-
-What compatibility version number is this target for Mach-O binaries.
-
-For shared libraries on Mach-O systems (e.g. macOS, iOS)
-the ``MACHO_COMPATIBILITY_VERSION`` property corresponds to the
-*compatibility version* and :prop_tgt:`MACHO_CURRENT_VERSION` corresponds to
-the *current version*.  These are both embedded in the shared library binary
-and can be checked with the ``otool -L <binary>`` command.
-
-It should be noted that the :prop_tgt:`MACHO_CURRENT_VERSION` and
-``MACHO_COMPATIBILITY_VERSION`` properties do not affect the file
-names or version-related symlinks that CMake generates for the library.
-The :prop_tgt:`VERSION` and :prop_tgt:`SOVERSION` target properties still
-control the file and symlink names.  The ``install_name`` is also still
-controlled by :prop_tgt:`SOVERSION`.
-
-When :prop_tgt:`MACHO_CURRENT_VERSION` and ``MACHO_COMPATIBILITY_VERSION``
-are not given, :prop_tgt:`VERSION` and :prop_tgt:`SOVERSION` are used for
-the version details to be embedded in the binaries respectively.
-The :prop_tgt:`MACHO_CURRENT_VERSION` and ``MACHO_COMPATIBILITY_VERSION``
-properties only need to be given if the project needs to decouple the file
-and symlink naming from the version details embedded in the binaries
-(e.g. to match libtool conventions).
diff --git a/share/cmake-3.18/Help/prop_tgt/MACHO_CURRENT_VERSION.rst b/share/cmake-3.18/Help/prop_tgt/MACHO_CURRENT_VERSION.rst
deleted file mode 100644
index 9afb356..0000000
--- a/share/cmake-3.18/Help/prop_tgt/MACHO_CURRENT_VERSION.rst
+++ /dev/null
@@ -1,25 +0,0 @@
-MACHO_CURRENT_VERSION
----------------------
-
-What current version number is this target for Mach-O binaries.
-
-For shared libraries on Mach-O systems (e.g. macOS, iOS)
-the :prop_tgt:`MACHO_COMPATIBILITY_VERSION` property corresponds to the
-*compatibility version* and ``MACHO_CURRENT_VERSION`` corresponds to the
-*current version*.  These are both embedded in the shared library binary
-and can be checked with the ``otool -L <binary>`` command.
-
-It should be noted that the ``MACHO_CURRENT_VERSION`` and
-:prop_tgt:`MACHO_COMPATIBILITY_VERSION` properties do not affect the file
-names or version-related symlinks that CMake generates for the library.
-The :prop_tgt:`VERSION` and :prop_tgt:`SOVERSION` target properties still
-control the file and symlink names.  The ``install_name`` is also still
-controlled by :prop_tgt:`SOVERSION`.
-
-When ``MACHO_CURRENT_VERSION`` and :prop_tgt:`MACHO_COMPATIBILITY_VERSION`
-are not given, :prop_tgt:`VERSION` and :prop_tgt:`SOVERSION` are used for
-the version details to be embedded in the binaries respectively.
-The ``MACHO_CURRENT_VERSION`` and :prop_tgt:`MACHO_COMPATIBILITY_VERSION`
-properties only need to be given if the project needs to decouple the file
-and symlink naming from the version details embedded in the binaries
-(e.g. to match libtool conventions).
diff --git a/share/cmake-3.18/Help/prop_tgt/MANUALLY_ADDED_DEPENDENCIES.rst b/share/cmake-3.18/Help/prop_tgt/MANUALLY_ADDED_DEPENDENCIES.rst
deleted file mode 100644
index c12ea14..0000000
--- a/share/cmake-3.18/Help/prop_tgt/MANUALLY_ADDED_DEPENDENCIES.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-MANUALLY_ADDED_DEPENDENCIES
----------------------------
-
-Get manually added dependencies to other top-level targets.
-
-This read-only property can be used to query all dependencies that
-were added for this target with the :command:`add_dependencies`
-command.
diff --git a/share/cmake-3.18/Help/prop_tgt/MSVC_RUNTIME_LIBRARY.rst b/share/cmake-3.18/Help/prop_tgt/MSVC_RUNTIME_LIBRARY.rst
deleted file mode 100644
index 73792de..0000000
--- a/share/cmake-3.18/Help/prop_tgt/MSVC_RUNTIME_LIBRARY.rst
+++ /dev/null
@@ -1,29 +0,0 @@
-MSVC_RUNTIME_LIBRARY
---------------------
-
-Select the MSVC runtime library for use by compilers targeting the MSVC ABI.
-
-The allowed values are:
-
-.. include:: MSVC_RUNTIME_LIBRARY-VALUES.txt
-
-Use :manual:`generator expressions <cmake-generator-expressions(7)>` to
-support per-configuration specification.  For example, the code:
-
-.. code-block:: cmake
-
-  add_executable(foo foo.c)
-  set_property(TARGET foo PROPERTY
-    MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
-
-selects for the target ``foo`` a multi-threaded statically-linked runtime
-library with or without debug information depending on the configuration.
-
-If this property is not set then CMake uses the default value
-``MultiThreaded$<$<CONFIG:Debug>:Debug>DLL`` to select a MSVC runtime library.
-
-.. note::
-
-  This property has effect only when policy :policy:`CMP0091` is set to ``NEW``
-  prior to the first :command:`project` or :command:`enable_language` command
-  that enables a language using a compiler targeting the MSVC ABI.
diff --git a/share/cmake-3.18/Help/prop_tgt/OBJCXX_EXTENSIONS.rst b/share/cmake-3.18/Help/prop_tgt/OBJCXX_EXTENSIONS.rst
deleted file mode 100644
index 9f9d804..0000000
--- a/share/cmake-3.18/Help/prop_tgt/OBJCXX_EXTENSIONS.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-OBJCXX_EXTENSIONS
------------------
-
-Boolean specifying whether compiler specific extensions are requested.
-
-This property specifies whether compiler specific extensions should be
-used.  For some compilers, this results in adding a flag such
-as ``-std=gnu++11`` instead of ``-std=c++11`` to the compile line.  This
-property is ``ON`` by default. The basic ObjC++ standard level is
-controlled by the :prop_tgt:`OBJCXX_STANDARD` target property.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
-
-If the property is not set, and the project has set the :prop_tgt:`CXX_EXTENSIONS`,
-the value of :prop_tgt:`CXX_EXTENSIONS` is set for :prop_tgt:`OBJCXX_EXTENSIONS`.
-
-This property is initialized by the value of
-the :variable:`CMAKE_OBJCXX_EXTENSIONS` variable if it is set when a target
-is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/OBJCXX_STANDARD.rst b/share/cmake-3.18/Help/prop_tgt/OBJCXX_STANDARD.rst
deleted file mode 100644
index 3c925dc..0000000
--- a/share/cmake-3.18/Help/prop_tgt/OBJCXX_STANDARD.rst
+++ /dev/null
@@ -1,35 +0,0 @@
-OBJCXX_STANDARD
----------------
-
-The ObjC++ standard whose features are requested to build this target.
-
-This property specifies the ObjC++ standard whose features are requested
-to build this target.  For some compilers, this results in adding a
-flag such as ``-std=gnu++11`` to the compile line.
-
-Supported values are ``98``, ``11``, ``14``, ``17``, and ``20``.
-
-If the value requested does not result in a compile flag being added for
-the compiler in use, a previous standard flag will be added instead.  This
-means that using:
-
-.. code-block:: cmake
-
-  set_property(TARGET tgt PROPERTY OBJCXX_STANDARD 11)
-
-with a compiler which does not support ``-std=gnu++11`` or an equivalent
-flag will not result in an error or warning, but will instead add the
-``-std=gnu++98`` flag if supported.  This "decay" behavior may be controlled
-with the :prop_tgt:`OBJCXX_STANDARD_REQUIRED` target property.
-Additionally, the :prop_tgt:`OBJCXX_EXTENSIONS` target property may be used to
-control whether compiler-specific extensions are enabled on a per-target basis.
-
-If the property is not set, and the project has set the :prop_tgt:`CXX_STANDARD`,
-the value of :prop_tgt:`CXX_STANDARD` is set for :prop_tgt:`OBJCXX_STANDARD`.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
-
-This property is initialized by the value of
-the :variable:`CMAKE_OBJCXX_STANDARD` variable if it is set when a target
-is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/OBJCXX_STANDARD_REQUIRED.rst b/share/cmake-3.18/Help/prop_tgt/OBJCXX_STANDARD_REQUIRED.rst
deleted file mode 100644
index c330abf..0000000
--- a/share/cmake-3.18/Help/prop_tgt/OBJCXX_STANDARD_REQUIRED.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-OBJCXX_STANDARD_REQUIRED
-------------------------
-
-Boolean describing whether the value of :prop_tgt:`OBJCXX_STANDARD` is a requirement.
-
-If this property is set to ``ON``, then the value of the
-:prop_tgt:`OBJCXX_STANDARD` target property is treated as a requirement.  If this
-property is ``OFF`` or unset, the :prop_tgt:`OBJCXX_STANDARD` target property is
-treated as optional and may "decay" to a previous standard if the requested is
-not available.
-
-If the property is not set, and the project has set the :prop_tgt:`CXX_STANDARD_REQUIRED`,
-the value of :prop_tgt:`CXX_STANDARD_REQUIRED` is set for :prop_tgt:`OBJCXX_STANDARD_REQUIRED`.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
-
-This property is initialized by the value of
-the :variable:`CMAKE_OBJCXX_STANDARD_REQUIRED` variable if it is set when a
-target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/OBJC_EXTENSIONS.rst b/share/cmake-3.18/Help/prop_tgt/OBJC_EXTENSIONS.rst
deleted file mode 100644
index 2de9e48..0000000
--- a/share/cmake-3.18/Help/prop_tgt/OBJC_EXTENSIONS.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-OBJC_EXTENSIONS
----------------
-
-Boolean specifying whether compiler specific extensions are requested.
-
-This property specifies whether compiler specific extensions should be
-used.  For some compilers, this results in adding a flag such
-as ``-std=gnu11`` instead of ``-std=c11`` to the compile line.  This
-property is ``ON`` by default. The basic OBJC standard level is
-controlled by the :prop_tgt:`OBJC_STANDARD` target property.
-
-If the property is not set, and the project has set the :prop_tgt:`C_EXTENSIONS`,
-the value of :prop_tgt:`C_EXTENSIONS` is set for :prop_tgt:`OBJC_EXTENSIONS`.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
-
-This property is initialized by the value of
-the :variable:`CMAKE_OBJC_EXTENSIONS` variable if it is set when a target
-is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/OBJC_STANDARD.rst b/share/cmake-3.18/Help/prop_tgt/OBJC_STANDARD.rst
deleted file mode 100644
index d1e1b24..0000000
--- a/share/cmake-3.18/Help/prop_tgt/OBJC_STANDARD.rst
+++ /dev/null
@@ -1,35 +0,0 @@
-OBJC_STANDARD
--------------
-
-The OBJC standard whose features are requested to build this target.
-
-This property specifies the OBJC standard whose features are requested
-to build this target.  For some compilers, this results in adding a
-flag such as ``-std=gnu11`` to the compile line.
-
-Supported values are ``90``, ``99`` and ``11``.
-
-If the value requested does not result in a compile flag being added for
-the compiler in use, a previous standard flag will be added instead.  This
-means that using:
-
-.. code-block:: cmake
-
-  set_property(TARGET tgt PROPERTY OBJC_STANDARD 11)
-
-with a compiler which does not support ``-std=gnu11`` or an equivalent
-flag will not result in an error or warning, but will instead add the
-``-std=gnu99`` or ``-std=gnu90`` flag if supported.  This "decay" behavior may
-be controlled with the :prop_tgt:`OBJC_STANDARD_REQUIRED` target property.
-Additionally, the :prop_tgt:`OBJC_EXTENSIONS` target property may be used to
-control whether compiler-specific extensions are enabled on a per-target basis.
-
-If the property is not set, and the project has set the :prop_tgt:`C_STANDARD`,
-the value of :prop_tgt:`C_STANDARD` is set for :prop_tgt:`OBJC_STANDARD`.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
-
-This property is initialized by the value of
-the :variable:`CMAKE_OBJC_STANDARD` variable if it is set when a target
-is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/OBJC_STANDARD_REQUIRED.rst b/share/cmake-3.18/Help/prop_tgt/OBJC_STANDARD_REQUIRED.rst
deleted file mode 100644
index 8cf377c..0000000
--- a/share/cmake-3.18/Help/prop_tgt/OBJC_STANDARD_REQUIRED.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-OBJC_STANDARD_REQUIRED
-----------------------
-
-Boolean describing whether the value of :prop_tgt:`OBJC_STANDARD` is a requirement.
-
-If this property is set to ``ON``, then the value of the
-:prop_tgt:`OBJC_STANDARD` target property is treated as a requirement.  If this
-property is ``OFF`` or unset, the :prop_tgt:`OBJC_STANDARD` target property is
-treated as optional and may "decay" to a previous standard if the requested is
-not available.
-
-If the property is not set, and the project has set the :prop_tgt:`C_STANDARD_REQUIRED`,
-the value of :prop_tgt:`C_STANDARD_REQUIRED` is set for :prop_tgt:`OBJC_STANDARD_REQUIRED`.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
-
-This property is initialized by the value of
-the :variable:`CMAKE_OBJC_STANDARD_REQUIRED` variable if it is set when a
-target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/PCH_WARN_INVALID.rst b/share/cmake-3.18/Help/prop_tgt/PCH_WARN_INVALID.rst
deleted file mode 100644
index 96e1abd..0000000
--- a/share/cmake-3.18/Help/prop_tgt/PCH_WARN_INVALID.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-PCH_WARN_INVALID
-----------------
-
-When this property is set to true, the precompile header compiler options
-will contain a compiler flag which should warn about invalid precompiled
-headers e.g. ``-Winvalid-pch`` for GNU compiler.
-
-This property is initialized by the value of the
-:variable:`CMAKE_PCH_WARN_INVALID` variable if it is set when a target is
-created.  If that variable is not set, the property defaults to ``ON``.
diff --git a/share/cmake-3.18/Help/prop_tgt/PRECOMPILE_HEADERS.rst b/share/cmake-3.18/Help/prop_tgt/PRECOMPILE_HEADERS.rst
deleted file mode 100644
index 9e70b65..0000000
--- a/share/cmake-3.18/Help/prop_tgt/PRECOMPILE_HEADERS.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-PRECOMPILE_HEADERS
-------------------
-
-List of header files to precompile.
-
-This property holds a :ref:`semicolon-separated list <CMake Language Lists>`
-of header files to precompile specified so far for its target.
-Use the :command:`target_precompile_headers` command to append more header
-files.
-
-This property supports
-:manual:`generator expressions <cmake-generator-expressions(7)>`.
diff --git a/share/cmake-3.18/Help/prop_tgt/PRECOMPILE_HEADERS_REUSE_FROM.rst b/share/cmake-3.18/Help/prop_tgt/PRECOMPILE_HEADERS_REUSE_FROM.rst
deleted file mode 100644
index 9c3e7ea..0000000
--- a/share/cmake-3.18/Help/prop_tgt/PRECOMPILE_HEADERS_REUSE_FROM.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-PRECOMPILE_HEADERS_REUSE_FROM
------------------------------
-
-Target from which to reuse the precompiled headers build artifact.
-
-See the second signature of :command:`target_precompile_headers` command
-for more detailed information.
diff --git a/share/cmake-3.18/Help/prop_tgt/RUNTIME_OUTPUT_DIRECTORY.rst b/share/cmake-3.18/Help/prop_tgt/RUNTIME_OUTPUT_DIRECTORY.rst
deleted file mode 100644
index 12390f5..0000000
--- a/share/cmake-3.18/Help/prop_tgt/RUNTIME_OUTPUT_DIRECTORY.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-RUNTIME_OUTPUT_DIRECTORY
-------------------------
-
-.. |XXX| replace:: :ref:`RUNTIME <Runtime Output Artifacts>`
-.. |xxx| replace:: runtime
-.. |CMAKE_XXX_OUTPUT_DIRECTORY| replace:: CMAKE_RUNTIME_OUTPUT_DIRECTORY
-.. include:: XXX_OUTPUT_DIRECTORY.txt
-
-See also the :prop_tgt:`RUNTIME_OUTPUT_DIRECTORY_<CONFIG>` target property.
diff --git a/share/cmake-3.18/Help/prop_tgt/SOURCE_DIR.rst b/share/cmake-3.18/Help/prop_tgt/SOURCE_DIR.rst
deleted file mode 100644
index b25813b..0000000
--- a/share/cmake-3.18/Help/prop_tgt/SOURCE_DIR.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-SOURCE_DIR
-----------
-
-This read-only property reports the value of the
-:variable:`CMAKE_CURRENT_SOURCE_DIR` variable in the directory in which
-the target was defined.
diff --git a/share/cmake-3.18/Help/prop_tgt/STATIC_LIBRARY_OPTIONS.rst b/share/cmake-3.18/Help/prop_tgt/STATIC_LIBRARY_OPTIONS.rst
deleted file mode 100644
index d05fda4..0000000
--- a/share/cmake-3.18/Help/prop_tgt/STATIC_LIBRARY_OPTIONS.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-STATIC_LIBRARY_OPTIONS
-----------------------
-
-Archiver (or MSVC librarian) flags for a static library target.
-Targets that are shared libraries, modules, or executables need to use
-the :prop_tgt:`LINK_OPTIONS` target property.
-
-This property holds a :ref:`semicolon-separated list <CMake Language Lists>` of options
-specified so far for its target.  Use :command:`set_target_properties` or
-:command:`set_property` commands to set its content.
-
-Contents of ``STATIC_LIBRARY_OPTIONS`` may use "generator expressions" with the
-syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)` manual
-for available expressions.  See the :manual:`cmake-buildsystem(7)` manual
-for more on defining buildsystem properties.
-
-.. note::
-
-  This property must be used in preference to :prop_tgt:`STATIC_LIBRARY_FLAGS`
-  property.
diff --git a/share/cmake-3.18/Help/prop_tgt/Swift_DEPENDENCIES_FILE.rst b/share/cmake-3.18/Help/prop_tgt/Swift_DEPENDENCIES_FILE.rst
deleted file mode 100644
index 46c9a1d..0000000
--- a/share/cmake-3.18/Help/prop_tgt/Swift_DEPENDENCIES_FILE.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-Swift_DEPENDENCIES_FILE
------------------------
-
-This property sets the path for the Swift dependency file (swiftdep) for the
-target.  If one is not specified, it will default to ``<TARGET>.swiftdeps``.
diff --git a/share/cmake-3.18/Help/prop_tgt/Swift_LANGUAGE_VERSION.rst b/share/cmake-3.18/Help/prop_tgt/Swift_LANGUAGE_VERSION.rst
deleted file mode 100644
index 7579447..0000000
--- a/share/cmake-3.18/Help/prop_tgt/Swift_LANGUAGE_VERSION.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-Swift_LANGUAGE_VERSION
-----------------------
-
-This property sets the language version for the Swift sources in the target.  If
-one is not specified, it will default to ``<CMAKE_Swift_LANGUAGE_VERSION>`` if
-specified, otherwise it is the latest version supported by the compiler.
diff --git a/share/cmake-3.18/Help/prop_tgt/Swift_MODULE_DIRECTORY.rst b/share/cmake-3.18/Help/prop_tgt/Swift_MODULE_DIRECTORY.rst
deleted file mode 100644
index d404251..0000000
--- a/share/cmake-3.18/Help/prop_tgt/Swift_MODULE_DIRECTORY.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-Swift_MODULE_DIRECTORY
-----------------------
-
-Specify output directory for Swift modules provided by the target.
-
-If the target contains Swift source files, this specifies the directory in which
-the modules will be placed.  When this property is not set, the modules will be
-placed in the build directory corresponding to the target's source directory.
-If the variable :variable:`CMAKE_Swift_MODULE_DIRECTORY` is set when a target is
-created its value is used to initialise this property.
diff --git a/share/cmake-3.18/Help/prop_tgt/Swift_MODULE_NAME.rst b/share/cmake-3.18/Help/prop_tgt/Swift_MODULE_NAME.rst
deleted file mode 100644
index 2866020..0000000
--- a/share/cmake-3.18/Help/prop_tgt/Swift_MODULE_NAME.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-Swift_MODULE_NAME
------------------
-
-This property specifies the name of the Swift module.  It is defaulted to the
-name of the target.
diff --git a/share/cmake-3.18/Help/prop_tgt/UNITY_BUILD.rst b/share/cmake-3.18/Help/prop_tgt/UNITY_BUILD.rst
deleted file mode 100644
index e140952..0000000
--- a/share/cmake-3.18/Help/prop_tgt/UNITY_BUILD.rst
+++ /dev/null
@@ -1,80 +0,0 @@
-UNITY_BUILD
------------
-
-When this property is set to true, the target source files will be combined
-into batches for faster compilation.  This is done by creating a (set of)
-unity sources which ``#include`` the original sources, then compiling these
-unity sources instead of the originals.  This is known as a *Unity* or *Jumbo*
-build.
-
-CMake provides different algorithms for selecting which sources are grouped
-together into a *bucket*. Algorithm selection is decided by the
-:prop_tgt:`UNITY_BUILD_MODE` target property, which has the following acceptable
-values:
-
-* ``BATCH``
-  When in this mode CMake determines which files are grouped together.
-  The :prop_tgt:`UNITY_BUILD_BATCH_SIZE` property controls the upper limit on
-  how many sources can be combined per unity source file.
-
-* ``GROUP``
-  When in this mode each target explicitly specifies how to group
-  source files. Each source file that has the same
-  :prop_sf:`UNITY_GROUP` value will be grouped together. Any sources
-  that don't have this property will be compiled individually. The
-  :prop_tgt:`UNITY_BUILD_BATCH_SIZE` property is ignored when using
-  this mode.
-
-If no explicit :prop_tgt:`UNITY_BUILD_MODE` has been specified, CMake will
-default to ``BATCH``.
-
-Unity builds are not currently supported for all languages.  CMake version
-|release| supports combining ``C`` and ``CXX`` source files.  For targets that
-mix source files from more than one language, CMake will separate the languages
-such that each generated unity source file only contains sources for a single
-language.
-
-This property is initialized by the value of the :variable:`CMAKE_UNITY_BUILD`
-variable when a target is created.
-
-.. note::
-
-  Projects should not directly set the ``UNITY_BUILD`` property or its
-  associated :variable:`CMAKE_UNITY_BUILD` variable to true.  Depending
-  on the capabilities of the build machine and compiler used, it might or
-  might not be appropriate to enable unity builds.  Therefore, this feature
-  should be under developer control, which would normally be through the
-  developer choosing whether or not to set the :variable:`CMAKE_UNITY_BUILD`
-  variable on the :manual:`cmake(1)` command line or some other equivalent
-  method.  However, it IS recommended to set the ``UNITY_BUILD`` target
-  property to false if it is known that enabling unity builds for the
-  target can lead to problems.
-
-ODR (One definition rule) errors
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-When multiple source files are included into one source file, as is done
-for unity builds, it can potentially lead to ODR errors.  CMake provides
-a number of measures to help address such problems:
-
-* Any source file that has a non-empty :prop_sf:`COMPILE_OPTIONS`,
-  :prop_sf:`COMPILE_DEFINITIONS`, :prop_sf:`COMPILE_FLAGS`, or
-  :prop_sf:`INCLUDE_DIRECTORIES` source property will not be combined
-  into a unity source.
-
-* Projects can prevent an individual source file from being combined into
-  a unity source by setting its :prop_sf:`SKIP_UNITY_BUILD_INCLUSION`
-  source property to true.  This can be a more effective way to prevent
-  problems with specific files than disabling unity builds for an entire
-  target.
-
-* The :prop_tgt:`UNITY_BUILD_CODE_BEFORE_INCLUDE` and
-  :prop_tgt:`UNITY_BUILD_CODE_AFTER_INCLUDE` target properties can be used
-  to inject code into the unity source files before and after every
-  ``#include`` statement.
-
-* The order of source files added to the target via commands like
-  :command:`add_library`, :command:`add_executable` or
-  :command:`target_sources` will be preserved in the generated unity source
-  files.  This can be used to manually enforce a specific grouping based on
-  the :prop_tgt:`UNITY_BUILD_BATCH_SIZE` target property.
diff --git a/share/cmake-3.18/Help/prop_tgt/UNITY_BUILD_BATCH_SIZE.rst b/share/cmake-3.18/Help/prop_tgt/UNITY_BUILD_BATCH_SIZE.rst
deleted file mode 100644
index 44ffe27..0000000
--- a/share/cmake-3.18/Help/prop_tgt/UNITY_BUILD_BATCH_SIZE.rst
+++ /dev/null
@@ -1,23 +0,0 @@
-UNITY_BUILD_BATCH_SIZE
-----------------------
-
-Specifies the maximum number of source files that can be combined into any one
-unity source file when unity builds are enabled by the :prop_tgt:`UNITY_BUILD`
-target property.  The original source files will be distributed across as many
-unity source files as necessary to honor this limit.
-
-The initial value for this property is taken from the
-:variable:`CMAKE_UNITY_BUILD_BATCH_SIZE` variable when the target is created.
-If that variable has not been set, the initial value will be 8.
-
-The batch size needs to be selected carefully.  If set too high, the size of
-the combined source files could result in the compiler using excessive memory
-or hitting other similar limits.  In extreme cases, this can even result in
-build failure.  On the other hand, if the batch size is too low, there will be
-little gain in build performance.
-
-Although strongly discouraged, the batch size may be set to a value of 0 to
-combine all the sources for the target into a single unity file, regardless of
-how many sources are involved.  This runs the risk of creating an excessively
-large unity source file and negatively impacting the build performance, so
-a value of 0 is not generally recommended.
diff --git a/share/cmake-3.18/Help/prop_tgt/UNITY_BUILD_CODE_AFTER_INCLUDE.rst b/share/cmake-3.18/Help/prop_tgt/UNITY_BUILD_CODE_AFTER_INCLUDE.rst
deleted file mode 100644
index 7231b61..0000000
--- a/share/cmake-3.18/Help/prop_tgt/UNITY_BUILD_CODE_AFTER_INCLUDE.rst
+++ /dev/null
@@ -1,19 +0,0 @@
-UNITY_BUILD_CODE_AFTER_INCLUDE
-------------------------------
-
-Code snippet which is included verbatim by the :prop_tgt:`UNITY_BUILD`
-feature just after every ``#include`` statement in the generated unity
-source files.  For example:
-
-.. code-block:: cmake
-
-  set(after [[
-  #if defined(NOMINMAX)
-  #undef NOMINMAX
-  #endif
-  ]])
-  set_target_properties(myTarget PROPERTIES
-    UNITY_BUILD_CODE_AFTER_INCLUDE "${after}"
-  )
-
-See also :prop_tgt:`UNITY_BUILD_CODE_BEFORE_INCLUDE`.
diff --git a/share/cmake-3.18/Help/prop_tgt/UNITY_BUILD_CODE_BEFORE_INCLUDE.rst b/share/cmake-3.18/Help/prop_tgt/UNITY_BUILD_CODE_BEFORE_INCLUDE.rst
deleted file mode 100644
index 7ed6fa1..0000000
--- a/share/cmake-3.18/Help/prop_tgt/UNITY_BUILD_CODE_BEFORE_INCLUDE.rst
+++ /dev/null
@@ -1,19 +0,0 @@
-UNITY_BUILD_CODE_BEFORE_INCLUDE
--------------------------------
-
-Code snippet which is included verbatim by the :prop_tgt:`UNITY_BUILD`
-feature just before every ``#include`` statement in the generated unity
-source files.  For example:
-
-.. code-block:: cmake
-
-  set(before [[
-  #if !defined(NOMINMAX)
-  #define NOMINMAX
-  #endif
-  ]])
-  set_target_properties(myTarget PROPERTIES
-    UNITY_BUILD_CODE_BEFORE_INCLUDE "${before}"
-  )
-
-See also :prop_tgt:`UNITY_BUILD_CODE_AFTER_INCLUDE`.
diff --git a/share/cmake-3.18/Help/prop_tgt/UNITY_BUILD_MODE.rst b/share/cmake-3.18/Help/prop_tgt/UNITY_BUILD_MODE.rst
deleted file mode 100644
index 1ebab23..0000000
--- a/share/cmake-3.18/Help/prop_tgt/UNITY_BUILD_MODE.rst
+++ /dev/null
@@ -1,58 +0,0 @@
-UNITY_BUILD_MODE
-----------------
-
-CMake provides different algorithms for selecting which sources are grouped
-together into a *bucket*. Selection is decided by this property,
-which has the following acceptable values:
-
-``BATCH``
-  When in this mode CMake determines which files are grouped together.
-  The :prop_tgt:`UNITY_BUILD_BATCH_SIZE` property controls the upper limit on
-  how many sources can be combined per unity source file.
-
-  Example usage:
-
-  .. code-block:: cmake
-
-    add_library(example_library
-                source1.cxx
-                source2.cxx
-                source3.cxx
-                source4.cxx)
-
-    set_target_properties(example_library PROPERTIES
-                          UNITY_BUILD_MODE BATCH
-                          UNITY_BUILD_BATCH_SIZE 2
-                          )
-
-``GROUP``
-  When in this mode each target explicitly specifies how to group
-  source files. Each source file that has the same
-  :prop_sf:`UNITY_GROUP` value will be grouped together. Any sources
-  that don't have this property will be compiled individually. The
-  :prop_tgt:`UNITY_BUILD_BATCH_SIZE` property is ignored when using
-  this mode.
-
-  Example usage:
-
-  .. code-block:: cmake
-
-    add_library(example_library
-                source1.cxx
-                source2.cxx
-                source3.cxx
-                source4.cxx)
-
-    set_target_properties(example_library PROPERTIES
-                          UNITY_BUILD_MODE GROUP
-                          )
-
-    set_source_files_properties(source1.cxx source2.cxx source3.cxx
-                                PROPERTIES UNITY_GROUP "bucket1"
-                                )
-    set_source_files_properties(source4.cxx
-                                PROPERTIES UNITY_GROUP "bucket2"
-                                )
-
-If no explicit :prop_tgt:`UNITY_BUILD_MODE` has been specified, CMake will
-default to ``BATCH``.
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_CONFIGURATION_TYPE.rst b/share/cmake-3.18/Help/prop_tgt/VS_CONFIGURATION_TYPE.rst
deleted file mode 100644
index 640bed5..0000000
--- a/share/cmake-3.18/Help/prop_tgt/VS_CONFIGURATION_TYPE.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-VS_CONFIGURATION_TYPE
----------------------
-
-Visual Studio project configuration type.
-
-Sets the ``ConfigurationType`` attribute for a generated Visual Studio project.
-The property value may use
-:manual:`generator expressions <cmake-generator-expressions(7)>`.
-If this property is set, it overrides the default setting that is based on the
-target type (e.g. ``StaticLibrary``, ``Application``, ...).
-
-Supported on :ref:`Visual Studio Generators` for VS 2010 and higher.
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_DEBUGGER_COMMAND.rst b/share/cmake-3.18/Help/prop_tgt/VS_DEBUGGER_COMMAND.rst
deleted file mode 100644
index ba5fd0a..0000000
--- a/share/cmake-3.18/Help/prop_tgt/VS_DEBUGGER_COMMAND.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-VS_DEBUGGER_COMMAND
--------------------
-
-Sets the local debugger command for Visual Studio C++ targets.
-The property value may use
-:manual:`generator expressions <cmake-generator-expressions(7)>`.
-This is defined in ``<LocalDebuggerCommand>`` in the Visual Studio
-project file.
-
-This property only works for Visual Studio 2010 and above;
-it is ignored on other generators.
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_DEBUGGER_COMMAND_ARGUMENTS.rst b/share/cmake-3.18/Help/prop_tgt/VS_DEBUGGER_COMMAND_ARGUMENTS.rst
deleted file mode 100644
index 06ef5d5..0000000
--- a/share/cmake-3.18/Help/prop_tgt/VS_DEBUGGER_COMMAND_ARGUMENTS.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-VS_DEBUGGER_COMMAND_ARGUMENTS
------------------------------
-
-Sets the local debugger command line arguments for Visual Studio C++ targets.
-The property value may use
-:manual:`generator expressions <cmake-generator-expressions(7)>`.
-This is defined in ``<LocalDebuggerCommandArguments>`` in the Visual Studio
-project file.
-
-This property only works for Visual Studio 2010 and above;
-it is ignored on other generators.
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_DEBUGGER_ENVIRONMENT.rst b/share/cmake-3.18/Help/prop_tgt/VS_DEBUGGER_ENVIRONMENT.rst
deleted file mode 100644
index f55ac7b..0000000
--- a/share/cmake-3.18/Help/prop_tgt/VS_DEBUGGER_ENVIRONMENT.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-VS_DEBUGGER_ENVIRONMENT
------------------------
-
-Sets the local debugger environment for Visual Studio C++ targets.
-The property value may use
-:manual:`generator expressions <cmake-generator-expressions(7)>`.
-This is defined in ``<LocalDebuggerEnvironment>`` in the Visual Studio
-project file.
-
-This property only works for Visual Studio 2010 and above;
-it is ignored on other generators.
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_DEBUGGER_WORKING_DIRECTORY.rst b/share/cmake-3.18/Help/prop_tgt/VS_DEBUGGER_WORKING_DIRECTORY.rst
deleted file mode 100644
index 008bbf6..0000000
--- a/share/cmake-3.18/Help/prop_tgt/VS_DEBUGGER_WORKING_DIRECTORY.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-VS_DEBUGGER_WORKING_DIRECTORY
------------------------------
-
-Sets the local debugger working directory for Visual Studio C++ targets.
-The property value may use
-:manual:`generator expressions <cmake-generator-expressions(7)>`.
-This is defined in ``<LocalDebuggerWorkingDirectory>`` in the Visual Studio
-project file.
-
-This property only works for Visual Studio 2010 and above;
-it is ignored on other generators.
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_DESKTOP_EXTENSIONS_VERSION.rst b/share/cmake-3.18/Help/prop_tgt/VS_DESKTOP_EXTENSIONS_VERSION.rst
deleted file mode 100644
index 19d1620..0000000
--- a/share/cmake-3.18/Help/prop_tgt/VS_DESKTOP_EXTENSIONS_VERSION.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-VS_DESKTOP_EXTENSIONS_VERSION
------------------------------
-
-Visual Studio Windows 10 Desktop Extensions Version
-
-Specifies the version of the Desktop Extensions that should be included in the
-target. For example ``10.0.10240.0``. If the value is not specified, the Desktop
-Extensions will not be included. To use the same version of the extensions as
-the Windows 10 SDK that is being used, you can use the
-:variable:`CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION` variable.
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_DOTNET_DOCUMENTATION_FILE.rst b/share/cmake-3.18/Help/prop_tgt/VS_DOTNET_DOCUMENTATION_FILE.rst
deleted file mode 100644
index 1bc361c..0000000
--- a/share/cmake-3.18/Help/prop_tgt/VS_DOTNET_DOCUMENTATION_FILE.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-VS_DOTNET_DOCUMENTATION_FILE
-----------------------------
-
-Visual Studio managed project .NET documentation output
-
-Sets the target XML documentation file output.
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_DOTNET_REFERENCEPROP_refname_TAG_tagname.rst b/share/cmake-3.18/Help/prop_tgt/VS_DOTNET_REFERENCEPROP_refname_TAG_tagname.rst
deleted file mode 100644
index ab311ea..0000000
--- a/share/cmake-3.18/Help/prop_tgt/VS_DOTNET_REFERENCEPROP_refname_TAG_tagname.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-VS_DOTNET_REFERENCEPROP_<refname>_TAG_<tagname>
------------------------------------------------
-
-Defines an XML property ``<tagname>`` for a .NET reference
-``<refname>``.
-
-Reference properties can be set for .NET references which are
-defined by the target properties :prop_tgt:`VS_DOTNET_REFERENCES`,
-:prop_tgt:`VS_DOTNET_REFERENCE_<refname>`
-and also for project references to other C# targets which are
-established by :command:`target_link_libraries()`.
-
-This property is only applicable to C# targets and Visual Studio
-generators 2010 and later.
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_DOTNET_REFERENCES_COPY_LOCAL.rst b/share/cmake-3.18/Help/prop_tgt/VS_DOTNET_REFERENCES_COPY_LOCAL.rst
deleted file mode 100644
index 7641ba5..0000000
--- a/share/cmake-3.18/Help/prop_tgt/VS_DOTNET_REFERENCES_COPY_LOCAL.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-VS_DOTNET_REFERENCES_COPY_LOCAL
--------------------------------
-
-Sets the **Copy Local** property for all .NET hint references in the target
-
-Boolean property to enable/disable copying of .NET hint references to
-output directory. The default is ``ON``.
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_DOTNET_REFERENCE_refname.rst b/share/cmake-3.18/Help/prop_tgt/VS_DOTNET_REFERENCE_refname.rst
deleted file mode 100644
index 5814005..0000000
--- a/share/cmake-3.18/Help/prop_tgt/VS_DOTNET_REFERENCE_refname.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-VS_DOTNET_REFERENCE_<refname>
------------------------------
-
-Visual Studio managed project .NET reference with name ``<refname>``
-and hint path.
-
-Adds one .NET reference to generated Visual Studio project. The
-reference will have the name ``<refname>`` and will point to the
-assembly given as value of the property.
-
-See also :prop_tgt:`VS_DOTNET_REFERENCES` and
-:prop_tgt:`VS_DOTNET_REFERENCES_COPY_LOCAL`
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_DPI_AWARE.rst b/share/cmake-3.18/Help/prop_tgt/VS_DPI_AWARE.rst
deleted file mode 100644
index 82640cc..0000000
--- a/share/cmake-3.18/Help/prop_tgt/VS_DPI_AWARE.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-VS_DPI_AWARE
-------------
-
-Set the Manifest Tool -> Input and Output -> DPI Awareness in the Visual Studio
-target project properties.
-
-Valid values are ``PerMonitor``, ``ON``, or ``OFF``.
-
-For example:
-
-.. code-block:: cmake
-
-  add_executable(myproject myproject.cpp)
-  set_property(TARGET myproject PROPERTY VS_DPI_AWARE "PerMonitor")
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_IOT_EXTENSIONS_VERSION.rst b/share/cmake-3.18/Help/prop_tgt/VS_IOT_EXTENSIONS_VERSION.rst
deleted file mode 100644
index 27c8a3d..0000000
--- a/share/cmake-3.18/Help/prop_tgt/VS_IOT_EXTENSIONS_VERSION.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-VS_IOT_EXTENSIONS_VERSION
--------------------------
-
-Visual Studio Windows 10 IoT Extensions Version
-
-Specifies the version of the IoT Extensions that should be included in the
-target. For example ``10.0.10240.0``. If the value is not specified, the IoT
-Extensions will not be included. To use the same version of the extensions as
-the Windows 10 SDK that is being used, you can use the
-:variable:`CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION` variable.
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_IOT_STARTUP_TASK.rst b/share/cmake-3.18/Help/prop_tgt/VS_IOT_STARTUP_TASK.rst
deleted file mode 100644
index add50cb..0000000
--- a/share/cmake-3.18/Help/prop_tgt/VS_IOT_STARTUP_TASK.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-VS_IOT_STARTUP_TASK
--------------------
-
-Visual Studio Windows 10 IoT Continuous Background Task
-
-Specifies that the target should be compiled as a Continuous Background Task library.
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_JUST_MY_CODE_DEBUGGING.rst b/share/cmake-3.18/Help/prop_tgt/VS_JUST_MY_CODE_DEBUGGING.rst
deleted file mode 100644
index 42fb8ad..0000000
--- a/share/cmake-3.18/Help/prop_tgt/VS_JUST_MY_CODE_DEBUGGING.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-VS_JUST_MY_CODE_DEBUGGING
--------------------------
-
-Enable Just My Code with Visual Studio debugger.
-
-Supported on :ref:`Visual Studio Generators` for VS 2010 and higher,
-:ref:`Makefile Generators` and the :generator:`Ninja` generators.
-
-This property is initialized by the :variable:`CMAKE_VS_JUST_MY_CODE_DEBUGGING`
-variable if it is set when a target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_MOBILE_EXTENSIONS_VERSION.rst b/share/cmake-3.18/Help/prop_tgt/VS_MOBILE_EXTENSIONS_VERSION.rst
deleted file mode 100644
index be3c9a0..0000000
--- a/share/cmake-3.18/Help/prop_tgt/VS_MOBILE_EXTENSIONS_VERSION.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-VS_MOBILE_EXTENSIONS_VERSION
-----------------------------
-
-Visual Studio Windows 10 Mobile Extensions Version
-
-Specifies the version of the Mobile Extensions that should be included in the
-target. For example ``10.0.10240.0``. If the value is not specified, the Mobile
-Extensions will not be included. To use the same version of the extensions as
-the Windows 10 SDK that is being used, you can use the
-:variable:`CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION` variable.
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_NO_SOLUTION_DEPLOY.rst b/share/cmake-3.18/Help/prop_tgt/VS_NO_SOLUTION_DEPLOY.rst
deleted file mode 100644
index ffcbde5..0000000
--- a/share/cmake-3.18/Help/prop_tgt/VS_NO_SOLUTION_DEPLOY.rst
+++ /dev/null
@@ -1,46 +0,0 @@
-VS_NO_SOLUTION_DEPLOY
----------------------
-
-Specify that the target should not be marked for deployment to a Windows CE
-or Windows Phone device in the generated Visual Studio solution.
-
-Be default, all EXE and shared library (DLL) targets are marked to deploy to
-the target device in the generated Visual Studio solution.
-
-Generator expressions are supported.
-
-There are reasons one might want to exclude a target / generated project from
-deployment:
-
-- The library or executable may not be necessary in the primary deploy/debug
-  scenario, and excluding from deployment saves time in the
-  develop/download/debug cycle.
-- There may be insufficient space on the target device to accommodate all of
-  the build products.
-- Visual Studio 2013 requires a target device IP address be entered for each
-  target marked for deployment.  For large numbers of targets, this can be
-  tedious.
-  NOTE: Visual Studio *will* deploy all project dependencies of a project
-  tagged for deployment to the IP address configured for that project even
-  if those dependencies are not tagged for deployment.
-
-
-Example 1
-^^^^^^^^^
-
-This shows setting the variable for the target foo.
-
-.. code-block:: cmake
-
-  add_library(foo SHARED foo.cpp)
-  set_property(TARGET foo PROPERTY VS_NO_SOLUTION_DEPLOY ON)
-
-Example 2
-^^^^^^^^^
-
-This shows setting the variable for the Release configuration only.
-
-.. code-block:: cmake
-
-  add_library(foo SHARED foo.cpp)
-  set_property(TARGET foo PROPERTY VS_NO_SOLUTION_DEPLOY "$<CONFIG:Release>")
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_PACKAGE_REFERENCES.rst b/share/cmake-3.18/Help/prop_tgt/VS_PACKAGE_REFERENCES.rst
deleted file mode 100644
index 5a0465b..0000000
--- a/share/cmake-3.18/Help/prop_tgt/VS_PACKAGE_REFERENCES.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-VS_PACKAGE_REFERENCES
----------------------
-
-Visual Studio package references for nuget.
-
-Adds one or more semicolon-delimited package references to a generated
-Visual Studio project. The version of the package will be
-underscore delimited. For example, ``boost_1.7.0;nunit_3.12.*``.
-
-.. code-block:: cmake
-
-  set_property(TARGET ${TARGET_NAME} PROPERTY
-    VS_PACKAGE_REFERENCES "boost_1.7.0")
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_PLATFORM_TOOLSET.rst b/share/cmake-3.18/Help/prop_tgt/VS_PLATFORM_TOOLSET.rst
deleted file mode 100644
index f8f2e8e..0000000
--- a/share/cmake-3.18/Help/prop_tgt/VS_PLATFORM_TOOLSET.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-VS_PLATFORM_TOOLSET
--------------------
-
-Overrides the platform toolset used to build a target.
-
-Only supported when the compiler used by the given toolset is the
-same as the compiler used to build the whole source tree.
-
-This is especially useful to create driver projects with the toolsets
-"WindowsUserModeDriver10.0" or "WindowsKernelModeDriver10.0".
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_PROJECT_IMPORT.rst b/share/cmake-3.18/Help/prop_tgt/VS_PROJECT_IMPORT.rst
deleted file mode 100644
index 569c8ea..0000000
--- a/share/cmake-3.18/Help/prop_tgt/VS_PROJECT_IMPORT.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-VS_PROJECT_IMPORT
------------------
-
-Visual Studio managed project imports
-
-Adds to a generated Visual Studio project one or more semicolon-delimited paths
-to .props files needed when building projects from some NuGet packages.
-For example, ``my_packages_path/MyPackage.1.0.0/build/MyPackage.props``.
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_SDK_REFERENCES.rst b/share/cmake-3.18/Help/prop_tgt/VS_SDK_REFERENCES.rst
deleted file mode 100644
index 99987f5..0000000
--- a/share/cmake-3.18/Help/prop_tgt/VS_SDK_REFERENCES.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-VS_SDK_REFERENCES
------------------
-
-Visual Studio project SDK references.
-Specify a :ref:`semicolon-separated list <CMake Language Lists>` of SDK references
-to be added to a generated Visual Studio project, e.g.
-``Microsoft.AdMediatorWindows81, Version=1.0``.
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_SOLUTION_DEPLOY.rst b/share/cmake-3.18/Help/prop_tgt/VS_SOLUTION_DEPLOY.rst
deleted file mode 100644
index eef848f..0000000
--- a/share/cmake-3.18/Help/prop_tgt/VS_SOLUTION_DEPLOY.rst
+++ /dev/null
@@ -1,27 +0,0 @@
-VS_SOLUTION_DEPLOY
-------------------
-
-Specify that the target should be marked for deployment when not targeting
-Windows CE, Windows Phone or a Windows Store application.
-
-If the target platform doesn't support deployment, this property won't have
-any effect.
-
-:manual:`Generator expressions <cmake-generator-expressions(7)>` are supported.
-
-Examples
-^^^^^^^^
-
-Always deploy target ``foo``:
-
-.. code-block:: cmake
-
-  add_executable(foo SHARED foo.cpp)
-  set_property(TARGET foo PROPERTY VS_SOLUTION_DEPLOY ON)
-
-Deploy target ``foo`` for all configurations except ``Release``:
-
-.. code-block:: cmake
-
-  add_executable(foo SHARED foo.cpp)
-  set_property(TARGET foo PROPERTY VS_SOLUTION_DEPLOY "$<NOT:$<CONFIG:Release>>")
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_SOURCE_SETTINGS_tool.rst b/share/cmake-3.18/Help/prop_tgt/VS_SOURCE_SETTINGS_tool.rst
deleted file mode 100644
index 738a912..0000000
--- a/share/cmake-3.18/Help/prop_tgt/VS_SOURCE_SETTINGS_tool.rst
+++ /dev/null
@@ -1,19 +0,0 @@
-VS_SOURCE_SETTINGS_<tool>
--------------------------
-
-Set any item metadata on all non-built files that use <tool>.
-
-Takes a list of ``Key=Value`` pairs. Tells the Visual Studio generator
-to set ``Key`` to ``Value`` as item metadata on all non-built files
-that use ``<tool>``.
-
-For example:
-
-.. code-block:: cmake
-
-  set_property(TARGET main PROPERTY VS_SOURCE_SETTINGS_FXCompile "Key=Value" "Key2=Value2")
-
-will set ``Key`` to ``Value`` and ``Key2`` to ``Value2`` for all
-non-built files that use ``FXCompile``.
-
-:manual:`Generator expressions <cmake-generator-expressions(7)>` are supported.
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_USER_PROPS.rst b/share/cmake-3.18/Help/prop_tgt/VS_USER_PROPS.rst
deleted file mode 100644
index 1be222b..0000000
--- a/share/cmake-3.18/Help/prop_tgt/VS_USER_PROPS.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-VS_USER_PROPS
--------------
-
-Sets the user props file to be included in the visual studio
-C++ project file. The standard path is
-``$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props``, which is
-in most cases the same as
-``%LOCALAPPDATA%\\Microsoft\\MSBuild\\v4.0\\Microsoft.Cpp.Win32.user.props``
-or ``%LOCALAPPDATA%\\Microsoft\\MSBuild\\v4.0\\Microsoft.Cpp.x64.user.props``.
-
-The ``*.user.props`` files can be used for Visual Studio wide
-configuration which is independent from cmake.
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION.rst b/share/cmake-3.18/Help/prop_tgt/VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION.rst
deleted file mode 100644
index 1ad7a71..0000000
--- a/share/cmake-3.18/Help/prop_tgt/VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION
---------------------------------------
-
-Visual Studio Windows Target Platform Minimum Version
-
-For Windows 10. Specifies the minimum version of the OS that is being
-targeted. For example ``10.0.10240.0``. If the value is not specified, the
-value of :variable:`CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION` will be used on
-WindowsStore projects otherwise the target platform minimum version will not
-be specified for the project.
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_WINRT_COMPONENT.rst b/share/cmake-3.18/Help/prop_tgt/VS_WINRT_COMPONENT.rst
deleted file mode 100644
index e160bd6..0000000
--- a/share/cmake-3.18/Help/prop_tgt/VS_WINRT_COMPONENT.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-VS_WINRT_COMPONENT
-------------------
-
-Mark a target as a Windows Runtime component for the Visual Studio generator.
-Compile the target with ``C++/CX`` language extensions for Windows Runtime.
-For ``SHARED`` and ``MODULE`` libraries, this also defines the
-``_WINRT_DLL`` preprocessor macro.
-
-.. note::
-  Currently this is implemented only by Visual Studio generators.
-  Support may be added to other generators in the future.
diff --git a/share/cmake-3.18/Help/prop_tgt/WIN32_EXECUTABLE.rst b/share/cmake-3.18/Help/prop_tgt/WIN32_EXECUTABLE.rst
deleted file mode 100644
index 060d166..0000000
--- a/share/cmake-3.18/Help/prop_tgt/WIN32_EXECUTABLE.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-WIN32_EXECUTABLE
-----------------
-
-Build an executable with a WinMain entry point on windows.
-
-When this property is set to true the executable when linked on
-Windows will be created with a WinMain() entry point instead of just
-main().  This makes it a GUI executable instead of a console application.
-See the :variable:`CMAKE_MFC_FLAG` variable documentation to
-configure use of the Microsoft Foundation Classes (MFC) for WinMain
-executables.  This property is initialized by the value of the
-:variable:`CMAKE_WIN32_EXECUTABLE` variable if it is set when
-a target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/WINDOWS_EXPORT_ALL_SYMBOLS.rst b/share/cmake-3.18/Help/prop_tgt/WINDOWS_EXPORT_ALL_SYMBOLS.rst
deleted file mode 100644
index 86711bf..0000000
--- a/share/cmake-3.18/Help/prop_tgt/WINDOWS_EXPORT_ALL_SYMBOLS.rst
+++ /dev/null
@@ -1,26 +0,0 @@
-WINDOWS_EXPORT_ALL_SYMBOLS
---------------------------
-
-This property is implemented only for MS-compatible tools on Windows.
-
-Enable this boolean property to automatically create a module definition
-(``.def``) file with all global symbols found in the input ``.obj`` files
-for a ``SHARED`` library (or executable with :prop_tgt:`ENABLE_EXPORTS`)
-on Windows.  The module definition file will be passed to the linker
-causing all symbols to be exported from the ``.dll``.
-For global *data* symbols, ``__declspec(dllimport)`` must still be used when
-compiling against the code in the ``.dll``.  All other function symbols will
-be automatically exported and imported by callers.  This simplifies porting
-projects to Windows by reducing the need for explicit ``dllexport`` markup,
-even in ``C++`` classes.
-
-When this property is enabled, zero or more ``.def`` files may also be
-specified as source files of the target.  The exports named by these files
-will be merged with those detected from the object files to generate a
-single module definition file to be passed to the linker.  This can be
-used to export symbols from a ``.dll`` that are not in any of its object
-files but are added by the linker from dependencies (e.g. ``msvcrt.lib``).
-
-This property is initialized by the value of
-the :variable:`CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS` variable if it is set
-when a target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/XCODE_ATTRIBUTE_an-attribute.rst b/share/cmake-3.18/Help/prop_tgt/XCODE_ATTRIBUTE_an-attribute.rst
deleted file mode 100644
index 71858c5..0000000
--- a/share/cmake-3.18/Help/prop_tgt/XCODE_ATTRIBUTE_an-attribute.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-XCODE_ATTRIBUTE_<an-attribute>
-------------------------------
-
-Set Xcode target attributes directly.
-
-Tell the :generator:`Xcode` generator to set '<an-attribute>' to a given
-value in the generated Xcode project.  Ignored on other generators.
-
-See the :variable:`CMAKE_XCODE_ATTRIBUTE_<an-attribute>` variable
-to set attributes on all targets in a directory tree.
-
-Contents of ``XCODE_ATTRIBUTE_<an-attribute>`` may use
-"generator expressions" with the syntax ``$<...>``.  See the
-:manual:`cmake-generator-expressions(7)` manual for available
-expressions.  See the :manual:`cmake-buildsystem(7)` manual
-for more on defining buildsystem properties.
diff --git a/share/cmake-3.18/Help/prop_tgt/XCODE_EXPLICIT_FILE_TYPE.rst b/share/cmake-3.18/Help/prop_tgt/XCODE_EXPLICIT_FILE_TYPE.rst
deleted file mode 100644
index dc92902..0000000
--- a/share/cmake-3.18/Help/prop_tgt/XCODE_EXPLICIT_FILE_TYPE.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-XCODE_EXPLICIT_FILE_TYPE
-------------------------
-
-Set the Xcode ``explicitFileType`` attribute on its reference to a
-target.  CMake computes a default based on target type but
-can be told explicitly with this property.
-
-See also :prop_tgt:`XCODE_PRODUCT_TYPE`.
diff --git a/share/cmake-3.18/Help/prop_tgt/XCODE_GENERATE_SCHEME.rst b/share/cmake-3.18/Help/prop_tgt/XCODE_GENERATE_SCHEME.rst
deleted file mode 100644
index c32b4de..0000000
--- a/share/cmake-3.18/Help/prop_tgt/XCODE_GENERATE_SCHEME.rst
+++ /dev/null
@@ -1,41 +0,0 @@
-XCODE_GENERATE_SCHEME
----------------------
-
-If enabled, the :generator:`Xcode` generator will generate schema files.  These
-are useful to invoke analyze, archive, build-for-testing and test
-actions from the command line.
-
-This property is initialized by the value of the variable
-:variable:`CMAKE_XCODE_GENERATE_SCHEME` if it is set when a target
-is created.
-
-The following target properties overwrite the default of the
-corresponding settings on the "Diagnostic" tab for each schema file.
-Each of those is initialized by the respective ``CMAKE_`` variable
-at target creation time.
-
-- :prop_tgt:`XCODE_SCHEME_ADDRESS_SANITIZER`
-- :prop_tgt:`XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN`
-- :prop_tgt:`XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER`
-- :prop_tgt:`XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS`
-- :prop_tgt:`XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE`
-- :prop_tgt:`XCODE_SCHEME_GUARD_MALLOC`
-- :prop_tgt:`XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP`
-- :prop_tgt:`XCODE_SCHEME_MALLOC_GUARD_EDGES`
-- :prop_tgt:`XCODE_SCHEME_MALLOC_SCRIBBLE`
-- :prop_tgt:`XCODE_SCHEME_MALLOC_STACK`
-- :prop_tgt:`XCODE_SCHEME_THREAD_SANITIZER`
-- :prop_tgt:`XCODE_SCHEME_THREAD_SANITIZER_STOP`
-- :prop_tgt:`XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER`
-- :prop_tgt:`XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP`
-- :prop_tgt:`XCODE_SCHEME_ZOMBIE_OBJECTS`
-
-The following target properties will be applied on the
-"Info", "Arguments", and "Options" tab:
-
-- :prop_tgt:`XCODE_SCHEME_ARGUMENTS`
-- :prop_tgt:`XCODE_SCHEME_DEBUG_AS_ROOT`
-- :prop_tgt:`XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING`
-- :prop_tgt:`XCODE_SCHEME_ENVIRONMENT`
-- :prop_tgt:`XCODE_SCHEME_EXECUTABLE`
-- :prop_tgt:`XCODE_SCHEME_WORKING_DIRECTORY`
diff --git a/share/cmake-3.18/Help/prop_tgt/XCODE_PRODUCT_TYPE.rst b/share/cmake-3.18/Help/prop_tgt/XCODE_PRODUCT_TYPE.rst
deleted file mode 100644
index f4ef5c0..0000000
--- a/share/cmake-3.18/Help/prop_tgt/XCODE_PRODUCT_TYPE.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-XCODE_PRODUCT_TYPE
-------------------
-
-Set the Xcode ``productType`` attribute on its reference to a
-target.  CMake computes a default based on target type but
-can be told explicitly with this property.
-
-See also :prop_tgt:`XCODE_EXPLICIT_FILE_TYPE`.
diff --git a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER.rst b/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER.rst
deleted file mode 100644
index cc9bac2..0000000
--- a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-XCODE_SCHEME_ADDRESS_SANITIZER
-------------------------------
-
-Whether to enable ``Address Sanitizer`` in the Diagnostics
-section of the generated Xcode scheme.
-
-This property is initialized by the value of the variable
-:variable:`CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER` if it is set
-when a target is created.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN.rst b/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN.rst
deleted file mode 100644
index 37a043a..0000000
--- a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN
------------------------------------------------
-
-Whether to enable ``Detect use of stack after return``
-in the Diagnostics section of the generated Xcode scheme.
-
-This property is initialized by the value of the variable
-:variable:`CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN`
-if it is set when a target is created.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_ARGUMENTS.rst b/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_ARGUMENTS.rst
deleted file mode 100644
index 1f228e3..0000000
--- a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_ARGUMENTS.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-XCODE_SCHEME_ARGUMENTS
-----------------------
-
-Specify command line arguments that should be added to the Arguments
-section of the generated Xcode scheme.
-
-If set to a list of arguments those will be added to the scheme.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_DEBUG_AS_ROOT.rst b/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_DEBUG_AS_ROOT.rst
deleted file mode 100644
index 5407e80..0000000
--- a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_DEBUG_AS_ROOT.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-XCODE_SCHEME_DEBUG_AS_ROOT
---------------------------
-
-Whether to debug the target as 'root'.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING.rst b/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING.rst
deleted file mode 100644
index 9afeedd..0000000
--- a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING
---------------------------------------
-
-Whether to enable
-``Allow debugging when using document Versions Browser``
-in the Options section of the generated Xcode scheme.
-
-This property is initialized by the value of the variable
-:variable:`CMAKE_XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING`
-if it is set when a target is created.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER.rst b/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER.rst
deleted file mode 100644
index 1a6fcfd..0000000
--- a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER
-----------------------------------------
-
-Whether to disable the ``Main Thread Checker``
-in the Diagnostics section of the generated Xcode scheme.
-
-This property is initialized by the value of the variable
-:variable:`CMAKE_XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER`
-if it is set when a target is created.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS.rst b/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS.rst
deleted file mode 100644
index 9224022..0000000
--- a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS
-----------------------------------
-
-Whether to enable ``Dynamic Library Loads``
-in the Diagnostics section of the generated Xcode scheme.
-
-This property is initialized by the value of the variable
-:variable:`CMAKE_XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS` if it is set
-when a target is created.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE.rst b/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE.rst
deleted file mode 100644
index 203c803..0000000
--- a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE
--------------------------------------
-
-Whether to enable ``Dynamic Linker API usage``
-in the Diagnostics section of the generated Xcode scheme.
-
-This property is initialized by the value of the variable
-:variable:`CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE` if it is set
-when a target is created.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_ENVIRONMENT.rst b/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_ENVIRONMENT.rst
deleted file mode 100644
index c6d875e..0000000
--- a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_ENVIRONMENT.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-XCODE_SCHEME_ENVIRONMENT
-------------------------
-
-Specify environment variables that should be added to the Arguments
-section of the generated Xcode scheme.
-
-If set to a list of environment variables and values of the form
-``MYVAR=value`` those environment variables will be added to the
-scheme.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_EXECUTABLE.rst b/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_EXECUTABLE.rst
deleted file mode 100644
index 104841b..0000000
--- a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_EXECUTABLE.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-XCODE_SCHEME_EXECUTABLE
------------------------
-
-Specify path to executable in the Info section of the generated
-Xcode scheme. If not set the schema generator will select the
-current target if it is actually executable.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_GUARD_MALLOC.rst b/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_GUARD_MALLOC.rst
deleted file mode 100644
index c4e83da..0000000
--- a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_GUARD_MALLOC.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-XCODE_SCHEME_GUARD_MALLOC
-------------------------------
-
-Whether to enable ``Guard Malloc``
-in the Diagnostics section of the generated Xcode scheme.
-
-This property is initialized by the value of the variable
-:variable:`CMAKE_XCODE_SCHEME_GUARD_MALLOC` if it is set
-when a target is created.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP.rst b/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP.rst
deleted file mode 100644
index 73992c3..0000000
--- a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP
--------------------------------------
-
-Whether to enable the ``Main Thread Checker`` option
-``Pause on issues``
-in the Diagnostics section of the generated Xcode scheme.
-
-This property is initialized by the value of the variable
-:variable:`CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP` if it is set
-when a target is created.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_MALLOC_GUARD_EDGES.rst b/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_MALLOC_GUARD_EDGES.rst
deleted file mode 100644
index ca761c0..0000000
--- a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_MALLOC_GUARD_EDGES.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-XCODE_SCHEME_MALLOC_GUARD_EDGES
--------------------------------
-
-Whether to enable ``Malloc Guard Edges``
-in the Diagnostics section of the generated Xcode scheme.
-
-This property is initialized by the value of the variable
-:variable:`CMAKE_XCODE_SCHEME_MALLOC_GUARD_EDGES` if it is set
-when a target is created.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_MALLOC_SCRIBBLE.rst b/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_MALLOC_SCRIBBLE.rst
deleted file mode 100644
index c5ddb95..0000000
--- a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_MALLOC_SCRIBBLE.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-XCODE_SCHEME_MALLOC_SCRIBBLE
-------------------------------
-
-Whether to enable ``Malloc Scribble``
-in the Diagnostics section of the generated Xcode scheme.
-
-This property is initialized by the value of the variable
-:variable:`CMAKE_XCODE_SCHEME_MALLOC_SCRIBBLE` if it is set
-when a target is created.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_MALLOC_STACK.rst b/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_MALLOC_STACK.rst
deleted file mode 100644
index 170f33d..0000000
--- a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_MALLOC_STACK.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-XCODE_SCHEME_MALLOC_STACK
--------------------------
-
-Whether to enable ``Malloc Stack`` in the Diagnostics
-section of the generated Xcode scheme.
-
-This property is initialized by the value of the variable
-:variable:`CMAKE_XCODE_SCHEME_MALLOC_STACK` if it is set
-when a target is created.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_THREAD_SANITIZER.rst b/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_THREAD_SANITIZER.rst
deleted file mode 100644
index bb70141..0000000
--- a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_THREAD_SANITIZER.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-XCODE_SCHEME_THREAD_SANITIZER
------------------------------
-
-Whether to enable ``Thread Sanitizer`` in the Diagnostics
-section of the generated Xcode scheme.
-
-This property is initialized by the value of the variable
-:variable:`CMAKE_XCODE_SCHEME_THREAD_SANITIZER` if it is set
-when a target is created.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_THREAD_SANITIZER_STOP.rst b/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_THREAD_SANITIZER_STOP.rst
deleted file mode 100644
index 5deadb1..0000000
--- a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_THREAD_SANITIZER_STOP.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-XCODE_SCHEME_THREAD_SANITIZER_STOP
-----------------------------------
-
-Whether to enable ``Thread Sanitizer - Pause on issues``
-in the Diagnostics section of the generated Xcode scheme.
-
-This property is initialized by the value of the variable
-:variable:`CMAKE_XCODE_SCHEME_THREAD_SANITIZER_STOP` if it is set
-when a target is created.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER.rst b/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER.rst
deleted file mode 100644
index 0cd823d..0000000
--- a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER
-------------------------------------------
-
-Whether to enable ``Undefined Behavior Sanitizer``
-in the Diagnostics section of the generated Xcode scheme.
-
-This property is initialized by the value of the variable
-:variable:`CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER`
-if it is set when a target is created.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP.rst b/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP.rst
deleted file mode 100644
index d1a9bca..0000000
--- a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP
------------------------------------------------
-
-Whether to enable ``Undefined Behavior Sanitizer`` option
-``Pause on issues``
-in the Diagnostics section of the generated Xcode scheme.
-
-This property is initialized by the value of the variable
-:variable:`CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP`
-if it is set when a target is created.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_WORKING_DIRECTORY.rst b/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_WORKING_DIRECTORY.rst
deleted file mode 100644
index f538f1d..0000000
--- a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_WORKING_DIRECTORY.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-XCODE_SCHEME_WORKING_DIRECTORY
-------------------------------
-
-Specify the ``Working Directory`` of the *Run* and *Profile*
-actions in the generated Xcode scheme. In case the value contains
-generator expressions those are evaluated.
-
-This property is initialized by the value of the variable
-:variable:`CMAKE_XCODE_SCHEME_WORKING_DIRECTORY` if it is set
-when a target is created.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_ZOMBIE_OBJECTS.rst b/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_ZOMBIE_OBJECTS.rst
deleted file mode 100644
index 6e70e8b..0000000
--- a/share/cmake-3.18/Help/prop_tgt/XCODE_SCHEME_ZOMBIE_OBJECTS.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-XCODE_SCHEME_ZOMBIE_OBJECTS
-------------------------------
-
-Whether to enable ``Zombie Objects``
-in the Diagnostics section of the generated Xcode scheme.
-
-This property is initialized by the value of the variable
-:variable:`CMAKE_XCODE_SCHEME_ZOMBIE_OBJECTS` if it is set
-when a target is created.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/prop_tgt/XCTEST.rst b/share/cmake-3.18/Help/prop_tgt/XCTEST.rst
deleted file mode 100644
index eb47e60..0000000
--- a/share/cmake-3.18/Help/prop_tgt/XCTEST.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-XCTEST
-------
-
-This target is a XCTest CFBundle on the Mac.
-
-This property will usually get set via the :command:`xctest_add_bundle`
-macro in :module:`FindXCTest` module.
-
-If a module library target has this property set to true it will be
-built as a CFBundle when built on the Mac.  It will have the directory
-structure required for a CFBundle.
-
-This property depends on :prop_tgt:`BUNDLE` to be effective.
diff --git a/share/cmake-3.18/Help/prop_tgt/XXX_OUTPUT_DIRECTORY.txt b/share/cmake-3.18/Help/prop_tgt/XXX_OUTPUT_DIRECTORY.txt
deleted file mode 100644
index 3ae5448..0000000
--- a/share/cmake-3.18/Help/prop_tgt/XXX_OUTPUT_DIRECTORY.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-Output directory in which to build |XXX| target files.
-
-This property specifies the directory into which |xxx| target files
-should be built.  The property value may use
-:manual:`generator expressions <cmake-generator-expressions(7)>`.
-Multi-configuration generators (VS, Xcode) append a per-configuration
-subdirectory to the specified directory unless a generator expression
-is used.
-
-This property is initialized by the value of the variable
-|CMAKE_XXX_OUTPUT_DIRECTORY| if it is set when a target is created.
diff --git a/share/cmake-3.18/Help/release/3.1.rst b/share/cmake-3.18/Help/release/3.1.rst
deleted file mode 100644
index 8bea28f..0000000
--- a/share/cmake-3.18/Help/release/3.1.rst
+++ /dev/null
@@ -1,425 +0,0 @@
-CMake 3.1 Release Notes
-***********************
-
-.. only:: html
-
-  .. contents::
-
-Changes made since CMake 3.0 include the following.
-
-Documentation Changes
-=====================
-
-* A new :manual:`cmake-compile-features(7)` manual was added.
-
-New Features
-============
-
-Generators
-----------
-
-* The :generator:`Visual Studio 14 2015` generator was added.
-
-Windows Phone and Windows Store
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-* Generators for Visual Studio 11 (2012) and above learned to generate
-  projects for Windows Phone and Windows Store.  One may set the
-  :variable:`CMAKE_SYSTEM_NAME` variable to ``WindowsPhone``
-  or ``WindowsStore`` on the :manual:`cmake(1)` command-line
-  or in a :variable:`CMAKE_TOOLCHAIN_FILE` to activate these platforms.
-  Also set :variable:`CMAKE_SYSTEM_VERSION` to ``8.0`` or ``8.1`` to
-  specify the version of Windows to be targeted.
-
-NVIDIA Nsight Tegra
-^^^^^^^^^^^^^^^^^^^
-
-* Generators for Visual Studio 10 (2010) and above learned to generate
-  projects for NVIDIA Nsight Tegra Visual Studio Edition.  One may set
-  the :variable:`CMAKE_SYSTEM_NAME` variable to ``Android`` on the
-  :manual:`cmake(1)` command-line or in a :variable:`CMAKE_TOOLCHAIN_FILE`
-  to activate this platform.
-
-Syntax
-------
-
-* The :manual:`cmake-language(7)` syntax for :ref:`Variable References` and
-  :ref:`Escape Sequences` was simplified in order to allow a much faster
-  implementation.  See policy :policy:`CMP0053`.
-
-* The :command:`if` command no longer automatically dereferences
-  variables named in quoted or bracket arguments.  See policy
-  :policy:`CMP0054`.
-
-Commands
---------
-
-* The :command:`add_custom_command` command learned to interpret
-  :manual:`cmake-generator-expressions(7)` in arguments to ``DEPENDS``.
-
-* The :command:`export(PACKAGE)` command learned to check the
-  :variable:`CMAKE_EXPORT_NO_PACKAGE_REGISTRY` variable to skip
-  exporting the package.
-
-* The :command:`file(STRINGS)` command gained a new ``ENCODING``
-  option to enable extraction of ``UTF-8`` strings.
-
-* The :command:`find_package` command learned to check the
-  :variable:`CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY` and
-  :variable:`CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY`
-  variables to skip searching the package registries.
-
-* The :command:`get_property` command learned a new ``INSTALL`` scope
-  for properties.
-
-* The :command:`install` command learned a ``MESSAGE_NEVER`` option
-  to avoid output during installation.
-
-* The :command:`set_property` command learned a new ``INSTALL`` scope
-  for properties.
-
-* The :command:`string` command learned a new ``GENEX_STRIP`` subcommand
-  which removes
-  :manual:`generator expression <cmake-generator-expressions(7)>`.
-
-* The :command:`string` command learned a new ``UUID`` subcommand
-  to generate a univerally unique identifier.
-
-* New :command:`target_compile_features` command allows populating the
-  :prop_tgt:`COMPILE_FEATURES` target property, just like any other
-  build variable.
-
-* The :command:`target_sources` command was added to add to the
-  :prop_tgt:`SOURCES` target property.
-
-Variables
----------
-
-* The Visual Studio generators for versions 8 (2005) and above
-  learned to read the target platform name from a new
-  :variable:`CMAKE_GENERATOR_PLATFORM` variable when it is
-  not specified as part of the generator name.  The platform
-  name may be specified on the :manual:`cmake(1)` command line
-  with the ``-A`` option, e.g. ``-G "Visual Studio 12 2013" -A x64``.
-
-* The :variable:`CMAKE_GENERATOR_TOOLSET` variable may now be
-  initialized in a toolchain file specified by the
-  :variable:`CMAKE_TOOLCHAIN_FILE` variable.  This is useful
-  when cross-compiling with the Xcode or Visual Studio
-  generators.
-
-* The :variable:`CMAKE_INSTALL_MESSAGE` variable was introduced to
-  optionally reduce output installation.
-
-Properties
-----------
-
-* New :prop_tgt:`CXX_STANDARD` and :prop_tgt:`CXX_EXTENSIONS` target
-  properties may specify values which CMake uses to compute required
-  compile options such as ``-std=c++11`` or ``-std=gnu++11``. The
-  :variable:`CMAKE_CXX_STANDARD` and :variable:`CMAKE_CXX_EXTENSIONS`
-  variables may be set to initialize the target properties.
-
-* New :prop_tgt:`C_STANDARD` and :prop_tgt:`C_EXTENSIONS` target
-  properties may specify values which CMake uses to compute required
-  compile options such as ``-std=c11`` or ``-std=gnu11``. The
-  :variable:`CMAKE_C_STANDARD` and :variable:`CMAKE_C_EXTENSIONS`
-  variables may be set to initialize the target properties.
-
-* New :prop_tgt:`COMPILE_FEATURES` target property may contain a list
-  of features required to compile a target.  CMake uses this
-  information to ensure that the compiler in use is capable of building
-  the target, and to add any necessary compile flags to support language
-  features.
-
-* New :prop_tgt:`COMPILE_PDB_NAME` and
-  :prop_tgt:`COMPILE_PDB_OUTPUT_DIRECTORY` target properties
-  were introduced to specify the MSVC compiler program database
-  file location (``cl /Fd``).  This complements the existing
-  :prop_tgt:`PDB_NAME` and :prop_tgt:`PDB_OUTPUT_DIRECTORY`
-  target properties that specify the linker program database
-  file location (``link /pdb``).
-
-* The :prop_tgt:`INTERFACE_LINK_LIBRARIES` target property now supports
-  a ``$<LINK_ONLY:...>``
-  :manual:`generator expression <cmake-generator-expressions(7)>`.
-
-* A new :prop_tgt:`INTERFACE_SOURCES` target property was introduced. This is
-  consumed by dependent targets, which compile and link the listed sources.
-
-* The :prop_tgt:`SOURCES` target property now contains
-  :manual:`generator expression <cmake-generator-expressions(7)>`
-  such as ``TARGET_OBJECTS`` when read at configure time, if
-  policy :policy:`CMP0051` is ``NEW``.
-
-* The :prop_tgt:`SOURCES` target property now generally supports
-  :manual:`generator expression <cmake-generator-expressions(7)>`.  The
-  generator expressions may be used in the :command:`add_library` and
-  :command:`add_executable` commands.
-
-* It is now possible to write and append to the :prop_tgt:`SOURCES` target
-  property.  The :variable:`CMAKE_DEBUG_TARGET_PROPERTIES` variable may be
-  used to trace the origin of sources.
-
-* A :prop_sf:`VS_DEPLOYMENT_CONTENT` source file property was added
-  to tell the Visual Studio generators to mark content for deployment
-  in Windows Phone and Windows Store projects.
-
-* A :prop_sf:`VS_DEPLOYMENT_LOCATION` source file property was added
-  to tell the Visual Studio generators the relative location of content
-  marked for deployment in Windows Phone and Windows Store projects.
-
-* The :prop_tgt:`VS_WINRT_COMPONENT` target property was created to
-  tell Visual Studio generators to compile a shared library as a
-  Windows Runtime (WinRT) component.
-
-* The :generator:`Xcode` generator learned to check source
-  file properties  :prop_sf:`XCODE_EXPLICIT_FILE_TYPE` and
-  :prop_sf:`XCODE_LAST_KNOWN_FILE_TYPE` for a custom Xcode
-  file reference type.
-
-Modules
--------
-
-* The :module:`BundleUtilities` module learned to resolve and replace
-  ``@rpath`` placeholders on OS X to correctly bundle applications
-  using them.
-
-* The :module:`CMakePackageConfigHelpers` module
-  :command:`configure_package_config_file` command learned a new
-  ``INSTALL_PREFIX`` option to generate package configuration files
-  meant for a prefix other than :variable:`CMAKE_INSTALL_PREFIX`.
-
-* The :module:`CheckFortranSourceCompiles` module was added to
-  provide a ``CHECK_Fortran_SOURCE_COMPILES`` macro.
-
-* The :module:`ExternalData` module learned to tolerate a ``DATA{}``
-  reference to a missing source file with a warning instead of
-  rejecting it with an error.  This helps developers write new
-  ``DATA{}`` references to test reference outputs that have not
-  yet been created.
-
-* The :module:`ExternalProject` module learned to support lzma-compressed
-  source tarballs with ``.7z``, ``.tar.xz``, and ``.txz`` extensions.
-
-* The :module:`ExternalProject` module ``ExternalProject_Add`` command
-  learned a new ``BUILD_ALWAYS`` option to cause the external project
-  build step to run every time the host project is built.
-
-* The :module:`ExternalProject` module ``ExternalProject_Add`` command
-  learned a new ``EXCLUDE_FROM_ALL`` option to cause the external
-  project target to have the :prop_tgt:`EXCLUDE_FROM_ALL` target
-  property set.
-
-* The :module:`ExternalProject` module ``ExternalProject_Add_Step`` command
-  learned a new ``EXCLUDE_FROM_MAIN`` option to cause the step to not be
-  a direct dependency of the main external project target.
-
-* The :module:`ExternalProject` module ``ExternalProject_Add`` command
-  learned a new ``DOWNLOAD_NO_PROGRESS`` option to disable progress
-  output while downloading the source tarball.
-
-* The :module:`FeatureSummary` module ``feature_summary`` API
-  learned to accept multiple values for the ``WHAT`` option and
-  combine them appropriately.
-
-* The :module:`FindCUDA` module learned to support ``fatbin`` and ``cubin``
-  modules.
-
-* The :module:`FindGTest` module ``gtest_add_tests`` macro learned
-  a new ``AUTO`` option to automatically read the :prop_tgt:`SOURCES`
-  target property of the test executable and scan the source files
-  for tests to be added.
-
-* The :module:`FindGLEW` module now provides imported targets.
-
-* The :module:`FindGLUT` module now provides imported targets.
-
-* The :module:`FindHg` module gained a new ``Hg_WC_INFO`` macro to
-  help run ``hg`` to extract information about a Mercurial work copy.
-
-* The :module:`FindOpenCL` module was introduced.
-
-* The :module:`FindOpenMP` module learned to support Fortran.
-
-* The :module:`FindPkgConfig` module learned to use the ``PKG_CONFIG``
-  environment variable value as the ``pkg-config`` executable, if set.
-
-* The :module:`FindXercesC` module was introduced.
-
-* The :module:`FindZLIB` module now provides imported targets.
-
-* The :module:`GenerateExportHeader` module ``generate_export_header``
-  function learned to allow use with :ref:`Object Libraries`.
-
-* The :module:`InstallRequiredSystemLibraries` module gained a new
-  ``CMAKE_INSTALL_OPENMP_LIBRARIES`` option to install MSVC OpenMP
-  runtime libraries.
-
-* The :module:`UseSWIG` module learned to detect the module name
-  from ``.i`` source files if possible to avoid the need to set
-  the ``SWIG_MODULE_NAME`` source file property explicitly.
-
-* The :module:`WriteCompilerDetectionHeader` module was added to allow
-  creation of a portable header file for compiler optional feature detection.
-
-Generator Expressions
----------------------
-
-* New ``COMPILE_FEATURES``
-  :manual:`generator expression <cmake-generator-expressions(7)>` allows
-  setting build properties based on available compiler features.
-
-CTest
------
-
-* The :command:`ctest_coverage` command learned to read variable
-  ``CTEST_COVERAGE_EXTRA_FLAGS`` to set ``CoverageExtraFlags``.
-
-* The :command:`ctest_coverage` command learned to support
-  Intel coverage files with the ``codecov`` tool.
-
-* The :command:`ctest_memcheck` command learned to support sanitizer
-  modes, including ``AddressSanitizer``, ``MemorySanitizer``,
-  ``ThreadSanitizer``, and ``UndefinedBehaviorSanitizer``.
-  Options may be set using the new
-  :variable:`CTEST_MEMORYCHECK_SANITIZER_OPTIONS` variable.
-
-CPack
------
-
-* :manual:`cpack(1)` gained an ``IFW`` generator to package using
-  Qt Framework Installer tools.  See the :cpack_gen:`CPack IFW Generator`.
-
-* :manual:`cpack(1)` gained ``7Z`` and ``TXZ`` generators supporting
-  lzma-compressed archives.
-
-* The :cpack_gen:`CPack DEB Generator` learned a new
-  :variable:`CPACK_DEBIAN_COMPRESSION_TYPE` variable to set the
-  tarball compression type.
-
-* The :cpack_gen:`CPack WIX Generator` learned to support
-  a :prop_inst:`CPACK_WIX_ACL` installed file property to
-  specify an Access Control List.
-
-Other
------
-
-* The :manual:`cmake(1)` ``-E`` option learned a new ``env`` command.
-
-* The :manual:`cmake(1)` ``-E tar`` command learned to support
-  lzma-compressed files.
-
-* :ref:`Object Libraries` may now have extra sources that do not
-  compile to object files so long as they would not affect linking
-  of a normal library (e.g. ``.dat`` is okay but not ``.def``).
-
-* Visual Studio generators for VS 8 and later learned to support
-  the ``ASM_MASM`` language.
-
-* The Visual Studio generators learned to treat ``.hlsl`` source
-  files as High Level Shading Language sources (using ``FXCompile``
-  in ``.vcxproj`` files).  Source file properties
-  :prop_sf:`VS_SHADER_TYPE`, :prop_sf:`VS_SHADER_MODEL`, and
-  :prop_sf:`VS_SHADER_ENTRYPOINT` were added added to specify the
-  shader type, model, and entry point name.
-
-New Diagnostics
-===============
-
-* Policy :policy:`CMP0052` introduced to control directories in the
-  :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` of exported targets.
-
-Deprecated and Removed Features
-===============================
-
-* In CMake 3.0 the :command:`target_link_libraries` command
-  accidentally began allowing unquoted arguments to use
-  :manual:`generator expressions <cmake-generator-expressions(7)>`
-  containing a (``;`` separated) list within them.  For example::
-
-    set(libs B C)
-    target_link_libraries(A PUBLIC $<BUILD_INTERFACE:${libs}>)
-
-  This is equivalent to writing::
-
-    target_link_libraries(A PUBLIC $<BUILD_INTERFACE:B C>)
-
-  and was never intended to work.  It did not work in CMake 2.8.12.
-  Such generator expressions should be in quoted arguments::
-
-    set(libs B C)
-    target_link_libraries(A PUBLIC "$<BUILD_INTERFACE:${libs}>")
-
-  CMake 3.1 again requires the quotes for this to work correctly.
-
-* Prior to CMake 3.1 the Makefile generators did not escape ``#``
-  correctly inside make variable assignments used in generated
-  makefiles, causing them to be treated as comments.  This made
-  code like::
-
-    add_compile_options(-Wno-#pragma-messages)
-
-  not work in Makefile generators, but work in other generators.
-  Now it is escaped correctly, making the behavior consistent
-  across generators.  However, some projects may have tried to
-  workaround the original bug with code like::
-
-    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-\\#pragma-messages")
-
-  This added the needed escape for Makefile generators but also
-  caused other generators to pass ``-Wno-\#pragma-messages`` to
-  the shell, which would work only in POSIX shells.
-  Unfortunately the escaping fix could not be made in a compatible
-  way so this platform- and generator-specific workaround no
-  longer works.  Project code may test the :variable:`CMAKE_VERSION`
-  variable value to make the workaround version-specific too.
-
-* Callbacks established by the :command:`variable_watch` command will no
-  longer receive the ``ALLOWED_UNKNOWN_READ_ACCESS`` access type when
-  the undocumented ``CMAKE_ALLOW_UNKNOWN_VARIABLE_READ_ACCESS`` variable is
-  set.  Uninitialized variable accesses will always be reported as
-  ``UNKNOWN_READ_ACCESS``.
-
-* The :module:`CMakeDetermineVSServicePack` module now warns that
-  it is deprecated and should not longer be used.  Use the
-  :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable instead.
-
-* The :module:`FindITK` module has been removed altogether.
-  It was a thin-wrapper around ``find_package(ITK ... NO_MODULE)``.
-  This produces much clearer error messages when ITK is not found.
-
-* The :module:`FindVTK` module has been removed altogether.
-  It was a thin-wrapper around ``find_package(VTK ... NO_MODULE)``.
-  This produces much clearer error messages when VTK is not found.
-
-  The module also provided compatibility support for finding VTK 4.0.
-  This capability has been dropped.
-
-Other Changes
-=============
-
-* The :manual:`cmake-gui(1)` learned to capture output from child
-  processes started by the :command:`execute_process` command
-  and display it in the output window.
-
-* The :manual:`cmake-language(7)` internal implementation of generator
-  expression and list expansion parsers have been optimized and shows
-  non-trivial speedup on large projects.
-
-* The Makefile generators learned to use response files with GNU tools
-  on Windows to pass library directories and names to the linker.
-
-* When generating linker command-lines, CMake now avoids repeating
-  items corresponding to SHARED library targets.
-
-* Support for the Open Watcom compiler has been overhauled.
-  The :variable:`CMAKE_<LANG>_COMPILER_ID` is now ``OpenWatcom``,
-  and the :variable:`CMAKE_<LANG>_COMPILER_VERSION` now uses
-  the Open Watcom external version numbering.  The external
-  version numbers are lower than the internal version number
-  by 11.
-
-* The ``cmake-mode.el`` major Emacs editing mode no longer
-  treats ``_`` as part of words, making it more consistent
-  with other major modes.
diff --git a/share/cmake-3.18/Help/release/3.15.rst b/share/cmake-3.18/Help/release/3.15.rst
deleted file mode 100644
index e68e7d3..0000000
--- a/share/cmake-3.18/Help/release/3.15.rst
+++ /dev/null
@@ -1,396 +0,0 @@
-CMake 3.15 Release Notes
-************************
-
-.. only:: html
-
-  .. contents::
-
-Changes made since CMake 3.14 include the following.
-
-New Features
-============
-
-Generators
-----------
-
-* The :generator:`Xcode` generator now supports per-target schemes.
-  See the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable and
-  :prop_tgt:`XCODE_GENERATE_SCHEME` target property.
-
-* The :generator:`Green Hills MULTI` generator has been updated:
-
-  * It now supports the :command:`add_custom_command` and
-    :command:`add_custom_target` commands.
-
-  * It is now available on Linux.
-
-Languages
----------
-
-* Preliminary support for the ``Swift`` language was added to the
-  :generator:`Ninja` generator:
-
-  * Use the :envvar:`SWIFTC` environment variable to specify a compiler.
-
-  * The :prop_tgt:`Swift_DEPENDENCIES_FILE` target property and
-    :prop_sf:`Swift_DEPENDENCIES_FILE` source file property were added
-    to customize dependency files.
-
-  * The :prop_tgt:`Swift_MODULE_NAME` target property was added to
-    customize the Swift module name.
-
-  * The :prop_sf:`Swift_DIAGNOSTICS_FILE` source property was added to
-    indicate where to write the serialised Swift diagnostics.
-
-  The Swift support is experimental, not considered stable, and may change
-  in future releases of CMake.
-
-Compilers
----------
-
-* The ``Clang`` compiler variant on Windows that targets the MSVC ABI
-  but has a GNU-like command line is now supported.
-
-* Support for the Clang-based ARM compiler was added with compiler id
-  ``ARMClang``.
-
-* Support was added for the IAR compiler architectures Renesas RX,
-  RL78, RH850 and Texas Instruments MSP430.
-
-* Support was added for the IAR compilers built for Linux (IAR BuildLx).
-
-Command-Line
-------------
-
-* The :envvar:`CMAKE_GENERATOR` environment variable was added
-  to specify a default generator to use when :manual:`cmake(1)` is
-  run without a ``-G`` option.  Additionally, environment variables
-  :envvar:`CMAKE_GENERATOR_PLATFORM`, :envvar:`CMAKE_GENERATOR_TOOLSET`,
-  and :envvar:`CMAKE_GENERATOR_INSTANCE` were created to configure
-  the generator.
-
-* The :manual:`cmake(1)` ``--build`` tool ``--target`` parameter gained support
-  for multiple targets, e.g. ``cmake --build . --target Library1 Library2``.
-  It now also has a short form ``-t`` alias, e.g.
-  ``cmake --build . -t Library1 Library2``.
-
-* The :manual:`cmake(1)` command gained a new ``--install`` option.
-  This may be used after building a project to run installation without
-  using the generated build system or the native build tool.
-
-* The :manual:`cmake(1)` command learned a new CLI option ``--loglevel``.
-
-* The :manual:`cmake(1)` ``-E remove_directory`` command-line tool learned
-  to support removing multiple directories.
-
-* The :manual:`cmake(1)` ``-E tar`` tool has been improved:
-
-  * It now continues adding files to an archive even if some of the files
-    are not readable.  This behavior is more consistent with the
-    classic ``tar`` tool.
-
-  * It now parses all flags, and if an invalid flag was provided, a
-    warning is issued.
-
-  * It now displays an error if no action flag was specified, along with a
-    list of possible actions: ``t`` (list), ``c`` (create) or ``x`` (extract).
-
-  * It now supports extracting (``-x``) or listing (``-t``) only specific
-    files or directories.
-
-  * It now supports Zstandard compression with a ``--zstd`` option.
-    Zstandard was designed to give a compression ratio comparable to that
-    of the DEFLATE (zip) algorithm, but faster, especially for decompression.
-
-Commands
---------
-
-* The :command:`add_custom_command` and :command:`add_custom_target` commands
-  gained a new ``JOB_POOL`` option that works with the :generator:`Ninja`
-  generator to set the pool variable on the build statement.
-
-* The :command:`add_library` command ``ALIAS`` option learned to support
-  import libraries of the ``UNKNOWN`` type.
-
-* The :command:`cmake_parse_arguments` command gained an additional
-  ``<prefix>_KEYWORDS_MISSING_VALUES`` output variable to report
-  keyword arguments that were given by the caller with no values.
-
-* The :command:`execute_process` command gained a ``COMMAND_ECHO`` option
-  and supporting :variable:`CMAKE_EXECUTE_PROCESS_COMMAND_ECHO` variable
-  to enable echoing of the command-line string before execution.
-
-* The :command:`file(INSTALL)` command learned a new argument,
-  ``FOLLOW_SYMLINK_CHAIN``, which can be used to recursively resolve and
-  install symlinks.
-
-* :command:`list` learned new sub-commands:
-  ``PREPEND``, ``POP_FRONT`` and ``POP_BACK``.
-
-* The :command:`message` command learned new types:
-  ``NOTICE``, ``VERBOSE``, ``DEBUG`` and ``TRACE``.
-
-* The :command:`string` learned a new sub-command ``REPEAT``.
-
-Variables
----------
-
-* The :variable:`CMAKE_CROSSCOMPILING_EMULATOR` variable and corresponding
-  :prop_tgt:`CROSSCOMPILING_EMULATOR` target property learned to support
-  arguments to the emulator.
-
-* The :variable:`CMAKE_FIND_PACKAGE_PREFER_CONFIG` variable was added to tell
-  :command:`find_package` calls to look for a package configuration
-  file first even if a find module is available.
-
-* The :variable:`CMAKE_FRAMEWORK` variable was added to initialize the
-  :prop_tgt:`FRAMEWORK` property on all targets.
-
-* The :variable:`CMAKE_VS_JUST_MY_CODE_DEBUGGING` variable and
-  :prop_tgt:`VS_JUST_MY_CODE_DEBUGGING` target property were added to
-  enable the Just My Code feature of the Visual Studio Debugger when
-  compiling with MSVC cl 19.05 and higher.
-
-* The :variable:`CMAKE_MSVC_RUNTIME_LIBRARY` variable and
-  :prop_tgt:`MSVC_RUNTIME_LIBRARY` target property were introduced to
-  select the runtime library used by compilers targeting the MSVC ABI.
-  See policy :policy:`CMP0091`.
-
-* The :variable:`CMAKE_PROJECT_INCLUDE` and
-  :variable:`CMAKE_PROJECT_INCLUDE_BEFORE` variables were added to allow
-  injection of custom code at the sites of :command:`project` calls
-  without knowing the project name a priori.
-
-Properties
-----------
-
-* The :prop_tgt:`ADDITIONAL_CLEAN_FILES` target property and
-  :prop_dir:`ADDITIONAL_CLEAN_FILES` directory property were added.
-  They allow to register additional files that should be removed during
-  the clean stage.
-
-* The :prop_tgt:`PUBLIC_HEADER` and :prop_tgt:`PRIVATE_HEADER` properties
-  may now be set on :ref:`Interface Libraries`. The headers specified by those
-  properties can be installed using the :command:`install(TARGETS)` command by
-  passing the ``PUBLIC_HEADER`` and ``PRIVATE_HEADER`` arguments respectively.
-
-* The :prop_tgt:`VS_PACKAGE_REFERENCES` target property was added to
-  tell :ref:`Visual Studio Generators` to add references to ``nuget``
-  packages.
-
-* The :prop_tgt:`VS_PROJECT_IMPORT` target property was added to allow
-  managed Visual Studio project files to import external ``.props`` files.
-
-* The :prop_tgt:`VS_NO_SOLUTION_DEPLOY` target property was added to
-  tell :ref:`Visual Studio Generators` whether to deploy an artifact
-  to the WinCE or Windows Phone target device.
-
-Modules
--------
-
-* The :module:`FindBoost` module was reworked to expose a more consistent
-  user experience between its "Config" and "Module" modes and with other
-  find modules in general.
-
-  * A new imported target ``Boost::headers`` is now defined (same
-    as ``Boost::boost``).
-
-  * New output variables ``Boost_VERSION_MACRO``,
-    ``Boost_VERSION_MAJOR``, ``Boost_VERSION_MINOR``,
-    ``Boost_VERSION_PATCH``, and ``Boost_VERSION_COUNT``
-    were added.
-
-  * The ``QUIET`` argument passed to :command:`find_package` is no
-    longer ignored in config mode.  Note that the CMake package shipped with
-    Boost ``1.70.0`` ignores the ``QUIET`` argument passed to
-    :command:`find_package`.  This is fixed in the next Boost release.
-
-  * The input switch ``Boost_DETAILED_FAILURE_MSG`` was removed.
-
-  * ``Boost_VERSION`` now reports the version in ``x.y.z``
-    format in module mode.  See policy :policy:`CMP0093`.
-
-* The :module:`FindCups` module now provides imported targets.
-
-* The :module:`FindEnvModules` module was added to use Lua- and TCL-based
-  environment modules in :ref:`CTest Scripts <CTest Script>`.
-
-* The :module:`FindGLEW` module now provides an interface more consistent
-  with what upstream GLEW provides in its own CMake package files.
-
-* The :module:`FindPkgConfig` now populates :prop_tgt:`INTERFACE_LINK_OPTIONS`
-  property of imported targets with other (non-library) linker flags.
-
-* The :module:`FindPostgreSQL` module learned to find debug and release
-  variants separately.
-
-* Modules :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
-  gained additional lookup strategies and controls, and a new default.
-  See policy :policy:`CMP0094`.
-
-* Modules :module:`FindPython`, :module:`FindPython2` and :module:`FindPython3`
-  gain a new target (respectively ``Python::Module``, ``Python2::Module``
-  and ``Python3::Module``) which can be used to develop Python modules.
-
-* Modules :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
-  gain capability to control how virtual environments are handled.
-
-* The :module:`UseSWIG` module learned to manage alternate library names
-  by passing ``-interface <library_name>`` for ``python`` language or
-  ``-dllimport <library_name>`` for ``CSharp`` language to the ``SWIG``
-  compiler.
-
-Generator Expressions
----------------------
-
-* The :manual:`generator expressions <cmake-generator-expressions(7)>`
-  ``C_COMPILER_ID``, ``CXX_COMPILER_ID``, ``CUDA_COMPILER_ID``,
-  ``Fortran_COMPILER_ID``, ``COMPILE_LANGUAGE``, ``COMPILE_LANG_AND_ID``, and
-  ``PLATFORM_ID`` learned to support matching one value from a comma-separated
-  list.
-
-* The ``$<CUDA_COMPILER_ID:...>`` and ``$<CUDA_COMPILER_VERSION:...>``
-  :manual:`generator expressions <cmake-generator-expressions(7)>` were added.
-
-* The ``$<COMPILE_LANG_AND_ID:...>`` generator expression was introduced to
-  allow specification of compile options for target files based on the
-  :variable:`CMAKE_<LANG>_COMPILER_ID` and :prop_sf:`LANGUAGE` of
-  each source file.
-
-* A ``$<FILTER:list,INCLUDE|EXCLUDE,regex>``
-  :manual:`generator expression <cmake-generator-expressions(7)>`
-  has been added.
-
-* A ``$<REMOVE_DUPLICATES:list>``
-  :manual:`generator expression <cmake-generator-expressions(7)>`
-  has been added.
-
-* The ``$<SHELL_PATH:...>`` :manual:`generator expression
-  <cmake-generator-expressions(7)>` gained support for a list of paths.
-
-* New ``$<TARGET_FILE*>`` :manual:`generator expressions
-  <cmake-generator-expressions(7)>` were added to retrieve the prefix, base
-  name, and suffix of the file names of various artifacts:
-
-  * ``$<TARGET_FILE_PREFIX:...>``
-  * ``$<TARGET_FILE_BASE_NAME:...>``
-  * ``$<TARGET_FILE_SUFFIX:...>``
-  * ``$<TARGET_LINKER_FILE_PREFIX:...>``
-  * ``$<TARGET_LINKER_FILE_BASE_NAME:...>``
-  * ``$<TARGET_LINKER_FILE_SUFFIX:...>``
-  * ``$<TARGET_PDB_FILE_BASE_NAME:...>``
-
-* The ``$<TARGET_OBJECTS:...>`` :manual:`generator expression
-  <cmake-generator-expressions(7)>` is now supported on ``SHARED``,
-  ``STATIC``, ``MODULE`` libraries and executables.
-
-CTest
------
-
-* The :command:`ctest_submit` command learned a new option: ``BUILD_ID``.
-  This can be used to store the ID assigned to this build by CDash to a
-  variable.
-
-* The :command:`ctest_update` command learned to honor a new variable:
-  :variable:`CTEST_UPDATE_VERSION_OVERRIDE`. This can be used to specify
-  the current version of your source tree rather than using the update
-  command to discover the current version that is checked out.
-
-CPack
------
-
-* The :cpack_gen:`CPack IFW Generator` gained a new
-  :variable:`CPACK_IFW_PACKAGE_STYLE_SHEET` variable to customize the
-  installer stylesheet.
-
-Deprecated and Removed Features
-===============================
-
-* The :manual:`cmake-server(7)` mode has been deprecated and will be
-  removed from a future version of CMake.  Please port clients to use
-  the :manual:`cmake-file-api(7)` instead.
-
-* The :prop_dir:`ADDITIONAL_MAKE_CLEAN_FILES` directory property is now
-  deprecated.  Use the :prop_dir:`ADDITIONAL_CLEAN_FILES` directory property
-  instead.
-
-* The variable :variable:`CMAKE_AUTOMOC_RELAXED_MODE` is considered
-  deprecated.  Support still exists but will be removed in future versions.
-
-* The :command:`export(PACKAGE)` command now does nothing unless
-  enabled via :variable:`CMAKE_EXPORT_PACKAGE_REGISTRY`.
-  See policy :policy:`CMP0090`.
-
-* The :generator:`Xcode` generator now requires at least Xcode 5.
-
-* An explicit deprecation diagnostic was added for policy ``CMP0066``
-  (``CMP0065`` and below were already deprecated).
-  The :manual:`cmake-policies(7)` manual explains that the OLD behaviors
-  of all policies are deprecated and that projects should port to the
-  NEW behaviors.
-
-Other Changes
-=============
-
-* If a feature specified by :command:`target_compile_features` is available
-  in the compiler's default standard level, CMake 3.14 and below incorrectly
-  added unnecessary ``-std=`` flags that could lower the standard level.
-  This bug has been fixed in CMake 3.15.  This behavior change may expose
-  bugs in existing projects that were relying on undocumented implementation
-  details.  Specifying compile features only ensures that the compiler runs
-  in a mode that has those features, not that any specific standard level is
-  used or explicit ``-std=`` flag passed.
-
-* CMake learned how to compile C++14 with the IBM AIX XL compiler
-  and the SunPro compiler and to compile C++20 with the AppleClang compiler.
-
-* With MSVC-like compilers the value of :variable:`CMAKE_<LANG>_FLAGS`
-  no longer contains warning flags like ``/W3`` by default.
-  See policy :policy:`CMP0092`.
-
-* IBM Clang-based XL compilers that define ``__ibmxl__`` now use the
-  compiler id ``XLClang`` instead of ``XL``.  See policy :policy:`CMP0089`.
-
-* The :command:`file(REMOVE)` and :command:`file(REMOVE_RECURSE)` commands
-  were changed to ignore empty arguments with a warning instead of treating
-  them as a relative path and removing the contents of the current directory.
-
-Updates
-=======
-
-Changes made since CMake 3.15.0 include the following.
-
-3.15.1
-------
-
-* In CMake 3.15.0 support for the GNU-like ``Clang`` compiler targeting the
-  MSVC ABI implemented :variable:`CMAKE_CXX_STANDARD` values 98 and 11 using
-  the corresponding ``-std=`` flags.  However, these modes do not work with
-  the MSVC standard library.  Therefore CMake 3.15.1 passes C++14 standard
-  flags even for C++98 and C++11.  This is consistent with MSVC itself which
-  always runs in a mode aware of C++14.
-
-* Preliminary Swift support added in 3.15.0 has been updated.
-
-3.15.2
-------
-
-* In CMake 3.15.0 and 3.15.1 the :variable:`CMAKE_FIND_PACKAGE_PREFER_CONFIG`
-  variable caused the :command:`find_package` command to fail on a missing
-  package even without the ``REQUIRED`` option.  This has been fixed.
-
-3.15.3
-------
-
-* ``CrayPrgEnv`` compiler wrapper support has been updated for the 19.06
-  release of the Cray Programming Environment for which the default linking
-  mode on XC Cray systems is now dynamic instead of static.
-
-3.15.4
-------
-
-* In CMake 3.15.0 through 3.15.3, the :prop_dir:`EXCLUDE_FROM_ALL`
-  directory property was regressed from pre-3.14 behavior and caused
-  targets within the directory to be excluded even from its own "all".
-  This has been fixed.
-  The bug also existed in 3.14.0 through 3.14.6 and is fixed in 3.14.7.
diff --git a/share/cmake-3.18/Help/release/3.16.rst b/share/cmake-3.18/Help/release/3.16.rst
deleted file mode 100644
index f3fdb08..0000000
--- a/share/cmake-3.18/Help/release/3.16.rst
+++ /dev/null
@@ -1,318 +0,0 @@
-CMake 3.16 Release Notes
-************************
-
-.. only:: html
-
-  .. contents::
-
-Changes made since CMake 3.15 include the following.
-
-New Features
-============
-
-Languages
----------
-
-* CMake learned to support the Objective C (``OBJC``) and Objective C++
-  (``OBJCXX``) languages.  They may be enabled via the :command:`project`
-  and :command:`enable_language` commands.  When ``OBJC`` or ``OBJCXX``
-  is enabled, source files with the ``.m`` or ``.mm``, respectively,
-  will be compiled as Objective C or C++.  Otherwise they will be treated
-  as plain C++ sources as they were before.
-
-Compilers
----------
-
-* The ``Clang`` compiler is now supported on ``Solaris``.
-
-Platforms
----------
-
-* On AIX, executables using the :prop_tgt:`ENABLE_EXPORTS` target property
-  now produce a linker import file with a ``.imp`` extension in addition
-  to the executable file.  Plugins (created via :command:`add_library` with
-  the ``MODULE`` option) that use :command:`target_link_libraries` to link
-  to the executable for its symbols are now linked using the import file.
-  The :command:`install(TARGETS)` command now installs the import file as
-  an ``ARCHIVE`` artifact.
-
-* On AIX, runtime linking is no longer enabled by default.  CMake provides
-  the linker enough information to resolve all symbols up front.
-  One may manually enable runtime linking for shared libraries and/or
-  loadable modules by adding ``-Wl,-G`` to their link flags
-  (e.g. in the :variable:`CMAKE_SHARED_LINKER_FLAGS` or
-  :variable:`CMAKE_MODULE_LINKER_FLAGS` variable).
-  One may manually enable runtime linking for executables by adding
-  ``-Wl,-brtl`` to their link flags (e.g. in the
-  :variable:`CMAKE_EXE_LINKER_FLAGS` variable).
-
-Command-Line
-------------
-
-* :manual:`cmake(1)` ``-E`` now supports ``true`` and ``false`` commands,
-  which do nothing while returning exit codes of 0 and 1, respectively.
-
-* :manual:`cmake(1)` gained a ``--trace-redirect=<file>`` command line
-  option that can be used to redirect ``--trace`` output to a file instead
-  of ``stderr``.
-
-* The :manual:`cmake(1)` ``--loglevel`` command line option has been
-  renamed to ``--log-level`` to make it consistent with the naming of other
-  command line options.  The ``--loglevel`` option is still supported to
-  preserve backward compatibility.
-
-Commands
---------
-
-* The :command:`add_test` command learned the option ``COMMAND_EXPAND_LISTS``
-  which causes lists in the ``COMMAND`` argument to be expanded, including
-  lists created by generator expressions.
-
-* The :command:`file` command learned a new sub-command,
-  ``GET_RUNTIME_DEPENDENCIES``, which allows you to recursively get the list of
-  libraries linked by an executable or library. This sub-command is intended as
-  a replacement for :module:`GetPrerequisites`.
-
-* The :command:`find_file`, :command:`find_library`, :command:`find_path`,
-  :command:`find_package`, and :command:`find_program` commands have learned to
-  check the following variables to control the default behavior for groups of
-  search locations:
-
-  * :variable:`CMAKE_FIND_USE_PACKAGE_ROOT_PATH` - Controls the default
-    behavior of searching the :variable:`<PackageName>_ROOT` variables.
-
-  * :variable:`CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH` - Controls the default
-    behavior of searching the CMake-specific environment variables.
-
-  * :variable:`CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH` - Controls the default
-    behavior of searching the standard system environment variables.
-
-  * :variable:`CMAKE_FIND_USE_CMAKE_PATH` - Controls the default behavior of
-    searching the CMake-specific cache variables.
-
-  * :variable:`CMAKE_FIND_USE_CMAKE_SYSTEM_PATH` - Controls the default
-    behavior of searching the platform-specific CMake variables.
-
-* The :command:`find_package` command has learned to check the
-  :variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY` variable to control the default
-  behavior of searching the CMake user package registry and to check the
-  :variable:`CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY` variable to control
-  the default behavior of searching the CMake system package registry.
-
-* The :command:`message` command learned indentation control with the new
-  :variable:`CMAKE_MESSAGE_INDENT` variable.
-
-* The :command:`target_precompile_headers` command was added to specify
-  a list of headers to precompile for faster compilation times.
-
-Variables
----------
-
-* The :variable:`CMAKE_CUDA_RESOLVE_DEVICE_SYMBOLS` variable has been
-  introduced to optionally initialize the
-  :prop_tgt:`CUDA_RESOLVE_DEVICE_SYMBOLS` target property.
-
-* The :variable:`CMAKE_ECLIPSE_RESOURCE_ENCODING` variable was added to
-  specify the resource encoding for the the :generator:`Eclipse CDT4` extra
-  generator.
-
-* The :variable:`CMAKE_UNITY_BUILD` variable was added to initialize the
-  :prop_tgt:`UNITY_BUILD` target property to tell generators to batch
-  include source files for faster compilation times.
-
-Properties
-----------
-
-* The :prop_tgt:`BUILD_RPATH` and :prop_tgt:`INSTALL_RPATH` target properties
-  now support :manual:`generator expressions <cmake-generator-expressions(7)>`.
-
-* The :prop_tgt:`INSTALL_REMOVE_ENVIRONMENT_RPATH` target property was
-  added to remove compiler-defined ``RPATH`` entries from a target.
-  This property is initialized by the
-  :variable:`CMAKE_INSTALL_REMOVE_ENVIRONMENT_RPATH` variable.
-
-* The :prop_tgt:`PRECOMPILE_HEADERS` target property was added to specify
-  a list of headers to precompile for faster compilation times.
-  Set it using the :command:`target_precompile_headers` command.
-
-* The :prop_tgt:`UNITY_BUILD` target property was added to tell
-  generators to batch include source files for faster compilation
-  times.
-
-* The :prop_tgt:`VS_CONFIGURATION_TYPE` target property now supports
-  :manual:`generator expressions <cmake-generator-expressions(7)>`.
-
-* The :prop_tgt:`VS_DPI_AWARE` target property was added to tell
-  :ref:`Visual Studio Generators` to set the ``EnableDpiAwareness``
-  property in ``.vcxproj`` files.
-
-* The :prop_tgt:`XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING` target property was
-  added to tell the :generator:`Xcode` generator to set the value of the
-  ``Allow debugging when using document Versions Browser`` schema option.
-
-Modules
--------
-
-* The :module:`FindDoxygen` module :command:`doxygen_add_docs` command
-  gained a new ``USE_STAMP_FILE`` option.  When this option present,
-  the custom target created by the command will only re-run Doxygen if
-  any of the source files have changed since the last successful run.
-
-* The :module:`FindGnuTLS` module now provides an imported target.
-
-* The :module:`FindPackageHandleStandardArgs` module
-  :command:`find_package_handle_standard_args` command gained
-  a new ``REASON_FAILURE_MESSAGE`` option to specify a message
-  giving the reason for the failure.
-
-* The :module:`FindPkgConfig` module :command:`pkg_search_module` macro
-  now defines a ``<prefix>_MODULE_NAME`` result variable containing the
-  first matching module name.
-
-* The :module:`FindPython3` and :module:`FindPython` modules gained
-  options to control which ``ABIs`` will be searched.
-
-* The :module:`FindPython3`, :module:`FindPython2`, and :module:`FindPython`
-  modules now support direct specification of artifacts via cache entries.
-
-Autogen
--------
-
-* When using :prop_tgt:`AUTOMOC`, CMake now generates the ``-p`` path prefix
-  option for ``moc``.  This ensures that ``moc`` output files are identical
-  on different build setups (given, that the headers compiled by ``moc`` are
-  in an :command:`include directory <target_include_directories>`).
-  Also it ensures that ``moc`` output files will compile correctly when the
-  source and/or build directory is a symbolic link.
-
-  The ``moc`` path prefix generation behavior can be configured by setting
-  the new :variable:`CMAKE_AUTOMOC_PATH_PREFIX` variable and/or
-  :prop_tgt:`AUTOMOC_PATH_PREFIX` target property.
-
-CTest
------
-
-* :manual:`ctest(1)` now has the ability to schedule tests based on resource
-  requirements for each test. See :ref:`ctest-resource-allocation` for
-  details.
-
-* A new test property, :prop_test:`SKIP_REGULAR_EXPRESSION`, has been added.
-  This property is similar to :prop_test:`FAIL_REGULAR_EXPRESSION` and
-  :prop_test:`PASS_REGULAR_EXPRESSION`, but with the same meaning as
-  :prop_test:`SKIP_RETURN_CODE`. This is useful, for example, in cases where
-  the user has no control over the return code of the test. For example, in
-  Catch2, the return value is the number of assertion failed, therefore it is
-  impossible to use it for :prop_test:`SKIP_RETURN_CODE`.
-
-CPack
------
-
-* :manual:`cpack(1)` learned support for multiple configurations for ``-C``
-  option.
-
-* The :cpack_gen:`CPack DEB Generator` is now able to format generic text
-  (usually used as the description for multiple CPack generators) according
-  to the `Debian Policy Manual`_.  See the
-  :variable:`CPACK_PACKAGE_DESCRIPTION_FILE` and
-  :variable:`CPACK_DEBIAN_<COMPONENT>_DESCRIPTION` variables.
-
-* The :cpack_gen:`CPack Archive Generator` learned to generate ``.tar.zst``
-  packages with Zstandard compression.
-
-.. _`Debian Policy Manual`: https://www.debian.org/doc/debian-policy/ch-controlfields.html#description
-
-Deprecated and Removed Features
-===============================
-
-* An explicit deprecation diagnostic was added for policy ``CMP0067``
-  (``CMP0066`` and below were already deprecated).
-  The :manual:`cmake-policies(7)` manual explains that the OLD behaviors
-  of all policies are deprecated and that projects should port to the
-  NEW behaviors.
-
-* The :variable:`CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY` variable has been
-  deprecated.  Use the :variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY` variable
-  instead.
-
-* The :module:`GetPrerequisites` module has been deprecated, as it has been
-  superceded by :command:`file(GET_RUNTIME_DEPENDENCIES)`.
-
-* The ``CPACK_INSTALL_SCRIPT`` variable has been deprecated in favor of the
-  new, more accurately named :variable:`CPACK_INSTALL_SCRIPTS` variable.
-
-Other Changes
-=============
-
-* The :manual:`cmake(1)` ``-C <initial-cache>`` option now evaluates the
-  initial cache script with :variable:`CMAKE_SOURCE_DIR` and
-  :variable:`CMAKE_BINARY_DIR` set to the top-level source and build trees.
-
-* The :manual:`cmake(1)` ``-E remove_directory`` command-line tool,
-  when given the path to a symlink to a directory, now removes just
-  the symlink.  It no longer removes content of the linked directory.
-
-* The :manual:`ctest(1)`  ``--build-makeprogram`` command-line option now
-  specifies the make program used when configuring a project with the
-  :generator:`Ninja` generator or the :ref:`Makefile Generators`.
-
-* The :module:`ExternalProject` module :command:`ExternalProject_Add` command
-  has been updated so that ``GIT_SUBMODULES ""`` initializes no submodules.
-  See policy :policy:`CMP0097`.
-
-* The :module:`FindGTest` module has been updated to recognize
-  MSVC build trees generated by GTest 1.8.1.
-
-* The :command:`project` command no longer strips leading zeros in version
-  components.  See policy :policy:`CMP0096`.
-
-* The Qt Compressed Help file is now named ``CMake.qch``, which no longer
-  contains the release version in the file name.  When CMake is upgraded
-  in-place, the name and location of this file will remain constant.
-  Tools such as IDEs, help viewers, etc. should now be able to refer to this
-  file at a fixed location that remains valid across CMake upgrades.
-
-* ``RPATH`` entries are properly escaped in the generated CMake scripts
-  used for installation.  See policy :policy:`CMP0095`.
-
-* When using :variable:`CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS` on Windows the
-  auto-generated exports are now updated only when the object files
-  providing the symbols are updated.
-
-Updates
-=======
-
-Changes made since CMake 3.16.0 include the following.
-
-3.16.2
-------
-
-* CMake 3.16.0 and 3.16.1 processed ``.hh`` files with :prop_tgt:`AUTOMOC`.
-  This was a behavior change from CMake 3.15 and below that can break
-  existing projects, so it has been reverted as of 3.16.2.
-
-3.16.5
-------
-
-* The :module:`FindPython`, :module:`FindPython2`, and :module:`FindPython3`
-  modules no longer create cache entries for ``Python{,2,3}_LIBRARY_RELEASE``
-  and ``Python{,2,3}_LIBRARY_DEBUG``.  Those values are always computed from
-  other results and so should not be cached.  The entries were created by
-  CMake 3.16.0 through 3.16.4 but were always ``FORCE``-set and could not
-  be meaningfully edited by users.
-
-  Additionally, the modules no longer expose their internal ``_Python*``
-  cache entries publicly.  CMake 3.16.0 through 3.16.4 accidentally
-  made them visible as advanced cache entries.
-
-3.16.7
-------
-
-* Selection of the Objective C or C++ compiler now considers the
-  :envvar:`CC` or :envvar:`CXX` environment variable if the
-  :envvar:`OBJC` or :envvar:`OBJCXX` environment variable is not set.
-
-* The :module:`FindPkgConfig` module now extracts include directories
-  prefixed with ``-isystem`` into the ``*_INCLUDE_DIRS`` variables and
-  :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` target properties.
-  Previously they would be places in ``*_CFLAGS_OTHER`` variables and
-  :prop_tgt:`INTERFACE_COMPILE_OPTIONS` target properties.
diff --git a/share/cmake-3.18/Help/release/3.17.rst b/share/cmake-3.18/Help/release/3.17.rst
deleted file mode 100644
index b7c66d8..0000000
--- a/share/cmake-3.18/Help/release/3.17.rst
+++ /dev/null
@@ -1,348 +0,0 @@
-CMake 3.17 Release Notes
-************************
-
-.. only:: html
-
-  .. contents::
-
-Changes made since CMake 3.16 include the following.
-
-New Features
-============
-
-Generators
-----------
-
-* :manual:`cmake(1)` gained a :generator:`Ninja Multi-Config` generator,
-  which is similar to the :generator:`Ninja` generator but can be used to build
-  multiple configurations at once.
-
-* :ref:`Visual Studio Generators` learned to support per-config sources.
-  Previously only :ref:`Command-Line Build Tool Generators` supported them.
-
-* :ref:`Visual Studio Generators` for VS 2010 and above now support
-  specifying the ``VCTargetsPath`` value for project files in
-  :variable:`CMAKE_GENERATOR_TOOLSET` setting.
-
-* :ref:`Visual Studio Generators` for VS 2010 and above learned to
-  support .NET Standard and .NET Core.  See the
-  :prop_tgt:`DOTNET_TARGET_FRAMEWORK` target property and
-  associated :variable:`CMAKE_DOTNET_TARGET_FRAMEWORK` variable.
-
-Languages
----------
-
-* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
-  now offers meta-features for the CUDA language standard levels
-  (e.g. ``cuda_std_03``, ``cuda_std_14``).  See
-  :prop_gbl:`CMAKE_CUDA_KNOWN_FEATURES`.
-
-Compilers
----------
-
-* The IBM XL Fortran compiler is now supported by the :generator:`Ninja`
-  generator.
-
-Command-Line
-------------
-
-* :manual:`cmake(1)` gained a ``--debug-find`` command-line option to
-  enable additional human-readable output on where ``find_*`` commands search.
-
-* :manual:`cmake(1)` gained a ``--trace-format`` command-line option that
-  can be used to set the ``--trace`` output format. Currently, the old
-  human readable and the new JSON format are supported. The new JSON format
-  is easier to parse automatically than the existing format.
-
-* :manual:`cmake(1)` gained a ``-E rm`` command-line tool that can be
-  used to remove directories and files.  This supersedes the existing
-  ``-E remove`` and ``-E remove_directory`` tools and has better semantics.
-
-Commands
---------
-
-* The :command:`add_custom_command` command learned to interpret paths in
-  ``DEPENDS`` arguments that are specified relative to the current
-  binary directory.
-
-* The :command:`foreach` command learned a new ``ZIP_LISTS`` option to iterate
-  over multiple lists simultaneously.
-
-* The :command:`load_cache(READ_WITH_PREFIX)` command mode is now allowed
-  when using ``cmake -P`` to :ref:`Run a Script <Script Processing Mode>`.
-
-* The :command:`message` command learned to output context provided in
-  the :variable:`CMAKE_MESSAGE_CONTEXT` variable for log levels
-  ``NOTICE`` and below.  Enable this output with the new ``--log-context``
-  command-line option or :variable:`CMAKE_MESSAGE_CONTEXT_SHOW` variable.
-
-* The :command:`message` command gained new keywords ``CHECK_START``,
-  ``CHECK_PASS`` and ``CHECK_FAIL``.
-
-* The :command:`target_compile_options` command now honors the ``BEFORE``
-  keyword more consistently.  See policy :policy:`CMP0101`.
-
-Variables
----------
-
-* A :variable:`CMAKE_CTEST_ARGUMENTS` variable was added to specify a list
-  of command-line arguments passed to CTest when running through the
-  ``test`` (or ``RUN_TESTS``) target of the generated build system.
-
-* The following variables are now defined inside a :command:`function`:
-
-  - :variable:`CMAKE_CURRENT_FUNCTION`
-  - :variable:`CMAKE_CURRENT_FUNCTION_LIST_DIR`
-  - :variable:`CMAKE_CURRENT_FUNCTION_LIST_FILE`
-  - :variable:`CMAKE_CURRENT_FUNCTION_LIST_LINE`
-
-* The :variable:`CMAKE_CUDA_RUNTIME_LIBRARY` variable and
-  :prop_tgt:`CUDA_RUNTIME_LIBRARY` target property were introduced to
-  select the CUDA runtime library used when linking targets that
-  use CUDA.
-
-* The :variable:`CMAKE_FIND_DEBUG_MODE` variable was introduced to
-  print extra ``find_*`` call information during the cmake run to standard
-  error. Output is designed for human consumption and not for parsing.
-
-* The :variable:`CMAKE_EXPORT_COMPILE_COMMANDS` variable now takes its
-  initial value from the :envvar:`CMAKE_EXPORT_COMPILE_COMMANDS` environment
-  variable if no explicit configuration is given.
-
-* The :variable:`CMAKE_<LANG>_COMPILER_LAUNCHER` variable, if not set
-  explicitly, now takes its initial value from the
-  :envvar:`CMAKE_<LANG>_COMPILER_LAUNCHER` environment variable.
-
-* The :variable:`CMAKE_MESSAGE_LOG_LEVEL` variable can now be used
-  to persist a log level between CMake runs, unlike the ``--log-level``
-  command line option which only applies to that particular run.
-
-* The :variable:`CMAKE_XCODE_SCHEME_ENVIRONMENT` variable was added
-  to initialize the :prop_tgt:`XCODE_SCHEME_ENVIRONMENT` target property.
-
-* The :variable:`CMAKE_XCODE_SCHEME_WORKING_DIRECTORY` variable and
-  associated :prop_tgt:`XCODE_SCHEME_WORKING_DIRECTORY` target property
-  were added to tell the :generator:`Xcode` generator to set the value of
-  the ``Custom Working Directory`` schema option.
-
-Properties
-----------
-
-* The :prop_tgt:`AIX_EXPORT_ALL_SYMBOLS` target property and associated
-  :variable:`CMAKE_AIX_EXPORT_ALL_SYMBOLS` variable were created to
-  optionally explicitly disable automatic export of symbols from shared
-  libraries on AIX.
-
-* The :prop_tgt:`DEPRECATION` target property was added to mark
-  a target as deprecated.  If a linked target is marked as
-  deprecated, a warning with the deprecation message is issued
-  at generate time.
-
-* The :prop_tgt:`INSTALL_NAME_DIR` target property now supports
-  :manual:`generator expressions <cmake-generator-expressions(7)>`.
-  In particular, the ``$<INSTALL_PREFIX>`` generator expression can
-  be used to set the directory relative to the install-time prefix.
-
-* Target properties :prop_tgt:`MACHO_COMPATIBILITY_VERSION` and
-  :prop_tgt:`MACHO_CURRENT_VERSION` were added to set the
-  ``compatibility_version`` and ``curent_version``, respectively,
-  for Mach-O binaries.  For backwards compatibility, if these properties
-  are not set, :prop_tgt:`SOVERSION` and :prop_tgt:`VERSION`
-  are used respectively as fallbacks.
-
-* The :prop_tgt:`VS_DOTNET_DOCUMENTATION_FILE` target property was added
-  to tell :ref:`Visual Studio Generators` to generate a ``DocumentationFile``
-  reference in ``.csproj`` files.
-
-Modules
--------
-
-* The :module:`ExternalProject` module :command:`ExternalProject_Add`
-  command gained a ``GIT_SUBMODULES_RECURSE`` option to specify whether
-  Git submodules should be updated recursively.  The default is on to
-  preserve existing behavior.
-
-* The :module:`FindCUDAToolkit` module was added to find the
-  CUDA Toolkit without enabling CUDA as a language.
-
-* The :module:`FindCURL` module learned to find CURL using
-  the ``CURLConfig.cmake`` package configuration file generated by
-  CURL's cmake buildsystem.  It also gained a new ``CURL_NO_CURL_CMAKE``
-  option to disable this behavior.
-
-* The :module:`FindFLEX` module's ``FLEX_TARGET`` command now runs ``flex``
-  with :variable:`CMAKE_CURRENT_BINARY_DIR` as the working directory.
-  See policy :policy:`CMP0098`.
-
-* The :module:`FindLibArchive` module now provides an imported target
-  for libarchive.
-
-* The :module:`FindPython` module has learned to find Python components
-  in active virtual environments managed by ``conda``.
-
-* The :module:`FindPython3` and :module:`FindPython` modules gained,
-  respectively, variable ``Python3_SOABI`` and ``Python_SOABI`` giving
-  the standard extension suffix for modules. Moreover, commands
-  ``Python3_add_library()`` and ``Python_add_library()`` gained the option
-  ``WITH_SOABI`` to prefix the library suffix with the value of ``SOABI``.
-
-* The :module:`FindLibXml2` module now provides an imported target for the
-  ``xmllint`` executable.
-
-Autogen
--------
-
-* :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC` learned to process headers
-  with a ``.hh`` extension.  See policy :policy:`CMP0100`.
-
-CTest
------
-
-* The :variable:`CTEST_CONFIGURATION_TYPE` variable is now set from the
-  command line when :manual:`ctest(1)` is invoked with ``-C <cfg>``.
-
-* The :manual:`ctest(1)` tool gained support for Dr. Memory to run
-  memcheck runs.
-
-* The :manual:`ctest(1)` tool gained a ``--no-tests=<[error|ignore]>`` option
-  to explicitly set and unify the behavior between direct invocation and
-  script mode if no tests were found.
-
-* The :manual:`ctest(1)` tool gained a ``--repeat <mode>:<n>`` option
-  to specify conditions in which to repeat tests.  This generalizes
-  the existing ``--repeat-until-fail <n>`` option to add modes for
-  ``until-pass`` and ``after-timeout``.
-
-* The :command:`ctest_test` command gained a ``REPEAT <mode>:<n>`` option
-  to specify conditions in which to repeat tests.
-
-CPack
------
-
-* The :cpack_gen:`CPack DragNDrop Generator` learned to use
-  the :variable:`CPACK_DMG_<component>_FILE_NAME` variable
-  to set a custom filename when packaging components into
-  their own DMGs.
-
-* The :cpack_gen:`CPack DragNDrop Generator` learned to handle
-  RTF formatted license files.  When :variable:`CPACK_DMG_SLA_DIR`
-  variable is set, ``<language>.license.rtf`` is considered, but
-  only as a fallback when the plaintext (``.txt``) file is not found
-  in order to maintain backwards compatibility.
-
-* The :cpack_gen:`CPack NSIS Generator` gained a new variable
-  :variable:`CPACK_NSIS_MUI_HEADERIMAGE` to set the header image.
-  To not break existing setups, it still defaults to
-  :variable:`CPACK_PACKAGE_ICON` if the new variable is not set.
-
-* The :cpack_gen:`CPack NSIS Generator` now supports
-  :variable:`CPACK_NSIS_UNINSTALL_NAME`.
-  This can be used to specify the name of the Uninstall program.
-
-* The :cpack_gen:`CPack NSIS Generator` now supports
-  :variable:`CPACK_NSIS_WELCOME_TITLE` and
-  :variable:`CPACK_NSIS_WELCOME_TITLE_3LINES`.
-  These can be used to specify the welcome page title and display it in 3 lines.
-
-* The :cpack_gen:`CPack NSIS Generator` now supports
-  :variable:`CPACK_NSIS_FINISH_TITLE` and
-  :variable:`CPACK_NSIS_FINISH_TITLE_3LINES`.
-  These can be used to specify the finish page title and display it in 3 lines.
-
-* The :cpack_gen:`CPack productbuild Generator` gained support for a
-  :variable:`CPACK_PRODUCTBUILD_BACKGROUND` variable to specify a background
-  image for the macOS installer.
-
-Other
------
-
-* :manual:`ccmake(1)` now displays cache values using colors
-  based on the entry type if the terminal supports color.
-
-* :manual:`ccmake(1)` now displays messages and a progress bar during
-  configure and generate.  It will keep the output displayed if any
-  errors or warnings occurred.
-
-Deprecated and Removed Features
-===============================
-
-* An explicit deprecation diagnostic was added for policy ``CMP0068``
-  and policy ``CMP0069`` (``CMP0067`` and below were already deprecated).
-  The :manual:`cmake-policies(7)` manual explains that the OLD behaviors
-  of all policies are deprecated and that projects should port to the
-  NEW behaviors.
-
-* The :cpack_gen:`CPack PackageMaker Generator` generator has been
-  deprecated because Xcode no longer distributes the PackageMaker tools.
-  The undocumented ``OSXX11`` generator has also been deprecated.
-
-* The :manual:`cmake(1)` command-line ``-E remove`` and ``-E remove_directory``
-  tools are deprecated in favor of the new ``-E rm`` tool.  The older tools
-  always returned 0 if a named path did not exist even without the force
-  option and cannot be fixed without breaking compatibility, and so have
-  been superseded.
-
-* The :cpack_gen:`CPack NSIS Generator` now requires NSIS 3.0 or later.
-
-Other Changes
-=============
-
-* The :manual:`file API <cmake-file-api(7)>` index file now emits a
-  ``multiConfig`` flag specifying whether or not the generator supports
-  multiple output configurations.
-
-* Target link properties :prop_tgt:`INTERFACE_LINK_OPTIONS`,
-  :prop_tgt:`INTERFACE_LINK_DIRECTORIES` and
-  :prop_tgt:`INTERFACE_LINK_DEPENDS` are now transitive over private
-  dependencies on static libraries.
-  See policy :policy:`CMP0099`.
-
-* When using MinGW tools, the :command:`find_library` command no longer
-  finds ``.dll`` files by default.  Instead, it expects ``.dll.a`` import
-  libraries to be available.
-
-* The :generator:`MinGW Makefiles` generator no longer issues an error if
-  ``sh.exe`` is present in the environment's ``PATH``.
-
-* The :generator:`Ninja` generator now prefers the first ninja build
-  tool to appear in the ``PATH`` no matter whether it is called
-  ``ninja-build``, ``ninja``, or ``samu``.  Previously the first
-  of those names to appear anywhere in the ``PATH`` would be preferred.
-
-* With SDCC the ``sdar`` tool is now preferred over ``sdcclib`` as librarian.
-  The latter was deprecated by SDCC 3.2.0 and removed in SDCC 3.8.6.
-
-* With SDCC the default flags no longer include any target-specific flags.
-  Previously the default flags were hard-coded for 8051.
-
-* The :variable:`CMAKE_VS_GLOBALS` variable value now applies during
-  compiler identification and in targets created by the
-  :command:`add_custom_target` command.
-
-* The :generator:`Xcode` generator no longer hard-codes ``-Wmost``,
-  ``-Wno-four-char-constants``, and ``-Wno-unknown-pragmas`` warning flags.
-
-Updates
-=======
-
-Changes made since CMake 3.17.0 include the following.
-
-3.17.1
-------
-
-* CMake 3.17.0 updated the :cpack_gen:`CPack NSIS Generator` with changes
-  that require NSIS 3.0 or later.  CMake 3.17.1 now enforces the use
-  of a sufficiently new version.
-
-3.17.3
-------
-
-* Selection of the Objective C or C++ compiler now considers the
-  :envvar:`CC` or :envvar:`CXX` environment variable if the
-  :envvar:`OBJC` or :envvar:`OBJCXX` environment variable is not set.
-
-* The :module:`FindPkgConfig` module now extracts include directories
-  prefixed with ``-isystem`` into the ``*_INCLUDE_DIRS`` variables and
-  :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` target properties.
-  Previously they would be places in ``*_CFLAGS_OTHER`` variables and
-  :prop_tgt:`INTERFACE_COMPILE_OPTIONS` target properties.
diff --git a/share/cmake-3.18/Help/release/3.18.rst b/share/cmake-3.18/Help/release/3.18.rst
deleted file mode 100644
index ba80d2b..0000000
--- a/share/cmake-3.18/Help/release/3.18.rst
+++ /dev/null
@@ -1,341 +0,0 @@
-CMake 3.18 Release Notes
-************************
-
-.. only:: html
-
-  .. contents::
-
-Changes made since CMake 3.17 include the following.
-
-New Features
-============
-
-Languages
----------
-
-* The ``CUDA`` language can now be compiled using Clang on non-Windows
-  platforms. Separable compilation is not yet supported on any platform.
-
-Command-Line
-------------
-
-* :manual:`cmake(1)` gained support for profiling of CMake scripts through
-  the parameters ``--profiling-output`` and ``--profiling-format``.
-
-* :manual:`cmake(1)` gained a ``cat`` command line
-  option that can be used to concatenate files and print them
-  on standard output.
-
-Commands
---------
-
-* The :command:`add_library` and :command:`add_executable` commands
-  learned to create :ref:`Alias Targets` referencing non-``GLOBAL``
-  :ref:`Imported Targets`.
-
-* The :command:`cmake_language()` command was added for meta-operations on
-  scripted or built-in commands, starting with a mode to ``CALL`` other
-  commands, and ``EVAL CODE`` to inplace evaluate a CMake script.
-
-* The :command:`execute_process` command gained the ``ECHO_OUTPUT_VARIABLE``
-  and ``ECHO_ERROR_VARIABLE`` options.
-
-* The :command:`export` command now raise an error if used multiple times with
-  same ``FILE`` without ``APPEND``. See policy :policy:`CMP0103`.
-
-* The :command:`file` command gained the ``ARCHIVE_CREATE`` and
-  ``ARCHIVE_EXTRACT`` subcommands to expose the :manual:`cmake(1)` ``-E tar``
-  functionality to CMake scripting code.
-
-* The :command:`file(CONFIGURE)` subcommand was created in order to replicate
-  the :command:`configure_file` functionality without resorting to a
-  pre-existing file on disk as input. The content is instead passed as a
-  string.
-
-* The :command:`file(UPLOAD)` command gained ``TLS_VERIFY`` and ``TLS_CAINFO``
-  options to control server certificate verification.
-
-* The :command:`find_program`, :command:`find_library`, :command:`find_path`
-  and :command:`find_file` commands gained a new ``REQUIRED`` option that will
-  stop processing with an error message if nothing is found.
-
-* The :command:`get_property` command with ``SOURCE`` scope gained the
-  ``DIRECTORY`` and ``TARGET_DIRECTORY`` options to get a property
-  from the provided directory scope.
-
-* The :command:`get_source_file_property` command gained the ``DIRECTORY``
-  and ``TARGET_DIRECTORY`` options to get a property from the
-  provided directory scope.
-
-* The :command:`list` operation ``SORT`` gained the ``NATURAL`` sort
-  option to sort using natural order (see ``strverscmp(3)`` manual).
-
-* The :command:`set_property` command with the ``SOURCE`` scope gained the
-  ``DIRECTORY`` and ``TARGET_DIRECTORY`` options to set properties
-  in the provided directory scopes.
-
-* The :command:`set_source_files_properties` command gained the ``DIRECTORY``
-  and ``TARGET_DIRECTORY`` options to set properties in the provided
-  directory scopes.
-
-* The :command:`string` command learned a new ``HEX`` sub-command, which
-  converts strings into their hexadecimal representation.
-
-Variables
----------
-
-* A :variable:`CMAKE_CUDA_ARCHITECTURES` variable was added to specify
-  CUDA output architectures.  Users are encouraged to use this instead of
-  specifying options manually, as this approach is compiler-agnostic.
-  The variable is initialized automatically when
-  :variable:`CMAKE_CUDA_COMPILER_ID <CMAKE_<LANG>_COMPILER_ID>` is ``NVIDIA``.
-  The variable is used to initialize the new :prop_tgt:`CUDA_ARCHITECTURES`
-  target property.  See policy :policy:`CMP0104`.
-
-* The :variable:`CMAKE_PCH_WARN_INVALID` variable was added to initialize the
-  :prop_tgt:`PCH_WARN_INVALID` target property to allow the removal of the
-  precompiled header invalid warning.
-
-Properties
-----------
-
-* The :prop_tgt:`CUDA_ARCHITECTURES` target property was added to specify
-  CUDA output architectures. Users are encouraged to use this instead of
-  specifying options manually, as this approach is compiler-agnostic.
-  The property is initialized by the new :variable:`CMAKE_CUDA_ARCHITECTURES`
-  variable.  See policy :policy:`CMP0104`.
-
-* The :prop_tgt:`Fortran_PREPROCESS` target property and
-  :prop_sf:`Fortran_PREPROCESS` source-file property were added to
-  control preprocessing of Fortran source files.
-
-* The :prop_tgt:`FRAMEWORK_MULTI_CONFIG_POSTFIX_<CONFIG>` target property
-  and associated :variable:`CMAKE_FRAMEWORK_MULTI_CONFIG_POSTFIX_<CONFIG>`
-  variable were created to allow adding a postfix to the name of a
-  framework file name when using a multi-config generator.
-
-* The :prop_sf:`OBJECT_OUTPUTS` source file property now supports
-  :manual:`generator expressions <cmake-generator-expressions(7)>`.
-
-* The :prop_tgt:`PCH_WARN_INVALID` target property was added to allow the
-  removal of the precompiled header invalid warning.
-
-* The :prop_tgt:`UNITY_BUILD_MODE` target property was added to tell
-  generators which algorithm to use for grouping included source
-  files.
-
-* The :prop_tgt:`VS_SOURCE_SETTINGS_<tool>` target property was added
-  to tell :ref:`Visual Studio Generators` for VS 2010 and above to add
-  metadata to non-built source files using ``<tool>``.
-
-* The :prop_sf:`VS_SETTINGS` source file property was added to tell
-  :ref:`Visual Studio Generators` for VS 2010 and above to add
-  metadata to a non-built source file.
-
-* The :prop_tgt:`VS_PLATFORM_TOOLSET` target property was added to tell
-  :ref:`Visual Studio Generators` for VS 2010 and above to override
-  the platform toolset.
-
-* The :prop_tgt:`VS_SOLUTION_DEPLOY` target property was added to tell
-  :ref:`Visual Studio Generators` for VS 2010 and above to mark a
-  target for deployment even when not building for Windows Phone/Store/CE.
-
-Modules
--------
-
-* The :module:`CheckLinkerFlag` module has been added to provide a
-  facility to check validity of link flags.
-
-* The :module:`ExternalProject` module :command:`ExternalProject_Add` command
-  gained a new ``GIT_REMOTE_UPDATE_STRATEGY`` keyword.  This can be used to
-  specify how failed rebase operations during a git update should be handled.
-  The ``CMAKE_EP_GIT_REMOTE_UPDATE_STRATEGY`` variable was also added as a
-  global default and is honored by both the :module:`ExternalProject` and
-  :module:`FetchContent` modules.
-
-* The :module:`FetchContent` module :command:`FetchContent_Declare` command
-  now supports a ``SOURCE_SUBDIR`` option.  It can be used to direct
-  :command:`FetchContent_MakeAvailable` to look in a different location
-  for the ``CMakeLists.txt`` file.
-
-* The :module:`FindBLAS` module now provides an imported target.
-
-* The :module:`FindCUDAToolkit` module:
-
-  * gained the variable
-    ``CUDAToolkit_LIBRARY_ROOT``, which is the directory containing the
-    ``nvvm`` directory and ``version.txt``.
-
-  * uses toolkit and library root found during ``CUDA`` compiler detection.
-
-* The :module:`FindLAPACK` module now provides an imported target.
-
-* The :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
-  modules:
-
-  * gained the possibility to create per-artifact cache variables for
-    interactive editing in :manual:`cmake-gui(1)` and :manual:`ccmake(1)`.
-
-  * gained sub-components ``Development.Module`` and
-    ``Development.Embed`` under the ``Development`` component.
-
-  * gained the capability to specify which Python implementations to find,
-    including ``IronPython`` and ``PyPy``.
-
-* The :module:`FindRuby` module input and output variables were all renamed
-  from ``RUBY_`` to ``Ruby_`` for consistency with other find modules.
-  Input variables of the old case will be honored if provided, and output
-  variables of the old case are always provided.
-
-* The :module:`FindSWIG` module now accepts target languages as  ``COMPONENTS``
-  and ``OPTIONAL_COMPONENTS`` arguments to ``find_package``.
-
-* The :module:`GoogleTest` module :command:`gtest_discover_tests` command:
-
-  * gained a new ``DISCOVERY_MODE`` option to control when the test
-    discovery step is run.  It offers a new ``PRE_TEST`` setting to
-    run the discovery at test time instead of build time.  A new
-    ``CMAKE_GTEST_DISCOVER_TESTS_DISCOVERY_MODE`` variable can be used
-    to change the default globally.
-
-  * gained a new optional parameter ``XML_OUTPUT_DIR``. When set the
-    JUnit XML test results are stored in that directory.
-
-* The :module:`FindLibXslt` module now provides imported targets.
-
-* The :module:`UseSWIG` module now supports Fortran as a target language if
-  the ``SWIG_EXECUTABLE`` is SWIG-Fortran_.
-
-.. _`SWIG-Fortran`: https://github.com/swig-fortran/swig
-
-Generator Expressions
----------------------
-
-* The ``$<DEVICE_LINK:...>`` and ``$<HOST_LINK:...>``
-  :manual:`generator expressions <cmake-generator-expressions(7)>` were added
-  to manage device and host link steps.
-
-* The ``$<LINK_LANGUAGE:...>`` and ``$<LINK_LANG_AND_ID:...>``
-  :manual:`generator expressions <cmake-generator-expressions(7)>` were added.
-
-CTest
------
-
-* :manual:`ctest(1)` gained a new :variable:`CTEST_RESOURCE_SPEC_FILE`
-  variable, which can be used to specify a
-  :ref:`resource specification file <ctest-resource-specification-file>`.
-
-* :manual:`ctest(1)` gained a ``--stop-on-failure`` option,
-  which can be used to stop running the tests once one has failed.
-
-* The :command:`ctest_test` command gained a ``STOP_ON_FAILURE`` option
-  which can be used to stop running the tests once one has failed.
-
-* The :module:`CTestCoverageCollectGCOV` module
-  :command:`ctest_coverage_collect_gcov` command gained a
-  ``TARBALL_COMPRESSION`` option to control compression of the
-  tarball of collected results.
-
-CPack
------
-
-* The :cpack_gen:`CPack Archive Generator`'s ``TXZ`` format learned the
-  :variable:`CPACK_ARCHIVE_THREADS` variable to enable parallel compression.
-  Requires support in the ``liblzma`` used by CMake.
-
-* The :cpack_gen:`CPack NSIS Generator` gained a new variable
-  :variable:`CPACK_NSIS_MANIFEST_DPI_AWARE` to declare that the
-  installer is DPI-aware.
-
-* The :cpack_gen:`CPack RPM Generator` gained
-  :variable:`CPACK_RPM_PRE_TRANS_SCRIPT_FILE` and
-  :variable:`CPACK_RPM_POST_TRANS_SCRIPT_FILE`
-  variables to specify pre- and post-transaction scripts.
-
-Other
------
-
-* :manual:`cmake-gui(1)` now populates its generator selection
-  widget default value from the :envvar:`CMAKE_GENERATOR` environment
-  variable.  Additionally, environment variables
-  :envvar:`CMAKE_GENERATOR_PLATFORM` and :envvar:`CMAKE_GENERATOR_TOOLSET`
-  are used to populate their respective widget defaults.
-
-* :manual:`ccmake(1)` learned to read a :envvar:`CCMAKE_COLORS`
-  environment variable to customize colors.
-
-Deprecated and Removed Features
-===============================
-
-* The :module:`Documentation` module has been deprecated via
-  :policy:`CMP0106`. This module was essentially VTK code that CMake should
-  not be shipping anymore.
-
-* An explicit deprecation diagnostic was added for policy ``CMP0070``
-  and policy ``CMP0071`` (``CMP0069`` and below were already deprecated).
-  The :manual:`cmake-policies(7)` manual explains that the OLD behaviors
-  of all policies are deprecated and that projects should port to the
-  NEW behaviors.
-
-Other Changes
-=============
-
-* On Windows, the :generator:`Ninja` and :generator:`Ninja Multi-Config`
-  generators, when a compiler is not explicitly specified, now select
-  the first compiler (of any name) found in directories listed by the
-  ``PATH`` environment variable.
-
-* The :prop_tgt:`LINK_OPTIONS` and :prop_tgt:`INTERFACE_LINK_OPTIONS` target
-  properties are now used for the device link step.
-  See policy :policy:`CMP0105`.
-
-* Creation of an ``ALIAS`` target overwriting an existing target now raises an
-  error. See policy :policy:`CMP0107`.
-
-* Linking a target to itself through an alias now raises an error.
-  See policy :policy:`CMP0108`.
-
-* The :module:`FindPackageHandleStandardArgs` module option ``REQUIRED_VARS``
-  is now optional if ``HANDLE_COMPONENTS`` is specified.
-
-* The :command:`source_group` command now also recognizes forward slashes
-  as subgroup delimiters, not just backslashes.
-
-* :manual:`ctest(1)` now logs environment variables that it sets for each test,
-  either due to the :prop_test:`ENVIRONMENT` property or the
-  :ref:`resource allocation <ctest-resource-allocation>` feature, and submits
-  this log to CDash. It does not log environment variables that were set
-  outside of CTest.
-
-* When building CMake itself from source and not using a system-provided
-  libcurl, HTTP/2 support is now enabled for commands supporting
-  network communication via ``http(s)``, such as :command:`file(DOWNLOAD)`,
-  :command:`file(UPLOAD)`, and :command:`ctest_submit`.
-  The precompiled binaries provided on ``cmake.org`` now support HTTP/2.
-
-* The :manual:`cmake-file-api(7)` "codemodel" version 2 ``version`` field has
-  been updated to 2.1.
-
-* The :manual:`cmake-file-api(7)` "codemodel" version 2 "target" object gained
-  a new ``precompileHeaders`` field in the ``compileGroups`` objects.
-
-Updates
-=======
-
-Changes made since CMake 3.18.0 include the following.
-
-3.18.1
-------
-
-* The :generator:`Xcode` generator, when :variable:`CMAKE_OSX_ARCHITECTURES`
-  is not defined, now selects ``$(NATIVE_ARCH_ACTUAL)`` as the default
-  architecture (the Xcode ``ARCHS`` setting).  This is needed for Xcode 12
-  to select the host's architecture, which older versions of Xcode did
-  by default.
-
-* In CMake 3.18.0 the :command:`add_test` command learned to support
-  special characters in test names.  This was accidentally left out of
-  its release notes.  Unfortunately the fix breaks existing projects
-  that were using manual quoting or escaping to work around the prior
-  limitation.  This fix has been reverted in 3.18.1, but may be
-  re-introduced in future versions of CMake with a policy for compatibility.
diff --git a/share/cmake-3.18/Help/release/3.3.rst b/share/cmake-3.18/Help/release/3.3.rst
deleted file mode 100644
index 6657e8d..0000000
--- a/share/cmake-3.18/Help/release/3.3.rst
+++ /dev/null
@@ -1,287 +0,0 @@
-CMake 3.3 Release Notes
-***********************
-
-.. only:: html
-
-  .. contents::
-
-Changes made since CMake 3.2 include the following.
-
-New Features
-============
-
-Generators
-----------
-
-* The :ref:`Makefile Generators` now add ``.DELETE_ON_ERROR`` to the
-  makefiles that contain the actual build rules for files on disk.
-  This tells GNU make to remove rule outputs when their recipe
-  modifies an output but fails.
-
-* The :ref:`Visual Studio Generators` learned to support ``.xaml``
-  source files and automatically associate them with corresponding
-  ``.h`` and ``.cpp`` sources.
-
-* A new experimental :generator:`Green Hills MULTI` generator was
-  added on Windows.  `Green Hills MULTI`_ is an IDE for embedded
-  real-time systems.
-
-.. _`Green Hills MULTI`: http://www.ghs.com/products/MULTI_IDE.html
-
-Commands
---------
-
-* The :command:`add_dependencies` command learned to allow dependencies
-  to be added to :ref:`interface libraries <Interface Libraries>`.
-  Dependencies added to an interface library are followed transitively
-  in its place since the target itself does not build.
-
-* The :command:`execute_process` command learned to support specifying
-  the same file for ``OUTPUT_FILE`` and ``ERROR_FILE``.
-
-* The :command:`file(GLOB)` and :command:`file(GLOB_RECURSE)` commands
-  learned a new ``LIST_DIRECTORIES <bool>`` option to specify whether
-  the glob result should include directories.
-
-* The :command:`find_library`, :command:`find_path`, and :command:`find_file`
-  commands now search in installation prefixes derived from the ``PATH``
-  environment variable.
-
-* The :command:`if` command learned a new ``IN_LIST`` operator that
-  evaluates to true if a given element is contained in a named list.
-
-* The :command:`install(EXPORT)` and :command:`export()` commands
-  learned to export targets that populate the :prop_tgt:`INTERFACE_SOURCES`
-  target property.
-
-* The :command:`install(TARGETS)` command learned to support
-  generator expressions in the ``DESTINATION`` value.
-
-Variables
----------
-
-* The version of some Fortran compilers is now detected and stored in the
-  :variable:`CMAKE_Fortran_COMPILER_VERSION <CMAKE_<LANG>_COMPILER_VERSION>`
-  variable.
-
-* The :ref:`Visual Studio Generators` learned a new
-  :variable:`CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD` option
-  to put the ``INSTALL`` target in the default build of a
-  solution (``.sln``) file.
-
-Properties
-----------
-
-* A :prop_tgt:`CROSSCOMPILING_EMULATOR` target property and supporting
-  :variable:`CMAKE_CROSSCOMPILING_EMULATOR` variable were introduced
-  to allow target platform binaries to run on the host during cross
-  compiling.
-
-* A :prop_tgt:`<LANG>_INCLUDE_WHAT_YOU_USE` target property and supporting
-  :variable:`CMAKE_<LANG>_INCLUDE_WHAT_YOU_USE` variable were introduced
-  to tell the :ref:`Makefile Generators` and the :generator:`Ninja` generator
-  to run ``include-what-you-use`` along with the compiler for ``C`` and
-  ``CXX`` languages.
-
-* The :prop_tgt:`<LANG>_VISIBILITY_PRESET` and
-  :prop_tgt:`VISIBILITY_INLINES_HIDDEN` target properties now
-  affect compilation in sources of all target types.  See
-  policy :policy:`CMP0063`.
-
-* The :prop_tgt:`XCODE_ATTRIBUTE_<an-attribute>` target property learned
-  to support generator expressions.
-
-Modules
--------
-
-* The :module:`CheckFortranCompilerFlag` module was introduced
-  to check ``Fortran`` compiler flags, much like the
-  :module:`CheckCCompilerFlag` module already does for ``C``.
-
-* The :module:`ExternalData` module learned a new
-  :variable:`ExternalData_NO_SYMLINKS` option to disable use of
-  symbolic links to populate the real data files and use copies
-  instead.
-
-* The :module:`ExternalData` module learned a new ``RECURSE:``
-  option in ``DATA{}`` references specifying directories.
-  This allows an entire directory tree of associated files
-  to be matched.
-
-* The :module:`ExternalData` module learned a new URL template
-  placeholder ``%(algo:<key>)`` to allow custom mapping from
-  algorithm name to URL component through configuration of new
-  :variable:`ExternalData_URL_ALGO_<algo>_<key>` variables.
-  This allows more flexibility in remote URLs.
-
-* The :module:`ExternalProject` module learned to replace tokens
-  like ``<BINARY_DIR>`` in the ``BYPRODUCTS`` of each step.
-
-* The :module:`ExternalProject` module APIs learned to support
-  :manual:`generator expressions <cmake-generator-expressions(7)>`
-  when using ``LOG_*`` options and in CMake initial cache options.
-
-* The :module:`FindBoost` module now tracks the directories containing
-  libraries separately for RELEASE and DEBUG configurations.
-
-* The :module:`FindCUDA` module now defaults to using the static
-  CUDA runtime library if it is available.  A new
-  ``CUDA_USE_STATIC_CUDA_RUNTIME`` option is offered to control
-  this behavior.
-
-* The :module:`FindMatlab` module was completely rewritten.  It learned
-  about versions and components and to find Matlab in a more precise and
-  multiplatform way.  The module now offers APIs to create mex extensions,
-  documentation, and unit tests.
-
-* The :module:`FindPackageHandleStandardArgs` module
-  ``FIND_PACKAGE_HANDLE_STANDARD_ARGS`` function now
-  always populates both the ``<PackageName>_FOUND``
-  and ``<UPPERCASE_NAME>_FOUND`` variables (the latter
-  for backwards compatibility).  The ``FOUND_VAR``
-  option is now ignored except to enforce its allowed
-  values.
-
-* The :module:`InstallRequiredSystemLibraries` module learned a new
-  ``CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT`` option to specify the
-  installation component.
-
-Generator Expressions
----------------------
-
-* A new ``COMPILE_LANGUAGE`` generator expression was introduced to
-  allow specification of compile options for target files based on the
-  :prop_sf:`LANGUAGE` of each source file.  Due to limitations of the
-  underlying native build tools, this feature has varying support across
-  generators.  See the :manual:`cmake-generator-expressions(7)` manual
-  for details.
-
-CTest
------
-
-* The :manual:`ctest(1)` tool learned a new ``--repeat-until-fail <n>``
-  option to help find sporadic test failures.
-
-* The :module:`CTestCoverageCollectGCOV` module learned to support
-  the same ``CTEST_CUSTOM_COVERAGE_EXCLUDE`` option as the
-  :command:`ctest_coverage` command.
-
-CPack
------
-
-* The :cpack_gen:`CPack IFW Generator` learned to support
-  Qt Framework Installer 2.0 tools.
-
-* The :cpack_gen:`CPack DEB Generator` learned a new
-  :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_SHLIBDEPS`
-  variable to specify per-component use of ``dpkg-shlibdeps``.
-
-* The :cpack_gen:`CPack DEB Generator` learned a new
-  :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS`
-  option to specify per-component dependencies.
-
-* The :cpack_gen:`CPack RPM Generator` learned to package symbolic links
-  more cleanly and now supports directory symlinks with recent
-  ``rpmbuild`` versions.
-
-* The :cpack_gen:`CPack RPM Generator` learned a new
-  :variable:`CPACK_RPM_ADDITIONAL_MAN_DIRS` variable to specify
-  directories containing man pages for the brp-compress RPM macro.
-
-* The :cpack_gen:`CPack RPM Generator` learned a new
-  :variable:`CPACK_RPM_<component>_PACKAGE_ARCHITECTURE` variable
-  to specify a component-specific package architecture.
-
-* The CPack WIX generator learned the new
-  :prop_inst:`CPACK_START_MENU_SHORTCUTS`,
-  :prop_inst:`CPACK_DESKTOP_SHORTCUTS` and
-  :prop_inst:`CPACK_STARTUP_SHORTCUTS` installed file properties which can
-  be used to install shorcuts in the Start Menu, on the Desktop and
-  in the Startup Folder respectively.
-
-Other
------
-
-* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
-  is now aware of features supported by GNU compilers on Windows, versions
-  4.4 through 5.0.
-
-* The :manual:`cmake(1)` ``-E tar`` command learned a new
-  ``--format<format>`` option to specify the archive format to
-  be written.
-
-* On OS X, CMake learned to create XCTest bundles to test Frameworks
-  and App Bundles within Xcode.  The :module:`FindXCTest` module
-  provides convenience functions to handle :prop_tgt:`XCTEST` bundles.
-
-Deprecated and Removed Features
-===============================
-
-* On OS X the :manual:`cmake-gui(1)` no longer has the
-  ``Install For Command Line Use`` menu item.  Instead there
-  is a ``How to Install For Command Line Use`` menu item
-  that shows an informational dialog box explaining how to
-  make the command line tools available.  For example::
-
-    /Applications/CMake.app/Contents/bin/cmake-gui --install
-
-* The :command:`ctest_build` and :command:`build_command` commands
-  no longer tell ``make`` tools to ignore errors with the ``-i`` option.
-  Previously this was done for :ref:`Makefile Generators` but not others.
-  See policy :policy:`CMP0061`.
-
-* The :generator:`Visual Studio 10 2010` generator no longer checks
-  for running VS IDEs with the project open or asks them to reload.
-  This was originally done for VS 10 because it had been done for
-  VS 7 through 9 to avoid prompting for every project in a solution.
-  Since VS >= 10 allow the whole solution to reload at once they
-  do not need CMake to help them.
-
-* The :generator:`Visual Studio 7` generator (.NET 2002) is now
-  deprecated and will be removed in a future version of CMake.
-
-* The :generator:`Visual Studio 6` generator is now deprecated
-  and will be removed in a future version of CMake.
-
-* The :command:`find_package` command no longer considers project
-  build trees recently configured in a :manual:`cmake-gui(1)`.
-  This was previously done only on Windows and is now never done.
-  The ``NO_CMAKE_BUILDS_PATH`` option is now ignored if given
-  and effectively always on.
-  Projects may populate the :ref:`User Package Registry` to aid
-  users building multiple dependent projects one after another.
-
-* The :command:`add_definitions()` command no longer causes a
-  :prop_dir:`DEFINITIONS` directory property to be populated. See policy
-  :policy:`CMP0059`.
-
-* With Visual Studio 7, 8, and 9 generators the value of the ``$(OutDir)``
-  placeholder no longer evaluates to the configuration name.  Projects
-  should use ``$(ConfigurationName)`` for that instead.
-
-* Using the output of :command:`export()` with the :command:`install(FILES)`
-  command is no longer allowed.  See policy :policy:`CMP0062` for details.
-
-Other Changes
-=============
-
-* The :generator:`Ninja` generator now requires that calls to the
-  :command:`add_custom_command` and :command:`add_custom_target`
-  commands use the ``BYPRODUCTS`` option to explicitly specify any
-  files generated by the custom commands that are not listed as
-  outputs (perhaps because their timestamps are allowed to be older
-  than the inputs).  See policy :policy:`CMP0058`.
-
-* Build-time progress output of :ref:`Makefile Generators` has been improved.
-  It no longer mixes progress and build rule messages during parallel builds.
-  The link rule messages now have progress and are displayed as bold green
-  instead of bold red (since red is often associated with an error message).
-
-* The :variable:`CMAKE_CFG_INTDIR` variable value for Visual Studio
-  7, 8, and 9 is now ``$(ConfigurationName)`` instead of ``$(OutDir)``.
-  This should have no effect on the intended use cases of the variable.
-
-* Linking to library files by a full path in an implicit linker search
-  directory (e.g. ``/usr/lib/libfoo.a``) no longer asks the linker to
-  search for the library (e.g. ``-lfoo``) and now links by full path.
-  See policy :policy:`CMP0060`.
diff --git a/share/cmake-3.18/Help/release/3.6.rst b/share/cmake-3.18/Help/release/3.6.rst
deleted file mode 100644
index f0add07..0000000
--- a/share/cmake-3.18/Help/release/3.6.rst
+++ /dev/null
@@ -1,318 +0,0 @@
-CMake 3.6 Release Notes
-***********************
-
-.. only:: html
-
-  .. contents::
-
-Changes made since CMake 3.5 include the following.
-
-New Features
-============
-
-Generators
-----------
-
-* The :generator:`Ninja` generator learned to produce phony targets
-  of the form ``sub/dir/all`` to drive the build of a subdirectory.
-  This is equivalent to ``cd sub/dir; make all`` with
-  :ref:`Makefile Generators`.
-
-* The :generator:`Ninja` generator now includes system header files in build
-  dependencies to ensure correct re-builds when system packages are updated.
-
-* The :generator:`Visual Studio 14 2015` generator learned to support the
-  Clang/C2 toolsets, e.g. with the ``-T v140_clang_3_7`` option.
-  This feature is experimental.
-
-Commands
---------
-
-* The :command:`add_custom_command` and :command:`add_custom_target` commands
-  learned how to use the :prop_tgt:`CROSSCOMPILING_EMULATOR` executable
-  target property.
-
-* The :command:`install` command learned a new ``EXCLUDE_FROM_ALL`` option
-  to leave installation rules out of the default installation.
-
-* The :command:`list` command gained a ``FILTER`` sub-command to filter
-  list elements by regular expression.
-
-* The :command:`string(TIMESTAMP)` and :command:`file(TIMESTAMP)`
-  commands gained support for the ``%s`` placeholder.  This is
-  the number of seconds since the UNIX Epoch.
-
-Variables
----------
-
-* A :variable:`CMAKE_DEPENDS_IN_PROJECT_ONLY` variable was introduced
-  to tell :ref:`Makefile Generators` to limit dependency scanning only
-  to files in the project source and build trees.
-
-* A new :variable:`CMAKE_HOST_SOLARIS` variable was introduced to
-  indicate when CMake is running on an Oracle Solaris host.
-
-* A :variable:`CMAKE_<LANG>_STANDARD_INCLUDE_DIRECTORIES` variable was
-  added for use by toolchain files to specify system include directories
-  to be appended to all compiler command lines.
-
-* The :variable:`CMAKE_<LANG>_STANDARD_LIBRARIES` variable is now documented.
-  It is intended for use by toolchain files to specify system libraries to be
-  added to all linker command lines.
-
-* A :variable:`CMAKE_NINJA_OUTPUT_PATH_PREFIX` variable was introduced
-  to tell the :generator:`Ninja` generator to configure the generated
-  ``build.ninja`` file for use as a ``subninja``.
-
-* A :variable:`CMAKE_TRY_COMPILE_PLATFORM_VARIABLES` variable was
-  added for use by toolchain files to specify platform-specific
-  variables that must be propagated by the :command:`try_compile`
-  command into test projects.
-
-* A :variable:`CMAKE_TRY_COMPILE_TARGET_TYPE` variable was added
-  to optionally tell the :command:`try_compile` command to build
-  a static library instead of an executable.  This is useful for
-  cross-compiling toolchains that cannot link binaries without
-  custom flags or scripts.
-
-Properties
-----------
-
-* A :prop_tgt:`DEPLOYMENT_REMOTE_DIRECTORY` target property was introduced
-  to tell the :generator:`Visual Studio 9 2008` and
-  :generator:`Visual Studio 8 2005` generators to generate the "remote
-  directory" for WinCE project deployment and debugger settings.
-
-* A :prop_tgt:`<LANG>_CLANG_TIDY` target property and supporting
-  :variable:`CMAKE_<LANG>_CLANG_TIDY` variable were introduced to tell the
-  :ref:`Makefile Generators` and the :generator:`Ninja` generator to run
-  ``clang-tidy`` along with the compiler for ``C`` and ``CXX`` languages.
-
-* A :prop_test:`TIMEOUT_AFTER_MATCH` test property was introduced to
-  optionally tell CTest to enforce a secondary timeout after matching
-  certain output from a test.
-
-* A :prop_tgt:`VS_CONFIGURATION_TYPE` target property was introduced
-  to specify a custom project file type for :ref:`Visual Studio Generators`
-  supporting VS 2010 and above.
-
-* A :prop_dir:`VS_STARTUP_PROJECT` directory property was introduced
-  to specify for :ref:`Visual Studio Generators` the default startup
-  project for generated solutions (``.sln`` files).
-
-Modules
--------
-
-* The :module:`CMakePushCheckState` module now pushes/pops/resets the variable
-  ``CMAKE_EXTRA_INCLUDE_FILE`` used in :module:`CheckTypeSize`.
-
-* The :module:`ExternalProject` module leared the ``GIT_SHALLOW 1``
-  option to perform a shallow clone of a Git repository.
-
-* The :module:`ExternalProject` module learned to initialize Git submodules
-  recursively and also to initialize new submodules on updates.  Use the
-  ``GIT_SUBMODULES`` option to restrict which submodules are initialized and
-  updated.
-
-* The :module:`ExternalProject` module leared the ``DOWNLOAD_NO_EXTRACT 1``
-  argument to skip extracting the file that is downloaded (e.g., for
-  self-extracting shell installers or ``.msi`` files).
-
-* The :module:`ExternalProject` module now uses ``TLS_VERIFY`` when fetching
-  from git repositories.
-
-* The :module:`FindBLAS` and :module:`FindLAPACK` modules learned to
-  support `OpenBLAS <http://www.openblas.net>`__.
-
-* The :module:`FindCUDA` module learned to find the ``cublas_device`` library.
-
-* The :module:`FindGTest` module ``gtest_add_tests`` function now causes
-  CMake to automatically re-run when test sources change so that they
-  can be re-scanned.
-
-* The :module:`FindLTTngUST` module was introduced to find the LTTng-UST
-  library.
-
-* The :module:`FindPkgConfig` module learned to optionally create imported
-  targets for the libraries it has found.
-
-* The :module:`FindProtobuf` module learned to provide a ``Protobuf_VERSION``
-  variable and check the version number requested in a :command:`find_package`
-  call.
-
-* The :module:`InstallRequiredSystemLibraries` module learned a new
-  ``CMAKE_INSTALL_UCRT_LIBRARIES`` option to enable app-local deployment
-  of the Windows Universal CRT libraries with Visual Studio 2015.
-
-Platforms
----------
-
-* The Clang compiler is now supported on CYGWIN.
-
-* Support was added for the Bruce C Compiler with compiler id ``Bruce``.
-
-CTest
------
-
-* The :command:`ctest_update` command now looks at the
-  :variable:`CTEST_GIT_INIT_SUBMODULES` variable to determine whether
-  submodules should be updated or not before updating.
-
-* The :command:`ctest_update` command will now synchronize submodules on an
-  update. Updates which add submodules or change a submodule's URL will now be
-  pulled properly.
-
-CPack
------
-
-* The :cpack_gen:`CPack DEB Generator` learned how to handle ``$ORIGIN``
-  in ``CMAKE_INSTALL_RPATH`` when :variable:`CPACK_DEBIAN_PACKAGE_SHLIBDEPS`
-  is used for dependency auto detection.
-
-* The :cpack_gen:`CPack DEB Generator` learned how to generate
-  ``DEBIAN/shlibs`` contorl file when package contains shared libraries.
-
-* The :cpack_gen:`CPack DEB Generator` learned how to generate
-  ``DEBIAN/postinst`` and ``DEBIAN/postrm`` files if the package installs
-  libraries in ldconfig-controlled locations (e.g. ``/lib/``, ``/usr/lib/``).
-
-* The :cpack_gen:`CPack DEB Generator` learned how to generate dependencies
-  between Debian packages if multi-component setup is used and
-  :variable:`CPACK_COMPONENT_<compName>_DEPENDS` variables are set.
-  For backward compatibility this feature is disabled by default.
-  See :variable:`CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS`.
-
-* The :cpack_gen:`CPack DEB Generator` learned how to set custom package
-  file names including how to generate properly-named Debian packages::
-
-    <PackageName>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb
-
-  For backward compatibility this feature is disabled by default. See
-  :variable:`CPACK_DEBIAN_FILE_NAME` and
-  :variable:`CPACK_DEBIAN_<COMPONENT>_FILE_NAME`.
-
-* The :cpack_gen:`CPack DEB Generator` learned how to set the package
-  release number (``DebianRevisionNumber`` in package file name when
-  used in combination with ``DEB-DEFAULT`` value set by
-  :variable:`CPACK_DEBIAN_FILE_NAME`).
-  See :variable:`CPACK_DEBIAN_PACKAGE_RELEASE`.
-
-* The :cpack_gen:`CPack DEB Generator` learned how to set the package
-  architecture per-component.
-  See :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_ARCHITECTURE`.
-
-* The :cpack_gen:`CPack DragNDrop Generator` learned a new option to skip the
-  ``/Applications`` symlink.
-  See the :variable:`CPACK_DMG_DISABLE_APPLICATIONS_SYMLINK` variable.
-
-* The :module:`CPackIFW` module gained a new
-  :command:`cpack_ifw_update_repository` command to update a QtIFW-specific
-  repository from a remote repository.
-
-* The :cpack_gen:`CPack RPM Generator` learned how to set RPM ``dist`` tag
-  as part of RPM ``Release:`` tag when enabled (mandatory on some Linux
-  distributions for e.g. on Fedora).
-  See :variable:`CPACK_RPM_PACKAGE_RELEASE_DIST`.
-
-* The :cpack_gen:`CPack RPM Generator` learned how to set default values
-  for owning user/group and file/directory permissions of package content.
-  See :variable:`CPACK_RPM_DEFAULT_USER`, :variable:`CPACK_RPM_DEFAULT_GROUP`,
-  :variable:`CPACK_RPM_DEFAULT_FILE_PERMISSIONS`,
-  :variable:`CPACK_RPM_DEFAULT_DIR_PERMISSIONS` and their per component
-  counterparts.
-
-* The :cpack_gen:`CPack RPM Generator` learned how to set user defined
-  package file names, how to specify that rpmbuild should decide on file
-  name format as well as handling of multiple rpm packages generated by a
-  single user defined spec file.
-  See :variable:`CPACK_RPM_PACKAGE_NAME` and
-  :variable:`CPACK_RPM_<component>_PACKAGE_NAME`.
-
-* The :cpack_gen:`CPack RPM Generator` learned how to correctly handle symlinks
-  that are pointing outside generated packages.
-
-Other
------
-
-* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
-  is now aware of features supported by Intel C++ compilers versions 12.1
-  through 16.0 on UNIX platforms.
-
-Deprecated and Removed Features
-===============================
-
-* The :module:`CMakeForceCompiler` module and its macros are now deprecated.
-  See module documentation for an explanation.
-
-* The :command:`find_library`, :command:`find_path`, and :command:`find_file`
-  commands no longer search in installation prefixes derived from the ``PATH``
-  environment variable on non-Windows platforms.  This behavior was added in
-  CMake 3.3 to support Windows hosts but has proven problematic on UNIX hosts.
-  Users that keep some ``<prefix>/bin`` directories in the ``PATH`` just for
-  their tools do not necessarily want any supporting ``<prefix>/lib``
-  directories searched.  One may set the ``CMAKE_PREFIX_PATH`` environment
-  variable with a :ref:`semicolon-separated list <CMake Language Lists>` of prefixes that are
-  to be searched.
-
-* The :generator:`Visual Studio 7 .NET 2003` generator is now
-  deprecated and will be removed in a future version of CMake.
-
-* The :generator:`Visual Studio 7` generator (for VS .NET 2002) has been
-  removed.  It had been deprecated since CMake 3.3.
-
-* The :generator:`Visual Studio 6` generator has been removed.
-  It had been deprecated since CMake 3.3.
-
-Other Changes
-=============
-
-* The precompiled OS X binary provided on ``cmake.org`` now requires
-  OS X 10.7 or newer.
-
-* On Linux and FreeBSD platforms, when building CMake itself from source and
-  not using a system-provided libcurl, OpenSSL is now used by default if it is
-  found on the system.  This enables SSL/TLS support for commands supporting
-  network communication via ``https``, such as :command:`file(DOWNLOAD)`,
-  :command:`file(UPLOAD)`, and :command:`ctest_submit`.
-
-* The :manual:`cmake(1)` ``--build`` command-line tool now rejects multiple
-  ``--target`` options with an error instead of silently ignoring all but the
-  last one.
-
-* :prop_tgt:`AUTOMOC` now diagnoses name collisions when multiple source
-  files in different directories use ``#include <moc_foo.cpp>`` with the
-  same name (because the generated ``moc_foo.cpp`` files would collide).
-
-* The :module:`FindBISON` module ``BISON_TARGET`` macro now supports
-  special characters by passing the ``VERBATIM`` option to internal
-  :command:`add_custom_command` calls.  This may break clients that
-  added escaping manually to work around the bug.
-
-* The :module:`FindFLEX` module ``FLEX_TARGET`` macro now supports
-  special characters by passing the ``VERBATIM`` option to internal
-  :command:`add_custom_command` calls.  This may break clients that
-  added escaping manually to work around the bug.
-
-* The :module:`FindProtobuf` module input and output variables were all renamed
-  from ``PROTOBUF_`` to ``Protobuf_`` for consistency with other find modules.
-  Input variables of the old case will be honored if provided, and output
-  variables of the old case are always provided.
-
-* The :cpack_gen:`CPack RPM Generator` now supports upper cased component
-  names in per component CPackRPM specific variables.
-  E.g. component named ``foo`` now expects component specific
-  variable to be ``CPACK_RPM_FOO_PACKAGE_NAME`` while before
-  it expected ``CPACK_RPM_foo_PACKAGE_NAME``.
-  Upper cased component name part in variables is compatible
-  with convention used for other CPack variables.
-  For back compatibility old format of variables is still valid
-  and preferred if both versions of variable are set, but the
-  preferred future use is upper cased component names in variables.
-  New variables that will be added to CPackRPM in later versions
-  will only support upper cased component variable format.
-
-* The CPack NSIS generator's configuration file template was fixed to
-  quote the path to the uninstaller tool used by the
-  :variable:`CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL` option.
-  This avoids depending on an insecure Windows feature to run an
-  uninstaller tool with a space in the path.
diff --git a/share/cmake-3.18/Help/release/index.rst b/share/cmake-3.18/Help/release/index.rst
deleted file mode 100644
index 4578b3a..0000000
--- a/share/cmake-3.18/Help/release/index.rst
+++ /dev/null
@@ -1,34 +0,0 @@
-:orphan:
-
-CMake Release Notes
-*******************
-
-..
-  This file should include the adjacent "dev.txt" file
-  in development versions but not in release versions.
-
-Releases
-========
-
-.. toctree::
-   :maxdepth: 1
-
-   3.18 <3.18>
-   3.17 <3.17>
-   3.16 <3.16>
-   3.15 <3.15>
-   3.14 <3.14>
-   3.13 <3.13>
-   3.12 <3.12>
-   3.11 <3.11>
-   3.10 <3.10>
-   3.9 <3.9>
-   3.8 <3.8>
-   3.7 <3.7>
-   3.6 <3.6>
-   3.5 <3.5>
-   3.4 <3.4>
-   3.3 <3.3>
-   3.2 <3.2>
-   3.1 <3.1>
-   3.0 <3.0>
diff --git a/share/cmake-3.18/Help/variable/ANDROID.rst b/share/cmake-3.18/Help/variable/ANDROID.rst
deleted file mode 100644
index fede4ca..0000000
--- a/share/cmake-3.18/Help/variable/ANDROID.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-ANDROID
--------
-
-Set to ``1`` when the target system (:variable:`CMAKE_SYSTEM_NAME`) is
-``Android``.
diff --git a/share/cmake-3.18/Help/variable/CACHE.rst b/share/cmake-3.18/Help/variable/CACHE.rst
deleted file mode 100644
index 2cef27e..0000000
--- a/share/cmake-3.18/Help/variable/CACHE.rst
+++ /dev/null
@@ -1,18 +0,0 @@
-CACHE
------
-
-Operator to read cache variables.
-
-Use the syntax ``$CACHE{VAR}`` to read cache entry ``VAR``.
-See the :ref:`cmake-language(7) variables <CMake Language Variables>`
-documentation for more complete documentation of the interaction of
-normal variables and cache entries.
-
-When evaluating :ref:`Variable References` of the form ``${VAR}``,
-CMake first searches for a normal variable with that name, and if not
-found CMake will search for a cache entry with that name.
-The ``$CACHE{VAR}`` syntax can be used to do direct cache lookup and
-ignore any existing normal variable.
-
-See the :command:`set` and :command:`unset` commands to see how to
-write or remove cache variables.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_AIX_EXPORT_ALL_SYMBOLS.rst b/share/cmake-3.18/Help/variable/CMAKE_AIX_EXPORT_ALL_SYMBOLS.rst
deleted file mode 100644
index c64dd48..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_AIX_EXPORT_ALL_SYMBOLS.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-CMAKE_AIX_EXPORT_ALL_SYMBOLS
-----------------------------
-
-Default value for :prop_tgt:`AIX_EXPORT_ALL_SYMBOLS` target property.
-This variable is used to initialize the property on each target as it is
-created.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_ANT_ADDITIONAL_OPTIONS.rst b/share/cmake-3.18/Help/variable/CMAKE_ANDROID_ANT_ADDITIONAL_OPTIONS.rst
deleted file mode 100644
index 8862ba9..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_ANT_ADDITIONAL_OPTIONS.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CMAKE_ANDROID_ANT_ADDITIONAL_OPTIONS
-------------------------------------
-
-Default value for the :prop_tgt:`ANDROID_ANT_ADDITIONAL_OPTIONS` target property.
-See that target property for additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_API.rst b/share/cmake-3.18/Help/variable/CMAKE_ANDROID_API.rst
deleted file mode 100644
index c07a05a..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_API.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_ANDROID_API
------------------
-
-When :ref:`Cross Compiling for Android with NVIDIA Nsight Tegra Visual Studio
-Edition`, this variable may be set to specify the default value for the
-:prop_tgt:`ANDROID_API` target property.  See that target property for
-additional information.
-
-Otherwise, when :ref:`Cross Compiling for Android`, this variable provides
-the Android API version number targeted.  This will be the same value as
-the :variable:`CMAKE_SYSTEM_VERSION` variable for ``Android`` platforms.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_API_MIN.rst b/share/cmake-3.18/Help/variable/CMAKE_ANDROID_API_MIN.rst
deleted file mode 100644
index 0246c75..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_API_MIN.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CMAKE_ANDROID_API_MIN
----------------------
-
-Default value for the :prop_tgt:`ANDROID_API_MIN` target property.
-See that target property for additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_ARCH.rst b/share/cmake-3.18/Help/variable/CMAKE_ANDROID_ARCH.rst
deleted file mode 100644
index b91ca57..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_ARCH.rst
+++ /dev/null
@@ -1,19 +0,0 @@
-CMAKE_ANDROID_ARCH
-------------------
-
-When :ref:`Cross Compiling for Android with NVIDIA Nsight Tegra Visual Studio
-Edition`, this variable may be set to specify the default value for the
-:prop_tgt:`ANDROID_ARCH` target property.  See that target property for
-additional information.
-
-Otherwise, when :ref:`Cross Compiling for Android`, this variable provides
-the name of the Android architecture corresponding to the value of the
-:variable:`CMAKE_ANDROID_ARCH_ABI` variable.  The architecture name
-may be one of:
-
-* ``arm``
-* ``arm64``
-* ``mips``
-* ``mips64``
-* ``x86``
-* ``x86_64``
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_ARCH_ABI.rst b/share/cmake-3.18/Help/variable/CMAKE_ANDROID_ARCH_ABI.rst
deleted file mode 100644
index 0a3ed3c..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_ARCH_ABI.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-CMAKE_ANDROID_ARCH_ABI
-----------------------
-
-When :ref:`Cross Compiling for Android`, this variable specifies the
-target architecture and ABI to be used.  Valid values are:
-
-* ``arm64-v8a``
-* ``armeabi-v7a``
-* ``armeabi-v6``
-* ``armeabi``
-* ``mips``
-* ``mips64``
-* ``x86``
-* ``x86_64``
-
-See also the :variable:`CMAKE_ANDROID_ARM_MODE` and
-:variable:`CMAKE_ANDROID_ARM_NEON` variables.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_ARM_MODE.rst b/share/cmake-3.18/Help/variable/CMAKE_ANDROID_ARM_MODE.rst
deleted file mode 100644
index ad3c37c..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_ARM_MODE.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-CMAKE_ANDROID_ARM_MODE
-----------------------
-
-When :ref:`Cross Compiling for Android` and :variable:`CMAKE_ANDROID_ARCH_ABI`
-is set to one of the ``armeabi`` architectures, set ``CMAKE_ANDROID_ARM_MODE``
-to ``ON`` to target 32-bit ARM processors (``-marm``).  Otherwise, the
-default is to target the 16-bit Thumb processors (``-mthumb``).
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_ARM_NEON.rst b/share/cmake-3.18/Help/variable/CMAKE_ANDROID_ARM_NEON.rst
deleted file mode 100644
index 4b7ae03..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_ARM_NEON.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-CMAKE_ANDROID_ARM_NEON
-----------------------
-
-When :ref:`Cross Compiling for Android` and :variable:`CMAKE_ANDROID_ARCH_ABI`
-is set to ``armeabi-v7a`` set ``CMAKE_ANDROID_ARM_NEON`` to ``ON`` to target
-ARM NEON devices.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_ASSETS_DIRECTORIES.rst b/share/cmake-3.18/Help/variable/CMAKE_ANDROID_ASSETS_DIRECTORIES.rst
deleted file mode 100644
index c372fe4..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_ASSETS_DIRECTORIES.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CMAKE_ANDROID_ASSETS_DIRECTORIES
---------------------------------
-
-Default value for the :prop_tgt:`ANDROID_ASSETS_DIRECTORIES` target property.
-See that target property for additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_GUI.rst b/share/cmake-3.18/Help/variable/CMAKE_ANDROID_GUI.rst
deleted file mode 100644
index 1755375..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_GUI.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CMAKE_ANDROID_GUI
------------------
-
-Default value for the :prop_tgt:`ANDROID_GUI` target property of
-executables.  See that target property for additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_JAR_DEPENDENCIES.rst b/share/cmake-3.18/Help/variable/CMAKE_ANDROID_JAR_DEPENDENCIES.rst
deleted file mode 100644
index 451a929..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_JAR_DEPENDENCIES.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CMAKE_ANDROID_JAR_DEPENDENCIES
-------------------------------
-
-Default value for the :prop_tgt:`ANDROID_JAR_DEPENDENCIES` target property.
-See that target property for additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_JAR_DIRECTORIES.rst b/share/cmake-3.18/Help/variable/CMAKE_ANDROID_JAR_DIRECTORIES.rst
deleted file mode 100644
index af83e34..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_JAR_DIRECTORIES.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CMAKE_ANDROID_JAR_DIRECTORIES
------------------------------
-
-Default value for the :prop_tgt:`ANDROID_JAR_DIRECTORIES` target property.
-See that target property for additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_JAVA_SOURCE_DIR.rst b/share/cmake-3.18/Help/variable/CMAKE_ANDROID_JAVA_SOURCE_DIR.rst
deleted file mode 100644
index 3dc05e0..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_JAVA_SOURCE_DIR.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CMAKE_ANDROID_JAVA_SOURCE_DIR
------------------------------
-
-Default value for the :prop_tgt:`ANDROID_JAVA_SOURCE_DIR` target property.
-See that target property for additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_NATIVE_LIB_DEPENDENCIES.rst b/share/cmake-3.18/Help/variable/CMAKE_ANDROID_NATIVE_LIB_DEPENDENCIES.rst
deleted file mode 100644
index 4191907..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_NATIVE_LIB_DEPENDENCIES.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CMAKE_ANDROID_NATIVE_LIB_DEPENDENCIES
--------------------------------------
-
-Default value for the :prop_tgt:`ANDROID_NATIVE_LIB_DEPENDENCIES` target
-property.  See that target property for additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_NATIVE_LIB_DIRECTORIES.rst b/share/cmake-3.18/Help/variable/CMAKE_ANDROID_NATIVE_LIB_DIRECTORIES.rst
deleted file mode 100644
index 7cb9527..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_NATIVE_LIB_DIRECTORIES.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CMAKE_ANDROID_NATIVE_LIB_DIRECTORIES
-------------------------------------
-
-Default value for the :prop_tgt:`ANDROID_NATIVE_LIB_DIRECTORIES` target
-property.  See that target property for additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_NDK.rst b/share/cmake-3.18/Help/variable/CMAKE_ANDROID_NDK.rst
deleted file mode 100644
index d241dd0..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_NDK.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-CMAKE_ANDROID_NDK
------------------
-
-When :ref:`Cross Compiling for Android with the NDK`, this variable holds
-the absolute path to the root directory of the NDK.  The directory must
-contain a ``platforms`` subdirectory holding the ``android-<api>``
-directories.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_NDK_DEPRECATED_HEADERS.rst b/share/cmake-3.18/Help/variable/CMAKE_ANDROID_NDK_DEPRECATED_HEADERS.rst
deleted file mode 100644
index 8ea1257..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_NDK_DEPRECATED_HEADERS.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CMAKE_ANDROID_NDK_DEPRECATED_HEADERS
-------------------------------------
-
-When :ref:`Cross Compiling for Android with the NDK`, this variable
-may be set to specify whether to use the deprecated per-api-level
-headers instead of the unified headers.
-
-If not specified, the default will be *false* if using a NDK version
-that provides the unified headers and *true* otherwise.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG.rst b/share/cmake-3.18/Help/variable/CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG.rst
deleted file mode 100644
index 207019a..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG
-------------------------------------
-
-When :ref:`Cross Compiling for Android with the NDK`, this variable
-provides the NDK's "host tag" used to construct the path to prebuilt
-toolchains that run on the host.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION.rst b/share/cmake-3.18/Help/variable/CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION.rst
deleted file mode 100644
index 22808e3..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION
------------------------------------
-
-When :ref:`Cross Compiling for Android with the NDK`, this variable
-may be set to specify the version of the toolchain to be used
-as the compiler.
-
-On NDK r19 or above, this variable must be unset or set to ``clang``.
-
-On NDK r18 or below, this variable must be set to one of these forms:
-
-* ``<major>.<minor>``: GCC of specified version
-* ``clang<major>.<minor>``: Clang of specified version
-* ``clang``: Clang of most recent available version
-
-A toolchain of the requested version will be selected automatically to
-match the ABI named in the :variable:`CMAKE_ANDROID_ARCH_ABI` variable.
-
-If not specified, the default will be a value that selects the latest
-available GCC toolchain.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_PROCESS_MAX.rst b/share/cmake-3.18/Help/variable/CMAKE_ANDROID_PROCESS_MAX.rst
deleted file mode 100644
index 19fb527..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_PROCESS_MAX.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CMAKE_ANDROID_PROCESS_MAX
--------------------------
-
-Default value for the :prop_tgt:`ANDROID_PROCESS_MAX` target property.
-See that target property for additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_PROGUARD.rst b/share/cmake-3.18/Help/variable/CMAKE_ANDROID_PROGUARD.rst
deleted file mode 100644
index b8fdd46..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_PROGUARD.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CMAKE_ANDROID_PROGUARD
-----------------------
-
-Default value for the :prop_tgt:`ANDROID_PROGUARD` target property.
-See that target property for additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_PROGUARD_CONFIG_PATH.rst b/share/cmake-3.18/Help/variable/CMAKE_ANDROID_PROGUARD_CONFIG_PATH.rst
deleted file mode 100644
index 8dea009..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_PROGUARD_CONFIG_PATH.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CMAKE_ANDROID_PROGUARD_CONFIG_PATH
-----------------------------------
-
-Default value for the :prop_tgt:`ANDROID_PROGUARD_CONFIG_PATH` target property.
-See that target property for additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_SECURE_PROPS_PATH.rst b/share/cmake-3.18/Help/variable/CMAKE_ANDROID_SECURE_PROPS_PATH.rst
deleted file mode 100644
index 69a4d0b..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_SECURE_PROPS_PATH.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CMAKE_ANDROID_SECURE_PROPS_PATH
--------------------------------
-
-Default value for the :prop_tgt:`ANDROID_SECURE_PROPS_PATH` target property.
-See that target property for additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_SKIP_ANT_STEP.rst b/share/cmake-3.18/Help/variable/CMAKE_ANDROID_SKIP_ANT_STEP.rst
deleted file mode 100644
index 0a96df9..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_SKIP_ANT_STEP.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CMAKE_ANDROID_SKIP_ANT_STEP
----------------------------
-
-Default value for the :prop_tgt:`ANDROID_SKIP_ANT_STEP` target property.
-See that target property for additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_STANDALONE_TOOLCHAIN.rst b/share/cmake-3.18/Help/variable/CMAKE_ANDROID_STANDALONE_TOOLCHAIN.rst
deleted file mode 100644
index ea62cab..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_STANDALONE_TOOLCHAIN.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-CMAKE_ANDROID_STANDALONE_TOOLCHAIN
-----------------------------------
-
-When :ref:`Cross Compiling for Android with a Standalone Toolchain`, this
-variable holds the absolute path to the root directory of the toolchain.
-The specified directory must contain a ``sysroot`` subdirectory.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_STL_TYPE.rst b/share/cmake-3.18/Help/variable/CMAKE_ANDROID_STL_TYPE.rst
deleted file mode 100644
index d174575..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_STL_TYPE.rst
+++ /dev/null
@@ -1,37 +0,0 @@
-CMAKE_ANDROID_STL_TYPE
-----------------------
-
-When :ref:`Cross Compiling for Android with NVIDIA Nsight Tegra Visual Studio
-Edition`, this variable may be set to specify the default value for the
-:prop_tgt:`ANDROID_STL_TYPE` target property.  See that target property
-for additional information.
-
-When :ref:`Cross Compiling for Android with the NDK`, this variable may be
-set to specify the STL variant to be used.  The value may be one of:
-
-``none``
-  No C++ Support
-``system``
-  Minimal C++ without STL
-``gabi++_static``
-  GAbi++ Static
-``gabi++_shared``
-  GAbi++ Shared
-``gnustl_static``
-  GNU libstdc++ Static
-``gnustl_shared``
-  GNU libstdc++ Shared
-``c++_static``
-  LLVM libc++ Static
-``c++_shared``
-  LLVM libc++ Shared
-``stlport_static``
-  STLport Static
-``stlport_shared``
-  STLport Shared
-
-The default value is ``gnustl_static`` on NDK versions that provide it
-and otherwise ``c++_static``.  Note that this default differs from
-the native NDK build system because CMake may be used to build projects for
-Android that are not natively implemented for it and use the C++ standard
-library.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ARCHIVE_OUTPUT_DIRECTORY_CONFIG.rst b/share/cmake-3.18/Help/variable/CMAKE_ARCHIVE_OUTPUT_DIRECTORY_CONFIG.rst
deleted file mode 100644
index 94c2b6e..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ARCHIVE_OUTPUT_DIRECTORY_CONFIG.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CMAKE_ARCHIVE_OUTPUT_DIRECTORY_<CONFIG>
----------------------------------------
-
-Where to put all the :ref:`ARCHIVE <Archive Output Artifacts>`
-target files when built for a specific configuration.
-
-This variable is used to initialize the
-:prop_tgt:`ARCHIVE_OUTPUT_DIRECTORY_<CONFIG>` property on all the targets.
-See that target property for additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_AUTOGEN_ORIGIN_DEPENDS.rst b/share/cmake-3.18/Help/variable/CMAKE_AUTOGEN_ORIGIN_DEPENDS.rst
deleted file mode 100644
index 1398e78..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_AUTOGEN_ORIGIN_DEPENDS.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_AUTOGEN_ORIGIN_DEPENDS
-----------------------------
-
-Switch for forwarding origin target dependencies to the corresponding
-``_autogen`` targets.
-
-This variable is used to initialize the :prop_tgt:`AUTOGEN_ORIGIN_DEPENDS`
-property on all the targets.  See that target property for additional
-information.
-
-By default :variable:`CMAKE_AUTOGEN_ORIGIN_DEPENDS` is ``ON``.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_AUTOGEN_PARALLEL.rst b/share/cmake-3.18/Help/variable/CMAKE_AUTOGEN_PARALLEL.rst
deleted file mode 100644
index dd9499a..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_AUTOGEN_PARALLEL.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-CMAKE_AUTOGEN_PARALLEL
-----------------------
-
-Number of parallel ``moc`` or ``uic`` processes to start when using
-:prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`.
-
-This variable is used to initialize the :prop_tgt:`AUTOGEN_PARALLEL` property
-on all the targets.  See that target property for additional information.
-
-By default :variable:`CMAKE_AUTOGEN_PARALLEL` is unset.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_AUTOGEN_VERBOSE.rst b/share/cmake-3.18/Help/variable/CMAKE_AUTOGEN_VERBOSE.rst
deleted file mode 100644
index bad9cf2..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_AUTOGEN_VERBOSE.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-CMAKE_AUTOGEN_VERBOSE
----------------------
-
-Sets the verbosity of :prop_tgt:`AUTOMOC`, :prop_tgt:`AUTOUIC` and
-:prop_tgt:`AUTORCC`.  A positive integer value or a true boolean value
-lets the ``AUTO*`` generators output additional processing information.
-
-Setting :variable:`CMAKE_AUTOGEN_VERBOSE` has the same effect
-as setting the ``VERBOSE`` environment variable during
-generation (e.g. by calling ``make VERBOSE=1``).
-The extra verbosity is limited to the ``AUTO*`` generators though.
-
-By default :variable:`CMAKE_AUTOGEN_VERBOSE` is unset.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_AUTOMOC_COMPILER_PREDEFINES.rst b/share/cmake-3.18/Help/variable/CMAKE_AUTOMOC_COMPILER_PREDEFINES.rst
deleted file mode 100644
index 7e1c53d..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_AUTOMOC_COMPILER_PREDEFINES.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CMAKE_AUTOMOC_COMPILER_PREDEFINES
----------------------------------
-
-This variable is used to initialize the :prop_tgt:`AUTOMOC_COMPILER_PREDEFINES`
-property on all the targets. See that target property for additional
-information.
-
-By default it is ON.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_AUTOMOC_DEPEND_FILTERS.rst b/share/cmake-3.18/Help/variable/CMAKE_AUTOMOC_DEPEND_FILTERS.rst
deleted file mode 100644
index 5c3662d..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_AUTOMOC_DEPEND_FILTERS.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-CMAKE_AUTOMOC_DEPEND_FILTERS
-----------------------------
-
-Filter definitions used by :variable:`CMAKE_AUTOMOC`
-to extract file names from source code as additional dependencies
-for the ``moc`` file.
-
-This variable is used to initialize the :prop_tgt:`AUTOMOC_DEPEND_FILTERS`
-property on all the targets. See that target property for additional
-information.
-
-By default it is empty.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_AUTOMOC_MACRO_NAMES.rst b/share/cmake-3.18/Help/variable/CMAKE_AUTOMOC_MACRO_NAMES.rst
deleted file mode 100644
index ba1b9d2..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_AUTOMOC_MACRO_NAMES.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-CMAKE_AUTOMOC_MACRO_NAMES
-----------------------------
-
-:ref:`Semicolon-separated list <CMake Language Lists>` list of macro names used by
-:variable:`CMAKE_AUTOMOC` to determine if a C++ file needs to be
-processed by ``moc``.
-
-This variable is used to initialize the :prop_tgt:`AUTOMOC_MACRO_NAMES`
-property on all the targets. See that target property for additional
-information.
-
-The default value is ``Q_OBJECT;Q_GADGET;Q_NAMESPACE``.
-
-Example
-^^^^^^^
-Let CMake know that source files that contain ``CUSTOM_MACRO`` must be ``moc``
-processed as well::
-
-  set(CMAKE_AUTOMOC ON)
-  list(APPEND CMAKE_AUTOMOC_MACRO_NAMES "CUSTOM_MACRO")
diff --git a/share/cmake-3.18/Help/variable/CMAKE_AUTOMOC_PATH_PREFIX.rst b/share/cmake-3.18/Help/variable/CMAKE_AUTOMOC_PATH_PREFIX.rst
deleted file mode 100644
index dca0b06..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_AUTOMOC_PATH_PREFIX.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_AUTOMOC_PATH_PREFIX
--------------------------
-
-Whether to generate the ``-p`` path prefix option for ``moc`` on
-:prop_tgt:`AUTOMOC` enabled Qt targets.
-
-This variable is used to initialize the :prop_tgt:`AUTOMOC_PATH_PREFIX`
-property on all the targets.  See that target property for additional
-information.
-
-The default value is ``ON``.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_AUTOMOC_RELAXED_MODE.rst b/share/cmake-3.18/Help/variable/CMAKE_AUTOMOC_RELAXED_MODE.rst
deleted file mode 100644
index 6c0c61b..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_AUTOMOC_RELAXED_MODE.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-CMAKE_AUTOMOC_RELAXED_MODE
---------------------------
-
-.. deprecated:: 3.15
-
-Switch between strict and relaxed automoc mode.
-
-By default, :prop_tgt:`AUTOMOC` behaves exactly as described in the
-documentation of the :prop_tgt:`AUTOMOC` target property.  When set to
-``TRUE``, it accepts more input and tries to find the correct input file for
-``moc`` even if it differs from the documented behaviour.  In this mode it
-e.g.  also checks whether a header file is intended to be processed by moc
-when a ``"foo.moc"`` file has been included.
-
-Relaxed mode has to be enabled for KDE4 compatibility.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_AUTOUIC_SEARCH_PATHS.rst b/share/cmake-3.18/Help/variable/CMAKE_AUTOUIC_SEARCH_PATHS.rst
deleted file mode 100644
index aa132bf..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_AUTOUIC_SEARCH_PATHS.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_AUTOUIC_SEARCH_PATHS
---------------------------
-
-Search path list used by :variable:`CMAKE_AUTOUIC` to find included
-``.ui`` files.
-
-This variable is used to initialize the :prop_tgt:`AUTOUIC_SEARCH_PATHS`
-property on all the targets. See that target property for additional
-information.
-
-By default it is empty.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_BUILD_RPATH.rst b/share/cmake-3.18/Help/variable/CMAKE_BUILD_RPATH.rst
deleted file mode 100644
index f5d53b8..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_BUILD_RPATH.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-CMAKE_BUILD_RPATH
------------------
-
-:ref:`Semicolon-separated list <CMake Language Lists>` specifying runtime path (``RPATH``)
-entries to add to binaries linked in the build tree (for platforms that
-support it).  The entries will *not* be used for binaries in the install
-tree.  See also the :variable:`CMAKE_INSTALL_RPATH` variable.
-
-This is used to initialize the :prop_tgt:`BUILD_RPATH` target property
-for all targets.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_BUILD_RPATH_USE_ORIGIN.rst b/share/cmake-3.18/Help/variable/CMAKE_BUILD_RPATH_USE_ORIGIN.rst
deleted file mode 100644
index e34ede6..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_BUILD_RPATH_USE_ORIGIN.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-CMAKE_BUILD_RPATH_USE_ORIGIN
-----------------------------
-
-Whether to use relative paths for the build ``RPATH``.
-
-This is used to initialize the :prop_tgt:`BUILD_RPATH_USE_ORIGIN` target
-property for all targets, see that property for more details.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_BUILD_TYPE.rst b/share/cmake-3.18/Help/variable/CMAKE_BUILD_TYPE.rst
deleted file mode 100644
index 2d35635..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_BUILD_TYPE.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-CMAKE_BUILD_TYPE
-----------------
-
-Specifies the build type on single-configuration generators.
-
-This statically specifies what build type (configuration) will be
-built in this build tree.  Possible values are empty, ``Debug``, ``Release``,
-``RelWithDebInfo``, ``MinSizeRel``, ...  This variable is only meaningful to
-single-configuration generators (such as :ref:`Makefile Generators` and
-:generator:`Ninja`) i.e.  those which choose a single configuration when CMake
-runs to generate a build tree as opposed to multi-configuration generators
-which offer selection of the build configuration within the generated build
-environment.  There are many per-config properties and variables
-(usually following clean ``SOME_VAR_<CONFIG>`` order conventions), such as
-``CMAKE_C_FLAGS_<CONFIG>``, specified as uppercase:
-``CMAKE_C_FLAGS_[DEBUG|RELEASE|RELWITHDEBINFO|MINSIZEREL|...]``.  For example,
-in a build tree configured to build type ``Debug``, CMake will see to
-having :variable:`CMAKE_C_FLAGS_DEBUG <CMAKE_<LANG>_FLAGS_DEBUG>` settings get
-added to the :variable:`CMAKE_C_FLAGS <CMAKE_<LANG>_FLAGS>` settings.  See
-also :variable:`CMAKE_CONFIGURATION_TYPES`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_BUILD_WITH_INSTALL_NAME_DIR.rst b/share/cmake-3.18/Help/variable/CMAKE_BUILD_WITH_INSTALL_NAME_DIR.rst
deleted file mode 100644
index 30d5d3b..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_BUILD_WITH_INSTALL_NAME_DIR.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-CMAKE_BUILD_WITH_INSTALL_NAME_DIR
----------------------------------
-
-Whether to use :prop_tgt:`INSTALL_NAME_DIR` on targets in the build tree.
-
-This variable is used to initialize the :prop_tgt:`BUILD_WITH_INSTALL_NAME_DIR`
-property on all targets.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CFG_INTDIR.rst b/share/cmake-3.18/Help/variable/CMAKE_CFG_INTDIR.rst
deleted file mode 100644
index 842654e..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_CFG_INTDIR.rst
+++ /dev/null
@@ -1,52 +0,0 @@
-CMAKE_CFG_INTDIR
-----------------
-
-Build-time reference to per-configuration output subdirectory.
-
-For native build systems supporting multiple configurations in the
-build tree (such as :ref:`Visual Studio Generators` and :generator:`Xcode`),
-the value is a reference to a build-time variable specifying the name
-of the per-configuration output subdirectory.  On :ref:`Makefile Generators`
-this evaluates to `.` because there is only one configuration in a build tree.
-Example values:
-
-::
-
-  $(ConfigurationName) = Visual Studio 9
-  $(Configuration)     = Visual Studio 10
-  $(CONFIGURATION)     = Xcode
-  .                    = Make-based tools
-  .                    = Ninja
-  ${CONFIGURATION}     = Ninja Multi-Config
-
-Note that this variable only has limited support on
-:generator:`Ninja Multi-Config`. It is recommended that you use the
-``$<CONFIG>`` :manual:`generator expression <cmake-generator-expressions(7)>`
-instead.
-
-Since these values are evaluated by the native build system, this
-variable is suitable only for use in command lines that will be
-evaluated at build time.  Example of intended usage:
-
-::
-
-  add_executable(mytool mytool.c)
-  add_custom_command(
-    OUTPUT out.txt
-    COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/mytool
-            ${CMAKE_CURRENT_SOURCE_DIR}/in.txt out.txt
-    DEPENDS mytool in.txt
-    )
-  add_custom_target(drive ALL DEPENDS out.txt)
-
-Note that ``CMAKE_CFG_INTDIR`` is no longer necessary for this purpose but
-has been left for compatibility with existing projects.  Instead
-:command:`add_custom_command` recognizes executable target names in its
-``COMMAND`` option, so
-``${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/mytool`` can be replaced
-by just ``mytool``.
-
-This variable is read-only.  Setting it is undefined behavior.  In
-multi-configuration build systems the value of this variable is passed
-as the value of preprocessor symbol ``CMAKE_INTDIR`` to the compilation
-of all source files.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CODEBLOCKS_COMPILER_ID.rst b/share/cmake-3.18/Help/variable/CMAKE_CODEBLOCKS_COMPILER_ID.rst
deleted file mode 100644
index ad2709d..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_CODEBLOCKS_COMPILER_ID.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-CMAKE_CODEBLOCKS_COMPILER_ID
-----------------------------
-
-Change the compiler id in the generated CodeBlocks project files.
-
-CodeBlocks uses its own compiler id string which differs from
-:variable:`CMAKE_<LANG>_COMPILER_ID`.  If this variable is left empty,
-CMake tries to recognize the CodeBlocks compiler id automatically.
-Otherwise the specified string is used in the CodeBlocks project file.
-See the CodeBlocks documentation for valid compiler id strings.
-
-Other IDEs like QtCreator that also use the CodeBlocks generator may ignore
-this setting.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CODEBLOCKS_EXCLUDE_EXTERNAL_FILES.rst b/share/cmake-3.18/Help/variable/CMAKE_CODEBLOCKS_EXCLUDE_EXTERNAL_FILES.rst
deleted file mode 100644
index 80ffce3..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_CODEBLOCKS_EXCLUDE_EXTERNAL_FILES.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-CMAKE_CODEBLOCKS_EXCLUDE_EXTERNAL_FILES
----------------------------------------
-
-Change the way the CodeBlocks generator creates project files.
-
-If this variable evaluates to ``ON`` the generator excludes from
-the project file any files that are located outside the project root.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CODELITE_USE_TARGETS.rst b/share/cmake-3.18/Help/variable/CMAKE_CODELITE_USE_TARGETS.rst
deleted file mode 100644
index 33cdf6c..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_CODELITE_USE_TARGETS.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CMAKE_CODELITE_USE_TARGETS
---------------------------
-
-Change the way the CodeLite generator creates projectfiles.
-
-If this variable evaluates to ``ON`` at the end of the top-level
-``CMakeLists.txt`` file, the generator creates projectfiles based on targets
-rather than projects.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_COMPILER_IS_GNUCC.rst b/share/cmake-3.18/Help/variable/CMAKE_COMPILER_IS_GNUCC.rst
deleted file mode 100644
index a40667e..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_COMPILER_IS_GNUCC.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CMAKE_COMPILER_IS_GNUCC
------------------------
-
-True if the ``C`` compiler is GNU.
-Use :variable:`CMAKE_C_COMPILER_ID <CMAKE_<LANG>_COMPILER_ID>` instead.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_COMPILER_IS_GNUCXX.rst b/share/cmake-3.18/Help/variable/CMAKE_COMPILER_IS_GNUCXX.rst
deleted file mode 100644
index f1f5cf7..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_COMPILER_IS_GNUCXX.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CMAKE_COMPILER_IS_GNUCXX
-------------------------
-
-True if the C++ (``CXX``) compiler is GNU.
-Use :variable:`CMAKE_CXX_COMPILER_ID <CMAKE_<LANG>_COMPILER_ID>` instead.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_COMPILER_IS_GNUG77.rst b/share/cmake-3.18/Help/variable/CMAKE_COMPILER_IS_GNUG77.rst
deleted file mode 100644
index 3d6dab4..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_COMPILER_IS_GNUG77.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CMAKE_COMPILER_IS_GNUG77
-------------------------
-
-True if the ``Fortran`` compiler is GNU.
-Use :variable:`CMAKE_Fortran_COMPILER_ID <CMAKE_<LANG>_COMPILER_ID>` instead.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY.rst b/share/cmake-3.18/Help/variable/CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY.rst
deleted file mode 100644
index ea33c7d..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY
-----------------------------------
-
-Output directory for MS debug symbol ``.pdb`` files
-generated by the compiler while building source files.
-
-This variable is used to initialize the
-:prop_tgt:`COMPILE_PDB_OUTPUT_DIRECTORY` property on all the targets.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY_CONFIG.rst b/share/cmake-3.18/Help/variable/CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY_CONFIG.rst
deleted file mode 100644
index fdeb9ab..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY_CONFIG.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY_<CONFIG>
--------------------------------------------
-
-Per-configuration output directory for MS debug symbol ``.pdb`` files
-generated by the compiler while building source files.
-
-This is a per-configuration version of
-:variable:`CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY`.
-This variable is used to initialize the
-:prop_tgt:`COMPILE_PDB_OUTPUT_DIRECTORY_<CONFIG>`
-property on all the targets.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CONFIGURATION_TYPES.rst b/share/cmake-3.18/Help/variable/CMAKE_CONFIGURATION_TYPES.rst
deleted file mode 100644
index 34e99eb..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_CONFIGURATION_TYPES.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-CMAKE_CONFIGURATION_TYPES
--------------------------
-
-Specifies the available build types on multi-config generators.
-
-This specifies what build types (configurations) will be available
-such as ``Debug``, ``Release``, ``RelWithDebInfo`` etc.  This has reasonable
-defaults on most platforms, but can be extended to provide other build
-types.  See also :variable:`CMAKE_BUILD_TYPE` for details of managing
-configuration data, and :variable:`CMAKE_CFG_INTDIR`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CPACK_COMMAND.rst b/share/cmake-3.18/Help/variable/CMAKE_CPACK_COMMAND.rst
deleted file mode 100644
index 559108a..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_CPACK_COMMAND.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CMAKE_CPACK_COMMAND
--------------------
-
-Full path to :manual:`cpack(1)` command installed with CMake.
-
-This is the full path to the CPack executable :manual:`cpack(1)` which is
-useful from custom commands that want to use the :manual:`cmake(1)` ``-E``
-option for portable system commands.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CROSSCOMPILING_EMULATOR.rst b/share/cmake-3.18/Help/variable/CMAKE_CROSSCOMPILING_EMULATOR.rst
deleted file mode 100644
index 1d013b7..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_CROSSCOMPILING_EMULATOR.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-CMAKE_CROSSCOMPILING_EMULATOR
------------------------------
-
-This variable is only used when :variable:`CMAKE_CROSSCOMPILING` is on. It
-should point to a command on the host system that can run executable built
-for the target system.
-
-If this variable contains a :ref:`semicolon-separated list <CMake Language
-Lists>`, then the first value is the command and remaining values are its
-arguments.
-
-The command will be used to run :command:`try_run` generated executables,
-which avoids manual population of the ``TryRunResults.cmake`` file.
-
-It is also used as the default value for the
-:prop_tgt:`CROSSCOMPILING_EMULATOR` target property of executables.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CROSS_CONFIGS.rst b/share/cmake-3.18/Help/variable/CMAKE_CROSS_CONFIGS.rst
deleted file mode 100644
index 94157f3..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_CROSS_CONFIGS.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-CMAKE_CROSS_CONFIGS
--------------------
-
-Specifies a :ref:`semicolon-separated list <CMake Language Lists>` of
-configurations available from all ``build-<Config>.ninja`` files in the
-:generator:`Ninja Multi-Config` generator.  This variable activates
-cross-config mode. Targets from each config specified in this variable can be
-built from any ``build-<Config>.ninja`` file. Custom commands will use the
-configuration native to ``build-<Config>.ninja``. If it is set to ``all``, all
-configurations from :variable:`CMAKE_CONFIGURATION_TYPES` are cross-configs. If
-it is not specified, or empty, each ``build-<Config>.ninja`` file will only
-contain build rules for its own configuration.
-
-The value of this variable must be a subset of
-:variable:`CMAKE_CONFIGURATION_TYPES`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CTEST_ARGUMENTS.rst b/share/cmake-3.18/Help/variable/CMAKE_CTEST_ARGUMENTS.rst
deleted file mode 100644
index 0940b46..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_CTEST_ARGUMENTS.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-CMAKE_CTEST_ARGUMENTS
----------------------
-
-Set this to a :ref:`semicolon-separated list <CMake Language Lists>` of
-command-line arguments to pass to :manual:`ctest(1)` when running tests
-through the ``test`` (or ``RUN_TESTS``) target of the generated build system.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CUDA_ARCHITECTURES.rst b/share/cmake-3.18/Help/variable/CMAKE_CUDA_ARCHITECTURES.rst
deleted file mode 100644
index 149bffa..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_CUDA_ARCHITECTURES.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-CMAKE_CUDA_ARCHITECTURES
-------------------------
-
-Default value for :prop_tgt:`CUDA_ARCHITECTURES` property of targets.
-
-This is initialized as follows depending on :variable:`CMAKE_CUDA_COMPILER_ID <CMAKE_<LANG>_COMPILER_ID>`:
-
-- For ``Clang``: the oldest architecture that works.
-
-- For ``NVIDIA``: the default architecture chosen by the compiler.
-  See policy :policy:`CMP0104`.
-
-Users are encouraged to override this, as the default varies across compilers
-and compiler versions.
-
-This variable is used to initialize the :prop_tgt:`CUDA_ARCHITECTURES` property
-on all targets. See the target property for additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CUDA_COMPILE_FEATURES.rst b/share/cmake-3.18/Help/variable/CMAKE_CUDA_COMPILE_FEATURES.rst
deleted file mode 100644
index 2cd2650..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_CUDA_COMPILE_FEATURES.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_CUDA_COMPILE_FEATURES
----------------------------
-
-List of features known to the CUDA compiler
-
-These features are known to be available for use with the CUDA compiler. This
-list is a subset of the features listed in the
-:prop_gbl:`CMAKE_CUDA_KNOWN_FEATURES` global property.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CUDA_EXTENSIONS.rst b/share/cmake-3.18/Help/variable/CMAKE_CUDA_EXTENSIONS.rst
deleted file mode 100644
index 4fe758e..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_CUDA_EXTENSIONS.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_CUDA_EXTENSIONS
----------------------
-
-Default value for :prop_tgt:`CUDA_EXTENSIONS` property of targets.
-
-This variable is used to initialize the :prop_tgt:`CUDA_EXTENSIONS`
-property on all targets.  See that target property for additional
-information.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CUDA_HOST_COMPILER.rst b/share/cmake-3.18/Help/variable/CMAKE_CUDA_HOST_COMPILER.rst
deleted file mode 100644
index 6d34c5c..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_CUDA_HOST_COMPILER.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CMAKE_CUDA_HOST_COMPILER
-------------------------
-
-Executable to use when compiling host code when compiling ``CUDA`` language
-files. Maps to the ``nvcc -ccbin`` option.  Will only be used by CMake on the first
-configuration to determine a valid host compiler for ``CUDA``. After a valid
-host compiler has been found, this value is read-only.  This variable takes
-priority over the :envvar:`CUDAHOSTCXX` environment variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CUDA_RESOLVE_DEVICE_SYMBOLS.rst b/share/cmake-3.18/Help/variable/CMAKE_CUDA_RESOLVE_DEVICE_SYMBOLS.rst
deleted file mode 100644
index fc835cd..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_CUDA_RESOLVE_DEVICE_SYMBOLS.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-CMAKE_CUDA_RESOLVE_DEVICE_SYMBOLS
----------------------------------
-
-Default value for :prop_tgt:`CUDA_RESOLVE_DEVICE_SYMBOLS` target
-property. This variable is used to initialize the property on each target as
-it is created.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CUDA_RUNTIME_LIBRARY.rst b/share/cmake-3.18/Help/variable/CMAKE_CUDA_RUNTIME_LIBRARY.rst
deleted file mode 100644
index e3205d3..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_CUDA_RUNTIME_LIBRARY.rst
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_CUDA_RUNTIME_LIBRARY
---------------------------
-
-Select the CUDA runtime library for use when compiling and linking CUDA.
-This variable is used to initialize the :prop_tgt:`CUDA_RUNTIME_LIBRARY`
-property on all targets as they are created.
-
-The allowed case insensitive values are:
-
-.. include:: ../prop_tgt/CUDA_RUNTIME_LIBRARY-VALUES.txt
-
-Contents of ``CMAKE_CUDA_RUNTIME_LIBRARY`` may use
-:manual:`generator expressions <cmake-generator-expressions(7)>`.
-
-If this variable is not set then the :prop_tgt:`CUDA_RUNTIME_LIBRARY` target
-property will not be set automatically.  If that property is not set then
-CMake uses an appropriate default value based on the compiler to select the
-CUDA runtime library.
-
-.. note::
-
-  This property has effect only when the ``CUDA`` language is enabled. To
-  control the CUDA runtime linking when only using the CUDA SDK with the
-  ``C`` or ``C++`` language we recommend using the :module:`FindCUDAToolkit`
-  module.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CUDA_SEPARABLE_COMPILATION.rst b/share/cmake-3.18/Help/variable/CMAKE_CUDA_SEPARABLE_COMPILATION.rst
deleted file mode 100644
index eef92fb..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_CUDA_SEPARABLE_COMPILATION.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-CMAKE_CUDA_SEPARABLE_COMPILATION
---------------------------------
-
-Default value for :prop_tgt:`CUDA_SEPARABLE_COMPILATION` target property.
-This variable is used to initialize the property on each target as it is
-created.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CUDA_STANDARD.rst b/share/cmake-3.18/Help/variable/CMAKE_CUDA_STANDARD.rst
deleted file mode 100644
index 6c23031..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_CUDA_STANDARD.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_CUDA_STANDARD
--------------------
-
-Default value for :prop_tgt:`CUDA_STANDARD` property of targets.
-
-This variable is used to initialize the :prop_tgt:`CUDA_STANDARD`
-property on all targets.  See that target property for additional
-information.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CUDA_STANDARD_REQUIRED.rst b/share/cmake-3.18/Help/variable/CMAKE_CUDA_STANDARD_REQUIRED.rst
deleted file mode 100644
index 935d605..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_CUDA_STANDARD_REQUIRED.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_CUDA_STANDARD_REQUIRED
-----------------------------
-
-Default value for :prop_tgt:`CUDA_STANDARD_REQUIRED` property of targets.
-
-This variable is used to initialize the :prop_tgt:`CUDA_STANDARD_REQUIRED`
-property on all targets.  See that target property for additional
-information.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES.rst b/share/cmake-3.18/Help/variable/CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES.rst
deleted file mode 100644
index 7de50a5..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES
---------------------------------------
-
-When the ``CUDA`` language has been enabled, this provides a
-:ref:`semicolon-separated list <CMake Language Lists>` of include directories provided
-by the CUDA Toolkit.  The value may be useful for C++ source files
-to include CUDA headers.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CURRENT_FUNCTION.rst b/share/cmake-3.18/Help/variable/CMAKE_CURRENT_FUNCTION.rst
deleted file mode 100644
index fb7f610..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_CURRENT_FUNCTION.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-CMAKE_CURRENT_FUNCTION
-----------------------
-
-When executing code inside a :command:`function`, this variable
-contains the name of the current function.  It can be useful for
-diagnostic or debug messages.
-
-See also :variable:`CMAKE_CURRENT_FUNCTION_LIST_DIR`,
-:variable:`CMAKE_CURRENT_FUNCTION_LIST_FILE` and
-:variable:`CMAKE_CURRENT_FUNCTION_LIST_LINE`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CURRENT_FUNCTION_LIST_DIR.rst b/share/cmake-3.18/Help/variable/CMAKE_CURRENT_FUNCTION_LIST_DIR.rst
deleted file mode 100644
index 44ae1e5..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_CURRENT_FUNCTION_LIST_DIR.rst
+++ /dev/null
@@ -1,41 +0,0 @@
-CMAKE_CURRENT_FUNCTION_LIST_DIR
--------------------------------
-
-When executing code inside a :command:`function`, this variable
-contains the full directory of the listfile that defined the current function.
-
-It is quite common practice in CMake for modules to use some additional files,
-such as templates to be copied in after substituting CMake variables.
-In such cases, a function needs to know where to locate those files in a way
-that doesn't depend on where the function is called.  Without
-``CMAKE_CURRENT_FUNCTION_LIST_DIR``, the code to do that would typically use
-the following pattern:
-
-.. code-block:: cmake
-
-  set(_THIS_MODULE_BASE_DIR "${CMAKE_CURRENT_LIST_DIR}")
-
-  function(foo)
-    configure_file(
-      "${_THIS_MODULE_BASE_DIR}/some.template.in"
-      some.output
-    )
-  endfunction()
-
-Using ``CMAKE_CURRENT_FUNCTION_LIST_DIR`` inside the function instead
-eliminates the need for the extra variable which would otherwise be visible
-outside the function's scope.
-The above example can be written in the more concise and more robust form:
-
-.. code-block:: cmake
-
-  function(foo)
-    configure_file(
-      "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/some.template.in"
-      some.output
-    )
-  endfunction()
-
-See also :variable:`CMAKE_CURRENT_FUNCTION`,
-:variable:`CMAKE_CURRENT_FUNCTION_LIST_FILE` and
-:variable:`CMAKE_CURRENT_FUNCTION_LIST_LINE`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CURRENT_FUNCTION_LIST_FILE.rst b/share/cmake-3.18/Help/variable/CMAKE_CURRENT_FUNCTION_LIST_FILE.rst
deleted file mode 100644
index c737af9..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_CURRENT_FUNCTION_LIST_FILE.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CMAKE_CURRENT_FUNCTION_LIST_FILE
---------------------------------
-
-When executing code inside a :command:`function`, this variable
-contains the full path to the listfile that defined the current function.
-
-See also :variable:`CMAKE_CURRENT_FUNCTION`,
-:variable:`CMAKE_CURRENT_FUNCTION_LIST_DIR` and
-:variable:`CMAKE_CURRENT_FUNCTION_LIST_LINE`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CURRENT_FUNCTION_LIST_LINE.rst b/share/cmake-3.18/Help/variable/CMAKE_CURRENT_FUNCTION_LIST_LINE.rst
deleted file mode 100644
index ad6282e..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_CURRENT_FUNCTION_LIST_LINE.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-CMAKE_CURRENT_FUNCTION_LIST_LINE
---------------------------------
-
-When executing code inside a :command:`function`, this variable
-contains the line number in the listfile where the current function
-was defined.
-
-See also :variable:`CMAKE_CURRENT_FUNCTION`,
-:variable:`CMAKE_CURRENT_FUNCTION_LIST_DIR` and
-:variable:`CMAKE_CURRENT_FUNCTION_LIST_FILE`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CURRENT_LIST_LINE.rst b/share/cmake-3.18/Help/variable/CMAKE_CURRENT_LIST_LINE.rst
deleted file mode 100644
index 60e8e26..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_CURRENT_LIST_LINE.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-CMAKE_CURRENT_LIST_LINE
------------------------
-
-The line number of the current file being processed.
-
-This is the line number of the file currently being processed by
-cmake.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CXX_COMPILE_FEATURES.rst b/share/cmake-3.18/Help/variable/CMAKE_CXX_COMPILE_FEATURES.rst
deleted file mode 100644
index 5c59f95..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_CXX_COMPILE_FEATURES.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_CXX_COMPILE_FEATURES
---------------------------
-
-List of features known to the C++ compiler
-
-These features are known to be available for use with the C++ compiler. This
-list is a subset of the features listed in the
-:prop_gbl:`CMAKE_CXX_KNOWN_FEATURES` global property.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CXX_EXTENSIONS.rst b/share/cmake-3.18/Help/variable/CMAKE_CXX_EXTENSIONS.rst
deleted file mode 100644
index 4a92425..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_CXX_EXTENSIONS.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_CXX_EXTENSIONS
---------------------
-
-Default value for :prop_tgt:`CXX_EXTENSIONS` property of targets.
-
-This variable is used to initialize the :prop_tgt:`CXX_EXTENSIONS`
-property on all targets.  See that target property for additional
-information.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CXX_STANDARD.rst b/share/cmake-3.18/Help/variable/CMAKE_CXX_STANDARD.rst
deleted file mode 100644
index 8a8bdff..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_CXX_STANDARD.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_CXX_STANDARD
-------------------
-
-Default value for :prop_tgt:`CXX_STANDARD` property of targets.
-
-This variable is used to initialize the :prop_tgt:`CXX_STANDARD`
-property on all targets.  See that target property for additional
-information.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CXX_STANDARD_REQUIRED.rst b/share/cmake-3.18/Help/variable/CMAKE_CXX_STANDARD_REQUIRED.rst
deleted file mode 100644
index 4c71058..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_CXX_STANDARD_REQUIRED.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_CXX_STANDARD_REQUIRED
----------------------------
-
-Default value for :prop_tgt:`CXX_STANDARD_REQUIRED` property of targets.
-
-This variable is used to initialize the :prop_tgt:`CXX_STANDARD_REQUIRED`
-property on all targets.  See that target property for additional
-information.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_C_COMPILE_FEATURES.rst b/share/cmake-3.18/Help/variable/CMAKE_C_COMPILE_FEATURES.rst
deleted file mode 100644
index 8d1eca0..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_C_COMPILE_FEATURES.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_C_COMPILE_FEATURES
-------------------------
-
-List of features known to the C compiler
-
-These features are known to be available for use with the C compiler. This
-list is a subset of the features listed in the
-:prop_gbl:`CMAKE_C_KNOWN_FEATURES` global property.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_C_EXTENSIONS.rst b/share/cmake-3.18/Help/variable/CMAKE_C_EXTENSIONS.rst
deleted file mode 100644
index fa510d4..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_C_EXTENSIONS.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_C_EXTENSIONS
-------------------
-
-Default value for :prop_tgt:`C_EXTENSIONS` property of targets.
-
-This variable is used to initialize the :prop_tgt:`C_EXTENSIONS`
-property on all targets.  See that target property for additional
-information.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_C_STANDARD.rst b/share/cmake-3.18/Help/variable/CMAKE_C_STANDARD.rst
deleted file mode 100644
index b55e00c..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_C_STANDARD.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_C_STANDARD
-----------------
-
-Default value for :prop_tgt:`C_STANDARD` property of targets.
-
-This variable is used to initialize the :prop_tgt:`C_STANDARD`
-property on all targets.  See that target property for additional
-information.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_C_STANDARD_REQUIRED.rst b/share/cmake-3.18/Help/variable/CMAKE_C_STANDARD_REQUIRED.rst
deleted file mode 100644
index 7f70f6e..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_C_STANDARD_REQUIRED.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_C_STANDARD_REQUIRED
--------------------------
-
-Default value for :prop_tgt:`C_STANDARD_REQUIRED` property of targets.
-
-This variable is used to initialize the :prop_tgt:`C_STANDARD_REQUIRED`
-property on all targets.  See that target property for additional
-information.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_DEFAULT_BUILD_TYPE.rst b/share/cmake-3.18/Help/variable/CMAKE_DEFAULT_BUILD_TYPE.rst
deleted file mode 100644
index aa4f82d..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_DEFAULT_BUILD_TYPE.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-CMAKE_DEFAULT_BUILD_TYPE
-------------------------
-
-Specifies the configuration to use by default in a ``build.ninja`` file in the
-:generator:`Ninja Multi-Config` generator. If this variable is specified,
-``build.ninja`` uses build rules from ``build-<Config>.ninja`` by default. All
-custom commands are executed with this configuration. If the variable is not
-specified, the first item from :variable:`CMAKE_CONFIGURATION_TYPES` is used
-instead.
-
-The value of this variable must be one of the items from
-:variable:`CMAKE_CONFIGURATION_TYPES`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_DEFAULT_CONFIGS.rst b/share/cmake-3.18/Help/variable/CMAKE_DEFAULT_CONFIGS.rst
deleted file mode 100644
index 84c642a..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_DEFAULT_CONFIGS.rst
+++ /dev/null
@@ -1,19 +0,0 @@
-CMAKE_DEFAULT_CONFIGS
----------------------
-
-Specifies a :ref:`semicolon-separated list <CMake Language Lists>` of configurations
-to build for a target in ``build.ninja`` if no ``:<Config>`` suffix is specified in
-the :generator:`Ninja Multi-Config` generator. If it is set to ``all``, all
-configurations from :variable:`CMAKE_CROSS_CONFIGS` are used. If it is not
-specified, it defaults to :variable:`CMAKE_DEFAULT_BUILD_TYPE`.
-
-For example, if you set :variable:`CMAKE_DEFAULT_BUILD_TYPE` to ``Release``,
-but set :variable:`CMAKE_DEFAULT_CONFIGS` to ``Debug`` or ``all``, all
-``<target>`` aliases in ``build.ninja`` will resolve to ``<target>:Debug`` or
-``<target>:all``, but custom commands will still use the ``Release``
-configuration.
-
-The value of this variable must be a subset of :variable:`CMAKE_CROSS_CONFIGS`
-or be the same as :variable:`CMAKE_DEFAULT_BUILD_TYPE`. It must not be
-specified if :variable:`CMAKE_DEFAULT_BUILD_TYPE` or
-:variable:`CMAKE_CROSS_CONFIGS` is not used.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_DEPENDS_IN_PROJECT_ONLY.rst b/share/cmake-3.18/Help/variable/CMAKE_DEPENDS_IN_PROJECT_ONLY.rst
deleted file mode 100644
index 7179071..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_DEPENDS_IN_PROJECT_ONLY.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-CMAKE_DEPENDS_IN_PROJECT_ONLY
------------------------------
-
-When set to ``TRUE`` in a directory, the build system produced by the
-:ref:`Makefile Generators` is set up to only consider dependencies on source
-files that appear either in the source or in the binary directories.  Changes
-to source files outside of these directories will not cause rebuilds.
-
-This should be used carefully in cases where some source files are picked up
-through external headers during the build.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_DIRECTORY_LABELS.rst b/share/cmake-3.18/Help/variable/CMAKE_DIRECTORY_LABELS.rst
deleted file mode 100644
index 2a6c410..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_DIRECTORY_LABELS.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-CMAKE_DIRECTORY_LABELS
------------------------
-
-Specify labels for the current directory.
-
-This is used to initialize the :prop_dir:`LABELS` directory property.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_DISABLE_FIND_PACKAGE_PackageName.rst b/share/cmake-3.18/Help/variable/CMAKE_DISABLE_FIND_PACKAGE_PackageName.rst
deleted file mode 100644
index ed60020..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_DISABLE_FIND_PACKAGE_PackageName.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-CMAKE_DISABLE_FIND_PACKAGE_<PackageName>
-----------------------------------------
-
-Variable for disabling :command:`find_package` calls.
-
-Every non-``REQUIRED`` :command:`find_package` call in a project can be
-disabled by setting the variable
-``CMAKE_DISABLE_FIND_PACKAGE_<PackageName>`` to ``TRUE``.
-This can be used to build a project without an optional package,
-although that package is installed.
-
-This switch should be used during the initial CMake run.  Otherwise if
-the package has already been found in a previous CMake run, the
-variables which have been stored in the cache will still be there.  In
-that case it is recommended to remove the cache variables for this
-package from the cache using the cache editor or :manual:`cmake(1)` ``-U``
diff --git a/share/cmake-3.18/Help/variable/CMAKE_DISABLE_PRECOMPILE_HEADERS.rst b/share/cmake-3.18/Help/variable/CMAKE_DISABLE_PRECOMPILE_HEADERS.rst
deleted file mode 100644
index 7c30ede..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_DISABLE_PRECOMPILE_HEADERS.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-CMAKE_DISABLE_PRECOMPILE_HEADERS
---------------------------------
-
-Default value for :prop_tgt:`DISABLE_PRECOMPILE_HEADERS` of targets.
-
-By default ``CMAKE_DISABLE_PRECOMPILE_HEADERS`` is ``OFF``.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_DOTNET_TARGET_FRAMEWORK.rst b/share/cmake-3.18/Help/variable/CMAKE_DOTNET_TARGET_FRAMEWORK.rst
deleted file mode 100644
index 8edcd1e..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_DOTNET_TARGET_FRAMEWORK.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-CMAKE_DOTNET_TARGET_FRAMEWORK
------------------------------
-
-Default value for :prop_tgt:`DOTNET_TARGET_FRAMEWORK` property	of
-targets.
-
-This variable is used to initialize the
-:prop_tgt:`DOTNET_TARGET_FRAMEWORK` property on all targets. See that
-target property for additional information.
-
-Setting ``CMAKE_DOTNET_TARGET_FRAMEWORK`` may be necessary
-when working with ``C#`` and newer .NET framework versions to
-avoid referencing errors with the ``ALL_BUILD`` CMake target.
-
-This variable is only evaluated for :ref:`Visual Studio Generators`
-VS 2010 and above.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION.rst b/share/cmake-3.18/Help/variable/CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION.rst
deleted file mode 100644
index c2eef9e..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION
--------------------------------------
-
-Default value for :prop_tgt:`DOTNET_TARGET_FRAMEWORK_VERSION`
-property of targets.
-
-This variable is used to initialize the
-:prop_tgt:`DOTNET_TARGET_FRAMEWORK_VERSION` property on all
-targets. See that target property for additional information. When set,
-:variable:`CMAKE_DOTNET_TARGET_FRAMEWORK` takes precednece over this
-variable. See that variable or the associated target property
-:prop_tgt:`DOTNET_TARGET_FRAMEWORK` for additional information.
-
-
-Setting ``CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION`` may be necessary
-when working with ``C#`` and newer .NET framework versions to
-avoid referencing errors with the ``ALL_BUILD`` CMake target.
-
-This variable is only evaluated for :ref:`Visual Studio Generators`
-VS 2010 and above.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ECLIPSE_GENERATE_LINKED_RESOURCES.rst b/share/cmake-3.18/Help/variable/CMAKE_ECLIPSE_GENERATE_LINKED_RESOURCES.rst
deleted file mode 100644
index 331aae8..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ECLIPSE_GENERATE_LINKED_RESOURCES.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-CMAKE_ECLIPSE_GENERATE_LINKED_RESOURCES
----------------------------------------
-
-This cache variable is used by the Eclipse project generator.  See
-:manual:`cmake-generators(7)`.
-
-The Eclipse project generator generates so-called linked resources
-e.g. to the subproject root dirs in the source tree or to the source files
-of targets.
-This can be disabled by setting this variable to FALSE.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT.rst b/share/cmake-3.18/Help/variable/CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT.rst
deleted file mode 100644
index 7b4367d..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT
--------------------------------------
-
-This cache variable is used by the Eclipse project generator.  See
-:manual:`cmake-generators(7)`.
-
-If this variable is set to TRUE, the Eclipse project generator will generate
-an Eclipse project in :variable:`CMAKE_SOURCE_DIR` . This project can then
-be used in Eclipse e.g. for the version control functionality.
-:variable:`CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT` defaults to FALSE; so
-nothing is written into the source directory.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ECLIPSE_MAKE_ARGUMENTS.rst b/share/cmake-3.18/Help/variable/CMAKE_ECLIPSE_MAKE_ARGUMENTS.rst
deleted file mode 100644
index 6e8a408..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ECLIPSE_MAKE_ARGUMENTS.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CMAKE_ECLIPSE_MAKE_ARGUMENTS
-----------------------------
-
-This cache variable is used by the Eclipse project generator.  See
-:manual:`cmake-generators(7)`.
-
-This variable holds arguments which are used when Eclipse invokes the make
-tool. By default it is initialized to hold flags to enable parallel builds
-(using -j typically).
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ECLIPSE_RESOURCE_ENCODING.rst b/share/cmake-3.18/Help/variable/CMAKE_ECLIPSE_RESOURCE_ENCODING.rst
deleted file mode 100644
index 314efe5..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ECLIPSE_RESOURCE_ENCODING.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-CMAKE_ECLIPSE_RESOURCE_ENCODING
--------------------------------
-
-This cache variable tells the :generator:`Eclipse CDT4` project generator
-to set the resource encoding to the given value in generated project files.
-If no value is given, no encoding will be set.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ECLIPSE_VERSION.rst b/share/cmake-3.18/Help/variable/CMAKE_ECLIPSE_VERSION.rst
deleted file mode 100644
index 8cc7882..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ECLIPSE_VERSION.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-CMAKE_ECLIPSE_VERSION
----------------------
-
-This cache variable is used by the Eclipse project generator.  See
-:manual:`cmake-generators(7)`.
-
-When using the Eclipse project generator, CMake tries to find the Eclipse
-executable and detect the version of it. Depending on the version it finds,
-some features are enabled or disabled. If CMake doesn't find
-Eclipse, it assumes the oldest supported version, Eclipse Callisto (3.2).
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ENABLE_EXPORTS.rst b/share/cmake-3.18/Help/variable/CMAKE_ENABLE_EXPORTS.rst
deleted file mode 100644
index 8848da1..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_ENABLE_EXPORTS.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CMAKE_ENABLE_EXPORTS
---------------------
-
-Specify whether executables export symbols for loadable modules.
-
-This variable is used to initialize the :prop_tgt:`ENABLE_EXPORTS` target
-property for executable targets when they are created by calls to the
-:command:`add_executable` command.  See the property documentation for details.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_EXECUTABLE_SUFFIX.rst b/share/cmake-3.18/Help/variable/CMAKE_EXECUTABLE_SUFFIX.rst
deleted file mode 100644
index 356590f..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_EXECUTABLE_SUFFIX.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CMAKE_EXECUTABLE_SUFFIX
------------------------
-
-The suffix for executables on this platform.
-
-The suffix to use for the end of an executable filename if any, ``.exe``
-on Windows.
-
-``CMAKE_EXECUTABLE_SUFFIX_<LANG>`` overrides this for language ``<LANG>``.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_EXECUTE_PROCESS_COMMAND_ECHO.rst b/share/cmake-3.18/Help/variable/CMAKE_EXECUTE_PROCESS_COMMAND_ECHO.rst
deleted file mode 100644
index 76561d8..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_EXECUTE_PROCESS_COMMAND_ECHO.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-CMAKE_EXECUTE_PROCESS_COMMAND_ECHO
-----------------------------------
-
-If this variable is set to ``STDERR``, ``STDOUT`` or ``NONE`` then commands
-in :command:`execute_process` calls will be printed to either stderr or
-stdout or not at all.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_EXE_LINKER_FLAGS_CONFIG_INIT.rst b/share/cmake-3.18/Help/variable/CMAKE_EXE_LINKER_FLAGS_CONFIG_INIT.rst
deleted file mode 100644
index 592a369..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_EXE_LINKER_FLAGS_CONFIG_INIT.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-CMAKE_EXE_LINKER_FLAGS_<CONFIG>_INIT
-------------------------------------
-
-Value used to initialize the :variable:`CMAKE_EXE_LINKER_FLAGS_<CONFIG>`
-cache entry the first time a build tree is configured.
-This variable is meant to be set by a :variable:`toolchain file
-<CMAKE_TOOLCHAIN_FILE>`.  CMake may prepend or append content to
-the value based on the environment and target platform.
-
-See also :variable:`CMAKE_EXE_LINKER_FLAGS_INIT`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_EXE_LINKER_FLAGS_INIT.rst b/share/cmake-3.18/Help/variable/CMAKE_EXE_LINKER_FLAGS_INIT.rst
deleted file mode 100644
index 0b8afe4..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_EXE_LINKER_FLAGS_INIT.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_EXE_LINKER_FLAGS_INIT
----------------------------
-
-Value used to initialize the :variable:`CMAKE_EXE_LINKER_FLAGS`
-cache entry the first time a build tree is configured.
-This variable is meant to be set by a :variable:`toolchain file
-<CMAKE_TOOLCHAIN_FILE>`.  CMake may prepend or append content to
-the value based on the environment and target platform.
-
-See also the configuration-specific variable
-:variable:`CMAKE_EXE_LINKER_FLAGS_<CONFIG>_INIT`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_EXPORT_COMPILE_COMMANDS.rst b/share/cmake-3.18/Help/variable/CMAKE_EXPORT_COMPILE_COMMANDS.rst
deleted file mode 100644
index 6d2450b..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_EXPORT_COMPILE_COMMANDS.rst
+++ /dev/null
@@ -1,37 +0,0 @@
-CMAKE_EXPORT_COMPILE_COMMANDS
------------------------------
-
-Enable/Disable output of compile commands during generation.
-
-If enabled, generates a ``compile_commands.json`` file containing the exact
-compiler calls for all translation units of the project in machine-readable
-form.  The format of the JSON file looks like:
-
-.. code-block:: javascript
-
-  [
-    {
-      "directory": "/home/user/development/project",
-      "command": "/usr/bin/c++ ... -c ../foo/foo.cc",
-      "file": "../foo/foo.cc"
-    },
-
-    ...
-
-    {
-      "directory": "/home/user/development/project",
-      "command": "/usr/bin/c++ ... -c ../foo/bar.cc",
-      "file": "../foo/bar.cc"
-    }
-  ]
-
-This is initialized by the :envvar:`CMAKE_EXPORT_COMPILE_COMMANDS` environment
-variable.
-
-.. note::
-  This option is implemented only by :ref:`Makefile Generators`
-  and the :generator:`Ninja`.  It is ignored on other generators.
-
-  This option currently does not work well in combination with
-  the :prop_tgt:`UNITY_BUILD` target property or the
-  :variable:`CMAKE_UNITY_BUILD` variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_EXPORT_NO_PACKAGE_REGISTRY.rst b/share/cmake-3.18/Help/variable/CMAKE_EXPORT_NO_PACKAGE_REGISTRY.rst
deleted file mode 100644
index 768ed64..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_EXPORT_NO_PACKAGE_REGISTRY.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-CMAKE_EXPORT_NO_PACKAGE_REGISTRY
---------------------------------
-
-Disable the :command:`export(PACKAGE)` command when :policy:`CMP0090`
-is not set to ``NEW``.
-
-In some cases, for example for packaging and for system wide
-installations, it is not desirable to write the user package registry.
-If the ``CMAKE_EXPORT_NO_PACKAGE_REGISTRY`` variable is enabled,
-the :command:`export(PACKAGE)` command will do nothing.
-
-If :policy:`CMP0090` is set to ``NEW`` this variable does nothing, and the
-:variable:`CMAKE_EXPORT_PACKAGE_REGISTRY` variable controls the behavior
-instead.
-
-See also :ref:`Disabling the Package Registry`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_EXPORT_PACKAGE_REGISTRY.rst b/share/cmake-3.18/Help/variable/CMAKE_EXPORT_PACKAGE_REGISTRY.rst
deleted file mode 100644
index 3476a19..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_EXPORT_PACKAGE_REGISTRY.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-CMAKE_EXPORT_PACKAGE_REGISTRY
------------------------------
-
-Enables the :command:`export(PACKAGE)` command when :policy:`CMP0090`
-is set to ``NEW``.
-
-The :command:`export(PACKAGE)` command does nothing by default.  In some cases
-it is desirable to write to the user package registry, so the
-``CMAKE_EXPORT_PACKAGE_REGISTRY`` variable may be set to enable it.
-
-If :policy:`CMP0090` is *not* set to ``NEW`` this variable does nothing, and
-the :variable:`CMAKE_EXPORT_NO_PACKAGE_REGISTRY` variable controls the behavior
-instead.
-
-See also :ref:`Disabling the Package Registry`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FIND_APPBUNDLE.rst b/share/cmake-3.18/Help/variable/CMAKE_FIND_APPBUNDLE.rst
deleted file mode 100644
index 7a05fac..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_FIND_APPBUNDLE.rst
+++ /dev/null
@@ -1,22 +0,0 @@
-CMAKE_FIND_APPBUNDLE
---------------------
-
-This variable affects how ``find_*`` commands choose between
-macOS Application Bundles and unix-style package components.
-
-On Darwin or systems supporting macOS Application Bundles, the
-``CMAKE_FIND_APPBUNDLE`` variable can be set to empty or
-one of the following:
-
-``FIRST``
-  Try to find application bundles before standard programs.
-  This is the default on Darwin.
-
-``LAST``
-  Try to find application bundles after standard programs.
-
-``ONLY``
-  Only try to find application bundles.
-
-``NEVER``
-  Never try to find application bundles.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FIND_DEBUG_MODE.rst b/share/cmake-3.18/Help/variable/CMAKE_FIND_DEBUG_MODE.rst
deleted file mode 100644
index f5fd8ce..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_FIND_DEBUG_MODE.rst
+++ /dev/null
@@ -1,23 +0,0 @@
-CMAKE_FIND_DEBUG_MODE
----------------------
-
-Print extra find call information for the following commands to standard
-error:
-
-* :command:`find_program`
-* :command:`find_library`
-* :command:`find_file`
-* :command:`find_path`
-* :command:`find_package`
-
-Output is designed for human consumption and not for parsing.
-Enabling this variable is equivalent to using :manual:`cmake <cmake(1)>` ``--debug-find``
-with the added ability to enable debugging for a subset of find calls.
-
-.. code-block:: cmake
-
-  set(CMAKE_FIND_DEBUG_MODE TRUE)
-  find_program(...)
-  set(CMAKE_FIND_DEBUG_MODE FALSE)
-
-Default is unset.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FIND_FRAMEWORK.rst b/share/cmake-3.18/Help/variable/CMAKE_FIND_FRAMEWORK.rst
deleted file mode 100644
index 4d5078f..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_FIND_FRAMEWORK.rst
+++ /dev/null
@@ -1,22 +0,0 @@
-CMAKE_FIND_FRAMEWORK
---------------------
-
-This variable affects how ``find_*`` commands choose between
-macOS Frameworks and unix-style package components.
-
-On Darwin or systems supporting macOS Frameworks, the
-``CMAKE_FIND_FRAMEWORK`` variable can be set to empty or
-one of the following:
-
-``FIRST``
-  Try to find frameworks before standard libraries or headers.
-  This is the default on Darwin.
-
-``LAST``
-  Try to find frameworks after standard libraries or headers.
-
-``ONLY``
-  Only try to find frameworks.
-
-``NEVER``
-  Never try to find frameworks.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX.rst b/share/cmake-3.18/Help/variable/CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX.rst
deleted file mode 100644
index ada8955..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX
-------------------------------------
-
-Specify a ``<suffix>`` to tell the :command:`find_library` command to
-search in a ``lib<suffix>`` directory before each ``lib`` directory that
-would normally be searched.
-
-This overrides the behavior of related global properties:
-
-* :prop_gbl:`FIND_LIBRARY_USE_LIB32_PATHS`
-* :prop_gbl:`FIND_LIBRARY_USE_LIB64_PATHS`
-* :prop_gbl:`FIND_LIBRARY_USE_LIBX32_PATHS`
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FIND_LIBRARY_SUFFIXES.rst b/share/cmake-3.18/Help/variable/CMAKE_FIND_LIBRARY_SUFFIXES.rst
deleted file mode 100644
index 4a64e33..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_FIND_LIBRARY_SUFFIXES.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CMAKE_FIND_LIBRARY_SUFFIXES
----------------------------
-
-Suffixes to append when looking for libraries.
-
-This specifies what suffixes to add to library names when the
-:command:`find_library` command looks for libraries.  On Windows systems this
-is typically ``.lib`` and ``.dll``, meaning that when trying to find the
-``foo`` library it will look for ``foo.dll`` etc.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FIND_PACKAGE_NAME.rst b/share/cmake-3.18/Help/variable/CMAKE_FIND_PACKAGE_NAME.rst
deleted file mode 100644
index bd1a30f..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_FIND_PACKAGE_NAME.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-CMAKE_FIND_PACKAGE_NAME
------------------------
-
-Defined by the :command:`find_package` command while loading
-a find module to record the caller-specified package name.
-See command documentation for details.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY.rst b/share/cmake-3.18/Help/variable/CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY.rst
deleted file mode 100644
index 4ee9d8b..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY.rst
+++ /dev/null
@@ -1,24 +0,0 @@
-CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY
---------------------------------------
-
-.. deprecated:: 3.16
-
-  Use the :variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY` variable instead.
-
-By default this variable is not set. If neither
-:variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY` nor
-``CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY`` is set, then
-:command:`find_package()` will use the :ref:`User Package Registry`
-unless the ``NO_CMAKE_PACKAGE_REGISTRY`` option is provided.
-
-``CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY`` is ignored if
-:variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY` is set.
-
-In some cases, for example to locate only system wide installations, it
-is not desirable to use the :ref:`User Package Registry` when searching
-for packages. If the :variable:`CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY`
-variable is ``TRUE``, all the :command:`find_package` commands will skip
-the :ref:`User Package Registry` as if they were called with the
-``NO_CMAKE_PACKAGE_REGISTRY`` argument.
-
-See also :ref:`Disabling the Package Registry`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY.rst b/share/cmake-3.18/Help/variable/CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY.rst
deleted file mode 100644
index 107c183..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY.rst
+++ /dev/null
@@ -1,24 +0,0 @@
-CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY
----------------------------------------------
-
-.. deprecated:: 3.16
-
-  Use the :variable:`CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY` variable instead.
-
-By default this variable is not set. If neither
-:variable:`CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY` nor
-``CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY`` is set, then
-:command:`find_package()` will use the :ref:`System Package Registry`
-unless the ``NO_CMAKE_SYSTEM_PACKAGE_REGISTRY`` option is provided.
-
-``CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY`` is ignored if
-:variable:`CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY` is set.
-
-In some cases, it is not desirable to use the
-:ref:`System Package Registry` when searching for packages. If the
-:variable:`CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY` variable is
-``TRUE``, all the :command:`find_package` commands will skip
-the :ref:`System Package Registry` as if they were called with the
-``NO_CMAKE_SYSTEM_PACKAGE_REGISTRY`` argument.
-
-See also :ref:`Disabling the Package Registry`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FIND_PACKAGE_PREFER_CONFIG.rst b/share/cmake-3.18/Help/variable/CMAKE_FIND_PACKAGE_PREFER_CONFIG.rst
deleted file mode 100644
index db658a1..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_FIND_PACKAGE_PREFER_CONFIG.rst
+++ /dev/null
@@ -1,27 +0,0 @@
-CMAKE_FIND_PACKAGE_PREFER_CONFIG
----------------------------------
-
-Tell :command:`find_package` to try "Config" mode before "Module" mode if no
-mode was specified.
-
-The command :command:`find_package` operates without an explicit mode when
-the reduced signature is used without the ``MODULE`` option. In this case,
-by default, CMake first tries Module mode by searching for a
-``Find<pkg>.cmake`` module.  If it fails, CMake then searches for the package
-using Config mode.
-
-Set ``CMAKE_FIND_PACKAGE_PREFER_CONFIG`` to ``TRUE`` to tell
-:command:`find_package` to first search using Config mode before falling back
-to Module mode.
-
-This variable may be useful when a developer has compiled a custom version of
-a common library and wishes to link it to a dependent project.  If this
-variable is set to ``TRUE``, it would prevent a dependent project's call
-to :command:`find_package` from selecting the default library located by the
-system's ``Find<pkg>.cmake`` module before finding the developer's custom
-built library.
-
-Once this variable is set, it is the responsibility of the exported
-``<pkg>Config.cmake`` files to provide the same result variables as the
-``Find<pkg>.cmake`` modules so that dependent projects can use them
-interchangeably.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS.rst b/share/cmake-3.18/Help/variable/CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS.rst
deleted file mode 100644
index dfbde20..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS
------------------------------------
-
-Set to ``TRUE`` to tell :command:`find_package` calls to resolve symbolic
-links in the value of ``<PackageName>_DIR``.
-
-This is helpful in use cases where the package search path points at a
-proxy directory in which symlinks to the real package locations appear.
-This is not enabled by default because there are also common use cases
-in which the symlinks should be preserved.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FIND_PACKAGE_SORT_DIRECTION.rst b/share/cmake-3.18/Help/variable/CMAKE_FIND_PACKAGE_SORT_DIRECTION.rst
deleted file mode 100644
index 99e4ec1..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_FIND_PACKAGE_SORT_DIRECTION.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-CMAKE_FIND_PACKAGE_SORT_DIRECTION
----------------------------------
-
-The sorting direction used by :variable:`CMAKE_FIND_PACKAGE_SORT_ORDER`.
-It can assume one of the following values:
-
-``DEC``
-  Default.  Ordering is done in descending mode.
-  The highest folder found will be tested first.
-
-``ASC``
-  Ordering is done in ascending mode.
-  The lowest folder found will be tested first.
-
-If :variable:`CMAKE_FIND_PACKAGE_SORT_ORDER` is not set or is set to ``NONE``
-this variable has no effect.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FIND_PACKAGE_SORT_ORDER.rst b/share/cmake-3.18/Help/variable/CMAKE_FIND_PACKAGE_SORT_ORDER.rst
deleted file mode 100644
index ba5f3a8..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_FIND_PACKAGE_SORT_ORDER.rst
+++ /dev/null
@@ -1,36 +0,0 @@
-CMAKE_FIND_PACKAGE_SORT_ORDER
------------------------------
-
-The default order for sorting packages found using :command:`find_package`.
-It can assume one of the following values:
-
-``NONE``
-  Default.  No attempt is done to sort packages.
-  The first valid package found will be selected.
-
-``NAME``
-  Sort packages lexicographically before selecting one.
-
-``NATURAL``
-  Sort packages using natural order (see ``strverscmp(3)`` manual),
-  i.e. such that contiguous digits are compared as whole numbers.
-
-Natural sorting can be employed to return the highest version when multiple
-versions of the same library are found by :command:`find_package`.  For
-example suppose that the following libraries have been found:
-
-* libX-1.1.0
-* libX-1.2.9
-* libX-1.2.10
-
-By setting ``NATURAL`` order we can select the one with the highest
-version number ``libX-1.2.10``.
-
-.. code-block:: cmake
-
-  set(CMAKE_FIND_PACKAGE_SORT_ORDER NATURAL)
-  find_package(libX CONFIG)
-
-The sort direction can be controlled using the
-:variable:`CMAKE_FIND_PACKAGE_SORT_DIRECTION` variable
-(by default decrescent, e.g. lib-B will be tested before lib-A).
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH.rst b/share/cmake-3.18/Help/variable/CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH.rst
deleted file mode 100644
index 957e956..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH.rst
+++ /dev/null
@@ -1,24 +0,0 @@
-CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH
--------------------------------------
-
-Controls the default behavior of the following commands for whether or not to
-search paths provided by cmake-specific environment variables:
-
-* :command:`find_program`
-* :command:`find_library`
-* :command:`find_file`
-* :command:`find_path`
-* :command:`find_package`
-
-This is useful in cross-compiling environments.
-
-By default this variable is not set, which is equivalent to it having
-a value of ``TRUE``.  Explicit options given to the above commands
-take precedence over this variable.
-
-See also the :variable:`CMAKE_FIND_USE_CMAKE_PATH`,
-:variable:`CMAKE_FIND_USE_CMAKE_SYSTEM_PATH`,
-:variable:`CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH`,
-:variable:`CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY`,
-:variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY`,
-and :variable:`CMAKE_FIND_USE_PACKAGE_ROOT_PATH` variables.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FIND_USE_CMAKE_PATH.rst b/share/cmake-3.18/Help/variable/CMAKE_FIND_USE_CMAKE_PATH.rst
deleted file mode 100644
index d2bdb09..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_FIND_USE_CMAKE_PATH.rst
+++ /dev/null
@@ -1,24 +0,0 @@
-CMAKE_FIND_USE_CMAKE_PATH
--------------------------
-
-Controls the default behavior of the following commands for whether or not to
-search paths provided by cmake-specific cache variables:
-
-* :command:`find_program`
-* :command:`find_library`
-* :command:`find_file`
-* :command:`find_path`
-* :command:`find_package`
-
-This is useful in cross-compiling environments.
-
-By default this variable is not set, which is equivalent to it having
-a value of ``TRUE``.  Explicit options given to the above commands
-take precedence over this variable.
-
-See also the :variable:`CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH`,
-:variable:`CMAKE_FIND_USE_CMAKE_SYSTEM_PATH`,
-:variable:`CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH`,
-:variable:`CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY`,
-:variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY`,
-and :variable:`CMAKE_FIND_USE_PACKAGE_ROOT_PATH` variables.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FIND_USE_CMAKE_SYSTEM_PATH.rst b/share/cmake-3.18/Help/variable/CMAKE_FIND_USE_CMAKE_SYSTEM_PATH.rst
deleted file mode 100644
index b99081d..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_FIND_USE_CMAKE_SYSTEM_PATH.rst
+++ /dev/null
@@ -1,24 +0,0 @@
-CMAKE_FIND_USE_CMAKE_SYSTEM_PATH
---------------------------------
-
-Controls the default behavior of the following commands for whether or not to
-search paths provided by platform-specific cmake variables:
-
-* :command:`find_program`
-* :command:`find_library`
-* :command:`find_file`
-* :command:`find_path`
-* :command:`find_package`
-
-This is useful in cross-compiling environments.
-
-By default this variable is not set, which is equivalent to it having
-a value of ``TRUE``.  Explicit options given to the above commands
-take precedence over this variable.
-
-See also the :variable:`CMAKE_FIND_USE_CMAKE_PATH`,
-:variable:`CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH`,
-:variable:`CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH`,
-:variable:`CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY`,
-:variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY`,
-and :variable:`CMAKE_FIND_USE_PACKAGE_ROOT_PATH` variables.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FIND_USE_PACKAGE_REGISTRY.rst b/share/cmake-3.18/Help/variable/CMAKE_FIND_USE_PACKAGE_REGISTRY.rst
deleted file mode 100644
index 7c7ca36..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_FIND_USE_PACKAGE_REGISTRY.rst
+++ /dev/null
@@ -1,30 +0,0 @@
-CMAKE_FIND_USE_PACKAGE_REGISTRY
--------------------------------
-
-Controls the default behavior of the :command:`find_package` command for
-whether or not to search paths provided by the :ref:`User Package Registry`.
-
-By default this variable is not set and the behavior will fall back
-to that determined by the deprecated
-:variable:`CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY` variable.  If that is
-also not set, then :command:`find_package` will use the
-:ref:`User Package Registry` unless the ``NO_CMAKE_PACKAGE_REGISTRY`` option
-is provided.
-
-This variable takes precedence over
-:variable:`CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY` when both are set.
-
-In some cases, for example to locate only system wide installations, it
-is not desirable to use the :ref:`User Package Registry` when searching
-for packages.  If the :variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY`
-variable is ``FALSE``, all the :command:`find_package` commands will skip
-the :ref:`User Package Registry` as if they were called with the
-``NO_CMAKE_PACKAGE_REGISTRY`` argument.
-
-See also :ref:`Disabling the Package Registry` and the
-:variable:`CMAKE_FIND_USE_CMAKE_PATH`,
-:variable:`CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH`,
-:variable:`CMAKE_FIND_USE_CMAKE_SYSTEM_PATH`,
-:variable:`CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH`,
-:variable:`CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY`,
-and :variable:`CMAKE_FIND_USE_PACKAGE_ROOT_PATH` variables.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FIND_USE_PACKAGE_ROOT_PATH.rst b/share/cmake-3.18/Help/variable/CMAKE_FIND_USE_PACKAGE_ROOT_PATH.rst
deleted file mode 100644
index e7f5b0f..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_FIND_USE_PACKAGE_ROOT_PATH.rst
+++ /dev/null
@@ -1,22 +0,0 @@
-CMAKE_FIND_USE_PACKAGE_ROOT_PATH
---------------------------------
-
-Controls the default behavior of the following commands for whether or not to
-search paths provided by :variable:`<PackageName>_ROOT` variables:
-
-* :command:`find_program`
-* :command:`find_library`
-* :command:`find_file`
-* :command:`find_path`
-* :command:`find_package`
-
-By default this variable is not set, which is equivalent to it having
-a value of ``TRUE``.  Explicit options given to the above commands
-take precedence over this variable.
-
-See also the :variable:`CMAKE_FIND_USE_CMAKE_PATH`,
-:variable:`CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH`,
-:variable:`CMAKE_FIND_USE_CMAKE_SYSTEM_PATH`,
-:variable:`CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH`,
-:variable:`CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY`,
-and :variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY` variables.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH.rst b/share/cmake-3.18/Help/variable/CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH.rst
deleted file mode 100644
index fbaba5a..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH.rst
+++ /dev/null
@@ -1,24 +0,0 @@
-CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH
---------------------------------------
-
-Controls the default behavior of the following commands for whether or not to
-search paths provided by standard system environment variables:
-
-* :command:`find_program`
-* :command:`find_library`
-* :command:`find_file`
-* :command:`find_path`
-* :command:`find_package`
-
-This is useful in cross-compiling environments.
-
-By default this variable is not set, which is equivalent to it having
-a value of ``TRUE``.  Explicit options given to the above commands
-take precedence over this variable.
-
-See also the :variable:`CMAKE_FIND_USE_CMAKE_PATH`,
-:variable:`CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH`,
-:variable:`CMAKE_FIND_USE_CMAKE_SYSTEM_PATH`,
-:variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY`,
-:variable:`CMAKE_FIND_USE_PACKAGE_ROOT_PATH`,
-and :variable:`CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY` variables.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY.rst b/share/cmake-3.18/Help/variable/CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY.rst
deleted file mode 100644
index cb4eec5..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY.rst
+++ /dev/null
@@ -1,31 +0,0 @@
-CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY
---------------------------------------
-
-Controls searching the :ref:`System Package Registry` by the
-:command:`find_package` command.
-
-By default this variable is not set and the behavior will fall back
-to that determined by the deprecated
-:variable:`CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY` variable.
-If that is also not set, then :command:`find_package()` will use the
-:ref:`System Package Registry` unless the ``NO_CMAKE_SYSTEM_PACKAGE_REGISTRY``
-option is provided.
-
-This variable takes precedence over
-:variable:`CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY` when both are set.
-
-In some cases, for example to locate only user specific installations, it
-is not desirable to use the :ref:`System Package Registry` when searching
-for packages. If the ``CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY``
-variable is ``FALSE``, all the :command:`find_package` commands will skip
-the :ref:`System Package Registry` as if they were called with the
-``NO_CMAKE_SYSTEM_PACKAGE_REGISTRY`` argument.
-
-See also :ref:`Disabling the Package Registry`.
-
-See also the :variable:`CMAKE_FIND_USE_CMAKE_PATH`,
-:variable:`CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH`,
-:variable:`CMAKE_FIND_USE_CMAKE_SYSTEM_PATH`,
-:variable:`CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH`,
-:variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY`,
-and :variable:`CMAKE_FIND_USE_PACKAGE_ROOT_PATH` variables.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FOLDER.rst b/share/cmake-3.18/Help/variable/CMAKE_FOLDER.rst
deleted file mode 100644
index 50a2b88..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_FOLDER.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-CMAKE_FOLDER
-------------
-
-Set the folder name. Use to organize targets in an IDE.
-
-This variable is used to initialize the :prop_tgt:`FOLDER` property on all the
-targets.  See that target property for additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FRAMEWORK.rst b/share/cmake-3.18/Help/variable/CMAKE_FRAMEWORK.rst
deleted file mode 100644
index 591041c..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_FRAMEWORK.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-CMAKE_FRAMEWORK
----------------
-
-Default value for :prop_tgt:`FRAMEWORK` of targets.
-
-This variable is used to initialize the :prop_tgt:`FRAMEWORK` property on
-all the targets.  See that target property for additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FRAMEWORK_MULTI_CONFIG_POSTFIX_CONFIG.rst b/share/cmake-3.18/Help/variable/CMAKE_FRAMEWORK_MULTI_CONFIG_POSTFIX_CONFIG.rst
deleted file mode 100644
index 5c7cd23..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_FRAMEWORK_MULTI_CONFIG_POSTFIX_CONFIG.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CMAKE_FRAMEWORK_MULTI_CONFIG_POSTFIX_<CONFIG>
----------------------------------------------
-
-Default framework filename postfix under configuration ``<CONFIG>`` when
-using a multi-config generator.
-
-When a framework target is created its :prop_tgt:`FRAMEWORK_MULTI_CONFIG_POSTFIX_<CONFIG>`
-target property is initialized with the value of this variable if it is set.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_Fortran_PREPROCESS.rst b/share/cmake-3.18/Help/variable/CMAKE_Fortran_PREPROCESS.rst
deleted file mode 100644
index 74b2d8b..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_Fortran_PREPROCESS.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CMAKE_Fortran_PREPROCESS
-------------------------
-
-Default value for :prop_tgt:`Fortran_PREPROCESS` of targets.
-
-This variable is used to initialize the :prop_tgt:`Fortran_PREPROCESS`
-property on all the targets.  See that target property for additional
-information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_GENERATOR_INSTANCE.rst b/share/cmake-3.18/Help/variable/CMAKE_GENERATOR_INSTANCE.rst
deleted file mode 100644
index 3657ed4..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_GENERATOR_INSTANCE.rst
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_GENERATOR_INSTANCE
-------------------------
-
-Generator-specific instance specification provided by user.
-
-Some CMake generators support selection of an instance of the native build
-system when multiple instances are available.  If the user specifies an
-instance (e.g. by setting this cache entry or via the
-:envvar:`CMAKE_GENERATOR_INSTANCE` environment variable), or after a default
-instance is chosen when a build tree is first configured, the value will be
-available in this variable.
-
-The value of this variable should never be modified by project code.
-A toolchain file specified by the :variable:`CMAKE_TOOLCHAIN_FILE`
-variable may initialize ``CMAKE_GENERATOR_INSTANCE`` as a cache entry.
-Once a given build tree has been initialized with a particular value
-for this variable, changing the value has undefined behavior.
-
-Instance specification is supported only on specific generators:
-
-* For the :generator:`Visual Studio 15 2017` generator (and above)
-  this specifies the absolute path to the VS installation directory
-  of the selected VS instance.
-
-See native build system documentation for allowed instance values.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_GENERATOR_PLATFORM.rst b/share/cmake-3.18/Help/variable/CMAKE_GENERATOR_PLATFORM.rst
deleted file mode 100644
index 2c115a3..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_GENERATOR_PLATFORM.rst
+++ /dev/null
@@ -1,31 +0,0 @@
-CMAKE_GENERATOR_PLATFORM
-------------------------
-
-Generator-specific target platform specification provided by user.
-
-Some CMake generators support a target platform name to be given
-to the native build system to choose a compiler toolchain.
-If the user specifies a platform name (e.g. via the :manual:`cmake(1)` ``-A``
-option or via the :envvar:`CMAKE_GENERATOR_PLATFORM` environment variable)
-the value will be available in this variable.
-
-The value of this variable should never be modified by project code.
-A toolchain file specified by the :variable:`CMAKE_TOOLCHAIN_FILE`
-variable may initialize ``CMAKE_GENERATOR_PLATFORM``.  Once a given
-build tree has been initialized with a particular value for this
-variable, changing the value has undefined behavior.
-
-Platform specification is supported only on specific generators:
-
-* For :ref:`Visual Studio Generators` with VS 2005 and above this
-  specifies the target architecture.
-
-* For :generator:`Green Hills MULTI` this specifies the target architecture.
-
-See native build system documentation for allowed platform names.
-
-Visual Studio Platform Selection
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-On :ref:`Visual Studio Generators` the selected platform name
-is provided in the :variable:`CMAKE_VS_PLATFORM_NAME` variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_GENERATOR_TOOLSET.rst b/share/cmake-3.18/Help/variable/CMAKE_GENERATOR_TOOLSET.rst
deleted file mode 100644
index 53ad2f3..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_GENERATOR_TOOLSET.rst
+++ /dev/null
@@ -1,65 +0,0 @@
-CMAKE_GENERATOR_TOOLSET
------------------------
-
-Native build system toolset specification provided by user.
-
-Some CMake generators support a toolset specification to tell the
-native build system how to choose a compiler.  If the user specifies
-a toolset (e.g. via the :manual:`cmake(1)` ``-T`` option or via
-the :envvar:`CMAKE_GENERATOR_TOOLSET` environment variable) the value
-will be available in this variable.
-
-The value of this variable should never be modified by project code.
-A toolchain file specified by the :variable:`CMAKE_TOOLCHAIN_FILE`
-variable may initialize ``CMAKE_GENERATOR_TOOLSET``.  Once a given
-build tree has been initialized with a particular value for this
-variable, changing the value has undefined behavior.
-
-Toolset specification is supported only on specific generators:
-
-* :ref:`Visual Studio Generators` for VS 2010 and above
-* The :generator:`Xcode` generator for Xcode 3.0 and above
-* The :generator:`Green Hills MULTI` generator
-
-See native build system documentation for allowed toolset names.
-
-Visual Studio Toolset Selection
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The :ref:`Visual Studio Generators` support toolset specification
-using one of these forms:
-
-* ``toolset``
-* ``toolset[,key=value]*``
-* ``key=value[,key=value]*``
-
-The ``toolset`` specifies the toolset name.  The selected toolset name
-is provided in the :variable:`CMAKE_VS_PLATFORM_TOOLSET` variable.
-
-The ``key=value`` pairs form a comma-separated list of options to
-specify generator-specific details of the toolset selection.
-Supported pairs are:
-
-``cuda=<version>|<path>``
-  Specify the CUDA toolkit version to use or the path to a
-  standalone CUDA toolkit directory.  Supported by VS 2010
-  and above. The version can only be used with the CUDA
-  toolkit VS integration globally installed.
-  See the :variable:`CMAKE_VS_PLATFORM_TOOLSET_CUDA` and
-  :variable:`CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR` variables.
-
-``host=<arch>``
-  Specify the host tools architecture as ``x64`` or ``x86``.
-  Supported by VS 2013 and above.
-  See the :variable:`CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE`
-  variable.
-
-``version=<version>``
-  Specify the toolset version to use.  Supported by VS 2017
-  and above with the specified toolset installed.
-  See the :variable:`CMAKE_VS_PLATFORM_TOOLSET_VERSION` variable.
-
-``VCTargetsPath=<path>``
-  Specify an alternative ``VCTargetsPath`` value for Visual Studio
-  project files.  This allows use of VS platform extension configuration
-  files (``.props`` and ``.targets``) that are not installed with VS.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_GHS_NO_SOURCE_GROUP_FILE.rst b/share/cmake-3.18/Help/variable/CMAKE_GHS_NO_SOURCE_GROUP_FILE.rst
deleted file mode 100644
index b6768a1..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_GHS_NO_SOURCE_GROUP_FILE.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-CMAKE_GHS_NO_SOURCE_GROUP_FILE
-------------------------------
-
-``ON`` / ``OFF`` boolean to control if the project file for a target should
-be one single file or multiple files.  Refer to
-:prop_tgt:`GHS_NO_SOURCE_GROUP_FILE` for further details.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_GLOBAL_AUTOGEN_TARGET.rst b/share/cmake-3.18/Help/variable/CMAKE_GLOBAL_AUTOGEN_TARGET.rst
deleted file mode 100644
index 8587742..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_GLOBAL_AUTOGEN_TARGET.rst
+++ /dev/null
@@ -1,26 +0,0 @@
-CMAKE_GLOBAL_AUTOGEN_TARGET
----------------------------
-
-Switch to enable generation of a global ``autogen`` target.
-
-When :variable:`CMAKE_GLOBAL_AUTOGEN_TARGET` is enabled, a custom target
-``autogen`` is generated.  This target depends on all :prop_tgt:`AUTOMOC` and
-:prop_tgt:`AUTOUIC` generated ``<ORIGIN>_autogen`` targets in the project.
-By building the global ``autogen`` target, all :prop_tgt:`AUTOMOC` and
-:prop_tgt:`AUTOUIC` files in the project will be generated.
-
-The name of the global ``autogen`` target can be changed by setting
-:variable:`CMAKE_GLOBAL_AUTOGEN_TARGET_NAME`.
-
-By default :variable:`CMAKE_GLOBAL_AUTOGEN_TARGET` is unset.
-
-See the :manual:`cmake-qt(7)` manual for more information on using CMake
-with Qt.
-
-Note
-^^^^
-
-``<ORIGIN>_autogen`` targets by default inherit their origin target's
-dependencies.  This might result in unintended dependency target
-builds when only ``<ORIGIN>_autogen`` targets are built.  A solution is to
-disable :prop_tgt:`AUTOGEN_ORIGIN_DEPENDS` on the respective origin targets.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_GLOBAL_AUTOGEN_TARGET_NAME.rst b/share/cmake-3.18/Help/variable/CMAKE_GLOBAL_AUTOGEN_TARGET_NAME.rst
deleted file mode 100644
index c86a5d0..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_GLOBAL_AUTOGEN_TARGET_NAME.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-CMAKE_GLOBAL_AUTOGEN_TARGET_NAME
---------------------------------
-
-Change the name of the global ``autogen`` target.
-
-When :variable:`CMAKE_GLOBAL_AUTOGEN_TARGET` is enabled, a global custom target
-named ``autogen`` is created.  :variable:`CMAKE_GLOBAL_AUTOGEN_TARGET_NAME`
-allows to set a different name for that target.
-
-By default :variable:`CMAKE_GLOBAL_AUTOGEN_TARGET_NAME` is unset.
-
-See the :manual:`cmake-qt(7)` manual for more information on using CMake
-with Qt.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_GLOBAL_AUTORCC_TARGET.rst b/share/cmake-3.18/Help/variable/CMAKE_GLOBAL_AUTORCC_TARGET.rst
deleted file mode 100644
index f92128c..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_GLOBAL_AUTORCC_TARGET.rst
+++ /dev/null
@@ -1,18 +0,0 @@
-CMAKE_GLOBAL_AUTORCC_TARGET
----------------------------
-
-Switch to enable generation of a global ``autorcc`` target.
-
-When :variable:`CMAKE_GLOBAL_AUTORCC_TARGET` is enabled, a custom target
-``autorcc`` is generated. This target depends on all :prop_tgt:`AUTORCC`
-generated ``<ORIGIN>_arcc_<QRC>`` targets in the project.
-By building the global ``autorcc`` target, all :prop_tgt:`AUTORCC`
-files in the project will be generated.
-
-The name of the global ``autorcc`` target can be changed by setting
-:variable:`CMAKE_GLOBAL_AUTORCC_TARGET_NAME`.
-
-By default :variable:`CMAKE_GLOBAL_AUTORCC_TARGET` is unset.
-
-See the :manual:`cmake-qt(7)` manual for more information on using CMake
-with Qt.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_GLOBAL_AUTORCC_TARGET_NAME.rst b/share/cmake-3.18/Help/variable/CMAKE_GLOBAL_AUTORCC_TARGET_NAME.rst
deleted file mode 100644
index c6e05de..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_GLOBAL_AUTORCC_TARGET_NAME.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-CMAKE_GLOBAL_AUTORCC_TARGET_NAME
---------------------------------
-
-Change the name of the global ``autorcc`` target.
-
-When :variable:`CMAKE_GLOBAL_AUTORCC_TARGET` is enabled, a global custom target
-named ``autorcc`` is created.  :variable:`CMAKE_GLOBAL_AUTORCC_TARGET_NAME`
-allows to set a different name for that target.
-
-By default :variable:`CMAKE_GLOBAL_AUTOGEN_TARGET_NAME` is unset.
-
-See the :manual:`cmake-qt(7)` manual for more information on using CMake
-with Qt.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_HOST_SOLARIS.rst b/share/cmake-3.18/Help/variable/CMAKE_HOST_SOLARIS.rst
deleted file mode 100644
index 82b5d69..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_HOST_SOLARIS.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-CMAKE_HOST_SOLARIS
-------------------
-
-``True`` for Oracle Solaris operating systems.
-
-Set to ``true`` when the host system is Oracle Solaris.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_HOST_SYSTEM_PROCESSOR.rst b/share/cmake-3.18/Help/variable/CMAKE_HOST_SYSTEM_PROCESSOR.rst
deleted file mode 100644
index 5f08728..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_HOST_SYSTEM_PROCESSOR.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-CMAKE_HOST_SYSTEM_PROCESSOR
----------------------------
-
-The name of the CPU CMake is running on.
-
-On Windows, this variable is set to the value of the environment variable
-``PROCESSOR_ARCHITECTURE``. On systems that support ``uname``, this variable is
-set to the output of:
-
-- ``uname -m`` on GNU, Linux, Cygwin, Darwin, Android, or
-- ``arch`` on OpenBSD, or
-- on other systems,
-
-  * ``uname -p`` if its exit code is nonzero, or
-  * ``uname -m`` otherwise.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS.rst b/share/cmake-3.18/Help/variable/CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS.rst
deleted file mode 100644
index f994fbe..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS.rst
+++ /dev/null
@@ -1,29 +0,0 @@
-CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS
--------------------------------------------
-
-Default permissions for directories created implicitly during installation
-of files by :command:`install` and :command:`file(INSTALL)`.
-
-If ``make install`` is invoked and directories are implicitly created they
-get permissions set by :variable:`CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS`
-variable or platform specific default permissions if the variable is not set.
-
-Implicitly created directories are created if they are not explicitly installed
-by :command:`install` command but are needed to install a file on a certain
-path. Example of such locations are directories created due to the setting of
-:variable:`CMAKE_INSTALL_PREFIX`.
-
-Expected content of the :variable:`CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS`
-variable is a list of permissions that can be used by :command:`install` command
-`PERMISSIONS` section.
-
-Example usage:
-
-::
-
- set(CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS
-      OWNER_READ
-      OWNER_WRITE
-      OWNER_EXECUTE
-      GROUP_READ
-    )
diff --git a/share/cmake-3.18/Help/variable/CMAKE_INSTALL_MESSAGE.rst b/share/cmake-3.18/Help/variable/CMAKE_INSTALL_MESSAGE.rst
deleted file mode 100644
index 304df26..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_INSTALL_MESSAGE.rst
+++ /dev/null
@@ -1,30 +0,0 @@
-CMAKE_INSTALL_MESSAGE
----------------------
-
-Specify verbosity of installation script code generated by the
-:command:`install` command (using the :command:`file(INSTALL)` command).
-For paths that are newly installed or updated, installation
-may print lines like::
-
-  -- Installing: /some/destination/path
-
-For paths that are already up to date, installation may print
-lines like::
-
-  -- Up-to-date: /some/destination/path
-
-The ``CMAKE_INSTALL_MESSAGE`` variable may be set to control
-which messages are printed:
-
-``ALWAYS``
-  Print both ``Installing`` and ``Up-to-date`` messages.
-
-``LAZY``
-  Print ``Installing`` but not ``Up-to-date`` messages.
-
-``NEVER``
-  Print neither ``Installing`` nor ``Up-to-date`` messages.
-
-Other values have undefined behavior and may not be diagnosed.
-
-If this variable is not set, the default behavior is ``ALWAYS``.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_INSTALL_NAME_DIR.rst b/share/cmake-3.18/Help/variable/CMAKE_INSTALL_NAME_DIR.rst
deleted file mode 100644
index 5ba4c04..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_INSTALL_NAME_DIR.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CMAKE_INSTALL_NAME_DIR
-----------------------
-
-macOS directory name for installed targets.
-
-``CMAKE_INSTALL_NAME_DIR`` is used to initialize the
-:prop_tgt:`INSTALL_NAME_DIR` property on all targets.  See that target
-property for more information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT.rst b/share/cmake-3.18/Help/variable/CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT.rst
deleted file mode 100644
index 2a5842d..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT
--------------------------------------------
-
-CMake sets this variable to a ``TRUE`` value when the
-:variable:`CMAKE_INSTALL_PREFIX` has just been initialized to
-its default value, typically on the first run of CMake within
-a new build tree.  This can be used by project code to change
-the default without overriding a user-provided value:
-
-.. code-block:: cmake
-
-  if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
-    set(CMAKE_INSTALL_PREFIX "/my/default" CACHE PATH "..." FORCE)
-  endif()
diff --git a/share/cmake-3.18/Help/variable/CMAKE_INSTALL_REMOVE_ENVIRONMENT_RPATH.rst b/share/cmake-3.18/Help/variable/CMAKE_INSTALL_REMOVE_ENVIRONMENT_RPATH.rst
deleted file mode 100644
index 76ca3da..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_INSTALL_REMOVE_ENVIRONMENT_RPATH.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CMAKE_INSTALL_REMOVE_ENVIRONMENT_RPATH
---------------------------------------
-
-Sets the default for whether toolchain-defined rpaths should be removed during
-installation.
-
-``CMAKE_INSTALL_REMOVE_ENVIRONMENT_RPATH`` is a boolean that provides the
-default value for the :prop_tgt:`INSTALL_REMOVE_ENVIRONMENT_RPATH` property
-of all subsequently created targets.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_INTERPROCEDURAL_OPTIMIZATION.rst b/share/cmake-3.18/Help/variable/CMAKE_INTERPROCEDURAL_OPTIMIZATION.rst
deleted file mode 100644
index b0cbb62..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_INTERPROCEDURAL_OPTIMIZATION.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CMAKE_INTERPROCEDURAL_OPTIMIZATION
-----------------------------------
-
-Default value for :prop_tgt:`INTERPROCEDURAL_OPTIMIZATION` of targets.
-
-This variable is used to initialize the :prop_tgt:`INTERPROCEDURAL_OPTIMIZATION`
-property on all the targets.  See that target property for additional
-information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_INTERPROCEDURAL_OPTIMIZATION_CONFIG.rst b/share/cmake-3.18/Help/variable/CMAKE_INTERPROCEDURAL_OPTIMIZATION_CONFIG.rst
deleted file mode 100644
index b291102..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_INTERPROCEDURAL_OPTIMIZATION_CONFIG.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CMAKE_INTERPROCEDURAL_OPTIMIZATION_<CONFIG>
--------------------------------------------
-
-Default value for :prop_tgt:`INTERPROCEDURAL_OPTIMIZATION_<CONFIG>` of targets.
-
-This variable is used to initialize the :prop_tgt:`INTERPROCEDURAL_OPTIMIZATION_<CONFIG>`
-property on all the targets.  See that target property for additional
-information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_IOS_INSTALL_COMBINED.rst b/share/cmake-3.18/Help/variable/CMAKE_IOS_INSTALL_COMBINED.rst
deleted file mode 100644
index c5cb9b6..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_IOS_INSTALL_COMBINED.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CMAKE_IOS_INSTALL_COMBINED
---------------------------
-
-Default value for :prop_tgt:`IOS_INSTALL_COMBINED` of targets.
-
-This variable is used to initialize the :prop_tgt:`IOS_INSTALL_COMBINED`
-property on all the targets.  See that target property for additional
-information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_JOB_POOLS.rst b/share/cmake-3.18/Help/variable/CMAKE_JOB_POOLS.rst
deleted file mode 100644
index 72b50b4..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_JOB_POOLS.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-CMAKE_JOB_POOLS
----------------
-
-If the :prop_gbl:`JOB_POOLS` global property is not set, the value
-of this variable is used in its place.  See :prop_gbl:`JOB_POOLS`
-for additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_JOB_POOL_PRECOMPILE_HEADER.rst b/share/cmake-3.18/Help/variable/CMAKE_JOB_POOL_PRECOMPILE_HEADER.rst
deleted file mode 100644
index f9467b3..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_JOB_POOL_PRECOMPILE_HEADER.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-CMAKE_JOB_POOL_PRECOMPILE_HEADER
---------------------------------
-
-This variable is used to initialize the :prop_tgt:`JOB_POOL_PRECOMPILE_HEADER`
-property on all the targets. See :prop_tgt:`JOB_POOL_PRECOMPILE_HEADER`
-for additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_ANDROID_TOOLCHAIN_MACHINE.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_ANDROID_TOOLCHAIN_MACHINE.rst
deleted file mode 100644
index d336364..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_ANDROID_TOOLCHAIN_MACHINE.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CMAKE_<LANG>_ANDROID_TOOLCHAIN_MACHINE
---------------------------------------
-
-When :ref:`Cross Compiling for Android` this variable contains the
-toolchain binutils machine name (e.g. ``gcc -dumpmachine``).  The
-binutils typically have a ``<machine>-`` prefix on their name.
-
-See also :variable:`CMAKE_<LANG>_ANDROID_TOOLCHAIN_PREFIX`
-and :variable:`CMAKE_<LANG>_ANDROID_TOOLCHAIN_SUFFIX`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_ANDROID_TOOLCHAIN_PREFIX.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_ANDROID_TOOLCHAIN_PREFIX.rst
deleted file mode 100644
index db04af3..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_ANDROID_TOOLCHAIN_PREFIX.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-CMAKE_<LANG>_ANDROID_TOOLCHAIN_PREFIX
--------------------------------------
-
-When :ref:`Cross Compiling for Android` this variable contains the absolute
-path prefixing the toolchain GNU compiler and its binutils.
-
-See also :variable:`CMAKE_<LANG>_ANDROID_TOOLCHAIN_SUFFIX`
-and :variable:`CMAKE_<LANG>_ANDROID_TOOLCHAIN_MACHINE`.
-
-For example, the path to the linker is::
-
-  ${CMAKE_CXX_ANDROID_TOOLCHAIN_PREFIX}ld${CMAKE_CXX_ANDROID_TOOLCHAIN_SUFFIX}
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_ANDROID_TOOLCHAIN_SUFFIX.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_ANDROID_TOOLCHAIN_SUFFIX.rst
deleted file mode 100644
index 159eb22..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_ANDROID_TOOLCHAIN_SUFFIX.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CMAKE_<LANG>_ANDROID_TOOLCHAIN_SUFFIX
--------------------------------------
-
-When :ref:`Cross Compiling for Android` this variable contains the
-host platform suffix of the toolchain GNU compiler and its binutils.
-
-See also :variable:`CMAKE_<LANG>_ANDROID_TOOLCHAIN_PREFIX`
-and :variable:`CMAKE_<LANG>_ANDROID_TOOLCHAIN_MACHINE`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_CLANG_TIDY.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_CLANG_TIDY.rst
deleted file mode 100644
index bd49de3..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_CLANG_TIDY.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-CMAKE_<LANG>_CLANG_TIDY
------------------------
-
-Default value for :prop_tgt:`<LANG>_CLANG_TIDY` target property
-when ``<LANG>`` is ``C`` or ``CXX``.
-
-This variable is used to initialize the property on each target as it is
-created.  For example:
-
-.. code-block:: cmake
-
-  set(CMAKE_CXX_CLANG_TIDY clang-tidy -checks=-*,readability-*)
-  add_executable(foo foo.cxx)
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER.rst
deleted file mode 100644
index 89df495..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-CMAKE_<LANG>_COMPILER
----------------------
-
-The full path to the compiler for ``LANG``.
-
-This is the command that will be used as the ``<LANG>`` compiler.  Once
-set, you can not change this variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_AR.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_AR.rst
deleted file mode 100644
index b83a1d4..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_AR.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-CMAKE_<LANG>_COMPILER_AR
-------------------------
-
-A wrapper around ``ar`` adding the appropriate ``--plugin`` option for the
-compiler.
-
-See also :variable:`CMAKE_AR`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst
deleted file mode 100644
index 054c648..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CMAKE_<LANG>_COMPILER_ARCHITECTURE_ID
--------------------------------------
-
-An internal variable subject to change.
-
-This is used to identify the variant of a compiler based on its target
-architecture.  For some compilers this is needed to determine the correct
-usage.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_ID.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_ID.rst
deleted file mode 100644
index 8eb4fb6..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_ID.rst
+++ /dev/null
@@ -1,41 +0,0 @@
-CMAKE_<LANG>_COMPILER_ID
-------------------------
-
-Compiler identification string.
-
-A short string unique to the compiler vendor.  Possible values
-include:
-
-::
-
-  Absoft = Absoft Fortran (absoft.com)
-  ADSP = Analog VisualDSP++ (analog.com)
-  AppleClang = Apple Clang (apple.com)
-  ARMCC = ARM Compiler (arm.com)
-  ARMClang = ARM Compiler based on Clang (arm.com)
-  Bruce = Bruce C Compiler
-  CCur = Concurrent Fortran (ccur.com)
-  Clang = LLVM Clang (clang.llvm.org)
-  Cray = Cray Compiler (cray.com)
-  Embarcadero, Borland = Embarcadero (embarcadero.com)
-  Flang = Flang LLVM Fortran Compiler
-  G95 = G95 Fortran (g95.org)
-  GNU = GNU Compiler Collection (gcc.gnu.org)
-  GHS = Green Hills Software (www.ghs.com)
-  HP = Hewlett-Packard Compiler (hp.com)
-  IAR = IAR Systems (iar.com)
-  Intel = Intel Compiler (intel.com)
-  MSVC = Microsoft Visual Studio (microsoft.com)
-  NVIDIA = NVIDIA CUDA Compiler (nvidia.com)
-  OpenWatcom = Open Watcom (openwatcom.org)
-  PGI = The Portland Group (pgroup.com)
-  PathScale = PathScale (pathscale.com)
-  SDCC = Small Device C Compiler (sdcc.sourceforge.net)
-  SunPro = Oracle Solaris Studio (oracle.com)
-  TI = Texas Instruments (ti.com)
-  TinyCC = Tiny C Compiler (tinycc.org)
-  XL, VisualAge, zOS = IBM XL (ibm.com)
-  XLClang = IBM Clang-based XL (ibm.com)
-
-This variable is not guaranteed to be defined for all compilers or
-languages.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_LAUNCHER.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_LAUNCHER.rst
deleted file mode 100644
index c76e2d0..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_LAUNCHER.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-CMAKE_<LANG>_COMPILER_LAUNCHER
-------------------------------
-
-Default value for :prop_tgt:`<LANG>_COMPILER_LAUNCHER` target property.
-This variable is used to initialize the property on each target as it is
-created.  This is done only when ``<LANG>`` is ``C``, ``CXX``, ``Fortran``,
-``OBJC``, ``OBJCXX``, or ``CUDA``.
-
-This variable is initialized to the :envvar:`CMAKE_<LANG>_COMPILER_LAUNCHER`
-environment variable if it is set.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_PREDEFINES_COMMAND.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_PREDEFINES_COMMAND.rst
deleted file mode 100644
index e050f43..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_PREDEFINES_COMMAND.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CMAKE_<LANG>_COMPILER_PREDEFINES_COMMAND
-----------------------------------------
-
-Command that outputs the compiler pre definitions.
-
-See :prop_tgt:`AUTOMOC` which uses
-:variable:`CMAKE_CXX_COMPILER_PREDEFINES_COMMAND <CMAKE_<LANG>_COMPILER_PREDEFINES_COMMAND>`
-to generate the :prop_tgt:`AUTOMOC_COMPILER_PREDEFINES`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_RANLIB.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_RANLIB.rst
deleted file mode 100644
index 945160b..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_RANLIB.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-CMAKE_<LANG>_COMPILER_RANLIB
-----------------------------
-
-A wrapper around ``ranlib`` adding the appropriate ``--plugin`` option for the
-compiler.
-
-See also :variable:`CMAKE_RANLIB`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_VERSION_INTERNAL.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_VERSION_INTERNAL.rst
deleted file mode 100644
index c3cd980..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_VERSION_INTERNAL.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CMAKE_<LANG>_COMPILER_VERSION_INTERNAL
---------------------------------------
-
-An internal variable subject to change.
-
-This is used to identify the variant of a compiler based on an internal
-version number.  For some compilers this is needed to determine the
-correct usage.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_CPPCHECK.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_CPPCHECK.rst
deleted file mode 100644
index 50b478f..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_CPPCHECK.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-CMAKE_<LANG>_CPPCHECK
----------------------
-
-Default value for :prop_tgt:`<LANG>_CPPCHECK` target property. This variable
-is used to initialize the property on each target as it is created.  This
-is done only when ``<LANG>`` is ``C`` or ``CXX``.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_CPPLINT.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_CPPLINT.rst
deleted file mode 100644
index 3b6f452..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_CPPLINT.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-CMAKE_<LANG>_CPPLINT
---------------------
-
-Default value for :prop_tgt:`<LANG>_CPPLINT` target property. This variable
-is used to initialize the property on each target as it is created.  This
-is done only when ``<LANG>`` is ``C`` or ``CXX``.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS.rst
deleted file mode 100644
index 14b2694..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-CMAKE_<LANG>_FLAGS
-------------------
-
-Flags for all build types.
-
-``<LANG>`` flags used regardless of the value of :variable:`CMAKE_BUILD_TYPE`.
-
-This is initialized for each language from environment variables:
-
-* ``CMAKE_C_FLAGS``:
-  Initialized by the :envvar:`CFLAGS` environment variable.
-* ``CMAKE_CXX_FLAGS``:
-  Initialized by the :envvar:`CXXFLAGS` environment variable.
-* ``CMAKE_CUDA_FLAGS``:
-  Initialized by the :envvar:`CUDAFLAGS` environment variable.
-* ``CMAKE_Fortran_FLAGS``:
-  Initialized by the :envvar:`FFLAGS` environment variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS_CONFIG.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS_CONFIG.rst
deleted file mode 100644
index 1dbd036..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS_CONFIG.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-CMAKE_<LANG>_FLAGS_<CONFIG>
----------------------------
-
-Flags for language ``<LANG>`` when building for the ``<CONFIG>`` configuration.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS_CONFIG_INIT.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS_CONFIG_INIT.rst
deleted file mode 100644
index 1eb5b3f..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS_CONFIG_INIT.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-CMAKE_<LANG>_FLAGS_<CONFIG>_INIT
---------------------------------
-
-Value used to initialize the :variable:`CMAKE_<LANG>_FLAGS_<CONFIG>` cache
-entry the first time a build tree is configured for language ``<LANG>``.
-This variable is meant to be set by a :variable:`toolchain file
-<CMAKE_TOOLCHAIN_FILE>`.  CMake may prepend or append content to
-the value based on the environment and target platform.
-
-See also :variable:`CMAKE_<LANG>_FLAGS_INIT`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS_DEBUG_INIT.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS_DEBUG_INIT.rst
deleted file mode 100644
index de7fcfc..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS_DEBUG_INIT.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CMAKE_<LANG>_FLAGS_DEBUG_INIT
------------------------------
-
-This variable is the ``Debug`` variant of the
-:variable:`CMAKE_<LANG>_FLAGS_<CONFIG>_INIT` variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS_INIT.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS_INIT.rst
deleted file mode 100644
index 4a034e8..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS_INIT.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-CMAKE_<LANG>_FLAGS_INIT
------------------------
-
-Value used to initialize the :variable:`CMAKE_<LANG>_FLAGS` cache entry
-the first time a build tree is configured for language ``<LANG>``.
-This variable is meant to be set by a :variable:`toolchain file
-<CMAKE_TOOLCHAIN_FILE>`.  CMake may prepend or append content to
-the value based on the environment and target platform.  For example,
-the contents of a ``xxxFLAGS`` environment variable will be prepended,
-where ``xxx`` will be language-specific but not necessarily the same as
-``<LANG>`` (e.g. :envvar:`CXXFLAGS` for ``CXX``, :envvar:`FFLAGS` for
-``Fortran``, and so on).
-
-See also the configuration-specific
-:variable:`CMAKE_<LANG>_FLAGS_<CONFIG>_INIT` variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS_MINSIZEREL_INIT.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS_MINSIZEREL_INIT.rst
deleted file mode 100644
index 1e7003c..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS_MINSIZEREL_INIT.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CMAKE_<LANG>_FLAGS_MINSIZEREL_INIT
-----------------------------------
-
-This variable is the ``MinSizeRel`` variant of the
-:variable:`CMAKE_<LANG>_FLAGS_<CONFIG>_INIT` variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS_RELEASE_INIT.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS_RELEASE_INIT.rst
deleted file mode 100644
index e7c73fe..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS_RELEASE_INIT.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CMAKE_<LANG>_FLAGS_RELEASE_INIT
--------------------------------
-
-This variable is the ``Release`` variant of the
-:variable:`CMAKE_<LANG>_FLAGS_<CONFIG>_INIT` variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS_RELWITHDEBINFO_INIT.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS_RELWITHDEBINFO_INIT.rst
deleted file mode 100644
index 3ab3975..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS_RELWITHDEBINFO_INIT.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CMAKE_<LANG>_FLAGS_RELWITHDEBINFO_INIT
---------------------------------------
-
-This variable is the ``RelWithDebInfo`` variant of the
-:variable:`CMAKE_<LANG>_FLAGS_<CONFIG>_INIT` variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_IMPLICIT_LINK_DIRECTORIES.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_IMPLICIT_LINK_DIRECTORIES.rst
deleted file mode 100644
index e9e04be..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_IMPLICIT_LINK_DIRECTORIES.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-CMAKE_<LANG>_IMPLICIT_LINK_DIRECTORIES
---------------------------------------
-
-Implicit linker search path detected for language ``<LANG>``.
-
-Compilers typically pass directories containing language runtime
-libraries and default library search paths when they invoke a linker.
-These paths are implicit linker search directories for the compiler's
-language.  CMake automatically detects these directories for each
-language and reports the results in this variable.
-
-Some toolchains read implicit directories from an environment variable such as
-``LIBRARY_PATH``.  If using such an environment variable, keep its value
-consistent when operating in a given build tree because CMake saves the value
-detected when first creating a build tree.
-
-If policy :policy:`CMP0060` is not set to ``NEW``, then when a library in one
-of these directories is given by full path to :command:`target_link_libraries`
-CMake will generate the ``-l<name>`` form on link lines for historical
-purposes.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_IMPLICIT_LINK_LIBRARIES.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_IMPLICIT_LINK_LIBRARIES.rst
deleted file mode 100644
index ec16477..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_IMPLICIT_LINK_LIBRARIES.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-CMAKE_<LANG>_IMPLICIT_LINK_LIBRARIES
-------------------------------------
-
-Implicit link libraries and flags detected for language ``<LANG>``.
-
-Compilers typically pass language runtime library names and other
-flags when they invoke a linker.  These flags are implicit link
-options for the compiler's language.  CMake automatically detects
-these libraries and flags for each language and reports the results in
-this variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_INCLUDE_WHAT_YOU_USE.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_INCLUDE_WHAT_YOU_USE.rst
deleted file mode 100644
index 2c8028a..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_INCLUDE_WHAT_YOU_USE.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-CMAKE_<LANG>_INCLUDE_WHAT_YOU_USE
----------------------------------
-
-Default value for :prop_tgt:`<LANG>_INCLUDE_WHAT_YOU_USE` target property.
-This variable is used to initialize the property on each target as it is
-created.  This is done only when ``<LANG>`` is ``C`` or ``CXX``.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_LINKER_WRAPPER_FLAG.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_LINKER_WRAPPER_FLAG.rst
deleted file mode 100644
index df51407..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_LINKER_WRAPPER_FLAG.rst
+++ /dev/null
@@ -1,39 +0,0 @@
-CMAKE_<LANG>_LINKER_WRAPPER_FLAG
---------------------------------
-
-Defines the syntax of compiler driver option to pass options to the linker
-tool. It will be used to translate the ``LINKER:`` prefix in the link options
-(see :command:`add_link_options` and :command:`target_link_options`).
-
-This variable holds a :ref:`semicolon-separated list <CMake Language Lists>` of tokens.
-If a space (i.e. " ") is specified as last token, flag and ``LINKER:``
-arguments will be specified as separate arguments to the compiler driver.
-The :variable:`CMAKE_<LANG>_LINKER_WRAPPER_FLAG_SEP` variable can be specified
-to manage concatenation of arguments.
-
-For example, for ``Clang`` we have:
-
-.. code-block:: cmake
-
-  set (CMAKE_C_LINKER_WRAPPER_FLAG "-Xlinker" " ")
-
-Specifying ``"LINKER:-z,defs"`` will be transformed in
-``-Xlinker -z -Xlinker defs``.
-
-For ``GNU GCC``:
-
-.. code-block:: cmake
-
-  set (CMAKE_C_LINKER_WRAPPER_FLAG "-Wl,")
-  set (CMAKE_C_LINKER_WRAPPER_FLAG_SEP ",")
-
-Specifying ``"LINKER:-z,defs"`` will be transformed in ``-Wl,-z,defs``.
-
-And for ``SunPro``:
-
-.. code-block:: cmake
-
-  set (CMAKE_C_LINKER_WRAPPER_FLAG "-Qoption" "ld" " ")
-  set (CMAKE_C_LINKER_WRAPPER_FLAG_SEP ",")
-
-Specifying ``"LINKER:-z,defs"`` will be transformed in ``-Qoption ld -z,defs``.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_LINKER_WRAPPER_FLAG_SEP.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_LINKER_WRAPPER_FLAG_SEP.rst
deleted file mode 100644
index faf1481..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_LINKER_WRAPPER_FLAG_SEP.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CMAKE_<LANG>_LINKER_WRAPPER_FLAG_SEP
-------------------------------------
-
-This variable is used with :variable:`CMAKE_<LANG>_LINKER_WRAPPER_FLAG`
-variable to format ``LINKER:`` prefix in the link options
-(see :command:`add_link_options` and :command:`target_link_options`).
-
-When specified, arguments of the ``LINKER:`` prefix will be concatenated using
-this value as separator.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_LINK_LIBRARY_FILE_FLAG.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_LINK_LIBRARY_FILE_FLAG.rst
deleted file mode 100644
index d54f080..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_LINK_LIBRARY_FILE_FLAG.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CMAKE_<LANG>_LINK_LIBRARY_FILE_FLAG
------------------------------------
-
-Language-specific flag to be used to link a library specified by
-a path to its file.
-
-The flag will be used before a library file path is given to the
-linker.  This is needed only on very few platforms.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_LINK_LIBRARY_FLAG.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_LINK_LIBRARY_FLAG.rst
deleted file mode 100644
index d7bb0d8..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_LINK_LIBRARY_FLAG.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-CMAKE_<LANG>_LINK_LIBRARY_FLAG
-------------------------------
-
-Flag to be used to link a library into a shared library or executable.
-
-This flag will be used to specify a library to link to a shared library or an
-executable for the specific language.  On most compilers this is ``-l``.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_LINK_LIBRARY_SUFFIX.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_LINK_LIBRARY_SUFFIX.rst
deleted file mode 100644
index a378657..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_LINK_LIBRARY_SUFFIX.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-CMAKE_<LANG>_LINK_LIBRARY_SUFFIX
---------------------------------
-
-Language-specific suffix for libraries that you link to.
-
-The suffix to use for the end of a library filename, ``.lib`` on Windows.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_SIMULATE_ID.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_SIMULATE_ID.rst
deleted file mode 100644
index 15c87a1..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_SIMULATE_ID.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CMAKE_<LANG>_SIMULATE_ID
-------------------------
-
-Identification string of "simulated" compiler.
-
-Some compilers simulate other compilers to serve as drop-in
-replacements.  When CMake detects such a compiler it sets this
-variable to what would have been the :variable:`CMAKE_<LANG>_COMPILER_ID` for
-the simulated compiler.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_STANDARD_INCLUDE_DIRECTORIES.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_STANDARD_INCLUDE_DIRECTORIES.rst
deleted file mode 100644
index c8e3d57..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_STANDARD_INCLUDE_DIRECTORIES.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-CMAKE_<LANG>_STANDARD_INCLUDE_DIRECTORIES
------------------------------------------
-
-Include directories to be used for every source file compiled with
-the ``<LANG>`` compiler.  This is meant for specification of system
-include directories needed by the language for the current platform.
-The directories always appear at the end of the include path passed
-to the compiler.
-
-This variable should not be set by project code.  It is meant to be set by
-CMake's platform information modules for the current toolchain, or by a
-toolchain file when used with :variable:`CMAKE_TOOLCHAIN_FILE`.
-
-See also :variable:`CMAKE_<LANG>_STANDARD_LIBRARIES`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_STANDARD_LIBRARIES.rst b/share/cmake-3.18/Help/variable/CMAKE_LANG_STANDARD_LIBRARIES.rst
deleted file mode 100644
index ba6df93..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LANG_STANDARD_LIBRARIES.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-CMAKE_<LANG>_STANDARD_LIBRARIES
--------------------------------
-
-Libraries linked into every executable and shared library linked
-for language ``<LANG>``.  This is meant for specification of system
-libraries needed by the language for the current platform.
-
-This variable should not be set by project code.  It is meant to be set by
-CMake's platform information modules for the current toolchain, or by a
-toolchain file when used with :variable:`CMAKE_TOOLCHAIN_FILE`.
-
-See also :variable:`CMAKE_<LANG>_STANDARD_INCLUDE_DIRECTORIES`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LIBRARY_OUTPUT_DIRECTORY_CONFIG.rst b/share/cmake-3.18/Help/variable/CMAKE_LIBRARY_OUTPUT_DIRECTORY_CONFIG.rst
deleted file mode 100644
index e069cdd..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LIBRARY_OUTPUT_DIRECTORY_CONFIG.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CMAKE_LIBRARY_OUTPUT_DIRECTORY_<CONFIG>
----------------------------------------
-
-Where to put all the :ref:`LIBRARY <Library Output Artifacts>`
-target files when built for a specific configuration.
-
-This variable is used to initialize the
-:prop_tgt:`LIBRARY_OUTPUT_DIRECTORY_<CONFIG>` property on all the targets.
-See that target property for additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LINK_DIRECTORIES_BEFORE.rst b/share/cmake-3.18/Help/variable/CMAKE_LINK_DIRECTORIES_BEFORE.rst
deleted file mode 100644
index 026ca35..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LINK_DIRECTORIES_BEFORE.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CMAKE_LINK_DIRECTORIES_BEFORE
------------------------------
-
-Whether to append or prepend directories by default in
-:command:`link_directories`.
-
-This variable affects the default behavior of the :command:`link_directories`
-command.  Setting this variable to ``ON`` is equivalent to using the ``BEFORE``
-option in all uses of that command.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LINK_SEARCH_END_STATIC.rst b/share/cmake-3.18/Help/variable/CMAKE_LINK_SEARCH_END_STATIC.rst
deleted file mode 100644
index 54cdaaa..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LINK_SEARCH_END_STATIC.rst
+++ /dev/null
@@ -1,19 +0,0 @@
-CMAKE_LINK_SEARCH_END_STATIC
-----------------------------
-
-End a link line such that static system libraries are used.
-
-Some linkers support switches such as ``-Bstatic`` and ``-Bdynamic`` to
-determine whether to use static or shared libraries for ``-lXXX`` options.
-CMake uses these options to set the link type for libraries whose full
-paths are not known or (in some cases) are in implicit link
-directories for the platform.  By default CMake adds an option at the
-end of the library list (if necessary) to set the linker search type
-back to its starting type.  This property switches the final linker
-search type to ``-Bstatic`` regardless of how it started.
-
-This variable is used to initialize the target property
-:prop_tgt:`LINK_SEARCH_END_STATIC` for all targets. If set, it's
-value is also used by the :command:`try_compile` command.
-
-See also :variable:`CMAKE_LINK_SEARCH_START_STATIC`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LINK_SEARCH_START_STATIC.rst b/share/cmake-3.18/Help/variable/CMAKE_LINK_SEARCH_START_STATIC.rst
deleted file mode 100644
index 0d52a31..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LINK_SEARCH_START_STATIC.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-CMAKE_LINK_SEARCH_START_STATIC
-------------------------------
-
-Assume the linker looks for static libraries by default.
-
-Some linkers support switches such as ``-Bstatic`` and ``-Bdynamic`` to
-determine whether to use static or shared libraries for ``-lXXX`` options.
-CMake uses these options to set the link type for libraries whose full
-paths are not known or (in some cases) are in implicit link
-directories for the platform.  By default the linker search type is
-assumed to be ``-Bdynamic`` at the beginning of the library list.  This
-property switches the assumption to ``-Bstatic``.  It is intended for use
-when linking an executable statically (e.g.  with the GNU ``-static``
-option).
-
-This variable is used to initialize the target property
-:prop_tgt:`LINK_SEARCH_START_STATIC` for all targets.  If set, it's
-value is also used by the :command:`try_compile` command.
-
-See also :variable:`CMAKE_LINK_SEARCH_END_STATIC`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LINK_WHAT_YOU_USE.rst b/share/cmake-3.18/Help/variable/CMAKE_LINK_WHAT_YOU_USE.rst
deleted file mode 100644
index 90c4d3f..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_LINK_WHAT_YOU_USE.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-CMAKE_LINK_WHAT_YOU_USE
----------------------------------
-
-Default value for :prop_tgt:`LINK_WHAT_YOU_USE` target property.
-This variable is used to initialize the property on each target as it is
-created.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_MATCH_COUNT.rst b/share/cmake-3.18/Help/variable/CMAKE_MATCH_COUNT.rst
deleted file mode 100644
index 355e834..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_MATCH_COUNT.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CMAKE_MATCH_COUNT
------------------
-
-The number of matches with the last regular expression.
-
-When a regular expression match is used, CMake fills in
-:variable:`CMAKE_MATCH_<n>` variables with the match contents.
-The ``CMAKE_MATCH_COUNT`` variable holds the number of match
-expressions when these are filled.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_MATCH_n.rst b/share/cmake-3.18/Help/variable/CMAKE_MATCH_n.rst
deleted file mode 100644
index c7dd623..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_MATCH_n.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-CMAKE_MATCH_<n>
----------------
-
-Capture group ``<n>`` matched by the last regular expression, for groups
-0 through 9.  Group 0 is the entire match.  Groups 1 through 9 are the
-subexpressions captured by ``()`` syntax.
-
-When a regular expression match is used, CMake fills in ``CMAKE_MATCH_<n>``
-variables with the match contents.  The :variable:`CMAKE_MATCH_COUNT`
-variable holds the number of match expressions when these are filled.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_MAXIMUM_RECURSION_DEPTH.rst b/share/cmake-3.18/Help/variable/CMAKE_MAXIMUM_RECURSION_DEPTH.rst
deleted file mode 100644
index 7110b16..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_MAXIMUM_RECURSION_DEPTH.rst
+++ /dev/null
@@ -1,33 +0,0 @@
-CMAKE_MAXIMUM_RECURSION_DEPTH
------------------------------
-
-Maximum recursion depth for CMake scripts. It is intended to be set on the
-command line with ``-DCMAKE_MAXIMUM_RECURSION_DEPTH=<x>``, or within
-``CMakeLists.txt`` by projects that require a large recursion depth. Projects
-that set this variable should provide the user with a way to override it. For
-example:
-
-.. code-block:: cmake
-
-  # About to perform deeply recursive actions
-  if(NOT CMAKE_MAXIMUM_RECURSION_DEPTH)
-    set(CMAKE_MAXIMUM_RECURSION_DEPTH 2000)
-  endif()
-
-If it is not set, or is set to a non-integer value, a sensible default limit is
-used. If the recursion limit is reached, the script terminates immediately with
-a fatal error.
-
-Calling any of the following commands increases the recursion depth:
-
-* :command:`include`
-* :command:`find_package`
-* :command:`add_subdirectory`
-* :command:`try_compile`
-* :command:`ctest_read_custom_files`
-* :command:`ctest_run_script` (unless ``NEW_PROCESS`` is specified)
-* User-defined :command:`function`'s and :command:`macro`'s (note that
-  :command:`function` and :command:`macro` themselves don't increase recursion
-  depth)
-* Reading or writing variables that are being watched by a
-  :command:`variable_watch`
diff --git a/share/cmake-3.18/Help/variable/CMAKE_MESSAGE_CONTEXT.rst b/share/cmake-3.18/Help/variable/CMAKE_MESSAGE_CONTEXT.rst
deleted file mode 100644
index 6b4ca40..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_MESSAGE_CONTEXT.rst
+++ /dev/null
@@ -1,62 +0,0 @@
-CMAKE_MESSAGE_CONTEXT
----------------------
-
-When enabled by the :manual:`cmake <cmake(1)>` ``--log-context`` command line
-option or the :variable:`CMAKE_MESSAGE_CONTEXT_SHOW` variable, the
-:command:`message` command converts the ``CMAKE_MESSAGE_CONTEXT`` list into a
-dot-separated string surrounded by square brackets and prepends it to each line
-for messages of log levels ``NOTICE`` and below.
-
-For logging contexts to work effectively, projects should generally
-``APPEND`` and ``POP_BACK`` an item to the current value of
-``CMAKE_MESSAGE_CONTEXT`` rather than replace it.
-Projects should not assume the message context at the top of the source tree
-is empty, as there are scenarios where the context might have already been set
-(e.g. hierarchical projects).
-
-.. warning::
-
-  Valid context names are restricted to anything that could be used
-  as a CMake variable name.  All names that begin with an underscore
-  or the string ``cmake_`` are also reserved for use by CMake and
-  should not be used by projects.
-
-Example:
-
-.. code-block:: cmake
-
-  function(bar)
-    list(APPEND CMAKE_MESSAGE_CONTEXT "bar")
-    message(VERBOSE "bar VERBOSE message")
-  endfunction()
-
-  function(baz)
-    list(APPEND CMAKE_MESSAGE_CONTEXT "baz")
-    message(DEBUG "baz DEBUG message")
-  endfunction()
-
-  function(foo)
-    list(APPEND CMAKE_MESSAGE_CONTEXT "foo")
-    bar()
-    message(TRACE "foo TRACE message")
-    baz()
-  endfunction()
-
-  list(APPEND CMAKE_MESSAGE_CONTEXT "top")
-
-  message(VERBOSE "Before `foo`")
-  foo()
-  message(VERBOSE "After `foo`")
-
-  list(POP_BACK CMAKE_MESSAGE_CONTEXT)
-
-
-Which results in the following output:
-
-.. code-block:: none
-
-  -- [top] Before `foo`
-  -- [top.foo.bar] bar VERBOSE message
-  -- [top.foo] foo TRACE message
-  -- [top.foo.baz] baz DEBUG message
-  -- [top] After `foo`
diff --git a/share/cmake-3.18/Help/variable/CMAKE_MESSAGE_CONTEXT_SHOW.rst b/share/cmake-3.18/Help/variable/CMAKE_MESSAGE_CONTEXT_SHOW.rst
deleted file mode 100644
index 7ec218e..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_MESSAGE_CONTEXT_SHOW.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-CMAKE_MESSAGE_CONTEXT_SHOW
---------------------------
-
-Setting this variable to true enables showing a context with each line
-logged by the :command:`message` command (see :variable:`CMAKE_MESSAGE_CONTEXT`
-for how the context itself is specified).
-
-This variable is an alternative to providing the ``--log-context`` option
-on the :manual:`cmake <cmake(1)>` command line.  Whereas the command line
-option will apply only to that one CMake run, setting
-``CMAKE_MESSAGE_CONTEXT_SHOW`` to true as a cache variable will ensure that
-subsequent CMake runs will continue to show the message context.
-
-Projects should not set ``CMAKE_MESSAGE_CONTEXT_SHOW``.  It is intended for
-users so that they may control whether or not to include context with messages.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_MESSAGE_INDENT.rst b/share/cmake-3.18/Help/variable/CMAKE_MESSAGE_INDENT.rst
deleted file mode 100644
index 7e44a4c..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_MESSAGE_INDENT.rst
+++ /dev/null
@@ -1,32 +0,0 @@
-CMAKE_MESSAGE_INDENT
---------------------
-
-The :command:`message` command joins the strings from this list and for
-log levels of ``NOTICE`` and below, it prepends the resultant string to
-each line of the message.
-
-Example:
-
-.. code-block:: cmake
-
-  list(APPEND listVar one two three)
-
-  message(VERBOSE [[Collected items in the "listVar":]])
-  list(APPEND CMAKE_MESSAGE_INDENT "  ")
-
-  foreach(item IN LISTS listVar)
-    message(VERBOSE ${item})
-  endforeach()
-
-  list(POP_BACK CMAKE_MESSAGE_INDENT)
-  message(VERBOSE "No more indent")
-
-Which results in the following output:
-
-.. code-block:: none
-
-  -- Collected items in the "listVar":
-  --   one
-  --   two
-  --   three
-  -- No more indent
diff --git a/share/cmake-3.18/Help/variable/CMAKE_MESSAGE_LOG_LEVEL.rst b/share/cmake-3.18/Help/variable/CMAKE_MESSAGE_LOG_LEVEL.rst
deleted file mode 100644
index 1d4cfe6..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_MESSAGE_LOG_LEVEL.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-CMAKE_MESSAGE_LOG_LEVEL
------------------------
-
-When set, this variable specifies the logging level used by the
-:command:`message` command.  Valid values are the same as those for the
-``--log-level`` command line option of the :manual:`cmake(1)` program.
-If this variable is set and the ``--log-level`` command line option is
-given, the command line option takes precedence.
-
-The main advantage to using this variable is to make a log level persist
-between CMake runs.  Setting it as a cache variable will ensure that
-subsequent CMake runs will continue to use the chosen log level.
-
-Projects should not set this variable, it is intended for users so that
-they may control the log level according to their own needs.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_MFC_FLAG.rst b/share/cmake-3.18/Help/variable/CMAKE_MFC_FLAG.rst
deleted file mode 100644
index 2c4d1c5..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_MFC_FLAG.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-CMAKE_MFC_FLAG
---------------
-
-Use the MFC library for an executable or dll.
-
-Enables the use of the Microsoft Foundation Classes (MFC).
-It should be set to ``1`` for the static MFC library, and
-``2`` for the shared MFC library.  This is used in Visual Studio
-project files.
-
-Usage example:
-
-.. code-block:: cmake
-
-  add_definitions(-D_AFXDLL)
-  set(CMAKE_MFC_FLAG 2)
-  add_executable(CMakeSetup WIN32 ${SRCS})
diff --git a/share/cmake-3.18/Help/variable/CMAKE_MINIMUM_REQUIRED_VERSION.rst b/share/cmake-3.18/Help/variable/CMAKE_MINIMUM_REQUIRED_VERSION.rst
deleted file mode 100644
index f466468..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_MINIMUM_REQUIRED_VERSION.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CMAKE_MINIMUM_REQUIRED_VERSION
-------------------------------
-
-The ``<min>`` version of CMake given to the most recent call to the
-:command:`cmake_minimum_required(VERSION)` command.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_MODULE_LINKER_FLAGS_CONFIG_INIT.rst b/share/cmake-3.18/Help/variable/CMAKE_MODULE_LINKER_FLAGS_CONFIG_INIT.rst
deleted file mode 100644
index 3279014..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_MODULE_LINKER_FLAGS_CONFIG_INIT.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-CMAKE_MODULE_LINKER_FLAGS_<CONFIG>_INIT
----------------------------------------
-
-Value used to initialize the :variable:`CMAKE_MODULE_LINKER_FLAGS_<CONFIG>`
-cache entry the first time a build tree is configured.
-This variable is meant to be set by a :variable:`toolchain file
-<CMAKE_TOOLCHAIN_FILE>`.  CMake may prepend or append content to
-the value based on the environment and target platform.
-
-See also :variable:`CMAKE_MODULE_LINKER_FLAGS_INIT`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_MODULE_LINKER_FLAGS_INIT.rst b/share/cmake-3.18/Help/variable/CMAKE_MODULE_LINKER_FLAGS_INIT.rst
deleted file mode 100644
index 91b39f6..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_MODULE_LINKER_FLAGS_INIT.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_MODULE_LINKER_FLAGS_INIT
-------------------------------
-
-Value used to initialize the :variable:`CMAKE_MODULE_LINKER_FLAGS`
-cache entry the first time a build tree is configured.
-This variable is meant to be set by a :variable:`toolchain file
-<CMAKE_TOOLCHAIN_FILE>`.  CMake may prepend or append content to
-the value based on the environment and target platform.
-
-See also the configuration-specific variable
-:variable:`CMAKE_MODULE_LINKER_FLAGS_<CONFIG>_INIT`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_MSVCIDE_RUN_PATH.rst b/share/cmake-3.18/Help/variable/CMAKE_MSVCIDE_RUN_PATH.rst
deleted file mode 100644
index 22e727f..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_MSVCIDE_RUN_PATH.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-CMAKE_MSVCIDE_RUN_PATH
-----------------------
-
-Extra PATH locations that should be used when executing
-:command:`add_custom_command` or :command:`add_custom_target` when using the
-:generator:`Visual Studio 9 2008` (or above) generator. This allows
-for running commands and using dll's that the IDE environment is not aware of.
-
-If not set explicitly the value is initialized by the ``CMAKE_MSVCIDE_RUN_PATH``
-environment variable, if set, and otherwise left empty.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_MSVC_RUNTIME_LIBRARY.rst b/share/cmake-3.18/Help/variable/CMAKE_MSVC_RUNTIME_LIBRARY.rst
deleted file mode 100644
index 8b54e7e..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_MSVC_RUNTIME_LIBRARY.rst
+++ /dev/null
@@ -1,32 +0,0 @@
-CMAKE_MSVC_RUNTIME_LIBRARY
---------------------------
-
-Select the MSVC runtime library for use by compilers targeting the MSVC ABI.
-This variable is used to initialize the :prop_tgt:`MSVC_RUNTIME_LIBRARY`
-property on all targets as they are created.  It is also propagated by
-calls to the :command:`try_compile` command into the test project.
-
-The allowed values are:
-
-.. include:: ../prop_tgt/MSVC_RUNTIME_LIBRARY-VALUES.txt
-
-Use :manual:`generator expressions <cmake-generator-expressions(7)>` to
-support per-configuration specification.  For example, the code:
-
-.. code-block:: cmake
-
-  set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
-
-selects for all following targets a multi-threaded statically-linked runtime
-library with or without debug information depending on the configuration.
-
-If this variable is not set then the :prop_tgt:`MSVC_RUNTIME_LIBRARY` target
-property will not be set automatically.  If that property is not set then
-CMake uses the default value ``MultiThreaded$<$<CONFIG:Debug>:Debug>DLL``
-to select a MSVC runtime library.
-
-.. note::
-
-  This variable has effect only when policy :policy:`CMP0091` is set to ``NEW``
-  prior to the first :command:`project` or :command:`enable_language` command
-  that enables a language using a compiler targeting the MSVC ABI.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_NETRC.rst b/share/cmake-3.18/Help/variable/CMAKE_NETRC.rst
deleted file mode 100644
index 903ec31..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_NETRC.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CMAKE_NETRC
------------
-
-This variable is used to initialize the ``NETRC`` option for
-:command:`file(DOWNLOAD)` and :command:`file(UPLOAD)` commands and the
-module :module:`ExternalProject`. See those commands for additional
-information.
-
-The local option takes precedence over this variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_NETRC_FILE.rst b/share/cmake-3.18/Help/variable/CMAKE_NETRC_FILE.rst
deleted file mode 100644
index 0f09afe..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_NETRC_FILE.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CMAKE_NETRC_FILE
-----------------
-
-This variable is used to initialize the ``NETRC_FILE`` option for
-:command:`file(DOWNLOAD)` and :command:`file(UPLOAD)` commands and the
-module :module:`ExternalProject`. See those commands for additional
-information.
-
-The local option takes precedence over this variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_NINJA_OUTPUT_PATH_PREFIX.rst b/share/cmake-3.18/Help/variable/CMAKE_NINJA_OUTPUT_PATH_PREFIX.rst
deleted file mode 100644
index 64091aa..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_NINJA_OUTPUT_PATH_PREFIX.rst
+++ /dev/null
@@ -1,27 +0,0 @@
-CMAKE_NINJA_OUTPUT_PATH_PREFIX
-------------------------------
-
-Set output files path prefix for the :generator:`Ninja` generator.
-
-Every output files listed in the generated ``build.ninja`` will be
-prefixed by the contents of this variable (a trailing slash is
-appended if missing).  This is useful when the generated ninja file is
-meant to be embedded as a ``subninja`` file into a *super* ninja
-project.  For example, a ninja build file generated with a command
-like::
-
-  cd top-build-dir/sub &&
-  cmake -G Ninja -DCMAKE_NINJA_OUTPUT_PATH_PREFIX=sub/ path/to/source
-
-can be embedded in ``top-build-dir/build.ninja`` with a directive like
-this::
-
-  subninja sub/build.ninja
-
-The ``auto-regeneration`` rule in ``top-build-dir/build.ninja`` must have an
-order-only dependency on ``sub/build.ninja``.
-
-.. note::
-  When ``CMAKE_NINJA_OUTPUT_PATH_PREFIX`` is set, the project generated
-  by CMake cannot be used as a standalone project.  No default targets
-  are specified.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_NO_BUILTIN_CHRPATH.rst b/share/cmake-3.18/Help/variable/CMAKE_NO_BUILTIN_CHRPATH.rst
deleted file mode 100644
index 189f59f..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_NO_BUILTIN_CHRPATH.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-CMAKE_NO_BUILTIN_CHRPATH
-------------------------
-
-Do not use the builtin ELF editor to fix RPATHs on installation.
-
-When an ELF binary needs to have a different RPATH after installation
-than it does in the build tree, CMake uses a builtin editor to change
-the RPATH in the installed copy.  If this variable is set to true then
-CMake will relink the binary before installation instead of using its
-builtin editor.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_OBJCXX_EXTENSIONS.rst b/share/cmake-3.18/Help/variable/CMAKE_OBJCXX_EXTENSIONS.rst
deleted file mode 100644
index 8afa6f2..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_OBJCXX_EXTENSIONS.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_OBJCXX_EXTENSIONS
------------------------
-
-Default value for :prop_tgt:`OBJCXX_EXTENSIONS` property of targets.
-
-This variable is used to initialize the :prop_tgt:`OBJCXX_EXTENSIONS`
-property on all targets.  See that target property for additional
-information.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_OBJCXX_STANDARD.rst b/share/cmake-3.18/Help/variable/CMAKE_OBJCXX_STANDARD.rst
deleted file mode 100644
index 4e5016a..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_OBJCXX_STANDARD.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_OBJCXX_STANDARD
----------------------
-
-Default value for :prop_tgt:`OBJCXX_STANDARD` property of targets.
-
-This variable is used to initialize the :prop_tgt:`OBJCXX_STANDARD`
-property on all targets.  See that target property for additional
-information.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_OBJCXX_STANDARD_REQUIRED.rst b/share/cmake-3.18/Help/variable/CMAKE_OBJCXX_STANDARD_REQUIRED.rst
deleted file mode 100644
index 3a0602a..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_OBJCXX_STANDARD_REQUIRED.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_OBJCXX_STANDARD_REQUIRED
-------------------------------
-
-Default value for :prop_tgt:`OBJCXX_STANDARD_REQUIRED` property of targets.
-
-This variable is used to initialize the :prop_tgt:`OBJCXX_STANDARD_REQUIRED`
-property on all targets.  See that target property for additional
-information.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_OBJC_EXTENSIONS.rst b/share/cmake-3.18/Help/variable/CMAKE_OBJC_EXTENSIONS.rst
deleted file mode 100644
index d9619d8..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_OBJC_EXTENSIONS.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_OBJC_EXTENSIONS
----------------------
-
-Default value for :prop_tgt:`OBJC_EXTENSIONS` property of targets.
-
-This variable is used to initialize the :prop_tgt:`OBJC_EXTENSIONS`
-property on all targets.  See that target property for additional
-information.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_OBJC_STANDARD.rst b/share/cmake-3.18/Help/variable/CMAKE_OBJC_STANDARD.rst
deleted file mode 100644
index 976c441..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_OBJC_STANDARD.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_OBJC_STANDARD
--------------------
-
-Default value for :prop_tgt:`OBJC_STANDARD` property of targets.
-
-This variable is used to initialize the :prop_tgt:`OBJC_STANDARD`
-property on all targets.  See that target property for additional
-information.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_OBJC_STANDARD_REQUIRED.rst b/share/cmake-3.18/Help/variable/CMAKE_OBJC_STANDARD_REQUIRED.rst
deleted file mode 100644
index 5c02096..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_OBJC_STANDARD_REQUIRED.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_OBJC_STANDARD_REQUIRED
-----------------------------
-
-Default value for :prop_tgt:`OBJC_STANDARD_REQUIRED` property of targets.
-
-This variable is used to initialize the :prop_tgt:`OBJC_STANDARD_REQUIRED`
-property on all targets.  See that target property for additional
-information.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features and a list of supported compilers.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_PCH_WARN_INVALID.rst b/share/cmake-3.18/Help/variable/CMAKE_PCH_WARN_INVALID.rst
deleted file mode 100644
index e152abd..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_PCH_WARN_INVALID.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CMAKE_PCH_WARN_INVALID
-----------------------
-
-This variable is used to initialize the :prop_tgt:`PCH_WARN_INVALID`
-property of targets when they are created.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_POLICY_DEFAULT_CMPNNNN.rst b/share/cmake-3.18/Help/variable/CMAKE_POLICY_DEFAULT_CMPNNNN.rst
deleted file mode 100644
index 43582be..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_POLICY_DEFAULT_CMPNNNN.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-CMAKE_POLICY_DEFAULT_CMP<NNNN>
-------------------------------
-
-Default for CMake Policy ``CMP<NNNN>`` when it is otherwise left unset.
-
-Commands :command:`cmake_minimum_required(VERSION)` and
-:command:`cmake_policy(VERSION)` by default leave policies introduced after
-the given version unset.  Set ``CMAKE_POLICY_DEFAULT_CMP<NNNN>`` to ``OLD``
-or ``NEW`` to specify the default for policy ``CMP<NNNN>``, where ``<NNNN>``
-is the policy number.
-
-This variable should not be set by a project in CMake code; use
-:command:`cmake_policy(SET)` instead.  Users running CMake may set this
-variable in the cache (e.g. ``-DCMAKE_POLICY_DEFAULT_CMP<NNNN>=<OLD|NEW>``)
-to set a policy not otherwise set by the project.  Set to ``OLD`` to quiet a
-policy warning while using old behavior or to ``NEW`` to try building the
-project with new behavior.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_POLICY_WARNING_CMPNNNN.rst b/share/cmake-3.18/Help/variable/CMAKE_POLICY_WARNING_CMPNNNN.rst
deleted file mode 100644
index de71d0e..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_POLICY_WARNING_CMPNNNN.rst
+++ /dev/null
@@ -1,33 +0,0 @@
-CMAKE_POLICY_WARNING_CMP<NNNN>
-------------------------------
-
-Explicitly enable or disable the warning when CMake Policy ``CMP<NNNN>``
-is not set.  This is meaningful only for the few policies that do not
-warn by default:
-
-* ``CMAKE_POLICY_WARNING_CMP0025`` controls the warning for
-  policy :policy:`CMP0025`.
-* ``CMAKE_POLICY_WARNING_CMP0047`` controls the warning for
-  policy :policy:`CMP0047`.
-* ``CMAKE_POLICY_WARNING_CMP0056`` controls the warning for
-  policy :policy:`CMP0056`.
-* ``CMAKE_POLICY_WARNING_CMP0060`` controls the warning for
-  policy :policy:`CMP0060`.
-* ``CMAKE_POLICY_WARNING_CMP0065`` controls the warning for
-  policy :policy:`CMP0065`.
-* ``CMAKE_POLICY_WARNING_CMP0066`` controls the warning for
-  policy :policy:`CMP0066`.
-* ``CMAKE_POLICY_WARNING_CMP0067`` controls the warning for
-  policy :policy:`CMP0067`.
-* ``CMAKE_POLICY_WARNING_CMP0082`` controls the warning for
-  policy :policy:`CMP0082`.
-* ``CMAKE_POLICY_WARNING_CMP0089`` controls the warning for
-  policy :policy:`CMP0089`.
-* ``CMAKE_POLICY_WARNING_CMP0102`` controls the warning for
-  policy :policy:`CMP0102`.
-
-This variable should not be set by a project in CMake code.  Project
-developers running CMake may set this variable in their cache to
-enable the warning (e.g. ``-DCMAKE_POLICY_WARNING_CMP<NNNN>=ON``).
-Alternatively, running :manual:`cmake(1)` with the ``--debug-output``,
-``--trace``, or ``--trace-expand`` option will also enable the warning.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_POSITION_INDEPENDENT_CODE.rst b/share/cmake-3.18/Help/variable/CMAKE_POSITION_INDEPENDENT_CODE.rst
deleted file mode 100644
index 43b1397..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_POSITION_INDEPENDENT_CODE.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CMAKE_POSITION_INDEPENDENT_CODE
--------------------------------
-
-Default value for :prop_tgt:`POSITION_INDEPENDENT_CODE` of targets.
-
-This variable is used to initialize the
-:prop_tgt:`POSITION_INDEPENDENT_CODE` property on all the targets.
-See that target property for additional information.  If set, it's
-value is also used by the :command:`try_compile` command.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_PROJECT_DESCRIPTION.rst b/share/cmake-3.18/Help/variable/CMAKE_PROJECT_DESCRIPTION.rst
deleted file mode 100644
index 51b0592..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_PROJECT_DESCRIPTION.rst
+++ /dev/null
@@ -1,35 +0,0 @@
-CMAKE_PROJECT_DESCRIPTION
--------------------------
-
-The description of the top level project.
-
-This variable holds the description of the project as specified in the top
-level CMakeLists.txt file by a :command:`project` command.  In the event that
-the top level CMakeLists.txt contains multiple :command:`project` calls,
-the most recently called one from that top level CMakeLists.txt will determine
-the value that ``CMAKE_PROJECT_DESCRIPTION`` contains.  For example, consider
-the following top level CMakeLists.txt:
-
-.. code-block:: cmake
-
-  cmake_minimum_required(VERSION 3.0)
-  project(First DESCRIPTION "I am First")
-  project(Second DESCRIPTION "I am Second")
-  add_subdirectory(sub)
-  project(Third DESCRIPTION "I am Third")
-
-And ``sub/CMakeLists.txt`` with the following contents:
-
-.. code-block:: cmake
-
-  project(SubProj DESCRIPTION "I am SubProj")
-  message("CMAKE_PROJECT_DESCRIPTION = ${CMAKE_PROJECT_DESCRIPTION}")
-
-The most recently seen :command:`project` command from the top level
-CMakeLists.txt would be ``project(Second ...)``, so this will print::
-
-  CMAKE_PROJECT_DESCRIPTION = I am Second
-
-To obtain the description from the most recent call to :command:`project` in
-the current directory scope or above, see the :variable:`PROJECT_DESCRIPTION`
-variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_PROJECT_HOMEPAGE_URL.rst b/share/cmake-3.18/Help/variable/CMAKE_PROJECT_HOMEPAGE_URL.rst
deleted file mode 100644
index ee0bf7c..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_PROJECT_HOMEPAGE_URL.rst
+++ /dev/null
@@ -1,35 +0,0 @@
-CMAKE_PROJECT_HOMEPAGE_URL
---------------------------
-
-The homepage URL of the top level project.
-
-This variable holds the homepage URL of the project as specified in the top
-level CMakeLists.txt file by a :command:`project` command.  In the event that
-the top level CMakeLists.txt contains multiple :command:`project` calls,
-the most recently called one from that top level CMakeLists.txt will determine
-the value that ``CMAKE_PROJECT_HOMEPAGE_URL`` contains.  For example, consider
-the following top level CMakeLists.txt:
-
-.. code-block:: cmake
-
-  cmake_minimum_required(VERSION 3.0)
-  project(First HOMEPAGE_URL "http://first.example.com")
-  project(Second HOMEPAGE_URL "http://second.example.com")
-  add_subdirectory(sub)
-  project(Third HOMEPAGE_URL "http://third.example.com")
-
-And ``sub/CMakeLists.txt`` with the following contents:
-
-.. code-block:: cmake
-
-  project(SubProj HOMEPAGE_URL "http://subproj.example.com")
-  message("CMAKE_PROJECT_HOMEPAGE_URL = ${CMAKE_PROJECT_HOMEPAGE_URL}")
-
-The most recently seen :command:`project` command from the top level
-CMakeLists.txt would be ``project(Second ...)``, so this will print::
-
-  CMAKE_PROJECT_HOMEPAGE_URL = http://second.example.com
-
-To obtain the homepage URL from the most recent call to :command:`project` in
-the current directory scope or above, see the :variable:`PROJECT_HOMEPAGE_URL`
-variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_PROJECT_INCLUDE.rst b/share/cmake-3.18/Help/variable/CMAKE_PROJECT_INCLUDE.rst
deleted file mode 100644
index 5835264..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_PROJECT_INCLUDE.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-CMAKE_PROJECT_INCLUDE
----------------------
-
-A CMake language file or module to be included as the last step of all
-:command:`project` command calls.  This is intended for injecting custom code
-into project builds without modifying their source.
-
-See also the :variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE`,
-:variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE_BEFORE` and
-:variable:`CMAKE_PROJECT_INCLUDE_BEFORE` variables.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_PROJECT_INCLUDE_BEFORE.rst b/share/cmake-3.18/Help/variable/CMAKE_PROJECT_INCLUDE_BEFORE.rst
deleted file mode 100644
index 280c14a..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_PROJECT_INCLUDE_BEFORE.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-CMAKE_PROJECT_INCLUDE_BEFORE
-----------------------------
-
-A CMake language file or module to be included as the first step of all
-:command:`project` command calls.  This is intended for injecting custom code
-into project builds without modifying their source.
-
-See also the :variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE`,
-:variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE_BEFORE` and
-:variable:`CMAKE_PROJECT_INCLUDE` variables.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_PROJECT_PROJECT-NAME_INCLUDE_BEFORE.rst b/share/cmake-3.18/Help/variable/CMAKE_PROJECT_PROJECT-NAME_INCLUDE_BEFORE.rst
deleted file mode 100644
index db1432d..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_PROJECT_PROJECT-NAME_INCLUDE_BEFORE.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE_BEFORE
--------------------------------------------
-
-A CMake language file or module to be included as the first step of any
-:command:`project` command calls that specify ``<PROJECT-NAME>`` as the project
-name.  This is intended for injecting custom code into project builds without
-modifying their source.
-
-See also the :variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE`,
-:variable:`CMAKE_PROJECT_INCLUDE` and
-:variable:`CMAKE_PROJECT_INCLUDE_BEFORE` variables.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_PROJECT_VERSION.rst b/share/cmake-3.18/Help/variable/CMAKE_PROJECT_VERSION.rst
deleted file mode 100644
index 4f8f556..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_PROJECT_VERSION.rst
+++ /dev/null
@@ -1,35 +0,0 @@
-CMAKE_PROJECT_VERSION
----------------------
-
-The version of the top level project.
-
-This variable holds the version of the project as specified in the top
-level CMakeLists.txt file by a :command:`project` command.  In the event that
-the top level CMakeLists.txt contains multiple :command:`project` calls,
-the most recently called one from that top level CMakeLists.txt will determine
-the value that ``CMAKE_PROJECT_VERSION`` contains.  For example, consider
-the following top level CMakeLists.txt:
-
-.. code-block:: cmake
-
-  cmake_minimum_required(VERSION 3.0)
-  project(First VERSION 1.2.3)
-  project(Second VERSION 3.4.5)
-  add_subdirectory(sub)
-  project(Third VERSION 6.7.8)
-
-And ``sub/CMakeLists.txt`` with the following contents:
-
-.. code-block:: cmake
-
-  project(SubProj VERSION 1)
-  message("CMAKE_PROJECT_VERSION = ${CMAKE_PROJECT_VERSION}")
-
-The most recently seen :command:`project` command from the top level
-CMakeLists.txt would be ``project(Second ...)``, so this will print::
-
-  CMAKE_PROJECT_VERSION = 3.4.5
-
-To obtain the version from the most recent call to :command:`project` in
-the current directory scope or above, see the :variable:`PROJECT_VERSION`
-variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_PROJECT_VERSION_MAJOR.rst b/share/cmake-3.18/Help/variable/CMAKE_PROJECT_VERSION_MAJOR.rst
deleted file mode 100644
index f1001ac..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_PROJECT_VERSION_MAJOR.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CMAKE_PROJECT_VERSION_MAJOR
----------------------------
-
-The major version of the top level project.
-
-This variable holds the major version of the project as specified in the top
-level CMakeLists.txt file by a :command:`project` command. Please see
-:variable:`CMAKE_PROJECT_VERSION` documentation for the behavior when
-multiple :command:`project` commands are used in the sources.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_PROJECT_VERSION_MINOR.rst b/share/cmake-3.18/Help/variable/CMAKE_PROJECT_VERSION_MINOR.rst
deleted file mode 100644
index 13202be..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_PROJECT_VERSION_MINOR.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CMAKE_PROJECT_VERSION_MINOR
----------------------------
-
-The minor version of the top level project.
-
-This variable holds the minor version of the project as specified in the top
-level CMakeLists.txt file by a :command:`project` command. Please see
-:variable:`CMAKE_PROJECT_VERSION` documentation for the behavior when
-multiple :command:`project` commands are used in the sources.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_PROJECT_VERSION_PATCH.rst b/share/cmake-3.18/Help/variable/CMAKE_PROJECT_VERSION_PATCH.rst
deleted file mode 100644
index b8570d9..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_PROJECT_VERSION_PATCH.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CMAKE_PROJECT_VERSION_PATCH
----------------------------
-
-The patch version of the top level project.
-
-This variable holds the patch version of the project as specified in the top
-level CMakeLists.txt file by a :command:`project` command. Please see
-:variable:`CMAKE_PROJECT_VERSION` documentation for the behavior when
-multiple :command:`project` commands are used in the sources.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_PROJECT_VERSION_TWEAK.rst b/share/cmake-3.18/Help/variable/CMAKE_PROJECT_VERSION_TWEAK.rst
deleted file mode 100644
index e1ad4be..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_PROJECT_VERSION_TWEAK.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CMAKE_PROJECT_VERSION_TWEAK
----------------------------
-
-The tweak version of the top level project.
-
-This variable holds the tweak version of the project as specified in the top
-level CMakeLists.txt file by a :command:`project` command. Please see
-:variable:`CMAKE_PROJECT_VERSION` documentation for the behavior when
-multiple :command:`project` commands are used in the sources.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_RULE_MESSAGES.rst b/share/cmake-3.18/Help/variable/CMAKE_RULE_MESSAGES.rst
deleted file mode 100644
index 7460a81..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_RULE_MESSAGES.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CMAKE_RULE_MESSAGES
--------------------
-
-Specify whether to report a message for each make rule.
-
-If set in the cache it is used to initialize the value of the :prop_gbl:`RULE_MESSAGES` property.
-Users may disable the option in their local build tree to disable granular messages
-and report only as each target completes in Makefile builds.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_RUNTIME_OUTPUT_DIRECTORY_CONFIG.rst b/share/cmake-3.18/Help/variable/CMAKE_RUNTIME_OUTPUT_DIRECTORY_CONFIG.rst
deleted file mode 100644
index 080dea6..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_RUNTIME_OUTPUT_DIRECTORY_CONFIG.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CMAKE_RUNTIME_OUTPUT_DIRECTORY_<CONFIG>
----------------------------------------
-
-Where to put all the :ref:`RUNTIME <Runtime Output Artifacts>`
-target files when built for a specific configuration.
-
-This variable is used to initialize the
-:prop_tgt:`RUNTIME_OUTPUT_DIRECTORY_<CONFIG>` property on all the targets.
-See that target property for additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SHARED_LINKER_FLAGS_CONFIG_INIT.rst b/share/cmake-3.18/Help/variable/CMAKE_SHARED_LINKER_FLAGS_CONFIG_INIT.rst
deleted file mode 100644
index 185df38..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_SHARED_LINKER_FLAGS_CONFIG_INIT.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-CMAKE_SHARED_LINKER_FLAGS_<CONFIG>_INIT
----------------------------------------
-
-Value used to initialize the :variable:`CMAKE_SHARED_LINKER_FLAGS_<CONFIG>`
-cache entry the first time a build tree is configured.
-This variable is meant to be set by a :variable:`toolchain file
-<CMAKE_TOOLCHAIN_FILE>`.  CMake may prepend or append content to
-the value based on the environment and target platform.
-
-See also :variable:`CMAKE_SHARED_LINKER_FLAGS_INIT`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SHARED_LINKER_FLAGS_INIT.rst b/share/cmake-3.18/Help/variable/CMAKE_SHARED_LINKER_FLAGS_INIT.rst
deleted file mode 100644
index cb819a7..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_SHARED_LINKER_FLAGS_INIT.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_SHARED_LINKER_FLAGS_INIT
-------------------------------
-
-Value used to initialize the :variable:`CMAKE_SHARED_LINKER_FLAGS`
-cache entry the first time a build tree is configured.
-This variable is meant to be set by a :variable:`toolchain file
-<CMAKE_TOOLCHAIN_FILE>`.  CMake may prepend or append content to
-the value based on the environment and target platform.
-
-See also the configuration-specific variable
-:variable:`CMAKE_SHARED_LINKER_FLAGS_<CONFIG>_INIT`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_STATIC_LINKER_FLAGS_CONFIG_INIT.rst b/share/cmake-3.18/Help/variable/CMAKE_STATIC_LINKER_FLAGS_CONFIG_INIT.rst
deleted file mode 100644
index a49d1cb..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_STATIC_LINKER_FLAGS_CONFIG_INIT.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-CMAKE_STATIC_LINKER_FLAGS_<CONFIG>_INIT
----------------------------------------
-
-Value used to initialize the :variable:`CMAKE_STATIC_LINKER_FLAGS_<CONFIG>`
-cache entry the first time a build tree is configured.
-This variable is meant to be set by a :variable:`toolchain file
-<CMAKE_TOOLCHAIN_FILE>`.  CMake may prepend or append content to
-the value based on the environment and target platform.
-
-See also :variable:`CMAKE_STATIC_LINKER_FLAGS_INIT`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_STATIC_LINKER_FLAGS_INIT.rst b/share/cmake-3.18/Help/variable/CMAKE_STATIC_LINKER_FLAGS_INIT.rst
deleted file mode 100644
index 113ca71..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_STATIC_LINKER_FLAGS_INIT.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_STATIC_LINKER_FLAGS_INIT
-------------------------------
-
-Value used to initialize the :variable:`CMAKE_STATIC_LINKER_FLAGS`
-cache entry the first time a build tree is configured.
-This variable is meant to be set by a :variable:`toolchain file
-<CMAKE_TOOLCHAIN_FILE>`.  CMake may prepend or append content to
-the value based on the environment and target platform.
-
-See also the configuration-specific variable
-:variable:`CMAKE_STATIC_LINKER_FLAGS_<CONFIG>_INIT`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SUBLIME_TEXT_2_ENV_SETTINGS.rst b/share/cmake-3.18/Help/variable/CMAKE_SUBLIME_TEXT_2_ENV_SETTINGS.rst
deleted file mode 100644
index 02c8663..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_SUBLIME_TEXT_2_ENV_SETTINGS.rst
+++ /dev/null
@@ -1,25 +0,0 @@
-CMAKE_SUBLIME_TEXT_2_ENV_SETTINGS
----------------------------------
-
-This variable contains a list of env vars as a list of tokens with the
-syntax ``var=value``.
-
-Example:
-
-.. code-block:: cmake
-
-  set(CMAKE_SUBLIME_TEXT_2_ENV_SETTINGS
-     "FOO=FOO1\;FOO2\;FOON"
-     "BAR=BAR1\;BAR2\;BARN"
-     "BAZ=BAZ1\;BAZ2\;BAZN"
-     "FOOBAR=FOOBAR1\;FOOBAR2\;FOOBARN"
-     "VALID="
-     )
-
-In case of malformed variables CMake will fail:
-
-.. code-block:: cmake
-
-  set(CMAKE_SUBLIME_TEXT_2_ENV_SETTINGS
-      "THIS_IS_NOT_VALID"
-      )
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SUBLIME_TEXT_2_EXCLUDE_BUILD_TREE.rst b/share/cmake-3.18/Help/variable/CMAKE_SUBLIME_TEXT_2_EXCLUDE_BUILD_TREE.rst
deleted file mode 100644
index d654425..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_SUBLIME_TEXT_2_EXCLUDE_BUILD_TREE.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-CMAKE_SUBLIME_TEXT_2_EXCLUDE_BUILD_TREE
----------------------------------------
-
-If this variable evaluates to ``ON`` at the end of the top-level
-``CMakeLists.txt`` file, the :generator:`Sublime Text 2` extra generator
-excludes the build tree from the ``.sublime-project`` if it is inside the
-source tree.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SUPPRESS_REGENERATION.rst b/share/cmake-3.18/Help/variable/CMAKE_SUPPRESS_REGENERATION.rst
deleted file mode 100644
index 96184dd..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_SUPPRESS_REGENERATION.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_SUPPRESS_REGENERATION
----------------------------
-
-If ``CMAKE_SUPPRESS_REGENERATION`` is ``OFF``, which is default, then CMake
-adds a special target on which all other targets depend that checks the build
-system and optionally re-runs CMake to regenerate the build system when
-the target specification source changes.
-
-If this variable evaluates to ``ON`` at the end of the top-level
-``CMakeLists.txt`` file, CMake will not add the regeneration target to the
-build system or perform any build system checks.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SYSROOT_COMPILE.rst b/share/cmake-3.18/Help/variable/CMAKE_SYSROOT_COMPILE.rst
deleted file mode 100644
index e96c62b..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_SYSROOT_COMPILE.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CMAKE_SYSROOT_COMPILE
----------------------
-
-Path to pass to the compiler in the ``--sysroot`` flag when compiling source
-files.  This is the same as :variable:`CMAKE_SYSROOT` but is used only for
-compiling sources and not linking.
-
-This variable may only be set in a toolchain file specified by
-the :variable:`CMAKE_TOOLCHAIN_FILE` variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SYSROOT_LINK.rst b/share/cmake-3.18/Help/variable/CMAKE_SYSROOT_LINK.rst
deleted file mode 100644
index 88b48ef..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_SYSROOT_LINK.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CMAKE_SYSROOT_LINK
-------------------
-
-Path to pass to the compiler in the ``--sysroot`` flag when linking.  This is
-the same as :variable:`CMAKE_SYSROOT` but is used only for linking and not
-compiling sources.
-
-This variable may only be set in a toolchain file specified by
-the :variable:`CMAKE_TOOLCHAIN_FILE` variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SYSTEM_APPBUNDLE_PATH.rst b/share/cmake-3.18/Help/variable/CMAKE_SYSTEM_APPBUNDLE_PATH.rst
deleted file mode 100644
index 666af46..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_SYSTEM_APPBUNDLE_PATH.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-CMAKE_SYSTEM_APPBUNDLE_PATH
----------------------------
-
-Search path for macOS application bundles used by the :command:`find_program`,
-and :command:`find_package` commands.  By default it contains the standard
-directories for the current system.  It is *not* intended to be modified by
-the project, use :variable:`CMAKE_APPBUNDLE_PATH` for this.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SYSTEM_FRAMEWORK_PATH.rst b/share/cmake-3.18/Help/variable/CMAKE_SYSTEM_FRAMEWORK_PATH.rst
deleted file mode 100644
index 14ba18e..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_SYSTEM_FRAMEWORK_PATH.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CMAKE_SYSTEM_FRAMEWORK_PATH
----------------------------
-
-Search path for macOS frameworks used by the :command:`find_library`,
-:command:`find_package`, :command:`find_path`, and :command:`find_file`
-commands.  By default it contains the standard directories for the
-current system.  It is *not* intended to be modified by the project,
-use :variable:`CMAKE_FRAMEWORK_PATH` for this.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SYSTEM_PROCESSOR.rst b/share/cmake-3.18/Help/variable/CMAKE_SYSTEM_PROCESSOR.rst
deleted file mode 100644
index 8ad89f1..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_SYSTEM_PROCESSOR.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CMAKE_SYSTEM_PROCESSOR
-----------------------
-
-The name of the CPU CMake is building for.
-
-This variable is the same as :variable:`CMAKE_HOST_SYSTEM_PROCESSOR` if
-you build for the host system instead of the target system when
-cross compiling.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_Swift_LANGUAGE_VERSION.rst b/share/cmake-3.18/Help/variable/CMAKE_Swift_LANGUAGE_VERSION.rst
deleted file mode 100644
index b4a74eb..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_Swift_LANGUAGE_VERSION.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CMAKE_Swift_LANGUAGE_VERSION
-----------------------------
-
-Set to the Swift language version number.  If not set, the oldest legacy
-version known to be available in the host Xcode version is assumed:
-
-* Swift ``4.0`` for Xcode 10.2 and above.
-* Swift ``3.0`` for Xcode 8.3 and above.
-* Swift ``2.3`` for Xcode 8.2 and below.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_Swift_MODULE_DIRECTORY.rst b/share/cmake-3.18/Help/variable/CMAKE_Swift_MODULE_DIRECTORY.rst
deleted file mode 100644
index b11253b..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_Swift_MODULE_DIRECTORY.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CMAKE_Swift_MODULE_DIRECTORY
-----------------------------
-
-Swift module output directory.
-
-This variable is used to initialise the :prop_tgt:`Swift_MODULE_DIRECTORY`
-property on all the targets.  See the target property for additional
-information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_Swift_NUM_THREADS.rst b/share/cmake-3.18/Help/variable/CMAKE_Swift_NUM_THREADS.rst
deleted file mode 100644
index cb33678..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_Swift_NUM_THREADS.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CMAKE_Swift_NUM_THREADS
------------------------
-
-Number of threads for parallel compilation for Swift targets.
-
-This variable controls the number of parallel jobs that the swift driver creates
-for building targets.  If not specified, it will default to the number of
-logical CPUs on the host.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_TOOLCHAIN_FILE.rst b/share/cmake-3.18/Help/variable/CMAKE_TOOLCHAIN_FILE.rst
deleted file mode 100644
index 168ee74..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_TOOLCHAIN_FILE.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CMAKE_TOOLCHAIN_FILE
---------------------
-
-Path to toolchain file supplied to :manual:`cmake(1)`.
-
-This variable is specified on the command line when cross-compiling with CMake.
-It is the path to a file which is read early in the CMake run and which
-specifies locations for compilers and toolchain utilities, and other target
-platform and compiler related information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_TRY_COMPILE_PLATFORM_VARIABLES.rst b/share/cmake-3.18/Help/variable/CMAKE_TRY_COMPILE_PLATFORM_VARIABLES.rst
deleted file mode 100644
index 0f96787..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_TRY_COMPILE_PLATFORM_VARIABLES.rst
+++ /dev/null
@@ -1,26 +0,0 @@
-CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
-------------------------------------
-
-List of variables that the :command:`try_compile` command source file signature
-must propagate into the test project in order to target the same platform as
-the host project.
-
-This variable should not be set by project code.  It is meant to be set by
-CMake's platform information modules for the current toolchain, or by a
-toolchain file when used with :variable:`CMAKE_TOOLCHAIN_FILE`.
-
-Variables meaningful to CMake, such as :variable:`CMAKE_<LANG>_FLAGS`, are
-propagated automatically.  The ``CMAKE_TRY_COMPILE_PLATFORM_VARIABLES``
-variable may be set to pass custom variables meaningful to a toolchain file.
-For example, a toolchain file may contain:
-
-.. code-block:: cmake
-
-  set(CMAKE_SYSTEM_NAME ...)
-  set(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES MY_CUSTOM_VARIABLE)
-  # ... use MY_CUSTOM_VARIABLE ...
-
-If a user passes ``-DMY_CUSTOM_VARIABLE=SomeValue`` to CMake then this
-setting will be made visible to the toolchain file both for the main
-project and for test projects generated by the :command:`try_compile`
-command source file signature.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_TRY_COMPILE_TARGET_TYPE.rst b/share/cmake-3.18/Help/variable/CMAKE_TRY_COMPILE_TARGET_TYPE.rst
deleted file mode 100644
index 5fa8dfc..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_TRY_COMPILE_TARGET_TYPE.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-CMAKE_TRY_COMPILE_TARGET_TYPE
------------------------------
-
-Type of target generated for :command:`try_compile` calls using the
-source file signature.  Valid values are:
-
-``EXECUTABLE``
-  Use :command:`add_executable` to name the source file in the
-  generated project.  This is the default if no value is given.
-
-``STATIC_LIBRARY``
-  Use :command:`add_library` with the ``STATIC`` option to name the
-  source file in the generated project.  This avoids running the
-  linker and is intended for use with cross-compiling toolchains
-  that cannot link without custom flags or linker scripts.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_UNITY_BUILD.rst b/share/cmake-3.18/Help/variable/CMAKE_UNITY_BUILD.rst
deleted file mode 100644
index a86cd67..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_UNITY_BUILD.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-CMAKE_UNITY_BUILD
------------------
-
-This variable is used to initialize the :prop_tgt:`UNITY_BUILD`
-property of targets when they are created.  Setting it to true
-enables batch compilation of multiple sources within each target.
-This feature is known as a *Unity* or *Jumbo* build.
-
-Projects should not set this variable, it is intended as a developer
-control to be set on the :manual:`cmake(1)` command line or other
-equivalent methods.  The developer must have the ability to enable or
-disable unity builds according to the capabilities of their own machine
-and compiler.
-
-By default, this variable is not set, which will result in unity builds
-being disabled.
-
-.. note::
-  This option currently does not work well in combination with
-  the :variable:`CMAKE_EXPORT_COMPILE_COMMANDS` variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_UNITY_BUILD_BATCH_SIZE.rst b/share/cmake-3.18/Help/variable/CMAKE_UNITY_BUILD_BATCH_SIZE.rst
deleted file mode 100644
index 7988d4b..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_UNITY_BUILD_BATCH_SIZE.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-CMAKE_UNITY_BUILD_BATCH_SIZE
-----------------------------
-
-This variable is used to initialize the :prop_tgt:`UNITY_BUILD_BATCH_SIZE`
-property of targets when they are created.  It specifies the default upper
-limit on the number of source files that may be combined in any one unity
-source file when unity builds are enabled for a target.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_VS_GLOBALS.rst b/share/cmake-3.18/Help/variable/CMAKE_VS_GLOBALS.rst
deleted file mode 100644
index 83777b6..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_VS_GLOBALS.rst
+++ /dev/null
@@ -1,21 +0,0 @@
-CMAKE_VS_GLOBALS
-----------------
-
-List of ``Key=Value`` records to be set per target as target properties
-:prop_tgt:`VS_GLOBAL_<variable>` with ``variable=Key`` and value ``Value``.
-
-For example:
-
-.. code-block:: cmake
-
-  set(CMAKE_VS_GLOBALS
-    "DefaultLanguage=en-US"
-    "MinimumVisualStudioVersion=14.0"
-    )
-
-will set properties ``VS_GLOBAL_DefaultLanguage`` to ``en-US`` and
-``VS_GLOBAL_MinimumVisualStudioVersion`` to ``14.0`` for all targets
-(except for ``INTERFACE`` libraries).
-
-This variable is meant to be set by a
-:variable:`toolchain file <CMAKE_TOOLCHAIN_FILE>`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD.rst b/share/cmake-3.18/Help/variable/CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD.rst
deleted file mode 100644
index f54472a..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD
------------------------------------------
-
-Include ``INSTALL`` target to default build.
-
-In Visual Studio solution, by default the ``INSTALL`` target will not be part
-of the default build. Setting this variable will enable the ``INSTALL`` target
-to be part of the default build.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_VS_INCLUDE_PACKAGE_TO_DEFAULT_BUILD.rst b/share/cmake-3.18/Help/variable/CMAKE_VS_INCLUDE_PACKAGE_TO_DEFAULT_BUILD.rst
deleted file mode 100644
index 693ba45..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_VS_INCLUDE_PACKAGE_TO_DEFAULT_BUILD.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CMAKE_VS_INCLUDE_PACKAGE_TO_DEFAULT_BUILD
------------------------------------------
-
-Include ``PACKAGE`` target to default build.
-
-In Visual Studio solution, by default the ``PACKAGE`` target will not be part
-of the default build. Setting this variable will enable the ``PACKAGE`` target
-to be part of the default build.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_VS_JUST_MY_CODE_DEBUGGING.rst b/share/cmake-3.18/Help/variable/CMAKE_VS_JUST_MY_CODE_DEBUGGING.rst
deleted file mode 100644
index 546cdf4..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_VS_JUST_MY_CODE_DEBUGGING.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CMAKE_VS_JUST_MY_CODE_DEBUGGING
--------------------------------
-
-Enable Just My Code with Visual Studio debugger.
-
-This variable is used to initialize the :prop_tgt:`VS_JUST_MY_CODE_DEBUGGING`
-property on all targets when they are created.  See that target property for
-additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_VS_NsightTegra_VERSION.rst b/share/cmake-3.18/Help/variable/CMAKE_VS_NsightTegra_VERSION.rst
deleted file mode 100644
index 386c3a9..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_VS_NsightTegra_VERSION.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-CMAKE_VS_NsightTegra_VERSION
-----------------------------
-
-When using a Visual Studio generator with the
-:variable:`CMAKE_SYSTEM_NAME` variable set to ``Android``,
-this variable contains the version number of the
-installed NVIDIA Nsight Tegra Visual Studio Edition.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_VS_PLATFORM_NAME.rst b/share/cmake-3.18/Help/variable/CMAKE_VS_PLATFORM_NAME.rst
deleted file mode 100644
index 7a4642a..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_VS_PLATFORM_NAME.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-CMAKE_VS_PLATFORM_NAME
-----------------------
-
-Visual Studio target platform name used by the current generator.
-
-VS 8 and above allow project files to specify a target platform.
-CMake provides the name of the chosen platform in this variable.
-See the :variable:`CMAKE_GENERATOR_PLATFORM` variable for details.
-
-See also the :variable:`CMAKE_VS_PLATFORM_NAME_DEFAULT` variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_VS_PLATFORM_NAME_DEFAULT.rst b/share/cmake-3.18/Help/variable/CMAKE_VS_PLATFORM_NAME_DEFAULT.rst
deleted file mode 100644
index c18e6fd..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_VS_PLATFORM_NAME_DEFAULT.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CMAKE_VS_PLATFORM_NAME_DEFAULT
-------------------------------
-
-Default for the Visual Studio target platform name for the current generator
-without considering the value of the :variable:`CMAKE_GENERATOR_PLATFORM`
-variable.  For :ref:`Visual Studio Generators` for VS 2017 and below this is
-always ``Win32``.  For VS 2019 and above this is based on the host platform.
-
-See also the :variable:`CMAKE_VS_PLATFORM_NAME` variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_VS_PLATFORM_TOOLSET_CUDA.rst b/share/cmake-3.18/Help/variable/CMAKE_VS_PLATFORM_TOOLSET_CUDA.rst
deleted file mode 100644
index 67b7f74..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_VS_PLATFORM_TOOLSET_CUDA.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-CMAKE_VS_PLATFORM_TOOLSET_CUDA
-------------------------------
-
-NVIDIA CUDA Toolkit version whose Visual Studio toolset to use.
-
-The :ref:`Visual Studio Generators` for VS 2010 and above support using
-a CUDA toolset provided by a CUDA Toolkit.  The toolset version number
-may be specified by a field in :variable:`CMAKE_GENERATOR_TOOLSET` of
-the form ``cuda=8.0``. Or it is automatically detected if a path to
-a standalone CUDA directory is specified in the form ``cuda=C:\path\to\cuda``.
-If none is specified CMake will choose a default version.
-CMake provides the selected CUDA toolset version in this variable.
-The value may be empty if no CUDA Toolkit with Visual Studio integration
-is installed.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR.rst b/share/cmake-3.18/Help/variable/CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR.rst
deleted file mode 100644
index 060648a..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR
------------------------------------------
-
-Path to standalone NVIDIA CUDA Toolkit (eg. extracted from installer).
-
-The :ref:`Visual Studio Generators` for VS 2010 and above support using
-a standalone (non-installed) NVIDIA CUDA toolkit.  The path
-may be specified by a field in :variable:`CMAKE_GENERATOR_TOOLSET` of
-the form ``cuda=C:\path\to\cuda``.  The given directory must at least
-contain a folder ``.\nvcc`` and must provide Visual Studio integration
-files in path ``.\CUDAVisualStudioIntegration\extras\
-visual_studio_integration\MSBuildExtensions\``. One can create a standalone
-CUDA toolkit directory by either opening a installer with 7zip or
-copying the files that are extracted by the running installer.
-The value may be empty if no path to a standalone CUDA Toolkit was
-specified.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE.rst b/share/cmake-3.18/Help/variable/CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE.rst
deleted file mode 100644
index 99ac90d..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE
--------------------------------------------
-
-Visual Studio preferred tool architecture.
-
-The :ref:`Visual Studio Generators` for VS 2013 and above support using
-either the 32-bit or 64-bit host toolchains by specifying a ``host=x86``
-or ``host=x64`` value in the :variable:`CMAKE_GENERATOR_TOOLSET` option.
-CMake provides the selected toolchain architecture preference in this
-variable (``x86``, ``x64``, or empty).
diff --git a/share/cmake-3.18/Help/variable/CMAKE_VS_PLATFORM_TOOLSET_VERSION.rst b/share/cmake-3.18/Help/variable/CMAKE_VS_PLATFORM_TOOLSET_VERSION.rst
deleted file mode 100644
index 4d9b978..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_VS_PLATFORM_TOOLSET_VERSION.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CMAKE_VS_PLATFORM_TOOLSET_VERSION
----------------------------------
-
-Visual Studio Platform Toolset version.
-
-The :ref:`Visual Studio Generators` for VS 2017 and above allow to
-select minor versions of the same toolset. The toolset version number
-may be specified by a field in :variable:`CMAKE_GENERATOR_TOOLSET` of
-the form ``version=14.11``. If none is specified CMake will choose a default
-toolset. The value may be empty if no minor version was selected and the
-default is used.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_VS_SDK_EXCLUDE_DIRECTORIES.rst b/share/cmake-3.18/Help/variable/CMAKE_VS_SDK_EXCLUDE_DIRECTORIES.rst
deleted file mode 100644
index 36c4dcc..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_VS_SDK_EXCLUDE_DIRECTORIES.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-CMAKE_VS_SDK_EXCLUDE_DIRECTORIES
---------------------------------
-
-This variable allows to override Visual Studio default Exclude Directories.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_VS_SDK_EXECUTABLE_DIRECTORIES.rst b/share/cmake-3.18/Help/variable/CMAKE_VS_SDK_EXECUTABLE_DIRECTORIES.rst
deleted file mode 100644
index 3ec755b..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_VS_SDK_EXECUTABLE_DIRECTORIES.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-CMAKE_VS_SDK_EXECUTABLE_DIRECTORIES
------------------------------------
-
-This variable allows to override Visual Studio default Executable Directories.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_VS_SDK_INCLUDE_DIRECTORIES.rst b/share/cmake-3.18/Help/variable/CMAKE_VS_SDK_INCLUDE_DIRECTORIES.rst
deleted file mode 100644
index da10bde..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_VS_SDK_INCLUDE_DIRECTORIES.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-CMAKE_VS_SDK_INCLUDE_DIRECTORIES
---------------------------------
-
-This variable allows to override Visual Studio default Include Directories.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_VS_SDK_LIBRARY_DIRECTORIES.rst b/share/cmake-3.18/Help/variable/CMAKE_VS_SDK_LIBRARY_DIRECTORIES.rst
deleted file mode 100644
index b33754a..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_VS_SDK_LIBRARY_DIRECTORIES.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-CMAKE_VS_SDK_LIBRARY_DIRECTORIES
---------------------------------
-
-This variable allows to override Visual Studio default Library Directories.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_VS_SDK_LIBRARY_WINRT_DIRECTORIES.rst b/share/cmake-3.18/Help/variable/CMAKE_VS_SDK_LIBRARY_WINRT_DIRECTORIES.rst
deleted file mode 100644
index b022215..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_VS_SDK_LIBRARY_WINRT_DIRECTORIES.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CMAKE_VS_SDK_LIBRARY_WINRT_DIRECTORIES
---------------------------------------
-
-This variable allows to override Visual Studio default Library WinRT
-Directories.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_VS_SDK_REFERENCE_DIRECTORIES.rst b/share/cmake-3.18/Help/variable/CMAKE_VS_SDK_REFERENCE_DIRECTORIES.rst
deleted file mode 100644
index c03f0ae..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_VS_SDK_REFERENCE_DIRECTORIES.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-CMAKE_VS_SDK_REFERENCE_DIRECTORIES
-----------------------------------
-
-This variable allows to override Visual Studio default Reference Directories.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_VS_SDK_SOURCE_DIRECTORIES.rst b/share/cmake-3.18/Help/variable/CMAKE_VS_SDK_SOURCE_DIRECTORIES.rst
deleted file mode 100644
index 0c73f06..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_VS_SDK_SOURCE_DIRECTORIES.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-CMAKE_VS_SDK_SOURCE_DIRECTORIES
--------------------------------
-
-This variable allows to override Visual Studio default Source Directories.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION.rst b/share/cmake-3.18/Help/variable/CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION.rst
deleted file mode 100644
index 83b9bc1..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION
-----------------------------------------
-
-Visual Studio Windows Target Platform Version.
-
-When targeting Windows 10 and above Visual Studio 2015 and above support
-specification of a target Windows version to select a corresponding SDK.
-The :variable:`CMAKE_SYSTEM_VERSION` variable may be set to specify a
-version.  Otherwise CMake computes a default version based on the Windows
-SDK versions available.  The chosen Windows target version number is provided
-in ``CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION``.  If no Windows 10 SDK
-is available this value will be empty.
-
-One may set a ``CMAKE_WINDOWS_KITS_10_DIR`` *environment variable*
-to an absolute path to tell CMake to look for Windows 10 SDKs in
-a custom location.  The specified directory is expected to contain
-``Include/10.0.*`` directories.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_VS_WINRT_BY_DEFAULT.rst b/share/cmake-3.18/Help/variable/CMAKE_VS_WINRT_BY_DEFAULT.rst
deleted file mode 100644
index 2eea424..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_VS_WINRT_BY_DEFAULT.rst
+++ /dev/null
@@ -1,18 +0,0 @@
-CMAKE_VS_WINRT_BY_DEFAULT
--------------------------
-
-Inform :ref:`Visual Studio Generators` for VS 2010 and above that the
-target platform enables WinRT compilation by default and it needs to
-be explicitly disabled if ``/ZW`` or :prop_tgt:`VS_WINRT_COMPONENT` is
-omitted (as opposed to enabling it when either of those options is
-present)
-
-This makes cmake configuration consistent in terms of WinRT among
-platforms - if you did not enable the WinRT compilation explicitly, it
-will be disabled (by either not enabling it or explicitly disabling it)
-
-Note: WinRT compilation is always explicitly disabled for C language
-source files, even if it is expliclty enabled for a project
-
-This variable is meant to be set by a
-:variable:`toolchain file <CMAKE_TOOLCHAIN_FILE>` for such platforms.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS.rst b/share/cmake-3.18/Help/variable/CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS.rst
deleted file mode 100644
index 1636842..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS
---------------------------------
-
-Default value for :prop_tgt:`WINDOWS_EXPORT_ALL_SYMBOLS` target property.
-This variable is used to initialize the property on each target as it is
-created.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_XCODE_ATTRIBUTE_an-attribute.rst b/share/cmake-3.18/Help/variable/CMAKE_XCODE_ATTRIBUTE_an-attribute.rst
deleted file mode 100644
index be683d6..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_XCODE_ATTRIBUTE_an-attribute.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-CMAKE_XCODE_ATTRIBUTE_<an-attribute>
-------------------------------------
-
-Set Xcode target attributes directly.
-
-Tell the :generator:`Xcode` generator to set '<an-attribute>' to a given value
-in the generated Xcode project.  Ignored on other generators.
-
-See the :prop_tgt:`XCODE_ATTRIBUTE_<an-attribute>` target property
-to set attributes on a specific target.
-
-Contents of ``CMAKE_XCODE_ATTRIBUTE_<an-attribute>`` may use
-"generator expressions" with the syntax ``$<...>``.  See the
-:manual:`cmake-generator-expressions(7)` manual for available
-expressions.  See the :manual:`cmake-buildsystem(7)` manual
-for more on defining buildsystem properties.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_XCODE_GENERATE_SCHEME.rst b/share/cmake-3.18/Help/variable/CMAKE_XCODE_GENERATE_SCHEME.rst
deleted file mode 100644
index 5b1a003..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_XCODE_GENERATE_SCHEME.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-CMAKE_XCODE_GENERATE_SCHEME
----------------------------
-
-If enabled, the :generator:`Xcode` generator will generate schema files.  These
-are useful to invoke analyze, archive, build-for-testing and test
-actions from the command line.
-
-This variable initializes the
-:prop_tgt:`XCODE_GENERATE_SCHEME`
-target property on all targets.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY.rst b/share/cmake-3.18/Help/variable/CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY.rst
deleted file mode 100644
index ea3e240..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY
--------------------------------------------
-
-If enabled, the :generator:`Xcode` generator will generate only a
-single Xcode project file for the topmost :command:`project()` command
-instead of generating one for every ``project()`` command.
-
-This could be useful to speed up the CMake generation step for
-large projects and to work-around a bug in the ``ZERO_CHECK`` logic.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER.rst b/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER.rst
deleted file mode 100644
index b972ba5..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER
-------------------------------------
-
-Whether to enable ``Address Sanitizer`` in the Diagnostics
-section of the generated Xcode scheme.
-
-This variable initializes the
-:prop_tgt:`XCODE_SCHEME_ADDRESS_SANITIZER`
-property on all targets.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN.rst b/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN.rst
deleted file mode 100644
index 59eb32d..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN
------------------------------------------------------
-
-Whether to enable ``Detect use of stack after return``
-in the Diagnostics section of the generated Xcode scheme.
-
-This variable initializes the
-:prop_tgt:`XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN`
-property on all targets.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING.rst b/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING.rst
deleted file mode 100644
index a264d36..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-CMAKE_XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING
---------------------------------------------
-
-Whether to enable
-``Allow debugging when using document Versions Browser``
-in the Options section of the generated Xcode scheme.
-
-This variable initializes the
-:prop_tgt:`XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING`
-property on all targets.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER.rst b/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER.rst
deleted file mode 100644
index 71bcf42..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-CMAKE_XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER
-----------------------------------------------
-
-Whether to disable the ``Main Thread Checker``
-in the Diagnostics section of the generated Xcode scheme.
-
-This variable initializes the
-:prop_tgt:`XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER`
-property on all targets.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS.rst b/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS.rst
deleted file mode 100644
index 53f55e6..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-CMAKE_XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS
-----------------------------------------
-
-Whether to enable ``Dynamic Library Loads``
-in the Diagnostics section of the generated Xcode scheme.
-
-This variable initializes the
-:prop_tgt:`XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS`
-property on all targets.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE.rst b/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE.rst
deleted file mode 100644
index 784ceb6..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE
--------------------------------------------
-
-Whether to enable ``Dynamic Linker API usage``
-in the Diagnostics section of the generated Xcode scheme.
-
-This variable initializes the
-:prop_tgt:`XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE`
-property on all targets.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_ENVIRONMENT.rst b/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_ENVIRONMENT.rst
deleted file mode 100644
index 4832659..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_ENVIRONMENT.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-CMAKE_XCODE_SCHEME_ENVIRONMENT
-------------------------------
-
-Specify environment variables that should be added to the Arguments
-section of the generated Xcode scheme.
-
-If set to a list of environment variables and values of the form
-``MYVAR=value`` those environment variables will be added to the
-scheme.
-
-This variable initializes the :prop_tgt:`XCODE_SCHEME_ENVIRONMENT`
-property on all targets.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_GUARD_MALLOC.rst b/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_GUARD_MALLOC.rst
deleted file mode 100644
index 9350244..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_GUARD_MALLOC.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-CMAKE_XCODE_SCHEME_GUARD_MALLOC
--------------------------------
-
-Whether to enable ``Guard Malloc``
-in the Diagnostics section of the generated Xcode scheme.
-
-This variable initializes the
-:prop_tgt:`XCODE_SCHEME_GUARD_MALLOC`
-property on all targets.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP.rst b/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP.rst
deleted file mode 100644
index 45a2dad..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP
--------------------------------------------
-
-Whether to enable the ``Main Thread Checker`` option
-``Pause on issues``
-in the Diagnostics section of the generated Xcode scheme.
-
-This variable initializes the
-:prop_tgt:`XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP`
-property on all targets.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_GUARD_EDGES.rst b/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_GUARD_EDGES.rst
deleted file mode 100644
index 94d1c61..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_GUARD_EDGES.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-CMAKE_XCODE_SCHEME_MALLOC_GUARD_EDGES
--------------------------------------
-
-Whether to enable ``Malloc Guard Edges``
-in the Diagnostics section of the generated Xcode scheme.
-
-This variable initializes the
-:prop_tgt:`XCODE_SCHEME_MALLOC_GUARD_EDGES`
-property on all targets.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_SCRIBBLE.rst b/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_SCRIBBLE.rst
deleted file mode 100644
index 9bf0eb4..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_SCRIBBLE.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-CMAKE_XCODE_SCHEME_MALLOC_SCRIBBLE
-----------------------------------
-
-Whether to enable ``Malloc Scribble``
-in the Diagnostics section of the generated Xcode scheme.
-
-This variable initializes the
-:prop_tgt:`XCODE_SCHEME_MALLOC_SCRIBBLE`
-property on all targets.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_STACK.rst b/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_STACK.rst
deleted file mode 100644
index 4cc21ee..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_STACK.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-CMAKE_XCODE_SCHEME_MALLOC_STACK
--------------------------------
-
-Whether to enable ``Malloc Stack`` in the Diagnostics
-section of the generated Xcode scheme.
-
-This variable initializes the
-:prop_tgt:`XCODE_SCHEME_MALLOC_STACK`
-property on all targets.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_THREAD_SANITIZER.rst b/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_THREAD_SANITIZER.rst
deleted file mode 100644
index 6d1b56e..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_THREAD_SANITIZER.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-CMAKE_XCODE_SCHEME_THREAD_SANITIZER
------------------------------------
-
-Whether to enable ``Thread Sanitizer`` in the Diagnostics
-section of the generated Xcode scheme.
-
-This variable initializes the
-:prop_tgt:`XCODE_SCHEME_THREAD_SANITIZER`
-property on all targets.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_THREAD_SANITIZER_STOP.rst b/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_THREAD_SANITIZER_STOP.rst
deleted file mode 100644
index de40478..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_THREAD_SANITIZER_STOP.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-CMAKE_XCODE_SCHEME_THREAD_SANITIZER_STOP
-----------------------------------------
-
-Whether to enable ``Thread Sanitizer - Pause on issues``
-in the Diagnostics section of the generated Xcode scheme.
-
-This variable initializes the
-:prop_tgt:`XCODE_SCHEME_THREAD_SANITIZER_STOP`
-property on all targets.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER.rst b/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER.rst
deleted file mode 100644
index ec5df66..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER
-------------------------------------------------
-
-Whether to enable ``Undefined Behavior Sanitizer``
-in the Diagnostics section of the generated Xcode scheme.
-
-This variable initializes the
-:prop_tgt:`XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER`
-property on all targets.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP.rst b/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP.rst
deleted file mode 100644
index dcec9b0..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP
------------------------------------------------------
-
-Whether to enable ``Undefined Behavior Sanitizer`` option
-``Pause on issues``
-in the Diagnostics section of the generated Xcode scheme.
-
-This variable initializes the
-:prop_tgt:`XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP`
-property on all targets.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_WORKING_DIRECTORY.rst b/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_WORKING_DIRECTORY.rst
deleted file mode 100644
index 5bb7907..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_WORKING_DIRECTORY.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-CMAKE_XCODE_SCHEME_WORKING_DIRECTORY
-------------------------------------
-
-Specify the ``Working Directory`` of the *Run* and *Profile*
-actions in the generated Xcode scheme.
-
-This variable initializes the
-:prop_tgt:`XCODE_SCHEME_WORKING_DIRECTORY`
-property on all targets.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_ZOMBIE_OBJECTS.rst b/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_ZOMBIE_OBJECTS.rst
deleted file mode 100644
index 82e9d76..0000000
--- a/share/cmake-3.18/Help/variable/CMAKE_XCODE_SCHEME_ZOMBIE_OBJECTS.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-CMAKE_XCODE_SCHEME_ZOMBIE_OBJECTS
----------------------------------
-
-Whether to enable ``Zombie Objects``
-in the Diagnostics section of the generated Xcode scheme.
-
-This variable initializes the
-:prop_tgt:`XCODE_SCHEME_ZOMBIE_OBJECTS`
-property on all targets.
-
-Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
-documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/variable/CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS.rst b/share/cmake-3.18/Help/variable/CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS.rst
deleted file mode 100644
index 83d5ce7..0000000
--- a/share/cmake-3.18/Help/variable/CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS
--------------------------------------------
-
-Default permissions for implicitly created directories during packaging.
-
-This variable serves the same purpose during packaging as the
-:variable:`CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS` variable
-serves during installation (e.g. ``make install``).
-
-If `include(CPack)` is used then by default this variable is set to the content
-of :variable:`CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS`.
diff --git a/share/cmake-3.18/Help/variable/CTEST_BINARY_DIRECTORY.rst b/share/cmake-3.18/Help/variable/CTEST_BINARY_DIRECTORY.rst
deleted file mode 100644
index fd8461f..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_BINARY_DIRECTORY.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_BINARY_DIRECTORY
-----------------------
-
-Specify the CTest ``BuildDirectory`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_BUILD_COMMAND.rst b/share/cmake-3.18/Help/variable/CTEST_BUILD_COMMAND.rst
deleted file mode 100644
index 7b13ba0..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_BUILD_COMMAND.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_BUILD_COMMAND
--------------------
-
-Specify the CTest ``MakeCommand`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_BUILD_NAME.rst b/share/cmake-3.18/Help/variable/CTEST_BUILD_NAME.rst
deleted file mode 100644
index d25d84c..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_BUILD_NAME.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_BUILD_NAME
-----------------
-
-Specify the CTest ``BuildName`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_BZR_COMMAND.rst b/share/cmake-3.18/Help/variable/CTEST_BZR_COMMAND.rst
deleted file mode 100644
index 474d621..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_BZR_COMMAND.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_BZR_COMMAND
------------------
-
-Specify the CTest ``BZRCommand`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_BZR_UPDATE_OPTIONS.rst b/share/cmake-3.18/Help/variable/CTEST_BZR_UPDATE_OPTIONS.rst
deleted file mode 100644
index d0f9579..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_BZR_UPDATE_OPTIONS.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_BZR_UPDATE_OPTIONS
-------------------------
-
-Specify the CTest ``BZRUpdateOptions`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_CHANGE_ID.rst b/share/cmake-3.18/Help/variable/CTEST_CHANGE_ID.rst
deleted file mode 100644
index a423f49..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_CHANGE_ID.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CTEST_CHANGE_ID
----------------
-
-Specify the CTest ``ChangeId`` setting
-in a :manual:`ctest(1)` dashboard client script.
-
-This setting allows CTest to pass arbitrary information about this
-build up to CDash.  One use of this feature is to allow CDash to
-post comments on your pull request if anything goes wrong with your build.
diff --git a/share/cmake-3.18/Help/variable/CTEST_CHECKOUT_COMMAND.rst b/share/cmake-3.18/Help/variable/CTEST_CHECKOUT_COMMAND.rst
deleted file mode 100644
index da256f2..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_CHECKOUT_COMMAND.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_CHECKOUT_COMMAND
-----------------------
-
-Tell the :command:`ctest_start` command how to checkout or initialize
-the source directory in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_CONFIGURATION_TYPE.rst b/share/cmake-3.18/Help/variable/CTEST_CONFIGURATION_TYPE.rst
deleted file mode 100644
index 9e277fa..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_CONFIGURATION_TYPE.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CTEST_CONFIGURATION_TYPE
-------------------------
-
-Specify the CTest ``DefaultCTestConfigurationType`` setting
-in a :manual:`ctest(1)` dashboard client script.
-
-If the configuration type is set via ``-C <cfg>`` from the command line
-then this variable is populated accordingly.
diff --git a/share/cmake-3.18/Help/variable/CTEST_CONFIGURE_COMMAND.rst b/share/cmake-3.18/Help/variable/CTEST_CONFIGURE_COMMAND.rst
deleted file mode 100644
index 5561b6d..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_CONFIGURE_COMMAND.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_CONFIGURE_COMMAND
------------------------
-
-Specify the CTest ``ConfigureCommand`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_COVERAGE_COMMAND.rst b/share/cmake-3.18/Help/variable/CTEST_COVERAGE_COMMAND.rst
deleted file mode 100644
index a78792e..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_COVERAGE_COMMAND.rst
+++ /dev/null
@@ -1,60 +0,0 @@
-CTEST_COVERAGE_COMMAND
-----------------------
-
-Specify the CTest ``CoverageCommand`` setting
-in a :manual:`ctest(1)` dashboard client script.
-
-Cobertura
-'''''''''
-
-Using `Cobertura`_ as the coverage generation within your multi-module
-Java project can generate a series of XML files.
-
-The Cobertura Coverage parser expects to read the coverage data from a
-single XML file which contains the coverage data for all modules.
-Cobertura has a program with the ability to merge given ``cobertura.ser`` files
-and then another program to generate a combined XML file from the previous
-merged file.  For command line testing, this can be done by hand prior to
-CTest looking for the coverage files. For script builds,
-set the ``CTEST_COVERAGE_COMMAND`` variable to point to a file which will
-perform these same steps, such as a ``.sh`` or ``.bat`` file.
-
-.. code-block:: cmake
-
-  set(CTEST_COVERAGE_COMMAND .../run-coverage-and-consolidate.sh)
-
-where the ``run-coverage-and-consolidate.sh`` script is perhaps created by
-the :command:`configure_file` command and might contain the following code:
-
-.. code-block:: bash
-
-  #!/usr/bin/env bash
-  CoberturaFiles="$(find "/path/to/source" -name "cobertura.ser")"
-  SourceDirs="$(find "/path/to/source" -name "java" -type d)"
-  cobertura-merge --datafile coberturamerge.ser $CoberturaFiles
-  cobertura-report --datafile coberturamerge.ser --destination . \
-                   --format xml $SourceDirs
-
-The script uses ``find`` to capture the paths to all of the ``cobertura.ser``
-files found below the project's source directory.  It keeps the list of files
-and supplies it as an argument to the ``cobertura-merge`` program. The
-``--datafile`` argument signifies where the result of the merge will be kept.
-
-The combined ``coberturamerge.ser`` file is then used to generate the XML report
-using the ``cobertura-report`` program.  The call to the cobertura-report
-program requires some named arguments.
-
-``--datafila``
-  path to the merged ``.ser`` file
-
-``--destination``
-  path to put the output files(s)
-
-``--format``
-  file format to write output in: xml or html
-
-The rest of the supplied arguments consist of the full paths to the
-``/src/main/java`` directories of each module within the source tree. These
-directories are needed and should not be forgotten.
-
-.. _`Cobertura`: http://cobertura.github.io/cobertura/
diff --git a/share/cmake-3.18/Help/variable/CTEST_COVERAGE_EXTRA_FLAGS.rst b/share/cmake-3.18/Help/variable/CTEST_COVERAGE_EXTRA_FLAGS.rst
deleted file mode 100644
index 2981955..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_COVERAGE_EXTRA_FLAGS.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_COVERAGE_EXTRA_FLAGS
---------------------------
-
-Specify the CTest ``CoverageExtraFlags`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_CURL_OPTIONS.rst b/share/cmake-3.18/Help/variable/CTEST_CURL_OPTIONS.rst
deleted file mode 100644
index fc5dfc4..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_CURL_OPTIONS.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_CURL_OPTIONS
-------------------
-
-Specify the CTest ``CurlOptions`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE.rst b/share/cmake-3.18/Help/variable/CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE.rst
deleted file mode 100644
index 5aeae88..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE
---------------------------------------------
-
-When saving a failing test's output, this is the maximum size, in bytes, that
-will be collected by the :command:`ctest_test` command. Defaults to 307200
-(300 KiB).
-
-.. include:: CTEST_CUSTOM_XXX.txt
diff --git a/share/cmake-3.18/Help/variable/CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE.rst b/share/cmake-3.18/Help/variable/CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE.rst
deleted file mode 100644
index 1fbb8c5..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE
---------------------------------------------
-
-When saving a passing test's output, this is the maximum size, in bytes, that
-will be collected by the :command:`ctest_test` command. Defaults to 1024
-(1 KiB).
-
-.. include:: CTEST_CUSTOM_XXX.txt
diff --git a/share/cmake-3.18/Help/variable/CTEST_CVS_CHECKOUT.rst b/share/cmake-3.18/Help/variable/CTEST_CVS_CHECKOUT.rst
deleted file mode 100644
index 6431c02..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_CVS_CHECKOUT.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-CTEST_CVS_CHECKOUT
-------------------
-
-Deprecated.  Use :variable:`CTEST_CHECKOUT_COMMAND` instead.
diff --git a/share/cmake-3.18/Help/variable/CTEST_CVS_COMMAND.rst b/share/cmake-3.18/Help/variable/CTEST_CVS_COMMAND.rst
deleted file mode 100644
index 049700b..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_CVS_COMMAND.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_CVS_COMMAND
------------------
-
-Specify the CTest ``CVSCommand`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_CVS_UPDATE_OPTIONS.rst b/share/cmake-3.18/Help/variable/CTEST_CVS_UPDATE_OPTIONS.rst
deleted file mode 100644
index d7f2f7c..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_CVS_UPDATE_OPTIONS.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_CVS_UPDATE_OPTIONS
-------------------------
-
-Specify the CTest ``CVSUpdateOptions`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_DROP_LOCATION.rst b/share/cmake-3.18/Help/variable/CTEST_DROP_LOCATION.rst
deleted file mode 100644
index c0f2215..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_DROP_LOCATION.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_DROP_LOCATION
--------------------
-
-Specify the CTest ``DropLocation`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_DROP_METHOD.rst b/share/cmake-3.18/Help/variable/CTEST_DROP_METHOD.rst
deleted file mode 100644
index 50fbd4d..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_DROP_METHOD.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_DROP_METHOD
------------------
-
-Specify the CTest ``DropMethod`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_DROP_SITE.rst b/share/cmake-3.18/Help/variable/CTEST_DROP_SITE.rst
deleted file mode 100644
index d15d99b..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_DROP_SITE.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_DROP_SITE
----------------
-
-Specify the CTest ``DropSite`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_DROP_SITE_CDASH.rst b/share/cmake-3.18/Help/variable/CTEST_DROP_SITE_CDASH.rst
deleted file mode 100644
index 22b9776..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_DROP_SITE_CDASH.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_DROP_SITE_CDASH
----------------------
-
-Specify the CTest ``IsCDash`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_DROP_SITE_PASSWORD.rst b/share/cmake-3.18/Help/variable/CTEST_DROP_SITE_PASSWORD.rst
deleted file mode 100644
index 904d2c8..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_DROP_SITE_PASSWORD.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_DROP_SITE_PASSWORD
-------------------------
-
-Specify the CTest ``DropSitePassword`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_DROP_SITE_USER.rst b/share/cmake-3.18/Help/variable/CTEST_DROP_SITE_USER.rst
deleted file mode 100644
index a860a03..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_DROP_SITE_USER.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_DROP_SITE_USER
---------------------
-
-Specify the CTest ``DropSiteUser`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_EXTRA_COVERAGE_GLOB.rst b/share/cmake-3.18/Help/variable/CTEST_EXTRA_COVERAGE_GLOB.rst
deleted file mode 100644
index 286f7df..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_EXTRA_COVERAGE_GLOB.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-CTEST_EXTRA_COVERAGE_GLOB
--------------------------
-
-A list of regular expressions which will be used to find files which should be
-covered by the :command:`ctest_coverage` command.
-
-.. include:: CTEST_CUSTOM_XXX.txt
diff --git a/share/cmake-3.18/Help/variable/CTEST_GIT_COMMAND.rst b/share/cmake-3.18/Help/variable/CTEST_GIT_COMMAND.rst
deleted file mode 100644
index eb83792..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_GIT_COMMAND.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_GIT_COMMAND
------------------
-
-Specify the CTest ``GITCommand`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_GIT_INIT_SUBMODULES.rst b/share/cmake-3.18/Help/variable/CTEST_GIT_INIT_SUBMODULES.rst
deleted file mode 100644
index fd27003..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_GIT_INIT_SUBMODULES.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_GIT_INIT_SUBMODULES
--------------------------
-
-Specify the CTest ``GITInitSubmodules`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_GIT_UPDATE_CUSTOM.rst b/share/cmake-3.18/Help/variable/CTEST_GIT_UPDATE_CUSTOM.rst
deleted file mode 100644
index 0c479e6..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_GIT_UPDATE_CUSTOM.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_GIT_UPDATE_CUSTOM
------------------------
-
-Specify the CTest ``GITUpdateCustom`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_GIT_UPDATE_OPTIONS.rst b/share/cmake-3.18/Help/variable/CTEST_GIT_UPDATE_OPTIONS.rst
deleted file mode 100644
index 4590a78..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_GIT_UPDATE_OPTIONS.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_GIT_UPDATE_OPTIONS
-------------------------
-
-Specify the CTest ``GITUpdateOptions`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_HG_COMMAND.rst b/share/cmake-3.18/Help/variable/CTEST_HG_COMMAND.rst
deleted file mode 100644
index 3854950..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_HG_COMMAND.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_HG_COMMAND
-----------------
-
-Specify the CTest ``HGCommand`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_HG_UPDATE_OPTIONS.rst b/share/cmake-3.18/Help/variable/CTEST_HG_UPDATE_OPTIONS.rst
deleted file mode 100644
index 9049c1f..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_HG_UPDATE_OPTIONS.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_HG_UPDATE_OPTIONS
------------------------
-
-Specify the CTest ``HGUpdateOptions`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_LABELS_FOR_SUBPROJECTS.rst b/share/cmake-3.18/Help/variable/CTEST_LABELS_FOR_SUBPROJECTS.rst
deleted file mode 100644
index 959596b..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_LABELS_FOR_SUBPROJECTS.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_LABELS_FOR_SUBPROJECTS
-----------------------------
-
-Specify the CTest ``LabelsForSubprojects`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_MEMORYCHECK_COMMAND.rst b/share/cmake-3.18/Help/variable/CTEST_MEMORYCHECK_COMMAND.rst
deleted file mode 100644
index 8c199ba..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_MEMORYCHECK_COMMAND.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_MEMORYCHECK_COMMAND
--------------------------
-
-Specify the CTest ``MemoryCheckCommand`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_MEMORYCHECK_COMMAND_OPTIONS.rst b/share/cmake-3.18/Help/variable/CTEST_MEMORYCHECK_COMMAND_OPTIONS.rst
deleted file mode 100644
index 3e26ab5..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_MEMORYCHECK_COMMAND_OPTIONS.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_MEMORYCHECK_COMMAND_OPTIONS
----------------------------------
-
-Specify the CTest ``MemoryCheckCommandOptions`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_MEMORYCHECK_SANITIZER_OPTIONS.rst b/share/cmake-3.18/Help/variable/CTEST_MEMORYCHECK_SANITIZER_OPTIONS.rst
deleted file mode 100644
index 2de5fb6..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_MEMORYCHECK_SANITIZER_OPTIONS.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_MEMORYCHECK_SANITIZER_OPTIONS
------------------------------------
-
-Specify the CTest ``MemoryCheckSanitizerOptions`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_MEMORYCHECK_SUPPRESSIONS_FILE.rst b/share/cmake-3.18/Help/variable/CTEST_MEMORYCHECK_SUPPRESSIONS_FILE.rst
deleted file mode 100644
index 1147ee8..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_MEMORYCHECK_SUPPRESSIONS_FILE.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_MEMORYCHECK_SUPPRESSIONS_FILE
------------------------------------
-
-Specify the CTest ``MemoryCheckSuppressionFile`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_MEMORYCHECK_TYPE.rst b/share/cmake-3.18/Help/variable/CTEST_MEMORYCHECK_TYPE.rst
deleted file mode 100644
index 4e7d5c0..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_MEMORYCHECK_TYPE.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-CTEST_MEMORYCHECK_TYPE
-----------------------
-
-Specify the CTest ``MemoryCheckType`` setting
-in a :manual:`ctest(1)` dashboard client script.
-Valid values are ``Valgrind``, ``Purify``, ``BoundsChecker``, ``DrMemory`` and
-``ThreadSanitizer``, ``AddressSanitizer``, ``LeakSanitizer``, ``MemorySanitizer``, and
-``UndefinedBehaviorSanitizer``.
diff --git a/share/cmake-3.18/Help/variable/CTEST_NIGHTLY_START_TIME.rst b/share/cmake-3.18/Help/variable/CTEST_NIGHTLY_START_TIME.rst
deleted file mode 100644
index 90841f9..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_NIGHTLY_START_TIME.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-CTEST_NIGHTLY_START_TIME
-------------------------
-
-Specify the CTest ``NightlyStartTime`` setting in a :manual:`ctest(1)`
-dashboard client script.
-
-Note that this variable must always be set for a nightly build in a
-dashboard script. It is needed so that nightly builds can be properly grouped
-together in CDash.
diff --git a/share/cmake-3.18/Help/variable/CTEST_P4_CLIENT.rst b/share/cmake-3.18/Help/variable/CTEST_P4_CLIENT.rst
deleted file mode 100644
index 347ea54..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_P4_CLIENT.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_P4_CLIENT
----------------
-
-Specify the CTest ``P4Client`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_P4_COMMAND.rst b/share/cmake-3.18/Help/variable/CTEST_P4_COMMAND.rst
deleted file mode 100644
index defab12..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_P4_COMMAND.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_P4_COMMAND
-----------------
-
-Specify the CTest ``P4Command`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_P4_OPTIONS.rst b/share/cmake-3.18/Help/variable/CTEST_P4_OPTIONS.rst
deleted file mode 100644
index fee4ce2..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_P4_OPTIONS.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_P4_OPTIONS
-----------------
-
-Specify the CTest ``P4Options`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_P4_UPDATE_OPTIONS.rst b/share/cmake-3.18/Help/variable/CTEST_P4_UPDATE_OPTIONS.rst
deleted file mode 100644
index 0e2790f..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_P4_UPDATE_OPTIONS.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_P4_UPDATE_OPTIONS
------------------------
-
-Specify the CTest ``P4UpdateOptions`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_RESOURCE_SPEC_FILE.rst b/share/cmake-3.18/Help/variable/CTEST_RESOURCE_SPEC_FILE.rst
deleted file mode 100644
index a6fdbc9..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_RESOURCE_SPEC_FILE.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-CTEST_RESOURCE_SPEC_FILE
-------------------------
-
-Specify the CTest ``ResourceSpecFile`` setting in a :manual:`ctest(1)`
-dashboard client script.
-
-This can also be used to specify the resource spec file from a CMake build. If
-no ``RESOURCE_SPEC_FILE`` is passed to :command:`ctest_test`, and
-``CTEST_RESOURCE_SPEC_FILE`` is not specified in the dashboard script, the
-value of this variable from the build is used.
diff --git a/share/cmake-3.18/Help/variable/CTEST_RUN_CURRENT_SCRIPT.rst b/share/cmake-3.18/Help/variable/CTEST_RUN_CURRENT_SCRIPT.rst
deleted file mode 100644
index abc123c..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_RUN_CURRENT_SCRIPT.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_RUN_CURRENT_SCRIPT
-------------------------
-
-Setting this to 0 prevents :manual:`ctest(1)` from being run again when it
-reaches the end of a script run by calling ``ctest -S``.
diff --git a/share/cmake-3.18/Help/variable/CTEST_SCP_COMMAND.rst b/share/cmake-3.18/Help/variable/CTEST_SCP_COMMAND.rst
deleted file mode 100644
index 19ea8b3..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_SCP_COMMAND.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-CTEST_SCP_COMMAND
------------------
-
-Legacy option.  Not used.
diff --git a/share/cmake-3.18/Help/variable/CTEST_SITE.rst b/share/cmake-3.18/Help/variable/CTEST_SITE.rst
deleted file mode 100644
index 8a5ec25..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_SITE.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_SITE
-----------
-
-Specify the CTest ``Site`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_SOURCE_DIRECTORY.rst b/share/cmake-3.18/Help/variable/CTEST_SOURCE_DIRECTORY.rst
deleted file mode 100644
index b6837d1..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_SOURCE_DIRECTORY.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_SOURCE_DIRECTORY
-----------------------
-
-Specify the CTest ``SourceDirectory`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_SUBMIT_URL.rst b/share/cmake-3.18/Help/variable/CTEST_SUBMIT_URL.rst
deleted file mode 100644
index 7d84da4..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_SUBMIT_URL.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_SUBMIT_URL
-----------------
-
-Specify the CTest ``SubmitURL`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_SVN_COMMAND.rst b/share/cmake-3.18/Help/variable/CTEST_SVN_COMMAND.rst
deleted file mode 100644
index af90143..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_SVN_COMMAND.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_SVN_COMMAND
------------------
-
-Specify the CTest ``SVNCommand`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_SVN_OPTIONS.rst b/share/cmake-3.18/Help/variable/CTEST_SVN_OPTIONS.rst
deleted file mode 100644
index 76551dc..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_SVN_OPTIONS.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_SVN_OPTIONS
------------------
-
-Specify the CTest ``SVNOptions`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_SVN_UPDATE_OPTIONS.rst b/share/cmake-3.18/Help/variable/CTEST_SVN_UPDATE_OPTIONS.rst
deleted file mode 100644
index 5f01a19..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_SVN_UPDATE_OPTIONS.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_SVN_UPDATE_OPTIONS
-------------------------
-
-Specify the CTest ``SVNUpdateOptions`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_TEST_LOAD.rst b/share/cmake-3.18/Help/variable/CTEST_TEST_LOAD.rst
deleted file mode 100644
index 80823fe..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_TEST_LOAD.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-CTEST_TEST_LOAD
----------------
-
-Specify the ``TestLoad`` setting in the :ref:`CTest Test Step`
-of a :manual:`ctest(1)` dashboard client script.  This sets the
-default value for the ``TEST_LOAD`` option of the :command:`ctest_test`
-command.
diff --git a/share/cmake-3.18/Help/variable/CTEST_TEST_TIMEOUT.rst b/share/cmake-3.18/Help/variable/CTEST_TEST_TIMEOUT.rst
deleted file mode 100644
index c031437..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_TEST_TIMEOUT.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_TEST_TIMEOUT
-------------------
-
-Specify the CTest ``TimeOut`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_TRIGGER_SITE.rst b/share/cmake-3.18/Help/variable/CTEST_TRIGGER_SITE.rst
deleted file mode 100644
index a50e405..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_TRIGGER_SITE.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-CTEST_TRIGGER_SITE
-------------------
-
-Legacy option.  Not used.
diff --git a/share/cmake-3.18/Help/variable/CTEST_UPDATE_COMMAND.rst b/share/cmake-3.18/Help/variable/CTEST_UPDATE_COMMAND.rst
deleted file mode 100644
index 90155d0..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_UPDATE_COMMAND.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_UPDATE_COMMAND
---------------------
-
-Specify the CTest ``UpdateCommand`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_UPDATE_OPTIONS.rst b/share/cmake-3.18/Help/variable/CTEST_UPDATE_OPTIONS.rst
deleted file mode 100644
index e43d61d..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_UPDATE_OPTIONS.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_UPDATE_OPTIONS
---------------------
-
-Specify the CTest ``UpdateOptions`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_UPDATE_VERSION_ONLY.rst b/share/cmake-3.18/Help/variable/CTEST_UPDATE_VERSION_ONLY.rst
deleted file mode 100644
index a862baa..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_UPDATE_VERSION_ONLY.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_UPDATE_VERSION_ONLY
--------------------------
-
-Specify the CTest :ref:`UpdateVersionOnly <UpdateVersionOnly>` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_UPDATE_VERSION_OVERRIDE.rst b/share/cmake-3.18/Help/variable/CTEST_UPDATE_VERSION_OVERRIDE.rst
deleted file mode 100644
index 39fbaba..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_UPDATE_VERSION_OVERRIDE.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_UPDATE_VERSION_OVERRIDE
------------------------------
-
-Specify the CTest :ref:`UpdateVersionOverride <UpdateVersionOverride>` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_USE_LAUNCHERS.rst b/share/cmake-3.18/Help/variable/CTEST_USE_LAUNCHERS.rst
deleted file mode 100644
index 9f48a2e..0000000
--- a/share/cmake-3.18/Help/variable/CTEST_USE_LAUNCHERS.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-CTEST_USE_LAUNCHERS
--------------------
-
-Specify the CTest ``UseLaunchers`` setting
-in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/EXECUTABLE_OUTPUT_PATH.rst b/share/cmake-3.18/Help/variable/EXECUTABLE_OUTPUT_PATH.rst
deleted file mode 100644
index 26d3e92..0000000
--- a/share/cmake-3.18/Help/variable/EXECUTABLE_OUTPUT_PATH.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-EXECUTABLE_OUTPUT_PATH
-----------------------
-
-Old executable location variable.
-
-The target property :prop_tgt:`RUNTIME_OUTPUT_DIRECTORY` supercedes this
-variable for a target if it is set.  Executable targets are otherwise placed in
-this directory.
diff --git a/share/cmake-3.18/Help/variable/GHS-MULTI.rst b/share/cmake-3.18/Help/variable/GHS-MULTI.rst
deleted file mode 100644
index fe3b17e..0000000
--- a/share/cmake-3.18/Help/variable/GHS-MULTI.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-GHS-MULTI
----------
-
-``True`` when using :generator:`Green Hills MULTI` generator.
diff --git a/share/cmake-3.18/Help/variable/IOS.rst b/share/cmake-3.18/Help/variable/IOS.rst
deleted file mode 100644
index e5cc3f6..0000000
--- a/share/cmake-3.18/Help/variable/IOS.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-IOS
----
-
-Set to ``1`` when the target system (:variable:`CMAKE_SYSTEM_NAME`) is ``iOS``.
diff --git a/share/cmake-3.18/Help/variable/MINGW.rst b/share/cmake-3.18/Help/variable/MINGW.rst
deleted file mode 100644
index 6d29be4..0000000
--- a/share/cmake-3.18/Help/variable/MINGW.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-MINGW
------
-
-``True`` when using MinGW
-
-Set to ``true`` when the compiler is some version of MinGW.
diff --git a/share/cmake-3.18/Help/variable/MSVC.rst b/share/cmake-3.18/Help/variable/MSVC.rst
deleted file mode 100644
index ca8775c..0000000
--- a/share/cmake-3.18/Help/variable/MSVC.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-MSVC
-----
-
-Set to ``true`` when the compiler is some version of Microsoft Visual
-C++ or another compiler simulating Visual C++.  Any compiler defining
-``_MSC_VER`` is considered simulating Visual C++.
-
-See also the :variable:`MSVC_VERSION` variable.
diff --git a/share/cmake-3.18/Help/variable/MSVC14.rst b/share/cmake-3.18/Help/variable/MSVC14.rst
deleted file mode 100644
index 79e0c10..0000000
--- a/share/cmake-3.18/Help/variable/MSVC14.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-MSVC14
-------
-
-Discouraged.  Use the :variable:`MSVC_VERSION` variable instead.
-
-``True`` when using the Microsoft Visual Studio ``v140`` or ``v141``
-toolset (``cl`` version 19) or another compiler that simulates it.
diff --git a/share/cmake-3.18/Help/variable/MSVC_IDE.rst b/share/cmake-3.18/Help/variable/MSVC_IDE.rst
deleted file mode 100644
index 027d1bc..0000000
--- a/share/cmake-3.18/Help/variable/MSVC_IDE.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-MSVC_IDE
---------
-
-``True`` when using the Microsoft Visual C++ IDE.
-
-Set to ``true`` when the target platform is the Microsoft Visual C++ IDE, as
-opposed to the command line compiler.
diff --git a/share/cmake-3.18/Help/variable/MSVC_TOOLSET_VERSION.rst b/share/cmake-3.18/Help/variable/MSVC_TOOLSET_VERSION.rst
deleted file mode 100644
index f4a33e2..0000000
--- a/share/cmake-3.18/Help/variable/MSVC_TOOLSET_VERSION.rst
+++ /dev/null
@@ -1,22 +0,0 @@
-MSVC_TOOLSET_VERSION
---------------------
-
-The toolset version of Microsoft Visual C/C++ being used if any.
-If MSVC-like is being used, this variable is set based on the version
-of the compiler as given by the :variable:`MSVC_VERSION` variable.
-
-Known toolset version numbers are::
-
-  80        = VS 2005 (8.0)
-  90        = VS 2008 (9.0)
-  100       = VS 2010 (10.0)
-  110       = VS 2012 (11.0)
-  120       = VS 2013 (12.0)
-  140       = VS 2015 (14.0)
-  141       = VS 2017 (15.0)
-  142       = VS 2019 (16.0)
-
-Compiler versions newer than those known to CMake will be reported
-as the latest known toolset version.
-
-See also the :variable:`MSVC_VERSION` variable.
diff --git a/share/cmake-3.18/Help/variable/MSVC_VERSION.rst b/share/cmake-3.18/Help/variable/MSVC_VERSION.rst
deleted file mode 100644
index 45df37f..0000000
--- a/share/cmake-3.18/Help/variable/MSVC_VERSION.rst
+++ /dev/null
@@ -1,24 +0,0 @@
-MSVC_VERSION
-------------
-
-The version of Microsoft Visual C/C++ being used if any.
-If a compiler simulating Visual C++ is being used, this variable is set
-to the toolset version simulated as given by the ``_MSC_VER``
-preprocessor definition.
-
-Known version numbers are::
-
-  1200      = VS  6.0
-  1300      = VS  7.0
-  1310      = VS  7.1
-  1400      = VS  8.0 (v80 toolset)
-  1500      = VS  9.0 (v90 toolset)
-  1600      = VS 10.0 (v100 toolset)
-  1700      = VS 11.0 (v110 toolset)
-  1800      = VS 12.0 (v120 toolset)
-  1900      = VS 14.0 (v140 toolset)
-  1910-1919 = VS 15.0 (v141 toolset)
-  1920-1929 = VS 16.0 (v142 toolset)
-
-See also the  :variable:`CMAKE_<LANG>_COMPILER_VERSION` and
-:variable:`MSVC_TOOLSET_VERSION` variable.
diff --git a/share/cmake-3.18/Help/variable/MSYS.rst b/share/cmake-3.18/Help/variable/MSYS.rst
deleted file mode 100644
index 25ddc7f..0000000
--- a/share/cmake-3.18/Help/variable/MSYS.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-MSYS
-----
-
-``True`` when using the :generator:`MSYS Makefiles` generator.
diff --git a/share/cmake-3.18/Help/variable/PROJECT-NAME_DESCRIPTION.rst b/share/cmake-3.18/Help/variable/PROJECT-NAME_DESCRIPTION.rst
deleted file mode 100644
index 2b88b1a..0000000
--- a/share/cmake-3.18/Help/variable/PROJECT-NAME_DESCRIPTION.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-<PROJECT-NAME>_DESCRIPTION
---------------------------
-
-Value given to the ``DESCRIPTION`` option of the most recent call to the
-:command:`project` command with project name ``<PROJECT-NAME>``, if any.
diff --git a/share/cmake-3.18/Help/variable/PROJECT-NAME_HOMEPAGE_URL.rst b/share/cmake-3.18/Help/variable/PROJECT-NAME_HOMEPAGE_URL.rst
deleted file mode 100644
index 22cc304..0000000
--- a/share/cmake-3.18/Help/variable/PROJECT-NAME_HOMEPAGE_URL.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-<PROJECT-NAME>_HOMEPAGE_URL
----------------------------
-
-Value given to the ``HOMEPAGE_URL`` option of the most recent call to the
-:command:`project` command with project name ``<PROJECT-NAME>``, if any.
diff --git a/share/cmake-3.18/Help/variable/PROJECT_DESCRIPTION.rst b/share/cmake-3.18/Help/variable/PROJECT_DESCRIPTION.rst
deleted file mode 100644
index 2833e11..0000000
--- a/share/cmake-3.18/Help/variable/PROJECT_DESCRIPTION.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-PROJECT_DESCRIPTION
--------------------
-
-Short project description given to the project command.
-
-This is the description given to the most recently called :command:`project`
-command in the current directory scope or above.  To obtain the description
-of the top level project, see the :variable:`CMAKE_PROJECT_DESCRIPTION`
-variable.
diff --git a/share/cmake-3.18/Help/variable/PROJECT_HOMEPAGE_URL.rst b/share/cmake-3.18/Help/variable/PROJECT_HOMEPAGE_URL.rst
deleted file mode 100644
index 754c9e8..0000000
--- a/share/cmake-3.18/Help/variable/PROJECT_HOMEPAGE_URL.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-PROJECT_HOMEPAGE_URL
---------------------
-
-The homepage URL of the project.
-
-This is the homepage URL given to the most recently called :command:`project`
-command in the current directory scope or above.  To obtain the homepage URL
-of the top level project, see the :variable:`CMAKE_PROJECT_HOMEPAGE_URL`
-variable.
diff --git a/share/cmake-3.18/Help/variable/PackageName_ROOT.rst b/share/cmake-3.18/Help/variable/PackageName_ROOT.rst
deleted file mode 100644
index 1c2fd34..0000000
--- a/share/cmake-3.18/Help/variable/PackageName_ROOT.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-<PackageName>_ROOT
-------------------
-
-Calls to :command:`find_package(<PackageName>)` will search in prefixes
-specified by the ``<PackageName>_ROOT`` CMake variable, where
-``<PackageName>`` is the name given to the :command:`find_package` call
-and ``_ROOT`` is literal.  For example, ``find_package(Foo)`` will search
-prefixes specified in the ``Foo_ROOT`` CMake variable (if set).
-See policy :policy:`CMP0074`.
-
-This variable may hold a single prefix or a
-:ref:`semicolon-separated list <CMake Language Lists>` of multiple prefixes.
-
-See also the :envvar:`<PackageName>_ROOT` environment variable.
diff --git a/share/cmake-3.18/Help/variable/WINCE.rst b/share/cmake-3.18/Help/variable/WINCE.rst
deleted file mode 100644
index 54ff7de..0000000
--- a/share/cmake-3.18/Help/variable/WINCE.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-WINCE
------
-
-True when the :variable:`CMAKE_SYSTEM_NAME` variable is set
-to ``WindowsCE``.
diff --git a/share/cmake-3.18/Help/variable/WINDOWS_PHONE.rst b/share/cmake-3.18/Help/variable/WINDOWS_PHONE.rst
deleted file mode 100644
index 61d91b0..0000000
--- a/share/cmake-3.18/Help/variable/WINDOWS_PHONE.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-WINDOWS_PHONE
--------------
-
-True when the :variable:`CMAKE_SYSTEM_NAME` variable is set
-to ``WindowsPhone``.
diff --git a/share/cmake-3.18/Help/variable/WINDOWS_STORE.rst b/share/cmake-3.18/Help/variable/WINDOWS_STORE.rst
deleted file mode 100644
index dae3b53..0000000
--- a/share/cmake-3.18/Help/variable/WINDOWS_STORE.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-WINDOWS_STORE
--------------
-
-True when the :variable:`CMAKE_SYSTEM_NAME` variable is set
-to ``WindowsStore``.
diff --git a/share/cmake-3.18/Help/variable/XCODE.rst b/share/cmake-3.18/Help/variable/XCODE.rst
deleted file mode 100644
index 99f20fb..0000000
--- a/share/cmake-3.18/Help/variable/XCODE.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-XCODE
------
-
-``True`` when using :generator:`Xcode` generator.
diff --git a/share/cmake-3.18/Modules/AddFileDependencies.cmake b/share/cmake-3.18/Modules/AddFileDependencies.cmake
deleted file mode 100644
index 598a52f..0000000
--- a/share/cmake-3.18/Modules/AddFileDependencies.cmake
+++ /dev/null
@@ -1,28 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-AddFileDependencies
--------------------
-
-Add dependencies to a source file.
-
-.. code-block:: cmake
-
-  ADD_FILE_DEPENDENCIES(<source> <files>)
-
-Adds the given ``<files>`` to the dependencies of file ``<source>``.
-#]=======================================================================]
-
-macro(ADD_FILE_DEPENDENCIES _file)
-
-  get_source_file_property(_deps ${_file} OBJECT_DEPENDS)
-  if (_deps)
-    set(_deps ${_deps} ${ARGN})
-  else ()
-    set(_deps ${ARGN})
-  endif ()
-
-  set_source_files_properties(${_file} PROPERTIES OBJECT_DEPENDS "${_deps}")
-
-endmacro()
diff --git a/share/cmake-3.18/Modules/AndroidTestUtilities.cmake b/share/cmake-3.18/Modules/AndroidTestUtilities.cmake
deleted file mode 100644
index 95e2ef7..0000000
--- a/share/cmake-3.18/Modules/AndroidTestUtilities.cmake
+++ /dev/null
@@ -1,162 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[======================================================================[.rst:
-AndroidTestUtilities
-------------------------
-
-Create a test that automatically loads specified data onto an Android device.
-
-Introduction
-^^^^^^^^^^^^
-
-Use this module to push data needed for testing an Android device behavior
-onto a connected Android device. The module will accept files and libraries as
-well as separate destinations for each. It will create a test that loads the
-files into a device object store and link to them from the specified
-destination. The files are only uploaded if they are not already in the object
-store.
-
-For example:
-
-.. code-block:: cmake
-
-  include(AndroidTestUtilities)
-  android_add_test_data(
-    example_setup_test
-    FILES <files>...
-    LIBS <libs>...
-    DEVICE_TEST_DIR "/data/local/tests/example"
-    DEVICE_OBJECT_STORE "/sdcard/.ExternalData/SHA"
-    )
-
-
-At build time a test named "example_setup_test" will be created.  Run this test
-on the command line with :manual:`ctest(1)` to load the data onto the Android
-device.
-
-Module Functions
-^^^^^^^^^^^^^^^^
-
-.. command:: android_add_test_data
-
-  .. code-block:: cmake
-
-    android_add_test_data(<test-name>
-      [FILES <files>...] [FILES_DEST <device-dir>]
-      [LIBS <libs>...]   [LIBS_DEST <device-dir>]
-      [DEVICE_OBJECT_STORE <device-dir>]
-      [DEVICE_TEST_DIR <device-dir>]
-      [NO_LINK_REGEX <strings>...]
-      )
-
-  The ``android_add_test_data`` function is used to copy files and libraries
-  needed to run project-specific tests. On the host operating system, this is
-  done at build time. For on-device testing, the files are loaded onto the
-  device by the manufactured test at run time.
-
-  This function accepts the following named parameters:
-
-  ``FILES <files>...``
-    zero or more files needed for testing
-  ``LIBS <libs>...``
-    zero or more libraries needed for testing
-  ``FILES_DEST <device-dir>``
-    absolute path where the data files are expected to be
-  ``LIBS_DEST <device-dir>``
-    absolute path where the libraries are expected to be
-  ``DEVICE_OBJECT_STORE <device-dir>``
-    absolute path to the location where the data is stored on-device
-  ``DEVICE_TEST_DIR <device-dir>``
-    absolute path to the root directory of the on-device test location
-  ``NO_LINK_REGEX <strings>...``
-    list of regex strings matching the names of files that should be
-    copied from the object store to the testing directory
-#]======================================================================]
-
-include(${CMAKE_CURRENT_LIST_DIR}/ExternalData.cmake)
-
-# The parameters to this function should be set to the list of directories,
-# files, and libraries that need to be installed prior to testing.
-function(android_add_test_data test_name)
-  # As the names suggest, oneValueArgs lists the arguments that specify a
-  # single value, while multiValueArgs can contain one or more values.
-  set(keywordArgs)
-  set(oneValueArgs FILES_DEST LIBS_DEST DEVICE_OBJECT_STORE DEVICE_TEST_DIR)
-  set(multiValueArgs FILES LIBS NO_LINK_REGEX)
-
-  # For example, if you called this function with FILES </path/to/file>
-  # then this path would be stored in the variable AST_FILES.
-  # The AST prefix stands for the name of this function (android_add_test_data).
-  cmake_parse_arguments(AST "${keywordArgs}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
-  if(NOT AST_DEVICE_TEST_DIR)
-    message(FATAL_ERROR "-- You must specify the location of the on device test directory.")
-  endif()
-  if(NOT AST_DEVICE_OBJECT_STORE)
-    message(FATAL_ERROR "-- You must specify the location of the on device object store.")
-  endif()
-  if(${AST_DEVICE_TEST_DIR} STREQUAL "/")
-    message(FATAL_ERROR "-- The device test directory cannot be '/'")
-  endif()
-
-  # Copy all test data files into the binary directory, where tests are run.
-  # ExternalData will handle fetching DATA{...} references.
-  string(REPLACE "|" ";" hash_algs "${_ExternalData_REGEX_EXT}")
-  # Convert ExternalData placeholder file names to DATA{} syntax.
-  foreach(alg ${hash_algs})
-    string(REGEX REPLACE "([^ ;]+)\\.${alg}" "DATA{\\1}" AST_FILES "${AST_FILES}")
-  endforeach()
-
-  set(DATA_TARGET_NAME "${test_name}")
-  string(FIND "${AST_FILES}" "DATA{" data_files_found)
-  if(${data_files_found} GREATER "-1")
-    # Use ExternalData if any DATA{} files were found.
-    ExternalData_Expand_Arguments(
-      ${DATA_TARGET_NAME}
-      extern_data_output
-      ${AST_FILES})
-    ExternalData_Add_Target(${DATA_TARGET_NAME})
-  else()
-    add_custom_target(${DATA_TARGET_NAME} ALL)
-    set(extern_data_output ${AST_FILES})
-  endif()
-
-  # For regular files on Linux, just copy them directly.
-  foreach(path ${AST_FILES})
-    foreach(output ${extern_data_output})
-      if(${output} STREQUAL ${path})
-        # Check if a destination was specified.  If not, we copy by default
-        # into this project's binary directory, preserving its relative path.
-        if(AST_${VAR}_DEST)
-          set(DEST ${CMAKE_BINARY_DIR}/${parent_dir}/${AST_${VAR}_DEST})
-        else()
-          get_filename_component(parent_dir ${path} DIRECTORY)
-          set(DEST "${CMAKE_BINARY_DIR}/${parent_dir}")
-        endif()
-        get_filename_component(extern_data_source ${output} REALPATH)
-        get_filename_component(extern_data_basename ${output} NAME)
-        add_custom_command(
-          TARGET ${DATA_TARGET_NAME} POST_BUILD
-          DEPENDS ${extern_data_source}
-          COMMAND ${CMAKE_COMMAND} -E copy_if_different ${extern_data_source} ${DEST}/${extern_data_basename}
-        )
-      endif()
-    endforeach()
-  endforeach()
-
-  if(ANDROID)
-    string(REGEX REPLACE "DATA{([^ ;]+)}" "\\1"  processed_FILES "${AST_FILES}")
-    add_test(
-      NAME ${test_name}
-      COMMAND ${CMAKE_COMMAND}
-      "-Darg_files_dest=${AST_FILES_DEST}"
-      "-Darg_libs_dest=${AST_LIBS_DEST}"
-      "-Darg_dev_test_dir=${AST_DEVICE_TEST_DIR}"
-      "-Darg_dev_obj_store=${AST_DEVICE_OBJECT_STORE}"
-      "-Darg_no_link_regex=${AST_NO_LINK_REGEX}"
-      "-Darg_files=${processed_FILES}"
-      "-Darg_libs=${AST_LIBS}"
-      "-Darg_src_dir=${CMAKE_CURRENT_SOURCE_DIR}"
-      -P ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/AndroidTestUtilities/PushToAndroidDevice.cmake)
-  endif()
-endfunction()
diff --git a/share/cmake-3.18/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in b/share/cmake-3.18/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in
deleted file mode 100644
index a6e5fda..0000000
--- a/share/cmake-3.18/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in
+++ /dev/null
@@ -1,37 +0,0 @@
-# This is a basic version file for the Config-mode of find_package().
-# It is used by write_basic_package_version_file() as input file for configure_file()
-# to create a version-file which can be installed along a config.cmake file.
-#
-# The created file sets PACKAGE_VERSION_EXACT if the current version string and
-# the requested version string are exactly the same and it sets
-# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version.
-# The variable CVF_VERSION must be set before calling configure_file().
-
-set(PACKAGE_VERSION "@CVF_VERSION@")
-
-if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
-  set(PACKAGE_VERSION_COMPATIBLE FALSE)
-else()
-  set(PACKAGE_VERSION_COMPATIBLE TRUE)
-  if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
-    set(PACKAGE_VERSION_EXACT TRUE)
-  endif()
-endif()
-
-
-# if the installed project requested no architecture check, don't perform the check
-if("@CVF_ARCH_INDEPENDENT@")
-  return()
-endif()
-
-# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
-if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "@CMAKE_SIZEOF_VOID_P@" STREQUAL "")
-  return()
-endif()
-
-# check that the installed version has the same 32/64bit-ness as the one which is currently searching:
-if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "@CMAKE_SIZEOF_VOID_P@")
-  math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8")
-  set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
-  set(PACKAGE_VERSION_UNSUITABLE TRUE)
-endif()
diff --git a/share/cmake-3.18/Modules/BasicConfigVersion-ExactVersion.cmake.in b/share/cmake-3.18/Modules/BasicConfigVersion-ExactVersion.cmake.in
deleted file mode 100644
index 43fc4d0..0000000
--- a/share/cmake-3.18/Modules/BasicConfigVersion-ExactVersion.cmake.in
+++ /dev/null
@@ -1,52 +0,0 @@
-# This is a basic version file for the Config-mode of find_package().
-# It is used by write_basic_package_version_file() as input file for configure_file()
-# to create a version-file which can be installed along a config.cmake file.
-#
-# The created file sets PACKAGE_VERSION_EXACT if the current version string and
-# the requested version string are exactly the same and it sets
-# PACKAGE_VERSION_COMPATIBLE if the current version is equal to the requested version.
-# The tweak version component is ignored.
-# The variable CVF_VERSION must be set before calling configure_file().
-
-
-set(PACKAGE_VERSION "@CVF_VERSION@")
-
-if("@CVF_VERSION@" MATCHES "^([0-9]+\\.[0-9]+\\.[0-9]+)\\.") # strip the tweak version
-  set(CVF_VERSION_NO_TWEAK "${CMAKE_MATCH_1}")
-else()
-  set(CVF_VERSION_NO_TWEAK "@CVF_VERSION@")
-endif()
-
-if(PACKAGE_FIND_VERSION MATCHES "^([0-9]+\\.[0-9]+\\.[0-9]+)\\.") # strip the tweak version
-  set(REQUESTED_VERSION_NO_TWEAK "${CMAKE_MATCH_1}")
-else()
-  set(REQUESTED_VERSION_NO_TWEAK "${PACKAGE_FIND_VERSION}")
-endif()
-
-if(REQUESTED_VERSION_NO_TWEAK STREQUAL CVF_VERSION_NO_TWEAK)
-  set(PACKAGE_VERSION_COMPATIBLE TRUE)
-else()
-  set(PACKAGE_VERSION_COMPATIBLE FALSE)
-endif()
-
-if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
-  set(PACKAGE_VERSION_EXACT TRUE)
-endif()
-
-
-# if the installed project requested no architecture check, don't perform the check
-if("@CVF_ARCH_INDEPENDENT@")
-  return()
-endif()
-
-# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
-if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "@CMAKE_SIZEOF_VOID_P@" STREQUAL "")
-  return()
-endif()
-
-# check that the installed version has the same 32/64bit-ness as the one which is currently searching:
-if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "@CMAKE_SIZEOF_VOID_P@")
-  math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8")
-  set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
-  set(PACKAGE_VERSION_UNSUITABLE TRUE)
-endif()
diff --git a/share/cmake-3.18/Modules/BasicConfigVersion-SameMajorVersion.cmake.in b/share/cmake-3.18/Modules/BasicConfigVersion-SameMajorVersion.cmake.in
deleted file mode 100644
index 8c3b6a2..0000000
--- a/share/cmake-3.18/Modules/BasicConfigVersion-SameMajorVersion.cmake.in
+++ /dev/null
@@ -1,51 +0,0 @@
-# This is a basic version file for the Config-mode of find_package().
-# It is used by write_basic_package_version_file() as input file for configure_file()
-# to create a version-file which can be installed along a config.cmake file.
-#
-# The created file sets PACKAGE_VERSION_EXACT if the current version string and
-# the requested version string are exactly the same and it sets
-# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version,
-# but only if the requested major version is the same as the current one.
-# The variable CVF_VERSION must be set before calling configure_file().
-
-
-set(PACKAGE_VERSION "@CVF_VERSION@")
-
-if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
-  set(PACKAGE_VERSION_COMPATIBLE FALSE)
-else()
-
-  if("@CVF_VERSION@" MATCHES "^([0-9]+)\\.")
-    set(CVF_VERSION_MAJOR "${CMAKE_MATCH_1}")
-  else()
-    set(CVF_VERSION_MAJOR "@CVF_VERSION@")
-  endif()
-
-  if(PACKAGE_FIND_VERSION_MAJOR STREQUAL CVF_VERSION_MAJOR)
-    set(PACKAGE_VERSION_COMPATIBLE TRUE)
-  else()
-    set(PACKAGE_VERSION_COMPATIBLE FALSE)
-  endif()
-
-  if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
-      set(PACKAGE_VERSION_EXACT TRUE)
-  endif()
-endif()
-
-
-# if the installed project requested no architecture check, don't perform the check
-if("@CVF_ARCH_INDEPENDENT@")
-  return()
-endif()
-
-# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
-if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "@CMAKE_SIZEOF_VOID_P@" STREQUAL "")
-  return()
-endif()
-
-# check that the installed version has the same 32/64bit-ness as the one which is currently searching:
-if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "@CMAKE_SIZEOF_VOID_P@")
-  math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8")
-  set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
-  set(PACKAGE_VERSION_UNSUITABLE TRUE)
-endif()
diff --git a/share/cmake-3.18/Modules/BasicConfigVersion-SameMinorVersion.cmake.in b/share/cmake-3.18/Modules/BasicConfigVersion-SameMinorVersion.cmake.in
deleted file mode 100644
index e2030d2..0000000
--- a/share/cmake-3.18/Modules/BasicConfigVersion-SameMinorVersion.cmake.in
+++ /dev/null
@@ -1,55 +0,0 @@
-# This is a basic version file for the Config-mode of find_package().
-# It is used by write_basic_package_version_file() as input file for configure_file()
-# to create a version-file which can be installed along a config.cmake file.
-#
-# The created file sets PACKAGE_VERSION_EXACT if the current version string and
-# the requested version string are exactly the same and it sets
-# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version,
-# but only if the requested major and minor versions are the same as the current
-# one.
-# The variable CVF_VERSION must be set before calling configure_file().
-
-
-set(PACKAGE_VERSION "@CVF_VERSION@")
-
-if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
-  set(PACKAGE_VERSION_COMPATIBLE FALSE)
-else()
-
-  if("@CVF_VERSION@" MATCHES "^([0-9]+)\\.([0-9]+)")
-    set(CVF_VERSION_MAJOR "${CMAKE_MATCH_1}")
-    set(CVF_VERSION_MINOR "${CMAKE_MATCH_2}")
-  else()
-    set(CVF_VERSION_MAJOR "@CVF_VERSION@")
-    set(CVF_VERSION_MINOR "")
-  endif()
-
-  if((PACKAGE_FIND_VERSION_MAJOR STREQUAL CVF_VERSION_MAJOR) AND
-     (PACKAGE_FIND_VERSION_MINOR STREQUAL CVF_VERSION_MINOR))
-    set(PACKAGE_VERSION_COMPATIBLE TRUE)
-  else()
-    set(PACKAGE_VERSION_COMPATIBLE FALSE)
-  endif()
-
-  if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
-      set(PACKAGE_VERSION_EXACT TRUE)
-  endif()
-endif()
-
-
-# if the installed project requested no architecture check, don't perform the check
-if("@CVF_ARCH_INDEPENDENT@")
-  return()
-endif()
-
-# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
-if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "@CMAKE_SIZEOF_VOID_P@" STREQUAL "")
-  return()
-endif()
-
-# check that the installed version has the same 32/64bit-ness as the one which is currently searching:
-if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "@CMAKE_SIZEOF_VOID_P@")
-  math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8")
-  set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
-  set(PACKAGE_VERSION_UNSUITABLE TRUE)
-endif()
diff --git a/share/cmake-3.18/Modules/BundleUtilities.cmake b/share/cmake-3.18/Modules/BundleUtilities.cmake
deleted file mode 100644
index 2f3b9e1..0000000
--- a/share/cmake-3.18/Modules/BundleUtilities.cmake
+++ /dev/null
@@ -1,1123 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-BundleUtilities
----------------
-
-Functions to help assemble a standalone bundle application.
-
-A collection of CMake utility functions useful for dealing with ``.app``
-bundles on the Mac and bundle-like directories on any OS.
-
-The following functions are provided by this module:
-
-.. code-block:: cmake
-
-   fixup_bundle
-   copy_and_fixup_bundle
-   verify_app
-   get_bundle_main_executable
-   get_dotapp_dir
-   get_bundle_and_executable
-   get_bundle_all_executables
-   get_item_key
-   get_item_rpaths
-   clear_bundle_keys
-   set_bundle_key_values
-   get_bundle_keys
-   copy_resolved_item_into_bundle
-   copy_resolved_framework_into_bundle
-   fixup_bundle_item
-   verify_bundle_prerequisites
-   verify_bundle_symlinks
-
-Requires CMake 2.6 or greater because it uses function, break and
-``PARENT_SCOPE``.  Also depends on ``GetPrerequisites.cmake``.
-
-DO NOT USE THESE FUNCTIONS AT CONFIGURE TIME (from ``CMakeLists.txt``)!
-Instead, invoke them from an :command:`install(CODE)` or
-:command:`install(SCRIPT)` rule.
-
-.. code-block:: cmake
-
-  fixup_bundle(<app> <libs> <dirs>)
-
-Fix up ``<app>`` bundle in-place and make it standalone, such that it can be
-drag-n-drop copied to another machine and run on that machine as long
-as all of the system libraries are compatible.
-
-If you pass plugins to ``fixup_bundle`` as the libs parameter, you should
-install them or copy them into the bundle before calling ``fixup_bundle``.
-The ``<libs>`` parameter is a list of libraries that must be fixed up, but
-that cannot be determined by ``otool`` output analysis  (i.e. ``plugins``).
-
-Gather all the keys for all the executables and libraries in a bundle,
-and then, for each key, copy each prerequisite into the bundle.  Then
-fix each one up according to its own list of prerequisites.
-
-Then clear all the keys and call ``verify_app`` on the final bundle to
-ensure that it is truly standalone.
-
-As an optional parameter (``IGNORE_ITEM``) a list of file names can be passed,
-which are then ignored
-(e.g. ``IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe"``).
-
-.. code-block:: cmake
-
-  copy_and_fixup_bundle(<src> <dst> <libs> <dirs>)
-
-Makes a copy of the bundle ``<src>`` at location ``<dst>`` and then fixes up
-the new copied bundle in-place at ``<dst>``.
-
-.. code-block:: cmake
-
-  verify_app(<app>)
-
-Verifies that an application ``<app>`` appears valid based on running
-analysis tools on it.  Calls :command:`message(FATAL_ERROR)` if the application
-is not verified.
-
-As an optional parameter (``IGNORE_ITEM``) a list of file names can be passed,
-which are then ignored
-(e.g. ``IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe"``)
-
-.. code-block:: cmake
-
-  get_bundle_main_executable(<bundle> <result_var>)
-
-The result will be the full path name of the bundle's main executable
-file or an ``error:`` prefixed string if it could not be determined.
-
-.. code-block:: cmake
-
-  get_dotapp_dir(<exe> <dotapp_dir_var>)
-
-Returns the nearest parent dir whose name ends with ``.app`` given the
-full path to an executable.  If there is no such parent dir, then
-simply return the dir containing the executable.
-
-The returned directory may or may not exist.
-
-.. code-block:: cmake
-
-  get_bundle_and_executable(<app> <bundle_var> <executable_var> <valid_var>)
-
-Takes either a ``.app`` directory name or the name of an executable
-nested inside a ``.app`` directory and returns the path to the ``.app``
-directory in ``<bundle_var>`` and the path to its main executable in
-``<executable_var>``.
-
-.. code-block:: cmake
-
-  get_bundle_all_executables(<bundle> <exes_var>)
-
-Scans ``<bundle>`` bundle recursively for all ``<exes_var>`` executable
-files and accumulates them into a variable.
-
-.. code-block:: cmake
-
-  get_item_key(<item> <key_var>)
-
-Given ``<item>`` file name, generate ``<key_var>`` key that should be unique
-considering the set of libraries that need copying or fixing up to
-make a bundle standalone.  This is essentially the file name including
-extension with ``.`` replaced by ``_``
-
-This key is used as a prefix for CMake variables so that we can
-associate a set of variables with a given item based on its key.
-
-.. code-block:: cmake
-
-  clear_bundle_keys(<keys_var>)
-
-Loop over the ``<keys_var>`` list of keys, clearing all the variables
-associated with each key.  After the loop, clear the list of keys itself.
-
-Caller of ``get_bundle_keys`` should call ``clear_bundle_keys`` when done with
-list of keys.
-
-.. code-block:: cmake
-
-  set_bundle_key_values(<keys_var> <context> <item> <exepath> <dirs>
-                        <copyflag> [<rpaths>])
-
-Add ``<keys_var>`` key to the list (if necessary) for the given item.
-If added, also set all the variables associated with that key.
-
-.. code-block:: cmake
-
-  get_bundle_keys(<app> <libs> <dirs> <keys_var>)
-
-Loop over all the executable and library files within ``<app>`` bundle (and
-given as extra ``<libs>``) and accumulate a list of keys representing
-them.  Set values associated with each key such that we can loop over
-all of them and copy prerequisite libs into the bundle and then do
-appropriate ``install_name_tool`` fixups.
-
-As an optional parameter (``IGNORE_ITEM``) a list of file names can be passed,
-which are then ignored
-(e.g. ``IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe"``)
-
-.. code-block:: cmake
-
-  copy_resolved_item_into_bundle(<resolved_item> <resolved_embedded_item>)
-
-Copy a resolved item into the bundle if necessary.
-Copy is not necessary, if the ``<resolved_item>`` is "the same as" the
-``<resolved_embedded_item>``.
-
-.. code-block:: cmake
-
-  copy_resolved_framework_into_bundle(<resolved_item> <resolved_embedded_item>)
-
-Copy a resolved framework into the bundle if necessary.
-Copy is not necessary, if the ``<resolved_item>`` is "the same as" the
-``<resolved_embedded_item>``.
-
-By default, ``BU_COPY_FULL_FRAMEWORK_CONTENTS`` is not set.  If you want
-full frameworks embedded in your bundles, set
-``BU_COPY_FULL_FRAMEWORK_CONTENTS`` to ``ON`` before calling fixup_bundle.  By
-default, ``COPY_RESOLVED_FRAMEWORK_INTO_BUNDLE`` copies the framework
-dylib itself plus the framework ``Resources`` directory.
-
-.. code-block:: cmake
-
-  fixup_bundle_item(<resolved_embedded_item> <exepath> <dirs>)
-
-Get the direct/non-system prerequisites of the ``<resolved_embedded_item>``.
-For each prerequisite, change the way it is referenced to the value of
-the ``_EMBEDDED_ITEM`` keyed variable for that prerequisite.  (Most likely
-changing to an ``@executable_path`` style reference.)
-
-This function requires that the ``<resolved_embedded_item>`` be ``inside``
-the bundle already.  In other words, if you pass plugins to ``fixup_bundle``
-as the libs parameter, you should install them or copy them into the
-bundle before calling ``fixup_bundle``.  The ``libs`` parameter is a list of
-libraries that must be fixed up, but that cannot be determined by
-otool output analysis.  (i.e., ``plugins``)
-
-Also, change the id of the item being fixed up to its own
-``_EMBEDDED_ITEM`` value.
-
-Accumulate changes in a local variable and make *one* call to
-``install_name_tool`` at the end of the function with all the changes at
-once.
-
-If the ``BU_CHMOD_BUNDLE_ITEMS`` variable is set then bundle items will be
-marked writable before ``install_name_tool`` tries to change them.
-
-.. code-block:: cmake
-
-  verify_bundle_prerequisites(<bundle> <result_var> <info_var>)
-
-Verifies that the sum of all prerequisites of all files inside the
-bundle are contained within the bundle or are ``system`` libraries,
-presumed to exist everywhere.
-
-As an optional parameter (``IGNORE_ITEM``) a list of file names can be passed,
-which are then ignored
-(e.g. ``IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe"``)
-
-.. code-block:: cmake
-
-  verify_bundle_symlinks(<bundle> <result_var> <info_var>)
-
-Verifies that any symlinks found in the ``<bundle>`` bundle point to other files
-that are already also in the bundle...  Anything that points to an
-external file causes this function to fail the verification.
-#]=======================================================================]
-
-function(_warn_cmp0080)
-  cmake_policy(GET_WARNING CMP0080 _cmp0080_warning)
-  message(AUTHOR_WARNING "${_cmp0080_warning}\n")
-endfunction()
-
-# Do not include this module at configure time!
-if(DEFINED CMAKE_GENERATOR)
-  cmake_policy(GET CMP0080 _BundleUtilities_CMP0080)
-  if(_BundleUtilities_CMP0080 STREQUAL "NEW")
-    message(FATAL_ERROR "BundleUtilities cannot be included at configure time!")
-  elseif(NOT _BundleUtilities_CMP0080 STREQUAL "OLD" AND NOT _CMP0080_SUPPRESS_WARNING)
-    _warn_cmp0080()
-  endif()
-endif()
-
-cmake_policy(PUSH)
-cmake_policy(SET CMP0057 NEW) # if IN_LIST
-
-# The functions defined in this file depend on the get_prerequisites function
-# (and possibly others) found in:
-#
-include("${CMAKE_CURRENT_LIST_DIR}/GetPrerequisites.cmake")
-
-
-function(get_bundle_main_executable bundle result_var)
-  set(result "error: '${bundle}/Contents/Info.plist' file does not exist")
-
-  if(EXISTS "${bundle}/Contents/Info.plist")
-    set(result "error: no CFBundleExecutable in '${bundle}/Contents/Info.plist' file")
-    set(line_is_main_executable 0)
-    set(bundle_executable "")
-
-    # Read Info.plist as a list of lines:
-    #
-    set(eol_char "E")
-    file(READ "${bundle}/Contents/Info.plist" info_plist)
-    string(REPLACE ";" "\\;" info_plist "${info_plist}")
-    string(REPLACE "\n" "${eol_char};" info_plist "${info_plist}")
-    string(REPLACE "\r" "${eol_char};" info_plist "${info_plist}")
-
-    # Scan the lines for "<key>CFBundleExecutable</key>" - the line after that
-    # is the name of the main executable.
-    #
-    foreach(line ${info_plist})
-      if(line_is_main_executable)
-        string(REGEX REPLACE "^.*<string>(.*)</string>.*$" "\\1" bundle_executable "${line}")
-        break()
-      endif()
-
-      if(line MATCHES "<key>CFBundleExecutable</key>")
-        set(line_is_main_executable 1)
-      endif()
-    endforeach()
-
-    if(NOT bundle_executable STREQUAL "")
-      if(EXISTS "${bundle}/Contents/MacOS/${bundle_executable}")
-        set(result "${bundle}/Contents/MacOS/${bundle_executable}")
-      else()
-
-        # Ultimate goal:
-        # If not in "Contents/MacOS" then scan the bundle for matching files. If
-        # there is only one executable file that matches, then use it, otherwise
-        # it's an error...
-        #
-        #file(GLOB_RECURSE file_list "${bundle}/${bundle_executable}")
-
-        # But for now, pragmatically, it's an error. Expect the main executable
-        # for the bundle to be in Contents/MacOS, it's an error if it's not:
-        #
-        set(result "error: '${bundle}/Contents/MacOS/${bundle_executable}' does not exist")
-      endif()
-    endif()
-  else()
-    #
-    # More inclusive technique... (This one would work on Windows and Linux
-    # too, if a developer followed the typical Mac bundle naming convention...)
-    #
-    # If there is no Info.plist file, try to find an executable with the same
-    # base name as the .app directory:
-    #
-  endif()
-
-  set(${result_var} "${result}" PARENT_SCOPE)
-endfunction()
-
-
-function(get_dotapp_dir exe dotapp_dir_var)
-  set(s "${exe}")
-
-  if(s MATCHES "/.*\\.app/")
-    # If there is a ".app" parent directory,
-    # ascend until we hit it:
-    #   (typical of a Mac bundle executable)
-    #
-    set(done 0)
-    while(NOT ${done})
-      get_filename_component(snamewe "${s}" NAME_WE)
-      get_filename_component(sname "${s}" NAME)
-      get_filename_component(sdir "${s}" PATH)
-      set(s "${sdir}")
-      if(sname MATCHES "\\.app$")
-        set(done 1)
-        set(dotapp_dir "${sdir}/${sname}")
-      endif()
-    endwhile()
-  else()
-    # Otherwise use a directory containing the exe
-    #   (typical of a non-bundle executable on Mac, Windows or Linux)
-    #
-    is_file_executable("${s}" is_executable)
-    if(is_executable)
-      get_filename_component(sdir "${s}" PATH)
-      set(dotapp_dir "${sdir}")
-    else()
-      set(dotapp_dir "${s}")
-    endif()
-  endif()
-
-
-  set(${dotapp_dir_var} "${dotapp_dir}" PARENT_SCOPE)
-endfunction()
-
-
-function(get_bundle_and_executable app bundle_var executable_var valid_var)
-  set(valid 0)
-
-  if(EXISTS "${app}")
-    # Is it a directory ending in .app?
-    if(IS_DIRECTORY "${app}")
-      if(app MATCHES "\\.app$")
-        get_bundle_main_executable("${app}" executable)
-        if(EXISTS "${app}" AND EXISTS "${executable}")
-          set(${bundle_var} "${app}" PARENT_SCOPE)
-          set(${executable_var} "${executable}" PARENT_SCOPE)
-          set(valid 1)
-          #message(STATUS "info: handled .app directory case...")
-        else()
-          message(STATUS "warning: *NOT* handled - .app directory case...")
-        endif()
-      else()
-        message(STATUS "warning: *NOT* handled - directory but not .app case...")
-      endif()
-    else()
-      # Is it an executable file?
-      is_file_executable("${app}" is_executable)
-      if(is_executable)
-        get_dotapp_dir("${app}" dotapp_dir)
-        if(EXISTS "${dotapp_dir}")
-          set(${bundle_var} "${dotapp_dir}" PARENT_SCOPE)
-          set(${executable_var} "${app}" PARENT_SCOPE)
-          set(valid 1)
-          #message(STATUS "info: handled executable file in .app dir case...")
-        else()
-          get_filename_component(app_dir "${app}" PATH)
-          set(${bundle_var} "${app_dir}" PARENT_SCOPE)
-          set(${executable_var} "${app}" PARENT_SCOPE)
-          set(valid 1)
-          #message(STATUS "info: handled executable file in any dir case...")
-        endif()
-      else()
-        message(STATUS "warning: *NOT* handled - not .app dir, not executable file...")
-      endif()
-    endif()
-  else()
-    message(STATUS "warning: *NOT* handled - directory/file does not exist...")
-  endif()
-
-  if(NOT valid)
-    set(${bundle_var} "error: not a bundle" PARENT_SCOPE)
-    set(${executable_var} "error: not a bundle" PARENT_SCOPE)
-  endif()
-
-  set(${valid_var} ${valid} PARENT_SCOPE)
-endfunction()
-
-
-function(get_bundle_all_executables bundle exes_var)
-  set(exes "")
-
-  if(UNIX)
-    find_program(find_cmd "find")
-    mark_as_advanced(find_cmd)
-  endif()
-
-  # find command is much quicker than checking every file one by one on Unix
-  # which can take long time for large bundles, and since anyway we expect
-  # executable to have execute flag set we can narrow the list much quicker.
-  if(find_cmd)
-    execute_process(COMMAND "${find_cmd}" "${bundle}"
-      -type f \( -perm -0100 -o -perm -0010 -o -perm -0001 \)
-      OUTPUT_VARIABLE file_list
-      OUTPUT_STRIP_TRAILING_WHITESPACE
-      )
-    string(REPLACE "\n" ";" file_list "${file_list}")
-  else()
-    file(GLOB_RECURSE file_list "${bundle}/*")
-  endif()
-
-  foreach(f ${file_list})
-    is_file_executable("${f}" is_executable)
-    if(is_executable)
-      set(exes ${exes} "${f}")
-    endif()
-  endforeach()
-
-  set(${exes_var} "${exes}" PARENT_SCOPE)
-endfunction()
-
-
-function(get_item_rpaths item rpaths_var)
-  if(APPLE)
-    find_program(otool_cmd "otool")
-    mark_as_advanced(otool_cmd)
-  endif()
-
-  if(otool_cmd)
-    execute_process(
-      COMMAND "${otool_cmd}" -l "${item}"
-      OUTPUT_VARIABLE load_cmds_ov
-      RESULT_VARIABLE otool_rv
-      ERROR_VARIABLE otool_ev
-      )
-    if(NOT otool_rv STREQUAL "0")
-      message(FATAL_ERROR "otool -l failed: ${otool_rv}\n${otool_ev}")
-    endif()
-    string(REGEX REPLACE "[^\n]+cmd LC_RPATH\n[^\n]+\n[^\n]+path ([^\n]+) \\(offset[^\n]+\n" "rpath \\1\n" load_cmds_ov "${load_cmds_ov}")
-    string(REGEX MATCHALL "rpath [^\n]+" load_cmds_ov "${load_cmds_ov}")
-    string(REGEX REPLACE "rpath " "" load_cmds_ov "${load_cmds_ov}")
-    if(load_cmds_ov)
-      foreach(rpath ${load_cmds_ov})
-        gp_append_unique(${rpaths_var} "${rpath}")
-      endforeach()
-    endif()
-  endif()
-
-  if(UNIX AND NOT APPLE)
-    file(READ_ELF ${item} RPATH rpath_var RUNPATH runpath_var CAPTURE_ERROR error_var)
-    get_filename_component(item_dir ${item} DIRECTORY)
-    foreach(rpath ${rpath_var} ${runpath_var})
-      # Substitute $ORIGIN with the exepath and add to the found rpaths
-      string(REPLACE "$ORIGIN" "${item_dir}" rpath "${rpath}")
-      gp_append_unique(${rpaths_var} "${rpath}")
-    endforeach()
-  endif()
-
-  set(${rpaths_var} ${${rpaths_var}} PARENT_SCOPE)
-endfunction()
-
-
-function(get_item_key item key_var)
-  get_filename_component(item_name "${item}" NAME)
-  if(WIN32)
-    string(TOLOWER "${item_name}" item_name)
-  endif()
-  string(REPLACE "." "_" ${key_var} "${item_name}")
-  set(${key_var} ${${key_var}} PARENT_SCOPE)
-endfunction()
-
-
-function(clear_bundle_keys keys_var)
-  foreach(key ${${keys_var}})
-    set(${key}_ITEM PARENT_SCOPE)
-    set(${key}_RESOLVED_ITEM PARENT_SCOPE)
-    set(${key}_DEFAULT_EMBEDDED_PATH PARENT_SCOPE)
-    set(${key}_EMBEDDED_ITEM PARENT_SCOPE)
-    set(${key}_RESOLVED_EMBEDDED_ITEM PARENT_SCOPE)
-    set(${key}_COPYFLAG PARENT_SCOPE)
-    set(${key}_RPATHS PARENT_SCOPE)
-  endforeach()
-  set(${keys_var} PARENT_SCOPE)
-endfunction()
-
-
-function(set_bundle_key_values keys_var context item exepath dirs copyflag)
-  if(ARGC GREATER 6)
-    set(rpaths "${ARGV6}")
-  else()
-    set(rpaths "")
-  endif()
-  get_filename_component(item_name "${item}" NAME)
-
-  get_item_key("${item}" key)
-
-  list(LENGTH ${keys_var} length_before)
-  gp_append_unique(${keys_var} "${key}")
-  list(LENGTH ${keys_var} length_after)
-
-  if(NOT length_before EQUAL length_after)
-    gp_resolve_item("${context}" "${item}" "${exepath}" "${dirs}" resolved_item "${rpaths}")
-
-    gp_item_default_embedded_path("${item}" default_embedded_path)
-
-    get_item_rpaths("${resolved_item}" item_rpaths)
-
-    if((NOT item MATCHES "\\.dylib$") AND (item MATCHES "[^/]+\\.framework/"))
-      # For frameworks, construct the name under the embedded path from the
-      # opening "${item_name}.framework/" to the closing "/${item_name}":
-      #
-      string(REGEX REPLACE "^.*(${item_name}.framework/.*/?${item_name}).*$" "${default_embedded_path}/\\1" embedded_item "${item}")
-    else()
-      # For other items, just use the same name as the original, but in the
-      # embedded path:
-      #
-      set(embedded_item "${default_embedded_path}/${item_name}")
-    endif()
-
-    # Replace @executable_path and resolve ".." references:
-    #
-    string(REPLACE "@executable_path" "${exepath}" resolved_embedded_item "${embedded_item}")
-    get_filename_component(resolved_embedded_item "${resolved_embedded_item}" ABSOLUTE)
-
-    # *But* -- if we are not copying, then force resolved_embedded_item to be
-    # the same as resolved_item. In the case of multiple executables in the
-    # original bundle, using the default_embedded_path results in looking for
-    # the resolved executable next to the main bundle executable. This is here
-    # so that exes in the other sibling directories (like "bin") get fixed up
-    # properly...
-    #
-    if(NOT copyflag)
-      set(resolved_embedded_item "${resolved_item}")
-    endif()
-
-    set(${keys_var} ${${keys_var}} PARENT_SCOPE)
-    set(${key}_ITEM "${item}" PARENT_SCOPE)
-    set(${key}_RESOLVED_ITEM "${resolved_item}" PARENT_SCOPE)
-    set(${key}_DEFAULT_EMBEDDED_PATH "${default_embedded_path}" PARENT_SCOPE)
-    set(${key}_EMBEDDED_ITEM "${embedded_item}" PARENT_SCOPE)
-    set(${key}_RESOLVED_EMBEDDED_ITEM "${resolved_embedded_item}" PARENT_SCOPE)
-    set(${key}_COPYFLAG "${copyflag}" PARENT_SCOPE)
-    set(${key}_RPATHS "${item_rpaths}" PARENT_SCOPE)
-    set(${key}_RDEP_RPATHS "${rpaths}" PARENT_SCOPE)
-  else()
-    #message("warning: item key '${key}' already in the list, subsequent references assumed identical to first")
-  endif()
-endfunction()
-
-
-function(get_bundle_keys app libs dirs keys_var)
-  set(${keys_var} PARENT_SCOPE)
-
-  set(options)
-  set(oneValueArgs)
-  set(multiValueArgs IGNORE_ITEM)
-  cmake_parse_arguments(CFG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
-
-  get_bundle_and_executable("${app}" bundle executable valid)
-  if(valid)
-    # Always use the exepath of the main bundle executable for @executable_path
-    # replacements:
-    #
-    get_filename_component(exepath "${executable}" PATH)
-
-    # But do fixups on all executables in the bundle:
-    #
-    get_bundle_all_executables("${bundle}" exes)
-
-    # Set keys for main executable first:
-    #
-    set_bundle_key_values(${keys_var} "${executable}" "${executable}" "${exepath}" "${dirs}" 0)
-
-    # Get rpaths specified by main executable:
-    #
-    get_item_key("${executable}" executable_key)
-    set(main_rpaths "${${executable_key}_RPATHS}")
-
-    # For each extra lib, accumulate a key as well and then also accumulate
-    # any of its prerequisites. (Extra libs are typically dynamically loaded
-    # plugins: libraries that are prerequisites for full runtime functionality
-    # but that do not show up in otool -L output...)
-    #
-    foreach(lib ${libs})
-      set_bundle_key_values(${keys_var} "${lib}" "${lib}" "${exepath}" "${dirs}" 0 "${main_rpaths}")
-
-      set(prereqs "")
-      get_filename_component(prereq_filename ${lib} NAME)
-
-      if(NOT prereq_filename IN_LIST CFG_IGNORE_ITEM)
-        get_prerequisites("${lib}" prereqs 1 1 "${exepath}" "${dirs}" "${main_rpaths}")
-        foreach(pr ${prereqs})
-          set_bundle_key_values(${keys_var} "${lib}" "${pr}" "${exepath}" "${dirs}" 1 "${main_rpaths}")
-        endforeach()
-      else()
-        message(STATUS "Ignoring file: ${prereq_filename}")
-      endif()
-    endforeach()
-
-    # For each executable found in the bundle, accumulate keys as we go.
-    # The list of keys should be complete when all prerequisites of all
-    # binaries in the bundle have been analyzed.
-    #
-    foreach(exe ${exes})
-      # Main executable is scanned first above:
-      #
-      if(NOT exe STREQUAL executable)
-        # Add the exe itself to the keys:
-        #
-        set_bundle_key_values(${keys_var} "${exe}" "${exe}" "${exepath}" "${dirs}" 0 "${main_rpaths}")
-
-        # Get rpaths specified by executable:
-        #
-        get_item_key("${exe}" exe_key)
-        set(exe_rpaths "${main_rpaths}" "${${exe_key}_RPATHS}")
-      else()
-        set(exe_rpaths "${main_rpaths}")
-      endif()
-
-      # Add each prerequisite to the keys:
-      #
-      set(prereqs "")
-      get_filename_component(prereq_filename ${exe} NAME)
-
-      if(NOT prereq_filename IN_LIST CFG_IGNORE_ITEM)
-        get_prerequisites("${exe}" prereqs 1 1 "${exepath}" "${dirs}" "${exe_rpaths}")
-        foreach(pr ${prereqs})
-          set_bundle_key_values(${keys_var} "${exe}" "${pr}" "${exepath}" "${dirs}" 1 "${exe_rpaths}")
-        endforeach()
-      else()
-        message(STATUS "Ignoring file: ${prereq_filename}")
-      endif()
-    endforeach()
-
-    # preserve library symlink structure
-    foreach(key ${${keys_var}})
-      if("${${key}_COPYFLAG}" STREQUAL "1")
-        if(IS_SYMLINK "${${key}_RESOLVED_ITEM}")
-          get_filename_component(target "${${key}_RESOLVED_ITEM}" REALPATH)
-          set_bundle_key_values(${keys_var} "${exe}" "${target}" "${exepath}" "${dirs}" 1 "${exe_rpaths}")
-          get_item_key("${target}" targetkey)
-
-          if(WIN32)
-            # ignore case on Windows
-            string(TOLOWER "${${key}_RESOLVED_ITEM}" resolved_item_compare)
-            string(TOLOWER "${${targetkey}_RESOLVED_EMBEDDED_ITEM}" resolved_embedded_item_compare)
-          else()
-            set(resolved_item_compare "${${key}_RESOLVED_ITEM}")
-            set(resolved_embedded_item_compare "${${targetkey}_RESOLVED_EMBEDDED_ITEM}")
-          endif()
-          get_filename_component(resolved_item_compare "${resolved_item_compare}" NAME)
-          get_filename_component(resolved_embedded_item_compare "${resolved_embedded_item_compare}" NAME)
-
-          if(NOT resolved_item_compare STREQUAL resolved_embedded_item_compare)
-            set(${key}_COPYFLAG "2")
-            set(${key}_RESOLVED_ITEM "${${targetkey}_RESOLVED_EMBEDDED_ITEM}")
-          endif()
-
-        endif()
-      endif()
-    endforeach()
-    # Propagate values to caller's scope:
-    #
-    set(${keys_var} ${${keys_var}} PARENT_SCOPE)
-    foreach(key ${${keys_var}})
-      set(${key}_ITEM "${${key}_ITEM}" PARENT_SCOPE)
-      set(${key}_RESOLVED_ITEM "${${key}_RESOLVED_ITEM}" PARENT_SCOPE)
-      set(${key}_DEFAULT_EMBEDDED_PATH "${${key}_DEFAULT_EMBEDDED_PATH}" PARENT_SCOPE)
-      set(${key}_EMBEDDED_ITEM "${${key}_EMBEDDED_ITEM}" PARENT_SCOPE)
-      set(${key}_RESOLVED_EMBEDDED_ITEM "${${key}_RESOLVED_EMBEDDED_ITEM}" PARENT_SCOPE)
-      set(${key}_COPYFLAG "${${key}_COPYFLAG}" PARENT_SCOPE)
-      set(${key}_RPATHS "${${key}_RPATHS}" PARENT_SCOPE)
-      set(${key}_RDEP_RPATHS "${${key}_RDEP_RPATHS}" PARENT_SCOPE)
-    endforeach()
-  endif()
-endfunction()
-
-function(link_resolved_item_into_bundle resolved_item resolved_embedded_item)
-  if(WIN32)
-    # ignore case on Windows
-    string(TOLOWER "${resolved_item}" resolved_item_compare)
-    string(TOLOWER "${resolved_embedded_item}" resolved_embedded_item_compare)
-  else()
-    set(resolved_item_compare "${resolved_item}")
-    set(resolved_embedded_item_compare "${resolved_embedded_item}")
-  endif()
-
-  if(resolved_item_compare STREQUAL resolved_embedded_item_compare)
-    message(STATUS "warning: resolved_item == resolved_embedded_item - not linking...")
-  else()
-    get_filename_component(target_dir "${resolved_embedded_item}" DIRECTORY)
-    file(RELATIVE_PATH symlink_target "${target_dir}" "${resolved_item}")
-    if (NOT EXISTS "${target_dir}")
-      file(MAKE_DIRECTORY "${target_dir}")
-    endif()
-    execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "${symlink_target}" "${resolved_embedded_item}")
-  endif()
-endfunction()
-
-function(copy_resolved_item_into_bundle resolved_item resolved_embedded_item)
-  if(WIN32)
-    # ignore case on Windows
-    string(TOLOWER "${resolved_item}" resolved_item_compare)
-    string(TOLOWER "${resolved_embedded_item}" resolved_embedded_item_compare)
-  else()
-    set(resolved_item_compare "${resolved_item}")
-    set(resolved_embedded_item_compare "${resolved_embedded_item}")
-  endif()
-
-  if(resolved_item_compare STREQUAL resolved_embedded_item_compare)
-    message(STATUS "warning: resolved_item == resolved_embedded_item - not copying...")
-  else()
-    #message(STATUS "copying COMMAND ${CMAKE_COMMAND} -E copy ${resolved_item} ${resolved_embedded_item}")
-    execute_process(COMMAND ${CMAKE_COMMAND} -E copy "${resolved_item}" "${resolved_embedded_item}")
-    if(UNIX AND NOT APPLE)
-      file(RPATH_REMOVE FILE "${resolved_embedded_item}")
-    endif()
-  endif()
-
-endfunction()
-
-
-function(copy_resolved_framework_into_bundle resolved_item resolved_embedded_item)
-  if(WIN32)
-    # ignore case on Windows
-    string(TOLOWER "${resolved_item}" resolved_item_compare)
-    string(TOLOWER "${resolved_embedded_item}" resolved_embedded_item_compare)
-  else()
-    set(resolved_item_compare "${resolved_item}")
-    set(resolved_embedded_item_compare "${resolved_embedded_item}")
-  endif()
-
-  if(resolved_item_compare STREQUAL resolved_embedded_item_compare)
-    message(STATUS "warning: resolved_item == resolved_embedded_item - not copying...")
-  else()
-    if(BU_COPY_FULL_FRAMEWORK_CONTENTS)
-      # Full Framework (everything):
-      get_filename_component(resolved_dir "${resolved_item}" PATH)
-      get_filename_component(resolved_dir "${resolved_dir}/../.." ABSOLUTE)
-      get_filename_component(resolved_embedded_dir "${resolved_embedded_item}" PATH)
-      get_filename_component(resolved_embedded_dir "${resolved_embedded_dir}/../.." ABSOLUTE)
-      #message(STATUS "copying COMMAND ${CMAKE_COMMAND} -E copy_directory '${resolved_dir}' '${resolved_embedded_dir}'")
-      execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory "${resolved_dir}" "${resolved_embedded_dir}")
-    else()
-      # Framework lib itself:
-      #message(STATUS "copying COMMAND ${CMAKE_COMMAND} -E copy ${resolved_item} ${resolved_embedded_item}")
-      execute_process(COMMAND ${CMAKE_COMMAND} -E copy "${resolved_item}" "${resolved_embedded_item}")
-
-      # Plus Resources, if they exist:
-      string(REGEX REPLACE "^(.*)/[^/]+$" "\\1/Resources" resolved_resources "${resolved_item}")
-      string(REGEX REPLACE "^(.*)/[^/]+$" "\\1/Resources" resolved_embedded_resources "${resolved_embedded_item}")
-      if(EXISTS "${resolved_resources}")
-        #message(STATUS "copying COMMAND ${CMAKE_COMMAND} -E copy_directory '${resolved_resources}' '${resolved_embedded_resources}'")
-        execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory "${resolved_resources}" "${resolved_embedded_resources}")
-      endif()
-
-      # Some frameworks e.g. Qt put Info.plist in wrong place, so when it is
-      # missing in resources, copy it from other well known incorrect locations:
-      if(NOT EXISTS "${resolved_resources}/Info.plist")
-        # Check for Contents/Info.plist in framework root (older Qt SDK):
-        string(REGEX REPLACE "^(.*)/[^/]+/[^/]+/[^/]+$" "\\1/Contents/Info.plist" resolved_info_plist "${resolved_item}")
-        string(REGEX REPLACE "^(.*)/[^/]+$" "\\1/Resources/Info.plist" resolved_embedded_info_plist "${resolved_embedded_item}")
-        if(EXISTS "${resolved_info_plist}")
-          #message(STATUS "copying COMMAND ${CMAKE_COMMAND} -E copy_directory '${resolved_info_plist}' '${resolved_embedded_info_plist}'")
-          execute_process(COMMAND ${CMAKE_COMMAND} -E copy "${resolved_info_plist}" "${resolved_embedded_info_plist}")
-        endif()
-      endif()
-
-      # Check if framework is versioned and fix it layout
-      string(REGEX REPLACE "^.*/([^/]+)/[^/]+$" "\\1" resolved_embedded_version "${resolved_embedded_item}")
-      string(REGEX REPLACE "^(.*)/[^/]+/[^/]+$" "\\1" resolved_embedded_versions "${resolved_embedded_item}")
-      string(REGEX REPLACE "^.*/([^/]+)/[^/]+/[^/]+$" "\\1" resolved_embedded_versions_basename "${resolved_embedded_item}")
-      if(resolved_embedded_versions_basename STREQUAL "Versions")
-        # Ensure Current symlink points to the framework version
-        if(NOT EXISTS "${resolved_embedded_versions}/Current")
-          execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "${resolved_embedded_version}" "${resolved_embedded_versions}/Current")
-        endif()
-        # Restore symlinks in framework root pointing to current framework
-        # binary and resources:
-        string(REGEX REPLACE "^(.*)/[^/]+/[^/]+/[^/]+$" "\\1" resolved_embedded_root "${resolved_embedded_item}")
-        string(REGEX REPLACE "^.*/([^/]+)$" "\\1" resolved_embedded_item_basename "${resolved_embedded_item}")
-        if(NOT EXISTS "${resolved_embedded_root}/${resolved_embedded_item_basename}")
-          execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "Versions/Current/${resolved_embedded_item_basename}" "${resolved_embedded_root}/${resolved_embedded_item_basename}")
-        endif()
-        if(NOT EXISTS "${resolved_embedded_root}/Resources")
-          execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "Versions/Current/Resources" "${resolved_embedded_root}/Resources")
-        endif()
-      endif()
-    endif()
-    if(UNIX AND NOT APPLE)
-      file(RPATH_REMOVE FILE "${resolved_embedded_item}")
-    endif()
-  endif()
-
-endfunction()
-
-
-function(fixup_bundle_item resolved_embedded_item exepath dirs)
-  # This item's key is "ikey":
-  #
-  get_item_key("${resolved_embedded_item}" ikey)
-
-  # Ensure the item is "inside the .app bundle" -- it should not be fixed up if
-  # it is not in the .app bundle... Otherwise, we'll modify files in the build
-  # tree, or in other varied locations around the file system, with our call to
-  # install_name_tool. Make sure that doesn't happen here:
-  #
-  get_dotapp_dir("${exepath}" exe_dotapp_dir)
-  string(LENGTH "${exe_dotapp_dir}/" exe_dotapp_dir_length)
-  string(LENGTH "${resolved_embedded_item}" resolved_embedded_item_length)
-  set(path_too_short 0)
-  set(is_embedded 0)
-  if(resolved_embedded_item_length LESS exe_dotapp_dir_length)
-    set(path_too_short 1)
-  endif()
-  if(NOT path_too_short)
-    string(SUBSTRING "${resolved_embedded_item}" 0 ${exe_dotapp_dir_length} item_substring)
-    if("${exe_dotapp_dir}/" STREQUAL item_substring)
-      set(is_embedded 1)
-    endif()
-  endif()
-  if(NOT is_embedded)
-    message("  exe_dotapp_dir/='${exe_dotapp_dir}/'")
-    message("  item_substring='${item_substring}'")
-    message("  resolved_embedded_item='${resolved_embedded_item}'")
-    message("")
-    message("Install or copy the item into the bundle before calling fixup_bundle.")
-    message("Or maybe there's a typo or incorrect path in one of the args to fixup_bundle?")
-    message("")
-    message(FATAL_ERROR "cannot fixup an item that is not in the bundle...")
-  endif()
-
-  set(rpaths "${${ikey}_RPATHS}" "${${ikey}_RDEP_RPATHS}")
-
-  set(prereqs "")
-  get_prerequisites("${resolved_embedded_item}" prereqs 1 0 "${exepath}" "${dirs}" "${rpaths}")
-
-  set(changes "")
-
-  foreach(pr ${prereqs})
-    # Each referenced item's key is "rkey" in the loop:
-    #
-    get_item_key("${pr}" rkey)
-
-    if(NOT "${${rkey}_EMBEDDED_ITEM}" STREQUAL "")
-      set(changes ${changes} "-change" "${pr}" "${${rkey}_EMBEDDED_ITEM}")
-    else()
-      message("warning: unexpected reference to '${pr}'")
-    endif()
-  endforeach()
-
-  if(BU_CHMOD_BUNDLE_ITEMS)
-    execute_process(COMMAND chmod u+w "${resolved_embedded_item}")
-  endif()
-
-  # CMAKE_INSTALL_NAME_TOOL may not be set if executed in script mode
-  # Duplicated from CMakeFindBinUtils.cmake
-  find_program(CMAKE_INSTALL_NAME_TOOL NAMES install_name_tool HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
-
-  # Only if install_name_tool supports -delete_rpath:
-  #
-  execute_process(COMMAND ${CMAKE_INSTALL_NAME_TOOL}
-    OUTPUT_VARIABLE install_name_tool_usage
-    ERROR_VARIABLE  install_name_tool_usage
-    )
-  if(install_name_tool_usage MATCHES ".*-delete_rpath.*")
-    foreach(rpath ${${ikey}_RPATHS})
-      set(changes ${changes} -delete_rpath "${rpath}")
-    endforeach()
-  endif()
-
-  if(${ikey}_EMBEDDED_ITEM)
-    set(changes ${changes} -id "${${ikey}_EMBEDDED_ITEM}")
-  endif()
-
-  # Change this item's id and all of its references in one call
-  # to install_name_tool:
-  #
-  if(changes)
-    set(cmd ${CMAKE_INSTALL_NAME_TOOL} ${changes} "${resolved_embedded_item}")
-    execute_process(COMMAND ${cmd} RESULT_VARIABLE install_name_tool_result)
-    if(NOT install_name_tool_result EQUAL 0)
-      string(REPLACE ";" "' '" msg "'${cmd}'")
-      message(FATAL_ERROR "Command failed:\n ${msg}")
-    endif()
-  endif()
-endfunction()
-
-
-function(fixup_bundle app libs dirs)
-  message(STATUS "fixup_bundle")
-  message(STATUS "  app='${app}'")
-  message(STATUS "  libs='${libs}'")
-  message(STATUS "  dirs='${dirs}'")
-
-  set(options)
-  set(oneValueArgs)
-  set(multiValueArgs IGNORE_ITEM)
-  cmake_parse_arguments(CFG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
-
-  message(STATUS "  ignoreItems='${CFG_IGNORE_ITEM}'")
-
-  get_bundle_and_executable("${app}" bundle executable valid)
-  if(valid)
-    get_filename_component(exepath "${executable}" PATH)
-
-    message(STATUS "fixup_bundle: preparing...")
-    get_bundle_keys("${app}" "${libs}" "${dirs}" keys IGNORE_ITEM "${CFG_IGNORE_ITEM}")
-
-    message(STATUS "fixup_bundle: copying...")
-    list(LENGTH keys n)
-    math(EXPR n ${n}*2)
-
-    set(i 0)
-    foreach(key ${keys})
-      math(EXPR i ${i}+1)
-      if("${${key}_COPYFLAG}" STREQUAL "2")
-        message(STATUS "${i}/${n}: linking '${${key}_RESOLVED_ITEM}' -> '${${key}_RESOLVED_EMBEDDED_ITEM}'")
-      elseif(${${key}_COPYFLAG})
-        message(STATUS "${i}/${n}: copying '${${key}_RESOLVED_ITEM}'")
-      else()
-        message(STATUS "${i}/${n}: *NOT* copying '${${key}_RESOLVED_ITEM}'")
-      endif()
-
-      set(show_status 0)
-      if(show_status)
-        message(STATUS "key='${key}'")
-        message(STATUS "item='${${key}_ITEM}'")
-        message(STATUS "resolved_item='${${key}_RESOLVED_ITEM}'")
-        message(STATUS "default_embedded_path='${${key}_DEFAULT_EMBEDDED_PATH}'")
-        message(STATUS "embedded_item='${${key}_EMBEDDED_ITEM}'")
-        message(STATUS "resolved_embedded_item='${${key}_RESOLVED_EMBEDDED_ITEM}'")
-        message(STATUS "copyflag='${${key}_COPYFLAG}'")
-        message(STATUS "")
-      endif()
-
-      if("${${key}_COPYFLAG}" STREQUAL "2")
-        link_resolved_item_into_bundle("${${key}_RESOLVED_ITEM}"
-          "${${key}_RESOLVED_EMBEDDED_ITEM}")
-      elseif(${${key}_COPYFLAG})
-        set(item "${${key}_ITEM}")
-        if(item MATCHES "[^/]+\\.framework/")
-          copy_resolved_framework_into_bundle("${${key}_RESOLVED_ITEM}"
-            "${${key}_RESOLVED_EMBEDDED_ITEM}")
-        else()
-          copy_resolved_item_into_bundle("${${key}_RESOLVED_ITEM}"
-            "${${key}_RESOLVED_EMBEDDED_ITEM}")
-        endif()
-      endif()
-    endforeach()
-
-    message(STATUS "fixup_bundle: fixing...")
-    foreach(key ${keys})
-      math(EXPR i ${i}+1)
-      if(APPLE)
-        message(STATUS "${i}/${n}: fixing up '${${key}_RESOLVED_EMBEDDED_ITEM}'")
-        if(NOT "${${key}_COPYFLAG}" STREQUAL "2")
-          fixup_bundle_item("${${key}_RESOLVED_EMBEDDED_ITEM}" "${exepath}" "${dirs}")
-        endif()
-      else()
-        message(STATUS "${i}/${n}: fix-up not required on this platform '${${key}_RESOLVED_EMBEDDED_ITEM}'")
-      endif()
-    endforeach()
-
-    message(STATUS "fixup_bundle: cleaning up...")
-    clear_bundle_keys(keys)
-
-    message(STATUS "fixup_bundle: verifying...")
-    verify_app("${app}" IGNORE_ITEM "${CFG_IGNORE_ITEM}")
-  else()
-    message(SEND_ERROR "error: fixup_bundle: not a valid bundle")
-  endif()
-
-  message(STATUS "fixup_bundle: done")
-endfunction()
-
-
-function(copy_and_fixup_bundle src dst libs dirs)
-  execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory "${src}" "${dst}")
-  fixup_bundle("${dst}" "${libs}" "${dirs}")
-endfunction()
-
-
-function(verify_bundle_prerequisites bundle result_var info_var)
-  set(result 1)
-  set(info "")
-  set(count 0)
-
-  set(options)
-  set(oneValueArgs)
-  set(multiValueArgs IGNORE_ITEM)
-  cmake_parse_arguments(CFG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
-
-  get_bundle_main_executable("${bundle}" main_bundle_exe)
-
-  get_bundle_all_executables("${bundle}" file_list)
-  foreach(f ${file_list})
-      get_filename_component(exepath "${f}" PATH)
-      math(EXPR count "${count} + 1")
-
-      message(STATUS "executable file ${count}: ${f}")
-
-      set(prereqs "")
-      get_filename_component(prereq_filename ${f} NAME)
-
-      if(NOT prereq_filename IN_LIST CFG_IGNORE_ITEM)
-        get_item_rpaths(${f} _main_exe_rpaths)
-        get_prerequisites("${f}" prereqs 1 1 "${exepath}" "${_main_exe_rpaths}")
-
-        # On the Mac,
-        # "embedded" and "system" prerequisites are fine... anything else means
-        # the bundle's prerequisites are not verified (i.e., the bundle is not
-        # really "standalone")
-        #
-        # On Windows (and others? Linux/Unix/...?)
-        # "local" and "system" prereqs are fine...
-        #
-
-        set(external_prereqs "")
-
-        foreach(p ${prereqs})
-          set(p_type "")
-          gp_file_type("${f}" "${p}" p_type)
-
-          if(APPLE)
-            if(NOT p_type STREQUAL "embedded" AND NOT p_type STREQUAL "system")
-              set(external_prereqs ${external_prereqs} "${p}")
-            endif()
-          else()
-            if(NOT p_type STREQUAL "local" AND NOT p_type STREQUAL "system")
-              set(external_prereqs ${external_prereqs} "${p}")
-            endif()
-          endif()
-        endforeach()
-
-        if(external_prereqs)
-          # Found non-system/somehow-unacceptable prerequisites:
-          set(result 0)
-          set(info ${info} "external prerequisites found:\nf='${f}'\nexternal_prereqs='${external_prereqs}'\n")
-        endif()
-      else()
-        message(STATUS "Ignoring file: ${prereq_filename}")
-      endif()
-  endforeach()
-
-  if(result)
-    set(info "Verified ${count} executable files in '${bundle}'")
-  endif()
-
-  set(${result_var} "${result}" PARENT_SCOPE)
-  set(${info_var} "${info}" PARENT_SCOPE)
-endfunction()
-
-
-function(verify_bundle_symlinks bundle result_var info_var)
-  set(result 1)
-  set(info "")
-  set(count 0)
-
-  # TODO: implement this function for real...
-  # Right now, it is just a stub that verifies unconditionally...
-
-  set(${result_var} "${result}" PARENT_SCOPE)
-  set(${info_var} "${info}" PARENT_SCOPE)
-endfunction()
-
-
-function(verify_app app)
-  set(verified 0)
-  set(info "")
-
-  set(options)
-  set(oneValueArgs)
-  set(multiValueArgs IGNORE_ITEM)
-  cmake_parse_arguments(CFG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
-
-  get_bundle_and_executable("${app}" bundle executable valid)
-
-  message(STATUS "===========================================================================")
-  message(STATUS "Analyzing app='${app}'")
-  message(STATUS "bundle='${bundle}'")
-  message(STATUS "executable='${executable}'")
-  message(STATUS "valid='${valid}'")
-
-  # Verify that the bundle does not have any "external" prerequisites:
-  #
-  verify_bundle_prerequisites("${bundle}" verified info IGNORE_ITEM "${CFG_IGNORE_ITEM}")
-  message(STATUS "verified='${verified}'")
-  message(STATUS "info='${info}'")
-  message(STATUS "")
-
-  if(verified)
-    # Verify that the bundle does not have any symlinks to external files:
-    #
-    verify_bundle_symlinks("${bundle}" verified info)
-    message(STATUS "verified='${verified}'")
-    message(STATUS "info='${info}'")
-    message(STATUS "")
-  endif()
-
-  if(NOT verified)
-    message(FATAL_ERROR "error: verify_app failed")
-  endif()
-endfunction()
-
-cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/CMakeASMInformation.cmake b/share/cmake-3.18/Modules/CMakeASMInformation.cmake
deleted file mode 100644
index 03195cc..0000000
--- a/share/cmake-3.18/Modules/CMakeASMInformation.cmake
+++ /dev/null
@@ -1,110 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-if(UNIX)
-  set(CMAKE_ASM${ASM_DIALECT}_OUTPUT_EXTENSION .o)
-else()
-  set(CMAKE_ASM${ASM_DIALECT}_OUTPUT_EXTENSION .obj)
-endif()
-
-set(CMAKE_INCLUDE_FLAG_ASM${ASM_DIALECT} "-I")       # -I
-set(CMAKE_BASE_NAME)
-get_filename_component(CMAKE_BASE_NAME "${CMAKE_ASM${ASM_DIALECT}_COMPILER}" NAME_WE)
-
-if("${CMAKE_BASE_NAME}" STREQUAL "as")
-  set(CMAKE_BASE_NAME gas)
-endif()
-
-# Load compiler-specific information.
-set(_INCLUDED_FILE "")
-if(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID)
-  include(Compiler/${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}-ASM${ASM_DIALECT} OPTIONAL  RESULT_VARIABLE _INCLUDED_FILE)
-endif()
-if(NOT _INCLUDED_FILE)
-  if("ASM${ASM_DIALECT}" STREQUAL "ASM")
-    message(STATUS "Warning: Did not find file Compiler/${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}-ASM${ASM_DIALECT}")
-  endif()
-  include(Platform/${CMAKE_BASE_NAME} OPTIONAL)
-endif()
-
-if(CMAKE_SYSTEM_PROCESSOR)
-  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}-ASM${ASM_DIALECT}-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL  RESULT_VARIABLE _INCLUDED_FILE)
-  if(NOT _INCLUDED_FILE)
-    include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_BASE_NAME}-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL)
-  endif()
-endif()
-
-include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}-ASM${ASM_DIALECT} OPTIONAL  RESULT_VARIABLE _INCLUDED_FILE)
-if(NOT _INCLUDED_FILE)
-  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_BASE_NAME} OPTIONAL)
-endif()
-
-# This should be included before the _INIT variables are
-# used to initialize the cache.  Since the rule variables
-# have if blocks on them, users can still define them here.
-# But, it should still be after the platform file so changes can
-# be made to those values.
-
-if(CMAKE_USER_MAKE_RULES_OVERRIDE)
-  # Save the full path of the file so try_compile can use it.
-  include(${CMAKE_USER_MAKE_RULES_OVERRIDE} RESULT_VARIABLE _override)
-  set(CMAKE_USER_MAKE_RULES_OVERRIDE "${_override}")
-endif()
-
-if(CMAKE_USER_MAKE_RULES_OVERRIDE_ASM)
-  # Save the full path of the file so try_compile can use it.
-  include(${CMAKE_USER_MAKE_RULES_OVERRIDE_ASM} RESULT_VARIABLE _override)
-  set(CMAKE_USER_MAKE_RULES_OVERRIDE_ASM "${_override}")
-endif()
-
-# Set default assembler file extensions:
-if(NOT CMAKE_ASM${ASM_DIALECT}_SOURCE_FILE_EXTENSIONS)
-  set(CMAKE_ASM${ASM_DIALECT}_SOURCE_FILE_EXTENSIONS s;S;asm)
-endif()
-
-
-# Support for CMAKE_ASM${ASM_DIALECT}_FLAGS_INIT and friends:
-set(CMAKE_ASM${ASM_DIALECT}_FLAGS_INIT "$ENV{ASM${ASM_DIALECT}FLAGS} ${CMAKE_ASM${ASM_DIALECT}_FLAGS_INIT}")
-
-cmake_initialize_per_config_variable(CMAKE_ASM${ASM_DIALECT}_FLAGS "Flags used by the ASM${ASM_DIALECT} compiler")
-
-if(NOT CMAKE_ASM${ASM_DIALECT}_COMPILE_OBJECT)
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILE_OBJECT "<CMAKE_ASM${ASM_DIALECT}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>")
-endif()
-
-if(NOT CMAKE_ASM${ASM_DIALECT}_CREATE_STATIC_LIBRARY)
-  set(CMAKE_ASM${ASM_DIALECT}_CREATE_STATIC_LIBRARY
-      "<CMAKE_AR> cr <TARGET> <LINK_FLAGS> <OBJECTS> "
-      "<CMAKE_RANLIB> <TARGET>")
-endif()
-
-if(NOT CMAKE_ASM${ASM_DIALECT}_LINK_EXECUTABLE)
-  set(CMAKE_ASM${ASM_DIALECT}_LINK_EXECUTABLE
-    "<CMAKE_ASM${ASM_DIALECT}_COMPILER> <FLAGS> <CMAKE_ASM${ASM_DIALECT}_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
-endif()
-
-if(NOT CMAKE_EXECUTABLE_RUNTIME_ASM${ASM_DIALECT}_FLAG)
-  set(CMAKE_EXECUTABLE_RUNTIME_ASM${ASM_DIALECT}_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_ASM${ASM_DIALECT}_FLAG})
-endif()
-
-if(NOT CMAKE_EXECUTABLE_RUNTIME_ASM${ASM_DIALECT}_FLAG_SEP)
-  set(CMAKE_EXECUTABLE_RUNTIME_ASM${ASM_DIALECT}_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_ASM${ASM_DIALECT}_FLAG_SEP})
-endif()
-
-if(NOT CMAKE_EXECUTABLE_RPATH_LINK_ASM${ASM_DIALECT}_FLAG)
-  set(CMAKE_EXECUTABLE_RPATH_LINK_ASM${ASM_DIALECT}_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_ASM${ASM_DIALECT}_FLAG})
-endif()
-
-# to be done
-if(NOT CMAKE_ASM${ASM_DIALECT}_CREATE_SHARED_LIBRARY)
-  set(CMAKE_ASM${ASM_DIALECT}_CREATE_SHARED_LIBRARY)
-endif()
-
-if(NOT CMAKE_ASM${ASM_DIALECT}_CREATE_SHARED_MODULE)
-  set(CMAKE_ASM${ASM_DIALECT}_CREATE_SHARED_MODULE)
-endif()
-
-
-set(CMAKE_ASM${ASM_DIALECT}_INFOMATION_LOADED 1)
-
diff --git a/share/cmake-3.18/Modules/CMakeASM_MASMInformation.cmake b/share/cmake-3.18/Modules/CMakeASM_MASMInformation.cmake
deleted file mode 100644
index 6d1e174..0000000
--- a/share/cmake-3.18/Modules/CMakeASM_MASMInformation.cmake
+++ /dev/null
@@ -1,20 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# support for the MS assembler, masm and masm64
-
-set(ASM_DIALECT "_MASM")
-
-set(CMAKE_ASM${ASM_DIALECT}_SOURCE_FILE_EXTENSIONS asm)
-
-set(CMAKE_ASM${ASM_DIALECT}_COMPILE_OBJECT "<CMAKE_ASM${ASM_DIALECT}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> /c /Fo <OBJECT> <SOURCE>")
-
-# The ASM_MASM compiler id for this compiler is "MSVC", so fill out the runtime library table.
-set(CMAKE_ASM${ASM_DIALECT}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreaded         "")
-set(CMAKE_ASM${ASM_DIALECT}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDLL      "")
-set(CMAKE_ASM${ASM_DIALECT}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebug    "")
-set(CMAKE_ASM${ASM_DIALECT}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebugDLL "")
-
-include(CMakeASMInformation)
-set(ASM_DIALECT)
diff --git a/share/cmake-3.18/Modules/CMakeASM_NASMInformation.cmake b/share/cmake-3.18/Modules/CMakeASM_NASMInformation.cmake
deleted file mode 100644
index 97cb488..0000000
--- a/share/cmake-3.18/Modules/CMakeASM_NASMInformation.cmake
+++ /dev/null
@@ -1,44 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# support for the nasm assembler
-
-set(CMAKE_ASM_NASM_SOURCE_FILE_EXTENSIONS nasm asm)
-
-if(NOT CMAKE_ASM_NASM_OBJECT_FORMAT)
-  if(WIN32)
-    if(DEFINED CMAKE_C_SIZEOF_DATA_PTR AND CMAKE_C_SIZEOF_DATA_PTR EQUAL 8)
-      set(CMAKE_ASM_NASM_OBJECT_FORMAT win64)
-    elseif(DEFINED CMAKE_CXX_SIZEOF_DATA_PTR AND CMAKE_CXX_SIZEOF_DATA_PTR EQUAL 8)
-      set(CMAKE_ASM_NASM_OBJECT_FORMAT win64)
-    else()
-      set(CMAKE_ASM_NASM_OBJECT_FORMAT win32)
-    endif()
-  elseif(APPLE)
-    if(DEFINED CMAKE_C_SIZEOF_DATA_PTR AND CMAKE_C_SIZEOF_DATA_PTR EQUAL 8)
-      set(CMAKE_ASM_NASM_OBJECT_FORMAT macho64)
-    elseif(DEFINED CMAKE_CXX_SIZEOF_DATA_PTR AND CMAKE_CXX_SIZEOF_DATA_PTR EQUAL 8)
-      set(CMAKE_ASM_NASM_OBJECT_FORMAT macho64)
-    else()
-      set(CMAKE_ASM_NASM_OBJECT_FORMAT macho)
-    endif()
-  else()
-    if(DEFINED CMAKE_C_SIZEOF_DATA_PTR AND CMAKE_C_SIZEOF_DATA_PTR EQUAL 8)
-      set(CMAKE_ASM_NASM_OBJECT_FORMAT elf64)
-    elseif(DEFINED CMAKE_CXX_SIZEOF_DATA_PTR AND CMAKE_CXX_SIZEOF_DATA_PTR EQUAL 8)
-      set(CMAKE_ASM_NASM_OBJECT_FORMAT elf64)
-    else()
-      set(CMAKE_ASM_NASM_OBJECT_FORMAT elf)
-    endif()
-  endif()
-endif()
-
-if(NOT CMAKE_ASM_NASM_COMPILE_OBJECT)
-  set(CMAKE_ASM_NASM_COMPILE_OBJECT "<CMAKE_ASM_NASM_COMPILER> <INCLUDES> <FLAGS> -f ${CMAKE_ASM_NASM_OBJECT_FORMAT} -o <OBJECT> <SOURCE>")
-endif()
-
-# Load the generic ASMInformation file:
-set(ASM_DIALECT "_NASM")
-include(CMakeASMInformation)
-set(ASM_DIALECT)
diff --git a/share/cmake-3.18/Modules/CMakeCCompiler.cmake.in b/share/cmake-3.18/Modules/CMakeCCompiler.cmake.in
deleted file mode 100644
index eea3f5d..0000000
--- a/share/cmake-3.18/Modules/CMakeCCompiler.cmake.in
+++ /dev/null
@@ -1,77 +0,0 @@
-set(CMAKE_C_COMPILER "@CMAKE_C_COMPILER@")
-set(CMAKE_C_COMPILER_ARG1 "@CMAKE_C_COMPILER_ARG1@")
-set(CMAKE_C_COMPILER_ID "@CMAKE_C_COMPILER_ID@")
-set(CMAKE_C_COMPILER_VERSION "@CMAKE_C_COMPILER_VERSION@")
-set(CMAKE_C_COMPILER_VERSION_INTERNAL "@CMAKE_C_COMPILER_VERSION_INTERNAL@")
-set(CMAKE_C_COMPILER_WRAPPER "@CMAKE_C_COMPILER_WRAPPER@")
-set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "@CMAKE_C_STANDARD_COMPUTED_DEFAULT@")
-set(CMAKE_C_COMPILE_FEATURES "@CMAKE_C_COMPILE_FEATURES@")
-set(CMAKE_C90_COMPILE_FEATURES "@CMAKE_C90_COMPILE_FEATURES@")
-set(CMAKE_C99_COMPILE_FEATURES "@CMAKE_C99_COMPILE_FEATURES@")
-set(CMAKE_C11_COMPILE_FEATURES "@CMAKE_C11_COMPILE_FEATURES@")
-
-set(CMAKE_C_PLATFORM_ID "@CMAKE_C_PLATFORM_ID@")
-set(CMAKE_C_SIMULATE_ID "@CMAKE_C_SIMULATE_ID@")
-set(CMAKE_C_COMPILER_FRONTEND_VARIANT "@CMAKE_C_COMPILER_FRONTEND_VARIANT@")
-set(CMAKE_C_SIMULATE_VERSION "@CMAKE_C_SIMULATE_VERSION@")
-@_SET_CMAKE_C_COMPILER_ARCHITECTURE_ID@
-@_SET_CMAKE_C_COMPILER_SYSROOT@
-@SET_MSVC_C_ARCHITECTURE_ID@
-@SET_CMAKE_XCODE_ARCHS@
-set(CMAKE_AR "@CMAKE_AR@")
-set(CMAKE_C_COMPILER_AR "@CMAKE_C_COMPILER_AR@")
-set(CMAKE_RANLIB "@CMAKE_RANLIB@")
-set(CMAKE_C_COMPILER_RANLIB "@CMAKE_C_COMPILER_RANLIB@")
-set(CMAKE_LINKER "@CMAKE_LINKER@")
-set(CMAKE_MT "@CMAKE_MT@")
-set(CMAKE_COMPILER_IS_GNUCC @CMAKE_COMPILER_IS_GNUCC@)
-set(CMAKE_C_COMPILER_LOADED 1)
-set(CMAKE_C_COMPILER_WORKS @CMAKE_C_COMPILER_WORKS@)
-set(CMAKE_C_ABI_COMPILED @CMAKE_C_ABI_COMPILED@)
-set(CMAKE_COMPILER_IS_MINGW @CMAKE_COMPILER_IS_MINGW@)
-set(CMAKE_COMPILER_IS_CYGWIN @CMAKE_COMPILER_IS_CYGWIN@)
-if(CMAKE_COMPILER_IS_CYGWIN)
-  set(CYGWIN 1)
-  set(UNIX 1)
-endif()
-
-set(CMAKE_C_COMPILER_ENV_VAR "CC")
-
-if(CMAKE_COMPILER_IS_MINGW)
-  set(MINGW 1)
-endif()
-set(CMAKE_C_COMPILER_ID_RUN 1)
-set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m)
-set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC)
-set(CMAKE_C_LINKER_PREFERENCE 10)
-
-# Save compiler ABI information.
-set(CMAKE_C_SIZEOF_DATA_PTR "@CMAKE_C_SIZEOF_DATA_PTR@")
-set(CMAKE_C_COMPILER_ABI "@CMAKE_C_COMPILER_ABI@")
-set(CMAKE_C_LIBRARY_ARCHITECTURE "@CMAKE_C_LIBRARY_ARCHITECTURE@")
-
-if(CMAKE_C_SIZEOF_DATA_PTR)
-  set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}")
-endif()
-
-if(CMAKE_C_COMPILER_ABI)
-  set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}")
-endif()
-
-if(CMAKE_C_LIBRARY_ARCHITECTURE)
-  set(CMAKE_LIBRARY_ARCHITECTURE "@CMAKE_C_LIBRARY_ARCHITECTURE@")
-endif()
-
-set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "@CMAKE_C_CL_SHOWINCLUDES_PREFIX@")
-if(CMAKE_C_CL_SHOWINCLUDES_PREFIX)
-  set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}")
-endif()
-
-@CMAKE_C_COMPILER_CUSTOM_CODE@
-@CMAKE_C_SYSROOT_FLAG_CODE@
-@CMAKE_C_OSX_DEPLOYMENT_TARGET_FLAG_CODE@
-
-set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "@CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES@")
-set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "@CMAKE_C_IMPLICIT_LINK_LIBRARIES@")
-set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "@CMAKE_C_IMPLICIT_LINK_DIRECTORIES@")
-set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "@CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES@")
diff --git a/share/cmake-3.18/Modules/CMakeCCompilerABI.c b/share/cmake-3.18/Modules/CMakeCCompilerABI.c
deleted file mode 100644
index 08cf39b..0000000
--- a/share/cmake-3.18/Modules/CMakeCCompilerABI.c
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifdef __cplusplus
-#  error "A C++ compiler has been selected for C."
-#endif
-
-#ifdef __CLASSIC_C__
-#  define const
-#endif
-
-#include "CMakeCompilerABI.h"
-
-#ifdef __CLASSIC_C__
-int main(argc, argv) int argc;
-char* argv[];
-#else
-int main(int argc, char* argv[])
-#endif
-{
-  int require = 0;
-  require += info_sizeof_dptr[argc];
-#if defined(ABI_ID)
-  require += info_abi[argc];
-#endif
-  (void)argv;
-  return require;
-}
diff --git a/share/cmake-3.18/Modules/CMakeCCompilerId.c.in b/share/cmake-3.18/Modules/CMakeCCompilerId.c.in
deleted file mode 100644
index 2f6bdb4..0000000
--- a/share/cmake-3.18/Modules/CMakeCCompilerId.c.in
+++ /dev/null
@@ -1,87 +0,0 @@
-#ifdef __cplusplus
-# error "A C++ compiler has been selected for C."
-#endif
-
-#if defined(__18CXX)
-# define ID_VOID_MAIN
-#endif
-#if defined(__CLASSIC_C__)
-/* cv-qualifiers did not exist in K&R C */
-# define const
-# define volatile
-#endif
-
-@CMAKE_C_COMPILER_ID_CONTENT@
-
-/* Construct the string literal in pieces to prevent the source from
-   getting matched.  Store it in a pointer rather than an array
-   because some compilers will just produce instructions to fill the
-   array rather than assigning a pointer to a static array.  */
-char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
-#ifdef SIMULATE_ID
-char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
-#endif
-
-#ifdef __QNXNTO__
-char const* qnxnto = "INFO" ":" "qnxnto[]";
-#endif
-
-#if defined(__CRAYXE) || defined(__CRAYXC)
-char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
-#endif
-
-@CMAKE_C_COMPILER_ID_PLATFORM_CONTENT@
-@CMAKE_C_COMPILER_ID_ERROR_FOR_TEST@
-
-#if !defined(__STDC__)
-# if (defined(_MSC_VER) && !defined(__clang__)) \
-  || (defined(__ibmxl__) || defined(__IBMC__))
-#  define C_DIALECT "90"
-# else
-#  define C_DIALECT
-# endif
-#elif __STDC_VERSION__ >= 201000L
-# define C_DIALECT "11"
-#elif __STDC_VERSION__ >= 199901L
-# define C_DIALECT "99"
-#else
-# define C_DIALECT "90"
-#endif
-const char* info_language_dialect_default =
-  "INFO" ":" "dialect_default[" C_DIALECT "]";
-
-/*--------------------------------------------------------------------------*/
-
-#ifdef ID_VOID_MAIN
-void main() {}
-#else
-# if defined(__CLASSIC_C__)
-int main(argc, argv) int argc; char *argv[];
-# else
-int main(int argc, char* argv[])
-# endif
-{
-  int require = 0;
-  require += info_compiler[argc];
-  require += info_platform[argc];
-  require += info_arch[argc];
-#ifdef COMPILER_VERSION_MAJOR
-  require += info_version[argc];
-#endif
-#ifdef COMPILER_VERSION_INTERNAL
-  require += info_version_internal[argc];
-#endif
-#ifdef SIMULATE_ID
-  require += info_simulate[argc];
-#endif
-#ifdef SIMULATE_VERSION_MAJOR
-  require += info_simulate_version[argc];
-#endif
-#if defined(__CRAYXE) || defined(__CRAYXC)
-  require += info_cray[argc];
-#endif
-  require += info_language_dialect_default[argc];
-  (void)argv;
-  return require;
-}
-#endif
diff --git a/share/cmake-3.18/Modules/CMakeCInformation.cmake b/share/cmake-3.18/Modules/CMakeCInformation.cmake
deleted file mode 100644
index f6d620f..0000000
--- a/share/cmake-3.18/Modules/CMakeCInformation.cmake
+++ /dev/null
@@ -1,195 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# This file sets the basic flags for the C language in CMake.
-# It also loads the available platform file for the system-compiler
-# if it exists.
-# It also loads a system - compiler - processor (or target hardware)
-# specific file, which is mainly useful for crosscompiling and embedded systems.
-
-include(CMakeLanguageInformation)
-
-# some compilers use different extensions (e.g. sdcc uses .rel)
-# so set the extension here first so it can be overridden by the compiler specific file
-if(UNIX)
-  set(CMAKE_C_OUTPUT_EXTENSION .o)
-else()
-  set(CMAKE_C_OUTPUT_EXTENSION .obj)
-endif()
-
-set(_INCLUDED_FILE 0)
-
-# Load compiler-specific information.
-if(CMAKE_C_COMPILER_ID)
-  include(Compiler/${CMAKE_C_COMPILER_ID}-C OPTIONAL)
-endif()
-
-set(CMAKE_BASE_NAME)
-get_filename_component(CMAKE_BASE_NAME "${CMAKE_C_COMPILER}" NAME_WE)
-if(CMAKE_COMPILER_IS_GNUCC)
-  set(CMAKE_BASE_NAME gcc)
-endif()
-
-
-# load a hardware specific file, mostly useful for embedded compilers
-if(CMAKE_SYSTEM_PROCESSOR)
-  if(CMAKE_C_COMPILER_ID)
-    include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_C_COMPILER_ID}-C-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL RESULT_VARIABLE _INCLUDED_FILE)
-  endif()
-  if (NOT _INCLUDED_FILE)
-    include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_BASE_NAME}-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL)
-  endif ()
-endif()
-
-
-# load the system- and compiler specific files
-if(CMAKE_C_COMPILER_ID)
-  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_C_COMPILER_ID}-C
-    OPTIONAL RESULT_VARIABLE _INCLUDED_FILE)
-endif()
-if (NOT _INCLUDED_FILE)
-  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_BASE_NAME}
-    OPTIONAL RESULT_VARIABLE _INCLUDED_FILE)
-endif ()
-
-# load any compiler-wrapper specific information
-if (CMAKE_C_COMPILER_WRAPPER)
-  __cmake_include_compiler_wrapper(C)
-endif ()
-
-# We specify the compiler information in the system file for some
-# platforms, but this language may not have been enabled when the file
-# was first included.  Include it again to get the language info.
-# Remove this when all compiler info is removed from system files.
-if (NOT _INCLUDED_FILE)
-  include(Platform/${CMAKE_SYSTEM_NAME} OPTIONAL)
-endif ()
-
-if(CMAKE_C_SIZEOF_DATA_PTR)
-  foreach(f ${CMAKE_C_ABI_FILES})
-    include(${f})
-  endforeach()
-  unset(CMAKE_C_ABI_FILES)
-endif()
-
-# This should be included before the _INIT variables are
-# used to initialize the cache.  Since the rule variables
-# have if blocks on them, users can still define them here.
-# But, it should still be after the platform file so changes can
-# be made to those values.
-
-if(CMAKE_USER_MAKE_RULES_OVERRIDE)
-  # Save the full path of the file so try_compile can use it.
-  include(${CMAKE_USER_MAKE_RULES_OVERRIDE} RESULT_VARIABLE _override)
-  set(CMAKE_USER_MAKE_RULES_OVERRIDE "${_override}")
-endif()
-
-if(CMAKE_USER_MAKE_RULES_OVERRIDE_C)
-  # Save the full path of the file so try_compile can use it.
-  include(${CMAKE_USER_MAKE_RULES_OVERRIDE_C} RESULT_VARIABLE _override)
-  set(CMAKE_USER_MAKE_RULES_OVERRIDE_C "${_override}")
-endif()
-
-
-# for most systems a module is the same as a shared library
-# so unless the variable CMAKE_MODULE_EXISTS is set just
-# copy the values from the LIBRARY variables
-if(NOT CMAKE_MODULE_EXISTS)
-  set(CMAKE_SHARED_MODULE_C_FLAGS ${CMAKE_SHARED_LIBRARY_C_FLAGS})
-  set(CMAKE_SHARED_MODULE_CREATE_C_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS})
-endif()
-
-set(CMAKE_C_FLAGS_INIT "$ENV{CFLAGS} ${CMAKE_C_FLAGS_INIT}")
-
-cmake_initialize_per_config_variable(CMAKE_C_FLAGS "Flags used by the C compiler")
-
-if(CMAKE_C_STANDARD_LIBRARIES_INIT)
-  set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES_INIT}"
-    CACHE STRING "Libraries linked by default with all C applications.")
-  mark_as_advanced(CMAKE_C_STANDARD_LIBRARIES)
-endif()
-
-if(NOT CMAKE_C_COMPILER_LAUNCHER AND DEFINED ENV{CMAKE_C_COMPILER_LAUNCHER})
-  set(CMAKE_C_COMPILER_LAUNCHER "$ENV{CMAKE_C_COMPILER_LAUNCHER}"
-    CACHE STRING "Compiler launcher for C.")
-endif()
-
-include(CMakeCommonLanguageInclude)
-
-# now define the following rule variables
-
-# CMAKE_C_CREATE_SHARED_LIBRARY
-# CMAKE_C_CREATE_SHARED_MODULE
-# CMAKE_C_COMPILE_OBJECT
-# CMAKE_C_LINK_EXECUTABLE
-
-# variables supplied by the generator at use time
-# <TARGET>
-# <TARGET_BASE> the target without the suffix
-# <OBJECTS>
-# <OBJECT>
-# <LINK_LIBRARIES>
-# <FLAGS>
-# <LINK_FLAGS>
-
-# C compiler information
-# <CMAKE_C_COMPILER>
-# <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS>
-# <CMAKE_SHARED_MODULE_CREATE_C_FLAGS>
-# <CMAKE_C_LINK_FLAGS>
-
-# Static library tools
-# <CMAKE_AR>
-# <CMAKE_RANLIB>
-
-
-# create a C shared library
-if(NOT CMAKE_C_CREATE_SHARED_LIBRARY)
-  set(CMAKE_C_CREATE_SHARED_LIBRARY
-      "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_C_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
-endif()
-
-# create a C shared module just copy the shared library rule
-if(NOT CMAKE_C_CREATE_SHARED_MODULE)
-  set(CMAKE_C_CREATE_SHARED_MODULE ${CMAKE_C_CREATE_SHARED_LIBRARY})
-endif()
-
-# Create a static archive incrementally for large object file counts.
-# If CMAKE_C_CREATE_STATIC_LIBRARY is set it will override these.
-if(NOT DEFINED CMAKE_C_ARCHIVE_CREATE)
-  set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> qc <TARGET> <LINK_FLAGS> <OBJECTS>")
-endif()
-if(NOT DEFINED CMAKE_C_ARCHIVE_APPEND)
-  set(CMAKE_C_ARCHIVE_APPEND "<CMAKE_AR> q <TARGET> <LINK_FLAGS> <OBJECTS>")
-endif()
-if(NOT DEFINED CMAKE_C_ARCHIVE_FINISH)
-  set(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> <TARGET>")
-endif()
-
-# compile a C file into an object file
-if(NOT CMAKE_C_COMPILE_OBJECT)
-  set(CMAKE_C_COMPILE_OBJECT
-    "<CMAKE_C_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>")
-endif()
-
-if(NOT CMAKE_C_LINK_EXECUTABLE)
-  set(CMAKE_C_LINK_EXECUTABLE
-    "<CMAKE_C_COMPILER> <FLAGS> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
-endif()
-
-if(NOT CMAKE_EXECUTABLE_RUNTIME_C_FLAG)
-  set(CMAKE_EXECUTABLE_RUNTIME_C_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG})
-endif()
-
-if(NOT CMAKE_EXECUTABLE_RUNTIME_C_FLAG_SEP)
-  set(CMAKE_EXECUTABLE_RUNTIME_C_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP})
-endif()
-
-if(NOT CMAKE_EXECUTABLE_RPATH_LINK_C_FLAG)
-  set(CMAKE_EXECUTABLE_RPATH_LINK_C_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG})
-endif()
-
-set(CMAKE_C_INFORMATION_LOADED 1)
-
-
diff --git a/share/cmake-3.18/Modules/CMakeCSharpCompilerId.cs.in b/share/cmake-3.18/Modules/CMakeCSharpCompilerId.cs.in
deleted file mode 100644
index 987f63a..0000000
--- a/share/cmake-3.18/Modules/CMakeCSharpCompilerId.cs.in
+++ /dev/null
@@ -1,63 +0,0 @@
-using System;
-
-namespace CSharp
-{
-    public class CSharpApp
-    {
-        const string InfoCompiler = "INFO:compiler[Microsoft "
-#if PlatformToolsetv100
-        + "Visual Studio"
-#elif PlatformToolsetv110
-        + "Visual Studio"
-#elif PlatformToolsetv120
-        + "Visual Studio"
-#elif PlatformToolsetv140
-        + "Visual Studio"
-#elif PlatformToolsetv141
-        + "Visual Studio"
-#else
-        + "unknown"
-#endif
-        + "]";
-
-        const string InfoPlatform = "INFO:platform[Windows]";
-
-        const string InfoArchitecture = "INFO:arch["
-#if Platformx64
-        + "x64"
-#elif Platformx86
-        + "x86"
-#elif PlatformxWin32
-        + "Win32]"
-#else
-        + "unknown"
-#endif
-        + "]";
-
-        const string InfoCompilerVersion = "INFO:compiler_version["
-#if PlatformToolsetv100
-        + "2010"
-#elif PlatformToolsetv110
-        + "2012"
-#elif PlatformToolsetv120
-        + "2013"
-#elif PlatformToolsetv140
-        + "2015"
-#elif PlatformToolsetv141
-        + "2017"
-#else
-        + "9999"
-#endif
-        + "]";
-
-        static void Main(string[] args)
-        {
-            // we have to print the lines to make sure
-            // the compiler does not optimize them away ...
-            System.Console.WriteLine(InfoCompiler);
-            System.Console.WriteLine(InfoPlatform);
-            System.Console.WriteLine(InfoArchitecture);
-            System.Console.WriteLine(InfoCompilerVersion);
-        }
-    }
-}
diff --git a/share/cmake-3.18/Modules/CMakeCUDACompiler.cmake.in b/share/cmake-3.18/Modules/CMakeCUDACompiler.cmake.in
deleted file mode 100644
index 704ad09..0000000
--- a/share/cmake-3.18/Modules/CMakeCUDACompiler.cmake.in
+++ /dev/null
@@ -1,64 +0,0 @@
-set(CMAKE_CUDA_COMPILER "@CMAKE_CUDA_COMPILER@")
-set(CMAKE_CUDA_HOST_COMPILER "@CMAKE_CUDA_HOST_COMPILER@")
-set(CMAKE_CUDA_HOST_LINK_LAUNCHER "@CMAKE_CUDA_HOST_LINK_LAUNCHER@")
-set(CMAKE_CUDA_COMPILER_ID "@CMAKE_CUDA_COMPILER_ID@")
-set(CMAKE_CUDA_COMPILER_VERSION "@CMAKE_CUDA_COMPILER_VERSION@")
-set(CMAKE_CUDA_STANDARD_COMPUTED_DEFAULT "@CMAKE_CUDA_STANDARD_COMPUTED_DEFAULT@")
-set(CMAKE_CUDA_COMPILE_FEATURES "@CMAKE_CUDA_COMPILE_FEATURES@")
-set(CMAKE_CUDA03_COMPILE_FEATURES "@CMAKE_CUDA03_COMPILE_FEATURES@")
-set(CMAKE_CUDA11_COMPILE_FEATURES "@CMAKE_CUDA11_COMPILE_FEATURES@")
-set(CMAKE_CUDA14_COMPILE_FEATURES "@CMAKE_CUDA14_COMPILE_FEATURES@")
-set(CMAKE_CUDA17_COMPILE_FEATURES "@CMAKE_CUDA17_COMPILE_FEATURES@")
-set(CMAKE_CUDA20_COMPILE_FEATURES "@CMAKE_CUDA20_COMPILE_FEATURES@")
-
-set(CMAKE_CUDA_PLATFORM_ID "@CMAKE_CUDA_PLATFORM_ID@")
-set(CMAKE_CUDA_SIMULATE_ID "@CMAKE_CUDA_SIMULATE_ID@")
-set(CMAKE_CUDA_COMPILER_FRONTEND_VARIANT "@CMAKE_CUDA_COMPILER_FRONTEND_VARIANT@")
-set(CMAKE_CUDA_SIMULATE_VERSION "@CMAKE_CUDA_SIMULATE_VERSION@")
-@SET_MSVC_CUDA_ARCHITECTURE_ID@
-@_SET_CMAKE_CUDA_COMPILER_SYSROOT@
-
-set(CMAKE_CUDA_COMPILER_ENV_VAR "CUDACXX")
-set(CMAKE_CUDA_HOST_COMPILER_ENV_VAR "CUDAHOSTCXX")
-
-set(CMAKE_CUDA_COMPILER_LOADED 1)
-set(CMAKE_CUDA_COMPILER_ID_RUN 1)
-set(CMAKE_CUDA_SOURCE_FILE_EXTENSIONS cu)
-set(CMAKE_CUDA_LINKER_PREFERENCE 15)
-set(CMAKE_CUDA_LINKER_PREFERENCE_PROPAGATES 1)
-
-set(CMAKE_CUDA_SIZEOF_DATA_PTR "@CMAKE_CUDA_SIZEOF_DATA_PTR@")
-set(CMAKE_CUDA_COMPILER_ABI "@CMAKE_CUDA_COMPILER_ABI@")
-set(CMAKE_CUDA_LIBRARY_ARCHITECTURE "@CMAKE_CUDA_LIBRARY_ARCHITECTURE@")
-
-if(CMAKE_CUDA_SIZEOF_DATA_PTR)
-  set(CMAKE_SIZEOF_VOID_P "${CMAKE_CUDA_SIZEOF_DATA_PTR}")
-endif()
-
-if(CMAKE_CUDA_COMPILER_ABI)
-  set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CUDA_COMPILER_ABI}")
-endif()
-
-if(CMAKE_CUDA_LIBRARY_ARCHITECTURE)
-  set(CMAKE_LIBRARY_ARCHITECTURE "@CMAKE_CUDA_LIBRARY_ARCHITECTURE@")
-endif()
-
-set(CMAKE_CUDA_COMPILER_TOOLKIT_ROOT "@CMAKE_CUDA_COMPILER_TOOLKIT_ROOT@")
-set(CMAKE_CUDA_COMPILER_LIBRARY_ROOT "@CMAKE_CUDA_COMPILER_LIBRARY_ROOT@")
-
-set(CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES "@CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES@")
-
-set(CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES "@CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES@")
-set(CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES "@CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES@")
-set(CMAKE_CUDA_HOST_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "@CMAKE_CUDA_HOST_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES@")
-
-set(CMAKE_CUDA_IMPLICIT_INCLUDE_DIRECTORIES "@CMAKE_CUDA_IMPLICIT_INCLUDE_DIRECTORIES@")
-set(CMAKE_CUDA_IMPLICIT_LINK_LIBRARIES "@CMAKE_CUDA_IMPLICIT_LINK_LIBRARIES@")
-set(CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES "@CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES@")
-set(CMAKE_CUDA_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "@CMAKE_CUDA_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES@")
-
-@_SET_CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT@
-
-set(CMAKE_LINKER "@CMAKE_LINKER@")
-set(CMAKE_AR "@CMAKE_AR@")
-set(CMAKE_MT "@CMAKE_MT@")
diff --git a/share/cmake-3.18/Modules/CMakeCUDACompilerABI.cu b/share/cmake-3.18/Modules/CMakeCUDACompilerABI.cu
deleted file mode 100644
index 702a7c5..0000000
--- a/share/cmake-3.18/Modules/CMakeCUDACompilerABI.cu
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef __CUDACC__
-#  error "A C or C++ compiler has been selected for CUDA"
-#endif
-
-#include "CMakeCompilerABI.h"
-
-int main(int argc, char* argv[])
-{
-  int require = 0;
-  require += info_sizeof_dptr[argc];
-#if defined(ABI_ID)
-  require += info_abi[argc];
-#endif
-  (void)argv;
-  return require;
-}
diff --git a/share/cmake-3.18/Modules/CMakeCUDACompilerId.cu.in b/share/cmake-3.18/Modules/CMakeCUDACompilerId.cu.in
deleted file mode 100644
index 2055de2..0000000
--- a/share/cmake-3.18/Modules/CMakeCUDACompilerId.cu.in
+++ /dev/null
@@ -1,52 +0,0 @@
-#ifndef __CUDACC__
-# error "A C or C++ compiler has been selected for CUDA"
-#endif
-
-@CMAKE_CUDA_COMPILER_ID_CONTENT@
-
-/* Construct the string literal in pieces to prevent the source from
-   getting matched.  Store it in a pointer rather than an array
-   because some compilers will just produce instructions to fill the
-   array rather than assigning a pointer to a static array.  */
-char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
-#ifdef SIMULATE_ID
-char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
-#endif
-
-@CMAKE_CUDA_COMPILER_ID_PLATFORM_CONTENT@
-@CMAKE_CUDA_COMPILER_ID_ERROR_FOR_TEST@
-
-const char* info_language_dialect_default = "INFO" ":" "dialect_default["
-#if __cplusplus > 201703L
-  "20"
-#elif __cplusplus >= 201703L
-  "17"
-#elif __cplusplus >= 201402L
-  "14"
-#elif __cplusplus >= 201103L
-  "11"
-#else
-  "03"
-#endif
-"]";
-
-/*--------------------------------------------------------------------------*/
-
-int main(int argc, char* argv[])
-{
-  int require = 0;
-  require += info_compiler[argc];
-  require += info_platform[argc];
-#ifdef COMPILER_VERSION_MAJOR
-  require += info_version[argc];
-#endif
-#ifdef SIMULATE_ID
-  require += info_simulate[argc];
-#endif
-#ifdef SIMULATE_VERSION_MAJOR
-  require += info_simulate_version[argc];
-#endif
-  require += info_language_dialect_default[argc];
-  (void)argv;
-  return require;
-}
diff --git a/share/cmake-3.18/Modules/CMakeCUDAInformation.cmake b/share/cmake-3.18/Modules/CMakeCUDAInformation.cmake
deleted file mode 100644
index f9f7574..0000000
--- a/share/cmake-3.18/Modules/CMakeCUDAInformation.cmake
+++ /dev/null
@@ -1,205 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-if(UNIX)
-  set(CMAKE_CUDA_OUTPUT_EXTENSION .o)
-else()
-  set(CMAKE_CUDA_OUTPUT_EXTENSION .obj)
-endif()
-set(CMAKE_INCLUDE_FLAG_CUDA "-I")
-
-# Set implicit links early so compiler-specific modules can use them.
-set(__IMPLICT_LINKS )
-foreach(dir ${CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES})
-  string(APPEND __IMPLICT_LINKS " -L\"${dir}\"")
-endforeach()
-foreach(lib ${CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES})
-  if(${lib} MATCHES "/")
-    string(APPEND __IMPLICT_LINKS " \"${lib}\"")
-  else()
-    string(APPEND __IMPLICT_LINKS " -l${lib}")
-  endif()
-endforeach()
-
-# Load compiler-specific information.
-if(CMAKE_CUDA_COMPILER_ID)
-  include(Compiler/${CMAKE_CUDA_COMPILER_ID}-CUDA OPTIONAL)
-endif()
-
-# load the system- and compiler specific files
-if(CMAKE_CUDA_COMPILER_ID)
-  # load a hardware specific file, mostly useful for embedded compilers
-  if(CMAKE_SYSTEM_PROCESSOR)
-    include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_CUDA_COMPILER_ID}-CUDA-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL)
-  endif()
-  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_CUDA_COMPILER_ID}-CUDA OPTIONAL)
-endif()
-
-
-if(NOT CMAKE_SHARED_LIBRARY_RUNTIME_CUDA_FLAG)
-  set(CMAKE_SHARED_LIBRARY_RUNTIME_CUDA_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG})
-endif()
-
-if(NOT CMAKE_SHARED_LIBRARY_RUNTIME_CUDA_FLAG_SEP)
-  set(CMAKE_SHARED_LIBRARY_RUNTIME_CUDA_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP})
-endif()
-
-if(NOT CMAKE_SHARED_LIBRARY_RPATH_LINK_CUDA_FLAG)
-  set(CMAKE_SHARED_LIBRARY_RPATH_LINK_CUDA_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG})
-endif()
-
-if(NOT DEFINED CMAKE_EXE_EXPORTS_CUDA_FLAG)
-  set(CMAKE_EXE_EXPORTS_CUDA_FLAG ${CMAKE_EXE_EXPORTS_C_FLAG})
-endif()
-
-if(NOT DEFINED CMAKE_SHARED_LIBRARY_SONAME_CUDA_FLAG)
-  set(CMAKE_SHARED_LIBRARY_SONAME_CUDA_FLAG ${CMAKE_SHARED_LIBRARY_SONAME_C_FLAG})
-endif()
-
-if(NOT CMAKE_EXECUTABLE_RUNTIME_CUDA_FLAG)
-  set(CMAKE_EXECUTABLE_RUNTIME_CUDA_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_CUDA_FLAG})
-endif()
-
-if(NOT CMAKE_EXECUTABLE_RUNTIME_CUDA_FLAG_SEP)
-  set(CMAKE_EXECUTABLE_RUNTIME_CUDA_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_CUDA_FLAG_SEP})
-endif()
-
-if(NOT CMAKE_EXECUTABLE_RPATH_LINK_CUDA_FLAG)
-  set(CMAKE_EXECUTABLE_RPATH_LINK_CUDA_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_CUDA_FLAG})
-endif()
-
-if(NOT DEFINED CMAKE_SHARED_LIBRARY_LINK_CUDA_WITH_RUNTIME_PATH)
-  set(CMAKE_SHARED_LIBRARY_LINK_CUDA_WITH_RUNTIME_PATH ${CMAKE_SHARED_LIBRARY_LINK_C_WITH_RUNTIME_PATH})
-endif()
-
-
-# for most systems a module is the same as a shared library
-# so unless the variable CMAKE_MODULE_EXISTS is set just
-# copy the values from the LIBRARY variables
-if(NOT CMAKE_MODULE_EXISTS)
-  set(CMAKE_SHARED_MODULE_CUDA_FLAGS ${CMAKE_SHARED_LIBRARY_CUDA_FLAGS})
-  set(CMAKE_SHARED_MODULE_CREATE_CUDA_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_CUDA_FLAGS})
-endif()
-
-# add the flags to the cache based
-# on the initial values computed in the platform/*.cmake files
-# use _INIT variables so that this only happens the first time
-# and you can set these flags in the cmake cache
-set(CMAKE_CUDA_FLAGS_INIT "$ENV{CUDAFLAGS} ${CMAKE_CUDA_FLAGS_INIT}")
-
-cmake_initialize_per_config_variable(CMAKE_CUDA_FLAGS "Flags used by the CUDA compiler")
-
-if(CMAKE_CUDA_STANDARD_LIBRARIES_INIT)
-  set(CMAKE_CUDA_STANDARD_LIBRARIES "${CMAKE_CUDA_STANDARD_LIBRARIES_INIT}"
-    CACHE STRING "Libraries linked by default with all CUDA applications.")
-  mark_as_advanced(CMAKE_CUDA_STANDARD_LIBRARIES)
-endif()
-
-if(NOT CMAKE_CUDA_COMPILER_LAUNCHER AND DEFINED ENV{CMAKE_CUDA_COMPILER_LAUNCHER})
-  set(CMAKE_CUDA_COMPILER_LAUNCHER "$ENV{CMAKE_CUDA_COMPILER_LAUNCHER}"
-    CACHE STRING "Compiler launcher for CUDA.")
-endif()
-
-include(CMakeCommonLanguageInclude)
-
-# now define the following rules:
-# CMAKE_CUDA_CREATE_SHARED_LIBRARY
-# CMAKE_CUDA_CREATE_SHARED_MODULE
-# CMAKE_CUDA_COMPILE_WHOLE_COMPILATION
-# CMAKE_CUDA_COMPILE_PTX_COMPILATION
-# CMAKE_CUDA_COMPILE_SEPARABLE_COMPILATION
-# CMAKE_CUDA_LINK_EXECUTABLE
-
-if(CMAKE_CUDA_HOST_COMPILER AND CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA")
-  string(APPEND _CMAKE_CUDA_EXTRA_FLAGS " -ccbin=<CMAKE_CUDA_HOST_COMPILER>")
-endif()
-
-# create a shared library
-if(NOT CMAKE_CUDA_CREATE_SHARED_LIBRARY)
-  set(CMAKE_CUDA_CREATE_SHARED_LIBRARY
-      "<CMAKE_CUDA_HOST_LINK_LAUNCHER> <CMAKE_SHARED_LIBRARY_CUDA_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CUDA_FLAGS> <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>${__IMPLICT_LINKS}")
-endif()
-
-# create a shared module copy the shared library rule by default
-if(NOT CMAKE_CUDA_CREATE_SHARED_MODULE)
-  set(CMAKE_CUDA_CREATE_SHARED_MODULE ${CMAKE_CUDA_CREATE_SHARED_LIBRARY})
-endif()
-
-# Create a static archive incrementally for large object file counts.
-if(NOT DEFINED CMAKE_CUDA_ARCHIVE_CREATE)
-  set(CMAKE_CUDA_ARCHIVE_CREATE "<CMAKE_AR> qc <TARGET> <LINK_FLAGS> <OBJECTS>")
-endif()
-if(NOT DEFINED CMAKE_CUDA_ARCHIVE_APPEND)
-  set(CMAKE_CUDA_ARCHIVE_APPEND "<CMAKE_AR> q <TARGET> <LINK_FLAGS> <OBJECTS>")
-endif()
-if(NOT DEFINED CMAKE_CUDA_ARCHIVE_FINISH)
-  set(CMAKE_CUDA_ARCHIVE_FINISH "<CMAKE_RANLIB> <TARGET>")
-endif()
-
-#Specify how to compile when ptx has been requested
-if(NOT CMAKE_CUDA_COMPILE_PTX_COMPILATION)
-  set(CMAKE_CUDA_COMPILE_PTX_COMPILATION
-    "<CMAKE_CUDA_COMPILER> ${_CMAKE_CUDA_EXTRA_FLAGS} <DEFINES> <INCLUDES> <FLAGS> ${_CMAKE_COMPILE_AS_CUDA_FLAG} ${_CMAKE_CUDA_PTX_FLAG} <SOURCE> -o <OBJECT>")
-endif()
-
-#Specify how to compile when separable compilation has been requested
-if(NOT CMAKE_CUDA_COMPILE_SEPARABLE_COMPILATION)
-  set(CMAKE_CUDA_COMPILE_SEPARABLE_COMPILATION
-    "<CMAKE_CUDA_COMPILER> ${_CMAKE_CUDA_EXTRA_FLAGS} <DEFINES> <INCLUDES> <FLAGS> ${_CMAKE_COMPILE_AS_CUDA_FLAG} -dc <SOURCE> -o <OBJECT>")
-endif()
-
-#Specify how to compile when whole compilation has been requested
-if(NOT CMAKE_CUDA_COMPILE_WHOLE_COMPILATION)
-  set(CMAKE_CUDA_COMPILE_WHOLE_COMPILATION
-    "<CMAKE_CUDA_COMPILER> ${_CMAKE_CUDA_EXTRA_FLAGS} <DEFINES> <INCLUDES> <FLAGS> ${_CMAKE_COMPILE_AS_CUDA_FLAG} -c <SOURCE> -o <OBJECT>")
-endif()
-
-if(CMAKE_GENERATOR STREQUAL "Ninja" AND NOT CMAKE_DEPFILE_FLAGS_CUDA)
-  set(CMAKE_CUDA_COMPILE_DEPENDENCY_DETECTION
-    "<CMAKE_CUDA_COMPILER> ${_CMAKE_CUDA_EXTRA_FLAGS} <DEFINES> <INCLUDES> <FLAGS> ${_CMAKE_COMPILE_AS_CUDA_FLAG} -M <SOURCE> -MT <OBJECT> -o $DEP_FILE")
-  #The Ninja generator uses the make file dependency files to determine what
-  #files need to be recompiled. Unfortunately, nvcc < 10.2 doesn't support building
-  #a source file and generating the dependencies of said file in a single
-  #invocation. Instead we have to state that you need to chain two commands.
-  #
-  #The makefile generators uses the custom CMake dependency scanner, and thus
-  #it is exempt from this logic.
-  list(APPEND CMAKE_CUDA_COMPILE_PTX_COMPILATION "${CMAKE_CUDA_COMPILE_DEPENDENCY_DETECTION}")
-  list(APPEND CMAKE_CUDA_COMPILE_SEPARABLE_COMPILATION "${CMAKE_CUDA_COMPILE_DEPENDENCY_DETECTION}")
-  list(APPEND CMAKE_CUDA_COMPILE_WHOLE_COMPILATION "${CMAKE_CUDA_COMPILE_DEPENDENCY_DETECTION}")
-endif()
-
-# compile a cu file into an executable
-if(NOT CMAKE_CUDA_LINK_EXECUTABLE)
-  set(CMAKE_CUDA_LINK_EXECUTABLE
-    "<CMAKE_CUDA_HOST_LINK_LAUNCHER> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>${__IMPLICT_LINKS}")
-endif()
-
-# Add implicit host link directories that contain device libraries
-# to the device link line.
-set(__IMPLICT_DLINK_DIRS ${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES})
-if(__IMPLICT_DLINK_DIRS)
-  list(REMOVE_ITEM __IMPLICT_DLINK_DIRS ${CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES})
-endif()
-set(__IMPLICT_DLINK_FLAGS )
-foreach(dir ${__IMPLICT_DLINK_DIRS})
-  if(EXISTS "${dir}/libcurand_static.a")
-    string(APPEND __IMPLICT_DLINK_FLAGS " -L\"${dir}\"")
-  endif()
-endforeach()
-unset(__IMPLICT_DLINK_DIRS)
-
-
-#These are used when linking relocatable (dc) cuda code
-if(NOT CMAKE_CUDA_DEVICE_LINK_LIBRARY)
-  set(CMAKE_CUDA_DEVICE_LINK_LIBRARY
-    "<CMAKE_CUDA_COMPILER> ${_CMAKE_CUDA_EXTRA_FLAGS} <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> ${CMAKE_CUDA_COMPILE_OPTIONS_PIC} ${_CMAKE_CUDA_EXTRA_DEVICE_LINK_FLAGS} -shared -dlink <OBJECTS> -o <TARGET> <LINK_LIBRARIES>${__IMPLICT_DLINK_FLAGS}")
-endif()
-if(NOT CMAKE_CUDA_DEVICE_LINK_EXECUTABLE)
-  set(CMAKE_CUDA_DEVICE_LINK_EXECUTABLE
-    "<CMAKE_CUDA_COMPILER> ${_CMAKE_CUDA_EXTRA_FLAGS} <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> ${CMAKE_CUDA_COMPILE_OPTIONS_PIC} ${_CMAKE_CUDA_EXTRA_DEVICE_LINK_FLAGS} -shared -dlink <OBJECTS> -o <TARGET> <LINK_LIBRARIES>${__IMPLICT_DLINK_FLAGS}")
-endif()
-
-unset(__IMPLICT_DLINK_FLAGS)
-
-set(CMAKE_CUDA_INFORMATION_LOADED 1)
diff --git a/share/cmake-3.18/Modules/CMakeCXXCompiler.cmake.in b/share/cmake-3.18/Modules/CMakeCXXCompiler.cmake.in
deleted file mode 100644
index 09bdc23..0000000
--- a/share/cmake-3.18/Modules/CMakeCXXCompiler.cmake.in
+++ /dev/null
@@ -1,89 +0,0 @@
-set(CMAKE_CXX_COMPILER "@CMAKE_CXX_COMPILER@")
-set(CMAKE_CXX_COMPILER_ARG1 "@CMAKE_CXX_COMPILER_ARG1@")
-set(CMAKE_CXX_COMPILER_ID "@CMAKE_CXX_COMPILER_ID@")
-set(CMAKE_CXX_COMPILER_VERSION "@CMAKE_CXX_COMPILER_VERSION@")
-set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "@CMAKE_CXX_COMPILER_VERSION_INTERNAL@")
-set(CMAKE_CXX_COMPILER_WRAPPER "@CMAKE_CXX_COMPILER_WRAPPER@")
-set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "@CMAKE_CXX_STANDARD_COMPUTED_DEFAULT@")
-set(CMAKE_CXX_COMPILE_FEATURES "@CMAKE_CXX_COMPILE_FEATURES@")
-set(CMAKE_CXX98_COMPILE_FEATURES "@CMAKE_CXX98_COMPILE_FEATURES@")
-set(CMAKE_CXX11_COMPILE_FEATURES "@CMAKE_CXX11_COMPILE_FEATURES@")
-set(CMAKE_CXX14_COMPILE_FEATURES "@CMAKE_CXX14_COMPILE_FEATURES@")
-set(CMAKE_CXX17_COMPILE_FEATURES "@CMAKE_CXX17_COMPILE_FEATURES@")
-set(CMAKE_CXX20_COMPILE_FEATURES "@CMAKE_CXX20_COMPILE_FEATURES@")
-
-set(CMAKE_CXX_PLATFORM_ID "@CMAKE_CXX_PLATFORM_ID@")
-set(CMAKE_CXX_SIMULATE_ID "@CMAKE_CXX_SIMULATE_ID@")
-set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "@CMAKE_CXX_COMPILER_FRONTEND_VARIANT@")
-set(CMAKE_CXX_SIMULATE_VERSION "@CMAKE_CXX_SIMULATE_VERSION@")
-@_SET_CMAKE_CXX_COMPILER_ARCHITECTURE_ID@
-@_SET_CMAKE_CXX_COMPILER_SYSROOT@
-@SET_MSVC_CXX_ARCHITECTURE_ID@
-@SET_CMAKE_XCODE_ARCHS@
-set(CMAKE_AR "@CMAKE_AR@")
-set(CMAKE_CXX_COMPILER_AR "@CMAKE_CXX_COMPILER_AR@")
-set(CMAKE_RANLIB "@CMAKE_RANLIB@")
-set(CMAKE_CXX_COMPILER_RANLIB "@CMAKE_CXX_COMPILER_RANLIB@")
-set(CMAKE_LINKER "@CMAKE_LINKER@")
-set(CMAKE_MT "@CMAKE_MT@")
-set(CMAKE_COMPILER_IS_GNUCXX @CMAKE_COMPILER_IS_GNUCXX@)
-set(CMAKE_CXX_COMPILER_LOADED 1)
-set(CMAKE_CXX_COMPILER_WORKS @CMAKE_CXX_COMPILER_WORKS@)
-set(CMAKE_CXX_ABI_COMPILED @CMAKE_CXX_ABI_COMPILED@)
-set(CMAKE_COMPILER_IS_MINGW @CMAKE_COMPILER_IS_MINGW@)
-set(CMAKE_COMPILER_IS_CYGWIN @CMAKE_COMPILER_IS_CYGWIN@)
-if(CMAKE_COMPILER_IS_CYGWIN)
-  set(CYGWIN 1)
-  set(UNIX 1)
-endif()
-
-set(CMAKE_CXX_COMPILER_ENV_VAR "CXX")
-
-if(CMAKE_COMPILER_IS_MINGW)
-  set(MINGW 1)
-endif()
-set(CMAKE_CXX_COMPILER_ID_RUN 1)
-set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;CPP)
-set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC)
-
-foreach (lang C OBJC OBJCXX)
-  if (CMAKE_${lang}_COMPILER_ID_RUN)
-    foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS)
-      list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension})
-    endforeach()
-  endif()
-endforeach()
-
-set(CMAKE_CXX_LINKER_PREFERENCE 30)
-set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1)
-
-# Save compiler ABI information.
-set(CMAKE_CXX_SIZEOF_DATA_PTR "@CMAKE_CXX_SIZEOF_DATA_PTR@")
-set(CMAKE_CXX_COMPILER_ABI "@CMAKE_CXX_COMPILER_ABI@")
-set(CMAKE_CXX_LIBRARY_ARCHITECTURE "@CMAKE_CXX_LIBRARY_ARCHITECTURE@")
-
-if(CMAKE_CXX_SIZEOF_DATA_PTR)
-  set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}")
-endif()
-
-if(CMAKE_CXX_COMPILER_ABI)
-  set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}")
-endif()
-
-if(CMAKE_CXX_LIBRARY_ARCHITECTURE)
-  set(CMAKE_LIBRARY_ARCHITECTURE "@CMAKE_CXX_LIBRARY_ARCHITECTURE@")
-endif()
-
-set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "@CMAKE_CXX_CL_SHOWINCLUDES_PREFIX@")
-if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX)
-  set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}")
-endif()
-
-@CMAKE_CXX_COMPILER_CUSTOM_CODE@
-@CMAKE_CXX_SYSROOT_FLAG_CODE@
-@CMAKE_CXX_OSX_DEPLOYMENT_TARGET_FLAG_CODE@
-
-set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "@CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES@")
-set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "@CMAKE_CXX_IMPLICIT_LINK_LIBRARIES@")
-set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "@CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES@")
-set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "@CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES@")
diff --git a/share/cmake-3.18/Modules/CMakeCXXCompilerABI.cpp b/share/cmake-3.18/Modules/CMakeCXXCompilerABI.cpp
deleted file mode 100644
index 2360534..0000000
--- a/share/cmake-3.18/Modules/CMakeCXXCompilerABI.cpp
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef __cplusplus
-#  error "A C compiler has been selected for C++."
-#endif
-
-#include "CMakeCompilerABI.h"
-
-int main(int argc, char* argv[])
-{
-  int require = 0;
-  require += info_sizeof_dptr[argc];
-#if defined(ABI_ID)
-  require += info_abi[argc];
-#endif
-  (void)argv;
-  return require;
-}
diff --git a/share/cmake-3.18/Modules/CMakeCXXCompilerId.cpp.in b/share/cmake-3.18/Modules/CMakeCXXCompilerId.cpp.in
deleted file mode 100644
index a743ce7..0000000
--- a/share/cmake-3.18/Modules/CMakeCXXCompilerId.cpp.in
+++ /dev/null
@@ -1,85 +0,0 @@
-/* This source file must have a .cpp extension so that all C++ compilers
-   recognize the extension without flags.  Borland does not know .cxx for
-   example.  */
-#ifndef __cplusplus
-# error "A C compiler has been selected for C++."
-#endif
-
-@CMAKE_CXX_COMPILER_ID_CONTENT@
-
-/* Construct the string literal in pieces to prevent the source from
-   getting matched.  Store it in a pointer rather than an array
-   because some compilers will just produce instructions to fill the
-   array rather than assigning a pointer to a static array.  */
-char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
-#ifdef SIMULATE_ID
-char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
-#endif
-
-#ifdef __QNXNTO__
-char const* qnxnto = "INFO" ":" "qnxnto[]";
-#endif
-
-#if defined(__CRAYXE) || defined(__CRAYXC)
-char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
-#endif
-
-@CMAKE_CXX_COMPILER_ID_PLATFORM_CONTENT@
-@CMAKE_CXX_COMPILER_ID_ERROR_FOR_TEST@
-
-#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L
-#  if defined(__INTEL_CXX11_MODE__)
-#    if defined(__cpp_aggregate_nsdmi)
-#      define CXX_STD 201402L
-#    else
-#      define CXX_STD 201103L
-#    endif
-#  else
-#    define CXX_STD 199711L
-#  endif
-#elif defined(_MSC_VER) && defined(_MSVC_LANG)
-#  define CXX_STD _MSVC_LANG
-#else
-#  define CXX_STD __cplusplus
-#endif
-
-const char* info_language_dialect_default = "INFO" ":" "dialect_default["
-#if CXX_STD > 201703L
-  "20"
-#elif CXX_STD >= 201703L
-  "17"
-#elif CXX_STD >= 201402L
-  "14"
-#elif CXX_STD >= 201103L
-  "11"
-#else
-  "98"
-#endif
-"]";
-
-/*--------------------------------------------------------------------------*/
-
-int main(int argc, char* argv[])
-{
-  int require = 0;
-  require += info_compiler[argc];
-  require += info_platform[argc];
-#ifdef COMPILER_VERSION_MAJOR
-  require += info_version[argc];
-#endif
-#ifdef COMPILER_VERSION_INTERNAL
-  require += info_version_internal[argc];
-#endif
-#ifdef SIMULATE_ID
-  require += info_simulate[argc];
-#endif
-#ifdef SIMULATE_VERSION_MAJOR
-  require += info_simulate_version[argc];
-#endif
-#if defined(__CRAYXE) || defined(__CRAYXC)
-  require += info_cray[argc];
-#endif
-  require += info_language_dialect_default[argc];
-  (void)argv;
-  return require;
-}
diff --git a/share/cmake-3.18/Modules/CMakeCXXInformation.cmake b/share/cmake-3.18/Modules/CMakeCXXInformation.cmake
deleted file mode 100644
index dbb4366..0000000
--- a/share/cmake-3.18/Modules/CMakeCXXInformation.cmake
+++ /dev/null
@@ -1,282 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# This file sets the basic flags for the C++ language in CMake.
-# It also loads the available platform file for the system-compiler
-# if it exists.
-# It also loads a system - compiler - processor (or target hardware)
-# specific file, which is mainly useful for crosscompiling and embedded systems.
-
-include(CMakeLanguageInformation)
-
-# some compilers use different extensions (e.g. sdcc uses .rel)
-# so set the extension here first so it can be overridden by the compiler specific file
-if(UNIX)
-  set(CMAKE_CXX_OUTPUT_EXTENSION .o)
-else()
-  set(CMAKE_CXX_OUTPUT_EXTENSION .obj)
-endif()
-
-set(_INCLUDED_FILE 0)
-
-# Load compiler-specific information.
-if(CMAKE_CXX_COMPILER_ID)
-  include(Compiler/${CMAKE_CXX_COMPILER_ID}-CXX OPTIONAL)
-endif()
-
-set(CMAKE_BASE_NAME)
-get_filename_component(CMAKE_BASE_NAME "${CMAKE_CXX_COMPILER}" NAME_WE)
-# since the gnu compiler has several names force g++
-if(CMAKE_COMPILER_IS_GNUCXX)
-  set(CMAKE_BASE_NAME g++)
-endif()
-
-
-# load a hardware specific file, mostly useful for embedded compilers
-if(CMAKE_SYSTEM_PROCESSOR)
-  if(CMAKE_CXX_COMPILER_ID)
-    include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_CXX_COMPILER_ID}-CXX-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL RESULT_VARIABLE _INCLUDED_FILE)
-  endif()
-  if (NOT _INCLUDED_FILE)
-    include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_BASE_NAME}-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL)
-  endif ()
-endif()
-
-# load the system- and compiler specific files
-if(CMAKE_CXX_COMPILER_ID)
-  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_CXX_COMPILER_ID}-CXX OPTIONAL RESULT_VARIABLE _INCLUDED_FILE)
-endif()
-if (NOT _INCLUDED_FILE)
-  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_BASE_NAME} OPTIONAL
-          RESULT_VARIABLE _INCLUDED_FILE)
-endif ()
-
-# load any compiler-wrapper specific information
-if (CMAKE_CXX_COMPILER_WRAPPER)
-  __cmake_include_compiler_wrapper(CXX)
-endif ()
-
-# We specify the compiler information in the system file for some
-# platforms, but this language may not have been enabled when the file
-# was first included.  Include it again to get the language info.
-# Remove this when all compiler info is removed from system files.
-if (NOT _INCLUDED_FILE)
-  include(Platform/${CMAKE_SYSTEM_NAME} OPTIONAL)
-endif ()
-
-if(CMAKE_CXX_SIZEOF_DATA_PTR)
-  foreach(f ${CMAKE_CXX_ABI_FILES})
-    include(${f})
-  endforeach()
-  unset(CMAKE_CXX_ABI_FILES)
-endif()
-
-# This should be included before the _INIT variables are
-# used to initialize the cache.  Since the rule variables
-# have if blocks on them, users can still define them here.
-# But, it should still be after the platform file so changes can
-# be made to those values.
-
-if(CMAKE_USER_MAKE_RULES_OVERRIDE)
-  # Save the full path of the file so try_compile can use it.
-  include(${CMAKE_USER_MAKE_RULES_OVERRIDE} RESULT_VARIABLE _override)
-  set(CMAKE_USER_MAKE_RULES_OVERRIDE "${_override}")
-endif()
-
-if(CMAKE_USER_MAKE_RULES_OVERRIDE_CXX)
-  # Save the full path of the file so try_compile can use it.
-  include(${CMAKE_USER_MAKE_RULES_OVERRIDE_CXX} RESULT_VARIABLE _override)
-  set(CMAKE_USER_MAKE_RULES_OVERRIDE_CXX "${_override}")
-endif()
-
-
-# Create a set of shared library variable specific to C++
-# For 90% of the systems, these are the same flags as the C versions
-# so if these are not set just copy the flags from the c version
-if(NOT CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS)
-  set(CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS})
-endif()
-
-if(NOT CMAKE_CXX_COMPILE_OPTIONS_PIC)
-  set(CMAKE_CXX_COMPILE_OPTIONS_PIC ${CMAKE_C_COMPILE_OPTIONS_PIC})
-endif()
-
-if(NOT CMAKE_CXX_COMPILE_OPTIONS_PIE)
-  set(CMAKE_CXX_COMPILE_OPTIONS_PIE ${CMAKE_C_COMPILE_OPTIONS_PIE})
-endif()
-if(NOT CMAKE_CXX_LINK_OPTIONS_PIE)
-  set(CMAKE_CXX_LINK_OPTIONS_PIE ${CMAKE_C_LINK_OPTIONS_PIE})
-endif()
-if(NOT CMAKE_CXX_LINK_OPTIONS_NO_PIE)
-  set(CMAKE_CXX_LINK_OPTIONS_NO_PIE ${CMAKE_C_LINK_OPTIONS_NO_PIE})
-endif()
-
-if(NOT CMAKE_CXX_COMPILE_OPTIONS_DLL)
-  set(CMAKE_CXX_COMPILE_OPTIONS_DLL ${CMAKE_C_COMPILE_OPTIONS_DLL})
-endif()
-
-if(NOT CMAKE_SHARED_LIBRARY_CXX_FLAGS)
-  set(CMAKE_SHARED_LIBRARY_CXX_FLAGS ${CMAKE_SHARED_LIBRARY_C_FLAGS})
-endif()
-
-if(NOT DEFINED CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS)
-  set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS ${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS})
-endif()
-
-if(NOT CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG)
-  set(CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG})
-endif()
-
-if(NOT CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG_SEP)
-  set(CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP})
-endif()
-
-if(NOT CMAKE_SHARED_LIBRARY_RPATH_LINK_CXX_FLAG)
-  set(CMAKE_SHARED_LIBRARY_RPATH_LINK_CXX_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG})
-endif()
-
-if(NOT DEFINED CMAKE_EXE_EXPORTS_CXX_FLAG)
-  set(CMAKE_EXE_EXPORTS_CXX_FLAG ${CMAKE_EXE_EXPORTS_C_FLAG})
-endif()
-
-if(NOT DEFINED CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG)
-  set(CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG ${CMAKE_SHARED_LIBRARY_SONAME_C_FLAG})
-endif()
-
-if(NOT CMAKE_EXECUTABLE_RUNTIME_CXX_FLAG)
-  set(CMAKE_EXECUTABLE_RUNTIME_CXX_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG})
-endif()
-
-if(NOT CMAKE_EXECUTABLE_RUNTIME_CXX_FLAG_SEP)
-  set(CMAKE_EXECUTABLE_RUNTIME_CXX_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG_SEP})
-endif()
-
-if(NOT CMAKE_EXECUTABLE_RPATH_LINK_CXX_FLAG)
-  set(CMAKE_EXECUTABLE_RPATH_LINK_CXX_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_CXX_FLAG})
-endif()
-
-if(NOT DEFINED CMAKE_SHARED_LIBRARY_LINK_CXX_WITH_RUNTIME_PATH)
-  set(CMAKE_SHARED_LIBRARY_LINK_CXX_WITH_RUNTIME_PATH ${CMAKE_SHARED_LIBRARY_LINK_C_WITH_RUNTIME_PATH})
-endif()
-
-if(NOT CMAKE_INCLUDE_FLAG_CXX)
-  set(CMAKE_INCLUDE_FLAG_CXX ${CMAKE_INCLUDE_FLAG_C})
-endif()
-
-# for most systems a module is the same as a shared library
-# so unless the variable CMAKE_MODULE_EXISTS is set just
-# copy the values from the LIBRARY variables
-if(NOT CMAKE_MODULE_EXISTS)
-  set(CMAKE_SHARED_MODULE_CXX_FLAGS ${CMAKE_SHARED_LIBRARY_CXX_FLAGS})
-  set(CMAKE_SHARED_MODULE_CREATE_CXX_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS})
-endif()
-
-# repeat for modules
-if(NOT CMAKE_SHARED_MODULE_CREATE_CXX_FLAGS)
-  set(CMAKE_SHARED_MODULE_CREATE_CXX_FLAGS ${CMAKE_SHARED_MODULE_CREATE_C_FLAGS})
-endif()
-
-if(NOT CMAKE_SHARED_MODULE_CXX_FLAGS)
-  set(CMAKE_SHARED_MODULE_CXX_FLAGS ${CMAKE_SHARED_MODULE_C_FLAGS})
-endif()
-
-# Initialize CXX link type selection flags from C versions.
-foreach(type SHARED_LIBRARY SHARED_MODULE EXE)
-  if(NOT CMAKE_${type}_LINK_STATIC_CXX_FLAGS)
-    set(CMAKE_${type}_LINK_STATIC_CXX_FLAGS
-      ${CMAKE_${type}_LINK_STATIC_C_FLAGS})
-  endif()
-  if(NOT CMAKE_${type}_LINK_DYNAMIC_CXX_FLAGS)
-    set(CMAKE_${type}_LINK_DYNAMIC_CXX_FLAGS
-      ${CMAKE_${type}_LINK_DYNAMIC_C_FLAGS})
-  endif()
-endforeach()
-
-# add the flags to the cache based
-# on the initial values computed in the platform/*.cmake files
-# use _INIT variables so that this only happens the first time
-# and you can set these flags in the cmake cache
-set(CMAKE_CXX_FLAGS_INIT "$ENV{CXXFLAGS} ${CMAKE_CXX_FLAGS_INIT}")
-
-cmake_initialize_per_config_variable(CMAKE_CXX_FLAGS "Flags used by the CXX compiler")
-
-if(CMAKE_CXX_STANDARD_LIBRARIES_INIT)
-  set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES_INIT}"
-    CACHE STRING "Libraries linked by default with all C++ applications.")
-  mark_as_advanced(CMAKE_CXX_STANDARD_LIBRARIES)
-endif()
-
-if(NOT CMAKE_CXX_COMPILER_LAUNCHER AND DEFINED ENV{CMAKE_CXX_COMPILER_LAUNCHER})
-  set(CMAKE_CXX_COMPILER_LAUNCHER "$ENV{CMAKE_CXX_COMPILER_LAUNCHER}"
-    CACHE STRING "Compiler launcher for CXX.")
-endif()
-
-include(CMakeCommonLanguageInclude)
-
-# now define the following rules:
-# CMAKE_CXX_CREATE_SHARED_LIBRARY
-# CMAKE_CXX_CREATE_SHARED_MODULE
-# CMAKE_CXX_COMPILE_OBJECT
-# CMAKE_CXX_LINK_EXECUTABLE
-
-# variables supplied by the generator at use time
-# <TARGET>
-# <TARGET_BASE> the target without the suffix
-# <OBJECTS>
-# <OBJECT>
-# <LINK_LIBRARIES>
-# <FLAGS>
-# <LINK_FLAGS>
-
-# CXX compiler information
-# <CMAKE_CXX_COMPILER>
-# <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS>
-# <CMAKE_CXX_SHARED_MODULE_CREATE_FLAGS>
-# <CMAKE_CXX_LINK_FLAGS>
-
-# Static library tools
-# <CMAKE_AR>
-# <CMAKE_RANLIB>
-
-
-# create a shared C++ library
-if(NOT CMAKE_CXX_CREATE_SHARED_LIBRARY)
-  set(CMAKE_CXX_CREATE_SHARED_LIBRARY
-      "<CMAKE_CXX_COMPILER> <CMAKE_SHARED_LIBRARY_CXX_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
-endif()
-
-# create a c++ shared module copy the shared library rule by default
-if(NOT CMAKE_CXX_CREATE_SHARED_MODULE)
-  set(CMAKE_CXX_CREATE_SHARED_MODULE ${CMAKE_CXX_CREATE_SHARED_LIBRARY})
-endif()
-
-
-# Create a static archive incrementally for large object file counts.
-# If CMAKE_CXX_CREATE_STATIC_LIBRARY is set it will override these.
-if(NOT DEFINED CMAKE_CXX_ARCHIVE_CREATE)
-  set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> qc <TARGET> <LINK_FLAGS> <OBJECTS>")
-endif()
-if(NOT DEFINED CMAKE_CXX_ARCHIVE_APPEND)
-  set(CMAKE_CXX_ARCHIVE_APPEND "<CMAKE_AR> q <TARGET> <LINK_FLAGS> <OBJECTS>")
-endif()
-if(NOT DEFINED CMAKE_CXX_ARCHIVE_FINISH)
-  set(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> <TARGET>")
-endif()
-
-# compile a C++ file into an object file
-if(NOT CMAKE_CXX_COMPILE_OBJECT)
-  set(CMAKE_CXX_COMPILE_OBJECT
-    "<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>")
-endif()
-
-if(NOT CMAKE_CXX_LINK_EXECUTABLE)
-  set(CMAKE_CXX_LINK_EXECUTABLE
-    "<CMAKE_CXX_COMPILER> <FLAGS> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
-endif()
-
-mark_as_advanced(
-CMAKE_VERBOSE_MAKEFILE
-)
-
-set(CMAKE_CXX_INFORMATION_LOADED 1)
diff --git a/share/cmake-3.18/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake b/share/cmake-3.18/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake
deleted file mode 100644
index 2dc75d6..0000000
--- a/share/cmake-3.18/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake
+++ /dev/null
@@ -1,36 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# Do NOT include this module directly into any of your code. It is meant as
-# a library for Check*CompilerFlag.cmake modules. It's content may change in
-# any way between releases.
-
-macro (CHECK_COMPILER_FLAG_COMMON_PATTERNS _VAR)
-  set(${_VAR}
-    FAIL_REGEX "[Uu]nrecogni[sz]ed .*option"               # GNU, NAG
-    FAIL_REGEX "switch .* is no longer supported"          # GNU
-    FAIL_REGEX "unknown .*option"                          # Clang
-    FAIL_REGEX "optimization flag .* not supported"        # Clang
-    FAIL_REGEX "unknown argument ignored"                  # Clang (cl)
-    FAIL_REGEX "ignoring unknown option"                   # MSVC, Intel
-    FAIL_REGEX "warning D9002"                             # MSVC, any lang
-    FAIL_REGEX "option.*not supported"                     # Intel
-    FAIL_REGEX "invalid argument .*option"                 # Intel
-    FAIL_REGEX "ignoring option .*argument required"       # Intel
-    FAIL_REGEX "ignoring option .*argument is of wrong type" # Intel
-    FAIL_REGEX "[Uu]nknown option"                         # HP
-    FAIL_REGEX "[Ww]arning: [Oo]ption"                     # SunPro
-    FAIL_REGEX "command option .* is not recognized"       # XL
-    FAIL_REGEX "command option .* contains an incorrect subargument" # XL
-    FAIL_REGEX "Option .* is not recognized.  Option will be ignored." # XL
-    FAIL_REGEX "not supported in this configuration. ignored"       # AIX
-    FAIL_REGEX "File with unknown suffix passed to linker" # PGI
-    FAIL_REGEX "[Uu]nknown switch"                         # PGI
-    FAIL_REGEX "WARNING: unknown flag:"                    # Open64
-    FAIL_REGEX "Incorrect command line option:"            # Borland
-    FAIL_REGEX "Warning: illegal option"                   # SunStudio 12
-    FAIL_REGEX "[Ww]arning: Invalid suboption"             # Fujitsu
-    FAIL_REGEX "An invalid option .* appears on the command line" # Cray
-  )
-endmacro ()
diff --git a/share/cmake-3.18/Modules/CMakeCompilerABI.h b/share/cmake-3.18/Modules/CMakeCompilerABI.h
deleted file mode 100644
index 45532af..0000000
--- a/share/cmake-3.18/Modules/CMakeCompilerABI.h
+++ /dev/null
@@ -1,33 +0,0 @@
-
-/* Size of a pointer-to-data in bytes.  */
-#define SIZEOF_DPTR (sizeof(void*))
-const char info_sizeof_dptr[] = {
-  /* clang-format off */
-  'I', 'N', 'F', 'O', ':', 's', 'i', 'z', 'e', 'o', 'f', '_', 'd', 'p', 't',
-  'r', '[', ('0' + ((SIZEOF_DPTR / 10) % 10)), ('0' + (SIZEOF_DPTR % 10)), ']',
-  '\0'
-  /* clang-format on */
-};
-
-/* Application Binary Interface.  */
-
-/* Check for (some) ARM ABIs.
- * See e.g. http://wiki.debian.org/ArmEabiPort for some information on this. */
-#if defined(__GNU__) && defined(__ELF__) && defined(__ARM_EABI__)
-#  define ABI_ID "ELF ARMEABI"
-#elif defined(__GNU__) && defined(__ELF__) && defined(__ARMEB__)
-#  define ABI_ID "ELF ARM"
-#elif defined(__GNU__) && defined(__ELF__) && defined(__ARMEL__)
-#  define ABI_ID "ELF ARM"
-
-#elif defined(__linux__) && defined(__ELF__) && defined(__amd64__) &&         \
-  defined(__ILP32__)
-#  define ABI_ID "ELF X32"
-
-#elif defined(__ELF__)
-#  define ABI_ID "ELF"
-#endif
-
-#if defined(ABI_ID)
-static char const info_abi[] = "INFO:abi[" ABI_ID "]";
-#endif
diff --git a/share/cmake-3.18/Modules/CMakeCompilerIdDetection.cmake b/share/cmake-3.18/Modules/CMakeCompilerIdDetection.cmake
deleted file mode 100644
index acd15df..0000000
--- a/share/cmake-3.18/Modules/CMakeCompilerIdDetection.cmake
+++ /dev/null
@@ -1,151 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-function(_readFile file)
-  include(${file})
-  get_filename_component(name ${file} NAME_WE)
-  string(REGEX REPLACE "-.*" "" CompilerId ${name})
-  set(_compiler_id_version_compute_${CompilerId} ${_compiler_id_version_compute} PARENT_SCOPE)
-  set(_compiler_id_simulate_${CompilerId} ${_compiler_id_simulate} PARENT_SCOPE)
-  set(_compiler_id_pp_test_${CompilerId} ${_compiler_id_pp_test} PARENT_SCOPE)
-endfunction()
-
-function(compiler_id_detection outvar lang)
-
-  if (NOT lang STREQUAL Fortran AND NOT lang STREQUAL CSharp)
-    file(GLOB lang_files
-      "${CMAKE_ROOT}/Modules/Compiler/*-DetermineCompiler.cmake")
-    set(nonlang CXX)
-    if (lang STREQUAL CXX)
-      set(nonlang C)
-    endif()
-
-    file(GLOB nonlang_files
-      "${CMAKE_ROOT}/Modules/Compiler/*-${nonlang}-DetermineCompiler.cmake")
-    list(REMOVE_ITEM lang_files ${nonlang_files})
-  endif()
-
-  set(files ${lang_files})
-  if (files)
-    foreach(file ${files})
-      _readFile(${file})
-    endforeach()
-
-    set(options ID_STRING VERSION_STRINGS ID_DEFINE PLATFORM_DEFAULT_COMPILER)
-    set(oneValueArgs PREFIX)
-    cmake_parse_arguments(CID "${options}" "${oneValueArgs}" "${multiValueArgs}"  ${ARGN})
-    if (CID_UNPARSED_ARGUMENTS)
-      message(FATAL_ERROR "Unrecognized arguments: \"${CID_UNPARSED_ARGUMENTS}\"")
-    endif()
-
-    # Order is relevant here. For example, compilers which pretend to be
-    # GCC must appear before the actual GCC.
-    if (lang STREQUAL CXX)
-      list(APPEND ordered_compilers
-        Comeau
-      )
-    endif()
-    list(APPEND ordered_compilers
-      Intel
-      PathScale
-      Embarcadero
-      Borland
-      Watcom
-      OpenWatcom
-      SunPro
-      HP
-      Compaq
-      zOS
-      XLClang
-      XL
-      VisualAge
-      PGI
-      Cray
-      TI
-      Fujitsu
-      GHS
-    )
-    if (lang STREQUAL C)
-      list(APPEND ordered_compilers
-        TinyCC
-        Bruce
-      )
-    endif()
-    list(APPEND ordered_compilers
-      SCO
-      ARMCC
-      AppleClang
-      ARMClang
-      Clang
-      GNU
-      MSVC
-      ADSP
-      IAR
-    )
-    if (lang STREQUAL C)
-      list(APPEND ordered_compilers
-        SDCC
-      )
-    endif()
-
-    if(lang STREQUAL CUDA)
-      set(ordered_compilers NVIDIA Clang)
-    endif()
-
-    if(CID_ID_DEFINE)
-      foreach(Id ${ordered_compilers})
-        string(APPEND CMAKE_${lang}_COMPILER_ID_CONTENT "# define ${CID_PREFIX}COMPILER_IS_${Id} 0\n")
-      endforeach()
-      # Hard-code definitions for compilers that are no longer supported.
-      string(APPEND CMAKE_${lang}_COMPILER_ID_CONTENT "# define ${CID_PREFIX}COMPILER_IS_MIPSpro 0\n")
-    endif()
-
-    set(pp_if "#if")
-    if (CID_VERSION_STRINGS)
-      string(APPEND CMAKE_${lang}_COMPILER_ID_CONTENT "\n/* Version number components: V=Version, R=Revision, P=Patch
-   Version date components:   YYYY=Year, MM=Month,   DD=Day  */\n")
-    endif()
-
-    foreach(Id ${ordered_compilers})
-      if (NOT _compiler_id_pp_test_${Id})
-        message(FATAL_ERROR "No preprocessor test for \"${Id}\"")
-      endif()
-      set(id_content "${pp_if} ${_compiler_id_pp_test_${Id}}\n")
-      if (CID_ID_STRING)
-        set(PREFIX ${CID_PREFIX})
-        string(CONFIGURE "${_compiler_id_simulate_${Id}}" SIMULATE_BLOCK @ONLY)
-        string(APPEND id_content "# define ${CID_PREFIX}COMPILER_ID \"${Id}\"${SIMULATE_BLOCK}")
-      endif()
-      if (CID_ID_DEFINE)
-        string(APPEND id_content "# undef ${CID_PREFIX}COMPILER_IS_${Id}\n")
-        string(APPEND id_content "# define ${CID_PREFIX}COMPILER_IS_${Id} 1\n")
-      endif()
-      if (CID_VERSION_STRINGS)
-        set(PREFIX ${CID_PREFIX})
-        set(MACRO_DEC DEC)
-        set(MACRO_HEX HEX)
-        string(CONFIGURE "${_compiler_id_version_compute_${Id}}" VERSION_BLOCK @ONLY)
-        string(APPEND id_content "${VERSION_BLOCK}\n")
-      endif()
-      string(APPEND CMAKE_${lang}_COMPILER_ID_CONTENT "\n${id_content}")
-      set(pp_if "#elif")
-    endforeach()
-
-    if (CID_PLATFORM_DEFAULT_COMPILER)
-      set(platform_compiler_detection "
-/* These compilers are either not known or too old to define an
-  identification macro.  Try to identify the platform and guess that
-  it is the native compiler.  */
-#elif defined(__hpux) || defined(__hpua)
-# define ${CID_PREFIX}COMPILER_ID \"HP\"
-
-#else /* unknown compiler */
-# define ${CID_PREFIX}COMPILER_ID \"\"")
-    endif()
-
-    string(APPEND CMAKE_${lang}_COMPILER_ID_CONTENT "\n${platform_compiler_detection}\n#endif")
-  endif()
-
-  set(${outvar} ${CMAKE_${lang}_COMPILER_ID_CONTENT} PARENT_SCOPE)
-endfunction()
diff --git a/share/cmake-3.18/Modules/CMakeDependentOption.cmake b/share/cmake-3.18/Modules/CMakeDependentOption.cmake
deleted file mode 100644
index 99d5070..0000000
--- a/share/cmake-3.18/Modules/CMakeDependentOption.cmake
+++ /dev/null
@@ -1,51 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CMakeDependentOption
---------------------
-
-Macro to provide an option dependent on other options.
-
-This macro presents an option to the user only if a set of other
-conditions are true.  When the option is not presented a default value
-is used, but any value set by the user is preserved for when the
-option is presented again.  Example invocation:
-
-.. code-block:: cmake
-
-  CMAKE_DEPENDENT_OPTION(USE_FOO "Use Foo" ON
-                         "USE_BAR;NOT USE_ZOT" OFF)
-
-If USE_BAR is true and USE_ZOT is false, this provides an option
-called USE_FOO that defaults to ON.  Otherwise, it sets USE_FOO to
-OFF.  If the status of USE_BAR or USE_ZOT ever changes, any value for
-the USE_FOO option is saved so that when the option is re-enabled it
-retains its old value.  Each element in the fourth parameter is
-evaluated as an if-condition, so :ref:`Condition Syntax` can be used.
-#]=======================================================================]
-
-macro(CMAKE_DEPENDENT_OPTION option doc default depends force)
-  if(${option}_ISSET MATCHES "^${option}_ISSET$")
-    set(${option}_AVAILABLE 1)
-    foreach(d ${depends})
-      string(REGEX REPLACE " +" ";" CMAKE_DEPENDENT_OPTION_DEP "${d}")
-      if(${CMAKE_DEPENDENT_OPTION_DEP})
-      else()
-        set(${option}_AVAILABLE 0)
-      endif()
-    endforeach()
-    if(${option}_AVAILABLE)
-      option(${option} "${doc}" "${default}")
-      set(${option} "${${option}}" CACHE BOOL "${doc}" FORCE)
-    else()
-      if(${option} MATCHES "^${option}$")
-      else()
-        set(${option} "${${option}}" CACHE INTERNAL "${doc}")
-      endif()
-      set(${option} ${force})
-    endif()
-  else()
-    set(${option} "${${option}_ISSET}")
-  endif()
-endmacro()
diff --git a/share/cmake-3.18/Modules/CMakeDetermineASMCompiler.cmake b/share/cmake-3.18/Modules/CMakeDetermineASMCompiler.cmake
deleted file mode 100644
index bc8b86b..0000000
--- a/share/cmake-3.18/Modules/CMakeDetermineASMCompiler.cmake
+++ /dev/null
@@ -1,253 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# determine the compiler to use for ASM programs
-
-include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake)
-
-if(NOT CMAKE_ASM${ASM_DIALECT}_COMPILER)
-  # prefer the environment variable ASM
-  if(NOT $ENV{ASM${ASM_DIALECT}} STREQUAL "")
-    get_filename_component(CMAKE_ASM${ASM_DIALECT}_COMPILER_INIT $ENV{ASM${ASM_DIALECT}} PROGRAM PROGRAM_ARGS CMAKE_ASM${ASM_DIALECT}_FLAGS_ENV_INIT)
-    if(CMAKE_ASM${ASM_DIALECT}_FLAGS_ENV_INIT)
-      set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ARG1 "${CMAKE_ASM${ASM_DIALECT}_FLAGS_ENV_INIT}" CACHE STRING "First argument to ASM${ASM_DIALECT} compiler")
-    endif()
-    if(NOT EXISTS ${CMAKE_ASM${ASM_DIALECT}_COMPILER_INIT})
-      message(FATAL_ERROR "Could not find compiler set in environment variable ASM${ASM_DIALECT}:\n$ENV{ASM${ASM_DIALECT}}.")
-    endif()
-  endif()
-
-  # finally list compilers to try
-  if("ASM${ASM_DIALECT}" STREQUAL "ASM") # the generic assembler support
-    if(NOT CMAKE_ASM_COMPILER_INIT)
-      if(CMAKE_C_COMPILER)
-        set(CMAKE_ASM${ASM_DIALECT}_COMPILER_LIST ${CMAKE_C_COMPILER})
-      elseif(CMAKE_CXX_COMPILER)
-        set(CMAKE_ASM${ASM_DIALECT}_COMPILER_LIST ${CMAKE_CXX_COMPILER})
-      else()
-        # List all default C and CXX compilers
-        set(CMAKE_ASM${ASM_DIALECT}_COMPILER_LIST
-             ${_CMAKE_TOOLCHAIN_PREFIX}cc  ${_CMAKE_TOOLCHAIN_PREFIX}gcc cl bcc xlc
-          CC ${_CMAKE_TOOLCHAIN_PREFIX}c++ ${_CMAKE_TOOLCHAIN_PREFIX}g++ aCC cl bcc xlC)
-      endif()
-    endif()
-  else() # some specific assembler "dialect"
-    if(NOT CMAKE_ASM${ASM_DIALECT}_COMPILER_INIT  AND NOT CMAKE_ASM${ASM_DIALECT}_COMPILER_LIST)
-      message(FATAL_ERROR "CMAKE_ASM${ASM_DIALECT}_COMPILER_INIT or CMAKE_ASM${ASM_DIALECT}_COMPILER_LIST must be preset !")
-    endif()
-  endif()
-
-  # Find the compiler.
-  _cmake_find_compiler(ASM${ASM_DIALECT})
-
-else()
-  _cmake_find_compiler_path(ASM${ASM_DIALECT})
-endif()
-mark_as_advanced(CMAKE_ASM${ASM_DIALECT}_COMPILER)
-
-if (NOT _CMAKE_TOOLCHAIN_LOCATION)
-  get_filename_component(_CMAKE_TOOLCHAIN_LOCATION "${CMAKE_ASM${ASM_DIALECT}_COMPILER}" PATH)
-endif ()
-
-
-if(NOT CMAKE_ASM${ASM_DIALECT}_COMPILER_ID)
-
-  # Table of per-vendor compiler id flags with expected output.
-  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS GNU )
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_GNU "--version")
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_GNU "(GNU assembler)|(GCC)|(Free Software Foundation)")
-
-  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS Clang )
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_Clang "--version")
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_Clang "(clang version)")
-
-  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS AppleClang )
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_AppleClang "--version")
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_AppleClang "(Apple LLVM version)")
-
-  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS ARMClang )
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_ARMClang "--version")
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_ARMClang "armclang")
-
-  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS HP )
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_HP "-V")
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_HP "HP C")
-
-  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS Intel )
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_Intel "--version")
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_Intel "(ICC)")
-
-  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS SunPro )
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_SunPro "-V")
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_SunPro "Sun C")
-
-  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS XL )
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_XL "-qversion")
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_XL "XL C")
-
-  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS MSVC )
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_MSVC "-?")
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_MSVC "Microsoft")
-
-  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS TI )
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_TI "-h")
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_TI "Texas Instruments")
-
-  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS IAR)
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_IAR )
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_IAR "IAR Assembler")
-
-  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS ARMCC)
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_ARMCC )
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_ARMCC "(ARM Compiler)|(ARM Assembler)")
-
-  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS NASM)
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_NASM "-v")
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_NASM "(NASM version)")
-
-  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS YASM)
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_YASM "--version")
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_YASM "(yasm)")
-
-  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS ADSP)
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_ADSP "-version")
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_ADSP "Analog Devices")
-
-  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS QCC)
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_QCC "-V")
-  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_QCC "gcc_nto")
-
-  include(CMakeDetermineCompilerId)
-  set(userflags)
-  CMAKE_DETERMINE_COMPILER_ID_VENDOR(ASM${ASM_DIALECT} "${userflags}")
-  if("x${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}" STREQUAL "xIAR")
-    # primary necessary to detect architecture, so the right archiver and linker can be picked
-    # eg. "IAR Assembler V8.10.1.12857/W32 for ARM" or "IAR Assembler V4.11.1.4666 for Renesas RX"
-    # Cut out identification first, newline handling is a pain
-    string(REGEX MATCH "IAR Assembler[^\r\n]*" _compileid "${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_OUTPUT}")
-    if("${_compileid}" MATCHES "V([0-9]+\\.[0-9]+\\.[0-9]+)")
-      set(CMAKE_ASM${ASM_DIALECT}_COMPILER_VERSION ${CMAKE_MATCH_1})
-    endif()
-    string(REGEX MATCHALL "([A-Za-z0-9-]+)" _all_compileid_matches "${_compileid}")
-    if(_all_compileid_matches)
-      list(GET _all_compileid_matches "-1" CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID)
-    endif()
-  endif()
-
-  _cmake_find_compiler_sysroot(ASM${ASM_DIALECT})
-
-  unset(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_OUTPUT)
-  unset(_all_compileid_matches)
-  unset(_compileid)
-endif()
-
-if(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID)
-  if(CMAKE_ASM${ASM_DIALECT}_COMPILER_VERSION)
-    set(_version " ${CMAKE_ASM${ASM_DIALECT}_COMPILER_VERSION}")
-  else()
-    set(_version "")
-  endif()
-  if(CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID AND "x${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}" STREQUAL "xIAR")
-    set(_archid " ${CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID}")
-  else()
-    set(_archid "")
-  endif()
-  message(STATUS "The ASM${ASM_DIALECT} compiler identification is ${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}${_archid}${_version}")
-  unset(_archid)
-  unset(_version)
-else()
-  message(STATUS "The ASM${ASM_DIALECT} compiler identification is unknown")
-endif()
-
-# If we have a gas/as cross compiler, they have usually some prefix, like
-# e.g. powerpc-linux-gas, arm-elf-gas or i586-mingw32msvc-gas , optionally
-# with a 3-component version number at the end
-# The other tools of the toolchain usually have the same prefix
-# NAME_WE cannot be used since then this test will fail for names like
-# "arm-unknown-nto-qnx6.3.0-gas.exe", where BASENAME would be
-# "arm-unknown-nto-qnx6" instead of the correct "arm-unknown-nto-qnx6.3.0-"
-if (NOT _CMAKE_TOOLCHAIN_PREFIX)
-  get_filename_component(COMPILER_BASENAME "${CMAKE_ASM${ASM_DIALECT}_COMPILER}" NAME)
-  if (COMPILER_BASENAME MATCHES "^(.+-)g?as(-[0-9]+\\.[0-9]+\\.[0-9]+)?(\\.exe)?$")
-    set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
-  endif ()
-endif ()
-
-# Now try the C compiler regexp:
-if (NOT _CMAKE_TOOLCHAIN_PREFIX)
-  if (COMPILER_BASENAME MATCHES "^(.+-)g?cc(-[0-9]+\\.[0-9]+\\.[0-9]+)?(\\.exe)?$")
-    set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
-  endif ()
-endif ()
-
-# Finally try the CXX compiler regexp:
-if (NOT _CMAKE_TOOLCHAIN_PREFIX)
-  if (COMPILER_BASENAME MATCHES "^(.+-)[gc]\\+\\+(-[0-9]+\\.[0-9]+\\.[0-9]+)?(\\.exe)?$")
-    set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
-  endif ()
-endif ()
-
-
-set(_CMAKE_PROCESSING_LANGUAGE "ASM")
-include(CMakeFindBinUtils)
-include(Compiler/${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}-FindBinUtils OPTIONAL)
-unset(_CMAKE_PROCESSING_LANGUAGE)
-
-set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ENV_VAR "ASM${ASM_DIALECT}")
-
-if(CMAKE_ASM${ASM_DIALECT}_COMPILER)
-  message(STATUS "Found assembler: ${CMAKE_ASM${ASM_DIALECT}_COMPILER}")
-else()
-  message(STATUS "Didn't find assembler")
-endif()
-
-foreach(_var
-    COMPILER
-    COMPILER_ID
-    COMPILER_ARG1
-    COMPILER_ENV_VAR
-    COMPILER_AR
-    COMPILER_RANLIB
-    COMPILER_VERSION
-    )
-  set(_CMAKE_ASM_${_var} "${CMAKE_ASM${ASM_DIALECT}_${_var}}")
-endforeach()
-
-if(CMAKE_ASM${ASM_DIALECT}_COMPILER_SYSROOT)
-  string(CONCAT _SET_CMAKE_ASM_COMPILER_SYSROOT
-    "set(CMAKE_ASM${ASM_DIALECT}_COMPILER_SYSROOT \"${CMAKE_ASM${ASM_DIALECT}_COMPILER_SYSROOT}\")\n"
-    "set(CMAKE_COMPILER_SYSROOT \"${CMAKE_ASM${ASM_DIALECT}_COMPILER_SYSROOT}\")")
-else()
-  set(_SET_CMAKE_ASM_COMPILER_SYSROOT "")
-endif()
-
-if(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_MATCH)
-  set(_SET_CMAKE_ASM_COMPILER_ID_VENDOR_MATCH
-    "set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_MATCH [==[${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_MATCH}]==])")
-else()
-  set(_SET_CMAKE_ASM_COMPILER_ID_VENDOR_MATCH "")
-endif()
-
-if(CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID)
-  set(_SET_CMAKE_ASM_COMPILER_ARCHITECTURE_ID
-    "set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID ${CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID})")
-else()
-  set(_SET_CMAKE_ASM_COMPILER_ARCHITECTURE_ID "")
-endif()
-
-# configure variables set in this file for fast reload later on
-configure_file(${CMAKE_ROOT}/Modules/CMakeASMCompiler.cmake.in
-  ${CMAKE_PLATFORM_INFO_DIR}/CMakeASM${ASM_DIALECT}Compiler.cmake @ONLY)
-
-foreach(_var
-    COMPILER
-    COMPILER_ID
-    COMPILER_ARG1
-    COMPILER_ENV_VAR
-    COMPILER_AR
-    COMPILER_RANLIB
-    COMPILER_VERSION
-    )
-  unset(_CMAKE_ASM_${_var})
-endforeach()
diff --git a/share/cmake-3.18/Modules/CMakeDetermineCCompiler.cmake b/share/cmake-3.18/Modules/CMakeDetermineCCompiler.cmake
deleted file mode 100644
index 86683d1..0000000
--- a/share/cmake-3.18/Modules/CMakeDetermineCCompiler.cmake
+++ /dev/null
@@ -1,226 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# determine the compiler to use for C programs
-# NOTE, a generator may set CMAKE_C_COMPILER before
-# loading this file to force a compiler.
-# use environment variable CC first if defined by user, next use
-# the cmake variable CMAKE_GENERATOR_CC which can be defined by a generator
-# as a default compiler
-# If the internal cmake variable _CMAKE_TOOLCHAIN_PREFIX is set, this is used
-# as prefix for the tools (e.g. arm-elf-gcc, arm-elf-ar etc.). This works
-# currently with the GNU crosscompilers.
-#
-# Sets the following variables:
-#   CMAKE_C_COMPILER
-#   CMAKE_AR
-#   CMAKE_RANLIB
-#   CMAKE_COMPILER_IS_GNUCC
-#
-# If not already set before, it also sets
-#   _CMAKE_TOOLCHAIN_PREFIX
-
-include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake)
-
-# Load system-specific compiler preferences for this language.
-include(Platform/${CMAKE_SYSTEM_NAME}-Determine-C OPTIONAL)
-include(Platform/${CMAKE_SYSTEM_NAME}-C OPTIONAL)
-if(NOT CMAKE_C_COMPILER_NAMES)
-  set(CMAKE_C_COMPILER_NAMES cc)
-endif()
-
-if(${CMAKE_GENERATOR} MATCHES "Visual Studio")
-elseif("${CMAKE_GENERATOR}" MATCHES "Green Hills MULTI")
-elseif("${CMAKE_GENERATOR}" MATCHES "Xcode")
-  set(CMAKE_C_COMPILER_XCODE_TYPE sourcecode.c.c)
-  _cmake_find_compiler_path(C)
-else()
-  if(NOT CMAKE_C_COMPILER)
-    set(CMAKE_C_COMPILER_INIT NOTFOUND)
-
-    # prefer the environment variable CC
-    if(NOT $ENV{CC} STREQUAL "")
-      get_filename_component(CMAKE_C_COMPILER_INIT $ENV{CC} PROGRAM PROGRAM_ARGS CMAKE_C_FLAGS_ENV_INIT)
-      if(CMAKE_C_FLAGS_ENV_INIT)
-        set(CMAKE_C_COMPILER_ARG1 "${CMAKE_C_FLAGS_ENV_INIT}" CACHE STRING "First argument to C compiler")
-      endif()
-      if(NOT EXISTS ${CMAKE_C_COMPILER_INIT})
-        message(FATAL_ERROR "Could not find compiler set in environment variable CC:\n$ENV{CC}.")
-      endif()
-    endif()
-
-    # next try prefer the compiler specified by the generator
-    if(CMAKE_GENERATOR_CC)
-      if(NOT CMAKE_C_COMPILER_INIT)
-        set(CMAKE_C_COMPILER_INIT ${CMAKE_GENERATOR_CC})
-      endif()
-    endif()
-
-    # finally list compilers to try
-    if(NOT CMAKE_C_COMPILER_INIT)
-      set(CMAKE_C_COMPILER_LIST ${_CMAKE_TOOLCHAIN_PREFIX}cc ${_CMAKE_TOOLCHAIN_PREFIX}gcc cl bcc xlc clang)
-    endif()
-
-    _cmake_find_compiler(C)
-
-  else()
-    _cmake_find_compiler_path(C)
-  endif()
-  mark_as_advanced(CMAKE_C_COMPILER)
-
-  # Each entry in this list is a set of extra flags to try
-  # adding to the compile line to see if it helps produce
-  # a valid identification file.
-  set(CMAKE_C_COMPILER_ID_TEST_FLAGS_FIRST)
-  set(CMAKE_C_COMPILER_ID_TEST_FLAGS
-    # Try compiling to an object file only.
-    "-c"
-
-    # Try enabling ANSI mode on HP.
-    "-Aa"
-
-    # Try compiling K&R-compatible code (needed by Bruce C Compiler).
-    "-D__CLASSIC_C__"
-
-    # ARMClang need target options
-    "--target=arm-arm-none-eabi -mcpu=cortex-m3"
-    )
-endif()
-
-# Build a small source file to identify the compiler.
-if(NOT CMAKE_C_COMPILER_ID_RUN)
-  set(CMAKE_C_COMPILER_ID_RUN 1)
-
-  # Try to identify the compiler.
-  set(CMAKE_C_COMPILER_ID)
-  set(CMAKE_C_PLATFORM_ID)
-  file(READ ${CMAKE_ROOT}/Modules/CMakePlatformId.h.in
-    CMAKE_C_COMPILER_ID_PLATFORM_CONTENT)
-
-  # The IAR compiler produces weird output.
-  # See https://gitlab.kitware.com/cmake/cmake/-/issues/10176#note_153591
-  list(APPEND CMAKE_C_COMPILER_ID_VENDORS IAR)
-  set(CMAKE_C_COMPILER_ID_VENDOR_FLAGS_IAR )
-  set(CMAKE_C_COMPILER_ID_VENDOR_REGEX_IAR "IAR .+ Compiler")
-
-  # Match the link line from xcodebuild output of the form
-  #  Ld ...
-  #      ...
-  #      /path/to/cc ...CompilerIdC/...
-  # to extract the compiler front-end for the language.
-  set(CMAKE_C_COMPILER_ID_TOOL_MATCH_REGEX "\nLd[^\n]*(\n[ \t]+[^\n]*)*\n[ \t]+([^ \t\r\n]+)[^\r\n]*-o[^\r\n]*CompilerIdC/(\\./)?(CompilerIdC.(framework|xctest)/)?CompilerIdC[ \t\n\\\"]")
-  set(CMAKE_C_COMPILER_ID_TOOL_MATCH_INDEX 2)
-
-  include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerId.cmake)
-  CMAKE_DETERMINE_COMPILER_ID(C CFLAGS CMakeCCompilerId.c)
-
-  _cmake_find_compiler_sysroot(C)
-
-  # Set old compiler and platform id variables.
-  if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-    set(CMAKE_COMPILER_IS_GNUCC 1)
-  endif()
-  if(CMAKE_C_PLATFORM_ID MATCHES "MinGW")
-    set(CMAKE_COMPILER_IS_MINGW 1)
-  elseif(CMAKE_C_PLATFORM_ID MATCHES "Cygwin")
-    set(CMAKE_COMPILER_IS_CYGWIN 1)
-  endif()
-else()
-  if(NOT DEFINED CMAKE_C_COMPILER_FRONTEND_VARIANT)
-    # Some toolchain files set our internal CMAKE_C_COMPILER_ID_RUN
-    # variable but are not aware of CMAKE_C_COMPILER_FRONTEND_VARIANT.
-    # They pre-date our support for the GNU-like variant targeting the
-    # MSVC ABI so we do not consider that here.
-    if(CMAKE_C_COMPILER_ID STREQUAL "Clang")
-      if("x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC")
-        set(CMAKE_C_COMPILER_FRONTEND_VARIANT "MSVC")
-      else()
-        set(CMAKE_C_COMPILER_FRONTEND_VARIANT "GNU")
-      endif()
-    else()
-      set(CMAKE_C_COMPILER_FRONTEND_VARIANT "")
-    endif()
-  endif()
-endif()
-
-if (NOT _CMAKE_TOOLCHAIN_LOCATION)
-  get_filename_component(_CMAKE_TOOLCHAIN_LOCATION "${CMAKE_C_COMPILER}" PATH)
-endif ()
-
-# If we have a gcc cross compiler, they have usually some prefix, like
-# e.g. powerpc-linux-gcc, arm-elf-gcc or i586-mingw32msvc-gcc, optionally
-# with a 3-component version number at the end (e.g. arm-eabi-gcc-4.5.2).
-# The other tools of the toolchain usually have the same prefix
-# NAME_WE cannot be used since then this test will fail for names like
-# "arm-unknown-nto-qnx6.3.0-gcc.exe", where BASENAME would be
-# "arm-unknown-nto-qnx6" instead of the correct "arm-unknown-nto-qnx6.3.0-"
-if (NOT _CMAKE_TOOLCHAIN_PREFIX)
-
-  if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang|QCC")
-    get_filename_component(COMPILER_BASENAME "${CMAKE_C_COMPILER}" NAME)
-    if (COMPILER_BASENAME MATCHES "^(.+-)(clang|g?cc)(-[0-9]+(\\.[0-9]+)*)?(-[^.]+)?(\\.exe)?$")
-      set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
-      set(_CMAKE_COMPILER_SUFFIX ${CMAKE_MATCH_5})
-    elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
-      if(CMAKE_C_COMPILER_TARGET)
-        set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_C_COMPILER_TARGET}-)
-      endif()
-    elseif(COMPILER_BASENAME MATCHES "qcc(\\.exe)?$")
-      if(CMAKE_C_COMPILER_TARGET MATCHES "gcc_nto([a-z0-9]+_[0-9]+|[^_le]+)(le)?")
-        set(_CMAKE_TOOLCHAIN_PREFIX nto${CMAKE_MATCH_1}-)
-      endif()
-    endif ()
-
-    # if "llvm-" is part of the prefix, remove it, since llvm doesn't have its own binutils
-    # but uses the regular ar, objcopy, etc. (instead of llvm-objcopy etc.)
-    if ("${_CMAKE_TOOLCHAIN_PREFIX}" MATCHES "(.+-)?llvm-$")
-      set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
-    endif ()
-  elseif(CMAKE_C_COMPILER_ID MATCHES "TI")
-    # TI compilers are named e.g. cl6x, cl470 or armcl.exe
-    get_filename_component(COMPILER_BASENAME "${CMAKE_C_COMPILER}" NAME)
-    if (COMPILER_BASENAME MATCHES "^(.+)?cl([^.]+)?(\\.exe)?$")
-      set(_CMAKE_TOOLCHAIN_PREFIX "${CMAKE_MATCH_1}")
-      set(_CMAKE_TOOLCHAIN_SUFFIX "${CMAKE_MATCH_2}")
-    endif ()
-  endif()
-
-endif ()
-
-set(_CMAKE_PROCESSING_LANGUAGE "C")
-include(CMakeFindBinUtils)
-include(Compiler/${CMAKE_C_COMPILER_ID}-FindBinUtils OPTIONAL)
-unset(_CMAKE_PROCESSING_LANGUAGE)
-
-if(CMAKE_C_COMPILER_SYSROOT)
-  string(CONCAT _SET_CMAKE_C_COMPILER_SYSROOT
-    "set(CMAKE_C_COMPILER_SYSROOT \"${CMAKE_C_COMPILER_SYSROOT}\")\n"
-    "set(CMAKE_COMPILER_SYSROOT \"${CMAKE_C_COMPILER_SYSROOT}\")")
-else()
-  set(_SET_CMAKE_C_COMPILER_SYSROOT "")
-endif()
-
-if(CMAKE_C_COMPILER_ARCHITECTURE_ID)
-  set(_SET_CMAKE_C_COMPILER_ARCHITECTURE_ID
-    "set(CMAKE_C_COMPILER_ARCHITECTURE_ID ${CMAKE_C_COMPILER_ARCHITECTURE_ID})")
-else()
-  set(_SET_CMAKE_C_COMPILER_ARCHITECTURE_ID "")
-endif()
-
-if(MSVC_C_ARCHITECTURE_ID)
-  set(SET_MSVC_C_ARCHITECTURE_ID
-    "set(MSVC_C_ARCHITECTURE_ID ${MSVC_C_ARCHITECTURE_ID})")
-endif()
-
-if(CMAKE_C_XCODE_ARCHS)
-  set(SET_CMAKE_XCODE_ARCHS
-    "set(CMAKE_XCODE_ARCHS \"${CMAKE_C_XCODE_ARCHS}\")")
-endif()
-
-# configure variables set in this file for fast reload later on
-configure_file(${CMAKE_ROOT}/Modules/CMakeCCompiler.cmake.in
-  ${CMAKE_PLATFORM_INFO_DIR}/CMakeCCompiler.cmake
-  @ONLY
-  )
-set(CMAKE_C_COMPILER_ENV_VAR "CC")
diff --git a/share/cmake-3.18/Modules/CMakeDetermineCUDACompiler.cmake b/share/cmake-3.18/Modules/CMakeDetermineCUDACompiler.cmake
deleted file mode 100644
index fa497cd..0000000
--- a/share/cmake-3.18/Modules/CMakeDetermineCUDACompiler.cmake
+++ /dev/null
@@ -1,575 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake)
-include(${CMAKE_ROOT}/Modules/CMakeParseImplicitLinkInfo.cmake)
-
-if( NOT ( ("${CMAKE_GENERATOR}" MATCHES "Make") OR
-          ("${CMAKE_GENERATOR}" MATCHES "Ninja") OR
-          ("${CMAKE_GENERATOR}" MATCHES "Visual Studio (1|[9][0-9])") ) )
-  message(FATAL_ERROR "CUDA language not currently supported by \"${CMAKE_GENERATOR}\" generator")
-endif()
-
-if(${CMAKE_GENERATOR} MATCHES "Visual Studio")
-else()
-  if(NOT CMAKE_CUDA_COMPILER)
-    set(CMAKE_CUDA_COMPILER_INIT NOTFOUND)
-
-      # prefer the environment variable CUDACXX
-      if(NOT $ENV{CUDACXX} STREQUAL "")
-        get_filename_component(CMAKE_CUDA_COMPILER_INIT $ENV{CUDACXX} PROGRAM PROGRAM_ARGS CMAKE_CUDA_FLAGS_ENV_INIT)
-        if(CMAKE_CUDA_FLAGS_ENV_INIT)
-          set(CMAKE_CUDA_COMPILER_ARG1 "${CMAKE_CUDA_FLAGS_ENV_INIT}" CACHE STRING "First argument to CXX compiler")
-        endif()
-        if(NOT EXISTS ${CMAKE_CUDA_COMPILER_INIT})
-          message(FATAL_ERROR "Could not find compiler set in environment variable CUDACXX:\n$ENV{CUDACXX}.\n${CMAKE_CUDA_COMPILER_INIT}")
-        endif()
-      endif()
-
-    # finally list compilers to try
-    if(NOT CMAKE_CUDA_COMPILER_INIT)
-      set(CMAKE_CUDA_COMPILER_LIST nvcc)
-    endif()
-
-    _cmake_find_compiler(CUDA)
-  else()
-    _cmake_find_compiler_path(CUDA)
-  endif()
-
-  mark_as_advanced(CMAKE_CUDA_COMPILER)
-endif()
-
-#Allow the user to specify a host compiler
-if(NOT $ENV{CUDAHOSTCXX} STREQUAL "")
-  get_filename_component(CMAKE_CUDA_HOST_COMPILER $ENV{CUDAHOSTCXX} PROGRAM)
-  if(NOT EXISTS ${CMAKE_CUDA_HOST_COMPILER})
-    message(FATAL_ERROR "Could not find compiler set in environment variable CUDAHOSTCXX:\n$ENV{CUDAHOSTCXX}.\n${CMAKE_CUDA_HOST_COMPILER}")
-  endif()
-endif()
-
-# Build a small source file to identify the compiler.
-if(NOT CMAKE_CUDA_COMPILER_ID_RUN)
-  set(CMAKE_CUDA_COMPILER_ID_RUN 1)
-
-  include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerId.cmake)
-
-  if(${CMAKE_GENERATOR} MATCHES "Visual Studio")
-    # We will not know CMAKE_CUDA_COMPILER until the main compiler id step
-    # below extracts it, but we do know that the compiler id will be NVIDIA.
-    set(CMAKE_CUDA_COMPILER_ID "NVIDIA")
-  else()
-    # We determine the vendor to help with find the toolkit and use the right flags for detection right away.
-    # The main compiler identification is still needed below to extract other information.
-    list(APPEND CMAKE_CUDA_COMPILER_ID_VENDORS NVIDIA Clang)
-    set(CMAKE_CUDA_COMPILER_ID_VENDOR_REGEX_NVIDIA "nvcc: NVIDIA \\(R\\) Cuda compiler driver")
-    set(CMAKE_CUDA_COMPILER_ID_VENDOR_REGEX_Clang "(clang version)")
-    CMAKE_DETERMINE_COMPILER_ID_VENDOR(CUDA "--version")
-
-    # Find the CUDA toolkit. We store the CMAKE_CUDA_COMPILER_TOOLKIT_ROOT and CMAKE_CUDA_COMPILER_LIBRARY_ROOT
-    # in CMakeCUDACompiler.cmake, so FindCUDAToolkit can avoid searching on future runs and the toolkit stays the same.
-    # This is very similar to FindCUDAToolkit, but somewhat simplified since we can issue fatal errors
-    # if we fail to find things we need and we don't need to account for searching the libraries.
-
-    # For NVCC we can easily deduce the SDK binary directory from the compiler path.
-    if(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA")
-      set(_CUDA_NVCC_EXECUTABLE "${CMAKE_CUDA_COMPILER}")
-    else()
-      # Search using CUDAToolkit_ROOT and then CUDA_PATH for equivalence with FindCUDAToolkit.
-      # In FindCUDAToolkit CUDAToolkit_ROOT is searched automatically due to being in a find_package().
-      # First we search candidate non-default paths to give them priority.
-      find_program(_CUDA_NVCC_EXECUTABLE
-        NAMES nvcc nvcc.exe
-        PATHS ${CUDAToolkit_ROOT}
-        ENV CUDAToolkit_ROOT
-        ENV CUDA_PATH
-        PATH_SUFFIXES bin
-        NO_DEFAULT_PATH
-      )
-
-      # If we didn't find NVCC, then try the default paths.
-      find_program(_CUDA_NVCC_EXECUTABLE
-        NAMES nvcc nvcc.exe
-        PATH_SUFFIXES bin
-      )
-
-      # If the user specified CUDAToolkit_ROOT but nvcc could not be found, this is an error.
-      if(NOT _CUDA_NVCC_EXECUTABLE AND (DEFINED CUDAToolkit_ROOT OR DEFINED ENV{CUDAToolkit_ROOT}))
-        set(fail_base "Could not find nvcc executable in path specified by")
-
-        if(DEFINED CUDAToolkit_ROOT)
-          message(FATAL_ERROR "${fail_base} CUDAToolkit_ROOT=${CUDAToolkit_ROOT}")
-        elseif(DEFINED ENV{CUDAToolkit_ROOT})
-          message(FATAL_ERROR "${fail_base} environment variable CUDAToolkit_ROOT=$ENV{CUDAToolkit_ROOT}")
-        endif()
-      endif()
-
-      # CUDAToolkit_ROOT cmake/env variable not specified, try platform defaults.
-      #
-      # - Linux: /usr/local/cuda-X.Y
-      # - macOS: /Developer/NVIDIA/CUDA-X.Y
-      # - Windows: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vX.Y
-      #
-      # We will also search the default symlink location /usr/local/cuda first since
-      # if CUDAToolkit_ROOT is not specified, it is assumed that the symlinked
-      # directory is the desired location.
-      if(NOT _CUDA_NVCC_EXECUTABLE)
-        if(UNIX)
-          if(NOT APPLE)
-            set(platform_base "/usr/local/cuda-")
-          else()
-            set(platform_base "/Developer/NVIDIA/CUDA-")
-          endif()
-        else()
-          set(platform_base "C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v")
-        endif()
-
-        # Build out a descending list of possible cuda installations, e.g.
-        file(GLOB possible_paths "${platform_base}*")
-        # Iterate the glob results and create a descending list.
-        set(versions)
-        foreach(p ${possible_paths})
-          # Extract version number from end of string
-          string(REGEX MATCH "[0-9][0-9]?\\.[0-9]$" p_version ${p})
-          if(IS_DIRECTORY ${p} AND p_version)
-            list(APPEND versions ${p_version})
-          endif()
-        endforeach()
-
-        # Sort numerically in descending order, so we try the newest versions first.
-        list(SORT versions COMPARE NATURAL ORDER DESCENDING)
-
-        # With a descending list of versions, populate possible paths to search.
-        set(search_paths)
-        foreach(v ${versions})
-          list(APPEND search_paths "${platform_base}${v}")
-        endforeach()
-
-        # Force the global default /usr/local/cuda to the front on Unix.
-        if(UNIX)
-          list(INSERT search_paths 0 "/usr/local/cuda")
-        endif()
-
-        # Now search for nvcc again using the platform default search paths.
-        find_program(_CUDA_NVCC_EXECUTABLE
-          NAMES nvcc nvcc.exe
-          PATHS ${search_paths}
-          PATH_SUFFIXES bin
-        )
-
-        # We are done with these variables now, cleanup.
-        unset(platform_base)
-        unset(possible_paths)
-        unset(versions)
-        unset(search_paths)
-
-        if(NOT _CUDA_NVCC_EXECUTABLE)
-          message(FATAL_ERROR "Could not find nvcc, please set CUDAToolkit_ROOT.")
-        endif()
-      endif()
-    endif()
-
-    get_filename_component(CMAKE_CUDA_COMPILER_TOOLKIT_ROOT "${_CUDA_NVCC_EXECUTABLE}" DIRECTORY)
-    get_filename_component(CMAKE_CUDA_COMPILER_TOOLKIT_ROOT "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}" DIRECTORY)
-
-    # CMAKE_CUDA_COMPILER_LIBRARY_ROOT contains the device library and version file.
-    # In a non-scattered installation this is equivalent to CMAKE_CUDA_COMPILER_TOOLKIT_ROOT.
-    # We first check for a non-scattered installation to prefer it over a scattered installation.
-    if(EXISTS "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}/version.txt")
-      set(CMAKE_CUDA_COMPILER_LIBRARY_ROOT "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}")
-    elseif(CMAKE_SYSROOT_LINK AND EXISTS "${CMAKE_SYSROOT_LINK}/usr/lib/cuda/version.txt")
-      set(CMAKE_CUDA_COMPILER_LIBRARY_ROOT "${CMAKE_SYSROOT_LINK}/usr/lib/cuda")
-    elseif(EXISTS "${CMAKE_SYSROOT}/usr/lib/cuda/version.txt")
-      set(CMAKE_CUDA_COMPILER_LIBRARY_ROOT "${CMAKE_SYSROOT}/usr/lib/cuda")
-    endif()
-  endif()
-
-  set(CMAKE_CUDA_COMPILER_ID_FLAGS_ALWAYS "-v")
-
-  if(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA")
-    set(nvcc_test_flags "--keep --keep-dir tmp")
-    if(CMAKE_CUDA_HOST_COMPILER)
-      string(APPEND nvcc_test_flags " -ccbin=\"${CMAKE_CUDA_HOST_COMPILER}\"")
-    endif()
-  elseif(CMAKE_CUDA_COMPILER_ID STREQUAL "Clang")
-    if(WIN32)
-      message(FATAL_ERROR "Clang with CUDA is not yet supported on Windows. See CMake issue #20776.")
-    endif()
-
-    set(clang_test_flags "--cuda-path=\"${CMAKE_CUDA_COMPILER_LIBRARY_ROOT}\"")
-    if(CMAKE_CROSSCOMPILING)
-      # Need to pass the host target and include directories if we're crosscompiling.
-      string(APPEND clang_test_flags " --sysroot=\"${CMAKE_SYSROOT}\" --target=${CMAKE_CUDA_COMPILER_TARGET}")
-    endif()
-  endif()
-
-  # First try with the user-specified architectures.
-  if(CMAKE_CUDA_ARCHITECTURES)
-    set(clang_archs "${clang_test_flags}")
-    set(nvcc_archs "${nvcc_test_flags}")
-
-    foreach(arch ${CMAKE_CUDA_ARCHITECTURES})
-      # Strip specifiers as PTX vs binary doesn't matter.
-      string(REGEX MATCH "[0-9]+" arch_name "${arch}")
-      string(APPEND clang_archs " --cuda-gpu-arch=sm_${arch_name}")
-      string(APPEND nvcc_archs " -gencode=arch=compute_${arch_name},code=sm_${arch_name}")
-      list(APPEND tested_architectures "${arch_name}")
-    endforeach()
-
-    list(APPEND CMAKE_CUDA_COMPILER_ID_TEST_FLAGS_FIRST "${clang_archs}")
-    list(APPEND CMAKE_CUDA_COMPILER_ID_TEST_FLAGS_FIRST "${nvcc_archs}")
-  endif()
-
-  # Fallback default NVCC flags.
-  list(APPEND CMAKE_CUDA_COMPILER_ID_TEST_FLAGS_FIRST ${nvcc_test_flags})
-
-  # Clang doesn't automatically select an architecture supported by the SDK.
-  # Try in reverse order of deprecation with the most recent at front (i.e. the most likely to work for new setups).
-  foreach(arch "20" "30" "52")
-    list(APPEND CMAKE_CUDA_COMPILER_ID_TEST_FLAGS_FIRST "${clang_test_flags} --cuda-gpu-arch=sm_${arch}")
-  endforeach()
-
-  # Finally also try the default.
-  list(APPEND CMAKE_CUDA_COMPILER_ID_TEST_FLAGS_FIRST "${clang_test_flags}")
-
-  # We perform compiler identification for a second time to extract implicit linking info and host compiler for NVCC.
-  # We also use it to verify that CMAKE_CUDA_ARCHITECTURES and additionaly on Clang that CUDA toolkit path works.
-  # The latter could be done during compiler testing in the future to avoid doing this for Clang.
-  # We need to unset the compiler ID otherwise CMAKE_DETERMINE_COMPILER_ID() doesn't work.
-  set(CMAKE_CUDA_COMPILER_ID)
-  set(CMAKE_CUDA_PLATFORM_ID)
-  file(READ ${CMAKE_ROOT}/Modules/CMakePlatformId.h.in
-    CMAKE_CUDA_COMPILER_ID_PLATFORM_CONTENT)
-
-  CMAKE_DETERMINE_COMPILER_ID(CUDA CUDAFLAGS CMakeCUDACompilerId.cu)
-
-  if(${CMAKE_GENERATOR} MATCHES "Visual Studio")
-    # Now that we have the path to nvcc, we can compute the toolkit root.
-    get_filename_component(CMAKE_CUDA_COMPILER_TOOLKIT_ROOT "${CMAKE_CUDA_COMPILER}" DIRECTORY)
-    get_filename_component(CMAKE_CUDA_COMPILER_TOOLKIT_ROOT "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}" DIRECTORY)
-    set(CMAKE_CUDA_COMPILER_LIBRARY_ROOT "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}")
-  endif()
-
-  _cmake_find_compiler_sysroot(CUDA)
-endif()
-
-set(_CMAKE_PROCESSING_LANGUAGE "CUDA")
-include(CMakeFindBinUtils)
-include(Compiler/${CMAKE_CUDA_COMPILER_ID}-FindBinUtils OPTIONAL)
-unset(_CMAKE_PROCESSING_LANGUAGE)
-
-if(MSVC_CUDA_ARCHITECTURE_ID)
-  set(SET_MSVC_CUDA_ARCHITECTURE_ID
-    "set(MSVC_CUDA_ARCHITECTURE_ID ${MSVC_CUDA_ARCHITECTURE_ID})")
-endif()
-
-if(${CMAKE_GENERATOR} MATCHES "Visual Studio")
-  set(CMAKE_CUDA_HOST_LINK_LAUNCHER "${CMAKE_LINKER}")
-  set(CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES "")
-  set(CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES "")
-  set(CMAKE_CUDA_HOST_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "")
-
-  # We do not currently detect CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES but we
-  # do need to detect CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT from the compiler by
-  # looking at which cudart library exists in the implicit link libraries passed
-  # to the host linker.
-  if(CMAKE_CUDA_COMPILER_PRODUCED_OUTPUT MATCHES "link\\.exe [^\n]*cudart_static\\.lib")
-    set(CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT "STATIC")
-  elseif(CMAKE_CUDA_COMPILER_PRODUCED_OUTPUT MATCHES "link\\.exe [^\n]*cudart\\.lib")
-    set(CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT "SHARED")
-  else()
-    set(CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT "NONE")
-  endif()
-  set(_SET_CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT
-    "set(CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT \"${CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT}\")")
-elseif(CMAKE_CUDA_COMPILER_ID STREQUAL "Clang")
-  if(NOT CMAKE_CUDA_ARCHITECTURES)
-    # Find the architecture that we successfully compiled using and set it as the default.
-    string(REGEX MATCH "-target-cpu sm_([0-9]+)" dont_care "${CMAKE_CUDA_COMPILER_PRODUCED_OUTPUT}")
-    set(detected_architecture "${CMAKE_MATCH_1}")
-  else()
-    string(REGEX MATCHALL "-target-cpu sm_([0-9]+)" target_cpus "${CMAKE_CUDA_COMPILER_PRODUCED_OUTPUT}")
-
-    foreach(cpu ${target_cpus})
-      string(REGEX MATCH "-target-cpu sm_([0-9]+)" dont_care "${cpu}")
-      list(APPEND architectures "${CMAKE_MATCH_1}")
-    endforeach()
-  endif()
-
-  # Find target directory. Account for crosscompiling.
-  if(CMAKE_CROSSCOMPILING)
-    if(CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7-a")
-      # Support for NVPACK
-      set(_CUDA_TARGET_NAME "armv7-linux-androideabi")
-    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
-      set(_CUDA_TARGET_NAME "armv7-linux-gnueabihf")
-    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
-      if(ANDROID_ARCH_NAME STREQUAL "arm64")
-        set(_CUDA_TARGET_NAME "aarch64-linux-androideabi")
-      else()
-        set(_CUDA_TARGET_NAME "aarch64-linux")
-      endif()
-    elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
-      set(_CUDA_TARGET_NAME "x86_64-linux")
-    endif()
-
-    if(EXISTS "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}/targets/${_CUDA_TARGET_NAME}")
-      set(_CUDA_TARGET_DIR "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}/targets/${_CUDA_TARGET_NAME}")
-    endif()
-  else()
-    set(_CUDA_TARGET_DIR "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}")
-  endif()
-
-  # We can't use find_library() yet at this point, so try a few guesses.
-  if(EXISTS "${_CUDA_TARGET_DIR}/lib64")
-    set(_CUDA_LIBRARY_DIR "${_CUDA_TARGET_DIR}/lib64")
-  elseif(EXISTS "${_CUDA_TARGET_DIR}/lib/x64")
-    set(_CUDA_LIBRARY_DIR "${_CUDA_TARGET_DIR}/lib/x64")
-  elseif(EXISTS "${_CUDA_TARGET_DIR}/lib")
-    set(_CUDA_LIBRARY_DIR "${_CUDA_TARGET_DIR}/lib")
-  else()
-    message(FATAL_ERROR "Unable to find _CUDA_LIBRARY_DIR based on _CUDA_TARGET_DIR=${_CUDA_TARGET_DIR}")
-  endif()
-
-  # _CUDA_TARGET_DIR always points to the directory containing the include directory.
-  # On a scattered installation /usr, on a non-scattered something like /usr/local/cuda or /usr/local/cuda-10.2/targets/aarch64-linux.
-  if(EXISTS "${_CUDA_TARGET_DIR}/include/cuda_runtime.h")
-    set(_CUDA_INCLUDE_DIR "${_CUDA_TARGET_DIR}/include")
-  else()
-    message(FATAL_ERROR "Unable to find cuda_runtime.h in \"${_CUDA_TARGET_DIR}/include\" for _CUDA_INCLUDE_DIR.")
-  endif()
-
-  # Clang does not add any CUDA SDK libraries or directories when invoking the host linker.
-  # Add the CUDA toolkit library directory ourselves so that linking works.
-  # The CUDA runtime libraries are handled elsewhere by CMAKE_CUDA_RUNTIME_LIBRARY.
-  set(CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES "${_CUDA_INCLUDE_DIR}")
-  set(CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES "${_CUDA_LIBRARY_DIR}")
-  set(CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES "")
-  set(CMAKE_CUDA_HOST_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "")
-elseif(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA")
-  set(_nvcc_log "")
-  string(REPLACE "\r" "" _nvcc_output_orig "${CMAKE_CUDA_COMPILER_PRODUCED_OUTPUT}")
-  if(_nvcc_output_orig MATCHES "#\\\$ +PATH= *([^\n]*)\n")
-    set(_nvcc_path "${CMAKE_MATCH_1}")
-    string(APPEND _nvcc_log "  found 'PATH=' string: [${_nvcc_path}]\n")
-    string(REPLACE ":" ";" _nvcc_path "${_nvcc_path}")
-  else()
-    set(_nvcc_path "")
-    string(REPLACE "\n" "\n    " _nvcc_output_log "\n${_nvcc_output_orig}")
-    string(APPEND _nvcc_log "  no 'PATH=' string found in nvcc output:${_nvcc_output_log}\n")
-  endif()
-  if(_nvcc_output_orig MATCHES "#\\\$ +LIBRARIES= *([^\n]*)\n")
-    set(_nvcc_libraries "${CMAKE_MATCH_1}")
-    string(APPEND _nvcc_log "  found 'LIBRARIES=' string: [${_nvcc_libraries}]\n")
-  else()
-    set(_nvcc_libraries "")
-    string(REPLACE "\n" "\n    " _nvcc_output_log "\n${_nvcc_output_orig}")
-    string(APPEND _nvcc_log "  no 'LIBRARIES=' string found in nvcc output:${_nvcc_output_log}\n")
-  endif()
-
-  set(_nvcc_link_line "")
-  if(_nvcc_libraries)
-    # Remove variable assignments.
-    string(REGEX REPLACE "#\\\$ *[^= ]+=[^\n]*\n" "" _nvcc_output "${_nvcc_output_orig}")
-    # Encode [] characters that break list expansion.
-    string(REPLACE "[" "{==={" _nvcc_output "${_nvcc_output}")
-    string(REPLACE "]" "}===}" _nvcc_output "${_nvcc_output}")
-    # Split lines.
-    string(REGEX REPLACE "\n+(#\\\$ )?" ";" _nvcc_output "${_nvcc_output}")
-    foreach(line IN LISTS _nvcc_output)
-      set(_nvcc_output_line "${line}")
-      string(REPLACE "{==={" "[" _nvcc_output_line "${_nvcc_output_line}")
-      string(REPLACE "}===}" "]" _nvcc_output_line "${_nvcc_output_line}")
-      string(APPEND _nvcc_log "  considering line: [${_nvcc_output_line}]\n")
-      if("${_nvcc_output_line}" MATCHES "^ *nvlink")
-        string(APPEND _nvcc_log "    ignoring nvlink line\n")
-      elseif(_nvcc_libraries)
-        if("${_nvcc_output_line}" MATCHES "(@\"?tmp/a\\.exe\\.res\"?)")
-          set(_nvcc_link_res_arg "${CMAKE_MATCH_1}")
-          set(_nvcc_link_res "${CMAKE_PLATFORM_INFO_DIR}/CompilerIdCUDA/tmp/a.exe.res")
-          if(EXISTS "${_nvcc_link_res}")
-            file(READ "${_nvcc_link_res}" _nvcc_link_res_content)
-            string(REPLACE "${_nvcc_link_res_arg}" "${_nvcc_link_res_content}" _nvcc_output_line "${_nvcc_output_line}")
-          endif()
-        endif()
-        string(FIND "${_nvcc_output_line}" "${_nvcc_libraries}" _nvcc_libraries_pos)
-        if(NOT _nvcc_libraries_pos EQUAL -1)
-          set(_nvcc_link_line "${_nvcc_output_line}")
-          string(APPEND _nvcc_log "    extracted link line: [${_nvcc_link_line}]\n")
-        endif()
-      endif()
-    endforeach()
-  endif()
-
-  if(_nvcc_link_line)
-    if("x${CMAKE_CUDA_SIMULATE_ID}" STREQUAL "xMSVC")
-      set(CMAKE_CUDA_HOST_LINK_LAUNCHER "${CMAKE_LINKER}")
-    else()
-      #extract the compiler that is being used for linking
-      separate_arguments(_nvcc_link_line_args UNIX_COMMAND "${_nvcc_link_line}")
-      list(GET _nvcc_link_line_args 0 _nvcc_host_link_launcher)
-      if(IS_ABSOLUTE "${_nvcc_host_link_launcher}")
-        string(APPEND _nvcc_log "  extracted link launcher absolute path: [${_nvcc_host_link_launcher}]\n")
-        set(CMAKE_CUDA_HOST_LINK_LAUNCHER "${_nvcc_host_link_launcher}")
-      else()
-        string(APPEND _nvcc_log "  extracted link launcher name: [${_nvcc_host_link_launcher}]\n")
-        find_program(_nvcc_find_host_link_launcher
-          NAMES ${_nvcc_host_link_launcher}
-          PATHS ${_nvcc_path} NO_DEFAULT_PATH)
-        find_program(_nvcc_find_host_link_launcher
-          NAMES ${_nvcc_host_link_launcher})
-        if(_nvcc_find_host_link_launcher)
-          string(APPEND _nvcc_log "  found link launcher absolute path: [${_nvcc_find_host_link_launcher}]\n")
-          set(CMAKE_CUDA_HOST_LINK_LAUNCHER "${_nvcc_find_host_link_launcher}")
-        else()
-          string(APPEND _nvcc_log "  could not find link launcher absolute path\n")
-          set(CMAKE_CUDA_HOST_LINK_LAUNCHER "${_nvcc_host_link_launcher}")
-        endif()
-        unset(_nvcc_find_host_link_launcher CACHE)
-      endif()
-    endif()
-
-    #prefix the line with cuda-fake-ld so that implicit link info believes it is
-    #a link line
-    set(_nvcc_link_line "cuda-fake-ld ${_nvcc_link_line}")
-    CMAKE_PARSE_IMPLICIT_LINK_INFO("${_nvcc_link_line}"
-                                   CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES
-                                   CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES
-                                   CMAKE_CUDA_HOST_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES
-                                   log
-                                   "${CMAKE_CUDA_IMPLICIT_OBJECT_REGEX}")
-
-    # Detect CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT from the compiler by looking at which
-    # cudart library exists in the implicit link libraries passed to the host linker.
-    # This is required when a project sets the cuda runtime library as part of the
-    # initial flags.
-    if(";${CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES};" MATCHES [[;cudart_static(\.lib)?;]])
-      set(CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT "STATIC")
-    elseif(";${CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES};" MATCHES [[;cudart(\.lib)?;]])
-      set(CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT "SHARED")
-    else()
-      set(CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT "NONE")
-    endif()
-    set(_SET_CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT
-      "set(CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT \"${CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT}\")")
-
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-      "Parsed CUDA nvcc implicit link information from above output:\n${_nvcc_log}\n${log}\n\n")
-  else()
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-      "Failed to parse CUDA nvcc implicit link information:\n${_nvcc_log}\n\n")
-    message(FATAL_ERROR "Failed to extract nvcc implicit link line.")
-  endif()
-endif()
-
-# CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES is detected above as the list of
-# libraries that the CUDA compiler implicitly passes to the host linker.
-# CMake invokes the host linker directly and so needs to pass these libraries.
-# We filter out those that should not be passed unconditionally both here
-# and from CMAKE_CUDA_IMPLICIT_LINK_LIBRARIES in CMakeTestCUDACompiler.
-set(CMAKE_CUDA_IMPLICIT_LINK_LIBRARIES_EXCLUDE
-  # The CUDA runtime libraries are controlled by CMAKE_CUDA_RUNTIME_LIBRARY.
-  cudart        cudart.lib
-  cudart_static cudart_static.lib
-  cudadevrt     cudadevrt.lib
-
-  # Dependencies of the CUDA static runtime library on Linux hosts.
-  rt
-  pthread
-  dl
-  )
-list(REMOVE_ITEM CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES ${CMAKE_CUDA_IMPLICIT_LINK_LIBRARIES_EXCLUDE})
-
-if(CMAKE_CUDA_COMPILER_SYSROOT)
-  string(CONCAT _SET_CMAKE_CUDA_COMPILER_SYSROOT
-    "set(CMAKE_CUDA_COMPILER_SYSROOT \"${CMAKE_CUDA_COMPILER_SYSROOT}\")\n"
-    "set(CMAKE_COMPILER_SYSROOT \"${CMAKE_CUDA_COMPILER_SYSROOT}\")")
-else()
-  set(_SET_CMAKE_CUDA_COMPILER_SYSROOT "")
-endif()
-
-# Determine CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES
-if(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA")
-  set(CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES)
-  string(REPLACE "\r" "" _nvcc_output_orig "${CMAKE_CUDA_COMPILER_PRODUCED_OUTPUT}")
-  if(_nvcc_output_orig MATCHES "#\\\$ +INCLUDES= *([^\n]*)\n")
-    set(_nvcc_includes "${CMAKE_MATCH_1}")
-    string(APPEND _nvcc_log "  found 'INCLUDES=' string: [${_nvcc_includes}]\n")
-  else()
-    set(_nvcc_includes "")
-    string(REPLACE "\n" "\n    " _nvcc_output_log "\n${_nvcc_output_orig}")
-    string(APPEND _nvcc_log "  no 'INCLUDES=' string found in nvcc output:${_nvcc_output_log}\n")
-  endif()
-  if(_nvcc_includes)
-    # across all operating system each include directory is prefixed with -I
-    separate_arguments(_nvcc_output NATIVE_COMMAND "${_nvcc_includes}")
-    foreach(line IN LISTS _nvcc_output)
-      string(REGEX REPLACE "^-I" "" line "${line}")
-      get_filename_component(line "${line}" ABSOLUTE)
-      list(APPEND CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES "${line}")
-    endforeach()
-
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-      "Parsed CUDA nvcc include information from above output:\n${_nvcc_log}\n${log}\n\n")
-  else()
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-      "Failed to detect CUDA nvcc include information:\n${_nvcc_log}\n\n")
-  endif()
-
-  # Parse default CUDA architecture.
-  cmake_policy(GET CMP0104 _CUDA_CMP0104)
-  if(NOT CMAKE_CUDA_ARCHITECTURES AND _CUDA_CMP0104 STREQUAL "NEW")
-    string(REGEX MATCH "arch[ =]compute_([0-9]+)" dont_care "${CMAKE_CUDA_COMPILER_PRODUCED_OUTPUT}")
-    set(detected_architecture "${CMAKE_MATCH_1}")
-  elseif(CMAKE_CUDA_ARCHITECTURES)
-    string(REGEX MATCHALL "-arch compute_([0-9]+)" target_cpus "${CMAKE_CUDA_COMPILER_PRODUCED_OUTPUT}")
-
-    foreach(cpu ${target_cpus})
-      string(REGEX MATCH "-arch compute_([0-9]+)" dont_care "${cpu}")
-      list(APPEND architectures "${CMAKE_MATCH_1}")
-    endforeach()
-  endif()
-endif()
-
-# If the user didn't set the architectures, then set them to a default.
-# If the user did, then make sure those architectures worked.
-if(DEFINED detected_architecture AND "${CMAKE_CUDA_ARCHITECTURES}" STREQUAL "")
-  set(CMAKE_CUDA_ARCHITECTURES "${detected_architecture}" CACHE STRING "CUDA architectures")
-
-  if(NOT CMAKE_CUDA_ARCHITECTURES)
-    message(FATAL_ERROR "Failed to find a working CUDA architecture.")
-  endif()
-elseif(architectures)
-  # Sort since order mustn't matter.
-  list(SORT architectures)
-  list(SORT tested_architectures)
-
-  # We don't distinguish real/virtual architectures during testing.
-  # For "70-real;70-virtual" we detect "70" as working and tested_architectures is "70;70".
-  # Thus we need to remove duplicates before checking if they're equal.
-  list(REMOVE_DUPLICATES tested_architectures)
-
-  if(NOT "${architectures}" STREQUAL "${tested_architectures}")
-    message(FATAL_ERROR
-      "The CMAKE_CUDA_ARCHITECTURES:\n"
-      "  ${CMAKE_CUDA_ARCHITECTURES}\n"
-      "do not all work with this compiler.  Try:\n"
-      "  ${architectures}\n"
-      "instead.")
-  endif()
-endif()
-
-# configure all variables set in this file
-configure_file(${CMAKE_ROOT}/Modules/CMakeCUDACompiler.cmake.in
-  ${CMAKE_PLATFORM_INFO_DIR}/CMakeCUDACompiler.cmake
-  @ONLY
-)
-
-# Don't leak variables unnecessarily to user code.
-unset(_CUDA_INCLUDE_DIR CACHE)
-unset(_CUDA_NVCC_EXECUTABLE CACHE)
-unset(_CUDA_LIBRARY_DIR)
-unset(_CUDA_TARGET_DIR)
-unset(_CUDA_TARGET_NAME)
-
-set(CMAKE_CUDA_COMPILER_ENV_VAR "CUDACXX")
-set(CMAKE_CUDA_HOST_COMPILER_ENV_VAR "CUDAHOSTCXX")
diff --git a/share/cmake-3.18/Modules/CMakeDetermineCXXCompiler.cmake b/share/cmake-3.18/Modules/CMakeDetermineCXXCompiler.cmake
deleted file mode 100644
index 662b831..0000000
--- a/share/cmake-3.18/Modules/CMakeDetermineCXXCompiler.cmake
+++ /dev/null
@@ -1,225 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# determine the compiler to use for C++ programs
-# NOTE, a generator may set CMAKE_CXX_COMPILER before
-# loading this file to force a compiler.
-# use environment variable CXX first if defined by user, next use
-# the cmake variable CMAKE_GENERATOR_CXX which can be defined by a generator
-# as a default compiler
-# If the internal cmake variable _CMAKE_TOOLCHAIN_PREFIX is set, this is used
-# as prefix for the tools (e.g. arm-elf-g++, arm-elf-ar etc.)
-#
-# Sets the following variables:
-#   CMAKE_CXX_COMPILER
-#   CMAKE_COMPILER_IS_GNUCXX
-#   CMAKE_AR
-#   CMAKE_RANLIB
-#
-# If not already set before, it also sets
-#   _CMAKE_TOOLCHAIN_PREFIX
-
-include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake)
-
-# Load system-specific compiler preferences for this language.
-include(Platform/${CMAKE_SYSTEM_NAME}-Determine-CXX OPTIONAL)
-include(Platform/${CMAKE_SYSTEM_NAME}-CXX OPTIONAL)
-if(NOT CMAKE_CXX_COMPILER_NAMES)
-  set(CMAKE_CXX_COMPILER_NAMES CC)
-endif()
-
-if(${CMAKE_GENERATOR} MATCHES "Visual Studio")
-elseif("${CMAKE_GENERATOR}" MATCHES "Green Hills MULTI")
-elseif("${CMAKE_GENERATOR}" MATCHES "Xcode")
-  set(CMAKE_CXX_COMPILER_XCODE_TYPE sourcecode.cpp.cpp)
-  _cmake_find_compiler_path(CXX)
-else()
-  if(NOT CMAKE_CXX_COMPILER)
-    set(CMAKE_CXX_COMPILER_INIT NOTFOUND)
-
-    # prefer the environment variable CXX
-    if(NOT $ENV{CXX} STREQUAL "")
-      get_filename_component(CMAKE_CXX_COMPILER_INIT $ENV{CXX} PROGRAM PROGRAM_ARGS CMAKE_CXX_FLAGS_ENV_INIT)
-      if(CMAKE_CXX_FLAGS_ENV_INIT)
-        set(CMAKE_CXX_COMPILER_ARG1 "${CMAKE_CXX_FLAGS_ENV_INIT}" CACHE STRING "First argument to CXX compiler")
-      endif()
-      if(NOT EXISTS ${CMAKE_CXX_COMPILER_INIT})
-        message(FATAL_ERROR "Could not find compiler set in environment variable CXX:\n$ENV{CXX}.\n${CMAKE_CXX_COMPILER_INIT}")
-      endif()
-    endif()
-
-    # next prefer the generator specified compiler
-    if(CMAKE_GENERATOR_CXX)
-      if(NOT CMAKE_CXX_COMPILER_INIT)
-        set(CMAKE_CXX_COMPILER_INIT ${CMAKE_GENERATOR_CXX})
-      endif()
-    endif()
-
-    # finally list compilers to try
-    if(NOT CMAKE_CXX_COMPILER_INIT)
-      set(CMAKE_CXX_COMPILER_LIST CC ${_CMAKE_TOOLCHAIN_PREFIX}c++ ${_CMAKE_TOOLCHAIN_PREFIX}g++ aCC cl bcc xlC clang++)
-    endif()
-
-    _cmake_find_compiler(CXX)
-  else()
-    _cmake_find_compiler_path(CXX)
-  endif()
-  mark_as_advanced(CMAKE_CXX_COMPILER)
-
-  # Each entry in this list is a set of extra flags to try
-  # adding to the compile line to see if it helps produce
-  # a valid identification file.
-  set(CMAKE_CXX_COMPILER_ID_TEST_FLAGS_FIRST)
-  set(CMAKE_CXX_COMPILER_ID_TEST_FLAGS
-    # Try compiling to an object file only.
-    "-c"
-    # IAR does not detect language automatically
-    "--c++"
-    "--ec++"
-
-    # ARMClang need target options
-    "--target=arm-arm-none-eabi -mcpu=cortex-m3"
-    )
-endif()
-
-# Build a small source file to identify the compiler.
-if(NOT CMAKE_CXX_COMPILER_ID_RUN)
-  set(CMAKE_CXX_COMPILER_ID_RUN 1)
-
-  # Try to identify the compiler.
-  set(CMAKE_CXX_COMPILER_ID)
-  set(CMAKE_CXX_PLATFORM_ID)
-  file(READ ${CMAKE_ROOT}/Modules/CMakePlatformId.h.in
-    CMAKE_CXX_COMPILER_ID_PLATFORM_CONTENT)
-
-  # The IAR compiler produces weird output.
-  # See https://gitlab.kitware.com/cmake/cmake/-/issues/10176#note_153591
-  list(APPEND CMAKE_CXX_COMPILER_ID_VENDORS IAR)
-  set(CMAKE_CXX_COMPILER_ID_VENDOR_FLAGS_IAR )
-  set(CMAKE_CXX_COMPILER_ID_VENDOR_REGEX_IAR "IAR .+ Compiler")
-
-  # Match the link line from xcodebuild output of the form
-  #  Ld ...
-  #      ...
-  #      /path/to/cc ...CompilerIdCXX/...
-  # to extract the compiler front-end for the language.
-  set(CMAKE_CXX_COMPILER_ID_TOOL_MATCH_REGEX "\nLd[^\n]*(\n[ \t]+[^\n]*)*\n[ \t]+([^ \t\r\n]+)[^\r\n]*-o[^\r\n]*CompilerIdCXX/(\\./)?(CompilerIdCXX.(framework|xctest)/)?CompilerIdCXX[ \t\n\\\"]")
-  set(CMAKE_CXX_COMPILER_ID_TOOL_MATCH_INDEX 2)
-
-  include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerId.cmake)
-  CMAKE_DETERMINE_COMPILER_ID(CXX CXXFLAGS CMakeCXXCompilerId.cpp)
-
-  _cmake_find_compiler_sysroot(CXX)
-
-  # Set old compiler and platform id variables.
-  if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-    set(CMAKE_COMPILER_IS_GNUCXX 1)
-  endif()
-  if(CMAKE_CXX_PLATFORM_ID MATCHES "MinGW")
-    set(CMAKE_COMPILER_IS_MINGW 1)
-  elseif(CMAKE_CXX_PLATFORM_ID MATCHES "Cygwin")
-    set(CMAKE_COMPILER_IS_CYGWIN 1)
-  endif()
-else()
-  if(NOT DEFINED CMAKE_CXX_COMPILER_FRONTEND_VARIANT)
-    # Some toolchain files set our internal CMAKE_CXX_COMPILER_ID_RUN
-    # variable but are not aware of CMAKE_CXX_COMPILER_FRONTEND_VARIANT.
-    # They pre-date our support for the GNU-like variant targeting the
-    # MSVC ABI so we do not consider that here.
-    if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
-      if("x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
-        set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "MSVC")
-      else()
-        set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "GNU")
-      endif()
-    else()
-      set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "")
-    endif()
-  endif()
-endif()
-
-if (NOT _CMAKE_TOOLCHAIN_LOCATION)
-  get_filename_component(_CMAKE_TOOLCHAIN_LOCATION "${CMAKE_CXX_COMPILER}" PATH)
-endif ()
-
-# if we have a g++ cross compiler, they have usually some prefix, like
-# e.g. powerpc-linux-g++, arm-elf-g++ or i586-mingw32msvc-g++ , optionally
-# with a 3-component version number at the end (e.g. arm-eabi-gcc-4.5.2).
-# The other tools of the toolchain usually have the same prefix
-# NAME_WE cannot be used since then this test will fail for names like
-# "arm-unknown-nto-qnx6.3.0-gcc.exe", where BASENAME would be
-# "arm-unknown-nto-qnx6" instead of the correct "arm-unknown-nto-qnx6.3.0-"
-
-
-if (NOT _CMAKE_TOOLCHAIN_PREFIX)
-
-  if("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU|Clang|QCC")
-    get_filename_component(COMPILER_BASENAME "${CMAKE_CXX_COMPILER}" NAME)
-    if (COMPILER_BASENAME MATCHES "^(.+-)(clan)?[gc]\\+\\+(-[0-9]+(\\.[0-9]+)*)?(-[^.]+)?(\\.exe)?$")
-      set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
-      set(_CMAKE_COMPILER_SUFFIX ${CMAKE_MATCH_5})
-    elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
-      if(CMAKE_CXX_COMPILER_TARGET)
-        set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_CXX_COMPILER_TARGET}-)
-      endif()
-    elseif(COMPILER_BASENAME MATCHES "QCC(\\.exe)?$")
-      if(CMAKE_CXX_COMPILER_TARGET MATCHES "gcc_nto([a-z0-9]+_[0-9]+|[^_le]+)(le)")
-        set(_CMAKE_TOOLCHAIN_PREFIX nto${CMAKE_MATCH_1}-)
-      endif()
-    endif ()
-
-    # if "llvm-" is part of the prefix, remove it, since llvm doesn't have its own binutils
-    # but uses the regular ar, objcopy, etc. (instead of llvm-objcopy etc.)
-    if ("${_CMAKE_TOOLCHAIN_PREFIX}" MATCHES "(.+-)?llvm-$")
-      set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
-    endif ()
-  elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "TI")
-    # TI compilers are named e.g. cl6x, cl470 or armcl.exe
-    get_filename_component(COMPILER_BASENAME "${CMAKE_CXX_COMPILER}" NAME)
-    if (COMPILER_BASENAME MATCHES "^(.+)?cl([^.]+)?(\\.exe)?$")
-      set(_CMAKE_TOOLCHAIN_PREFIX "${CMAKE_MATCH_1}")
-      set(_CMAKE_TOOLCHAIN_SUFFIX "${CMAKE_MATCH_2}")
-    endif ()
-
-  endif()
-
-endif ()
-
-set(_CMAKE_PROCESSING_LANGUAGE "CXX")
-include(CMakeFindBinUtils)
-include(Compiler/${CMAKE_CXX_COMPILER_ID}-FindBinUtils OPTIONAL)
-unset(_CMAKE_PROCESSING_LANGUAGE)
-
-if(CMAKE_CXX_COMPILER_SYSROOT)
-  string(CONCAT _SET_CMAKE_CXX_COMPILER_SYSROOT
-    "set(CMAKE_CXX_COMPILER_SYSROOT \"${CMAKE_CXX_COMPILER_SYSROOT}\")\n"
-    "set(CMAKE_COMPILER_SYSROOT \"${CMAKE_CXX_COMPILER_SYSROOT}\")")
-else()
-  set(_SET_CMAKE_CXX_COMPILER_SYSROOT "")
-endif()
-
-if(CMAKE_CXX_COMPILER_ARCHITECTURE_ID)
-  set(_SET_CMAKE_CXX_COMPILER_ARCHITECTURE_ID
-    "set(CMAKE_CXX_COMPILER_ARCHITECTURE_ID ${CMAKE_CXX_COMPILER_ARCHITECTURE_ID})")
-else()
-  set(_SET_CMAKE_CXX_COMPILER_ARCHITECTURE_ID "")
-endif()
-
-if(MSVC_CXX_ARCHITECTURE_ID)
-  set(SET_MSVC_CXX_ARCHITECTURE_ID
-    "set(MSVC_CXX_ARCHITECTURE_ID ${MSVC_CXX_ARCHITECTURE_ID})")
-endif()
-
-if(CMAKE_CXX_XCODE_ARCHS)
-  set(SET_CMAKE_XCODE_ARCHS
-    "set(CMAKE_XCODE_ARCHS \"${CMAKE_CXX_XCODE_ARCHS}\")")
-endif()
-
-# configure all variables set in this file
-configure_file(${CMAKE_ROOT}/Modules/CMakeCXXCompiler.cmake.in
-  ${CMAKE_PLATFORM_INFO_DIR}/CMakeCXXCompiler.cmake
-  @ONLY
-  )
-
-set(CMAKE_CXX_COMPILER_ENV_VAR "CXX")
diff --git a/share/cmake-3.18/Modules/CMakeDetermineCompileFeatures.cmake b/share/cmake-3.18/Modules/CMakeDetermineCompileFeatures.cmake
deleted file mode 100644
index b50e5f1..0000000
--- a/share/cmake-3.18/Modules/CMakeDetermineCompileFeatures.cmake
+++ /dev/null
@@ -1,147 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-function(cmake_determine_compile_features lang)
-
-  if(lang STREQUAL C AND COMMAND cmake_record_c_compile_features)
-    message(CHECK_START "Detecting ${lang} compile features")
-
-    set(CMAKE_C90_COMPILE_FEATURES)
-    set(CMAKE_C99_COMPILE_FEATURES)
-    set(CMAKE_C11_COMPILE_FEATURES)
-
-    include("${CMAKE_ROOT}/Modules/Internal/FeatureTesting.cmake")
-
-    cmake_record_c_compile_features()
-
-    if(NOT _result EQUAL 0)
-      message(CHECK_FAIL "failed")
-      return()
-    endif()
-
-    if (CMAKE_C99_COMPILE_FEATURES AND CMAKE_C11_COMPILE_FEATURES)
-      list(REMOVE_ITEM CMAKE_C11_COMPILE_FEATURES ${CMAKE_C99_COMPILE_FEATURES})
-    endif()
-    if (CMAKE_C90_COMPILE_FEATURES AND CMAKE_C99_COMPILE_FEATURES)
-      list(REMOVE_ITEM CMAKE_C99_COMPILE_FEATURES ${CMAKE_C90_COMPILE_FEATURES})
-    endif()
-
-    if(NOT CMAKE_C_COMPILE_FEATURES)
-      set(CMAKE_C_COMPILE_FEATURES
-        ${CMAKE_C90_COMPILE_FEATURES}
-        ${CMAKE_C99_COMPILE_FEATURES}
-        ${CMAKE_C11_COMPILE_FEATURES}
-      )
-    endif()
-
-    set(CMAKE_C_COMPILE_FEATURES ${CMAKE_C_COMPILE_FEATURES} PARENT_SCOPE)
-    set(CMAKE_C90_COMPILE_FEATURES ${CMAKE_C90_COMPILE_FEATURES} PARENT_SCOPE)
-    set(CMAKE_C99_COMPILE_FEATURES ${CMAKE_C99_COMPILE_FEATURES} PARENT_SCOPE)
-    set(CMAKE_C11_COMPILE_FEATURES ${CMAKE_C11_COMPILE_FEATURES} PARENT_SCOPE)
-
-    message(CHECK_PASS "done")
-
-  elseif(lang STREQUAL CXX AND COMMAND cmake_record_cxx_compile_features)
-    message(CHECK_START "Detecting ${lang} compile features")
-
-    set(CMAKE_CXX98_COMPILE_FEATURES)
-    set(CMAKE_CXX11_COMPILE_FEATURES)
-    set(CMAKE_CXX14_COMPILE_FEATURES)
-    set(CMAKE_CXX17_COMPILE_FEATURES)
-    set(CMAKE_CXX20_COMPILE_FEATURES)
-
-    include("${CMAKE_ROOT}/Modules/Internal/FeatureTesting.cmake")
-
-    cmake_record_cxx_compile_features()
-
-    if(NOT _result EQUAL 0)
-      message(CHECK_FAIL "failed")
-      return()
-    endif()
-
-    if (CMAKE_CXX17_COMPILE_FEATURES AND CMAKE_CXX20_COMPILE_FEATURES)
-      list(REMOVE_ITEM CMAKE_CXX20_COMPILE_FEATURES ${CMAKE_CXX17_COMPILE_FEATURES})
-    endif()
-    if (CMAKE_CXX14_COMPILE_FEATURES AND CMAKE_CXX17_COMPILE_FEATURES)
-      list(REMOVE_ITEM CMAKE_CXX17_COMPILE_FEATURES ${CMAKE_CXX14_COMPILE_FEATURES})
-    endif()
-    if (CMAKE_CXX11_COMPILE_FEATURES AND CMAKE_CXX14_COMPILE_FEATURES)
-      list(REMOVE_ITEM CMAKE_CXX14_COMPILE_FEATURES ${CMAKE_CXX11_COMPILE_FEATURES})
-    endif()
-    if (CMAKE_CXX98_COMPILE_FEATURES AND CMAKE_CXX11_COMPILE_FEATURES)
-      list(REMOVE_ITEM CMAKE_CXX11_COMPILE_FEATURES ${CMAKE_CXX98_COMPILE_FEATURES})
-    endif()
-
-    if(NOT CMAKE_CXX_COMPILE_FEATURES)
-      set(CMAKE_CXX_COMPILE_FEATURES
-        ${CMAKE_CXX98_COMPILE_FEATURES}
-        ${CMAKE_CXX11_COMPILE_FEATURES}
-        ${CMAKE_CXX14_COMPILE_FEATURES}
-        ${CMAKE_CXX17_COMPILE_FEATURES}
-        ${CMAKE_CXX20_COMPILE_FEATURES}
-      )
-    endif()
-
-    set(CMAKE_CXX_COMPILE_FEATURES ${CMAKE_CXX_COMPILE_FEATURES} PARENT_SCOPE)
-    set(CMAKE_CXX98_COMPILE_FEATURES ${CMAKE_CXX98_COMPILE_FEATURES} PARENT_SCOPE)
-    set(CMAKE_CXX11_COMPILE_FEATURES ${CMAKE_CXX11_COMPILE_FEATURES} PARENT_SCOPE)
-    set(CMAKE_CXX14_COMPILE_FEATURES ${CMAKE_CXX14_COMPILE_FEATURES} PARENT_SCOPE)
-    set(CMAKE_CXX17_COMPILE_FEATURES ${CMAKE_CXX17_COMPILE_FEATURES} PARENT_SCOPE)
-    set(CMAKE_CXX20_COMPILE_FEATURES ${CMAKE_CXX20_COMPILE_FEATURES} PARENT_SCOPE)
-
-    message(CHECK_PASS "done")
-
-  elseif(lang STREQUAL CUDA AND COMMAND cmake_record_cuda_compile_features)
-    message(CHECK_START "Detecting ${lang} compile features")
-
-    set(CMAKE_CUDA03_COMPILE_FEATURES)
-    set(CMAKE_CUDA11_COMPILE_FEATURES)
-    set(CMAKE_CUDA14_COMPILE_FEATURES)
-    set(CMAKE_CUDA17_COMPILE_FEATURES)
-    set(CMAKE_CUDA20_COMPILE_FEATURES)
-
-    include("${CMAKE_ROOT}/Modules/Internal/FeatureTesting.cmake")
-
-    cmake_record_cuda_compile_features()
-
-    if(NOT _result EQUAL 0)
-      message(CHECK_FAIL "failed")
-      return()
-    endif()
-
-  if (CMAKE_CUDA17_COMPILE_FEATURES AND CMAKE_CUDA20_COMPILE_FEATURES)
-      list(REMOVE_ITEM CMAKE_CUDA20_COMPILE_FEATURES ${CMAKE_CUDA17_COMPILE_FEATURES})
-    endif()
-    if (CMAKE_CUDA14_COMPILE_FEATURES AND CMAKE_CUDA17_COMPILE_FEATURES)
-      list(REMOVE_ITEM CMAKE_CUDA17_COMPILE_FEATURES ${CMAKE_CUDA14_COMPILE_FEATURES})
-    endif()
-    if (CMAKE_CUDA11_COMPILE_FEATURES AND CMAKE_CUDA14_COMPILE_FEATURES)
-      list(REMOVE_ITEM CMAKE_CUDA14_COMPILE_FEATURES ${CMAKE_CUDA11_COMPILE_FEATURES})
-    endif()
-    if (CMAKE_CUDA03_COMPILE_FEATURES AND CMAKE_CUDA11_COMPILE_FEATURES)
-      list(REMOVE_ITEM CMAKE_CUDA11_COMPILE_FEATURES ${CMAKE_CUDA03_COMPILE_FEATURES})
-    endif()
-
-    if(NOT CMAKE_CUDA_COMPILE_FEATURES)
-      set(CMAKE_CUDA_COMPILE_FEATURES
-        ${CMAKE_CUDA03_COMPILE_FEATURES}
-        ${CMAKE_CUDA11_COMPILE_FEATURES}
-        ${CMAKE_CUDA14_COMPILE_FEATURES}
-        ${CMAKE_CUDA17_COMPILE_FEATURES}
-        ${CMAKE_CUDA20_COMPILE_FEATURES}
-      )
-    endif()
-
-    set(CMAKE_CUDA_COMPILE_FEATURES ${CMAKE_CUDA_COMPILE_FEATURES} PARENT_SCOPE)
-    set(CMAKE_CUDA03_COMPILE_FEATURES ${CMAKE_CUDA03_COMPILE_FEATURES} PARENT_SCOPE)
-    set(CMAKE_CUDA11_COMPILE_FEATURES ${CMAKE_CUDA11_COMPILE_FEATURES} PARENT_SCOPE)
-    set(CMAKE_CUDA14_COMPILE_FEATURES ${CMAKE_CUDA14_COMPILE_FEATURES} PARENT_SCOPE)
-    set(CMAKE_CUDA17_COMPILE_FEATURES ${CMAKE_CUDA17_COMPILE_FEATURES} PARENT_SCOPE)
-    set(CMAKE_CUDA20_COMPILE_FEATURES ${CMAKE_CUDA20_COMPILE_FEATURES} PARENT_SCOPE)
-
-    message(CHECK_PASS "done")
-
-  endif()
-
-endfunction()
diff --git a/share/cmake-3.18/Modules/CMakeDetermineCompiler.cmake b/share/cmake-3.18/Modules/CMakeDetermineCompiler.cmake
deleted file mode 100644
index cb1ab1d..0000000
--- a/share/cmake-3.18/Modules/CMakeDetermineCompiler.cmake
+++ /dev/null
@@ -1,152 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-macro(_cmake_find_compiler lang)
-  # Use already-enabled languages for reference.
-  get_property(_languages GLOBAL PROPERTY ENABLED_LANGUAGES)
-  list(REMOVE_ITEM _languages "${lang}")
-
-  if(CMAKE_${lang}_COMPILER_INIT)
-    # Search only for the specified compiler.
-    set(CMAKE_${lang}_COMPILER_LIST "${CMAKE_${lang}_COMPILER_INIT}")
-  else()
-    # Re-order the compiler list with preferred vendors first.
-    set(_${lang}_COMPILER_LIST "${CMAKE_${lang}_COMPILER_LIST}")
-    set(CMAKE_${lang}_COMPILER_LIST "")
-    # Prefer vendors of compilers from reference languages.
-    foreach(l ${_languages})
-      list(APPEND CMAKE_${lang}_COMPILER_LIST
-        ${_${lang}_COMPILER_NAMES_${CMAKE_${l}_COMPILER_ID}})
-    endforeach()
-    # Prefer vendors based on the platform.
-    list(APPEND CMAKE_${lang}_COMPILER_LIST ${CMAKE_${lang}_COMPILER_NAMES})
-    # Append the rest of the list and remove duplicates.
-    list(APPEND CMAKE_${lang}_COMPILER_LIST ${_${lang}_COMPILER_LIST})
-    unset(_${lang}_COMPILER_LIST)
-    list(REMOVE_DUPLICATES CMAKE_${lang}_COMPILER_LIST)
-    if(CMAKE_${lang}_COMPILER_EXCLUDE)
-      list(REMOVE_ITEM CMAKE_${lang}_COMPILER_LIST
-        ${CMAKE_${lang}_COMPILER_EXCLUDE})
-    endif()
-  endif()
-
-  # Look for directories containing compilers of reference languages.
-  set(_${lang}_COMPILER_HINTS)
-  foreach(l ${_languages})
-    if(CMAKE_${l}_COMPILER AND IS_ABSOLUTE "${CMAKE_${l}_COMPILER}")
-      get_filename_component(_hint "${CMAKE_${l}_COMPILER}" PATH)
-      if(IS_DIRECTORY "${_hint}")
-        list(APPEND _${lang}_COMPILER_HINTS "${_hint}")
-      endif()
-      unset(_hint)
-    endif()
-  endforeach()
-
-  # Find the compiler.
-  if(_${lang}_COMPILER_HINTS)
-    # Prefer directories containing compilers of reference languages.
-    list(REMOVE_DUPLICATES _${lang}_COMPILER_HINTS)
-    find_program(CMAKE_${lang}_COMPILER
-      NAMES ${CMAKE_${lang}_COMPILER_LIST}
-      PATHS ${_${lang}_COMPILER_HINTS}
-      NO_DEFAULT_PATH
-      DOC "${lang} compiler")
-  endif()
-  if(CMAKE_HOST_WIN32 AND CMAKE_GENERATOR MATCHES "Ninja")
-    # On Windows command-line builds, the Makefile generators each imply
-    # a preferred compiler tool.  The Ninja generator does not imply a
-    # compiler tool, so use the compiler that occurs first in PATH.
-    find_program(CMAKE_${lang}_COMPILER
-      NAMES ${CMAKE_${lang}_COMPILER_LIST}
-      NAMES_PER_DIR
-      DOC "${lang} compiler"
-      NO_PACKAGE_ROOT_PATH
-      NO_CMAKE_PATH
-      NO_CMAKE_ENVIRONMENT_PATH
-      NO_CMAKE_SYSTEM_PATH
-      )
-  endif()
-  find_program(CMAKE_${lang}_COMPILER NAMES ${CMAKE_${lang}_COMPILER_LIST} DOC "${lang} compiler")
-  if(CMAKE_${lang}_COMPILER_INIT AND NOT CMAKE_${lang}_COMPILER)
-    set_property(CACHE CMAKE_${lang}_COMPILER PROPERTY VALUE "${CMAKE_${lang}_COMPILER_INIT}")
-  endif()
-  unset(_${lang}_COMPILER_HINTS)
-  unset(_languages)
-
-  # Look for a make tool provided by Xcode
-  if(CMAKE_HOST_APPLE)
-    macro(_query_xcrun compiler_name result_var_keyword result_var)
-      if(NOT "x${result_var_keyword}" STREQUAL "xRESULT_VAR")
-        message(FATAL_ERROR "Bad arguments to macro")
-      endif()
-      execute_process(COMMAND xcrun --find ${compiler_name}
-        OUTPUT_VARIABLE _xcrun_out OUTPUT_STRIP_TRAILING_WHITESPACE
-        ERROR_VARIABLE _xcrun_err)
-      set("${result_var}" "${_xcrun_out}")
-    endmacro()
-
-    set(xcrun_result)
-    if (CMAKE_${lang}_COMPILER MATCHES "^/usr/bin/(.+)$")
-      _query_xcrun("${CMAKE_MATCH_1}" RESULT_VAR xcrun_result)
-    elseif (CMAKE_${lang}_COMPILER STREQUAL "CMAKE_${lang}_COMPILER-NOTFOUND")
-      foreach(comp ${CMAKE_${lang}_COMPILER_LIST})
-        _query_xcrun("${comp}" RESULT_VAR xcrun_result)
-        if(xcrun_result)
-          break()
-        endif()
-      endforeach()
-    endif()
-    if (xcrun_result)
-      set_property(CACHE CMAKE_${lang}_COMPILER PROPERTY VALUE "${xcrun_result}")
-    endif()
-  endif()
-endmacro()
-
-macro(_cmake_find_compiler_path lang)
-  if(CMAKE_${lang}_COMPILER)
-    # we only get here if CMAKE_${lang}_COMPILER was specified using -D or a pre-made CMakeCache.txt
-    # (e.g. via ctest) or set in CMAKE_TOOLCHAIN_FILE
-    # if CMAKE_${lang}_COMPILER is a list of length 2, use the first item as
-    # CMAKE_${lang}_COMPILER and the 2nd one as CMAKE_${lang}_COMPILER_ARG1
-    list(LENGTH CMAKE_${lang}_COMPILER _CMAKE_${lang}_COMPILER_LIST_LENGTH)
-    if("${_CMAKE_${lang}_COMPILER_LIST_LENGTH}" EQUAL 2)
-      list(GET CMAKE_${lang}_COMPILER 1 CMAKE_${lang}_COMPILER_ARG1)
-      list(GET CMAKE_${lang}_COMPILER 0 CMAKE_${lang}_COMPILER)
-    endif()
-    unset(_CMAKE_${lang}_COMPILER_LIST_LENGTH)
-
-    # find the compiler in the PATH if necessary
-    get_filename_component(_CMAKE_USER_${lang}_COMPILER_PATH "${CMAKE_${lang}_COMPILER}" PATH)
-    if(NOT _CMAKE_USER_${lang}_COMPILER_PATH)
-      find_program(CMAKE_${lang}_COMPILER_WITH_PATH NAMES ${CMAKE_${lang}_COMPILER})
-      if(CMAKE_${lang}_COMPILER_WITH_PATH)
-        set(CMAKE_${lang}_COMPILER ${CMAKE_${lang}_COMPILER_WITH_PATH})
-        get_property(_CMAKE_${lang}_COMPILER_CACHED CACHE CMAKE_${lang}_COMPILER PROPERTY TYPE)
-        if(_CMAKE_${lang}_COMPILER_CACHED)
-          set(CMAKE_${lang}_COMPILER "${CMAKE_${lang}_COMPILER}" CACHE STRING "${lang} compiler" FORCE)
-        endif()
-        unset(_CMAKE_${lang}_COMPILER_CACHED)
-      endif()
-      unset(CMAKE_${lang}_COMPILER_WITH_PATH CACHE)
-    endif()
-  endif()
-endmacro()
-
-function(_cmake_find_compiler_sysroot lang)
-  if(CMAKE_${lang}_COMPILER_ID STREQUAL "GNU")
-    execute_process(COMMAND "${CMAKE_${lang}_COMPILER}" -print-sysroot
-      OUTPUT_STRIP_TRAILING_WHITESPACE
-      OUTPUT_VARIABLE _cmake_sysroot_run_out
-      ERROR_VARIABLE _cmake_sysroot_run_err)
-
-    if(_cmake_sysroot_run_out AND NOT _cmake_sysroot_run_err
-        AND NOT _cmake_sysroot_run_out STREQUAL "/"
-        AND IS_DIRECTORY "${_cmake_sysroot_run_out}/usr")
-      file(TO_CMAKE_PATH "${_cmake_sysroot_run_out}/usr" _cmake_sysroot_run_out_usr)
-      set(CMAKE_${lang}_COMPILER_SYSROOT "${_cmake_sysroot_run_out_usr}" PARENT_SCOPE)
-    else()
-      set(CMAKE_${lang}_COMPILER_SYSROOT "" PARENT_SCOPE)
-    endif()
-  endif()
-endfunction()
diff --git a/share/cmake-3.18/Modules/CMakeDetermineCompilerABI.cmake b/share/cmake-3.18/Modules/CMakeDetermineCompilerABI.cmake
deleted file mode 100644
index 50d5cd1..0000000
--- a/share/cmake-3.18/Modules/CMakeDetermineCompilerABI.cmake
+++ /dev/null
@@ -1,190 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# Function to compile a source file to identify the compiler ABI.
-# This is used internally by CMake and should not be included by user
-# code.
-
-include(${CMAKE_ROOT}/Modules/CMakeParseImplicitIncludeInfo.cmake)
-include(${CMAKE_ROOT}/Modules/CMakeParseImplicitLinkInfo.cmake)
-include(CMakeTestCompilerCommon)
-
-function(CMAKE_DETERMINE_COMPILER_ABI lang src)
-  if(NOT DEFINED CMAKE_${lang}_ABI_COMPILED)
-    message(CHECK_START "Detecting ${lang} compiler ABI info")
-
-    # Compile the ABI identification source.
-    set(BIN "${CMAKE_PLATFORM_INFO_DIR}/CMakeDetermineCompilerABI_${lang}.bin")
-    set(CMAKE_FLAGS )
-    set(COMPILE_DEFINITIONS )
-    if(DEFINED CMAKE_${lang}_VERBOSE_FLAG)
-      set(CMAKE_FLAGS "-DEXE_LINKER_FLAGS=${CMAKE_${lang}_VERBOSE_FLAG}")
-      set(COMPILE_DEFINITIONS "${CMAKE_${lang}_VERBOSE_FLAG}")
-    endif()
-    if(DEFINED CMAKE_${lang}_VERBOSE_COMPILE_FLAG)
-      set(COMPILE_DEFINITIONS "${CMAKE_${lang}_VERBOSE_COMPILE_FLAG}")
-    endif()
-    if(NOT "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xMSVC")
-      # Avoid adding our own platform standard libraries for compilers
-      # from which we might detect implicit link libraries.
-      list(APPEND CMAKE_FLAGS "-DCMAKE_${lang}_STANDARD_LIBRARIES=")
-    endif()
-    __TestCompiler_setTryCompileTargetType()
-
-    # Avoid failing ABI detection on warnings.
-    string(REGEX REPLACE "(^| )-Werror(=[^ ]*)?( |$)" " " CMAKE_${lang}_FLAGS "${CMAKE_${lang}_FLAGS}")
-
-    # Save the current LC_ALL, LC_MESSAGES, and LANG environment variables
-    # and set them to "C" that way GCC's "search starts here" text is in
-    # English and we can grok it.
-    set(_orig_lc_all      $ENV{LC_ALL})
-    set(_orig_lc_messages $ENV{LC_MESSAGES})
-    set(_orig_lang        $ENV{LANG})
-    set(ENV{LC_ALL}      C)
-    set(ENV{LC_MESSAGES} C)
-    set(ENV{LANG}        C)
-
-    try_compile(CMAKE_${lang}_ABI_COMPILED
-      ${CMAKE_BINARY_DIR} ${src}
-      CMAKE_FLAGS ${CMAKE_FLAGS}
-                  # Ignore unused flags when we are just determining the ABI.
-                  "--no-warn-unused-cli"
-      COMPILE_DEFINITIONS ${COMPILE_DEFINITIONS}
-      OUTPUT_VARIABLE OUTPUT
-      COPY_FILE "${BIN}"
-      COPY_FILE_ERROR _copy_error
-      __CMAKE_INTERNAL ABI
-      )
-
-    # Restore original LC_ALL, LC_MESSAGES, and LANG
-    set(ENV{LC_ALL}      ${_orig_lc_all})
-    set(ENV{LC_MESSAGES} ${_orig_lc_messages})
-    set(ENV{LANG}        ${_orig_lang})
-
-    # Move result from cache to normal variable.
-    set(CMAKE_${lang}_ABI_COMPILED ${CMAKE_${lang}_ABI_COMPILED})
-    unset(CMAKE_${lang}_ABI_COMPILED CACHE)
-    if(CMAKE_${lang}_ABI_COMPILED AND _copy_error)
-      set(CMAKE_${lang}_ABI_COMPILED 0)
-    endif()
-    set(CMAKE_${lang}_ABI_COMPILED ${CMAKE_${lang}_ABI_COMPILED} PARENT_SCOPE)
-
-    # Load the resulting information strings.
-    if(CMAKE_${lang}_ABI_COMPILED)
-      message(CHECK_PASS "done")
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-        "Detecting ${lang} compiler ABI info compiled with the following output:\n${OUTPUT}\n\n")
-      file(STRINGS "${BIN}" ABI_STRINGS LIMIT_COUNT 2 REGEX "INFO:[A-Za-z0-9_]+\\[[^]]*\\]")
-      foreach(info ${ABI_STRINGS})
-        if("${info}" MATCHES "INFO:sizeof_dptr\\[0*([^]]*)\\]")
-          set(ABI_SIZEOF_DPTR "${CMAKE_MATCH_1}")
-        endif()
-        if("${info}" MATCHES "INFO:abi\\[([^]]*)\\]")
-          set(ABI_NAME "${CMAKE_MATCH_1}")
-        endif()
-      endforeach()
-
-      if(ABI_SIZEOF_DPTR)
-        set(CMAKE_${lang}_SIZEOF_DATA_PTR "${ABI_SIZEOF_DPTR}" PARENT_SCOPE)
-      elseif(CMAKE_${lang}_SIZEOF_DATA_PTR_DEFAULT)
-        set(CMAKE_${lang}_SIZEOF_DATA_PTR "${CMAKE_${lang}_SIZEOF_DATA_PTR_DEFAULT}" PARENT_SCOPE)
-      endif()
-
-      if(ABI_NAME)
-        set(CMAKE_${lang}_COMPILER_ABI "${ABI_NAME}" PARENT_SCOPE)
-      endif()
-
-      # Parse implicit include directory for this language, if available.
-      if(CMAKE_${lang}_VERBOSE_FLAG)
-        set (implicit_incdirs "")
-        cmake_parse_implicit_include_info("${OUTPUT}" "${lang}"
-          implicit_incdirs log rv)
-        file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-          "Parsed ${lang} implicit include dir info from above output: rv=${rv}\n${log}\n\n")
-        if("${rv}" STREQUAL "done")
-          # Entries that we have been told to explicitly pass as standard include
-          # directories will not be implicitly added by the compiler.
-          if(CMAKE_${lang}_STANDARD_INCLUDE_DIRECTORIES)
-            list(REMOVE_ITEM implicit_incdirs ${CMAKE_${lang}_STANDARD_INCLUDE_DIRECTORIES})
-          endif()
-
-          # We parsed implicit include directories, so override the default initializer.
-          set(_CMAKE_${lang}_IMPLICIT_INCLUDE_DIRECTORIES_INIT "${implicit_incdirs}")
-        endif()
-      endif()
-      set(CMAKE_${lang}_IMPLICIT_INCLUDE_DIRECTORIES "${_CMAKE_${lang}_IMPLICIT_INCLUDE_DIRECTORIES_INIT}" PARENT_SCOPE)
-
-      # Parse implicit linker information for this language, if available.
-      set(implicit_dirs "")
-      set(implicit_libs "")
-      set(implicit_fwks "")
-      if(CMAKE_${lang}_VERBOSE_FLAG)
-        CMAKE_PARSE_IMPLICIT_LINK_INFO("${OUTPUT}" implicit_libs implicit_dirs implicit_fwks log
-          "${CMAKE_${lang}_IMPLICIT_OBJECT_REGEX}")
-        file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-          "Parsed ${lang} implicit link information from above output:\n${log}\n\n")
-      endif()
-      # for VS IDE Intel Fortran we have to figure out the
-      # implicit link path for the fortran run time using
-      # a try-compile
-      if("${lang}" MATCHES "Fortran"
-          AND "${CMAKE_GENERATOR}" MATCHES "Visual Studio")
-        message(CHECK_START "Determine Intel Fortran Compiler Implicit Link Path")
-        # Build a sample project which reports symbols.
-        try_compile(IFORT_LIB_PATH_COMPILED
-          ${CMAKE_BINARY_DIR}/CMakeFiles/IntelVSImplicitPath
-          ${CMAKE_ROOT}/Modules/IntelVSImplicitPath
-          IntelFortranImplicit
-          CMAKE_FLAGS
-          "-DCMAKE_Fortran_FLAGS:STRING=${CMAKE_Fortran_FLAGS}"
-          OUTPUT_VARIABLE _output)
-        file(WRITE
-          "${CMAKE_BINARY_DIR}/CMakeFiles/IntelVSImplicitPath/output.txt"
-          "${_output}")
-        include(${CMAKE_BINARY_DIR}/CMakeFiles/IntelVSImplicitPath/output.cmake OPTIONAL)
-        message(CHECK_PASS "done")
-      endif()
-
-      # Implicit link libraries cannot be used explicitly for multiple
-      # OS X architectures, so we skip it.
-      if(DEFINED CMAKE_OSX_ARCHITECTURES)
-        if("${CMAKE_OSX_ARCHITECTURES}" MATCHES ";")
-          set(implicit_libs "")
-        endif()
-      endif()
-
-      set(CMAKE_${lang}_IMPLICIT_LINK_LIBRARIES "${implicit_libs}" PARENT_SCOPE)
-      set(CMAKE_${lang}_IMPLICIT_LINK_DIRECTORIES "${implicit_dirs}" PARENT_SCOPE)
-      set(CMAKE_${lang}_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "${implicit_fwks}" PARENT_SCOPE)
-
-      # Detect library architecture directory name.
-      if(CMAKE_LIBRARY_ARCHITECTURE_REGEX)
-        foreach(dir ${implicit_dirs})
-          if("${dir}" MATCHES "/lib/${CMAKE_LIBRARY_ARCHITECTURE_REGEX}$")
-            get_filename_component(arch "${dir}" NAME)
-            set(CMAKE_${lang}_LIBRARY_ARCHITECTURE "${arch}" PARENT_SCOPE)
-            break()
-          endif()
-        endforeach()
-      elseif(CMAKE_CXX_COMPILER_ID STREQUAL QCC)
-        foreach(dir ${implicit_dirs})
-          if (dir MATCHES "/lib$")
-            get_filename_component(assumedArchDir "${dir}" DIRECTORY)
-            get_filename_component(archParentDir "${assumedArchDir}" DIRECTORY)
-            if (archParentDir STREQUAL CMAKE_SYSROOT)
-              get_filename_component(archDirName "${assumedArchDir}" NAME)
-              set(CMAKE_${lang}_LIBRARY_ARCHITECTURE "${archDirName}" PARENT_SCOPE)
-              break()
-            endif()
-          endif()
-        endforeach()
-      endif()
-
-    else()
-      message(CHECK_FAIL "failed")
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-        "Detecting ${lang} compiler ABI info failed to compile with the following output:\n${OUTPUT}\n${_copy_error}\n\n")
-    endif()
-  endif()
-endfunction()
diff --git a/share/cmake-3.18/Modules/CMakeDetermineCompilerId.cmake b/share/cmake-3.18/Modules/CMakeDetermineCompilerId.cmake
deleted file mode 100644
index 44332a6..0000000
--- a/share/cmake-3.18/Modules/CMakeDetermineCompilerId.cmake
+++ /dev/null
@@ -1,956 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# Function to compile a source file to identify the compiler.  This is
-# used internally by CMake and should not be included by user code.
-# If successful, sets CMAKE_<lang>_COMPILER_ID and CMAKE_<lang>_PLATFORM_ID
-
-function(CMAKE_DETERMINE_COMPILER_ID lang flagvar src)
-  # Make sure the compiler arguments are clean.
-  string(STRIP "${CMAKE_${lang}_COMPILER_ARG1}" CMAKE_${lang}_COMPILER_ID_ARG1)
-  string(REGEX REPLACE " +" ";" CMAKE_${lang}_COMPILER_ID_ARG1 "${CMAKE_${lang}_COMPILER_ID_ARG1}")
-
-  # Make sure user-specified compiler flags are used.
-  if(CMAKE_${lang}_FLAGS)
-    set(CMAKE_${lang}_COMPILER_ID_FLAGS ${CMAKE_${lang}_FLAGS})
-  else()
-    set(CMAKE_${lang}_COMPILER_ID_FLAGS $ENV{${flagvar}})
-  endif()
-  string(REPLACE " " ";" CMAKE_${lang}_COMPILER_ID_FLAGS_LIST "${CMAKE_${lang}_COMPILER_ID_FLAGS}")
-
-  # Compute the directory in which to run the test.
-  set(CMAKE_${lang}_COMPILER_ID_DIR ${CMAKE_PLATFORM_INFO_DIR}/CompilerId${lang})
-
-  # Try building with no extra flags and then try each set
-  # of helper flags.  Stop when the compiler is identified.
-  foreach(userflags "${CMAKE_${lang}_COMPILER_ID_FLAGS_LIST}" "")
-    foreach(testflags ${CMAKE_${lang}_COMPILER_ID_TEST_FLAGS_FIRST}
-                      ""
-                      ${CMAKE_${lang}_COMPILER_ID_TEST_FLAGS})
-      separate_arguments(testflags UNIX_COMMAND "${testflags}")
-      CMAKE_DETERMINE_COMPILER_ID_BUILD("${lang}" "${testflags}" "${userflags}" "${src}")
-      CMAKE_DETERMINE_COMPILER_ID_MATCH_VENDOR("${lang}" "${COMPILER_${lang}_PRODUCED_OUTPUT}")
-      if(CMAKE_${lang}_COMPILER_ID)
-        break()
-      endif()
-      foreach(file ${COMPILER_${lang}_PRODUCED_FILES})
-        CMAKE_DETERMINE_COMPILER_ID_CHECK("${lang}" "${CMAKE_${lang}_COMPILER_ID_DIR}/${file}" "${src}")
-      endforeach()
-      if(CMAKE_${lang}_COMPILER_ID)
-        break()
-      endif()
-    endforeach()
-    if(CMAKE_${lang}_COMPILER_ID)
-      break()
-    endif()
-  endforeach()
-
-  # Check if compiler id detection gave us the compiler tool.
-  if(CMAKE_${lang}_COMPILER_ID_TOOL)
-    set(CMAKE_${lang}_COMPILER "${CMAKE_${lang}_COMPILER_ID_TOOL}")
-    set(CMAKE_${lang}_COMPILER "${CMAKE_${lang}_COMPILER_ID_TOOL}" PARENT_SCOPE)
-  elseif(NOT CMAKE_${lang}_COMPILER)
-    set(CMAKE_${lang}_COMPILER "CMAKE_${lang}_COMPILER-NOTFOUND" PARENT_SCOPE)
-  endif()
-
-  # If the compiler is still unknown, try to query its vendor.
-  if(CMAKE_${lang}_COMPILER AND NOT CMAKE_${lang}_COMPILER_ID)
-    foreach(userflags "${CMAKE_${lang}_COMPILER_ID_FLAGS_LIST}" "")
-      CMAKE_DETERMINE_COMPILER_ID_VENDOR(${lang} "${userflags}")
-    endforeach()
-  endif()
-
-  # If the compiler is still unknown, fallback to GHS
-  if(NOT CMAKE_${lang}_COMPILER_ID  AND "${CMAKE_GENERATOR}" MATCHES "Green Hills MULTI")
-    set(CMAKE_${lang}_COMPILER_ID GHS)
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-        "The ${lang} compiler identification is falling back to GHS.\n\n")
-  endif()
-
-  # CUDA < 7.5 is missing version macros
-  if(lang STREQUAL "CUDA"
-     AND CMAKE_${lang}_COMPILER_ID STREQUAL "NVIDIA"
-     AND NOT CMAKE_${lang}_COMPILER_VERSION)
-    execute_process(
-      COMMAND "${CMAKE_${lang}_COMPILER}"
-      --version
-      OUTPUT_VARIABLE output ERROR_VARIABLE output
-      RESULT_VARIABLE result
-      TIMEOUT 10
-    )
-    if(output MATCHES [=[ V([0-9]+)\.([0-9]+)\.([0-9]+)]=])
-      set(CMAKE_${lang}_COMPILER_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}")
-    endif()
-  endif()
-
-  # For Swift we need to explicitly query the version.
-  if(lang STREQUAL "Swift"
-     AND CMAKE_${lang}_COMPILER
-     AND NOT CMAKE_${lang}_COMPILER_VERSION)
-    execute_process(
-      COMMAND "${CMAKE_${lang}_COMPILER}"
-      -version
-      OUTPUT_VARIABLE output ERROR_VARIABLE output
-      RESULT_VARIABLE result
-      TIMEOUT 10
-    )
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-      "Running the ${lang} compiler: \"${CMAKE_${lang}_COMPILER}\" -version\n"
-      "${output}\n"
-      )
-
-    if(output MATCHES [[Swift version ([0-9]+\.[0-9]+(\.[0-9]+)?)]])
-      set(CMAKE_${lang}_COMPILER_VERSION "${CMAKE_MATCH_1}")
-      if(NOT CMAKE_${lang}_COMPILER_ID)
-        set(CMAKE_Swift_COMPILER_ID "Apple")
-      endif()
-    endif()
-  endif()
-
-  if (COMPILER_QNXNTO AND CMAKE_${lang}_COMPILER_ID STREQUAL "GNU")
-    execute_process(
-      COMMAND "${CMAKE_${lang}_COMPILER}"
-      -V
-      OUTPUT_VARIABLE output ERROR_VARIABLE output
-      RESULT_VARIABLE result
-      TIMEOUT 10
-      )
-    if (output MATCHES "targets available")
-      set(CMAKE_${lang}_COMPILER_ID QCC)
-      # http://community.qnx.com/sf/discussion/do/listPosts/projects.community/discussion.qnx_momentics_community_support.topc3555?_pagenum=2
-      # The qcc driver does not itself have a version.
-    endif()
-  endif()
-
-  # if the format is unknown after all files have been checked, put "Unknown" in the cache
-  if(NOT CMAKE_EXECUTABLE_FORMAT)
-    set(CMAKE_EXECUTABLE_FORMAT "Unknown" CACHE INTERNAL "Executable file format")
-  endif()
-
-  if(CMAKE_GENERATOR MATCHES "^Ninja" AND MSVC_${lang}_ARCHITECTURE_ID)
-    foreach(userflags "${CMAKE_${lang}_COMPILER_ID_FLAGS_LIST}" "")
-      CMAKE_DETERMINE_MSVC_SHOWINCLUDES_PREFIX(${lang} "${userflags}")
-    endforeach()
-  else()
-    set(CMAKE_${lang}_CL_SHOWINCLUDES_PREFIX "")
-  endif()
-
-  set(_variant "")
-  if("x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xClang")
-    if("x${CMAKE_${lang}_SIMULATE_ID}" STREQUAL "xMSVC")
-      if(CMAKE_GENERATOR MATCHES "Visual Studio")
-        set(CMAKE_${lang}_COMPILER_FRONTEND_VARIANT "MSVC")
-      else()
-        # Test whether an MSVC-like command-line option works.
-        execute_process(COMMAND "${CMAKE_${lang}_COMPILER}" -?
-          RESULT_VARIABLE _clang_result
-          OUTPUT_VARIABLE _clang_stdout
-          ERROR_VARIABLE _clang_stderr)
-        if(_clang_result EQUAL 0)
-          set(CMAKE_${lang}_COMPILER_FRONTEND_VARIANT "MSVC")
-        else()
-          set(CMAKE_${lang}_COMPILER_FRONTEND_VARIANT "GNU")
-        endif()
-      endif()
-      set(_variant " with ${CMAKE_${lang}_COMPILER_FRONTEND_VARIANT}-like command-line")
-    else()
-      set(CMAKE_${lang}_COMPILER_FRONTEND_VARIANT "GNU")
-    endif()
-  else()
-    set(CMAKE_${lang}_COMPILER_FRONTEND_VARIANT "")
-  endif()
-
-  # Display the final identification result.
-  if(CMAKE_${lang}_COMPILER_ID)
-    if(CMAKE_${lang}_COMPILER_VERSION)
-      set(_version " ${CMAKE_${lang}_COMPILER_VERSION}")
-    else()
-      set(_version "")
-    endif()
-    if(CMAKE_${lang}_COMPILER_ARCHITECTURE_ID AND "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xIAR")
-      set(_archid " ${CMAKE_${lang}_COMPILER_ARCHITECTURE_ID}")
-    else()
-      set(_archid "")
-    endif()
-    message(STATUS "The ${lang} compiler identification is "
-      "${CMAKE_${lang}_COMPILER_ID}${_archid}${_version}${_variant}")
-    unset(_archid)
-    unset(_version)
-    unset(_variant)
-  else()
-    message(STATUS "The ${lang} compiler identification is unknown")
-  endif()
-
-  if(lang STREQUAL "Fortran" AND CMAKE_${lang}_COMPILER_ID STREQUAL "XL")
-    set(CMAKE_${lang}_XL_CPP "${CMAKE_${lang}_COMPILER_ID_CPP}" PARENT_SCOPE)
-  endif()
-
-  set(CMAKE_${lang}_COMPILER_ID "${CMAKE_${lang}_COMPILER_ID}" PARENT_SCOPE)
-  set(CMAKE_${lang}_PLATFORM_ID "${CMAKE_${lang}_PLATFORM_ID}" PARENT_SCOPE)
-  set(CMAKE_${lang}_COMPILER_ARCHITECTURE_ID "${CMAKE_${lang}_COMPILER_ARCHITECTURE_ID}" PARENT_SCOPE)
-  set(MSVC_${lang}_ARCHITECTURE_ID "${MSVC_${lang}_ARCHITECTURE_ID}"
-    PARENT_SCOPE)
-  set(CMAKE_${lang}_XCODE_ARCHS "${CMAKE_${lang}_XCODE_ARCHS}" PARENT_SCOPE)
-  set(CMAKE_${lang}_CL_SHOWINCLUDES_PREFIX "${CMAKE_${lang}_CL_SHOWINCLUDES_PREFIX}" PARENT_SCOPE)
-  set(CMAKE_${lang}_COMPILER_FRONTEND_VARIANT "${CMAKE_${lang}_COMPILER_FRONTEND_VARIANT}" PARENT_SCOPE)
-  set(CMAKE_${lang}_COMPILER_VERSION "${CMAKE_${lang}_COMPILER_VERSION}" PARENT_SCOPE)
-  set(CMAKE_${lang}_COMPILER_VERSION_INTERNAL "${CMAKE_${lang}_COMPILER_VERSION_INTERNAL}" PARENT_SCOPE)
-  set(CMAKE_${lang}_COMPILER_WRAPPER "${CMAKE_${lang}_COMPILER_WRAPPER}" PARENT_SCOPE)
-  set(CMAKE_${lang}_SIMULATE_ID "${CMAKE_${lang}_SIMULATE_ID}" PARENT_SCOPE)
-  set(CMAKE_${lang}_SIMULATE_VERSION "${CMAKE_${lang}_SIMULATE_VERSION}" PARENT_SCOPE)
-  set(CMAKE_${lang}_STANDARD_COMPUTED_DEFAULT "${CMAKE_${lang}_STANDARD_COMPUTED_DEFAULT}" PARENT_SCOPE)
-  set(CMAKE_${lang}_COMPILER_PRODUCED_OUTPUT "${COMPILER_${lang}_PRODUCED_OUTPUT}" PARENT_SCOPE)
-  set(CMAKE_${lang}_COMPILER_PRODUCED_FILES "${COMPILER_${lang}_PRODUCED_FILES}" PARENT_SCOPE)
-endfunction()
-
-include(CMakeCompilerIdDetection)
-
-#-----------------------------------------------------------------------------
-# Function to write the compiler id source file.
-function(CMAKE_DETERMINE_COMPILER_ID_WRITE lang src)
-  find_file(src_in ${src}.in PATHS ${CMAKE_ROOT}/Modules ${CMAKE_MODULE_PATH} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
-  file(READ ${src_in} ID_CONTENT_IN)
-
-  compiler_id_detection(CMAKE_${lang}_COMPILER_ID_CONTENT ${lang}
-    ID_STRING
-    VERSION_STRINGS
-    PLATFORM_DEFAULT_COMPILER
-  )
-
-  unset(src_in CACHE)
-  string(CONFIGURE "${ID_CONTENT_IN}" ID_CONTENT_OUT @ONLY)
-  file(WRITE ${CMAKE_${lang}_COMPILER_ID_DIR}/${src} "${ID_CONTENT_OUT}")
-endfunction()
-
-#-----------------------------------------------------------------------------
-# Function to build the compiler id source file and look for output
-# files.
-function(CMAKE_DETERMINE_COMPILER_ID_BUILD lang testflags userflags src)
-  # Create a clean working directory.
-  file(REMOVE_RECURSE ${CMAKE_${lang}_COMPILER_ID_DIR})
-  file(MAKE_DIRECTORY ${CMAKE_${lang}_COMPILER_ID_DIR})
-  file(MAKE_DIRECTORY ${CMAKE_${lang}_COMPILER_ID_DIR}/tmp)
-  CMAKE_DETERMINE_COMPILER_ID_WRITE("${lang}" "${src}")
-
-  # Construct a description of this test case.
-  set(COMPILER_DESCRIPTION
-    "Compiler: ${CMAKE_${lang}_COMPILER} ${CMAKE_${lang}_COMPILER_ID_ARG1}
-Build flags: ${userflags}
-Id flags: ${testflags} ${CMAKE_${lang}_COMPILER_ID_FLAGS_ALWAYS}
-")
-
-  # Compile the compiler identification source.
-  if("${CMAKE_GENERATOR}" MATCHES "Visual Studio ([0-9]+)")
-    set(vs_version ${CMAKE_MATCH_1})
-    set(id_platform ${CMAKE_VS_PLATFORM_NAME})
-    set(id_lang "${lang}")
-    set(id_PostBuildEvent_Command "")
-    if(CMAKE_VS_PLATFORM_TOOLSET MATCHES "^[Ll][Ll][Vv][Mm](_v[0-9]+(_xp)?)?$")
-      set(id_cl_var "ClangClExecutable")
-    elseif(CMAKE_VS_PLATFORM_TOOLSET MATCHES "^[Cc][Ll][Aa][Nn][Gg][Cc][Ll]$")
-      set(id_cl "$(CLToolExe)")
-    elseif(CMAKE_VS_PLATFORM_TOOLSET MATCHES "v[0-9]+_clang_.*")
-      set(id_cl clang.exe)
-    else()
-      set(id_cl cl.exe)
-    endif()
-    if(CMAKE_VS_PLATFORM_NAME STREQUAL "Tegra-Android")
-      set(v NsightTegra)
-      set(ext vcxproj)
-      if(lang STREQUAL CXX)
-        set(id_gcc g++)
-        set(id_clang clang++)
-      else()
-        set(id_gcc gcc)
-        set(id_clang clang)
-      endif()
-    elseif(lang STREQUAL Fortran)
-      set(v Intel)
-      set(ext vfproj)
-      set(id_cl ifort.exe)
-    elseif(lang STREQUAL CSharp)
-      set(v 10)
-      set(ext csproj)
-      set(id_cl csc.exe)
-    elseif(NOT "${vs_version}" VERSION_LESS 10)
-      set(v 10)
-      set(ext vcxproj)
-    else()
-      set(id_version ${vs_version}.00)
-      set(v 7)
-      set(ext vcproj)
-    endif()
-    if(CMAKE_VS_PLATFORM_TOOLSET)
-      if(CMAKE_VS_PLATFORM_NAME STREQUAL "Tegra-Android")
-        set(id_toolset "<NdkToolchainVersion>${CMAKE_VS_PLATFORM_TOOLSET}</NdkToolchainVersion>")
-      else()
-        set(id_toolset "<PlatformToolset>${CMAKE_VS_PLATFORM_TOOLSET}</PlatformToolset>")
-        if(CMAKE_VS_PLATFORM_TOOLSET MATCHES "Intel")
-          set(id_cl icl.exe)
-        endif()
-        if(CMAKE_VS_PLATFORM_TOOLSET_VERSION)
-          set(id_sep "\\")
-          if(CMAKE_VS_PLATFORM_TOOLSET_VERSION VERSION_GREATER_EQUAL "14.20")
-            if(EXISTS "${CMAKE_GENERATOR_INSTANCE}/VC/Auxiliary/Build.${CMAKE_VS_PLATFORM_TOOLSET_VERSION}/Microsoft.VCToolsVersion.${CMAKE_VS_PLATFORM_TOOLSET_VERSION}.props")
-              set(id_sep ".")
-            endif()
-          endif()
-          set(id_toolset_version_props "<Import Project=\"${CMAKE_GENERATOR_INSTANCE}\\VC\\Auxiliary\\Build${id_sep}${CMAKE_VS_PLATFORM_TOOLSET_VERSION}\\Microsoft.VCToolsVersion.${CMAKE_VS_PLATFORM_TOOLSET_VERSION}.props\" />")
-          unset(id_sep)
-        endif()
-      endif()
-    else()
-      set(id_toolset "")
-      set(id_toolset_version_props "")
-    endif()
-    if(CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE)
-      set(id_PreferredToolArchitecture "<PreferredToolArchitecture>${CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE}</PreferredToolArchitecture>")
-    else()
-      set(id_PreferredToolArchitecture "")
-    endif()
-    if(CMAKE_SYSTEM_NAME STREQUAL "WindowsPhone")
-      set(id_system "<ApplicationType>Windows Phone</ApplicationType>")
-    elseif(CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
-      set(id_system "<ApplicationType>Windows Store</ApplicationType>")
-    else()
-      set(id_system "")
-    endif()
-    if(id_system AND CMAKE_SYSTEM_VERSION MATCHES "^([0-9]+\\.[0-9]+)")
-      set(id_system_version "<ApplicationTypeRevision>${CMAKE_MATCH_1}</ApplicationTypeRevision>")
-    else()
-      set(id_system_version "")
-    endif()
-    if(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION)
-      set(id_WindowsTargetPlatformVersion "<WindowsTargetPlatformVersion>${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}</WindowsTargetPlatformVersion>")
-    endif()
-    if(CMAKE_VS_PLATFORM_TOOLSET_VCTARGETS_CUSTOM_DIR)
-      set(id_ToolsetVCTargetsDir "<VCTargetsPath>${CMAKE_VS_PLATFORM_TOOLSET_VCTARGETS_CUSTOM_DIR}</VCTargetsPath>")
-    endif()
-    set(id_CustomGlobals "")
-    foreach(pair IN LISTS CMAKE_VS_GLOBALS)
-      if("${pair}" MATCHES "([^=]+)=(.*)$")
-        string(APPEND id_CustomGlobals "<${CMAKE_MATCH_1}>${CMAKE_MATCH_2}</${CMAKE_MATCH_1}>\n    ")
-      endif()
-    endforeach()
-    if(id_platform STREQUAL ARM64)
-      set(id_WindowsSDKDesktopARMSupport "<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>")
-    elseif(id_platform STREQUAL ARM)
-      set(id_WindowsSDKDesktopARMSupport "<WindowsSDKDesktopARMSupport>true</WindowsSDKDesktopARMSupport>")
-    else()
-      set(id_WindowsSDKDesktopARMSupport "")
-    endif()
-    if(CMAKE_VS_WINCE_VERSION)
-      set(id_entrypoint "mainACRTStartup")
-      if("${vs_version}" VERSION_LESS 9)
-        set(id_subsystem 9)
-      else()
-        set(id_subsystem 8)
-      endif()
-    else()
-      set(id_subsystem 1)
-    endif()
-    set(id_dir ${CMAKE_${lang}_COMPILER_ID_DIR})
-    set(id_src "${src}")
-    set(id_compile "ClCompile")
-    if(id_cl_var)
-      set(id_PostBuildEvent_Command "echo CMAKE_${lang}_COMPILER=$(${id_cl_var})")
-    else()
-      set(id_PostBuildEvent_Command "for %%i in (${id_cl}) do %40echo CMAKE_${lang}_COMPILER=%%~$PATH:i")
-    endif()
-    set(id_Import_props "")
-    set(id_Import_targets "")
-    set(id_ItemDefinitionGroup_entry "")
-    set(id_Link_AdditionalDependencies "")
-    if(lang STREQUAL CUDA)
-      if(NOT CMAKE_VS_PLATFORM_TOOLSET_CUDA)
-        message(FATAL_ERROR "No CUDA toolset found.")
-      endif()
-      set(cuda_tools "CUDA ${CMAKE_VS_PLATFORM_TOOLSET_CUDA}")
-      set(id_compile "CudaCompile")
-      set(id_ItemDefinitionGroup_entry "<CudaCompile><AdditionalOptions>%(AdditionalOptions)-v</AdditionalOptions></CudaCompile>")
-      set(id_PostBuildEvent_Command [[echo CMAKE_CUDA_COMPILER=$(CudaToolkitBinDir)\nvcc.exe]])
-      if(CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR)
-        set(id_CudaToolkitCustomDir "<CudaToolkitCustomDir>${CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR}nvcc</CudaToolkitCustomDir>")
-        string(CONCAT id_Import_props "<Import Project=\"${CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR}\\CUDAVisualStudioIntegration\\extras\\visual_studio_integration\\MSBuildExtensions\\${cuda_tools}.props\" />")
-        string(CONCAT id_Import_targets "<Import Project=\"${CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR}\\CUDAVisualStudioIntegration\\extras\\visual_studio_integration\\MSBuildExtensions\\${cuda_tools}.targets\" />")
-      else()
-        string(CONCAT id_Import_props [[<Import Project="$(VCTargetsPath)\BuildCustomizations\]] "${cuda_tools}" [[.props" />]])
-        string(CONCAT id_Import_targets [[<Import Project="$(VCTargetsPath)\BuildCustomizations\]] "${cuda_tools}" [[.targets" />]])
-      endif()
-      if(CMAKE_VS_PLATFORM_NAME STREQUAL x64)
-        set(id_ItemDefinitionGroup_entry "<CudaCompile><TargetMachinePlatform>64</TargetMachinePlatform><AdditionalOptions>%(AdditionalOptions)-v</AdditionalOptions></CudaCompile>")
-      endif()
-      if(CMAKE_CUDA_FLAGS MATCHES "(^| )-cudart +shared( |$)")
-        set(id_Link_AdditionalDependencies "<AdditionalDependencies>cudart.lib</AdditionalDependencies>")
-      else()
-        set(id_Link_AdditionalDependencies "<AdditionalDependencies>cudart_static.lib</AdditionalDependencies>")
-      endif()
-    endif()
-    configure_file(${CMAKE_ROOT}/Modules/CompilerId/VS-${v}.${ext}.in
-      ${id_dir}/CompilerId${lang}.${ext} @ONLY)
-    if(CMAKE_VS_MSBUILD_COMMAND AND NOT lang STREQUAL "Fortran")
-      set(command "${CMAKE_VS_MSBUILD_COMMAND}" "CompilerId${lang}.${ext}"
-        "/p:Configuration=Debug" "/p:Platform=${id_platform}" "/p:VisualStudioVersion=${vs_version}.0"
-        )
-    elseif(CMAKE_VS_DEVENV_COMMAND)
-      set(command "${CMAKE_VS_DEVENV_COMMAND}" "CompilerId${lang}.${ext}" "/build" "Debug")
-    else()
-      set(command "")
-    endif()
-    if(command)
-      execute_process(
-        COMMAND ${command}
-        WORKING_DIRECTORY ${CMAKE_${lang}_COMPILER_ID_DIR}
-        OUTPUT_VARIABLE CMAKE_${lang}_COMPILER_ID_OUTPUT
-        ERROR_VARIABLE CMAKE_${lang}_COMPILER_ID_OUTPUT
-        RESULT_VARIABLE CMAKE_${lang}_COMPILER_ID_RESULT
-        )
-    else()
-      set(CMAKE_${lang}_COMPILER_ID_RESULT 1)
-      set(CMAKE_${lang}_COMPILER_ID_OUTPUT "VS environment not known to support ${lang}")
-    endif()
-    # Match the compiler location line printed out.
-    if("${CMAKE_${lang}_COMPILER_ID_OUTPUT}" MATCHES "CMAKE_${lang}_COMPILER=([^%\r\n]+)[\r\n]")
-      # Strip VS diagnostic output from the end of the line.
-      string(REGEX REPLACE " \\(TaskId:[0-9]*\\)$" "" _comp "${CMAKE_MATCH_1}")
-      if(EXISTS "${_comp}")
-        file(TO_CMAKE_PATH "${_comp}" _comp)
-        set(CMAKE_${lang}_COMPILER_ID_TOOL "${_comp}" PARENT_SCOPE)
-      endif()
-    endif()
-  elseif("${CMAKE_GENERATOR}" MATCHES "Xcode")
-    set(id_lang "${lang}")
-    set(id_type ${CMAKE_${lang}_COMPILER_XCODE_TYPE})
-    set(id_dir ${CMAKE_${lang}_COMPILER_ID_DIR})
-    set(id_src "${src}")
-    if(CMAKE_XCODE_PLATFORM_TOOLSET)
-      set(id_toolset "GCC_VERSION = ${CMAKE_XCODE_PLATFORM_TOOLSET};")
-    else()
-      set(id_toolset "")
-    endif()
-    if("${lang}" STREQUAL "Swift")
-      if(CMAKE_Swift_LANGUAGE_VERSION)
-        set(id_lang_version "SWIFT_VERSION = ${CMAKE_Swift_LANGUAGE_VERSION};")
-      elseif(XCODE_VERSION VERSION_GREATER_EQUAL 10.2)
-        set(id_lang_version "SWIFT_VERSION = 4.0;")
-      elseif(XCODE_VERSION VERSION_GREATER_EQUAL 8.3)
-        set(id_lang_version "SWIFT_VERSION = 3.0;")
-      else()
-        set(id_lang_version "SWIFT_VERSION = 2.3;")
-      endif()
-    else()
-      set(id_lang_version "")
-    endif()
-    if(CMAKE_OSX_DEPLOYMENT_TARGET)
-      set(id_deployment_target
-        "MACOSX_DEPLOYMENT_TARGET = \"${CMAKE_OSX_DEPLOYMENT_TARGET}\";")
-    else()
-      set(id_deployment_target "")
-    endif()
-    set(id_product_type "com.apple.product-type.tool")
-    if(CMAKE_OSX_SYSROOT)
-      set(id_sdkroot "SDKROOT = \"${CMAKE_OSX_SYSROOT}\";")
-      if(CMAKE_OSX_SYSROOT MATCHES "(^|/)[Ii][Pp][Hh][Oo][Nn][Ee]" OR
-        CMAKE_OSX_SYSROOT MATCHES "(^|/)[Aa][Pp][Pp][Ll][Ee][Tt][Vv]")
-        set(id_product_type "com.apple.product-type.bundle.unit-test")
-      elseif(CMAKE_OSX_SYSROOT MATCHES "(^|/)[Ww][Aa][Tt][Cc][Hh]")
-        set(id_product_type "com.apple.product-type.framework")
-      endif()
-    else()
-      set(id_sdkroot "")
-    endif()
-    set(id_clang_cxx_library "")
-    set(stdlib_regex "(^| )(-stdlib=)([^ ]+)( |$)")
-    string(REGEX MATCHALL "${stdlib_regex}" all_stdlib_matches "${CMAKE_CXX_FLAGS}")
-    if(all_stdlib_matches)
-      list(GET all_stdlib_matches "-1" last_stdlib_match)
-      if(last_stdlib_match MATCHES "${stdlib_regex}")
-        set(id_clang_cxx_library "CLANG_CXX_LIBRARY = \"${CMAKE_MATCH_3}\";")
-      endif()
-    endif()
-    if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND CMAKE_OSX_SYSROOT MATCHES "^$|[Mm][Aa][Cc][Oo][Ss]")
-      # When targeting macOS, use only the host architecture.
-      set(id_archs [[ARCHS = "$(NATIVE_ARCH_ACTUAL)";]])
-    else()
-      set(id_archs "")
-    endif()
-    configure_file(${CMAKE_ROOT}/Modules/CompilerId/Xcode-3.pbxproj.in
-      ${id_dir}/CompilerId${lang}.xcodeproj/project.pbxproj @ONLY)
-    unset(_ENV_MACOSX_DEPLOYMENT_TARGET)
-    if(DEFINED ENV{MACOSX_DEPLOYMENT_TARGET})
-      set(_ENV_MACOSX_DEPLOYMENT_TARGET "$ENV{MACOSX_DEPLOYMENT_TARGET}")
-      set(ENV{MACOSX_DEPLOYMENT_TARGET} "")
-    endif()
-    execute_process(COMMAND xcodebuild
-      WORKING_DIRECTORY ${CMAKE_${lang}_COMPILER_ID_DIR}
-      OUTPUT_VARIABLE CMAKE_${lang}_COMPILER_ID_OUTPUT
-      ERROR_VARIABLE CMAKE_${lang}_COMPILER_ID_OUTPUT
-      RESULT_VARIABLE CMAKE_${lang}_COMPILER_ID_RESULT
-      )
-    if(DEFINED _ENV_MACOSX_DEPLOYMENT_TARGET)
-      set(ENV{MACOSX_DEPLOYMENT_TARGET} "${_ENV_MACOSX_DEPLOYMENT_TARGET}")
-    endif()
-
-    if(DEFINED CMAKE_${lang}_COMPILER_ID_TOOL_MATCH_REGEX)
-      if("${CMAKE_${lang}_COMPILER_ID_OUTPUT}" MATCHES "${CMAKE_${lang}_COMPILER_ID_TOOL_MATCH_REGEX}")
-        set(_comp "${CMAKE_MATCH_${CMAKE_${lang}_COMPILER_ID_TOOL_MATCH_INDEX}}")
-        if(EXISTS "${_comp}")
-          set(CMAKE_${lang}_COMPILER_ID_TOOL "${_comp}" PARENT_SCOPE)
-        endif()
-      endif()
-    endif()
-    if("${CMAKE_${lang}_COMPILER_ID_OUTPUT}" MATCHES "ARCHS=([^%\r\n]+)[\r\n]")
-      set(CMAKE_${lang}_XCODE_ARCHS "${CMAKE_MATCH_1}")
-      separate_arguments(CMAKE_${lang}_XCODE_ARCHS)
-      set(CMAKE_${lang}_XCODE_ARCHS "${CMAKE_${lang}_XCODE_ARCHS}" PARENT_SCOPE)
-    endif()
-  elseif("${CMAKE_GENERATOR}" MATCHES "Green Hills MULTI")
-    set(id_dir ${CMAKE_${lang}_COMPILER_ID_DIR})
-    set(id_src "${src}")
-    if (GHS_PRIMARY_TARGET)
-      set(ghs_primary_target "${GHS_PRIMARY_TARGET}")
-    else()
-      set(ghs_primary_target "${CMAKE_GENERATOR_PLATFORM}_${GHS_TARGET_PLATFORM}.tgt")
-    endif()
-    if ("${GHS_TARGET_PLATFORM}" MATCHES "integrity")
-        set(bsp_name "macro GHS_BSP=${GHS_BSP_NAME}")
-        set(os_dir "macro GHS_OS=${GHS_OS_DIR}")
-    endif()
-    set(command "${CMAKE_MAKE_PROGRAM}" "-commands" "-top" "GHS_default.gpj")
-    configure_file(${CMAKE_ROOT}/Modules/CompilerId/GHS_default.gpj.in
-      ${id_dir}/GHS_default.gpj @ONLY)
-    configure_file(${CMAKE_ROOT}/Modules/CompilerId/GHS_lib.gpj.in
-      ${id_dir}/GHS_lib.gpj @ONLY)
-    execute_process(COMMAND ${command}
-      WORKING_DIRECTORY ${id_dir}
-      OUTPUT_VARIABLE CMAKE_${lang}_COMPILER_ID_OUTPUT
-      ERROR_VARIABLE CMAKE_${lang}_COMPILER_ID_OUTPUT
-      RESULT_VARIABLE CMAKE_${lang}_COMPILER_ID_RESULT
-      )
-    # Match the compiler location line printed out.
-    set(ghs_toolpath "${CMAKE_MAKE_PROGRAM}")
-    if(CMAKE_HOST_UNIX)
-      string(REPLACE "/gbuild" "/" ghs_toolpath ${ghs_toolpath})
-    else()
-      string(REPLACE "/gbuild.exe" "/" ghs_toolpath ${ghs_toolpath})
-      string(REPLACE / "\\\\" ghs_toolpath ${ghs_toolpath})
-    endif()
-    if("${CMAKE_${lang}_COMPILER_ID_OUTPUT}" MATCHES "(${ghs_toolpath}[^ ]*)")
-      if(CMAKE_HOST_UNIX)
-        set(_comp "${CMAKE_MATCH_1}")
-      else()
-        set(_comp "${CMAKE_MATCH_1}.exe")
-      endif()
-      if(EXISTS "${_comp}")
-        file(TO_CMAKE_PATH "${_comp}" _comp)
-        set(CMAKE_${lang}_COMPILER_ID_TOOL "${_comp}" PARENT_SCOPE)
-      endif()
-    endif()
-  else()
-    execute_process(
-      COMMAND "${CMAKE_${lang}_COMPILER}"
-              ${CMAKE_${lang}_COMPILER_ID_ARG1}
-              ${userflags}
-              ${testflags}
-              ${CMAKE_${lang}_COMPILER_ID_FLAGS_ALWAYS}
-              "${src}"
-      WORKING_DIRECTORY ${CMAKE_${lang}_COMPILER_ID_DIR}
-      OUTPUT_VARIABLE CMAKE_${lang}_COMPILER_ID_OUTPUT
-      ERROR_VARIABLE CMAKE_${lang}_COMPILER_ID_OUTPUT
-      RESULT_VARIABLE CMAKE_${lang}_COMPILER_ID_RESULT
-      )
-    if("${CMAKE_${lang}_COMPILER_ID_OUTPUT}" MATCHES "exec: [^\n]*\\((/[^,\n]*/cpp),CMakeFortranCompilerId.F")
-      set(_cpp "${CMAKE_MATCH_1}")
-      if(EXISTS "${_cpp}")
-        set(CMAKE_${lang}_COMPILER_ID_CPP "${_cpp}" PARENT_SCOPE)
-      endif()
-    endif()
-  endif()
-
-  # Check the result of compilation.
-  if(CMAKE_${lang}_COMPILER_ID_RESULT
-     # Intel Fortran warns and ignores preprocessor lines without /fpp
-     OR CMAKE_${lang}_COMPILER_ID_OUTPUT MATCHES "Bad # preprocessor line"
-     )
-    # Compilation failed.
-    set(MSG
-      "Compiling the ${lang} compiler identification source file \"${src}\" failed.
-${COMPILER_DESCRIPTION}
-The output was:
-${CMAKE_${lang}_COMPILER_ID_RESULT}
-${CMAKE_${lang}_COMPILER_ID_OUTPUT}
-
-")
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log "${MSG}")
-    #if(NOT CMAKE_${lang}_COMPILER_ID_ALLOW_FAIL)
-    #  message(FATAL_ERROR "${MSG}")
-    #endif()
-
-    # No output files should be inspected.
-    set(COMPILER_${lang}_PRODUCED_FILES)
-    set(COMPILER_${lang}_PRODUCED_OUTPUT)
-  else()
-    # Compilation succeeded.
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-      "Compiling the ${lang} compiler identification source file \"${src}\" succeeded.
-${COMPILER_DESCRIPTION}
-The output was:
-${CMAKE_${lang}_COMPILER_ID_RESULT}
-${CMAKE_${lang}_COMPILER_ID_OUTPUT}
-
-")
-
-    # Find the executable produced by the compiler, try all files in the
-    # binary dir.
-    string(REGEX REPLACE "([][])" "[\\1]" _glob_id_dir "${CMAKE_${lang}_COMPILER_ID_DIR}")
-    file(GLOB files
-      RELATIVE ${CMAKE_${lang}_COMPILER_ID_DIR}
-
-      # normal case
-      ${_glob_id_dir}/*
-
-      # com.apple.package-type.bundle.unit-test
-      ${_glob_id_dir}/*.xctest/*
-
-      # com.apple.product-type.framework
-      ${_glob_id_dir}/*.framework/*
-      )
-    list(REMOVE_ITEM files "${src}")
-    set(COMPILER_${lang}_PRODUCED_FILES "")
-    foreach(file ${files})
-      if(NOT IS_DIRECTORY ${CMAKE_${lang}_COMPILER_ID_DIR}/${file})
-        list(APPEND COMPILER_${lang}_PRODUCED_FILES ${file})
-        file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-          "Compilation of the ${lang} compiler identification source \""
-          "${src}\" produced \"${file}\"\n\n")
-      endif()
-    endforeach()
-
-    if(NOT COMPILER_${lang}_PRODUCED_FILES)
-      # No executable was found.
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-        "Compilation of the ${lang} compiler identification source \""
-        "${src}\" did not produce an executable in \""
-        "${CMAKE_${lang}_COMPILER_ID_DIR}\".\n\n")
-    endif()
-
-    set(COMPILER_${lang}_PRODUCED_OUTPUT "${CMAKE_${lang}_COMPILER_ID_OUTPUT}")
-  endif()
-
-  # Return the files produced by the compilation.
-  set(COMPILER_${lang}_PRODUCED_FILES "${COMPILER_${lang}_PRODUCED_FILES}" PARENT_SCOPE)
-  set(COMPILER_${lang}_PRODUCED_OUTPUT "${COMPILER_${lang}_PRODUCED_OUTPUT}" PARENT_SCOPE)
-
-endfunction()
-
-#-----------------------------------------------------------------------------
-# Function to extract the compiler id from compiler output.
-function(CMAKE_DETERMINE_COMPILER_ID_MATCH_VENDOR lang output)
-  foreach(vendor ${CMAKE_${lang}_COMPILER_ID_MATCH_VENDORS})
-    if(output MATCHES "${CMAKE_${lang}_COMPILER_ID_MATCH_VENDOR_REGEX_${vendor}}")
-      set(CMAKE_${lang}_COMPILER_ID "${vendor}")
-    endif()
-  endforeach()
-  set(CMAKE_${lang}_COMPILER_ID "${CMAKE_${lang}_COMPILER_ID}" PARENT_SCOPE)
-endfunction()
-
-#-----------------------------------------------------------------------------
-# Function to extract the compiler id from an executable.
-function(CMAKE_DETERMINE_COMPILER_ID_CHECK lang file)
-  # Look for a compiler id if not yet known.
-  if(NOT CMAKE_${lang}_COMPILER_ID)
-    # Read the compiler identification string from the executable file.
-    set(COMPILER_ID)
-    set(COMPILER_VERSION)
-    set(COMPILER_VERSION_MAJOR 0)
-    set(COMPILER_VERSION_MINOR 0)
-    set(COMPILER_VERSION_PATCH 0)
-    set(COMPILER_VERSION_TWEAK 0)
-    set(COMPILER_VERSION_INTERNAL "")
-    set(HAVE_COMPILER_VERSION_MAJOR 0)
-    set(HAVE_COMPILER_VERSION_MINOR 0)
-    set(HAVE_COMPILER_VERSION_PATCH 0)
-    set(HAVE_COMPILER_VERSION_TWEAK 0)
-    set(COMPILER_WRAPPER)
-    set(DIGIT_VALUE_1 1)
-    set(DIGIT_VALUE_2 10)
-    set(DIGIT_VALUE_3 100)
-    set(DIGIT_VALUE_4 1000)
-    set(DIGIT_VALUE_5 10000)
-    set(DIGIT_VALUE_6 100000)
-    set(DIGIT_VALUE_7 1000000)
-    set(DIGIT_VALUE_8 10000000)
-    set(PLATFORM_ID)
-    set(ARCHITECTURE_ID)
-    set(SIMULATE_ID)
-    set(SIMULATE_VERSION)
-    foreach(encoding "" "ENCODING;UTF-16LE" "ENCODING;UTF-16BE")
-      file(STRINGS "${file}" CMAKE_${lang}_COMPILER_ID_STRINGS
-        LIMIT_COUNT 38 ${encoding}
-        REGEX ".?I.?N.?F.?O.?:.?[A-Za-z0-9_]+\\[[^]]*\\]")
-      if(NOT CMAKE_${lang}_COMPILER_ID_STRINGS STREQUAL "")
-        break()
-      endif()
-    endforeach()
-    set(COMPILER_ID_TWICE)
-    # With the IAR Compiler, some strings are found twice, first time as incomplete
-    # list like "?<Constant "INFO:compiler[IAR]">".  Remove the incomplete copies.
-    list(FILTER CMAKE_${lang}_COMPILER_ID_STRINGS EXCLUDE REGEX "\\?<Constant \\\"")
-    # In C# binaries, some strings are found more than once.
-    list(REMOVE_DUPLICATES CMAKE_${lang}_COMPILER_ID_STRINGS)
-    foreach(info ${CMAKE_${lang}_COMPILER_ID_STRINGS})
-      # The IAR-AVR compiler uses a binary format that places a '6'
-      # character (0x34) before each character in the string.  Strip
-      # out these characters without removing any legitamate characters.
-      if("${info}" MATCHES "(.)I.N.F.O.:.")
-        string(REGEX REPLACE "${CMAKE_MATCH_1}(.)" "\\1" info "${info}")
-      endif()
-      if("${info}" MATCHES "INFO:compiler\\[([^]\"]*)\\]")
-        if(COMPILER_ID)
-          set(COMPILER_ID_TWICE 1)
-        endif()
-        set(COMPILER_ID "${CMAKE_MATCH_1}")
-      endif()
-      if("${info}" MATCHES "INFO:platform\\[([^]\"]*)\\]")
-        set(PLATFORM_ID "${CMAKE_MATCH_1}")
-      endif()
-      if("${info}" MATCHES "INFO:arch\\[([^]\"]*)\\]")
-        set(ARCHITECTURE_ID "${CMAKE_MATCH_1}")
-      endif()
-      if("${info}" MATCHES "INFO:compiler_version\\[([^]\"]*)\\]")
-        string(REGEX REPLACE "^0+([0-9]+)" "\\1" COMPILER_VERSION "${CMAKE_MATCH_1}")
-        string(REGEX REPLACE "\\.0+([0-9])" ".\\1" COMPILER_VERSION "${COMPILER_VERSION}")
-      endif()
-      if("${info}" MATCHES "INFO:compiler_version_internal\\[([^]\"]*)\\]")
-        string(REGEX REPLACE "^0+([0-9])" "\\1" COMPILER_VERSION_INTERNAL "${CMAKE_MATCH_1}")
-        string(REGEX REPLACE "\\.0+([0-9])" ".\\1" COMPILER_VERSION_INTERNAL "${COMPILER_VERSION_INTERNAL}")
-      endif()
-      foreach(comp MAJOR MINOR PATCH TWEAK)
-        foreach(digit 1 2 3 4 5 6 7 8 9)
-          if("${info}" MATCHES "INFO:compiler_version_${comp}_digit_${digit}\\[([0-9])\\]")
-            set(value ${CMAKE_MATCH_1})
-            math(EXPR COMPILER_VERSION_${comp} "${COMPILER_VERSION_${comp}} + ${value} * ${DIGIT_VALUE_${digit}}")
-            set(HAVE_COMPILER_VERSION_${comp} 1)
-          endif()
-        endforeach()
-      endforeach()
-      if("${info}" MATCHES "INFO:compiler_wrapper\\[([^]\"]*)\\]")
-        set(COMPILER_WRAPPER "${CMAKE_MATCH_1}")
-      endif()
-      if("${info}" MATCHES "INFO:simulate\\[([^]\"]*)\\]")
-        set(SIMULATE_ID "${CMAKE_MATCH_1}")
-      endif()
-      if("${info}" MATCHES "INFO:simulate_version\\[([^]\"]*)\\]")
-        string(REGEX REPLACE "^0+([0-9])" "\\1" SIMULATE_VERSION "${CMAKE_MATCH_1}")
-        string(REGEX REPLACE "\\.0+([0-9])" ".\\1" SIMULATE_VERSION "${SIMULATE_VERSION}")
-      endif()
-      if("${info}" MATCHES "INFO:qnxnto\\[\\]")
-        set(COMPILER_QNXNTO 1)
-      endif()
-      if("${info}" MATCHES "INFO:dialect_default\\[([^]\"]*)\\]")
-        set(CMAKE_${lang}_STANDARD_COMPUTED_DEFAULT "${CMAKE_MATCH_1}")
-      endif()
-    endforeach()
-
-    # Construct compiler version from components if needed.
-    if(NOT DEFINED COMPILER_VERSION AND HAVE_COMPILER_VERSION_MAJOR)
-      set(COMPILER_VERSION "${COMPILER_VERSION_MAJOR}")
-      if(HAVE_COMPILER_VERSION_MINOR)
-        string(APPEND COMPILER_VERSION ".${COMPILER_VERSION_MINOR}")
-        if(HAVE_COMPILER_VERSION_PATCH)
-          string(APPEND COMPILER_VERSION ".${COMPILER_VERSION_PATCH}")
-          if(HAVE_COMPILER_VERSION_TWEAK)
-            string(APPEND COMPILER_VERSION ".${COMPILER_VERSION_TWEAK}")
-          endif()
-        endif()
-      endif()
-    endif()
-
-    # Detect the exact architecture from the PE header.
-    if(WIN32)
-      # The offset to the PE signature is stored at 0x3c.
-      file(READ ${file} peoffsethex LIMIT 1 OFFSET 60 HEX)
-      if(NOT peoffsethex STREQUAL "")
-        string(SUBSTRING "${peoffsethex}" 0 1 peoffsethex1)
-        string(SUBSTRING "${peoffsethex}" 1 1 peoffsethex2)
-        set(peoffsetexpression "${peoffsethex1} * 16 + ${peoffsethex2}")
-        string(REPLACE "a" "10" peoffsetexpression "${peoffsetexpression}")
-        string(REPLACE "b" "11" peoffsetexpression "${peoffsetexpression}")
-        string(REPLACE "c" "12" peoffsetexpression "${peoffsetexpression}")
-        string(REPLACE "d" "13" peoffsetexpression "${peoffsetexpression}")
-        string(REPLACE "e" "14" peoffsetexpression "${peoffsetexpression}")
-        string(REPLACE "f" "15" peoffsetexpression "${peoffsetexpression}")
-        math(EXPR peoffset "${peoffsetexpression}")
-
-        file(READ ${file} peheader LIMIT 6 OFFSET ${peoffset} HEX)
-        if(peheader STREQUAL "50450000a201")
-          set(ARCHITECTURE_ID "SH3")
-        elseif(peheader STREQUAL "50450000a301")
-          set(ARCHITECTURE_ID "SH3DSP")
-        elseif(peheader STREQUAL "50450000a601")
-          set(ARCHITECTURE_ID "SH4")
-        elseif(peheader STREQUAL "50450000a801")
-          set(ARCHITECTURE_ID "SH5")
-        endif()
-      endif()
-    endif()
-
-    # Check if a valid compiler and platform were found.
-    if(COMPILER_ID AND NOT COMPILER_ID_TWICE)
-      set(CMAKE_${lang}_COMPILER_ID "${COMPILER_ID}")
-      set(CMAKE_${lang}_PLATFORM_ID "${PLATFORM_ID}")
-      set(CMAKE_${lang}_COMPILER_ARCHITECTURE_ID "${ARCHITECTURE_ID}")
-      set(MSVC_${lang}_ARCHITECTURE_ID "${ARCHITECTURE_ID}")
-      set(CMAKE_${lang}_COMPILER_VERSION "${COMPILER_VERSION}")
-      set(CMAKE_${lang}_COMPILER_VERSION_INTERNAL "${COMPILER_VERSION_INTERNAL}")
-      set(CMAKE_${lang}_SIMULATE_ID "${SIMULATE_ID}")
-      set(CMAKE_${lang}_SIMULATE_VERSION "${SIMULATE_VERSION}")
-    endif()
-
-    # Check the compiler identification string.
-    if(CMAKE_${lang}_COMPILER_ID)
-      # The compiler identification was found.
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-        "The ${lang} compiler identification is ${CMAKE_${lang}_COMPILER_ID}, found in \""
-        "${file}\"\n\n")
-    else()
-      # The compiler identification could not be found.
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-        "The ${lang} compiler identification could not be found in \""
-        "${file}\"\n\n")
-    endif()
-  endif()
-
-  # try to figure out the executable format: ELF, COFF, Mach-O
-  if(NOT CMAKE_EXECUTABLE_FORMAT)
-    file(READ ${file} CMAKE_EXECUTABLE_MAGIC LIMIT 4 HEX)
-
-    # ELF files start with 0x7f"ELF"
-    if("${CMAKE_EXECUTABLE_MAGIC}" STREQUAL "7f454c46")
-      set(CMAKE_EXECUTABLE_FORMAT "ELF" CACHE INTERNAL "Executable file format")
-    endif()
-
-#    # COFF (.exe) files start with "MZ"
-#    if("${CMAKE_EXECUTABLE_MAGIC}" MATCHES "4d5a....")
-#      set(CMAKE_EXECUTABLE_FORMAT "COFF" CACHE STRING "Executable file format")
-#    endif()
-#
-    # Mach-O files start with MH_MAGIC or MH_CIGAM
-    if("${CMAKE_EXECUTABLE_MAGIC}" MATCHES "feedface|cefaedfe|feedfacf|cffaedfe")
-      set(CMAKE_EXECUTABLE_FORMAT "MACHO" CACHE STRING "Executable file format")
-    endif()
-
-  endif()
-  if(NOT DEFINED CMAKE_EXECUTABLE_FORMAT)
-    set(CMAKE_EXECUTABLE_FORMAT)
-  endif()
-  # Return the information extracted.
-  set(CMAKE_${lang}_COMPILER_ID "${CMAKE_${lang}_COMPILER_ID}" PARENT_SCOPE)
-  set(CMAKE_${lang}_PLATFORM_ID "${CMAKE_${lang}_PLATFORM_ID}" PARENT_SCOPE)
-  set(CMAKE_${lang}_COMPILER_ARCHITECTURE_ID "${CMAKE_${lang}_COMPILER_ARCHITECTURE_ID}" PARENT_SCOPE)
-  set(MSVC_${lang}_ARCHITECTURE_ID "${MSVC_${lang}_ARCHITECTURE_ID}"
-    PARENT_SCOPE)
-  set(CMAKE_${lang}_COMPILER_VERSION "${CMAKE_${lang}_COMPILER_VERSION}" PARENT_SCOPE)
-  set(CMAKE_${lang}_COMPILER_VERSION_INTERNAL "${CMAKE_${lang}_COMPILER_VERSION_INTERNAL}" PARENT_SCOPE)
-  set(CMAKE_${lang}_COMPILER_WRAPPER "${COMPILER_WRAPPER}" PARENT_SCOPE)
-  set(CMAKE_${lang}_SIMULATE_ID "${CMAKE_${lang}_SIMULATE_ID}" PARENT_SCOPE)
-  set(CMAKE_${lang}_SIMULATE_VERSION "${CMAKE_${lang}_SIMULATE_VERSION}" PARENT_SCOPE)
-  set(CMAKE_EXECUTABLE_FORMAT "${CMAKE_EXECUTABLE_FORMAT}" PARENT_SCOPE)
-  set(COMPILER_QNXNTO "${COMPILER_QNXNTO}" PARENT_SCOPE)
-  set(CMAKE_${lang}_STANDARD_COMPUTED_DEFAULT "${CMAKE_${lang}_STANDARD_COMPUTED_DEFAULT}" PARENT_SCOPE)
-endfunction()
-
-#-----------------------------------------------------------------------------
-# Function to query the compiler vendor.
-# This uses a table with entries of the form
-#   list(APPEND CMAKE_${lang}_COMPILER_ID_VENDORS ${vendor})
-#   set(CMAKE_${lang}_COMPILER_ID_VENDOR_FLAGS_${vendor} -some-vendor-flag)
-#   set(CMAKE_${lang}_COMPILER_ID_VENDOR_REGEX_${vendor} "Some Vendor Output")
-# We try running the compiler with the flag for each vendor and
-# matching its regular expression in the output.
-function(CMAKE_DETERMINE_COMPILER_ID_VENDOR lang userflags)
-
-  if(NOT CMAKE_${lang}_COMPILER_ID_DIR)
-    # We get here when this function is called not from within CMAKE_DETERMINE_COMPILER_ID()
-    # This is done e.g. for detecting the compiler ID for assemblers.
-    # Compute the directory in which to run the test and Create a clean working directory.
-    set(CMAKE_${lang}_COMPILER_ID_DIR ${CMAKE_PLATFORM_INFO_DIR}/CompilerId${lang})
-    file(REMOVE_RECURSE ${CMAKE_${lang}_COMPILER_ID_DIR})
-    file(MAKE_DIRECTORY ${CMAKE_${lang}_COMPILER_ID_DIR})
-  endif()
-
-  # Save the current LC_ALL, LC_MESSAGES, and LANG environment variables
-  # and set them to "C" so we get the expected output to match.
-  set(_orig_lc_all      $ENV{LC_ALL})
-  set(_orig_lc_messages $ENV{LC_MESSAGES})
-  set(_orig_lang        $ENV{LANG})
-  set(ENV{LC_ALL}      C)
-  set(ENV{LC_MESSAGES} C)
-  set(ENV{LANG}        C)
-
-  foreach(vendor ${CMAKE_${lang}_COMPILER_ID_VENDORS})
-    set(flags ${CMAKE_${lang}_COMPILER_ID_VENDOR_FLAGS_${vendor}})
-    set(regex ${CMAKE_${lang}_COMPILER_ID_VENDOR_REGEX_${vendor}})
-    execute_process(
-      COMMAND "${CMAKE_${lang}_COMPILER}"
-      ${CMAKE_${lang}_COMPILER_ID_ARG1}
-      ${userflags}
-      ${flags}
-      WORKING_DIRECTORY ${CMAKE_${lang}_COMPILER_ID_DIR}
-      OUTPUT_VARIABLE output ERROR_VARIABLE output
-      RESULT_VARIABLE result
-      TIMEOUT 10
-      )
-
-    if("${output}" MATCHES "${regex}")
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-        "Checking whether the ${lang} compiler is ${vendor} using \"${flags}\" "
-        "matched \"${regex}\":\n${output}")
-      set(CMAKE_${lang}_COMPILER_ID "${vendor}" PARENT_SCOPE)
-      set(CMAKE_${lang}_COMPILER_ID_OUTPUT "${output}" PARENT_SCOPE)
-      set(CMAKE_${lang}_COMPILER_ID_VENDOR_MATCH "${CMAKE_MATCH_1}" PARENT_SCOPE)
-      break()
-    else()
-      if("${result}" MATCHES  "timeout")
-        file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-          "Checking whether the ${lang} compiler is ${vendor} using \"${flags}\" "
-          "terminated after 10 s due to timeout.")
-      else()
-        file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-          "Checking whether the ${lang} compiler is ${vendor} using \"${flags}\" "
-          "did not match \"${regex}\":\n${output}")
-       endif()
-    endif()
-  endforeach()
-
-  # Restore original LC_ALL, LC_MESSAGES, and LANG
-  set(ENV{LC_ALL}      ${_orig_lc_all})
-  set(ENV{LC_MESSAGES} ${_orig_lc_messages})
-  set(ENV{LANG}        ${_orig_lang})
-endfunction()
-
-function(CMAKE_DETERMINE_MSVC_SHOWINCLUDES_PREFIX lang userflags)
-  # Run this MSVC-compatible compiler to detect what the /showIncludes
-  # option displays.  We can use a C source even with the C++ compiler
-  # because MSVC-compatible compilers handle both and show the same output.
-  set(showdir ${CMAKE_BINARY_DIR}/CMakeFiles/ShowIncludes)
-  file(WRITE ${showdir}/foo.h "\n")
-  file(WRITE ${showdir}/main.c "#include \"foo.h\" \nint main(){}\n")
-  execute_process(
-    COMMAND "${CMAKE_${lang}_COMPILER}"
-            ${CMAKE_${lang}_COMPILER_ID_ARG1}
-            ${userflags}
-            /nologo /showIncludes /c main.c
-    WORKING_DIRECTORY ${showdir}
-    OUTPUT_VARIABLE out
-    ERROR_VARIABLE err
-    RESULT_VARIABLE res
-    ENCODING AUTO # cl prints in current code page
-    )
-  if(res EQUAL 0 AND "${out}" MATCHES "(^|\n)([^:\n]*:[^:\n]*:[ \t]*)")
-    set(CMAKE_${lang}_CL_SHOWINCLUDES_PREFIX "${CMAKE_MATCH_2}" PARENT_SCOPE)
-  else()
-    set(CMAKE_${lang}_CL_SHOWINCLUDES_PREFIX "" PARENT_SCOPE)
-  endif()
-endfunction()
diff --git a/share/cmake-3.18/Modules/CMakeDetermineFortranCompiler.cmake b/share/cmake-3.18/Modules/CMakeDetermineFortranCompiler.cmake
deleted file mode 100644
index 5f5a70a..0000000
--- a/share/cmake-3.18/Modules/CMakeDetermineFortranCompiler.cmake
+++ /dev/null
@@ -1,305 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# determine the compiler to use for Fortran programs
-# NOTE, a generator may set CMAKE_Fortran_COMPILER before
-# loading this file to force a compiler.
-# use environment variable FC first if defined by user, next use
-# the cmake variable CMAKE_GENERATOR_FC which can be defined by a generator
-# as a default compiler
-
-include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake)
-include(Platform/${CMAKE_SYSTEM_NAME}-Determine-Fortran OPTIONAL)
-include(Platform/${CMAKE_SYSTEM_NAME}-Fortran OPTIONAL)
-if(NOT CMAKE_Fortran_COMPILER_NAMES)
-  set(CMAKE_Fortran_COMPILER_NAMES f95)
-endif()
-
-if(${CMAKE_GENERATOR} MATCHES "Visual Studio")
-elseif("${CMAKE_GENERATOR}" MATCHES "Xcode")
-  set(CMAKE_Fortran_COMPILER_XCODE_TYPE sourcecode.fortran.f90)
-  _cmake_find_compiler_path(Fortran)
-else()
-  if(NOT CMAKE_Fortran_COMPILER)
-    # prefer the environment variable CC
-    if(NOT $ENV{FC} STREQUAL "")
-      get_filename_component(CMAKE_Fortran_COMPILER_INIT $ENV{FC} PROGRAM PROGRAM_ARGS CMAKE_Fortran_FLAGS_ENV_INIT)
-      if(CMAKE_Fortran_FLAGS_ENV_INIT)
-        set(CMAKE_Fortran_COMPILER_ARG1 "${CMAKE_Fortran_FLAGS_ENV_INIT}" CACHE STRING "First argument to Fortran compiler")
-      endif()
-      if(EXISTS ${CMAKE_Fortran_COMPILER_INIT})
-      else()
-        message(FATAL_ERROR "Could not find compiler set in environment variable FC:\n$ENV{FC}.")
-      endif()
-    endif()
-
-    # next try prefer the compiler specified by the generator
-    if(CMAKE_GENERATOR_FC)
-      if(NOT CMAKE_Fortran_COMPILER_INIT)
-        set(CMAKE_Fortran_COMPILER_INIT ${CMAKE_GENERATOR_FC})
-      endif()
-    endif()
-
-    # finally list compilers to try
-    if(NOT CMAKE_Fortran_COMPILER_INIT)
-      # Known compilers:
-      #  f77/f90/f95: generic compiler names
-      #  ftn: Cray fortran compiler wrapper
-      #  g77: GNU Fortran 77 compiler
-      #  gfortran: putative GNU Fortran 95+ compiler (in progress)
-      #  fort77: native F77 compiler under HP-UX (and some older Crays)
-      #  frt: Fujitsu F77 compiler
-      #  pathf90/pathf95/pathf2003: PathScale Fortran compiler
-      #  pgf77/pgf90/pgf95/pgfortran: Portland Group F77/F90/F95 compilers
-      #  flang: Flang Fortran compiler
-      #  xlf/xlf90/xlf95: IBM (AIX) F77/F90/F95 compilers
-      #  lf95: Lahey-Fujitsu F95 compiler
-      #  fl32: Microsoft Fortran 77 "PowerStation" compiler
-      #  af77: Apogee F77 compiler for Intergraph hardware running CLIX
-      #  epcf90: "Edinburgh Portable Compiler" F90
-      #  fort: Compaq (now HP) Fortran 90/95 compiler for Tru64 and Linux/Alpha
-      #  ifc: Intel Fortran 95 compiler for Linux/x86
-      #  efc: Intel Fortran 95 compiler for IA64
-      #  nagfor: NAG Fortran compiler
-      #
-      #  The order is 95 or newer compilers first, then 90,
-      #  then 77 or older compilers, gnu is always last in the group,
-      #  so if you paid for a compiler it is picked by default.
-      if(CMAKE_HOST_WIN32)
-        set(CMAKE_Fortran_COMPILER_LIST
-          ifort pgf95 pgfortran lf95 fort
-          flang gfortran gfortran-4 g95 f90 pgf90
-          pgf77 g77 f77 nag
-          )
-      else()
-        set(CMAKE_Fortran_COMPILER_LIST
-          ftn
-          ifort ifc efc pgf95 pgfortran lf95 xlf95 fort
-          flang gfortran gfortran-4 g95 f90 pgf90
-          frt pgf77 xlf g77 f77 nag
-          )
-      endif()
-
-      # Vendor-specific compiler names.
-      set(_Fortran_COMPILER_NAMES_GNU       gfortran gfortran-4 g95 g77)
-      set(_Fortran_COMPILER_NAMES_Intel     ifort ifc efc)
-      set(_Fortran_COMPILER_NAMES_Absoft    af95 af90 af77)
-      set(_Fortran_COMPILER_NAMES_PGI       pgf95 pgfortran pgf90 pgf77)
-      set(_Fortran_COMPILER_NAMES_Flang     flang)
-      set(_Fortran_COMPILER_NAMES_PathScale pathf2003 pathf95 pathf90)
-      set(_Fortran_COMPILER_NAMES_XL        xlf)
-      set(_Fortran_COMPILER_NAMES_VisualAge xlf95 xlf90 xlf)
-      set(_Fortran_COMPILER_NAMES_NAG       nagfor)
-    endif()
-
-    _cmake_find_compiler(Fortran)
-
-  else()
-    _cmake_find_compiler_path(Fortran)
-  endif()
-  mark_as_advanced(CMAKE_Fortran_COMPILER)
-
-  # Each entry in this list is a set of extra flags to try
-  # adding to the compile line to see if it helps produce
-  # a valid identification executable.
-  set(CMAKE_Fortran_COMPILER_ID_TEST_FLAGS_FIRST
-    # Get verbose output to help distinguish compilers.
-    "-v"
-    )
-  set(CMAKE_Fortran_COMPILER_ID_TEST_FLAGS
-    # Try compiling to an object file only.
-    "-c"
-
-    # Intel on windows does not preprocess by default.
-    "-fpp"
-    )
-endif()
-
-# Build a small source file to identify the compiler.
-if(NOT CMAKE_Fortran_COMPILER_ID_RUN)
-  set(CMAKE_Fortran_COMPILER_ID_RUN 1)
-
-  # Table of per-vendor compiler output regular expressions.
-  list(APPEND CMAKE_Fortran_COMPILER_ID_MATCH_VENDORS CCur)
-  set(CMAKE_Fortran_COMPILER_ID_MATCH_VENDOR_REGEX_CCur "Concurrent Fortran [0-9]+ Compiler")
-
-  # Table of per-vendor compiler id flags with expected output.
-  list(APPEND CMAKE_Fortran_COMPILER_ID_VENDORS Compaq)
-  set(CMAKE_Fortran_COMPILER_ID_VENDOR_FLAGS_Compaq "-what")
-  set(CMAKE_Fortran_COMPILER_ID_VENDOR_REGEX_Compaq "Compaq Visual Fortran")
-  list(APPEND CMAKE_Fortran_COMPILER_ID_VENDORS NAG) # Numerical Algorithms Group
-  set(CMAKE_Fortran_COMPILER_ID_VENDOR_FLAGS_NAG "-V")
-  set(CMAKE_Fortran_COMPILER_ID_VENDOR_REGEX_NAG "NAG Fortran Compiler")
-
-  # Match the link line from xcodebuild output of the form
-  #  Ld ...
-  #      ...
-  #      /path/to/cc ...CompilerIdFortran/...
-  # to extract the compiler front-end for the language.
-  set(CMAKE_Fortran_COMPILER_ID_TOOL_MATCH_REGEX "\nLd[^\n]*(\n[ \t]+[^\n]*)*\n[ \t]+([^ \t\r\n]+)[^\r\n]*-o[^\r\n]*CompilerIdFortran/(\\./)?(CompilerIdFortran.xctest/)?CompilerIdFortran[ \t\n\\\"]")
-  set(CMAKE_Fortran_COMPILER_ID_TOOL_MATCH_INDEX 2)
-
-  set(_version_info "")
-  foreach(m MAJOR MINOR PATCH TWEAK)
-    set(_COMP "_${m}")
-    string(APPEND _version_info "
-#if defined(COMPILER_VERSION${_COMP})")
-    foreach(d 1 2 3 4 5 6 7 8)
-      string(APPEND _version_info "
-# undef DEC
-# undef HEX
-# define DEC(n) DEC_${d}(n)
-# define HEX(n) HEX_${d}(n)
-# if COMPILER_VERSION${_COMP} == 0
-        PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[0]'
-# elif COMPILER_VERSION${_COMP} == 1
-        PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[1]'
-# elif COMPILER_VERSION${_COMP} == 2
-        PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[2]'
-# elif COMPILER_VERSION${_COMP} == 3
-        PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[3]'
-# elif COMPILER_VERSION${_COMP} == 4
-        PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[4]'
-# elif COMPILER_VERSION${_COMP} == 5
-        PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[5]'
-# elif COMPILER_VERSION${_COMP} == 6
-        PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[6]'
-# elif COMPILER_VERSION${_COMP} == 7
-        PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[7]'
-# elif COMPILER_VERSION${_COMP} == 8
-        PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[8]'
-# elif COMPILER_VERSION${_COMP} == 9
-        PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[9]'
-# endif
-")
-    endforeach()
-    string(APPEND _version_info "
-#endif")
-  endforeach()
-  set(CMAKE_Fortran_COMPILER_ID_VERSION_INFO "${_version_info}")
-  unset(_version_info)
-  unset(_COMP)
-
-  # Try to identify the compiler.
-  set(CMAKE_Fortran_COMPILER_ID)
-  include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerId.cmake)
-  CMAKE_DETERMINE_COMPILER_ID(Fortran FFLAGS CMakeFortranCompilerId.F)
-
-  _cmake_find_compiler_sysroot(Fortran)
-
-  # Fall back to old is-GNU test.
-  if(NOT CMAKE_Fortran_COMPILER_ID)
-    execute_process(COMMAND ${CMAKE_Fortran_COMPILER} ${CMAKE_Fortran_COMPILER_ID_FLAGS_LIST} -E "${CMAKE_ROOT}/Modules/CMakeTestGNU.c"
-      OUTPUT_VARIABLE CMAKE_COMPILER_OUTPUT RESULT_VARIABLE CMAKE_COMPILER_RETURN)
-    if(NOT CMAKE_COMPILER_RETURN)
-      if(CMAKE_COMPILER_OUTPUT MATCHES "THIS_IS_GNU")
-        set(CMAKE_Fortran_COMPILER_ID "GNU")
-        file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-          "Determining if the Fortran compiler is GNU succeeded with "
-          "the following output:\n${CMAKE_COMPILER_OUTPUT}\n\n")
-      else()
-        file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-          "Determining if the Fortran compiler is GNU failed with "
-          "the following output:\n${CMAKE_COMPILER_OUTPUT}\n\n")
-      endif()
-      if(NOT CMAKE_Fortran_PLATFORM_ID)
-        if(CMAKE_COMPILER_OUTPUT MATCHES "THIS_IS_MINGW")
-          set(CMAKE_Fortran_PLATFORM_ID "MinGW")
-        endif()
-        if(CMAKE_COMPILER_OUTPUT MATCHES "THIS_IS_CYGWIN")
-          set(CMAKE_Fortran_PLATFORM_ID "Cygwin")
-        endif()
-      endif()
-    endif()
-  endif()
-
-  # Fall back for GNU MINGW, which is not always detected correctly
-  # (__MINGW32__ is defined for the C language, but perhaps not for Fortran!)
-  if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU" AND NOT CMAKE_Fortran_PLATFORM_ID)
-    execute_process(COMMAND ${CMAKE_Fortran_COMPILER} ${CMAKE_Fortran_COMPILER_ID_FLAGS_LIST} -E "${CMAKE_ROOT}/Modules/CMakeTestGNU.c"
-      OUTPUT_VARIABLE CMAKE_COMPILER_OUTPUT RESULT_VARIABLE CMAKE_COMPILER_RETURN)
-    if(NOT CMAKE_COMPILER_RETURN)
-      if(CMAKE_COMPILER_OUTPUT MATCHES "THIS_IS_MINGW")
-        set(CMAKE_Fortran_PLATFORM_ID "MinGW")
-      endif()
-      if(CMAKE_COMPILER_OUTPUT MATCHES "THIS_IS_CYGWIN")
-        set(CMAKE_Fortran_PLATFORM_ID "Cygwin")
-      endif()
-    endif()
-  endif()
-
-  # Set old compiler and platform id variables.
-  if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
-    set(CMAKE_COMPILER_IS_GNUG77 1)
-  endif()
-  if(CMAKE_Fortran_PLATFORM_ID MATCHES "MinGW")
-    set(CMAKE_COMPILER_IS_MINGW 1)
-  elseif(CMAKE_Fortran_PLATFORM_ID MATCHES "Cygwin")
-    set(CMAKE_COMPILER_IS_CYGWIN 1)
-  endif()
-endif()
-
-if (NOT _CMAKE_TOOLCHAIN_LOCATION)
-  get_filename_component(_CMAKE_TOOLCHAIN_LOCATION "${CMAKE_Fortran_COMPILER}" PATH)
-endif ()
-
-# if we have a fortran cross compiler, they have usually some prefix, like
-# e.g. powerpc-linux-gfortran, arm-elf-gfortran or i586-mingw32msvc-gfortran , optionally
-# with a 3-component version number at the end (e.g. arm-eabi-gcc-4.5.2).
-# The other tools of the toolchain usually have the same prefix
-# NAME_WE cannot be used since then this test will fail for names like
-# "arm-unknown-nto-qnx6.3.0-gcc.exe", where BASENAME would be
-# "arm-unknown-nto-qnx6" instead of the correct "arm-unknown-nto-qnx6.3.0-"
-if (NOT _CMAKE_TOOLCHAIN_PREFIX)
-
-  if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
-    get_filename_component(COMPILER_BASENAME "${CMAKE_Fortran_COMPILER}" NAME)
-    if (COMPILER_BASENAME MATCHES "^(.+-)g?fortran(-[0-9]+\\.[0-9]+\\.[0-9]+)?(\\.exe)?$")
-      set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
-    endif ()
-
-    # if "llvm-" is part of the prefix, remove it, since llvm doesn't have its own binutils
-    # but uses the regular ar, objcopy, etc. (instead of llvm-objcopy etc.)
-    if ("${_CMAKE_TOOLCHAIN_PREFIX}" MATCHES "(.+-)?llvm-$")
-      set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
-    endif ()
-  endif()
-
-endif ()
-
-set(_CMAKE_PROCESSING_LANGUAGE "Fortran")
-include(CMakeFindBinUtils)
-include(Compiler/${CMAKE_Fortran_COMPILER_ID}-FindBinUtils OPTIONAL)
-unset(_CMAKE_PROCESSING_LANGUAGE)
-
-if(CMAKE_Fortran_XL_CPP)
-  set(_SET_CMAKE_Fortran_XL_CPP
-    "set(CMAKE_Fortran_XL_CPP \"${CMAKE_Fortran_XL_CPP}\")")
-endif()
-
-if(CMAKE_Fortran_COMPILER_SYSROOT)
-  string(CONCAT _SET_CMAKE_Fortran_COMPILER_SYSROOT
-    "set(CMAKE_Fortran_COMPILER_SYSROOT \"${CMAKE_Fortran_COMPILER_SYSROOT}\")\n"
-    "set(CMAKE_COMPILER_SYSROOT \"${CMAKE_Fortran_COMPILER_SYSROOT}\")")
-else()
-  set(_SET_CMAKE_Fortran_COMPILER_SYSROOT "")
-endif()
-
-if(CMAKE_Fortran_COMPILER_ARCHITECTURE_ID)
-  set(_SET_CMAKE_Fortran_COMPILER_ARCHITECTURE_ID
-    "set(CMAKE_Fortran_COMPILER_ARCHITECTURE_ID ${CMAKE_Fortran_COMPILER_ARCHITECTURE_ID})")
-else()
-  set(_SET_CMAKE_Fortran_COMPILER_ARCHITECTURE_ID "")
-endif()
-
-if(MSVC_Fortran_ARCHITECTURE_ID)
-  set(SET_MSVC_Fortran_ARCHITECTURE_ID
-    "set(MSVC_Fortran_ARCHITECTURE_ID ${MSVC_Fortran_ARCHITECTURE_ID})")
-endif()
-# configure variables set in this file for fast reload later on
-configure_file(${CMAKE_ROOT}/Modules/CMakeFortranCompiler.cmake.in
-  ${CMAKE_PLATFORM_INFO_DIR}/CMakeFortranCompiler.cmake
-  @ONLY
-  )
-set(CMAKE_Fortran_COMPILER_ENV_VAR "FC")
diff --git a/share/cmake-3.18/Modules/CMakeDetermineJavaCompiler.cmake b/share/cmake-3.18/Modules/CMakeDetermineJavaCompiler.cmake
deleted file mode 100644
index 3092bb5..0000000
--- a/share/cmake-3.18/Modules/CMakeDetermineJavaCompiler.cmake
+++ /dev/null
@@ -1,94 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# determine the compiler to use for Java programs
-# NOTE, a generator may set CMAKE_Java_COMPILER before
-# loading this file to force a compiler.
-
-if(NOT CMAKE_Java_COMPILER)
-  # prefer the environment variable CC
-  if(NOT $ENV{JAVA_COMPILER} STREQUAL "")
-    get_filename_component(CMAKE_Java_COMPILER_INIT $ENV{JAVA_COMPILER} PROGRAM PROGRAM_ARGS CMAKE_Java_FLAGS_ENV_INIT)
-    if(CMAKE_Java_FLAGS_ENV_INIT)
-      set(CMAKE_Java_COMPILER_ARG1 "${CMAKE_Java_FLAGS_ENV_INIT}" CACHE STRING "First argument to Java compiler")
-    endif()
-    if(NOT EXISTS ${CMAKE_Java_COMPILER_INIT})
-      message(SEND_ERROR "Could not find compiler set in environment variable JAVA_COMPILER:\n$ENV{JAVA_COMPILER}.")
-    endif()
-  endif()
-
-  if(NOT $ENV{JAVA_RUNTIME} STREQUAL "")
-    get_filename_component(CMAKE_Java_RUNTIME_INIT $ENV{JAVA_RUNTIME} PROGRAM PROGRAM_ARGS CMAKE_Java_FLAGS_ENV_INIT)
-    if(NOT EXISTS ${CMAKE_Java_RUNTIME_INIT})
-      message(SEND_ERROR "Could not find compiler set in environment variable JAVA_RUNTIME:\n$ENV{JAVA_RUNTIME}.")
-    endif()
-  endif()
-
-  if(NOT $ENV{JAVA_ARCHIVE} STREQUAL "")
-    get_filename_component(CMAKE_Java_ARCHIVE_INIT $ENV{JAVA_ARCHIVE} PROGRAM PROGRAM_ARGS CMAKE_Java_FLAGS_ENV_INIT)
-    if(NOT EXISTS ${CMAKE_Java_ARCHIVE_INIT})
-      message(SEND_ERROR "Could not find compiler set in environment variable JAVA_ARCHIVE:\n$ENV{JAVA_ARCHIVE}.")
-    endif()
-  endif()
-
-  set(Java_BIN_PATH
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\2.0;JavaHome]/bin"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.9;JavaHome]/bin"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.8;JavaHome]/bin"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.7;JavaHome]/bin"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.6;JavaHome]/bin"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.5;JavaHome]/bin"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.4;JavaHome]/bin"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.3;JavaHome]/bin"
-    $ENV{JAVA_HOME}/bin
-    /usr/bin
-    /usr/lib/java/bin
-    /usr/share/java/bin
-    /usr/local/bin
-    /usr/local/java/bin
-    /usr/local/java/share/bin
-    /usr/java/j2sdk1.4.2_04
-    /usr/lib/j2sdk1.4-sun/bin
-    /usr/java/j2sdk1.4.2_09/bin
-    /usr/lib/j2sdk1.5-sun/bin
-    /opt/sun-jdk-1.5.0.04/bin
-    /usr/local/jdk-1.7.0/bin
-    /usr/local/jdk-1.6.0/bin
-    )
-  # if no compiler has been specified yet, then look for one
-  if(CMAKE_Java_COMPILER_INIT)
-    set(CMAKE_Java_COMPILER ${CMAKE_Java_COMPILER_INIT} CACHE PATH "Java Compiler")
-  else()
-    find_program(CMAKE_Java_COMPILER
-      NAMES javac
-      PATHS ${Java_BIN_PATH}
-    )
-  endif()
-
-  # if no runtime has been specified yet, then look for one
-  if(CMAKE_Java_RUNTIME_INIT)
-    set(CMAKE_Java_RUNTIME ${CMAKE_Java_RUNTIME_INIT} CACHE PATH "Java Compiler")
-  else()
-    find_program(CMAKE_Java_RUNTIME
-      NAMES java
-      PATHS ${Java_BIN_PATH}
-    )
-  endif()
-
-  # if no archive has been specified yet, then look for one
-  if(CMAKE_Java_ARCHIVE_INIT)
-    set(CMAKE_Java_ARCHIVE ${CMAKE_Java_ARCHIVE_INIT} CACHE PATH "Java Compiler")
-  else()
-    find_program(CMAKE_Java_ARCHIVE
-      NAMES jar
-      PATHS ${Java_BIN_PATH}
-    )
-  endif()
-endif()
-mark_as_advanced(CMAKE_Java_COMPILER)
-
-# configure variables set in this file for fast reload later on
-configure_file(${CMAKE_ROOT}/Modules/CMakeJavaCompiler.cmake.in
-  ${CMAKE_PLATFORM_INFO_DIR}/CMakeJavaCompiler.cmake @ONLY)
-set(CMAKE_Java_COMPILER_ENV_VAR "JAVA_COMPILER")
diff --git a/share/cmake-3.18/Modules/CMakeDetermineOBJCCompiler.cmake b/share/cmake-3.18/Modules/CMakeDetermineOBJCCompiler.cmake
deleted file mode 100644
index 11b47fd..0000000
--- a/share/cmake-3.18/Modules/CMakeDetermineOBJCCompiler.cmake
+++ /dev/null
@@ -1,192 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# determine the compiler to use for Objective-C programs
-# NOTE, a generator may set CMAKE_OBJC_COMPILER before
-# loading this file to force a compiler.
-# use environment variable OBJC first if defined by user, next use
-# the cmake variable CMAKE_GENERATOR_OBJC which can be defined by a generator
-# as a default compiler
-#
-# Sets the following variables:
-#   CMAKE_OBJC_COMPILER
-#   CMAKE_AR
-#   CMAKE_RANLIB
-#   CMAKE_COMPILER_IS_GNUOBJC
-#   CMAKE_COMPILER_IS_CLANGOBJC
-#
-# If not already set before, it also sets
-#   _CMAKE_TOOLCHAIN_PREFIX
-
-include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake)
-
-# Load system-specific compiler preferences for this language.
-include(Platform/${CMAKE_SYSTEM_NAME}-Determine-OBJC OPTIONAL)
-include(Platform/${CMAKE_SYSTEM_NAME}-OBJC OPTIONAL)
-if(NOT CMAKE_OBJC_COMPILER_NAMES)
-  set(CMAKE_OBJC_COMPILER_NAMES clang)
-endif()
-
-if("${CMAKE_GENERATOR}" MATCHES "Xcode")
-  set(CMAKE_OBJC_COMPILER_XCODE_TYPE sourcecode.c.objc)
-else()
-  if(NOT CMAKE_OBJC_COMPILER)
-    set(CMAKE_OBJC_COMPILER_INIT NOTFOUND)
-
-    # prefer the environment variable OBJC or CC
-    foreach(var OBJC CC)
-      if($ENV{${var}} MATCHES ".+")
-        get_filename_component(CMAKE_OBJC_COMPILER_INIT $ENV{${var}} PROGRAM PROGRAM_ARGS CMAKE_OBJC_FLAGS_ENV_INIT)
-        if(CMAKE_OBJC_FLAGS_ENV_INIT)
-          set(CMAKE_OBJC_COMPILER_ARG1 "${CMAKE_OBJC_FLAGS_ENV_INIT}" CACHE STRING "First argument to Objective-C compiler")
-        endif()
-        if(NOT EXISTS ${CMAKE_OBJC_COMPILER_INIT})
-          message(FATAL_ERROR "Could not find compiler set in environment variable ${var}:\n  $ENV{${var}}")
-        endif()
-        break()
-      endif()
-    endforeach()
-
-    # next try prefer the compiler specified by the generator
-    if(CMAKE_GENERATOR_OBJC)
-      if(NOT CMAKE_OBJC_COMPILER_INIT)
-        set(CMAKE_OBJC_COMPILER_INIT ${CMAKE_GENERATOR_OBJC})
-      endif()
-    endif()
-
-    # finally list compilers to try
-    if(NOT CMAKE_OBJC_COMPILER_INIT)
-      set(CMAKE_OBJC_COMPILER_LIST ${_CMAKE_TOOLCHAIN_PREFIX}cc ${_CMAKE_TOOLCHAIN_PREFIX}gcc clang)
-    endif()
-
-    _cmake_find_compiler(OBJC)
-
-  else()
-    # we only get here if CMAKE_OBJC_COMPILER was specified using -D or a pre-made CMakeCache.txt
-    # (e.g. via ctest) or set in CMAKE_TOOLCHAIN_FILE
-    # if CMAKE_OBJC_COMPILER is a list of length 2, use the first item as
-    # CMAKE_OBJC_COMPILER and the 2nd one as CMAKE_OBJC_COMPILER_ARG1
-
-    list(LENGTH CMAKE_OBJC_COMPILER _CMAKE_OBJC_COMPILER_LIST_LENGTH)
-    if("${_CMAKE_OBJC_COMPILER_LIST_LENGTH}" EQUAL 2)
-      list(GET CMAKE_OBJC_COMPILER 1 CMAKE_OBJC_COMPILER_ARG1)
-      list(GET CMAKE_OBJC_COMPILER 0 CMAKE_OBJC_COMPILER)
-    endif()
-
-    # if a compiler was specified by the user but without path,
-    # now try to find it with the full path
-    # if it is found, force it into the cache,
-    # if not, don't overwrite the setting (which was given by the user) with "NOTFOUND"
-    # if the C compiler already had a path, reuse it for searching the CXX compiler
-    get_filename_component(_CMAKE_USER_OBJC_COMPILER_PATH "${CMAKE_OBJC_COMPILER}" PATH)
-    if(NOT _CMAKE_USER_OBJC_COMPILER_PATH)
-      find_program(CMAKE_OBJC_COMPILER_WITH_PATH NAMES ${CMAKE_OBJC_COMPILER})
-      if(CMAKE_OBJC_COMPILER_WITH_PATH)
-        set(CMAKE_OBJC_COMPILER ${CMAKE_OBJC_COMPILER_WITH_PATH} CACHE STRING "Objective-C compiler" FORCE)
-      endif()
-      unset(CMAKE_OBJC_COMPILER_WITH_PATH CACHE)
-    endif()
-  endif()
-  mark_as_advanced(CMAKE_OBJC_COMPILER)
-
-  # Each entry in this list is a set of extra flags to try
-  # adding to the compile line to see if it helps produce
-  # a valid identification file.
-  set(CMAKE_OBJC_COMPILER_ID_TEST_FLAGS_FIRST)
-  set(CMAKE_OBJC_COMPILER_ID_TEST_FLAGS
-    # Try compiling to an object file only.
-    "-c"
-
-    )
-endif()
-
-# Build a small source file to identify the compiler.
-if(NOT CMAKE_OBJC_COMPILER_ID_RUN)
-  set(CMAKE_OBJC_COMPILER_ID_RUN 1)
-
-  # Try to identify the compiler.
-  set(CMAKE_OBJC_COMPILER_ID)
-  file(READ ${CMAKE_ROOT}/Modules/CMakePlatformId.h.in
-    CMAKE_OBJC_COMPILER_ID_PLATFORM_CONTENT)
-
-  # Match the link line from xcodebuild output of the form
-  #  Ld ...
-  #      ...
-  #      /path/to/cc ...CompilerIdOBJC/...
-  # to extract the compiler front-end for the language.
-  set(CMAKE_OBJC_COMPILER_ID_TOOL_MATCH_REGEX "\nLd[^\n]*(\n[ \t]+[^\n]*)*\n[ \t]+([^ \t\r\n]+)[^\r\n]*-o[^\r\n]*CompilerIdOBJC/(\\./)?(CompilerIdOBJC.(framework|xctest)/)?CompilerIdOBJC[ \t\n\\\"]")
-  set(CMAKE_OBJC_COMPILER_ID_TOOL_MATCH_INDEX 2)
-
-  include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerId.cmake)
-  CMAKE_DETERMINE_COMPILER_ID(OBJC OBJCCFLAGS CMakeOBJCCompilerId.m)
-
-  # Set old compiler and platform id variables.
-  if(CMAKE_OBJC_COMPILER_ID STREQUAL "GNU")
-    set(CMAKE_COMPILER_IS_GNUOBJC 1)
-  endif()
-  if(CMAKE_OBJC_COMPILER_ID STREQUAL "Clang")
-    set(CMAKE_COMPILER_IS_CLANGOBJC 1)
-  endif()
-endif()
-
-if (NOT _CMAKE_TOOLCHAIN_LOCATION)
-  get_filename_component(_CMAKE_TOOLCHAIN_LOCATION "${CMAKE_OBJC_COMPILER}" PATH)
-endif ()
-
-# If we have a gcc cross compiler, they have usually some prefix, like
-# e.g. powerpc-linux-gcc, arm-elf-gcc or i586-mingw32msvc-gcc, optionally
-# with a 3-component version number at the end (e.g. arm-eabi-gcc-4.5.2).
-# The other tools of the toolchain usually have the same prefix
-# NAME_WE cannot be used since then this test will fail for names like
-# "arm-unknown-nto-qnx6.3.0-gcc.exe", where BASENAME would be
-# "arm-unknown-nto-qnx6" instead of the correct "arm-unknown-nto-qnx6.3.0-"
-if (CMAKE_CROSSCOMPILING  AND NOT _CMAKE_TOOLCHAIN_PREFIX)
-
-  if(CMAKE_OBJC_COMPILER_ID MATCHES "GNU|Clang|QCC")
-    get_filename_component(COMPILER_BASENAME "${CMAKE_OBJC_COMPILER}" NAME)
-    if (COMPILER_BASENAME MATCHES "^(.+-)(clang|g?cc)(-[0-9]+(\\.[0-9]+)*)?(-[^.]+)?(\\.exe)?$")
-      set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
-      set(_CMAKE_COMPILER_SUFFIX ${CMAKE_MATCH_5})
-    elseif(CMAKE_OBJC_COMPILER_ID MATCHES "Clang")
-      if(CMAKE_OBJC_COMPILER_TARGET)
-        set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_OBJC_COMPILER_TARGET}-)
-      endif()
-    elseif(COMPILER_BASENAME MATCHES "qcc(\\.exe)?$")
-      if(CMAKE_OBJC_COMPILER_TARGET MATCHES "gcc_nto([a-z0-9]+_[0-9]+|[^_le]+)(le)?")
-        set(_CMAKE_TOOLCHAIN_PREFIX nto${CMAKE_MATCH_1}-)
-      endif()
-    endif ()
-
-    # if "llvm-" is part of the prefix, remove it, since llvm doesn't have its own binutils
-    # but uses the regular ar, objcopy, etc. (instead of llvm-objcopy etc.)
-    if ("${_CMAKE_TOOLCHAIN_PREFIX}" MATCHES "(.+-)?llvm-$")
-      set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
-    endif ()
-  endif()
-
-endif ()
-
-set(_CMAKE_PROCESSING_LANGUAGE "OBJC")
-include(CMakeFindBinUtils)
-include(Compiler/${CMAKE_OBJC_COMPILER_ID}-FindBinUtils OPTIONAL)
-unset(_CMAKE_PROCESSING_LANGUAGE)
-
-if(CMAKE_OBJC_COMPILER_ARCHITECTURE_ID)
-  set(_SET_CMAKE_OBJC_COMPILER_ARCHITECTURE_ID
-    "set(CMAKE_OBJC_COMPILER_ARCHITECTURE_ID ${CMAKE_OBJC_COMPILER_ARCHITECTURE_ID})")
-else()
-  set(_SET_CMAKE_OBJC_COMPILER_ARCHITECTURE_ID "")
-endif()
-
-if(CMAKE_OBJC_XCODE_ARCHS)
-  set(SET_CMAKE_XCODE_ARCHS
-    "set(CMAKE_XCODE_ARCHS \"${CMAKE_OBJC_XCODE_ARCHS}\")")
-endif()
-
-# configure variables set in this file for fast reload later on
-configure_file(${CMAKE_ROOT}/Modules/CMakeOBJCCompiler.cmake.in
-  ${CMAKE_PLATFORM_INFO_DIR}/CMakeOBJCCompiler.cmake
-  @ONLY
-  )
-set(CMAKE_OBJC_COMPILER_ENV_VAR "OBJC")
diff --git a/share/cmake-3.18/Modules/CMakeDetermineOBJCXXCompiler.cmake b/share/cmake-3.18/Modules/CMakeDetermineOBJCXXCompiler.cmake
deleted file mode 100644
index 99ad6c3..0000000
--- a/share/cmake-3.18/Modules/CMakeDetermineOBJCXXCompiler.cmake
+++ /dev/null
@@ -1,200 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# determine the compiler to use for Objective-C++ programs
-# NOTE, a generator may set CMAKE_OBJCXX_COMPILER before
-# loading this file to force a compiler.
-# use environment variable OBJCXX first if defined by user, next use
-# the cmake variable CMAKE_GENERATOR_OBJCXX which can be defined by a generator
-# as a default compiler
-# If the internal cmake variable _CMAKE_TOOLCHAIN_PREFIX is set, this is used
-# as prefix for the tools (e.g. arm-elf-g++, arm-elf-ar etc.)
-#
-# Sets the following variables:
-#   CMAKE_OBJCXX_COMPILER
-#   CMAKE_COMPILER_IS_GNUOBJCXX
-#   CMAKE_COMPILER_IS_CLANGOBJCXX
-#   CMAKE_AR
-#   CMAKE_RANLIB
-#
-# If not already set before, it also sets
-#   _CMAKE_TOOLCHAIN_PREFIX
-
-include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake)
-
-# Load system-specific compiler preferences for this language.
-include(Platform/${CMAKE_SYSTEM_NAME}-Determine-OBJCXX OPTIONAL)
-include(Platform/${CMAKE_SYSTEM_NAME}-OBJCXX OPTIONAL)
-if(NOT CMAKE_OBJCXX_COMPILER_NAMES)
-  set(CMAKE_OBJCXX_COMPILER_NAMES clang++)
-endif()
-
-if("${CMAKE_GENERATOR}" MATCHES "Xcode")
-  set(CMAKE_OBJCXX_COMPILER_XCODE_TYPE sourcecode.cpp.objcpp)
-else()
-  if(NOT CMAKE_OBJCXX_COMPILER)
-    set(CMAKE_OBJCXX_COMPILER_INIT NOTFOUND)
-
-    # prefer the environment variable OBJCXX or CXX
-    foreach(var OBJCXX CXX)
-      if($ENV{${var}} MATCHES ".+")
-        get_filename_component(CMAKE_OBJCXX_COMPILER_INIT $ENV{${var}} PROGRAM PROGRAM_ARGS CMAKE_OBJCXX_FLAGS_ENV_INIT)
-        if(CMAKE_OBJCXX_FLAGS_ENV_INIT)
-          set(CMAKE_OBJCXX_COMPILER_ARG1 "${CMAKE_OBJCXX_FLAGS_ENV_INIT}" CACHE STRING "First argument to Objective-C++ compiler")
-        endif()
-        if(NOT EXISTS ${CMAKE_OBJCXX_COMPILER_INIT})
-          message(FATAL_ERROR "Could not find compiler set in environment variable ${var}:\n  $ENV{${var}}")
-        endif()
-        break()
-      endif()
-    endforeach()
-
-    # next prefer the generator specified compiler
-    if(CMAKE_GENERATOR_OBJCXX)
-      if(NOT CMAKE_OBJCXX_COMPILER_INIT)
-        set(CMAKE_OBJCXX_COMPILER_INIT ${CMAKE_GENERATOR_OBJCXX})
-      endif()
-    endif()
-
-    # finally list compilers to try
-    if(NOT CMAKE_OBJCXX_COMPILER_INIT)
-      set(CMAKE_OBJCXX_COMPILER_LIST ${_CMAKE_TOOLCHAIN_PREFIX}c++ ${_CMAKE_TOOLCHAIN_PREFIX}g++ clang++)
-    endif()
-
-    _cmake_find_compiler(OBJCXX)
-
-  else()
-    # we only get here if CMAKE_OBJCXX_COMPILER was specified using -D or a pre-made CMakeCache.txt
-    # (e.g. via ctest) or set in CMAKE_TOOLCHAIN_FILE
-    # if CMAKE_OBJCXX_COMPILER is a list of length 2, use the first item as
-    # CMAKE_OBJCXX_COMPILER and the 2nd one as CMAKE_OBJCXX_COMPILER_ARG1
-
-    list(LENGTH CMAKE_OBJCXX_COMPILER _CMAKE_OBJCXX_COMPILER_LIST_LENGTH)
-    if("${_CMAKE_OBJCXX_COMPILER_LIST_LENGTH}" EQUAL 2)
-      list(GET CMAKE_OBJCXX_COMPILER 1 CMAKE_OBJCXX_COMPILER_ARG1)
-      list(GET CMAKE_OBJCXX_COMPILER 0 CMAKE_OBJCXX_COMPILER)
-    endif()
-
-    # if a compiler was specified by the user but without path,
-    # now try to find it with the full path
-    # if it is found, force it into the cache,
-    # if not, don't overwrite the setting (which was given by the user) with "NOTFOUND"
-    # if the C compiler already had a path, reuse it for searching the CXX compiler
-    get_filename_component(_CMAKE_USER_OBJCXX_COMPILER_PATH "${CMAKE_OBJCXX_COMPILER}" PATH)
-    if(NOT _CMAKE_USER_OBJCXX_COMPILER_PATH)
-      find_program(CMAKE_OBJCXX_COMPILER_WITH_PATH NAMES ${CMAKE_OBJCXX_COMPILER})
-      if(CMAKE_OBJCXX_COMPILER_WITH_PATH)
-        set(CMAKE_OBJCXX_COMPILER ${CMAKE_OBJCXX_COMPILER_WITH_PATH} CACHE STRING "Objective-C++ compiler" FORCE)
-      endif()
-      unset(CMAKE_OBJCXX_COMPILER_WITH_PATH CACHE)
-    endif()
-
-  endif()
-  mark_as_advanced(CMAKE_OBJCXX_COMPILER)
-
-  # Each entry in this list is a set of extra flags to try
-  # adding to the compile line to see if it helps produce
-  # a valid identification file.
-  set(CMAKE_OBJCXX_COMPILER_ID_TEST_FLAGS_FIRST)
-  set(CMAKE_OBJCXX_COMPILER_ID_TEST_FLAGS
-    # Try compiling to an object file only.
-    "-c"
-
-    # ARMClang need target options
-    "--target=arm-arm-none-eabi -mcpu=cortex-m3"
-    )
-endif()
-
-# Build a small source file to identify the compiler.
-if(NOT CMAKE_OBJCXX_COMPILER_ID_RUN)
-  set(CMAKE_OBJCXX_COMPILER_ID_RUN 1)
-
-  # Try to identify the compiler.
-  set(CMAKE_OBJCXX_COMPILER_ID)
-  file(READ ${CMAKE_ROOT}/Modules/CMakePlatformId.h.in
-    CMAKE_OBJCXX_COMPILER_ID_PLATFORM_CONTENT)
-
-  # Match the link line from xcodebuild output of the form
-  #  Ld ...
-  #      ...
-  #      /path/to/cc ...CompilerIdOBJCXX/...
-  # to extract the compiler front-end for the language.
-  set(CMAKE_OBJCXX_COMPILER_ID_TOOL_MATCH_REGEX "\nLd[^\n]*(\n[ \t]+[^\n]*)*\n[ \t]+([^ \t\r\n]+)[^\r\n]*-o[^\r\n]*CompilerIdOBJCXX/(\\./)?(CompilerIdOBJCXX.(framework|xctest)/)?CompilerIdOBJCXX[ \t\n\\\"]")
-  set(CMAKE_OBJCXX_COMPILER_ID_TOOL_MATCH_INDEX 2)
-
-  include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerId.cmake)
-  CMAKE_DETERMINE_COMPILER_ID(OBJCXX OBJCXXFLAGS CMakeOBJCXXCompilerId.mm)
-
-  # Set old compiler and platform id variables.
-  if(CMAKE_OBJCXX_COMPILER_ID MATCHES "GNU")
-    set(CMAKE_COMPILER_IS_GNUOBJCXX 1)
-  endif()
-  if(CMAKE_OBJCXX_COMPILER_ID MATCHES "Clang")
-    set(CMAKE_COMPILER_IS_CLANGOBJCXX 1)
-  endif()
-endif()
-
-if (NOT _CMAKE_TOOLCHAIN_LOCATION)
-  get_filename_component(_CMAKE_TOOLCHAIN_LOCATION "${CMAKE_OBJCXX_COMPILER}" PATH)
-endif ()
-
-# if we have a g++ cross compiler, they have usually some prefix, like
-# e.g. powerpc-linux-g++, arm-elf-g++ or i586-mingw32msvc-g++ , optionally
-# with a 3-component version number at the end (e.g. arm-eabi-gcc-4.5.2).
-# The other tools of the toolchain usually have the same prefix
-# NAME_WE cannot be used since then this test will fail for names like
-# "arm-unknown-nto-qnx6.3.0-gcc.exe", where BASENAME would be
-# "arm-unknown-nto-qnx6" instead of the correct "arm-unknown-nto-qnx6.3.0-"
-
-
-if (NOT _CMAKE_TOOLCHAIN_PREFIX)
-
-  if("${CMAKE_OBJCXX_COMPILER_ID}" MATCHES "GNU|Clang|QCC")
-    get_filename_component(COMPILER_BASENAME "${CMAKE_OBJCXX_COMPILER}" NAME)
-    if (COMPILER_BASENAME MATCHES "^(.+-)(clan)?[gc]\\+\\+(-[0-9]+(\\.[0-9]+)*)?(-[^.]+)?(\\.exe)?$")
-      set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
-      set(_CMAKE_COMPILER_SUFFIX ${CMAKE_MATCH_5})
-    elseif("${CMAKE_OBJCXX_COMPILER_ID}" MATCHES "Clang")
-      if(CMAKE_OBJCXX_COMPILER_TARGET)
-        set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_OBJCXX_COMPILER_TARGET}-)
-      endif()
-    elseif(COMPILER_BASENAME MATCHES "QCC(\\.exe)?$")
-      if(CMAKE_OBJCXX_COMPILER_TARGET MATCHES "gcc_nto([a-z0-9]+_[0-9]+|[^_le]+)(le)")
-        set(_CMAKE_TOOLCHAIN_PREFIX nto${CMAKE_MATCH_1}-)
-      endif()
-    endif ()
-
-    # if "llvm-" is part of the prefix, remove it, since llvm doesn't have its own binutils
-    # but uses the regular ar, objcopy, etc. (instead of llvm-objcopy etc.)
-    if ("${_CMAKE_TOOLCHAIN_PREFIX}" MATCHES "(.+-)?llvm-$")
-      set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
-    endif ()
-  endif()
-
-endif ()
-
-set(_CMAKE_PROCESSING_LANGUAGE "OBJCXX")
-include(CMakeFindBinUtils)
-include(Compiler/${CMAKE_OBJCXX_COMPILER_ID}-FindBinUtils OPTIONAL)
-unset(_CMAKE_PROCESSING_LANGUAGE)
-
-if(CMAKE_OBJCXX_COMPILER_ARCHITECTURE_ID)
-  set(_SET_CMAKE_OBJCXX_COMPILER_ARCHITECTURE_ID
-    "set(CMAKE_OBJCXX_COMPILER_ARCHITECTURE_ID ${CMAKE_OBJCXX_COMPILER_ARCHITECTURE_ID})")
-else()
-  set(_SET_CMAKE_OBJCXX_COMPILER_ARCHITECTURE_ID "")
-endif()
-
-if(CMAKE_OBJCXX_XCODE_ARCHS)
-  set(SET_CMAKE_XCODE_ARCHS
-    "set(CMAKE_XCODE_ARCHS \"${CMAKE_OBJCXX_XCODE_ARCHS}\")")
-endif()
-
-# configure all variables set in this file
-configure_file(${CMAKE_ROOT}/Modules/CMakeOBJCXXCompiler.cmake.in
-  ${CMAKE_PLATFORM_INFO_DIR}/CMakeOBJCXXCompiler.cmake
-  @ONLY
-  )
-
-set(CMAKE_OBJCXX_COMPILER_ENV_VAR "OBJCXX")
diff --git a/share/cmake-3.18/Modules/CMakeDetermineRCCompiler.cmake b/share/cmake-3.18/Modules/CMakeDetermineRCCompiler.cmake
deleted file mode 100644
index 8801e16..0000000
--- a/share/cmake-3.18/Modules/CMakeDetermineRCCompiler.cmake
+++ /dev/null
@@ -1,57 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# determine the compiler to use for RC programs
-# NOTE, a generator may set CMAKE_RC_COMPILER before
-# loading this file to force a compiler.
-# use environment variable RC first if defined by user, next use
-# the cmake variable CMAKE_GENERATOR_RC which can be defined by a generator
-# as a default compiler
-if(NOT CMAKE_RC_COMPILER)
-  # prefer the environment variable RC
-  if(NOT $ENV{RC} STREQUAL "")
-    get_filename_component(CMAKE_RC_COMPILER_INIT $ENV{RC} PROGRAM PROGRAM_ARGS CMAKE_RC_FLAGS_ENV_INIT)
-    if(CMAKE_RC_FLAGS_ENV_INIT)
-      set(CMAKE_RC_COMPILER_ARG1 "${CMAKE_RC_FLAGS_ENV_INIT}" CACHE STRING "First argument to RC compiler")
-    endif()
-    if(EXISTS ${CMAKE_RC_COMPILER_INIT})
-    else()
-      message(FATAL_ERROR "Could not find compiler set in environment variable RC:\n$ENV{RC}.")
-    endif()
-  endif()
-
-  # next try prefer the compiler specified by the generator
-  if(CMAKE_GENERATOR_RC)
-    if(NOT CMAKE_RC_COMPILER_INIT)
-      set(CMAKE_RC_COMPILER_INIT ${CMAKE_GENERATOR_RC})
-    endif()
-  endif()
-
-  # finally list compilers to try
-  if(CMAKE_RC_COMPILER_INIT)
-    set(CMAKE_RC_COMPILER_LIST ${CMAKE_RC_COMPILER_INIT})
-  else()
-    set(CMAKE_RC_COMPILER_LIST rc)
-  endif()
-
-  # Find the compiler.
-  find_program(CMAKE_RC_COMPILER NAMES ${CMAKE_RC_COMPILER_LIST} DOC "RC compiler")
-  if(CMAKE_RC_COMPILER_INIT AND NOT CMAKE_RC_COMPILER)
-    set(CMAKE_RC_COMPILER "${CMAKE_RC_COMPILER_INIT}" CACHE FILEPATH "RC compiler" FORCE)
-  endif()
-endif()
-
-mark_as_advanced(CMAKE_RC_COMPILER)
-
-get_filename_component(_CMAKE_RC_COMPILER_NAME_WE ${CMAKE_RC_COMPILER} NAME_WE)
-if(_CMAKE_RC_COMPILER_NAME_WE STREQUAL "windres")
-  set(CMAKE_RC_OUTPUT_EXTENSION .obj)
-else()
-  set(CMAKE_RC_OUTPUT_EXTENSION .res)
-endif()
-
-# configure variables set in this file for fast reload later on
-configure_file(${CMAKE_ROOT}/Modules/CMakeRCCompiler.cmake.in
-               ${CMAKE_PLATFORM_INFO_DIR}/CMakeRCCompiler.cmake)
-set(CMAKE_RC_COMPILER_ENV_VAR "RC")
diff --git a/share/cmake-3.18/Modules/CMakeDetermineSwiftCompiler.cmake b/share/cmake-3.18/Modules/CMakeDetermineSwiftCompiler.cmake
deleted file mode 100644
index 688133f..0000000
--- a/share/cmake-3.18/Modules/CMakeDetermineSwiftCompiler.cmake
+++ /dev/null
@@ -1,78 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake)
-
-# Local system-specific compiler preferences for this language.
-include(Platform/${CMAKE_SYSTEM_NAME}-Determine-Swift OPTIONAL)
-include(Platform/${CMAKE_SYSTEM_NAME}-Swift OPTIONAL)
-if(NOT CMAKE_Swift_COMPILER_NAMES)
-  set(CMAKE_Swift_COMPILER_NAMES swiftc)
-endif()
-
-if("${CMAKE_GENERATOR}" STREQUAL "Xcode")
-  if(XCODE_VERSION VERSION_LESS 6.1)
-    message(FATAL_ERROR "Swift language not supported by Xcode ${XCODE_VERSION}")
-  endif()
-  set(CMAKE_Swift_COMPILER_XCODE_TYPE sourcecode.swift)
-  _cmake_find_compiler_path(Swift)
-elseif("${CMAKE_GENERATOR}" MATCHES "^Ninja")
-  if(CMAKE_Swift_COMPILER)
-    _cmake_find_compiler_path(Swift)
-  else()
-    set(CMAKE_Swift_COMPILER_INIT NOTFOUND)
-
-    if(NOT $ENV{SWIFTC} STREQUAL "")
-      get_filename_component(CMAKE_Swift_COMPILER_INIT $ENV{SWIFTC} PROGRAM
-        PROGRAM_ARGS CMAKE_Swift_FLAGS_ENV_INIT)
-      if(CMAKE_Swift_FLAGS_ENV_INIT)
-        set(CMAKE_Swift_COMPILER_ARG1 "${CMAKE_Swift_FLAGS_ENV_INIT}" CACHE
-          STRING "First argument to the Swift compiler")
-      endif()
-      if(NOT EXISTS ${CMAKE_Swift_COMPILER_INIT})
-        message(FATAL_ERROR "Could not find compiler set in environment variable SWIFTC\n$ENV{SWIFTC}.\n${CMAKE_Swift_COMPILER_INIT}")
-      endif()
-    endif()
-
-    if(NOT CMAKE_Swift_COMPILER_INIT)
-      set(CMAKE_Swift_COMPILER_LIST swiftc ${_CMAKE_TOOLCHAIN_PREFIX}swiftc)
-    endif()
-
-    _cmake_find_compiler(Swift)
-  endif()
-  mark_as_advanced(CMAKE_Swift_COMPILER)
-else()
-  message(FATAL_ERROR "Swift language not supported by \"${CMAKE_GENERATOR}\" generator")
-endif()
-
-# Build a small source file to identify the compiler.
-if(NOT CMAKE_Swift_COMPILER_ID_RUN)
-  set(CMAKE_Swift_COMPILER_ID_RUN 1)
-
-  if("${CMAKE_GENERATOR}" STREQUAL "Xcode")
-    list(APPEND CMAKE_Swift_COMPILER_ID_MATCH_VENDORS Apple)
-    set(CMAKE_Swift_COMPILER_ID_MATCH_VENDOR_REGEX_Apple "com.apple.xcode.tools.swift.compiler")
-
-    set(CMAKE_Swift_COMPILER_ID_TOOL_MATCH_REGEX "\nCompileSwift[^\n]*(\n[ \t]+[^\n]*)*\n[ \t]+([^ \t\r\n]+)[^\r\n]* -c[^\r\n]*CompilerIdSwift/CompilerId/main.swift")
-    set(CMAKE_Swift_COMPILER_ID_TOOL_MATCH_INDEX 2)
-  endif()
-
-  # Try to identify the compiler.
-  set(CMAKE_Swift_COMPILER_ID)
-  include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerId.cmake)
-  CMAKE_DETERMINE_COMPILER_ID(Swift "" CompilerId/main.swift)
-endif()
-
-if (NOT _CMAKE_TOOLCHAIN_LOCATION)
-  get_filename_component(_CMAKE_TOOLCHAIN_LOCATION "${CMAKE_Swift_COMPILER}" PATH)
-endif ()
-
-set(_CMAKE_PROCESSING_LANGUAGE "Swift")
-include(CMakeFindBinUtils)
-unset(_CMAKE_PROCESSING_LANGUAGE)
-
-# configure variables set in this file for fast reload later on
-configure_file(${CMAKE_ROOT}/Modules/CMakeSwiftCompiler.cmake.in
-               ${CMAKE_PLATFORM_INFO_DIR}/CMakeSwiftCompiler.cmake @ONLY)
-
-set(CMAKE_Swift_COMPILER_ENV_VAR "SWIFTC")
diff --git a/share/cmake-3.18/Modules/CMakeDetermineSystem.cmake b/share/cmake-3.18/Modules/CMakeDetermineSystem.cmake
deleted file mode 100644
index f3ec4da..0000000
--- a/share/cmake-3.18/Modules/CMakeDetermineSystem.cmake
+++ /dev/null
@@ -1,189 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# This module is used by the Makefile generator to determine the following variables:
-# CMAKE_SYSTEM_NAME - on unix this is uname -s, for windows it is Windows
-# CMAKE_SYSTEM_VERSION - on unix this is uname -r, for windows it is empty
-# CMAKE_SYSTEM - ${CMAKE_SYSTEM}-${CMAKE_SYSTEM_VERSION}, for windows: ${CMAKE_SYSTEM}
-#
-#  Expected uname -s output:
-#
-# AIX                           AIX
-# BSD/OS                        BSD/OS
-# FreeBSD                       FreeBSD
-# HP-UX                         HP-UX
-# Linux                         Linux
-# GNU/kFreeBSD                  GNU/kFreeBSD
-# NetBSD                        NetBSD
-# OpenBSD                       OpenBSD
-# OFS/1 (Digital Unix)          OSF1
-# SCO OpenServer 5              SCO_SV
-# SCO UnixWare 7                UnixWare
-# SCO UnixWare (pre release 7)  UNIX_SV
-# SCO XENIX                     Xenix
-# Solaris                       SunOS
-# SunOS                         SunOS
-# Tru64                         Tru64
-# Ultrix                        ULTRIX
-# cygwin                        CYGWIN_NT-5.1
-# MacOSX                        Darwin
-
-
-# find out on which system cmake runs
-if(CMAKE_HOST_UNIX)
-  find_program(CMAKE_UNAME uname /bin /usr/bin /usr/local/bin )
-  if(CMAKE_UNAME)
-    if(CMAKE_HOST_SYSTEM_NAME STREQUAL "AIX")
-      exec_program(${CMAKE_UNAME} ARGS -v OUTPUT_VARIABLE _CMAKE_HOST_SYSTEM_MAJOR_VERSION)
-      exec_program(${CMAKE_UNAME} ARGS -r OUTPUT_VARIABLE _CMAKE_HOST_SYSTEM_MINOR_VERSION)
-      set(CMAKE_HOST_SYSTEM_VERSION "${_CMAKE_HOST_SYSTEM_MAJOR_VERSION}.${_CMAKE_HOST_SYSTEM_MINOR_VERSION}")
-      unset(_CMAKE_HOST_SYSTEM_MAJOR_VERSION)
-      unset(_CMAKE_HOST_SYSTEM_MINOR_VERSION)
-    else()
-      exec_program(${CMAKE_UNAME} ARGS -r OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_VERSION)
-    endif()
-    if(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|CYGWIN.*|Darwin|^GNU$|Android")
-      exec_program(${CMAKE_UNAME} ARGS -m OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_PROCESSOR
-        RETURN_VALUE val)
-      if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin" AND
-         CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "Power Macintosh")
-        # OS X ppc 'uname -m' may report 'Power Macintosh' instead of 'powerpc'
-        set(CMAKE_HOST_SYSTEM_PROCESSOR "powerpc")
-      endif()
-    elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "OpenBSD")
-      exec_program(arch ARGS -s OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_PROCESSOR
-        RETURN_VALUE val)
-    else()
-      exec_program(${CMAKE_UNAME} ARGS -p OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_PROCESSOR
-        RETURN_VALUE val)
-      if("${val}" GREATER 0)
-        exec_program(${CMAKE_UNAME} ARGS -m OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_PROCESSOR
-          RETURN_VALUE val)
-      endif()
-    endif()
-    # check the return of the last uname -m or -p
-    if("${val}" GREATER 0)
-        set(CMAKE_HOST_SYSTEM_PROCESSOR "unknown")
-    endif()
-    set(CMAKE_UNAME ${CMAKE_UNAME} CACHE INTERNAL "uname command")
-    # processor may have double quote in the name, and that needs to be removed
-    string(REPLACE "\"" "" CMAKE_HOST_SYSTEM_PROCESSOR "${CMAKE_HOST_SYSTEM_PROCESSOR}")
-    string(REPLACE "/" "_" CMAKE_HOST_SYSTEM_PROCESSOR "${CMAKE_HOST_SYSTEM_PROCESSOR}")
-  endif()
-else()
-  if(CMAKE_HOST_WIN32)
-    if (DEFINED ENV{PROCESSOR_ARCHITEW6432})
-      set (CMAKE_HOST_SYSTEM_PROCESSOR "$ENV{PROCESSOR_ARCHITEW6432}")
-    else()
-      set (CMAKE_HOST_SYSTEM_PROCESSOR "$ENV{PROCESSOR_ARCHITECTURE}")
-    endif()
-  endif()
-endif()
-
-# if a toolchain file is used, the user wants to cross compile.
-# in this case read the toolchain file and keep the CMAKE_HOST_SYSTEM_*
-# variables around so they can be used in CMakeLists.txt.
-# In all other cases, the host and target platform are the same.
-if(CMAKE_TOOLCHAIN_FILE)
-  # at first try to load it as path relative to the directory from which cmake has been run
-  include("${CMAKE_BINARY_DIR}/${CMAKE_TOOLCHAIN_FILE}" OPTIONAL RESULT_VARIABLE _INCLUDED_TOOLCHAIN_FILE)
-  if(NOT _INCLUDED_TOOLCHAIN_FILE)
-     # if the file isn't found there, check the default locations
-     include("${CMAKE_TOOLCHAIN_FILE}" OPTIONAL RESULT_VARIABLE _INCLUDED_TOOLCHAIN_FILE)
-  endif()
-
-  if(_INCLUDED_TOOLCHAIN_FILE)
-    set(CMAKE_TOOLCHAIN_FILE "${_INCLUDED_TOOLCHAIN_FILE}" CACHE FILEPATH "The CMake toolchain file" FORCE)
-  else()
-    message(FATAL_ERROR "Could not find toolchain file: ${CMAKE_TOOLCHAIN_FILE}")
-    set(CMAKE_TOOLCHAIN_FILE "NOTFOUND" CACHE FILEPATH "The CMake toolchain file" FORCE)
-  endif()
-endif()
-
-
-# if CMAKE_SYSTEM_NAME is here already set, either it comes from a toolchain file
-# or it was set via -DCMAKE_SYSTEM_NAME=...
-# if that's the case, assume we are crosscompiling
-if(CMAKE_SYSTEM_NAME)
-  if(NOT DEFINED CMAKE_CROSSCOMPILING)
-    set(CMAKE_CROSSCOMPILING TRUE)
-  endif()
-  set(PRESET_CMAKE_SYSTEM_NAME TRUE)
-elseif(CMAKE_VS_WINCE_VERSION)
-  set(CMAKE_SYSTEM_NAME      "WindowsCE")
-  set(CMAKE_SYSTEM_VERSION   "${CMAKE_VS_WINCE_VERSION}")
-  set(CMAKE_SYSTEM_PROCESSOR "${MSVC_C_ARCHITECTURE_ID}")
-  set(CMAKE_CROSSCOMPILING TRUE)
-  set(PRESET_CMAKE_SYSTEM_NAME TRUE)
-else()
-  set(CMAKE_SYSTEM_NAME      "${CMAKE_HOST_SYSTEM_NAME}")
-  if(NOT DEFINED CMAKE_SYSTEM_VERSION)
-    set(CMAKE_SYSTEM_VERSION "${CMAKE_HOST_SYSTEM_VERSION}")
-  endif()
-  set(CMAKE_SYSTEM_PROCESSOR "${CMAKE_HOST_SYSTEM_PROCESSOR}")
-  set(CMAKE_CROSSCOMPILING FALSE)
-  set(PRESET_CMAKE_SYSTEM_NAME FALSE)
-endif()
-
-include(Platform/${CMAKE_SYSTEM_NAME}-Determine OPTIONAL)
-
-macro(ADJUST_CMAKE_SYSTEM_VARIABLES _PREFIX)
-  if(NOT ${_PREFIX}_NAME)
-    set(${_PREFIX}_NAME "UnknownOS")
-  endif()
-
-  # fix for BSD/OS , remove the /
-  if(${_PREFIX}_NAME MATCHES BSD.OS)
-    set(${_PREFIX}_NAME BSDOS)
-  endif()
-
-  # fix for GNU/kFreeBSD, remove the GNU/
-  if(${_PREFIX}_NAME MATCHES kFreeBSD)
-    set(${_PREFIX}_NAME kFreeBSD)
-  endif()
-
-  # fix for CYGWIN which has windows version in it
-  if(${_PREFIX}_NAME MATCHES CYGWIN)
-    set(${_PREFIX}_NAME CYGWIN)
-  endif()
-
-  # set CMAKE_SYSTEM to the CMAKE_SYSTEM_NAME
-  set(${_PREFIX}  ${${_PREFIX}_NAME})
-  # if there is a CMAKE_SYSTEM_VERSION then add a -${CMAKE_SYSTEM_VERSION}
-  if(${_PREFIX}_VERSION)
-    set(${_PREFIX} ${${_PREFIX}}-${${_PREFIX}_VERSION})
-  endif()
-
-endmacro()
-
-ADJUST_CMAKE_SYSTEM_VARIABLES(CMAKE_SYSTEM)
-ADJUST_CMAKE_SYSTEM_VARIABLES(CMAKE_HOST_SYSTEM)
-
-# this file is also executed from cpack, then we don't need to generate these files
-# in this case there is no CMAKE_BINARY_DIR
-if(CMAKE_BINARY_DIR)
-  # write entry to the log file
-  if(PRESET_CMAKE_SYSTEM_NAME)
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-                "The target system is: ${CMAKE_SYSTEM_NAME} - ${CMAKE_SYSTEM_VERSION} - ${CMAKE_SYSTEM_PROCESSOR}\n")
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-                "The host system is: ${CMAKE_HOST_SYSTEM_NAME} - ${CMAKE_HOST_SYSTEM_VERSION} - ${CMAKE_HOST_SYSTEM_PROCESSOR}\n")
-  else()
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-                "The system is: ${CMAKE_SYSTEM_NAME} - ${CMAKE_SYSTEM_VERSION} - ${CMAKE_SYSTEM_PROCESSOR}\n")
-  endif()
-
-  # if a toolchain file is used, it needs to be included in the configured file,
-  # so settings done there are also available if they don't go in the cache and in try_compile()
-  set(INCLUDE_CMAKE_TOOLCHAIN_FILE_IF_REQUIRED)
-  if(CMAKE_TOOLCHAIN_FILE)
-    set(INCLUDE_CMAKE_TOOLCHAIN_FILE_IF_REQUIRED "include(\"${CMAKE_TOOLCHAIN_FILE}\")")
-  endif()
-
-  # configure variables set in this file for fast reload, the template file is defined at the top of this file
-  configure_file(${CMAKE_ROOT}/Modules/CMakeSystem.cmake.in
-                ${CMAKE_PLATFORM_INFO_DIR}/CMakeSystem.cmake
-                @ONLY)
-
-endif()
diff --git a/share/cmake-3.18/Modules/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake b/share/cmake-3.18/Modules/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake
deleted file mode 100644
index 11f4a29..0000000
--- a/share/cmake-3.18/Modules/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake
+++ /dev/null
@@ -1,114 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# This file is included by CMakeFindEclipseCDT4.cmake and CMakeFindCodeBlocks.cmake
-
-# The Eclipse and the CodeBlocks generators need to know the standard include path
-# so that they can find the headers at runtime and parsing etc. works better
-# This is done here by actually running gcc with the options so it prints its
-# system include directories, which are parsed then and stored in the cache.
-macro(_DETERMINE_GCC_SYSTEM_INCLUDE_DIRS _lang _resultIncludeDirs _resultDefines)
-  set(${_resultIncludeDirs})
-  set(_gccOutput)
-  file(WRITE "${CMAKE_BINARY_DIR}/CMakeFiles/dummy" "\n" )
-
-  if (${_lang} STREQUAL "c++")
-    set(_compilerExecutable "${CMAKE_CXX_COMPILER}")
-    set(_arg1 "${CMAKE_CXX_COMPILER_ARG1}")
-
-    if (CMAKE_CXX_FLAGS MATCHES "(-stdlib=[^ ]+)")
-      set(_stdlib "${CMAKE_MATCH_1}")
-    endif ()
-    if (CMAKE_CXX_FLAGS MATCHES "(-std=[^ ]+)")
-      set(_stdver "${CMAKE_MATCH_1}")
-    endif ()
-  else ()
-    set(_compilerExecutable "${CMAKE_C_COMPILER}")
-    set(_arg1 "${CMAKE_C_COMPILER_ARG1}")
-  endif ()
-  separate_arguments(_arg1 NATIVE_COMMAND "${_arg1}")
-  execute_process(COMMAND ${_compilerExecutable} ${_arg1} ${_stdver} ${_stdlib} -v -E -x ${_lang} -dD dummy
-                  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles
-                  ERROR_VARIABLE _gccOutput
-                  OUTPUT_VARIABLE _gccStdout )
-  file(REMOVE "${CMAKE_BINARY_DIR}/CMakeFiles/dummy")
-
-  # First find the system include dirs:
-  if( "${_gccOutput}" MATCHES "> search starts here[^\n]+\n *(.+ *\n) *End of (search) list" )
-
-    # split the output into lines and then remove leading and trailing spaces from each of them:
-    string(REGEX MATCHALL "[^\n]+\n" _includeLines "${CMAKE_MATCH_1}")
-    foreach(nextLine ${_includeLines})
-      # on OSX, gcc says things like this:  "/System/Library/Frameworks (framework directory)", strip the last part
-      string(REGEX REPLACE "\\(framework directory\\)" "" nextLineNoFramework "${nextLine}")
-      # strip spaces at the beginning and the end
-      string(STRIP "${nextLineNoFramework}" _includePath)
-      list(APPEND ${_resultIncludeDirs} "${_includePath}")
-    endforeach()
-
-  endif()
-
-
-  # now find the builtin macros:
-  string(REGEX MATCHALL "#define[^\n]+\n" _defineLines "${_gccStdout}")
-# A few example lines which the regexp below has to match properly:
-#  #define   MAX(a,b) ((a) > (b) ? (a) : (b))
-#  #define __fastcall __attribute__((__fastcall__))
-#  #define   FOO (23)
-#  #define __UINTMAX_TYPE__ long long unsigned int
-#  #define __UINTMAX_TYPE__ long long unsigned int
-#  #define __i386__  1
-
-  foreach(nextLine ${_defineLines})
-    string(REGEX MATCH "^#define +([A-Za-z_][A-Za-z0-9_]*)(\\([^\\)]+\\))? +(.+) *$" _dummy "${nextLine}")
-    set(_name "${CMAKE_MATCH_1}${CMAKE_MATCH_2}")
-    string(STRIP "${CMAKE_MATCH_3}" _value)
-    #message(STATUS "m1: -${CMAKE_MATCH_1}- m2: -${CMAKE_MATCH_2}- m3: -${CMAKE_MATCH_3}-")
-
-    list(APPEND ${_resultDefines} "${_name}")
-    if ("${_value}" STREQUAL "")
-      list(APPEND ${_resultDefines} " ")
-    else()
-      list(APPEND ${_resultDefines} "${_value}")
-    endif()
-  endforeach()
-
-endmacro()
-
-# Save the current LC_ALL, LC_MESSAGES, and LANG environment variables and set them
-# to "C" that way GCC's "search starts here" text is in English and we can grok it.
-set(_orig_lc_all      $ENV{LC_ALL})
-set(_orig_lc_messages $ENV{LC_MESSAGES})
-set(_orig_lang        $ENV{LANG})
-
-set(ENV{LC_ALL}      C)
-set(ENV{LC_MESSAGES} C)
-set(ENV{LANG}        C)
-
-# Now check for C, works for gcc and Intel compiler at least
-if (NOT CMAKE_EXTRA_GENERATOR_C_SYSTEM_INCLUDE_DIRS)
-  if (CMAKE_C_COMPILER_ID MATCHES GNU  OR  CMAKE_C_COMPILER_ID MATCHES Intel  OR  CMAKE_C_COMPILER_ID MATCHES Clang)
-    _DETERMINE_GCC_SYSTEM_INCLUDE_DIRS(c _dirs _defines)
-    set(CMAKE_EXTRA_GENERATOR_C_SYSTEM_INCLUDE_DIRS "${_dirs}" CACHE INTERNAL "C compiler system include directories")
-    set(CMAKE_EXTRA_GENERATOR_C_SYSTEM_DEFINED_MACROS "${_defines}" CACHE INTERNAL "C compiler system defined macros")
-  elseif ("${CMAKE_C_COMPILER_ID}" MATCHES MSVC)
-    set(CMAKE_EXTRA_GENERATOR_C_SYSTEM_INCLUDE_DIRS "$ENV{INCLUDE}" CACHE INTERNAL "C compiler system include directories")
-  endif ()
-endif ()
-
-# And now the same for C++
-if (NOT CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_INCLUDE_DIRS)
-  if ("${CMAKE_CXX_COMPILER_ID}" MATCHES GNU  OR  "${CMAKE_CXX_COMPILER_ID}" MATCHES Intel  OR  "${CMAKE_CXX_COMPILER_ID}" MATCHES Clang)
-    _DETERMINE_GCC_SYSTEM_INCLUDE_DIRS(c++ _dirs _defines)
-    set(CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_INCLUDE_DIRS "${_dirs}" CACHE INTERNAL "CXX compiler system include directories")
-    set(CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_DEFINED_MACROS "${_defines}" CACHE INTERNAL "CXX compiler system defined macros")
-  elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES MSVC)
-    set(CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_INCLUDE_DIRS "$ENV{INCLUDE}" CACHE INTERNAL "CXX compiler system include directories")
-  endif ()
-endif ()
-
-# Restore original LC_ALL, LC_MESSAGES, and LANG
-set(ENV{LC_ALL}      ${_orig_lc_all})
-set(ENV{LC_MESSAGES} ${_orig_lc_messages})
-set(ENV{LANG}        ${_orig_lang})
diff --git a/share/cmake-3.18/Modules/CMakeFindBinUtils.cmake b/share/cmake-3.18/Modules/CMakeFindBinUtils.cmake
deleted file mode 100644
index de9ef9a..0000000
--- a/share/cmake-3.18/Modules/CMakeFindBinUtils.cmake
+++ /dev/null
@@ -1,144 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# search for additional tools required for C/C++ (and other languages ?)
-#
-# If the internal cmake variable _CMAKE_TOOLCHAIN_PREFIX is set, this is used
-# as prefix for the tools (e.g. arm-elf-gcc etc.)
-# If the cmake variable _CMAKE_TOOLCHAIN_LOCATION is set, the compiler is
-# searched only there. The other tools are at first searched there, then
-# also in the default locations.
-#
-# Sets the following variables:
-#   CMAKE_AR
-#   CMAKE_RANLIB
-#   CMAKE_LINKER
-#   CMAKE_MT
-#   CMAKE_STRIP
-#   CMAKE_INSTALL_NAME_TOOL
-
-# on UNIX, cygwin and mingw
-
-# Resolve full path of CMAKE_TOOL from user-defined name and SEARCH_PATH.
-function(__resolve_tool_path CMAKE_TOOL SEARCH_PATH DOCSTRING)
-
-  if(${CMAKE_TOOL})
-    # We only get here if CMAKE_TOOL was
-    # specified using -D or a pre-made CMakeCache.txt (e.g. via ctest)
-    # or set in CMAKE_TOOLCHAIN_FILE.
-
-    get_filename_component(_CMAKE_USER_TOOL_PATH "${${CMAKE_TOOL}}" DIRECTORY)
-    # Is CMAKE_TOOL a user-defined name instead of a full path?
-    if(NOT _CMAKE_USER_TOOL_PATH)
-
-      # Find CMAKE_TOOL in the SEARCH_PATH directory by user-defined name.
-      find_program(_CMAKE_TOOL_WITH_PATH NAMES ${${CMAKE_TOOL}} HINTS ${SEARCH_PATH})
-      if(_CMAKE_TOOL_WITH_PATH)
-
-        # Overwrite CMAKE_TOOL with full path found in SEARCH_PATH.
-        set(${CMAKE_TOOL} ${_CMAKE_TOOL_WITH_PATH} PARENT_SCOPE)
-
-        get_property(_CMAKE_TOOL_CACHED CACHE ${CMAKE_TOOL} PROPERTY TYPE)
-        # If CMAKE_TOOL is present in the CMake Cache, then overwrit it as well.
-        if(_CMAKE_TOOL_CACHED)
-          set(${CMAKE_TOOL} "${_CMAKE_TOOL_WITH_PATH}" CACHE STRING ${DOCSTRING} FORCE)
-        endif()
-
-      endif()
-      unset(_CMAKE_TOOL_WITH_PATH CACHE)
-
-    endif()
-
-  endif()
-
-endfunction()
-
-__resolve_tool_path(CMAKE_LINKER "${_CMAKE_TOOLCHAIN_LOCATION}" "Default Linker")
-__resolve_tool_path(CMAKE_MT     "${_CMAKE_TOOLCHAIN_LOCATION}" "Default Manifest Tool")
-
-set(_CMAKE_TOOL_VARS "")
-
-# if it's the MS C/CXX compiler, search for link
-if(("x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_SIMULATE_ID}" STREQUAL "xMSVC" AND
-   ("x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_FRONTEND_VARIANT}" STREQUAL "xMSVC"
-    OR NOT "x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" STREQUAL "xClang"))
-   OR "x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" STREQUAL "xMSVC"
-   OR (CMAKE_HOST_WIN32 AND "x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" STREQUAL "xPGI")
-   OR (CMAKE_HOST_WIN32 AND "x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" STREQUAL "xNVIDIA")
-   OR (CMAKE_GENERATOR MATCHES "Visual Studio"
-       AND NOT CMAKE_VS_PLATFORM_NAME STREQUAL "Tegra-Android"))
-
-  if("x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" STREQUAL "xClang")
-    find_program(CMAKE_NM NAMES ${_CMAKE_TOOLCHAIN_PREFIX}nm llvm-nm HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
-    set(_CMAKE_ADDITIONAL_LINKER_NAMES "lld-link")
-  endif()
-
-  find_program(CMAKE_LINKER NAMES ${_CMAKE_ADDITIONAL_LINKER_NAMES} link HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
-  find_program(CMAKE_AR     NAMES lib  HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
-  find_program(CMAKE_MT     NAMES mt   HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
-
-  list(APPEND _CMAKE_TOOL_VARS LINKER MT)
-
-# in all other cases search for ar, ranlib, etc.
-else()
-  if(CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN)
-    set(_CMAKE_TOOLCHAIN_LOCATION ${_CMAKE_TOOLCHAIN_LOCATION} ${CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN}/bin)
-  endif()
-  if(CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN)
-    set(_CMAKE_TOOLCHAIN_LOCATION ${_CMAKE_TOOLCHAIN_LOCATION} ${CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN}/bin)
-  endif()
-
-  if("${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" STREQUAL Clang)
-    set(_CMAKE_ADDITIONAL_AR_NAMES "llvm-ar")
-    set(_CMAKE_ADDITIONAL_RANLIB_NAMES "llvm-ranlib")
-    set(_CMAKE_ADDITIONAL_STRIP_NAMES "llvm-strip")
-    set(_CMAKE_ADDITIONAL_LINKER_NAMES "ld.lld")
-    set(_CMAKE_ADDITIONAL_NM_NAMES "llvm-nm")
-    set(_CMAKE_ADDITIONAL_OBJDUMP_NAMES "llvm-objdump")
-    set(_CMAKE_ADDITIONAL_OBJCOPY_NAMES "llvm-objcopy")
-    set(_CMAKE_ADDITIONAL_READELF_NAMES "llvm-readelf")
-    set(_CMAKE_ADDITIONAL_DLLTOOL_NAMES "llvm-dlltool")
-    set(_CMAKE_ADDITIONAL_ADDR2LINE_NAMES "llvm-addr2line")
-  endif()
-
-  find_program(CMAKE_AR NAMES ${_CMAKE_TOOLCHAIN_PREFIX}ar${_CMAKE_TOOLCHAIN_SUFFIX} ${_CMAKE_ADDITIONAL_AR_NAMES} HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
-
-  find_program(CMAKE_RANLIB NAMES ${_CMAKE_TOOLCHAIN_PREFIX}ranlib ${_CMAKE_ADDITIONAL_RANLIB_NAMES} HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
-  if(NOT CMAKE_RANLIB)
-    set(CMAKE_RANLIB : CACHE INTERNAL "noop for ranlib")
-  endif()
-
-
-  find_program(CMAKE_STRIP NAMES ${_CMAKE_TOOLCHAIN_PREFIX}strip${_CMAKE_TOOLCHAIN_SUFFIX} ${_CMAKE_ADDITIONAL_STRIP_NAMES} HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
-  find_program(CMAKE_LINKER NAMES ${_CMAKE_TOOLCHAIN_PREFIX}ld ${_CMAKE_ADDITIONAL_LINKER_NAMES} HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
-  find_program(CMAKE_NM NAMES ${_CMAKE_TOOLCHAIN_PREFIX}nm ${_CMAKE_ADDITIONAL_NM_NAMES} HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
-  find_program(CMAKE_OBJDUMP NAMES ${_CMAKE_TOOLCHAIN_PREFIX}objdump ${_CMAKE_ADDITIONAL_OBJDUMP_NAMES} HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
-  find_program(CMAKE_OBJCOPY NAMES ${_CMAKE_TOOLCHAIN_PREFIX}objcopy ${_CMAKE_ADDITIONAL_OBJCOPY_NAMES} HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
-  find_program(CMAKE_READELF NAMES ${_CMAKE_TOOLCHAIN_PREFIX}readelf ${_CMAKE_ADDITIONAL_READELF_NAMES} HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
-  find_program(CMAKE_DLLTOOL NAMES ${_CMAKE_TOOLCHAIN_PREFIX}dlltool ${_CMAKE_ADDITIONAL_DLLTOOL_NAMES} HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
-  find_program(CMAKE_ADDR2LINE NAMES ${_CMAKE_TOOLCHAIN_PREFIX}addr2line ${_CMAKE_ADDITIONAL_ADDR2LINE_NAMES} HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
-
-  list(APPEND _CMAKE_TOOL_VARS AR RANLIB STRIP LINKER NM OBJDUMP OBJCOPY READELF DLLTOOL ADDR2LINE)
-endif()
-
-if(CMAKE_PLATFORM_HAS_INSTALLNAME)
-  find_program(CMAKE_INSTALL_NAME_TOOL NAMES ${_CMAKE_TOOLCHAIN_PREFIX}install_name_tool HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
-
-  if(NOT CMAKE_INSTALL_NAME_TOOL)
-    message(FATAL_ERROR "Could not find install_name_tool, please check your installation.")
-  endif()
-
-  list(APPEND _CMAKE_TOOL_VARS INSTALL_NAME_TOOL)
-endif()
-
-# Mark any tool cache entries as advanced.
-foreach(var IN LISTS _CMAKE_TOOL_VARS)
-  get_property(_CMAKE_TOOL_CACHED CACHE CMAKE_${var} PROPERTY TYPE)
-  if(_CMAKE_TOOL_CACHED)
-    mark_as_advanced(CMAKE_${var})
-  endif()
-  unset(_CMAKE_ADDITIONAL_${var}_NAMES)
-endforeach()
-unset(_CMAKE_TOOL_VARS)
-unset(_CMAKE_TOOL_CACHED)
diff --git a/share/cmake-3.18/Modules/CMakeFindPackageMode.cmake b/share/cmake-3.18/Modules/CMakeFindPackageMode.cmake
deleted file mode 100644
index 815dfc9..0000000
--- a/share/cmake-3.18/Modules/CMakeFindPackageMode.cmake
+++ /dev/null
@@ -1,204 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CMakeFindPackageMode
---------------------
-
-
-
-This file is executed by cmake when invoked with --find-package.  It
-expects that the following variables are set using -D:
-
-``NAME``
-  name of the package
-``COMPILER_ID``
-  the CMake compiler ID for which the result is,
-  i.e. GNU/Intel/Clang/MSVC, etc.
-``LANGUAGE``
-  language for which the result will be used,
-  i.e. C/CXX/Fortran/ASM
-``MODE``
-  ``EXIST``
-    only check for existence of the given package
-  ``COMPILE``
-    print the flags needed for compiling an object file which uses
-    the given package
-  ``LINK``
-    print the flags needed for linking when using the given package
-``QUIET``
-  if TRUE, don't print anything
-#]=======================================================================]
-
-if(NOT NAME)
-  message(FATAL_ERROR "Name of the package to be searched not specified. Set the CMake variable NAME, e.g. -DNAME=JPEG .")
-endif()
-
-if(NOT COMPILER_ID)
-  message(FATAL_ERROR "COMPILER_ID argument not specified. In doubt, use GNU.")
-endif()
-
-if(NOT LANGUAGE)
-  message(FATAL_ERROR "LANGUAGE argument not specified. Use C, CXX or Fortran.")
-endif()
-
-if(NOT MODE)
-  message(FATAL_ERROR "MODE argument not specified. Use either EXIST, COMPILE or LINK.")
-endif()
-
-# require the current version. If we don't do this, Platforms/CYGWIN.cmake complains because
-# it doesn't know whether it should set WIN32 or not:
-cmake_minimum_required(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} )
-
-macro(ENABLE_LANGUAGE)
-  # disable the enable_language() command, otherwise --find-package breaks on Windows.
-  # On Windows, enable_language(RC) is called in the platform files unconditionally.
-  # But in --find-package mode, we don't want (and can't) enable any language.
-endmacro()
-
-set(CMAKE_PLATFORM_INFO_DIR ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY})
-
-include(CMakeDetermineSystem)
-
-# short-cut some tests on Darwin, see Darwin-GNU.cmake:
-if("${CMAKE_SYSTEM_NAME}" MATCHES Darwin  AND  "${COMPILER_ID}" MATCHES GNU)
-  set(CMAKE_${LANGUAGE}_SYSROOT_FLAG "")
-  set(CMAKE_${LANGUAGE}_OSX_DEPLOYMENT_TARGET_FLAG "")
-endif()
-
-include(CMakeSystemSpecificInitialize)
-
-# Also load the system specific file, which sets up e.g. the search paths.
-# This makes the FIND_XXX() calls work much better
-include(CMakeSystemSpecificInformation)
-
-if(UNIX)
-
-  # try to guess whether we have a 64bit system, if it has not been set
-  # from the outside
-  if(NOT CMAKE_SIZEOF_VOID_P)
-    set(CMAKE_SIZEOF_VOID_P 4)
-    if(EXISTS /usr/lib64)
-      set(CMAKE_SIZEOF_VOID_P 8)
-    else()
-      # use the file utility to check whether itself is 64 bit:
-      find_program(FILE_EXECUTABLE file)
-      if(FILE_EXECUTABLE)
-        get_filename_component(FILE_ABSPATH "${FILE_EXECUTABLE}" ABSOLUTE)
-        execute_process(COMMAND "${FILE_ABSPATH}" "${FILE_ABSPATH}" OUTPUT_VARIABLE fileOutput ERROR_QUIET)
-        if("${fileOutput}" MATCHES "64-bit")
-          set(CMAKE_SIZEOF_VOID_P 8)
-        endif()
-      endif()
-    endif()
-  endif()
-
-  # guess Debian multiarch if it has not been set:
-  if(EXISTS /etc/debian_version)
-    if(NOT CMAKE_${LANGUAGE}_LIBRARY_ARCHITECTURE )
-      file(GLOB filesInLib RELATIVE /lib /lib/*-linux-gnu* )
-      foreach(file ${filesInLib})
-        if("${file}" MATCHES "${CMAKE_LIBRARY_ARCHITECTURE_REGEX}")
-          set(CMAKE_${LANGUAGE}_LIBRARY_ARCHITECTURE ${file})
-          break()
-        endif()
-      endforeach()
-    endif()
-    if(NOT CMAKE_LIBRARY_ARCHITECTURE)
-      set(CMAKE_LIBRARY_ARCHITECTURE ${CMAKE_${LANGUAGE}_LIBRARY_ARCHITECTURE})
-    endif()
-  endif()
-
-endif()
-
-set(CMAKE_${LANGUAGE}_COMPILER "dummy")
-set(CMAKE_${LANGUAGE}_COMPILER_ID "${COMPILER_ID}")
-include(CMake${LANGUAGE}Information)
-
-
-function(set_compile_flags_var _packageName)
-  string(TOUPPER "${_packageName}" PACKAGE_NAME)
-  # Check the following variables:
-  # FOO_INCLUDE_DIRS
-  # Foo_INCLUDE_DIRS
-  # FOO_INCLUDES
-  # Foo_INCLUDES
-  # FOO_INCLUDE_DIR
-  # Foo_INCLUDE_DIR
-  set(includes)
-  if(DEFINED ${_packageName}_INCLUDE_DIRS)
-    set(includes ${_packageName}_INCLUDE_DIRS)
-  elseif(DEFINED ${PACKAGE_NAME}_INCLUDE_DIRS)
-    set(includes ${PACKAGE_NAME}_INCLUDE_DIRS)
-  elseif(DEFINED ${_packageName}_INCLUDES)
-    set(includes ${_packageName}_INCLUDES)
-  elseif(DEFINED ${PACKAGE_NAME}_INCLUDES)
-    set(includes ${PACKAGE_NAME}_INCLUDES)
-  elseif(DEFINED ${_packageName}_INCLUDE_DIR)
-    set(includes ${_packageName}_INCLUDE_DIR)
-  elseif(DEFINED ${PACKAGE_NAME}_INCLUDE_DIR)
-    set(includes ${PACKAGE_NAME}_INCLUDE_DIR)
-  endif()
-
-  set(PACKAGE_INCLUDE_DIRS "${${includes}}" PARENT_SCOPE)
-
-  # Check the following variables:
-  # FOO_DEFINITIONS
-  # Foo_DEFINITIONS
-  set(definitions)
-  if(DEFINED ${_packageName}_DEFINITIONS)
-    set(definitions ${_packageName}_DEFINITIONS)
-  elseif(DEFINED ${PACKAGE_NAME}_DEFINITIONS)
-    set(definitions ${PACKAGE_NAME}_DEFINITIONS)
-  endif()
-
-  set(PACKAGE_DEFINITIONS  "${${definitions}}" )
-
-endfunction()
-
-
-function(set_link_flags_var _packageName)
-  string(TOUPPER "${_packageName}" PACKAGE_NAME)
-  # Check the following variables:
-  # FOO_LIBRARIES
-  # Foo_LIBRARIES
-  # FOO_LIBS
-  # Foo_LIBS
-  set(libs)
-  if(DEFINED ${_packageName}_LIBRARIES)
-    set(libs ${_packageName}_LIBRARIES)
-  elseif(DEFINED ${PACKAGE_NAME}_LIBRARIES)
-    set(libs ${PACKAGE_NAME}_LIBRARIES)
-  elseif(DEFINED ${_packageName}_LIBS)
-    set(libs ${_packageName}_LIBS)
-  elseif(DEFINED ${PACKAGE_NAME}_LIBS)
-    set(libs ${PACKAGE_NAME}_LIBS)
-  endif()
-
-  set(PACKAGE_LIBRARIES "${${libs}}" PARENT_SCOPE )
-
-endfunction()
-
-
-find_package("${NAME}" QUIET)
-
-set(PACKAGE_FOUND FALSE)
-
-string(TOUPPER "${NAME}" UPPERCASE_NAME)
-
-if(${NAME}_FOUND  OR  ${UPPERCASE_NAME}_FOUND)
-  set(PACKAGE_FOUND TRUE)
-
-  if("${MODE}" STREQUAL "EXIST")
-    # do nothing
-  elseif("${MODE}" STREQUAL "COMPILE")
-    set_compile_flags_var(${NAME})
-  elseif("${MODE}" STREQUAL "LINK")
-    set_link_flags_var(${NAME})
-  else()
-    message(FATAL_ERROR "Invalid mode argument ${MODE} given.")
-  endif()
-
-endif()
-
-set(PACKAGE_QUIET ${SILENT} )
diff --git a/share/cmake-3.18/Modules/CMakeFortranCompiler.cmake.in b/share/cmake-3.18/Modules/CMakeFortranCompiler.cmake.in
deleted file mode 100644
index 06ee528..0000000
--- a/share/cmake-3.18/Modules/CMakeFortranCompiler.cmake.in
+++ /dev/null
@@ -1,69 +0,0 @@
-set(CMAKE_Fortran_COMPILER "@CMAKE_Fortran_COMPILER@")
-set(CMAKE_Fortran_COMPILER_ARG1 "@CMAKE_Fortran_COMPILER_ARG1@")
-set(CMAKE_Fortran_COMPILER_ID "@CMAKE_Fortran_COMPILER_ID@")
-set(CMAKE_Fortran_COMPILER_VERSION "@CMAKE_Fortran_COMPILER_VERSION@")
-set(CMAKE_Fortran_COMPILER_WRAPPER "@CMAKE_Fortran_COMPILER_WRAPPER@")
-set(CMAKE_Fortran_PLATFORM_ID "@CMAKE_Fortran_PLATFORM_ID@")
-set(CMAKE_Fortran_SIMULATE_ID "@CMAKE_Fortran_SIMULATE_ID@")
-set(CMAKE_Fortran_SIMULATE_VERSION "@CMAKE_Fortran_SIMULATE_VERSION@")
-@_SET_CMAKE_Fortran_XL_CPP@
-@_SET_CMAKE_Fortran_COMPILER_ARCHITECTURE_ID@
-@_SET_CMAKE_Fortran_COMPILER_SYSROOT@
-@SET_MSVC_Fortran_ARCHITECTURE_ID@
-set(CMAKE_AR "@CMAKE_AR@")
-set(CMAKE_Fortran_COMPILER_AR "@CMAKE_Fortran_COMPILER_AR@")
-set(CMAKE_RANLIB "@CMAKE_RANLIB@")
-set(CMAKE_Fortran_COMPILER_RANLIB "@CMAKE_Fortran_COMPILER_RANLIB@")
-set(CMAKE_COMPILER_IS_GNUG77 @CMAKE_COMPILER_IS_GNUG77@)
-set(CMAKE_Fortran_COMPILER_LOADED 1)
-set(CMAKE_Fortran_COMPILER_WORKS @CMAKE_Fortran_COMPILER_WORKS@)
-set(CMAKE_Fortran_ABI_COMPILED @CMAKE_Fortran_ABI_COMPILED@)
-set(CMAKE_COMPILER_IS_MINGW @CMAKE_COMPILER_IS_MINGW@)
-set(CMAKE_COMPILER_IS_CYGWIN @CMAKE_COMPILER_IS_CYGWIN@)
-if(CMAKE_COMPILER_IS_CYGWIN)
-  set(CYGWIN 1)
-  set(UNIX 1)
-endif()
-
-set(CMAKE_Fortran_COMPILER_ENV_VAR "FC")
-
-set(CMAKE_Fortran_COMPILER_SUPPORTS_F90 @CMAKE_Fortran_COMPILER_SUPPORTS_F90@)
-
-if(CMAKE_COMPILER_IS_MINGW)
-  set(MINGW 1)
-endif()
-set(CMAKE_Fortran_COMPILER_ID_RUN 1)
-set(CMAKE_Fortran_SOURCE_FILE_EXTENSIONS f;F;fpp;FPP;f77;F77;f90;F90;for;For;FOR;f95;F95)
-set(CMAKE_Fortran_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC)
-set(CMAKE_Fortran_LINKER_PREFERENCE 20)
-if(UNIX)
-  set(CMAKE_Fortran_OUTPUT_EXTENSION .o)
-else()
-  set(CMAKE_Fortran_OUTPUT_EXTENSION .obj)
-endif()
-
-# Save compiler ABI information.
-set(CMAKE_Fortran_SIZEOF_DATA_PTR "@CMAKE_Fortran_SIZEOF_DATA_PTR@")
-set(CMAKE_Fortran_COMPILER_ABI "@CMAKE_Fortran_COMPILER_ABI@")
-set(CMAKE_Fortran_LIBRARY_ARCHITECTURE "@CMAKE_Fortran_LIBRARY_ARCHITECTURE@")
-
-if(CMAKE_Fortran_SIZEOF_DATA_PTR AND NOT CMAKE_SIZEOF_VOID_P)
-  set(CMAKE_SIZEOF_VOID_P "${CMAKE_Fortran_SIZEOF_DATA_PTR}")
-endif()
-
-if(CMAKE_Fortran_COMPILER_ABI)
-  set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_Fortran_COMPILER_ABI}")
-endif()
-
-if(CMAKE_Fortran_LIBRARY_ARCHITECTURE)
-  set(CMAKE_LIBRARY_ARCHITECTURE "@CMAKE_Fortran_LIBRARY_ARCHITECTURE@")
-endif()
-
-@CMAKE_Fortran_COMPILER_CUSTOM_CODE@
-@CMAKE_Fortran_SYSROOT_FLAG_CODE@
-@CMAKE_Fortran_OSX_DEPLOYMENT_TARGET_FLAG_CODE@
-
-set(CMAKE_Fortran_IMPLICIT_INCLUDE_DIRECTORIES "@CMAKE_Fortran_IMPLICIT_INCLUDE_DIRECTORIES@")
-set(CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES "@CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES@")
-set(CMAKE_Fortran_IMPLICIT_LINK_DIRECTORIES "@CMAKE_Fortran_IMPLICIT_LINK_DIRECTORIES@")
-set(CMAKE_Fortran_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "@CMAKE_Fortran_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES@")
diff --git a/share/cmake-3.18/Modules/CMakeFortranCompilerId.F.in b/share/cmake-3.18/Modules/CMakeFortranCompilerId.F.in
deleted file mode 100644
index 30f8d4c..0000000
--- a/share/cmake-3.18/Modules/CMakeFortranCompilerId.F.in
+++ /dev/null
@@ -1,200 +0,0 @@
-      PROGRAM CMakeFortranCompilerId
-#if 0
-! Identify the compiler
-#endif
-#if defined(_MSC_VER)
-       PRINT *, 'INFO:simulate[MSVC]'
-# if _MSC_VER >= 1900
-       PRINT *, 'INFO:simulate_version[019.00]'
-# elif _MSC_VER >= 1800
-       PRINT *, 'INFO:simulate_version[018.00]'
-# elif _MSC_VER >= 1700
-       PRINT *, 'INFO:simulate_version[017.00]'
-# elif _MSC_VER >= 1600
-       PRINT *, 'INFO:simulate_version[016.00]'
-# elif _MSC_VER >= 1500
-       PRINT *, 'INFO:simulate_version[015.00]'
-# elif _MSC_VER >= 1400
-       PRINT *, 'INFO:simulate_version[014.00]'
-# elif _MSC_VER >= 1310
-       PRINT *, 'INFO:simulate_version[013.01]'
-# else
-       PRINT *, 'INFO:simulate_version[013.00]'
-# endif
-#endif
-#if defined(__INTEL_COMPILER) || defined(__ICC)
-        PRINT *, 'INFO:compiler[Intel]'
-# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)
-# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)
-# if defined(__INTEL_COMPILER_UPDATE)
-#  define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
-# else
-#  define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER   % 10)
-# endif
-# if defined(__INTEL_COMPILER_BUILD_DATE)
-#  define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
-# endif
-#elif defined(__SUNPRO_F95)
-        PRINT *, 'INFO:compiler[SunPro]'
-# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_F95>>8)
-# define COMPILER_VERSION_MINOR HEX(__SUNPRO_F95>>4 & 0xF)
-# define COMPILER_VERSION_PATCH HEX(__SUNPRO_F95    & 0xF)
-#elif defined(__SUNPRO_F90)
-        PRINT *, 'INFO:compiler[SunPro]'
-# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_F90>>8)
-# define COMPILER_VERSION_MINOR HEX(__SUNPRO_F90>>4 & 0xF)
-# define COMPILER_VERSION_PATCH HEX(__SUNPRO_F90    & 0xF)
-#elif defined(_CRAYFTN)
-        PRINT *, 'INFO:compiler[Cray]'
-# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
-# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
-#elif defined(__G95__)
-        PRINT *, 'INFO:compiler[G95]'
-# define COMPILER_VERSION_MAJOR DEC(__G95__)
-# define COMPILER_VERSION_MINOR DEC(__G95_MINOR__)
-#elif defined(__PATHSCALE__)
-        PRINT *, 'INFO:compiler[PathScale]'
-# define COMPILER_VERSION_MAJOR DEC(__PATHCC__)
-# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)
-# if defined(__PATHCC_PATCHLEVEL__)
-#  define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)
-# endif
-#elif defined(__ABSOFT__)
-        PRINT *, 'INFO:compiler[Absoft]'
-#elif defined(__GNUC__)
-        PRINT *, 'INFO:compiler[GNU]'
-# define COMPILER_VERSION_MAJOR DEC(__GNUC__)
-# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
-# if defined(__GNUC_PATCHLEVEL__)
-#  define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
-# endif
-#elif defined(__IBMC__)
-# if defined(__COMPILER_VER__)
-        PRINT *, 'INFO:compiler[zOS]'
-# elif __IBMC__ >= 800
-        PRINT *, 'INFO:compiler[XL]'
-#  define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
-#  define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
-#  define COMPILER_VERSION_PATCH DEC(__IBMC__    % 10)
-# else
-        PRINT *, 'INFO:compiler[VisualAge]'
-#  define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
-#  define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
-#  define COMPILER_VERSION_PATCH DEC(__IBMC__    % 10)
-# endif
-#elif defined(__PGI)
-        PRINT *, 'INFO:compiler[PGI]'
-# define COMPILER_VERSION_MAJOR DEC(__PGIC__)
-# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
-# if defined(__PGIC_PATCHLEVEL__)
-#  define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
-# endif
-#elif defined(__FLANG)
-        PRINT *, 'INFO:compiler[Flang]'
-# define COMPILER_VERSION_MAJOR DEC(__FLANG_MAJOR__)
-# define COMPILER_VERSION_MINOR DEC(__FLANG_MINOR__)
-# if defined(__FLANG_PATCHLEVEL__)
-#  define COMPILER_VERSION_PATCH DEC(__FLANG_PATCHLEVEL__)
-# endif
-#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
-        PRINT *, 'INFO:compiler[VisualAge]'
-#elif defined(__hpux) || defined(__hpux__)
-        PRINT *, 'INFO:compiler[HP]'
-#elif defined(NAGFOR)
-        PRINT *, 'INFO:compiler[NAG]'
-#define COMPILER_VERSION_MAJOR DEC(__NAG_COMPILER_RELEASE/10)
-#define COMPILER_VERSION_MINOR DEC(__NAG_COMPILER_RELEASE % 10)
-#define COMPILER_VERSION_PATCH DEC(__NAG_COMPILER_BUILD)
-#else
-        PRINT *, 'INFO:compiler[]'
-#endif
-#if defined(__CRAYXE) || defined(__CRAYXC)
-        PRINT *, 'INFO:compiler_wrapper[CrayPrgEnv]'
-#endif
-
-#if 0
-! Identify the platform
-#endif
-#if defined(__linux) || defined(__linux__) || defined(linux)
-        PRINT *, 'INFO:platform[Linux]'
-#elif defined(__CYGWIN__)
-        PRINT *, 'INFO:platform[Cygwin]'
-#elif defined(__MINGW32__)
-        PRINT *, 'INFO:platform[MinGW]'
-#elif defined(__APPLE__)
-        PRINT *, 'INFO:platform[Darwin]'
-#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
-        PRINT *, 'INFO:platform[Windows]'
-#elif defined(__FreeBSD__) || defined(__FreeBSD)
-        PRINT *, 'INFO:platform[FreeBSD]'
-#elif defined(__NetBSD__) || defined(__NetBSD)
-        PRINT *, 'INFO:platform[NetBSD]'
-#elif defined(__OpenBSD__) || defined(__OPENBSD)
-        PRINT *, 'INFO:platform[OpenBSD]'
-#elif defined(__sun) || defined(sun)
-        PRINT *, 'INFO:platform[SunOS]'
-#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
-        PRINT *, 'INFO:platform[AIX]'
-#elif defined(__hpux) || defined(__hpux__)
-        PRINT *, 'INFO:platform[HP-UX]'
-#elif defined(__HAIKU__)
-        PRINT *, 'INFO:platform[Haiku]'
-#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
-        PRINT *, 'INFO:platform[BeOS]'
-#elif defined(__QNX__) || defined(__QNXNTO__)
-        PRINT *, 'INFO:platform[QNX]'
-#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
-        PRINT *, 'INFO:platform[Tru64]'
-#elif defined(__riscos) || defined(__riscos__)
-        PRINT *, 'INFO:platform[RISCos]'
-#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
-        PRINT *, 'INFO:platform[SINIX]'
-#elif defined(__UNIX_SV__)
-        PRINT *, 'INFO:platform[UNIX_SV]'
-#elif defined(__bsdos__)
-        PRINT *, 'INFO:platform[BSDOS]'
-#elif defined(_MPRAS) || defined(MPRAS)
-        PRINT *, 'INFO:platform[MP-RAS]'
-#elif defined(__osf) || defined(__osf__)
-        PRINT *, 'INFO:platform[OSF1]'
-#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
-        PRINT *, 'INFO:platform[SCO_SV]'
-#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
-        PRINT *, 'INFO:platform[ULTRIX]'
-#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
-        PRINT *, 'INFO:platform[Xenix]'
-#else
-        PRINT *, 'INFO:platform[]'
-#endif
-#if defined(_WIN32) && (defined(__INTEL_COMPILER) || defined(__ICC))
-# if defined(_M_IA64)
-        PRINT *, 'INFO:arch[IA64]'
-# elif defined(_M_X64) || defined(_M_AMD64)
-        PRINT *, 'INFO:arch[x64]'
-# elif defined(_M_IX86)
-        PRINT *, 'INFO:arch[X86]'
-# endif
-#endif
-
-#if 0
-! Encode compiler version digits
-#endif
-#define DEC_8(n) (((n) / 10000000) % 10)
-#define DEC_7(n) (((n) / 1000000)  % 10)
-#define DEC_6(n) (((n) / 100000)   % 10)
-#define DEC_5(n) (((n) / 10000)    % 10)
-#define DEC_4(n) (((n) / 1000)     % 10)
-#define DEC_3(n) (((n) / 100)      % 10)
-#define DEC_2(n) (((n) / 10)       % 10)
-#define DEC_1(n) (((n)    )        % 10)
-#define HEX_8(n) ((n)>>28 & 0xF)
-#define HEX_7(n) ((n)>>24 & 0xF)
-#define HEX_6(n) ((n)>>20 & 0xF)
-#define HEX_5(n) ((n)>>16 & 0xF)
-#define HEX_4(n) ((n)>>12 & 0xF)
-#define HEX_3(n) ((n)>>8  & 0xF)
-#define HEX_2(n) ((n)>>4  & 0xF)
-#define HEX_1(n) ((n)     & 0xF)
-@CMAKE_Fortran_COMPILER_ID_VERSION_INFO@
-
-      END
diff --git a/share/cmake-3.18/Modules/CMakeFortranInformation.cmake b/share/cmake-3.18/Modules/CMakeFortranInformation.cmake
deleted file mode 100644
index 9a4ce63..0000000
--- a/share/cmake-3.18/Modules/CMakeFortranInformation.cmake
+++ /dev/null
@@ -1,222 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-include(CMakeLanguageInformation)
-
-# This file sets the basic flags for the Fortran language in CMake.
-# It also loads the available platform file for the system-compiler
-# if it exists.
-
-set(_INCLUDED_FILE 0)
-
-# Load compiler-specific information.
-if(CMAKE_Fortran_COMPILER_ID)
-  include(Compiler/${CMAKE_Fortran_COMPILER_ID}-Fortran OPTIONAL)
-endif()
-
-set(CMAKE_BASE_NAME)
-get_filename_component(CMAKE_BASE_NAME "${CMAKE_Fortran_COMPILER}" NAME_WE)
-# since the gnu compiler has several names force g++
-if(CMAKE_COMPILER_IS_GNUG77)
-  set(CMAKE_BASE_NAME g77)
-endif()
-if(CMAKE_Fortran_COMPILER_ID)
-  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_Fortran_COMPILER_ID}-Fortran OPTIONAL RESULT_VARIABLE _INCLUDED_FILE)
-endif()
-if (NOT _INCLUDED_FILE)
-  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_BASE_NAME} OPTIONAL
-          RESULT_VARIABLE _INCLUDED_FILE)
-endif ()
-
-# load any compiler-wrapper specific information
-if (CMAKE_Fortran_COMPILER_WRAPPER)
-  __cmake_include_compiler_wrapper(Fortran)
-endif ()
-
-# We specify the compiler information in the system file for some
-# platforms, but this language may not have been enabled when the file
-# was first included.  Include it again to get the language info.
-# Remove this when all compiler info is removed from system files.
-if (NOT _INCLUDED_FILE)
-  include(Platform/${CMAKE_SYSTEM_NAME} OPTIONAL)
-endif ()
-
-if(CMAKE_Fortran_SIZEOF_DATA_PTR)
-  foreach(f ${CMAKE_Fortran_ABI_FILES})
-    include(${f})
-  endforeach()
-  unset(CMAKE_Fortran_ABI_FILES)
-endif()
-
-# This should be included before the _INIT variables are
-# used to initialize the cache.  Since the rule variables
-# have if blocks on them, users can still define them here.
-# But, it should still be after the platform file so changes can
-# be made to those values.
-
-if(CMAKE_USER_MAKE_RULES_OVERRIDE)
-  # Save the full path of the file so try_compile can use it.
-  include(${CMAKE_USER_MAKE_RULES_OVERRIDE} RESULT_VARIABLE _override)
-  set(CMAKE_USER_MAKE_RULES_OVERRIDE "${_override}")
-endif()
-
-if(CMAKE_USER_MAKE_RULES_OVERRIDE_Fortran)
-  # Save the full path of the file so try_compile can use it.
-  include(${CMAKE_USER_MAKE_RULES_OVERRIDE_Fortran} RESULT_VARIABLE _override)
-  set(CMAKE_USER_MAKE_RULES_OVERRIDE_Fortran "${_override}")
-endif()
-
-if(NOT CMAKE_Fortran_COMPILE_OPTIONS_PIC)
-  set(CMAKE_Fortran_COMPILE_OPTIONS_PIC ${CMAKE_C_COMPILE_OPTIONS_PIC})
-endif()
-
-if(NOT CMAKE_Fortran_COMPILE_OPTIONS_PIE)
-  set(CMAKE_Fortran_COMPILE_OPTIONS_PIE ${CMAKE_C_COMPILE_OPTIONS_PIE})
-endif()
-if(NOT CMAKE_Fortran_LINK_OPTIONS_PIE)
-  set(CMAKE_Fortran_LINK_OPTIONS_PIE ${CMAKE_C_LINK_OPTIONS_PIE})
-endif()
-if(NOT CMAKE_Fortran_LINK_OPTIONS_NO_PIE)
-  set(CMAKE_Fortran_LINK_OPTIONS_NO_PIE ${CMAKE_C_LINK_OPTIONS_NO_PIE})
-endif()
-
-if(NOT CMAKE_Fortran_COMPILE_OPTIONS_DLL)
-  set(CMAKE_Fortran_COMPILE_OPTIONS_DLL ${CMAKE_C_COMPILE_OPTIONS_DLL})
-endif()
-
-# Create a set of shared library variable specific to Fortran
-# For 90% of the systems, these are the same flags as the C versions
-# so if these are not set just copy the flags from the c version
-if(NOT DEFINED CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS)
-  set(CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS})
-endif()
-
-if(NOT DEFINED CMAKE_SHARED_LIBRARY_Fortran_FLAGS)
-  set(CMAKE_SHARED_LIBRARY_Fortran_FLAGS ${CMAKE_SHARED_LIBRARY_C_FLAGS})
-endif()
-
-if(NOT DEFINED CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS)
-  set(CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS ${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS})
-endif()
-
-if(NOT DEFINED CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG)
-  set(CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG})
-endif()
-
-if(NOT DEFINED CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG_SEP)
-  set(CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP})
-endif()
-
-if(NOT DEFINED CMAKE_SHARED_LIBRARY_RPATH_LINK_Fortran_FLAG)
-  set(CMAKE_SHARED_LIBRARY_RPATH_LINK_Fortran_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG})
-endif()
-
-if(NOT DEFINED CMAKE_EXE_EXPORTS_Fortran_FLAG)
-  set(CMAKE_EXE_EXPORTS_Fortran_FLAG ${CMAKE_EXE_EXPORTS_C_FLAG})
-endif()
-
-if(NOT DEFINED CMAKE_SHARED_LIBRARY_SONAME_Fortran_FLAG)
-  set(CMAKE_SHARED_LIBRARY_SONAME_Fortran_FLAG ${CMAKE_SHARED_LIBRARY_SONAME_C_FLAG})
-endif()
-
-# for most systems a module is the same as a shared library
-# so unless the variable CMAKE_MODULE_EXISTS is set just
-# copy the values from the LIBRARY variables
-if(NOT CMAKE_MODULE_EXISTS)
-  set(CMAKE_SHARED_MODULE_Fortran_FLAGS ${CMAKE_SHARED_LIBRARY_Fortran_FLAGS})
-  set(CMAKE_SHARED_MODULE_CREATE_Fortran_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS})
-endif()
-
-# repeat for modules
-if(NOT DEFINED CMAKE_SHARED_MODULE_CREATE_Fortran_FLAGS)
-  set(CMAKE_SHARED_MODULE_CREATE_Fortran_FLAGS ${CMAKE_SHARED_MODULE_CREATE_C_FLAGS})
-endif()
-
-if(NOT DEFINED CMAKE_SHARED_MODULE_Fortran_FLAGS)
-  set(CMAKE_SHARED_MODULE_Fortran_FLAGS ${CMAKE_SHARED_MODULE_C_FLAGS})
-endif()
-
-if(NOT DEFINED CMAKE_EXECUTABLE_RUNTIME_Fortran_FLAG)
-  set(CMAKE_EXECUTABLE_RUNTIME_Fortran_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG})
-endif()
-
-if(NOT DEFINED CMAKE_EXECUTABLE_RUNTIME_Fortran_FLAG_SEP)
-  set(CMAKE_EXECUTABLE_RUNTIME_Fortran_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG_SEP})
-endif()
-
-if(NOT DEFINED CMAKE_EXECUTABLE_RPATH_LINK_Fortran_FLAG)
-  set(CMAKE_EXECUTABLE_RPATH_LINK_Fortran_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_Fortran_FLAG})
-endif()
-
-if(NOT DEFINED CMAKE_SHARED_LIBRARY_LINK_Fortran_WITH_RUNTIME_PATH)
-  set(CMAKE_SHARED_LIBRARY_LINK_Fortran_WITH_RUNTIME_PATH ${CMAKE_SHARED_LIBRARY_LINK_C_WITH_RUNTIME_PATH})
-endif()
-
-if(NOT CMAKE_INCLUDE_FLAG_Fortran)
-  set(CMAKE_INCLUDE_FLAG_Fortran ${CMAKE_INCLUDE_FLAG_C})
-endif()
-
-set(CMAKE_VERBOSE_MAKEFILE FALSE CACHE BOOL "If this value is on, makefiles will be generated without the .SILENT directive, and all commands will be echoed to the console during the make.  This is useful for debugging only. With Visual Studio IDE projects all commands are done without /nologo.")
-
-set(CMAKE_Fortran_FLAGS_INIT "$ENV{FFLAGS} ${CMAKE_Fortran_FLAGS_INIT}")
-
-cmake_initialize_per_config_variable(CMAKE_Fortran_FLAGS "Flags used by the Fortran compiler")
-
-if(NOT CMAKE_Fortran_COMPILER_LAUNCHER AND DEFINED ENV{CMAKE_Fortran_COMPILER_LAUNCHER})
-  set(CMAKE_Fortran_COMPILER_LAUNCHER "$ENV{CMAKE_Fortran_COMPILER_LAUNCHER}"
-    CACHE STRING "Compiler launcher for Fortran.")
-endif()
-
-include(CMakeCommonLanguageInclude)
-
-# now define the following rule variables
-# CMAKE_Fortran_CREATE_SHARED_LIBRARY
-# CMAKE_Fortran_CREATE_SHARED_MODULE
-# CMAKE_Fortran_COMPILE_OBJECT
-# CMAKE_Fortran_LINK_EXECUTABLE
-
-# create a Fortran shared library
-if(NOT CMAKE_Fortran_CREATE_SHARED_LIBRARY)
-  set(CMAKE_Fortran_CREATE_SHARED_LIBRARY
-      "<CMAKE_Fortran_COMPILER> <CMAKE_SHARED_LIBRARY_Fortran_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS> <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
-endif()
-
-# create a Fortran shared module just copy the shared library rule
-if(NOT CMAKE_Fortran_CREATE_SHARED_MODULE)
-  set(CMAKE_Fortran_CREATE_SHARED_MODULE ${CMAKE_Fortran_CREATE_SHARED_LIBRARY})
-endif()
-
-# Create a static archive incrementally for large object file counts.
-# If CMAKE_Fortran_CREATE_STATIC_LIBRARY is set it will override these.
-if(NOT DEFINED CMAKE_Fortran_ARCHIVE_CREATE)
-  set(CMAKE_Fortran_ARCHIVE_CREATE "<CMAKE_AR> qc <TARGET> <LINK_FLAGS> <OBJECTS>")
-endif()
-if(NOT DEFINED CMAKE_Fortran_ARCHIVE_APPEND)
-  set(CMAKE_Fortran_ARCHIVE_APPEND "<CMAKE_AR> q <TARGET> <LINK_FLAGS> <OBJECTS>")
-endif()
-if(NOT DEFINED CMAKE_Fortran_ARCHIVE_FINISH)
-  set(CMAKE_Fortran_ARCHIVE_FINISH "<CMAKE_RANLIB> <TARGET>")
-endif()
-
-# compile a Fortran file into an object file
-# (put -o after -c to workaround bug in at least one mpif77 wrapper)
-if(NOT CMAKE_Fortran_COMPILE_OBJECT)
-  set(CMAKE_Fortran_COMPILE_OBJECT
-    "<CMAKE_Fortran_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -c <SOURCE> -o <OBJECT>")
-endif()
-
-# link a fortran program
-if(NOT CMAKE_Fortran_LINK_EXECUTABLE)
-  set(CMAKE_Fortran_LINK_EXECUTABLE
-    "<CMAKE_Fortran_COMPILER> <CMAKE_Fortran_LINK_FLAGS> <LINK_FLAGS> <FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
-endif()
-
-if(CMAKE_Fortran_STANDARD_LIBRARIES_INIT)
-  set(CMAKE_Fortran_STANDARD_LIBRARIES "${CMAKE_Fortran_STANDARD_LIBRARIES_INIT}"
-    CACHE STRING "Libraries linked by default with all Fortran applications.")
-  mark_as_advanced(CMAKE_Fortran_STANDARD_LIBRARIES)
-endif()
-
-# set this variable so we can avoid loading this more than once.
-set(CMAKE_Fortran_INFORMATION_LOADED 1)
diff --git a/share/cmake-3.18/Modules/CMakeGenericSystem.cmake b/share/cmake-3.18/Modules/CMakeGenericSystem.cmake
deleted file mode 100644
index 000fba1..0000000
--- a/share/cmake-3.18/Modules/CMakeGenericSystem.cmake
+++ /dev/null
@@ -1,181 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-include(CMakeInitializeConfigs)
-
-set(CMAKE_SHARED_LIBRARY_C_FLAGS "")            # -pic
-set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared")       # -shared
-set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")         # +s, flag for exe link to use shared lib
-set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "")       # -rpath
-set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP "")   # : or empty
-set(CMAKE_INCLUDE_FLAG_C "-I")       # -I
-set(CMAKE_LIBRARY_PATH_FLAG "-L")
-set(CMAKE_LIBRARY_PATH_TERMINATOR "")  # for the Digital Mars D compiler the link paths have to be terminated with a "/"
-set(CMAKE_LINK_LIBRARY_FLAG "-l")
-
-set(CMAKE_LINK_LIBRARY_SUFFIX "")
-set(CMAKE_STATIC_LIBRARY_PREFIX "lib")
-set(CMAKE_STATIC_LIBRARY_SUFFIX ".a")
-set(CMAKE_SHARED_LIBRARY_PREFIX "lib")          # lib
-set(CMAKE_SHARED_LIBRARY_SUFFIX ".so")          # .so
-set(CMAKE_EXECUTABLE_SUFFIX "")          # .exe
-set(CMAKE_DL_LIBS "dl")
-
-set(CMAKE_FIND_LIBRARY_PREFIXES "lib")
-set(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".a")
-
-set(CMAKE_AUTOGEN_ORIGIN_DEPENDS ON)
-set(CMAKE_AUTOMOC_COMPILER_PREDEFINES ON)
-set(CMAKE_AUTOMOC_PATH_PREFIX ON)
-set(CMAKE_AUTOMOC_MACRO_NAMES "Q_OBJECT" "Q_GADGET" "Q_NAMESPACE" "Q_NAMESPACE_EXPORT")
-
-# basically all general purpose OSs support shared libs
-set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE)
-
-set (CMAKE_SKIP_RPATH "NO" CACHE BOOL
-     "If set, runtime paths are not added when using shared libraries.")
-set (CMAKE_SKIP_INSTALL_RPATH "NO" CACHE BOOL
-     "If set, runtime paths are not added when installing shared libraries, but are added when building.")
-
-set(CMAKE_VERBOSE_MAKEFILE FALSE CACHE BOOL "If this value is on, makefiles will be generated without the .SILENT directive, and all commands will be echoed to the console during the make.  This is useful for debugging only. With Visual Studio IDE projects all commands are done without /nologo.")
-
-if(CMAKE_GENERATOR MATCHES "Make")
-  set(CMAKE_COLOR_MAKEFILE ON CACHE BOOL
-    "Enable/Disable color output during build."
-    )
-  mark_as_advanced(CMAKE_COLOR_MAKEFILE)
-  if(DEFINED CMAKE_RULE_MESSAGES)
-    set_property(GLOBAL PROPERTY RULE_MESSAGES ${CMAKE_RULE_MESSAGES})
-  endif()
-  if(DEFINED CMAKE_TARGET_MESSAGES)
-    set_property(GLOBAL PROPERTY TARGET_MESSAGES ${CMAKE_TARGET_MESSAGES})
-  endif()
-endif()
-
-if(NOT DEFINED CMAKE_EXPORT_COMPILE_COMMANDS AND CMAKE_GENERATOR MATCHES "Ninja|Unix Makefiles")
-  set(CMAKE_EXPORT_COMPILE_COMMANDS "$ENV{CMAKE_EXPORT_COMPILE_COMMANDS}"
-    CACHE BOOL "Enable/Disable output of compile commands during generation."
-    )
-  mark_as_advanced(CMAKE_EXPORT_COMPILE_COMMANDS)
-endif()
-
-# GetDefaultWindowsPrefixBase
-#
-# Compute the base directory for CMAKE_INSTALL_PREFIX based on:
-#  - is this 32-bit or 64-bit Windows
-#  - is this 32-bit or 64-bit CMake running
-#  - what architecture targets will be built
-#
-function(GetDefaultWindowsPrefixBase var)
-
-  # Try to guess what architecture targets will end up being built as,
-  # even if CMAKE_SIZEOF_VOID_P is not computed yet... We need to know
-  # the architecture of the targets being built to choose the right
-  # default value for CMAKE_INSTALL_PREFIX.
-  #
-  if("${CMAKE_GENERATOR}" MATCHES "(Win64|IA64)")
-    set(arch_hint "x64")
-  elseif("${CMAKE_GENERATOR_PLATFORM}" MATCHES "ARM64")
-    set(arch_hint "ARM64")
-  elseif("${CMAKE_GENERATOR}" MATCHES "ARM")
-    set(arch_hint "ARM")
-  elseif("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
-    set(arch_hint "x64")
-  elseif("$ENV{LIB}" MATCHES "(amd64|ia64)")
-    set(arch_hint "x64")
-  endif()
-
-  if(NOT arch_hint)
-    set(arch_hint "x86")
-  endif()
-
-  # default env in a 64-bit app on Win64:
-  # ProgramFiles=C:\Program Files
-  # ProgramFiles(x86)=C:\Program Files (x86)
-  # ProgramW6432=C:\Program Files
-  #
-  # default env in a 32-bit app on Win64:
-  # ProgramFiles=C:\Program Files (x86)
-  # ProgramFiles(x86)=C:\Program Files (x86)
-  # ProgramW6432=C:\Program Files
-  #
-  # default env in a 32-bit app on Win32:
-  # ProgramFiles=C:\Program Files
-  # ProgramFiles(x86) NOT DEFINED
-  # ProgramW6432 NOT DEFINED
-
-  # By default, use the ProgramFiles env var as the base value of
-  # CMAKE_INSTALL_PREFIX:
-  #
-  set(_PREFIX_ENV_VAR "ProgramFiles")
-
-  if ("$ENV{ProgramW6432}" STREQUAL "")
-    # running on 32-bit Windows
-    # must be a 32-bit CMake, too...
-    #message("guess: this is a 32-bit CMake running on 32-bit Windows")
-  else()
-    # running on 64-bit Windows
-    if ("$ENV{ProgramW6432}" STREQUAL "$ENV{ProgramFiles}")
-      # 64-bit CMake
-      #message("guess: this is a 64-bit CMake running on 64-bit Windows")
-      if(NOT "${arch_hint}" STREQUAL "x64")
-      # building 32-bit targets
-        set(_PREFIX_ENV_VAR "ProgramFiles(x86)")
-      endif()
-    else()
-      # 32-bit CMake
-      #message("guess: this is a 32-bit CMake running on 64-bit Windows")
-      if("${arch_hint}" STREQUAL "x64")
-      # building 64-bit targets
-        set(_PREFIX_ENV_VAR "ProgramW6432")
-      endif()
-    endif()
-  endif()
-
-  #if("${arch_hint}" STREQUAL "x64")
-  #  message("guess: you are building a 64-bit app")
-  #else()
-  #  message("guess: you are building a 32-bit app")
-  #endif()
-
-  if(NOT "$ENV{${_PREFIX_ENV_VAR}}" STREQUAL "")
-    file(TO_CMAKE_PATH "$ENV{${_PREFIX_ENV_VAR}}" _base)
-  elseif(NOT "$ENV{SystemDrive}" STREQUAL "")
-    set(_base "$ENV{SystemDrive}/Program Files")
-  else()
-    set(_base "C:/Program Files")
-  endif()
-
-  set(${var} "${_base}" PARENT_SCOPE)
-endfunction()
-
-
-# Set a variable to indicate whether the value of CMAKE_INSTALL_PREFIX
-# was initialized by the block below.  This is useful for user
-# projects to change the default prefix while still allowing the
-# command line to override it.
-if(NOT DEFINED CMAKE_INSTALL_PREFIX)
-  set(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT 1)
-endif()
-
-# Choose a default install prefix for this platform.
-if(CMAKE_HOST_UNIX)
-  set(CMAKE_INSTALL_PREFIX "/usr/local"
-    CACHE PATH "Install path prefix, prepended onto install directories.")
-else()
-  GetDefaultWindowsPrefixBase(CMAKE_GENERIC_PROGRAM_FILES)
-  set(CMAKE_INSTALL_PREFIX
-    "${CMAKE_GENERIC_PROGRAM_FILES}/${PROJECT_NAME}"
-    CACHE PATH "Install path prefix, prepended onto install directories.")
-  set(CMAKE_GENERIC_PROGRAM_FILES)
-endif()
-
-# Set a variable which will be used as component name in install() commands
-# where no COMPONENT has been given:
-set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "Unspecified")
-
-mark_as_advanced(
-  CMAKE_SKIP_RPATH
-  CMAKE_SKIP_INSTALL_RPATH
-  CMAKE_VERBOSE_MAKEFILE
-)
diff --git a/share/cmake-3.18/Modules/CMakeGraphVizOptions.cmake b/share/cmake-3.18/Modules/CMakeGraphVizOptions.cmake
deleted file mode 100644
index be4a3be..0000000
--- a/share/cmake-3.18/Modules/CMakeGraphVizOptions.cmake
+++ /dev/null
@@ -1,149 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CMakeGraphVizOptions
---------------------
-
-The builtin Graphviz support of CMake.
-
-Generating Graphviz files
-^^^^^^^^^^^^^^^^^^^^^^^^^
-
-CMake can generate `Graphviz <https://www.graphviz.org/>`_ files showing the
-dependencies between the targets in a project, as well as external libraries
-which are linked against.
-
-When running CMake with the ``--graphviz=foo.dot`` option, it produces:
-
-* a ``foo.dot`` file, showing all dependencies in the project
-* a ``foo.dot.<target>`` file for each target, showing on which other targets
-  it depends
-* a ``foo.dot.<target>.dependers`` file for each target, showing which other
-  targets depend on it
-
-Those .dot files can be converted to images using the *dot* command from the
-Graphviz package:
-
-.. code-block:: shell
-
-  dot -Tpng -o foo.png foo.dot
-
-The different dependency types ``PUBLIC``, ``INTERFACE`` and ``PRIVATE``
-are represented as solid, dashed and dotted edges.
-
-Variables specific to the Graphviz support
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The resulting graphs can be huge.  The look and content of the generated graphs
-can be controlled using the file ``CMakeGraphVizOptions.cmake``.  This file is
-first searched in :variable:`CMAKE_BINARY_DIR`, and then in
-:variable:`CMAKE_SOURCE_DIR`.  If found, the variables set in it are used to
-adjust options for the generated Graphviz files.
-
-.. variable:: GRAPHVIZ_GRAPH_NAME
-
- The graph name.
-
- * Mandatory: NO
- * Default: value of :variable:`CMAKE_PROJECT_NAME`
-
-.. variable:: GRAPHVIZ_GRAPH_HEADER
-
- The header written at the top of the Graphviz files.
-
- * Mandatory: NO
- * Default: "node [ fontsize = "12" ];"
-
-.. variable:: GRAPHVIZ_NODE_PREFIX
-
- The prefix for each node in the Graphviz files.
-
- * Mandatory: NO
- * Default: "node"
-
-.. variable:: GRAPHVIZ_EXECUTABLES
-
- Set to FALSE to exclude executables from the generated graphs.
-
- * Mandatory: NO
- * Default: TRUE
-
-.. variable:: GRAPHVIZ_STATIC_LIBS
-
- Set to FALSE to exclude static libraries from the generated graphs.
-
- * Mandatory: NO
- * Default: TRUE
-
-.. variable:: GRAPHVIZ_SHARED_LIBS
-
- Set to FALSE to exclude shared libraries from the generated graphs.
-
- * Mandatory: NO
- * Default: TRUE
-
-.. variable:: GRAPHVIZ_MODULE_LIBS
-
- Set to FALSE to exclude module libraries from the generated graphs.
-
- * Mandatory: NO
- * Default: TRUE
-
-.. variable:: GRAPHVIZ_INTERFACE_LIBS
-
- Set to FALSE to exclude interface libraries from the generated graphs.
-
- * Mandatory: NO
- * Default: TRUE
-
-.. variable:: GRAPHVIZ_OBJECT_LIBS
-
- Set to FALSE to exclude object libraries from the generated graphs.
-
- * Mandatory: NO
- * Default: TRUE
-
-.. variable:: GRAPHVIZ_UNKNOWN_LIBS
-
- Set to FALSE to exclude unknown libraries from the generated graphs.
-
- * Mandatory: NO
- * Default: TRUE
-
-.. variable:: GRAPHVIZ_EXTERNAL_LIBS
-
- Set to FALSE to exclude external libraries from the generated graphs.
-
- * Mandatory: NO
- * Default: TRUE
-
-.. variable:: GRAPHVIZ_CUSTOM_TARGETS
-
- Set to TRUE to include custom targets in the generated graphs.
-
- * Mandatory: NO
- * Default: FALSE
-
-.. variable:: GRAPHVIZ_IGNORE_TARGETS
-
- A list of regular expressions for names of targets to exclude from the
- generated graphs.
-
- * Mandatory: NO
- * Default: empty
-
-.. variable:: GRAPHVIZ_GENERATE_PER_TARGET
-
- Set to FALSE to not generate per-target graphs ``foo.dot.<target>``.
-
- * Mandatory: NO
- * Default: TRUE
-
-.. variable:: GRAPHVIZ_GENERATE_DEPENDERS
-
- Set to FALSE to not generate depender graphs ``foo.dot.<target>.dependers``.
-
- * Mandatory: NO
- * Default: TRUE
-#]=======================================================================]
diff --git a/share/cmake-3.18/Modules/CMakeIOSInstallCombined.cmake b/share/cmake-3.18/Modules/CMakeIOSInstallCombined.cmake
deleted file mode 100644
index 418bafd..0000000
--- a/share/cmake-3.18/Modules/CMakeIOSInstallCombined.cmake
+++ /dev/null
@@ -1,312 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-cmake_policy(PUSH)
-cmake_policy(SET CMP0057 NEW) # if IN_LIST
-
-# Function to print messages of this module
-function(_ios_install_combined_message)
-  message("[iOS combined] " ${ARGN})
-endfunction()
-
-# Get build settings for the current target/config/SDK by running
-# `xcodebuild -sdk ... -showBuildSettings` and parsing it's output
-function(_ios_install_combined_get_build_setting sdk variable resultvar)
-  if("${sdk}" STREQUAL "")
-    message(FATAL_ERROR "`sdk` is empty")
-  endif()
-
-  if("${variable}" STREQUAL "")
-    message(FATAL_ERROR "`variable` is empty")
-  endif()
-
-  if("${resultvar}" STREQUAL "")
-    message(FATAL_ERROR "`resultvar` is empty")
-  endif()
-
-  set(
-      cmd
-      xcodebuild -showBuildSettings
-      -sdk "${sdk}"
-      -target "${CURRENT_TARGET}"
-      -config "${CURRENT_CONFIG}"
-  )
-
-  execute_process(
-      COMMAND ${cmd}
-      WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
-      RESULT_VARIABLE result
-      OUTPUT_VARIABLE output
-  )
-
-  if(NOT result EQUAL 0)
-    message(FATAL_ERROR "Command failed (${result}): ${cmd}")
-  endif()
-
-  if(NOT output MATCHES " ${variable} = ([^\n]*)")
-    if("${variable}" STREQUAL "VALID_ARCHS")
-      # VALID_ARCHS may be unset by user for given SDK
-      # (e.g. for build without simulator).
-      set("${resultvar}" "" PARENT_SCOPE)
-      return()
-    else()
-      message(FATAL_ERROR "${variable} not found.")
-    endif()
-  endif()
-
-  set("${resultvar}" "${CMAKE_MATCH_1}" PARENT_SCOPE)
-endfunction()
-
-# Get architectures of given SDK (iphonesimulator/iphoneos)
-function(_ios_install_combined_get_valid_archs sdk resultvar)
-  cmake_policy(PUSH)
-  cmake_policy(SET CMP0007 NEW)
-
-  if("${resultvar}" STREQUAL "")
-    message(FATAL_ERROR "`resultvar` is empty")
-  endif()
-
-  _ios_install_combined_get_build_setting("${sdk}" "VALID_ARCHS" valid_archs)
-
-  separate_arguments(valid_archs)
-  list(REMOVE_ITEM valid_archs "") # remove empty elements
-  list(REMOVE_DUPLICATES valid_archs)
-
-  string(REPLACE ";" " " printable "${valid_archs}")
-  _ios_install_combined_message("Architectures (${sdk}): ${printable}")
-
-  set("${resultvar}" "${valid_archs}" PARENT_SCOPE)
-
-  cmake_policy(POP)
-endfunction()
-
-# Final target can contain more architectures that specified by SDK. This
-# function will run 'lipo -info' and parse output. Result will be returned
-# as a CMake list.
-function(_ios_install_combined_get_real_archs filename resultvar)
-  set(cmd "${_lipo_path}" -info "${filename}")
-  execute_process(
-      COMMAND ${cmd}
-      RESULT_VARIABLE result
-      OUTPUT_VARIABLE output
-      ERROR_VARIABLE output
-      OUTPUT_STRIP_TRAILING_WHITESPACE
-      ERROR_STRIP_TRAILING_WHITESPACE
-  )
-  if(NOT result EQUAL 0)
-    message(
-        FATAL_ERROR "Command failed (${result}): ${cmd}\n\nOutput:\n${output}"
-    )
-  endif()
-
-  if(NOT output MATCHES "(Architectures in the fat file: [^\n]+ are|Non-fat file: [^\n]+ is architecture): ([^\n]*)")
-    message(FATAL_ERROR "Could not detect architecture from: ${output}")
-  endif()
-
-  separate_arguments(CMAKE_MATCH_2)
-  set(${resultvar} ${CMAKE_MATCH_2} PARENT_SCOPE)
-endfunction()
-
-# Run build command for the given SDK
-function(_ios_install_combined_build sdk)
-  if("${sdk}" STREQUAL "")
-    message(FATAL_ERROR "`sdk` is empty")
-  endif()
-
-  _ios_install_combined_message("Build `${CURRENT_TARGET}` for `${sdk}`")
-
-  execute_process(
-      COMMAND
-      "${CMAKE_COMMAND}"
-      --build
-      .
-      --target "${CURRENT_TARGET}"
-      --config ${CURRENT_CONFIG}
-      --
-      -sdk "${sdk}"
-      WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
-      RESULT_VARIABLE result
-  )
-
-  if(NOT result EQUAL 0)
-    message(FATAL_ERROR "Build failed")
-  endif()
-endfunction()
-
-# Remove given architecture from file. This step needed only in rare cases
-# when target was built in "unusual" way. Emit warning message.
-function(_ios_install_combined_remove_arch lib arch)
-  _ios_install_combined_message(
-    "Warning! Unexpected architecture `${arch}` detected and will be removed "
-    "from file `${lib}`")
-  set(cmd "${_lipo_path}" -remove ${arch} -output ${lib} ${lib})
-  execute_process(
-      COMMAND ${cmd}
-      RESULT_VARIABLE result
-      OUTPUT_VARIABLE output
-      ERROR_VARIABLE output
-      OUTPUT_STRIP_TRAILING_WHITESPACE
-      ERROR_STRIP_TRAILING_WHITESPACE
-  )
-  if(NOT result EQUAL 0)
-    message(
-        FATAL_ERROR "Command failed (${result}): ${cmd}\n\nOutput:\n${output}"
-    )
-  endif()
-endfunction()
-
-# Check that 'lib' contains only 'archs' architectures (remove others).
-function(_ios_install_combined_keep_archs lib archs)
-  _ios_install_combined_get_real_archs("${lib}" real_archs)
-  set(archs_to_remove ${real_archs})
-  list(REMOVE_ITEM archs_to_remove ${archs})
-  foreach(x ${archs_to_remove})
-    _ios_install_combined_remove_arch("${lib}" "${x}")
-  endforeach()
-endfunction()
-
-function(_ios_install_combined_detect_sdks this_sdk_var corr_sdk_var)
-  set(this_sdk "$ENV{PLATFORM_NAME}")
-  if("${this_sdk}" STREQUAL "")
-    message(FATAL_ERROR "Environment variable PLATFORM_NAME is empty")
-  endif()
-
-  set(all_platforms "$ENV{SUPPORTED_PLATFORMS}")
-  if("${all_platforms}" STREQUAL "")
-    message(FATAL_ERROR "Environment variable SUPPORTED_PLATFORMS is empty")
-  endif()
-
-  separate_arguments(all_platforms)
-  if(NOT this_sdk IN_LIST all_platforms)
-    message(FATAL_ERROR "`${this_sdk}` not found in `${all_platforms}`")
-  endif()
-
-  list(REMOVE_ITEM all_platforms "" "${this_sdk}")
-  list(LENGTH all_platforms all_platforms_length)
-  if(NOT all_platforms_length EQUAL 1)
-    message(FATAL_ERROR "Expected one element: ${all_platforms}")
-  endif()
-
-  set(${this_sdk_var} "${this_sdk}" PARENT_SCOPE)
-  set(${corr_sdk_var} "${all_platforms}" PARENT_SCOPE)
-endfunction()
-
-# Create combined binary for the given target.
-#
-# Preconditions:
-#  * Target already installed at ${destination}
-#    for the ${PLATFORM_NAME} platform
-#
-# This function will:
-#  * Run build for the lacking platform, i.e. opposite to the ${PLATFORM_NAME}
-#  * Fuse both libraries by running lipo
-function(ios_install_combined target destination)
-  if("${target}" STREQUAL "")
-    message(FATAL_ERROR "`target` is empty")
-  endif()
-
-  if("${destination}" STREQUAL "")
-    message(FATAL_ERROR "`destination` is empty")
-  endif()
-
-  if(NOT IS_ABSOLUTE "${destination}")
-    message(FATAL_ERROR "`destination` is not absolute: ${destination}")
-  endif()
-
-  if(IS_DIRECTORY "${destination}" OR IS_SYMLINK "${destination}")
-    message(FATAL_ERROR "`destination` is no regular file: ${destination}")
-  endif()
-
-  if("${CMAKE_BINARY_DIR}" STREQUAL "")
-    message(FATAL_ERROR "`CMAKE_BINARY_DIR` is empty")
-  endif()
-
-  if(NOT IS_DIRECTORY "${CMAKE_BINARY_DIR}")
-    message(FATAL_ERROR "Is not a directory: ${CMAKE_BINARY_DIR}")
-  endif()
-
-  if("${CMAKE_INSTALL_CONFIG_NAME}" STREQUAL "")
-    message(FATAL_ERROR "CMAKE_INSTALL_CONFIG_NAME is empty")
-  endif()
-
-  set(cmd xcrun -f lipo)
-
-  # Do not merge OUTPUT_VARIABLE and ERROR_VARIABLE since latter may contain
-  # some diagnostic information even for the successful run.
-  execute_process(
-      COMMAND ${cmd}
-      RESULT_VARIABLE result
-      OUTPUT_VARIABLE output
-      ERROR_VARIABLE error_output
-      OUTPUT_STRIP_TRAILING_WHITESPACE
-      ERROR_STRIP_TRAILING_WHITESPACE
-  )
-  if(NOT result EQUAL 0)
-    message(
-        FATAL_ERROR "Command failed (${result}): ${cmd}\n\nOutput:\n${output}\nOutput(error):\n${error_output}"
-    )
-  endif()
-  set(_lipo_path ${output})
-  list(LENGTH _lipo_path len)
-  if(NOT len EQUAL 1)
-    message(FATAL_ERROR "Unexpected xcrun output: ${_lipo_path}")
-  endif()
-  if(NOT EXISTS "${_lipo_path}")
-    message(FATAL_ERROR "File not found: ${_lipo_path}")
-  endif()
-
-  set(CURRENT_CONFIG "${CMAKE_INSTALL_CONFIG_NAME}")
-  set(CURRENT_TARGET "${target}")
-
-  _ios_install_combined_message("Target: ${CURRENT_TARGET}")
-  _ios_install_combined_message("Config: ${CURRENT_CONFIG}")
-  _ios_install_combined_message("Destination: ${destination}")
-
-  # Get SDKs
-  _ios_install_combined_detect_sdks(this_sdk corr_sdk)
-
-  # Get architectures of the target
-  _ios_install_combined_get_valid_archs("${corr_sdk}" corr_valid_archs)
-  _ios_install_combined_get_valid_archs("${this_sdk}" this_valid_archs)
-
-  # Return if there are no valid architectures for the SDK.
-  # (note that library already installed)
-  if("${corr_valid_archs}" STREQUAL "")
-    _ios_install_combined_message(
-        "No architectures detected for `${corr_sdk}` (skip)"
-    )
-    return()
-  endif()
-
-  # Trigger build of corresponding target
-  _ios_install_combined_build("${corr_sdk}")
-
-  # Get location of the library in build directory
-  _ios_install_combined_get_build_setting(
-    "${corr_sdk}" "CONFIGURATION_BUILD_DIR" corr_build_dir)
-  _ios_install_combined_get_build_setting(
-    "${corr_sdk}" "EXECUTABLE_PATH" corr_executable_path)
-  set(corr "${corr_build_dir}/${corr_executable_path}")
-
-  _ios_install_combined_keep_archs("${corr}" "${corr_valid_archs}")
-  _ios_install_combined_keep_archs("${destination}" "${this_valid_archs}")
-
-  _ios_install_combined_message("Current: ${destination}")
-  _ios_install_combined_message("Corresponding: ${corr}")
-
-  set(cmd "${_lipo_path}" -create ${corr} ${destination} -output ${destination})
-
-  execute_process(
-      COMMAND ${cmd}
-      WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
-      RESULT_VARIABLE result
-  )
-
-  if(NOT result EQUAL 0)
-    message(FATAL_ERROR "Command failed: ${cmd}")
-  endif()
-
-  _ios_install_combined_message("Install done: ${destination}")
-endfunction()
-
-cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/CMakeOBJCCompiler.cmake.in b/share/cmake-3.18/Modules/CMakeOBJCCompiler.cmake.in
deleted file mode 100644
index 1555517..0000000
--- a/share/cmake-3.18/Modules/CMakeOBJCCompiler.cmake.in
+++ /dev/null
@@ -1,69 +0,0 @@
-set(CMAKE_OBJC_COMPILER "@CMAKE_OBJC_COMPILER@")
-set(CMAKE_OBJC_COMPILER_ARG1 "@CMAKE_OBJC_COMPILER_ARG1@")
-set(CMAKE_OBJC_COMPILER_ID "@CMAKE_OBJC_COMPILER_ID@")
-set(CMAKE_OBJC_COMPILER_VERSION "@CMAKE_OBJC_COMPILER_VERSION@")
-set(CMAKE_OBJC_COMPILER_VERSION_INTERNAL "@CMAKE_OBJC_COMPILER_VERSION_INTERNAL@")
-set(CMAKE_OBJC_COMPILER_WRAPPER "@CMAKE_OBJC_COMPILER_WRAPPER@")
-set(CMAKE_OBJC_STANDARD_COMPUTED_DEFAULT "@CMAKE_OBJC_STANDARD_COMPUTED_DEFAULT@")
-set(CMAKE_OBJC_COMPILE_FEATURES "@CMAKE_OBJC_COMPILE_FEATURES@")
-set(CMAKE_OBJC90_COMPILE_FEATURES "@CMAKE_OBJC90_COMPILE_FEATURES@")
-set(CMAKE_OBJC99_COMPILE_FEATURES "@CMAKE_OBJC99_COMPILE_FEATURES@")
-set(CMAKE_OBJC11_COMPILE_FEATURES "@CMAKE_OBJC11_COMPILE_FEATURES@")
-
-set(CMAKE_OBJC_PLATFORM_ID "@CMAKE_OBJC_PLATFORM_ID@")
-set(CMAKE_OBJC_SIMULATE_ID "@CMAKE_OBJC_SIMULATE_ID@")
-set(CMAKE_OBJC_COMPILER_FRONTEND_VARIANT "@CMAKE_OBJC_COMPILER_FRONTEND_VARIANT@")
-set(CMAKE_OBJC_SIMULATE_VERSION "@CMAKE_OBJC_SIMULATE_VERSION@")
-@_SET_CMAKE_OBJC_COMPILER_ARCHITECTURE_ID@
-@SET_CMAKE_XCODE_ARCHS@
-set(CMAKE_AR "@CMAKE_AR@")
-set(CMAKE_OBJC_COMPILER_AR "@CMAKE_OBJC_COMPILER_AR@")
-set(CMAKE_RANLIB "@CMAKE_RANLIB@")
-set(CMAKE_OBJC_COMPILER_RANLIB "@CMAKE_OBJC_COMPILER_RANLIB@")
-set(CMAKE_LINKER "@CMAKE_LINKER@")
-set(CMAKE_MT "@CMAKE_MT@")
-set(CMAKE_COMPILER_IS_GNUOBJC @CMAKE_COMPILER_IS_GNUOBJC@)
-set(CMAKE_OBJC_COMPILER_LOADED 1)
-set(CMAKE_OBJC_COMPILER_WORKS @CMAKE_OBJC_COMPILER_WORKS@)
-set(CMAKE_OBJC_ABI_COMPILED @CMAKE_OBJC_ABI_COMPILED@)
-
-set(CMAKE_OBJC_COMPILER_ENV_VAR "OBJC")
-
-set(CMAKE_OBJC_COMPILER_ID_RUN 1)
-set(CMAKE_OBJC_SOURCE_FILE_EXTENSIONS m)
-set(CMAKE_OBJC_IGNORE_EXTENSIONS h;H;o;O)
-set(CMAKE_OBJC_LINKER_PREFERENCE 5)
-
-foreach (lang C CXX OBJCXX)
-  foreach(extension IN LISTS CMAKE_OBJC_SOURCE_FILE_EXTENSIONS)
-    if (CMAKE_${lang}_COMPILER_ID_RUN)
-      list(REMOVE_ITEM CMAKE_${lang}_SOURCE_FILE_EXTENSIONS ${extension})
-    endif()
-  endforeach()
-endforeach()
-
-# Save compiler ABI information.
-set(CMAKE_OBJC_SIZEOF_DATA_PTR "@CMAKE_OBJC_SIZEOF_DATA_PTR@")
-set(CMAKE_OBJC_COMPILER_ABI "@CMAKE_OBJC_COMPILER_ABI@")
-set(CMAKE_OBJC_LIBRARY_ARCHITECTURE "@CMAKE_OBJC_LIBRARY_ARCHITECTURE@")
-
-if(CMAKE_OBJC_SIZEOF_DATA_PTR)
-  set(CMAKE_SIZEOF_VOID_P "${CMAKE_OBJC_SIZEOF_DATA_PTR}")
-endif()
-
-if(CMAKE_OBJC_COMPILER_ABI)
-  set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_OBJC_COMPILER_ABI}")
-endif()
-
-if(CMAKE_OBJC_LIBRARY_ARCHITECTURE)
-  set(CMAKE_LIBRARY_ARCHITECTURE "@CMAKE_OBJC_LIBRARY_ARCHITECTURE@")
-endif()
-
-@CMAKE_OBJC_COMPILER_CUSTOM_CODE@
-@CMAKE_OBJC_SYSROOT_FLAG_CODE@
-@CMAKE_OBJC_OSX_DEPLOYMENT_TARGET_FLAG_CODE@
-
-set(CMAKE_OBJC_IMPLICIT_INCLUDE_DIRECTORIES "@CMAKE_OBJC_IMPLICIT_INCLUDE_DIRECTORIES@")
-set(CMAKE_OBJC_IMPLICIT_LINK_LIBRARIES "@CMAKE_OBJC_IMPLICIT_LINK_LIBRARIES@")
-set(CMAKE_OBJC_IMPLICIT_LINK_DIRECTORIES "@CMAKE_OBJC_IMPLICIT_LINK_DIRECTORIES@")
-set(CMAKE_OBJC_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "@CMAKE_OBJC_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES@")
diff --git a/share/cmake-3.18/Modules/CMakeOBJCCompilerABI.m b/share/cmake-3.18/Modules/CMakeOBJCCompilerABI.m
deleted file mode 100644
index 8fa8511..0000000
--- a/share/cmake-3.18/Modules/CMakeOBJCCompilerABI.m
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifdef __cplusplus
-# error "A C++ compiler has been selected for Objective-C."
-#endif
-
-/*--------------------------------------------------------------------------*/
-
-#include "CMakeCompilerABI.h"
-
-/*--------------------------------------------------------------------------*/
-
-int main(int argc, char *argv[])
-{
-  int require = 0;
-  require += info_sizeof_dptr[argc];
-#if defined(ABI_ID)
-  require += info_abi[argc];
-#endif
-  (void)argv;
-  return require;
-}
diff --git a/share/cmake-3.18/Modules/CMakeOBJCCompilerId.m.in b/share/cmake-3.18/Modules/CMakeOBJCCompilerId.m.in
deleted file mode 100644
index 2b8aa30..0000000
--- a/share/cmake-3.18/Modules/CMakeOBJCCompilerId.m.in
+++ /dev/null
@@ -1,63 +0,0 @@
-#ifdef __cplusplus
-# error "An Objective-C++ compiler has been selected for Objective-C."
-#endif
-
-@CMAKE_OBJC_COMPILER_ID_CONTENT@
-
-/* Construct the string literal in pieces to prevent the source from
-   getting matched.  Store it in a pointer rather than an array
-   because some compilers will just produce instructions to fill the
-   array rather than assigning a pointer to a static array.  */
-char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
-#ifdef SIMULATE_ID
-char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
-#endif
-
-#ifdef __QNXNTO__
-char const* qnxnto = "INFO" ":" "qnxnto[]";
-#endif
-
-@CMAKE_OBJC_COMPILER_ID_PLATFORM_CONTENT@
-@CMAKE_OBJC_COMPILER_ID_ERROR_FOR_TEST@
-
-#if !defined(__STDC__)
-# if (defined(_MSC_VER) && !defined(__clang__)) \
-  || (defined(__ibmxl__) || defined(__IBMC__))
-#  define C_DIALECT "90"
-# else
-#  define C_DIALECT
-# endif
-#elif __STDC_VERSION__ >= 201000L
-# define C_DIALECT "11"
-#elif __STDC_VERSION__ >= 199901L
-# define C_DIALECT "99"
-#else
-# define C_DIALECT "90"
-#endif
-const char* info_language_dialect_default =
-  "INFO" ":" "dialect_default[" C_DIALECT "]";
-
-/*--------------------------------------------------------------------------*/
-
-int main(int argc, char* argv[])
-{
-  int require = 0;
-  require += info_compiler[argc];
-  require += info_platform[argc];
-  require += info_arch[argc];
-#ifdef COMPILER_VERSION_MAJOR
-  require += info_version[argc];
-#endif
-#ifdef COMPILER_VERSION_INTERNAL
-  require += info_version_internal[argc];
-#endif
-#ifdef SIMULATE_ID
-  require += info_simulate[argc];
-#endif
-#ifdef SIMULATE_VERSION_MAJOR
-  require += info_simulate_version[argc];
-#endif
-  require += info_language_dialect_default[argc];
-  (void)argv;
-  return require;
-}
diff --git a/share/cmake-3.18/Modules/CMakeOBJCInformation.cmake b/share/cmake-3.18/Modules/CMakeOBJCInformation.cmake
deleted file mode 100644
index b3da82d..0000000
--- a/share/cmake-3.18/Modules/CMakeOBJCInformation.cmake
+++ /dev/null
@@ -1,193 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# This file sets the basic flags for the Objective-C language in CMake.
-# It also loads the available platform file for the system-compiler
-# if it exists.
-# It also loads a system - compiler - processor (or target hardware)
-# specific file, which is mainly useful for crosscompiling and embedded systems.
-
-include(CMakeLanguageInformation)
-
-# some compilers use different extensions (e.g. sdcc uses .rel)
-# so set the extension here first so it can be overridden by the compiler specific file
-set(CMAKE_OBJC_OUTPUT_EXTENSION .o)
-
-if(NOT CMAKE_INCLUDE_FLAG_OBJC)
-  set(CMAKE_INCLUDE_FLAG_OBJC ${CMAKE_INCLUDE_FLAG_C})
-endif()
-
-set(_INCLUDED_FILE 0)
-
-# Load compiler-specific information.
-if(CMAKE_OBJC_COMPILER_ID)
-  include(Compiler/${CMAKE_OBJC_COMPILER_ID}-OBJC OPTIONAL)
-endif()
-
-set(CMAKE_BASE_NAME)
-get_filename_component(CMAKE_BASE_NAME "${CMAKE_OBJC_COMPILER}" NAME_WE)
-if(CMAKE_COMPILER_IS_GNUOBJC)
-  set(CMAKE_BASE_NAME gcc)
-endif()
-
-
-# load a hardware specific file, mostly useful for embedded compilers
-if(CMAKE_SYSTEM_PROCESSOR)
-  if(CMAKE_OBJC_COMPILER_ID)
-    include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_OBJC_COMPILER_ID}-OBJC-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL RESULT_VARIABLE _INCLUDED_FILE)
-  endif()
-  if (NOT _INCLUDED_FILE)
-    include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_BASE_NAME}-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL)
-  endif ()
-endif()
-
-
-# load the system- and compiler specific files
-if(CMAKE_OBJC_COMPILER_ID)
-  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_OBJC_COMPILER_ID}-OBJC
-    OPTIONAL RESULT_VARIABLE _INCLUDED_FILE)
-endif()
-if (NOT _INCLUDED_FILE)
-  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_BASE_NAME}
-    OPTIONAL RESULT_VARIABLE _INCLUDED_FILE)
-endif ()
-
-# load any compiler-wrapper specific information
-if (CMAKE_OBJC_COMPILER_WRAPPER)
-  __cmake_include_compiler_wrapper(OBJC)
-endif ()
-
-# We specify the compiler information in the system file for some
-# platforms, but this language may not have been enabled when the file
-# was first included.  Include it again to get the language info.
-# Remove this when all compiler info is removed from system files.
-if (NOT _INCLUDED_FILE)
-  include(Platform/${CMAKE_SYSTEM_NAME} OPTIONAL)
-endif ()
-
-if(CMAKE_OBJC_SIZEOF_DATA_PTR)
-  foreach(f ${CMAKE_OBJC_ABI_FILES})
-    include(${f})
-  endforeach()
-  unset(CMAKE_OBJC_ABI_FILES)
-endif()
-
-# This should be included before the _INIT variables are
-# used to initialize the cache.  Since the rule variables
-# have if blocks on them, users can still define them here.
-# But, it should still be after the platform file so changes can
-# be made to those values.
-
-if(CMAKE_USER_MAKE_RULES_OVERRIDE)
-  # Save the full path of the file so try_compile can use it.
-  include(${CMAKE_USER_MAKE_RULES_OVERRIDE} RESULT_VARIABLE _override)
-  set(CMAKE_USER_MAKE_RULES_OVERRIDE "${_override}")
-endif()
-
-if(CMAKE_USER_MAKE_RULES_OVERRIDE_OBJC)
-  # Save the full path of the file so try_compile can use it.
-  include(${CMAKE_USER_MAKE_RULES_OVERRIDE_OBJC} RESULT_VARIABLE _override)
-  set(CMAKE_USER_MAKE_RULES_OVERRIDE_OBJC "${_override}")
-endif()
-
-
-# for most systems a module is the same as a shared library
-# so unless the variable CMAKE_MODULE_EXISTS is set just
-# copy the values from the LIBRARY variables
-if(NOT CMAKE_MODULE_EXISTS)
-  set(CMAKE_SHARED_MODULE_OBJC_FLAGS ${CMAKE_SHARED_LIBRARY_OBJC_FLAGS})
-  set(CMAKE_SHARED_MODULE_CREATE_OBJC_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_OBJC_FLAGS})
-endif()
-
-set(CMAKE_OBJC_FLAGS_INIT "$ENV{OBJCFLAGS} ${CMAKE_OBJC_FLAGS_INIT}")
-
-cmake_initialize_per_config_variable(CMAKE_OBJC_FLAGS "Flags used by the Objective-C compiler")
-
-if(CMAKE_OBJC_STANDARD_LIBRARIES_INIT)
-  set(CMAKE_OBJC_STANDARD_LIBRARIES "${CMAKE_OBJC_STANDARD_LIBRARIES_INIT}"
-    CACHE STRING "Libraries linked by default with all Objective-C applications.")
-  mark_as_advanced(CMAKE_OBJC_STANDARD_LIBRARIES)
-endif()
-
-if(NOT CMAKE_OBJC_COMPILER_LAUNCHER AND DEFINED ENV{CMAKE_OBJC_COMPILER_LAUNCHER})
-  set(CMAKE_OBJC_COMPILER_LAUNCHER "$ENV{CMAKE_OBJC_COMPILER_LAUNCHER}"
-    CACHE STRING "Compiler launcher for OBJC.")
-endif()
-
-include(CMakeCommonLanguageInclude)
-
-# now define the following rule variables
-
-# CMAKE_OBJC_CREATE_SHARED_LIBRARY
-# CMAKE_OBJC_CREATE_SHARED_MODULE
-# CMAKE_OBJC_COMPILE_OBJECT
-# CMAKE_OBJC_LINK_EXECUTABLE
-
-# variables supplied by the generator at use time
-# <TARGET>
-# <TARGET_BASE> the target without the suffix
-# <OBJECTS>
-# <OBJECT>
-# <LINK_LIBRARIES>
-# <FLAGS>
-# <LINK_FLAGS>
-
-# Objective-C compiler information
-# <CMAKE_OBJC_COMPILER>
-# <CMAKE_SHARED_LIBRARY_CREATE_OBJC_FLAGS>
-# <CMAKE_SHARED_MODULE_CREATE_OBJC_FLAGS>
-# <CMAKE_OBJC_LINK_FLAGS>
-
-# Static library tools
-# <CMAKE_AR>
-# <CMAKE_RANLIB>
-
-
-# create an Objective-C shared library
-if(NOT CMAKE_OBJC_CREATE_SHARED_LIBRARY)
-  set(CMAKE_OBJC_CREATE_SHARED_LIBRARY
-      "<CMAKE_OBJC_COMPILER> <CMAKE_SHARED_LIBRARY_OBJC_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_OBJC_FLAGS> <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
-endif()
-
-# create an Objective-C shared module just copy the shared library rule
-if(NOT CMAKE_OBJC_CREATE_SHARED_MODULE)
-  set(CMAKE_OBJC_CREATE_SHARED_MODULE ${CMAKE_OBJC_CREATE_SHARED_LIBRARY})
-endif()
-
-# Create an static archive incrementally for large object file counts.
-# If CMAKE_OBJC_CREATE_STATIC_LIBRARY is set it will override these.
-if(NOT DEFINED CMAKE_OBJC_ARCHIVE_CREATE)
-  set(CMAKE_OBJC_ARCHIVE_CREATE "<CMAKE_AR> qc <TARGET> <LINK_FLAGS> <OBJECTS>")
-endif()
-if(NOT DEFINED CMAKE_OBJC_ARCHIVE_APPEND)
-  set(CMAKE_OBJC_ARCHIVE_APPEND "<CMAKE_AR> q <TARGET> <LINK_FLAGS> <OBJECTS>")
-endif()
-if(NOT DEFINED CMAKE_OBJC_ARCHIVE_FINISH)
-  set(CMAKE_OBJC_ARCHIVE_FINISH "<CMAKE_RANLIB> <TARGET>")
-endif()
-
-# compile an Objective-C file into an object file
-if(NOT CMAKE_OBJC_COMPILE_OBJECT)
-  set(CMAKE_OBJC_COMPILE_OBJECT
-    "<CMAKE_OBJC_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -x objective-c -o <OBJECT> -c <SOURCE>")
-endif()
-
-if(NOT CMAKE_OBJC_LINK_EXECUTABLE)
-  set(CMAKE_OBJC_LINK_EXECUTABLE
-    "<CMAKE_OBJC_COMPILER> <FLAGS> <CMAKE_OBJC_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
-endif()
-
-if(NOT CMAKE_EXECUTABLE_RUNTIME_OBJC_FLAG)
-  set(CMAKE_EXECUTABLE_RUNTIME_OBJC_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_OBJC_FLAG})
-endif()
-
-if(NOT CMAKE_EXECUTABLE_RUNTIME_OBJC_FLAG_SEP)
-  set(CMAKE_EXECUTABLE_RUNTIME_OBJC_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_OBJC_FLAG_SEP})
-endif()
-
-if(NOT CMAKE_EXECUTABLE_RPATH_LINK_OBJC_FLAG)
-  set(CMAKE_EXECUTABLE_RPATH_LINK_OBJC_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_OBJC_FLAG})
-endif()
-
-set(CMAKE_OBJC_INFORMATION_LOADED 1)
diff --git a/share/cmake-3.18/Modules/CMakeOBJCXXCompiler.cmake.in b/share/cmake-3.18/Modules/CMakeOBJCXXCompiler.cmake.in
deleted file mode 100644
index b6452c4..0000000
--- a/share/cmake-3.18/Modules/CMakeOBJCXXCompiler.cmake.in
+++ /dev/null
@@ -1,79 +0,0 @@
-set(CMAKE_OBJCXX_COMPILER "@CMAKE_OBJCXX_COMPILER@")
-set(CMAKE_OBJCXX_COMPILER_ARG1 "@CMAKE_OBJCXX_COMPILER_ARG1@")
-set(CMAKE_OBJCXX_COMPILER_ID "@CMAKE_OBJCXX_COMPILER_ID@")
-set(CMAKE_OBJCXX_COMPILER_VERSION "@CMAKE_OBJCXX_COMPILER_VERSION@")
-set(CMAKE_OBJCXX_COMPILER_VERSION_INTERNAL "@CMAKE_OBJCXX_COMPILER_VERSION_INTERNAL@")
-set(CMAKE_OBJCXX_COMPILER_WRAPPER "@CMAKE_OBJCXX_COMPILER_WRAPPER@")
-set(CMAKE_OBJCXX_STANDARD_COMPUTED_DEFAULT "@CMAKE_OBJCXX_STANDARD_COMPUTED_DEFAULT@")
-set(CMAKE_OBJCXX_COMPILE_FEATURES "@CMAKE_OBJCXX_COMPILE_FEATURES@")
-set(CMAKE_OBJCXX98_COMPILE_FEATURES "@CMAKE_OBJCXX98_COMPILE_FEATURES@")
-set(CMAKE_OBJCXX11_COMPILE_FEATURES "@CMAKE_OBJCXX11_COMPILE_FEATURES@")
-set(CMAKE_OBJCXX14_COMPILE_FEATURES "@CMAKE_OBJCXX14_COMPILE_FEATURES@")
-set(CMAKE_OBJCXX17_COMPILE_FEATURES "@CMAKE_OBJCXX17_COMPILE_FEATURES@")
-set(CMAKE_OBJCXX20_COMPILE_FEATURES "@CMAKE_OBJCXX20_COMPILE_FEATURES@")
-
-set(CMAKE_OBJCXX_PLATFORM_ID "@CMAKE_OBJCXX_PLATFORM_ID@")
-set(CMAKE_OBJCXX_SIMULATE_ID "@CMAKE_OBJCXX_SIMULATE_ID@")
-set(CMAKE_OBJCXX_COMPILER_FRONTEND_VARIANT "@CMAKE_OBJCXX_COMPILER_FRONTEND_VARIANT@")
-set(CMAKE_OBJCXX_SIMULATE_VERSION "@CMAKE_OBJCXX_SIMULATE_VERSION@")
-@_SET_CMAKE_OBJCXX_COMPILER_ARCHITECTURE_ID@
-@SET_CMAKE_XCODE_ARCHS@
-set(CMAKE_AR "@CMAKE_AR@")
-set(CMAKE_OBJCXX_COMPILER_AR "@CMAKE_OBJCXX_COMPILER_AR@")
-set(CMAKE_RANLIB "@CMAKE_RANLIB@")
-set(CMAKE_OBJCXX_COMPILER_RANLIB "@CMAKE_OBJCXX_COMPILER_RANLIB@")
-set(CMAKE_LINKER "@CMAKE_LINKER@")
-set(CMAKE_MT "@CMAKE_MT@")
-set(CMAKE_COMPILER_IS_GNUOBJCXX @CMAKE_COMPILER_IS_GNUOBJCXX@)
-set(CMAKE_OBJCXX_COMPILER_LOADED 1)
-set(CMAKE_OBJCXX_COMPILER_WORKS @CMAKE_OBJCXX_COMPILER_WORKS@)
-set(CMAKE_OBJCXX_ABI_COMPILED @CMAKE_OBJCXX_ABI_COMPILED@)
-
-set(CMAKE_OBJCXX_COMPILER_ENV_VAR "OBJCXX")
-
-set(CMAKE_OBJCXX_COMPILER_ID_RUN 1)
-set(CMAKE_OBJCXX_SOURCE_FILE_EXTENSIONS M;m;mm)
-set(CMAKE_OBJCXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O)
-
-if (CMAKE_OBJC_COMPILER_ID_RUN)
-  foreach(extension IN LISTS CMAKE_OBJC_SOURCE_FILE_EXTENSIONS)
-    list(REMOVE_ITEM CMAKE_OBJCXX_SOURCE_FILE_EXTENSIONS ${extension})
-  endforeach()
-endif()
-
-foreach (lang C CXX OBJC)
-  foreach(extension IN LISTS CMAKE_OBJCXX_SOURCE_FILE_EXTENSIONS)
-    if (CMAKE_${lang}_COMPILER_ID_RUN)
-      list(REMOVE_ITEM CMAKE_${lang}_SOURCE_FILE_EXTENSIONS ${extension})
-    endif()
-  endforeach()
-endforeach()
-
-set(CMAKE_OBJCXX_LINKER_PREFERENCE 25)
-set(CMAKE_OBJCXX_LINKER_PREFERENCE_PROPAGATES 1)
-
-# Save compiler ABI information.
-set(CMAKE_OBJCXX_SIZEOF_DATA_PTR "@CMAKE_OBJCXX_SIZEOF_DATA_PTR@")
-set(CMAKE_OBJCXX_COMPILER_ABI "@CMAKE_OBJCXX_COMPILER_ABI@")
-set(CMAKE_OBJCXX_LIBRARY_ARCHITECTURE "@CMAKE_OBJCXX_LIBRARY_ARCHITECTURE@")
-
-if(CMAKE_OBJCXX_SIZEOF_DATA_PTR)
-  set(CMAKE_SIZEOF_VOID_P "${CMAKE_OBJCXX_SIZEOF_DATA_PTR}")
-endif()
-
-if(CMAKE_OBJCXX_COMPILER_ABI)
-  set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_OBJCXX_COMPILER_ABI}")
-endif()
-
-if(CMAKE_OBJCXX_LIBRARY_ARCHITECTURE)
-  set(CMAKE_LIBRARY_ARCHITECTURE "@CMAKE_OBJCXX_LIBRARY_ARCHITECTURE@")
-endif()
-
-@CMAKE_OBJCXX_COMPILER_CUSTOM_CODE@
-@CMAKE_OBJCXX_SYSROOT_FLAG_CODE@
-@CMAKE_OBJCXX_OSX_DEPLOYMENT_TARGET_FLAG_CODE@
-
-set(CMAKE_OBJCXX_IMPLICIT_INCLUDE_DIRECTORIES "@CMAKE_OBJCXX_IMPLICIT_INCLUDE_DIRECTORIES@")
-set(CMAKE_OBJCXX_IMPLICIT_LINK_LIBRARIES "@CMAKE_OBJCXX_IMPLICIT_LINK_LIBRARIES@")
-set(CMAKE_OBJCXX_IMPLICIT_LINK_DIRECTORIES "@CMAKE_OBJCXX_IMPLICIT_LINK_DIRECTORIES@")
-set(CMAKE_OBJCXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "@CMAKE_OBJCXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES@")
diff --git a/share/cmake-3.18/Modules/CMakeOBJCXXCompilerABI.mm b/share/cmake-3.18/Modules/CMakeOBJCXXCompilerABI.mm
deleted file mode 100644
index 288a58c..0000000
--- a/share/cmake-3.18/Modules/CMakeOBJCXXCompilerABI.mm
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef __cplusplus
-# error "A C compiler has been selected for Objective-C++."
-#endif
-
-/*--------------------------------------------------------------------------*/
-
-#include "CMakeCompilerABI.h"
-
-/*--------------------------------------------------------------------------*/
-
-int main(int argc, char *argv[])
-{
-  int require = 0;
-  require += info_sizeof_dptr[argc];
-#if defined(ABI_ID)
-  require += info_abi[argc];
-#endif
-  (void)argv;
-  return require;
-}
diff --git a/share/cmake-3.18/Modules/CMakeOBJCXXCompilerId.mm.in b/share/cmake-3.18/Modules/CMakeOBJCXXCompilerId.mm.in
deleted file mode 100644
index fe04de1..0000000
--- a/share/cmake-3.18/Modules/CMakeOBJCXXCompilerId.mm.in
+++ /dev/null
@@ -1,68 +0,0 @@
-/* This source file must have a .cpp extension so that all C++ compilers
-   recognize the extension without flags.  Borland does not know .cxx for
-   example.  */
-#ifndef __cplusplus
-# error "An Objective-C compiler has been selected for Objective-C++."
-#endif
-
-@CMAKE_OBJCXX_COMPILER_ID_CONTENT@
-
-/* Construct the string literal in pieces to prevent the source from
-   getting matched.  Store it in a pointer rather than an array
-   because some compilers will just produce instructions to fill the
-   array rather than assigning a pointer to a static array.  */
-char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
-#ifdef SIMULATE_ID
-char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
-#endif
-
-#ifdef __QNXNTO__
-char const* qnxnto = "INFO" ":" "qnxnto[]";
-#endif
-
-@CMAKE_OBJCXX_COMPILER_ID_PLATFORM_CONTENT@
-@CMAKE_OBJCXX_COMPILER_ID_ERROR_FOR_TEST@
-
-#if defined(_MSC_VER) && defined(_MSVC_LANG)
-#define CXX_STD _MSVC_LANG
-#else
-#define CXX_STD __cplusplus
-#endif
-
-const char* info_language_dialect_default = "INFO" ":" "dialect_default["
-#if CXX_STD > 201703L
-  "20"
-#elif CXX_STD >= 201703L
-  "17"
-#elif CXX_STD >= 201402L
-  "14"
-#elif CXX_STD >= 201103L
-  "11"
-#else
-  "98"
-#endif
-"]";
-
-/*--------------------------------------------------------------------------*/
-
-int main(int argc, char* argv[])
-{
-  int require = 0;
-  require += info_compiler[argc];
-  require += info_platform[argc];
-#ifdef COMPILER_VERSION_MAJOR
-  require += info_version[argc];
-#endif
-#ifdef COMPILER_VERSION_INTERNAL
-  require += info_version_internal[argc];
-#endif
-#ifdef SIMULATE_ID
-  require += info_simulate[argc];
-#endif
-#ifdef SIMULATE_VERSION_MAJOR
-  require += info_simulate_version[argc];
-#endif
-  require += info_language_dialect_default[argc];
-  (void)argv;
-  return require;
-}
diff --git a/share/cmake-3.18/Modules/CMakeOBJCXXInformation.cmake b/share/cmake-3.18/Modules/CMakeOBJCXXInformation.cmake
deleted file mode 100644
index 71beb7f..0000000
--- a/share/cmake-3.18/Modules/CMakeOBJCXXInformation.cmake
+++ /dev/null
@@ -1,278 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# This file sets the basic flags for the Objective-C++ language in CMake.
-# It also loads the available platform file for the system-compiler
-# if it exists.
-# It also loads a system - compiler - processor (or target hardware)
-# specific file, which is mainly useful for crosscompiling and embedded systems.
-
-include(CMakeLanguageInformation)
-
-# some compilers use different extensions (e.g. sdcc uses .rel)
-# so set the extension here first so it can be overridden by the compiler specific file
-set(CMAKE_OBJCXX_OUTPUT_EXTENSION .o)
-
-set(_INCLUDED_FILE 0)
-
-# Load compiler-specific information.
-if(CMAKE_OBJCXX_COMPILER_ID)
-  include(Compiler/${CMAKE_OBJCXX_COMPILER_ID}-OBJCXX OPTIONAL)
-endif()
-
-set(CMAKE_BASE_NAME)
-get_filename_component(CMAKE_BASE_NAME "${CMAKE_OBJCXX_COMPILER}" NAME_WE)
-# since the gnu compiler has several names force g++
-if(CMAKE_COMPILER_IS_GNUOBJCXX)
-  set(CMAKE_BASE_NAME g++)
-endif()
-
-
-# load a hardware specific file, mostly useful for embedded compilers
-if(CMAKE_SYSTEM_PROCESSOR)
-  if(CMAKE_OBJCXX_COMPILER_ID)
-    include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_OBJCXX_COMPILER_ID}-OBJCXX-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL RESULT_VARIABLE _INCLUDED_FILE)
-  endif()
-  if (NOT _INCLUDED_FILE)
-    include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_BASE_NAME}-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL)
-  endif ()
-endif()
-
-# load the system- and compiler specific files
-if(CMAKE_OBJCXX_COMPILER_ID)
-  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_OBJCXX_COMPILER_ID}-OBJCXX OPTIONAL RESULT_VARIABLE _INCLUDED_FILE)
-endif()
-if (NOT _INCLUDED_FILE)
-  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_BASE_NAME} OPTIONAL
-          RESULT_VARIABLE _INCLUDED_FILE)
-endif ()
-
-# load any compiler-wrapper specific information
-if (CMAKE_OBJCXX_COMPILER_WRAPPER)
-  __cmake_include_compiler_wrapper(OBJCXX)
-endif ()
-
-# We specify the compiler information in the system file for some
-# platforms, but this language may not have been enabled when the file
-# was first included.  Include it again to get the language info.
-# Remove this when all compiler info is removed from system files.
-if (NOT _INCLUDED_FILE)
-  include(Platform/${CMAKE_SYSTEM_NAME} OPTIONAL)
-endif ()
-
-if(CMAKE_OBJCXX_SIZEOF_DATA_PTR)
-  foreach(f ${CMAKE_OBJCXX_ABI_FILES})
-    include(${f})
-  endforeach()
-  unset(CMAKE_OBJCXX_ABI_FILES)
-endif()
-
-# This should be included before the _INIT variables are
-# used to initialize the cache.  Since the rule variables
-# have if blocks on them, users can still define them here.
-# But, it should still be after the platform file so changes can
-# be made to those values.
-
-if(CMAKE_USER_MAKE_RULES_OVERRIDE)
-  # Save the full path of the file so try_compile can use it.
-  include(${CMAKE_USER_MAKE_RULES_OVERRIDE} RESULT_VARIABLE _override)
-  set(CMAKE_USER_MAKE_RULES_OVERRIDE "${_override}")
-endif()
-
-if(CMAKE_USER_MAKE_RULES_OVERRIDE_OBJCXX)
-  # Save the full path of the file so try_compile can use it.
-  include(${CMAKE_USER_MAKE_RULES_OVERRIDE_OBJCXX} RESULT_VARIABLE _override)
-  set(CMAKE_USER_MAKE_RULES_OVERRIDE_OBJCXX "${_override}")
-endif()
-
-
-# Create a set of shared library variable specific to Objective-C++
-# For 90% of the systems, these are the same flags as the Objective-C versions
-# so if these are not set just copy the flags from the Objective-C version
-if(NOT CMAKE_SHARED_LIBRARY_CREATE_OBJCXX_FLAGS)
-  set(CMAKE_SHARED_LIBRARY_CREATE_OBJCXX_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_OBJC_FLAGS})
-endif()
-
-if(NOT CMAKE_OBJCXX_COMPILE_OPTIONS_PIC)
-  set(CMAKE_OBJCXX_COMPILE_OPTIONS_PIC ${CMAKE_OBJC_COMPILE_OPTIONS_PIC})
-endif()
-
-if(NOT CMAKE_OBJCXX_COMPILE_OPTIONS_PIE)
-  set(CMAKE_OBJCXX_COMPILE_OPTIONS_PIE ${CMAKE_OBJC_COMPILE_OPTIONS_PIE})
-endif()
-if(NOT CMAKE_OBJCXX_LINK_OPTIONS_PIE)
-  set(CMAKE_OBJCXX_LINK_OPTIONS_PIE ${CMAKE_OBJC_LINK_OPTIONS_PIE})
-endif()
-if(NOT CMAKE_OBJCXX_LINK_OPTIONS_NO_PIE)
-  set(CMAKE_OBJCXX_LINK_OPTIONS_NO_PIE ${CMAKE_OBJC_LINK_OPTIONS_NO_PIE})
-endif()
-
-if(NOT CMAKE_OBJCXX_COMPILE_OPTIONS_DLL)
-  set(CMAKE_OBJCXX_COMPILE_OPTIONS_DLL ${CMAKE_OBJC_COMPILE_OPTIONS_DLL})
-endif()
-
-if(NOT CMAKE_SHARED_LIBRARY_OBJCXX_FLAGS)
-  set(CMAKE_SHARED_LIBRARY_OBJCXX_FLAGS ${CMAKE_SHARED_LIBRARY_OBJC_FLAGS})
-endif()
-
-if(NOT DEFINED CMAKE_SHARED_LIBRARY_LINK_OBJCXX_FLAGS)
-  set(CMAKE_SHARED_LIBRARY_LINK_OBJCXX_FLAGS ${CMAKE_SHARED_LIBRARY_LINK_OBJC_FLAGS})
-endif()
-
-if(NOT CMAKE_SHARED_LIBRARY_RUNTIME_OBJCXX_FLAG)
-  set(CMAKE_SHARED_LIBRARY_RUNTIME_OBJCXX_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_OBJC_FLAG})
-endif()
-
-if(NOT CMAKE_SHARED_LIBRARY_RUNTIME_OBJCXX_FLAG_SEP)
-  set(CMAKE_SHARED_LIBRARY_RUNTIME_OBJCXX_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_OBJC_FLAG_SEP})
-endif()
-
-if(NOT CMAKE_SHARED_LIBRARY_RPATH_LINK_OBJCXX_FLAG)
-  set(CMAKE_SHARED_LIBRARY_RPATH_LINK_OBJCXX_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_OBJC_FLAG})
-endif()
-
-if(NOT DEFINED CMAKE_EXE_EXPORTS_OBJCXX_FLAG)
-  set(CMAKE_EXE_EXPORTS_OBJCXX_FLAG ${CMAKE_EXE_EXPORTS_OBJC_FLAG})
-endif()
-
-if(NOT DEFINED CMAKE_SHARED_LIBRARY_SONAME_OBJCXX_FLAG)
-  set(CMAKE_SHARED_LIBRARY_SONAME_OBJCXX_FLAG ${CMAKE_SHARED_LIBRARY_SONAME_OBJC_FLAG})
-endif()
-
-if(NOT CMAKE_EXECUTABLE_RUNTIME_OBJCXX_FLAG)
-  set(CMAKE_EXECUTABLE_RUNTIME_OBJCXX_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_OBJCXX_FLAG})
-endif()
-
-if(NOT CMAKE_EXECUTABLE_RUNTIME_OBJCXX_FLAG_SEP)
-  set(CMAKE_EXECUTABLE_RUNTIME_OBJCXX_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_OBJCXX_FLAG_SEP})
-endif()
-
-if(NOT CMAKE_EXECUTABLE_RPATH_LINK_OBJCXX_FLAG)
-  set(CMAKE_EXECUTABLE_RPATH_LINK_OBJCXX_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_OBJCXX_FLAG})
-endif()
-
-if(NOT DEFINED CMAKE_SHARED_LIBRARY_LINK_OBJCXX_WITH_RUNTIME_PATH)
-  set(CMAKE_SHARED_LIBRARY_LINK_OBJCXX_WITH_RUNTIME_PATH ${CMAKE_SHARED_LIBRARY_LINK_OBJC_WITH_RUNTIME_PATH})
-endif()
-
-if(NOT CMAKE_INCLUDE_FLAG_OBJCXX)
-  set(CMAKE_INCLUDE_FLAG_OBJCXX ${CMAKE_INCLUDE_FLAG_C})
-endif()
-
-# for most systems a module is the same as a shared library
-# so unless the variable CMAKE_MODULE_EXISTS is set just
-# copy the values from the LIBRARY variables
-if(NOT CMAKE_MODULE_EXISTS)
-  set(CMAKE_SHARED_MODULE_OBJCXX_FLAGS ${CMAKE_SHARED_LIBRARY_OBJCXX_FLAGS})
-  set(CMAKE_SHARED_MODULE_CREATE_OBJCXX_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_OBJCXX_FLAGS})
-endif()
-
-# repeat for modules
-if(NOT CMAKE_SHARED_MODULE_CREATE_OBJCXX_FLAGS)
-  set(CMAKE_SHARED_MODULE_CREATE_OBJCXX_FLAGS ${CMAKE_SHARED_MODULE_CREATE_OBJC_FLAGS})
-endif()
-
-if(NOT CMAKE_SHARED_MODULE_OBJCXX_FLAGS)
-  set(CMAKE_SHARED_MODULE_OBJCXX_FLAGS ${CMAKE_SHARED_MODULE_OBJC_FLAGS})
-endif()
-
-# Initialize OBJCXX link type selection flags from OBJC versions.
-foreach(type SHARED_LIBRARY SHARED_MODULE EXE)
-  if(NOT CMAKE_${type}_LINK_STATIC_OBJCXX_FLAGS)
-    set(CMAKE_${type}_LINK_STATIC_OBJCXX_FLAGS
-      ${CMAKE_${type}_LINK_STATIC_OBJC_FLAGS})
-  endif()
-  if(NOT CMAKE_${type}_LINK_DYNAMIC_OBJCXX_FLAGS)
-    set(CMAKE_${type}_LINK_DYNAMIC_OBJCXX_FLAGS
-      ${CMAKE_${type}_LINK_DYNAMIC_OBJC_FLAGS})
-  endif()
-endforeach()
-
-# add the flags to the cache based
-# on the initial values computed in the platform/*.cmake files
-# use _INIT variables so that this only happens the first time
-# and you can set these flags in the cmake cache
-set(CMAKE_OBJCXX_FLAGS_INIT "$ENV{OBJCXXFLAGS} ${CMAKE_OBJCXX_FLAGS_INIT}")
-
-cmake_initialize_per_config_variable(CMAKE_OBJCXX_FLAGS "Flags used by the Objective-C++ compiler")
-
-if(CMAKE_OBJCXX_STANDARD_LIBRARIES_INIT)
-  set(CMAKE_OBJCXX_STANDARD_LIBRARIES "${CMAKE_OBJCXX_STANDARD_LIBRARIES_INIT}"
-    CACHE STRING "Libraries linked by default with all Objective-C++ applications.")
-  mark_as_advanced(CMAKE_OBJCXX_STANDARD_LIBRARIES)
-endif()
-
-if(NOT CMAKE_OBJCXX_COMPILER_LAUNCHER AND DEFINED ENV{CMAKE_OBJCXX_COMPILER_LAUNCHER})
-  set(CMAKE_OBJCXX_COMPILER_LAUNCHER "$ENV{CMAKE_OBJCXX_COMPILER_LAUNCHER}"
-    CACHE STRING "Compiler launcher for OBJCXX.")
-endif()
-
-include(CMakeCommonLanguageInclude)
-
-# now define the following rules:
-# CMAKE_OBJCXX_CREATE_SHARED_LIBRARY
-# CMAKE_OBJCXX_CREATE_SHARED_MODULE
-# CMAKE_OBJCXX_COMPILE_OBJECT
-# CMAKE_OBJCXX_LINK_EXECUTABLE
-
-# variables supplied by the generator at use time
-# <TARGET>
-# <TARGET_BASE> the target without the suffix
-# <OBJECTS>
-# <OBJECT>
-# <LINK_LIBRARIES>
-# <FLAGS>
-# <LINK_FLAGS>
-
-# Objective-C++ compiler information
-# <CMAKE_OBJCXX_COMPILER>
-# <CMAKE_SHARED_LIBRARY_CREATE_OBJCXX_FLAGS>
-# <CMAKE_OBJCXX_SHARED_MODULE_CREATE_FLAGS>
-# <CMAKE_OBJCXX_LINK_FLAGS>
-
-# Static library tools
-# <CMAKE_AR>
-# <CMAKE_RANLIB>
-
-
-# create a shared Objective-C++ library
-if(NOT CMAKE_OBJCXX_CREATE_SHARED_LIBRARY)
-  set(CMAKE_OBJCXX_CREATE_SHARED_LIBRARY
-      "<CMAKE_OBJCXX_COMPILER> <CMAKE_SHARED_LIBRARY_OBJCXX_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_OBJCXX_FLAGS> <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
-endif()
-
-# create an Objective-C++ shared module copy the shared library rule by default
-if(NOT CMAKE_OBJCXX_CREATE_SHARED_MODULE)
-  set(CMAKE_OBJCXX_CREATE_SHARED_MODULE ${CMAKE_OBJCXX_CREATE_SHARED_LIBRARY})
-endif()
-
-
-# Create a static archive incrementally for large object file counts.
-# If CMAKE_OBJCXX_CREATE_STATIC_LIBRARY is set it will override these.
-if(NOT DEFINED CMAKE_OBJCXX_ARCHIVE_CREATE)
-  set(CMAKE_OBJCXX_ARCHIVE_CREATE "<CMAKE_AR> qc <TARGET> <LINK_FLAGS> <OBJECTS>")
-endif()
-if(NOT DEFINED CMAKE_OBJCXX_ARCHIVE_APPEND)
-  set(CMAKE_OBJCXX_ARCHIVE_APPEND "<CMAKE_AR> q <TARGET> <LINK_FLAGS> <OBJECTS>")
-endif()
-if(NOT DEFINED CMAKE_OBJCXX_ARCHIVE_FINISH)
-  set(CMAKE_OBJCXX_ARCHIVE_FINISH "<CMAKE_RANLIB> <TARGET>")
-endif()
-
-# compile an Objective-C++ file into an object file
-if(NOT CMAKE_OBJCXX_COMPILE_OBJECT)
-  set(CMAKE_OBJCXX_COMPILE_OBJECT
-    "<CMAKE_OBJCXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -x objective-c++ -o <OBJECT> -c <SOURCE>")
-endif()
-
-if(NOT CMAKE_OBJCXX_LINK_EXECUTABLE)
-  set(CMAKE_OBJCXX_LINK_EXECUTABLE
-    "<CMAKE_OBJCXX_COMPILER> <FLAGS> <CMAKE_OBJCXX_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
-endif()
-
-mark_as_advanced(
-CMAKE_VERBOSE_MAKEFILE
-)
-
-set(CMAKE_OBJCXX_INFORMATION_LOADED 1)
diff --git a/share/cmake-3.18/Modules/CMakePackageConfigHelpers.cmake b/share/cmake-3.18/Modules/CMakePackageConfigHelpers.cmake
deleted file mode 100644
index 22fc953..0000000
--- a/share/cmake-3.18/Modules/CMakePackageConfigHelpers.cmake
+++ /dev/null
@@ -1,332 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CMakePackageConfigHelpers
--------------------------
-
-Helpers functions for creating config files that can be included by other
-projects to find and use a package.
-
-Adds the :command:`configure_package_config_file()` and
-:command:`write_basic_package_version_file()` commands.
-
-Generating a Package Configuration File
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. command:: configure_package_config_file
-
- Create a config file for a project::
-
-   configure_package_config_file(<input> <output>
-     INSTALL_DESTINATION <path>
-     [PATH_VARS <var1> <var2> ... <varN>]
-     [NO_SET_AND_CHECK_MACRO]
-     [NO_CHECK_REQUIRED_COMPONENTS_MACRO]
-     [INSTALL_PREFIX <path>]
-     )
-
-``configure_package_config_file()`` should be used instead of the plain
-:command:`configure_file()` command when creating the ``<PackageName>Config.cmake``
-or ``<PackageName>-config.cmake`` file for installing a project or library.
-It helps making the resulting package relocatable by avoiding hardcoded paths
-in the installed ``Config.cmake`` file.
-
-In a ``FooConfig.cmake`` file there may be code like this to make the install
-destinations know to the using project:
-
-.. code-block:: cmake
-
-   set(FOO_INCLUDE_DIR   "@CMAKE_INSTALL_FULL_INCLUDEDIR@" )
-   set(FOO_DATA_DIR   "@CMAKE_INSTALL_PREFIX@/@RELATIVE_DATA_INSTALL_DIR@" )
-   set(FOO_ICONS_DIR   "@CMAKE_INSTALL_PREFIX@/share/icons" )
-   #...logic to determine installedPrefix from the own location...
-   set(FOO_CONFIG_DIR  "${installedPrefix}/@CONFIG_INSTALL_DIR@" )
-
-All 4 options shown above are not sufficient, since the first 3 hardcode the
-absolute directory locations, and the 4th case works only if the logic to
-determine the ``installedPrefix`` is correct, and if ``CONFIG_INSTALL_DIR``
-contains a relative path, which in general cannot be guaranteed.  This has the
-effect that the resulting ``FooConfig.cmake`` file would work poorly under
-Windows and OSX, where users are used to choose the install location of a
-binary package at install time, independent from how
-:variable:`CMAKE_INSTALL_PREFIX` was set at build/cmake time.
-
-Using ``configure_package_config_file`` helps.  If used correctly, it makes
-the resulting ``FooConfig.cmake`` file relocatable.  Usage:
-
-1. write a ``FooConfig.cmake.in`` file as you are used to
-2. insert a line containing only the string ``@PACKAGE_INIT@``
-3. instead of ``set(FOO_DIR "@SOME_INSTALL_DIR@")``, use
-   ``set(FOO_DIR "@PACKAGE_SOME_INSTALL_DIR@")`` (this must be after the
-   ``@PACKAGE_INIT@`` line)
-4. instead of using the normal :command:`configure_file()`, use
-   ``configure_package_config_file()``
-
-
-
-The ``<input>`` and ``<output>`` arguments are the input and output file, the
-same way as in :command:`configure_file()`.
-
-The ``<path>`` given to ``INSTALL_DESTINATION`` must be the destination where
-the ``FooConfig.cmake`` file will be installed to.  This path can either be
-absolute, or relative to the ``INSTALL_PREFIX`` path.
-
-The variables ``<var1>`` to ``<varN>`` given as ``PATH_VARS`` are the
-variables which contain install destinations.  For each of them the macro will
-create a helper variable ``PACKAGE_<var...>``.  These helper variables must be
-used in the ``FooConfig.cmake.in`` file for setting the installed location.
-They are calculated by ``configure_package_config_file`` so that they are
-always relative to the installed location of the package.  This works both for
-relative and also for absolute locations.  For absolute locations it works
-only if the absolute location is a subdirectory of ``INSTALL_PREFIX``.
-
-If the ``INSTALL_PREFIX`` argument is passed, this is used as base path to
-calculate all the relative paths.  The ``<path>`` argument must be an absolute
-path.  If this argument is not passed, the :variable:`CMAKE_INSTALL_PREFIX`
-variable will be used instead.  The default value is good when generating a
-FooConfig.cmake file to use your package from the install tree.  When
-generating a FooConfig.cmake file to use your package from the build tree this
-option should be used.
-
-By default ``configure_package_config_file`` also generates two helper macros,
-``set_and_check()`` and ``check_required_components()`` into the
-``FooConfig.cmake`` file.
-
-``set_and_check()`` should be used instead of the normal ``set()`` command for
-setting directories and file locations.  Additionally to setting the variable
-it also checks that the referenced file or directory actually exists and fails
-with a ``FATAL_ERROR`` otherwise.  This makes sure that the created
-``FooConfig.cmake`` file does not contain wrong references.
-When using the ``NO_SET_AND_CHECK_MACRO``, this macro is not generated
-into the ``FooConfig.cmake`` file.
-
-``check_required_components(<PackageName>)`` should be called at the end of
-the ``FooConfig.cmake`` file. This macro checks whether all requested,
-non-optional components have been found, and if this is not the case, sets
-the ``Foo_FOUND`` variable to ``FALSE``, so that the package is considered to
-be not found.  It does that by testing the ``Foo_<Component>_FOUND``
-variables for all requested required components.  This macro should be
-called even if the package doesn't provide any components to make sure
-users are not specifying components erroneously.  When using the
-``NO_CHECK_REQUIRED_COMPONENTS_MACRO`` option, this macro is not generated
-into the ``FooConfig.cmake`` file.
-
-For an example see below the documentation for
-:command:`write_basic_package_version_file()`.
-
-Generating a Package Version File
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. command:: write_basic_package_version_file
-
- Create a version file for a project::
-
-   write_basic_package_version_file(<filename>
-     [VERSION <major.minor.patch>]
-     COMPATIBILITY <AnyNewerVersion|SameMajorVersion|SameMinorVersion|ExactVersion>
-     [ARCH_INDEPENDENT] )
-
-
-Writes a file for use as ``<PackageName>ConfigVersion.cmake`` file to
-``<filename>``.  See the documentation of :command:`find_package()` for
-details on this.
-
-``<filename>`` is the output filename, it should be in the build tree.
-``<major.minor.patch>`` is the version number of the project to be installed.
-
-If no ``VERSION`` is given, the :variable:`PROJECT_VERSION` variable is used.
-If this hasn't been set, it errors out.
-
-The ``COMPATIBILITY`` mode ``AnyNewerVersion`` means that the installed
-package version will be considered compatible if it is newer or exactly the
-same as the requested version.  This mode should be used for packages which
-are fully backward compatible, also across major versions.
-If ``SameMajorVersion`` is used instead, then the behaviour differs from
-``AnyNewerVersion`` in that the major version number must be the same as
-requested, e.g.  version 2.0 will not be considered compatible if 1.0 is
-requested.  This mode should be used for packages which guarantee backward
-compatibility within the same major version.
-If ``SameMinorVersion`` is used, the behaviour is the same as
-``SameMajorVersion``, but both major and minor version must be the same as
-requested, e.g version 0.2 will not be compatible if 0.1 is requested.
-If ``ExactVersion`` is used, then the package is only considered compatible if
-the requested version matches exactly its own version number (not considering
-the tweak version).  For example, version 1.2.3 of a package is only
-considered compatible to requested version 1.2.3.  This mode is for packages
-without compatibility guarantees.
-If your project has more elaborated version matching rules, you will need to
-write your own custom ``ConfigVersion.cmake`` file instead of using this
-macro.
-
-If ``ARCH_INDEPENDENT`` is given, the installed package version will be
-considered compatible even if it was built for a different architecture than
-the requested architecture.  Otherwise, an architecture check will be performed,
-and the package will be considered compatible only if the architecture matches
-exactly.  For example, if the package is built for a 32-bit architecture, the
-package is only considered compatible if it is used on a 32-bit architecture,
-unless ``ARCH_INDEPENDENT`` is given, in which case the package is considered
-compatible on any architecture.
-
-.. note:: ``ARCH_INDEPENDENT`` is intended for header-only libraries or similar
-   packages with no binaries.
-
-Internally, this macro executes :command:`configure_file()` to create the
-resulting version file.  Depending on the ``COMPATIBILITY``, the corresponding
-``BasicConfigVersion-<COMPATIBILITY>.cmake.in`` file is used.
-Please note that these files are internal to CMake and you should not call
-:command:`configure_file()` on them yourself, but they can be used as starting
-point to create more sophisticted custom ``ConfigVersion.cmake`` files.
-
-Example Generating Package Files
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Example using both :command:`configure_package_config_file` and
-``write_basic_package_version_file()``:
-
-``CMakeLists.txt``:
-
-.. code-block:: cmake
-
-   set(INCLUDE_INSTALL_DIR include/ ... CACHE )
-   set(LIB_INSTALL_DIR lib/ ... CACHE )
-   set(SYSCONFIG_INSTALL_DIR etc/foo/ ... CACHE )
-   #...
-   include(CMakePackageConfigHelpers)
-   configure_package_config_file(FooConfig.cmake.in
-     ${CMAKE_CURRENT_BINARY_DIR}/FooConfig.cmake
-     INSTALL_DESTINATION ${LIB_INSTALL_DIR}/Foo/cmake
-     PATH_VARS INCLUDE_INSTALL_DIR SYSCONFIG_INSTALL_DIR)
-   write_basic_package_version_file(
-     ${CMAKE_CURRENT_BINARY_DIR}/FooConfigVersion.cmake
-     VERSION 1.2.3
-     COMPATIBILITY SameMajorVersion )
-   install(FILES ${CMAKE_CURRENT_BINARY_DIR}/FooConfig.cmake
-                 ${CMAKE_CURRENT_BINARY_DIR}/FooConfigVersion.cmake
-           DESTINATION ${LIB_INSTALL_DIR}/Foo/cmake )
-
-``FooConfig.cmake.in``:
-
-::
-
-   set(FOO_VERSION x.y.z)
-   ...
-   @PACKAGE_INIT@
-   ...
-   set_and_check(FOO_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@")
-   set_and_check(FOO_SYSCONFIG_DIR "@PACKAGE_SYSCONFIG_INSTALL_DIR@")
-
-   check_required_components(Foo)
-#]=======================================================================]
-
-include(WriteBasicConfigVersionFile)
-
-macro(WRITE_BASIC_PACKAGE_VERSION_FILE)
-  write_basic_config_version_file(${ARGN})
-endmacro()
-
-function(CONFIGURE_PACKAGE_CONFIG_FILE _inputFile _outputFile)
-  set(options NO_SET_AND_CHECK_MACRO NO_CHECK_REQUIRED_COMPONENTS_MACRO)
-  set(oneValueArgs INSTALL_DESTINATION INSTALL_PREFIX)
-  set(multiValueArgs PATH_VARS )
-
-  cmake_parse_arguments(CCF "${options}" "${oneValueArgs}" "${multiValueArgs}"  ${ARGN})
-
-  if(CCF_UNPARSED_ARGUMENTS)
-    message(FATAL_ERROR "Unknown keywords given to CONFIGURE_PACKAGE_CONFIG_FILE(): \"${CCF_UNPARSED_ARGUMENTS}\"")
-  endif()
-
-  if(NOT CCF_INSTALL_DESTINATION)
-    message(FATAL_ERROR "No INSTALL_DESTINATION given to CONFIGURE_PACKAGE_CONFIG_FILE()")
-  endif()
-
-  if(DEFINED CCF_INSTALL_PREFIX)
-    if(IS_ABSOLUTE "${CCF_INSTALL_PREFIX}")
-      set(installPrefix "${CCF_INSTALL_PREFIX}")
-    else()
-      message(FATAL_ERROR "INSTALL_PREFIX must be an absolute path")
-    endif()
-  elseif(IS_ABSOLUTE "${CMAKE_INSTALL_PREFIX}")
-    set(installPrefix "${CMAKE_INSTALL_PREFIX}")
-  else()
-    get_filename_component(installPrefix "${CMAKE_INSTALL_PREFIX}" ABSOLUTE)
-  endif()
-
-  if(IS_ABSOLUTE "${CCF_INSTALL_DESTINATION}")
-    set(absInstallDir "${CCF_INSTALL_DESTINATION}")
-  else()
-    set(absInstallDir "${installPrefix}/${CCF_INSTALL_DESTINATION}")
-  endif()
-
-  file(RELATIVE_PATH PACKAGE_RELATIVE_PATH "${absInstallDir}" "${installPrefix}" )
-
-  foreach(var ${CCF_PATH_VARS})
-    if(NOT DEFINED ${var})
-      message(FATAL_ERROR "Variable ${var} does not exist")
-    else()
-      if(IS_ABSOLUTE "${${var}}")
-        string(REPLACE "${installPrefix}" "\${PACKAGE_PREFIX_DIR}"
-                        PACKAGE_${var} "${${var}}")
-      else()
-        set(PACKAGE_${var} "\${PACKAGE_PREFIX_DIR}/${${var}}")
-      endif()
-    endif()
-  endforeach()
-
-  get_filename_component(inputFileName "${_inputFile}" NAME)
-
-  set(PACKAGE_INIT "
-####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() #######
-####### Any changes to this file will be overwritten by the next CMake run ####
-####### The input file was ${inputFileName}                            ########
-
-get_filename_component(PACKAGE_PREFIX_DIR \"\${CMAKE_CURRENT_LIST_DIR}/${PACKAGE_RELATIVE_PATH}\" ABSOLUTE)
-")
-
-  if("${absInstallDir}" MATCHES "^(/usr)?/lib(64)?/.+")
-    # Handle "/usr move" symlinks created by some Linux distros.
-    string(APPEND PACKAGE_INIT "
-# Use original install prefix when loaded through a \"/usr move\"
-# cross-prefix symbolic link such as /lib -> /usr/lib.
-get_filename_component(_realCurr \"\${CMAKE_CURRENT_LIST_DIR}\" REALPATH)
-get_filename_component(_realOrig \"${absInstallDir}\" REALPATH)
-if(_realCurr STREQUAL _realOrig)
-  set(PACKAGE_PREFIX_DIR \"${installPrefix}\")
-endif()
-unset(_realOrig)
-unset(_realCurr)
-")
-  endif()
-
-  if(NOT CCF_NO_SET_AND_CHECK_MACRO)
-    string(APPEND PACKAGE_INIT "
-macro(set_and_check _var _file)
-  set(\${_var} \"\${_file}\")
-  if(NOT EXISTS \"\${_file}\")
-    message(FATAL_ERROR \"File or directory \${_file} referenced by variable \${_var} does not exist !\")
-  endif()
-endmacro()
-")
-  endif()
-
-
-  if(NOT CCF_NO_CHECK_REQUIRED_COMPONENTS_MACRO)
-    string(APPEND PACKAGE_INIT "
-macro(check_required_components _NAME)
-  foreach(comp \${\${_NAME}_FIND_COMPONENTS})
-    if(NOT \${_NAME}_\${comp}_FOUND)
-      if(\${_NAME}_FIND_REQUIRED_\${comp})
-        set(\${_NAME}_FOUND FALSE)
-      endif()
-    endif()
-  endforeach()
-endmacro()
-")
-  endif()
-
-  string(APPEND PACKAGE_INIT "
-####################################################################################")
-
-  configure_file("${_inputFile}" "${_outputFile}" @ONLY)
-
-endfunction()
diff --git a/share/cmake-3.18/Modules/CMakeParseImplicitIncludeInfo.cmake b/share/cmake-3.18/Modules/CMakeParseImplicitIncludeInfo.cmake
deleted file mode 100644
index ff4c325..0000000
--- a/share/cmake-3.18/Modules/CMakeParseImplicitIncludeInfo.cmake
+++ /dev/null
@@ -1,247 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-# This is used internally by CMake and should not be included by user code.
-
-# helper function that parses implicit include dirs from a single line
-# for compilers that report them that way.  on success we return the
-# list of dirs in id_var and set state_var to the 'done' state.
-function(cmake_parse_implicit_include_line line lang id_var log_var state_var)
-  # clear variables we append to (avoids possible polution from parent scopes)
-  unset(rv)
-  set(log "")
-
-  # Cray compiler (from cray wrapper, via PrgEnv-cray)
-  if("${CMAKE_${lang}_COMPILER_ID}" STREQUAL "Cray" AND
-     "${line}" MATCHES "^/" AND "${line}" MATCHES "/ccfe |/ftnfe " AND
-     "${line}" MATCHES " -isystem| -I")
-    string(REGEX MATCHALL " (-I ?|-isystem )(\"[^\"]+\"|[^ \"]+)" incs "${line}")
-    foreach(inc IN LISTS incs)
-      string(REGEX REPLACE " (-I ?|-isystem )(\"[^\"]+\"|[^ \"]+)" "\\2" idir "${inc}")
-      list(APPEND rv "${idir}")
-    endforeach()
-    if(rv)
-      string(APPEND log "  got implicit includes via cray ccfe parser!\n")
-    else()
-      string(APPEND log "  warning: cray ccfe parse failed!\n")
-    endif()
-  endif()
-
-  # PGI compiler
-  if("${CMAKE_${lang}_COMPILER_ID}" STREQUAL "PGI")
-    # pgc++ verbose output differs
-    if(("${lang}" STREQUAL "C" OR "${lang}" STREQUAL "Fortran") AND
-        "${line}" MATCHES "^/" AND
-        "${line}" MATCHES "/pgc |/pgf901 |/pgftnc " AND
-        "${line}" MATCHES " -cmdline ")
-      # cmdline has unparsed cmdline, remove it
-      string(REGEX REPLACE "-cmdline .*" "" line "${line}")
-      if("${line}" MATCHES " -nostdinc ")
-        set(rv "")    # defined, but empty
-      else()
-        string(REGEX MATCHALL " -stdinc ([^ ]*)" incs "${line}")
-        foreach(inc IN LISTS incs)
-          string(REGEX REPLACE " -stdinc ([^ ]*)" "\\1" idir "${inc}")
-          string(REPLACE ":" ";" idir "${idir}")
-          list(APPEND rv ${idir})
-        endforeach()
-      endif()
-      if(DEFINED rv)
-        string(APPEND log "  got implicit includes via PGI C/F parser!\n")
-      else()
-        string(APPEND log "  warning: PGI C/F parse failed!\n")
-      endif()
-    elseif("${lang}" STREQUAL "CXX" AND "${line}" MATCHES "^/" AND
-           "${line}" MATCHES "/pggpp1 " AND "${line}" MATCHES " -I")
-      # oddly, -Mnostdinc does not get rid of system -I's, at least in
-      # PGI 18.10.1 ...
-      string(REGEX MATCHALL " (-I ?)([^ ]*)" incs "${line}")
-      foreach(inc IN LISTS incs)
-        string(REGEX REPLACE " (-I ?)([^ ]*)" "\\2" idir "${inc}")
-        if(NOT "${idir}" STREQUAL "-")   # filter out "-I-"
-          list(APPEND rv "${idir}")
-        endif()
-      endforeach()
-      if(DEFINED rv)
-        string(APPEND log "  got implicit includes via PGI CXX parser!\n")
-      else()
-        string(APPEND log "  warning: PGI CXX parse failed!\n")
-      endif()
-    endif()
-  endif()
-
-  # SunPro compiler
-  if("${CMAKE_${lang}_COMPILER_ID}" STREQUAL "SunPro" AND
-     ("${line}" MATCHES "-D__SUNPRO_C" OR "${line}" MATCHES "-D__SUNPRO_F") )
-    string(REGEX MATCHALL " (-I ?)([^ ]*)" incs "${line}")
-    foreach(inc IN LISTS incs)
-      string(REGEX REPLACE " (-I ?)([^ ]*)" "\\2" idir "${inc}")
-      if(NOT "${idir}" STREQUAL "-xbuiltin")
-        list(APPEND rv "${idir}")
-      endif()
-    endforeach()
-    if(rv)
-      if ("${lang}" STREQUAL "C" OR "${lang}" STREQUAL "CXX")
-        # /usr/include appears to be hardwired in
-        list(APPEND rv "/usr/include")
-      endif()
-      string(APPEND log "  got implicit includes via sunpro parser!\n")
-    else()
-      string(APPEND log "  warning: sunpro parse failed!\n")
-    endif()
-  endif()
-
-  # XL compiler
-  if(("${CMAKE_${lang}_COMPILER_ID}" STREQUAL "XL"
-      OR "${CMAKE_${lang}_COMPILER_ID}" STREQUAL "XLClang")
-     AND "${line}" MATCHES "^/"
-     AND ( ("${lang}" STREQUAL "Fortran" AND
-            "${line}" MATCHES "/xl[fF]entry " AND
-            "${line}" MATCHES "OSVAR\\([^ ]+\\)")
-           OR
-            (  ("${lang}" STREQUAL "C" OR "${lang}" STREQUAL "CXX") AND
-            "${line}" MATCHES "/xl[cC]2?entry " AND
-            "${line}" MATCHES " -qosvar=")
-         )  )
-    # -qnostdinc cancels other stdinc flags, even if present
-    string(FIND "${line}" " -qnostdinc" nostd)
-    if(NOT ${nostd} EQUAL -1)
-      set(rv "")    # defined but empty
-      string(APPEND log "  got implicit includes via XL parser (nostdinc)\n")
-    else()
-      if("${lang}" STREQUAL "CXX")
-        string(REGEX MATCHALL " -qcpp_stdinc=([^ ]*)" std "${line}")
-        string(REGEX MATCHALL " -qgcc_cpp_stdinc=([^ ]*)" gcc_std "${line}")
-      else()
-        string(REGEX MATCHALL " -qc_stdinc=([^ ]*)" std "${line}")
-        string(REGEX MATCHALL " -qgcc_c_stdinc=([^ ]*)" gcc_std "${line}")
-      endif()
-      set(xlstd ${std} ${gcc_std})
-      foreach(inc IN LISTS xlstd)
-        string(REGEX REPLACE " -q(cpp|gcc_cpp|c|gcc_c)_stdinc=([^ ]*)" "\\2"
-               ipath "${inc}")
-        string(REPLACE ":" ";" ipath "${ipath}")
-        list(APPEND rv ${ipath})
-      endforeach()
-    endif()
-    # user can add -I flags via CMAKE_{C,CXX}_FLAGS, look for that too
-    string(REGEX MATCHALL " (-I ?)([^ ]*)" incs "${line}")
-    unset(urv)
-    foreach(inc IN LISTS incs)
-      string(REGEX REPLACE " (-I ?)([^ ]*)" "\\2" idir "${inc}")
-      list(APPEND urv "${idir}")
-    endforeach()
-    if(urv)
-      if ("${rv}" STREQUAL "")
-        set(rv ${urv})
-      else()
-        list(APPEND rv ${urv})
-      endif()
-    endif()
-
-    if(DEFINED rv)
-      string(APPEND log "  got implicit includes via XL parser!\n")
-    else()
-      string(APPEND log "  warning: XL parse failed!\n")
-    endif()
-  endif()
-
-  if(log)
-    set(${log_var} "${log}" PARENT_SCOPE)
-  else()
-    unset(${log_var} PARENT_SCOPE)
-  endif()
-  if(DEFINED rv)
-    set(${id_var} "${rv}" PARENT_SCOPE)
-    set(${state_var} "done" PARENT_SCOPE)
-  endif()
-endfunction()
-
-# top-level function to parse implicit include directory information
-# from verbose compiler output. sets state_var in parent to 'done' on success.
-function(cmake_parse_implicit_include_info text lang dir_var log_var state_var)
-  set(state start)    # values: start, loading, done
-
-  # clear variables we append to (avoids possible polution from parent scopes)
-  set(implicit_dirs_tmp)
-  set(log "")
-
-  # go through each line of output...
-  string(REGEX REPLACE "\r*\n" ";" output_lines "${text}")
-  foreach(line IN LISTS output_lines)
-    if(state STREQUAL start)
-      string(FIND "${line}" "#include \"...\" search starts here:" rv)
-      if(rv GREATER -1)
-        set(state loading)
-        set(preload 1)      # looking for include <...> now
-        string(APPEND log "  found start of include info\n")
-      else()
-        cmake_parse_implicit_include_line("${line}" "${lang}" implicit_dirs_tmp
-                                          linelog state)
-        if(linelog)
-          string(APPEND log ${linelog})
-        endif()
-        if(state STREQUAL done)
-          break()
-        endif()
-      endif()
-    elseif(state STREQUAL loading)
-      string(FIND "${line}" "End of search list." rv)
-      if(rv GREATER -1)
-        set(state done)
-        string(APPEND log "  end of search list found\n")
-        break()
-      endif()
-      if(preload)
-        string(FIND "${line}" "#include <...> search starts here:" rv)
-        if(rv GREATER -1)
-          set(preload 0)
-          string(APPEND log "  found start of implicit include info\n")
-        endif()
-        continue()
-      endif()
-      if("${line}" MATCHES "^ ")
-        string(SUBSTRING "${line}" 1 -1 line)  # remove leading space
-      endif()
-      if ("${line}" MATCHES " \\(framework directory\\)$")
-        continue() # frameworks are handled elsewhere, ignore them here
-      endif()
-      string(REPLACE "\\" "/" path "${line}")
-      list(APPEND implicit_dirs_tmp "${path}")
-      string(APPEND log "    add: [${path}]\n")
-    endif()
-  endforeach()
-
-  set(implicit_dirs "")
-  foreach(d IN LISTS implicit_dirs_tmp)
-    if(IS_ABSOLUTE "${d}")
-      get_filename_component(dir "${d}" ABSOLUTE)
-      list(APPEND implicit_dirs "${dir}")
-      string(APPEND log "  collapse include dir [${d}] ==> [${dir}]\n")
-    elseif("${d}" MATCHES [[^\.\.[\/]\.\.[\/](.*)$]])
-      # This relative path is deep enough to get out of the CMakeFiles/CMakeTmp
-      # directory where the ABI check is done.  Assume that the compiler has
-      # computed this path adaptively based on the current working directory
-      # such that the effective result is absolute.
-      get_filename_component(dir "${CMAKE_BINARY_DIR}/${CMAKE_MATCH_1}" ABSOLUTE)
-      list(APPEND implicit_dirs "${dir}")
-      string(APPEND log "  collapse relative include dir [${d}] ==> [${dir}]\n")
-    else()
-      string(APPEND log "  skipping relative include dir [${d}]\n")
-    endif()
-  endforeach()
-  list(REMOVE_DUPLICATES implicit_dirs)
-
-  # Log results.
-  if(state STREQUAL done)
-    string(APPEND log "  implicit include dirs: [${implicit_dirs}]\n")
-  else()
-    string(APPEND log "  warn: unable to parse implicit include dirs!\n")
-  endif()
-
-  # Return results.
-  set(${dir_var} "${implicit_dirs}" PARENT_SCOPE)
-  set(${log_var} "${log}" PARENT_SCOPE)
-  set(${state_var} "${state}" PARENT_SCOPE)
-
-endfunction()
diff --git a/share/cmake-3.18/Modules/CMakeParseImplicitLinkInfo.cmake b/share/cmake-3.18/Modules/CMakeParseImplicitLinkInfo.cmake
deleted file mode 100644
index 0465515..0000000
--- a/share/cmake-3.18/Modules/CMakeParseImplicitLinkInfo.cmake
+++ /dev/null
@@ -1,204 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-cmake_policy(PUSH)
-cmake_policy(SET CMP0053 NEW)
-cmake_policy(SET CMP0054 NEW)
-
-# Function parse implicit linker options.
-# This is used internally by CMake and should not be included by user
-# code.
-
-function(CMAKE_PARSE_IMPLICIT_LINK_INFO text lib_var dir_var fwk_var log_var obj_regex)
-  set(implicit_libs_tmp "")
-  set(implicit_dirs_tmp)
-  set(implicit_fwks_tmp)
-  set(log "")
-
-  # Parse implicit linker arguments.
-  set(linker "CMAKE_LINKER-NOTFOUND")
-  if(CMAKE_LINKER)
-    get_filename_component(linker ${CMAKE_LINKER} NAME)
-    string(REGEX REPLACE "([][+.*?()^$])" "\\\\\\1" linker "${linker}")
-  endif()
-  set(startfile "CMAKE_LINK_STARTFILE-NOTFOUND")
-  if(CMAKE_LINK_STARTFILE)
-    set(startfile "${CMAKE_LINK_STARTFILE}")
-  endif()
-  # Construct a regex to match linker lines.  It must match both the
-  # whole line and just the command (argv[0]).
-  set(linker_regex "^( *|.*[/\\])(${linker}|${startfile}|([^/\\]+-)?ld|collect2)[^/\\]*( |$)")
-  set(linker_exclude_regex "collect2 version |^[A-Za-z0-9_]+=|/ldfe ")
-  string(APPEND log "  link line regex: [${linker_regex}]\n")
-  string(REGEX REPLACE "\r?\n" ";" output_lines "${text}")
-  foreach(line IN LISTS output_lines)
-    set(cmd)
-    if("${line}" MATCHES "${linker_regex}" AND
-        NOT "${line}" MATCHES "${linker_exclude_regex}")
-      if(XCODE)
-        # Xcode unconditionally adds a path under the project build tree and
-        # on older versions it is not reported with proper quotes.  Remove it.
-        string(REGEX REPLACE "([][+.*()^])" "\\\\\\1" _dir_regex "${CMAKE_BINARY_DIR}")
-        string(REGEX REPLACE " -[FL]${_dir_regex}/([^ ]| [^-])+( |$)" " " xline "${line}")
-        if(NOT "x${xline}" STREQUAL "x${line}")
-          string(APPEND log "  reduced line: [${line}]\n            to: [${xline}]\n")
-          set(line "${xline}")
-        endif()
-      endif()
-      separate_arguments(args NATIVE_COMMAND "${line}")
-      list(GET args 0 cmd)
-    else()
-      #check to see if the link line is comma-separated instead of space separated
-      string(REGEX REPLACE "," " " line "${line}")
-      if("${line}" MATCHES "${linker_regex}" AND
-        NOT "${line}" MATCHES "${linker_exclude_regex}")
-        separate_arguments(args NATIVE_COMMAND "${line}")
-        list(GET args 0 cmd)
-        if("${cmd}" MATCHES "exec:")
-          # ibm xl sometimes has 'exec: ' in-front of the linker
-          list(GET args 1 cmd)
-        endif()
-      endif()
-    endif()
-    set(is_msvc 0)
-    if("${cmd}" MATCHES "${linker_regex}")
-      string(APPEND log "  link line: [${line}]\n")
-      string(REGEX REPLACE ";-([LYz]);" ";-\\1" args "${args}")
-      set(skip_value_of "")
-      foreach(arg IN LISTS args)
-        if(skip_value_of)
-          string(APPEND log "    arg [${arg}] ==> skip value of ${skip_value_of}\n")
-          set(skip_value_of "")
-        elseif("${arg}" MATCHES "^-L(.:)?[/\\]")
-          # Unix search path.
-          string(REGEX REPLACE "^-L" "" dir "${arg}")
-          list(APPEND implicit_dirs_tmp ${dir})
-          string(APPEND log "    arg [${arg}] ==> dir [${dir}]\n")
-        elseif("${arg}" MATCHES "^[-/](LIBPATH|libpath):(.+)")
-          # MSVC search path.
-          set(dir "${CMAKE_MATCH_2}")
-          list(APPEND implicit_dirs_tmp ${dir})
-          string(APPEND log "    arg [${arg}] ==> dir [${dir}]\n")
-        elseif(is_msvc AND "${arg}" STREQUAL "-link")
-          string(APPEND log "    arg [${arg}] ==> ignore MSVC cl option\n")
-        elseif(is_msvc AND "${arg}" MATCHES "^(.*\\.[Ll][Ii][Bb])$")
-          set(lib "${CMAKE_MATCH_1}")
-          list(APPEND implicit_libs_tmp ${lib})
-          string(APPEND log "    arg [${arg}] ==> lib [${lib}]\n")
-        elseif("${arg}" STREQUAL "-lto_library")
-          # ld argument "-lto_library <path>"
-          set(skip_value_of "${arg}")
-          string(APPEND log "    arg [${arg}] ==> ignore, skip following value\n")
-        elseif("${arg}" MATCHES "^-l([^:].*)$")
-          # Unix library.
-          set(lib "${CMAKE_MATCH_1}")
-          list(APPEND implicit_libs_tmp ${lib})
-          string(APPEND log "    arg [${arg}] ==> lib [${lib}]\n")
-        elseif("${arg}" MATCHES "^(.:)?[/\\].*\\.a$")
-          # Unix library full path.
-          list(APPEND implicit_libs_tmp ${arg})
-          string(APPEND log "    arg [${arg}] ==> lib [${arg}]\n")
-        elseif("${arg}" MATCHES "^[-/](DEFAULTLIB|defaultlib):(.+)")
-          # Windows library.
-          set(lib "${CMAKE_MATCH_2}")
-          list(APPEND implicit_libs_tmp ${lib})
-          string(APPEND log "    arg [${arg}] ==> lib [${lib}]\n")
-        elseif("${arg}" MATCHES "^(.:)?[/\\].*\\.o$"
-            AND obj_regex AND "${arg}" MATCHES "${obj_regex}")
-          # Object file full path.
-          list(APPEND implicit_libs_tmp ${arg})
-          string(APPEND log "    arg [${arg}] ==> obj [${arg}]\n")
-        elseif("${arg}" MATCHES "^-Y(P,)?[^0-9]")
-          # Sun search path ([^0-9] avoids conflict with Mac -Y<num>).
-          string(REGEX REPLACE "^-Y(P,)?" "" dirs "${arg}")
-          string(REPLACE ":" ";" dirs "${dirs}")
-          list(APPEND implicit_dirs_tmp ${dirs})
-          string(APPEND log "    arg [${arg}] ==> dirs [${dirs}]\n")
-        elseif("${arg}" MATCHES "^-l:")
-          # HP named library.
-          list(APPEND implicit_libs_tmp ${arg})
-          string(APPEND log "    arg [${arg}] ==> lib [${arg}]\n")
-        elseif("${arg}" MATCHES "^-z(all|default|weak)extract")
-          # Link editor option.
-          list(APPEND implicit_libs_tmp ${arg})
-          string(APPEND log "    arg [${arg}] ==> opt [${arg}]\n")
-        elseif("${arg}" STREQUAL "cl.exe")
-          string(APPEND log "    arg [${arg}] ==> recognize MSVC cl\n")
-          set(is_msvc 1)
-        else()
-          string(APPEND log "    arg [${arg}] ==> ignore\n")
-        endif()
-      endforeach()
-      break()
-    elseif("${line}" MATCHES "LPATH(=| is:? *)(.*)$")
-      string(APPEND log "  LPATH line: [${line}]\n")
-      # HP search path.
-      string(REPLACE ":" ";" paths "${CMAKE_MATCH_2}")
-      list(APPEND implicit_dirs_tmp ${paths})
-      string(APPEND log "    dirs [${paths}]\n")
-    else()
-      string(APPEND log "  ignore line: [${line}]\n")
-    endif()
-  endforeach()
-
-  # Look for library search paths reported by linker.
-  if("${output_lines}" MATCHES ";Library search paths:((;\t[^;]+)+)")
-    string(REPLACE ";\t" ";" implicit_dirs_match "${CMAKE_MATCH_1}")
-    string(APPEND log "  Library search paths: [${implicit_dirs_match}]\n")
-    list(APPEND implicit_dirs_tmp ${implicit_dirs_match})
-  endif()
-  if("${output_lines}" MATCHES ";Framework search paths:((;\t[^;]+)+)")
-    string(REPLACE ";\t" ";" implicit_fwks_match "${CMAKE_MATCH_1}")
-    string(APPEND log "  Framework search paths: [${implicit_fwks_match}]\n")
-    list(APPEND implicit_fwks_tmp ${implicit_fwks_match})
-  endif()
-
-  # Cleanup list of libraries and flags.
-  # We remove items that are not language-specific.
-  set(implicit_libs "")
-  foreach(lib IN LISTS implicit_libs_tmp)
-    if("x${lib}" MATCHES "^x(crt.*\\.o|gcc_eh.*|.*libgcc_eh.*|System.*|.*libclang_rt.*|msvcrt.*|libvcruntime.*|libucrt.*|libcmt.*)$")
-      string(APPEND log "  remove lib [${lib}]\n")
-    elseif(IS_ABSOLUTE "${lib}")
-      get_filename_component(abs "${lib}" ABSOLUTE)
-      if(NOT "x${lib}" STREQUAL "x${abs}")
-        string(APPEND log "  collapse lib [${lib}] ==> [${abs}]\n")
-      endif()
-      list(APPEND implicit_libs "${abs}")
-    else()
-      list(APPEND implicit_libs "${lib}")
-    endif()
-  endforeach()
-
-  # Cleanup list of library and framework directories.
-  set(desc_dirs "library")
-  set(desc_fwks "framework")
-  foreach(t dirs fwks)
-    set(implicit_${t} "")
-    foreach(d IN LISTS implicit_${t}_tmp)
-      get_filename_component(dir "${d}" ABSOLUTE)
-      string(FIND "${dir}" "${CMAKE_FILES_DIRECTORY}/" pos)
-      if(NOT pos LESS 0)
-        set(msg ", skipping non-system directory")
-      else()
-        set(msg "")
-        list(APPEND implicit_${t} "${dir}")
-      endif()
-      string(APPEND log "  collapse ${desc_${t}} dir [${d}] ==> [${dir}]${msg}\n")
-    endforeach()
-    list(REMOVE_DUPLICATES implicit_${t})
-  endforeach()
-
-  # Log results.
-  string(APPEND log "  implicit libs: [${implicit_libs}]\n")
-  string(APPEND log "  implicit dirs: [${implicit_dirs}]\n")
-  string(APPEND log "  implicit fwks: [${implicit_fwks}]\n")
-
-  # Return results.
-  set(${lib_var} "${implicit_libs}" PARENT_SCOPE)
-  set(${dir_var} "${implicit_dirs}" PARENT_SCOPE)
-  set(${fwk_var} "${implicit_fwks}" PARENT_SCOPE)
-  set(${log_var} "${log}" PARENT_SCOPE)
-endfunction()
-
-cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/CMakePlatformId.h.in b/share/cmake-3.18/Modules/CMakePlatformId.h.in
deleted file mode 100644
index 40668a3..0000000
--- a/share/cmake-3.18/Modules/CMakePlatformId.h.in
+++ /dev/null
@@ -1,286 +0,0 @@
-#define STRINGIFY_HELPER(X) #X
-#define STRINGIFY(X) STRINGIFY_HELPER(X)
-
-/* Identify known platforms by name.  */
-#if defined(__linux) || defined(__linux__) || defined(linux)
-# define PLATFORM_ID "Linux"
-
-#elif defined(__CYGWIN__)
-# define PLATFORM_ID "Cygwin"
-
-#elif defined(__MINGW32__)
-# define PLATFORM_ID "MinGW"
-
-#elif defined(__APPLE__)
-# define PLATFORM_ID "Darwin"
-
-#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
-# define PLATFORM_ID "Windows"
-
-#elif defined(__FreeBSD__) || defined(__FreeBSD)
-# define PLATFORM_ID "FreeBSD"
-
-#elif defined(__NetBSD__) || defined(__NetBSD)
-# define PLATFORM_ID "NetBSD"
-
-#elif defined(__OpenBSD__) || defined(__OPENBSD)
-# define PLATFORM_ID "OpenBSD"
-
-#elif defined(__sun) || defined(sun)
-# define PLATFORM_ID "SunOS"
-
-#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
-# define PLATFORM_ID "AIX"
-
-#elif defined(__hpux) || defined(__hpux__)
-# define PLATFORM_ID "HP-UX"
-
-#elif defined(__HAIKU__)
-# define PLATFORM_ID "Haiku"
-
-#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
-# define PLATFORM_ID "BeOS"
-
-#elif defined(__QNX__) || defined(__QNXNTO__)
-# define PLATFORM_ID "QNX"
-
-#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
-# define PLATFORM_ID "Tru64"
-
-#elif defined(__riscos) || defined(__riscos__)
-# define PLATFORM_ID "RISCos"
-
-#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
-# define PLATFORM_ID "SINIX"
-
-#elif defined(__UNIX_SV__)
-# define PLATFORM_ID "UNIX_SV"
-
-#elif defined(__bsdos__)
-# define PLATFORM_ID "BSDOS"
-
-#elif defined(_MPRAS) || defined(MPRAS)
-# define PLATFORM_ID "MP-RAS"
-
-#elif defined(__osf) || defined(__osf__)
-# define PLATFORM_ID "OSF1"
-
-#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
-# define PLATFORM_ID "SCO_SV"
-
-#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
-# define PLATFORM_ID "ULTRIX"
-
-#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
-# define PLATFORM_ID "Xenix"
-
-#elif defined(__WATCOMC__)
-# if defined(__LINUX__)
-#  define PLATFORM_ID "Linux"
-
-# elif defined(__DOS__)
-#  define PLATFORM_ID "DOS"
-
-# elif defined(__OS2__)
-#  define PLATFORM_ID "OS2"
-
-# elif defined(__WINDOWS__)
-#  define PLATFORM_ID "Windows3x"
-
-# elif defined(__VXWORKS__)
-#  define PLATFORM_ID "VxWorks"
-
-# else /* unknown platform */
-#  define PLATFORM_ID
-# endif
-
-#elif defined(__INTEGRITY)
-# if defined(INT_178B)
-#  define PLATFORM_ID "Integrity178"
-
-# else /* regular Integrity */
-#  define PLATFORM_ID "Integrity"
-# endif
-
-#else /* unknown platform */
-# define PLATFORM_ID
-
-#endif
-
-/* For windows compilers MSVC and Intel we can determine
-   the architecture of the compiler being used.  This is because
-   the compilers do not have flags that can change the architecture,
-   but rather depend on which compiler is being used
-*/
-#if defined(_WIN32) && defined(_MSC_VER)
-# if defined(_M_IA64)
-#  define ARCHITECTURE_ID "IA64"
-
-# elif defined(_M_X64) || defined(_M_AMD64)
-#  define ARCHITECTURE_ID "x64"
-
-# elif defined(_M_IX86)
-#  define ARCHITECTURE_ID "X86"
-
-# elif defined(_M_ARM64)
-#  define ARCHITECTURE_ID "ARM64"
-
-# elif defined(_M_ARM)
-#  if _M_ARM == 4
-#   define ARCHITECTURE_ID "ARMV4I"
-#  elif _M_ARM == 5
-#   define ARCHITECTURE_ID "ARMV5I"
-#  else
-#   define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
-#  endif
-
-# elif defined(_M_MIPS)
-#  define ARCHITECTURE_ID "MIPS"
-
-# elif defined(_M_SH)
-#  define ARCHITECTURE_ID "SHx"
-
-# else /* unknown architecture */
-#  define ARCHITECTURE_ID ""
-# endif
-
-#elif defined(__WATCOMC__)
-# if defined(_M_I86)
-#  define ARCHITECTURE_ID "I86"
-
-# elif defined(_M_IX86)
-#  define ARCHITECTURE_ID "X86"
-
-# else /* unknown architecture */
-#  define ARCHITECTURE_ID ""
-# endif
-
-#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
-# if defined(__ICCARM__)
-#  define ARCHITECTURE_ID "ARM"
-
-# elif defined(__ICCRX__)
-#  define ARCHITECTURE_ID "RX"
-
-# elif defined(__ICCRH850__)
-#  define ARCHITECTURE_ID "RH850"
-
-# elif defined(__ICCRL78__)
-#  define ARCHITECTURE_ID "RL78"
-
-# elif defined(__ICCRISCV__)
-#  define ARCHITECTURE_ID "RISCV"
-
-# elif defined(__ICCAVR__)
-#  define ARCHITECTURE_ID "AVR"
-
-# elif defined(__ICC430__)
-#  define ARCHITECTURE_ID "MSP430"
-
-# elif defined(__ICCV850__)
-#  define ARCHITECTURE_ID "V850"
-
-# elif defined(__ICC8051__)
-#  define ARCHITECTURE_ID "8051"
-
-# else /* unknown architecture */
-#  define ARCHITECTURE_ID ""
-# endif
-
-#elif defined(__ghs__)
-# if defined(__PPC64__)
-#  define ARCHITECTURE_ID "PPC64"
-
-# elif defined(__ppc__)
-#  define ARCHITECTURE_ID "PPC"
-
-# elif defined(__ARM__)
-#  define ARCHITECTURE_ID "ARM"
-
-# elif defined(__x86_64__)
-#  define ARCHITECTURE_ID "x64"
-
-# elif defined(__i386__)
-#  define ARCHITECTURE_ID "X86"
-
-# else /* unknown architecture */
-#  define ARCHITECTURE_ID ""
-# endif
-#else
-#  define ARCHITECTURE_ID
-#endif
-
-/* Convert integer to decimal digit literals.  */
-#define DEC(n)                   \
-  ('0' + (((n) / 10000000)%10)), \
-  ('0' + (((n) / 1000000)%10)),  \
-  ('0' + (((n) / 100000)%10)),   \
-  ('0' + (((n) / 10000)%10)),    \
-  ('0' + (((n) / 1000)%10)),     \
-  ('0' + (((n) / 100)%10)),      \
-  ('0' + (((n) / 10)%10)),       \
-  ('0' +  ((n) % 10))
-
-/* Convert integer to hex digit literals.  */
-#define HEX(n)             \
-  ('0' + ((n)>>28 & 0xF)), \
-  ('0' + ((n)>>24 & 0xF)), \
-  ('0' + ((n)>>20 & 0xF)), \
-  ('0' + ((n)>>16 & 0xF)), \
-  ('0' + ((n)>>12 & 0xF)), \
-  ('0' + ((n)>>8  & 0xF)), \
-  ('0' + ((n)>>4  & 0xF)), \
-  ('0' + ((n)     & 0xF))
-
-/* Construct a string literal encoding the version number components. */
-#ifdef COMPILER_VERSION_MAJOR
-char const info_version[] = {
-  'I', 'N', 'F', 'O', ':',
-  'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
-  COMPILER_VERSION_MAJOR,
-# ifdef COMPILER_VERSION_MINOR
-  '.', COMPILER_VERSION_MINOR,
-#  ifdef COMPILER_VERSION_PATCH
-   '.', COMPILER_VERSION_PATCH,
-#   ifdef COMPILER_VERSION_TWEAK
-    '.', COMPILER_VERSION_TWEAK,
-#   endif
-#  endif
-# endif
-  ']','\0'};
-#endif
-
-/* Construct a string literal encoding the internal version number. */
-#ifdef COMPILER_VERSION_INTERNAL
-char const info_version_internal[] = {
-  'I', 'N', 'F', 'O', ':',
-  'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',
-  'i','n','t','e','r','n','a','l','[',
-  COMPILER_VERSION_INTERNAL,']','\0'};
-#endif
-
-/* Construct a string literal encoding the version number components. */
-#ifdef SIMULATE_VERSION_MAJOR
-char const info_simulate_version[] = {
-  'I', 'N', 'F', 'O', ':',
-  's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
-  SIMULATE_VERSION_MAJOR,
-# ifdef SIMULATE_VERSION_MINOR
-  '.', SIMULATE_VERSION_MINOR,
-#  ifdef SIMULATE_VERSION_PATCH
-   '.', SIMULATE_VERSION_PATCH,
-#   ifdef SIMULATE_VERSION_TWEAK
-    '.', SIMULATE_VERSION_TWEAK,
-#   endif
-#  endif
-# endif
-  ']','\0'};
-#endif
-
-/* Construct the string literal in pieces to prevent the source from
-   getting matched.  Store it in a pointer rather than an array
-   because some compilers will just produce instructions to fill the
-   array rather than assigning a pointer to a static array.  */
-char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
-char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
-
diff --git a/share/cmake-3.18/Modules/CMakePrintHelpers.cmake b/share/cmake-3.18/Modules/CMakePrintHelpers.cmake
deleted file mode 100644
index d652ffa..0000000
--- a/share/cmake-3.18/Modules/CMakePrintHelpers.cmake
+++ /dev/null
@@ -1,147 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CMakePrintHelpers
------------------
-
-Convenience functions for printing properties and variables, useful
-e.g. for debugging.
-
-::
-
-  cmake_print_properties([TARGETS target1 ..  targetN]
-                        [SOURCES source1 .. sourceN]
-                        [DIRECTORIES dir1 .. dirN]
-                        [TESTS test1 .. testN]
-                        [CACHE_ENTRIES entry1 .. entryN]
-                        PROPERTIES prop1 .. propN )
-
-This function prints the values of the properties of the given targets,
-source files, directories, tests or cache entries.  Exactly one of the
-scope keywords must be used.  Example::
-
-  cmake_print_properties(TARGETS foo bar PROPERTIES
-                         LOCATION INTERFACE_INCLUDE_DIRECTORIES)
-
-This will print the LOCATION and INTERFACE_INCLUDE_DIRECTORIES properties for
-both targets foo and bar.
-
-::
-
-  cmake_print_variables(var1 var2 ..  varN)
-
-This function will print the name of each variable followed by its value.
-Example::
-
-  cmake_print_variables(CMAKE_C_COMPILER CMAKE_MAJOR_VERSION DOES_NOT_EXIST)
-
-Gives::
-
-  -- CMAKE_C_COMPILER="/usr/bin/gcc" ; CMAKE_MAJOR_VERSION="2" ; DOES_NOT_EXIST=""
-#]=======================================================================]
-
-function(cmake_print_variables)
-  set(msg "")
-  foreach(var ${ARGN})
-    if(msg)
-      string(APPEND msg " ; ")
-    endif()
-    string(APPEND msg "${var}=\"${${var}}\"")
-  endforeach()
-  message(STATUS "${msg}")
-endfunction()
-
-
-function(cmake_print_properties)
-  set(options )
-  set(oneValueArgs )
-  set(multiValueArgs TARGETS SOURCES TESTS DIRECTORIES CACHE_ENTRIES PROPERTIES )
-
-  cmake_parse_arguments(CPP "${options}" "${oneValueArgs}" "${multiValueArgs}"  ${ARGN})
-
-  if(CPP_UNPARSED_ARGUMENTS)
-    message(FATAL_ERROR "Unknown keywords given to cmake_print_properties(): \"${CPP_UNPARSED_ARGUMENTS}\"")
-    return()
-  endif()
-
-  if(NOT CPP_PROPERTIES)
-    message(FATAL_ERROR "Required argument PROPERTIES missing in cmake_print_properties() call")
-    return()
-  endif()
-
-  set(mode)
-  set(items)
-  set(keyword)
-
-  if(CPP_TARGETS)
-    set(items ${CPP_TARGETS})
-    set(mode ${mode} TARGETS)
-    set(keyword TARGET)
-  endif()
-
-  if(CPP_SOURCES)
-    set(items ${CPP_SOURCES})
-    set(mode ${mode} SOURCES)
-    set(keyword SOURCE)
-  endif()
-
-  if(CPP_TESTS)
-    set(items ${CPP_TESTS})
-    set(mode ${mode} TESTS)
-    set(keyword TEST)
-  endif()
-
-  if(CPP_DIRECTORIES)
-    set(items ${CPP_DIRECTORIES})
-    set(mode ${mode} DIRECTORIES)
-    set(keyword DIRECTORY)
-  endif()
-
-  if(CPP_CACHE_ENTRIES)
-    set(items ${CPP_CACHE_ENTRIES})
-    set(mode ${mode} CACHE_ENTRIES)
-    set(keyword CACHE)
-  endif()
-
-  if(NOT mode)
-    message(FATAL_ERROR "Mode keyword missing in cmake_print_properties() call, must be one of TARGETS SOURCES TESTS DIRECTORIES CACHE_ENTRIES PROPERTIES")
-    return()
-  endif()
-
-  list(LENGTH mode modeLength)
-  if("${modeLength}" GREATER 1)
-    message(FATAL_ERROR "Multiple mode keyword used in cmake_print_properties() call, it must be exactly one of TARGETS SOURCES TESTS DIRECTORIES CACHE_ENTRIES PROPERTIES")
-    return()
-  endif()
-
-  set(msg "\n")
-  foreach(item ${items})
-
-    set(itemExists TRUE)
-    if(keyword STREQUAL "TARGET")
-      if(NOT TARGET ${item})
-      set(itemExists FALSE)
-      string(APPEND msg "\n No such TARGET \"${item}\" !\n\n")
-      endif()
-    endif()
-
-    if (itemExists)
-      string(APPEND msg " Properties for ${keyword} ${item}:\n")
-      foreach(prop ${CPP_PROPERTIES})
-
-        get_property(propertySet ${keyword} ${item} PROPERTY "${prop}" SET)
-
-        if(propertySet)
-          get_property(property ${keyword} ${item} PROPERTY "${prop}")
-          string(APPEND msg "   ${item}.${prop} = \"${property}\"\n")
-        else()
-          string(APPEND msg "   ${item}.${prop} = <NOTFOUND>\n")
-        endif()
-      endforeach()
-    endif()
-
-  endforeach()
-  message(STATUS "${msg}")
-
-endfunction()
diff --git a/share/cmake-3.18/Modules/CMakeSwiftInformation.cmake b/share/cmake-3.18/Modules/CMakeSwiftInformation.cmake
deleted file mode 100644
index 8f0909c..0000000
--- a/share/cmake-3.18/Modules/CMakeSwiftInformation.cmake
+++ /dev/null
@@ -1,103 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-if(UNIX)
-  set(CMAKE_Swift_OUTPUT_EXTENSION .o)
-else()
-  set(CMAKE_Swift_OUTPUT_EXTENSION .obj)
-endif()
-
-# Load compiler-specific information.
-if(CMAKE_Swift_COMPILER_ID)
-  include(Compiler/${CMAKE_Swift_COMPILER_ID}-Swift OPTIONAL)
-
-  if(CMAKE_SYSTEM_PROCESSOR)
-    include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_Swift_COMPILER_ID}-Swift-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL)
-  endif()
-  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_Swift_COMPILER_ID}-Swift OPTIONAL)
-endif()
-
-set(CMAKE_EXE_EXPORTS_Swift_FLAG "-emit-module -emit-module-path <SWIFT_MODULE> ${CMAKE_Swift_IMPLIB_LINKER_FLAGS}")
-
-set(CMAKE_INCLUDE_FLAG_Swift "-I ")
-if(CMAKE_SYSTEM_NAME STREQUAL Darwin)
-  set(CMAKE_SHARED_LIBRARY_SONAME_Swift_FLAG "-Xlinker -install_name -Xlinker ")
-elseif(NOT CMAKE_SYSTEM_NAME STREQUAL Windows)
-  set(CMAKE_SHARED_LIBRARY_SONAME_Swift_FLAG "-Xlinker -soname -Xlinker ")
-endif()
-
-if(NOT CMAKE_SYSTEM_NAME STREQUAL Windows)
-  set(CMAKE_EXECUTABLE_RUNTIME_Swift_FLAG "-Xlinker -rpath -Xlinker ")
-  set(CMAKE_SHARED_LIBRARY_RUNTIME_Swift_FLAG "-Xlinker -rpath -Xlinker ")
-  if(CMAKE_SYSTEM_NAME STREQUAL Darwin)
-    set(CMAKE_EXECUTABLE_RUNTIME_Swift_FLAG_SEP "")
-    set(CMAKE_SHARED_LIBRARY_RUNTIME_Swift_FLAG_SEP "")
-  else()
-    set(CMAKE_EXECUTABLE_RUNTIME_Swift_FLAG_SEP ":")
-    set(CMAKE_SHARED_LIBRARY_RUNTIME_Swift_FLAG_SEP ":")
-  endif()
-endif()
-
-set(CMAKE_Swift_COMPILE_OPTIONS_TARGET "-target ")
-set(CMAKE_Swift_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN "-tools-directory ")
-# NOTE(compnerd) the `-sdk` support is not yet ready in the compiler; when that
-# is fully working, we should be able to enable this.
-# set(CMAKE_Swift_COMPILE_OPTIONS_SYSROOT "-sdk ")
-# NOTE(compnerd) do not setup `-frontend` as we use the compiler as the driver
-# during the link phase and use that to drive the compilation
-set(CMAKE_Swift_COMPILER_ARG1 "")
-set(CMAKE_Swift_DEFINE_FLAG -D)
-set(CMAKE_Swift_FRAMEWORK_SEARCH_FLAG "-F ")
-set(CMAKE_Swift_LIBRARY_PATH_FLAG "-L ")
-set(CMAKE_Swift_LIBRARY_PATH_TERMINATOR "")
-set(CMAKE_Swift_LINK_LIBRARY_FLAG "-l")
-set(CMAKE_Swift_LINKER_WRAPPER_FLAG "-Xlinker" " ")
-set(CMAKE_Swift_RESPONSE_FILE_LINK_FLAG @)
-
-set(CMAKE_Swift_LINKER_PREFERENCE 50)
-set(CMAKE_Swift_LINKER_PREFERENCE_PROPAGATES 1)
-
-# NOTE(compnerd) use the short form for convenience and ease of search.  They
-# are treated equivalent to their long form names as well as custom Swift
-# specific names.
-set(CMAKE_Swift_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreaded -libc MT)
-set(CMAKE_Swift_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDLL -libc MD)
-set(CMAKE_Swift_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebug -libc MTd)
-set(CMAKE_Swift_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebugDLL -libc MDd)
-
-set(CMAKE_Swift_FLAGS_DEBUG_INIT "-g")
-set(CMAKE_Swift_FLAGS_RELEASE_INIT "-O")
-set(CMAKE_Swift_FLAGS_RELWITHDEBINFO_INIT "-O -g")
-set(CMAKE_Swift_FLAGS_MINSIZEREL_INIT "-Osize")
-
-cmake_initialize_per_config_variable(CMAKE_Swift_FLAGS "Swift Compiler Flags")
-
-# NOTE(compnerd) we do not have an object compile rule since we build the objects as part of the link step
-if(NOT CMAKE_Swift_COMPILE_OBJECT)
-  set(CMAKE_Swift_COMPILE_OBJECT ":")
-endif()
-
-if(NOT CMAKE_Swift_NUM_THREADS MATCHES "^[0-9]+$")
-  cmake_host_system_information(RESULT CMAKE_Swift_NUM_THREADS QUERY NUMBER_OF_LOGICAL_CORES)
-endif()
-
-if(NOT CMAKE_Swift_CREATE_SHARED_LIBRARY)
-  set(CMAKE_Swift_CREATE_SHARED_LIBRARY "<CMAKE_Swift_COMPILER> -output-file-map <SWIFT_OUTPUT_FILE_MAP> -incremental -j ${CMAKE_Swift_NUM_THREADS} -emit-library -o <TARGET> -module-name <SWIFT_MODULE_NAME> -module-link-name <SWIFT_LIBRARY_NAME> -emit-module -emit-module-path <SWIFT_MODULE> -emit-dependencies <DEFINES> <FLAGS> <INCLUDES> <SWIFT_SOURCES> <LINK_FLAGS> <SONAME_FLAG> <TARGET_INSTALLNAME_DIR><TARGET_SONAME> ${CMAKE_Swift_IMPLIB_LINKER_FLAGS} <LINK_LIBRARIES>")
-endif()
-
-if(NOT CMAKE_Swift_CREATE_SHARED_MODULE)
-  set(CMAKE_Swift_CREATE_SHARED_MODULE ${CMAKE_Swift_CREATE_SHARED_LIBRARY})
-endif()
-
-if(NOT CMAKE_Swift_LINK_EXECUTABLE)
-  set(CMAKE_Swift_LINK_EXECUTABLE "<CMAKE_Swift_COMPILER> -output-file-map <SWIFT_OUTPUT_FILE_MAP> -incremental -j ${CMAKE_Swift_NUM_THREADS} -emit-executable -o <TARGET> -emit-dependencies <DEFINES> <FLAGS> <INCLUDES> <SWIFT_SOURCES> <LINK_FLAGS> <LINK_LIBRARIES>")
-endif()
-
-if(NOT CMAKE_Swift_CREATE_STATIC_LIBRARY)
-  set(CMAKE_Swift_CREATE_STATIC_LIBRARY "<CMAKE_Swift_COMPILER> -output-file-map <SWIFT_OUTPUT_FILE_MAP> -incremental -j ${CMAKE_Swift_NUM_THREADS} -emit-library -static -o <TARGET> -module-name <SWIFT_MODULE_NAME> -module-link-name <SWIFT_LIBRARY_NAME> -emit-module -emit-module-path <SWIFT_MODULE> -emit-dependencies <DEFINES> <FLAGS> <INCLUDES> <SWIFT_SOURCES> <LINK_FLAGS> <LINK_LIBRARIES>")
-
-  set(CMAKE_Swift_ARCHIVE_CREATE "<CMAKE_AR> crs <TARGET> <OBJECTS>")
-  set(CMAKE_Swift_ARCHIVE_FINISH "")
-endif()
-
-set(CMAKE_Swift_INFORMATION_LOADED 1)
diff --git a/share/cmake-3.18/Modules/CMakeSystemSpecificInformation.cmake b/share/cmake-3.18/Modules/CMakeSystemSpecificInformation.cmake
deleted file mode 100644
index ea3a445..0000000
--- a/share/cmake-3.18/Modules/CMakeSystemSpecificInformation.cmake
+++ /dev/null
@@ -1,58 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# This file is included by cmGlobalGenerator::EnableLanguage.
-# It is included after the compiler has been determined, so
-# we know things like the compiler name and if the compiler is gnu.
-
-# before cmake 2.6 these variables were set in cmMakefile.cxx. This is still
-# done to keep scripts and custom language and compiler modules working.
-# But they are reset here and set again in the platform files for the target
-# platform, so they can be used for testing the target platform instead
-# of testing the host platform.
-set(APPLE  )
-set(UNIX   )
-set(CYGWIN )
-set(WIN32  )
-
-
-# include Generic system information
-include(CMakeGenericSystem)
-
-# 2. now include SystemName.cmake file to set the system specific information
-set(CMAKE_SYSTEM_INFO_FILE Platform/${CMAKE_SYSTEM_NAME})
-
-include(${CMAKE_SYSTEM_INFO_FILE} OPTIONAL RESULT_VARIABLE _INCLUDED_SYSTEM_INFO_FILE)
-
-if(NOT _INCLUDED_SYSTEM_INFO_FILE)
-  message("System is unknown to cmake, create:\n${CMAKE_SYSTEM_INFO_FILE}"
-          " to use this system, please post your config file on "
-          "discourse.cmake.org so it can be added to cmake")
-  if(EXISTS ${CMAKE_BINARY_DIR}/CMakeCache.txt)
-    configure_file(${CMAKE_BINARY_DIR}/CMakeCache.txt
-                   ${CMAKE_BINARY_DIR}/CopyOfCMakeCache.txt COPYONLY)
-    message("Your CMakeCache.txt file was copied to CopyOfCMakeCache.txt. "
-            "Please post that file on discourse.cmake.org.")
-  endif()
-endif()
-
-# optionally include a file which can do extra-generator specific things, e.g.
-# CMakeFindEclipseCDT4.cmake asks gcc for the system include dirs for the Eclipse CDT4 generator
-if(CMAKE_EXTRA_GENERATOR)
-  string(REPLACE " " "" _CMAKE_EXTRA_GENERATOR_NO_SPACES ${CMAKE_EXTRA_GENERATOR} )
-  include("CMakeFind${_CMAKE_EXTRA_GENERATOR_NO_SPACES}" OPTIONAL)
-endif()
-
-
-# for most systems a module is the same as a shared library
-# so unless the variable CMAKE_MODULE_EXISTS is set just
-# copy the values from the LIBRARY variables
-# this has to be done after the system information has been loaded
-if(NOT CMAKE_MODULE_EXISTS)
-  set(CMAKE_SHARED_MODULE_PREFIX "${CMAKE_SHARED_LIBRARY_PREFIX}")
-  set(CMAKE_SHARED_MODULE_SUFFIX "${CMAKE_SHARED_LIBRARY_SUFFIX}")
-endif()
-
-
-set(CMAKE_SYSTEM_SPECIFIC_INFORMATION_LOADED 1)
diff --git a/share/cmake-3.18/Modules/CMakeTestCCompiler.cmake b/share/cmake-3.18/Modules/CMakeTestCCompiler.cmake
deleted file mode 100644
index 3734ec4..0000000
--- a/share/cmake-3.18/Modules/CMakeTestCCompiler.cmake
+++ /dev/null
@@ -1,98 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-if(CMAKE_C_COMPILER_FORCED)
-  # The compiler configuration was forced by the user.
-  # Assume the user has configured all compiler information.
-  set(CMAKE_C_COMPILER_WORKS TRUE)
-  return()
-endif()
-
-include(CMakeTestCompilerCommon)
-
-# work around enforced code signing and / or missing exectuable target type
-set(__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE ${CMAKE_TRY_COMPILE_TARGET_TYPE})
-if(_CMAKE_FEATURE_DETECTION_TARGET_TYPE)
-  set(CMAKE_TRY_COMPILE_TARGET_TYPE ${_CMAKE_FEATURE_DETECTION_TARGET_TYPE})
-endif()
-
-# Remove any cached result from an older CMake version.
-# We now store this in CMakeCCompiler.cmake.
-unset(CMAKE_C_COMPILER_WORKS CACHE)
-
-# Try to identify the ABI and configure it into CMakeCCompiler.cmake
-include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerABI.cmake)
-CMAKE_DETERMINE_COMPILER_ABI(C ${CMAKE_ROOT}/Modules/CMakeCCompilerABI.c)
-if(CMAKE_C_ABI_COMPILED)
-  # The compiler worked so skip dedicated test below.
-  set(CMAKE_C_COMPILER_WORKS TRUE)
-  message(STATUS "Check for working C compiler: ${CMAKE_C_COMPILER} - skipped")
-endif()
-
-# This file is used by EnableLanguage in cmGlobalGenerator to
-# determine that that selected C compiler can actually compile
-# and link the most basic of programs.   If not, a fatal error
-# is set and cmake stops processing commands and will not generate
-# any makefiles or projects.
-if(NOT CMAKE_C_COMPILER_WORKS)
-  PrintTestCompilerStatus("C")
-  __TestCompiler_setTryCompileTargetType()
-  file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testCCompiler.c
-    "#ifdef __cplusplus\n"
-    "# error \"The CMAKE_C_COMPILER is set to a C++ compiler\"\n"
-    "#endif\n"
-    "#if defined(__CLASSIC_C__)\n"
-    "int main(argc, argv)\n"
-    "  int argc;\n"
-    "  char* argv[];\n"
-    "#else\n"
-    "int main(int argc, char* argv[])\n"
-    "#endif\n"
-    "{ (void)argv; return argc-1;}\n")
-  try_compile(CMAKE_C_COMPILER_WORKS ${CMAKE_BINARY_DIR}
-    ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testCCompiler.c
-    OUTPUT_VARIABLE __CMAKE_C_COMPILER_OUTPUT)
-  # Move result from cache to normal variable.
-  set(CMAKE_C_COMPILER_WORKS ${CMAKE_C_COMPILER_WORKS})
-  unset(CMAKE_C_COMPILER_WORKS CACHE)
-  __TestCompiler_restoreTryCompileTargetType()
-  if(NOT CMAKE_C_COMPILER_WORKS)
-    PrintTestCompilerResult(CHECK_FAIL "broken")
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-      "Determining if the C compiler works failed with "
-      "the following output:\n${__CMAKE_C_COMPILER_OUTPUT}\n\n")
-    string(REPLACE "\n" "\n  " _output "${__CMAKE_C_COMPILER_OUTPUT}")
-    message(FATAL_ERROR "The C compiler\n  \"${CMAKE_C_COMPILER}\"\n"
-      "is not able to compile a simple test program.\nIt fails "
-      "with the following output:\n  ${_output}\n\n"
-      "CMake will not be able to correctly generate this project.")
-  endif()
-  PrintTestCompilerResult(CHECK_PASS "works")
-  file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-    "Determining if the C compiler works passed with "
-    "the following output:\n${__CMAKE_C_COMPILER_OUTPUT}\n\n")
-endif()
-
-# Try to identify the compiler features
-include(${CMAKE_ROOT}/Modules/CMakeDetermineCompileFeatures.cmake)
-CMAKE_DETERMINE_COMPILE_FEATURES(C)
-
-# Re-configure to save learned information.
-configure_file(
-  ${CMAKE_ROOT}/Modules/CMakeCCompiler.cmake.in
-  ${CMAKE_PLATFORM_INFO_DIR}/CMakeCCompiler.cmake
-  @ONLY
-  )
-include(${CMAKE_PLATFORM_INFO_DIR}/CMakeCCompiler.cmake)
-
-if(CMAKE_C_SIZEOF_DATA_PTR)
-  foreach(f ${CMAKE_C_ABI_FILES})
-    include(${f})
-  endforeach()
-  unset(CMAKE_C_ABI_FILES)
-endif()
-
-set(CMAKE_TRY_COMPILE_TARGET_TYPE ${__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE})
-unset(__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE)
-unset(__CMAKE_C_COMPILER_OUTPUT)
diff --git a/share/cmake-3.18/Modules/CMakeTestCSharpCompiler.cmake b/share/cmake-3.18/Modules/CMakeTestCSharpCompiler.cmake
deleted file mode 100644
index 1119a45..0000000
--- a/share/cmake-3.18/Modules/CMakeTestCSharpCompiler.cmake
+++ /dev/null
@@ -1,67 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-if(CMAKE_CSharp_COMPILER_FORCED)
-  # The compiler configuration was forced by the user.
-  # Assume the user has configured all compiler information.
-  set(CMAKE_CSharp_COMPILER_WORKS TRUE)
-  return()
-endif()
-
-include(CMakeTestCompilerCommon)
-
-unset(CMAKE_CSharp_COMPILER_WORKS CACHE)
-
-set(test_compile_file "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testCSharpCompiler.cs")
-
-# This file is used by EnableLanguage in cmGlobalGenerator to
-# determine that the selected C# compiler can actually compile
-# and link the most basic of programs. If not, a fatal error
-# is set and cmake stops processing commands and will not generate
-# any makefiles or projects.
-if(NOT CMAKE_CSharp_COMPILER_WORKS)
-  # Don't call PrintTestCompilerStatus() because the "C#" we want to pass
-  # as the LANG doesn't match with the variable name "CMAKE_CSharp_COMPILER"
-  message(CHECK_START "Check for working C# compiler: ${CMAKE_CSharp_COMPILER}")
-  file(WRITE "${test_compile_file}"
-    "namespace Test {"
-    "   public class CSharp {"
-    "       static void Main(string[] args) {}"
-    "   }"
-    "}"
-    )
-  try_compile(CMAKE_CSharp_COMPILER_WORKS ${CMAKE_BINARY_DIR} "${test_compile_file}"
-    OUTPUT_VARIABLE __CMAKE_CSharp_COMPILER_OUTPUT
-    )
-  # Move result from cache to normal variable.
-  set(CMAKE_CSharp_COMPILER_WORKS ${CMAKE_CSharp_COMPILER_WORKS})
-  unset(CMAKE_CSharp_COMPILER_WORKS CACHE)
-  set(CSharp_TEST_WAS_RUN 1)
-endif()
-
-if(NOT CMAKE_CSharp_COMPILER_WORKS)
-  PrintTestCompilerResult(CHECK_FAIL "broken")
-  file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-    "Determining if the C# compiler works failed with "
-    "the following output:\n${__CMAKE_CSharp_COMPILER_OUTPUT}\n\n")
-  string(REPLACE "\n" "\n  " _output "${__CMAKE_CSharp_COMPILER_OUTPUT}")
-  message(FATAL_ERROR "The C# compiler\n  \"${CMAKE_CSharp_COMPILER}\"\n"
-    "is not able to compile a simple test program.\nIt fails "
-    "with the following output:\n  ${_output}\n\n"
-    "CMake will not be able to correctly generate this project.")
-else()
-  if(CSharp_TEST_WAS_RUN)
-    PrintTestCompilerResult(CHECK_PASS "works")
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-      "Determining if the C# compiler works passed with "
-      "the following output:\n${__CMAKE_CSharp_COMPILER_OUTPUT}\n\n")
-  endif()
-
-  # Re-configure to save learned information.
-  configure_file(
-    ${CMAKE_ROOT}/Modules/CMakeCSharpCompiler.cmake.in
-    ${CMAKE_PLATFORM_INFO_DIR}/CMakeCSharpCompiler.cmake
-    @ONLY
-    )
-  include(${CMAKE_PLATFORM_INFO_DIR}/CMakeCSharpCompiler.cmake)
-endif()
diff --git a/share/cmake-3.18/Modules/CMakeTestCUDACompiler.cmake b/share/cmake-3.18/Modules/CMakeTestCUDACompiler.cmake
deleted file mode 100644
index a18947b..0000000
--- a/share/cmake-3.18/Modules/CMakeTestCUDACompiler.cmake
+++ /dev/null
@@ -1,98 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-if(CMAKE_CUDA_COMPILER_FORCED)
-  # The compiler configuration was forced by the user.
-  # Assume the user has configured all compiler information.
-  set(CMAKE_CUDA_COMPILER_WORKS TRUE)
-  return()
-endif()
-
-include(CMakeTestCompilerCommon)
-
-# Remove any cached result from an older CMake version.
-# We now store this in CMakeCUDACompiler.cmake.
-unset(CMAKE_CUDA_COMPILER_WORKS CACHE)
-
-# Try to identify the ABI and configure it into CMakeCUDACompiler.cmake
-include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerABI.cmake)
-CMAKE_DETERMINE_COMPILER_ABI(CUDA ${CMAKE_ROOT}/Modules/CMakeCUDACompilerABI.cu)
-if(CMAKE_CUDA_ABI_COMPILED)
-  # The compiler worked so skip dedicated test below.
-  set(CMAKE_CUDA_COMPILER_WORKS TRUE)
-  message(STATUS "Check for working CUDA compiler: ${CMAKE_CUDA_COMPILER} - skipped")
-endif()
-
-# This file is used by EnableLanguage in cmGlobalGenerator to
-# determine that the selected cuda compiler can actually compile
-# and link the most basic of programs.   If not, a fatal error
-# is set and cmake stops processing commands and will not generate
-# any makefiles or projects.
-if(NOT CMAKE_CUDA_COMPILER_WORKS)
-  PrintTestCompilerStatus("CUDA")
-  file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/main.cu
-    "#ifndef __CUDACC__\n"
-    "# error \"The CMAKE_CUDA_COMPILER is set to an invalid CUDA compiler\"\n"
-    "#endif\n"
-    "int main(){return 0;}\n")
-
-  try_compile(CMAKE_CUDA_COMPILER_WORKS ${CMAKE_BINARY_DIR}
-    ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/main.cu
-    OUTPUT_VARIABLE __CMAKE_CUDA_COMPILER_OUTPUT)
-
-  # Move result from cache to normal variable.
-  set(CMAKE_CUDA_COMPILER_WORKS ${CMAKE_CUDA_COMPILER_WORKS})
-  unset(CMAKE_CUDA_COMPILER_WORKS CACHE)
-  if(NOT CMAKE_CUDA_COMPILER_WORKS)
-    PrintTestCompilerResult(CHECK_FAIL "broken")
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-      "Determining if the CUDA compiler works failed with "
-      "the following output:\n${__CMAKE_CUDA_COMPILER_OUTPUT}\n\n")
-    string(REPLACE "\n" "\n  " _output "${__CMAKE_CUDA_COMPILER_OUTPUT}")
-    message(FATAL_ERROR "The CUDA compiler\n  \"${CMAKE_CUDA_COMPILER}\"\n"
-      "is not able to compile a simple test program.\nIt fails "
-      "with the following output:\n  ${_output}\n\n"
-      "CMake will not be able to correctly generate this project.")
-  endif()
-  PrintTestCompilerResult(CHECK_PASS "works")
-  file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-    "Determining if the CUDA compiler works passed with "
-    "the following output:\n${__CMAKE_CUDA_COMPILER_OUTPUT}\n\n")
-endif()
-
-# Try to identify the compiler features
-include(${CMAKE_ROOT}/Modules/CMakeDetermineCompileFeatures.cmake)
-CMAKE_DETERMINE_COMPILE_FEATURES(CUDA)
-
-if("x${CMAKE_CUDA_SIMULATE_ID}" STREQUAL "xMSVC")
-  set(CMAKE_CUDA_IMPLICIT_LINK_LIBRARIES "${CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES}")
-  set(CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES "${CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES}")
-endif()
-
-# Filter out implicit link libraries that should not be passed unconditionally.
-# See CMAKE_CUDA_IMPLICIT_LINK_LIBRARIES_EXCLUDE in CMakeDetermineCUDACompiler.
-list(REMOVE_ITEM CMAKE_CUDA_IMPLICIT_LINK_LIBRARIES ${CMAKE_CUDA_IMPLICIT_LINK_LIBRARIES_EXCLUDE})
-
-if(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA")
-  # Remove the CUDA Toolkit include directories from the set of
-  # implicit system include directories.
-  # This resolves the issue that NVCC doesn't specify these
-  # includes as SYSTEM includes when compiling device code, and sometimes
-  # they contain headers that generate warnings, so let users mark them
-  # as SYSTEM explicitly
-  if(CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES)
-    list(REMOVE_ITEM CMAKE_CUDA_IMPLICIT_INCLUDE_DIRECTORIES
-      ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES}
-      )
-  endif()
-endif()
-
-# Re-configure to save learned information.
-configure_file(
-  ${CMAKE_ROOT}/Modules/CMakeCUDACompiler.cmake.in
-  ${CMAKE_PLATFORM_INFO_DIR}/CMakeCUDACompiler.cmake
-  @ONLY
-  )
-include(${CMAKE_PLATFORM_INFO_DIR}/CMakeCUDACompiler.cmake)
-
-unset(__CMAKE_CUDA_COMPILER_OUTPUT)
diff --git a/share/cmake-3.18/Modules/CMakeTestCXXCompiler.cmake b/share/cmake-3.18/Modules/CMakeTestCXXCompiler.cmake
deleted file mode 100644
index b9cb1dd..0000000
--- a/share/cmake-3.18/Modules/CMakeTestCXXCompiler.cmake
+++ /dev/null
@@ -1,91 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-if(CMAKE_CXX_COMPILER_FORCED)
-  # The compiler configuration was forced by the user.
-  # Assume the user has configured all compiler information.
-  set(CMAKE_CXX_COMPILER_WORKS TRUE)
-  return()
-endif()
-
-include(CMakeTestCompilerCommon)
-
-# work around enforced code signing and / or missing exectuable target type
-set(__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE ${CMAKE_TRY_COMPILE_TARGET_TYPE})
-if(_CMAKE_FEATURE_DETECTION_TARGET_TYPE)
-  set(CMAKE_TRY_COMPILE_TARGET_TYPE ${_CMAKE_FEATURE_DETECTION_TARGET_TYPE})
-endif()
-
-# Remove any cached result from an older CMake version.
-# We now store this in CMakeCXXCompiler.cmake.
-unset(CMAKE_CXX_COMPILER_WORKS CACHE)
-
-# Try to identify the ABI and configure it into CMakeCXXCompiler.cmake
-include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerABI.cmake)
-CMAKE_DETERMINE_COMPILER_ABI(CXX ${CMAKE_ROOT}/Modules/CMakeCXXCompilerABI.cpp)
-if(CMAKE_CXX_ABI_COMPILED)
-  # The compiler worked so skip dedicated test below.
-  set(CMAKE_CXX_COMPILER_WORKS TRUE)
-  message(STATUS "Check for working CXX compiler: ${CMAKE_CXX_COMPILER} - skipped")
-endif()
-
-# This file is used by EnableLanguage in cmGlobalGenerator to
-# determine that the selected C++ compiler can actually compile
-# and link the most basic of programs.   If not, a fatal error
-# is set and cmake stops processing commands and will not generate
-# any makefiles or projects.
-if(NOT CMAKE_CXX_COMPILER_WORKS)
-  PrintTestCompilerStatus("CXX")
-  __TestCompiler_setTryCompileTargetType()
-  file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testCXXCompiler.cxx
-    "#ifndef __cplusplus\n"
-    "# error \"The CMAKE_CXX_COMPILER is set to a C compiler\"\n"
-    "#endif\n"
-    "int main(){return 0;}\n")
-  try_compile(CMAKE_CXX_COMPILER_WORKS ${CMAKE_BINARY_DIR}
-    ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testCXXCompiler.cxx
-    OUTPUT_VARIABLE __CMAKE_CXX_COMPILER_OUTPUT)
-  # Move result from cache to normal variable.
-  set(CMAKE_CXX_COMPILER_WORKS ${CMAKE_CXX_COMPILER_WORKS})
-  unset(CMAKE_CXX_COMPILER_WORKS CACHE)
-  __TestCompiler_restoreTryCompileTargetType()
-  if(NOT CMAKE_CXX_COMPILER_WORKS)
-    PrintTestCompilerResult(CHECK_FAIL "broken")
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-      "Determining if the CXX compiler works failed with "
-      "the following output:\n${__CMAKE_CXX_COMPILER_OUTPUT}\n\n")
-    string(REPLACE "\n" "\n  " _output "${__CMAKE_CXX_COMPILER_OUTPUT}")
-    message(FATAL_ERROR "The C++ compiler\n  \"${CMAKE_CXX_COMPILER}\"\n"
-      "is not able to compile a simple test program.\nIt fails "
-      "with the following output:\n  ${_output}\n\n"
-      "CMake will not be able to correctly generate this project.")
-  endif()
-  PrintTestCompilerResult(CHECK_PASS "works")
-  file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-    "Determining if the CXX compiler works passed with "
-    "the following output:\n${__CMAKE_CXX_COMPILER_OUTPUT}\n\n")
-endif()
-
-# Try to identify the compiler features
-include(${CMAKE_ROOT}/Modules/CMakeDetermineCompileFeatures.cmake)
-CMAKE_DETERMINE_COMPILE_FEATURES(CXX)
-
-# Re-configure to save learned information.
-configure_file(
-  ${CMAKE_ROOT}/Modules/CMakeCXXCompiler.cmake.in
-  ${CMAKE_PLATFORM_INFO_DIR}/CMakeCXXCompiler.cmake
-  @ONLY
-  )
-include(${CMAKE_PLATFORM_INFO_DIR}/CMakeCXXCompiler.cmake)
-
-if(CMAKE_CXX_SIZEOF_DATA_PTR)
-  foreach(f ${CMAKE_CXX_ABI_FILES})
-    include(${f})
-  endforeach()
-  unset(CMAKE_CXX_ABI_FILES)
-endif()
-
-set(CMAKE_TRY_COMPILE_TARGET_TYPE ${__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE})
-unset(__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE)
-unset(__CMAKE_CXX_COMPILER_OUTPUT)
diff --git a/share/cmake-3.18/Modules/CMakeTestFortranCompiler.cmake b/share/cmake-3.18/Modules/CMakeTestFortranCompiler.cmake
deleted file mode 100644
index 10fb0a7..0000000
--- a/share/cmake-3.18/Modules/CMakeTestFortranCompiler.cmake
+++ /dev/null
@@ -1,102 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-if(CMAKE_Fortran_COMPILER_FORCED)
-  # The compiler configuration was forced by the user.
-  # Assume the user has configured all compiler information.
-  set(CMAKE_Fortran_COMPILER_WORKS TRUE)
-  return()
-endif()
-
-include(CMakeTestCompilerCommon)
-
-# Remove any cached result from an older CMake version.
-# We now store this in CMakeFortranCompiler.cmake.
-unset(CMAKE_Fortran_COMPILER_WORKS CACHE)
-
-# Try to identify the ABI and configure it into CMakeFortranCompiler.cmake
-include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerABI.cmake)
-CMAKE_DETERMINE_COMPILER_ABI(Fortran ${CMAKE_ROOT}/Modules/CMakeFortranCompilerABI.F)
-if(CMAKE_Fortran_ABI_COMPILED)
-  # The compiler worked so skip dedicated test below.
-  set(CMAKE_Fortran_COMPILER_WORKS TRUE)
-  message(STATUS "Check for working Fortran compiler: ${CMAKE_Fortran_COMPILER} - skipped")
-endif()
-
-# This file is used by EnableLanguage in cmGlobalGenerator to
-# determine that the selected Fortran compiler can actually compile
-# and link the most basic of programs.   If not, a fatal error
-# is set and cmake stops processing commands and will not generate
-# any makefiles or projects.
-if(NOT CMAKE_Fortran_COMPILER_WORKS)
-  PrintTestCompilerStatus("Fortran")
-  file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompiler.f "
-        PROGRAM TESTFortran
-        PRINT *, 'Hello'
-        END
-  ")
-  try_compile(CMAKE_Fortran_COMPILER_WORKS ${CMAKE_BINARY_DIR}
-    ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompiler.f
-    OUTPUT_VARIABLE OUTPUT)
-  # Move result from cache to normal variable.
-  set(CMAKE_Fortran_COMPILER_WORKS ${CMAKE_Fortran_COMPILER_WORKS})
-  unset(CMAKE_Fortran_COMPILER_WORKS CACHE)
-  if(NOT CMAKE_Fortran_COMPILER_WORKS)
-    PrintTestCompilerResult(CHECK_FAIL "broken")
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-      "Determining if the Fortran compiler works failed with "
-      "the following output:\n${OUTPUT}\n\n")
-    string(REPLACE "\n" "\n  " _output "${OUTPUT}")
-    message(FATAL_ERROR "The Fortran compiler\n  \"${CMAKE_Fortran_COMPILER}\"\n"
-      "is not able to compile a simple test program.\nIt fails "
-      "with the following output:\n  ${_output}\n\n"
-      "CMake will not be able to correctly generate this project.")
-  endif()
-  PrintTestCompilerResult(CHECK_PASS "works")
-  file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-    "Determining if the Fortran compiler works passed with "
-    "the following output:\n${OUTPUT}\n\n")
-endif()
-
-# Test for Fortran 90 support by using an f90-specific construct.
-if(NOT DEFINED CMAKE_Fortran_COMPILER_SUPPORTS_F90)
-  message(CHECK_START "Checking whether ${CMAKE_Fortran_COMPILER} supports Fortran 90")
-  file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompilerF90.f90 "
-    PROGRAM TESTFortran90
-    integer stop ; stop = 1 ; do while ( stop .eq. 0 ) ; end do
-    END PROGRAM TESTFortran90
-")
-  try_compile(CMAKE_Fortran_COMPILER_SUPPORTS_F90 ${CMAKE_BINARY_DIR}
-    ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompilerF90.f90
-    OUTPUT_VARIABLE OUTPUT)
-  if(CMAKE_Fortran_COMPILER_SUPPORTS_F90)
-    message(CHECK_PASS "yes")
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-      "Determining if the Fortran compiler supports Fortran 90 passed with "
-      "the following output:\n${OUTPUT}\n\n")
-    set(CMAKE_Fortran_COMPILER_SUPPORTS_F90 1)
-  else()
-    message(CHECK_FAIL "no")
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-      "Determining if the Fortran compiler supports Fortran 90 failed with "
-      "the following output:\n${OUTPUT}\n\n")
-    set(CMAKE_Fortran_COMPILER_SUPPORTS_F90 0)
-  endif()
-  unset(CMAKE_Fortran_COMPILER_SUPPORTS_F90 CACHE)
-endif()
-
-# Re-configure to save learned information.
-configure_file(
-  ${CMAKE_ROOT}/Modules/CMakeFortranCompiler.cmake.in
-  ${CMAKE_PLATFORM_INFO_DIR}/CMakeFortranCompiler.cmake
-  @ONLY
-  )
-include(${CMAKE_PLATFORM_INFO_DIR}/CMakeFortranCompiler.cmake)
-
-if(CMAKE_Fortran_SIZEOF_DATA_PTR)
-  foreach(f ${CMAKE_Fortran_ABI_FILES})
-    include(${f})
-  endforeach()
-  unset(CMAKE_Fortran_ABI_FILES)
-endif()
diff --git a/share/cmake-3.18/Modules/CMakeTestGNU.c b/share/cmake-3.18/Modules/CMakeTestGNU.c
deleted file mode 100644
index 933e5a2..0000000
--- a/share/cmake-3.18/Modules/CMakeTestGNU.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#if defined(__GNUC__) && !defined(__INTEL_COMPILER)
-void THIS_IS_GNU();
-#endif
-#ifdef __MINGW32__
-void THIS_IS_MINGW();
-#endif
-#ifdef __CYGWIN__
-void THIS_IS_CYGWIN();
-#endif
diff --git a/share/cmake-3.18/Modules/CMakeTestOBJCCompiler.cmake b/share/cmake-3.18/Modules/CMakeTestOBJCCompiler.cmake
deleted file mode 100644
index 0e333c0..0000000
--- a/share/cmake-3.18/Modules/CMakeTestOBJCCompiler.cmake
+++ /dev/null
@@ -1,95 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-if(CMAKE_OBJC_COMPILER_FORCED)
-  # The compiler configuration was forced by the user.
-  # Assume the user has configured all compiler information.
-  set(CMAKE_OBJC_COMPILER_WORKS TRUE)
-  return()
-endif()
-
-include(CMakeTestCompilerCommon)
-
-# work around enforced code signing and / or missing exectuable target type
-set(__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE ${CMAKE_TRY_COMPILE_TARGET_TYPE})
-if(_CMAKE_FEATURE_DETECTION_TARGET_TYPE)
-  set(CMAKE_TRY_COMPILE_TARGET_TYPE ${_CMAKE_FEATURE_DETECTION_TARGET_TYPE})
-endif()
-
-# Remove any cached result from an older CMake version.
-# We now store this in CMakeCCompiler.cmake.
-unset(CMAKE_OBJC_COMPILER_WORKS CACHE)
-
-# Try to identify the ABI and configure it into CMakeOBJCCompiler.cmake
-include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerABI.cmake)
-CMAKE_DETERMINE_COMPILER_ABI(OBJC ${CMAKE_ROOT}/Modules/CMakeOBJCCompilerABI.m)
-if(CMAKE_OBJC_ABI_COMPILED)
-  # The compiler worked so skip dedicated test below.
-  set(CMAKE_OBJC_COMPILER_WORKS TRUE)
-  message(STATUS "Check for working OBJC compiler: ${CMAKE_OBJC_COMPILER} - skipped")
-endif()
-
-# This file is used by EnableLanguage in cmGlobalGenerator to
-# determine that that selected Objective-C compiler can actually compile
-# and link the most basic of programs.   If not, a fatal error
-# is set and cmake stops processing commands and will not generate
-# any makefiles or projects.
-if(NOT CMAKE_OBJC_COMPILER_WORKS)
-  PrintTestCompilerStatus("OBJC")
-  __TestCompiler_setTryCompileTargetType()
-  file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testOBJCCompiler.m
-    "#ifdef __cplusplus\n"
-    "# error \"The CMAKE_OBJC_COMPILER is set to a C++ compiler\"\n"
-    "#endif\n"
-    "#ifndef __OBJC__\n"
-    "# error \"The CMAKE_OBJC_COMPILER is not an Objective-C compiler\"\n"
-    "#endif\n"
-    "int main(int argc, char* argv[])\n"
-    "{ (void)argv; return argc-1;}\n")
-  try_compile(CMAKE_OBJC_COMPILER_WORKS ${CMAKE_BINARY_DIR}
-    ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testOBJCCompiler.m
-    OUTPUT_VARIABLE __CMAKE_OBJC_COMPILER_OUTPUT)
-  # Move result from cache to normal variable.
-  set(CMAKE_OBJC_COMPILER_WORKS ${CMAKE_OBJC_COMPILER_WORKS})
-  unset(CMAKE_OBJC_COMPILER_WORKS CACHE)
-  __TestCompiler_restoreTryCompileTargetType()
-  if(NOT CMAKE_OBJC_COMPILER_WORKS)
-    PrintTestCompilerResult(CHECK_FAIL "broken")
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-      "Determining if the Objective-C compiler works failed with "
-      "the following output:\n${__CMAKE_OBJC_COMPILER_OUTPUT}\n\n")
-    string(REPLACE "\n" "\n  " _output "${__CMAKE_OBJC_COMPILER_OUTPUT}")
-    message(FATAL_ERROR "The Objective-C compiler\n  \"${CMAKE_OBJC_COMPILER}\"\n"
-      "is not able to compile a simple test program.\nIt fails "
-      "with the following output:\n  ${_output}\n\n"
-      "CMake will not be able to correctly generate this project.")
-  endif()
-  PrintTestCompilerResult(CHECK_PASS "works")
-  file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-    "Determining if the Objective-C compiler works passed with "
-    "the following output:\n${__CMAKE_OBJC_COMPILER_OUTPUT}\n\n")
-endif()
-
-# Try to identify the compiler features
-include(${CMAKE_ROOT}/Modules/CMakeDetermineCompileFeatures.cmake)
-CMAKE_DETERMINE_COMPILE_FEATURES(OBJC)
-
-# Re-configure to save learned information.
-configure_file(
-  ${CMAKE_ROOT}/Modules/CMakeOBJCCompiler.cmake.in
-  ${CMAKE_PLATFORM_INFO_DIR}/CMakeOBJCCompiler.cmake
-  @ONLY
-  )
-include(${CMAKE_PLATFORM_INFO_DIR}/CMakeOBJCCompiler.cmake)
-
-if(CMAKE_OBJC_SIZEOF_DATA_PTR)
-  foreach(f ${CMAKE_OBJC_ABI_FILES})
-    include(${f})
-  endforeach()
-  unset(CMAKE_OBJC_ABI_FILES)
-endif()
-
-set(CMAKE_TRY_COMPILE_TARGET_TYPE ${__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE})
-unset(__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE)
-unset(__CMAKE_OBJC_COMPILER_OUTPUT)
diff --git a/share/cmake-3.18/Modules/CMakeTestOBJCXXCompiler.cmake b/share/cmake-3.18/Modules/CMakeTestOBJCXXCompiler.cmake
deleted file mode 100644
index dc153a7..0000000
--- a/share/cmake-3.18/Modules/CMakeTestOBJCXXCompiler.cmake
+++ /dev/null
@@ -1,94 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-if(CMAKE_OBJCXX_COMPILER_FORCED)
-  # The compiler configuration was forced by the user.
-  # Assume the user has configured all compiler information.
-  set(CMAKE_OBJCXX_COMPILER_WORKS TRUE)
-  return()
-endif()
-
-include(CMakeTestCompilerCommon)
-
-# work around enforced code signing and / or missing exectuable target type
-set(__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE ${CMAKE_TRY_COMPILE_TARGET_TYPE})
-if(_CMAKE_FEATURE_DETECTION_TARGET_TYPE)
-  set(CMAKE_TRY_COMPILE_TARGET_TYPE ${_CMAKE_FEATURE_DETECTION_TARGET_TYPE})
-endif()
-
-# Remove any cached result from an older CMake version.
-# We now store this in CMakeOBJCXXCompiler.cmake.
-unset(CMAKE_OBJCXX_COMPILER_WORKS CACHE)
-
-# Try to identify the ABI and configure it into CMakeOBJCXXCompiler.cmake
-include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerABI.cmake)
-CMAKE_DETERMINE_COMPILER_ABI(OBJCXX ${CMAKE_ROOT}/Modules/CMakeOBJCXXCompilerABI.mm)
-if(CMAKE_OBJCXX_ABI_COMPILED)
-  # The compiler worked so skip dedicated test below.
-  set(CMAKE_OBJCXX_COMPILER_WORKS TRUE)
-  message(STATUS "Check for working OBJCXX compiler: ${CMAKE_OBJCXX_COMPILER} - skipped")
-endif()
-
-# This file is used by EnableLanguage in cmGlobalGenerator to
-# determine that the selected Objective-C++ compiler can actually compile
-# and link the most basic of programs.   If not, a fatal error
-# is set and cmake stops processing commands and will not generate
-# any makefiles or projects.
-if(NOT CMAKE_OBJCXX_COMPILER_WORKS)
-  PrintTestCompilerStatus("OBJCXX")
-  __TestCompiler_setTryCompileTargetType()
-  file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testOBJCXXCompiler.mm
-    "#ifndef __cplusplus\n"
-    "# error \"The CMAKE_OBJCXX_COMPILER is set to a C compiler\"\n"
-    "#endif\n"
-    "#ifndef __OBJC__\n"
-    "# error \"The CMAKE_OBJCXX_COMPILER is not an Objective-C++ compiler\"\n"
-    "#endif\n"
-    "int main(){return 0;}\n")
-  try_compile(CMAKE_OBJCXX_COMPILER_WORKS ${CMAKE_BINARY_DIR}
-    ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testOBJCXXCompiler.mm
-    OUTPUT_VARIABLE __CMAKE_OBJCXX_COMPILER_OUTPUT)
-  # Move result from cache to normal variable.
-  set(CMAKE_OBJCXX_COMPILER_WORKS ${CMAKE_OBJCXX_COMPILER_WORKS})
-  unset(CMAKE_OBJCXX_COMPILER_WORKS CACHE)
-  __TestCompiler_restoreTryCompileTargetType()
-  if(NOT CMAKE_OBJCXX_COMPILER_WORKS)
-    PrintTestCompilerResult(CHECK_FAIL "broken")
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-      "Determining if the Objective-C++ compiler works failed with "
-      "the following output:\n${__CMAKE_OBJCXX_COMPILER_OUTPUT}\n\n")
-    string(REPLACE "\n" "\n  " _output "${__CMAKE_OBJCXX_COMPILER_OUTPUT}")
-    message(FATAL_ERROR "The Objective-C++ compiler\n  \"${CMAKE_OBJCXX_COMPILER}\"\n"
-      "is not able to compile a simple test program.\nIt fails "
-      "with the following output:\n  ${_output}\n\n"
-      "CMake will not be able to correctly generate this project.")
-  endif()
-  PrintTestCompilerResult(CHECK_PASS "works")
-  file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-    "Determining if the Objective-C++ compiler works passed with "
-    "the following output:\n${__CMAKE_OBJCXX_COMPILER_OUTPUT}\n\n")
-endif()
-
-# Try to identify the compiler features
-include(${CMAKE_ROOT}/Modules/CMakeDetermineCompileFeatures.cmake)
-CMAKE_DETERMINE_COMPILE_FEATURES(OBJCXX)
-
-# Re-configure to save learned information.
-configure_file(
-  ${CMAKE_ROOT}/Modules/CMakeOBJCXXCompiler.cmake.in
-  ${CMAKE_PLATFORM_INFO_DIR}/CMakeOBJCXXCompiler.cmake
-  @ONLY
-  )
-include(${CMAKE_PLATFORM_INFO_DIR}/CMakeOBJCXXCompiler.cmake)
-
-if(CMAKE_OBJCXX_SIZEOF_DATA_PTR)
-  foreach(f ${CMAKE_OBJCXX_ABI_FILES})
-    include(${f})
-  endforeach()
-  unset(CMAKE_OBJCXX_ABI_FILES)
-endif()
-
-set(CMAKE_TRY_COMPILE_TARGET_TYPE ${__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE})
-unset(__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE)
-unset(__CMAKE_OBJCXX_COMPILER_OUTPUT)
diff --git a/share/cmake-3.18/Modules/CMakeTestSwiftCompiler.cmake b/share/cmake-3.18/Modules/CMakeTestSwiftCompiler.cmake
deleted file mode 100644
index d98dc9d..0000000
--- a/share/cmake-3.18/Modules/CMakeTestSwiftCompiler.cmake
+++ /dev/null
@@ -1,64 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-if(CMAKE_Swift_COMPILER_FORCED)
-  # The compiler configuration was forced by the user.
-  # Assume the user has configured all compiler information.
-  set(CMAKE_Swift_COMPILER_WORKS TRUE)
-  return()
-endif()
-
-include(CMakeTestCompilerCommon)
-
-# Remove any cached result from an older CMake version.
-# We now store this in CMakeSwiftCompiler.cmake.
-unset(CMAKE_Swift_COMPILER_WORKS CACHE)
-
-# This file is used by EnableLanguage in cmGlobalGenerator to
-# determine that the selected C++ compiler can actually compile
-# and link the most basic of programs.   If not, a fatal error
-# is set and cmake stops processing commands and will not generate
-# any makefiles or projects.
-if(NOT CMAKE_Swift_COMPILER_WORKS)
-  PrintTestCompilerStatus("Swift")
-  file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/main.swift
-    "print(\"CMake\")\n")
-  try_compile(CMAKE_Swift_COMPILER_WORKS ${CMAKE_BINARY_DIR}
-    ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/main.swift
-    OUTPUT_VARIABLE __CMAKE_Swift_COMPILER_OUTPUT)
-  # Move result from cache to normal variable.
-  set(CMAKE_Swift_COMPILER_WORKS ${CMAKE_Swift_COMPILER_WORKS})
-  unset(CMAKE_Swift_COMPILER_WORKS CACHE)
-  set(Swift_TEST_WAS_RUN 1)
-endif()
-
-if(NOT CMAKE_Swift_COMPILER_WORKS)
-  PrintTestCompilerResult(CHECK_FAIL "broken")
-  file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-    "Determining if the Swift compiler works failed with "
-    "the following output:\n${__CMAKE_Swift_COMPILER_OUTPUT}\n\n")
-  string(REPLACE "\n" "\n  " _output "${__CMAKE_Swift_COMPILER_OUTPUT}")
-  message(FATAL_ERROR "The Swift compiler\n  \"${CMAKE_Swift_COMPILER}\"\n"
-    "is not able to compile a simple test program.\nIt fails "
-    "with the following output:\n  ${_output}\n\n"
-    "CMake will not be able to correctly generate this project.")
-else()
-  if(Swift_TEST_WAS_RUN)
-    PrintTestCompilerResult(CHECK_PASS "works")
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-      "Determining if the Swift compiler works passed with "
-      "the following output:\n${__CMAKE_Swift_COMPILER_OUTPUT}\n\n")
-  endif()
-
-  # Unlike C and CXX we do not yet detect any information about the Swift ABI.
-  # However, one of the steps done for C and CXX as part of that detection is
-  # to initialize the implicit include directories.  That is relevant here.
-  set(CMAKE_Swift_IMPLICIT_INCLUDE_DIRECTORIES "${_CMAKE_Swift_IMPLICIT_INCLUDE_DIRECTORIES_INIT}")
-
-  # Re-configure to save learned information.
-  configure_file(${CMAKE_ROOT}/Modules/CMakeSwiftCompiler.cmake.in
-                 ${CMAKE_PLATFORM_INFO_DIR}/CMakeSwiftCompiler.cmake @ONLY)
-  include(${CMAKE_PLATFORM_INFO_DIR}/CMakeSwiftCompiler.cmake)
-endif()
-
-unset(__CMAKE_Swift_COMPILER_OUTPUT)
diff --git a/share/cmake-3.18/Modules/CPack.cmake b/share/cmake-3.18/Modules/CPack.cmake
deleted file mode 100644
index d0cfc2b..0000000
--- a/share/cmake-3.18/Modules/CPack.cmake
+++ /dev/null
@@ -1,809 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CPack
------
-
-Configure generators for binary installers and source packages.
-
-Introduction
-^^^^^^^^^^^^
-
-The CPack module generates the configuration files ``CPackConfig.cmake``
-and ``CPackSourceConfig.cmake``. They are intended for use in a subsequent
-run of  the :manual:`cpack <cpack(1)>` program where they steer the generation
-of installers or/and source packages.
-
-Depending on the CMake generator, the CPack module may also add two new build
-targets, ``package`` and ``package_source``. See the `packaging targets`_
-section below for details.
-
-The generated binary installers will contain all files that have been installed
-via CMake's :command:`install` command (and the deprecated commands
-:command:`install_files`, :command:`install_programs`, and
-:command:`install_targets`).  Certain kinds of binary installers can be
-configured such that users can select individual application components to
-install.  See the :module:`CPackComponent` module for further details.
-
-Source packages (configured through ``CPackSourceConfig.cmake`` and generated
-by the :cpack_gen:`CPack Archive Generator`) will contain all source files in
-the project directory except those specified in
-:variable:`CPACK_SOURCE_IGNORE_FILES`.
-
-CPack Generators
-^^^^^^^^^^^^^^^^
-
-The :variable:`CPACK_GENERATOR` variable has different meanings in different
-contexts.  In a ``CMakeLists.txt`` file, :variable:`CPACK_GENERATOR` is a
-*list of generators*: and when :manual:`cpack <cpack(1)>` is run with no other
-arguments, it will iterate over that list and produce one package for each
-generator.  In a :variable:`CPACK_PROJECT_CONFIG_FILE`,
-:variable:`CPACK_GENERATOR` is a *string naming a single generator*.  If you
-need per-cpack-generator logic to control *other* cpack settings, then you
-need a :variable:`CPACK_PROJECT_CONFIG_FILE`.
-If set, the :variable:`CPACK_PROJECT_CONFIG_FILE` is included automatically
-on a per-generator basis.  It only need contain overrides.
-
-Here's how it works:
-
-* :manual:`cpack <cpack(1)>` runs
-* it includes ``CPackConfig.cmake``
-* it iterates over the generators given by the ``-G`` command line option,
-  or if no such option was specified, over the list of generators given by
-  the :variable:`CPACK_GENERATOR` variable set in the ``CPackConfig.cmake``
-  input file.
-* foreach generator, it then
-
-  - sets :variable:`CPACK_GENERATOR` to the one currently being iterated
-  - includes the :variable:`CPACK_PROJECT_CONFIG_FILE`
-  - produces the package for that generator
-
-This is the key: For each generator listed in :variable:`CPACK_GENERATOR` in
-``CPackConfig.cmake``, cpack will *reset* :variable:`CPACK_GENERATOR`
-internally to *the one currently being used* and then include the
-:variable:`CPACK_PROJECT_CONFIG_FILE`.
-
-For a list of available generators, see :manual:`cpack-generators(7)`.
-
-.. _`packaging targets`:
-
-Targets package and package_source
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-If CMake is run with the Makefile, Ninja, or Xcode generator, then
-``include(CPack)`` generates a target ``package``. This makes it possible
-to build a binary installer from CMake, Make, or Ninja: Instead of ``cpack``,
-one may call ``cmake --build . --target package`` or ``make package`` or
-``ninja package``. The VS generator creates an uppercase target ``PACKAGE``.
-
-If CMake is run with the Makefile or Ninja generator, then ``include(CPack)``
-also generates a target ``package_source``. To build a source package,
-instead of ``cpack -G TGZ --config CPackSourceConfig.cmake`` one may call
-``cmake --build . --target package_source``, ``make package_source``,
-or ``ninja package_source``.
-
-
-Variables common to all CPack Generators
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Before including this CPack module in your ``CMakeLists.txt`` file, there
-are a variety of variables that can be set to customize the resulting
-installers.  The most commonly-used variables are:
-
-.. variable:: CPACK_PACKAGE_NAME
-
-  The name of the package (or application).  If not specified, it defaults to
-  the project name.
-
-.. variable:: CPACK_PACKAGE_VENDOR
-
-  The name of the package vendor. (e.g., "Kitware").  The default is "Humanity".
-
-.. variable:: CPACK_PACKAGE_DIRECTORY
-
-  The directory in which CPack is doing its packaging.  If it is not set
-  then this will default (internally) to the build dir.  This variable may
-  be defined in a CPack config file or from the :manual:`cpack <cpack(1)>`
-  command line option ``-B``.  If set, the command line option overrides the
-  value found in the config file.
-
-.. variable:: CPACK_PACKAGE_VERSION_MAJOR
-
-  Package major version.  This variable will always be set, but its default
-  value depends on whether or not version details were given to the
-  :command:`project` command in the top level CMakeLists.txt file.  If version
-  details were given, the default value will be
-  :variable:`CMAKE_PROJECT_VERSION_MAJOR`.  If no version details were given,
-  a default version of 0.1.1 will be assumed, leading to
-  ``CPACK_PACKAGE_VERSION_MAJOR`` having a default value of 0.
-
-.. variable:: CPACK_PACKAGE_VERSION_MINOR
-
-  Package minor version.  The default value is determined based on whether or
-  not version details were given to the :command:`project` command in the top
-  level CMakeLists.txt file.  If version details were given, the default
-  value will be :variable:`CMAKE_PROJECT_VERSION_MINOR`, but if no minor
-  version component was specified then ``CPACK_PACKAGE_VERSION_MINOR`` will be
-  left unset.  If no project version was given at all, a default version of
-  0.1.1 will be assumed, leading to ``CPACK_PACKAGE_VERSION_MINOR`` having a
-  default value of 1.
-
-.. variable:: CPACK_PACKAGE_VERSION_PATCH
-
-  Package patch version.  The default value is determined based on whether or
-  not version details were given to the :command:`project` command in the top
-  level CMakeLists.txt file.  If version details were given, the default
-  value will be :variable:`CMAKE_PROJECT_VERSION_PATCH`, but if no patch
-  version component was specified then ``CPACK_PACKAGE_VERSION_PATCH`` will be
-  left unset.  If no project version was given at all, a default version of
-  0.1.1 will be assumed, leading to ``CPACK_PACKAGE_VERSION_PATCH`` having a
-  default value of 1.
-
-.. variable:: CPACK_PACKAGE_DESCRIPTION
-
-  A description of the project, used in places such as the introduction
-  screen of CPack-generated Windows installers.  If not set, the value of
-  this variable is populated from the file named by
-  :variable:`CPACK_PACKAGE_DESCRIPTION_FILE`.
-
-.. variable:: CPACK_PACKAGE_DESCRIPTION_FILE
-
-  A text file used to describe the project when
-  :variable:`CPACK_PACKAGE_DESCRIPTION` is not explicitly set.  The default
-  value for ``CPACK_PACKAGE_DESCRIPTION_FILE`` points to a built-in template
-  file ``Templates/CPack.GenericDescription.txt``.
-
-.. variable:: CPACK_PACKAGE_DESCRIPTION_SUMMARY
-
-  Short description of the project (only a few words).  If the
-  :variable:`CMAKE_PROJECT_DESCRIPTION` variable is set, it is used as the
-  default value, otherwise the default will be a string generated by CMake
-  based on :variable:`CMAKE_PROJECT_NAME`.
-
-.. variable:: CPACK_PACKAGE_HOMEPAGE_URL
-
-  Project homepage URL.  The default value is taken from the
-  :variable:`CMAKE_PROJECT_HOMEPAGE_URL` variable, which is set by the top
-  level :command:`project` command, or else the default will be empty if no
-  URL was provided to :command:`project`.
-
-.. variable:: CPACK_PACKAGE_FILE_NAME
-
-  The name of the package file to generate, not including the
-  extension.  For example, ``cmake-2.6.1-Linux-i686``.  The default value
-  is::
-
-    ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_SYSTEM_NAME}
-
-.. variable:: CPACK_PACKAGE_INSTALL_DIRECTORY
-
-  Installation directory on the target system. This may be used by some
-  CPack generators like NSIS to create an installation directory e.g.,
-  "CMake 2.5" below the installation prefix.  All installed elements will be
-  put inside this directory.
-
-.. variable:: CPACK_PACKAGE_ICON
-
-  A branding image that will be displayed inside the installer (used by GUI
-  installers).
-
-.. variable:: CPACK_PACKAGE_CHECKSUM
-
-  An algorithm that will be used to generate an additional file with the
-  checksum of the package.  The output file name will be::
-
-    ${CPACK_PACKAGE_FILE_NAME}.${CPACK_PACKAGE_CHECKSUM}
-
-  Supported algorithms are those listed by the
-  :ref:`string(\<HASH\>) <Supported Hash Algorithms>` command.
-
-.. variable:: CPACK_PROJECT_CONFIG_FILE
-
-  CPack-time project CPack configuration file.  This file is included at cpack
-  time, once per generator after CPack has set :variable:`CPACK_GENERATOR`
-  to the actual generator being used.  It allows per-generator setting of
-  ``CPACK_*`` variables at cpack time.
-
-.. variable:: CPACK_RESOURCE_FILE_LICENSE
-
-  License to be embedded in the installer.  It will typically be displayed
-  to the user by the produced installer (often with an explicit "Accept"
-  button, for graphical installers) prior to installation.  This license
-  file is NOT added to the installed files but is used by some CPack generators
-  like NSIS.  If you want to install a license file (may be the same as this
-  one) along with your project, you must add an appropriate CMake
-  :command:`install` command in your ``CMakeLists.txt``.
-
-.. variable:: CPACK_RESOURCE_FILE_README
-
-  ReadMe file to be embedded in the installer.  It typically describes in
-  some detail the purpose of the project during the installation.  Not all
-  CPack generators use this file.
-
-.. variable:: CPACK_RESOURCE_FILE_WELCOME
-
-  Welcome file to be embedded in the installer.  It welcomes users to this
-  installer.  Typically used in the graphical installers on Windows and Mac
-  OS X.
-
-.. variable:: CPACK_MONOLITHIC_INSTALL
-
-  Disables the component-based installation mechanism.  When set, the
-  component specification is ignored and all installed items are put in a
-  single "MONOLITHIC" package.  Some CPack generators do monolithic
-  packaging by default and may be asked to do component packaging by
-  setting ``CPACK_<GENNAME>_COMPONENT_INSTALL`` to ``TRUE``.
-
-.. variable:: CPACK_GENERATOR
-
-  List of CPack generators to use.  If not specified, CPack will create a
-  set of options following the naming pattern
-  :variable:`CPACK_BINARY_<GENNAME>` (e.g. ``CPACK_BINARY_NSIS``) allowing
-  the user to enable/disable individual generators.  If the ``-G`` option is
-  given on the :manual:`cpack <cpack(1)>` command line, it will override this
-  variable and any ``CPACK_BINARY_<GENNAME>`` options.
-
-.. variable:: CPACK_OUTPUT_CONFIG_FILE
-
-  The name of the CPack binary configuration file.  This file is the CPack
-  configuration generated by the CPack module for binary installers.
-  Defaults to ``CPackConfig.cmake``.
-
-.. variable:: CPACK_PACKAGE_EXECUTABLES
-
-  Lists each of the executables and associated text label to be used to
-  create Start Menu shortcuts.  For example, setting this to the list
-  ``ccmake;CMake`` will create a shortcut named "CMake" that will execute the
-  installed executable ``ccmake``.  Not all CPack generators use it (at least
-  NSIS, WIX and OSXX11 do).
-
-.. variable:: CPACK_STRIP_FILES
-
-  List of files to be stripped.  Starting with CMake 2.6.0,
-  ``CPACK_STRIP_FILES`` will be a boolean variable which enables
-  stripping of all files (a list of files evaluates to ``TRUE`` in CMake,
-  so this change is compatible).
-
-.. variable:: CPACK_VERBATIM_VARIABLES
-
-  If set to ``TRUE``, values of variables prefixed with ``CPACK_`` will be
-  escaped before being written to the configuration files, so that the cpack
-  program receives them exactly as they were specified.  If not, characters
-  like quotes and backslashes can cause parsing errors or alter the value
-  received by the cpack program.  Defaults to ``FALSE`` for backwards
-  compatibility.
-
-Variables for Source Package Generators
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The following CPack variables are specific to source packages, and
-will not affect binary packages:
-
-.. variable:: CPACK_SOURCE_PACKAGE_FILE_NAME
-
-  The name of the source package.  For example ``cmake-2.6.1``.
-
-.. variable:: CPACK_SOURCE_STRIP_FILES
-
-  List of files in the source tree that will be stripped.  Starting with
-  CMake 2.6.0, ``CPACK_SOURCE_STRIP_FILES`` will be a boolean
-  variable which enables stripping of all files (a list of files evaluates
-  to ``TRUE`` in CMake, so this change is compatible).
-
-.. variable:: CPACK_SOURCE_GENERATOR
-
-  List of generators used for the source packages.  As with
-  :variable:`CPACK_GENERATOR`, if this is not specified then CPack will
-  create a set of options (e.g. ``CPACK_SOURCE_ZIP``) allowing
-  users to select which packages will be generated.
-
-.. variable:: CPACK_SOURCE_OUTPUT_CONFIG_FILE
-
-  The name of the CPack source configuration file.  This file is the CPack
-  configuration generated by the CPack module for source installers.
-  Defaults to ``CPackSourceConfig.cmake``.
-
-.. variable:: CPACK_SOURCE_IGNORE_FILES
-
-  Pattern of files in the source tree that won't be packaged when building
-  a source package.  This is a list of regular expression patterns (that
-  must be properly escaped), e.g.,
-  ``/CVS/;/\\.svn/;\\.swp$;\\.#;/#;.*~;cscope.*``
-
-Variables for Advanced Use
-^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The following variables are for advanced uses of CPack:
-
-.. variable:: CPACK_CMAKE_GENERATOR
-
-  What CMake generator should be used if the project is a CMake
-  project.  Defaults to the value of :variable:`CMAKE_GENERATOR`.  Few users
-  will want to change this setting.
-
-.. variable:: CPACK_INSTALL_CMAKE_PROJECTS
-
-  List of four values that specify what project to install.  The four values
-  are: Build directory, Project Name, Project Component, Directory.  If
-  omitted, CPack will build an installer that installs everything.
-
-.. variable:: CPACK_SYSTEM_NAME
-
-  System name, defaults to the value of :variable:`CMAKE_SYSTEM_NAME`,
-  except on Windows where it will be ``win32`` or ``win64``.
-
-.. variable:: CPACK_PACKAGE_VERSION
-
-  Package full version, used internally.  By default, this is built from
-  :variable:`CPACK_PACKAGE_VERSION_MAJOR`,
-  :variable:`CPACK_PACKAGE_VERSION_MINOR`, and
-  :variable:`CPACK_PACKAGE_VERSION_PATCH`.
-
-.. variable:: CPACK_TOPLEVEL_TAG
-
-  Directory for the installed files.
-
-.. variable:: CPACK_INSTALL_COMMANDS
-
-  Extra commands to install components.  The environment variable
-  ``CMAKE_INSTALL_PREFIX`` is set to the temporary install directory
-  during execution.
-
-.. variable:: CPACK_INSTALL_SCRIPTS
-
-  Extra CMake scripts executed by CPack during its local staging
-  installation, which is done right before packaging the files.
-  The scripts are not called by a standalone install (e.g.: ``make install``).
-  For every script, the following variables will be set:
-  :variable:`CMAKE_CURRENT_SOURCE_DIR`, :variable:`CMAKE_CURRENT_BINARY_DIR`
-  and :variable:`CMAKE_INSTALL_PREFIX` (which is set to the staging install
-  directory).  The singular form ``CMAKE_INSTALL_SCRIPT`` is supported as
-  an alternative variable for historical reasons, but its value is ignored if
-  ``CMAKE_INSTALL_SCRIPTS`` is set and a warning will be issued.
-
-.. variable:: CPACK_INSTALLED_DIRECTORIES
-
-  Extra directories to install.
-
-.. variable:: CPACK_PACKAGE_INSTALL_REGISTRY_KEY
-
-  Registry key used when installing this project.  This is only used by
-  installers for Windows.  The default value is based on the installation
-  directory.
-
-.. variable:: CPACK_CREATE_DESKTOP_LINKS
-
-  List of desktop links to create.  Each desktop link requires a
-  corresponding start menu shortcut as created by
-  :variable:`CPACK_PACKAGE_EXECUTABLES`.
-
-.. variable:: CPACK_BINARY_<GENNAME>
-
-  CPack generated options for binary generators.  The ``CPack.cmake`` module
-  generates (when :variable:`CPACK_GENERATOR` is not set) a set of CMake
-  options (see CMake :command:`option` command) which may then be used to
-  select the CPack generator(s) to be used when building the ``package``
-  target or when running :manual:`cpack <cpack(1)>` without the ``-G`` option.
-
-#]=======================================================================]
-
-# Define this var in order to avoid (or warn) concerning multiple inclusion
-if(CPack_CMake_INCLUDED)
-  message(WARNING "CPack.cmake has already been included!!")
-else()
-  set(CPack_CMake_INCLUDED 1)
-endif()
-
-# Pick a configuration file
-set(cpack_input_file "${CMAKE_ROOT}/Templates/CPackConfig.cmake.in")
-if(EXISTS "${CMAKE_SOURCE_DIR}/CPackConfig.cmake.in")
-  set(cpack_input_file "${CMAKE_SOURCE_DIR}/CPackConfig.cmake.in")
-endif()
-set(cpack_source_input_file "${CMAKE_ROOT}/Templates/CPackConfig.cmake.in")
-if(EXISTS "${CMAKE_SOURCE_DIR}/CPackSourceConfig.cmake.in")
-  set(cpack_source_input_file "${CMAKE_SOURCE_DIR}/CPackSourceConfig.cmake.in")
-endif()
-
-# Backward compatibility
-# Include CPackComponent macros if it has not already been included before.
-include(CPackComponent)
-
-# Macro for setting values if a user did not overwrite them
-# Mangles CMake-special characters. Only kept for backwards compatibility.
-macro(cpack_set_if_not_set name value)
-  message(DEPRECATION "cpack_set_if_not_set is obsolete; do not use.")
-  _cpack_set_default("${name}" "${value}")
-endmacro()
-
-# cpack_encode_variables - Function to encode variables for the configuration file
-# find any variable that starts with CPACK and create a variable
-# _CPACK_OTHER_VARIABLES_ that contains SET commands for
-# each cpack variable.  _CPACK_OTHER_VARIABLES_ is then
-# used as an @ replacment in configure_file for the CPackConfig.
-function(cpack_encode_variables)
-  set(commands "")
-  get_cmake_property(res VARIABLES)
-  foreach(var ${res})
-    if(var MATCHES "^CPACK")
-      if(CPACK_VERBATIM_VARIABLES)
-        _cpack_escape_for_cmake(value "${${var}}")
-      else()
-        set(value "${${var}}")
-      endif()
-
-      string(APPEND commands "\nset(${var} \"${value}\")")
-    endif()
-  endforeach()
-
-  set(_CPACK_OTHER_VARIABLES_ "${commands}" PARENT_SCOPE)
-endfunction()
-
-# Internal use functions
-function(_cpack_set_default name value)
-  if(NOT DEFINED "${name}")
-    set("${name}" "${value}" PARENT_SCOPE)
-  endif()
-endfunction()
-
-function(_cpack_escape_for_cmake var value)
-  string(REGEX REPLACE "([\\\$\"])" "\\\\\\1" escaped "${value}")
-  set("${var}" "${escaped}" PARENT_SCOPE)
-endfunction()
-
-# Set the package name
-_cpack_set_default(CPACK_PACKAGE_NAME "${CMAKE_PROJECT_NAME}")
-
-# Set the package version
-if(CMAKE_PROJECT_VERSION_MAJOR GREATER_EQUAL 0)
-  _cpack_set_default(CPACK_PACKAGE_VERSION_MAJOR "${CMAKE_PROJECT_VERSION_MAJOR}")
-  if(CMAKE_PROJECT_VERSION_MINOR GREATER_EQUAL 0)
-    _cpack_set_default(CPACK_PACKAGE_VERSION_MINOR "${CMAKE_PROJECT_VERSION_MINOR}")
-    if(CMAKE_PROJECT_VERSION_PATCH GREATER_EQUAL 0)
-      _cpack_set_default(CPACK_PACKAGE_VERSION_PATCH "${CMAKE_PROJECT_VERSION_PATCH}")
-    endif()
-  endif()
-else()
-  _cpack_set_default(CPACK_PACKAGE_VERSION_MAJOR "0")
-  _cpack_set_default(CPACK_PACKAGE_VERSION_MINOR "1")
-  _cpack_set_default(CPACK_PACKAGE_VERSION_PATCH "1")
-endif()
-if(NOT DEFINED CPACK_PACKAGE_VERSION)
-  set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}")
-  if(CPACK_PACKAGE_VERSION_MINOR GREATER_EQUAL 0)
-    string(APPEND CPACK_PACKAGE_VERSION ".${CPACK_PACKAGE_VERSION_MINOR}")
-    if(CPACK_PACKAGE_VERSION_PATCH GREATER_EQUAL 0)
-      string(APPEND CPACK_PACKAGE_VERSION ".${CPACK_PACKAGE_VERSION_PATCH}")
-    endif()
-  endif()
-endif()
-
-_cpack_set_default(CPACK_PACKAGE_VENDOR "Humanity")
-set(CPACK_DEFAULT_PACKAGE_DESCRIPTION_SUMMARY "${CMAKE_PROJECT_NAME} built using CMake")
-if(CMAKE_PROJECT_DESCRIPTION)
-  _cpack_set_default(CPACK_PACKAGE_DESCRIPTION_SUMMARY
-    "${CMAKE_PROJECT_DESCRIPTION}")
-else()
-  _cpack_set_default(CPACK_PACKAGE_DESCRIPTION_SUMMARY
-    "${CPACK_DEFAULT_PACKAGE_DESCRIPTION_SUMMARY}")
-endif()
-if(CMAKE_PROJECT_HOMEPAGE_URL)
-  _cpack_set_default(CPACK_PACKAGE_HOMEPAGE_URL
-    "${CMAKE_PROJECT_HOMEPAGE_URL}")
-endif()
-
-set(CPACK_DEFAULT_PACKAGE_DESCRIPTION_FILE
-  "${CMAKE_ROOT}/Templates/CPack.GenericDescription.txt")
-_cpack_set_default(CPACK_PACKAGE_DESCRIPTION_FILE
-  "${CPACK_DEFAULT_PACKAGE_DESCRIPTION_FILE}")
-_cpack_set_default(CPACK_RESOURCE_FILE_LICENSE
-  "${CMAKE_ROOT}/Templates/CPack.GenericLicense.txt")
-_cpack_set_default(CPACK_RESOURCE_FILE_README
-  "${CMAKE_ROOT}/Templates/CPack.GenericDescription.txt")
-_cpack_set_default(CPACK_RESOURCE_FILE_WELCOME
-  "${CMAKE_ROOT}/Templates/CPack.GenericWelcome.txt")
-
-_cpack_set_default(CPACK_MODULE_PATH "${CMAKE_MODULE_PATH}")
-
-# Set default directory creation permissions mode
-if(CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS)
-  _cpack_set_default(CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS
-    "${CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS}")
-endif()
-
-if(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL)
-  set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON)
-endif()
-
-if(CPACK_NSIS_MODIFY_PATH)
-  set(CPACK_NSIS_MODIFY_PATH ON)
-endif()
-
-set(__cpack_system_name ${CMAKE_SYSTEM_NAME})
-if(__cpack_system_name MATCHES "Windows")
-  if(CMAKE_SIZEOF_VOID_P EQUAL 8)
-    set(__cpack_system_name win64)
-  else()
-    set(__cpack_system_name win32)
-  endif()
-endif()
-_cpack_set_default(CPACK_SYSTEM_NAME "${__cpack_system_name}")
-
-# Root dir: default value should be the string literal "$PROGRAMFILES"
-# for backwards compatibility. Projects may set this value to anything.
-# When creating 64 bit binaries we set the default value to "$PROGRAMFILES64"
-if("x${__cpack_system_name}" STREQUAL "xwin64")
-  set(__cpack_root_default "$PROGRAMFILES64")
-else()
-  set(__cpack_root_default "$PROGRAMFILES")
-endif()
-_cpack_set_default(CPACK_NSIS_INSTALL_ROOT "${__cpack_root_default}")
-
-# <project>-<major>.<minor>.<patch>-<release>-<platform>.<pkgtype>
-_cpack_set_default(CPACK_PACKAGE_FILE_NAME
-  "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_SYSTEM_NAME}")
-_cpack_set_default(CPACK_PACKAGE_INSTALL_DIRECTORY
-  "${CPACK_PACKAGE_NAME} ${CPACK_PACKAGE_VERSION}")
-_cpack_set_default(CPACK_PACKAGE_INSTALL_REGISTRY_KEY
-  "${CPACK_PACKAGE_INSTALL_DIRECTORY}")
-_cpack_set_default(CPACK_PACKAGE_DEFAULT_LOCATION "/")
-_cpack_set_default(CPACK_PACKAGE_RELOCATABLE "true")
-
-# always force to exactly "true" or "false" for CPack.Info.plist.in:
-if(CPACK_PACKAGE_RELOCATABLE)
-  set(CPACK_PACKAGE_RELOCATABLE "true")
-else()
-  set(CPACK_PACKAGE_RELOCATABLE "false")
-endif()
-
-macro(cpack_check_file_exists file description)
-  if(NOT EXISTS "${file}")
-    message(SEND_ERROR "CPack ${description} file: \"${file}\" could not be found.")
-  endif()
-endmacro()
-
-cpack_check_file_exists("${CPACK_PACKAGE_DESCRIPTION_FILE}" "package description")
-cpack_check_file_exists("${CPACK_RESOURCE_FILE_LICENSE}"    "license resource")
-cpack_check_file_exists("${CPACK_RESOURCE_FILE_README}"     "readme resource")
-cpack_check_file_exists("${CPACK_RESOURCE_FILE_WELCOME}"    "welcome resource")
-
-macro(cpack_optional_append _list _cond _item)
-  if(${_cond})
-    set(${_list} ${${_list}} ${_item})
-  endif()
-endmacro()
-
-# Provide options to choose generators we might check here if the required
-# tools for the generators exist and set the defaults according to the
-# results.
-if(NOT CPACK_GENERATOR)
-  if(UNIX)
-    if(CYGWIN)
-      option(CPACK_BINARY_CYGWIN "Enable to build Cygwin binary packages" ON)
-    else()
-      if(APPLE)
-        option(CPACK_BINARY_BUNDLE       "Enable to build OSX bundles"      OFF)
-        option(CPACK_BINARY_DRAGNDROP    "Enable to build OSX Drag And Drop package" OFF)
-        option(CPACK_BINARY_OSXX11       "Enable to build OSX X11 packages (deprecated)" OFF)
-        option(CPACK_BINARY_PACKAGEMAKER "Enable to build PackageMaker packages (deprecated)" OFF)
-        option(CPACK_BINARY_PRODUCTBUILD "Enable to build productbuild packages" OFF)
-        mark_as_advanced(
-          CPACK_BINARY_BUNDLE
-          CPACK_BINARY_DRAGNDROP
-          CPACK_BINARY_OSXX11
-          CPACK_BINARY_PACKAGEMAKER
-          CPACK_BINARY_PRODUCTBUILD
-          )
-      else()
-        option(CPACK_BINARY_TZ  "Enable to build TZ packages"     ON)
-        mark_as_advanced(CPACK_BINARY_TZ)
-      endif()
-      option(CPACK_BINARY_DEB  "Enable to build Debian packages"  OFF)
-      option(CPACK_BINARY_FREEBSD  "Enable to build FreeBSD packages"  OFF)
-      option(CPACK_BINARY_NSIS "Enable to build NSIS packages"    OFF)
-      option(CPACK_BINARY_RPM  "Enable to build RPM packages"     OFF)
-      option(CPACK_BINARY_STGZ "Enable to build STGZ packages"    ON)
-      option(CPACK_BINARY_TBZ2 "Enable to build TBZ2 packages"    OFF)
-      option(CPACK_BINARY_TGZ  "Enable to build TGZ packages"     ON)
-      option(CPACK_BINARY_TXZ  "Enable to build TXZ packages"     OFF)
-      mark_as_advanced(
-        CPACK_BINARY_DEB
-        CPACK_BINARY_FREEBSD
-        CPACK_BINARY_NSIS
-        CPACK_BINARY_RPM
-        CPACK_BINARY_STGZ
-        CPACK_BINARY_TBZ2
-        CPACK_BINARY_TGZ
-        CPACK_BINARY_TXZ
-        )
-    endif()
-  else()
-    option(CPACK_BINARY_7Z    "Enable to build 7-Zip packages" OFF)
-    option(CPACK_BINARY_NSIS  "Enable to build NSIS packages" ON)
-    option(CPACK_BINARY_NUGET "Enable to build NuGet packages" OFF)
-    option(CPACK_BINARY_WIX   "Enable to build WiX packages" OFF)
-    option(CPACK_BINARY_ZIP   "Enable to build ZIP packages" OFF)
-    mark_as_advanced(
-      CPACK_BINARY_7Z
-      CPACK_BINARY_NSIS
-      CPACK_BINARY_NUGET
-      CPACK_BINARY_WIX
-      CPACK_BINARY_ZIP
-      )
-  endif()
-  option(CPACK_BINARY_IFW "Enable to build IFW packages" OFF)
-  mark_as_advanced(CPACK_BINARY_IFW)
-
-  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_7Z           7Z)
-  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_BUNDLE       Bundle)
-  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_CYGWIN       CygwinBinary)
-  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_DEB          DEB)
-  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_DRAGNDROP    DragNDrop)
-  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_FREEBSD      FREEBSD)
-  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_IFW          IFW)
-  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_NSIS         NSIS)
-  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_NUGET        NuGet)
-  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_OSXX11       OSXX11)
-  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_PACKAGEMAKER PackageMaker)
-  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_PRODUCTBUILD productbuild)
-  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_RPM          RPM)
-  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_STGZ         STGZ)
-  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_TBZ2         TBZ2)
-  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_TGZ          TGZ)
-  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_TXZ          TXZ)
-  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_TZ           TZ)
-  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_WIX          WIX)
-  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_ZIP          ZIP)
-
-endif()
-
-# Provide options to choose source generators
-if(NOT CPACK_SOURCE_GENERATOR)
-  if(UNIX)
-    if(CYGWIN)
-      option(CPACK_SOURCE_CYGWIN "Enable to build Cygwin source packages" ON)
-      mark_as_advanced(CPACK_SOURCE_CYGWIN)
-    else()
-      option(CPACK_SOURCE_RPM  "Enable to build RPM source packages"  OFF)
-      option(CPACK_SOURCE_TBZ2 "Enable to build TBZ2 source packages" ON)
-      option(CPACK_SOURCE_TGZ  "Enable to build TGZ source packages"  ON)
-      option(CPACK_SOURCE_TXZ  "Enable to build TXZ source packages"  ON)
-      option(CPACK_SOURCE_TZ   "Enable to build TZ source packages"   ON)
-      option(CPACK_SOURCE_ZIP  "Enable to build ZIP source packages"  OFF)
-      mark_as_advanced(
-        CPACK_SOURCE_RPM
-        CPACK_SOURCE_TBZ2
-        CPACK_SOURCE_TGZ
-        CPACK_SOURCE_TXZ
-        CPACK_SOURCE_TZ
-        CPACK_SOURCE_ZIP
-        )
-    endif()
-  else()
-    option(CPACK_SOURCE_7Z  "Enable to build 7-Zip source packages" ON)
-    option(CPACK_SOURCE_ZIP "Enable to build ZIP source packages" ON)
-    mark_as_advanced(
-      CPACK_SOURCE_7Z
-      CPACK_SOURCE_ZIP
-      )
-  endif()
-
-  cpack_optional_append(CPACK_SOURCE_GENERATOR  CPACK_SOURCE_7Z      7Z)
-  cpack_optional_append(CPACK_SOURCE_GENERATOR  CPACK_SOURCE_CYGWIN  CygwinSource)
-  cpack_optional_append(CPACK_SOURCE_GENERATOR  CPACK_SOURCE_RPM     RPM)
-  cpack_optional_append(CPACK_SOURCE_GENERATOR  CPACK_SOURCE_TBZ2    TBZ2)
-  cpack_optional_append(CPACK_SOURCE_GENERATOR  CPACK_SOURCE_TGZ     TGZ)
-  cpack_optional_append(CPACK_SOURCE_GENERATOR  CPACK_SOURCE_TXZ     TXZ)
-  cpack_optional_append(CPACK_SOURCE_GENERATOR  CPACK_SOURCE_TZ      TZ)
-  cpack_optional_append(CPACK_SOURCE_GENERATOR  CPACK_SOURCE_ZIP     ZIP)
-endif()
-
-# Set some other variables
-_cpack_set_default(CPACK_INSTALL_CMAKE_PROJECTS
-  "${CMAKE_BINARY_DIR};${CMAKE_PROJECT_NAME};ALL;/")
-_cpack_set_default(CPACK_CMAKE_GENERATOR "${CMAKE_GENERATOR}")
-_cpack_set_default(CPACK_TOPLEVEL_TAG "${CPACK_SYSTEM_NAME}")
-# if the user has set CPACK_NSIS_DISPLAY_NAME remember it
-if(DEFINED CPACK_NSIS_DISPLAY_NAME)
-  set(CPACK_NSIS_DISPLAY_NAME_SET TRUE)
-endif()
-# if the user has set CPACK_NSIS_DISPLAY
-# explicitly, then use that as the default
-# value of CPACK_NSIS_PACKAGE_NAME  instead
-# of CPACK_PACKAGE_INSTALL_DIRECTORY
-_cpack_set_default(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY}")
-# Specify the name of the Uninstall file in NSIS
-_cpack_set_default(CPACK_NSIS_UNINSTALL_NAME "Uninstall")
-
-if(CPACK_NSIS_DISPLAY_NAME_SET)
-  _cpack_set_default(CPACK_NSIS_PACKAGE_NAME "${CPACK_NSIS_DISPLAY_NAME}")
-else()
-  _cpack_set_default(CPACK_NSIS_PACKAGE_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY}")
-endif()
-
-_cpack_set_default(CPACK_OUTPUT_CONFIG_FILE
-  "${CMAKE_BINARY_DIR}/CPackConfig.cmake")
-
-_cpack_set_default(CPACK_SOURCE_OUTPUT_CONFIG_FILE
-  "${CMAKE_BINARY_DIR}/CPackSourceConfig.cmake")
-
-_cpack_set_default(CPACK_SET_DESTDIR OFF)
-_cpack_set_default(CPACK_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
-
-_cpack_set_default(CPACK_NSIS_INSTALLER_ICON_CODE "")
-_cpack_set_default(CPACK_NSIS_INSTALLER_MUI_ICON_CODE "")
-
-# WiX specific variables
-_cpack_set_default(CPACK_WIX_SIZEOF_VOID_P "${CMAKE_SIZEOF_VOID_P}")
-
-# set sysroot so SDK tools can be used
-if(CMAKE_OSX_SYSROOT)
-  _cpack_set_default(CPACK_OSX_SYSROOT "${_CMAKE_OSX_SYSROOT_PATH}")
-endif()
-
-_cpack_set_default(CPACK_BUILD_SOURCE_DIRS "${CMAKE_SOURCE_DIR};${CMAKE_BINARY_DIR}")
-
-if(DEFINED CPACK_COMPONENTS_ALL)
-  if(CPACK_MONOLITHIC_INSTALL)
-    message("CPack warning: both CPACK_COMPONENTS_ALL and CPACK_MONOLITHIC_INSTALL have been set.\nDefaulting to a monolithic installation.")
-    set(CPACK_COMPONENTS_ALL)
-  else()
-    # The user has provided the set of components to be installed as
-    # part of a component-based installation; trust her.
-    set(CPACK_COMPONENTS_ALL_SET_BY_USER TRUE)
-  endif()
-else()
-  # If the user has not specifically requested a monolithic installer
-  # but has specified components in various "install" commands, tell
-  # CPack about those components.
-  if(NOT CPACK_MONOLITHIC_INSTALL)
-    get_cmake_property(CPACK_COMPONENTS_ALL COMPONENTS)
-    list(LENGTH CPACK_COMPONENTS_ALL CPACK_COMPONENTS_LEN)
-    if(CPACK_COMPONENTS_LEN EQUAL 1)
-      # Only one component: this is not a component-based installation
-      # (at least, it isn't a component-based installation, but may
-      # become one later if the user uses the cpack_add_* commands).
-      set(CPACK_COMPONENTS_ALL)
-    endif()
-    set(CPACK_COMPONENTS_LEN)
-  endif()
-endif()
-
-# CMake always generates a component named "Unspecified", which is
-# used to install everything that doesn't have an explicitly-provided
-# component. Since these files should always be installed, we'll make
-# them hidden and required.
-set(CPACK_COMPONENT_UNSPECIFIED_HIDDEN TRUE)
-set(CPACK_COMPONENT_UNSPECIFIED_REQUIRED TRUE)
-
-cpack_encode_variables()
-configure_file("${cpack_input_file}" "${CPACK_OUTPUT_CONFIG_FILE}" @ONLY)
-
-# Generate source file
-_cpack_set_default(CPACK_SOURCE_INSTALLED_DIRECTORIES
-  "${CMAKE_SOURCE_DIR};/")
-_cpack_set_default(CPACK_SOURCE_TOPLEVEL_TAG "${CPACK_SYSTEM_NAME}-Source")
-_cpack_set_default(CPACK_SOURCE_PACKAGE_FILE_NAME
-  "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Source")
-
-set(__cpack_source_ignore_files_default
-  "/CVS/;/\\.svn/;/\\.bzr/;/\\.hg/;/\\.git/;\\.swp$;\\.#;/#")
-if(NOT CPACK_VERBATIM_VARIABLES)
-  _cpack_escape_for_cmake(__cpack_source_ignore_files_default
-    "${__cpack_source_ignore_files_default}")
-endif()
-_cpack_set_default(CPACK_SOURCE_IGNORE_FILES "${__cpack_source_ignore_files_default}")
-
-set(CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_SOURCE_INSTALL_CMAKE_PROJECTS}")
-set(CPACK_INSTALLED_DIRECTORIES "${CPACK_SOURCE_INSTALLED_DIRECTORIES}")
-set(CPACK_GENERATOR "${CPACK_SOURCE_GENERATOR}")
-set(CPACK_TOPLEVEL_TAG "${CPACK_SOURCE_TOPLEVEL_TAG}")
-set(CPACK_PACKAGE_FILE_NAME "${CPACK_SOURCE_PACKAGE_FILE_NAME}")
-set(CPACK_IGNORE_FILES "${CPACK_SOURCE_IGNORE_FILES}")
-set(CPACK_STRIP_FILES "${CPACK_SOURCE_STRIP_FILES}")
-
-set(CPACK_RPM_PACKAGE_SOURCES "ON")
-
-cpack_encode_variables()
-configure_file("${cpack_source_input_file}"
-  "${CPACK_SOURCE_OUTPUT_CONFIG_FILE}" @ONLY)
diff --git a/share/cmake-3.18/Modules/CPackIFW.cmake b/share/cmake-3.18/Modules/CPackIFW.cmake
deleted file mode 100644
index 80a907f..0000000
--- a/share/cmake-3.18/Modules/CPackIFW.cmake
+++ /dev/null
@@ -1,739 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CPackIFW
---------
-
-This module looks for the location of the command-line utilities supplied with the
-`Qt Installer Framework <http://doc.qt.io/qtinstallerframework/index.html>`_
-(QtIFW).
-
-The module also defines several commands to control the behavior of the
-:cpack_gen:`CPack IFW Generator`.
-
-Commands
-^^^^^^^^
-
-The module defines the following commands:
-
-.. command:: cpack_ifw_configure_component
-
-  Sets the arguments specific to the CPack IFW generator.
-
-  ::
-
-    cpack_ifw_configure_component(<compname> [COMMON] [ESSENTIAL] [VIRTUAL]
-                        [FORCED_INSTALLATION] [REQUIRES_ADMIN_RIGHTS]
-                        [NAME <name>]
-                        [DISPLAY_NAME <display_name>] # Note: Internationalization supported
-                        [DESCRIPTION <description>] # Note: Internationalization supported
-                        [UPDATE_TEXT <update_text>]
-                        [VERSION <version>]
-                        [RELEASE_DATE <release_date>]
-                        [SCRIPT <script>]
-                        [PRIORITY|SORTING_PRIORITY <sorting_priority>] # Note: PRIORITY is deprecated
-                        [DEPENDS|DEPENDENCIES <com_id> ...]
-                        [AUTO_DEPEND_ON <comp_id> ...]
-                        [LICENSES <display_name> <file_path> ...]
-                        [DEFAULT <value>]
-                        [USER_INTERFACES <file_path> <file_path> ...]
-                        [TRANSLATIONS <file_path> <file_path> ...]
-                        [REPLACES <comp_id> ...]
-                        [CHECKABLE <value>])
-
-  This command should be called after :command:`cpack_add_component` command.
-
-  ``COMMON``
-    if set, then the component will be packaged and installed as part
-    of a group to which it belongs.
-
-  ``ESSENTIAL``
-    if set, then the package manager stays disabled until that
-    component is updated.
-
-  ``VIRTUAL``
-    if set, then the component will be hidden from the installer.
-    It is a equivalent of the ``HIDDEN`` option from the
-    :command:`cpack_add_component` command.
-
-  ``FORCED_INSTALLATION``
-    if set, then the component must always be installed.
-    It is a equivalent of the ``REQUIRED`` option from the
-    :command:`cpack_add_component` command.
-
-  ``REQUIRES_ADMIN_RIGHTS``
-    set it if the component needs to be installed with elevated permissions.
-
-  ``NAME``
-    is used to create domain-like identification for this component.
-    By default used origin component name.
-
-  ``DISPLAY_NAME``
-    set to rewrite original name configured by
-    :command:`cpack_add_component` command.
-
-  ``DESCRIPTION``
-    set to rewrite original description configured by
-    :command:`cpack_add_component` command.
-
-  ``UPDATE_TEXT``
-    will be added to the component description if this is an update to
-    the component.
-
-  ``VERSION``
-    is version of component.
-    By default used :variable:`CPACK_PACKAGE_VERSION`.
-
-  ``RELEASE_DATE``
-    keep empty to auto generate.
-
-  ``SCRIPT``
-    is a relative or absolute path to operations script
-    for this component.
-
-  ``PRIORITY`` | ``SORTING_PRIORITY``
-    is priority of the component in the tree.
-    The ``PRIORITY`` option is deprecated and will be removed in a future
-    version of CMake. Please use ``SORTING_PRIORITY`` option instead.
-
-  ``DEPENDS`` | ``DEPENDENCIES``
-    list of dependency component or component group identifiers in
-    QtIFW style.
-
-  ``AUTO_DEPEND_ON``
-    list of identifiers of component or component group in QtIFW style
-    that this component has an automatic dependency on.
-
-  ``LICENSES``
-    pair of <display_name> and <file_path> of license text for this
-    component. You can specify more then one license.
-
-  ``DEFAULT``
-    Possible values are: TRUE, FALSE, and SCRIPT.
-    Set to FALSE to disable the component in the installer or to SCRIPT
-    to resolved during runtime (don't forget add the file of the script
-    as a value of the ``SCRIPT`` option).
-
-  ``USER_INTERFACES``
-    is a list of <file_path> ('.ui' files) representing pages to load.
-
-  ``TRANSLATIONS``
-    is a list of <file_path> ('.qm' files) representing translations to load.
-
-  ``REPLACES``
-    list of identifiers of component or component group to replace.
-
-  ``CHECKABLE``
-    Possible values are: TRUE, FALSE.
-    Set to FALSE if you want to hide the checkbox for an item.
-    This is useful when only a few subcomponents should be selected
-    instead of all.
-
-
-.. command:: cpack_ifw_configure_component_group
-
-  Sets the arguments specific to the CPack IFW generator.
-
-  ::
-
-    cpack_ifw_configure_component_group(<groupname> [VIRTUAL]
-                        [FORCED_INSTALLATION] [REQUIRES_ADMIN_RIGHTS]
-                        [NAME <name>]
-                        [DISPLAY_NAME <display_name>] # Note: Internationalization supported
-                        [DESCRIPTION <description>] # Note: Internationalization supported
-                        [UPDATE_TEXT <update_text>]
-                        [VERSION <version>]
-                        [RELEASE_DATE <release_date>]
-                        [SCRIPT <script>]
-                        [PRIORITY|SORTING_PRIORITY <sorting_priority>] # Note: PRIORITY is deprecated
-                        [DEPENDS|DEPENDENCIES <com_id> ...]
-                        [AUTO_DEPEND_ON <comp_id> ...]
-                        [LICENSES <display_name> <file_path> ...]
-                        [DEFAULT <value>]
-                        [USER_INTERFACES <file_path> <file_path> ...]
-                        [TRANSLATIONS <file_path> <file_path> ...]
-                        [REPLACES <comp_id> ...]
-                        [CHECKABLE <value>])
-
-  This command should be called after :command:`cpack_add_component_group`
-  command.
-
-  ``VIRTUAL``
-    if set, then the group will be hidden from the installer.
-    Note that setting this on a root component does not work.
-
-  ``FORCED_INSTALLATION``
-    if set, then the group must always be installed.
-
-  ``REQUIRES_ADMIN_RIGHTS``
-    set it if the component group needs to be installed with elevated
-    permissions.
-
-  ``NAME``
-    is used to create domain-like identification for this component group.
-    By default used origin component group name.
-
-  ``DISPLAY_NAME``
-    set to rewrite original name configured by
-    :command:`cpack_add_component_group` command.
-
-  ``DESCRIPTION``
-    set to rewrite original description configured by
-    :command:`cpack_add_component_group` command.
-
-  ``UPDATE_TEXT``
-    will be added to the component group description if this is an update to
-    the component group.
-
-  ``VERSION``
-    is version of component group.
-    By default used :variable:`CPACK_PACKAGE_VERSION`.
-
-  ``RELEASE_DATE``
-    keep empty to auto generate.
-
-  ``SCRIPT``
-    is a relative or absolute path to operations script
-    for this component group.
-
-  ``PRIORITY`` | ``SORTING_PRIORITY``
-    is priority of the component group in the tree.
-    The ``PRIORITY`` option is deprecated and will be removed in a future
-    version of CMake. Please use ``SORTING_PRIORITY`` option instead.
-
-  ``DEPENDS`` | ``DEPENDENCIES``
-    list of dependency component or component group identifiers in
-    QtIFW style.
-
-  ``AUTO_DEPEND_ON``
-    list of identifiers of component or component group in QtIFW style
-    that this component group has an automatic dependency on.
-
-  ``LICENSES``
-    pair of <display_name> and <file_path> of license text for this
-    component group. You can specify more then one license.
-
-  ``DEFAULT``
-    Possible values are: TRUE, FALSE, and SCRIPT.
-    Set to TRUE to preselect the group in the installer
-    (this takes effect only on groups that have no visible child components)
-    or to SCRIPT to resolved during runtime (don't forget add the file of
-    the script as a value of the ``SCRIPT`` option).
-
-  ``USER_INTERFACES``
-    is a list of <file_path> ('.ui' files) representing pages to load.
-
-  ``TRANSLATIONS``
-    is a list of <file_path> ('.qm' files) representing translations to load.
-
-  ``REPLACES``
-    list of identifiers of component or component group to replace.
-
-  ``CHECKABLE``
-    Possible values are: TRUE, FALSE.
-    Set to FALSE if you want to hide the checkbox for an item.
-    This is useful when only a few subcomponents should be selected
-    instead of all.
-
-
-.. command:: cpack_ifw_add_repository
-
-  Add QtIFW specific remote repository to binary installer.
-
-  ::
-
-    cpack_ifw_add_repository(<reponame> [DISABLED]
-                        URL <url>
-                        [USERNAME <username>]
-                        [PASSWORD <password>]
-                        [DISPLAY_NAME <display_name>])
-
-  This command will also add the <reponame> repository
-  to a variable :variable:`CPACK_IFW_REPOSITORIES_ALL`.
-
-  ``DISABLED``
-    if set, then the repository will be disabled by default.
-
-  ``URL``
-    is points to a list of available components.
-
-  ``USERNAME``
-    is used as user on a protected repository.
-
-  ``PASSWORD``
-    is password to use on a protected repository.
-
-  ``DISPLAY_NAME``
-    is string to display instead of the URL.
-
-
-.. command:: cpack_ifw_update_repository
-
-  Update QtIFW specific repository from remote repository.
-
-  ::
-
-    cpack_ifw_update_repository(<reponame>
-                        [[ADD|REMOVE] URL <url>]|
-                         [REPLACE OLD_URL <old_url> NEW_URL <new_url>]]
-                        [USERNAME <username>]
-                        [PASSWORD <password>]
-                        [DISPLAY_NAME <display_name>])
-
-  This command will also add the <reponame> repository
-  to a variable :variable:`CPACK_IFW_REPOSITORIES_ALL`.
-
-  ``URL``
-    is points to a list of available components.
-
-  ``OLD_URL``
-    is points to a list that will replaced.
-
-  ``NEW_URL``
-    is points to a list that will replace to.
-
-  ``USERNAME``
-    is used as user on a protected repository.
-
-  ``PASSWORD``
-    is password to use on a protected repository.
-
-  ``DISPLAY_NAME``
-    is string to display instead of the URL.
-
-
-.. command:: cpack_ifw_add_package_resources
-
-  Add additional resources in the installer binary.
-
-  ::
-
-    cpack_ifw_add_package_resources(<file_path> <file_path> ...)
-
-  This command will also add the specified files
-  to a variable :variable:`CPACK_IFW_PACKAGE_RESOURCES`.
-
-#]=======================================================================]
-
-# TODO:
-# All of the internal implementation CMake modules for other CPack generators
-# have been moved into the Internal/CPack directory. This one has not, because
-# it contains user-facing macros which would be lost if it were moved. At some
-# point, this module should be split into user-facing macros (which would live
-# in this module) and internal implementation details (which would live in
-# Internal/CPack/CPackIFW.cmake).
-
-#=============================================================================
-# Search Qt Installer Framework tools
-#=============================================================================
-
-# Default path
-
-foreach(_CPACK_IFW_PATH_VAR "CPACK_IFW_ROOT" "QTIFWDIR" "QTDIR")
-  if(DEFINED ${_CPACK_IFW_PATH_VAR}
-    AND NOT "${${_CPACK_IFW_PATH_VAR}}" STREQUAL "")
-    list(APPEND _CPACK_IFW_PATHS "${${_CPACK_IFW_PATH_VAR}}")
-  endif()
-  if(NOT "$ENV{${_CPACK_IFW_PATH_VAR}}" STREQUAL "")
-    list(APPEND _CPACK_IFW_PATHS "$ENV{${_CPACK_IFW_PATH_VAR}}")
-  endif()
-endforeach()
-if(WIN32)
-  list(APPEND _CPACK_IFW_PATHS
-    "$ENV{HOMEDRIVE}/Qt"
-    "C:/Qt")
-else()
-  list(APPEND _CPACK_IFW_PATHS
-    "$ENV{HOME}/Qt"
-    "/opt/Qt")
-endif()
-list(REMOVE_DUPLICATES _CPACK_IFW_PATHS)
-
-set(_CPACK_IFW_PREFIXES
-  # QtSDK
-  "Tools/QtInstallerFramework/"
-  # Second branch
-  "QtIFW"
-  # First branch
-  "QtIFW-")
-
-set(_CPACK_IFW_VERSIONS
-  "3.2"
-  "3.2.0"
-  "3.1"
-  "3.1.0"
-  "3.0"
-  "3.0.0"
-  "2.3"
-  "2.3.0"
-  "2.2"
-  "2.2.0"
-  "2.1"
-  "2.1.0"
-  "2.0"
-  "2.0.5"
-  "2.0.3"
-  "2.0.2"
-  "2.0.1"
-  "2.0.0"
-  "1.6"
-  "1.6.0"
-  "1.5"
-  "1.5.0"
-  "1.4"
-  "1.4.0"
-  "1.3"
-  "1.3.0")
-
-set(_CPACK_IFW_SUFFIXES "bin")
-foreach(_CPACK_IFW_PREFIX ${_CPACK_IFW_PREFIXES})
-  foreach(_CPACK_IFW_VERSION ${_CPACK_IFW_VERSIONS})
-    list(APPEND
-      _CPACK_IFW_SUFFIXES "${_CPACK_IFW_PREFIX}${_CPACK_IFW_VERSION}/bin")
-  endforeach()
-endforeach()
-
-# Look for 'binarycreator'
-
-find_program(CPACK_IFW_BINARYCREATOR_EXECUTABLE
-  NAMES binarycreator
-  PATHS ${_CPACK_IFW_PATHS}
-  PATH_SUFFIXES ${_CPACK_IFW_SUFFIXES}
-  DOC "QtIFW binarycreator command line client")
-
-mark_as_advanced(CPACK_IFW_BINARYCREATOR_EXECUTABLE)
-
-# Look for 'repogen'
-
-find_program(CPACK_IFW_REPOGEN_EXECUTABLE
-  NAMES repogen
-  PATHS ${_CPACK_IFW_PATHS}
-  PATH_SUFFIXES ${_CPACK_IFW_SUFFIXES}
-  DOC "QtIFW repogen command line client"
-  )
-mark_as_advanced(CPACK_IFW_REPOGEN_EXECUTABLE)
-
-# Look for 'installerbase'
-
-find_program(CPACK_IFW_INSTALLERBASE_EXECUTABLE
-  NAMES installerbase
-  PATHS ${_CPACK_IFW_PATHS}
-  PATH_SUFFIXES ${_CPACK_IFW_SUFFIXES}
-  DOC "QtIFW installer executable base"
-  )
-mark_as_advanced(CPACK_IFW_INSTALLERBASE_EXECUTABLE)
-
-# Look for 'devtool' (appeared in the second branch)
-
-find_program(CPACK_IFW_DEVTOOL_EXECUTABLE
-  NAMES devtool
-  PATHS ${_CPACK_IFW_PATHS}
-  PATH_SUFFIXES ${_CPACK_IFW_SUFFIXES}
-  DOC "QtIFW devtool command line client"
-  )
-mark_as_advanced(CPACK_IFW_DEVTOOL_EXECUTABLE)
-
-#
-## Next code is included only once
-#
-
-if(NOT CPackIFW_CMake_INCLUDED)
-set(CPackIFW_CMake_INCLUDED 1)
-
-#=============================================================================
-# Framework version
-#=============================================================================
-
-set(CPACK_IFW_FRAMEWORK_VERSION_FORCED ""
-  CACHE STRING "The forced version of used QtIFW tools")
-mark_as_advanced(CPACK_IFW_FRAMEWORK_VERSION_FORCED)
-set(CPACK_IFW_FRAMEWORK_VERSION_TIMEOUT 1
-  CACHE STRING "The timeout to return QtIFW framework version string from \"installerbase\" executable")
-mark_as_advanced(CPACK_IFW_FRAMEWORK_VERSION_TIMEOUT)
-if(CPACK_IFW_INSTALLERBASE_EXECUTABLE AND NOT CPACK_IFW_FRAMEWORK_VERSION_FORCED)
-  set(CPACK_IFW_FRAMEWORK_VERSION)
-  # Invoke version from "installerbase" executable
-  foreach(_ifw_version_argument --framework-version --version)
-    if(NOT CPACK_IFW_FRAMEWORK_VERSION)
-      execute_process(COMMAND
-        "${CPACK_IFW_INSTALLERBASE_EXECUTABLE}" ${_ifw_version_argument}
-        TIMEOUT ${CPACK_IFW_FRAMEWORK_VERSION_TIMEOUT}
-        RESULT_VARIABLE CPACK_IFW_FRAMEWORK_VERSION_RESULT
-        OUTPUT_VARIABLE CPACK_IFW_FRAMEWORK_VERSION_OUTPUT
-        OUTPUT_STRIP_TRAILING_WHITESPACE
-        ENCODING UTF8)
-      if(NOT CPACK_IFW_FRAMEWORK_VERSION_RESULT AND CPACK_IFW_FRAMEWORK_VERSION_OUTPUT)
-        string(REGEX MATCH "[0-9]+(\\.[0-9]+)*"
-          CPACK_IFW_FRAMEWORK_VERSION "${CPACK_IFW_FRAMEWORK_VERSION_OUTPUT}")
-        if(CPACK_IFW_FRAMEWORK_VERSION)
-          if("${_ifw_version_argument}" STREQUAL "--framework-version")
-            set(CPACK_IFW_FRAMEWORK_VERSION_SOURCE "INSTALLERBASE_FRAMEWORK_VERSION")
-          elseif("${_ifw_version_argument}" STREQUAL "--version")
-            set(CPACK_IFW_FRAMEWORK_VERSION_SOURCE "INSTALLERBASE_FRAMEWORK_VERSION")
-          endif()
-        endif()
-      endif()
-    endif()
-  endforeach()
-  # Finally try to get version from executable path
-  if(NOT CPACK_IFW_FRAMEWORK_VERSION)
-    string(REGEX MATCH "[0-9]+(\\.[0-9]+)*"
-      CPACK_IFW_FRAMEWORK_VERSION "${CPACK_IFW_INSTALLERBASE_EXECUTABLE}")
-    if(CPACK_IFW_FRAMEWORK_VERSION)
-      set(CPACK_IFW_FRAMEWORK_VERSION_SOURCE "INSTALLERBASE_PATH")
-    endif()
-  endif()
-elseif(CPACK_IFW_FRAMEWORK_VERSION_FORCED)
-  set(CPACK_IFW_FRAMEWORK_VERSION ${CPACK_IFW_FRAMEWORK_VERSION_FORCED})
-  set(CPACK_IFW_FRAMEWORK_VERSION_SOURCE "FORCED")
-endif()
-if(CPACK_IFW_VERBOSE)
-  if(CPACK_IFW_FRAMEWORK_VERSION AND CPACK_IFW_FRAMEWORK_VERSION_FORCED)
-    message(STATUS "Found QtIFW ${CPACK_IFW_FRAMEWORK_VERSION} (forced) version")
-  elseif(CPACK_IFW_FRAMEWORK_VERSION)
-    message(STATUS "Found QtIFW ${CPACK_IFW_FRAMEWORK_VERSION} version")
-  endif()
-endif()
-if(CPACK_IFW_INSTALLERBASE_EXECUTABLE AND NOT CPACK_IFW_FRAMEWORK_VERSION)
-  message(WARNING "Could not detect QtIFW tools version. Set used version to variable \"CPACK_IFW_FRAMEWORK_VERSION_FORCED\" manually.")
-endif()
-
-#=============================================================================
-# Macro definition
-#=============================================================================
-
-# Macro definition based on CPackComponent
-
-if(NOT CPackComponent_CMake_INCLUDED)
-    include(CPackComponent)
-endif()
-
-# Resolve full filename for script file
-macro(_cpack_ifw_resolve_script _variable)
-  set(_ifw_script_macro ${_variable})
-  set(_ifw_script_file ${${_ifw_script_macro}})
-  if(DEFINED ${_ifw_script_macro})
-    get_filename_component(${_ifw_script_macro} ${_ifw_script_file} ABSOLUTE)
-    set(_ifw_script_file ${${_ifw_script_macro}})
-    if(NOT EXISTS ${_ifw_script_file})
-      message(WARNING "CPack IFW: script file \"${_ifw_script_file}\" does not exist")
-      set(${_ifw_script_macro})
-    endif()
-  endif()
-endmacro()
-
-# Resolve full path to license file
-macro(_cpack_ifw_resolve_lisenses _variable)
-  if(${_variable})
-    set(_ifw_license_file FALSE)
-    set(_ifw_licenses_fix)
-    foreach(_ifw_licenses_arg ${${_variable}})
-      if(_ifw_license_file)
-        get_filename_component(_ifw_licenses_arg "${_ifw_licenses_arg}" ABSOLUTE)
-        set(_ifw_license_file FALSE)
-      else()
-        set(_ifw_license_file TRUE)
-      endif()
-      list(APPEND _ifw_licenses_fix "${_ifw_licenses_arg}")
-    endforeach(_ifw_licenses_arg)
-    set(${_variable} "${_ifw_licenses_fix}")
-  endif()
-endmacro()
-
-# Resolve full path to a list of provided files
-macro(_cpack_ifw_resolve_file_list _variable)
-  if(${_variable})
-    set(_ifw_list_fix)
-    foreach(_ifw_file_arg ${${_variable}})
-      get_filename_component(_ifw_file_arg "${_ifw_file_arg}" ABSOLUTE)
-      if(EXISTS ${_ifw_file_arg})
-        list(APPEND _ifw_list_fix "${_ifw_file_arg}")
-      else()
-        message(WARNING "CPack IFW: page file \"${_ifw_file_arg}\" does not exist. Skipping")
-      endif()
-    endforeach(_ifw_file_arg)
-    set(${_variable} "${_ifw_list_fix}")
-  endif()
-endmacro()
-
-# Macro for configure component
-macro(cpack_ifw_configure_component compname)
-
-  string(TOUPPER ${compname} _CPACK_IFWCOMP_UNAME)
-
-  set(_IFW_OPT COMMON ESSENTIAL VIRTUAL FORCED_INSTALLATION REQUIRES_ADMIN_RIGHTS)
-  set(_IFW_ARGS NAME VERSION RELEASE_DATE SCRIPT PRIORITY SORTING_PRIORITY UPDATE_TEXT DEFAULT CHECKABLE)
-  set(_IFW_MULTI_ARGS DISPLAY_NAME DESCRIPTION DEPENDS DEPENDENCIES AUTO_DEPEND_ON LICENSES USER_INTERFACES TRANSLATIONS REPLACES)
-  cmake_parse_arguments(CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME} "${_IFW_OPT}" "${_IFW_ARGS}" "${_IFW_MULTI_ARGS}" ${ARGN})
-
-  _cpack_ifw_resolve_script(CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME}_SCRIPT)
-  _cpack_ifw_resolve_lisenses(CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME}_LICENSES)
-  _cpack_ifw_resolve_file_list(CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME}_USER_INTERFACES)
-  _cpack_ifw_resolve_file_list(CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME}_TRANSLATIONS)
-
-  set(_CPACK_IFWCOMP_STR "\n# Configuration for IFW component \"${compname}\"\n")
-
-  foreach(_IFW_ARG_NAME ${_IFW_OPT})
-  cpack_append_option_set_command(
-    CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME}_${_IFW_ARG_NAME}
-    _CPACK_IFWCOMP_STR)
-  endforeach()
-
-  foreach(_IFW_ARG_NAME ${_IFW_ARGS})
-  cpack_append_string_variable_set_command(
-    CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME}_${_IFW_ARG_NAME}
-    _CPACK_IFWCOMP_STR)
-  endforeach()
-
-  foreach(_IFW_ARG_NAME ${_IFW_MULTI_ARGS})
-  cpack_append_list_variable_set_command(
-    CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME}_${_IFW_ARG_NAME}
-    _CPACK_IFWCOMP_STR)
-  endforeach()
-
-  if(CPack_CMake_INCLUDED)
-    file(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" "${_CPACK_IFWCOMP_STR}")
-  endif()
-
-endmacro()
-
-# Macro for configure group
-macro(cpack_ifw_configure_component_group grpname)
-
-  string(TOUPPER ${grpname} _CPACK_IFWGRP_UNAME)
-
-  set(_IFW_OPT VIRTUAL FORCED_INSTALLATION REQUIRES_ADMIN_RIGHTS)
-  set(_IFW_ARGS NAME VERSION RELEASE_DATE SCRIPT PRIORITY SORTING_PRIORITY UPDATE_TEXT DEFAULT CHECKABLE)
-  set(_IFW_MULTI_ARGS DISPLAY_NAME DESCRIPTION DEPENDS DEPENDENCIES AUTO_DEPEND_ON LICENSES USER_INTERFACES TRANSLATIONS REPLACES)
-  cmake_parse_arguments(CPACK_IFW_COMPONENT_GROUP_${_CPACK_IFWGRP_UNAME} "${_IFW_OPT}" "${_IFW_ARGS}" "${_IFW_MULTI_ARGS}" ${ARGN})
-
-  _cpack_ifw_resolve_script(CPACK_IFW_COMPONENT_GROUP_${_CPACK_IFWGRP_UNAME}_SCRIPT)
-  _cpack_ifw_resolve_lisenses(CPACK_IFW_COMPONENT_GROUP_${_CPACK_IFWGRP_UNAME}_LICENSES)
-  _cpack_ifw_resolve_file_list(CPACK_IFW_COMPONENT_GROUP_${_CPACK_IFWGRP_UNAME}_USER_INTERFACES)
-  _cpack_ifw_resolve_file_list(CPACK_IFW_COMPONENT_GROUP_${_CPACK_IFWGRP_UNAME}_TRANSLATIONS)
-
-  set(_CPACK_IFWGRP_STR "\n# Configuration for IFW component group \"${grpname}\"\n")
-
-  foreach(_IFW_ARG_NAME ${_IFW_OPT})
-  cpack_append_option_set_command(
-    CPACK_IFW_COMPONENT_GROUP_${_CPACK_IFWGRP_UNAME}_${_IFW_ARG_NAME}
-    _CPACK_IFWGRP_STR)
-  endforeach()
-
-  foreach(_IFW_ARG_NAME ${_IFW_ARGS})
-  cpack_append_string_variable_set_command(
-    CPACK_IFW_COMPONENT_GROUP_${_CPACK_IFWGRP_UNAME}_${_IFW_ARG_NAME}
-    _CPACK_IFWGRP_STR)
-  endforeach()
-
-  foreach(_IFW_ARG_NAME ${_IFW_MULTI_ARGS})
-  cpack_append_list_variable_set_command(
-    CPACK_IFW_COMPONENT_GROUP_${_CPACK_IFWGRP_UNAME}_${_IFW_ARG_NAME}
-    _CPACK_IFWGRP_STR)
-  endforeach()
-
-  if(CPack_CMake_INCLUDED)
-    file(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" "${_CPACK_IFWGRP_STR}")
-  endif()
-endmacro()
-
-# Macro for adding repository
-macro(cpack_ifw_add_repository reponame)
-
-  string(TOUPPER ${reponame} _CPACK_IFWREPO_UNAME)
-
-  set(_IFW_OPT DISABLED)
-  set(_IFW_ARGS URL USERNAME PASSWORD DISPLAY_NAME)
-  set(_IFW_MULTI_ARGS)
-  cmake_parse_arguments(CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME} "${_IFW_OPT}" "${_IFW_ARGS}" "${_IFW_MULTI_ARGS}" ${ARGN})
-
-  set(_CPACK_IFWREPO_STR "\n# Configuration for IFW repository \"${reponame}\"\n")
-
-  foreach(_IFW_ARG_NAME ${_IFW_OPT})
-  cpack_append_option_set_command(
-    CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME}_${_IFW_ARG_NAME}
-    _CPACK_IFWREPO_STR)
-  endforeach()
-
-  foreach(_IFW_ARG_NAME ${_IFW_ARGS})
-  cpack_append_string_variable_set_command(
-    CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME}_${_IFW_ARG_NAME}
-    _CPACK_IFWREPO_STR)
-  endforeach()
-
-  foreach(_IFW_ARG_NAME ${_IFW_MULTI_ARGS})
-  cpack_append_variable_set_command(
-    CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME}_${_IFW_ARG_NAME}
-    _CPACK_IFWREPO_STR)
-  endforeach()
-
-  list(APPEND CPACK_IFW_REPOSITORIES_ALL ${reponame})
-  string(APPEND _CPACK_IFWREPO_STR "list(APPEND CPACK_IFW_REPOSITORIES_ALL ${reponame})\n")
-
-  if(CPack_CMake_INCLUDED)
-    file(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" "${_CPACK_IFWREPO_STR}")
-  endif()
-
-endmacro()
-
-# Macro for updating repository
-macro(cpack_ifw_update_repository reponame)
-
-  string(TOUPPER ${reponame} _CPACK_IFWREPO_UNAME)
-
-  set(_IFW_OPT ADD REMOVE REPLACE DISABLED)
-  set(_IFW_ARGS URL OLD_URL NEW_URL USERNAME PASSWORD DISPLAY_NAME)
-  set(_IFW_MULTI_ARGS)
-  cmake_parse_arguments(CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME} "${_IFW_OPT}" "${_IFW_ARGS}" "${_IFW_MULTI_ARGS}" ${ARGN})
-
-  set(_CPACK_IFWREPO_STR "\n# Configuration for IFW repository \"${reponame}\" update\n")
-
-  foreach(_IFW_ARG_NAME ${_IFW_OPT})
-  cpack_append_option_set_command(
-    CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME}_${_IFW_ARG_NAME}
-    _CPACK_IFWREPO_STR)
-  endforeach()
-
-  foreach(_IFW_ARG_NAME ${_IFW_ARGS})
-  cpack_append_string_variable_set_command(
-    CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME}_${_IFW_ARG_NAME}
-    _CPACK_IFWREPO_STR)
-  endforeach()
-
-  foreach(_IFW_ARG_NAME ${_IFW_MULTI_ARGS})
-  cpack_append_variable_set_command(
-    CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME}_${_IFW_ARG_NAME}
-    _CPACK_IFWREPO_STR)
-  endforeach()
-
-  if(CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME}_ADD
-    OR CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME}_REMOVE
-    OR CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME}_REPLACE)
-    list(APPEND CPACK_IFW_REPOSITORIES_ALL ${reponame})
-    string(APPEND _CPACK_IFWREPO_STR "list(APPEND CPACK_IFW_REPOSITORIES_ALL ${reponame})\n")
-  else()
-    set(_CPACK_IFWREPO_STR)
-  endif()
-
-  if(CPack_CMake_INCLUDED AND _CPACK_IFWREPO_STR)
-    file(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" "${_CPACK_IFWREPO_STR}")
-  endif()
-
-endmacro()
-
-# Macro for adding resources
-macro(cpack_ifw_add_package_resources)
-  set(_CPACK_IFW_PACKAGE_RESOURCES ${ARGV})
-  _cpack_ifw_resolve_file_list(_CPACK_IFW_PACKAGE_RESOURCES)
-  list(APPEND CPACK_IFW_PACKAGE_RESOURCES ${_CPACK_IFW_PACKAGE_RESOURCES})
-  set(_CPACK_IFWQRC_STR "list(APPEND CPACK_IFW_PACKAGE_RESOURCES \"${_CPACK_IFW_PACKAGE_RESOURCES}\")\n")
-  if(CPack_CMake_INCLUDED)
-    file(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" "${_CPACK_IFWQRC_STR}")
-  endif()
-endmacro()
-
-# Resolve package control script
-_cpack_ifw_resolve_script(CPACK_IFW_PACKAGE_CONTROL_SCRIPT)
-
-endif() # NOT CPackIFW_CMake_INCLUDED
diff --git a/share/cmake-3.18/Modules/CPackIFWConfigureFile.cmake b/share/cmake-3.18/Modules/CPackIFWConfigureFile.cmake
deleted file mode 100644
index 0abe0da..0000000
--- a/share/cmake-3.18/Modules/CPackIFWConfigureFile.cmake
+++ /dev/null
@@ -1,66 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CPackIFWConfigureFile
----------------------
-
-The module defines :command:`configure_file` similar command to
-configure file templates prepared in QtIFW/SDK/Creator style.
-
-
-Commands
-^^^^^^^^
-
-The module defines the following commands:
-
-.. command:: cpack_ifw_configure_file
-
-  Copy a file to another location and modify its contents.
-
-  ::
-
-    cpack_ifw_configure_file(<input> <output>)
-
-  Copies an ``<input>`` file to an ``<output>`` file and substitutes variable
-  values referenced as ``%{VAR}`` or ``%VAR%`` in the input file content.
-  Each variable reference will be replaced with the current value of the
-  variable, or the empty string if the variable is not defined.
-
-#]=======================================================================]
-
-# NOTE: This file used to himself packaging via CPack IFW generator and
-# should be compatible with minimal CMake version defined in
-# ../CMakeLists.txt file.
-
-if(NOT DEFINED CPackIFWConfigureFile_CMake_INCLUDED)
-set(CPackIFWConfigureFile_CMake_INCLUDED 1)
-
-macro(cpack_ifw_configure_file INPUT OUTPUT)
-  file(READ "${INPUT}" _tmp)
-  foreach(_tmp_regex "%{([^%}]+)}" "%([^%]+)%")
-    string(REGEX MATCHALL "${_tmp_regex}" _tmp_vars "${_tmp}")
-    while(_tmp_vars)
-      foreach(_tmp_var ${_tmp_vars})
-        string(REGEX REPLACE "${_tmp_regex}" "\\1"
-          _tmp_var_name "${_tmp_var}")
-        if(DEFINED ${_tmp_var_name})
-          set(_tmp_var_value "${${_tmp_var_name}}")
-        elseif(NOT "$ENV{${_tmp_var_name}}" STREQUAL "")
-          set(_tmp_var_value "$ENV{${_tmp_var_name}}")
-        else()
-          set(_tmp_var_value "")
-        endif()
-        string(REPLACE "${_tmp_var}" "${_tmp_var_value}" _tmp "${_tmp}")
-      endforeach()
-      string(REGEX MATCHALL "${_tmp_regex}" _tmp_vars "${_tmp}")
-    endwhile()
-  endforeach()
-  if(IS_ABSOLUTE "${OUTPUT}")
-    file(WRITE "${OUTPUT}" "${_tmp}")
-  else()
-    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT}" "${_tmp}")
-  endif()
-endmacro()
-
-endif() # NOT DEFINED CPackIFWConfigureFile_CMake_INCLUDED
diff --git a/share/cmake-3.18/Modules/CSharpUtilities.cmake b/share/cmake-3.18/Modules/CSharpUtilities.cmake
deleted file mode 100644
index 6a4b5c7..0000000
--- a/share/cmake-3.18/Modules/CSharpUtilities.cmake
+++ /dev/null
@@ -1,311 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CSharpUtilities
----------------
-
-Functions to make configuration of CSharp/.NET targets easier.
-
-A collection of CMake utility functions useful for dealing with CSharp
-targets for Visual Studio generators from version 2010 and later.
-
-The following functions are provided by this module:
-
-**Main functions**
-
-- :command:`csharp_set_windows_forms_properties`
-- :command:`csharp_set_designer_cs_properties`
-- :command:`csharp_set_xaml_cs_properties`
-
-**Helper functions**
-
-- :command:`csharp_get_filename_keys`
-- :command:`csharp_get_filename_key_base`
-- :command:`csharp_get_dependentupon_name`
-
-Main functions provided by the module
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. command:: csharp_set_windows_forms_properties
-
-  Sets source file properties for use of Windows Forms. Use this, if your CSharp
-  target uses Windows Forms::
-
-    csharp_set_windows_forms_properties([<file1> [<file2> [...]]])
-
-  ``<fileN>``
-    List of all source files which are relevant for setting the
-    :prop_sf:`VS_CSHARP_<tagname>` properties (including ``.cs``, ``.resx`` and
-    ``.Designer.cs`` extensions).
-
-  In the list of all given files for all files ending with ``.Designer.cs`` and
-  ``.resx`` is searched.  For every *designer* or *resource* file a file with the
-  same base name but only ``.cs`` as extension is searched.  If this is found, the
-  :prop_sf:`VS_CSHARP_<tagname>` properties are set as follows:
-
-  for the **.cs** file:
-   - VS_CSHARP_SubType "Form"
-
-  for the **.Designer.cs** file (if it exists):
-   - VS_CSHARP_DependentUpon <cs-filename>
-   - VS_CSHARP_DesignTime "" (delete tag if previously defined)
-   - VS_CSHARP_AutoGen ""(delete tag if previously defined)
-
-  for the **.resx** file (if it exists):
-   - VS_RESOURCE_GENERATOR "" (delete tag if previously defined)
-   - VS_CSHARP_DependentUpon <cs-filename>
-   - VS_CSHARP_SubType "Designer"
-
-.. command:: csharp_set_designer_cs_properties
-
-  Sets source file properties of ``.Designer.cs`` files depending on
-  sibling filenames. Use this, if your CSharp target does **not**
-  use Windows Forms (for Windows Forms use
-  :command:`csharp_set_designer_cs_properties` instead)::
-
-    csharp_set_designer_cs_properties([<file1> [<file2> [...]]])
-
-  ``<fileN>``
-    List of all source files which are relevant for setting the
-    :prop_sf:`VS_CSHARP_<tagname>` properties (including ``.cs``,
-    ``.resx``, ``.settings`` and ``.Designer.cs`` extensions).
-
-  In the list of all given files for all files ending with
-  ``.Designer.cs`` is searched. For every *designer* file all files
-  with the same base name but different extensions are searched. If
-  a match is found, the source file properties of the *designer* file
-  are set depending on the extension of the matched file:
-
-  if match is **.resx** file:
-   - VS_CSHARP_AutoGen "True"
-   - VS_CSHARP_DesignTime "True"
-   - VS_CSHARP_DependentUpon <resx-filename>
-
-  if match is **.cs** file:
-   - VS_CSHARP_DependentUpon <cs-filename>
-
-  if match is **.settings** file:
-   - VS_CSHARP_AutoGen "True"
-   - VS_CSHARP_DesignTimeSharedInput "True"
-   - VS_CSHARP_DependentUpon <settings-filename>
-
-.. note::
-
-    Because the source file properties of the ``.Designer.cs`` file are set according
-    to the found matches and every match sets the **VS_CSHARP_DependentUpon**
-    property, there should only be one match for each ``Designer.cs`` file.
-
-.. command:: csharp_set_xaml_cs_properties
-
-  Sets source file properties for use of Windows Presentation Foundation (WPF) and
-  XAML. Use this, if your CSharp target uses WPF/XAML::
-
-    csharp_set_xaml_cs_properties([<file1> [<file2> [...]]])
-
-  ``<fileN>``
-    List of all source files which are relevant for setting the
-    :prop_sf:`VS_CSHARP_<tagname>` properties (including ``.cs``,
-    ``.xaml``, and ``.xaml.cs`` extensions).
-
-  In the list of all given files for all files ending with
-  ``.xaml.cs`` is searched. For every *xaml-cs* file, a file
-  with the same base name but extension ``.xaml`` is searched.
-  If a match is found, the source file properties of the ``.xaml.cs``
-  file are set:
-
-   - VS_CSHARP_DependentUpon <xaml-filename>
-
-Helper functions which are used by the above ones
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. command:: csharp_get_filename_keys
-
-  Helper function which computes a list of key values to identify
-  source files independently of relative/absolute paths given in cmake
-  and eliminates case sensitivity::
-
-    csharp_get_filename_keys(OUT [<file1> [<file2> [...]]])
-
-  ``OUT``
-    Name of the variable in which the list of keys is stored
-
-  ``<fileN>``
-    filename(s) as given to to CSharp target using :command:`add_library`
-    or :command:`add_executable`
-
-  In some way the function applies a canonicalization to the source names.
-  This is necessary to find file matches if the files have been added to
-  the target with different directory prefixes:
-
-  .. code-block:: cmake
-
-    add_library(lib
-      myfile.cs
-      ${CMAKE_CURRENT_SOURCE_DIR}/myfile.Designer.cs)
-
-    set_source_files_properties(myfile.Designer.cs PROPERTIES
-      VS_CSHARP_DependentUpon myfile.cs)
-
-    # this will fail, because in cmake
-    #  - ${CMAKE_CURRENT_SOURCE_DIR}/myfile.Designer.cs
-    #  - myfile.Designer.cs
-    # are not the same source file. The source file property is not set.
-
-.. command:: csharp_get_filename_key_base
-
-  Returns the full filepath and name **without** extension of a key.
-  KEY is expected to be a key from csharp_get_filename_keys. In BASE
-  the value of KEY without the file extension is returned::
-
-    csharp_get_filename_key_base(BASE KEY)
-
-  ``BASE``
-    Name of the variable with the computed "base" of ``KEY``.
-
-  ``KEY``
-    The key of which the base will be computed. Expected to be a
-    upper case full filename.
-
-.. command:: csharp_get_dependentupon_name
-
-  Computes a string which can be used as value for the source file property
-  :prop_sf:`VS_CSHARP_<tagname>` with *target* being ``DependentUpon``::
-
-    csharp_get_dependentupon_name(NAME FILE)
-
-  ``NAME``
-    Name of the variable with the result value
-
-  ``FILE``
-    Filename to convert to ``<DependentUpon>`` value
-
-  Actually this is only the filename without any path given at the moment.
-
-#]=======================================================================]
-
-cmake_policy(PUSH)
-cmake_policy(SET CMP0057 NEW) # if IN_LIST
-
-function(csharp_get_filename_keys OUT)
-  set(${OUT} "")
-  foreach(f ${ARGN})
-    get_filename_component(f ${f} REALPATH)
-    string(TOUPPER ${f} f)
-    list(APPEND ${OUT} ${f})
-  endforeach()
-  set(${OUT} "${${OUT}}" PARENT_SCOPE)
-endfunction()
-
-function(csharp_get_filename_key_base base key)
-  get_filename_component(dir ${key} DIRECTORY)
-  get_filename_component(fil ${key} NAME_WE)
-  set(${base} "${dir}/${fil}" PARENT_SCOPE)
-endfunction()
-
-function(csharp_get_dependentupon_name out in)
-  get_filename_component(${out} ${in} NAME)
-  set(${out} ${${out}} PARENT_SCOPE)
-endfunction()
-
-function(csharp_set_windows_forms_properties)
-  csharp_get_filename_keys(fileKeys ${ARGN})
-  foreach(key ${fileKeys})
-    get_filename_component(ext ${key} EXT)
-    if(${ext} STREQUAL ".DESIGNER.CS" OR
-       ${ext} STREQUAL ".RESX")
-      csharp_get_filename_key_base(NAME_BASE ${key})
-      list(FIND fileKeys "${NAME_BASE}.CS" FILE_INDEX)
-      if(NOT ${FILE_INDEX} EQUAL -1)
-        list(GET ARGN ${FILE_INDEX} FILE_NAME)
-        # set properties of main form file
-        set_source_files_properties("${FILE_NAME}"
-          PROPERTIES
-          VS_CSHARP_SubType "Form")
-        csharp_get_dependentupon_name(LINK "${FILE_NAME}")
-        # set properties of designer file (if found)
-        list(FIND fileKeys "${NAME_BASE}.DESIGNER.CS" FILE_INDEX)
-        if(NOT ${FILE_INDEX} EQUAL -1)
-          list(GET ARGN ${FILE_INDEX} FILE_NAME)
-          set_source_files_properties("${FILE_NAME}"
-            PROPERTIES
-            VS_CSHARP_DependentUpon "${LINK}"
-            VS_CSHARP_DesignTime ""
-            VS_CSHARP_AutoGen "")
-        endif()
-        # set properties of corresponding resource file (if found)
-        list(FIND fileKeys "${NAME_BASE}.RESX" FILE_INDEX)
-        if(NOT ${FILE_INDEX} EQUAL -1)
-          list(GET ARGN ${FILE_INDEX} FILE_NAME)
-          set_source_files_properties("${FILE_NAME}"
-            PROPERTIES
-            VS_RESOURCE_GENERATOR ""
-            VS_CSHARP_DependentUpon "${LINK}"
-            VS_CSHARP_SubType "Designer")
-        endif()
-      endif()
-    endif()
-  endforeach()
-endfunction()
-
-function(csharp_set_designer_cs_properties)
-  csharp_get_filename_keys(fileKeys ${ARGN})
-  set(INDEX -1)
-  foreach(key ${fileKeys})
-    math(EXPR INDEX "${INDEX}+1")
-    list(GET ARGN ${INDEX} source)
-    get_filename_component(ext ${key} EXT)
-    if(${ext} STREQUAL ".DESIGNER.CS")
-      csharp_get_filename_key_base(NAME_BASE ${key})
-      if("${NAME_BASE}.RESX" IN_LIST fileKeys)
-        list(FIND fileKeys "${NAME_BASE}.RESX" FILE_INDEX)
-        list(GET ARGN ${FILE_INDEX} FILE_NAME)
-        csharp_get_dependentupon_name(LINK "${FILE_NAME}")
-        set_source_files_properties("${source}"
-          PROPERTIES
-          VS_CSHARP_AutoGen "True"
-          VS_CSHARP_DesignTime "True"
-          VS_CSHARP_DependentUpon "${LINK}")
-      elseif("${NAME_BASE}.CS" IN_LIST fileKeys)
-        list(FIND fileKeys "${NAME_BASE}.CS" FILE_INDEX)
-        list(GET ARGN ${FILE_INDEX} FILE_NAME)
-        csharp_get_dependentupon_name(LINK "${FILE_NAME}")
-        set_source_files_properties("${source}"
-          PROPERTIES
-          VS_CSHARP_DependentUpon "${LINK}")
-      elseif("${NAME_BASE}.SETTINGS" IN_LIST fileKeys)
-        list(FIND fileKeys "${NAME_BASE}.SETTINGS" FILE_INDEX)
-        list(GET ARGN ${FILE_INDEX} FILE_NAME)
-        csharp_get_dependentupon_name(LINK "${FILE_NAME}")
-        set_source_files_properties("${source}"
-          PROPERTIES
-          VS_CSHARP_AutoGen "True"
-          VS_CSHARP_DesignTimeSharedInput "True"
-          VS_CSHARP_DependentUpon "${LINK}")
-      endif()
-    endif()
-  endforeach()
-endfunction()
-
-function(csharp_set_xaml_cs_properties)
-  csharp_get_filename_keys(fileKeys ${ARGN})
-  set(INDEX -1)
-  foreach(key ${fileKeys})
-    math(EXPR INDEX "${INDEX}+1")
-    list(GET ARGN ${INDEX} source)
-    get_filename_component(ext ${key} EXT)
-    if(${ext} STREQUAL ".XAML.CS")
-      csharp_get_filename_key_base(NAME_BASE ${key})
-      if("${NAME_BASE}.XAML" IN_LIST fileKeys)
-        list(FIND fileKeys "${NAME_BASE}.XAML" FILE_INDEX)
-        list(GET ARGN ${FILE_INDEX} FILE_NAME)
-        csharp_get_dependentupon_name(LINK "${FILE_NAME}")
-        set_source_files_properties("${source}"
-          PROPERTIES
-          VS_CSHARP_DependentUpon "${LINK}")
-      endif()
-    endif()
-  endforeach()
-endfunction()
-
-cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/CTest.cmake b/share/cmake-3.18/Modules/CTest.cmake
deleted file mode 100644
index 8109108..0000000
--- a/share/cmake-3.18/Modules/CTest.cmake
+++ /dev/null
@@ -1,269 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CTest
------
-
-Configure a project for testing with CTest/CDash
-
-Include this module in the top CMakeLists.txt file of a project to
-enable testing with CTest and dashboard submissions to CDash::
-
-  project(MyProject)
-  ...
-  include(CTest)
-
-The module automatically creates a ``BUILD_TESTING`` option that selects
-whether to enable testing support (``ON`` by default).  After including
-the module, use code like::
-
-  if(BUILD_TESTING)
-    # ... CMake code to create tests ...
-  endif()
-
-to creating tests when testing is enabled.
-
-To enable submissions to a CDash server, create a ``CTestConfig.cmake``
-file at the top of the project with content such as::
-
-  set(CTEST_NIGHTLY_START_TIME "01:00:00 UTC")
-  set(CTEST_SUBMIT_URL "http://my.cdash.org/submit.php?project=MyProject")
-
-(the CDash server can provide the file to a project administrator who
-configures ``MyProject``).  Settings in the config file are shared by
-both this ``CTest`` module and the :manual:`ctest(1)` command-line
-:ref:`Dashboard Client` mode (``ctest -S``).
-
-While building a project for submission to CDash, CTest scans the
-build output for errors and warnings and reports them with surrounding
-context from the build log.  This generic approach works for all build
-tools, but does not give details about the command invocation that
-produced a given problem.  One may get more detailed reports by setting
-the :variable:`CTEST_USE_LAUNCHERS` variable::
-
-  set(CTEST_USE_LAUNCHERS 1)
-
-in the ``CTestConfig.cmake`` file.
-#]=======================================================================]
-
-option(BUILD_TESTING "Build the testing tree." ON)
-
-# function to turn generator name into a version string
-# like vs9 or vs10
-function(GET_VS_VERSION_STRING generator var)
-  string(REGEX REPLACE "Visual Studio ([0-9][0-9]?)($|.*)" "\\1"
-    NUMBER "${generator}")
-    set(ver_string "vs${NUMBER}")
-  set(${var} ${ver_string} PARENT_SCOPE)
-endfunction()
-
-include(CTestUseLaunchers)
-
-if(BUILD_TESTING)
-  # Setup some auxiliary macros
-  macro(SET_IF_NOT_SET var val)
-    if(NOT DEFINED "${var}")
-      set("${var}" "${val}")
-    endif()
-  endmacro()
-
-  macro(SET_IF_SET var val)
-    if(NOT "${val}" STREQUAL "")
-      set("${var}" "${val}")
-    endif()
-  endmacro()
-
-  macro(SET_IF_SET_AND_NOT_SET var val)
-    if(NOT "${val}" STREQUAL "")
-      SET_IF_NOT_SET("${var}" "${val}")
-    endif()
-  endmacro()
-
-  # Make sure testing is enabled
-  enable_testing()
-
-  if(EXISTS "${PROJECT_SOURCE_DIR}/CTestConfig.cmake")
-    include("${PROJECT_SOURCE_DIR}/CTestConfig.cmake")
-    SET_IF_SET_AND_NOT_SET(NIGHTLY_START_TIME "${CTEST_NIGHTLY_START_TIME}")
-    SET_IF_SET_AND_NOT_SET(SUBMIT_URL "${CTEST_SUBMIT_URL}")
-    SET_IF_SET_AND_NOT_SET(DROP_METHOD "${CTEST_DROP_METHOD}")
-    SET_IF_SET_AND_NOT_SET(DROP_SITE "${CTEST_DROP_SITE}")
-    SET_IF_SET_AND_NOT_SET(DROP_SITE_USER "${CTEST_DROP_SITE_USER}")
-    SET_IF_SET_AND_NOT_SET(DROP_SITE_PASSWORD "${CTEST_DROP_SITE_PASWORD}")
-    SET_IF_SET_AND_NOT_SET(DROP_SITE_MODE "${CTEST_DROP_SITE_MODE}")
-    SET_IF_SET_AND_NOT_SET(DROP_LOCATION "${CTEST_DROP_LOCATION}")
-    SET_IF_SET_AND_NOT_SET(TRIGGER_SITE "${CTEST_TRIGGER_SITE}")
-    SET_IF_SET_AND_NOT_SET(UPDATE_TYPE "${CTEST_UPDATE_TYPE}")
-  endif()
-
-  # the project can have a DartConfig.cmake file
-  if(EXISTS "${PROJECT_SOURCE_DIR}/DartConfig.cmake")
-    include("${PROJECT_SOURCE_DIR}/DartConfig.cmake")
-  else()
-    # Dashboard is opened for submissions for a 24 hour period starting at
-    # the specified NIGHTLY_START_TIME. Time is specified in 24 hour format.
-    SET_IF_NOT_SET (NIGHTLY_START_TIME "00:00:00 EDT")
-    SET_IF_NOT_SET(DROP_METHOD "http")
-    SET_IF_NOT_SET (COMPRESS_SUBMISSION ON)
-  endif()
-  SET_IF_NOT_SET (NIGHTLY_START_TIME "00:00:00 EDT")
-
-  if(NOT SUBMIT_URL)
-    set(SUBMIT_URL "${DROP_METHOD}://")
-    if(DROP_SITE_USER)
-      string(APPEND SUBMIT_URL "${DROP_SITE_USER}")
-      if(DROP_SITE_PASSWORD)
-        string(APPEND SUBMIT_URL ":${DROP_SITE_PASSWORD}")
-      endif()
-      string(APPEND SUBMIT_URL "@")
-    endif()
-    string(APPEND SUBMIT_URL "${DROP_SITE}${DROP_LOCATION}")
-  endif()
-
-  find_program(CVSCOMMAND cvs )
-  set(CVS_UPDATE_OPTIONS "-d -A -P" CACHE STRING
-    "Options passed to the cvs update command.")
-  find_program(SVNCOMMAND svn)
-  find_program(BZRCOMMAND bzr)
-  find_program(HGCOMMAND hg)
-  find_program(GITCOMMAND git)
-  find_program(P4COMMAND p4)
-
-  if(NOT UPDATE_TYPE)
-    if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/CVS")
-      set(UPDATE_TYPE cvs)
-    elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.svn")
-      set(UPDATE_TYPE svn)
-    elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.bzr")
-      set(UPDATE_TYPE bzr)
-    elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.hg")
-      set(UPDATE_TYPE hg)
-    elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git")
-      set(UPDATE_TYPE git)
-    endif()
-  endif()
-
-  string(TOLOWER "${UPDATE_TYPE}" _update_type)
-  if("${_update_type}" STREQUAL "cvs")
-    set(UPDATE_COMMAND "${CVSCOMMAND}")
-    set(UPDATE_OPTIONS "${CVS_UPDATE_OPTIONS}")
-  elseif("${_update_type}" STREQUAL "svn")
-    set(UPDATE_COMMAND "${SVNCOMMAND}")
-    set(UPDATE_OPTIONS "${SVN_UPDATE_OPTIONS}")
-  elseif("${_update_type}" STREQUAL "bzr")
-    set(UPDATE_COMMAND "${BZRCOMMAND}")
-    set(UPDATE_OPTIONS "${BZR_UPDATE_OPTIONS}")
-  elseif("${_update_type}" STREQUAL "hg")
-    set(UPDATE_COMMAND "${HGCOMMAND}")
-    set(UPDATE_OPTIONS "${HG_UPDATE_OPTIONS}")
-  elseif("${_update_type}" STREQUAL "git")
-    set(UPDATE_COMMAND "${GITCOMMAND}")
-    set(UPDATE_OPTIONS "${GIT_UPDATE_OPTIONS}")
-  elseif("${_update_type}" STREQUAL "p4")
-    set(UPDATE_COMMAND "${P4COMMAND}")
-    set(UPDATE_OPTIONS "${P4_UPDATE_OPTIONS}")
-  endif()
-
-  set(DART_TESTING_TIMEOUT 1500 CACHE STRING
-    "Maximum time allowed before CTest will kill the test.")
-
-  set(CTEST_SUBMIT_RETRY_DELAY 5 CACHE STRING
-    "How long to wait between timed-out CTest submissions.")
-  set(CTEST_SUBMIT_RETRY_COUNT 3 CACHE STRING
-    "How many times to retry timed-out CTest submissions.")
-
-  find_program(MEMORYCHECK_COMMAND
-    NAMES purify valgrind boundscheck drmemory
-    PATHS
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Rational Software\\Purify\\Setup;InstallFolder]"
-    DOC "Path to the memory checking command, used for memory error detection."
-    )
-  find_program(SLURM_SBATCH_COMMAND sbatch DOC
-    "Path to the SLURM sbatch executable"
-    )
-  find_program(SLURM_SRUN_COMMAND srun DOC
-    "Path to the SLURM srun executable"
-    )
-  set(MEMORYCHECK_SUPPRESSIONS_FILE "" CACHE FILEPATH
-    "File that contains suppressions for the memory checker")
-  find_program(COVERAGE_COMMAND gcov DOC
-    "Path to the coverage program that CTest uses for performing coverage inspection"
-    )
-  set(COVERAGE_EXTRA_FLAGS "-l" CACHE STRING
-    "Extra command line flags to pass to the coverage tool")
-
-  # set the site name
-  site_name(SITE)
-  # set the build name
-  if(NOT BUILDNAME)
-    set(DART_COMPILER "${CMAKE_CXX_COMPILER}")
-    if(NOT DART_COMPILER)
-      set(DART_COMPILER "${CMAKE_C_COMPILER}")
-    endif()
-    if(NOT DART_COMPILER)
-      set(DART_COMPILER "unknown")
-    endif()
-    if(WIN32)
-      set(DART_NAME_COMPONENT "NAME_WE")
-    else()
-      set(DART_NAME_COMPONENT "NAME")
-    endif()
-    if(NOT BUILD_NAME_SYSTEM_NAME)
-      set(BUILD_NAME_SYSTEM_NAME "${CMAKE_SYSTEM_NAME}")
-    endif()
-    if(WIN32)
-      set(BUILD_NAME_SYSTEM_NAME "Win32")
-    endif()
-    if(UNIX OR BORLAND)
-      get_filename_component(DART_COMPILER_NAME
-        "${DART_COMPILER}" ${DART_NAME_COMPONENT})
-    else()
-      get_filename_component(DART_COMPILER_NAME
-        "${CMAKE_MAKE_PROGRAM}" ${DART_NAME_COMPONENT})
-    endif()
-    if(DART_COMPILER_NAME MATCHES "devenv")
-      GET_VS_VERSION_STRING("${CMAKE_GENERATOR}" DART_COMPILER_NAME)
-    endif()
-    set(BUILDNAME "${BUILD_NAME_SYSTEM_NAME}-${DART_COMPILER_NAME}")
-  endif()
-
-  # the build command
-  build_command(MAKECOMMAND_DEFAULT_VALUE
-    CONFIGURATION "\${CTEST_CONFIGURATION_TYPE}")
-  set(MAKECOMMAND ${MAKECOMMAND_DEFAULT_VALUE}
-    CACHE STRING "Command to build the project")
-
-  # the default build configuration the ctest build handler will use
-  # if there is no -C arg given to ctest:
-  set(DEFAULT_CTEST_CONFIGURATION_TYPE "$ENV{CMAKE_CONFIG_TYPE}")
-  if(DEFAULT_CTEST_CONFIGURATION_TYPE STREQUAL "")
-    set(DEFAULT_CTEST_CONFIGURATION_TYPE "Release")
-  endif()
-
-  mark_as_advanced(
-    BZRCOMMAND
-    COVERAGE_COMMAND
-    COVERAGE_EXTRA_FLAGS
-    CTEST_SUBMIT_RETRY_DELAY
-    CTEST_SUBMIT_RETRY_COUNT
-    CVSCOMMAND
-    CVS_UPDATE_OPTIONS
-    DART_TESTING_TIMEOUT
-    GITCOMMAND
-    P4COMMAND
-    HGCOMMAND
-    MAKECOMMAND
-    MEMORYCHECK_COMMAND
-    MEMORYCHECK_SUPPRESSIONS_FILE
-    SLURM_SBATCH_COMMAND
-    SLURM_SRUN_COMMAND
-    SITE
-    SVNCOMMAND
-    )
-  if(NOT RUN_FROM_DART)
-    set(RUN_FROM_CTEST_OR_DART 1)
-    include(CTestTargets)
-    set(RUN_FROM_CTEST_OR_DART)
-  endif()
-endif()
diff --git a/share/cmake-3.18/Modules/CTestCoverageCollectGCOV.cmake b/share/cmake-3.18/Modules/CTestCoverageCollectGCOV.cmake
deleted file mode 100644
index b1268be..0000000
--- a/share/cmake-3.18/Modules/CTestCoverageCollectGCOV.cmake
+++ /dev/null
@@ -1,339 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CTestCoverageCollectGCOV
-------------------------
-
-This module provides the ``ctest_coverage_collect_gcov`` function.
-
-This function runs gcov on all .gcda files found in the binary tree
-and packages the resulting .gcov files into a tar file.
-This tarball also contains the following:
-
-* *data.json* defines the source and build directories for use by CDash.
-* *Labels.json* indicates any :prop_sf:`LABELS` that have been set on the
-  source files.
-* The *uncovered* directory holds any uncovered files found by
-  :variable:`CTEST_EXTRA_COVERAGE_GLOB`.
-
-After generating this tar file, it can be sent to CDash for display with the
-:command:`ctest_submit(CDASH_UPLOAD)` command.
-
-.. command:: ctest_coverage_collect_gcov
-
-  ::
-
-    ctest_coverage_collect_gcov(TARBALL <tarfile>
-      [SOURCE <source_dir>][BUILD <build_dir>]
-      [GCOV_COMMAND <gcov_command>]
-      [GCOV_OPTIONS <options>...]
-      )
-
-  Run gcov and package a tar file for CDash.  The options are:
-
-  ``TARBALL <tarfile>``
-    Specify the location of the ``.tar`` file to be created for later
-    upload to CDash.  Relative paths will be interpreted with respect
-    to the top-level build directory.
-
-  ``TARBALL_COMPRESSION <option>`` Specify a compression algorithm for the
-    ``TARBALL`` data file.  Using this option reduces the size of the data file
-    before it is submitted to CDash.  ``<option>`` must be one of ``GZIP``,
-    ``BZIP2``, ``XZ``, ``ZSTD``, ``FROM_EXT``, or an expression that CMake
-    evaluates as ``FALSE``. The default value is ``BZIP2``.
-
-    If ``FROM_EXT`` is specified, the resulting file will be compressed based on
-    the file extension of the ``<tarfile>`` (i.e. ``.tar.gz`` will use ``GZIP``
-    compression). File extensions that will produce compressed output include
-    ``.tar.gz``, ``.tgz``, ``.tar.bzip2``, ``.tbz``, ``.tar.xz``, and ``.txz``.
-
-  ``SOURCE <source_dir>``
-    Specify the top-level source directory for the build.
-    Default is the value of :variable:`CTEST_SOURCE_DIRECTORY`.
-
-  ``BUILD <build_dir>``
-    Specify the top-level build directory for the build.
-    Default is the value of :variable:`CTEST_BINARY_DIRECTORY`.
-
-  ``GCOV_COMMAND <gcov_command>``
-    Specify the full path to the ``gcov`` command on the machine.
-    Default is the value of :variable:`CTEST_COVERAGE_COMMAND`.
-
-  ``GCOV_OPTIONS <options>...``
-    Specify options to be passed to gcov.  The ``gcov`` command
-    is run as ``gcov <options>... -o <gcov-dir> <file>.gcda``.
-    If not specified, the default option is just ``-b -x``.
-
-  ``GLOB``
-    Recursively search for .gcda files in build_dir rather than
-    determining search locations by reading TargetDirectories.txt.
-
-  ``DELETE``
-    Delete coverage files after they've been packaged into the .tar.
-
-  ``QUIET``
-    Suppress non-error messages that otherwise would have been
-    printed out by this function.
-#]=======================================================================]
-
-function(ctest_coverage_collect_gcov)
-  set(options QUIET GLOB DELETE)
-  set(oneValueArgs TARBALL SOURCE BUILD GCOV_COMMAND TARBALL_COMPRESSION)
-  set(multiValueArgs GCOV_OPTIONS)
-  cmake_parse_arguments(GCOV  "${options}" "${oneValueArgs}"
-    "${multiValueArgs}" "" ${ARGN} )
-  if(NOT DEFINED GCOV_TARBALL)
-    message(FATAL_ERROR
-      "TARBALL must be specified. for ctest_coverage_collect_gcov")
-  endif()
-  if(NOT DEFINED GCOV_SOURCE)
-    set(source_dir "${CTEST_SOURCE_DIRECTORY}")
-  else()
-    set(source_dir "${GCOV_SOURCE}")
-  endif()
-  if(NOT DEFINED GCOV_BUILD)
-    set(binary_dir "${CTEST_BINARY_DIRECTORY}")
-  else()
-    set(binary_dir "${GCOV_BUILD}")
-  endif()
-  if(NOT DEFINED GCOV_GCOV_COMMAND)
-    set(gcov_command "${CTEST_COVERAGE_COMMAND}")
-  else()
-    set(gcov_command "${GCOV_GCOV_COMMAND}")
-  endif()
-  if(NOT DEFINED GCOV_TARBALL_COMPRESSION)
-    set(GCOV_TARBALL_COMPRESSION "BZIP2")
-  elseif( GCOV_TARBALL_COMPRESSION AND
-      NOT GCOV_TARBALL_COMPRESSION MATCHES "^(GZIP|BZIP2|XZ|ZSTD|FROM_EXT)$")
-    message(FATAL_ERROR "TARBALL_COMPRESSION must be one of OFF, GZIP, "
-      "BZIP2, XZ, ZSTD, or FROM_EXT for ctest_coverage_collect_gcov")
-  endif()
-  # run gcov on each gcda file in the binary tree
-  set(gcda_files)
-  set(label_files)
-  if (GCOV_GLOB)
-      file(GLOB_RECURSE gfiles "${binary_dir}/*.gcda")
-      list(LENGTH gfiles len)
-      # if we have gcda files then also grab the labels file for that target
-      if(${len} GREATER 0)
-        file(GLOB_RECURSE lfiles RELATIVE ${binary_dir} "${binary_dir}/Labels.json")
-        list(APPEND gcda_files ${gfiles})
-        list(APPEND label_files ${lfiles})
-      endif()
-  else()
-    # look for gcda files in the target directories
-    # this will be faster and only look where the files will be
-    file(STRINGS "${binary_dir}/CMakeFiles/TargetDirectories.txt" target_dirs
-         ENCODING UTF-8)
-    foreach(target_dir ${target_dirs})
-      file(GLOB_RECURSE gfiles "${target_dir}/*.gcda")
-      list(LENGTH gfiles len)
-      # if we have gcda files then also grab the labels file for that target
-      if(${len} GREATER 0)
-        file(GLOB_RECURSE lfiles RELATIVE ${binary_dir}
-          "${target_dir}/Labels.json")
-        list(APPEND gcda_files ${gfiles})
-        list(APPEND label_files ${lfiles})
-      endif()
-    endforeach()
-  endif()
-  # return early if no coverage files were found
-  list(LENGTH gcda_files len)
-  if(len EQUAL 0)
-    if (NOT GCOV_QUIET)
-      message("ctest_coverage_collect_gcov: No .gcda files found, "
-        "ignoring coverage request.")
-    endif()
-    return()
-  endif()
-  # setup the dir for the coverage files
-  set(coverage_dir "${binary_dir}/Testing/CoverageInfo")
-  file(MAKE_DIRECTORY  "${coverage_dir}")
-  # run gcov, this will produce the .gcov files in the current
-  # working directory
-  if(NOT DEFINED GCOV_GCOV_OPTIONS)
-    set(GCOV_GCOV_OPTIONS -b -x)
-  endif()
-  if (GCOV_QUIET)
-    set(coverage_out_opts
-      OUTPUT_QUIET
-      ERROR_QUIET
-      )
-  else()
-    set(coverage_out_opts
-      OUTPUT_FILE "${coverage_dir}/gcov.log"
-      ERROR_FILE  "${coverage_dir}/gcov.log"
-      )
-  endif()
-  execute_process(COMMAND
-    ${gcov_command} ${GCOV_GCOV_OPTIONS} ${gcda_files}
-    RESULT_VARIABLE res
-    WORKING_DIRECTORY ${coverage_dir}
-    ${coverage_out_opts}
-    )
-
-  if (GCOV_DELETE)
-    file(REMOVE ${gcda_files})
-  endif()
-
-  if(NOT "${res}" EQUAL 0)
-    if (NOT GCOV_QUIET)
-      message(STATUS "Error running gcov: ${res}, see\n  ${coverage_dir}/gcov.log")
-    endif()
-  endif()
-  # create json file with project information
-  file(WRITE ${coverage_dir}/data.json
-    "{
-    \"Source\": \"${source_dir}\",
-    \"Binary\": \"${binary_dir}\"
-}")
-  # collect the gcov files
-  set(unfiltered_gcov_files)
-  file(GLOB_RECURSE unfiltered_gcov_files RELATIVE ${binary_dir} "${coverage_dir}/*.gcov")
-
-  # if CTEST_EXTRA_COVERAGE_GLOB was specified we search for files
-  # that might be uncovered
-  if (DEFINED CTEST_EXTRA_COVERAGE_GLOB)
-    set(uncovered_files)
-    foreach(search_entry IN LISTS CTEST_EXTRA_COVERAGE_GLOB)
-      if(NOT GCOV_QUIET)
-        message("Add coverage glob: ${search_entry}")
-      endif()
-      file(GLOB_RECURSE matching_files "${source_dir}/${search_entry}")
-      if (matching_files)
-        list(APPEND uncovered_files "${matching_files}")
-      endif()
-    endforeach()
-  endif()
-
-  set(gcov_files)
-  foreach(gcov_file ${unfiltered_gcov_files})
-    file(STRINGS ${binary_dir}/${gcov_file} first_line LIMIT_COUNT 1 ENCODING UTF-8)
-
-    set(is_excluded false)
-    if(first_line MATCHES "^        -:    0:Source:(.*)$")
-      set(source_file ${CMAKE_MATCH_1})
-    elseif(NOT GCOV_QUIET)
-      message(STATUS "Could not determine source file corresponding to: ${gcov_file}")
-    endif()
-
-    foreach(exclude_entry IN LISTS CTEST_CUSTOM_COVERAGE_EXCLUDE)
-      if(source_file MATCHES "${exclude_entry}")
-        set(is_excluded true)
-
-        if(NOT GCOV_QUIET)
-          message("Excluding coverage for: ${source_file} which matches ${exclude_entry}")
-        endif()
-
-        break()
-      endif()
-    endforeach()
-
-    get_filename_component(resolved_source_file "${source_file}" ABSOLUTE)
-    foreach(uncovered_file IN LISTS uncovered_files)
-      get_filename_component(resolved_uncovered_file "${uncovered_file}" ABSOLUTE)
-      if (resolved_uncovered_file STREQUAL resolved_source_file)
-        list(REMOVE_ITEM uncovered_files "${uncovered_file}")
-      endif()
-    endforeach()
-
-    if(NOT is_excluded)
-      list(APPEND gcov_files ${gcov_file})
-    endif()
-  endforeach()
-
-  foreach (uncovered_file ${uncovered_files})
-    # Check if this uncovered file should be excluded.
-    set(is_excluded false)
-    foreach(exclude_entry IN LISTS CTEST_CUSTOM_COVERAGE_EXCLUDE)
-      if(uncovered_file MATCHES "${exclude_entry}")
-        set(is_excluded true)
-        if(NOT GCOV_QUIET)
-          message("Excluding coverage for: ${uncovered_file} which matches ${exclude_entry}")
-        endif()
-        break()
-      endif()
-    endforeach()
-    if(is_excluded)
-      continue()
-    endif()
-
-    # Copy from source to binary dir, preserving any intermediate subdirectories.
-    get_filename_component(filename "${uncovered_file}" NAME)
-    get_filename_component(relative_path "${uncovered_file}" DIRECTORY)
-    string(REPLACE "${source_dir}" "" relative_path "${relative_path}")
-    if (relative_path)
-      # Strip leading slash.
-      string(SUBSTRING "${relative_path}" 1 -1 relative_path)
-    endif()
-    file(COPY ${uncovered_file} DESTINATION ${binary_dir}/uncovered/${relative_path})
-    if(relative_path)
-      list(APPEND uncovered_files_for_tar uncovered/${relative_path}/${filename})
-    else()
-      list(APPEND uncovered_files_for_tar uncovered/${filename})
-    endif()
-  endforeach()
-
-  # tar up the coverage info with the same date so that the md5
-  # sum will be the same for the tar file independent of file time
-  # stamps
-  string(REPLACE ";" "\n" gcov_files "${gcov_files}")
-  string(REPLACE ";" "\n" label_files "${label_files}")
-  string(REPLACE ";" "\n" uncovered_files_for_tar "${uncovered_files_for_tar}")
-  file(WRITE "${coverage_dir}/coverage_file_list.txt"
-    "${gcov_files}
-${coverage_dir}/data.json
-${label_files}
-${uncovered_files_for_tar}
-")
-
-  # Prepare tar command line arguments
-
-  set(tar_opts "")
-  # Select data compression mode
-  if( GCOV_TARBALL_COMPRESSION STREQUAL "FROM_EXT")
-    if( GCOV_TARBALL MATCHES [[\.(tgz|tar.gz)$]] )
-      string(APPEND tar_opts "z")
-    elseif( GCOV_TARBALL MATCHES [[\.(txz|tar.xz)$]] )
-      string(APPEND tar_opts "J")
-    elseif( GCOV_TARBALL MATCHES [[\.(tbz|tar.bz)$]] )
-      string(APPEND tar_opts "j")
-    endif()
-  elseif(GCOV_TARBALL_COMPRESSION STREQUAL "GZIP")
-    string(APPEND tar_opts "z")
-  elseif(GCOV_TARBALL_COMPRESSION STREQUAL "XZ")
-    string(APPEND tar_opts "J")
-  elseif(GCOV_TARBALL_COMPRESSION STREQUAL "BZIP2")
-    string(APPEND tar_opts "j")
-  elseif(GCOV_TARBALL_COMPRESSION STREQUAL "ZSTD")
-    set(zstd_tar_opt "--zstd")
-  endif()
-  # Verbosity options
-  if(NOT GCOV_QUIET AND NOT tar_opts MATCHES v)
-    string(APPEND tar_opts "v")
-  endif()
-  # Prepend option 'c' specifying 'create'
-  string(PREPEND tar_opts "c")
-  # Append option 'f' so that the next argument is the filename
-  string(APPEND tar_opts "f")
-
-  execute_process(COMMAND
-    ${CMAKE_COMMAND} -E tar ${tar_opts} ${GCOV_TARBALL} ${zstd_tar_opt}
-    "--mtime=1970-01-01 0:0:0 UTC"
-    "--format=gnutar"
-    --files-from=${coverage_dir}/coverage_file_list.txt
-    WORKING_DIRECTORY ${binary_dir})
-
-  if (GCOV_DELETE)
-    foreach(gcov_file ${unfiltered_gcov_files})
-      file(REMOVE ${binary_dir}/${gcov_file})
-    endforeach()
-    file(REMOVE ${coverage_dir}/coverage_file_list.txt)
-    file(REMOVE ${coverage_dir}/data.json)
-    if (EXISTS ${binary_dir}/uncovered)
-      file(REMOVE ${binary_dir}/uncovered)
-    endif()
-  endif()
-
-endfunction()
diff --git a/share/cmake-3.18/Modules/CTestUseLaunchers.cmake b/share/cmake-3.18/Modules/CTestUseLaunchers.cmake
deleted file mode 100644
index 3dff926..0000000
--- a/share/cmake-3.18/Modules/CTestUseLaunchers.cmake
+++ /dev/null
@@ -1,70 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CTestUseLaunchers
------------------
-
-Set the RULE_LAUNCH_* global properties when CTEST_USE_LAUNCHERS is on.
-
-CTestUseLaunchers is automatically included when you include(CTest).
-However, it is split out into its own module file so projects can use
-the CTEST_USE_LAUNCHERS functionality independently.
-
-To use launchers, set CTEST_USE_LAUNCHERS to ON in a ctest -S
-dashboard script, and then also set it in the cache of the configured
-project.  Both cmake and ctest need to know the value of it for the
-launchers to work properly.  CMake needs to know in order to generate
-proper build rules, and ctest, in order to produce the proper error
-and warning analysis.
-
-For convenience, you may set the ENV variable
-CTEST_USE_LAUNCHERS_DEFAULT in your ctest -S script, too.  Then, as
-long as your CMakeLists uses include(CTest) or
-include(CTestUseLaunchers), it will use the value of the ENV variable
-to initialize a CTEST_USE_LAUNCHERS cache variable.  This cache
-variable initialization only occurs if CTEST_USE_LAUNCHERS is not
-already defined. If CTEST_USE_LAUNCHERS is on in a ctest -S script
-the ctest_configure command will add -DCTEST_USE_LAUNCHERS:BOOL=TRUE
-to the cmake command used to configure the project.
-#]=======================================================================]
-
-if(NOT DEFINED CTEST_USE_LAUNCHERS AND DEFINED ENV{CTEST_USE_LAUNCHERS_DEFAULT})
-  set(CTEST_USE_LAUNCHERS "$ENV{CTEST_USE_LAUNCHERS_DEFAULT}"
-    CACHE INTERNAL "CTEST_USE_LAUNCHERS initial value from ENV")
-endif()
-
-if(NOT "${CMAKE_GENERATOR}" MATCHES "Make|Ninja")
-  set(CTEST_USE_LAUNCHERS 0)
-endif()
-
-if(CTEST_USE_LAUNCHERS)
-  set(__launch_common_options
-    "--target-name <TARGET_NAME> --build-dir <CMAKE_CURRENT_BINARY_DIR>")
-
-  set(__launch_compile_options
-    "${__launch_common_options} --output <OBJECT> --source <SOURCE> --language <LANGUAGE>")
-
-  set(__launch_link_options
-    "${__launch_common_options} --output <TARGET> --target-type <TARGET_TYPE> --language <LANGUAGE>")
-
-  set(__launch_custom_options
-    "${__launch_common_options} --output <OUTPUT>")
-
-  if("${CMAKE_GENERATOR}" MATCHES "Ninja")
-    string(APPEND __launch_compile_options " --filter-prefix <CMAKE_CL_SHOWINCLUDES_PREFIX>")
-  endif()
-
-  set(CTEST_LAUNCH_COMPILE
-    "\"${CMAKE_CTEST_COMMAND}\" --launch ${__launch_compile_options} --")
-
-  set(CTEST_LAUNCH_LINK
-    "\"${CMAKE_CTEST_COMMAND}\" --launch ${__launch_link_options} --")
-
-  set(CTEST_LAUNCH_CUSTOM
-    "\"${CMAKE_CTEST_COMMAND}\" --launch ${__launch_custom_options} --")
-
-  set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CTEST_LAUNCH_COMPILE}")
-  set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${CTEST_LAUNCH_LINK}")
-  set_property(GLOBAL PROPERTY RULE_LAUNCH_CUSTOM "${CTEST_LAUNCH_CUSTOM}")
-endif()
diff --git a/share/cmake-3.18/Modules/CheckCCompilerFlag.cmake b/share/cmake-3.18/Modules/CheckCCompilerFlag.cmake
deleted file mode 100644
index 6d65313..0000000
--- a/share/cmake-3.18/Modules/CheckCCompilerFlag.cmake
+++ /dev/null
@@ -1,58 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckCCompilerFlag
-------------------
-
-Check whether the C compiler supports a given flag.
-
-.. command:: check_c_compiler_flag
-
-  .. code-block:: cmake
-
-    check_c_compiler_flag(<flag> <var>)
-
-  Check that the ``<flag>`` is accepted by the compiler without
-  a diagnostic.  Stores the result in an internal cache entry
-  named ``<var>``.
-
-This command temporarily sets the ``CMAKE_REQUIRED_DEFINITIONS`` variable
-and calls the ``check_c_source_compiles`` macro from the
-:module:`CheckCSourceCompiles` module.  See documentation of that
-module for a listing of variables that can otherwise modify the build.
-
-A positive result from this check indicates only that the compiler did not
-issue a diagnostic message when given the flag.  Whether the flag has any
-effect or even a specific one is beyond the scope of this module.
-
-.. note::
-  Since the :command:`try_compile` command forwards flags from variables
-  like :variable:`CMAKE_C_FLAGS <CMAKE_<LANG>_FLAGS>`, unknown flags
-  in such variables may cause a false negative for this check.
-#]=======================================================================]
-
-include_guard(GLOBAL)
-include(CheckCSourceCompiles)
-include(CMakeCheckCompilerFlagCommonPatterns)
-
-function(check_c_compiler_flag _flag _var)
-  set(CMAKE_REQUIRED_DEFINITIONS "${_flag}")
-
-  # Normalize locale during test compilation.
-  set(_locale_vars LC_ALL LC_MESSAGES LANG)
-  foreach(v IN LISTS _locale_vars)
-    set(_locale_vars_saved_${v} "$ENV{${v}}")
-    set(ENV{${v}} C)
-  endforeach()
-  check_compiler_flag_common_patterns(_common_patterns)
-  check_c_source_compiles("int main(void) { return 0; }" ${_var}
-    # Some compilers do not fail with a bad flag
-    FAIL_REGEX "command line option .* is valid for .* but not for C" # GNU
-    ${_common_patterns}
-    )
-  foreach(v IN LISTS _locale_vars)
-    set(ENV{${v}} ${_locale_vars_saved_${v}})
-  endforeach()
-  set(${_var} "${${_var}}" PARENT_SCOPE)
-endfunction()
diff --git a/share/cmake-3.18/Modules/CheckCSourceCompiles.cmake b/share/cmake-3.18/Modules/CheckCSourceCompiles.cmake
deleted file mode 100644
index 67fc993..0000000
--- a/share/cmake-3.18/Modules/CheckCSourceCompiles.cmake
+++ /dev/null
@@ -1,145 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckCSourceCompiles
---------------------
-
-Check if given C source compiles and links into an executable.
-
-.. command:: check_c_source_compiles
-
-  .. code-block:: cmake
-
-    check_c_source_compiles(<code> <resultVar>
-                            [FAIL_REGEX <regex1> [<regex2>...]])
-
-  Check that the source supplied in ``<code>`` can be compiled as a C source
-  file and linked as an executable (so it must contain at least a ``main()``
-  function). The result will be stored in the internal cache variable specified
-  by ``<resultVar>``, with a boolean true value for success and boolean false
-  for failure. If ``FAIL_REGEX`` is provided, then failure is determined by
-  checking if anything in the output matches any of the specified regular
-  expressions.
-
-  The underlying check is performed by the :command:`try_compile` command. The
-  compile and link commands can be influenced by setting any of the following
-  variables prior to calling ``check_c_source_compiles()``:
-
-  ``CMAKE_REQUIRED_FLAGS``
-    Additional flags to pass to the compiler. Note that the contents of
-    :variable:`CMAKE_C_FLAGS <CMAKE_<LANG>_FLAGS>` and its associated
-    configuration-specific variable are automatically added to the compiler
-    command before the contents of ``CMAKE_REQUIRED_FLAGS``.
-
-  ``CMAKE_REQUIRED_DEFINITIONS``
-    A :ref:`;-list <CMake Language Lists>` of compiler definitions of the form
-    ``-DFOO`` or ``-DFOO=bar``. A definition for the name specified by
-    ``<resultVar>`` will also be added automatically.
-
-  ``CMAKE_REQUIRED_INCLUDES``
-    A :ref:`;-list <CMake Language Lists>` of header search paths to pass to
-    the compiler. These will be the only header search paths used by
-    ``try_compile()``, i.e. the contents of the :prop_dir:`INCLUDE_DIRECTORIES`
-    directory property will be ignored.
-
-  ``CMAKE_REQUIRED_LINK_OPTIONS``
-    A :ref:`;-list <CMake Language Lists>` of options to add to the link
-    command (see :command:`try_compile` for further details).
-
-  ``CMAKE_REQUIRED_LIBRARIES``
-    A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
-    command. These can be the name of system libraries or they can be
-    :ref:`Imported Targets <Imported Targets>` (see :command:`try_compile` for
-    further details).
-
-  ``CMAKE_REQUIRED_QUIET``
-    If this variable evaluates to a boolean true value, all status messages
-    associated with the check will be suppressed.
-
-  The check is only performed once, with the result cached in the variable
-  named by ``<resultVar>``. Every subsequent CMake run will re-use this cached
-  value rather than performing the check again, even if the ``<code>`` changes.
-  In order to force the check to be re-evaluated, the variable named by
-  ``<resultVar>`` must be manually removed from the cache.
-
-#]=======================================================================]
-
-include_guard(GLOBAL)
-
-macro(CHECK_C_SOURCE_COMPILES SOURCE VAR)
-  if(NOT DEFINED "${VAR}")
-    set(_FAIL_REGEX)
-    set(_key)
-    foreach(arg ${ARGN})
-      if("${arg}" MATCHES "^(FAIL_REGEX)$")
-        set(_key "${arg}")
-      elseif(_key)
-        list(APPEND _${_key} "${arg}")
-      else()
-        message(FATAL_ERROR "Unknown argument:\n  ${arg}\n")
-      endif()
-    endforeach()
-    set(MACRO_CHECK_FUNCTION_DEFINITIONS
-      "-D${VAR} ${CMAKE_REQUIRED_FLAGS}")
-    if(CMAKE_REQUIRED_LINK_OPTIONS)
-      set(CHECK_C_SOURCE_COMPILES_ADD_LINK_OPTIONS
-        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
-    else()
-      set(CHECK_C_SOURCE_COMPILES_ADD_LINK_OPTIONS)
-    endif()
-    if(CMAKE_REQUIRED_LIBRARIES)
-      set(CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES
-        LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
-    else()
-      set(CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES)
-    endif()
-    if(CMAKE_REQUIRED_INCLUDES)
-      set(CHECK_C_SOURCE_COMPILES_ADD_INCLUDES
-        "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
-    else()
-      set(CHECK_C_SOURCE_COMPILES_ADD_INCLUDES)
-    endif()
-    file(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c"
-      "${SOURCE}\n")
-
-    if(NOT CMAKE_REQUIRED_QUIET)
-      message(CHECK_START "Performing Test ${VAR}")
-    endif()
-    try_compile(${VAR}
-      ${CMAKE_BINARY_DIR}
-      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c
-      COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
-      ${CHECK_C_SOURCE_COMPILES_ADD_LINK_OPTIONS}
-      ${CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES}
-      CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
-      "${CHECK_C_SOURCE_COMPILES_ADD_INCLUDES}"
-      OUTPUT_VARIABLE OUTPUT)
-
-    foreach(_regex ${_FAIL_REGEX})
-      if("${OUTPUT}" MATCHES "${_regex}")
-        set(${VAR} 0)
-      endif()
-    endforeach()
-
-    if(${VAR})
-      set(${VAR} 1 CACHE INTERNAL "Test ${VAR}")
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_PASS "Success")
-      endif()
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-        "Performing C SOURCE FILE Test ${VAR} succeeded with the following output:\n"
-        "${OUTPUT}\n"
-        "Source file was:\n${SOURCE}\n")
-    else()
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_FAIL "Failed")
-      endif()
-      set(${VAR} "" CACHE INTERNAL "Test ${VAR}")
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-        "Performing C SOURCE FILE Test ${VAR} failed with the following output:\n"
-        "${OUTPUT}\n"
-        "Source file was:\n${SOURCE}\n")
-    endif()
-  endif()
-endmacro()
diff --git a/share/cmake-3.18/Modules/CheckCSourceRuns.cmake b/share/cmake-3.18/Modules/CheckCSourceRuns.cmake
deleted file mode 100644
index 7d116db..0000000
--- a/share/cmake-3.18/Modules/CheckCSourceRuns.cmake
+++ /dev/null
@@ -1,145 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckCSourceRuns
-----------------
-
-Check if given C source compiles and links into an executable and can
-subsequently be run.
-
-.. command:: check_c_source_runs
-
-  .. code-block:: cmake
-
-    check_c_source_runs(<code> <resultVar>)
-
-  Check that the source supplied in ``<code>`` can be compiled as a C source
-  file, linked as an executable and then run. The ``<code>`` must contain at
-  least a ``main()`` function. If the ``<code>`` could be built and run
-  successfully, the internal cache variable specified by ``<resultVar>`` will
-  be set to 1, otherwise it will be set to an value that evaluates to boolean
-  false (e.g. an empty string or an error message).
-
-  The underlying check is performed by the :command:`try_run` command. The
-  compile and link commands can be influenced by setting any of the following
-  variables prior to calling ``check_c_source_runs()``:
-
-  ``CMAKE_REQUIRED_FLAGS``
-    Additional flags to pass to the compiler. Note that the contents of
-    :variable:`CMAKE_C_FLAGS <CMAKE_<LANG>_FLAGS>` and its associated
-    configuration-specific variable are automatically added to the compiler
-    command before the contents of ``CMAKE_REQUIRED_FLAGS``.
-
-  ``CMAKE_REQUIRED_DEFINITIONS``
-    A :ref:`;-list <CMake Language Lists>` of compiler definitions of the form
-    ``-DFOO`` or ``-DFOO=bar``. A definition for the name specified by
-    ``<resultVar>`` will also be added automatically.
-
-  ``CMAKE_REQUIRED_INCLUDES``
-    A :ref:`;-list <CMake Language Lists>` of header search paths to pass to
-    the compiler. These will be the only header search paths used by
-    ``try_run()``, i.e. the contents of the :prop_dir:`INCLUDE_DIRECTORIES`
-    directory property will be ignored.
-
-  ``CMAKE_REQUIRED_LINK_OPTIONS``
-    A :ref:`;-list <CMake Language Lists>` of options to add to the link
-    command (see :command:`try_run` for further details).
-
-  ``CMAKE_REQUIRED_LIBRARIES``
-    A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
-    command. These can be the name of system libraries or they can be
-    :ref:`Imported Targets <Imported Targets>` (see :command:`try_run` for
-    further details).
-
-  ``CMAKE_REQUIRED_QUIET``
-    If this variable evaluates to a boolean true value, all status messages
-    associated with the check will be suppressed.
-
-  The check is only performed once, with the result cached in the variable
-  named by ``<resultVar>``. Every subsequent CMake run will re-use this cached
-  value rather than performing the check again, even if the ``<code>`` changes.
-  In order to force the check to be re-evaluated, the variable named by
-  ``<resultVar>`` must be manually removed from the cache.
-
-#]=======================================================================]
-
-include_guard(GLOBAL)
-
-macro(CHECK_C_SOURCE_RUNS SOURCE VAR)
-  if(NOT DEFINED "${VAR}")
-    set(MACRO_CHECK_FUNCTION_DEFINITIONS
-      "-D${VAR} ${CMAKE_REQUIRED_FLAGS}")
-    if(CMAKE_REQUIRED_LINK_OPTIONS)
-      set(CHECK_C_SOURCE_COMPILES_ADD_LINK_OPTIONS
-        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
-    else()
-      set(CHECK_C_SOURCE_COMPILES_ADD_LINK_OPTIONS)
-    endif()
-    if(CMAKE_REQUIRED_LIBRARIES)
-      set(CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES
-        LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
-    else()
-      set(CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES)
-    endif()
-    if(CMAKE_REQUIRED_INCLUDES)
-      set(CHECK_C_SOURCE_COMPILES_ADD_INCLUDES
-        "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
-    else()
-      set(CHECK_C_SOURCE_COMPILES_ADD_INCLUDES)
-    endif()
-    file(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c"
-      "${SOURCE}\n")
-
-    if(NOT CMAKE_REQUIRED_QUIET)
-      message(CHECK_START "Performing Test ${VAR}")
-    endif()
-    try_run(${VAR}_EXITCODE ${VAR}_COMPILED
-      ${CMAKE_BINARY_DIR}
-      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c
-      COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
-      ${CHECK_C_SOURCE_COMPILES_ADD_LINK_OPTIONS}
-      ${CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES}
-      CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
-      -DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH}
-      "${CHECK_C_SOURCE_COMPILES_ADD_INCLUDES}"
-      COMPILE_OUTPUT_VARIABLE OUTPUT
-      RUN_OUTPUT_VARIABLE RUN_OUTPUT)
-    # if it did not compile make the return value fail code of 1
-    if(NOT ${VAR}_COMPILED)
-      set(${VAR}_EXITCODE 1)
-    endif()
-    # if the return value was 0 then it worked
-    if("${${VAR}_EXITCODE}" EQUAL 0)
-      set(${VAR} 1 CACHE INTERNAL "Test ${VAR}")
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_PASS "Success")
-      endif()
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-        "Performing C SOURCE FILE Test ${VAR} succeeded with the following compile output:\n"
-        "${OUTPUT}\n"
-        "...and run output:\n"
-        "${RUN_OUTPUT}\n"
-        "Return value: ${${VAR}}\n"
-        "Source file was:\n${SOURCE}\n")
-    else()
-      if(CMAKE_CROSSCOMPILING AND "${${VAR}_EXITCODE}" MATCHES  "FAILED_TO_RUN")
-        set(${VAR} "${${VAR}_EXITCODE}")
-      else()
-        set(${VAR} "" CACHE INTERNAL "Test ${VAR}")
-      endif()
-
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_FAIL "Failed")
-      endif()
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-        "Performing C SOURCE FILE Test ${VAR} failed with the following compile output:\n"
-        "${OUTPUT}\n"
-        "...and run output:\n"
-        "${RUN_OUTPUT}\n"
-        "Return value: ${${VAR}_EXITCODE}\n"
-        "Source file was:\n${SOURCE}\n")
-
-    endif()
-  endif()
-endmacro()
diff --git a/share/cmake-3.18/Modules/CheckCXXCompilerFlag.cmake b/share/cmake-3.18/Modules/CheckCXXCompilerFlag.cmake
deleted file mode 100644
index 5e07c25..0000000
--- a/share/cmake-3.18/Modules/CheckCXXCompilerFlag.cmake
+++ /dev/null
@@ -1,58 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckCXXCompilerFlag
-------------------------
-
-Check whether the CXX compiler supports a given flag.
-
-.. command:: check_cxx_compiler_flag
-
-  .. code-block:: cmake
-
-    check_cxx_compiler_flag(<flag> <var>)
-
-  Check that the ``<flag>`` is accepted by the compiler without
-  a diagnostic.  Stores the result in an internal cache entry
-  named ``<var>``.
-
-This command temporarily sets the ``CMAKE_REQUIRED_DEFINITIONS`` variable
-and calls the ``check_cxx_source_compiles`` macro from the
-:module:`CheckCXXSourceCompiles` module.  See documentation of that
-module for a listing of variables that can otherwise modify the build.
-
-A positive result from this check indicates only that the compiler did not
-issue a diagnostic message when given the flag.  Whether the flag has any
-effect or even a specific one is beyond the scope of this module.
-
-.. note::
-  Since the :command:`try_compile` command forwards flags from variables
-  like :variable:`CMAKE_CXX_FLAGS <CMAKE_<LANG>_FLAGS>`, unknown flags
-  in such variables may cause a false negative for this check.
-#]=======================================================================]
-
-include_guard(GLOBAL)
-include(CheckCXXSourceCompiles)
-include(CMakeCheckCompilerFlagCommonPatterns)
-
-function(check_cxx_compiler_flag _flag _var)
-  set(CMAKE_REQUIRED_DEFINITIONS "${_flag}")
-
-  # Normalize locale during test compilation.
-  set(_locale_vars LC_ALL LC_MESSAGES LANG)
-  foreach(v IN LISTS _locale_vars)
-    set(_locale_vars_saved_${v} "$ENV{${v}}")
-    set(ENV{${v}} C)
-  endforeach()
-  check_compiler_flag_common_patterns(_common_patterns)
-  check_cxx_source_compiles("int main() { return 0; }" ${_var}
-    # Some compilers do not fail with a bad flag
-    FAIL_REGEX "command line option .* is valid for .* but not for C\\\\+\\\\+" # GNU
-    ${_common_patterns}
-    )
-  foreach(v IN LISTS _locale_vars)
-    set(ENV{${v}} ${_locale_vars_saved_${v}})
-  endforeach()
-  set(${_var} "${${_var}}" PARENT_SCOPE)
-endfunction()
diff --git a/share/cmake-3.18/Modules/CheckCXXSourceCompiles.cmake b/share/cmake-3.18/Modules/CheckCXXSourceCompiles.cmake
deleted file mode 100644
index c693d32..0000000
--- a/share/cmake-3.18/Modules/CheckCXXSourceCompiles.cmake
+++ /dev/null
@@ -1,146 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckCXXSourceCompiles
-----------------------
-
-Check if given C++ source compiles and links into an executable.
-
-.. command:: check_cxx_source_compiles
-
-  .. code-block:: cmake
-
-    check_cxx_source_compiles(<code> <resultVar>
-                              [FAIL_REGEX <regex1> [<regex2>...]])
-
-  Check that the source supplied in ``<code>`` can be compiled as a C++ source
-  file and linked as an executable (so it must contain at least a ``main()``
-  function). The result will be stored in the internal cache variable specified
-  by ``<resultVar>``, with a boolean true value for success and boolean false
-  for failure. If ``FAIL_REGEX`` is provided, then failure is determined by
-  checking if anything in the output matches any of the specified regular
-  expressions.
-
-  The underlying check is performed by the :command:`try_compile` command. The
-  compile and link commands can be influenced by setting any of the following
-  variables prior to calling ``check_cxx_source_compiles()``:
-
-  ``CMAKE_REQUIRED_FLAGS``
-    Additional flags to pass to the compiler. Note that the contents of
-    :variable:`CMAKE_CXX_FLAGS <CMAKE_<LANG>_FLAGS>` and its associated
-    configuration-specific variable are automatically added to the compiler
-    command before the contents of ``CMAKE_REQUIRED_FLAGS``.
-
-  ``CMAKE_REQUIRED_DEFINITIONS``
-    A :ref:`;-list <CMake Language Lists>` of compiler definitions of the form
-    ``-DFOO`` or ``-DFOO=bar``. A definition for the name specified by
-    ``<resultVar>`` will also be added automatically.
-
-  ``CMAKE_REQUIRED_INCLUDES``
-    A :ref:`;-list <CMake Language Lists>` of header search paths to pass to
-    the compiler. These will be the only header search paths used by
-    ``try_compile()``, i.e. the contents of the :prop_dir:`INCLUDE_DIRECTORIES`
-    directory property will be ignored.
-
-  ``CMAKE_REQUIRED_LINK_OPTIONS``
-    A :ref:`;-list <CMake Language Lists>` of options to add to the link
-    command (see :command:`try_compile` for further details).
-
-  ``CMAKE_REQUIRED_LIBRARIES``
-    A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
-    command. These can be the name of system libraries or they can be
-    :ref:`Imported Targets <Imported Targets>` (see :command:`try_compile` for
-    further details).
-
-  ``CMAKE_REQUIRED_QUIET``
-    If this variable evaluates to a boolean true value, all status messages
-    associated with the check will be suppressed.
-
-  The check is only performed once, with the result cached in the variable
-  named by ``<resultVar>``. Every subsequent CMake run will re-use this cached
-  value rather than performing the check again, even if the ``<code>`` changes.
-  In order to force the check to be re-evaluated, the variable named by
-  ``<resultVar>`` must be manually removed from the cache.
-
-#]=======================================================================]
-
-include_guard(GLOBAL)
-
-macro(CHECK_CXX_SOURCE_COMPILES SOURCE VAR)
-  if(NOT DEFINED "${VAR}")
-    set(_FAIL_REGEX)
-    set(_key)
-    foreach(arg ${ARGN})
-      if("${arg}" MATCHES "^(FAIL_REGEX)$")
-        set(_key "${arg}")
-      elseif(_key)
-        list(APPEND _${_key} "${arg}")
-      else()
-        message(FATAL_ERROR "Unknown argument:\n  ${arg}\n")
-      endif()
-    endforeach()
-
-    set(MACRO_CHECK_FUNCTION_DEFINITIONS
-      "-D${VAR} ${CMAKE_REQUIRED_FLAGS}")
-    if(CMAKE_REQUIRED_LINK_OPTIONS)
-      set(CHECK_CXX_SOURCE_COMPILES_ADD_LINK_OPTIONS
-        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
-    else()
-      set(CHECK_CXX_SOURCE_COMPILES_ADD_LINK_OPTIONS)
-    endif()
-    if(CMAKE_REQUIRED_LIBRARIES)
-      set(CHECK_CXX_SOURCE_COMPILES_ADD_LIBRARIES
-        LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
-    else()
-      set(CHECK_CXX_SOURCE_COMPILES_ADD_LIBRARIES)
-    endif()
-    if(CMAKE_REQUIRED_INCLUDES)
-      set(CHECK_CXX_SOURCE_COMPILES_ADD_INCLUDES
-        "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
-    else()
-      set(CHECK_CXX_SOURCE_COMPILES_ADD_INCLUDES)
-    endif()
-    file(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.cxx"
-      "${SOURCE}\n")
-
-    if(NOT CMAKE_REQUIRED_QUIET)
-      message(CHECK_START "Performing Test ${VAR}")
-    endif()
-    try_compile(${VAR}
-      ${CMAKE_BINARY_DIR}
-      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.cxx
-      COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
-      ${CHECK_CXX_SOURCE_COMPILES_ADD_LINK_OPTIONS}
-      ${CHECK_CXX_SOURCE_COMPILES_ADD_LIBRARIES}
-      CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
-      "${CHECK_CXX_SOURCE_COMPILES_ADD_INCLUDES}"
-      OUTPUT_VARIABLE OUTPUT)
-
-    foreach(_regex ${_FAIL_REGEX})
-      if("${OUTPUT}" MATCHES "${_regex}")
-        set(${VAR} 0)
-      endif()
-    endforeach()
-
-    if(${VAR})
-      set(${VAR} 1 CACHE INTERNAL "Test ${VAR}")
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_PASS "Success")
-      endif()
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-        "Performing C++ SOURCE FILE Test ${VAR} succeeded with the following output:\n"
-        "${OUTPUT}\n"
-        "Source file was:\n${SOURCE}\n")
-    else()
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_FAIL "Failed")
-      endif()
-      set(${VAR} "" CACHE INTERNAL "Test ${VAR}")
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-        "Performing C++ SOURCE FILE Test ${VAR} failed with the following output:\n"
-        "${OUTPUT}\n"
-        "Source file was:\n${SOURCE}\n")
-    endif()
-  endif()
-endmacro()
diff --git a/share/cmake-3.18/Modules/CheckCXXSourceRuns.cmake b/share/cmake-3.18/Modules/CheckCXXSourceRuns.cmake
deleted file mode 100644
index 408e183..0000000
--- a/share/cmake-3.18/Modules/CheckCXXSourceRuns.cmake
+++ /dev/null
@@ -1,145 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckCXXSourceRuns
-------------------
-
-Check if given C++ source compiles and links into an executable and can
-subsequently be run.
-
-.. command:: check_cxx_source_runs
-
-  .. code-block:: cmake
-
-    check_cxx_source_runs(<code> <resultVar>)
-
-  Check that the source supplied in ``<code>`` can be compiled as a C++ source
-  file, linked as an executable and then run. The ``<code>`` must contain at
-  least a ``main()`` function. If the ``<code>`` could be built and run
-  successfully, the internal cache variable specified by ``<resultVar>`` will
-  be set to 1, otherwise it will be set to an value that evaluates to boolean
-  false (e.g. an empty string or an error message).
-
-  The underlying check is performed by the :command:`try_run` command. The
-  compile and link commands can be influenced by setting any of the following
-  variables prior to calling ``check_cxx_source_runs()``:
-
-  ``CMAKE_REQUIRED_FLAGS``
-    Additional flags to pass to the compiler. Note that the contents of
-    :variable:`CMAKE_CXX_FLAGS <CMAKE_<LANG>_FLAGS>` and its associated
-    configuration-specific variable are automatically added to the compiler
-    command before the contents of ``CMAKE_REQUIRED_FLAGS``.
-
-  ``CMAKE_REQUIRED_DEFINITIONS``
-    A :ref:`;-list <CMake Language Lists>` of compiler definitions of the form
-    ``-DFOO`` or ``-DFOO=bar``. A definition for the name specified by
-    ``<resultVar>`` will also be added automatically.
-
-  ``CMAKE_REQUIRED_INCLUDES``
-    A :ref:`;-list <CMake Language Lists>` of header search paths to pass to
-    the compiler. These will be the only header search paths used by
-    ``try_run()``, i.e. the contents of the :prop_dir:`INCLUDE_DIRECTORIES`
-    directory property will be ignored.
-
-  ``CMAKE_REQUIRED_LINK_OPTIONS``
-    A :ref:`;-list <CMake Language Lists>` of options to add to the link
-    command (see :command:`try_run` for further details).
-
-  ``CMAKE_REQUIRED_LIBRARIES``
-    A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
-    command. These can be the name of system libraries or they can be
-    :ref:`Imported Targets <Imported Targets>` (see :command:`try_run` for
-    further details).
-
-  ``CMAKE_REQUIRED_QUIET``
-    If this variable evaluates to a boolean true value, all status messages
-    associated with the check will be suppressed.
-
-  The check is only performed once, with the result cached in the variable
-  named by ``<resultVar>``. Every subsequent CMake run will re-use this cached
-  value rather than performing the check again, even if the ``<code>`` changes.
-  In order to force the check to be re-evaluated, the variable named by
-  ``<resultVar>`` must be manually removed from the cache.
-
-#]=======================================================================]
-
-include_guard(GLOBAL)
-
-macro(CHECK_CXX_SOURCE_RUNS SOURCE VAR)
-  if(NOT DEFINED "${VAR}")
-    set(MACRO_CHECK_FUNCTION_DEFINITIONS
-      "-D${VAR} ${CMAKE_REQUIRED_FLAGS}")
-    if(CMAKE_REQUIRED_LINK_OPTIONS)
-      set(CHECK_CXX_SOURCE_COMPILES_ADD_LINK_OPTIONS
-        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
-    else()
-      set(CHECK_CXX_SOURCE_COMPILES_ADD_LINK_OPTIONS)
-    endif()
-    if(CMAKE_REQUIRED_LIBRARIES)
-      set(CHECK_CXX_SOURCE_COMPILES_ADD_LIBRARIES
-        LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
-    else()
-      set(CHECK_CXX_SOURCE_COMPILES_ADD_LIBRARIES)
-    endif()
-    if(CMAKE_REQUIRED_INCLUDES)
-      set(CHECK_CXX_SOURCE_COMPILES_ADD_INCLUDES
-        "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
-    else()
-      set(CHECK_CXX_SOURCE_COMPILES_ADD_INCLUDES)
-    endif()
-    file(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.cxx"
-      "${SOURCE}\n")
-
-    if(NOT CMAKE_REQUIRED_QUIET)
-      message(CHECK_START "Performing Test ${VAR}")
-    endif()
-    try_run(${VAR}_EXITCODE ${VAR}_COMPILED
-      ${CMAKE_BINARY_DIR}
-      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.cxx
-      COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
-      ${CHECK_CXX_SOURCE_COMPILES_ADD_LINK_OPTIONS}
-      ${CHECK_CXX_SOURCE_COMPILES_ADD_LIBRARIES}
-      CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
-      -DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH}
-      "${CHECK_CXX_SOURCE_COMPILES_ADD_INCLUDES}"
-      COMPILE_OUTPUT_VARIABLE OUTPUT
-      RUN_OUTPUT_VARIABLE RUN_OUTPUT)
-
-    # if it did not compile make the return value fail code of 1
-    if(NOT ${VAR}_COMPILED)
-      set(${VAR}_EXITCODE 1)
-    endif()
-    # if the return value was 0 then it worked
-    if("${${VAR}_EXITCODE}" EQUAL 0)
-      set(${VAR} 1 CACHE INTERNAL "Test ${VAR}")
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_PASS "Success")
-      endif()
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-        "Performing C++ SOURCE FILE Test ${VAR} succeeded with the following output:\n"
-        "${OUTPUT}\n"
-        "...and run output:\n"
-        "${RUN_OUTPUT}\n"
-        "Return value: ${${VAR}}\n"
-        "Source file was:\n${SOURCE}\n")
-    else()
-      if(CMAKE_CROSSCOMPILING AND "${${VAR}_EXITCODE}" MATCHES  "FAILED_TO_RUN")
-        set(${VAR} "${${VAR}_EXITCODE}")
-      else()
-        set(${VAR} "" CACHE INTERNAL "Test ${VAR}")
-      endif()
-
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_FAIL "Failed")
-      endif()
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-        "Performing C++ SOURCE FILE Test ${VAR} failed with the following output:\n"
-        "${OUTPUT}\n"
-        "...and run output:\n"
-        "${RUN_OUTPUT}\n"
-        "Return value: ${${VAR}_EXITCODE}\n"
-        "Source file was:\n${SOURCE}\n")
-    endif()
-  endif()
-endmacro()
diff --git a/share/cmake-3.18/Modules/CheckCXXSymbolExists.cmake b/share/cmake-3.18/Modules/CheckCXXSymbolExists.cmake
deleted file mode 100644
index 5c9079d..0000000
--- a/share/cmake-3.18/Modules/CheckCXXSymbolExists.cmake
+++ /dev/null
@@ -1,76 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckCXXSymbolExists
---------------------
-
-Check if a symbol exists as a function, variable, or macro in ``C++``.
-
-.. command:: check_cxx_symbol_exists
-
-  .. code-block:: cmake
-
-    check_cxx_symbol_exists(<symbol> <files> <variable>)
-
-  Check that the ``<symbol>`` is available after including given header
-  ``<files>`` and store the result in a ``<variable>``.  Specify the list of
-  files in one argument as a semicolon-separated list.
-  ``check_cxx_symbol_exists()`` can be used to check for symbols as seen by
-  the C++ compiler, as opposed to :command:`check_symbol_exists`, which always
-  uses the ``C`` compiler.
-
-  If the header files define the symbol as a macro it is considered
-  available and assumed to work.  If the header files declare the symbol
-  as a function or variable then the symbol must also be available for
-  linking.  If the symbol is a type, enum value, or C++ template it will
-  not be recognized: consider using the :module:`CheckTypeSize`
-  or :module:`CheckCXXSourceCompiles` module instead.
-
-.. note::
-
-  This command is unreliable when ``<symbol>`` is (potentially) an overloaded
-  function. Since there is no reliable way to predict whether a given function
-  in the system environment may be defined as an overloaded function or may be
-  an overloaded function on other systems or will become so in the future, it
-  is generally advised to use the :module:`CheckCXXSourceCompiles` module for
-  checking any function symbol (unless somehow you surely know the checked
-  function is not overloaded on other systems or will not be so in the
-  future).
-
-The following variables may be set before calling this macro to modify
-the way the check is run:
-
-``CMAKE_REQUIRED_FLAGS``
-  string of compile command line flags.
-``CMAKE_REQUIRED_DEFINITIONS``
-  a :ref:`;-list <CMake Language Lists>` of macros to define (-DFOO=bar).
-``CMAKE_REQUIRED_INCLUDES``
-  a :ref:`;-list <CMake Language Lists>` of header search paths to pass to
-  the compiler.
-``CMAKE_REQUIRED_LINK_OPTIONS``
-  a :ref:`;-list <CMake Language Lists>` of options to add to the link command.
-``CMAKE_REQUIRED_LIBRARIES``
-  a :ref:`;-list <CMake Language Lists>` of libraries to add to the link
-  command. See policy :policy:`CMP0075`.
-``CMAKE_REQUIRED_QUIET``
-  execute quietly without messages.
-
-For example:
-
-.. code-block:: cmake
-
-  include(CheckCXXSymbolExists)
-
-  # Check for macro SEEK_SET
-  check_cxx_symbol_exists(SEEK_SET "cstdio" HAVE_SEEK_SET)
-  # Check for function std::fopen
-  check_cxx_symbol_exists(std::fopen "cstdio" HAVE_STD_FOPEN)
-#]=======================================================================]
-
-include_guard(GLOBAL)
-include(CheckSymbolExists)
-
-macro(CHECK_CXX_SYMBOL_EXISTS SYMBOL FILES VARIABLE)
-  __CHECK_SYMBOL_EXISTS_IMPL("${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckSymbolExists.cxx" "${SYMBOL}" "${FILES}" "${VARIABLE}" )
-endmacro()
diff --git a/share/cmake-3.18/Modules/CheckFortranCompilerFlag.cmake b/share/cmake-3.18/Modules/CheckFortranCompilerFlag.cmake
deleted file mode 100644
index 299cd8c..0000000
--- a/share/cmake-3.18/Modules/CheckFortranCompilerFlag.cmake
+++ /dev/null
@@ -1,63 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckFortranCompilerFlag
-------------------------
-
-Check whether the Fortran compiler supports a given flag.
-
-.. command:: check_fortran_compiler_flag
-
-  .. code-block:: cmake
-
-    check_fortran_compiler_flag(<flag> <var>)
-
-  Check that the ``<flag>`` is accepted by the compiler without
-  a diagnostic.  Stores the result in an internal cache entry
-  named ``<var>``.
-
-This command temporarily sets the ``CMAKE_REQUIRED_DEFINITIONS`` variable
-and calls the ``check_fortran_source_compiles`` macro from the
-:module:`CheckFortranSourceCompiles` module.  See documentation of that
-module for a listing of variables that can otherwise modify the build.
-
-A positive result from this check indicates only that the compiler did not
-issue a diagnostic message when given the flag.  Whether the flag has any
-effect or even a specific one is beyond the scope of this module.
-
-.. note::
-  Since the :command:`try_compile` command forwards flags from variables
-  like :variable:`CMAKE_Fortran_FLAGS <CMAKE_<LANG>_FLAGS>`, unknown flags
-  in such variables may cause a false negative for this check.
-#]=======================================================================]
-
-include_guard(GLOBAL)
-include(CheckFortranSourceCompiles)
-include(CMakeCheckCompilerFlagCommonPatterns)
-
-macro (CHECK_Fortran_COMPILER_FLAG _FLAG _RESULT)
-  set(SAFE_CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS}")
-  set(CMAKE_REQUIRED_DEFINITIONS "${_FLAG}")
-
-  # Normalize locale during test compilation.
-  set(_CheckFortranCompilerFlag_LOCALE_VARS LC_ALL LC_MESSAGES LANG)
-  foreach(v ${_CheckFortranCompilerFlag_LOCALE_VARS})
-    set(_CheckFortranCompilerFlag_SAVED_${v} "$ENV{${v}}")
-    set(ENV{${v}} C)
-  endforeach()
-  CHECK_COMPILER_FLAG_COMMON_PATTERNS(_CheckFortranCompilerFlag_COMMON_PATTERNS)
-  CHECK_Fortran_SOURCE_COMPILES("       program test\n       stop\n       end program" ${_RESULT}
-    # Some compilers do not fail with a bad flag
-    FAIL_REGEX "command line option .* is valid for .* but not for Fortran" # GNU
-    ${_CheckFortranCompilerFlag_COMMON_PATTERNS}
-    )
-  foreach(v ${_CheckFortranCompilerFlag_LOCALE_VARS})
-    set(ENV{${v}} ${_CheckFortranCompilerFlag_SAVED_${v}})
-    unset(_CheckFortranCompilerFlag_SAVED_${v})
-  endforeach()
-  unset(_CheckFortranCompilerFlag_LOCALE_VARS)
-  unset(_CheckFortranCompilerFlag_COMMON_PATTERNS)
-
-  set (CMAKE_REQUIRED_DEFINITIONS "${SAFE_CMAKE_REQUIRED_DEFINITIONS}")
-endmacro ()
diff --git a/share/cmake-3.18/Modules/CheckFortranFunctionExists.cmake b/share/cmake-3.18/Modules/CheckFortranFunctionExists.cmake
deleted file mode 100644
index d06203f..0000000
--- a/share/cmake-3.18/Modules/CheckFortranFunctionExists.cmake
+++ /dev/null
@@ -1,84 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckFortranFunctionExists
---------------------------
-
-Check if a Fortran function exists.
-
-.. command:: CHECK_FORTRAN_FUNCTION_EXISTS
-
-  .. code-block:: cmake
-
-    CHECK_FORTRAN_FUNCTION_EXISTS(<function> <result>)
-
-  where
-
-  ``<function>``
-    the name of the Fortran function
-  ``<result>``
-    variable to store the result; will be created as an internal cache variable.
-
-The following variables may be set before calling this macro to modify
-the way the check is run:
-
-``CMAKE_REQUIRED_LINK_OPTIONS``
-  A :ref:`;-list <CMake Language Lists>` of options to add to the link
-  command (see :command:`try_compile` for further details).
-
-``CMAKE_REQUIRED_LIBRARIES``
-  A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
-  command. These can be the name of system libraries or they can be
-  :ref:`Imported Targets <Imported Targets>` (see :command:`try_compile` for
-  further details).
-#]=======================================================================]
-
-include_guard(GLOBAL)
-
-macro(CHECK_FORTRAN_FUNCTION_EXISTS FUNCTION VARIABLE)
-  if(NOT DEFINED ${VARIABLE})
-    message(CHECK_START "Looking for Fortran ${FUNCTION}")
-    if(CMAKE_REQUIRED_LINK_OPTIONS)
-      set(CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS
-        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
-    else()
-      set(CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS)
-    endif()
-    if(CMAKE_REQUIRED_LIBRARIES)
-      set(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES
-        LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
-    else()
-      set(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES)
-    endif()
-    file(WRITE
-    ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompiler.f
-    "
-      program TESTFortran
-      external ${FUNCTION}
-      call ${FUNCTION}()
-      end program TESTFortran
-    "
-    )
-    try_compile(${VARIABLE}
-      ${CMAKE_BINARY_DIR}
-      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompiler.f
-      ${CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS}
-      ${CHECK_FUNCTION_EXISTS_ADD_LIBRARIES}
-      OUTPUT_VARIABLE OUTPUT
-    )
-    if(${VARIABLE})
-      set(${VARIABLE} 1 CACHE INTERNAL "Have Fortran function ${FUNCTION}")
-      message(CHECK_PASS "found")
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-        "Determining if the Fortran ${FUNCTION} exists passed with the following output:\n"
-        "${OUTPUT}\n\n")
-    else()
-      message(CHECK_FAIL "not found")
-      set(${VARIABLE} "" CACHE INTERNAL "Have Fortran function ${FUNCTION}")
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-        "Determining if the Fortran ${FUNCTION} exists failed with the following output:\n"
-        "${OUTPUT}\n\n")
-    endif()
-  endif()
-endmacro()
diff --git a/share/cmake-3.18/Modules/CheckFortranSourceCompiles.cmake b/share/cmake-3.18/Modules/CheckFortranSourceCompiles.cmake
deleted file mode 100644
index 3354bfb..0000000
--- a/share/cmake-3.18/Modules/CheckFortranSourceCompiles.cmake
+++ /dev/null
@@ -1,166 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckFortranSourceCompiles
---------------------------
-
-Check if given Fortran source compiles and links into an executable.
-
-.. command:: check_fortran_source_compiles
-
-  .. code-block:: cmake
-
-    check_fortran_source_compiles(<code> <resultVar>
-        [FAIL_REGEX <regex>...]
-        [SRC_EXT <extension>]
-    )
-
-  Checks that the source supplied in ``<code>`` can be compiled as a Fortran
-  source file and linked as an executable. The ``<code>`` must be a Fortran program
-  containing at least an ``end`` statement--for example:
-
-  .. code-block:: cmake
-
-    check_fortran_source_compiles("character :: b; error stop b; end" F2018ESTOPOK SRC_EXT F90)
-
-  This command can help avoid costly build processes when a compiler lacks support
-  for a necessary feature, or a particular vendor library is not compatible with
-  the Fortran compiler version being used. This generate-time check may advise the
-  user of such before the main build process. See also the
-  :command:`check_fortran_source_runs` command to actually run the compiled code.
-
-  The result will be stored in the internal cache
-  variable ``<resultVar>``, with a boolean true value for success and boolean
-  false for failure.
-
-  If ``FAIL_REGEX`` is provided, then failure is determined by checking
-  if anything in the output matches any of the specified regular expressions.
-
-  By default, the test source file will be given a ``.F`` file extension. The
-  ``SRC_EXT`` option can be used to override this with ``.<extension>`` instead--
-  ``.F90`` is a typical choice.
-
-  The underlying check is performed by the :command:`try_compile` command. The
-  compile and link commands can be influenced by setting any of the following
-  variables prior to calling ``check_fortran_source_compiles()``:
-
-  ``CMAKE_REQUIRED_FLAGS``
-    Additional flags to pass to the compiler. Note that the contents of
-    :variable:`CMAKE_Fortran_FLAGS <CMAKE_<LANG>_FLAGS>` and its associated
-    configuration-specific variable are automatically added to the compiler
-    command before the contents of ``CMAKE_REQUIRED_FLAGS``.
-
-  ``CMAKE_REQUIRED_DEFINITIONS``
-    A :ref:`;-list <CMake Language Lists>` of compiler definitions of the form
-    ``-DFOO`` or ``-DFOO=bar``. A definition for the name specified by
-    ``<resultVar>`` will also be added automatically.
-
-  ``CMAKE_REQUIRED_INCLUDES``
-    A :ref:`;-list <CMake Language Lists>` of header search paths to pass to
-    the compiler. These will be the only header search paths used by
-    ``try_compile()``, i.e. the contents of the :prop_dir:`INCLUDE_DIRECTORIES`
-    directory property will be ignored.
-
-  ``CMAKE_REQUIRED_LINK_OPTIONS``
-    A :ref:`;-list <CMake Language Lists>` of options to add to the link
-    command (see :command:`try_compile` for further details).
-
-  ``CMAKE_REQUIRED_LIBRARIES``
-    A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
-    command. These can be the name of system libraries or they can be
-    :ref:`Imported Targets <Imported Targets>` (see :command:`try_compile` for
-    further details).
-
-  ``CMAKE_REQUIRED_QUIET``
-    If this variable evaluates to a boolean true value, all status messages
-    associated with the check will be suppressed.
-
-  The check is only performed once, with the result cached in the variable
-  named by ``<resultVar>``. Every subsequent CMake run will re-use this cached
-  value rather than performing the check again, even if the ``<code>`` changes.
-  In order to force the check to be re-evaluated, the variable named by
-  ``<resultVar>`` must be manually removed from the cache.
-
-#]=======================================================================]
-
-include_guard(GLOBAL)
-
-macro(CHECK_Fortran_SOURCE_COMPILES SOURCE VAR)
-  if(NOT DEFINED "${VAR}")
-    set(_FAIL_REGEX)
-    set(_SRC_EXT)
-    set(_key)
-    foreach(arg ${ARGN})
-      if("${arg}" MATCHES "^(FAIL_REGEX|SRC_EXT)$")
-        set(_key "${arg}")
-      elseif(_key)
-        list(APPEND _${_key} "${arg}")
-      else()
-        message(FATAL_ERROR "Unknown argument:\n  ${arg}\n")
-      endif()
-    endforeach()
-    if(NOT _SRC_EXT)
-      set(_SRC_EXT F)
-    endif()
-    if(CMAKE_REQUIRED_LINK_OPTIONS)
-      set(CHECK_Fortran_SOURCE_COMPILES_ADD_LINK_OPTIONS
-        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
-    else()
-      set(CHECK_Fortran_SOURCE_COMPILES_ADD_LINK_OPTIONS)
-    endif()
-    if(CMAKE_REQUIRED_LIBRARIES)
-      set(CHECK_Fortran_SOURCE_COMPILES_ADD_LIBRARIES
-        LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
-    else()
-      set(CHECK_Fortran_SOURCE_COMPILES_ADD_LIBRARIES)
-    endif()
-    if(CMAKE_REQUIRED_INCLUDES)
-      set(CHECK_Fortran_SOURCE_COMPILES_ADD_INCLUDES
-        "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
-    else()
-      set(CHECK_Fortran_SOURCE_COMPILES_ADD_INCLUDES)
-    endif()
-    file(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.${_SRC_EXT}"
-      "${SOURCE}\n")
-
-    if(NOT CMAKE_REQUIRED_QUIET)
-      message(CHECK_START "Performing Test ${VAR}")
-    endif()
-    try_compile(${VAR}
-      ${CMAKE_BINARY_DIR}
-      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.${_SRC_EXT}
-      COMPILE_DEFINITIONS -D${VAR} ${CMAKE_REQUIRED_DEFINITIONS}
-      ${CHECK_Fortran_SOURCE_COMPILES_ADD_LINK_OPTIONS}
-      ${CHECK_Fortran_SOURCE_COMPILES_ADD_LIBRARIES}
-      CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS}
-      "${CHECK_Fortran_SOURCE_COMPILES_ADD_INCLUDES}"
-      OUTPUT_VARIABLE OUTPUT)
-
-    foreach(_regex ${_FAIL_REGEX})
-      if("${OUTPUT}" MATCHES "${_regex}")
-        set(${VAR} 0)
-      endif()
-    endforeach()
-
-    if(${VAR})
-      set(${VAR} 1 CACHE INTERNAL "Test ${VAR}")
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_PASS "Success")
-      endif()
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-        "Performing Fortran SOURCE FILE Test ${VAR} succeeded with the following output:\n"
-        "${OUTPUT}\n"
-        "Source file was:\n${SOURCE}\n")
-    else()
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_FAIL "Failed")
-      endif()
-      set(${VAR} "" CACHE INTERNAL "Test ${VAR}")
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-        "Performing Fortran SOURCE FILE Test ${VAR} failed with the following output:\n"
-        "${OUTPUT}\n"
-        "Source file was:\n${SOURCE}\n")
-    endif()
-  endif()
-endmacro()
diff --git a/share/cmake-3.18/Modules/CheckFortranSourceRuns.cmake b/share/cmake-3.18/Modules/CheckFortranSourceRuns.cmake
deleted file mode 100644
index f858b84..0000000
--- a/share/cmake-3.18/Modules/CheckFortranSourceRuns.cmake
+++ /dev/null
@@ -1,173 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckFortranSourceRuns
-----------------------
-
-Check if given Fortran source compiles and links into an executable and can
-subsequently be run.
-
-.. command:: check_fortran_source_runs
-
-  .. code-block:: cmake
-
-    check_fortran_source_runs(<code> <resultVar>
-        [SRC_EXT <extension>])
-
-  Check that the source supplied in ``<code>`` can be compiled as a Fortran source
-  file, linked as an executable and then run. The ``<code>`` must be a Fortran program
-  containing at least an ``end`` statement--for example:
-
-  .. code-block:: cmake
-
-    check_fortran_source_runs("real :: x[*]; call co_sum(x); end" F2018coarrayOK)
-
-  This command can help avoid costly build processes when a compiler lacks support
-  for a necessary feature, or a particular vendor library is not compatible with
-  the Fortran compiler version being used. Some of these failures only occur at runtime
-  instead of linktime, and a trivial runtime example can catch the issue before the
-  main build process.
-
-  If the ``<code>`` could be built and run
-  successfully, the internal cache variable specified by ``<resultVar>`` will
-  be set to 1, otherwise it will be set to an value that evaluates to boolean
-  false (e.g. an empty string or an error message).
-
-  By default, the test source file will be given a ``.F90`` file extension. The
-  ``SRC_EXT`` option can be used to override this with ``.<extension>`` instead.
-
-  The underlying check is performed by the :command:`try_run` command. The
-  compile and link commands can be influenced by setting any of the following
-  variables prior to calling ``check_fortran_source_runs()``:
-
-  ``CMAKE_REQUIRED_FLAGS``
-    Additional flags to pass to the compiler. Note that the contents of
-    :variable:`CMAKE_Fortran_FLAGS <CMAKE_<LANG>_FLAGS>` and its associated
-    configuration-specific variable are automatically added to the compiler
-    command before the contents of ``CMAKE_REQUIRED_FLAGS``.
-
-  ``CMAKE_REQUIRED_DEFINITIONS``
-    A :ref:`;-list <CMake Language Lists>` of compiler definitions of the form
-    ``-DFOO`` or ``-DFOO=bar``. A definition for the name specified by
-    ``<resultVar>`` will also be added automatically.
-
-  ``CMAKE_REQUIRED_INCLUDES``
-    A :ref:`;-list <CMake Language Lists>` of header search paths to pass to
-    the compiler. These will be the only header search paths used by
-    ``try_run()``, i.e. the contents of the :prop_dir:`INCLUDE_DIRECTORIES`
-    directory property will be ignored.
-
-  ``CMAKE_REQUIRED_LINK_OPTIONS``
-    A :ref:`;-list <CMake Language Lists>` of options to add to the link
-    command (see :command:`try_run` for further details).
-
-  ``CMAKE_REQUIRED_LIBRARIES``
-    A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
-    command. These can be the name of system libraries or they can be
-    :ref:`Imported Targets <Imported Targets>` (see :command:`try_run` for
-    further details).
-
-  ``CMAKE_REQUIRED_QUIET``
-    If this variable evaluates to a boolean true value, all status messages
-    associated with the check will be suppressed.
-
-  The check is only performed once, with the result cached in the variable
-  named by ``<resultVar>``. Every subsequent CMake run will re-use this cached
-  value rather than performing the check again, even if the ``<code>`` changes.
-  In order to force the check to be re-evaluated, the variable named by
-  ``<resultVar>`` must be manually removed from the cache.
-
-#]=======================================================================]
-
-include_guard(GLOBAL)
-
-macro(CHECK_Fortran_SOURCE_RUNS SOURCE VAR)
-  if(NOT DEFINED "${VAR}")
-    set(_SRC_EXT)
-    set(_key)
-    foreach(arg ${ARGN})
-      if("${arg}" MATCHES "^(SRC_EXT)$")
-        set(_key "${arg}")
-      elseif(_key)
-        list(APPEND _${_key} "${arg}")
-      else()
-        message(FATAL_ERROR "Unknown argument:\n  ${arg}\n")
-      endif()
-    endforeach()
-    if(NOT _SRC_EXT)
-      set(_SRC_EXT F90)
-    endif()
-    if(CMAKE_REQUIRED_LINK_OPTIONS)
-      set(CHECK_Fortran_SOURCE_COMPILES_ADD_LINK_OPTIONS
-        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
-    else()
-      set(CHECK_Fortran_SOURCE_COMPILES_ADD_LINK_OPTIONS)
-    endif()
-    if(CMAKE_REQUIRED_LIBRARIES)
-      set(CHECK_Fortran_SOURCE_COMPILES_ADD_LIBRARIES
-        LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
-    else()
-      set(CHECK_Fortran_SOURCE_COMPILES_ADD_LIBRARIES)
-    endif()
-    if(CMAKE_REQUIRED_INCLUDES)
-      set(CHECK_Fortran_SOURCE_COMPILES_ADD_INCLUDES
-        "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
-    else()
-      set(CHECK_Fortran_SOURCE_COMPILES_ADD_INCLUDES)
-    endif()
-    file(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.${_SRC_EXT}"
-      "${SOURCE}\n")
-
-    if(NOT CMAKE_REQUIRED_QUIET)
-      message(CHECK_START "Performing Test ${VAR}")
-    endif()
-    try_run(${VAR}_EXITCODE ${VAR}_COMPILED
-      ${CMAKE_BINARY_DIR}
-      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.${_SRC_EXT}
-      COMPILE_DEFINITIONS -D${VAR} ${CMAKE_REQUIRED_DEFINITIONS}
-      ${CHECK_Fortran_SOURCE_COMPILES_ADD_LINK_OPTIONS}
-      ${CHECK_Fortran_SOURCE_COMPILES_ADD_LIBRARIES}
-      CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS}
-      -DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH}
-      "${CHECK_Fortran_SOURCE_COMPILES_ADD_INCLUDES}"
-      COMPILE_OUTPUT_VARIABLE OUTPUT
-      RUN_OUTPUT_VARIABLE RUN_OUTPUT)
-
-    # if it did not compile make the return value fail code of 1
-    if(NOT ${VAR}_COMPILED)
-      set(${VAR}_EXITCODE 1)
-    endif()
-    # if the return value was 0 then it worked
-    if("${${VAR}_EXITCODE}" EQUAL 0)
-      set(${VAR} 1 CACHE INTERNAL "Test ${VAR}")
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_PASS "Success")
-      endif()
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-        "Performing Fortran SOURCE FILE Test ${VAR} succeeded with the following output:\n"
-        "${OUTPUT}\n"
-        "...and run output:\n"
-        "${RUN_OUTPUT}\n"
-        "Return value: ${${VAR}}\n"
-        "Source file was:\n${SOURCE}\n")
-    else()
-      if(CMAKE_CROSSCOMPILING AND "${${VAR}_EXITCODE}" MATCHES  "FAILED_TO_RUN")
-        set(${VAR} "${${VAR}_EXITCODE}")
-      else()
-        set(${VAR} "" CACHE INTERNAL "Test ${VAR}")
-      endif()
-
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_FAIL "Failed")
-      endif()
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-        "Performing Fortran SOURCE FILE Test ${VAR} failed with the following output:\n"
-        "${OUTPUT}\n"
-        "...and run output:\n"
-        "${RUN_OUTPUT}\n"
-        "Return value: ${${VAR}_EXITCODE}\n"
-        "Source file was:\n${SOURCE}\n")
-    endif()
-  endif()
-endmacro()
diff --git a/share/cmake-3.18/Modules/CheckFunctionExists.cmake b/share/cmake-3.18/Modules/CheckFunctionExists.cmake
deleted file mode 100644
index 136da89..0000000
--- a/share/cmake-3.18/Modules/CheckFunctionExists.cmake
+++ /dev/null
@@ -1,119 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckFunctionExists
--------------------
-
-Check if a C function can be linked
-
-.. command:: check_function_exists
-
-  .. code-block:: cmake
-
-    check_function_exists(<function> <variable>)
-
-  Checks that the ``<function>`` is provided by libraries on the system and store
-  the result in a ``<variable>``, which will be created as an internal
-  cache variable.
-
-The following variables may be set before calling this macro to modify the
-way the check is run:
-
-``CMAKE_REQUIRED_FLAGS``
-  string of compile command line flags.
-``CMAKE_REQUIRED_DEFINITIONS``
-  a :ref:`;-list <CMake Language Lists>` of macros to define (-DFOO=bar).
-``CMAKE_REQUIRED_INCLUDES``
-  a :ref:`;-list <CMake Language Lists>` of header search paths to pass to
-  the compiler.
-``CMAKE_REQUIRED_LINK_OPTIONS``
-  a :ref:`;-list <CMake Language Lists>` of options to add to the link command.
-``CMAKE_REQUIRED_LIBRARIES``
-  a :ref:`;-list <CMake Language Lists>` of libraries to add to the link
-  command. See policy :policy:`CMP0075`.
-``CMAKE_REQUIRED_QUIET``
-  execute quietly without messages.
-
-.. note::
-
-  Prefer using :Module:`CheckSymbolExists` instead of this module,
-  for the following reasons:
-
-  * ``check_function_exists()`` can't detect functions that are inlined
-    in headers or specified as a macro.
-
-  * ``check_function_exists()`` can't detect anything in the 32-bit
-    versions of the Win32 API, because of a mismatch in calling conventions.
-
-  * ``check_function_exists()`` only verifies linking, it does not verify
-    that the function is declared in system headers.
-#]=======================================================================]
-
-include_guard(GLOBAL)
-
-macro(CHECK_FUNCTION_EXISTS FUNCTION VARIABLE)
-  if(NOT DEFINED "${VARIABLE}" OR "x${${VARIABLE}}" STREQUAL "x${VARIABLE}")
-    set(MACRO_CHECK_FUNCTION_DEFINITIONS
-      "-DCHECK_FUNCTION_EXISTS=${FUNCTION} ${CMAKE_REQUIRED_FLAGS}")
-    if(NOT CMAKE_REQUIRED_QUIET)
-      message(CHECK_START "Looking for ${FUNCTION}")
-    endif()
-    if(CMAKE_REQUIRED_LINK_OPTIONS)
-      set(CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS
-        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
-    else()
-      set(CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS)
-    endif()
-    if(CMAKE_REQUIRED_LIBRARIES)
-      set(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES
-        LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
-    else()
-      set(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES)
-    endif()
-    if(CMAKE_REQUIRED_INCLUDES)
-      set(CHECK_FUNCTION_EXISTS_ADD_INCLUDES
-        "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
-    else()
-      set(CHECK_FUNCTION_EXISTS_ADD_INCLUDES)
-    endif()
-
-    if(CMAKE_C_COMPILER_LOADED)
-      set(_cfe_source ${CMAKE_ROOT}/Modules/CheckFunctionExists.c)
-    elseif(CMAKE_CXX_COMPILER_LOADED)
-      set(_cfe_source ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CheckFunctionExists/CheckFunctionExists.cxx)
-      configure_file(${CMAKE_ROOT}/Modules/CheckFunctionExists.c "${_cfe_source}" COPYONLY)
-    else()
-      message(FATAL_ERROR "CHECK_FUNCTION_EXISTS needs either C or CXX language enabled")
-    endif()
-
-    try_compile(${VARIABLE}
-      ${CMAKE_BINARY_DIR}
-      ${_cfe_source}
-      COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
-      ${CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS}
-      ${CHECK_FUNCTION_EXISTS_ADD_LIBRARIES}
-      CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
-      "${CHECK_FUNCTION_EXISTS_ADD_INCLUDES}"
-      OUTPUT_VARIABLE OUTPUT)
-    unset(_cfe_source)
-
-    if(${VARIABLE})
-      set(${VARIABLE} 1 CACHE INTERNAL "Have function ${FUNCTION}")
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_PASS "found")
-      endif()
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-        "Determining if the function ${FUNCTION} exists passed with the following output:\n"
-        "${OUTPUT}\n\n")
-    else()
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_FAIL "not found")
-      endif()
-      set(${VARIABLE} "" CACHE INTERNAL "Have function ${FUNCTION}")
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-        "Determining if the function ${FUNCTION} exists failed with the following output:\n"
-        "${OUTPUT}\n\n")
-    endif()
-  endif()
-endmacro()
diff --git a/share/cmake-3.18/Modules/CheckIPOSupported.cmake b/share/cmake-3.18/Modules/CheckIPOSupported.cmake
deleted file mode 100644
index 90a9f61..0000000
--- a/share/cmake-3.18/Modules/CheckIPOSupported.cmake
+++ /dev/null
@@ -1,239 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckIPOSupported
------------------
-
-Check whether the compiler supports an interprocedural optimization (IPO/LTO).
-Use this before enabling the :prop_tgt:`INTERPROCEDURAL_OPTIMIZATION` target
-property.
-
-.. command:: check_ipo_supported
-
-  ::
-
-    check_ipo_supported([RESULT <result>] [OUTPUT <output>]
-                        [LANGUAGES <lang>...])
-
-  Options are:
-
-  ``RESULT <result>``
-    Set ``<result>`` variable to ``YES`` if IPO is supported by the
-    compiler and ``NO`` otherwise.  If this option is not given then
-    the command will issue a fatal error if IPO is not supported.
-  ``OUTPUT <output>``
-    Set ``<output>`` variable with details about any error.
-  ``LANGUAGES <lang>...``
-    Specify languages whose compilers to check.
-    Languages ``C``, ``CXX``, and ``Fortran`` are supported.
-
-It makes no sense to use this module when :policy:`CMP0069` is set to ``OLD`` so
-module will return error in this case. See policy :policy:`CMP0069` for details.
-
-Examples
-^^^^^^^^
-
-.. code-block:: cmake
-
-  check_ipo_supported() # fatal error if IPO is not supported
-  set_property(TARGET foo PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
-
-.. code-block:: cmake
-
-  # Optional IPO. Do not use IPO if it's not supported by compiler.
-  check_ipo_supported(RESULT result OUTPUT output)
-  if(result)
-    set_property(TARGET foo PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
-  else()
-    message(WARNING "IPO is not supported: ${output}")
-  endif()
-
-#]=======================================================================]
-
-# X_RESULT - name of the final result variable
-# X_OUTPUT - name of the variable with information about error
-macro(_ipo_not_supported output)
-  if(NOT X_RESULT)
-    message(FATAL_ERROR "IPO is not supported (${output}).")
-  endif()
-
-  set("${X_RESULT}" NO PARENT_SCOPE)
-  if(X_OUTPUT)
-    set("${X_OUTPUT}" "${output}" PARENT_SCOPE)
-  endif()
-endmacro()
-
-# Run IPO/LTO test
-macro(_ipo_run_language_check language)
-  set(testdir "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/_CMakeLTOTest-${language}")
-
-  file(REMOVE_RECURSE "${testdir}")
-  file(MAKE_DIRECTORY "${testdir}")
-
-  set(bindir "${testdir}/bin")
-  set(srcdir "${testdir}/src")
-
-  file(MAKE_DIRECTORY "${bindir}")
-  file(MAKE_DIRECTORY "${srcdir}")
-
-  set(TRY_COMPILE_PROJECT_NAME "lto-test")
-
-  set(try_compile_src "${CMAKE_ROOT}/Modules/CheckIPOSupported")
-
-  # Use:
-  # * TRY_COMPILE_PROJECT_NAME
-  # * CMAKE_VERSION
-  configure_file(
-      "${try_compile_src}/CMakeLists-${language}.txt.in"
-      "${srcdir}/CMakeLists.txt"
-      @ONLY
-  )
-
-  string(COMPARE EQUAL "${language}" "C" is_c)
-  string(COMPARE EQUAL "${language}" "CXX" is_cxx)
-  string(COMPARE EQUAL "${language}" "Fortran" is_fortran)
-
-  if(is_c)
-    set(copy_sources foo.c main.c)
-  elseif(is_cxx)
-    set(copy_sources foo.cpp main.cpp)
-  elseif(is_fortran)
-    set(copy_sources foo.f main.f)
-  else()
-    message(FATAL_ERROR "Language not supported")
-  endif()
-
-  foreach(x ${copy_sources})
-    configure_file(
-        "${try_compile_src}/${x}"
-        "${srcdir}/${x}"
-        COPYONLY
-    )
-  endforeach()
-
-  try_compile(
-      _IPO_LANGUAGE_CHECK_RESULT
-      "${bindir}"
-      "${srcdir}"
-      "${TRY_COMPILE_PROJECT_NAME}"
-      CMAKE_FLAGS
-      "-DCMAKE_VERBOSE_MAKEFILE=ON"
-      "-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON"
-      OUTPUT_VARIABLE output
-  )
-  set(_IPO_LANGUAGE_CHECK_RESULT "${_IPO_LANGUAGE_CHECK_RESULT}")
-  unset(_IPO_LANGUAGE_CHECK_RESULT CACHE)
-
-  if(NOT _IPO_LANGUAGE_CHECK_RESULT)
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-      "${language} compiler IPO check failed with the following output:\n"
-      "${output}\n")
-    _ipo_not_supported("check failed to compile")
-    if(X_OUTPUT)
-      set("${X_OUTPUT}" "${output}" PARENT_SCOPE)
-    endif()
-    return()
-  endif()
-endmacro()
-
-function(check_ipo_supported)
-  cmake_policy(GET CMP0069 x)
-
-  string(COMPARE EQUAL "${x}" "" not_set)
-  if(not_set)
-    message(FATAL_ERROR "Policy CMP0069 is not set")
-  endif()
-
-  string(COMPARE EQUAL "${x}" "OLD" is_old)
-  if(is_old)
-    message(FATAL_ERROR "Policy CMP0069 set to OLD")
-  endif()
-
-  set(optional)
-  set(one RESULT OUTPUT)
-  set(multiple LANGUAGES)
-
-  # Introduce:
-  # * X_RESULT
-  # * X_OUTPUT
-  # * X_LANGUAGES
-  cmake_parse_arguments(X "${optional}" "${one}" "${multiple}" "${ARGV}")
-
-  string(COMPARE NOTEQUAL "${X_UNPARSED_ARGUMENTS}" "" has_unparsed)
-  if(has_unparsed)
-    message(FATAL_ERROR "Unparsed arguments: ${X_UNPARSED_ARGUMENTS}")
-  endif()
-
-  string(COMPARE EQUAL "${X_LANGUAGES}" "" no_languages)
-  if(no_languages)
-    # User did not set any languages, use defaults
-    get_property(enabled_languages GLOBAL PROPERTY ENABLED_LANGUAGES)
-    string(COMPARE EQUAL "${enabled_languages}" "" no_languages)
-    if(no_languages)
-      _ipo_not_supported(
-          "no languages found in ENABLED_LANGUAGES global property"
-      )
-      return()
-    endif()
-
-    set(languages "")
-    list(FIND enabled_languages "CXX" result)
-    if(NOT result EQUAL -1)
-      list(APPEND languages "CXX")
-    endif()
-
-    list(FIND enabled_languages "C" result)
-    if(NOT result EQUAL -1)
-      list(APPEND languages "C")
-    endif()
-
-    list(FIND enabled_languages "Fortran" result)
-    if(NOT result EQUAL -1)
-      list(APPEND languages "Fortran")
-    endif()
-
-    string(COMPARE EQUAL "${languages}" "" no_languages)
-    if(no_languages)
-      _ipo_not_supported(
-          "no C/CXX/Fortran languages found in ENABLED_LANGUAGES global property"
-      )
-      return()
-    endif()
-  else()
-    set(languages "${X_LANGUAGES}")
-
-    set(unsupported_languages "${languages}")
-    list(REMOVE_ITEM unsupported_languages "C" "CXX" "Fortran")
-    string(COMPARE NOTEQUAL "${unsupported_languages}" "" has_unsupported)
-    if(has_unsupported)
-      _ipo_not_supported(
-          "language(s) '${unsupported_languages}' not supported"
-      )
-      return()
-    endif()
-  endif()
-
-  foreach(lang ${languages})
-    if(NOT _CMAKE_${lang}_IPO_SUPPORTED_BY_CMAKE)
-      _ipo_not_supported("CMake doesn't support IPO for current ${lang} compiler")
-      return()
-    endif()
-
-    if(NOT _CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER)
-      _ipo_not_supported("${lang} compiler doesn't support IPO")
-      return()
-    endif()
-  endforeach()
-
-  if(CMAKE_GENERATOR MATCHES "^Visual Studio 9 ")
-    _ipo_not_supported("CMake doesn't support IPO for current generator")
-    return()
-  endif()
-
-  foreach(x ${languages})
-    _ipo_run_language_check(${x})
-  endforeach()
-
-  set("${X_RESULT}" YES PARENT_SCOPE)
-endfunction()
diff --git a/share/cmake-3.18/Modules/CheckIncludeFile.cmake b/share/cmake-3.18/Modules/CheckIncludeFile.cmake
deleted file mode 100644
index 3a10473..0000000
--- a/share/cmake-3.18/Modules/CheckIncludeFile.cmake
+++ /dev/null
@@ -1,130 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckIncludeFile
-----------------
-
-Provides a macro to check if a header file can be included in ``C``.
-
-.. command:: CHECK_INCLUDE_FILE
-
-  .. code-block:: cmake
-
-    CHECK_INCLUDE_FILE(<include> <variable> [<flags>])
-
-  Check if the given ``<include>`` file may be included in a ``C``
-  source file and store the result in an internal cache entry named
-  ``<variable>``.  The optional third argument may be used to add
-  compilation flags to the check (or use ``CMAKE_REQUIRED_FLAGS`` below).
-
-The following variables may be set before calling this macro to modify
-the way the check is run:
-
-``CMAKE_REQUIRED_FLAGS``
-  string of compile command line flags.
-``CMAKE_REQUIRED_DEFINITIONS``
-  a :ref:`;-list <CMake Language Lists>` of macros to define (-DFOO=bar).
-``CMAKE_REQUIRED_INCLUDES``
-  a :ref:`;-list <CMake Language Lists>` of header search paths to pass to
-  the compiler.
-``CMAKE_REQUIRED_LINK_OPTIONS``
-  a :ref:`;-list <CMake Language Lists>` of options to add to the link command.
-``CMAKE_REQUIRED_LIBRARIES``
-  a :ref:`;-list <CMake Language Lists>` of libraries to add to the link
-  command. See policy :policy:`CMP0075`.
-``CMAKE_REQUIRED_QUIET``
-  execute quietly without messages.
-
-See the :module:`CheckIncludeFiles` module to check for multiple headers
-at once.  See the :module:`CheckIncludeFileCXX` module to check for headers
-using the ``CXX`` language.
-#]=======================================================================]
-
-include_guard(GLOBAL)
-
-macro(CHECK_INCLUDE_FILE INCLUDE VARIABLE)
-  if(NOT DEFINED "${VARIABLE}")
-    if(CMAKE_REQUIRED_INCLUDES)
-      set(CHECK_INCLUDE_FILE_C_INCLUDE_DIRS "-DINCLUDE_DIRECTORIES=${CMAKE_REQUIRED_INCLUDES}")
-    else()
-      set(CHECK_INCLUDE_FILE_C_INCLUDE_DIRS)
-    endif()
-    set(MACRO_CHECK_INCLUDE_FILE_FLAGS ${CMAKE_REQUIRED_FLAGS})
-    set(CHECK_INCLUDE_FILE_VAR ${INCLUDE})
-    configure_file(${CMAKE_ROOT}/Modules/CheckIncludeFile.c.in
-      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckIncludeFile.c)
-    if(NOT CMAKE_REQUIRED_QUIET)
-      message(CHECK_START "Looking for ${INCLUDE}")
-    endif()
-    if(${ARGC} EQUAL 3)
-      set(CMAKE_C_FLAGS_SAVE ${CMAKE_C_FLAGS})
-      string(APPEND CMAKE_C_FLAGS " ${ARGV2}")
-    endif()
-
-    set(_CIF_LINK_OPTIONS)
-    if(CMAKE_REQUIRED_LINK_OPTIONS)
-      set(_CIF_LINK_OPTIONS LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
-    endif()
-
-    set(_CIF_LINK_LIBRARIES "")
-    if(CMAKE_REQUIRED_LIBRARIES)
-      cmake_policy(GET CMP0075 _CIF_CMP0075
-        PARENT_SCOPE # undocumented, do not use outside of CMake
-        )
-      if("x${_CIF_CMP0075}x" STREQUAL "xNEWx")
-        set(_CIF_LINK_LIBRARIES LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
-      elseif("x${_CIF_CMP0075}x" STREQUAL "xOLDx")
-      elseif(NOT _CIF_CMP0075_WARNED)
-        set(_CIF_CMP0075_WARNED 1)
-        message(AUTHOR_WARNING
-          "Policy CMP0075 is not set: Include file check macros honor CMAKE_REQUIRED_LIBRARIES.  "
-          "Run \"cmake --help-policy CMP0075\" for policy details.  "
-          "Use the cmake_policy command to set the policy and suppress this warning."
-          "\n"
-          "CMAKE_REQUIRED_LIBRARIES is set to:\n"
-          "  ${CMAKE_REQUIRED_LIBRARIES}\n"
-          "For compatibility with CMake 3.11 and below this check is ignoring it."
-          )
-      endif()
-      unset(_CIF_CMP0075)
-    endif()
-
-    try_compile(${VARIABLE}
-      ${CMAKE_BINARY_DIR}
-      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckIncludeFile.c
-      COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
-      ${_CIF_LINK_OPTIONS}
-      ${_CIF_LINK_LIBRARIES}
-      CMAKE_FLAGS
-      -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILE_FLAGS}
-      "${CHECK_INCLUDE_FILE_C_INCLUDE_DIRS}"
-      OUTPUT_VARIABLE OUTPUT)
-    unset(_CIF_LINK_OPTIONS)
-    unset(_CIF_LINK_LIBRARIES)
-
-    if(${ARGC} EQUAL 3)
-      set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS_SAVE})
-    endif()
-
-    if(${VARIABLE})
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_PASS "found")
-      endif()
-      set(${VARIABLE} 1 CACHE INTERNAL "Have include ${INCLUDE}")
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-        "Determining if the include file ${INCLUDE} "
-        "exists passed with the following output:\n"
-        "${OUTPUT}\n\n")
-    else()
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_FAIL "not found")
-      endif()
-      set(${VARIABLE} "" CACHE INTERNAL "Have include ${INCLUDE}")
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-        "Determining if the include file ${INCLUDE} "
-        "exists failed with the following output:\n"
-        "${OUTPUT}\n\n")
-    endif()
-  endif()
-endmacro()
diff --git a/share/cmake-3.18/Modules/CheckIncludeFileCXX.cmake b/share/cmake-3.18/Modules/CheckIncludeFileCXX.cmake
deleted file mode 100644
index 496550f..0000000
--- a/share/cmake-3.18/Modules/CheckIncludeFileCXX.cmake
+++ /dev/null
@@ -1,129 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckIncludeFileCXX
--------------------
-
-Provides a macro to check if a header file can be included in ``CXX``.
-
-.. command:: CHECK_INCLUDE_FILE_CXX
-
-  .. code-block:: cmake
-
-    CHECK_INCLUDE_FILE_CXX(<include> <variable> [<flags>])
-
-  Check if the given ``<include>`` file may be included in a ``CXX``
-  source file and store the result in an internal cache entry named
-  ``<variable>``.  The optional third argument may be used to add
-  compilation flags to the check (or use ``CMAKE_REQUIRED_FLAGS`` below).
-
-The following variables may be set before calling this macro to modify
-the way the check is run:
-
-``CMAKE_REQUIRED_FLAGS``
-  string of compile command line flags.
-``CMAKE_REQUIRED_DEFINITIONS``
-  a :ref:`;-list <CMake Language Lists>` of macros to define (-DFOO=bar).
-``CMAKE_REQUIRED_INCLUDES``
-  a :ref:`;-list <CMake Language Lists>` of header search paths to pass to
-  the compiler.
-``CMAKE_REQUIRED_LINK_OPTIONS``
-  a :ref:`;-list <CMake Language Lists>` of options to add to the link command.
-``CMAKE_REQUIRED_LIBRARIES``
-  a :ref:`;-list <CMake Language Lists>` of libraries to add to the link
-  command. See policy :policy:`CMP0075`.
-``CMAKE_REQUIRED_QUIET``
-  execute quietly without messages.
-
-See modules :module:`CheckIncludeFile` and :module:`CheckIncludeFiles`
-to check for one or more ``C`` headers.
-#]=======================================================================]
-
-include_guard(GLOBAL)
-
-macro(CHECK_INCLUDE_FILE_CXX INCLUDE VARIABLE)
-  if(NOT DEFINED "${VARIABLE}" OR "x${${VARIABLE}}" STREQUAL "x${VARIABLE}")
-    if(CMAKE_REQUIRED_INCLUDES)
-      set(CHECK_INCLUDE_FILE_CXX_INCLUDE_DIRS "-DINCLUDE_DIRECTORIES=${CMAKE_REQUIRED_INCLUDES}")
-    else()
-      set(CHECK_INCLUDE_FILE_CXX_INCLUDE_DIRS)
-    endif()
-    set(MACRO_CHECK_INCLUDE_FILE_FLAGS ${CMAKE_REQUIRED_FLAGS})
-    set(CHECK_INCLUDE_FILE_VAR ${INCLUDE})
-    configure_file(${CMAKE_ROOT}/Modules/CheckIncludeFile.cxx.in
-      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckIncludeFile.cxx)
-    if(NOT CMAKE_REQUIRED_QUIET)
-      message(CHECK_START "Looking for C++ include ${INCLUDE}")
-    endif()
-    if(${ARGC} EQUAL 3)
-      set(CMAKE_CXX_FLAGS_SAVE ${CMAKE_CXX_FLAGS})
-      string(APPEND CMAKE_CXX_FLAGS " ${ARGV2}")
-    endif()
-
-    set(_CIF_LINK_OPTIONS)
-    if(CMAKE_REQUIRED_LINK_OPTIONS)
-      set(_CIF_LINK_OPTIONS LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
-    endif()
-
-    set(_CIF_LINK_LIBRARIES "")
-    if(CMAKE_REQUIRED_LIBRARIES)
-      cmake_policy(GET CMP0075 _CIF_CMP0075
-        PARENT_SCOPE # undocumented, do not use outside of CMake
-        )
-      if("x${_CIF_CMP0075}x" STREQUAL "xNEWx")
-        set(_CIF_LINK_LIBRARIES LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
-      elseif("x${_CIF_CMP0075}x" STREQUAL "xOLDx")
-      elseif(NOT _CIF_CMP0075_WARNED)
-        set(_CIF_CMP0075_WARNED 1)
-        message(AUTHOR_WARNING
-          "Policy CMP0075 is not set: Include file check macros honor CMAKE_REQUIRED_LIBRARIES.  "
-          "Run \"cmake --help-policy CMP0075\" for policy details.  "
-          "Use the cmake_policy command to set the policy and suppress this warning."
-          "\n"
-          "CMAKE_REQUIRED_LIBRARIES is set to:\n"
-          "  ${CMAKE_REQUIRED_LIBRARIES}\n"
-          "For compatibility with CMake 3.11 and below this check is ignoring it."
-          )
-      endif()
-      unset(_CIF_CMP0075)
-    endif()
-
-    try_compile(${VARIABLE}
-      ${CMAKE_BINARY_DIR}
-      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckIncludeFile.cxx
-      COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
-      ${_CIF_LINK_OPTIONS}
-      ${_CIF_LINK_LIBRARIES}
-      CMAKE_FLAGS
-      -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILE_FLAGS}
-      "${CHECK_INCLUDE_FILE_CXX_INCLUDE_DIRS}"
-      OUTPUT_VARIABLE OUTPUT)
-    unset(_CIF_LINK_OPTIONS)
-    unset(_CIF_LINK_LIBRARIES)
-
-    if(${ARGC} EQUAL 3)
-      set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS_SAVE})
-    endif()
-
-    if(${VARIABLE})
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_PASS "found")
-      endif()
-      set(${VARIABLE} 1 CACHE INTERNAL "Have include ${INCLUDE}")
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-        "Determining if the include file ${INCLUDE} "
-        "exists passed with the following output:\n"
-        "${OUTPUT}\n\n")
-    else()
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_FAIL "not found")
-      endif()
-      set(${VARIABLE} "" CACHE INTERNAL "Have include ${INCLUDE}")
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-        "Determining if the include file ${INCLUDE} "
-        "exists failed with the following output:\n"
-        "${OUTPUT}\n\n")
-    endif()
-  endif()
-endmacro()
diff --git a/share/cmake-3.18/Modules/CheckIncludeFiles.cmake b/share/cmake-3.18/Modules/CheckIncludeFiles.cmake
deleted file mode 100644
index 8e10cd6..0000000
--- a/share/cmake-3.18/Modules/CheckIncludeFiles.cmake
+++ /dev/null
@@ -1,168 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckIncludeFiles
------------------
-
-Provides a macro to check if a list of one or more header files can
-be included together.
-
-.. command:: CHECK_INCLUDE_FILES
-
-  .. code-block:: cmake
-
-    CHECK_INCLUDE_FILES("<includes>" <variable> [LANGUAGE <language>])
-
-  Check if the given ``<includes>`` list may be included together
-  in a source file and store the result in an internal cache
-  entry named ``<variable>``.  Specify the ``<includes>`` argument
-  as a :ref:`;-list <CMake Language Lists>` of header file names.
-
-  If ``LANGUAGE`` is set, the specified compiler will be used to perform the
-  check. Acceptable values are ``C`` and ``CXX``. If not set, the C compiler
-  will be used if enabled. If the C compiler is not enabled, the C++
-  compiler will be used if enabled.
-
-The following variables may be set before calling this macro to modify
-the way the check is run:
-
-``CMAKE_REQUIRED_FLAGS``
-  string of compile command line flags.
-``CMAKE_REQUIRED_DEFINITIONS``
-  a :ref:`;-list <CMake Language Lists>` of macros to define (-DFOO=bar).
-``CMAKE_REQUIRED_INCLUDES``
-  a :ref:`;-list <CMake Language Lists>` of header search paths to pass to
-  the compiler.
-``CMAKE_REQUIRED_LINK_OPTIONS``
-  a :ref:`;-list <CMake Language Lists>` of options to add to the link command.
-``CMAKE_REQUIRED_LIBRARIES``
-  a :ref:`;-list <CMake Language Lists>` of libraries to add to the link
-  command. See policy :policy:`CMP0075`.
-``CMAKE_REQUIRED_QUIET``
-  execute quietly without messages.
-
-See modules :module:`CheckIncludeFile` and :module:`CheckIncludeFileCXX`
-to check for a single header file in ``C`` or ``CXX`` languages.
-#]=======================================================================]
-
-include_guard(GLOBAL)
-
-macro(CHECK_INCLUDE_FILES INCLUDE VARIABLE)
-  if(NOT DEFINED "${VARIABLE}")
-    set(CMAKE_CONFIGURABLE_FILE_CONTENT "/* */\n")
-
-    if("x${ARGN}" STREQUAL "x")
-       if(CMAKE_C_COMPILER_LOADED)
-         set(_lang C)
-       elseif(CMAKE_CXX_COMPILER_LOADED)
-         set(_lang CXX)
-       else()
-         message(FATAL_ERROR "CHECK_INCLUDE_FILES needs either C or CXX language enabled.\n")
-       endif()
-    elseif("x${ARGN}" MATCHES "^xLANGUAGE;([a-zA-Z]+)$")
-      set(_lang "${CMAKE_MATCH_1}")
-    elseif("x${ARGN}" MATCHES "^xLANGUAGE$")
-      message(FATAL_ERROR "No languages listed for LANGUAGE option.\nSupported languages: C, CXX.\n")
-    else()
-      message(FATAL_ERROR "Unknown arguments:\n  ${ARGN}\n")
-    endif()
-
-    if(_lang STREQUAL "C")
-      set(src ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CheckIncludeFiles/${VARIABLE}.c)
-    elseif(_lang STREQUAL "CXX")
-      set(src ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CheckIncludeFiles/${VARIABLE}.cpp)
-    else()
-      message(FATAL_ERROR "Unknown language:\n  ${_lang}\nSupported languages: C, CXX.\n")
-    endif()
-
-    if(CMAKE_REQUIRED_INCLUDES)
-      set(CHECK_INCLUDE_FILES_INCLUDE_DIRS "-DINCLUDE_DIRECTORIES=${CMAKE_REQUIRED_INCLUDES}")
-    else()
-      set(CHECK_INCLUDE_FILES_INCLUDE_DIRS)
-    endif()
-    set(CHECK_INCLUDE_FILES_CONTENT "/* */\n")
-    set(MACRO_CHECK_INCLUDE_FILES_FLAGS ${CMAKE_REQUIRED_FLAGS})
-    foreach(FILE ${INCLUDE})
-      string(APPEND CMAKE_CONFIGURABLE_FILE_CONTENT
-        "#include <${FILE}>\n")
-    endforeach()
-    string(APPEND CMAKE_CONFIGURABLE_FILE_CONTENT
-      "\n\nint main(void){return 0;}\n")
-    configure_file("${CMAKE_ROOT}/Modules/CMakeConfigurableFile.in"
-      "${src}" @ONLY)
-
-    set(_INCLUDE ${INCLUDE}) # remove empty elements
-    if("${_INCLUDE}" MATCHES "^([^;]+);.+;([^;]+)$")
-      list(LENGTH _INCLUDE _INCLUDE_LEN)
-      set(_description "${_INCLUDE_LEN} include files ${CMAKE_MATCH_1}, ..., ${CMAKE_MATCH_2}")
-    elseif("${_INCLUDE}" MATCHES "^([^;]+);([^;]+)$")
-      set(_description "include files ${CMAKE_MATCH_1}, ${CMAKE_MATCH_2}")
-    else()
-      set(_description "include file ${_INCLUDE}")
-    endif()
-
-    set(_CIF_LINK_OPTIONS)
-    if(CMAKE_REQUIRED_LINK_OPTIONS)
-      set(_CIF_LINK_OPTIONS LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
-    endif()
-
-    set(_CIF_LINK_LIBRARIES "")
-    if(CMAKE_REQUIRED_LIBRARIES)
-      cmake_policy(GET CMP0075 _CIF_CMP0075
-        PARENT_SCOPE # undocumented, do not use outside of CMake
-        )
-      if("x${_CIF_CMP0075}x" STREQUAL "xNEWx")
-        set(_CIF_LINK_LIBRARIES LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
-      elseif("x${_CIF_CMP0075}x" STREQUAL "xOLDx")
-      elseif(NOT _CIF_CMP0075_WARNED)
-        set(_CIF_CMP0075_WARNED 1)
-        message(AUTHOR_WARNING
-          "Policy CMP0075 is not set: Include file check macros honor CMAKE_REQUIRED_LIBRARIES.  "
-          "Run \"cmake --help-policy CMP0075\" for policy details.  "
-          "Use the cmake_policy command to set the policy and suppress this warning."
-          "\n"
-          "CMAKE_REQUIRED_LIBRARIES is set to:\n"
-          "  ${CMAKE_REQUIRED_LIBRARIES}\n"
-          "For compatibility with CMake 3.11 and below this check is ignoring it."
-          )
-      endif()
-      unset(_CIF_CMP0075)
-    endif()
-
-    if(NOT CMAKE_REQUIRED_QUIET)
-      message(CHECK_START "Looking for ${_description}")
-    endif()
-    try_compile(${VARIABLE}
-      ${CMAKE_BINARY_DIR}
-      ${src}
-      COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
-      ${_CIF_LINK_OPTIONS}
-      ${_CIF_LINK_LIBRARIES}
-      CMAKE_FLAGS
-      -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILES_FLAGS}
-      "${CHECK_INCLUDE_FILES_INCLUDE_DIRS}"
-      OUTPUT_VARIABLE OUTPUT)
-    unset(_CIF_LINK_OPTIONS)
-    unset(_CIF_LINK_LIBRARIES)
-    if(${VARIABLE})
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_PASS "found")
-      endif()
-      set(${VARIABLE} 1 CACHE INTERNAL "Have include ${INCLUDE}")
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-        "Determining if files ${INCLUDE} "
-        "exist passed with the following output:\n"
-        "${OUTPUT}\n\n")
-    else()
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_FAIL "not found")
-      endif()
-      set(${VARIABLE} "" CACHE INTERNAL "Have includes ${INCLUDE}")
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-        "Determining if files ${INCLUDE} "
-        "exist failed with the following output:\n"
-        "${OUTPUT}\nSource:\n${CMAKE_CONFIGURABLE_FILE_CONTENT}\n")
-    endif()
-  endif()
-endmacro()
diff --git a/share/cmake-3.18/Modules/CheckLanguage.cmake b/share/cmake-3.18/Modules/CheckLanguage.cmake
deleted file mode 100644
index d67d8d3..0000000
--- a/share/cmake-3.18/Modules/CheckLanguage.cmake
+++ /dev/null
@@ -1,106 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckLanguage
--------------
-
-Check if a language can be enabled
-
-Usage:
-
-::
-
-  check_language(<lang>)
-
-where ``<lang>`` is a language that may be passed to :command:`enable_language`
-such as ``Fortran``.  If :variable:`CMAKE_<LANG>_COMPILER` is already defined
-the check does nothing.  Otherwise it tries enabling the language in a
-test project.  The result is cached in :variable:`CMAKE_<LANG>_COMPILER`
-as the compiler that was found, or ``NOTFOUND`` if the language cannot be
-enabled. For CUDA which can have an explicit host compiler, the cache
-:variable:`CMAKE_CUDA_HOST_COMPILER` variable will be set if it was required
-for compilation.
-
-Example:
-
-::
-
-  check_language(Fortran)
-  if(CMAKE_Fortran_COMPILER)
-    enable_language(Fortran)
-  else()
-    message(STATUS "No Fortran support")
-  endif()
-#]=======================================================================]
-
-include_guard(GLOBAL)
-
-macro(check_language lang)
-  if(NOT DEFINED CMAKE_${lang}_COMPILER)
-    set(_desc "Looking for a ${lang} compiler")
-    message(CHECK_START "${_desc}")
-    file(REMOVE_RECURSE ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang})
-
-    set(extra_compiler_variables)
-    if(${lang} STREQUAL CUDA)
-      set(extra_compiler_variables "set(CMAKE_CUDA_HOST_COMPILER \\\"\${CMAKE_CUDA_HOST_COMPILER}\\\")")
-    endif()
-
-    set(_cl_content
-      "cmake_minimum_required(VERSION ${CMAKE_VERSION})
-project(Check${lang} ${lang})
-file(WRITE \"\${CMAKE_CURRENT_BINARY_DIR}/result.cmake\"
-  \"set(CMAKE_${lang}_COMPILER \\\"\${CMAKE_${lang}_COMPILER}\\\")\\n\"
-  \"${extra_compiler_variables}\\n\"
-  )"
-    )
-
-    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang}/CMakeLists.txt"
-      "${_cl_content}")
-    if(CMAKE_GENERATOR_INSTANCE)
-      set(_D_CMAKE_GENERATOR_INSTANCE "-DCMAKE_GENERATOR_INSTANCE:INTERNAL=${CMAKE_GENERATOR_INSTANCE}")
-    else()
-      set(_D_CMAKE_GENERATOR_INSTANCE "")
-    endif()
-    if(CMAKE_GENERATOR MATCHES "^(Xcode$|Green Hills MULTI$|Visual Studio)")
-      set(_D_CMAKE_MAKE_PROGRAM "")
-    else()
-      set(_D_CMAKE_MAKE_PROGRAM "-DCMAKE_MAKE_PROGRAM:FILEPATH=${CMAKE_MAKE_PROGRAM}")
-    endif()
-    execute_process(
-      WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang}
-      COMMAND ${CMAKE_COMMAND} . -G ${CMAKE_GENERATOR}
-                                 -A "${CMAKE_GENERATOR_PLATFORM}"
-                                 -T "${CMAKE_GENERATOR_TOOLSET}"
-                                 ${_D_CMAKE_GENERATOR_INSTANCE}
-                                 ${_D_CMAKE_MAKE_PROGRAM}
-      OUTPUT_VARIABLE _cl_output
-      ERROR_VARIABLE _cl_output
-      RESULT_VARIABLE _cl_result
-      )
-    include(${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang}/result.cmake OPTIONAL)
-    if(CMAKE_${lang}_COMPILER AND "${_cl_result}" STREQUAL "0")
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-        "${_desc} passed with the following output:\n"
-        "${_cl_output}\n")
-      set(_CHECK_COMPILER_STATUS CHECK_PASS)
-    else()
-      set(CMAKE_${lang}_COMPILER NOTFOUND)
-      set(_CHECK_COMPILER_STATUS CHECK_FAIL)
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-        "${_desc} failed with the following output:\n"
-        "${_cl_output}\n")
-    endif()
-    message(${_CHECK_COMPILER_STATUS} "${CMAKE_${lang}_COMPILER}")
-    set(CMAKE_${lang}_COMPILER "${CMAKE_${lang}_COMPILER}" CACHE FILEPATH "${lang} compiler")
-    mark_as_advanced(CMAKE_${lang}_COMPILER)
-
-    if(CMAKE_${lang}_HOST_COMPILER)
-      message(STATUS "Looking for a ${lang} host compiler - ${CMAKE_${lang}_HOST_COMPILER}")
-      set(CMAKE_${lang}_HOST_COMPILER "${CMAKE_${lang}_HOST_COMPILER}" CACHE FILEPATH "${lang} host compiler")
-      mark_as_advanced(CMAKE_${lang}_HOST_COMPILER)
-    endif()
-
-  endif()
-endmacro()
diff --git a/share/cmake-3.18/Modules/CheckLibraryExists.cmake b/share/cmake-3.18/Modules/CheckLibraryExists.cmake
deleted file mode 100644
index 6470dfd..0000000
--- a/share/cmake-3.18/Modules/CheckLibraryExists.cmake
+++ /dev/null
@@ -1,99 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckLibraryExists
-------------------
-
-Check if the function exists.
-
-.. command:: CHECK_LIBRARY_EXISTS
-
-  .. code-block:: cmake
-
-    CHECK_LIBRARY_EXISTS(LIBRARY FUNCTION LOCATION VARIABLE)
-
-  ::
-
-    LIBRARY  - the name of the library you are looking for
-    FUNCTION - the name of the function
-    LOCATION - location where the library should be found
-    VARIABLE - variable to store the result
-               Will be created as an internal cache variable.
-
-
-
-The following variables may be set before calling this macro to modify
-the way the check is run:
-
-::
-
-  CMAKE_REQUIRED_FLAGS = string of compile command line flags
-  CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
-  CMAKE_REQUIRED_LINK_OPTIONS = list of options to pass to link command
-  CMAKE_REQUIRED_LIBRARIES = list of libraries to link
-  CMAKE_REQUIRED_QUIET = execute quietly without messages
-#]=======================================================================]
-
-include_guard(GLOBAL)
-
-macro(CHECK_LIBRARY_EXISTS LIBRARY FUNCTION LOCATION VARIABLE)
-  if(NOT DEFINED "${VARIABLE}")
-    set(MACRO_CHECK_LIBRARY_EXISTS_DEFINITION
-      "-DCHECK_FUNCTION_EXISTS=${FUNCTION} ${CMAKE_REQUIRED_FLAGS}")
-    if(NOT CMAKE_REQUIRED_QUIET)
-      message(CHECK_START "Looking for ${FUNCTION} in ${LIBRARY}")
-    endif()
-    set(CHECK_LIBRARY_EXISTS_LINK_OPTIONS)
-    if(CMAKE_REQUIRED_LINK_OPTIONS)
-      set(CHECK_LIBRARY_EXISTS_LINK_OPTIONS
-        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
-    endif()
-    set(CHECK_LIBRARY_EXISTS_LIBRARIES ${LIBRARY})
-    if(CMAKE_REQUIRED_LIBRARIES)
-      set(CHECK_LIBRARY_EXISTS_LIBRARIES
-        ${CHECK_LIBRARY_EXISTS_LIBRARIES} ${CMAKE_REQUIRED_LIBRARIES})
-    endif()
-
-    if(CMAKE_C_COMPILER_LOADED)
-      set(_cle_source ${CMAKE_ROOT}/Modules/CheckFunctionExists.c)
-    elseif(CMAKE_CXX_COMPILER_LOADED)
-      set(_cle_source ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CheckLibraryExists/CheckFunctionExists.cxx)
-      configure_file(${CMAKE_ROOT}/Modules/CheckFunctionExists.c "${_cle_source}" COPYONLY)
-    else()
-      message(FATAL_ERROR "CHECK_FUNCTION_EXISTS needs either C or CXX language enabled")
-    endif()
-
-    try_compile(${VARIABLE}
-      ${CMAKE_BINARY_DIR}
-      ${_cle_source}
-      COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
-      ${CHECK_LIBRARY_EXISTS_LINK_OPTIONS}
-      LINK_LIBRARIES ${CHECK_LIBRARY_EXISTS_LIBRARIES}
-      CMAKE_FLAGS
-      -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_LIBRARY_EXISTS_DEFINITION}
-      -DLINK_DIRECTORIES:STRING=${LOCATION}
-      OUTPUT_VARIABLE OUTPUT)
-    unset(_cle_source)
-
-    if(${VARIABLE})
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_PASS "found")
-      endif()
-      set(${VARIABLE} 1 CACHE INTERNAL "Have library ${LIBRARY}")
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-        "Determining if the function ${FUNCTION} exists in the ${LIBRARY} "
-        "passed with the following output:\n"
-        "${OUTPUT}\n\n")
-    else()
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_FAIL "not found")
-      endif()
-      set(${VARIABLE} "" CACHE INTERNAL "Have library ${LIBRARY}")
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-        "Determining if the function ${FUNCTION} exists in the ${LIBRARY} "
-        "failed with the following output:\n"
-        "${OUTPUT}\n\n")
-    endif()
-  endif()
-endmacro()
diff --git a/share/cmake-3.18/Modules/CheckLinkerFlag.cmake b/share/cmake-3.18/Modules/CheckLinkerFlag.cmake
deleted file mode 100644
index beda5fe..0000000
--- a/share/cmake-3.18/Modules/CheckLinkerFlag.cmake
+++ /dev/null
@@ -1,81 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckLinkerFlag
----------------
-
-Check whether the compiler supports a given link flag.
-
-.. command:: check_linker_flag
-
-  .. code-block:: cmake
-
-    check_linker_flag(<lang> <flag> <var>)
-
-Check that the link ``<flag>`` is accepted by the ``<lang>`` compiler without
-a diagnostic.  Stores the result in an internal cache entry named ``<var>``.
-
-This command temporarily sets the ``CMAKE_REQUIRED_LINK_OPTIONS`` variable
-and calls the ``check_<lang>_source_compiles`` macro from the
-``Check<lang>SourceCompiles`` module (:module:`CheckCSourceCompiles`,
-:module:`CheckCSourceCompiles`, :module:`CheckCXXSourceCompiles`,
-:module:`CheckOBJCSourceCompiles`, :module:`CheckOBJCXXSourceCompiles` or
-:module:`CheckFortranSourceCompiles`).  See documentation of these
-modules for a listing of variables that can otherwise modify the build.
-
-The underlying implementation rely on :prop_tgt:`LINK_OPTIONS` property to
-check the specified flag. The ``LINKER:`` prefix, as described in
-:command:`target_link_options` command, can be used as well.
-
-A positive result from this check indicates only that the compiler did not
-issue a diagnostic message when given the link flag.  Whether the flag has any
-effect or even a specific one is beyond the scope of this module.
-
-.. note::
-  Since the :command:`try_compile` command forwards flags from variables
-  like :variable:`CMAKE_<LANG>_FLAGS`, unknown flags in such variables may
-  cause a false negative for this check.
-#]=======================================================================]
-
-include_guard(GLOBAL)
-
-include(CMakeCheckCompilerFlagCommonPatterns)
-
-function(CHECK_LINKER_FLAG _lang _flag _var)
-  get_property (_supported_languages GLOBAL PROPERTY ENABLED_LANGUAGES)
-  if (NOT _lang IN_LIST _supported_languages)
-    message (SEND_ERROR "check_linker_flag: ${_lang}: unknown language.")
-    return()
-  endif()
-
-  include (Check${_lang}SourceCompiles)
-
-  set(CMAKE_REQUIRED_LINK_OPTIONS "${_flag}")
-
-  # Normalize locale during test compilation.
-  set(_locale_vars LC_ALL LC_MESSAGES LANG)
-  foreach(v IN LISTS _locale_vars)
-    set(_locale_vars_saved_${v} "$ENV{${v}}")
-    set(ENV{${v}} C)
-  endforeach()
-
-  if (_lang MATCHES "^(C|CXX)$")
-    set (_source "int main() { return 0; }")
-  elseif (_lang STREQUAL "Fortran")
-    set (_source "       program test\n       stop\n       end program")
-  elseif (_lang MATCHES "^(OBJC|OBJCXX)$")
-    set (_source "#ifndef __OBJC__\n#  error \"Not an Objective-C++ compiler\"\n#endif\nint main(void) { return 0; }")
-  else()
-    message (SEND_ERROR "check_linker_flag: ${_lang}: unsupported language.")
-    return()
-  endif()
-  check_compiler_flag_common_patterns(_common_patterns)
-
-  cmake_language (CALL check_${_lang}_source_compiles "${_source}" ${_var} ${_common_patterns})
-
-  foreach(v IN LISTS _locale_vars)
-    set(ENV{${v}} ${_locale_vars_saved_${v}})
-  endforeach()
-  set(${_var} "${${_var}}" PARENT_SCOPE)
-endfunction()
diff --git a/share/cmake-3.18/Modules/CheckOBJCCompilerFlag.cmake b/share/cmake-3.18/Modules/CheckOBJCCompilerFlag.cmake
deleted file mode 100644
index 1d975da..0000000
--- a/share/cmake-3.18/Modules/CheckOBJCCompilerFlag.cmake
+++ /dev/null
@@ -1,64 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckOBJCCompilerFlag
----------------------
-
-Check whether the Objective-C compiler supports a given flag.
-
-.. command:: check_objc_compiler_flag
-
-  .. code-block:: cmake
-
-    check_objc_compiler_flag(<flag> <var>)
-
-  Check that the ``<flag>`` is accepted by the compiler without
-  a diagnostic.  Stores the result in an internal cache entry
-  named ``<var>``.
-
-This command temporarily sets the ``CMAKE_REQUIRED_DEFINITIONS`` variable
-and calls the ``check_objc_source_compiles`` macro from the
-:module:`CheckOBJCSourceCompiles` module.  See documentation of that
-module for a listing of variables that can otherwise modify the build.
-
-A positive result from this check indicates only that the compiler did not
-issue a diagnostic message when given the flag.  Whether the flag has any
-effect or even a specific one is beyond the scope of this module.
-
-.. note::
-  Since the :command:`try_compile` command forwards flags from variables
-  like :variable:`CMAKE_OBJC_FLAGS <CMAKE_<LANG>_FLAGS>`, unknown flags
-  in such variables may cause a false negative for this check.
-#]=======================================================================]
-
-include_guard(GLOBAL)
-include(CheckOBJCSourceCompiles)
-include(CMakeCheckCompilerFlagCommonPatterns)
-
-macro (CHECK_OBJC_COMPILER_FLAG _FLAG _RESULT)
-  set(SAFE_CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS}")
-  set(CMAKE_REQUIRED_DEFINITIONS "${_FLAG}")
-
-   # Normalize locale during test compilation.
-  set(_CheckOBJCCompilerFlag_LOCALE_VARS LC_ALL LC_MESSAGES LANG)
-  foreach(v ${_CheckOBJCCompilerFlag_LOCALE_VARS})
-    set(_CheckOBJCCompilerFlag_SAVED_${v} "$ENV{${v}}")
-    set(ENV{${v}} OBJC)
-  endforeach()
-  CHECK_COMPILER_FLAG_COMMON_PATTERNS(_CheckOBJCCompilerFlag_COMMON_PATTERNS)
-  CHECK_OBJC_SOURCE_COMPILES("#ifndef __OBJC__\n#  error \"Not an Objective-C compiler\"\n#endif\nint main(void) { return 0; }" ${_RESULT}
-    # Some compilers do not fail with a bad flag
-    FAIL_REGEX "command line option .* is valid for .* but not for Objective-C" # GNU
-    FAIL_REGEX "argument unused during compilation: .*" # Clang
-    ${_CheckOBJCCompilerFlag_COMMON_PATTERNS}
-    )
-  foreach(v ${_CheckOBJCCompilerFlag_LOCALE_VARS})
-    set(ENV{${v}} ${_CheckOBJCCompilerFlag_SAVED_${v}})
-    unset(_CheckOBJCCompilerFlag_SAVED_${v})
-  endforeach()
-  unset(_CheckOBJCCompilerFlag_LOCALE_VARS)
-  unset(_CheckOBJCCompilerFlag_COMMON_PATTERNS)
-
-  set (CMAKE_REQUIRED_DEFINITIONS "${SAFE_CMAKE_REQUIRED_DEFINITIONS}")
-endmacro ()
diff --git a/share/cmake-3.18/Modules/CheckOBJCSourceCompiles.cmake b/share/cmake-3.18/Modules/CheckOBJCSourceCompiles.cmake
deleted file mode 100644
index 601f1fa..0000000
--- a/share/cmake-3.18/Modules/CheckOBJCSourceCompiles.cmake
+++ /dev/null
@@ -1,145 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckOBJCSourceCompiles
------------------------
-
-Check if given Objective-C source compiles and links into an executable.
-
-.. command:: check_objc_source_compiles
-
-  .. code-block:: cmake
-
-    check_objc_source_compiles(<code> <resultVar>
-                               [FAIL_REGEX <regex1> [<regex2>...]])
-
-  Check that the source supplied in ``<code>`` can be compiled as a Objectie-C source
-  file and linked as an executable (so it must contain at least a ``main()``
-  function). The result will be stored in the internal cache variable specified
-  by ``<resultVar>``, with a boolean true value for success and boolean false
-  for failure. If ``FAIL_REGEX`` is provided, then failure is determined by
-  checking if anything in the output matches any of the specified regular
-  expressions.
-
-  The underlying check is performed by the :command:`try_compile` command. The
-  compile and link commands can be influenced by setting any of the following
-  variables prior to calling ``check_objc_source_compiles()``:
-
-  ``CMAKE_REQUIRED_FLAGS``
-    Additional flags to pass to the compiler. Note that the contents of
-    :variable:`CMAKE_OBJC_FLAGS <CMAKE_<LANG>_FLAGS>` and its associated
-    configuration-specific variable are automatically added to the compiler
-    command before the contents of ``CMAKE_REQUIRED_FLAGS``.
-
-  ``CMAKE_REQUIRED_DEFINITIONS``
-    A :ref:`;-list <CMake Language Lists>` of compiler definitions of the form
-    ``-DFOO`` or ``-DFOO=bar``. A definition for the name specified by
-    ``<resultVar>`` will also be added automatically.
-
-  ``CMAKE_REQUIRED_INCLUDES``
-    A :ref:`;-list <CMake Language Lists>` of header search paths to pass to
-    the compiler. These will be the only header search paths used by
-    ``try_compile()``, i.e. the contents of the :prop_dir:`INCLUDE_DIRECTORIES`
-    directory property will be ignored.
-
-  ``CMAKE_REQUIRED_LINK_OPTIONS``
-    A :ref:`;-list <CMake Language Lists>` of options to add to the link
-    command (see :command:`try_compile` for further details).
-
-  ``CMAKE_REQUIRED_LIBRARIES``
-    A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
-    command. These can be the name of system libraries or they can be
-    :ref:`Imported Targets <Imported Targets>` (see :command:`try_compile` for
-    further details).
-
-  ``CMAKE_REQUIRED_QUIET``
-    If this variable evaluates to a boolean true value, all status messages
-    associated with the check will be suppressed.
-
-  The check is only performed once, with the result cached in the variable
-  named by ``<resultVar>``. Every subsequent CMake run will re-use this cached
-  value rather than performing the check again, even if the ``<code>`` changes.
-  In order to force the check to be re-evaluated, the variable named by
-  ``<resultVar>`` must be manually removed from the cache.
-
-#]=======================================================================]
-
-include_guard(GLOBAL)
-
-macro(CHECK_OBJC_SOURCE_COMPILES SOURCE VAR)
-  if(NOT DEFINED "${VAR}")
-    set(_FAIL_REGEX)
-    set(_key)
-    foreach(arg ${ARGN})
-      if("${arg}" MATCHES "^(FAIL_REGEX)$")
-        set(_key "${arg}")
-      elseif(_key)
-        list(APPEND _${_key} "${arg}")
-      else()
-        message(FATAL_ERROR "Unknown argument:\n  ${arg}\n")
-      endif()
-    endforeach()
-    set(MACRO_CHECK_FUNCTION_DEFINITIONS
-      "-D${VAR} ${CMAKE_REQUIRED_FLAGS}")
-    if(CMAKE_REQUIRED_LINK_OPTIONS)
-      set(CHECK_OBJC_SOURCE_COMPILES_ADD_LINK_OPTIONS
-        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
-    else()
-      set(CHECK_OBJC_SOURCE_COMPILES_ADD_LINK_OPTIONS)
-    endif()
-    if(CMAKE_REQUIRED_LIBRARIES)
-      set(CHECK_OBJC_SOURCE_COMPILES_ADD_LIBRARIES
-        LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
-    else()
-      set(CHECK_OBJC_SOURCE_COMPILES_ADD_LIBRARIES)
-    endif()
-    if(CMAKE_REQUIRED_INCLUDES)
-      set(CHECK_OBJC_SOURCE_COMPILES_ADD_INCLUDES
-        "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
-    else()
-      set(CHECK_OBJC_SOURCE_COMPILES_ADD_INCLUDES)
-    endif()
-    file(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.m"
-      "${SOURCE}\n")
-
-    if(NOT CMAKE_REQUIRED_QUIET)
-      message(CHECK_START "Performing Test ${VAR}")
-    endif()
-    try_compile(${VAR}
-      ${CMAKE_BINARY_DIR}
-      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.m
-      COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
-      ${CHECK_OBJC_SOURCE_COMPILES_ADD_LINK_OPTIONS}
-      ${CHECK_OBJC_SOURCE_COMPILES_ADD_LIBRARIES}
-      CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
-      "${CHECK_OBJC_SOURCE_COMPILES_ADD_INCLUDES}"
-      OUTPUT_VARIABLE OUTPUT)
-
-    foreach(_regex ${_FAIL_REGEX})
-      if("${OUTPUT}" MATCHES "${_regex}")
-        set(${VAR} 0)
-      endif()
-    endforeach()
-
-    if(${VAR})
-      set(${VAR} 1 CACHE INTERNAL "Test ${VAR}")
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_PASS "Success")
-      endif()
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-        "Performing Objective-C SOURCE FILE Test ${VAR} succeeded with the following output:\n"
-        "${OUTPUT}\n"
-        "Source file was:\n${SOURCE}\n")
-    else()
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_FAIL "Failed")
-      endif()
-      set(${VAR} "" CACHE INTERNAL "Test ${VAR}")
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-        "Performing Objective-C SOURCE FILE Test ${VAR} failed with the following output:\n"
-        "${OUTPUT}\n"
-        "Source file was:\n${SOURCE}\n")
-    endif()
-  endif()
-endmacro()
diff --git a/share/cmake-3.18/Modules/CheckOBJCSourceRuns.cmake b/share/cmake-3.18/Modules/CheckOBJCSourceRuns.cmake
deleted file mode 100644
index 6684693..0000000
--- a/share/cmake-3.18/Modules/CheckOBJCSourceRuns.cmake
+++ /dev/null
@@ -1,145 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckOBJCSourceRuns
--------------------
-
-Check if given Objective-C source compiles and links into an executable and can
-subsequently be run.
-
-.. command:: check_objc_source_runs
-
-  .. code-block:: cmake
-
-    check_objc_source_runs(<code> <resultVar>)
-
-  Check that the source supplied in ``<code>`` can be compiled as a Objective-C source
-  file, linked as an executable and then run. The ``<code>`` must contain at
-  least a ``main()`` function. If the ``<code>`` could be built and run
-  successfully, the internal cache variable specified by ``<resultVar>`` will
-  be set to 1, otherwise it will be set to an value that evaluates to boolean
-  false (e.g. an empty string or an error message).
-
-  The underlying check is performed by the :command:`try_run` command. The
-  compile and link commands can be influenced by setting any of the following
-  variables prior to calling ``check_objc_source_runs()``:
-
-  ``CMAKE_REQUIRED_FLAGS``
-    Additional flags to pass to the compiler. Note that the contents of
-    :variable:`CMAKE_OBJC_FLAGS <CMAKE_<LANG>_FLAGS>` and its associated
-    configuration-specific variable are automatically added to the compiler
-    command before the contents of ``CMAKE_REQUIRED_FLAGS``.
-
-  ``CMAKE_REQUIRED_DEFINITIONS``
-    A :ref:`;-list <CMake Language Lists>` of compiler definitions of the form
-    ``-DFOO`` or ``-DFOO=bar``. A definition for the name specified by
-    ``<resultVar>`` will also be added automatically.
-
-  ``CMAKE_REQUIRED_INCLUDES``
-    A :ref:`;-list <CMake Language Lists>` of header search paths to pass to
-    the compiler. These will be the only header search paths used by
-    ``try_run()``, i.e. the contents of the :prop_dir:`INCLUDE_DIRECTORIES`
-    directory property will be ignored.
-
-  ``CMAKE_REQUIRED_LINK_OPTIONS``
-    A :ref:`;-list <CMake Language Lists>` of options to add to the link
-    command (see :command:`try_run` for further details).
-
-  ``CMAKE_REQUIRED_LIBRARIES``
-    A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
-    command. These can be the name of system libraries or they can be
-    :ref:`Imported Targets <Imported Targets>` (see :command:`try_run` for
-    further details).
-
-  ``CMAKE_REQUIRED_QUIET``
-    If this variable evaluates to a boolean true value, all status messages
-    associated with the check will be suppressed.
-
-  The check is only performed once, with the result cached in the variable
-  named by ``<resultVar>``. Every subsequent CMake run will re-use this cached
-  value rather than performing the check again, even if the ``<code>`` changes.
-  In order to force the check to be re-evaluated, the variable named by
-  ``<resultVar>`` must be manually removed from the cache.
-
-#]=======================================================================]
-
-include_guard(GLOBAL)
-
-macro(CHECK_OBJC_SOURCE_RUNS SOURCE VAR)
-  if(NOT DEFINED "${VAR}")
-    set(MACRO_CHECK_FUNCTION_DEFINITIONS
-      "-D${VAR} ${CMAKE_REQUIRED_FLAGS}")
-    if(CMAKE_REQUIRED_LINK_OPTIONS)
-      set(CHECK_OBJC_SOURCE_COMPILES_ADD_LINK_OPTIONS
-        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
-    else()
-      set(CHECK_OBJC_SOURCE_COMPILES_ADD_LINK_OPTIONS)
-    endif()
-    if(CMAKE_REQUIRED_LIBRARIES)
-      set(CHECK_OBJC_SOURCE_COMPILES_ADD_LIBRARIES
-        LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
-    else()
-      set(CHECK_OBJC_SOURCE_COMPILES_ADD_LIBRARIES)
-    endif()
-    if(CMAKE_REQUIRED_INCLUDES)
-      set(CHECK_OBJC_SOURCE_COMPILES_ADD_INCLUDES
-        "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
-    else()
-      set(CHECK_OBJC_SOURCE_COMPILES_ADD_INCLUDES)
-    endif()
-    file(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.m"
-      "${SOURCE}\n")
-
-    if(NOT CMAKE_REQUIRED_QUIET)
-      message(CHECK_START "Performing Test ${VAR}")
-    endif()
-    try_run(${VAR}_EXITCODE ${VAR}_COMPILED
-      ${CMAKE_BINARY_DIR}
-      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.m
-      COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
-      ${CHECK_OBJC_SOURCE_COMPILES_ADD_LINK_OPTIONS}
-      ${CHECK_OBJC_SOURCE_COMPILES_ADD_LIBRARIES}
-      CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
-      -DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH}
-      "${CHECK_OBJC_SOURCE_COMPILES_ADD_INCLUDES}"
-      COMPILE_OUTPUT_VARIABLE OUTPUT
-      RUN_OUTPUT_VARIABLE RUN_OUTPUT)
-    # if it did not compile make the return value fail code of 1
-    if(NOT ${VAR}_COMPILED)
-      set(${VAR}_EXITCODE 1)
-    endif()
-    # if the return value was 0 then it worked
-    if("${${VAR}_EXITCODE}" EQUAL 0)
-      set(${VAR} 1 CACHE INTERNAL "Test ${VAR}")
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_PASS "Success")
-      endif()
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-        "Performing Objective-C SOURCE FILE Test ${VAR} succeeded with the following compile output:\n"
-        "${OUTPUT}\n"
-        "...and run output:\n"
-        "${RUN_OUTPUT}\n"
-        "Return value: ${${VAR}}\n"
-        "Source file was:\n${SOURCE}\n")
-    else()
-      if(CMAKE_CROSSCOMPILING AND "${${VAR}_EXITCODE}" MATCHES  "FAILED_TO_RUN")
-        set(${VAR} "${${VAR}_EXITCODE}")
-      else()
-        set(${VAR} "" CACHE INTERNAL "Test ${VAR}")
-      endif()
-
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_FAIL "Failed")
-      endif()
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-        "Performing Objective-C SOURCE FILE Test ${VAR} failed with the following compile output:\n"
-        "${OUTPUT}\n"
-        "...and run output:\n"
-        "${RUN_OUTPUT}\n"
-        "Return value: ${${VAR}_EXITCODE}\n"
-        "Source file was:\n${SOURCE}\n")
-
-    endif()
-  endif()
-endmacro()
diff --git a/share/cmake-3.18/Modules/CheckOBJCXXCompilerFlag.cmake b/share/cmake-3.18/Modules/CheckOBJCXXCompilerFlag.cmake
deleted file mode 100644
index c32741b..0000000
--- a/share/cmake-3.18/Modules/CheckOBJCXXCompilerFlag.cmake
+++ /dev/null
@@ -1,64 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckOBJCXXCompilerFlag
------------------------
-
-Check whether the Objective-C++ compiler supports a given flag.
-
-.. command:: check_objcxx_compiler_flag
-
-  .. code-block:: cmake
-
-    check_objcxx_compiler_flag(<flag> <var>)
-
-  Check that the ``<flag>`` is accepted by the compiler without
-  a diagnostic.  Stores the result in an internal cache entry
-  named ``<var>``.
-
-This command temporarily sets the ``CMAKE_REQUIRED_DEFINITIONS`` variable
-and calls the ``check_objcxx_source_compiles`` macro from the
-:module:`CheckOBJCXXSourceCompiles` module.  See documentation of that
-module for a listing of variables that can otherwise modify the build.
-
-A positive result from this check indicates only that the compiler did not
-issue a diagnostic message when given the flag.  Whether the flag has any
-effect or even a specific one is beyond the scope of this module.
-
-.. note::
-  Since the :command:`try_compile` command forwards flags from variables
-  like :variable:`CMAKE_OBJCXX_FLAGS <CMAKE_<LANG>_FLAGS>`, unknown flags
-  in such variables may cause a false negative for this check.
-#]=======================================================================]
-
-include_guard(GLOBAL)
-include(CheckOBJCXXSourceCompiles)
-include(CMakeCheckCompilerFlagCommonPatterns)
-
-macro (CHECK_OBJCXX_COMPILER_FLAG _FLAG _RESULT)
-  set(SAFE_CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS}")
-  set(CMAKE_REQUIRED_DEFINITIONS "${_FLAG}")
-
-  # Normalize locale during test compilation.
-  set(_CheckOBJCXXCompilerFlag_LOCALE_VARS LC_ALL LC_MESSAGES LANG)
-  foreach(v ${_CheckOBJCXXCompilerFlag_LOCALE_VARS})
-    set(_CheckOBJCXXCompilerFlag_SAVED_${v} "$ENV{${v}}")
-    set(ENV{${v}} OBJCXX)
-  endforeach()
-  CHECK_COMPILER_FLAG_COMMON_PATTERNS(_CheckOBJCXXCompilerFlag_COMMON_PATTERNS)
-  CHECK_OBJCXX_SOURCE_COMPILES("#ifndef __OBJC__\n#  error \"Not an Objective-C++ compiler\"\n#endif\nint main(void) { return 0; }" ${_RESULT}
-    # Some compilers do not fail with a bad flag
-    FAIL_REGEX "command line option .* is valid for .* but not for Objective-C\\\\+\\\\+" # GNU
-    FAIL_REGEX "argument unused during compilation: .*" # Clang
-    ${_CheckOBJCXXCompilerFlag_COMMON_PATTERNS}
-    )
-  foreach(v ${_CheckOBJCXXCompilerFlag_LOCALE_VARS})
-    set(ENV{${v}} ${_CheckOBJCXXCompilerFlag_SAVED_${v}})
-    unset(_CheckOBJCXXCompilerFlag_SAVED_${v})
-  endforeach()
-  unset(_CheckOBJCXXCompilerFlag_LOCALE_VARS)
-  unset(_CheckOBJCXXCompilerFlag_COMMON_PATTERNS)
-
-  set (CMAKE_REQUIRED_DEFINITIONS "${SAFE_CMAKE_REQUIRED_DEFINITIONS}")
-endmacro ()
diff --git a/share/cmake-3.18/Modules/CheckOBJCXXSourceCompiles.cmake b/share/cmake-3.18/Modules/CheckOBJCXXSourceCompiles.cmake
deleted file mode 100644
index 2ee79f4..0000000
--- a/share/cmake-3.18/Modules/CheckOBJCXXSourceCompiles.cmake
+++ /dev/null
@@ -1,146 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckOBJCXXSourceCompiles
--------------------------
-
-Check if given Objective-C++ source compiles and links into an executable.
-
-.. command:: check_objcxx_source_compiles
-
-  .. code-block:: cmake
-
-    check_objcxx_source_compiles(<code> <resultVar>
-                                 [FAIL_REGEX <regex1> [<regex2>...]])
-
-  Check that the source supplied in ``<code>`` can be compiled as a Objective-C++ source
-  file and linked as an executable (so it must contain at least a ``main()``
-  function). The result will be stored in the internal cache variable specified
-  by ``<resultVar>``, with a boolean true value for success and boolean false
-  for failure. If ``FAIL_REGEX`` is provided, then failure is determined by
-  checking if anything in the output matches any of the specified regular
-  expressions.
-
-  The underlying check is performed by the :command:`try_compile` command. The
-  compile and link commands can be influenced by setting any of the following
-  variables prior to calling ``check_objcxx_source_compiles()``:
-
-  ``CMAKE_REQUIRED_FLAGS``
-    Additional flags to pass to the compiler. Note that the contents of
-    :variable:`CMAKE_OBJCXX_FLAGS <CMAKE_<LANG>_FLAGS>` and its associated
-    configuration-specific variable are automatically added to the compiler
-    command before the contents of ``CMAKE_REQUIRED_FLAGS``.
-
-  ``CMAKE_REQUIRED_DEFINITIONS``
-    A :ref:`;-list <CMake Language Lists>` of compiler definitions of the form
-    ``-DFOO`` or ``-DFOO=bar``. A definition for the name specified by
-    ``<resultVar>`` will also be added automatically.
-
-  ``CMAKE_REQUIRED_INCLUDES``
-    A :ref:`;-list <CMake Language Lists>` of header search paths to pass to
-    the compiler. These will be the only header search paths used by
-    ``try_compile()``, i.e. the contents of the :prop_dir:`INCLUDE_DIRECTORIES`
-    directory property will be ignored.
-
-  ``CMAKE_REQUIRED_LINK_OPTIONS``
-    A :ref:`;-list <CMake Language Lists>` of options to add to the link
-    command (see :command:`try_compile` for further details).
-
-  ``CMAKE_REQUIRED_LIBRARIES``
-    A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
-    command. These can be the name of system libraries or they can be
-    :ref:`Imported Targets <Imported Targets>` (see :command:`try_compile` for
-    further details).
-
-  ``CMAKE_REQUIRED_QUIET``
-    If this variable evaluates to a boolean true value, all status messages
-    associated with the check will be suppressed.
-
-  The check is only performed once, with the result cached in the variable
-  named by ``<resultVar>``. Every subsequent CMake run will re-use this cached
-  value rather than performing the check again, even if the ``<code>`` changes.
-  In order to force the check to be re-evaluated, the variable named by
-  ``<resultVar>`` must be manually removed from the cache.
-
-#]=======================================================================]
-
-include_guard(GLOBAL)
-
-macro(CHECK_OBJCXX_SOURCE_COMPILES SOURCE VAR)
-  if(NOT DEFINED "${VAR}")
-    set(_FAIL_REGEX)
-    set(_key)
-    foreach(arg ${ARGN})
-      if("${arg}" MATCHES "^(FAIL_REGEX)$")
-        set(_key "${arg}")
-      elseif(_key)
-        list(APPEND _${_key} "${arg}")
-      else()
-        message(FATAL_ERROR "Unknown argument:\n  ${arg}\n")
-      endif()
-    endforeach()
-
-    set(MACRO_CHECK_FUNCTION_DEFINITIONS
-      "-D${VAR} ${CMAKE_REQUIRED_FLAGS}")
-    if(CMAKE_REQUIRED_LINK_OPTIONS)
-      set(CHECK_OBJCXX_SOURCE_COMPILES_ADD_LINK_OPTIONS
-        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
-    else()
-      set(CHECK_OBJCXX_SOURCE_COMPILES_ADD_LINK_OPTIONS)
-    endif()
-    if(CMAKE_REQUIRED_LIBRARIES)
-      set(CHECK_OBJCXX_SOURCE_COMPILES_ADD_LIBRARIES
-        LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
-    else()
-      set(CHECK_OBJCXX_SOURCE_COMPILES_ADD_LIBRARIES)
-    endif()
-    if(CMAKE_REQUIRED_INCLUDES)
-      set(CHECK_OBJCXX_SOURCE_COMPILES_ADD_INCLUDES
-        "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
-    else()
-      set(CHECK_OBJCXX_SOURCE_COMPILES_ADD_INCLUDES)
-    endif()
-    file(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.mm"
-      "${SOURCE}\n")
-
-    if(NOT CMAKE_REQUIRED_QUIET)
-      message(CHECK_START "Performing Test ${VAR}")
-    endif()
-    try_compile(${VAR}
-      ${CMAKE_BINARY_DIR}
-      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.mm
-      COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
-      ${CHECK_OBJCXX_SOURCE_COMPILES_ADD_LINK_OPTIONS}
-      ${CHECK_OBJCXX_SOURCE_COMPILES_ADD_LIBRARIES}
-      CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
-      "${CHECK_OBJCXX_SOURCE_COMPILES_ADD_INCLUDES}"
-      OUTPUT_VARIABLE OUTPUT)
-
-    foreach(_regex ${_FAIL_REGEX})
-      if("${OUTPUT}" MATCHES "${_regex}")
-        set(${VAR} 0)
-      endif()
-    endforeach()
-
-    if(${VAR})
-      set(${VAR} 1 CACHE INTERNAL "Test ${VAR}")
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_PASS "Success")
-      endif()
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-        "Performing Objective-C++ SOURCE FILE Test ${VAR} succeeded with the following output:\n"
-        "${OUTPUT}\n"
-        "Source file was:\n${SOURCE}\n")
-    else()
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_FAIL "Failed")
-      endif()
-      set(${VAR} "" CACHE INTERNAL "Test ${VAR}")
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-        "Performing Objective-C++ SOURCE FILE Test ${VAR} failed with the following output:\n"
-        "${OUTPUT}\n"
-        "Source file was:\n${SOURCE}\n")
-    endif()
-  endif()
-endmacro()
diff --git a/share/cmake-3.18/Modules/CheckOBJCXXSourceRuns.cmake b/share/cmake-3.18/Modules/CheckOBJCXXSourceRuns.cmake
deleted file mode 100644
index 7f7e04f..0000000
--- a/share/cmake-3.18/Modules/CheckOBJCXXSourceRuns.cmake
+++ /dev/null
@@ -1,145 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckOBJCXXSourceRuns
----------------------
-
-Check if given Objective-C++ source compiles and links into an executable and can
-subsequently be run.
-
-.. command:: check_objcxx_source_runs
-
-  .. code-block:: cmake
-
-    check_objcxx_source_runs(<code> <resultVar>)
-
-  Check that the source supplied in ``<code>`` can be compiled as a Objective-C++ source
-  file, linked as an executable and then run. The ``<code>`` must contain at
-  least a ``main()`` function. If the ``<code>`` could be built and run
-  successfully, the internal cache variable specified by ``<resultVar>`` will
-  be set to 1, otherwise it will be set to an value that evaluates to boolean
-  false (e.g. an empty string or an error message).
-
-  The underlying check is performed by the :command:`try_run` command. The
-  compile and link commands can be influenced by setting any of the following
-  variables prior to calling ``check_objcxx_source_runs()``:
-
-  ``CMAKE_REQUIRED_FLAGS``
-    Additional flags to pass to the compiler. Note that the contents of
-    :variable:`CMAKE_OBJCXX_FLAGS <CMAKE_<LANG>_FLAGS>` and its associated
-    configuration-specific variable are automatically added to the compiler
-    command before the contents of ``CMAKE_REQUIRED_FLAGS``.
-
-  ``CMAKE_REQUIRED_DEFINITIONS``
-    A :ref:`;-list <CMake Language Lists>` of compiler definitions of the form
-    ``-DFOO`` or ``-DFOO=bar``. A definition for the name specified by
-    ``<resultVar>`` will also be added automatically.
-
-  ``CMAKE_REQUIRED_INCLUDES``
-    A :ref:`;-list <CMake Language Lists>` of header search paths to pass to
-    the compiler. These will be the only header search paths used by
-    ``try_run()``, i.e. the contents of the :prop_dir:`INCLUDE_DIRECTORIES`
-    directory property will be ignored.
-
-  ``CMAKE_REQUIRED_LINK_OPTIONS``
-    A :ref:`;-list <CMake Language Lists>` of options to add to the link
-    command (see :command:`try_run` for further details).
-
-  ``CMAKE_REQUIRED_LIBRARIES``
-    A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
-    command. These can be the name of system libraries or they can be
-    :ref:`Imported Targets <Imported Targets>` (see :command:`try_run` for
-    further details).
-
-  ``CMAKE_REQUIRED_QUIET``
-    If this variable evaluates to a boolean true value, all status messages
-    associated with the check will be suppressed.
-
-  The check is only performed once, with the result cached in the variable
-  named by ``<resultVar>``. Every subsequent CMake run will re-use this cached
-  value rather than performing the check again, even if the ``<code>`` changes.
-  In order to force the check to be re-evaluated, the variable named by
-  ``<resultVar>`` must be manually removed from the cache.
-
-#]=======================================================================]
-
-include_guard(GLOBAL)
-
-macro(CHECK_OBJCXX_SOURCE_RUNS SOURCE VAR)
-  if(NOT DEFINED "${VAR}")
-    set(MACRO_CHECK_FUNCTION_DEFINITIONS
-      "-D${VAR} ${CMAKE_REQUIRED_FLAGS}")
-    if(CMAKE_REQUIRED_LINK_OPTIONS)
-      set(CHECK_OBJCXX_SOURCE_COMPILES_ADD_LINK_OPTIONS
-        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
-    else()
-      set(CHECK_OBJCXX_SOURCE_COMPILES_ADD_LINK_OPTIONS)
-    endif()
-    if(CMAKE_REQUIRED_LIBRARIES)
-      set(CHECK_OBJCXX_SOURCE_COMPILES_ADD_LIBRARIES
-        LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
-    else()
-      set(CHECK_OBJCXX_SOURCE_COMPILES_ADD_LIBRARIES)
-    endif()
-    if(CMAKE_REQUIRED_INCLUDES)
-      set(CHECK_OBJCXX_SOURCE_COMPILES_ADD_INCLUDES
-        "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
-    else()
-      set(CHECK_OBJCXX_SOURCE_COMPILES_ADD_INCLUDES)
-    endif()
-    file(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.mm"
-      "${SOURCE}\n")
-
-    if(NOT CMAKE_REQUIRED_QUIET)
-      message(CHECK_START "Performing Test ${VAR}")
-    endif()
-    try_run(${VAR}_EXITCODE ${VAR}_COMPILED
-      ${CMAKE_BINARY_DIR}
-      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.mm
-      COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
-      ${CHECK_OBJCXX_SOURCE_COMPILES_ADD_LINK_OPTIONS}
-      ${CHECK_OBJCXX_SOURCE_COMPILES_ADD_LIBRARIES}
-      CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
-      -DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH}
-      "${CHECK_OBJCXX_SOURCE_COMPILES_ADD_INCLUDES}"
-      COMPILE_OUTPUT_VARIABLE OUTPUT
-      RUN_OUTPUT_VARIABLE RUN_OUTPUT)
-
-    # if it did not compile make the return value fail code of 1
-    if(NOT ${VAR}_COMPILED)
-      set(${VAR}_EXITCODE 1)
-    endif()
-    # if the return value was 0 then it worked
-    if("${${VAR}_EXITCODE}" EQUAL 0)
-      set(${VAR} 1 CACHE INTERNAL "Test ${VAR}")
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_PASS "Success")
-      endif()
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-        "Performing Objective-C++ SOURCE FILE Test ${VAR} succeeded with the following output:\n"
-        "${OUTPUT}\n"
-        "...and run output:\n"
-        "${RUN_OUTPUT}\n"
-        "Return value: ${${VAR}}\n"
-        "Source file was:\n${SOURCE}\n")
-    else()
-      if(CMAKE_CROSSCOMPILING AND "${${VAR}_EXITCODE}" MATCHES  "FAILED_TO_RUN")
-        set(${VAR} "${${VAR}_EXITCODE}")
-      else()
-        set(${VAR} "" CACHE INTERNAL "Test ${VAR}")
-      endif()
-
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_FAIL "Failed")
-      endif()
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-        "Performing Objective-C++ SOURCE FILE Test ${VAR} failed with the following output:\n"
-        "${OUTPUT}\n"
-        "...and run output:\n"
-        "${RUN_OUTPUT}\n"
-        "Return value: ${${VAR}_EXITCODE}\n"
-        "Source file was:\n${SOURCE}\n")
-    endif()
-  endif()
-endmacro()
diff --git a/share/cmake-3.18/Modules/CheckPIESupported.cmake b/share/cmake-3.18/Modules/CheckPIESupported.cmake
deleted file mode 100644
index 6d63f0b..0000000
--- a/share/cmake-3.18/Modules/CheckPIESupported.cmake
+++ /dev/null
@@ -1,134 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckPIESupported
------------------
-
-Check whether the linker supports Position Independent Code (PIE) or No
-Position Independent Code (NO_PIE) for executables.
-Use this to ensure that the :prop_tgt:`POSITION_INDEPENDENT_CODE` target
-property for executables will be honored at link time.
-
-.. command:: check_pie_supported
-
-  ::
-
-    check_pie_supported([OUTPUT_VARIABLE <output>]
-                        [LANGUAGES <lang>...])
-
-  Options are:
-
-  ``OUTPUT_VARIABLE <output>``
-    Set ``<output>`` variable with details about any error.
-  ``LANGUAGES <lang>...``
-    Check the linkers used for each of the specified languages.
-    Supported languages are ``C``, ``CXX``, and ``Fortran``.
-
-It makes no sense to use this module when :policy:`CMP0083` is set to ``OLD``,
-so the command will return an error in this case.  See policy :policy:`CMP0083`
-for details.
-
-Variables
-^^^^^^^^^
-
-For each language checked, two boolean cache variables are defined.
-
- ``CMAKE_<lang>_LINK_PIE_SUPPORTED``
-   Set to ``YES`` if ``PIE`` is supported by the linker and ``NO`` otherwise.
- ``CMAKE_<lang>_LINK_NO_PIE_SUPPORTED``
-   Set to ``YES`` if ``NO_PIE`` is supported by the linker and ``NO`` otherwise.
-
-Examples
-^^^^^^^^
-
-.. code-block:: cmake
-
-  check_pie_supported()
-  set_property(TARGET foo PROPERTY POSITION_INDEPENDENT_CODE TRUE)
-
-.. code-block:: cmake
-
-  # Retrieve any error message.
-  check_pie_supported(OUTPUT_VARIABLE output LANGUAGES C)
-  set_property(TARGET foo PROPERTY POSITION_INDEPENDENT_CODE TRUE)
-  if(NOT CMAKE_C_LINK_PIE_SUPPORTED)
-    message(WARNING "PIE is not supported at link time: ${output}.\n"
-                    "PIE link options will not be passed to linker.")
-  endif()
-
-#]=======================================================================]
-
-
-include (Internal/CMakeCheckCompilerFlag)
-
-function (check_pie_supported)
-  cmake_policy(GET CMP0083 cmp0083)
-
-  if (NOT cmp0083)
-    message(FATAL_ERROR "check_pie_supported: Policy CMP0083 is not set")
-  endif()
-
-  if(cmp0083 STREQUAL "OLD")
-    message(FATAL_ERROR "check_pie_supported: Policy CMP0083 set to OLD")
-  endif()
-
-  set(optional)
-  set(one OUTPUT_VARIABLE)
-  set(multiple LANGUAGES)
-
-  cmake_parse_arguments(CHECK_PIE "${optional}" "${one}" "${multiple}" "${ARGN}")
-  if(CHECK_PIE_UNPARSED_ARGUMENTS)
-    message(FATAL_ERROR "check_pie_supported: Unparsed arguments: ${CHECK_PIE_UNPARSED_ARGUMENTS}")
-  endif()
-
-  if (CHECK_PIE_LANGUAGES)
-    set (unsupported_languages "${CHECK_PIE_LANGUAGES}")
-    list (REMOVE_ITEM unsupported_languages "C" "CXX" "Fortran")
-    if(unsupported_languages)
-      message(FATAL_ERROR "check_pie_supported: language(s) '${unsupported_languages}' not supported")
-    endif()
-  else()
-    # User did not set any languages, use defaults
-    get_property (enabled_languages GLOBAL PROPERTY ENABLED_LANGUAGES)
-    if (NOT enabled_languages)
-      return()
-    endif()
-
-    list (FILTER enabled_languages INCLUDE REGEX "^(C|CXX|Fortran)$")
-    if (NOT enabled_languages)
-      return()
-    endif()
-
-    set (CHECK_PIE_LANGUAGES ${enabled_languages})
-  endif()
-
-  set (outputs)
-
-  foreach(lang IN LISTS CHECK_PIE_LANGUAGES)
-    if(_CMAKE_${lang}_PIE_MAY_BE_SUPPORTED_BY_LINKER)
-      cmake_check_compiler_flag(${lang} "${CMAKE_${lang}_LINK_OPTIONS_PIE}"
-                                CMAKE_${lang}_LINK_PIE_SUPPORTED
-                                OUTPUT_VARIABLE output)
-      if (NOT CMAKE_${lang}_LINK_PIE_SUPPORTED)
-        string (APPEND outputs "PIE (${lang}): ${output}\n")
-      endif()
-
-      cmake_check_compiler_flag(${lang} "${CMAKE_${lang}_LINK_OPTIONS_NO_PIE}"
-                                CMAKE_${lang}_LINK_NO_PIE_SUPPORTED
-                                OUTPUT_VARIABLE output)
-      if (NOT CMAKE_${lang}_LINK_NO_PIE_SUPPORTED)
-        string (APPEND outputs "NO_PIE (${lang}): ${output}\n")
-      endif()
-    else()
-      # no support at link time. Set cache variables to NO
-      set(CMAKE_${lang}_LINK_PIE_SUPPORTED NO CACHE INTERNAL "PIE (${lang})")
-      set(CMAKE_${lang}_LINK_NO_PIE_SUPPORTED NO CACHE INTERNAL "NO_PIE (${lang})")
-      string (APPEND outputs "PIE and NO_PIE are not supported by linker for ${lang}")
-    endif()
-  endforeach()
-
-  if (CHECK_PIE_OUTPUT_VARIABLE)
-    set (${CHECK_PIE_OUTPUT_VARIABLE} "${outputs}" PARENT_SCOPE)
-  endif()
-endfunction()
diff --git a/share/cmake-3.18/Modules/CheckPrototypeDefinition.cmake b/share/cmake-3.18/Modules/CheckPrototypeDefinition.cmake
deleted file mode 100644
index 8b06403..0000000
--- a/share/cmake-3.18/Modules/CheckPrototypeDefinition.cmake
+++ /dev/null
@@ -1,125 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckPrototypeDefinition
-------------------------
-
-Check if the prototype we expect is correct.
-
-.. command:: check_prototype_definition
-
-  .. code-block:: cmake
-
-    check_prototype_definition(FUNCTION PROTOTYPE RETURN HEADER VARIABLE)
-
-  ::
-
-    FUNCTION - The name of the function (used to check if prototype exists)
-    PROTOTYPE- The prototype to check.
-    RETURN - The return value of the function.
-    HEADER - The header files required.
-    VARIABLE - The variable to store the result.
-               Will be created as an internal cache variable.
-
-  Example:
-
-  .. code-block:: cmake
-
-    check_prototype_definition(getpwent_r
-     "struct passwd *getpwent_r(struct passwd *src, char *buf, int buflen)"
-     "NULL"
-     "unistd.h;pwd.h"
-     SOLARIS_GETPWENT_R)
-
-The following variables may be set before calling this function to modify
-the way the check is run:
-
-::
-
-  CMAKE_REQUIRED_FLAGS = string of compile command line flags
-  CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
-  CMAKE_REQUIRED_INCLUDES = list of include directories
-  CMAKE_REQUIRED_LINK_OPTIONS = list of options to pass to link command
-  CMAKE_REQUIRED_LIBRARIES = list of libraries to link
-  CMAKE_REQUIRED_QUIET = execute quietly without messages
-#]=======================================================================]
-
-#
-
-get_filename_component(__check_proto_def_dir "${CMAKE_CURRENT_LIST_FILE}" PATH)
-
-include_guard(GLOBAL)
-
-function(check_prototype_definition _FUNCTION _PROTOTYPE _RETURN _HEADER _VARIABLE)
-
-  if (NOT DEFINED ${_VARIABLE})
-    if(NOT CMAKE_REQUIRED_QUIET)
-      message(CHECK_START "Checking prototype ${_FUNCTION} for ${_VARIABLE}")
-    endif()
-    set(CHECK_PROTOTYPE_DEFINITION_CONTENT "/* */\n")
-
-    set(CHECK_PROTOTYPE_DEFINITION_FLAGS ${CMAKE_REQUIRED_FLAGS})
-    if (CMAKE_REQUIRED_LINK_OPTIONS)
-      set(CHECK_PROTOTYPE_DEFINITION_LINK_OPTIONS
-        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
-    else()
-      set(CHECK_PROTOTYPE_DEFINITION_LINK_OPTIONS)
-    endif()
-    if (CMAKE_REQUIRED_LIBRARIES)
-      set(CHECK_PROTOTYPE_DEFINITION_LIBS
-        LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
-    else()
-      set(CHECK_PROTOTYPE_DEFINITION_LIBS)
-    endif()
-    if (CMAKE_REQUIRED_INCLUDES)
-      set(CMAKE_SYMBOL_EXISTS_INCLUDES
-        "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
-    else()
-      set(CMAKE_SYMBOL_EXISTS_INCLUDES)
-    endif()
-
-    foreach(_FILE ${_HEADER})
-      string(APPEND CHECK_PROTOTYPE_DEFINITION_HEADER
-        "#include <${_FILE}>\n")
-    endforeach()
-
-    set(CHECK_PROTOTYPE_DEFINITION_SYMBOL ${_FUNCTION})
-    set(CHECK_PROTOTYPE_DEFINITION_PROTO ${_PROTOTYPE})
-    set(CHECK_PROTOTYPE_DEFINITION_RETURN ${_RETURN})
-
-    configure_file("${__check_proto_def_dir}/CheckPrototypeDefinition.c.in"
-      "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckPrototypeDefinition.c" @ONLY)
-
-    file(READ ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckPrototypeDefinition.c _SOURCE)
-
-    try_compile(${_VARIABLE}
-      ${CMAKE_BINARY_DIR}
-      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckPrototypeDefinition.c
-      COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
-      ${CHECK_PROTOTYPE_DEFINITION_LINK_OPTIONS}
-      ${CHECK_PROTOTYPE_DEFINITION_LIBS}
-      CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CHECK_PROTOTYPE_DEFINITION_FLAGS}
-      "${CMAKE_SYMBOL_EXISTS_INCLUDES}"
-      OUTPUT_VARIABLE OUTPUT)
-
-    if (${_VARIABLE})
-      set(${_VARIABLE} 1 CACHE INTERNAL "Have correct prototype for ${_FUNCTION}")
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_PASS "True")
-      endif()
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-        "Determining if the prototype ${_FUNCTION} exists for ${_VARIABLE} passed with the following output:\n"
-        "${OUTPUT}\n\n")
-    else ()
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_FAIL "False")
-      endif()
-      set(${_VARIABLE} 0 CACHE INTERNAL "Have correct prototype for ${_FUNCTION}")
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-        "Determining if the prototype ${_FUNCTION} exists for ${_VARIABLE} failed with the following output:\n"
-        "${OUTPUT}\n\n${_SOURCE}\n\n")
-    endif ()
-  endif()
-
-endfunction()
diff --git a/share/cmake-3.18/Modules/CheckStructHasMember.cmake b/share/cmake-3.18/Modules/CheckStructHasMember.cmake
deleted file mode 100644
index 842a8fd..0000000
--- a/share/cmake-3.18/Modules/CheckStructHasMember.cmake
+++ /dev/null
@@ -1,82 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckStructHasMember
---------------------
-
-Check if the given struct or class has the specified member variable
-
-.. command:: CHECK_STRUCT_HAS_MEMBER
-
-  .. code-block:: cmake
-
-    CHECK_STRUCT_HAS_MEMBER(<struct> <member> <header> <variable>
-                            [LANGUAGE <language>])
-
-  ::
-
-    <struct> - the name of the struct or class you are interested in
-    <member> - the member which existence you want to check
-    <header> - the header(s) where the prototype should be declared
-    <variable> - variable to store the result
-    <language> - the compiler to use (C or CXX)
-
-
-
-The following variables may be set before calling this macro to modify
-the way the check is run:
-
-::
-
-  CMAKE_REQUIRED_FLAGS = string of compile command line flags
-  CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
-  CMAKE_REQUIRED_INCLUDES = list of include directories
-  CMAKE_REQUIRED_LINK_OPTIONS = list of options to pass to link command
-  CMAKE_REQUIRED_LIBRARIES = list of libraries to link
-  CMAKE_REQUIRED_QUIET = execute quietly without messages
-
-
-Example:
-
-.. code-block:: cmake
-
-  CHECK_STRUCT_HAS_MEMBER("struct timeval" tv_sec sys/select.h
-                          HAVE_TIMEVAL_TV_SEC LANGUAGE C)
-#]=======================================================================]
-
-include_guard(GLOBAL)
-include(CheckCSourceCompiles)
-include(CheckCXXSourceCompiles)
-
-macro (CHECK_STRUCT_HAS_MEMBER _STRUCT _MEMBER _HEADER _RESULT)
-  set(_INCLUDE_FILES)
-  foreach (it ${_HEADER})
-    string(APPEND _INCLUDE_FILES "#include <${it}>\n")
-  endforeach ()
-
-  if("x${ARGN}" STREQUAL "x")
-    set(_lang C)
-  elseif("x${ARGN}" MATCHES "^xLANGUAGE;([a-zA-Z]+)$")
-    set(_lang "${CMAKE_MATCH_1}")
-  else()
-    message(FATAL_ERROR "Unknown arguments:\n  ${ARGN}\n")
-  endif()
-
-  set(_CHECK_STRUCT_MEMBER_SOURCE_CODE "
-${_INCLUDE_FILES}
-int main()
-{
-  (void)sizeof(((${_STRUCT} *)0)->${_MEMBER});
-  return 0;
-}
-")
-
-  if("${_lang}" STREQUAL "C")
-    CHECK_C_SOURCE_COMPILES("${_CHECK_STRUCT_MEMBER_SOURCE_CODE}" ${_RESULT})
-  elseif("${_lang}" STREQUAL "CXX")
-    CHECK_CXX_SOURCE_COMPILES("${_CHECK_STRUCT_MEMBER_SOURCE_CODE}" ${_RESULT})
-  else()
-    message(FATAL_ERROR "Unknown language:\n  ${_lang}\nSupported languages: C, CXX.\n")
-  endif()
-endmacro ()
diff --git a/share/cmake-3.18/Modules/CheckSymbolExists.cmake b/share/cmake-3.18/Modules/CheckSymbolExists.cmake
deleted file mode 100644
index 4f202c4..0000000
--- a/share/cmake-3.18/Modules/CheckSymbolExists.cmake
+++ /dev/null
@@ -1,166 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckSymbolExists
------------------
-
-Provides a macro to check if a symbol exists as a function, variable,
-or macro in ``C``.
-
-.. command:: check_symbol_exists
-
-  .. code-block:: cmake
-
-    check_symbol_exists(<symbol> <files> <variable>)
-
-  Check that the ``<symbol>`` is available after including given header
-  ``<files>`` and store the result in a ``<variable>``.  Specify the list
-  of files in one argument as a semicolon-separated list.
-  ``<variable>`` will be created as an internal cache variable.
-
-If the header files define the symbol as a macro it is considered
-available and assumed to work.  If the header files declare the symbol
-as a function or variable then the symbol must also be available for
-linking (so intrinsics may not be detected).
-If the symbol is a type, enum value, or intrinsic it will not be recognized
-(consider using :module:`CheckTypeSize` or :module:`CheckCSourceCompiles`).
-If the check needs to be done in C++, consider using
-:module:`CheckCXXSymbolExists` instead.
-
-The following variables may be set before calling this macro to modify
-the way the check is run:
-
-``CMAKE_REQUIRED_FLAGS``
-  string of compile command line flags.
-``CMAKE_REQUIRED_DEFINITIONS``
-  a :ref:`;-list <CMake Language Lists>` of macros to define (-DFOO=bar).
-``CMAKE_REQUIRED_INCLUDES``
-  a :ref:`;-list <CMake Language Lists>` of header search paths to pass to
-  the compiler.
-``CMAKE_REQUIRED_LINK_OPTIONS``
-  a :ref:`;-list <CMake Language Lists>` of options to add to the link command.
-``CMAKE_REQUIRED_LIBRARIES``
-  a :ref:`;-list <CMake Language Lists>` of libraries to add to the link
-  command. See policy :policy:`CMP0075`.
-``CMAKE_REQUIRED_QUIET``
-  execute quietly without messages.
-
-For example:
-
-.. code-block:: cmake
-
-  include(CheckSymbolExists)
-
-  # Check for macro SEEK_SET
-  check_symbol_exists(SEEK_SET "stdio.h" HAVE_SEEK_SET)
-  # Check for function fopen
-  check_symbol_exists(fopen "stdio.h" HAVE_FOPEN)
-#]=======================================================================]
-
-include_guard(GLOBAL)
-
-cmake_policy(PUSH)
-cmake_policy(SET CMP0054 NEW) # if() quoted variables not dereferenced
-
-macro(CHECK_SYMBOL_EXISTS SYMBOL FILES VARIABLE)
-  if(CMAKE_C_COMPILER_LOADED)
-    __CHECK_SYMBOL_EXISTS_IMPL("${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckSymbolExists.c" "${SYMBOL}" "${FILES}" "${VARIABLE}" )
-  elseif(CMAKE_CXX_COMPILER_LOADED)
-    __CHECK_SYMBOL_EXISTS_IMPL("${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckSymbolExists.cxx" "${SYMBOL}" "${FILES}" "${VARIABLE}" )
-  else()
-    message(FATAL_ERROR "CHECK_SYMBOL_EXISTS needs either C or CXX language enabled")
-  endif()
-endmacro()
-
-macro(__CHECK_SYMBOL_EXISTS_IMPL SOURCEFILE SYMBOL FILES VARIABLE)
-  if(NOT DEFINED "${VARIABLE}" OR "x${${VARIABLE}}" STREQUAL "x${VARIABLE}")
-    set(CMAKE_CONFIGURABLE_FILE_CONTENT "/* */\n")
-    set(MACRO_CHECK_SYMBOL_EXISTS_FLAGS ${CMAKE_REQUIRED_FLAGS})
-    if(CMAKE_REQUIRED_LINK_OPTIONS)
-      set(CHECK_SYMBOL_EXISTS_LINK_OPTIONS
-        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
-    else()
-      set(CHECK_SYMBOL_EXISTS_LINK_OPTIONS)
-    endif()
-    if(CMAKE_REQUIRED_LIBRARIES)
-      set(CHECK_SYMBOL_EXISTS_LIBS
-        LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
-    else()
-      set(CHECK_SYMBOL_EXISTS_LIBS)
-    endif()
-    if(CMAKE_REQUIRED_INCLUDES)
-      set(CMAKE_SYMBOL_EXISTS_INCLUDES
-        "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
-    else()
-      set(CMAKE_SYMBOL_EXISTS_INCLUDES)
-    endif()
-    foreach(FILE ${FILES})
-      string(APPEND CMAKE_CONFIGURABLE_FILE_CONTENT
-        "#include <${FILE}>\n")
-    endforeach()
-    string(APPEND CMAKE_CONFIGURABLE_FILE_CONTENT "
-int main(int argc, char** argv)
-{
-  (void)argv;")
-    set(_CSE_CHECK_NON_MACRO "return ((int*)(&${SYMBOL}))[argc];")
-    if("${SYMBOL}" MATCHES "^[a-zA-Z_][a-zA-Z0-9_]*$")
-      # The SYMBOL has a legal macro name.  Test whether it exists as a macro.
-      string(APPEND CMAKE_CONFIGURABLE_FILE_CONTENT "
-#ifndef ${SYMBOL}
-  ${_CSE_CHECK_NON_MACRO}
-#else
-  (void)argc;
-  return 0;
-#endif")
-    else()
-      # The SYMBOL cannot be a macro (e.g., a template function).
-      string(APPEND CMAKE_CONFIGURABLE_FILE_CONTENT "
-  ${_CSE_CHECK_NON_MACRO}")
-    endif()
-    string(APPEND CMAKE_CONFIGURABLE_FILE_CONTENT "
-}")
-    unset(_CSE_CHECK_NON_MACRO)
-
-    configure_file("${CMAKE_ROOT}/Modules/CMakeConfigurableFile.in"
-      "${SOURCEFILE}" @ONLY)
-
-    if(NOT CMAKE_REQUIRED_QUIET)
-      message(CHECK_START "Looking for ${SYMBOL}")
-    endif()
-    try_compile(${VARIABLE}
-      ${CMAKE_BINARY_DIR}
-      "${SOURCEFILE}"
-      COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
-      ${CHECK_SYMBOL_EXISTS_LINK_OPTIONS}
-      ${CHECK_SYMBOL_EXISTS_LIBS}
-      CMAKE_FLAGS
-      -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_SYMBOL_EXISTS_FLAGS}
-      "${CMAKE_SYMBOL_EXISTS_INCLUDES}"
-      OUTPUT_VARIABLE OUTPUT)
-    if(${VARIABLE})
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_PASS "found")
-      endif()
-      set(${VARIABLE} 1 CACHE INTERNAL "Have symbol ${SYMBOL}")
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-        "Determining if the ${SYMBOL} "
-        "exist passed with the following output:\n"
-        "${OUTPUT}\nFile ${SOURCEFILE}:\n"
-        "${CMAKE_CONFIGURABLE_FILE_CONTENT}\n")
-    else()
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_FAIL "not found")
-      endif()
-      set(${VARIABLE} "" CACHE INTERNAL "Have symbol ${SYMBOL}")
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-        "Determining if the ${SYMBOL} "
-        "exist failed with the following output:\n"
-        "${OUTPUT}\nFile ${SOURCEFILE}:\n"
-        "${CMAKE_CONFIGURABLE_FILE_CONTENT}\n")
-    endif()
-    unset(CMAKE_CONFIGURABLE_FILE_CONTENT)
-  endif()
-endmacro()
-
-cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/CheckTypeSize.cmake b/share/cmake-3.18/Modules/CheckTypeSize.cmake
deleted file mode 100644
index 2b07b7c..0000000
--- a/share/cmake-3.18/Modules/CheckTypeSize.cmake
+++ /dev/null
@@ -1,270 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckTypeSize
--------------
-
-Check sizeof a type
-
-.. command:: CHECK_TYPE_SIZE
-
-  .. code-block:: cmake
-
-    CHECK_TYPE_SIZE(TYPE VARIABLE [BUILTIN_TYPES_ONLY]
-                                  [LANGUAGE <language>])
-
-  Check if the type exists and determine its size.  On return,
-  ``HAVE_${VARIABLE}`` holds the existence of the type, and ``${VARIABLE}``
-  holds one of the following:
-
-  ::
-
-     <size> = type has non-zero size <size>
-     "0"    = type has arch-dependent size (see below)
-     ""     = type does not exist
-
-  Both ``HAVE_${VARIABLE}`` and ``${VARIABLE}`` will be created as internal
-  cache variables.
-
-  Furthermore, the variable ``${VARIABLE}_CODE`` holds C preprocessor code
-  to define the macro ``${VARIABLE}`` to the size of the type, or leave
-  the macro undefined if the type does not exist.
-
-  The variable ``${VARIABLE}`` may be ``0`` when
-  :variable:`CMAKE_OSX_ARCHITECTURES` has multiple architectures for building
-  OS X universal binaries.  This indicates that the type size varies across
-  architectures.  In this case ``${VARIABLE}_CODE`` contains C preprocessor
-  tests mapping from each architecture macro to the corresponding type size.
-  The list of architecture macros is stored in ``${VARIABLE}_KEYS``, and the
-  value for each key is stored in ``${VARIABLE}-${KEY}``.
-
-  If the ``BUILTIN_TYPES_ONLY`` option is not given, the macro checks for
-  headers ``<sys/types.h>``, ``<stdint.h>``, and ``<stddef.h>``, and saves
-  results in ``HAVE_SYS_TYPES_H``, ``HAVE_STDINT_H``, and ``HAVE_STDDEF_H``.
-  The type size check automatically includes the available headers, thus
-  supporting checks of types defined in the headers.
-
-  If ``LANGUAGE`` is set, the specified compiler will be used to perform the
-  check. Acceptable values are ``C`` and ``CXX``.
-
-Despite the name of the macro you may use it to check the size of more
-complex expressions, too.  To check e.g.  for the size of a struct
-member you can do something like this:
-
-.. code-block:: cmake
-
-  check_type_size("((struct something*)0)->member" SIZEOF_MEMBER)
-
-
-
-The following variables may be set before calling this macro to modify
-the way the check is run:
-
-::
-
-  CMAKE_REQUIRED_FLAGS = string of compile command line flags
-  CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
-  CMAKE_REQUIRED_INCLUDES = list of include directories
-  CMAKE_REQUIRED_LINK_OPTIONS  = list of options to pass to link command
-  CMAKE_REQUIRED_LIBRARIES = list of libraries to link
-  CMAKE_REQUIRED_QUIET = execute quietly without messages
-  CMAKE_EXTRA_INCLUDE_FILES = list of extra headers to include
-#]=======================================================================]
-
-include(CheckIncludeFile)
-include(CheckIncludeFileCXX)
-
-get_filename_component(__check_type_size_dir "${CMAKE_CURRENT_LIST_FILE}" PATH)
-
-include_guard(GLOBAL)
-
-cmake_policy(PUSH)
-cmake_policy(SET CMP0054 NEW)
-
-#-----------------------------------------------------------------------------
-# Helper function.  DO NOT CALL DIRECTLY.
-function(__check_type_size_impl type var map builtin language)
-  if(NOT CMAKE_REQUIRED_QUIET)
-    message(CHECK_START "Check size of ${type}")
-  endif()
-
-  # Include header files.
-  set(headers)
-  if(builtin)
-    if(HAVE_SYS_TYPES_H)
-      string(APPEND headers "#include <sys/types.h>\n")
-    endif()
-    if(HAVE_STDINT_H)
-      string(APPEND headers "#include <stdint.h>\n")
-    endif()
-    if(HAVE_STDDEF_H)
-      string(APPEND headers "#include <stddef.h>\n")
-    endif()
-  endif()
-  foreach(h ${CMAKE_EXTRA_INCLUDE_FILES})
-    string(APPEND headers "#include \"${h}\"\n")
-  endforeach()
-
-  # Perform the check.
-
-  if(language STREQUAL "C")
-    set(src ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CheckTypeSize/${var}.c)
-  elseif(language STREQUAL "CXX")
-    set(src ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CheckTypeSize/${var}.cpp)
-  else()
-    message(FATAL_ERROR "Unknown language:\n  ${language}\nSupported languages: C, CXX.\n")
-  endif()
-  set(bin ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CheckTypeSize/${var}.bin)
-  configure_file(${__check_type_size_dir}/CheckTypeSize.c.in ${src} @ONLY)
-  try_compile(HAVE_${var} ${CMAKE_BINARY_DIR} ${src}
-    COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
-    LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS}
-    LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}
-    CMAKE_FLAGS
-      "-DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS}"
-      "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}"
-    OUTPUT_VARIABLE output
-    COPY_FILE ${bin}
-    )
-
-  if(HAVE_${var})
-    # The check compiled.  Load information from the binary.
-    file(STRINGS ${bin} strings LIMIT_COUNT 10 REGEX "INFO:size")
-
-    # Parse the information strings.
-    set(regex_size ".*INFO:size\\[0*([^]]*)\\].*")
-    set(regex_key " key\\[([^]]*)\\]")
-    set(keys)
-    set(code)
-    set(mismatch)
-    set(first 1)
-    foreach(info ${strings})
-      if("${info}" MATCHES "${regex_size}")
-        # Get the type size.
-        set(size "${CMAKE_MATCH_1}")
-        if(first)
-          set(${var} ${size})
-        elseif(NOT "${size}" STREQUAL "${${var}}")
-          set(mismatch 1)
-        endif()
-        set(first 0)
-
-        # Get the architecture map key.
-        string(REGEX MATCH   "${regex_key}"       key "${info}")
-        string(REGEX REPLACE "${regex_key}" "\\1" key "${key}")
-        if(key)
-          string(APPEND code "\nset(${var}-${key} \"${size}\")")
-          list(APPEND keys ${key})
-        endif()
-      endif()
-    endforeach()
-
-    # Update the architecture-to-size map.
-    if(mismatch AND keys)
-      configure_file(${__check_type_size_dir}/CheckTypeSizeMap.cmake.in ${map} @ONLY)
-      set(${var} 0)
-    else()
-      file(REMOVE ${map})
-    endif()
-
-    if(mismatch AND NOT keys)
-      message(SEND_ERROR "CHECK_TYPE_SIZE found different results, consider setting CMAKE_OSX_ARCHITECTURES or CMAKE_TRY_COMPILE_OSX_ARCHITECTURES to one or no architecture !")
-    endif()
-
-    if(NOT CMAKE_REQUIRED_QUIET)
-      message(CHECK_PASS "done")
-    endif()
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-      "Determining size of ${type} passed with the following output:\n${output}\n\n")
-    set(${var} "${${var}}" CACHE INTERNAL "CHECK_TYPE_SIZE: sizeof(${type})")
-  else()
-    # The check failed to compile.
-    if(NOT CMAKE_REQUIRED_QUIET)
-      message(CHECK_FAIL "failed")
-    endif()
-    file(READ ${src} content)
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-      "Determining size of ${type} failed with the following output:\n${output}\n${src}:\n${content}\n\n")
-    set(${var} "" CACHE INTERNAL "CHECK_TYPE_SIZE: ${type} unknown")
-    file(REMOVE ${map})
-  endif()
-endfunction()
-
-#-----------------------------------------------------------------------------
-macro(CHECK_TYPE_SIZE TYPE VARIABLE)
-  # parse arguments
-  unset(doing)
-  foreach(arg ${ARGN})
-    if("x${arg}" STREQUAL "xBUILTIN_TYPES_ONLY")
-      set(_CHECK_TYPE_SIZE_${arg} 1)
-      unset(doing)
-    elseif("x${arg}" STREQUAL "xLANGUAGE") # change to MATCHES for more keys
-      set(doing "${arg}")
-      set(_CHECK_TYPE_SIZE_${doing} "")
-    elseif("x${doing}" STREQUAL "xLANGUAGE")
-      set(_CHECK_TYPE_SIZE_${doing} "${arg}")
-      unset(doing)
-    else()
-      message(FATAL_ERROR "Unknown argument:\n  ${arg}\n")
-    endif()
-  endforeach()
-  if("x${doing}" MATCHES "^x(LANGUAGE)$")
-    message(FATAL_ERROR "Missing argument:\n  ${doing} arguments requires a value\n")
-  endif()
-  if(DEFINED _CHECK_TYPE_SIZE_LANGUAGE)
-    if(NOT "x${_CHECK_TYPE_SIZE_LANGUAGE}" MATCHES "^x(C|CXX)$")
-      message(FATAL_ERROR "Unknown language:\n  ${_CHECK_TYPE_SIZE_LANGUAGE}.\nSupported languages: C, CXX.\n")
-    endif()
-    set(_language ${_CHECK_TYPE_SIZE_LANGUAGE})
-  else()
-    set(_language C)
-  endif()
-
-  # Optionally check for standard headers.
-  if(_CHECK_TYPE_SIZE_BUILTIN_TYPES_ONLY)
-    set(_builtin 0)
-  else()
-    set(_builtin 1)
-    if(_language STREQUAL "C")
-      check_include_file(sys/types.h HAVE_SYS_TYPES_H)
-      check_include_file(stdint.h HAVE_STDINT_H)
-      check_include_file(stddef.h HAVE_STDDEF_H)
-    elseif(_language STREQUAL "CXX")
-      check_include_file_cxx(sys/types.h HAVE_SYS_TYPES_H)
-      check_include_file_cxx(stdint.h HAVE_STDINT_H)
-      check_include_file_cxx(stddef.h HAVE_STDDEF_H)
-    endif()
-  endif()
-  unset(_CHECK_TYPE_SIZE_BUILTIN_TYPES_ONLY)
-  unset(_CHECK_TYPE_SIZE_LANGUAGE)
-
-  # Compute or load the size or size map.
-  set(${VARIABLE}_KEYS)
-  set(_map_file ${CMAKE_BINARY_DIR}/${CMAKE_FILES_DIRECTORY}/CheckTypeSize/${VARIABLE}.cmake)
-  if(NOT DEFINED HAVE_${VARIABLE})
-    __check_type_size_impl(${TYPE} ${VARIABLE} ${_map_file} ${_builtin} ${_language})
-  endif()
-  include(${_map_file} OPTIONAL)
-  set(_map_file)
-  set(_builtin)
-
-  # Create preprocessor code.
-  if(${VARIABLE}_KEYS)
-    set(${VARIABLE}_CODE)
-    set(_if if)
-    foreach(key ${${VARIABLE}_KEYS})
-      string(APPEND ${VARIABLE}_CODE "#${_if} defined(${key})\n# define ${VARIABLE} ${${VARIABLE}-${key}}\n")
-      set(_if elif)
-    endforeach()
-    string(APPEND ${VARIABLE}_CODE "#else\n# error ${VARIABLE} unknown\n#endif")
-    set(_if)
-  elseif(${VARIABLE})
-    set(${VARIABLE}_CODE "#define ${VARIABLE} ${${VARIABLE}}")
-  else()
-    set(${VARIABLE}_CODE "/* #undef ${VARIABLE} */")
-  endif()
-endmacro()
-
-#-----------------------------------------------------------------------------
-cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/CheckVariableExists.cmake b/share/cmake-3.18/Modules/CheckVariableExists.cmake
deleted file mode 100644
index 8a93535..0000000
--- a/share/cmake-3.18/Modules/CheckVariableExists.cmake
+++ /dev/null
@@ -1,85 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-CheckVariableExists
--------------------
-
-Check if the variable exists.
-
-.. command:: CHECK_VARIABLE_EXISTS
-
-  .. code-block:: cmake
-
-    CHECK_VARIABLE_EXISTS(VAR VARIABLE)
-
-
-  ::
-
-    VAR      - the name of the variable
-    VARIABLE - variable to store the result
-               Will be created as an internal cache variable.
-
-
-  This macro is only for ``C`` variables.
-
-The following variables may be set before calling this macro to modify
-the way the check is run:
-
-::
-
-  CMAKE_REQUIRED_FLAGS = string of compile command line flags
-  CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
-  CMAKE_REQUIRED_LINK_OPTIONS = list of options to pass to link command
-  CMAKE_REQUIRED_LIBRARIES = list of libraries to link
-  CMAKE_REQUIRED_QUIET = execute quietly without messages
-#]=======================================================================]
-
-include_guard(GLOBAL)
-
-macro(CHECK_VARIABLE_EXISTS VAR VARIABLE)
-  if(NOT DEFINED "${VARIABLE}")
-    set(MACRO_CHECK_VARIABLE_DEFINITIONS
-      "-DCHECK_VARIABLE_EXISTS=${VAR} ${CMAKE_REQUIRED_FLAGS}")
-    if(NOT CMAKE_REQUIRED_QUIET)
-      message(CHECK_START "Looking for ${VAR}")
-    endif()
-    if(CMAKE_REQUIRED_LINK_OPTIONS)
-      set(CHECK_VARIABLE_EXISTS_ADD_LINK_OPTIONS
-        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
-    else()
-      set(CHECK_VARIABLE_EXISTS_ADD_LINK_OPTIONS)
-    endif()
-    if(CMAKE_REQUIRED_LIBRARIES)
-      set(CHECK_VARIABLE_EXISTS_ADD_LIBRARIES
-        LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
-    else()
-      set(CHECK_VARIABLE_EXISTS_ADD_LIBRARIES)
-    endif()
-    try_compile(${VARIABLE}
-      ${CMAKE_BINARY_DIR}
-      ${CMAKE_ROOT}/Modules/CheckVariableExists.c
-      COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
-      ${CHECK_VARIABLE_EXISTS_ADD_LINK_OPTIONS}
-      ${CHECK_VARIABLE_EXISTS_ADD_LIBRARIES}
-      CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_VARIABLE_DEFINITIONS}
-      OUTPUT_VARIABLE OUTPUT)
-    if(${VARIABLE})
-      set(${VARIABLE} 1 CACHE INTERNAL "Have variable ${VAR}")
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_PASS "found")
-      endif()
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-        "Determining if the variable ${VAR} exists passed with the following output:\n"
-        "${OUTPUT}\n\n")
-    else()
-      set(${VARIABLE} "" CACHE INTERNAL "Have variable ${VAR}")
-      if(NOT CMAKE_REQUIRED_QUIET)
-        message(CHECK_FAIL "not found")
-      endif()
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-        "Determining if the variable ${VAR} exists failed with the following output:\n"
-        "${OUTPUT}\n\n")
-    endif()
-  endif()
-endmacro()
diff --git a/share/cmake-3.18/Modules/Compiler/ARMCC.cmake b/share/cmake-3.18/Modules/Compiler/ARMCC.cmake
deleted file mode 100644
index f949568..0000000
--- a/share/cmake-3.18/Modules/Compiler/ARMCC.cmake
+++ /dev/null
@@ -1,39 +0,0 @@
-if(_ARMCC_CMAKE_LOADED)
-  return()
-endif()
-set(_ARMCC_CMAKE_LOADED TRUE)
-
-# See ARM Compiler documentation at:
-# http://infocenter.arm.com/help/topic/com.arm.doc.set.swdev/index.html
-
-get_filename_component(_CMAKE_C_TOOLCHAIN_LOCATION "${CMAKE_C_COMPILER}" PATH)
-get_filename_component(_CMAKE_CXX_TOOLCHAIN_LOCATION "${CMAKE_CXX_COMPILER}" PATH)
-
-set(CMAKE_EXECUTABLE_SUFFIX ".elf")
-
-find_program(CMAKE_ARMCC_LINKER armlink HINTS "${_CMAKE_C_TOOLCHAIN_LOCATION}" "${_CMAKE_CXX_TOOLCHAIN_LOCATION}" )
-find_program(CMAKE_ARMCC_AR     armar   HINTS "${_CMAKE_C_TOOLCHAIN_LOCATION}" "${_CMAKE_CXX_TOOLCHAIN_LOCATION}" )
-
-set(CMAKE_LINKER "${CMAKE_ARMCC_LINKER}" CACHE FILEPATH "The ARMCC linker" FORCE)
-mark_as_advanced(CMAKE_ARMCC_LINKER)
-set(CMAKE_AR "${CMAKE_ARMCC_AR}" CACHE FILEPATH "The ARMCC archiver" FORCE)
-mark_as_advanced(CMAKE_ARMCC_AR)
-
-macro(__compiler_armcc lang)
-  string(APPEND CMAKE_${lang}_FLAGS_INIT " ")
-  string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -g")
-  string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -Ospace -DNDEBUG")
-  string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -Otime -DNDEBUG")
-  string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -O2 -g")
-
-  set(CMAKE_${lang}_OUTPUT_EXTENSION ".o")
-  set(CMAKE_${lang}_OUTPUT_EXTENSION_REPLACE 1)
-  set(CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG "--via=")
-
-  set(CMAKE_${lang}_LINK_EXECUTABLE      "<CMAKE_LINKER> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES> <OBJECTS> -o <TARGET> --list <TARGET_BASE>.map")
-  set(CMAKE_${lang}_CREATE_STATIC_LIBRARY  "<CMAKE_AR> --create -cr <TARGET> <LINK_FLAGS> <OBJECTS>")
-
-  set(CMAKE_DEPFILE_FLAGS_${lang} "--depend=<DEPFILE> --depend_single_line --no_depend_system_headers")
-
-  set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Xlinker" " ")
-endmacro()
diff --git a/share/cmake-3.18/Modules/Compiler/ARMClang-ASM.cmake b/share/cmake-3.18/Modules/Compiler/ARMClang-ASM.cmake
deleted file mode 100644
index ceff3e8..0000000
--- a/share/cmake-3.18/Modules/Compiler/ARMClang-ASM.cmake
+++ /dev/null
@@ -1,9 +0,0 @@
-include(Compiler/ARMClang)
-
-set(CMAKE_ASM_OUTPUT_EXTENSION ".o")
-set(CMAKE_ASM_OUTPUT_EXTENSION_REPLACE 1)
-
-set(CMAKE_ASM_COMPILE_OBJECT       "<CMAKE_ASM_COMPILER> <INCLUDES> <FLAGS> -c -o <OBJECT> <SOURCE>")
-set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS S;s;asm;msa)
-
-__compiler_armclang(ASM)
diff --git a/share/cmake-3.18/Modules/Compiler/ARMClang-C.cmake b/share/cmake-3.18/Modules/Compiler/ARMClang-C.cmake
deleted file mode 100644
index 0a64a8a..0000000
--- a/share/cmake-3.18/Modules/Compiler/ARMClang-C.cmake
+++ /dev/null
@@ -1,15 +0,0 @@
-include(Compiler/Clang-C)
-include(Compiler/ARMClang)
-__compiler_armclang(C)
-
-set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c90")
-set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=gnu90")
-set(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT ON)
-
-set(CMAKE_C99_STANDARD_COMPILE_OPTION "-std=c99")
-set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-std=gnu99")
-set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
-
-set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
-set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
-set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
diff --git a/share/cmake-3.18/Modules/Compiler/ARMClang-CXX.cmake b/share/cmake-3.18/Modules/Compiler/ARMClang-CXX.cmake
deleted file mode 100644
index 5dfb401..0000000
--- a/share/cmake-3.18/Modules/Compiler/ARMClang-CXX.cmake
+++ /dev/null
@@ -1,3 +0,0 @@
-include(Compiler/Clang-CXX)
-include(Compiler/ARMClang)
-__compiler_armclang(CXX)
diff --git a/share/cmake-3.18/Modules/Compiler/ARMClang.cmake b/share/cmake-3.18/Modules/Compiler/ARMClang.cmake
deleted file mode 100644
index 01ce91d..0000000
--- a/share/cmake-3.18/Modules/Compiler/ARMClang.cmake
+++ /dev/null
@@ -1,130 +0,0 @@
-if(_ARMClang_CMAKE_LOADED)
-  return()
-endif()
-set(_ARMClang_CMAKE_LOADED TRUE)
-
-cmake_policy(PUSH)
-cmake_policy(SET CMP0057 NEW) # if IN_LIST
-
-get_filename_component(_CMAKE_C_TOOLCHAIN_LOCATION "${CMAKE_C_COMPILER}" PATH)
-get_filename_component(_CMAKE_CXX_TOOLCHAIN_LOCATION "${CMAKE_CXX_COMPILER}" PATH)
-
-set(CMAKE_EXECUTABLE_SUFFIX ".elf")
-
-find_program(CMAKE_ARMClang_LINKER armlink HINTS "${_CMAKE_C_TOOLCHAIN_LOCATION}" "${_CMAKE_CXX_TOOLCHAIN_LOCATION}" )
-find_program(CMAKE_ARMClang_AR     armar   HINTS "${_CMAKE_C_TOOLCHAIN_LOCATION}" "${_CMAKE_CXX_TOOLCHAIN_LOCATION}" )
-
-set(CMAKE_LINKER "${CMAKE_ARMClang_LINKER}" CACHE FILEPATH "The ARMClang linker" FORCE)
-mark_as_advanced(CMAKE_ARMClang_LINKER)
-set(CMAKE_AR "${CMAKE_ARMClang_AR}" CACHE FILEPATH "The ARMClang archiver" FORCE)
-mark_as_advanced(CMAKE_ARMClang_AR)
-
-if (CMAKE_LINKER MATCHES "armlink")
-  set(__CMAKE_ARMClang_USING_armlink TRUE)
-  set(CMAKE_LIBRARY_PATH_FLAG "--userlibpath=")
-else()
-  set(__CMAKE_ARMClang_USING_armlink FALSE)
-endif()
-
-# get compiler supported cpu list
-function(__armclang_set_processor_list lang out_var)
-  execute_process(COMMAND "${CMAKE_${lang}_COMPILER}" --target=${CMAKE_${lang}_COMPILER_TARGET} -mcpu=list
-    OUTPUT_VARIABLE processor_list
-    ERROR_VARIABLE processor_list)
-  string(REGEX MATCHALL "-mcpu=([^ \n]*)" processor_list "${processor_list}")
-  string(REGEX REPLACE "-mcpu=" "" processor_list "${processor_list}")
-  set(${out_var} "${processor_list}" PARENT_SCOPE)
-endfunction()
-
-# check processor is in list
-function(__armclang_check_processor processor list out_var)
-  string(TOLOWER "${processor}" processor)
-  if(processor IN_LIST list)
-    set(${out_var} TRUE PARENT_SCOPE)
-  else()
-    set(${out_var} FALSE PARENT_SCOPE)
-  endif()
-endfunction()
-
-# get compiler supported arch list
-function(__armclang_set_arch_list lang out_var)
-  execute_process(COMMAND "${CMAKE_${lang}_COMPILER}" --target=${CMAKE_${lang}_COMPILER_TARGET} -march=list
-    OUTPUT_VARIABLE arch_list
-    ERROR_VARIABLE arch_list)
-  string(REGEX MATCHALL "-march=([^ \n]*)" arch_list "${arch_list}")
-  string(REGEX REPLACE "-march=" "" arch_list "${arch_list}")
-  set(${out_var} "${arch_list}" PARENT_SCOPE)
-endfunction()
-
-# get linker supported cpu list
-function(__armlink_set_cpu_list lang out_var)
-  if(__CMAKE_ARMClang_USING_armlink)
-    set(__linker_wrapper_flags "")
-  else()
-    set(__linker_wrapper_flags --target=${CMAKE_${lang}_COMPILER_TARGET} -Xlinker)
-  endif()
-
-  execute_process(COMMAND "${CMAKE_LINKER}" ${__linker_wrapper_flags} --cpu=list
-    OUTPUT_VARIABLE cpu_list
-    ERROR_VARIABLE cpu_list)
-  string(REGEX MATCHALL "--cpu=([^ \n]*)" cpu_list "${cpu_list}")
-  string(REGEX REPLACE "--cpu=" "" cpu_list "${cpu_list}")
-  set(${out_var} "${cpu_list}" PARENT_SCOPE)
-endfunction()
-
-macro(__compiler_armclang lang)
-  if(NOT CMAKE_${lang}_COMPILER_TARGET)
-    set(CMAKE_${lang}_COMPILER_TARGET arm-arm-none-eabi)
-  endif()
-  if(NOT CMAKE_${lang}_COMPILER_PROCESSOR_LIST)
-    __armclang_set_processor_list(${lang} CMAKE_${lang}_COMPILER_PROCESSOR_LIST)
-  endif()
-  if(NOT CMAKE_${lang}_COMPILER_ARCH_LIST)
-    __armclang_set_arch_list(${lang} CMAKE_${lang}_COMPILER_ARCH_LIST)
-  endif()
-  if(NOT CMAKE_SYSTEM_PROCESSOR AND NOT CMAKE_SYSTEM_ARCH)
-    message(FATAL_ERROR "  CMAKE_SYSTEM_PROCESSOR or CMAKE_SYSTEM_ARCH must be set for ARMClang\n"
-      "  Supported processor: ${CMAKE_${lang}_COMPILER_PROCESSOR_LIST}\n"
-      "  Supported Architecture: ${CMAKE_${lang}_COMPILER_ARCH_LIST}")
-  else()
-    __armclang_check_processor("${CMAKE_SYSTEM_ARCH}" "${CMAKE_${lang}_COMPILER_ARCH_LIST}" _CMAKE_${lang}_CHECK_ARCH_RESULT)
-    if( _CMAKE_${lang}_CHECK_ARCH_RESULT)
-      string(APPEND CMAKE_${lang}_FLAGS_INIT "-march=${CMAKE_SYSTEM_ARCH}")
-      set(__march_flag_set TRUE)
-    endif()
-    __armclang_check_processor("${CMAKE_SYSTEM_PROCESSOR}" "${CMAKE_${lang}_COMPILER_PROCESSOR_LIST}" _CMAKE_${lang}_CHECK_PROCESSOR_RESULT)
-    if(_CMAKE_${lang}_CHECK_PROCESSOR_RESULT)
-      string(APPEND CMAKE_${lang}_FLAGS_INIT "-mcpu=${CMAKE_SYSTEM_PROCESSOR}")
-      set(__mcpu_flag_set TRUE)
-    endif()
-    if(NOT __march_flag_set AND NOT __mcpu_flag_set)
-      message(FATAL_ERROR "Atleast one of the variables CMAKE_SYSTEM_PROCESSOR or CMAKE_SYSTEM_ARCH must be set for ARMClang\n"
-                          "Supported processor: ${CMAKE_${lang}_COMPILER_PROCESSOR_LIST}\n"
-                          "  Supported Architecture: ${CMAKE_${lang}_COMPILER_ARCH_LIST}")
-    endif()
-    unset(_CMAKE_${lang}_CHECK_PROCESSOR_RESULT)
-    unset(_CMAKE_${lang}_CHECK_ARCH_RESULT)
-  endif()
-
-  #check if CMAKE_SYSTEM_PROCESSOR belongs to supported cpu list for armlink
-  __armlink_set_cpu_list( ${lang} CMAKE_LINKER_CPU_LIST)
-  list(TRANSFORM CMAKE_LINKER_CPU_LIST TOLOWER)
-  __armclang_check_processor("${CMAKE_SYSTEM_PROCESSOR}" "${CMAKE_LINKER_CPU_LIST}" _CMAKE_CHECK_LINK_CPU_RESULT)
-  if(_CMAKE_CHECK_LINK_CPU_RESULT)
-    string(APPEND CMAKE_${lang}_LINK_FLAGS "--cpu=${CMAKE_SYSTEM_PROCESSOR}")
-  endif()
-
-  if(__CMAKE_ARMClang_USING_armlink)
-    set(__CMAKE_ARMClang_USING_armlink_WRAPPER "")
-  else()
-    set(__CMAKE_ARMClang_USING_armlink_WRAPPER ${CMAKE_${lang}_LINKER_WRAPPER_FLAG})
-  endif()
-  set(CMAKE_${lang}_LINK_EXECUTABLE "<CMAKE_LINKER> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES> <OBJECTS> -o <TARGET> ${__CMAKE_ARMClang_USING_armlink_WRAPPER} --list <TARGET_BASE>.map")
-  set(CMAKE_${lang}_CREATE_STATIC_LIBRARY  "<CMAKE_AR> --create -cr <TARGET> <LINK_FLAGS> <OBJECTS>")
-  set(CMAKE_${lang}_ARCHIVE_CREATE         "<CMAKE_AR> --create -cr <TARGET> <LINK_FLAGS> <OBJECTS>")
-  set(CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG "${__CMAKE_ARMClang_USING_armlink_WRAPPER} --via=")
-  set(CMAKE_${lang}_OUTPUT_EXTENSION ".o")
-  set(CMAKE_${lang}_OUTPUT_EXTENSION_REPLACE 1)
-endmacro()
-
-cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/Compiler/AppleClang-C.cmake b/share/cmake-3.18/Modules/Compiler/AppleClang-C.cmake
deleted file mode 100644
index 2794f52..0000000
--- a/share/cmake-3.18/Modules/Compiler/AppleClang-C.cmake
+++ /dev/null
@@ -1,18 +0,0 @@
-include(Compiler/Clang)
-__compiler_clang(C)
-
-if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.0)
-  set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c90")
-  set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=gnu90")
-  set(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT ON)
-
-  set(CMAKE_C99_STANDARD_COMPILE_OPTION "-std=c99")
-  set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-std=gnu99")
-  set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
-
-  set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
-  set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
-  set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
-endif()
-
-__compiler_check_default_language_standard(C 4.0 99)
diff --git a/share/cmake-3.18/Modules/Compiler/AppleClang-CXX.cmake b/share/cmake-3.18/Modules/Compiler/AppleClang-CXX.cmake
deleted file mode 100644
index 15edc21..0000000
--- a/share/cmake-3.18/Modules/Compiler/AppleClang-CXX.cmake
+++ /dev/null
@@ -1,45 +0,0 @@
-include(Compiler/Clang)
-__compiler_clang(CXX)
-
-if(NOT "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
-  set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden")
-endif()
-
-if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.0)
-  set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "-std=c++98")
-  set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "-std=gnu++98")
-  set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
-
-  set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++11")
-  set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++11")
-endif()
-
-if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 6.1)
-  set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++14")
-  set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++14")
-  set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
-elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.1)
-  # AppleClang 5.0 knows this flag, but does not set a __cplusplus macro greater than 201103L
-  set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++1y")
-  set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++1y")
-  set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
-endif()
-
-if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10.0)
-  set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++17")
-  set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++17")
-elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 6.1)
-  set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++1z")
-  set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++1z")
-endif()
-
-if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0)
-    set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
-endif()
-
-if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10.0)
-  set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std=c++2a")
-  set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std=gnu++2a")
-endif()
-
-__compiler_check_default_language_standard(CXX 4.0 98)
diff --git a/share/cmake-3.18/Modules/Compiler/AppleClang-OBJC.cmake b/share/cmake-3.18/Modules/Compiler/AppleClang-OBJC.cmake
deleted file mode 100644
index d1f3706..0000000
--- a/share/cmake-3.18/Modules/Compiler/AppleClang-OBJC.cmake
+++ /dev/null
@@ -1,17 +0,0 @@
-include(Compiler/Clang-OBJC)
-
-if(NOT CMAKE_OBJC_COMPILER_VERSION VERSION_LESS 4.0)
-  set(CMAKE_OBJC90_STANDARD_COMPILE_OPTION "-std=c90")
-  set(CMAKE_OBJC90_EXTENSION_COMPILE_OPTION "-std=gnu90")
-  set(CMAKE_OBJC90_STANDARD__HAS_FULL_SUPPORT ON)
-
-  set(CMAKE_OBJC99_STANDARD_COMPILE_OPTION "-std=c99")
-  set(CMAKE_OBJC99_EXTENSION_COMPILE_OPTION "-std=gnu99")
-  set(CMAKE_OBJC99_STANDARD__HAS_FULL_SUPPORT ON)
-
-  set(CMAKE_OBJC11_STANDARD_COMPILE_OPTION "-std=c11")
-  set(CMAKE_OBJC11_EXTENSION_COMPILE_OPTION "-std=gnu11")
-  set(CMAKE_OBJC11_STANDARD__HAS_FULL_SUPPORT ON)
-endif()
-
-__compiler_check_default_language_standard(OBJC 4.0 99)
diff --git a/share/cmake-3.18/Modules/Compiler/AppleClang-OBJCXX.cmake b/share/cmake-3.18/Modules/Compiler/AppleClang-OBJCXX.cmake
deleted file mode 100644
index 409bd4a..0000000
--- a/share/cmake-3.18/Modules/Compiler/AppleClang-OBJCXX.cmake
+++ /dev/null
@@ -1,42 +0,0 @@
-include(Compiler/Clang-OBJCXX)
-
-set(CMAKE_OBJCXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden")
-
-if(NOT CMAKE_OBJCXX_COMPILER_VERSION VERSION_LESS 4.0)
-  set(CMAKE_OBJCXX98_STANDARD_COMPILE_OPTION "-std=c++98")
-  set(CMAKE_OBJCXX98_EXTENSION_COMPILE_OPTION "-std=gnu++98")
-  set(CMAKE_OBJCXX98_STANDARD__HAS_FULL_SUPPORT ON)
-
-  set(CMAKE_OBJCXX11_STANDARD_COMPILE_OPTION "-std=c++11")
-  set(CMAKE_OBJCXX11_EXTENSION_COMPILE_OPTION "-std=gnu++11")
-endif()
-
-if(NOT CMAKE_OBJCXX_COMPILER_VERSION VERSION_LESS 6.1)
-  set(CMAKE_OBJCXX14_STANDARD_COMPILE_OPTION "-std=c++14")
-  set(CMAKE_OBJCXX14_EXTENSION_COMPILE_OPTION "-std=gnu++14")
-  set(CMAKE_OBJCXX14_STANDARD__HAS_FULL_SUPPORT ON)
-elseif(NOT CMAKE_OBJCXX_COMPILER_VERSION VERSION_LESS 5.1)
-  # AppleClang 5.0 knows this flag, but does not set a __cplusplus macro greater than 201103L
-  set(CMAKE_OBJCXX14_STANDARD_COMPILE_OPTION "-std=c++1y")
-  set(CMAKE_OBJCXX14_EXTENSION_COMPILE_OPTION "-std=gnu++1y")
-  set(CMAKE_OBJCXX14_STANDARD__HAS_FULL_SUPPORT ON)
-endif()
-
-if (NOT CMAKE_OBJCXX_COMPILER_VERSION VERSION_LESS 10.0)
-  set(CMAKE_OBJCXX17_STANDARD_COMPILE_OPTION "-std=c++17")
-  set(CMAKE_OBJCXX17_EXTENSION_COMPILE_OPTION "-std=gnu++17")
-elseif (NOT CMAKE_OBJCXX_COMPILER_VERSION VERSION_LESS 6.1)
-  set(CMAKE_OBJCXX17_STANDARD_COMPILE_OPTION "-std=c++1z")
-  set(CMAKE_OBJCXX17_EXTENSION_COMPILE_OPTION "-std=gnu++1z")
-endif()
-
-if (NOT CMAKE_OBJCXX_COMPILER_VERSION VERSION_LESS 8.0)
-    set(CMAKE_OBJCXX11_STANDARD__HAS_FULL_SUPPORT ON)
-endif()
-
-if (NOT CMAKE_OBJCXX_COMPILER_VERSION VERSION_LESS 10.0)
-  set(CMAKE_OBJCXX20_STANDARD_COMPILE_OPTION "-std=c++2a")
-  set(CMAKE_OBJCXX20_EXTENSION_COMPILE_OPTION "-std=gnu++2a")
-endif()
-
-__compiler_check_default_language_standard(OBJCXX 4.0 98)
diff --git a/share/cmake-3.18/Modules/Compiler/CMakeCommonCompilerMacros.cmake b/share/cmake-3.18/Modules/Compiler/CMakeCommonCompilerMacros.cmake
deleted file mode 100644
index 409b65a..0000000
--- a/share/cmake-3.18/Modules/Compiler/CMakeCommonCompilerMacros.cmake
+++ /dev/null
@@ -1,180 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-# This module is shared by multiple languages and compilers; use include guard
-if (__COMPILER_CMAKE_COMMON_COMPILER_MACROS)
-  return()
-endif ()
-set(__COMPILER_CMAKE_COMMON_COMPILER_MACROS 1)
-
-
-# Check that a compiler's language standard is properly detected
-# Parameters:
-#   lang   - Language to check
-#   stdver1 - Minimum version to set a given default for
-#   std1    - Default to use for compiler ver >= stdver1
-#   stdverN - Minimum version to set a given default for
-#   stdN    - Default to use for compiler ver >= stdverN
-#
-#   The order of stdverN stdN pairs passed as arguments is expected to be in
-#   monotonically increasing version order.
-#
-# Note:
-#   This macro can be called with multiple version / std pairs to convey that
-#   newer compiler versions may use a newer standard default.
-#
-# Example:
-#   To specify that compiler version 6.1 and newer defaults to C++11 while
-#   4.8 <= ver < 6.1 default to C++98, you would call:
-#
-# __compiler_check_default_language_standard(CXX 4.8 98 6.1 11)
-#
-macro(__compiler_check_default_language_standard lang stdver1 std1)
-  set(__std_ver_pairs "${stdver1};${std1};${ARGN}")
-  string(REGEX REPLACE " *; *" " " __std_ver_pairs "${__std_ver_pairs}")
-  string(REGEX MATCHALL "[^ ]+ [^ ]+" __std_ver_pairs "${__std_ver_pairs}")
-
-  # If the compiler version is below the threshold of even having CMake
-  # support for language standards, then don't bother.
-  if (CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL "${stdver1}")
-    if (NOT CMAKE_${lang}_COMPILER_FORCED)
-      if (NOT CMAKE_${lang}_STANDARD_COMPUTED_DEFAULT)
-        message(FATAL_ERROR "CMAKE_${lang}_STANDARD_COMPUTED_DEFAULT should be set for ${CMAKE_${lang}_COMPILER_ID} (${CMAKE_${lang}_COMPILER}) version ${CMAKE_${lang}_COMPILER_VERSION}")
-      endif ()
-      set(CMAKE_${lang}_STANDARD_DEFAULT ${CMAKE_${lang}_STANDARD_COMPUTED_DEFAULT})
-    else ()
-      list(REVERSE __std_ver_pairs)
-      foreach (__std_ver_pair IN LISTS __std_ver_pairs)
-        string(REGEX MATCH "([^ ]+) (.+)" __std_ver_pair "${__std_ver_pair}")
-        set(__stdver ${CMAKE_MATCH_1})
-        set(__std ${CMAKE_MATCH_2})
-        if (CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL __stdver AND
-          NOT DEFINED CMAKE_${lang}_STANDARD_DEFAULT)
-          # Compiler id was forced so just guess the default standard level.
-          set(CMAKE_${lang}_STANDARD_DEFAULT ${__std})
-        endif ()
-        unset(__std)
-        unset(__stdver)
-      endforeach ()
-    endif ()
-  endif ()
-  unset(__std_ver_pairs)
-endmacro()
-
-# Define to allow compile features to be automatically determined
-macro(cmake_record_c_compile_features)
-  set(_result 0)
-  if(_result EQUAL 0 AND DEFINED CMAKE_C11_STANDARD_COMPILE_OPTION)
-    if(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT)
-      _has_compiler_features_c(11)
-    else()
-      _record_compiler_features_c(11)
-    endif()
-    unset(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT)
-  endif()
-  if(_result EQUAL 0 AND DEFINED CMAKE_C99_STANDARD_COMPILE_OPTION)
-    if(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT)
-      _has_compiler_features_c(99)
-    else()
-      _record_compiler_features_c(99)
-    endif()
-    unset(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT)
-  endif()
-  if(_result EQUAL 0 AND DEFINED CMAKE_C90_STANDARD_COMPILE_OPTION)
-    if(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT)
-      _has_compiler_features_c(90)
-    else()
-      _record_compiler_features_c(90)
-    endif()
-    unset(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT)
-  endif()
-endmacro()
-
-# Define to allow compile features to be automatically determined
-macro(cmake_record_cxx_compile_features)
-  set(_result 0)
-  if(_result EQUAL 0 AND DEFINED CMAKE_CXX20_STANDARD_COMPILE_OPTION)
-    if(CMAKE_CXX20_STANDARD__HAS_FULL_SUPPORT)
-      _has_compiler_features_cxx(20)
-    else()
-      _record_compiler_features_cxx(20)
-    endif()
-    unset(CMAKE_CXX20_STANDARD__HAS_FULL_SUPPORT)
-  endif()
-  if(_result EQUAL 0 AND DEFINED CMAKE_CXX17_STANDARD_COMPILE_OPTION)
-    if(CMAKE_CXX17_STANDARD__HAS_FULL_SUPPORT)
-      _has_compiler_features_cxx(17)
-    else()
-      _record_compiler_features_cxx(17)
-    endif()
-    unset(CMAKE_CXX17_STANDARD__HAS_FULL_SUPPORT)
-  endif()
-  if(_result EQUAL 0 AND DEFINED CMAKE_CXX14_STANDARD_COMPILE_OPTION)
-    if(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT)
-      _has_compiler_features_cxx(14)
-    else()
-      _record_compiler_features_cxx(14)
-    endif()
-    unset(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT)
-  endif()
-  if(_result EQUAL 0 AND DEFINED CMAKE_CXX11_STANDARD_COMPILE_OPTION)
-    if(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT)
-      _has_compiler_features_cxx(11)
-    else()
-      _record_compiler_features_cxx(11)
-    endif()
-    unset(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT)
-  endif()
-  if(_result EQUAL 0 AND DEFINED CMAKE_CXX98_STANDARD_COMPILE_OPTION)
-    if(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT)
-      _has_compiler_features_cxx(98)
-    else()
-      _record_compiler_features_cxx(98)
-    endif()
-    unset(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT)
-  endif()
-endmacro()
-
-macro(cmake_record_cuda_compile_features)
-  set(_result 0)
-  if(_result EQUAL 0 AND DEFINED CMAKE_CUDA20_STANDARD_COMPILE_OPTION)
-    if(CMAKE_CUDA20_STANDARD__HAS_FULL_SUPPORT)
-      _has_compiler_features_cuda(20)
-    else()
-      _record_compiler_features_cuda(20)
-    endif()
-    unset(CMAKE_CUDA20_STANDARD__HAS_FULL_SUPPORT)
-  endif()
-  if(_result EQUAL 0 AND DEFINED CMAKE_CUDA17_STANDARD_COMPILE_OPTION)
-    if(CMAKE_CUDA17_STANDARD__HAS_FULL_SUPPORT)
-      _has_compiler_features_cuda(17)
-    else()
-      _record_compiler_features_cuda(17)
-    endif()
-    unset(CMAKE_CUDA17_STANDARD__HAS_FULL_SUPPORT)
-  endif()
-  if(_result EQUAL 0 AND DEFINED CMAKE_CUDA14_STANDARD_COMPILE_OPTION)
-    if(CMAKE_CUDA14_STANDARD__HAS_FULL_SUPPORT)
-      _has_compiler_features_cuda(14)
-    else()
-      _record_compiler_features_cuda(14)
-    endif()
-    unset(CMAKE_CUDA14_STANDARD__HAS_FULL_SUPPORT)
-  endif()
-  if(_result EQUAL 0 AND DEFINED CMAKE_CUDA11_STANDARD_COMPILE_OPTION)
-    if(CMAKE_CUDA11_STANDARD__HAS_FULL_SUPPORT)
-      _has_compiler_features_cuda(11)
-    else()
-      _record_compiler_features_cuda(11)
-    endif()
-    unset(CMAKE_CUDA11_STANDARD__HAS_FULL_SUPPORT)
-  endif()
-  if(_result EQUAL 0 AND DEFINED CMAKE_CUDA03_STANDARD_COMPILE_OPTION)
-    if(CMAKE_CUDA03_STANDARD__HAS_FULL_SUPPORT)
-      _has_compiler_features_cuda(03)
-    else()
-      _record_compiler_features_cuda(03)
-    endif()
-    unset(CMAKE_CUDA03_STANDARD__HAS_FULL_SUPPORT)
-  endif()
-endmacro()
diff --git a/share/cmake-3.18/Modules/Compiler/Clang-C.cmake b/share/cmake-3.18/Modules/Compiler/Clang-C.cmake
deleted file mode 100644
index 7c4a263..0000000
--- a/share/cmake-3.18/Modules/Compiler/Clang-C.cmake
+++ /dev/null
@@ -1,46 +0,0 @@
-include(Compiler/Clang)
-__compiler_clang(C)
-
-cmake_policy(GET CMP0025 appleClangPolicy)
-if(APPLE AND NOT appleClangPolicy STREQUAL NEW)
-  return()
-endif()
-
-if("x${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "xMSVC")
-  set(CMAKE_C_CLANG_TIDY_DRIVER_MODE "cl")
-endif()
-
-if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.4)
-  if(NOT "x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC")
-    set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c90")
-    set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=gnu90")
-    set(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT ON)
-
-    set(CMAKE_C99_STANDARD_COMPILE_OPTION "-std=c99")
-    set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-std=gnu99")
-    set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
-
-    set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
-    set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
-    set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
-  else()
-    # clang-cl doesn't have any of these
-    set(CMAKE_C90_STANDARD_COMPILE_OPTION "")
-    set(CMAKE_C90_EXTENSION_COMPILE_OPTION "")
-    set(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT ON)
-
-    set(CMAKE_C99_STANDARD_COMPILE_OPTION "")
-    set(CMAKE_C99_EXTENSION_COMPILE_OPTION "")
-    set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
-
-    set(CMAKE_C11_STANDARD_COMPILE_OPTION "")
-    set(CMAKE_C11_EXTENSION_COMPILE_OPTION "")
-    set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
-  endif()
-endif()
-
-if(NOT "x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC")
-  __compiler_check_default_language_standard(C 3.4 99 3.6 11)
-else()
-  set(CMAKE_C_STANDARD_DEFAULT "")
-endif()
diff --git a/share/cmake-3.18/Modules/Compiler/Clang-CUDA.cmake b/share/cmake-3.18/Modules/Compiler/Clang-CUDA.cmake
deleted file mode 100644
index 336827b..0000000
--- a/share/cmake-3.18/Modules/Compiler/Clang-CUDA.cmake
+++ /dev/null
@@ -1,28 +0,0 @@
-include(Compiler/Clang)
-__compiler_clang(CUDA)
-
-# Set explicitly, because __compiler_clang() doesn't set this if we're simulating MSVC.
-set(CMAKE_DEPFILE_FLAGS_CUDA "-MD -MT <OBJECT> -MF <DEPFILE>")
-
-# C++03 isn't supported for CXX, but is for CUDA, so we need to set these manually.
-# Do this before __compiler_clang_cxx_standards() since that adds the feature.
-set(CMAKE_CUDA03_STANDARD_COMPILE_OPTION "-std=c++03")
-set(CMAKE_CUDA03_EXTENSION_COMPILE_OPTION "-std=gnu++03")
-__compiler_clang_cxx_standards(CUDA)
-
-set(CMAKE_CUDA_COMPILER_HAS_DEVICE_LINK_PHASE TRUE)
-set(_CMAKE_COMPILE_AS_CUDA_FLAG "-x cuda")
-set(_CMAKE_CUDA_PTX_FLAG "--cuda-device-only -S")
-
-# RulePlaceholderExpander expands crosscompile variables like sysroot and target only for CMAKE_<LANG>_COMPILER. Override the default.
-set(CMAKE_CUDA_LINK_EXECUTABLE "<CMAKE_CUDA_COMPILER> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>${__IMPLICT_LINKS}")
-set(CMAKE_CUDA_CREATE_SHARED_LIBRARY "<CMAKE_CUDA_COMPILER> <CMAKE_SHARED_LIBRARY_CUDA_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CUDA_FLAGS> <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>${__IMPLICT_LINKS}")
-
-set(CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT "STATIC")
-set(CMAKE_CUDA_RUNTIME_LIBRARY_LINK_OPTIONS_STATIC "cudadevrt;cudart_static")
-set(CMAKE_CUDA_RUNTIME_LIBRARY_LINK_OPTIONS_SHARED "cudadevrt;cudart")
-set(CMAKE_CUDA_RUNTIME_LIBRARY_LINK_OPTIONS_NONE   "")
-
-if(UNIX)
-  list(APPEND CMAKE_CUDA_RUNTIME_LIBRARY_LINK_OPTIONS_STATIC "rt" "pthread" "dl")
-endif()
diff --git a/share/cmake-3.18/Modules/Compiler/Clang-CXX.cmake b/share/cmake-3.18/Modules/Compiler/Clang-CXX.cmake
deleted file mode 100644
index 789e991..0000000
--- a/share/cmake-3.18/Modules/Compiler/Clang-CXX.cmake
+++ /dev/null
@@ -1,16 +0,0 @@
-include(Compiler/Clang)
-__compiler_clang(CXX)
-__compiler_clang_cxx_standards(CXX)
-
-if("x${CMAKE_CXX_COMPILER_FRONTEND_VARIANT}" STREQUAL "xGNU")
-  set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden")
-endif()
-
-cmake_policy(GET CMP0025 appleClangPolicy)
-if(APPLE AND NOT appleClangPolicy STREQUAL NEW)
-  return()
-endif()
-
-if("x${CMAKE_CXX_COMPILER_FRONTEND_VARIANT}" STREQUAL "xMSVC")
-  set(CMAKE_CXX_CLANG_TIDY_DRIVER_MODE "cl")
-endif()
diff --git a/share/cmake-3.18/Modules/Compiler/Clang-FindBinUtils.cmake b/share/cmake-3.18/Modules/Compiler/Clang-FindBinUtils.cmake
deleted file mode 100644
index b852660..0000000
--- a/share/cmake-3.18/Modules/Compiler/Clang-FindBinUtils.cmake
+++ /dev/null
@@ -1,35 +0,0 @@
-if(NOT DEFINED _CMAKE_PROCESSING_LANGUAGE OR _CMAKE_PROCESSING_LANGUAGE STREQUAL "")
-  message(FATAL_ERROR "Internal error: _CMAKE_PROCESSING_LANGUAGE is not set")
-endif()
-
-# Debian:
-# * /usr/bin/llvm-ar-4.0
-# * /usr/bin/llvm-ranlib-4.0
-string(REGEX MATCH "^([0-9]+\\.[0-9]+)" __version_x_y
-    "${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_VERSION}")
-
-# Try to find tools in the same directory as Clang itself
-get_filename_component(__clang_hint_1 "${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER}" REALPATH)
-get_filename_component(__clang_hint_1 "${__clang_hint_1}" DIRECTORY)
-
-get_filename_component(__clang_hint_2 "${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER}" DIRECTORY)
-
-set(__clang_hints ${__clang_hint_1} ${__clang_hint_2})
-
-# http://manpages.ubuntu.com/manpages/precise/en/man1/llvm-ar.1.html
-find_program(CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_AR NAMES
-    "${_CMAKE_TOOLCHAIN_PREFIX}llvm-ar-${__version_x_y}"
-    "${_CMAKE_TOOLCHAIN_PREFIX}llvm-ar"
-    HINTS ${__clang_hints}
-    DOC "LLVM archiver"
-)
-mark_as_advanced(CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_AR)
-
-# http://manpages.ubuntu.com/manpages/precise/en/man1/llvm-ranlib.1.html
-find_program(CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_RANLIB NAMES
-    "${_CMAKE_TOOLCHAIN_PREFIX}llvm-ranlib-${__version_x_y}"
-    "${_CMAKE_TOOLCHAIN_PREFIX}llvm-ranlib"
-    HINTS ${__clang_hints}
-    DOC "Generate index for LLVM archive"
-)
-mark_as_advanced(CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_RANLIB)
diff --git a/share/cmake-3.18/Modules/Compiler/Clang-OBJC.cmake b/share/cmake-3.18/Modules/Compiler/Clang-OBJC.cmake
deleted file mode 100644
index c61c497..0000000
--- a/share/cmake-3.18/Modules/Compiler/Clang-OBJC.cmake
+++ /dev/null
@@ -1,18 +0,0 @@
-include(Compiler/Clang)
-__compiler_clang(OBJC)
-
-if(NOT CMAKE_OBJC_COMPILER_VERSION VERSION_LESS 3.4)
-  set(CMAKE_OBJC90_STANDARD_COMPILE_OPTION "-std=c90")
-  set(CMAKE_OBJC90_EXTENSION_COMPILE_OPTION "-std=gnu90")
-  set(CMAKE_OBJC90_STANDARD__HAS_FULL_SUPPORT ON)
-
-  set(CMAKE_OBJC99_STANDARD_COMPILE_OPTION "-std=c99")
-  set(CMAKE_OBJC99_EXTENSION_COMPILE_OPTION "-std=gnu99")
-  set(CMAKE_OBJC99_STANDARD__HAS_FULL_SUPPORT ON)
-
-  set(CMAKE_OBJC11_STANDARD_COMPILE_OPTION "-std=c11")
-  set(CMAKE_OBJC11_EXTENSION_COMPILE_OPTION "-std=gnu11")
-  set(CMAKE_OBJC11_STANDARD__HAS_FULL_SUPPORT ON)
-endif()
-
-__compiler_check_default_language_standard(OBJC 3.4 99 3.6 11)
diff --git a/share/cmake-3.18/Modules/Compiler/Clang-OBJCXX.cmake b/share/cmake-3.18/Modules/Compiler/Clang-OBJCXX.cmake
deleted file mode 100644
index 453b5fd..0000000
--- a/share/cmake-3.18/Modules/Compiler/Clang-OBJCXX.cmake
+++ /dev/null
@@ -1,3 +0,0 @@
-include(Compiler/Clang)
-__compiler_clang(OBJCXX)
-__compiler_clang_cxx_standards(OBJCXX)
diff --git a/share/cmake-3.18/Modules/Compiler/Clang.cmake b/share/cmake-3.18/Modules/Compiler/Clang.cmake
deleted file mode 100644
index 52d5350..0000000
--- a/share/cmake-3.18/Modules/Compiler/Clang.cmake
+++ /dev/null
@@ -1,234 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# This module is shared by multiple languages; use include blocker.
-if(__COMPILER_CLANG)
-  return()
-endif()
-set(__COMPILER_CLANG 1)
-
-include(Compiler/CMakeCommonCompilerMacros)
-
-if("x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC"
-    OR "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC"
-    OR "x${CMAKE_Fortran_SIMULATE_ID}" STREQUAL "xMSVC")
-  macro(__compiler_clang lang)
-  endmacro()
-else()
-  include(Compiler/GNU)
-
-  macro(__compiler_clang lang)
-    __compiler_gnu(${lang})
-    set(CMAKE_${lang}_COMPILE_OPTIONS_PIE "-fPIE")
-    # Link options for PIE are already set in 'Compiler/GNU.cmake'
-    # but clang may require alternate syntax on some platforms
-    if (APPLE)
-      set(CMAKE_${lang}_LINK_OPTIONS_PIE ${CMAKE_${lang}_COMPILE_OPTIONS_PIE} -Xlinker -pie)
-      set(CMAKE_${lang}_LINK_OPTIONS_NO_PIE -Xlinker -no_pie)
-    endif()
-    set(CMAKE_INCLUDE_SYSTEM_FLAG_${lang} "-isystem ")
-    set(CMAKE_${lang}_COMPILE_OPTIONS_VISIBILITY "-fvisibility=")
-    if(CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.4.0)
-      set(CMAKE_${lang}_COMPILE_OPTIONS_TARGET "-target ")
-      set(CMAKE_${lang}_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN "-gcc-toolchain ")
-    else()
-      set(CMAKE_${lang}_COMPILE_OPTIONS_TARGET "--target=")
-      set(CMAKE_${lang}_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN "--gcc-toolchain=")
-    endif()
-    set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Xlinker" " ")
-    set(CMAKE_${lang}_LINKER_WRAPPER_FLAG_SEP)
-
-    if(CMAKE_${lang}_COMPILER_TARGET)
-      if(CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.4.0)
-        list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "-target" "${CMAKE_${lang}_COMPILER_TARGET}")
-      else()
-        list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "--target=${CMAKE_${lang}_COMPILER_TARGET}")
-      endif()
-    endif()
-
-    set(_CMAKE_${lang}_IPO_SUPPORTED_BY_CMAKE YES)
-    set(_CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER YES)
-
-    string(COMPARE EQUAL "${CMAKE_${lang}_COMPILER_ID}" "AppleClang" __is_apple_clang)
-
-    # '-flto=thin' available since Clang 3.9 and Xcode 8
-    # * http://clang.llvm.org/docs/ThinLTO.html#clang-llvm
-    # * https://trac.macports.org/wiki/XcodeVersionInfo
-    set(_CMAKE_LTO_THIN TRUE)
-    if(__is_apple_clang)
-      if(CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 8.0)
-        set(_CMAKE_LTO_THIN FALSE)
-      endif()
-    else()
-      if(CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.9)
-        set(_CMAKE_LTO_THIN FALSE)
-      endif()
-    endif()
-
-    if(_CMAKE_LTO_THIN)
-      set(CMAKE_${lang}_COMPILE_OPTIONS_IPO "-flto=thin")
-    else()
-      set(CMAKE_${lang}_COMPILE_OPTIONS_IPO "-flto")
-    endif()
-
-    if(ANDROID)
-      # https://github.com/android-ndk/ndk/issues/242
-      set(CMAKE_${lang}_LINK_OPTIONS_IPO "-fuse-ld=gold")
-    endif()
-
-    if(ANDROID OR __is_apple_clang)
-      set(__ar "${CMAKE_AR}")
-      set(__ranlib "${CMAKE_RANLIB}")
-    else()
-      set(__ar "${CMAKE_${lang}_COMPILER_AR}")
-      set(__ranlib "${CMAKE_${lang}_COMPILER_RANLIB}")
-    endif()
-
-    set(CMAKE_${lang}_ARCHIVE_CREATE_IPO
-      "\"${__ar}\" cr <TARGET> <LINK_FLAGS> <OBJECTS>"
-    )
-
-    set(CMAKE_${lang}_ARCHIVE_APPEND_IPO
-      "\"${__ar}\" r <TARGET> <LINK_FLAGS> <OBJECTS>"
-    )
-
-    set(CMAKE_${lang}_ARCHIVE_FINISH_IPO
-      "\"${__ranlib}\" <TARGET>"
-    )
-
-    set(CMAKE_PCH_EXTENSION .pch)
-    if (NOT CMAKE_GENERATOR MATCHES "Xcode")
-      set(CMAKE_PCH_PROLOGUE "#pragma clang system_header")
-    endif()
-    set(CMAKE_${lang}_COMPILE_OPTIONS_USE_PCH -Xclang -include-pch -Xclang <PCH_FILE> -Xclang -include -Xclang <PCH_HEADER>)
-    set(CMAKE_${lang}_COMPILE_OPTIONS_CREATE_PCH -Xclang -emit-pch -Xclang -include -Xclang <PCH_HEADER>)
-  endmacro()
-endif()
-
-macro(__compiler_clang_cxx_standards lang)
-  if("x${CMAKE_${lang}_COMPILER_FRONTEND_VARIANT}" STREQUAL "xGNU")
-    if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 2.1)
-      set(CMAKE_${lang}98_STANDARD_COMPILE_OPTION "-std=c++98")
-      set(CMAKE_${lang}98_EXTENSION_COMPILE_OPTION "-std=gnu++98")
-    endif()
-
-    if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.1)
-      set(CMAKE_${lang}98_STANDARD__HAS_FULL_SUPPORT ON)
-      set(CMAKE_${lang}11_STANDARD_COMPILE_OPTION "-std=c++11")
-      set(CMAKE_${lang}11_EXTENSION_COMPILE_OPTION "-std=gnu++11")
-      set(CMAKE_${lang}11_STANDARD__HAS_FULL_SUPPORT ON)
-    elseif(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 2.1)
-      set(CMAKE_${lang}11_STANDARD_COMPILE_OPTION "-std=c++0x")
-      set(CMAKE_${lang}11_EXTENSION_COMPILE_OPTION "-std=gnu++0x")
-    endif()
-
-    if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.5)
-      set(CMAKE_${lang}14_STANDARD_COMPILE_OPTION "-std=c++14")
-      set(CMAKE_${lang}14_EXTENSION_COMPILE_OPTION "-std=gnu++14")
-      set(CMAKE_${lang}14_STANDARD__HAS_FULL_SUPPORT ON)
-    elseif(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.4)
-      set(CMAKE_${lang}14_STANDARD_COMPILE_OPTION "-std=c++1y")
-      set(CMAKE_${lang}14_EXTENSION_COMPILE_OPTION "-std=gnu++1y")
-      set(CMAKE_${lang}14_STANDARD__HAS_FULL_SUPPORT ON)
-    endif()
-
-    set(_clang_version_std17 5.0)
-    if(CMAKE_SYSTEM_NAME STREQUAL "Android")
-      set(_clang_version_std17 6.0)
-    endif()
-
-    if (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS "${_clang_version_std17}")
-      set(CMAKE_${lang}17_STANDARD_COMPILE_OPTION "-std=c++17")
-      set(CMAKE_${lang}17_EXTENSION_COMPILE_OPTION "-std=gnu++17")
-    elseif (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.5)
-      set(CMAKE_${lang}17_STANDARD_COMPILE_OPTION "-std=c++1z")
-      set(CMAKE_${lang}17_EXTENSION_COMPILE_OPTION "-std=gnu++1z")
-    endif()
-
-    if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 6.0)
-      set(CMAKE_${lang}17_STANDARD__HAS_FULL_SUPPORT ON)
-    endif()
-
-    if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 11.0)
-      set(CMAKE_${lang}20_STANDARD_COMPILE_OPTION "-std=c++20")
-      set(CMAKE_${lang}20_EXTENSION_COMPILE_OPTION "-std=gnu++20")
-    elseif(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS "${_clang_version_std17}")
-      set(CMAKE_${lang}20_STANDARD_COMPILE_OPTION "-std=c++2a")
-      set(CMAKE_${lang}20_EXTENSION_COMPILE_OPTION "-std=gnu++2a")
-    endif()
-
-    unset(_clang_version_std17)
-
-    if("x${CMAKE_${lang}_SIMULATE_ID}" STREQUAL "xMSVC")
-      # The MSVC standard library requires C++14, and MSVC itself has no
-      # notion of operating in a mode not aware of at least that standard.
-      set(CMAKE_${lang}98_STANDARD_COMPILE_OPTION "-std=c++14")
-      set(CMAKE_${lang}98_EXTENSION_COMPILE_OPTION "-std=gnu++14")
-      set(CMAKE_${lang}11_STANDARD_COMPILE_OPTION "-std=c++14")
-      set(CMAKE_${lang}11_EXTENSION_COMPILE_OPTION "-std=gnu++14")
-
-      # This clang++ is missing some features because of MSVC compatibility.
-      unset(CMAKE_${lang}11_STANDARD__HAS_FULL_SUPPORT)
-      unset(CMAKE_${lang}14_STANDARD__HAS_FULL_SUPPORT)
-      unset(CMAKE_${lang}17_STANDARD__HAS_FULL_SUPPORT)
-      unset(CMAKE_${lang}20_STANDARD__HAS_FULL_SUPPORT)
-    endif()
-
-    __compiler_check_default_language_standard(${lang} 2.1 98)
-  elseif(CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 3.9
-      AND CMAKE_${lang}_SIMULATE_VERSION VERSION_GREATER_EQUAL 19.0)
-    # This version of clang-cl and the MSVC version it simulates have
-    # support for -std: flags.
-    set(CMAKE_${lang}98_STANDARD_COMPILE_OPTION "")
-    set(CMAKE_${lang}98_EXTENSION_COMPILE_OPTION "")
-    set(CMAKE_${lang}98_STANDARD__HAS_FULL_SUPPORT ON)
-    set(CMAKE_${lang}11_STANDARD_COMPILE_OPTION "")
-    set(CMAKE_${lang}11_EXTENSION_COMPILE_OPTION "")
-    set(CMAKE_${lang}14_STANDARD_COMPILE_OPTION "-std:c++14")
-    set(CMAKE_${lang}14_EXTENSION_COMPILE_OPTION "-std:c++14")
-    if (CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 6.0)
-      set(CMAKE_${lang}17_STANDARD_COMPILE_OPTION "-std:c++17")
-      set(CMAKE_${lang}17_EXTENSION_COMPILE_OPTION "-std:c++17")
-      set(CMAKE_${lang}20_STANDARD_COMPILE_OPTION "-std:c++latest")
-      set(CMAKE_${lang}20_EXTENSION_COMPILE_OPTION "-std:c++latest")
-    else()
-      set(CMAKE_${lang}17_STANDARD_COMPILE_OPTION "-std:c++latest")
-      set(CMAKE_${lang}17_EXTENSION_COMPILE_OPTION "-std:c++latest")
-    endif()
-
-    __compiler_check_default_language_standard(${lang} 3.9 14)
-  else()
-    # This version of clang-cl, or the MSVC version it simulates, does not have
-    # language standards.  Set these options as empty strings so the feature
-    # test infrastructure can at least check to see if they are defined.
-    set(CMAKE_${lang}98_STANDARD_COMPILE_OPTION "")
-    set(CMAKE_${lang}98_EXTENSION_COMPILE_OPTION "")
-    set(CMAKE_${lang}11_STANDARD_COMPILE_OPTION "")
-    set(CMAKE_${lang}11_EXTENSION_COMPILE_OPTION "")
-    set(CMAKE_${lang}14_STANDARD_COMPILE_OPTION "")
-    set(CMAKE_${lang}14_EXTENSION_COMPILE_OPTION "")
-    set(CMAKE_${lang}17_STANDARD_COMPILE_OPTION "")
-    set(CMAKE_${lang}17_EXTENSION_COMPILE_OPTION "")
-    set(CMAKE_${lang}20_STANDARD_COMPILE_OPTION "")
-    set(CMAKE_${lang}20_EXTENSION_COMPILE_OPTION "")
-
-    # There is no meaningful default for this
-    set(CMAKE_${lang}_STANDARD_DEFAULT "")
-
-    # There are no compiler modes so we only need to test features once.
-    # Override the default macro for this special case.  Pretend that
-    # all language standards are available so that at least compilation
-    # can be attempted.
-    macro(cmake_record_${lang}_compile_features)
-      list(APPEND CMAKE_${lang}_COMPILE_FEATURES
-        cxx_std_98
-        cxx_std_11
-        cxx_std_14
-        cxx_std_17
-        cxx_std_20
-        )
-      _record_compiler_features(${lang} "" CMAKE_${lang}_COMPILE_FEATURES)
-    endmacro()
-  endif()
-endmacro()
diff --git a/share/cmake-3.18/Modules/Compiler/Cray-Fortran.cmake b/share/cmake-3.18/Modules/Compiler/Cray-Fortran.cmake
deleted file mode 100644
index 696ae76..0000000
--- a/share/cmake-3.18/Modules/Compiler/Cray-Fortran.cmake
+++ /dev/null
@@ -1,21 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-include(Compiler/Cray)
-__compiler_cray(Fortran)
-
-set(CMAKE_Fortran_SUBMODULE_SEP "")
-set(CMAKE_Fortran_SUBMODULE_EXT ".mod")
-set(CMAKE_Fortran_MODOUT_FLAG -em)
-set(CMAKE_Fortran_MODDIR_FLAG -J)
-set(CMAKE_Fortran_MODDIR_DEFAULT .)
-set(CMAKE_Fortran_FORMAT_FIXED_FLAG "-f fixed")
-set(CMAKE_Fortran_FORMAT_FREE_FLAG "-f free")
-
-if (NOT CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 8.5)
-  set(CMAKE_Fortran_COMPILE_OPTIONS_PREPROCESS_ON "-eT")
-  set(CMAKE_Fortran_COMPILE_OPTIONS_PREPROCESS_OFF "-dT")
-else()
-  set(CMAKE_Fortran_COMPILE_OPTIONS_PREPROCESS_ON "-eZ")
-  set(CMAKE_Fortran_COMPILE_OPTIONS_PREPROCESS_OFF "-dZ")
-endif()
diff --git a/share/cmake-3.18/Modules/Compiler/Fujitsu-DetermineCompiler.cmake b/share/cmake-3.18/Modules/Compiler/Fujitsu-DetermineCompiler.cmake
deleted file mode 100644
index 73ee38c..0000000
--- a/share/cmake-3.18/Modules/Compiler/Fujitsu-DetermineCompiler.cmake
+++ /dev/null
@@ -1,2 +0,0 @@
-
-set(_compiler_id_pp_test "defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version)")
diff --git a/share/cmake-3.18/Modules/Compiler/GNU-ASM.cmake b/share/cmake-3.18/Modules/Compiler/GNU-ASM.cmake
deleted file mode 100644
index 94af401..0000000
--- a/share/cmake-3.18/Modules/Compiler/GNU-ASM.cmake
+++ /dev/null
@@ -1,13 +0,0 @@
-# This file is loaded when gcc/g++ is used for assembler files (the "ASM" cmake language)
-include(Compiler/GNU)
-
-set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s;S;asm)
-
-__compiler_gnu(ASM)
-
-if(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_MATCH STREQUAL "GNU assembler")
-  set(CMAKE_DEPFILE_FLAGS_ASM${ASM_DIALECT} "--MD <DEPFILE>")
-  set(CMAKE_ASM${ASM_DIALECT}_LINK_EXECUTABLE
-    "<CMAKE_LINKER> <FLAGS> <CMAKE_ASM${ASM_DIALECT}_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
-  set(CMAKE_ASM_DEFINE_FLAG "--defsym ")
-endif()
diff --git a/share/cmake-3.18/Modules/Compiler/GNU-C.cmake b/share/cmake-3.18/Modules/Compiler/GNU-C.cmake
deleted file mode 100644
index ca286b3..0000000
--- a/share/cmake-3.18/Modules/Compiler/GNU-C.cmake
+++ /dev/null
@@ -1,28 +0,0 @@
-include(Compiler/GNU)
-__compiler_gnu(C)
-
-if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.5)
-  set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c90")
-  set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=gnu90")
-elseif (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.4)
-  set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c89")
-  set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=gnu89")
-endif()
-
-if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.4)
-  set(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT ON)
-  set(CMAKE_C99_STANDARD_COMPILE_OPTION "-std=c99")
-  set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-std=gnu99")
-  set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
-endif()
-
-if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.7)
-  set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
-  set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
-  set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
-elseif (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.6)
-  set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c1x")
-  set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu1x")
-endif()
-
-__compiler_check_default_language_standard(C 3.4 90 5.0 11)
diff --git a/share/cmake-3.18/Modules/Compiler/GNU-CXX.cmake b/share/cmake-3.18/Modules/Compiler/GNU-CXX.cmake
deleted file mode 100644
index fcaaeab..0000000
--- a/share/cmake-3.18/Modules/Compiler/GNU-CXX.cmake
+++ /dev/null
@@ -1,58 +0,0 @@
-include(Compiler/GNU)
-__compiler_gnu(CXX)
-
-if (WIN32)
-  if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.6)
-    set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fno-keep-inline-dllexport")
-  endif()
-else()
-  if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.0)
-    set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden")
-  endif()
-endif()
-
-if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.4)
-  set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "-std=c++98")
-  set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "-std=gnu++98")
-endif()
-
-if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.7)
-  set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
-  set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++11")
-  set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++11")
-elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.4)
-  # 4.3 supports 0x variants
-  set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++0x")
-  set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++0x")
-endif()
-
-if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8.1)
-  set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
-endif()
-
-if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9)
-  set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++14")
-  set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++14")
-elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
-  set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++1y")
-  set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++1y")
-endif()
-
-if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0)
-  set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
-endif()
-
-if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0)
-  set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++17")
-  set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++17")
-elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.1)
-  set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++1z")
-  set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++1z")
-endif()
-
-if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0)
-  set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std=c++2a")
-  set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std=gnu++2a")
-endif()
-
-__compiler_check_default_language_standard(CXX 3.4 98 6.0 14)
diff --git a/share/cmake-3.18/Modules/Compiler/GNU-FindBinUtils.cmake b/share/cmake-3.18/Modules/Compiler/GNU-FindBinUtils.cmake
deleted file mode 100644
index 097fbf3..0000000
--- a/share/cmake-3.18/Modules/Compiler/GNU-FindBinUtils.cmake
+++ /dev/null
@@ -1,35 +0,0 @@
-if(NOT DEFINED _CMAKE_PROCESSING_LANGUAGE OR _CMAKE_PROCESSING_LANGUAGE STREQUAL "")
-  message(FATAL_ERROR "Internal error: _CMAKE_PROCESSING_LANGUAGE is not set")
-endif()
-
-# Ubuntu 16.04:
-# * /usr/bin/gcc-ar-5
-# * /usr/bin/gcc-ranlib-5
-string(REGEX MATCH "^([0-9]+)" __version_x
-    "${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_VERSION}")
-
-string(REGEX MATCH "^([0-9]+\\.[0-9]+)" __version_x_y
-    "${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_VERSION}")
-
-# Try to find tools in the same directory as GCC itself
-get_filename_component(__gcc_hints "${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER}" DIRECTORY)
-
-# http://manpages.ubuntu.com/manpages/wily/en/man1/gcc-ar.1.html
-find_program(CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_AR NAMES
-    "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ar-${__version_x_y}"
-    "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ar-${__version_x}"
-    "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ar${_CMAKE_COMPILER_SUFFIX}"
-    HINTS ${__gcc_hints}
-    DOC "A wrapper around 'ar' adding the appropriate '--plugin' option for the GCC compiler"
-)
-mark_as_advanced(CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_AR)
-
-# http://manpages.ubuntu.com/manpages/wily/en/man1/gcc-ranlib.1.html
-find_program(CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_RANLIB NAMES
-    "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ranlib-${__version_x_y}"
-    "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ranlib-${__version_x}"
-    "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ranlib${_CMAKE_COMPILER_SUFFIX}"
-    HINTS ${__gcc_hints}
-    DOC "A wrapper around 'ranlib' adding the appropriate '--plugin' option for the GCC compiler"
-)
-mark_as_advanced(CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_RANLIB)
diff --git a/share/cmake-3.18/Modules/Compiler/GNU-OBJC.cmake b/share/cmake-3.18/Modules/Compiler/GNU-OBJC.cmake
deleted file mode 100644
index fb9b0b2..0000000
--- a/share/cmake-3.18/Modules/Compiler/GNU-OBJC.cmake
+++ /dev/null
@@ -1,2 +0,0 @@
-include(Compiler/GNU)
-__compiler_gnu(OBJC)
diff --git a/share/cmake-3.18/Modules/Compiler/GNU-OBJCXX.cmake b/share/cmake-3.18/Modules/Compiler/GNU-OBJCXX.cmake
deleted file mode 100644
index 06f0244..0000000
--- a/share/cmake-3.18/Modules/Compiler/GNU-OBJCXX.cmake
+++ /dev/null
@@ -1,10 +0,0 @@
-include(Compiler/GNU)
-__compiler_gnu(OBJCXX)
-
-if(NOT CMAKE_OBJCXX_COMPILER_VERSION VERSION_LESS 4.2)
-  set(CMAKE_OBJCXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden")
-endif()
-
-if(NOT CMAKE_OBJCXX_LINK_FLAGS)
-  set(CMAKE_OBCXX_LINK_FLAGS "-lstdc++")
-endif()
diff --git a/share/cmake-3.18/Modules/Compiler/GNU.cmake b/share/cmake-3.18/Modules/Compiler/GNU.cmake
deleted file mode 100644
index 668a6a9..0000000
--- a/share/cmake-3.18/Modules/Compiler/GNU.cmake
+++ /dev/null
@@ -1,123 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# This module is shared by multiple languages; use include blocker.
-if(__COMPILER_GNU)
-  return()
-endif()
-set(__COMPILER_GNU 1)
-
-include(Compiler/CMakeCommonCompilerMacros)
-include(Internal/CMakeCheckCompilerFlag)
-
-set(__pch_header_C "c-header")
-set(__pch_header_CXX "c++-header")
-set(__pch_header_OBJC "objective-c-header")
-set(__pch_header_OBJCXX "objective-c++-header")
-
-macro(__compiler_gnu lang)
-  # Feature flags.
-  set(CMAKE_${lang}_VERBOSE_FLAG "-v")
-  set(CMAKE_${lang}_COMPILE_OPTIONS_PIC "-fPIC")
-  set (_CMAKE_${lang}_PIE_MAY_BE_SUPPORTED_BY_LINKER NO)
-  if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.4)
-    set(CMAKE_${lang}_COMPILE_OPTIONS_PIE "-fPIE")
-    # Support of PIE at link stage depends on various elements : platform, compiler, linker
-    # so to activate it, module CheckPIESupported must be used.
-    set (_CMAKE_${lang}_PIE_MAY_BE_SUPPORTED_BY_LINKER YES)
-    set(CMAKE_${lang}_LINK_OPTIONS_PIE ${CMAKE_${lang}_COMPILE_OPTIONS_PIE} "-pie")
-    set(CMAKE_${lang}_LINK_OPTIONS_NO_PIE "-no-pie")
-  endif()
-  if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4.0)
-    set(CMAKE_${lang}_COMPILE_OPTIONS_VISIBILITY "-fvisibility=")
-  endif()
-  set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "-fPIC")
-  set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-shared")
-  set(CMAKE_${lang}_COMPILE_OPTIONS_SYSROOT "--sysroot=")
-
-  set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Wl,")
-  set(CMAKE_${lang}_LINKER_WRAPPER_FLAG_SEP ",")
-
-  # Older versions of gcc (< 4.5) contain a bug causing them to report a missing
-  # header file as a warning if depfiles are enabled, causing check_header_file
-  # tests to always succeed.  Work around this by disabling dependency tracking
-  # in try_compile mode.
-  get_property(_IN_TC GLOBAL PROPERTY IN_TRY_COMPILE)
-  if(CMAKE_${lang}_COMPILER_ID STREQUAL "GNU" AND _IN_TC AND NOT CMAKE_FORCE_DEPFILES)
-  else()
-    # distcc does not transform -o to -MT when invoking the preprocessor
-    # internally, as it ought to.  Work around this bug by setting -MT here
-    # even though it isn't strictly necessary.
-    set(CMAKE_DEPFILE_FLAGS_${lang} "-MD -MT <OBJECT> -MF <DEPFILE>")
-  endif()
-
-  # Initial configuration flags.
-  string(APPEND CMAKE_${lang}_FLAGS_INIT " ")
-  string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -g")
-  string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -Os -DNDEBUG")
-  string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -O3 -DNDEBUG")
-  string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -O2 -g -DNDEBUG")
-  set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE "<CMAKE_${lang}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
-  set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE "<CMAKE_${lang}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>")
-  if(NOT APPLE OR NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4) # work around #4462
-    set(CMAKE_INCLUDE_SYSTEM_FLAG_${lang} "-isystem ")
-  endif()
-
-  set(_CMAKE_${lang}_IPO_SUPPORTED_BY_CMAKE YES)
-  set(_CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER NO)
-
-  # '-flto' introduced since GCC 4.5:
-  # * https://gcc.gnu.org/onlinedocs/gcc-4.4.7/gcc/Option-Summary.html (no)
-  # * https://gcc.gnu.org/onlinedocs/gcc-4.5.4/gcc/Option-Summary.html (yes)
-  if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4.5)
-    set(_CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER YES)
-    set(__lto_flags -flto)
-
-    if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4.7)
-      # '-ffat-lto-objects' introduced since GCC 4.7:
-      # * https://gcc.gnu.org/onlinedocs/gcc-4.6.4/gcc/Option-Summary.html (no)
-      # * https://gcc.gnu.org/onlinedocs/gcc-4.7.4/gcc/Option-Summary.html (yes)
-      list(APPEND __lto_flags -fno-fat-lto-objects)
-    endif()
-
-    set(CMAKE_${lang}_COMPILE_OPTIONS_IPO ${__lto_flags})
-
-    # Need to use version of 'ar'/'ranlib' with plugin support.
-    # Quote from [documentation][1]:
-    #
-    #   To create static libraries suitable for LTO,
-    #   use gcc-ar and gcc-ranlib instead of ar and ranlib
-    #
-    # [1]: https://gcc.gnu.org/onlinedocs/gcc-4.9.4/gcc/Optimize-Options.html
-    set(CMAKE_${lang}_ARCHIVE_CREATE_IPO
-      "\"${CMAKE_${lang}_COMPILER_AR}\" cr <TARGET> <LINK_FLAGS> <OBJECTS>"
-    )
-
-    set(CMAKE_${lang}_ARCHIVE_APPEND_IPO
-      "\"${CMAKE_${lang}_COMPILER_AR}\" r <TARGET> <LINK_FLAGS> <OBJECTS>"
-    )
-
-    set(CMAKE_${lang}_ARCHIVE_FINISH_IPO
-      "\"${CMAKE_${lang}_COMPILER_RANLIB}\" <TARGET>"
-    )
-  endif()
-
-  set(CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "${CMAKE_${lang}_COMPILER}")
-  if(CMAKE_${lang}_COMPILER_ARG1)
-    separate_arguments(_COMPILER_ARGS NATIVE_COMMAND "${CMAKE_${lang}_COMPILER_ARG1}")
-    list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND ${_COMPILER_ARGS})
-    unset(_COMPILER_ARGS)
-  endif()
-  list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "-dM" "-E" "-c" "${CMAKE_ROOT}/Modules/CMakeCXXCompilerABI.cpp")
-
-  if(NOT "x${lang}" STREQUAL "xFortran")
-    set(CMAKE_PCH_EXTENSION .gch)
-    if (NOT CMAKE_GENERATOR MATCHES "Xcode")
-      set(CMAKE_PCH_PROLOGUE "#pragma GCC system_header")
-    endif()
-    set(CMAKE_${lang}_COMPILE_OPTIONS_INVALID_PCH -Winvalid-pch)
-    set(CMAKE_${lang}_COMPILE_OPTIONS_USE_PCH -include <PCH_HEADER>)
-    set(CMAKE_${lang}_COMPILE_OPTIONS_CREATE_PCH -x ${__pch_header_${lang}} -include <PCH_HEADER>)
-  endif()
-endmacro()
diff --git a/share/cmake-3.18/Modules/Compiler/IAR-ASM.cmake b/share/cmake-3.18/Modules/Compiler/IAR-ASM.cmake
deleted file mode 100644
index 936d4ae..0000000
--- a/share/cmake-3.18/Modules/Compiler/IAR-ASM.cmake
+++ /dev/null
@@ -1,52 +0,0 @@
-# This file is processed when the IAR compiler is used for an assembler file
-
-include(Compiler/IAR)
-
-if("${CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID}" STREQUAL "ARM")
-  set(CMAKE_ASM_COMPILE_OBJECT  "<CMAKE_ASM_COMPILER> -S <SOURCE> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT>")
-  __compiler_iar_ilink(ASM)
-  set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s;asm;msa)
-
-elseif("${CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID}" STREQUAL "RX")
-  set(CMAKE_ASM_COMPILE_OBJECT  "<CMAKE_ASM_COMPILER> --silent <SOURCE> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT>")
-  __compiler_iar_ilink(ASM)
-  set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s;asm;msa)
-
-elseif("${CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID}" STREQUAL "RH850")
-  set(CMAKE_ASM_COMPILE_OBJECT  "<CMAKE_ASM_COMPILER> --silent <SOURCE> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT>")
-  __compiler_iar_ilink(ASM)
-  set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s;asm;msa)
-
-elseif("${CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID}" STREQUAL "RL78")
-  set(CMAKE_ASM_COMPILE_OBJECT  "<CMAKE_ASM_COMPILER> --silent <SOURCE> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT>")
-  __compiler_iar_ilink(ASM)
-  set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s;asm;msa)
-
-elseif("${CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID}" STREQUAL "RISC-V")
-  set(CMAKE_ASM_COMPILE_OBJECT  "<CMAKE_ASM_COMPILER> --silent <SOURCE> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT>")
-  __compiler_iar_ilink(ASM)
-  set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s;asm;msa)
-
-elseif("${CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID}" STREQUAL "AVR")
-  set(CMAKE_ASM_COMPILE_OBJECT  "<CMAKE_ASM_COMPILER> -S <SOURCE> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT>")
-  __compiler_iar_xlink(ASM)
-  set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s90;asm;msa)
-
-elseif("${CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID}" STREQUAL "MSP430")
-  set(CMAKE_ASM_COMPILE_OBJECT  "<CMAKE_ASM_COMPILER> -S <SOURCE> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT>")
-  __compiler_iar_xlink(ASM)
-  set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s43;asm;msa)
-
-elseif("${CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID}" STREQUAL "V850")
-  set(CMAKE_ASM_COMPILE_OBJECT  "<CMAKE_ASM_COMPILER> -S <SOURCE> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT>")
-  __compiler_iar_xlink(ASM)
-  set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s85;asm;msa)
-
-elseif("${CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID}" STREQUAL "8051")
-  set(CMAKE_ASM_COMPILE_OBJECT  "<CMAKE_ASM_COMPILER> -S <SOURCE> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT>")
-  __compiler_iar_xlink(ASM)
-  set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s51;asm;msa)
-
-else()
-  message(FATAL_ERROR "CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID not detected. This should be automatic.")
-endif()
diff --git a/share/cmake-3.18/Modules/Compiler/IAR-C.cmake b/share/cmake-3.18/Modules/Compiler/IAR-C.cmake
deleted file mode 100644
index e27fdfc..0000000
--- a/share/cmake-3.18/Modules/Compiler/IAR-C.cmake
+++ /dev/null
@@ -1,75 +0,0 @@
-# This file is processed when the IAR compiler is used for a C file
-
-include(Compiler/IAR)
-include(Compiler/CMakeCommonCompilerMacros)
-
-# Common
-if(NOT CMAKE_C_COMPILER_VERSION)
-  message(FATAL_ERROR "CMAKE_C_COMPILER_VERSION not detected.  This should be automatic.")
-endif()
-
-set(CMAKE_C_EXTENSION_COMPILE_OPTION -e)
-
-if(CMAKE_C_COMPILER_VERSION_INTERNAL VERSION_GREATER 7)
-  set(CMAKE_C90_STANDARD_COMPILE_OPTION --c89)
-  set(CMAKE_C90_EXTENSION_COMPILE_OPTION --c89 -e)
-  set(CMAKE_C99_STANDARD_COMPILE_OPTION "")
-  set(CMAKE_C99_EXTENSION_COMPILE_OPTION -e)
-else()
-  set(CMAKE_C90_STANDARD_COMPILE_OPTION "")
-  set(CMAKE_C90_EXTENSION_COMPILE_OPTION -e)
-endif()
-
-if(CMAKE_C_COMPILER_VERSION_INTERNAL VERSION_GREATER 8)
-  set(CMAKE_C11_STANDARD_COMPILE_OPTION "")
-  set(CMAKE_C11_EXTENSION_COMPILE_OPTION -e)
-endif()
-
-# Architecture specific
-if("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "ARM")
-  if(CMAKE_C_COMPILER_VERSION_INTERNAL VERSION_LESS 7)
-    # IAR ARM 4.X uses xlink.exe, detection is not yet implemented
-    message(FATAL_ERROR "CMAKE_C_COMPILER_VERSION = ${CMAKE_C_COMPILER_VERSION} not supported by CMake.")
-  endif()
-  __compiler_iar_ilink(C)
-  __compiler_check_default_language_standard(C 1.10 90 6.10 99 8.10 11)
-
-elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "RX")
-  __compiler_iar_ilink(C)
-  __compiler_check_default_language_standard(C 1.10 90 2.10 99 4.10 11)
-
-elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "RH850")
-  __compiler_iar_ilink(C)
-  __compiler_check_default_language_standard(C 1.10 90 1.10 99 2.10 11)
-
-elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "RL78")
-  __compiler_iar_ilink(C)
-  __compiler_check_default_language_standard(C 1.10 90 1.10 99 4.10 11)
-
-elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "RISCV")
-  __compiler_iar_ilink(C)
-  __compiler_check_default_language_standard(C 1.10 90 1.10 99 1.10 11)
-
-elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "AVR")
-  __compiler_iar_xlink(C)
-  __compiler_check_default_language_standard(C 7.10 99)
-  set(CMAKE_C_OUTPUT_EXTENSION ".r90")
-
-elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "MSP430")
-  __compiler_iar_xlink(C)
-  __compiler_check_default_language_standard(C 1.10 90 5.10 99)
-  set(CMAKE_C_OUTPUT_EXTENSION ".r43")
-
-elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "V850")
-  __compiler_iar_xlink(C)
-  __compiler_check_default_language_standard(C 1.10 90 4.10 99)
-  set(CMAKE_C_OUTPUT_EXTENSION ".r85")
-
-elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "8051")
-  __compiler_iar_xlink(C)
-  __compiler_check_default_language_standard(C 6.10 90 8.10 99)
-  set(CMAKE_C_OUTPUT_EXTENSION ".r51")
-
-else()
-  message(FATAL_ERROR "CMAKE_C_COMPILER_ARCHITECTURE_ID not detected. This should be automatic.")
-endif()
diff --git a/share/cmake-3.18/Modules/Compiler/IAR-CXX.cmake b/share/cmake-3.18/Modules/Compiler/IAR-CXX.cmake
deleted file mode 100644
index eca89c5..0000000
--- a/share/cmake-3.18/Modules/Compiler/IAR-CXX.cmake
+++ /dev/null
@@ -1,83 +0,0 @@
-# This file is processed when the IAR compiler is used for a C++ file
-
-include(Compiler/IAR)
-include(Compiler/CMakeCommonCompilerMacros)
-
-# Common
-if(NOT CMAKE_CXX_COMPILER_VERSION)
-  message(FATAL_ERROR "CMAKE_CXX_COMPILER_VERSION not detected. This should be automatic.")
-endif()
-
-if(NOT CMAKE_IAR_CXX_FLAG)
-  # The --c++ flag was introduced in platform version 9 for all architectures except ARM where it was introduced already in version 7
-  if(CMAKE_CXX_COMPILER_VERSION_INTERNAL VERSION_GREATER 8 OR
-    (CMAKE_CXX_COMPILER_VERSION_INTERNAL VERSION_GREATER 6 AND "${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "ARM") )
-    set(CMAKE_IAR_CXX_FLAG --c++)
-  else()
-    set(CMAKE_IAR_CXX_FLAG --eec++)
-  endif()
-endif()
-
-set(CMAKE_CXX_EXTENSION_COMPILE_OPTION -e)
-
-if(CMAKE_CXX_COMPILER_VERSION_INTERNAL VERSION_GREATER 7)
-  set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "")
-  set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION -e)
-  set(CMAKE_CXX03_STANDARD_COMPILE_OPTION "")
-  set(CMAKE_CXX03_EXTENSION_COMPILE_OPTION -e)
-endif()
-
-if(CMAKE_CXX_COMPILER_VERSION_INTERNAL VERSION_GREATER 8)
-  set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "")
-  set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION -e)
-  set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "")
-  set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION -e)
-endif()
-
-# Architecture specific
-if("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "ARM")
-  if(CMAKE_CXX_COMPILER_VERSION_INTERNAL VERSION_LESS 7)
-    # IAR ARM 4.X uses xlink.exe, detection is not yet implemented
-    message(FATAL_ERROR "CMAKE_CXX_COMPILER_VERSION = ${CMAKE_C_COMPILER_VERSION} not supported by CMake.")
-  endif()
-  __compiler_iar_ilink(CXX)
-  __compiler_check_default_language_standard(CXX 6.10 98 8.10 14)
-
-elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "RX")
-  __compiler_iar_ilink(CXX)
-  __compiler_check_default_language_standard(CXX 2.10 98 4.10 14)
-
-elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "RH850")
-  __compiler_iar_ilink(CXX)
-  __compiler_check_default_language_standard(CXX 1.10 98 2.10 14)
-
-elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "RL78")
-  __compiler_iar_ilink(CXX)
-  __compiler_check_default_language_standard(CXX 1.10 98 4.10 14)
-
-elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "RISCV")
-  __compiler_iar_ilink(CXX)
-  __compiler_check_default_language_standard(CXX 1.10 98 1.10 14)
-
-elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "AVR")
-  __compiler_iar_xlink(CXX)
-  __compiler_check_default_language_standard(CXX 7.10 98)
-
-elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "MSP430")
-  __compiler_iar_xlink(CXX)
-  __compiler_check_default_language_standard(CXX 5.10 98)
-  set(CMAKE_CXX_OUTPUT_EXTENSION ".r43")
-
-elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "V850")
-  __compiler_iar_xlink(CXX)
-  __compiler_check_default_language_standard(CXX 1.10 98)
-  set(CMAKE_C_OUTPUT_EXTENSION ".r85")
-
-elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "8051")
-  __compiler_iar_xlink(CXX)
-  __compiler_check_default_language_standard(CXX 6.10 98)
-  set(CMAKE_C_OUTPUT_EXTENSION ".r51")
-
-else()
-  message(FATAL_ERROR "CMAKE_CXX_COMPILER_ARCHITECTURE_ID not detected. This should be automatic." )
-endif()
diff --git a/share/cmake-3.18/Modules/Compiler/IAR-DetermineCompiler.cmake b/share/cmake-3.18/Modules/Compiler/IAR-DetermineCompiler.cmake
deleted file mode 100644
index 0a026b2..0000000
--- a/share/cmake-3.18/Modules/Compiler/IAR-DetermineCompiler.cmake
+++ /dev/null
@@ -1,39 +0,0 @@
-# IAR Systems compiler for ARM embedded systems.
-#   http://www.iar.com
-#   http://supp.iar.com/FilesPublic/UPDINFO/004916/arm/doc/EWARM_DevelopmentGuide.ENU.pdf
-#
-# __IAR_SYSTEMS_ICC__ An integer that identifies the IAR compiler platform:
-#                       9 and higher means C11 and C++14 as language default
-#                       8 means C99 and C++03 as language default
-#                       7 and lower means C89 and EC++ as language default.
-# __ICCARM__          An integer that is set to 1 when the code is compiled with the IAR C/C++ Compiler for ARM
-# __VER__             An integer that identifies the version number of the IAR compiler in use. For example,
-#                     version 5.11.3 is returned as 5011003.
-#
-# IAR Systems Compiler for AVR embedded systems
-#  http://supp.iar.com/FilesPublic/UPDINFO/007051/ew/doc/EWAVR_CompilerReference.pdf
-#
-# __IAR_SYSTEMS_ICC__ An integer that identifies the IAR compiler platform.
-# __ICCAVR__          An integer that is set to 1 when the code is compiled with the IAR C/C++ Compiler for AVR
-# __VER__             An integer that identifies the version number of the IAR compiler in use.
-#                     The value is calculated by (100 * VERSION_MAJOR + VERSION_MINOR). For example the version
-#                     3.34 is given as 334
-# __SUBVERSION__      An integer that identifies the subversion number of the compiler version number
-#                     for example 3 in 1.2.3.4.  THis is used as the patch version, as seen when running iccavr
-#                     from the command line
-#
-
-set(_compiler_id_pp_test "defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)")
-
-set(_compiler_id_version_compute "
-# if defined(__VER__) && defined(__ICCARM__)
-#  define @PREFIX@COMPILER_VERSION_MAJOR @MACRO_DEC@((__VER__) / 1000000)
-#  define @PREFIX@COMPILER_VERSION_MINOR @MACRO_DEC@(((__VER__) / 1000) % 1000)
-#  define @PREFIX@COMPILER_VERSION_PATCH @MACRO_DEC@((__VER__) % 1000)
-#  define @PREFIX@COMPILER_VERSION_INTERNAL @MACRO_DEC@(__IAR_SYSTEMS_ICC__)
-# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__))
-#  define @PREFIX@COMPILER_VERSION_MAJOR @MACRO_DEC@((__VER__) / 100)
-#  define @PREFIX@COMPILER_VERSION_MINOR @MACRO_DEC@((__VER__) - (((__VER__) / 100)*100))
-#  define @PREFIX@COMPILER_VERSION_PATCH @MACRO_DEC@(__SUBVERSION__)
-#  define @PREFIX@COMPILER_VERSION_INTERNAL @MACRO_DEC@(__IAR_SYSTEMS_ICC__)
-# endif")
diff --git a/share/cmake-3.18/Modules/Compiler/IAR-FindBinUtils.cmake b/share/cmake-3.18/Modules/Compiler/IAR-FindBinUtils.cmake
deleted file mode 100644
index 6ef3759..0000000
--- a/share/cmake-3.18/Modules/Compiler/IAR-FindBinUtils.cmake
+++ /dev/null
@@ -1,63 +0,0 @@
-if(NOT DEFINED _CMAKE_PROCESSING_LANGUAGE OR _CMAKE_PROCESSING_LANGUAGE STREQUAL "")
-  message(FATAL_ERROR "Internal error: _CMAKE_PROCESSING_LANGUAGE is not set")
-endif()
-
-# Try to find tools in the same directory as the compiler itself
-get_filename_component(__iar_hint_1 "${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER}" REALPATH)
-get_filename_component(__iar_hint_1 "${__iar_hint_1}" DIRECTORY)
-
-get_filename_component(__iar_hint_2 "${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER}" DIRECTORY)
-
-set(__iar_hints "${__iar_hint_1}" "${__iar_hint_2}")
-
-if("${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ARCHITECTURE_ID}" STREQUAL "ARM" OR
-   "${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ARCHITECTURE_ID}" STREQUAL "RX" OR
-   "${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ARCHITECTURE_ID}" STREQUAL "RH850" OR
-   "${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ARCHITECTURE_ID}" STREQUAL "RL78" OR
-   "${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ARCHITECTURE_ID}" STREQUAL "RISCV")
-
-  string(TOLOWER "${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ARCHITECTURE_ID}" _archid_lower)
-
-  # Find linker
-  find_program(CMAKE_IAR_LINKER ilink${_archid_lower} HINTS ${__iar_hints}
-      DOC "The IAR ILINK linker")
-  find_program(CMAKE_IAR_ARCHIVE iarchive HINTS ${__iar_hints}
-      DOC "The IAR archiver")
-
-  # Find utility tools
-  find_program(CMAKE_IAR_ELFTOOL ielftool HINTS ${__iar_hints}
-      DOC "The IAR ELF Tool")
-    find_program(CMAKE_IAR_ELFDUMP ielfdump${_archid_lower} HINTS ${__iar_hints}
-      DOC "The IAR ELF Dumper")
-  find_program(CMAKE_IAR_OBJMANIP iobjmanip HINTS ${__iar_hints}
-      DOC "The IAR ELF Object Tool")
-  find_program(CMAKE_IAR_SYMEXPORT isymexport HINTS ${__iar_hints}
-      DOC "The IAR Absolute Symbol Exporter")
-  mark_as_advanced(CMAKE_IAR_LINKER CMAKE_IAR_ARCHIVE CMAKE_IAR_ELFTOOL CMAKE_IAR_ELFDUMP CMAKE_IAR_OBJMANIP CMAKE_IAR_SYMEXPORT)
-
-  set(CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_CUSTOM_CODE
-"set(CMAKE_IAR_LINKER \"${CMAKE_IAR_LINKER}\")
-set(CMAKE_IAR_ARCHIVE \"${CMAKE_IAR_ARCHIVE}\")
-set(CMAKE_IAR_ELFTOOL \"${CMAKE_IAR_ELFTOOL}\")
-set(CMAKE_IAR_ELFDUMP \"${CMAKE_IAR_ELFDUMP}\")
-set(CMAKE_IAR_OBJMANIP \"${CMAKE_IAR_OBJMANIP}\")
-set(CMAKE_IAR_LINKER \"${CMAKE_IAR_LINKER}\")
-")
-
-elseif("${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ARCHITECTURE_ID}" STREQUAL "AVR" OR
-       "${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ARCHITECTURE_ID}" STREQUAL "MSP430" OR
-       "${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ARCHITECTURE_ID}" STREQUAL "V850" OR
-       "${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ARCHITECTURE_ID}" STREQUAL "8051")
-
-  # Find the "xlink" linker and "xar" archiver:
-  find_program(CMAKE_IAR_LINKER xlink HINTS ${__iar_hints}
-      DOC "The IAR XLINK linker")
-  find_program(CMAKE_IAR_AR xar HINTS ${__iar_hints}
-      DOC "The IAR archiver")
-  mark_as_advanced(CMAKE_IAR_LINKER CMAKE_IAR_AR)
-
-  set(CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_CUSTOM_CODE
-"set(CMAKE_IAR_LINKER \"${CMAKE_IAR_LINKER}\")
-set(CMAKE_IAR_AR \"${CMAKE_IAR_AR}\")
-")
-endif()
diff --git a/share/cmake-3.18/Modules/Compiler/IAR.cmake b/share/cmake-3.18/Modules/Compiler/IAR.cmake
deleted file mode 100644
index 296e2fd..0000000
--- a/share/cmake-3.18/Modules/Compiler/IAR.cmake
+++ /dev/null
@@ -1,114 +0,0 @@
-# This file is processed when the IAR compiler is used for a C or C++ file
-# Documentation can be downloaded here: http://www.iar.com/website1/1.0.1.0/675/1/
-# The initial feature request is here: https://gitlab.kitware.com/cmake/cmake/-/issues/10176
-# It also contains additional links and information.
-# See USER GUIDES -> C/C++ Development Guide and ReleaseNotes for EWARM:
-# version 6.30.8: http://supp.iar.com/FilesPublic/UPDINFO/006607/arm/doc/infocenter/index.ENU.html
-# version 7.60.1: http://supp.iar.com/FilesPublic/UPDINFO/011006/arm/doc/infocenter/index.ENU.html
-# version 8.10.1: http://netstorage.iar.com/SuppDB/Public/UPDINFO/011854/arm/doc/infocenter/index.ENU.html
-
-# The IAR internal compiler platform generations (Predefined symbol __IAR_SYSTEMS_ICC__):
-#  9 and higher means C11 and C++14 as language default (EWARM v8.x, EWRX v4.x and higher)
-#  8 means C99 and C++03 as language default (EWARM v6.x, v7.x. EWRX v2.x, 3.x)
-#  7 and lower means C89 and EC++ as language default. (EWARM v5.x and lower)
-
-# C/C++ Standard versions
-#
-# IAR typically only supports one C and C++ Standard version,
-# the exception is C89 which is always supported and can be selected
-# if its not the default
-#
-# C++ is trickier, there were historically 3 switches,
-# and some IAR versions support multiple of those.
-# they are --eec++, --ec++ and --c++ and where used to
-# enable various language features like exceptions
-#
-# recent versions only have --c++ for full support
-# but can choose to disable features with further arguments
-#
-# C/C++ Standard compliance
-#
-# IAR has 3 modes: default, strict and extended
-# the extended mode is needed for popular libraries like CMSIS
-#
-# "Silent" Operation
-#
-# this really is different to most programs I know.
-# nothing meaningful from the operation is lost, just some redundant
-# code and data size printouts (that can be inspected with common tools).
-
-# This module is shared by multiple languages; use include blocker.
-include_guard()
-
-macro(__compiler_iar_ilink lang)
-  set(CMAKE_EXECUTABLE_SUFFIX ".elf")
-  if (${lang} STREQUAL "C" OR ${lang} STREQUAL "CXX")
-    set(CMAKE_${lang}_COMPILE_OBJECT             "<CMAKE_${lang}_COMPILER> ${CMAKE_IAR_${lang}_FLAG} --silent <SOURCE> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT>")
-    set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE "<CMAKE_${lang}_COMPILER> ${CMAKE_IAR_${lang}_FLAG} --silent <SOURCE> <DEFINES> <INCLUDES> <FLAGS> --preprocess=cnl <PREPROCESSED_SOURCE>")
-    set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE     "<CMAKE_${lang}_COMPILER> ${CMAKE_IAR_${lang}_FLAG} --silent <SOURCE> <DEFINES> <INCLUDES> <FLAGS> -lAH <ASSEMBLY_SOURCE> -o <OBJECT>.dummy")
-
-    set(CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG "-f ")
-    set(CMAKE_DEPFILE_FLAGS_${lang} "--dependencies=ns <DEPFILE>")
-
-    string(APPEND CMAKE_${lang}_FLAGS_INIT " ")
-    string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -r")
-    string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -Ohz -DNDEBUG")
-    string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -Oh -DNDEBUG")
-    string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -Oh -r -DNDEBUG")
-  endif()
-
-  if (${lang} STREQUAL "ASM")
-    string(APPEND CMAKE_ASM_FLAGS_INIT " ")
-    string(APPEND CMAKE_ASM_FLAGS_DEBUG_INIT " -r")
-    string(APPEND CMAKE_ASM_FLAGS_MINSIZEREL_INIT " -DNDEBUG")
-    string(APPEND CMAKE_ASM_FLAGS_RELEASE_INIT " -DNDEBUG")
-    string(APPEND CMAKE_ASM_FLAGS_RELWITHDEBINFO_INIT " -r -DNDEBUG")
-  endif()
-
-  set(CMAKE_${lang}_LINK_EXECUTABLE "\"${CMAKE_IAR_LINKER}\" --silent <OBJECTS> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES> -o <TARGET>")
-  set(CMAKE_${lang}_CREATE_STATIC_LIBRARY "\"${CMAKE_IAR_ARCHIVE}\" <TARGET> --create <LINK_FLAGS> <OBJECTS>")
-  set(CMAKE_${lang}_ARCHIVE_CREATE "\"${CMAKE_IAR_ARCHIVE}\" <TARGET> --create <LINK_FLAGS> <OBJECTS>")
-  set(CMAKE_${lang}_ARCHIVE_APPEND "\"${CMAKE_IAR_ARCHIVE}\" <TARGET> --replace <LINK_FLAGS> <OBJECTS>")
-  set(CMAKE_${lang}_ARCHIVE_FINISH "")
-
-  set(CMAKE_LINKER "${CMAKE_IAR_LINKER}" CACHE FILEPATH "The IAR linker" FORCE)
-  set(CMAKE_AR "${CMAKE_IAR_ARCHIVE}" CACHE FILEPATH "The IAR archiver" FORCE)
-endmacro()
-
-macro(__compiler_iar_xlink lang)
-  set(CMAKE_EXECUTABLE_SUFFIX ".bin")
-  if (${lang} STREQUAL "C" OR ${lang} STREQUAL "CXX")
-
-    set(CMAKE_${lang}_COMPILE_OBJECT             "<CMAKE_${lang}_COMPILER> ${CMAKE_IAR_${lang}_FLAG} --silent <SOURCE> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT>")
-    set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE "<CMAKE_${lang}_COMPILER> ${CMAKE_IAR_${lang}_FLAG} --silent <SOURCE> <DEFINES> <INCLUDES> <FLAGS> --preprocess=cnl <PREPROCESSED_SOURCE>")
-    set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE     "<CMAKE_${lang}_COMPILER> ${CMAKE_IAR_${lang}_FLAG} --silent <SOURCE> <DEFINES> <INCLUDES> <FLAGS> -lAH <ASSEMBLY_SOURCE> -o <OBJECT>.dummy")
-
-    set(CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG "-f ")
-    set(CMAKE_DEPFILE_FLAGS_${lang} "--dependencies=ns <DEPFILE>")
-
-    string(APPEND CMAKE_${lang}_FLAGS_INIT " ")
-    string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -r")
-    string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -Ohz -DNDEBUG")
-    string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -Oh -DNDEBUG")
-    string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -Oh -r -DNDEBUG")
-  endif()
-
-  if (${lang} STREQUAL "ASM")
-    string(APPEND CMAKE_ASM_FLAGS_INIT " ")
-    string(APPEND CMAKE_ASM_FLAGS_DEBUG_INIT " -r")
-    string(APPEND CMAKE_ASM_FLAGS_MINSIZEREL_INIT " -DNDEBUG")
-    string(APPEND CMAKE_ASM_FLAGS_RELEASE_INIT " -DNDEBUG")
-    string(APPEND CMAKE_ASM_FLAGS_RELWITHDEBINFO_INIT " -r -DNDEBUG")
-  endif()
-
-  set(CMAKE_${lang}_LINK_EXECUTABLE "\"${CMAKE_IAR_LINKER}\" -S <OBJECTS> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES> -o <TARGET>")
-  set(CMAKE_${lang}_CREATE_STATIC_LIBRARY "\"${CMAKE_IAR_AR}\" <TARGET> <LINK_FLAGS> <OBJECTS>")
-  set(CMAKE_${lang}_ARCHIVE_CREATE "\"${CMAKE_IAR_AR}\" <TARGET> <LINK_FLAGS> <OBJECTS>")
-  set(CMAKE_${lang}_ARCHIVE_APPEND "")
-  set(CMAKE_${lang}_ARCHIVE_FINISH "")
-
-  set(CMAKE_LIBRARY_PATH_FLAG "-I")
-
-  set(CMAKE_LINKER "${CMAKE_IAR_LINKER}" CACHE FILEPATH "The IAR linker" FORCE)
-  set(CMAKE_AR "${CMAKE_IAR_AR}" CACHE FILEPATH "The IAR archiver" FORCE)
-endmacro()
diff --git a/share/cmake-3.18/Modules/Compiler/Intel-C.cmake b/share/cmake-3.18/Modules/Compiler/Intel-C.cmake
deleted file mode 100644
index ec3bfd8..0000000
--- a/share/cmake-3.18/Modules/Compiler/Intel-C.cmake
+++ /dev/null
@@ -1,51 +0,0 @@
-include(Compiler/Intel)
-__compiler_intel(C)
-
-string(APPEND CMAKE_C_FLAGS_MINSIZEREL_INIT " -DNDEBUG")
-string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " -DNDEBUG")
-string(APPEND CMAKE_C_FLAGS_RELWITHDEBINFO_INIT " -DNDEBUG")
-
-set(CMAKE_DEPFILE_FLAGS_C "-MD -MT <OBJECT> -MF <DEPFILE>")
-
-if("x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC")
-
-  set(CMAKE_C_CLANG_TIDY_DRIVER_MODE "cl")
-
-  if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 16.0.0)
-    set(CMAKE_C11_STANDARD_COMPILE_OPTION "-Qstd=c11")
-    set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-Qstd=c11")
-    set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
-  endif()
-
-  if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 12.0)
-    set(CMAKE_C90_STANDARD_COMPILE_OPTION "-Qstd=c89")
-    set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-Qstd=c89")
-    set(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT ON)
-    set(CMAKE_C99_STANDARD_COMPILE_OPTION "-Qstd=c99")
-    set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-Qstd=c99")
-    set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
-  endif()
-
-else()
-
-  if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 15.0.0)
-    set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
-    set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
-    set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
-  endif()
-
-  if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 12.0)
-    set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c89")
-    set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=gnu89")
-    set(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT ON)
-    set(CMAKE_C99_STANDARD_COMPILE_OPTION "-std=c99")
-    set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-std=gnu99")
-    set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
-  endif()
-
-endif()
-
-__compiler_check_default_language_standard(C 12.0 90 15.0.0 11)
-
-set(CMAKE_C_CREATE_PREPROCESSED_SOURCE "<CMAKE_C_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
-set(CMAKE_C_CREATE_ASSEMBLY_SOURCE "<CMAKE_C_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>")
diff --git a/share/cmake-3.18/Modules/Compiler/Intel-CXX.cmake b/share/cmake-3.18/Modules/Compiler/Intel-CXX.cmake
deleted file mode 100644
index b71b946..0000000
--- a/share/cmake-3.18/Modules/Compiler/Intel-CXX.cmake
+++ /dev/null
@@ -1,96 +0,0 @@
-include(Compiler/Intel)
-__compiler_intel(CXX)
-
-string(APPEND CMAKE_CXX_FLAGS_MINSIZEREL_INIT " -DNDEBUG")
-string(APPEND CMAKE_CXX_FLAGS_RELEASE_INIT " -DNDEBUG")
-string(APPEND CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT " -DNDEBUG")
-
-set(CMAKE_DEPFILE_FLAGS_CXX "-MD -MT <OBJECT> -MF <DEPFILE>")
-
-if("x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
-
-  set(CMAKE_CXX_CLANG_TIDY_DRIVER_MODE "cl")
-
-  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.0.0)
-    set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-Qstd=c++20")
-    set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-Qstd=c++20")
-  endif()
-
-  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 18.0.0)
-    set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-Qstd=c++17")
-    set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-Qstd=c++17")
-  endif()
-
-  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16.0)
-    set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-Qstd=c++14")
-    set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-Qstd=c++14")
-  endif()
-
-  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13.0)
-    set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-Qstd=c++11")
-    set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-Qstd=c++11")
-  elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.1)
-    set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-Qstd=c++0x")
-    set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-Qstd=c++0x")
-  endif()
-
-  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.1)
-    set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "")
-    set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "")
-    set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
-  endif()
-
-else()
-
-  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.0.0)
-    set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std=c++20")
-    set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std=gnu++20")
-  endif()
-
-  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 18.0.0)
-    set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++17")
-    set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++17")
-  endif()
-
-  if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 17.0)
-    set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
-  endif()
-
-  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0.2)
-    set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++14")
-  elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0.0)
-    set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++1y")
-  endif()
-
-  # Intel 15.0.2 accepts c++14 instead of c++1y, but not gnu++14
-  # instead of gnu++1y.  Intel 17.0.0 accepts gnu++14 too.
-  if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 17.0)
-    set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++14")
-  elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0.0)
-    set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++1y")
-  endif()
-
-  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0)
-    set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
-  endif()
-
-  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13.0)
-    set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++11")
-    set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++11")
-  elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.1)
-    set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++0x")
-    set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++0x")
-  endif()
-
-  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.1)
-    set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "-std=c++98")
-    set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "-std=gnu++98")
-    set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
-  endif()
-
-endif()
-
-__compiler_check_default_language_standard(CXX 12.1 98)
-
-set(CMAKE_CXX_CREATE_PREPROCESSED_SOURCE "<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
-set(CMAKE_CXX_CREATE_ASSEMBLY_SOURCE "<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>")
diff --git a/share/cmake-3.18/Modules/Compiler/Intel-DetermineCompiler.cmake b/share/cmake-3.18/Modules/Compiler/Intel-DetermineCompiler.cmake
deleted file mode 100644
index c31aa77..0000000
--- a/share/cmake-3.18/Modules/Compiler/Intel-DetermineCompiler.cmake
+++ /dev/null
@@ -1,40 +0,0 @@
-
-set(_compiler_id_pp_test "defined(__INTEL_COMPILER) || defined(__ICC)")
-
-set(_compiler_id_version_compute "
-  /* __INTEL_COMPILER = VRP */
-# define @PREFIX@COMPILER_VERSION_MAJOR @MACRO_DEC@(__INTEL_COMPILER/100)
-# define @PREFIX@COMPILER_VERSION_MINOR @MACRO_DEC@(__INTEL_COMPILER/10 % 10)
-# if defined(__INTEL_COMPILER_UPDATE)
-#  define @PREFIX@COMPILER_VERSION_PATCH @MACRO_DEC@(__INTEL_COMPILER_UPDATE)
-# else
-#  define @PREFIX@COMPILER_VERSION_PATCH @MACRO_DEC@(__INTEL_COMPILER   % 10)
-# endif
-# if defined(__INTEL_COMPILER_BUILD_DATE)
-  /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */
-#  define @PREFIX@COMPILER_VERSION_TWEAK @MACRO_DEC@(__INTEL_COMPILER_BUILD_DATE)
-# endif
-# if defined(_MSC_VER)
-   /* _MSC_VER = VVRR */
-#  define @PREFIX@SIMULATE_VERSION_MAJOR @MACRO_DEC@(_MSC_VER / 100)
-#  define @PREFIX@SIMULATE_VERSION_MINOR @MACRO_DEC@(_MSC_VER % 100)
-# endif
-# if defined(__GNUC__)
-#  define @PREFIX@SIMULATE_VERSION_MAJOR @MACRO_DEC@(__GNUC__)
-# elif defined(__GNUG__)
-#  define @PREFIX@SIMULATE_VERSION_MAJOR @MACRO_DEC@(__GNUG__)
-# endif
-# if defined(__GNUC_MINOR__)
-#  define @PREFIX@SIMULATE_VERSION_MINOR @MACRO_DEC@(__GNUC_MINOR__)
-# endif
-# if defined(__GNUC_PATCHLEVEL__)
-#  define @PREFIX@SIMULATE_VERSION_PATCH @MACRO_DEC@(__GNUC_PATCHLEVEL__)
-# endif")
-
-set(_compiler_id_simulate "
-# if defined(_MSC_VER)
-#  define @PREFIX@SIMULATE_ID \"MSVC\"
-# endif
-# if defined(__GNUC__)
-#  define @PREFIX@SIMULATE_ID \"GNU\"
-# endif")
diff --git a/share/cmake-3.18/Modules/Compiler/Intel-Fortran.cmake b/share/cmake-3.18/Modules/Compiler/Intel-Fortran.cmake
deleted file mode 100644
index 71f25f4..0000000
--- a/share/cmake-3.18/Modules/Compiler/Intel-Fortran.cmake
+++ /dev/null
@@ -1,19 +0,0 @@
-include(Compiler/Intel)
-__compiler_intel(Fortran)
-
-set(CMAKE_Fortran_SUBMODULE_SEP "@")
-set(CMAKE_Fortran_SUBMODULE_EXT ".smod")
-
-set(CMAKE_Fortran_MODDIR_FLAG "-module ")
-set(CMAKE_Fortran_FORMAT_FIXED_FLAG "-fixed")
-set(CMAKE_Fortran_FORMAT_FREE_FLAG "-free")
-
-set(CMAKE_Fortran_COMPILE_WITH_DEFINES 1)
-
-set(CMAKE_Fortran_CREATE_PREPROCESSED_SOURCE "<CMAKE_Fortran_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
-set(CMAKE_Fortran_CREATE_ASSEMBLY_SOURCE "<CMAKE_Fortran_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>")
-
-set(CMAKE_Fortran_PREPROCESS_SOURCE
-  "<CMAKE_Fortran_COMPILER> -fpp <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
-set(CMAKE_Fortran_COMPILE_OPTIONS_PREPROCESS_ON "-fpp")
-set(CMAKE_Fortran_COMPILE_OPTIONS_PREPROCESS_OFF "-nofpp")
diff --git a/share/cmake-3.18/Modules/Compiler/MSVC-C-FeatureTests.cmake b/share/cmake-3.18/Modules/Compiler/MSVC-C-FeatureTests.cmake
deleted file mode 100644
index 3f09be2..0000000
--- a/share/cmake-3.18/Modules/Compiler/MSVC-C-FeatureTests.cmake
+++ /dev/null
@@ -1,8 +0,0 @@
-set(_cmake_oldestSupported "_MSC_VER >= 1600")
-
-# Not yet supported:
-#set(_cmake_feature_test_c_static_assert "")
-#set(_cmake_feature_test_c_restrict "")
-
-set(_cmake_feature_test_c_variadic_macros "${_cmake_oldestSupported}")
-set(_cmake_feature_test_c_function_prototypes "${_cmake_oldestSupported}")
diff --git a/share/cmake-3.18/Modules/Compiler/MSVC-C.cmake b/share/cmake-3.18/Modules/Compiler/MSVC-C.cmake
deleted file mode 100644
index bca9764..0000000
--- a/share/cmake-3.18/Modules/Compiler/MSVC-C.cmake
+++ /dev/null
@@ -1,40 +0,0 @@
-# MSVC has no specific options to set C language standards, but set them as
-# empty strings anyways so the feature test infrastructure can at least check
-# to see if they are defined.
-set(CMAKE_C90_STANDARD_COMPILE_OPTION "")
-set(CMAKE_C90_EXTENSION_COMPILE_OPTION "")
-set(CMAKE_C99_STANDARD_COMPILE_OPTION "")
-set(CMAKE_C99_EXTENSION_COMPILE_OPTION "")
-set(CMAKE_C11_STANDARD_COMPILE_OPTION "")
-set(CMAKE_C11_EXTENSION_COMPILE_OPTION "")
-
-# There is no meaningful default for this
-set(CMAKE_C_STANDARD_DEFAULT "")
-
-set(CMAKE_C_CLANG_TIDY_DRIVER_MODE "cl")
-
-# There are no C compiler modes so we hard-code the known compiler supported
-# features. Override the default macro for this special case.  Pretend that
-# all language standards are available so that at least compilation
-# can be attempted.
-macro(cmake_record_c_compile_features)
-  list(APPEND CMAKE_C_COMPILE_FEATURES
-    c_std_90
-    c_std_99
-    c_std_11
-    c_function_prototypes
-    )
-  list(APPEND CMAKE_C90_COMPILE_FEATURES c_std_90 c_function_prototypes)
-  list(APPEND CMAKE_C99_COMPILE_FEATURES c_std_99)
-  list(APPEND CMAKE_C11_COMPILE_FEATURES c_std_11)
-  if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 14.0)
-    list(APPEND CMAKE_C_COMPILE_FEATURES c_variadic_macros)
-    list(APPEND CMAKE_C99_COMPILE_FEATURES c_variadic_macros)
-  endif()
-  set(_result 0) # expected by cmake_determine_compile_features
-endmacro()
-
-# /JMC "Just My Code" is only supported by MSVC 19.05 onward.
-if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 19.05)
-  set(CMAKE_C_COMPILE_OPTIONS_JMC "-JMC")
-endif()
diff --git a/share/cmake-3.18/Modules/Compiler/MSVC-CXX.cmake b/share/cmake-3.18/Modules/Compiler/MSVC-CXX.cmake
deleted file mode 100644
index 1dfc760..0000000
--- a/share/cmake-3.18/Modules/Compiler/MSVC-CXX.cmake
+++ /dev/null
@@ -1,74 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-include(Compiler/CMakeCommonCompilerMacros)
-
-set(CMAKE_CXX_CLANG_TIDY_DRIVER_MODE "cl")
-
-if ((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.0.24215.1 AND
-     CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.10) OR
-   CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.10.25017)
-
-  # VS 2015 Update 3 and above support language standard level flags,
-  # with the default and minimum level being C++14.
-  set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "")
-  set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "")
-  set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
-  set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "")
-  set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "")
-  set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std:c++14")
-  set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std:c++14")
-  if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.11.25505)
-    set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
-    set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
-    set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std:c++17")
-    set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std:c++17")
-  else()
-    set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std:c++latest")
-    set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std:c++latest")
-  endif()
-  if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.12.25835)
-    set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std:c++latest")
-    set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std:c++latest")
-  endif()
-
-  __compiler_check_default_language_standard(CXX 19.0 14)
-
-elseif (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 16.0)
-  # MSVC has no specific options to set language standards, but set them as
-  # empty strings anyways so the feature test infrastructure can at least check
-  # to see if they are defined.
-  set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "")
-  set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "")
-  set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "")
-  set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "")
-  set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "")
-  set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "")
-  set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "")
-  set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "")
-  set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "")
-  set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "")
-
-  # There is no meaningful default for this
-  set(CMAKE_CXX_STANDARD_DEFAULT "")
-
-  # There are no compiler modes so we only need to test features once.
-  # Override the default macro for this special case.  Pretend that
-  # all language standards are available so that at least compilation
-  # can be attempted.
-  macro(cmake_record_cxx_compile_features)
-    list(APPEND CMAKE_CXX_COMPILE_FEATURES
-      cxx_std_98
-      cxx_std_11
-      cxx_std_14
-      cxx_std_17
-      cxx_std_20
-      )
-    _record_compiler_features(CXX "" CMAKE_CXX_COMPILE_FEATURES)
-  endmacro()
-endif()
-
-# /JMC "Just My Code" is only supported by MSVC 19.05 onward.
-if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.05)
-  set(CMAKE_CXX_COMPILE_OPTIONS_JMC "-JMC")
-endif()
diff --git a/share/cmake-3.18/Modules/Compiler/NAG-Fortran.cmake b/share/cmake-3.18/Modules/Compiler/NAG-Fortran.cmake
deleted file mode 100644
index ffce97e..0000000
--- a/share/cmake-3.18/Modules/Compiler/NAG-Fortran.cmake
+++ /dev/null
@@ -1,40 +0,0 @@
-# Help CMAKE_PARSE_IMPLICIT_LINK_INFO detect NAG Fortran object files.
-if(NOT CMAKE_Fortran_COMPILER_WORKS AND NOT CMAKE_Fortran_COMPILER_FORCED)
-  message(CHECK_START "Detecting NAG Fortran directory")
-  # Run with -dryrun to see sample "link" line.
-  execute_process(
-    COMMAND ${CMAKE_Fortran_COMPILER} dummy.o -dryrun
-    OUTPUT_VARIABLE _dryrun
-    ERROR_VARIABLE _dryrun
-    )
-  # Match an object file.
-  string(REGEX MATCH "/[^ ]*/[^ /][^ /]*\\.o" _nag_obj "${_dryrun}")
-  if(_nag_obj)
-    # Parse object directory and convert to a regex.
-    string(REGEX REPLACE "/[^/]*$" "" _nag_dir "${_nag_obj}")
-    string(REGEX REPLACE "([][+.*()^])" "\\\\\\1" _nag_regex "${_nag_dir}")
-    set(CMAKE_Fortran_IMPLICIT_OBJECT_REGEX "^${_nag_regex}/")
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-      "Detecting NAG Fortran directory with -dryrun found\n"
-      "  object: ${_nag_obj}\n"
-      "  directory: ${_nag_dir}\n"
-      "  regex: ${CMAKE_Fortran_IMPLICIT_OBJECT_REGEX}\n"
-      "from output:\n${_dryrun}\n\n")
-    message(CHECK_PASS "${_nag_dir}")
-  else()
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-      "Detecting NAG Fortran directory with -dryrun failed:\n${_dryrun}\n\n")
-    message(CHECK_FAIL "failed")
-  endif()
-endif()
-
-set(CMAKE_Fortran_SUBMODULE_SEP ".")
-set(CMAKE_Fortran_SUBMODULE_EXT ".sub")
-set(CMAKE_Fortran_MODDIR_FLAG "-mdir ")
-set(CMAKE_SHARED_LIBRARY_Fortran_FLAGS "-PIC")
-set(CMAKE_Fortran_FORMAT_FIXED_FLAG "-fixed")
-set(CMAKE_Fortran_FORMAT_FREE_FLAG "-free")
-set(CMAKE_Fortran_COMPILE_OPTIONS_PIC "-PIC")
-set(CMAKE_Fortran_COMPILE_OPTIONS_PIE "-PIC")
-set(CMAKE_Fortran_RESPONSE_FILE_LINK_FLAG "-Wl,@")
-set(CMAKE_Fortran_COMPILE_OPTIONS_PREPROCESS_ON "-fpp")
diff --git a/share/cmake-3.18/Modules/Compiler/NVIDIA-CUDA.cmake b/share/cmake-3.18/Modules/Compiler/NVIDIA-CUDA.cmake
deleted file mode 100644
index feb5ecc..0000000
--- a/share/cmake-3.18/Modules/Compiler/NVIDIA-CUDA.cmake
+++ /dev/null
@@ -1,119 +0,0 @@
-include(Compiler/CMakeCommonCompilerMacros)
-
-set(CMAKE_CUDA_COMPILER_HAS_DEVICE_LINK_PHASE True)
-set(CMAKE_CUDA_VERBOSE_FLAG "-v")
-set(CMAKE_CUDA_VERBOSE_COMPILE_FLAG "-Xcompiler=-v")
-
-set(_CMAKE_COMPILE_AS_CUDA_FLAG "-x cu")
-set(_CMAKE_CUDA_PTX_FLAG "-ptx")
-
-if (CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL 10.2.89)
-  # The -forward-unknown-to-host-compiler flag was only
-  # added to nvcc in 10.2 so before that we had no good
-  # way to invoke the CUDA compiler and propagate unknown
-  # flags such as -pthread to the host compiler
-  set(_CMAKE_CUDA_EXTRA_FLAGS "-forward-unknown-to-host-compiler")
-else()
-  set(_CMAKE_CUDA_EXTRA_FLAGS "")
-endif()
-
-if(CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL "8.0.0")
-  set(_CMAKE_CUDA_EXTRA_DEVICE_LINK_FLAGS "-Wno-deprecated-gpu-targets")
-else()
-  set(_CMAKE_CUDA_EXTRA_DEVICE_LINK_FLAGS "")
-endif()
-
-if (CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL 10.2.89)
-  # The -MD flag was only added to nvcc in 10.2 so
-  # before that we had to invoke the compiler twice
-  # to get header dependency information
-  set(CMAKE_DEPFILE_FLAGS_CUDA "-MD -MT <OBJECT> -MF <DEPFILE>")
-endif()
-
-if(NOT "x${CMAKE_CUDA_SIMULATE_ID}" STREQUAL "xMSVC")
-  set(CMAKE_CUDA_COMPILE_OPTIONS_PIE -Xcompiler=-fPIE)
-  set(CMAKE_CUDA_COMPILE_OPTIONS_PIC -Xcompiler=-fPIC)
-  set(CMAKE_CUDA_COMPILE_OPTIONS_VISIBILITY -Xcompiler=-fvisibility=)
-  # CMAKE_SHARED_LIBRARY_CUDA_FLAGS is sent to the host linker so we
-  # don't need to forward it through nvcc.
-  set(CMAKE_SHARED_LIBRARY_CUDA_FLAGS -fPIC)
-  string(APPEND CMAKE_CUDA_FLAGS_INIT " ")
-  string(APPEND CMAKE_CUDA_FLAGS_DEBUG_INIT " -g")
-  string(APPEND CMAKE_CUDA_FLAGS_RELEASE_INIT " -O3 -DNDEBUG")
-  string(APPEND CMAKE_CUDA_FLAGS_MINSIZEREL_INIT " -O1 -DNDEBUG")
-  string(APPEND CMAKE_CUDA_FLAGS_RELWITHDEBINFO_INIT " -O2 -g -DNDEBUG")
-endif()
-set(CMAKE_SHARED_LIBRARY_CREATE_CUDA_FLAGS -shared)
-set(CMAKE_INCLUDE_SYSTEM_FLAG_CUDA -isystem=)
-
-if (CMAKE_CUDA_SIMULATE_ID STREQUAL "GNU")
-  set(CMAKE_CUDA_LINKER_WRAPPER_FLAG "-Wl,")
-  set(CMAKE_CUDA_LINKER_WRAPPER_FLAG_SEP ",")
-elseif(CMAKE_CUDA_SIMULATE_ID STREQUAL "Clang")
-  set(CMAKE_CUDA_LINKER_WRAPPER_FLAG "-Xlinker" " ")
-  set(CMAKE_CUDA_LINKER_WRAPPER_FLAG_SEP)
-endif()
-
-set(CMAKE_CUDA_DEVICE_COMPILER_WRAPPER_FLAG "-Xcompiler=")
-set(CMAKE_CUDA_DEVICE_COMPILER_WRAPPER_FLAG_SEP ",")
-set(CMAKE_CUDA_DEVICE_LINKER_WRAPPER_FLAG "-Xlinker=")
-set(CMAKE_CUDA_DEVICE_LINKER_WRAPPER_FLAG_SEP ",")
-
-set(CMAKE_CUDA_RUNTIME_LIBRARY_LINK_OPTIONS_STATIC  "cudadevrt;cudart_static")
-set(CMAKE_CUDA_RUNTIME_LIBRARY_LINK_OPTIONS_SHARED  "cudadevrt;cudart")
-set(CMAKE_CUDA_RUNTIME_LIBRARY_LINK_OPTIONS_NONE    "")
-
-if(UNIX)
-  list(APPEND CMAKE_CUDA_RUNTIME_LIBRARY_LINK_OPTIONS_STATIC "rt" "pthread" "dl")
-endif()
-
-if("x${CMAKE_CUDA_SIMULATE_ID}" STREQUAL "xMSVC")
-  set(CMAKE_CUDA03_STANDARD_COMPILE_OPTION "")
-  set(CMAKE_CUDA03_EXTENSION_COMPILE_OPTION "")
-
-  set(CMAKE_CUDA11_STANDARD_COMPILE_OPTION "")
-  set(CMAKE_CUDA11_EXTENSION_COMPILE_OPTION "")
-
-  if (NOT CMAKE_CUDA_COMPILER_VERSION VERSION_LESS 9.0)
-    set(CMAKE_CUDA14_STANDARD_COMPILE_OPTION "")
-    set(CMAKE_CUDA14_EXTENSION_COMPILE_OPTION "")
-  endif()
-
-  if (NOT CMAKE_CUDA_COMPILER_VERSION VERSION_LESS 11.0)
-    set(CMAKE_CUDA17_STANDARD_COMPILE_OPTION "")
-    set(CMAKE_CUDA17_EXTENSION_COMPILE_OPTION "")
-  endif()
-
-else()
-  set(CMAKE_CUDA03_STANDARD_COMPILE_OPTION "")
-  set(CMAKE_CUDA03_EXTENSION_COMPILE_OPTION "")
-
-  set(CMAKE_CUDA11_STANDARD_COMPILE_OPTION "-std=c++11")
-  set(CMAKE_CUDA11_EXTENSION_COMPILE_OPTION "-std=c++11")
-
-  if (NOT CMAKE_CUDA_COMPILER_VERSION VERSION_LESS 9.0)
-    set(CMAKE_CUDA03_STANDARD_COMPILE_OPTION "-std=c++03")
-    set(CMAKE_CUDA03_EXTENSION_COMPILE_OPTION "-std=c++03")
-    set(CMAKE_CUDA14_STANDARD_COMPILE_OPTION "-std=c++14")
-    set(CMAKE_CUDA14_EXTENSION_COMPILE_OPTION "-std=c++14")
-  endif()
-
-  if (NOT CMAKE_CUDA_COMPILER_VERSION VERSION_LESS 11.0)
-    set(CMAKE_CUDA17_STANDARD_COMPILE_OPTION "-std=c++17")
-    set(CMAKE_CUDA17_EXTENSION_COMPILE_OPTION "-std=c++17")
-  endif()
-
-endif()
-
-# FIXME: investigate use of --options-file.
-# Tell Makefile generator that nvcc does not support @<rspfile> syntax.
-set(CMAKE_CUDA_USE_RESPONSE_FILE_FOR_INCLUDES 0)
-set(CMAKE_CUDA_USE_RESPONSE_FILE_FOR_LIBRARIES 0)
-set(CMAKE_CUDA_USE_RESPONSE_FILE_FOR_OBJECTS 0)
-
-if (CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL "9.0")
-  set(CMAKE_CUDA_RESPONSE_FILE_DEVICE_LINK_FLAG "--options-file ")
-  set(CMAKE_CUDA_RESPONSE_FILE_FLAG "--options-file ")
-endif()
-
-__compiler_check_default_language_standard(CUDA 6.0 03)
diff --git a/share/cmake-3.18/Modules/Compiler/OpenWatcom.cmake b/share/cmake-3.18/Modules/Compiler/OpenWatcom.cmake
deleted file mode 100644
index 9efbfc2..0000000
--- a/share/cmake-3.18/Modules/Compiler/OpenWatcom.cmake
+++ /dev/null
@@ -1,118 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-# This module is shared by multiple languages; use include blocker.
-include_guard()
-
-set(CMAKE_LIBRARY_PATH_FLAG "libpath ")
-set(CMAKE_LINK_LIBRARY_FLAG "library ")
-set(CMAKE_LINK_LIBRARY_FILE_FLAG "library ")
-
-if(CMAKE_VERBOSE_MAKEFILE)
-  set(CMAKE_WCL_QUIET)
-  set(CMAKE_WLINK_QUIET)
-  set(CMAKE_LIB_QUIET)
-else()
-  set(CMAKE_WCL_QUIET "-zq")
-  set(CMAKE_WLINK_QUIET "option quiet")
-  set(CMAKE_LIB_QUIET "-q")
-endif()
-
-foreach(type CREATE_SHARED_LIBRARY CREATE_SHARED_MODULE LINK_EXECUTABLE)
-  set(CMAKE_C_${type}_USE_WATCOM_QUOTE 1)
-  set(CMAKE_CXX_${type}_USE_WATCOM_QUOTE 1)
-endforeach()
-
-foreach(type SHARED MODULE EXE)
-  # linker map file creation directives
-  string(APPEND CMAKE_${type}_LINKER_FLAGS_INIT " opt map")
-  # linker debug directives
-  string(APPEND CMAKE_${type}_LINKER_FLAGS_DEBUG_INIT " debug all")
-  string(APPEND CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO_INIT " debug all")
-endforeach()
-
-foreach(lang C CXX)
-  # warning level
-  string(APPEND CMAKE_${lang}_FLAGS_INIT " -w3")
-  # debug options
-  string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -d2")
-  string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -s -os -d0 -dNDEBUG")
-  string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -s -ot -d0 -dNDEBUG")
-  string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -s -ot -d1 -dNDEBUG")
-endforeach()
-
-# C create import library
-set(CMAKE_C_CREATE_IMPORT_LIBRARY
-  "wlib -c -q -n -b <TARGET_IMPLIB> +<TARGET_QUOTED>")
-# C++ create import library
-set(CMAKE_CXX_CREATE_IMPORT_LIBRARY ${CMAKE_C_CREATE_IMPORT_LIBRARY})
-
-# C link a object files into an executable file
-set(CMAKE_C_LINK_EXECUTABLE
-  "wlink ${CMAKE_WLINK_QUIET} name <TARGET> <LINK_FLAGS> file {<OBJECTS>} <LINK_LIBRARIES>")
-# C++ link a object files into an executable file
-set(CMAKE_CXX_LINK_EXECUTABLE ${CMAKE_C_LINK_EXECUTABLE})
-
-# C compile a file into an object file
-set(CMAKE_C_COMPILE_OBJECT
-  "<CMAKE_C_COMPILER> ${CMAKE_WCL_QUIET} -d+ <DEFINES> <INCLUDES> <FLAGS> -fo<OBJECT> -c -cc <SOURCE>")
-# C++ compile a file into an object file
-set(CMAKE_CXX_COMPILE_OBJECT
-  "<CMAKE_CXX_COMPILER> ${CMAKE_WCL_QUIET} -d+ <DEFINES> <INCLUDES> <FLAGS> -fo<OBJECT> -c -cc++ <SOURCE>")
-
-# C preprocess a source file
-set(CMAKE_C_CREATE_PREPROCESSED_SOURCE
-  "<CMAKE_C_COMPILER> ${CMAKE_WCL_QUIET} -d+ <DEFINES> <INCLUDES> <FLAGS> -fo<PREPROCESSED_SOURCE> -pl -cc <SOURCE>")
-# C++ preprocess a source file
-set(CMAKE_CXX_CREATE_PREPROCESSED_SOURCE
-  "<CMAKE_CXX_COMPILER> ${CMAKE_WCL_QUIET} -d+ <DEFINES> <INCLUDES> <FLAGS> -fo<PREPROCESSED_SOURCE> -pl -cc++ <SOURCE>")
-
-# C create a shared library
-set(CMAKE_C_CREATE_SHARED_LIBRARY
-  "wlink ${CMAKE_WLINK_QUIET} name <TARGET> <LINK_FLAGS> option implib=<TARGET_IMPLIB> file {<OBJECTS>} <LINK_LIBRARIES>")
-# C++ create a shared library
-set(CMAKE_CXX_CREATE_SHARED_LIBRARY ${CMAKE_C_CREATE_SHARED_LIBRARY})
-
-# C create a shared module
-set(CMAKE_C_CREATE_SHARED_MODULE
-  "wlink ${CMAKE_WLINK_QUIET} name <TARGET> <LINK_FLAGS> file {<OBJECTS>} <LINK_LIBRARIES>")
-# C++ create a shared module
-set(CMAKE_CXX_CREATE_SHARED_MODULE ${CMAKE_C_CREATE_SHARED_MODULE})
-
-# C create a static library
-set(CMAKE_C_CREATE_STATIC_LIBRARY
-  "wlib ${CMAKE_LIB_QUIET} -c -n -b <TARGET_QUOTED> <LINK_FLAGS> <OBJECTS> ")
-# C++ create a static library
-set(CMAKE_CXX_CREATE_STATIC_LIBRARY ${CMAKE_C_CREATE_STATIC_LIBRARY})
-
-
-# old CMake internaly used OpenWatcom version macros
-# for backward compatibility
-if(NOT _CMAKE_WATCOM_VERSION)
-  set(_CMAKE_WATCOM_VERSION 1)
-  if(CMAKE_C_COMPILER_VERSION)
-    set(_compiler_version ${CMAKE_C_COMPILER_VERSION})
-    set(_compiler_id ${CMAKE_C_COMPILER_ID})
-  else()
-    set(_compiler_version ${CMAKE_CXX_COMPILER_VERSION})
-    set(_compiler_id ${CMAKE_CXX_COMPILER_ID})
-  endif()
-  set(WATCOM16)
-  set(WATCOM17)
-  set(WATCOM18)
-  set(WATCOM19)
-  if("${_compiler_id}" STREQUAL "OpenWatcom")
-    if("${_compiler_version}" VERSION_LESS 1.7)
-      set(WATCOM16 1)
-    endif()
-    if("${_compiler_version}" VERSION_EQUAL 1.7)
-      set(WATCOM17 1)
-    endif()
-    if("${_compiler_version}" VERSION_EQUAL 1.8)
-      set(WATCOM18 1)
-    endif()
-    if("${_compiler_version}" VERSION_EQUAL 1.9)
-      set(WATCOM19 1)
-    endif()
-  endif()
-endif()
diff --git a/share/cmake-3.18/Modules/Compiler/PGI-CXX.cmake b/share/cmake-3.18/Modules/Compiler/PGI-CXX.cmake
deleted file mode 100644
index c77de36..0000000
--- a/share/cmake-3.18/Modules/Compiler/PGI-CXX.cmake
+++ /dev/null
@@ -1,27 +0,0 @@
-include(Compiler/PGI)
-__compiler_pgi(CXX)
-string(APPEND CMAKE_CXX_FLAGS_MINSIZEREL_INIT " -DNDEBUG")
-string(APPEND CMAKE_CXX_FLAGS_RELEASE_INIT " -DNDEBUG")
-
-if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 12.10)
-  set(CMAKE_CXX98_STANDARD_COMPILE_OPTION  -A)
-  set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION --gnu_extensions)
-  set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
-  if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13.10)
-    set(CMAKE_CXX11_STANDARD_COMPILE_OPTION  --c++11 -A)
-    set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION --c++11 --gnu_extensions)
-    set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
-    if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 15.7)
-      set(CMAKE_CXX14_STANDARD_COMPILE_OPTION  --c++14 -A)
-      set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION --c++14 --gnu_extensions)
-      set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
-      if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 17.1)
-        set(CMAKE_CXX17_STANDARD_COMPILE_OPTION  --c++17 -A)
-        set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION --c++17 --gnu_extensions)
-        set(CMAKE_CXX17_STANDARD__HAS_FULL_SUPPORT ON)
-      endif()
-    endif()
-  endif()
-endif()
-
-__compiler_check_default_language_standard(CXX 12.10 98)
diff --git a/share/cmake-3.18/Modules/Compiler/PGI.cmake b/share/cmake-3.18/Modules/Compiler/PGI.cmake
deleted file mode 100644
index 4f8b90b..0000000
--- a/share/cmake-3.18/Modules/Compiler/PGI.cmake
+++ /dev/null
@@ -1,42 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# This module is shared by multiple languages; use include blocker.
-if(__COMPILER_PGI)
-  return()
-endif()
-set(__COMPILER_PGI 1)
-
-include(Compiler/CMakeCommonCompilerMacros)
-
-macro(__compiler_pgi lang)
-  # Feature flags.
-  set(CMAKE_${lang}_VERBOSE_FLAG "-v")
-
-  # Initial configuration flags.
-  string(APPEND CMAKE_${lang}_FLAGS_INIT " ")
-  string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -g -O0")
-  string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -O2 -s")
-  string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -fast -O3")
-  string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -O2 -gopt")
-
-  if(CMAKE_HOST_WIN32)
-    string(APPEND CMAKE_${lang}_FLAGS_INIT " -Bdynamic")
-  endif()
-
-  set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Wl,")
-  set(CMAKE_${lang}_LINKER_WRAPPER_FLAG ",")
-
-  set(_CMAKE_${lang}_IPO_SUPPORTED_BY_CMAKE YES)
-  if(NOT CMAKE_SYSTEM_PROCESSOR STREQUAL ppc64le AND (NOT CMAKE_HOST_WIN32 OR CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 16.3))
-    set(_CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER YES)
-    set(CMAKE_${lang}_COMPILE_OPTIONS_IPO "-Mipa=fast,inline")
-  else()
-    set(_CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER NO)
-  endif()
-
-  # Preprocessing and assembly rules.
-  set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE "<CMAKE_${lang}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
-  set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE "<CMAKE_${lang}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>")
-endmacro()
diff --git a/share/cmake-3.18/Modules/Compiler/QCC.cmake b/share/cmake-3.18/Modules/Compiler/QCC.cmake
deleted file mode 100644
index 10e1389..0000000
--- a/share/cmake-3.18/Modules/Compiler/QCC.cmake
+++ /dev/null
@@ -1,37 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-include(Compiler/GNU)
-
-macro(__compiler_qcc lang)
-  __compiler_gnu(${lang})
-
-  # http://www.qnx.com/developers/docs/6.4.0/neutrino/utilities/q/qcc.html#examples
-  set(CMAKE_${lang}_COMPILE_OPTIONS_TARGET "-V")
-
-  set(CMAKE_PREFIX_LIBRARY_ARCHITECTURE "ON")
-
-  set(CMAKE_${lang}_COMPILE_OPTIONS_SYSROOT "-Wc,-isysroot,")
-  set(CMAKE_INCLUDE_SYSTEM_FLAG_${lang} "-Wp,-isystem,")
-  set(CMAKE_DEPFILE_FLAGS_${lang} "-Wp,-MD,<DEPFILE> -Wp,-MT,<OBJECT> -Wp,-MF,<DEPFILE>")
-
-  set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Wl,")
-  set(CMAKE_${lang}_LINKER_WRAPPER_FLAG_SEP ",")
-
-  set(_CMAKE_${lang}_IPO_SUPPORTED_BY_CMAKE NO)
-  set(_CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER NO)
-
-  set(CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "${CMAKE_${lang}_COMPILER}")
-  if(CMAKE_${lang}_COMPILER_ARG1)
-    separate_arguments(_COMPILER_ARGS NATIVE_COMMAND "${CMAKE_${lang}_COMPILER_ARG1}")
-    list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND ${_COMPILER_ARGS})
-    unset(_COMPILER_ARGS)
-  endif()
-  list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "-Wp,-dM" "-E" "-c" "${CMAKE_ROOT}/Modules/CMakeCXXCompilerABI.cpp")
-
-  unset(CMAKE_${lang}_COMPILE_OPTIONS_IPO)
-  unset(CMAKE_${lang}_ARCHIVE_CREATE_IPO)
-  unset(CMAKE_${lang}_ARCHIVE_APPEND_IPO)
-  unset(CMAKE_${lang}_ARCHIVE_FINISH_IPO)
-endmacro()
diff --git a/share/cmake-3.18/Modules/Compiler/SunPro-C.cmake b/share/cmake-3.18/Modules/Compiler/SunPro-C.cmake
deleted file mode 100644
index 7e962b8..0000000
--- a/share/cmake-3.18/Modules/Compiler/SunPro-C.cmake
+++ /dev/null
@@ -1,59 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-include(Compiler/SunPro)
-
-set(CMAKE_C_VERBOSE_FLAG "-#")
-
-set(CMAKE_C_COMPILE_OPTIONS_PIC -KPIC)
-set(CMAKE_C_COMPILE_OPTIONS_PIE "")
-set(_CMAKE_C_PIE_MAY_BE_SUPPORTED_BY_LINKER NO)
-set(CMAKE_C_LINK_OPTIONS_PIE "")
-set(CMAKE_C_LINK_OPTIONS_NO_PIE "")
-set(CMAKE_SHARED_LIBRARY_C_FLAGS "-KPIC")
-set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-G")
-set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-R")
-set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP ":")
-set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-h")
-
-string(APPEND CMAKE_C_FLAGS_INIT " ")
-string(APPEND CMAKE_C_FLAGS_DEBUG_INIT " -g")
-string(APPEND CMAKE_C_FLAGS_MINSIZEREL_INIT " -xO2 -xspace -DNDEBUG")
-string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " -xO3 -DNDEBUG")
-string(APPEND CMAKE_C_FLAGS_RELWITHDEBINFO_INIT " -g -xO2 -DNDEBUG")
-
-set(CMAKE_DEPFILE_FLAGS_C "-xMD -xMF <DEPFILE>")
-
-# Initialize C link type selection flags.  These flags are used when
-# building a shared library, shared module, or executable that links
-# to other libraries to select whether to use the static or shared
-# versions of the libraries.
-foreach(type SHARED_LIBRARY SHARED_MODULE EXE)
-  set(CMAKE_${type}_LINK_STATIC_C_FLAGS "-Bstatic")
-  set(CMAKE_${type}_LINK_DYNAMIC_C_FLAGS "-Bdynamic")
-endforeach()
-
-set(CMAKE_C_LINKER_WRAPPER_FLAG "-Qoption" "ld" " ")
-set(CMAKE_C_LINKER_WRAPPER_FLAG_SEP ",")
-
-if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 5.13)
-  set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c89")
-  set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=c89")
-  set(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT ON)
-  set(CMAKE_C99_STANDARD_COMPILE_OPTION "-std=c99")
-  set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-std=c99")
-  set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
-  set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
-  set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=c11")
-  set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
-elseif (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 5.11)
-  set(CMAKE_C90_STANDARD_COMPILE_OPTION "")
-  set(CMAKE_C90_EXTENSION_COMPILE_OPTION "")
-  set(CMAKE_C99_STANDARD_COMPILE_OPTION "-xc99")
-  set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-xc99")
-endif()
-
-__compiler_check_default_language_standard(C 5.11 90 5.14 11)
-
-set(CMAKE_C_CREATE_PREPROCESSED_SOURCE "<CMAKE_C_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
-set(CMAKE_C_CREATE_ASSEMBLY_SOURCE "<CMAKE_C_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>")
diff --git a/share/cmake-3.18/Modules/Compiler/SunPro-CXX.cmake b/share/cmake-3.18/Modules/Compiler/SunPro-CXX.cmake
deleted file mode 100644
index c946c64..0000000
--- a/share/cmake-3.18/Modules/Compiler/SunPro-CXX.cmake
+++ /dev/null
@@ -1,66 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-include(Compiler/SunPro)
-
-set(CMAKE_CXX_VERBOSE_FLAG "-v")
-
-set(CMAKE_CXX_COMPILE_OPTIONS_PIC -KPIC)
-set(CMAKE_CXX_COMPILE_OPTIONS_PIE "")
-set(_CMAKE_CXX_PIE_MAY_BE_SUPPORTED_BY_LINKER NO)
-set(CMAKE_CXX_LINK_OPTIONS_PIE "")
-set(CMAKE_CXX_LINK_OPTIONS_NO_PIE "")
-set(CMAKE_SHARED_LIBRARY_CXX_FLAGS "-KPIC")
-set(CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS "-G")
-set(CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG "-R")
-set(CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG_SEP ":")
-set(CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG "-h")
-
-string(APPEND CMAKE_CXX_FLAGS_INIT " ")
-string(APPEND CMAKE_CXX_FLAGS_DEBUG_INIT " -g")
-string(APPEND CMAKE_CXX_FLAGS_MINSIZEREL_INIT " -xO2 -xspace -DNDEBUG")
-string(APPEND CMAKE_CXX_FLAGS_RELEASE_INIT " -xO3 -DNDEBUG")
-string(APPEND CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT " -g -xO2 -DNDEBUG")
-
-set(CMAKE_DEPFILE_FLAGS_CXX "-xMD -xMF <DEPFILE>")
-
-# Initialize C link type selection flags.  These flags are used when
-# building a shared library, shared module, or executable that links
-# to other libraries to select whether to use the static or shared
-# versions of the libraries.
-foreach(type SHARED_LIBRARY SHARED_MODULE EXE)
-  set(CMAKE_${type}_LINK_STATIC_CXX_FLAGS "-Bstatic")
-  set(CMAKE_${type}_LINK_DYNAMIC_CXX_FLAGS "-Bdynamic")
-endforeach()
-
-set(CMAKE_CXX_LINKER_WRAPPER_FLAG "-Qoption" "ld" " ")
-set(CMAKE_CXX_LINKER_WRAPPER_FLAG_SEP ",")
-
-set(CMAKE_CXX_CREATE_PREPROCESSED_SOURCE "<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
-set(CMAKE_CXX_CREATE_ASSEMBLY_SOURCE "<CMAKE_CXX_COMPILER> <INCLUDES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>")
-
-# Create archives with "CC -xar" in case user adds "-instances=extern"
-# so that template instantiations are available to archive members.
-set(CMAKE_CXX_CREATE_STATIC_LIBRARY
-  "<CMAKE_CXX_COMPILER> -xar -o <TARGET> <OBJECTS> "
-  "<CMAKE_RANLIB> <TARGET> ")
-
-if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.13)
-  set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "-std=c++03")
-  set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "-std=c++03")
-  set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
-  set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++11")
-  set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=c++11")
-  set(CMAKE_CXX_LINK_WITH_STANDARD_COMPILE_OPTION 1)
-
-  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.14)
-    set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++14")
-    set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=c++14")
-  endif()
-else()
-  set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "-library=stlport4")
-  set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "-library=stlport4")
-  set(CMAKE_CXX_LINK_WITH_STANDARD_COMPILE_OPTION 1)
-endif()
-
-__compiler_check_default_language_standard(CXX 1 98)
diff --git a/share/cmake-3.18/Modules/Compiler/TI-ASM.cmake b/share/cmake-3.18/Modules/Compiler/TI-ASM.cmake
deleted file mode 100644
index a566d70..0000000
--- a/share/cmake-3.18/Modules/Compiler/TI-ASM.cmake
+++ /dev/null
@@ -1,8 +0,0 @@
-set(CMAKE_LIBRARY_PATH_FLAG "--search_path=")
-set(CMAKE_LINK_LIBRARY_FLAG "--library=")
-set(CMAKE_INCLUDE_FLAG_ASM "--include_path=")
-
-set(CMAKE_ASM_COMPILE_OBJECT  "<CMAKE_ASM_COMPILER> --compile_only --asm_file=<SOURCE> <DEFINES> <INCLUDES> <FLAGS> --output_file=<OBJECT>")
-set(CMAKE_ASM_LINK_EXECUTABLE "<CMAKE_ASM_COMPILER> <OBJECTS> --run_linker --output_file=<TARGET> <CMAKE_ASM_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>")
-
-set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS asm;s;abs)
diff --git a/share/cmake-3.18/Modules/Compiler/TI-C.cmake b/share/cmake-3.18/Modules/Compiler/TI-C.cmake
deleted file mode 100644
index b060ee9..0000000
--- a/share/cmake-3.18/Modules/Compiler/TI-C.cmake
+++ /dev/null
@@ -1,22 +0,0 @@
-set(CMAKE_LIBRARY_PATH_FLAG "--search_path=")
-set(CMAKE_LINK_LIBRARY_FLAG "--library=")
-set(CMAKE_INCLUDE_FLAG_C "--include_path=")
-
-set(CMAKE_C90_STANDARD_COMPILE_OPTION "--c89")
-set(CMAKE_C90_EXTENSION_COMPILE_OPTION "--c89 --relaxed_ansi")
-
-set(CMAKE_C99_STANDARD_COMPILE_OPTION "--c99")
-set(CMAKE_C99_EXTENSION_COMPILE_OPTION "--c99 --relaxed_ansi")
-
-set(CMAKE_DEPFILE_FLAGS_C "--preproc_with_compile --preproc_dependency=<DEPFILE>")
-
-set(CMAKE_C_CREATE_ASSEMBLY_SOURCE "<CMAKE_C_COMPILER> --compile_only --skip_assembler --c_file=<SOURCE> <DEFINES> <INCLUDES> <FLAGS> --output_file=<ASSEMBLY_SOURCE>")
-set(CMAKE_C_CREATE_PREPROCESSED_SOURCE "<CMAKE_C_COMPILER> --preproc_only --c_file=<SOURCE> <DEFINES> <INCLUDES> <FLAGS> --output_file=<PREPROCESSED_SOURCE>")
-
-set(CMAKE_C_COMPILE_OBJECT  "<CMAKE_C_COMPILER> --compile_only --c_file=<SOURCE> <DEFINES> <INCLUDES> <FLAGS> --output_file=<OBJECT>")
-set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> qr <TARGET> <OBJECTS>")
-set(CMAKE_C_ARCHIVE_APPEND "<CMAKE_AR> qa <TARGET> <OBJECTS>")
-set(CMAKE_C_LINK_EXECUTABLE "<CMAKE_C_COMPILER> --run_linker --output_file=<TARGET> --map_file=<TARGET_NAME>.map <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> <LINK_LIBRARIES>")
-set(CMAKE_ASM_RESPONSE_FILE_FLAG "--cmd_file=")
-set(CMAKE_C_RESPONSE_FILE_FLAG "--cmd_file=")
-set(CMAKE_C_RESPONSE_FILE_LINK_FLAG " ")
diff --git a/share/cmake-3.18/Modules/Compiler/TI-CXX.cmake b/share/cmake-3.18/Modules/Compiler/TI-CXX.cmake
deleted file mode 100644
index 7836543..0000000
--- a/share/cmake-3.18/Modules/Compiler/TI-CXX.cmake
+++ /dev/null
@@ -1,15 +0,0 @@
-set(CMAKE_LIBRARY_PATH_FLAG "--search_path=")
-set(CMAKE_LINK_LIBRARY_FLAG "--library=")
-set(CMAKE_INCLUDE_FLAG_CXX "--include_path=")
-
-set(CMAKE_DEPFILE_FLAGS_CXX "--preproc_with_compile --preproc_dependency=<DEPFILE>")
-
-set(CMAKE_CXX_CREATE_ASSEMBLY_SOURCE "<CMAKE_CXX_COMPILER> --compile_only --skip_assembler --cpp_file=<SOURCE> <DEFINES> <INCLUDES> <FLAGS> --output_file=<ASSEMBLY_SOURCE>")
-set(CMAKE_CXX_CREATE_PREPROCESSED_SOURCE "<CMAKE_CXX_COMPILER> --preproc_only --cpp_file=<SOURCE> <DEFINES> <INCLUDES> <FLAGS> --output_file=<PREPROCESSED_SOURCE>")
-
-set(CMAKE_CXX_COMPILE_OBJECT  "<CMAKE_CXX_COMPILER> --compile_only --cpp_file=<SOURCE> <DEFINES> <INCLUDES> <FLAGS> --output_file=<OBJECT>")
-set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> qr <TARGET> <OBJECTS>")
-set(CMAKE_CXX_ARCHIVE_APPEND "<CMAKE_AR> qa <TARGET> <OBJECTS>")
-set(CMAKE_CXX_LINK_EXECUTABLE "<CMAKE_CXX_COMPILER> --run_linker --output_file=<TARGET> --map_file=<TARGET_NAME>.map <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> <LINK_LIBRARIES>")
-set(CMAKE_CXX_RESPONSE_FILE_FLAG "--cmd_file=")
-set(CMAKE_CXX_RESPONSE_FILE_LINK_FLAG " ")
diff --git a/share/cmake-3.18/Modules/Compiler/XL.cmake b/share/cmake-3.18/Modules/Compiler/XL.cmake
deleted file mode 100644
index fc71ab4..0000000
--- a/share/cmake-3.18/Modules/Compiler/XL.cmake
+++ /dev/null
@@ -1,34 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# This module is shared by multiple languages; use include blocker.
-if(__COMPILER_XL)
-  return()
-endif()
-set(__COMPILER_XL 1)
-
-include(Compiler/CMakeCommonCompilerMacros)
-
-macro(__compiler_xl lang)
-  # Feature flags.
-  set(CMAKE_${lang}_VERBOSE_FLAG "-V")
-  set(CMAKE_${lang}_COMPILE_OPTIONS_PIC "-qpic")
-  set(CMAKE_${lang}_COMPILE_OPTIONS_PIE "-qpic")
-  set(CMAKE_${lang}_RESPONSE_FILE_FLAG "-qoptfile=")
-  set(CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG "-qoptfile=")
-
-  set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-qmkshrobj")
-
-  set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Wl,")
-  set(CMAKE_${lang}_LINKER_WRAPPER_FLAG_SEP ",")
-
-  string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -g")
-  string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -O")
-  string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -O")
-  string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -g")
-  set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE "<CMAKE_${lang}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
-  set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE     "<CMAKE_${lang}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>")
-
-  set(CMAKE_DEPFILE_FLAGS_${lang} "-MF <DEPFILE> -qmakedep=gcc")
-endmacro()
diff --git a/share/cmake-3.18/Modules/Compiler/XLClang-C.cmake b/share/cmake-3.18/Modules/Compiler/XLClang-C.cmake
deleted file mode 100644
index 54c18a6..0000000
--- a/share/cmake-3.18/Modules/Compiler/XLClang-C.cmake
+++ /dev/null
@@ -1,20 +0,0 @@
-include(Compiler/XLClang)
-__compiler_xlclang(C)
-
-if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 13.1.1)
-  set(CMAKE_C90_STANDARD_COMPILE_OPTION  "-std=c89")
-  set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=gnu89")
-  set(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT ON)
-  set(CMAKE_C99_STANDARD_COMPILE_OPTION  "-std=c99")
-  set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-std=gnu99")
-  set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
-  set(CMAKE_C11_STANDARD_COMPILE_OPTION  "-qlanglvl=extc1x")
-  set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-qlanglvl=extc1x")
-  if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 13.1.2)
-    set(CMAKE_C11_STANDARD_COMPILE_OPTION  "-std=c11")
-    set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
-    set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
-  endif ()
-endif()
-
-__compiler_check_default_language_standard(C 13.1.1 99)
diff --git a/share/cmake-3.18/Modules/Compiler/XLClang-CXX.cmake b/share/cmake-3.18/Modules/Compiler/XLClang-CXX.cmake
deleted file mode 100644
index 9ea3d7c..0000000
--- a/share/cmake-3.18/Modules/Compiler/XLClang-CXX.cmake
+++ /dev/null
@@ -1,27 +0,0 @@
-include(Compiler/XLClang)
-__compiler_xlclang(CXX)
-
-if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13.1.1)
-  set(CMAKE_CXX98_STANDARD_COMPILE_OPTION  "")
-  set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "")
-  set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
-  set(CMAKE_CXX11_STANDARD_COMPILE_OPTION  "-qlanglvl=extended0x")
-  set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-qlanglvl=extended0x")
-  set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
-  if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13.1.2)
-    set(CMAKE_CXX11_STANDARD_COMPILE_OPTION  "-std=c++11")
-    set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++11")
-    set(CMAKE_CXX14_STANDARD_COMPILE_OPTION  "-std=c++1y")
-    set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++1y")
-    set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
-  endif ()
-  if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 16.1.0)
-    set(CMAKE_CXX14_STANDARD_COMPILE_OPTION  "-std=c++14")
-    set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++14")
-  endif()
-endif()
-
-__compiler_check_default_language_standard(CXX 13.1.1 98)
-
-set(CMAKE_CXX_COMPILE_OBJECT
-  "<CMAKE_CXX_COMPILER> -x c++ <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>")
diff --git a/share/cmake-3.18/Modules/CompilerId/VS-10.csproj.in b/share/cmake-3.18/Modules/CompilerId/VS-10.csproj.in
deleted file mode 100644
index ed5e847..0000000
--- a/share/cmake-3.18/Modules/CompilerId/VS-10.csproj.in
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{CAE07175-D007-4FC3-BFE8-47B392814159}</ProjectGuid>
-    <RootNamespace>CompilerId@id_lang@</RootNamespace>
-    <Keyword>Win32Proj</Keyword>
-    @id_system@
-    @id_system_version@
-    @id_WindowsTargetPlatformVersion@
-    @id_WindowsSDKDesktopARMSupport@
-  </PropertyGroup>
-  <PropertyGroup>
-    @id_PreferredToolArchitecture@
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|@id_platform@'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    @id_toolset@
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <!-- ============================================================ -->
-  <!-- ==                set preprocessor definitions            == -->
-  <!-- ============================================================ -->
-  <PropertyGroup>
-    <DefineConstants></DefineConstants>
-    <UnknownValue>Unknown</UnknownValue>
-  </PropertyGroup>
-  <!-- Platform -->
-  <PropertyGroup Condition="'$(Platform)'!=''">
-    <DefineConstants>$(DefineConstants);Platform$(Platform)</DefineConstants>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Platform)'==''">
-    <DefineConstants>$(DefineConstants);Platform$(UnknownValue)</DefineConstants>
-  </PropertyGroup>
-  <!-- PlatformToolset -->
-  <PropertyGroup Condition="'$(PlatformToolset)'!=''">
-    <DefineConstants>$(DefineConstants);PlatformToolset$(PlatformToolset)</DefineConstants>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(PlatformToolset)'==''">
-    <DefineConstants>$(DefineConstants);PlatformToolset$(UnknownValue)</DefineConstants>
-  </PropertyGroup>
-  <!-- ============================================================ -->
-  <PropertyGroup>
-    <OutputPath Condition="'$(Configuration)|$(Platform)'=='Debug|@id_platform@'">.\</OutputPath>
-  </PropertyGroup>
-  <ItemGroup>
-    <Compile Include="@id_src@" />
-  </ItemGroup>
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-  <PropertyGroup>
-    <PostBuildEvent>if not "$(RoslynTargetsPath)"=="" if exist "$(RoslynTargetsPath)\@id_cl@" set _CSC=$(RoslynTargetsPath)
-if exist "$(MSBuildToolsPath)\@id_cl@" set _CSC=$(MSBuildToolsPath)
-if "%_CSC%"=="" exit -1
-%40echo CMAKE_@id_lang@_COMPILER=%_CSC%\@id_cl@</PostBuildEvent>
-  </PropertyGroup>
-</Project>
diff --git a/share/cmake-3.18/Modules/CompilerId/VS-10.vcxproj.in b/share/cmake-3.18/Modules/CompilerId/VS-10.vcxproj.in
deleted file mode 100644
index b48a332..0000000
--- a/share/cmake-3.18/Modules/CompilerId/VS-10.vcxproj.in
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|@id_platform@">
-      <Configuration>Debug</Configuration>
-      <Platform>@id_platform@</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{CAE07175-D007-4FC3-BFE8-47B392814159}</ProjectGuid>
-    <RootNamespace>CompilerId@id_lang@</RootNamespace>
-    <Keyword>Win32Proj</Keyword>
-    @id_system@
-    @id_system_version@
-    @id_WindowsTargetPlatformVersion@
-    @id_WindowsSDKDesktopARMSupport@
-    @id_CudaToolkitCustomDir@
-    @id_ToolsetVCTargetsDir@
-    @id_CustomGlobals@
-  </PropertyGroup>
-  @id_toolset_version_props@
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup>
-    @id_PreferredToolArchitecture@
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|@id_platform@'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    @id_toolset@
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-    @id_Import_props@
-  </ImportGroup>
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|@id_platform@'">.\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|@id_platform@'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|@id_platform@'">false</LinkIncremental>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|@id_platform@'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>false</MinimalRebuild>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>TurnOffAllWarnings</WarningLevel>
-      <DebugInformationFormat>
-      </DebugInformationFormat>
-    </ClCompile>
-    @id_ItemDefinitionGroup_entry@
-    <Link>
-      <GenerateDebugInformation>false</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      @id_Link_AdditionalDependencies@
-    </Link>
-    <PostBuildEvent>
-      <Command>@id_PostBuildEvent_Command@</Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <@id_compile@ Include="@id_src@" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-    @id_Import_targets@
-  </ImportGroup>
-</Project>
diff --git a/share/cmake-3.18/Modules/CompilerId/Xcode-3.pbxproj.in b/share/cmake-3.18/Modules/CompilerId/Xcode-3.pbxproj.in
deleted file mode 100644
index 6fe17e5..0000000
--- a/share/cmake-3.18/Modules/CompilerId/Xcode-3.pbxproj.in
+++ /dev/null
@@ -1,114 +0,0 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 45;
-	objects = {
-
-		2C18F0B615DC1E0300593670 = {isa = PBXBuildFile; fileRef = 2C18F0B415DC1DC700593670; };
-		2C18F0B415DC1DC700593670 = {isa = PBXFileReference; fileEncoding = 4; explicitFileType = @id_type@; path = @id_src@; sourceTree = "<group>"; };
-		08FB7794FE84155DC02AAC07 = {
-			isa = PBXGroup;
-			children = (
-				2C18F0B415DC1DC700593670,
-			);
-			name = CompilerId@id_lang@;
-			sourceTree = "<group>";
-		};
-		8DD76FA90486AB0100D96B5E = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 1DEB928508733DD80010E9CD;
-			buildPhases = (
-				2C18F0B515DC1DCE00593670,
-				2C8FEB8E15DC1A1A00E56A5D,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = CompilerId@id_lang@;
-			productName = CompilerId@id_lang@;
-			productType = "@id_product_type@";
-		};
-		08FB7793FE84155DC02AAC07 = {
-			isa = PBXProject;
-			buildConfigurationList = 1DEB928908733DD80010E9CD;
-			compatibilityVersion = "Xcode 3.1";
-			developmentRegion = English;
-			hasScannedForEncodings = 1;
-			knownRegions = (
-				en,
-			);
-			mainGroup = 08FB7794FE84155DC02AAC07;
-			projectDirPath = "";
-			projectRoot = "";
-			targets = (
-				8DD76FA90486AB0100D96B5E,
-			);
-		};
-		2C8FEB8E15DC1A1A00E56A5D = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputPaths = (
-			);
-			outputPaths = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "echo \"GCC_VERSION=$GCC_VERSION\" ; echo \"ARCHS=$ARCHS\"";
-			showEnvVarsInLog = 0;
-		};
-		2C18F0B515DC1DCE00593670 = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				2C18F0B615DC1E0300593670,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		1DEB928608733DD80010E9CD = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				CODE_SIGN_IDENTITY = "";
-				PRODUCT_NAME = CompilerId@id_lang@;
-			};
-			name = Debug;
-		};
-		1DEB928A08733DD80010E9CD = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ONLY_ACTIVE_ARCH = YES;
-				CODE_SIGNING_REQUIRED = NO;
-				CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)";
-				SYMROOT = .;
-				@id_archs@
-				@id_toolset@
-				@id_lang_version@
-				@id_clang_cxx_library@
-				@id_deployment_target@
-				@id_sdkroot@
-			};
-			name = Debug;
-		};
-		1DEB928508733DD80010E9CD = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				1DEB928608733DD80010E9CD,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		1DEB928908733DD80010E9CD = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				1DEB928A08733DD80010E9CD,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-	};
-	rootObject = 08FB7793FE84155DC02AAC07;
-}
diff --git a/share/cmake-3.18/Modules/DartConfiguration.tcl.in b/share/cmake-3.18/Modules/DartConfiguration.tcl.in
deleted file mode 100644
index 086ba07..0000000
--- a/share/cmake-3.18/Modules/DartConfiguration.tcl.in
+++ /dev/null
@@ -1,107 +0,0 @@
-# This file is configured by CMake automatically as DartConfiguration.tcl
-# If you choose not to use CMake, this file may be hand configured, by
-# filling in the required variables.
-
-
-# Configuration directories and files
-SourceDirectory: @PROJECT_SOURCE_DIR@
-BuildDirectory: @PROJECT_BINARY_DIR@
-
-# Where to place the cost data store
-CostDataFile: @CTEST_COST_DATA_FILE@
-
-# Site is something like machine.domain, i.e. pragmatic.crd
-Site: @SITE@
-
-# Build name is osname-revision-compiler, i.e. Linux-2.4.2-2smp-c++
-BuildName: @BUILDNAME@
-
-# Subprojects
-LabelsForSubprojects: @CTEST_LABELS_FOR_SUBPROJECTS@
-
-# Submission information
-SubmitURL: @SUBMIT_URL@
-
-# Dashboard start time
-NightlyStartTime: @NIGHTLY_START_TIME@
-
-# Commands for the build/test/submit cycle
-ConfigureCommand: "@CMAKE_COMMAND@" "@PROJECT_SOURCE_DIR@"
-MakeCommand: @MAKECOMMAND@
-DefaultCTestConfigurationType: @DEFAULT_CTEST_CONFIGURATION_TYPE@
-
-# version control
-UpdateVersionOnly: @CTEST_UPDATE_VERSION_ONLY@
-
-# CVS options
-# Default is "-d -P -A"
-CVSCommand: @CVSCOMMAND@
-CVSUpdateOptions: @CVS_UPDATE_OPTIONS@
-
-# Subversion options
-SVNCommand: @SVNCOMMAND@
-SVNOptions: @CTEST_SVN_OPTIONS@
-SVNUpdateOptions: @SVN_UPDATE_OPTIONS@
-
-# Git options
-GITCommand: @GITCOMMAND@
-GITInitSubmodules: @CTEST_GIT_INIT_SUBMODULES@
-GITUpdateOptions: @GIT_UPDATE_OPTIONS@
-GITUpdateCustom: @CTEST_GIT_UPDATE_CUSTOM@
-
-# Perforce options
-P4Command: @P4COMMAND@
-P4Client: @CTEST_P4_CLIENT@
-P4Options: @CTEST_P4_OPTIONS@
-P4UpdateOptions: @CTEST_P4_UPDATE_OPTIONS@
-P4UpdateCustom: @CTEST_P4_UPDATE_CUSTOM@
-
-# Generic update command
-UpdateCommand: @UPDATE_COMMAND@
-UpdateOptions: @UPDATE_OPTIONS@
-UpdateType: @UPDATE_TYPE@
-
-# Compiler info
-Compiler: @CMAKE_CXX_COMPILER@
-CompilerVersion: @CMAKE_CXX_COMPILER_VERSION@
-
-# Dynamic analysis (MemCheck)
-PurifyCommand: @PURIFYCOMMAND@
-ValgrindCommand: @VALGRIND_COMMAND@
-ValgrindCommandOptions: @VALGRIND_COMMAND_OPTIONS@
-DrMemoryCommand: @DRMEMORY_COMMAND@
-DrMemoryCommandOptions: @DRMEMORY_COMMAND_OPTIONS@
-MemoryCheckType: @MEMORYCHECK_TYPE@
-MemoryCheckSanitizerOptions: @MEMORYCHECK_SANITIZER_OPTIONS@
-MemoryCheckCommand: @MEMORYCHECK_COMMAND@
-MemoryCheckCommandOptions: @MEMORYCHECK_COMMAND_OPTIONS@
-MemoryCheckSuppressionFile: @MEMORYCHECK_SUPPRESSIONS_FILE@
-
-# Coverage
-CoverageCommand: @COVERAGE_COMMAND@
-CoverageExtraFlags: @COVERAGE_EXTRA_FLAGS@
-
-# Cluster commands
-SlurmBatchCommand: @SLURM_SBATCH_COMMAND@
-SlurmRunCommand: @SLURM_SRUN_COMMAND@
-
-# Testing options
-# TimeOut is the amount of time in seconds to wait for processes
-# to complete during testing.  After TimeOut seconds, the
-# process will be summarily terminated.
-# Currently set to 25 minutes
-TimeOut: @DART_TESTING_TIMEOUT@
-
-# During parallel testing CTest will not start a new test if doing
-# so would cause the system load to exceed this value.
-TestLoad: @CTEST_TEST_LOAD@
-
-UseLaunchers: @CTEST_USE_LAUNCHERS@
-CurlOptions: @CTEST_CURL_OPTIONS@
-# warning, if you add new options here that have to do with submit,
-# you have to update cmCTestSubmitCommand.cxx
-
-# For CTest submissions that timeout, these options
-# specify behavior for retrying the submission
-CTestSubmitRetryDelay: @CTEST_SUBMIT_RETRY_DELAY@
-CTestSubmitRetryCount: @CTEST_SUBMIT_RETRY_COUNT@
diff --git a/share/cmake-3.18/Modules/Documentation.cmake b/share/cmake-3.18/Modules/Documentation.cmake
deleted file mode 100644
index c297231..0000000
--- a/share/cmake-3.18/Modules/Documentation.cmake
+++ /dev/null
@@ -1,74 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-Documentation
--------------
-
-This module provides support for the VTK documentation framework.  It
-relies on several tools (Doxygen, Perl, etc).
-#]=======================================================================]
-
-cmake_policy(GET CMP0106 _Documentation_policy)
-
-if (_Documentation_policy STREQUAL "NEW")
-  message(FATAL_ERROR
-    "Documentation.cmake is VTK-specific code and should not be used in "
-    "non-VTK projects. This logic in this module is best shipped with the "
-    "project using it rather than with CMake. This is now an error according "
-    "to policy CMP0106.")
-else ()
-
-if (_Documentation_policy STREQUAL "")
-  # Ignore the warning if the project is detected as VTK itself.
-  if (NOT CMAKE_PROJECT_NAME STREQUAL "VTK" AND
-      NOT PROJECT_NAME STREQUAL "VTK")
-    cmake_policy(GET_WARNING CMP0106 _Documentation_policy_warning)
-    message(AUTHOR_WARNING
-      "${_Documentation_policy_warning}\n"
-      "Documentation.cmake is VTK-specific code and should not be used in "
-      "non-VTK projects. This logic in this module is best shipped with the "
-      "project using it rather than with CMake.")
-  endif ()
-  unset(_Documentation_policy_warning)
-endif ()
-
-#
-# Build the documentation ?
-#
-option(BUILD_DOCUMENTATION "Build the documentation (Doxygen)." OFF)
-mark_as_advanced(BUILD_DOCUMENTATION)
-
-if (BUILD_DOCUMENTATION)
-
-  #
-  # Check for the tools
-  #
-  find_package(UnixCommands)
-  find_package(Doxygen)
-  find_package(Gnuplot)
-  find_package(HTMLHelp)
-  find_package(Perl)
-  find_package(Wget)
-
-  option(DOCUMENTATION_HTML_HELP
-    "Build the HTML Help file (CHM)." OFF)
-
-  option(DOCUMENTATION_HTML_TARZ
-    "Build a compressed tar archive of the HTML doc." OFF)
-
-  mark_as_advanced(
-    DOCUMENTATION_HTML_HELP
-    DOCUMENTATION_HTML_TARZ
-    )
-
-  #
-  # The documentation process is controlled by a batch file.
-  # We will probably need bash to create the custom target
-  #
-
-endif ()
-
-endif ()
-
-unset(_Documentation_policy)
diff --git a/share/cmake-3.18/Modules/ExternalData.cmake b/share/cmake-3.18/Modules/ExternalData.cmake
deleted file mode 100644
index e5dbcd9..0000000
--- a/share/cmake-3.18/Modules/ExternalData.cmake
+++ /dev/null
@@ -1,1152 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-ExternalData
-------------
-
-.. only:: html
-
-   .. contents::
-
-Manage data files stored outside source tree
-
-Introduction
-^^^^^^^^^^^^
-
-Use this module to unambiguously reference data files stored outside
-the source tree and fetch them at build time from arbitrary local and
-remote content-addressed locations.  Functions provided by this module
-recognize arguments with the syntax ``DATA{<name>}`` as references to
-external data, replace them with full paths to local copies of those
-data, and create build rules to fetch and update the local copies.
-
-For example:
-
-.. code-block:: cmake
-
- include(ExternalData)
- set(ExternalData_URL_TEMPLATES "file:///local/%(algo)/%(hash)"
-                                "file:////host/share/%(algo)/%(hash)"
-                                "http://data.org/%(algo)/%(hash)")
- ExternalData_Add_Test(MyData
-   NAME MyTest
-   COMMAND MyExe DATA{MyInput.png}
-   )
- ExternalData_Add_Target(MyData)
-
-When test ``MyTest`` runs the ``DATA{MyInput.png}`` argument will be
-replaced by the full path to a real instance of the data file
-``MyInput.png`` on disk.  If the source tree contains a content link
-such as ``MyInput.png.md5`` then the ``MyData`` target creates a real
-``MyInput.png`` in the build tree.
-
-Module Functions
-^^^^^^^^^^^^^^^^
-
-.. command:: ExternalData_Expand_Arguments
-
-  The ``ExternalData_Expand_Arguments`` function evaluates ``DATA{}``
-  references in its arguments and constructs a new list of arguments::
-
-    ExternalData_Expand_Arguments(
-      <target>   # Name of data management target
-      <outVar>   # Output variable
-      [args...]  # Input arguments, DATA{} allowed
-      )
-
-  It replaces each ``DATA{}`` reference in an argument with the full path of
-  a real data file on disk that will exist after the ``<target>`` builds.
-
-.. command:: ExternalData_Add_Test
-
-  The ``ExternalData_Add_Test`` function wraps around the CMake
-  :command:`add_test` command but supports ``DATA{}`` references in
-  its arguments::
-
-    ExternalData_Add_Test(
-      <target>   # Name of data management target
-      ...        # Arguments of add_test(), DATA{} allowed
-      )
-
-  It passes its arguments through ``ExternalData_Expand_Arguments`` and then
-  invokes the :command:`add_test` command using the results.
-
-.. command:: ExternalData_Add_Target
-
-  The ``ExternalData_Add_Target`` function creates a custom target to
-  manage local instances of data files stored externally::
-
-    ExternalData_Add_Target(
-      <target>   # Name of data management target
-      )
-
-  It creates custom commands in the target as necessary to make data
-  files available for each ``DATA{}`` reference previously evaluated by
-  other functions provided by this module.
-  Data files may be fetched from one of the URL templates specified in
-  the ``ExternalData_URL_TEMPLATES`` variable, or may be found locally
-  in one of the paths specified in the ``ExternalData_OBJECT_STORES``
-  variable.
-
-  Typically only one target is needed to manage all external data within
-  a project.  Call this function once at the end of configuration after
-  all data references have been processed.
-
-Module Variables
-^^^^^^^^^^^^^^^^
-
-The following variables configure behavior.  They should be set before
-calling any of the functions provided by this module.
-
-.. variable:: ExternalData_BINARY_ROOT
-
-  The ``ExternalData_BINARY_ROOT`` variable may be set to the directory to
-  hold the real data files named by expanded ``DATA{}`` references.  The
-  default is ``CMAKE_BINARY_DIR``.  The directory layout will mirror that of
-  content links under ``ExternalData_SOURCE_ROOT``.
-
-.. variable:: ExternalData_CUSTOM_SCRIPT_<key>
-
-  Specify a full path to a ``.cmake`` custom fetch script identified by
-  ``<key>`` in entries of the ``ExternalData_URL_TEMPLATES`` list.
-  See `Custom Fetch Scripts`_.
-
-.. variable:: ExternalData_LINK_CONTENT
-
-  The ``ExternalData_LINK_CONTENT`` variable may be set to the name of a
-  supported hash algorithm to enable automatic conversion of real data
-  files referenced by the ``DATA{}`` syntax into content links.  For each
-  such ``<file>`` a content link named ``<file><ext>`` is created.  The
-  original file is renamed to the form ``.ExternalData_<algo>_<hash>`` to
-  stage it for future transmission to one of the locations in the list
-  of URL templates (by means outside the scope of this module).  The
-  data fetch rule created for the content link will use the staged
-  object if it cannot be found using any URL template.
-
-.. variable:: ExternalData_NO_SYMLINKS
-
-  The real data files named by expanded ``DATA{}`` references may be made
-  available under ``ExternalData_BINARY_ROOT`` using symbolic links on
-  some platforms.  The ``ExternalData_NO_SYMLINKS`` variable may be set
-  to disable use of symbolic links and enable use of copies instead.
-
-.. variable:: ExternalData_OBJECT_STORES
-
-  The ``ExternalData_OBJECT_STORES`` variable may be set to a list of local
-  directories that store objects using the layout ``<dir>/%(algo)/%(hash)``.
-  These directories will be searched first for a needed object.  If the
-  object is not available in any store then it will be fetched remotely
-  using the URL templates and added to the first local store listed.  If
-  no stores are specified the default is a location inside the build
-  tree.
-
-.. variable:: ExternalData_SERIES_PARSE
-              ExternalData_SERIES_PARSE_PREFIX
-              ExternalData_SERIES_PARSE_NUMBER
-              ExternalData_SERIES_PARSE_SUFFIX
-              ExternalData_SERIES_MATCH
-
-  See `Referencing File Series`_.
-
-.. variable:: ExternalData_SOURCE_ROOT
-
-  The ``ExternalData_SOURCE_ROOT`` variable may be set to the highest source
-  directory containing any path named by a ``DATA{}`` reference.  The
-  default is ``CMAKE_SOURCE_DIR``.  ``ExternalData_SOURCE_ROOT`` and
-  ``CMAKE_SOURCE_DIR`` must refer to directories within a single source
-  distribution (e.g.  they come together in one tarball).
-
-.. variable:: ExternalData_TIMEOUT_ABSOLUTE
-
-  The ``ExternalData_TIMEOUT_ABSOLUTE`` variable sets the download
-  absolute timeout, in seconds, with a default of ``300`` seconds.
-  Set to ``0`` to disable enforcement.
-
-.. variable:: ExternalData_TIMEOUT_INACTIVITY
-
-  The ``ExternalData_TIMEOUT_INACTIVITY`` variable sets the download
-  inactivity timeout, in seconds, with a default of ``60`` seconds.
-  Set to ``0`` to disable enforcement.
-
-.. variable:: ExternalData_URL_ALGO_<algo>_<key>
-
-  Specify a custom URL component to be substituted for URL template
-  placeholders of the form ``%(algo:<key>)``, where ``<key>`` is a
-  valid C identifier, when fetching an object referenced via hash
-  algorithm ``<algo>``.  If not defined, the default URL component
-  is just ``<algo>`` for any ``<key>``.
-
-.. variable:: ExternalData_URL_TEMPLATES
-
-  The ``ExternalData_URL_TEMPLATES`` may be set to provide a list of
-  of URL templates using the placeholders ``%(algo)`` and ``%(hash)``
-  in each template.  Data fetch rules try each URL template in order
-  by substituting the hash algorithm name for ``%(algo)`` and the hash
-  value for ``%(hash)``.  Alternatively one may use ``%(algo:<key>)``
-  with ``ExternalData_URL_ALGO_<algo>_<key>`` variables to gain more
-  flexibility in remote URLs.
-
-Referencing Files
-^^^^^^^^^^^^^^^^^
-
-Referencing Single Files
-""""""""""""""""""""""""
-
-The ``DATA{}`` syntax is literal and the ``<name>`` is a full or relative path
-within the source tree.  The source tree must contain either a real
-data file at ``<name>`` or a "content link" at ``<name><ext>`` containing a
-hash of the real file using a hash algorithm corresponding to ``<ext>``.
-For example, the argument ``DATA{img.png}`` may be satisfied by either a
-real ``img.png`` file in the current source directory or a ``img.png.md5``
-file containing its MD5 sum.
-
-Multiple content links of the same name with different hash algorithms
-are supported (e.g. ``img.png.sha256`` and ``img.png.sha1``) so long as
-they all correspond to the same real file.  This allows objects to be
-fetched from sources indexed by different hash algorithms.
-
-Referencing File Series
-"""""""""""""""""""""""
-
-The ``DATA{}`` syntax can be told to fetch a file series using the form
-``DATA{<name>,:}``, where the ``:`` is literal.  If the source tree
-contains a group of files or content links named like a series then a
-reference to one member adds rules to fetch all of them.  Although all
-members of a series are fetched, only the file originally named by the
-``DATA{}`` argument is substituted for it.  The default configuration
-recognizes file series names ending with ``#.ext``, ``_#.ext``, ``.#.ext``,
-or ``-#.ext`` where ``#`` is a sequence of decimal digits and ``.ext`` is
-any single extension.  Configure it with a regex that parses ``<number>``
-and ``<suffix>`` parts from the end of ``<name>``::
-
- ExternalData_SERIES_PARSE = regex of the form (<number>)(<suffix>)$
-
-For more complicated cases set::
-
- ExternalData_SERIES_PARSE = regex with at least two () groups
- ExternalData_SERIES_PARSE_PREFIX = <prefix> regex group number, if any
- ExternalData_SERIES_PARSE_NUMBER = <number> regex group number
- ExternalData_SERIES_PARSE_SUFFIX = <suffix> regex group number
-
-Configure series number matching with a regex that matches the
-``<number>`` part of series members named ``<prefix><number><suffix>``::
-
- ExternalData_SERIES_MATCH = regex matching <number> in all series members
-
-Note that the ``<suffix>`` of a series does not include a hash-algorithm
-extension.
-
-Referencing Associated Files
-""""""""""""""""""""""""""""
-
-The ``DATA{}`` syntax can alternatively match files associated with the
-named file and contained in the same directory.  Associated files may
-be specified by options using the syntax
-``DATA{<name>,<opt1>,<opt2>,...}``.  Each option may specify one file by
-name or specify a regular expression to match file names using the
-syntax ``REGEX:<regex>``.  For example, the arguments::
-
- DATA{MyData/MyInput.mhd,MyInput.img}                   # File pair
- DATA{MyData/MyFrames00.png,REGEX:MyFrames[0-9]+\\.png} # Series
-
-will pass ``MyInput.mha`` and ``MyFrames00.png`` on the command line but
-ensure that the associated files are present next to them.
-
-Referencing Directories
-"""""""""""""""""""""""
-
-The ``DATA{}`` syntax may reference a directory using a trailing slash and
-a list of associated files.  The form ``DATA{<name>/,<opt1>,<opt2>,...}``
-adds rules to fetch any files in the directory that match one of the
-associated file options.  For example, the argument
-``DATA{MyDataDir/,REGEX:.*}`` will pass the full path to a ``MyDataDir``
-directory on the command line and ensure that the directory contains
-files corresponding to every file or content link in the ``MyDataDir``
-source directory.  In order to match associated files in subdirectories,
-specify a ``RECURSE:`` option, e.g. ``DATA{MyDataDir/,RECURSE:,REGEX:.*}``.
-
-Hash Algorithms
-^^^^^^^^^^^^^^^
-
-The following hash algorithms are supported::
-
- %(algo)     <ext>     Description
- -------     -----     -----------
- MD5         .md5      Message-Digest Algorithm 5, RFC 1321
- SHA1        .sha1     US Secure Hash Algorithm 1, RFC 3174
- SHA224      .sha224   US Secure Hash Algorithms, RFC 4634
- SHA256      .sha256   US Secure Hash Algorithms, RFC 4634
- SHA384      .sha384   US Secure Hash Algorithms, RFC 4634
- SHA512      .sha512   US Secure Hash Algorithms, RFC 4634
- SHA3_224    .sha3-224 Keccak SHA-3
- SHA3_256    .sha3-256 Keccak SHA-3
- SHA3_384    .sha3-384 Keccak SHA-3
- SHA3_512    .sha3-512 Keccak SHA-3
-
-Note that the hashes are used only for unique data identification and
-download verification.
-
-.. _`ExternalData Custom Fetch Scripts`:
-
-Custom Fetch Scripts
-^^^^^^^^^^^^^^^^^^^^
-
-When a data file must be fetched from one of the URL templates
-specified in the ``ExternalData_URL_TEMPLATES`` variable, it is
-normally downloaded using the :command:`file(DOWNLOAD)` command.
-One may specify usage of a custom fetch script by using a URL
-template of the form ``ExternalDataCustomScript://<key>/<loc>``.
-The ``<key>`` must be a C identifier, and the ``<loc>`` must
-contain the ``%(algo)`` and ``%(hash)`` placeholders.
-A variable corresponding to the key, ``ExternalData_CUSTOM_SCRIPT_<key>``,
-must be set to the full path to a ``.cmake`` script file.  The script
-will be included to perform the actual fetch, and provided with
-the following variables:
-
-.. variable:: ExternalData_CUSTOM_LOCATION
-
-  When a custom fetch script is loaded, this variable is set to the
-  location part of the URL, which will contain the substituted hash
-  algorithm name and content hash value.
-
-.. variable:: ExternalData_CUSTOM_FILE
-
-  When a custom fetch script is loaded, this variable is set to the
-  full path to a file in which the script must store the fetched
-  content.  The name of the file is unspecified and should not be
-  interpreted in any way.
-
-The custom fetch script is expected to store fetched content in the
-file or set a variable:
-
-.. variable:: ExternalData_CUSTOM_ERROR
-
-  When a custom fetch script fails to fetch the requested content,
-  it must set this variable to a short one-line message describing
-  the reason for failure.
-
-#]=======================================================================]
-
-function(ExternalData_add_test target)
-  # Expand all arguments as a single string to preserve escaped semicolons.
-  ExternalData_expand_arguments("${target}" testArgs "${ARGN}")
-  add_test(${testArgs})
-endfunction()
-
-function(ExternalData_add_target target)
-  if(NOT ExternalData_URL_TEMPLATES AND NOT ExternalData_OBJECT_STORES)
-    message(FATAL_ERROR
-      "Neither ExternalData_URL_TEMPLATES nor ExternalData_OBJECT_STORES is set!")
-  endif()
-  if(NOT ExternalData_OBJECT_STORES)
-    set(ExternalData_OBJECT_STORES ${CMAKE_BINARY_DIR}/ExternalData/Objects)
-  endif()
-  set(_ExternalData_CONFIG_CODE "")
-
-  # Store custom script configuration.
-  foreach(url_template IN LISTS ExternalData_URL_TEMPLATES)
-    if("${url_template}" MATCHES "^ExternalDataCustomScript://([^/]*)/(.*)$")
-      set(key "${CMAKE_MATCH_1}")
-      if(key MATCHES "^[A-Za-z_][A-Za-z0-9_]*$")
-        if(ExternalData_CUSTOM_SCRIPT_${key})
-          if(IS_ABSOLUTE "${ExternalData_CUSTOM_SCRIPT_${key}}")
-            string(CONCAT _ExternalData_CONFIG_CODE "${_ExternalData_CONFIG_CODE}\n"
-              "set(ExternalData_CUSTOM_SCRIPT_${key} \"${ExternalData_CUSTOM_SCRIPT_${key}}\")")
-          else()
-            message(FATAL_ERROR
-              "No ExternalData_CUSTOM_SCRIPT_${key} is not set to a full path:\n"
-              " ${ExternalData_CUSTOM_SCRIPT_${key}}")
-          endif()
-        else()
-          message(FATAL_ERROR
-            "No ExternalData_CUSTOM_SCRIPT_${key} is set for URL template:\n"
-            " ${url_template}")
-        endif()
-      else()
-        message(FATAL_ERROR
-          "Bad ExternalDataCustomScript key '${key}' in URL template:\n"
-          " ${url_template}\n"
-          "The key must be a valid C identifier.")
-      endif()
-    endif()
-
-    # Store custom algorithm name to URL component maps.
-    if("${url_template}" MATCHES "%\\(algo:([^)]*)\\)")
-      set(key "${CMAKE_MATCH_1}")
-      if(key MATCHES "^[A-Za-z_][A-Za-z0-9_]*$")
-        string(REPLACE "|" ";" _algos "${_ExternalData_REGEX_ALGO}")
-        foreach(algo ${_algos})
-          if(DEFINED ExternalData_URL_ALGO_${algo}_${key})
-            string(CONCAT _ExternalData_CONFIG_CODE "${_ExternalData_CONFIG_CODE}\n"
-              "set(ExternalData_URL_ALGO_${algo}_${key} \"${ExternalData_URL_ALGO_${algo}_${key}}\")")
-          endif()
-        endforeach()
-      else()
-        message(FATAL_ERROR
-          "Bad %(algo:${key}) in URL template:\n"
-          " ${url_template}\n"
-          "The transform name must be a valid C identifier.")
-      endif()
-    endif()
-  endforeach()
-
-  # Store configuration for use by build-time script.
-  set(config ${CMAKE_CURRENT_BINARY_DIR}/${target}_config.cmake)
-  configure_file(${_ExternalData_SELF_DIR}/ExternalData_config.cmake.in ${config} @ONLY)
-
-  set(files "")
-
-  # Set a "_ExternalData_FILE_${file}" variable for each output file to avoid
-  # duplicate entries within this target.  Set a directory property of the same
-  # name to avoid repeating custom commands with the same output in this directory.
-  # Repeating custom commands with the same output across directories or across
-  # targets in the same directory may be a race, but this is likely okay because
-  # we use atomic replacement of output files.
-  #
-  # Use local data first to prefer real files over content links.
-
-  # Custom commands to copy or link local data.
-  get_property(data_local GLOBAL PROPERTY _ExternalData_${target}_LOCAL)
-  foreach(entry IN LISTS data_local)
-    string(REPLACE "|" ";" tuple "${entry}")
-    list(GET tuple 0 file)
-    list(GET tuple 1 name)
-    if(NOT DEFINED "_ExternalData_FILE_${file}")
-      set("_ExternalData_FILE_${file}" 1)
-      get_property(added DIRECTORY PROPERTY "_ExternalData_FILE_${file}")
-      if(NOT added)
-        set_property(DIRECTORY PROPERTY "_ExternalData_FILE_${file}" 1)
-        add_custom_command(
-          COMMENT "Generating ${file}"
-          OUTPUT "${file}"
-          COMMAND ${CMAKE_COMMAND} -Drelative_top=${CMAKE_BINARY_DIR}
-                                   -Dfile=${file} -Dname=${name}
-                                   -DExternalData_ACTION=local
-                                   -DExternalData_CONFIG=${config}
-                                   -P ${_ExternalData_SELF}
-          MAIN_DEPENDENCY "${name}"
-          )
-      endif()
-      list(APPEND files "${file}")
-    endif()
-  endforeach()
-
-  # Custom commands to fetch remote data.
-  get_property(data_fetch GLOBAL PROPERTY _ExternalData_${target}_FETCH)
-  foreach(entry IN LISTS data_fetch)
-    string(REPLACE "|" ";" tuple "${entry}")
-    list(GET tuple 0 file)
-    list(GET tuple 1 name)
-    list(GET tuple 2 exts)
-    string(REPLACE "+" ";" exts_list "${exts}")
-    list(GET exts_list 0 first_ext)
-    set(stamp "-hash-stamp")
-    if(NOT DEFINED "_ExternalData_FILE_${file}")
-      set("_ExternalData_FILE_${file}" 1)
-      get_property(added DIRECTORY PROPERTY "_ExternalData_FILE_${file}")
-      if(NOT added)
-        set_property(DIRECTORY PROPERTY "_ExternalData_FILE_${file}" 1)
-        add_custom_command(
-          # Users care about the data file, so hide the hash/timestamp file.
-          COMMENT "Generating ${file}"
-          # The hash/timestamp file is the output from the build perspective.
-          # List the real file as a second output in case it is a broken link.
-          # The files must be listed in this order so CMake can hide from the
-          # make tool that a symlink target may not be newer than the input.
-          OUTPUT "${file}${stamp}" "${file}"
-          # Run the data fetch/update script.
-          COMMAND ${CMAKE_COMMAND} -Drelative_top=${CMAKE_BINARY_DIR}
-                                   -Dfile=${file} -Dname=${name} -Dexts=${exts}
-                                   -DExternalData_ACTION=fetch
-                                   -DExternalData_CONFIG=${config}
-                                   -P ${_ExternalData_SELF}
-          # Update whenever the object hash changes.
-          MAIN_DEPENDENCY "${name}${first_ext}"
-          )
-      endif()
-      list(APPEND files "${file}${stamp}")
-    endif()
-  endforeach()
-
-  # Custom target to drive all update commands.
-  add_custom_target(${target} ALL DEPENDS ${files})
-endfunction()
-
-function(ExternalData_expand_arguments target outArgsVar)
-  # Replace DATA{} references with real arguments.
-  set(data_regex "DATA{([^;{}\r\n]*)}")
-  set(other_regex "([^D]|D[^A]|DA[^T]|DAT[^A]|DATA[^{])+|.")
-  set(outArgs "")
-  # This list expansion un-escapes semicolons in list element values so we
-  # must re-escape them below anywhere a new list expansion will occur.
-  foreach(arg IN LISTS ARGN)
-    if("x${arg}" MATCHES "${data_regex}")
-      # Re-escape in-value semicolons before expansion in foreach below.
-      string(REPLACE ";" "\\;" tmp "${arg}")
-      # Split argument into DATA{}-pieces and other pieces.
-      string(REGEX MATCHALL "${data_regex}|${other_regex}" pieces "${tmp}")
-      # Compose output argument with DATA{}-pieces replaced.
-      set(outArg "")
-      foreach(piece IN LISTS pieces)
-        if("x${piece}" MATCHES "^x${data_regex}$")
-          # Replace this DATA{}-piece with a file path.
-          _ExternalData_arg("${target}" "${piece}" "${CMAKE_MATCH_1}" file)
-          string(APPEND outArg "${file}")
-        else()
-          # No replacement needed for this piece.
-          string(APPEND outArg "${piece}")
-        endif()
-      endforeach()
-    else()
-      # No replacements needed in this argument.
-      set(outArg "${arg}")
-    endif()
-    # Re-escape in-value semicolons in resulting list.
-    string(REPLACE ";" "\\;" outArg "${outArg}")
-    list(APPEND outArgs "${outArg}")
-  endforeach()
-  set("${outArgsVar}" "${outArgs}" PARENT_SCOPE)
-endfunction()
-
-#-----------------------------------------------------------------------------
-# Private helper interface
-
-set(_ExternalData_REGEX_ALGO "MD5|SHA1|SHA224|SHA256|SHA384|SHA512|SHA3_224|SHA3_256|SHA3_384|SHA3_512")
-set(_ExternalData_REGEX_EXT "md5|sha1|sha224|sha256|sha384|sha512|sha3-224|sha3-256|sha3-384|sha3-512")
-set(_ExternalData_SELF "${CMAKE_CURRENT_LIST_FILE}")
-get_filename_component(_ExternalData_SELF_DIR "${_ExternalData_SELF}" PATH)
-
-function(_ExternalData_compute_hash var_hash algo file)
-  if("${algo}" MATCHES "^${_ExternalData_REGEX_ALGO}$")
-    file("${algo}" "${file}" hash)
-    set("${var_hash}" "${hash}" PARENT_SCOPE)
-  else()
-    message(FATAL_ERROR "Hash algorithm ${algo} unimplemented.")
-  endif()
-endfunction()
-
-function(_ExternalData_random var)
-  string(RANDOM LENGTH 6 random)
-  set("${var}" "${random}" PARENT_SCOPE)
-endfunction()
-
-function(_ExternalData_exact_regex regex_var string)
-  string(REGEX REPLACE "([][+.*()^])" "\\\\\\1" regex "${string}")
-  set("${regex_var}" "${regex}" PARENT_SCOPE)
-endfunction()
-
-function(_ExternalData_atomic_write file content)
-  _ExternalData_random(random)
-  set(tmp "${file}.tmp${random}")
-  file(WRITE "${tmp}" "${content}")
-  file(RENAME "${tmp}" "${file}")
-endfunction()
-
-function(_ExternalData_link_content name var_ext)
-  if("${ExternalData_LINK_CONTENT}" MATCHES "^(${_ExternalData_REGEX_ALGO})$")
-    set(algo "${ExternalData_LINK_CONTENT}")
-  else()
-    message(FATAL_ERROR
-      "Unknown hash algorithm specified by ExternalData_LINK_CONTENT:\n"
-      "  ${ExternalData_LINK_CONTENT}")
-  endif()
-  _ExternalData_compute_hash(hash "${algo}" "${name}")
-  get_filename_component(dir "${name}" PATH)
-  set(staged "${dir}/.ExternalData_${algo}_${hash}")
-  string(TOLOWER ".${algo}" ext)
-  _ExternalData_atomic_write("${name}${ext}" "${hash}\n")
-  file(RENAME "${name}" "${staged}")
-  set("${var_ext}" "${ext}" PARENT_SCOPE)
-
-  file(RELATIVE_PATH relname "${ExternalData_SOURCE_ROOT}" "${name}${ext}")
-  message(STATUS "Linked ${relname} to ExternalData ${algo}/${hash}")
-endfunction()
-
-function(_ExternalData_arg target arg options var_file)
-  # Separate data path from the options.
-  string(REPLACE "," ";" options "${options}")
-  list(GET options 0 data)
-  list(REMOVE_AT options 0)
-
-  # Interpret trailing slashes as directories.
-  set(data_is_directory 0)
-  if("x${data}" MATCHES "^x(.*)([/\\])$")
-    set(data_is_directory 1)
-    set(data "${CMAKE_MATCH_1}")
-  endif()
-
-  # Convert to full path.
-  if(IS_ABSOLUTE "${data}")
-    set(absdata "${data}")
-  else()
-    set(absdata "${CMAKE_CURRENT_SOURCE_DIR}/${data}")
-  endif()
-  get_filename_component(absdata "${absdata}" ABSOLUTE)
-
-  # Convert to relative path under the source tree.
-  if(NOT ExternalData_SOURCE_ROOT)
-    set(ExternalData_SOURCE_ROOT "${CMAKE_SOURCE_DIR}")
-  endif()
-  set(top_src "${ExternalData_SOURCE_ROOT}")
-  file(RELATIVE_PATH reldata "${top_src}" "${absdata}")
-  if(IS_ABSOLUTE "${reldata}" OR "${reldata}" MATCHES "^\\.\\./")
-    message(FATAL_ERROR "Data file referenced by argument\n"
-      "  ${arg}\n"
-      "does not lie under the top-level source directory\n"
-      "  ${top_src}\n")
-  endif()
-  if(data_is_directory AND NOT IS_DIRECTORY "${top_src}/${reldata}")
-    message(FATAL_ERROR "Data directory referenced by argument\n"
-      "  ${arg}\n"
-      "corresponds to source tree path\n"
-      "  ${reldata}\n"
-      "that does not exist as a directory!")
-  endif()
-  if(NOT ExternalData_BINARY_ROOT)
-    set(ExternalData_BINARY_ROOT "${CMAKE_BINARY_DIR}")
-  endif()
-  set(top_bin "${ExternalData_BINARY_ROOT}")
-
-  # Handle in-source builds gracefully.
-  if("${top_src}" STREQUAL "${top_bin}")
-    if(ExternalData_LINK_CONTENT)
-      message(WARNING "ExternalData_LINK_CONTENT cannot be used in-source")
-      set(ExternalData_LINK_CONTENT 0)
-    endif()
-    set(top_same 1)
-  endif()
-
-  set(external "") # Entries external to the source tree.
-  set(internal "") # Entries internal to the source tree.
-  set(have_original ${data_is_directory})
-  set(have_original_as_dir 0)
-
-  # Process options.
-  set(series_option "")
-  set(recurse_option "")
-  set(associated_files "")
-  set(associated_regex "")
-  foreach(opt ${options})
-    # Regular expression to match associated files.
-    if("x${opt}" MATCHES "^xREGEX:([^:/]+)$")
-      list(APPEND associated_regex "${CMAKE_MATCH_1}")
-    elseif(opt STREQUAL ":")
-      # Activate series matching.
-      set(series_option "${opt}")
-    elseif(opt STREQUAL "RECURSE:")
-      # Activate recursive matching in directories.
-      set(recurse_option "${opt}")
-    elseif("x${opt}" MATCHES "^[^][:/*?]+$")
-      # Specific associated file.
-      list(APPEND associated_files "${opt}")
-    else()
-      message(FATAL_ERROR "Unknown option \"${opt}\" in argument\n"
-        "  ${arg}\n")
-    endif()
-  endforeach()
-
-  if(series_option)
-    if(data_is_directory)
-      message(FATAL_ERROR "Series option \"${series_option}\" not allowed with directories.")
-    endif()
-    if(associated_files OR associated_regex)
-      message(FATAL_ERROR "Series option \"${series_option}\" not allowed with associated files.")
-    endif()
-    if(recurse_option)
-      message(FATAL_ERROR "Recurse option \"${recurse_option}\" allowed only with directories.")
-    endif()
-    # Load a whole file series.
-    _ExternalData_arg_series()
-  elseif(data_is_directory)
-    if(associated_files OR associated_regex)
-      # Load listed/matching associated files in the directory.
-      _ExternalData_arg_associated()
-    else()
-      message(FATAL_ERROR "Data directory referenced by argument\n"
-        "  ${arg}\n"
-        "must list associated files.")
-    endif()
-  else()
-    if(recurse_option)
-      message(FATAL_ERROR "Recurse option \"${recurse_option}\" allowed only with directories.")
-    endif()
-    # Load the named data file.
-    _ExternalData_arg_single()
-    if(associated_files OR associated_regex)
-      # Load listed/matching associated files.
-      _ExternalData_arg_associated()
-    endif()
-  endif()
-
-  if(NOT have_original)
-    if(have_original_as_dir)
-      set(msg_kind FATAL_ERROR)
-      set(msg "that is directory instead of a file!")
-    else()
-      set(msg_kind AUTHOR_WARNING)
-      set(msg "that does not exist as a file (with or without an extension)!")
-    endif()
-    message(${msg_kind} "Data file referenced by argument\n"
-      "  ${arg}\n"
-      "corresponds to source tree path\n"
-      "  ${reldata}\n"
-      "${msg}")
-  endif()
-
-  if(external)
-    # Make the series available in the build tree.
-    set_property(GLOBAL APPEND PROPERTY
-      _ExternalData_${target}_FETCH "${external}")
-    set_property(GLOBAL APPEND PROPERTY
-      _ExternalData_${target}_LOCAL "${internal}")
-    set("${var_file}" "${top_bin}/${reldata}" PARENT_SCOPE)
-  else()
-    # The whole series is in the source tree.
-    set("${var_file}" "${top_src}/${reldata}" PARENT_SCOPE)
-  endif()
-endfunction()
-
-macro(_ExternalData_arg_associated)
-  # Associated files lie in the same directory.
-  if(data_is_directory)
-    set(reldir "${reldata}")
-  else()
-    get_filename_component(reldir "${reldata}" PATH)
-  endif()
-  if(reldir)
-    string(APPEND reldir "/")
-  endif()
-  _ExternalData_exact_regex(reldir_regex "${reldir}")
-  if(recurse_option)
-    set(glob GLOB_RECURSE)
-    string(APPEND reldir_regex "(.+/)?")
-  else()
-    set(glob GLOB)
-  endif()
-
-  # Find files named explicitly.
-  foreach(file ${associated_files})
-    _ExternalData_exact_regex(file_regex "${file}")
-    _ExternalData_arg_find_files(${glob} "${reldir}${file}"
-      "${reldir_regex}${file_regex}")
-  endforeach()
-
-  # Find files matching the given regular expressions.
-  set(all "")
-  set(sep "")
-  foreach(regex ${associated_regex})
-    string(APPEND all "${sep}${reldir_regex}${regex}")
-    set(sep "|")
-  endforeach()
-  _ExternalData_arg_find_files(${glob} "${reldir}" "${all}")
-endmacro()
-
-macro(_ExternalData_arg_single)
-  # Match only the named data by itself.
-  _ExternalData_exact_regex(data_regex "${reldata}")
-  _ExternalData_arg_find_files(GLOB "${reldata}" "${data_regex}")
-endmacro()
-
-macro(_ExternalData_arg_series)
-  # Configure series parsing and matching.
-  set(series_parse_prefix "")
-  set(series_parse_number "\\1")
-  set(series_parse_suffix "\\2")
-  if(ExternalData_SERIES_PARSE)
-    if(ExternalData_SERIES_PARSE_NUMBER AND ExternalData_SERIES_PARSE_SUFFIX)
-      if(ExternalData_SERIES_PARSE_PREFIX)
-        set(series_parse_prefix "\\${ExternalData_SERIES_PARSE_PREFIX}")
-      endif()
-      set(series_parse_number "\\${ExternalData_SERIES_PARSE_NUMBER}")
-      set(series_parse_suffix "\\${ExternalData_SERIES_PARSE_SUFFIX}")
-    elseif(NOT "x${ExternalData_SERIES_PARSE}" MATCHES "^x\\([^()]*\\)\\([^()]*\\)\\$$")
-      message(FATAL_ERROR
-        "ExternalData_SERIES_PARSE is set to\n"
-        "  ${ExternalData_SERIES_PARSE}\n"
-        "which is not of the form\n"
-        "  (<number>)(<suffix>)$\n"
-        "Fix the regular expression or set variables\n"
-        "  ExternalData_SERIES_PARSE_PREFIX = <prefix> regex group number, if any\n"
-        "  ExternalData_SERIES_PARSE_NUMBER = <number> regex group number\n"
-        "  ExternalData_SERIES_PARSE_SUFFIX = <suffix> regex group number\n"
-        )
-    endif()
-    set(series_parse "${ExternalData_SERIES_PARSE}")
-  else()
-    set(series_parse "([0-9]*)(\\.[^./]*)$")
-  endif()
-  if(ExternalData_SERIES_MATCH)
-    set(series_match "${ExternalData_SERIES_MATCH}")
-  else()
-    set(series_match "[_.-]?[0-9]*")
-  endif()
-
-  # Parse the base, number, and extension components of the series.
-  string(REGEX REPLACE "${series_parse}" "${series_parse_prefix};${series_parse_number};${series_parse_suffix}" tuple "${reldata}")
-  list(LENGTH tuple len)
-  if(NOT "${len}" EQUAL 3)
-    message(FATAL_ERROR "Data file referenced by argument\n"
-      "  ${arg}\n"
-      "corresponds to path\n"
-      "  ${reldata}\n"
-      "that does not match regular expression\n"
-      "  ${series_parse}")
-  endif()
-  list(GET tuple 0 relbase)
-  list(GET tuple 2 ext)
-
-  # Glob files that might match the series.
-  # Then match base, number, and extension.
-  _ExternalData_exact_regex(series_base "${relbase}")
-  _ExternalData_exact_regex(series_ext "${ext}")
-  _ExternalData_arg_find_files(GLOB "${relbase}*${ext}"
-    "${series_base}${series_match}${series_ext}")
-endmacro()
-
-function(_ExternalData_arg_find_files glob pattern regex)
-  cmake_policy(PUSH)
-  cmake_policy(SET CMP0009 NEW)
-  file(${glob} globbed RELATIVE "${top_src}" "${top_src}/${pattern}*")
-  cmake_policy(POP)
-  set(externals_count -1)
-  foreach(entry IN LISTS globbed)
-    if("x${entry}" MATCHES "^x(.*)(\\.(${_ExternalData_REGEX_EXT}))$")
-      set(relname "${CMAKE_MATCH_1}")
-      set(alg "${CMAKE_MATCH_2}")
-    else()
-      set(relname "${entry}")
-      set(alg "")
-    endif()
-    if("x${relname}" MATCHES "^x${regex}$" # matches
-        AND NOT "x${relname}" MATCHES "(^x|/)\\.ExternalData_" # not staged obj
-        )
-      if(IS_DIRECTORY "${top_src}/${entry}")
-        if("${relname}" STREQUAL "${reldata}")
-          set(have_original_as_dir 1)
-        endif()
-      else()
-        set(name "${top_src}/${relname}")
-        set(file "${top_bin}/${relname}")
-        if(alg)
-          if(NOT "${external_${externals_count}_file_name}" STREQUAL "${file}|${name}")
-            math(EXPR externals_count "${externals_count} + 1")
-            set(external_${externals_count}_file_name "${file}|${name}")
-          endif()
-          list(APPEND external_${externals_count}_algs "${alg}")
-        elseif(ExternalData_LINK_CONTENT)
-          _ExternalData_link_content("${name}" alg)
-          list(APPEND external "${file}|${name}|${alg}")
-        elseif(NOT top_same)
-          list(APPEND internal "${file}|${name}")
-        endif()
-        if("${relname}" STREQUAL "${reldata}")
-          set(have_original 1)
-        endif()
-      endif()
-    endif()
-  endforeach()
-  if(${externals_count} GREATER -1)
-    foreach(ii RANGE ${externals_count})
-      string(REPLACE ";" "+" algs_delim "${external_${ii}_algs}")
-      list(APPEND external "${external_${ii}_file_name}|${algs_delim}")
-      unset(external_${ii}_algs)
-      unset(external_${ii}_file_name)
-    endforeach()
-  endif()
-  set(external "${external}" PARENT_SCOPE)
-  set(internal "${internal}" PARENT_SCOPE)
-  set(have_original "${have_original}" PARENT_SCOPE)
-  set(have_original_as_dir "${have_original_as_dir}" PARENT_SCOPE)
-endfunction()
-
-#-----------------------------------------------------------------------------
-# Private script mode interface
-
-if(CMAKE_GENERATOR OR NOT ExternalData_ACTION)
-  return()
-endif()
-
-if(ExternalData_CONFIG)
-  include(${ExternalData_CONFIG})
-endif()
-if(NOT ExternalData_URL_TEMPLATES AND NOT ExternalData_OBJECT_STORES)
-  message(FATAL_ERROR
-    "Neither ExternalData_URL_TEMPLATES nor ExternalData_OBJECT_STORES is set!")
-endif()
-
-function(_ExternalData_link_or_copy src dst)
-  # Create a temporary file first.
-  get_filename_component(dst_dir "${dst}" PATH)
-  file(MAKE_DIRECTORY "${dst_dir}")
-  _ExternalData_random(random)
-  set(tmp "${dst}.tmp${random}")
-  if(UNIX AND NOT ExternalData_NO_SYMLINKS)
-    # Create a symbolic link.
-    set(tgt "${src}")
-    if(relative_top)
-      # Use relative path if files are close enough.
-      file(RELATIVE_PATH relsrc "${relative_top}" "${src}")
-      file(RELATIVE_PATH relfile "${relative_top}" "${dst}")
-      if(NOT IS_ABSOLUTE "${relsrc}" AND NOT "${relsrc}" MATCHES "^\\.\\./" AND
-          NOT IS_ABSOLUTE "${reldst}" AND NOT "${reldst}" MATCHES "^\\.\\./")
-        file(RELATIVE_PATH tgt "${dst_dir}" "${src}")
-      endif()
-    endif()
-    execute_process(COMMAND "${CMAKE_COMMAND}" -E create_symlink "${tgt}" "${tmp}" RESULT_VARIABLE result)
-  else()
-    # Create a copy.
-    execute_process(COMMAND "${CMAKE_COMMAND}" -E copy "${src}" "${tmp}" RESULT_VARIABLE result)
-  endif()
-  if(result)
-    file(REMOVE "${tmp}")
-    message(FATAL_ERROR "Failed to create\n  ${tmp}\nfrom\n  ${obj}")
-  endif()
-
-  # Atomically create/replace the real destination.
-  file(RENAME "${tmp}" "${dst}")
-endfunction()
-
-function(_ExternalData_download_file url file err_var msg_var)
-  set(retry 3)
-  while(retry)
-    math(EXPR retry "${retry} - 1")
-    if(ExternalData_TIMEOUT_INACTIVITY)
-      set(inactivity_timeout INACTIVITY_TIMEOUT ${ExternalData_TIMEOUT_INACTIVITY})
-    elseif(NOT "${ExternalData_TIMEOUT_INACTIVITY}" EQUAL 0)
-      set(inactivity_timeout INACTIVITY_TIMEOUT 60)
-    else()
-      set(inactivity_timeout "")
-    endif()
-    if(ExternalData_TIMEOUT_ABSOLUTE)
-      set(absolute_timeout TIMEOUT ${ExternalData_TIMEOUT_ABSOLUTE})
-    elseif(NOT "${ExternalData_TIMEOUT_ABSOLUTE}" EQUAL 0)
-      set(absolute_timeout TIMEOUT 300)
-    else()
-      set(absolute_timeout "")
-    endif()
-    file(DOWNLOAD "${url}" "${file}" STATUS status LOG log ${inactivity_timeout} ${absolute_timeout} SHOW_PROGRESS)
-    list(GET status 0 err)
-    list(GET status 1 msg)
-    if(err)
-      if("${msg}" MATCHES "HTTP response code said error" AND
-          "${log}" MATCHES "error: 503")
-        set(msg "temporarily unavailable")
-      endif()
-    elseif("${log}" MATCHES "\nHTTP[^\n]* 503")
-      set(err TRUE)
-      set(msg "temporarily unavailable")
-    endif()
-    if(NOT err OR NOT "${msg}" MATCHES "partial|timeout|temporarily")
-      break()
-    elseif(retry)
-      message(STATUS "[download terminated: ${msg}, retries left: ${retry}]")
-    endif()
-  endwhile()
-  set("${err_var}" "${err}" PARENT_SCOPE)
-  set("${msg_var}" "${msg}" PARENT_SCOPE)
-endfunction()
-
-function(_ExternalData_custom_fetch key loc file err_var msg_var)
-  if(NOT ExternalData_CUSTOM_SCRIPT_${key})
-    set(err 1)
-    set(msg "No ExternalData_CUSTOM_SCRIPT_${key} set!")
-  elseif(NOT EXISTS "${ExternalData_CUSTOM_SCRIPT_${key}}")
-    set(err 1)
-    set(msg "No '${ExternalData_CUSTOM_SCRIPT_${key}}' exists!")
-  else()
-    set(ExternalData_CUSTOM_LOCATION "${loc}")
-    set(ExternalData_CUSTOM_FILE "${file}")
-    unset(ExternalData_CUSTOM_ERROR)
-    include("${ExternalData_CUSTOM_SCRIPT_${key}}")
-    if(DEFINED ExternalData_CUSTOM_ERROR)
-      set(err 1)
-      set(msg "${ExternalData_CUSTOM_ERROR}")
-    else()
-      set(err 0)
-      set(msg "no error")
-    endif()
-  endif()
-  set("${err_var}" "${err}" PARENT_SCOPE)
-  set("${msg_var}" "${msg}" PARENT_SCOPE)
-endfunction()
-
-function(_ExternalData_get_from_object_store hash algo var_obj var_success)
-  # Search all object stores for an existing object.
-  foreach(dir ${ExternalData_OBJECT_STORES})
-    set(obj "${dir}/${algo}/${hash}")
-    if(EXISTS "${obj}")
-      message(STATUS "Found object: \"${obj}\"")
-      set("${var_obj}" "${obj}" PARENT_SCOPE)
-      set("${var_success}" 1 PARENT_SCOPE)
-      return()
-    endif()
-  endforeach()
-endfunction()
-
-function(_ExternalData_download_object name hash algo var_obj var_success var_errorMsg)
-  # Search all object stores for an existing object.
-  set(success 1)
-  foreach(dir ${ExternalData_OBJECT_STORES})
-    set(obj "${dir}/${algo}/${hash}")
-    if(EXISTS "${obj}")
-      message(STATUS "Found object: \"${obj}\"")
-      set("${var_obj}" "${obj}" PARENT_SCOPE)
-      set("${var_success}" "${success}" PARENT_SCOPE)
-      return()
-    endif()
-  endforeach()
-
-  # Download object to the first store.
-  list(GET ExternalData_OBJECT_STORES 0 store)
-  set(obj "${store}/${algo}/${hash}")
-
-  _ExternalData_random(random)
-  set(tmp "${obj}.tmp${random}")
-  set(found 0)
-  set(tried "")
-  foreach(url_template IN LISTS ExternalData_URL_TEMPLATES)
-    string(REPLACE "%(hash)" "${hash}" url_tmp "${url_template}")
-    string(REPLACE "%(algo)" "${algo}" url "${url_tmp}")
-    if(url MATCHES "^(.*)%\\(algo:([A-Za-z_][A-Za-z0-9_]*)\\)(.*)$")
-      set(lhs "${CMAKE_MATCH_1}")
-      set(key "${CMAKE_MATCH_2}")
-      set(rhs "${CMAKE_MATCH_3}")
-      if(DEFINED ExternalData_URL_ALGO_${algo}_${key})
-        set(url "${lhs}${ExternalData_URL_ALGO_${algo}_${key}}${rhs}")
-      else()
-        set(url "${lhs}${algo}${rhs}")
-      endif()
-    endif()
-    string(REGEX REPLACE "((https?|ftp)://)([^@]+@)?(.*)" "\\1\\4" secured_url "${url}")
-    message(STATUS "Fetching \"${secured_url}\"")
-    if(url MATCHES "^ExternalDataCustomScript://([A-Za-z_][A-Za-z0-9_]*)/(.*)$")
-      _ExternalData_custom_fetch("${CMAKE_MATCH_1}" "${CMAKE_MATCH_2}" "${tmp}" err errMsg)
-    else()
-      _ExternalData_download_file("${url}" "${tmp}" err errMsg)
-    endif()
-    string(APPEND tried "\n  ${url}")
-    if(err)
-      string(APPEND tried " (${errMsg})")
-    else()
-      # Verify downloaded object.
-      _ExternalData_compute_hash(dl_hash "${algo}" "${tmp}")
-      if("${dl_hash}" STREQUAL "${hash}")
-        set(found 1)
-        break()
-      else()
-        string(APPEND tried " (wrong hash ${algo}=${dl_hash})")
-        if("$ENV{ExternalData_DEBUG_DOWNLOAD}" MATCHES ".")
-          file(RENAME "${tmp}" "${store}/${algo}/${dl_hash}")
-        endif()
-      endif()
-    endif()
-    file(REMOVE "${tmp}")
-  endforeach()
-
-  get_filename_component(dir "${name}" PATH)
-  set(staged "${dir}/.ExternalData_${algo}_${hash}")
-
-  set(success 1)
-  if(found)
-    file(RENAME "${tmp}" "${obj}")
-    message(STATUS "Downloaded object: \"${obj}\"")
-  elseif(EXISTS "${staged}")
-    set(obj "${staged}")
-    message(STATUS "Staged object: \"${obj}\"")
-  else()
-    if(NOT tried)
-      set(tried "\n  (No ExternalData_URL_TEMPLATES given)")
-    endif()
-    set(success 0)
-    set("${var_errorMsg}" "Object ${algo}=${hash} not found at:${tried}" PARENT_SCOPE)
-  endif()
-
-  set("${var_obj}" "${obj}" PARENT_SCOPE)
-  set("${var_success}" "${success}" PARENT_SCOPE)
-endfunction()
-
-if("${ExternalData_ACTION}" STREQUAL "fetch")
-  foreach(v ExternalData_OBJECT_STORES file name exts)
-    if(NOT DEFINED "${v}")
-      message(FATAL_ERROR "No \"-D${v}=\" value provided!")
-    endif()
-  endforeach()
-
-  string(REPLACE "+" ";" exts_list "${exts}")
-  set(succeeded 0)
-  set(errorMsg "")
-  set(hash_list )
-  set(algo_list )
-  set(hash )
-  set(algo )
-  foreach(ext ${exts_list})
-    file(READ "${name}${ext}" hash)
-    string(STRIP "${hash}" hash)
-
-    if("${ext}" MATCHES "^\\.(${_ExternalData_REGEX_EXT})$")
-      string(TOUPPER "${CMAKE_MATCH_1}" algo)
-      string(REPLACE "-" "_" algo "${algo}")
-    else()
-      message(FATAL_ERROR "Unknown hash algorithm extension \"${ext}\"")
-    endif()
-
-    list(APPEND hash_list ${hash})
-    list(APPEND algo_list ${algo})
-  endforeach()
-
-  list(LENGTH exts_list num_extensions)
-  math(EXPR exts_range "${num_extensions} - 1")
-  foreach(ii RANGE 0 ${exts_range})
-    list(GET hash_list ${ii} hash)
-    list(GET algo_list ${ii} algo)
-    _ExternalData_get_from_object_store("${hash}" "${algo}" obj succeeded)
-    if(succeeded)
-      break()
-    endif()
-  endforeach()
-  if(NOT succeeded)
-    foreach(ii RANGE 0 ${exts_range})
-      list(GET hash_list ${ii} hash)
-      list(GET algo_list ${ii} algo)
-      _ExternalData_download_object("${name}" "${hash}" "${algo}"
-        obj succeeded algoErrorMsg)
-      string(APPEND errorMsg "\n${algoErrorMsg}")
-      if(succeeded)
-        break()
-      endif()
-    endforeach()
-  endif()
-  if(NOT succeeded)
-    message(FATAL_ERROR "${errorMsg}")
-  endif()
-  # Check if file already corresponds to the object.
-  set(stamp "-hash-stamp")
-  set(file_up_to_date 0)
-  if(EXISTS "${file}" AND EXISTS "${file}${stamp}")
-    file(READ "${file}${stamp}" f_hash)
-    string(STRIP "${f_hash}" f_hash)
-    if("${f_hash}" STREQUAL "${hash}")
-      set(file_up_to_date 1)
-    endif()
-  endif()
-
-  if(file_up_to_date)
-    # Touch the file to convince the build system it is up to date.
-    file(TOUCH "${file}")
-  else()
-    _ExternalData_link_or_copy("${obj}" "${file}")
-  endif()
-
-  # Atomically update the hash/timestamp file to record the object referenced.
-  _ExternalData_atomic_write("${file}${stamp}" "${hash}\n")
-elseif("${ExternalData_ACTION}" STREQUAL "local")
-  foreach(v file name)
-    if(NOT DEFINED "${v}")
-      message(FATAL_ERROR "No \"-D${v}=\" value provided!")
-    endif()
-  endforeach()
-  _ExternalData_link_or_copy("${name}" "${file}")
-else()
-  message(FATAL_ERROR "Unknown ExternalData_ACTION=[${ExternalData_ACTION}]")
-endif()
diff --git a/share/cmake-3.18/Modules/ExternalProject-download.cmake.in b/share/cmake-3.18/Modules/ExternalProject-download.cmake.in
deleted file mode 100644
index 99fb917..0000000
--- a/share/cmake-3.18/Modules/ExternalProject-download.cmake.in
+++ /dev/null
@@ -1,162 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-cmake_minimum_required(VERSION 3.5)
-
-function(check_file_hash has_hash hash_is_good)
-  if("${has_hash}" STREQUAL "")
-    message(FATAL_ERROR "has_hash Can't be empty")
-  endif()
-
-  if("${hash_is_good}" STREQUAL "")
-    message(FATAL_ERROR "hash_is_good Can't be empty")
-  endif()
-
-  if("@ALGO@" STREQUAL "")
-    # No check
-    set("${has_hash}" FALSE PARENT_SCOPE)
-    set("${hash_is_good}" FALSE PARENT_SCOPE)
-    return()
-  endif()
-
-  set("${has_hash}" TRUE PARENT_SCOPE)
-
-  message(STATUS "verifying file...
-       file='@LOCAL@'")
-
-  file("@ALGO@" "@LOCAL@" actual_value)
-
-  if(NOT "${actual_value}" STREQUAL "@EXPECT_VALUE@")
-    set("${hash_is_good}" FALSE PARENT_SCOPE)
-    message(STATUS "@ALGO@ hash of
-    @LOCAL@
-  does not match expected value
-    expected: '@EXPECT_VALUE@'
-      actual: '${actual_value}'")
-  else()
-    set("${hash_is_good}" TRUE PARENT_SCOPE)
-  endif()
-endfunction()
-
-function(sleep_before_download attempt)
-  if(attempt EQUAL 0)
-    return()
-  endif()
-
-  if(attempt EQUAL 1)
-    message(STATUS "Retrying...")
-    return()
-  endif()
-
-  set(sleep_seconds 0)
-
-  if(attempt EQUAL 2)
-    set(sleep_seconds 5)
-  elseif(attempt EQUAL 3)
-    set(sleep_seconds 5)
-  elseif(attempt EQUAL 4)
-    set(sleep_seconds 15)
-  elseif(attempt EQUAL 5)
-    set(sleep_seconds 60)
-  elseif(attempt EQUAL 6)
-    set(sleep_seconds 90)
-  elseif(attempt EQUAL 7)
-    set(sleep_seconds 300)
-  else()
-    set(sleep_seconds 1200)
-  endif()
-
-  message(STATUS "Retry after ${sleep_seconds} seconds (attempt #${attempt}) ...")
-
-  execute_process(COMMAND "${CMAKE_COMMAND}" -E sleep "${sleep_seconds}")
-endfunction()
-
-if("@LOCAL@" STREQUAL "")
-  message(FATAL_ERROR "LOCAL can't be empty")
-endif()
-
-if("@REMOTE@" STREQUAL "")
-  message(FATAL_ERROR "REMOTE can't be empty")
-endif()
-
-if(EXISTS "@LOCAL@")
-  check_file_hash(has_hash hash_is_good)
-  if(has_hash)
-    if(hash_is_good)
-      message(STATUS "File already exists and hash match (skip download):
-  file='@LOCAL@'
-  @ALGO@='@EXPECT_VALUE@'"
-      )
-      return()
-    else()
-      message(STATUS "File already exists but hash mismatch. Removing...")
-      file(REMOVE "@LOCAL@")
-    endif()
-  else()
-    message(STATUS "File already exists but no hash specified (use URL_HASH):
-  file='@LOCAL@'
-Old file will be removed and new file downloaded from URL."
-    )
-    file(REMOVE "@LOCAL@")
-  endif()
-endif()
-
-set(retry_number 5)
-
-message(STATUS "Downloading...
-   dst='@LOCAL@'
-   timeout='@TIMEOUT_MSG@'"
-)
-
-foreach(i RANGE ${retry_number})
-  sleep_before_download(${i})
-
-  foreach(url @REMOTE@)
-    message(STATUS "Using src='${url}'")
-
-    @TLS_VERIFY_CODE@
-    @TLS_CAINFO_CODE@
-    @NETRC_CODE@
-    @NETRC_FILE_CODE@
-
-    file(
-        DOWNLOAD
-        "${url}" "@LOCAL@"
-        @SHOW_PROGRESS@
-        @TIMEOUT_ARGS@
-        STATUS status
-        LOG log
-        @USERPWD_ARGS@
-        @HTTP_HEADERS_ARGS@
-    )
-
-    list(GET status 0 status_code)
-    list(GET status 1 status_string)
-
-    if(status_code EQUAL 0)
-      check_file_hash(has_hash hash_is_good)
-      if(has_hash AND NOT hash_is_good)
-        message(STATUS "Hash mismatch, removing...")
-        file(REMOVE "@LOCAL@")
-      else()
-        message(STATUS "Downloading... done")
-        return()
-      endif()
-    else()
-      string(APPEND logFailedURLs "error: downloading '${url}' failed
-       status_code: ${status_code}
-       status_string: ${status_string}
-       log:
-       --- LOG BEGIN ---
-       ${log}
-       --- LOG END ---
-       "
-      )
-    endif()
-  endforeach()
-endforeach()
-
-message(FATAL_ERROR "Each download failed!
-  ${logFailedURLs}
-  "
-)
diff --git a/share/cmake-3.18/Modules/ExternalProject-gitupdate.cmake.in b/share/cmake-3.18/Modules/ExternalProject-gitupdate.cmake.in
deleted file mode 100644
index eff39c1..0000000
--- a/share/cmake-3.18/Modules/ExternalProject-gitupdate.cmake.in
+++ /dev/null
@@ -1,216 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-cmake_minimum_required(VERSION 3.5)
-
-execute_process(
-  COMMAND "@git_EXECUTABLE@" rev-list --max-count=1 HEAD
-  WORKING_DIRECTORY "@work_dir@"
-  RESULT_VARIABLE error_code
-  OUTPUT_VARIABLE head_sha
-  OUTPUT_STRIP_TRAILING_WHITESPACE
-  )
-if(error_code)
-  message(FATAL_ERROR "Failed to get the hash for HEAD")
-endif()
-
-execute_process(
-  COMMAND "@git_EXECUTABLE@" show-ref "@git_tag@"
-  WORKING_DIRECTORY "@work_dir@"
-  OUTPUT_VARIABLE show_ref_output
-  )
-# If a remote ref is asked for, which can possibly move around,
-# we must always do a fetch and checkout.
-if("${show_ref_output}" MATCHES "remotes")
-  set(is_remote_ref 1)
-else()
-  set(is_remote_ref 0)
-endif()
-
-# Tag is in the form <remote>/<tag> (i.e. origin/master) we must strip
-# the remote from the tag.
-if("${show_ref_output}" MATCHES "refs/remotes/@git_tag@")
-  string(REGEX MATCH "^([^/]+)/(.+)$" _unused "@git_tag@")
-  set(git_remote "${CMAKE_MATCH_1}")
-  set(git_tag "${CMAKE_MATCH_2}")
-else()
-  set(git_remote "@git_remote_name@")
-  set(git_tag "@git_tag@")
-endif()
-
-# This will fail if the tag does not exist (it probably has not been fetched
-# yet).
-execute_process(
-  COMMAND "@git_EXECUTABLE@" rev-list --max-count=1 "${git_tag}"
-  WORKING_DIRECTORY "@work_dir@"
-  RESULT_VARIABLE error_code
-  OUTPUT_VARIABLE tag_sha
-  OUTPUT_STRIP_TRAILING_WHITESPACE
-  )
-
-# Is the hash checkout out that we want?
-if(error_code OR is_remote_ref OR NOT ("${tag_sha}" STREQUAL "${head_sha}"))
-  execute_process(
-    COMMAND "@git_EXECUTABLE@" fetch
-    WORKING_DIRECTORY "@work_dir@"
-    RESULT_VARIABLE error_code
-    )
-  if(error_code)
-    message(FATAL_ERROR "Failed to fetch repository '@git_repository@'")
-  endif()
-
-  if(is_remote_ref)
-    # Check if stash is needed
-    execute_process(
-      COMMAND "@git_EXECUTABLE@" status --porcelain
-      WORKING_DIRECTORY "@work_dir@"
-      RESULT_VARIABLE error_code
-      OUTPUT_VARIABLE repo_status
-      )
-    if(error_code)
-      message(FATAL_ERROR "Failed to get the status")
-    endif()
-    string(LENGTH "${repo_status}" need_stash)
-
-    # If not in clean state, stash changes in order to be able to perform a
-    # rebase or checkout without losing those changes permanently
-    if(need_stash)
-      execute_process(
-        COMMAND "@git_EXECUTABLE@" stash save @git_stash_save_options@
-        WORKING_DIRECTORY "@work_dir@"
-        RESULT_VARIABLE error_code
-        )
-      if(error_code)
-        message(FATAL_ERROR "Failed to stash changes")
-      endif()
-    endif()
-
-    if("@git_update_strategy@" STREQUAL "CHECKOUT")
-      execute_process(
-        COMMAND "@git_EXECUTABLE@" checkout "${git_remote}/${git_tag}"
-        WORKING_DIRECTORY "@work_dir@"
-        RESULT_VARIABLE error_code
-        )
-      if(error_code)
-        message(FATAL_ERROR "Failed to checkout tag: '${git_remote}/${git_tag}'")
-      endif()
-    else()
-      # Pull changes from the remote branch
-      execute_process(
-        COMMAND "@git_EXECUTABLE@" rebase "${git_remote}/${git_tag}"
-        WORKING_DIRECTORY "@work_dir@"
-        RESULT_VARIABLE error_code
-        OUTPUT_VARIABLE rebase_output
-        ERROR_VARIABLE  rebase_output
-        )
-      if(error_code)
-        # Rebase failed, undo the rebase attempt before continuing
-        execute_process(
-          COMMAND "@git_EXECUTABLE@" rebase --abort
-          WORKING_DIRECTORY "@work_dir@"
-        )
-
-        if(NOT "@git_update_strategy@" STREQUAL "REBASE_CHECKOUT")
-          # Not allowed to do a checkout as a fallback, so cannot proceed
-          if(need_stash)
-            execute_process(
-              COMMAND "@git_EXECUTABLE@" stash pop --index --quiet
-              WORKING_DIRECTORY "@work_dir@"
-              )
-          endif()
-          message(FATAL_ERROR "\nFailed to rebase in: '@work_dir@'."
-                              "\nOutput from the attempted rebase follows:"
-                              "\n${rebase_output}"
-                              "\n\nYou will have to resolve the conflicts manually")
-        endif()
-
-        # Fall back to checkout. We create an annotated tag so that the user
-        # can manually inspect the situation and revert if required.
-        # We can't log the failed rebase output because MSVC sees it and
-        # intervenes, causing the build to fail even though it completes.
-        # Write it to a file instead.
-        string(TIMESTAMP tag_timestamp "%Y%m%dT%H%M%S" UTC)
-        set(tag_name _cmake_ExternalProject_moved_from_here_${tag_timestamp}Z)
-        set(error_log_file ${CMAKE_CURRENT_LIST_DIR}/rebase_error_${tag_timestamp}Z.log)
-        file(WRITE ${error_log_file} "${rebase_output}")
-        message(WARNING "Rebase failed, output has been saved to ${error_log_file}"
-                        "\nFalling back to checkout, previous commit tagged as ${tag_name}")
-        execute_process(
-          COMMAND "@git_EXECUTABLE@" tag -a
-                  -m "ExternalProject attempting to move from here to ${git_remote}/${git_tag}"
-                  ${tag_name}
-          WORKING_DIRECTORY "@work_dir@"
-          RESULT_VARIABLE error_code
-        )
-        if(error_code)
-          message(FATAL_ERROR "Failed to add marker tag")
-        endif()
-
-        execute_process(
-          COMMAND "@git_EXECUTABLE@" checkout "${git_remote}/${git_tag}"
-          WORKING_DIRECTORY "@work_dir@"
-          RESULT_VARIABLE error_code
-        )
-        if(error_code)
-          message(FATAL_ERROR "Failed to checkout : '${git_remote}/${git_tag}'")
-        endif()
-
-      endif()
-    endif()
-
-    if(need_stash)
-      execute_process(
-        COMMAND "@git_EXECUTABLE@" stash pop --index --quiet
-        WORKING_DIRECTORY "@work_dir@"
-        RESULT_VARIABLE error_code
-        )
-      if(error_code)
-        # Stash pop --index failed: Try again dropping the index
-        execute_process(
-          COMMAND "@git_EXECUTABLE@" reset --hard --quiet
-          WORKING_DIRECTORY "@work_dir@"
-          RESULT_VARIABLE error_code
-          )
-        execute_process(
-          COMMAND "@git_EXECUTABLE@" stash pop --quiet
-          WORKING_DIRECTORY "@work_dir@"
-          RESULT_VARIABLE error_code
-          )
-        if(error_code)
-          # Stash pop failed: Restore previous state.
-          execute_process(
-            COMMAND "@git_EXECUTABLE@" reset --hard --quiet ${head_sha}
-            WORKING_DIRECTORY "@work_dir@"
-          )
-          execute_process(
-            COMMAND "@git_EXECUTABLE@" stash pop --index --quiet
-            WORKING_DIRECTORY "@work_dir@"
-          )
-          message(FATAL_ERROR "\nFailed to unstash changes in: '@work_dir@'."
-                              "\nYou will have to resolve the conflicts manually")
-        endif()
-      endif()
-    endif()
-  else()
-    execute_process(
-      COMMAND "@git_EXECUTABLE@" checkout "${git_tag}"
-      WORKING_DIRECTORY "@work_dir@"
-      RESULT_VARIABLE error_code
-      )
-    if(error_code)
-      message(FATAL_ERROR "Failed to checkout tag: '${git_tag}'")
-    endif()
-  endif()
-
-  set(init_submodules "@init_submodules@")
-  if(init_submodules)
-    execute_process(
-      COMMAND "@git_EXECUTABLE@" submodule update @git_submodules_recurse@ --init @git_submodules@
-      WORKING_DIRECTORY "@work_dir@"
-      RESULT_VARIABLE error_code
-      )
-  endif()
-  if(error_code)
-    message(FATAL_ERROR "Failed to update submodules in: '@work_dir@'")
-  endif()
-endif()
diff --git a/share/cmake-3.18/Modules/ExternalProject.cmake b/share/cmake-3.18/Modules/ExternalProject.cmake
deleted file mode 100644
index aecc00b..0000000
--- a/share/cmake-3.18/Modules/ExternalProject.cmake
+++ /dev/null
@@ -1,3241 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-ExternalProject
----------------
-
-.. only:: html
-
-   .. contents::
-
-Commands
-^^^^^^^^
-
-External Project Definition
-"""""""""""""""""""""""""""
-
-.. command:: ExternalProject_Add
-
-  The ``ExternalProject_Add()`` function creates a custom target to drive
-  download, update/patch, configure, build, install and test steps of an
-  external project:
-
-  .. code-block:: cmake
-
-    ExternalProject_Add(<name> [<option>...])
-
-  The individual steps within the process can be driven independently if
-  required (e.g. for CDash submission) and extra custom steps can be defined,
-  along with the ability to control the step dependencies. The directory
-  structure used for the management of the external project can also be
-  customized. The function supports a large number of options which can be used
-  to tailor the external project behavior.
-
-  **Directory Options:**
-    Most of the time, the default directory layout is sufficient. It is largely
-    an implementation detail that the main project usually doesn't need to
-    change. In some circumstances, however, control over the directory layout
-    can be useful or necessary. The directory options are potentially more
-    useful from the point of view that the main build can use the
-    :command:`ExternalProject_Get_Property` command to retrieve their values,
-    thereby allowing the main project to refer to build artifacts of the
-    external project.
-
-    ``PREFIX <dir>``
-      Root directory for the external project. Unless otherwise noted below,
-      all other directories associated with the external project will be
-      created under here.
-
-    ``TMP_DIR <dir>``
-      Directory in which to store temporary files.
-
-    ``STAMP_DIR <dir>``
-      Directory in which to store the timestamps of each step. Log files from
-      individual steps are also created in here unless overridden by LOG_DIR
-      (see *Logging Options* below).
-
-    ``LOG_DIR <dir>``
-      Directory in which to store the logs of each step.
-
-    ``DOWNLOAD_DIR <dir>``
-      Directory in which to store downloaded files before unpacking them. This
-      directory is only used by the URL download method, all other download
-      methods use ``SOURCE_DIR`` directly instead.
-
-    ``SOURCE_DIR <dir>``
-      Source directory into which downloaded contents will be unpacked, or for
-      non-URL download methods, the directory in which the repository should be
-      checked out, cloned, etc. If no download method is specified, this must
-      point to an existing directory where the external project has already
-      been unpacked or cloned/checked out.
-
-      .. note::
-         If a download method is specified, any existing contents of the source
-         directory may be deleted. Only the URL download method checks whether
-         this directory is either missing or empty before initiating the
-         download, stopping with an error if it is not empty. All other
-         download methods silently discard any previous contents of the source
-         directory.
-
-    ``BINARY_DIR <dir>``
-      Specify the build directory location. This option is ignored if
-      ``BUILD_IN_SOURCE`` is enabled.
-
-    ``INSTALL_DIR <dir>``
-      Installation prefix to be placed in the ``<INSTALL_DIR>`` placeholder.
-      This does not actually configure the external project to install to
-      the given prefix. That must be done by passing appropriate arguments
-      to the external project configuration step, e.g. using ``<INSTALL_DIR>``.
-
-    If any of the above ``..._DIR`` options are not specified, their defaults
-    are computed as follows. If the ``PREFIX`` option is given or the
-    ``EP_PREFIX`` directory property is set, then an external project is built
-    and installed under the specified prefix::
-
-      TMP_DIR      = <prefix>/tmp
-      STAMP_DIR    = <prefix>/src/<name>-stamp
-      DOWNLOAD_DIR = <prefix>/src
-      SOURCE_DIR   = <prefix>/src/<name>
-      BINARY_DIR   = <prefix>/src/<name>-build
-      INSTALL_DIR  = <prefix>
-      LOG_DIR      = <STAMP_DIR>
-
-    Otherwise, if the ``EP_BASE`` directory property is set then components
-    of an external project are stored under the specified base::
-
-      TMP_DIR      = <base>/tmp/<name>
-      STAMP_DIR    = <base>/Stamp/<name>
-      DOWNLOAD_DIR = <base>/Download/<name>
-      SOURCE_DIR   = <base>/Source/<name>
-      BINARY_DIR   = <base>/Build/<name>
-      INSTALL_DIR  = <base>/Install/<name>
-      LOG_DIR      = <STAMP_DIR>
-
-    If no ``PREFIX``, ``EP_PREFIX``, or ``EP_BASE`` is specified, then the
-    default is to set ``PREFIX`` to ``<name>-prefix``. Relative paths are
-    interpreted with respect to :variable:`CMAKE_CURRENT_BINARY_DIR` at the
-    point where ``ExternalProject_Add()`` is called.
-
-  **Download Step Options:**
-    A download method can be omitted if the ``SOURCE_DIR`` option is used to
-    point to an existing non-empty directory. Otherwise, one of the download
-    methods below must be specified (multiple download methods should not be
-    given) or a custom ``DOWNLOAD_COMMAND`` provided.
-
-    ``DOWNLOAD_COMMAND <cmd>...``
-      Overrides the command used for the download step
-      (:manual:`generator expressions <cmake-generator-expressions(7)>` are
-      supported). If this option is specified, all other download options will
-      be ignored. Providing an empty string for ``<cmd>`` effectively disables
-      the download step.
-
-    *URL Download*
-      ``URL <url1> [<url2>...]``
-        List of paths and/or URL(s) of the external project's source. When more
-        than one URL is given, they are tried in turn until one succeeds. A URL
-        may be an ordinary path in the local file system (in which case it
-        must be the only URL provided) or any downloadable URL supported by the
-        :command:`file(DOWNLOAD)` command. A local filesystem path may refer to
-        either an existing directory or to an archive file, whereas a URL is
-        expected to point to a file which can be treated as an archive. When an
-        archive is used, it will be unpacked automatically unless the
-        ``DOWNLOAD_NO_EXTRACT`` option is set to prevent it. The archive type
-        is determined by inspecting the actual content rather than using logic
-        based on the file extension.
-
-      ``URL_HASH <algo>=<hashValue>``
-        Hash of the archive file to be downloaded. The argument should be of
-        the form ``<algo>=<hashValue>`` where ``algo`` can be any of the hashing
-        algorithms supported by the :command:`file()` command. Specifying this
-        option is strongly recommended for URL downloads, as it ensures the
-        integrity of the downloaded content. It is also used as a check for a
-        previously downloaded file, allowing connection to the remote location
-        to be avoided altogether if the local directory already has a file from
-        an earlier download that matches the specified hash.
-
-      ``URL_MD5 <md5>``
-        Equivalent to ``URL_HASH MD5=<md5>``.
-
-      ``DOWNLOAD_NAME <fname>``
-        File name to use for the downloaded file. If not given, the end of the
-        URL is used to determine the file name. This option is rarely needed,
-        the default name is generally suitable and is not normally used outside
-        of code internal to the ``ExternalProject`` module.
-
-      ``DOWNLOAD_NO_EXTRACT <bool>``
-        Allows the extraction part of the download step to be disabled by
-        passing a boolean true value for this option. If this option is not
-        given, the downloaded contents will be unpacked automatically if
-        required. If extraction has been disabled, the full path to the
-        downloaded file is available as ``<DOWNLOADED_FILE>`` in subsequent
-        steps or as the property ``DOWNLOADED_FILE`` with the
-        :command:`ExternalProject_Get_Property` command.
-
-      ``DOWNLOAD_NO_PROGRESS <bool>``
-        Can be used to disable logging the download progress. If this option is
-        not given, download progress messages will be logged.
-
-      ``TIMEOUT <seconds>``
-        Maximum time allowed for file download operations.
-
-      ``HTTP_USERNAME <username>``
-        Username for the download operation if authentication is required.
-
-      ``HTTP_PASSWORD <password>``
-        Password for the download operation if authentication is required.
-
-      ``HTTP_HEADER <header1> [<header2>...]``
-        Provides an arbitrary list of HTTP headers for the download operation.
-        This can be useful for accessing content in systems like AWS, etc.
-
-      ``TLS_VERIFY <bool>``
-        Specifies whether certificate verification should be performed for
-        https URLs. If this option is not provided, the default behavior is
-        determined by the ``CMAKE_TLS_VERIFY`` variable (see
-        :command:`file(DOWNLOAD)`). If that is also not set, certificate
-        verification will not be performed. In situations where ``URL_HASH``
-        cannot be provided, this option can be an alternative verification
-        measure.
-
-      ``TLS_CAINFO <file>``
-        Specify a custom certificate authority file to use if ``TLS_VERIFY``
-        is enabled. If this option is not specified, the value of the
-        ``CMAKE_TLS_CAINFO`` variable will be used instead (see
-        :command:`file(DOWNLOAD)`)
-
-      ``NETRC <level>``
-        Specify whether the ``.netrc`` file is to be used for operation.
-        If this option is not specified, the value of the ``CMAKE_NETRC``
-        variable will be used instead (see :command:`file(DOWNLOAD)`)
-        Valid levels are:
-
-        ``IGNORED``
-          The ``.netrc`` file is ignored.
-          This is the default.
-        ``OPTIONAL``
-          The ``.netrc`` file is optional, and information in the URL
-          is preferred.  The file will be scanned to find which ever
-          information is not specified in the URL.
-        ``REQUIRED``
-          The ``.netrc`` file is required, and information in the URL
-          is ignored.
-
-      ``NETRC_FILE <file>``
-        Specify an alternative ``.netrc`` file to the one in your home directory
-        if the ``NETRC`` level is ``OPTIONAL`` or ``REQUIRED``. If this option
-        is not specified, the value of the ``CMAKE_NETRC_FILE`` variable will
-        be used instead (see :command:`file(DOWNLOAD)`)
-
-    *Git*
-      NOTE: A git version of 1.6.5 or later is required if this download method
-      is used.
-
-      ``GIT_REPOSITORY <url>``
-        URL of the git repository. Any URL understood by the ``git`` command
-        may be used.
-
-      ``GIT_TAG <tag>``
-        Git branch name, tag or commit hash. Note that branch names and tags
-        should generally be specified as remote names (i.e. ``origin/myBranch``
-        rather than simply ``myBranch``). This ensures that if the remote end
-        has its tag moved or branch rebased or history rewritten, the local
-        clone will still be updated correctly. In general, however, specifying
-        a commit hash should be preferred for a number of reasons:
-
-        - If the local clone already has the commit corresponding to the hash,
-          no ``git fetch`` needs to be performed to check for changes each time
-          CMake is re-run. This can result in a significant speed up if many
-          external projects are being used.
-        - Using a specific git hash ensures that the main project's own history
-          is fully traceable to a specific point in the external project's
-          evolution. If a branch or tag name is used instead, then checking out
-          a specific commit of the main project doesn't necessarily pin the
-          whole build to a specific point in the life of the external project.
-          The lack of such deterministic behavior makes the main project lose
-          traceability and repeatability.
-
-        If ``GIT_SHALLOW`` is enabled then ``GIT_TAG`` works only with
-        branch names and tags.  A commit hash is not allowed.
-
-      ``GIT_REMOTE_NAME <name>``
-        The optional name of the remote. If this option is not specified, it
-        defaults to ``origin``.
-
-      ``GIT_SUBMODULES <module>...``
-        Specific git submodules that should also be updated. If this option is
-        not provided, all git submodules will be updated. When :policy:`CMP0097`
-        is set to ``NEW`` if this value is set to an empty string then no submodules
-        are initialized or updated.
-
-      ``GIT_SUBMODULES_RECURSE <bool>``
-        Specify whether git submodules (if any) should update recursively by
-        passing the ``--recursive`` flag to ``git submodule update``.
-        If not specified, the default is on.
-
-      ``GIT_SHALLOW <bool>``
-        When this option is enabled, the ``git clone`` operation will be given
-        the ``--depth 1`` option. This performs a shallow clone, which avoids
-        downloading the whole history and instead retrieves just the commit
-        denoted by the ``GIT_TAG`` option.
-
-      ``GIT_PROGRESS <bool>``
-        When enabled, this option instructs the ``git clone`` operation to
-        report its progress by passing it the ``--progress`` option. Without
-        this option, the clone step for large projects may appear to make the
-        build stall, since nothing will be logged until the clone operation
-        finishes. While this option can be used to provide progress to prevent
-        the appearance of the build having stalled, it may also make the build
-        overly noisy if lots of external projects are used.
-
-      ``GIT_CONFIG <option1> [<option2>...]``
-        Specify a list of config options to pass to ``git clone``. Each option
-        listed will be transformed into its own ``--config <option>`` on the
-        ``git clone`` command line, with each option required to be in the
-        form ``key=value``.
-
-      ``GIT_REMOTE_UPDATE_STRATEGY <strategy>``
-        When ``GIT_TAG`` refers to a remote branch, this option can be used to
-        specify how the update step behaves.  The ``<strategy>`` must be one of
-        the following:
-
-        ``CHECKOUT``
-          Ignore the local branch and always checkout the branch specified by
-          ``GIT_TAG``.
-
-        ``REBASE``
-          Try to rebase the current branch to the one specified by ``GIT_TAG``.
-          If there are local uncommitted changes, they will be stashed first
-          and popped again after rebasing.  If rebasing or popping stashed
-          changes fail, abort the rebase and halt with an error.
-          When ``GIT_REMOTE_UPDATE_STRATEGY`` is not present, this is the
-          default strategy unless the default has been overridden with
-          ``CMAKE_EP_GIT_REMOTE_UPDATE_STRATEGY`` (see below).
-
-        ``REBASE_CHECKOUT``
-          Same as ``REBASE`` except if the rebase fails, an annotated tag will
-          be created at the original ``HEAD`` position from before the rebase
-          and then checkout ``GIT_TAG`` just like the ``CHECKOUT`` strategy.
-          The message stored on the annotated tag will give information about
-          what was attempted and the tag name will include a timestamp so that
-          each failed run will add a new tag.  This strategy ensures no changes
-          will be lost, but updates should always succeed if ``GIT_TAG`` refers
-          to a valid ref unless there are uncommitted changes that cannot be
-          popped successfully.
-
-        The variable ``CMAKE_EP_GIT_REMOTE_UPDATE_STRATEGY`` can be set to
-        override the default strategy.  This variable should not be set by a
-        project, it is intended for the user to set.  It is primarily intended
-        for use in continuous integration scripts to ensure that when history
-        is rewritten on a remote branch, the build doesn't end up with unintended
-        changes or failed builds resulting from conflicts during rebase operations.
-
-    *Subversion*
-      ``SVN_REPOSITORY <url>``
-        URL of the Subversion repository.
-
-      ``SVN_REVISION -r<rev>``
-        Revision to checkout from the Subversion repository.
-
-      ``SVN_USERNAME <username>``
-        Username for the Subversion checkout and update.
-
-      ``SVN_PASSWORD <password>``
-        Password for the Subversion checkout and update.
-
-      ``SVN_TRUST_CERT <bool>``
-        Specifies whether to trust the Subversion server site certificate. If
-        enabled, the ``--trust-server-cert`` option is passed to the ``svn``
-        checkout and update commands.
-
-    *Mercurial*
-      ``HG_REPOSITORY <url>``
-        URL of the mercurial repository.
-
-      ``HG_TAG <tag>``
-        Mercurial branch name, tag or commit id.
-
-    *CVS*
-      ``CVS_REPOSITORY <cvsroot>``
-        CVSROOT of the CVS repository.
-
-      ``CVS_MODULE <mod>``
-        Module to checkout from the CVS repository.
-
-      ``CVS_TAG <tag>``
-        Tag to checkout from the CVS repository.
-
-  **Update/Patch Step Options:**
-    Whenever CMake is re-run, by default the external project's sources will be
-    updated if the download method supports updates (e.g. a git repository
-    would be checked if the ``GIT_TAG`` does not refer to a specific commit).
-
-    ``UPDATE_COMMAND <cmd>...``
-      Overrides the download method's update step with a custom command.
-      The command may use
-      :manual:`generator expressions <cmake-generator-expressions(7)>`.
-
-    ``UPDATE_DISCONNECTED <bool>``
-      When enabled, this option causes the update step to be skipped. It does
-      not, however, prevent the download step. The update step can still be
-      added as a step target (see :command:`ExternalProject_Add_StepTargets`)
-      and called manually. This is useful if you want to allow developers to
-      build the project when disconnected from the network (the network may
-      still be needed for the download step though).
-
-      When this option is present, it is generally advisable to make the value
-      a cache variable under the developer's control rather than hard-coding
-      it. If this option is not present, the default value is taken from the
-      ``EP_UPDATE_DISCONNECTED`` directory property. If that is also not
-      defined, updates are performed as normal. The ``EP_UPDATE_DISCONNECTED``
-      directory property is intended as a convenience for controlling the
-      ``UPDATE_DISCONNECTED`` behavior for an entire section of a project's
-      directory hierarchy and may be a more convenient method of giving
-      developers control over whether or not to perform updates (assuming the
-      project also provides a cache variable or some other convenient method
-      for setting the directory property).
-
-    ``PATCH_COMMAND <cmd>...``
-      Specifies a custom command to patch the sources after an update. By
-      default, no patch command is defined. Note that it can be quite difficult
-      to define an appropriate patch command that performs robustly, especially
-      for download methods such as git where changing the ``GIT_TAG`` will not
-      discard changes from a previous patch, but the patch command will be
-      called again after updating to the new tag.
-
-  **Configure Step Options:**
-    The configure step is run after the download and update steps. By default,
-    the external project is assumed to be a CMake project, but this can be
-    overridden if required.
-
-    ``CONFIGURE_COMMAND <cmd>...``
-      The default configure command runs CMake with options based on the main
-      project. For non-CMake external projects, the ``CONFIGURE_COMMAND``
-      option must be used to override this behavior
-      (:manual:`generator expressions <cmake-generator-expressions(7)>` are
-      supported). For projects that require no configure step, specify this
-      option with an empty string as the command to execute.
-
-    ``CMAKE_COMMAND /.../cmake``
-      Specify an alternative cmake executable for the configure step (use an
-      absolute path). This is generally not recommended, since it is
-      usually desirable to use the same CMake version throughout the whole
-      build. This option is ignored if a custom configure command has been
-      specified with ``CONFIGURE_COMMAND``.
-
-    ``CMAKE_GENERATOR <gen>``
-      Override the CMake generator used for the configure step. Without this
-      option, the same generator as the main build will be used. This option is
-      ignored if a custom configure command has been specified with the
-      ``CONFIGURE_COMMAND`` option.
-
-    ``CMAKE_GENERATOR_PLATFORM <platform>``
-      Pass a generator-specific platform name to the CMake command (see
-      :variable:`CMAKE_GENERATOR_PLATFORM`). It is an error to provide this
-      option without the ``CMAKE_GENERATOR`` option.
-
-    ``CMAKE_GENERATOR_TOOLSET <toolset>``
-      Pass a generator-specific toolset name to the CMake command (see
-      :variable:`CMAKE_GENERATOR_TOOLSET`). It is an error to provide this
-      option without the ``CMAKE_GENERATOR`` option.
-
-    ``CMAKE_GENERATOR_INSTANCE <instance>``
-      Pass a generator-specific instance selection to the CMake command (see
-      :variable:`CMAKE_GENERATOR_INSTANCE`). It is an error to provide this
-      option without the ``CMAKE_GENERATOR`` option.
-
-    ``CMAKE_ARGS <arg>...``
-      The specified arguments are passed to the ``cmake`` command line. They
-      can be any argument the ``cmake`` command understands, not just cache
-      values defined by ``-D...`` arguments (see also
-      :manual:`CMake Options <cmake(1)>`). In addition, arguments may use
-      :manual:`generator expressions <cmake-generator-expressions(7)>`.
-
-    ``CMAKE_CACHE_ARGS <arg>...``
-      This is an alternate way of specifying cache variables where command line
-      length issues may become a problem. The arguments are expected to be in
-      the form ``-Dvar:STRING=value``, which are then transformed into
-      CMake :command:`set` commands with the ``FORCE`` option used. These
-      ``set()`` commands are written to a pre-load script which is then applied
-      using the :manual:`cmake -C <cmake(1)>` command line option. Arguments
-      may use :manual:`generator expressions <cmake-generator-expressions(7)>`.
-
-    ``CMAKE_CACHE_DEFAULT_ARGS <arg>...``
-      This is the same as the ``CMAKE_CACHE_ARGS`` option except the ``set()``
-      commands do not include the ``FORCE`` keyword. This means the values act
-      as initial defaults only and will not override any variables already set
-      from a previous run. Use this option with care, as it can lead to
-      different behavior depending on whether the build starts from a fresh
-      build directory or re-uses previous build contents.
-
-      If the CMake generator is the ``Green Hills MULTI`` and not overridden then
-      the original project's settings for the GHS toolset and target system
-      customization cache variables are propagated into the external project.
-
-    ``SOURCE_SUBDIR <dir>``
-      When no ``CONFIGURE_COMMAND`` option is specified, the configure step
-      assumes the external project has a ``CMakeLists.txt`` file at the top of
-      its source tree (i.e. in ``SOURCE_DIR``). The ``SOURCE_SUBDIR`` option
-      can be used to point to an alternative directory within the source tree
-      to use as the top of the CMake source tree instead. This must be a
-      relative path and it will be interpreted as being relative to
-      ``SOURCE_DIR``.  When ``BUILD_IN_SOURCE 1`` is specified, the
-      ``BUILD_COMMAND`` is used to point to an alternative directory within the
-      source tree.
-
-  **Build Step Options:**
-    If the configure step assumed the external project uses CMake as its build
-    system, the build step will also. Otherwise, the build step will assume a
-    Makefile-based build and simply run ``make`` with no arguments as the
-    default build step. This can be overridden with custom build commands if
-    required.
-
-    ``BUILD_COMMAND <cmd>...``
-      Overrides the default build command
-      (:manual:`generator expressions <cmake-generator-expressions(7)>` are
-      supported). If this option is not given, the default build command will
-      be chosen to integrate with the main build in the most appropriate way
-      (e.g. using recursive ``make`` for Makefile generators or
-      ``cmake --build`` if the project uses a CMake build). This option can be
-      specified with an empty string as the command to make the build step do
-      nothing.
-
-    ``BUILD_IN_SOURCE <bool>``
-      When this option is enabled, the build will be done directly within the
-      external project's source tree. This should generally be avoided, the use
-      of a separate build directory is usually preferred, but it can be useful
-      when the external project assumes an in-source build. The ``BINARY_DIR``
-      option should not be specified if building in-source.
-
-    ``BUILD_ALWAYS <bool>``
-      Enabling this option forces the build step to always be run. This can be
-      the easiest way to robustly ensure that the external project's own build
-      dependencies are evaluated rather than relying on the default
-      success timestamp-based method. This option is not normally needed unless
-      developers are expected to modify something the external project's build
-      depends on in a way that is not detectable via the step target
-      dependencies (e.g. ``SOURCE_DIR`` is used without a download method and
-      developers might modify the sources in ``SOURCE_DIR``).
-
-    ``BUILD_BYPRODUCTS <file>...``
-      Specifies files that will be generated by the build command but which
-      might or might not have their modification time updated by subsequent
-      builds. These ultimately get passed through as ``BYPRODUCTS`` to the
-      build step's own underlying call to :command:`add_custom_command`.
-
-  **Install Step Options:**
-    If the configure step assumed the external project uses CMake as its build
-    system, the install step will also. Otherwise, the install step will assume
-    a Makefile-based build and simply run ``make install`` as the default build
-    step. This can be overridden with custom install commands if required.
-
-    ``INSTALL_COMMAND <cmd>...``
-      The external project's own install step is invoked as part of the main
-      project's *build*. It is done after the external project's build step
-      and may be before or after the external project's test step (see the
-      ``TEST_BEFORE_INSTALL`` option below). The external project's install
-      rules are not part of the main project's install rules, so if anything
-      from the external project should be installed as part of the main build,
-      these need to be specified in the main build as additional
-      :command:`install` commands. The default install step builds the
-      ``install`` target of the external project, but this can be overridden
-      with a custom command using this option
-      (:manual:`generator expressions <cmake-generator-expressions(7)>` are
-      supported). Passing an empty string as the ``<cmd>`` makes the install
-      step do nothing.
-
-  **Test Step Options:**
-    The test step is only defined if at least one of the following ``TEST_...``
-    options are provided.
-
-    ``TEST_COMMAND <cmd>...``
-      Overrides the default test command
-      (:manual:`generator expressions <cmake-generator-expressions(7)>` are
-      supported). If this option is not given, the default behavior of the test
-      step is to build the external project's own ``test`` target. This option
-      can be specified with ``<cmd>`` as an empty string, which allows the test
-      step to still be defined, but it will do nothing. Do not specify any of
-      the other ``TEST_...`` options if providing an empty string as the test
-      command, but prefer to omit all ``TEST_...`` options altogether if the
-      test step target is not needed.
-
-    ``TEST_BEFORE_INSTALL <bool>``
-      When this option is enabled, the test step will be executed before the
-      install step. The default behavior is for the test step to run after the
-      install step.
-
-    ``TEST_AFTER_INSTALL <bool>``
-      This option is mainly useful as a way to indicate that the test step is
-      desired but all default behavior is sufficient. Specifying this option
-      with a boolean true value ensures the test step is defined and that it
-      comes after the install step. If both ``TEST_BEFORE_INSTALL`` and
-      ``TEST_AFTER_INSTALL`` are enabled, the latter is silently ignored.
-
-    ``TEST_EXCLUDE_FROM_MAIN <bool>``
-      If enabled, the main build's default ALL target will not depend on the
-      test step. This can be a useful way of ensuring the test step is defined
-      but only gets invoked when manually requested.
-
-  **Output Logging Options:**
-    Each of the following ``LOG_...`` options can be used to wrap the relevant
-    step in a script to capture its output to files. The log files will be
-    created in ``LOG_DIR`` if supplied or otherwise the ``STAMP_DIR``
-    directory with step-specific file names.
-
-    ``LOG_DOWNLOAD <bool>``
-      When enabled, the output of the download step is logged to files.
-
-    ``LOG_UPDATE <bool>``
-      When enabled, the output of the update step is logged to files.
-
-    ``LOG_PATCH <bool>``
-      When enabled, the output of the patch step is logged to files.
-
-    ``LOG_CONFIGURE <bool>``
-      When enabled, the output of the configure step is logged to files.
-
-    ``LOG_BUILD <bool>``
-      When enabled, the output of the build step is logged to files.
-
-    ``LOG_INSTALL <bool>``
-      When enabled, the output of the install step is logged to files.
-
-    ``LOG_TEST <bool>``
-      When enabled, the output of the test step is logged to files.
-
-    ``LOG_MERGED_STDOUTERR <bool>``
-      When enabled, stdout and stderr will be merged for any step whose
-      output is being logged to files.
-
-    ``LOG_OUTPUT_ON_FAILURE <bool>``
-      This option only has an effect if at least one of the other ``LOG_<step>``
-      options is enabled.  If an error occurs for a step which has logging to
-      file enabled, that step's output will be printed to the console if
-      ``LOG_OUTPUT_ON_FAILURE`` is set to true.  For cases where a large amount
-      of output is recorded, just the end of that output may be printed to the
-      console.
-
-  **Terminal Access Options:**
-    Steps can be given direct access to the terminal in some cases. Giving a
-    step access to the terminal may allow it to receive terminal input if
-    required, such as for authentication details not provided by other options.
-    With the :generator:`Ninja` generator, these options place the steps in the
-    ``console`` :prop_gbl:`job pool <JOB_POOLS>`. Each step can be given access
-    to the terminal individually via the following options:
-
-    ``USES_TERMINAL_DOWNLOAD <bool>``
-      Give the download step access to the terminal.
-
-    ``USES_TERMINAL_UPDATE <bool>``
-      Give the update step access to the terminal.
-
-    ``USES_TERMINAL_CONFIGURE <bool>``
-      Give the configure step access to the terminal.
-
-    ``USES_TERMINAL_BUILD <bool>``
-      Give the build step access to the terminal.
-
-    ``USES_TERMINAL_INSTALL <bool>``
-      Give the install step access to the terminal.
-
-    ``USES_TERMINAL_TEST <bool>``
-      Give the test step access to the terminal.
-
-  **Target Options:**
-    ``DEPENDS <targets>...``
-      Specify other targets on which the external project depends. The other
-      targets will be brought up to date before any of the external project's
-      steps are executed. Because the external project uses additional custom
-      targets internally for each step, the ``DEPENDS`` option is the most
-      convenient way to ensure all of those steps depend on the other targets.
-      Simply doing
-      :command:`add_dependencies(\<name\> \<targets\>) <add_dependencies>` will
-      not make any of the steps dependent on ``<targets>``.
-
-    ``EXCLUDE_FROM_ALL <bool>``
-      When enabled, this option excludes the external project from the default
-      ALL target of the main build.
-
-    ``STEP_TARGETS <step-target>...``
-      Generate custom targets for the specified steps. This is required if the
-      steps need to be triggered manually or if they need to be used as
-      dependencies of other targets. If this option is not specified, the
-      default value is taken from the ``EP_STEP_TARGETS`` directory property.
-      See :command:`ExternalProject_Add_Step` below for further discussion of
-      the effects of this option.
-
-    ``INDEPENDENT_STEP_TARGETS <step-target>...``
-      Generate custom targets for the specified steps and prevent these targets
-      from having the usual dependencies applied to them. If this option is not
-      specified, the default value is taken from the
-      ``EP_INDEPENDENT_STEP_TARGETS`` directory property. This option is mostly
-      useful for allowing individual steps to be driven independently, such as
-      for a CDash setup where each step should be initiated and reported
-      individually rather than as one whole build. See
-      :command:`ExternalProject_Add_Step` below for further discussion of the
-      effects of this option.
-
-  **Miscellaneous Options:**
-    ``LIST_SEPARATOR <sep>``
-      For any of the various ``..._COMMAND`` options, replace ``;`` with
-      ``<sep>`` in the specified command lines. This can be useful where list
-      variables may be given in commands where they should end up as
-      space-separated arguments (``<sep>`` would be a single space character
-      string in this case).
-
-    ``COMMAND <cmd>...``
-      Any of the other ``..._COMMAND`` options can have additional commands
-      appended to them by following them with as many ``COMMAND ...`` options
-      as needed
-      (:manual:`generator expressions <cmake-generator-expressions(7)>` are
-      supported). For example:
-
-      .. code-block:: cmake
-
-        ExternalProject_Add(example
-          ... # Download options, etc.
-          BUILD_COMMAND ${CMAKE_COMMAND} -E echo "Starting $<CONFIG> build"
-          COMMAND       ${CMAKE_COMMAND} --build <BINARY_DIR> --config $<CONFIG>
-          COMMAND       ${CMAKE_COMMAND} -E echo "$<CONFIG> build complete"
-        )
-
-  It should also be noted that each build step is created via a call to
-  :command:`ExternalProject_Add_Step`. See that command's documentation for the
-  automatic substitutions that are supported for some options.
-
-Obtaining Project Properties
-""""""""""""""""""""""""""""
-
-.. command:: ExternalProject_Get_Property
-
-  The ``ExternalProject_Get_Property()`` function retrieves external project
-  target properties:
-
-  .. code-block:: cmake
-
-    ExternalProject_Get_Property(<name> <prop1> [<prop2>...])
-
-  The function stores property values in variables of the same name. Property
-  names correspond to the keyword argument names of ``ExternalProject_Add()``.
-  For example, the source directory might be retrieved like so:
-
-  .. code-block:: cmake
-
-    ExternalProject_Get_property(myExtProj SOURCE_DIR)
-    message("Source dir of myExtProj = ${SOURCE_DIR}")
-
-Explicit Step Management
-""""""""""""""""""""""""
-
-The ``ExternalProject_Add()`` function on its own is often sufficient for
-incorporating an external project into the main build. Certain scenarios
-require additional work to implement desired behavior, such as adding in a
-custom step or making steps available as manually triggerable targets. The
-``ExternalProject_Add_Step()``, ``ExternalProject_Add_StepTargets()`` and
-``ExternalProject_Add_StepDependencies`` functions provide the lower level
-control needed to implement such step-level capabilities.
-
-.. command:: ExternalProject_Add_Step
-
-  The ``ExternalProject_Add_Step()`` function specifies an additional custom
-  step for an external project defined by an earlier call to
-  :command:`ExternalProject_Add`:
-
-  .. code-block:: cmake
-
-    ExternalProject_Add_Step(<name> <step> [<option>...])
-
-  ``<name>`` is the same as the name passed to the original call to
-  :command:`ExternalProject_Add`. The specified ``<step>`` must not be one of
-  the pre-defined steps (``mkdir``, ``download``, ``update``, ``skip-update``,
-  ``patch``, ``configure``, ``build``, ``install`` or ``test``). The supported
-  options are:
-
-  ``COMMAND <cmd>...``
-    The command line to be executed by this custom step
-    (:manual:`generator expressions <cmake-generator-expressions(7)>` are
-    supported). This option can be repeated multiple times to specify multiple
-    commands to be executed in order.
-
-  ``COMMENT "<text>..."``
-    Text to be printed when the custom step executes.
-
-  ``DEPENDEES <step>...``
-    Other steps (custom or pre-defined) on which this step depends.
-
-  ``DEPENDERS <step>...``
-    Other steps (custom or pre-defined) that depend on this new custom step.
-
-  ``DEPENDS <file>...``
-    Files on which this custom step depends.
-
-  ``BYPRODUCTS <file>...``
-    Files that will be generated by this custom step but which might or might
-    not have their modification time updated by subsequent builds. This list of
-    files will ultimately be passed through as the ``BYPRODUCTS`` option to the
-    :command:`add_custom_command` used to implement the custom step internally.
-
-  ``ALWAYS <bool>``
-    When enabled, this option specifies that the custom step should always be
-    run (i.e. that it is always considered out of date).
-
-  ``EXCLUDE_FROM_MAIN <bool>``
-    When enabled, this option specifies that the external project's main target
-    does not depend on the custom step.
-
-  ``WORKING_DIRECTORY <dir>``
-    Specifies the working directory to set before running the custom step's
-    command. If this option is not specified, the directory will be the value
-    of the :variable:`CMAKE_CURRENT_BINARY_DIR` at the point where
-    ``ExternalProject_Add_Step()`` was called.
-
-  ``LOG <bool>``
-    If set, this causes the output from the custom step to be captured to files
-    in the external project's ``LOG_DIR`` if supplied or ``STAMP_DIR``.
-
-  ``USES_TERMINAL <bool>``
-    If enabled, this gives the custom step direct access to the terminal if
-    possible.
-
-  The command line, comment, working directory and byproducts of every
-  standard and custom step are processed to replace the tokens
-  ``<SOURCE_DIR>``, ``<SOURCE_SUBDIR>``, ``<BINARY_DIR>``, ``<INSTALL_DIR>``
-  ``<TMP_DIR>``, ``<DOWNLOAD_DIR>`` and ``<DOWNLOADED_FILE>`` with their
-  corresponding property values defined in the original call to
-  :command:`ExternalProject_Add`.
-
-.. command:: ExternalProject_Add_StepTargets
-
-  The ``ExternalProject_Add_StepTargets()`` function generates targets for the
-  steps listed. The name of each created target will be of the form
-  ``<name>-<step>``:
-
-  .. code-block:: cmake
-
-    ExternalProject_Add_StepTargets(<name> [NO_DEPENDS] <step1> [<step2>...])
-
-  Creating a target for a step allows it to be used as a dependency of another
-  target or to be triggered manually. Having targets for specific steps also
-  allows them to be driven independently of each other by specifying targets on
-  build command lines. For example, you may be submitting to a sub-project
-  based dashboard where you want to drive the configure portion of the build,
-  then submit to the dashboard, followed by the build portion, followed
-  by tests. If you invoke a custom target that depends on a step halfway
-  through the step dependency chain, then all the previous steps will also run
-  to ensure everything is up to date.
-
-  If the ``NO_DEPENDS`` option is specified, the step target will not depend on
-  the dependencies of the external project (i.e. on any dependencies of the
-  ``<name>`` custom target created by :command:`ExternalProject_Add`). This is
-  usually safe for the ``download``, ``update`` and ``patch`` steps, since they
-  do not typically require that the dependencies are updated and built. Using
-  ``NO_DEPENDS`` for any of the other pre-defined steps, however, may break
-  parallel builds. Only use ``NO_DEPENDS`` where it is certain that the named
-  steps genuinely do not have dependencies. For custom steps, consider whether
-  or not the custom commands require the dependencies to be configured, built
-  and installed.
-
-  Internally, :command:`ExternalProject_Add` calls
-  :command:`ExternalProject_Add_Step` to create each step. If any
-  ``STEP_TARGETS`` or ``INDEPENDENT_STEP_TARGETS`` were specified, then
-  ``ExternalProject_Add_StepTargets()`` will also be called after
-  :command:`ExternalProject_Add_Step`. ``INDEPENDENT_STEP_TARGETS`` have the
-  ``NO_DEPENDS`` option set, whereas ``STEP_TARGETS`` do not. Other than that,
-  the two options result in ``ExternalProject_Add_StepTargets()`` being called
-  in the same way. Even if a step is not mentioned in either of those two
-  options, ``ExternalProject_Add_StepTargets()`` can still be called later to
-  manually define a target for the step.
-
-  The ``STEP_TARGETS`` and ``INDEPENDENT_STEP_TARGETS`` options for
-  :command:`ExternalProject_Add` are generally the easiest way to ensure
-  targets are created for specific steps of interest. For custom steps,
-  ``ExternalProject_Add_StepTargets()`` must be called explicitly if a target
-  should also be created for that custom step. An alternative to these two
-  options is to populate the ``EP_STEP_TARGETS`` and
-  ``EP_INDEPENDENT_STEP_TARGETS`` directory properties. These act as defaults
-  for the step target options and can save having to repeatedly specify the
-  same set of step targets when multiple external projects are being defined.
-
-.. command:: ExternalProject_Add_StepDependencies
-
-  The ``ExternalProject_Add_StepDependencies()`` function can be used to add
-  dependencies to a step. The dependencies added must be targets CMake already
-  knows about (these can be ordinary executable or library targets, custom
-  targets or even step targets of another external project):
-
-  .. code-block:: cmake
-
-    ExternalProject_Add_StepDependencies(<name> <step> <target1> [<target2>...])
-
-  This function takes care to set both target and file level dependencies and
-  will ensure that parallel builds will not break. It should be used instead of
-  :command:`add_dependencies` whenever adding a dependency for some of the step
-  targets generated by the ``ExternalProject`` module.
-
-Examples
-^^^^^^^^
-
-The following example shows how to download and build a hypothetical project
-called *FooBar* from github:
-
-.. code-block:: cmake
-
-  include(ExternalProject)
-  ExternalProject_Add(foobar
-    GIT_REPOSITORY    git@github.com:FooCo/FooBar.git
-    GIT_TAG           origin/release/1.2.3
-  )
-
-For the sake of the example, also define a second hypothetical external project
-called *SecretSauce*, which is downloaded from a web server. Two URLs are given
-to take advantage of a faster internal network if available, with a fallback to
-a slower external server. The project is a typical ``Makefile`` project with no
-configure step, so some of the default commands are overridden. The build is
-only required to build the *sauce* target:
-
-.. code-block:: cmake
-
-  find_program(MAKE_EXE NAMES gmake nmake make)
-  ExternalProject_Add(secretsauce
-    URL               http://intranet.somecompany.com/artifacts/sauce-2.7.tgz
-                      https://www.somecompany.com/downloads/sauce-2.7.zip
-    URL_HASH          MD5=d41d8cd98f00b204e9800998ecf8427e
-    CONFIGURE_COMMAND ""
-    BUILD_COMMAND     ${MAKE_EXE} sauce
-  )
-
-Suppose the build step of ``secretsauce`` requires that ``foobar`` must already
-be built. This could be enforced like so:
-
-.. code-block:: cmake
-
-  ExternalProject_Add_StepDependencies(secretsauce build foobar)
-
-Another alternative would be to create a custom target for ``foobar``'s build
-step and make ``secretsauce`` depend on that rather than the whole ``foobar``
-project. This would mean ``foobar`` only needs to be built, it doesn't need to
-run its install or test steps before ``secretsauce`` can be built. The
-dependency can also be defined along with the ``secretsauce`` project:
-
-.. code-block:: cmake
-
-  ExternalProject_Add_StepTargets(foobar build)
-  ExternalProject_Add(secretsauce
-    URL               http://intranet.somecompany.com/artifacts/sauce-2.7.tgz
-                      https://www.somecompany.com/downloads/sauce-2.7.zip
-    URL_HASH          MD5=d41d8cd98f00b204e9800998ecf8427e
-    CONFIGURE_COMMAND ""
-    BUILD_COMMAND     ${MAKE_EXE} sauce
-    DEPENDS           foobar-build
-  )
-
-Instead of calling :command:`ExternalProject_Add_StepTargets`, the target could
-be defined along with the ``foobar`` project itself:
-
-.. code-block:: cmake
-
-  ExternalProject_Add(foobar
-    GIT_REPOSITORY git@github.com:FooCo/FooBar.git
-    GIT_TAG        origin/release/1.2.3
-    STEP_TARGETS   build
-  )
-
-If many external projects should have the same set of step targets, setting a
-directory property may be more convenient. The ``build`` step target could be
-created automatically by setting the ``EP_STEP_TARGETS`` directory property
-before creating the external projects with :command:`ExternalProject_Add`:
-
-.. code-block:: cmake
-
-  set_property(DIRECTORY PROPERTY EP_STEP_TARGETS build)
-
-Lastly, suppose that ``secretsauce`` provides a script called ``makedoc`` which
-can be used to generate its own documentation. Further suppose that the script
-expects the output directory to be provided as the only parameter and that it
-should be run from the ``secretsauce`` source directory. A custom step and a
-custom target to trigger the script can be defined like so:
-
-.. code-block:: cmake
-
-  ExternalProject_Add_Step(secretsauce docs
-    COMMAND           <SOURCE_DIR>/makedoc <BINARY_DIR>
-    WORKING_DIRECTORY <SOURCE_DIR>
-    COMMENT           "Building secretsauce docs"
-    ALWAYS            TRUE
-    EXCLUDE_FROM_MAIN TRUE
-  )
-  ExternalProject_Add_StepTargets(secretsauce docs)
-
-The custom step could then be triggered from the main build like so::
-
-  cmake --build . --target secretsauce-docs
-
-#]=======================================================================]
-
-cmake_policy(PUSH)
-cmake_policy(SET CMP0054 NEW) # if() quoted variables not dereferenced
-cmake_policy(SET CMP0057 NEW) # if() supports IN_LIST
-
-# Pre-compute a regex to match documented keywords for each command.
-math(EXPR _ep_documentation_line_count "${CMAKE_CURRENT_LIST_LINE} - 4")
-file(STRINGS "${CMAKE_CURRENT_LIST_FILE}" lines
-     LIMIT_COUNT ${_ep_documentation_line_count}
-     REGEX "^\\.\\. command:: [A-Za-z0-9_]+|^ +``[A-Z0-9_]+ [^`]*``$")
-foreach(line IN LISTS lines)
-  if("${line}" MATCHES "^\\.\\. command:: ([A-Za-z0-9_]+)")
-    if(_ep_func)
-      string(APPEND _ep_keywords_${_ep_func} ")$")
-    endif()
-    set(_ep_func "${CMAKE_MATCH_1}")
-    #message("function [${_ep_func}]")
-    set(_ep_keywords_${_ep_func} "^(")
-    set(_ep_keyword_sep)
-  elseif("${line}" MATCHES "^ +``([A-Z0-9_]+) [^`]*``$")
-    set(_ep_key "${CMAKE_MATCH_1}")
-    # COMMAND should never be included as a keyword,
-    # for ExternalProject_Add(), as it is treated as a
-    # special case by argument parsing as an extension
-    # of a previous ..._COMMAND
-    if("x${_ep_key}x" STREQUAL "xCOMMANDx" AND
-       "x${_ep_func}x" STREQUAL "xExternalProject_Addx")
-      continue()
-    endif()
-    #message("  keyword [${_ep_key}]")
-    string(APPEND _ep_keywords_${_ep_func}
-      "${_ep_keyword_sep}${_ep_key}")
-    set(_ep_keyword_sep "|")
-  endif()
-endforeach()
-if(_ep_func)
-  string(APPEND _ep_keywords_${_ep_func} ")$")
-endif()
-
-# Save regex matching supported hash algorithm names.
-set(_ep_hash_algos "MD5|SHA1|SHA224|SHA256|SHA384|SHA512|SHA3_224|SHA3_256|SHA3_384|SHA3_512")
-set(_ep_hash_regex "^(${_ep_hash_algos})=([0-9A-Fa-f]+)$")
-
-set(_ExternalProject_SELF "${CMAKE_CURRENT_LIST_FILE}")
-get_filename_component(_ExternalProject_SELF_DIR "${_ExternalProject_SELF}" PATH)
-
-function(_ep_parse_arguments f name ns args)
-  # Transfer the arguments to this function into target properties for the
-  # new custom target we just added so that we can set up all the build steps
-  # correctly based on target properties.
-  #
-  # We loop through ARGN and consider the namespace starting with an
-  # upper-case letter followed by at least two more upper-case letters,
-  # numbers or underscores to be keywords.
-
-  if(NOT DEFINED _ExternalProject_SELF)
-    message(FATAL_ERROR "error: ExternalProject module must be explicitly included before using ${f} function")
-  endif()
-
-  set(key)
-
-  foreach(arg IN LISTS args)
-    set(is_value 1)
-
-    if(arg MATCHES "^[A-Z][A-Z0-9_][A-Z0-9_]+$" AND
-        NOT (("x${arg}x" STREQUAL "x${key}x") AND ("x${key}x" STREQUAL "xCOMMANDx")) AND
-        NOT arg MATCHES "^(TRUE|FALSE)$")
-      if(_ep_keywords_${f} AND arg MATCHES "${_ep_keywords_${f}}")
-        set(is_value 0)
-      endif()
-    endif()
-
-    if(is_value)
-      if(key)
-        # Value
-        if(NOT arg STREQUAL "")
-          set_property(TARGET ${name} APPEND PROPERTY ${ns}${key} "${arg}")
-        else()
-          get_property(have_key TARGET ${name} PROPERTY ${ns}${key} SET)
-          if(have_key)
-            get_property(value TARGET ${name} PROPERTY ${ns}${key})
-            set_property(TARGET ${name} PROPERTY ${ns}${key} "${value};${arg}")
-          else()
-            set_property(TARGET ${name} PROPERTY ${ns}${key} "${arg}")
-          endif()
-        endif()
-      else()
-        # Missing Keyword
-        message(AUTHOR_WARNING "value '${arg}' with no previous keyword in ${f}")
-      endif()
-    else()
-      set(key "${arg}")
-      if(key MATCHES GIT)
-       get_property(have_key TARGET ${name} PROPERTY ${ns}${key} SET)
-      endif()
-    endif()
-  endforeach()
-endfunction()
-
-
-define_property(DIRECTORY PROPERTY "EP_BASE" INHERITED
-  BRIEF_DOCS "Base directory for External Project storage."
-  FULL_DOCS
-  "See documentation of the ExternalProject_Add() function in the "
-  "ExternalProject module."
-  )
-
-define_property(DIRECTORY PROPERTY "EP_PREFIX" INHERITED
-  BRIEF_DOCS "Top prefix for External Project storage."
-  FULL_DOCS
-  "See documentation of the ExternalProject_Add() function in the "
-  "ExternalProject module."
-  )
-
-define_property(DIRECTORY PROPERTY "EP_STEP_TARGETS" INHERITED
-  BRIEF_DOCS
-  "List of ExternalProject steps that automatically get corresponding targets"
-  FULL_DOCS
-  "These targets will be dependent on the main target dependencies. "
-  "See documentation of the ExternalProject_Add_StepTargets() function in the "
-  "ExternalProject module."
-  )
-
-define_property(DIRECTORY PROPERTY "EP_INDEPENDENT_STEP_TARGETS" INHERITED
-  BRIEF_DOCS
-  "List of ExternalProject steps that automatically get corresponding targets"
-  FULL_DOCS
-  "These targets will not be dependent on the main target dependencies. "
-  "See documentation of the ExternalProject_Add_StepTargets() function in the "
-  "ExternalProject module."
-  )
-
-define_property(DIRECTORY PROPERTY "EP_UPDATE_DISCONNECTED" INHERITED
-  BRIEF_DOCS "Never update automatically from the remote repo."
-  FULL_DOCS
-  "See documentation of the ExternalProject_Add() function in the "
-  "ExternalProject module."
-  )
-
-function(_ep_write_gitclone_script script_filename source_dir git_EXECUTABLE git_repository git_tag git_remote_name init_submodules git_submodules_recurse git_submodules git_shallow git_progress git_config src_name work_dir gitclone_infofile gitclone_stampfile tls_verify)
-  if(NOT GIT_VERSION_STRING VERSION_LESS 1.8.5)
-    # Use `git checkout <tree-ish> --` to avoid ambiguity with a local path.
-    set(git_checkout_explicit-- "--")
-  else()
-    # Use `git checkout <branch>` even though this risks ambiguity with a
-    # local path.  Unfortunately we cannot use `git checkout <tree-ish> --`
-    # because that will not search for remote branch names, a common use case.
-    set(git_checkout_explicit-- "")
-  endif()
-  if("${git_tag}" STREQUAL "")
-    message(FATAL_ERROR "Tag for git checkout should not be empty.")
-  endif()
-
-  if(GIT_VERSION_STRING VERSION_LESS 2.20 OR 2.21 VERSION_LESS_EQUAL GIT_VERSION_STRING)
-    set(git_clone_options "--no-checkout")
-  else()
-    set(git_clone_options)
-  endif()
-  if(git_shallow)
-    if(NOT GIT_VERSION_STRING VERSION_LESS 1.7.10)
-      list(APPEND git_clone_options "--depth 1 --no-single-branch")
-    else()
-      list(APPEND git_clone_options "--depth 1")
-    endif()
-  endif()
-  if(git_progress)
-    list(APPEND git_clone_options --progress)
-  endif()
-  foreach(config IN LISTS git_config)
-    list(APPEND git_clone_options --config \"${config}\")
-  endforeach()
-  if(NOT ${git_remote_name} STREQUAL "origin")
-    list(APPEND git_clone_options --origin \"${git_remote_name}\")
-  endif()
-
-  string (REPLACE ";" " " git_clone_options "${git_clone_options}")
-
-  set(git_options)
-  # disable cert checking if explicitly told not to do it
-  if(NOT "x${tls_verify}" STREQUAL "x" AND NOT tls_verify)
-    set(git_options
-      -c http.sslVerify=false)
-  endif()
-  string (REPLACE ";" " " git_options "${git_options}")
-
-  file(WRITE ${script_filename}
-"
-if(NOT \"${gitclone_infofile}\" IS_NEWER_THAN \"${gitclone_stampfile}\")
-  message(STATUS \"Avoiding repeated git clone, stamp file is up to date: '${gitclone_stampfile}'\")
-  return()
-endif()
-
-execute_process(
-  COMMAND \${CMAKE_COMMAND} -E rm -rf \"${source_dir}\"
-  RESULT_VARIABLE error_code
-  )
-if(error_code)
-  message(FATAL_ERROR \"Failed to remove directory: '${source_dir}'\")
-endif()
-
-# try the clone 3 times in case there is an odd git clone issue
-set(error_code 1)
-set(number_of_tries 0)
-while(error_code AND number_of_tries LESS 3)
-  execute_process(
-    COMMAND \"${git_EXECUTABLE}\" ${git_options} clone ${git_clone_options} \"${git_repository}\" \"${src_name}\"
-    WORKING_DIRECTORY \"${work_dir}\"
-    RESULT_VARIABLE error_code
-    )
-  math(EXPR number_of_tries \"\${number_of_tries} + 1\")
-endwhile()
-if(number_of_tries GREATER 1)
-  message(STATUS \"Had to git clone more than once:
-          \${number_of_tries} times.\")
-endif()
-if(error_code)
-  message(FATAL_ERROR \"Failed to clone repository: '${git_repository}'\")
-endif()
-
-execute_process(
-  COMMAND \"${git_EXECUTABLE}\" ${git_options} checkout ${git_tag} ${git_checkout_explicit--}
-  WORKING_DIRECTORY \"${work_dir}/${src_name}\"
-  RESULT_VARIABLE error_code
-  )
-if(error_code)
-  message(FATAL_ERROR \"Failed to checkout tag: '${git_tag}'\")
-endif()
-
-set(init_submodules ${init_submodules})
-if(init_submodules)
-  execute_process(
-    COMMAND \"${git_EXECUTABLE}\" ${git_options} submodule update ${git_submodules_recurse} --init ${git_submodules}
-    WORKING_DIRECTORY \"${work_dir}/${src_name}\"
-    RESULT_VARIABLE error_code
-    )
-endif()
-if(error_code)
-  message(FATAL_ERROR \"Failed to update submodules in: '${work_dir}/${src_name}'\")
-endif()
-
-# Complete success, update the script-last-run stamp file:
-#
-execute_process(
-  COMMAND \${CMAKE_COMMAND} -E copy
-    \"${gitclone_infofile}\"
-    \"${gitclone_stampfile}\"
-  RESULT_VARIABLE error_code
-  )
-if(error_code)
-  message(FATAL_ERROR \"Failed to copy script-last-run stamp file: '${gitclone_stampfile}'\")
-endif()
-
-"
-)
-
-endfunction()
-
-function(_ep_write_hgclone_script script_filename source_dir hg_EXECUTABLE hg_repository hg_tag src_name work_dir hgclone_infofile hgclone_stampfile)
-  if("${hg_tag}" STREQUAL "")
-    message(FATAL_ERROR "Tag for hg checkout should not be empty.")
-  endif()
-  file(WRITE ${script_filename}
-"
-if(NOT \"${hgclone_infofile}\" IS_NEWER_THAN \"${hgclone_stampfile}\")
-  message(STATUS \"Avoiding repeated hg clone, stamp file is up to date: '${hgclone_stampfile}'\")
-  return()
-endif()
-
-execute_process(
-  COMMAND \${CMAKE_COMMAND} -E rm -rf \"${source_dir}\"
-  RESULT_VARIABLE error_code
-  )
-if(error_code)
-  message(FATAL_ERROR \"Failed to remove directory: '${source_dir}'\")
-endif()
-
-execute_process(
-  COMMAND \"${hg_EXECUTABLE}\" clone -U \"${hg_repository}\" \"${src_name}\"
-  WORKING_DIRECTORY \"${work_dir}\"
-  RESULT_VARIABLE error_code
-  )
-if(error_code)
-  message(FATAL_ERROR \"Failed to clone repository: '${hg_repository}'\")
-endif()
-
-execute_process(
-  COMMAND \"${hg_EXECUTABLE}\" update ${hg_tag}
-  WORKING_DIRECTORY \"${work_dir}/${src_name}\"
-  RESULT_VARIABLE error_code
-  )
-if(error_code)
-  message(FATAL_ERROR \"Failed to checkout tag: '${hg_tag}'\")
-endif()
-
-# Complete success, update the script-last-run stamp file:
-#
-execute_process(
-  COMMAND \${CMAKE_COMMAND} -E copy
-    \"${hgclone_infofile}\"
-    \"${hgclone_stampfile}\"
-  RESULT_VARIABLE error_code
-  )
-if(error_code)
-  message(FATAL_ERROR \"Failed to copy script-last-run stamp file: '${hgclone_stampfile}'\")
-endif()
-
-"
-)
-
-endfunction()
-
-
-function(_ep_write_gitupdate_script script_filename git_EXECUTABLE git_tag git_remote_name init_submodules git_submodules_recurse git_submodules git_repository work_dir git_update_strategy)
-  if("${git_tag}" STREQUAL "")
-    message(FATAL_ERROR "Tag for git checkout should not be empty.")
-  endif()
-  if(NOT GIT_VERSION_STRING VERSION_LESS 1.7.6)
-    set(git_stash_save_options --all --quiet)
-  else()
-    set(git_stash_save_options --quiet)
-  endif()
-
-  configure_file(
-      "${_ExternalProject_SELF_DIR}/ExternalProject-gitupdate.cmake.in"
-      "${script_filename}"
-      @ONLY
-  )
-endfunction()
-
-function(_ep_write_downloadfile_script script_filename REMOTE LOCAL timeout no_progress hash tls_verify tls_cainfo userpwd http_headers netrc netrc_file)
-  if(timeout)
-    set(TIMEOUT_ARGS TIMEOUT ${timeout})
-    set(TIMEOUT_MSG "${timeout} seconds")
-  else()
-    set(TIMEOUT_ARGS "# no TIMEOUT")
-    set(TIMEOUT_MSG "none")
-  endif()
-
-  if(no_progress)
-    set(SHOW_PROGRESS "")
-  else()
-    set(SHOW_PROGRESS "SHOW_PROGRESS")
-  endif()
-
-  if("${hash}" MATCHES "${_ep_hash_regex}")
-    set(ALGO "${CMAKE_MATCH_1}")
-    string(TOLOWER "${CMAKE_MATCH_2}" EXPECT_VALUE)
-  else()
-    set(ALGO "")
-    set(EXPECT_VALUE "")
-  endif()
-
-  set(TLS_VERIFY_CODE "")
-  set(TLS_CAINFO_CODE "")
-  set(NETRC_CODE "")
-  set(NETRC_FILE_CODE "")
-
-  # check for curl globals in the project
-  if(DEFINED CMAKE_TLS_VERIFY)
-    set(TLS_VERIFY_CODE "set(CMAKE_TLS_VERIFY ${CMAKE_TLS_VERIFY})")
-  endif()
-  if(DEFINED CMAKE_TLS_CAINFO)
-    set(TLS_CAINFO_CODE "set(CMAKE_TLS_CAINFO \"${CMAKE_TLS_CAINFO}\")")
-  endif()
-  if(DEFINED CMAKE_NETRC)
-    set(NETRC_CODE "set(CMAKE_NETRC \"${CMAKE_NETRC}\")")
-  endif()
-  if(DEFINED CMAKE_NETRC_FILE)
-    set(NETRC_FILE_CODE "set(CMAKE_NETRC_FILE \"${CMAKE_NETRC_FILE}\")")
-  endif()
-
-  # now check for curl locals so that the local values
-  # will override the globals
-
-  # check for tls_verify argument
-  string(LENGTH "${tls_verify}" tls_verify_len)
-  if(tls_verify_len GREATER 0)
-    set(TLS_VERIFY_CODE "set(CMAKE_TLS_VERIFY ${tls_verify})")
-  endif()
-  # check for tls_cainfo argument
-  string(LENGTH "${tls_cainfo}" tls_cainfo_len)
-  if(tls_cainfo_len GREATER 0)
-    set(TLS_CAINFO_CODE "set(CMAKE_TLS_CAINFO \"${tls_cainfo}\")")
-  endif()
-  # check for netrc argument
-  string(LENGTH "${netrc}" netrc_len)
-  if(netrc_len GREATER 0)
-    set(NETRC_CODE "set(CMAKE_NETRC \"${netrc}\")")
-  endif()
-  # check for netrc_file argument
-  string(LENGTH "${netrc_file}" netrc_file_len)
-  if(netrc_file_len GREATER 0)
-    set(NETRC_FILE_CODE "set(CMAKE_NETRC_FILE \"${netrc_file}\")")
-  endif()
-
-  if(userpwd STREQUAL ":")
-    set(USERPWD_ARGS)
-  else()
-    set(USERPWD_ARGS USERPWD "${userpwd}")
-  endif()
-
-  set(HTTP_HEADERS_ARGS "")
-  if(NOT http_headers STREQUAL "")
-    foreach(header ${http_headers})
-      set(
-          HTTP_HEADERS_ARGS
-          "HTTPHEADER \"${header}\"\n        ${HTTP_HEADERS_ARGS}"
-      )
-    endforeach()
-  endif()
-
-  # Used variables:
-  # * TLS_VERIFY_CODE
-  # * TLS_CAINFO_CODE
-  # * ALGO
-  # * EXPECT_VALUE
-  # * REMOTE
-  # * LOCAL
-  # * SHOW_PROGRESS
-  # * TIMEOUT_ARGS
-  # * TIMEOUT_MSG
-  # * USERPWD_ARGS
-  # * HTTP_HEADERS_ARGS
-  configure_file(
-      "${_ExternalProject_SELF_DIR}/ExternalProject-download.cmake.in"
-      "${script_filename}"
-      @ONLY
-  )
-endfunction()
-
-function(_ep_write_verifyfile_script script_filename LOCAL hash)
-  if("${hash}" MATCHES "${_ep_hash_regex}")
-    set(ALGO "${CMAKE_MATCH_1}")
-    string(TOLOWER "${CMAKE_MATCH_2}" EXPECT_VALUE)
-  else()
-    set(ALGO "")
-    set(EXPECT_VALUE "")
-  endif()
-
-  # Used variables:
-  # * ALGO
-  # * EXPECT_VALUE
-  # * LOCAL
-  configure_file(
-      "${_ExternalProject_SELF_DIR}/ExternalProject-verify.cmake.in"
-      "${script_filename}"
-      @ONLY
-  )
-endfunction()
-
-
-function(_ep_write_extractfile_script script_filename name filename directory)
-  set(args "")
-
-  if(filename MATCHES "(\\.|=)(7z|tar\\.bz2|tar\\.gz|tar\\.xz|tbz2|tgz|txz|zip)$")
-    set(args xfz)
-  endif()
-
-  if(filename MATCHES "(\\.|=)tar$")
-    set(args xf)
-  endif()
-
-  if(args STREQUAL "")
-    message(SEND_ERROR "error: do not know how to extract '${filename}' -- known types are .7z, .tar, .tar.bz2, .tar.gz, .tar.xz, .tbz2, .tgz, .txz and .zip")
-    return()
-  endif()
-
-  file(WRITE ${script_filename}
-"# Make file names absolute:
-#
-get_filename_component(filename \"${filename}\" ABSOLUTE)
-get_filename_component(directory \"${directory}\" ABSOLUTE)
-
-message(STATUS \"extracting...
-     src='\${filename}'
-     dst='\${directory}'\")
-
-if(NOT EXISTS \"\${filename}\")
-  message(FATAL_ERROR \"error: file to extract does not exist: '\${filename}'\")
-endif()
-
-# Prepare a space for extracting:
-#
-set(i 1234)
-while(EXISTS \"\${directory}/../ex-${name}\${i}\")
-  math(EXPR i \"\${i} + 1\")
-endwhile()
-set(ut_dir \"\${directory}/../ex-${name}\${i}\")
-file(MAKE_DIRECTORY \"\${ut_dir}\")
-
-# Extract it:
-#
-message(STATUS \"extracting... [tar ${args}]\")
-execute_process(COMMAND \${CMAKE_COMMAND} -E tar ${args} \${filename}
-  WORKING_DIRECTORY \${ut_dir}
-  RESULT_VARIABLE rv)
-
-if(NOT rv EQUAL 0)
-  message(STATUS \"extracting... [error clean up]\")
-  file(REMOVE_RECURSE \"\${ut_dir}\")
-  message(FATAL_ERROR \"error: extract of '\${filename}' failed\")
-endif()
-
-# Analyze what came out of the tar file:
-#
-message(STATUS \"extracting... [analysis]\")
-file(GLOB contents \"\${ut_dir}/*\")
-list(REMOVE_ITEM contents \"\${ut_dir}/.DS_Store\")
-list(LENGTH contents n)
-if(NOT n EQUAL 1 OR NOT IS_DIRECTORY \"\${contents}\")
-  set(contents \"\${ut_dir}\")
-endif()
-
-# Move \"the one\" directory to the final directory:
-#
-message(STATUS \"extracting... [rename]\")
-file(REMOVE_RECURSE \${directory})
-get_filename_component(contents \${contents} ABSOLUTE)
-file(RENAME \${contents} \${directory})
-
-# Clean up:
-#
-message(STATUS \"extracting... [clean up]\")
-file(REMOVE_RECURSE \"\${ut_dir}\")
-
-message(STATUS \"extracting... done\")
-"
-)
-
-endfunction()
-
-
-function(_ep_set_directories name)
-  get_property(prefix TARGET ${name} PROPERTY _EP_PREFIX)
-  if(NOT prefix)
-    get_property(prefix DIRECTORY PROPERTY EP_PREFIX)
-    if(NOT prefix)
-      get_property(base DIRECTORY PROPERTY EP_BASE)
-      if(NOT base)
-        set(prefix "${name}-prefix")
-      endif()
-    endif()
-  endif()
-  if(prefix)
-    set(tmp_default "${prefix}/tmp")
-    set(download_default "${prefix}/src")
-    set(source_default "${prefix}/src/${name}")
-    set(binary_default "${prefix}/src/${name}-build")
-    set(stamp_default "${prefix}/src/${name}-stamp")
-    set(install_default "${prefix}")
-  else()
-    set(tmp_default "${base}/tmp/${name}")
-    set(download_default "${base}/Download/${name}")
-    set(source_default "${base}/Source/${name}")
-    set(binary_default "${base}/Build/${name}")
-    set(stamp_default "${base}/Stamp/${name}")
-    set(install_default "${base}/Install/${name}")
-  endif()
-  get_property(build_in_source TARGET ${name} PROPERTY _EP_BUILD_IN_SOURCE)
-  if(build_in_source)
-    get_property(have_binary_dir TARGET ${name} PROPERTY _EP_BINARY_DIR SET)
-    if(have_binary_dir)
-      message(FATAL_ERROR
-        "External project ${name} has both BINARY_DIR and BUILD_IN_SOURCE!")
-    endif()
-  endif()
-  set(top "${CMAKE_CURRENT_BINARY_DIR}")
-
-  # Apply defaults and convert to absolute paths.
-  set(places stamp download source binary install tmp)
-  foreach(var ${places})
-    string(TOUPPER "${var}" VAR)
-    get_property(${var}_dir TARGET ${name} PROPERTY _EP_${VAR}_DIR)
-    if(NOT ${var}_dir)
-      set(${var}_dir "${${var}_default}")
-    endif()
-    if(NOT IS_ABSOLUTE "${${var}_dir}")
-      get_filename_component(${var}_dir "${top}/${${var}_dir}" ABSOLUTE)
-    endif()
-    set_property(TARGET ${name} PROPERTY _EP_${VAR}_DIR "${${var}_dir}")
-  endforeach()
-
-  # Special case for default log directory based on stamp directory.
-  get_property(log_dir TARGET ${name} PROPERTY _EP_LOG_DIR)
-  if(NOT log_dir)
-    get_property(log_dir TARGET ${name} PROPERTY _EP_STAMP_DIR)
-  endif()
-  if(NOT IS_ABSOLUTE "${log_dir}")
-    get_filename_component(log_dir "${top}/${log_dir}" ABSOLUTE)
-  endif()
-  set_property(TARGET ${name} PROPERTY _EP_LOG_DIR "${log_dir}")
-
-  get_property(source_subdir TARGET ${name} PROPERTY _EP_SOURCE_SUBDIR)
-  if(NOT source_subdir)
-    set_property(TARGET ${name} PROPERTY _EP_SOURCE_SUBDIR "")
-  elseif(IS_ABSOLUTE "${source_subdir}")
-    message(FATAL_ERROR
-      "External project ${name} has non-relative SOURCE_SUBDIR!")
-  else()
-    # Prefix with a slash so that when appended to the source directory, it
-    # behaves as expected.
-    set_property(TARGET ${name} PROPERTY _EP_SOURCE_SUBDIR "/${source_subdir}")
-  endif()
-  if(build_in_source)
-    get_property(source_dir TARGET ${name} PROPERTY _EP_SOURCE_DIR)
-    if(source_subdir)
-      set_property(TARGET ${name} PROPERTY _EP_BINARY_DIR "${source_dir}/${source_subdir}")
-    else()
-      set_property(TARGET ${name} PROPERTY _EP_BINARY_DIR "${source_dir}")
-    endif()
-  endif()
-
-  # Make the directories at CMake configure time *and* add a custom command
-  # to make them at build time. They need to exist at makefile generation
-  # time for Borland make and wmake so that CMake may generate makefiles
-  # with "cd C:\short\paths\with\no\spaces" commands in them.
-  #
-  # Additionally, the add_custom_command is still used in case somebody
-  # removes one of the necessary directories and tries to rebuild without
-  # re-running cmake.
-  foreach(var ${places})
-    string(TOUPPER "${var}" VAR)
-    get_property(dir TARGET ${name} PROPERTY _EP_${VAR}_DIR)
-    file(MAKE_DIRECTORY "${dir}")
-    if(NOT EXISTS "${dir}")
-      message(FATAL_ERROR "dir '${dir}' does not exist after file(MAKE_DIRECTORY)")
-    endif()
-  endforeach()
-endfunction()
-
-
-# IMPORTANT: this MUST be a macro and not a function because of the
-# in-place replacements that occur in each ${var}
-#
-macro(_ep_replace_location_tags target_name)
-  set(vars ${ARGN})
-  foreach(var ${vars})
-    if(${var})
-      foreach(dir SOURCE_DIR SOURCE_SUBDIR BINARY_DIR INSTALL_DIR TMP_DIR DOWNLOAD_DIR DOWNLOADED_FILE LOG_DIR)
-        get_property(val TARGET ${target_name} PROPERTY _EP_${dir})
-        string(REPLACE "<${dir}>" "${val}" ${var} "${${var}}")
-      endforeach()
-    endif()
-  endforeach()
-endmacro()
-
-
-function(_ep_command_line_to_initial_cache var args force)
-  set(script_initial_cache "")
-  set(regex "^([^:]+):([^=]+)=(.*)$")
-  set(setArg "")
-  set(forceArg "")
-  if(force)
-    set(forceArg "FORCE")
-  endif()
-  foreach(line ${args})
-    if("${line}" MATCHES "^-D(.*)")
-      set(line "${CMAKE_MATCH_1}")
-      if(NOT "${setArg}" STREQUAL "")
-        # This is required to build up lists in variables, or complete an entry
-        string(APPEND setArg "${accumulator}\" CACHE ${type} \"Initial cache\" ${forceArg})")
-        string(APPEND script_initial_cache "\n${setArg}")
-        set(accumulator "")
-        set(setArg "")
-      endif()
-      if("${line}" MATCHES "${regex}")
-        set(name "${CMAKE_MATCH_1}")
-        set(type "${CMAKE_MATCH_2}")
-        set(value "${CMAKE_MATCH_3}")
-        set(setArg "set(${name} \"${value}")
-      else()
-        message(WARNING "Line '${line}' does not match regex. Ignoring.")
-      endif()
-    else()
-      # Assume this is a list to append to the last var
-      string(APPEND accumulator ";${line}")
-    endif()
-  endforeach()
-  # Catch the final line of the args
-  if(NOT "${setArg}" STREQUAL "")
-    string(APPEND setArg "${accumulator}\" CACHE ${type} \"Initial cache\" ${forceArg})")
-    string(APPEND script_initial_cache "\n${setArg}")
-  endif()
-  set(${var} ${script_initial_cache} PARENT_SCOPE)
-endfunction()
-
-
-function(_ep_write_initial_cache target_name script_filename script_initial_cache)
-  # Write out values into an initial cache, that will be passed to CMake with -C
-  # Replace location tags.
-  _ep_replace_location_tags(${target_name} script_initial_cache)
-  _ep_replace_location_tags(${target_name} script_filename)
-  # Replace list separators.
-  get_property(sep TARGET ${target_name} PROPERTY _EP_LIST_SEPARATOR)
-  if(sep AND script_initial_cache)
-    string(REPLACE "${sep}" ";" script_initial_cache "${script_initial_cache}")
-  endif()
-  # Write out the initial cache file to the location specified.
-  file(GENERATE OUTPUT "${script_filename}" CONTENT "${script_initial_cache}")
-endfunction()
-
-
-function(ExternalProject_Get_Property name)
-  foreach(var ${ARGN})
-    string(TOUPPER "${var}" VAR)
-    get_property(is_set TARGET ${name} PROPERTY _EP_${VAR} SET)
-    if(NOT is_set)
-      message(FATAL_ERROR "External project \"${name}\" has no ${var}")
-    endif()
-    get_property(${var} TARGET ${name} PROPERTY _EP_${VAR})
-    set(${var} "${${var}}" PARENT_SCOPE)
-  endforeach()
-endfunction()
-
-
-function(_ep_get_configure_command_id name cfg_cmd_id_var)
-  get_target_property(cmd ${name} _EP_CONFIGURE_COMMAND)
-
-  if(cmd STREQUAL "")
-    # Explicit empty string means no configure step for this project
-    set(${cfg_cmd_id_var} "none" PARENT_SCOPE)
-  else()
-    if(NOT cmd)
-      # Default is "use cmake":
-      set(${cfg_cmd_id_var} "cmake" PARENT_SCOPE)
-    else()
-      # Otherwise we have to analyze the value:
-      if(cmd MATCHES "^[^;]*/configure")
-        set(${cfg_cmd_id_var} "configure" PARENT_SCOPE)
-      elseif(cmd MATCHES "^[^;]*/cmake" AND NOT cmd MATCHES ";-[PE];")
-        set(${cfg_cmd_id_var} "cmake" PARENT_SCOPE)
-      elseif(cmd MATCHES "config")
-        set(${cfg_cmd_id_var} "configure" PARENT_SCOPE)
-      else()
-        set(${cfg_cmd_id_var} "unknown:${cmd}" PARENT_SCOPE)
-      endif()
-    endif()
-  endif()
-endfunction()
-
-
-function(_ep_get_build_command name step cmd_var)
-  set(cmd "")
-  set(args)
-  _ep_get_configure_command_id(${name} cfg_cmd_id)
-  if(cfg_cmd_id STREQUAL "cmake")
-    # CMake project.  Select build command based on generator.
-    get_target_property(cmake_generator ${name} _EP_CMAKE_GENERATOR)
-    if("${CMAKE_GENERATOR}" MATCHES "Make" AND
-       ("${cmake_generator}" MATCHES "Make" OR NOT cmake_generator))
-      # The project uses the same Makefile generator.  Use recursive make.
-      set(cmd "$(MAKE)")
-      if(step STREQUAL "INSTALL")
-        set(args install)
-      endif()
-      if("x${step}x" STREQUAL "xTESTx")
-        set(args test)
-      endif()
-    else()
-      # Drive the project with "cmake --build".
-      get_target_property(cmake_command ${name} _EP_CMAKE_COMMAND)
-      if(cmake_command)
-        set(cmd "${cmake_command}")
-      else()
-        set(cmd "${CMAKE_COMMAND}")
-      endif()
-      set(args --build ".")
-      get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
-      if(_isMultiConfig)
-        if (CMAKE_CFG_INTDIR AND
-            NOT CMAKE_CFG_INTDIR STREQUAL "." AND
-            NOT CMAKE_CFG_INTDIR MATCHES "\\$")
-          # CMake 3.4 and below used the CMAKE_CFG_INTDIR placeholder value
-          # provided by multi-configuration generators.  Some projects were
-          # taking advantage of that undocumented implementation detail to
-          # specify a specific configuration here.  They should use
-          # BUILD_COMMAND to change the default command instead, but for
-          # compatibility honor the value.
-          set(config ${CMAKE_CFG_INTDIR})
-          message(AUTHOR_WARNING "CMAKE_CFG_INTDIR should not be set by project code.\n"
-            "To get a non-default build command, use the BUILD_COMMAND option.")
-        else()
-          set(config $<CONFIG>)
-        endif()
-        list(APPEND args --config ${config})
-      endif()
-      if(step STREQUAL "INSTALL")
-        list(APPEND args --target install)
-      endif()
-      # But for "TEST" drive the project with corresponding "ctest".
-      if("x${step}x" STREQUAL "xTESTx")
-        string(REGEX REPLACE "^(.*/)cmake([^/]*)$" "\\1ctest\\2" cmd "${cmd}")
-        set(args "")
-        if(_isMultiConfig)
-          list(APPEND args -C ${config})
-        endif()
-      endif()
-    endif()
-  else()
-    # Non-CMake project.  Guess "make" and "make install" and "make test".
-    if("${CMAKE_GENERATOR}" MATCHES "Makefiles")
-      # Try to get the parallel arguments
-      set(cmd "$(MAKE)")
-    else()
-      set(cmd "make")
-    endif()
-    if(step STREQUAL "INSTALL")
-      set(args install)
-    endif()
-    if("x${step}x" STREQUAL "xTESTx")
-      set(args test)
-    endif()
-  endif()
-
-  # Use user-specified arguments instead of default arguments, if any.
-  get_property(have_args TARGET ${name} PROPERTY _EP_${step}_ARGS SET)
-  if(have_args)
-    get_target_property(args ${name} _EP_${step}_ARGS)
-  endif()
-
-  if(NOT "${args}" STREQUAL "")
-    # args could have empty items, so we must quote it to prevent them
-    # from being silently removed
-    list(APPEND cmd "${args}")
-  endif()
-  set(${cmd_var} "${cmd}" PARENT_SCOPE)
-endfunction()
-
-function(_ep_write_log_script name step cmd_var)
-  ExternalProject_Get_Property(${name} log_dir)
-  ExternalProject_Get_Property(${name} stamp_dir)
-  set(command "${${cmd_var}}")
-
-  set(make "")
-  set(code_cygpath_make "")
-  if(command MATCHES "^\\$\\(MAKE\\)")
-    # GNU make recognizes the string "$(MAKE)" as recursive make, so
-    # ensure that it appears directly in the makefile.
-    string(REGEX REPLACE "^\\$\\(MAKE\\)" "\${make}" command "${command}")
-    set(make "-Dmake=$(MAKE)")
-
-    if(WIN32 AND NOT CYGWIN)
-      set(code_cygpath_make "
-if(\${make} MATCHES \"^/\")
-  execute_process(
-    COMMAND cygpath -w \${make}
-    OUTPUT_VARIABLE cygpath_make
-    ERROR_VARIABLE cygpath_make
-    RESULT_VARIABLE cygpath_error
-    OUTPUT_STRIP_TRAILING_WHITESPACE
-  )
-  if(NOT cygpath_error)
-    set(make \${cygpath_make})
-  endif()
-endif()
-")
-    endif()
-  endif()
-
-  set(config "")
-  if("${CMAKE_CFG_INTDIR}" MATCHES "^\\$")
-    string(REPLACE "${CMAKE_CFG_INTDIR}" "\${config}" command "${command}")
-    set(config "-Dconfig=${CMAKE_CFG_INTDIR}")
-  endif()
-
-  # Wrap multiple 'COMMAND' lines up into a second-level wrapper
-  # script so all output can be sent to one log file.
-  if(command MATCHES "(^|;)COMMAND;")
-    set(code_execute_process "
-${code_cygpath_make}
-execute_process(COMMAND \${command} RESULT_VARIABLE result)
-if(result)
-  set(msg \"Command failed (\${result}):\\n\")
-  foreach(arg IN LISTS command)
-    set(msg \"\${msg} '\${arg}'\")
-  endforeach()
-  message(FATAL_ERROR \"\${msg}\")
-endif()
-")
-    set(code "")
-    set(cmd "")
-    set(sep "")
-    foreach(arg IN LISTS command)
-      if("x${arg}" STREQUAL "xCOMMAND")
-        if(NOT "x${cmd}" STREQUAL "x")
-          string(APPEND code "set(command \"${cmd}\")${code_execute_process}")
-        endif()
-        set(cmd "")
-        set(sep "")
-      else()
-        string(APPEND cmd "${sep}${arg}")
-        set(sep ";")
-      endif()
-    endforeach()
-    string(APPEND code "set(command \"${cmd}\")${code_execute_process}")
-    file(GENERATE OUTPUT "${stamp_dir}/${name}-${step}-$<CONFIG>-impl.cmake" CONTENT "${code}")
-    set(command ${CMAKE_COMMAND} "-Dmake=\${make}" "-Dconfig=\${config}" -P ${stamp_dir}/${name}-${step}-$<CONFIG>-impl.cmake)
-  endif()
-
-  # Wrap the command in a script to log output to files.
-  set(script ${stamp_dir}/${name}-${step}-$<CONFIG>.cmake)
-  set(logbase ${log_dir}/${name}-${step})
-  get_property(log_merged TARGET ${name} PROPERTY _EP_LOG_MERGED_STDOUTERR)
-  get_property(log_output_on_failure TARGET ${name} PROPERTY _EP_LOG_OUTPUT_ON_FAILURE)
-  if (log_merged)
-    set(stdout_log "${logbase}.log")
-    set(stderr_log "${logbase}.log")
-  else()
-    set(stdout_log "${logbase}-out.log")
-    set(stderr_log "${logbase}-err.log")
-  endif()
-  set(code "
-cmake_minimum_required(VERSION 3.15)
-${code_cygpath_make}
-set(command \"${command}\")
-set(log_merged \"${log_merged}\")
-set(log_output_on_failure \"${log_output_on_failure}\")
-set(stdout_log \"${stdout_log}\")
-set(stderr_log \"${stderr_log}\")
-execute_process(
-  COMMAND \${command}
-  RESULT_VARIABLE result
-  OUTPUT_FILE \"\${stdout_log}\"
-  ERROR_FILE \"\${stderr_log}\"
-  )
-macro(read_up_to_max_size log_file output_var)
-  file(SIZE \${log_file} determined_size)
-  set(max_size 10240)
-  if (determined_size GREATER max_size)
-    math(EXPR seek_position \"\${determined_size} - \${max_size}\")
-    file(READ \${log_file} \${output_var} OFFSET \${seek_position})
-    set(\${output_var} \"...skipping to end...\\n\${\${output_var}}\")
-  else()
-    file(READ \${log_file} \${output_var})
-  endif()
-endmacro()
-if(result)
-  set(msg \"Command failed: \${result}\\n\")
-  foreach(arg IN LISTS command)
-    set(msg \"\${msg} '\${arg}'\")
-  endforeach()
-  if (\${log_merged})
-    set(msg \"\${msg}\\nSee also\\n  \${stderr_log}\")
-  else()
-    set(msg \"\${msg}\\nSee also\\n  ${logbase}-*.log\")
-  endif()
-  if (\${log_output_on_failure})
-    message(SEND_ERROR \"\${msg}\")
-    if (\${log_merged})
-      read_up_to_max_size(\"\${stderr_log}\" error_log_contents)
-      message(STATUS \"Log output is:\\n\${error_log_contents}\")
-    else()
-      read_up_to_max_size(\"\${stdout_log}\" out_log_contents)
-      read_up_to_max_size(\"\${stderr_log}\" err_log_contents)
-      message(STATUS \"stdout output is:\\n\${out_log_contents}\")
-      message(STATUS \"stderr output is:\\n\${err_log_contents}\")
-    endif()
-    message(FATAL_ERROR \"Stopping after outputting logs.\")
-  else()
-    message(FATAL_ERROR \"\${msg}\")
-  endif()
-else()
-  set(msg \"${name} ${step} command succeeded.  See also ${logbase}-*.log\")
-  message(STATUS \"\${msg}\")
-endif()
-")
-  file(GENERATE OUTPUT "${script}" CONTENT "${code}")
-  set(command ${CMAKE_COMMAND} ${make} ${config} -P ${script})
-  set(${cmd_var} "${command}" PARENT_SCOPE)
-endfunction()
-
-# This module used to use "/${CMAKE_CFG_INTDIR}" directly and produced
-# makefiles with "/./" in paths for custom command dependencies. Which
-# resulted in problems with parallel make -j invocations.
-#
-# This function was added so that the suffix (search below for ${cfgdir}) is
-# only set to "/${CMAKE_CFG_INTDIR}" when ${CMAKE_CFG_INTDIR} is not going to
-# be "." (multi-configuration build systems like Visual Studio and Xcode...)
-#
-function(_ep_get_configuration_subdir_suffix suffix_var)
-  set(suffix "")
-  get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
-  if(_isMultiConfig)
-    set(suffix "/${CMAKE_CFG_INTDIR}")
-  endif()
-  set(${suffix_var} "${suffix}" PARENT_SCOPE)
-endfunction()
-
-
-function(_ep_get_step_stampfile name step stampfile_var)
-  ExternalProject_Get_Property(${name} stamp_dir)
-
-  _ep_get_configuration_subdir_suffix(cfgdir)
-  set(stampfile "${stamp_dir}${cfgdir}/${name}-${step}")
-
-  set(${stampfile_var} "${stampfile}" PARENT_SCOPE)
-endfunction()
-
-
-function(_ep_get_complete_stampfile name stampfile_var)
-  set(cmf_dir ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles)
-  _ep_get_configuration_subdir_suffix(cfgdir)
-  set(stampfile "${cmf_dir}${cfgdir}/${name}-complete")
-
-  set(${stampfile_var} ${stampfile} PARENT_SCOPE)
-endfunction()
-
-
-function(ExternalProject_Add_StepTargets name)
-  set(steps ${ARGN})
-  if(ARGC GREATER 1 AND "${ARGV1}" STREQUAL "NO_DEPENDS")
-    set(no_deps 1)
-    list(REMOVE_AT steps 0)
-  endif()
-  foreach(step ${steps})
-    if(no_deps  AND  "${step}" MATCHES "^(configure|build|install|test)$")
-      message(AUTHOR_WARNING "Using NO_DEPENDS for \"${step}\" step  might break parallel builds")
-    endif()
-    _ep_get_step_stampfile(${name} ${step} stamp_file)
-    add_custom_target(${name}-${step}
-      DEPENDS ${stamp_file})
-    set_property(TARGET ${name}-${step} PROPERTY _EP_IS_EXTERNAL_PROJECT_STEP 1)
-    set_property(TARGET ${name}-${step} PROPERTY LABELS ${name})
-    set_property(TARGET ${name}-${step} PROPERTY FOLDER "ExternalProjectTargets/${name}")
-
-    # Depend on other external projects (target-level).
-    if(NOT no_deps)
-      get_property(deps TARGET ${name} PROPERTY _EP_DEPENDS)
-      foreach(arg IN LISTS deps)
-        add_dependencies(${name}-${step} ${arg})
-      endforeach()
-    endif()
-  endforeach()
-endfunction()
-
-
-function(ExternalProject_Add_Step name step)
-  _ep_get_complete_stampfile(${name} complete_stamp_file)
-  _ep_get_step_stampfile(${name} ${step} stamp_file)
-
-  _ep_parse_arguments(ExternalProject_Add_Step
-                      ${name} _EP_${step}_ "${ARGN}")
-
-  get_property(exclude_from_main TARGET ${name} PROPERTY _EP_${step}_EXCLUDE_FROM_MAIN)
-  if(NOT exclude_from_main)
-    add_custom_command(APPEND
-      OUTPUT ${complete_stamp_file}
-      DEPENDS ${stamp_file}
-      )
-  endif()
-
-  # Steps depending on this step.
-  get_property(dependers TARGET ${name} PROPERTY _EP_${step}_DEPENDERS)
-  foreach(depender IN LISTS dependers)
-    _ep_get_step_stampfile(${name} ${depender} depender_stamp_file)
-    add_custom_command(APPEND
-      OUTPUT ${depender_stamp_file}
-      DEPENDS ${stamp_file}
-      )
-  endforeach()
-
-  # Dependencies on files.
-  get_property(depends TARGET ${name} PROPERTY _EP_${step}_DEPENDS)
-
-  # Byproducts of the step.
-  get_property(byproducts TARGET ${name} PROPERTY _EP_${step}_BYPRODUCTS)
-
-  # Dependencies on steps.
-  get_property(dependees TARGET ${name} PROPERTY _EP_${step}_DEPENDEES)
-  foreach(dependee IN LISTS dependees)
-    _ep_get_step_stampfile(${name} ${dependee} dependee_stamp_file)
-    list(APPEND depends ${dependee_stamp_file})
-  endforeach()
-
-  # The command to run.
-  get_property(command TARGET ${name} PROPERTY _EP_${step}_COMMAND)
-  if(command)
-    set(comment "Performing ${step} step for '${name}'")
-  else()
-    set(comment "No ${step} step for '${name}'")
-  endif()
-  get_property(work_dir TARGET ${name} PROPERTY _EP_${step}_WORKING_DIRECTORY)
-
-  # Replace list separators.
-  get_property(sep TARGET ${name} PROPERTY _EP_LIST_SEPARATOR)
-  if(sep AND command)
-    string(REPLACE "${sep}" "\\;" command "${command}")
-  endif()
-
-  # Replace location tags.
-  _ep_replace_location_tags(${name} comment command work_dir byproducts)
-
-  # Custom comment?
-  get_property(comment_set TARGET ${name} PROPERTY _EP_${step}_COMMENT SET)
-  if(comment_set)
-    get_property(comment TARGET ${name} PROPERTY _EP_${step}_COMMENT)
-  endif()
-
-  # Uses terminal?
-  get_property(uses_terminal TARGET ${name} PROPERTY _EP_${step}_USES_TERMINAL)
-  if(uses_terminal)
-    set(uses_terminal USES_TERMINAL)
-  else()
-    set(uses_terminal "")
-  endif()
-
-  # Run every time?
-  get_property(always TARGET ${name} PROPERTY _EP_${step}_ALWAYS)
-  if(always)
-    set_property(SOURCE ${stamp_file} PROPERTY SYMBOLIC 1)
-    set(touch)
-    # Remove any existing stamp in case the option changed in an existing tree.
-    get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
-    if(_isMultiConfig)
-      foreach(cfg ${CMAKE_CONFIGURATION_TYPES})
-        string(REPLACE "/${CMAKE_CFG_INTDIR}" "/${cfg}" stamp_file_config "${stamp_file}")
-        file(REMOVE ${stamp_file_config})
-      endforeach()
-    else()
-      file(REMOVE ${stamp_file})
-    endif()
-  else()
-    set(touch ${CMAKE_COMMAND} -E touch ${stamp_file})
-  endif()
-
-  # Wrap with log script?
-  get_property(log TARGET ${name} PROPERTY _EP_${step}_LOG)
-  if(command AND log)
-    _ep_write_log_script(${name} ${step} command)
-  endif()
-
-  if("${command}" STREQUAL "")
-    # Some generators (i.e. Xcode) will not generate a file level target
-    # if no command is set, and therefore the dependencies on this
-    # target will be broken.
-    # The empty command is replaced by an echo command here in order to
-    # avoid this issue.
-    set(command ${CMAKE_COMMAND} -E echo_append)
-  endif()
-
-  set(__cmdQuoted)
-  foreach(__item IN LISTS command)
-    string(APPEND __cmdQuoted " [==[${__item}]==]")
-  endforeach()
-  cmake_language(EVAL CODE "
-    add_custom_command(
-      OUTPUT \${stamp_file}
-      BYPRODUCTS \${byproducts}
-      COMMENT \${comment}
-      COMMAND ${__cmdQuoted}
-      COMMAND \${touch}
-      DEPENDS \${depends}
-      WORKING_DIRECTORY \${work_dir}
-      VERBATIM
-      ${uses_terminal}
-    )"
-  )
-  set_property(TARGET ${name} APPEND PROPERTY _EP_STEPS ${step})
-
-  # Add custom "step target"?
-  get_property(step_targets TARGET ${name} PROPERTY _EP_STEP_TARGETS)
-  if(NOT step_targets)
-    get_property(step_targets DIRECTORY PROPERTY EP_STEP_TARGETS)
-  endif()
-  foreach(st ${step_targets})
-    if("${st}" STREQUAL "${step}")
-      ExternalProject_Add_StepTargets(${name} ${step})
-      break()
-    endif()
-  endforeach()
-
-  get_property(independent_step_targets TARGET ${name} PROPERTY _EP_INDEPENDENT_STEP_TARGETS)
-  if(NOT independent_step_targets)
-    get_property(independent_step_targets DIRECTORY PROPERTY EP_INDEPENDENT_STEP_TARGETS)
-  endif()
-  foreach(st ${independent_step_targets})
-    if("${st}" STREQUAL "${step}")
-      ExternalProject_Add_StepTargets(${name} NO_DEPENDS ${step})
-      break()
-    endif()
-  endforeach()
-endfunction()
-
-
-function(ExternalProject_Add_StepDependencies name step)
-  set(dependencies ${ARGN})
-
-  # Sanity checks on "name" and "step".
-  if(NOT TARGET ${name})
-    message(FATAL_ERROR "Cannot find target \"${name}\". Perhaps it has not yet been created using ExternalProject_Add.")
-  endif()
-
-  get_property(type TARGET ${name} PROPERTY TYPE)
-  if(NOT type STREQUAL "UTILITY")
-    message(FATAL_ERROR "Target \"${name}\" was not generated by ExternalProject_Add.")
-  endif()
-
-  get_property(is_ep TARGET ${name} PROPERTY _EP_IS_EXTERNAL_PROJECT)
-  if(NOT is_ep)
-    message(FATAL_ERROR "Target \"${name}\" was not generated by ExternalProject_Add.")
-  endif()
-
-  get_property(steps TARGET ${name} PROPERTY _EP_STEPS)
-  list(FIND steps ${step} is_step)
-  if(is_step LESS 0)
-    message(FATAL_ERROR "External project \"${name}\" does not have a step \"${step}\".")
-  endif()
-
-  if(TARGET ${name}-${step})
-    get_property(type TARGET ${name}-${step} PROPERTY TYPE)
-    if(NOT type STREQUAL "UTILITY")
-      message(FATAL_ERROR "Target \"${name}-${step}\" was not generated by ExternalProject_Add_StepTargets.")
-    endif()
-    get_property(is_ep_step TARGET ${name}-${step} PROPERTY _EP_IS_EXTERNAL_PROJECT_STEP)
-    if(NOT is_ep_step)
-      message(FATAL_ERROR "Target \"${name}-${step}\" was not generated by ExternalProject_Add_StepTargets.")
-    endif()
-  endif()
-
-  # Always add file-level dependency, but add target-level dependency
-  # only if the target exists for that step.
-  _ep_get_step_stampfile(${name} ${step} stamp_file)
-  foreach(dep ${dependencies})
-    add_custom_command(APPEND
-      OUTPUT ${stamp_file}
-      DEPENDS ${dep})
-    if(TARGET ${name}-${step})
-      foreach(dep ${dependencies})
-        add_dependencies(${name}-${step} ${dep})
-      endforeach()
-    endif()
-  endforeach()
-
-endfunction()
-
-
-function(_ep_add_mkdir_command name)
-  ExternalProject_Get_Property(${name}
-    source_dir binary_dir install_dir stamp_dir download_dir tmp_dir log_dir)
-
-  _ep_get_configuration_subdir_suffix(cfgdir)
-
-  ExternalProject_Add_Step(${name} mkdir
-    COMMENT "Creating directories for '${name}'"
-    COMMAND ${CMAKE_COMMAND} -E make_directory ${source_dir}
-    COMMAND ${CMAKE_COMMAND} -E make_directory ${binary_dir}
-    COMMAND ${CMAKE_COMMAND} -E make_directory ${install_dir}
-    COMMAND ${CMAKE_COMMAND} -E make_directory ${tmp_dir}
-    COMMAND ${CMAKE_COMMAND} -E make_directory ${stamp_dir}${cfgdir}
-    COMMAND ${CMAKE_COMMAND} -E make_directory ${download_dir}
-    COMMAND ${CMAKE_COMMAND} -E make_directory ${log_dir}
-    )
-endfunction()
-
-
-function(_ep_is_dir_empty dir empty_var)
-  file(GLOB gr "${dir}/*")
-  if("${gr}" STREQUAL "")
-    set(${empty_var} 1 PARENT_SCOPE)
-  else()
-    set(${empty_var} 0 PARENT_SCOPE)
-  endif()
-endfunction()
-
-function(_ep_get_git_submodules_recurse git_submodules_recurse)
-  # Checks for GIT_SUBMODULES_RECURSE property
-  # Default is ON, which sets git_submodules_recurse output variable to "--recursive"
-  # Otherwise, the output variable is set to an empty value ""
-  get_property(git_submodules_recurse_set TARGET ${name} PROPERTY _EP_GIT_SUBMODULES_RECURSE SET)
-  if(NOT git_submodules_recurse_set)
-    set(recurseFlag "--recursive")
-  else()
-    get_property(git_submodules_recurse_value TARGET ${name} PROPERTY _EP_GIT_SUBMODULES_RECURSE)
-    if(git_submodules_recurse_value)
-      set(recurseFlag "--recursive")
-    else()
-      set(recurseFlag "")
-    endif()
-  endif()
-  set(${git_submodules_recurse} "${recurseFlag}" PARENT_SCOPE)
-
-  # The git submodule update '--recursive' flag requires git >= v1.6.5
-  if(recurseFlag AND GIT_VERSION_STRING VERSION_LESS 1.6.5)
-    message(FATAL_ERROR "error: git version 1.6.5 or later required for --recursive flag with 'git submodule ...': GIT_VERSION_STRING='${GIT_VERSION_STRING}'")
-  endif()
-endfunction()
-
-
-function(_ep_add_download_command name)
-  ExternalProject_Get_Property(${name} source_dir stamp_dir download_dir tmp_dir)
-
-  get_property(cmd_set TARGET ${name} PROPERTY _EP_DOWNLOAD_COMMAND SET)
-  get_property(cmd TARGET ${name} PROPERTY _EP_DOWNLOAD_COMMAND)
-  get_property(cvs_repository TARGET ${name} PROPERTY _EP_CVS_REPOSITORY)
-  get_property(svn_repository TARGET ${name} PROPERTY _EP_SVN_REPOSITORY)
-  get_property(git_repository TARGET ${name} PROPERTY _EP_GIT_REPOSITORY)
-  get_property(hg_repository  TARGET ${name} PROPERTY _EP_HG_REPOSITORY )
-  get_property(url TARGET ${name} PROPERTY _EP_URL)
-  get_property(fname TARGET ${name} PROPERTY _EP_DOWNLOAD_NAME)
-
-  # TODO: Perhaps file:// should be copied to download dir before extraction.
-  string(REGEX REPLACE "file://" "" url "${url}")
-
-  set(depends)
-  set(comment)
-  set(work_dir)
-
-  if(cmd_set)
-    set(work_dir ${download_dir})
-  elseif(cvs_repository)
-    find_package(CVS QUIET)
-    if(NOT CVS_EXECUTABLE)
-      message(FATAL_ERROR "error: could not find cvs for checkout of ${name}")
-    endif()
-
-    get_target_property(cvs_module ${name} _EP_CVS_MODULE)
-    if(NOT cvs_module)
-      message(FATAL_ERROR "error: no CVS_MODULE")
-    endif()
-
-    get_property(cvs_tag TARGET ${name} PROPERTY _EP_CVS_TAG)
-
-    set(repository ${cvs_repository})
-    set(module ${cvs_module})
-    set(tag ${cvs_tag})
-    configure_file(
-      "${CMAKE_ROOT}/Modules/RepositoryInfo.txt.in"
-      "${stamp_dir}/${name}-cvsinfo.txt"
-      @ONLY
-      )
-
-    get_filename_component(src_name "${source_dir}" NAME)
-    get_filename_component(work_dir "${source_dir}" PATH)
-    set(comment "Performing download step (CVS checkout) for '${name}'")
-    set(cmd ${CVS_EXECUTABLE} -d ${cvs_repository} -q co ${cvs_tag} -d ${src_name} ${cvs_module})
-    list(APPEND depends ${stamp_dir}/${name}-cvsinfo.txt)
-  elseif(svn_repository)
-    find_package(Subversion QUIET)
-    if(NOT Subversion_SVN_EXECUTABLE)
-      message(FATAL_ERROR "error: could not find svn for checkout of ${name}")
-    endif()
-
-    get_property(svn_revision TARGET ${name} PROPERTY _EP_SVN_REVISION)
-    get_property(svn_username TARGET ${name} PROPERTY _EP_SVN_USERNAME)
-    get_property(svn_password TARGET ${name} PROPERTY _EP_SVN_PASSWORD)
-    get_property(svn_trust_cert TARGET ${name} PROPERTY _EP_SVN_TRUST_CERT)
-
-    set(repository "${svn_repository} user=${svn_username} password=${svn_password}")
-    set(module)
-    set(tag ${svn_revision})
-    configure_file(
-      "${CMAKE_ROOT}/Modules/RepositoryInfo.txt.in"
-      "${stamp_dir}/${name}-svninfo.txt"
-      @ONLY
-      )
-
-    get_filename_component(src_name "${source_dir}" NAME)
-    get_filename_component(work_dir "${source_dir}" PATH)
-    set(comment "Performing download step (SVN checkout) for '${name}'")
-    set(svn_user_pw_args "")
-    if(DEFINED svn_username)
-      set(svn_user_pw_args ${svn_user_pw_args} "--username=${svn_username}")
-    endif()
-    if(DEFINED svn_password)
-      set(svn_user_pw_args ${svn_user_pw_args} "--password=${svn_password}")
-    endif()
-    if(svn_trust_cert)
-      set(svn_trust_cert_args --trust-server-cert)
-    endif()
-    set(cmd ${Subversion_SVN_EXECUTABLE} co ${svn_repository} ${svn_revision}
-      --non-interactive ${svn_trust_cert_args} ${svn_user_pw_args} ${src_name})
-    list(APPEND depends ${stamp_dir}/${name}-svninfo.txt)
-  elseif(git_repository)
-    unset(CMAKE_MODULE_PATH) # Use CMake builtin find module
-    find_package(Git QUIET)
-    if(NOT GIT_EXECUTABLE)
-      message(FATAL_ERROR "error: could not find git for clone of ${name}")
-    endif()
-
-    _ep_get_git_submodules_recurse(git_submodules_recurse)
-
-    get_property(git_tag TARGET ${name} PROPERTY _EP_GIT_TAG)
-    if(NOT git_tag)
-      set(git_tag "master")
-    endif()
-
-    set(git_init_submodules TRUE)
-    get_property(git_submodules_set TARGET ${name} PROPERTY _EP_GIT_SUBMODULES SET)
-    if(git_submodules_set)
-      get_property(git_submodules TARGET ${name} PROPERTY _EP_GIT_SUBMODULES)
-      if(git_submodules  STREQUAL "" AND _EP_CMP0097 STREQUAL "NEW")
-        set(git_init_submodules FALSE)
-      endif()
-    endif()
-
-    get_property(git_remote_name TARGET ${name} PROPERTY _EP_GIT_REMOTE_NAME)
-    if(NOT git_remote_name)
-      set(git_remote_name "origin")
-    endif()
-
-    get_property(tls_verify TARGET ${name} PROPERTY _EP_TLS_VERIFY)
-    if("x${tls_verify}" STREQUAL "x" AND DEFINED CMAKE_TLS_VERIFY)
-      set(tls_verify "${CMAKE_TLS_VERIFY}")
-    endif()
-    get_property(git_shallow TARGET ${name} PROPERTY _EP_GIT_SHALLOW)
-    get_property(git_progress TARGET ${name} PROPERTY _EP_GIT_PROGRESS)
-    get_property(git_config TARGET ${name} PROPERTY _EP_GIT_CONFIG)
-
-    # For the download step, and the git clone operation, only the repository
-    # should be recorded in a configured RepositoryInfo file. If the repo
-    # changes, the clone script should be run again. But if only the tag
-    # changes, avoid running the clone script again. Let the 'always' running
-    # update step checkout the new tag.
-    #
-    set(repository ${git_repository})
-    set(module)
-    set(tag ${git_remote_name})
-    configure_file(
-      "${CMAKE_ROOT}/Modules/RepositoryInfo.txt.in"
-      "${stamp_dir}/${name}-gitinfo.txt"
-      @ONLY
-      )
-
-    get_filename_component(src_name "${source_dir}" NAME)
-    get_filename_component(work_dir "${source_dir}" PATH)
-
-    # Since git clone doesn't succeed if the non-empty source_dir exists,
-    # create a cmake script to invoke as download command.
-    # The script will delete the source directory and then call git clone.
-    #
-    _ep_write_gitclone_script(${tmp_dir}/${name}-gitclone.cmake ${source_dir}
-      ${GIT_EXECUTABLE} ${git_repository} ${git_tag} ${git_remote_name} ${git_init_submodules} "${git_submodules_recurse}" "${git_submodules}" "${git_shallow}" "${git_progress}" "${git_config}" ${src_name} ${work_dir}
-      ${stamp_dir}/${name}-gitinfo.txt ${stamp_dir}/${name}-gitclone-lastrun.txt "${tls_verify}"
-      )
-    set(comment "Performing download step (git clone) for '${name}'")
-    set(cmd ${CMAKE_COMMAND} -P ${tmp_dir}/${name}-gitclone.cmake)
-    list(APPEND depends ${stamp_dir}/${name}-gitinfo.txt)
-  elseif(hg_repository)
-    find_package(Hg QUIET)
-    if(NOT HG_EXECUTABLE)
-      message(FATAL_ERROR "error: could not find hg for clone of ${name}")
-    endif()
-
-    get_property(hg_tag TARGET ${name} PROPERTY _EP_HG_TAG)
-    if(NOT hg_tag)
-      set(hg_tag "tip")
-    endif()
-
-    # For the download step, and the hg clone operation, only the repository
-    # should be recorded in a configured RepositoryInfo file. If the repo
-    # changes, the clone script should be run again. But if only the tag
-    # changes, avoid running the clone script again. Let the 'always' running
-    # update step checkout the new tag.
-    #
-    set(repository ${hg_repository})
-    set(module)
-    set(tag)
-    configure_file(
-      "${CMAKE_ROOT}/Modules/RepositoryInfo.txt.in"
-      "${stamp_dir}/${name}-hginfo.txt"
-      @ONLY
-      )
-
-    get_filename_component(src_name "${source_dir}" NAME)
-    get_filename_component(work_dir "${source_dir}" PATH)
-
-    # Since hg clone doesn't succeed if the non-empty source_dir exists,
-    # create a cmake script to invoke as download command.
-    # The script will delete the source directory and then call hg clone.
-    #
-    _ep_write_hgclone_script(${tmp_dir}/${name}-hgclone.cmake ${source_dir}
-      ${HG_EXECUTABLE} ${hg_repository} ${hg_tag} ${src_name} ${work_dir}
-      ${stamp_dir}/${name}-hginfo.txt ${stamp_dir}/${name}-hgclone-lastrun.txt
-      )
-    set(comment "Performing download step (hg clone) for '${name}'")
-    set(cmd ${CMAKE_COMMAND} -P ${tmp_dir}/${name}-hgclone.cmake)
-    list(APPEND depends ${stamp_dir}/${name}-hginfo.txt)
-  elseif(url)
-    get_filename_component(work_dir "${source_dir}" PATH)
-    get_property(hash TARGET ${name} PROPERTY _EP_URL_HASH)
-    if(hash AND NOT "${hash}" MATCHES "${_ep_hash_regex}")
-      message(FATAL_ERROR "URL_HASH is set to\n  ${hash}\n"
-        "but must be ALGO=value where ALGO is\n  ${_ep_hash_algos}\n"
-        "and value is a hex string.")
-    endif()
-    get_property(md5 TARGET ${name} PROPERTY _EP_URL_MD5)
-    if(md5 AND NOT "MD5=${md5}" MATCHES "${_ep_hash_regex}")
-      message(FATAL_ERROR "URL_MD5 is set to\n  ${md5}\nbut must be a hex string.")
-    endif()
-    if(md5 AND NOT hash)
-      set(hash "MD5=${md5}")
-    endif()
-    set(repository "external project URL")
-    set(module "${url}")
-    set(tag "${hash}")
-    configure_file(
-      "${CMAKE_ROOT}/Modules/RepositoryInfo.txt.in"
-      "${stamp_dir}/${name}-urlinfo.txt"
-      @ONLY
-      )
-    list(APPEND depends ${stamp_dir}/${name}-urlinfo.txt)
-
-    list(LENGTH url url_list_length)
-    if(NOT "${url_list_length}" STREQUAL "1")
-      foreach(entry ${url})
-        if(NOT "${entry}" MATCHES "^[a-z]+://")
-          message(FATAL_ERROR "At least one entry of URL is a path (invalid in a list)")
-        endif()
-      endforeach()
-      if("x${fname}" STREQUAL "x")
-        list(GET url 0 fname)
-      endif()
-    endif()
-
-    if(IS_DIRECTORY "${url}")
-      get_filename_component(abs_dir "${url}" ABSOLUTE)
-      set(comment "Performing download step (DIR copy) for '${name}'")
-      set(cmd   ${CMAKE_COMMAND} -E rm -rf ${source_dir}
-        COMMAND ${CMAKE_COMMAND} -E copy_directory ${abs_dir} ${source_dir})
-    else()
-      get_property(no_extract TARGET "${name}" PROPERTY _EP_DOWNLOAD_NO_EXTRACT)
-      if("${url}" MATCHES "^[a-z]+://")
-        # TODO: Should download and extraction be different steps?
-        if("x${fname}" STREQUAL "x")
-          set(fname "${url}")
-        endif()
-        if("${fname}" MATCHES [[([^/\?#]+(\.|=)(7z|tar|tar\.bz2|tar\.gz|tar\.xz|tbz2|tgz|txz|zip))([/?#].*)?$]])
-          set(fname "${CMAKE_MATCH_1}")
-        elseif(no_extract)
-          get_filename_component(fname "${fname}" NAME)
-        else()
-          # Fall back to a default file name.  The actual file name does not
-          # matter because it is used only internally and our extraction tool
-          # inspects the file content directly.  If it turns out the wrong URL
-          # was given that will be revealed during the build which is an easier
-          # place for users to diagnose than an error here anyway.
-          set(fname "archive.tar")
-        endif()
-        string(REPLACE ";" "-" fname "${fname}")
-        set(file ${download_dir}/${fname})
-        get_property(timeout TARGET ${name} PROPERTY _EP_TIMEOUT)
-        get_property(no_progress TARGET ${name} PROPERTY _EP_DOWNLOAD_NO_PROGRESS)
-        get_property(tls_verify TARGET ${name} PROPERTY _EP_TLS_VERIFY)
-        get_property(tls_cainfo TARGET ${name} PROPERTY _EP_TLS_CAINFO)
-        get_property(netrc TARGET ${name} PROPERTY _EP_NETRC)
-        get_property(netrc_file TARGET ${name} PROPERTY _EP_NETRC_FILE)
-        get_property(http_username TARGET ${name} PROPERTY _EP_HTTP_USERNAME)
-        get_property(http_password TARGET ${name} PROPERTY _EP_HTTP_PASSWORD)
-        get_property(http_headers TARGET ${name} PROPERTY _EP_HTTP_HEADER)
-        set(download_script "${stamp_dir}/download-${name}.cmake")
-        _ep_write_downloadfile_script("${download_script}" "${url}" "${file}" "${timeout}" "${no_progress}" "${hash}" "${tls_verify}" "${tls_cainfo}" "${http_username}:${http_password}" "${http_headers}" "${netrc}" "${netrc_file}")
-        set(cmd ${CMAKE_COMMAND} -P "${download_script}"
-          COMMAND)
-        if (no_extract)
-          set(steps "download and verify")
-        else ()
-          set(steps "download, verify and extract")
-        endif ()
-        set(comment "Performing download step (${steps}) for '${name}'")
-        file(WRITE "${stamp_dir}/verify-${name}.cmake" "") # already verified by 'download_script'
-      else()
-        set(file "${url}")
-        if (no_extract)
-          set(steps "verify")
-        else ()
-          set(steps "verify and extract")
-        endif ()
-        set(comment "Performing download step (${steps}) for '${name}'")
-        _ep_write_verifyfile_script("${stamp_dir}/verify-${name}.cmake" "${file}" "${hash}")
-      endif()
-      list(APPEND cmd ${CMAKE_COMMAND} -P ${stamp_dir}/verify-${name}.cmake)
-      if (NOT no_extract)
-        _ep_write_extractfile_script("${stamp_dir}/extract-${name}.cmake" "${name}" "${file}" "${source_dir}")
-        list(APPEND cmd COMMAND ${CMAKE_COMMAND} -P ${stamp_dir}/extract-${name}.cmake)
-      else ()
-        set_property(TARGET ${name} PROPERTY _EP_DOWNLOADED_FILE ${file})
-      endif ()
-    endif()
-  else()
-    _ep_is_dir_empty("${source_dir}" empty)
-    if(${empty})
-      message(SEND_ERROR
-        "No download info given for '${name}' and its source directory:\n"
-        " ${source_dir}\n"
-        "is not an existing non-empty directory.  Please specify one of:\n"
-        " * SOURCE_DIR with an existing non-empty directory\n"
-        " * DOWNLOAD_COMMAND\n"
-        " * URL\n"
-        " * GIT_REPOSITORY\n"
-        " * SVN_REPOSITORY\n"
-        " * HG_REPOSITORY\n"
-        " * CVS_REPOSITORY and CVS_MODULE"
-        )
-    endif()
-  endif()
-
-  get_property(log TARGET ${name} PROPERTY _EP_LOG_DOWNLOAD)
-  if(log)
-    set(log LOG 1)
-  else()
-    set(log "")
-  endif()
-
-  get_property(uses_terminal TARGET ${name} PROPERTY
-    _EP_USES_TERMINAL_DOWNLOAD)
-  if(uses_terminal)
-    set(uses_terminal USES_TERMINAL 1)
-  else()
-    set(uses_terminal "")
-  endif()
-
-  set(__cmdQuoted)
-  foreach(__item IN LISTS cmd)
-    string(APPEND __cmdQuoted " [==[${__item}]==]")
-  endforeach()
-  cmake_language(EVAL CODE "
-    ExternalProject_Add_Step(\${name} download
-      COMMENT \${comment}
-      COMMAND ${__cmdQuoted}
-      WORKING_DIRECTORY \${work_dir}
-      DEPENDS \${depends}
-      DEPENDEES mkdir
-      ${log}
-      ${uses_terminal}
-      )"
-  )
-endfunction()
-
-function(_ep_get_update_disconnected var name)
-  get_property(update_disconnected_set TARGET ${name} PROPERTY _EP_UPDATE_DISCONNECTED SET)
-  if(update_disconnected_set)
-    get_property(update_disconnected TARGET ${name} PROPERTY _EP_UPDATE_DISCONNECTED)
-  else()
-    get_property(update_disconnected DIRECTORY PROPERTY EP_UPDATE_DISCONNECTED)
-  endif()
-  set(${var} "${update_disconnected}" PARENT_SCOPE)
-endfunction()
-
-function(_ep_add_update_command name)
-  ExternalProject_Get_Property(${name} source_dir tmp_dir)
-
-  get_property(cmd_set TARGET ${name} PROPERTY _EP_UPDATE_COMMAND SET)
-  get_property(cmd TARGET ${name} PROPERTY _EP_UPDATE_COMMAND)
-  get_property(cvs_repository TARGET ${name} PROPERTY _EP_CVS_REPOSITORY)
-  get_property(svn_repository TARGET ${name} PROPERTY _EP_SVN_REPOSITORY)
-  get_property(git_repository TARGET ${name} PROPERTY _EP_GIT_REPOSITORY)
-  get_property(hg_repository  TARGET ${name} PROPERTY _EP_HG_REPOSITORY )
-
-  _ep_get_update_disconnected(update_disconnected ${name})
-
-  set(work_dir)
-  set(comment)
-  set(always)
-
-  if(cmd_set)
-    set(work_dir ${source_dir})
-    if(NOT "x${cmd}" STREQUAL "x")
-      set(always 1)
-    endif()
-  elseif(cvs_repository)
-    if(NOT CVS_EXECUTABLE)
-      message(FATAL_ERROR "error: could not find cvs for update of ${name}")
-    endif()
-    set(work_dir ${source_dir})
-    set(comment "Performing update step (CVS update) for '${name}'")
-    get_property(cvs_tag TARGET ${name} PROPERTY _EP_CVS_TAG)
-    set(cmd ${CVS_EXECUTABLE} -d ${cvs_repository} -q up -dP ${cvs_tag})
-    set(always 1)
-  elseif(svn_repository)
-    if(NOT Subversion_SVN_EXECUTABLE)
-      message(FATAL_ERROR "error: could not find svn for update of ${name}")
-    endif()
-    set(work_dir ${source_dir})
-    set(comment "Performing update step (SVN update) for '${name}'")
-    get_property(svn_revision TARGET ${name} PROPERTY _EP_SVN_REVISION)
-    get_property(svn_username TARGET ${name} PROPERTY _EP_SVN_USERNAME)
-    get_property(svn_password TARGET ${name} PROPERTY _EP_SVN_PASSWORD)
-    get_property(svn_trust_cert TARGET ${name} PROPERTY _EP_SVN_TRUST_CERT)
-    set(svn_user_pw_args "")
-    if(DEFINED svn_username)
-      set(svn_user_pw_args ${svn_user_pw_args} "--username=${svn_username}")
-    endif()
-    if(DEFINED svn_password)
-      set(svn_user_pw_args ${svn_user_pw_args} "--password=${svn_password}")
-    endif()
-    if(svn_trust_cert)
-      set(svn_trust_cert_args --trust-server-cert)
-    endif()
-    set(cmd ${Subversion_SVN_EXECUTABLE} up ${svn_revision}
-      --non-interactive ${svn_trust_cert_args} ${svn_user_pw_args})
-    set(always 1)
-  elseif(git_repository)
-    unset(CMAKE_MODULE_PATH) # Use CMake builtin find module
-    find_package(Git QUIET)
-    if(NOT GIT_EXECUTABLE)
-      message(FATAL_ERROR "error: could not find git for fetch of ${name}")
-    endif()
-    set(work_dir ${source_dir})
-    set(comment "Performing update step for '${name}'")
-    get_property(git_tag TARGET ${name} PROPERTY _EP_GIT_TAG)
-    if(NOT git_tag)
-      set(git_tag "master")
-    endif()
-    get_property(git_remote_name TARGET ${name} PROPERTY _EP_GIT_REMOTE_NAME)
-    if(NOT git_remote_name)
-      set(git_remote_name "origin")
-    endif()
-
-    set(git_init_submodules TRUE)
-    get_property(git_submodules_set TARGET ${name} PROPERTY _EP_GIT_SUBMODULES SET)
-    if(git_submodules_set)
-      get_property(git_submodules TARGET ${name} PROPERTY _EP_GIT_SUBMODULES)
-      if(git_submodules  STREQUAL "" AND _EP_CMP0097 STREQUAL "NEW")
-        set(git_init_submodules FALSE)
-      endif()
-    endif()
-
-    get_property(git_update_strategy TARGET ${name} PROPERTY _EP_GIT_REMOTE_UPDATE_STRATEGY)
-    if(NOT git_update_strategy)
-      set(git_update_strategy "${CMAKE_EP_GIT_REMOTE_UPDATE_STRATEGY}")
-    endif()
-    if(NOT git_update_strategy)
-      set(git_update_strategy REBASE)
-    endif()
-    set(strategies CHECKOUT REBASE REBASE_CHECKOUT)
-    if(NOT git_update_strategy IN_LIST strategies)
-      message(FATAL_ERROR "'${git_update_strategy}' is not one of the supported strategies: ${strategies}")
-    endif()
-
-    _ep_get_git_submodules_recurse(git_submodules_recurse)
-
-    _ep_write_gitupdate_script(${tmp_dir}/${name}-gitupdate.cmake
-      ${GIT_EXECUTABLE} ${git_tag} ${git_remote_name} ${git_init_submodules} "${git_submodules_recurse}" "${git_submodules}" ${git_repository} ${work_dir} ${git_update_strategy}
-      )
-    set(cmd ${CMAKE_COMMAND} -P ${tmp_dir}/${name}-gitupdate.cmake)
-    set(always 1)
-  elseif(hg_repository)
-    if(NOT HG_EXECUTABLE)
-      message(FATAL_ERROR "error: could not find hg for pull of ${name}")
-    endif()
-    set(work_dir ${source_dir})
-    set(comment "Performing update step (hg pull) for '${name}'")
-    get_property(hg_tag TARGET ${name} PROPERTY _EP_HG_TAG)
-    if(NOT hg_tag)
-      set(hg_tag "tip")
-    endif()
-    if("${HG_VERSION_STRING}" STREQUAL "2.1")
-      message(WARNING "Mercurial 2.1 does not distinguish an empty pull from a failed pull:
- http://mercurial.selenic.com/wiki/UpgradeNotes#A2.1.1:_revert_pull_return_code_change.2C_compile_issue_on_OS_X
- http://thread.gmane.org/gmane.comp.version-control.mercurial.devel/47656
-Update to Mercurial >= 2.1.1.
-")
-    endif()
-    set(cmd ${HG_EXECUTABLE} pull
-      COMMAND ${HG_EXECUTABLE} update ${hg_tag}
-      )
-    set(always 1)
-  endif()
-
-  get_property(log TARGET ${name} PROPERTY _EP_LOG_UPDATE)
-  if(log)
-    set(log LOG 1)
-  else()
-    set(log "")
-  endif()
-
-  get_property(uses_terminal TARGET ${name} PROPERTY
-    _EP_USES_TERMINAL_UPDATE)
-  if(uses_terminal)
-    set(uses_terminal USES_TERMINAL 1)
-  else()
-    set(uses_terminal "")
-  endif()
-
-  set(__cmdQuoted)
-  foreach(__item IN LISTS cmd)
-    string(APPEND __cmdQuoted " [==[${__item}]==]")
-  endforeach()
-  cmake_language(EVAL CODE "
-    ExternalProject_Add_Step(${name} update
-      COMMENT \${comment}
-      COMMAND ${__cmdQuoted}
-      ALWAYS \${always}
-      EXCLUDE_FROM_MAIN \${update_disconnected}
-      WORKING_DIRECTORY \${work_dir}
-      DEPENDEES download
-      ${log}
-      ${uses_terminal}
-      )"
-  )
-
-  if(update_disconnected)
-    _ep_get_step_stampfile(${name} skip-update skip-update_stamp_file)
-    string(REPLACE "Performing" "Skipping" comment "${comment}")
-    ExternalProject_Add_Step(${name} skip-update
-      COMMENT ${comment}
-      ALWAYS ${always}
-      EXCLUDE_FROM_MAIN 1
-      WORKING_DIRECTORY ${work_dir}
-      DEPENDEES download
-      ${log}
-      ${uses_terminal}
-    )
-    set_property(SOURCE ${skip-update_stamp_file} PROPERTY SYMBOLIC 1)
-  endif()
-
-endfunction()
-
-
-function(_ep_add_patch_command name)
-  ExternalProject_Get_Property(${name} source_dir)
-
-  get_property(cmd_set TARGET ${name} PROPERTY _EP_PATCH_COMMAND SET)
-  get_property(cmd TARGET ${name} PROPERTY _EP_PATCH_COMMAND)
-
-  set(work_dir)
-
-  if(cmd_set)
-    set(work_dir ${source_dir})
-  endif()
-
-  get_property(log TARGET ${name} PROPERTY _EP_LOG_PATCH)
-  if(log)
-    set(log LOG 1)
-  else()
-    set(log "")
-  endif()
-
-  _ep_get_update_disconnected(update_disconnected ${name})
-  if(update_disconnected)
-    set(update_dep skip-update)
-  else()
-    set(update_dep update)
-  endif()
-
-  set(__cmdQuoted)
-  foreach(__item IN LISTS cmd)
-    string(APPEND __cmdQuoted " [==[${__item}]==]")
-  endforeach()
-  cmake_language(EVAL CODE "
-    ExternalProject_Add_Step(${name} patch
-      COMMAND ${__cmdQuoted}
-      WORKING_DIRECTORY \${work_dir}
-      DEPENDEES download \${update_dep}
-      ${log}
-      )"
-  )
-endfunction()
-
-
-function(_ep_extract_configure_command var name)
-  get_property(cmd_set TARGET ${name} PROPERTY _EP_CONFIGURE_COMMAND SET)
-  if(cmd_set)
-    get_property(cmd TARGET ${name} PROPERTY _EP_CONFIGURE_COMMAND)
-  else()
-    get_target_property(cmake_command ${name} _EP_CMAKE_COMMAND)
-    if(cmake_command)
-      set(cmd "${cmake_command}")
-    else()
-      set(cmd "${CMAKE_COMMAND}")
-    endif()
-
-    get_property(cmake_args TARGET ${name} PROPERTY _EP_CMAKE_ARGS)
-    list(APPEND cmd ${cmake_args})
-
-    # If there are any CMAKE_CACHE_ARGS or CMAKE_CACHE_DEFAULT_ARGS,
-    # write an initial cache and use it
-    get_property(cmake_cache_args TARGET ${name} PROPERTY _EP_CMAKE_CACHE_ARGS)
-    get_property(cmake_cache_default_args TARGET ${name} PROPERTY _EP_CMAKE_CACHE_DEFAULT_ARGS)
-
-    set(has_cmake_cache_args 0)
-    if(NOT "${cmake_cache_args}" STREQUAL "")
-      set(has_cmake_cache_args 1)
-    endif()
-
-    set(has_cmake_cache_default_args 0)
-    if(NOT "${cmake_cache_default_args}" STREQUAL "")
-      set(has_cmake_cache_default_args 1)
-    endif()
-
-    get_target_property(cmake_generator ${name} _EP_CMAKE_GENERATOR)
-    get_target_property(cmake_generator_instance ${name} _EP_CMAKE_GENERATOR_INSTANCE)
-    get_target_property(cmake_generator_platform ${name} _EP_CMAKE_GENERATOR_PLATFORM)
-    get_target_property(cmake_generator_toolset ${name} _EP_CMAKE_GENERATOR_TOOLSET)
-    if(cmake_generator)
-      list(APPEND cmd "-G${cmake_generator}")
-      if(cmake_generator_platform)
-        list(APPEND cmd "-A${cmake_generator_platform}")
-      endif()
-      if(cmake_generator_toolset)
-        list(APPEND cmd "-T${cmake_generator_toolset}")
-      endif()
-      if(cmake_generator_instance)
-        list(APPEND cmd "-DCMAKE_GENERATOR_INSTANCE:INTERNAL=${cmake_generator_instance}")
-      endif()
-    else()
-      if(CMAKE_EXTRA_GENERATOR)
-        list(APPEND cmd "-G${CMAKE_EXTRA_GENERATOR} - ${CMAKE_GENERATOR}")
-      else()
-        list(APPEND cmd "-G${CMAKE_GENERATOR}")
-        if("${CMAKE_GENERATOR}" MATCHES "Green Hills MULTI")
-          set(has_cmake_cache_default_args 1)
-          set(cmake_cache_default_args ${cmake_cache_default_args}
-            "-DGHS_TARGET_PLATFORM:STRING=${GHS_TARGET_PLATFORM}"
-            "-DGHS_PRIMARY_TARGET:STRING=${GHS_PRIMARY_TARGET}"
-            "-DGHS_TOOLSET_ROOT:STRING=${GHS_TOOLSET_ROOT}"
-            "-DGHS_OS_ROOT:STRING=${GHS_OS_ROOT}"
-            "-DGHS_OS_DIR:STRING=${GHS_OS_DIR}"
-            "-DGHS_BSP_NAME:STRING=${GHS_BSP_NAME}")
-        endif()
-      endif()
-      if(cmake_generator_platform)
-        message(FATAL_ERROR "Option CMAKE_GENERATOR_PLATFORM not allowed without CMAKE_GENERATOR.")
-      endif()
-      if(CMAKE_GENERATOR_PLATFORM)
-        list(APPEND cmd "-A${CMAKE_GENERATOR_PLATFORM}")
-      endif()
-      if(cmake_generator_toolset)
-        message(FATAL_ERROR "Option CMAKE_GENERATOR_TOOLSET not allowed without CMAKE_GENERATOR.")
-      endif()
-      if(CMAKE_GENERATOR_TOOLSET)
-        list(APPEND cmd "-T${CMAKE_GENERATOR_TOOLSET}")
-      endif()
-      if(cmake_generator_instance)
-        message(FATAL_ERROR "Option CMAKE_GENERATOR_INSTANCE not allowed without CMAKE_GENERATOR.")
-      endif()
-      if(CMAKE_GENERATOR_INSTANCE)
-        list(APPEND cmd "-DCMAKE_GENERATOR_INSTANCE:INTERNAL=${CMAKE_GENERATOR_INSTANCE}")
-      endif()
-    endif()
-
-    if(has_cmake_cache_args OR has_cmake_cache_default_args)
-      set(_ep_cache_args_script "<TMP_DIR>/${name}-cache-$<CONFIG>.cmake")
-      if(has_cmake_cache_args)
-        _ep_command_line_to_initial_cache(script_initial_cache_force "${cmake_cache_args}" 1)
-      endif()
-      if(has_cmake_cache_default_args)
-        _ep_command_line_to_initial_cache(script_initial_cache_default "${cmake_cache_default_args}" 0)
-      endif()
-      _ep_write_initial_cache(${name} "${_ep_cache_args_script}" "${script_initial_cache_force}${script_initial_cache_default}")
-      list(APPEND cmd "-C${_ep_cache_args_script}")
-      _ep_replace_location_tags(${name} _ep_cache_args_script)
-      set(_ep_cache_args_script
-        "${_ep_cache_args_script}"
-        PARENT_SCOPE)
-    endif()
-
-    list(APPEND cmd "<SOURCE_DIR><SOURCE_SUBDIR>")
-  endif()
-
-  set("${var}" "${cmd}" PARENT_SCOPE)
-endfunction()
-
-# TODO: Make sure external projects use the proper compiler
-function(_ep_add_configure_command name)
-  ExternalProject_Get_Property(${name} binary_dir tmp_dir)
-
-  # Depend on other external projects (file-level).
-  set(file_deps)
-  get_property(deps TARGET ${name} PROPERTY _EP_DEPENDS)
-  foreach(dep IN LISTS deps)
-    get_property(dep_type TARGET ${dep} PROPERTY TYPE)
-    if(dep_type STREQUAL "UTILITY")
-      get_property(is_ep TARGET ${dep} PROPERTY _EP_IS_EXTERNAL_PROJECT)
-      if(is_ep)
-        _ep_get_step_stampfile(${dep} "done" done_stamp_file)
-        list(APPEND file_deps ${done_stamp_file})
-      endif()
-    endif()
-  endforeach()
-
-  _ep_extract_configure_command(cmd ${name})
-
-  # If anything about the configure command changes, (command itself, cmake
-  # used, cmake args or cmake generator) then re-run the configure step.
-  # Fixes issue https://gitlab.kitware.com/cmake/cmake/-/issues/10258
-  #
-  if(NOT EXISTS ${tmp_dir}/${name}-cfgcmd.txt.in)
-    file(WRITE ${tmp_dir}/${name}-cfgcmd.txt.in "cmd='\@cmd\@'\n")
-  endif()
-  configure_file(${tmp_dir}/${name}-cfgcmd.txt.in ${tmp_dir}/${name}-cfgcmd.txt)
-  list(APPEND file_deps ${tmp_dir}/${name}-cfgcmd.txt)
-  list(APPEND file_deps ${_ep_cache_args_script})
-
-  get_property(log TARGET ${name} PROPERTY _EP_LOG_CONFIGURE)
-  if(log)
-    set(log LOG 1)
-  else()
-    set(log "")
-  endif()
-
-  get_property(uses_terminal TARGET ${name} PROPERTY
-    _EP_USES_TERMINAL_CONFIGURE)
-  if(uses_terminal)
-    set(uses_terminal USES_TERMINAL 1)
-  else()
-    set(uses_terminal "")
-  endif()
-
-  _ep_get_update_disconnected(update_disconnected ${name})
-  if(update_disconnected)
-    set(update_dep skip-update)
-  else()
-    set(update_dep update)
-  endif()
-
-  set(__cmdQuoted)
-  foreach(__item IN LISTS cmd)
-    string(APPEND __cmdQuoted " [==[${__item}]==]")
-  endforeach()
-  cmake_language(EVAL CODE "
-    ExternalProject_Add_Step(${name} configure
-      COMMAND ${__cmdQuoted}
-      WORKING_DIRECTORY \${binary_dir}
-      DEPENDEES \${update_dep} patch
-      DEPENDS \${file_deps}
-      ${log}
-      ${uses_terminal}
-      )"
-  )
-endfunction()
-
-
-function(_ep_add_build_command name)
-  ExternalProject_Get_Property(${name} binary_dir)
-
-  get_property(cmd_set TARGET ${name} PROPERTY _EP_BUILD_COMMAND SET)
-  if(cmd_set)
-    get_property(cmd TARGET ${name} PROPERTY _EP_BUILD_COMMAND)
-  else()
-    _ep_get_build_command(${name} BUILD cmd)
-  endif()
-
-  get_property(log TARGET ${name} PROPERTY _EP_LOG_BUILD)
-  if(log)
-    set(log LOG 1)
-  else()
-    set(log "")
-  endif()
-
-  get_property(uses_terminal TARGET ${name} PROPERTY
-    _EP_USES_TERMINAL_BUILD)
-  if(uses_terminal)
-    set(uses_terminal USES_TERMINAL 1)
-  else()
-    set(uses_terminal "")
-  endif()
-
-  get_property(build_always TARGET ${name} PROPERTY _EP_BUILD_ALWAYS)
-  if(build_always)
-    set(always 1)
-  else()
-    set(always 0)
-  endif()
-
-  get_property(build_byproducts TARGET ${name} PROPERTY _EP_BUILD_BYPRODUCTS)
-
-  set(__cmdQuoted)
-  foreach(__item IN LISTS cmd)
-    string(APPEND __cmdQuoted " [==[${__item}]==]")
-  endforeach()
-  cmake_language(EVAL CODE "
-    ExternalProject_Add_Step(${name} build
-      COMMAND ${__cmdQuoted}
-      BYPRODUCTS \${build_byproducts}
-      WORKING_DIRECTORY \${binary_dir}
-      DEPENDEES configure
-      ALWAYS \${always}
-      ${log}
-      ${uses_terminal}
-      )"
-  )
-endfunction()
-
-
-function(_ep_add_install_command name)
-  ExternalProject_Get_Property(${name} binary_dir)
-
-  get_property(cmd_set TARGET ${name} PROPERTY _EP_INSTALL_COMMAND SET)
-  if(cmd_set)
-    get_property(cmd TARGET ${name} PROPERTY _EP_INSTALL_COMMAND)
-  else()
-    _ep_get_build_command(${name} INSTALL cmd)
-  endif()
-
-  get_property(log TARGET ${name} PROPERTY _EP_LOG_INSTALL)
-  if(log)
-    set(log LOG 1)
-  else()
-    set(log "")
-  endif()
-
-  get_property(uses_terminal TARGET ${name} PROPERTY
-    _EP_USES_TERMINAL_INSTALL)
-  if(uses_terminal)
-    set(uses_terminal USES_TERMINAL 1)
-  else()
-    set(uses_terminal "")
-  endif()
-
-  set(__cmdQuoted)
-  foreach(__item IN LISTS cmd)
-    string(APPEND __cmdQuoted " [==[${__item}]==]")
-  endforeach()
-  cmake_language(EVAL CODE "
-    ExternalProject_Add_Step(${name} install
-      COMMAND ${__cmdQuoted}
-      WORKING_DIRECTORY \${binary_dir}
-      DEPENDEES build
-      ${log}
-      ${uses_terminal}
-      )"
-  )
-endfunction()
-
-
-function(_ep_add_test_command name)
-  ExternalProject_Get_Property(${name} binary_dir)
-
-  get_property(before TARGET ${name} PROPERTY _EP_TEST_BEFORE_INSTALL)
-  get_property(after TARGET ${name} PROPERTY _EP_TEST_AFTER_INSTALL)
-  get_property(exclude TARGET ${name} PROPERTY _EP_TEST_EXCLUDE_FROM_MAIN)
-  get_property(cmd_set TARGET ${name} PROPERTY _EP_TEST_COMMAND SET)
-
-  # Only actually add the test step if one of the test related properties is
-  # explicitly set. (i.e. the test step is omitted unless requested...)
-  #
-  if(cmd_set OR before OR after OR exclude)
-    if(cmd_set)
-      get_property(cmd TARGET ${name} PROPERTY _EP_TEST_COMMAND)
-    else()
-      _ep_get_build_command(${name} TEST cmd)
-    endif()
-
-    if(before)
-      set(dependees_args DEPENDEES build)
-    else()
-      set(dependees_args DEPENDEES install)
-    endif()
-
-    if(exclude)
-      set(dependers_args "")
-      set(exclude_args EXCLUDE_FROM_MAIN 1)
-    else()
-      if(before)
-        set(dependers_args DEPENDERS install)
-      else()
-        set(dependers_args "")
-      endif()
-      set(exclude_args "")
-    endif()
-
-    get_property(log TARGET ${name} PROPERTY _EP_LOG_TEST)
-    if(log)
-      set(log LOG 1)
-    else()
-      set(log "")
-    endif()
-
-    get_property(uses_terminal TARGET ${name} PROPERTY
-      _EP_USES_TERMINAL_TEST)
-    if(uses_terminal)
-      set(uses_terminal USES_TERMINAL 1)
-    else()
-      set(uses_terminal "")
-    endif()
-
-    set(__cmdQuoted)
-    foreach(__item IN LISTS cmd)
-      string(APPEND __cmdQuoted " [==[${__item}]==]")
-    endforeach()
-    cmake_language(EVAL CODE "
-      ExternalProject_Add_Step(${name} test
-        COMMAND ${__cmdQuoted}
-        WORKING_DIRECTORY \${binary_dir}
-        ${dependees_args}
-        ${dependers_args}
-        ${exclude_args}
-        ${log}
-        ${uses_terminal}
-        )"
-    )
-  endif()
-endfunction()
-
-
-function(ExternalProject_Add name)
-  cmake_policy(GET CMP0097 _EP_CMP0097
-    PARENT_SCOPE # undocumented, do not use outside of CMake
-    )
-
-  _ep_get_configuration_subdir_suffix(cfgdir)
-
-  # Add a custom target for the external project.
-  set(cmf_dir ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles)
-  _ep_get_complete_stampfile(${name} complete_stamp_file)
-
-  # The "ALL" option to add_custom_target just tells it to not set the
-  # EXCLUDE_FROM_ALL target property. Later, if the EXCLUDE_FROM_ALL
-  # argument was passed, we explicitly set it for the target.
-  add_custom_target(${name} ALL DEPENDS ${complete_stamp_file})
-  set_property(TARGET ${name} PROPERTY _EP_IS_EXTERNAL_PROJECT 1)
-  set_property(TARGET ${name} PROPERTY LABELS ${name})
-  set_property(TARGET ${name} PROPERTY FOLDER "ExternalProjectTargets/${name}")
-
-  _ep_parse_arguments(ExternalProject_Add ${name} _EP_ "${ARGN}")
-  _ep_set_directories(${name})
-  _ep_get_step_stampfile(${name} "done" done_stamp_file)
-  _ep_get_step_stampfile(${name} "install" install_stamp_file)
-
-  # Set the EXCLUDE_FROM_ALL target property if required.
-  get_property(exclude_from_all TARGET ${name} PROPERTY _EP_EXCLUDE_FROM_ALL)
-  if(exclude_from_all)
-    set_property(TARGET ${name} PROPERTY EXCLUDE_FROM_ALL TRUE)
-  endif()
-
-  # The 'complete' step depends on all other steps and creates a
-  # 'done' mark.  A dependent external project's 'configure' step
-  # depends on the 'done' mark so that it rebuilds when this project
-  # rebuilds.  It is important that 'done' is not the output of any
-  # custom command so that CMake does not propagate build rules to
-  # other external project targets, which may cause problems during
-  # parallel builds.  However, the Ninja generator needs to see the entire
-  # dependency graph, and can cope with custom commands belonging to
-  # multiple targets, so we add the 'done' mark as an output for Ninja only.
-  set(complete_outputs ${complete_stamp_file})
-  if(${CMAKE_GENERATOR} MATCHES "Ninja")
-    set(complete_outputs ${complete_outputs} ${done_stamp_file})
-  endif()
-
-  add_custom_command(
-    OUTPUT ${complete_outputs}
-    COMMENT "Completed '${name}'"
-    COMMAND ${CMAKE_COMMAND} -E make_directory ${cmf_dir}${cfgdir}
-    COMMAND ${CMAKE_COMMAND} -E touch ${complete_stamp_file}
-    COMMAND ${CMAKE_COMMAND} -E touch ${done_stamp_file}
-    DEPENDS ${install_stamp_file}
-    VERBATIM
-    )
-
-
-  # Depend on other external projects (target-level).
-  get_property(deps TARGET ${name} PROPERTY _EP_DEPENDS)
-  foreach(arg IN LISTS deps)
-    add_dependencies(${name} ${arg})
-  endforeach()
-
-  # Set up custom build steps based on the target properties.
-  # Each step depends on the previous one.
-  #
-  # The target depends on the output of the final step.
-  # (Already set up above in the DEPENDS of the add_custom_target command.)
-  #
-  _ep_add_mkdir_command(${name})
-  _ep_add_download_command(${name})
-  _ep_add_update_command(${name})
-  _ep_add_patch_command(${name})
-  _ep_add_configure_command(${name})
-  _ep_add_build_command(${name})
-  _ep_add_install_command(${name})
-
-  # Test is special in that it might depend on build, or it might depend
-  # on install.
-  #
-  _ep_add_test_command(${name})
-endfunction()
-
-cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/FeatureSummary.cmake b/share/cmake-3.18/Modules/FeatureSummary.cmake
deleted file mode 100644
index 4a3e83a..0000000
--- a/share/cmake-3.18/Modules/FeatureSummary.cmake
+++ /dev/null
@@ -1,739 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FeatureSummary
---------------
-
-Functions for generating a summary of enabled/disabled features.
-
-These functions can be used to generate a summary of enabled and disabled
-packages and/or feature for a build tree such as::
-
-    -- The following OPTIONAL packages have been found:
-    LibXml2 (required version >= 2.4), XML processing lib, <http://xmlsoft.org>
-       * Enables HTML-import in MyWordProcessor
-       * Enables odt-export in MyWordProcessor
-    PNG, A PNG image library., <http://www.libpng.org/pub/png/>
-       * Enables saving screenshots
-    -- The following OPTIONAL packages have not been found:
-    Lua51, The Lua scripting language., <http://www.lua.org>
-       * Enables macros in MyWordProcessor
-    Foo, Foo provides cool stuff.
-
-Global Properties
-^^^^^^^^^^^^^^^^^
-
-.. variable:: FeatureSummary_PKG_TYPES
-
-The global property :variable:`FeatureSummary_PKG_TYPES` defines the type of
-packages used by `FeatureSummary`.
-
-The order in this list is important, the first package type in the list is the
-least important, the last is the most important. the of a package can only be
-changed to higher types.
-
-The default package types are , ``RUNTIME``, ``OPTIONAL``, ``RECOMMENDED`` and
-``REQUIRED``, and their importance is
-``RUNTIME < OPTIONAL < RECOMMENDED < REQUIRED``.
-
-
-.. variable:: FeatureSummary_REQUIRED_PKG_TYPES
-
-The global property :variable:`FeatureSummary_REQUIRED_PKG_TYPES` defines which
-package types are required.
-
-If one or more package in this categories has not been found, CMake will abort
-when calling :command:`feature_summary` with the
-'FATAL_ON_MISSING_REQUIRED_PACKAGES' option enabled.
-
-The default value for this global property is ``REQUIRED``.
-
-
-.. variable:: FeatureSummary_DEFAULT_PKG_TYPE
-
-The global property :variable:`FeatureSummary_DEFAULT_PKG_TYPE` defines which
-package type is the default one.
-When calling :command:`feature_summary`, if the user did not set the package type
-explicitly, the package will be assigned to this category.
-
-This value must be one of the types defined in the
-:variable:`FeatureSummary_PKG_TYPES` global property unless the package type
-is set for all the packages.
-
-The default value for this global property is ``OPTIONAL``.
-
-
-.. variable:: FeatureSummary_<TYPE>_DESCRIPTION
-
-The global property :variable:`FeatureSummary_<TYPE>_DESCRIPTION` can be defined
-for each type to replace the type name with the specified string whenever the
-package type is used in an output string.
-
-If not set, the string "``<TYPE>`` packages" is used.
-
-
-#]=======================================================================]
-
-get_property(_fsPkgTypeIsSet GLOBAL PROPERTY FeatureSummary_PKG_TYPES SET)
-if(NOT _fsPkgTypeIsSet)
-  set_property(GLOBAL PROPERTY FeatureSummary_PKG_TYPES RUNTIME OPTIONAL RECOMMENDED REQUIRED)
-endif()
-
-get_property(_fsReqPkgTypesIsSet GLOBAL PROPERTY FeatureSummary_REQUIRED_PKG_TYPES SET)
-if(NOT _fsReqPkgTypesIsSet)
-  set_property(GLOBAL PROPERTY FeatureSummary_REQUIRED_PKG_TYPES REQUIRED)
-endif()
-
-get_property(_fsDefaultPkgTypeIsSet GLOBAL PROPERTY FeatureSummary_DEFAULT_PKG_TYPE SET)
-if(NOT _fsDefaultPkgTypeIsSet)
-  set_property(GLOBAL PROPERTY FeatureSummary_DEFAULT_PKG_TYPE OPTIONAL)
-endif()
-
-#[=======================================================================[.rst:
-
-Functions
-^^^^^^^^^
-
-#]=======================================================================]
-
-function(_FS_GET_FEATURE_SUMMARY _property _var _includeQuiet)
-
-  get_property(_fsPkgTypes GLOBAL PROPERTY FeatureSummary_PKG_TYPES)
-  get_property(_fsDefaultPkgType GLOBAL PROPERTY FeatureSummary_DEFAULT_PKG_TYPE)
-
-  set(_type "ANY")
-  foreach(_fsPkgType ${_fsPkgTypes})
-    if("${_property}" MATCHES "${_fsPkgType}_PACKAGES_(NOT_)?FOUND")
-      set(_type "${_fsPkgType}")
-      break()
-    endif()
-  endforeach()
-
-  if("${_property}" MATCHES "PACKAGES_FOUND")
-    set(_property "PACKAGES_FOUND")
-  elseif("${_property}" MATCHES "PACKAGES_NOT_FOUND")
-    set(_property "PACKAGES_NOT_FOUND")
-  endif()
-
-
-  set(_currentFeatureText "")
-  get_property(_EnabledFeatures  GLOBAL PROPERTY ${_property})
-  if(_EnabledFeatures)
-    list(REMOVE_DUPLICATES _EnabledFeatures)
-  endif(_EnabledFeatures)
-
-  foreach(_currentFeature ${_EnabledFeatures})
-
-    # does this package belong to the type we currently want to list ?
-    get_property(_currentType  GLOBAL PROPERTY _CMAKE_${_currentFeature}_TYPE)
-    if(NOT _currentType)
-      list(FIND _fsPkgTypes "${_fsDefaultPkgType}" _defaultInPkgTypes)
-      if("${_defaultInPkgTypes}" STREQUAL "-1")
-        string(REGEX REPLACE ";([^;]+)$" " and \\1" _fsPkgTypes_msg "${_fsPkgTypes}")
-        string(REPLACE ";" ", " _fsPkgTypes_msg "${_fsPkgTypes_msg}")
-        message(FATAL_ERROR "Bad package property type ${_fsDefaultPkgType} used in global property FeatureSummary_DEFAULT_PKG_TYPE. "
-                            "Valid types are ${_fsPkgTypes_msg}. "
-                            "Either update FeatureSummary_DEFAULT_PKG_TYPE or add ${_fsDefaultPkgType} to the FeatureSummary_PKG_TYPES global property.")
-      endif()
-      set(_currentType ${_fsDefaultPkgType})
-    endif()
-
-    if("${_type}" STREQUAL ANY  OR  "${_type}" STREQUAL "${_currentType}")
-      # check whether the current feature/package should be in the output depending on whether it was QUIET or not
-      set(includeThisOne TRUE)
-      set(_required FALSE)
-      # skip QUIET packages, except if they are REQUIRED or INCLUDE_QUIET_PACKAGES has been set
-      get_property(_fsReqPkgTypes GLOBAL PROPERTY FeatureSummary_REQUIRED_PKG_TYPES)
-      foreach(_fsReqPkgType ${_fsReqPkgTypes})
-        if("${_currentType}" STREQUAL "${_fsReqPkgType}")
-          set(_required TRUE)
-          break()
-        endif()
-      endforeach()
-      if(NOT _required AND NOT _includeQuiet)
-        get_property(_isQuiet  GLOBAL PROPERTY _CMAKE_${_currentFeature}_QUIET)
-        if(_isQuiet)
-          set(includeThisOne FALSE)
-        endif()
-      endif()
-      get_property(_isTransitiveDepend
-        GLOBAL PROPERTY _CMAKE_${_currentFeature}_TRANSITIVE_DEPENDENCY
-      )
-      if(_isTransitiveDepend)
-        set(includeThisOne FALSE)
-      endif()
-
-      if(includeThisOne)
-
-        string(APPEND _currentFeatureText "\n * ${_currentFeature}")
-        get_property(_info  GLOBAL PROPERTY _CMAKE_${_currentFeature}_REQUIRED_VERSION)
-        if(_info)
-          string(APPEND _currentFeatureText " (required version ${_info})")
-        endif()
-        get_property(_info  GLOBAL PROPERTY _CMAKE_${_currentFeature}_DESCRIPTION)
-        if(_info)
-          string(APPEND _currentFeatureText ", ${_info}")
-        endif()
-        get_property(_info  GLOBAL PROPERTY _CMAKE_${_currentFeature}_URL)
-        if(_info)
-          string(APPEND _currentFeatureText ", <${_info}>")
-        endif()
-
-        get_property(_info  GLOBAL PROPERTY _CMAKE_${_currentFeature}_PURPOSE)
-        foreach(_purpose ${_info})
-          string(APPEND _currentFeatureText "\n   ${_purpose}")
-        endforeach()
-
-      endif()
-
-    endif()
-
-  endforeach()
-  set(${_var} "${_currentFeatureText}" PARENT_SCOPE)
-endfunction()
-
-
-#[=======================================================================[.rst:
-.. command:: feature_summary
-
-  ::
-
-    feature_summary( [FILENAME <file>]
-                     [APPEND]
-                     [VAR <variable_name>]
-                     [INCLUDE_QUIET_PACKAGES]
-                     [FATAL_ON_MISSING_REQUIRED_PACKAGES]
-                     [DESCRIPTION "<description>" | DEFAULT_DESCRIPTION]
-                     [QUIET_ON_EMPTY]
-                     WHAT (ALL
-                          | PACKAGES_FOUND | PACKAGES_NOT_FOUND
-                          | <TYPE>_PACKAGES_FOUND | <TYPE>_PACKAGES_NOT_FOUND
-                          | ENABLED_FEATURES | DISABLED_FEATURES)
-                   )
-
-  The ``feature_summary()`` macro can be used to print information about
-  enabled or disabled packages or features of a project.  By default,
-  only the names of the features/packages will be printed and their
-  required version when one was specified.  Use ``set_package_properties()``
-  to add more useful information, like e.g.  a download URL for the
-  respective package or their purpose in the project.
-
-  The ``WHAT`` option is the only mandatory option.  Here you specify what
-  information will be printed:
-
-  ``ALL``
-   print everything
-  ``ENABLED_FEATURES``
-   the list of all features which are enabled
-  ``DISABLED_FEATURES``
-   the list of all features which are disabled
-  ``PACKAGES_FOUND``
-   the list of all packages which have been found
-  ``PACKAGES_NOT_FOUND``
-   the list of all packages which have not been found
-
-  For each package type ``<TYPE>`` defined by the
-  :variable:`FeatureSummary_PKG_TYPES` global property, the following
-  information can also be used:
-
-  ``<TYPE>_PACKAGES_FOUND``
-   only those packages which have been found which have the type <TYPE>
-  ``<TYPE>_PACKAGES_NOT_FOUND``
-   only those packages which have not been found which have the type <TYPE>
-
-  With the exception of the ``ALL`` value, these values can be combined
-  in order to customize the output. For example:
-
-  .. code-block:: cmake
-
-    feature_summary(WHAT ENABLED_FEATURES DISABLED_FEATURES)
-
-  If a ``FILENAME`` is given, the information is printed into this file.  If
-  ``APPEND`` is used, it is appended to this file, otherwise the file is
-  overwritten if it already existed.  If the VAR option is used, the
-  information is "printed" into the specified variable.  If ``FILENAME`` is
-  not used, the information is printed to the terminal.  Using the
-  ``DESCRIPTION`` option a description or headline can be set which will be
-  printed above the actual content.  If only one type of
-  package was requested, no title is printed, unless it is explicitly set using
-  either ``DESCRIPTION`` to use a custom string, or ``DEFAULT_DESCRIPTION`` to
-  use a default title for the requested type.
-  If ``INCLUDE_QUIET_PACKAGES`` is given, packages which have been searched with
-  ``find_package(... QUIET)`` will also be listed. By default they are skipped.
-  If ``FATAL_ON_MISSING_REQUIRED_PACKAGES`` is given, CMake will abort if a
-  package which is marked as one of the package types listed in the
-  :variable:`FeatureSummary_REQUIRED_PKG_TYPES` global property has not been
-  found.
-  The default value for the :variable:`FeatureSummary_REQUIRED_PKG_TYPES` global
-  property is ``REQUIRED``.
-
-  The :variable:`FeatureSummary_DEFAULT_PKG_TYPE` global property can be
-  modified to change the default package type assigned when not explicitly
-  assigned by the user.
-
-  If the ``QUIET_ON_EMPTY`` option is used, if only one type of package was
-  requested, and no packages belonging to that category were found, then no
-  output (including the ``DESCRIPTION``) is printed or added to the ``VAR``
-  variable.
-
-  Example 1, append everything to a file:
-
-  .. code-block:: cmake
-
-   include(FeatureSummary)
-   feature_summary(WHAT ALL
-                   FILENAME ${CMAKE_BINARY_DIR}/all.log APPEND)
-
-  Example 2, print the enabled features into the variable
-  enabledFeaturesText, including QUIET packages:
-
-  .. code-block:: cmake
-
-   include(FeatureSummary)
-   feature_summary(WHAT ENABLED_FEATURES
-                   INCLUDE_QUIET_PACKAGES
-                   DESCRIPTION "Enabled Features:"
-                   VAR enabledFeaturesText)
-   message(STATUS "${enabledFeaturesText}")
-
-  Example 3, change default package types and print only the categories that
-  are not empty:
-
-  .. code-block:: cmake
-
-   include(FeatureSummary)
-   set_property(GLOBAL APPEND PROPERTY FeatureSummary_PKG_TYPES BUILD)
-   find_package(FOO)
-   set_package_properties(FOO PROPERTIES TYPE BUILD)
-   feature_summary(WHAT BUILD_PACKAGES_FOUND
-                   Description "Build tools found:"
-                   QUIET_ON_EMPTY)
-   feature_summary(WHAT BUILD_PACKAGES_NOT_FOUND
-                   Description "Build tools not found:"
-                   QUIET_ON_EMPTY)
-
-#]=======================================================================]
-
-function(FEATURE_SUMMARY)
-# CMAKE_PARSE_ARGUMENTS(<prefix> <options> <one_value_keywords> <multi_value_keywords> args...)
-  set(options APPEND
-              INCLUDE_QUIET_PACKAGES
-              FATAL_ON_MISSING_REQUIRED_PACKAGES
-              QUIET_ON_EMPTY
-              DEFAULT_DESCRIPTION)
-  set(oneValueArgs FILENAME
-                   VAR
-                   DESCRIPTION)
-  set(multiValueArgs WHAT)
-
-  CMAKE_PARSE_ARGUMENTS(_FS "${options}" "${oneValueArgs}" "${multiValueArgs}"  ${_FIRST_ARG} ${ARGN})
-
-  if(_FS_UNPARSED_ARGUMENTS)
-    message(FATAL_ERROR "Unknown keywords given to FEATURE_SUMMARY(): \"${_FS_UNPARSED_ARGUMENTS}\"")
-  endif()
-
-  if(NOT _FS_WHAT)
-    message(FATAL_ERROR "The call to FEATURE_SUMMARY() doesn't set the required WHAT argument.")
-  endif()
-
-  if(_FS_DEFAULT_DESCRIPTION AND DEFINED _FS_DESCRIPTION)
-    message(WARNING "DEFAULT_DESCRIPTION option discarded since DESCRIPTION is set.")
-    set(_FS_DEFAULT_DESCRIPTION 0)
-  endif()
-
-  set(validWhatParts "ENABLED_FEATURES"
-                     "DISABLED_FEATURES"
-                     "PACKAGES_FOUND"
-                     "PACKAGES_NOT_FOUND")
-
-  get_property(_fsPkgTypes GLOBAL PROPERTY FeatureSummary_PKG_TYPES)
-  get_property(_fsReqPkgTypes GLOBAL PROPERTY FeatureSummary_REQUIRED_PKG_TYPES)
-  foreach(_fsPkgType ${_fsPkgTypes})
-    list(APPEND validWhatParts "${_fsPkgType}_PACKAGES_FOUND"
-                               "${_fsPkgType}_PACKAGES_NOT_FOUND")
-  endforeach()
-
-  set(title_ENABLED_FEATURES               "The following features have been enabled:")
-  set(title_DISABLED_FEATURES              "The following features have been disabled:")
-  set(title_PACKAGES_FOUND                 "The following packages have been found:")
-  set(title_PACKAGES_NOT_FOUND             "The following packages have not been found:")
-  foreach(_fsPkgType ${_fsPkgTypes})
-    set(_fsPkgTypeDescription "${_fsPkgType} packages")
-    get_property(_fsPkgTypeDescriptionIsSet GLOBAL PROPERTY FeatureSummary_${_fsPkgType}_DESCRIPTION SET)
-    if(_fsPkgTypeDescriptionIsSet)
-      get_property(_fsPkgTypeDescription GLOBAL PROPERTY FeatureSummary_${_fsPkgType}_DESCRIPTION )
-    endif()
-    set(title_${_fsPkgType}_PACKAGES_FOUND     "The following ${_fsPkgTypeDescription} have been found:")
-    set(title_${_fsPkgType}_PACKAGES_NOT_FOUND "The following ${_fsPkgTypeDescription} have not been found:")
-  endforeach()
-
-  list(FIND validWhatParts "${_FS_WHAT}" indexInList)
-  if(NOT "${indexInList}" STREQUAL "-1")
-    _FS_GET_FEATURE_SUMMARY( ${_FS_WHAT} _featureSummary ${_FS_INCLUDE_QUIET_PACKAGES} )
-    if(_featureSummary OR NOT _FS_QUIET_ON_EMPTY)
-      if(_FS_DEFAULT_DESCRIPTION)
-        set(_fullText "${title_${_FS_WHAT}}\n${_featureSummary}\n")
-      else()
-        set(_fullText "${_FS_DESCRIPTION}${_featureSummary}\n")
-      endif()
-    endif()
-
-    if(_featureSummary)
-      foreach(_fsReqPkgType ${_fsReqPkgTypes})
-        if("${_FS_WHAT}" STREQUAL "${_fsReqPkgType}_PACKAGES_NOT_FOUND")
-          set(requiredPackagesNotFound TRUE)
-          break()
-        endif()
-      endforeach()
-    endif()
-
-  else()
-    if("${_FS_WHAT}" STREQUAL "ALL")
-
-      set(allWhatParts "ENABLED_FEATURES")
-      foreach(_fsPkgType ${_fsPkgTypes})
-        list(APPEND allWhatParts "${_fsPkgType}_PACKAGES_FOUND")
-      endforeach()
-      list(APPEND allWhatParts "DISABLED_FEATURES")
-      foreach(_fsPkgType ${_fsPkgTypes})
-        list(APPEND allWhatParts "${_fsPkgType}_PACKAGES_NOT_FOUND")
-      endforeach()
-    else()
-      set(allWhatParts)
-      foreach(part ${_FS_WHAT})
-        list(FIND validWhatParts "${part}" indexInList)
-        if(NOT "${indexInList}" STREQUAL "-1")
-          list(APPEND allWhatParts "${part}")
-        else()
-          if("${part}" STREQUAL "ALL")
-            message(FATAL_ERROR "The WHAT argument of FEATURE_SUMMARY() contains ALL, which cannot be combined with other values.")
-          else()
-            message(FATAL_ERROR "The WHAT argument of FEATURE_SUMMARY() contains ${part}, which is not a valid value.")
-          endif()
-        endif()
-      endforeach()
-    endif()
-
-    set(_fullText "${_FS_DESCRIPTION}")
-    foreach(part ${allWhatParts})
-      set(_tmp)
-      _FS_GET_FEATURE_SUMMARY( ${part} _tmp ${_FS_INCLUDE_QUIET_PACKAGES})
-      if(_tmp)
-        if(_fullText)
-          string(APPEND _fullText "\n-- ")
-        endif()
-        string(APPEND _fullText "${title_${part}}\n${_tmp}\n")
-        foreach(_fsReqPkgType ${_fsReqPkgTypes})
-          if("${part}" STREQUAL "${_fsReqPkgType}_PACKAGES_NOT_FOUND")
-            set(requiredPackagesNotFound TRUE)
-            break()
-          endif()
-        endforeach()
-      endif()
-    endforeach()
-  endif()
-
-  if(_fullText OR NOT _FS_QUIET_ON_EMPTY)
-    if(_FS_FILENAME)
-      if(_FS_APPEND)
-        file(APPEND "${_FS_FILENAME}" "${_fullText}")
-      else()
-        file(WRITE  "${_FS_FILENAME}" "${_fullText}")
-      endif()
-
-    else()
-      if(NOT _FS_VAR)
-        message(STATUS "${_fullText}")
-      endif()
-    endif()
-
-    if(_FS_VAR)
-      set(${_FS_VAR} "${_fullText}" PARENT_SCOPE)
-    endif()
-  endif()
-
-  if(requiredPackagesNotFound  AND  _FS_FATAL_ON_MISSING_REQUIRED_PACKAGES)
-    message(FATAL_ERROR "feature_summary() Error: REQUIRED package(s) are missing, aborting CMake run.")
-  endif()
-
-endfunction()
-
-#[=======================================================================[.rst:
-.. command:: set_package_properties
-
-  ::
-
-    set_package_properties(<name> PROPERTIES
-                           [ URL <url> ]
-                           [ DESCRIPTION <description> ]
-                           [ TYPE (RUNTIME|OPTIONAL|RECOMMENDED|REQUIRED) ]
-                           [ PURPOSE <purpose> ]
-                          )
-
-  Use this macro to set up information about the named package, which
-  can then be displayed via FEATURE_SUMMARY().  This can be done either
-  directly in the Find-module or in the project which uses the module
-  after the find_package() call.  The features for which information can
-  be set are added automatically by the find_package() command.
-
-  ``URL <url>``
-    This should be the homepage of the package, or something similar.
-    Ideally this is set already directly in the Find-module.
-
-  ``DESCRIPTION <description>``
-    A short description what that package is, at most one sentence.
-    Ideally this is set already directly in the Find-module.
-
-  ``TYPE <type>``
-    What type of dependency has the using project on that package.
-    Default is ``OPTIONAL``.  In this case it is a package which can be used
-    by the project when available at buildtime, but it also work without.
-    ``RECOMMENDED`` is similar to ``OPTIONAL``, i.e.  the project will build if
-    the package is not present, but the functionality of the resulting
-    binaries will be severely limited.  If a ``REQUIRED`` package is not
-    available at buildtime, the project may not even build.  This can be
-    combined with the ``FATAL_ON_MISSING_REQUIRED_PACKAGES`` argument for
-    ``feature_summary()``.  Last, a ``RUNTIME`` package is a package which is
-    actually not used at all during the build, but which is required for
-    actually running the resulting binaries.  So if such a package is
-    missing, the project can still be built, but it may not work later on.
-    If ``set_package_properties()`` is called multiple times for the same
-    package with different TYPEs, the ``TYPE`` is only changed to higher
-    TYPEs (``RUNTIME < OPTIONAL < RECOMMENDED < REQUIRED``), lower TYPEs are
-    ignored.  The ``TYPE`` property is project-specific, so it cannot be set
-    by the Find-module, but must be set in the project.
-    Type accepted can be changed by setting the
-    :variable:`FeatureSummary_PKG_TYPES` global property.
-
-  ``PURPOSE <purpose>``
-    This describes which features this package enables in the
-    project, i.e.  it tells the user what functionality he gets in the
-    resulting binaries.  If set_package_properties() is called multiple
-    times for a package, all PURPOSE properties are appended to a list of
-    purposes of the package in the project.  As the TYPE property, also
-    the PURPOSE property is project-specific, so it cannot be set by the
-    Find-module, but must be set in the project.
-
-  Example for setting the info for a package:
-
-  .. code-block:: cmake
-
-    find_package(LibXml2)
-    set_package_properties(LibXml2 PROPERTIES
-                           DESCRIPTION "A XML processing library."
-                           URL "http://xmlsoft.org/")
-    # or
-    set_package_properties(LibXml2 PROPERTIES
-                           TYPE RECOMMENDED
-                           PURPOSE "Enables HTML-import in MyWordProcessor")
-    # or
-    set_package_properties(LibXml2 PROPERTIES
-                           TYPE OPTIONAL
-                           PURPOSE "Enables odt-export in MyWordProcessor")
-
-    find_package(DBUS)
-    set_package_properties(DBUS PROPERTIES
-      TYPE RUNTIME
-      PURPOSE "Necessary to disable the screensaver during a presentation")
-#]=======================================================================]
-function(SET_PACKAGE_PROPERTIES _name _props)
-  if(NOT "${_props}" STREQUAL "PROPERTIES")
-    message(FATAL_ERROR "PROPERTIES keyword is missing in SET_PACKAGE_PROPERTIES() call.")
-  endif()
-
-  set(options ) # none
-  set(oneValueArgs DESCRIPTION URL TYPE PURPOSE )
-  set(multiValueArgs ) # none
-
-  CMAKE_PARSE_ARGUMENTS(_SPP "${options}" "${oneValueArgs}" "${multiValueArgs}"  ${ARGN})
-
-  if(_SPP_UNPARSED_ARGUMENTS)
-    message(FATAL_ERROR "Unknown keywords given to SET_PACKAGE_PROPERTIES(): \"${_SPP_UNPARSED_ARGUMENTS}\"")
-  endif()
-
-  if(_SPP_DESCRIPTION)
-    get_property(_info  GLOBAL PROPERTY _CMAKE_${_name}_DESCRIPTION)
-    if(_info AND NOT "${_info}" STREQUAL "${_SPP_DESCRIPTION}")
-      message(STATUS "Warning: Property DESCRIPTION for package ${_name} already set to \"${_info}\", overriding it with \"${_SPP_DESCRIPTION}\"")
-    endif()
-
-    set_property(GLOBAL PROPERTY _CMAKE_${_name}_DESCRIPTION "${_SPP_DESCRIPTION}" )
-  endif()
-
-
-  if(_SPP_URL)
-    get_property(_info  GLOBAL PROPERTY _CMAKE_${_name}_URL)
-    if(_info AND NOT "${_info}" STREQUAL "${_SPP_URL}")
-      message(STATUS "Warning: Property URL already set to \"${_info}\", overriding it with \"${_SPP_URL}\"")
-    endif()
-
-    set_property(GLOBAL PROPERTY _CMAKE_${_name}_URL "${_SPP_URL}" )
-  endif()
-
-
-  # handle the PURPOSE: use APPEND, since there can be multiple purposes for one package inside a project
-  if(_SPP_PURPOSE)
-    set_property(GLOBAL APPEND PROPERTY _CMAKE_${_name}_PURPOSE "${_SPP_PURPOSE}" )
-  endif()
-
-  get_property(_fsPkgTypes GLOBAL PROPERTY FeatureSummary_PKG_TYPES)
-  get_property(_fsDefaultPkgType GLOBAL PROPERTY FeatureSummary_DEFAULT_PKG_TYPE)
-
-  # handle the TYPE
-  if(DEFINED _SPP_TYPE)
-    # Supported types are listed in FeatureSummary_PKG_TYPES according to their priority
-    get_property(_fsPkgTypes GLOBAL PROPERTY FeatureSummary_PKG_TYPES)
-    list(FIND _fsPkgTypes ${_SPP_TYPE} _typeIndexInList)
-    if("${_typeIndexInList}" STREQUAL "-1" )
-      string(REGEX REPLACE ";([^;]+)$" " and \\1" _fsPkgTypes_msg "${_fsPkgTypes}")
-      string(REPLACE ";" ", " _fsPkgTypes_msg "${_fsPkgTypes_msg}")
-      message(FATAL_ERROR "Bad package property type ${_SPP_TYPE} used in SET_PACKAGE_PROPERTIES(). "
-                          "Valid types are ${_fsPkgTypes_msg}." )
-    endif()
-
-    get_property(_previousType  GLOBAL PROPERTY _CMAKE_${_name}_TYPE)
-    list(FIND _fsPkgTypes "${_previousType}" _prevTypeIndexInList)
-
-    # make sure a previously set TYPE is not overridden with a lower new TYPE:
-    if("${_typeIndexInList}" GREATER "${_prevTypeIndexInList}")
-      set_property(GLOBAL PROPERTY _CMAKE_${_name}_TYPE "${_SPP_TYPE}" )
-    endif()
-  endif()
-
-endfunction()
-
-#[=======================================================================[.rst:
-.. command:: add_feature_info
-
-  ::
-
-    add_feature_info(<name> <enabled> <description>)
-
-  Use this macro to add information about a feature with the given ``<name>``.
-  ``<enabled>`` contains whether this feature is enabled or not. It can be a
-  variable or a list of conditions.
-  ``<description>`` is a text describing the feature.  The information can
-  be displayed using ``feature_summary()`` for ``ENABLED_FEATURES`` and
-  ``DISABLED_FEATURES`` respectively.
-
-  Example for setting the info for a feature:
-
-  .. code-block:: cmake
-
-     option(WITH_FOO "Help for foo" ON)
-     add_feature_info(Foo WITH_FOO "The Foo feature provides very cool stuff.")
-#]=======================================================================]
-function(ADD_FEATURE_INFO _name _depends _desc)
-  set(_enabled 1)
-  foreach(_d ${_depends})
-    string(REGEX REPLACE " +" ";" _d "${_d}")
-    if(${_d})
-    else()
-      set(_enabled 0)
-      break()
-    endif()
-  endforeach()
-  if (${_enabled})
-    set_property(GLOBAL APPEND PROPERTY ENABLED_FEATURES "${_name}")
-  else ()
-    set_property(GLOBAL APPEND PROPERTY DISABLED_FEATURES "${_name}")
-  endif ()
-
-  set_property(GLOBAL PROPERTY _CMAKE_${_name}_DESCRIPTION "${_desc}" )
-endfunction()
-
-
-# The stuff below is only kept for compatibility
-
-#[=======================================================================[.rst:
-Legacy Macros
-^^^^^^^^^^^^^
-
-The following macros are provided for compatibility with previous
-CMake versions:
-
-.. command:: set_package_info
-
-  ::
-
-    set_package_info(<name> <description> [ <url> [<purpose>] ])
-
-  Use this macro to set up information about the named package, which
-  can then be displayed via ``feature_summary()``.  This can be done either
-  directly in the Find-module or in the project which uses the module
-  after the :command:`find_package` call.  The features for which information
-  can be set are added automatically by the ``find_package()`` command.
-#]=======================================================================]
-function(SET_PACKAGE_INFO _name _desc)
-  message(DEPRECATION "SET_PACKAGE_INFO is deprecated. Use SET_PACKAGE_PROPERTIES instead.")
-  unset(_url)
-  unset(_purpose)
-  if(ARGC GREATER 2)
-    set(_url "${ARGV2}")
-  endif()
-  if(ARGC GREATER 3)
-    set(_purpose "${ARGV3}")
-  endif()
-  set_property(GLOBAL PROPERTY _CMAKE_${_name}_DESCRIPTION "${_desc}" )
-  if(NOT _url STREQUAL "")
-    set_property(GLOBAL PROPERTY _CMAKE_${_name}_URL "${_url}" )
-  endif()
-  if(NOT _purpose STREQUAL "")
-    set_property(GLOBAL APPEND PROPERTY _CMAKE_${_name}_PURPOSE "${_purpose}" )
-  endif()
-endfunction()
-
-#[=======================================================================[.rst:
-.. command:: set_feature_info
-
-  ::
-
-    set_feature_info(<name> <description> [<url>])
-
-  Does the same as::
-
-    set_package_info(<name> <description> <url>)
-#]=======================================================================]
-function(SET_FEATURE_INFO)
-  message(DEPRECATION "SET_FEATURE_INFO is deprecated. Use ADD_FEATURE_INFO instead.")
-  SET_PACKAGE_INFO(${ARGN})
-endfunction()
-
-#[=======================================================================[.rst:
-.. command:: print_enabled_features
-
-  ::
-
-    print_enabled_features()
-
-  Does the same as
-
-  .. code-block:: cmake
-
-    feature_summary(WHAT ENABLED_FEATURES DESCRIPTION "Enabled features:")
-#]=======================================================================]
-function(PRINT_ENABLED_FEATURES)
-  message(DEPRECATION "PRINT_ENABLED_FEATURES is deprecated. Use
-    feature_summary(WHAT ENABLED_FEATURES DESCRIPTION \"Enabled features:\")")
-  FEATURE_SUMMARY(WHAT ENABLED_FEATURES  DESCRIPTION "Enabled features:")
-endfunction()
-
-#[=======================================================================[.rst:
-.. command:: print_disabled_features
-
-  ::
-
-    print_disabled_features()
-
-  Does the same as
-
-  .. code-block:: cmake
-
-    feature_summary(WHAT DISABLED_FEATURES DESCRIPTION "Disabled features:")
-#]=======================================================================]
-function(PRINT_DISABLED_FEATURES)
-  message(DEPRECATION "PRINT_DISABLED_FEATURES is deprecated. Use
-    feature_summary(WHAT DISABLED_FEATURES DESCRIPTION \"Disabled features:\")")
-  FEATURE_SUMMARY(WHAT DISABLED_FEATURES  DESCRIPTION "Disabled features:")
-endfunction()
diff --git a/share/cmake-3.18/Modules/FetchContent.cmake b/share/cmake-3.18/Modules/FetchContent.cmake
deleted file mode 100644
index e05ca96..0000000
--- a/share/cmake-3.18/Modules/FetchContent.cmake
+++ /dev/null
@@ -1,1154 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FetchContent
-------------------
-
-.. only:: html
-
-  .. contents::
-
-Overview
-^^^^^^^^
-
-This module enables populating content at configure time via any method
-supported by the :module:`ExternalProject` module.  Whereas
-:command:`ExternalProject_Add` downloads at build time, the
-``FetchContent`` module makes content available immediately, allowing the
-configure step to use the content in commands like :command:`add_subdirectory`,
-:command:`include` or :command:`file` operations.
-
-Content population details would normally be defined separately from the
-command that performs the actual population.  This separation ensures that
-all of the dependency details are defined before anything may try to use those
-details to populate content.  This is particularly important in more complex
-project hierarchies where dependencies may be shared between multiple projects.
-
-The following shows a typical example of declaring content details:
-
-.. code-block:: cmake
-
-  FetchContent_Declare(
-    googletest
-    GIT_REPOSITORY https://github.com/google/googletest.git
-    GIT_TAG        release-1.8.0
-  )
-
-For most typical cases, populating the content can then be done with a single
-command like so:
-
-.. code-block:: cmake
-
-  FetchContent_MakeAvailable(googletest)
-
-The above command not only populates the content, it also adds it to the main
-build (if possible) so that the main build can use the populated project's
-targets, etc.  In some cases, the main project may need to have more precise
-control over the population or may be required to explicitly define the
-population steps (e.g. if CMake versions earlier than 3.14 need to be
-supported).  The typical pattern of such custom steps looks like this:
-
-.. code-block:: cmake
-
-  FetchContent_GetProperties(googletest)
-  if(NOT googletest_POPULATED)
-    FetchContent_Populate(googletest)
-    add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR})
-  endif()
-
-Regardless of which population method is used, when using the
-declare-populate pattern with a hierarchical project arrangement, projects at
-higher levels in the hierarchy are able to override the population details of
-content specified anywhere lower in the project hierarchy.  The ability to
-detect whether content has already been populated ensures that even if
-multiple child projects want certain content to be available, the first one
-to populate it wins.  The other child project can simply make use of the
-already available content instead of repeating the population for itself.
-See the :ref:`Examples <fetch-content-examples>` section which demonstrates
-this scenario.
-
-The ``FetchContent`` module also supports defining and populating
-content in a single call, with no check for whether the content has been
-populated elsewhere in the project already.  This is a more low level
-operation and would not normally be the way the module is used, but it is
-sometimes useful as part of implementing some higher level feature or to
-populate some content in CMake's script mode.
-
-
-Commands
-^^^^^^^^
-
-Declaring Content Details
-"""""""""""""""""""""""""
-
-.. command:: FetchContent_Declare
-
-  .. code-block:: cmake
-
-    FetchContent_Declare(<name> <contentOptions>...)
-
-  The ``FetchContent_Declare()`` function records the options that describe
-  how to populate the specified content, but if such details have already
-  been recorded earlier in this project (regardless of where in the project
-  hierarchy), this and all later calls for the same content ``<name>`` are
-  ignored.  This "first to record, wins" approach is what allows hierarchical
-  projects to have parent projects override content details of child projects.
-
-  The content ``<name>`` can be any string without spaces, but good practice
-  would be to use only letters, numbers and underscores.  The name will be
-  treated case-insensitively and it should be obvious for the content it
-  represents, often being the name of the child project or the value given
-  to its top level :command:`project` command (if it is a CMake project).
-  For well-known public projects, the name should generally be the official
-  name of the project.  Choosing an unusual name makes it unlikely that other
-  projects needing that same content will use the same name, leading to
-  the content being populated multiple times.
-
-  The ``<contentOptions>`` can be any of the download or update/patch options
-  that the :command:`ExternalProject_Add` command understands.  The configure,
-  build, install and test steps are explicitly disabled and therefore options
-  related to them will be ignored.  The ``SOURCE_SUBDIR`` option is an
-  exception, see :command:`FetchContent_MakeAvailable` for details on how that
-  affects behavior.
-
-  In most cases, ``<contentOptions>`` will just be a couple of options defining
-  the download method and method-specific details like a commit tag or archive
-  hash.  For example:
-
-  .. code-block:: cmake
-
-    FetchContent_Declare(
-      googletest
-      GIT_REPOSITORY https://github.com/google/googletest.git
-      GIT_TAG        release-1.8.0
-    )
-
-    FetchContent_Declare(
-      myCompanyIcons
-      URL      https://intranet.mycompany.com/assets/iconset_1.12.tar.gz
-      URL_HASH 5588a7b18261c20068beabfb4f530b87
-    )
-
-    FetchContent_Declare(
-      myCompanyCertificates
-      SVN_REPOSITORY svn+ssh://svn.mycompany.com/srv/svn/trunk/certs
-      SVN_REVISION   -r12345
-    )
-
-Populating The Content
-""""""""""""""""""""""
-
-For most common scenarios, population means making content available to the
-main build according to previously declared details for that dependency.
-There are two main patterns for populating content, one based on calling
-:command:`FetchContent_GetProperties` and
-:command:`FetchContent_Populate` for more precise control and the other on
-calling :command:`FetchContent_MakeAvailable` for a simpler, more automated
-approach.  The former generally follows this canonical pattern:
-
-.. _`fetch-content-canonical-pattern`:
-
-.. code-block:: cmake
-
-  # Check if population has already been performed
-  FetchContent_GetProperties(<name>)
-  string(TOLOWER "<name>" lcName)
-  if(NOT ${lcName}_POPULATED)
-    # Fetch the content using previously declared details
-    FetchContent_Populate(<name>)
-
-    # Set custom variables, policies, etc.
-    # ...
-
-    # Bring the populated content into the build
-    add_subdirectory(${${lcName}_SOURCE_DIR} ${${lcName}_BINARY_DIR})
-  endif()
-
-The above is such a common pattern that, where no custom steps are needed
-between the calls to :command:`FetchContent_Populate` and
-:command:`add_subdirectory`, equivalent logic can be obtained by calling
-:command:`FetchContent_MakeAvailable` instead.  Where it meets the needs of
-the project, :command:`FetchContent_MakeAvailable` should be preferred, as it
-is simpler and provides additional features over the pattern above.
-
-.. command:: FetchContent_Populate
-
-  .. code-block:: cmake
-
-    FetchContent_Populate( <name> )
-
-  In most cases, the only argument given to ``FetchContent_Populate()`` is the
-  ``<name>``.  When used this way, the command assumes the content details have
-  been recorded by an earlier call to :command:`FetchContent_Declare`.  The
-  details are stored in a global property, so they are unaffected by things
-  like variable or directory scope.  Therefore, it doesn't matter where in the
-  project the details were previously declared, as long as they have been
-  declared before the call to ``FetchContent_Populate()``.  Those saved details
-  are then used to construct a call to :command:`ExternalProject_Add` in a
-  private sub-build to perform the content population immediately.  The
-  implementation of ``ExternalProject_Add()`` ensures that if the content has
-  already been populated in a previous CMake run, that content will be reused
-  rather than repopulating them again.  For the common case where population
-  involves downloading content, the cost of the download is only paid once.
-
-  An internal global property records when a particular content population
-  request has been processed.  If ``FetchContent_Populate()`` is called more
-  than once for the same content name within a configure run, the second call
-  will halt with an error.  Projects can and should check whether content
-  population has already been processed with the
-  :command:`FetchContent_GetProperties` command before calling
-  ``FetchContent_Populate()``.
-
-  ``FetchContent_Populate()`` will set three variables in the scope of the
-  caller; ``<lcName>_POPULATED``, ``<lcName>_SOURCE_DIR`` and
-  ``<lcName>_BINARY_DIR``, where ``<lcName>`` is the lowercased ``<name>``.
-  ``<lcName>_POPULATED`` will always be set to ``True`` by the call.
-  ``<lcName>_SOURCE_DIR`` is the location where the
-  content can be found upon return (it will have already been populated), while
-  ``<lcName>_BINARY_DIR`` is a directory intended for use as a corresponding
-  build directory.  The main use case for the two directory variables is to
-  call :command:`add_subdirectory` immediately after population, i.e.:
-
-  .. code-block:: cmake
-
-    FetchContent_Populate(FooBar ...)
-    add_subdirectory(${foobar_SOURCE_DIR} ${foobar_BINARY_DIR})
-
-  The values of the three variables can also be retrieved from anywhere in the
-  project hierarchy using the :command:`FetchContent_GetProperties` command.
-
-  A number of cache variables influence the behavior of all content population
-  performed using details saved from a :command:`FetchContent_Declare` call:
-
-  ``FETCHCONTENT_BASE_DIR``
-    In most cases, the saved details do not specify any options relating to the
-    directories to use for the internal sub-build, final source and build areas.
-    It is generally best to leave these decisions up to the ``FetchContent``
-    module to handle on the project's behalf.  The ``FETCHCONTENT_BASE_DIR``
-    cache variable controls the point under which all content population
-    directories are collected, but in most cases developers would not need to
-    change this.  The default location is ``${CMAKE_BINARY_DIR}/_deps``, but if
-    developers change this value, they should aim to keep the path short and
-    just below the top level of the build tree to avoid running into path
-    length problems on Windows.
-
-  ``FETCHCONTENT_QUIET``
-    The logging output during population can be quite verbose, making the
-    configure stage quite noisy.  This cache option (``ON`` by default) hides
-    all population output unless an error is encountered.  If experiencing
-    problems with hung downloads, temporarily switching this option off may
-    help diagnose which content population is causing the issue.
-
-  ``FETCHCONTENT_FULLY_DISCONNECTED``
-    When this option is enabled, no attempt is made to download or update
-    any content.  It is assumed that all content has already been populated in
-    a previous run or the source directories have been pointed at existing
-    contents the developer has provided manually (using options described
-    further below).  When the developer knows that no changes have been made to
-    any content details, turning this option ``ON`` can significantly speed up
-    the configure stage.  It is ``OFF`` by default.
-
-  ``FETCHCONTENT_UPDATES_DISCONNECTED``
-    This is a less severe download/update control compared to
-    ``FETCHCONTENT_FULLY_DISCONNECTED``.  Instead of bypassing all download and
-    update logic, the ``FETCHCONTENT_UPDATES_DISCONNECTED`` only disables the
-    update stage.  Therefore, if content has not been downloaded previously,
-    it will still be downloaded when this option is enabled.  This can speed up
-    the configure stage, but not as much as
-    ``FETCHCONTENT_FULLY_DISCONNECTED``.  It is ``OFF`` by default.
-
-  In addition to the above cache variables, the following cache variables are
-  also defined for each content name (``<ucName>`` is the uppercased value of
-  ``<name>``):
-
-  ``FETCHCONTENT_SOURCE_DIR_<ucName>``
-    If this is set, no download or update steps are performed for the specified
-    content and the ``<lcName>_SOURCE_DIR`` variable returned to the caller is
-    pointed at this location.  This gives developers a way to have a separate
-    checkout of the content that they can modify freely without interference
-    from the build.  The build simply uses that existing source, but it still
-    defines ``<lcName>_BINARY_DIR`` to point inside its own build area.
-    Developers are strongly encouraged to use this mechanism rather than
-    editing the sources populated in the default location, as changes to
-    sources in the default location can be lost when content population details
-    are changed by the project.
-
-  ``FETCHCONTENT_UPDATES_DISCONNECTED_<ucName>``
-    This is the per-content equivalent of
-    ``FETCHCONTENT_UPDATES_DISCONNECTED``. If the global option or this option
-    is ``ON``, then updates will be disabled for the named content.
-    Disabling updates for individual content can be useful for content whose
-    details rarely change, while still leaving other frequently changing
-    content with updates enabled.
-
-
-  The ``FetchContent_Populate()`` command also supports a syntax allowing the
-  content details to be specified directly rather than using any saved
-  details.  This is more low-level and use of this form is generally to be
-  avoided in favour of using saved content details as outlined above.
-  Nevertheless, in certain situations it can be useful to invoke the content
-  population as an isolated operation (typically as part of implementing some
-  other higher level feature or when using CMake in script mode):
-
-  .. code-block:: cmake
-
-    FetchContent_Populate( <name>
-      [QUIET]
-      [SUBBUILD_DIR <subBuildDir>]
-      [SOURCE_DIR <srcDir>]
-      [BINARY_DIR <binDir>]
-      ...
-    )
-
-  This form has a number of key differences to that where only ``<name>`` is
-  provided:
-
-  - All required population details are assumed to have been provided directly
-    in the call to ``FetchContent_Populate()``. Any saved details for
-    ``<name>`` are ignored.
-  - No check is made for whether content for ``<name>`` has already been
-    populated.
-  - No global property is set to record that the population has occurred.
-  - No global properties record the source or binary directories used for the
-    populated content.
-  - The ``FETCHCONTENT_FULLY_DISCONNECTED`` and
-    ``FETCHCONTENT_UPDATES_DISCONNECTED`` cache variables are ignored.
-
-  The ``<lcName>_SOURCE_DIR`` and ``<lcName>_BINARY_DIR`` variables are still
-  returned to the caller, but since these locations are not stored as global
-  properties when this form is used, they are only available to the calling
-  scope and below rather than the entire project hierarchy.  No
-  ``<lcName>_POPULATED`` variable is set in the caller's scope with this form.
-
-  The supported options for ``FetchContent_Populate()`` are the same as those
-  for :command:`FetchContent_Declare()`.  Those few options shown just
-  above are either specific to ``FetchContent_Populate()`` or their behavior is
-  slightly modified from how :command:`ExternalProject_Add` treats them.
-
-  ``QUIET``
-    The ``QUIET`` option can be given to hide the output associated with
-    populating the specified content.  If the population fails, the output will
-    be shown regardless of whether this option was given or not so that the
-    cause of the failure can be diagnosed.  The global ``FETCHCONTENT_QUIET``
-    cache variable has no effect on ``FetchContent_Populate()`` calls where the
-    content details are provided directly.
-
-  ``SUBBUILD_DIR``
-    The ``SUBBUILD_DIR`` argument can be provided to change the location of the
-    sub-build created to perform the population.  The default value is
-    ``${CMAKE_CURRENT_BINARY_DIR}/<lcName>-subbuild`` and it would be unusual
-    to need to override this default.  If a relative path is specified, it will
-    be interpreted as relative to :variable:`CMAKE_CURRENT_BINARY_DIR`.
-    This option should not be confused with the ``SOURCE_SUBDIR`` option which
-    only affects the :command:`FetchContent_MakeAvailable` command.
-
-  ``SOURCE_DIR``, ``BINARY_DIR``
-    The ``SOURCE_DIR`` and ``BINARY_DIR`` arguments are supported by
-    :command:`ExternalProject_Add`, but different default values are used by
-    ``FetchContent_Populate()``.  ``SOURCE_DIR`` defaults to
-    ``${CMAKE_CURRENT_BINARY_DIR}/<lcName>-src`` and ``BINARY_DIR`` defaults to
-    ``${CMAKE_CURRENT_BINARY_DIR}/<lcName>-build``.  If a relative path is
-    specified, it will be interpreted as relative to
-    :variable:`CMAKE_CURRENT_BINARY_DIR`.
-
-  In addition to the above explicit options, any other unrecognized options are
-  passed through unmodified to :command:`ExternalProject_Add` to perform the
-  download, patch and update steps.  The following options are explicitly
-  prohibited (they are disabled by the ``FetchContent_Populate()`` command):
-
-  - ``CONFIGURE_COMMAND``
-  - ``BUILD_COMMAND``
-  - ``INSTALL_COMMAND``
-  - ``TEST_COMMAND``
-
-  If using ``FetchContent_Populate()`` within CMake's script mode, be aware
-  that the implementation sets up a sub-build which therefore requires a CMake
-  generator and build tool to be available. If these cannot be found by
-  default, then the :variable:`CMAKE_GENERATOR` and/or
-  :variable:`CMAKE_MAKE_PROGRAM` variables will need to be set appropriately
-  on the command line invoking the script.
-
-
-.. command:: FetchContent_GetProperties
-
-  When using saved content details, a call to :command:`FetchContent_Populate`
-  records information in global properties which can be queried at any time.
-  This information includes the source and binary directories associated with
-  the content and also whether or not the content population has been processed
-  during the current configure run.
-
-  .. code-block:: cmake
-
-    FetchContent_GetProperties( <name>
-      [SOURCE_DIR <srcDirVar>]
-      [BINARY_DIR <binDirVar>]
-      [POPULATED <doneVar>]
-    )
-
-  The ``SOURCE_DIR``, ``BINARY_DIR`` and ``POPULATED`` options can be used to
-  specify which properties should be retrieved.  Each option accepts a value
-  which is the name of the variable in which to store that property.  Most of
-  the time though, only ``<name>`` is given, in which case the call will then
-  set the same variables as a call to
-  :command:`FetchContent_Populate(name) <FetchContent_Populate>`.  This allows
-  the following canonical pattern to be used, which ensures that the relevant
-  variables will always be defined regardless of whether or not the population
-  has been performed elsewhere in the project already:
-
-  .. code-block:: cmake
-
-    FetchContent_GetProperties(foobar)
-    if(NOT foobar_POPULATED)
-      FetchContent_Populate(foobar)
-      ...
-    endif()
-
-  The above pattern allows other parts of the overall project hierarchy to
-  re-use the same content and ensure that it is only populated once.
-
-
-.. command:: FetchContent_MakeAvailable
-
-  .. code-block:: cmake
-
-    FetchContent_MakeAvailable( <name1> [<name2>...] )
-
-  This command implements the common pattern typically needed for most
-  dependencies.  It iterates over each of the named dependencies in turn
-  and for each one it loosely follows the
-  :ref:`canonical pattern <fetch-content-canonical-pattern>` as
-  presented at the beginning of this section.  An important difference is
-  that :command:`add_subdirectory` will only be called on the
-  populated content if there is a ``CMakeLists.txt`` file in its top level
-  source directory.  This allows the command to be used for dependencies
-  that make downloaded content available at a known location but which do
-  not need or support being added directly to the build.
-
-  The ``SOURCE_SUBDIR`` option can be given in the declared details to
-  instruct ``FetchContent_MakeAvailable()`` to look for a ``CMakeLists.txt``
-  file in a subdirectory below the top level (i.e. the same way that
-  ``SOURCE_SUBDIR`` is used by the :command:`ExternalProject_Add` command).
-  ``SOURCE_SUBDIR`` must always be a relative path.  See the next section
-  for an example of this option.
-
-
-.. _`fetch-content-examples`:
-
-Examples
-^^^^^^^^
-
-This first fairly straightforward example ensures that some popular testing
-frameworks are available to the main build:
-
-.. code-block:: cmake
-
-  include(FetchContent)
-  FetchContent_Declare(
-    googletest
-    GIT_REPOSITORY https://github.com/google/googletest.git
-    GIT_TAG        release-1.8.0
-  )
-  FetchContent_Declare(
-    Catch2
-    GIT_REPOSITORY https://github.com/catchorg/Catch2.git
-    GIT_TAG        v2.5.0
-  )
-
-  # After the following call, the CMake targets defined by googletest and
-  # Catch2 will be defined and available to the rest of the build
-  FetchContent_MakeAvailable(googletest Catch2)
-
-If the sub-project's ``CMakeLists.txt`` file is not at the top level of its
-source tree, the ``SOURCE_SUBDIR`` option can be used to tell ``FetchContent``
-where to find it.  The following example shows how to use that option and
-it also sets a variable which is meaningful to the subproject before pulling
-it into the main build:
-
-.. code-block:: cmake
-
-  include(FetchContent)
-  FetchContent_Declare(
-    protobuf
-    GIT_REPOSITORY https://github.com/protocolbuffers/protobuf.git
-    GIT_TAG        v3.12.0
-    SOURCE_SUBDIR  cmake
-  )
-  set(protobuf_BUILD_TESTS OFF)
-  FetchContent_MakeAvailable(protobuf)
-
-In more complex project hierarchies, the dependency relationships can be more
-complicated.  Consider a hierarchy where ``projA`` is the top level project and
-it depends directly on projects ``projB`` and ``projC``.  Both ``projB`` and
-``projC`` can be built standalone and they also both depend on another project
-``projD``.  ``projB`` additionally depends on ``projE``.  This example assumes
-that all five projects are available on a company git server.  The
-``CMakeLists.txt`` of each project might have sections like the following:
-
-*projA*:
-
-.. code-block:: cmake
-
-  include(FetchContent)
-  FetchContent_Declare(
-    projB
-    GIT_REPOSITORY git@mycompany.com:git/projB.git
-    GIT_TAG        4a89dc7e24ff212a7b5167bef7ab079d
-  )
-  FetchContent_Declare(
-    projC
-    GIT_REPOSITORY git@mycompany.com:git/projC.git
-    GIT_TAG        4ad4016bd1d8d5412d135cf8ceea1bb9
-  )
-  FetchContent_Declare(
-    projD
-    GIT_REPOSITORY git@mycompany.com:git/projD.git
-    GIT_TAG        origin/integrationBranch
-  )
-  FetchContent_Declare(
-    projE
-    GIT_REPOSITORY git@mycompany.com:git/projE.git
-    GIT_TAG        origin/release/2.3-rc1
-  )
-
-  # Order is important, see notes in the discussion further below
-  FetchContent_MakeAvailable(projD projB projC)
-
-*projB*:
-
-.. code-block:: cmake
-
-  include(FetchContent)
-  FetchContent_Declare(
-    projD
-    GIT_REPOSITORY git@mycompany.com:git/projD.git
-    GIT_TAG        20b415f9034bbd2a2e8216e9a5c9e632
-  )
-  FetchContent_Declare(
-    projE
-    GIT_REPOSITORY git@mycompany.com:git/projE.git
-    GIT_TAG        68e20f674a48be38d60e129f600faf7d
-  )
-
-  FetchContent_MakeAvailable(projD projE)
-
-*projC*:
-
-.. code-block:: cmake
-
-  include(FetchContent)
-  FetchContent_Declare(
-    projD
-    GIT_REPOSITORY git@mycompany.com:git/projD.git
-    GIT_TAG        7d9a17ad2c962aa13e2fbb8043fb6b8a
-  )
-
-  # This particular version of projD requires workarounds
-  FetchContent_GetProperties(projD)
-  if(NOT projd_POPULATED)
-    FetchContent_Populate(projD)
-
-    # Copy an additional/replacement file into the populated source
-    file(COPY someFile.c DESTINATION ${projd_SOURCE_DIR}/src)
-
-    add_subdirectory(${projd_SOURCE_DIR} ${projd_BINARY_DIR})
-  endif()
-
-A few key points should be noted in the above:
-
-- ``projB`` and ``projC`` define different content details for ``projD``,
-  but ``projA`` also defines a set of content details for ``projD``.
-  Because ``projA`` will define them first, the details from ``projB`` and
-  ``projC`` will not be used.  The override details defined by ``projA``
-  are not required to match either of those from ``projB`` or ``projC``, but
-  it is up to the higher level project to ensure that the details it does
-  define still make sense for the child projects.
-- In the ``projA`` call to :command:`FetchContent_MakeAvailable`, ``projD``
-  is listed ahead of ``projB`` and ``projC`` to ensure that ``projA`` is in
-  control of how ``projD`` is populated.
-- While ``projA`` defines content details for ``projE``, it does not need
-  to explicitly call ``FetchContent_MakeAvailable(projE)`` or
-  ``FetchContent_Populate(projD)`` itself.  Instead, it leaves that to the
-  child ``projB``.  For higher level projects, it is often enough to just
-  define the override content details and leave the actual population to the
-  child projects.  This saves repeating the same thing at each level of the
-  project hierarchy unnecessarily.
-
-
-Projects don't always need to add the populated content to the build.
-Sometimes the project just wants to make the downloaded content available at
-a predictable location.  The next example ensures that a set of standard
-company toolchain files (and potentially even the toolchain binaries
-themselves) is available early enough to be used for that same build.
-
-.. code-block:: cmake
-
-  cmake_minimum_required(VERSION 3.14)
-
-  include(FetchContent)
-  FetchContent_Declare(
-    mycom_toolchains
-    URL  https://intranet.mycompany.com//toolchains_1.3.2.tar.gz
-  )
-  FetchContent_MakeAvailable(mycom_toolchains)
-
-  project(CrossCompileExample)
-
-The project could be configured to use one of the downloaded toolchains like
-so:
-
-.. code-block:: shell
-
-  cmake -DCMAKE_TOOLCHAIN_FILE=_deps/mycom_toolchains-src/toolchain_arm.cmake /path/to/src
-
-When CMake processes the ``CMakeLists.txt`` file, it will download and unpack
-the tarball into ``_deps/mycompany_toolchains-src`` relative to the build
-directory.  The :variable:`CMAKE_TOOLCHAIN_FILE` variable is not used until
-the :command:`project` command is reached, at which point CMake looks for the
-named toolchain file relative to the build directory.  Because the tarball has
-already been downloaded and unpacked by then, the toolchain file will be in
-place, even the very first time that ``cmake`` is run in the build directory.
-
-Lastly, the following example demonstrates how one might download and unpack a
-firmware tarball using CMake's :manual:`script mode <cmake(1)>`.  The call to
-:command:`FetchContent_Populate` specifies all the content details and the
-unpacked firmware will be placed in a ``firmware`` directory below the
-current working directory.
-
-*getFirmware.cmake*:
-
-.. code-block:: cmake
-
-  # NOTE: Intended to be run in script mode with cmake -P
-  include(FetchContent)
-  FetchContent_Populate(
-    firmware
-    URL        https://mycompany.com/assets/firmware-1.23-arm.tar.gz
-    URL_HASH   MD5=68247684da89b608d466253762b0ff11
-    SOURCE_DIR firmware
-  )
-
-#]=======================================================================]
-
-#=======================================================================
-# Recording and retrieving content details for later population
-#=======================================================================
-
-# Internal use, projects must not call this directly. It is
-# intended for use by FetchContent_Declare() only.
-#
-# Sets a content-specific global property (not meant for use
-# outside of functions defined here in this file) which can later
-# be retrieved using __FetchContent_getSavedDetails() with just the
-# same content name. If there is already a value stored in the
-# property, it is left unchanged and this call has no effect.
-# This allows parent projects to define the content details,
-# overriding anything a child project may try to set (properties
-# are not cached between runs, so the first thing to set it in a
-# build will be in control).
-function(__FetchContent_declareDetails contentName)
-
-  string(TOLOWER ${contentName} contentNameLower)
-  set(propertyName "_FetchContent_${contentNameLower}_savedDetails")
-  get_property(alreadyDefined GLOBAL PROPERTY ${propertyName} DEFINED)
-  if(NOT alreadyDefined)
-    define_property(GLOBAL PROPERTY ${propertyName}
-      BRIEF_DOCS "Internal implementation detail of FetchContent_Populate()"
-      FULL_DOCS  "Details used by FetchContent_Populate() for ${contentName}"
-    )
-    set(__cmdArgs)
-    foreach(__item IN LISTS ARGN)
-      string(APPEND __cmdArgs " [==[${__item}]==]")
-    endforeach()
-    cmake_language(EVAL CODE
-      "set_property(GLOBAL PROPERTY ${propertyName} ${__cmdArgs})")
-  endif()
-
-endfunction()
-
-
-# Internal use, projects must not call this directly. It is
-# intended for use by the FetchContent_Declare() function.
-#
-# Retrieves details saved for the specified content in an
-# earlier call to __FetchContent_declareDetails().
-function(__FetchContent_getSavedDetails contentName outVar)
-
-  string(TOLOWER ${contentName} contentNameLower)
-  set(propertyName "_FetchContent_${contentNameLower}_savedDetails")
-  get_property(alreadyDefined GLOBAL PROPERTY ${propertyName} DEFINED)
-  if(NOT alreadyDefined)
-    message(FATAL_ERROR "No content details recorded for ${contentName}")
-  endif()
-  get_property(propertyValue GLOBAL PROPERTY ${propertyName})
-  set(${outVar} "${propertyValue}" PARENT_SCOPE)
-
-endfunction()
-
-
-# Saves population details of the content, sets defaults for the
-# SOURCE_DIR and BUILD_DIR.
-function(FetchContent_Declare contentName)
-
-  set(options "")
-  set(oneValueArgs SVN_REPOSITORY)
-  set(multiValueArgs "")
-
-  cmake_parse_arguments(PARSE_ARGV 1 ARG
-    "${options}" "${oneValueArgs}" "${multiValueArgs}")
-
-  unset(srcDirSuffix)
-  unset(svnRepoArgs)
-  if(ARG_SVN_REPOSITORY)
-    # Add a hash of the svn repository URL to the source dir. This works
-    # around the problem where if the URL changes, the download would
-    # fail because it tries to checkout/update rather than switch the
-    # old URL to the new one. We limit the hash to the first 7 characters
-    # so that the source path doesn't get overly long (which can be a
-    # problem on windows due to path length limits).
-    string(SHA1 urlSHA ${ARG_SVN_REPOSITORY})
-    string(SUBSTRING ${urlSHA} 0 7 urlSHA)
-    set(srcDirSuffix "-${urlSHA}")
-    set(svnRepoArgs  SVN_REPOSITORY ${ARG_SVN_REPOSITORY})
-  endif()
-
-  string(TOLOWER ${contentName} contentNameLower)
-
-  set(__argsQuoted)
-  foreach(__item IN LISTS ARG_UNPARSED_ARGUMENTS)
-    string(APPEND __argsQuoted " [==[${__item}]==]")
-  endforeach()
-  cmake_language(EVAL CODE "
-    __FetchContent_declareDetails(
-      ${contentNameLower}
-      SOURCE_DIR \"${FETCHCONTENT_BASE_DIR}/${contentNameLower}-src${srcDirSuffix}\"
-      BINARY_DIR \"${FETCHCONTENT_BASE_DIR}/${contentNameLower}-build\"
-      \${svnRepoArgs}
-      # List these last so they can override things we set above
-      ${__argsQuoted}
-    )"
-  )
-
-endfunction()
-
-
-#=======================================================================
-# Set/get whether the specified content has been populated yet.
-# The setter also records the source and binary dirs used.
-#=======================================================================
-
-# Internal use, projects must not call this directly. It is
-# intended for use by the FetchContent_Populate() function to
-# record when FetchContent_Populate() is called for a particular
-# content name.
-function(__FetchContent_setPopulated contentName sourceDir binaryDir)
-
-  string(TOLOWER ${contentName} contentNameLower)
-  set(prefix "_FetchContent_${contentNameLower}")
-
-  set(propertyName "${prefix}_sourceDir")
-  define_property(GLOBAL PROPERTY ${propertyName}
-    BRIEF_DOCS "Internal implementation detail of FetchContent_Populate()"
-    FULL_DOCS  "Details used by FetchContent_Populate() for ${contentName}"
-  )
-  set_property(GLOBAL PROPERTY ${propertyName} ${sourceDir})
-
-  set(propertyName "${prefix}_binaryDir")
-  define_property(GLOBAL PROPERTY ${propertyName}
-    BRIEF_DOCS "Internal implementation detail of FetchContent_Populate()"
-    FULL_DOCS  "Details used by FetchContent_Populate() for ${contentName}"
-  )
-  set_property(GLOBAL PROPERTY ${propertyName} ${binaryDir})
-
-  set(propertyName "${prefix}_populated")
-  define_property(GLOBAL PROPERTY ${propertyName}
-    BRIEF_DOCS "Internal implementation detail of FetchContent_Populate()"
-    FULL_DOCS  "Details used by FetchContent_Populate() for ${contentName}"
-  )
-  set_property(GLOBAL PROPERTY ${propertyName} True)
-
-endfunction()
-
-
-# Set variables in the calling scope for any of the retrievable
-# properties. If no specific properties are requested, variables
-# will be set for all retrievable properties.
-#
-# This function is intended to also be used by projects as the canonical
-# way to detect whether they should call FetchContent_Populate()
-# and pull the populated source into the build with add_subdirectory(),
-# if they are using the populated content in that way.
-function(FetchContent_GetProperties contentName)
-
-  string(TOLOWER ${contentName} contentNameLower)
-
-  set(options "")
-  set(oneValueArgs SOURCE_DIR BINARY_DIR POPULATED)
-  set(multiValueArgs "")
-
-  cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
-
-  if(NOT ARG_SOURCE_DIR AND
-     NOT ARG_BINARY_DIR AND
-     NOT ARG_POPULATED)
-    # No specific properties requested, provide them all
-    set(ARG_SOURCE_DIR ${contentNameLower}_SOURCE_DIR)
-    set(ARG_BINARY_DIR ${contentNameLower}_BINARY_DIR)
-    set(ARG_POPULATED  ${contentNameLower}_POPULATED)
-  endif()
-
-  set(prefix "_FetchContent_${contentNameLower}")
-
-  if(ARG_SOURCE_DIR)
-    set(propertyName "${prefix}_sourceDir")
-    get_property(value GLOBAL PROPERTY ${propertyName})
-    if(value)
-      set(${ARG_SOURCE_DIR} ${value} PARENT_SCOPE)
-    endif()
-  endif()
-
-  if(ARG_BINARY_DIR)
-    set(propertyName "${prefix}_binaryDir")
-    get_property(value GLOBAL PROPERTY ${propertyName})
-    if(value)
-      set(${ARG_BINARY_DIR} ${value} PARENT_SCOPE)
-    endif()
-  endif()
-
-  if(ARG_POPULATED)
-    set(propertyName "${prefix}_populated")
-    get_property(value GLOBAL PROPERTY ${propertyName} DEFINED)
-    set(${ARG_POPULATED} ${value} PARENT_SCOPE)
-  endif()
-
-endfunction()
-
-
-#=======================================================================
-# Performing the population
-#=======================================================================
-
-# The value of contentName will always have been lowercased by the caller.
-# All other arguments are assumed to be options that are understood by
-# ExternalProject_Add(), except for QUIET and SUBBUILD_DIR.
-function(__FetchContent_directPopulate contentName)
-
-  set(options
-      QUIET
-  )
-  set(oneValueArgs
-      SUBBUILD_DIR
-      SOURCE_DIR
-      BINARY_DIR
-      # We need special processing if DOWNLOAD_NO_EXTRACT is true
-      DOWNLOAD_NO_EXTRACT
-      # Prevent the following from being passed through
-      CONFIGURE_COMMAND
-      BUILD_COMMAND
-      INSTALL_COMMAND
-      TEST_COMMAND
-      # We force both of these to be ON since we are always executing serially
-      # and we want all steps to have access to the terminal in case they
-      # need input from the command line (e.g. ask for a private key password)
-      # or they want to provide timely progress. We silently absorb and
-      # discard these if they are set by the caller.
-      USES_TERMINAL_DOWNLOAD
-      USES_TERMINAL_UPDATE
-  )
-  set(multiValueArgs "")
-
-  cmake_parse_arguments(PARSE_ARGV 1 ARG
-    "${options}" "${oneValueArgs}" "${multiValueArgs}")
-
-  if(NOT ARG_SUBBUILD_DIR)
-    message(FATAL_ERROR "Internal error: SUBBUILD_DIR not set")
-  elseif(NOT IS_ABSOLUTE "${ARG_SUBBUILD_DIR}")
-    set(ARG_SUBBUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/${ARG_SUBBUILD_DIR}")
-  endif()
-
-  if(NOT ARG_SOURCE_DIR)
-    message(FATAL_ERROR "Internal error: SOURCE_DIR not set")
-  elseif(NOT IS_ABSOLUTE "${ARG_SOURCE_DIR}")
-    set(ARG_SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/${ARG_SOURCE_DIR}")
-  endif()
-
-  if(NOT ARG_BINARY_DIR)
-    message(FATAL_ERROR "Internal error: BINARY_DIR not set")
-  elseif(NOT IS_ABSOLUTE "${ARG_BINARY_DIR}")
-    set(ARG_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/${ARG_BINARY_DIR}")
-  endif()
-
-  # Ensure the caller can know where to find the source and build directories
-  # with some convenient variables. Doing this here ensures the caller sees
-  # the correct result in the case where the default values are overridden by
-  # the content details set by the project.
-  set(${contentName}_SOURCE_DIR "${ARG_SOURCE_DIR}" PARENT_SCOPE)
-  set(${contentName}_BINARY_DIR "${ARG_BINARY_DIR}" PARENT_SCOPE)
-
-  # The unparsed arguments may contain spaces, so build up ARG_EXTRA
-  # in such a way that it correctly substitutes into the generated
-  # CMakeLists.txt file with each argument quoted.
-  unset(ARG_EXTRA)
-  foreach(arg IN LISTS ARG_UNPARSED_ARGUMENTS)
-    set(ARG_EXTRA "${ARG_EXTRA} \"${arg}\"")
-  endforeach()
-
-  if(ARG_DOWNLOAD_NO_EXTRACT)
-    set(ARG_EXTRA "${ARG_EXTRA} DOWNLOAD_NO_EXTRACT YES")
-    set(__FETCHCONTENT_COPY_FILE
-"
-ExternalProject_Get_Property(${contentName}-populate DOWNLOADED_FILE)
-get_filename_component(dlFileName \"\${DOWNLOADED_FILE}\" NAME)
-
-ExternalProject_Add_Step(${contentName}-populate copyfile
-  COMMAND    \"${CMAKE_COMMAND}\" -E copy_if_different
-             \"<DOWNLOADED_FILE>\" \"${ARG_SOURCE_DIR}\"
-  DEPENDEES  patch
-  DEPENDERS  configure
-  BYPRODUCTS \"${ARG_SOURCE_DIR}/\${dlFileName}\"
-  COMMENT    \"Copying file to SOURCE_DIR\"
-)
-")
-  else()
-    unset(__FETCHCONTENT_COPY_FILE)
-  endif()
-
-  # Hide output if requested, but save it to a variable in case there's an
-  # error so we can show the output upon failure. When not quiet, don't
-  # capture the output to a variable because the user may want to see the
-  # output as it happens (e.g. progress during long downloads). Combine both
-  # stdout and stderr in the one capture variable so the output stays in order.
-  if (ARG_QUIET)
-    set(outputOptions
-        OUTPUT_VARIABLE capturedOutput
-        ERROR_VARIABLE  capturedOutput
-    )
-  else()
-    set(capturedOutput)
-    set(outputOptions)
-    message(STATUS "Populating ${contentName}")
-  endif()
-
-  if(CMAKE_GENERATOR)
-    set(subCMakeOpts "-G${CMAKE_GENERATOR}")
-    if(CMAKE_GENERATOR_PLATFORM)
-      list(APPEND subCMakeOpts "-A${CMAKE_GENERATOR_PLATFORM}")
-    endif()
-    if(CMAKE_GENERATOR_TOOLSET)
-      list(APPEND subCMakeOpts "-T${CMAKE_GENERATOR_TOOLSET}")
-    endif()
-
-    if(CMAKE_MAKE_PROGRAM)
-      list(APPEND subCMakeOpts "-DCMAKE_MAKE_PROGRAM:FILEPATH=${CMAKE_MAKE_PROGRAM}")
-    endif()
-
-  else()
-    # Likely we've been invoked via CMake's script mode where no
-    # generator is set (and hence CMAKE_MAKE_PROGRAM could not be
-    # trusted even if provided). We will have to rely on being
-    # able to find the default generator and build tool.
-    unset(subCMakeOpts)
-  endif()
-
-  if(DEFINED CMAKE_EP_GIT_REMOTE_UPDATE_STRATEGY)
-    list(APPEND subCMakeOpts
-      "-DCMAKE_EP_GIT_REMOTE_UPDATE_STRATEGY=${CMAKE_EP_GIT_REMOTE_UPDATE_STRATEGY}")
-  endif()
-
-  # Create and build a separate CMake project to carry out the population.
-  # If we've already previously done these steps, they will not cause
-  # anything to be updated, so extra rebuilds of the project won't occur.
-  # Make sure to pass through CMAKE_MAKE_PROGRAM in case the main project
-  # has this set to something not findable on the PATH.
-  configure_file("${CMAKE_CURRENT_FUNCTION_LIST_DIR}/FetchContent/CMakeLists.cmake.in"
-                 "${ARG_SUBBUILD_DIR}/CMakeLists.txt")
-  execute_process(
-    COMMAND ${CMAKE_COMMAND} ${subCMakeOpts} .
-    RESULT_VARIABLE result
-    ${outputOptions}
-    WORKING_DIRECTORY "${ARG_SUBBUILD_DIR}"
-  )
-  if(result)
-    if(capturedOutput)
-      message("${capturedOutput}")
-    endif()
-    message(FATAL_ERROR "CMake step for ${contentName} failed: ${result}")
-  endif()
-  execute_process(
-    COMMAND ${CMAKE_COMMAND} --build .
-    RESULT_VARIABLE result
-    ${outputOptions}
-    WORKING_DIRECTORY "${ARG_SUBBUILD_DIR}"
-  )
-  if(result)
-    if(capturedOutput)
-      message("${capturedOutput}")
-    endif()
-    message(FATAL_ERROR "Build step for ${contentName} failed: ${result}")
-  endif()
-
-endfunction()
-
-
-option(FETCHCONTENT_FULLY_DISCONNECTED   "Disables all attempts to download or update content and assumes source dirs already exist")
-option(FETCHCONTENT_UPDATES_DISCONNECTED "Enables UPDATE_DISCONNECTED behavior for all content population")
-option(FETCHCONTENT_QUIET                "Enables QUIET option for all content population" ON)
-set(FETCHCONTENT_BASE_DIR "${CMAKE_BINARY_DIR}/_deps" CACHE PATH "Directory under which to collect all populated content")
-
-# Populate the specified content using details stored from
-# an earlier call to FetchContent_Declare().
-function(FetchContent_Populate contentName)
-
-  if(NOT contentName)
-    message(FATAL_ERROR "Empty contentName not allowed for FetchContent_Populate()")
-  endif()
-
-  string(TOLOWER ${contentName} contentNameLower)
-
-  if(ARGN)
-    # This is the direct population form with details fully specified
-    # as part of the call, so we already have everything we need
-    __FetchContent_directPopulate(
-      ${contentNameLower}
-      SUBBUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/${contentNameLower}-subbuild"
-      SOURCE_DIR   "${CMAKE_CURRENT_BINARY_DIR}/${contentNameLower}-src"
-      BINARY_DIR   "${CMAKE_CURRENT_BINARY_DIR}/${contentNameLower}-build"
-      ${ARGN}  # Could override any of the above ..._DIR variables
-    )
-
-    # Pass source and binary dir variables back to the caller
-    set(${contentNameLower}_SOURCE_DIR "${${contentNameLower}_SOURCE_DIR}" PARENT_SCOPE)
-    set(${contentNameLower}_BINARY_DIR "${${contentNameLower}_BINARY_DIR}" PARENT_SCOPE)
-
-    # Don't set global properties, or record that we did this population, since
-    # this was a direct call outside of the normal declared details form.
-    # We only want to save values in the global properties for content that
-    # honours the hierarchical details mechanism so that projects are not
-    # robbed of the ability to override details set in nested projects.
-    return()
-  endif()
-
-  # No details provided, so assume they were saved from an earlier call
-  # to FetchContent_Declare(). Do a check that we haven't already
-  # populated this content before in case the caller forgot to check.
-  FetchContent_GetProperties(${contentName})
-  if(${contentNameLower}_POPULATED)
-    message(FATAL_ERROR "Content ${contentName} already populated in ${${contentNameLower}_SOURCE_DIR}")
-  endif()
-
-  string(TOUPPER ${contentName} contentNameUpper)
-  set(FETCHCONTENT_SOURCE_DIR_${contentNameUpper}
-      "${FETCHCONTENT_SOURCE_DIR_${contentNameUpper}}"
-      CACHE PATH "When not empty, overrides where to find pre-populated content for ${contentName}")
-
-  if(FETCHCONTENT_SOURCE_DIR_${contentNameUpper})
-    # The source directory has been explicitly provided in the cache,
-    # so no population is required
-    set(${contentNameLower}_SOURCE_DIR "${FETCHCONTENT_SOURCE_DIR_${contentNameUpper}}")
-    set(${contentNameLower}_BINARY_DIR "${FETCHCONTENT_BASE_DIR}/${contentNameLower}-build")
-
-  elseif(FETCHCONTENT_FULLY_DISCONNECTED)
-    # Bypass population and assume source is already there from a previous run
-    set(${contentNameLower}_SOURCE_DIR "${FETCHCONTENT_BASE_DIR}/${contentNameLower}-src")
-    set(${contentNameLower}_BINARY_DIR "${FETCHCONTENT_BASE_DIR}/${contentNameLower}-build")
-
-  else()
-    # Support both a global "disconnect all updates" and a per-content
-    # update test (either one being set disables updates for this content).
-    option(FETCHCONTENT_UPDATES_DISCONNECTED_${contentNameUpper}
-           "Enables UPDATE_DISCONNECTED behavior just for population of ${contentName}")
-    if(FETCHCONTENT_UPDATES_DISCONNECTED OR
-       FETCHCONTENT_UPDATES_DISCONNECTED_${contentNameUpper})
-      set(disconnectUpdates True)
-    else()
-      set(disconnectUpdates False)
-    endif()
-
-    if(FETCHCONTENT_QUIET)
-      set(quietFlag QUIET)
-    else()
-      unset(quietFlag)
-    endif()
-
-    __FetchContent_getSavedDetails(${contentName} contentDetails)
-    if("${contentDetails}" STREQUAL "")
-      message(FATAL_ERROR "No details have been set for content: ${contentName}")
-    endif()
-
-    set(__detailsQuoted)
-    foreach(__item IN LISTS contentDetails)
-      string(APPEND __detailsQuoted " [==[${__item}]==]")
-    endforeach()
-    cmake_language(EVAL CODE "
-      __FetchContent_directPopulate(
-        ${contentNameLower}
-        ${quietFlag}
-        UPDATE_DISCONNECTED ${disconnectUpdates}
-        SUBBUILD_DIR \"${FETCHCONTENT_BASE_DIR}/${contentNameLower}-subbuild\"
-        SOURCE_DIR   \"${FETCHCONTENT_BASE_DIR}/${contentNameLower}-src\"
-        BINARY_DIR   \"${FETCHCONTENT_BASE_DIR}/${contentNameLower}-build\"
-        # Put the saved details last so they can override any of the
-        # the options we set above (this can include SOURCE_DIR or
-        # BUILD_DIR)
-        ${__detailsQuoted}
-      )"
-    )
-  endif()
-
-  __FetchContent_setPopulated(
-    ${contentName}
-    ${${contentNameLower}_SOURCE_DIR}
-    ${${contentNameLower}_BINARY_DIR}
-  )
-
-  # Pass variables back to the caller. The variables passed back here
-  # must match what FetchContent_GetProperties() sets when it is called
-  # with just the content name.
-  set(${contentNameLower}_SOURCE_DIR "${${contentNameLower}_SOURCE_DIR}" PARENT_SCOPE)
-  set(${contentNameLower}_BINARY_DIR "${${contentNameLower}_BINARY_DIR}" PARENT_SCOPE)
-  set(${contentNameLower}_POPULATED  True PARENT_SCOPE)
-
-endfunction()
-
-# Arguments are assumed to be the names of dependencies that have been
-# declared previously and should be populated. It is not an error if
-# any of them have already been populated (they will just be skipped in
-# that case). The command is implemented as a macro so that the variables
-# defined by the FetchContent_GetProperties() and FetchContent_Populate()
-# calls will be available to the caller.
-macro(FetchContent_MakeAvailable)
-
-  foreach(contentName IN ITEMS ${ARGV})
-    string(TOLOWER ${contentName} contentNameLower)
-    FetchContent_GetProperties(${contentName})
-    if(NOT ${contentNameLower}_POPULATED)
-      FetchContent_Populate(${contentName})
-
-      # Only try to call add_subdirectory() if the populated content
-      # can be treated that way. Protecting the call with the check
-      # allows this function to be used for projects that just want
-      # to ensure the content exists, such as to provide content at
-      # a known location. We check the saved details for an optional
-      # SOURCE_SUBDIR which can be used in the same way as its meaning
-      # for ExternalProject. It won't matter if it was passed through
-      # to the ExternalProject sub-build, since it would have been
-      # ignored there.
-      set(__fc_srcdir "${${contentNameLower}_SOURCE_DIR}")
-      __FetchContent_getSavedDetails(${contentName} contentDetails)
-      if("${contentDetails}" STREQUAL "")
-        message(FATAL_ERROR "No details have been set for content: ${contentName}")
-      endif()
-      cmake_parse_arguments(__fc_arg "" "SOURCE_SUBDIR" "" ${contentDetails})
-      if(NOT "${__fc_arg_SOURCE_SUBDIR}" STREQUAL "")
-        string(APPEND __fc_srcdir "/${__fc_arg_SOURCE_SUBDIR}")
-      endif()
-
-      if(EXISTS ${__fc_srcdir}/CMakeLists.txt)
-        add_subdirectory(${__fc_srcdir} ${${contentNameLower}_BINARY_DIR})
-      endif()
-
-      unset(__fc_srcdir)
-    endif()
-  endforeach()
-
-endmacro()
diff --git a/share/cmake-3.18/Modules/FetchContent/CMakeLists.cmake.in b/share/cmake-3.18/Modules/FetchContent/CMakeLists.cmake.in
deleted file mode 100644
index 45e4df0..0000000
--- a/share/cmake-3.18/Modules/FetchContent/CMakeLists.cmake.in
+++ /dev/null
@@ -1,25 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-cmake_minimum_required(VERSION ${CMAKE_VERSION})
-
-# We name the project and the target for the ExternalProject_Add() call
-# to something that will highlight to the user what we are working on if
-# something goes wrong and an error message is produced.
-
-project(${contentName}-populate NONE)
-
-include(ExternalProject)
-ExternalProject_Add(${contentName}-populate
-                    ${ARG_EXTRA}
-                    SOURCE_DIR          "${ARG_SOURCE_DIR}"
-                    BINARY_DIR          "${ARG_BINARY_DIR}"
-                    CONFIGURE_COMMAND   ""
-                    BUILD_COMMAND       ""
-                    INSTALL_COMMAND     ""
-                    TEST_COMMAND        ""
-                    USES_TERMINAL_DOWNLOAD  YES
-                    USES_TERMINAL_UPDATE    YES
-)
-
-@__FETCHCONTENT_COPY_FILE@
diff --git a/share/cmake-3.18/Modules/FindALSA.cmake b/share/cmake-3.18/Modules/FindALSA.cmake
deleted file mode 100644
index 88e2681..0000000
--- a/share/cmake-3.18/Modules/FindALSA.cmake
+++ /dev/null
@@ -1,74 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindALSA
---------
-
-Find Advanced Linux Sound Architecture (ALSA)
-
-Find the alsa libraries (``asound``)
-
-IMPORTED Targets
-^^^^^^^^^^^^^^^^
-
-This module defines :prop_tgt:`IMPORTED` target ``ALSA::ALSA``, if
-ALSA has been found.
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-This module defines the following variables:
-
-``ALSA_FOUND``
-  True if ALSA_INCLUDE_DIR & ALSA_LIBRARY are found
-
-``ALSA_LIBRARIES``
-  List of libraries when using ALSA.
-
-``ALSA_INCLUDE_DIRS``
-  Where to find the ALSA headers.
-
-Cache variables
-^^^^^^^^^^^^^^^
-
-The following cache variables may also be set:
-
-``ALSA_INCLUDE_DIR``
-  the ALSA include directory
-
-``ALSA_LIBRARY``
-  the absolute path of the asound library
-#]=======================================================================]
-
-find_path(ALSA_INCLUDE_DIR NAMES alsa/asoundlib.h
-          DOC "The ALSA (asound) include directory"
-)
-
-find_library(ALSA_LIBRARY NAMES asound
-          DOC "The ALSA (asound) library"
-)
-
-if(ALSA_INCLUDE_DIR AND EXISTS "${ALSA_INCLUDE_DIR}/alsa/version.h")
-  file(STRINGS "${ALSA_INCLUDE_DIR}/alsa/version.h" alsa_version_str REGEX "^#define[\t ]+SND_LIB_VERSION_STR[\t ]+\".*\"")
-
-  string(REGEX REPLACE "^.*SND_LIB_VERSION_STR[\t ]+\"([^\"]*)\".*$" "\\1" ALSA_VERSION_STRING "${alsa_version_str}")
-  unset(alsa_version_str)
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(ALSA
-                                  REQUIRED_VARS ALSA_LIBRARY ALSA_INCLUDE_DIR
-                                  VERSION_VAR ALSA_VERSION_STRING)
-
-if(ALSA_FOUND)
-  set( ALSA_LIBRARIES ${ALSA_LIBRARY} )
-  set( ALSA_INCLUDE_DIRS ${ALSA_INCLUDE_DIR} )
-  if(NOT TARGET ALSA::ALSA)
-    add_library(ALSA::ALSA UNKNOWN IMPORTED)
-    set_target_properties(ALSA::ALSA PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${ALSA_INCLUDE_DIRS}")
-    set_property(TARGET ALSA::ALSA APPEND PROPERTY IMPORTED_LOCATION "${ALSA_LIBRARY}")
-  endif()
-endif()
-
-mark_as_advanced(ALSA_INCLUDE_DIR ALSA_LIBRARY)
diff --git a/share/cmake-3.18/Modules/FindArmadillo.cmake b/share/cmake-3.18/Modules/FindArmadillo.cmake
deleted file mode 100644
index 243b9e0..0000000
--- a/share/cmake-3.18/Modules/FindArmadillo.cmake
+++ /dev/null
@@ -1,131 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindArmadillo
--------------
-
-Find the Armadillo C++ library.
-Armadillo is a library for linear algebra & scientific computing.
-
-Using Armadillo:
-
-::
-
-  find_package(Armadillo REQUIRED)
-  include_directories(${ARMADILLO_INCLUDE_DIRS})
-  add_executable(foo foo.cc)
-  target_link_libraries(foo ${ARMADILLO_LIBRARIES})
-
-This module sets the following variables:
-
-::
-
-  ARMADILLO_FOUND - set to true if the library is found
-  ARMADILLO_INCLUDE_DIRS - list of required include directories
-  ARMADILLO_LIBRARIES - list of libraries to be linked
-  ARMADILLO_VERSION_MAJOR - major version number
-  ARMADILLO_VERSION_MINOR - minor version number
-  ARMADILLO_VERSION_PATCH - patch version number
-  ARMADILLO_VERSION_STRING - version number as a string (ex: "1.0.4")
-  ARMADILLO_VERSION_NAME - name of the version (ex: "Antipodean Antileech")
-#]=======================================================================]
-
-find_path(ARMADILLO_INCLUDE_DIR
-  NAMES armadillo
-  PATHS "$ENV{ProgramFiles}/Armadillo/include"
-  )
-mark_as_advanced(ARMADILLO_INCLUDE_DIR)
-
-if(ARMADILLO_INCLUDE_DIR)
-  # ------------------------------------------------------------------------
-  #  Extract version information from <armadillo>
-  # ------------------------------------------------------------------------
-
-  # WARNING: Early releases of Armadillo didn't have the arma_version.hpp file.
-  # (e.g. v.0.9.8-1 in ubuntu maverick packages (2001-03-15))
-  # If the file is missing, set all values to 0
-  set(ARMADILLO_VERSION_MAJOR 0)
-  set(ARMADILLO_VERSION_MINOR 0)
-  set(ARMADILLO_VERSION_PATCH 0)
-  set(ARMADILLO_VERSION_NAME "EARLY RELEASE")
-
-  if(EXISTS "${ARMADILLO_INCLUDE_DIR}/armadillo_bits/arma_version.hpp")
-
-    # Read and parse armdillo version header file for version number
-    file(STRINGS "${ARMADILLO_INCLUDE_DIR}/armadillo_bits/arma_version.hpp" _ARMA_HEADER_CONTENTS REGEX "#define ARMA_VERSION_[A-Z]+ ")
-    string(REGEX REPLACE ".*#define ARMA_VERSION_MAJOR ([0-9]+).*" "\\1" ARMADILLO_VERSION_MAJOR "${_ARMA_HEADER_CONTENTS}")
-    string(REGEX REPLACE ".*#define ARMA_VERSION_MINOR ([0-9]+).*" "\\1" ARMADILLO_VERSION_MINOR "${_ARMA_HEADER_CONTENTS}")
-    string(REGEX REPLACE ".*#define ARMA_VERSION_PATCH ([0-9]+).*" "\\1" ARMADILLO_VERSION_PATCH "${_ARMA_HEADER_CONTENTS}")
-
-    # WARNING: The number of spaces before the version name is not one.
-    string(REGEX REPLACE ".*#define ARMA_VERSION_NAME\ +\"([0-9a-zA-Z\ _-]+)\".*" "\\1" ARMADILLO_VERSION_NAME "${_ARMA_HEADER_CONTENTS}")
-
-  endif()
-
-  set(ARMADILLO_VERSION_STRING "${ARMADILLO_VERSION_MAJOR}.${ARMADILLO_VERSION_MINOR}.${ARMADILLO_VERSION_PATCH}")
-endif ()
-
-if(EXISTS "${ARMADILLO_INCLUDE_DIR}/armadillo_bits/config.hpp")
-  file(STRINGS "${ARMADILLO_INCLUDE_DIR}/armadillo_bits/config.hpp" _ARMA_CONFIG_CONTENTS REGEX "^#define ARMA_USE_[A-Z]+")
-  string(REGEX MATCH "ARMA_USE_WRAPPER" _ARMA_USE_WRAPPER "${_ARMA_CONFIG_CONTENTS}")
-  string(REGEX MATCH "ARMA_USE_LAPACK" _ARMA_USE_LAPACK "${_ARMA_CONFIG_CONTENTS}")
-  string(REGEX MATCH "ARMA_USE_BLAS" _ARMA_USE_BLAS "${_ARMA_CONFIG_CONTENTS}")
-  string(REGEX MATCH "ARMA_USE_ARPACK" _ARMA_USE_ARPACK "${_ARMA_CONFIG_CONTENTS}")
-  string(REGEX MATCH "ARMA_USE_HDF5" _ARMA_USE_HDF5 "${_ARMA_CONFIG_CONTENTS}")
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-
-# If _ARMA_USE_WRAPPER is set, then we just link to armadillo, but if it's not then we need support libraries instead
-set(_ARMA_SUPPORT_LIBRARIES)
-
-if(_ARMA_USE_WRAPPER)
-  # Link to the armadillo wrapper library.
-  find_library(ARMADILLO_LIBRARY
-    NAMES armadillo
-    PATHS
-      "$ENV{ProgramFiles}/Armadillo/lib"
-      "$ENV{ProgramFiles}/Armadillo/lib64"
-      "$ENV{ProgramFiles}/Armadillo"
-    )
-  mark_as_advanced(ARMADILLO_LIBRARY)
-  set(_ARMA_REQUIRED_VARS ARMADILLO_LIBRARY)
-else()
-  # Link directly to individual components.
-  set(ARMADILLO_LIBRARY "")
-  foreach(pkg
-      LAPACK
-      BLAS
-      ARPACK
-      HDF5
-      )
-    if(_ARMA_USE_${pkg})
-      find_package(${pkg} QUIET)
-      list(APPEND _ARMA_REQUIRED_VARS "${pkg}_FOUND")
-      if(${pkg}_FOUND)
-        list(APPEND _ARMA_SUPPORT_LIBRARIES ${${pkg}_LIBRARIES})
-      endif()
-    endif()
-  endforeach()
-endif()
-
-find_package_handle_standard_args(Armadillo
-  REQUIRED_VARS ARMADILLO_INCLUDE_DIR ${_ARMA_REQUIRED_VARS}
-  VERSION_VAR ARMADILLO_VERSION_STRING)
-
-if (ARMADILLO_FOUND)
-  set(ARMADILLO_INCLUDE_DIRS ${ARMADILLO_INCLUDE_DIR})
-  set(ARMADILLO_LIBRARIES ${ARMADILLO_LIBRARY} ${_ARMA_SUPPORT_LIBRARIES})
-endif ()
-
-# Clean up internal variables
-unset(_ARMA_REQUIRED_VARS)
-unset(_ARMA_SUPPORT_LIBRARIES)
-unset(_ARMA_USE_WRAPPER)
-unset(_ARMA_USE_LAPACK)
-unset(_ARMA_USE_BLAS)
-unset(_ARMA_USE_ARPACK)
-unset(_ARMA_USE_HDF5)
-unset(_ARMA_CONFIG_CONTENTS)
-unset(_ARMA_HEADER_CONTENTS)
diff --git a/share/cmake-3.18/Modules/FindBISON.cmake b/share/cmake-3.18/Modules/FindBISON.cmake
deleted file mode 100644
index 1e1a5a3..0000000
--- a/share/cmake-3.18/Modules/FindBISON.cmake
+++ /dev/null
@@ -1,297 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindBISON
----------
-
-Find ``bison`` executable and provide a macro to generate custom build rules.
-
-The module defines the following variables:
-
-``BISON_EXECUTABLE``
-  path to the ``bison`` program
-
-``BISON_VERSION``
-  version of ``bison``
-
-``BISON_FOUND``
-  "True" if the program was found
-
-The minimum required version of ``bison`` can be specified using the
-standard CMake syntax, e.g.  :command:`find_package(BISON 2.1.3)`.
-
-If ``bison`` is found, the module defines the macro::
-
-  BISON_TARGET(<Name> <YaccInput> <CodeOutput>
-               [COMPILE_FLAGS <flags>]
-               [DEFINES_FILE <file>]
-               [VERBOSE [<file>]]
-               [REPORT_FILE <file>]
-               )
-
-which will create a custom rule to generate a parser.  ``<YaccInput>`` is
-the path to a yacc file.  ``<CodeOutput>`` is the name of the source file
-generated by bison.  A header file is also be generated, and contains
-the token list.
-
-The options are:
-
-``COMPILE_FLAGS <flags>``
-  Specify flags to be added to the ``bison`` command line.
-
-``DEFINES_FILE <file>``
-  Specify a non-default header ``<file>`` to be generated by ``bison``.
-
-``VERBOSE [<file>]``
-  Tell ``bison`` to write a report file of the grammar and parser.
-  If ``<file>`` is given, it specifies path the report file is copied to.
-  ``[<file>]`` is left for backward compatibility of this module.
-  Use ``VERBOSE REPORT_FILE <file>``.
-
-``REPORT_FILE <file>``
-  Specify a non-default report ``<file>``, if generated.
-
-The macro defines the following variables:
-
-``BISON_<Name>_DEFINED``
-  ``True`` is the macro ran successfully
-
-``BISON_<Name>_INPUT``
-  The input source file, an alias for <YaccInput>
-
-``BISON_<Name>_OUTPUT_SOURCE``
-  The source file generated by bison
-
-``BISON_<Name>_OUTPUT_HEADER``
-  The header file generated by bison
-
-``BISON_<Name>_OUTPUTS``
-  All files generated by bison including the source, the header and the report
-
-``BISON_<Name>_COMPILE_FLAGS``
-  Options used in the ``bison`` command line
-
-Example usage:
-
-.. code-block:: cmake
-
-  find_package(BISON)
-  BISON_TARGET(MyParser parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser.cpp
-               DEFINES_FILE ${CMAKE_CURRENT_BINARY_DIR}/parser.h)
-  add_executable(Foo main.cpp ${BISON_MyParser_OUTPUTS})
-#]=======================================================================]
-
-find_program(BISON_EXECUTABLE NAMES bison win-bison win_bison DOC "path to the bison executable")
-mark_as_advanced(BISON_EXECUTABLE)
-
-if(BISON_EXECUTABLE)
-  # the bison commands should be executed with the C locale, otherwise
-  # the message (which are parsed) may be translated
-  set(_Bison_SAVED_LC_ALL "$ENV{LC_ALL}")
-  set(ENV{LC_ALL} C)
-
-  execute_process(COMMAND ${BISON_EXECUTABLE} --version
-    OUTPUT_VARIABLE BISON_version_output
-    ERROR_VARIABLE BISON_version_error
-    RESULT_VARIABLE BISON_version_result
-    OUTPUT_STRIP_TRAILING_WHITESPACE)
-
-  set(ENV{LC_ALL} ${_Bison_SAVED_LC_ALL})
-
-  if(NOT ${BISON_version_result} EQUAL 0)
-    message(SEND_ERROR "Command \"${BISON_EXECUTABLE} --version\" failed with output:\n${BISON_version_error}")
-  else()
-    # Bison++
-    if("${BISON_version_output}" MATCHES "^bison\\+\\+ Version ([^,]+)")
-      set(BISON_VERSION "${CMAKE_MATCH_1}")
-    # GNU Bison
-    elseif("${BISON_version_output}" MATCHES "^bison \\(GNU Bison\\) ([^\n]+)\n")
-      set(BISON_VERSION "${CMAKE_MATCH_1}")
-    elseif("${BISON_version_output}" MATCHES "^GNU Bison (version )?([^\n]+)")
-      set(BISON_VERSION "${CMAKE_MATCH_2}")
-    endif()
-  endif()
-
-  # internal macro
-  # sets BISON_TARGET_cmdopt
-  macro(BISON_TARGET_option_extraopts Options)
-    set(BISON_TARGET_cmdopt "")
-    set(BISON_TARGET_extraopts "${Options}")
-    separate_arguments(BISON_TARGET_extraopts)
-    list(APPEND BISON_TARGET_cmdopt ${BISON_TARGET_extraopts})
-  endmacro()
-
-  # internal macro
-  # sets BISON_TARGET_output_header and BISON_TARGET_cmdopt
-  macro(BISON_TARGET_option_defines BisonOutput Header)
-    if("${Header}" STREQUAL "")
-      # default header path generated by bison (see option -d)
-      string(REGEX REPLACE "^(.*)(\\.[^.]*)$" "\\2" _fileext "${BisonOutput}")
-      string(REPLACE "c" "h" _fileext ${_fileext})
-      string(REGEX REPLACE "^(.*)(\\.[^.]*)$" "\\1${_fileext}"
-          BISON_TARGET_output_header "${BisonOutput}")
-      list(APPEND BISON_TARGET_cmdopt "-d")
-    else()
-      set(BISON_TARGET_output_header "${Header}")
-      list(APPEND BISON_TARGET_cmdopt "--defines=${BISON_TARGET_output_header}")
-    endif()
-  endmacro()
-
-  # internal macro
-  # sets BISON_TARGET_verbose_file and BISON_TARGET_cmdopt
-  macro(BISON_TARGET_option_report_file BisonOutput ReportFile)
-    if("${ReportFile}" STREQUAL "")
-      get_filename_component(BISON_TARGET_output_path "${BisonOutput}" PATH)
-      get_filename_component(BISON_TARGET_output_name "${BisonOutput}" NAME_WE)
-      set(BISON_TARGET_verbose_file
-        "${BISON_TARGET_output_path}/${BISON_TARGET_output_name}.output")
-    else()
-      set(BISON_TARGET_verbose_file "${ReportFile}")
-      list(APPEND BISON_TARGET_cmdopt "--report-file=${BISON_TARGET_verbose_file}")
-    endif()
-    if(NOT IS_ABSOLUTE "${BISON_TARGET_verbose_file}")
-      cmake_policy(GET CMP0088 _BISON_CMP0088
-        PARENT_SCOPE # undocumented, do not use outside of CMake
-        )
-      if("x${_BISON_CMP0088}x" STREQUAL "xNEWx")
-        set(BISON_TARGET_verbose_file "${CMAKE_CURRENT_BINARY_DIR}/${BISON_TARGET_verbose_file}")
-      else()
-        set(BISON_TARGET_verbose_file "${CMAKE_CURRENT_SOURCE_DIR}/${BISON_TARGET_verbose_file}")
-      endif()
-      unset(_BISON_CMP0088)
-    endif()
-  endmacro()
-
-  # internal macro
-  # adds a custom command and sets
-  #   BISON_TARGET_cmdopt, BISON_TARGET_extraoutputs
-  macro(BISON_TARGET_option_verbose Name BisonOutput filename)
-    cmake_policy(GET CMP0088 _BISON_CMP0088
-        PARENT_SCOPE # undocumented, do not use outside of CMake
-        )
-    set(_BISON_WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
-    if("x${_BISON_CMP0088}x" STREQUAL "xNEWx")
-      set(_BISON_WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
-    endif()
-    unset(_BISON_CMP0088)
-
-    list(APPEND BISON_TARGET_cmdopt "--verbose")
-    list(APPEND BISON_TARGET_outputs
-      "${BISON_TARGET_verbose_file}")
-    if (NOT "${filename}" STREQUAL "")
-      if(IS_ABSOLUTE "${filename}")
-        set(BISON_TARGET_verbose_extra_file "${filename}")
-      else()
-        set(BISON_TARGET_verbose_extra_file "${_BISON_WORKING_DIRECTORY}/${filename}")
-      endif()
-
-      add_custom_command(OUTPUT ${BISON_TARGET_verbose_extra_file}
-        COMMAND ${CMAKE_COMMAND} -E copy
-        "${BISON_TARGET_verbose_file}"
-        "${filename}"
-        VERBATIM
-        DEPENDS
-        "${BISON_TARGET_verbose_file}"
-        COMMENT "[BISON][${Name}] Copying bison verbose table to ${filename}"
-        WORKING_DIRECTORY ${_BISON_WORKING_DIRECTORY})
-      list(APPEND BISON_TARGET_extraoutputs
-        "${BISON_TARGET_verbose_extra_file}")
-      unset(BISON_TARGET_verbose_extra_file)
-      unset(_BISON_WORKING_DIRECTORY)
-    endif()
-  endmacro()
-
-  #============================================================
-  # BISON_TARGET (public macro)
-  #============================================================
-  #
-  macro(BISON_TARGET Name BisonInput BisonOutput)
-    set(BISON_TARGET_outputs "${BisonOutput}")
-    set(BISON_TARGET_extraoutputs "")
-
-    # Parsing parameters
-    set(BISON_TARGET_PARAM_OPTIONS
-      )
-    set(BISON_TARGET_PARAM_ONE_VALUE_KEYWORDS
-      COMPILE_FLAGS
-      DEFINES_FILE
-      REPORT_FILE
-      )
-    set(BISON_TARGET_PARAM_MULTI_VALUE_KEYWORDS
-      VERBOSE
-      )
-    cmake_parse_arguments(
-        BISON_TARGET_ARG
-        "${BISON_TARGET_PARAM_OPTIONS}"
-        "${BISON_TARGET_PARAM_ONE_VALUE_KEYWORDS}"
-        "${BISON_TARGET_PARAM_MULTI_VALUE_KEYWORDS}"
-        ${ARGN}
-    )
-
-    if(NOT "${BISON_TARGET_ARG_UNPARSED_ARGUMENTS}" STREQUAL "")
-      message(SEND_ERROR "Usage")
-    elseif("${BISON_TARGET_ARG_VERBOSE}" MATCHES ";")
-      # [VERBOSE [<file>] hack: <file> is non-multi value by usage
-      message(SEND_ERROR "Usage")
-    else()
-
-      BISON_TARGET_option_extraopts("${BISON_TARGET_ARG_COMPILE_FLAGS}")
-      BISON_TARGET_option_defines("${BisonOutput}" "${BISON_TARGET_ARG_DEFINES_FILE}")
-      BISON_TARGET_option_report_file("${BisonOutput}" "${BISON_TARGET_ARG_REPORT_FILE}")
-      if(NOT "${BISON_TARGET_ARG_VERBOSE}" STREQUAL "")
-        BISON_TARGET_option_verbose(${Name} ${BisonOutput} "${BISON_TARGET_ARG_VERBOSE}")
-      else()
-        # [VERBOSE [<file>]] is used with no argument or is not used
-        set(BISON_TARGET_args "${ARGN}")
-        list(FIND BISON_TARGET_args "VERBOSE" BISON_TARGET_args_indexof_verbose)
-        if(${BISON_TARGET_args_indexof_verbose} GREATER -1)
-          # VERBOSE is used without <file>
-          BISON_TARGET_option_verbose(${Name} ${BisonOutput} "")
-        endif()
-      endif()
-
-      list(APPEND BISON_TARGET_outputs "${BISON_TARGET_output_header}")
-
-      cmake_policy(GET CMP0088 _BISON_CMP0088
-        PARENT_SCOPE # undocumented, do not use outside of CMake
-        )
-      set(_BISON_WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
-      set(_BisonInput "${BisonInput}")
-      if("x${_BISON_CMP0088}x" STREQUAL "xNEWx")
-        set(_BISON_WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
-        if(NOT IS_ABSOLUTE "${_BisonInput}")
-          set(_BisonInput "${CMAKE_CURRENT_SOURCE_DIR}/${_BisonInput}")
-        endif()
-      endif()
-      unset(_BISON_CMP0088)
-
-      add_custom_command(OUTPUT ${BISON_TARGET_outputs}
-        COMMAND ${BISON_EXECUTABLE} ${BISON_TARGET_cmdopt} -o ${BisonOutput} ${_BisonInput}
-        VERBATIM
-        DEPENDS ${_BisonInput}
-        COMMENT "[BISON][${Name}] Building parser with bison ${BISON_VERSION}"
-        WORKING_DIRECTORY ${_BISON_WORKING_DIRECTORY})
-
-      unset(_BISON_WORKING_DIRECTORY)
-
-      # define target variables
-      set(BISON_${Name}_DEFINED TRUE)
-      set(BISON_${Name}_INPUT ${_BisonInput})
-      set(BISON_${Name}_OUTPUTS ${BISON_TARGET_outputs} ${BISON_TARGET_extraoutputs})
-      set(BISON_${Name}_COMPILE_FLAGS ${BISON_TARGET_cmdopt})
-      set(BISON_${Name}_OUTPUT_SOURCE "${BisonOutput}")
-      set(BISON_${Name}_OUTPUT_HEADER "${BISON_TARGET_output_header}")
-
-      unset(_BisonInput)
-
-    endif()
-  endmacro()
-  #
-  #============================================================
-
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(BISON REQUIRED_VARS  BISON_EXECUTABLE
-                                        VERSION_VAR BISON_VERSION)
diff --git a/share/cmake-3.18/Modules/FindBLAS.cmake b/share/cmake-3.18/Modules/FindBLAS.cmake
deleted file mode 100644
index 60f178b..0000000
--- a/share/cmake-3.18/Modules/FindBLAS.cmake
+++ /dev/null
@@ -1,959 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindBLAS
---------
-
-Find Basic Linear Algebra Subprograms (BLAS) library
-
-This module finds an installed Fortran library that implements the
-BLAS linear-algebra interface (see http://www.netlib.org/blas/).
-
-The approach follows that taken for the ``autoconf`` macro file,
-``acx_blas.m4`` (distributed at
-http://ac-archive.sourceforge.net/ac-archive/acx_blas.html).
-
-Input Variables
-^^^^^^^^^^^^^^^
-
-The following variables may be set to influence this module's behavior:
-
-``BLA_STATIC``
-  if ``ON`` use static linkage
-
-``BLA_VENDOR``
-  If set, checks only the specified vendor, if not set checks all the
-  possibilities.  List of vendors valid in this module:
-
-  * ``Goto``
-  * ``OpenBLAS``
-  * ``FLAME``
-  * ``ATLAS PhiPACK``
-  * ``CXML``
-  * ``DXML``
-  * ``SunPerf``
-  * ``SCSL``
-  * ``SGIMATH``
-  * ``IBMESSL``
-  * ``Intel10_32`` (intel mkl v10 32 bit)
-  * ``Intel10_64lp`` (intel mkl v10+ 64 bit, threaded code, lp64 model)
-  * ``Intel10_64lp_seq`` (intel mkl v10+ 64 bit, sequential code, lp64 model)
-  * ``Intel10_64ilp`` (intel mkl v10+ 64 bit, threaded code, ilp64 model)
-  * ``Intel10_64ilp_seq`` (intel mkl v10+ 64 bit, sequential code, ilp64 model)
-  * ``Intel10_64_dyn`` (intel mkl v10+ 64 bit, single dynamic library)
-  * ``Intel`` (obsolete versions of mkl 32 and 64 bit)
-  * ``ACML``
-  * ``ACML_MP``
-  * ``ACML_GPU``
-  * ``Apple``
-  * ``NAS``
-  * ``Arm``
-  * ``Arm_mp``
-  * ``Arm_ilp64``
-  * ``Arm_ilp64_mp``
-  * ``Generic``
-
-``BLA_F95``
-  if ``ON`` tries to find the BLAS95 interfaces
-
-``BLA_PREFER_PKGCONFIG``
-  if set ``pkg-config`` will be used to search for a BLAS library first
-  and if one is found that is preferred
-
-Imported targets
-^^^^^^^^^^^^^^^^
-
-This module defines the following :prop_tgt:`IMPORTED` target:
-
-``BLAS::BLAS``
-  The libraries to use for BLAS, if found.
-
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-This module defines the following variables:
-
-``BLAS_FOUND``
-  library implementing the BLAS interface is found
-``BLAS_LINKER_FLAGS``
-  uncached list of required linker flags (excluding ``-l`` and ``-L``).
-``BLAS_LIBRARIES``
-  uncached list of libraries (using full path name) to link against
-  to use BLAS (may be empty if compiler implicitly links BLAS)
-``BLAS95_LIBRARIES``
-  uncached list of libraries (using full path name) to link against
-  to use BLAS95 interface
-``BLAS95_FOUND``
-  library implementing the BLAS95 interface is found
-
-.. note::
-
-  C, CXX or Fortran must be enabled to detect a BLAS library.
-  C or CXX must be enabled to use Intel Math Kernel Library (MKL).
-
-  For example, to use Intel MKL libraries and/or Intel compiler:
-
-  .. code-block:: cmake
-
-    set(BLA_VENDOR Intel10_64lp)
-    find_package(BLAS)
-
-Hints
-^^^^^
-
-Set the ``MKLROOT`` environment variable to a directory that contains an MKL
-installation, or add the directory to the dynamic library loader environment
-variable for your platform (``LIB``, ``DYLD_LIBRARY_PATH`` or
-``LD_LIBRARY_PATH``).
-
-#]=======================================================================]
-
-# Check the language being used
-if(NOT (CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED OR CMAKE_Fortran_COMPILER_LOADED))
-  if(BLAS_FIND_REQUIRED)
-    message(FATAL_ERROR "FindBLAS requires Fortran, C, or C++ to be enabled.")
-  else()
-    message(STATUS "Looking for BLAS... - NOT found (Unsupported languages)")
-    return()
-  endif()
-endif()
-
-function(_add_blas_target)
-  if(NOT TARGET BLAS::BLAS)
-    add_library(BLAS::BLAS INTERFACE IMPORTED)
-    if(BLAS_LIBRARIES)
-      set_target_properties(BLAS::BLAS PROPERTIES
-        INTERFACE_LINK_LIBRARIES "${BLAS_LIBRARIES}"
-      )
-    endif()
-  endif()
-endfunction()
-
-if(CMAKE_Fortran_COMPILER_LOADED)
-  include(${CMAKE_CURRENT_LIST_DIR}/CheckFortranFunctionExists.cmake)
-else()
-  include(${CMAKE_CURRENT_LIST_DIR}/CheckFunctionExists.cmake)
-endif()
-include(${CMAKE_CURRENT_LIST_DIR}/CMakePushCheckState.cmake)
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-cmake_push_check_state()
-set(CMAKE_REQUIRED_QUIET ${BLAS_FIND_QUIETLY})
-
-if(BLA_PREFER_PKGCONFIG)
-  find_package(PkgConfig)
-  pkg_check_modules(PKGC_BLAS blas)
-  if(PKGC_BLAS_FOUND)
-    set(BLAS_FOUND ${PKGC_BLAS_FOUND})
-    set(BLAS_LIBRARIES "${PKGC_BLAS_LINK_LIBRARIES}")
-    _add_blas_target()
-    return()
-  endif()
-endif()
-
-set(_blas_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
-if(BLA_STATIC)
-  if(WIN32)
-    set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES})
-  else()
-    set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
-  endif()
-else()
-  if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
-    # for ubuntu's libblas3gf and liblapack3gf packages
-    set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES} .so.3gf)
-  endif()
-endif()
-
-# TODO: move this stuff to a separate module
-
-macro(CHECK_BLAS_LIBRARIES LIBRARIES _prefix _name _flags _list _threadlibs _addlibdir _subdirs)
-  # This macro checks for the existence of the combination of fortran libraries
-  # given by _list.  If the combination is found, this macro checks (using the
-  # Check_Fortran_Function_Exists macro) whether can link against that library
-  # combination using the name of a routine given by _name using the linker
-  # flags given by _flags.  If the combination of libraries is found and passes
-  # the link test, LIBRARIES is set to the list of complete library paths that
-  # have been found.  Otherwise, LIBRARIES is set to FALSE.
-
-  # N.B. _prefix is the prefix applied to the names of all cached variables that
-  # are generated internally and marked advanced by this macro.
-  # _addlibdir is a list of additional search paths. _subdirs is a list of path
-  # suffixes to be used by find_library().
-
-  set(_libraries_work TRUE)
-  set(${LIBRARIES})
-  set(_combined_name)
-
-  set(_extaddlibdir "${_addlibdir}")
-  if(WIN32)
-    list(APPEND _extaddlibdir ENV LIB)
-  elseif(APPLE)
-    list(APPEND _extaddlibdir ENV DYLD_LIBRARY_PATH)
-  else()
-    list(APPEND _extaddlibdir ENV LD_LIBRARY_PATH)
-  endif()
-  list(APPEND _extaddlibdir "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
-
-  foreach(_library ${_list})
-    if(_library MATCHES "^-Wl,--(start|end)-group$")
-      # Respect linker flags like --start/end-group (required by MKL)
-      set(${LIBRARIES} ${${LIBRARIES}} "${_library}")
-    else()
-      set(_combined_name ${_combined_name}_${_library})
-      if(NOT "${_threadlibs}" STREQUAL "")
-        set(_combined_name ${_combined_name}_threadlibs)
-      endif()
-      if(_libraries_work)
-        find_library(${_prefix}_${_library}_LIBRARY
-          NAMES ${_library}
-          PATHS ${_extaddlibdir}
-          PATH_SUFFIXES ${_subdirs}
-        )
-        #message("DEBUG: find_library(${_library}) got ${${_prefix}_${_library}_LIBRARY}")
-        mark_as_advanced(${_prefix}_${_library}_LIBRARY)
-        set(${LIBRARIES} ${${LIBRARIES}} ${${_prefix}_${_library}_LIBRARY})
-        set(_libraries_work ${${_prefix}_${_library}_LIBRARY})
-      endif()
-    endif()
-  endforeach()
-
-  if(_libraries_work)
-    # Test this combination of libraries.
-    set(CMAKE_REQUIRED_LIBRARIES ${_flags} ${${LIBRARIES}} ${_threadlibs})
-    #message("DEBUG: CMAKE_REQUIRED_LIBRARIES = ${CMAKE_REQUIRED_LIBRARIES}")
-    if(CMAKE_Fortran_COMPILER_LOADED)
-      check_fortran_function_exists("${_name}" ${_prefix}${_combined_name}_WORKS)
-    else()
-      check_function_exists("${_name}_" ${_prefix}${_combined_name}_WORKS)
-    endif()
-    set(CMAKE_REQUIRED_LIBRARIES)
-    set(_libraries_work ${${_prefix}${_combined_name}_WORKS})
-  endif()
-
-  if(_libraries_work)
-    if("${_list}" STREQUAL "")
-      set(${LIBRARIES} "${LIBRARIES}-PLACEHOLDER-FOR-EMPTY-LIBRARIES")
-    else()
-      set(${LIBRARIES} ${${LIBRARIES}} ${_threadlibs})
-    endif()
-  else()
-    set(${LIBRARIES} FALSE)
-  endif()
-  #message("DEBUG: ${LIBRARIES} = ${${LIBRARIES}}")
-endmacro()
-
-set(BLAS_LINKER_FLAGS)
-set(BLAS_LIBRARIES)
-set(BLAS95_LIBRARIES)
-if(NOT $ENV{BLA_VENDOR} STREQUAL "")
-  set(BLA_VENDOR $ENV{BLA_VENDOR})
-else()
-  if(NOT BLA_VENDOR)
-    set(BLA_VENDOR "All")
-  endif()
-endif()
-
-# Implicitly linked BLAS libraries?
-if(BLA_VENDOR STREQUAL "All")
-  if(NOT BLAS_LIBRARIES)
-    check_blas_libraries(
-      BLAS_LIBRARIES
-      BLAS
-      sgemm
-      ""
-      ""
-      ""
-      ""
-      ""
-      )
-  endif()
-endif()
-
-# BLAS in the Intel MKL 10+ library?
-if(BLA_VENDOR MATCHES "Intel" OR BLA_VENDOR STREQUAL "All")
-  if(NOT BLAS_LIBRARIES)
-    if(CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED)
-      # System-specific settings
-      if(WIN32)
-        if(BLA_STATIC)
-          set(BLAS_mkl_DLL_SUFFIX "")
-        else()
-          set(BLAS_mkl_DLL_SUFFIX "_dll")
-        endif()
-      else()
-        if(BLA_STATIC)
-          set(BLAS_mkl_START_GROUP "-Wl,--start-group")
-          set(BLAS_mkl_END_GROUP "-Wl,--end-group")
-        else()
-          set(BLAS_mkl_START_GROUP "")
-          set(BLAS_mkl_END_GROUP "")
-        endif()
-        # Switch to GNU Fortran support layer if needed (but not on Apple, where MKL does not provide it)
-        if(CMAKE_Fortran_COMPILER_LOADED AND CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" AND NOT APPLE)
-            set(BLAS_mkl_INTFACE "gf")
-            set(BLAS_mkl_THREADING "gnu")
-            set(BLAS_mkl_OMP "gomp")
-        else()
-            set(BLAS_mkl_INTFACE "intel")
-            set(BLAS_mkl_THREADING "intel")
-            set(BLAS_mkl_OMP "iomp5")
-        endif()
-        set(BLAS_mkl_LM "-lm")
-        set(BLAS_mkl_LDL "-ldl")
-      endif()
-
-      if(BLAS_FIND_QUIETLY OR NOT BLAS_FIND_REQUIRED)
-        find_package(Threads)
-      else()
-        find_package(Threads REQUIRED)
-      endif()
-
-      if(BLA_VENDOR MATCHES "_64ilp")
-        set(BLAS_mkl_ILP_MODE "ilp64")
-      else()
-        set(BLAS_mkl_ILP_MODE "lp64")
-      endif()
-
-      set(BLAS_SEARCH_LIBS "")
-
-      if(BLA_F95)
-        set(BLAS_mkl_SEARCH_SYMBOL "sgemm_f95")
-        set(_LIBRARIES BLAS95_LIBRARIES)
-        if(WIN32)
-          # Find the main file (32-bit or 64-bit)
-          set(BLAS_SEARCH_LIBS_WIN_MAIN "")
-          if(BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All")
-            list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN
-              "mkl_blas95${BLAS_mkl_DLL_SUFFIX} mkl_intel_c${BLAS_mkl_DLL_SUFFIX}")
-          endif()
-
-          if(BLA_VENDOR MATCHES "^Intel10_64i?lp" OR BLA_VENDOR STREQUAL "All")
-            list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN
-              "mkl_blas95_${BLAS_mkl_ILP_MODE}${BLAS_mkl_DLL_SUFFIX} mkl_intel_${BLAS_mkl_ILP_MODE}${BLAS_mkl_DLL_SUFFIX}")
-          endif()
-
-          # Add threading/sequential libs
-          set(BLAS_SEARCH_LIBS_WIN_THREAD "")
-          if(BLA_VENDOR MATCHES "^Intel10_64i?lp$" OR BLA_VENDOR STREQUAL "All")
-            # old version
-            list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
-              "libguide40 mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}")
-            # mkl >= 10.3
-            list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
-              "libiomp5md mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}")
-          endif()
-          if(BLA_VENDOR MATCHES "^Intel10_64i?lp_seq$" OR BLA_VENDOR STREQUAL "All")
-            list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
-              "mkl_sequential${BLAS_mkl_DLL_SUFFIX}")
-          endif()
-
-          # Cartesian product of the above
-          foreach(MAIN ${BLAS_SEARCH_LIBS_WIN_MAIN})
-            foreach(THREAD ${BLAS_SEARCH_LIBS_WIN_THREAD})
-              list(APPEND BLAS_SEARCH_LIBS
-                "${MAIN} ${THREAD} mkl_core${BLAS_mkl_DLL_SUFFIX}")
-            endforeach()
-          endforeach()
-        else()
-          if(BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All")
-            # old version
-            list(APPEND BLAS_SEARCH_LIBS
-              "mkl_blas95 mkl_${BLAS_mkl_INTFACE} mkl_${BLAS_mkl_THREADING}_thread mkl_core guide")
-
-            # mkl >= 10.3
-            list(APPEND BLAS_SEARCH_LIBS
-              "${BLAS_mkl_START_GROUP} mkl_blas95 mkl_${BLAS_mkl_INTFACE} mkl_${BLAS_mkl_THREADING}_thread mkl_core ${BLAS_mkl_END_GROUP} ${BLAS_mkl_OMP}")
-          endif()
-          if(BLA_VENDOR MATCHES "^Intel10_64i?lp$" OR BLA_VENDOR STREQUAL "All")
-            # old version
-            list(APPEND BLAS_SEARCH_LIBS
-              "mkl_blas95 mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_THREADING}_thread mkl_core guide")
-
-            # mkl >= 10.3
-            list(APPEND BLAS_SEARCH_LIBS
-              "${BLAS_mkl_START_GROUP} mkl_blas95_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_THREADING}_thread mkl_core ${BLAS_mkl_END_GROUP} ${BLAS_mkl_OMP}")
-          endif()
-          if(BLA_VENDOR MATCHES "^Intel10_64i?lp_seq$" OR BLA_VENDOR STREQUAL "All")
-            list(APPEND BLAS_SEARCH_LIBS
-              "${BLAS_mkl_START_GROUP} mkl_blas95_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_sequential mkl_core ${BLAS_mkl_END_GROUP}")
-          endif()
-        endif()
-      else()
-        set(BLAS_mkl_SEARCH_SYMBOL sgemm)
-        set(_LIBRARIES BLAS_LIBRARIES)
-        if(WIN32)
-          # Find the main file (32-bit or 64-bit)
-          set(BLAS_SEARCH_LIBS_WIN_MAIN "")
-          if(BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All")
-            list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN
-              "mkl_intel_c${BLAS_mkl_DLL_SUFFIX}")
-          endif()
-          if(BLA_VENDOR MATCHES "^Intel10_64i?lp" OR BLA_VENDOR STREQUAL "All")
-            list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN
-              "mkl_intel_${BLAS_mkl_ILP_MODE}${BLAS_mkl_DLL_SUFFIX}")
-          endif()
-
-          # Add threading/sequential libs
-          set(BLAS_SEARCH_LIBS_WIN_THREAD "")
-          if(BLA_VENDOR MATCHES "^Intel10_64i?lp$" OR BLA_VENDOR STREQUAL "All")
-            # old version
-            list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
-              "libguide40 mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}")
-            # mkl >= 10.3
-            list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
-              "libiomp5md mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}")
-          endif()
-          if(BLA_VENDOR MATCHES "^Intel10_64i?lp_seq$" OR BLA_VENDOR STREQUAL "All")
-            list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
-              "mkl_sequential${BLAS_mkl_DLL_SUFFIX}")
-          endif()
-
-          # Cartesian product of the above
-          foreach(MAIN ${BLAS_SEARCH_LIBS_WIN_MAIN})
-            foreach(THREAD ${BLAS_SEARCH_LIBS_WIN_THREAD})
-              list(APPEND BLAS_SEARCH_LIBS
-                "${MAIN} ${THREAD} mkl_core${BLAS_mkl_DLL_SUFFIX}")
-            endforeach()
-          endforeach()
-        else()
-          if(BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All")
-            # old version
-            list(APPEND BLAS_SEARCH_LIBS
-              "mkl_${BLAS_mkl_INTFACE} mkl_${BLAS_mkl_THREADING}_thread mkl_core guide")
-
-            # mkl >= 10.3
-            list(APPEND BLAS_SEARCH_LIBS
-              "${BLAS_mkl_START_GROUP} mkl_${BLAS_mkl_INTFACE} mkl_${BLAS_mkl_THREADING}_thread mkl_core ${BLAS_mkl_END_GROUP} ${BLAS_mkl_OMP}")
-          endif()
-          if(BLA_VENDOR MATCHES "^Intel10_64i?lp$" OR BLA_VENDOR STREQUAL "All")
-            # old version
-            list(APPEND BLAS_SEARCH_LIBS
-              "mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_THREADING}_thread mkl_core guide")
-
-            # mkl >= 10.3
-            list(APPEND BLAS_SEARCH_LIBS
-              "${BLAS_mkl_START_GROUP} mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_THREADING}_thread mkl_core ${BLAS_mkl_END_GROUP} ${BLAS_mkl_OMP}")
-          endif()
-          if(BLA_VENDOR MATCHES "^Intel10_64i?lp_seq$" OR BLA_VENDOR STREQUAL "All")
-            list(APPEND BLAS_SEARCH_LIBS
-              "${BLAS_mkl_START_GROUP} mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_sequential mkl_core ${BLAS_mkl_END_GROUP}")
-          endif()
-
-          #older vesions of intel mkl libs
-          if(BLA_VENDOR STREQUAL "Intel" OR BLA_VENDOR STREQUAL "All")
-            list(APPEND BLAS_SEARCH_LIBS
-              "mkl")
-            list(APPEND BLAS_SEARCH_LIBS
-              "mkl_ia32")
-            list(APPEND BLAS_SEARCH_LIBS
-              "mkl_em64t")
-          endif()
-        endif()
-      endif()
-
-      if(BLA_VENDOR MATCHES "^Intel10_64_dyn$" OR BLA_VENDOR STREQUAL "All")
-        # mkl >= 10.3 with single dynamic library
-        list(APPEND BLAS_SEARCH_LIBS
-          "mkl_rt")
-      endif()
-
-      # MKL uses a multitude of partially platform-specific subdirectories:
-      if(BLA_VENDOR STREQUAL "Intel10_32")
-        set(BLAS_mkl_ARCH_NAME "ia32")
-      else()
-        set(BLAS_mkl_ARCH_NAME "intel64")
-      endif()
-      if(WIN32)
-        set(BLAS_mkl_OS_NAME "win")
-      elseif(APPLE)
-        set(BLAS_mkl_OS_NAME "mac")
-      else()
-        set(BLAS_mkl_OS_NAME "lin")
-      endif()
-      if(DEFINED ENV{MKLROOT})
-        file(TO_CMAKE_PATH "$ENV{MKLROOT}" BLAS_mkl_MKLROOT)
-        # If MKLROOT points to the subdirectory 'mkl', use the parent directory instead
-        # so we can better detect other relevant libraries in 'compiler' or 'tbb':
-        get_filename_component(BLAS_mkl_MKLROOT_LAST_DIR "${BLAS_mkl_MKLROOT}" NAME)
-        if(BLAS_mkl_MKLROOT_LAST_DIR STREQUAL "mkl")
-            get_filename_component(BLAS_mkl_MKLROOT "${BLAS_mkl_MKLROOT}" DIRECTORY)
-        endif()
-      endif()
-      set(BLAS_mkl_LIB_PATH_SUFFIXES
-          "compiler/lib" "compiler/lib/${BLAS_mkl_ARCH_NAME}_${BLAS_mkl_OS_NAME}"
-          "mkl/lib" "mkl/lib/${BLAS_mkl_ARCH_NAME}_${BLAS_mkl_OS_NAME}"
-          "lib/${BLAS_mkl_ARCH_NAME}_${BLAS_mkl_OS_NAME}")
-
-      foreach(IT ${BLAS_SEARCH_LIBS})
-        string(REPLACE " " ";" SEARCH_LIBS ${IT})
-        if(NOT ${_LIBRARIES})
-          check_blas_libraries(
-            ${_LIBRARIES}
-            BLAS
-            ${BLAS_mkl_SEARCH_SYMBOL}
-            ""
-            "${SEARCH_LIBS}"
-            "${CMAKE_THREAD_LIBS_INIT};${BLAS_mkl_LM};${BLAS_mkl_LDL}"
-            "${BLAS_mkl_MKLROOT}"
-            "${BLAS_mkl_LIB_PATH_SUFFIXES}"
-            )
-        endif()
-      endforeach()
-
-      unset(BLAS_mkl_ILP_MODE)
-      unset(BLAS_mkl_INTFACE)
-      unset(BLAS_mkl_THREADING)
-      unset(BLAS_mkl_OMP)
-      unset(BLAS_mkl_DLL_SUFFIX)
-      unset(BLAS_mkl_LM)
-      unset(BLAS_mkl_LDL)
-      unset(BLAS_mkl_MKLROOT)
-      unset(BLAS_mkl_MKLROOT_LAST_DIR)
-      unset(BLAS_mkl_ARCH_NAME)
-      unset(BLAS_mkl_OS_NAME)
-      unset(BLAS_mkl_LIB_PATH_SUFFIXES)
-    endif()
-  endif()
-endif()
-
-if(BLA_F95)
-  find_package_handle_standard_args(BLAS REQUIRED_VARS BLAS95_LIBRARIES)
-  set(BLAS95_FOUND ${BLAS_FOUND})
-  if(BLAS_FOUND)
-    set(BLAS_LIBRARIES "${BLAS95_LIBRARIES}")
-  endif()
-endif()
-
-# gotoblas? (http://www.tacc.utexas.edu/tacc-projects/gotoblas2)
-if(BLA_VENDOR STREQUAL "Goto" OR BLA_VENDOR STREQUAL "All")
-  if(NOT BLAS_LIBRARIES)
-    check_blas_libraries(
-      BLAS_LIBRARIES
-      BLAS
-      sgemm
-      ""
-      "goto2"
-      ""
-      ""
-      ""
-      )
-  endif()
-endif()
-
-# OpenBLAS? (http://www.openblas.net)
-if(BLA_VENDOR STREQUAL "OpenBLAS" OR BLA_VENDOR STREQUAL "All")
-  if(NOT BLAS_LIBRARIES)
-    check_blas_libraries(
-      BLAS_LIBRARIES
-      BLAS
-      sgemm
-      ""
-      "openblas"
-      ""
-      ""
-      ""
-      )
-  endif()
-  if(NOT BLAS_LIBRARIES AND (CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED))
-    if(BLAS_FIND_QUIETLY OR NOT BLAS_FIND_REQUIRED)
-      find_package(Threads)
-    else()
-      find_package(Threads REQUIRED)
-    endif()
-    check_blas_libraries(
-      BLAS_LIBRARIES
-      BLAS
-      sgemm
-      ""
-      "openblas"
-      "${CMAKE_THREAD_LIBS_INIT}"
-      ""
-      ""
-      )
-  endif()
-endif()
-
-# ArmPL blas library? (https://developer.arm.com/tools-and-software/server-and-hpc/compile/arm-compiler-for-linux/arm-performance-libraries)
-if(BLA_VENDOR MATCHES "Arm" OR BLA_VENDOR STREQUAL "All")
-
-   # Check for 64bit Integer support
-   if(BLA_VENDOR MATCHES "_ilp64")
-     set(BLAS_armpl_LIB "armpl_ilp64")
-   else()
-     set(BLAS_armpl_LIB "armpl_lp64")
-   endif()
-
-   # Check for OpenMP support, VIA BLA_VENDOR of Arm_mp or Arm_ipl64_mp
-   if(BLA_VENDOR MATCHES "_mp")
-     set(BLAS_armpl_LIB "${BLAS_armpl_LIB}_mp")
-   endif()
-
-   if(NOT BLAS_LIBRARIES)
-    check_blas_libraries(
-      BLAS_LIBRARIES
-      BLAS
-      sgemm
-      ""
-      "${BLAS_armpl_LIB}"
-      ""
-      ""
-      ""
-      )
-  endif()
-
-endif()
-
-# FLAME's blis library? (https://github.com/flame/blis)
-if(BLA_VENDOR STREQUAL "FLAME" OR BLA_VENDOR STREQUAL "All")
-  if(NOT BLAS_LIBRARIES)
-    check_blas_libraries(
-      BLAS_LIBRARIES
-      BLAS
-      sgemm
-      ""
-      "blis"
-      ""
-      ""
-      ""
-      )
-  endif()
-endif()
-
-# BLAS in the ATLAS library? (http://math-atlas.sourceforge.net/)
-if(BLA_VENDOR STREQUAL "ATLAS" OR BLA_VENDOR STREQUAL "All")
-  if(NOT BLAS_LIBRARIES)
-    check_blas_libraries(
-      BLAS_LIBRARIES
-      BLAS
-      dgemm
-      ""
-      "blas;f77blas;atlas"
-      ""
-      ""
-      ""
-      )
-  endif()
-endif()
-
-# BLAS in PhiPACK libraries? (requires generic BLAS lib, too)
-if(BLA_VENDOR STREQUAL "PhiPACK" OR BLA_VENDOR STREQUAL "All")
-  if(NOT BLAS_LIBRARIES)
-    check_blas_libraries(
-      BLAS_LIBRARIES
-      BLAS
-      sgemm
-      ""
-      "sgemm;dgemm;blas"
-      ""
-      ""
-      ""
-      )
-  endif()
-endif()
-
-# BLAS in Alpha CXML library?
-if(BLA_VENDOR STREQUAL "CXML" OR BLA_VENDOR STREQUAL "All")
-  if(NOT BLAS_LIBRARIES)
-    check_blas_libraries(
-      BLAS_LIBRARIES
-      BLAS
-      sgemm
-      ""
-      "cxml"
-      ""
-      ""
-      ""
-      )
-  endif()
-endif()
-
-# BLAS in Alpha DXML library? (now called CXML, see above)
-if(BLA_VENDOR STREQUAL "DXML" OR BLA_VENDOR STREQUAL "All")
-  if(NOT BLAS_LIBRARIES)
-    check_blas_libraries(
-      BLAS_LIBRARIES
-      BLAS
-      sgemm
-      ""
-      "dxml"
-      ""
-      ""
-      ""
-      )
-  endif()
-endif()
-
-# BLAS in Sun Performance library?
-if(BLA_VENDOR STREQUAL "SunPerf" OR BLA_VENDOR STREQUAL "All")
-  if(NOT BLAS_LIBRARIES)
-    check_blas_libraries(
-      BLAS_LIBRARIES
-      BLAS
-      sgemm
-      "-xlic_lib=sunperf"
-      "sunperf;sunmath"
-      ""
-      ""
-      ""
-      )
-    if(BLAS_LIBRARIES)
-      set(BLAS_LINKER_FLAGS "-xlic_lib=sunperf")
-    endif()
-  endif()
-endif()
-
-# BLAS in SCSL library?  (SGI/Cray Scientific Library)
-if(BLA_VENDOR STREQUAL "SCSL" OR BLA_VENDOR STREQUAL "All")
-  if(NOT BLAS_LIBRARIES)
-    check_blas_libraries(
-      BLAS_LIBRARIES
-      BLAS
-      sgemm
-      ""
-      "scsl"
-      ""
-      ""
-      ""
-      )
-  endif()
-endif()
-
-# BLAS in SGIMATH library?
-if(BLA_VENDOR STREQUAL "SGIMATH" OR BLA_VENDOR STREQUAL "All")
-  if(NOT BLAS_LIBRARIES)
-    check_blas_libraries(
-      BLAS_LIBRARIES
-      BLAS
-      sgemm
-      ""
-      "complib.sgimath"
-      ""
-      ""
-      ""
-      )
-  endif()
-endif()
-
-# BLAS in IBM ESSL library? (requires generic BLAS lib, too)
-if(BLA_VENDOR STREQUAL "IBMESSL" OR BLA_VENDOR STREQUAL "All")
-  if(NOT BLAS_LIBRARIES)
-    check_blas_libraries(
-      BLAS_LIBRARIES
-      BLAS
-      sgemm
-      ""
-      "essl;blas"
-      ""
-      ""
-      ""
-      )
-  endif()
-endif()
-
-# BLAS in acml library?
-if(BLA_VENDOR MATCHES "ACML" OR BLA_VENDOR STREQUAL "All")
-  if(((BLA_VENDOR STREQUAL "ACML") AND (NOT BLAS_ACML_LIB_DIRS)) OR
-    ((BLA_VENDOR STREQUAL "ACML_MP") AND (NOT BLAS_ACML_MP_LIB_DIRS)) OR
-    ((BLA_VENDOR STREQUAL "ACML_GPU") AND (NOT BLAS_ACML_GPU_LIB_DIRS))
-    )
-  # try to find acml in "standard" paths
-  if(WIN32)
-    file(GLOB _ACML_ROOT "C:/AMD/acml*/ACML-EULA.txt")
-  else()
-    file(GLOB _ACML_ROOT "/opt/acml*/ACML-EULA.txt")
-  endif()
-  if(WIN32)
-    file(GLOB _ACML_GPU_ROOT "C:/AMD/acml*/GPGPUexamples")
-  else()
-    file(GLOB _ACML_GPU_ROOT "/opt/acml*/GPGPUexamples")
-  endif()
-  list(GET _ACML_ROOT 0 _ACML_ROOT)
-  list(GET _ACML_GPU_ROOT 0 _ACML_GPU_ROOT)
-  if(_ACML_ROOT)
-    get_filename_component(_ACML_ROOT ${_ACML_ROOT} PATH)
-    if(SIZEOF_INTEGER EQUAL 8)
-      set(_ACML_PATH_SUFFIX "_int64")
-    else()
-      set(_ACML_PATH_SUFFIX "")
-    endif()
-    if(CMAKE_Fortran_COMPILER_ID STREQUAL "Intel")
-      set(_ACML_COMPILER32 "ifort32")
-      set(_ACML_COMPILER64 "ifort64")
-    elseif(CMAKE_Fortran_COMPILER_ID STREQUAL "SunPro")
-      set(_ACML_COMPILER32 "sun32")
-      set(_ACML_COMPILER64 "sun64")
-    elseif(CMAKE_Fortran_COMPILER_ID STREQUAL "PGI")
-      set(_ACML_COMPILER32 "pgi32")
-      if(WIN32)
-        set(_ACML_COMPILER64 "win64")
-      else()
-        set(_ACML_COMPILER64 "pgi64")
-      endif()
-    elseif(CMAKE_Fortran_COMPILER_ID STREQUAL "Open64")
-      # 32 bit builds not supported on Open64 but for code simplicity
-      # We'll just use the same directory twice
-      set(_ACML_COMPILER32 "open64_64")
-      set(_ACML_COMPILER64 "open64_64")
-    elseif(CMAKE_Fortran_COMPILER_ID STREQUAL "NAG")
-      set(_ACML_COMPILER32 "nag32")
-      set(_ACML_COMPILER64 "nag64")
-    else()
-      set(_ACML_COMPILER32 "gfortran32")
-      set(_ACML_COMPILER64 "gfortran64")
-    endif()
-
-    if(BLA_VENDOR STREQUAL "ACML_MP")
-      set(_ACML_MP_LIB_DIRS
-        "${_ACML_ROOT}/${_ACML_COMPILER32}_mp${_ACML_PATH_SUFFIX}/lib"
-        "${_ACML_ROOT}/${_ACML_COMPILER64}_mp${_ACML_PATH_SUFFIX}/lib")
-    else()
-      set(_ACML_LIB_DIRS
-        "${_ACML_ROOT}/${_ACML_COMPILER32}${_ACML_PATH_SUFFIX}/lib"
-        "${_ACML_ROOT}/${_ACML_COMPILER64}${_ACML_PATH_SUFFIX}/lib")
-    endif()
-  endif()
-elseif(BLAS_${BLA_VENDOR}_LIB_DIRS)
-  set(_${BLA_VENDOR}_LIB_DIRS ${BLAS_${BLA_VENDOR}_LIB_DIRS})
-endif()
-
-if(BLA_VENDOR STREQUAL "ACML_MP")
-  foreach(BLAS_ACML_MP_LIB_DIRS ${_ACML_MP_LIB_DIRS})
-    check_blas_libraries(
-      BLAS_LIBRARIES
-      BLAS
-      sgemm
-      "" "acml_mp;acml_mv" "" ${BLAS_ACML_MP_LIB_DIRS} ""
-      )
-    if(BLAS_LIBRARIES)
-      break()
-    endif()
-  endforeach()
-elseif(BLA_VENDOR STREQUAL "ACML_GPU")
-  foreach(BLAS_ACML_GPU_LIB_DIRS ${_ACML_GPU_LIB_DIRS})
-    check_blas_libraries(
-      BLAS_LIBRARIES
-      BLAS
-      sgemm
-      "" "acml;acml_mv;CALBLAS" "" ${BLAS_ACML_GPU_LIB_DIRS} ""
-      )
-    if(BLAS_LIBRARIES)
-      break()
-    endif()
-  endforeach()
-else()
-  foreach(BLAS_ACML_LIB_DIRS ${_ACML_LIB_DIRS})
-    check_blas_libraries(
-      BLAS_LIBRARIES
-      BLAS
-      sgemm
-      "" "acml;acml_mv" "" ${BLAS_ACML_LIB_DIRS} ""
-      )
-    if(BLAS_LIBRARIES)
-      break()
-    endif()
-  endforeach()
-endif()
-
-# Either acml or acml_mp should be in LD_LIBRARY_PATH but not both
-if(NOT BLAS_LIBRARIES)
-  check_blas_libraries(
-    BLAS_LIBRARIES
-    BLAS
-    sgemm
-    ""
-    "acml;acml_mv"
-    ""
-    ""
-    ""
-    )
-endif()
-if(NOT BLAS_LIBRARIES)
-  check_blas_libraries(
-    BLAS_LIBRARIES
-    BLAS
-    sgemm
-    ""
-    "acml_mp;acml_mv"
-    ""
-    ""
-    ""
-    )
-endif()
-if(NOT BLAS_LIBRARIES)
-  check_blas_libraries(
-    BLAS_LIBRARIES
-    BLAS
-    sgemm
-    ""
-    "acml;acml_mv;CALBLAS"
-    ""
-    ""
-    ""
-    )
-endif()
-endif() # ACML
-
-# Apple BLAS library?
-if(BLA_VENDOR STREQUAL "Apple" OR BLA_VENDOR STREQUAL "All")
-  if(NOT BLAS_LIBRARIES)
-    check_blas_libraries(
-      BLAS_LIBRARIES
-      BLAS
-      dgemm
-      ""
-      "Accelerate"
-      ""
-      ""
-      ""
-      )
-  endif()
-endif()
-
-# Apple NAS (vecLib) library?
-if(BLA_VENDOR STREQUAL "NAS" OR BLA_VENDOR STREQUAL "All")
-  if(NOT BLAS_LIBRARIES)
-    check_blas_libraries(
-      BLAS_LIBRARIES
-      BLAS
-      dgemm
-      ""
-      "vecLib"
-      ""
-      ""
-      ""
-      )
-  endif()
-endif()
-
-# Generic BLAS library?
-if(BLA_VENDOR STREQUAL "Generic" OR BLA_VENDOR STREQUAL "All")
-  if(NOT BLAS_LIBRARIES)
-    check_blas_libraries(
-      BLAS_LIBRARIES
-      BLAS
-      sgemm
-      ""
-      "blas"
-      ""
-      ""
-      ""
-      )
-  endif()
-endif()
-
-if(NOT BLA_F95)
-  find_package_handle_standard_args(BLAS REQUIRED_VARS BLAS_LIBRARIES)
-endif()
-
-
-# On compilers that implicitly link BLAS (such as ftn, cc, and CC on Cray HPC machines)
-# we used a placeholder for empty BLAS_LIBRARIES to get through our logic above.
-if(BLAS_LIBRARIES STREQUAL "BLAS_LIBRARIES-PLACEHOLDER-FOR-EMPTY-LIBRARIES")
-  set(BLAS_LIBRARIES "")
-endif()
-
-_add_blas_target()
-cmake_pop_check_state()
-set(CMAKE_FIND_LIBRARY_SUFFIXES ${_blas_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
diff --git a/share/cmake-3.18/Modules/FindBZip2.cmake b/share/cmake-3.18/Modules/FindBZip2.cmake
deleted file mode 100644
index 98ab72c..0000000
--- a/share/cmake-3.18/Modules/FindBZip2.cmake
+++ /dev/null
@@ -1,104 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindBZip2
----------
-
-Try to find BZip2
-
-IMPORTED Targets
-^^^^^^^^^^^^^^^^
-
-This module defines :prop_tgt:`IMPORTED` target ``BZip2::BZip2``, if
-BZip2 has been found.
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-This module defines the following variables:
-
-``BZIP2_FOUND``
-  system has BZip2
-``BZIP2_INCLUDE_DIRS``
-  the BZip2 include directories
-``BZIP2_LIBRARIES``
-  Link these to use BZip2
-``BZIP2_NEED_PREFIX``
-  this is set if the functions are prefixed with ``BZ2_``
-``BZIP2_VERSION_STRING``
-  the version of BZip2 found
-
-Cache variables
-^^^^^^^^^^^^^^^
-
-The following cache variables may also be set:
-
-``BZIP2_INCLUDE_DIR``
-  the BZip2 include directory
-#]=======================================================================]
-
-set(_BZIP2_PATHS PATHS
-  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\Bzip2;InstallPath]"
-  )
-
-find_path(BZIP2_INCLUDE_DIR bzlib.h ${_BZIP2_PATHS} PATH_SUFFIXES include)
-
-if (NOT BZIP2_LIBRARIES)
-    find_library(BZIP2_LIBRARY_RELEASE NAMES bz2 bzip2 libbz2 libbzip2 ${_BZIP2_PATHS} PATH_SUFFIXES lib)
-    find_library(BZIP2_LIBRARY_DEBUG NAMES bz2d bzip2d libbz2d libbzip2d ${_BZIP2_PATHS} PATH_SUFFIXES lib)
-
-    include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
-    SELECT_LIBRARY_CONFIGURATIONS(BZIP2)
-else ()
-    file(TO_CMAKE_PATH "${BZIP2_LIBRARIES}" BZIP2_LIBRARIES)
-endif ()
-
-if (BZIP2_INCLUDE_DIR AND EXISTS "${BZIP2_INCLUDE_DIR}/bzlib.h")
-    file(STRINGS "${BZIP2_INCLUDE_DIR}/bzlib.h" BZLIB_H REGEX "bzip2/libbzip2 version [0-9]+\\.[^ ]+ of [0-9]+ ")
-    string(REGEX REPLACE ".* bzip2/libbzip2 version ([0-9]+\\.[^ ]+) of [0-9]+ .*" "\\1" BZIP2_VERSION_STRING "${BZLIB_H}")
-endif ()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(BZip2
-                                  REQUIRED_VARS BZIP2_LIBRARIES BZIP2_INCLUDE_DIR
-                                  VERSION_VAR BZIP2_VERSION_STRING)
-
-if (BZIP2_FOUND)
-  set(BZIP2_INCLUDE_DIRS ${BZIP2_INCLUDE_DIR})
-  include(${CMAKE_CURRENT_LIST_DIR}/CheckSymbolExists.cmake)
-  include(${CMAKE_CURRENT_LIST_DIR}/CMakePushCheckState.cmake)
-  cmake_push_check_state()
-  set(CMAKE_REQUIRED_QUIET ${BZip2_FIND_QUIETLY})
-  set(CMAKE_REQUIRED_INCLUDES ${BZIP2_INCLUDE_DIR})
-  set(CMAKE_REQUIRED_LIBRARIES ${BZIP2_LIBRARIES})
-  CHECK_SYMBOL_EXISTS(BZ2_bzCompressInit "bzlib.h" BZIP2_NEED_PREFIX)
-  cmake_pop_check_state()
-
-  if(NOT TARGET BZip2::BZip2)
-    add_library(BZip2::BZip2 UNKNOWN IMPORTED)
-    set_target_properties(BZip2::BZip2 PROPERTIES
-      INTERFACE_INCLUDE_DIRECTORIES "${BZIP2_INCLUDE_DIRS}")
-
-    if(BZIP2_LIBRARY_RELEASE)
-      set_property(TARGET BZip2::BZip2 APPEND PROPERTY
-        IMPORTED_CONFIGURATIONS RELEASE)
-      set_target_properties(BZip2::BZip2 PROPERTIES
-        IMPORTED_LOCATION_RELEASE "${BZIP2_LIBRARY_RELEASE}")
-    endif()
-
-    if(BZIP2_LIBRARY_DEBUG)
-      set_property(TARGET BZip2::BZip2 APPEND PROPERTY
-        IMPORTED_CONFIGURATIONS DEBUG)
-      set_target_properties(BZip2::BZip2 PROPERTIES
-        IMPORTED_LOCATION_DEBUG "${BZIP2_LIBRARY_DEBUG}")
-    endif()
-
-    if(NOT BZIP2_LIBRARY_RELEASE AND NOT BZIP2_LIBRARY_DEBUG)
-      set_property(TARGET BZip2::BZip2 APPEND PROPERTY
-        IMPORTED_LOCATION "${BZIP2_LIBRARY}")
-    endif()
-  endif()
-endif ()
-
-mark_as_advanced(BZIP2_INCLUDE_DIR)
diff --git a/share/cmake-3.18/Modules/FindBoost.cmake b/share/cmake-3.18/Modules/FindBoost.cmake
deleted file mode 100644
index 13981d3..0000000
--- a/share/cmake-3.18/Modules/FindBoost.cmake
+++ /dev/null
@@ -1,2390 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindBoost
----------
-
-Find Boost include dirs and libraries
-
-Use this module by invoking find_package with the form::
-
-  find_package(Boost
-    [version] [EXACT]      # Minimum or EXACT version e.g. 1.67.0
-    [REQUIRED]             # Fail with error if Boost is not found
-    [COMPONENTS <libs>...] # Boost libraries by their canonical name
-                           # e.g. "date_time" for "libboost_date_time"
-    [OPTIONAL_COMPONENTS <libs>...]
-                           # Optional Boost libraries by their canonical name)
-    )                      # e.g. "date_time" for "libboost_date_time"
-
-This module finds headers and requested component libraries OR a CMake
-package configuration file provided by a "Boost CMake" build.  For the
-latter case skip to the "Boost CMake" section below.  For the former
-case results are reported in variables::
-
-  Boost_FOUND            - True if headers and requested libraries were found
-  Boost_INCLUDE_DIRS     - Boost include directories
-  Boost_LIBRARY_DIRS     - Link directories for Boost libraries
-  Boost_LIBRARIES        - Boost component libraries to be linked
-  Boost_<C>_FOUND        - True if component <C> was found (<C> is upper-case)
-  Boost_<C>_LIBRARY      - Libraries to link for component <C> (may include
-                           target_link_libraries debug/optimized keywords)
-  Boost_VERSION_MACRO    - BOOST_VERSION value from boost/version.hpp
-  Boost_VERSION_STRING   - Boost version number in x.y.z format
-  Boost_VERSION          - if CMP0093 NEW => same as Boost_VERSION_STRING
-                           if CMP0093 OLD or unset => same as Boost_VERSION_MACRO
-  Boost_LIB_VERSION      - Version string appended to library filenames
-  Boost_VERSION_MAJOR    - Boost major version number (X in X.y.z)
-                           alias: Boost_MAJOR_VERSION
-  Boost_VERSION_MINOR    - Boost minor version number (Y in x.Y.z)
-                           alias: Boost_MINOR_VERSION
-  Boost_VERSION_PATCH    - Boost subminor version number (Z in x.y.Z)
-                           alias: Boost_SUBMINOR_VERSION
-  Boost_VERSION_COUNT    - Amount of version components (3)
-  Boost_LIB_DIAGNOSTIC_DEFINITIONS (Windows)
-                         - Pass to add_definitions() to have diagnostic
-                           information about Boost's automatic linking
-                           displayed during compilation
-
-Note that Boost Python components require a Python version suffix
-(Boost 1.67 and later), e.g. ``python36`` or ``python27`` for the
-versions built against Python 3.6 and 2.7, respectively.  This also
-applies to additional components using Python including
-``mpi_python`` and ``numpy``.  Earlier Boost releases may use
-distribution-specific suffixes such as ``2``, ``3`` or ``2.7``.
-These may also be used as suffixes, but note that they are not
-portable.
-
-This module reads hints about search locations from variables::
-
-  BOOST_ROOT             - Preferred installation prefix
-   (or BOOSTROOT)
-  BOOST_INCLUDEDIR       - Preferred include directory e.g. <prefix>/include
-  BOOST_LIBRARYDIR       - Preferred library directory e.g. <prefix>/lib
-  Boost_NO_SYSTEM_PATHS  - Set to ON to disable searching in locations not
-                           specified by these hint variables. Default is OFF.
-  Boost_ADDITIONAL_VERSIONS
-                         - List of Boost versions not known to this module
-                           (Boost install locations may contain the version)
-
-and saves search results persistently in CMake cache entries::
-
-  Boost_INCLUDE_DIR         - Directory containing Boost headers
-  Boost_LIBRARY_DIR_RELEASE - Directory containing release Boost libraries
-  Boost_LIBRARY_DIR_DEBUG   - Directory containing debug Boost libraries
-  Boost_<C>_LIBRARY_DEBUG   - Component <C> library debug variant
-  Boost_<C>_LIBRARY_RELEASE - Component <C> library release variant
-
-The following :prop_tgt:`IMPORTED` targets are also defined::
-
-  Boost::headers                - Target for header-only dependencies
-                                  (Boost include directory)
-                                  alias: Boost::boost
-  Boost::<C>                    - Target for specific component dependency
-                                  (shared or static library); <C> is lower-
-                                  case
-  Boost::diagnostic_definitions - interface target to enable diagnostic
-                                  information about Boost's automatic linking
-                                  during compilation (adds BOOST_LIB_DIAGNOSTIC)
-  Boost::disable_autolinking    - interface target to disable automatic
-                                  linking with MSVC (adds BOOST_ALL_NO_LIB)
-  Boost::dynamic_linking        - interface target to enable dynamic linking
-                                  linking with MSVC (adds BOOST_ALL_DYN_LINK)
-
-Implicit dependencies such as ``Boost::filesystem`` requiring
-``Boost::system`` will be automatically detected and satisfied, even
-if system is not specified when using :command:`find_package` and if
-``Boost::system`` is not added to :command:`target_link_libraries`.  If using
-``Boost::thread``, then ``Threads::Threads`` will also be added automatically.
-
-It is important to note that the imported targets behave differently
-than variables created by this module: multiple calls to
-:command:`find_package(Boost)` in the same directory or sub-directories with
-different options (e.g. static or shared) will not override the
-values of the targets created by the first call.
-
-Users may set these hints or results as ``CACHE`` entries.  Projects
-should not read these entries directly but instead use the above
-result variables.  Note that some hint names start in upper-case
-"BOOST".  One may specify these as environment variables if they are
-not specified as CMake variables or cache entries.
-
-This module first searches for the ``Boost`` header files using the above
-hint variables (excluding ``BOOST_LIBRARYDIR``) and saves the result in
-``Boost_INCLUDE_DIR``.  Then it searches for requested component libraries
-using the above hints (excluding ``BOOST_INCLUDEDIR`` and
-``Boost_ADDITIONAL_VERSIONS``), "lib" directories near ``Boost_INCLUDE_DIR``,
-and the library name configuration settings below.  It saves the
-library directories in ``Boost_LIBRARY_DIR_DEBUG`` and
-``Boost_LIBRARY_DIR_RELEASE`` and individual library
-locations in ``Boost_<C>_LIBRARY_DEBUG`` and ``Boost_<C>_LIBRARY_RELEASE``.
-When one changes settings used by previous searches in the same build
-tree (excluding environment variables) this module discards previous
-search results affected by the changes and searches again.
-
-Boost libraries come in many variants encoded in their file name.
-Users or projects may tell this module which variant to find by
-setting variables::
-
-  Boost_USE_DEBUG_LIBS     - Set to ON or OFF to specify whether to search
-                             and use the debug libraries.  Default is ON.
-  Boost_USE_RELEASE_LIBS   - Set to ON or OFF to specify whether to search
-                             and use the release libraries.  Default is ON.
-  Boost_USE_MULTITHREADED  - Set to OFF to use the non-multithreaded
-                             libraries ('mt' tag).  Default is ON.
-  Boost_USE_STATIC_LIBS    - Set to ON to force the use of the static
-                             libraries.  Default is OFF.
-  Boost_USE_STATIC_RUNTIME - Set to ON or OFF to specify whether to use
-                             libraries linked statically to the C++ runtime
-                             ('s' tag).  Default is platform dependent.
-  Boost_USE_DEBUG_RUNTIME  - Set to ON or OFF to specify whether to use
-                             libraries linked to the MS debug C++ runtime
-                             ('g' tag).  Default is ON.
-  Boost_USE_DEBUG_PYTHON   - Set to ON to use libraries compiled with a
-                             debug Python build ('y' tag). Default is OFF.
-  Boost_USE_STLPORT        - Set to ON to use libraries compiled with
-                             STLPort ('p' tag).  Default is OFF.
-  Boost_USE_STLPORT_DEPRECATED_NATIVE_IOSTREAMS
-                           - Set to ON to use libraries compiled with
-                             STLPort deprecated "native iostreams"
-                             ('n' tag).  Default is OFF.
-  Boost_COMPILER           - Set to the compiler-specific library suffix
-                             (e.g. "-gcc43").  Default is auto-computed
-                             for the C++ compiler in use.  A list may be
-                             used if multiple compatible suffixes should
-                             be tested for, in decreasing order of
-                             preference.
-  Boost_LIB_PREFIX         - Set to the platform-specific library name
-                             prefix (e.g. "lib") used by Boost static libs.
-                             This is needed only on platforms where CMake
-                             does not know the prefix by default.
-  Boost_ARCHITECTURE       - Set to the architecture-specific library suffix
-                             (e.g. "-x64").  Default is auto-computed for the
-                             C++ compiler in use.
-  Boost_THREADAPI          - Suffix for "thread" component library name,
-                             such as "pthread" or "win32".  Names with
-                             and without this suffix will both be tried.
-  Boost_NAMESPACE          - Alternate namespace used to build boost with
-                             e.g. if set to "myboost", will search for
-                             myboost_thread instead of boost_thread.
-
-Other variables one may set to control this module are::
-
-  Boost_DEBUG              - Set to ON to enable debug output from FindBoost.
-                             Please enable this before filing any bug report.
-  Boost_REALPATH           - Set to ON to resolve symlinks for discovered
-                             libraries to assist with packaging.  For example,
-                             the "system" component library may be resolved to
-                             "/usr/lib/libboost_system.so.1.67.0" instead of
-                             "/usr/lib/libboost_system.so".  This does not
-                             affect linking and should not be enabled unless
-                             the user needs this information.
-  Boost_LIBRARY_DIR        - Default value for Boost_LIBRARY_DIR_RELEASE and
-                             Boost_LIBRARY_DIR_DEBUG.
-
-On Visual Studio and Borland compilers Boost headers request automatic
-linking to corresponding libraries.  This requires matching libraries
-to be linked explicitly or available in the link library search path.
-In this case setting ``Boost_USE_STATIC_LIBS`` to ``OFF`` may not achieve
-dynamic linking.  Boost automatic linking typically requests static
-libraries with a few exceptions (such as ``Boost.Python``).  Use::
-
-  add_definitions(${Boost_LIB_DIAGNOSTIC_DEFINITIONS})
-
-to ask Boost to report information about automatic linking requests.
-
-Example to find Boost headers only::
-
-  find_package(Boost 1.36.0)
-  if(Boost_FOUND)
-    include_directories(${Boost_INCLUDE_DIRS})
-    add_executable(foo foo.cc)
-  endif()
-
-Example to find Boost libraries and use imported targets::
-
-  find_package(Boost 1.56 REQUIRED COMPONENTS
-               date_time filesystem iostreams)
-  add_executable(foo foo.cc)
-  target_link_libraries(foo Boost::date_time Boost::filesystem
-                            Boost::iostreams)
-
-Example to find Boost Python 3.6 libraries and use imported targets::
-
-  find_package(Boost 1.67 REQUIRED COMPONENTS
-               python36 numpy36)
-  add_executable(foo foo.cc)
-  target_link_libraries(foo Boost::python36 Boost::numpy36)
-
-Example to find Boost headers and some *static* (release only) libraries::
-
-  set(Boost_USE_STATIC_LIBS        ON)  # only find static libs
-  set(Boost_USE_DEBUG_LIBS         OFF) # ignore debug libs and
-  set(Boost_USE_RELEASE_LIBS       ON)  # only find release libs
-  set(Boost_USE_MULTITHREADED      ON)
-  set(Boost_USE_STATIC_RUNTIME    OFF)
-  find_package(Boost 1.66.0 COMPONENTS date_time filesystem system ...)
-  if(Boost_FOUND)
-    include_directories(${Boost_INCLUDE_DIRS})
-    add_executable(foo foo.cc)
-    target_link_libraries(foo ${Boost_LIBRARIES})
-  endif()
-
-Boost CMake
-^^^^^^^^^^^
-
-If Boost was built using the boost-cmake project or from Boost 1.70.0 on
-it provides a package configuration file for use with find_package's config mode.
-This module looks for the package configuration file called
-``BoostConfig.cmake`` or ``boost-config.cmake`` and stores the result in
-``CACHE`` entry "Boost_DIR".  If found, the package configuration file is loaded
-and this module returns with no further action.  See documentation of
-the Boost CMake package configuration for details on what it provides.
-
-Set ``Boost_NO_BOOST_CMAKE`` to ``ON``, to disable the search for boost-cmake.
-#]=======================================================================]
-
-# The FPHSA helper provides standard way of reporting final search results to
-# the user including the version and component checks.
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-
-# Save project's policies
-cmake_policy(PUSH)
-cmake_policy(SET CMP0057 NEW) # if IN_LIST
-cmake_policy(SET CMP0102 NEW) # if mark_as_advanced(non_cache_var)
-
-function(_boost_get_existing_target component target_var)
-  set(names "${component}")
-  if(component MATCHES "^([a-z_]*)(python|numpy)([1-9])\\.?([0-9])?$")
-    # handle pythonXY and numpyXY versioned components and also python X.Y, mpi_python etc.
-    list(APPEND names
-      "${CMAKE_MATCH_1}${CMAKE_MATCH_2}" # python
-      "${CMAKE_MATCH_1}${CMAKE_MATCH_2}${CMAKE_MATCH_3}" # pythonX
-      "${CMAKE_MATCH_1}${CMAKE_MATCH_2}${CMAKE_MATCH_3}${CMAKE_MATCH_4}" #pythonXY
-    )
-  endif()
-  # https://github.com/boost-cmake/boost-cmake uses boost::file_system etc.
-  # So handle similar constructions of target names
-  string(TOLOWER "${component}" lower_component)
-  list(APPEND names "${lower_component}")
-  foreach(prefix Boost boost)
-    foreach(name IN LISTS names)
-      if(TARGET "${prefix}::${name}")
-        # The target may be an INTERFACE library that wraps around a single other
-        # target for compatibility.  Unwrap this layer so we can extract real info.
-        if("${name}" MATCHES "^(python|numpy|mpi_python)([1-9])([0-9])$")
-          set(name_nv "${CMAKE_MATCH_1}")
-          if(TARGET "${prefix}::${name_nv}")
-            get_property(type TARGET "${prefix}::${name}" PROPERTY TYPE)
-            if(type STREQUAL "INTERFACE_LIBRARY")
-              get_property(lib TARGET "${prefix}::${name}" PROPERTY INTERFACE_LINK_LIBRARIES)
-              if("${lib}" STREQUAL "${prefix}::${name_nv}")
-                set(${target_var} "${prefix}::${name_nv}" PARENT_SCOPE)
-                return()
-              endif()
-            endif()
-          endif()
-        endif()
-        set(${target_var} "${prefix}::${name}" PARENT_SCOPE)
-        return()
-      endif()
-    endforeach()
-  endforeach()
-  set(${target_var} "" PARENT_SCOPE)
-endfunction()
-
-function(_boost_get_canonical_target_name component target_var)
-  string(TOLOWER "${component}" component)
-  if(component MATCHES "^([a-z_]*)(python|numpy)([1-9])\\.?([0-9])?$")
-    # handle pythonXY and numpyXY versioned components and also python X.Y, mpi_python etc.
-    set(${target_var} "Boost::${CMAKE_MATCH_1}${CMAKE_MATCH_2}" PARENT_SCOPE)
-  else()
-    set(${target_var} "Boost::${component}" PARENT_SCOPE)
-  endif()
-endfunction()
-
-macro(_boost_set_in_parent_scope name value)
-  # Set a variable in parent scope and make it visibile in current scope
-  set(${name} "${value}" PARENT_SCOPE)
-  set(${name} "${value}")
-endmacro()
-
-macro(_boost_set_if_unset name value)
-  if(NOT ${name})
-    _boost_set_in_parent_scope(${name} "${value}")
-  endif()
-endmacro()
-
-macro(_boost_set_cache_if_unset name value)
-  if(NOT ${name})
-    set(${name} "${value}" CACHE STRING "" FORCE)
-  endif()
-endmacro()
-
-macro(_boost_append_include_dir target)
-  get_target_property(inc "${target}" INTERFACE_INCLUDE_DIRECTORIES)
-  if(inc)
-    list(APPEND include_dirs "${inc}")
-  endif()
-endmacro()
-
-function(_boost_set_legacy_variables_from_config)
-  # Set legacy variables for compatibility if not set
-  set(include_dirs "")
-  set(library_dirs "")
-  set(libraries "")
-  # Header targets Boost::headers or Boost::boost
-  foreach(comp headers boost)
-    _boost_get_existing_target(${comp} target)
-    if(target)
-      _boost_append_include_dir("${target}")
-    endif()
-  endforeach()
-  # Library targets
-  foreach(comp IN LISTS Boost_FIND_COMPONENTS)
-    string(TOUPPER ${comp} uppercomp)
-    # Overwrite if set
-    _boost_set_in_parent_scope(Boost_${uppercomp}_FOUND "${Boost_${comp}_FOUND}")
-    if(Boost_${comp}_FOUND)
-      _boost_get_existing_target(${comp} target)
-      if(NOT target)
-        if(Boost_DEBUG OR Boost_VERBOSE)
-          message(WARNING "Could not find imported target for required component '${comp}'. Legacy variables for this component might be missing. Refer to the documentation of your Boost installation for help on variables to use.")
-        endif()
-        continue()
-      endif()
-      _boost_append_include_dir("${target}")
-      _boost_set_if_unset(Boost_${uppercomp}_LIBRARY "${target}")
-      _boost_set_if_unset(Boost_${uppercomp}_LIBRARIES "${target}") # Very old legacy variable
-      list(APPEND libraries "${target}")
-      get_property(type TARGET "${target}" PROPERTY TYPE)
-      if(NOT type STREQUAL "INTERFACE_LIBRARY")
-        foreach(cfg RELEASE DEBUG)
-          get_target_property(lib ${target} IMPORTED_LOCATION_${cfg})
-          if(lib)
-            get_filename_component(lib_dir "${lib}" DIRECTORY)
-            list(APPEND library_dirs ${lib_dir})
-            _boost_set_cache_if_unset(Boost_${uppercomp}_LIBRARY_${cfg} "${lib}")
-          endif()
-        endforeach()
-      elseif(Boost_DEBUG OR Boost_VERBOSE)
-        # For projects using only the Boost::* targets this warning can be safely ignored.
-        message(WARNING "Imported target '${target}' for required component '${comp}' has no artifact. Legacy variables for this component might be missing. Refer to the documentation of your Boost installation for help on variables to use.")
-      endif()
-      _boost_get_canonical_target_name("${comp}" canonical_target)
-      if(NOT TARGET "${canonical_target}")
-        add_library("${canonical_target}" INTERFACE IMPORTED)
-        target_link_libraries("${canonical_target}" INTERFACE "${target}")
-      endif()
-    endif()
-  endforeach()
-  list(REMOVE_DUPLICATES include_dirs)
-  list(REMOVE_DUPLICATES library_dirs)
-  _boost_set_if_unset(Boost_INCLUDE_DIRS "${include_dirs}")
-  _boost_set_if_unset(Boost_LIBRARY_DIRS "${library_dirs}")
-  _boost_set_if_unset(Boost_LIBRARIES "${libraries}")
-  _boost_set_if_unset(Boost_VERSION_STRING "${Boost_VERSION_MAJOR}.${Boost_VERSION_MINOR}.${Boost_VERSION_PATCH}")
-  find_path(Boost_INCLUDE_DIR
-    NAMES boost/version.hpp boost/config.hpp
-    HINTS ${Boost_INCLUDE_DIRS}
-    NO_DEFAULT_PATH
-  )
-  if(NOT Boost_VERSION_MACRO OR NOT Boost_LIB_VERSION)
-    set(version_file ${Boost_INCLUDE_DIR}/boost/version.hpp)
-    if(EXISTS "${version_file}")
-      file(STRINGS "${version_file}" contents REGEX "#define BOOST_(LIB_)?VERSION ")
-      if(contents MATCHES "#define BOOST_VERSION ([0-9]+)")
-        _boost_set_if_unset(Boost_VERSION_MACRO "${CMAKE_MATCH_1}")
-      endif()
-      if(contents MATCHES "#define BOOST_LIB_VERSION \"([0-9_]+)\"")
-        _boost_set_if_unset(Boost_LIB_VERSION "${CMAKE_MATCH_1}")
-      endif()
-    endif()
-  endif()
-  _boost_set_if_unset(Boost_MAJOR_VERSION ${Boost_VERSION_MAJOR})
-  _boost_set_if_unset(Boost_MINOR_VERSION ${Boost_VERSION_MINOR})
-  _boost_set_if_unset(Boost_SUBMINOR_VERSION ${Boost_VERSION_PATCH})
-  if(WIN32)
-    _boost_set_if_unset(Boost_LIB_DIAGNOSTIC_DEFINITIONS "-DBOOST_LIB_DIAGNOSTIC")
-  endif()
-  if(NOT TARGET Boost::headers)
-    add_library(Boost::headers INTERFACE IMPORTED)
-    target_include_directories(Boost::headers INTERFACE ${Boost_INCLUDE_DIRS})
-  endif()
-  # Legacy targets w/o functionality as all handled by defined targets
-  foreach(lib diagnostic_definitions disable_autolinking dynamic_linking)
-    if(NOT TARGET Boost::${lib})
-      add_library(Boost::${lib} INTERFACE IMPORTED)
-    endif()
-  endforeach()
-  if(NOT TARGET Boost::boost)
-    add_library(Boost::boost INTERFACE IMPORTED)
-    target_link_libraries(Boost::boost INTERFACE Boost::headers)
-  endif()
-endfunction()
-
-#-------------------------------------------------------------------------------
-# Before we go searching, check whether a boost cmake package is available, unless
-# the user specifically asked NOT to search for one.
-#
-# If Boost_DIR is set, this behaves as any find_package call would. If not,
-# it looks at BOOST_ROOT and BOOSTROOT to find Boost.
-#
-if (NOT Boost_NO_BOOST_CMAKE)
-  # If Boost_DIR is not set, look for BOOSTROOT and BOOST_ROOT as alternatives,
-  # since these are more conventional for Boost.
-  if ("$ENV{Boost_DIR}" STREQUAL "")
-    if (NOT "$ENV{BOOST_ROOT}" STREQUAL "")
-      set(ENV{Boost_DIR} $ENV{BOOST_ROOT})
-    elseif (NOT "$ENV{BOOSTROOT}" STREQUAL "")
-      set(ENV{Boost_DIR} $ENV{BOOSTROOT})
-    endif()
-  endif()
-
-  # Do the same find_package call but look specifically for the CMake version.
-  # Note that args are passed in the Boost_FIND_xxxxx variables, so there is no
-  # need to delegate them to this find_package call.
-  find_package(Boost QUIET NO_MODULE)
-  if (DEFINED Boost_DIR)
-    mark_as_advanced(Boost_DIR)
-  endif ()
-
-  # If we found a boost cmake package, then we're done. Print out what we found.
-  # Otherwise let the rest of the module try to find it.
-  if(Boost_FOUND)
-    # Convert component found variables to standard variables if required
-    # Necessary for legacy boost-cmake and 1.70 builtin BoostConfig
-    if(Boost_FIND_COMPONENTS)
-      # Ignore the meta-component "ALL", introduced by Boost 1.73
-      list(REMOVE_ITEM Boost_FIND_COMPONENTS "ALL")
-
-      foreach(_comp IN LISTS Boost_FIND_COMPONENTS)
-        if(DEFINED Boost_${_comp}_FOUND)
-          continue()
-        endif()
-        string(TOUPPER ${_comp} _uppercomp)
-        if(DEFINED Boost${_comp}_FOUND) # legacy boost-cmake project
-          set(Boost_${_comp}_FOUND ${Boost${_comp}_FOUND})
-        elseif(DEFINED Boost_${_uppercomp}_FOUND) # Boost 1.70
-          set(Boost_${_comp}_FOUND ${Boost_${_uppercomp}_FOUND})
-        endif()
-      endforeach()
-    endif()
-
-    find_package_handle_standard_args(Boost HANDLE_COMPONENTS CONFIG_MODE)
-    _boost_set_legacy_variables_from_config()
-
-    # Restore project's policies
-    cmake_policy(POP)
-    return()
-  endif()
-endif()
-
-
-#-------------------------------------------------------------------------------
-#  FindBoost functions & macros
-#
-
-#
-# Print debug text if Boost_DEBUG is set.
-# Call example:
-# _Boost_DEBUG_PRINT("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "debug message")
-#
-function(_Boost_DEBUG_PRINT file line text)
-  if(Boost_DEBUG)
-    message(STATUS "[ ${file}:${line} ] ${text}")
-  endif()
-endfunction()
-
-#
-# _Boost_DEBUG_PRINT_VAR(file line variable_name [ENVIRONMENT]
-#                        [SOURCE "short explanation of origin of var value"])
-#
-#   ENVIRONMENT - look up environment variable instead of CMake variable
-#
-# Print variable name and its value if Boost_DEBUG is set.
-# Call example:
-# _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" BOOST_ROOT)
-#
-function(_Boost_DEBUG_PRINT_VAR file line name)
-  if(Boost_DEBUG)
-    cmake_parse_arguments(_args "ENVIRONMENT" "SOURCE" "" ${ARGN})
-
-    unset(source)
-    if(_args_SOURCE)
-      set(source " (${_args_SOURCE})")
-    endif()
-
-    if(_args_ENVIRONMENT)
-      if(DEFINED ENV{${name}})
-        set(value "\"$ENV{${name}}\"")
-      else()
-        set(value "<unset>")
-      endif()
-      set(_name "ENV{${name}}")
-    else()
-      if(DEFINED "${name}")
-        set(value "\"${${name}}\"")
-      else()
-        set(value "<unset>")
-      endif()
-      set(_name "${name}")
-    endif()
-
-    _Boost_DEBUG_PRINT("${file}" "${line}" "${_name} = ${value}${source}")
-  endif()
-endfunction()
-
-############################################
-#
-# Check the existence of the libraries.
-#
-############################################
-# This macro was taken directly from the FindQt4.cmake file that is included
-# with the CMake distribution. This is NOT my work. All work was done by the
-# original authors of the FindQt4.cmake file. Only minor modifications were
-# made to remove references to Qt and make this file more generally applicable
-# And ELSE/ENDIF pairs were removed for readability.
-#########################################################################
-
-macro(_Boost_ADJUST_LIB_VARS basename)
-  if(Boost_INCLUDE_DIR )
-    if(Boost_${basename}_LIBRARY_DEBUG AND Boost_${basename}_LIBRARY_RELEASE)
-      # if the generator is multi-config or if CMAKE_BUILD_TYPE is set for
-      # single-config generators, set optimized and debug libraries
-      get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
-      if(_isMultiConfig OR CMAKE_BUILD_TYPE)
-        set(Boost_${basename}_LIBRARY optimized ${Boost_${basename}_LIBRARY_RELEASE} debug ${Boost_${basename}_LIBRARY_DEBUG})
-      else()
-        # For single-config generators where CMAKE_BUILD_TYPE has no value,
-        # just use the release libraries
-        set(Boost_${basename}_LIBRARY ${Boost_${basename}_LIBRARY_RELEASE} )
-      endif()
-      # FIXME: This probably should be set for both cases
-      set(Boost_${basename}_LIBRARIES optimized ${Boost_${basename}_LIBRARY_RELEASE} debug ${Boost_${basename}_LIBRARY_DEBUG})
-    endif()
-
-    # if only the release version was found, set the debug variable also to the release version
-    if(Boost_${basename}_LIBRARY_RELEASE AND NOT Boost_${basename}_LIBRARY_DEBUG)
-      set(Boost_${basename}_LIBRARY_DEBUG ${Boost_${basename}_LIBRARY_RELEASE})
-      set(Boost_${basename}_LIBRARY       ${Boost_${basename}_LIBRARY_RELEASE})
-      set(Boost_${basename}_LIBRARIES     ${Boost_${basename}_LIBRARY_RELEASE})
-    endif()
-
-    # if only the debug version was found, set the release variable also to the debug version
-    if(Boost_${basename}_LIBRARY_DEBUG AND NOT Boost_${basename}_LIBRARY_RELEASE)
-      set(Boost_${basename}_LIBRARY_RELEASE ${Boost_${basename}_LIBRARY_DEBUG})
-      set(Boost_${basename}_LIBRARY         ${Boost_${basename}_LIBRARY_DEBUG})
-      set(Boost_${basename}_LIBRARIES       ${Boost_${basename}_LIBRARY_DEBUG})
-    endif()
-
-    # If the debug & release library ends up being the same, omit the keywords
-    if("${Boost_${basename}_LIBRARY_RELEASE}" STREQUAL "${Boost_${basename}_LIBRARY_DEBUG}")
-      set(Boost_${basename}_LIBRARY   ${Boost_${basename}_LIBRARY_RELEASE} )
-      set(Boost_${basename}_LIBRARIES ${Boost_${basename}_LIBRARY_RELEASE} )
-    endif()
-
-    if(Boost_${basename}_LIBRARY AND Boost_${basename}_HEADER)
-      set(Boost_${basename}_FOUND ON)
-      if("x${basename}" STREQUAL "xTHREAD" AND NOT TARGET Threads::Threads)
-        string(APPEND Boost_ERROR_REASON_THREAD " (missing dependency: Threads)")
-        set(Boost_THREAD_FOUND OFF)
-      endif()
-    endif()
-
-  endif()
-  # Make variables changeable to the advanced user
-  mark_as_advanced(
-      Boost_${basename}_LIBRARY_RELEASE
-      Boost_${basename}_LIBRARY_DEBUG
-  )
-endmacro()
-
-# Detect changes in used variables.
-# Compares the current variable value with the last one.
-# In short form:
-# v != v_LAST                      -> CHANGED = 1
-# v is defined, v_LAST not         -> CHANGED = 1
-# v is not defined, but v_LAST is  -> CHANGED = 1
-# otherwise                        -> CHANGED = 0
-# CHANGED is returned in variable named ${changed_var}
-macro(_Boost_CHANGE_DETECT changed_var)
-  set(${changed_var} 0)
-  foreach(v ${ARGN})
-    if(DEFINED _Boost_COMPONENTS_SEARCHED)
-      if(${v})
-        if(_${v}_LAST)
-          string(COMPARE NOTEQUAL "${${v}}" "${_${v}_LAST}" _${v}_CHANGED)
-        else()
-          set(_${v}_CHANGED 1)
-        endif()
-      elseif(_${v}_LAST)
-        set(_${v}_CHANGED 1)
-      endif()
-      if(_${v}_CHANGED)
-        set(${changed_var} 1)
-      endif()
-    else()
-      set(_${v}_CHANGED 0)
-    endif()
-  endforeach()
-endmacro()
-
-#
-# Find the given library (var).
-# Use 'build_type' to support different lib paths for RELEASE or DEBUG builds
-#
-macro(_Boost_FIND_LIBRARY var build_type)
-
-  find_library(${var} ${ARGN})
-
-  if(${var})
-    # If this is the first library found then save Boost_LIBRARY_DIR_[RELEASE,DEBUG].
-    if(NOT Boost_LIBRARY_DIR_${build_type})
-      get_filename_component(_dir "${${var}}" PATH)
-      set(Boost_LIBRARY_DIR_${build_type} "${_dir}" CACHE PATH "Boost library directory ${build_type}" FORCE)
-    endif()
-  elseif(_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT)
-    # Try component-specific hints but do not save Boost_LIBRARY_DIR_[RELEASE,DEBUG].
-    find_library(${var} HINTS ${_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT} ${ARGN})
-  endif()
-
-  # If Boost_LIBRARY_DIR_[RELEASE,DEBUG] is known then search only there.
-  if(Boost_LIBRARY_DIR_${build_type})
-    set(_boost_LIBRARY_SEARCH_DIRS_${build_type} ${Boost_LIBRARY_DIR_${build_type}} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
-    _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
-                           "Boost_LIBRARY_DIR_${build_type}")
-    _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
-                           "_boost_LIBRARY_SEARCH_DIRS_${build_type}")
-  endif()
-endmacro()
-
-#-------------------------------------------------------------------------------
-
-# Convert CMAKE_CXX_COMPILER_VERSION to boost compiler suffix version.
-function(_Boost_COMPILER_DUMPVERSION _OUTPUT_VERSION _OUTPUT_VERSION_MAJOR _OUTPUT_VERSION_MINOR)
-  string(REGEX REPLACE "([0-9]+)\\.([0-9]+)(\\.[0-9]+)?" "\\1"
-    _boost_COMPILER_VERSION_MAJOR "${CMAKE_CXX_COMPILER_VERSION}")
-  string(REGEX REPLACE "([0-9]+)\\.([0-9]+)(\\.[0-9]+)?" "\\2"
-    _boost_COMPILER_VERSION_MINOR "${CMAKE_CXX_COMPILER_VERSION}")
-
-  set(_boost_COMPILER_VERSION "${_boost_COMPILER_VERSION_MAJOR}${_boost_COMPILER_VERSION_MINOR}")
-
-  set(${_OUTPUT_VERSION} ${_boost_COMPILER_VERSION} PARENT_SCOPE)
-  set(${_OUTPUT_VERSION_MAJOR} ${_boost_COMPILER_VERSION_MAJOR} PARENT_SCOPE)
-  set(${_OUTPUT_VERSION_MINOR} ${_boost_COMPILER_VERSION_MINOR} PARENT_SCOPE)
-endfunction()
-
-#
-# Take a list of libraries with "thread" in it
-# and prepend duplicates with "thread_${Boost_THREADAPI}"
-# at the front of the list
-#
-function(_Boost_PREPEND_LIST_WITH_THREADAPI _output)
-  set(_orig_libnames ${ARGN})
-  string(REPLACE "thread" "thread_${Boost_THREADAPI}" _threadapi_libnames "${_orig_libnames}")
-  set(${_output} ${_threadapi_libnames} ${_orig_libnames} PARENT_SCOPE)
-endfunction()
-
-#
-# If a library is found, replace its cache entry with its REALPATH
-#
-function(_Boost_SWAP_WITH_REALPATH _library _docstring)
-  if(${_library})
-    get_filename_component(_boost_filepathreal ${${_library}} REALPATH)
-    unset(${_library} CACHE)
-    set(${_library} ${_boost_filepathreal} CACHE FILEPATH "${_docstring}")
-  endif()
-endfunction()
-
-function(_Boost_CHECK_SPELLING _var)
-  if(${_var})
-    string(TOUPPER ${_var} _var_UC)
-    message(FATAL_ERROR "ERROR: ${_var} is not the correct spelling.  The proper spelling is ${_var_UC}.")
-  endif()
-endfunction()
-
-# Guesses Boost's compiler prefix used in built library names
-# Returns the guess by setting the variable pointed to by _ret
-function(_Boost_GUESS_COMPILER_PREFIX _ret)
-  if("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xIntel")
-    if(WIN32)
-      set (_boost_COMPILER "-iw")
-    else()
-      set (_boost_COMPILER "-il")
-    endif()
-  elseif (GHSMULTI)
-    set(_boost_COMPILER "-ghs")
-  elseif("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC" OR "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
-    if(MSVC_TOOLSET_VERSION GREATER_EQUAL 150)
-      # Not yet known.
-      set(_boost_COMPILER "")
-    elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 140)
-      # MSVC toolset 14.x versions are forward compatible.
-      set(_boost_COMPILER "")
-      foreach(v 9 8 7 6 5 4 3 2 1 0)
-        if(MSVC_TOOLSET_VERSION GREATER_EQUAL 14${v})
-          list(APPEND _boost_COMPILER "-vc14${v}")
-        endif()
-      endforeach()
-    elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 80)
-      set(_boost_COMPILER "-vc${MSVC_TOOLSET_VERSION}")
-    elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13.10)
-      set(_boost_COMPILER "-vc71")
-    elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13) # Good luck!
-      set(_boost_COMPILER "-vc7") # yes, this is correct
-    else() # VS 6.0 Good luck!
-      set(_boost_COMPILER "-vc6") # yes, this is correct
-    endif()
-
-    if("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xClang")
-      string(REPLACE "." ";" VERSION_LIST "${CMAKE_CXX_COMPILER_VERSION}")
-      list(GET VERSION_LIST 0 CLANG_VERSION_MAJOR)
-      set(_boost_COMPILER "-clangw${CLANG_VERSION_MAJOR};${_boost_COMPILER}")
-    endif()
-  elseif (BORLAND)
-    set(_boost_COMPILER "-bcb")
-  elseif(CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
-    set(_boost_COMPILER "-sw")
-  elseif(CMAKE_CXX_COMPILER_ID STREQUAL "XL")
-    set(_boost_COMPILER "-xlc")
-  elseif (MINGW)
-    if(Boost_VERSION_STRING VERSION_LESS 1.34)
-        set(_boost_COMPILER "-mgw") # no GCC version encoding prior to 1.34
-    else()
-      _Boost_COMPILER_DUMPVERSION(_boost_COMPILER_VERSION _boost_COMPILER_VERSION_MAJOR _boost_COMPILER_VERSION_MINOR)
-      if(Boost_VERSION_STRING VERSION_GREATER_EQUAL 1.73 AND _boost_COMPILER_VERSION_MAJOR VERSION_GREATER_EQUAL 5)
-        set(_boost_COMPILER "-mgw${_boost_COMPILER_VERSION_MAJOR}")
-      else()
-        set(_boost_COMPILER "-mgw${_boost_COMPILER_VERSION}")
-      endif()
-    endif()
-  elseif (UNIX)
-    _Boost_COMPILER_DUMPVERSION(_boost_COMPILER_VERSION _boost_COMPILER_VERSION_MAJOR _boost_COMPILER_VERSION_MINOR)
-    if(NOT Boost_VERSION_STRING VERSION_LESS 1.69.0)
-      # From GCC 5 and clang 4, versioning changes and minor becomes patch.
-      # For those compilers, patch is exclude from compiler tag in Boost 1.69+ library naming.
-      if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND _boost_COMPILER_VERSION_MAJOR VERSION_GREATER 4)
-        set(_boost_COMPILER_VERSION "${_boost_COMPILER_VERSION_MAJOR}")
-      elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND _boost_COMPILER_VERSION_MAJOR VERSION_GREATER 3)
-        set(_boost_COMPILER_VERSION "${_boost_COMPILER_VERSION_MAJOR}")
-      endif()
-    endif()
-
-    if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-      if(Boost_VERSION_STRING VERSION_LESS 1.34)
-        set(_boost_COMPILER "-gcc") # no GCC version encoding prior to 1.34
-      else()
-        # Determine which version of GCC we have.
-        if(APPLE)
-          if(Boost_VERSION_STRING VERSION_LESS 1.36.0)
-            # In Boost <= 1.35.0, there is no mangled compiler name for
-            # the macOS/Darwin version of GCC.
-            set(_boost_COMPILER "")
-          else()
-            # In Boost 1.36.0 and newer, the mangled compiler name used
-            # on macOS/Darwin is "xgcc".
-            set(_boost_COMPILER "-xgcc${_boost_COMPILER_VERSION}")
-          endif()
-        else()
-          set(_boost_COMPILER "-gcc${_boost_COMPILER_VERSION}")
-        endif()
-      endif()
-    elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
-      # TODO: Find out any Boost version constraints vs clang support.
-      set(_boost_COMPILER "-clang${_boost_COMPILER_VERSION}")
-    endif()
-  else()
-    set(_boost_COMPILER "")
-  endif()
-  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
-                         "_boost_COMPILER" SOURCE "guessed")
-  set(${_ret} ${_boost_COMPILER} PARENT_SCOPE)
-endfunction()
-
-#
-# Get component dependencies.  Requires the dependencies to have been
-# defined for the Boost release version.
-#
-# component - the component to check
-# _ret - list of library dependencies
-#
-function(_Boost_COMPONENT_DEPENDENCIES component _ret)
-  # Note: to add a new Boost release, run
-  #
-  #   % cmake -DBOOST_DIR=/path/to/boost/source -P Utilities/Scripts/BoostScanDeps.cmake
-  #
-  # The output may be added in a new block below.  If it's the same as
-  # the previous release, simply update the version range of the block
-  # for the previous release.  Also check if any new components have
-  # been added, and add any new components to
-  # _Boost_COMPONENT_HEADERS.
-  #
-  # This information was originally generated by running
-  # BoostScanDeps.cmake against every boost release to date supported
-  # by FindBoost:
-  #
-  #   % for version in /path/to/boost/sources/*
-  #     do
-  #       cmake -DBOOST_DIR=$version -P Utilities/Scripts/BoostScanDeps.cmake
-  #     done
-  #
-  # The output was then updated by search and replace with these regexes:
-  #
-  # - Strip message(STATUS) prefix dashes
-  #   s;^-- ;;
-  # - Indent
-  #   s;^set(;    set(;;
-  # - Add conditionals
-  #   s;Scanning /path/to/boost/sources/boost_\(.*\)_\(.*\)_\(.*);  elseif(NOT Boost_VERSION_STRING VERSION_LESS \1\.\2\.\3 AND Boost_VERSION_STRING VERSION_LESS xxxx);
-  #
-  # This results in the logic seen below, but will require the xxxx
-  # replacing with the following Boost release version (or the next
-  # minor version to be released, e.g. 1.59 was the latest at the time
-  # of writing, making 1.60 the next. Identical consecutive releases
-  # were then merged together by updating the end range of the first
-  # block and removing the following redundant blocks.
-  #
-  # Running the script against all historical releases should be
-  # required only if the BoostScanDeps.cmake script logic is changed.
-  # The addition of a new release should only require it to be run
-  # against the new release.
-
-  # Handle Python version suffixes
-  if(component MATCHES "^(python|mpi_python|numpy)([0-9][0-9]?|[0-9]\\.[0-9])\$")
-    set(component "${CMAKE_MATCH_1}")
-    set(component_python_version "${CMAKE_MATCH_2}")
-  endif()
-
-  set(_Boost_IMPORTED_TARGETS TRUE)
-  if(Boost_VERSION_STRING)
-    if(Boost_VERSION_STRING VERSION_LESS 1.33.0)
-      message(WARNING "Imported targets and dependency information not available for Boost version ${Boost_VERSION_STRING} (all versions older than 1.33)")
-      set(_Boost_IMPORTED_TARGETS FALSE)
-    elseif(Boost_VERSION_STRING VERSION_LESS 1.35.0)
-      set(_Boost_IOSTREAMS_DEPENDENCIES regex thread)
-      set(_Boost_REGEX_DEPENDENCIES thread)
-      set(_Boost_WAVE_DEPENDENCIES filesystem thread)
-      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
-    elseif(Boost_VERSION_STRING VERSION_LESS 1.36.0)
-      set(_Boost_FILESYSTEM_DEPENDENCIES system)
-      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
-      set(_Boost_MPI_DEPENDENCIES serialization)
-      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
-      set(_Boost_WAVE_DEPENDENCIES filesystem system thread)
-      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
-    elseif(Boost_VERSION_STRING VERSION_LESS 1.38.0)
-      set(_Boost_FILESYSTEM_DEPENDENCIES system)
-      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
-      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l)
-      set(_Boost_MPI_DEPENDENCIES serialization)
-      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
-      set(_Boost_WAVE_DEPENDENCIES filesystem system thread)
-      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
-    elseif(Boost_VERSION_STRING VERSION_LESS 1.43.0)
-      set(_Boost_FILESYSTEM_DEPENDENCIES system)
-      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
-      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l)
-      set(_Boost_MPI_DEPENDENCIES serialization)
-      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
-      set(_Boost_THREAD_DEPENDENCIES date_time)
-      set(_Boost_WAVE_DEPENDENCIES filesystem system thread date_time)
-      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
-    elseif(Boost_VERSION_STRING VERSION_LESS 1.44.0)
-      set(_Boost_FILESYSTEM_DEPENDENCIES system)
-      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
-      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l random)
-      set(_Boost_MPI_DEPENDENCIES serialization)
-      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
-      set(_Boost_THREAD_DEPENDENCIES date_time)
-      set(_Boost_WAVE_DEPENDENCIES filesystem system thread date_time)
-      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
-    elseif(Boost_VERSION_STRING VERSION_LESS 1.45.0)
-      set(_Boost_FILESYSTEM_DEPENDENCIES system)
-      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
-      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l random serialization)
-      set(_Boost_MPI_DEPENDENCIES serialization)
-      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
-      set(_Boost_THREAD_DEPENDENCIES date_time)
-      set(_Boost_WAVE_DEPENDENCIES serialization filesystem system thread date_time)
-      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
-    elseif(Boost_VERSION_STRING VERSION_LESS 1.47.0)
-      set(_Boost_FILESYSTEM_DEPENDENCIES system)
-      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
-      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l random)
-      set(_Boost_MPI_DEPENDENCIES serialization)
-      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
-      set(_Boost_THREAD_DEPENDENCIES date_time)
-      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread date_time)
-      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
-    elseif(Boost_VERSION_STRING VERSION_LESS 1.48.0)
-      set(_Boost_CHRONO_DEPENDENCIES system)
-      set(_Boost_FILESYSTEM_DEPENDENCIES system)
-      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
-      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l random)
-      set(_Boost_MPI_DEPENDENCIES serialization)
-      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
-      set(_Boost_THREAD_DEPENDENCIES date_time)
-      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread date_time)
-      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
-    elseif(Boost_VERSION_STRING VERSION_LESS 1.50.0)
-      set(_Boost_CHRONO_DEPENDENCIES system)
-      set(_Boost_FILESYSTEM_DEPENDENCIES system)
-      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
-      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l random)
-      set(_Boost_MPI_DEPENDENCIES serialization)
-      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
-      set(_Boost_THREAD_DEPENDENCIES date_time)
-      set(_Boost_TIMER_DEPENDENCIES chrono system)
-      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread date_time)
-      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
-    elseif(Boost_VERSION_STRING VERSION_LESS 1.53.0)
-      set(_Boost_CHRONO_DEPENDENCIES system)
-      set(_Boost_FILESYSTEM_DEPENDENCIES system)
-      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
-      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l regex random)
-      set(_Boost_MPI_DEPENDENCIES serialization)
-      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
-      set(_Boost_THREAD_DEPENDENCIES chrono system date_time)
-      set(_Boost_TIMER_DEPENDENCIES chrono system)
-      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time)
-      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
-    elseif(Boost_VERSION_STRING VERSION_LESS 1.54.0)
-      set(_Boost_ATOMIC_DEPENDENCIES thread chrono system date_time)
-      set(_Boost_CHRONO_DEPENDENCIES system)
-      set(_Boost_FILESYSTEM_DEPENDENCIES system)
-      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
-      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l regex random)
-      set(_Boost_MPI_DEPENDENCIES serialization)
-      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
-      set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
-      set(_Boost_TIMER_DEPENDENCIES chrono system)
-      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time)
-      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
-    elseif(Boost_VERSION_STRING VERSION_LESS 1.55.0)
-      set(_Boost_ATOMIC_DEPENDENCIES thread chrono system date_time)
-      set(_Boost_CHRONO_DEPENDENCIES system)
-      set(_Boost_FILESYSTEM_DEPENDENCIES system)
-      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
-      set(_Boost_LOG_DEPENDENCIES log_setup date_time system filesystem thread regex chrono)
-      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l regex random)
-      set(_Boost_MPI_DEPENDENCIES serialization)
-      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
-      set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
-      set(_Boost_TIMER_DEPENDENCIES chrono system)
-      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
-      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
-    elseif(Boost_VERSION_STRING VERSION_LESS 1.56.0)
-      set(_Boost_CHRONO_DEPENDENCIES system)
-      set(_Boost_COROUTINE_DEPENDENCIES context system)
-      set(_Boost_FILESYSTEM_DEPENDENCIES system)
-      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
-      set(_Boost_LOG_DEPENDENCIES log_setup date_time system filesystem thread regex chrono)
-      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l regex random)
-      set(_Boost_MPI_DEPENDENCIES serialization)
-      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
-      set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
-      set(_Boost_TIMER_DEPENDENCIES chrono system)
-      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
-      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
-    elseif(Boost_VERSION_STRING VERSION_LESS 1.59.0)
-      set(_Boost_CHRONO_DEPENDENCIES system)
-      set(_Boost_COROUTINE_DEPENDENCIES context system)
-      set(_Boost_FILESYSTEM_DEPENDENCIES system)
-      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
-      set(_Boost_LOG_DEPENDENCIES log_setup date_time system filesystem thread regex chrono)
-      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
-      set(_Boost_MPI_DEPENDENCIES serialization)
-      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
-      set(_Boost_RANDOM_DEPENDENCIES system)
-      set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
-      set(_Boost_TIMER_DEPENDENCIES chrono system)
-      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
-      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
-    elseif(Boost_VERSION_STRING VERSION_LESS 1.60.0)
-      set(_Boost_CHRONO_DEPENDENCIES system)
-      set(_Boost_COROUTINE_DEPENDENCIES context system)
-      set(_Boost_FILESYSTEM_DEPENDENCIES system)
-      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
-      set(_Boost_LOG_DEPENDENCIES log_setup date_time system filesystem thread regex chrono atomic)
-      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
-      set(_Boost_MPI_DEPENDENCIES serialization)
-      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
-      set(_Boost_RANDOM_DEPENDENCIES system)
-      set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
-      set(_Boost_TIMER_DEPENDENCIES chrono system)
-      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
-      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
-    elseif(Boost_VERSION_STRING VERSION_LESS 1.61.0)
-      set(_Boost_CHRONO_DEPENDENCIES system)
-      set(_Boost_COROUTINE_DEPENDENCIES context system)
-      set(_Boost_FILESYSTEM_DEPENDENCIES system)
-      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
-      set(_Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic)
-      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
-      set(_Boost_MPI_DEPENDENCIES serialization)
-      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
-      set(_Boost_RANDOM_DEPENDENCIES system)
-      set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
-      set(_Boost_TIMER_DEPENDENCIES chrono system)
-      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
-      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
-    elseif(Boost_VERSION_STRING VERSION_LESS 1.62.0)
-      set(_Boost_CHRONO_DEPENDENCIES system)
-      set(_Boost_CONTEXT_DEPENDENCIES thread chrono system date_time)
-      set(_Boost_COROUTINE_DEPENDENCIES context system)
-      set(_Boost_FILESYSTEM_DEPENDENCIES system)
-      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
-      set(_Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic)
-      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
-      set(_Boost_MPI_DEPENDENCIES serialization)
-      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
-      set(_Boost_RANDOM_DEPENDENCIES system)
-      set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
-      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
-      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
-    elseif(Boost_VERSION_STRING VERSION_LESS 1.63.0)
-      set(_Boost_CHRONO_DEPENDENCIES system)
-      set(_Boost_CONTEXT_DEPENDENCIES thread chrono system date_time)
-      set(_Boost_COROUTINE_DEPENDENCIES context system)
-      set(_Boost_FIBER_DEPENDENCIES context thread chrono system date_time)
-      set(_Boost_FILESYSTEM_DEPENDENCIES system)
-      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
-      set(_Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic)
-      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
-      set(_Boost_MPI_DEPENDENCIES serialization)
-      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
-      set(_Boost_RANDOM_DEPENDENCIES system)
-      set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
-      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
-      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
-    elseif(Boost_VERSION_STRING VERSION_LESS 1.65.0)
-      set(_Boost_CHRONO_DEPENDENCIES system)
-      set(_Boost_CONTEXT_DEPENDENCIES thread chrono system date_time)
-      set(_Boost_COROUTINE_DEPENDENCIES context system)
-      set(_Boost_COROUTINE2_DEPENDENCIES context fiber thread chrono system date_time)
-      set(_Boost_FIBER_DEPENDENCIES context thread chrono system date_time)
-      set(_Boost_FILESYSTEM_DEPENDENCIES system)
-      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
-      set(_Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic)
-      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
-      set(_Boost_MPI_DEPENDENCIES serialization)
-      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
-      set(_Boost_RANDOM_DEPENDENCIES system)
-      set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
-      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
-      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
-    elseif(Boost_VERSION_STRING VERSION_LESS 1.67.0)
-      set(_Boost_CHRONO_DEPENDENCIES system)
-      set(_Boost_CONTEXT_DEPENDENCIES thread chrono system date_time)
-      set(_Boost_COROUTINE_DEPENDENCIES context system)
-      set(_Boost_FIBER_DEPENDENCIES context thread chrono system date_time)
-      set(_Boost_FILESYSTEM_DEPENDENCIES system)
-      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
-      set(_Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic)
-      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
-      set(_Boost_MPI_DEPENDENCIES serialization)
-      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
-      set(_Boost_NUMPY_DEPENDENCIES python${component_python_version})
-      set(_Boost_RANDOM_DEPENDENCIES system)
-      set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
-      set(_Boost_TIMER_DEPENDENCIES chrono system)
-      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
-      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
-    elseif(Boost_VERSION_STRING VERSION_LESS 1.68.0)
-      set(_Boost_CHRONO_DEPENDENCIES system)
-      set(_Boost_CONTEXT_DEPENDENCIES thread chrono system date_time)
-      set(_Boost_COROUTINE_DEPENDENCIES context system)
-      set(_Boost_FIBER_DEPENDENCIES context thread chrono system date_time)
-      set(_Boost_FILESYSTEM_DEPENDENCIES system)
-      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
-      set(_Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic)
-      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
-      set(_Boost_MPI_DEPENDENCIES serialization)
-      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
-      set(_Boost_NUMPY_DEPENDENCIES python${component_python_version})
-      set(_Boost_RANDOM_DEPENDENCIES system)
-      set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
-      set(_Boost_TIMER_DEPENDENCIES chrono system)
-      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
-      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
-    elseif(Boost_VERSION_STRING VERSION_LESS 1.69.0)
-      set(_Boost_CHRONO_DEPENDENCIES system)
-      set(_Boost_CONTEXT_DEPENDENCIES thread chrono system date_time)
-      set(_Boost_CONTRACT_DEPENDENCIES thread chrono system date_time)
-      set(_Boost_COROUTINE_DEPENDENCIES context system)
-      set(_Boost_FIBER_DEPENDENCIES context thread chrono system date_time)
-      set(_Boost_FILESYSTEM_DEPENDENCIES system)
-      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
-      set(_Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic)
-      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
-      set(_Boost_MPI_DEPENDENCIES serialization)
-      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
-      set(_Boost_NUMPY_DEPENDENCIES python${component_python_version})
-      set(_Boost_RANDOM_DEPENDENCIES system)
-      set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
-      set(_Boost_TIMER_DEPENDENCIES chrono system)
-      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
-      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
-    elseif(Boost_VERSION_STRING VERSION_LESS 1.70.0)
-      set(_Boost_CONTRACT_DEPENDENCIES thread chrono date_time)
-      set(_Boost_COROUTINE_DEPENDENCIES context)
-      set(_Boost_FIBER_DEPENDENCIES context)
-      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
-      set(_Boost_LOG_DEPENDENCIES date_time log_setup filesystem thread regex chrono atomic)
-      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
-      set(_Boost_MPI_DEPENDENCIES serialization)
-      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
-      set(_Boost_NUMPY_DEPENDENCIES python${component_python_version})
-      set(_Boost_THREAD_DEPENDENCIES chrono date_time atomic)
-      set(_Boost_TIMER_DEPENDENCIES chrono system)
-      set(_Boost_WAVE_DEPENDENCIES filesystem serialization thread chrono date_time atomic)
-      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
-    elseif(Boost_VERSION_STRING VERSION_LESS 1.72.0)
-      set(_Boost_CONTRACT_DEPENDENCIES thread chrono date_time)
-      set(_Boost_COROUTINE_DEPENDENCIES context)
-      set(_Boost_FIBER_DEPENDENCIES context)
-      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
-      set(_Boost_LOG_DEPENDENCIES date_time log_setup filesystem thread regex chrono atomic)
-      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
-      set(_Boost_MPI_DEPENDENCIES serialization)
-      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
-      set(_Boost_NUMPY_DEPENDENCIES python${component_python_version})
-      set(_Boost_THREAD_DEPENDENCIES chrono date_time atomic)
-      set(_Boost_TIMER_DEPENDENCIES chrono)
-      set(_Boost_WAVE_DEPENDENCIES filesystem serialization thread chrono date_time atomic)
-      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
-    elseif(Boost_VERSION_STRING VERSION_LESS 1.73.0)
-      set(_Boost_CONTRACT_DEPENDENCIES thread chrono date_time)
-      set(_Boost_COROUTINE_DEPENDENCIES context)
-      set(_Boost_FIBER_DEPENDENCIES context)
-      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
-      set(_Boost_LOG_DEPENDENCIES date_time log_setup filesystem thread regex chrono atomic)
-      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l chrono atomic)
-      set(_Boost_MPI_DEPENDENCIES serialization)
-      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
-      set(_Boost_NUMPY_DEPENDENCIES python${component_python_version})
-      set(_Boost_THREAD_DEPENDENCIES chrono date_time atomic)
-      set(_Boost_TIMER_DEPENDENCIES chrono)
-      set(_Boost_WAVE_DEPENDENCIES filesystem serialization thread chrono date_time atomic)
-      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
-    else()
-      set(_Boost_CONTRACT_DEPENDENCIES thread chrono date_time)
-      set(_Boost_COROUTINE_DEPENDENCIES context)
-      set(_Boost_FIBER_DEPENDENCIES context)
-      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
-      set(_Boost_LOG_DEPENDENCIES date_time log_setup filesystem thread regex chrono atomic)
-      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
-      set(_Boost_MPI_DEPENDENCIES serialization)
-      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
-      set(_Boost_NUMPY_DEPENDENCIES python${component_python_version})
-      set(_Boost_THREAD_DEPENDENCIES chrono date_time atomic)
-      set(_Boost_TIMER_DEPENDENCIES chrono)
-      set(_Boost_WAVE_DEPENDENCIES filesystem serialization thread chrono date_time atomic)
-      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
-      if(Boost_VERSION_STRING VERSION_GREATER_EQUAL 1.74.0)
-        message(WARNING "New Boost version may have incorrect or missing dependencies and imported targets")
-      endif()
-    endif()
-  endif()
-
-  string(TOUPPER ${component} uppercomponent)
-  set(${_ret} ${_Boost_${uppercomponent}_DEPENDENCIES} PARENT_SCOPE)
-  set(_Boost_IMPORTED_TARGETS ${_Boost_IMPORTED_TARGETS} PARENT_SCOPE)
-
-  string(REGEX REPLACE ";" " " _boost_DEPS_STRING "${_Boost_${uppercomponent}_DEPENDENCIES}")
-  if (NOT _boost_DEPS_STRING)
-    set(_boost_DEPS_STRING "(none)")
-  endif()
-  # message(STATUS "Dependencies for Boost::${component}: ${_boost_DEPS_STRING}")
-endfunction()
-
-#
-# Get component headers.  This is the primary header (or headers) for
-# a given component, and is used to check that the headers are present
-# as well as the library itself as an extra sanity check of the build
-# environment.
-#
-# component - the component to check
-# _hdrs
-#
-function(_Boost_COMPONENT_HEADERS component _hdrs)
-  # Handle Python version suffixes
-  if(component MATCHES "^(python|mpi_python|numpy)([0-9][0-9]?|[0-9]\\.[0-9])\$")
-    set(component "${CMAKE_MATCH_1}")
-    set(component_python_version "${CMAKE_MATCH_2}")
-  endif()
-
-  # Note: new boost components will require adding here.  The header
-  # must be present in all versions of Boost providing a library.
-  set(_Boost_ATOMIC_HEADERS              "boost/atomic.hpp")
-  set(_Boost_CHRONO_HEADERS              "boost/chrono.hpp")
-  set(_Boost_CONTAINER_HEADERS           "boost/container/container_fwd.hpp")
-  set(_Boost_CONTRACT_HEADERS            "boost/contract.hpp")
-  if(Boost_VERSION_STRING VERSION_LESS 1.61.0)
-    set(_Boost_CONTEXT_HEADERS           "boost/context/all.hpp")
-  else()
-    set(_Boost_CONTEXT_HEADERS           "boost/context/detail/fcontext.hpp")
-  endif()
-  set(_Boost_COROUTINE_HEADERS           "boost/coroutine/all.hpp")
-  set(_Boost_DATE_TIME_HEADERS           "boost/date_time/date.hpp")
-  set(_Boost_EXCEPTION_HEADERS           "boost/exception/exception.hpp")
-  set(_Boost_FIBER_HEADERS               "boost/fiber/all.hpp")
-  set(_Boost_FILESYSTEM_HEADERS          "boost/filesystem/path.hpp")
-  set(_Boost_GRAPH_HEADERS               "boost/graph/adjacency_list.hpp")
-  set(_Boost_GRAPH_PARALLEL_HEADERS      "boost/graph/adjacency_list.hpp")
-  set(_Boost_IOSTREAMS_HEADERS           "boost/iostreams/stream.hpp")
-  set(_Boost_LOCALE_HEADERS              "boost/locale.hpp")
-  set(_Boost_LOG_HEADERS                 "boost/log/core.hpp")
-  set(_Boost_LOG_SETUP_HEADERS           "boost/log/detail/setup_config.hpp")
-  set(_Boost_MATH_HEADERS                "boost/math_fwd.hpp")
-  set(_Boost_MATH_C99_HEADERS            "boost/math/tr1.hpp")
-  set(_Boost_MATH_C99F_HEADERS           "boost/math/tr1.hpp")
-  set(_Boost_MATH_C99L_HEADERS           "boost/math/tr1.hpp")
-  set(_Boost_MATH_TR1_HEADERS            "boost/math/tr1.hpp")
-  set(_Boost_MATH_TR1F_HEADERS           "boost/math/tr1.hpp")
-  set(_Boost_MATH_TR1L_HEADERS           "boost/math/tr1.hpp")
-  set(_Boost_MPI_HEADERS                 "boost/mpi.hpp")
-  set(_Boost_MPI_PYTHON_HEADERS          "boost/mpi/python/config.hpp")
-  set(_Boost_NUMPY_HEADERS               "boost/python/numpy.hpp")
-  set(_Boost_NOWIDE_HEADERS              "boost/nowide/cstdlib.hpp")
-  set(_Boost_PRG_EXEC_MONITOR_HEADERS    "boost/test/prg_exec_monitor.hpp")
-  set(_Boost_PROGRAM_OPTIONS_HEADERS     "boost/program_options.hpp")
-  set(_Boost_PYTHON_HEADERS              "boost/python.hpp")
-  set(_Boost_RANDOM_HEADERS              "boost/random.hpp")
-  set(_Boost_REGEX_HEADERS               "boost/regex.hpp")
-  set(_Boost_SERIALIZATION_HEADERS       "boost/serialization/serialization.hpp")
-  set(_Boost_SIGNALS_HEADERS             "boost/signals.hpp")
-  set(_Boost_STACKTRACE_ADDR2LINE_HEADERS "boost/stacktrace.hpp")
-  set(_Boost_STACKTRACE_BACKTRACE_HEADERS "boost/stacktrace.hpp")
-  set(_Boost_STACKTRACE_BASIC_HEADERS    "boost/stacktrace.hpp")
-  set(_Boost_STACKTRACE_NOOP_HEADERS     "boost/stacktrace.hpp")
-  set(_Boost_STACKTRACE_WINDBG_CACHED_HEADERS "boost/stacktrace.hpp")
-  set(_Boost_STACKTRACE_WINDBG_HEADERS   "boost/stacktrace.hpp")
-  set(_Boost_SYSTEM_HEADERS              "boost/system/config.hpp")
-  set(_Boost_TEST_EXEC_MONITOR_HEADERS   "boost/test/test_exec_monitor.hpp")
-  set(_Boost_THREAD_HEADERS              "boost/thread.hpp")
-  set(_Boost_TIMER_HEADERS               "boost/timer.hpp")
-  set(_Boost_TYPE_ERASURE_HEADERS        "boost/type_erasure/config.hpp")
-  set(_Boost_UNIT_TEST_FRAMEWORK_HEADERS "boost/test/framework.hpp")
-  set(_Boost_WAVE_HEADERS                "boost/wave.hpp")
-  set(_Boost_WSERIALIZATION_HEADERS      "boost/archive/text_wiarchive.hpp")
-  if(WIN32)
-    set(_Boost_BZIP2_HEADERS             "boost/iostreams/filter/bzip2.hpp")
-    set(_Boost_ZLIB_HEADERS              "boost/iostreams/filter/zlib.hpp")
-  endif()
-
-  string(TOUPPER ${component} uppercomponent)
-  set(${_hdrs} ${_Boost_${uppercomponent}_HEADERS} PARENT_SCOPE)
-
-  string(REGEX REPLACE ";" " " _boost_HDRS_STRING "${_Boost_${uppercomponent}_HEADERS}")
-  if (NOT _boost_HDRS_STRING)
-    set(_boost_HDRS_STRING "(none)")
-  endif()
-  # message(STATUS "Headers for Boost::${component}: ${_boost_HDRS_STRING}")
-endfunction()
-
-#
-# Determine if any missing dependencies require adding to the component list.
-#
-# Sets _Boost_${COMPONENT}_DEPENDENCIES for each required component,
-# plus _Boost_IMPORTED_TARGETS (TRUE if imported targets should be
-# defined; FALSE if dependency information is unavailable).
-#
-# componentvar - the component list variable name
-# extravar - the indirect dependency list variable name
-#
-#
-function(_Boost_MISSING_DEPENDENCIES componentvar extravar)
-  # _boost_unprocessed_components - list of components requiring processing
-  # _boost_processed_components - components already processed (or currently being processed)
-  # _boost_new_components - new components discovered for future processing
-  #
-  list(APPEND _boost_unprocessed_components ${${componentvar}})
-
-  while(_boost_unprocessed_components)
-    list(APPEND _boost_processed_components ${_boost_unprocessed_components})
-    foreach(component ${_boost_unprocessed_components})
-      string(TOUPPER ${component} uppercomponent)
-      set(${_ret} ${_Boost_${uppercomponent}_DEPENDENCIES} PARENT_SCOPE)
-      _Boost_COMPONENT_DEPENDENCIES("${component}" _Boost_${uppercomponent}_DEPENDENCIES)
-      set(_Boost_${uppercomponent}_DEPENDENCIES ${_Boost_${uppercomponent}_DEPENDENCIES} PARENT_SCOPE)
-      set(_Boost_IMPORTED_TARGETS ${_Boost_IMPORTED_TARGETS} PARENT_SCOPE)
-      foreach(componentdep ${_Boost_${uppercomponent}_DEPENDENCIES})
-        if (NOT ("${componentdep}" IN_LIST _boost_processed_components OR "${componentdep}" IN_LIST _boost_new_components))
-          list(APPEND _boost_new_components ${componentdep})
-        endif()
-      endforeach()
-    endforeach()
-    set(_boost_unprocessed_components ${_boost_new_components})
-    unset(_boost_new_components)
-  endwhile()
-  set(_boost_extra_components ${_boost_processed_components})
-  if(_boost_extra_components AND ${componentvar})
-    list(REMOVE_ITEM _boost_extra_components ${${componentvar}})
-  endif()
-  set(${componentvar} ${_boost_processed_components} PARENT_SCOPE)
-  set(${extravar} ${_boost_extra_components} PARENT_SCOPE)
-endfunction()
-
-#
-# Some boost libraries may require particular set of compler features.
-# The very first one was `boost::fiber` introduced in Boost 1.62.
-# One can check required compiler features of it in
-# - `${Boost_ROOT}/libs/fiber/build/Jamfile.v2`;
-# - `${Boost_ROOT}/libs/context/build/Jamfile.v2`.
-#
-# TODO (Re)Check compiler features on (every?) release ???
-# One may use the following command to get the files to check:
-#
-#   $ find . -name Jamfile.v2 | grep build | xargs grep -l cxx1
-#
-function(_Boost_COMPILER_FEATURES component _ret)
-  # Boost >= 1.62
-  if(NOT Boost_VERSION_STRING VERSION_LESS 1.62.0)
-    set(_Boost_FIBER_COMPILER_FEATURES
-        cxx_alias_templates
-        cxx_auto_type
-        cxx_constexpr
-        cxx_defaulted_functions
-        cxx_final
-        cxx_lambdas
-        cxx_noexcept
-        cxx_nullptr
-        cxx_rvalue_references
-        cxx_thread_local
-        cxx_variadic_templates
-    )
-    # Compiler feature for `context` same as for `fiber`.
-    set(_Boost_CONTEXT_COMPILER_FEATURES ${_Boost_FIBER_COMPILER_FEATURES})
-  endif()
-
-  # Boost Contract library available in >= 1.67
-  if(NOT Boost_VERSION_STRING VERSION_LESS 1.67.0)
-    # From `libs/contract/build/boost_contract_build.jam`
-    set(_Boost_CONTRACT_COMPILER_FEATURES
-        cxx_lambdas
-        cxx_variadic_templates
-    )
-  endif()
-
-  string(TOUPPER ${component} uppercomponent)
-  set(${_ret} ${_Boost_${uppercomponent}_COMPILER_FEATURES} PARENT_SCOPE)
-endfunction()
-
-#
-# Update library search directory hint variable with paths used by prebuilt boost binaries.
-#
-# Prebuilt windows binaries (https://sourceforge.net/projects/boost/files/boost-binaries/)
-# have library directories named using MSVC compiler version and architecture.
-# This function would append corresponding directories if MSVC is a current compiler,
-# so having `BOOST_ROOT` would be enough to specify to find everything.
-#
-function(_Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS componentlibvar basedir)
-  if("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC")
-    if(CMAKE_SIZEOF_VOID_P EQUAL 8)
-      set(_arch_suffix 64)
-    else()
-      set(_arch_suffix 32)
-    endif()
-    if(MSVC_TOOLSET_VERSION GREATER_EQUAL 150)
-      # Not yet known.
-    elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 140)
-      # MSVC toolset 14.x versions are forward compatible.
-      foreach(v 9 8 7 6 5 4 3 2 1 0)
-        if(MSVC_TOOLSET_VERSION GREATER_EQUAL 14${v})
-          list(APPEND ${componentlibvar} ${basedir}/lib${_arch_suffix}-msvc-14.${v})
-        endif()
-      endforeach()
-    elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 80)
-      math(EXPR _toolset_major_version "${MSVC_TOOLSET_VERSION} / 10")
-      list(APPEND ${componentlibvar} ${basedir}/lib${_arch_suffix}-msvc-${_toolset_major_version}.0)
-    endif()
-    set(${componentlibvar} ${${componentlibvar}} PARENT_SCOPE)
-  endif()
-endfunction()
-
-#
-# End functions/macros
-#
-#-------------------------------------------------------------------------------
-
-#-------------------------------------------------------------------------------
-# main.
-#-------------------------------------------------------------------------------
-
-
-# If the user sets Boost_LIBRARY_DIR, use it as the default for both
-# configurations.
-if(NOT Boost_LIBRARY_DIR_RELEASE AND Boost_LIBRARY_DIR)
-  set(Boost_LIBRARY_DIR_RELEASE "${Boost_LIBRARY_DIR}")
-endif()
-if(NOT Boost_LIBRARY_DIR_DEBUG AND Boost_LIBRARY_DIR)
-  set(Boost_LIBRARY_DIR_DEBUG   "${Boost_LIBRARY_DIR}")
-endif()
-
-if(NOT DEFINED Boost_USE_DEBUG_LIBS)
-  set(Boost_USE_DEBUG_LIBS TRUE)
-endif()
-if(NOT DEFINED Boost_USE_RELEASE_LIBS)
-  set(Boost_USE_RELEASE_LIBS TRUE)
-endif()
-if(NOT DEFINED Boost_USE_MULTITHREADED)
-  set(Boost_USE_MULTITHREADED TRUE)
-endif()
-if(NOT DEFINED Boost_USE_DEBUG_RUNTIME)
-  set(Boost_USE_DEBUG_RUNTIME TRUE)
-endif()
-
-# Check the version of Boost against the requested version.
-if(Boost_FIND_VERSION AND NOT Boost_FIND_VERSION_MINOR)
-  message(SEND_ERROR "When requesting a specific version of Boost, you must provide at least the major and minor version numbers, e.g., 1.34")
-endif()
-
-if(Boost_FIND_VERSION_EXACT)
-  # The version may appear in a directory with or without the patch
-  # level, even when the patch level is non-zero.
-  set(_boost_TEST_VERSIONS
-    "${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}.${Boost_FIND_VERSION_PATCH}"
-    "${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}")
-else()
-  # The user has not requested an exact version.  Among known
-  # versions, find those that are acceptable to the user request.
-  #
-  # Note: When adding a new Boost release, also update the dependency
-  # information in _Boost_COMPONENT_DEPENDENCIES and
-  # _Boost_COMPONENT_HEADERS.  See the instructions at the top of
-  # _Boost_COMPONENT_DEPENDENCIES.
-  set(_Boost_KNOWN_VERSIONS ${Boost_ADDITIONAL_VERSIONS}
-    "1.73.0" "1.73" "1.72.0" "1.72" "1.71.0" "1.71" "1.70.0" "1.70" "1.69.0" "1.69"
-    "1.68.0" "1.68" "1.67.0" "1.67" "1.66.0" "1.66" "1.65.1" "1.65.0" "1.65"
-    "1.64.0" "1.64" "1.63.0" "1.63" "1.62.0" "1.62" "1.61.0" "1.61" "1.60.0" "1.60"
-    "1.59.0" "1.59" "1.58.0" "1.58" "1.57.0" "1.57" "1.56.0" "1.56" "1.55.0" "1.55"
-    "1.54.0" "1.54" "1.53.0" "1.53" "1.52.0" "1.52" "1.51.0" "1.51"
-    "1.50.0" "1.50" "1.49.0" "1.49" "1.48.0" "1.48" "1.47.0" "1.47" "1.46.1"
-    "1.46.0" "1.46" "1.45.0" "1.45" "1.44.0" "1.44" "1.43.0" "1.43" "1.42.0" "1.42"
-    "1.41.0" "1.41" "1.40.0" "1.40" "1.39.0" "1.39" "1.38.0" "1.38" "1.37.0" "1.37"
-    "1.36.1" "1.36.0" "1.36" "1.35.1" "1.35.0" "1.35" "1.34.1" "1.34.0"
-    "1.34" "1.33.1" "1.33.0" "1.33")
-
-  set(_boost_TEST_VERSIONS)
-  if(Boost_FIND_VERSION)
-    set(_Boost_FIND_VERSION_SHORT "${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}")
-    # Select acceptable versions.
-    foreach(version ${_Boost_KNOWN_VERSIONS})
-      if(NOT "${version}" VERSION_LESS "${Boost_FIND_VERSION}")
-        # This version is high enough.
-        list(APPEND _boost_TEST_VERSIONS "${version}")
-      elseif("${version}.99" VERSION_EQUAL "${_Boost_FIND_VERSION_SHORT}.99")
-        # This version is a short-form for the requested version with
-        # the patch level dropped.
-        list(APPEND _boost_TEST_VERSIONS "${version}")
-      endif()
-    endforeach()
-  else()
-    # Any version is acceptable.
-    set(_boost_TEST_VERSIONS "${_Boost_KNOWN_VERSIONS}")
-  endif()
-endif()
-
-_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_TEST_VERSIONS")
-_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_USE_MULTITHREADED")
-_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_USE_STATIC_LIBS")
-_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_USE_STATIC_RUNTIME")
-_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_ADDITIONAL_VERSIONS")
-_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_NO_SYSTEM_PATHS")
-
-cmake_policy(GET CMP0074 _Boost_CMP0074)
-if(NOT "x${_Boost_CMP0074}x" STREQUAL "xNEWx")
-  _Boost_CHECK_SPELLING(Boost_ROOT)
-endif()
-unset(_Boost_CMP0074)
-_Boost_CHECK_SPELLING(Boost_LIBRARYDIR)
-_Boost_CHECK_SPELLING(Boost_INCLUDEDIR)
-
-# Collect environment variable inputs as hints.  Do not consider changes.
-foreach(v BOOSTROOT BOOST_ROOT BOOST_INCLUDEDIR BOOST_LIBRARYDIR)
-  set(_env $ENV{${v}})
-  if(_env)
-    file(TO_CMAKE_PATH "${_env}" _ENV_${v})
-  else()
-    set(_ENV_${v} "")
-  endif()
-endforeach()
-if(NOT _ENV_BOOST_ROOT AND _ENV_BOOSTROOT)
-  set(_ENV_BOOST_ROOT "${_ENV_BOOSTROOT}")
-endif()
-
-# Collect inputs and cached results.  Detect changes since the last run.
-if(NOT BOOST_ROOT AND BOOSTROOT)
-  set(BOOST_ROOT "${BOOSTROOT}")
-endif()
-set(_Boost_VARS_DIR
-  BOOST_ROOT
-  Boost_NO_SYSTEM_PATHS
-  )
-
-_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "BOOST_ROOT")
-_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "BOOST_ROOT" ENVIRONMENT)
-_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "BOOST_INCLUDEDIR")
-_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "BOOST_INCLUDEDIR" ENVIRONMENT)
-_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "BOOST_LIBRARYDIR")
-_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "BOOST_LIBRARYDIR" ENVIRONMENT)
-
-# ------------------------------------------------------------------------
-#  Search for Boost include DIR
-# ------------------------------------------------------------------------
-
-set(_Boost_VARS_INC BOOST_INCLUDEDIR Boost_INCLUDE_DIR Boost_ADDITIONAL_VERSIONS)
-_Boost_CHANGE_DETECT(_Boost_CHANGE_INCDIR ${_Boost_VARS_DIR} ${_Boost_VARS_INC})
-# Clear Boost_INCLUDE_DIR if it did not change but other input affecting the
-# location did.  We will find a new one based on the new inputs.
-if(_Boost_CHANGE_INCDIR AND NOT _Boost_INCLUDE_DIR_CHANGED)
-  unset(Boost_INCLUDE_DIR CACHE)
-endif()
-
-if(NOT Boost_INCLUDE_DIR)
-  set(_boost_INCLUDE_SEARCH_DIRS "")
-  if(BOOST_INCLUDEDIR)
-    list(APPEND _boost_INCLUDE_SEARCH_DIRS ${BOOST_INCLUDEDIR})
-  elseif(_ENV_BOOST_INCLUDEDIR)
-    list(APPEND _boost_INCLUDE_SEARCH_DIRS ${_ENV_BOOST_INCLUDEDIR})
-  endif()
-
-  if( BOOST_ROOT )
-    list(APPEND _boost_INCLUDE_SEARCH_DIRS ${BOOST_ROOT}/include ${BOOST_ROOT})
-  elseif( _ENV_BOOST_ROOT )
-    list(APPEND _boost_INCLUDE_SEARCH_DIRS ${_ENV_BOOST_ROOT}/include ${_ENV_BOOST_ROOT})
-  endif()
-
-  if( Boost_NO_SYSTEM_PATHS)
-    list(APPEND _boost_INCLUDE_SEARCH_DIRS NO_CMAKE_SYSTEM_PATH NO_SYSTEM_ENVIRONMENT_PATH)
-  else()
-    if("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC")
-      foreach(ver ${_boost_TEST_VERSIONS})
-        string(REPLACE "." "_" ver "${ver}")
-        list(APPEND _boost_INCLUDE_SEARCH_DIRS PATHS "C:/local/boost_${ver}")
-      endforeach()
-    endif()
-    list(APPEND _boost_INCLUDE_SEARCH_DIRS PATHS
-      C:/boost/include
-      C:/boost
-      /sw/local/include
-      )
-  endif()
-
-  # Try to find Boost by stepping backwards through the Boost versions
-  # we know about.
-  # Build a list of path suffixes for each version.
-  set(_boost_PATH_SUFFIXES)
-  foreach(_boost_VER ${_boost_TEST_VERSIONS})
-    # Add in a path suffix, based on the required version, ideally
-    # we could read this from version.hpp, but for that to work we'd
-    # need to know the include dir already
-    set(_boost_BOOSTIFIED_VERSION)
-
-    # Transform 1.35 => 1_35 and 1.36.0 => 1_36_0
-    if(_boost_VER MATCHES "([0-9]+)\\.([0-9]+)\\.([0-9]+)")
-        set(_boost_BOOSTIFIED_VERSION
-          "${CMAKE_MATCH_1}_${CMAKE_MATCH_2}_${CMAKE_MATCH_3}")
-    elseif(_boost_VER MATCHES "([0-9]+)\\.([0-9]+)")
-        set(_boost_BOOSTIFIED_VERSION
-          "${CMAKE_MATCH_1}_${CMAKE_MATCH_2}")
-    endif()
-
-    list(APPEND _boost_PATH_SUFFIXES
-      "boost-${_boost_BOOSTIFIED_VERSION}"
-      "boost_${_boost_BOOSTIFIED_VERSION}"
-      "boost/boost-${_boost_BOOSTIFIED_VERSION}"
-      "boost/boost_${_boost_BOOSTIFIED_VERSION}"
-      )
-
-  endforeach()
-
-  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_INCLUDE_SEARCH_DIRS")
-  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_PATH_SUFFIXES")
-
-  # Look for a standard boost header file.
-  find_path(Boost_INCLUDE_DIR
-    NAMES         boost/config.hpp
-    HINTS         ${_boost_INCLUDE_SEARCH_DIRS}
-    PATH_SUFFIXES ${_boost_PATH_SUFFIXES}
-    )
-endif()
-
-# ------------------------------------------------------------------------
-#  Extract version information from version.hpp
-# ------------------------------------------------------------------------
-
-if(Boost_INCLUDE_DIR)
-  _Boost_DEBUG_PRINT("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
-                     "location of version.hpp: ${Boost_INCLUDE_DIR}/boost/version.hpp")
-
-  # Extract Boost_VERSION_MACRO and Boost_LIB_VERSION from version.hpp
-  set(Boost_VERSION_MACRO 0)
-  set(Boost_LIB_VERSION "")
-  file(STRINGS "${Boost_INCLUDE_DIR}/boost/version.hpp" _boost_VERSION_HPP_CONTENTS REGEX "#define BOOST_(LIB_)?VERSION ")
-  if("${_boost_VERSION_HPP_CONTENTS}" MATCHES "#define BOOST_VERSION ([0-9]+)")
-    set(Boost_VERSION_MACRO "${CMAKE_MATCH_1}")
-  endif()
-  if("${_boost_VERSION_HPP_CONTENTS}" MATCHES "#define BOOST_LIB_VERSION \"([0-9_]+)\"")
-    set(Boost_LIB_VERSION "${CMAKE_MATCH_1}")
-  endif()
-  unset(_boost_VERSION_HPP_CONTENTS)
-
-  # Calculate version components
-  math(EXPR Boost_VERSION_MAJOR "${Boost_VERSION_MACRO} / 100000")
-  math(EXPR Boost_VERSION_MINOR "${Boost_VERSION_MACRO} / 100 % 1000")
-  math(EXPR Boost_VERSION_PATCH "${Boost_VERSION_MACRO} % 100")
-  set(Boost_VERSION_COUNT 3)
-
-  # Define alias variables for backwards compat.
-  set(Boost_MAJOR_VERSION ${Boost_VERSION_MAJOR})
-  set(Boost_MINOR_VERSION ${Boost_VERSION_MINOR})
-  set(Boost_SUBMINOR_VERSION ${Boost_VERSION_PATCH})
-
-  # Define Boost version in x.y.z format
-  set(Boost_VERSION_STRING "${Boost_VERSION_MAJOR}.${Boost_VERSION_MINOR}.${Boost_VERSION_PATCH}")
-
-  # Define final Boost_VERSION
-  cmake_policy(GET CMP0093 _Boost_CMP0093
-    PARENT_SCOPE # undocumented, do not use outside of CMake
-  )
-  if("x${_Boost_CMP0093}x" STREQUAL "xNEWx")
-    set(Boost_VERSION ${Boost_VERSION_STRING})
-  else()
-    set(Boost_VERSION ${Boost_VERSION_MACRO})
-  endif()
-  unset(_Boost_CMP0093)
-
-  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_VERSION")
-  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_VERSION_STRING")
-  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_VERSION_MACRO")
-  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_VERSION_MAJOR")
-  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_VERSION_MINOR")
-  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_VERSION_PATCH")
-  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_VERSION_COUNT")
-endif()
-
-# ------------------------------------------------------------------------
-#  Prefix initialization
-# ------------------------------------------------------------------------
-
-if ( NOT DEFINED Boost_LIB_PREFIX )
-  # Boost's static libraries use a "lib" prefix on DLL platforms
-  # to distinguish them from the DLL import libraries.
-  if (Boost_USE_STATIC_LIBS AND (
-      (WIN32 AND NOT CYGWIN)
-      OR GHSMULTI
-      ))
-    set(Boost_LIB_PREFIX "lib")
-  else()
-    set(Boost_LIB_PREFIX "")
-  endif()
-endif()
-
-if ( NOT Boost_NAMESPACE )
-  set(Boost_NAMESPACE "boost")
-endif()
-
-_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_LIB_PREFIX")
-_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_NAMESPACE")
-
-# ------------------------------------------------------------------------
-#  Suffix initialization and compiler suffix detection.
-# ------------------------------------------------------------------------
-
-set(_Boost_VARS_NAME
-  Boost_NAMESPACE
-  Boost_COMPILER
-  Boost_THREADAPI
-  Boost_USE_DEBUG_PYTHON
-  Boost_USE_MULTITHREADED
-  Boost_USE_STATIC_LIBS
-  Boost_USE_STATIC_RUNTIME
-  Boost_USE_STLPORT
-  Boost_USE_STLPORT_DEPRECATED_NATIVE_IOSTREAMS
-  )
-_Boost_CHANGE_DETECT(_Boost_CHANGE_LIBNAME ${_Boost_VARS_NAME})
-
-# Setting some more suffixes for the library
-if (Boost_COMPILER)
-  set(_boost_COMPILER ${Boost_COMPILER})
-  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
-                         "_boost_COMPILER" SOURCE "user-specified via Boost_COMPILER")
-else()
-  # Attempt to guess the compiler suffix
-  # NOTE: this is not perfect yet, if you experience any issues
-  # please report them and use the Boost_COMPILER variable
-  # to work around the problems.
-  _Boost_GUESS_COMPILER_PREFIX(_boost_COMPILER)
-endif()
-
-set (_boost_MULTITHREADED "-mt")
-if( NOT Boost_USE_MULTITHREADED )
-  set (_boost_MULTITHREADED "")
-endif()
-_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_MULTITHREADED")
-
-#======================
-# Systematically build up the Boost ABI tag for the 'tagged' and 'versioned' layouts
-# http://boost.org/doc/libs/1_66_0/more/getting_started/windows.html#library-naming
-# http://boost.org/doc/libs/1_66_0/boost/config/auto_link.hpp
-# http://boost.org/doc/libs/1_66_0/tools/build/src/tools/common.jam
-# http://boost.org/doc/libs/1_66_0/boostcpp.jam
-set( _boost_RELEASE_ABI_TAG "-")
-set( _boost_DEBUG_ABI_TAG   "-")
-# Key       Use this library when:
-#  s        linking statically to the C++ standard library and
-#           compiler runtime support libraries.
-if(Boost_USE_STATIC_RUNTIME)
-  set( _boost_RELEASE_ABI_TAG "${_boost_RELEASE_ABI_TAG}s")
-  set( _boost_DEBUG_ABI_TAG   "${_boost_DEBUG_ABI_TAG}s")
-endif()
-#  g        using debug versions of the standard and runtime
-#           support libraries
-if(WIN32 AND Boost_USE_DEBUG_RUNTIME)
-  if("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC"
-          OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xClang"
-          OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xIntel")
-    string(APPEND _boost_DEBUG_ABI_TAG "g")
-  endif()
-endif()
-#  y        using special debug build of python
-if(Boost_USE_DEBUG_PYTHON)
-  string(APPEND _boost_DEBUG_ABI_TAG "y")
-endif()
-#  d        using a debug version of your code
-string(APPEND _boost_DEBUG_ABI_TAG "d")
-#  p        using the STLport standard library rather than the
-#           default one supplied with your compiler
-if(Boost_USE_STLPORT)
-  string(APPEND _boost_RELEASE_ABI_TAG "p")
-  string(APPEND _boost_DEBUG_ABI_TAG "p")
-endif()
-#  n        using the STLport deprecated "native iostreams" feature
-#           removed from the documentation in 1.43.0 but still present in
-#           boost/config/auto_link.hpp
-if(Boost_USE_STLPORT_DEPRECATED_NATIVE_IOSTREAMS)
-  string(APPEND _boost_RELEASE_ABI_TAG "n")
-  string(APPEND _boost_DEBUG_ABI_TAG "n")
-endif()
-
-#  -x86     Architecture and address model tag
-#           First character is the architecture, then word-size, either 32 or 64
-#           Only used in 'versioned' layout, added in Boost 1.66.0
-if(DEFINED Boost_ARCHITECTURE)
-  set(_boost_ARCHITECTURE_TAG "${Boost_ARCHITECTURE}")
-  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
-                         "_boost_ARCHITECTURE_TAG" SOURCE "user-specified via Boost_ARCHITECTURE")
-else()
-  set(_boost_ARCHITECTURE_TAG "")
-  # {CMAKE_CXX_COMPILER_ARCHITECTURE_ID} is not currently set for all compilers
-  if(NOT "x${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "x" AND NOT Boost_VERSION_STRING VERSION_LESS 1.66.0)
-    string(APPEND _boost_ARCHITECTURE_TAG "-")
-    # This needs to be kept in-sync with the section of CMakePlatformId.h.in
-    # inside 'defined(_WIN32) && defined(_MSC_VER)'
-    if(CMAKE_CXX_COMPILER_ARCHITECTURE_ID STREQUAL "IA64")
-      string(APPEND _boost_ARCHITECTURE_TAG "i")
-    elseif(CMAKE_CXX_COMPILER_ARCHITECTURE_ID STREQUAL "X86"
-              OR CMAKE_CXX_COMPILER_ARCHITECTURE_ID STREQUAL "x64")
-      string(APPEND _boost_ARCHITECTURE_TAG "x")
-    elseif(CMAKE_CXX_COMPILER_ARCHITECTURE_ID MATCHES "^ARM")
-      string(APPEND _boost_ARCHITECTURE_TAG "a")
-    elseif(CMAKE_CXX_COMPILER_ARCHITECTURE_ID STREQUAL "MIPS")
-      string(APPEND _boost_ARCHITECTURE_TAG "m")
-    endif()
-
-    if(CMAKE_SIZEOF_VOID_P EQUAL 8)
-      string(APPEND _boost_ARCHITECTURE_TAG "64")
-    else()
-      string(APPEND _boost_ARCHITECTURE_TAG "32")
-    endif()
-  endif()
-  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
-                         "_boost_ARCHITECTURE_TAG" SOURCE "detected")
-endif()
-
-_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_RELEASE_ABI_TAG")
-_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_DEBUG_ABI_TAG")
-
-# ------------------------------------------------------------------------
-#  Begin finding boost libraries
-# ------------------------------------------------------------------------
-
-set(_Boost_VARS_LIB "")
-foreach(c DEBUG RELEASE)
-  set(_Boost_VARS_LIB_${c} BOOST_LIBRARYDIR Boost_LIBRARY_DIR_${c})
-  list(APPEND _Boost_VARS_LIB ${_Boost_VARS_LIB_${c}})
-  _Boost_CHANGE_DETECT(_Boost_CHANGE_LIBDIR_${c} ${_Boost_VARS_DIR} ${_Boost_VARS_LIB_${c}} Boost_INCLUDE_DIR)
-  # Clear Boost_LIBRARY_DIR_${c} if it did not change but other input affecting the
-  # location did.  We will find a new one based on the new inputs.
-  if(_Boost_CHANGE_LIBDIR_${c} AND NOT _Boost_LIBRARY_DIR_${c}_CHANGED)
-    unset(Boost_LIBRARY_DIR_${c} CACHE)
-  endif()
-
-  # If Boost_LIBRARY_DIR_[RELEASE,DEBUG] is set, prefer its value.
-  if(Boost_LIBRARY_DIR_${c})
-    set(_boost_LIBRARY_SEARCH_DIRS_${c} ${Boost_LIBRARY_DIR_${c}} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
-  else()
-    set(_boost_LIBRARY_SEARCH_DIRS_${c} "")
-    if(BOOST_LIBRARYDIR)
-      list(APPEND _boost_LIBRARY_SEARCH_DIRS_${c} ${BOOST_LIBRARYDIR})
-    elseif(_ENV_BOOST_LIBRARYDIR)
-      list(APPEND _boost_LIBRARY_SEARCH_DIRS_${c} ${_ENV_BOOST_LIBRARYDIR})
-    endif()
-
-    if(BOOST_ROOT)
-      list(APPEND _boost_LIBRARY_SEARCH_DIRS_${c} ${BOOST_ROOT}/lib ${BOOST_ROOT}/stage/lib)
-      _Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS(_boost_LIBRARY_SEARCH_DIRS_${c} "${BOOST_ROOT}")
-    elseif(_ENV_BOOST_ROOT)
-      list(APPEND _boost_LIBRARY_SEARCH_DIRS_${c} ${_ENV_BOOST_ROOT}/lib ${_ENV_BOOST_ROOT}/stage/lib)
-      _Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS(_boost_LIBRARY_SEARCH_DIRS_${c} "${_ENV_BOOST_ROOT}")
-    endif()
-
-    list(APPEND _boost_LIBRARY_SEARCH_DIRS_${c}
-      ${Boost_INCLUDE_DIR}/lib
-      ${Boost_INCLUDE_DIR}/../lib
-      ${Boost_INCLUDE_DIR}/stage/lib
-      )
-    _Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS(_boost_LIBRARY_SEARCH_DIRS_${c} "${Boost_INCLUDE_DIR}/..")
-    _Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS(_boost_LIBRARY_SEARCH_DIRS_${c} "${Boost_INCLUDE_DIR}")
-    if( Boost_NO_SYSTEM_PATHS )
-      list(APPEND _boost_LIBRARY_SEARCH_DIRS_${c} NO_CMAKE_SYSTEM_PATH NO_SYSTEM_ENVIRONMENT_PATH)
-    else()
-      foreach(ver ${_boost_TEST_VERSIONS})
-        string(REPLACE "." "_" ver "${ver}")
-        _Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS(_boost_LIBRARY_SEARCH_DIRS_${c} "C:/local/boost_${ver}")
-      endforeach()
-      _Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS(_boost_LIBRARY_SEARCH_DIRS_${c} "C:/boost")
-      list(APPEND _boost_LIBRARY_SEARCH_DIRS_${c} PATHS
-        C:/boost/lib
-        C:/boost
-        /sw/local/lib
-        )
-    endif()
-  endif()
-endforeach()
-
-_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_LIBRARY_SEARCH_DIRS_RELEASE")
-_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_LIBRARY_SEARCH_DIRS_DEBUG")
-
-# Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES
-if( Boost_USE_STATIC_LIBS )
-  set( _boost_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
-  if(WIN32)
-    list(INSERT CMAKE_FIND_LIBRARY_SUFFIXES 0 .lib .a)
-  else()
-    set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
-  endif()
-endif()
-
-# We want to use the tag inline below without risking double dashes
-if(_boost_RELEASE_ABI_TAG)
-  if(${_boost_RELEASE_ABI_TAG} STREQUAL "-")
-    set(_boost_RELEASE_ABI_TAG "")
-  endif()
-endif()
-if(_boost_DEBUG_ABI_TAG)
-  if(${_boost_DEBUG_ABI_TAG} STREQUAL "-")
-    set(_boost_DEBUG_ABI_TAG "")
-  endif()
-endif()
-
-# The previous behavior of FindBoost when Boost_USE_STATIC_LIBS was enabled
-# on WIN32 was to:
-#  1. Search for static libs compiled against a SHARED C++ standard runtime library (use if found)
-#  2. Search for static libs compiled against a STATIC C++ standard runtime library (use if found)
-# We maintain this behavior since changing it could break people's builds.
-# To disable the ambiguous behavior, the user need only
-# set Boost_USE_STATIC_RUNTIME either ON or OFF.
-set(_boost_STATIC_RUNTIME_WORKAROUND false)
-if(WIN32 AND Boost_USE_STATIC_LIBS)
-  if(NOT DEFINED Boost_USE_STATIC_RUNTIME)
-    set(_boost_STATIC_RUNTIME_WORKAROUND TRUE)
-  endif()
-endif()
-
-# On versions < 1.35, remove the System library from the considered list
-# since it wasn't added until 1.35.
-if(Boost_VERSION_STRING AND Boost_FIND_COMPONENTS)
-  if(Boost_VERSION_STRING VERSION_LESS 1.35.0)
-    list(REMOVE_ITEM Boost_FIND_COMPONENTS system)
-  endif()
-endif()
-
-# Additional components may be required via component dependencies.
-# Add any missing components to the list.
-_Boost_MISSING_DEPENDENCIES(Boost_FIND_COMPONENTS _Boost_EXTRA_FIND_COMPONENTS)
-
-# If thread is required, get the thread libs as a dependency
-if("thread" IN_LIST Boost_FIND_COMPONENTS)
-  if(Boost_FIND_QUIETLY)
-    set(_Boost_find_quiet QUIET)
-  else()
-    set(_Boost_find_quiet "")
-  endif()
-  find_package(Threads ${_Boost_find_quiet})
-  unset(_Boost_find_quiet)
-endif()
-
-# If the user changed any of our control inputs flush previous results.
-if(_Boost_CHANGE_LIBDIR_DEBUG OR _Boost_CHANGE_LIBDIR_RELEASE OR _Boost_CHANGE_LIBNAME)
-  foreach(COMPONENT ${_Boost_COMPONENTS_SEARCHED})
-    string(TOUPPER ${COMPONENT} UPPERCOMPONENT)
-    foreach(c DEBUG RELEASE)
-      set(_var Boost_${UPPERCOMPONENT}_LIBRARY_${c})
-      unset(${_var} CACHE)
-      set(${_var} "${_var}-NOTFOUND")
-    endforeach()
-  endforeach()
-  set(_Boost_COMPONENTS_SEARCHED "")
-endif()
-
-foreach(COMPONENT ${Boost_FIND_COMPONENTS})
-  string(TOUPPER ${COMPONENT} UPPERCOMPONENT)
-
-  set( _boost_docstring_release "Boost ${COMPONENT} library (release)")
-  set( _boost_docstring_debug   "Boost ${COMPONENT} library (debug)")
-
-  # Compute component-specific hints.
-  set(_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT "")
-  if(${COMPONENT} STREQUAL "mpi" OR ${COMPONENT} STREQUAL "mpi_python" OR
-     ${COMPONENT} STREQUAL "graph_parallel")
-    foreach(lib ${MPI_CXX_LIBRARIES} ${MPI_C_LIBRARIES})
-      if(IS_ABSOLUTE "${lib}")
-        get_filename_component(libdir "${lib}" PATH)
-        string(REPLACE "\\" "/" libdir "${libdir}")
-        list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT ${libdir})
-      endif()
-    endforeach()
-  endif()
-
-  # Handle Python version suffixes
-  unset(COMPONENT_PYTHON_VERSION_MAJOR)
-  unset(COMPONENT_PYTHON_VERSION_MINOR)
-  if(${COMPONENT} MATCHES "^(python|mpi_python|numpy)([0-9])\$")
-    set(COMPONENT_UNVERSIONED "${CMAKE_MATCH_1}")
-    set(COMPONENT_PYTHON_VERSION_MAJOR "${CMAKE_MATCH_2}")
-  elseif(${COMPONENT} MATCHES "^(python|mpi_python|numpy)([0-9])\\.?([0-9])\$")
-    set(COMPONENT_UNVERSIONED "${CMAKE_MATCH_1}")
-    set(COMPONENT_PYTHON_VERSION_MAJOR "${CMAKE_MATCH_2}")
-    set(COMPONENT_PYTHON_VERSION_MINOR "${CMAKE_MATCH_3}")
-  endif()
-
-  unset(_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME)
-  if (COMPONENT_PYTHON_VERSION_MINOR)
-    # Boost >= 1.67
-    list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}${COMPONENT_PYTHON_VERSION_MAJOR}${COMPONENT_PYTHON_VERSION_MINOR}")
-    # Debian/Ubuntu (Some versions omit the 2 and/or 3 from the suffix)
-    list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}${COMPONENT_PYTHON_VERSION_MAJOR}-py${COMPONENT_PYTHON_VERSION_MAJOR}${COMPONENT_PYTHON_VERSION_MINOR}")
-    list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}-py${COMPONENT_PYTHON_VERSION_MAJOR}${COMPONENT_PYTHON_VERSION_MINOR}")
-    # Gentoo
-    list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}-${COMPONENT_PYTHON_VERSION_MAJOR}.${COMPONENT_PYTHON_VERSION_MINOR}")
-    # RPMs
-    list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}-${COMPONENT_PYTHON_VERSION_MAJOR}${COMPONENT_PYTHON_VERSION_MINOR}")
-  endif()
-  if (COMPONENT_PYTHON_VERSION_MAJOR AND NOT COMPONENT_PYTHON_VERSION_MINOR)
-    # Boost < 1.67
-    list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}${COMPONENT_PYTHON_VERSION_MAJOR}")
-  endif()
-
-  # Consolidate and report component-specific hints.
-  if(_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME)
-    list(REMOVE_DUPLICATES _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME)
-    _Boost_DEBUG_PRINT("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
-      "Component-specific library search names for ${COMPONENT_NAME}: ${_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME}")
-  endif()
-  if(_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT)
-    list(REMOVE_DUPLICATES _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT)
-    _Boost_DEBUG_PRINT("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
-      "Component-specific library search paths for ${COMPONENT}: ${_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT}")
-  endif()
-
-  #
-  # Find headers
-  #
-  _Boost_COMPONENT_HEADERS("${COMPONENT}" Boost_${UPPERCOMPONENT}_HEADER_NAME)
-  # Look for a standard boost header file.
-  if(Boost_${UPPERCOMPONENT}_HEADER_NAME)
-    if(EXISTS "${Boost_INCLUDE_DIR}/${Boost_${UPPERCOMPONENT}_HEADER_NAME}")
-      set(Boost_${UPPERCOMPONENT}_HEADER ON)
-    else()
-      set(Boost_${UPPERCOMPONENT}_HEADER OFF)
-    endif()
-  else()
-    set(Boost_${UPPERCOMPONENT}_HEADER ON)
-    message(WARNING "No header defined for ${COMPONENT}; skipping header check "
-                    "(note: header-only libraries have no designated component)")
-  endif()
-
-  #
-  # Find RELEASE libraries
-  #
-  unset(_boost_RELEASE_NAMES)
-  foreach(component IN LISTS _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME COMPONENT)
-    foreach(compiler IN LISTS _boost_COMPILER)
-      list(APPEND _boost_RELEASE_NAMES
-        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
-        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}${_boost_ARCHITECTURE_TAG}
-        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG} )
-    endforeach()
-    list(APPEND _boost_RELEASE_NAMES
-      ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
-      ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}${_boost_ARCHITECTURE_TAG}
-      ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}
-      ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}
-      ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component} )
-    if(_boost_STATIC_RUNTIME_WORKAROUND)
-      set(_boost_RELEASE_STATIC_ABI_TAG "-s${_boost_RELEASE_ABI_TAG}")
-      foreach(compiler IN LISTS _boost_COMPILER)
-        list(APPEND _boost_RELEASE_NAMES
-          ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
-          ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG}${_boost_ARCHITECTURE_TAG}
-          ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG} )
-      endforeach()
-      list(APPEND _boost_RELEASE_NAMES
-        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
-        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG}${_boost_ARCHITECTURE_TAG}
-        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG} )
-    endif()
-  endforeach()
-  if(Boost_THREADAPI AND ${COMPONENT} STREQUAL "thread")
-    _Boost_PREPEND_LIST_WITH_THREADAPI(_boost_RELEASE_NAMES ${_boost_RELEASE_NAMES})
-  endif()
-  _Boost_DEBUG_PRINT("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
-                     "Searching for ${UPPERCOMPONENT}_LIBRARY_RELEASE: ${_boost_RELEASE_NAMES}")
-
-  # if Boost_LIBRARY_DIR_RELEASE is not defined,
-  # but Boost_LIBRARY_DIR_DEBUG is, look there first for RELEASE libs
-  if(NOT Boost_LIBRARY_DIR_RELEASE AND Boost_LIBRARY_DIR_DEBUG)
-    list(INSERT _boost_LIBRARY_SEARCH_DIRS_RELEASE 0 ${Boost_LIBRARY_DIR_DEBUG})
-  endif()
-
-  # Avoid passing backslashes to _Boost_FIND_LIBRARY due to macro re-parsing.
-  string(REPLACE "\\" "/" _boost_LIBRARY_SEARCH_DIRS_tmp "${_boost_LIBRARY_SEARCH_DIRS_RELEASE}")
-
-  if(Boost_USE_RELEASE_LIBS)
-    _Boost_FIND_LIBRARY(Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE RELEASE
-      NAMES ${_boost_RELEASE_NAMES}
-      HINTS ${_boost_LIBRARY_SEARCH_DIRS_tmp}
-      NAMES_PER_DIR
-      DOC "${_boost_docstring_release}"
-      )
-  endif()
-
-  #
-  # Find DEBUG libraries
-  #
-  unset(_boost_DEBUG_NAMES)
-  foreach(component IN LISTS _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME COMPONENT)
-    foreach(compiler IN LISTS _boost_COMPILER)
-      list(APPEND _boost_DEBUG_NAMES
-        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
-        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}${_boost_ARCHITECTURE_TAG}
-        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG} )
-    endforeach()
-    list(APPEND _boost_DEBUG_NAMES
-      ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
-      ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}${_boost_ARCHITECTURE_TAG}
-      ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}
-      ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}
-      ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component} )
-    if(_boost_STATIC_RUNTIME_WORKAROUND)
-      set(_boost_DEBUG_STATIC_ABI_TAG "-s${_boost_DEBUG_ABI_TAG}")
-      foreach(compiler IN LISTS _boost_COMPILER)
-        list(APPEND _boost_DEBUG_NAMES
-          ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
-          ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG}${_boost_ARCHITECTURE_TAG}
-          ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG} )
-      endforeach()
-      list(APPEND _boost_DEBUG_NAMES
-        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
-        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG}${_boost_ARCHITECTURE_TAG}
-        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG} )
-    endif()
-  endforeach()
-  if(Boost_THREADAPI AND ${COMPONENT} STREQUAL "thread")
-     _Boost_PREPEND_LIST_WITH_THREADAPI(_boost_DEBUG_NAMES ${_boost_DEBUG_NAMES})
-  endif()
-  _Boost_DEBUG_PRINT("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
-                     "Searching for ${UPPERCOMPONENT}_LIBRARY_DEBUG: ${_boost_DEBUG_NAMES}")
-
-  # if Boost_LIBRARY_DIR_DEBUG is not defined,
-  # but Boost_LIBRARY_DIR_RELEASE is, look there first for DEBUG libs
-  if(NOT Boost_LIBRARY_DIR_DEBUG AND Boost_LIBRARY_DIR_RELEASE)
-    list(INSERT _boost_LIBRARY_SEARCH_DIRS_DEBUG 0 ${Boost_LIBRARY_DIR_RELEASE})
-  endif()
-
-  # Avoid passing backslashes to _Boost_FIND_LIBRARY due to macro re-parsing.
-  string(REPLACE "\\" "/" _boost_LIBRARY_SEARCH_DIRS_tmp "${_boost_LIBRARY_SEARCH_DIRS_DEBUG}")
-
-  if(Boost_USE_DEBUG_LIBS)
-    _Boost_FIND_LIBRARY(Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG DEBUG
-      NAMES ${_boost_DEBUG_NAMES}
-      HINTS ${_boost_LIBRARY_SEARCH_DIRS_tmp}
-      NAMES_PER_DIR
-      DOC "${_boost_docstring_debug}"
-      )
-  endif ()
-
-  if(Boost_REALPATH)
-    _Boost_SWAP_WITH_REALPATH(Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE "${_boost_docstring_release}")
-    _Boost_SWAP_WITH_REALPATH(Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG   "${_boost_docstring_debug}"  )
-  endif()
-
-  _Boost_ADJUST_LIB_VARS(${UPPERCOMPONENT})
-
-  # Check if component requires some compiler features
-  _Boost_COMPILER_FEATURES(${COMPONENT} _Boost_${UPPERCOMPONENT}_COMPILER_FEATURES)
-
-endforeach()
-
-# Restore the original find library ordering
-if( Boost_USE_STATIC_LIBS )
-  set(CMAKE_FIND_LIBRARY_SUFFIXES ${_boost_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
-endif()
-
-# ------------------------------------------------------------------------
-#  End finding boost libraries
-# ------------------------------------------------------------------------
-
-set(Boost_INCLUDE_DIRS ${Boost_INCLUDE_DIR})
-set(Boost_LIBRARY_DIRS)
-if(Boost_LIBRARY_DIR_RELEASE)
-  list(APPEND Boost_LIBRARY_DIRS ${Boost_LIBRARY_DIR_RELEASE})
-endif()
-if(Boost_LIBRARY_DIR_DEBUG)
-  list(APPEND Boost_LIBRARY_DIRS ${Boost_LIBRARY_DIR_DEBUG})
-endif()
-if(Boost_LIBRARY_DIRS)
-  list(REMOVE_DUPLICATES Boost_LIBRARY_DIRS)
-endif()
-
-# ------------------------------------------------------------------------
-#  Call FPHSA helper, see https://cmake.org/cmake/help/latest/module/FindPackageHandleStandardArgs.html
-# ------------------------------------------------------------------------
-
-# Define aliases as needed by the component handler in the FPHSA helper below
-foreach(_comp IN LISTS Boost_FIND_COMPONENTS)
-  string(TOUPPER ${_comp} _uppercomp)
-  if(DEFINED Boost_${_uppercomp}_FOUND)
-    set(Boost_${_comp}_FOUND ${Boost_${_uppercomp}_FOUND})
-  endif()
-endforeach()
-
-find_package_handle_standard_args(Boost
-  REQUIRED_VARS Boost_INCLUDE_DIR
-  VERSION_VAR Boost_VERSION_STRING
-  HANDLE_COMPONENTS)
-
-if(Boost_FOUND)
-  if( NOT Boost_LIBRARY_DIRS )
-    # Compatibility Code for backwards compatibility with CMake
-    # 2.4's FindBoost module.
-
-    # Look for the boost library path.
-    # Note that the user may not have installed any libraries
-    # so it is quite possible the Boost_LIBRARY_DIRS may not exist.
-    set(_boost_LIB_DIR ${Boost_INCLUDE_DIR})
-
-    if("${_boost_LIB_DIR}" MATCHES "boost-[0-9]+")
-      get_filename_component(_boost_LIB_DIR ${_boost_LIB_DIR} PATH)
-    endif()
-
-    if("${_boost_LIB_DIR}" MATCHES "/include$")
-      # Strip off the trailing "/include" in the path.
-      get_filename_component(_boost_LIB_DIR ${_boost_LIB_DIR} PATH)
-    endif()
-
-    if(EXISTS "${_boost_LIB_DIR}/lib")
-      string(APPEND _boost_LIB_DIR /lib)
-    elseif(EXISTS "${_boost_LIB_DIR}/stage/lib")
-      string(APPEND _boost_LIB_DIR "/stage/lib")
-    else()
-      set(_boost_LIB_DIR "")
-    endif()
-
-    if(_boost_LIB_DIR AND EXISTS "${_boost_LIB_DIR}")
-      set(Boost_LIBRARY_DIRS ${_boost_LIB_DIR})
-    endif()
-
-  endif()
-else()
-  # Boost headers were not found so no components were found.
-  foreach(COMPONENT ${Boost_FIND_COMPONENTS})
-    string(TOUPPER ${COMPONENT} UPPERCOMPONENT)
-    set(Boost_${UPPERCOMPONENT}_FOUND 0)
-  endforeach()
-endif()
-
-# ------------------------------------------------------------------------
-#  Add imported targets
-# ------------------------------------------------------------------------
-
-if(Boost_FOUND)
-  # The builtin CMake package in Boost 1.70+ introduces a new name
-  # for the header-only lib, let's provide the same UI in module mode
-  if(NOT TARGET Boost::headers)
-    add_library(Boost::headers INTERFACE IMPORTED)
-    if(Boost_INCLUDE_DIRS)
-      set_target_properties(Boost::headers PROPERTIES
-        INTERFACE_INCLUDE_DIRECTORIES "${Boost_INCLUDE_DIRS}")
-    endif()
-  endif()
-
-  # Define the old target name for header-only libraries for backwards
-  # compat.
-  if(NOT TARGET Boost::boost)
-    add_library(Boost::boost INTERFACE IMPORTED)
-    set_target_properties(Boost::boost
-      PROPERTIES INTERFACE_LINK_LIBRARIES Boost::headers)
-  endif()
-
-  foreach(COMPONENT ${Boost_FIND_COMPONENTS})
-    if(_Boost_IMPORTED_TARGETS AND NOT TARGET Boost::${COMPONENT})
-      string(TOUPPER ${COMPONENT} UPPERCOMPONENT)
-      if(Boost_${UPPERCOMPONENT}_FOUND)
-        if(Boost_USE_STATIC_LIBS)
-          add_library(Boost::${COMPONENT} STATIC IMPORTED)
-        else()
-          # Even if Boost_USE_STATIC_LIBS is OFF, we might have static
-          # libraries as a result.
-          add_library(Boost::${COMPONENT} UNKNOWN IMPORTED)
-        endif()
-        if(Boost_INCLUDE_DIRS)
-          set_target_properties(Boost::${COMPONENT} PROPERTIES
-            INTERFACE_INCLUDE_DIRECTORIES "${Boost_INCLUDE_DIRS}")
-        endif()
-        if(EXISTS "${Boost_${UPPERCOMPONENT}_LIBRARY}")
-          set_target_properties(Boost::${COMPONENT} PROPERTIES
-            IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
-            IMPORTED_LOCATION "${Boost_${UPPERCOMPONENT}_LIBRARY}")
-        endif()
-        if(EXISTS "${Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE}")
-          set_property(TARGET Boost::${COMPONENT} APPEND PROPERTY
-            IMPORTED_CONFIGURATIONS RELEASE)
-          set_target_properties(Boost::${COMPONENT} PROPERTIES
-            IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
-            IMPORTED_LOCATION_RELEASE "${Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE}")
-        endif()
-        if(EXISTS "${Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG}")
-          set_property(TARGET Boost::${COMPONENT} APPEND PROPERTY
-            IMPORTED_CONFIGURATIONS DEBUG)
-          set_target_properties(Boost::${COMPONENT} PROPERTIES
-            IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX"
-            IMPORTED_LOCATION_DEBUG "${Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG}")
-        endif()
-        if(_Boost_${UPPERCOMPONENT}_DEPENDENCIES)
-          unset(_Boost_${UPPERCOMPONENT}_TARGET_DEPENDENCIES)
-          foreach(dep ${_Boost_${UPPERCOMPONENT}_DEPENDENCIES})
-            list(APPEND _Boost_${UPPERCOMPONENT}_TARGET_DEPENDENCIES Boost::${dep})
-          endforeach()
-          if(COMPONENT STREQUAL "thread")
-            list(APPEND _Boost_${UPPERCOMPONENT}_TARGET_DEPENDENCIES Threads::Threads)
-          endif()
-          set_target_properties(Boost::${COMPONENT} PROPERTIES
-            INTERFACE_LINK_LIBRARIES "${_Boost_${UPPERCOMPONENT}_TARGET_DEPENDENCIES}")
-        endif()
-        if(_Boost_${UPPERCOMPONENT}_COMPILER_FEATURES)
-          set_target_properties(Boost::${COMPONENT} PROPERTIES
-            INTERFACE_COMPILE_FEATURES "${_Boost_${UPPERCOMPONENT}_COMPILER_FEATURES}")
-        endif()
-      endif()
-    endif()
-  endforeach()
-
-  # Supply Boost_LIB_DIAGNOSTIC_DEFINITIONS as a convenience target. It
-  # will only contain any interface definitions on WIN32, but is created
-  # on all platforms to keep end user code free from platform dependent
-  # code.  Also provide convenience targets to disable autolinking and
-  # enable dynamic linking.
-  if(NOT TARGET Boost::diagnostic_definitions)
-    add_library(Boost::diagnostic_definitions INTERFACE IMPORTED)
-    add_library(Boost::disable_autolinking INTERFACE IMPORTED)
-    add_library(Boost::dynamic_linking INTERFACE IMPORTED)
-    set_target_properties(Boost::dynamic_linking PROPERTIES
-      INTERFACE_COMPILE_DEFINITIONS "BOOST_ALL_DYN_LINK")
-  endif()
-  if(WIN32)
-    # In windows, automatic linking is performed, so you do not have
-    # to specify the libraries.  If you are linking to a dynamic
-    # runtime, then you can choose to link to either a static or a
-    # dynamic Boost library, the default is to do a static link.  You
-    # can alter this for a specific library "whatever" by defining
-    # BOOST_WHATEVER_DYN_LINK to force Boost library "whatever" to be
-    # linked dynamically.  Alternatively you can force all Boost
-    # libraries to dynamic link by defining BOOST_ALL_DYN_LINK.
-
-    # This feature can be disabled for Boost library "whatever" by
-    # defining BOOST_WHATEVER_NO_LIB, or for all of Boost by defining
-    # BOOST_ALL_NO_LIB.
-
-    # If you want to observe which libraries are being linked against
-    # then defining BOOST_LIB_DIAGNOSTIC will cause the auto-linking
-    # code to emit a #pragma message each time a library is selected
-    # for linking.
-    set(Boost_LIB_DIAGNOSTIC_DEFINITIONS "-DBOOST_LIB_DIAGNOSTIC")
-    set_target_properties(Boost::diagnostic_definitions PROPERTIES
-      INTERFACE_COMPILE_DEFINITIONS "BOOST_LIB_DIAGNOSTIC")
-    set_target_properties(Boost::disable_autolinking PROPERTIES
-      INTERFACE_COMPILE_DEFINITIONS "BOOST_ALL_NO_LIB")
-  endif()
-endif()
-
-# ------------------------------------------------------------------------
-#  Finalize
-# ------------------------------------------------------------------------
-
-# Report Boost_LIBRARIES
-set(Boost_LIBRARIES "")
-foreach(_comp IN LISTS Boost_FIND_COMPONENTS)
-  string(TOUPPER ${_comp} _uppercomp)
-  if(Boost_${_uppercomp}_FOUND)
-    list(APPEND Boost_LIBRARIES ${Boost_${_uppercomp}_LIBRARY})
-    if(_comp STREQUAL "thread")
-      list(APPEND Boost_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
-    endif()
-  endif()
-endforeach()
-
-# Configure display of cache entries in GUI.
-foreach(v BOOSTROOT BOOST_ROOT ${_Boost_VARS_INC} ${_Boost_VARS_LIB})
-  get_property(_type CACHE ${v} PROPERTY TYPE)
-  if(_type)
-    set_property(CACHE ${v} PROPERTY ADVANCED 1)
-    if("x${_type}" STREQUAL "xUNINITIALIZED")
-      if("x${v}" STREQUAL "xBoost_ADDITIONAL_VERSIONS")
-        set_property(CACHE ${v} PROPERTY TYPE STRING)
-      else()
-        set_property(CACHE ${v} PROPERTY TYPE PATH)
-      endif()
-    endif()
-  endif()
-endforeach()
-
-# Record last used values of input variables so we can
-# detect on the next run if the user changed them.
-foreach(v
-    ${_Boost_VARS_INC} ${_Boost_VARS_LIB}
-    ${_Boost_VARS_DIR} ${_Boost_VARS_NAME}
-    )
-  if(DEFINED ${v})
-    set(_${v}_LAST "${${v}}" CACHE INTERNAL "Last used ${v} value.")
-  else()
-    unset(_${v}_LAST CACHE)
-  endif()
-endforeach()
-
-# Maintain a persistent list of components requested anywhere since
-# the last flush.
-set(_Boost_COMPONENTS_SEARCHED "${_Boost_COMPONENTS_SEARCHED}")
-list(APPEND _Boost_COMPONENTS_SEARCHED ${Boost_FIND_COMPONENTS})
-list(REMOVE_DUPLICATES _Boost_COMPONENTS_SEARCHED)
-list(SORT _Boost_COMPONENTS_SEARCHED)
-set(_Boost_COMPONENTS_SEARCHED "${_Boost_COMPONENTS_SEARCHED}"
-  CACHE INTERNAL "Components requested for this build tree.")
-
-# Restore project's policies
-cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/FindCUDA.cmake b/share/cmake-3.18/Modules/FindCUDA.cmake
deleted file mode 100644
index a93d4fd..0000000
--- a/share/cmake-3.18/Modules/FindCUDA.cmake
+++ /dev/null
@@ -1,2027 +0,0 @@
-#[=======================================================================[.rst:
-FindCUDA
---------
-
-.. deprecated:: 3.10
-
-  Superseded by first-class support for the CUDA language in CMake.
-  Superseded by the :module:`FindCUDAToolkit` for CUDA toolkit libraries.
-
-Replacement
-^^^^^^^^^^^
-
-It is no longer necessary to use this module or call ``find_package(CUDA)``
-for compiling CUDA code. Instead, list ``CUDA`` among the languages named
-in the top-level call to the :command:`project` command, or call the
-:command:`enable_language` command with ``CUDA``.
-Then one can add CUDA (``.cu``) sources to programs directly
-in calls to :command:`add_library` and :command:`add_executable`.
-
-To find and use the CUDA toolkit libraries the :module:`FindCUDAToolkit`
-module has superseded this module.  It works whether or not the ``CUDA``
-language is enabled.
-
-Documentation of Deprecated Usage
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Tools for building CUDA C files: libraries and build dependencies.
-
-This script locates the NVIDIA CUDA C tools.  It should work on Linux,
-Windows, and macOS and should be reasonably up to date with CUDA C
-releases.
-
-This script makes use of the standard :command:`find_package` arguments of
-``<VERSION>``, ``REQUIRED`` and ``QUIET``.  ``CUDA_FOUND`` will report if an
-acceptable version of CUDA was found.
-
-The script will prompt the user to specify ``CUDA_TOOLKIT_ROOT_DIR`` if
-the prefix cannot be determined by the location of nvcc in the system
-path and ``REQUIRED`` is specified to :command:`find_package`.  To use
-a different installed version of the toolkit set the environment variable
-``CUDA_BIN_PATH`` before running cmake (e.g.
-``CUDA_BIN_PATH=/usr/local/cuda1.0`` instead of the default
-``/usr/local/cuda``) or set ``CUDA_TOOLKIT_ROOT_DIR`` after configuring.  If
-you change the value of ``CUDA_TOOLKIT_ROOT_DIR``, various components that
-depend on the path will be relocated.
-
-It might be necessary to set ``CUDA_TOOLKIT_ROOT_DIR`` manually on certain
-platforms, or to use a CUDA runtime not installed in the default
-location.  In newer versions of the toolkit the CUDA library is
-included with the graphics driver -- be sure that the driver version
-matches what is needed by the CUDA runtime version.
-
-The following variables affect the behavior of the macros in the
-script (in alphabetical order).  Note that any of these flags can be
-changed multiple times in the same directory before calling
-``CUDA_ADD_EXECUTABLE``, ``CUDA_ADD_LIBRARY``, ``CUDA_COMPILE``,
-``CUDA_COMPILE_PTX``, ``CUDA_COMPILE_FATBIN``, ``CUDA_COMPILE_CUBIN``
-or ``CUDA_WRAP_SRCS``::
-
-  CUDA_64_BIT_DEVICE_CODE (Default matches host bit size)
-  -- Set to ON to compile for 64 bit device code, OFF for 32 bit device code.
-     Note that making this different from the host code when generating object
-     or C files from CUDA code just won't work, because size_t gets defined by
-     nvcc in the generated source.  If you compile to PTX and then load the
-     file yourself, you can mix bit sizes between device and host.
-
-  CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE (Default ON)
-  -- Set to ON if you want the custom build rule to be attached to the source
-     file in Visual Studio.  Turn OFF if you add the same cuda file to multiple
-     targets.
-
-     This allows the user to build the target from the CUDA file; however, bad
-     things can happen if the CUDA source file is added to multiple targets.
-     When performing parallel builds it is possible for the custom build
-     command to be run more than once and in parallel causing cryptic build
-     errors.  VS runs the rules for every source file in the target, and a
-     source can have only one rule no matter how many projects it is added to.
-     When the rule is run from multiple targets race conditions can occur on
-     the generated file.  Eventually everything will get built, but if the user
-     is unaware of this behavior, there may be confusion.  It would be nice if
-     this script could detect the reuse of source files across multiple targets
-     and turn the option off for the user, but no good solution could be found.
-
-  CUDA_BUILD_CUBIN (Default OFF)
-  -- Set to ON to enable and extra compilation pass with the -cubin option in
-     Device mode. The output is parsed and register, shared memory usage is
-     printed during build.
-
-  CUDA_BUILD_EMULATION (Default OFF for device mode)
-  -- Set to ON for Emulation mode. -D_DEVICEEMU is defined for CUDA C files
-     when CUDA_BUILD_EMULATION is TRUE.
-
-  CUDA_LINK_LIBRARIES_KEYWORD (Default "")
-   -- The <PRIVATE|PUBLIC|INTERFACE> keyword to use for internal
-      target_link_libraries calls. The default is to use no keyword which
-      uses the old "plain" form of target_link_libraries. Note that is matters
-      because whatever is used inside the FindCUDA module must also be used
-      outside - the two forms of target_link_libraries cannot be mixed.
-
-  CUDA_GENERATED_OUTPUT_DIR (Default CMAKE_CURRENT_BINARY_DIR)
-  -- Set to the path you wish to have the generated files placed.  If it is
-     blank output files will be placed in CMAKE_CURRENT_BINARY_DIR.
-     Intermediate files will always be placed in
-     CMAKE_CURRENT_BINARY_DIR/CMakeFiles.
-
-  CUDA_HOST_COMPILATION_CPP (Default ON)
-  -- Set to OFF for C compilation of host code.
-
-  CUDA_HOST_COMPILER (Default CMAKE_C_COMPILER)
-  -- Set the host compiler to be used by nvcc.  Ignored if -ccbin or
-     --compiler-bindir is already present in the CUDA_NVCC_FLAGS or
-     CUDA_NVCC_FLAGS_<CONFIG> variables.  For Visual Studio targets,
-     the host compiler is constructed with one or more visual studio macros
-     such as $(VCInstallDir), that expands out to the path when
-     the command is run from within VS.
-     If the CUDAHOSTCXX environment variable is set it will
-     be used as the default.
-
-  CUDA_NVCC_FLAGS
-  CUDA_NVCC_FLAGS_<CONFIG>
-  -- Additional NVCC command line arguments.  NOTE: multiple arguments must be
-     semi-colon delimited (e.g. --compiler-options;-Wall)
-
-  CUDA_PROPAGATE_HOST_FLAGS (Default ON)
-  -- Set to ON to propagate CMAKE_{C,CXX}_FLAGS and their configuration
-     dependent counterparts (e.g. CMAKE_C_FLAGS_DEBUG) automatically to the
-     host compiler through nvcc's -Xcompiler flag.  This helps make the
-     generated host code match the rest of the system better.  Sometimes
-     certain flags give nvcc problems, and this will help you turn the flag
-     propagation off.  This does not affect the flags supplied directly to nvcc
-     via CUDA_NVCC_FLAGS or through the OPTION flags specified through
-     CUDA_ADD_LIBRARY, CUDA_ADD_EXECUTABLE, or CUDA_WRAP_SRCS.  Flags used for
-     shared library compilation are not affected by this flag.
-
-  CUDA_SEPARABLE_COMPILATION (Default OFF)
-  -- If set this will enable separable compilation for all CUDA runtime object
-     files.  If used outside of CUDA_ADD_EXECUTABLE and CUDA_ADD_LIBRARY
-     (e.g. calling CUDA_WRAP_SRCS directly),
-     CUDA_COMPUTE_SEPARABLE_COMPILATION_OBJECT_FILE_NAME and
-     CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS should be called.
-
-  CUDA_SOURCE_PROPERTY_FORMAT
-  -- If this source file property is set, it can override the format specified
-     to CUDA_WRAP_SRCS (OBJ, PTX, CUBIN, or FATBIN).  If an input source file
-     is not a .cu file, setting this file will cause it to be treated as a .cu
-     file. See documentation for set_source_files_properties on how to set
-     this property.
-
-  CUDA_USE_STATIC_CUDA_RUNTIME (Default ON)
-  -- When enabled the static version of the CUDA runtime library will be used
-     in CUDA_LIBRARIES.  If the version of CUDA configured doesn't support
-     this option, then it will be silently disabled.
-
-  CUDA_VERBOSE_BUILD (Default OFF)
-  -- Set to ON to see all the commands used when building the CUDA file.  When
-     using a Makefile generator the value defaults to VERBOSE (run make
-     VERBOSE=1 to see output), although setting CUDA_VERBOSE_BUILD to ON will
-     always print the output.
-
-The script creates the following macros (in alphabetical order)::
-
-  CUDA_ADD_CUFFT_TO_TARGET( cuda_target )
-  -- Adds the cufft library to the target (can be any target).  Handles whether
-     you are in emulation mode or not.
-
-  CUDA_ADD_CUBLAS_TO_TARGET( cuda_target )
-  -- Adds the cublas library to the target (can be any target).  Handles
-     whether you are in emulation mode or not.
-
-  CUDA_ADD_EXECUTABLE( cuda_target file0 file1 ...
-                       [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] [OPTIONS ...] )
-  -- Creates an executable "cuda_target" which is made up of the files
-     specified.  All of the non CUDA C files are compiled using the standard
-     build rules specified by CMAKE and the cuda files are compiled to object
-     files using nvcc and the host compiler.  In addition CUDA_INCLUDE_DIRS is
-     added automatically to include_directories().  Some standard CMake target
-     calls can be used on the target after calling this macro
-     (e.g. set_target_properties and target_link_libraries), but setting
-     properties that adjust compilation flags will not affect code compiled by
-     nvcc.  Such flags should be modified before calling CUDA_ADD_EXECUTABLE,
-     CUDA_ADD_LIBRARY or CUDA_WRAP_SRCS.
-
-  CUDA_ADD_LIBRARY( cuda_target file0 file1 ...
-                    [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] [OPTIONS ...] )
-  -- Same as CUDA_ADD_EXECUTABLE except that a library is created.
-
-  CUDA_BUILD_CLEAN_TARGET()
-  -- Creates a convenience target that deletes all the dependency files
-     generated.  You should make clean after running this target to ensure the
-     dependency files get regenerated.
-
-  CUDA_COMPILE( generated_files file0 file1 ... [STATIC | SHARED | MODULE]
-                [OPTIONS ...] )
-  -- Returns a list of generated files from the input source files to be used
-     with ADD_LIBRARY or ADD_EXECUTABLE.
-
-  CUDA_COMPILE_PTX( generated_files file0 file1 ... [OPTIONS ...] )
-  -- Returns a list of PTX files generated from the input source files.
-
-  CUDA_COMPILE_FATBIN( generated_files file0 file1 ... [OPTIONS ...] )
-  -- Returns a list of FATBIN files generated from the input source files.
-
-  CUDA_COMPILE_CUBIN( generated_files file0 file1 ... [OPTIONS ...] )
-  -- Returns a list of CUBIN files generated from the input source files.
-
-  CUDA_COMPUTE_SEPARABLE_COMPILATION_OBJECT_FILE_NAME( output_file_var
-                                                       cuda_target
-                                                       object_files )
-  -- Compute the name of the intermediate link file used for separable
-     compilation.  This file name is typically passed into
-     CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS.  output_file_var is produced
-     based on cuda_target the list of objects files that need separable
-     compilation as specified by object_files.  If the object_files list is
-     empty, then output_file_var will be empty.  This function is called
-     automatically for CUDA_ADD_LIBRARY and CUDA_ADD_EXECUTABLE.  Note that
-     this is a function and not a macro.
-
-  CUDA_INCLUDE_DIRECTORIES( path0 path1 ... )
-  -- Sets the directories that should be passed to nvcc
-     (e.g. nvcc -Ipath0 -Ipath1 ... ). These paths usually contain other .cu
-     files.
-
-
-  CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS( output_file_var cuda_target
-                                           nvcc_flags object_files)
-  -- Generates the link object required by separable compilation from the given
-     object files.  This is called automatically for CUDA_ADD_EXECUTABLE and
-     CUDA_ADD_LIBRARY, but can be called manually when using CUDA_WRAP_SRCS
-     directly.  When called from CUDA_ADD_LIBRARY or CUDA_ADD_EXECUTABLE the
-     nvcc_flags passed in are the same as the flags passed in via the OPTIONS
-     argument.  The only nvcc flag added automatically is the bitness flag as
-     specified by CUDA_64_BIT_DEVICE_CODE.  Note that this is a function
-     instead of a macro.
-
-  CUDA_SELECT_NVCC_ARCH_FLAGS(out_variable [target_CUDA_architectures])
-  -- Selects GPU arch flags for nvcc based on target_CUDA_architectures
-     target_CUDA_architectures : Auto | Common | All | LIST(ARCH_AND_PTX ...)
-      - "Auto" detects local machine GPU compute arch at runtime.
-      - "Common" and "All" cover common and entire subsets of architectures
-     ARCH_AND_PTX : NAME | NUM.NUM | NUM.NUM(NUM.NUM) | NUM.NUM+PTX
-     NAME: Fermi Kepler Maxwell Kepler+Tegra Kepler+Tesla Maxwell+Tegra Pascal
-     NUM: Any number. Only those pairs are currently accepted by NVCC though:
-           2.0 2.1 3.0 3.2 3.5 3.7 5.0 5.2 5.3 6.0 6.2
-     Returns LIST of flags to be added to CUDA_NVCC_FLAGS in ${out_variable}
-     Additionally, sets ${out_variable}_readable to the resulting numeric list
-     Example:
-      CUDA_SELECT_NVCC_ARCH_FLAGS(ARCH_FLAGS 3.0 3.5+PTX 5.2(5.0) Maxwell)
-       LIST(APPEND CUDA_NVCC_FLAGS ${ARCH_FLAGS})
-
-     More info on CUDA architectures: https://en.wikipedia.org/wiki/CUDA
-     Note that this is a function instead of a macro.
-
-  CUDA_WRAP_SRCS ( cuda_target format generated_files file0 file1 ...
-                   [STATIC | SHARED | MODULE] [OPTIONS ...] )
-  -- This is where all the magic happens.  CUDA_ADD_EXECUTABLE,
-     CUDA_ADD_LIBRARY, CUDA_COMPILE, and CUDA_COMPILE_PTX all call this
-     function under the hood.
-
-     Given the list of files (file0 file1 ... fileN) this macro generates
-     custom commands that generate either PTX or linkable objects (use "PTX" or
-     "OBJ" for the format argument to switch).  Files that don't end with .cu
-     or have the HEADER_FILE_ONLY property are ignored.
-
-     The arguments passed in after OPTIONS are extra command line options to
-     give to nvcc.  You can also specify per configuration options by
-     specifying the name of the configuration followed by the options.  General
-     options must precede configuration specific options.  Not all
-     configurations need to be specified, only the ones provided will be used.
-
-        OPTIONS -DFLAG=2 "-DFLAG_OTHER=space in flag"
-        DEBUG -g
-        RELEASE --use_fast_math
-        RELWITHDEBINFO --use_fast_math;-g
-        MINSIZEREL --use_fast_math
-
-     For certain configurations (namely VS generating object files with
-     CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE set to ON), no generated file will
-     be produced for the given cuda file.  This is because when you add the
-     cuda file to Visual Studio it knows that this file produces an object file
-     and will link in the resulting object file automatically.
-
-     This script will also generate a separate cmake script that is used at
-     build time to invoke nvcc.  This is for several reasons.
-
-       1. nvcc can return negative numbers as return values which confuses
-       Visual Studio into thinking that the command succeeded.  The script now
-       checks the error codes and produces errors when there was a problem.
-
-       2. nvcc has been known to not delete incomplete results when it
-       encounters problems.  This confuses build systems into thinking the
-       target was generated when in fact an unusable file exists.  The script
-       now deletes the output files if there was an error.
-
-       3. By putting all the options that affect the build into a file and then
-       make the build rule dependent on the file, the output files will be
-       regenerated when the options change.
-
-     This script also looks at optional arguments STATIC, SHARED, or MODULE to
-     determine when to target the object compilation for a shared library.
-     BUILD_SHARED_LIBS is ignored in CUDA_WRAP_SRCS, but it is respected in
-     CUDA_ADD_LIBRARY.  On some systems special flags are added for building
-     objects intended for shared libraries.  A preprocessor macro,
-     <target_name>_EXPORTS is defined when a shared library compilation is
-     detected.
-
-     Flags passed into add_definitions with -D or /D are passed along to nvcc.
-
-
-
-The script defines the following variables::
-
-  CUDA_VERSION_MAJOR    -- The major version of cuda as reported by nvcc.
-  CUDA_VERSION_MINOR    -- The minor version.
-  CUDA_VERSION
-  CUDA_VERSION_STRING   -- CUDA_VERSION_MAJOR.CUDA_VERSION_MINOR
-  CUDA_HAS_FP16         -- Whether a short float (float16,fp16) is supported.
-
-  CUDA_TOOLKIT_ROOT_DIR -- Path to the CUDA Toolkit (defined if not set).
-  CUDA_SDK_ROOT_DIR     -- Path to the CUDA SDK.  Use this to find files in the
-                           SDK.  This script will not directly support finding
-                           specific libraries or headers, as that isn't
-                           supported by NVIDIA.  If you want to change
-                           libraries when the path changes see the
-                           FindCUDA.cmake script for an example of how to clear
-                           these variables.  There are also examples of how to
-                           use the CUDA_SDK_ROOT_DIR to locate headers or
-                           libraries, if you so choose (at your own risk).
-  CUDA_INCLUDE_DIRS     -- Include directory for cuda headers.  Added automatically
-                           for CUDA_ADD_EXECUTABLE and CUDA_ADD_LIBRARY.
-  CUDA_LIBRARIES        -- Cuda RT library.
-  CUDA_CUFFT_LIBRARIES  -- Device or emulation library for the Cuda FFT
-                           implementation (alternative to:
-                           CUDA_ADD_CUFFT_TO_TARGET macro)
-  CUDA_CUBLAS_LIBRARIES -- Device or emulation library for the Cuda BLAS
-                           implementation (alternative to:
-                           CUDA_ADD_CUBLAS_TO_TARGET macro).
-  CUDA_cudart_static_LIBRARY -- Statically linkable cuda runtime library.
-                                Only available for CUDA version 5.5+
-  CUDA_cudadevrt_LIBRARY -- Device runtime library.
-                            Required for separable compilation.
-  CUDA_cupti_LIBRARY    -- CUDA Profiling Tools Interface library.
-                           Only available for CUDA version 4.0+.
-  CUDA_curand_LIBRARY   -- CUDA Random Number Generation library.
-                           Only available for CUDA version 3.2+.
-  CUDA_cusolver_LIBRARY -- CUDA Direct Solver library.
-                           Only available for CUDA version 7.0+.
-  CUDA_cusparse_LIBRARY -- CUDA Sparse Matrix library.
-                           Only available for CUDA version 3.2+.
-  CUDA_npp_LIBRARY      -- NVIDIA Performance Primitives lib.
-                           Only available for CUDA version 4.0+.
-  CUDA_nppc_LIBRARY     -- NVIDIA Performance Primitives lib (core).
-                           Only available for CUDA version 5.5+.
-  CUDA_nppi_LIBRARY     -- NVIDIA Performance Primitives lib (image processing).
-                           Only available for CUDA version 5.5 - 8.0.
-  CUDA_nppial_LIBRARY   -- NVIDIA Performance Primitives lib (image processing).
-                           Only available for CUDA version 9.0.
-  CUDA_nppicc_LIBRARY   -- NVIDIA Performance Primitives lib (image processing).
-                           Only available for CUDA version 9.0.
-  CUDA_nppicom_LIBRARY  -- NVIDIA Performance Primitives lib (image processing).
-                           Only available for CUDA version 9.0 - 10.2.
-                           Replaced by nvjpeg.
-  CUDA_nppidei_LIBRARY  -- NVIDIA Performance Primitives lib (image processing).
-                           Only available for CUDA version 9.0.
-  CUDA_nppif_LIBRARY    -- NVIDIA Performance Primitives lib (image processing).
-                           Only available for CUDA version 9.0.
-  CUDA_nppig_LIBRARY    -- NVIDIA Performance Primitives lib (image processing).
-                           Only available for CUDA version 9.0.
-  CUDA_nppim_LIBRARY    -- NVIDIA Performance Primitives lib (image processing).
-                           Only available for CUDA version 9.0.
-  CUDA_nppist_LIBRARY   -- NVIDIA Performance Primitives lib (image processing).
-                           Only available for CUDA version 9.0.
-  CUDA_nppisu_LIBRARY   -- NVIDIA Performance Primitives lib (image processing).
-                           Only available for CUDA version 9.0.
-  CUDA_nppitc_LIBRARY   -- NVIDIA Performance Primitives lib (image processing).
-                           Only available for CUDA version 9.0.
-  CUDA_npps_LIBRARY     -- NVIDIA Performance Primitives lib (signal processing).
-                           Only available for CUDA version 5.5+.
-  CUDA_nvcuvenc_LIBRARY -- CUDA Video Encoder library.
-                           Only available for CUDA version 3.2+.
-                           Windows only.
-  CUDA_nvcuvid_LIBRARY  -- CUDA Video Decoder library.
-                           Only available for CUDA version 3.2+.
-                           Windows only.
-  CUDA_nvToolsExt_LIBRARY
-                        -- NVIDA CUDA Tools Extension library.
-                           Available for CUDA version 5+.
-  CUDA_OpenCL_LIBRARY   -- NVIDA CUDA OpenCL library.
-                           Available for CUDA version 5+.
-
-#]=======================================================================]
-
-#   James Bigler, NVIDIA Corp (nvidia.com - jbigler)
-#   Abe Stephens, SCI Institute -- http://www.sci.utah.edu/~abe/FindCuda.html
-#
-#   Copyright (c) 2008 - 2009 NVIDIA Corporation.  All rights reserved.
-#
-#   Copyright (c) 2007-2009
-#   Scientific Computing and Imaging Institute, University of Utah
-#
-#   This code is licensed under the MIT License.  See the FindCUDA.cmake script
-#   for the text of the license.
-
-# The MIT License
-#
-# License for the specific language governing rights and limitations under
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# the rights to use, copy, modify, merge, publish, distribute, sublicense,
-# and/or sell copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-# DEALINGS IN THE SOFTWARE.
-#
-###############################################################################
-
-# FindCUDA.cmake
-
-# This macro helps us find the location of helper files we will need the full path to
-macro(CUDA_FIND_HELPER_FILE _name _extension)
-  set(_full_name "${_name}.${_extension}")
-  # CMAKE_CURRENT_LIST_FILE contains the full path to the file currently being
-  # processed.  Using this variable, we can pull out the current path, and
-  # provide a way to get access to the other files we need local to here.
-  get_filename_component(CMAKE_CURRENT_LIST_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
-  set(CUDA_${_name} "${CMAKE_CURRENT_LIST_DIR}/FindCUDA/${_full_name}")
-  if(NOT EXISTS "${CUDA_${_name}}")
-    set(error_message "${_full_name} not found in ${CMAKE_CURRENT_LIST_DIR}/FindCUDA")
-    if(CUDA_FIND_REQUIRED)
-      message(FATAL_ERROR "${error_message}")
-    else()
-      if(NOT CUDA_FIND_QUIETLY)
-        message(STATUS "${error_message}")
-      endif()
-    endif()
-  endif()
-  # Set this variable as internal, so the user isn't bugged with it.
-  set(CUDA_${_name} ${CUDA_${_name}} CACHE INTERNAL "Location of ${_full_name}" FORCE)
-endmacro()
-
-#####################################################################
-## CUDA_INCLUDE_NVCC_DEPENDENCIES
-##
-
-# So we want to try and include the dependency file if it exists.  If
-# it doesn't exist then we need to create an empty one, so we can
-# include it.
-
-# If it does exist, then we need to check to see if all the files it
-# depends on exist.  If they don't then we should clear the dependency
-# file and regenerate it later.  This covers the case where a header
-# file has disappeared or moved.
-
-macro(CUDA_INCLUDE_NVCC_DEPENDENCIES dependency_file)
-  set(CUDA_NVCC_DEPEND)
-  set(CUDA_NVCC_DEPEND_REGENERATE FALSE)
-
-
-  # Include the dependency file.  Create it first if it doesn't exist .  The
-  # INCLUDE puts a dependency that will force CMake to rerun and bring in the
-  # new info when it changes.  DO NOT REMOVE THIS (as I did and spent a few
-  # hours figuring out why it didn't work.
-  if(NOT EXISTS ${dependency_file})
-    file(WRITE ${dependency_file} "#FindCUDA.cmake generated file.  Do not edit.\n")
-  endif()
-  # Always include this file to force CMake to run again next
-  # invocation and rebuild the dependencies.
-  #message("including dependency_file = ${dependency_file}")
-  include(${dependency_file})
-
-  # Now we need to verify the existence of all the included files
-  # here.  If they aren't there we need to just blank this variable and
-  # make the file regenerate again.
-#   if(DEFINED CUDA_NVCC_DEPEND)
-#     message("CUDA_NVCC_DEPEND set")
-#   else()
-#     message("CUDA_NVCC_DEPEND NOT set")
-#   endif()
-  if(CUDA_NVCC_DEPEND)
-    #message("CUDA_NVCC_DEPEND found")
-    foreach(f ${CUDA_NVCC_DEPEND})
-      # message("searching for ${f}")
-      if(NOT EXISTS ${f})
-        #message("file ${f} not found")
-        set(CUDA_NVCC_DEPEND_REGENERATE TRUE)
-      endif()
-    endforeach()
-  else()
-    #message("CUDA_NVCC_DEPEND false")
-    # No dependencies, so regenerate the file.
-    set(CUDA_NVCC_DEPEND_REGENERATE TRUE)
-  endif()
-
-  #message("CUDA_NVCC_DEPEND_REGENERATE = ${CUDA_NVCC_DEPEND_REGENERATE}")
-  # No incoming dependencies, so we need to generate them.  Make the
-  # output depend on the dependency file itself, which should cause the
-  # rule to re-run.
-  if(CUDA_NVCC_DEPEND_REGENERATE)
-    set(CUDA_NVCC_DEPEND ${dependency_file})
-    #message("Generating an empty dependency_file: ${dependency_file}")
-    file(WRITE ${dependency_file} "#FindCUDA.cmake generated file.  Do not edit.\n")
-  endif()
-
-endmacro()
-
-###############################################################################
-###############################################################################
-# Setup variables' defaults
-###############################################################################
-###############################################################################
-
-# Allow the user to specify if the device code is supposed to be 32 or 64 bit.
-if(CMAKE_SIZEOF_VOID_P EQUAL 8)
-  set(CUDA_64_BIT_DEVICE_CODE_DEFAULT ON)
-else()
-  set(CUDA_64_BIT_DEVICE_CODE_DEFAULT OFF)
-endif()
-option(CUDA_64_BIT_DEVICE_CODE "Compile device code in 64 bit mode" ${CUDA_64_BIT_DEVICE_CODE_DEFAULT})
-
-# Attach the build rule to the source file in VS.  This option
-option(CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE "Attach the build rule to the CUDA source file.  Enable only when the CUDA source file is added to at most one target." ON)
-
-# Prints out extra information about the cuda file during compilation
-option(CUDA_BUILD_CUBIN "Generate and parse .cubin files in Device mode." OFF)
-
-# Set whether we are using emulation or device mode.
-option(CUDA_BUILD_EMULATION "Build in Emulation mode" OFF)
-
-# Where to put the generated output.
-set(CUDA_GENERATED_OUTPUT_DIR "" CACHE PATH "Directory to put all the output files.  If blank it will default to the CMAKE_CURRENT_BINARY_DIR")
-
-# Parse HOST_COMPILATION mode.
-option(CUDA_HOST_COMPILATION_CPP "Generated file extension" ON)
-
-# Extra user settable flags
-cmake_initialize_per_config_variable(CUDA_NVCC_FLAGS "Semi-colon delimit multiple arguments.")
-
-if(DEFINED ENV{CUDAHOSTCXX})
-  set(CUDA_HOST_COMPILER "$ENV{CUDAHOSTCXX}" CACHE FILEPATH "Host side compiler used by NVCC")
-elseif(CMAKE_GENERATOR MATCHES "Visual Studio")
-  set(_CUDA_MSVC_HOST_COMPILER "$(VCInstallDir)Tools/MSVC/$(VCToolsVersion)/bin/Host$(Platform)/$(PlatformTarget)")
-  if(MSVC_VERSION LESS 1910)
-    set(_CUDA_MSVC_HOST_COMPILER "$(VCInstallDir)bin")
-  endif()
-
-  set(CUDA_HOST_COMPILER "${_CUDA_MSVC_HOST_COMPILER}" CACHE FILEPATH "Host side compiler used by NVCC")
-
-else()
-  if(APPLE
-      AND "${CMAKE_C_COMPILER_ID}" MATCHES "Clang"
-      AND "${CMAKE_C_COMPILER}" MATCHES "/cc$")
-    # Using cc which is symlink to clang may let NVCC think it is GCC and issue
-    # unhandled -dumpspecs option to clang. Also in case neither
-    # CMAKE_C_COMPILER is defined (project does not use C language) nor
-    # CUDA_HOST_COMPILER is specified manually we should skip -ccbin and let
-    # nvcc use its own default C compiler.
-    # Only care about this on APPLE with clang to avoid
-    # following symlinks to things like ccache
-    if(DEFINED CMAKE_C_COMPILER AND NOT DEFINED CUDA_HOST_COMPILER)
-      get_filename_component(c_compiler_realpath "${CMAKE_C_COMPILER}" REALPATH)
-      # if the real path does not end up being clang then
-      # go back to using CMAKE_C_COMPILER
-      if(NOT "${c_compiler_realpath}" MATCHES "/clang$")
-        set(c_compiler_realpath "${CMAKE_C_COMPILER}")
-      endif()
-    else()
-      set(c_compiler_realpath "")
-    endif()
-    set(CUDA_HOST_COMPILER "${c_compiler_realpath}" CACHE FILEPATH "Host side compiler used by NVCC")
-  elseif(MSVC AND "${CMAKE_C_COMPILER}" MATCHES "clcache|sccache")
-    # NVCC does not think it will work if it is passed clcache.exe or sccache.exe
-    # as the host compiler, which means that builds with CC=cl.exe won't work.
-    # Best to just feed it whatever the actual cl.exe is as the host compiler.
-    set(CUDA_HOST_COMPILER "cl.exe" CACHE FILEPATH "Host side compiler used by NVCC")
-  else()
-    set(CUDA_HOST_COMPILER "${CMAKE_C_COMPILER}"
-      CACHE FILEPATH "Host side compiler used by NVCC")
-  endif()
-endif()
-
-# Propagate the host flags to the host compiler via -Xcompiler
-option(CUDA_PROPAGATE_HOST_FLAGS "Propagate C/CXX_FLAGS and friends to the host compiler via -Xcompile" ON)
-
-# Enable CUDA_SEPARABLE_COMPILATION
-option(CUDA_SEPARABLE_COMPILATION "Compile CUDA objects with separable compilation enabled.  Requires CUDA 5.0+" OFF)
-
-# Specifies whether the commands used when compiling the .cu file will be printed out.
-option(CUDA_VERBOSE_BUILD "Print out the commands run while compiling the CUDA source file.  With the Makefile generator this defaults to VERBOSE variable specified on the command line, but can be forced on with this option." OFF)
-
-mark_as_advanced(
-  CUDA_64_BIT_DEVICE_CODE
-  CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE
-  CUDA_GENERATED_OUTPUT_DIR
-  CUDA_HOST_COMPILATION_CPP
-  CUDA_NVCC_FLAGS
-  CUDA_PROPAGATE_HOST_FLAGS
-  CUDA_BUILD_CUBIN
-  CUDA_BUILD_EMULATION
-  CUDA_VERBOSE_BUILD
-  CUDA_SEPARABLE_COMPILATION
-  )
-
-# Single config generators like Makefiles or Ninja don't usually have
-# CMAKE_CONFIGURATION_TYPES defined (but note that it can be defined if set by
-# projects or developers). Even CMAKE_BUILD_TYPE might not be defined for
-# single config generators (and should not be defined for multi-config
-# generators). To ensure we get a complete superset of all possible
-# configurations, we combine CMAKE_CONFIGURATION_TYPES, CMAKE_BUILD_TYPE and
-# all of the standard configurations, then weed out duplicates with
-# list(REMOVE_DUPLICATES). Looping over the unique set then ensures we have
-# each configuration-specific set of nvcc flags defined and marked as advanced.
-set(CUDA_configuration_types ${CMAKE_CONFIGURATION_TYPES} ${CMAKE_BUILD_TYPE} Debug MinSizeRel Release RelWithDebInfo)
-list(REMOVE_DUPLICATES CUDA_configuration_types)
-
-###############################################################################
-###############################################################################
-# Locate CUDA, Set Build Type, etc.
-###############################################################################
-###############################################################################
-
-macro(cuda_unset_include_and_libraries)
-  unset(CUDA_TOOLKIT_INCLUDE CACHE)
-  unset(CUDA_CUDART_LIBRARY CACHE)
-  unset(CUDA_CUDA_LIBRARY CACHE)
-  # Make sure you run this before you unset CUDA_VERSION.
-  if(CUDA_VERSION VERSION_EQUAL "3.0")
-    # This only existed in the 3.0 version of the CUDA toolkit
-    unset(CUDA_CUDARTEMU_LIBRARY CACHE)
-  endif()
-  unset(CUDA_cudart_static_LIBRARY CACHE)
-  unset(CUDA_cudadevrt_LIBRARY CACHE)
-  unset(CUDA_cublas_LIBRARY CACHE)
-  unset(CUDA_cublas_device_LIBRARY CACHE)
-  unset(CUDA_cublasemu_LIBRARY CACHE)
-  unset(CUDA_cufft_LIBRARY CACHE)
-  unset(CUDA_cufftemu_LIBRARY CACHE)
-  unset(CUDA_cupti_LIBRARY CACHE)
-  unset(CUDA_curand_LIBRARY CACHE)
-  unset(CUDA_cusolver_LIBRARY CACHE)
-  unset(CUDA_cusparse_LIBRARY CACHE)
-  unset(CUDA_npp_LIBRARY CACHE)
-  unset(CUDA_nppc_LIBRARY CACHE)
-  unset(CUDA_nppi_LIBRARY CACHE)
-  unset(CUDA_npps_LIBRARY CACHE)
-  unset(CUDA_nvcuvenc_LIBRARY CACHE)
-  unset(CUDA_nvcuvid_LIBRARY CACHE)
-  unset(CUDA_nvToolsExt_LIBRARY CACHE)
-  unset(CUDA_OpenCL_LIBRARY CACHE)
-  unset(CUDA_GPU_DETECT_OUTPUT CACHE)
-endmacro()
-
-# Check to see if the CUDA_TOOLKIT_ROOT_DIR and CUDA_SDK_ROOT_DIR have changed,
-# if they have then clear the cache variables, so that will be detected again.
-if(NOT "${CUDA_TOOLKIT_ROOT_DIR}" STREQUAL "${CUDA_TOOLKIT_ROOT_DIR_INTERNAL}")
-  unset(CUDA_TOOLKIT_TARGET_DIR CACHE)
-  unset(CUDA_NVCC_EXECUTABLE CACHE)
-  cuda_unset_include_and_libraries()
-  unset(CUDA_VERSION CACHE)
-endif()
-
-if(NOT "${CUDA_TOOLKIT_TARGET_DIR}" STREQUAL "${CUDA_TOOLKIT_TARGET_DIR_INTERNAL}")
-  cuda_unset_include_and_libraries()
-endif()
-
-#
-#  End of unset()
-#
-
-#
-#  Start looking for things
-#
-
-# Search for the cuda distribution.
-if(NOT CUDA_TOOLKIT_ROOT_DIR AND NOT CMAKE_CROSSCOMPILING)
-  # Search in the CUDA_BIN_PATH first.
-  find_program(CUDA_TOOLKIT_ROOT_DIR_NVCC
-    NAMES nvcc nvcc.exe
-    PATHS
-      ENV CUDA_TOOLKIT_ROOT
-      ENV CUDA_PATH
-      ENV CUDA_BIN_PATH
-    PATH_SUFFIXES bin bin64
-    DOC "Toolkit location."
-    NO_DEFAULT_PATH
-    )
-
-  # Now search default paths
-  find_program(CUDA_TOOLKIT_ROOT_DIR_NVCC
-    NAMES nvcc nvcc.exe
-    PATHS /opt/cuda/bin
-    PATH_SUFFIXES cuda/bin
-    DOC "Toolkit location."
-    )
-
-  if (CUDA_TOOLKIT_ROOT_DIR_NVCC)
-    get_filename_component(CUDA_TOOLKIT_ROOT_DIR_NVCC_PAR "${CUDA_TOOLKIT_ROOT_DIR_NVCC}" DIRECTORY)
-    get_filename_component(CUDA_TOOLKIT_ROOT_DIR "${CUDA_TOOLKIT_ROOT_DIR_NVCC_PAR}" DIRECTORY CACHE)
-    string(REGEX REPLACE "[/\\\\]?bin[64]*[/\\\\]?$" "" CUDA_TOOLKIT_ROOT_DIR ${CUDA_TOOLKIT_ROOT_DIR})
-    # We need to force this back into the cache.
-    set(CUDA_TOOLKIT_ROOT_DIR ${CUDA_TOOLKIT_ROOT_DIR} CACHE PATH "Toolkit location." FORCE)
-    set(CUDA_TOOLKIT_TARGET_DIR ${CUDA_TOOLKIT_ROOT_DIR})
-  endif()
-  unset(CUDA_TOOLKIT_ROOT_DIR_NVCC CACHE)
-
-  if (NOT EXISTS ${CUDA_TOOLKIT_ROOT_DIR})
-    if(CUDA_FIND_REQUIRED)
-      message(FATAL_ERROR "Specify CUDA_TOOLKIT_ROOT_DIR")
-    elseif(NOT CUDA_FIND_QUIETLY)
-      message("CUDA_TOOLKIT_ROOT_DIR not found or specified")
-    endif()
-  endif ()
-endif ()
-
-if(CMAKE_CROSSCOMPILING)
-  SET (CUDA_TOOLKIT_ROOT $ENV{CUDA_TOOLKIT_ROOT})
-  if(CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7-a")
-    # Support for NVPACK
-    set (CUDA_TOOLKIT_TARGET_NAME "armv7-linux-androideabi")
-  elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
-    # Support for arm cross compilation
-    set(CUDA_TOOLKIT_TARGET_NAME "armv7-linux-gnueabihf")
-  elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
-    # Support for aarch64 cross compilation
-    if (ANDROID_ARCH_NAME STREQUAL "arm64")
-      set(CUDA_TOOLKIT_TARGET_NAME "aarch64-linux-androideabi")
-    else()
-      set(CUDA_TOOLKIT_TARGET_NAME "aarch64-linux")
-    endif (ANDROID_ARCH_NAME STREQUAL "arm64")
-  endif()
-
-  if (EXISTS "${CUDA_TOOLKIT_ROOT}/targets/${CUDA_TOOLKIT_TARGET_NAME}")
-    set(CUDA_TOOLKIT_TARGET_DIR "${CUDA_TOOLKIT_ROOT}/targets/${CUDA_TOOLKIT_TARGET_NAME}" CACHE PATH "CUDA Toolkit target location.")
-    SET (CUDA_TOOLKIT_ROOT_DIR ${CUDA_TOOLKIT_ROOT})
-    mark_as_advanced(CUDA_TOOLKIT_TARGET_DIR)
-  endif()
-
-  # add known CUDA targetr root path to the set of directories we search for programs, libraries and headers
-  set( CMAKE_FIND_ROOT_PATH "${CUDA_TOOLKIT_TARGET_DIR};${CMAKE_FIND_ROOT_PATH}")
-  macro( cuda_find_host_program )
-    if (COMMAND find_host_program)
-      find_host_program( ${ARGN} )
-    else()
-      find_program( ${ARGN} )
-    endif()
-  endmacro()
-else()
-  # for non-cross-compile, find_host_program == find_program and CUDA_TOOLKIT_TARGET_DIR == CUDA_TOOLKIT_ROOT_DIR
-  macro( cuda_find_host_program )
-    find_program( ${ARGN} )
-  endmacro()
-  SET (CUDA_TOOLKIT_TARGET_DIR ${CUDA_TOOLKIT_ROOT_DIR})
-endif()
-
-
-# CUDA_NVCC_EXECUTABLE
-if(DEFINED ENV{CUDA_NVCC_EXECUTABLE})
-  set(CUDA_NVCC_EXECUTABLE "$ENV{CUDA_NVCC_EXECUTABLE}" CACHE FILEPATH "The CUDA compiler")
-else()
-  cuda_find_host_program(CUDA_NVCC_EXECUTABLE
-    NAMES nvcc
-    PATHS "${CUDA_TOOLKIT_ROOT_DIR}"
-    ENV CUDA_PATH
-    ENV CUDA_BIN_PATH
-    PATH_SUFFIXES bin bin64
-    NO_DEFAULT_PATH
-    )
-  # Search default search paths, after we search our own set of paths.
-  cuda_find_host_program(CUDA_NVCC_EXECUTABLE nvcc)
-endif()
-mark_as_advanced(CUDA_NVCC_EXECUTABLE)
-
-if(CUDA_NVCC_EXECUTABLE AND NOT CUDA_VERSION)
-  # Compute the version.
-  execute_process (COMMAND ${CUDA_NVCC_EXECUTABLE} "--version" OUTPUT_VARIABLE NVCC_OUT)
-  string(REGEX REPLACE ".*release ([0-9]+)\\.([0-9]+).*" "\\1" CUDA_VERSION_MAJOR ${NVCC_OUT})
-  string(REGEX REPLACE ".*release ([0-9]+)\\.([0-9]+).*" "\\2" CUDA_VERSION_MINOR ${NVCC_OUT})
-  set(CUDA_VERSION "${CUDA_VERSION_MAJOR}.${CUDA_VERSION_MINOR}" CACHE STRING "Version of CUDA as computed from nvcc.")
-  mark_as_advanced(CUDA_VERSION)
-else()
-  # Need to set these based off of the cached value
-  string(REGEX REPLACE "([0-9]+)\\.([0-9]+).*" "\\1" CUDA_VERSION_MAJOR "${CUDA_VERSION}")
-  string(REGEX REPLACE "([0-9]+)\\.([0-9]+).*" "\\2" CUDA_VERSION_MINOR "${CUDA_VERSION}")
-endif()
-
-
-# Always set this convenience variable
-set(CUDA_VERSION_STRING "${CUDA_VERSION}")
-
-# CUDA_TOOLKIT_INCLUDE
-find_path(CUDA_TOOLKIT_INCLUDE
-  device_functions.h # Header included in toolkit
-  PATHS ${CUDA_TOOLKIT_TARGET_DIR}
-  ENV CUDA_PATH
-  ENV CUDA_INC_PATH
-  PATH_SUFFIXES include
-  NO_DEFAULT_PATH
-  )
-# Search default search paths, after we search our own set of paths.
-find_path(CUDA_TOOLKIT_INCLUDE device_functions.h)
-mark_as_advanced(CUDA_TOOLKIT_INCLUDE)
-
-if (CUDA_VERSION VERSION_GREATER "7.0" OR EXISTS "${CUDA_TOOLKIT_INCLUDE}/cuda_fp16.h")
-  set(CUDA_HAS_FP16 TRUE)
-else()
-  set(CUDA_HAS_FP16 FALSE)
-endif()
-
-# Set the user list of include dir to nothing to initialize it.
-set (CUDA_NVCC_INCLUDE_DIRS_USER "")
-set (CUDA_INCLUDE_DIRS ${CUDA_TOOLKIT_INCLUDE})
-
-macro(cuda_find_library_local_first_with_path_ext _var _names _doc _path_ext )
-  if(CMAKE_SIZEOF_VOID_P EQUAL 8)
-    # CUDA 3.2+ on Windows moved the library directories, so we need the new
-    # and old paths.
-    set(_cuda_64bit_lib_dir "${_path_ext}lib/x64" "${_path_ext}lib64" "${_path_ext}libx64" )
-  endif()
-  # CUDA 3.2+ on Windows moved the library directories, so we need to new
-  # (lib/Win32) and the old path (lib).
-  find_library(${_var}
-    NAMES ${_names}
-    PATHS "${CUDA_TOOLKIT_TARGET_DIR}"
-    ENV CUDA_PATH
-    ENV CUDA_LIB_PATH
-    PATH_SUFFIXES ${_cuda_64bit_lib_dir} "${_path_ext}lib/Win32" "${_path_ext}lib" "${_path_ext}libWin32"
-    DOC ${_doc}
-    NO_DEFAULT_PATH
-    )
-  if (NOT CMAKE_CROSSCOMPILING)
-    # Search default search paths, after we search our own set of paths.
-    find_library(${_var}
-      NAMES ${_names}
-      PATHS "/usr/lib/nvidia-current"
-      DOC ${_doc}
-      )
-  endif()
-endmacro()
-
-macro(cuda_find_library_local_first _var _names _doc)
-  cuda_find_library_local_first_with_path_ext( "${_var}" "${_names}" "${_doc}" "" )
-endmacro()
-
-macro(find_library_local_first _var _names _doc )
-  cuda_find_library_local_first( "${_var}" "${_names}" "${_doc}" "" )
-endmacro()
-
-
-# CUDA_LIBRARIES
-cuda_find_library_local_first(CUDA_CUDART_LIBRARY cudart "\"cudart\" library")
-if(CUDA_VERSION VERSION_EQUAL "3.0")
-  # The cudartemu library only existed for the 3.0 version of CUDA.
-  cuda_find_library_local_first(CUDA_CUDARTEMU_LIBRARY cudartemu "\"cudartemu\" library")
-  mark_as_advanced(
-    CUDA_CUDARTEMU_LIBRARY
-    )
-endif()
-
-if(NOT CUDA_VERSION VERSION_LESS "5.5")
-  cuda_find_library_local_first(CUDA_cudart_static_LIBRARY cudart_static "static CUDA runtime library")
-  mark_as_advanced(CUDA_cudart_static_LIBRARY)
-endif()
-
-
-if(CUDA_cudart_static_LIBRARY)
-  # If static cudart available, use it by default, but provide a user-visible option to disable it.
-  option(CUDA_USE_STATIC_CUDA_RUNTIME "Use the static version of the CUDA runtime library if available" ON)
-else()
-  # If not available, silently disable the option.
-  set(CUDA_USE_STATIC_CUDA_RUNTIME OFF CACHE INTERNAL "")
-endif()
-
-if(CUDA_USE_STATIC_CUDA_RUNTIME)
-  set(CUDA_CUDART_LIBRARY_VAR CUDA_cudart_static_LIBRARY)
-else()
-  set(CUDA_CUDART_LIBRARY_VAR CUDA_CUDART_LIBRARY)
-endif()
-
-if(NOT CUDA_VERSION VERSION_LESS "5.0")
-  cuda_find_library_local_first(CUDA_cudadevrt_LIBRARY cudadevrt "\"cudadevrt\" library")
-  mark_as_advanced(CUDA_cudadevrt_LIBRARY)
-endif()
-
-if(CUDA_USE_STATIC_CUDA_RUNTIME)
-  if(UNIX)
-    # Check for the dependent libraries.
-
-    # Many of the FindXYZ CMake comes with makes use of try_compile with int main(){return 0;}
-    # as the source file.  Unfortunately this causes a warning with -Wstrict-prototypes and
-    # -Werror causes the try_compile to fail.  We will just temporarily disable other flags
-    # when doing the find_package command here.
-    set(_cuda_cmake_c_flags ${CMAKE_C_FLAGS})
-    set(CMAKE_C_FLAGS "-fPIC")
-    find_package(Threads REQUIRED)
-    set(CMAKE_C_FLAGS ${_cuda_cmake_c_flags})
-
-    if(NOT APPLE)
-      #On Linux, you must link against librt when using the static cuda runtime.
-      find_library(CUDA_rt_LIBRARY rt)
-      if (NOT CUDA_rt_LIBRARY)
-        message(WARNING "Expecting to find librt for libcudart_static, but didn't find it.")
-      endif()
-    endif()
-  endif()
-endif()
-
-# CUPTI library showed up in cuda toolkit 4.0
-if(NOT CUDA_VERSION VERSION_LESS "4.0")
-  cuda_find_library_local_first_with_path_ext(CUDA_cupti_LIBRARY cupti "\"cupti\" library" "extras/CUPTI/")
-  mark_as_advanced(CUDA_cupti_LIBRARY)
-endif()
-
-# Set the CUDA_LIBRARIES variable.  This is the set of stuff to link against if you are
-# using the CUDA runtime.  For the dynamic version of the runtime, most of the
-# dependencies are brough in, but for the static version there are additional libraries
-# and linker commands needed.
-# Initialize to empty
-set(CUDA_LIBRARIES)
-
-# If we are using emulation mode and we found the cudartemu library then use
-# that one instead of cudart.
-if(CUDA_BUILD_EMULATION AND CUDA_CUDARTEMU_LIBRARY)
-  list(APPEND CUDA_LIBRARIES ${CUDA_CUDARTEMU_LIBRARY})
-elseif(CUDA_USE_STATIC_CUDA_RUNTIME AND CUDA_cudart_static_LIBRARY)
-  list(APPEND CUDA_LIBRARIES ${CUDA_cudart_static_LIBRARY})
-  if (TARGET Threads::Threads)
-    list(APPEND CUDA_LIBRARIES Threads::Threads)
-  endif()
-  list(APPEND CUDA_LIBRARIES ${CMAKE_DL_LIBS})
-  if (CUDA_rt_LIBRARY)
-    list(APPEND CUDA_LIBRARIES ${CUDA_rt_LIBRARY})
-  endif()
-  if(APPLE)
-    # We need to add the default path to the driver (libcuda.dylib) as an rpath, so that
-    # the static cuda runtime can find it at runtime.
-    list(APPEND CUDA_LIBRARIES -Wl,-rpath,/usr/local/cuda/lib)
-  endif()
-else()
-  list(APPEND CUDA_LIBRARIES ${CUDA_CUDART_LIBRARY})
-endif()
-
-# 1.1 toolkit on linux doesn't appear to have a separate library on
-# some platforms.
-cuda_find_library_local_first(CUDA_CUDA_LIBRARY cuda "\"cuda\" library (older versions only).")
-
-mark_as_advanced(
-  CUDA_CUDA_LIBRARY
-  CUDA_CUDART_LIBRARY
-  )
-
-#######################
-# Look for some of the toolkit helper libraries
-macro(FIND_CUDA_HELPER_LIBS _name)
-  cuda_find_library_local_first(CUDA_${_name}_LIBRARY ${_name} "\"${_name}\" library")
-  mark_as_advanced(CUDA_${_name}_LIBRARY)
-endmacro()
-
-#######################
-# Disable emulation for v3.1 onward
-if(CUDA_VERSION VERSION_GREATER "3.0")
-  if(CUDA_BUILD_EMULATION)
-    message(FATAL_ERROR "CUDA_BUILD_EMULATION is not supported in version 3.1 and onwards.  You must disable it to proceed.  You have version ${CUDA_VERSION}.")
-  endif()
-endif()
-
-# Search for additional CUDA toolkit libraries.
-if(CUDA_VERSION VERSION_LESS "3.1")
-  # Emulation libraries aren't available in version 3.1 onward.
-  find_cuda_helper_libs(cufftemu)
-  find_cuda_helper_libs(cublasemu)
-endif()
-find_cuda_helper_libs(cufft)
-find_cuda_helper_libs(cublas)
-if(NOT CUDA_VERSION VERSION_LESS "3.2")
-  # cusparse showed up in version 3.2
-  find_cuda_helper_libs(cusparse)
-  find_cuda_helper_libs(curand)
-  if (WIN32)
-    find_cuda_helper_libs(nvcuvenc)
-    find_cuda_helper_libs(nvcuvid)
-  endif()
-endif()
-if(CUDA_VERSION VERSION_GREATER "5.0" AND CUDA_VERSION VERSION_LESS "9.2")
-  # In CUDA 9.2 cublas_device was deprecated
-  find_cuda_helper_libs(cublas_device)
-endif()
-
-if(NOT CUDA_VERSION VERSION_LESS "5.0")
-  find_cuda_helper_libs(nvToolsExt)
-  find_cuda_helper_libs(OpenCL)
-endif()
-
-if(NOT CUDA_VERSION VERSION_LESS "9.0")
-  # In CUDA 9.0 NPP was nppi was removed
-  find_cuda_helper_libs(nppc)
-  find_cuda_helper_libs(nppial)
-  find_cuda_helper_libs(nppicc)
-  if(CUDA_VERSION VERSION_LESS "11.0")
-    find_cuda_helper_libs(nppicom)
-  endif()
-  find_cuda_helper_libs(nppidei)
-  find_cuda_helper_libs(nppif)
-  find_cuda_helper_libs(nppig)
-  find_cuda_helper_libs(nppim)
-  find_cuda_helper_libs(nppist)
-  find_cuda_helper_libs(nppisu)
-  find_cuda_helper_libs(nppitc)
-  find_cuda_helper_libs(npps)
-  set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppial_LIBRARY};${CUDA_nppicc_LIBRARY};${CUDA_nppicom_LIBRARY};${CUDA_nppidei_LIBRARY};${CUDA_nppif_LIBRARY};${CUDA_nppig_LIBRARY};${CUDA_nppim_LIBRARY};${CUDA_nppist_LIBRARY};${CUDA_nppisu_LIBRARY};${CUDA_nppitc_LIBRARY};${CUDA_npps_LIBRARY}")
-elseif(CUDA_VERSION VERSION_GREATER "5.0")
-  # In CUDA 5.5 NPP was split into 3 separate libraries.
-  find_cuda_helper_libs(nppc)
-  find_cuda_helper_libs(nppi)
-  find_cuda_helper_libs(npps)
-  set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppi_LIBRARY};${CUDA_npps_LIBRARY}")
-elseif(NOT CUDA_VERSION VERSION_LESS "4.0")
-  find_cuda_helper_libs(npp)
-endif()
-if(NOT CUDA_VERSION VERSION_LESS "7.0")
-  # cusolver showed up in version 7.0
-  find_cuda_helper_libs(cusolver)
-endif()
-
-if (CUDA_BUILD_EMULATION)
-  set(CUDA_CUFFT_LIBRARIES ${CUDA_cufftemu_LIBRARY})
-  set(CUDA_CUBLAS_LIBRARIES ${CUDA_cublasemu_LIBRARY})
-else()
-  set(CUDA_CUFFT_LIBRARIES ${CUDA_cufft_LIBRARY})
-  set(CUDA_CUBLAS_LIBRARIES ${CUDA_cublas_LIBRARY} ${CUDA_cublas_device_LIBRARY})
-endif()
-
-########################
-# Look for the SDK stuff.  As of CUDA 3.0 NVSDKCUDA_ROOT has been replaced with
-# NVSDKCOMPUTE_ROOT with the old CUDA C contents moved into the C subdirectory
-find_path(CUDA_SDK_ROOT_DIR common/inc/cutil.h
- HINTS
-  "$ENV{NVSDKCOMPUTE_ROOT}/C"
-  ENV NVSDKCUDA_ROOT
-  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\NVIDIA Corporation\\Installed Products\\NVIDIA SDK 10\\Compute;InstallDir]"
- PATHS
-  "/Developer/GPU\ Computing/C"
-  )
-
-# Keep the CUDA_SDK_ROOT_DIR first in order to be able to override the
-# environment variables.
-set(CUDA_SDK_SEARCH_PATH
-  "${CUDA_SDK_ROOT_DIR}"
-  "${CUDA_TOOLKIT_ROOT_DIR}/local/NVSDK0.2"
-  "${CUDA_TOOLKIT_ROOT_DIR}/NVSDK0.2"
-  "${CUDA_TOOLKIT_ROOT_DIR}/NV_CUDA_SDK"
-  "$ENV{HOME}/NVIDIA_CUDA_SDK"
-  "$ENV{HOME}/NVIDIA_CUDA_SDK_MACOSX"
-  "/Developer/CUDA"
-  )
-
-# Example of how to find an include file from the CUDA_SDK_ROOT_DIR
-
-# find_path(CUDA_CUT_INCLUDE_DIR
-#   cutil.h
-#   PATHS ${CUDA_SDK_SEARCH_PATH}
-#   PATH_SUFFIXES "common/inc"
-#   DOC "Location of cutil.h"
-#   NO_DEFAULT_PATH
-#   )
-# # Now search system paths
-# find_path(CUDA_CUT_INCLUDE_DIR cutil.h DOC "Location of cutil.h")
-
-# mark_as_advanced(CUDA_CUT_INCLUDE_DIR)
-
-
-# Example of how to find a library in the CUDA_SDK_ROOT_DIR
-
-# # cutil library is called cutil64 for 64 bit builds on windows.  We don't want
-# # to get these confused, so we are setting the name based on the word size of
-# # the build.
-
-# if(CMAKE_SIZEOF_VOID_P EQUAL 8)
-#   set(cuda_cutil_name cutil64)
-# else()
-#   set(cuda_cutil_name cutil32)
-# endif()
-
-# find_library(CUDA_CUT_LIBRARY
-#   NAMES cutil ${cuda_cutil_name}
-#   PATHS ${CUDA_SDK_SEARCH_PATH}
-#   # The new version of the sdk shows up in common/lib, but the old one is in lib
-#   PATH_SUFFIXES "common/lib" "lib"
-#   DOC "Location of cutil library"
-#   NO_DEFAULT_PATH
-#   )
-# # Now search system paths
-# find_library(CUDA_CUT_LIBRARY NAMES cutil ${cuda_cutil_name} DOC "Location of cutil library")
-# mark_as_advanced(CUDA_CUT_LIBRARY)
-# set(CUDA_CUT_LIBRARIES ${CUDA_CUT_LIBRARY})
-
-
-
-#############################
-# Check for required components
-set(CUDA_FOUND TRUE)
-
-set(CUDA_TOOLKIT_ROOT_DIR_INTERNAL "${CUDA_TOOLKIT_ROOT_DIR}" CACHE INTERNAL
-  "This is the value of the last time CUDA_TOOLKIT_ROOT_DIR was set successfully." FORCE)
-set(CUDA_TOOLKIT_TARGET_DIR_INTERNAL "${CUDA_TOOLKIT_TARGET_DIR}" CACHE INTERNAL
-  "This is the value of the last time CUDA_TOOLKIT_TARGET_DIR was set successfully." FORCE)
-set(CUDA_SDK_ROOT_DIR_INTERNAL "${CUDA_SDK_ROOT_DIR}" CACHE INTERNAL
-  "This is the value of the last time CUDA_SDK_ROOT_DIR was set successfully." FORCE)
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-
-find_package_handle_standard_args(CUDA
-  REQUIRED_VARS
-    CUDA_TOOLKIT_ROOT_DIR
-    CUDA_NVCC_EXECUTABLE
-    CUDA_INCLUDE_DIRS
-    ${CUDA_CUDART_LIBRARY_VAR}
-  VERSION_VAR
-    CUDA_VERSION
-  )
-
-
-
-###############################################################################
-###############################################################################
-# Macros
-###############################################################################
-###############################################################################
-
-###############################################################################
-# Add include directories to pass to the nvcc command.
-macro(CUDA_INCLUDE_DIRECTORIES)
-  foreach(dir ${ARGN})
-    list(APPEND CUDA_NVCC_INCLUDE_DIRS_USER ${dir})
-  endforeach()
-endmacro()
-
-
-##############################################################################
-cuda_find_helper_file(parse_cubin cmake)
-cuda_find_helper_file(make2cmake cmake)
-cuda_find_helper_file(run_nvcc cmake)
-include("${CMAKE_CURRENT_LIST_DIR}/FindCUDA/select_compute_arch.cmake")
-
-##############################################################################
-# Separate the OPTIONS out from the sources
-#
-macro(CUDA_GET_SOURCES_AND_OPTIONS _sources _cmake_options _options)
-  set( ${_sources} )
-  set( ${_cmake_options} )
-  set( ${_options} )
-  set( _found_options FALSE )
-  foreach(arg ${ARGN})
-    if("x${arg}" STREQUAL "xOPTIONS")
-      set( _found_options TRUE )
-    elseif(
-        "x${arg}" STREQUAL "xWIN32" OR
-        "x${arg}" STREQUAL "xMACOSX_BUNDLE" OR
-        "x${arg}" STREQUAL "xEXCLUDE_FROM_ALL" OR
-        "x${arg}" STREQUAL "xSTATIC" OR
-        "x${arg}" STREQUAL "xSHARED" OR
-        "x${arg}" STREQUAL "xMODULE"
-        )
-      list(APPEND ${_cmake_options} ${arg})
-    else()
-      if ( _found_options )
-        list(APPEND ${_options} ${arg})
-      else()
-        # Assume this is a file
-        list(APPEND ${_sources} ${arg})
-      endif()
-    endif()
-  endforeach()
-endmacro()
-
-##############################################################################
-# Parse the OPTIONS from ARGN and set the variables prefixed by _option_prefix
-#
-macro(CUDA_PARSE_NVCC_OPTIONS _option_prefix)
-  set( _found_config )
-  foreach(arg ${ARGN})
-    # Determine if we are dealing with a perconfiguration flag
-    foreach(config ${CUDA_configuration_types})
-      string(TOUPPER ${config} config_upper)
-      if (arg STREQUAL "${config_upper}")
-        set( _found_config _${arg})
-        # Set arg to nothing to keep it from being processed further
-        set( arg )
-      endif()
-    endforeach()
-
-    if ( arg )
-      list(APPEND ${_option_prefix}${_found_config} "${arg}")
-    endif()
-  endforeach()
-endmacro()
-
-##############################################################################
-# Helper to add the include directory for CUDA only once
-function(CUDA_ADD_CUDA_INCLUDE_ONCE)
-  get_directory_property(_include_directories INCLUDE_DIRECTORIES)
-  set(_add TRUE)
-  if(_include_directories)
-    foreach(dir ${_include_directories})
-      if("${dir}" STREQUAL "${CUDA_INCLUDE_DIRS}")
-        set(_add FALSE)
-      endif()
-    endforeach()
-  endif()
-  if(_add)
-    include_directories(${CUDA_INCLUDE_DIRS})
-  endif()
-endfunction()
-
-function(CUDA_BUILD_SHARED_LIBRARY shared_flag)
-  set(cmake_args ${ARGN})
-  # If SHARED, MODULE, or STATIC aren't already in the list of arguments, then
-  # add SHARED or STATIC based on the value of BUILD_SHARED_LIBS.
-  list(FIND cmake_args SHARED _cuda_found_SHARED)
-  list(FIND cmake_args MODULE _cuda_found_MODULE)
-  list(FIND cmake_args STATIC _cuda_found_STATIC)
-  if( _cuda_found_SHARED GREATER -1 OR
-      _cuda_found_MODULE GREATER -1 OR
-      _cuda_found_STATIC GREATER -1)
-    set(_cuda_build_shared_libs)
-  else()
-    if (BUILD_SHARED_LIBS)
-      set(_cuda_build_shared_libs SHARED)
-    else()
-      set(_cuda_build_shared_libs STATIC)
-    endif()
-  endif()
-  set(${shared_flag} ${_cuda_build_shared_libs} PARENT_SCOPE)
-endfunction()
-
-##############################################################################
-# Helper to avoid clashes of files with the same basename but different paths.
-# This doesn't attempt to do exactly what CMake internals do, which is to only
-# add this path when there is a conflict, since by the time a second collision
-# in names is detected it's already too late to fix the first one.  For
-# consistency sake the relative path will be added to all files.
-function(CUDA_COMPUTE_BUILD_PATH path build_path)
-  #message("CUDA_COMPUTE_BUILD_PATH([${path}] ${build_path})")
-  # Only deal with CMake style paths from here on out
-  file(TO_CMAKE_PATH "${path}" bpath)
-  if (IS_ABSOLUTE "${bpath}")
-    # Absolute paths are generally unnessary, especially if something like
-    # file(GLOB_RECURSE) is used to pick up the files.
-
-    string(FIND "${bpath}" "${CMAKE_CURRENT_BINARY_DIR}" _binary_dir_pos)
-    if (_binary_dir_pos EQUAL 0)
-      file(RELATIVE_PATH bpath "${CMAKE_CURRENT_BINARY_DIR}" "${bpath}")
-    else()
-      file(RELATIVE_PATH bpath "${CMAKE_CURRENT_SOURCE_DIR}" "${bpath}")
-    endif()
-  endif()
-
-  # This recipe is from cmLocalGenerator::CreateSafeUniqueObjectFileName in the
-  # CMake source.
-
-  # Remove leading /
-  string(REGEX REPLACE "^[/]+" "" bpath "${bpath}")
-  # Avoid absolute paths by removing ':'
-  string(REPLACE ":" "_" bpath "${bpath}")
-  # Avoid relative paths that go up the tree
-  string(REPLACE "../" "__/" bpath "${bpath}")
-  # Avoid spaces
-  string(REPLACE " " "_" bpath "${bpath}")
-
-  # Strip off the filename.  I wait until here to do it, since removin the
-  # basename can make a path that looked like path/../basename turn into
-  # path/.. (notice the trailing slash).
-  get_filename_component(bpath "${bpath}" PATH)
-
-  set(${build_path} "${bpath}" PARENT_SCOPE)
-  #message("${build_path} = ${bpath}")
-endfunction()
-
-##############################################################################
-# This helper macro populates the following variables and setups up custom
-# commands and targets to invoke the nvcc compiler to generate C or PTX source
-# dependent upon the format parameter.  The compiler is invoked once with -M
-# to generate a dependency file and a second time with -cuda or -ptx to generate
-# a .cpp or .ptx file.
-# INPUT:
-#   cuda_target         - Target name
-#   format              - PTX, CUBIN, FATBIN or OBJ
-#   FILE1 .. FILEN      - The remaining arguments are the sources to be wrapped.
-#   OPTIONS             - Extra options to NVCC
-# OUTPUT:
-#   generated_files     - List of generated files
-##############################################################################
-##############################################################################
-
-macro(CUDA_WRAP_SRCS cuda_target format generated_files)
-
-  # Put optional arguments in list.
-  set(_argn_list "${ARGN}")
-  # If one of the given optional arguments is "PHONY", make a note of it, then
-  # remove it from the list.
-  list(FIND _argn_list "PHONY" _phony_idx)
-  if("${_phony_idx}" GREATER "-1")
-    set(_target_is_phony true)
-    list(REMOVE_AT _argn_list ${_phony_idx})
-  else()
-    set(_target_is_phony false)
-  endif()
-
-  # If CMake doesn't support separable compilation, complain
-  if(CUDA_SEPARABLE_COMPILATION AND CMAKE_VERSION VERSION_LESS "2.8.10.1")
-    message(SEND_ERROR "CUDA_SEPARABLE_COMPILATION isn't supported for CMake versions less than 2.8.10.1")
-  endif()
-
-  # Set up all the command line flags here, so that they can be overridden on a per target basis.
-
-  set(nvcc_flags "")
-
-  # Emulation if the card isn't present.
-  if (CUDA_BUILD_EMULATION)
-    # Emulation.
-    set(nvcc_flags ${nvcc_flags} --device-emulation -D_DEVICEEMU -g)
-  else()
-    # Device mode.  No flags necessary.
-  endif()
-
-  if(CUDA_HOST_COMPILATION_CPP)
-    set(CUDA_C_OR_CXX CXX)
-  else()
-    if(CUDA_VERSION VERSION_LESS "3.0")
-      set(nvcc_flags ${nvcc_flags} --host-compilation C)
-    else()
-      message(WARNING "--host-compilation flag is deprecated in CUDA version >= 3.0.  Removing --host-compilation C flag" )
-    endif()
-    set(CUDA_C_OR_CXX C)
-  endif()
-
-  set(generated_extension ${CMAKE_${CUDA_C_OR_CXX}_OUTPUT_EXTENSION})
-
-  if(CUDA_64_BIT_DEVICE_CODE)
-    set(nvcc_flags ${nvcc_flags} -m64)
-  else()
-    set(nvcc_flags ${nvcc_flags} -m32)
-  endif()
-
-  if(CUDA_TARGET_CPU_ARCH)
-    set(nvcc_flags ${nvcc_flags} "--target-cpu-architecture=${CUDA_TARGET_CPU_ARCH}")
-  endif()
-
-  # This needs to be passed in at this stage, because VS needs to fill out the
-  # various macros from within VS.  Note that CCBIN is only used if
-  # -ccbin or --compiler-bindir isn't used and CUDA_HOST_COMPILER matches
-  # _CUDA_MSVC_HOST_COMPILER
-  if(CMAKE_GENERATOR MATCHES "Visual Studio")
-    set(ccbin_flags -D "\"CCBIN:PATH=${_CUDA_MSVC_HOST_COMPILER}\"" )
-  else()
-    set(ccbin_flags)
-  endif()
-
-  # Figure out which configure we will use and pass that in as an argument to
-  # the script.  We need to defer the decision until compilation time, because
-  # for VS projects we won't know if we are making a debug or release build
-  # until build time.
-  if(CMAKE_GENERATOR MATCHES "Visual Studio")
-    set( CUDA_build_configuration "$(ConfigurationName)" )
-  else()
-    set( CUDA_build_configuration "${CMAKE_BUILD_TYPE}")
-  endif()
-
-  # Initialize our list of includes with the user ones followed by the CUDA system ones.
-  set(CUDA_NVCC_INCLUDE_DIRS ${CUDA_NVCC_INCLUDE_DIRS_USER} "${CUDA_INCLUDE_DIRS}")
-  if(_target_is_phony)
-    # If the passed in target name isn't a real target (i.e., this is from a call to one of the
-    # cuda_compile_* functions), need to query directory properties to get include directories
-    # and compile definitions.
-    get_directory_property(_dir_include_dirs INCLUDE_DIRECTORIES)
-    get_directory_property(_dir_compile_defs COMPILE_DEFINITIONS)
-
-    list(APPEND CUDA_NVCC_INCLUDE_DIRS "${_dir_include_dirs}")
-    set(CUDA_NVCC_COMPILE_DEFINITIONS "${_dir_compile_defs}")
-  else()
-    # Append the include directories for this target via generator expression, which is
-    # expanded by the FILE(GENERATE) call below.  This generator expression captures all
-    # include dirs set by the user, whether via directory properties or target properties
-    list(APPEND CUDA_NVCC_INCLUDE_DIRS "$<TARGET_PROPERTY:${cuda_target},INCLUDE_DIRECTORIES>")
-
-    # Do the same thing with compile definitions
-    set(CUDA_NVCC_COMPILE_DEFINITIONS "$<TARGET_PROPERTY:${cuda_target},COMPILE_DEFINITIONS>")
-  endif()
-
-
-  # Reset these variables
-  set(CUDA_WRAP_OPTION_NVCC_FLAGS)
-  foreach(config ${CUDA_configuration_types})
-    string(TOUPPER ${config} config_upper)
-    set(CUDA_WRAP_OPTION_NVCC_FLAGS_${config_upper})
-  endforeach()
-
-  CUDA_GET_SOURCES_AND_OPTIONS(_cuda_wrap_sources _cuda_wrap_cmake_options _cuda_wrap_options ${_argn_list})
-  CUDA_PARSE_NVCC_OPTIONS(CUDA_WRAP_OPTION_NVCC_FLAGS ${_cuda_wrap_options})
-
-  # Figure out if we are building a shared library.  BUILD_SHARED_LIBS is
-  # respected in CUDA_ADD_LIBRARY.
-  set(_cuda_build_shared_libs FALSE)
-  # SHARED, MODULE
-  list(FIND _cuda_wrap_cmake_options SHARED _cuda_found_SHARED)
-  list(FIND _cuda_wrap_cmake_options MODULE _cuda_found_MODULE)
-  if(_cuda_found_SHARED GREATER -1 OR _cuda_found_MODULE GREATER -1)
-    set(_cuda_build_shared_libs TRUE)
-  endif()
-  # STATIC
-  list(FIND _cuda_wrap_cmake_options STATIC _cuda_found_STATIC)
-  if(_cuda_found_STATIC GREATER -1)
-    set(_cuda_build_shared_libs FALSE)
-  endif()
-
-  # CUDA_HOST_FLAGS
-  if(_cuda_build_shared_libs)
-    # If we are setting up code for a shared library, then we need to add extra flags for
-    # compiling objects for shared libraries.
-    set(CUDA_HOST_SHARED_FLAGS ${CMAKE_SHARED_LIBRARY_${CUDA_C_OR_CXX}_FLAGS})
-  else()
-    set(CUDA_HOST_SHARED_FLAGS)
-  endif()
-  # Only add the CMAKE_{C,CXX}_FLAGS if we are propagating host flags.  We
-  # always need to set the SHARED_FLAGS, though.
-  if(CUDA_PROPAGATE_HOST_FLAGS)
-    set(_cuda_host_flags "set(CMAKE_HOST_FLAGS ${CMAKE_${CUDA_C_OR_CXX}_FLAGS} ${CUDA_HOST_SHARED_FLAGS})")
-  else()
-    set(_cuda_host_flags "set(CMAKE_HOST_FLAGS ${CUDA_HOST_SHARED_FLAGS})")
-  endif()
-
-  set(_cuda_nvcc_flags_config "# Build specific configuration flags")
-  # Loop over all the configuration types to generate appropriate flags for run_nvcc.cmake
-  foreach(config ${CUDA_configuration_types})
-    string(TOUPPER ${config} config_upper)
-    # CMAKE_FLAGS are strings and not lists.  By not putting quotes around CMAKE_FLAGS
-    # we convert the strings to lists (like we want).
-
-    if(CUDA_PROPAGATE_HOST_FLAGS)
-      # nvcc chokes on -g3 in versions previous to 3.0, so replace it with -g
-      set(_cuda_fix_g3 FALSE)
-
-      if(CMAKE_COMPILER_IS_GNUCC)
-        if (CUDA_VERSION VERSION_LESS  "3.0" OR
-            CUDA_VERSION VERSION_EQUAL "4.1" OR
-            CUDA_VERSION VERSION_EQUAL "4.2"
-            )
-          set(_cuda_fix_g3 TRUE)
-        endif()
-      endif()
-      if(_cuda_fix_g3)
-        string(REPLACE "-g3" "-g" _cuda_C_FLAGS "${CMAKE_${CUDA_C_OR_CXX}_FLAGS_${config_upper}}")
-      else()
-        set(_cuda_C_FLAGS "${CMAKE_${CUDA_C_OR_CXX}_FLAGS_${config_upper}}")
-      endif()
-
-      string(APPEND _cuda_host_flags "\nset(CMAKE_HOST_FLAGS_${config_upper} ${_cuda_C_FLAGS})")
-    endif()
-
-    # Note that if we ever want CUDA_NVCC_FLAGS_<CONFIG> to be string (instead of a list
-    # like it is currently), we can remove the quotes around the
-    # ${CUDA_NVCC_FLAGS_${config_upper}} variable like the CMAKE_HOST_FLAGS_<CONFIG> variable.
-    string(APPEND _cuda_nvcc_flags_config "\nset(CUDA_NVCC_FLAGS_${config_upper} ${CUDA_NVCC_FLAGS_${config_upper}} ;; ${CUDA_WRAP_OPTION_NVCC_FLAGS_${config_upper}})")
-  endforeach()
-
-  # Process the C++11 flag.  If the host sets the flag, we need to add it to nvcc and
-  # remove it from the host. This is because -Xcompile -std=c++ will choke nvcc (it uses
-  # the C preprocessor).  In order to get this to work correctly, we need to use nvcc's
-  # specific c++11 flag.
-  if( "${_cuda_host_flags}" MATCHES "-std=c\\+\\+11")
-    # Add the c++11 flag to nvcc if it isn't already present.  Note that we only look at
-    # the main flag instead of the configuration specific flags.
-    if( NOT "${CUDA_NVCC_FLAGS}" MATCHES "-std=c\\+\\+11" )
-      list(APPEND nvcc_flags --std c++11)
-    endif()
-    string(REGEX REPLACE "[-]+std=c\\+\\+11" "" _cuda_host_flags "${_cuda_host_flags}")
-  endif()
-
-  if(_cuda_build_shared_libs)
-    list(APPEND nvcc_flags "-D${cuda_target}_EXPORTS")
-  endif()
-
-  # Reset the output variable
-  set(_cuda_wrap_generated_files "")
-
-  # Iterate over the macro arguments and create custom
-  # commands for all the .cu files.
-  foreach(file ${_argn_list})
-    # Ignore any file marked as a HEADER_FILE_ONLY
-    get_source_file_property(_is_header ${file} HEADER_FILE_ONLY)
-    # Allow per source file overrides of the format.  Also allows compiling non-.cu files.
-    get_source_file_property(_cuda_source_format ${file} CUDA_SOURCE_PROPERTY_FORMAT)
-    if((${file} MATCHES "\\.cu$" OR _cuda_source_format) AND NOT _is_header)
-
-      if(NOT _cuda_source_format)
-        set(_cuda_source_format ${format})
-      endif()
-      # If file isn't a .cu file, we need to tell nvcc to treat it as such.
-      if(NOT ${file} MATCHES "\\.cu$")
-        set(cuda_language_flag -x=cu)
-      else()
-        set(cuda_language_flag)
-      endif()
-
-      if( ${_cuda_source_format} MATCHES "OBJ")
-        set( cuda_compile_to_external_module OFF )
-      else()
-        set( cuda_compile_to_external_module ON )
-        if( ${_cuda_source_format} MATCHES "PTX" )
-          set( cuda_compile_to_external_module_type "ptx" )
-        elseif( ${_cuda_source_format} MATCHES "CUBIN")
-          set( cuda_compile_to_external_module_type "cubin" )
-        elseif( ${_cuda_source_format} MATCHES "FATBIN")
-          set( cuda_compile_to_external_module_type "fatbin" )
-        else()
-          message( FATAL_ERROR "Invalid format flag passed to CUDA_WRAP_SRCS or set with CUDA_SOURCE_PROPERTY_FORMAT file property for file '${file}': '${_cuda_source_format}'.  Use OBJ, PTX, CUBIN or FATBIN.")
-        endif()
-      endif()
-
-      if(cuda_compile_to_external_module)
-        # Don't use any of the host compilation flags for PTX targets.
-        set(CUDA_HOST_FLAGS)
-        set(CUDA_NVCC_FLAGS_CONFIG)
-      else()
-        set(CUDA_HOST_FLAGS ${_cuda_host_flags})
-        set(CUDA_NVCC_FLAGS_CONFIG ${_cuda_nvcc_flags_config})
-      endif()
-
-      # Determine output directory
-      cuda_compute_build_path("${file}" cuda_build_path)
-      set(cuda_compile_intermediate_directory "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${cuda_target}.dir/${cuda_build_path}")
-      if(CUDA_GENERATED_OUTPUT_DIR)
-        set(cuda_compile_output_dir "${CUDA_GENERATED_OUTPUT_DIR}")
-      else()
-        if ( cuda_compile_to_external_module )
-          set(cuda_compile_output_dir "${CMAKE_CURRENT_BINARY_DIR}")
-        else()
-          set(cuda_compile_output_dir "${cuda_compile_intermediate_directory}")
-        endif()
-      endif()
-
-      # Add a custom target to generate a c or ptx file. ######################
-
-      get_filename_component( basename ${file} NAME )
-      if( cuda_compile_to_external_module )
-        set(generated_file_path "${cuda_compile_output_dir}")
-        set(generated_file_basename "${cuda_target}_generated_${basename}.${cuda_compile_to_external_module_type}")
-        set(format_flag "-${cuda_compile_to_external_module_type}")
-        file(MAKE_DIRECTORY "${cuda_compile_output_dir}")
-      else()
-        set(generated_file_path "${cuda_compile_output_dir}/${CMAKE_CFG_INTDIR}")
-        set(generated_file_basename "${cuda_target}_generated_${basename}${generated_extension}")
-        if(CUDA_SEPARABLE_COMPILATION)
-          set(format_flag "-dc")
-        else()
-          set(format_flag "-c")
-        endif()
-      endif()
-
-      # Set all of our file names.  Make sure that whatever filenames that have
-      # generated_file_path in them get passed in through as a command line
-      # argument, so that the ${CMAKE_CFG_INTDIR} gets expanded at run time
-      # instead of configure time.
-      set(generated_file "${generated_file_path}/${generated_file_basename}")
-      set(cmake_dependency_file "${cuda_compile_intermediate_directory}/${generated_file_basename}.depend")
-      set(NVCC_generated_dependency_file "${cuda_compile_intermediate_directory}/${generated_file_basename}.NVCC-depend")
-      set(generated_cubin_file "${generated_file_path}/${generated_file_basename}.cubin.txt")
-      set(custom_target_script_pregen "${cuda_compile_intermediate_directory}/${generated_file_basename}.cmake.pre-gen")
-      set(custom_target_script "${cuda_compile_intermediate_directory}/${generated_file_basename}$<$<BOOL:$<CONFIG>>:.$<CONFIG>>.cmake")
-
-      # Setup properties for obj files:
-      if( NOT cuda_compile_to_external_module )
-        set_source_files_properties("${generated_file}"
-          PROPERTIES
-          EXTERNAL_OBJECT true # This is an object file not to be compiled, but only be linked.
-          )
-      endif()
-
-      # Don't add CMAKE_CURRENT_SOURCE_DIR if the path is already an absolute path.
-      get_filename_component(file_path "${file}" PATH)
-      if(IS_ABSOLUTE "${file_path}")
-        set(source_file "${file}")
-      else()
-        set(source_file "${CMAKE_CURRENT_SOURCE_DIR}/${file}")
-      endif()
-
-      if( NOT cuda_compile_to_external_module AND CUDA_SEPARABLE_COMPILATION)
-        list(APPEND ${cuda_target}_SEPARABLE_COMPILATION_OBJECTS "${generated_file}")
-      endif()
-
-      # Bring in the dependencies.  Creates a variable CUDA_NVCC_DEPEND #######
-      cuda_include_nvcc_dependencies(${cmake_dependency_file})
-
-      # Convenience string for output #########################################
-      if(CUDA_BUILD_EMULATION)
-        set(cuda_build_type "Emulation")
-      else()
-        set(cuda_build_type "Device")
-      endif()
-
-      # Build the NVCC made dependency file ###################################
-      set(build_cubin OFF)
-      if ( NOT CUDA_BUILD_EMULATION AND CUDA_BUILD_CUBIN )
-         if ( NOT cuda_compile_to_external_module )
-           set ( build_cubin ON )
-         endif()
-      endif()
-
-      # Configure the build script
-      configure_file("${CUDA_run_nvcc}" "${custom_target_script_pregen}" @ONLY)
-      file(GENERATE
-        OUTPUT "${custom_target_script}"
-        INPUT "${custom_target_script_pregen}"
-        )
-
-      # So if a user specifies the same cuda file as input more than once, you
-      # can have bad things happen with dependencies.  Here we check an option
-      # to see if this is the behavior they want.
-      if(CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE)
-        set(main_dep MAIN_DEPENDENCY ${source_file})
-      else()
-        set(main_dep DEPENDS ${source_file})
-      endif()
-
-      if(CUDA_VERBOSE_BUILD)
-        set(verbose_output ON)
-      elseif(CMAKE_GENERATOR MATCHES "Makefiles")
-        set(verbose_output "$(VERBOSE)")
-      else()
-        set(verbose_output OFF)
-      endif()
-
-      # Create up the comment string
-      file(RELATIVE_PATH generated_file_relative_path "${CMAKE_BINARY_DIR}" "${generated_file}")
-      if(cuda_compile_to_external_module)
-        set(cuda_build_comment_string "Building NVCC ${cuda_compile_to_external_module_type} file ${generated_file_relative_path}")
-      else()
-        set(cuda_build_comment_string "Building NVCC (${cuda_build_type}) object ${generated_file_relative_path}")
-      endif()
-
-      set(_verbatim VERBATIM)
-      if(ccbin_flags MATCHES "\\$\\(VCInstallDir\\)")
-        set(_verbatim "")
-      endif()
-
-      # Build the generated file and dependency file ##########################
-      add_custom_command(
-        OUTPUT ${generated_file}
-        # These output files depend on the source_file and the contents of cmake_dependency_file
-        ${main_dep}
-        DEPENDS ${CUDA_NVCC_DEPEND}
-        DEPENDS ${custom_target_script}
-        # Make sure the output directory exists before trying to write to it.
-        COMMAND ${CMAKE_COMMAND} -E make_directory "${generated_file_path}"
-        COMMAND ${CMAKE_COMMAND} ARGS
-          -D verbose:BOOL=${verbose_output}
-          ${ccbin_flags}
-          -D build_configuration:STRING=${CUDA_build_configuration}
-          -D "generated_file:STRING=${generated_file}"
-          -D "generated_cubin_file:STRING=${generated_cubin_file}"
-          -P "${custom_target_script}"
-        WORKING_DIRECTORY "${cuda_compile_intermediate_directory}"
-        COMMENT "${cuda_build_comment_string}"
-        ${_verbatim}
-        )
-
-      # Make sure the build system knows the file is generated.
-      set_source_files_properties(${generated_file} PROPERTIES GENERATED TRUE)
-
-      list(APPEND _cuda_wrap_generated_files ${generated_file})
-
-      # Add the other files that we want cmake to clean on a cleanup ##########
-      list(APPEND CUDA_ADDITIONAL_CLEAN_FILES "${cmake_dependency_file}")
-      list(REMOVE_DUPLICATES CUDA_ADDITIONAL_CLEAN_FILES)
-      set(CUDA_ADDITIONAL_CLEAN_FILES ${CUDA_ADDITIONAL_CLEAN_FILES} CACHE INTERNAL "List of intermediate files that are part of the cuda dependency scanning.")
-
-    endif()
-  endforeach()
-
-  # Set the return parameter
-  set(${generated_files} ${_cuda_wrap_generated_files})
-endmacro()
-
-function(_cuda_get_important_host_flags important_flags flag_string)
-  if(CMAKE_GENERATOR MATCHES "Visual Studio")
-    string(REGEX MATCHALL "/M[DT][d]?" flags "${flag_string}")
-    list(APPEND ${important_flags} ${flags})
-  else()
-    string(REGEX MATCHALL "-fPIC" flags "${flag_string}")
-    list(APPEND ${important_flags} ${flags})
-  endif()
-  set(${important_flags} ${${important_flags}} PARENT_SCOPE)
-endfunction()
-
-###############################################################################
-###############################################################################
-# Separable Compilation Link
-###############################################################################
-###############################################################################
-
-# Compute the filename to be used by CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS
-function(CUDA_COMPUTE_SEPARABLE_COMPILATION_OBJECT_FILE_NAME output_file_var cuda_target object_files)
-  if (object_files)
-    set(generated_extension ${CMAKE_${CUDA_C_OR_CXX}_OUTPUT_EXTENSION})
-    set(output_file "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${cuda_target}.dir/${CMAKE_CFG_INTDIR}/${cuda_target}_intermediate_link${generated_extension}")
-  else()
-    set(output_file)
-  endif()
-
-  set(${output_file_var} "${output_file}" PARENT_SCOPE)
-endfunction()
-
-# Setup the build rule for the separable compilation intermediate link file.
-function(CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS output_file cuda_target options object_files)
-  if (object_files)
-
-    set_source_files_properties("${output_file}"
-      PROPERTIES
-      EXTERNAL_OBJECT TRUE # This is an object file not to be compiled, but only
-                           # be linked.
-      GENERATED TRUE       # This file is generated during the build
-      )
-
-    # For now we are ignoring all the configuration specific flags.
-    set(nvcc_flags)
-    CUDA_PARSE_NVCC_OPTIONS(nvcc_flags ${options})
-    if(CUDA_64_BIT_DEVICE_CODE)
-      list(APPEND nvcc_flags -m64)
-    else()
-      list(APPEND nvcc_flags -m32)
-    endif()
-    # If -ccbin, --compiler-bindir has been specified, don't do anything.  Otherwise add it here.
-    list( FIND nvcc_flags "-ccbin" ccbin_found0 )
-    list( FIND nvcc_flags "--compiler-bindir" ccbin_found1 )
-    if( ccbin_found0 LESS 0 AND ccbin_found1 LESS 0 AND CUDA_HOST_COMPILER )
-      # Match VERBATIM check below.
-      if(CUDA_HOST_COMPILER MATCHES "\\$\\(VCInstallDir\\)")
-        list(APPEND nvcc_flags -ccbin "\"${CUDA_HOST_COMPILER}\"")
-      else()
-        list(APPEND nvcc_flags -ccbin "${CUDA_HOST_COMPILER}")
-      endif()
-    endif()
-
-    # Create a list of flags specified by CUDA_NVCC_FLAGS_${CONFIG} and CMAKE_${CUDA_C_OR_CXX}_FLAGS*
-    set(config_specific_flags)
-    set(flags)
-    foreach(config ${CUDA_configuration_types})
-      string(TOUPPER ${config} config_upper)
-      # Add config specific flags
-      foreach(f ${CUDA_NVCC_FLAGS_${config_upper}})
-        list(APPEND config_specific_flags $<$<CONFIG:${config}>:${f}>)
-      endforeach()
-      set(important_host_flags)
-      _cuda_get_important_host_flags(important_host_flags "${CMAKE_${CUDA_C_OR_CXX}_FLAGS_${config_upper}}")
-      foreach(f ${important_host_flags})
-        list(APPEND flags $<$<CONFIG:${config}>:-Xcompiler> $<$<CONFIG:${config}>:${f}>)
-      endforeach()
-    endforeach()
-    # Add CMAKE_${CUDA_C_OR_CXX}_FLAGS
-    set(important_host_flags)
-    _cuda_get_important_host_flags(important_host_flags "${CMAKE_${CUDA_C_OR_CXX}_FLAGS}")
-    foreach(f ${important_host_flags})
-      list(APPEND flags -Xcompiler ${f})
-    endforeach()
-
-    # Add our general CUDA_NVCC_FLAGS with the configuration specifig flags
-    set(nvcc_flags ${CUDA_NVCC_FLAGS} ${config_specific_flags} ${nvcc_flags})
-
-    file(RELATIVE_PATH output_file_relative_path "${CMAKE_BINARY_DIR}" "${output_file}")
-
-    # Some generators don't handle the multiple levels of custom command
-    # dependencies correctly (obj1 depends on file1, obj2 depends on obj1), so
-    # we work around that issue by compiling the intermediate link object as a
-    # pre-link custom command in that situation.
-    set(do_obj_build_rule TRUE)
-    if (MSVC_VERSION GREATER 1599 AND MSVC_VERSION LESS 1800)
-      # VS 2010 and 2012 have this problem.
-      set(do_obj_build_rule FALSE)
-    endif()
-
-    set(_verbatim VERBATIM)
-    if(nvcc_flags MATCHES "\\$\\(VCInstallDir\\)")
-      set(_verbatim "")
-    endif()
-
-    if (do_obj_build_rule)
-      add_custom_command(
-        OUTPUT ${output_file}
-        DEPENDS ${object_files}
-        COMMAND ${CUDA_NVCC_EXECUTABLE} ${nvcc_flags} -dlink ${object_files} -o ${output_file}
-        ${flags}
-        COMMENT "Building NVCC intermediate link file ${output_file_relative_path}"
-        COMMAND_EXPAND_LISTS
-        ${_verbatim}
-        )
-    else()
-      get_filename_component(output_file_dir "${output_file}" DIRECTORY)
-      add_custom_command(
-        TARGET ${cuda_target}
-        PRE_LINK
-        COMMAND ${CMAKE_COMMAND} -E echo "Building NVCC intermediate link file ${output_file_relative_path}"
-        COMMAND ${CMAKE_COMMAND} -E make_directory "${output_file_dir}"
-        COMMAND ${CUDA_NVCC_EXECUTABLE} ${nvcc_flags} ${flags} -dlink ${object_files} -o "${output_file}"
-        COMMAND_EXPAND_LISTS
-        ${_verbatim}
-        )
-    endif()
- endif()
-endfunction()
-
-###############################################################################
-###############################################################################
-# ADD LIBRARY
-###############################################################################
-###############################################################################
-macro(CUDA_ADD_LIBRARY cuda_target)
-
-  CUDA_ADD_CUDA_INCLUDE_ONCE()
-
-  # Separate the sources from the options
-  CUDA_GET_SOURCES_AND_OPTIONS(_sources _cmake_options _options ${ARGN})
-  CUDA_BUILD_SHARED_LIBRARY(_cuda_shared_flag ${ARGN})
-  # Create custom commands and targets for each file.
-  CUDA_WRAP_SRCS( ${cuda_target} OBJ _generated_files ${_sources}
-    ${_cmake_options} ${_cuda_shared_flag}
-    OPTIONS ${_options} )
-
-  # Compute the file name of the intermedate link file used for separable
-  # compilation.
-  CUDA_COMPUTE_SEPARABLE_COMPILATION_OBJECT_FILE_NAME(link_file ${cuda_target} "${${cuda_target}_SEPARABLE_COMPILATION_OBJECTS}")
-
-  # Add the library.
-  add_library(${cuda_target} ${_cmake_options}
-    ${_generated_files}
-    ${_sources}
-    ${link_file}
-    )
-
-  # Add a link phase for the separable compilation if it has been enabled.  If
-  # it has been enabled then the ${cuda_target}_SEPARABLE_COMPILATION_OBJECTS
-  # variable will have been defined.
-  CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS("${link_file}" ${cuda_target} "${_options}" "${${cuda_target}_SEPARABLE_COMPILATION_OBJECTS}")
-
-  target_link_libraries(${cuda_target} ${CUDA_LINK_LIBRARIES_KEYWORD}
-    ${CUDA_LIBRARIES}
-    )
-
-  if(CUDA_SEPARABLE_COMPILATION)
-    target_link_libraries(${cuda_target} ${CUDA_LINK_LIBRARIES_KEYWORD}
-      ${CUDA_cudadevrt_LIBRARY}
-      )
-  endif()
-
-  # We need to set the linker language based on what the expected generated file
-  # would be. CUDA_C_OR_CXX is computed based on CUDA_HOST_COMPILATION_CPP.
-  set_target_properties(${cuda_target}
-    PROPERTIES
-    LINKER_LANGUAGE ${CUDA_C_OR_CXX}
-    )
-
-endmacro()
-
-
-###############################################################################
-###############################################################################
-# ADD EXECUTABLE
-###############################################################################
-###############################################################################
-macro(CUDA_ADD_EXECUTABLE cuda_target)
-
-  CUDA_ADD_CUDA_INCLUDE_ONCE()
-
-  # Separate the sources from the options
-  CUDA_GET_SOURCES_AND_OPTIONS(_sources _cmake_options _options ${ARGN})
-  # Create custom commands and targets for each file.
-  CUDA_WRAP_SRCS( ${cuda_target} OBJ _generated_files ${_sources} OPTIONS ${_options} )
-
-  # Compute the file name of the intermedate link file used for separable
-  # compilation.
-  CUDA_COMPUTE_SEPARABLE_COMPILATION_OBJECT_FILE_NAME(link_file ${cuda_target} "${${cuda_target}_SEPARABLE_COMPILATION_OBJECTS}")
-
-  # Add the library.
-  add_executable(${cuda_target} ${_cmake_options}
-    ${_generated_files}
-    ${_sources}
-    ${link_file}
-    )
-
-  # Add a link phase for the separable compilation if it has been enabled.  If
-  # it has been enabled then the ${cuda_target}_SEPARABLE_COMPILATION_OBJECTS
-  # variable will have been defined.
-  CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS("${link_file}" ${cuda_target} "${_options}" "${${cuda_target}_SEPARABLE_COMPILATION_OBJECTS}")
-
-  target_link_libraries(${cuda_target} ${CUDA_LINK_LIBRARIES_KEYWORD}
-    ${CUDA_LIBRARIES}
-    )
-
-  # We need to set the linker language based on what the expected generated file
-  # would be. CUDA_C_OR_CXX is computed based on CUDA_HOST_COMPILATION_CPP.
-  set_target_properties(${cuda_target}
-    PROPERTIES
-    LINKER_LANGUAGE ${CUDA_C_OR_CXX}
-    )
-
-endmacro()
-
-
-###############################################################################
-###############################################################################
-# (Internal) helper for manually added cuda source files with specific targets
-###############################################################################
-###############################################################################
-macro(cuda_compile_base cuda_target format generated_files)
-  # Update a counter in this directory, to keep phony target names unique.
-  set(_cuda_target "${cuda_target}")
-  get_property(_counter DIRECTORY PROPERTY _cuda_internal_phony_counter)
-  if(_counter)
-    math(EXPR _counter "${_counter} + 1")
-  else()
-    set(_counter 1)
-  endif()
-  string(APPEND _cuda_target "_${_counter}")
-  set_property(DIRECTORY PROPERTY _cuda_internal_phony_counter ${_counter})
-
-  # Separate the sources from the options
-  CUDA_GET_SOURCES_AND_OPTIONS(_sources _cmake_options _options ${ARGN})
-
-  # Create custom commands and targets for each file.
-  CUDA_WRAP_SRCS( ${_cuda_target} ${format} _generated_files ${_sources}
-                  ${_cmake_options} OPTIONS ${_options} PHONY)
-
-  set( ${generated_files} ${_generated_files})
-
-endmacro()
-
-###############################################################################
-###############################################################################
-# CUDA COMPILE
-###############################################################################
-###############################################################################
-macro(CUDA_COMPILE generated_files)
-  cuda_compile_base(cuda_compile OBJ ${generated_files} ${ARGN})
-endmacro()
-
-###############################################################################
-###############################################################################
-# CUDA COMPILE PTX
-###############################################################################
-###############################################################################
-macro(CUDA_COMPILE_PTX generated_files)
-  cuda_compile_base(cuda_compile_ptx PTX ${generated_files} ${ARGN})
-endmacro()
-
-###############################################################################
-###############################################################################
-# CUDA COMPILE FATBIN
-###############################################################################
-###############################################################################
-macro(CUDA_COMPILE_FATBIN generated_files)
-  cuda_compile_base(cuda_compile_fatbin FATBIN ${generated_files} ${ARGN})
-endmacro()
-
-###############################################################################
-###############################################################################
-# CUDA COMPILE CUBIN
-###############################################################################
-###############################################################################
-macro(CUDA_COMPILE_CUBIN generated_files)
-  cuda_compile_base(cuda_compile_cubin CUBIN ${generated_files} ${ARGN})
-endmacro()
-
-
-###############################################################################
-###############################################################################
-# CUDA ADD CUFFT TO TARGET
-###############################################################################
-###############################################################################
-macro(CUDA_ADD_CUFFT_TO_TARGET target)
-  if (CUDA_BUILD_EMULATION)
-    target_link_libraries(${target} ${CUDA_LINK_LIBRARIES_KEYWORD} ${CUDA_cufftemu_LIBRARY})
-  else()
-    target_link_libraries(${target} ${CUDA_LINK_LIBRARIES_KEYWORD} ${CUDA_cufft_LIBRARY})
-  endif()
-endmacro()
-
-###############################################################################
-###############################################################################
-# CUDA ADD CUBLAS TO TARGET
-###############################################################################
-###############################################################################
-macro(CUDA_ADD_CUBLAS_TO_TARGET target)
-  if (CUDA_BUILD_EMULATION)
-    target_link_libraries(${target} ${CUDA_LINK_LIBRARIES_KEYWORD} ${CUDA_cublasemu_LIBRARY})
-  else()
-    target_link_libraries(${target} ${CUDA_LINK_LIBRARIES_KEYWORD} ${CUDA_cublas_LIBRARY} ${CUDA_cublas_device_LIBRARY})
-  endif()
-endmacro()
-
-###############################################################################
-###############################################################################
-# CUDA BUILD CLEAN TARGET
-###############################################################################
-###############################################################################
-macro(CUDA_BUILD_CLEAN_TARGET)
-  # Call this after you add all your CUDA targets, and you will get a
-  # convenience target.  You should also make clean after running this target
-  # to get the build system to generate all the code again.
-
-  set(cuda_clean_target_name clean_cuda_depends)
-  if (CMAKE_GENERATOR MATCHES "Visual Studio")
-    string(TOUPPER ${cuda_clean_target_name} cuda_clean_target_name)
-  endif()
-  add_custom_target(${cuda_clean_target_name}
-    COMMAND ${CMAKE_COMMAND} -E rm -f ${CUDA_ADDITIONAL_CLEAN_FILES})
-
-  # Clear out the variable, so the next time we configure it will be empty.
-  # This is useful so that the files won't persist in the list after targets
-  # have been removed.
-  set(CUDA_ADDITIONAL_CLEAN_FILES "" CACHE INTERNAL "List of intermediate files that are part of the cuda dependency scanning.")
-endmacro()
diff --git a/share/cmake-3.18/Modules/FindCUDA/run_nvcc.cmake b/share/cmake-3.18/Modules/FindCUDA/run_nvcc.cmake
deleted file mode 100644
index ba35433..0000000
--- a/share/cmake-3.18/Modules/FindCUDA/run_nvcc.cmake
+++ /dev/null
@@ -1,306 +0,0 @@
-#  James Bigler, NVIDIA Corp (nvidia.com - jbigler)
-#
-#  Copyright (c) 2008 - 2009 NVIDIA Corporation.  All rights reserved.
-#
-#  This code is licensed under the MIT License.  See the FindCUDA.cmake script
-#  for the text of the license.
-
-# The MIT License
-#
-# License for the specific language governing rights and limitations under
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# the rights to use, copy, modify, merge, publish, distribute, sublicense,
-# and/or sell copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-# DEALINGS IN THE SOFTWARE.
-
-
-##########################################################################
-# This file runs the nvcc commands to produce the desired output file along with
-# the dependency file needed by CMake to compute dependencies.  In addition the
-# file checks the output of each command and if the command fails it deletes the
-# output files.
-
-# Input variables
-#
-# verbose:BOOL=<>          OFF: Be as quiet as possible (default)
-#                          ON : Describe each step
-#
-# build_configuration:STRING=<> Typically one of Debug, MinSizeRel, Release, or
-#                               RelWithDebInfo, but it should match one of the
-#                               entries in CUDA_HOST_FLAGS. This is the build
-#                               configuration used when compiling the code.  If
-#                               blank or unspecified Debug is assumed as this is
-#                               what CMake does.
-#
-# generated_file:STRING=<> File to generate.  This argument must be passed in.
-#
-# generated_cubin_file:STRING=<> File to generate.  This argument must be passed
-#                                                   in if build_cubin is true.
-
-cmake_policy(PUSH)
-cmake_policy(SET CMP0007 NEW)
-if(NOT generated_file)
-  message(FATAL_ERROR "You must specify generated_file on the command line")
-endif()
-
-# Set these up as variables to make reading the generated file easier
-set(CMAKE_COMMAND "@CMAKE_COMMAND@") # path
-set(source_file "@source_file@") # path
-set(NVCC_generated_dependency_file "@NVCC_generated_dependency_file@") # path
-set(cmake_dependency_file "@cmake_dependency_file@") # path
-set(CUDA_make2cmake "@CUDA_make2cmake@") # path
-set(CUDA_parse_cubin "@CUDA_parse_cubin@") # path
-set(build_cubin @build_cubin@) # bool
-set(CUDA_HOST_COMPILER "@CUDA_HOST_COMPILER@") # path
-# We won't actually use these variables for now, but we need to set this, in
-# order to force this file to be run again if it changes.
-set(generated_file_path "@generated_file_path@") # path
-set(generated_file_internal "@generated_file@") # path
-set(generated_cubin_file_internal "@generated_cubin_file@") # path
-
-set(CUDA_NVCC_EXECUTABLE "@CUDA_NVCC_EXECUTABLE@") # path
-set(CUDA_NVCC_FLAGS @CUDA_NVCC_FLAGS@ ;; @CUDA_WRAP_OPTION_NVCC_FLAGS@) # list
-@CUDA_NVCC_FLAGS_CONFIG@
-set(nvcc_flags @nvcc_flags@) # list
-set(CUDA_NVCC_INCLUDE_DIRS [==[@CUDA_NVCC_INCLUDE_DIRS@]==]) # list (needs to be in lua quotes to address backslashes)
-string(REPLACE "\\" "/" CUDA_NVCC_INCLUDE_DIRS "${CUDA_NVCC_INCLUDE_DIRS}")
-set(CUDA_NVCC_COMPILE_DEFINITIONS [==[@CUDA_NVCC_COMPILE_DEFINITIONS@]==]) # list (needs to be in lua quotes see #16510 ).
-set(format_flag "@format_flag@") # string
-set(cuda_language_flag @cuda_language_flag@) # list
-
-# Clean up list of include directories and add -I flags
-list(REMOVE_DUPLICATES CUDA_NVCC_INCLUDE_DIRS)
-set(CUDA_NVCC_INCLUDE_ARGS)
-foreach(dir ${CUDA_NVCC_INCLUDE_DIRS})
-  # Extra quotes are added around each flag to help nvcc parse out flags with spaces.
-  list(APPEND CUDA_NVCC_INCLUDE_ARGS "-I${dir}")
-endforeach()
-
-# Clean up list of compile definitions, add -D flags, and append to nvcc_flags
-list(REMOVE_DUPLICATES CUDA_NVCC_COMPILE_DEFINITIONS)
-foreach(def ${CUDA_NVCC_COMPILE_DEFINITIONS})
-  list(APPEND nvcc_flags "-D${def}")
-endforeach()
-
-if(build_cubin AND NOT generated_cubin_file)
-  message(FATAL_ERROR "You must specify generated_cubin_file on the command line")
-endif()
-
-# This is the list of host compilation flags.  It C or CXX should already have
-# been chosen by FindCUDA.cmake.
-@CUDA_HOST_FLAGS@
-
-# Take the compiler flags and package them up to be sent to the compiler via -Xcompiler
-set(nvcc_host_compiler_flags "")
-# If we weren't given a build_configuration, use Debug.
-if(NOT build_configuration)
-  set(build_configuration Debug)
-endif()
-string(TOUPPER "${build_configuration}" build_configuration)
-#message("CUDA_NVCC_HOST_COMPILER_FLAGS = ${CUDA_NVCC_HOST_COMPILER_FLAGS}")
-foreach(flag ${CMAKE_HOST_FLAGS} ${CMAKE_HOST_FLAGS_${build_configuration}})
-  # Extra quotes are added around each flag to help nvcc parse out flags with spaces.
-  string(APPEND nvcc_host_compiler_flags ",\"${flag}\"")
-endforeach()
-if (nvcc_host_compiler_flags)
-  set(nvcc_host_compiler_flags "-Xcompiler" ${nvcc_host_compiler_flags})
-endif()
-#message("nvcc_host_compiler_flags = \"${nvcc_host_compiler_flags}\"")
-# Add the build specific configuration flags
-list(APPEND CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS_${build_configuration}})
-
-# Any -ccbin existing in CUDA_NVCC_FLAGS gets highest priority
-list( FIND CUDA_NVCC_FLAGS "-ccbin" ccbin_found0 )
-list( FIND CUDA_NVCC_FLAGS "--compiler-bindir" ccbin_found1 )
-if( ccbin_found0 LESS 0 AND ccbin_found1 LESS 0 AND CUDA_HOST_COMPILER )
-  if (CUDA_HOST_COMPILER STREQUAL "@_CUDA_MSVC_HOST_COMPILER@" AND DEFINED CCBIN)
-    set(CCBIN -ccbin "${CCBIN}")
-  else()
-    set(CCBIN -ccbin "${CUDA_HOST_COMPILER}")
-  endif()
-endif()
-
-# cuda_execute_process - Executes a command with optional command echo and status message.
-#
-#   status  - Status message to print if verbose is true
-#   command - COMMAND argument from the usual execute_process argument structure
-#   ARGN    - Remaining arguments are the command with arguments
-#
-#   CUDA_result - return value from running the command
-#
-# Make this a macro instead of a function, so that things like RESULT_VARIABLE
-# and other return variables are present after executing the process.
-macro(cuda_execute_process status command)
-  set(_command ${command})
-  if(NOT "x${_command}" STREQUAL "xCOMMAND")
-    message(FATAL_ERROR "Malformed call to cuda_execute_process.  Missing COMMAND as second argument. (command = ${command})")
-  endif()
-  if(verbose)
-    execute_process(COMMAND "${CMAKE_COMMAND}" -E echo -- ${status})
-    # Now we need to build up our command string.  We are accounting for quotes
-    # and spaces, anything else is left up to the user to fix if they want to
-    # copy and paste a runnable command line.
-    set(cuda_execute_process_string)
-    foreach(arg ${ARGN})
-      # If there are quotes, excape them, so they come through.
-      string(REPLACE "\"" "\\\"" arg ${arg})
-      # Args with spaces need quotes around them to get them to be parsed as a single argument.
-      if(arg MATCHES " ")
-        list(APPEND cuda_execute_process_string "\"${arg}\"")
-      else()
-        list(APPEND cuda_execute_process_string ${arg})
-      endif()
-    endforeach()
-    # Echo the command
-    execute_process(COMMAND ${CMAKE_COMMAND} -E echo ${cuda_execute_process_string})
-  endif()
-  # Run the command
-  execute_process(COMMAND ${ARGN} RESULT_VARIABLE CUDA_result )
-endmacro()
-
-# Delete the target file
-cuda_execute_process(
-  "Removing ${generated_file}"
-  COMMAND "${CMAKE_COMMAND}" -E rm -f "${generated_file}"
-  )
-
-# For CUDA 2.3 and below, -G -M doesn't work, so remove the -G flag
-# for dependency generation and hope for the best.
-set(depends_CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS}")
-set(CUDA_VERSION @CUDA_VERSION@)
-if(CUDA_VERSION VERSION_LESS "3.0")
-  # Note that this will remove all occurrences of -G.
-  list(REMOVE_ITEM depends_CUDA_NVCC_FLAGS "-G")
-endif()
-
-# nvcc doesn't define __CUDACC__ for some reason when generating dependency files.  This
-# can cause incorrect dependencies when #including files based on this macro which is
-# defined in the generating passes of nvcc invocation.  We will go ahead and manually
-# define this for now until a future version fixes this bug.
-set(CUDACC_DEFINE -D__CUDACC__)
-
-# Generate the dependency file
-cuda_execute_process(
-  "Generating dependency file: ${NVCC_generated_dependency_file}"
-  COMMAND "${CUDA_NVCC_EXECUTABLE}"
-  -M
-  ${CUDACC_DEFINE}
-  "${source_file}"
-  -o "${NVCC_generated_dependency_file}"
-  ${CCBIN}
-  ${nvcc_flags}
-  ${nvcc_host_compiler_flags}
-  ${depends_CUDA_NVCC_FLAGS}
-  -DNVCC
-  ${CUDA_NVCC_INCLUDE_ARGS}
-  )
-
-if(CUDA_result)
-  message(FATAL_ERROR "Error generating ${generated_file}")
-endif()
-
-# Generate the cmake readable dependency file to a temp file.  Don't put the
-# quotes just around the filenames for the input_file and output_file variables.
-# CMake will pass the quotes through and not be able to find the file.
-cuda_execute_process(
-  "Generating temporary cmake readable file: ${cmake_dependency_file}.tmp"
-  COMMAND "${CMAKE_COMMAND}"
-  -D "input_file:FILEPATH=${NVCC_generated_dependency_file}"
-  -D "output_file:FILEPATH=${cmake_dependency_file}.tmp"
-  -D "verbose=${verbose}"
-  -P "${CUDA_make2cmake}"
-  )
-
-if(CUDA_result)
-  message(FATAL_ERROR "Error generating ${generated_file}")
-endif()
-
-# Copy the file if it is different
-cuda_execute_process(
-  "Copy if different ${cmake_dependency_file}.tmp to ${cmake_dependency_file}"
-  COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${cmake_dependency_file}.tmp" "${cmake_dependency_file}"
-  )
-
-if(CUDA_result)
-  message(FATAL_ERROR "Error generating ${generated_file}")
-endif()
-
-# Delete the temporary file
-cuda_execute_process(
-  "Removing ${cmake_dependency_file}.tmp and ${NVCC_generated_dependency_file}"
-  COMMAND "${CMAKE_COMMAND}" -E rm -f "${cmake_dependency_file}.tmp" "${NVCC_generated_dependency_file}"
-  )
-
-if(CUDA_result)
-  message(FATAL_ERROR "Error generating ${generated_file}")
-endif()
-
-# Generate the code
-cuda_execute_process(
-  "Generating ${generated_file}"
-  COMMAND "${CUDA_NVCC_EXECUTABLE}"
-  "${source_file}"
-  ${cuda_language_flag}
-  ${format_flag} -o "${generated_file}"
-  ${CCBIN}
-  ${nvcc_flags}
-  ${nvcc_host_compiler_flags}
-  ${CUDA_NVCC_FLAGS}
-  -DNVCC
-  ${CUDA_NVCC_INCLUDE_ARGS}
-  )
-
-if(CUDA_result)
-  # Since nvcc can sometimes leave half done files make sure that we delete the output file.
-  cuda_execute_process(
-    "Removing ${generated_file}"
-    COMMAND "${CMAKE_COMMAND}" -E rm -f "${generated_file}"
-    )
-  message(FATAL_ERROR "Error generating file ${generated_file}")
-else()
-  if(verbose)
-    message("Generated ${generated_file} successfully.")
-  endif()
-endif()
-
-# Cubin resource report commands.
-if( build_cubin )
-  # Run with -cubin to produce resource usage report.
-  cuda_execute_process(
-    "Generating ${generated_cubin_file}"
-    COMMAND "${CUDA_NVCC_EXECUTABLE}"
-    "${source_file}"
-    ${CUDA_NVCC_FLAGS}
-    ${nvcc_flags}
-    ${CCBIN}
-    ${nvcc_host_compiler_flags}
-    -DNVCC
-    -cubin
-    -o "${generated_cubin_file}"
-    ${CUDA_NVCC_INCLUDE_ARGS}
-    )
-
-  # Execute the parser script.
-  cuda_execute_process(
-    "Executing the parser script"
-    COMMAND  "${CMAKE_COMMAND}"
-    -D "input_file:STRING=${generated_cubin_file}"
-    -P "${CUDA_parse_cubin}"
-    )
-
-endif()
-
-cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/FindCUDA/select_compute_arch.cmake b/share/cmake-3.18/Modules/FindCUDA/select_compute_arch.cmake
deleted file mode 100644
index c11725d..0000000
--- a/share/cmake-3.18/Modules/FindCUDA/select_compute_arch.cmake
+++ /dev/null
@@ -1,291 +0,0 @@
-# Synopsis:
-#   CUDA_SELECT_NVCC_ARCH_FLAGS(out_variable [target_CUDA_architectures])
-#   -- Selects GPU arch flags for nvcc based on target_CUDA_architectures
-#      target_CUDA_architectures : Auto | Common | All | LIST(ARCH_AND_PTX ...)
-#       - "Auto" detects local machine GPU compute arch at runtime.
-#       - "Common" and "All" cover common and entire subsets of architectures
-#      ARCH_AND_PTX : NAME | NUM.NUM | NUM.NUM(NUM.NUM) | NUM.NUM+PTX
-#      NAME: Fermi Kepler Maxwell Kepler+Tegra Kepler+Tesla Maxwell+Tegra Pascal Volta Turing Ampere
-#      NUM: Any number. Only those pairs are currently accepted by NVCC though:
-#            2.0 2.1 3.0 3.2 3.5 3.7 5.0 5.2 5.3 6.0 6.2 7.0 7.2 7.5 8.0
-#      Returns LIST of flags to be added to CUDA_NVCC_FLAGS in ${out_variable}
-#      Additionally, sets ${out_variable}_readable to the resulting numeric list
-#      Example:
-#       CUDA_SELECT_NVCC_ARCH_FLAGS(ARCH_FLAGS 3.0 3.5+PTX 5.2(5.0) Maxwell)
-#        LIST(APPEND CUDA_NVCC_FLAGS ${ARCH_FLAGS})
-#
-#      More info on CUDA architectures: https://en.wikipedia.org/wiki/CUDA
-#
-
-if(CMAKE_CUDA_COMPILER_LOADED) # CUDA as a language
-  if(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA"
-      AND CMAKE_CUDA_COMPILER_VERSION MATCHES "^([0-9]+\\.[0-9]+)")
-    set(CUDA_VERSION "${CMAKE_MATCH_1}")
-  endif()
-endif()
-
-# See: https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#gpu-feature-list
-
-# This list will be used for CUDA_ARCH_NAME = All option
-set(CUDA_KNOWN_GPU_ARCHITECTURES  "Fermi" "Kepler" "Maxwell")
-
-# This list will be used for CUDA_ARCH_NAME = Common option (enabled by default)
-set(CUDA_COMMON_GPU_ARCHITECTURES "3.5" "5.0")
-# 3.0 is removed in CUDA 11, see:
-# https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#deprecated-features
-if(CUDA_VERSION VERSION_LESS "11.0")
-  list(APPEND CUDA_COMMON_GPU_ARCHITECTURES "3.0")
-endif()
-
-if(CUDA_VERSION VERSION_LESS "7.0")
-  set(CUDA_LIMIT_GPU_ARCHITECTURE "5.2")
-endif()
-
-# This list is used to filter CUDA archs when autodetecting
-set(CUDA_ALL_GPU_ARCHITECTURES "3.0" "3.2" "3.5" "5.0")
-
-if(CUDA_VERSION VERSION_GREATER_EQUAL "7.0")
-  list(APPEND CUDA_KNOWN_GPU_ARCHITECTURES "Kepler+Tegra" "Kepler+Tesla" "Maxwell+Tegra")
-  list(APPEND CUDA_COMMON_GPU_ARCHITECTURES "5.2")
-
-  if(CUDA_VERSION VERSION_LESS "8.0")
-    list(APPEND CUDA_COMMON_GPU_ARCHITECTURES "5.2+PTX")
-    set(CUDA_LIMIT_GPU_ARCHITECTURE "6.0")
-  endif()
-endif()
-
-if(CUDA_VERSION VERSION_GREATER_EQUAL "8.0")
-  list(APPEND CUDA_KNOWN_GPU_ARCHITECTURES "Pascal")
-  list(APPEND CUDA_COMMON_GPU_ARCHITECTURES "6.0" "6.1")
-  list(APPEND CUDA_ALL_GPU_ARCHITECTURES "6.0" "6.1" "6.2")
-
-  if(CUDA_VERSION VERSION_LESS "9.0")
-    list(APPEND CUDA_COMMON_GPU_ARCHITECTURES "6.2+PTX")
-    set(CUDA_LIMIT_GPU_ARCHITECTURE "7.0")
-  endif()
-endif ()
-
-if(CUDA_VERSION VERSION_GREATER_EQUAL "9.0")
-  list(APPEND CUDA_KNOWN_GPU_ARCHITECTURES "Volta")
-  list(APPEND CUDA_COMMON_GPU_ARCHITECTURES "7.0")
-  list(APPEND CUDA_ALL_GPU_ARCHITECTURES "7.0" "7.2")
-
-  if(CUDA_VERSION VERSION_LESS "10.0")
-    list(APPEND CUDA_COMMON_GPU_ARCHITECTURES "7.2+PTX")
-    set(CUDA_LIMIT_GPU_ARCHITECTURE "8.0")
-  endif()
-endif()
-
-if(CUDA_VERSION VERSION_GREATER_EQUAL "10.0")
-  list(APPEND CUDA_KNOWN_GPU_ARCHITECTURES "Turing")
-  list(APPEND CUDA_COMMON_GPU_ARCHITECTURES "7.5")
-  list(APPEND CUDA_ALL_GPU_ARCHITECTURES "7.5")
-
-  if(CUDA_VERSION VERSION_LESS "11.0")
-    set(CUDA_LIMIT_GPU_ARCHITECTURE "8.0")
-    list(APPEND CUDA_COMMON_GPU_ARCHITECTURES "7.5+PTX")
-  endif()
-endif()
-
-if(CUDA_VERSION VERSION_GREATER_EQUAL "11.0")
-  list(APPEND CUDA_KNOWN_GPU_ARCHITECTURES "Ampere")
-  list(APPEND CUDA_COMMON_GPU_ARCHITECTURES "8.0" "8.0+PTX")
-  list(APPEND CUDA_ALL_GPU_ARCHITECTURES "8.0")
-
-  if(CUDA_VERSION VERSION_LESS "12.0")
-    set(CUDA_LIMIT_GPU_ARCHITECTURE "9.0")
-  endif()
-endif()
-
-################################################################################################
-# A function for automatic detection of GPUs installed  (if autodetection is enabled)
-# Usage:
-#   CUDA_DETECT_INSTALLED_GPUS(OUT_VARIABLE)
-#
-function(CUDA_DETECT_INSTALLED_GPUS OUT_VARIABLE)
-  if(NOT CUDA_GPU_DETECT_OUTPUT)
-    if(CMAKE_CUDA_COMPILER_LOADED) # CUDA as a language
-      set(file "${PROJECT_BINARY_DIR}/detect_cuda_compute_capabilities.cu")
-    else()
-      set(file "${PROJECT_BINARY_DIR}/detect_cuda_compute_capabilities.cpp")
-    endif()
-
-    file(WRITE ${file} ""
-      "#include <cuda_runtime.h>\n"
-      "#include <cstdio>\n"
-      "int main()\n"
-      "{\n"
-      "  int count = 0;\n"
-      "  if (cudaSuccess != cudaGetDeviceCount(&count)) return -1;\n"
-      "  if (count == 0) return -1;\n"
-      "  for (int device = 0; device < count; ++device)\n"
-      "  {\n"
-      "    cudaDeviceProp prop;\n"
-      "    if (cudaSuccess == cudaGetDeviceProperties(&prop, device))\n"
-      "      std::printf(\"%d.%d \", prop.major, prop.minor);\n"
-      "  }\n"
-      "  return 0;\n"
-      "}\n")
-
-    if(CMAKE_CUDA_COMPILER_LOADED) # CUDA as a language
-      try_run(run_result compile_result ${PROJECT_BINARY_DIR} ${file}
-              RUN_OUTPUT_VARIABLE compute_capabilities)
-    else()
-      try_run(run_result compile_result ${PROJECT_BINARY_DIR} ${file}
-              CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${CUDA_INCLUDE_DIRS}"
-              LINK_LIBRARIES ${CUDA_LIBRARIES}
-              RUN_OUTPUT_VARIABLE compute_capabilities)
-    endif()
-
-    # Filter unrelated content out of the output.
-    string(REGEX MATCHALL "[0-9]+\\.[0-9]+" compute_capabilities "${compute_capabilities}")
-
-    if(run_result EQUAL 0)
-      string(REPLACE "2.1" "2.1(2.0)" compute_capabilities "${compute_capabilities}")
-      set(CUDA_GPU_DETECT_OUTPUT ${compute_capabilities}
-        CACHE INTERNAL "Returned GPU architectures from detect_gpus tool" FORCE)
-    endif()
-  endif()
-
-  if(NOT CUDA_GPU_DETECT_OUTPUT)
-    message(STATUS "Automatic GPU detection failed. Building for common architectures.")
-    set(${OUT_VARIABLE} ${CUDA_COMMON_GPU_ARCHITECTURES} PARENT_SCOPE)
-  else()
-    # Filter based on CUDA version supported archs
-    set(CUDA_GPU_DETECT_OUTPUT_FILTERED "")
-    separate_arguments(CUDA_GPU_DETECT_OUTPUT)
-    foreach(ITEM IN ITEMS ${CUDA_GPU_DETECT_OUTPUT})
-        if(CUDA_LIMIT_GPU_ARCHITECTURE AND ITEM VERSION_GREATER_EQUAL CUDA_LIMIT_GPU_ARCHITECTURE)
-        list(GET CUDA_COMMON_GPU_ARCHITECTURES -1 NEWITEM)
-        string(APPEND CUDA_GPU_DETECT_OUTPUT_FILTERED " ${NEWITEM}")
-      else()
-        string(APPEND CUDA_GPU_DETECT_OUTPUT_FILTERED " ${ITEM}")
-      endif()
-    endforeach()
-
-    set(${OUT_VARIABLE} ${CUDA_GPU_DETECT_OUTPUT_FILTERED} PARENT_SCOPE)
-  endif()
-endfunction()
-
-
-################################################################################################
-# Function for selecting GPU arch flags for nvcc based on CUDA architectures from parameter list
-# Usage:
-#   SELECT_NVCC_ARCH_FLAGS(out_variable [list of CUDA compute archs])
-function(CUDA_SELECT_NVCC_ARCH_FLAGS out_variable)
-  set(CUDA_ARCH_LIST "${ARGN}")
-
-  if("X${CUDA_ARCH_LIST}" STREQUAL "X" )
-    set(CUDA_ARCH_LIST "Auto")
-  endif()
-
-  set(cuda_arch_bin)
-  set(cuda_arch_ptx)
-
-  if("${CUDA_ARCH_LIST}" STREQUAL "All")
-    set(CUDA_ARCH_LIST ${CUDA_KNOWN_GPU_ARCHITECTURES})
-  elseif("${CUDA_ARCH_LIST}" STREQUAL "Common")
-    set(CUDA_ARCH_LIST ${CUDA_COMMON_GPU_ARCHITECTURES})
-  elseif("${CUDA_ARCH_LIST}" STREQUAL "Auto")
-    CUDA_DETECT_INSTALLED_GPUS(CUDA_ARCH_LIST)
-    message(STATUS "Autodetected CUDA architecture(s): ${CUDA_ARCH_LIST}")
-  endif()
-
-  # Now process the list and look for names
-  string(REGEX REPLACE "[ \t]+" ";" CUDA_ARCH_LIST "${CUDA_ARCH_LIST}")
-  list(REMOVE_DUPLICATES CUDA_ARCH_LIST)
-  foreach(arch_name ${CUDA_ARCH_LIST})
-    set(arch_bin)
-    set(arch_ptx)
-    set(add_ptx FALSE)
-    # Check to see if we are compiling PTX
-    if(arch_name MATCHES "(.*)\\+PTX$")
-      set(add_ptx TRUE)
-      set(arch_name ${CMAKE_MATCH_1})
-    endif()
-    if(arch_name MATCHES "^([0-9]\\.[0-9](\\([0-9]\\.[0-9]\\))?)$")
-      set(arch_bin ${CMAKE_MATCH_1})
-      set(arch_ptx ${arch_bin})
-    else()
-      # Look for it in our list of known architectures
-      if(${arch_name} STREQUAL "Fermi")
-        set(arch_bin 2.0 "2.1(2.0)")
-      elseif(${arch_name} STREQUAL "Kepler+Tegra")
-        set(arch_bin 3.2)
-      elseif(${arch_name} STREQUAL "Kepler+Tesla")
-        set(arch_bin 3.7)
-      elseif(${arch_name} STREQUAL "Kepler")
-        set(arch_bin 3.0 3.5)
-        set(arch_ptx 3.5)
-      elseif(${arch_name} STREQUAL "Maxwell+Tegra")
-        set(arch_bin 5.3)
-      elseif(${arch_name} STREQUAL "Maxwell")
-        set(arch_bin 5.0 5.2)
-        set(arch_ptx 5.2)
-      elseif(${arch_name} STREQUAL "Pascal")
-        set(arch_bin 6.0 6.1)
-        set(arch_ptx 6.1)
-      elseif(${arch_name} STREQUAL "Volta")
-        set(arch_bin 7.0 7.0)
-        set(arch_ptx 7.0)
-      elseif(${arch_name} STREQUAL "Turing")
-        set(arch_bin 7.5)
-        set(arch_ptx 7.5)
-      elseif(${arch_name} STREQUAL "Ampere")
-        set(arch_bin 8.0)
-        set(arch_ptx 8.0)
-      else()
-        message(SEND_ERROR "Unknown CUDA Architecture Name ${arch_name} in CUDA_SELECT_NVCC_ARCH_FLAGS")
-      endif()
-    endif()
-    if(NOT arch_bin)
-      message(SEND_ERROR "arch_bin wasn't set for some reason")
-    endif()
-    list(APPEND cuda_arch_bin ${arch_bin})
-    if(add_ptx)
-      if (NOT arch_ptx)
-        set(arch_ptx ${arch_bin})
-      endif()
-      list(APPEND cuda_arch_ptx ${arch_ptx})
-    endif()
-  endforeach()
-
-  # remove dots and convert to lists
-  string(REGEX REPLACE "\\." "" cuda_arch_bin "${cuda_arch_bin}")
-  string(REGEX REPLACE "\\." "" cuda_arch_ptx "${cuda_arch_ptx}")
-  string(REGEX MATCHALL "[0-9()]+" cuda_arch_bin "${cuda_arch_bin}")
-  string(REGEX MATCHALL "[0-9]+"   cuda_arch_ptx "${cuda_arch_ptx}")
-
-  if(cuda_arch_bin)
-    list(REMOVE_DUPLICATES cuda_arch_bin)
-  endif()
-  if(cuda_arch_ptx)
-    list(REMOVE_DUPLICATES cuda_arch_ptx)
-  endif()
-
-  set(nvcc_flags "")
-  set(nvcc_archs_readable "")
-
-  # Tell NVCC to add binaries for the specified GPUs
-  foreach(arch ${cuda_arch_bin})
-    if(arch MATCHES "([0-9]+)\\(([0-9]+)\\)")
-      # User explicitly specified ARCH for the concrete CODE
-      list(APPEND nvcc_flags -gencode arch=compute_${CMAKE_MATCH_2},code=sm_${CMAKE_MATCH_1})
-      list(APPEND nvcc_archs_readable sm_${CMAKE_MATCH_1})
-    else()
-      # User didn't explicitly specify ARCH for the concrete CODE, we assume ARCH=CODE
-      list(APPEND nvcc_flags -gencode arch=compute_${arch},code=sm_${arch})
-      list(APPEND nvcc_archs_readable sm_${arch})
-    endif()
-  endforeach()
-
-  # Tell NVCC to add PTX intermediate code for the specified architectures
-  foreach(arch ${cuda_arch_ptx})
-    list(APPEND nvcc_flags -gencode arch=compute_${arch},code=compute_${arch})
-    list(APPEND nvcc_archs_readable compute_${arch})
-  endforeach()
-
-  string(REPLACE ";" " " nvcc_archs_readable "${nvcc_archs_readable}")
-  set(${out_variable}          ${nvcc_flags}          PARENT_SCOPE)
-  set(${out_variable}_readable ${nvcc_archs_readable} PARENT_SCOPE)
-endfunction()
diff --git a/share/cmake-3.18/Modules/FindCUDAToolkit.cmake b/share/cmake-3.18/Modules/FindCUDAToolkit.cmake
deleted file mode 100644
index 47bc546..0000000
--- a/share/cmake-3.18/Modules/FindCUDAToolkit.cmake
+++ /dev/null
@@ -1,881 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindCUDAToolkit
----------------
-
-This script locates the NVIDIA CUDA toolkit and the associated libraries, but
-does not require the ``CUDA`` language be enabled for a given project. This
-module does not search for the NVIDIA CUDA Samples.
-
-Search Behavior
-^^^^^^^^^^^^^^^
-
-Finding the CUDA Toolkit requires finding the ``nvcc`` executable, which is
-searched for in the following order:
-
-1. If the ``CUDA`` language has been enabled we will use the directory
-   containing the compiler as the first search location for ``nvcc``.
-
-2. If the ``CUDAToolkit_ROOT`` cmake configuration variable (e.g.,
-   ``-DCUDAToolkit_ROOT=/some/path``) *or* environment variable is defined, it
-   will be searched.  If both an environment variable **and** a
-   configuration variable are specified, the *configuration* variable takes
-   precedence.
-
-   The directory specified here must be such that the executable ``nvcc`` can be
-   found underneath the directory specified by ``CUDAToolkit_ROOT``.  If
-   ``CUDAToolkit_ROOT`` is specified, but no ``nvcc`` is found underneath, this
-   package is marked as **not** found.  No subsequent search attempts are
-   performed.
-
-3. If the CUDA_PATH environment variable is defined, it will be searched.
-
-4. The user's path is searched for ``nvcc`` using :command:`find_program`.  If
-   this is found, no subsequent search attempts are performed.  Users are
-   responsible for ensuring that the first ``nvcc`` to show up in the path is
-   the desired path in the event that multiple CUDA Toolkits are installed.
-
-5. On Unix systems, if the symbolic link ``/usr/local/cuda`` exists, this is
-   used.  No subsequent search attempts are performed.  No default symbolic link
-   location exists for the Windows platform.
-
-6. The platform specific default install locations are searched.  If exactly one
-   candidate is found, this is used.  The default CUDA Toolkit install locations
-   searched are:
-
-   +-------------+-------------------------------------------------------------+
-   | Platform    | Search Pattern                                              |
-   +=============+=============================================================+
-   | macOS       | ``/Developer/NVIDIA/CUDA-X.Y``                              |
-   +-------------+-------------------------------------------------------------+
-   | Other Unix  | ``/usr/local/cuda-X.Y``                                     |
-   +-------------+-------------------------------------------------------------+
-   | Windows     | ``C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vX.Y`` |
-   +-------------+-------------------------------------------------------------+
-
-   Where ``X.Y`` would be a specific version of the CUDA Toolkit, such as
-   ``/usr/local/cuda-9.0`` or
-   ``C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0``
-
-   .. note::
-
-       When multiple CUDA Toolkits are installed in the default location of a
-       system (e.g., both ``/usr/local/cuda-9.0`` and ``/usr/local/cuda-10.0``
-       exist but the ``/usr/local/cuda`` symbolic link does **not** exist), this
-       package is marked as **not** found.
-
-       There are too many factors involved in making an automatic decision in
-       the presence of multiple CUDA Toolkits being installed.  In this
-       situation, users are encouraged to either (1) set ``CUDAToolkit_ROOT`` or
-       (2) ensure that the correct ``nvcc`` executable shows up in ``$PATH`` for
-       :command:`find_program` to find.
-
-Options
-^^^^^^^
-
-``VERSION``
-    If specified, describes the version of the CUDA Toolkit to search for.
-
-``REQUIRED``
-    If specified, configuration will error if a suitable CUDA Toolkit is not
-    found.
-
-``QUIET``
-    If specified, the search for a suitable CUDA Toolkit will not produce any
-    messages.
-
-``EXACT``
-    If specified, the CUDA Toolkit is considered found only if the exact
-    ``VERSION`` specified is recovered.
-
-Imported targets
-^^^^^^^^^^^^^^^^
-
-An :ref:`imported target <Imported targets>` named ``CUDA::toolkit`` is provided.
-
-This module defines :prop_tgt:`IMPORTED` targets for each
-of the following libraries that are part of the CUDAToolkit:
-
-- :ref:`CUDA Runtime Library<cuda_toolkit_rt_lib>`
-- :ref:`CUDA Driver Library<cuda_toolkit_driver_lib>`
-- :ref:`cuBLAS<cuda_toolkit_cuBLAS>`
-- :ref:`cuFFT<cuda_toolkit_cuFFT>`
-- :ref:`cuRAND<cuda_toolkit_cuRAND>`
-- :ref:`cuSOLVER<cuda_toolkit_cuSOLVER>`
-- :ref:`cuSPARSE<cuda_toolkit_cuSPARSE>`
-- :ref:`cuPTI<cuda_toolkit_cupti>`
-- :ref:`NPP<cuda_toolkit_NPP>`
-- :ref:`nvBLAS<cuda_toolkit_nvBLAS>`
-- :ref:`nvGRAPH<cuda_toolkit_nvGRAPH>`
-- :ref:`nvJPEG<cuda_toolkit_nvJPEG>`
-- :ref:`nvidia-ML<cuda_toolkit_nvML>`
-- :ref:`nvRTC<cuda_toolkit_nvRTC>`
-- :ref:`nvToolsExt<cuda_toolkit_nvToolsExt>`
-- :ref:`OpenCL<cuda_toolkit_opencl>`
-- :ref:`cuLIBOS<cuda_toolkit_cuLIBOS>`
-
-.. _`cuda_toolkit_rt_lib`:
-
-CUDA Runtime Library
-""""""""""""""""""""
-
-The CUDA Runtime library (cudart) are what most applications will typically
-need to link against to make any calls such as `cudaMalloc`, and `cudaFree`.
-
-Targets Created:
-
-- ``CUDA::cudart``
-- ``CUDA::cudart_static``
-
-.. _`cuda_toolkit_driver_lib`:
-
-CUDA Driver Library
-""""""""""""""""""""
-
-The CUDA Driver library (cuda) are used by applications that use calls
-such as `cuMemAlloc`, and `cuMemFree`. This is generally used by advanced
-
-
-Targets Created:
-
-- ``CUDA::cuda_driver``
-- ``CUDA::cuda_driver``
-
-.. _`cuda_toolkit_cuBLAS`:
-
-cuBLAS
-""""""
-
-The `cuBLAS <https://docs.nvidia.com/cuda/cublas/index.html>`_ library.
-
-Targets Created:
-
-- ``CUDA::cublas``
-- ``CUDA::cublas_static``
-- ``CUDA::cublasLt`` starting in CUDA 10.1
-- ``CUDA::cublasLt_static`` starting in CUDA 10.1
-
-.. _`cuda_toolkit_cuFFT`:
-
-cuFFT
-"""""
-
-The `cuFFT <https://docs.nvidia.com/cuda/cufft/index.html>`_ library.
-
-Targets Created:
-
-- ``CUDA::cufft``
-- ``CUDA::cufftw``
-- ``CUDA::cufft_static``
-- ``CUDA::cufftw_static``
-
-cuRAND
-""""""
-
-The `cuRAND <https://docs.nvidia.com/cuda/curand/index.html>`_ library.
-
-Targets Created:
-
-- ``CUDA::curand``
-- ``CUDA::curand_static``
-
-.. _`cuda_toolkit_cuSOLVER`:
-
-cuSOLVER
-""""""""
-
-The `cuSOLVER <https://docs.nvidia.com/cuda/cusolver/index.html>`_ library.
-
-Targets Created:
-
-- ``CUDA::cusolver``
-- ``CUDA::cusolver_static``
-
-.. _`cuda_toolkit_cuSPARSE`:
-
-cuSPARSE
-""""""""
-
-The `cuSPARSE <https://docs.nvidia.com/cuda/cusparse/index.html>`_ library.
-
-Targets Created:
-
-- ``CUDA::cusparse``
-- ``CUDA::cusparse_static``
-
-.. _`cuda_toolkit_cupti`:
-
-cupti
-"""""
-
-The `NVIDIA CUDA Profiling Tools Interface <https://developer.nvidia.com/CUPTI>`_.
-
-Targets Created:
-
-- ``CUDA::cupti``
-- ``CUDA::cupti_static``
-
-.. _`cuda_toolkit_NPP`:
-
-NPP
-"""
-
-The `NPP <https://docs.nvidia.com/cuda/npp/index.html>`_ libraries.
-
-Targets Created:
-
-- `nppc`:
-
-  - ``CUDA::nppc``
-  - ``CUDA::nppc_static``
-
-- `nppial`: Arithmetic and logical operation functions in `nppi_arithmetic_and_logical_operations.h`
-
-  - ``CUDA::nppial``
-  - ``CUDA::nppial_static``
-
-- `nppicc`: Color conversion and sampling functions in `nppi_color_conversion.h`
-
-  - ``CUDA::nppicc``
-  - ``CUDA::nppicc_static``
-
-- `nppicom`: JPEG compression and decompression functions in `nppi_compression_functions.h`
-  Removed starting in CUDA 11.0, use :ref:`nvJPEG<cuda_toolkit_nvJPEG>` instead.
-
-  - ``CUDA::nppicom``
-  - ``CUDA::nppicom_static``
-
-- `nppidei`: Data exchange and initialization functions in `nppi_data_exchange_and_initialization.h`
-
-  - ``CUDA::nppidei``
-  - ``CUDA::nppidei_static``
-
-- `nppif`: Filtering and computer vision functions in `nppi_filter_functions.h`
-
-  - ``CUDA::nppif``
-  - ``CUDA::nppif_static``
-
-- `nppig`: Geometry transformation functions found in `nppi_geometry_transforms.h`
-
-  - ``CUDA::nppig``
-  - ``CUDA::nppig_static``
-
-- `nppim`: Morphological operation functions found in `nppi_morphological_operations.h`
-
-  - ``CUDA::nppim``
-  - ``CUDA::nppim_static``
-
-- `nppist`: Statistics and linear transform in `nppi_statistics_functions.h` and `nppi_linear_transforms.h`
-
-  - ``CUDA::nppist``
-  - ``CUDA::nppist_static``
-
-- `nppisu`: Memory support functions in `nppi_support_functions.h`
-
-  - ``CUDA::nppisu``
-  - ``CUDA::nppisu_static``
-
-- `nppitc`: Threshold and compare operation functions in `nppi_threshold_and_compare_operations.h`
-
-  - ``CUDA::nppitc``
-  - ``CUDA::nppitc_static``
-
-- `npps`:
-
-  - ``CUDA::npps``
-  - ``CUDA::npps_static``
-
-.. _`cuda_toolkit_nvBLAS`:
-
-nvBLAS
-""""""
-
-The `nvBLAS <https://docs.nvidia.com/cuda/nvblas/index.html>`_ libraries.
-This is a shared library only.
-
-Targets Created:
-
-- ``CUDA::nvblas``
-
-.. _`cuda_toolkit_nvGRAPH`:
-
-nvGRAPH
-"""""""
-
-The `nvGRAPH <https://docs.nvidia.com/cuda/nvgraph/index.html>`_ library.
-Removed starting in CUDA 11.0
-
-Targets Created:
-
-- ``CUDA::nvgraph``
-- ``CUDA::nvgraph_static``
-
-
-.. _`cuda_toolkit_nvJPEG`:
-
-nvJPEG
-""""""
-
-The `nvJPEG <https://docs.nvidia.com/cuda/nvjpeg/index.html>`_ library.
-Introduced in CUDA 10.
-
-Targets Created:
-
-- ``CUDA::nvjpeg``
-- ``CUDA::nvjpeg_static``
-
-.. _`cuda_toolkit_nvRTC`:
-
-nvRTC
-"""""
-
-The `nvRTC <https://docs.nvidia.com/cuda/nvrtc/index.html>`_ (Runtime Compilation) library.
-This is a shared library only.
-
-Targets Created:
-
-- ``CUDA::nvrtc``
-
-.. _`cuda_toolkit_nvml`:
-
-nvidia-ML
-"""""""""
-
-The `NVIDIA Management Library <https://developer.nvidia.com/nvidia-management-library-nvml>`_.
-This is a shared library only.
-
-Targets Created:
-
-- ``CUDA::nvml``
-
-.. _`cuda_toolkit_nvToolsExt`:
-
-nvToolsExt
-""""""""""
-
-The `NVIDIA Tools Extension <https://docs.nvidia.com/gameworks/content/gameworkslibrary/nvtx/nvidia_tools_extension_library_nvtx.htm>`_.
-This is a shared library only.
-
-Targets Created:
-
-- ``CUDA::nvToolsExt``
-
-.. _`cuda_toolkit_opencl`:
-
-OpenCL
-""""""
-
-The `NVIDIA OpenCL Library <https://developer.nvidia.com/opencl>`_.
-This is a shared library only.
-
-Targets Created:
-
-- ``CUDA::OpenCL``
-
-.. _`cuda_toolkit_cuLIBOS`:
-
-cuLIBOS
-"""""""
-
-The cuLIBOS library is a backend thread abstraction layer library which is
-static only.  The ``CUDA::cublas_static``, ``CUDA::cusparse_static``,
-``CUDA::cufft_static``, ``CUDA::curand_static``, and (when implemented) NPP
-libraries all automatically have this dependency linked.
-
-Target Created:
-
-- ``CUDA::culibos``
-
-**Note**: direct usage of this target by consumers should not be necessary.
-
-.. _`cuda_toolkit_cuRAND`:
-
-
-
-Result variables
-^^^^^^^^^^^^^^^^
-
-``CUDAToolkit_FOUND``
-    A boolean specifying whether or not the CUDA Toolkit was found.
-
-``CUDAToolkit_VERSION``
-    The exact version of the CUDA Toolkit found (as reported by
-    ``nvcc --version``).
-
-``CUDAToolkit_VERSION_MAJOR``
-    The major version of the CUDA Toolkit.
-
-``CUDAToolkit_VERSION_MAJOR``
-    The minor version of the CUDA Toolkit.
-
-``CUDAToolkit_VERSION_PATCH``
-    The patch version of the CUDA Toolkit.
-
-``CUDAToolkit_BIN_DIR``
-    The path to the CUDA Toolkit library directory that contains the CUDA
-    executable ``nvcc``.
-
-``CUDAToolkit_INCLUDE_DIRS``
-    The path to the CUDA Toolkit ``include`` folder containing the header files
-    required to compile a project linking against CUDA.
-
-``CUDAToolkit_LIBRARY_DIR``
-    The path to the CUDA Toolkit library directory that contains the CUDA
-    Runtime library ``cudart``.
-
-``CUDAToolkit_LIBRARY_ROOT``
-    The path to the CUDA Toolkit directory containing the nvvm directory and
-    version.txt.
-
-``CUDAToolkit_TARGET_DIR``
-    The path to the CUDA Toolkit directory including the target architecture
-    when cross-compiling. When not cross-compiling this will be equivalant to
-    ``CUDAToolkit_ROOT_DIR``.
-
-``CUDAToolkit_NVCC_EXECUTABLE``
-    The path to the NVIDIA CUDA compiler ``nvcc``.  Note that this path may
-    **not** be the same as
-    :variable:`CMAKE_CUDA_COMPILER <CMAKE_<LANG>_COMPILER>`.  ``nvcc`` must be
-    found to determine the CUDA Toolkit version as well as determining other
-    features of the Toolkit.  This variable is set for the convenience of
-    modules that depend on this one.
-
-
-#]=======================================================================]
-
-# NOTE: much of this was simply extracted from FindCUDA.cmake.
-
-#   James Bigler, NVIDIA Corp (nvidia.com - jbigler)
-#   Abe Stephens, SCI Institute -- http://www.sci.utah.edu/~abe/FindCuda.html
-#
-#   Copyright (c) 2008 - 2009 NVIDIA Corporation.  All rights reserved.
-#
-#   Copyright (c) 2007-2009
-#   Scientific Computing and Imaging Institute, University of Utah
-#
-#   This code is licensed under the MIT License.  See the FindCUDA.cmake script
-#   for the text of the license.
-
-# The MIT License
-#
-# License for the specific language governing rights and limitations under
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# the rights to use, copy, modify, merge, publish, distribute, sublicense,
-# and/or sell copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-# DEALINGS IN THE SOFTWARE.
-#
-###############################################################################
-
-# The toolkit is located during compiler detection for CUDA and stored in CMakeCUDACompiler.cmake as
-# CMAKE_CUDA_COMPILER_TOOLKIT_ROOT and CMAKE_CUDA_COMPILER_LIBRARY_ROOT.
-# We compute the rest based on those here to avoid re-searching and to avoid finding a possibly
-# different installation.
-if(CMAKE_CUDA_COMPILER_TOOLKIT_ROOT)
-  set(CUDAToolkit_ROOT_DIR "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}")
-  set(CUDAToolkit_LIBRARY_ROOT "${CMAKE_CUDA_COMPILER_LIBRARY_ROOT}")
-  set(CUDAToolkit_BIN_DIR "${CUDAToolkit_ROOT_DIR}/bin")
-  set(CUDAToolkit_NVCC_EXECUTABLE "${CUDAToolkit_BIN_DIR}/nvcc${CMAKE_EXECUTABLE_SUFFIX}")
-else()
-  # For NVCC we can easily deduce the SDK binary directory from the compiler path.
-  if(CMAKE_CUDA_COMPILER_LOADED AND NOT CUDAToolkit_BIN_DIR AND CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA")
-    get_filename_component(CUDAToolkit_BIN_DIR "${CMAKE_CUDA_COMPILER}" DIRECTORY)
-    set(CUDAToolkit_BIN_DIR "${CUDAToolkit_BIN_DIR}" CACHE PATH "")
-    mark_as_advanced(CUDAToolkit_BIN_DIR)
-  endif()
-
-  # Try language- or user-provided path first.
-  if(CUDAToolkit_BIN_DIR)
-    find_program(CUDAToolkit_NVCC_EXECUTABLE
-      NAMES nvcc nvcc.exe
-      PATHS ${CUDAToolkit_BIN_DIR}
-      NO_DEFAULT_PATH
-    )
-  endif()
-
-  # Search using CUDAToolkit_ROOT
-  find_program(CUDAToolkit_NVCC_EXECUTABLE
-    NAMES nvcc nvcc.exe
-    PATHS ENV CUDA_PATH
-    PATH_SUFFIXES bin
-  )
-
-  # If the user specified CUDAToolkit_ROOT but nvcc could not be found, this is an error.
-  if(NOT CUDAToolkit_NVCC_EXECUTABLE AND (DEFINED CUDAToolkit_ROOT OR DEFINED ENV{CUDAToolkit_ROOT}))
-    # Declare error messages now, print later depending on find_package args.
-    set(fail_base "Could not find nvcc executable in path specified by")
-    set(cuda_root_fail "${fail_base} CUDAToolkit_ROOT=${CUDAToolkit_ROOT}")
-    set(env_cuda_root_fail "${fail_base} environment variable CUDAToolkit_ROOT=$ENV{CUDAToolkit_ROOT}")
-
-    if(CUDAToolkit_FIND_REQUIRED)
-      if(DEFINED CUDAToolkit_ROOT)
-        message(FATAL_ERROR ${cuda_root_fail})
-      elseif(DEFINED ENV{CUDAToolkit_ROOT})
-        message(FATAL_ERROR ${env_cuda_root_fail})
-      endif()
-    else()
-      if(NOT CUDAToolkit_FIND_QUIETLY)
-        if(DEFINED CUDAToolkit_ROOT)
-          message(STATUS ${cuda_root_fail})
-        elseif(DEFINED ENV{CUDAToolkit_ROOT})
-          message(STATUS ${env_cuda_root_fail})
-        endif()
-      endif()
-      set(CUDAToolkit_FOUND FALSE)
-      unset(fail_base)
-      unset(cuda_root_fail)
-      unset(env_cuda_root_fail)
-      return()
-    endif()
-  endif()
-
-  # CUDAToolkit_ROOT cmake / env variable not specified, try platform defaults.
-  #
-  # - Linux: /usr/local/cuda-X.Y
-  # - macOS: /Developer/NVIDIA/CUDA-X.Y
-  # - Windows: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vX.Y
-  #
-  # We will also search the default symlink location /usr/local/cuda first since
-  # if CUDAToolkit_ROOT is not specified, it is assumed that the symlinked
-  # directory is the desired location.
-  if(NOT CUDAToolkit_NVCC_EXECUTABLE)
-    if(UNIX)
-      if(NOT APPLE)
-        set(platform_base "/usr/local/cuda-")
-      else()
-        set(platform_base "/Developer/NVIDIA/CUDA-")
-      endif()
-    else()
-      set(platform_base "C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v")
-    endif()
-
-    # Build out a descending list of possible cuda installations, e.g.
-    file(GLOB possible_paths "${platform_base}*")
-    # Iterate the glob results and create a descending list.
-    set(versions)
-    foreach(p ${possible_paths})
-      # Extract version number from end of string
-      string(REGEX MATCH "[0-9][0-9]?\\.[0-9]$" p_version ${p})
-      if(IS_DIRECTORY ${p} AND p_version)
-        list(APPEND versions ${p_version})
-      endif()
-    endforeach()
-
-    # Sort numerically in descending order, so we try the newest versions first.
-    list(SORT versions COMPARE NATURAL ORDER DESCENDING)
-
-    # With a descending list of versions, populate possible paths to search.
-    set(search_paths)
-    foreach(v ${versions})
-      list(APPEND search_paths "${platform_base}${v}")
-    endforeach()
-
-    # Force the global default /usr/local/cuda to the front on Unix.
-    if(UNIX)
-      list(INSERT search_paths 0 "/usr/local/cuda")
-    endif()
-
-    # Now search for nvcc again using the platform default search paths.
-    find_program(CUDAToolkit_NVCC_EXECUTABLE
-      NAMES nvcc nvcc.exe
-      PATHS ${search_paths}
-      PATH_SUFFIXES bin
-    )
-
-    # We are done with these variables now, cleanup for caller.
-    unset(platform_base)
-    unset(possible_paths)
-    unset(versions)
-    unset(search_paths)
-
-    if(NOT CUDAToolkit_NVCC_EXECUTABLE)
-      if(CUDAToolkit_FIND_REQUIRED)
-        message(FATAL_ERROR "Could not find nvcc, please set CUDAToolkit_ROOT.")
-      elseif(NOT CUDAToolkit_FIND_QUIETLY)
-        message(STATUS "Could not find nvcc, please set CUDAToolkit_ROOT.")
-      endif()
-
-      set(CUDAToolkit_FOUND FALSE)
-      return()
-    endif()
-  endif()
-
-  if(NOT CUDAToolkit_BIN_DIR AND CUDAToolkit_NVCC_EXECUTABLE)
-    get_filename_component(CUDAToolkit_BIN_DIR "${CUDAToolkit_NVCC_EXECUTABLE}" DIRECTORY)
-    set(CUDAToolkit_BIN_DIR "${CUDAToolkit_BIN_DIR}" CACHE PATH "" FORCE)
-    mark_as_advanced(CUDAToolkit_BIN_DIR)
-  endif()
-
-  get_filename_component(CUDAToolkit_ROOT_DIR ${CUDAToolkit_BIN_DIR} DIRECTORY ABSOLUTE)
-
-  # CUDAToolkit_LIBRARY_ROOT contains the device library and version file.
-  # In a non-scattered installation this is equivalent to CUDAToolkit_ROOT_DIR.
-  # We first check for a non-scattered installation to prefer it over a scattered installation.
-  if(EXISTS "${CUDAToolkit_ROOT_DIR}/version.txt")
-    set(CUDAToolkit_LIBRARY_ROOT "${CUDAToolkit_ROOT_DIR}")
-  elseif(CMAKE_SYSROOT_LINK AND EXISTS "${CMAKE_SYSROOT_LINK}/usr/lib/cuda/version.txt")
-    set(CUDAToolkit_LIBRARY_ROOT "${CMAKE_SYSROOT_LINK}/usr/lib/cuda")
-  elseif(EXISTS "${CMAKE_SYSROOT}/usr/lib/cuda/version.txt")
-    set(CUDAToolkit_LIBRARY_ROOT "${CMAKE_SYSROOT}/usr/lib/cuda")
-  endif()
-endif()
-
-# Handle cross compilation
-if(CMAKE_CROSSCOMPILING)
-  if(CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7-a")
-    # Support for NVPACK
-    set(CUDAToolkit_TARGET_NAME "armv7-linux-androideabi")
-  elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
-    # Support for arm cross compilation
-    set(CUDAToolkit_TARGET_NAME "armv7-linux-gnueabihf")
-  elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
-    # Support for aarch64 cross compilation
-    if(ANDROID_ARCH_NAME STREQUAL "arm64")
-      set(CUDAToolkit_TARGET_NAME "aarch64-linux-androideabi")
-    else()
-      set(CUDAToolkit_TARGET_NAME "aarch64-linux")
-    endif(ANDROID_ARCH_NAME STREQUAL "arm64")
-  elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
-    set(CUDAToolkit_TARGET_NAME "x86_64-linux")
-  endif()
-
-  if(EXISTS "${CUDAToolkit_ROOT_DIR}/targets/${CUDAToolkit_TARGET_NAME}")
-    set(CUDAToolkit_TARGET_DIR "${CUDAToolkit_ROOT_DIR}/targets/${CUDAToolkit_TARGET_NAME}")
-    # add known CUDA target root path to the set of directories we search for programs, libraries and headers
-    list(PREPEND CMAKE_FIND_ROOT_PATH "${CUDAToolkit_TARGET_DIR}")
-
-    # Mark that we need to pop the root search path changes after we have
-    # found all cuda libraries so that searches for our cross-compilation
-    # libraries work when another cuda sdk is in CMAKE_PREFIX_PATH or
-    # PATh
-    set(_CUDAToolkit_Pop_ROOT_PATH True)
-  endif()
-else()
-  # Not cross compiling
-  set(CUDAToolkit_TARGET_DIR "${CUDAToolkit_ROOT_DIR}")
-  # Now that we have the real ROOT_DIR, find components inside it.
-  list(APPEND CMAKE_PREFIX_PATH ${CUDAToolkit_ROOT_DIR})
-
-  # Mark that we need to pop the prefix path changes after we have
-  # found the cudart library.
-  set(_CUDAToolkit_Pop_Prefix True)
-endif()
-
-# CUDAToolkit_TARGET_DIR always points to the directory containing the include directory.
-# On a scattered installation /usr, on a non-scattered something like /usr/local/cuda or /usr/local/cuda-10.2/targets/aarch64-linux.
-if(EXISTS "${CUDAToolkit_TARGET_DIR}/include/cuda_runtime.h")
-  set(CUDAToolkit_INCLUDE_DIR "${CUDAToolkit_TARGET_DIR}/include")
-elseif(NOT CUDAToolkit_FIND_QUIETLY)
-  message(STATUS "Unable to find cuda_runtime.h in \"${CUDAToolkit_TARGET_DIR}/include\" for CUDAToolkit_INCLUDE_DIR.")
-endif()
-
-if(CUDAToolkit_NVCC_EXECUTABLE AND
-   CUDAToolkit_NVCC_EXECUTABLE STREQUAL CMAKE_CUDA_COMPILER)
-  # Need to set these based off the already computed CMAKE_CUDA_COMPILER_VERSION value
-  # This if statement will always match, but is used to provide variables for MATCH 1,2,3...
-  if(CMAKE_CUDA_COMPILER_VERSION MATCHES [=[([0-9]+)\.([0-9]+)\.([0-9]+)]=])
-    set(CUDAToolkit_VERSION_MAJOR "${CMAKE_MATCH_1}")
-    set(CUDAToolkit_VERSION_MINOR "${CMAKE_MATCH_2}")
-    set(CUDAToolkit_VERSION_PATCH "${CMAKE_MATCH_3}")
-    set(CUDAToolkit_VERSION "${CMAKE_CUDA_COMPILER_VERSION}")
-  endif()
-else()
-  # Compute the version by invoking nvcc
-  execute_process(COMMAND ${CUDAToolkit_NVCC_EXECUTABLE} "--version" OUTPUT_VARIABLE NVCC_OUT)
-  if(NVCC_OUT MATCHES [=[ V([0-9]+)\.([0-9]+)\.([0-9]+)]=])
-    set(CUDAToolkit_VERSION_MAJOR "${CMAKE_MATCH_1}")
-    set(CUDAToolkit_VERSION_MINOR "${CMAKE_MATCH_2}")
-    set(CUDAToolkit_VERSION_PATCH "${CMAKE_MATCH_3}")
-    set(CUDAToolkit_VERSION  "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}")
-  endif()
-  unset(NVCC_OUT)
-endif()
-
-# Find the CUDA Runtime Library libcudart
-find_library(CUDA_CUDART
-  NAMES cudart
-  PATH_SUFFIXES lib64 lib/x64
-)
-find_library(CUDA_CUDART
-  NAMES cudart
-  PATH_SUFFIXES lib64/stubs lib/x64/stubs
-)
-
-if(NOT CUDA_CUDART AND NOT CUDAToolkit_FIND_QUIETLY)
-  message(STATUS "Unable to find cudart library.")
-endif()
-
-unset(CUDAToolkit_ROOT_DIR)
-if(_CUDAToolkit_Pop_Prefix)
-  list(REMOVE_AT CMAKE_PREFIX_PATH -1)
-  unset(_CUDAToolkit_Pop_Prefix)
-endif()
-
-#-----------------------------------------------------------------------------
-# Perform version comparison and validate all required variables are set.
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-find_package_handle_standard_args(CUDAToolkit
-  REQUIRED_VARS
-    CUDAToolkit_INCLUDE_DIR
-    CUDA_CUDART
-    CUDAToolkit_NVCC_EXECUTABLE
-  VERSION_VAR
-    CUDAToolkit_VERSION
-)
-mark_as_advanced(CUDA_CUDART
-                 CUDAToolkit_INCLUDE_DIR
-                 CUDAToolkit_NVCC_EXECUTABLE
-                 )
-
-#-----------------------------------------------------------------------------
-# Construct result variables
-if(CUDAToolkit_FOUND)
-  set(CUDAToolkit_INCLUDE_DIRS ${CUDAToolkit_INCLUDE_DIR})
-  get_filename_component(CUDAToolkit_LIBRARY_DIR ${CUDA_CUDART} DIRECTORY ABSOLUTE)
-endif()
-
-#-----------------------------------------------------------------------------
-# Construct import targets
-if(CUDAToolkit_FOUND)
-
-  function(_CUDAToolkit_find_and_add_import_lib lib_name)
-    cmake_parse_arguments(arg "" "" "ALT;DEPS;EXTRA_PATH_SUFFIXES" ${ARGN})
-
-    set(search_names ${lib_name} ${arg_ALT})
-
-    find_library(CUDA_${lib_name}_LIBRARY
-      NAMES ${search_names}
-      HINTS ${CUDAToolkit_LIBRARY_DIR}
-            ENV CUDA_PATH
-      PATH_SUFFIXES nvidia/current lib64 lib/x64 lib
-                    ${arg_EXTRA_PATH_SUFFIXES}
-    )
-    # Don't try any stub directories until we have exhausted all other
-    # search locations.
-    find_library(CUDA_${lib_name}_LIBRARY
-      NAMES ${search_names}
-      HINTS ${CUDAToolkit_LIBRARY_DIR}
-            ENV CUDA_PATH
-      PATH_SUFFIXES lib64/stubs lib/x64/stubs lib/stubs stubs
-    )
-
-    mark_as_advanced(CUDA_${lib_name}_LIBRARY)
-
-    if (NOT TARGET CUDA::${lib_name} AND CUDA_${lib_name}_LIBRARY)
-      add_library(CUDA::${lib_name} IMPORTED INTERFACE)
-      target_include_directories(CUDA::${lib_name} SYSTEM INTERFACE "${CUDAToolkit_INCLUDE_DIRS}")
-      target_link_libraries(CUDA::${lib_name} INTERFACE "${CUDA_${lib_name}_LIBRARY}")
-      foreach(dep ${arg_DEPS})
-        if(TARGET CUDA::${dep})
-          target_link_libraries(CUDA::${lib_name} INTERFACE CUDA::${dep})
-        endif()
-      endforeach()
-    endif()
-  endfunction()
-
-  if(NOT TARGET CUDA::toolkit)
-    add_library(CUDA::toolkit IMPORTED INTERFACE)
-    target_include_directories(CUDA::toolkit SYSTEM INTERFACE "${CUDAToolkit_INCLUDE_DIRS}")
-    target_link_directories(CUDA::toolkit INTERFACE "${CUDAToolkit_LIBRARY_DIR}")
-  endif()
-
-  _CUDAToolkit_find_and_add_import_lib(cuda_driver ALT cuda)
-
-  _CUDAToolkit_find_and_add_import_lib(cudart)
-  _CUDAToolkit_find_and_add_import_lib(cudart_static)
-
-  # setup dependencies that are required for cudart_static when building
-  # on linux. These are generally only required when using the CUDA toolkit
-  # when CUDA language is disabled
-  if(NOT TARGET CUDA::cudart_static_deps
-     AND TARGET CUDA::cudart_static)
-
-    add_library(CUDA::cudart_static_deps IMPORTED INTERFACE)
-    target_link_libraries(CUDA::cudart_static INTERFACE CUDA::cudart_static_deps)
-
-    if(UNIX AND (CMAKE_C_COMPILER OR CMAKE_CXX_COMPILER))
-      find_package(Threads REQUIRED)
-      target_link_libraries(CUDA::cudart_static_deps INTERFACE Threads::Threads ${CMAKE_DL_LIBS})
-    endif()
-
-    if(UNIX AND NOT APPLE)
-      # On Linux, you must link against librt when using the static cuda runtime.
-      find_library(CUDAToolkit_rt_LIBRARY rt)
-      mark_as_advanced(CUDAToolkit_rt_LIBRARY)
-      if(NOT CUDAToolkit_rt_LIBRARY)
-        message(WARNING "Could not find librt library, needed by CUDA::cudart_static")
-      else()
-        target_link_libraries(CUDA::cudart_static_deps INTERFACE ${CUDAToolkit_rt_LIBRARY})
-      endif()
-    endif()
-  endif()
-
-  _CUDAToolkit_find_and_add_import_lib(culibos) # it's a static library
-  foreach (cuda_lib cublasLt cublas cufft curand cusparse nppc nvjpeg)
-    _CUDAToolkit_find_and_add_import_lib(${cuda_lib})
-    _CUDAToolkit_find_and_add_import_lib(${cuda_lib}_static DEPS culibos)
-  endforeach()
-
-  # cuFFTW depends on cuFFT
-  _CUDAToolkit_find_and_add_import_lib(cufftw DEPS cufft)
-  _CUDAToolkit_find_and_add_import_lib(cufftw DEPS cufft_static)
-
-  # cuSOLVER depends on cuBLAS, and cuSPARSE
-  _CUDAToolkit_find_and_add_import_lib(cusolver DEPS cublas cusparse)
-  _CUDAToolkit_find_and_add_import_lib(cusolver_static DEPS cublas_static cusparse_static culibos)
-
-  # nvGRAPH depends on cuRAND, and cuSOLVER.
-  _CUDAToolkit_find_and_add_import_lib(nvgraph DEPS curand cusolver)
-  _CUDAToolkit_find_and_add_import_lib(nvgraph_static DEPS curand_static cusolver_static)
-
-  # Process the majority of the NPP libraries.
-  foreach (cuda_lib nppial nppicc nppidei nppif nppig nppim nppist nppitc npps nppicom nppisu)
-    _CUDAToolkit_find_and_add_import_lib(${cuda_lib} DEPS nppc)
-    _CUDAToolkit_find_and_add_import_lib(${cuda_lib}_static DEPS nppc_static)
-  endforeach()
-
-  _CUDAToolkit_find_and_add_import_lib(cupti
-                                       EXTRA_PATH_SUFFIXES ../extras/CUPTI/lib64/
-                                                           ../extras/CUPTI/lib/)
-  _CUDAToolkit_find_and_add_import_lib(cupti_static
-                                       EXTRA_PATH_SUFFIXES ../extras/CUPTI/lib64/
-                                                           ../extras/CUPTI/lib/)
-
-  _CUDAToolkit_find_and_add_import_lib(nvrtc DEPS cuda_driver)
-
-  _CUDAToolkit_find_and_add_import_lib(nvml ALT nvidia-ml nvml)
-
-  if(WIN32)
-    # nvtools can be installed outside the CUDA toolkit directory
-    # so prefer the NVTOOLSEXT_PATH windows only environment variable
-    # In addition on windows the most common name is nvToolsExt64_1
-    find_library(CUDA_nvToolsExt_LIBRARY
-      NAMES nvToolsExt64_1 nvToolsExt64 nvToolsExt
-      PATHS ENV NVTOOLSEXT_PATH
-            ENV CUDA_PATH
-      PATH_SUFFIXES lib/x64 lib
-    )
-  endif()
-  _CUDAToolkit_find_and_add_import_lib(nvToolsExt ALT nvToolsExt64)
-
-  _CUDAToolkit_find_and_add_import_lib(OpenCL)
-endif()
-
-if(_CUDAToolkit_Pop_ROOT_PATH)
-  list(REMOVE_AT CMAKE_FIND_ROOT_PATH 0)
-  unset(_CUDAToolkit_Pop_ROOT_PATH)
-endif()
diff --git a/share/cmake-3.18/Modules/FindCURL.cmake b/share/cmake-3.18/Modules/FindCURL.cmake
deleted file mode 100644
index be7e16e..0000000
--- a/share/cmake-3.18/Modules/FindCURL.cmake
+++ /dev/null
@@ -1,203 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindCURL
---------
-
-Find the native CURL headers and libraries.
-
-This module accept optional COMPONENTS to check supported features and
-protocols::
-
-  PROTOCOLS: ICT FILE FTP FTPS GOPHER HTTP HTTPS IMAP IMAPS LDAP LDAPS POP3
-             POP3S RTMP RTSP SCP SFTP SMB SMBS SMTP SMTPS TELNET TFTP
-  FEATURES:  SSL IPv6 UnixSockets libz AsynchDNS IDN GSS-API PSL SPNEGO
-             Kerberos NTLM NTLM_WB TLS-SRP HTTP2 HTTPS-proxy
-
-IMPORTED Targets
-^^^^^^^^^^^^^^^^
-
-This module defines :prop_tgt:`IMPORTED` target ``CURL::libcurl``, if
-curl has been found.
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-This module defines the following variables:
-
-``CURL_FOUND``
-  "True" if ``curl`` found.
-
-``CURL_INCLUDE_DIRS``
-  where to find ``curl``/``curl.h``, etc.
-
-``CURL_LIBRARIES``
-  List of libraries when using ``curl``.
-
-``CURL_VERSION_STRING``
-  The version of ``curl`` found.
-
-CURL CMake
-^^^^^^^^^^
-
-If CURL was built using the CMake buildsystem then it provides its own
-``CURLConfig.cmake`` file for use with the :command:`find_package` command's
-config mode. This module looks for this file and, if found,
-returns its results with no further action.
-
-Set ``CURL_NO_CURL_CMAKE`` to ``ON`` to disable this search.
-
-#]=======================================================================]
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-
-if(NOT CURL_NO_CURL_CMAKE)
-  # do a find package call to specifically look for the CMake version
-  # of curl
-  find_package(CURL QUIET NO_MODULE)
-  mark_as_advanced(CURL_DIR)
-
-  # if we found the CURL cmake package then we are done, and
-  # can print what we found and return.
-  if(CURL_FOUND)
-    find_package_handle_standard_args(CURL HANDLE_COMPONENTS CONFIG_MODE)
-    return()
-  endif()
-endif()
-
-find_package(PkgConfig QUIET)
-if(PKG_CONFIG_FOUND)
-  pkg_check_modules(PC_CURL QUIET libcurl)
-  if(PC_CURL_FOUND)
-    set(CURL_VERSION_STRING ${PC_CURL_VERSION})
-    pkg_get_variable(CURL_SUPPORTED_PROTOCOLS libcurl supported_protocols)
-    pkg_get_variable(CURL_SUPPORTED_FEATURES libcurl supported_features)
-  endif()
-endif()
-
-# Look for the header file.
-find_path(CURL_INCLUDE_DIR
-          NAMES curl/curl.h
-          HINTS ${PC_CURL_INCLUDE_DIRS})
-mark_as_advanced(CURL_INCLUDE_DIR)
-
-if(NOT CURL_LIBRARY)
-  # Look for the library (sorted from most current/relevant entry to least).
-  find_library(CURL_LIBRARY_RELEASE NAMES
-      curl
-    # Windows MSVC prebuilts:
-      curllib
-      libcurl_imp
-      curllib_static
-    # Windows older "Win32 - MSVC" prebuilts (libcurl.lib, e.g. libcurl-7.15.5-win32-msvc.zip):
-      libcurl
-      HINTS ${PC_CURL_LIBRARY_DIRS}
-  )
-  mark_as_advanced(CURL_LIBRARY_RELEASE)
-
-  find_library(CURL_LIBRARY_DEBUG NAMES
-    # Windows MSVC CMake builds in debug configuration on vcpkg:
-      libcurl-d_imp
-      libcurl-d
-      HINTS ${PC_CURL_LIBRARY_DIRS}
-  )
-  mark_as_advanced(CURL_LIBRARY_DEBUG)
-
-  include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
-  select_library_configurations(CURL)
-endif()
-
-if(CURL_INCLUDE_DIR AND NOT CURL_VERSION_STRING)
-  foreach(_curl_version_header curlver.h curl.h)
-    if(EXISTS "${CURL_INCLUDE_DIR}/curl/${_curl_version_header}")
-      file(STRINGS "${CURL_INCLUDE_DIR}/curl/${_curl_version_header}" curl_version_str REGEX "^#define[\t ]+LIBCURL_VERSION[\t ]+\".*\"")
-
-      string(REGEX REPLACE "^#define[\t ]+LIBCURL_VERSION[\t ]+\"([^\"]*)\".*" "\\1" CURL_VERSION_STRING "${curl_version_str}")
-      unset(curl_version_str)
-      break()
-    endif()
-  endforeach()
-endif()
-
-if(CURL_FIND_COMPONENTS)
-  set(CURL_KNOWN_PROTOCOLS ICT FILE FTP FTPS GOPHER HTTP HTTPS IMAP IMAPS LDAP LDAPS POP3 POP3S RTMP RTSP SCP SFTP SMB SMBS SMTP SMTPS TELNET TFTP)
-  set(CURL_KNOWN_FEATURES  SSL IPv6 UnixSockets libz AsynchDNS IDN GSS-API PSL SPNEGO Kerberos NTLM NTLM_WB TLS-SRP HTTP2 HTTPS-proxy)
-  foreach(component IN LISTS CURL_KNOWN_PROTOCOLS CURL_KNOWN_FEATURES)
-    set(CURL_${component}_FOUND FALSE)
-  endforeach()
-  if(NOT PC_CURL_FOUND)
-    find_program(CURL_CONFIG_EXECUTABLE NAMES curl-config)
-    if(CURL_CONFIG_EXECUTABLE)
-      execute_process(COMMAND ${CURL_CONFIG_EXECUTABLE} --version
-                      OUTPUT_VARIABLE CURL_CONFIG_VERSION_STRING
-                      ERROR_QUIET
-                      OUTPUT_STRIP_TRAILING_WHITESPACE)
-      execute_process(COMMAND ${CURL_CONFIG_EXECUTABLE} --feature
-                      OUTPUT_VARIABLE CURL_CONFIG_FEATURES_STRING
-                      ERROR_QUIET
-                      OUTPUT_STRIP_TRAILING_WHITESPACE)
-      string(REPLACE "\n" ";" CURL_SUPPORTED_FEATURES "${CURL_CONFIG_FEATURES_STRING}")
-      execute_process(COMMAND ${CURL_CONFIG_EXECUTABLE} --protocols
-                      OUTPUT_VARIABLE CURL_CONFIG_PROTOCOLS_STRING
-                      ERROR_QUIET
-                      OUTPUT_STRIP_TRAILING_WHITESPACE)
-      string(REPLACE "\n" ";" CURL_SUPPORTED_PROTOCOLS "${CURL_CONFIG_PROTOCOLS_STRING}")
-    endif()
-
-  endif()
-  foreach(component IN LISTS CURL_FIND_COMPONENTS)
-    list(FIND CURL_KNOWN_PROTOCOLS ${component} _found)
-    if(NOT _found EQUAL -1)
-      list(FIND CURL_SUPPORTED_PROTOCOLS ${component} _found)
-      if(NOT _found EQUAL -1)
-        set(CURL_${component}_FOUND TRUE)
-      elseif(CURL_FIND_REQUIRED)
-        message(FATAL_ERROR "CURL: Required protocol ${component} is not found")
-      endif()
-    else()
-      list(FIND CURL_SUPPORTED_FEATURES ${component} _found)
-      if(NOT _found EQUAL -1)
-        set(CURL_${component}_FOUND TRUE)
-      elseif(CURL_FIND_REQUIRED)
-        message(FATAL_ERROR "CURL: Required feature ${component} is not found")
-      endif()
-    endif()
-  endforeach()
-endif()
-
-find_package_handle_standard_args(CURL
-                                  REQUIRED_VARS CURL_LIBRARY CURL_INCLUDE_DIR
-                                  VERSION_VAR CURL_VERSION_STRING
-                                  HANDLE_COMPONENTS)
-
-if(CURL_FOUND)
-  set(CURL_LIBRARIES ${CURL_LIBRARY})
-  set(CURL_INCLUDE_DIRS ${CURL_INCLUDE_DIR})
-
-  if(NOT TARGET CURL::libcurl)
-    add_library(CURL::libcurl UNKNOWN IMPORTED)
-    set_target_properties(CURL::libcurl PROPERTIES
-      INTERFACE_INCLUDE_DIRECTORIES "${CURL_INCLUDE_DIRS}")
-
-    if(EXISTS "${CURL_LIBRARY}")
-      set_target_properties(CURL::libcurl PROPERTIES
-        IMPORTED_LINK_INTERFACE_LANGUAGES "C"
-        IMPORTED_LOCATION "${CURL_LIBRARY}")
-    endif()
-    if(CURL_LIBRARY_RELEASE)
-      set_property(TARGET CURL::libcurl APPEND PROPERTY
-        IMPORTED_CONFIGURATIONS RELEASE)
-      set_target_properties(CURL::libcurl PROPERTIES
-        IMPORTED_LINK_INTERFACE_LANGUAGES "C"
-        IMPORTED_LOCATION_RELEASE "${CURL_LIBRARY_RELEASE}")
-    endif()
-    if(CURL_LIBRARY_DEBUG)
-      set_property(TARGET CURL::libcurl APPEND PROPERTY
-        IMPORTED_CONFIGURATIONS DEBUG)
-      set_target_properties(CURL::libcurl PROPERTIES
-        IMPORTED_LINK_INTERFACE_LANGUAGES "C"
-        IMPORTED_LOCATION_DEBUG "${CURL_LIBRARY_DEBUG}")
-    endif()
-  endif()
-endif()
diff --git a/share/cmake-3.18/Modules/FindCups.cmake b/share/cmake-3.18/Modules/FindCups.cmake
deleted file mode 100644
index 4e8232d..0000000
--- a/share/cmake-3.18/Modules/FindCups.cmake
+++ /dev/null
@@ -1,98 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindCups
---------
-
-Find the Common UNIX Printing System (CUPS).
-
-Set ``CUPS_REQUIRE_IPP_DELETE_ATTRIBUTE`` to ``TRUE`` if you need a version which
-features this function (i.e. at least ``1.1.19``)
-
-Imported targets
-^^^^^^^^^^^^^^^^
-
-This module defines :prop_tgt:`IMPORTED` target ``Cups::Cups``, if Cups has
-been found.
-
-Result variables
-^^^^^^^^^^^^^^^^
-
-This module will set the following variables in your project:
-
-``CUPS_FOUND``
-  true if CUPS headers and libraries were found
-``CUPS_INCLUDE_DIRS``
-  the directory containing the Cups headers
-``CUPS_LIBRARIES``
-  the libraries to link against to use CUPS.
-``CUPS_VERSION_STRING``
-  the version of CUPS found (since CMake 2.8.8)
-
-Cache variables
-^^^^^^^^^^^^^^^
-
-The following cache variables may also be set:
-
-``CUPS_INCLUDE_DIR``
-  the directory containing the Cups headers
-#]=======================================================================]
-
-find_path(CUPS_INCLUDE_DIR cups/cups.h )
-
-find_library(CUPS_LIBRARIES NAMES cups )
-
-if (CUPS_INCLUDE_DIR AND CUPS_LIBRARIES AND CUPS_REQUIRE_IPP_DELETE_ATTRIBUTE)
-    include(${CMAKE_CURRENT_LIST_DIR}/CheckLibraryExists.cmake)
-    include(${CMAKE_CURRENT_LIST_DIR}/CMakePushCheckState.cmake)
-    cmake_push_check_state()
-    set(CMAKE_REQUIRED_QUIET ${Cups_FIND_QUIETLY})
-
-    # ippDeleteAttribute is new in cups-1.1.19 (and used by kdeprint)
-    CHECK_LIBRARY_EXISTS(cups ippDeleteAttribute "" CUPS_HAS_IPP_DELETE_ATTRIBUTE)
-    cmake_pop_check_state()
-endif ()
-
-if (CUPS_INCLUDE_DIR AND EXISTS "${CUPS_INCLUDE_DIR}/cups/cups.h")
-    file(STRINGS "${CUPS_INCLUDE_DIR}/cups/cups.h" cups_version_str
-         REGEX "^#[\t ]*define[\t ]+CUPS_VERSION_(MAJOR|MINOR|PATCH)[\t ]+[0-9]+$")
-
-    unset(CUPS_VERSION_STRING)
-    foreach(VPART MAJOR MINOR PATCH)
-        foreach(VLINE ${cups_version_str})
-            if(VLINE MATCHES "^#[\t ]*define[\t ]+CUPS_VERSION_${VPART}[\t ]+([0-9]+)$")
-                set(CUPS_VERSION_PART "${CMAKE_MATCH_1}")
-                if(CUPS_VERSION_STRING)
-                    string(APPEND CUPS_VERSION_STRING ".${CUPS_VERSION_PART}")
-                else()
-                    set(CUPS_VERSION_STRING "${CUPS_VERSION_PART}")
-                endif()
-            endif()
-        endforeach()
-    endforeach()
-endif ()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-
-if (CUPS_REQUIRE_IPP_DELETE_ATTRIBUTE)
-    FIND_PACKAGE_HANDLE_STANDARD_ARGS(Cups
-                                      REQUIRED_VARS CUPS_LIBRARIES CUPS_INCLUDE_DIR CUPS_HAS_IPP_DELETE_ATTRIBUTE
-                                      VERSION_VAR CUPS_VERSION_STRING)
-else ()
-    FIND_PACKAGE_HANDLE_STANDARD_ARGS(Cups
-                                      REQUIRED_VARS CUPS_LIBRARIES CUPS_INCLUDE_DIR
-                                      VERSION_VAR CUPS_VERSION_STRING)
-endif ()
-
-mark_as_advanced(CUPS_INCLUDE_DIR CUPS_LIBRARIES)
-
-if (CUPS_FOUND)
-    set(CUPS_INCLUDE_DIRS "${CUPS_INCLUDE_DIR}")
-    if (NOT TARGET Cups::Cups)
-        add_library(Cups::Cups INTERFACE IMPORTED)
-        set_target_properties(Cups::Cups PROPERTIES
-            INTERFACE_LINK_LIBRARIES      "${CUPS_LIBRARIES}"
-            INTERFACE_INCLUDE_DIRECTORIES "${CUPS_INCLUDE_DIR}")
-    endif ()
-endif ()
diff --git a/share/cmake-3.18/Modules/FindCurses.cmake b/share/cmake-3.18/Modules/FindCurses.cmake
deleted file mode 100644
index ba56078..0000000
--- a/share/cmake-3.18/Modules/FindCurses.cmake
+++ /dev/null
@@ -1,270 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindCurses
-----------
-
-Find the curses or ncurses include file and library.
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-This module defines the following variables:
-
-``CURSES_FOUND``
-  True if Curses is found.
-``CURSES_INCLUDE_DIRS``
-  The include directories needed to use Curses.
-``CURSES_LIBRARIES``
-  The libraries needed to use Curses.
-``CURSES_CFLAGS``
-  Parameters which ought be given to C/C++ compilers when using Curses.
-``CURSES_HAVE_CURSES_H``
-  True if curses.h is available.
-``CURSES_HAVE_NCURSES_H``
-  True if ncurses.h is available.
-``CURSES_HAVE_NCURSES_NCURSES_H``
-  True if ``ncurses/ncurses.h`` is available.
-``CURSES_HAVE_NCURSES_CURSES_H``
-  True if ``ncurses/curses.h`` is available.
-
-Set ``CURSES_NEED_NCURSES`` to ``TRUE`` before the
-``find_package(Curses)`` call if NCurses functionality is required.
-Set ``CURSES_NEED_WIDE`` to ``TRUE`` before the
-``find_package(Curses)`` call if unicode functionality is required.
-
-Backward Compatibility
-^^^^^^^^^^^^^^^^^^^^^^
-
-The following variable are provided for backward compatibility:
-
-``CURSES_INCLUDE_DIR``
-  Path to Curses include.  Use ``CURSES_INCLUDE_DIRS`` instead.
-``CURSES_LIBRARY``
-  Path to Curses library.  Use ``CURSES_LIBRARIES`` instead.
-#]=======================================================================]
-
-include(${CMAKE_CURRENT_LIST_DIR}/CheckLibraryExists.cmake)
-
-# we don't know anything about cursesw, so only ncurses
-# may be ncursesw
-if(NOT CURSES_NEED_WIDE)
-  set(NCURSES_LIBRARY_NAME "ncurses")
-  set(CURSES_FORM_LIBRARY_NAME "form")
-else()
-  set(NCURSES_LIBRARY_NAME "ncursesw")
-  set(CURSES_FORM_LIBRARY_NAME "formw")
-  # Also, if we are searching for wide curses - we are actually searching
-  # for ncurses, we don't know about any other unicode version.
-  set(CURSES_NEED_NCURSES TRUE)
-endif()
-
-find_library(CURSES_CURSES_LIBRARY NAMES curses)
-
-find_library(CURSES_NCURSES_LIBRARY NAMES "${NCURSES_LIBRARY_NAME}" )
-set(CURSES_USE_NCURSES FALSE)
-
-if(CURSES_NCURSES_LIBRARY  AND ((NOT CURSES_CURSES_LIBRARY) OR CURSES_NEED_NCURSES))
-  set(CURSES_USE_NCURSES TRUE)
-endif()
-# http://cygwin.com/ml/cygwin-announce/2010-01/msg00002.html
-# cygwin ncurses stopped providing curses.h symlinks see above
-# message.  Cygwin is an ncurses package, so force ncurses on
-# cygwin if the curses.h is missing
-if(CYGWIN)
-  if (CURSES_NEED_WIDE)
-    if(NOT EXISTS /usr/include/ncursesw/curses.h)
-      set(CURSES_USE_NCURSES TRUE)
-    endif()
-  else()
-    if(NOT EXISTS /usr/include/curses.h)
-      set(CURSES_USE_NCURSES TRUE)
-    endif()
-  endif()
-endif()
-
-
-# Not sure the logic is correct here.
-# If NCurses is required, use the function wsyncup() to check if the library
-# has NCurses functionality (at least this is where it breaks on NetBSD).
-# If wsyncup is in curses, use this one.
-# If not, try to find ncurses and check if this has the symbol.
-# Once the ncurses library is found, search the ncurses.h header first, but
-# some web pages also say that even with ncurses there is not always a ncurses.h:
-# http://osdir.com/ml/gnome.apps.mc.devel/2002-06/msg00029.html
-# So at first try ncurses.h, if not found, try to find curses.h under the same
-# prefix as the library was found, if still not found, try curses.h with the
-# default search paths.
-if(CURSES_CURSES_LIBRARY  AND  CURSES_NEED_NCURSES)
-  include(${CMAKE_CURRENT_LIST_DIR}/CMakePushCheckState.cmake)
-  cmake_push_check_state()
-  set(CMAKE_REQUIRED_QUIET ${Curses_FIND_QUIETLY})
-  CHECK_LIBRARY_EXISTS("${CURSES_CURSES_LIBRARY}"
-    wsyncup "" CURSES_CURSES_HAS_WSYNCUP)
-
-  if(CURSES_NCURSES_LIBRARY  AND NOT  CURSES_CURSES_HAS_WSYNCUP)
-    CHECK_LIBRARY_EXISTS("${CURSES_NCURSES_LIBRARY}"
-      wsyncup "" CURSES_NCURSES_HAS_WSYNCUP)
-    if( CURSES_NCURSES_HAS_WSYNCUP)
-      set(CURSES_USE_NCURSES TRUE)
-    endif()
-  endif()
-  cmake_pop_check_state()
-
-endif()
-
-if(CURSES_USE_NCURSES)
-  get_filename_component(_cursesLibDir "${CURSES_NCURSES_LIBRARY}" PATH)
-  get_filename_component(_cursesParentDir "${_cursesLibDir}" PATH)
-
-  # Use CURSES_NCURSES_INCLUDE_PATH if set, for compatibility.
-  if(CURSES_NCURSES_INCLUDE_PATH)
-    if (CURSES_NEED_WIDE)
-      find_path(CURSES_INCLUDE_PATH
-        NAMES ncursesw/ncurses.h ncursesw/curses.h ncursesw.h cursesw.h
-        PATHS ${CURSES_NCURSES_INCLUDE_PATH}
-        NO_DEFAULT_PATH
-        )
-    else()
-      find_path(CURSES_INCLUDE_PATH
-        NAMES ncurses/ncurses.h ncurses/curses.h ncurses.h curses.h
-        PATHS ${CURSES_NCURSES_INCLUDE_PATH}
-        NO_DEFAULT_PATH
-        )
-    endif()
-  endif()
-
-  if (CURSES_NEED_WIDE)
-    set(CURSES_TINFO_LIBRARY_NAME tinfow)
-    find_path(CURSES_INCLUDE_PATH
-      NAMES ncursesw/ncurses.h ncursesw/curses.h ncursesw.h cursesw.h
-      HINTS "${_cursesParentDir}/include"
-      )
-  else()
-    set(CURSES_TINFO_LIBRARY_NAME tinfo)
-    find_path(CURSES_INCLUDE_PATH
-      NAMES ncurses/ncurses.h ncurses/curses.h ncurses.h curses.h
-      HINTS "${_cursesParentDir}/include"
-      )
-  endif()
-
-  # Previous versions of FindCurses provided these values.
-  if(NOT DEFINED CURSES_LIBRARY)
-    set(CURSES_LIBRARY "${CURSES_NCURSES_LIBRARY}")
-  endif()
-
-  CHECK_LIBRARY_EXISTS("${CURSES_NCURSES_LIBRARY}"
-    cbreak "" CURSES_NCURSES_HAS_CBREAK)
-  if(NOT CURSES_NCURSES_HAS_CBREAK)
-    find_library(CURSES_EXTRA_LIBRARY "${CURSES_TINFO_LIBRARY_NAME}" HINTS "${_cursesLibDir}")
-    find_library(CURSES_EXTRA_LIBRARY "${CURSES_TINFO_LIBRARY_NAME}" )
-
-    mark_as_advanced(
-      CURSES_EXTRA_LIBRARY
-      )
-  endif()
-else()
-  get_filename_component(_cursesLibDir "${CURSES_CURSES_LIBRARY}" PATH)
-  get_filename_component(_cursesParentDir "${_cursesLibDir}" PATH)
-
-  #We can't find anything with CURSES_NEED_WIDE because we know
-  #only about ncursesw unicode curses version
-  if(NOT CURSES_NEED_WIDE)
-    find_path(CURSES_INCLUDE_PATH
-      NAMES curses.h
-      HINTS "${_cursesParentDir}/include"
-      )
-  endif()
-
-  # Previous versions of FindCurses provided these values.
-  if(NOT DEFINED CURSES_CURSES_H_PATH)
-    set(CURSES_CURSES_H_PATH "${CURSES_INCLUDE_PATH}")
-  endif()
-  if(NOT DEFINED CURSES_LIBRARY)
-    set(CURSES_LIBRARY "${CURSES_CURSES_LIBRARY}")
-  endif()
-endif()
-
-# Report whether each possible header name exists in the include directory.
-if(NOT DEFINED CURSES_HAVE_NCURSES_NCURSES_H)
-  if(CURSES_NEED_WIDE)
-    if(EXISTS "${CURSES_INCLUDE_PATH}/ncursesw/ncurses.h")
-      set(CURSES_HAVE_NCURSES_NCURSES_H "${CURSES_INCLUDE_PATH}/ncursesw/ncurses.h")
-    endif()
-  elseif(EXISTS "${CURSES_INCLUDE_PATH}/ncurses/ncurses.h")
-    set(CURSES_HAVE_NCURSES_NCURSES_H "${CURSES_INCLUDE_PATH}/ncurses/ncurses.h")
-  endif()
-  if(NOT DEFINED CURSES_HAVE_NCURSES_NCURSES_H)
-    set(CURSES_HAVE_NCURSES_NCURSES_H "CURSES_HAVE_NCURSES_NCURSES_H-NOTFOUND")
-  endif()
-endif()
-if(NOT DEFINED CURSES_HAVE_NCURSES_CURSES_H)
-  if(CURSES_NEED_WIDE)
-    if(EXISTS "${CURSES_INCLUDE_PATH}/ncursesw/curses.h")
-      set(CURSES_HAVE_NCURSES_CURSES_H "${CURSES_INCLUDE_PATH}/ncursesw/curses.h")
-    endif()
-  elseif(EXISTS "${CURSES_INCLUDE_PATH}/ncurses/curses.h")
-    set(CURSES_HAVE_NCURSES_CURSES_H "${CURSES_INCLUDE_PATH}/ncurses/curses.h")
-  endif()
-  if(NOT DEFINED CURSES_HAVE_NCURSES_CURSES_H)
-    set(CURSES_HAVE_NCURSES_CURSES_H "CURSES_HAVE_NCURSES_CURSES_H-NOTFOUND")
-  endif()
-endif()
-if(NOT CURSES_NEED_WIDE)
-  #ncursesw can't be found for this paths
-  if(NOT DEFINED CURSES_HAVE_NCURSES_H)
-    if(EXISTS "${CURSES_INCLUDE_PATH}/ncurses.h")
-      set(CURSES_HAVE_NCURSES_H "${CURSES_INCLUDE_PATH}/ncurses.h")
-    else()
-      set(CURSES_HAVE_NCURSES_H "CURSES_HAVE_NCURSES_H-NOTFOUND")
-    endif()
-  endif()
-  if(NOT DEFINED CURSES_HAVE_CURSES_H)
-    if(EXISTS "${CURSES_INCLUDE_PATH}/curses.h")
-      set(CURSES_HAVE_CURSES_H "${CURSES_INCLUDE_PATH}/curses.h")
-    else()
-      set(CURSES_HAVE_CURSES_H "CURSES_HAVE_CURSES_H-NOTFOUND")
-    endif()
-  endif()
-endif()
-
-find_library(CURSES_FORM_LIBRARY "${CURSES_FORM_LIBRARY_NAME}" HINTS "${_cursesLibDir}")
-find_library(CURSES_FORM_LIBRARY "${CURSES_FORM_LIBRARY_NAME}" )
-
-# Previous versions of FindCurses provided these values.
-if(NOT DEFINED FORM_LIBRARY)
-  set(FORM_LIBRARY "${CURSES_FORM_LIBRARY}")
-endif()
-
-# Need to provide the *_LIBRARIES
-set(CURSES_LIBRARIES ${CURSES_LIBRARY})
-
-if(CURSES_EXTRA_LIBRARY)
-  set(CURSES_LIBRARIES ${CURSES_LIBRARIES} ${CURSES_EXTRA_LIBRARY})
-endif()
-
-if(CURSES_FORM_LIBRARY)
-  set(CURSES_LIBRARIES ${CURSES_LIBRARIES} ${CURSES_FORM_LIBRARY})
-endif()
-
-# Provide the *_INCLUDE_DIRS and *_CFLAGS results.
-set(CURSES_INCLUDE_DIRS ${CURSES_INCLUDE_PATH})
-set(CURSES_INCLUDE_DIR ${CURSES_INCLUDE_PATH}) # compatibility
-
-find_package(PkgConfig QUIET)
-if(PKG_CONFIG_FOUND)
-  pkg_check_modules(NCURSES QUIET ${NCURSES_LIBRARY_NAME})
-  set(CURSES_CFLAGS ${NCURSES_CFLAGS_OTHER})
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(Curses DEFAULT_MSG
-  CURSES_LIBRARY CURSES_INCLUDE_PATH)
-
-mark_as_advanced(
-  CURSES_INCLUDE_PATH
-  CURSES_CURSES_LIBRARY
-  CURSES_NCURSES_LIBRARY
-  CURSES_FORM_LIBRARY
-  )
diff --git a/share/cmake-3.18/Modules/FindDevIL.cmake b/share/cmake-3.18/Modules/FindDevIL.cmake
deleted file mode 100644
index 9984943..0000000
--- a/share/cmake-3.18/Modules/FindDevIL.cmake
+++ /dev/null
@@ -1,75 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindDevIL
----------
-
-
-
-This module locates the developer's image library.
-http://openil.sourceforge.net/
-
-This module sets:
-
-::
-
-   IL_LIBRARIES -   the name of the IL library. These include the full path to
-                    the core DevIL library. This one has to be linked into the
-                    application.
-   ILU_LIBRARIES -  the name of the ILU library. Again, the full path. This
-                    library is for filters and effects, not actual loading. It
-                    doesn't have to be linked if the functionality it provides
-                    is not used.
-   ILUT_LIBRARIES - the name of the ILUT library. Full path. This part of the
-                    library interfaces with OpenGL. It is not strictly needed
-                    in applications.
-   IL_INCLUDE_DIR - where to find the il.h, ilu.h and ilut.h files.
-   DevIL_FOUND    - this is set to TRUE if all the above variables were set.
-                    This will be set to false if ILU or ILUT are not found,
-                    even if they are not needed. In most systems, if one
-                    library is found all the others are as well. That's the
-                    way the DevIL developers release it.
-#]=======================================================================]
-
-# TODO: Add version support.
-# Tested under Linux and Windows (MSVC)
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-
-find_path(IL_INCLUDE_DIR il.h
-  PATH_SUFFIXES include IL
-  DOC "The path to the directory that contains il.h"
-)
-
-#message("IL_INCLUDE_DIR is ${IL_INCLUDE_DIR}")
-
-find_library(IL_LIBRARIES
-  NAMES IL DEVIL
-  PATH_SUFFIXES libx32 lib64 lib lib32
-  DOC "The file that corresponds to the base il library."
-)
-
-#message("IL_LIBRARIES is ${IL_LIBRARIES}")
-
-find_library(ILUT_LIBRARIES
-  NAMES ILUT
-  PATH_SUFFIXES libx32 lib64 lib lib32
-  DOC "The file that corresponds to the il (system?) utility library."
-)
-
-#message("ILUT_LIBRARIES is ${ILUT_LIBRARIES}")
-
-find_library(ILU_LIBRARIES
-  NAMES ILU
-  PATH_SUFFIXES libx32 lib64 lib lib32
-  DOC "The file that corresponds to the il utility library."
-)
-
-#message("ILU_LIBRARIES is ${ILU_LIBRARIES}")
-
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(DevIL DEFAULT_MSG
-                                  IL_LIBRARIES ILU_LIBRARIES
-                                  IL_INCLUDE_DIR)
-# provide legacy variable for compatibility
-set(IL_FOUND ${DevIL_FOUND})
diff --git a/share/cmake-3.18/Modules/FindDoxygen.cmake b/share/cmake-3.18/Modules/FindDoxygen.cmake
deleted file mode 100644
index 184a9a2..0000000
--- a/share/cmake-3.18/Modules/FindDoxygen.cmake
+++ /dev/null
@@ -1,1160 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindDoxygen
------------
-
-Doxygen is a documentation generation tool (see http://www.doxygen.org).
-This module looks for Doxygen and some optional tools it supports. These
-tools are enabled as components in the :command:`find_package` command:
-
-``dot``
-  `Graphviz <http://graphviz.org>`_ ``dot`` utility used to render various
-  graphs.
-``mscgen``
-  `Message Chart Generator <http://www.mcternan.me.uk/mscgen/>`_ utility used
-  by Doxygen's ``\msc`` and ``\mscfile`` commands.
-``dia``
-  `Dia <https://wiki.gnome.org/Apps/Dia>`_ the diagram editor used by Doxygen's
-  ``\diafile`` command.
-
-Examples:
-
-.. code-block:: cmake
-
-  # Require dot, treat the other components as optional
-  find_package(Doxygen
-               REQUIRED dot
-               OPTIONAL_COMPONENTS mscgen dia)
-
-The following variables are defined by this module:
-
-.. variable:: DOXYGEN_FOUND
-
-  True if the ``doxygen`` executable was found.
-
-.. variable:: DOXYGEN_VERSION
-
-  The version reported by ``doxygen --version``.
-
-The module defines ``IMPORTED`` targets for Doxygen and each component found.
-These can be used as part of custom commands, etc. and should be preferred over
-old-style (and now deprecated) variables like ``DOXYGEN_EXECUTABLE``. The
-following import targets are defined if their corresponding executable could be
-found (the component import targets will only be defined if that component was
-requested):
-
-::
-
-  Doxygen::doxygen
-  Doxygen::dot
-  Doxygen::mscgen
-  Doxygen::dia
-
-
-Functions
-^^^^^^^^^
-
-.. command:: doxygen_add_docs
-
-  This function is intended as a convenience for adding a target for generating
-  documentation with Doxygen. It aims to provide sensible defaults so that
-  projects can generally just provide the input files and directories and that
-  will be sufficient to give sensible results. The function supports the
-  ability to customize the Doxygen configuration used to build the
-  documentation.
-
-  ::
-
-    doxygen_add_docs(targetName
-        [filesOrDirs...]
-        [ALL]
-        [USE_STAMP_FILE]
-        [WORKING_DIRECTORY dir]
-        [COMMENT comment])
-
-  The function constructs a ``Doxyfile`` and defines a custom target that runs
-  Doxygen on that generated file. The listed files and directories are used as
-  the ``INPUT`` of the generated ``Doxyfile`` and they can contain wildcards.
-  Any files that are listed explicitly will also be added as ``SOURCES`` of the
-  custom target so they will show up in an IDE project's source list.
-
-  So that relative input paths work as expected, by default the working
-  directory of the Doxygen command will be the current source directory (i.e.
-  :variable:`CMAKE_CURRENT_SOURCE_DIR`). This can be overridden with the
-  ``WORKING_DIRECTORY`` option to change the directory used as the relative
-  base point. Note also that Doxygen's default behavior is to strip the working
-  directory from relative paths in the generated documentation (see the
-  ``STRIP_FROM_PATH`` `Doxygen config option
-  <http://www.doxygen.org/manual/config.html>`_ for details).
-
-  If provided, the optional ``comment`` will be passed as the ``COMMENT`` for
-  the :command:`add_custom_target` command used to create the custom target
-  internally.
-
-  If ``ALL`` is set, the target will be added to the default build target.
-
-  If ``USE_STAMP_FILE`` is set, the custom command defined by this function will
-  create a stamp file with the name ``<targetName>.stamp`` in the current
-  binary directory whenever doxygen is re-run.  With this option present, all
-  items in ``<filesOrDirs>`` must be files (i.e. no directories, symlinks or
-  wildcards) and each of the files must exist at the time
-  ``doxygen_add_docs()`` is called.  An error will be raised if any of the
-  items listed is missing or is not a file when ``USE_STAMP_FILE`` is given.
-  A dependency will be created on each of the files so that doxygen will only
-  be re-run if one of the files is updated.  Without the ``USE_STAMP_FILE``
-  option, doxygen will always be re-run if the ``<targetName>`` target is built
-  regardless of whether anything listed in ``<filesOrDirs>`` has changed.
-
-  The contents of the generated ``Doxyfile`` can be customized by setting CMake
-  variables before calling ``doxygen_add_docs()``. Any variable with a name of
-  the form ``DOXYGEN_<tag>`` will have its value substituted for the
-  corresponding ``<tag>`` configuration option in the ``Doxyfile``. See the
-  `Doxygen documentation <http://www.doxygen.org/manual/config.html>`_ for the
-  full list of supported configuration options.
-
-  Some of Doxygen's defaults are overridden to provide more appropriate
-  behavior for a CMake project. Each of the following will be explicitly set
-  unless the variable already has a value before ``doxygen_add_docs()`` is
-  called (with some exceptions noted):
-
-  .. variable:: DOXYGEN_HAVE_DOT
-
-    Set to ``YES`` if the ``dot`` component was requested and it was found,
-    ``NO`` otherwise. Any existing value of ``DOXYGEN_HAVE_DOT`` is ignored.
-
-  .. variable:: DOXYGEN_DOT_MULTI_TARGETS
-
-    Set to ``YES`` by this module (note that this requires a ``dot`` version
-    newer than 1.8.10). This option is only meaningful if ``DOXYGEN_HAVE_DOT``
-    is also set to ``YES``.
-
-  .. variable:: DOXYGEN_GENERATE_LATEX
-
-    Set to ``NO`` by this module.
-
-  .. variable:: DOXYGEN_WARN_FORMAT
-
-    For Visual Studio based generators, this is set to the form recognized by
-    the Visual Studio IDE: ``$file($line) : $text``. For all other generators,
-    Doxygen's default value is not overridden.
-
-  .. variable:: DOXYGEN_PROJECT_NAME
-
-    Populated with the name of the current project (i.e.
-    :variable:`PROJECT_NAME`).
-
-  .. variable:: DOXYGEN_PROJECT_NUMBER
-
-    Populated with the version of the current project (i.e.
-    :variable:`PROJECT_VERSION`).
-
-  .. variable:: DOXYGEN_PROJECT_BRIEF
-
-    Populated with the description of the current project (i.e.
-    :variable:`PROJECT_DESCRIPTION`).
-
-  .. variable:: DOXYGEN_INPUT
-
-    Projects should not set this variable. It will be populated with the set of
-    files and directories passed to ``doxygen_add_docs()``, thereby providing
-    consistent behavior with the other built-in commands like
-    :command:`add_executable`, :command:`add_library` and
-    :command:`add_custom_target`. If a variable named ``DOXYGEN_INPUT`` is set
-    by the project, it will be ignored and a warning will be issued.
-
-  .. variable:: DOXYGEN_RECURSIVE
-
-    Set to ``YES`` by this module.
-
-  .. variable:: DOXYGEN_EXCLUDE_PATTERNS
-
-    If the set of inputs includes directories, this variable will specify
-    patterns used to exclude files from them. The following patterns are added
-    by ``doxygen_add_docs()`` to ensure CMake-specific files and directories
-    are not included in the input. If the project sets
-    ``DOXYGEN_EXCLUDE_PATTERNS``, those contents are merged with these
-    additional patterns rather than replacing them:
-
-    ::
-
-      */.git/*
-      */.svn/*
-      */.hg/*
-      */CMakeFiles/*
-      */_CPack_Packages/*
-      DartConfiguration.tcl
-      CMakeLists.txt
-      CMakeCache.txt
-
-  .. variable:: DOXYGEN_OUTPUT_DIRECTORY
-
-    Set to :variable:`CMAKE_CURRENT_BINARY_DIR` by this module. Note that if
-    the project provides its own value for this and it is a relative path, it
-    will be converted to an absolute path relative to the current binary
-    directory. This is necessary because doxygen will normally be run from a
-    directory within the source tree so that relative source paths work as
-    expected. If this directory does not exist, it will be recursively created
-    prior to executing the doxygen commands.
-
-To change any of these defaults or override any other Doxygen config option,
-set relevant variables before calling ``doxygen_add_docs()``. For example:
-
-  .. code-block:: cmake
-
-    set(DOXYGEN_GENERATE_HTML NO)
-    set(DOXYGEN_GENERATE_MAN YES)
-
-    doxygen_add_docs(
-        doxygen
-        ${PROJECT_SOURCE_DIR}
-        COMMENT "Generate man pages"
-    )
-
-A number of Doxygen config options accept lists of values, but Doxygen requires
-them to be separated by whitespace. CMake variables hold lists as a string with
-items separated by semi-colons, so a conversion needs to be performed. The
-``doxygen_add_docs()`` command specifically checks the following Doxygen config
-options and will convert their associated CMake variable's contents into the
-required form if set.
-
-::
-
-  ABBREVIATE_BRIEF
-  ALIASES
-  CITE_BIB_FILES
-  DIAFILE_DIRS
-  DOTFILE_DIRS
-  DOT_FONTPATH
-  ENABLED_SECTIONS
-  EXAMPLE_PATH
-  EXAMPLE_PATTERNS
-  EXCLUDE
-  EXCLUDE_PATTERNS
-  EXCLUDE_SYMBOLS
-  EXPAND_AS_DEFINED
-  EXTENSION_MAPPING
-  EXTRA_PACKAGES
-  EXTRA_SEARCH_MAPPINGS
-  FILE_PATTERNS
-  FILTER_PATTERNS
-  FILTER_SOURCE_PATTERNS
-  HTML_EXTRA_FILES
-  HTML_EXTRA_STYLESHEET
-  IGNORE_PREFIX
-  IMAGE_PATH
-  INCLUDE_FILE_PATTERNS
-  INCLUDE_PATH
-  INPUT
-  LATEX_EXTRA_FILES
-  LATEX_EXTRA_STYLESHEET
-  MATHJAX_EXTENSIONS
-  MSCFILE_DIRS
-  PLANTUML_INCLUDE_PATH
-  PREDEFINED
-  QHP_CUST_FILTER_ATTRS
-  QHP_SECT_FILTER_ATTRS
-  STRIP_FROM_INC_PATH
-  STRIP_FROM_PATH
-  TAGFILES
-  TCL_SUBST
-
-The following single value Doxygen options will be quoted automatically
-if they contain at least one space:
-
-::
-
-  CHM_FILE
-  DIA_PATH
-  DOCBOOK_OUTPUT
-  DOCSET_FEEDNAME
-  DOCSET_PUBLISHER_NAME
-  DOT_FONTNAME
-  DOT_PATH
-  EXTERNAL_SEARCH_ID
-  FILE_VERSION_FILTER
-  GENERATE_TAGFILE
-  HHC_LOCATION
-  HTML_FOOTER
-  HTML_HEADER
-  HTML_OUTPUT
-  HTML_STYLESHEET
-  INPUT_FILTER
-  LATEX_FOOTER
-  LATEX_HEADER
-  LATEX_OUTPUT
-  LAYOUT_FILE
-  MAN_OUTPUT
-  MAN_SUBDIR
-  MATHJAX_CODEFILE
-  MSCGEN_PATH
-  OUTPUT_DIRECTORY
-  PERL_PATH
-  PLANTUML_JAR_PATH
-  PROJECT_BRIEF
-  PROJECT_LOGO
-  PROJECT_NAME
-  QCH_FILE
-  QHG_LOCATION
-  QHP_CUST_FILTER_NAME
-  QHP_VIRTUAL_FOLDER
-  RTF_EXTENSIONS_FILE
-  RTF_OUTPUT
-  RTF_STYLESHEET_FILE
-  SEARCHDATA_FILE
-  USE_MDFILE_AS_MAINPAGE
-  WARN_FORMAT
-  WARN_LOGFILE
-  XML_OUTPUT
-
-There are situations where it may be undesirable for a particular config option
-to be automatically quoted by ``doxygen_add_docs()``, such as ``ALIASES`` which
-may need to include its own embedded quoting.  The ``DOXYGEN_VERBATIM_VARS``
-variable can be used to specify a list of Doxygen variables (including the
-leading ``DOXYGEN_`` prefix) which should not be quoted.  The project is then
-responsible for ensuring that those variables' values make sense when placed
-directly in the Doxygen input file.  In the case of list variables, list items
-are still separated by spaces, it is only the automatic quoting that is
-skipped.  For example, the following allows ``doxygen_add_docs()`` to apply
-quoting to ``DOXYGEN_PROJECT_BRIEF``, but not each item in the
-``DOXYGEN_ALIASES`` list (:ref:`bracket syntax <Bracket Argument>` can also
-be used to make working with embedded quotes easier):
-
-.. code-block:: cmake
-
-  set(DOXYGEN_PROJECT_BRIEF "String with spaces")
-  set(DOXYGEN_ALIASES
-      [[somealias="@some_command param"]]
-      "anotherAlias=@foobar"
-  )
-  set(DOXYGEN_VERBATIM_VARS DOXYGEN_ALIASES)
-
-The resultant ``Doxyfile`` will contain the following lines:
-
-.. code-block:: text
-
-  PROJECT_BRIEF = "String with spaces"
-  ALIASES       = somealias="@some_command param" anotherAlias=@foobar
-
-
-Deprecated Result Variables
-^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-For compatibility with previous versions of CMake, the following variables
-are also defined but they are deprecated and should no longer be used:
-
-.. variable:: DOXYGEN_EXECUTABLE
-
-  The path to the ``doxygen`` command. If projects need to refer to the
-  ``doxygen`` executable directly, they should use the ``Doxygen::doxygen``
-  import target instead.
-
-.. variable:: DOXYGEN_DOT_FOUND
-
-  True if the ``dot`` executable was found.
-
-.. variable:: DOXYGEN_DOT_EXECUTABLE
-
-  The path to the ``dot`` command. If projects need to refer to the ``dot``
-  executable directly, they should use the ``Doxygen::dot`` import target
-  instead.
-
-.. variable:: DOXYGEN_DOT_PATH
-
-  The path to the directory containing the ``dot`` executable as reported in
-  ``DOXYGEN_DOT_EXECUTABLE``. The path may have forward slashes even on Windows
-  and is not suitable for direct substitution into a ``Doxyfile.in`` template.
-  If you need this value, get the :prop_tgt:`IMPORTED_LOCATION` property of the
-  ``Doxygen::dot`` target and use :command:`get_filename_component` to extract
-  the directory part of that path. You may also want to consider using
-  :command:`file(TO_NATIVE_PATH)` to prepare the path for a Doxygen
-  configuration file.
-
-
-Deprecated Hint Variables
-^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. variable:: DOXYGEN_SKIP_DOT
-
-  This variable has no effect for the component form of ``find_package``.
-  In backward compatibility mode (i.e. without components list) it prevents
-  the finder module from searching for Graphviz's ``dot`` utility.
-
-#]=======================================================================]
-
-cmake_policy(PUSH)
-cmake_policy(SET CMP0057 NEW) # if IN_LIST
-
-# For backwards compatibility support
-if(Doxygen_FIND_QUIETLY)
-    set(DOXYGEN_FIND_QUIETLY TRUE)
-endif()
-
-# ===== Rationale for OS X AppBundle mods below =====
-#  With the OS X GUI version, Doxygen likes to be installed to /Applications
-#  and it contains the doxygen executable in the bundle. In the versions I've
-#  seen, it is located in Resources, but in general, more often binaries are
-#  located in MacOS.
-#
-#  NOTE: The official Doxygen.app distributed for OS X uses non-standard
-#  conventions. Instead of the command-line "doxygen" tool being placed in
-#  Doxygen.app/Contents/MacOS, "Doxywizard" is placed there instead and
-#  "doxygen" is placed in Contents/Resources.  This is most likely done
-#  so that something happens when people double-click on the Doxygen.app
-#  package. Unfortunately, CMake gets confused by this as when it sees the
-#  bundle it uses "Doxywizard" as the executable to use instead of
-#  "doxygen". Therefore to work-around this issue we temporarily disable
-#  the app-bundle feature, just for this CMake module:
-#
-if(APPLE)
-    # Save the old setting
-    set(TEMP_DOXYGEN_SAVE_CMAKE_FIND_APPBUNDLE ${CMAKE_FIND_APPBUNDLE})
-    # Disable the App-bundle detection feature
-    set(CMAKE_FIND_APPBUNDLE "NEVER")
-endif()
-# FYI:
-# In older versions of OS X Doxygen, dot was included with the Doxygen bundle,
-# but newer versions require you to download Graphviz.app which contains "dot"
-# or use something like homebrew.
-# ============== End OSX stuff ================
-
-#
-# Find Doxygen...
-#
-macro(_Doxygen_find_doxygen)
-    find_program(
-        DOXYGEN_EXECUTABLE
-        NAMES doxygen
-        PATHS
-            "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\doxygen_is1;Inno Setup: App Path]/bin"
-            /Applications/Doxygen.app/Contents/Resources
-            /Applications/Doxygen.app/Contents/MacOS
-            /Applications/Utilities/Doxygen.app/Contents/Resources
-            /Applications/Utilities/Doxygen.app/Contents/MacOS
-        DOC "Doxygen documentation generation tool (http://www.doxygen.org)"
-    )
-    mark_as_advanced(DOXYGEN_EXECUTABLE)
-
-    if(DOXYGEN_EXECUTABLE)
-        execute_process(
-            COMMAND "${DOXYGEN_EXECUTABLE}" --version
-            OUTPUT_VARIABLE DOXYGEN_VERSION
-            OUTPUT_STRIP_TRAILING_WHITESPACE
-            RESULT_VARIABLE _Doxygen_version_result
-        )
-        if(_Doxygen_version_result)
-            message(WARNING "Unable to determine doxygen version: ${_Doxygen_version_result}")
-        endif()
-
-        # Create an imported target for Doxygen
-        if(NOT TARGET Doxygen::doxygen)
-            add_executable(Doxygen::doxygen IMPORTED GLOBAL)
-            set_target_properties(Doxygen::doxygen PROPERTIES
-                IMPORTED_LOCATION "${DOXYGEN_EXECUTABLE}"
-            )
-        endif()
-    endif()
-endmacro()
-
-#
-# Find Diagram Editor...
-#
-macro(_Doxygen_find_dia)
-    set(_x86 "(x86)")
-    find_program(
-        DOXYGEN_DIA_EXECUTABLE
-        NAMES dia
-        PATHS
-            "$ENV{ProgramFiles}/Dia"
-            "$ENV{ProgramFiles${_x86}}/Dia"
-        DOC "Diagram Editor tool for use with Doxygen"
-    )
-    mark_as_advanced(DOXYGEN_DIA_EXECUTABLE)
-
-    if(DOXYGEN_DIA_EXECUTABLE)
-        # The Doxyfile wants the path to the utility, not the entire path
-        # including file name
-        get_filename_component(DOXYGEN_DIA_PATH
-                              "${DOXYGEN_DIA_EXECUTABLE}"
-                              DIRECTORY)
-        if(WIN32)
-            file(TO_NATIVE_PATH "${DOXYGEN_DIA_PATH}" DOXYGEN_DIA_PATH)
-        endif()
-
-        # Create an imported target for component
-        if(NOT TARGET Doxygen::dia)
-            add_executable(Doxygen::dia IMPORTED GLOBAL)
-            set_target_properties(Doxygen::dia PROPERTIES
-                IMPORTED_LOCATION "${DOXYGEN_DIA_EXECUTABLE}"
-            )
-        endif()
-    endif()
-
-    unset(_x86)
-endmacro()
-
-#
-# Find Graphviz Dot...
-#
-macro(_Doxygen_find_dot)
-    if(WIN32)
-        set(_x86 "(x86)")
-        file(
-            GLOB _Doxygen_GRAPHVIZ_BIN_DIRS
-            "$ENV{ProgramFiles}/Graphviz*/bin"
-            "$ENV{ProgramFiles${_x86}}/Graphviz*/bin"
-        )
-        unset(_x86)
-    else()
-        set(_Doxygen_GRAPHVIZ_BIN_DIRS "")
-    endif()
-
-    find_program(
-        DOXYGEN_DOT_EXECUTABLE
-        NAMES dot
-        PATHS
-            ${_Doxygen_GRAPHVIZ_BIN_DIRS}
-            "$ENV{ProgramFiles}/ATT/Graphviz/bin"
-            "C:/Program Files/ATT/Graphviz/bin"
-            [HKEY_LOCAL_MACHINE\\SOFTWARE\\ATT\\Graphviz;InstallPath]/bin
-            /Applications/Graphviz.app/Contents/MacOS
-            /Applications/Utilities/Graphviz.app/Contents/MacOS
-            /Applications/Doxygen.app/Contents/Resources
-            /Applications/Doxygen.app/Contents/MacOS
-            /Applications/Utilities/Doxygen.app/Contents/Resources
-            /Applications/Utilities/Doxygen.app/Contents/MacOS
-        DOC "Dot tool for use with Doxygen"
-    )
-    mark_as_advanced(DOXYGEN_DOT_EXECUTABLE)
-
-    if(DOXYGEN_DOT_EXECUTABLE)
-        # The Doxyfile wants the path to the utility, not the entire path
-        # including file name
-        get_filename_component(DOXYGEN_DOT_PATH
-                               "${DOXYGEN_DOT_EXECUTABLE}"
-                               DIRECTORY)
-        if(WIN32)
-            file(TO_NATIVE_PATH "${DOXYGEN_DOT_PATH}" DOXYGEN_DOT_PATH)
-        endif()
-
-        # Create an imported target for component
-        if(NOT TARGET Doxygen::dot)
-            add_executable(Doxygen::dot IMPORTED GLOBAL)
-            set_target_properties(Doxygen::dot PROPERTIES
-                IMPORTED_LOCATION "${DOXYGEN_DOT_EXECUTABLE}"
-            )
-        endif()
-    endif()
-
-    unset(_Doxygen_GRAPHVIZ_BIN_DIRS)
-endmacro()
-
-#
-# Find Message Sequence Chart...
-#
-macro(_Doxygen_find_mscgen)
-    set(_x86 "(x86)")
-    find_program(
-        DOXYGEN_MSCGEN_EXECUTABLE
-        NAMES mscgen
-        PATHS
-            "$ENV{ProgramFiles}/Mscgen"
-            "$ENV{ProgramFiles${_x86}}/Mscgen"
-        DOC "Message sequence chart tool for use with Doxygen"
-    )
-    mark_as_advanced(DOXYGEN_MSCGEN_EXECUTABLE)
-
-    if(DOXYGEN_MSCGEN_EXECUTABLE)
-        # The Doxyfile wants the path to the utility, not the entire path
-        # including file name
-        get_filename_component(DOXYGEN_MSCGEN_PATH
-                               "${DOXYGEN_MSCGEN_EXECUTABLE}"
-                               DIRECTORY)
-        if(WIN32)
-            file(TO_NATIVE_PATH "${DOXYGEN_MSCGEN_PATH}" DOXYGEN_MSCGEN_PATH)
-        endif()
-
-        # Create an imported target for component
-        if(NOT TARGET Doxygen::mscgen)
-            add_executable(Doxygen::mscgen IMPORTED GLOBAL)
-            set_target_properties(Doxygen::mscgen PROPERTIES
-                IMPORTED_LOCATION "${DOXYGEN_MSCGEN_EXECUTABLE}"
-            )
-        endif()
-    endif()
-
-    unset(_x86)
-endmacro()
-
-# Make sure `doxygen` is one of the components to find
-set(_Doxygen_keep_backward_compat FALSE)
-if(NOT Doxygen_FIND_COMPONENTS)
-    # Search at least for `doxygen` executable
-    set(Doxygen_FIND_COMPONENTS doxygen)
-    # Preserve backward compatibility:
-    # search for `dot` also if `DOXYGEN_SKIP_DOT` is not explicitly disable this.
-    if(NOT DOXYGEN_SKIP_DOT)
-        list(APPEND Doxygen_FIND_COMPONENTS dot)
-    endif()
-    set(_Doxygen_keep_backward_compat TRUE)
-elseif(NOT doxygen IN_LIST Doxygen_FIND_COMPONENTS)
-    list(INSERT Doxygen_FIND_COMPONENTS 0 doxygen)
-endif()
-
-#
-# Find all requested components of Doxygen...
-#
-foreach(_comp IN LISTS Doxygen_FIND_COMPONENTS)
-    if(_comp STREQUAL "doxygen")
-        _Doxygen_find_doxygen()
-    elseif(_comp STREQUAL "dia")
-        _Doxygen_find_dia()
-    elseif(_comp STREQUAL "dot")
-        _Doxygen_find_dot()
-    elseif(_comp STREQUAL "mscgen")
-        _Doxygen_find_mscgen()
-    else()
-        message(WARNING "${_comp} is not a valid Doxygen component")
-        set(Doxygen_${_comp}_FOUND FALSE)
-        continue()
-    endif()
-
-    if(TARGET Doxygen::${_comp})
-        set(Doxygen_${_comp}_FOUND TRUE)
-    else()
-        set(Doxygen_${_comp}_FOUND FALSE)
-    endif()
-endforeach()
-unset(_comp)
-
-# Verify find results
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-find_package_handle_standard_args(
-    Doxygen
-    REQUIRED_VARS DOXYGEN_EXECUTABLE
-    VERSION_VAR DOXYGEN_VERSION
-    HANDLE_COMPONENTS
-)
-
-#
-# Backwards compatibility...
-#
-if(APPLE)
-    # Restore the old app-bundle setting
-    set(CMAKE_FIND_APPBUNDLE ${TEMP_DOXYGEN_SAVE_CMAKE_FIND_APPBUNDLE})
-endif()
-
-# Maintain the _FOUND variables as "YES" or "NO" for backwards
-# compatibility. This allows people to substitute them directly into
-# Doxyfile with configure_file().
-if(DOXYGEN_FOUND)
-    set(DOXYGEN_FOUND "YES")
-else()
-    set(DOXYGEN_FOUND "NO")
-endif()
-if(_Doxygen_keep_backward_compat)
-    if(Doxygen_dot_FOUND)
-        set(DOXYGEN_DOT_FOUND "YES")
-    else()
-        set(DOXYGEN_DOT_FOUND "NO")
-    endif()
-
-    # For backwards compatibility support for even older CMake versions
-    set(DOXYGEN ${DOXYGEN_EXECUTABLE})
-    set(DOT ${DOXYGEN_DOT_EXECUTABLE})
-
-    # No need to keep any backward compatibility for `DOXYGEN_MSCGEN_XXX`
-    # and `DOXYGEN_DIA_XXX` since they were not supported before component
-    # support was added
-endif()
-unset(_Doxygen_keep_backward_compat)
-
-#
-# Allow full control of Doxygen from CMakeLists.txt
-#
-
-# Prepare a template Doxyfile and Doxygen's default values CMake file
-if(TARGET Doxygen::doxygen)
-    # If doxygen was found, use it to generate a minimal default Doxyfile.
-    # We will delete this file after we have finished using it below to
-    # generate the other files that doxygen_add_docs() will use.
-    set(_Doxygen_tpl "${CMAKE_BINARY_DIR}/CMakeDoxyfile.tpl")
-    execute_process(
-        COMMAND "${DOXYGEN_EXECUTABLE}" -s -g "${_Doxygen_tpl}"
-        OUTPUT_QUIET
-        RESULT_VARIABLE _Doxygen_tpl_result
-    )
-    if(_Doxygen_tpl_result)
-        message(FATAL_ERROR
-                "Unable to generate Doxyfile template: ${_Doxygen_tpl_result}")
-    elseif(NOT EXISTS "${_Doxygen_tpl}")
-        message(FATAL_ERROR
-                "Doxygen has failed to generate a Doxyfile template")
-    endif()
-
-    # Write a do-not-edit header to files we are going to generate...
-    set(_Doxygen_dne_header
-[[
-#
-# DO NOT EDIT! THIS FILE WAS GENERATED BY CMAKE!
-#
-
-]]
-    )
-    # We only need one copy of these across the whole build, since their
-    # content is only dependent on the version of Doxygen being used. Therefore
-    # we always put them at the top of the build tree so that they are in a
-    # predictable location.
-    set(_doxyfile_in       "${CMAKE_BINARY_DIR}/CMakeDoxyfile.in")
-    set(_doxyfile_defaults "${CMAKE_BINARY_DIR}/CMakeDoxygenDefaults.cmake")
-
-    file(WRITE "${_doxyfile_in}"       ${_Doxygen_dne_header})
-    file(WRITE "${_doxyfile_defaults}" ${_Doxygen_dne_header})
-
-    # Get strings containing a configuration key from the template Doxyfile
-    # we obtained from this version of Doxygen. Because some options are split
-    # across multiple lines by ending lines with backslashes, we cannot just
-    # use file(STRINGS...) with a REGEX. Instead, read lines without a REGEX
-    # so that file(STRINGS...) handles the trailing backslash as a line
-    # continuation. It stores multi-lines as lists, so we then have to replace
-    # the ";" list separator with backslashed newlines again so that we get the
-    # original content stored back as the value part.
-    file(STRINGS "${_Doxygen_tpl}" _file_lines)
-    unset(_Doxygen_tpl_params)
-    foreach(_line IN LISTS _file_lines)
-        if(_line MATCHES "([A-Z][A-Z0-9_]+)( *=)(.*)")
-            set(_key "${CMAKE_MATCH_1}")
-            set(_eql "${CMAKE_MATCH_2}")
-            set(_value "${CMAKE_MATCH_3}")
-            string(REPLACE "\\" "\\\\" _value "${_value}")
-            string(REPLACE ";" "\\\n" _value "${_value}")
-            list(APPEND _Doxygen_tpl_params "${_key}${_eql}${_value}")
-        endif()
-    endforeach()
-
-    # Build up a Doxyfile that provides @configVar@ substitutions for each
-    # Doxygen config option as well as a separate CMake script which provides
-    # the default value for each of those options if the project doesn't supply
-    # them. Each config option will support substitution of a CMake variable
-    # of the same name except with DOXYGEN_ prepended.
-    foreach(_Doxygen_param IN LISTS _Doxygen_tpl_params)
-        if(_Doxygen_param MATCHES "([A-Z][A-Z0-9_]+)( *)=( (.*))?")
-            # Ok, this is a config key with a value
-            if(CMAKE_MATCH_COUNT EQUAL 4)
-                file(APPEND "${_doxyfile_in}"
-                    "${CMAKE_MATCH_1}${CMAKE_MATCH_2}= @DOXYGEN_${CMAKE_MATCH_1}@\n")
-                # Remove the backslashes we had to preserve to handle newlines
-                string(REPLACE "\\\n" "\n" _value "${CMAKE_MATCH_4}")
-                file(APPEND "${_doxyfile_defaults}"
-"if(NOT DEFINED DOXYGEN_${CMAKE_MATCH_1})
-    set(DOXYGEN_${CMAKE_MATCH_1} ${_value})
-endif()
-")
-            # Ok, this is a config key with empty default value
-            elseif(CMAKE_MATCH_COUNT EQUAL 2)
-                file(APPEND "${_doxyfile_in}"
-                    "${CMAKE_MATCH_1}${CMAKE_MATCH_2}= @DOXYGEN_${CMAKE_MATCH_1}@\n")
-            else()
-                message(AUTHOR_WARNING
-"Unexpected line format! Code review required!\nFault line: ${_Doxygen_param}")
-            endif()
-        else()
-            message(AUTHOR_WARNING
-"Unexpected line format! Code review required!\nFault line: ${_Doxygen_param}")
-        endif()
-    endforeach()
-
-    # Ok, dumped defaults are not needed anymore...
-    file(REMOVE "${_Doxygen_tpl}")
-
-    unset(_Doxygen_param)
-    unset(_Doxygen_tpl_params)
-    unset(_Doxygen_dne_header)
-    unset(_Doxygen_tpl)
-
-endif()
-
-function(doxygen_quote_value VARIABLE)
-    # Quote a value of the given variable if:
-    # - VARIABLE parameter was really given
-    # - the variable it names is defined and is not present in the list
-    #   specified by DOXYGEN_VERBATIM_VARS (if set)
-    # - the value of the named variable isn't already quoted
-    # - the value has spaces
-    if(VARIABLE AND DEFINED ${VARIABLE} AND
-       NOT ${VARIABLE} MATCHES "^\".* .*\"$" AND ${VARIABLE} MATCHES " " AND
-       NOT (DEFINED DOXYGEN_VERBATIM_VARS AND
-            "${VARIABLE}" IN_LIST DOXYGEN_VERBATIM_VARS))
-        set(${VARIABLE} "\"${${VARIABLE}}\"" PARENT_SCOPE)
-    endif()
-endfunction()
-
-function(doxygen_list_to_quoted_strings LIST_VARIABLE)
-    if(LIST_VARIABLE AND DEFINED ${LIST_VARIABLE})
-        unset(_inputs)
-        unset(_sep)
-        unset(_verbatim)
-        # Have to test if list items should be treated as verbatim here
-        # because we lose the variable name when we pass just one list item
-        # to doxygen_quote_value() below
-        if(DEFINED DOXYGEN_VERBATIM_VARS AND
-           "${LIST_VARIABLE}" IN_LIST DOXYGEN_VERBATIM_VARS)
-            set(_verbatim True)
-        endif()
-        foreach(_in IN LISTS ${LIST_VARIABLE})
-            if(NOT _verbatim)
-                doxygen_quote_value(_in)
-            endif()
-            string(APPEND _inputs "${_sep}${_in}")
-            set(_sep " ")
-        endforeach()
-        set(${LIST_VARIABLE} "${_inputs}" PARENT_SCOPE)
-    endif()
-endfunction()
-
-function(doxygen_add_docs targetName)
-    set(_options ALL USE_STAMP_FILE)
-    set(_one_value_args WORKING_DIRECTORY COMMENT)
-    set(_multi_value_args)
-    cmake_parse_arguments(_args
-                          "${_options}"
-                          "${_one_value_args}"
-                          "${_multi_value_args}"
-                          ${ARGN})
-
-    if(NOT _args_COMMENT)
-        set(_args_COMMENT "Generate API documentation for ${targetName}")
-    endif()
-
-    if(NOT _args_WORKING_DIRECTORY)
-        set(_args_WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
-    endif()
-
-    if(DEFINED DOXYGEN_INPUT)
-        message(WARNING
-"DOXYGEN_INPUT is set but it will be ignored. Pass the files and directories \
-directly to the doxygen_add_docs() command instead.")
-    endif()
-    set(DOXYGEN_INPUT ${_args_UNPARSED_ARGUMENTS})
-
-    if(NOT TARGET Doxygen::doxygen)
-        message(FATAL_ERROR "Doxygen was not found, needed by \
-doxygen_add_docs() for target ${targetName}")
-    endif()
-
-    # If not already defined, set some relevant defaults based on the
-    # assumption that the documentation is for the whole project. Details
-    # specified in the project() command will be used to populate a number of
-    # these defaults.
-
-    if(NOT DEFINED DOXYGEN_PROJECT_NAME)
-        # The PROJECT_NAME tag is a single word (or a sequence of words
-        # surrounded by double-quotes, unless you are using Doxywizard) that
-        # should identify the project for which the documentation is generated.
-        # This name is used in the title of most generated pages and in a few
-        # other places. The default value is: My Project.
-        set(DOXYGEN_PROJECT_NAME ${PROJECT_NAME})
-    endif()
-
-    if(NOT DEFINED DOXYGEN_PROJECT_NUMBER)
-        # The PROJECT_NUMBER tag can be used to enter a project or revision
-        # number. This could be handy for archiving the generated documentation
-        # or if some version control system is used.
-        set(DOXYGEN_PROJECT_NUMBER ${PROJECT_VERSION})
-    endif()
-
-    if(NOT DEFINED DOXYGEN_PROJECT_BRIEF)
-        # Using the PROJECT_BRIEF tag one can provide an optional one line
-        # description for a project that appears at the top of each page and
-        # should give viewer a quick idea about the purpose of the project.
-        # Keep the description short.
-        set(DOXYGEN_PROJECT_BRIEF "${PROJECT_DESCRIPTION}")
-    endif()
-
-    if(NOT DEFINED DOXYGEN_RECURSIVE)
-        # The RECURSIVE tag can be used to specify whether or not
-        # subdirectories should be searched for input files as well. CMake
-        # projects generally evolve to span multiple directories, so it makes
-        # more sense for this to be on by default. Doxygen's default value
-        # has this setting turned off, so we override it.
-        set(DOXYGEN_RECURSIVE YES)
-    endif()
-
-    if(NOT DEFINED DOXYGEN_OUTPUT_DIRECTORY)
-        # The OUTPUT_DIRECTORY tag is used to specify the (relative or
-        # absolute) path into which the generated documentation will be
-        # written. If a relative path is used, Doxygen will interpret it as
-        # being relative to the location where doxygen was started, but we need
-        # to run Doxygen in the source tree so that relative input paths work
-        # intuitively. Therefore, we ensure that the output directory is always
-        # an absolute path and if the project provided a relative path, we
-        # treat it as relative to the current BINARY directory so that output
-        # is not generated inside the source tree.
-        set(DOXYGEN_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
-    elseif(NOT IS_ABSOLUTE "${DOXYGEN_OUTPUT_DIRECTORY}")
-        get_filename_component(DOXYGEN_OUTPUT_DIRECTORY
-                               "${DOXYGEN_OUTPUT_DIRECTORY}"
-                               ABSOLUTE
-                               BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
-    endif()
-
-    if(NOT DEFINED DOXYGEN_HAVE_DOT)
-        # If you set the HAVE_DOT tag to YES then doxygen will assume the dot
-        # tool is available from the path. This tool is part of Graphviz (see:
-        # http://www.graphviz.org/), a graph visualization toolkit from AT&T
-        # and Lucent Bell Labs. The other options in this section have no
-        # effect if this option is set to NO.
-        # Doxygen's default value is: NO.
-        if(Doxygen_dot_FOUND)
-          set(DOXYGEN_HAVE_DOT "YES")
-        else()
-          set(DOXYGEN_HAVE_DOT "NO")
-        endif()
-    endif()
-
-    if(NOT DEFINED DOXYGEN_DOT_MULTI_TARGETS)
-        # Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate
-        # multiple output files in one run (i.e. multiple -o and -T options on
-        # the command line). This makes dot run faster, but since only newer
-        # versions of dot (>1.8.10) support this, Doxygen disables this feature
-        # by default.
-        # This tag requires that the tag HAVE_DOT is set to YES.
-        set(DOXYGEN_DOT_MULTI_TARGETS YES)
-    endif()
-
-    if(NOT DEFINED DOXYGEN_GENERATE_LATEX)
-        # If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX
-        # output. We only want the HTML output enabled by default, so we turn
-        # this off if the project hasn't specified it.
-        set(DOXYGEN_GENERATE_LATEX NO)
-    endif()
-
-    if(NOT DEFINED DOXYGEN_WARN_FORMAT)
-        if(CMAKE_VS_MSBUILD_COMMAND OR CMAKE_VS_DEVENV_COMMAND)
-            # The WARN_FORMAT tag determines the format of the warning messages
-            # that doxygen can produce. The string should contain the $file,
-            # $line and $text tags, which will be replaced by the file and line
-            # number from which the warning originated and the warning text.
-            # Optionally, the format may contain $version, which will be
-            # replaced by the version of the file (if it could be obtained via
-            # FILE_VERSION_FILTER).
-            # Doxygen's default value is: $file:$line: $text
-            set(DOXYGEN_WARN_FORMAT "$file($line) : $text ")
-        endif()
-    endif()
-
-    if(DEFINED DOXYGEN_WARN_LOGFILE AND NOT IS_ABSOLUTE "${DOXYGEN_WARN_LOGFILE}")
-        # The WARN_LOGFILE tag can be used to specify a file to which warning and error
-        # messages should be written. If left blank the output is written to standard
-        # error (stderr).
-        get_filename_component(DOXYGEN_WARN_LOGFILE
-                               "${DOXYGEN_WARN_LOGFILE}"
-                               ABSOLUTE
-                               BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
-    endif()
-
-    # Any files from the INPUT that match any of the EXCLUDE_PATTERNS will be
-    # excluded from the set of input files. We provide some additional patterns
-    # to prevent commonly unwanted things from CMake builds being pulled in.
-    #
-    # Note that the wildcards are matched against the file with absolute path,
-    # so to exclude all test directories for example use the pattern */test/*
-    list(
-        APPEND
-        DOXYGEN_EXCLUDE_PATTERNS
-        "*/.git/*"
-        "*/.svn/*"
-        "*/.hg/*"
-        "*/CMakeFiles/*"
-        "*/_CPack_Packages/*"
-        "DartConfiguration.tcl"
-        "CMakeLists.txt"
-        "CMakeCache.txt"
-    )
-
-    # Now bring in Doxgen's defaults for those things the project has not
-    # already set and we have not provided above
-    include("${CMAKE_BINARY_DIR}/CMakeDoxygenDefaults.cmake" OPTIONAL)
-
-    # Cleanup built HTMLs on "make clean"
-    # TODO Any other dirs?
-    if(DOXYGEN_GENERATE_HTML)
-        if(IS_ABSOLUTE "${DOXYGEN_HTML_OUTPUT}")
-            set(_args_clean_html_dir "${DOXYGEN_HTML_OUTPUT}")
-        else()
-            set(_args_clean_html_dir
-                "${DOXYGEN_OUTPUT_DIRECTORY}/${DOXYGEN_HTML_OUTPUT}")
-        endif()
-        set_property(DIRECTORY APPEND PROPERTY
-            ADDITIONAL_CLEAN_FILES "${_args_clean_html_dir}")
-    endif()
-
-    # Build up a list of files we can identify from the inputs so we can list
-    # them as DEPENDS and SOURCES in the custom command/target (the latter
-    # makes them display in IDEs). This must be done before we transform the
-    # various DOXYGEN_... variables below because we need to process
-    # DOXYGEN_INPUT as a list first.
-    unset(_sources)
-    foreach(_item IN LISTS DOXYGEN_INPUT)
-        get_filename_component(_abs_item "${_item}" ABSOLUTE
-                               BASE_DIR "${_args_WORKING_DIRECTORY}")
-        get_source_file_property(_isGenerated "${_abs_item}" GENERATED)
-        if(_isGenerated OR
-           (EXISTS "${_abs_item}" AND
-            NOT IS_DIRECTORY "${_abs_item}" AND
-            NOT IS_SYMLINK "${_abs_item}"))
-            list(APPEND _sources "${_abs_item}")
-        elseif(_args_USE_STAMP_FILE)
-            message(FATAL_ERROR "Source does not exist or is not a file:\n"
-                "    ${_abs_item}\n"
-                "Only existing files may be specified when the "
-                "USE_STAMP_FILE option is given.")
-        endif()
-    endforeach()
-
-    # Transform known list type options into space separated strings.
-    set(_doxygen_list_options
-        ABBREVIATE_BRIEF
-        ALIASES
-        CITE_BIB_FILES
-        DIAFILE_DIRS
-        DOTFILE_DIRS
-        DOT_FONTPATH
-        ENABLED_SECTIONS
-        EXAMPLE_PATH
-        EXAMPLE_PATTERNS
-        EXCLUDE
-        EXCLUDE_PATTERNS
-        EXCLUDE_SYMBOLS
-        EXPAND_AS_DEFINED
-        EXTENSION_MAPPING
-        EXTRA_PACKAGES
-        EXTRA_SEARCH_MAPPINGS
-        FILE_PATTERNS
-        FILTER_PATTERNS
-        FILTER_SOURCE_PATTERNS
-        HTML_EXTRA_FILES
-        HTML_EXTRA_STYLESHEET
-        IGNORE_PREFIX
-        IMAGE_PATH
-        INCLUDE_FILE_PATTERNS
-        INCLUDE_PATH
-        INPUT
-        LATEX_EXTRA_FILES
-        LATEX_EXTRA_STYLESHEET
-        MATHJAX_EXTENSIONS
-        MSCFILE_DIRS
-        PLANTUML_INCLUDE_PATH
-        PREDEFINED
-        QHP_CUST_FILTER_ATTRS
-        QHP_SECT_FILTER_ATTRS
-        STRIP_FROM_INC_PATH
-        STRIP_FROM_PATH
-        TAGFILES
-        TCL_SUBST
-    )
-    foreach(_item IN LISTS _doxygen_list_options)
-        doxygen_list_to_quoted_strings(DOXYGEN_${_item})
-    endforeach()
-
-    # Transform known single value variables which may contain spaces, such as
-    # paths or description strings.
-    set(_doxygen_quoted_options
-        CHM_FILE
-        DIA_PATH
-        DOCBOOK_OUTPUT
-        DOCSET_FEEDNAME
-        DOCSET_PUBLISHER_NAME
-        DOT_FONTNAME
-        DOT_PATH
-        EXTERNAL_SEARCH_ID
-        FILE_VERSION_FILTER
-        GENERATE_TAGFILE
-        HHC_LOCATION
-        HTML_FOOTER
-        HTML_HEADER
-        HTML_OUTPUT
-        HTML_STYLESHEET
-        INPUT_FILTER
-        LATEX_FOOTER
-        LATEX_HEADER
-        LATEX_OUTPUT
-        LAYOUT_FILE
-        MAN_OUTPUT
-        MAN_SUBDIR
-        MATHJAX_CODEFILE
-        MSCGEN_PATH
-        OUTPUT_DIRECTORY
-        PERL_PATH
-        PLANTUML_JAR_PATH
-        PROJECT_BRIEF
-        PROJECT_LOGO
-        PROJECT_NAME
-        QCH_FILE
-        QHG_LOCATION
-        QHP_CUST_FILTER_NAME
-        QHP_VIRTUAL_FOLDER
-        RTF_EXTENSIONS_FILE
-        RTF_OUTPUT
-        RTF_STYLESHEET_FILE
-        SEARCHDATA_FILE
-        USE_MDFILE_AS_MAINPAGE
-        WARN_FORMAT
-        WARN_LOGFILE
-        XML_OUTPUT
-    )
-
-    # Store the unmodified value of DOXYGEN_OUTPUT_DIRECTORY prior to invoking
-    # doxygen_quote_value() below. This will mutate the string specifically for
-    # consumption by Doxygen's config file, which we do not want when we use it
-    # later in the custom target's commands.
-    set( _original_doxygen_output_dir ${DOXYGEN_OUTPUT_DIRECTORY} )
-
-    foreach(_item IN LISTS _doxygen_quoted_options)
-        doxygen_quote_value(DOXYGEN_${_item})
-    endforeach()
-
-    # Prepare doxygen configuration file
-    set(_doxyfile_template "${CMAKE_BINARY_DIR}/CMakeDoxyfile.in")
-    set(_target_doxyfile "${CMAKE_CURRENT_BINARY_DIR}/Doxyfile.${targetName}")
-    configure_file("${_doxyfile_template}" "${_target_doxyfile}")
-
-    unset(_all)
-    if(${_args_ALL})
-        set(_all ALL)
-    endif()
-
-    # Only create the stamp file if asked to. If we don't create it,
-    # the target will always be considered out-of-date.
-    if(_args_USE_STAMP_FILE)
-        set(__stamp_file "${CMAKE_CURRENT_BINARY_DIR}/${targetName}.stamp")
-        add_custom_command(
-            VERBATIM
-            OUTPUT ${__stamp_file}
-            COMMAND ${CMAKE_COMMAND} -E make_directory ${_original_doxygen_output_dir}
-            COMMAND "${DOXYGEN_EXECUTABLE}" "${_target_doxyfile}"
-            COMMAND ${CMAKE_COMMAND} -E touch ${__stamp_file}
-            WORKING_DIRECTORY "${_args_WORKING_DIRECTORY}"
-            DEPENDS "${_target_doxyfile}" ${_sources}
-            COMMENT "${_args_COMMENT}"
-        )
-        add_custom_target(${targetName} ${_all}
-            DEPENDS ${__stamp_file}
-            SOURCES ${_sources}
-        )
-        unset(__stamp_file)
-    else()
-        add_custom_target( ${targetName} ${_all} VERBATIM
-            COMMAND ${CMAKE_COMMAND} -E make_directory ${_original_doxygen_output_dir}
-            COMMAND "${DOXYGEN_EXECUTABLE}" "${_target_doxyfile}"
-            WORKING_DIRECTORY "${_args_WORKING_DIRECTORY}"
-            DEPENDS "${_target_doxyfile}" ${_sources}
-            COMMENT "${_args_COMMENT}"
-            SOURCES ${_sources}
-        )
-    endif()
-
-endfunction()
-
-cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/FindEXPAT.cmake b/share/cmake-3.18/Modules/FindEXPAT.cmake
deleted file mode 100644
index 15b419a..0000000
--- a/share/cmake-3.18/Modules/FindEXPAT.cmake
+++ /dev/null
@@ -1,81 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindEXPAT
----------
-
-Find the native Expat headers and library.
-Expat is a stream-oriented XML parser library written in C.
-
-Imported Targets
-^^^^^^^^^^^^^^^^
-
-This module defines the following :prop_tgt:`IMPORTED` targets:
-
-``EXPAT::EXPAT``
-  The Expat ``expat`` library, if found.
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-This module will set the following variables in your project:
-
-``EXPAT_INCLUDE_DIRS``
-  where to find expat.h, etc.
-``EXPAT_LIBRARIES``
-  the libraries to link against to use Expat.
-``EXPAT_FOUND``
-  true if the Expat headers and libraries were found.
-
-#]=======================================================================]
-
-find_package(PkgConfig QUIET)
-
-pkg_check_modules(PC_EXPAT QUIET expat)
-
-# Look for the header file.
-find_path(EXPAT_INCLUDE_DIR NAMES expat.h HINTS ${PC_EXPAT_INCLUDE_DIRS})
-
-# Look for the library.
-find_library(EXPAT_LIBRARY NAMES expat libexpat HINTS ${PC_EXPAT_LIBRARY_DIRS})
-
-if (EXPAT_INCLUDE_DIR AND EXISTS "${EXPAT_INCLUDE_DIR}/expat.h")
-    file(STRINGS "${EXPAT_INCLUDE_DIR}/expat.h" expat_version_str
-         REGEX "^#[\t ]*define[\t ]+XML_(MAJOR|MINOR|MICRO)_VERSION[\t ]+[0-9]+$")
-
-    unset(EXPAT_VERSION_STRING)
-    foreach(VPART MAJOR MINOR MICRO)
-        foreach(VLINE ${expat_version_str})
-            if(VLINE MATCHES "^#[\t ]*define[\t ]+XML_${VPART}_VERSION[\t ]+([0-9]+)$")
-                set(EXPAT_VERSION_PART "${CMAKE_MATCH_1}")
-                if(EXPAT_VERSION_STRING)
-                    string(APPEND EXPAT_VERSION_STRING ".${EXPAT_VERSION_PART}")
-                else()
-                    set(EXPAT_VERSION_STRING "${EXPAT_VERSION_PART}")
-                endif()
-            endif()
-        endforeach()
-    endforeach()
-endif ()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(EXPAT
-                                  REQUIRED_VARS EXPAT_LIBRARY EXPAT_INCLUDE_DIR
-                                  VERSION_VAR EXPAT_VERSION_STRING)
-
-# Copy the results to the output variables and target.
-if(EXPAT_FOUND)
-  set(EXPAT_LIBRARIES ${EXPAT_LIBRARY})
-  set(EXPAT_INCLUDE_DIRS ${EXPAT_INCLUDE_DIR})
-
-  if(NOT TARGET EXPAT::EXPAT)
-    add_library(EXPAT::EXPAT UNKNOWN IMPORTED)
-    set_target_properties(EXPAT::EXPAT PROPERTIES
-      IMPORTED_LINK_INTERFACE_LANGUAGES "C"
-      IMPORTED_LOCATION "${EXPAT_LIBRARY}"
-      INTERFACE_INCLUDE_DIRECTORIES "${EXPAT_INCLUDE_DIRS}")
-  endif()
-endif()
-
-mark_as_advanced(EXPAT_INCLUDE_DIR EXPAT_LIBRARY)
diff --git a/share/cmake-3.18/Modules/FindEnvModules.cmake b/share/cmake-3.18/Modules/FindEnvModules.cmake
deleted file mode 100644
index 4dd5116..0000000
--- a/share/cmake-3.18/Modules/FindEnvModules.cmake
+++ /dev/null
@@ -1,333 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindEnvModules
---------------
-
-Locate an environment module implementation and make commands available to
-CMake scripts to use them.  This is compatible with both Lua-based Lmod
-and TCL-based EnvironmentModules.
-
-This module is intended for the use case of setting up the compiler and library
-environment within a :ref:`CTest Script <CTest Script>` (``ctest -S``).  It can
-also be used in a :ref:`CMake Script <Script Processing Mode>` (``cmake -P``).
-
-.. note::
-
-  The loaded environment will not survive past the end of the calling process.
-  Do not use this module in project code (``CMakeLists.txt`` files) to load
-  a compiler environment; it will not be available during the build.  Instead
-  load the environment manually before running CMake or using the generated
-  build system.
-
-Example Usage
-^^^^^^^^^^^^^
-
-.. code-block:: cmake
-
-  set(CTEST_BUILD_NAME "CrayLinux-CrayPE-Cray-dynamic")
-  set(CTEST_BUILD_CONFIGURATION Release)
-  set(CTEST_BUILD_FLAGS "-k -j8")
-  set(CTEST_CMAKE_GENERATOR "Unix Makefiles")
-
-  ...
-
-  find_package(EnvModules REQUIRED)
-
-  env_module(purge)
-  env_module(load modules)
-  env_module(load craype)
-  env_module(load PrgEnv-cray)
-  env_module(load craype-knl)
-  env_module(load cray-mpich)
-  env_module(load cray-libsci)
-
-  set(ENV{CRAYPE_LINK_TYPE} dynamic)
-
-  ...
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-This module will set the following variables in your project:
-
-``EnvModules_FOUND``
-  True if a compatible environment modules framework was found.
-
-Cache Variables
-^^^^^^^^^^^^^^^
-
-The following cache variable will be set:
-
-``EnvModules_COMMAND``
-  The low level module command to use.  Currently supported
-  implementations are the Lua based Lmod and TCL based EnvironmentModules.
-
-Environment Variables
-^^^^^^^^^^^^^^^^^^^^^
-
-``ENV{MODULESHOME}``
-  Usually set by the module environment implementation, used as a hint to
-  locate the module command to execute.
-
-Provided Functions
-^^^^^^^^^^^^^^^^^^
-
-This defines the following CMake functions for interacting with environment
-modules:
-
-.. command:: env_module
-
-  Execute an aribitrary module command:
-
-  .. code-block:: cmake
-
-    env_module(cmd arg1 ... argN)
-    env_module(
-      COMMAND cmd arg1 ... argN
-      [OUTPUT_VARIABLE <out-var>]
-      [RESULT_VARIABLE <ret-var>]
-    )
-
-  The options are:
-
-  ``cmd arg1 ... argN``
-    The module sub-command and arguments to execute as if they were
-    passed directly to the module command in your shell environment.
-
-  ``OUTPUT_VARIABLE <out-var>``
-    The standard output from executing the module command.
-
-  ``RESULT_VARIABLE <ret-var>``
-    The return code from executing the module command.
-
-.. command:: env_module_swap
-
-  Swap one module for another:
-
-  .. code-block:: cmake
-
-    env_module_swap(out_mod in_mod
-      [OUTPUT_VARIABLE <out-var>]
-      [RESULT_VARIABLE <ret-var>]
-    )
-
-  This is functionally equivalent to the ``module swap out_mod in_mod`` shell
-  command.  The options are:
-
-  ``OUTPUT_VARIABLE <out-var>``
-    The standard output from executing the module command.
-
-  ``RESULT_VARIABLE <ret-var>``
-    The return code from executing the module command.
-
-.. command:: env_module_list
-
-  Retrieve the list of currently loaded modules:
-
-  .. code-block:: cmake
-
-    env_module_list(<out-var>)
-
-  This is functionally equivalent to the ``module list`` shell command.
-  The result is stored in ``<out-var>`` as a properly formatted CMake
-  :ref:`semicolon-separated list <CMake Language Lists>` variable.
-
-.. command:: env_module_avail
-
-  Retrieve the list of available modules:
-
-  .. code-block:: cmake
-
-    env_module_avail([<mod-prefix>] <out-var>)
-
-  This is functionally equivalent to the ``module avail <mod-prefix>`` shell
-  command.  The result is stored in ``<out-var>`` as a properly formatted
-  CMake :ref:`semicolon-separated list <CMake Language Lists>` variable.
-
-#]=======================================================================]
-
-function(env_module)
-  if(NOT EnvModules_COMMAND)
-    message(FATAL_ERROR "Failed to process module command.  EnvModules_COMMAND not found")
-    return()
-  endif()
-
-  set(options)
-  set(oneValueArgs OUTPUT_VARIABLE RESULT_VARIABLE)
-  set(multiValueArgs COMMAND)
-  cmake_parse_arguments(MOD_ARGS
-    "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGV}
-  )
-  if(NOT MOD_ARGS_COMMAND)
-    # If no explicit command argument was given, then treat the calling syntax
-    # as: module(cmd args...)
-    set(exec_cmd ${ARGV})
-  else()
-    set(exec_cmd ${MOD_ARGS_COMMAND})
-  endif()
-
-  if(MOD_ARGS_OUTPUT_VARIABLE)
-    set(err_var_args ERROR_VARIABLE err_var)
-  endif()
-
-  execute_process(
-    COMMAND mktemp -t module.cmake.XXXXXXXXXXXX
-    OUTPUT_VARIABLE tempfile_name
-  )
-  string(STRIP "${tempfile_name}" tempfile_name)
-
-  # If the $MODULESHOME/init/cmake file exists then assume that the CMake
-  # "shell" functionality exits
-  if(EXISTS "$ENV{MODULESHOME}/init/cmake")
-    execute_process(
-      COMMAND ${EnvModules_COMMAND} cmake ${exec_cmd}
-      OUTPUT_FILE ${tempfile_name}
-      ${err_var_args}
-      RESULT_VARIABLE ret_var
-    )
-
-  else() # fallback to the sh shell and manually convert to CMake
-    execute_process(
-      COMMAND ${EnvModules_COMMAND} sh ${exec_cmd}
-      OUTPUT_VARIABLE out_var
-      ${err_var_args}
-      RESULT_VARIABLE ret_var
-    )
-  endif()
-
-  # If we executed successfully then process and cleanup the temp file
-  if(ret_var EQUAL 0)
-    # No CMake shell so we need to process the sh output into CMake code
-    if(NOT EXISTS "$ENV{MODULESHOME}/init/cmake")
-      file(WRITE ${tempfile_name} "")
-      string(REPLACE "\n" ";" out_var "${out_var}")
-      foreach(sh_cmd IN LISTS out_var)
-        if(sh_cmd MATCHES "^ *unset *([^ ]*)")
-          set(cmake_cmd "unset(ENV{${CMAKE_MATCH_1}})")
-        elseif(sh_cmd MATCHES "^ *export *([^ ]*)")
-          set(cmake_cmd "set(ENV{${CMAKE_MATCH_1}} \"\${${CMAKE_MATCH_1}}\")")
-        elseif(sh_cmd MATCHES " *([^ =]*) *= *(.*)")
-          set(var_name "${CMAKE_MATCH_1}")
-          set(var_value "${CMAKE_MATCH_2}")
-          if(var_value MATCHES "^\"(.*[^\\])\"")
-            # If it's in quotes, take the value as is
-            set(var_value "${CMAKE_MATCH_1}")
-          else()
-            # Otherwise, strip trailing spaces
-            string(REGEX REPLACE "([^\\])? +$" "\\1" var_value "${var_value}")
-          endif()
-          string(REPLACE "\\ " " " var_value "${var_value}")
-          set(cmake_cmd "set(${var_name} \"${var_value}\")")
-        else()
-          continue()
-        endif()
-        file(APPEND ${tempfile_name} "${cmake_cmd}\n")
-      endforeach()
-    endif()
-
-    # Process the change in environment variables
-    include(${tempfile_name})
-    file(REMOVE ${tempfile_name})
-  endif()
-
-  # Push the output back out to the calling scope
-  if(MOD_ARGS_OUTPUT_VARIABLE)
-    set(${MOD_ARGS_OUTPUT_VARIABLE} "${err_var}" PARENT_SCOPE)
-  endif()
-  if(MOD_ARGS_RESULT_VARIABLE)
-    set(${MOD_ARGS_RESULT_VARIABLE} ${ret_var} PARENT_SCOPE)
-  endif()
-endfunction(env_module)
-
-#------------------------------------------------------------------------------
-function(env_module_swap out_mod in_mod)
-  set(options)
-  set(oneValueArgs OUTPUT_VARIABLE RESULT_VARIABLE)
-  set(multiValueArgs)
-
-  cmake_parse_arguments(MOD_ARGS
-    "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGV}
-  )
-
-  env_module(COMMAND -t swap ${out_mod} ${in_mod}
-    OUTPUT_VARIABLE tmp_out
-    RETURN_VARIABLE tmp_ret
-  )
-
-  if(MOD_ARGS_OUTPUT_VARIABLE)
-    set(${MOD_ARGS_OUTPUT_VARIABLE} "${err_var}" PARENT_SCOPE)
-  endif()
-  if(MOD_ARGS_RESULT_VARIABLE)
-    set(${MOD_ARGS_RESULT_VARIABLE} ${tmp_ret} PARENT_SCOPE)
-  endif()
-endfunction()
-
-#------------------------------------------------------------------------------
-function(env_module_list out_var)
-  cmake_policy(SET CMP0007 NEW)
-  env_module(COMMAND -t list OUTPUT_VARIABLE tmp_out)
-
-  # Convert output into a CMake list
-  string(REPLACE "\n" ";" ${out_var} "${tmp_out}")
-
-  # Remove title headers and empty entries
-  list(REMOVE_ITEM ${out_var} "No modules loaded")
-  if(${out_var})
-    list(FILTER ${out_var} EXCLUDE REGEX "^(.*:)?$")
-  endif()
-  list(FILTER ${out_var} EXCLUDE REGEX "^(.*:)?$")
-
-  set(${out_var} ${${out_var}} PARENT_SCOPE)
-endfunction()
-
-#------------------------------------------------------------------------------
-function(env_module_avail)
-  cmake_policy(SET CMP0007 NEW)
-
-  if(ARGC EQUAL 1)
-    set(mod_prefix)
-    set(out_var ${ARGV0})
-  elseif(ARGC EQUAL 2)
-    set(mod_prefix ${ARGV0})
-    set(out_var ${ARGV1})
-  else()
-    message(FATAL_ERROR "Usage: env_module_avail([mod_prefix] out_var)")
-  endif()
-  env_module(COMMAND -t avail ${mod_prefix} OUTPUT_VARIABLE tmp_out)
-
-  # Convert output into a CMake list
-  string(REPLACE "\n" ";" tmp_out "${tmp_out}")
-
-  set(${out_var})
-  foreach(MOD IN LISTS tmp_out)
-    # Remove directory entries and empty values
-    if(MOD MATCHES "^(.*:)?$")
-      continue()
-    endif()
-
-    # Convert default modules
-    if(MOD MATCHES "^(.*)/$" ) # "foo/"
-      list(APPEND ${out_var} ${CMAKE_MATCH_1})
-    elseif(MOD MATCHES "^((.*)/.*)\\(default\\)$") # "foo/1.2.3(default)"
-      list(APPEND ${out_var} ${CMAKE_MATCH_2})
-      list(APPEND ${out_var} ${CMAKE_MATCH_1})
-    else()
-      list(APPEND ${out_var} ${MOD})
-    endif()
-  endforeach()
-
-  set(${out_var} ${${out_var}} PARENT_SCOPE)
-endfunction()
-
-#------------------------------------------------------------------------------
-# Make sure we know where the underlying module command is
-find_program(EnvModules_COMMAND
-  NAMES lmod modulecmd
-  HINTS ENV MODULESHOME
-  PATH_SUFFIXES libexec
-)
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-find_package_handle_standard_args(EnvModules DEFAULT_MSG EnvModules_COMMAND)
diff --git a/share/cmake-3.18/Modules/FindFLEX.cmake b/share/cmake-3.18/Modules/FindFLEX.cmake
deleted file mode 100644
index 1384736..0000000
--- a/share/cmake-3.18/Modules/FindFLEX.cmake
+++ /dev/null
@@ -1,256 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindFLEX
---------
-
-Find Fast Lexical Analyzer (Flex) executable and provides a macro
-to generate custom build rules
-
-
-
-The module defines the following variables:
-
-::
-
-  FLEX_FOUND - True is flex executable is found
-  FLEX_EXECUTABLE - the path to the flex executable
-  FLEX_VERSION - the version of flex
-  FLEX_LIBRARIES - The flex libraries
-  FLEX_INCLUDE_DIRS - The path to the flex headers
-
-
-
-The minimum required version of flex can be specified using the
-standard syntax, e.g.  :command:`find_package(FLEX 2.5.13)`
-
-
-
-If flex is found on the system, the module provides the macro:
-
-::
-
-  FLEX_TARGET(Name FlexInput FlexOutput
-              [COMPILE_FLAGS <string>]
-              [DEFINES_FILE <string>]
-              )
-
-which creates a custom command to generate the ``FlexOutput`` file from
-the ``FlexInput`` file.  If ``COMPILE_FLAGS`` option is specified, the next
-parameter is added to the flex command line. If flex is configured to
-output a header file, the ``DEFINES_FILE`` option may be used to specify its
-name. Name is an alias used to get details of this custom command.
-Indeed the macro defines the following variables:
-
-::
-
-  FLEX_${Name}_DEFINED - true is the macro ran successfully
-  FLEX_${Name}_OUTPUTS - the source file generated by the custom rule, an
-  alias for FlexOutput
-  FLEX_${Name}_INPUT - the flex source file, an alias for ${FlexInput}
-  FLEX_${Name}_OUTPUT_HEADER - the header flex output, if any.
-
-
-
-Flex scanners often use tokens defined by Bison: the code generated
-by Flex depends of the header generated by Bison.  This module also
-defines a macro:
-
-::
-
-  ADD_FLEX_BISON_DEPENDENCY(FlexTarget BisonTarget)
-
-which adds the required dependency between a scanner and a parser
-where ``FlexTarget`` and ``BisonTarget`` are the first parameters of
-respectively ``FLEX_TARGET`` and ``BISON_TARGET`` macros.
-
-::
-
-  ====================================================================
-  Example:
-
-
-
-::
-
-   find_package(BISON)
-   find_package(FLEX)
-
-
-
-::
-
-   BISON_TARGET(MyParser parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser.cpp)
-   FLEX_TARGET(MyScanner lexer.l  ${CMAKE_CURRENT_BINARY_DIR}/lexer.cpp)
-   ADD_FLEX_BISON_DEPENDENCY(MyScanner MyParser)
-
-
-
-::
-
-   include_directories(${CMAKE_CURRENT_BINARY_DIR})
-   add_executable(Foo
-      Foo.cc
-      ${BISON_MyParser_OUTPUTS}
-      ${FLEX_MyScanner_OUTPUTS}
-   )
-   target_link_libraries(Foo ${FLEX_LIBRARIES})
-  ====================================================================
-#]=======================================================================]
-
-find_program(FLEX_EXECUTABLE NAMES flex win-flex win_flex DOC "path to the flex executable")
-mark_as_advanced(FLEX_EXECUTABLE)
-
-find_library(FL_LIBRARY NAMES fl
-  DOC "Path to the fl library")
-
-find_path(FLEX_INCLUDE_DIR FlexLexer.h
-  DOC "Path to the flex headers")
-
-mark_as_advanced(FL_LIBRARY FLEX_INCLUDE_DIR)
-
-set(FLEX_INCLUDE_DIRS ${FLEX_INCLUDE_DIR})
-set(FLEX_LIBRARIES ${FL_LIBRARY})
-
-if(FLEX_EXECUTABLE)
-
-  execute_process(COMMAND ${FLEX_EXECUTABLE} --version
-    OUTPUT_VARIABLE FLEX_version_output
-    ERROR_VARIABLE FLEX_version_error
-    RESULT_VARIABLE FLEX_version_result
-    OUTPUT_STRIP_TRAILING_WHITESPACE)
-  if(NOT ${FLEX_version_result} EQUAL 0)
-    if(FLEX_FIND_REQUIRED)
-      message(SEND_ERROR "Command \"${FLEX_EXECUTABLE} --version\" failed with output:\n${FLEX_version_output}\n${FLEX_version_error}")
-    else()
-      message("Command \"${FLEX_EXECUTABLE} --version\" failed with output:\n${FLEX_version_output}\n${FLEX_version_error}\nFLEX_VERSION will not be available")
-    endif()
-  else()
-    # older versions of flex printed "/full/path/to/executable version X.Y"
-    # newer versions use "basename(executable) X.Y"
-    get_filename_component(FLEX_EXE_NAME_WE "${FLEX_EXECUTABLE}" NAME_WE)
-    get_filename_component(FLEX_EXE_EXT "${FLEX_EXECUTABLE}" EXT)
-    string(REGEX REPLACE "^.*${FLEX_EXE_NAME_WE}(${FLEX_EXE_EXT})?\"? (version )?([0-9]+[^ ]*)( .*)?$" "\\3"
-      FLEX_VERSION "${FLEX_version_output}")
-    unset(FLEX_EXE_EXT)
-    unset(FLEX_EXE_NAME_WE)
-  endif()
-
-  #============================================================
-  # FLEX_TARGET (public macro)
-  #============================================================
-  #
-  macro(FLEX_TARGET Name Input Output)
-
-    set(FLEX_TARGET_PARAM_OPTIONS)
-    set(FLEX_TARGET_PARAM_ONE_VALUE_KEYWORDS
-      COMPILE_FLAGS
-      DEFINES_FILE
-      )
-    set(FLEX_TARGET_PARAM_MULTI_VALUE_KEYWORDS)
-
-    cmake_parse_arguments(
-      FLEX_TARGET_ARG
-      "${FLEX_TARGET_PARAM_OPTIONS}"
-      "${FLEX_TARGET_PARAM_ONE_VALUE_KEYWORDS}"
-      "${FLEX_TARGET_MULTI_VALUE_KEYWORDS}"
-      ${ARGN}
-      )
-
-    set(FLEX_TARGET_usage "FLEX_TARGET(<Name> <Input> <Output> [COMPILE_FLAGS <string>] [DEFINES_FILE <string>]")
-
-    if(NOT "${FLEX_TARGET_ARG_UNPARSED_ARGUMENTS}" STREQUAL "")
-      message(SEND_ERROR ${FLEX_TARGET_usage})
-    else()
-
-      cmake_policy(GET CMP0098 _flex_CMP0098
-          PARENT_SCOPE # undocumented, do not use outside of CMake
-        )
-      set(_flex_INPUT "${Input}")
-      if("x${_flex_CMP0098}x" STREQUAL "xNEWx")
-        set(_flex_WORKING_DIR "${CMAKE_CURRENT_BINARY_DIR}")
-        if(NOT IS_ABSOLUTE "${_flex_INPUT}")
-          set(_flex_INPUT "${CMAKE_CURRENT_SOURCE_DIR}/${_flex_INPUT}")
-        endif()
-      else()
-        set(_flex_WORKING_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
-      endif()
-      unset(_flex_CMP0098)
-
-      set(_flex_OUTPUT "${Output}")
-      if(NOT IS_ABSOLUTE ${_flex_OUTPUT})
-        set(_flex_OUTPUT "${_flex_WORKING_DIR}/${_flex_OUTPUT}")
-      endif()
-      set(_flex_TARGET_OUTPUTS "${_flex_OUTPUT}")
-
-      set(_flex_EXE_OPTS "")
-      if(NOT "${FLEX_TARGET_ARG_COMPILE_FLAGS}" STREQUAL "")
-        set(_flex_EXE_OPTS "${FLEX_TARGET_ARG_COMPILE_FLAGS}")
-        separate_arguments(_flex_EXE_OPTS)
-      endif()
-
-      set(_flex_OUTPUT_HEADER "")
-      if(NOT "${FLEX_TARGET_ARG_DEFINES_FILE}" STREQUAL "")
-        set(_flex_OUTPUT_HEADER "${FLEX_TARGET_ARG_DEFINES_FILE}")
-        if(IS_ABSOLUTE "${_flex_OUTPUT_HEADER}")
-          set(_flex_OUTPUT_HEADER_ABS "${_flex_OUTPUT_HEADER}")
-        else()
-          set(_flex_OUTPUT_HEADER_ABS "${_flex_WORKING_DIR}/${_flex_OUTPUT_HEADER}")
-        endif()
-        list(APPEND _flex_TARGET_OUTPUTS "${_flex_OUTPUT_HEADER_ABS}")
-        list(APPEND _flex_EXE_OPTS --header-file=${_flex_OUTPUT_HEADER_ABS})
-      endif()
-
-      get_filename_component(_flex_EXE_NAME_WE "${FLEX_EXECUTABLE}" NAME_WE)
-      add_custom_command(OUTPUT ${_flex_TARGET_OUTPUTS}
-        COMMAND ${FLEX_EXECUTABLE} ${_flex_EXE_OPTS} -o${_flex_OUTPUT} ${_flex_INPUT}
-        VERBATIM
-        DEPENDS ${_flex_INPUT}
-        COMMENT "[FLEX][${Name}] Building scanner with ${_flex_EXE_NAME_WE} ${FLEX_VERSION}"
-        WORKING_DIRECTORY ${_flex_WORKING_DIR})
-
-      set(FLEX_${Name}_DEFINED TRUE)
-      set(FLEX_${Name}_OUTPUTS ${_flex_TARGET_OUTPUTS})
-      set(FLEX_${Name}_INPUT ${_flex_INPUT})
-      set(FLEX_${Name}_COMPILE_FLAGS ${_flex_EXE_OPTS})
-      set(FLEX_${Name}_OUTPUT_HEADER ${_flex_OUTPUT_HEADER})
-
-      unset(_flex_EXE_NAME_WE)
-      unset(_flex_EXE_OPTS)
-      unset(_flex_INPUT)
-      unset(_flex_OUTPUT)
-      unset(_flex_OUTPUT_HEADER)
-      unset(_flex_OUTPUT_HEADER_ABS)
-      unset(_flex_TARGET_OUTPUTS)
-      unset(_flex_WORKING_DIR)
-
-    endif()
-  endmacro()
-  #============================================================
-
-
-  #============================================================
-  # ADD_FLEX_BISON_DEPENDENCY (public macro)
-  #============================================================
-  #
-  macro(ADD_FLEX_BISON_DEPENDENCY FlexTarget BisonTarget)
-
-    if(NOT FLEX_${FlexTarget}_OUTPUTS)
-      message(SEND_ERROR "Flex target `${FlexTarget}' does not exist.")
-    endif()
-
-    if(NOT BISON_${BisonTarget}_OUTPUT_HEADER)
-      message(SEND_ERROR "Bison target `${BisonTarget}' does not exist.")
-    endif()
-
-    set_source_files_properties(${FLEX_${FlexTarget}_OUTPUTS}
-      PROPERTIES OBJECT_DEPENDS ${BISON_${BisonTarget}_OUTPUT_HEADER})
-  endmacro()
-  #============================================================
-
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(FLEX REQUIRED_VARS FLEX_EXECUTABLE
-                                       VERSION_VAR FLEX_VERSION)
diff --git a/share/cmake-3.18/Modules/FindFLTK.cmake b/share/cmake-3.18/Modules/FindFLTK.cmake
deleted file mode 100644
index e273642..0000000
--- a/share/cmake-3.18/Modules/FindFLTK.cmake
+++ /dev/null
@@ -1,336 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindFLTK
---------
-
-Find the Fast Light Toolkit (FLTK) library
-
-Input Variables
-^^^^^^^^^^^^^^^
-
-By default this module will search for all of the FLTK components and
-add them to the ``FLTK_LIBRARIES`` variable.  You can limit the components
-which get placed in ``FLTK_LIBRARIES`` by defining one or more of the
-following three options:
-
-``FLTK_SKIP_OPENGL``
-  Set to true to disable searching for the FLTK GL library
-
-``FLTK_SKIP_FORMS``
-  Set to true to disable searching for the FLTK Forms library
-
-``FLTK_SKIP_IMAGES``
-  Set to true to disable searching for the FLTK Images library
-
-FLTK is composed also by a binary tool. You can set the following option:
-
-``FLTK_SKIP_FLUID``
-  Set to true to not look for the FLUID binary
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-The following variables will be defined:
-
-``FLTK_FOUND``
-  True if all components not skipped were found
-
-``FLTK_INCLUDE_DIR``
-  Path to the include directory for FLTK header files
-
-``FLTK_LIBRARIES``
-  List of the FLTK libraries found
-
-``FLTK_FLUID_EXECUTABLE``
-  Path to the FLUID binary tool
-
-``FLTK_WRAP_UI``
-  True if FLUID is found, used to enable the FLTK_WRAP_UI command
-
-Cache Variables
-^^^^^^^^^^^^^^^
-
-The following cache variables are also available to set or use:
-
-``FLTK_BASE_LIBRARY_RELEASE``
-  The FLTK base library (optimized)
-
-``FLTK_BASE_LIBRARY_DEBUG``
-  The FLTK base library (debug)
-
-``FLTK_GL_LIBRARY_RELEASE``
-  The FLTK GL library (optimized)
-
-``FLTK_GL_LIBRARY_DEBUG``
-  The FLTK GL library (debug)
-
-``FLTK_FORMS_LIBRARY_RELEASE``
-  The FLTK Forms library (optimized)
-
-``FLTK_FORMS_LIBRARY_DEBUG``
-  The FLTK Forms library (debug)
-
-``FLTK_IMAGES_LIBRARY_RELEASE``
-  The FLTK Images protobuf library (optimized)
-
-``FLTK_IMAGES_LIBRARY_DEBUG``
-  The FLTK Images library (debug)
-#]=======================================================================]
-
-if(NOT FLTK_SKIP_OPENGL)
-  find_package(OpenGL)
-endif()
-
-#  Platform dependent libraries required by FLTK
-if(WIN32)
-  if(NOT CYGWIN)
-    if(BORLAND)
-      set( FLTK_PLATFORM_DEPENDENT_LIBS import32 )
-    else()
-      set( FLTK_PLATFORM_DEPENDENT_LIBS wsock32 comctl32 )
-    endif()
-  endif()
-endif()
-
-if(UNIX)
-  include(${CMAKE_CURRENT_LIST_DIR}/FindX11.cmake)
-  find_library(FLTK_MATH_LIBRARY m)
-  set( FLTK_PLATFORM_DEPENDENT_LIBS ${X11_LIBRARIES} ${FLTK_MATH_LIBRARY})
-endif()
-
-if(APPLE)
-  set( FLTK_PLATFORM_DEPENDENT_LIBS  "-framework Carbon -framework Cocoa -framework ApplicationServices -lz")
-endif()
-
-# If FLTK_INCLUDE_DIR is already defined we assigne its value to FLTK_DIR
-if(FLTK_INCLUDE_DIR)
-  set(FLTK_DIR ${FLTK_INCLUDE_DIR})
-endif()
-
-
-# If FLTK has been built using CMake we try to find everything directly
-set(FLTK_DIR_STRING "directory containing FLTKConfig.cmake.  This is either the root of the build tree, or PREFIX/lib/fltk for an installation.")
-
-# Search only if the location is not already known.
-if(NOT FLTK_DIR)
-  # Get the system search path as a list.
-  file(TO_CMAKE_PATH "$ENV{PATH}" FLTK_DIR_SEARCH2)
-
-  # Construct a set of paths relative to the system search path.
-  set(FLTK_DIR_SEARCH "")
-  foreach(dir ${FLTK_DIR_SEARCH2})
-    set(FLTK_DIR_SEARCH ${FLTK_DIR_SEARCH} "${dir}/../lib/fltk")
-  endforeach()
-  string(REPLACE "//" "/" FLTK_DIR_SEARCH "${FLTK_DIR_SEARCH}")
-
-  #
-  # Look for an installation or build tree.
-  #
-  find_path(FLTK_DIR FLTKConfig.cmake
-    # Look for an environment variable FLTK_DIR.
-    HINTS
-      ENV FLTK_DIR
-
-    # Look in places relative to the system executable search path.
-    ${FLTK_DIR_SEARCH}
-
-    PATH_SUFFIXES
-    fltk
-    fltk/include
-    lib/fltk
-    lib/fltk/include
-
-    # Help the user find it if we cannot.
-    DOC "The ${FLTK_DIR_STRING}"
-    )
-endif()
-
-# Check if FLTK was built using CMake
-if(EXISTS ${FLTK_DIR}/FLTKConfig.cmake)
-  set(FLTK_BUILT_WITH_CMAKE 1)
-endif()
-
-if(FLTK_BUILT_WITH_CMAKE)
-  set(FLTK_FOUND 1)
-  include(${FLTK_DIR}/FLTKConfig.cmake)
-
-  # Fluid
-  if(FLUID_COMMAND)
-    set(FLTK_FLUID_EXECUTABLE ${FLUID_COMMAND} CACHE FILEPATH "Fluid executable")
-  else()
-    find_program(FLTK_FLUID_EXECUTABLE fluid PATHS
-      ${FLTK_EXECUTABLE_DIRS}
-      ${FLTK_EXECUTABLE_DIRS}/RelWithDebInfo
-      ${FLTK_EXECUTABLE_DIRS}/Debug
-      ${FLTK_EXECUTABLE_DIRS}/Release
-      NO_SYSTEM_PATH)
-  endif()
-  # mark_as_advanced(FLTK_FLUID_EXECUTABLE)
-
-  set(FLTK_INCLUDE_DIR ${FLTK_DIR})
-  link_directories(${FLTK_LIBRARY_DIRS})
-
-  set(FLTK_BASE_LIBRARY fltk)
-  set(FLTK_GL_LIBRARY fltk_gl)
-  set(FLTK_FORMS_LIBRARY fltk_forms)
-  set(FLTK_IMAGES_LIBRARY fltk_images)
-
-  # Add the extra libraries
-  load_cache(${FLTK_DIR}
-    READ_WITH_PREFIX
-    FL FLTK_USE_SYSTEM_JPEG
-    FL FLTK_USE_SYSTEM_PNG
-    FL FLTK_USE_SYSTEM_ZLIB
-    )
-
-  set(FLTK_IMAGES_LIBS "")
-  if(FLFLTK_USE_SYSTEM_JPEG)
-    set(FLTK_IMAGES_LIBS ${FLTK_IMAGES_LIBS} fltk_jpeg)
-  endif()
-  if(FLFLTK_USE_SYSTEM_PNG)
-    set(FLTK_IMAGES_LIBS ${FLTK_IMAGES_LIBS} fltk_png)
-  endif()
-  if(FLFLTK_USE_SYSTEM_ZLIB)
-    set(FLTK_IMAGES_LIBS ${FLTK_IMAGES_LIBS} fltk_zlib)
-  endif()
-  set(FLTK_IMAGES_LIBS "${FLTK_IMAGES_LIBS}" CACHE INTERNAL
-    "Extra libraries for fltk_images library.")
-
-else()
-
-  # if FLTK was not built using CMake
-  # Find fluid executable.
-  find_program(FLTK_FLUID_EXECUTABLE fluid ${FLTK_INCLUDE_DIR}/fluid)
-
-  # Use location of fluid to help find everything else.
-  set(FLTK_INCLUDE_SEARCH_PATH "")
-  set(FLTK_LIBRARY_SEARCH_PATH "")
-  if(FLTK_FLUID_EXECUTABLE)
-    get_filename_component(FLTK_BIN_DIR "${FLTK_FLUID_EXECUTABLE}" PATH)
-    set(FLTK_INCLUDE_SEARCH_PATH ${FLTK_INCLUDE_SEARCH_PATH}
-      ${FLTK_BIN_DIR}/../include ${FLTK_BIN_DIR}/..)
-    set(FLTK_LIBRARY_SEARCH_PATH ${FLTK_LIBRARY_SEARCH_PATH}
-      ${FLTK_BIN_DIR}/../lib)
-    set(FLTK_WRAP_UI 1)
-  endif()
-
-  #
-  # Try to find FLTK include dir using fltk-config
-  #
-  if(UNIX)
-    # Use fltk-config to generate a list of possible include directories
-    find_program(FLTK_CONFIG_SCRIPT fltk-config PATHS ${FLTK_BIN_DIR})
-    if(FLTK_CONFIG_SCRIPT)
-      if(NOT FLTK_INCLUDE_DIR)
-        exec_program(${FLTK_CONFIG_SCRIPT} ARGS --cxxflags OUTPUT_VARIABLE FLTK_CXXFLAGS)
-        if(FLTK_CXXFLAGS)
-          string(REGEX MATCHALL "-I[^ ]*" _fltk_temp_dirs ${FLTK_CXXFLAGS})
-          string(REPLACE "-I" "" _fltk_temp_dirs "${_fltk_temp_dirs}")
-          foreach(_dir ${_fltk_temp_dirs})
-            string(STRIP ${_dir} _output)
-            list(APPEND _FLTK_POSSIBLE_INCLUDE_DIRS ${_output})
-          endforeach()
-        endif()
-      endif()
-    endif()
-  endif()
-
-  list(APPEND FLTK_INCLUDE_SEARCH_PATH ${_FLTK_POSSIBLE_INCLUDE_DIRS})
-
-  find_path(FLTK_INCLUDE_DIR
-      NAMES FL/Fl.h FL/Fl.H    # fltk 1.1.9 has Fl.H (#8376)
-      PATH_SUFFIXES fltk fltk/include
-      PATHS ${FLTK_INCLUDE_SEARCH_PATH})
-
-  #
-  # Try to find FLTK library
-  if(UNIX)
-    if(FLTK_CONFIG_SCRIPT)
-      exec_program(${FLTK_CONFIG_SCRIPT} ARGS --libs OUTPUT_VARIABLE _FLTK_POSSIBLE_LIBS)
-      if(_FLTK_POSSIBLE_LIBS)
-        get_filename_component(_FLTK_POSSIBLE_LIBRARY_DIR ${_FLTK_POSSIBLE_LIBS} PATH)
-      endif()
-    endif()
-  endif()
-
-  list(APPEND FLTK_LIBRARY_SEARCH_PATH ${FLTK_INCLUDE_DIR}/lib ${_FLTK_POSSIBLE_LIBRARY_DIR})
-
-  include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
-
-  # Allow libraries to be set manually
-  if(NOT FLTK_BASE_LIBRARY)
-      find_library(FLTK_BASE_LIBRARY_RELEASE NAMES fltk PATHS ${FLTK_LIBRARY_SEARCH_PATH} PATH_SUFFIXES fltk fltk/lib)
-      find_library(FLTK_BASE_LIBRARY_DEBUG NAMES fltkd PATHS ${FLTK_LIBRARY_SEARCH_PATH} PATH_SUFFIXES fltk fltk/lib)
-      select_library_configurations(FLTK_BASE)
-  endif()
-  if(NOT FLTK_GL_LIBRARY)
-      find_library(FLTK_GL_LIBRARY_RELEASE NAMES fltkgl fltk_gl PATHS ${FLTK_LIBRARY_SEARCH_PATH} PATH_SUFFIXES fltk fltk/lib)
-      find_library(FLTK_GL_LIBRARY_DEBUG NAMES fltkgld fltk_gld PATHS ${FLTK_LIBRARY_SEARCH_PATH} PATH_SUFFIXES fltk fltk/lib)
-      select_library_configurations(FLTK_GL)
-  endif()
-  if(NOT FLTK_FORMS_LIBRARY)
-      find_library(FLTK_FORMS_LIBRARY_RELEASE NAMES fltkforms fltk_forms PATHS ${FLTK_LIBRARY_SEARCH_PATH} PATH_SUFFIXES fltk fltk/lib)
-      find_library(FLTK_FORMS_LIBRARY_DEBUG NAMES fltkformsd fltk_formsd PATHS ${FLTK_LIBRARY_SEARCH_PATH} PATH_SUFFIXES fltk fltk/lib)
-      select_library_configurations(FLTK_FORMS)
-  endif()
-  if(NOT FLTK_IMAGES_LIBRARY)
-      find_library(FLTK_IMAGES_LIBRARY_RELEASE NAMES fltkimages fltk_images PATHS ${FLTK_LIBRARY_SEARCH_PATH} PATH_SUFFIXES fltk fltk/lib)
-      find_library(FLTK_IMAGES_LIBRARY_DEBUG NAMES fltkimagesd fltk_imagesd PATHS ${FLTK_LIBRARY_SEARCH_PATH} PATH_SUFFIXES fltk fltk/lib)
-      select_library_configurations(FLTK_IMAGES)
-  endif()
-
-  # Find the extra libraries needed for the fltk_images library.
-  if(UNIX)
-    if(FLTK_CONFIG_SCRIPT)
-      exec_program(${FLTK_CONFIG_SCRIPT} ARGS --use-images --ldflags
-        OUTPUT_VARIABLE FLTK_IMAGES_LDFLAGS)
-      set(FLTK_LIBS_EXTRACT_REGEX ".*-lfltk_images (.*) -lfltk.*")
-      if("${FLTK_IMAGES_LDFLAGS}" MATCHES "${FLTK_LIBS_EXTRACT_REGEX}")
-        string(REGEX REPLACE " +" ";" FLTK_IMAGES_LIBS "${CMAKE_MATCH_1}")
-        # The EXEC_PROGRAM will not be inherited into subdirectories from
-        # the file that originally included this module.  Save the answer.
-        set(FLTK_IMAGES_LIBS "${FLTK_IMAGES_LIBS}" CACHE INTERNAL
-          "Extra libraries for fltk_images library.")
-      endif()
-    endif()
-  endif()
-
-endif()
-
-# Append all of the required libraries together (by default, everything)
-set(FLTK_LIBRARIES)
-if(NOT FLTK_SKIP_IMAGES)
-  list(APPEND FLTK_LIBRARIES ${FLTK_IMAGES_LIBRARY})
-endif()
-if(NOT FLTK_SKIP_FORMS)
-  list(APPEND FLTK_LIBRARIES ${FLTK_FORMS_LIBRARY})
-endif()
-if(NOT FLTK_SKIP_OPENGL)
-  list(APPEND FLTK_LIBRARIES ${FLTK_GL_LIBRARY} ${OPENGL_gl_LIBRARY})
-  list(APPEND FLTK_INCLUDE_DIR ${OPENGL_INCLUDE_DIR})
-  list(REMOVE_DUPLICATES FLTK_INCLUDE_DIR)
-endif()
-list(APPEND FLTK_LIBRARIES ${FLTK_BASE_LIBRARY})
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-if(FLTK_SKIP_FLUID)
-  FIND_PACKAGE_HANDLE_STANDARD_ARGS(FLTK DEFAULT_MSG FLTK_LIBRARIES FLTK_INCLUDE_DIR)
-else()
-  FIND_PACKAGE_HANDLE_STANDARD_ARGS(FLTK DEFAULT_MSG FLTK_LIBRARIES FLTK_INCLUDE_DIR FLTK_FLUID_EXECUTABLE)
-endif()
-
-if(FLTK_FOUND)
-  if(APPLE)
-    set(FLTK_LIBRARIES ${FLTK_PLATFORM_DEPENDENT_LIBS} ${FLTK_LIBRARIES})
-  else()
-    set(FLTK_LIBRARIES ${FLTK_LIBRARIES} ${FLTK_PLATFORM_DEPENDENT_LIBS})
-  endif()
-
-  # The following deprecated settings are for compatibility with CMake 1.4
-  set (HAS_FLTK ${FLTK_FOUND})
-  set (FLTK_INCLUDE_PATH ${FLTK_INCLUDE_DIR})
-  set (FLTK_FLUID_EXE ${FLTK_FLUID_EXECUTABLE})
-  set (FLTK_LIBRARY ${FLTK_LIBRARIES})
-endif()
diff --git a/share/cmake-3.18/Modules/FindFontconfig.cmake b/share/cmake-3.18/Modules/FindFontconfig.cmake
deleted file mode 100644
index a6f0180..0000000
--- a/share/cmake-3.18/Modules/FindFontconfig.cmake
+++ /dev/null
@@ -1,101 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindFontconfig
---------------
-
-Find Fontconfig headers and library.
-
-Imported Targets
-^^^^^^^^^^^^^^^^
-
-``Fontconfig::Fontconfig``
-  The Fontconfig library, if found.
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-This will define the following variables in your project:
-
-``Fontconfig_FOUND``
-  true if (the requested version of) Fontconfig is available.
-``Fontconfig_VERSION``
-  the version of Fontconfig.
-``Fontconfig_LIBRARIES``
-  the libraries to link against to use Fontconfig.
-``Fontconfig_INCLUDE_DIRS``
-  where to find the Fontconfig headers.
-``Fontconfig_COMPILE_OPTIONS``
-  this should be passed to target_compile_options(), if the
-  target is not used for linking
-
-#]=======================================================================]
-
-
-# use pkg-config to get the directories and then use these values
-# in the FIND_PATH() and FIND_LIBRARY() calls
-find_package(PkgConfig QUIET)
-pkg_check_modules(PKG_FONTCONFIG QUIET fontconfig)
-set(Fontconfig_COMPILE_OPTIONS ${PKG_FONTCONFIG_CFLAGS_OTHER})
-set(Fontconfig_VERSION ${PKG_FONTCONFIG_VERSION})
-
-find_path( Fontconfig_INCLUDE_DIR
-  NAMES
-    fontconfig/fontconfig.h
-  HINTS
-    ${PKG_FONTCONFIG_INCLUDE_DIRS}
-    /usr/X11/include
-)
-
-find_library( Fontconfig_LIBRARY
-  NAMES
-    fontconfig
-  PATHS
-    ${PKG_FONTCONFIG_LIBRARY_DIRS}
-)
-
-if (Fontconfig_INCLUDE_DIR AND NOT Fontconfig_VERSION)
-  file(STRINGS ${Fontconfig_INCLUDE_DIR}/fontconfig/fontconfig.h _contents REGEX "^#define[ \t]+FC_[A-Z]+[ \t]+[0-9]+$")
-  unset(Fontconfig_VERSION)
-  foreach(VPART MAJOR MINOR REVISION)
-    foreach(VLINE ${_contents})
-      if(VLINE MATCHES "^#define[\t ]+FC_${VPART}[\t ]+([0-9]+)$")
-        set(Fontconfig_VERSION_PART "${CMAKE_MATCH_1}")
-        if(Fontconfig_VERSION)
-          string(APPEND Fontconfig_VERSION ".${Fontconfig_VERSION_PART}")
-        else()
-          set(Fontconfig_VERSION "${Fontconfig_VERSION_PART}")
-        endif()
-      endif()
-    endforeach()
-  endforeach()
-endif ()
-
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(Fontconfig
-  FOUND_VAR
-    Fontconfig_FOUND
-  REQUIRED_VARS
-    Fontconfig_LIBRARY
-    Fontconfig_INCLUDE_DIR
-  VERSION_VAR
-    Fontconfig_VERSION
-)
-
-
-if(Fontconfig_FOUND AND NOT TARGET Fontconfig::Fontconfig)
-  add_library(Fontconfig::Fontconfig UNKNOWN IMPORTED)
-  set_target_properties(Fontconfig::Fontconfig PROPERTIES
-    IMPORTED_LOCATION "${Fontconfig_LIBRARY}"
-    INTERFACE_COMPILE_OPTIONS "${Fontconfig_COMPILE_OPTIONS}"
-    INTERFACE_INCLUDE_DIRECTORIES "${Fontconfig_INCLUDE_DIR}"
-  )
-endif()
-
-mark_as_advanced(Fontconfig_LIBRARY Fontconfig_INCLUDE_DIR)
-
-if(Fontconfig_FOUND)
-  set(Fontconfig_LIBRARIES ${Fontconfig_LIBRARY})
-  set(Fontconfig_INCLUDE_DIRS ${Fontconfig_INCLUDE_DIR})
-endif()
diff --git a/share/cmake-3.18/Modules/FindFreetype.cmake b/share/cmake-3.18/Modules/FindFreetype.cmake
deleted file mode 100644
index 3e6a177..0000000
--- a/share/cmake-3.18/Modules/FindFreetype.cmake
+++ /dev/null
@@ -1,199 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindFreetype
-------------
-
-Find the FreeType font renderer includes and library.
-
-Imported Targets
-^^^^^^^^^^^^^^^^
-
-This module defines the following :prop_tgt:`IMPORTED` target:
-
-``Freetype::Freetype``
-  The Freetype ``freetype`` library, if found
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-This module will set the following variables in your project:
-
-``FREETYPE_FOUND``
-  true if the Freetype headers and libraries were found
-``FREETYPE_INCLUDE_DIRS``
-  directories containing the Freetype headers. This is the
-  concatenation of the variables:
-
-  ``FREETYPE_INCLUDE_DIR_ft2build``
-    directory holding the main Freetype API configuration header
-  ``FREETYPE_INCLUDE_DIR_freetype2``
-    directory holding Freetype public headers
-``FREETYPE_LIBRARIES``
-  the library to link against
-``FREETYPE_VERSION_STRING``
-  the version of freetype found (since CMake 2.8.8)
-
-Hints
-^^^^^
-
-The user may set the environment variable ``FREETYPE_DIR`` to the root
-directory of a Freetype installation.
-#]=======================================================================]
-
-# Created by Eric Wing.
-# Modifications by Alexander Neundorf.
-# This file has been renamed to "FindFreetype.cmake" instead of the correct
-# "FindFreeType.cmake" in order to be compatible with the one from KDE4, Alex.
-
-# Ugh, FreeType seems to use some #include trickery which
-# makes this harder than it should be. It looks like they
-# put ft2build.h in a common/easier-to-find location which
-# then contains a #include to a more specific header in a
-# more specific location (#include <freetype/config/ftheader.h>).
-# Then from there, they need to set a bunch of #define's
-# so you can do something like:
-# #include FT_FREETYPE_H
-# Unfortunately, using CMake's mechanisms like include_directories()
-# wants explicit full paths and this trickery doesn't work too well.
-# I'm going to attempt to cut out the middleman and hope
-# everything still works.
-
-set(FREETYPE_FIND_ARGS
-  HINTS
-    ENV FREETYPE_DIR
-  PATHS
-    ENV GTKMM_BASEPATH
-    [HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path]
-    [HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]
-)
-
-find_path(
-  FREETYPE_INCLUDE_DIR_ft2build
-  ft2build.h
-  ${FREETYPE_FIND_ARGS}
-  PATH_SUFFIXES
-    include/freetype2
-    include
-    freetype2
-)
-
-find_path(
-  FREETYPE_INCLUDE_DIR_freetype2
-  NAMES
-    freetype/config/ftheader.h
-    config/ftheader.h
-  ${FREETYPE_FIND_ARGS}
-  PATH_SUFFIXES
-    include/freetype2
-    include
-    freetype2
-)
-
-if(NOT FREETYPE_LIBRARY)
-  find_library(FREETYPE_LIBRARY_RELEASE
-    NAMES
-      freetype
-      libfreetype
-      freetype219
-    ${FREETYPE_FIND_ARGS}
-    PATH_SUFFIXES
-      lib
-  )
-  find_library(FREETYPE_LIBRARY_DEBUG
-    NAMES
-      freetyped
-      libfreetyped
-      freetype219d
-    ${FREETYPE_FIND_ARGS}
-    PATH_SUFFIXES
-      lib
-  )
-  include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
-  select_library_configurations(FREETYPE)
-else()
-  # on Windows, ensure paths are in canonical format (forward slahes):
-  file(TO_CMAKE_PATH "${FREETYPE_LIBRARY}" FREETYPE_LIBRARY)
-endif()
-
-unset(FREETYPE_FIND_ARGS)
-
-# set the user variables
-if(FREETYPE_INCLUDE_DIR_ft2build AND FREETYPE_INCLUDE_DIR_freetype2)
-  set(FREETYPE_INCLUDE_DIRS "${FREETYPE_INCLUDE_DIR_ft2build};${FREETYPE_INCLUDE_DIR_freetype2}")
-  list(REMOVE_DUPLICATES FREETYPE_INCLUDE_DIRS)
-endif()
-set(FREETYPE_LIBRARIES "${FREETYPE_LIBRARY}")
-
-if(EXISTS "${FREETYPE_INCLUDE_DIR_freetype2}/freetype/freetype.h")
-  set(FREETYPE_H "${FREETYPE_INCLUDE_DIR_freetype2}/freetype/freetype.h")
-elseif(EXISTS "${FREETYPE_INCLUDE_DIR_freetype2}/freetype.h")
-  set(FREETYPE_H "${FREETYPE_INCLUDE_DIR_freetype2}/freetype.h")
-endif()
-
-if(FREETYPE_INCLUDE_DIR_freetype2 AND FREETYPE_H)
-  file(STRINGS "${FREETYPE_H}" freetype_version_str
-       REGEX "^#[\t ]*define[\t ]+FREETYPE_(MAJOR|MINOR|PATCH)[\t ]+[0-9]+$")
-
-  unset(FREETYPE_VERSION_STRING)
-  foreach(VPART MAJOR MINOR PATCH)
-    foreach(VLINE ${freetype_version_str})
-      if(VLINE MATCHES "^#[\t ]*define[\t ]+FREETYPE_${VPART}[\t ]+([0-9]+)$")
-        set(FREETYPE_VERSION_PART "${CMAKE_MATCH_1}")
-        if(FREETYPE_VERSION_STRING)
-          string(APPEND FREETYPE_VERSION_STRING ".${FREETYPE_VERSION_PART}")
-        else()
-          set(FREETYPE_VERSION_STRING "${FREETYPE_VERSION_PART}")
-        endif()
-        unset(FREETYPE_VERSION_PART)
-      endif()
-    endforeach()
-  endforeach()
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-
-find_package_handle_standard_args(
-  Freetype
-  REQUIRED_VARS
-    FREETYPE_LIBRARY
-    FREETYPE_INCLUDE_DIRS
-  VERSION_VAR
-    FREETYPE_VERSION_STRING
-)
-
-mark_as_advanced(
-  FREETYPE_INCLUDE_DIR_freetype2
-  FREETYPE_INCLUDE_DIR_ft2build
-)
-
-if(Freetype_FOUND)
-  if(NOT TARGET Freetype::Freetype)
-    add_library(Freetype::Freetype UNKNOWN IMPORTED)
-    set_target_properties(Freetype::Freetype PROPERTIES
-      INTERFACE_INCLUDE_DIRECTORIES "${FREETYPE_INCLUDE_DIRS}")
-
-    if(FREETYPE_LIBRARY_RELEASE)
-      set_property(TARGET Freetype::Freetype APPEND PROPERTY
-        IMPORTED_CONFIGURATIONS RELEASE)
-      set_target_properties(Freetype::Freetype PROPERTIES
-        IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
-        IMPORTED_LOCATION_RELEASE "${FREETYPE_LIBRARY_RELEASE}")
-    endif()
-
-    if(FREETYPE_LIBRARY_DEBUG)
-      set_property(TARGET Freetype::Freetype APPEND PROPERTY
-        IMPORTED_CONFIGURATIONS DEBUG)
-      set_target_properties(Freetype::Freetype PROPERTIES
-        IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
-        IMPORTED_LOCATION_DEBUG "${FREETYPE_LIBRARY_DEBUG}")
-    endif()
-
-    if(NOT FREETYPE_LIBRARY_RELEASE AND NOT FREETYPE_LIBRARY_DEBUG)
-      set_target_properties(Freetype::Freetype PROPERTIES
-        IMPORTED_LINK_INTERFACE_LANGUAGES "C"
-        IMPORTED_LOCATION "${FREETYPE_LIBRARY}")
-    endif()
-  endif()
-endif()
diff --git a/share/cmake-3.18/Modules/FindGDAL.cmake b/share/cmake-3.18/Modules/FindGDAL.cmake
deleted file mode 100644
index fde84d4..0000000
--- a/share/cmake-3.18/Modules/FindGDAL.cmake
+++ /dev/null
@@ -1,165 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindGDAL
---------
-
-Find Geospatial Data Abstraction Library (GDAL).
-
-IMPORTED Targets
-^^^^^^^^^^^^^^^^
-
-This module defines :prop_tgt:`IMPORTED` target ``GDAL::GDAL``
-if GDAL has been found.
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-This module will set the following variables in your project:
-
-``GDAL_FOUND``
-  True if GDAL is found.
-``GDAL_INCLUDE_DIRS``
-  Include directories for GDAL headers.
-``GDAL_LIBRARIES``
-  Libraries to link to GDAL.
-``GDAL_VERSION``
-  The version of GDAL found.
-
-Cache variables
-^^^^^^^^^^^^^^^
-
-The following cache variables may also be set:
-
-``GDAL_LIBRARY``
-  The libgdal library file.
-``GDAL_INCLUDE_DIR``
-  The directory containing ``gdal.h``.
-
-Hints
-^^^^^
-
-Set ``GDAL_DIR`` or ``GDAL_ROOT`` in the environment to specify the
-GDAL installation prefix.
-#]=======================================================================]
-
-# $GDALDIR is an environment variable that would
-# correspond to the ./configure --prefix=$GDAL_DIR
-# used in building gdal.
-#
-# Created by Eric Wing. I'm not a gdal user, but OpenSceneGraph uses it
-# for osgTerrain so I whipped this module together for completeness.
-# I actually don't know the conventions or where files are typically
-# placed in distros.
-# Any real gdal users are encouraged to correct this (but please don't
-# break the OS X framework stuff when doing so which is what usually seems
-# to happen).
-
-# This makes the presumption that you are include gdal.h like
-#
-#include "gdal.h"
-
-find_path(GDAL_INCLUDE_DIR gdal.h
-  HINTS
-    ENV GDAL_DIR
-    ENV GDAL_ROOT
-  PATH_SUFFIXES
-     include/gdal
-     include/GDAL
-     include
-)
-
-if(UNIX)
-    # Use gdal-config to obtain the library version (this should hopefully
-    # allow us to -lgdal1.x.y where x.y are correct version)
-    # For some reason, libgdal development packages do not contain
-    # libgdal.so...
-    find_program(GDAL_CONFIG gdal-config
-        HINTS
-          ENV GDAL_DIR
-          ENV GDAL_ROOT
-        PATH_SUFFIXES bin
-    )
-
-    if(GDAL_CONFIG)
-        exec_program(${GDAL_CONFIG} ARGS --libs OUTPUT_VARIABLE GDAL_CONFIG_LIBS)
-
-        if(GDAL_CONFIG_LIBS)
-            # treat the output as a command line and split it up
-            separate_arguments(args NATIVE_COMMAND "${GDAL_CONFIG_LIBS}")
-
-            # only consider libraries whose name matches this pattern
-            set(name_pattern "[gG][dD][aA][lL]")
-
-            # consider each entry as a possible library path, name, or parent directory
-            foreach(arg IN LISTS args)
-                # library name
-                if("${arg}" MATCHES "^-l(.*)$")
-                    set(lib "${CMAKE_MATCH_1}")
-
-                    # only consider libraries whose name matches the expected pattern
-                    if("${lib}" MATCHES "${name_pattern}")
-                        list(APPEND _gdal_lib "${lib}")
-                    endif()
-                # library search path
-                elseif("${arg}" MATCHES "^-L(.*)$")
-                    list(APPEND _gdal_libpath "${CMAKE_MATCH_1}")
-                # assume this is a full path to a library
-                elseif(IS_ABSOLUTE "${arg}" AND EXISTS "${arg}")
-                    # extract the file name
-                    get_filename_component(lib "${arg}" NAME)
-
-                    # only consider libraries whose name matches the expected pattern
-                    if(NOT "${lib}" MATCHES "${name_pattern}")
-                        continue()
-                    endif()
-
-                    # extract the file directory
-                    get_filename_component(dir "${arg}" DIRECTORY)
-
-                    # remove library prefixes/suffixes
-                    string(REGEX REPLACE "^(${CMAKE_SHARED_LIBRARY_PREFIX}|${CMAKE_STATIC_LIBRARY_PREFIX})" "" lib "${lib}")
-                    string(REGEX REPLACE "(${CMAKE_SHARED_LIBRARY_SUFFIX}|${CMAKE_STATIC_LIBRARY_SUFFIX})$" "" lib "${lib}")
-
-                    # use the file name and directory as hints
-                    list(APPEND _gdal_libpath "${dir}")
-                    list(APPEND _gdal_lib "${lib}")
-                endif()
-            endforeach()
-        endif()
-    endif()
-endif()
-
-find_library(GDAL_LIBRARY
-  NAMES ${_gdal_lib} gdal gdal_i gdal1.5.0 gdal1.4.0 gdal1.3.2 GDAL
-  HINTS
-     ENV GDAL_DIR
-     ENV GDAL_ROOT
-     ${_gdal_libpath}
-  PATH_SUFFIXES lib
-)
-
-if (EXISTS "${GDAL_INCLUDE_DIR}/gdal_version.h")
-    file(STRINGS "${GDAL_INCLUDE_DIR}/gdal_version.h" _gdal_version
-        REGEX "GDAL_RELEASE_NAME")
-    string(REGEX REPLACE ".*\"\(.*\)\"" "\\1" GDAL_VERSION "${_gdal_version}")
-    unset(_gdal_version)
-else ()
-    set(GDAL_VERSION GDAL_VERSION-NOTFOUND)
-endif ()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(GDAL
-    VERSION_VAR GDAL_VERSION
-    REQUIRED_VARS GDAL_LIBRARY GDAL_INCLUDE_DIR)
-
-if (GDAL_FOUND AND NOT TARGET GDAL::GDAL)
-    add_library(GDAL::GDAL UNKNOWN IMPORTED)
-    set_target_properties(GDAL::GDAL PROPERTIES
-        IMPORTED_LOCATION "${GDAL_LIBRARY}"
-        INTERFACE_INCLUDE_DIRECTORIES "${GDAL_INCLUDE_DIR}")
-endif ()
-
-set(GDAL_LIBRARIES ${GDAL_LIBRARY})
-set(GDAL_INCLUDE_DIRS ${GDAL_INCLUDE_DIR})
diff --git a/share/cmake-3.18/Modules/FindGIF.cmake b/share/cmake-3.18/Modules/FindGIF.cmake
deleted file mode 100644
index d5a143e..0000000
--- a/share/cmake-3.18/Modules/FindGIF.cmake
+++ /dev/null
@@ -1,127 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindGIF
--------
-
-This finds the Graphics Interchange Format (GIF) library (``giflib``)
-
-Imported targets
-^^^^^^^^^^^^^^^^
-
-This module defines the following :prop_tgt:`IMPORTED` target:
-
-``GIF::GIF``
-  The ``giflib`` library, if found.
-
-Result variables
-^^^^^^^^^^^^^^^^
-
-This module will set the following variables in your project:
-
-``GIF_FOUND``
-  If false, do not try to use GIF.
-``GIF_INCLUDE_DIRS``
-  where to find gif_lib.h, etc.
-``GIF_LIBRARIES``
-  the libraries needed to use GIF.
-``GIF_VERSION``
-  3, 4 or a full version string (eg 5.1.4) for versions >= 4.1.6.
-
-Cache variables
-^^^^^^^^^^^^^^^
-
-The following cache variables may also be set:
-
-``GIF_INCLUDE_DIR``
-  where to find the GIF headers.
-``GIF_LIBRARY``
-  where to find the GIF library.
-
-Hints
-^^^^^
-
-``GIF_DIR`` is an environment variable that would correspond to the
-``./configure --prefix=$GIF_DIR``.
-#]=======================================================================]
-
-# Created by Eric Wing.
-# Modifications by Alexander Neundorf, Ben Campbell
-
-find_path(GIF_INCLUDE_DIR gif_lib.h
-  HINTS
-    ENV GIF_DIR
-  PATH_SUFFIXES include
-)
-
-# the gif library can have many names :-/
-set(POTENTIAL_GIF_LIBS gif libgif ungif libungif giflib giflib4)
-
-find_library(GIF_LIBRARY
-  NAMES ${POTENTIAL_GIF_LIBS}
-  HINTS
-    ENV GIF_DIR
-  PATH_SUFFIXES lib
-)
-
-# Very basic version detection.
-# The GIF_LIB_VERSION string in gif_lib.h seems to be unreliable, since it seems
-# to be always " Version 2.0, " in versions 3.x of giflib.
-# In version 4 the member UserData was added to GifFileType, so we check for this
-# one.
-# Versions after 4.1.6 define GIFLIB_MAJOR, GIFLIB_MINOR, and GIFLIB_RELEASE
-# see http://giflib.sourceforge.net/gif_lib.html#compatibility
-if(GIF_INCLUDE_DIR)
-  include(${CMAKE_CURRENT_LIST_DIR}/CMakePushCheckState.cmake)
-  include(${CMAKE_CURRENT_LIST_DIR}/CheckStructHasMember.cmake)
-  CMAKE_PUSH_CHECK_STATE()
-  set(CMAKE_REQUIRED_QUIET ${GIF_FIND_QUIETLY})
-  set(CMAKE_REQUIRED_INCLUDES "${GIF_INCLUDE_DIR}")
-
-  # Check for the specific version defines (>=4.1.6 only)
-  file(STRINGS ${GIF_INCLUDE_DIR}/gif_lib.h _GIF_DEFS REGEX "^[ \t]*#define[ \t]+GIFLIB_(MAJOR|MINOR|RELEASE)")
-  if(_GIF_DEFS)
-    # yay - got exact version info
-    string(REGEX REPLACE ".*GIFLIB_MAJOR ([0-9]+).*" "\\1" _GIF_MAJ "${_GIF_DEFS}")
-    string(REGEX REPLACE ".*GIFLIB_MINOR ([0-9]+).*" "\\1" _GIF_MIN "${_GIF_DEFS}")
-    string(REGEX REPLACE ".*GIFLIB_RELEASE ([0-9]+).*" "\\1" _GIF_REL "${_GIF_DEFS}")
-    set(GIF_VERSION "${_GIF_MAJ}.${_GIF_MIN}.${_GIF_REL}")
-  else()
-    # use UserData field to sniff version instead
-    CHECK_STRUCT_HAS_MEMBER(GifFileType UserData gif_lib.h GIF_GifFileType_UserData )
-    if(GIF_GifFileType_UserData)
-      set(GIF_VERSION 4)
-    else()
-      set(GIF_VERSION 3)
-    endif()
-  endif()
-
-  unset(_GIF_MAJ)
-  unset(_GIF_MIN)
-  unset(_GIF_REL)
-  unset(_GIF_DEFS)
-  CMAKE_POP_CHECK_STATE()
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(GIF  REQUIRED_VARS  GIF_LIBRARY  GIF_INCLUDE_DIR
-                                       VERSION_VAR GIF_VERSION )
-
-if(GIF_FOUND)
-  set(GIF_INCLUDE_DIRS "${GIF_INCLUDE_DIR}")
-  set(GIF_LIBRARIES ${GIF_LIBRARY})
-
-  if(NOT TARGET GIF::GIF)
-    add_library(GIF::GIF UNKNOWN IMPORTED)
-    set_target_properties(GIF::GIF PROPERTIES
-      INTERFACE_INCLUDE_DIRECTORIES "${GIF_INCLUDE_DIRS}")
-    if(EXISTS "${GIF_LIBRARY}")
-      set_target_properties(GIF::GIF PROPERTIES
-        IMPORTED_LINK_INTERFACE_LANGUAGES "C"
-        IMPORTED_LOCATION "${GIF_LIBRARY}")
-    endif()
-  endif()
-endif()
-
-mark_as_advanced(GIF_INCLUDE_DIR GIF_LIBRARY)
diff --git a/share/cmake-3.18/Modules/FindGLEW.cmake b/share/cmake-3.18/Modules/FindGLEW.cmake
deleted file mode 100644
index 27ffa13..0000000
--- a/share/cmake-3.18/Modules/FindGLEW.cmake
+++ /dev/null
@@ -1,342 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindGLEW
---------
-
-Find the OpenGL Extension Wrangler Library (GLEW)
-
-Input Variables
-^^^^^^^^^^^^^^^
-
-The following variables may be set to influence this module's behavior:
-
-``GLEW_USE_STATIC_LIBS``
-  to find and create :prop_tgt:`IMPORTED` target for static linkage.
-
-``GLEW_VERBOSE``
-  to output a detailed log of this module.
-
-Imported Targets
-^^^^^^^^^^^^^^^^
-
-This module defines the following :ref:`Imported Targets <Imported Targets>`:
-
-
-``GLEW::glew``
-  The GLEW shared library.
-``GLEW::glew_s``
-  The GLEW static library, if ``GLEW_USE_STATIC_LIBS`` is set to ``TRUE``.
-``GLEW::GLEW``
-  Duplicates either ``GLEW::glew`` or ``GLEW::glew_s`` based on availability.
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-This module defines the following variables:
-
-``GLEW_INCLUDE_DIRS``
-  include directories for GLEW
-``GLEW_LIBRARIES``
-  libraries to link against GLEW
-``GLEW_SHARED_LIBRARIES``
-  libraries to link against shared GLEW
-``GLEW_STATIC_LIBRARIES``
-  libraries to link against static GLEW
-``GLEW_FOUND``
-  true if GLEW has been found and can be used
-``GLEW_VERSION``
-  GLEW version
-``GLEW_VERSION_MAJOR``
-  GLEW major version
-``GLEW_VERSION_MINOR``
-  GLEW minor version
-``GLEW_VERSION_MICRO``
-  GLEW micro version
-
-#]=======================================================================]
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-
-find_package(GLEW CONFIG QUIET)
-
-if(GLEW_FOUND)
-  find_package_handle_standard_args(GLEW DEFAULT_MSG GLEW_CONFIG)
-  return()
-endif()
-
-if(GLEW_VERBOSE)
-  message(STATUS "FindGLEW: did not find GLEW CMake config file. Searching for libraries.")
-endif()
-
-if(APPLE)
-  find_package(OpenGL QUIET)
-
-  if(OpenGL_FOUND)
-    if(GLEW_VERBOSE)
-      message(STATUS "FindGLEW: Found OpenGL Framework.")
-      message(STATUS "FindGLEW: OPENGL_LIBRARIES: ${OPENGL_LIBRARIES}")
-    endif()
-  else()
-    if(GLEW_VERBOSE)
-      message(STATUS "FindGLEW: could not find GLEW library.")
-    endif()
-    return()
-  endif()
-endif()
-
-
-function(__glew_set_find_library_suffix shared_or_static)
-  if((UNIX AND NOT APPLE) AND "${shared_or_static}" MATCHES "SHARED")
-    set(CMAKE_FIND_LIBRARY_SUFFIXES ".so" PARENT_SCOPE)
-  elseif((UNIX AND NOT APPLE) AND "${shared_or_static}" MATCHES "STATIC")
-    set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" PARENT_SCOPE)
-  elseif(APPLE AND "${shared_or_static}" MATCHES "SHARED")
-    set(CMAKE_FIND_LIBRARY_SUFFIXES ".dylib;.so" PARENT_SCOPE)
-  elseif(APPLE AND "${shared_or_static}" MATCHES "STATIC")
-    set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" PARENT_SCOPE)
-  elseif(WIN32 AND "${shared_or_static}" MATCHES "SHARED")
-    set(CMAKE_FIND_LIBRARY_SUFFIXES ".lib" PARENT_SCOPE)
-  elseif(WIN32 AND "${shared_or_static}" MATCHES "STATIC")
-    set(CMAKE_FIND_LIBRARY_SUFFIXES ".lib;.dll.a" PARENT_SCOPE)
-  endif()
-
-  if(GLEW_VERBOSE)
-    message(STATUS "FindGLEW: CMAKE_FIND_LIBRARY_SUFFIXES for ${shared_or_static}: ${CMAKE_FIND_LIBRARY_SUFFIXES}")
-  endif()
-endfunction()
-
-
-if(GLEW_VERBOSE)
-  if(DEFINED GLEW_USE_STATIC_LIBS)
-    message(STATUS "FindGLEW: GLEW_USE_STATIC_LIBS: ${GLEW_USE_STATIC_LIBS}.")
-  else()
-    message(STATUS "FindGLEW: GLEW_USE_STATIC_LIBS is undefined. Treated as FALSE.")
-  endif()
-endif()
-
-find_path(GLEW_INCLUDE_DIR GL/glew.h)
-mark_as_advanced(GLEW_INCLUDE_DIR)
-
-set(GLEW_INCLUDE_DIRS ${GLEW_INCLUDE_DIR})
-
-if(GLEW_VERBOSE)
-  message(STATUS "FindGLEW: GLEW_INCLUDE_DIR: ${GLEW_INCLUDE_DIR}")
-  message(STATUS "FindGLEW: GLEW_INCLUDE_DIRS: ${GLEW_INCLUDE_DIRS}")
-endif()
-
-if("${CMAKE_GENERATOR_PLATFORM}" MATCHES "x64" OR "${CMAKE_GENERATOR}" MATCHES "Win64")
-  set(_arch "x64")
-else()
-  set(_arch "Win32")
-endif()
-
-
-set(__GLEW_CURRENT_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
-
-__glew_set_find_library_suffix(SHARED)
-
-find_library(GLEW_SHARED_LIBRARY_RELEASE
-             NAMES GLEW glew glew32
-             PATH_SUFFIXES lib lib64 libx32 lib/Release/${_arch}
-             PATHS ENV GLEW_ROOT)
-
-find_library(GLEW_SHARED_LIBRARY_DEBUG
-             NAMES GLEWd glewd glew32d
-             PATH_SUFFIXES lib lib64
-             PATHS ENV GLEW_ROOT)
-
-
-__glew_set_find_library_suffix(STATIC)
-
-find_library(GLEW_STATIC_LIBRARY_RELEASE
-             NAMES GLEW glew glew32s
-             PATH_SUFFIXES lib lib64 libx32 lib/Release/${_arch}
-             PATHS ENV GLEW_ROOT)
-
-find_library(GLEW_STATIC_LIBRARY_DEBUG
-             NAMES GLEWds glewds glew32ds
-             PATH_SUFFIXES lib lib64
-             PATHS ENV GLEW_ROOT)
-
-set(CMAKE_FIND_LIBRARY_SUFFIXES ${__GLEW_CURRENT_FIND_LIBRARY_SUFFIXES})
-unset(__GLEW_CURRENT_FIND_LIBRARY_SUFFIXES)
-
-include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
-
-select_library_configurations(GLEW_SHARED)
-select_library_configurations(GLEW_STATIC)
-
-if(NOT GLEW_USE_STATIC_LIBS)
-  set(GLEW_LIBRARIES ${GLEW_SHARED_LIBRARY})
-else()
-  set(GLEW_LIBRARIES ${GLEW_STATIC_LIBRARY})
-endif()
-
-
-if(GLEW_VERBOSE)
-  message(STATUS "FindGLEW: GLEW_SHARED_LIBRARY_RELEASE: ${GLEW_SHARED_LIBRARY_RELEASE}")
-  message(STATUS "FindGLEW: GLEW_STATIC_LIBRARY_RELEASE: ${GLEW_STATIC_LIBRARY_RELEASE}")
-  message(STATUS "FindGLEW: GLEW_SHARED_LIBRARY_DEBUG: ${GLEW_SHARED_LIBRARY_DEBUG}")
-  message(STATUS "FindGLEW: GLEW_STATIC_LIBRARY_DEBUG: ${GLEW_STATIC_LIBRARY_DEBUG}")
-  message(STATUS "FindGLEW: GLEW_SHARED_LIBRARY: ${GLEW_SHARED_LIBRARY}")
-  message(STATUS "FindGLEW: GLEW_STATIC_LIBRARY: ${GLEW_STATIC_LIBRARY}")
-  message(STATUS "FindGLEW: GLEW_LIBRARIES: ${GLEW_LIBRARIES}")
-endif()
-
-
-# Read version from GL/glew.h file
-if(EXISTS "${GLEW_INCLUDE_DIR}/GL/glew.h")
-  file(STRINGS "${GLEW_INCLUDE_DIR}/GL/glew.h" _contents REGEX "^VERSION_.+ [0-9]+")
-  if(_contents)
-    string(REGEX REPLACE ".*VERSION_MAJOR[ \t]+([0-9]+).*" "\\1" GLEW_VERSION_MAJOR "${_contents}")
-    string(REGEX REPLACE ".*VERSION_MINOR[ \t]+([0-9]+).*" "\\1" GLEW_VERSION_MINOR "${_contents}")
-    string(REGEX REPLACE ".*VERSION_MICRO[ \t]+([0-9]+).*" "\\1" GLEW_VERSION_MICRO "${_contents}")
-    set(GLEW_VERSION "${GLEW_VERSION_MAJOR}.${GLEW_VERSION_MINOR}.${GLEW_VERSION_MICRO}")
-  endif()
-endif()
-
-if(GLEW_VERBOSE)
-  message(STATUS "FindGLEW: GLEW_VERSION_MAJOR: ${GLEW_VERSION_MAJOR}")
-  message(STATUS "FindGLEW: GLEW_VERSION_MINOR: ${GLEW_VERSION_MINOR}")
-  message(STATUS "FindGLEW: GLEW_VERSION_MICRO: ${GLEW_VERSION_MICRO}")
-  message(STATUS "FindGLEW: GLEW_VERSION: ${GLEW_VERSION}")
-endif()
-
-find_package_handle_standard_args(GLEW
-                                  REQUIRED_VARS GLEW_INCLUDE_DIRS GLEW_LIBRARIES
-                                  VERSION_VAR GLEW_VERSION)
-
-if(NOT GLEW_FOUND)
-  if(GLEW_VERBOSE)
-    message(STATUS "FindGLEW: could not find GLEW library.")
-  endif()
-  return()
-endif()
-
-
-if(NOT TARGET GLEW::glew AND NOT GLEW_USE_STATIC_LIBS)
-  if(GLEW_VERBOSE)
-    message(STATUS "FindGLEW: Creating GLEW::glew imported target.")
-  endif()
-
-  add_library(GLEW::glew UNKNOWN IMPORTED)
-
-  set_target_properties(GLEW::glew
-                        PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${GLEW_INCLUDE_DIRS}")
-
-  if(APPLE)
-    set_target_properties(GLEW::glew
-                          PROPERTIES INTERFACE_LINK_LIBRARIES OpenGL::GL)
-  endif()
-
-  if(GLEW_SHARED_LIBRARY_RELEASE)
-    set_property(TARGET GLEW::glew
-                 APPEND
-                 PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
-
-    set_target_properties(GLEW::glew
-                          PROPERTIES IMPORTED_LOCATION_RELEASE "${GLEW_SHARED_LIBRARY_RELEASE}")
-  endif()
-
-  if(GLEW_SHARED_LIBRARY_DEBUG)
-    set_property(TARGET GLEW::glew
-                 APPEND
-                 PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
-
-    set_target_properties(GLEW::glew
-                          PROPERTIES IMPORTED_LOCATION_DEBUG "${GLEW_SHARED_LIBRARY_DEBUG}")
-  endif()
-
-elseif(NOT TARGET GLEW::glew_s AND GLEW_USE_STATIC_LIBS)
-  if(GLEW_VERBOSE)
-    message(STATUS "FindGLEW: Creating GLEW::glew_s imported target.")
-  endif()
-
-  add_library(GLEW::glew_s UNKNOWN IMPORTED)
-
-  set_target_properties(GLEW::glew_s
-                        PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${GLEW_INCLUDE_DIRS}")
-
-  if(APPLE)
-    set_target_properties(GLEW::glew_s
-                          PROPERTIES INTERFACE_LINK_LIBRARIES OpenGL::GL)
-  endif()
-
-  if(GLEW_STATIC_LIBRARY_RELEASE)
-    set_property(TARGET GLEW::glew_s
-                 APPEND
-                 PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
-
-    set_target_properties(GLEW::glew_s
-                          PROPERTIES IMPORTED_LOCATION_RELEASE "${GLEW_STATIC_LIBRARY_RELEASE}")
-  endif()
-
-  if(GLEW_STATIC_LIBRARY_DEBUG)
-    set_property(TARGET GLEW::glew_s
-                 APPEND
-                 PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
-
-    set_target_properties(GLEW::glew_s
-                          PROPERTIES IMPORTED_LOCATION_DEBUG "${GLEW_STATIC_LIBRARY_DEBUG}")
-  endif()
-endif()
-
-if(NOT TARGET GLEW::GLEW)
-  if(GLEW_VERBOSE)
-    message(STATUS "FindGLEW: Creating GLEW::GLEW imported target.")
-  endif()
-
-  add_library(GLEW::GLEW UNKNOWN IMPORTED)
-
-  set_target_properties(GLEW::GLEW
-                        PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${GLEW_INCLUDE_DIRS}")
-
-  if(APPLE)
-    set_target_properties(GLEW::GLEW
-                          PROPERTIES INTERFACE_LINK_LIBRARIES OpenGL::GL)
-  endif()
-
-  if(TARGET GLEW::glew)
-    if(GLEW_SHARED_LIBRARY_RELEASE)
-      set_property(TARGET GLEW::GLEW
-                   APPEND
-                   PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
-
-      set_target_properties(GLEW::GLEW
-                            PROPERTIES IMPORTED_LOCATION_RELEASE "${GLEW_SHARED_LIBRARY_RELEASE}")
-    endif()
-
-    if(GLEW_SHARED_LIBRARY_DEBUG)
-      set_property(TARGET GLEW::GLEW
-                   APPEND
-                   PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
-
-      set_target_properties(GLEW::GLEW
-                            PROPERTIES IMPORTED_LOCATION_DEBUG "${GLEW_SHARED_LIBRARY_DEBUG}")
-    endif()
-
-  elseif(TARGET GLEW::glew_s)
-    if(GLEW_STATIC_LIBRARY_RELEASE)
-      set_property(TARGET GLEW::GLEW
-                   APPEND
-                   PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
-
-      set_target_properties(GLEW::GLEW
-                            PROPERTIES IMPORTED_LOCATION_RELEASE "${GLEW_STATIC_LIBRARY_RELEASE}")
-    endif()
-
-    if(GLEW_STATIC_LIBRARY_DEBUG AND GLEW_USE_STATIC_LIBS)
-      set_property(TARGET GLEW::GLEW
-                   APPEND
-                   PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
-
-      set_target_properties(GLEW::GLEW
-                            PROPERTIES IMPORTED_LOCATION_DEBUG "${GLEW_STATIC_LIBRARY_DEBUG}")
-    endif()
-
-  elseif(GLEW_VERBOSE)
-    message(WARNING "FindGLEW: no `GLEW::glew` or `GLEW::glew_s` target was created. Something went wrong in FindGLEW target creation.")
-  endif()
-endif()
diff --git a/share/cmake-3.18/Modules/FindGLUT.cmake b/share/cmake-3.18/Modules/FindGLUT.cmake
deleted file mode 100644
index a22bf5b..0000000
--- a/share/cmake-3.18/Modules/FindGLUT.cmake
+++ /dev/null
@@ -1,193 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindGLUT
---------
-
-Find OpenGL Utility Toolkit (GLUT) library and include files.
-
-IMPORTED Targets
-^^^^^^^^^^^^^^^^
-
-This module defines the :prop_tgt:`IMPORTED` targets:
-
-``GLUT::GLUT``
- Defined if the system has GLUT.
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-This module sets the following variables:
-
-::
-
-  GLUT_INCLUDE_DIR, where to find GL/glut.h, etc.
-  GLUT_LIBRARIES, the libraries to link against
-  GLUT_FOUND, If false, do not try to use GLUT.
-
-Also defined, but not for general use are:
-
-::
-
-  GLUT_glut_LIBRARY = the full path to the glut library.
-  GLUT_Xmu_LIBRARY  = the full path to the Xmu library.
-  GLUT_Xi_LIBRARY   = the full path to the Xi Library.
-#]=======================================================================]
-
-include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
-
-if (WIN32)
-  find_path( GLUT_INCLUDE_DIR NAMES GL/glut.h
-    PATHS  ${GLUT_ROOT_PATH}/include )
-  find_library( GLUT_glut_LIBRARY_RELEASE NAMES glut glut32 freeglut
-    PATHS
-    ${OPENGL_LIBRARY_DIR}
-    ${GLUT_ROOT_PATH}/Release
-    )
-  find_library( GLUT_glut_LIBRARY_DEBUG NAMES freeglutd
-    PATHS
-    ${OPENGL_LIBRARY_DIR}
-    ${GLUT_ROOT_PATH}/Debug
-    )
-  mark_as_advanced(GLUT_glut_LIBRARY_RELEASE GLUT_glut_LIBRARY_DEBUG)
-  select_library_configurations(GLUT_glut)
-else ()
-
-  if (APPLE)
-    find_path(GLUT_INCLUDE_DIR glut.h ${OPENGL_LIBRARY_DIR})
-    find_library(GLUT_glut_LIBRARY GLUT DOC "GLUT library for OSX")
-    find_library(GLUT_cocoa_LIBRARY Cocoa DOC "Cocoa framework for OSX")
-    mark_as_advanced(GLUT_glut_LIBRARY GLUT_cocoa_LIBRARY)
-
-    if(GLUT_cocoa_LIBRARY AND NOT TARGET GLUT::Cocoa)
-      add_library(GLUT::Cocoa UNKNOWN IMPORTED)
-      # Cocoa should always be a Framework, but we check to make sure.
-      if(GLUT_cocoa_LIBRARY MATCHES "/([^/]+)\\.framework$")
-        set_target_properties(GLUT::Cocoa PROPERTIES
-          IMPORTED_LOCATION "${GLUT_cocoa_LIBRARY}/${CMAKE_MATCH_1}")
-      else()
-        set_target_properties(GLUT::Cocoa PROPERTIES
-          IMPORTED_LOCATION "${GLUT_cocoa_LIBRARY}")
-      endif()
-    endif()
-  else ()
-
-    if (BEOS)
-
-      set(_GLUT_INC_DIR /boot/develop/headers/os/opengl)
-      set(_GLUT_glut_LIB_DIR /boot/develop/lib/x86)
-
-    else()
-
-      find_library( GLUT_Xi_LIBRARY Xi
-        /usr/openwin/lib
-        )
-      mark_as_advanced(GLUT_Xi_LIBRARY)
-
-      find_library( GLUT_Xmu_LIBRARY Xmu
-        /usr/openwin/lib
-        )
-      mark_as_advanced(GLUT_Xmu_LIBRARY)
-
-      if(GLUT_Xi_LIBRARY AND NOT TARGET GLUT::Xi)
-        add_library(GLUT::Xi UNKNOWN IMPORTED)
-        set_target_properties(GLUT::Xi PROPERTIES
-          IMPORTED_LOCATION "${GLUT_Xi_LIBRARY}")
-      endif()
-
-      if(GLUT_Xmu_LIBRARY AND NOT TARGET GLUT::Xmu)
-        add_library(GLUT::Xmu UNKNOWN IMPORTED)
-        set_target_properties(GLUT::Xmu PROPERTIES
-          IMPORTED_LOCATION "${GLUT_Xmu_LIBRARY}")
-      endif()
-
-    endif ()
-
-    find_path( GLUT_INCLUDE_DIR GL/glut.h
-      /usr/include/GL
-      /usr/openwin/share/include
-      /usr/openwin/include
-      /opt/graphics/OpenGL/include
-      /opt/graphics/OpenGL/contrib/libglut
-      ${_GLUT_INC_DIR}
-      )
-
-    find_library( GLUT_glut_LIBRARY glut
-      /usr/openwin/lib
-      ${_GLUT_glut_LIB_DIR}
-      )
-    mark_as_advanced(GLUT_glut_LIBRARY)
-
-    unset(_GLUT_INC_DIR)
-    unset(_GLUT_glut_LIB_DIR)
-
-  endif ()
-
-endif ()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(GLUT REQUIRED_VARS GLUT_glut_LIBRARY GLUT_INCLUDE_DIR)
-
-if (GLUT_FOUND)
-  # Is -lXi and -lXmu required on all platforms that have it?
-  # If not, we need some way to figure out what platform we are on.
-  set( GLUT_LIBRARIES
-    ${GLUT_glut_LIBRARY}
-    )
-  foreach(v GLUT_Xmu_LIBRARY GLUT_Xi_LIBRARY GLUT_cocoa_LIBRARY)
-    if(${v})
-      list(APPEND GLUT_LIBRARIES ${${v}})
-    endif()
-  endforeach()
-
-  if(NOT TARGET GLUT::GLUT)
-    add_library(GLUT::GLUT UNKNOWN IMPORTED)
-    set_target_properties(GLUT::GLUT PROPERTIES
-      INTERFACE_INCLUDE_DIRECTORIES "${GLUT_INCLUDE_DIR}")
-    if(GLUT_glut_LIBRARY MATCHES "/([^/]+)\\.framework$")
-      set_target_properties(GLUT::GLUT PROPERTIES
-        IMPORTED_LOCATION "${GLUT_glut_LIBRARY}/${CMAKE_MATCH_1}")
-    else()
-      if(GLUT_glut_LIBRARY_RELEASE)
-        set_property(TARGET GLUT::GLUT APPEND PROPERTY
-          IMPORTED_CONFIGURATIONS RELEASE)
-        set_target_properties(GLUT::GLUT PROPERTIES
-          IMPORTED_LOCATION_RELEASE "${GLUT_glut_LIBRARY_RELEASE}")
-      endif()
-
-      if(GLUT_glut_LIBRARY_DEBUG)
-        set_property(TARGET GLUT::GLUT APPEND PROPERTY
-          IMPORTED_CONFIGURATIONS DEBUG)
-        set_target_properties(GLUT::GLUT PROPERTIES
-          IMPORTED_LOCATION_DEBUG "${GLUT_glut_LIBRARY_DEBUG}")
-      endif()
-
-      if(NOT GLUT_glut_LIBRARY_RELEASE AND NOT GLUT_glut_LIBRARY_DEBUG)
-        set_property(TARGET GLUT::GLUT APPEND PROPERTY
-          IMPORTED_LOCATION "${GLUT_glut_LIBRARY}")
-      endif()
-    endif()
-
-    if(TARGET GLUT::Xmu)
-      set_property(TARGET GLUT::GLUT APPEND
-        PROPERTY INTERFACE_LINK_LIBRARIES GLUT::Xmu)
-    endif()
-
-    if(TARGET GLUT::Xi)
-      set_property(TARGET GLUT::GLUT APPEND
-        PROPERTY INTERFACE_LINK_LIBRARIES GLUT::Xi)
-    endif()
-
-    if(TARGET GLUT::Cocoa)
-      set_property(TARGET GLUT::GLUT APPEND
-        PROPERTY INTERFACE_LINK_LIBRARIES GLUT::Cocoa)
-    endif()
-  endif()
-
-  #The following deprecated settings are for backwards compatibility with CMake1.4
-  set (GLUT_LIBRARY ${GLUT_LIBRARIES})
-  set (GLUT_INCLUDE_PATH ${GLUT_INCLUDE_DIR})
-endif()
-
-mark_as_advanced(GLUT_INCLUDE_DIR)
diff --git a/share/cmake-3.18/Modules/FindGSL.cmake b/share/cmake-3.18/Modules/FindGSL.cmake
deleted file mode 100644
index da1b3c4..0000000
--- a/share/cmake-3.18/Modules/FindGSL.cmake
+++ /dev/null
@@ -1,229 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindGSL
---------
-
-Find the native GNU Scientific Library (GSL) includes and libraries.
-
-The GNU Scientific Library (GSL) is a numerical library for C and C++
-programmers. It is free software under the GNU General Public
-License.
-
-Imported Targets
-^^^^^^^^^^^^^^^^
-
-If GSL is found, this module defines the following :prop_tgt:`IMPORTED`
-targets::
-
- GSL::gsl      - The main GSL library.
- GSL::gslcblas - The CBLAS support library used by GSL.
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-This module will set the following variables in your project::
-
- GSL_FOUND          - True if GSL found on the local system
- GSL_INCLUDE_DIRS   - Location of GSL header files.
- GSL_LIBRARIES      - The GSL libraries.
- GSL_VERSION        - The version of the discovered GSL install.
-
-Hints
-^^^^^
-
-Set ``GSL_ROOT_DIR`` to a directory that contains a GSL installation.
-
-This script expects to find libraries at ``$GSL_ROOT_DIR/lib`` and the GSL
-headers at ``$GSL_ROOT_DIR/include/gsl``.  The library directory may
-optionally provide Release and Debug folders. If available, the libraries
-named ``gsld``, ``gslblasd`` or ``cblasd`` are recognized as debug libraries.
-For Unix-like systems, this script will use ``$GSL_ROOT_DIR/bin/gsl-config``
-(if found) to aid in the discovery of GSL.
-
-Cache Variables
-^^^^^^^^^^^^^^^
-
-This module may set the following variables depending on platform and type
-of GSL installation discovered.  These variables may optionally be set to
-help this module find the correct files::
-
- GSL_CBLAS_LIBRARY       - Location of the GSL CBLAS library.
- GSL_CBLAS_LIBRARY_DEBUG - Location of the debug GSL CBLAS library (if any).
- GSL_CONFIG_EXECUTABLE   - Location of the ``gsl-config`` script (if any).
- GSL_LIBRARY             - Location of the GSL library.
- GSL_LIBRARY_DEBUG       - Location of the debug GSL library (if any).
-
-#]=======================================================================]
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-
-#=============================================================================
-# If the user has provided ``GSL_ROOT_DIR``, use it!  Choose items found
-# at this location over system locations.
-if( EXISTS "$ENV{GSL_ROOT_DIR}" )
-  file( TO_CMAKE_PATH "$ENV{GSL_ROOT_DIR}" GSL_ROOT_DIR )
-  set( GSL_ROOT_DIR "${GSL_ROOT_DIR}" CACHE PATH "Prefix for GSL installation." )
-endif()
-if( NOT EXISTS "${GSL_ROOT_DIR}" )
-  set( GSL_USE_PKGCONFIG ON )
-endif()
-
-#=============================================================================
-# As a first try, use the PkgConfig module.  This will work on many
-# *NIX systems.  See :module:`findpkgconfig`
-# This will return ``GSL_INCLUDEDIR`` and ``GSL_LIBDIR`` used below.
-if( GSL_USE_PKGCONFIG )
-  find_package(PkgConfig)
-  pkg_check_modules( GSL QUIET gsl )
-
-  if( EXISTS "${GSL_INCLUDEDIR}" )
-    get_filename_component( GSL_ROOT_DIR "${GSL_INCLUDEDIR}" DIRECTORY CACHE)
-  endif()
-endif()
-
-#=============================================================================
-# Set GSL_INCLUDE_DIRS and GSL_LIBRARIES. If we skipped the PkgConfig step, try
-# to find the libraries at $GSL_ROOT_DIR (if provided) or in standard system
-# locations.  These find_library and find_path calls will prefer custom
-# locations over standard locations (HINTS).  If the requested file is not found
-# at the HINTS location, standard system locations will be still be searched
-# (/usr/lib64 (Redhat), lib/i386-linux-gnu (Debian)).
-
-find_path( GSL_INCLUDE_DIR
-  NAMES gsl/gsl_sf.h
-  HINTS ${GSL_ROOT_DIR}/include ${GSL_INCLUDEDIR}
-)
-find_library( GSL_LIBRARY
-  NAMES gsl
-  HINTS ${GSL_ROOT_DIR}/lib ${GSL_LIBDIR}
-  PATH_SUFFIXES Release Debug
-)
-find_library( GSL_CBLAS_LIBRARY
-  NAMES gslcblas cblas
-  HINTS ${GSL_ROOT_DIR}/lib ${GSL_LIBDIR}
-  PATH_SUFFIXES Release Debug
-)
-# Do we also have debug versions?
-find_library( GSL_LIBRARY_DEBUG
-  NAMES gsld gsl
-  HINTS ${GSL_ROOT_DIR}/lib ${GSL_LIBDIR}
-  PATH_SUFFIXES Debug
-)
-find_library( GSL_CBLAS_LIBRARY_DEBUG
-  NAMES gslcblasd cblasd gslcblas cblas
-  HINTS ${GSL_ROOT_DIR}/lib ${GSL_LIBDIR}
-  PATH_SUFFIXES Debug
-)
-set( GSL_INCLUDE_DIRS ${GSL_INCLUDE_DIR} )
-set( GSL_LIBRARIES ${GSL_LIBRARY} ${GSL_CBLAS_LIBRARY} )
-
-# If we didn't use PkgConfig, try to find the version via gsl-config or by
-# reading gsl_version.h.
-if( NOT GSL_VERSION )
-  # 1. If gsl-config exists, query for the version.
-  find_program( GSL_CONFIG_EXECUTABLE
-    NAMES gsl-config
-    HINTS "${GSL_ROOT_DIR}/bin"
-    )
-  if( EXISTS "${GSL_CONFIG_EXECUTABLE}" )
-    execute_process(
-      COMMAND "${GSL_CONFIG_EXECUTABLE}" --version
-      OUTPUT_VARIABLE GSL_VERSION
-      OUTPUT_STRIP_TRAILING_WHITESPACE )
-  endif()
-
-  # 2. If gsl-config is not available, try looking in gsl/gsl_version.h
-  if( NOT GSL_VERSION AND EXISTS "${GSL_INCLUDE_DIRS}/gsl/gsl_version.h" )
-    file( STRINGS "${GSL_INCLUDE_DIRS}/gsl/gsl_version.h" gsl_version_h_contents REGEX "define GSL_VERSION" )
-    string( REGEX REPLACE ".*([0-9]\\.[0-9][0-9]?).*" "\\1" GSL_VERSION ${gsl_version_h_contents} )
-  endif()
-
-  # might also try scraping the directory name for a regex match "gsl-X.X"
-endif()
-
-#=============================================================================
-# handle the QUIETLY and REQUIRED arguments and set GSL_FOUND to TRUE if all
-# listed variables are TRUE
-find_package_handle_standard_args( GSL
-  FOUND_VAR
-    GSL_FOUND
-  REQUIRED_VARS
-    GSL_INCLUDE_DIR
-    GSL_LIBRARY
-    GSL_CBLAS_LIBRARY
-  VERSION_VAR
-    GSL_VERSION
-    )
-
-mark_as_advanced( GSL_ROOT_DIR GSL_VERSION GSL_LIBRARY GSL_INCLUDE_DIR
-  GSL_CBLAS_LIBRARY GSL_LIBRARY_DEBUG GSL_CBLAS_LIBRARY_DEBUG
-  GSL_USE_PKGCONFIG GSL_CONFIG )
-
-#=============================================================================
-# Register imported libraries:
-# 1. If we can find a Windows .dll file (or if we can find both Debug and
-#    Release libraries), we will set appropriate target properties for these.
-# 2. However, for most systems, we will only register the import location and
-#    include directory.
-
-# Look for dlls, or Release and Debug libraries.
-if(WIN32)
-  string( REPLACE ".lib" ".dll" GSL_LIBRARY_DLL       "${GSL_LIBRARY}" )
-  string( REPLACE ".lib" ".dll" GSL_CBLAS_LIBRARY_DLL "${GSL_CBLAS_LIBRARY}" )
-  string( REPLACE ".lib" ".dll" GSL_LIBRARY_DEBUG_DLL "${GSL_LIBRARY_DEBUG}" )
-  string( REPLACE ".lib" ".dll" GSL_CBLAS_LIBRARY_DEBUG_DLL "${GSL_CBLAS_LIBRARY_DEBUG}" )
-endif()
-
-if( GSL_FOUND AND NOT TARGET GSL::gsl )
-  if( EXISTS "${GSL_LIBRARY_DLL}" AND EXISTS "${GSL_CBLAS_LIBRARY_DLL}")
-
-    # Windows systems with dll libraries.
-    add_library( GSL::gsl      SHARED IMPORTED )
-    add_library( GSL::gslcblas SHARED IMPORTED )
-
-    # Windows with dlls, but only Release libraries.
-    set_target_properties( GSL::gslcblas PROPERTIES
-      IMPORTED_LOCATION_RELEASE         "${GSL_CBLAS_LIBRARY_DLL}"
-      IMPORTED_IMPLIB                   "${GSL_CBLAS_LIBRARY}"
-      INTERFACE_INCLUDE_DIRECTORIES     "${GSL_INCLUDE_DIRS}"
-      IMPORTED_CONFIGURATIONS           Release
-      IMPORTED_LINK_INTERFACE_LANGUAGES "C" )
-    set_target_properties( GSL::gsl PROPERTIES
-      IMPORTED_LOCATION_RELEASE         "${GSL_LIBRARY_DLL}"
-      IMPORTED_IMPLIB                   "${GSL_LIBRARY}"
-      INTERFACE_INCLUDE_DIRECTORIES     "${GSL_INCLUDE_DIRS}"
-      IMPORTED_CONFIGURATIONS           Release
-      IMPORTED_LINK_INTERFACE_LANGUAGES "C"
-      INTERFACE_LINK_LIBRARIES          GSL::gslcblas )
-
-    # If we have both Debug and Release libraries
-    if( EXISTS "${GSL_LIBRARY_DEBUG_DLL}" AND EXISTS "${GSL_CBLAS_LIBRARY_DEBUG_DLL}")
-      set_property( TARGET GSL::gslcblas APPEND PROPERTY IMPORTED_CONFIGURATIONS Debug )
-      set_target_properties( GSL::gslcblas PROPERTIES
-        IMPORTED_LOCATION_DEBUG           "${GSL_CBLAS_LIBRARY_DEBUG_DLL}"
-        IMPORTED_IMPLIB_DEBUG             "${GSL_CBLAS_LIBRARY_DEBUG}" )
-      set_property( TARGET GSL::gsl APPEND PROPERTY IMPORTED_CONFIGURATIONS Debug )
-      set_target_properties( GSL::gsl PROPERTIES
-        IMPORTED_LOCATION_DEBUG           "${GSL_LIBRARY_DEBUG_DLL}"
-        IMPORTED_IMPLIB_DEBUG             "${GSL_LIBRARY_DEBUG}" )
-    endif()
-
-  else()
-
-    # For all other environments (ones without dll libraries), create
-    # the imported library targets.
-    add_library( GSL::gsl      UNKNOWN IMPORTED )
-    add_library( GSL::gslcblas UNKNOWN IMPORTED )
-    set_target_properties( GSL::gslcblas PROPERTIES
-      IMPORTED_LOCATION                 "${GSL_CBLAS_LIBRARY}"
-      INTERFACE_INCLUDE_DIRECTORIES     "${GSL_INCLUDE_DIRS}"
-      IMPORTED_LINK_INTERFACE_LANGUAGES "C" )
-    set_target_properties( GSL::gsl PROPERTIES
-      IMPORTED_LOCATION                 "${GSL_LIBRARY}"
-      INTERFACE_INCLUDE_DIRECTORIES     "${GSL_INCLUDE_DIRS}"
-      IMPORTED_LINK_INTERFACE_LANGUAGES "C"
-      INTERFACE_LINK_LIBRARIES          GSL::gslcblas )
-  endif()
-endif()
diff --git a/share/cmake-3.18/Modules/FindGTK2.cmake b/share/cmake-3.18/Modules/FindGTK2.cmake
deleted file mode 100644
index 62f1614..0000000
--- a/share/cmake-3.18/Modules/FindGTK2.cmake
+++ /dev/null
@@ -1,946 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindGTK2
---------
-
-Find the GTK2 widget libraries and several of its other optional components
-like ``gtkmm``, ``glade``, and ``glademm``.
-
-Specify one or more of the following components as you call this find
-module.  See example below.
-
-* ``gtk``
-* ``gtkmm``
-* ``glade``
-* ``glademm``
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-The following variables will be defined for your use
-
-``GTK2_FOUND``
-  Were all of your specified components found?
-``GTK2_INCLUDE_DIRS``
-  All include directories
-``GTK2_LIBRARIES``
-  All libraries
-``GTK2_TARGETS``
-  All imported targets
-``GTK2_DEFINITIONS``
-  Additional compiler flags
-``GTK2_VERSION``
-  The version of GTK2 found (x.y.z)
-``GTK2_MAJOR_VERSION``
-  The major version of GTK2
-``GTK2_MINOR_VERSION``
-  The minor version of GTK2
-``GTK2_PATCH_VERSION``
-  The patch version of GTK2
-
-Input Variables
-^^^^^^^^^^^^^^^
-
-Optional variables you can define prior to calling this module:
-
-``GTK2_DEBUG``
-  Enables verbose debugging of the module
-``GTK2_ADDITIONAL_SUFFIXES``
-  Allows defining additional directories to search for include files
-
-Example Usage
-^^^^^^^^^^^^^
-
-Call :command:`find_package` once.  Here are some examples to pick from:
-
-Require GTK 2.6 or later:
-
-.. code-block:: cmake
-
-  find_package(GTK2 2.6 REQUIRED gtk)
-
-Require GTK 2.10 or later and Glade:
-
-.. code-block:: cmake
-
-  find_package(GTK2 2.10 REQUIRED gtk glade)
-
-Search for GTK/GTKMM 2.8 or later:
-
-.. code-block:: cmake
-
-  find_package(GTK2 2.8 COMPONENTS gtk gtkmm)
-
-Use the results:
-
-.. code-block:: cmake
-
-  if(GTK2_FOUND)
-    include_directories(${GTK2_INCLUDE_DIRS})
-    add_executable(mygui mygui.cc)
-    target_link_libraries(mygui ${GTK2_LIBRARIES})
-  endif()
-#]=======================================================================]
-
-# Version 1.6 (CMake 3.0)
-#   * Create targets for each library
-#   * Do not link libfreetype
-# Version 1.5 (CMake 2.8.12)
-#   * 14236: Detect gthread library
-#            Detect pangocairo on windows
-#            Detect pangocairo with gtk module instead of with gtkmm
-#   * 14259: Use vc100 libraries with VS 11
-#   * 14260: Export a GTK2_DEFINITIONS variable to set /vd2 when appropriate
-#            (i.e. MSVC)
-#   * Use the optimized/debug syntax for _LIBRARY and _LIBRARIES variables when
-#     appropriate. A new set of _RELEASE variables was also added.
-#   * Remove GTK2_SKIP_MARK_AS_ADVANCED option, as now the variables are
-#     marked as advanced by SelectLibraryConfigurations
-#   * Detect gmodule, pangoft2 and pangoxft libraries
-# Version 1.4 (10/4/2012) (CMake 2.8.10)
-#   * 12596: Missing paths for FindGTK2 on NetBSD
-#   * 12049: Fixed detection of GTK include files in the lib folder on
-#            multiarch systems.
-# Version 1.3 (11/9/2010) (CMake 2.8.4)
-#   * 11429: Add support for detecting GTK2 built with Visual Studio 10.
-#            Thanks to Vincent Levesque for the patch.
-# Version 1.2 (8/30/2010) (CMake 2.8.3)
-#   * Merge patch for detecting gdk-pixbuf library (split off
-#     from core GTK in 2.21).  Thanks to Vincent Untz for the patch
-#     and Ricardo Cruz for the heads up.
-# Version 1.1 (8/19/2010) (CMake 2.8.3)
-#   * Add support for detecting GTK2 under macports (thanks to Gary Kramlich)
-# Version 1.0 (8/12/2010) (CMake 2.8.3)
-#   * Add support for detecting new pangommconfig.h header file
-#     (Thanks to Sune Vuorela & the Debian Project for the patch)
-#   * Add support for detecting fontconfig.h header
-#   * Call find_package(Freetype) since it's required
-#   * Add support for allowing users to add additional library directories
-#     via the GTK2_ADDITIONAL_SUFFIXES variable (kind of a future-kludge in
-#     case the GTK developers change versions on any of the directories in the
-#     future).
-# Version 0.8 (1/4/2010)
-#   * Get module working under MacOSX fink by adding /sw/include, /sw/lib
-#     to PATHS and the gobject library
-# Version 0.7 (3/22/09)
-#   * Checked into CMake CVS
-#   * Added versioning support
-#   * Module now defaults to searching for GTK if COMPONENTS not specified.
-#   * Added HKCU prior to HKLM registry key and GTKMM specific environment
-#      variable as per mailing list discussion.
-#   * Added lib64 to include search path and a few other search paths where GTK
-#      may be installed on Unix systems.
-#   * Switched to lowercase CMake commands
-#   * Prefaced internal variables with _GTK2 to prevent collision
-#   * Changed internal macros to functions
-#   * Enhanced documentation
-# Version 0.6 (1/8/08)
-#   Added GTK2_SKIP_MARK_AS_ADVANCED option
-# Version 0.5 (12/19/08)
-#   Second release to cmake mailing list
-
-#=============================================================
-# _GTK2_GET_VERSION
-# Internal function to parse the version number in gtkversion.h
-#   _OUT_major = Major version number
-#   _OUT_minor = Minor version number
-#   _OUT_micro = Micro version number
-#   _gtkversion_hdr = Header file to parse
-#=============================================================
-
-include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
-
-function(_GTK2_GET_VERSION _OUT_major _OUT_minor _OUT_micro _gtkversion_hdr)
-    file(STRINGS ${_gtkversion_hdr} _contents REGEX "#define GTK_M[A-Z]+_VERSION[ \t]+")
-    if(_contents)
-        string(REGEX REPLACE ".*#define GTK_MAJOR_VERSION[ \t]+\\(([0-9]+)\\).*" "\\1" ${_OUT_major} "${_contents}")
-        string(REGEX REPLACE ".*#define GTK_MINOR_VERSION[ \t]+\\(([0-9]+)\\).*" "\\1" ${_OUT_minor} "${_contents}")
-        string(REGEX REPLACE ".*#define GTK_MICRO_VERSION[ \t]+\\(([0-9]+)\\).*" "\\1" ${_OUT_micro} "${_contents}")
-
-        if(NOT ${_OUT_major} MATCHES "[0-9]+")
-            message(FATAL_ERROR "Version parsing failed for GTK2_MAJOR_VERSION!")
-        endif()
-        if(NOT ${_OUT_minor} MATCHES "[0-9]+")
-            message(FATAL_ERROR "Version parsing failed for GTK2_MINOR_VERSION!")
-        endif()
-        if(NOT ${_OUT_micro} MATCHES "[0-9]+")
-            message(FATAL_ERROR "Version parsing failed for GTK2_MICRO_VERSION!")
-        endif()
-
-        set(${_OUT_major} ${${_OUT_major}} PARENT_SCOPE)
-        set(${_OUT_minor} ${${_OUT_minor}} PARENT_SCOPE)
-        set(${_OUT_micro} ${${_OUT_micro}} PARENT_SCOPE)
-    else()
-        message(FATAL_ERROR "Include file ${_gtkversion_hdr} does not exist")
-    endif()
-endfunction()
-
-
-#=============================================================
-# _GTK2_SIGCXX_GET_VERSION
-# Internal function to parse the version number in
-# sigc++config.h
-#   _OUT_major = Major version number
-#   _OUT_minor = Minor version number
-#   _OUT_micro = Micro version number
-#   _sigcxxversion_hdr = Header file to parse
-#=============================================================
-
-function(_GTK2_SIGCXX_GET_VERSION _OUT_major _OUT_minor _OUT_micro _sigcxxversion_hdr)
-    file(STRINGS ${_sigcxxversion_hdr} _contents REGEX "#define SIGCXX_M[A-Z]+_VERSION[ \t]+")
-    if(_contents)
-        string(REGEX REPLACE ".*#define SIGCXX_MAJOR_VERSION[ \t]+([0-9]+).*" "\\1" ${_OUT_major} "${_contents}")
-        string(REGEX REPLACE ".*#define SIGCXX_MINOR_VERSION[ \t]+([0-9]+).*" "\\1" ${_OUT_minor} "${_contents}")
-        string(REGEX REPLACE ".*#define SIGCXX_MICRO_VERSION[ \t]+([0-9]+).*" "\\1" ${_OUT_micro} "${_contents}")
-
-        if(NOT ${_OUT_major} MATCHES "[0-9]+")
-            message(FATAL_ERROR "Version parsing failed for SIGCXX_MAJOR_VERSION!")
-        endif()
-        if(NOT ${_OUT_minor} MATCHES "[0-9]+")
-            message(FATAL_ERROR "Version parsing failed for SIGCXX_MINOR_VERSION!")
-        endif()
-        if(NOT ${_OUT_micro} MATCHES "[0-9]+")
-            message(FATAL_ERROR "Version parsing failed for SIGCXX_MICRO_VERSION!")
-        endif()
-
-        set(${_OUT_major} ${${_OUT_major}} PARENT_SCOPE)
-        set(${_OUT_minor} ${${_OUT_minor}} PARENT_SCOPE)
-        set(${_OUT_micro} ${${_OUT_micro}} PARENT_SCOPE)
-    else()
-        # The header does not have the version macros; assume it is ``0.0.0``.
-        set(${_OUT_major} 0)
-        set(${_OUT_minor} 0)
-        set(${_OUT_micro} 0)
-    endif()
-endfunction()
-
-
-#=============================================================
-# _GTK2_FIND_INCLUDE_DIR
-# Internal function to find the GTK include directories
-#   _var = variable to set (_INCLUDE_DIR is appended)
-#   _hdr = header file to look for
-#=============================================================
-function(_GTK2_FIND_INCLUDE_DIR _var _hdr)
-
-    if(GTK2_DEBUG)
-        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
-                       "_GTK2_FIND_INCLUDE_DIR( ${_var} ${_hdr} )")
-    endif()
-
-    set(_gtk_packages
-        # If these ever change, things will break.
-        ${GTK2_ADDITIONAL_SUFFIXES}
-        glibmm-2.4
-        glib-2.0
-        atk-1.0
-        atkmm-1.6
-        cairo
-        cairomm-1.0
-        gdk-pixbuf-2.0
-        gdkmm-2.4
-        giomm-2.4
-        gtk-2.0
-        gtkmm-2.4
-        libglade-2.0
-        libglademm-2.4
-        harfbuzz
-        pango-1.0
-        pangomm-1.4
-        sigc++-2.0
-    )
-
-    #
-    # NOTE: The following suffixes cause searching for header files in both of
-    # these directories:
-    #         /usr/include/<pkg>
-    #         /usr/lib/<pkg>/include
-    #
-
-    set(_suffixes)
-    foreach(_d ${_gtk_packages})
-        list(APPEND _suffixes ${_d})
-        list(APPEND _suffixes ${_d}/include) # for /usr/lib/gtk-2.0/include
-    endforeach()
-
-    if(GTK2_DEBUG)
-        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}]     "
-                       "include suffixes = ${_suffixes}")
-    endif()
-
-    if(CMAKE_LIBRARY_ARCHITECTURE)
-      set(_gtk2_arch_dir /usr/lib/${CMAKE_LIBRARY_ARCHITECTURE})
-      if(GTK2_DEBUG)
-        message(STATUS "Adding ${_gtk2_arch_dir} to search path for multiarch support")
-      endif()
-    endif()
-    find_path(GTK2_${_var}_INCLUDE_DIR ${_hdr}
-        PATHS
-            ${_gtk2_arch_dir}
-            /usr/local/libx32
-            /usr/local/lib64
-            /usr/local/lib
-            /usr/libx32
-            /usr/lib64
-            /usr/lib
-            /opt/gnome/include
-            /opt/gnome/lib
-            /opt/openwin/include
-            /usr/openwin/lib
-            /sw/lib
-            /opt/local/lib
-            /usr/pkg/lib
-            /usr/pkg/include/glib
-            $ENV{GTKMM_BASEPATH}/include
-            $ENV{GTKMM_BASEPATH}/lib
-            [HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path]/include
-            [HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path]/lib
-            [HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]/include
-            [HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]/lib
-        PATH_SUFFIXES
-            ${_suffixes}
-    )
-    mark_as_advanced(GTK2_${_var}_INCLUDE_DIR)
-
-    if(GTK2_${_var}_INCLUDE_DIR)
-        set(GTK2_INCLUDE_DIRS ${GTK2_INCLUDE_DIRS} ${GTK2_${_var}_INCLUDE_DIR} PARENT_SCOPE)
-    endif()
-
-endfunction()
-
-#=============================================================
-# _GTK2_FIND_LIBRARY
-# Internal function to find libraries packaged with GTK2
-#   _var = library variable to create (_LIBRARY is appended)
-#=============================================================
-function(_GTK2_FIND_LIBRARY _var _lib _expand_vc _append_version)
-
-    if(GTK2_DEBUG)
-        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
-                       "_GTK2_FIND_LIBRARY( ${_var} ${_lib} ${_expand_vc} ${_append_version} )")
-    endif()
-
-    # Not GTK versions per se but the versions encoded into Windows
-    # import libraries (GtkMM 2.14.1 has a gtkmm-vc80-2_4.lib for example)
-    # Also the MSVC libraries use _ for . (this is handled below)
-    set(_versions 2.20 2.18 2.16 2.14 2.12
-                  2.10  2.8  2.6  2.4  2.2 2.0
-                  1.20 1.18 1.16 1.14 1.12
-                  1.10  1.8  1.6  1.4  1.2 1.0)
-
-    set(_library)
-    set(_library_d)
-
-    set(_library ${_lib})
-
-    if(_expand_vc AND MSVC)
-        # Add vc80/vc90/vc100 midfixes
-        if(MSVC_TOOLSET_VERSION LESS 110)
-            set(_library   ${_library}-vc${MSVC_TOOLSET_VERSION})
-        else()
-            # Up to gtkmm-win 2.22.0-2 there are no vc110 libraries but vc100 can be used
-            set(_library ${_library}-vc100)
-        endif()
-        set(_library_d ${_library}-d)
-    endif()
-
-    if(GTK2_DEBUG)
-        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}]     "
-                       "After midfix addition = ${_library} and ${_library_d}")
-    endif()
-
-    set(_lib_list)
-    set(_libd_list)
-    if(_append_version)
-        foreach(_ver ${_versions})
-            list(APPEND _lib_list  "${_library}-${_ver}")
-            list(APPEND _libd_list "${_library_d}-${_ver}")
-        endforeach()
-    else()
-        set(_lib_list ${_library})
-        set(_libd_list ${_library_d})
-    endif()
-
-    if(GTK2_DEBUG)
-        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}]     "
-                       "library list = ${_lib_list} and library debug list = ${_libd_list}")
-    endif()
-
-    # For some silly reason the MSVC libraries use _ instead of .
-    # in the version fields
-    if(_expand_vc AND MSVC)
-        set(_no_dots_lib_list)
-        set(_no_dots_libd_list)
-        foreach(_l ${_lib_list})
-            string(REPLACE "." "_" _no_dots_library ${_l})
-            list(APPEND _no_dots_lib_list ${_no_dots_library})
-        endforeach()
-        # And for debug
-        set(_no_dots_libsd_list)
-        foreach(_l ${_libd_list})
-            string(REPLACE "." "_" _no_dots_libraryd ${_l})
-            list(APPEND _no_dots_libd_list ${_no_dots_libraryd})
-        endforeach()
-
-        # Copy list back to original names
-        set(_lib_list ${_no_dots_lib_list})
-        set(_libd_list ${_no_dots_libd_list})
-    endif()
-
-    if(GTK2_DEBUG)
-        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}]     "
-                       "While searching for GTK2_${_var}_LIBRARY, our proposed library list is ${_lib_list}")
-    endif()
-
-    find_library(GTK2_${_var}_LIBRARY_RELEASE
-        NAMES ${_lib_list}
-        PATHS
-            /opt/gnome/lib
-            /usr/openwin/lib
-            $ENV{GTKMM_BASEPATH}/lib
-            [HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path]/lib
-            [HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]/lib
-        )
-
-    if(_expand_vc AND MSVC)
-        if(GTK2_DEBUG)
-            message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}]     "
-                           "While searching for GTK2_${_var}_LIBRARY_DEBUG our proposed library list is ${_libd_list}")
-        endif()
-
-        find_library(GTK2_${_var}_LIBRARY_DEBUG
-            NAMES ${_libd_list}
-            PATHS
-            $ENV{GTKMM_BASEPATH}/lib
-            [HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path]/lib
-            [HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]/lib
-        )
-    endif()
-
-    select_library_configurations(GTK2_${_var})
-
-    set(GTK2_${_var}_LIBRARY ${GTK2_${_var}_LIBRARY} PARENT_SCOPE)
-    set(GTK2_${_var}_FOUND ${GTK2_${_var}_FOUND} PARENT_SCOPE)
-
-    if(GTK2_${_var}_FOUND)
-        set(GTK2_LIBRARIES ${GTK2_LIBRARIES} ${GTK2_${_var}_LIBRARY})
-        set(GTK2_LIBRARIES ${GTK2_LIBRARIES} PARENT_SCOPE)
-    endif()
-
-    if(GTK2_DEBUG)
-        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}]     "
-                       "GTK2_${_var}_LIBRARY_RELEASE = \"${GTK2_${_var}_LIBRARY_RELEASE}\"")
-        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}]     "
-                       "GTK2_${_var}_LIBRARY_DEBUG   = \"${GTK2_${_var}_LIBRARY_DEBUG}\"")
-        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}]     "
-                       "GTK2_${_var}_LIBRARY         = \"${GTK2_${_var}_LIBRARY}\"")
-        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}]     "
-                       "GTK2_${_var}_FOUND           = \"${GTK2_${_var}_FOUND}\"")
-    endif()
-
-endfunction()
-
-
-function(_GTK2_ADD_TARGET_DEPENDS_INTERNAL _var _property)
-    if(GTK2_DEBUG)
-        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
-                       "_GTK2_ADD_TARGET_DEPENDS_INTERNAL( ${_var} ${_property} )")
-    endif()
-
-    string(TOLOWER "${_var}" _basename)
-
-    if (TARGET GTK2::${_basename})
-        foreach(_depend ${ARGN})
-            set(_valid_depends)
-            if (TARGET GTK2::${_depend})
-                list(APPEND _valid_depends GTK2::${_depend})
-            endif()
-            if (_valid_depends)
-                set_property(TARGET GTK2::${_basename} APPEND PROPERTY ${_property} "${_valid_depends}")
-            endif()
-            set(_valid_depends)
-        endforeach()
-    endif()
-endfunction()
-
-function(_GTK2_ADD_TARGET_DEPENDS _var)
-    if(GTK2_DEBUG)
-        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
-                       "_GTK2_ADD_TARGET_DEPENDS( ${_var} )")
-    endif()
-
-    string(TOLOWER "${_var}" _basename)
-
-    if(TARGET GTK2::${_basename})
-        get_target_property(_configs GTK2::${_basename} IMPORTED_CONFIGURATIONS)
-        _GTK2_ADD_TARGET_DEPENDS_INTERNAL(${_var} INTERFACE_LINK_LIBRARIES ${ARGN})
-        foreach(_config ${_configs})
-            _GTK2_ADD_TARGET_DEPENDS_INTERNAL(${_var} IMPORTED_LINK_INTERFACE_LIBRARIES_${_config} ${ARGN})
-        endforeach()
-    endif()
-endfunction()
-
-function(_GTK2_ADD_TARGET_INCLUDE_DIRS _var)
-    if(GTK2_DEBUG)
-        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
-                       "_GTK2_ADD_TARGET_INCLUDE_DIRS( ${_var} )")
-    endif()
-
-    string(TOLOWER "${_var}" _basename)
-
-    if(TARGET GTK2::${_basename})
-        foreach(_include ${ARGN})
-            set_property(TARGET GTK2::${_basename} APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${_include}")
-        endforeach()
-    endif()
-endfunction()
-
-#=============================================================
-# _GTK2_ADD_TARGET
-# Internal function to create targets for GTK2
-#   _var = target to create
-#=============================================================
-function(_GTK2_ADD_TARGET _var)
-    if(GTK2_DEBUG)
-        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
-                       "_GTK2_ADD_TARGET( ${_var} )")
-    endif()
-
-    string(TOLOWER "${_var}" _basename)
-
-    cmake_parse_arguments(_${_var} "" "" "GTK2_DEPENDS;GTK2_OPTIONAL_DEPENDS;OPTIONAL_INCLUDES" ${ARGN})
-
-    if(GTK2_${_var}_FOUND)
-        if(NOT TARGET GTK2::${_basename})
-            # Do not create the target if dependencies are missing
-            foreach(_dep ${_${_var}_GTK2_DEPENDS})
-                if(NOT TARGET GTK2::${_dep})
-                    return()
-                endif()
-            endforeach()
-
-            add_library(GTK2::${_basename} UNKNOWN IMPORTED)
-
-            if(GTK2_${_var}_LIBRARY_RELEASE)
-                set_property(TARGET GTK2::${_basename} APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
-                set_property(TARGET GTK2::${_basename}        PROPERTY IMPORTED_LOCATION_RELEASE "${GTK2_${_var}_LIBRARY_RELEASE}" )
-            endif()
-
-            if(GTK2_${_var}_LIBRARY_DEBUG)
-                set_property(TARGET GTK2::${_basename} APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
-                set_property(TARGET GTK2::${_basename}        PROPERTY IMPORTED_LOCATION_DEBUG "${GTK2_${_var}_LIBRARY_DEBUG}" )
-            endif()
-
-            if(GTK2_${_var}_INCLUDE_DIR)
-                set_property(TARGET GTK2::${_basename} APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${GTK2_${_var}_INCLUDE_DIR}")
-            endif()
-
-            if(GTK2_${_var}CONFIG_INCLUDE_DIR AND NOT "x${GTK2_${_var}CONFIG_INCLUDE_DIR}" STREQUAL "x${GTK2_${_var}_INCLUDE_DIR}")
-                set_property(TARGET GTK2::${_basename} APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${GTK2_${_var}CONFIG_INCLUDE_DIR}")
-            endif()
-
-            if(GTK2_DEFINITIONS)
-                set_property(TARGET GTK2::${_basename} PROPERTY INTERFACE_COMPILE_DEFINITIONS "${GTK2_DEFINITIONS}")
-            endif()
-
-            if(_${_var}_GTK2_DEPENDS)
-                _GTK2_ADD_TARGET_DEPENDS(${_var} ${_${_var}_GTK2_DEPENDS} ${_${_var}_GTK2_OPTIONAL_DEPENDS})
-            endif()
-
-            if(_${_var}_OPTIONAL_INCLUDES)
-                foreach(_D ${_${_var}_OPTIONAL_INCLUDES})
-                    if(_D)
-                        _GTK2_ADD_TARGET_INCLUDE_DIRS(${_var} ${_D})
-                    endif()
-                endforeach()
-            endif()
-        endif()
-
-        set(GTK2_TARGETS ${GTK2_TARGETS} GTK2::${_basename})
-        set(GTK2_TARGETS ${GTK2_TARGETS} PARENT_SCOPE)
-
-        if(GTK2_USE_IMPORTED_TARGETS)
-            set(GTK2_${_var}_LIBRARY GTK2::${_basename} PARENT_SCOPE)
-        endif()
-
-    endif()
-endfunction()
-
-
-
-#=============================================================
-
-#
-# main()
-#
-
-set(GTK2_FOUND)
-set(GTK2_INCLUDE_DIRS)
-set(GTK2_LIBRARIES)
-set(GTK2_TARGETS)
-set(GTK2_DEFINITIONS)
-
-if(NOT GTK2_FIND_COMPONENTS)
-    # Assume they only want GTK
-    set(GTK2_FIND_COMPONENTS gtk)
-endif()
-
-#
-# If specified, enforce version number
-#
-if(GTK2_FIND_VERSION)
-    set(GTK2_FAILED_VERSION_CHECK true)
-    if(GTK2_DEBUG)
-        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
-                       "Searching for version ${GTK2_FIND_VERSION}")
-    endif()
-    _GTK2_FIND_INCLUDE_DIR(GTK gtk/gtk.h)
-    if(GTK2_GTK_INCLUDE_DIR)
-        _GTK2_GET_VERSION(GTK2_MAJOR_VERSION
-                          GTK2_MINOR_VERSION
-                          GTK2_PATCH_VERSION
-                          ${GTK2_GTK_INCLUDE_DIR}/gtk/gtkversion.h)
-        set(GTK2_VERSION
-            ${GTK2_MAJOR_VERSION}.${GTK2_MINOR_VERSION}.${GTK2_PATCH_VERSION})
-        if(GTK2_FIND_VERSION_EXACT)
-            if(GTK2_VERSION VERSION_EQUAL GTK2_FIND_VERSION)
-                set(GTK2_FAILED_VERSION_CHECK false)
-            endif()
-        else()
-            if(GTK2_VERSION VERSION_EQUAL   GTK2_FIND_VERSION OR
-               GTK2_VERSION VERSION_GREATER GTK2_FIND_VERSION)
-                set(GTK2_FAILED_VERSION_CHECK false)
-            endif()
-        endif()
-    else()
-        # If we can't find the GTK include dir, we can't do version checking
-        if(GTK2_FIND_REQUIRED AND NOT GTK2_FIND_QUIETLY)
-            message(FATAL_ERROR "Could not find GTK2 include directory")
-        endif()
-        return()
-    endif()
-
-    if(GTK2_FAILED_VERSION_CHECK)
-        if(GTK2_FIND_REQUIRED AND NOT GTK2_FIND_QUIETLY)
-            if(GTK2_FIND_VERSION_EXACT)
-                message(FATAL_ERROR "GTK2 version check failed.  Version ${GTK2_VERSION} was found, version ${GTK2_FIND_VERSION} is needed exactly.")
-            else()
-                message(FATAL_ERROR "GTK2 version check failed.  Version ${GTK2_VERSION} was found, at least version ${GTK2_FIND_VERSION} is required")
-            endif()
-        endif()
-
-        # If the version check fails, exit out of the module here
-        return()
-    endif()
-endif()
-
-#
-# On MSVC, according to https://wiki.gnome.org/gtkmm/MSWindows, the /vd2 flag needs to be
-# passed to the compiler in order to use gtkmm
-#
-if(MSVC)
-    foreach(_GTK2_component ${GTK2_FIND_COMPONENTS})
-        if(_GTK2_component STREQUAL "gtkmm")
-            set(GTK2_DEFINITIONS "/vd2")
-        elseif(_GTK2_component STREQUAL "glademm")
-            set(GTK2_DEFINITIONS "/vd2")
-        endif()
-    endforeach()
-endif()
-
-#
-# Find all components
-#
-
-find_package(Freetype QUIET)
-if(FREETYPE_INCLUDE_DIR_ft2build AND FREETYPE_INCLUDE_DIR_freetype2)
-    list(APPEND GTK2_INCLUDE_DIRS ${FREETYPE_INCLUDE_DIR_ft2build} ${FREETYPE_INCLUDE_DIR_freetype2})
-endif()
-
-foreach(_GTK2_component ${GTK2_FIND_COMPONENTS})
-    if(_GTK2_component STREQUAL "gtk")
-        # Left for compatibility with previous versions.
-        _GTK2_FIND_INCLUDE_DIR(FONTCONFIG fontconfig/fontconfig.h)
-        _GTK2_FIND_INCLUDE_DIR(X11 X11/Xlib.h)
-
-        _GTK2_FIND_INCLUDE_DIR(GLIB glib.h)
-        _GTK2_FIND_INCLUDE_DIR(GLIBCONFIG glibconfig.h)
-        _GTK2_FIND_LIBRARY    (GLIB glib false true)
-        _GTK2_ADD_TARGET      (GLIB)
-
-        _GTK2_FIND_INCLUDE_DIR(GOBJECT glib-object.h)
-        _GTK2_FIND_LIBRARY    (GOBJECT gobject false true)
-        _GTK2_ADD_TARGET      (GOBJECT GTK2_DEPENDS glib)
-
-        _GTK2_FIND_INCLUDE_DIR(ATK atk/atk.h)
-        _GTK2_FIND_LIBRARY    (ATK atk false true)
-        _GTK2_ADD_TARGET      (ATK GTK2_DEPENDS gobject glib)
-
-        _GTK2_FIND_LIBRARY    (GIO gio false true)
-        _GTK2_ADD_TARGET      (GIO GTK2_DEPENDS gobject glib)
-
-        _GTK2_FIND_LIBRARY    (GTHREAD gthread false true)
-        _GTK2_ADD_TARGET      (GTHREAD GTK2_DEPENDS glib)
-
-        _GTK2_FIND_LIBRARY    (GMODULE gmodule false true)
-        _GTK2_ADD_TARGET      (GMODULE GTK2_DEPENDS glib)
-
-        _GTK2_FIND_INCLUDE_DIR(GDK_PIXBUF gdk-pixbuf/gdk-pixbuf.h)
-        _GTK2_FIND_LIBRARY    (GDK_PIXBUF gdk_pixbuf false true)
-        _GTK2_ADD_TARGET      (GDK_PIXBUF GTK2_DEPENDS gobject glib)
-
-        _GTK2_FIND_INCLUDE_DIR(CAIRO cairo.h)
-        _GTK2_FIND_LIBRARY    (CAIRO cairo false false)
-        _GTK2_ADD_TARGET      (CAIRO)
-
-        _GTK2_FIND_INCLUDE_DIR(HARFBUZZ hb.h)
-        _GTK2_FIND_LIBRARY    (HARFBUZZ harfbuzz false false)
-        _GTK2_ADD_TARGET      (HARFBUZZ)
-
-        _GTK2_FIND_INCLUDE_DIR(PANGO pango/pango.h)
-        _GTK2_FIND_LIBRARY    (PANGO pango false true)
-        _GTK2_ADD_TARGET      (PANGO GTK2_DEPENDS gobject glib
-                                     GTK2_OPTIONAL_DEPENDS harfbuzz)
-
-        _GTK2_FIND_LIBRARY    (PANGOCAIRO pangocairo false true)
-        _GTK2_ADD_TARGET      (PANGOCAIRO GTK2_DEPENDS pango cairo gobject glib)
-
-        _GTK2_FIND_LIBRARY    (PANGOFT2 pangoft2 false true)
-        _GTK2_ADD_TARGET      (PANGOFT2 GTK2_DEPENDS pango gobject glib
-                                        OPTIONAL_INCLUDES ${FREETYPE_INCLUDE_DIR_ft2build} ${FREETYPE_INCLUDE_DIR_freetype2}
-                                                          ${GTK2_FONTCONFIG_INCLUDE_DIR}
-                                                          ${GTK2_X11_INCLUDE_DIR})
-
-        _GTK2_FIND_LIBRARY    (PANGOXFT pangoxft false true)
-        _GTK2_ADD_TARGET      (PANGOXFT GTK2_DEPENDS pangoft2 pango gobject glib
-                                        OPTIONAL_INCLUDES ${FREETYPE_INCLUDE_DIR_ft2build} ${FREETYPE_INCLUDE_DIR_freetype2}
-                                                          ${GTK2_FONTCONFIG_INCLUDE_DIR}
-                                                          ${GTK2_X11_INCLUDE_DIR})
-
-        _GTK2_FIND_INCLUDE_DIR(GDK gdk/gdk.h)
-        _GTK2_FIND_INCLUDE_DIR(GDKCONFIG gdkconfig.h)
-        if(UNIX)
-            if(APPLE)
-                _GTK2_FIND_LIBRARY    (GDK gdk-quartz false true)
-            endif()
-            _GTK2_FIND_LIBRARY    (GDK gdk-x11 false true)
-        else()
-            _GTK2_FIND_LIBRARY    (GDK gdk-win32 false true)
-        endif()
-        _GTK2_ADD_TARGET (GDK GTK2_DEPENDS pango gdk_pixbuf gobject glib
-                              GTK2_OPTIONAL_DEPENDS pangocairo cairo)
-
-        _GTK2_FIND_INCLUDE_DIR(GTK gtk/gtk.h)
-        if(UNIX)
-            if(APPLE)
-                _GTK2_FIND_LIBRARY    (GTK gtk-quartz false true)
-            endif()
-            _GTK2_FIND_LIBRARY    (GTK gtk-x11 false true)
-        else()
-            _GTK2_FIND_LIBRARY    (GTK gtk-win32 false true)
-        endif()
-        _GTK2_ADD_TARGET (GTK GTK2_DEPENDS gdk atk pangoft2 pango gdk_pixbuf gthread gobject glib
-                              GTK2_OPTIONAL_DEPENDS gio pangocairo cairo)
-
-    elseif(_GTK2_component STREQUAL "gtkmm")
-
-        _GTK2_FIND_INCLUDE_DIR(SIGC++ sigc++/sigc++.h)
-        _GTK2_FIND_INCLUDE_DIR(SIGC++CONFIG sigc++config.h)
-        _GTK2_FIND_LIBRARY    (SIGC++ sigc true true)
-        _GTK2_ADD_TARGET      (SIGC++)
-        # Since sigc++ 2.5.1 c++11 support is required
-        if(GTK2_SIGC++CONFIG_INCLUDE_DIR)
-            _GTK2_SIGCXX_GET_VERSION(GTK2_SIGC++_VERSION_MAJOR
-                                     GTK2_SIGC++_VERSION_MINOR
-                                     GTK2_SIGC++_VERSION_MICRO
-                                     ${GTK2_SIGC++CONFIG_INCLUDE_DIR}/sigc++config.h)
-            if(NOT ${GTK2_SIGC++_VERSION_MAJOR}.${GTK2_SIGC++_VERSION_MINOR}.${GTK2_SIGC++_VERSION_MICRO} VERSION_LESS 2.5.1)
-                # These are the features needed by clients in order to include the
-                # project headers:
-                set_property(TARGET GTK2::sigc++
-                             PROPERTY INTERFACE_COMPILE_FEATURES cxx_alias_templates
-                                                                 cxx_auto_type
-                                                                 cxx_decltype
-                                                                 cxx_deleted_functions
-                                                                 cxx_noexcept
-                                                                 cxx_nullptr
-                                                                 cxx_right_angle_brackets
-                                                                 cxx_rvalue_references
-                                                                 cxx_variadic_templates)
-            endif()
-        endif()
-
-        _GTK2_FIND_INCLUDE_DIR(GLIBMM glibmm.h)
-        _GTK2_FIND_INCLUDE_DIR(GLIBMMCONFIG glibmmconfig.h)
-        _GTK2_FIND_LIBRARY    (GLIBMM glibmm true true)
-        _GTK2_ADD_TARGET      (GLIBMM GTK2_DEPENDS gobject sigc++ glib)
-
-        _GTK2_FIND_INCLUDE_DIR(GIOMM giomm.h)
-        _GTK2_FIND_INCLUDE_DIR(GIOMMCONFIG giommconfig.h)
-        _GTK2_FIND_LIBRARY    (GIOMM giomm true true)
-        _GTK2_ADD_TARGET      (GIOMM GTK2_DEPENDS gio glibmm gobject sigc++ glib)
-
-        _GTK2_FIND_INCLUDE_DIR(ATKMM atkmm.h)
-        _GTK2_FIND_LIBRARY    (ATKMM atkmm true true)
-        _GTK2_ADD_TARGET      (ATKMM GTK2_DEPENDS atk glibmm gobject sigc++ glib)
-
-        _GTK2_FIND_INCLUDE_DIR(CAIROMM cairomm/cairomm.h)
-        _GTK2_FIND_INCLUDE_DIR(CAIROMMCONFIG cairommconfig.h)
-        _GTK2_FIND_LIBRARY    (CAIROMM cairomm true true)
-        _GTK2_ADD_TARGET      (CAIROMM GTK2_DEPENDS cairo sigc++
-                                       OPTIONAL_INCLUDES ${FREETYPE_INCLUDE_DIR_ft2build} ${FREETYPE_INCLUDE_DIR_freetype2}
-                                                         ${GTK2_FONTCONFIG_INCLUDE_DIR}
-                                                         ${GTK2_X11_INCLUDE_DIR})
-
-        _GTK2_FIND_INCLUDE_DIR(PANGOMM pangomm.h)
-        _GTK2_FIND_INCLUDE_DIR(PANGOMMCONFIG pangommconfig.h)
-        _GTK2_FIND_LIBRARY    (PANGOMM pangomm true true)
-        _GTK2_ADD_TARGET      (PANGOMM GTK2_DEPENDS glibmm sigc++ pango gobject glib
-                                       GTK2_OPTIONAL_DEPENDS cairomm pangocairo cairo
-                                       OPTIONAL_INCLUDES ${FREETYPE_INCLUDE_DIR_ft2build} ${FREETYPE_INCLUDE_DIR_freetype2}
-                                                         ${GTK2_FONTCONFIG_INCLUDE_DIR}
-                                                         ${GTK2_X11_INCLUDE_DIR})
-
-        _GTK2_FIND_INCLUDE_DIR(GDKMM gdkmm.h)
-        _GTK2_FIND_INCLUDE_DIR(GDKMMCONFIG gdkmmconfig.h)
-        _GTK2_FIND_LIBRARY    (GDKMM gdkmm true true)
-        _GTK2_ADD_TARGET      (GDKMM GTK2_DEPENDS pangomm gtk glibmm sigc++ gdk atk pangoft2 gdk_pixbuf pango gobject glib
-                                     GTK2_OPTIONAL_DEPENDS giomm cairomm gio pangocairo cairo
-                                     OPTIONAL_INCLUDES ${FREETYPE_INCLUDE_DIR_ft2build} ${FREETYPE_INCLUDE_DIR_freetype2}
-                                                       ${GTK2_FONTCONFIG_INCLUDE_DIR}
-                                                       ${GTK2_X11_INCLUDE_DIR})
-
-        _GTK2_FIND_INCLUDE_DIR(GTKMM gtkmm.h)
-        _GTK2_FIND_INCLUDE_DIR(GTKMMCONFIG gtkmmconfig.h)
-        _GTK2_FIND_LIBRARY    (GTKMM gtkmm true true)
-        _GTK2_ADD_TARGET      (GTKMM GTK2_DEPENDS atkmm gdkmm pangomm gtk glibmm sigc++ gdk atk pangoft2 gdk_pixbuf pango gthread gobject glib
-                                     GTK2_OPTIONAL_DEPENDS giomm cairomm gio pangocairo cairo
-                                     OPTIONAL_INCLUDES ${FREETYPE_INCLUDE_DIR_ft2build} ${FREETYPE_INCLUDE_DIR_freetype2}
-                                                       ${GTK2_FONTCONFIG_INCLUDE_DIR}
-                                                       ${GTK2_X11_INCLUDE_DIR})
-
-    elseif(_GTK2_component STREQUAL "glade")
-
-        _GTK2_FIND_INCLUDE_DIR(GLADE glade/glade.h)
-        _GTK2_FIND_LIBRARY    (GLADE glade false true)
-        _GTK2_ADD_TARGET      (GLADE GTK2_DEPENDS gtk gdk atk gio pangoft2 gdk_pixbuf pango gobject glib
-                                     GTK2_OPTIONAL_DEPENDS pangocairo cairo
-                                     OPTIONAL_INCLUDES ${FREETYPE_INCLUDE_DIR_ft2build} ${FREETYPE_INCLUDE_DIR_freetype2}
-                                                       ${GTK2_FONTCONFIG_INCLUDE_DIR}
-                                                       ${GTK2_X11_INCLUDE_DIR})
-
-    elseif(_GTK2_component STREQUAL "glademm")
-
-        _GTK2_FIND_INCLUDE_DIR(GLADEMM libglademm.h)
-        _GTK2_FIND_INCLUDE_DIR(GLADEMMCONFIG libglademmconfig.h)
-        _GTK2_FIND_LIBRARY    (GLADEMM glademm true true)
-        _GTK2_ADD_TARGET      (GLADEMM GTK2_DEPENDS gtkmm glade atkmm gdkmm giomm pangomm glibmm sigc++ gtk gdk atk pangoft2 gdk_pixbuf pango gthread gobject glib
-                                       GTK2_OPTIONAL_DEPENDS giomm cairomm gio pangocairo cairo
-                                       OPTIONAL_INCLUDES ${FREETYPE_INCLUDE_DIR_ft2build} ${FREETYPE_INCLUDE_DIR_freetype2}
-                                                         ${GTK2_FONTCONFIG_INCLUDE_DIR}
-                                                         ${GTK2_X11_INCLUDE_DIR})
-
-    else()
-        message(FATAL_ERROR "Unknown GTK2 component ${_component}")
-    endif()
-endforeach()
-
-#
-# Solve for the GTK2 version if we haven't already
-#
-if(NOT GTK2_FIND_VERSION AND GTK2_GTK_INCLUDE_DIR)
-    _GTK2_GET_VERSION(GTK2_MAJOR_VERSION
-                      GTK2_MINOR_VERSION
-                      GTK2_PATCH_VERSION
-                      ${GTK2_GTK_INCLUDE_DIR}/gtk/gtkversion.h)
-    set(GTK2_VERSION ${GTK2_MAJOR_VERSION}.${GTK2_MINOR_VERSION}.${GTK2_PATCH_VERSION})
-endif()
-
-#
-# Try to enforce components
-#
-
-set(_GTK2_did_we_find_everything true)  # This gets set to GTK2_FOUND
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-
-foreach(_GTK2_component ${GTK2_FIND_COMPONENTS})
-    string(TOUPPER ${_GTK2_component} _COMPONENT_UPPER)
-
-    set(GTK2_${_COMPONENT_UPPER}_FIND_QUIETLY ${GTK2_FIND_QUIETLY})
-
-    set(FPHSA_NAME_MISMATCHED 1)
-    if(_GTK2_component STREQUAL "gtk")
-        FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTK2_${_COMPONENT_UPPER} "Some or all of the gtk libraries were not found."
-            GTK2_GTK_LIBRARY
-            GTK2_GTK_INCLUDE_DIR
-
-            GTK2_GDK_INCLUDE_DIR
-            GTK2_GDKCONFIG_INCLUDE_DIR
-            GTK2_GDK_LIBRARY
-
-            GTK2_GLIB_INCLUDE_DIR
-            GTK2_GLIBCONFIG_INCLUDE_DIR
-            GTK2_GLIB_LIBRARY
-        )
-    elseif(_GTK2_component STREQUAL "gtkmm")
-        FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTK2_${_COMPONENT_UPPER} "Some or all of the gtkmm libraries were not found."
-            GTK2_GTKMM_LIBRARY
-            GTK2_GTKMM_INCLUDE_DIR
-            GTK2_GTKMMCONFIG_INCLUDE_DIR
-
-            GTK2_GDKMM_INCLUDE_DIR
-            GTK2_GDKMMCONFIG_INCLUDE_DIR
-            GTK2_GDKMM_LIBRARY
-
-            GTK2_GLIBMM_INCLUDE_DIR
-            GTK2_GLIBMMCONFIG_INCLUDE_DIR
-            GTK2_GLIBMM_LIBRARY
-
-            FREETYPE_INCLUDE_DIR_ft2build
-            FREETYPE_INCLUDE_DIR_freetype2
-        )
-    elseif(_GTK2_component STREQUAL "glade")
-        FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTK2_${_COMPONENT_UPPER} "The glade library was not found."
-            GTK2_GLADE_LIBRARY
-            GTK2_GLADE_INCLUDE_DIR
-        )
-    elseif(_GTK2_component STREQUAL "glademm")
-        FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTK2_${_COMPONENT_UPPER} "The glademm library was not found."
-            GTK2_GLADEMM_LIBRARY
-            GTK2_GLADEMM_INCLUDE_DIR
-            GTK2_GLADEMMCONFIG_INCLUDE_DIR
-        )
-    endif()
-    unset(FPHSA_NAME_MISMATCHED)
-
-    if(NOT GTK2_${_COMPONENT_UPPER}_FOUND)
-        set(_GTK2_did_we_find_everything false)
-    endif()
-endforeach()
-
-if(GTK2_USE_IMPORTED_TARGETS)
-    set(GTK2_LIBRARIES ${GTK2_TARGETS})
-endif()
-
-
-if(_GTK2_did_we_find_everything AND NOT GTK2_VERSION_CHECK_FAILED)
-    set(GTK2_FOUND true)
-else()
-    # Unset our variables.
-    set(GTK2_FOUND false)
-    set(GTK2_VERSION)
-    set(GTK2_VERSION_MAJOR)
-    set(GTK2_VERSION_MINOR)
-    set(GTK2_VERSION_PATCH)
-    set(GTK2_INCLUDE_DIRS)
-    set(GTK2_LIBRARIES)
-    set(GTK2_TARGETS)
-    set(GTK2_DEFINITIONS)
-endif()
-
-if(GTK2_INCLUDE_DIRS)
-  list(REMOVE_DUPLICATES GTK2_INCLUDE_DIRS)
-endif()
diff --git a/share/cmake-3.18/Modules/FindGTest.cmake b/share/cmake-3.18/Modules/FindGTest.cmake
deleted file mode 100644
index 53cab1a..0000000
--- a/share/cmake-3.18/Modules/FindGTest.cmake
+++ /dev/null
@@ -1,254 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindGTest
----------
-
-Locate the Google C++ Testing Framework.
-
-Imported targets
-^^^^^^^^^^^^^^^^
-
-This module defines the following :prop_tgt:`IMPORTED` targets:
-
-``GTest::GTest``
-  The Google Test ``gtest`` library, if found; adds Thread::Thread
-  automatically
-``GTest::Main``
-  The Google Test ``gtest_main`` library, if found
-
-
-Result variables
-^^^^^^^^^^^^^^^^
-
-This module will set the following variables in your project:
-
-``GTEST_FOUND``
-  Found the Google Testing framework
-``GTEST_INCLUDE_DIRS``
-  the directory containing the Google Test headers
-
-The library variables below are set as normal variables.  These
-contain debug/optimized keywords when a debugging library is found.
-
-``GTEST_LIBRARIES``
-  The Google Test ``gtest`` library; note it also requires linking
-  with an appropriate thread library
-``GTEST_MAIN_LIBRARIES``
-  The Google Test ``gtest_main`` library
-``GTEST_BOTH_LIBRARIES``
-  Both ``gtest`` and ``gtest_main``
-
-Cache variables
-^^^^^^^^^^^^^^^
-
-The following cache variables may also be set:
-
-``GTEST_ROOT``
-  The root directory of the Google Test installation (may also be
-  set as an environment variable)
-``GTEST_MSVC_SEARCH``
-  If compiling with MSVC, this variable can be set to ``MT`` or
-  ``MD`` (the default) to enable searching a GTest build tree
-
-
-Example usage
-^^^^^^^^^^^^^
-
-::
-
-    enable_testing()
-    find_package(GTest REQUIRED)
-
-    add_executable(foo foo.cc)
-    target_link_libraries(foo GTest::GTest GTest::Main)
-
-    add_test(AllTestsInFoo foo)
-
-
-Deeper integration with CTest
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-See :module:`GoogleTest` for information on the :command:`gtest_add_tests`
-and :command:`gtest_discover_tests` commands.
-#]=======================================================================]
-
-include(${CMAKE_CURRENT_LIST_DIR}/GoogleTest.cmake)
-
-function(__gtest_append_debugs _endvar _library)
-    if(${_library} AND ${_library}_DEBUG)
-        set(_output optimized ${${_library}} debug ${${_library}_DEBUG})
-    else()
-        set(_output ${${_library}})
-    endif()
-    set(${_endvar} ${_output} PARENT_SCOPE)
-endfunction()
-
-function(__gtest_find_library _name)
-    find_library(${_name}
-        NAMES ${ARGN}
-        HINTS
-            ENV GTEST_ROOT
-            ${GTEST_ROOT}
-        PATH_SUFFIXES ${_gtest_libpath_suffixes}
-    )
-    mark_as_advanced(${_name})
-endfunction()
-
-macro(__gtest_determine_windows_library_type _var)
-    if(EXISTS "${${_var}}")
-        file(TO_NATIVE_PATH "${${_var}}" _lib_path)
-        get_filename_component(_name "${${_var}}" NAME_WE)
-        file(STRINGS "${${_var}}" _match REGEX "${_name}\\.dll" LIMIT_COUNT 1)
-        if(NOT _match STREQUAL "")
-            set(${_var}_TYPE SHARED PARENT_SCOPE)
-        else()
-            set(${_var}_TYPE UNKNOWN PARENT_SCOPE)
-        endif()
-        return()
-    endif()
-endmacro()
-
-function(__gtest_determine_library_type _var)
-    if(WIN32)
-        # For now, at least, only Windows really needs to know the library type
-        __gtest_determine_windows_library_type(${_var})
-        __gtest_determine_windows_library_type(${_var}_RELEASE)
-        __gtest_determine_windows_library_type(${_var}_DEBUG)
-    endif()
-    # If we get here, no determination was made from the above checks
-    set(${_var}_TYPE UNKNOWN PARENT_SCOPE)
-endfunction()
-
-function(__gtest_import_library _target _var _config)
-    if(_config)
-        set(_config_suffix "_${_config}")
-    else()
-        set(_config_suffix "")
-    endif()
-
-    set(_lib "${${_var}${_config_suffix}}")
-    if(EXISTS "${_lib}")
-        if(_config)
-            set_property(TARGET ${_target} APPEND PROPERTY
-                IMPORTED_CONFIGURATIONS ${_config})
-        endif()
-        set_target_properties(${_target} PROPERTIES
-            IMPORTED_LINK_INTERFACE_LANGUAGES${_config_suffix} "CXX")
-        if(WIN32 AND ${_var}_TYPE STREQUAL SHARED)
-            set_target_properties(${_target} PROPERTIES
-                IMPORTED_IMPLIB${_config_suffix} "${_lib}")
-        else()
-            set_target_properties(${_target} PROPERTIES
-                IMPORTED_LOCATION${_config_suffix} "${_lib}")
-        endif()
-    endif()
-endfunction()
-
-#
-
-if(NOT DEFINED GTEST_MSVC_SEARCH)
-    set(GTEST_MSVC_SEARCH MD)
-endif()
-
-set(_gtest_libpath_suffixes lib)
-if(MSVC)
-    if(GTEST_MSVC_SEARCH STREQUAL "MD")
-        list(APPEND _gtest_libpath_suffixes
-            msvc/gtest-md/Debug
-            msvc/gtest-md/Release
-            msvc/x64/Debug
-            msvc/x64/Release
-            msvc/2010/gtest-md/Win32-Debug
-            msvc/2010/gtest-md/Win32-Release
-            msvc/2010/gtest-md/x64-Debug
-            msvc/2010/gtest-md/x64-Release
-            )
-    elseif(GTEST_MSVC_SEARCH STREQUAL "MT")
-        list(APPEND _gtest_libpath_suffixes
-            msvc/gtest/Debug
-            msvc/gtest/Release
-            msvc/x64/Debug
-            msvc/x64/Release
-            msvc/2010/gtest/Win32-Debug
-            msvc/2010/gtest/Win32-Release
-            msvc/2010/gtest/x64-Debug
-            msvc/2010/gtest/x64-Release
-            )
-    endif()
-endif()
-
-
-find_path(GTEST_INCLUDE_DIR gtest/gtest.h
-    HINTS
-        $ENV{GTEST_ROOT}/include
-        ${GTEST_ROOT}/include
-)
-mark_as_advanced(GTEST_INCLUDE_DIR)
-
-if(MSVC AND GTEST_MSVC_SEARCH STREQUAL "MD")
-    # The provided /MD project files for Google Test add -md suffixes to the
-    # library names.
-    __gtest_find_library(GTEST_LIBRARY            gtest-md  gtest)
-    __gtest_find_library(GTEST_LIBRARY_DEBUG      gtest-mdd gtestd)
-    __gtest_find_library(GTEST_MAIN_LIBRARY       gtest_main-md  gtest_main)
-    __gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_main-mdd gtest_maind)
-else()
-    __gtest_find_library(GTEST_LIBRARY            gtest)
-    __gtest_find_library(GTEST_LIBRARY_DEBUG      gtestd)
-    __gtest_find_library(GTEST_MAIN_LIBRARY       gtest_main)
-    __gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_maind)
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTest DEFAULT_MSG GTEST_LIBRARY GTEST_INCLUDE_DIR GTEST_MAIN_LIBRARY)
-
-if(GTEST_FOUND)
-    set(GTEST_INCLUDE_DIRS ${GTEST_INCLUDE_DIR})
-    __gtest_append_debugs(GTEST_LIBRARIES      GTEST_LIBRARY)
-    __gtest_append_debugs(GTEST_MAIN_LIBRARIES GTEST_MAIN_LIBRARY)
-    set(GTEST_BOTH_LIBRARIES ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES})
-
-    find_package(Threads QUIET)
-
-    if(NOT TARGET GTest::GTest)
-        __gtest_determine_library_type(GTEST_LIBRARY)
-        add_library(GTest::GTest ${GTEST_LIBRARY_TYPE} IMPORTED)
-        if(TARGET Threads::Threads)
-            set_target_properties(GTest::GTest PROPERTIES
-                INTERFACE_LINK_LIBRARIES Threads::Threads)
-        endif()
-        if(GTEST_LIBRARY_TYPE STREQUAL "SHARED")
-            set_target_properties(GTest::GTest PROPERTIES
-                INTERFACE_COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1")
-        endif()
-        if(GTEST_INCLUDE_DIRS)
-            set_target_properties(GTest::GTest PROPERTIES
-                INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}")
-        endif()
-        __gtest_import_library(GTest::GTest GTEST_LIBRARY "")
-        __gtest_import_library(GTest::GTest GTEST_LIBRARY "RELEASE")
-        __gtest_import_library(GTest::GTest GTEST_LIBRARY "DEBUG")
-    endif()
-    if(NOT TARGET GTest::Main)
-        __gtest_determine_library_type(GTEST_MAIN_LIBRARY)
-        add_library(GTest::Main ${GTEST_MAIN_LIBRARY_TYPE} IMPORTED)
-        set_target_properties(GTest::Main PROPERTIES
-            INTERFACE_LINK_LIBRARIES "GTest::GTest")
-        __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY "")
-        __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY "RELEASE")
-        __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY "DEBUG")
-    endif()
-
-    # Add targets mapping the same library names as defined in
-    # GTest's CMake package config.
-    if(NOT TARGET GTest::gtest)
-        add_library(GTest::gtest INTERFACE IMPORTED)
-        target_link_libraries(GTest::gtest INTERFACE GTest::GTest)
-    endif()
-    if(NOT TARGET GTest::gtest_main)
-        add_library(GTest::gtest_main INTERFACE IMPORTED)
-        target_link_libraries(GTest::gtest_main INTERFACE GTest::Main)
-    endif()
-endif()
diff --git a/share/cmake-3.18/Modules/FindGettext.cmake b/share/cmake-3.18/Modules/FindGettext.cmake
deleted file mode 100644
index 213ad13..0000000
--- a/share/cmake-3.18/Modules/FindGettext.cmake
+++ /dev/null
@@ -1,232 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindGettext
------------
-
-Find GNU gettext tools
-
-This module looks for the GNU gettext tools.  This module defines the
-following values:
-
-::
-
-  GETTEXT_MSGMERGE_EXECUTABLE: the full path to the msgmerge tool.
-  GETTEXT_MSGFMT_EXECUTABLE: the full path to the msgfmt tool.
-  GETTEXT_FOUND: True if gettext has been found.
-  GETTEXT_VERSION_STRING: the version of gettext found (since CMake 2.8.8)
-
-
-
-Additionally it provides the following macros:
-
-GETTEXT_CREATE_TRANSLATIONS ( outputFile [ALL] file1 ...  fileN )
-
-::
-
-    This will create a target "translations" which will convert the
-    given input po files into the binary output mo file. If the
-    ALL option is used, the translations will also be created when
-    building the default target.
-
-GETTEXT_PROCESS_POT_FILE( <potfile> [ALL] [INSTALL_DESTINATION <destdir>]
-LANGUAGES <lang1> <lang2> ...  )
-
-::
-
-     Process the given pot file to mo files.
-     If INSTALL_DESTINATION is given then automatically install rules will
-     be created, the language subdirectory will be taken into account
-     (by default use share/locale/).
-     If ALL is specified, the pot file is processed when building the all traget.
-     It creates a custom target "potfile".
-
-GETTEXT_PROCESS_PO_FILES( <lang> [ALL] [INSTALL_DESTINATION <dir>]
-PO_FILES <po1> <po2> ...  )
-
-::
-
-     Process the given po files to mo files for the given language.
-     If INSTALL_DESTINATION is given then automatically install rules will
-     be created, the language subdirectory will be taken into account
-     (by default use share/locale/).
-     If ALL is specified, the po files are processed when building the all traget.
-     It creates a custom target "pofiles".
-
-.. note::
-  If you wish to use the Gettext library (libintl), use :module:`FindIntl`.
-#]=======================================================================]
-
-find_program(GETTEXT_MSGMERGE_EXECUTABLE msgmerge)
-
-find_program(GETTEXT_MSGFMT_EXECUTABLE msgfmt)
-
-if(GETTEXT_MSGMERGE_EXECUTABLE)
-  execute_process(COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --version
-                  OUTPUT_VARIABLE gettext_version
-                  ERROR_QUIET
-                  OUTPUT_STRIP_TRAILING_WHITESPACE)
-  get_filename_component(msgmerge_name ${GETTEXT_MSGMERGE_EXECUTABLE} NAME)
-  get_filename_component(msgmerge_namewe ${GETTEXT_MSGMERGE_EXECUTABLE} NAME_WE)
-  if (gettext_version MATCHES "^(${msgmerge_name}|${msgmerge_namewe}) \\([^\\)]*\\) ([0-9\\.]+[^ \n]*)")
-    set(GETTEXT_VERSION_STRING "${CMAKE_MATCH_2}")
-  endif()
-  unset(gettext_version)
-  unset(msgmerge_name)
-  unset(msgmerge_namewe)
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(Gettext
-                                  REQUIRED_VARS GETTEXT_MSGMERGE_EXECUTABLE GETTEXT_MSGFMT_EXECUTABLE
-                                  VERSION_VAR GETTEXT_VERSION_STRING)
-
-function(_GETTEXT_GET_UNIQUE_TARGET_NAME _name _unique_name)
-  set(propertyName "_GETTEXT_UNIQUE_COUNTER_${_name}")
-  get_property(currentCounter GLOBAL PROPERTY "${propertyName}")
-  if(NOT currentCounter)
-    set(currentCounter 1)
-  endif()
-  set(${_unique_name} "${_name}_${currentCounter}" PARENT_SCOPE)
-  math(EXPR currentCounter "${currentCounter} + 1")
-  set_property(GLOBAL PROPERTY ${propertyName} ${currentCounter} )
-endfunction()
-
-macro(GETTEXT_CREATE_TRANSLATIONS _potFile _firstPoFileArg)
-  # make it a real variable, so we can modify it here
-  set(_firstPoFile "${_firstPoFileArg}")
-
-  set(_gmoFiles)
-  get_filename_component(_potName ${_potFile} NAME)
-  string(REGEX REPLACE "^(.+)(\\.[^.]+)$" "\\1" _potBasename ${_potName})
-  get_filename_component(_absPotFile ${_potFile} ABSOLUTE)
-
-  set(_addToAll)
-  if(${_firstPoFile} STREQUAL "ALL")
-    set(_addToAll "ALL")
-    set(_firstPoFile)
-  endif()
-
-  foreach (_currentPoFile ${_firstPoFile} ${ARGN})
-    get_filename_component(_absFile ${_currentPoFile} ABSOLUTE)
-    get_filename_component(_abs_PATH ${_absFile} PATH)
-    get_filename_component(_lang ${_absFile} NAME_WE)
-    set(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo)
-
-    add_custom_command(
-      OUTPUT ${_gmoFile}
-      COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --quiet --update --backup=none -s ${_absFile} ${_absPotFile}
-      COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_absFile}
-      DEPENDS ${_absPotFile} ${_absFile}
-    )
-
-    install(FILES ${_gmoFile} DESTINATION share/locale/${_lang}/LC_MESSAGES RENAME ${_potBasename}.mo)
-    set(_gmoFiles ${_gmoFiles} ${_gmoFile})
-
-  endforeach ()
-
-  if(NOT TARGET translations)
-    add_custom_target(translations)
-  endif()
-
-  _GETTEXT_GET_UNIQUE_TARGET_NAME(translations uniqueTargetName)
-
-  add_custom_target(${uniqueTargetName} ${_addToAll} DEPENDS ${_gmoFiles})
-
-  add_dependencies(translations ${uniqueTargetName})
-
-endmacro()
-
-
-function(GETTEXT_PROCESS_POT_FILE _potFile)
-  set(_gmoFiles)
-  set(_options ALL)
-  set(_oneValueArgs INSTALL_DESTINATION)
-  set(_multiValueArgs LANGUAGES)
-
-  CMAKE_PARSE_ARGUMENTS(_parsedArguments "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN})
-
-  get_filename_component(_potName ${_potFile} NAME)
-  string(REGEX REPLACE "^(.+)(\\.[^.]+)$" "\\1" _potBasename ${_potName})
-  get_filename_component(_absPotFile ${_potFile} ABSOLUTE)
-
-  foreach (_lang ${_parsedArguments_LANGUAGES})
-    set(_poFile  "${CMAKE_CURRENT_BINARY_DIR}/${_lang}.po")
-    set(_gmoFile "${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo")
-
-    add_custom_command(
-      OUTPUT "${_poFile}"
-      COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --quiet --update --backup=none -s ${_poFile} ${_absPotFile}
-      DEPENDS ${_absPotFile}
-    )
-
-    add_custom_command(
-      OUTPUT "${_gmoFile}"
-      COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_poFile}
-      DEPENDS ${_absPotFile} ${_poFile}
-    )
-
-    if(_parsedArguments_INSTALL_DESTINATION)
-      install(FILES ${_gmoFile} DESTINATION ${_parsedArguments_INSTALL_DESTINATION}/${_lang}/LC_MESSAGES RENAME ${_potBasename}.mo)
-    endif()
-    list(APPEND _gmoFiles ${_gmoFile})
-  endforeach ()
-
-  if(NOT TARGET potfiles)
-    add_custom_target(potfiles)
-  endif()
-
-  _GETTEXT_GET_UNIQUE_TARGET_NAME( potfiles uniqueTargetName)
-
-  if(_parsedArguments_ALL)
-    add_custom_target(${uniqueTargetName} ALL DEPENDS ${_gmoFiles})
-  else()
-    add_custom_target(${uniqueTargetName} DEPENDS ${_gmoFiles})
-  endif()
-
-  add_dependencies(potfiles ${uniqueTargetName})
-
-endfunction()
-
-
-function(GETTEXT_PROCESS_PO_FILES _lang)
-  set(_options ALL)
-  set(_oneValueArgs INSTALL_DESTINATION)
-  set(_multiValueArgs PO_FILES)
-  set(_gmoFiles)
-
-  CMAKE_PARSE_ARGUMENTS(_parsedArguments "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN})
-
-  foreach(_current_PO_FILE ${_parsedArguments_PO_FILES})
-    get_filename_component(_name ${_current_PO_FILE} NAME)
-    string(REGEX REPLACE "^(.+)(\\.[^.]+)$" "\\1" _basename ${_name})
-    set(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.gmo)
-    add_custom_command(OUTPUT ${_gmoFile}
-      COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_current_PO_FILE}
-      WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
-      DEPENDS ${_current_PO_FILE}
-    )
-
-    if(_parsedArguments_INSTALL_DESTINATION)
-      install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.gmo DESTINATION ${_parsedArguments_INSTALL_DESTINATION}/${_lang}/LC_MESSAGES/ RENAME ${_basename}.mo)
-    endif()
-    list(APPEND _gmoFiles ${_gmoFile})
-  endforeach()
-
-
-  if(NOT TARGET pofiles)
-    add_custom_target(pofiles)
-  endif()
-
-  _GETTEXT_GET_UNIQUE_TARGET_NAME( pofiles uniqueTargetName)
-
-  if(_parsedArguments_ALL)
-    add_custom_target(${uniqueTargetName} ALL DEPENDS ${_gmoFiles})
-  else()
-    add_custom_target(${uniqueTargetName} DEPENDS ${_gmoFiles})
-  endif()
-
-  add_dependencies(pofiles ${uniqueTargetName})
-
-endfunction()
diff --git a/share/cmake-3.18/Modules/FindGit.cmake b/share/cmake-3.18/Modules/FindGit.cmake
deleted file mode 100644
index 3491cdc..0000000
--- a/share/cmake-3.18/Modules/FindGit.cmake
+++ /dev/null
@@ -1,98 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindGit
--------
-
-The module defines the following ``IMPORTED`` targets (when
-:prop_gbl:`CMAKE_ROLE` is ``PROJECT``):
-
-``Git::Git``
-  Executable of the Git command-line client.
-
-The module defines the following variables:
-
-``GIT_EXECUTABLE``
-  Path to Git command-line client.
-``Git_FOUND``, ``GIT_FOUND``
-  True if the Git command-line client was found.
-``GIT_VERSION_STRING``
-  The version of Git found.
-
-Example usage:
-
-.. code-block:: cmake
-
-   find_package(Git)
-   if(Git_FOUND)
-     message("Git found: ${GIT_EXECUTABLE}")
-   endif()
-#]=======================================================================]
-
-# Look for 'git' or 'eg' (easy git)
-#
-set(git_names git eg)
-
-# Prefer .cmd variants on Windows unless running in a Makefile
-# in the MSYS shell.
-#
-if(CMAKE_HOST_WIN32)
-  if(NOT CMAKE_GENERATOR MATCHES "MSYS")
-    set(git_names git.cmd git eg.cmd eg)
-    # GitHub search path for Windows
-    file(GLOB github_path
-      "$ENV{LOCALAPPDATA}/Github/PortableGit*/cmd"
-      "$ENV{LOCALAPPDATA}/Github/PortableGit*/bin"
-      )
-    # SourceTree search path for Windows
-    set(_git_sourcetree_path "$ENV{LOCALAPPDATA}/Atlassian/SourceTree/git_local/bin")
-  endif()
-endif()
-
-# First search the PATH and specific locations.
-find_program(GIT_EXECUTABLE
-  NAMES ${git_names}
-  PATHS ${github_path} ${_git_sourcetree_path}
-  DOC "Git command line client"
-  )
-
-if(CMAKE_HOST_WIN32)
-  # Now look for installations in Git/ directories under typical installation
-  # prefixes on Windows.  Exclude PATH from this search because VS 2017's
-  # command prompt happens to have a PATH entry with a Git/ subdirectory
-  # containing a minimal git not meant for general use.
-  find_program(GIT_EXECUTABLE
-    NAMES ${git_names}
-    PATH_SUFFIXES Git/cmd Git/bin
-    NO_SYSTEM_ENVIRONMENT_PATH
-    DOC "Git command line client"
-    )
-endif()
-
-mark_as_advanced(GIT_EXECUTABLE)
-
-unset(git_names)
-unset(_git_sourcetree_path)
-
-if(GIT_EXECUTABLE)
-  execute_process(COMMAND ${GIT_EXECUTABLE} --version
-                  OUTPUT_VARIABLE git_version
-                  ERROR_QUIET
-                  OUTPUT_STRIP_TRAILING_WHITESPACE)
-  if (git_version MATCHES "^git version [0-9]")
-    string(REPLACE "git version " "" GIT_VERSION_STRING "${git_version}")
-  endif()
-  unset(git_version)
-
-  get_property(_findgit_role GLOBAL PROPERTY CMAKE_ROLE)
-  if(_findgit_role STREQUAL "PROJECT" AND NOT TARGET Git::Git)
-    add_executable(Git::Git IMPORTED)
-    set_property(TARGET Git::Git PROPERTY IMPORTED_LOCATION "${GIT_EXECUTABLE}")
-  endif()
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-find_package_handle_standard_args(Git
-                                  REQUIRED_VARS GIT_EXECUTABLE
-                                  VERSION_VAR GIT_VERSION_STRING)
diff --git a/share/cmake-3.18/Modules/FindGnuTLS.cmake b/share/cmake-3.18/Modules/FindGnuTLS.cmake
deleted file mode 100644
index 819f000..0000000
--- a/share/cmake-3.18/Modules/FindGnuTLS.cmake
+++ /dev/null
@@ -1,82 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindGnuTLS
-----------
-
-Find the GNU Transport Layer Security library (gnutls)
-
-IMPORTED Targets
-^^^^^^^^^^^^^^^^
-
-This module defines :prop_tgt:`IMPORTED` target ``GnuTLS::GnuTLS``, if
-gnutls has been found.
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-``GNUTLS_FOUND``
-  System has gnutls
-``GNUTLS_INCLUDE_DIR``
-  The gnutls include directory
-``GNUTLS_LIBRARIES``
-  The libraries needed to use gnutls
-``GNUTLS_DEFINITIONS``
-  Compiler switches required for using gnutls
-``GNUTLS_VERSION``
-  version of gnutls.
-#]=======================================================================]
-
-# Note that this doesn't try to find the gnutls-extra package.
-
-
-if (GNUTLS_INCLUDE_DIR AND GNUTLS_LIBRARY)
-  # in cache already
-  set(gnutls_FIND_QUIETLY TRUE)
-endif ()
-
-if (NOT WIN32)
-  # try using pkg-config to get the directories and then use these values
-  # in the find_path() and find_library() calls
-  # also fills in GNUTLS_DEFINITIONS, although that isn't normally useful
-  find_package(PkgConfig QUIET)
-  PKG_CHECK_MODULES(PC_GNUTLS QUIET gnutls)
-  set(GNUTLS_DEFINITIONS ${PC_GNUTLS_CFLAGS_OTHER})
-  set(GNUTLS_VERSION ${PC_GNUTLS_VERSION})
-  # keep for backward compatibility
-  set(GNUTLS_VERSION_STRING ${PC_GNUTLS_VERSION})
-endif ()
-
-find_path(GNUTLS_INCLUDE_DIR gnutls/gnutls.h
-  HINTS
-    ${PC_GNUTLS_INCLUDEDIR}
-    ${PC_GNUTLS_INCLUDE_DIRS}
-  )
-
-find_library(GNUTLS_LIBRARY NAMES gnutls libgnutls
-  HINTS
-    ${PC_GNUTLS_LIBDIR}
-    ${PC_GNUTLS_LIBRARY_DIRS}
-  )
-
-mark_as_advanced(GNUTLS_INCLUDE_DIR GNUTLS_LIBRARY)
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(GnuTLS
-                                  REQUIRED_VARS GNUTLS_LIBRARY GNUTLS_INCLUDE_DIR
-                                  VERSION_VAR GNUTLS_VERSION_STRING)
-
-if(GNUTLS_FOUND)
-  set(GNUTLS_LIBRARIES    ${GNUTLS_LIBRARY})
-  set(GNUTLS_INCLUDE_DIRS ${GNUTLS_INCLUDE_DIR})
-
-  if(NOT TARGET GnuTLS::GnuTLS)
-    add_library(GnuTLS::GnuTLS UNKNOWN IMPORTED)
-    set_target_properties(GnuTLS::GnuTLS PROPERTIES
-      INTERFACE_INCLUDE_DIRECTORIES "${GNUTLS_INCLUDE_DIRS}"
-      INTERFACE_COMPILE_DEFINITIONS "${GNUTLS_DEFINITIONS}"
-      IMPORTED_LINK_INTERFACE_LANGUAGES "C"
-      IMPORTED_LOCATION "${GNUTLS_LIBRARIES}")
-  endif()
-endif()
diff --git a/share/cmake-3.18/Modules/FindGnuplot.cmake b/share/cmake-3.18/Modules/FindGnuplot.cmake
deleted file mode 100644
index ca2467d..0000000
--- a/share/cmake-3.18/Modules/FindGnuplot.cmake
+++ /dev/null
@@ -1,55 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindGnuplot
------------
-
-this module looks for gnuplot
-
-
-
-Once done this will define
-
-::
-
-  GNUPLOT_FOUND - system has Gnuplot
-  GNUPLOT_EXECUTABLE - the Gnuplot executable
-  GNUPLOT_VERSION_STRING - the version of Gnuplot found (since CMake 2.8.8)
-
-
-
-GNUPLOT_VERSION_STRING will not work for old versions like 3.7.1.
-#]=======================================================================]
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindCygwin.cmake)
-
-find_program(GNUPLOT_EXECUTABLE
-  NAMES
-  gnuplot
-  pgnuplot
-  wgnupl32
-  PATHS
-  ${CYGWIN_INSTALL_PATH}/bin
-)
-
-if (GNUPLOT_EXECUTABLE)
-    execute_process(COMMAND "${GNUPLOT_EXECUTABLE}" --version
-                  OUTPUT_VARIABLE GNUPLOT_OUTPUT_VARIABLE
-                  ERROR_QUIET
-                  OUTPUT_STRIP_TRAILING_WHITESPACE)
-
-    string(REGEX REPLACE "^gnuplot ([0-9\\.]+)( patchlevel )?" "\\1." GNUPLOT_VERSION_STRING "${GNUPLOT_OUTPUT_VARIABLE}")
-    string(REGEX REPLACE "\\.$" "" GNUPLOT_VERSION_STRING "${GNUPLOT_VERSION_STRING}")
-    unset(GNUPLOT_OUTPUT_VARIABLE)
-endif()
-
-# for compatibility
-set(GNUPLOT ${GNUPLOT_EXECUTABLE})
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(Gnuplot
-                                  REQUIRED_VARS GNUPLOT_EXECUTABLE
-                                  VERSION_VAR GNUPLOT_VERSION_STRING)
-
-mark_as_advanced( GNUPLOT_EXECUTABLE )
diff --git a/share/cmake-3.18/Modules/FindHDF5.cmake b/share/cmake-3.18/Modules/FindHDF5.cmake
deleted file mode 100644
index 60a313d..0000000
--- a/share/cmake-3.18/Modules/FindHDF5.cmake
+++ /dev/null
@@ -1,992 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindHDF5
---------
-
-Find Hierarchical Data Format (HDF5), a library for reading and writing
-self describing array data.
-
-
-This module invokes the ``HDF5`` wrapper compiler that should be installed
-alongside ``HDF5``.  Depending upon the ``HDF5`` Configuration, the wrapper
-compiler is called either ``h5cc`` or ``h5pcc``.  If this succeeds, the module
-will then call the compiler with the show argument to see what flags
-are used when compiling an ``HDF5`` client application.
-
-The module will optionally accept the ``COMPONENTS`` argument.  If no
-``COMPONENTS`` are specified, then the find module will default to finding
-only the ``HDF5`` C library.  If one or more ``COMPONENTS`` are specified, the
-module will attempt to find the language bindings for the specified
-components.  The valid components are ``C``, ``CXX``, ``Fortran``, ``HL``.
-``HL`` refers to the "high-level" HDF5 functions for C and Fortran.
-If the ``COMPONENTS`` argument is not given, the module will
-attempt to find only the C bindings.
-For example, to use Fortran HDF5 and HDF5-HL functions, do:
-``find_package(HDF5 COMPONENTS Fortran HL)``.
-
-This module will read the variable
-``HDF5_USE_STATIC_LIBRARIES`` to determine whether or not to prefer a
-static link to a dynamic link for ``HDF5`` and all of it's dependencies.
-To use this feature, make sure that the ``HDF5_USE_STATIC_LIBRARIES``
-variable is set before the call to find_package.
-
-Both the serial and parallel ``HDF5`` wrappers are considered and the first
-directory to contain either one will be used.  In the event that both appear
-in the same directory the serial version is preferentially selected. This
-behavior can be reversed by setting the variable ``HDF5_PREFER_PARALLEL`` to
-``TRUE``.
-
-In addition to finding the includes and libraries required to compile
-an ``HDF5`` client application, this module also makes an effort to find
-tools that come with the ``HDF5`` distribution that may be useful for
-regression testing.
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-This module will set the following variables in your project:
-
-``HDF5_FOUND``
-  HDF5 was found on the system
-``HDF5_VERSION``
-  HDF5 library version
-``HDF5_INCLUDE_DIRS``
-  Location of the HDF5 header files
-``HDF5_DEFINITIONS``
-  Required compiler definitions for HDF5
-``HDF5_LIBRARIES``
-  Required libraries for all requested bindings
-``HDF5_HL_LIBRARIES``
-  Required libraries for the HDF5 high level API for all bindings,
-  if the ``HL`` component is enabled
-
-Available components are: ``C`` ``CXX`` ``Fortran`` and ``HL``.
-For each enabled language binding, a corresponding ``HDF5_${LANG}_LIBRARIES``
-variable, and potentially ``HDF5_${LANG}_DEFINITIONS``, will be defined.
-If the ``HL`` component is enabled, then an ``HDF5_${LANG}_HL_LIBRARIES`` will
-also be defined.  With all components enabled, the following variables will be defined:
-
-``HDF5_C_DEFINITIONS``
-  Required compiler definitions for HDF5 C bindings
-``HDF5_CXX_DEFINITIONS``
-  Required compiler definitions for HDF5 C++ bindings
-``HDF5_Fortran_DEFINITIONS``
-  Required compiler definitions for HDF5 Fortran bindings
-``HDF5_C_INCLUDE_DIRS``
-  Required include directories for HDF5 C bindings
-``HDF5_CXX_INCLUDE_DIRS``
-  Required include directories for HDF5 C++ bindings
-``HDF5_Fortran_INCLUDE_DIRS``
-  Required include directories for HDF5 Fortran bindings
-``HDF5_C_LIBRARIES``
-  Required libraries for the HDF5 C bindings
-``HDF5_CXX_LIBRARIES``
-  Required libraries for the HDF5 C++ bindings
-``HDF5_Fortran_LIBRARIES``
-  Required libraries for the HDF5 Fortran bindings
-``HDF5_C_HL_LIBRARIES``
-  Required libraries for the high level C bindings
-``HDF5_CXX_HL_LIBRARIES``
-  Required libraries for the high level C++ bindings
-``HDF5_Fortran_HL_LIBRARIES``
-  Required libraries for the high level Fortran bindings.
-
-``HDF5_IS_PARALLEL``
-  HDF5 library has parallel IO support
-``HDF5_C_COMPILER_EXECUTABLE``
-  path to the HDF5 C wrapper compiler
-``HDF5_CXX_COMPILER_EXECUTABLE``
-  path to the HDF5 C++ wrapper compiler
-``HDF5_Fortran_COMPILER_EXECUTABLE``
-  path to the HDF5 Fortran wrapper compiler
-``HDF5_C_COMPILER_EXECUTABLE_NO_INTERROGATE``
-  path to the primary C compiler which is also the HDF5 wrapper
-``HDF5_CXX_COMPILER_EXECUTABLE_NO_INTERROGATE``
-  path to the primary C++ compiler which is also the HDF5 wrapper
-``HDF5_Fortran_COMPILER_EXECUTABLE_NO_INTERROGATE``
-  path to the primary Fortran compiler which is also the HDF5 wrapper
-``HDF5_DIFF_EXECUTABLE``
-  path to the HDF5 dataset comparison tool
-
-Hints
-^^^^^
-
-The following variables can be set to guide the search for HDF5 libraries and includes:
-
-``HDF5_PREFER_PARALLEL``
-  set ``true`` to prefer parallel HDF5 (by default, serial is preferred)
-
-``HDF5_FIND_DEBUG``
-  Set ``true`` to get extra debugging output.
-
-``HDF5_NO_FIND_PACKAGE_CONFIG_FILE``
-  Set ``true`` to skip trying to find ``hdf5-config.cmake``.
-#]=======================================================================]
-
-# This module is maintained by Will Dicharry <wdicharry@stellarscience.com>.
-
-include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-
-# List of the valid HDF5 components
-set(HDF5_VALID_LANGUAGE_BINDINGS C CXX Fortran)
-
-# Validate the list of find components.
-if(NOT HDF5_FIND_COMPONENTS)
-  set(HDF5_LANGUAGE_BINDINGS "C")
-else()
-  set(HDF5_LANGUAGE_BINDINGS)
-  # add the extra specified components, ensuring that they are valid.
-  set(HDF5_FIND_HL OFF)
-  foreach(_component IN LISTS HDF5_FIND_COMPONENTS)
-    list(FIND HDF5_VALID_LANGUAGE_BINDINGS ${_component} _component_location)
-    if(NOT _component_location EQUAL -1)
-      list(APPEND HDF5_LANGUAGE_BINDINGS ${_component})
-    elseif(_component STREQUAL "HL")
-      set(HDF5_FIND_HL ON)
-    elseif(_component STREQUAL "Fortran_HL") # only for compatibility
-      list(APPEND HDF5_LANGUAGE_BINDINGS Fortran)
-      set(HDF5_FIND_HL ON)
-      set(HDF5_FIND_REQUIRED_Fortran_HL FALSE)
-      set(HDF5_FIND_REQUIRED_Fortran TRUE)
-      set(HDF5_FIND_REQUIRED_HL TRUE)
-    else()
-      message(FATAL_ERROR "${_component} is not a valid HDF5 component.")
-    endif()
-  endforeach()
-  unset(_component)
-  unset(_component_location)
-  if(NOT HDF5_LANGUAGE_BINDINGS)
-    get_property(_langs GLOBAL PROPERTY ENABLED_LANGUAGES)
-    foreach(_lang IN LISTS _langs)
-      if(_lang MATCHES "^(C|CXX|Fortran)$")
-        list(APPEND HDF5_LANGUAGE_BINDINGS ${_lang})
-      endif()
-    endforeach()
-  endif()
-  list(REMOVE_ITEM HDF5_FIND_COMPONENTS Fortran_HL) # replaced by Fortran and HL
-  list(REMOVE_DUPLICATES HDF5_LANGUAGE_BINDINGS)
-endif()
-
-# Determine whether to search for serial or parallel executable first
-if(HDF5_PREFER_PARALLEL)
-  set(HDF5_C_COMPILER_NAMES h5pcc h5cc)
-  set(HDF5_CXX_COMPILER_NAMES h5pc++ h5c++)
-  set(HDF5_Fortran_COMPILER_NAMES h5pfc h5fc)
-else()
-  set(HDF5_C_COMPILER_NAMES h5cc h5pcc)
-  set(HDF5_CXX_COMPILER_NAMES h5c++ h5pc++)
-  set(HDF5_Fortran_COMPILER_NAMES h5fc h5pfc)
-endif()
-
-# We may have picked up some duplicates in various lists during the above
-# process for the language bindings (both the C and C++ bindings depend on
-# libz for example).  Remove the duplicates. It appears that the default
-# CMake behavior is to remove duplicates from the end of a list. However,
-# for link lines, this is incorrect since unresolved symbols are searched
-# for down the link line. Therefore, we reverse the list, remove the
-# duplicates, and then reverse it again to get the duplicates removed from
-# the beginning.
-macro(_HDF5_remove_duplicates_from_beginning _list_name)
-  if(${_list_name})
-    list(REVERSE ${_list_name})
-    list(REMOVE_DUPLICATES ${_list_name})
-    list(REVERSE ${_list_name})
-  endif()
-endmacro()
-
-
-# Test first if the current compilers automatically wrap HDF5
-
-function(_HDF5_test_regular_compiler_C success version is_parallel)
-  set(scratch_directory
-    ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/hdf5)
-  if(NOT ${success} OR
-     NOT EXISTS ${scratch_directory}/compiler_has_h5_c)
-    set(test_file ${scratch_directory}/cmake_hdf5_test.c)
-    file(WRITE ${test_file}
-      "#include <hdf5.h>\n"
-      "#include <hdf5_hl.h>\n"
-      "const char* info_ver = \"INFO\" \":\" H5_VERSION;\n"
-      "#ifdef H5_HAVE_PARALLEL\n"
-      "const char* info_parallel = \"INFO\" \":\" \"PARALLEL\";\n"
-      "#endif\n"
-      "int main(int argc, char **argv) {\n"
-      "  int require = 0;\n"
-      "  require += info_ver[argc];\n"
-      "#ifdef H5_HAVE_PARALLEL\n"
-      "  require += info_parallel[argc];\n"
-      "#endif\n"
-      "  hid_t fid;\n"
-      "  fid = H5Fcreate(\"foo.h5\",H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT);\n"
-      "  return 0;\n"
-      "}")
-    try_compile(${success} ${scratch_directory} ${test_file}
-      COPY_FILE ${scratch_directory}/compiler_has_h5_c
-    )
-  endif()
-  if(${success})
-    file(STRINGS ${scratch_directory}/compiler_has_h5_c INFO_STRINGS
-      REGEX "^INFO:"
-    )
-    string(REGEX MATCH "^INFO:([0-9]+\\.[0-9]+\\.[0-9]+)(-patch([0-9]+))?"
-      INFO_VER "${INFO_STRINGS}"
-    )
-    set(${version} ${CMAKE_MATCH_1})
-    if(CMAKE_MATCH_3)
-      set(${version} ${HDF5_C_VERSION}.${CMAKE_MATCH_3})
-    endif()
-    set(${version} ${${version}} PARENT_SCOPE)
-
-    if(INFO_STRINGS MATCHES "INFO:PARALLEL")
-      set(${is_parallel} TRUE PARENT_SCOPE)
-    else()
-      set(${is_parallel} FALSE PARENT_SCOPE)
-    endif()
-  endif()
-endfunction()
-
-function(_HDF5_test_regular_compiler_CXX success version is_parallel)
-  set(scratch_directory ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/hdf5)
-  if(NOT ${success} OR
-     NOT EXISTS ${scratch_directory}/compiler_has_h5_cxx)
-    set(test_file ${scratch_directory}/cmake_hdf5_test.cxx)
-    file(WRITE ${test_file}
-      "#include <H5Cpp.h>\n"
-      "#ifndef H5_NO_NAMESPACE\n"
-      "using namespace H5;\n"
-      "#endif\n"
-      "const char* info_ver = \"INFO\" \":\" H5_VERSION;\n"
-      "#ifdef H5_HAVE_PARALLEL\n"
-      "const char* info_parallel = \"INFO\" \":\" \"PARALLEL\";\n"
-      "#endif\n"
-      "int main(int argc, char **argv) {\n"
-      "  int require = 0;\n"
-      "  require += info_ver[argc];\n"
-      "#ifdef H5_HAVE_PARALLEL\n"
-      "  require += info_parallel[argc];\n"
-      "#endif\n"
-      "  H5File file(\"foo.h5\", H5F_ACC_TRUNC);\n"
-      "  return 0;\n"
-      "}")
-    try_compile(${success} ${scratch_directory} ${test_file}
-      COPY_FILE ${scratch_directory}/compiler_has_h5_cxx
-    )
-  endif()
-  if(${success})
-    file(STRINGS ${scratch_directory}/compiler_has_h5_cxx INFO_STRINGS
-      REGEX "^INFO:"
-    )
-    string(REGEX MATCH "^INFO:([0-9]+\\.[0-9]+\\.[0-9]+)(-patch([0-9]+))?"
-      INFO_VER "${INFO_STRINGS}"
-    )
-    set(${version} ${CMAKE_MATCH_1})
-    if(CMAKE_MATCH_3)
-      set(${version} ${HDF5_CXX_VERSION}.${CMAKE_MATCH_3})
-    endif()
-    set(${version} ${${version}} PARENT_SCOPE)
-
-    if(INFO_STRINGS MATCHES "INFO:PARALLEL")
-      set(${is_parallel} TRUE PARENT_SCOPE)
-    else()
-      set(${is_parallel} FALSE PARENT_SCOPE)
-    endif()
-  endif()
-endfunction()
-
-function(_HDF5_test_regular_compiler_Fortran success is_parallel)
-  if(NOT ${success})
-    set(scratch_directory
-      ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/hdf5)
-    set(test_file ${scratch_directory}/cmake_hdf5_test.f90)
-    file(WRITE ${test_file}
-      "program hdf5_hello\n"
-      "  use hdf5\n"
-      "  use h5lt\n"
-      "  use h5ds\n"
-      "  integer error\n"
-      "  call h5open_f(error)\n"
-      "  call h5close_f(error)\n"
-      "end\n")
-    try_compile(${success} ${scratch_directory} ${test_file})
-    if(${success})
-      execute_process(COMMAND ${CMAKE_Fortran_COMPILER} -showconfig
-        OUTPUT_VARIABLE config_output
-        ERROR_VARIABLE config_error
-        RESULT_VARIABLE config_result
-        )
-      if(config_output MATCHES "Parallel HDF5: yes")
-        set(${is_parallel} TRUE PARENT_SCOPE)
-      else()
-        set(${is_parallel} FALSE PARENT_SCOPE)
-      endif()
-    endif()
-  endif()
-endfunction()
-
-# Invoke the HDF5 wrapper compiler.  The compiler return value is stored to the
-# return_value argument, the text output is stored to the output variable.
-function( _HDF5_invoke_compiler language output_var return_value_var version_var is_parallel_var)
-  set(is_parallel FALSE)
-  if(HDF5_USE_STATIC_LIBRARIES)
-    set(lib_type_args -noshlib)
-  else()
-    set(lib_type_args -shlib)
-  endif()
-  set(scratch_dir ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/hdf5)
-  if("${language}" STREQUAL "C")
-    set(test_file ${scratch_dir}/cmake_hdf5_test.c)
-  elseif("${language}" STREQUAL "CXX")
-    set(test_file ${scratch_dir}/cmake_hdf5_test.cxx)
-  elseif("${language}" STREQUAL "Fortran")
-    set(test_file ${scratch_dir}/cmake_hdf5_test.f90)
-  endif()
-  # Verify that the compiler wrapper can actually compile: sometimes the compiler
-  # wrapper exists, but not the compiler.  E.g. Miniconda / Anaconda Python
-  execute_process(
-    COMMAND ${HDF5_${language}_COMPILER_EXECUTABLE} ${test_file}
-    RESULT_VARIABLE return_value
-    )
-  if(return_value)
-    message(STATUS
-      "HDF5 ${language} compiler wrapper is unable to compile a minimal HDF5 program.")
-  else()
-    execute_process(
-      COMMAND ${HDF5_${language}_COMPILER_EXECUTABLE} -show ${lib_type_args} ${test_file}
-      OUTPUT_VARIABLE output
-      ERROR_VARIABLE output
-      RESULT_VARIABLE return_value
-      OUTPUT_STRIP_TRAILING_WHITESPACE
-      )
-    if(return_value)
-      message(STATUS
-        "Unable to determine HDF5 ${language} flags from HDF5 wrapper.")
-    endif()
-    execute_process(
-      COMMAND ${HDF5_${language}_COMPILER_EXECUTABLE} -showconfig
-      OUTPUT_VARIABLE config_output
-      ERROR_VARIABLE config_output
-      RESULT_VARIABLE return_value
-      OUTPUT_STRIP_TRAILING_WHITESPACE
-      )
-    if(return_value)
-      message(STATUS
-        "Unable to determine HDF5 ${language} version_var from HDF5 wrapper.")
-    endif()
-    string(REGEX MATCH "HDF5 Version: ([a-zA-Z0-9\\.\\-]*)" version "${config_output}")
-    if(version)
-      string(REPLACE "HDF5 Version: " "" version "${version}")
-      string(REPLACE "-patch" "." version "${version}")
-    endif()
-    if(config_output MATCHES "Parallel HDF5: yes")
-      set(is_parallel TRUE)
-    endif()
-  endif()
-  foreach(var output return_value version is_parallel)
-    set(${${var}_var} ${${var}} PARENT_SCOPE)
-  endforeach()
-endfunction()
-
-# Parse a compile line for definitions, includes, library paths, and libraries.
-function(_HDF5_parse_compile_line compile_line_var include_paths definitions
-    library_paths libraries libraries_hl)
-
-  separate_arguments(_compile_args NATIVE_COMMAND "${${compile_line_var}}")
-
-  foreach(_arg IN LISTS _compile_args)
-    if("${_arg}" MATCHES "^-I(.*)$")
-      # include directory
-      list(APPEND include_paths "${CMAKE_MATCH_1}")
-    elseif("${_arg}" MATCHES "^-D(.*)$")
-      # compile definition
-      list(APPEND definitions "-D${CMAKE_MATCH_1}")
-    elseif("${_arg}" MATCHES "^-L(.*)$")
-      # library search path
-      list(APPEND library_paths "${CMAKE_MATCH_1}")
-    elseif("${_arg}" MATCHES "^-l(hdf5.*hl.*)$")
-      # library name (hl)
-      list(APPEND libraries_hl "${CMAKE_MATCH_1}")
-    elseif("${_arg}" MATCHES "^-l(.*)$")
-      # library name
-      list(APPEND libraries "${CMAKE_MATCH_1}")
-    elseif("${_arg}" MATCHES "^(.:)?[/\\].*\\.(a|so|dylib|sl|lib)$")
-      # library file
-      if(NOT EXISTS "${_arg}")
-        continue()
-      endif()
-      get_filename_component(_lpath "${_arg}" DIRECTORY)
-      get_filename_component(_lname "${_arg}" NAME_WE)
-      string(REGEX REPLACE "^lib" "" _lname "${_lname}")
-      list(APPEND library_paths "${_lpath}")
-      if(_lname MATCHES "hdf5.*hl")
-        list(APPEND libraries_hl "${_lname}")
-      else()
-        list(APPEND libraries "${_lname}")
-      endif()
-    endif()
-  endforeach()
-  foreach(var include_paths definitions library_paths libraries libraries_hl)
-    set(${${var}_var} ${${var}} PARENT_SCOPE)
-  endforeach()
-endfunction()
-
-# Select a preferred imported configuration from a target
-function(_HDF5_select_imported_config target imported_conf)
-    # We will first assign the value to a local variable _imported_conf, then assign
-    # it to the function argument at the end.
-    get_target_property(_imported_conf ${target} MAP_IMPORTED_CONFIG_${CMAKE_BUILD_TYPE})
-    if (NOT _imported_conf)
-        # Get available imported configurations by examining target properties
-        get_target_property(_imported_conf ${target} IMPORTED_CONFIGURATIONS)
-        if(HDF5_FIND_DEBUG)
-            message(STATUS "Found imported configurations: ${_imported_conf}")
-        endif()
-        # Find the imported configuration that we prefer.
-        # We do this by making list of configurations in order of preference,
-        # starting with ${CMAKE_BUILD_TYPE} and ending with the first imported_conf
-        set(_preferred_confs ${CMAKE_BUILD_TYPE})
-        list(GET _imported_conf 0 _fallback_conf)
-        list(APPEND _preferred_confs RELWITHDEBINFO RELEASE DEBUG ${_fallback_conf})
-        if(HDF5_FIND_DEBUG)
-            message(STATUS "Start search through imported configurations in the following order: ${_preferred_confs}")
-        endif()
-        # Now find the first of these that is present in imported_conf
-        cmake_policy(PUSH)
-        cmake_policy(SET CMP0057 NEW) # support IN_LISTS
-        foreach (_conf IN LISTS _preferred_confs)
-            if (${_conf} IN_LIST _imported_conf)
-               set(_imported_conf ${_conf})
-               break()
-            endif()
-        endforeach()
-        cmake_policy(POP)
-    endif()
-    if(HDF5_FIND_DEBUG)
-        message(STATUS "Selected imported configuration: ${_imported_conf}")
-    endif()
-    # assign value to function argument
-    set(${imported_conf} ${_imported_conf} PARENT_SCOPE)
-endfunction()
-
-
-if(NOT HDF5_ROOT)
-    set(HDF5_ROOT $ENV{HDF5_ROOT})
-endif()
-if(HDF5_ROOT)
-    set(_HDF5_SEARCH_OPTS NO_DEFAULT_PATH)
-else()
-    set(_HDF5_SEARCH_OPTS)
-endif()
-
-# Try to find HDF5 using an installed hdf5-config.cmake
-if(NOT HDF5_FOUND AND NOT HDF5_NO_FIND_PACKAGE_CONFIG_FILE)
-    find_package(HDF5 QUIET NO_MODULE
-      HINTS ${HDF5_ROOT}
-      ${_HDF5_SEARCH_OPTS}
-      )
-    if( HDF5_FOUND)
-        if(HDF5_FIND_DEBUG)
-            message(STATUS "Found HDF5 at ${HDF5_DIR} via NO_MODULE. Now trying to extract locations etc.")
-        endif()
-        set(HDF5_IS_PARALLEL ${HDF5_ENABLE_PARALLEL})
-        set(HDF5_INCLUDE_DIRS ${HDF5_INCLUDE_DIR})
-        set(HDF5_LIBRARIES)
-        if (NOT TARGET hdf5 AND NOT TARGET hdf5-static AND NOT TARGET hdf5-shared)
-            # Some HDF5 versions (e.g. 1.8.18) used hdf5::hdf5 etc
-            set(_target_prefix "hdf5::")
-        endif()
-        set(HDF5_C_TARGET ${_target_prefix}hdf5)
-        set(HDF5_C_HL_TARGET ${_target_prefix}hdf5_hl)
-        set(HDF5_CXX_TARGET ${_target_prefix}hdf5_cpp)
-        set(HDF5_CXX_HL_TARGET ${_target_prefix}hdf5_hl_cpp)
-        set(HDF5_Fortran_TARGET ${_target_prefix}hdf5_fortran)
-        set(HDF5_Fortran_HL_TARGET ${_target_prefix}hdf5_hl_fortran)
-        set(HDF5_DEFINITIONS "")
-        if(HDF5_USE_STATIC_LIBRARIES)
-            set(_suffix "-static")
-        else()
-            set(_suffix "-shared")
-        endif()
-        foreach(_lang ${HDF5_LANGUAGE_BINDINGS})
-
-            #Older versions of hdf5 don't have a static/shared suffix so
-            #if we detect that occurrence clear the suffix
-            if(_suffix AND NOT TARGET ${HDF5_${_lang}_TARGET}${_suffix})
-              if(NOT TARGET ${HDF5_${_lang}_TARGET})
-                #can't find this component with or without the suffix
-                #so bail out, and let the following locate HDF5
-                set(HDF5_FOUND FALSE)
-                break()
-              endif()
-              set(_suffix "")
-            endif()
-
-            if(HDF5_FIND_DEBUG)
-                message(STATUS "Trying to get properties of target ${HDF5_${_lang}_TARGET}${_suffix}")
-            endif()
-            # Find library for this target. Complicated as on Windows with a DLL, we need to search for the import-lib.
-            _HDF5_select_imported_config(${HDF5_${_lang}_TARGET}${_suffix} _hdf5_imported_conf)
-            get_target_property(_hdf5_lang_location ${HDF5_${_lang}_TARGET}${_suffix} IMPORTED_IMPLIB_${_hdf5_imported_conf} )
-            if (NOT _hdf5_lang_location)
-                # no import lib, just try LOCATION
-                get_target_property(_hdf5_lang_location ${HDF5_${_lang}_TARGET}${_suffix} LOCATION_${_hdf5_imported_conf})
-                if (NOT _hdf5_lang_location)
-                    get_target_property(_hdf5_lang_location ${HDF5_${_lang}_TARGET}${_suffix} LOCATION)
-                endif()
-            endif()
-            if( _hdf5_lang_location )
-                set(HDF5_${_lang}_LIBRARY ${_hdf5_lang_location})
-                list(APPEND HDF5_LIBRARIES ${HDF5_${_lang}_TARGET}${_suffix})
-                set(HDF5_${_lang}_LIBRARIES ${HDF5_${_lang}_TARGET}${_suffix})
-                set(HDF5_${_lang}_FOUND TRUE)
-            endif()
-            if(HDF5_FIND_HL)
-                get_target_property(_lang_hl_location ${HDF5_${_lang}_HL_TARGET}${_suffix} IMPORTED_IMPLIB_${_hdf5_imported_conf} )
-                if (NOT _hdf5_lang_hl_location)
-                    get_target_property(_hdf5_lang_hl_location ${HDF5_${_lang}_HL_TARGET}${_suffix} LOCATION_${_hdf5_imported_conf})
-                    if (NOT _hdf5_hl_lang_location)
-                        get_target_property(_hdf5_hl_lang_location ${HDF5_${_lang}_HL_TARGET}${_suffix} LOCATION)
-                    endif()
-                endif()
-                if( _hdf5_lang_hl_location )
-                    set(HDF5_${_lang}_HL_LIBRARY ${_hdf5_lang_hl_location})
-                    list(APPEND HDF5_HL_LIBRARIES ${HDF5_${_lang}_HL_TARGET}${_suffix})
-                    set(HDF5_${_lang}_HL_LIBRARIES ${HDF5_${_lang}_HL_TARGET}${_suffix})
-                    set(HDF5_HL_FOUND TRUE)
-                endif()
-                unset(_hdf5_lang_hl_location)
-            endif()
-            unset(_hdf5_imported_conf)
-            unset(_hdf5_lang_location)
-        endforeach()
-    endif()
-endif()
-
-if(NOT HDF5_FOUND)
-  set(_HDF5_NEED_TO_SEARCH FALSE)
-  set(HDF5_COMPILER_NO_INTERROGATE TRUE)
-  # Only search for languages we've enabled
-  foreach(_lang IN LISTS HDF5_LANGUAGE_BINDINGS)
-    # First check to see if our regular compiler is one of wrappers
-    if(_lang STREQUAL "C")
-      _HDF5_test_regular_compiler_C(
-        HDF5_${_lang}_COMPILER_NO_INTERROGATE
-        HDF5_${_lang}_VERSION
-        HDF5_${_lang}_IS_PARALLEL)
-    elseif(_lang STREQUAL "CXX")
-      _HDF5_test_regular_compiler_CXX(
-        HDF5_${_lang}_COMPILER_NO_INTERROGATE
-        HDF5_${_lang}_VERSION
-        HDF5_${_lang}_IS_PARALLEL)
-    elseif(_lang STREQUAL "Fortran")
-      _HDF5_test_regular_compiler_Fortran(
-        HDF5_${_lang}_COMPILER_NO_INTERROGATE
-        HDF5_${_lang}_IS_PARALLEL)
-    else()
-      continue()
-    endif()
-    if(HDF5_${_lang}_COMPILER_NO_INTERROGATE)
-      if(HDF5_FIND_DEBUG)
-        message(STATUS "HDF5: Using hdf5 compiler wrapper for all ${_lang} compiling")
-      endif()
-      set(HDF5_${_lang}_FOUND TRUE)
-      set(HDF5_${_lang}_COMPILER_EXECUTABLE_NO_INTERROGATE
-          "${CMAKE_${_lang}_COMPILER}"
-          CACHE FILEPATH "HDF5 ${_lang} compiler wrapper")
-      set(HDF5_${_lang}_DEFINITIONS)
-      set(HDF5_${_lang}_INCLUDE_DIRS)
-      set(HDF5_${_lang}_LIBRARIES)
-      set(HDF5_${_lang}_HL_LIBRARIES)
-
-      mark_as_advanced(HDF5_${_lang}_COMPILER_EXECUTABLE_NO_INTERROGATE)
-
-      set(HDF5_${_lang}_FOUND TRUE)
-      set(HDF5_HL_FOUND TRUE)
-    else()
-      set(HDF5_COMPILER_NO_INTERROGATE FALSE)
-      # If this language isn't using the wrapper, then try to seed the
-      # search options with the wrapper
-      find_program(HDF5_${_lang}_COMPILER_EXECUTABLE
-        NAMES ${HDF5_${_lang}_COMPILER_NAMES} NAMES_PER_DIR
-        HINTS ${HDF5_ROOT}
-        PATH_SUFFIXES bin Bin
-        DOC "HDF5 ${_lang} Wrapper compiler.  Used only to detect HDF5 compile flags."
-        ${_HDF5_SEARCH_OPTS}
-      )
-      mark_as_advanced( HDF5_${_lang}_COMPILER_EXECUTABLE )
-      unset(HDF5_${_lang}_COMPILER_NAMES)
-
-      if(HDF5_${_lang}_COMPILER_EXECUTABLE)
-        _HDF5_invoke_compiler(${_lang} HDF5_${_lang}_COMPILE_LINE
-          HDF5_${_lang}_RETURN_VALUE HDF5_${_lang}_VERSION HDF5_${_lang}_IS_PARALLEL)
-        if(HDF5_${_lang}_RETURN_VALUE EQUAL 0)
-          if(HDF5_FIND_DEBUG)
-            message(STATUS "HDF5: Using hdf5 compiler wrapper to determine ${_lang} configuration")
-          endif()
-          _HDF5_parse_compile_line( HDF5_${_lang}_COMPILE_LINE
-            HDF5_${_lang}_INCLUDE_DIRS
-            HDF5_${_lang}_DEFINITIONS
-            HDF5_${_lang}_LIBRARY_DIRS
-            HDF5_${_lang}_LIBRARY_NAMES
-            HDF5_${_lang}_HL_LIBRARY_NAMES
-          )
-          set(HDF5_${_lang}_LIBRARIES)
-
-          foreach(_lib IN LISTS HDF5_${_lang}_LIBRARY_NAMES)
-            set(_HDF5_SEARCH_NAMES_LOCAL)
-            if("x${_lib}" MATCHES "hdf5")
-              # hdf5 library
-              set(_HDF5_SEARCH_OPTS_LOCAL ${_HDF5_SEARCH_OPTS})
-              if(HDF5_USE_STATIC_LIBRARIES)
-                if(WIN32)
-                  set(_HDF5_SEARCH_NAMES_LOCAL lib${_lib})
-                else()
-                  set(_HDF5_SEARCH_NAMES_LOCAL lib${_lib}.a)
-                endif()
-              endif()
-            else()
-              # external library
-              set(_HDF5_SEARCH_OPTS_LOCAL)
-            endif()
-            find_library(HDF5_${_lang}_LIBRARY_${_lib}
-              NAMES ${_HDF5_SEARCH_NAMES_LOCAL} ${_lib} NAMES_PER_DIR
-              HINTS ${HDF5_${_lang}_LIBRARY_DIRS}
-                    ${HDF5_ROOT}
-              ${_HDF5_SEARCH_OPTS_LOCAL}
-              )
-            unset(_HDF5_SEARCH_OPTS_LOCAL)
-            unset(_HDF5_SEARCH_NAMES_LOCAL)
-            if(HDF5_${_lang}_LIBRARY_${_lib})
-              list(APPEND HDF5_${_lang}_LIBRARIES ${HDF5_${_lang}_LIBRARY_${_lib}})
-            else()
-              list(APPEND HDF5_${_lang}_LIBRARIES ${_lib})
-            endif()
-          endforeach()
-          if(HDF5_FIND_HL)
-            set(HDF5_${_lang}_HL_LIBRARIES)
-            foreach(_lib IN LISTS HDF5_${_lang}_HL_LIBRARY_NAMES)
-              set(_HDF5_SEARCH_NAMES_LOCAL)
-              if("x${_lib}" MATCHES "hdf5")
-                # hdf5 library
-                set(_HDF5_SEARCH_OPTS_LOCAL ${_HDF5_SEARCH_OPTS})
-                if(HDF5_USE_STATIC_LIBRARIES)
-                  if(WIN32)
-                    set(_HDF5_SEARCH_NAMES_LOCAL lib${_lib})
-                  else()
-                    set(_HDF5_SEARCH_NAMES_LOCAL lib${_lib}.a)
-                  endif()
-                endif()
-              else()
-                # external library
-                set(_HDF5_SEARCH_OPTS_LOCAL)
-              endif()
-              find_library(HDF5_${_lang}_LIBRARY_${_lib}
-                NAMES ${_HDF5_SEARCH_NAMES_LOCAL} ${_lib} NAMES_PER_DIR
-                HINTS ${HDF5_${_lang}_LIBRARY_DIRS}
-                      ${HDF5_ROOT}
-                ${_HDF5_SEARCH_OPTS_LOCAL}
-                )
-              unset(_HDF5_SEARCH_OPTS_LOCAL)
-              unset(_HDF5_SEARCH_NAMES_LOCAL)
-              if(HDF5_${_lang}_LIBRARY_${_lib})
-                list(APPEND HDF5_${_lang}_HL_LIBRARIES ${HDF5_${_lang}_LIBRARY_${_lib}})
-              else()
-                list(APPEND HDF5_${_lang}_HL_LIBRARIES ${_lib})
-              endif()
-            endforeach()
-            set(HDF5_HL_FOUND TRUE)
-          endif()
-
-          set(HDF5_${_lang}_FOUND TRUE)
-          _HDF5_remove_duplicates_from_beginning(HDF5_${_lang}_DEFINITIONS)
-          _HDF5_remove_duplicates_from_beginning(HDF5_${_lang}_INCLUDE_DIRS)
-          _HDF5_remove_duplicates_from_beginning(HDF5_${_lang}_LIBRARIES)
-          _HDF5_remove_duplicates_from_beginning(HDF5_${_lang}_HL_LIBRARIES)
-        else()
-          set(_HDF5_NEED_TO_SEARCH TRUE)
-        endif()
-      else()
-        set(_HDF5_NEED_TO_SEARCH TRUE)
-      endif()
-    endif()
-    if(HDF5_${_lang}_VERSION)
-      if(NOT HDF5_VERSION)
-        set(HDF5_VERSION ${HDF5_${_lang}_VERSION})
-      elseif(NOT HDF5_VERSION VERSION_EQUAL HDF5_${_lang}_VERSION)
-        message(WARNING "HDF5 Version found for language ${_lang}, ${HDF5_${_lang}_VERSION} is different than previously found version ${HDF5_VERSION}")
-      endif()
-    endif()
-    if(DEFINED HDF5_${_lang}_IS_PARALLEL)
-      if(NOT DEFINED HDF5_IS_PARALLEL)
-        set(HDF5_IS_PARALLEL ${HDF5_${_lang}_IS_PARALLEL})
-      elseif(NOT HDF5_IS_PARALLEL AND HDF5_${_lang}_IS_PARALLEL)
-        message(WARNING "HDF5 found for language ${_lang} is parallel but previously found language is not parallel.")
-      elseif(HDF5_IS_PARALLEL AND NOT HDF5_${_lang}_IS_PARALLEL)
-        message(WARNING "HDF5 found for language ${_lang} is not parallel but previously found language is parallel.")
-      endif()
-    endif()
-  endforeach()
-  unset(_lib)
-else()
-  set(_HDF5_NEED_TO_SEARCH TRUE)
-endif()
-
-if(NOT HDF5_FOUND AND HDF5_COMPILER_NO_INTERROGATE)
-  # No arguments necessary, all languages can use the compiler wrappers
-  set(HDF5_FOUND TRUE)
-  set(HDF5_METHOD "Included by compiler wrappers")
-  set(HDF5_REQUIRED_VARS HDF5_METHOD)
-elseif(NOT HDF5_FOUND AND NOT _HDF5_NEED_TO_SEARCH)
-  # Compiler wrappers aren't being used by the build but were found and used
-  # to determine necessary include and library flags
-  set(HDF5_INCLUDE_DIRS)
-  set(HDF5_LIBRARIES)
-  set(HDF5_HL_LIBRARIES)
-  foreach(_lang IN LISTS HDF5_LANGUAGE_BINDINGS)
-    if(HDF5_${_lang}_FOUND)
-      if(NOT HDF5_${_lang}_COMPILER_NO_INTERROGATE)
-        list(APPEND HDF5_DEFINITIONS ${HDF5_${_lang}_DEFINITIONS})
-        list(APPEND HDF5_INCLUDE_DIRS ${HDF5_${_lang}_INCLUDE_DIRS})
-        list(APPEND HDF5_LIBRARIES ${HDF5_${_lang}_LIBRARIES})
-        if(HDF5_FIND_HL)
-          list(APPEND HDF5_HL_LIBRARIES ${HDF5_${_lang}_HL_LIBRARIES})
-        endif()
-      endif()
-    endif()
-  endforeach()
-  _HDF5_remove_duplicates_from_beginning(HDF5_DEFINITIONS)
-  _HDF5_remove_duplicates_from_beginning(HDF5_INCLUDE_DIRS)
-  _HDF5_remove_duplicates_from_beginning(HDF5_LIBRARIES)
-  _HDF5_remove_duplicates_from_beginning(HDF5_HL_LIBRARIES)
-  set(HDF5_FOUND TRUE)
-  set(HDF5_REQUIRED_VARS HDF5_LIBRARIES)
-  if(HDF5_FIND_HL)
-    list(APPEND HDF5_REQUIRED_VARS HDF5_HL_LIBRARIES)
-  endif()
-endif()
-
-find_program( HDF5_DIFF_EXECUTABLE
-    NAMES h5diff
-    HINTS ${HDF5_ROOT}
-    PATH_SUFFIXES bin Bin
-    ${_HDF5_SEARCH_OPTS}
-    DOC "HDF5 file differencing tool." )
-mark_as_advanced( HDF5_DIFF_EXECUTABLE )
-
-if( NOT HDF5_FOUND )
-    # seed the initial lists of libraries to find with items we know we need
-    set(HDF5_C_LIBRARY_NAMES          hdf5)
-    set(HDF5_C_HL_LIBRARY_NAMES       hdf5_hl ${HDF5_C_LIBRARY_NAMES} )
-
-    set(HDF5_CXX_LIBRARY_NAMES        hdf5_cpp    ${HDF5_C_LIBRARY_NAMES})
-    set(HDF5_CXX_HL_LIBRARY_NAMES     hdf5_hl_cpp ${HDF5_C_HL_LIBRARY_NAMES} ${HDF5_CXX_LIBRARY_NAMES})
-
-    set(HDF5_Fortran_LIBRARY_NAMES    hdf5_fortran   ${HDF5_C_LIBRARY_NAMES})
-    set(HDF5_Fortran_HL_LIBRARY_NAMES hdf5hl_fortran ${HDF5_C_HL_LIBRARY_NAMES} ${HDF5_Fortran_LIBRARY_NAMES})
-
-    # suffixes as seen on Linux, MSYS2, ...
-    set(_lib_suffixes hdf5)
-    if(NOT HDF5_PREFER_PARALLEL)
-      list(APPEND _lib_suffixes hdf5/serial)
-    endif()
-    if(HDF5_USE_STATIC_LIBRARIES)
-      set(_inc_suffixes include/static)
-    else()
-      set(_inc_suffixes include/shared)
-    endif()
-
-    foreach(_lang IN LISTS HDF5_LANGUAGE_BINDINGS)
-        # find the HDF5 include directories
-        if("${_lang}" STREQUAL "Fortran")
-            set(HDF5_INCLUDE_FILENAME hdf5.mod HDF5.mod)
-        elseif("${_lang}" STREQUAL "CXX")
-            set(HDF5_INCLUDE_FILENAME H5Cpp.h)
-        else()
-            set(HDF5_INCLUDE_FILENAME hdf5.h)
-        endif()
-
-        find_path(HDF5_${_lang}_INCLUDE_DIR ${HDF5_INCLUDE_FILENAME}
-            HINTS ${HDF5_ROOT}
-            PATHS $ENV{HOME}/.local/include
-            PATH_SUFFIXES include Include ${_inc_suffixes} ${_lib_suffixes}
-            ${_HDF5_SEARCH_OPTS}
-        )
-        mark_as_advanced(HDF5_${_lang}_INCLUDE_DIR)
-        # set the _DIRS variable as this is what the user will normally use
-        set(HDF5_${_lang}_INCLUDE_DIRS ${HDF5_${_lang}_INCLUDE_DIR})
-        list(APPEND HDF5_INCLUDE_DIRS ${HDF5_${_lang}_INCLUDE_DIR})
-
-        # find the HDF5 libraries
-        foreach(LIB IN LISTS HDF5_${_lang}_LIBRARY_NAMES)
-            if(HDF5_USE_STATIC_LIBRARIES)
-                # According to bug 1643 on the CMake bug tracker, this is the
-                # preferred method for searching for a static library.
-                # See https://gitlab.kitware.com/cmake/cmake/-/issues/1643.  We search
-                # first for the full static library name, but fall back to a
-                # generic search on the name if the static search fails.
-                set( THIS_LIBRARY_SEARCH_DEBUG
-                    lib${LIB}d.a lib${LIB}_debug.a lib${LIB}d lib${LIB}_D lib${LIB}_debug
-                    lib${LIB}d-static.a lib${LIB}_debug-static.a ${LIB}d-static ${LIB}_D-static ${LIB}_debug-static )
-                set( THIS_LIBRARY_SEARCH_RELEASE lib${LIB}.a lib${LIB} lib${LIB}-static.a ${LIB}-static)
-            else()
-                set( THIS_LIBRARY_SEARCH_DEBUG ${LIB}d ${LIB}_D ${LIB}_debug ${LIB}d-shared ${LIB}_D-shared ${LIB}_debug-shared)
-                set( THIS_LIBRARY_SEARCH_RELEASE ${LIB} ${LIB}-shared)
-                if(WIN32)
-                  list(APPEND HDF5_DEFINITIONS "-DH5_BUILT_AS_DYNAMIC_LIB")
-                endif()
-            endif()
-            find_library(HDF5_${LIB}_LIBRARY_DEBUG
-                NAMES ${THIS_LIBRARY_SEARCH_DEBUG}
-                HINTS ${HDF5_ROOT} PATH_SUFFIXES lib Lib ${_lib_suffixes}
-                ${_HDF5_SEARCH_OPTS}
-            )
-            find_library(HDF5_${LIB}_LIBRARY_RELEASE
-                NAMES ${THIS_LIBRARY_SEARCH_RELEASE}
-                HINTS ${HDF5_ROOT} PATH_SUFFIXES lib Lib ${_lib_suffixes}
-                ${_HDF5_SEARCH_OPTS}
-            )
-
-            select_library_configurations( HDF5_${LIB} )
-            list(APPEND HDF5_${_lang}_LIBRARIES ${HDF5_${LIB}_LIBRARY})
-        endforeach()
-        if(HDF5_${_lang}_LIBRARIES)
-            set(HDF5_${_lang}_FOUND TRUE)
-        endif()
-
-        # Append the libraries for this language binding to the list of all
-        # required libraries.
-        list(APPEND HDF5_LIBRARIES ${HDF5_${_lang}_LIBRARIES})
-
-        if(HDF5_FIND_HL)
-            foreach(LIB IN LISTS HDF5_${_lang}_HL_LIBRARY_NAMES)
-                if(HDF5_USE_STATIC_LIBRARIES)
-                    # According to bug 1643 on the CMake bug tracker, this is the
-                    # preferred method for searching for a static library.
-                    # See https://gitlab.kitware.com/cmake/cmake/-/issues/1643.  We search
-                    # first for the full static library name, but fall back to a
-                    # generic search on the name if the static search fails.
-                    set( THIS_LIBRARY_SEARCH_DEBUG
-                        lib${LIB}d.a lib${LIB}_debug.a lib${LIB}d lib${LIB}_D lib${LIB}_debug
-                        lib${LIB}d-static.a lib${LIB}_debug-static.a lib${LIB}d-static lib${LIB}_D-static lib${LIB}_debug-static )
-                    set( THIS_LIBRARY_SEARCH_RELEASE lib${LIB}.a lib${LIB} lib${LIB}-static.a lib${LIB}-static)
-                else()
-                    set( THIS_LIBRARY_SEARCH_DEBUG ${LIB}d ${LIB}_D ${LIB}_debug ${LIB}d-shared ${LIB}_D-shared ${LIB}_debug-shared)
-                    set( THIS_LIBRARY_SEARCH_RELEASE ${LIB} ${LIB}-shared)
-                endif()
-                find_library(HDF5_${LIB}_LIBRARY_DEBUG
-                    NAMES ${THIS_LIBRARY_SEARCH_DEBUG}
-                    HINTS ${HDF5_ROOT} PATH_SUFFIXES lib Lib ${_lib_suffixes}
-                    ${_HDF5_SEARCH_OPTS}
-                )
-                find_library(HDF5_${LIB}_LIBRARY_RELEASE
-                    NAMES ${THIS_LIBRARY_SEARCH_RELEASE}
-                    HINTS ${HDF5_ROOT} PATH_SUFFIXES lib Lib ${_lib_suffixes}
-                    ${_HDF5_SEARCH_OPTS}
-                )
-
-                select_library_configurations( HDF5_${LIB} )
-                list(APPEND HDF5_${_lang}_HL_LIBRARIES ${HDF5_${LIB}_LIBRARY})
-            endforeach()
-
-            # Append the libraries for this language binding to the list of all
-            # required libraries.
-            list(APPEND HDF5_HL_LIBRARIES ${HDF5_${_lang}_HL_LIBRARIES})
-        endif()
-    endforeach()
-    if(HDF5_FIND_HL AND HDF5_HL_LIBRARIES)
-        set(HDF5_HL_FOUND TRUE)
-    endif()
-
-    _HDF5_remove_duplicates_from_beginning(HDF5_DEFINITIONS)
-    _HDF5_remove_duplicates_from_beginning(HDF5_INCLUDE_DIRS)
-    _HDF5_remove_duplicates_from_beginning(HDF5_LIBRARIES)
-    _HDF5_remove_duplicates_from_beginning(HDF5_HL_LIBRARIES)
-
-    # If the HDF5 include directory was found, open H5pubconf.h to determine if
-    # HDF5 was compiled with parallel IO support
-    set( HDF5_IS_PARALLEL FALSE )
-    set( HDF5_VERSION "" )
-    foreach( _dir IN LISTS HDF5_INCLUDE_DIRS )
-      foreach(_hdr "${_dir}/H5pubconf.h" "${_dir}/H5pubconf-64.h" "${_dir}/H5pubconf-32.h")
-        if( EXISTS "${_hdr}" )
-            file( STRINGS "${_hdr}"
-                HDF5_HAVE_PARALLEL_DEFINE
-                REGEX "HAVE_PARALLEL 1" )
-            if( HDF5_HAVE_PARALLEL_DEFINE )
-                set( HDF5_IS_PARALLEL TRUE )
-            endif()
-            unset(HDF5_HAVE_PARALLEL_DEFINE)
-
-            file( STRINGS "${_hdr}"
-                HDF5_VERSION_DEFINE
-                REGEX "^[ \t]*#[ \t]*define[ \t]+H5_VERSION[ \t]+" )
-            if( "${HDF5_VERSION_DEFINE}" MATCHES
-                "H5_VERSION[ \t]+\"([0-9]+\\.[0-9]+\\.[0-9]+)(-patch([0-9]+))?\"" )
-                set( HDF5_VERSION "${CMAKE_MATCH_1}" )
-                if( CMAKE_MATCH_3 )
-                  set( HDF5_VERSION ${HDF5_VERSION}.${CMAKE_MATCH_3})
-                endif()
-            endif()
-            unset(HDF5_VERSION_DEFINE)
-        endif()
-      endforeach()
-    endforeach()
-    unset(_hdr)
-    unset(_dir)
-    set( HDF5_IS_PARALLEL ${HDF5_IS_PARALLEL} CACHE BOOL
-        "HDF5 library compiled with parallel IO support" )
-    mark_as_advanced( HDF5_IS_PARALLEL )
-
-    set(HDF5_REQUIRED_VARS HDF5_LIBRARIES HDF5_INCLUDE_DIRS)
-    if(HDF5_FIND_HL)
-        list(APPEND HDF5_REQUIRED_VARS HDF5_HL_LIBRARIES)
-    endif()
-endif()
-
-# For backwards compatibility we set HDF5_INCLUDE_DIR to the value of
-# HDF5_INCLUDE_DIRS
-if( HDF5_INCLUDE_DIRS )
-  set( HDF5_INCLUDE_DIR "${HDF5_INCLUDE_DIRS}" )
-endif()
-
-# If HDF5_REQUIRED_VARS is empty at this point, then it's likely that
-# something external is trying to explicitly pass already found
-# locations
-if(NOT HDF5_REQUIRED_VARS)
-    set(HDF5_REQUIRED_VARS HDF5_LIBRARIES HDF5_INCLUDE_DIRS)
-endif()
-
-find_package_handle_standard_args(HDF5
-    REQUIRED_VARS ${HDF5_REQUIRED_VARS}
-    VERSION_VAR   HDF5_VERSION
-    HANDLE_COMPONENTS
-)
-
-unset(_HDF5_SEARCH_OPTS)
-
-if( HDF5_FOUND AND NOT HDF5_DIR)
-  # hide HDF5_DIR for the non-advanced user to avoid confusion with
-  # HDF5_DIR-NOT_FOUND while HDF5 was found.
-  mark_as_advanced(HDF5_DIR)
-endif()
-
-if (HDF5_FIND_DEBUG)
-  message(STATUS "HDF5_DIR: ${HDF5_DIR}")
-  message(STATUS "HDF5_DEFINITIONS: ${HDF5_DEFINITIONS}")
-  message(STATUS "HDF5_INCLUDE_DIRS: ${HDF5_INCLUDE_DIRS}")
-  message(STATUS "HDF5_LIBRARIES: ${HDF5_LIBRARIES}")
-  message(STATUS "HDF5_HL_LIBRARIES: ${HDF5_HL_LIBRARIES}")
-  foreach(_lang IN LISTS HDF5_LANGUAGE_BINDINGS)
-    message(STATUS "HDF5_${_lang}_DEFINITIONS: ${HDF5_${_lang}_DEFINITIONS}")
-    message(STATUS "HDF5_${_lang}_INCLUDE_DIR: ${HDF5_${_lang}_INCLUDE_DIR}")
-    message(STATUS "HDF5_${_lang}_INCLUDE_DIRS: ${HDF5_${_lang}_INCLUDE_DIRS}")
-    message(STATUS "HDF5_${_lang}_LIBRARY: ${HDF5_${_lang}_LIBRARY}")
-    message(STATUS "HDF5_${_lang}_LIBRARIES: ${HDF5_${_lang}_LIBRARIES}")
-    message(STATUS "HDF5_${_lang}_HL_LIBRARY: ${HDF5_${_lang}_HL_LIBRARY}")
-    message(STATUS "HDF5_${_lang}_HL_LIBRARIES: ${HDF5_${_lang}_HL_LIBRARIES}")
-  endforeach()
-endif()
-unset(_lang)
-unset(_HDF5_NEED_TO_SEARCH)
diff --git a/share/cmake-3.18/Modules/FindHg.cmake b/share/cmake-3.18/Modules/FindHg.cmake
deleted file mode 100644
index 1358363..0000000
--- a/share/cmake-3.18/Modules/FindHg.cmake
+++ /dev/null
@@ -1,97 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindHg
-------
-
-Extract information from a mercurial working copy.
-
-The module defines the following variables:
-
-::
-
-   HG_EXECUTABLE - path to mercurial command line client (hg)
-   HG_FOUND - true if the command line client was found
-   HG_VERSION_STRING - the version of mercurial found
-
-If the command line client executable is found the following macro is defined:
-
-::
-
-  HG_WC_INFO(<dir> <var-prefix>)
-
-Hg_WC_INFO extracts information of a mercurial working copy
-at a given location.  This macro defines the following variables:
-
-::
-
-  <var-prefix>_WC_CHANGESET - current changeset
-  <var-prefix>_WC_REVISION - current revision
-
-Example usage:
-
-::
-
-   find_package(Hg)
-   if(HG_FOUND)
-     message("hg found: ${HG_EXECUTABLE}")
-     HG_WC_INFO(${PROJECT_SOURCE_DIR} Project)
-     message("Current revision is ${Project_WC_REVISION}")
-     message("Current changeset is ${Project_WC_CHANGESET}")
-   endif()
-#]=======================================================================]
-
-find_program(HG_EXECUTABLE
-  NAMES hg
-  PATHS
-    [HKEY_LOCAL_MACHINE\\Software\\TortoiseHG]
-  PATH_SUFFIXES Mercurial
-  DOC "hg command line client"
-  )
-mark_as_advanced(HG_EXECUTABLE)
-
-if(HG_EXECUTABLE)
-  set(_saved_lc_all "$ENV{LC_ALL}")
-  set(ENV{LC_ALL} "C")
-
-  set(_saved_language "$ENV{LANGUAGE}")
-  set(ENV{LANGUAGE})
-
-  execute_process(COMMAND ${HG_EXECUTABLE} --version
-                  OUTPUT_VARIABLE hg_version
-                  ERROR_QUIET
-                  RESULT_VARIABLE hg_result
-                  OUTPUT_STRIP_TRAILING_WHITESPACE)
-
-  set(ENV{LC_ALL} ${_saved_lc_all})
-  set(ENV{LANGUAGE} ${_saved_language})
-
-  if(hg_result MATCHES "is not a valid Win32 application")
-    set_property(CACHE HG_EXECUTABLE PROPERTY VALUE "HG_EXECUTABLE-NOTFOUND")
-  endif()
-  if(hg_version MATCHES "^Mercurial Distributed SCM \\(version ([0-9][^)]*)\\)")
-    set(HG_VERSION_STRING "${CMAKE_MATCH_1}")
-  endif()
-  unset(hg_version)
-
-  macro(HG_WC_INFO dir prefix)
-    execute_process(COMMAND ${HG_EXECUTABLE} id -i -n
-      WORKING_DIRECTORY ${dir}
-      RESULT_VARIABLE hg_id_result
-      ERROR_VARIABLE hg_id_error
-      OUTPUT_VARIABLE ${prefix}_WC_DATA
-      OUTPUT_STRIP_TRAILING_WHITESPACE)
-    if(NOT ${hg_id_result} EQUAL 0)
-      message(SEND_ERROR "Command \"${HG_EXECUTBALE} id -n\" in directory ${dir} failed with output:\n${hg_id_error}")
-    endif()
-
-    string(REGEX REPLACE "([0-9a-f]+)\\+? [0-9]+\\+?" "\\1" ${prefix}_WC_CHANGESET ${${prefix}_WC_DATA})
-    string(REGEX REPLACE "[0-9a-f]+\\+? ([0-9]+)\\+?" "\\1" ${prefix}_WC_REVISION ${${prefix}_WC_DATA})
-  endmacro(HG_WC_INFO)
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-find_package_handle_standard_args(Hg
-                                  REQUIRED_VARS HG_EXECUTABLE
-                                  VERSION_VAR HG_VERSION_STRING)
diff --git a/share/cmake-3.18/Modules/FindICU.cmake b/share/cmake-3.18/Modules/FindICU.cmake
deleted file mode 100644
index 38081f5..0000000
--- a/share/cmake-3.18/Modules/FindICU.cmake
+++ /dev/null
@@ -1,428 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindICU
--------
-
-Find the International Components for Unicode (ICU) libraries and
-programs.
-
-This module supports multiple components.
-Components can include any of: ``data``, ``i18n``, ``io``, ``le``,
-``lx``, ``test``, ``tu`` and ``uc``.
-
-Note that on Windows ``data`` is named ``dt`` and ``i18n`` is named
-``in``; any of the names may be used, and the appropriate
-platform-specific library name will be automatically selected.
-
-This module reports information about the ICU installation in
-several variables.  General variables::
-
-  ICU_VERSION - ICU release version
-  ICU_FOUND - true if the main programs and libraries were found
-  ICU_LIBRARIES - component libraries to be linked
-  ICU_INCLUDE_DIRS - the directories containing the ICU headers
-
-Imported targets::
-
-  ICU::<C>
-
-Where ``<C>`` is the name of an ICU component, for example
-``ICU::i18n``.
-
-ICU programs are reported in::
-
-  ICU_GENCNVAL_EXECUTABLE - path to gencnval executable
-  ICU_ICUINFO_EXECUTABLE - path to icuinfo executable
-  ICU_GENBRK_EXECUTABLE - path to genbrk executable
-  ICU_ICU-CONFIG_EXECUTABLE - path to icu-config executable
-  ICU_GENRB_EXECUTABLE - path to genrb executable
-  ICU_GENDICT_EXECUTABLE - path to gendict executable
-  ICU_DERB_EXECUTABLE - path to derb executable
-  ICU_PKGDATA_EXECUTABLE - path to pkgdata executable
-  ICU_UCONV_EXECUTABLE - path to uconv executable
-  ICU_GENCFU_EXECUTABLE - path to gencfu executable
-  ICU_MAKECONV_EXECUTABLE - path to makeconv executable
-  ICU_GENNORM2_EXECUTABLE - path to gennorm2 executable
-  ICU_GENCCODE_EXECUTABLE - path to genccode executable
-  ICU_GENSPREP_EXECUTABLE - path to gensprep executable
-  ICU_ICUPKG_EXECUTABLE - path to icupkg executable
-  ICU_GENCMN_EXECUTABLE - path to gencmn executable
-
-ICU component libraries are reported in::
-
-  ICU_<C>_FOUND - ON if component was found
-  ICU_<C>_LIBRARIES - libraries for component
-
-ICU datafiles are reported in::
-
-  ICU_MAKEFILE_INC - Makefile.inc
-  ICU_PKGDATA_INC - pkgdata.inc
-
-Note that ``<C>`` is the uppercased name of the component.
-
-This module reads hints about search results from::
-
-  ICU_ROOT - the root of the ICU installation
-
-The environment variable ``ICU_ROOT`` may also be used; the
-ICU_ROOT variable takes precedence.
-
-The following cache variables may also be set::
-
-  ICU_<P>_EXECUTABLE - the path to executable <P>
-  ICU_INCLUDE_DIR - the directory containing the ICU headers
-  ICU_<C>_LIBRARY - the library for component <C>
-
-.. note::
-
-  In most cases none of the above variables will require setting,
-  unless multiple ICU versions are available and a specific version
-  is required.
-
-Other variables one may set to control this module are::
-
-  ICU_DEBUG - Set to ON to enable debug output from FindICU.
-#]=======================================================================]
-
-# Written by Roger Leigh <rleigh@codelibre.net>
-
-set(icu_programs
-  gencnval
-  icuinfo
-  genbrk
-  icu-config
-  genrb
-  gendict
-  derb
-  pkgdata
-  uconv
-  gencfu
-  makeconv
-  gennorm2
-  genccode
-  gensprep
-  icupkg
-  gencmn)
-
-set(icu_data
-  Makefile.inc
-  pkgdata.inc)
-
-# The ICU checks are contained in a function due to the large number
-# of temporary variables needed.
-function(_ICU_FIND)
-  # Set up search paths, taking compiler into account.  Search ICU_ROOT,
-  # with ICU_ROOT in the environment as a fallback if unset.
-  if(ICU_ROOT)
-    list(APPEND icu_roots "${ICU_ROOT}")
-  else()
-    if(NOT "$ENV{ICU_ROOT}" STREQUAL "")
-      file(TO_CMAKE_PATH "$ENV{ICU_ROOT}" NATIVE_PATH)
-      list(APPEND icu_roots "${NATIVE_PATH}")
-      set(ICU_ROOT "${NATIVE_PATH}"
-          CACHE PATH "Location of the ICU installation" FORCE)
-    endif()
-  endif()
-
-  # Find include directory
-  list(APPEND icu_include_suffixes "include")
-  find_path(ICU_INCLUDE_DIR
-            NAMES "unicode/utypes.h"
-            HINTS ${icu_roots}
-            PATH_SUFFIXES ${icu_include_suffixes}
-            DOC "ICU include directory")
-  set(ICU_INCLUDE_DIR "${ICU_INCLUDE_DIR}" PARENT_SCOPE)
-
-  # Get version
-  if(ICU_INCLUDE_DIR AND EXISTS "${ICU_INCLUDE_DIR}/unicode/uvernum.h")
-    file(STRINGS "${ICU_INCLUDE_DIR}/unicode/uvernum.h" icu_header_str
-      REGEX "^#define[\t ]+U_ICU_VERSION[\t ]+\".*\".*")
-
-    string(REGEX REPLACE "^#define[\t ]+U_ICU_VERSION[\t ]+\"([^ \\n]*)\".*"
-      "\\1" icu_version_string "${icu_header_str}")
-    set(ICU_VERSION "${icu_version_string}")
-    set(ICU_VERSION "${icu_version_string}" PARENT_SCOPE)
-    unset(icu_header_str)
-    unset(icu_version_string)
-  endif()
-
-  if(CMAKE_SIZEOF_VOID_P EQUAL 8)
-    # 64-bit binary directory
-    set(_bin64 "bin64")
-    # 64-bit library directory
-    set(_lib64 "lib64")
-  endif()
-
-
-  # Find all ICU programs
-  list(APPEND icu_binary_suffixes "${_bin64}" "bin" "sbin")
-  foreach(program ${icu_programs})
-    string(TOUPPER "${program}" program_upcase)
-    set(cache_var "ICU_${program_upcase}_EXECUTABLE")
-    set(program_var "ICU_${program_upcase}_EXECUTABLE")
-    find_program("${cache_var}"
-      NAMES "${program}"
-      HINTS ${icu_roots}
-      PATH_SUFFIXES ${icu_binary_suffixes}
-      DOC "ICU ${program} executable"
-      NO_PACKAGE_ROOT_PATH
-      )
-    mark_as_advanced(cache_var)
-    set("${program_var}" "${${cache_var}}" PARENT_SCOPE)
-  endforeach()
-
-  # Find all ICU libraries
-  list(APPEND icu_library_suffixes "${_lib64}" "lib")
-  set(ICU_REQUIRED_LIBS_FOUND ON)
-  set(static_prefix )
-  # static icu libraries compiled with MSVC have the prefix 's'
-  if(MSVC)
-    set(static_prefix "s")
-  endif()
-  foreach(component ${ICU_FIND_COMPONENTS})
-    string(TOUPPER "${component}" component_upcase)
-    set(component_cache "ICU_${component_upcase}_LIBRARY")
-    set(component_cache_release "${component_cache}_RELEASE")
-    set(component_cache_debug "${component_cache}_DEBUG")
-    set(component_found "${component_upcase}_FOUND")
-    set(component_libnames "icu${component}")
-    set(component_debug_libnames "icu${component}d")
-
-    # Special case deliberate library naming mismatches between Unix
-    # and Windows builds
-    unset(component_libnames)
-    unset(component_debug_libnames)
-    list(APPEND component_libnames "icu${component}")
-    list(APPEND component_debug_libnames "icu${component}d")
-    if(component STREQUAL "data")
-      list(APPEND component_libnames "icudt")
-      # Note there is no debug variant at present
-      list(APPEND component_debug_libnames "icudtd")
-    endif()
-    if(component STREQUAL "dt")
-      list(APPEND component_libnames "icudata")
-      # Note there is no debug variant at present
-      list(APPEND component_debug_libnames "icudatad")
-    endif()
-    if(component STREQUAL "i18n")
-      list(APPEND component_libnames "icuin")
-      list(APPEND component_debug_libnames "icuind")
-    endif()
-    if(component STREQUAL "in")
-      list(APPEND component_libnames "icui18n")
-      list(APPEND component_debug_libnames "icui18nd")
-    endif()
-
-    if(static_prefix)
-      unset(static_component_libnames)
-      unset(static_component_debug_libnames)
-      foreach(component_libname ${component_libnames})
-        list(APPEND static_component_libnames
-          ${static_prefix}${component_libname})
-      endforeach()
-      foreach(component_libname ${component_debug_libnames})
-        list(APPEND static_component_debug_libnames
-          ${static_prefix}${component_libname})
-      endforeach()
-      list(APPEND component_libnames ${static_component_libnames})
-      list(APPEND component_debug_libnames ${static_component_debug_libnames})
-    endif()
-    find_library("${component_cache_release}"
-      NAMES ${component_libnames}
-      HINTS ${icu_roots}
-      PATH_SUFFIXES ${icu_library_suffixes}
-      DOC "ICU ${component} library (release)"
-      NO_PACKAGE_ROOT_PATH
-      )
-    find_library("${component_cache_debug}"
-      NAMES ${component_debug_libnames}
-      HINTS ${icu_roots}
-      PATH_SUFFIXES ${icu_library_suffixes}
-      DOC "ICU ${component} library (debug)"
-      NO_PACKAGE_ROOT_PATH
-      )
-    include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
-    select_library_configurations(ICU_${component_upcase})
-    mark_as_advanced("${component_cache_release}" "${component_cache_debug}")
-    if(${component_cache})
-      set("${component_found}" ON)
-      list(APPEND ICU_LIBRARY "${${component_cache}}")
-    endif()
-    mark_as_advanced("${component_found}")
-    set("${component_cache}" "${${component_cache}}" PARENT_SCOPE)
-    set("${component_found}" "${${component_found}}" PARENT_SCOPE)
-    if(${component_found})
-      if (ICU_FIND_REQUIRED_${component})
-        list(APPEND ICU_LIBS_FOUND "${component} (required)")
-      else()
-        list(APPEND ICU_LIBS_FOUND "${component} (optional)")
-      endif()
-    else()
-      if (ICU_FIND_REQUIRED_${component})
-        set(ICU_REQUIRED_LIBS_FOUND OFF)
-        list(APPEND ICU_LIBS_NOTFOUND "${component} (required)")
-      else()
-        list(APPEND ICU_LIBS_NOTFOUND "${component} (optional)")
-      endif()
-    endif()
-  endforeach()
-  set(_ICU_REQUIRED_LIBS_FOUND "${ICU_REQUIRED_LIBS_FOUND}" PARENT_SCOPE)
-  set(ICU_LIBRARY "${ICU_LIBRARY}" PARENT_SCOPE)
-
-  # Find all ICU data files
-  if(CMAKE_LIBRARY_ARCHITECTURE)
-    list(APPEND icu_data_suffixes
-      "${_lib64}/${CMAKE_LIBRARY_ARCHITECTURE}/icu/${ICU_VERSION}"
-      "lib/${CMAKE_LIBRARY_ARCHITECTURE}/icu/${ICU_VERSION}"
-      "${_lib64}/${CMAKE_LIBRARY_ARCHITECTURE}/icu"
-      "lib/${CMAKE_LIBRARY_ARCHITECTURE}/icu")
-  endif()
-  list(APPEND icu_data_suffixes
-    "${_lib64}/icu/${ICU_VERSION}"
-    "lib/icu/${ICU_VERSION}"
-    "${_lib64}/icu"
-    "lib/icu")
-  foreach(data ${icu_data})
-    string(TOUPPER "${data}" data_upcase)
-    string(REPLACE "." "_" data_upcase "${data_upcase}")
-    set(cache_var "ICU_${data_upcase}")
-    set(data_var "ICU_${data_upcase}")
-    find_file("${cache_var}"
-      NAMES "${data}"
-      HINTS ${icu_roots}
-      PATH_SUFFIXES ${icu_data_suffixes}
-      DOC "ICU ${data} data file")
-    mark_as_advanced(cache_var)
-    set("${data_var}" "${${cache_var}}" PARENT_SCOPE)
-  endforeach()
-
-  if(NOT ICU_FIND_QUIETLY)
-    if(ICU_LIBS_FOUND)
-      message(STATUS "Found the following ICU libraries:")
-      foreach(found ${ICU_LIBS_FOUND})
-        message(STATUS "  ${found}")
-      endforeach()
-    endif()
-    if(ICU_LIBS_NOTFOUND)
-      message(STATUS "The following ICU libraries were not found:")
-      foreach(notfound ${ICU_LIBS_NOTFOUND})
-        message(STATUS "  ${notfound}")
-      endforeach()
-    endif()
-  endif()
-
-  if(ICU_DEBUG)
-    message(STATUS "--------FindICU.cmake search debug--------")
-    message(STATUS "ICU binary path search order: ${icu_roots}")
-    message(STATUS "ICU include path search order: ${icu_roots}")
-    message(STATUS "ICU library path search order: ${icu_roots}")
-    message(STATUS "----------------")
-  endif()
-endfunction()
-
-_ICU_FIND()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(ICU
-                                  FOUND_VAR ICU_FOUND
-                                  REQUIRED_VARS ICU_INCLUDE_DIR
-                                                ICU_LIBRARY
-                                                _ICU_REQUIRED_LIBS_FOUND
-                                  VERSION_VAR ICU_VERSION
-                                  FAIL_MESSAGE "Failed to find all ICU components")
-
-unset(_ICU_REQUIRED_LIBS_FOUND)
-
-if(ICU_FOUND)
-  set(ICU_INCLUDE_DIRS "${ICU_INCLUDE_DIR}")
-  set(ICU_LIBRARIES "${ICU_LIBRARY}")
-  foreach(_ICU_component ${ICU_FIND_COMPONENTS})
-    string(TOUPPER "${_ICU_component}" _ICU_component_upcase)
-    set(_ICU_component_cache "ICU_${_ICU_component_upcase}_LIBRARY")
-    set(_ICU_component_cache_release "ICU_${_ICU_component_upcase}_LIBRARY_RELEASE")
-    set(_ICU_component_cache_debug "ICU_${_ICU_component_upcase}_LIBRARY_DEBUG")
-    set(_ICU_component_lib "ICU_${_ICU_component_upcase}_LIBRARIES")
-    set(_ICU_component_found "${_ICU_component_upcase}_FOUND")
-    set(_ICU_imported_target "ICU::${_ICU_component}")
-    if(${_ICU_component_found})
-      set("${_ICU_component_lib}" "${${_ICU_component_cache}}")
-      if(NOT TARGET ${_ICU_imported_target})
-        add_library(${_ICU_imported_target} UNKNOWN IMPORTED)
-        if(ICU_INCLUDE_DIR)
-          set_target_properties(${_ICU_imported_target} PROPERTIES
-            INTERFACE_INCLUDE_DIRECTORIES "${ICU_INCLUDE_DIR}")
-        endif()
-        if(EXISTS "${${_ICU_component_cache}}")
-          set_target_properties(${_ICU_imported_target} PROPERTIES
-            IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
-            IMPORTED_LOCATION "${${_ICU_component_cache}}")
-        endif()
-        if(EXISTS "${${_ICU_component_cache_release}}")
-          set_property(TARGET ${_ICU_imported_target} APPEND PROPERTY
-            IMPORTED_CONFIGURATIONS RELEASE)
-          set_target_properties(${_ICU_imported_target} PROPERTIES
-            IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
-            IMPORTED_LOCATION_RELEASE "${${_ICU_component_cache_release}}")
-        endif()
-        if(EXISTS "${${_ICU_component_cache_debug}}")
-          set_property(TARGET ${_ICU_imported_target} APPEND PROPERTY
-            IMPORTED_CONFIGURATIONS DEBUG)
-          set_target_properties(${_ICU_imported_target} PROPERTIES
-            IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX"
-            IMPORTED_LOCATION_DEBUG "${${_ICU_component_cache_debug}}")
-        endif()
-        if(CMAKE_DL_LIBS AND _ICU_component STREQUAL "uc")
-          set_target_properties(${_ICU_imported_target} PROPERTIES
-            INTERFACE_LINK_LIBRARIES "${CMAKE_DL_LIBS}")
-        endif()
-      endif()
-    endif()
-    unset(_ICU_component_upcase)
-    unset(_ICU_component_cache)
-    unset(_ICU_component_lib)
-    unset(_ICU_component_found)
-    unset(_ICU_imported_target)
-  endforeach()
-endif()
-
-if(ICU_DEBUG)
-  message(STATUS "--------FindICU.cmake results debug--------")
-  message(STATUS "ICU found: ${ICU_FOUND}")
-  message(STATUS "ICU_VERSION number: ${ICU_VERSION}")
-  message(STATUS "ICU_ROOT directory: ${ICU_ROOT}")
-  message(STATUS "ICU_INCLUDE_DIR directory: ${ICU_INCLUDE_DIR}")
-  message(STATUS "ICU_LIBRARIES: ${ICU_LIBRARIES}")
-
-  foreach(program IN LISTS icu_programs)
-    string(TOUPPER "${program}" program_upcase)
-    set(program_lib "ICU_${program_upcase}_EXECUTABLE")
-    message(STATUS "${program} program: ${${program_lib}}")
-    unset(program_upcase)
-    unset(program_lib)
-  endforeach()
-
-  foreach(data IN LISTS icu_data)
-    string(TOUPPER "${data}" data_upcase)
-    string(REPLACE "." "_" data_upcase "${data_upcase}")
-    set(data_lib "ICU_${data_upcase}")
-    message(STATUS "${data} data: ${${data_lib}}")
-    unset(data_upcase)
-    unset(data_lib)
-  endforeach()
-
-  foreach(component IN LISTS ICU_FIND_COMPONENTS)
-    string(TOUPPER "${component}" component_upcase)
-    set(component_lib "ICU_${component_upcase}_LIBRARIES")
-    set(component_found "${component_upcase}_FOUND")
-    message(STATUS "${component} library found: ${${component_found}}")
-    message(STATUS "${component} library: ${${component_lib}}")
-    unset(component_upcase)
-    unset(component_lib)
-    unset(component_found)
-  endforeach()
-  message(STATUS "----------------")
-endif()
-
-unset(icu_programs)
diff --git a/share/cmake-3.18/Modules/FindIce.cmake b/share/cmake-3.18/Modules/FindIce.cmake
deleted file mode 100644
index 5ce2b42..0000000
--- a/share/cmake-3.18/Modules/FindIce.cmake
+++ /dev/null
@@ -1,619 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindIce
--------
-
-Find the ZeroC Internet Communication Engine (ICE) programs,
-libraries and datafiles.
-
-This module supports multiple components.
-Components can include any of: ``Freeze``, ``Glacier2``, ``Ice``,
-``IceBox``, ``IceDB``, ``IceDiscovery``, ``IceGrid``,
-``IceLocatorDiscovery``, ``IcePatch``, ``IceSSL``, ``IceStorm``,
-``IceUtil``, ``IceXML``, or ``Slice``.
-
-Ice 3.7 and later also include C++11-specific components:
-``Glacier2++11``, ``Ice++11``, ``IceBox++11``, ``IceDiscovery++11``
-``IceGrid``, ``IceLocatorDiscovery++11``, ``IceSSL++11``,
-``IceStorm++11``
-
-Note that the set of supported components is Ice version-specific.
-
-This module reports information about the Ice installation in
-several variables.  General variables::
-
-  Ice_VERSION - Ice release version
-  Ice_FOUND - true if the main programs and libraries were found
-  Ice_LIBRARIES - component libraries to be linked
-  Ice_INCLUDE_DIRS - the directories containing the Ice headers
-  Ice_SLICE_DIRS - the directories containing the Ice slice interface
-                   definitions
-
-Imported targets::
-
-  Ice::<C>
-
-Where ``<C>`` is the name of an Ice component, for example
-``Ice::Glacier2`` or ``Ice++11``.
-
-Ice slice programs are reported in::
-
-  Ice_SLICE2CONFLUENCE_EXECUTABLE - path to slice2confluence executable
-  Ice_SLICE2CPP_EXECUTABLE - path to slice2cpp executable
-  Ice_SLICE2CS_EXECUTABLE - path to slice2cs executable
-  Ice_SLICE2FREEZEJ_EXECUTABLE - path to slice2freezej executable
-  Ice_SLICE2FREEZE_EXECUTABLE - path to slice2freeze executable
-  Ice_SLICE2HTML_EXECUTABLE - path to slice2html executable
-  Ice_SLICE2JAVA_EXECUTABLE - path to slice2java executable
-  Ice_SLICE2JS_EXECUTABLE - path to slice2js executable
-  Ice_SLICE2MATLAB_EXECUTABLE - path to slice2matlab executable
-  Ice_SLICE2OBJC_EXECUTABLE - path to slice2objc executable
-  Ice_SLICE2PHP_EXECUTABLE - path to slice2php executable
-  Ice_SLICE2PY_EXECUTABLE - path to slice2py executable
-  Ice_SLICE2RB_EXECUTABLE - path to slice2rb executable
-
-Ice programs are reported in::
-
-  Ice_GLACIER2ROUTER_EXECUTABLE - path to glacier2router executable
-  Ice_ICEBOX_EXECUTABLE - path to icebox executable
-  Ice_ICEBOXXX11_EXECUTABLE - path to icebox++11 executable
-  Ice_ICEBOXADMIN_EXECUTABLE - path to iceboxadmin executable
-  Ice_ICEBOXD_EXECUTABLE - path to iceboxd executable
-  Ice_ICEBOXNET_EXECUTABLE - path to iceboxnet executable
-  Ice_ICEBRIDGE_EXECUTABLE - path to icebridge executable
-  Ice_ICEGRIDADMIN_EXECUTABLE - path to icegridadmin executable
-  Ice_ICEGRIDDB_EXECUTABLE - path to icegriddb executable
-  Ice_ICEGRIDNODE_EXECUTABLE - path to icegridnode executable
-  Ice_ICEGRIDNODED_EXECUTABLE - path to icegridnoded executable
-  Ice_ICEGRIDREGISTRY_EXECUTABLE - path to icegridregistry executable
-  Ice_ICEGRIDREGISTRYD_EXECUTABLE - path to icegridregistryd executable
-  Ice_ICEPATCH2CALC_EXECUTABLE - path to icepatch2calc executable
-  Ice_ICEPATCH2CLIENT_EXECUTABLE - path to icepatch2client executable
-  Ice_ICEPATCH2SERVER_EXECUTABLE - path to icepatch2server executable
-  Ice_ICESERVICEINSTALL_EXECUTABLE - path to iceserviceinstall executable
-  Ice_ICESTORMADMIN_EXECUTABLE - path to icestormadmin executable
-  Ice_ICESTORMDB_EXECUTABLE - path to icestormdb executable
-  Ice_ICESTORMMIGRATE_EXECUTABLE - path to icestormmigrate executable
-
-Ice db programs (Windows only; standard system versions on all other
-platforms) are reported in::
-
-  Ice_DB_ARCHIVE_EXECUTABLE - path to db_archive executable
-  Ice_DB_CHECKPOINT_EXECUTABLE - path to db_checkpoint executable
-  Ice_DB_DEADLOCK_EXECUTABLE - path to db_deadlock executable
-  Ice_DB_DUMP_EXECUTABLE - path to db_dump executable
-  Ice_DB_HOTBACKUP_EXECUTABLE - path to db_hotbackup executable
-  Ice_DB_LOAD_EXECUTABLE - path to db_load executable
-  Ice_DB_LOG_VERIFY_EXECUTABLE - path to db_log_verify executable
-  Ice_DB_PRINTLOG_EXECUTABLE - path to db_printlog executable
-  Ice_DB_RECOVER_EXECUTABLE - path to db_recover executable
-  Ice_DB_STAT_EXECUTABLE - path to db_stat executable
-  Ice_DB_TUNER_EXECUTABLE - path to db_tuner executable
-  Ice_DB_UPGRADE_EXECUTABLE - path to db_upgrade executable
-  Ice_DB_VERIFY_EXECUTABLE - path to db_verify executable
-  Ice_DUMPDB_EXECUTABLE - path to dumpdb executable
-  Ice_TRANSFORMDB_EXECUTABLE - path to transformdb executable
-
-Ice component libraries are reported in::
-
-  Ice_<C>_FOUND - ON if component was found
-  Ice_<C>_LIBRARIES - libraries for component
-
-Note that ``<C>`` is the uppercased name of the component.
-
-This module reads hints about search results from::
-
-  Ice_HOME - the root of the Ice installation
-
-The environment variable ``ICE_HOME`` may also be used; the
-Ice_HOME variable takes precedence.
-
-.. note::
-  On Windows, Ice 3.7.0 and later provide libraries via the NuGet
-  package manager.  Appropriate NuGet packages will be searched for
-  using ``CMAKE_PREFIX_PATH``, or alternatively ``Ice_HOME`` may be
-  set to the location of a specific NuGet package to restrict the
-  search.
-
-The following cache variables may also be set::
-
-  Ice_<P>_EXECUTABLE - the path to executable <P>
-  Ice_INCLUDE_DIR - the directory containing the Ice headers
-  Ice_SLICE_DIR - the directory containing the Ice slice interface
-                  definitions
-  Ice_<C>_LIBRARY - the library for component <C>
-
-.. note::
-
-  In most cases none of the above variables will require setting,
-  unless multiple Ice versions are available and a specific version
-  is required.  On Windows, the most recent version of Ice will be
-  found through the registry.  On Unix, the programs, headers and
-  libraries will usually be in standard locations, but Ice_SLICE_DIRS
-  might not be automatically detected (commonly known locations are
-  searched).  All the other variables are defaulted using Ice_HOME,
-  if set.  It's possible to set Ice_HOME and selectively specify
-  alternative locations for the other components; this might be
-  required for e.g. newer versions of Visual Studio if the
-  heuristics are not sufficient to identify the correct programs and
-  libraries for the specific Visual Studio version.
-
-Other variables one may set to control this module are::
-
-  Ice_DEBUG - Set to ON to enable debug output from FindIce.
-#]=======================================================================]
-
-# Written by Roger Leigh <rleigh@codelibre.net>
-
-  set(_Ice_db_programs
-      db_archive
-      db_checkpoint
-      db_deadlock
-      db_dump
-      db_hotbackup
-      db_load
-      db_log_verify
-      db_printlog
-      db_recover
-      db_stat
-      db_tuner
-      db_upgrade
-      db_verify
-      dumpdb
-      transformdb)
-
-  set(_Ice_programs
-      glacier2router
-      icebox
-      icebox++11
-      iceboxadmin
-      iceboxd
-      iceboxnet
-      icebridge
-      icegridadmin
-      icegriddb
-      icegridnode
-      icegridnoded
-      icegridregistry
-      icegridregistryd
-      icepatch2calc
-      icepatch2client
-      icepatch2server
-      iceserviceinstall
-      icestormadmin
-      icestormdb
-      icestormmigrate)
-
-  set(_Ice_slice_programs
-      slice2confluence
-      slice2cpp
-      slice2cs
-      slice2freezej
-      slice2freeze
-      slice2html
-      slice2java
-      slice2js
-      slice2matlab
-      slice2objc
-      slice2php
-      slice2py
-      slice2rb)
-
-
-# The Ice checks are contained in a function due to the large number
-# of temporary variables needed.
-function(_Ice_FIND)
-  # Released versions of Ice, including generic short forms
-  set(ice_versions
-      3
-      3.7
-      3.7.0
-      3.6
-      3.6.3
-      3.6.2
-      3.6.1
-      3.6.0
-      3.5
-      3.5.1
-      3.5.0
-      3.4
-      3.4.2
-      3.4.1
-      3.4.0
-      3.3
-      3.3.1
-      3.3.0)
-
-  foreach(ver ${ice_versions})
-    string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\$" two_digit_version_match "${ver}")
-    if(two_digit_version_match)
-      string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\$" "\\1\\2" two_digit_version "${ver}")
-      list(APPEND ice_suffix_versions "${two_digit_version}")
-    endif()
-  endforeach()
-
-  # Set up search paths, taking compiler into account.  Search Ice_HOME,
-  # with ICE_HOME in the environment as a fallback if unset.
-  if(Ice_HOME)
-    list(APPEND ice_roots "${Ice_HOME}")
-  else()
-    if(NOT "$ENV{ICE_HOME}" STREQUAL "")
-      file(TO_CMAKE_PATH "$ENV{ICE_HOME}" NATIVE_PATH)
-      list(APPEND ice_roots "${NATIVE_PATH}")
-      set(Ice_HOME "${NATIVE_PATH}"
-          CACHE PATH "Location of the Ice installation" FORCE)
-    endif()
-  endif()
-
-  set(_bin "bin/Win32")
-  set(_lib "lib/Win32")
-  if(CMAKE_SIZEOF_VOID_P EQUAL 8)
-    set(_bin "bin/x64")
-    set(_lib "lib/x64")
-    # 64-bit path suffix
-    set(_x64 "/x64")
-    # 64-bit library directory
-    set(_lib64 "lib64")
-  endif()
-
-  unset(vcvers)
-  if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" OR "${CMAKE_CXX_SIMULATE_ID}" STREQUAL "MSVC")
-    if(MSVC_TOOLSET_VERSION GREATER_EQUAL 141)
-      set(vcvers "141;140")
-    elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 100)
-      set(vcvers "${MSVC_TOOLSET_VERSION}")
-    elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 90)
-      set(vcvers "${MSVC_TOOLSET_VERSION}")
-      set(vcyear "2008")
-    elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 80)
-      set(vcvers "${MSVC_TOOLSET_VERSION}")
-      set(vcyear "2005")
-    else() # Unknown version
-      set(vcvers Unknown)
-    endif()
-  endif()
-
-  # For compatibility with ZeroC Windows builds.
-  if(vcvers)
-    list(APPEND ice_binary_suffixes "build/native/${_bin}/Release" "tools")
-    list(APPEND ice_debug_library_suffixes "build/native/${_lib}/Debug")
-    list(APPEND ice_release_library_suffixes "build/native/${_lib}/Release")
-    foreach(vcver IN LISTS vcvers)
-      # Earlier Ice (3.3) builds don't use vcnnn subdirectories, but are harmless to check.
-      list(APPEND ice_binary_suffixes "bin/vc${vcver}${_x64}" "bin/vc${vcver}")
-      list(APPEND ice_debug_library_suffixes "lib/vc${vcver}${_x64}" "lib/vc${vcver}")
-      list(APPEND ice_release_library_suffixes "lib/vc${vcver}${_x64}" "lib/vc${vcver}")
-    endforeach()
-  endif()
-  # Generic 64-bit and 32-bit directories
-  list(APPEND ice_binary_suffixes "bin${_x64}" "bin")
-  list(APPEND ice_debug_library_suffixes "libx32" "${_lib64}" "lib${_x64}" "lib")
-  list(APPEND ice_release_library_suffixes "libx32" "${_lib64}" "lib${_x64}" "lib")
-  if(vcvers)
-    list(APPEND ice_include_suffixes "build/native/include")
-  endif()
-  list(APPEND ice_include_suffixes "include")
-  list(APPEND ice_slice_suffixes "slice")
-
-  # On Windows, look in the registry for install locations.  Different
-  # versions of Ice install support different compiler versions.
-  if(vcvers)
-    foreach(ice_version ${ice_versions})
-      foreach(vcver IN LISTS vcvers)
-        list(APPEND ice_nuget_dirs "zeroc.ice.v${vcver}.${ice_version}")
-        list(APPEND freeze_nuget_dirs "zeroc.freeze.v${vcver}.${ice_version}")
-      endforeach()
-    endforeach()
-    find_path(Ice_NUGET_DIR
-              NAMES "tools/slice2cpp.exe"
-              PATH_SUFFIXES ${ice_nuget_dirs}
-              DOC "Ice NuGet directory")
-    if(Ice_NUGET_DIR)
-      list(APPEND ice_roots "${Ice_NUGET_DIR}")
-    endif()
-    find_path(Freeze_NUGET_DIR
-              NAMES "tools/slice2freeze.exe"
-              PATH_SUFFIXES ${freeze_nuget_dirs}
-              DOC "Freeze NuGet directory")
-    if(Freeze_NUGET_DIR)
-      list(APPEND ice_roots "${Freeze_NUGET_DIR}")
-    endif()
-    foreach(ice_version ${ice_versions})
-      # Ice 3.3 releases use a Visual Studio year suffix and value is
-      # enclosed in double quotes, though only the leading quote is
-      # returned by get_filename_component.
-      unset(ice_location)
-      if(vcyear)
-        get_filename_component(ice_location
-                               "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ZeroC\\Ice ${ice_version} for Visual Studio ${vcyear};InstallDir]"
-                               PATH)
-        if(ice_location AND NOT ("${ice_location}" STREQUAL "/registry" OR "${ice_location}" STREQUAL "/"))
-          string(REGEX REPLACE "^\"(.*)\"?$" "\\1" ice_location "${ice_location}")
-          get_filename_component(ice_location "${ice_location}" ABSOLUTE)
-        else()
-          unset(ice_location)
-        endif()
-      endif()
-      # Ice 3.4+ releases don't use a suffix
-      if(NOT ice_location OR "${ice_location}" STREQUAL "/registry")
-        get_filename_component(ice_location
-                               "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ZeroC\\Ice ${ice_version};InstallDir]"
-                               ABSOLUTE)
-      endif()
-
-      if(ice_location AND NOT "${ice_location}" STREQUAL "/registry")
-        list(APPEND ice_roots "${ice_location}")
-      endif()
-    endforeach()
-  else()
-    foreach(ice_version ${ice_versions})
-      # Prefer 64-bit variants if present (and using a 64-bit compiler)
-      list(APPEND ice_roots "/opt/Ice-${ice_version}")
-    endforeach()
-  endif()
-
-  # Find all Ice programs
-  foreach(program ${_Ice_db_programs} ${_Ice_programs} ${_Ice_slice_programs})
-    string(TOUPPER "${program}" program_upcase)
-    set(cache_var "Ice_${program_upcase}_EXECUTABLE")
-    set(program_var "Ice_${program_upcase}_EXECUTABLE")
-    find_program("${cache_var}" "${program}"
-      HINTS ${ice_roots}
-      PATH_SUFFIXES ${ice_binary_suffixes}
-      DOC "Ice ${program} executable")
-    mark_as_advanced(cache_var)
-    set("${program_var}" "${${cache_var}}" PARENT_SCOPE)
-  endforeach()
-
-  # Get version.
-  if(Ice_SLICE2CPP_EXECUTABLE)
-    # Execute in C locale for safety
-    set(_Ice_SAVED_LC_ALL "$ENV{LC_ALL}")
-    set(ENV{LC_ALL} C)
-
-    execute_process(COMMAND ${Ice_SLICE2CPP_EXECUTABLE} --version
-      ERROR_VARIABLE Ice_VERSION_SLICE2CPP_FULL
-      ERROR_STRIP_TRAILING_WHITESPACE)
-
-    # restore the previous LC_ALL
-    set(ENV{LC_ALL} ${_Ice_SAVED_LC_ALL})
-
-    # Make short version
-    string(REGEX REPLACE "^(.*)\\.[^.]*$" "\\1" Ice_VERSION_SLICE2CPP_SHORT "${Ice_VERSION_SLICE2CPP_FULL}")
-    set(Ice_VERSION "${Ice_VERSION_SLICE2CPP_FULL}" PARENT_SCOPE)
-  endif()
-
-  if(NOT Ice_FIND_QUIETLY)
-    message(STATUS "Ice version: ${Ice_VERSION_SLICE2CPP_FULL}")
-  endif()
-
-  # Find include directory
-  find_path(Ice_INCLUDE_DIR
-            NAMES "Ice/Ice.h"
-            HINTS ${ice_roots}
-            PATH_SUFFIXES ${ice_include_suffixes}
-            DOC "Ice include directory")
-  set(Ice_INCLUDE_DIR "${Ice_INCLUDE_DIR}" PARENT_SCOPE)
-
-  find_path(Freeze_INCLUDE_DIR
-            NAMES "Freeze/Freeze.h"
-            HINTS ${ice_roots}
-            PATH_SUFFIXES ${ice_include_suffixes}
-            DOC "Freeze include directory")
-  set(Freeze_INCLUDE_DIR "${Freeze_INCLUDE_DIR}" PARENT_SCOPE)
-
-  # In common use on Linux, MacOS X (homebrew) and FreeBSD; prefer
-  # version-specific dir
-  list(APPEND ice_slice_paths
-       /usr/local/share /usr/share)
-  list(APPEND ice_slice_suffixes
-       "Ice-${Ice_VERSION_SLICE2CPP_FULL}/slice"
-       "Ice-${Ice_VERSION_SLICE2CPP_SHORT}/slice"
-       "ice/slice"
-       Ice)
-
-  # Find slice directory
-  find_path(Ice_SLICE_DIR
-            NAMES "Ice/Connection.ice"
-            HINTS ${ice_roots}
-                  ${ice_slice_paths}
-            PATH_SUFFIXES ${ice_slice_suffixes}
-            NO_DEFAULT_PATH
-            DOC "Ice slice directory")
-  set(Ice_SLICE_DIR "${Ice_SLICE_DIR}" PARENT_SCOPE)
-
-  # Find all Ice libraries
-  set(Ice_REQUIRED_LIBS_FOUND ON)
-  foreach(component ${Ice_FIND_COMPONENTS})
-    string(TOUPPER "${component}" component_upcase)
-    set(component_cache "Ice_${component_upcase}_LIBRARY")
-    set(component_cache_release "${component_cache}_RELEASE")
-    set(component_cache_debug "${component_cache}_DEBUG")
-    set(component_found "${component_upcase}_FOUND")
-    set(component_library "${component}")
-    unset(component_library_release_names)
-    unset(component_library_debug_names)
-    if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" OR "${CMAKE_CXX_SIMULATE_ID}" STREQUAL "MSVC")
-      string(REGEX MATCH ".+\\+\\+11$" component_library_cpp11 "${component_library}")
-      if(component_library_cpp11)
-        string(REGEX REPLACE "^(.+)(\\+\\+11)$" "\\1" component_library "${component_library}")
-      endif()
-      foreach(suffix_ver ${ice_suffix_versions})
-        set(_name "${component_library}${suffix_ver}")
-        if(component_library_cpp11)
-          string(APPEND _name "++11")
-        endif()
-        list(APPEND component_library_debug_names "${_name}d")
-        list(APPEND component_library_release_names "${_name}")
-      endforeach()
-      set(_name "${component_library}")
-      if(component_library_cpp11)
-        string(APPEND _name "++11")
-      endif()
-      list(APPEND component_library_debug_names "${_name}d")
-      list(APPEND component_library_release_names "${_name}")
-    else()
-      list(APPEND component_library_debug_names "${component_library}d")
-      list(APPEND component_library_release_names "${component_library}")
-    endif()
-    find_library("${component_cache_release}" ${component_library_release_names}
-      HINTS ${ice_roots}
-      PATH_SUFFIXES ${ice_release_library_suffixes}
-      DOC "Ice ${component} library (release)")
-    find_library("${component_cache_debug}" ${component_library_debug_names}
-      HINTS ${ice_roots}
-      PATH_SUFFIXES ${ice_debug_library_suffixes}
-      DOC "Ice ${component} library (debug)")
-    include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
-    select_library_configurations(Ice_${component_upcase})
-    mark_as_advanced("${component_cache_release}" "${component_cache_debug}")
-    if(${component_cache})
-      set("${component_found}" ON)
-      list(APPEND Ice_LIBRARY "${${component_cache}}")
-    endif()
-    mark_as_advanced("${component_found}")
-    set("${component_cache}" "${${component_cache}}" PARENT_SCOPE)
-    set("${component_found}" "${${component_found}}" PARENT_SCOPE)
-    if(${component_found})
-      if (Ice_FIND_REQUIRED_${component})
-        list(APPEND Ice_LIBS_FOUND "${component} (required)")
-      else()
-        list(APPEND Ice_LIBS_FOUND "${component} (optional)")
-      endif()
-    else()
-      if (Ice_FIND_REQUIRED_${component})
-        set(Ice_REQUIRED_LIBS_FOUND OFF)
-        list(APPEND Ice_LIBS_NOTFOUND "${component} (required)")
-      else()
-        list(APPEND Ice_LIBS_NOTFOUND "${component} (optional)")
-      endif()
-    endif()
-  endforeach()
-  set(_Ice_REQUIRED_LIBS_FOUND "${Ice_REQUIRED_LIBS_FOUND}" PARENT_SCOPE)
-  set(Ice_LIBRARY "${Ice_LIBRARY}" PARENT_SCOPE)
-
-  if(NOT Ice_FIND_QUIETLY)
-    if(Ice_LIBS_FOUND)
-      message(STATUS "Found the following Ice libraries:")
-      foreach(found ${Ice_LIBS_FOUND})
-        message(STATUS "  ${found}")
-      endforeach()
-    endif()
-    if(Ice_LIBS_NOTFOUND)
-      message(STATUS "The following Ice libraries were not found:")
-      foreach(notfound ${Ice_LIBS_NOTFOUND})
-        message(STATUS "  ${notfound}")
-      endforeach()
-    endif()
-  endif()
-
-  if(Ice_DEBUG)
-    message(STATUS "--------FindIce.cmake search debug--------")
-    message(STATUS "ICE binary path search order: ${ice_roots}")
-    message(STATUS "ICE binary suffixes: ${ice_binary_suffixes}")
-    message(STATUS "ICE include path search order: ${ice_roots}")
-    message(STATUS "ICE include suffixes: ${ice_include_suffixes}")
-    message(STATUS "ICE slice path search order: ${ice_roots} ${ice_slice_paths}")
-    message(STATUS "ICE slice suffixes: ${ice_slice_suffixes}")
-    message(STATUS "ICE library path search order: ${ice_roots}")
-    message(STATUS "ICE debug library suffixes: ${ice_debug_library_suffixes}")
-    message(STATUS "ICE release library suffixes: ${ice_release_library_suffixes}")
-    message(STATUS "----------------")
-  endif()
-endfunction()
-
-_Ice_FIND()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(Ice
-                                  FOUND_VAR Ice_FOUND
-                                  REQUIRED_VARS Ice_SLICE2CPP_EXECUTABLE
-                                                Ice_INCLUDE_DIR
-                                                Ice_SLICE_DIR
-                                                Ice_LIBRARY
-                                                _Ice_REQUIRED_LIBS_FOUND
-                                  VERSION_VAR Ice_VERSION
-                                  FAIL_MESSAGE "Failed to find all Ice components")
-
-unset(_Ice_REQUIRED_LIBS_FOUND)
-
-if(Ice_FOUND)
-  set(Ice_INCLUDE_DIRS "${Ice_INCLUDE_DIR}")
-  if (Freeze_INCLUDE_DIR)
-    list(APPEND Ice_INCLUDE_DIRS "${Freeze_INCLUDE_DIR}")
-  endif()
-  set(Ice_SLICE_DIRS "${Ice_SLICE_DIR}")
-  set(Ice_LIBRARIES "${Ice_LIBRARY}")
-  foreach(_Ice_component ${Ice_FIND_COMPONENTS})
-    string(TOUPPER "${_Ice_component}" _Ice_component_upcase)
-    set(_Ice_component_cache "Ice_${_Ice_component_upcase}_LIBRARY")
-    set(_Ice_component_cache_release "Ice_${_Ice_component_upcase}_LIBRARY_RELEASE")
-    set(_Ice_component_cache_debug "Ice_${_Ice_component_upcase}_LIBRARY_DEBUG")
-    set(_Ice_component_lib "Ice_${_Ice_component_upcase}_LIBRARIES")
-    set(_Ice_component_found "${_Ice_component_upcase}_FOUND")
-    set(_Ice_imported_target "Ice::${_Ice_component}")
-    if(${_Ice_component_found})
-      set("${_Ice_component_lib}" "${${_Ice_component_cache}}")
-      if(NOT TARGET ${_Ice_imported_target})
-        add_library(${_Ice_imported_target} UNKNOWN IMPORTED)
-        set_target_properties(${_Ice_imported_target} PROPERTIES
-          INTERFACE_INCLUDE_DIRECTORIES "${Ice_INCLUDE_DIRS}")
-        if(EXISTS "${${_Ice_component_cache}}")
-          set_target_properties(${_Ice_imported_target} PROPERTIES
-            IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
-            IMPORTED_LOCATION "${${_Ice_component_cache}}")
-        endif()
-        if(EXISTS "${${_Ice_component_cache_release}}")
-          set_property(TARGET ${_Ice_imported_target} APPEND PROPERTY
-            IMPORTED_CONFIGURATIONS RELEASE)
-          set_target_properties(${_Ice_imported_target} PROPERTIES
-            IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
-            IMPORTED_LOCATION_RELEASE "${${_Ice_component_cache_release}}")
-        endif()
-        if(EXISTS "${${_Ice_component_cache_debug}}")
-          set_property(TARGET ${_Ice_imported_target} APPEND PROPERTY
-            IMPORTED_CONFIGURATIONS DEBUG)
-          set_target_properties(${_Ice_imported_target} PROPERTIES
-            IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX"
-            IMPORTED_LOCATION_DEBUG "${${_Ice_component_cache_debug}}")
-        endif()
-      endif()
-    endif()
-    unset(_Ice_component_upcase)
-    unset(_Ice_component_cache)
-    unset(_Ice_component_lib)
-    unset(_Ice_component_found)
-    unset(_Ice_imported_target)
-  endforeach()
-endif()
-
-if(Ice_DEBUG)
-  message(STATUS "--------FindIce.cmake results debug--------")
-  message(STATUS "Ice_VERSION number: ${Ice_VERSION}")
-  message(STATUS "Ice_HOME directory: ${Ice_HOME}")
-  message(STATUS "Ice_INCLUDE_DIR directory: ${Ice_INCLUDE_DIR}")
-  message(STATUS "Ice_SLICE_DIR directory: ${Ice_SLICE_DIR}")
-  message(STATUS "Ice_LIBRARIES: ${Ice_LIBRARIES}")
-  message(STATUS "Freeze_INCLUDE_DIR directory: ${Freeze_INCLUDE_DIR}")
-  message(STATUS "Ice_INCLUDE_DIRS directory: ${Ice_INCLUDE_DIRS}")
-
-  foreach(program ${_Ice_db_programs} ${_Ice_programs} ${_Ice_slice_programs})
-    string(TOUPPER "${program}" program_upcase)
-    message(STATUS "${program} executable: ${Ice_${program_upcase}_EXECUTABLE}")
-  endforeach()
-
-  foreach(component ${Ice_FIND_COMPONENTS})
-    string(TOUPPER "${component}" component_upcase)
-    set(component_lib "Ice_${component_upcase}_LIBRARIES")
-    set(component_found "${component_upcase}_FOUND")
-    message(STATUS "${component} library found: ${${component_found}}")
-    message(STATUS "${component} library: ${${component_lib}}")
-  endforeach()
-  message(STATUS "----------------")
-endif()
-
-unset(_Ice_db_programs)
-unset(_Ice_programs)
-unset(_Ice_slice_programs)
diff --git a/share/cmake-3.18/Modules/FindIconv.cmake b/share/cmake-3.18/Modules/FindIconv.cmake
deleted file mode 100644
index bf20f6f..0000000
--- a/share/cmake-3.18/Modules/FindIconv.cmake
+++ /dev/null
@@ -1,133 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindIconv
----------
-
-This module finds the ``iconv()`` POSIX.1 functions on the system.
-These functions might be provided in the regular C library or externally
-in the form of an additional library.
-
-The following variables are provided to indicate iconv support:
-
-.. variable:: Iconv_FOUND
-
-  Variable indicating if the iconv support was found.
-
-.. variable:: Iconv_INCLUDE_DIRS
-
-  The directories containing the iconv headers.
-
-.. variable:: Iconv_LIBRARIES
-
-  The iconv libraries to be linked.
-
-.. variable:: Iconv_IS_BUILT_IN
-
-  A variable indicating whether iconv support is stemming from the
-  C library or not. Even if the C library provides `iconv()`, the presence of
-  an external `libiconv` implementation might lead to this being false.
-
-Additionally, the following :prop_tgt:`IMPORTED` target is being provided:
-
-.. variable:: Iconv::Iconv
-
-  Imported target for using iconv.
-
-The following cache variables may also be set:
-
-.. variable:: Iconv_INCLUDE_DIR
-
-  The directory containing the iconv headers.
-
-.. variable:: Iconv_LIBRARY
-
-  The iconv library (if not implicitly given in the C library).
-
-.. note::
-  On POSIX platforms, iconv might be part of the C library and the cache
-  variables ``Iconv_INCLUDE_DIR`` and ``Iconv_LIBRARY`` might be empty.
-
-#]=======================================================================]
-
-include(${CMAKE_CURRENT_LIST_DIR}/CMakePushCheckState.cmake)
-if(CMAKE_C_COMPILER_LOADED)
-  include(${CMAKE_CURRENT_LIST_DIR}/CheckCSourceCompiles.cmake)
-elseif(CMAKE_CXX_COMPILER_LOADED)
-  include(${CMAKE_CURRENT_LIST_DIR}/CheckCXXSourceCompiles.cmake)
-else()
-  # If neither C nor CXX are loaded, implicit iconv makes no sense.
-  set(Iconv_IS_BUILT_IN FALSE)
-endif()
-
-# iconv can only be provided in libc on a POSIX system.
-# If any cache variable is already set, we'll skip this test.
-if(NOT DEFINED Iconv_IS_BUILT_IN)
-  if(UNIX AND NOT DEFINED Iconv_INCLUDE_DIR AND NOT DEFINED Iconv_LIBRARY)
-    cmake_push_check_state(RESET)
-    # We always suppress the message here: Otherwise on supported systems
-    # not having iconv in their C library (e.g. those using libiconv)
-    # would always display a confusing "Looking for iconv - not found" message
-    set(CMAKE_FIND_QUIETLY TRUE)
-    # The following code will not work, but it's sufficient to see if it compiles.
-    # Note: libiconv will define the iconv functions as macros, so CheckSymbolExists
-    # will not yield correct results.
-    set(Iconv_IMPLICIT_TEST_CODE
-      "
-      #include <stddef.h>
-      #include <iconv.h>
-      int main() {
-        char *a, *b;
-        size_t i, j;
-        iconv_t ic;
-        ic = iconv_open(\"to\", \"from\");
-        iconv(ic, &a, &i, &b, &j);
-        iconv_close(ic);
-      }
-      "
-    )
-    if(CMAKE_C_COMPILER_LOADED)
-      check_c_source_compiles("${Iconv_IMPLICIT_TEST_CODE}" Iconv_IS_BUILT_IN)
-    else()
-      check_cxx_source_compiles("${Iconv_IMPLICIT_TEST_CODE}" Iconv_IS_BUILT_IN)
-    endif()
-    cmake_pop_check_state()
-  else()
-    set(Iconv_IS_BUILT_IN FALSE)
-  endif()
-endif()
-
-if(NOT Iconv_IS_BUILT_IN)
-  find_path(Iconv_INCLUDE_DIR
-    NAMES "iconv.h"
-    DOC "iconv include directory")
-  set(Iconv_LIBRARY_NAMES "iconv" "libiconv")
-else()
-  set(Iconv_INCLUDE_DIR "" CACHE FILEPATH "iconv include directory")
-  set(Iconv_LIBRARY_NAMES "c")
-endif()
-
-find_library(Iconv_LIBRARY
-  NAMES ${Iconv_LIBRARY_NAMES}
-  DOC "iconv library (potentially the C library)")
-
-mark_as_advanced(Iconv_INCLUDE_DIR)
-mark_as_advanced(Iconv_LIBRARY)
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-if(NOT Iconv_IS_BUILT_IN)
-  find_package_handle_standard_args(Iconv REQUIRED_VARS Iconv_LIBRARY Iconv_INCLUDE_DIR)
-else()
-  find_package_handle_standard_args(Iconv REQUIRED_VARS Iconv_LIBRARY)
-endif()
-
-if(Iconv_FOUND)
-  set(Iconv_INCLUDE_DIRS "${Iconv_INCLUDE_DIR}")
-  set(Iconv_LIBRARIES "${Iconv_LIBRARY}")
-  if(NOT TARGET Iconv::Iconv)
-    add_library(Iconv::Iconv INTERFACE IMPORTED)
-  endif()
-  set_property(TARGET Iconv::Iconv PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${Iconv_INCLUDE_DIRS}")
-  set_property(TARGET Iconv::Iconv PROPERTY INTERFACE_LINK_LIBRARIES "${Iconv_LIBRARIES}")
-endif()
diff --git a/share/cmake-3.18/Modules/FindImageMagick.cmake b/share/cmake-3.18/Modules/FindImageMagick.cmake
deleted file mode 100644
index 8bf5123..0000000
--- a/share/cmake-3.18/Modules/FindImageMagick.cmake
+++ /dev/null
@@ -1,307 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindImageMagick
----------------
-
-Find ImageMagick binary suite.
-
-This module will search for a set of ImageMagick tools specified as
-components in the :command:`find_package` call.  Typical components include,
-but are not limited to (future versions of ImageMagick might have
-additional components not listed here):
-
-::
-
-  animate
-  compare
-  composite
-  conjure
-  convert
-  display
-  identify
-  import
-  mogrify
-  montage
-  stream
-
-
-
-If no component is specified in the :command:`find_package` call, then it only
-searches for the ImageMagick executable directory.  This code defines
-the following variables:
-
-::
-
-  ImageMagick_FOUND                  - TRUE if all components are found.
-  ImageMagick_EXECUTABLE_DIR         - Full path to executables directory.
-  ImageMagick_<component>_FOUND      - TRUE if <component> is found.
-  ImageMagick_<component>_EXECUTABLE - Full path to <component> executable.
-  ImageMagick_VERSION_STRING         - the version of ImageMagick found
-                                       (since CMake 2.8.8)
-
-
-
-``ImageMagick_VERSION_STRING`` will not work for old versions like 5.2.3.
-
-There are also components for the following ImageMagick APIs:
-
-::
-
-  Magick++
-  MagickWand
-  MagickCore
-
-
-
-For these components the following variables are set:
-
-::
-
-  ImageMagick_FOUND                    - TRUE if all components are found.
-  ImageMagick_INCLUDE_DIRS             - Full paths to all include dirs.
-  ImageMagick_LIBRARIES                - Full paths to all libraries.
-  ImageMagick_<component>_FOUND        - TRUE if <component> is found.
-  ImageMagick_<component>_INCLUDE_DIRS - Full path to <component> include dirs.
-  ImageMagick_<component>_LIBRARIES    - Full path to <component> libraries.
-
-
-
-Example Usages:
-
-::
-
-  find_package(ImageMagick)
-  find_package(ImageMagick COMPONENTS convert)
-  find_package(ImageMagick COMPONENTS convert mogrify display)
-  find_package(ImageMagick COMPONENTS Magick++)
-  find_package(ImageMagick COMPONENTS Magick++ convert)
-
-
-
-Note that the standard :command:`find_package` features are supported (i.e.,
-``QUIET``, ``REQUIRED``, etc.).
-#]=======================================================================]
-
-find_package(PkgConfig QUIET)
-
-#---------------------------------------------------------------------
-# Helper functions
-#---------------------------------------------------------------------
-function(FIND_IMAGEMAGICK_API component header)
-  set(ImageMagick_${component}_FOUND FALSE PARENT_SCOPE)
-
-  pkg_check_modules(PC_${component} QUIET ${component})
-
-  find_path(ImageMagick_${component}_INCLUDE_DIR
-    NAMES ${header}
-    HINTS
-      ${PC_${component}_INCLUDEDIR}
-      ${PC_${component}_INCLUDE_DIRS}
-    PATHS
-      ${ImageMagick_INCLUDE_DIRS}
-      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ImageMagick\\Current;BinPath]/include"
-    PATH_SUFFIXES
-      ImageMagick ImageMagick-6 ImageMagick-7
-    DOC "Path to the ImageMagick arch-independent include dir."
-    NO_DEFAULT_PATH
-    )
-  find_path(ImageMagick_${component}_ARCH_INCLUDE_DIR
-    NAMES magick/magick-baseconfig.h
-    HINTS
-      ${PC_${component}_INCLUDEDIR}
-      ${PC_${component}_INCLUDE_DIRS}
-    PATHS
-      ${ImageMagick_INCLUDE_DIRS}
-      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ImageMagick\\Current;BinPath]/include"
-    PATH_SUFFIXES
-      ImageMagick ImageMagick-6 ImageMagick-7
-    DOC "Path to the ImageMagick arch-specific include dir."
-    NO_DEFAULT_PATH
-    )
-  find_library(ImageMagick_${component}_LIBRARY
-    NAMES ${ARGN}
-    HINTS
-      ${PC_${component}_LIBDIR}
-      ${PC_${component}_LIB_DIRS}
-    PATHS
-      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ImageMagick\\Current;BinPath]/lib"
-    DOC "Path to the ImageMagick Magick++ library."
-    NO_DEFAULT_PATH
-    )
-
-  # old version have only indep dir
-  if(ImageMagick_${component}_INCLUDE_DIR AND ImageMagick_${component}_LIBRARY)
-    set(ImageMagick_${component}_FOUND TRUE PARENT_SCOPE)
-
-    # Construct per-component include directories.
-    set(ImageMagick_${component}_INCLUDE_DIRS
-      ${ImageMagick_${component}_INCLUDE_DIR}
-      )
-    if(ImageMagick_${component}_ARCH_INCLUDE_DIR)
-      list(APPEND ImageMagick_${component}_INCLUDE_DIRS
-        ${ImageMagick_${component}_ARCH_INCLUDE_DIR})
-    endif()
-    list(REMOVE_DUPLICATES ImageMagick_${component}_INCLUDE_DIRS)
-    set(ImageMagick_${component}_INCLUDE_DIRS
-      ${ImageMagick_${component}_INCLUDE_DIRS} PARENT_SCOPE)
-
-    # Add the per-component include directories to the full include dirs.
-    list(APPEND ImageMagick_INCLUDE_DIRS ${ImageMagick_${component}_INCLUDE_DIRS})
-    list(REMOVE_DUPLICATES ImageMagick_INCLUDE_DIRS)
-    set(ImageMagick_INCLUDE_DIRS ${ImageMagick_INCLUDE_DIRS} PARENT_SCOPE)
-
-    list(APPEND ImageMagick_LIBRARIES
-      ${ImageMagick_${component}_LIBRARY}
-      )
-    set(ImageMagick_LIBRARIES ${ImageMagick_LIBRARIES} PARENT_SCOPE)
-  endif()
-endfunction()
-
-function(FIND_IMAGEMAGICK_EXE component)
-  set(_IMAGEMAGICK_EXECUTABLE
-    ${ImageMagick_EXECUTABLE_DIR}/${component}${CMAKE_EXECUTABLE_SUFFIX})
-  if(EXISTS ${_IMAGEMAGICK_EXECUTABLE})
-    set(ImageMagick_${component}_EXECUTABLE
-      ${_IMAGEMAGICK_EXECUTABLE}
-       PARENT_SCOPE
-       )
-    set(ImageMagick_${component}_FOUND TRUE PARENT_SCOPE)
-  else()
-    set(ImageMagick_${component}_FOUND FALSE PARENT_SCOPE)
-  endif()
-endfunction()
-
-#---------------------------------------------------------------------
-# Start Actual Work
-#---------------------------------------------------------------------
-# Try to find a ImageMagick installation binary path.
-find_path(ImageMagick_EXECUTABLE_DIR
-  NAMES mogrify${CMAKE_EXECUTABLE_SUFFIX}
-  PATHS
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ImageMagick\\Current;BinPath]"
-  DOC "Path to the ImageMagick binary directory."
-  NO_DEFAULT_PATH
-  )
-find_path(ImageMagick_EXECUTABLE_DIR
-  NAMES mogrify${CMAKE_EXECUTABLE_SUFFIX}
-  )
-
-# Find each component. Search for all tools in same dir
-# <ImageMagick_EXECUTABLE_DIR>; otherwise they should be found
-# independently and not in a cohesive module such as this one.
-unset(ImageMagick_REQUIRED_VARS)
-unset(ImageMagick_DEFAULT_EXECUTABLES)
-foreach(component ${ImageMagick_FIND_COMPONENTS}
-    # DEPRECATED: forced components for backward compatibility
-    convert mogrify import montage composite
-    )
-  if(component STREQUAL "Magick++")
-    FIND_IMAGEMAGICK_API(Magick++ Magick++.h
-      Magick++ CORE_RL_Magick++_
-      Magick++-6 Magick++-7
-      Magick++-Q8 Magick++-Q16 Magick++-Q16HDRI Magick++-Q8HDRI
-      Magick++-6.Q64 Magick++-6.Q32 Magick++-6.Q64HDRI Magick++-6.Q32HDRI
-      Magick++-6.Q16 Magick++-6.Q8 Magick++-6.Q16HDRI Magick++-6.Q8HDRI
-      Magick++-7.Q64 Magick++-7.Q32 Magick++-7.Q64HDRI Magick++-7.Q32HDRI
-      Magick++-7.Q16 Magick++-7.Q8 Magick++-7.Q16HDRI Magick++-7.Q8HDRI
-      )
-    list(APPEND ImageMagick_REQUIRED_VARS ImageMagick_Magick++_LIBRARY)
-  elseif(component STREQUAL "MagickWand")
-    FIND_IMAGEMAGICK_API(MagickWand "wand/MagickWand.h;MagickWand/MagickWand.h"
-      Wand MagickWand CORE_RL_wand_ CORE_RL_MagickWand_
-      MagickWand-6 MagickWand-7
-      MagickWand-Q16 MagickWand-Q8 MagickWand-Q16HDRI MagickWand-Q8HDRI
-      MagickWand-6.Q64 MagickWand-6.Q32 MagickWand-6.Q64HDRI MagickWand-6.Q32HDRI
-      MagickWand-6.Q16 MagickWand-6.Q8 MagickWand-6.Q16HDRI MagickWand-6.Q8HDRI
-      MagickWand-7.Q64 MagickWand-7.Q32 MagickWand-7.Q64HDRI MagickWand-7.Q32HDRI
-      MagickWand-7.Q16 MagickWand-7.Q8 MagickWand-7.Q16HDRI MagickWand-7.Q8HDRI
-      )
-    list(APPEND ImageMagick_REQUIRED_VARS ImageMagick_MagickWand_LIBRARY)
-  elseif(component STREQUAL "MagickCore")
-    FIND_IMAGEMAGICK_API(MagickCore "magick/MagickCore.h;MagickCore/MagickCore.h"
-      Magick MagickCore CORE_RL_magick_ CORE_RL_MagickCore_
-      MagickCore-6 MagickCore-7
-      MagickCore-Q16 MagickCore-Q8 MagickCore-Q16HDRI MagickCore-Q8HDRI
-      MagickCore-6.Q64 MagickCore-6.Q32 MagickCore-6.Q64HDRI MagickCore-6.Q32HDRI
-      MagickCore-6.Q16 MagickCore-6.Q8 MagickCore-6.Q16HDRI MagickCore-6.Q8HDRI
-      MagickCore-7.Q64 MagickCore-7.Q32 MagickCore-7.Q64HDRI MagickCore-7.Q32HDRI
-      MagickCore-7.Q16 MagickCore-7.Q8 MagickCore-7.Q16HDRI MagickCore-7.Q8HDRI
-      )
-    list(APPEND ImageMagick_REQUIRED_VARS ImageMagick_MagickCore_LIBRARY)
-  else()
-    if(ImageMagick_EXECUTABLE_DIR)
-      FIND_IMAGEMAGICK_EXE(${component})
-    endif()
-
-    if(ImageMagick_FIND_COMPONENTS)
-      list(FIND ImageMagick_FIND_COMPONENTS ${component} is_requested)
-      if(is_requested GREATER -1)
-        list(APPEND ImageMagick_REQUIRED_VARS ImageMagick_${component}_EXECUTABLE)
-      endif()
-    elseif(ImageMagick_${component}_EXECUTABLE)
-      # if no components were requested explicitly put all (default) executables
-      # in the list
-      list(APPEND ImageMagick_DEFAULT_EXECUTABLES ImageMagick_${component}_EXECUTABLE)
-    endif()
-  endif()
-endforeach()
-
-if(NOT ImageMagick_FIND_COMPONENTS AND NOT ImageMagick_DEFAULT_EXECUTABLES)
-  # No components were requested, and none of the default components were
-  # found. Just insert mogrify into the list of the default components to
-  # find so FPHSA below has something to check
-  list(APPEND ImageMagick_REQUIRED_VARS ImageMagick_mogrify_EXECUTABLE)
-elseif(ImageMagick_DEFAULT_EXECUTABLES)
-  list(APPEND ImageMagick_REQUIRED_VARS ${ImageMagick_DEFAULT_EXECUTABLES})
-endif()
-
-set(ImageMagick_INCLUDE_DIRS ${ImageMagick_INCLUDE_DIRS})
-set(ImageMagick_LIBRARIES ${ImageMagick_LIBRARIES})
-
-if(ImageMagick_mogrify_EXECUTABLE)
-  execute_process(COMMAND ${ImageMagick_mogrify_EXECUTABLE} -version
-                  OUTPUT_VARIABLE imagemagick_version
-                  ERROR_QUIET
-                  OUTPUT_STRIP_TRAILING_WHITESPACE)
-  if(imagemagick_version MATCHES "^Version: ImageMagick ([-0-9\\.]+)")
-    set(ImageMagick_VERSION_STRING "${CMAKE_MATCH_1}")
-  endif()
-  unset(imagemagick_version)
-endif()
-
-#---------------------------------------------------------------------
-# Standard Package Output
-#---------------------------------------------------------------------
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(ImageMagick
-                                  REQUIRED_VARS ${ImageMagick_REQUIRED_VARS}
-                                  VERSION_VAR ImageMagick_VERSION_STRING
-  )
-# Maintain consistency with all other variables.
-set(ImageMagick_FOUND ${IMAGEMAGICK_FOUND})
-
-#---------------------------------------------------------------------
-# DEPRECATED: Setting variables for backward compatibility.
-#---------------------------------------------------------------------
-set(IMAGEMAGICK_BINARY_PATH          ${ImageMagick_EXECUTABLE_DIR}
-    CACHE PATH "Path to the ImageMagick binary directory.")
-set(IMAGEMAGICK_CONVERT_EXECUTABLE   ${ImageMagick_convert_EXECUTABLE}
-    CACHE FILEPATH "Path to ImageMagick's convert executable.")
-set(IMAGEMAGICK_MOGRIFY_EXECUTABLE   ${ImageMagick_mogrify_EXECUTABLE}
-    CACHE FILEPATH "Path to ImageMagick's mogrify executable.")
-set(IMAGEMAGICK_IMPORT_EXECUTABLE    ${ImageMagick_import_EXECUTABLE}
-    CACHE FILEPATH "Path to ImageMagick's import executable.")
-set(IMAGEMAGICK_MONTAGE_EXECUTABLE   ${ImageMagick_montage_EXECUTABLE}
-    CACHE FILEPATH "Path to ImageMagick's montage executable.")
-set(IMAGEMAGICK_COMPOSITE_EXECUTABLE ${ImageMagick_composite_EXECUTABLE}
-    CACHE FILEPATH "Path to ImageMagick's composite executable.")
-mark_as_advanced(
-  IMAGEMAGICK_BINARY_PATH
-  IMAGEMAGICK_CONVERT_EXECUTABLE
-  IMAGEMAGICK_MOGRIFY_EXECUTABLE
-  IMAGEMAGICK_IMPORT_EXECUTABLE
-  IMAGEMAGICK_MONTAGE_EXECUTABLE
-  IMAGEMAGICK_COMPOSITE_EXECUTABLE
-  )
diff --git a/share/cmake-3.18/Modules/FindIntl.cmake b/share/cmake-3.18/Modules/FindIntl.cmake
deleted file mode 100644
index 3818d45..0000000
--- a/share/cmake-3.18/Modules/FindIntl.cmake
+++ /dev/null
@@ -1,60 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindIntl
---------
-
-Find the Gettext libintl headers and libraries.
-
-This module reports information about the Gettext libintl
-installation in several variables.  General variables::
-
-  Intl_FOUND - true if the libintl headers and libraries were found
-  Intl_INCLUDE_DIRS - the directory containing the libintl headers
-  Intl_LIBRARIES - libintl libraries to be linked
-
-The following cache variables may also be set::
-
-  Intl_INCLUDE_DIR - the directory containing the libintl headers
-  Intl_LIBRARY - the libintl library (if any)
-
-.. note::
-  On some platforms, such as Linux with GNU libc, the gettext
-  functions are present in the C standard library and libintl
-  is not required.  ``Intl_LIBRARIES`` will be empty in this
-  case.
-
-.. note::
-  If you wish to use the Gettext tools (``msgmerge``,
-  ``msgfmt``, etc.), use :module:`FindGettext`.
-#]=======================================================================]
-
-
-# Written by Roger Leigh <rleigh@codelibre.net>
-
-# Find include directory
-find_path(Intl_INCLUDE_DIR
-          NAMES "libintl.h"
-          DOC "libintl include directory")
-mark_as_advanced(Intl_INCLUDE_DIR)
-
-# Find all Intl libraries
-find_library(Intl_LIBRARY "intl"
-  DOC "libintl libraries (if not in the C library)")
-mark_as_advanced(Intl_LIBRARY)
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(Intl
-                                  FOUND_VAR Intl_FOUND
-                                  REQUIRED_VARS Intl_INCLUDE_DIR
-                                  FAIL_MESSAGE "Failed to find Gettext libintl")
-
-if(Intl_FOUND)
-  set(Intl_INCLUDE_DIRS "${Intl_INCLUDE_DIR}")
-  if(Intl_LIBRARY)
-    set(Intl_LIBRARIES "${Intl_LIBRARY}")
-  else()
-    unset(Intl_LIBRARIES)
-  endif()
-endif()
diff --git a/share/cmake-3.18/Modules/FindJNI.cmake b/share/cmake-3.18/Modules/FindJNI.cmake
deleted file mode 100644
index 3a5bd31..0000000
--- a/share/cmake-3.18/Modules/FindJNI.cmake
+++ /dev/null
@@ -1,395 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindJNI
--------
-
-Find Java Native Interface (JNI) libraries.
-
-JNI enables Java code running in a Java Virtual Machine (JVM) to call
-and be called by native applications and libraries written in other
-languages such as C, C++.
-
-This module finds if Java is installed and determines where the
-include files and libraries are.  It also determines what the name of
-the library is.  The caller may set variable ``JAVA_HOME`` to specify a
-Java installation prefix explicitly.
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-This module sets the following result variables:
-
-``JNI_INCLUDE_DIRS``
-  the include dirs to use
-``JNI_LIBRARIES``
-  the libraries to use (JAWT and JVM)
-``JNI_FOUND``
-  TRUE if JNI headers and libraries were found.
-
-Cache Variables
-^^^^^^^^^^^^^^^
-
-The following cache variables are also available to set or use:
-
-``JAVA_AWT_LIBRARY``
-  the path to the Java AWT Native Interface (JAWT) library
-``JAVA_JVM_LIBRARY``
-  the path to the Java Virtual Machine (JVM) library
-``JAVA_INCLUDE_PATH``
-  the include path to jni.h
-``JAVA_INCLUDE_PATH2``
-  the include path to jni_md.h and jniport.h
-``JAVA_AWT_INCLUDE_PATH``
-  the include path to jawt.h
-#]=======================================================================]
-
-# Expand {libarch} occurrences to java_libarch subdirectory(-ies) and set ${_var}
-macro(java_append_library_directories _var)
-    # Determine java arch-specific library subdir
-    # Mostly based on openjdk/jdk/make/common/shared/Platform.gmk as of openjdk
-    # 1.6.0_18 + icedtea patches. However, it would be much better to base the
-    # guess on the first part of the GNU config.guess platform triplet.
-    if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
-      if(CMAKE_LIBRARY_ARCHITECTURE STREQUAL "x86_64-linux-gnux32")
-        set(_java_libarch "x32" "amd64" "i386")
-      else()
-        set(_java_libarch "amd64" "i386")
-      endif()
-    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^i.86$")
-        set(_java_libarch "i386")
-    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^alpha")
-        set(_java_libarch "alpha")
-    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")
-        # Subdir is "arm" for both big-endian (arm) and little-endian (armel).
-        set(_java_libarch "arm" "aarch32")
-    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^mips")
-        # mips* machines are bi-endian mostly so processor does not tell
-        # endianness of the underlying system.
-        set(_java_libarch "${CMAKE_SYSTEM_PROCESSOR}"
-            "mips" "mipsel" "mipseb" "mipsr6" "mipsr6el"
-            "mips64" "mips64el" "mips64r6" "mips64r6el"
-            "mipsn32" "mipsn32el" "mipsn32r6" "mipsn32r6el")
-    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64le")
-        set(_java_libarch "ppc64" "ppc64le")
-    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64")
-        set(_java_libarch "ppc64" "ppc")
-    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)")
-        set(_java_libarch "ppc" "ppc64")
-    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^sparc")
-        # Both flavours can run on the same processor
-        set(_java_libarch "${CMAKE_SYSTEM_PROCESSOR}" "sparc" "sparcv9")
-    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(parisc|hppa)")
-        set(_java_libarch "parisc" "parisc64")
-    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^s390")
-        # s390 binaries can run on s390x machines
-        set(_java_libarch "${CMAKE_SYSTEM_PROCESSOR}" "s390" "s390x")
-    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^sh")
-        set(_java_libarch "sh")
-    else()
-        set(_java_libarch "${CMAKE_SYSTEM_PROCESSOR}")
-    endif()
-
-    # Append default list architectures if CMAKE_SYSTEM_PROCESSOR was empty or
-    # system is non-Linux (where the code above has not been well tested)
-    if(NOT _java_libarch OR NOT (CMAKE_SYSTEM_NAME MATCHES "Linux"))
-        list(APPEND _java_libarch "i386" "amd64" "ppc")
-    endif()
-
-    # Sometimes ${CMAKE_SYSTEM_PROCESSOR} is added to the list to prefer
-    # current value to a hardcoded list. Remove possible duplicates.
-    list(REMOVE_DUPLICATES _java_libarch)
-
-    foreach(_path ${ARGN})
-        if(_path MATCHES "{libarch}")
-            foreach(_libarch ${_java_libarch})
-                string(REPLACE "{libarch}" "${_libarch}" _newpath "${_path}")
-                if(EXISTS ${_newpath})
-                    list(APPEND ${_var} "${_newpath}")
-                endif()
-            endforeach()
-        else()
-            if(EXISTS ${_path})
-                list(APPEND ${_var} "${_path}")
-            endif()
-        endif()
-    endforeach()
-endmacro()
-
-include(${CMAKE_CURRENT_LIST_DIR}/CMakeFindJavaCommon.cmake)
-
-# Save CMAKE_FIND_FRAMEWORK
-if(DEFINED CMAKE_FIND_FRAMEWORK)
-  set(_JNI_CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK})
-else()
-  unset(_JNI_CMAKE_FIND_FRAMEWORK)
-endif()
-
-if(_JAVA_HOME_EXPLICIT)
-  set(CMAKE_FIND_FRAMEWORK NEVER)
-endif()
-
-set(JAVA_AWT_LIBRARY_DIRECTORIES)
-if(_JAVA_HOME)
-  JAVA_APPEND_LIBRARY_DIRECTORIES(JAVA_AWT_LIBRARY_DIRECTORIES
-    ${_JAVA_HOME}/jre/lib/{libarch}
-    ${_JAVA_HOME}/jre/lib
-    ${_JAVA_HOME}/lib/{libarch}
-    ${_JAVA_HOME}/lib
-    ${_JAVA_HOME}
-    )
-endif()
-
-if (WIN32)
-  set (_JNI_HINTS)
-  execute_process(COMMAND REG QUERY HKLM\\SOFTWARE\\JavaSoft\\JDK
-    RESULT_VARIABLE _JNI_RESULT
-    OUTPUT_VARIABLE _JNI_VERSIONS
-    ERROR_QUIET)
-  if (NOT  _JNI_RESULT)
-    string (REGEX MATCHALL "HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\JavaSoft\\\\JDK\\\\[0-9.]+" _JNI_VERSIONS "${_JNI_VERSIONS}")
-    if (_JNI_VERSIONS)
-      # sort versions. Most recent first
-      ## handle version 9 apart from other versions to get correct ordering
-      set (_JNI_V9 ${_JNI_VERSIONS})
-      list (FILTER _JNI_VERSIONS EXCLUDE REGEX "JDK\\\\9")
-      list (SORT _JNI_VERSIONS)
-      list (REVERSE _JNI_VERSIONS)
-      list (FILTER _JNI_V9 INCLUDE REGEX "JDK\\\\9")
-      list (SORT _JNI_V9)
-      list (REVERSE _JNI_V9)
-      list (APPEND _JNI_VERSIONS ${_JNI_V9})
-      foreach (_JNI_HINT IN LISTS _JNI_VERSIONS)
-        list(APPEND _JNI_HINTS "[${_JNI_HINT};JavaHome]")
-      endforeach()
-    endif()
-  endif()
-
-  foreach (_JNI_HINT IN LISTS _JNI_HINTS)
-    list(APPEND JAVA_AWT_LIBRARY_DIRECTORIES "${_JNI_HINT}/lib")
-  endforeach()
-
-  get_filename_component(java_install_version
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit;CurrentVersion]" NAME)
-
-  list(APPEND JAVA_AWT_LIBRARY_DIRECTORIES
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.9;JavaHome]/lib"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.8;JavaHome]/lib"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.7;JavaHome]/lib"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.6;JavaHome]/lib"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.5;JavaHome]/lib"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.4;JavaHome]/lib"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.3;JavaHome]/lib"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\${java_install_version};JavaHome]/lib"
-    )
-endif()
-
-set(_JNI_JAVA_DIRECTORIES_BASE
-  /usr/lib/jvm/java
-  /usr/lib/java
-  /usr/lib/jvm
-  /usr/local/lib/java
-  /usr/local/share/java
-  /usr/lib/j2sdk1.4-sun
-  /usr/lib/j2sdk1.5-sun
-  /opt/sun-jdk-1.5.0.04
-  /usr/lib/jvm/java-6-sun
-  /usr/lib/jvm/java-1.5.0-sun
-  /usr/lib/jvm/java-6-sun-1.6.0.00       # can this one be removed according to #8821 ? Alex
-  /usr/lib/jvm/java-6-openjdk
-  /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0        # fedora
-  # Debian specific paths for default JVM
-  /usr/lib/jvm/default-java
-  # Arch Linux specific paths for default JVM
-  /usr/lib/jvm/default
-  # Ubuntu specific paths for default JVM
-  /usr/lib/jvm/java-11-openjdk-{libarch}    # Ubuntu 18.04 LTS
-  /usr/lib/jvm/java-8-openjdk-{libarch}     # Ubuntu 15.10
-  /usr/lib/jvm/java-7-openjdk-{libarch}     # Ubuntu 15.10
-  /usr/lib/jvm/java-6-openjdk-{libarch}     # Ubuntu 15.10
-  # OpenBSD specific paths for default JVM
-  /usr/local/jdk-1.7.0
-  /usr/local/jre-1.7.0
-  /usr/local/jdk-1.6.0
-  /usr/local/jre-1.6.0
-  # SuSE specific paths for default JVM
-  /usr/lib64/jvm/java
-  /usr/lib64/jvm/jre
-  )
-
-set(_JNI_JAVA_AWT_LIBRARY_TRIES)
-set(_JNI_JAVA_INCLUDE_TRIES)
-
-foreach(_java_dir IN LISTS _JNI_JAVA_DIRECTORIES_BASE)
-  list(APPEND _JNI_JAVA_AWT_LIBRARY_TRIES
-    ${_java_dir}/jre/lib/{libarch}
-    ${_java_dir}/jre/lib
-    ${_java_dir}/lib/{libarch}
-    ${_java_dir}/lib
-    ${_java_dir}
-  )
-  list(APPEND _JNI_JAVA_INCLUDE_TRIES
-    ${_java_dir}/include
-  )
-endforeach()
-
-JAVA_APPEND_LIBRARY_DIRECTORIES(JAVA_AWT_LIBRARY_DIRECTORIES
-    ${_JNI_JAVA_AWT_LIBRARY_TRIES}
-  )
-
-set(JAVA_JVM_LIBRARY_DIRECTORIES)
-foreach(dir ${JAVA_AWT_LIBRARY_DIRECTORIES})
-  list(APPEND JAVA_JVM_LIBRARY_DIRECTORIES
-    "${dir}"
-    "${dir}/client"
-    "${dir}/server"
-    # IBM SDK, Java Technology Edition, specific paths
-    "${dir}/j9vm"
-    "${dir}/default"
-    )
-endforeach()
-
-set(JAVA_AWT_INCLUDE_DIRECTORIES)
-if(_JAVA_HOME)
-  list(APPEND JAVA_AWT_INCLUDE_DIRECTORIES ${_JAVA_HOME}/include)
-endif()
-if (WIN32)
-  foreach (_JNI_HINT IN LISTS _JNI_HINTS)
-    list(APPEND JAVA_AWT_INCLUDE_DIRECTORIES "${_JNI_HINT}/include")
-  endforeach()
-  list(APPEND JAVA_AWT_INCLUDE_DIRECTORIES
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.9;JavaHome]/include"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.8;JavaHome]/include"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.7;JavaHome]/include"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.6;JavaHome]/include"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.5;JavaHome]/include"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.4;JavaHome]/include"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.3;JavaHome]/include"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\${java_install_version};JavaHome]/include"
-    )
-endif()
-
-JAVA_APPEND_LIBRARY_DIRECTORIES(JAVA_AWT_INCLUDE_DIRECTORIES
-  ${_JNI_JAVA_INCLUDE_TRIES}
-  )
-
-foreach(JAVA_PROG "${JAVA_RUNTIME}" "${JAVA_COMPILE}" "${JAVA_ARCHIVE}")
-  get_filename_component(jpath "${JAVA_PROG}" PATH)
-  foreach(JAVA_INC_PATH ../include ../java/include ../share/java/include)
-    if(EXISTS ${jpath}/${JAVA_INC_PATH})
-      list(APPEND JAVA_AWT_INCLUDE_DIRECTORIES "${jpath}/${JAVA_INC_PATH}")
-    endif()
-  endforeach()
-  foreach(JAVA_LIB_PATH
-    ../lib ../jre/lib ../jre/lib/i386
-    ../java/lib ../java/jre/lib ../java/jre/lib/i386
-    ../share/java/lib ../share/java/jre/lib ../share/java/jre/lib/i386)
-    if(EXISTS ${jpath}/${JAVA_LIB_PATH})
-      list(APPEND JAVA_AWT_LIBRARY_DIRECTORIES "${jpath}/${JAVA_LIB_PATH}")
-    endif()
-  endforeach()
-endforeach()
-
-if(APPLE)
-  if(CMAKE_FIND_FRAMEWORK STREQUAL "ONLY")
-    set(_JNI_SEARCHES FRAMEWORK)
-  elseif(CMAKE_FIND_FRAMEWORK STREQUAL "NEVER")
-    set(_JNI_SEARCHES NORMAL)
-  elseif(CMAKE_FIND_FRAMEWORK STREQUAL "LAST")
-    set(_JNI_SEARCHES NORMAL FRAMEWORK)
-  else()
-    set(_JNI_SEARCHES FRAMEWORK NORMAL)
-  endif()
-  set(_JNI_FRAMEWORK_JVM NAMES JavaVM)
-  set(_JNI_FRAMEWORK_JAWT "${_JNI_FRAMEWORK_JVM}")
-else()
-  set(_JNI_SEARCHES NORMAL)
-endif()
-
-set(_JNI_NORMAL_JVM
-  NAMES jvm
-  PATHS ${JAVA_JVM_LIBRARY_DIRECTORIES}
-  )
-
-set(_JNI_NORMAL_JAWT
-  NAMES jawt
-  PATHS ${JAVA_AWT_LIBRARY_DIRECTORIES}
-  )
-
-foreach(search ${_JNI_SEARCHES})
-  find_library(JAVA_JVM_LIBRARY ${_JNI_${search}_JVM})
-  find_library(JAVA_AWT_LIBRARY ${_JNI_${search}_JAWT})
-  if(JAVA_JVM_LIBRARY)
-    break()
-  endif()
-endforeach()
-unset(_JNI_SEARCHES)
-unset(_JNI_FRAMEWORK_JVM)
-unset(_JNI_FRAMEWORK_JAWT)
-unset(_JNI_NORMAL_JVM)
-unset(_JNI_NORMAL_JAWT)
-
-# Find headers matching the library.
-if("${JAVA_JVM_LIBRARY};${JAVA_AWT_LIBRARY};" MATCHES "(/JavaVM.framework|-framework JavaVM);")
-  set(CMAKE_FIND_FRAMEWORK ONLY)
-else()
-  set(CMAKE_FIND_FRAMEWORK NEVER)
-endif()
-
-# add in the include path
-find_path(JAVA_INCLUDE_PATH jni.h
-  ${JAVA_AWT_INCLUDE_DIRECTORIES}
-)
-
-find_path(JAVA_INCLUDE_PATH2 NAMES jni_md.h jniport.h
-  PATHS
-  ${JAVA_INCLUDE_PATH}
-  ${JAVA_INCLUDE_PATH}/darwin
-  ${JAVA_INCLUDE_PATH}/win32
-  ${JAVA_INCLUDE_PATH}/linux
-  ${JAVA_INCLUDE_PATH}/freebsd
-  ${JAVA_INCLUDE_PATH}/openbsd
-  ${JAVA_INCLUDE_PATH}/solaris
-  ${JAVA_INCLUDE_PATH}/hp-ux
-  ${JAVA_INCLUDE_PATH}/alpha
-  ${JAVA_INCLUDE_PATH}/aix
-)
-
-find_path(JAVA_AWT_INCLUDE_PATH jawt.h
-  ${JAVA_INCLUDE_PATH}
-)
-
-# Restore CMAKE_FIND_FRAMEWORK
-if(DEFINED _JNI_CMAKE_FIND_FRAMEWORK)
-  set(CMAKE_FIND_FRAMEWORK ${_JNI_CMAKE_FIND_FRAMEWORK})
-  unset(_JNI_CMAKE_FIND_FRAMEWORK)
-else()
-  unset(CMAKE_FIND_FRAMEWORK)
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(JNI  DEFAULT_MSG  JAVA_AWT_LIBRARY
-                                                    JAVA_JVM_LIBRARY
-                                                    JAVA_INCLUDE_PATH
-                                                    JAVA_INCLUDE_PATH2
-                                                    JAVA_AWT_INCLUDE_PATH)
-
-mark_as_advanced(
-  JAVA_AWT_LIBRARY
-  JAVA_JVM_LIBRARY
-  JAVA_AWT_INCLUDE_PATH
-  JAVA_INCLUDE_PATH
-  JAVA_INCLUDE_PATH2
-)
-
-set(JNI_LIBRARIES
-  ${JAVA_AWT_LIBRARY}
-  ${JAVA_JVM_LIBRARY}
-)
-
-set(JNI_INCLUDE_DIRS
-  ${JAVA_INCLUDE_PATH}
-  ${JAVA_INCLUDE_PATH2}
-  ${JAVA_AWT_INCLUDE_PATH}
-)
diff --git a/share/cmake-3.18/Modules/FindJPEG.cmake b/share/cmake-3.18/Modules/FindJPEG.cmake
deleted file mode 100644
index 0bb6989..0000000
--- a/share/cmake-3.18/Modules/FindJPEG.cmake
+++ /dev/null
@@ -1,136 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindJPEG
---------
-
-Find the Joint Photographic Experts Group (JPEG) library (``libjpeg``)
-
-Imported targets
-^^^^^^^^^^^^^^^^
-
-This module defines the following :prop_tgt:`IMPORTED` targets:
-
-``JPEG::JPEG``
-  The JPEG library, if found.
-
-Result variables
-^^^^^^^^^^^^^^^^
-
-This module will set the following variables in your project:
-
-``JPEG_FOUND``
-  If false, do not try to use JPEG.
-``JPEG_INCLUDE_DIRS``
-  where to find jpeglib.h, etc.
-``JPEG_LIBRARIES``
-  the libraries needed to use JPEG.
-``JPEG_VERSION``
-  the version of the JPEG library found
-
-Cache variables
-^^^^^^^^^^^^^^^
-
-The following cache variables may also be set:
-
-``JPEG_INCLUDE_DIRS``
-  where to find jpeglib.h, etc.
-``JPEG_LIBRARY_RELEASE``
-  where to find the JPEG library (optimized).
-``JPEG_LIBRARY_DEBUG``
-  where to find the JPEG library (debug).
-
-Obsolete variables
-^^^^^^^^^^^^^^^^^^
-
-``JPEG_INCLUDE_DIR``
-  where to find jpeglib.h, etc. (same as JPEG_INCLUDE_DIRS)
-``JPEG_LIBRARY``
-  where to find the JPEG library.
-#]=======================================================================]
-
-find_path(JPEG_INCLUDE_DIR jpeglib.h)
-
-set(jpeg_names ${JPEG_NAMES} jpeg jpeg-static libjpeg libjpeg-static)
-foreach(name ${jpeg_names})
-  list(APPEND jpeg_names_debug "${name}d")
-endforeach()
-
-if(NOT JPEG_LIBRARY)
-  find_library(JPEG_LIBRARY_RELEASE NAMES ${jpeg_names})
-  find_library(JPEG_LIBRARY_DEBUG NAMES ${jpeg_names_debug})
-  include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
-  select_library_configurations(JPEG)
-  mark_as_advanced(JPEG_LIBRARY_RELEASE JPEG_LIBRARY_DEBUG)
-endif()
-unset(jpeg_names)
-unset(jpeg_names_debug)
-
-if(JPEG_INCLUDE_DIR)
-  file(GLOB _JPEG_CONFIG_HEADERS_FEDORA "${JPEG_INCLUDE_DIR}/jconfig*.h")
-  file(GLOB _JPEG_CONFIG_HEADERS_DEBIAN "${JPEG_INCLUDE_DIR}/*/jconfig.h")
-  set(_JPEG_CONFIG_HEADERS
-    "${JPEG_INCLUDE_DIR}/jpeglib.h"
-    ${_JPEG_CONFIG_HEADERS_FEDORA}
-    ${_JPEG_CONFIG_HEADERS_DEBIAN})
-  foreach (_JPEG_CONFIG_HEADER IN LISTS _JPEG_CONFIG_HEADERS)
-    if (NOT EXISTS "${_JPEG_CONFIG_HEADER}")
-      continue ()
-    endif ()
-    file(STRINGS "${_JPEG_CONFIG_HEADER}"
-      jpeg_lib_version REGEX "^#define[\t ]+JPEG_LIB_VERSION[\t ]+.*")
-
-    if (NOT jpeg_lib_version)
-      continue ()
-    endif ()
-
-    string(REGEX REPLACE "^#define[\t ]+JPEG_LIB_VERSION[\t ]+([0-9]+).*"
-      "\\1" JPEG_VERSION "${jpeg_lib_version}")
-    break ()
-  endforeach ()
-  unset(jpeg_lib_version)
-  unset(_JPEG_CONFIG_HEADER)
-  unset(_JPEG_CONFIG_HEADERS)
-  unset(_JPEG_CONFIG_HEADERS_FEDORA)
-  unset(_JPEG_CONFIG_HEADERS_DEBIAN)
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-find_package_handle_standard_args(JPEG
-  REQUIRED_VARS JPEG_LIBRARY JPEG_INCLUDE_DIR
-  VERSION_VAR JPEG_VERSION)
-
-if(JPEG_FOUND)
-  set(JPEG_LIBRARIES ${JPEG_LIBRARY})
-  set(JPEG_INCLUDE_DIRS "${JPEG_INCLUDE_DIR}")
-
-  if(NOT TARGET JPEG::JPEG)
-    add_library(JPEG::JPEG UNKNOWN IMPORTED)
-    if(JPEG_INCLUDE_DIRS)
-      set_target_properties(JPEG::JPEG PROPERTIES
-        INTERFACE_INCLUDE_DIRECTORIES "${JPEG_INCLUDE_DIRS}")
-    endif()
-    if(EXISTS "${JPEG_LIBRARY}")
-      set_target_properties(JPEG::JPEG PROPERTIES
-        IMPORTED_LINK_INTERFACE_LANGUAGES "C"
-        IMPORTED_LOCATION "${JPEG_LIBRARY}")
-    endif()
-    if(EXISTS "${JPEG_LIBRARY_RELEASE}")
-      set_property(TARGET JPEG::JPEG APPEND PROPERTY
-        IMPORTED_CONFIGURATIONS RELEASE)
-      set_target_properties(JPEG::JPEG PROPERTIES
-        IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
-        IMPORTED_LOCATION_RELEASE "${JPEG_LIBRARY_RELEASE}")
-    endif()
-    if(EXISTS "${JPEG_LIBRARY_DEBUG}")
-      set_property(TARGET JPEG::JPEG APPEND PROPERTY
-        IMPORTED_CONFIGURATIONS DEBUG)
-      set_target_properties(JPEG::JPEG PROPERTIES
-        IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
-        IMPORTED_LOCATION_DEBUG "${JPEG_LIBRARY_DEBUG}")
-    endif()
-  endif()
-endif()
-
-mark_as_advanced(JPEG_LIBRARY JPEG_INCLUDE_DIR)
diff --git a/share/cmake-3.18/Modules/FindJasper.cmake b/share/cmake-3.18/Modules/FindJasper.cmake
deleted file mode 100644
index 729a503..0000000
--- a/share/cmake-3.18/Modules/FindJasper.cmake
+++ /dev/null
@@ -1,47 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindJasper
-----------
-
-Try to find the Jasper JPEG2000 library
-
-Once done this will define
-
-::
-
-  JASPER_FOUND - system has Jasper
-  JASPER_INCLUDE_DIR - the Jasper include directory
-  JASPER_LIBRARIES - the libraries needed to use Jasper
-  JASPER_VERSION_STRING - the version of Jasper found (since CMake 2.8.8)
-#]=======================================================================]
-
-find_path(JASPER_INCLUDE_DIR jasper/jasper.h)
-
-if (NOT JASPER_LIBRARIES)
-    find_package(JPEG)
-
-    find_library(JASPER_LIBRARY_RELEASE NAMES jasper libjasper)
-    find_library(JASPER_LIBRARY_DEBUG NAMES jasperd)
-
-    include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
-    SELECT_LIBRARY_CONFIGURATIONS(JASPER)
-endif ()
-
-if (JASPER_INCLUDE_DIR AND EXISTS "${JASPER_INCLUDE_DIR}/jasper/jas_config.h")
-    file(STRINGS "${JASPER_INCLUDE_DIR}/jasper/jas_config.h" jasper_version_str REGEX "^#define[\t ]+JAS_VERSION[\t ]+\".*\".*")
-
-    string(REGEX REPLACE "^#define[\t ]+JAS_VERSION[\t ]+\"([^\"]+)\".*" "\\1" JASPER_VERSION_STRING "${jasper_version_str}")
-endif ()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(Jasper
-                                  REQUIRED_VARS JASPER_LIBRARIES JASPER_INCLUDE_DIR JPEG_LIBRARIES
-                                  VERSION_VAR JASPER_VERSION_STRING)
-
-if (JASPER_FOUND)
-  set(JASPER_LIBRARIES ${JASPER_LIBRARIES} ${JPEG_LIBRARIES} )
-endif ()
-
-mark_as_advanced(JASPER_INCLUDE_DIR)
diff --git a/share/cmake-3.18/Modules/FindJava.cmake b/share/cmake-3.18/Modules/FindJava.cmake
deleted file mode 100644
index 9db740b..0000000
--- a/share/cmake-3.18/Modules/FindJava.cmake
+++ /dev/null
@@ -1,359 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindJava
---------
-
-Find Java
-
-This module finds if Java is installed and determines where the
-include files and libraries are.  The caller may set variable ``JAVA_HOME``
-to specify a Java installation prefix explicitly.
-
-See also the :module:`FindJNI` module to find Java Native Interface (JNI).
-
-Specify one or more of the following components as you call this find module. See example below.
-
-::
-
-  Runtime     = Java Runtime Environment used to execute Java byte-compiled applications
-  Development = Development tools (java, javac, javah, jar and javadoc), includes Runtime component
-  IdlJ        = Interface Description Language (IDL) to Java compiler
-  JarSigner   = Signer and verifier tool for Java Archive (JAR) files
-
-
-This module sets the following result variables:
-
-::
-
-  Java_JAVA_EXECUTABLE      = the full path to the Java runtime
-  Java_JAVAC_EXECUTABLE     = the full path to the Java compiler
-  Java_JAVAH_EXECUTABLE     = the full path to the Java header generator
-  Java_JAVADOC_EXECUTABLE   = the full path to the Java documentation generator
-  Java_IDLJ_EXECUTABLE      = the full path to the Java idl compiler
-  Java_JAR_EXECUTABLE       = the full path to the Java archiver
-  Java_JARSIGNER_EXECUTABLE = the full path to the Java jar signer
-  Java_VERSION_STRING       = Version of java found, eg. 1.6.0_12
-  Java_VERSION_MAJOR        = The major version of the package found.
-  Java_VERSION_MINOR        = The minor version of the package found.
-  Java_VERSION_PATCH        = The patch version of the package found.
-  Java_VERSION_TWEAK        = The tweak version of the package found (after '_')
-  Java_VERSION              = This is set to: $major[.$minor[.$patch[.$tweak]]]
-
-
-
-The minimum required version of Java can be specified using the
-:command:`find_package` syntax, e.g.
-
-.. code-block:: cmake
-
-  find_package(Java 1.8)
-
-NOTE: ``${Java_VERSION}`` and ``${Java_VERSION_STRING}`` are not guaranteed to
-be identical.  For example some java version may return:
-``Java_VERSION_STRING = 1.8.0_17`` and ``Java_VERSION = 1.8.0.17``
-
-another example is the Java OEM, with: ``Java_VERSION_STRING = 1.8.0-oem``
-and ``Java_VERSION = 1.8.0``
-
-For these components the following variables are set:
-
-::
-
-  Java_FOUND                    - TRUE if all components are found.
-  Java_<component>_FOUND        - TRUE if <component> is found.
-
-
-
-Example Usages:
-
-::
-
-  find_package(Java)
-  find_package(Java 1.8 REQUIRED)
-  find_package(Java COMPONENTS Runtime)
-  find_package(Java COMPONENTS Development)
-#]=======================================================================]
-
-include(${CMAKE_CURRENT_LIST_DIR}/CMakeFindJavaCommon.cmake)
-
-# The HINTS option should only be used for values computed from the system.
-set(_JAVA_HINTS)
-if(_JAVA_HOME)
-  list(APPEND _JAVA_HINTS ${_JAVA_HOME}/bin)
-endif()
-if (WIN32)
-  macro (_JAVA_GET_INSTALLED_VERSIONS _KIND)
-    execute_process(COMMAND REG QUERY HKLM\\SOFTWARE\\JavaSoft\\${_KIND}
-      RESULT_VARIABLE _JAVA_RESULT
-      OUTPUT_VARIABLE _JAVA_VERSIONS
-      ERROR_QUIET)
-    if (NOT  _JAVA_RESULT)
-      string (REGEX MATCHALL "HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\JavaSoft\\\\${_KIND}\\\\[0-9.]+" _JAVA_VERSIONS "${_JAVA_VERSIONS}")
-      if (_JAVA_VERSIONS)
-        # sort versions. Most recent first
-        ## handle version 9 apart from other versions to get correct ordering
-        set (_JAVA_V9 ${_JAVA_VERSIONS})
-        list (FILTER _JAVA_VERSIONS EXCLUDE REGEX "${_KIND}\\\\9")
-        list (SORT _JAVA_VERSIONS)
-        list (REVERSE _JAVA_VERSIONS)
-        list (FILTER _JAVA_V9 INCLUDE REGEX "${_KIND}\\\\9")
-        list (SORT _JAVA_V9)
-        list (REVERSE _JAVA_V9)
-        list (APPEND _JAVA_VERSIONS ${_JAVA_V9})
-        foreach (_JAVA_HINT IN LISTS _JAVA_VERSIONS)
-          list(APPEND _JAVA_HINTS "[${_JAVA_HINT};JavaHome]/bin")
-        endforeach()
-      endif()
-    endif()
-  endmacro()
-
-  # search for installed versions for version 9 and upper
-  _JAVA_GET_INSTALLED_VERSIONS("JDK")
-  _JAVA_GET_INSTALLED_VERSIONS("JRE")
-
-  list(APPEND _JAVA_HINTS
-  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.9;JavaHome]/bin"
-  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.8;JavaHome]/bin"
-  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.7;JavaHome]/bin"
-  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.6;JavaHome]/bin"
-  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.5;JavaHome]/bin"
-  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.4;JavaHome]/bin"
-  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.3;JavaHome]/bin"
-  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Runtime Environment\\1.9;JavaHome]/bin"
-  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Runtime Environment\\1.8;JavaHome]/bin"
-  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Runtime Environment\\1.7;JavaHome]/bin"
-  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Runtime Environment\\1.6;JavaHome]/bin"
-  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Runtime Environment\\1.5;JavaHome]/bin"
-  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Runtime Environment\\1.4;JavaHome]/bin"
-  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Runtime Environment\\1.3;JavaHome]/bin"
-  )
-endif()
-
-# Hard-coded guesses should still go in PATHS. This ensures that the user
-# environment can always override hard guesses.
-set(_JAVA_PATHS
-  /usr/lib/java/bin
-  /usr/share/java/bin
-  /usr/local/java/bin
-  /usr/local/java/share/bin
-  /usr/java/j2sdk1.4.2_04
-  /usr/lib/j2sdk1.4-sun/bin
-  /usr/java/j2sdk1.4.2_09/bin
-  /usr/lib/j2sdk1.5-sun/bin
-  /opt/sun-jdk-1.5.0.04/bin
-  /usr/local/jdk-1.7.0/bin
-  /usr/local/jdk-1.6.0/bin
-  )
-find_program(Java_JAVA_EXECUTABLE
-  NAMES java
-  HINTS ${_JAVA_HINTS}
-  PATHS ${_JAVA_PATHS}
-)
-
-if(Java_JAVA_EXECUTABLE)
-    execute_process(COMMAND "${Java_JAVA_EXECUTABLE}" -version
-      RESULT_VARIABLE res
-      OUTPUT_VARIABLE var
-      ERROR_VARIABLE var # sun-java output to stderr
-      OUTPUT_STRIP_TRAILING_WHITESPACE
-      ERROR_STRIP_TRAILING_WHITESPACE)
-    if( res )
-      if(var MATCHES "Unable to locate a Java Runtime to invoke|No Java runtime present, requesting install")
-        set(Java_JAVA_EXECUTABLE Java_JAVA_EXECUTABLE-NOTFOUND)
-      elseif(${Java_FIND_REQUIRED})
-        message( FATAL_ERROR "Error executing java -version" )
-      else()
-        message( STATUS "Warning, could not run java -version")
-      endif()
-    else()
-      # Extract version components (up to 4 levels) from "java -version" output.
-      set(_java_version_regex [[(([0-9]+)(\.([0-9]+)(\.([0-9]+)(_([0-9]+))?)?)?.*)]])
-      if(var MATCHES "java version \"${_java_version_regex}\"")
-        # Sun, GCJ, older OpenJDK
-        set(Java_VERSION_STRING "${CMAKE_MATCH_1}")
-        set(Java_VERSION_MAJOR "${CMAKE_MATCH_2}")
-        if (CMAKE_MATCH_4)
-        set(Java_VERSION_MINOR "${CMAKE_MATCH_4}")
-        else()
-          set(Java_VERSION_MINOR 0)
-        endif()
-        if (CMAKE_MATCH_6)
-        set(Java_VERSION_PATCH "${CMAKE_MATCH_6}")
-        else()
-          set(Java_VERSION_PATCH 0)
-        endif()
-        set(Java_VERSION_TWEAK "${CMAKE_MATCH_8}")
-      elseif(var MATCHES "openjdk version \"${_java_version_regex}\"")
-        # OpenJDK
-        set(Java_VERSION_STRING "${CMAKE_MATCH_1}")
-        set(Java_VERSION_MAJOR "${CMAKE_MATCH_2}")
-        if (CMAKE_MATCH_4)
-        set(Java_VERSION_MINOR "${CMAKE_MATCH_4}")
-        else()
-          set(Java_VERSION_MINOR 0)
-        endif()
-        if (CMAKE_MATCH_6)
-        set(Java_VERSION_PATCH "${CMAKE_MATCH_6}")
-        else()
-          set(Java_VERSION_PATCH 0)
-        endif()
-        set(Java_VERSION_TWEAK "${CMAKE_MATCH_8}")
-      elseif(var MATCHES "openjdk version \"([0-9]+)-[A-Za-z]+\"")
-        # OpenJDK 9 early access builds or locally built
-        set(Java_VERSION_STRING "1.${CMAKE_MATCH_1}.0")
-        set(Java_VERSION_MAJOR "1")
-        set(Java_VERSION_MINOR "${CMAKE_MATCH_1}")
-        set(Java_VERSION_PATCH "0")
-        set(Java_VERSION_TWEAK "")
-      elseif(var MATCHES "java full version \"kaffe-${_java_version_regex}\"")
-        # Kaffe style
-        set(Java_VERSION_STRING "${CMAKE_MATCH_1}")
-        set(Java_VERSION_MAJOR "${CMAKE_MATCH_2}")
-        set(Java_VERSION_MINOR "${CMAKE_MATCH_4}")
-        set(Java_VERSION_PATCH "${CMAKE_MATCH_6}")
-        set(Java_VERSION_TWEAK "${CMAKE_MATCH_8}")
-      else()
-        if(NOT Java_FIND_QUIETLY)
-          string(REPLACE "\n" "\n  " ver_msg "\n${var}")
-          message(WARNING "Java version not recognized:${ver_msg}\nPlease report.")
-        endif()
-        set(Java_VERSION_STRING "")
-        set(Java_VERSION_MAJOR "")
-        set(Java_VERSION_MINOR "")
-        set(Java_VERSION_PATCH "")
-        set(Java_VERSION_TWEAK "")
-      endif()
-      set(Java_VERSION "${Java_VERSION_MAJOR}")
-      if(NOT "x${Java_VERSION}" STREQUAL "x")
-        foreach(c MINOR PATCH TWEAK)
-          if(NOT "x${Java_VERSION_${c}}" STREQUAL "x")
-            string(APPEND Java_VERSION ".${Java_VERSION_${c}}")
-          else()
-            break()
-          endif()
-        endforeach()
-      endif()
-    endif()
-
-endif()
-
-
-find_program(Java_JAR_EXECUTABLE
-  NAMES jar
-  HINTS ${_JAVA_HINTS}
-  PATHS ${_JAVA_PATHS}
-)
-
-find_program(Java_JAVAC_EXECUTABLE
-  NAMES javac
-  HINTS ${_JAVA_HINTS}
-  PATHS ${_JAVA_PATHS}
-)
-
-find_program(Java_JAVAH_EXECUTABLE
-  NAMES javah
-  HINTS ${_JAVA_HINTS}
-  PATHS ${_JAVA_PATHS}
-)
-
-find_program(Java_JAVADOC_EXECUTABLE
-  NAMES javadoc
-  HINTS ${_JAVA_HINTS}
-  PATHS ${_JAVA_PATHS}
-)
-
-find_program(Java_IDLJ_EXECUTABLE
-  NAMES idlj
-  HINTS ${_JAVA_HINTS}
-  PATHS ${_JAVA_PATHS}
-)
-
-find_program(Java_JARSIGNER_EXECUTABLE
-  NAMES jarsigner
-  HINTS ${_JAVA_HINTS}
-  PATHS ${_JAVA_PATHS}
-)
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-if(Java_FIND_COMPONENTS)
-  set(_JAVA_REQUIRED_VARS)
-  foreach(component ${Java_FIND_COMPONENTS})
-    # User just want to execute some Java byte-compiled
-    If(component STREQUAL "Runtime")
-      list(APPEND _JAVA_REQUIRED_VARS Java_JAVA_EXECUTABLE)
-      if(Java_JAVA_EXECUTABLE)
-        set(Java_Runtime_FOUND TRUE)
-      endif()
-    elseif(component STREQUAL "Development")
-      list(APPEND _JAVA_REQUIRED_VARS Java_JAVA_EXECUTABLE Java_JAVAC_EXECUTABLE
-                                      Java_JAR_EXECUTABLE Java_JAVADOC_EXECUTABLE)
-      if(Java_VERSION VERSION_LESS "10")
-        list(APPEND _JAVA_REQUIRED_VARS Java_JAVAH_EXECUTABLE)
-        if(Java_JAVA_EXECUTABLE AND Java_JAVAC_EXECUTABLE
-            AND Java_JAVAH_EXECUTABLE AND Java_JAR_EXECUTABLE AND Java_JAVADOC_EXECUTABLE)
-          set(Java_Development_FOUND TRUE)
-        endif()
-      else()
-        if(Java_JAVA_EXECUTABLE AND Java_JAVAC_EXECUTABLE
-            AND Java_JAR_EXECUTABLE AND Java_JAVADOC_EXECUTABLE)
-          set(Java_Development_FOUND TRUE)
-        endif()
-      endif()
-    elseif(component STREQUAL "IdlJ")
-      list(APPEND _JAVA_REQUIRED_VARS Java_IDLJ_EXECUTABLE)
-      if(Java_IDLJ_EXECUTABLE)
-        set(Java_IdlJ_FOUND TRUE)
-      endif()
-    elseif(component STREQUAL "JarSigner")
-      list(APPEND _JAVA_REQUIRED_VARS Java_JARSIGNER_EXECUTABLE)
-      if(Java_JARSIGNER_EXECUTABLE)
-        set(Java_JarSigner_FOUND TRUE)
-      endif()
-    else()
-      message(FATAL_ERROR "Comp: ${component} is not handled")
-    endif()
-  endforeach()
-  list (REMOVE_DUPLICATES _JAVA_REQUIRED_VARS)
-  find_package_handle_standard_args(Java
-    REQUIRED_VARS ${_JAVA_REQUIRED_VARS} HANDLE_COMPONENTS
-    VERSION_VAR Java_VERSION
-    )
-  if(Java_FOUND)
-    foreach(component ${Java_FIND_COMPONENTS})
-      set(Java_${component}_FOUND TRUE)
-    endforeach()
-  endif()
-else()
-  # Check for Development
-  if(Java_VERSION VERSION_LESS "10")
-    find_package_handle_standard_args(Java
-      REQUIRED_VARS Java_JAVA_EXECUTABLE Java_JAR_EXECUTABLE Java_JAVAC_EXECUTABLE
-                    Java_JAVAH_EXECUTABLE Java_JAVADOC_EXECUTABLE
-      VERSION_VAR Java_VERSION_STRING
-      )
-  else()
-    find_package_handle_standard_args(Java
-      REQUIRED_VARS Java_JAVA_EXECUTABLE Java_JAR_EXECUTABLE Java_JAVAC_EXECUTABLE
-                    Java_JAVADOC_EXECUTABLE
-      VERSION_VAR Java_VERSION_STRING
-      )
-  endif()
-endif()
-
-
-mark_as_advanced(
-  Java_JAVA_EXECUTABLE
-  Java_JAR_EXECUTABLE
-  Java_JAVAC_EXECUTABLE
-  Java_JAVAH_EXECUTABLE
-  Java_JAVADOC_EXECUTABLE
-  Java_IDLJ_EXECUTABLE
-  Java_JARSIGNER_EXECUTABLE
-  )
-
-# LEGACY
-set(JAVA_RUNTIME ${Java_JAVA_EXECUTABLE})
-set(JAVA_ARCHIVE ${Java_JAR_EXECUTABLE})
-set(JAVA_COMPILE ${Java_JAVAC_EXECUTABLE})
diff --git a/share/cmake-3.18/Modules/FindLAPACK.cmake b/share/cmake-3.18/Modules/FindLAPACK.cmake
deleted file mode 100644
index 31e7de6..0000000
--- a/share/cmake-3.18/Modules/FindLAPACK.cmake
+++ /dev/null
@@ -1,555 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindLAPACK
-----------
-
-Find Linear Algebra PACKage (LAPACK) library
-
-This module finds an installed Fortran library that implements the
-LAPACK linear-algebra interface (see http://www.netlib.org/lapack/).
-
-The approach follows that taken for the ``autoconf`` macro file,
-``acx_lapack.m4`` (distributed at
-http://ac-archive.sourceforge.net/ac-archive/acx_lapack.html).
-
-Input Variables
-^^^^^^^^^^^^^^^
-
-The following variables may be set to influence this module's behavior:
-
-``BLA_STATIC``
-  if ``ON`` use static linkage
-
-``BLA_VENDOR``
-  If set, checks only the specified vendor, if not set checks all the
-  possibilities.  List of vendors valid in this module:
-
-  * ``OpenBLAS``
-  * ``FLAME``
-  * ``Intel10_32`` (intel mkl v10 32 bit)
-  * ``Intel10_64lp`` (intel mkl v10+ 64 bit, threaded code, lp64 model)
-  * ``Intel10_64lp_seq`` (intel mkl v10+ 64 bit, sequential code, lp64 model)
-  * ``Intel10_64ilp`` (intel mkl v10+ 64 bit, threaded code, ilp64 model)
-  * ``Intel10_64ilp_seq`` (intel mkl v10+ 64 bit, sequential code, ilp64 model)
-  * ``Intel10_64_dyn`` (intel mkl v10+ 64 bit, single dynamic library)
-  * ``Intel`` (obsolete versions of mkl 32 and 64 bit)
-  * ``ACML``
-  * ``Apple``
-  * ``NAS``
-  * ``Arm``
-  * ``Arm_mp``
-  * ``Arm_ilp64``
-  * ``Arm_ilp64_mp``
-  * ``Generic``
-
-``BLA_F95``
-  if ``ON`` tries to find the BLAS95/LAPACK95 interfaces
-
-Imported targets
-^^^^^^^^^^^^^^^^
-
-This module defines the following :prop_tgt:`IMPORTED` target:
-
-``LAPACK::LAPACK``
-  The libraries to use for LAPACK, if found.
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-This module defines the following variables:
-
-``LAPACK_FOUND``
-  library implementing the LAPACK interface is found
-``LAPACK_LINKER_FLAGS``
-  uncached list of required linker flags (excluding ``-l`` and ``-L``).
-``LAPACK_LIBRARIES``
-  uncached list of libraries (using full path name) to link against
-  to use LAPACK
-``LAPACK95_LIBRARIES``
-  uncached list of libraries (using full path name) to link against
-  to use LAPACK95
-``LAPACK95_FOUND``
-  library implementing the LAPACK95 interface is found
-
-.. note::
-
-  C, CXX or Fortran must be enabled to detect a BLAS/LAPACK library.
-  C or CXX must be enabled to use Intel Math Kernel Library (MKL).
-
-  For example, to use Intel MKL libraries and/or Intel compiler:
-
-  .. code-block:: cmake
-
-    set(BLA_VENDOR Intel10_64lp)
-    find_package(LAPACK)
-#]=======================================================================]
-
-# Check the language being used
-if(NOT (CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED OR CMAKE_Fortran_COMPILER_LOADED))
-  if(LAPACK_FIND_REQUIRED)
-    message(FATAL_ERROR "FindLAPACK requires Fortran, C, or C++ to be enabled.")
-  else()
-    message(STATUS "Looking for LAPACK... - NOT found (Unsupported languages)")
-    return()
-  endif()
-endif()
-
-if(CMAKE_Fortran_COMPILER_LOADED)
-  include(${CMAKE_CURRENT_LIST_DIR}/CheckFortranFunctionExists.cmake)
-else()
-  include(${CMAKE_CURRENT_LIST_DIR}/CheckFunctionExists.cmake)
-endif()
-include(${CMAKE_CURRENT_LIST_DIR}/CMakePushCheckState.cmake)
-
-cmake_push_check_state()
-set(CMAKE_REQUIRED_QUIET ${LAPACK_FIND_QUIETLY})
-
-set(LAPACK_FOUND FALSE)
-set(LAPACK95_FOUND FALSE)
-
-set(_lapack_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
-if(BLA_STATIC)
-  if(WIN32)
-    set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES})
-  else()
-    set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
-  endif()
-else()
-  if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
-    # for ubuntu's libblas3gf and liblapack3gf packages
-    set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES} .so.3gf)
-  endif()
-endif()
-
-# TODO: move this stuff to a separate module
-
-macro(CHECK_LAPACK_LIBRARIES LIBRARIES _prefix _name _flags _list _threadlibs _addlibdir _subdirs _blas)
-  # This macro checks for the existence of the combination of fortran libraries
-  # given by _list.  If the combination is found, this macro checks (using the
-  # Check_Fortran_Function_Exists macro) whether can link against that library
-  # combination using the name of a routine given by _name using the linker
-  # flags given by _flags.  If the combination of libraries is found and passes
-  # the link test, LIBRARIES is set to the list of complete library paths that
-  # have been found.  Otherwise, LIBRARIES is set to FALSE.
-
-  # N.B. _prefix is the prefix applied to the names of all cached variables that
-  # are generated internally and marked advanced by this macro.
-  # _addlibdir is a list of additional search paths. _subdirs is a list of path
-  # suffixes to be used by find_library().
-
-  set(_libraries_work TRUE)
-  set(${LIBRARIES})
-  set(_combined_name)
-
-  set(_extaddlibdir "${_addlibdir}")
-  if(WIN32)
-    list(APPEND _extaddlibdir ENV LIB)
-  elseif(APPLE)
-    list(APPEND _extaddlibdir ENV DYLD_LIBRARY_PATH)
-  else()
-    list(APPEND _extaddlibdir ENV LD_LIBRARY_PATH)
-  endif()
-  list(APPEND _extaddlibdir "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
-
-  foreach(_library ${_list})
-    if(_library MATCHES "^-Wl,--(start|end)-group$")
-      # Respect linker flags like --start/end-group (required by MKL)
-      set(${LIBRARIES} ${${LIBRARIES}} "${_library}")
-    else()
-      set(_combined_name ${_combined_name}_${_library})
-      if(_libraries_work)
-        find_library(${_prefix}_${_library}_LIBRARY
-          NAMES ${_library}
-          PATHS ${_extaddlibdir}
-          PATH_SUFFIXES ${_subdirs}
-        )
-        #message("DEBUG: find_library(${_library}) got ${${_prefix}_${_library}_LIBRARY}")
-        mark_as_advanced(${_prefix}_${_library}_LIBRARY)
-        set(${LIBRARIES} ${${LIBRARIES}} ${${_prefix}_${_library}_LIBRARY})
-        set(_libraries_work ${${_prefix}_${_library}_LIBRARY})
-      endif()
-    endif()
-  endforeach()
-
-  if(_libraries_work)
-    # Test this combination of libraries.
-    set(CMAKE_REQUIRED_LIBRARIES ${_flags} ${${LIBRARIES}} ${_blas} ${_threadlibs})
-    #message("DEBUG: CMAKE_REQUIRED_LIBRARIES = ${CMAKE_REQUIRED_LIBRARIES}")
-    if(CMAKE_Fortran_COMPILER_LOADED)
-      check_fortran_function_exists("${_name}" ${_prefix}${_combined_name}_WORKS)
-    else()
-      check_function_exists("${_name}_" ${_prefix}${_combined_name}_WORKS)
-    endif()
-    set(CMAKE_REQUIRED_LIBRARIES)
-    set(_libraries_work ${${_prefix}${_combined_name}_WORKS})
-  endif()
-
-  if(_libraries_work)
-    if("${_list}${_blas}" STREQUAL "")
-      set(${LIBRARIES} "${LIBRARIES}-PLACEHOLDER-FOR-EMPTY-LIBRARIES")
-    else()
-      set(${LIBRARIES} ${${LIBRARIES}} ${_blas} ${_threadlibs})
-    endif()
-  else()
-    set(${LIBRARIES} FALSE)
-  endif()
-  #message("DEBUG: ${LIBRARIES} = ${${LIBRARIES}}")
-endmacro()
-
-set(LAPACK_LINKER_FLAGS)
-set(LAPACK_LIBRARIES)
-set(LAPACK95_LIBRARIES)
-
-if(LAPACK_FIND_QUIETLY OR NOT LAPACK_FIND_REQUIRED)
-  find_package(BLAS)
-else()
-  find_package(BLAS REQUIRED)
-endif()
-
-if(BLAS_FOUND)
-  set(LAPACK_LINKER_FLAGS ${BLAS_LINKER_FLAGS})
-  if(NOT $ENV{BLA_VENDOR} STREQUAL "")
-    set(BLA_VENDOR $ENV{BLA_VENDOR})
-  else()
-    if(NOT BLA_VENDOR)
-      set(BLA_VENDOR "All")
-    endif()
-  endif()
-
-  # LAPACK in the Intel MKL 10+ library?
-  if(BLA_VENDOR MATCHES "Intel" OR BLA_VENDOR STREQUAL "All")
-    if(NOT LAPACK_LIBRARIES)
-      if(CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED)
-        # System-specific settings
-        if(NOT WIN32)
-          set(LAPACK_mkl_LM "-lm")
-          set(LAPACK_mkl_LDL "-ldl")
-        endif()
-
-        if(LAPACK_FIND_QUIETLY OR NOT LAPACK_FIND_REQUIRED)
-          find_package(Threads)
-        else()
-          find_package(Threads REQUIRED)
-        endif()
-
-        if(BLA_VENDOR MATCHES "_64ilp")
-          set(LAPACK_mkl_ILP_MODE "ilp64")
-        else()
-          set(LAPACK_mkl_ILP_MODE "lp64")
-        endif()
-
-        set(LAPACK_SEARCH_LIBS "")
-
-        if(BLA_F95)
-          set(LAPACK_mkl_SEARCH_SYMBOL "cheev_f95")
-          set(_LIBRARIES LAPACK95_LIBRARIES)
-          set(_BLAS_LIBRARIES ${BLAS95_LIBRARIES})
-
-          # old
-          list(APPEND LAPACK_SEARCH_LIBS
-            "mkl_lapack95")
-          # new >= 10.3
-          list(APPEND LAPACK_SEARCH_LIBS
-            "mkl_intel_c")
-          list(APPEND LAPACK_SEARCH_LIBS
-            "mkl_lapack95_${LAPACK_mkl_ILP_MODE}")
-        else()
-          set(LAPACK_mkl_SEARCH_SYMBOL "cheev")
-          set(_LIBRARIES LAPACK_LIBRARIES)
-          set(_BLAS_LIBRARIES ${BLAS_LIBRARIES})
-
-          # old and new >= 10.3
-          list(APPEND LAPACK_SEARCH_LIBS
-            "mkl_lapack")
-        endif()
-
-        # MKL uses a multitude of partially platform-specific subdirectories:
-        if(BLA_VENDOR STREQUAL "Intel10_32")
-          set(LAPACK_mkl_ARCH_NAME "ia32")
-        else()
-          set(LAPACK_mkl_ARCH_NAME "intel64")
-        endif()
-        if(WIN32)
-          set(LAPACK_mkl_OS_NAME "win")
-        elseif(APPLE)
-          set(LAPACK_mkl_OS_NAME "mac")
-        else()
-          set(LAPACK_mkl_OS_NAME "lin")
-        endif()
-        if(DEFINED ENV{MKLROOT})
-          file(TO_CMAKE_PATH "$ENV{MKLROOT}" LAPACK_mkl_MKLROOT)
-          # If MKLROOT points to the subdirectory 'mkl', use the parent directory instead
-          # so we can better detect other relevant libraries in 'compiler' or 'tbb':
-          get_filename_component(LAPACK_mkl_MKLROOT_LAST_DIR "${LAPACK_mkl_MKLROOT}" NAME)
-          if(LAPACK_mkl_MKLROOT_LAST_DIR STREQUAL "mkl")
-              get_filename_component(LAPACK_mkl_MKLROOT "${LAPACK_mkl_MKLROOT}" DIRECTORY)
-          endif()
-        endif()
-        set(LAPACK_mkl_LIB_PATH_SUFFIXES
-            "compiler/lib" "compiler/lib/${LAPACK_mkl_ARCH_NAME}_${LAPACK_mkl_OS_NAME}"
-            "mkl/lib" "mkl/lib/${LAPACK_mkl_ARCH_NAME}_${LAPACK_mkl_OS_NAME}"
-            "lib/${LAPACK_mkl_ARCH_NAME}_${LAPACK_mkl_OS_NAME}")
-
-        # First try empty lapack libs
-        if(NOT ${_LIBRARIES})
-          check_lapack_libraries(
-            ${_LIBRARIES}
-            LAPACK
-            ${LAPACK_mkl_SEARCH_SYMBOL}
-            ""
-            ""
-            "${CMAKE_THREAD_LIBS_INIT};${LAPACK_mkl_LM};${LAPACK_mkl_LDL}"
-            "${LAPACK_mkl_MKLROOT}"
-            "${LAPACK_mkl_LIB_PATH_SUFFIXES}"
-            "${_BLAS_LIBRARIES}"
-          )
-        endif()
-
-        # Then try the search libs
-        foreach(IT ${LAPACK_SEARCH_LIBS})
-          string(REPLACE " " ";" SEARCH_LIBS ${IT})
-          if(NOT ${_LIBRARIES})
-            check_lapack_libraries(
-              ${_LIBRARIES}
-              LAPACK
-              ${LAPACK_mkl_SEARCH_SYMBOL}
-              ""
-              "${SEARCH_LIBS}"
-              "${CMAKE_THREAD_LIBS_INIT};${LAPACK_mkl_LM};${LAPACK_mkl_LDL}"
-              "${LAPACK_mkl_MKLROOT}"
-              "${LAPACK_mkl_LIB_PATH_SUFFIXES}"
-              "${_BLAS_LIBRARIES}"
-            )
-          endif()
-        endforeach()
-
-        unset(LAPACK_mkl_ILP_MODE)
-        unset(LAPACK_mkl_SEARCH_SYMBOL)
-        unset(LAPACK_mkl_LM)
-        unset(LAPACK_mkl_LDL)
-        unset(LAPACK_mkl_MKLROOT)
-        unset(LAPACK_mkl_ARCH_NAME)
-        unset(LAPACK_mkl_OS_NAME)
-        unset(LAPACK_mkl_LIB_PATH_SUFFIXES)
-      endif()
-    endif()
-  endif()
-
-  # gotoblas? (http://www.tacc.utexas.edu/tacc-projects/gotoblas2)
-  if(BLA_VENDOR STREQUAL "Goto" OR BLA_VENDOR STREQUAL "All")
-    if(NOT LAPACK_LIBRARIES)
-      check_lapack_libraries(
-        LAPACK_LIBRARIES
-        LAPACK
-        cheev
-        ""
-        "goto2"
-        ""
-        ""
-        ""
-        "${BLAS_LIBRARIES}"
-      )
-    endif()
-  endif()
-
-  # OpenBLAS? (http://www.openblas.net)
-  if(BLA_VENDOR STREQUAL "OpenBLAS" OR BLA_VENDOR STREQUAL "All")
-    if(NOT LAPACK_LIBRARIES)
-      check_lapack_libraries(
-        LAPACK_LIBRARIES
-        LAPACK
-        cheev
-        ""
-        "openblas"
-        ""
-        ""
-        ""
-        "${BLAS_LIBRARIES}"
-      )
-    endif()
-  endif()
-
-  # ArmPL? (https://developer.arm.com/tools-and-software/server-and-hpc/compile/arm-compiler-for-linux/arm-performance-libraries)
-  if(BLA_VENDOR MATCHES "Arm" OR BLA_VENDOR STREQUAL "All")
-
-    # Check for 64bit Integer support
-    if(BLA_VENDOR MATCHES "_ilp64")
-      set(LAPACK_armpl_LIB "armpl_ilp64")
-    else()
-      set(LAPACK_armpl_LIB "armpl_lp64")
-    endif()
-
-    # Check for OpenMP support, VIA BLA_VENDOR of Arm_mp or Arm_ipl64_mp
-    if(BLA_VENDOR MATCHES "_mp")
-     set(LAPACK_armpl_LIB "${LAPACK_armpl_LIB}_mp")
-    endif()
-
-    if(NOT LAPACK_LIBRARIES)
-      check_lapack_libraries(
-        LAPACK_LIBRARIES
-        LAPACK
-        cheev
-        ""
-        "${LAPACK_armpl_LIB}"
-        ""
-        ""
-        ""
-        "${BLAS_LIBRARIES}"
-      )
-    endif()
-  endif()
-
-  # FLAME's blis library? (https://github.com/flame/blis)
-  if(BLA_VENDOR STREQUAL "FLAME" OR BLA_VENDOR STREQUAL "All")
-    if(NOT LAPACK_LIBRARIES)
-      check_lapack_libraries(
-        LAPACK_LIBRARIES
-        LAPACK
-        cheev
-        ""
-        "flame"
-        ""
-        ""
-        ""
-        "${BLAS_LIBRARIES}"
-      )
-    endif()
-  endif()
-
-  # BLAS in acml library?
-  if(BLA_VENDOR MATCHES "ACML" OR BLA_VENDOR STREQUAL "All")
-    if(BLAS_LIBRARIES MATCHES ".+acml.+")
-      set(LAPACK_LIBRARIES ${BLAS_LIBRARIES})
-    endif()
-  endif()
-
-  # Apple LAPACK library?
-  if(BLA_VENDOR STREQUAL "Apple" OR BLA_VENDOR STREQUAL "All")
-    if(NOT LAPACK_LIBRARIES)
-      check_lapack_libraries(
-        LAPACK_LIBRARIES
-        LAPACK
-        cheev
-        ""
-        "Accelerate"
-        ""
-        ""
-        ""
-        "${BLAS_LIBRARIES}"
-      )
-    endif()
-  endif()
-
-  # Apple NAS (vecLib) library?
-  if(BLA_VENDOR STREQUAL "NAS" OR BLA_VENDOR STREQUAL "All")
-    if(NOT LAPACK_LIBRARIES)
-      check_lapack_libraries(
-        LAPACK_LIBRARIES
-        LAPACK
-        cheev
-        ""
-        "vecLib"
-        ""
-        ""
-        ""
-        "${BLAS_LIBRARIES}"
-      )
-    endif()
-  endif()
-
-  # Generic LAPACK library?
-  if(BLA_VENDOR STREQUAL "Generic" OR
-      BLA_VENDOR STREQUAL "ATLAS" OR
-      BLA_VENDOR STREQUAL "All")
-    if(NOT LAPACK_LIBRARIES)
-      check_lapack_libraries(
-        LAPACK_LIBRARIES
-        LAPACK
-        cheev
-        ""
-        "lapack"
-        ""
-        ""
-        ""
-        "${BLAS_LIBRARIES}"
-      )
-    endif()
-  endif()
-else()
-  message(STATUS "LAPACK requires BLAS")
-endif()
-
-if(BLA_F95)
-  if(LAPACK95_LIBRARIES)
-    set(LAPACK95_FOUND TRUE)
-  else()
-    set(LAPACK95_FOUND FALSE)
-  endif()
-  if(NOT LAPACK_FIND_QUIETLY)
-    if(LAPACK95_FOUND)
-      message(STATUS "A library with LAPACK95 API found.")
-    else()
-      if(LAPACK_FIND_REQUIRED)
-        message(FATAL_ERROR
-          "A required library with LAPACK95 API not found. Please specify library location."
-        )
-      else()
-        message(STATUS
-          "A library with LAPACK95 API not found. Please specify library location."
-        )
-      endif()
-    endif()
-  endif()
-  set(LAPACK_FOUND "${LAPACK95_FOUND}")
-  set(LAPACK_LIBRARIES "${LAPACK95_LIBRARIES}")
-else()
-  if(LAPACK_LIBRARIES)
-    set(LAPACK_FOUND TRUE)
-  else()
-    set(LAPACK_FOUND FALSE)
-  endif()
-
-  if(NOT LAPACK_FIND_QUIETLY)
-    if(LAPACK_FOUND)
-      message(STATUS "A library with LAPACK API found.")
-    else()
-      if(LAPACK_FIND_REQUIRED)
-        message(FATAL_ERROR
-          "A required library with LAPACK API not found. Please specify library location."
-        )
-      else()
-        message(STATUS
-          "A library with LAPACK API not found. Please specify library location."
-        )
-      endif()
-    endif()
-  endif()
-endif()
-
-# On compilers that implicitly link LAPACK (such as ftn, cc, and CC on Cray HPC machines)
-# we used a placeholder for empty LAPACK_LIBRARIES to get through our logic above.
-if(LAPACK_LIBRARIES STREQUAL "LAPACK_LIBRARIES-PLACEHOLDER-FOR-EMPTY-LIBRARIES")
-  set(LAPACK_LIBRARIES "")
-endif()
-
-if(NOT TARGET LAPACK::LAPACK)
-  add_library(LAPACK::LAPACK INTERFACE IMPORTED)
-  set(_lapack_libs "${LAPACK_LIBRARIES}")
-  if(_lapack_libs AND TARGET BLAS::BLAS)
-    # remove the ${BLAS_LIBRARIES} from the interface and replace it
-    # with the BLAS::BLAS target
-    list(REMOVE_ITEM _lapack_libs "${BLAS_LIBRARIES}")
-  endif()
-
-  if(_lapack_libs)
-    set_target_properties(LAPACK::LAPACK PROPERTIES
-      INTERFACE_LINK_LIBRARIES "${_lapack_libs}"
-    )
-  endif()
-  unset(_lapack_libs)
-endif()
-
-cmake_pop_check_state()
-set(CMAKE_FIND_LIBRARY_SUFFIXES ${_lapack_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
diff --git a/share/cmake-3.18/Modules/FindLATEX.cmake b/share/cmake-3.18/Modules/FindLATEX.cmake
deleted file mode 100644
index b0dad7d..0000000
--- a/share/cmake-3.18/Modules/FindLATEX.cmake
+++ /dev/null
@@ -1,279 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindLATEX
----------
-
-Find LaTeX
-
-This module finds an installed LaTeX and determines the location
-of the compiler.  Additionally the module looks for Latex-related
-software like BibTeX.
-
-This module sets the following result variables::
-
-  LATEX_FOUND:          whether found Latex and requested components
-  LATEX_<component>_FOUND:  whether found <component>
-  LATEX_COMPILER:       path to the LaTeX compiler
-  PDFLATEX_COMPILER:    path to the PdfLaTeX compiler
-  XELATEX_COMPILER:     path to the XeLaTeX compiler
-  LUALATEX_COMPILER:    path to the LuaLaTeX compiler
-  BIBTEX_COMPILER:      path to the BibTeX compiler
-  BIBER_COMPILER:       path to the Biber compiler
-  MAKEINDEX_COMPILER:   path to the MakeIndex compiler
-  XINDY_COMPILER:       path to the xindy compiler
-  DVIPS_CONVERTER:      path to the DVIPS converter
-  DVIPDF_CONVERTER:     path to the DVIPDF converter
-  PS2PDF_CONVERTER:     path to the PS2PDF converter
-  PDFTOPS_CONVERTER:    path to the pdftops converter
-  LATEX2HTML_CONVERTER: path to the LaTeX2Html converter
-  HTLATEX_COMPILER:     path to the htlatex compiler
-
-Possible components are::
-
-  PDFLATEX
-  XELATEX
-  LUALATEX
-  BIBTEX
-  BIBER
-  MAKEINDEX
-  XINDY
-  DVIPS
-  DVIPDF
-  PS2PDF
-  PDFTOPS
-  LATEX2HTML
-  HTLATEX
-
-Example Usages::
-
-  find_package(LATEX)
-  find_package(LATEX COMPONENTS PDFLATEX)
-  find_package(LATEX COMPONENTS BIBTEX PS2PDF)
-#]=======================================================================]
-
-if (WIN32)
-  # Try to find the MikTex binary path (look for its package manager).
-  find_path(MIKTEX_BINARY_PATH mpm.exe
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MiK\\MiKTeX\\CurrentVersion\\MiKTeX;Install Root]/miktex/bin"
-    DOC
-    "Path to the MikTex binary directory."
-  )
-  mark_as_advanced(MIKTEX_BINARY_PATH)
-
-  # Try to find the GhostScript binary path (look for gswin32).
-  get_filename_component(GHOSTSCRIPT_BINARY_PATH_FROM_REGISTERY_8_00
-     "[HKEY_LOCAL_MACHINE\\SOFTWARE\\AFPL Ghostscript\\8.00;GS_DLL]" PATH
-  )
-
-  get_filename_component(GHOSTSCRIPT_BINARY_PATH_FROM_REGISTERY_7_04
-     "[HKEY_LOCAL_MACHINE\\SOFTWARE\\AFPL Ghostscript\\7.04;GS_DLL]" PATH
-  )
-
-  find_path(GHOSTSCRIPT_BINARY_PATH gswin32.exe
-    ${GHOSTSCRIPT_BINARY_PATH_FROM_REGISTERY_8_00}
-    ${GHOSTSCRIPT_BINARY_PATH_FROM_REGISTERY_7_04}
-    DOC "Path to the GhostScript binary directory."
-  )
-  mark_as_advanced(GHOSTSCRIPT_BINARY_PATH)
-
-  find_path(GHOSTSCRIPT_LIBRARY_PATH ps2pdf13.bat
-    "${GHOSTSCRIPT_BINARY_PATH}/../lib"
-    DOC "Path to the GhostScript library directory."
-  )
-  mark_as_advanced(GHOSTSCRIPT_LIBRARY_PATH)
-endif ()
-
-# try to find Latex and the related programs
-find_program(LATEX_COMPILER
-  NAMES latex
-  PATHS ${MIKTEX_BINARY_PATH}
-        /usr/bin
-)
-
-# find pdflatex
-find_program(PDFLATEX_COMPILER
-  NAMES pdflatex
-  PATHS ${MIKTEX_BINARY_PATH}
-        /usr/bin
-)
-if (PDFLATEX_COMPILER)
-  set(LATEX_PDFLATEX_FOUND TRUE)
-else()
-  set(LATEX_PDFLATEX_FOUND FALSE)
-endif()
-
-# find xelatex
-find_program(XELATEX_COMPILER
-  NAMES xelatex
-  PATHS ${MIKTEX_BINARY_PATH}
-        /usr/bin
-)
-if (XELATEX_COMPILER)
-  set(LATEX_XELATEX_FOUND TRUE)
-else()
-  set(LATEX_XELATEX_FOUND FALSE)
-endif()
-
-# find lualatex
-find_program(LUALATEX_COMPILER
-  NAMES lualatex
-  PATHS ${MIKTEX_BINARY_PATH}
-        /usr/bin
-)
-if (LUALATEX_COMPILER)
-  set(LATEX_LUALATEX_FOUND TRUE)
-else()
-  set(LATEX_LUALATEX_FOUND FALSE)
-endif()
-
-# find bibtex
-find_program(BIBTEX_COMPILER
-  NAMES bibtex
-  PATHS ${MIKTEX_BINARY_PATH}
-        /usr/bin
-)
-if (BIBTEX_COMPILER)
-  set(LATEX_BIBTEX_FOUND TRUE)
-else()
-  set(LATEX_BIBTEX_FOUND FALSE)
-endif()
-
-# find biber
-find_program(BIBER_COMPILER
-  NAMES biber
-  PATHS ${MIKTEX_BINARY_PATH}
-        /usr/bin
-)
-if (BIBER_COMPILER)
-  set(LATEX_BIBER_FOUND TRUE)
-else()
-  set(LATEX_BIBER_FOUND FALSE)
-endif()
-
-# find makeindex
-find_program(MAKEINDEX_COMPILER
-  NAMES makeindex
-  PATHS ${MIKTEX_BINARY_PATH}
-        /usr/bin
-)
-if (MAKEINDEX_COMPILER)
-  set(LATEX_MAKEINDEX_FOUND TRUE)
-else()
-  set(LATEX_MAKEINDEX_FOUND FALSE)
-endif()
-
-# find xindy
-find_program(XINDY_COMPILER
-  NAMES xindy
-  PATHS ${MIKTEX_BINARY_PATH}
-        /usr/bin
-)
-if (XINDY_COMPILER)
-  set(LATEX_XINDY_FOUND TRUE)
-else()
-  set(LATEX_XINDY_FOUND FALSE)
-endif()
-
-# find dvips
-find_program(DVIPS_CONVERTER
-  NAMES dvips
-  PATHS ${MIKTEX_BINARY_PATH}
-        /usr/bin
-)
-if (DVIPS_CONVERTER)
-  set(LATEX_DVIPS_FOUND TRUE)
-else()
-  set(LATEX_DVIPS_FOUND FALSE)
-endif()
-
-# find dvipdf
-find_program(DVIPDF_CONVERTER
-  NAMES dvipdfm dvipdft dvipdf
-  PATHS ${MIKTEX_BINARY_PATH}
-        /usr/bin
-)
-if (DVIPDF_CONVERTER)
-  set(LATEX_DVIPDF_FOUND TRUE)
-else()
-  set(LATEX_DVIPDF_FOUND FALSE)
-endif()
-
-# find ps2pdf
-if (WIN32)
-  find_program(PS2PDF_CONVERTER
-    NAMES ps2pdf14.bat ps2pdf14 ps2pdf
-    PATHS ${GHOSTSCRIPT_LIBRARY_PATH}
-          ${MIKTEX_BINARY_PATH}
-  )
-else ()
-  find_program(PS2PDF_CONVERTER
-    NAMES ps2pdf14 ps2pdf
-  )
-endif ()
-if (PS2PDF_CONVERTER)
-  set(LATEX_PS2PDF_FOUND TRUE)
-else()
-  set(LATEX_PS2PDF_FOUND FALSE)
-endif()
-
-# find pdftops
-find_program(PDFTOPS_CONVERTER
-  NAMES pdftops
-  PATHS ${MIKTEX_BINARY_PATH}
-        /usr/bin
-)
-if (PDFTOPS_CONVERTER)
-  set(LATEX_PDFTOPS_FOUND TRUE)
-else()
-  set(LATEX_PDFTOPS_FOUND FALSE)
-endif()
-
-# find latex2html
-find_program(LATEX2HTML_CONVERTER
-  NAMES latex2html
-  PATHS ${MIKTEX_BINARY_PATH}
-        /usr/bin
-)
-if (LATEX2HTML_CONVERTER)
-  set(LATEX_LATEX2HTML_FOUND TRUE)
-else()
-  set(LATEX_LATEX2HTML_FOUND FALSE)
-endif()
-
-# find htlatex
-find_program(HTLATEX_COMPILER
-  NAMES htlatex
-  PATHS ${MIKTEX_BINARY_PATH}
-        /usr/bin
-)
-if (HTLATEX_COMPILER)
-  set(LATEX_HTLATEX_FOUND TRUE)
-else()
-  set(LATEX_HTLATEX_FOUND FALSE)
-endif()
-
-
-mark_as_advanced(
-  LATEX_COMPILER
-  PDFLATEX_COMPILER
-  XELATEX_COMPILER
-  LUALATEX_COMPILER
-  BIBTEX_COMPILER
-  BIBER_COMPILER
-  MAKEINDEX_COMPILER
-  XINDY_COMPILER
-  DVIPS_CONVERTER
-  DVIPDF_CONVERTER
-  PS2PDF_CONVERTER
-  PDFTOPS_CONVERTER
-  LATEX2HTML_CONVERTER
-  HTLATEX_COMPILER
-)
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-find_package_handle_standard_args(LATEX
-  REQUIRED_VARS LATEX_COMPILER
-  HANDLE_COMPONENTS
-)
diff --git a/share/cmake-3.18/Modules/FindLTTngUST.cmake b/share/cmake-3.18/Modules/FindLTTngUST.cmake
deleted file mode 100644
index 9cd17eb..0000000
--- a/share/cmake-3.18/Modules/FindLTTngUST.cmake
+++ /dev/null
@@ -1,100 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindLTTngUST
-------------
-
-Find
-`Linux Trace Toolkit Next Generation (LTTng-UST) <http://lttng.org/>`__ library.
-
-Imported target
-^^^^^^^^^^^^^^^
-
-This module defines the following :prop_tgt:`IMPORTED` target:
-
-``LTTng::UST``
-  The LTTng-UST library, if found
-
-Result variables
-^^^^^^^^^^^^^^^^
-
-This module sets the following
-
-``LTTNGUST_FOUND``
-  ``TRUE`` if system has LTTng-UST
-``LTTNGUST_INCLUDE_DIRS``
-  The LTTng-UST include directories
-``LTTNGUST_LIBRARIES``
-  The libraries needed to use LTTng-UST
-``LTTNGUST_VERSION_STRING``
-  The LTTng-UST version
-``LTTNGUST_HAS_TRACEF``
-  ``TRUE`` if the ``tracef()`` API is available in the system's LTTng-UST
-``LTTNGUST_HAS_TRACELOG``
-  ``TRUE`` if the ``tracelog()`` API is available in the system's LTTng-UST
-#]=======================================================================]
-
-find_path(LTTNGUST_INCLUDE_DIRS NAMES lttng/tracepoint.h)
-find_library(LTTNGUST_LIBRARIES NAMES lttng-ust)
-
-if(LTTNGUST_INCLUDE_DIRS AND LTTNGUST_LIBRARIES)
-  # find tracef() and tracelog() support
-  set(LTTNGUST_HAS_TRACEF 0)
-  set(LTTNGUST_HAS_TRACELOG 0)
-
-  if(EXISTS "${LTTNGUST_INCLUDE_DIRS}/lttng/tracef.h")
-    set(LTTNGUST_HAS_TRACEF TRUE)
-  endif()
-
-  if(EXISTS "${LTTNGUST_INCLUDE_DIRS}/lttng/tracelog.h")
-    set(LTTNGUST_HAS_TRACELOG TRUE)
-  endif()
-
-  # get version
-  set(lttngust_version_file "${LTTNGUST_INCLUDE_DIRS}/lttng/ust-version.h")
-
-  if(EXISTS "${lttngust_version_file}")
-    file(STRINGS "${lttngust_version_file}" lttngust_version_major_string
-         REGEX "^[\t ]*#define[\t ]+LTTNG_UST_MAJOR_VERSION[\t ]+[0-9]+[\t ]*$")
-    file(STRINGS "${lttngust_version_file}" lttngust_version_minor_string
-         REGEX "^[\t ]*#define[\t ]+LTTNG_UST_MINOR_VERSION[\t ]+[0-9]+[\t ]*$")
-    file(STRINGS "${lttngust_version_file}" lttngust_version_patch_string
-         REGEX "^[\t ]*#define[\t ]+LTTNG_UST_PATCHLEVEL_VERSION[\t ]+[0-9]+[\t ]*$")
-    string(REGEX REPLACE ".*([0-9]+).*" "\\1"
-           lttngust_v_major "${lttngust_version_major_string}")
-    string(REGEX REPLACE ".*([0-9]+).*" "\\1"
-           lttngust_v_minor "${lttngust_version_minor_string}")
-    string(REGEX REPLACE ".*([0-9]+).*" "\\1"
-           lttngust_v_patch "${lttngust_version_patch_string}")
-    set(LTTNGUST_VERSION_STRING
-        "${lttngust_v_major}.${lttngust_v_minor}.${lttngust_v_patch}")
-    unset(lttngust_version_major_string)
-    unset(lttngust_version_minor_string)
-    unset(lttngust_version_patch_string)
-    unset(lttngust_v_major)
-    unset(lttngust_v_minor)
-    unset(lttngust_v_patch)
-  endif()
-
-  unset(lttngust_version_file)
-
-  if(NOT TARGET LTTng::UST)
-    add_library(LTTng::UST UNKNOWN IMPORTED)
-    set_target_properties(LTTng::UST PROPERTIES
-      INTERFACE_INCLUDE_DIRECTORIES "${LTTNGUST_INCLUDE_DIRS}"
-      INTERFACE_LINK_LIBRARIES ${CMAKE_DL_LIBS}
-      IMPORTED_LINK_INTERFACE_LANGUAGES "C"
-      IMPORTED_LOCATION "${LTTNGUST_LIBRARIES}")
-  endif()
-
-  # add libdl to required libraries
-  set(LTTNGUST_LIBRARIES ${LTTNGUST_LIBRARIES} ${CMAKE_DL_LIBS})
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-find_package_handle_standard_args(LTTngUST FOUND_VAR LTTNGUST_FOUND
-                                  REQUIRED_VARS LTTNGUST_LIBRARIES
-                                                LTTNGUST_INCLUDE_DIRS
-                                  VERSION_VAR LTTNGUST_VERSION_STRING)
-mark_as_advanced(LTTNGUST_LIBRARIES LTTNGUST_INCLUDE_DIRS)
diff --git a/share/cmake-3.18/Modules/FindLibArchive.cmake b/share/cmake-3.18/Modules/FindLibArchive.cmake
deleted file mode 100644
index ce3c8b8..0000000
--- a/share/cmake-3.18/Modules/FindLibArchive.cmake
+++ /dev/null
@@ -1,76 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindLibArchive
---------------
-
-Find libarchive library and headers.
-Libarchive is multi-format archive and compression library.
-
-The module defines the following variables:
-
-::
-
-  LibArchive_FOUND        - true if libarchive was found
-  LibArchive_INCLUDE_DIRS - include search path
-  LibArchive_LIBRARIES    - libraries to link
-  LibArchive_VERSION      - libarchive 3-component version number
-
-The module defines the following ``IMPORTED`` targets:
-
-::
-
-  LibArchive::LibArchive  - target for linking against libarchive
-#]=======================================================================]
-
-find_path(LibArchive_INCLUDE_DIR
-  NAMES archive.h
-  PATHS
-  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\LibArchive;InstallPath]/include"
-  DOC "libarchive include directory"
-  )
-
-find_library(LibArchive_LIBRARY
-  NAMES archive libarchive
-  PATHS
-  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\LibArchive;InstallPath]/lib"
-  DOC "libarchive library"
-  )
-
-mark_as_advanced(LibArchive_INCLUDE_DIR LibArchive_LIBRARY)
-
-# Extract the version number from the header.
-if(LibArchive_INCLUDE_DIR AND EXISTS "${LibArchive_INCLUDE_DIR}/archive.h")
-  # The version string appears in one of three known formats in the header:
-  #  #define ARCHIVE_LIBRARY_VERSION "libarchive 2.4.12"
-  #  #define ARCHIVE_VERSION_STRING "libarchive 2.8.4"
-  #  #define ARCHIVE_VERSION_ONLY_STRING "3.2.0"
-  # Match any format.
-  set(_LibArchive_VERSION_REGEX "^#define[ \t]+ARCHIVE[_A-Z]+VERSION[_A-Z]*[ \t]+\"(libarchive +)?([0-9]+)\\.([0-9]+)\\.([0-9]+)[^\"]*\".*$")
-  file(STRINGS "${LibArchive_INCLUDE_DIR}/archive.h" _LibArchive_VERSION_STRING LIMIT_COUNT 1 REGEX "${_LibArchive_VERSION_REGEX}")
-  if(_LibArchive_VERSION_STRING)
-    string(REGEX REPLACE "${_LibArchive_VERSION_REGEX}" "\\2.\\3.\\4" LibArchive_VERSION "${_LibArchive_VERSION_STRING}")
-  endif()
-  unset(_LibArchive_VERSION_REGEX)
-  unset(_LibArchive_VERSION_STRING)
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-find_package_handle_standard_args(LibArchive
-                                  REQUIRED_VARS LibArchive_LIBRARY LibArchive_INCLUDE_DIR
-                                  VERSION_VAR LibArchive_VERSION
-  )
-unset(LIBARCHIVE_FOUND)
-
-if(LibArchive_FOUND)
-  set(LibArchive_INCLUDE_DIRS ${LibArchive_INCLUDE_DIR})
-  set(LibArchive_LIBRARIES    ${LibArchive_LIBRARY})
-
-  if (NOT TARGET LibArchive::LibArchive)
-    add_library(LibArchive::LibArchive UNKNOWN IMPORTED)
-    set_target_properties(LibArchive::LibArchive PROPERTIES
-      IMPORTED_LOCATION "${LibArchive_LIBRARY}"
-      INTERFACE_INCLUDE_DIRECTORIES "${LibArchive_INCLUDE_DIR}")
-  endif ()
-endif()
diff --git a/share/cmake-3.18/Modules/FindLibLZMA.cmake b/share/cmake-3.18/Modules/FindLibLZMA.cmake
deleted file mode 100644
index 200d6bf..0000000
--- a/share/cmake-3.18/Modules/FindLibLZMA.cmake
+++ /dev/null
@@ -1,124 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindLibLZMA
------------
-
-Find LZMA compression algorithm headers and library.
-
-
-Imported Targets
-^^^^^^^^^^^^^^^^
-
-This module defines :prop_tgt:`IMPORTED` target ``LibLZMA::LibLZMA``, if
-liblzma has been found.
-
-Result variables
-^^^^^^^^^^^^^^^^
-
-This module will set the following variables in your project:
-
-``LIBLZMA_FOUND``
-  True if liblzma headers and library were found.
-``LIBLZMA_INCLUDE_DIRS``
-  Directory where liblzma headers are located.
-``LIBLZMA_LIBRARIES``
-  Lzma libraries to link against.
-``LIBLZMA_HAS_AUTO_DECODER``
-  True if lzma_auto_decoder() is found (required).
-``LIBLZMA_HAS_EASY_ENCODER``
-  True if lzma_easy_encoder() is found (required).
-``LIBLZMA_HAS_LZMA_PRESET``
-  True if lzma_lzma_preset() is found (required).
-``LIBLZMA_VERSION_MAJOR``
-  The major version of lzma
-``LIBLZMA_VERSION_MINOR``
-  The minor version of lzma
-``LIBLZMA_VERSION_PATCH``
-  The patch version of lzma
-``LIBLZMA_VERSION_STRING``
-  version number as a string (ex: "5.0.3")
-#]=======================================================================]
-
-find_path(LIBLZMA_INCLUDE_DIR lzma.h )
-if(NOT LIBLZMA_LIBRARY)
-  find_library(LIBLZMA_LIBRARY_RELEASE NAMES lzma liblzma PATH_SUFFIXES lib)
-  find_library(LIBLZMA_LIBRARY_DEBUG NAMES lzmad liblzmad PATH_SUFFIXES lib)
-  include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
-  select_library_configurations(LIBLZMA)
-else()
-  file(TO_CMAKE_PATH "${LIBLZMA_LIBRARY}" LIBLZMA_LIBRARY)
-endif()
-
-if(LIBLZMA_INCLUDE_DIR AND EXISTS "${LIBLZMA_INCLUDE_DIR}/lzma/version.h")
-    file(STRINGS "${LIBLZMA_INCLUDE_DIR}/lzma/version.h" LIBLZMA_HEADER_CONTENTS REGEX "#define LZMA_VERSION_[A-Z]+ [0-9]+")
-
-    string(REGEX REPLACE ".*#define LZMA_VERSION_MAJOR ([0-9]+).*" "\\1" LIBLZMA_VERSION_MAJOR "${LIBLZMA_HEADER_CONTENTS}")
-    string(REGEX REPLACE ".*#define LZMA_VERSION_MINOR ([0-9]+).*" "\\1" LIBLZMA_VERSION_MINOR "${LIBLZMA_HEADER_CONTENTS}")
-    string(REGEX REPLACE ".*#define LZMA_VERSION_PATCH ([0-9]+).*" "\\1" LIBLZMA_VERSION_PATCH "${LIBLZMA_HEADER_CONTENTS}")
-
-    set(LIBLZMA_VERSION_STRING "${LIBLZMA_VERSION_MAJOR}.${LIBLZMA_VERSION_MINOR}.${LIBLZMA_VERSION_PATCH}")
-    unset(LIBLZMA_HEADER_CONTENTS)
-endif()
-
-# We're using new code known now as XZ, even library still been called LZMA
-# it can be found in http://tukaani.org/xz/
-# Avoid using old codebase
-if (LIBLZMA_LIBRARY)
-  include(${CMAKE_CURRENT_LIST_DIR}/CheckLibraryExists.cmake)
-  set(CMAKE_REQUIRED_QUIET_SAVE ${CMAKE_REQUIRED_QUIET})
-  set(CMAKE_REQUIRED_QUIET ${LibLZMA_FIND_QUIETLY})
-  if(NOT LIBLZMA_LIBRARY_RELEASE AND NOT LIBLZMA_LIBRARY_DEBUG)
-    set(LIBLZMA_LIBRARY_check ${LIBLZMA_LIBRARY})
-  elseif(LIBLZMA_LIBRARY_RELEASE)
-    set(LIBLZMA_LIBRARY_check ${LIBLZMA_LIBRARY_RELEASE})
-  elseif(LIBLZMA_LIBRARY_DEBUG)
-    set(LIBLZMA_LIBRARY_check ${LIBLZMA_LIBRARY_DEBUG})
-  endif()
-  CHECK_LIBRARY_EXISTS(${LIBLZMA_LIBRARY_check} lzma_auto_decoder "" LIBLZMA_HAS_AUTO_DECODER)
-  CHECK_LIBRARY_EXISTS(${LIBLZMA_LIBRARY_check} lzma_easy_encoder "" LIBLZMA_HAS_EASY_ENCODER)
-  CHECK_LIBRARY_EXISTS(${LIBLZMA_LIBRARY_check} lzma_lzma_preset "" LIBLZMA_HAS_LZMA_PRESET)
-  unset(LIBLZMA_LIBRARY_check)
-  set(CMAKE_REQUIRED_QUIET ${CMAKE_REQUIRED_QUIET_SAVE})
-endif ()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-find_package_handle_standard_args(LibLZMA  REQUIRED_VARS  LIBLZMA_LIBRARY
-                                                          LIBLZMA_INCLUDE_DIR
-                                                          LIBLZMA_HAS_AUTO_DECODER
-                                                          LIBLZMA_HAS_EASY_ENCODER
-                                                          LIBLZMA_HAS_LZMA_PRESET
-                                           VERSION_VAR    LIBLZMA_VERSION_STRING
-                                 )
-mark_as_advanced( LIBLZMA_INCLUDE_DIR LIBLZMA_LIBRARY )
-
-if (LIBLZMA_FOUND)
-    set(LIBLZMA_LIBRARIES ${LIBLZMA_LIBRARY})
-    set(LIBLZMA_INCLUDE_DIRS ${LIBLZMA_INCLUDE_DIR})
-    if(NOT TARGET LibLZMA::LibLZMA)
-        add_library(LibLZMA::LibLZMA UNKNOWN IMPORTED)
-        set_target_properties(LibLZMA::LibLZMA PROPERTIES
-                              INTERFACE_INCLUDE_DIRECTORIES ${LIBLZMA_INCLUDE_DIR}
-                              IMPORTED_LINK_INTERFACE_LANGUAGES C)
-
-        if(LIBLZMA_LIBRARY_RELEASE)
-            set_property(TARGET LibLZMA::LibLZMA APPEND PROPERTY
-                IMPORTED_CONFIGURATIONS RELEASE)
-            set_target_properties(LibLZMA::LibLZMA PROPERTIES
-                IMPORTED_LOCATION_RELEASE "${LIBLZMA_LIBRARY_RELEASE}")
-        endif()
-
-        if(LIBLZMA_LIBRARY_DEBUG)
-            set_property(TARGET LibLZMA::LibLZMA APPEND PROPERTY
-                IMPORTED_CONFIGURATIONS DEBUG)
-            set_target_properties(LibLZMA::LibLZMA PROPERTIES
-                IMPORTED_LOCATION_DEBUG "${LIBLZMA_LIBRARY_DEBUG}")
-        endif()
-
-        if(NOT LIBLZMA_LIBRARY_RELEASE AND NOT LIBLZMA_LIBRARY_DEBUG)
-            set_target_properties(LibLZMA::LibLZMA PROPERTIES
-                IMPORTED_LOCATION "${LIBLZMA_LIBRARY}")
-        endif()
-    endif()
-endif ()
diff --git a/share/cmake-3.18/Modules/FindLibXml2.cmake b/share/cmake-3.18/Modules/FindLibXml2.cmake
deleted file mode 100644
index f551dfe..0000000
--- a/share/cmake-3.18/Modules/FindLibXml2.cmake
+++ /dev/null
@@ -1,120 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindLibXml2
------------
-
-Find the XML processing library (libxml2).
-
-IMPORTED Targets
-^^^^^^^^^^^^^^^^
-
-The following :prop_tgt:`IMPORTED` targets may be defined:
-
-``LibXml2::LibXml2``
-  If the libxml2 library has been found
-``LibXml2::xmllint``
-  If the xmllint command-line executable has been found
-
-Result variables
-^^^^^^^^^^^^^^^^
-
-This module will set the following variables in your project:
-
-``LibXml2_FOUND``
-  true if libxml2 headers and libraries were found
-``LIBXML2_INCLUDE_DIR``
-  the directory containing LibXml2 headers
-``LIBXML2_INCLUDE_DIRS``
-  list of the include directories needed to use LibXml2
-``LIBXML2_LIBRARIES``
-  LibXml2 libraries to be linked
-``LIBXML2_DEFINITIONS``
-  the compiler switches required for using LibXml2
-``LIBXML2_XMLLINT_EXECUTABLE``
-  path to the XML checking tool xmllint coming with LibXml2
-``LIBXML2_VERSION_STRING``
-  the version of LibXml2 found (since CMake 2.8.8)
-
-Cache variables
-^^^^^^^^^^^^^^^
-
-The following cache variables may also be set:
-
-``LIBXML2_INCLUDE_DIR``
-  the directory containing LibXml2 headers
-``LIBXML2_LIBRARY``
-  path to the LibXml2 library
-#]=======================================================================]
-
-# use pkg-config to get the directories and then use these values
-# in the find_path() and find_library() calls
-find_package(PkgConfig QUIET)
-PKG_CHECK_MODULES(PC_LIBXML QUIET libxml-2.0)
-
-find_path(LIBXML2_INCLUDE_DIR NAMES libxml/xpath.h
-   HINTS
-   ${PC_LIBXML_INCLUDEDIR}
-   ${PC_LIBXML_INCLUDE_DIRS}
-   PATH_SUFFIXES libxml2
-   )
-
-# CMake 3.9 and below used 'LIBXML2_LIBRARIES' as the name of
-# the cache entry storing the find_library result.  Use the
-# value if it was set by the project or user.
-if(DEFINED LIBXML2_LIBRARIES AND NOT DEFINED LIBXML2_LIBRARY)
-  set(LIBXML2_LIBRARY ${LIBXML2_LIBRARIES})
-endif()
-
-find_library(LIBXML2_LIBRARY NAMES xml2 libxml2
-   HINTS
-   ${PC_LIBXML_LIBDIR}
-   ${PC_LIBXML_LIBRARY_DIRS}
-   )
-
-find_program(LIBXML2_XMLLINT_EXECUTABLE xmllint)
-# for backwards compat. with KDE 4.0.x:
-set(XMLLINT_EXECUTABLE "${LIBXML2_XMLLINT_EXECUTABLE}")
-
-if(LIBXML2_INCLUDE_DIR AND EXISTS "${LIBXML2_INCLUDE_DIR}/libxml/xmlversion.h")
-    file(STRINGS "${LIBXML2_INCLUDE_DIR}/libxml/xmlversion.h" libxml2_version_str
-         REGEX "^#define[\t ]+LIBXML_DOTTED_VERSION[\t ]+\".*\"")
-
-    string(REGEX REPLACE "^#define[\t ]+LIBXML_DOTTED_VERSION[\t ]+\"([^\"]*)\".*" "\\1"
-           LIBXML2_VERSION_STRING "${libxml2_version_str}")
-    unset(libxml2_version_str)
-endif()
-
-set(LIBXML2_INCLUDE_DIRS ${LIBXML2_INCLUDE_DIR})
-set(LIBXML2_LIBRARIES ${LIBXML2_LIBRARY})
-
-# Did we find the same installation as pkg-config?
-# If so, use additional information from it.
-unset(LIBXML2_DEFINITIONS)
-foreach(libxml2_pc_lib_dir IN LISTS PC_LIBXML_LIBDIR PC_LIBXML_LIBRARY_DIRS)
-  if (LIBXML2_LIBRARY MATCHES "^${libxml2_pc_lib_dir}")
-    list(APPEND LIBXML2_INCLUDE_DIRS ${PC_LIBXML_INCLUDE_DIRS})
-    set(LIBXML2_DEFINITIONS ${PC_LIBXML_CFLAGS_OTHER})
-    break()
-  endif()
-endforeach()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibXml2
-                                  REQUIRED_VARS LIBXML2_LIBRARY LIBXML2_INCLUDE_DIR
-                                  VERSION_VAR LIBXML2_VERSION_STRING)
-
-mark_as_advanced(LIBXML2_INCLUDE_DIR LIBXML2_LIBRARY LIBXML2_XMLLINT_EXECUTABLE)
-
-if(LibXml2_FOUND AND NOT TARGET LibXml2::LibXml2)
-  add_library(LibXml2::LibXml2 UNKNOWN IMPORTED)
-  set_target_properties(LibXml2::LibXml2 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LIBXML2_INCLUDE_DIRS}")
-  set_target_properties(LibXml2::LibXml2 PROPERTIES INTERFACE_COMPILE_OPTIONS "${LIBXML2_DEFINITIONS}")
-  set_property(TARGET LibXml2::LibXml2 APPEND PROPERTY IMPORTED_LOCATION "${LIBXML2_LIBRARY}")
-endif()
-
-if(LIBXML2_XMLLINT_EXECUTABLE AND NOT TARGET LibXml2::xmllint)
-  add_executable(LibXml2::xmllint IMPORTED)
-  set_target_properties(LibXml2::xmllint PROPERTIES IMPORTED_LOCATION "${LIBXML2_XMLLINT_EXECUTABLE}")
-endif()
diff --git a/share/cmake-3.18/Modules/FindLibXslt.cmake b/share/cmake-3.18/Modules/FindLibXslt.cmake
deleted file mode 100644
index fc7adeb..0000000
--- a/share/cmake-3.18/Modules/FindLibXslt.cmake
+++ /dev/null
@@ -1,131 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindLibXslt
------------
-
-Find the XSL Transformations, Extensible Stylesheet Language
-Transformations (XSLT) library (LibXslt)
-
-IMPORTED Targets
-^^^^^^^^^^^^^^^^
-
-The following :prop_tgt:`IMPORTED` targets may be defined:
-
-``LibXslt::LibXslt``
-  If the libxslt library has been found
-``LibXslt::LibExslt``
-  If the libexslt library has been found
-``LibXslt::xsltproc``
-  If the xsltproc command-line executable has been found
-
-Result variables
-^^^^^^^^^^^^^^^^
-
-This module will set the following variables in your project:
-
-  LIBXSLT_FOUND - system has LibXslt
-  LIBXSLT_INCLUDE_DIR - the LibXslt include directory
-  LIBXSLT_LIBRARIES - Link these to LibXslt
-  LIBXSLT_DEFINITIONS - Compiler switches required for using LibXslt
-  LIBXSLT_VERSION_STRING - version of LibXslt found (since CMake 2.8.8)
-
-Additionally, the following two variables are set (but not required
-for using xslt):
-
-``LIBXSLT_EXSLT_INCLUDE_DIR``
-  The include directory for exslt.
-``LIBXSLT_EXSLT_LIBRARIES``
-  Link to these if you need to link against the exslt library.
-``LIBXSLT_XSLTPROC_EXECUTABLE``
-  Contains the full path to the xsltproc executable if found.
-#]=======================================================================]
-
-# use pkg-config to get the directories and then use these values
-# in the find_path() and find_library() calls
-find_package(PkgConfig QUIET)
-PKG_CHECK_MODULES(PC_LIBXSLT QUIET libxslt)
-set(LIBXSLT_DEFINITIONS ${PC_LIBXSLT_CFLAGS_OTHER})
-
-find_path(LIBXSLT_INCLUDE_DIR NAMES libxslt/xslt.h
-    HINTS
-   ${PC_LIBXSLT_INCLUDEDIR}
-   ${PC_LIBXSLT_INCLUDE_DIRS}
-  )
-
-# CMake 3.17 and below used 'LIBXSLT_LIBRARIES' as the name of
-# the cache entry storing the find_library result.  Use the
-# value if it was set by the project or user.
-if(DEFINED LIBXSLT_LIBRARIES AND NOT DEFINED LIBXSLT_LIBRARY)
-  set(LIBXSLT_LIBRARY ${LIBXSLT_LIBRARIES})
-endif()
-
-find_library(LIBXSLT_LIBRARY NAMES xslt libxslt
-    HINTS
-   ${PC_LIBXSLT_LIBDIR}
-   ${PC_LIBXSLT_LIBRARY_DIRS}
-  )
-
-set(LIBXSLT_LIBRARIES ${LIBXSLT_LIBRARY})
-
-PKG_CHECK_MODULES(PC_LIBXSLT_EXSLT QUIET libexslt)
-set(LIBXSLT_EXSLT_DEFINITIONS ${PC_LIBXSLT_EXSLT_CFLAGS_OTHER})
-
-find_path(LIBXSLT_EXSLT_INCLUDE_DIR NAMES libexslt/exslt.h
-  HINTS
-  ${PC_LIBXSLT_EXSLT_INCLUDEDIR}
-  ${PC_LIBXSLT_EXSLT_INCLUDE_DIRS}
-)
-
-find_library(LIBXSLT_EXSLT_LIBRARY NAMES exslt libexslt
-    HINTS
-    ${PC_LIBXSLT_LIBDIR}
-    ${PC_LIBXSLT_LIBRARY_DIRS}
-    ${PC_LIBXSLT_EXSLT_LIBDIR}
-    ${PC_LIBXSLT_EXSLT_LIBRARY_DIRS}
-  )
-
-set(LIBXSLT_EXSLT_LIBRARIES ${LIBXSLT_EXSLT_LIBRARY} )
-
-find_program(LIBXSLT_XSLTPROC_EXECUTABLE xsltproc)
-
-if(PC_LIBXSLT_VERSION)
-    set(LIBXSLT_VERSION_STRING ${PC_LIBXSLT_VERSION})
-elseif(LIBXSLT_INCLUDE_DIR AND EXISTS "${LIBXSLT_INCLUDE_DIR}/libxslt/xsltconfig.h")
-    file(STRINGS "${LIBXSLT_INCLUDE_DIR}/libxslt/xsltconfig.h" libxslt_version_str
-         REGEX "^#define[\t ]+LIBXSLT_DOTTED_VERSION[\t ]+\".*\"")
-
-    string(REGEX REPLACE "^#define[\t ]+LIBXSLT_DOTTED_VERSION[\t ]+\"([^\"]*)\".*" "\\1"
-           LIBXSLT_VERSION_STRING "${libxslt_version_str}")
-    unset(libxslt_version_str)
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibXslt
-                                  REQUIRED_VARS LIBXSLT_LIBRARIES LIBXSLT_INCLUDE_DIR
-                                  VERSION_VAR LIBXSLT_VERSION_STRING)
-
-mark_as_advanced(LIBXSLT_INCLUDE_DIR
-                 LIBXSLT_LIBRARIES
-                 LIBXSLT_EXSLT_LIBRARY
-                 LIBXSLT_XSLTPROC_EXECUTABLE)
-
-if(LIBXSLT_FOUND AND NOT TARGET LibXslt::LibXslt)
-  add_library(LibXslt::LibXslt UNKNOWN IMPORTED)
-  set_target_properties(LibXslt::LibXslt PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LIBXSLT_INCLUDE_DIR}")
-  set_target_properties(LibXslt::LibXslt PROPERTIES INTERFACE_COMPILE_OPTIONS "${LIBXSLT_DEFINITIONS}")
-  set_property(TARGET LibXslt::LibXslt APPEND PROPERTY IMPORTED_LOCATION "${LIBXSLT_LIBRARY}")
-endif()
-
-if(LIBXSLT_FOUND AND NOT TARGET LibXslt::LibExslt)
-  add_library(LibXslt::LibExslt UNKNOWN IMPORTED)
-  set_target_properties(LibXslt::LibExslt PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LIBXSLT_EXSLT_INCLUDE_DIR}")
-  set_target_properties(LibXslt::LibExslt PROPERTIES INTERFACE_COMPILE_OPTIONS "${LIBXSLT_EXSLT_DEFINITIONS}")
-  set_property(TARGET LibXslt::LibExslt APPEND PROPERTY IMPORTED_LOCATION "${LIBXSLT_EXSLT_LIBRARY}")
-endif()
-
-if(LIBXSLT_XSLTPROC_EXECUTABLE AND NOT TARGET LibXslt::xsltproc)
-  add_executable(LibXslt::xsltproc IMPORTED)
-  set_target_properties(LibXslt::xsltproc PROPERTIES IMPORTED_LOCATION "${LIBXSLT_XSLTPROC_EXECUTABLE}")
-endif()
diff --git a/share/cmake-3.18/Modules/FindLibinput.cmake b/share/cmake-3.18/Modules/FindLibinput.cmake
deleted file mode 100644
index c1fe455..0000000
--- a/share/cmake-3.18/Modules/FindLibinput.cmake
+++ /dev/null
@@ -1,82 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindLibinput
-------------
-
-Find libinput headers and library.
-
-Imported Targets
-^^^^^^^^^^^^^^^^
-
-``Libinput::Libinput``
-  The libinput library, if found.
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-This will define the following variables in your project:
-
-``Libinput_FOUND``
-  true if (the requested version of) libinput is available.
-``Libinput_VERSION``
-  the version of libinput.
-``Libinput_LIBRARIES``
-  the libraries to link against to use libinput.
-``Libinput_INCLUDE_DIRS``
-  where to find the libinput headers.
-``Libinput_COMPILE_OPTIONS``
-  this should be passed to target_compile_options(), if the
-  target is not used for linking
-
-#]=======================================================================]
-
-
-# Use pkg-config to get the directories and then use these values
-# in the FIND_PATH() and FIND_LIBRARY() calls
-find_package(PkgConfig QUIET)
-pkg_check_modules(PKG_Libinput QUIET libinput)
-
-set(Libinput_COMPILE_OPTIONS ${PKG_Libinput_CFLAGS_OTHER})
-set(Libinput_VERSION ${PKG_Libinput_VERSION})
-
-find_path(Libinput_INCLUDE_DIR
-  NAMES
-    libinput.h
-  HINTS
-    ${PKG_Libinput_INCLUDE_DIRS}
-)
-find_library(Libinput_LIBRARY
-  NAMES
-    input
-  HINTS
-    ${PKG_Libinput_LIBRARY_DIRS}
-)
-
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(Libinput
-  FOUND_VAR
-    Libinput_FOUND
-  REQUIRED_VARS
-    Libinput_LIBRARY
-    Libinput_INCLUDE_DIR
-  VERSION_VAR
-    Libinput_VERSION
-)
-
-if(Libinput_FOUND AND NOT TARGET Libinput::Libinput)
-  add_library(Libinput::Libinput UNKNOWN IMPORTED)
-  set_target_properties(Libinput::Libinput PROPERTIES
-    IMPORTED_LOCATION "${Libinput_LIBRARY}"
-    INTERFACE_COMPILE_OPTIONS "${Libinput_COMPILE_OPTIONS}"
-    INTERFACE_INCLUDE_DIRECTORIES "${Libinput_INCLUDE_DIR}"
-  )
-endif()
-
-mark_as_advanced(Libinput_LIBRARY Libinput_INCLUDE_DIR)
-
-if(Libinput_FOUND)
-  set(Libinput_LIBRARIES ${Libinput_LIBRARY})
-  set(Libinput_INCLUDE_DIRS ${Libinput_INCLUDE_DIR})
-endif()
diff --git a/share/cmake-3.18/Modules/FindLua.cmake b/share/cmake-3.18/Modules/FindLua.cmake
deleted file mode 100644
index c4361b7..0000000
--- a/share/cmake-3.18/Modules/FindLua.cmake
+++ /dev/null
@@ -1,238 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindLua
--------
-
-
-
-Locate Lua library.
-
-This module defines::
-
-::
-
-  LUA_FOUND          - if false, do not try to link to Lua
-  LUA_LIBRARIES      - both lua and lualib
-  LUA_INCLUDE_DIR    - where to find lua.h
-  LUA_VERSION_STRING - the version of Lua found
-  LUA_VERSION_MAJOR  - the major version of Lua
-  LUA_VERSION_MINOR  - the minor version of Lua
-  LUA_VERSION_PATCH  - the patch version of Lua
-
-
-
-Note that the expected include convention is
-
-::
-
-  #include "lua.h"
-
-and not
-
-::
-
-  #include <lua/lua.h>
-
-This is because, the lua location is not standardized and may exist in
-locations other than lua/
-#]=======================================================================]
-
-cmake_policy(PUSH)  # Policies apply to functions at definition-time
-cmake_policy(SET CMP0012 NEW)  # For while(TRUE)
-
-unset(_lua_include_subdirs)
-unset(_lua_library_names)
-unset(_lua_append_versions)
-
-# this is a function only to have all the variables inside go away automatically
-function(_lua_get_versions)
-    set(LUA_VERSIONS5 5.4 5.3 5.2 5.1 5.0)
-
-    if (Lua_FIND_VERSION_EXACT)
-        if (Lua_FIND_VERSION_COUNT GREATER 1)
-            set(_lua_append_versions ${Lua_FIND_VERSION_MAJOR}.${Lua_FIND_VERSION_MINOR})
-        endif ()
-    elseif (Lua_FIND_VERSION)
-        # once there is a different major version supported this should become a loop
-        if (NOT Lua_FIND_VERSION_MAJOR GREATER 5)
-            if (Lua_FIND_VERSION_COUNT EQUAL 1)
-                set(_lua_append_versions ${LUA_VERSIONS5})
-            else ()
-                foreach (subver IN LISTS LUA_VERSIONS5)
-                    if (NOT subver VERSION_LESS ${Lua_FIND_VERSION})
-                        list(APPEND _lua_append_versions ${subver})
-                    endif ()
-                endforeach ()
-                # New version -> Search for it (heuristic only! Defines in include might have changed)
-                if (NOT _lua_append_versions)
-                    set(_lua_append_versions ${Lua_FIND_VERSION_MAJOR}.${Lua_FIND_VERSION_MINOR})
-                endif()
-            endif ()
-        endif ()
-    else ()
-        # once there is a different major version supported this should become a loop
-        set(_lua_append_versions ${LUA_VERSIONS5})
-    endif ()
-
-    if (LUA_Debug)
-        message(STATUS "Considering following Lua versions: ${_lua_append_versions}")
-    endif()
-
-    set(_lua_append_versions "${_lua_append_versions}" PARENT_SCOPE)
-endfunction()
-
-function(_lua_set_version_vars)
-  set(_lua_include_subdirs_raw "lua")
-
-  foreach (ver IN LISTS _lua_append_versions)
-    string(REGEX MATCH "^([0-9]+)\\.([0-9]+)$" _ver "${ver}")
-    list(APPEND _lua_include_subdirs_raw
-        lua${CMAKE_MATCH_1}${CMAKE_MATCH_2}
-        lua${CMAKE_MATCH_1}.${CMAKE_MATCH_2}
-        lua-${CMAKE_MATCH_1}.${CMAKE_MATCH_2}
-        )
-  endforeach ()
-
-  # Prepend "include/" to each path directly after the path
-  set(_lua_include_subdirs "include")
-  foreach (dir IN LISTS _lua_include_subdirs_raw)
-    list(APPEND _lua_include_subdirs "${dir}" "include/${dir}")
-  endforeach ()
-
-  set(_lua_include_subdirs "${_lua_include_subdirs}" PARENT_SCOPE)
-endfunction(_lua_set_version_vars)
-
-function(_lua_get_header_version)
-  unset(LUA_VERSION_STRING PARENT_SCOPE)
-  set(_hdr_file "${LUA_INCLUDE_DIR}/lua.h")
-
-  if (NOT EXISTS "${_hdr_file}")
-    return()
-  endif ()
-
-  # At least 5.[012] have different ways to express the version
-  # so all of them need to be tested. Lua 5.2 defines LUA_VERSION
-  # and LUA_RELEASE as joined by the C preprocessor, so avoid those.
-  file(STRINGS "${_hdr_file}" lua_version_strings
-       REGEX "^#define[ \t]+LUA_(RELEASE[ \t]+\"Lua [0-9]|VERSION([ \t]+\"Lua [0-9]|_[MR])).*")
-
-  string(REGEX REPLACE ".*;#define[ \t]+LUA_VERSION_MAJOR[ \t]+\"([0-9])\"[ \t]*;.*" "\\1" LUA_VERSION_MAJOR ";${lua_version_strings};")
-  if (LUA_VERSION_MAJOR MATCHES "^[0-9]+$")
-    string(REGEX REPLACE ".*;#define[ \t]+LUA_VERSION_MINOR[ \t]+\"([0-9])\"[ \t]*;.*" "\\1" LUA_VERSION_MINOR ";${lua_version_strings};")
-    string(REGEX REPLACE ".*;#define[ \t]+LUA_VERSION_RELEASE[ \t]+\"([0-9])\"[ \t]*;.*" "\\1" LUA_VERSION_PATCH ";${lua_version_strings};")
-    set(LUA_VERSION_STRING "${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}.${LUA_VERSION_PATCH}")
-  else ()
-    string(REGEX REPLACE ".*;#define[ \t]+LUA_RELEASE[ \t]+\"Lua ([0-9.]+)\"[ \t]*;.*" "\\1" LUA_VERSION_STRING ";${lua_version_strings};")
-    if (NOT LUA_VERSION_STRING MATCHES "^[0-9.]+$")
-      string(REGEX REPLACE ".*;#define[ \t]+LUA_VERSION[ \t]+\"Lua ([0-9.]+)\"[ \t]*;.*" "\\1" LUA_VERSION_STRING ";${lua_version_strings};")
-    endif ()
-    string(REGEX REPLACE "^([0-9]+)\\.[0-9.]*$" "\\1" LUA_VERSION_MAJOR "${LUA_VERSION_STRING}")
-    string(REGEX REPLACE "^[0-9]+\\.([0-9]+)[0-9.]*$" "\\1" LUA_VERSION_MINOR "${LUA_VERSION_STRING}")
-    string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]).*" "\\1" LUA_VERSION_PATCH "${LUA_VERSION_STRING}")
-  endif ()
-  foreach (ver IN LISTS _lua_append_versions)
-    if (ver STREQUAL "${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}")
-      set(LUA_VERSION_MAJOR ${LUA_VERSION_MAJOR} PARENT_SCOPE)
-      set(LUA_VERSION_MINOR ${LUA_VERSION_MINOR} PARENT_SCOPE)
-      set(LUA_VERSION_PATCH ${LUA_VERSION_PATCH} PARENT_SCOPE)
-      set(LUA_VERSION_STRING ${LUA_VERSION_STRING} PARENT_SCOPE)
-      return()
-    endif ()
-  endforeach ()
-endfunction(_lua_get_header_version)
-
-function(_lua_find_header)
-  _lua_set_version_vars()
-
-  # Initialize as local variable
-  set(CMAKE_IGNORE_PATH ${CMAKE_IGNORE_PATH})
-  while (TRUE)
-    # Find the next header to test. Check each possible subdir in order
-    # This prefers e.g. higher versions as they are earlier in the list
-    # It is also consistent with previous versions of FindLua
-    foreach (subdir IN LISTS _lua_include_subdirs)
-      find_path(LUA_INCLUDE_DIR lua.h
-        HINTS ENV LUA_DIR
-        PATH_SUFFIXES ${subdir}
-        )
-      if (LUA_INCLUDE_DIR)
-        break()
-      endif()
-    endforeach()
-    # Did not found header -> Fail
-    if (NOT LUA_INCLUDE_DIR)
-      return()
-    endif()
-    _lua_get_header_version()
-    # Found accepted version -> Ok
-    if (LUA_VERSION_STRING)
-      if (LUA_Debug)
-        message(STATUS "Found suitable version ${LUA_VERSION_STRING} in ${LUA_INCLUDE_DIR}/lua.h")
-      endif()
-      return()
-    endif()
-    # Found wrong version -> Ignore this path and retry
-    if (LUA_Debug)
-      message(STATUS "Ignoring unsuitable version in ${LUA_INCLUDE_DIR}")
-    endif()
-    list(APPEND CMAKE_IGNORE_PATH "${LUA_INCLUDE_DIR}")
-    unset(LUA_INCLUDE_DIR CACHE)
-    unset(LUA_INCLUDE_DIR)
-    unset(LUA_INCLUDE_DIR PARENT_SCOPE)
-  endwhile ()
-endfunction()
-
-_lua_get_versions()
-_lua_find_header()
-_lua_get_header_version()
-unset(_lua_append_versions)
-
-if (LUA_VERSION_STRING)
-  set(_lua_library_names
-    lua${LUA_VERSION_MAJOR}${LUA_VERSION_MINOR}
-    lua${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}
-    lua-${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}
-    lua.${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}
-    )
-endif ()
-
-find_library(LUA_LIBRARY
-  NAMES ${_lua_library_names} lua
-  NAMES_PER_DIR
-  HINTS
-    ENV LUA_DIR
-  PATH_SUFFIXES lib
-)
-unset(_lua_library_names)
-
-if (LUA_LIBRARY)
-  # include the math library for Unix
-  if (UNIX AND NOT APPLE AND NOT BEOS)
-    find_library(LUA_MATH_LIBRARY m)
-    mark_as_advanced(LUA_MATH_LIBRARY)
-    set(LUA_LIBRARIES "${LUA_LIBRARY};${LUA_MATH_LIBRARY}")
-
-    # include dl library for statically-linked Lua library
-    get_filename_component(LUA_LIB_EXT ${LUA_LIBRARY} EXT)
-    if(LUA_LIB_EXT STREQUAL CMAKE_STATIC_LIBRARY_SUFFIX)
-      list(APPEND LUA_LIBRARIES ${CMAKE_DL_LIBS})
-    endif()
-
-  # For Windows and Mac, don't need to explicitly include the math library
-  else ()
-    set(LUA_LIBRARIES "${LUA_LIBRARY}")
-  endif ()
-endif ()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-# handle the QUIETLY and REQUIRED arguments and set LUA_FOUND to TRUE if
-# all listed variables are TRUE
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(Lua
-                                  REQUIRED_VARS LUA_LIBRARIES LUA_INCLUDE_DIR
-                                  VERSION_VAR LUA_VERSION_STRING)
-
-mark_as_advanced(LUA_INCLUDE_DIR LUA_LIBRARY)
-
-cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/FindMPI.cmake b/share/cmake-3.18/Modules/FindMPI.cmake
deleted file mode 100644
index 25de562..0000000
--- a/share/cmake-3.18/Modules/FindMPI.cmake
+++ /dev/null
@@ -1,1791 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindMPI
--------
-
-Find a Message Passing Interface (MPI) implementation.
-
-The Message Passing Interface (MPI) is a library used to write
-high-performance distributed-memory parallel applications, and is
-typically deployed on a cluster.  MPI is a standard interface (defined
-by the MPI forum) for which many implementations are available.
-
-Variables for using MPI
-^^^^^^^^^^^^^^^^^^^^^^^
-
-The module exposes the components ``C``, ``CXX``, ``MPICXX`` and ``Fortran``.
-Each of these controls the various MPI languages to search for.
-The difference between ``CXX`` and ``MPICXX`` is that ``CXX`` refers to the
-MPI C API being usable from C++, whereas ``MPICXX`` refers to the MPI-2 C++ API
-that was removed again in MPI-3.
-
-Depending on the enabled components the following variables will be set:
-
-``MPI_FOUND``
-  Variable indicating that MPI settings for all requested languages have been found.
-  If no components are specified, this is true if MPI settings for all enabled languages
-  were detected. Note that the ``MPICXX`` component does not affect this variable.
-``MPI_VERSION``
-  Minimal version of MPI detected among the requested languages, or all enabled languages
-  if no components were specified.
-
-This module will set the following variables per language in your
-project, where ``<lang>`` is one of C, CXX, or Fortran:
-
-``MPI_<lang>_FOUND``
-  Variable indicating the MPI settings for ``<lang>`` were found and that
-  simple MPI test programs compile with the provided settings.
-``MPI_<lang>_COMPILER``
-  MPI compiler for ``<lang>`` if such a program exists.
-``MPI_<lang>_COMPILE_OPTIONS``
-  Compilation options for MPI programs in ``<lang>``, given as a :ref:`;-list <CMake Language Lists>`.
-``MPI_<lang>_COMPILE_DEFINITIONS``
-  Compilation definitions for MPI programs in ``<lang>``, given as a :ref:`;-list <CMake Language Lists>`.
-``MPI_<lang>_INCLUDE_DIRS``
-  Include path(s) for MPI header.
-``MPI_<lang>_LINK_FLAGS``
-  Linker flags for MPI programs.
-``MPI_<lang>_LIBRARIES``
-  All libraries to link MPI programs against.
-
-Additionally, the following :prop_tgt:`IMPORTED` targets are defined:
-
-``MPI::MPI_<lang>``
-  Target for using MPI from ``<lang>``.
-
-The following variables indicating which bindings are present will be defined:
-
-``MPI_MPICXX_FOUND``
-  Variable indicating whether the MPI-2 C++ bindings are present (introduced in MPI-2, removed with MPI-3).
-``MPI_Fortran_HAVE_F77_HEADER``
-  True if the Fortran 77 header ``mpif.h`` is available.
-``MPI_Fortran_HAVE_F90_MODULE``
-  True if the Fortran 90 module ``mpi`` can be used for accessing MPI (MPI-2 and higher only).
-``MPI_Fortran_HAVE_F08_MODULE``
-  True if the Fortran 2008 ``mpi_f08`` is available to MPI programs (MPI-3 and higher only).
-
-If possible, the MPI version will be determined by this module. The facilities to detect the MPI version
-were introduced with MPI-1.2, and therefore cannot be found for older MPI versions.
-
-``MPI_<lang>_VERSION_MAJOR``
-  Major version of MPI implemented for ``<lang>`` by the MPI distribution.
-``MPI_<lang>_VERSION_MINOR``
-  Minor version of MPI implemented for ``<lang>`` by the MPI distribution.
-``MPI_<lang>_VERSION``
-  MPI version implemented for ``<lang>`` by the MPI distribution.
-
-Note that there's no variable for the C bindings being accessible through ``mpi.h``, since the MPI standards
-always have required this binding to work in both C and C++ code.
-
-For running MPI programs, the module sets the following variables
-
-``MPIEXEC_EXECUTABLE``
-  Executable for running MPI programs, if such exists.
-``MPIEXEC_NUMPROC_FLAG``
-  Flag to pass to ``mpiexec`` before giving it the number of processors to run on.
-``MPIEXEC_MAX_NUMPROCS``
-  Number of MPI processors to utilize. Defaults to the number
-  of processors detected on the host system.
-``MPIEXEC_PREFLAGS``
-  Flags to pass to ``mpiexec`` directly before the executable to run.
-``MPIEXEC_POSTFLAGS``
-  Flags to pass to ``mpiexec`` after other flags.
-
-Variables for locating MPI
-^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-This module performs a four step search for an MPI implementation:
-
-1. Search for ``MPIEXEC_EXECUTABLE`` and, if found, use its base directory.
-2. Check if the compiler has MPI support built-in. This is the case if the user passed a
-   compiler wrapper as ``CMAKE_<LANG>_COMPILER`` or if they're on a Cray system.
-3. Attempt to find an MPI compiler wrapper and determine the compiler information from it.
-4. Try to find an MPI implementation that does not ship such a wrapper by guessing settings.
-   Currently, only Microsoft MPI and MPICH2 on Windows are supported.
-
-For controlling the ``MPIEXEC_EXECUTABLE`` step, the following variables may be set:
-
-``MPIEXEC_EXECUTABLE``
-  Manually specify the location of ``mpiexec``.
-``MPI_HOME``
-  Specify the base directory of the MPI installation.
-``ENV{MPI_HOME}``
-  Environment variable to specify the base directory of the MPI installation.
-``ENV{I_MPI_ROOT}``
-  Environment variable to specify the base directory of the MPI installation.
-
-For controlling the compiler wrapper step, the following variables may be set:
-
-``MPI_<lang>_COMPILER``
-  Search for the specified compiler wrapper and use it.
-``MPI_<lang>_COMPILER_FLAGS``
-  Flags to pass to the MPI compiler wrapper during interrogation. Some compiler wrappers
-  support linking debug or tracing libraries if a specific flag is passed and this variable
-  may be used to obtain them.
-``MPI_COMPILER_FLAGS``
-  Used to initialize ``MPI_<lang>_COMPILER_FLAGS`` if no language specific flag has been given.
-  Empty by default.
-``MPI_EXECUTABLE_SUFFIX``
-  A suffix which is appended to all names that are being looked for. For instance you may set this
-  to ``.mpich`` or ``.openmpi`` to prefer the one or the other on Debian and its derivatives.
-
-In order to control the guessing step, the following variable may be set:
-
-``MPI_GUESS_LIBRARY_NAME``
-  Valid values are ``MSMPI`` and ``MPICH2``. If set, only the given library will be searched for.
-  By default, ``MSMPI`` will be preferred over ``MPICH2`` if both are available.
-  This also sets ``MPI_SKIP_COMPILER_WRAPPER`` to ``true``, which may be overridden.
-
-Each of the search steps may be skipped with the following control variables:
-
-``MPI_ASSUME_NO_BUILTIN_MPI``
-  If true, the module assumes that the compiler itself does not provide an MPI implementation and
-  skips to step 2.
-``MPI_SKIP_COMPILER_WRAPPER``
-  If true, no compiler wrapper will be searched for.
-``MPI_SKIP_GUESSING``
-  If true, the guessing step will be skipped.
-
-Additionally, the following control variable is available to change search behavior:
-
-``MPI_CXX_SKIP_MPICXX``
-  Add some definitions that will disable the MPI-2 C++ bindings.
-  Currently supported are MPICH, Open MPI, Platform MPI and derivatives thereof,
-  for example MVAPICH or Intel MPI.
-
-If the find procedure fails for a variable ``MPI_<lang>_WORKS``, then the settings detected by or passed to
-the module did not work and even a simple MPI test program failed to compile.
-
-If all of these parameters were not sufficient to find the right MPI implementation, a user may
-disable the entire autodetection process by specifying both a list of libraries in ``MPI_<lang>_LIBRARIES``
-and a list of include directories in ``MPI_<lang>_ADDITIONAL_INCLUDE_DIRS``.
-Any other variable may be set in addition to these two. The module will then validate the MPI settings and store the
-settings in the cache.
-
-Cache variables for MPI
-^^^^^^^^^^^^^^^^^^^^^^^
-
-The variable ``MPI_<lang>_INCLUDE_DIRS`` will be assembled from the following variables.
-For C and CXX:
-
-``MPI_<lang>_HEADER_DIR``
-  Location of the ``mpi.h`` header on disk.
-
-For Fortran:
-
-``MPI_Fortran_F77_HEADER_DIR``
-  Location of the Fortran 77 header ``mpif.h``, if it exists.
-``MPI_Fortran_MODULE_DIR``
-  Location of the ``mpi`` or ``mpi_f08`` modules, if available.
-
-For all languages the following variables are additionally considered:
-
-``MPI_<lang>_ADDITIONAL_INCLUDE_DIRS``
-  A :ref:`;-list <CMake Language Lists>` of paths needed in addition to the normal include directories.
-``MPI_<include_name>_INCLUDE_DIR``
-  Path variables for include folders referred to by ``<include_name>``.
-``MPI_<lang>_ADDITIONAL_INCLUDE_VARS``
-  A :ref:`;-list <CMake Language Lists>` of ``<include_name>`` that will be added to the include locations of ``<lang>``.
-
-The variable ``MPI_<lang>_LIBRARIES`` will be assembled from the following variables:
-
-``MPI_<lib_name>_LIBRARY``
-  The location of a library called ``<lib_name>`` for use with MPI.
-``MPI_<lang>_LIB_NAMES``
-  A :ref:`;-list <CMake Language Lists>` of ``<lib_name>`` that will be added to the include locations of ``<lang>``.
-
-Usage of mpiexec
-^^^^^^^^^^^^^^^^
-
-When using ``MPIEXEC_EXECUTABLE`` to execute MPI applications, you should typically
-use all of the ``MPIEXEC_EXECUTABLE`` flags as follows:
-
-::
-
-   ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS}
-     ${MPIEXEC_PREFLAGS} EXECUTABLE ${MPIEXEC_POSTFLAGS} ARGS
-
-where ``EXECUTABLE`` is the MPI program, and ``ARGS`` are the arguments to
-pass to the MPI program.
-
-Advanced variables for using MPI
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The module can perform some advanced feature detections upon explicit request.
-
-**Important notice:** The following checks cannot be performed without *executing* an MPI test program.
-Consider the special considerations for the behavior of :command:`try_run` during cross compilation.
-Moreover, running an MPI program can cause additional issues, like a firewall notification on some systems.
-You should only enable these detections if you absolutely need the information.
-
-If the following variables are set to true, the respective search will be performed:
-
-``MPI_DETERMINE_Fortran_CAPABILITIES``
-  Determine for all available Fortran bindings what the values of ``MPI_SUBARRAYS_SUPPORTED`` and
-  ``MPI_ASYNC_PROTECTS_NONBLOCKING`` are and make their values available as ``MPI_Fortran_<binding>_SUBARRAYS``
-  and ``MPI_Fortran_<binding>_ASYNCPROT``, where ``<binding>`` is one of ``F77_HEADER``, ``F90_MODULE`` and
-  ``F08_MODULE``.
-``MPI_DETERMINE_LIBRARY_VERSION``
-  For each language, find the output of ``MPI_Get_library_version`` and make it available as ``MPI_<lang>_LIBRARY_VERSION_STRING``.
-  This information is usually tied to the runtime component of an MPI implementation and might differ depending on ``<lang>``.
-  Note that the return value is entirely implementation defined. This information might be used to identify
-  the MPI vendor and for example pick the correct one of multiple third party binaries that matches the MPI vendor.
-
-Backward Compatibility
-^^^^^^^^^^^^^^^^^^^^^^
-
-For backward compatibility with older versions of FindMPI, these
-variables are set, but deprecated:
-
-::
-
-   MPI_COMPILER        MPI_LIBRARY        MPI_EXTRA_LIBRARY
-   MPI_COMPILE_FLAGS   MPI_INCLUDE_PATH   MPI_LINK_FLAGS
-   MPI_LIBRARIES
-
-In new projects, please use the ``MPI_<lang>_XXX`` equivalents.
-Additionally, the following variables are deprecated:
-
-``MPI_<lang>_COMPILE_FLAGS``
-  Use ``MPI_<lang>_COMPILE_OPTIONS`` and ``MPI_<lang>_COMPILE_DEFINITIONS`` instead.
-``MPI_<lang>_INCLUDE_PATH``
-  For consumption use ``MPI_<lang>_INCLUDE_DIRS`` and for specifying folders use ``MPI_<lang>_ADDITIONAL_INCLUDE_DIRS`` instead.
-``MPIEXEC``
-  Use ``MPIEXEC_EXECUTABLE`` instead.
-#]=======================================================================]
-
-cmake_policy(PUSH)
-cmake_policy(SET CMP0057 NEW) # if IN_LIST
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-
-# Generic compiler names
-set(_MPI_C_GENERIC_COMPILER_NAMES          mpicc    mpcc      mpicc_r mpcc_r)
-set(_MPI_CXX_GENERIC_COMPILER_NAMES        mpicxx   mpiCC     mpcxx   mpCC    mpic++   mpc++
-                                           mpicxx_r mpiCC_r   mpcxx_r mpCC_r  mpic++_r mpc++_r)
-set(_MPI_Fortran_GENERIC_COMPILER_NAMES    mpif95   mpif95_r  mpf95   mpf95_r
-                                           mpif90   mpif90_r  mpf90   mpf90_r
-                                           mpif77   mpif77_r  mpf77   mpf77_r
-                                           mpifc)
-
-# GNU compiler names
-set(_MPI_GNU_C_COMPILER_NAMES              mpigcc mpgcc mpigcc_r mpgcc_r)
-set(_MPI_GNU_CXX_COMPILER_NAMES            mpig++ mpg++ mpig++_r mpg++_r mpigxx)
-set(_MPI_GNU_Fortran_COMPILER_NAMES        mpigfortran mpgfortran mpigfortran_r mpgfortran_r
-                                           mpig77 mpig77_r mpg77 mpg77_r)
-
-# Intel MPI compiler names on Windows
-if(WIN32)
-  list(APPEND _MPI_C_GENERIC_COMPILER_NAMES       mpicc.bat)
-  list(APPEND _MPI_CXX_GENERIC_COMPILER_NAMES     mpicxx.bat)
-  list(APPEND _MPI_Fortran_GENERIC_COMPILER_NAMES mpifc.bat)
-
-  # Intel MPI compiler names
-  set(_MPI_Intel_C_COMPILER_NAMES            mpiicc.bat)
-  set(_MPI_Intel_CXX_COMPILER_NAMES          mpiicpc.bat)
-  set(_MPI_Intel_Fortran_COMPILER_NAMES      mpiifort.bat mpif77.bat mpif90.bat)
-
-  # Intel MPI compiler names for MSMPI
-  set(_MPI_MSVC_C_COMPILER_NAMES             mpicl.bat)
-  set(_MPI_MSVC_CXX_COMPILER_NAMES           mpicl.bat)
-else()
-  # Intel compiler names
-  set(_MPI_Intel_C_COMPILER_NAMES            mpiicc)
-  set(_MPI_Intel_CXX_COMPILER_NAMES          mpiicpc  mpiicxx mpiic++)
-  set(_MPI_Intel_Fortran_COMPILER_NAMES      mpiifort mpiif95 mpiif90 mpiif77)
-endif()
-
-# PGI compiler names
-set(_MPI_PGI_C_COMPILER_NAMES              mpipgicc mpipgcc mppgcc)
-set(_MPI_PGI_CXX_COMPILER_NAMES            mpipgic++ mpipgCC mppgCC)
-set(_MPI_PGI_Fortran_COMPILER_NAMES        mpipgifort mpipgf95 mpipgf90 mppgf95 mppgf90 mpipgf77 mppgf77)
-
-# XLC MPI Compiler names
-set(_MPI_XL_C_COMPILER_NAMES               mpxlc      mpxlc_r    mpixlc     mpixlc_r)
-set(_MPI_XL_CXX_COMPILER_NAMES             mpixlcxx   mpixlC     mpixlc++   mpxlcxx   mpxlc++   mpixlc++   mpxlCC
-                                           mpixlcxx_r mpixlC_r   mpixlc++_r mpxlcxx_r mpxlc++_r mpixlc++_r mpxlCC_r)
-set(_MPI_XL_Fortran_COMPILER_NAMES         mpixlf95   mpixlf95_r mpxlf95 mpxlf95_r
-                                           mpixlf90   mpixlf90_r mpxlf90 mpxlf90_r
-                                           mpixlf77   mpixlf77_r mpxlf77 mpxlf77_r
-                                           mpixlf     mpixlf_r   mpxlf   mpxlf_r)
-
-# Prepend vendor-specific compiler wrappers to the list. If we don't know the compiler,
-# attempt all of them.
-# By attempting vendor-specific compiler names first, we should avoid situations where the compiler wrapper
-# stems from a proprietary MPI and won't know which compiler it's being used for. For instance, Intel MPI
-# controls its settings via the I_MPI_CC environment variables if the generic name is being used.
-# If we know which compiler we're working with, we can use the most specialized wrapper there is in order to
-# pick up the right settings for it.
-foreach (LANG IN ITEMS C CXX Fortran)
-  set(_MPI_${LANG}_COMPILER_NAMES "")
-  foreach (id IN ITEMS GNU Intel MSVC PGI XL)
-    if (NOT CMAKE_${LANG}_COMPILER_ID OR CMAKE_${LANG}_COMPILER_ID STREQUAL id)
-      foreach(_COMPILER_NAME IN LISTS _MPI_${id}_${LANG}_COMPILER_NAMES)
-        list(APPEND _MPI_${LANG}_COMPILER_NAMES ${_COMPILER_NAME}${MPI_EXECUTABLE_SUFFIX})
-      endforeach()
-    endif()
-    unset(_MPI_${id}_${LANG}_COMPILER_NAMES)
-  endforeach()
-  foreach(_COMPILER_NAME IN LISTS _MPI_${LANG}_GENERIC_COMPILER_NAMES)
-    list(APPEND _MPI_${LANG}_COMPILER_NAMES ${_COMPILER_NAME}${MPI_EXECUTABLE_SUFFIX})
-  endforeach()
-  unset(_MPI_${LANG}_GENERIC_COMPILER_NAMES)
-endforeach()
-
-# Names to try for mpiexec
-# Only mpiexec commands are guaranteed to behave as described in the standard,
-# mpirun commands are not covered by the standard in any way whatsoever.
-# lamexec is the executable for LAM/MPI, srun is for SLURM or Open MPI with SLURM support.
-# srun -n X <executable> is however a valid command, so it behaves 'like' mpiexec.
-set(_MPIEXEC_NAMES_BASE                   mpiexec mpiexec.hydra mpiexec.mpd mpirun lamexec srun)
-
-unset(_MPIEXEC_NAMES)
-foreach(_MPIEXEC_NAME IN LISTS _MPIEXEC_NAMES_BASE)
-  list(APPEND _MPIEXEC_NAMES "${_MPIEXEC_NAME}${MPI_EXECUTABLE_SUFFIX}")
-endforeach()
-unset(_MPIEXEC_NAMES_BASE)
-
-function (_MPI_check_compiler LANG QUERY_FLAG OUTPUT_VARIABLE RESULT_VARIABLE)
-  if(DEFINED MPI_${LANG}_COMPILER_FLAGS)
-    separate_arguments(_MPI_COMPILER_WRAPPER_OPTIONS NATIVE_COMMAND "${MPI_${LANG}_COMPILER_FLAGS}")
-  else()
-    separate_arguments(_MPI_COMPILER_WRAPPER_OPTIONS NATIVE_COMMAND "${MPI_COMPILER_FLAGS}")
-  endif()
-  execute_process(
-    COMMAND ${MPI_${LANG}_COMPILER} ${_MPI_COMPILER_WRAPPER_OPTIONS} ${QUERY_FLAG}
-    OUTPUT_VARIABLE  WRAPPER_OUTPUT OUTPUT_STRIP_TRAILING_WHITESPACE
-    ERROR_VARIABLE   WRAPPER_OUTPUT ERROR_STRIP_TRAILING_WHITESPACE
-    RESULT_VARIABLE  WRAPPER_RETURN)
-  # Some compiler wrappers will yield spurious zero return values, for example
-  # Intel MPI tolerates unknown arguments and if the MPI wrappers loads a shared
-  # library that has invalid or missing version information there would be warning
-  # messages emitted by ld.so in the compiler output. In either case, we'll treat
-  # the output as invalid.
-  if("${WRAPPER_OUTPUT}" MATCHES "undefined reference|unrecognized|need to set|no version information available|command not found")
-    set(WRAPPER_RETURN 255)
-  endif()
-  # Ensure that no error output might be passed upwards.
-  if(NOT WRAPPER_RETURN EQUAL 0)
-    unset(WRAPPER_OUTPUT)
-  else()
-    # Strip leading whitespace
-    string(REGEX REPLACE "^ +" "" WRAPPER_OUTPUT "${WRAPPER_OUTPUT}")
-  endif()
-  set(${OUTPUT_VARIABLE} "${WRAPPER_OUTPUT}" PARENT_SCOPE)
-  set(${RESULT_VARIABLE} "${WRAPPER_RETURN}" PARENT_SCOPE)
-endfunction()
-
-macro(_MPI_env_set_ifnot VAR VALUE)
-  if(NOT DEFINED ENV{${VAR}})
-    set(_MPI_${VAR}_WAS_SET FALSE)
-    set(ENV{${VAR}} ${${VALUE}})
-  else()
-    set(_MPI_${VAR}_WAS_SET TRUE)
-  endif()
-endmacro()
-
-macro(_MPI_env_unset_ifnot VAR)
-  if(NOT _MPI_${VAR}_WAS_SET)
-    unset(ENV{${VAR}})
-  endif()
-endmacro()
-
-function (_MPI_interrogate_compiler LANG)
-  unset(MPI_COMPILE_CMDLINE)
-  unset(MPI_LINK_CMDLINE)
-
-  unset(MPI_COMPILE_OPTIONS_WORK)
-  unset(MPI_COMPILE_DEFINITIONS_WORK)
-  unset(MPI_INCLUDE_DIRS_WORK)
-  unset(MPI_LINK_FLAGS_WORK)
-  unset(MPI_LIB_NAMES_WORK)
-  unset(MPI_LIB_FULLPATHS_WORK)
-
-  # Define the MPICH and Intel MPI compiler variables to the compilers set in CMake.
-  # It's possible to have a per-compiler configuration in these MPI implementations and
-  # a particular MPICH derivate might check compiler interoperability.
-  # Intel MPI in particular does this with I_MPI_CHECK_COMPILER.
-  file(TO_NATIVE_PATH "${CMAKE_${LANG}_COMPILER}" _MPI_UNDERLAYING_COMPILER)
-  # On Windows, the Intel MPI batch scripts can only work with filnames - Full paths will break them.
-  # Due to the lack of other MPICH-based wrappers for Visual C++, we may treat this as default.
-  if(MSVC)
-    get_filename_component(_MPI_UNDERLAYING_COMPILER "${_MPI_UNDERLAYING_COMPILER}" NAME)
-  endif()
-  if("${LANG}" STREQUAL "C")
-    _MPI_env_set_ifnot(I_MPI_CC _MPI_UNDERLAYING_COMPILER)
-    _MPI_env_set_ifnot(MPICH_CC _MPI_UNDERLAYING_COMPILER)
-  elseif("${LANG}" STREQUAL "CXX")
-    _MPI_env_set_ifnot(I_MPI_CXX _MPI_UNDERLAYING_COMPILER)
-    _MPI_env_set_ifnot(MPICH_CXX _MPI_UNDERLAYING_COMPILER)
-  elseif("${LANG}" STREQUAL "Fortran")
-    _MPI_env_set_ifnot(I_MPI_FC _MPI_UNDERLAYING_COMPILER)
-    _MPI_env_set_ifnot(MPICH_FC _MPI_UNDERLAYING_COMPILER)
-    _MPI_env_set_ifnot(I_MPI_F77 _MPI_UNDERLAYING_COMPILER)
-    _MPI_env_set_ifnot(MPICH_F77 _MPI_UNDERLAYING_COMPILER)
-    _MPI_env_set_ifnot(I_MPI_F90 _MPI_UNDERLAYING_COMPILER)
-    _MPI_env_set_ifnot(MPICH_F90 _MPI_UNDERLAYING_COMPILER)
-  endif()
-
-  # Set these two variables for Intel MPI:
-  #   - I_MPI_DEBUG_INFO_STRIP: It adds 'objcopy' lines to the compiler output. We support stripping them
-  #     (see below), but if we can avoid them in the first place, we should.
-  #   - I_MPI_FORT_BIND: By default Intel MPI makes the C/C++ compiler wrappers link Fortran bindings.
-  #     This is so that mixed-language code doesn't require additional libraries when linking with mpicc.
-  #     For our purposes, this makes little sense, since correct MPI usage from CMake already circumvenes this.
-  set(_MPI_ENV_VALUE "disable")
-  _MPI_env_set_ifnot(I_MPI_DEBUG_INFO_STRIP _MPI_ENV_VALUE)
-  _MPI_env_set_ifnot(I_MPI_FORT_BIND _MPI_ENV_VALUE)
-
-  # Check whether the -showme:compile option works. This indicates that we have either Open MPI
-  # or a newer version of LAM/MPI, and implies that -showme:link will also work.
-  # Open MPI also supports -show, but separates linker and compiler information
-  _MPI_check_compiler(${LANG} "-showme:compile" MPI_COMPILE_CMDLINE MPI_COMPILER_RETURN)
-  if (MPI_COMPILER_RETURN EQUAL 0)
-    _MPI_check_compiler(${LANG} "-showme:link" MPI_LINK_CMDLINE MPI_COMPILER_RETURN)
-
-    if (NOT MPI_COMPILER_RETURN EQUAL 0)
-      unset(MPI_COMPILE_CMDLINE)
-    endif()
-  endif()
-
-  # MPICH and MVAPICH offer -compile-info and -link-info.
-  # For modern versions, both do the same as -show. However, for old versions, they do differ
-  # when called for mpicxx and mpif90 and it's necessary to use them over -show in order to find the
-  # removed MPI C++ bindings.
-  if (NOT MPI_COMPILER_RETURN EQUAL 0)
-    _MPI_check_compiler(${LANG} "-compile-info" MPI_COMPILE_CMDLINE MPI_COMPILER_RETURN)
-
-    if (MPI_COMPILER_RETURN EQUAL 0)
-      _MPI_check_compiler(${LANG} "-link-info" MPI_LINK_CMDLINE MPI_COMPILER_RETURN)
-
-      if (NOT MPI_COMPILER_RETURN EQUAL 0)
-        unset(MPI_COMPILE_CMDLINE)
-      endif()
-    endif()
-  endif()
-
-  # MPICH, MVAPICH2 and Intel MPI just use "-show". Open MPI also offers this, but the
-  # -showme commands are more specialized.
-  if (NOT MPI_COMPILER_RETURN EQUAL 0)
-    _MPI_check_compiler(${LANG} "-show" MPI_COMPILE_CMDLINE MPI_COMPILER_RETURN)
-  endif()
-
-  # Older versions of LAM/MPI have "-showme". Open MPI also supports this.
-  # Unknown to MPICH, MVAPICH and Intel MPI.
-  if (NOT MPI_COMPILER_RETURN EQUAL 0)
-    _MPI_check_compiler(${LANG} "-showme" MPI_COMPILE_CMDLINE MPI_COMPILER_RETURN)
-  endif()
-
-  if (MPI_COMPILER_RETURN EQUAL 0 AND DEFINED MPI_COMPILE_CMDLINE)
-    # Intel MPI can be run with -compchk or I_MPI_CHECK_COMPILER set to 1.
-    # In this case, -show will be prepended with a line to the compiler checker. This is a script that performs
-    # compatibility checks and returns a non-zero exit code together with an error if something fails.
-    # It has to be called as "compchk.sh <arch> <compiler>". Here, <arch> is one out of 32 (i686), 64 (ia64) or 32e (x86_64).
-    # The compiler is identified by filename, and can be either the MPI compiler or the underlying compiler.
-    # NOTE: It is vital to run this script while the environment variables are set up, otherwise it can check the wrong compiler.
-    if("${MPI_COMPILE_CMDLINE}" MATCHES "^([^\" ]+/compchk.sh|\"[^\"]+/compchk.sh\") +([^ ]+)")
-      # Now CMAKE_MATCH_1 contains the path to the compchk.sh file and CMAKE_MATCH_2 the architecture flag.
-      unset(COMPILER_CHECKER_OUTPUT)
-      execute_process(
-      COMMAND ${CMAKE_MATCH_1} ${CMAKE_MATCH_2} ${MPI_${LANG}_COMPILER}
-      OUTPUT_VARIABLE  COMPILER_CHECKER_OUTPUT OUTPUT_STRIP_TRAILING_WHITESPACE
-      ERROR_VARIABLE   COMPILER_CHECKER_OUTPUT ERROR_STRIP_TRAILING_WHITESPACE
-      RESULT_VARIABLE  MPI_COMPILER_RETURN)
-      # If it returned a non-zero value, the check below will fail and cause the interrogation to be aborted.
-      if(NOT MPI_COMPILER_RETURN EQUAL 0)
-        if(NOT MPI_FIND_QUIETLY)
-          message(STATUS "Intel MPI compiler check failed: ${COMPILER_CHECKER_OUTPUT}")
-        endif()
-      else()
-        # Since the check passed, we can remove the compchk.sh script.
-        string(REGEX REPLACE "^([^\" ]+|\"[^\"]+\")/compchk.sh.*\n" "" MPI_COMPILE_CMDLINE "${MPI_COMPILE_CMDLINE}")
-      endif()
-    endif()
-  endif()
-
-  # Revert changes to the environment made previously
-  if("${LANG}" STREQUAL "C")
-    _MPI_env_unset_ifnot(I_MPI_CC)
-    _MPI_env_unset_ifnot(MPICH_CC)
-  elseif("${LANG}" STREQUAL "CXX")
-    _MPI_env_unset_ifnot(I_MPI_CXX)
-    _MPI_env_unset_ifnot(MPICH_CXX)
-  elseif("${LANG}" STREQUAL "Fortran")
-    _MPI_env_unset_ifnot(I_MPI_FC)
-    _MPI_env_unset_ifnot(MPICH_FC)
-    _MPI_env_unset_ifnot(I_MPI_F77)
-    _MPI_env_unset_ifnot(MPICH_F77)
-    _MPI_env_unset_ifnot(I_MPI_F90)
-    _MPI_env_unset_ifnot(MPICH_F90)
-  endif()
-
-  _MPI_env_unset_ifnot(I_MPI_DEBUG_INFO_STRIP)
-  _MPI_env_unset_ifnot(I_MPI_FORT_BIND)
-
-  if (NOT (MPI_COMPILER_RETURN EQUAL 0) OR NOT (DEFINED MPI_COMPILE_CMDLINE))
-    # Cannot interrogate this compiler, so exit.
-    set(MPI_${LANG}_WRAPPER_FOUND FALSE PARENT_SCOPE)
-    return()
-  endif()
-  unset(MPI_COMPILER_RETURN)
-
-  # We have our command lines, but we might need to copy MPI_COMPILE_CMDLINE
-  # into MPI_LINK_CMDLINE, if we didn't find the link line.
-  if (NOT DEFINED MPI_LINK_CMDLINE)
-    set(MPI_LINK_CMDLINE "${MPI_COMPILE_CMDLINE}")
-  endif()
-
-  # Visual Studio parsers permit each flag prefixed by either / or -.
-  # We'll normalize this to the - syntax we use for CMake purposes anyways.
-  if(MSVC)
-    foreach(_MPI_VARIABLE IN ITEMS COMPILE LINK)
-      # The Intel MPI wrappers on Windows prefix their output with some copyright boilerplate.
-      # To prevent possible problems, we discard this text before proceeding with any further matching.
-      string(REGEX REPLACE "^[^ ]+ for the Intel\\(R\\) MPI Library [^\n]+ for Windows\\*\nCopyright\\(C\\) [^\n]+, Intel Corporation\\. All rights reserved\\.\n\n" ""
-        MPI_${_MPI_VARIABLE}_CMDLINE "${MPI_${_MPI_VARIABLE}_CMDLINE}")
-      string(REGEX REPLACE "(^| )/" "\\1-" MPI_${_MPI_VARIABLE}_CMDLINE "${MPI_${_MPI_VARIABLE}_CMDLINE}")
-      string(REPLACE "-libpath:" "-LIBPATH:" MPI_${_MPI_VARIABLE}_CMDLINE "${MPI_${_MPI_VARIABLE}_CMDLINE}")
-    endforeach()
-  endif()
-
-  # For MSVC and cl-compatible compilers, the keyword /link indicates a point after which
-  # everything following is passed to the linker. In this case, we drop all prior information
-  # from the link line and treat any unknown extra flags as linker flags.
-  set(_MPI_FILTERED_LINK_INFORMATION FALSE)
-  if(MSVC)
-    if(MPI_LINK_CMDLINE MATCHES " -(link|LINK) ")
-      string(REGEX REPLACE ".+-(link|LINK) +" "" MPI_LINK_CMDLINE "${MPI_LINK_CMDLINE}")
-      set(_MPI_FILTERED_LINK_INFORMATION TRUE)
-    endif()
-    string(REGEX REPLACE " +-(link|LINK) .+" "" MPI_COMPILE_CMDLINE "${MPI_COMPILE_CMDLINE}")
-  endif()
-
-  if(UNIX)
-    # At this point, we obtained some output from a compiler wrapper that works.
-    # We'll now try to parse it into variables with meaning to us.
-    if("${LANG}" STREQUAL "Fortran")
-      # If MPICH (and derivates) didn't recognize the Fortran compiler include flag during configuration,
-      # they'll return a set of three commands, consisting out of a symlink command for mpif.h,
-      # the actual compiler command and deletion of the created symlink.
-      # Especially with M(VA)PICH-1, this appears to happen erroneously, and therefore we should translate
-      # this output into an additional include directory and then drop it from the output.
-      if("${MPI_COMPILE_CMDLINE}" MATCHES "^ln -s ([^\" ]+|\"[^\"]+\") mpif.h")
-        get_filename_component(MPI_INCLUDE_DIRS_WORK "${CMAKE_MATCH_1}" DIRECTORY)
-        string(REGEX REPLACE "^ln -s ([^\" ]+|\"[^\"]+\") mpif.h\n" "" MPI_COMPILE_CMDLINE "${MPI_COMPILE_CMDLINE}")
-        string(REGEX REPLACE "^ln -s ([^\" ]+|\"[^\"]+\") mpif.h\n" "" MPI_LINK_CMDLINE "${MPI_LINK_CMDLINE}")
-        string(REGEX REPLACE "\nrm -f mpif.h$" "" MPI_COMPILE_CMDLINE "${MPI_COMPILE_CMDLINE}")
-        string(REGEX REPLACE "\nrm -f mpif.h$" "" MPI_LINK_CMDLINE "${MPI_LINK_CMDLINE}")
-      endif()
-    endif()
-
-    # If Intel MPI was configured for static linkage with -static_mpi, the wrapper will by default strip
-    # debug information from resulting binaries (see I_MPI_DEBUG_INFO_STRIP).
-    # Since we cannot process this information into CMake logic, we need to discard the resulting objcopy
-    # commands from the output.
-    string(REGEX REPLACE "(^|\n)objcopy[^\n]+(\n|$)" "" MPI_COMPILE_CMDLINE "${MPI_COMPILE_CMDLINE}")
-    string(REGEX REPLACE "(^|\n)objcopy[^\n]+(\n|$)" "" MPI_LINK_CMDLINE "${MPI_LINK_CMDLINE}")
-  endif()
-
-  # For Visual C++, extracting compiler options in a generic fashion isn't easy. However, no MPI implementation
-  # on Windows seems to require any specific ones, either.
-  if(NOT MSVC)
-    # Extract compile options from the compile command line.
-    string(REGEX MATCHALL "(^| )-f([^\" ]+|\"[^\"]+\")" MPI_ALL_COMPILE_OPTIONS "${MPI_COMPILE_CMDLINE}")
-
-    foreach(_MPI_COMPILE_OPTION IN LISTS MPI_ALL_COMPILE_OPTIONS)
-      string(REGEX REPLACE "^ " "" _MPI_COMPILE_OPTION "${_MPI_COMPILE_OPTION}")
-
-      # Ignore -fstack-protector directives: These occur on MPICH and MVAPICH when the libraries
-      # themselves were built with this flag. However, this flag is unrelated to using MPI, and
-      # we won't match the accompanying --param-ssp-size and -Wp,-D_FORTIFY_SOURCE flags and therefore
-      # produce inconsistent results with the regularly flags.
-      # Similarly, aliasing flags do not belong into our flag array.
-      if(NOT "${_MPI_COMPILE_OPTION}" MATCHES "^-f((no-|)(stack-protector|strict-aliasing)|PI[CE]|pi[ce])")
-        list(APPEND MPI_COMPILE_OPTIONS_WORK "${_MPI_COMPILE_OPTION}")
-      endif()
-    endforeach()
-  endif()
-
-  # For GNU-style compilers, it's possible to prefix includes and definitions with certain flags to pass them
-  # only to the preprocessor. For CMake purposes, we need to treat, but ignore such scopings.
-  # Note that we do not support spaces between the arguments, i.e. -Wp,-I -Wp,/opt/mympi will not be parsed
-  # correctly. This form does not seem to occur in any common MPI implementation, however.
-  if(NOT MSVC)
-    set(_MPI_PREPROCESSOR_FLAG_REGEX "(-Wp,|-Xpreprocessor )?")
-  else()
-    set(_MPI_PREPROCESSOR_FLAG_REGEX "")
-  endif()
-
-  # Same deal as above, for the definitions.
-  string(REGEX MATCHALL "(^| )${_MPI_PREPROCESSOR_FLAG_REGEX}-D *([^\" ]+|\"[^\"]+\")" MPI_ALL_COMPILE_DEFINITIONS "${MPI_COMPILE_CMDLINE}")
-
-  foreach(_MPI_COMPILE_DEFINITION IN LISTS MPI_ALL_COMPILE_DEFINITIONS)
-    string(REGEX REPLACE "^ ?${_MPI_PREPROCESSOR_FLAG_REGEX}-D *" "" _MPI_COMPILE_DEFINITION "${_MPI_COMPILE_DEFINITION}")
-    string(REPLACE "\"" "" _MPI_COMPILE_DEFINITION "${_MPI_COMPILE_DEFINITION}")
-    if(NOT "${_MPI_COMPILE_DEFINITION}" MATCHES "^_FORTIFY_SOURCE.*")
-      list(APPEND MPI_COMPILE_DEFINITIONS_WORK "${_MPI_COMPILE_DEFINITION}")
-    endif()
-  endforeach()
-
-  # Extract include paths from compile command line
-  string(REGEX MATCHALL "(^| )${_MPI_PREPROCESSOR_FLAG_REGEX}${CMAKE_INCLUDE_FLAG_${LANG}} *([^\" ]+|\"[^\"]+\")"
-    MPI_ALL_INCLUDE_PATHS "${MPI_COMPILE_CMDLINE}")
-
-  # If extracting failed to work, we'll try using -showme:incdirs.
-  # Unlike before, we do this without the environment variables set up, but since only MPICH derivates are affected by any of them, and
-  # -showme:... is only supported by Open MPI and LAM/MPI, this isn't a concern.
-  if (NOT MPI_ALL_INCLUDE_PATHS)
-    _MPI_check_compiler(${LANG} "-showme:incdirs" MPI_INCDIRS_CMDLINE MPI_INCDIRS_COMPILER_RETURN)
-    if(MPI_INCDIRS_COMPILER_RETURN)
-      separate_arguments(MPI_ALL_INCLUDE_PATHS NATIVE_COMMAND "${MPI_INCDIRS_CMDLINE}")
-    endif()
-  endif()
-
-  foreach(_MPI_INCLUDE_PATH IN LISTS MPI_ALL_INCLUDE_PATHS)
-    string(REGEX REPLACE "^ ?${_MPI_PREPROCESSOR_FLAG_REGEX}${CMAKE_INCLUDE_FLAG_${LANG}} *" "" _MPI_INCLUDE_PATH "${_MPI_INCLUDE_PATH}")
-    string(REPLACE "\"" "" _MPI_INCLUDE_PATH "${_MPI_INCLUDE_PATH}")
-    get_filename_component(_MPI_INCLUDE_PATH "${_MPI_INCLUDE_PATH}" REALPATH)
-    list(APPEND MPI_INCLUDE_DIRS_WORK "${_MPI_INCLUDE_PATH}")
-  endforeach()
-
-  # The next step are linker flags and library directories. Here, we first take the flags given in raw -L or -LIBPATH: syntax.
-  string(REGEX MATCHALL "(^| )${CMAKE_LIBRARY_PATH_FLAG} *([^\" ]+|\"[^\"]+\")" MPI_DIRECT_LINK_PATHS "${MPI_LINK_CMDLINE}")
-  foreach(_MPI_LPATH IN LISTS MPI_DIRECT_LINK_PATHS)
-    string(REGEX REPLACE "(^| )${CMAKE_LIBRARY_PATH_FLAG} *" "" _MPI_LPATH "${_MPI_LPATH}")
-    list(APPEND MPI_ALL_LINK_PATHS "${_MPI_LPATH}")
-  endforeach()
-
-  # If the link commandline hasn't been filtered (e.g. when using MSVC and /link), we need to extract the relevant parts first.
-  if(NOT _MPI_FILTERED_LINK_INFORMATION)
-    string(REGEX MATCHALL "(^| )(-Wl,|-Xlinker +)([^\" ]+|\"[^\"]+\")" MPI_LINK_FLAGS "${MPI_LINK_CMDLINE}")
-
-    # In this case, we could also find some indirectly given linker paths, e.g. prefixed by -Xlinker or -Wl,
-    # Since syntaxes like -Wl,-L -Wl,/my/path/to/lib are also valid, we parse these paths by first removing -Wl, and -Xlinker
-    # from the list of filtered flags and then parse the remainder of the output.
-    string(REGEX REPLACE "(-Wl,|-Xlinker +)" "" MPI_LINK_FLAGS_RAW "${MPI_LINK_FLAGS}")
-
-    # Now we can parse the leftover output. Note that spaces can now be handled since the above example would reduce to
-    # -L /my/path/to/lib and can be extracted correctly.
-    string(REGEX MATCHALL "^(${CMAKE_LIBRARY_PATH_FLAG},? *|--library-path=)([^\" ]+|\"[^\"]+\")"
-      MPI_INDIRECT_LINK_PATHS "${MPI_LINK_FLAGS_RAW}")
-
-    foreach(_MPI_LPATH IN LISTS MPI_INDIRECT_LINK_PATHS)
-      string(REGEX REPLACE "^(${CMAKE_LIBRARY_PATH_FLAG},? *|--library-path=)" "" _MPI_LPATH "${_MPI_LPATH}")
-      list(APPEND MPI_ALL_LINK_PATHS "${_MPI_LPATH}")
-    endforeach()
-
-    # We need to remove the flags we extracted from the linker flag list now.
-    string(REGEX REPLACE "(^| )(-Wl,|-Xlinker +)(${CMAKE_LIBRARY_PATH_FLAG},? *(-Wl,|-Xlinker +)?|--library-path=)([^\" ]+|\"[^\"]+\")" ""
-      MPI_LINK_CMDLINE_FILTERED "${MPI_LINK_CMDLINE}")
-
-    # Some MPI implementations pass on options they themselves were built with. Since -z,noexecstack is a common
-    # hardening, we should strip it. In general, the -z options should be undesirable.
-    string(REGEX REPLACE "(^| )-Wl,-z(,[^ ]+| +-Wl,[^ ]+)" "" MPI_LINK_CMDLINE_FILTERED "${MPI_LINK_CMDLINE_FILTERED}")
-    string(REGEX REPLACE "(^| )-Xlinker +-z +-Xlinker +[^ ]+" "" MPI_LINK_CMDLINE_FILTERED "${MPI_LINK_CMDLINE_FILTERED}")
-
-    # We only consider options of the form -Wl or -Xlinker:
-    string(REGEX MATCHALL "(^| )(-Wl,|-Xlinker +)([^\" ]+|\"[^\"]+\")" MPI_ALL_LINK_FLAGS "${MPI_LINK_CMDLINE_FILTERED}")
-
-    # As a next step, we assemble the linker flags extracted in a preliminary flags string
-    foreach(_MPI_LINK_FLAG IN LISTS MPI_ALL_LINK_FLAGS)
-      string(STRIP "${_MPI_LINK_FLAG}" _MPI_LINK_FLAG)
-      if (MPI_LINK_FLAGS_WORK)
-        string(APPEND MPI_LINK_FLAGS_WORK " ${_MPI_LINK_FLAG}")
-      else()
-        set(MPI_LINK_FLAGS_WORK "${_MPI_LINK_FLAG}")
-      endif()
-    endforeach()
-  else()
-    # In the filtered case, we obtain the link time flags by just stripping the library paths.
-    string(REGEX REPLACE "(^| )${CMAKE_LIBRARY_PATH_FLAG} *([^\" ]+|\"[^\"]+\")" "" MPI_LINK_CMDLINE_FILTERED "${MPI_LINK_CMDLINE}")
-  endif()
-
-  # If we failed to extract any linker paths, we'll try using the -showme:libdirs option with the MPI compiler.
-  # This will return a list of folders, not a set of flags!
-  if (NOT MPI_ALL_LINK_PATHS)
-    _MPI_check_compiler(${LANG} "-showme:libdirs" MPI_LIBDIRS_CMDLINE MPI_LIBDIRS_COMPILER_RETURN)
-    if(MPI_LIBDIRS_COMPILER_RETURN)
-      separate_arguments(MPI_ALL_LINK_PATHS NATIVE_COMMAND "${MPI_LIBDIRS_CMDLINE}")
-    endif()
-  endif()
-
-  # We need to remove potential quotes and convert the paths to CMake syntax while resolving them, too.
-  foreach(_MPI_LPATH IN LISTS MPI_ALL_LINK_PATHS)
-    string(REPLACE "\"" "" _MPI_LPATH "${_MPI_LPATH}")
-    get_filename_component(_MPI_LPATH "${_MPI_LPATH}" REALPATH)
-    list(APPEND MPI_LINK_DIRECTORIES_WORK "${_MPI_LPATH}")
-  endforeach()
-
-  # Extract the set of libraries to link against from the link command line
-  # This only makes sense if CMAKE_LINK_LIBRARY_FLAG is defined, i.e. a -lxxxx syntax is supported by the compiler.
-  if(CMAKE_LINK_LIBRARY_FLAG)
-    string(REGEX MATCHALL "(^| )${CMAKE_LINK_LIBRARY_FLAG}([^\" ]+|\"[^\"]+\")"
-      MPI_LIBNAMES "${MPI_LINK_CMDLINE}")
-
-    foreach(_MPI_LIB_NAME IN LISTS MPI_LIBNAMES)
-      string(REGEX REPLACE "^ ?${CMAKE_LINK_LIBRARY_FLAG}" "" _MPI_LIB_NAME "${_MPI_LIB_NAME}")
-      string(REPLACE "\"" "" _MPI_LIB_NAME "${_MPI_LIB_NAME}")
-      list(APPEND MPI_LIB_NAMES_WORK "${_MPI_LIB_NAME}")
-    endforeach()
-  endif()
-
-  # Treat linker objects given by full path, for example static libraries, import libraries
-  # or shared libraries if there aren't any import libraries in use on the system.
-  # Note that we do not consider CMAKE_<TYPE>_LIBRARY_PREFIX intentionally here: The linker will for a given file
-  # decide how to link it based on file type, not based on a prefix like 'lib'.
-  set(_MPI_LIB_SUFFIX_REGEX "${CMAKE_STATIC_LIBRARY_SUFFIX}")
-  if(DEFINED CMAKE_IMPORT_LIBRARY_SUFFIX)
-    if(NOT ("${CMAKE_IMPORT_LIBRARY_SUFFIX}" STREQUAL "${CMAKE_STATIC_LIBRARY_SUFFIX}"))
-      string(APPEND _MPI_SUFFIX_REGEX "|${CMAKE_IMPORT_LIBRARY_SUFFIX}")
-    endif()
-  else()
-    string(APPEND _MPI_LIB_SUFFIX_REGEX "|${CMAKE_SHARED_LIBRARY_SUFFIX}")
-  endif()
-  set(_MPI_LIB_NAME_REGEX "(([^\" ]+(${_MPI_LIB_SUFFIX_REGEX}))|(\"[^\"]+(${_MPI_LIB_SUFFIX_REGEX})\"))( +|$)")
-  string(REPLACE "." "\\." _MPI_LIB_NAME_REGEX "${_MPI_LIB_NAME_REGEX}")
-
-  string(REGEX MATCHALL "${_MPI_LIB_NAME_REGEX}" MPI_LIBNAMES "${MPI_LINK_CMDLINE}")
-  foreach(_MPI_LIB_NAME IN LISTS MPI_LIBNAMES)
-    string(REGEX REPLACE "^ +\"?|\"? +$" "" _MPI_LIB_NAME "${_MPI_LIB_NAME}")
-    get_filename_component(_MPI_LIB_PATH "${_MPI_LIB_NAME}" DIRECTORY)
-    if(NOT "${_MPI_LIB_PATH}" STREQUAL "")
-      list(APPEND MPI_LIB_FULLPATHS_WORK "${_MPI_LIB_NAME}")
-    else()
-      list(APPEND MPI_LIB_NAMES_WORK "${_MPI_LIB_NAME}")
-    endif()
-  endforeach()
-
-  # Save the explicitly given link directories
-  set(MPI_LINK_DIRECTORIES_LEFTOVER "${MPI_LINK_DIRECTORIES_WORK}")
-
-  # An MPI compiler wrapper could have its MPI libraries in the implictly
-  # linked directories of the compiler itself.
-  if(DEFINED CMAKE_${LANG}_IMPLICIT_LINK_DIRECTORIES)
-    list(APPEND MPI_LINK_DIRECTORIES_WORK "${CMAKE_${LANG}_IMPLICIT_LINK_DIRECTORIES}")
-  endif()
-
-  # Determine full path names for all of the libraries that one needs
-  # to link against in an MPI program
-  unset(MPI_PLAIN_LIB_NAMES_WORK)
-  foreach(_MPI_LIB_NAME IN LISTS MPI_LIB_NAMES_WORK)
-    get_filename_component(_MPI_PLAIN_LIB_NAME "${_MPI_LIB_NAME}" NAME_WE)
-    list(APPEND MPI_PLAIN_LIB_NAMES_WORK "${_MPI_PLAIN_LIB_NAME}")
-    find_library(MPI_${_MPI_PLAIN_LIB_NAME}_LIBRARY
-      NAMES "${_MPI_LIB_NAME}" "lib${_MPI_LIB_NAME}"
-      HINTS ${MPI_LINK_DIRECTORIES_WORK}
-      DOC "Location of the ${_MPI_PLAIN_LIB_NAME} library for MPI"
-    )
-    mark_as_advanced(MPI_${_MPI_PLAIN_LIB_NAME}_LIBRARY)
-    # Remove the directory from the remainder list.
-    if(MPI_${_MPI_PLAIN_LIB_NAME}_LIBRARY)
-      get_filename_component(_MPI_TAKEN_DIRECTORY "${MPI_${_MPI_PLAIN_LIB_NAME}_LIBRARY}" DIRECTORY)
-      list(REMOVE_ITEM MPI_LINK_DIRECTORIES_LEFTOVER "${_MPI_TAKEN_DIRECTORY}")
-    endif()
-  endforeach()
-
-  # Add the link directories given explicitly that we haven't used back as linker directories.
-  if(NOT WIN32)
-    foreach(_MPI_LINK_DIRECTORY IN LISTS MPI_LINK_DIRECTORIES_LEFTOVER)
-      file(TO_NATIVE_PATH "${_MPI_LINK_DIRECTORY}" _MPI_LINK_DIRECTORY_ACTUAL)
-      string(FIND "${_MPI_LINK_DIRECTORY_ACTUAL}" " " _MPI_LINK_DIRECTORY_CONTAINS_SPACE)
-      if(NOT _MPI_LINK_DIRECTORY_CONTAINS_SPACE EQUAL -1)
-        set(_MPI_LINK_DIRECTORY_ACTUAL "\"${_MPI_LINK_DIRECTORY_ACTUAL}\"")
-      endif()
-      if(MPI_LINK_FLAGS_WORK)
-        string(APPEND MPI_LINK_FLAGS_WORK " ${CMAKE_LIBRARY_PATH_FLAG}${_MPI_LINK_DIRECTORY_ACTUAL}")
-      else()
-        set(MPI_LINK_FLAGS_WORK "${CMAKE_LIBRARY_PATH_FLAG}${_MPI_LINK_DIRECTORY_ACTUAL}")
-      endif()
-    endforeach()
-  endif()
-
-  # Deal with the libraries given with full path next
-  unset(MPI_DIRECT_LIB_NAMES_WORK)
-  foreach(_MPI_LIB_FULLPATH IN LISTS MPI_LIB_FULLPATHS_WORK)
-    get_filename_component(_MPI_PLAIN_LIB_NAME "${_MPI_LIB_FULLPATH}" NAME_WE)
-    list(APPEND MPI_DIRECT_LIB_NAMES_WORK "${_MPI_PLAIN_LIB_NAME}")
-    set(MPI_${_MPI_PLAIN_LIB_NAME}_LIBRARY "${_MPI_LIB_FULLPATH}" CACHE FILEPATH "Location of the ${_MPI_PLAIN_LIB_NAME} library for MPI")
-    mark_as_advanced(MPI_${_MPI_PLAIN_LIB_NAME}_LIBRARY)
-  endforeach()
-  # Directly linked objects should be linked first in case some generic linker flags are needed for them.
-  if(MPI_DIRECT_LIB_NAMES_WORK)
-    set(MPI_PLAIN_LIB_NAMES_WORK "${MPI_DIRECT_LIB_NAMES_WORK};${MPI_PLAIN_LIB_NAMES_WORK}")
-  endif()
-
-  # MPI might require pthread to work. The above mechanism wouldn't detect it, but we need to
-  # link it in that case. -lpthread is covered by the normal library treatment on the other hand.
-  if("${MPI_COMPILE_CMDLINE}" MATCHES "-pthread")
-    list(APPEND MPI_COMPILE_OPTIONS_WORK "-pthread")
-    if(MPI_LINK_FLAGS_WORK)
-      string(APPEND MPI_LINK_FLAGS_WORK " -pthread")
-    else()
-      set(MPI_LINK_FLAGS_WORK "-pthread")
-    endif()
-  endif()
-
-  if(MPI_${LANG}_EXTRA_COMPILE_DEFINITIONS)
-    list(APPEND MPI_COMPILE_DEFINITIONS_WORK "${MPI_${LANG}_EXTRA_COMPILE_DEFINITIONS}")
-  endif()
-  if(MPI_${LANG}_EXTRA_COMPILE_OPTIONS)
-    list(APPEND MPI_COMPILE_OPTIONS_WORK "${MPI_${LANG}_EXTRA_COMPILE_OPTIONS}")
-  endif()
-  if(MPI_${LANG}_EXTRA_LIB_NAMES)
-    list(APPEND MPI_PLAIN_LIB_NAMES_WORK "${MPI_${LANG}_EXTRA_LIB_NAMES}")
-  endif()
-
-  # If we found MPI, set up all of the appropriate cache entries
-  if(NOT MPI_${LANG}_COMPILE_OPTIONS)
-    set(MPI_${LANG}_COMPILE_OPTIONS          ${MPI_COMPILE_OPTIONS_WORK}     CACHE STRING "MPI ${LANG} compilation options"            FORCE)
-  endif()
-  if(NOT MPI_${LANG}_COMPILE_DEFINITIONS)
-    set(MPI_${LANG}_COMPILE_DEFINITIONS      ${MPI_COMPILE_DEFINITIONS_WORK} CACHE STRING "MPI ${LANG} compilation definitions"        FORCE)
-  endif()
-  if(NOT MPI_${LANG}_COMPILER_INCLUDE_DIRS)
-    set(MPI_${LANG}_COMPILER_INCLUDE_DIRS    ${MPI_INCLUDE_DIRS_WORK}        CACHE STRING "MPI ${LANG} compiler wrapper include directories" FORCE)
-  endif()
-  if(NOT MPI_${LANG}_LINK_FLAGS)
-    set(MPI_${LANG}_LINK_FLAGS               ${MPI_LINK_FLAGS_WORK}          CACHE STRING "MPI ${LANG} linker flags"                   FORCE)
-  endif()
-  if(NOT MPI_${LANG}_LIB_NAMES)
-    set(MPI_${LANG}_LIB_NAMES                ${MPI_PLAIN_LIB_NAMES_WORK}     CACHE STRING "MPI ${LANG} libraries to link against"      FORCE)
-  endif()
-  set(MPI_${LANG}_WRAPPER_FOUND TRUE PARENT_SCOPE)
-endfunction()
-
-function(_MPI_guess_settings LANG)
-  set(MPI_GUESS_FOUND FALSE)
-  # Currently only MSMPI and MPICH2 on Windows are supported, so we can skip this search if we're not targeting that.
-  if(WIN32)
-    # MSMPI
-
-    # The environment variables MSMPI_INC and MSMPILIB32/64 are the only ways of locating the MSMPI_SDK,
-    # which is installed separately from the runtime. Thus it's possible to have mpiexec but not MPI headers
-    # or import libraries and vice versa.
-    if(NOT MPI_GUESS_LIBRARY_NAME OR "${MPI_GUESS_LIBRARY_NAME}" STREQUAL "MSMPI")
-      # We first attempt to locate the msmpi.lib. Should be find it, we'll assume that the MPI present is indeed
-      # Microsoft MPI.
-      if("${CMAKE_SIZEOF_VOID_P}" EQUAL 8)
-        file(TO_CMAKE_PATH "$ENV{MSMPI_LIB64}" MPI_MSMPI_LIB_PATH)
-        file(TO_CMAKE_PATH "$ENV{MSMPI_INC}/x64" MPI_MSMPI_INC_PATH_EXTRA)
-      else()
-        file(TO_CMAKE_PATH "$ENV{MSMPI_LIB32}" MPI_MSMPI_LIB_PATH)
-        file(TO_CMAKE_PATH "$ENV{MSMPI_INC}/x86" MPI_MSMPI_INC_PATH_EXTRA)
-      endif()
-
-      find_library(MPI_msmpi_LIBRARY
-        NAMES msmpi
-        HINTS ${MPI_MSMPI_LIB_PATH}
-        DOC "Location of the msmpi library for Microsoft MPI")
-      mark_as_advanced(MPI_msmpi_LIBRARY)
-
-      if(MPI_msmpi_LIBRARY)
-        # Next, we attempt to locate the MPI header. Note that for Fortran we know that mpif.h is a way
-        # MSMPI can be used and therefore that header has to be present.
-        if(NOT MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS)
-          get_filename_component(MPI_MSMPI_INC_DIR "$ENV{MSMPI_INC}" REALPATH)
-          set(MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS "${MPI_MSMPI_INC_DIR}" CACHE STRING "MPI ${LANG} additional include directories" FORCE)
-          unset(MPI_MSMPI_INC_DIR)
-        endif()
-
-        # For MSMPI, one can compile the MPI module by building the mpi.f90 shipped with the MSMPI SDK,
-        # thus it might be present or provided by the user. Figuring out which is supported is done later on.
-        # The PGI Fortran compiler for instance ships a prebuilt set of modules in its own include folder.
-        # Should a user be employing PGI or have built its own set and provided it via cache variables, the
-        # splitting routine would have located the module files.
-
-        # For C and C++, we're done here (MSMPI does not ship the MPI-2 C++ bindings) - however, for Fortran
-        # we need some extra library to glue Fortran support together:
-        # MSMPI ships 2-4 Fortran libraries, each for different Fortran compiler behaviors. The library names
-        # ending with a c are using the cdecl calling convention, whereas those ending with an s are for Fortran
-        # implementations using stdcall. Therefore, the 64-bit MSMPI only ships those ending in 'c', whereas the 32-bit
-        # has both variants available.
-        # The second difference is the last but one letter, if it's an e(nd), the length of a string argument is
-        # passed by the Fortran compiler after all other arguments on the parameter list, if it's an m(ixed),
-        # it's passed immediately after the string address.
-
-        # To summarize:
-        #   - msmpifec: CHARACTER length passed after the parameter list and using cdecl calling convention
-        #   - msmpifmc: CHARACTER length passed directly after string address and using cdecl calling convention
-        #   - msmpifes: CHARACTER length passed after the parameter list and using stdcall calling convention
-        #   - msmpifms: CHARACTER length passed directly after string address and using stdcall calling convention
-        # 32-bit MSMPI ships all four libraries, 64-bit MSMPI ships only the first two.
-
-        # As is, Intel Fortran and PGI Fortran both use the 'ec' variant of the calling convention, whereas
-        # the old Compaq Visual Fortran compiler defaulted to the 'ms' version. It's possible to make Intel Fortran
-        # use the CVF calling convention using /iface:cvf, but we assume - and this is also assumed in FortranCInterface -
-        # this isn't the case. It's also possible to make CVF use the 'ec' variant, using /iface=(cref,nomixed_str_len_arg).
-
-        # Our strategy is now to locate all libraries, but enter msmpifec into the LIB_NAMES array.
-        # Should this not be adequate it's a straightforward way for a user to change the LIB_NAMES array and
-        # have his library found. Still, this should not be necessary outside of exceptional cases, as reasoned.
-        if ("${LANG}" STREQUAL "Fortran")
-          set(MPI_MSMPI_CALLINGCONVS c)
-          if("${CMAKE_SIZEOF_VOID_P}" EQUAL 4)
-            list(APPEND MPI_MSMPI_CALLINGCONVS s)
-          endif()
-          foreach(mpistrlenpos IN ITEMS e m)
-            foreach(mpicallingconv IN LISTS MPI_MSMPI_CALLINGCONVS)
-              find_library(MPI_msmpif${mpistrlenpos}${mpicallingconv}_LIBRARY
-                NAMES msmpif${mpistrlenpos}${mpicallingconv}
-                HINTS "${MPI_MSMPI_LIB_PATH}"
-                DOC "Location of the msmpi${mpistrlenpos}${mpicallingconv} library for Microsoft MPI")
-              mark_as_advanced(MPI_msmpif${mpistrlenpos}${mpicallingconv}_LIBRARY)
-            endforeach()
-          endforeach()
-          if(NOT MPI_${LANG}_LIB_NAMES)
-            set(MPI_${LANG}_LIB_NAMES "msmpi;msmpifec" CACHE STRING "MPI ${LANG} libraries to link against" FORCE)
-          endif()
-
-          # At this point we're *not* done. MSMPI requires an additional include file for Fortran giving the value
-          # of MPI_AINT. This file is called mpifptr.h located in the x64 and x86 subfolders, respectively.
-          find_path(MPI_mpifptr_INCLUDE_DIR
-            NAMES "mpifptr.h"
-            HINTS "${MPI_MSMPI_INC_PATH_EXTRA}"
-            DOC "Location of the mpifptr.h extra header for Microsoft MPI")
-          if(NOT MPI_${LANG}_ADDITIONAL_INCLUDE_VARS)
-            set(MPI_${LANG}_ADDITIONAL_INCLUDE_VARS "mpifptr" CACHE STRING "MPI ${LANG} additional include directory variables, given in the form MPI_<name>_INCLUDE_DIR." FORCE)
-          endif()
-          mark_as_advanced(MPI_${LANG}_ADDITIONAL_INCLUDE_VARS MPI_mpifptr_INCLUDE_DIR)
-        else()
-          if(NOT MPI_${LANG}_LIB_NAMES)
-            set(MPI_${LANG}_LIB_NAMES "msmpi" CACHE STRING "MPI ${LANG} libraries to link against" FORCE)
-          endif()
-        endif()
-        mark_as_advanced(MPI_${LANG}_LIB_NAMES)
-        set(MPI_GUESS_FOUND TRUE)
-
-        if(_MPIEXEC_NOT_GIVEN)
-          unset(MPIEXEC_EXECUTABLE CACHE)
-        endif()
-
-        find_program(MPIEXEC_EXECUTABLE
-          NAMES mpiexec
-          HINTS $ENV{MSMPI_BIN} "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\MPI;InstallRoot]/Bin"
-          DOC "Executable for running MPI programs.")
-      endif()
-    endif()
-
-    # At this point there's not many MPIs that we could still consider.
-    # OpenMPI 1.6.x and below supported Windows, but these ship compiler wrappers that still work.
-    # The only other relevant MPI implementation without a wrapper is MPICH2, which had Windows support in 1.4.1p1 and older.
-    if(NOT MPI_GUESS_FOUND AND (NOT MPI_GUESS_LIBRARY_NAME OR "${MPI_GUESS_LIBRARY_NAME}" STREQUAL "MPICH2"))
-      set(MPI_MPICH_PREFIX_PATHS
-        "$ENV{ProgramW6432}/MPICH2/lib"
-        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MPICH\\SMPD;binary]/../lib"
-        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MPICH2;Path]/lib"
-      )
-
-      # All of C, C++ and Fortran will need mpi.lib, so we'll look for this first
-      find_library(MPI_mpi_LIBRARY
-        NAMES mpi
-        HINTS ${MPI_MPICH_PREFIX_PATHS})
-      mark_as_advanced(MPI_mpi_LIBRARY)
-      # If we found mpi.lib, we detect the rest of MPICH2
-      if(MPI_mpi_LIBRARY)
-        set(MPI_MPICH_LIB_NAMES "mpi")
-        # If MPI-2 C++ bindings are requested, we need to locate cxx.lib as well.
-        # Otherwise, MPICH_SKIP_MPICXX will be defined and these bindings aren't needed.
-        if("${LANG}" STREQUAL "CXX" AND NOT MPI_CXX_SKIP_MPICXX)
-          find_library(MPI_cxx_LIBRARY
-            NAMES cxx
-            HINTS ${MPI_MPICH_PREFIX_PATHS})
-          mark_as_advanced(MPI_cxx_LIBRARY)
-          list(APPEND MPI_MPICH_LIB_NAMES "cxx")
-        # For Fortran, MPICH2 provides three different libraries:
-        #   fmpich2.lib which uses uppercase symbols and cdecl,
-        #   fmpich2s.lib which uses uppercase symbols and stdcall (32-bit only),
-        #   fmpich2g.lib which uses lowercase symbols with double underscores and cdecl.
-        # fmpich2s.lib would be useful for Compaq Visual Fortran, fmpich2g.lib has to be used with GNU g77 and is also
-        # provided in the form of an .a archive for MinGW and Cygwin. From our perspective, fmpich2.lib is the only one
-        # we need to try, and if it doesn't work with the given Fortran compiler we'd find out later on during validation
-        elseif("${LANG}" STREQUAL "Fortran")
-          find_library(MPI_fmpich2_LIBRARY
-            NAMES fmpich2
-            HINTS ${MPI_MPICH_PREFIX_PATHS})
-          find_library(MPI_fmpich2s_LIBRARY
-            NAMES fmpich2s
-            HINTS ${MPI_MPICH_PREFIX_PATHS})
-          find_library(MPI_fmpich2g_LIBRARY
-            NAMES fmpich2g
-            HINTS ${MPI_MPICH_PREFIX_PATHS})
-          mark_as_advanced(MPI_fmpich2_LIBRARY MPI_fmpich2s_LIBRARY MPI_fmpich2g_LIBRARY)
-          list(APPEND MPI_MPICH_LIB_NAMES "fmpich2")
-        endif()
-
-        if(NOT MPI_${LANG}_LIB_NAMES)
-          set(MPI_${LANG}_LIB_NAMES "${MPI_MPICH_LIB_NAMES}" CACHE STRING "MPI ${LANG} libraries to link against" FORCE)
-        endif()
-        unset(MPI_MPICH_LIB_NAMES)
-
-        if(NOT MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS)
-          # For MPICH2, the include folder would be in ../include relative to the library folder.
-          get_filename_component(MPI_MPICH_ROOT_DIR "${MPI_mpi_LIBRARY}" DIRECTORY)
-          get_filename_component(MPI_MPICH_ROOT_DIR "${MPI_MPICH_ROOT_DIR}" DIRECTORY)
-          if(IS_DIRECTORY "${MPI_MPICH_ROOT_DIR}/include")
-            set(MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS "${MPI_MPICH_ROOT_DIR}/include" CACHE STRING "MPI ${LANG} additional include directory variables, given in the form MPI_<name>_INCLUDE_DIR." FORCE)
-          endif()
-          unset(MPI_MPICH_ROOT_DIR)
-        endif()
-        set(MPI_GUESS_FOUND TRUE)
-
-        if(_MPIEXEC_NOT_GIVEN)
-          unset(MPIEXEC_EXECUTABLE CACHE)
-        endif()
-
-        find_program(MPIEXEC_EXECUTABLE
-          NAMES ${_MPIEXEC_NAMES}
-          HINTS "$ENV{ProgramW6432}/MPICH2/bin"
-                "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MPICH\\SMPD;binary]"
-                "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MPICH2;Path]/bin"
-          DOC "Executable for running MPI programs.")
-      endif()
-      unset(MPI_MPICH_PREFIX_PATHS)
-    endif()
-  endif()
-  set(MPI_${LANG}_GUESS_FOUND "${MPI_GUESS_FOUND}" PARENT_SCOPE)
-endfunction()
-
-function(_MPI_adjust_compile_definitions LANG)
-  if("${LANG}" STREQUAL "CXX")
-    # To disable the C++ bindings, we need to pass some definitions since the mpi.h header has to deal with both C and C++
-    # bindings in MPI-2.
-    if(MPI_CXX_SKIP_MPICXX AND NOT MPI_${LANG}_COMPILE_DEFINITIONS MATCHES "SKIP_MPICXX")
-      # MPICH_SKIP_MPICXX is being used in MPICH and derivatives like MVAPICH or Intel MPI
-      # OMPI_SKIP_MPICXX is being used in Open MPI
-      # _MPICC_H is being used for IBM Platform MPI
-      list(APPEND MPI_${LANG}_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX" "OMPI_SKIP_MPICXX" "_MPICC_H")
-      set(MPI_${LANG}_COMPILE_DEFINITIONS "${MPI_${LANG}_COMPILE_DEFINITIONS}" CACHE STRING "MPI ${LANG} compilation definitions" FORCE)
-    endif()
-  endif()
-endfunction()
-
-macro(_MPI_assemble_libraries LANG)
-  set(MPI_${LANG}_LIBRARIES "")
-  # Only for libraries do we need to check whether the compiler's linking stage is separate.
-  if(NOT "${MPI_${LANG}_COMPILER}" STREQUAL "${CMAKE_${LANG}_COMPILER}" OR NOT MPI_${LANG}_WORKS_IMPLICIT)
-    foreach(mpilib IN LISTS MPI_${LANG}_LIB_NAMES)
-      list(APPEND MPI_${LANG}_LIBRARIES ${MPI_${mpilib}_LIBRARY})
-    endforeach()
-  endif()
-endmacro()
-
-macro(_MPI_assemble_include_dirs LANG)
-  set(MPI_${LANG}_INCLUDE_DIRS
-    ${MPI_${LANG}_COMPILER_INCLUDE_DIRS}
-    ${MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS}
-    )
-  if("${LANG}" MATCHES "(C|CXX)")
-    if(MPI_${LANG}_HEADER_DIR)
-      list(APPEND MPI_${LANG}_INCLUDE_DIRS "${MPI_${LANG}_HEADER_DIR}")
-    endif()
-  else() # Fortran
-    if(MPI_${LANG}_F77_HEADER_DIR)
-      list(APPEND MPI_${LANG}_INCLUDE_DIRS "${MPI_${LANG}_F77_HEADER_DIR}")
-    endif()
-    if(MPI_${LANG}_MODULE_DIR)
-      list(APPEND MPI_${LANG}_INCLUDE_DIRS "${MPI_${LANG}_MODULE_DIR}")
-    endif()
-  endif()
-  if(MPI_${LANG}_INCLUDE_DIRS)
-    list(REMOVE_DUPLICATES MPI_${LANG}_INCLUDE_DIRS)
-  endif()
-endmacro()
-
-macro(_MPI_split_include_dirs LANG)
-  # Backwards compatibility: Search INCLUDE_PATH if given.
-  if(MPI_${LANG}_INCLUDE_PATH)
-    list(APPEND MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS "${MPI_${LANG}_INCLUDE_PATH}")
-  endif()
-
-  # We try to find the headers/modules among those paths (and system paths)
-  # For C/C++, we just need to have a look for mpi.h.
-  if("${LANG}" MATCHES "(C|CXX)")
-    find_path(MPI_${LANG}_HEADER_DIR "mpi.h"
-      HINTS
-        ${MPI_${LANG}_COMPILER_INCLUDE_DIRS}
-        ${MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS}
-    )
-    mark_as_advanced(MPI_${LANG}_HEADER_DIR)
-    if(MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS)
-      list(REMOVE_ITEM MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS "${MPI_${LANG}_HEADER_DIR}")
-    endif()
-
-  # Fortran is more complicated here: An implementation could provide
-  # any of the Fortran 77/90/2008 APIs for MPI. For example, MSMPI
-  # only provides Fortran 77 and - if mpi.f90 is built - potentially
-  # a Fortran 90 module.
-  elseif("${LANG}" STREQUAL "Fortran")
-    find_path(MPI_${LANG}_F77_HEADER_DIR "mpif.h"
-      HINTS
-        ${MPI_${LANG}_COMPILER_INCLUDE_DIRS}
-        ${MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS}
-    )
-    find_path(MPI_${LANG}_MODULE_DIR
-      NAMES "mpi.mod" "mpi_f08.mod"
-      HINTS
-        ${MPI_${LANG}_COMPILER_INCLUDE_DIRS}
-        ${MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS}
-    )
-    if(MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS)
-      list(REMOVE_ITEM MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS
-        "${MPI_${LANG}_F77_HEADER_DIR}"
-        "${MPI_${LANG}_MODULE_DIR}"
-      )
-    endif()
-    mark_as_advanced(MPI_${LANG}_F77_HEADER_DIR MPI_${LANG}_MODULE_DIR)
-  endif()
-
-  # Remove duplicates and default system directories from the list.
-  if(MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS)
-    list(REMOVE_DUPLICATES MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS)
-    foreach(MPI_IMPLICIT_INC_DIR IN LISTS CMAKE_${LANG}_IMPLICIT_LINK_DIRECTORIES)
-      list(REMOVE_ITEM MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS ${MPI_IMPLICIT_INC_DIR})
-    endforeach()
-  endif()
-
-  set(MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS ${MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS} CACHE STRING "MPI ${LANG} additional include directories" FORCE)
-endmacro()
-
-macro(_MPI_create_imported_target LANG)
-  if(NOT TARGET MPI::MPI_${LANG})
-    add_library(MPI::MPI_${LANG} INTERFACE IMPORTED)
-  endif()
-
-  # When this is consumed for compiling CUDA, use '-Xcompiler' to wrap '-pthread' and '-fexceptions'.
-  string(REPLACE "-pthread" "$<$<COMPILE_LANG_AND_ID:CUDA,NVIDIA>:SHELL:-Xcompiler >-pthread"
-    _MPI_${LANG}_COMPILE_OPTIONS "${MPI_${LANG}_COMPILE_OPTIONS}")
-  string(REPLACE "-fexceptions" "$<$<COMPILE_LANG_AND_ID:CUDA,NVIDIA>:SHELL:-Xcompiler >-fexceptions"
-    _MPI_${LANG}_COMPILE_OPTIONS "${MPI_${LANG}_COMPILE_OPTIONS}")
-  set_property(TARGET MPI::MPI_${LANG} PROPERTY INTERFACE_COMPILE_OPTIONS "${_MPI_${LANG}_COMPILE_OPTIONS}")
-  unset(_MPI_${LANG}_COMPILE_OPTIONS)
-
-  set_property(TARGET MPI::MPI_${LANG} PROPERTY INTERFACE_COMPILE_DEFINITIONS "${MPI_${LANG}_COMPILE_DEFINITIONS}")
-
-  if(MPI_${LANG}_LINK_FLAGS)
-    string(REPLACE "-pthread" "$<$<LINK_LANG_AND_ID:CUDA,NVIDIA>:-Xlinker >-pthread"
-      _MPI_${LANG}_LINK_FLAGS "${MPI_${LANG}_LINK_FLAGS}")
-    set_property(TARGET MPI::MPI_${LANG} PROPERTY INTERFACE_LINK_OPTIONS "SHELL:${MPI_${LANG}_LINK_FLAGS}")
-  endif()
-  # If the compiler links MPI implicitly, no libraries will be found as they're contained within
-  # CMAKE_<LANG>_IMPLICIT_LINK_LIBRARIES already.
-  if(MPI_${LANG}_LIBRARIES)
-    set_property(TARGET MPI::MPI_${LANG} PROPERTY INTERFACE_LINK_LIBRARIES "${MPI_${LANG}_LIBRARIES}")
-  endif()
-  # Given the new design of FindMPI, INCLUDE_DIRS will always be located, even under implicit linking.
-  set_property(TARGET MPI::MPI_${LANG} PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${MPI_${LANG}_INCLUDE_DIRS}")
-endmacro()
-
-function(_MPI_try_staged_settings LANG MPI_TEST_FILE_NAME MODE RUN_BINARY SUPPRESS_ERRORS)
-  set(WORK_DIR "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/FindMPI")
-  set(SRC_DIR "${CMAKE_ROOT}/Modules/FindMPI")
-  set(BIN_FILE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/FindMPI/${MPI_TEST_FILE_NAME}_${LANG}.bin")
-  unset(MPI_TEST_COMPILE_DEFINITIONS)
-  if("${LANG}" STREQUAL "Fortran")
-    if("${MODE}" STREQUAL "F90_MODULE")
-      set(MPI_Fortran_INCLUDE_LINE "use mpi\n      implicit none")
-    elseif("${MODE}" STREQUAL "F08_MODULE")
-      set(MPI_Fortran_INCLUDE_LINE "use mpi_f08\n      implicit none")
-    else() # F77 header
-      set(MPI_Fortran_INCLUDE_LINE "implicit none\n      include 'mpif.h'")
-    endif()
-    configure_file("${SRC_DIR}/${MPI_TEST_FILE_NAME}.f90.in" "${WORK_DIR}/${MPI_TEST_FILE_NAME}.f90" @ONLY)
-    set(MPI_TEST_SOURCE_FILE "${WORK_DIR}/${MPI_TEST_FILE_NAME}.f90")
-  elseif("${LANG}" STREQUAL "CXX")
-    configure_file("${SRC_DIR}/${MPI_TEST_FILE_NAME}.c" "${WORK_DIR}/${MPI_TEST_FILE_NAME}.cpp" COPYONLY)
-    set(MPI_TEST_SOURCE_FILE "${WORK_DIR}/${MPI_TEST_FILE_NAME}.cpp")
-    if("${MODE}" STREQUAL "TEST_MPICXX")
-      set(MPI_TEST_COMPILE_DEFINITIONS TEST_MPI_MPICXX)
-    endif()
-  else() # C
-    set(MPI_TEST_SOURCE_FILE "${SRC_DIR}/${MPI_TEST_FILE_NAME}.c")
-  endif()
-  if(RUN_BINARY)
-    try_run(MPI_RUN_RESULT_${LANG}_${MPI_TEST_FILE_NAME}_${MODE} MPI_RESULT_${LANG}_${MPI_TEST_FILE_NAME}_${MODE}
-     "${CMAKE_BINARY_DIR}" SOURCES "${MPI_TEST_SOURCE_FILE}"
-      COMPILE_DEFINITIONS ${MPI_TEST_COMPILE_DEFINITIONS}
-      LINK_LIBRARIES MPI::MPI_${LANG}
-      RUN_OUTPUT_VARIABLE MPI_RUN_OUTPUT_${LANG}_${MPI_TEST_FILE_NAME}_${MODE}
-      COMPILE_OUTPUT_VARIABLE _MPI_TRY_${MPI_TEST_FILE_NAME}_${MODE}_OUTPUT)
-    set(MPI_RUN_OUTPUT_${LANG}_${MPI_TEST_FILE_NAME}_${MODE} "${MPI_RUN_OUTPUT_${LANG}_${MPI_TEST_FILE_NAME}_${MODE}}" PARENT_SCOPE)
-  else()
-    try_compile(MPI_RESULT_${LANG}_${MPI_TEST_FILE_NAME}_${MODE}
-      "${CMAKE_BINARY_DIR}" SOURCES "${MPI_TEST_SOURCE_FILE}"
-      COMPILE_DEFINITIONS ${MPI_TEST_COMPILE_DEFINITIONS}
-      LINK_LIBRARIES MPI::MPI_${LANG}
-      COPY_FILE "${BIN_FILE}"
-      OUTPUT_VARIABLE _MPI_TRY_${MPI_TEST_FILE_NAME}_${MODE}_OUTPUT)
-  endif()
-  if(NOT SUPPRESS_ERRORS)
-    if(NOT MPI_RESULT_${LANG}_${MPI_TEST_FILE_NAME}_${MODE})
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-          "The MPI test ${MPI_TEST_FILE_NAME} for ${LANG} in mode ${MODE} failed to compile with the following output:\n${_MPI_TRY_${MPI_TEST_FILE_NAME}_${MODE}_OUTPUT}\n\n")
-    elseif(DEFINED MPI_RUN_RESULT_${LANG}_${MPI_TEST_FILE_NAME}_${MODE} AND MPI_RUN_RESULT_${LANG}_${MPI_TEST_FILE_NAME}_${MODE})
-        file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-          "The MPI test ${MPI_TEST_FILE_NAME} for ${LANG} in mode ${MODE} failed to run with the following output:\n${MPI_RUN_OUTPUT_${LANG}_${MPI_TEST_FILE_NAME}_${MODE}}\n\n")
-    endif()
-  endif()
-endfunction()
-
-macro(_MPI_check_lang_works LANG SUPPRESS_ERRORS)
-  # For Fortran we may have by the MPI-3 standard an implementation that provides:
-  #   - the mpi_f08 module
-  #   - *both*, the mpi module and 'mpif.h'
-  # Since older MPI standards (MPI-1) did not define anything but 'mpif.h', we need to check all three individually.
-  if( NOT MPI_${LANG}_WORKS )
-    if("${LANG}" STREQUAL "Fortran")
-      set(MPI_Fortran_INTEGER_LINE "(kind=MPI_INTEGER_KIND)")
-      _MPI_try_staged_settings(${LANG} test_mpi F77_HEADER FALSE ${SUPPRESS_ERRORS})
-      _MPI_try_staged_settings(${LANG} test_mpi F90_MODULE FALSE ${SUPPRESS_ERRORS})
-      _MPI_try_staged_settings(${LANG} test_mpi F08_MODULE FALSE ${SUPPRESS_ERRORS})
-
-      set(MPI_${LANG}_WORKS FALSE)
-
-      foreach(mpimethod IN ITEMS F77_HEADER F08_MODULE F90_MODULE)
-        if(MPI_RESULT_${LANG}_test_mpi_${mpimethod})
-          set(MPI_${LANG}_WORKS TRUE)
-          set(MPI_${LANG}_HAVE_${mpimethod} TRUE)
-        else()
-          set(MPI_${LANG}_HAVE_${mpimethod} FALSE)
-        endif()
-      endforeach()
-      # MPI-1 versions had no MPI_INTGER_KIND defined, so we need to try without it.
-      # However, MPI-1 also did not define the Fortran 90 and 08 modules, so we only try the F77 header.
-      unset(MPI_Fortran_INTEGER_LINE)
-      if(NOT MPI_${LANG}_WORKS)
-        _MPI_try_staged_settings(${LANG} test_mpi F77_HEADER_NOKIND FALSE ${SUPPRESS_ERRORS})
-        if(MPI_RESULT_${LANG}_test_mpi_F77_HEADER_NOKIND)
-          set(MPI_${LANG}_WORKS TRUE)
-          set(MPI_${LANG}_HAVE_F77_HEADER TRUE)
-        endif()
-      endif()
-    else()
-      _MPI_try_staged_settings(${LANG} test_mpi normal FALSE ${SUPPRESS_ERRORS})
-      # If 'test_mpi' built correctly, we've found valid MPI settings. There might not be MPI-2 C++ support, but there can't
-      # be MPI-2 C++ support without the C bindings being present, so checking for them is sufficient.
-      set(MPI_${LANG}_WORKS "${MPI_RESULT_${LANG}_test_mpi_normal}")
-    endif()
-  endif()
-endmacro()
-
-# Some systems install various MPI implementations in separate folders in some MPI prefix
-# This macro enumerates all such subfolders and adds them to the list of hints that will be searched.
-macro(MPI_search_mpi_prefix_folder PREFIX_FOLDER)
-  if(EXISTS "${PREFIX_FOLDER}")
-    file(GLOB _MPI_folder_children RELATIVE "${PREFIX_FOLDER}" "${PREFIX_FOLDER}/*")
-    foreach(_MPI_folder_child IN LISTS _MPI_folder_children)
-      if(IS_DIRECTORY "${PREFIX_FOLDER}/${_MPI_folder_child}")
-        list(APPEND MPI_HINT_DIRS "${PREFIX_FOLDER}/${_MPI_folder_child}")
-      endif()
-    endforeach()
-  endif()
-endmacro()
-
-set(MPI_HINT_DIRS ${MPI_HOME} $ENV{MPI_HOME} $ENV{I_MPI_ROOT})
-if("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Linux")
-  # SUSE Linux Enterprise Server stores its MPI implementations under /usr/lib64/mpi/gcc/<name>
-  # We enumerate the subfolders and append each as a prefix
-  MPI_search_mpi_prefix_folder("/usr/lib64/mpi/gcc")
-elseif("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "FreeBSD")
-  # FreeBSD ships mpich under the normal system paths - but available openmpi implementations
-  # will be found in /usr/local/mpi/<name>
-  MPI_search_mpi_prefix_folder("/usr/local/mpi")
-endif()
-
-# Most MPI distributions have some form of mpiexec or mpirun which gives us something we can look for.
-# The MPI standard does not mandate the existence of either, but instead only makes requirements if a distribution
-# ships an mpiexec program (mpirun executables are not regulated by the standard).
-
-# We defer searching for mpiexec binaries belonging to guesses until later. By doing so, mismatches between mpiexec
-# and the MPI we found should be reduced.
-if(NOT MPIEXEC_EXECUTABLE)
-  set(_MPIEXEC_NOT_GIVEN TRUE)
-else()
-  set(_MPIEXEC_NOT_GIVEN FALSE)
-endif()
-
-find_program(MPIEXEC_EXECUTABLE
-  NAMES ${_MPIEXEC_NAMES}
-  PATH_SUFFIXES bin sbin
-  HINTS ${MPI_HINT_DIRS}
-  DOC "Executable for running MPI programs.")
-
-# call get_filename_component twice to remove mpiexec and the directory it exists in (typically bin).
-# This gives us a fairly reliable base directory to search for /bin /lib and /include from.
-get_filename_component(_MPI_BASE_DIR "${MPIEXEC_EXECUTABLE}" PATH)
-get_filename_component(_MPI_BASE_DIR "${_MPI_BASE_DIR}" PATH)
-
-# According to the MPI standard, section 8.8 -n is a guaranteed, and the only guaranteed way to
-# launch an MPI process using mpiexec if such a program exists.
-set(MPIEXEC_NUMPROC_FLAG "-n"  CACHE STRING "Flag used by MPI to specify the number of processes for mpiexec; the next option will be the number of processes.")
-set(MPIEXEC_PREFLAGS     ""    CACHE STRING "These flags will be directly before the executable that is being run by mpiexec.")
-set(MPIEXEC_POSTFLAGS    ""    CACHE STRING "These flags will be placed after all flags passed to mpiexec.")
-
-# Set the number of processes to the physical processor count
-cmake_host_system_information(RESULT _MPIEXEC_NUMPROCS QUERY NUMBER_OF_PHYSICAL_CORES)
-set(MPIEXEC_MAX_NUMPROCS "${_MPIEXEC_NUMPROCS}" CACHE STRING "Maximum number of processors available to run MPI applications.")
-unset(_MPIEXEC_NUMPROCS)
-mark_as_advanced(MPIEXEC_EXECUTABLE MPIEXEC_NUMPROC_FLAG MPIEXEC_PREFLAGS MPIEXEC_POSTFLAGS MPIEXEC_MAX_NUMPROCS)
-
-#=============================================================================
-# Backward compatibility input hacks.  Propagate the FindMPI hints to C and
-# CXX if the respective new versions are not defined.  Translate the old
-# MPI_LIBRARY and MPI_EXTRA_LIBRARY to respective MPI_${LANG}_LIBRARIES.
-#
-# Once we find the new variables, we translate them back into their old
-# equivalents below.
-if(NOT MPI_IGNORE_LEGACY_VARIABLES)
-  foreach (LANG IN ITEMS C CXX)
-    # Old input variables.
-    set(_MPI_OLD_INPUT_VARS COMPILER COMPILE_FLAGS INCLUDE_PATH LINK_FLAGS)
-
-    # Set new vars based on their old equivalents, if the new versions are not already set.
-    foreach (var ${_MPI_OLD_INPUT_VARS})
-      if (NOT MPI_${LANG}_${var} AND MPI_${var})
-        set(MPI_${LANG}_${var} "${MPI_${var}}")
-      endif()
-    endforeach()
-
-    # Chop the old compile flags into options and definitions
-
-    unset(MPI_${LANG}_EXTRA_COMPILE_DEFINITIONS)
-    unset(MPI_${LANG}_EXTRA_COMPILE_OPTIONS)
-    if(MPI_${LANG}_COMPILE_FLAGS)
-      separate_arguments(MPI_SEPARATE_FLAGS NATIVE_COMMAND "${MPI_${LANG}_COMPILE_FLAGS}")
-      foreach(_MPI_FLAG IN LISTS MPI_SEPARATE_FLAGS)
-        if("${_MPI_FLAG}" MATCHES "^ *-D([^ ]+)")
-          list(APPEND MPI_${LANG}_EXTRA_COMPILE_DEFINITIONS "${CMAKE_MATCH_1}")
-        else()
-          list(APPEND MPI_${LANG}_EXTRA_COMPILE_OPTIONS "${_MPI_FLAG}")
-        endif()
-      endforeach()
-      unset(MPI_SEPARATE_FLAGS)
-    endif()
-
-    # If a list of libraries was given, we'll split it into new-style cache variables
-    unset(MPI_${LANG}_EXTRA_LIB_NAMES)
-    if(NOT MPI_${LANG}_LIB_NAMES)
-      foreach(_MPI_LIB IN LISTS MPI_${LANG}_LIBRARIES MPI_LIBRARY MPI_EXTRA_LIBRARY)
-        if(_MPI_LIB)
-          get_filename_component(_MPI_PLAIN_LIB_NAME "${_MPI_LIB}" NAME_WE)
-          get_filename_component(_MPI_LIB_NAME "${_MPI_LIB}" NAME)
-          get_filename_component(_MPI_LIB_DIR "${_MPI_LIB}" DIRECTORY)
-          list(APPEND MPI_${LANG}_EXTRA_LIB_NAMES "${_MPI_PLAIN_LIB_NAME}")
-          find_library(MPI_${_MPI_PLAIN_LIB_NAME}_LIBRARY
-            NAMES "${_MPI_LIB_NAME}" "lib${_MPI_LIB_NAME}"
-            HINTS ${_MPI_LIB_DIR} $ENV{MPI_LIB}
-            DOC "Location of the ${_MPI_PLAIN_LIB_NAME} library for MPI"
-          )
-          mark_as_advanced(MPI_${_MPI_PLAIN_LIB_NAME}_LIBRARY)
-        endif()
-      endforeach()
-    endif()
-  endforeach()
-endif()
-#=============================================================================
-
-unset(MPI_VERSION)
-unset(MPI_VERSION_MAJOR)
-unset(MPI_VERSION_MINOR)
-
-unset(_MPI_MIN_VERSION)
-
-# If the user specified a library name we assume they prefer that library over a wrapper. If not, they can disable skipping manually.
-if(NOT DEFINED MPI_SKIP_COMPILER_WRAPPER AND MPI_GUESS_LIBRARY_NAME)
-  set(MPI_SKIP_COMPILER_WRAPPER TRUE)
-endif()
-
-# This loop finds the compilers and sends them off for interrogation.
-foreach(LANG IN ITEMS C CXX Fortran)
-  if(CMAKE_${LANG}_COMPILER_LOADED)
-    if(NOT MPI_FIND_COMPONENTS)
-      set(_MPI_FIND_${LANG} TRUE)
-    elseif( ${LANG} IN_LIST MPI_FIND_COMPONENTS)
-      set(_MPI_FIND_${LANG} TRUE)
-    elseif( ${LANG} STREQUAL CXX AND NOT MPI_CXX_SKIP_MPICXX AND MPICXX IN_LIST MPI_FIND_COMPONENTS )
-      set(_MPI_FIND_${LANG} TRUE)
-    else()
-      set(_MPI_FIND_${LANG} FALSE)
-    endif()
-  else()
-    set(_MPI_FIND_${LANG} FALSE)
-    string(APPEND _MPI_FAIL_REASON "MPI component '${LANG}' was requested, but language ${LANG} is not enabled.  ")
-  endif()
-  if(_MPI_FIND_${LANG})
-    if( ${LANG} STREQUAL CXX AND NOT MPICXX IN_LIST MPI_FIND_COMPONENTS )
-      set(MPI_CXX_SKIP_MPICXX FALSE CACHE BOOL "If true, the MPI-2 C++ bindings are disabled using definitions.")
-      mark_as_advanced(MPI_CXX_SKIP_MPICXX)
-    endif()
-    if(NOT (MPI_${LANG}_LIB_NAMES AND (MPI_${LANG}_INCLUDE_PATH OR MPI_${LANG}_INCLUDE_DIRS OR MPI_${LANG}_COMPILER_INCLUDE_DIRS)))
-      set(MPI_${LANG}_TRIED_IMPLICIT FALSE)
-      set(MPI_${LANG}_WORKS_IMPLICIT FALSE)
-      if(NOT MPI_${LANG}_COMPILER AND NOT MPI_ASSUME_NO_BUILTIN_MPI)
-        # Should the imported targets be empty, we effectively try whether the compiler supports MPI on its own, which is the case on e.g.
-        # Cray PrgEnv.
-        _MPI_create_imported_target(${LANG})
-        _MPI_check_lang_works(${LANG} TRUE)
-
-        # If the compiler can build MPI code on its own, it functions as an MPI compiler and we'll set the variable to point to it.
-        if(MPI_${LANG}_WORKS)
-          set(MPI_${LANG}_COMPILER "${CMAKE_${LANG}_COMPILER}" CACHE FILEPATH "MPI compiler for ${LANG}" FORCE)
-          set(MPI_${LANG}_WORKS_IMPLICIT TRUE)
-        endif()
-        set(MPI_${LANG}_TRIED_IMPLICIT TRUE)
-      endif()
-
-      if(NOT "${MPI_${LANG}_COMPILER}" STREQUAL "${CMAKE_${LANG}_COMPILER}" OR NOT MPI_${LANG}_WORKS)
-        set(MPI_${LANG}_WRAPPER_FOUND FALSE)
-        set(MPI_PINNED_COMPILER FALSE)
-
-        if(NOT MPI_SKIP_COMPILER_WRAPPER)
-          if(MPI_${LANG}_COMPILER)
-            # If the user supplies a compiler *name* instead of an absolute path, assume that we need to find THAT compiler.
-            if (NOT IS_ABSOLUTE "${MPI_${LANG}_COMPILER}")
-              # Get rid of our default list of names and just search for the name the user wants.
-              set(_MPI_${LANG}_COMPILER_NAMES "${MPI_${LANG}_COMPILER}")
-              unset(MPI_${LANG}_COMPILER CACHE)
-            endif()
-            # If the user specifies a compiler, we don't want to try to search libraries either.
-            set(MPI_PINNED_COMPILER TRUE)
-          endif()
-
-          # If we have an MPI base directory, we'll try all compiler names in that one first.
-          # This should prevent mixing different MPI environments
-          if(_MPI_BASE_DIR)
-            find_program(MPI_${LANG}_COMPILER
-              NAMES  ${_MPI_${LANG}_COMPILER_NAMES}
-              PATH_SUFFIXES bin sbin
-              HINTS  ${_MPI_BASE_DIR}
-              NO_DEFAULT_PATH
-              DOC    "MPI compiler for ${LANG}"
-            )
-          endif()
-
-          # If the base directory did not help (for example because the mpiexec isn't in the same directory as the compilers),
-          # we shall try searching in the default paths.
-          find_program(MPI_${LANG}_COMPILER
-            NAMES  ${_MPI_${LANG}_COMPILER_NAMES}
-            PATH_SUFFIXES bin sbin
-            DOC    "MPI compiler for ${LANG}"
-          )
-
-          if("${MPI_${LANG}_COMPILER}" STREQUAL "${CMAKE_${LANG}_COMPILER}")
-            set(MPI_PINNED_COMPILER TRUE)
-
-            # If we haven't made the implicit compiler test yet, perform it now.
-            if(NOT MPI_${LANG}_TRIED_IMPLICIT)
-              _MPI_create_imported_target(${LANG})
-              _MPI_check_lang_works(${LANG} TRUE)
-            endif()
-
-            # Should the MPI compiler not work implicitly for MPI, still interrogate it.
-            # Otherwise, MPI compilers for which CMake has separate linking stages, e.g. Intel MPI on Windows where link.exe is being used
-            # directly during linkage instead of CMAKE_<LANG>_COMPILER will not work.
-            if(NOT MPI_${LANG}_WORKS)
-              set(MPI_${LANG}_WORKS_IMPLICIT FALSE)
-              _MPI_interrogate_compiler(${LANG})
-            else()
-              set(MPI_${LANG}_WORKS_IMPLICIT TRUE)
-            endif()
-          elseif(MPI_${LANG}_COMPILER)
-            _MPI_interrogate_compiler(${LANG})
-          endif()
-        endif()
-
-        if(NOT MPI_PINNED_COMPILER AND NOT MPI_${LANG}_WRAPPER_FOUND)
-          # If MPI_PINNED_COMPILER wasn't given, and the MPI compiler we potentially found didn't work, we withdraw it.
-          set(MPI_${LANG}_COMPILER "MPI_${LANG}_COMPILER-NOTFOUND" CACHE FILEPATH "MPI compiler for ${LANG}" FORCE)
-          if(NOT MPI_SKIP_GUESSING)
-            # For C++, we may use the settings for C. Should a given compiler wrapper for C++ not exist, but one for C does, we copy over the
-            # settings for C. An MPI distribution that is in this situation would be IBM Platform MPI.
-            if("${LANG}" STREQUAL "CXX" AND MPI_C_WRAPPER_FOUND)
-              set(MPI_${LANG}_COMPILE_OPTIONS          ${MPI_C_COMPILE_OPTIONS}     CACHE STRING "MPI ${LANG} compilation options"           )
-              set(MPI_${LANG}_COMPILE_DEFINITIONS      ${MPI_C_COMPILE_DEFINITIONS} CACHE STRING "MPI ${LANG} compilation definitions"       )
-              set(MPI_${LANG}_COMPILER_INCLUDE_DIRS    ${MPI_C_INCLUDE_DIRS}        CACHE STRING "MPI ${LANG} compiler wrapper include directories")
-              set(MPI_${LANG}_LINK_FLAGS               ${MPI_C_LINK_FLAGS}          CACHE STRING "MPI ${LANG} linker flags"                  )
-              set(MPI_${LANG}_LIB_NAMES                ${MPI_C_LIB_NAMES}           CACHE STRING "MPI ${LANG} libraries to link against"     )
-            else()
-              _MPI_guess_settings(${LANG})
-            endif()
-          endif()
-        endif()
-      endif()
-    endif()
-
-    if(NOT "${MPI_${LANG}_COMPILER}" STREQUAL "${CMAKE_${LANG}_COMPILER}")
-      _MPI_split_include_dirs(${LANG})
-      _MPI_assemble_include_dirs(${LANG})
-    else()
-      set(MPI_${LANG}_INCLUDE_DIRS "")
-    endif()
-    _MPI_assemble_libraries(${LANG})
-
-    _MPI_adjust_compile_definitions(${LANG})
-    # We always create imported targets even if they're empty
-    _MPI_create_imported_target(${LANG})
-
-    if(NOT MPI_${LANG}_WORKS)
-      _MPI_check_lang_works(${LANG} FALSE)
-    endif()
-
-    # Next, we'll initialize the MPI variables that have not been previously set.
-    set(MPI_${LANG}_COMPILE_OPTIONS          "" CACHE STRING "MPI ${LANG} compilation flags"             )
-    set(MPI_${LANG}_COMPILE_DEFINITIONS      "" CACHE STRING "MPI ${LANG} compilation definitions"       )
-    set(MPI_${LANG}_COMPILER_INCLUDE_DIRS    "" CACHE STRING "MPI ${LANG} compiler wrapper include directories")
-    set(MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS  "" CACHE STRING "MPI ${LANG} additional include directories")
-    set(MPI_${LANG}_LINK_FLAGS               "" CACHE STRING "MPI ${LANG} linker flags"                  )
-    if(NOT MPI_${LANG}_COMPILER STREQUAL CMAKE_${LANG}_COMPILER)
-      set(MPI_${LANG}_LIB_NAMES                "" CACHE STRING "MPI ${LANG} libraries to link against"   )
-    endif()
-    mark_as_advanced(
-      MPI_${LANG}_COMPILE_OPTIONS
-      MPI_${LANG}_COMPILE_DEFINITIONS
-      MPI_${LANG}_LINK_FLAGS
-      MPI_${LANG}_LIB_NAMES
-      MPI_${LANG}_COMPILER_INCLUDE_DIRS
-      MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS
-      MPI_${LANG}_COMPILER
-      )
-
-    # If we've found MPI, then we'll perform additional analysis: Determine the MPI version, MPI library version, supported
-    # MPI APIs (i.e. MPI-2 C++ bindings). For Fortran we also need to find specific parameters if we're under MPI-3.
-    if(MPI_${LANG}_WORKS)
-      if("${LANG}" STREQUAL "CXX" AND NOT DEFINED MPI_MPICXX_FOUND)
-        if(NOT MPI_CXX_SKIP_MPICXX AND NOT MPI_CXX_VALIDATE_SKIP_MPICXX)
-          _MPI_try_staged_settings(${LANG} test_mpi MPICXX FALSE FALSE)
-          if(MPI_RESULT_${LANG}_test_mpi_MPICXX)
-            set(MPI_MPICXX_FOUND TRUE)
-          else()
-            set(MPI_MPICXX_FOUND FALSE)
-          endif()
-        else()
-          set(MPI_MPICXX_FOUND FALSE)
-        endif()
-      endif()
-
-      # At this point, we know the bindings present but not the MPI version or anything else.
-      if(NOT DEFINED MPI_${LANG}_VERSION)
-        unset(MPI_${LANG}_VERSION_MAJOR)
-        unset(MPI_${LANG}_VERSION_MINOR)
-      endif()
-      set(MPI_BIN_FOLDER ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/FindMPI)
-
-      # For Fortran, we'll want to use the most modern MPI binding to test capabilities other than the
-      # Fortran parameters, since those depend on the method of consumption.
-      # For C++, we can always use the C bindings, and should do so, since the C++ bindings do not exist in MPI-3
-      # whereas the C bindings do, and the C++ bindings never offered any feature advantage over their C counterparts.
-      if("${LANG}" STREQUAL "Fortran")
-        if(MPI_${LANG}_HAVE_F08_MODULE)
-          set(MPI_${LANG}_HIGHEST_METHOD F08_MODULE)
-        elseif(MPI_${LANG}_HAVE_F90_MODULE)
-          set(MPI_${LANG}_HIGHEST_METHOD F90_MODULE)
-        else()
-          set(MPI_${LANG}_HIGHEST_METHOD F77_HEADER)
-        endif()
-
-        # Another difference between C and Fortran is that we can't use the preprocessor to determine whether MPI_VERSION
-        # and MPI_SUBVERSION are provided. These defines did not exist in MPI 1.0 and 1.1 and therefore might not
-        # exist. For C/C++, test_mpi.c will handle the MPI_VERSION extraction, but for Fortran, we need mpiver.f90.
-        if(NOT DEFINED MPI_${LANG}_VERSION)
-          _MPI_try_staged_settings(${LANG} mpiver ${MPI_${LANG}_HIGHEST_METHOD} FALSE FALSE)
-          if(MPI_RESULT_${LANG}_mpiver_${MPI_${LANG}_HIGHEST_METHOD})
-            file(STRINGS ${MPI_BIN_FOLDER}/mpiver_${LANG}.bin _MPI_VERSION_STRING LIMIT_COUNT 1 REGEX "INFO:MPI-VER")
-            if("${_MPI_VERSION_STRING}" MATCHES ".*INFO:MPI-VER\\[([0-9]+)\\.([0-9]+)\\].*")
-              set(MPI_${LANG}_VERSION_MAJOR "${CMAKE_MATCH_1}")
-              set(MPI_${LANG}_VERSION_MINOR "${CMAKE_MATCH_2}")
-              set(MPI_${LANG}_VERSION "${MPI_${LANG}_VERSION_MAJOR}.${MPI_${LANG}_VERSION_MINOR}")
-            endif()
-          endif()
-        endif()
-
-        # Finally, we want to find out which capabilities a given interface supports, compare the MPI-3 standard.
-        # This is determined by interface specific parameters MPI_SUBARRAYS_SUPPORTED and MPI_ASYNC_PROTECTS_NONBLOCKING
-        # and might vary between the different methods of consumption.
-        if(MPI_DETERMINE_Fortran_CAPABILITIES AND NOT MPI_Fortran_CAPABILITIES_DETERMINED)
-          foreach(mpimethod IN ITEMS F08_MODULE F90_MODULE F77_HEADER)
-            if(MPI_${LANG}_HAVE_${mpimethod})
-              set(MPI_${LANG}_${mpimethod}_SUBARRAYS FALSE)
-              set(MPI_${LANG}_${mpimethod}_ASYNCPROT FALSE)
-              _MPI_try_staged_settings(${LANG} fortranparam_mpi ${mpimethod} TRUE FALSE)
-              if(MPI_RESULT_${LANG}_fortranparam_mpi_${mpimethod} AND
-                NOT "${MPI_RUN_RESULT_${LANG}_fortranparam_mpi_${mpimethod}}" STREQUAL "FAILED_TO_RUN")
-                if("${MPI_RUN_OUTPUT_${LANG}_fortranparam_mpi_${mpimethod}}" MATCHES
-                  ".*INFO:SUBARRAYS\\[ *([TF]) *\\]-ASYNCPROT\\[ *([TF]) *\\].*")
-                  if("${CMAKE_MATCH_1}" STREQUAL "T")
-                    set(MPI_${LANG}_${mpimethod}_SUBARRAYS TRUE)
-                  endif()
-                  if("${CMAKE_MATCH_2}" STREQUAL "T")
-                    set(MPI_${LANG}_${mpimethod}_ASYNCPROT TRUE)
-                  endif()
-                endif()
-              endif()
-            endif()
-          endforeach()
-          set(MPI_Fortran_CAPABILITIES_DETERMINED TRUE)
-        endif()
-      else()
-        set(MPI_${LANG}_HIGHEST_METHOD normal)
-
-        # By the MPI-2 standard, MPI_VERSION and MPI_SUBVERSION are valid for both C and C++ bindings.
-        if(NOT DEFINED MPI_${LANG}_VERSION)
-          file(STRINGS ${MPI_BIN_FOLDER}/test_mpi_${LANG}.bin _MPI_VERSION_STRING LIMIT_COUNT 1 REGEX "INFO:MPI-VER")
-          if("${_MPI_VERSION_STRING}" MATCHES ".*INFO:MPI-VER\\[([0-9]+)\\.([0-9]+)\\].*")
-            set(MPI_${LANG}_VERSION_MAJOR "${CMAKE_MATCH_1}")
-            set(MPI_${LANG}_VERSION_MINOR "${CMAKE_MATCH_2}")
-            set(MPI_${LANG}_VERSION "${MPI_${LANG}_VERSION_MAJOR}.${MPI_${LANG}_VERSION_MINOR}")
-          endif()
-        endif()
-      endif()
-
-      unset(MPI_BIN_FOLDER)
-
-      # At this point, we have dealt with determining the MPI version and parameters for each Fortran method available.
-      # The one remaining issue is to determine which MPI library is installed.
-      # Determining the version and vendor of the MPI library is only possible via MPI_Get_library_version() at runtime,
-      # and therefore we cannot do this while cross-compiling (a user may still define MPI_<lang>_LIBRARY_VERSION_STRING
-      # themselves and we'll attempt splitting it, which is equivalent to provide the try_run output).
-      # It's also worth noting that the installed version string can depend on the language, or on the system the binary
-      # runs on if MPI is not statically linked.
-      if(MPI_DETERMINE_LIBRARY_VERSION AND NOT MPI_${LANG}_LIBRARY_VERSION_STRING)
-        _MPI_try_staged_settings(${LANG} libver_mpi ${MPI_${LANG}_HIGHEST_METHOD} TRUE FALSE)
-        if(MPI_RESULT_${LANG}_libver_mpi_${MPI_${LANG}_HIGHEST_METHOD} AND
-          "${MPI_RUN_RESULT_${LANG}_libver_mpi_${MPI_${LANG}_HIGHEST_METHOD}}" EQUAL "0")
-          string(STRIP "${MPI_RUN_OUTPUT_${LANG}_libver_mpi_${MPI_${LANG}_HIGHEST_METHOD}}"
-            MPI_${LANG}_LIBRARY_VERSION_STRING)
-        else()
-          set(MPI_${LANG}_LIBRARY_VERSION_STRING "NOTFOUND")
-        endif()
-      endif()
-    endif()
-
-    set(MPI_${LANG}_FIND_QUIETLY ${MPI_FIND_QUIETLY})
-    set(MPI_${LANG}_FIND_VERSION ${MPI_FIND_VERSION})
-    set(MPI_${LANG}_FIND_VERSION_EXACT ${MPI_FIND_VERSION_EXACT})
-
-    unset(MPI_${LANG}_REQUIRED_VARS)
-    if (NOT "${MPI_${LANG}_COMPILER}" STREQUAL "${CMAKE_${LANG}_COMPILER}")
-      foreach(mpilibname IN LISTS MPI_${LANG}_LIB_NAMES)
-        list(APPEND MPI_${LANG}_REQUIRED_VARS "MPI_${mpilibname}_LIBRARY")
-      endforeach()
-      list(APPEND MPI_${LANG}_REQUIRED_VARS "MPI_${LANG}_LIB_NAMES")
-      if("${LANG}" STREQUAL "Fortran")
-        # For Fortran we only need one of the module or header directories to have *some* support for MPI.
-        if(NOT MPI_${LANG}_MODULE_DIR)
-          list(APPEND MPI_${LANG}_REQUIRED_VARS "MPI_${LANG}_F77_HEADER_DIR")
-        endif()
-        if(NOT MPI_${LANG}_F77_HEADER_DIR)
-          list(APPEND MPI_${LANG}_REQUIRED_VARS "MPI_${LANG}_MODULE_DIR")
-        endif()
-      else()
-        list(APPEND MPI_${LANG}_REQUIRED_VARS "MPI_${LANG}_HEADER_DIR")
-      endif()
-      if(MPI_${LANG}_ADDITIONAL_INCLUDE_VARS)
-        foreach(mpiincvar IN LISTS MPI_${LANG}_ADDITIONAL_INCLUDE_VARS)
-          list(APPEND MPI_${LANG}_REQUIRED_VARS "MPI_${mpiincvar}_INCLUDE_DIR")
-        endforeach()
-      endif()
-      # Append the works variable now. If the settings did not work, this will show up properly.
-      list(APPEND MPI_${LANG}_REQUIRED_VARS "MPI_${LANG}_WORKS")
-    else()
-      # If the compiler worked implicitly, use its path as output.
-      # Should the compiler variable be set, we also require it to work.
-      list(APPEND MPI_${LANG}_REQUIRED_VARS "MPI_${LANG}_COMPILER")
-      if(MPI_${LANG}_COMPILER)
-        list(APPEND MPI_${LANG}_REQUIRED_VARS "MPI_${LANG}_WORKS")
-      endif()
-    endif()
-    find_package_handle_standard_args(MPI_${LANG} NAME_MISMATCHED
-      REQUIRED_VARS ${MPI_${LANG}_REQUIRED_VARS}
-      VERSION_VAR MPI_${LANG}_VERSION)
-
-    if(DEFINED MPI_${LANG}_VERSION)
-      if(NOT _MPI_MIN_VERSION OR _MPI_MIN_VERSION VERSION_GREATER MPI_${LANG}_VERSION)
-        set(_MPI_MIN_VERSION MPI_${LANG}_VERSION)
-      endif()
-    endif()
-  endif()
-endforeach()
-
-unset(_MPI_REQ_VARS)
-foreach(LANG IN ITEMS C CXX Fortran)
-  if((NOT MPI_FIND_COMPONENTS AND CMAKE_${LANG}_COMPILER_LOADED) OR LANG IN_LIST MPI_FIND_COMPONENTS)
-    list(APPEND _MPI_REQ_VARS "MPI_${LANG}_FOUND")
-  endif()
-endforeach()
-
-if(MPICXX IN_LIST MPI_FIND_COMPONENTS)
-  list(APPEND _MPI_REQ_VARS "MPI_MPICXX_FOUND")
-endif()
-
-find_package_handle_standard_args(MPI
-    REQUIRED_VARS ${_MPI_REQ_VARS}
-    VERSION_VAR ${_MPI_MIN_VERSION}
-    REASON_FAILURE_MESSAGE "${_MPI_FAIL_REASON}"
-    HANDLE_COMPONENTS)
-
-#=============================================================================
-# More backward compatibility stuff
-
-# For compatibility reasons, we also define MPIEXEC
-set(MPIEXEC "${MPIEXEC_EXECUTABLE}")
-
-# Copy over MPI_<LANG>_INCLUDE_PATH from the assembled INCLUDE_DIRS.
-foreach(LANG IN ITEMS C CXX Fortran)
-  if(MPI_${LANG}_FOUND)
-    set(MPI_${LANG}_INCLUDE_PATH "${MPI_${LANG}_INCLUDE_DIRS}")
-    unset(MPI_${LANG}_COMPILE_FLAGS)
-    if(MPI_${LANG}_COMPILE_OPTIONS)
-      list(JOIN MPI_${LANG}_COMPILE_OPTIONS " " MPI_${LANG}_COMPILE_FLAGS)
-    endif()
-    if(MPI_${LANG}_COMPILE_DEFINITIONS)
-      foreach(_MPI_DEF IN LISTS MPI_${LANG}_COMPILE_DEFINITIONS)
-        string(APPEND MPI_${LANG}_COMPILE_FLAGS " -D${_MPI_DEF}")
-      endforeach()
-    endif()
-  endif()
-endforeach()
-
-# Bare MPI sans ${LANG} vars are set to CXX then C, depending on what was found.
-# This mimics the behavior of the old language-oblivious FindMPI.
-set(_MPI_OLD_VARS COMPILER INCLUDE_PATH COMPILE_FLAGS LINK_FLAGS LIBRARIES)
-if (MPI_CXX_FOUND)
-  foreach (var ${_MPI_OLD_VARS})
-    set(MPI_${var} ${MPI_CXX_${var}})
-  endforeach()
-elseif (MPI_C_FOUND)
-  foreach (var ${_MPI_OLD_VARS})
-    set(MPI_${var} ${MPI_C_${var}})
-  endforeach()
-endif()
-
-# Chop MPI_LIBRARIES into the old-style MPI_LIBRARY and MPI_EXTRA_LIBRARY, and set them in cache.
-if (MPI_LIBRARIES)
-  list(GET MPI_LIBRARIES 0 MPI_LIBRARY_WORK)
-  set(MPI_LIBRARY "${MPI_LIBRARY_WORK}")
-  unset(MPI_LIBRARY_WORK)
-else()
-  set(MPI_LIBRARY "MPI_LIBRARY-NOTFOUND")
-endif()
-
-list(LENGTH MPI_LIBRARIES MPI_NUMLIBS)
-if (MPI_NUMLIBS GREATER 1)
-  set(MPI_EXTRA_LIBRARY_WORK "${MPI_LIBRARIES}")
-  list(REMOVE_AT MPI_EXTRA_LIBRARY_WORK 0)
-  set(MPI_EXTRA_LIBRARY "${MPI_EXTRA_LIBRARY_WORK}")
-  unset(MPI_EXTRA_LIBRARY_WORK)
-else()
-  set(MPI_EXTRA_LIBRARY "MPI_EXTRA_LIBRARY-NOTFOUND")
-endif()
-set(MPI_IGNORE_LEGACY_VARIABLES TRUE)
-#=============================================================================
-
-# unset these vars to cleanup namespace
-unset(_MPI_OLD_VARS)
-unset(_MPI_PREFIX_PATH)
-unset(_MPI_BASE_DIR)
-foreach (lang C CXX Fortran)
-  unset(_MPI_${LANG}_COMPILER_NAMES)
-endforeach()
-
-cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/FindMPI/test_mpi.c b/share/cmake-3.18/Modules/FindMPI/test_mpi.c
deleted file mode 100644
index 7c96d54..0000000
--- a/share/cmake-3.18/Modules/FindMPI/test_mpi.c
+++ /dev/null
@@ -1,38 +0,0 @@
-#include <mpi.h>
-
-#ifdef __cplusplus
-#  include <cstdio>
-#else
-#  include <stdio.h>
-#endif
-
-#if defined(MPI_VERSION) && defined(MPI_SUBVERSION)
-const char mpiver_str[] = { 'I', 'N',
-                            'F', 'O',
-                            ':', 'M',
-                            'P', 'I',
-                            '-', 'V',
-                            'E', 'R',
-                            '[', ('0' + MPI_VERSION),
-                            '.', ('0' + MPI_SUBVERSION),
-                            ']', '\0' };
-#endif
-
-int main(int argc, char* argv[])
-{
-#if defined(MPI_VERSION) && defined(MPI_SUBVERSION)
-#  ifdef __cplusplus
-  std::puts(mpiver_str);
-#  else
-  puts(mpiver_str);
-#  endif
-#endif
-#ifdef TEST_MPI_MPICXX
-  MPI::MPI_Init(&argc, &argv);
-  MPI::MPI_Finalize();
-#else
-  MPI_Init(&argc, &argv);
-  MPI_Finalize();
-#endif
-  return 0;
-}
diff --git a/share/cmake-3.18/Modules/FindMatlab.cmake b/share/cmake-3.18/Modules/FindMatlab.cmake
deleted file mode 100644
index e42c206..0000000
--- a/share/cmake-3.18/Modules/FindMatlab.cmake
+++ /dev/null
@@ -1,1834 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindMatlab
-----------
-
-Finds Matlab or Matlab Compiler Runtime (MCR) and provides Matlab tools,
-libraries and compilers to CMake.
-
-This package primary purpose is to find the libraries associated with Matlab
-or the MCR in order to be able to build Matlab extensions (mex files). It
-can also be used:
-
-* to run specific commands in Matlab in case Matlab is available
-* for declaring Matlab unit test
-* to retrieve various information from Matlab (mex extensions, versions and
-  release queries, ...)
-
-The module supports the following components:
-
-* ``ENG_LIBRARY`` and ``MAT_LIBRARY``: respectively the ``ENG`` and ``MAT``
-  libraries of Matlab
-* ``MAIN_PROGRAM`` the Matlab binary program. Note that this component is not
-  available on the MCR version, and will yield an error if the MCR is found
-  instead of the regular Matlab installation.
-* ``MEX_COMPILER`` the MEX compiler.
-* ``MCC_COMPILER`` the MCC compiler, included with the Matlab Compiler add-on.
-* ``SIMULINK`` the Simulink environment.
-
-.. note::
-
-  The version given to the :command:`find_package` directive is the Matlab
-  **version**, which should not be confused with the Matlab *release* name
-  (eg. `R2014`).
-  The :command:`matlab_get_version_from_release_name` and
-  :command:`matlab_get_release_name_from_version` provide a mapping
-  between the release name and the version.
-
-The variable :variable:`Matlab_ROOT_DIR` may be specified in order to give
-the path of the desired Matlab version. Otherwise, the behaviour is platform
-specific:
-
-* Windows: The installed versions of Matlab/MCR are retrieved from the
-  Windows registry
-* OS X: The installed versions of Matlab/MCR are given by the MATLAB
-  default installation paths in ``/Application``. If no such application is
-  found, it falls back to the one that might be accessible from the ``PATH``.
-* Unix: The desired Matlab should be accessible from the ``PATH``. This does
-  not work for MCR installation and :variable:`Matlab_ROOT_DIR` should be
-  specified on this platform.
-
-Additional information is provided when :variable:`MATLAB_FIND_DEBUG` is set.
-When a Matlab/MCR installation is found automatically and the ``MATLAB_VERSION``
-is not given, the version is queried from Matlab directly (on Windows this
-may pop up a Matlab window) or from the MCR installation.
-
-The mapping of the release names and the version of Matlab is performed by
-defining pairs (name, version).  The variable
-:variable:`MATLAB_ADDITIONAL_VERSIONS` may be provided before the call to
-the :command:`find_package` in order to handle additional versions.
-
-A Matlab scripts can be added to the set of tests using the
-:command:`matlab_add_unit_test`. By default, the Matlab unit test framework
-will be used (>= 2013a) to run this script, but regular ``.m`` files
-returning an exit code can be used as well (0 indicating a success).
-
-Module Input Variables
-^^^^^^^^^^^^^^^^^^^^^^
-
-Users or projects may set the following variables to configure the module
-behaviour:
-
-:variable:`Matlab_ROOT_DIR`
-  the root of the Matlab installation.
-:variable:`MATLAB_FIND_DEBUG`
-  outputs debug information
-:variable:`MATLAB_ADDITIONAL_VERSIONS`
-  additional versions of Matlab for the automatic retrieval of the installed
-  versions.
-
-Variables defined by the module
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Result variables
-""""""""""""""""
-
-``Matlab_FOUND``
-  ``TRUE`` if the Matlab installation is found, ``FALSE``
-  otherwise. All variable below are defined if Matlab is found.
-``Matlab_ROOT_DIR``
-  the final root of the Matlab installation determined by the FindMatlab
-  module.
-``Matlab_MAIN_PROGRAM``
-  the Matlab binary program. Available only if the component ``MAIN_PROGRAM``
-  is given in the :command:`find_package` directive.
-``Matlab_INCLUDE_DIRS``
- the path of the Matlab libraries headers
-``Matlab_MEX_LIBRARY``
-  library for mex, always available.
-``Matlab_MX_LIBRARY``
-  mx library of Matlab (arrays), always available.
-``Matlab_ENG_LIBRARY``
-  Matlab engine library. Available only if the component ``ENG_LIBRARY``
-  is requested.
-``Matlab_MAT_LIBRARY``
-  Matlab matrix library. Available only if the component ``MAT_LIBRARY``
-  is requested.
-``Matlab_ENGINE_LIBRARY``
-  Matlab C++ engine library, always available for R2018a and newer.
-``Matlab_DATAARRAY_LIBRARY``
-  Matlab C++ data array library, always available for R2018a and newer.
-``Matlab_LIBRARIES``
-  the whole set of libraries of Matlab
-``Matlab_MEX_COMPILER``
-  the mex compiler of Matlab. Currently not used.
-  Available only if the component ``MEX_COMPILER`` is requested.
-``Matlab_MCC_COMPILER``
-  the mcc compiler of Matlab. Included with the Matlab Compiler add-on.
-  Available only if the component ``MCC_COMPILER`` is requested.
-
-Cached variables
-""""""""""""""""
-
-``Matlab_MEX_EXTENSION``
-  the extension of the mex files for the current platform (given by Matlab).
-``Matlab_ROOT_DIR``
-  the location of the root of the Matlab installation found. If this value
-  is changed by the user, the result variables are recomputed.
-
-Provided macros
-^^^^^^^^^^^^^^^
-
-:command:`matlab_get_version_from_release_name`
-  returns the version from the release name
-:command:`matlab_get_release_name_from_version`
-  returns the release name from the Matlab version
-
-Provided functions
-^^^^^^^^^^^^^^^^^^
-
-:command:`matlab_add_mex`
-  adds a target compiling a MEX file.
-:command:`matlab_add_unit_test`
-  adds a Matlab unit test file as a test to the project.
-:command:`matlab_extract_all_installed_versions_from_registry`
-  parses the registry for all Matlab versions. Available on Windows only.
-  The part of the registry parsed is dependent on the host processor
-:command:`matlab_get_all_valid_matlab_roots_from_registry`
-  returns all the possible Matlab or MCR paths, according to a previously
-  given list. Only the existing/accessible paths are kept. This is mainly
-  useful for the searching all possible Matlab installation.
-:command:`matlab_get_mex_suffix`
-  returns the suffix to be used for the mex files
-  (platform/architecture dependent)
-:command:`matlab_get_version_from_matlab_run`
-  returns the version of Matlab/MCR, given the full directory of the Matlab/MCR
-  installation path.
-
-
-Known issues
-^^^^^^^^^^^^
-
-**Symbol clash in a MEX target**
-  By default, every symbols inside a MEX
-  file defined with the command :command:`matlab_add_mex` have hidden
-  visibility, except for the entry point. This is the default behaviour of
-  the MEX compiler, which lowers the risk of symbol collision between the
-  libraries shipped with Matlab, and the libraries to which the MEX file is
-  linking to. This is also the default on Windows platforms.
-
-  However, this is not sufficient in certain case, where for instance your
-  MEX file is linking against libraries that are already loaded by Matlab,
-  even if those libraries have different SONAMES.
-  A possible solution is to hide the symbols of the libraries to which the
-  MEX target is linking to. This can be achieved in GNU GCC compilers with
-  the linker option ``-Wl,--exclude-libs,ALL``.
-
-**Tests using GPU resources**
-  in case your MEX file is using the GPU and
-  in order to be able to run unit tests on this MEX file, the GPU resources
-  should be properly released by Matlab. A possible solution is to make
-  Matlab aware of the use of the GPU resources in the session, which can be
-  performed by a command such as ``D = gpuDevice()`` at the beginning of
-  the test script (or via a fixture).
-
-
-Reference
-^^^^^^^^^
-
-.. variable:: Matlab_ROOT_DIR
-
-   The root folder of the Matlab installation. If set before the call to
-   :command:`find_package`, the module will look for the components in that
-   path. If not set, then an automatic search of Matlab
-   will be performed. If set, it should point to a valid version of Matlab.
-
-.. variable:: MATLAB_FIND_DEBUG
-
-   If set, the lookup of Matlab and the intermediate configuration steps are
-   outputted to the console.
-
-.. variable:: MATLAB_ADDITIONAL_VERSIONS
-
-  If set, specifies additional versions of Matlab that may be looked for.
-  The variable should be a list of strings, organised by pairs of release
-  name and versions, such as follows::
-
-    set(MATLAB_ADDITIONAL_VERSIONS
-        "release_name1=corresponding_version1"
-        "release_name2=corresponding_version2"
-        ...
-        )
-
-  Example::
-
-    set(MATLAB_ADDITIONAL_VERSIONS
-        "R2013b=8.2"
-        "R2013a=8.1"
-        "R2012b=8.0")
-
-  The order of entries in this list matters when several versions of
-  Matlab are installed. The priority is set according to the ordering in
-  this list.
-#]=======================================================================]
-
-cmake_policy(PUSH)
-cmake_policy(SET CMP0057 NEW) # if IN_LIST
-
-set(_FindMatlab_SELF_DIR "${CMAKE_CURRENT_LIST_DIR}")
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-include(CheckCXXCompilerFlag)
-include(CheckCCompilerFlag)
-
-
-# The currently supported versions. Other version can be added by the user by
-# providing MATLAB_ADDITIONAL_VERSIONS
-if(NOT MATLAB_ADDITIONAL_VERSIONS)
-  set(MATLAB_ADDITIONAL_VERSIONS)
-endif()
-
-set(MATLAB_VERSIONS_MAPPING
-  "R2020a=9.8"
-  "R2019b=9.7"
-  "R2019a=9.6"
-  "R2018b=9.5"
-  "R2018a=9.4"
-  "R2017b=9.3"
-  "R2017a=9.2"
-  "R2016b=9.1"
-  "R2016a=9.0"
-  "R2015b=8.6"
-  "R2015a=8.5"
-  "R2014b=8.4"
-  "R2014a=8.3"
-  "R2013b=8.2"
-  "R2013a=8.1"
-  "R2012b=8.0"
-  "R2012a=7.14"
-  "R2011b=7.13"
-  "R2011a=7.12"
-  "R2010b=7.11"
-
-  ${MATLAB_ADDITIONAL_VERSIONS}
-  )
-
-
-# temporary folder for all Matlab runs
-set(_matlab_temporary_folder ${CMAKE_BINARY_DIR}/Matlab)
-
-if(NOT EXISTS "${_matlab_temporary_folder}")
-  file(MAKE_DIRECTORY "${_matlab_temporary_folder}")
-endif()
-
-#[=======================================================================[.rst:
-.. command:: matlab_get_version_from_release_name
-
-  Returns the version of Matlab (17.58) from a release name (R2017k)
-#]=======================================================================]
-macro(matlab_get_version_from_release_name release_name version_name)
-
-  string(REGEX MATCHALL "${release_name}=([0-9]+\\.?[0-9]*)" _matched ${MATLAB_VERSIONS_MAPPING})
-
-  set(${version_name} "")
-  if(NOT _matched STREQUAL "")
-    set(${version_name} ${CMAKE_MATCH_1})
-  else()
-    message(WARNING "[MATLAB] The release name ${release_name} is not registered")
-  endif()
-  unset(_matched)
-
-endmacro()
-
-
-
-
-
-#[=======================================================================[.rst:
-.. command:: matlab_get_release_name_from_version
-
-  Returns the release name (R2017k) from the version of Matlab (17.58)
-#]=======================================================================]
-macro(matlab_get_release_name_from_version version release_name)
-
-  set(${release_name} "")
-  foreach(_var IN LISTS MATLAB_VERSIONS_MAPPING)
-    string(REGEX MATCHALL "(.+)=${version}" _matched ${_var})
-    if(NOT _matched STREQUAL "")
-      set(${release_name} ${CMAKE_MATCH_1})
-      break()
-    endif()
-  endforeach(_var)
-
-  unset(_var)
-  unset(_matched)
-  if(${release_name} STREQUAL "")
-    message(WARNING "[MATLAB] The version ${version} is not registered")
-  endif()
-
-endmacro()
-
-
-
-
-
-# extracts all the supported release names (R2017k...) of Matlab
-# internal use
-macro(matlab_get_supported_releases list_releases)
-  set(${list_releases})
-  foreach(_var IN LISTS MATLAB_VERSIONS_MAPPING)
-    string(REGEX MATCHALL "(.+)=([0-9]+\\.?[0-9]*)" _matched ${_var})
-    if(NOT _matched STREQUAL "")
-      list(APPEND ${list_releases} ${CMAKE_MATCH_1})
-    endif()
-    unset(_matched)
-    unset(CMAKE_MATCH_1)
-  endforeach(_var)
-  unset(_var)
-endmacro()
-
-
-
-# extracts all the supported versions of Matlab
-# internal use
-macro(matlab_get_supported_versions list_versions)
-  set(${list_versions})
-  foreach(_var IN LISTS MATLAB_VERSIONS_MAPPING)
-    string(REGEX MATCHALL "(.+)=([0-9]+\\.?[0-9]*)" _matched ${_var})
-    if(NOT _matched STREQUAL "")
-      list(APPEND ${list_versions} ${CMAKE_MATCH_2})
-    endif()
-    unset(_matched)
-    unset(CMAKE_MATCH_1)
-  endforeach(_var)
-  unset(_var)
-endmacro()
-
-
-#[=======================================================================[.rst:
-.. command:: matlab_extract_all_installed_versions_from_registry
-
-  This function parses the registry and founds the Matlab versions that are
-  installed. The found versions are returned in `matlab_versions`.
-  Set `win64` to `TRUE` if the 64 bit version of Matlab should be looked for
-  The returned list contains all versions under
-  ``HKLM\\SOFTWARE\\Mathworks\\MATLAB`` and
-  ``HKLM\\SOFTWARE\\Mathworks\\MATLAB Runtime`` or an empty list in case an
-  error occurred (or nothing found).
-
-  .. note::
-
-    Only the versions are provided. No check is made over the existence of the
-    installation referenced in the registry,
-
-#]=======================================================================]
-function(matlab_extract_all_installed_versions_from_registry win64 matlab_versions)
-
-  if(NOT CMAKE_HOST_WIN32)
-    message(FATAL_ERROR "[MATLAB] This macro can only be called by a windows host (call to reg.exe)")
-  endif()
-
-  if(${win64} AND CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "64")
-    set(APPEND_REG "/reg:64")
-  else()
-    set(APPEND_REG "/reg:32")
-  endif()
-
-  set(matlabs_from_registry)
-
-  foreach(_installation_type IN ITEMS "MATLAB" "MATLAB Runtime")
-
-    # /reg:64 should be added on 64 bits capable OSs in order to enable the
-    # redirection of 64 bits applications
-    execute_process(
-      COMMAND reg query HKEY_LOCAL_MACHINE\\SOFTWARE\\Mathworks\\${_installation_type} /f * /k ${APPEND_REG}
-      RESULT_VARIABLE resultMatlab
-      OUTPUT_VARIABLE varMatlab
-      ERROR_VARIABLE errMatlab
-      INPUT_FILE NUL
-      )
-
-
-    if(resultMatlab EQUAL 0)
-
-      string(
-        REGEX MATCHALL "MATLAB\\\\([0-9]+(\\.[0-9]+)?)"
-        matlab_versions_regex ${varMatlab})
-
-      foreach(match IN LISTS matlab_versions_regex)
-        string(
-          REGEX MATCH "MATLAB\\\\(([0-9]+)(\\.([0-9]+))?)"
-          current_match ${match})
-
-        set(_matlab_current_version ${CMAKE_MATCH_1})
-        set(current_matlab_version_major ${CMAKE_MATCH_2})
-        set(current_matlab_version_minor ${CMAKE_MATCH_4})
-        if(NOT current_matlab_version_minor)
-          set(current_matlab_version_minor "0")
-        endif()
-
-        list(APPEND matlabs_from_registry ${_matlab_current_version})
-        unset(_matlab_current_version)
-      endforeach()
-
-    endif()
-  endforeach()
-
-  if(matlabs_from_registry)
-    list(REMOVE_DUPLICATES matlabs_from_registry)
-    list(SORT matlabs_from_registry)
-    list(REVERSE matlabs_from_registry)
-  endif()
-
-  set(${matlab_versions} ${matlabs_from_registry} PARENT_SCOPE)
-
-endfunction()
-
-
-
-# (internal)
-macro(extract_matlab_versions_from_registry_brute_force matlab_versions)
-  # get the supported versions
-  set(matlab_supported_versions)
-  matlab_get_supported_versions(matlab_supported_versions)
-
-
-  # this is a manual population of the versions we want to look for
-  # this can be done as is, but preferably with the call to
-  # matlab_get_supported_versions and variable
-
-  # populating the versions we want to look for
-  # set(matlab_supported_versions)
-
-  # # Matlab 7
-  # set(matlab_major 7)
-  # foreach(current_matlab_minor RANGE 4 20)
-    # list(APPEND matlab_supported_versions "${matlab_major}.${current_matlab_minor}")
-  # endforeach(current_matlab_minor)
-
-  # # Matlab 8
-  # set(matlab_major 8)
-  # foreach(current_matlab_minor RANGE 0 5)
-    # list(APPEND matlab_supported_versions "${matlab_major}.${current_matlab_minor}")
-  # endforeach(current_matlab_minor)
-
-  # # taking into account the possible additional versions provided by the user
-  # if(DEFINED MATLAB_ADDITIONAL_VERSIONS)
-    # list(APPEND matlab_supported_versions MATLAB_ADDITIONAL_VERSIONS)
-  # endif()
-
-  # we order from more recent to older
-  if(matlab_supported_versions)
-    list(REMOVE_DUPLICATES matlab_supported_versions)
-    list(SORT matlab_supported_versions)
-    list(REVERSE matlab_supported_versions)
-  endif()
-
-  set(${matlab_versions} ${matlab_supported_versions})
-endmacro()
-
-
-
-
-#[=======================================================================[.rst:
-.. command:: matlab_get_all_valid_matlab_roots_from_registry
-
-  Populates the Matlab root with valid versions of Matlab or
-  Matlab Runtime (MCR).
-  The returned matlab_roots is organized in triplets
-  ``(type,version_number,matlab_root_path)``, where ``type``
-  indicates either ``MATLAB`` or ``MCR``.
-
-  ::
-
-    matlab_get_all_valid_matlab_roots_from_registry(
-        matlab_versions
-        matlab_roots)
-
-  ``matlab_versions``
-    the versions of each of the Matlab or MCR installations
-  ``matlab_roots``
-    the location of each of the Matlab or MCR installations
-#]=======================================================================]
-function(matlab_get_all_valid_matlab_roots_from_registry matlab_versions matlab_roots)
-
-  # The matlab_versions comes either from
-  # extract_matlab_versions_from_registry_brute_force or
-  # matlab_extract_all_installed_versions_from_registry.
-
-  set(_matlab_roots_list )
-  # check for Matlab installations
-  foreach(_matlab_current_version ${matlab_versions})
-    get_filename_component(
-      current_MATLAB_ROOT
-      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MathWorks\\MATLAB\\${_matlab_current_version};MATLABROOT]"
-      ABSOLUTE)
-
-    if(EXISTS ${current_MATLAB_ROOT})
-      list(APPEND _matlab_roots_list "MATLAB" ${_matlab_current_version} ${current_MATLAB_ROOT})
-    endif()
-
-  endforeach()
-
-  # Check for MCR installations
-  foreach(_matlab_current_version ${matlab_versions})
-    get_filename_component(
-      current_MATLAB_ROOT
-      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MathWorks\\MATLAB Runtime\\${_matlab_current_version};MATLABROOT]"
-      ABSOLUTE)
-
-    # remove the dot
-    string(REPLACE "." "" _matlab_current_version_without_dot "${_matlab_current_version}")
-
-    if(EXISTS ${current_MATLAB_ROOT})
-      list(APPEND _matlab_roots_list "MCR" ${_matlab_current_version} "${current_MATLAB_ROOT}/v${_matlab_current_version_without_dot}")
-    endif()
-
-  endforeach()
-  set(${matlab_roots} ${_matlab_roots_list} PARENT_SCOPE)
-endfunction()
-
-#[=======================================================================[.rst:
-.. command:: matlab_get_mex_suffix
-
-  Returns the extension of the mex files (the suffixes).
-  This function should not be called before the appropriate Matlab root has
-  been found.
-
-  ::
-
-    matlab_get_mex_suffix(
-        matlab_root
-        mex_suffix)
-
-  ``matlab_root``
-    the root of the Matlab/MCR installation
-  ``mex_suffix``
-    the variable name in which the suffix will be returned.
-#]=======================================================================]
-function(matlab_get_mex_suffix matlab_root mex_suffix)
-
-  # todo setup the extension properly. Currently I do not know if this is
-  # sufficient for all win32 distributions.
-  # there is also CMAKE_EXECUTABLE_SUFFIX that could be tweaked
-  set(mexext_suffix "")
-  if(WIN32)
-    list(APPEND mexext_suffix ".bat")
-  endif()
-
-  # we first try without suffix, since cmake does not understand a list with
-  # one empty string element
-  find_program(
-    Matlab_MEXEXTENSIONS_PROG
-    NAMES mexext
-    PATHS ${matlab_root}/bin
-    DOC "Matlab MEX extension provider"
-    NO_DEFAULT_PATH
-  )
-
-  foreach(current_mexext_suffix IN LISTS mexext_suffix)
-    if(NOT DEFINED Matlab_MEXEXTENSIONS_PROG OR NOT Matlab_MEXEXTENSIONS_PROG)
-      # this call should populate the cache automatically
-      find_program(
-        Matlab_MEXEXTENSIONS_PROG
-        "mexext${current_mexext_suffix}"
-        PATHS ${matlab_root}/bin
-        DOC "Matlab MEX extension provider"
-        NO_DEFAULT_PATH
-      )
-    endif()
-  endforeach(current_mexext_suffix)
-  if(MATLAB_FIND_DEBUG)
-    message(STATUS "[MATLAB] Determining mex files extensions from '${matlab_root}/bin' with program '${Matlab_MEXEXTENSIONS_PROG}'")
-  endif()
-
-  # the program has been found?
-  if((NOT Matlab_MEXEXTENSIONS_PROG) OR (NOT EXISTS ${Matlab_MEXEXTENSIONS_PROG}))
-    if(MATLAB_FIND_DEBUG)
-      message(WARNING "[MATLAB] Cannot found mexext program. Matlab root is ${matlab_root}")
-    endif()
-    unset(Matlab_MEXEXTENSIONS_PROG CACHE)
-    return()
-  endif()
-
-  set(_matlab_mex_extension)
-
-  set(devnull)
-  if(UNIX)
-    set(devnull INPUT_FILE /dev/null)
-  elseif(WIN32)
-    set(devnull INPUT_FILE NUL)
-  endif()
-
-  if(WIN32)
-    # this environment variable is used to determine the arch on Windows
-    if(CMAKE_SIZEOF_VOID_P EQUAL 8)
-      set(ENV{MATLAB_ARCH} "win64")
-    else()
-      set(ENV{MATLAB_ARCH} "win32")
-    endif()
-  endif()
-
-  # this is the preferred way. If this does not work properly (eg. MCR on Windows), then we use our own knowledge
-  execute_process(
-    COMMAND ${Matlab_MEXEXTENSIONS_PROG}
-    OUTPUT_VARIABLE _matlab_mex_extension
-    ERROR_VARIABLE _matlab_mex_extension_error
-    OUTPUT_STRIP_TRAILING_WHITESPACE
-    ${devnull})
-  unset(ENV{MATLAB_ARCH})
-
-  if(_matlab_mex_extension_error)
-    if(WIN32)
-      # this is only for intel architecture
-      if(CMAKE_SIZEOF_VOID_P EQUAL 8)
-        set(_matlab_mex_extension "mexw64")
-      else()
-        set(_matlab_mex_extension "mexw32")
-      endif()
-    endif()
-  endif()
-
-  string(STRIP "${_matlab_mex_extension}"  _matlab_mex_extension)
-  if(MATLAB_FIND_DEBUG)
-    message(STATUS "[MATLAB] '${Matlab_MEXEXTENSIONS_PROG}' : determined extension '${_matlab_mex_extension}' and error string is '${_matlab_mex_extension_error}'")
-  endif()
-
-  unset(Matlab_MEXEXTENSIONS_PROG CACHE)
-  set(${mex_suffix} ${_matlab_mex_extension} PARENT_SCOPE)
-endfunction()
-
-
-
-
-#[=======================================================================[.rst:
-.. command:: matlab_get_version_from_matlab_run
-
-  This function runs Matlab program specified on arguments and extracts its
-  version. If the path provided for the Matlab installation points to an MCR
-  installation, the version is extracted from the installed files.
-
-  ::
-
-    matlab_get_version_from_matlab_run(
-        matlab_binary_path
-        matlab_list_versions)
-
-  ``matlab_binary_path``
-    the location of the `matlab` binary executable
-  ``matlab_list_versions``
-    the version extracted from Matlab
-#]=======================================================================]
-function(matlab_get_version_from_matlab_run matlab_binary_program matlab_list_versions)
-
-  set(${matlab_list_versions} "" PARENT_SCOPE)
-
-  if(MATLAB_FIND_DEBUG)
-    message(STATUS "[MATLAB] Determining the version of Matlab from ${matlab_binary_program}")
-  endif()
-
-  if(EXISTS "${_matlab_temporary_folder}/matlabVersionLog.cmaketmp")
-    if(MATLAB_FIND_DEBUG)
-      message(STATUS "[MATLAB] Removing previous ${_matlab_temporary_folder}/matlabVersionLog.cmaketmp file")
-    endif()
-    file(REMOVE "${_matlab_temporary_folder}/matlabVersionLog.cmaketmp")
-  endif()
-
-
-  # the log file is needed since on windows the command executes in a new
-  # window and it is not possible to get back the answer of Matlab
-  # the -wait command is needed on windows, otherwise the call returns
-  # immediately after the program launches itself.
-  if(WIN32)
-    set(_matlab_additional_commands "-wait")
-  endif()
-
-  set(devnull)
-  if(UNIX)
-    set(devnull INPUT_FILE /dev/null)
-  elseif(WIN32)
-    set(devnull INPUT_FILE NUL)
-  endif()
-
-  # timeout set to 120 seconds, in case it does not start
-  # note as said before OUTPUT_VARIABLE cannot be used in a platform
-  # independent manner however, not setting it would flush the output of Matlab
-  # in the current console (unix variant)
-  execute_process(
-    COMMAND "${matlab_binary_program}" -nosplash -nojvm ${_matlab_additional_commands} -logfile "matlabVersionLog.cmaketmp" -nodesktop -nodisplay -r "version, exit"
-    OUTPUT_VARIABLE _matlab_version_from_cmd_dummy
-    RESULT_VARIABLE _matlab_result_version_call
-    ERROR_VARIABLE _matlab_result_version_call_error
-    TIMEOUT 120
-    WORKING_DIRECTORY "${_matlab_temporary_folder}"
-    ${devnull}
-    )
-
-  if(_matlab_result_version_call MATCHES "timeout")
-    if(MATLAB_FIND_DEBUG)
-      message(WARNING "[MATLAB] Unable to determine the version of Matlab."
-        " Matlab call timed out after 120 seconds.")
-    endif()
-    return()
-  endif()
-
-  if(${_matlab_result_version_call})
-    if(MATLAB_FIND_DEBUG)
-      message(WARNING "[MATLAB] Unable to determine the version of Matlab. Matlab call returned with error ${_matlab_result_version_call}.")
-    endif()
-    return()
-  elseif(NOT EXISTS "${_matlab_temporary_folder}/matlabVersionLog.cmaketmp")
-    if(MATLAB_FIND_DEBUG)
-      message(WARNING "[MATLAB] Unable to determine the version of Matlab. The log file does not exist.")
-    endif()
-    return()
-  endif()
-
-  # if successful, read back the log
-  file(READ "${_matlab_temporary_folder}/matlabVersionLog.cmaketmp" _matlab_version_from_cmd)
-  file(REMOVE "${_matlab_temporary_folder}/matlabVersionLog.cmaketmp")
-
-  set(index -1)
-  string(FIND "${_matlab_version_from_cmd}" "ans" index)
-  if(index EQUAL -1)
-
-    if(MATLAB_FIND_DEBUG)
-      message(WARNING "[MATLAB] Cannot find the version of Matlab returned by the run.")
-    endif()
-
-  else()
-    set(matlab_list_of_all_versions_tmp)
-
-    string(SUBSTRING "${_matlab_version_from_cmd}" ${index} -1 substring_ans)
-    string(
-      REGEX MATCHALL "ans[\r\n\t ]*=[\r\n\t ]*'?([0-9]+(\\.[0-9]+)?)"
-      matlab_versions_regex
-      ${substring_ans})
-    foreach(match IN LISTS matlab_versions_regex)
-      string(
-        REGEX MATCH "ans[\r\n\t ]*=[\r\n\t ]*'?(([0-9]+)(\\.([0-9]+))?)"
-        current_match ${match})
-
-      list(APPEND matlab_list_of_all_versions_tmp ${CMAKE_MATCH_1})
-    endforeach()
-    if(matlab_list_of_all_versions_tmp)
-      list(REMOVE_DUPLICATES matlab_list_of_all_versions_tmp)
-    endif()
-    set(${matlab_list_versions} ${matlab_list_of_all_versions_tmp} PARENT_SCOPE)
-
-  endif()
-
-endfunction()
-
-#[=======================================================================[.rst:
-.. command:: matlab_add_unit_test
-
-  Adds a Matlab unit test to the test set of cmake/ctest.
-  This command requires the component ``MAIN_PROGRAM`` and hence is not
-  available for an MCR installation.
-
-  The unit test uses the Matlab unittest framework (default, available
-  starting Matlab 2013b+) except if the option ``NO_UNITTEST_FRAMEWORK``
-  is given.
-
-  The function expects one Matlab test script file to be given.
-  In the case ``NO_UNITTEST_FRAMEWORK`` is given, the unittest script file
-  should contain the script to be run, plus an exit command with the exit
-  value. This exit value will be passed to the ctest framework (0 success,
-  non 0 failure). Additional arguments accepted by :command:`add_test` can be
-  passed through ``TEST_ARGS`` (eg. ``CONFIGURATION <config> ...``).
-
-  ::
-
-    matlab_add_unit_test(
-        NAME <name>
-        UNITTEST_FILE matlab_file_containing_unittest.m
-        [CUSTOM_TEST_COMMAND matlab_command_to_run_as_test]
-        [UNITTEST_PRECOMMAND matlab_command_to_run]
-        [TIMEOUT timeout]
-        [ADDITIONAL_PATH path1 [path2 ...]]
-        [MATLAB_ADDITIONAL_STARTUP_OPTIONS option1 [option2 ...]]
-        [TEST_ARGS arg1 [arg2 ...]]
-        [NO_UNITTEST_FRAMEWORK]
-        )
-
-  The function arguments are:
-
-  ``NAME``
-    name of the unittest in ctest.
-  ``UNITTEST_FILE``
-    the matlab unittest file. Its path will be automatically
-    added to the Matlab path.
-  ``CUSTOM_TEST_COMMAND``
-    Matlab script command to run as the test.
-    If this is not set, then the following is run:
-    ``runtests('matlab_file_name'), exit(max([ans(1,:).Failed]))``
-    where ``matlab_file_name`` is the ``UNITTEST_FILE`` without the extension.
-  ``UNITTEST_PRECOMMAND``
-    Matlab script command to be ran before the file
-    containing the test (eg. GPU device initialisation based on CMake
-    variables).
-  ``TIMEOUT``
-    the test timeout in seconds. Defaults to 180 seconds as the
-    Matlab unit test may hang.
-  ``ADDITIONAL_PATH``
-    a list of paths to add to the Matlab path prior to
-    running the unit test.
-  ``MATLAB_ADDITIONAL_STARTUP_OPTIONS``
-    a list of additional option in order
-    to run Matlab from the command line.
-    ``-nosplash -nodesktop -nodisplay`` are always added.
-  ``TEST_ARGS``
-    Additional options provided to the add_test command. These
-    options are added to the default options (eg. "CONFIGURATIONS Release")
-  ``NO_UNITTEST_FRAMEWORK``
-    when set, indicates that the test should not
-    use the unittest framework of Matlab (available for versions >= R2013a).
-  ``WORKING_DIRECTORY``
-    This will be the working directory for the test. If specified it will
-    also be the output directory used for the log file of the test run.
-    If not specified the temporary directory ``${CMAKE_BINARY_DIR}/Matlab`` will
-    be used as the working directory and the log location.
-
-#]=======================================================================]
-function(matlab_add_unit_test)
-
-  if(NOT Matlab_MAIN_PROGRAM)
-    message(FATAL_ERROR "[MATLAB] This functionality needs the MAIN_PROGRAM component (not default)")
-  endif()
-
-  set(options NO_UNITTEST_FRAMEWORK)
-  set(oneValueArgs NAME UNITTEST_FILE TIMEOUT WORKING_DIRECTORY
-    UNITTEST_PRECOMMAND CUSTOM_TEST_COMMAND)
-  set(multiValueArgs ADDITIONAL_PATH MATLAB_ADDITIONAL_STARTUP_OPTIONS TEST_ARGS)
-
-  set(prefix _matlab_unittest_prefix)
-  cmake_parse_arguments(PARSE_ARGV 0 ${prefix} "${options}" "${oneValueArgs}" "${multiValueArgs}" )
-
-  if(NOT ${prefix}_NAME)
-    message(FATAL_ERROR "[MATLAB] The Matlab test name cannot be empty")
-  endif()
-
-  add_test(NAME ${${prefix}_NAME}
-           COMMAND ${CMAKE_COMMAND}
-            "-Dtest_name=${${prefix}_NAME}"
-            "-Dadditional_paths=${${prefix}_ADDITIONAL_PATH}"
-            "-Dtest_timeout=${${prefix}_TIMEOUT}"
-            "-Doutput_directory=${_matlab_temporary_folder}"
-            "-Dworking_directory=${${prefix}_WORKING_DIRECTORY}"
-            "-DMatlab_PROGRAM=${Matlab_MAIN_PROGRAM}"
-            "-Dno_unittest_framework=${${prefix}_NO_UNITTEST_FRAMEWORK}"
-            "-DMatlab_ADDITIONAL_STARTUP_OPTIONS=${${prefix}_MATLAB_ADDITIONAL_STARTUP_OPTIONS}"
-            "-Dunittest_file_to_run=${${prefix}_UNITTEST_FILE}"
-            "-Dcustom_Matlab_test_command=${${prefix}_CUSTOM_TEST_COMMAND}"
-            "-Dcmd_to_run_before_test=${${prefix}_UNITTEST_PRECOMMAND}"
-            -P ${_FindMatlab_SELF_DIR}/MatlabTestsRedirect.cmake
-           ${${prefix}_TEST_ARGS}
-           ${${prefix}_UNPARSED_ARGUMENTS}
-           )
-endfunction()
-
-
-#[=======================================================================[.rst:
-.. command:: matlab_add_mex
-
-  Adds a Matlab MEX target.
-  This commands compiles the given sources with the current tool-chain in
-  order to produce a MEX file. The final name of the produced output may be
-  specified, as well as additional link libraries, and a documentation entry
-  for the MEX file. Remaining arguments of the call are passed to the
-  :command:`add_library` or :command:`add_executable` command.
-
-  ::
-
-     matlab_add_mex(
-         NAME <name>
-         [EXECUTABLE | MODULE | SHARED]
-         SRC src1 [src2 ...]
-         [OUTPUT_NAME output_name]
-         [DOCUMENTATION file.txt]
-         [LINK_TO target1 target2 ...]
-         [R2017b | R2018a]
-         [EXCLUDE_FROM_ALL]
-         [...]
-     )
-
-  ``NAME``
-    name of the target.
-  ``SRC``
-    list of source files.
-  ``LINK_TO``
-    a list of additional link dependencies.  The target links to ``libmex``
-    and ``libmx`` by default.
-  ``OUTPUT_NAME``
-    if given, overrides the default name. The default name is
-    the name of the target without any prefix and
-    with ``Matlab_MEX_EXTENSION`` suffix.
-  ``DOCUMENTATION``
-    if given, the file ``file.txt`` will be considered as
-    being the documentation file for the MEX file. This file is copied into
-    the same folder without any processing, with the same name as the final
-    mex file, and with extension `.m`. In that case, typing ``help <name>``
-    in Matlab prints the documentation contained in this file.
-  ``R2017b`` or ``R2018a`` may be given to specify the version of the C API
-    to use: ``R2017b`` specifies the traditional (separate complex) C API,
-    and corresponds to the ``-R2017b`` flag for the `mex` command. ``R2018a``
-    specifies the new interleaved complex C API, and corresponds to the
-    ``-R2018a`` flag for the `mex` command. Ignored if MATLAB version prior
-    to R2018a. Defaults to ``R2017b``.
-  ``MODULE`` or ``SHARED`` may be given to specify the type of library to be
-    created. ``EXECUTABLE`` may be given to create an executable instead of
-    a library. If no type is given explicitly, the type is ``SHARED``.
-  ``EXCLUDE_FROM_ALL``
-    This option has the same meaning as for :prop_tgt:`EXCLUDE_FROM_ALL` and
-    is forwarded to :command:`add_library` or :command:`add_executable`
-    commands.
-
-  The documentation file is not processed and should be in the following
-  format:
-
-  ::
-
-    % This is the documentation
-    function ret = mex_target_output_name(input1)
-
-#]=======================================================================]
-function(matlab_add_mex)
-
-  if(NOT WIN32)
-    # we do not need all this on Windows
-    # pthread options
-    if(CMAKE_CXX_COMPILER_LOADED)
-      check_cxx_compiler_flag(-pthread HAS_MINUS_PTHREAD)
-    elseif(CMAKE_C_COMPILER_LOADED)
-      check_c_compiler_flag(-pthread HAS_MINUS_PTHREAD)
-    endif()
-    # we should use try_compile instead, the link flags are discarded from
-    # this compiler_flag function.
-    #check_cxx_compiler_flag(-Wl,--exclude-libs,ALL HAS_SYMBOL_HIDING_CAPABILITY)
-
-  endif()
-
-  set(options EXECUTABLE MODULE SHARED R2017b R2018a EXCLUDE_FROM_ALL)
-  set(oneValueArgs NAME DOCUMENTATION OUTPUT_NAME)
-  set(multiValueArgs LINK_TO SRC)
-
-  set(prefix _matlab_addmex_prefix)
-  cmake_parse_arguments(${prefix} "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
-
-  if(NOT ${prefix}_NAME)
-    message(FATAL_ERROR "[MATLAB] The MEX target name cannot be empty")
-  endif()
-
-  if(NOT ${prefix}_OUTPUT_NAME)
-    set(${prefix}_OUTPUT_NAME ${${prefix}_NAME})
-  endif()
-
-  if(NOT Matlab_VERSION_STRING VERSION_LESS "9.1") # For 9.1 (R2016b) and newer, add version source file
-    # Add the correct version file depending on which languages are enabled in the project
-    if(CMAKE_C_COMPILER_LOADED)
-      # If C is enabled, use the .c file as it will work fine also with C++
-      set(MEX_VERSION_FILE "${Matlab_ROOT_DIR}/extern/version/c_mexapi_version.c")
-    elseif(CMAKE_CXX_COMPILER_LOADED)
-      # If C is not enabled, check if CXX is enabled and use the .cpp file
-      # to avoid that the .c file is silently ignored
-      set(MEX_VERSION_FILE "${Matlab_ROOT_DIR}/extern/version/cpp_mexapi_version.cpp")
-    else()
-      # If neither C or CXX is enabled, warn because we cannot add the source.
-      # TODO: add support for fortran mex files
-      message(WARNING "[MATLAB] matlab_add_mex requires that at least C or CXX are enabled languages")
-    endif()
-  endif()
-
-  if(NOT Matlab_VERSION_STRING VERSION_LESS "9.4") # For 9.4 (R2018a) and newer, add API macro
-    if(${${prefix}_R2018a})
-      set(MEX_API_MACRO "MATLAB_DEFAULT_RELEASE=R2018a")
-    else()
-      set(MEX_API_MACRO "MATLAB_DEFAULT_RELEASE=R2017b")
-    endif()
-  endif()
-
-  set(_option_EXCLUDE_FROM_ALL)
-  if(${prefix}_EXCLUDE_FROM_ALL)
-    set(_option_EXCLUDE_FROM_ALL "EXCLUDE_FROM_ALL")
-  endif()
-
-  if(${prefix}_EXECUTABLE)
-    add_executable(${${prefix}_NAME}
-      ${_option_EXCLUDE_FROM_ALL}
-      ${${prefix}_SRC}
-      ${MEX_VERSION_FILE}
-      ${${prefix}_DOCUMENTATION}
-      ${${prefix}_UNPARSED_ARGUMENTS})
-  else()
-    if(${prefix}_MODULE)
-      set(type MODULE)
-    else()
-      set(type SHARED)
-    endif()
-
-    add_library(${${prefix}_NAME}
-      ${type}
-      ${_option_EXCLUDE_FROM_ALL}
-      ${${prefix}_SRC}
-      ${MEX_VERSION_FILE}
-      ${${prefix}_DOCUMENTATION}
-      ${${prefix}_UNPARSED_ARGUMENTS})
-  endif()
-
-  target_include_directories(${${prefix}_NAME} PRIVATE ${Matlab_INCLUDE_DIRS})
-
-  if(Matlab_HAS_CPP_API)
-    target_link_libraries(${${prefix}_NAME} ${Matlab_ENGINE_LIBRARY} ${Matlab_DATAARRAY_LIBRARY})
-  endif()
-
-  target_link_libraries(${${prefix}_NAME} ${Matlab_MEX_LIBRARY} ${Matlab_MX_LIBRARY} ${${prefix}_LINK_TO})
-  set_target_properties(${${prefix}_NAME}
-      PROPERTIES
-        PREFIX ""
-        OUTPUT_NAME ${${prefix}_OUTPUT_NAME}
-        SUFFIX ".${Matlab_MEX_EXTENSION}")
-
-  target_compile_definitions(${${prefix}_NAME} PRIVATE ${MEX_API_MACRO} MATLAB_MEX_FILE)
-
-  # documentation
-  if(NOT ${${prefix}_DOCUMENTATION} STREQUAL "")
-    get_target_property(output_name ${${prefix}_NAME} OUTPUT_NAME)
-    add_custom_command(
-      TARGET ${${prefix}_NAME}
-      PRE_BUILD
-      COMMAND ${CMAKE_COMMAND} -E copy_if_different ${${prefix}_DOCUMENTATION} $<TARGET_FILE_DIR:${${prefix}_NAME}>/${output_name}.m
-      COMMENT "[MATLAB] Copy ${${prefix}_NAME} documentation file into the output folder"
-    )
-  endif() # documentation
-
-  # entry point in the mex file + taking care of visibility and symbol clashes.
-  if(WIN32)
-
-    if (MSVC)
-
-      set(_link_flags "${_link_flags} /EXPORT:mexFunction")
-      if(NOT Matlab_VERSION_STRING VERSION_LESS "9.1") # For 9.1 (R2016b) and newer, export version
-        set(_link_flags "${_link_flags} /EXPORT:mexfilerequiredapiversion")
-      endif()
-
-      set_property(TARGET ${${prefix}_NAME} APPEND PROPERTY LINK_FLAGS ${_link_flags})
-
-    endif() # No other compiler currently supported on Windows.
-
-    set_target_properties(${${prefix}_NAME}
-      PROPERTIES
-        DEFINE_SYMBOL "DLL_EXPORT_SYM=__declspec(dllexport)")
-
-  else()
-
-    if(Matlab_VERSION_STRING VERSION_LESS "9.1") # For versions prior to 9.1 (R2016b)
-      set(_ver_map_files ${Matlab_EXTERN_LIBRARY_DIR}/mexFunction.map)
-    else()                                          # For 9.1 (R2016b) and newer
-      set(_ver_map_files ${Matlab_EXTERN_LIBRARY_DIR}/c_exportsmexfileversion.map)
-    endif()
-
-    if(NOT Matlab_VERSION_STRING VERSION_LESS "9.5") # For 9.5 (R2018b) (and newer?)
-      target_compile_options(${${prefix}_NAME} PRIVATE "-fvisibility=default")
-      # This one is weird, it might be a bug in <mex.h> for R2018b. When compiling with
-      # -fvisibility=hidden, the symbol `mexFunction` cannot be exported. Reading the
-      # source code for <mex.h>, it seems that the preprocessor macro `MW_NEEDS_VERSION_H`
-      # needs to be defined for `__attribute__((visibility("default")))` to be added
-      # in front of the declaration of `mexFunction`. In previous versions of MATLAB this
-      # was not the case, there `DLL_EXPORT_SYM` needed to be defined.
-      # Adding `-fvisibility=hidden` to the `mex` command causes the build to fail.
-      # TODO: Check that this is still necessary in R2019a when it comes out.
-    endif()
-
-    if(APPLE)
-
-      if(Matlab_HAS_CPP_API)
-        list(APPEND _ver_map_files ${Matlab_EXTERN_LIBRARY_DIR}/cppMexFunction.map) # This one doesn't exist on Linux
-        set(_link_flags "${_link_flags} -Wl,-U,_mexCreateMexFunction -Wl,-U,_mexDestroyMexFunction -Wl,-U,_mexFunctionAdapter")
-        # On MacOS, the MEX command adds the above, without it the link breaks
-        # because we indiscriminately use "cppMexFunction.map" even for C API MEX-files.
-      endif()
-
-      set(_export_flag_name -exported_symbols_list)
-
-    else() # Linux
-
-      if(HAS_MINUS_PTHREAD)
-        # Apparently, compiling with -pthread generated the proper link flags
-        # and some defines at compilation
-        target_compile_options(${${prefix}_NAME} PRIVATE "-pthread")
-      endif()
-
-      set(_link_flags "${_link_flags} -Wl,--as-needed")
-
-      set(_export_flag_name --version-script)
-
-    endif()
-
-    foreach(_file ${_ver_map_files})
-      set(_link_flags "${_link_flags} -Wl,${_export_flag_name},${_file}")
-    endforeach()
-
-    # The `mex` command doesn't add this define. It is specified here in order
-    # to export the symbol in case the client code decides to hide its symbols
-    set_target_properties(${${prefix}_NAME}
-      PROPERTIES
-        DEFINE_SYMBOL "DLL_EXPORT_SYM=__attribute__((visibility(\"default\")))"
-        LINK_FLAGS "${_link_flags}"
-    )
-
-  endif()
-
-endfunction()
-
-
-# (internal)
-# Used to get the version of matlab, using caching. This basically transforms the
-# output of the root list, with possible unknown version, to a version
-# This can possibly run Matlab for extracting the version.
-function(_Matlab_get_version_from_root matlab_root matlab_or_mcr matlab_known_version matlab_final_version)
-
-  # if the version is not trivial, we query matlab (if not MCR) for that
-  # we keep track of the location of matlab that induced this version
-  #if(NOT DEFINED Matlab_PROG_VERSION_STRING_AUTO_DETECT)
-  #  set(Matlab_PROG_VERSION_STRING_AUTO_DETECT "" CACHE INTERNAL "internal matlab location for the discovered version")
-  #endif()
-
-  if(NOT matlab_known_version STREQUAL "NOTFOUND")
-    # the version is known, we just return it
-    set(${matlab_final_version} ${matlab_known_version} PARENT_SCOPE)
-    set(Matlab_VERSION_STRING_INTERNAL ${matlab_known_version} CACHE INTERNAL "Matlab version (automatically determined)" FORCE)
-    return()
-  endif()
-
-  if(matlab_or_mcr STREQUAL "UNKNOWN")
-    if(MATLAB_FIND_DEBUG)
-      message(WARNING "[MATLAB] Determining Matlab or MCR")
-    endif()
-
-    if(EXISTS "${matlab_root}/appdata/version.xml")
-      # we inspect the application version.xml file that contains the product information
-      file(STRINGS "${matlab_root}/appdata/version.xml" productinfo_string NEWLINE_CONSUME)
-      string(REGEX MATCH "<installedProductData.*displayedString=\"([a-zA-Z ]+)\".*/>"
-             product_reg_match
-             ${productinfo_string}
-            )
-
-      # default fallback to Matlab
-      set(matlab_or_mcr "MATLAB")
-      if(NOT CMAKE_MATCH_1 STREQUAL "")
-        string(TOLOWER "${CMAKE_MATCH_1}" product_reg_match)
-
-        if(product_reg_match STREQUAL "matlab runtime")
-          set(matlab_or_mcr "MCR")
-        endif()
-      endif()
-    endif()
-
-    if(MATLAB_FIND_DEBUG)
-      message(WARNING "[MATLAB] '${matlab_root}' contains the '${matlab_or_mcr}'")
-    endif()
-  endif()
-
-  # UNKNOWN is the default behaviour in case we
-  # - have an erroneous matlab_root
-  # - have an initial 'UNKNOWN'
-  if(matlab_or_mcr STREQUAL "MATLAB" OR matlab_or_mcr STREQUAL "UNKNOWN")
-    # MATLAB versions
-    set(_matlab_current_program ${Matlab_MAIN_PROGRAM})
-
-    # do we already have a matlab program?
-    if(NOT _matlab_current_program)
-
-      set(_find_matlab_options)
-      if(matlab_root AND EXISTS ${matlab_root})
-        set(_find_matlab_options PATHS ${matlab_root} ${matlab_root}/bin NO_DEFAULT_PATH)
-      endif()
-
-      find_program(
-          _matlab_current_program
-          matlab
-          ${_find_matlab_options}
-          DOC "Matlab main program"
-        )
-    endif()
-
-    if(NOT _matlab_current_program OR NOT EXISTS ${_matlab_current_program})
-      # if not found, clear the dependent variables
-      if(MATLAB_FIND_DEBUG)
-        message(WARNING "[MATLAB] Cannot find the main matlab program under ${matlab_root}")
-      endif()
-      set(Matlab_PROG_VERSION_STRING_AUTO_DETECT "" CACHE INTERNAL "internal matlab location for the discovered version" FORCE)
-      set(Matlab_VERSION_STRING_INTERNAL "" CACHE INTERNAL "internal matlab location for the discovered version" FORCE)
-      unset(_matlab_current_program)
-      unset(_matlab_current_program CACHE)
-      return()
-    endif()
-
-    # full real path for path comparison
-    get_filename_component(_matlab_main_real_path_tmp "${_matlab_current_program}" REALPATH)
-    unset(_matlab_current_program)
-    unset(_matlab_current_program CACHE)
-
-    # is it the same as the previous one?
-    if(_matlab_main_real_path_tmp STREQUAL Matlab_PROG_VERSION_STRING_AUTO_DETECT)
-      set(${matlab_final_version} ${Matlab_VERSION_STRING_INTERNAL} PARENT_SCOPE)
-      return()
-    endif()
-
-    # update the location of the program
-    set(Matlab_PROG_VERSION_STRING_AUTO_DETECT
-        ${_matlab_main_real_path_tmp}
-        CACHE INTERNAL "internal matlab location for the discovered version" FORCE)
-
-    set(matlab_list_of_all_versions)
-    matlab_get_version_from_matlab_run("${Matlab_PROG_VERSION_STRING_AUTO_DETECT}" matlab_list_of_all_versions)
-
-    list(LENGTH matlab_list_of_all_versions list_of_all_versions_length)
-    if(list_of_all_versions_length GREATER 0)
-      list(GET matlab_list_of_all_versions 0 _matlab_version_tmp)
-    else()
-      set(_matlab_version_tmp "unknown")
-    endif()
-
-    # set the version into the cache
-    set(Matlab_VERSION_STRING_INTERNAL ${_matlab_version_tmp} CACHE INTERNAL "Matlab version (automatically determined)" FORCE)
-
-    # warning, just in case several versions found (should not happen)
-    if((list_of_all_versions_length GREATER 1) AND MATLAB_FIND_DEBUG)
-      message(WARNING "[MATLAB] Found several versions, taking the first one (versions found ${matlab_list_of_all_versions})")
-    endif()
-
-    # return the updated value
-    set(${matlab_final_version} ${Matlab_VERSION_STRING_INTERNAL} PARENT_SCOPE)
-  elseif(EXISTS "${matlab_root}/VersionInfo.xml")
-    # MCR
-    # we cannot run anything in order to extract the version. We assume that the file
-    # VersionInfo.xml exists under the MatlabRoot, we look for it and extract the version from there
-    set(_matlab_version_tmp "unknown")
-    file(STRINGS "${matlab_root}/VersionInfo.xml" versioninfo_string NEWLINE_CONSUME)
-
-    if(versioninfo_string)
-      # parses "<version>9.2.0.538062</version>"
-      string(REGEX MATCH "<version>(.*)</version>"
-             version_reg_match
-             ${versioninfo_string}
-            )
-
-      if(CMAKE_MATCH_1 MATCHES "(([0-9])\\.([0-9]))[\\.0-9]*")
-        set(_matlab_version_tmp "${CMAKE_MATCH_1}")
-      endif()
-    endif()
-    set(${matlab_final_version} "${_matlab_version_tmp}" PARENT_SCOPE)
-    set(Matlab_VERSION_STRING_INTERNAL
-        "${_matlab_version_tmp}"
-        CACHE INTERNAL "Matlab (MCR) version (automatically determined)"
-        FORCE)
-  endif() # Matlab or MCR
-
-endfunction()
-
-
-# Utility function for finding Matlab or MCR on Win32
-function(_Matlab_find_instances_win32 matlab_roots)
-  # On WIN32, we look for Matlab installation in the registry
-  # if unsuccessful, we look for all known revision and filter the existing
-  # ones.
-
-  # testing if we are able to extract the needed information from the registry
-  set(_matlab_versions_from_registry)
-
-  if(CMAKE_SIZEOF_VOID_P EQUAL 8)
-    set(_matlab_win64 ON)
-  else()
-    set(_matlab_win64 OFF)
-  endif()
-
-  matlab_extract_all_installed_versions_from_registry(_matlab_win64 _matlab_versions_from_registry)
-
-  # the returned list is empty, doing the search on all known versions
-  if(NOT _matlab_versions_from_registry)
-    if(MATLAB_FIND_DEBUG)
-      message(STATUS "[MATLAB] Search for Matlab from the registry unsuccessful, testing all supported versions")
-    endif()
-    extract_matlab_versions_from_registry_brute_force(_matlab_versions_from_registry)
-  endif()
-
-  # filtering the results with the registry keys
-  matlab_get_all_valid_matlab_roots_from_registry("${_matlab_versions_from_registry}" _matlab_possible_roots)
-  set(${matlab_roots} ${_matlab_possible_roots} PARENT_SCOPE)
-
-endfunction()
-
-# Utility function for finding Matlab or MCR on OSX
-function(_Matlab_find_instances_osx matlab_roots)
-
-  set(_matlab_possible_roots)
-  # on mac, we look for the /Application paths
-  # this corresponds to the behaviour on Windows. On Linux, we do not have
-  # any other guess.
-  matlab_get_supported_releases(_matlab_releases)
-  if(MATLAB_FIND_DEBUG)
-    message(STATUS "[MATLAB] Matlab supported versions ${_matlab_releases}. If more version should be supported "
-                 "the variable MATLAB_ADDITIONAL_VERSIONS can be set according to the documentation")
-  endif()
-
-  foreach(_matlab_current_release IN LISTS _matlab_releases)
-    matlab_get_version_from_release_name("${_matlab_current_release}" _matlab_current_version)
-    string(REPLACE "." "" _matlab_current_version_without_dot "${_matlab_current_version}")
-    set(_matlab_base_path "/Applications/MATLAB_${_matlab_current_release}.app")
-
-    # Check Matlab, has precedence over MCR
-    if(EXISTS ${_matlab_base_path})
-      if(MATLAB_FIND_DEBUG)
-        message(STATUS "[MATLAB] Found version ${_matlab_current_release} (${_matlab_current_version}) in ${_matlab_base_path}")
-      endif()
-      list(APPEND _matlab_possible_roots "MATLAB" ${_matlab_current_version} ${_matlab_base_path})
-    endif()
-
-    # Checks MCR
-    set(_mcr_path "/Applications/MATLAB/MATLAB_Runtime/v${_matlab_current_version_without_dot}")
-    if(EXISTS "${_mcr_path}")
-      if(MATLAB_FIND_DEBUG)
-        message(STATUS "[MATLAB] Found MCR version ${_matlab_current_release} (${_matlab_current_version}) in ${_mcr_path}")
-      endif()
-      list(APPEND _matlab_possible_roots "MCR" ${_matlab_current_version} ${_mcr_path})
-    endif()
-
-  endforeach()
-  set(${matlab_roots} ${_matlab_possible_roots} PARENT_SCOPE)
-
-endfunction()
-
-# Utility function for finding Matlab or MCR from the PATH
-function(_Matlab_find_instances_from_path matlab_roots)
-
-  set(_matlab_possible_roots)
-
-  # At this point, we have no other choice than trying to find it from PATH.
-  # If set by the user, this wont change
-  find_program(
-    _matlab_main_tmp
-    NAMES matlab)
-
-  if(_matlab_main_tmp)
-    # we then populate the list of roots, with empty version
-    if(MATLAB_FIND_DEBUG)
-      message(STATUS "[MATLAB] matlab found from PATH: ${_matlab_main_tmp}")
-    endif()
-
-    # resolve symlinks
-    get_filename_component(_matlab_current_location "${_matlab_main_tmp}" REALPATH)
-
-    # get the directory (the command below has to be run twice)
-    # this will be the matlab root
-    get_filename_component(_matlab_current_location "${_matlab_current_location}" DIRECTORY)
-    get_filename_component(_matlab_current_location "${_matlab_current_location}" DIRECTORY) # Matlab should be in bin
-
-    # We found the Matlab program
-    list(APPEND _matlab_possible_roots "MATLAB" "NOTFOUND" ${_matlab_current_location})
-
-    # we remove this from the CACHE
-    unset(_matlab_main_tmp CACHE)
-  else()
-    find_program(
-      _matlab_mex_tmp
-      NAMES mex)
-    if(_matlab_mex_tmp)
-      # we then populate the list of roots, with empty version
-      if(MATLAB_FIND_DEBUG)
-        message(STATUS "[MATLAB] mex compiler found from PATH: ${_matlab_mex_tmp}")
-      endif()
-
-      # resolve symlinks
-      get_filename_component(_mex_current_location "${_matlab_mex_tmp}" REALPATH)
-
-      # get the directory (the command below has to be run twice)
-      # this will be the matlab root
-      get_filename_component(_mex_current_location "${_mex_current_location}" DIRECTORY)
-      get_filename_component(_mex_current_location "${_mex_current_location}" DIRECTORY) # Matlab Runtime mex compiler should be in bin
-
-      # We found the Matlab program
-      list(APPEND _matlab_possible_roots "MCR" "NOTFOUND" ${_mex_current_location})
-
-      unset(_matlab_mex_tmp CACHE)
-    else()
-      if(MATLAB_FIND_DEBUG)
-        message(STATUS "[MATLAB] mex compiler not found")
-      endif()
-    endif()
-
-
-  endif()
-
-  set(${matlab_roots} ${_matlab_possible_roots} PARENT_SCOPE)
-endfunction()
-
-
-# ###################################
-# Exploring the possible Matlab_ROOTS
-
-# this variable will get all Matlab installations found in the current system.
-set(_matlab_possible_roots)
-
-if(Matlab_ROOT_DIR)
-  # if the user specifies a possible root, we keep this one
-
-  if(NOT EXISTS "${Matlab_ROOT_DIR}")
-    # if Matlab_ROOT_DIR specified but erroneous
-    if(MATLAB_FIND_DEBUG)
-      message(WARNING "[MATLAB] the specified path for Matlab_ROOT_DIR does not exist (${Matlab_ROOT_DIR})")
-    endif()
-  else()
-    # NOTFOUND indicates the code below to search for the version automatically
-    if("${Matlab_VERSION_STRING_INTERNAL}" STREQUAL "")
-      list(APPEND _matlab_possible_roots "UNKNOWN" "NOTFOUND" ${Matlab_ROOT_DIR}) # empty version, empty MCR/Matlab indication
-    else()
-      list(APPEND _matlab_possible_roots "UNKNOWN" ${Matlab_VERSION_STRING_INTERNAL} ${Matlab_ROOT_DIR}) # cached version
-    endif()
-  endif()
-else()
-
-  # if the user does not specify the possible installation root, we look for
-  # one installation using the appropriate heuristics.
-  # There is apparently no standard way on Linux.
-  if(CMAKE_HOST_WIN32)
-    _Matlab_find_instances_win32(_matlab_possible_roots_win32)
-    list(APPEND _matlab_possible_roots ${_matlab_possible_roots_win32})
-  elseif(APPLE)
-    _Matlab_find_instances_osx(_matlab_possible_roots_osx)
-    list(APPEND _matlab_possible_roots ${_matlab_possible_roots_osx})
-  endif()
-endif()
-
-
-list(LENGTH _matlab_possible_roots _numbers_of_matlab_roots)
-if(_numbers_of_matlab_roots EQUAL 0)
-  # if we have not found anything, we fall back on the PATH
-  _Matlab_find_instances_from_path(_matlab_possible_roots)
-endif()
-
-
-if(MATLAB_FIND_DEBUG)
-  message(STATUS "[MATLAB] Matlab root folders are ${_matlab_possible_roots}")
-endif()
-
-
-
-
-
-# take the first possible Matlab root
-list(LENGTH _matlab_possible_roots _numbers_of_matlab_roots)
-set(Matlab_VERSION_STRING "NOTFOUND")
-set(Matlab_Or_MCR "UNKNOWN")
-if(_numbers_of_matlab_roots GREATER 0)
-  if(Matlab_FIND_VERSION_EXACT)
-    list(FIND _matlab_possible_roots ${Matlab_FIND_VERSION} _list_index)
-    if(_list_index LESS 0)
-      set(_list_index 1)
-    endif()
-
-    math(EXPR _matlab_or_mcr_index "${_list_index} - 1")
-    math(EXPR _matlab_root_dir_index "${_list_index} + 1")
-
-    list(GET _matlab_possible_roots ${_matlab_or_mcr_index} Matlab_Or_MCR)
-    list(GET _matlab_possible_roots ${_list_index} Matlab_VERSION_STRING)
-    list(GET _matlab_possible_roots ${_matlab_root_dir_index} Matlab_ROOT_DIR)
-  else()
-    list(GET _matlab_possible_roots 0 Matlab_Or_MCR)
-    list(GET _matlab_possible_roots 1 Matlab_VERSION_STRING)
-    list(GET _matlab_possible_roots 2 Matlab_ROOT_DIR)
-
-    # adding a warning in case of ambiguity
-    if(_numbers_of_matlab_roots GREATER 3 AND MATLAB_FIND_DEBUG)
-      message(WARNING "[MATLAB] Found several distributions of Matlab. Setting the current version to ${Matlab_VERSION_STRING} (located ${Matlab_ROOT_DIR})."
-                      " If this is not the desired behaviour, use the EXACT keyword or provide the -DMatlab_ROOT_DIR=... on the command line")
-    endif()
-  endif()
-endif()
-
-
-# check if the root changed wrt. the previous defined one, if so
-# clear all the cached variables for being able to reconfigure properly
-if(DEFINED Matlab_ROOT_DIR_LAST_CACHED)
-
-  if(NOT Matlab_ROOT_DIR_LAST_CACHED STREQUAL Matlab_ROOT_DIR)
-    set(_Matlab_cached_vars
-        Matlab_VERSION_STRING
-        Matlab_INCLUDE_DIRS
-        Matlab_MEX_LIBRARY
-        Matlab_MEX_COMPILER
-        Matlab_MCC_COMPILER
-        Matlab_MAIN_PROGRAM
-        Matlab_MX_LIBRARY
-        Matlab_ENG_LIBRARY
-        Matlab_MAT_LIBRARY
-        Matlab_ENGINE_LIBRARY
-        Matlab_DATAARRAY_LIBRARY
-        Matlab_MEX_EXTENSION
-        Matlab_SIMULINK_INCLUDE_DIR
-
-        # internal
-        Matlab_MEXEXTENSIONS_PROG
-        Matlab_ROOT_DIR_LAST_CACHED
-        #Matlab_PROG_VERSION_STRING_AUTO_DETECT
-        #Matlab_VERSION_STRING_INTERNAL
-        )
-    foreach(_var IN LISTS _Matlab_cached_vars)
-      if(DEFINED ${_var})
-        unset(${_var} CACHE)
-      endif()
-    endforeach()
-  endif()
-endif()
-
-set(Matlab_ROOT_DIR_LAST_CACHED ${Matlab_ROOT_DIR} CACHE INTERNAL "last Matlab root dir location")
-set(Matlab_ROOT_DIR ${Matlab_ROOT_DIR} CACHE PATH "Matlab installation root path" FORCE)
-
-# Fix the version, in case this one is NOTFOUND
-_Matlab_get_version_from_root(
-  "${Matlab_ROOT_DIR}"
-  "${Matlab_Or_MCR}"
-  ${Matlab_VERSION_STRING}
-  Matlab_VERSION_STRING
-)
-
-if(MATLAB_FIND_DEBUG)
-  message(STATUS "[MATLAB] Current version is ${Matlab_VERSION_STRING} located ${Matlab_ROOT_DIR}")
-endif()
-
-# MATLAB 9.4 (R2018a) and newer have a new C++ API
-# This API pulls additional required libraries.
-if(NOT ${Matlab_VERSION_STRING} VERSION_LESS "9.4")
-  set(Matlab_HAS_CPP_API 1)
-endif()
-
-if(Matlab_ROOT_DIR)
-  file(TO_CMAKE_PATH ${Matlab_ROOT_DIR} Matlab_ROOT_DIR)
-endif()
-
-if(CMAKE_SIZEOF_VOID_P EQUAL 4)
-  set(_matlab_64Build FALSE)
-else()
-  set(_matlab_64Build TRUE)
-endif()
-
-if(APPLE)
-  set(_matlab_bin_prefix "mac") # i should be for intel
-  set(_matlab_bin_suffix_32bits "i")
-  set(_matlab_bin_suffix_64bits "i64")
-elseif(UNIX)
-  set(_matlab_bin_prefix "gln")
-  set(_matlab_bin_suffix_32bits "x86")
-  set(_matlab_bin_suffix_64bits "xa64")
-else()
-  set(_matlab_bin_prefix "win")
-  set(_matlab_bin_suffix_32bits "32")
-  set(_matlab_bin_suffix_64bits "64")
-endif()
-
-
-
-set(MATLAB_INCLUDE_DIR_TO_LOOK ${Matlab_ROOT_DIR}/extern/include)
-if(_matlab_64Build)
-  set(_matlab_current_suffix ${_matlab_bin_suffix_64bits})
-else()
-  set(_matlab_current_suffix ${_matlab_bin_suffix_32bits})
-endif()
-
-set(Matlab_BINARIES_DIR
-    ${Matlab_ROOT_DIR}/bin/${_matlab_bin_prefix}${_matlab_current_suffix})
-set(Matlab_EXTERN_LIBRARY_DIR
-    ${Matlab_ROOT_DIR}/extern/lib/${_matlab_bin_prefix}${_matlab_current_suffix})
-set(Matlab_EXTERN_BINARIES_DIR
-    ${Matlab_ROOT_DIR}/extern/bin/${_matlab_bin_prefix}${_matlab_current_suffix})
-
-if(WIN32)
-  if(MINGW)
-    set(_matlab_lib_dir_for_search ${Matlab_EXTERN_LIBRARY_DIR}/mingw64)
-  else()
-    set(_matlab_lib_dir_for_search ${Matlab_EXTERN_LIBRARY_DIR}/microsoft)
-  endif()
-  set(_matlab_lib_prefix_for_search "lib")
-else()
-  set(_matlab_lib_dir_for_search ${Matlab_BINARIES_DIR} ${Matlab_EXTERN_BINARIES_DIR})
-  set(_matlab_lib_prefix_for_search "lib")
-endif()
-
-unset(_matlab_64Build)
-
-
-if(NOT DEFINED Matlab_MEX_EXTENSION)
-  set(_matlab_mex_extension "")
-  matlab_get_mex_suffix("${Matlab_ROOT_DIR}" _matlab_mex_extension)
-
-  # This variable goes to the cache.
-  set(Matlab_MEX_EXTENSION ${_matlab_mex_extension} CACHE STRING "Extensions for the mex targets (automatically given by Matlab)")
-  unset(_matlab_mex_extension)
-endif()
-
-
-if(MATLAB_FIND_DEBUG)
-  message(STATUS "[MATLAB] [DEBUG]_matlab_lib_prefix_for_search = ${_matlab_lib_prefix_for_search} | _matlab_lib_dir_for_search = ${_matlab_lib_dir_for_search}")
-endif()
-
-
-
-# internal
-# This small stub around find_library is to prevent any pollution of CMAKE_FIND_LIBRARY_PREFIXES in the global scope.
-# This is the function to be used below instead of the find_library directives.
-function(_Matlab_find_library _matlab_library_prefix)
-  set(CMAKE_FIND_LIBRARY_PREFIXES ${CMAKE_FIND_LIBRARY_PREFIXES} ${_matlab_library_prefix})
-  find_library(${ARGN})
-endfunction()
-
-
-set(_matlab_required_variables)
-
-# Order is as follow:
-# - unconditionally required libraries/headers first
-# - then library components
-# - then program components
-
-# the MEX library/header are required
-find_path(
-  Matlab_INCLUDE_DIRS
-  mex.h
-  PATHS ${MATLAB_INCLUDE_DIR_TO_LOOK}
-  NO_DEFAULT_PATH
-  )
-list(APPEND _matlab_required_variables Matlab_INCLUDE_DIRS)
-
-_Matlab_find_library(
-  ${_matlab_lib_prefix_for_search}
-  Matlab_MEX_LIBRARY
-  mex
-  PATHS ${_matlab_lib_dir_for_search}
-  NO_DEFAULT_PATH
-)
-list(APPEND _matlab_required_variables Matlab_MEX_LIBRARY)
-
-# the MEX extension is required
-list(APPEND _matlab_required_variables Matlab_MEX_EXTENSION)
-
-# the matlab root is required
-list(APPEND _matlab_required_variables Matlab_ROOT_DIR)
-
-# The MX library is required
-_Matlab_find_library(
-  ${_matlab_lib_prefix_for_search}
-  Matlab_MX_LIBRARY
-  mx
-  PATHS ${_matlab_lib_dir_for_search}
-  NO_DEFAULT_PATH
-)
-list(APPEND _matlab_required_variables Matlab_MX_LIBRARY)
-if(Matlab_MX_LIBRARY)
-  set(Matlab_MX_LIBRARY_FOUND TRUE)
-endif()
-
-if(Matlab_HAS_CPP_API)
-
-  # The MatlabEngine library is required for R2018a+
-  _Matlab_find_library(
-    ${_matlab_lib_prefix_for_search}
-    Matlab_ENGINE_LIBRARY
-    MatlabEngine
-    PATHS ${_matlab_lib_dir_for_search}
-    DOC "MatlabEngine Library"
-    NO_DEFAULT_PATH
-  )
-  list(APPEND _matlab_required_variables Matlab_ENGINE_LIBRARY)
-  if(Matlab_ENGINE_LIBRARY)
-    set(Matlab_ENGINE_LIBRARY_FOUND TRUE)
-  endif()
-
-  # The MatlabDataArray library is required for R2018a+
-  _Matlab_find_library(
-    ${_matlab_lib_prefix_for_search}
-    Matlab_DATAARRAY_LIBRARY
-    MatlabDataArray
-    PATHS ${_matlab_lib_dir_for_search}
-    DOC "MatlabDataArray Library"
-    NO_DEFAULT_PATH
-  )
-  list(APPEND _matlab_required_variables Matlab_DATAARRAY_LIBRARY)
-  if(Matlab_DATAARRAY_LIBRARY)
-    set(Matlab_DATAARRAY_LIBRARY_FOUND TRUE)
-  endif()
-
-endif()
-
-# Component ENG library
-if("ENG_LIBRARY" IN_LIST Matlab_FIND_COMPONENTS)
-  _Matlab_find_library(
-    ${_matlab_lib_prefix_for_search}
-    Matlab_ENG_LIBRARY
-    eng
-    PATHS ${_matlab_lib_dir_for_search}
-    NO_DEFAULT_PATH
-  )
-  if(Matlab_ENG_LIBRARY)
-    set(Matlab_ENG_LIBRARY_FOUND TRUE)
-  endif()
-endif()
-
-# Component MAT library
-if("MAT_LIBRARY" IN_LIST Matlab_FIND_COMPONENTS)
-  _Matlab_find_library(
-    ${_matlab_lib_prefix_for_search}
-    Matlab_MAT_LIBRARY
-    mat
-    PATHS ${_matlab_lib_dir_for_search}
-    NO_DEFAULT_PATH
-  )
-  if(Matlab_MAT_LIBRARY)
-    set(Matlab_MAT_LIBRARY_FOUND TRUE)
-  endif()
-endif()
-
-# Component Simulink
-if("SIMULINK" IN_LIST Matlab_FIND_COMPONENTS)
-  find_path(
-    Matlab_SIMULINK_INCLUDE_DIR
-    simstruc.h
-    PATHS "${Matlab_ROOT_DIR}/simulink/include"
-    NO_DEFAULT_PATH
-    )
-  if(Matlab_SIMULINK_INCLUDE_DIR)
-    set(Matlab_SIMULINK_FOUND TRUE)
-    list(APPEND Matlab_INCLUDE_DIRS "${Matlab_SIMULINK_INCLUDE_DIR}")
-  endif()
-endif()
-
-# component Matlab program
-if("MAIN_PROGRAM" IN_LIST Matlab_FIND_COMPONENTS)
-  find_program(
-    Matlab_MAIN_PROGRAM
-    matlab
-    PATHS ${Matlab_ROOT_DIR} ${Matlab_ROOT_DIR}/bin
-    DOC "Matlab main program"
-    NO_DEFAULT_PATH
-  )
-  if(Matlab_MAIN_PROGRAM)
-    set(Matlab_MAIN_PROGRAM_FOUND TRUE)
-  endif()
-endif()
-
-# component Mex Compiler
-if("MEX_COMPILER" IN_LIST Matlab_FIND_COMPONENTS)
-  find_program(
-    Matlab_MEX_COMPILER
-    "mex"
-    PATHS ${Matlab_BINARIES_DIR}
-    DOC "Matlab MEX compiler"
-    NO_DEFAULT_PATH
-  )
-  if(Matlab_MEX_COMPILER)
-    set(Matlab_MEX_COMPILER_FOUND TRUE)
-  endif()
-endif()
-
-# component MCC Compiler
-if("MCC_COMPILER" IN_LIST Matlab_FIND_COMPONENTS)
-  find_program(
-    Matlab_MCC_COMPILER
-    "mcc"
-    PATHS ${Matlab_BINARIES_DIR}
-    DOC "Matlab MCC compiler"
-    NO_DEFAULT_PATH
-  )
-  if(Matlab_MCC_COMPILER)
-    set(Matlab_MCC_COMPILER_FOUND TRUE)
-  endif()
-endif()
-
-set(Matlab_LIBRARIES
-  ${Matlab_MEX_LIBRARY} ${Matlab_MX_LIBRARY}
-  ${Matlab_ENG_LIBRARY} ${Matlab_MAT_LIBRARY}
-  ${Matlab_DATAARRAY_LIBRARY} ${Matlab_ENGINE_LIBRARY})
-
-find_package_handle_standard_args(
-  Matlab
-  FOUND_VAR Matlab_FOUND
-  REQUIRED_VARS ${_matlab_required_variables}
-  VERSION_VAR Matlab_VERSION_STRING
-  HANDLE_COMPONENTS)
-
-unset(_matlab_required_variables)
-unset(_matlab_bin_prefix)
-unset(_matlab_bin_suffix_32bits)
-unset(_matlab_bin_suffix_64bits)
-unset(_matlab_current_suffix)
-unset(_matlab_lib_dir_for_search)
-unset(_matlab_lib_prefix_for_search)
-
-if(Matlab_INCLUDE_DIRS AND Matlab_LIBRARIES)
-  mark_as_advanced(
-    Matlab_MEX_LIBRARY
-    Matlab_MX_LIBRARY
-    Matlab_ENG_LIBRARY
-    Matlab_ENGINE_LIBRARY
-    Matlab_DATAARRAY_LIBRARY
-    Matlab_MAT_LIBRARY
-    Matlab_INCLUDE_DIRS
-    Matlab_FOUND
-    Matlab_MAIN_PROGRAM
-    Matlab_MEXEXTENSIONS_PROG
-    Matlab_MEX_EXTENSION
-  )
-endif()
-
-cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/FindODBC.cmake b/share/cmake-3.18/Modules/FindODBC.cmake
deleted file mode 100644
index 3f710db..0000000
--- a/share/cmake-3.18/Modules/FindODBC.cmake
+++ /dev/null
@@ -1,231 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindODBC
---------
-
-Find an Open Database Connectivity (ODBC) include directory and library.
-
-On Windows, when building with Visual Studio, this module assumes the ODBC
-library is provided by the available Windows SDK.
-
-On Unix, this module allows to search for ODBC library provided by
-unixODBC or iODBC implementations of ODBC API.
-This module reads hint about location of the config program:
-
-.. variable:: ODBC_CONFIG
-
-  Location of odbc_config or iodbc-config program
-
-Otherwise, this module tries to find the config program,
-first from unixODBC, then from iODBC.
-If no config program found, this module searches for ODBC header
-and library in list of known locations.
-
-Imported targets
-^^^^^^^^^^^^^^^^
-
-This module defines the following :prop_tgt:`IMPORTED` targets:
-
-.. variable:: ODBC::ODBC
-
-  Imported target for using the ODBC library, if found.
-
-Result variables
-^^^^^^^^^^^^^^^^
-
-.. variable:: ODBC_FOUND
-
-  Set to true if ODBC library found, otherwise false or undefined.
-
-.. variable:: ODBC_INCLUDE_DIRS
-
-  Paths to include directories listed in one variable for use by ODBC client.
-  May be empty on Windows, where the include directory corresponding to the
-  expected Windows SDK is already available in the compilation environment.
-
-.. variable:: ODBC_LIBRARIES
-
-  Paths to libraries to linked against to use ODBC.
-  May just a library name on Windows, where the library directory corresponding
-  to the expected Windows SDK is already available in the compilation environment.
-
-.. variable:: ODBC_CONFIG
-
-  Path to unixODBC or iODBC config program, if found or specified.
-
-Cache variables
-^^^^^^^^^^^^^^^
-
-For users who wish to edit and control the module behavior, this module
-reads hints about search locations from the following variables:
-
-.. variable:: ODBC_INCLUDE_DIR
-
-  Path to ODBC include directory with ``sql.h`` header.
-
-.. variable:: ODBC_LIBRARY
-
-  Path to ODBC library to be linked.
-
-These variables should not be used directly by project code.
-
-Limitations
-^^^^^^^^^^^
-
-On Windows, this module does not search for iODBC.
-On Unix, there is no way to prefer unixODBC over iODBC, or vice versa,
-other than providing the config program location using the ``ODBC_CONFIG``.
-This module does not allow to search for a specific ODBC driver.
-
-#]=======================================================================]
-
-# Define lists used internally
-set(_odbc_include_paths)
-set(_odbc_lib_paths)
-set(_odbc_lib_names)
-set(_odbc_required_libs_names)
-
-### Try Windows Kits ##########################################################
-if(WIN32)
-  # List names of ODBC libraries on Windows
-  if(NOT MINGW)
-    set(ODBC_LIBRARY odbc32.lib)
-  else()
-    set(ODBC_LIBRARY libodbc32.a)
-  endif()
-  set(_odbc_lib_names odbc32;)
-
-  # List additional libraries required to use ODBC library
-  if(MSVC OR CMAKE_CXX_COMPILER_ID MATCHES "Intel")
-    set(_odbc_required_libs_names odbccp32;ws2_32)
-  elseif(MINGW)
-    set(_odbc_required_libs_names odbccp32)
-  endif()
-endif()
-
-### Try unixODBC or iODBC config program ######################################
-if (UNIX)
-  find_program(ODBC_CONFIG
-    NAMES odbc_config iodbc-config
-    DOC "Path to unixODBC or iODBC config program")
-  mark_as_advanced(ODBC_CONFIG)
-endif()
-
-if (UNIX AND ODBC_CONFIG)
-  # unixODBC and iODBC accept unified command line options
-  execute_process(COMMAND ${ODBC_CONFIG} --cflags
-    OUTPUT_VARIABLE _cflags OUTPUT_STRIP_TRAILING_WHITESPACE)
-  execute_process(COMMAND ${ODBC_CONFIG} --libs
-    OUTPUT_VARIABLE _libs OUTPUT_STRIP_TRAILING_WHITESPACE)
-
-  # Collect paths of include directories from CFLAGS
-  separate_arguments(_cflags NATIVE_COMMAND "${_cflags}")
-  foreach(arg IN LISTS _cflags)
-    if("${arg}" MATCHES "^-I(.*)$")
-      list(APPEND _odbc_include_paths "${CMAKE_MATCH_1}")
-    endif()
-  endforeach()
-  unset(_cflags)
-
-  # Collect paths of library names and directories from LIBS
-  separate_arguments(_libs NATIVE_COMMAND "${_libs}")
-  foreach(arg IN LISTS _libs)
-    if("${arg}" MATCHES "^-L(.*)$")
-      list(APPEND _odbc_lib_paths "${CMAKE_MATCH_1}")
-    elseif("${arg}" MATCHES "^-l(.*)$")
-      set(_lib_name ${CMAKE_MATCH_1})
-      string(REGEX MATCH "odbc" _is_odbc ${_lib_name})
-      if(_is_odbc)
-        list(APPEND _odbc_lib_names ${_lib_name})
-      else()
-        list(APPEND _odbc_required_libs_names ${_lib_name})
-      endif()
-      unset(_lib_name)
-    endif()
-  endforeach()
-  unset(_libs)
-endif()
-
-### Try unixODBC or iODBC in include/lib filesystems ##########################
-if (UNIX AND NOT ODBC_CONFIG)
-  # List names of both ODBC libraries, unixODBC and iODBC
-  set(_odbc_lib_names odbc;iodbc;unixodbc;)
-endif()
-
-### Find include directories ##################################################
-find_path(ODBC_INCLUDE_DIR
-  NAMES sql.h
-  PATHS ${_odbc_include_paths})
-
-if(NOT ODBC_INCLUDE_DIR AND WIN32)
-  set(ODBC_INCLUDE_DIR "")
-endif()
-
-### Find libraries ############################################################
-if(NOT ODBC_LIBRARY)
-  find_library(ODBC_LIBRARY
-    NAMES ${_odbc_lib_names}
-    PATHS ${_odbc_lib_paths}
-    PATH_SUFFIXES odbc)
-
-  foreach(_lib IN LISTS _odbc_required_libs_names)
-    find_library(_lib_path
-      NAMES ${_lib}
-      PATHS ${_odbc_lib_paths} # system parths or collected from ODBC_CONFIG
-      PATH_SUFFIXES odbc)
-    if(_lib_path)
-      list(APPEND _odbc_required_libs_paths ${_lib_path})
-    endif()
-    unset(_lib_path CACHE)
-  endforeach()
-endif()
-
-# Unset internal lists as no longer used
-unset(_odbc_include_paths)
-unset(_odbc_lib_paths)
-unset(_odbc_lib_names)
-unset(_odbc_required_libs_names)
-
-### Set result variables ######################################################
-set(_odbc_required_vars ODBC_LIBRARY)
-if(NOT WIN32)
-  list(APPEND _odbc_required_vars ODBC_INCLUDE_DIR)
-endif()
-
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(ODBC DEFAULT_MSG ${_odbc_required_vars})
-
-unset(_odbc_required_vars)
-
-mark_as_advanced(ODBC_LIBRARY ODBC_INCLUDE_DIR)
-
-set(ODBC_INCLUDE_DIRS ${ODBC_INCLUDE_DIR})
-list(APPEND ODBC_LIBRARIES ${ODBC_LIBRARY})
-list(APPEND ODBC_LIBRARIES ${_odbc_required_libs_paths})
-
-### Import targets ############################################################
-if(ODBC_FOUND)
-  if(NOT TARGET ODBC::ODBC)
-    if(IS_ABSOLUTE "${ODBC_LIBRARY}")
-      add_library(ODBC::ODBC UNKNOWN IMPORTED)
-      set_target_properties(ODBC::ODBC PROPERTIES
-        IMPORTED_LINK_INTERFACE_LANGUAGES "C"
-        IMPORTED_LOCATION "${ODBC_LIBRARY}")
-    else()
-      add_library(ODBC::ODBC INTERFACE IMPORTED)
-      set_target_properties(ODBC::ODBC PROPERTIES
-        IMPORTED_LIBNAME "${ODBC_LIBRARY}")
-    endif()
-    set_target_properties(ODBC::ODBC PROPERTIES
-      INTERFACE_INCLUDE_DIRECTORIES "${ODBC_INCLUDE_DIR}")
-
-    if(_odbc_required_libs_paths)
-      set_property(TARGET ODBC::ODBC APPEND PROPERTY
-        INTERFACE_LINK_LIBRARIES "${_odbc_required_libs_paths}")
-    endif()
-  endif()
-endif()
-
-unset(_odbc_required_libs_paths)
diff --git a/share/cmake-3.18/Modules/FindOpenACC.cmake b/share/cmake-3.18/Modules/FindOpenACC.cmake
deleted file mode 100644
index 398dcf5..0000000
--- a/share/cmake-3.18/Modules/FindOpenACC.cmake
+++ /dev/null
@@ -1,284 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindOpenACC
------------
-
-Detect OpenACC support by the compiler.
-
-This module can be used to detect OpenACC support in a compiler.
-If the compiler supports OpenACC, the flags required to compile with
-OpenACC support are returned in variables for the different languages.
-Currently, only PGI, GNU and Cray compilers are supported.
-
-Variables
-^^^^^^^^^
-
-This module will set the following variables per language in your
-project, where ``<lang>`` is one of C, CXX, or Fortran:
-
-``OpenACC_<lang>_FOUND``
-  Variable indicating if OpenACC support for ``<lang>`` was detected.
-``OpenACC_<lang>_FLAGS``
-  OpenACC compiler flags for ``<lang>``, separated by spaces.
-``OpenACC_<lang>_OPTIONS``
-  OpenACC compiler flags for ``<lang>``, as a list. Suitable for usage
-  with target_compile_options or target_link_options.
-
-Additionally, the module provides :prop_tgt:`IMPORTED` targets:
-
-``OpenACC::OpenACC_<lang>``
-  Target for using OpenACC from ``<lang>``.
-
-The module will also try to provide the OpenACC version variables:
-
-``OpenACC_<lang>_SPEC_DATE``
-  Date of the OpenACC specification implemented by the ``<lang>`` compiler.
-``OpenACC_<lang>_VERSION_MAJOR``
-  Major version of OpenACC implemented by the ``<lang>`` compiler.
-``OpenACC_<lang>_VERSION_MINOR``
-  Minor version of OpenACC implemented by the ``<lang>`` compiler.
-``OpenACC_<lang>_VERSION``
-  OpenACC version implemented by the ``<lang>`` compiler.
-
-The specification date is formatted as given in the OpenACC standard:
-``yyyymm`` where ``yyyy`` and ``mm`` represents the year and month of
-the OpenACC specification implemented by the ``<lang>`` compiler.
-
-Input Variables
-^^^^^^^^^^^^^^^
-
-``OpenACC_ACCEL_TARGET=<target>``
-If set, will the correct target accelerator flag set to the <target> will
-be returned with OpenACC_<lang>_FLAGS.
-#]=======================================================================]
-
-set(OpenACC_C_CXX_TEST_SOURCE
-"
-int main(){
-#ifdef _OPENACC
-  return 0;
-#else
-  breaks_on_purpose
-#endif
-}
-"
-)
-set(OpenACC_Fortran_TEST_SOURCE
-"
-program test
-#ifndef _OPENACC
-  breaks_on_purpose
-#endif
-endprogram test
-"
-)
-set(OpenACC_C_CXX_CHECK_VERSION_SOURCE
-"
-#include <stdio.h>
-const char accver_str[] = { 'I', 'N', 'F', 'O', ':', 'O', 'p', 'e', 'n', 'A',
-                            'C', 'C', '-', 'd', 'a', 't', 'e', '[',
-                            ('0' + ((_OPENACC/100000)%10)),
-                            ('0' + ((_OPENACC/10000)%10)),
-                            ('0' + ((_OPENACC/1000)%10)),
-                            ('0' + ((_OPENACC/100)%10)),
-                            ('0' + ((_OPENACC/10)%10)),
-                            ('0' + ((_OPENACC/1)%10)),
-                            ']', '\\0' };
-int main()
-{
-  puts(accver_str);
-  return 0;
-}
-")
-set(OpenACC_Fortran_CHECK_VERSION_SOURCE
-"
-      program acc_ver
-      implicit none
-      integer, parameter :: zero = ichar('0')
-      character, dimension(25), parameter :: accver_str =&
-      (/ 'I', 'N', 'F', 'O', ':', 'O', 'p', 'e', 'n', 'A', 'C', 'C', '-',&
-         'd', 'a', 't', 'e', '[',&
-         char(zero + mod(_OPENACC/100000, 10)),&
-         char(zero + mod(_OPENACC/10000, 10)),&
-         char(zero + mod(_OPENACC/1000, 10)),&
-         char(zero + mod(_OPENACC/100, 10)),&
-         char(zero + mod(_OPENACC/10, 10)),&
-         char(zero + mod(_OPENACC/1, 10)), ']' /)
-      print *, accver_str
-      end program acc_ver
-"
-)
-
-
-function(_OPENACC_WRITE_SOURCE_FILE LANG SRC_FILE_CONTENT_VAR SRC_FILE_NAME SRC_FILE_FULLPATH)
-  set(WORK_DIR ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/FindOpenACC)
-  if("${LANG}" STREQUAL "C")
-    set(SRC_FILE "${WORK_DIR}/${SRC_FILE_NAME}.c")
-    file(WRITE "${SRC_FILE}" "${OpenACC_C_CXX_${SRC_FILE_CONTENT_VAR}}")
-  elseif("${LANG}" STREQUAL "CXX")
-    set(SRC_FILE "${WORK_DIR}/${SRC_FILE_NAME}.cpp")
-    file(WRITE "${SRC_FILE}" "${OpenACC_C_CXX_${SRC_FILE_CONTENT_VAR}}")
-  elseif("${LANG}" STREQUAL "Fortran")
-    set(SRC_FILE "${WORK_DIR}/${SRC_FILE_NAME}.F90")
-    file(WRITE "${SRC_FILE}_in" "${OpenACC_Fortran_${SRC_FILE_CONTENT_VAR}}")
-    configure_file("${SRC_FILE}_in" "${SRC_FILE}" @ONLY)
-  endif()
-  set(${SRC_FILE_FULLPATH} "${SRC_FILE}" PARENT_SCOPE)
-endfunction()
-
-
-function(_OPENACC_GET_FLAGS_CANDIDATE LANG FLAG_VAR)
-  set(ACC_FLAG_PGI "-acc")
-  set(ACC_FLAG_GNU "-fopenacc")
-  set(ACC_FLAG_Cray "-h acc")
-
-  if(DEFINED ACC_FLAG_${CMAKE_${LANG}_COMPILER_ID})
-    set("${FLAG_VAR}" "${ACC_FLAG_${CMAKE_${LANG}_COMPILER_ID}}" PARENT_SCOPE)
-  else()
-    # Fall back to a few common flags.
-    set("${FLAG_VAR}" ${ACC_FLAG_GNU} ${ACC_FLAG_PGI})
-  endif()
-
-endfunction()
-
-
-function(_OPENACC_GET_ACCEL_TARGET_FLAG LANG TARGET FLAG_VAR)
-  # Find target accelerator flags.
-  set(ACC_TARGET_FLAG_PGI "-ta")
-  if(DEFINED ACC_TARGET_FLAG_${CMAKE_${LANG}_COMPILER_ID})
-    set("${FLAG_VAR}" "${ACC_TARGET_FLAG_${CMAKE_${LANG}_COMPILER_ID}}=${TARGET}" PARENT_SCOPE)
-  endif()
-endfunction()
-
-
-function(_OPENACC_GET_VERBOSE_FLAG LANG FLAG_VAR)
-  # Find compiler's verbose flag for OpenACC.
-  set(ACC_VERBOSE_FLAG_PGI "-Minfo=accel")
-  if(DEFINED ACC_VERBOSE_FLAG_${CMAKE_${LANG}_COMPILER_ID})
-    set("${FLAG_VAR}" "${ACC_VERBOSE_FLAG_${CMAKE_${LANG}_COMPILER_ID}}" PARENT_SCOPE)
-  endif()
-endfunction()
-
-
-function(_OPENACC_GET_FLAGS LANG FLAG_VAR)
-  set(FLAG_CANDIDATES "")
-  _OPENACC_GET_FLAGS_CANDIDATE("${LANG}" FLAG_CANDIDATES)
-  _OPENACC_WRITE_SOURCE_FILE("${LANG}" "TEST_SOURCE" OpenACCTryFlag _OPENACC_TEST_SRC)
-
-  foreach(FLAG IN LISTS FLAG_CANDIDATES)
-    try_compile(OpenACC_FLAG_TEST_RESULT ${CMAKE_BINARY_DIR} ${_OPENACC_TEST_SRC}
-      CMAKE_FLAGS "-DCOMPILE_DEFINITIONS:STRING=${FLAG}"
-      OUTPUT_VARIABLE OpenACC_TRY_COMPILE_OUTPUT
-    )
-    if(OpenACC_FLAG_TEST_RESULT)
-      set("${FLAG_VAR}" "${FLAG}")
-      if(DEFINED OpenACC_ACCEL_TARGET)
-        _OPENACC_GET_ACCEL_TARGET_FLAG("${LANG}" "${OpenACC_ACCEL_TARGET}" TARGET_FLAG)
-        string(APPEND "${FLAG_VAR}" " ${TARGET_FLAG}")
-      endif()
-
-      if(CMAKE_VERBOSE_MAKEFILE)
-        # -Minfo=accel prints out OpenACC's messages on optimizations.
-        _OPENACC_GET_VERBOSE_FLAG("${LANG}" OpenACC_VERBOSE_FLAG)
-        string(APPEND "${FLAG_VAR}" " ${OpenACC_VERBOSE_FLAG}")
-      endif()
-      set("${FLAG_VAR}" "${${FLAG_VAR}}" PARENT_SCOPE)
-      break()
-    endif()
-  endforeach()
-
-endfunction()
-
-
-function(_OPENACC_GET_SPEC_DATE LANG SPEC_DATE)
-  _OPENACC_WRITE_SOURCE_FILE("${LANG}" "CHECK_VERSION_SOURCE" OpenACCCheckVersion _OPENACC_TEST_SRC)
-
-  set(BIN_FILE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/FindOpenACC/accver_${LANG}.bin")
-  try_compile(OpenACC_SPECTEST_${LANG} "${CMAKE_BINARY_DIR}" "${_OPENACC_TEST_SRC}"
-              CMAKE_FLAGS "-DCOMPILE_DEFINITIONS:STRING=${OpenACC_${LANG}_FLAGS}"
-              COPY_FILE ${BIN_FILE}
-              OUTPUT_VARIABLE OUTPUT)
-
-  if(${OpenACC_SPECTEST_${LANG}})
-    file(STRINGS ${BIN_FILE} specstr LIMIT_COUNT 1 REGEX "INFO:OpenACC-date")
-    set(regex_spec_date ".*INFO:OpenACC-date\\[0*([^]]*)\\].*")
-    if("${specstr}" MATCHES "${regex_spec_date}")
-      set(${SPEC_DATE} "${CMAKE_MATCH_1}" PARENT_SCOPE)
-    endif()
-  endif()
-endfunction()
-
-
-macro(_OPENACC_SET_VERSION_BY_SPEC_DATE LANG)
-  set(OpenACC_SPEC_DATE_MAP
-    # Combined versions, 2.5 onwards
-    "201510=2.5"
-    # 2013 08 is the corrected version.
-    "201308=2.0"
-    "201306=2.0"
-    "201111=1.0"
-  )
-
-  string(REGEX MATCHALL "${OpenACC_${LANG}_SPEC_DATE}=([0-9]+)\\.([0-9]+)" _version_match "${OpenACC_SPEC_DATE_MAP}")
-  if(NOT _version_match STREQUAL "")
-    set(OpenACC_${LANG}_VERSION_MAJOR ${CMAKE_MATCH_1})
-    set(OpenACC_${LANG}_VERSION_MINOR ${CMAKE_MATCH_2})
-    set(OpenACC_${LANG}_VERSION "${OpenACC_${LANG}_VERSION_MAJOR}.${OpenACC_${LANG}_VERSION_MINOR}")
-  else()
-    unset(OpenACC_${LANG}_VERSION_MAJOR)
-    unset(OpenACC_${LANG}_VERSION_MINOR)
-    unset(OpenACC_${LANG}_VERSION)
-  endif()
-  unset(_version_match)
-  unset(OpenACC_SPEC_DATE_MAP)
-endmacro()
-
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-foreach (LANG IN ITEMS C CXX Fortran)
-  if(CMAKE_${LANG}_COMPILER_LOADED)
-    set(OpenACC_${LANG}_FIND_QUIETLY ${OpenACC_FIND_QUIETLY})
-    set(OpenACC_${LANG}_FIND_REQUIRED ${OpenACC_FIND_REQUIRED})
-    set(OpenACC_${LANG}_FIND_VERSION ${OpenACC_FIND_VERSION})
-    set(OpenACC_${LANG}_FIND_VERSION_EXACT ${OpenACC_FIND_VERSION_EXACT})
-
-    if(NOT DEFINED OpenACC_${LANG}_FLAGS)
-      _OPENACC_GET_FLAGS("${LANG}" OpenACC_${LANG}_FLAGS)
-    endif()
-    if(NOT DEFINED OpenACC_${LANG}_OPTIONS)
-      separate_arguments(OpenACC_${LANG}_OPTIONS NATIVE_COMMAND "${OpenACC_${LANG}_FLAGS}")
-    endif()
-    _OPENACC_GET_SPEC_DATE("${LANG}" OpenACC_${LANG}_SPEC_DATE)
-    _OPENACC_SET_VERSION_BY_SPEC_DATE("${LANG}")
-
-    find_package_handle_standard_args(OpenACC_${LANG}
-      NAME_MISMATCHED
-      REQUIRED_VARS OpenACC_${LANG}_FLAGS
-      VERSION_VAR OpenACC_${LANG}_VERSION
-    )
-  endif()
-endforeach()
-
-foreach (LANG IN ITEMS C CXX Fortran)
-  if(OpenACC_${LANG}_FOUND AND NOT TARGET OpenACC::OpenACC_${LANG})
-    add_library(OpenACC::OpenACC_${LANG} INTERFACE IMPORTED)
-  endif()
-  if(OpenACC_${LANG}_LIBRARIES)
-    set_property(TARGET OpenACC::OpenACC_${LANG} PROPERTY
-      INTERFACE_LINK_LIBRARIES "${OpenACC_${LANG}_LIBRARIES}")
-  endif()
-  if(OpenACC_${LANG}_FLAGS)
-    set_property(TARGET OpenACC::OpenACC_${LANG} PROPERTY
-      INTERFACE_COMPILE_OPTIONS "$<$<COMPILE_LANGUAGE:${LANG}>:${OpenACC_${LANG}_OPTIONS}>")
-    set_property(TARGET OpenACC::OpenACC_${LANG} PROPERTY
-      INTERFACE_LINK_OPTIONS "$<$<COMPILE_LANGUAGE:${LANG}>:${OpenACC_${LANG}_OPTIONS}>")
-    unset(_OpenACC_${LANG}_OPTIONS)
-  endif()
-endforeach()
-
-unset(OpenACC_C_CXX_TEST_SOURCE)
-unset(OpenACC_Fortran_TEST_SOURCE)
-unset(OpenACC_C_CXX_CHECK_VERSION_SOURCE)
-unset(OpenACC_Fortran_CHECK_VERSION_SOURCE)
diff --git a/share/cmake-3.18/Modules/FindOpenCL.cmake b/share/cmake-3.18/Modules/FindOpenCL.cmake
deleted file mode 100644
index 34a203e..0000000
--- a/share/cmake-3.18/Modules/FindOpenCL.cmake
+++ /dev/null
@@ -1,178 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindOpenCL
-----------
-
-Finds Open Computing Language (OpenCL)
-
-IMPORTED Targets
-^^^^^^^^^^^^^^^^
-
-This module defines :prop_tgt:`IMPORTED` target ``OpenCL::OpenCL``, if
-OpenCL has been found.
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-This module defines the following variables::
-
-  OpenCL_FOUND          - True if OpenCL was found
-  OpenCL_INCLUDE_DIRS   - include directories for OpenCL
-  OpenCL_LIBRARIES      - link against this library to use OpenCL
-  OpenCL_VERSION_STRING - Highest supported OpenCL version (eg. 1.2)
-  OpenCL_VERSION_MAJOR  - The major version of the OpenCL implementation
-  OpenCL_VERSION_MINOR  - The minor version of the OpenCL implementation
-
-The module will also define two cache variables::
-
-  OpenCL_INCLUDE_DIR    - the OpenCL include directory
-  OpenCL_LIBRARY        - the path to the OpenCL library
-
-#]=======================================================================]
-
-function(_FIND_OPENCL_VERSION)
-  include(CheckSymbolExists)
-  include(CMakePushCheckState)
-  set(CMAKE_REQUIRED_QUIET ${OpenCL_FIND_QUIETLY})
-
-  CMAKE_PUSH_CHECK_STATE()
-  foreach(VERSION "2_2" "2_1" "2_0" "1_2" "1_1" "1_0")
-    set(CMAKE_REQUIRED_INCLUDES "${OpenCL_INCLUDE_DIR}")
-
-    if(APPLE)
-      CHECK_SYMBOL_EXISTS(
-        CL_VERSION_${VERSION}
-        "${OpenCL_INCLUDE_DIR}/Headers/cl.h"
-        OPENCL_VERSION_${VERSION})
-    else()
-      CHECK_SYMBOL_EXISTS(
-        CL_VERSION_${VERSION}
-        "${OpenCL_INCLUDE_DIR}/CL/cl.h"
-        OPENCL_VERSION_${VERSION})
-    endif()
-
-    if(OPENCL_VERSION_${VERSION})
-      string(REPLACE "_" "." VERSION "${VERSION}")
-      set(OpenCL_VERSION_STRING ${VERSION} PARENT_SCOPE)
-      string(REGEX MATCHALL "[0-9]+" version_components "${VERSION}")
-      list(GET version_components 0 major_version)
-      list(GET version_components 1 minor_version)
-      set(OpenCL_VERSION_MAJOR ${major_version} PARENT_SCOPE)
-      set(OpenCL_VERSION_MINOR ${minor_version} PARENT_SCOPE)
-      break()
-    endif()
-  endforeach()
-  CMAKE_POP_CHECK_STATE()
-endfunction()
-
-find_path(OpenCL_INCLUDE_DIR
-  NAMES
-    CL/cl.h OpenCL/cl.h
-  PATHS
-    ENV "PROGRAMFILES(X86)"
-    ENV AMDAPPSDKROOT
-    ENV INTELOCLSDKROOT
-    ENV NVSDKCOMPUTE_ROOT
-    ENV CUDA_PATH
-    ENV ATISTREAMSDKROOT
-    ENV OCL_ROOT
-    /usr/local/cuda
-    /opt/cuda
-  PATH_SUFFIXES
-    include
-    OpenCL/common/inc
-    "AMD APP/include")
-
-_FIND_OPENCL_VERSION()
-
-if(WIN32)
-  if(CMAKE_SIZEOF_VOID_P EQUAL 4)
-    find_library(OpenCL_LIBRARY
-      NAMES OpenCL
-      PATHS
-        ENV "PROGRAMFILES(X86)"
-        ENV AMDAPPSDKROOT
-        ENV INTELOCLSDKROOT
-        ENV CUDA_PATH
-        ENV NVSDKCOMPUTE_ROOT
-        ENV ATISTREAMSDKROOT
-        ENV OCL_ROOT
-      PATH_SUFFIXES
-        "AMD APP/lib/x86"
-        lib/x86
-        lib/Win32
-        OpenCL/common/lib/Win32)
-  elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
-    find_library(OpenCL_LIBRARY
-      NAMES OpenCL
-      PATHS
-        ENV "PROGRAMFILES(X86)"
-        ENV AMDAPPSDKROOT
-        ENV INTELOCLSDKROOT
-        ENV CUDA_PATH
-        ENV NVSDKCOMPUTE_ROOT
-        ENV ATISTREAMSDKROOT
-        ENV OCL_ROOT
-      PATH_SUFFIXES
-        "AMD APP/lib/x86_64"
-        lib/x86_64
-        lib/x64
-        OpenCL/common/lib/x64)
-  endif()
-else()
-  if(CMAKE_SIZEOF_VOID_P EQUAL 4)
-    find_library(OpenCL_LIBRARY
-      NAMES OpenCL
-      PATHS
-        ENV AMDAPPSDKROOT
-        ENV CUDA_PATH
-        /usr/local/cuda
-        /opt/cuda
-      PATH_SUFFIXES
-        lib/x86
-        lib)
-  elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
-    find_library(OpenCL_LIBRARY
-      NAMES OpenCL
-      PATHS
-        ENV AMDAPPSDKROOT
-        ENV CUDA_PATH
-        /usr/local/cuda
-        /opt/cuda
-      PATH_SUFFIXES
-        lib/x86_64
-        lib/x64
-        lib
-        lib64)
-  endif()
-endif()
-
-set(OpenCL_LIBRARIES ${OpenCL_LIBRARY})
-set(OpenCL_INCLUDE_DIRS ${OpenCL_INCLUDE_DIR})
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-find_package_handle_standard_args(
-  OpenCL
-  FOUND_VAR OpenCL_FOUND
-  REQUIRED_VARS OpenCL_LIBRARY OpenCL_INCLUDE_DIR
-  VERSION_VAR OpenCL_VERSION_STRING)
-
-mark_as_advanced(
-  OpenCL_INCLUDE_DIR
-  OpenCL_LIBRARY)
-
-if(OpenCL_FOUND AND NOT TARGET OpenCL::OpenCL)
-  if(OpenCL_LIBRARY MATCHES "/([^/]+)\\.framework$")
-    add_library(OpenCL::OpenCL INTERFACE IMPORTED)
-    set_target_properties(OpenCL::OpenCL PROPERTIES
-      INTERFACE_LINK_LIBRARIES "${OpenCL_LIBRARY}")
-  else()
-    add_library(OpenCL::OpenCL UNKNOWN IMPORTED)
-    set_target_properties(OpenCL::OpenCL PROPERTIES
-      IMPORTED_LOCATION "${OpenCL_LIBRARY}")
-  endif()
-  set_target_properties(OpenCL::OpenCL PROPERTIES
-    INTERFACE_INCLUDE_DIRECTORIES "${OpenCL_INCLUDE_DIRS}")
-endif()
diff --git a/share/cmake-3.18/Modules/FindOpenGL.cmake b/share/cmake-3.18/Modules/FindOpenGL.cmake
deleted file mode 100644
index 74392da..0000000
--- a/share/cmake-3.18/Modules/FindOpenGL.cmake
+++ /dev/null
@@ -1,566 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindOpenGL
-----------
-
-FindModule for OpenGL and OpenGL Utility Library (GLU).
-
-Optional COMPONENTS
-^^^^^^^^^^^^^^^^^^^
-
-This module respects several optional COMPONENTS: ``EGL``, ``GLX``, and
-``OpenGL``.  There are corresponding import targets for each of these flags.
-
-IMPORTED Targets
-^^^^^^^^^^^^^^^^
-
-This module defines the :prop_tgt:`IMPORTED` targets:
-
-``OpenGL::GL``
- Defined to the platform-specific OpenGL libraries if the system has OpenGL.
-``OpenGL::OpenGL``
- Defined to libOpenGL if the system is GLVND-based.
-``OpenGL::GLU``
- Defined if the system has OpenGL Utility Library (GLU).
-``OpenGL::GLX``
- Defined if the system has OpenGL Extension to the X Window System (GLX).
-``OpenGL::EGL``
- Defined if the system has EGL.
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-This module sets the following variables:
-
-``OPENGL_FOUND``
- True, if the system has OpenGL and all components are found.
-``OPENGL_XMESA_FOUND``
- True, if the system has XMESA.
-``OPENGL_GLU_FOUND``
- True, if the system has GLU.
-``OpenGL_OpenGL_FOUND``
- True, if the system has an OpenGL library.
-``OpenGL_GLX_FOUND``
- True, if the system has GLX.
-``OpenGL_EGL_FOUND``
- True, if the system has EGL.
-``OPENGL_INCLUDE_DIR``
- Path to the OpenGL include directory.
-``OPENGL_EGL_INCLUDE_DIRS``
- Path to the EGL include directory.
-``OPENGL_LIBRARIES``
- Paths to the OpenGL library, windowing system libraries, and GLU libraries.
- On Linux, this assumes GLX and is never correct for EGL-based targets.
- Clients are encouraged to use the ``OpenGL::*`` import targets instead.
-
-Cache variables
-^^^^^^^^^^^^^^^
-
-The following cache variables may also be set:
-
-``OPENGL_egl_LIBRARY``
- Path to the EGL library.
-``OPENGL_glu_LIBRARY``
- Path to the GLU library.
-``OPENGL_glx_LIBRARY``
- Path to the GLVND 'GLX' library.
-``OPENGL_opengl_LIBRARY``
- Path to the GLVND 'OpenGL' library
-``OPENGL_gl_LIBRARY``
- Path to the OpenGL library.  New code should prefer the ``OpenGL::*`` import
- targets.
-
-Linux-specific
-^^^^^^^^^^^^^^
-
-Some Linux systems utilize GLVND as a new ABI for OpenGL.  GLVND separates
-context libraries from OpenGL itself; OpenGL lives in "libOpenGL", and
-contexts are defined in "libGLX" or "libEGL".  GLVND is currently the only way
-to get OpenGL 3+ functionality via EGL in a manner portable across vendors.
-Projects may use GLVND explicitly with target ``OpenGL::OpenGL`` and either
-``OpenGL::GLX`` or ``OpenGL::EGL``.
-
-Projects may use the ``OpenGL::GL`` target (or ``OPENGL_LIBRARIES`` variable)
-to use legacy GL interfaces.  These will use the legacy GL library located
-by ``OPENGL_gl_LIBRARY``, if available.  If ``OPENGL_gl_LIBRARY`` is empty or
-not found and GLVND is available, the ``OpenGL::GL`` target will use GLVND
-``OpenGL::OpenGL`` and ``OpenGL::GLX`` (and the ``OPENGL_LIBRARIES``
-variable will use the corresponding libraries).  Thus, for non-EGL-based
-Linux targets, the ``OpenGL::GL`` target is most portable.
-
-A ``OpenGL_GL_PREFERENCE`` variable may be set to specify the preferred way
-to provide legacy GL interfaces in case multiple choices are available.
-The value may be one of:
-
-``GLVND``
- If the GLVND OpenGL and GLX libraries are available, prefer them.
- This forces ``OPENGL_gl_LIBRARY`` to be empty.
- This is the default if components were requested (since components
- correspond to GLVND libraries) or if policy :policy:`CMP0072` is
- set to ``NEW``.
-
-``LEGACY``
- Prefer to use the legacy libGL library, if available.
- This is the default if no components were requested and
- policy :policy:`CMP0072` is not set to ``NEW``.
-
-For EGL targets the client must rely on GLVND support on the user's system.
-Linking should use the ``OpenGL::OpenGL OpenGL::EGL`` targets.  Using GLES*
-libraries is theoretically possible in place of ``OpenGL::OpenGL``, but this
-module does not currently support that; contributions welcome.
-
-``OPENGL_egl_LIBRARY`` and ``OPENGL_EGL_INCLUDE_DIRS`` are defined in the case of
-GLVND.  For non-GLVND Linux and other systems these are left undefined.
-
-macOS-Specific
-^^^^^^^^^^^^^^
-
-On OSX FindOpenGL defaults to using the framework version of OpenGL. People
-will have to change the cache values of OPENGL_glu_LIBRARY and
-OPENGL_gl_LIBRARY to use OpenGL with X11 on OSX.
-#]=======================================================================]
-
-set(_OpenGL_REQUIRED_VARS OPENGL_gl_LIBRARY)
-
-# Provide OPENGL_USE_<C> variables for each component.
-foreach(component ${OpenGL_FIND_COMPONENTS})
-  string(TOUPPER ${component} _COMPONENT)
-  set(OPENGL_USE_${_COMPONENT} 1)
-endforeach()
-
-set(_OpenGL_CACHE_VARS)
-
-if (CYGWIN)
-  find_path(OPENGL_INCLUDE_DIR GL/gl.h )
-  list(APPEND _OpenGL_REQUIRED_VARS OPENGL_INCLUDE_DIR)
-
-  find_library(OPENGL_gl_LIBRARY opengl32 )
-  find_library(OPENGL_glu_LIBRARY glu32 )
-
-  list(APPEND _OpenGL_CACHE_VARS
-    OPENGL_INCLUDE_DIR
-    OPENGL_gl_LIBRARY
-    OPENGL_glu_LIBRARY
-    )
-elseif (WIN32)
-
-  if(BORLAND)
-    set (OPENGL_gl_LIBRARY import32 CACHE STRING "OpenGL library for win32")
-    set (OPENGL_glu_LIBRARY import32 CACHE STRING "GLU library for win32")
-  else()
-    set (OPENGL_gl_LIBRARY opengl32 CACHE STRING "OpenGL library for win32")
-    set (OPENGL_glu_LIBRARY glu32 CACHE STRING "GLU library for win32")
-  endif()
-
-  list(APPEND _OpenGL_CACHE_VARS
-    OPENGL_gl_LIBRARY
-    OPENGL_glu_LIBRARY
-    )
-elseif (APPLE)
-  # The OpenGL.framework provides both gl and glu
-  find_library(OPENGL_gl_LIBRARY OpenGL DOC "OpenGL library for OS X")
-  find_library(OPENGL_glu_LIBRARY OpenGL DOC
-    "GLU library for OS X (usually same as OpenGL library)")
-  find_path(OPENGL_INCLUDE_DIR OpenGL/gl.h DOC "Include for OpenGL on OS X")
-  list(APPEND _OpenGL_REQUIRED_VARS OPENGL_INCLUDE_DIR)
-
-  list(APPEND _OpenGL_CACHE_VARS
-    OPENGL_INCLUDE_DIR
-    OPENGL_gl_LIBRARY
-    OPENGL_glu_LIBRARY
-    )
-else()
-  if (CMAKE_SYSTEM_NAME MATCHES "HP-UX")
-    # Handle HP-UX cases where we only want to find OpenGL in either hpux64
-    # or hpux32 depending on if we're doing a 64 bit build.
-    if(CMAKE_SIZEOF_VOID_P EQUAL 4)
-      set(_OPENGL_LIB_PATH
-        /opt/graphics/OpenGL/lib/hpux32/)
-    else()
-      set(_OPENGL_LIB_PATH
-        /opt/graphics/OpenGL/lib/hpux64/
-        /opt/graphics/OpenGL/lib/pa20_64)
-    endif()
-  elseif(CMAKE_SYSTEM_NAME STREQUAL Haiku)
-    set(_OPENGL_LIB_PATH
-      /boot/develop/lib/x86)
-    set(_OPENGL_INCLUDE_PATH
-      /boot/develop/headers/os/opengl)
-  endif()
-
-  # The first line below is to make sure that the proper headers
-  # are used on a Linux machine with the NVidia drivers installed.
-  # They replace Mesa with NVidia's own library but normally do not
-  # install headers and that causes the linking to
-  # fail since the compiler finds the Mesa headers but NVidia's library.
-  # Make sure the NVIDIA directory comes BEFORE the others.
-  #  - Atanas Georgiev <atanas@cs.columbia.edu>
-  find_path(OPENGL_INCLUDE_DIR GL/gl.h
-    /usr/share/doc/NVIDIA_GLX-1.0/include
-    /usr/openwin/share/include
-    /opt/graphics/OpenGL/include
-    ${_OPENGL_INCLUDE_PATH}
-  )
-  find_path(OPENGL_GLX_INCLUDE_DIR GL/glx.h ${_OPENGL_INCLUDE_PATH})
-  find_path(OPENGL_EGL_INCLUDE_DIR EGL/egl.h ${_OPENGL_INCLUDE_PATH})
-  find_path(OPENGL_xmesa_INCLUDE_DIR GL/xmesa.h
-    /usr/share/doc/NVIDIA_GLX-1.0/include
-    /usr/openwin/share/include
-    /opt/graphics/OpenGL/include
-  )
-  list(APPEND _OpenGL_CACHE_VARS
-    OPENGL_INCLUDE_DIR
-    OPENGL_GLX_INCLUDE_DIR
-    OPENGL_EGL_INCLUDE_DIR
-    OPENGL_xmesa_INCLUDE_DIR
-    )
-
-  # Search for the GLVND libraries.  We do this regardless of COMPONENTS; we'll
-  # take into account the COMPONENTS logic later.
-  find_library(OPENGL_opengl_LIBRARY
-    NAMES OpenGL
-    PATHS ${_OPENGL_LIB_PATH}
-  )
-
-  find_library(OPENGL_glx_LIBRARY
-    NAMES GLX
-    PATHS ${_OPENGL_LIB_PATH}
-    PATH_SUFFIXES libglvnd
-  )
-
-  find_library(OPENGL_egl_LIBRARY
-    NAMES EGL
-    PATHS ${_OPENGL_LIB_PATH}
-    PATH_SUFFIXES libglvnd
-  )
-
-  find_library(OPENGL_glu_LIBRARY
-    NAMES GLU MesaGLU
-    PATHS ${OPENGL_gl_LIBRARY}
-          /opt/graphics/OpenGL/lib
-          /usr/openwin/lib
-          /usr/shlib
-  )
-
-  list(APPEND _OpenGL_CACHE_VARS
-    OPENGL_opengl_LIBRARY
-    OPENGL_glx_LIBRARY
-    OPENGL_egl_LIBRARY
-    OPENGL_glu_LIBRARY
-    )
-
-  set(_OpenGL_GL_POLICY_WARN 0)
-  if(NOT DEFINED OpenGL_GL_PREFERENCE)
-    set(OpenGL_GL_PREFERENCE "")
-  endif()
-  if(NOT OpenGL_GL_PREFERENCE STREQUAL "")
-    # A preference has been explicitly specified.
-    if(NOT OpenGL_GL_PREFERENCE MATCHES "^(GLVND|LEGACY)$")
-      message(FATAL_ERROR
-        "OpenGL_GL_PREFERENCE value '${OpenGL_GL_PREFERENCE}' not recognized.  "
-        "Allowed values are 'GLVND' and 'LEGACY'."
-        )
-    endif()
-  elseif(OpenGL_FIND_COMPONENTS)
-    # No preference was explicitly specified, but the caller did request
-    # at least one GLVND component.  Prefer GLVND for legacy GL.
-    set(OpenGL_GL_PREFERENCE "GLVND")
-  else()
-    # No preference was explicitly specified and no GLVND components were
-    # requested.  Use a policy to choose the default.
-    cmake_policy(GET CMP0072 _OpenGL_GL_POLICY)
-    if("x${_OpenGL_GL_POLICY}x" STREQUAL "xNEWx")
-      set(OpenGL_GL_PREFERENCE "GLVND")
-    else()
-      set(OpenGL_GL_PREFERENCE "LEGACY")
-      if("x${_OpenGL_GL_POLICY}x" STREQUAL "xx")
-        set(_OpenGL_GL_POLICY_WARN 1)
-      endif()
-    endif()
-    unset(_OpenGL_GL_POLICY)
-  endif()
-
-  if("x${OpenGL_GL_PREFERENCE}x" STREQUAL "xGLVNDx" AND OPENGL_opengl_LIBRARY AND OPENGL_glx_LIBRARY)
-    # We can provide legacy GL using GLVND libraries.
-    # Do not use any legacy GL library.
-    set(OPENGL_gl_LIBRARY "")
-  else()
-    # We cannot provide legacy GL using GLVND libraries.
-    # Search for the legacy GL library.
-    find_library(OPENGL_gl_LIBRARY
-      NAMES GL MesaGL
-      PATHS /opt/graphics/OpenGL/lib
-            /usr/openwin/lib
-            /usr/shlib
-            ${_OPENGL_LIB_PATH}
-      PATH_SUFFIXES libglvnd
-      )
-    list(APPEND _OpenGL_CACHE_VARS OPENGL_gl_LIBRARY)
-  endif()
-
-  if(_OpenGL_GL_POLICY_WARN AND OPENGL_gl_LIBRARY AND OPENGL_opengl_LIBRARY AND OPENGL_glx_LIBRARY)
-    cmake_policy(GET_WARNING CMP0072 _cmp0072_warning)
-    message(AUTHOR_WARNING
-      "${_cmp0072_warning}\n"
-      "FindOpenGL found both a legacy GL library:\n"
-      "  OPENGL_gl_LIBRARY: ${OPENGL_gl_LIBRARY}\n"
-      "and GLVND libraries for OpenGL and GLX:\n"
-      "  OPENGL_opengl_LIBRARY: ${OPENGL_opengl_LIBRARY}\n"
-      "  OPENGL_glx_LIBRARY: ${OPENGL_glx_LIBRARY}\n"
-      "OpenGL_GL_PREFERENCE has not been set to \"GLVND\" or \"LEGACY\", so for "
-      "compatibility with CMake 3.10 and below the legacy GL library will be used."
-      )
-  endif()
-  unset(_OpenGL_GL_POLICY_WARN)
-
-  # FPHSA cannot handle "this OR that is required", so we conditionally set what
-  # it must look for.  First clear any previous config we might have done:
-  set(_OpenGL_REQUIRED_VARS)
-
-  # now we append the libraries as appropriate.  The complicated logic
-  # basically comes down to "use libOpenGL when we can, and add in specific
-  # context mechanisms when requested, or we need them to preserve the previous
-  # default where glx is always available."
-  if((NOT OPENGL_USE_EGL AND
-      NOT OPENGL_opengl_LIBRARY AND
-          OPENGL_glx_LIBRARY AND
-      NOT OPENGL_gl_LIBRARY) OR
-     (NOT OPENGL_USE_EGL AND
-      NOT OPENGL_glx_LIBRARY AND
-      NOT OPENGL_gl_LIBRARY) OR
-     (NOT OPENGL_USE_EGL AND
-          OPENGL_opengl_LIBRARY AND
-          OPENGL_glx_LIBRARY) OR
-     (    OPENGL_USE_EGL))
-    list(APPEND _OpenGL_REQUIRED_VARS OPENGL_opengl_LIBRARY)
-  endif()
-
-  # GLVND GLX library.  Preferred when available.
-  if((NOT OPENGL_USE_OPENGL AND
-      NOT OPENGL_USE_GLX AND
-      NOT OPENGL_USE_EGL AND
-      NOT OPENGL_glx_LIBRARY AND
-      NOT OPENGL_gl_LIBRARY) OR
-     (    OPENGL_USE_GLX AND
-      NOT OPENGL_USE_EGL AND
-      NOT OPENGL_glx_LIBRARY AND
-      NOT OPENGL_gl_LIBRARY) OR
-     (NOT OPENGL_USE_EGL AND
-          OPENGL_opengl_LIBRARY AND
-          OPENGL_glx_LIBRARY) OR
-     (OPENGL_USE_GLX AND OPENGL_USE_EGL))
-    list(APPEND _OpenGL_REQUIRED_VARS OPENGL_glx_LIBRARY)
-  endif()
-
-  # GLVND EGL library.
-  if(OPENGL_USE_EGL)
-    list(APPEND _OpenGL_REQUIRED_VARS OPENGL_egl_LIBRARY)
-  endif()
-
-  # Old-style "libGL" library: used as a fallback when GLVND isn't available.
-  if((NOT OPENGL_USE_EGL AND
-      NOT OPENGL_opengl_LIBRARY AND
-          OPENGL_glx_LIBRARY AND
-          OPENGL_gl_LIBRARY) OR
-     (NOT OPENGL_USE_EGL AND
-      NOT OPENGL_glx_LIBRARY AND
-          OPENGL_gl_LIBRARY))
-    list(APPEND _OpenGL_REQUIRED_VARS OPENGL_gl_LIBRARY)
-  endif()
-
-  # We always need the 'gl.h' include dir.
-  list(APPEND _OpenGL_REQUIRED_VARS OPENGL_INCLUDE_DIR)
-
-  unset(_OPENGL_INCLUDE_PATH)
-  unset(_OPENGL_LIB_PATH)
-
-  find_library(OPENGL_glu_LIBRARY
-    NAMES GLU MesaGLU
-    PATHS ${OPENGL_gl_LIBRARY}
-          /opt/graphics/OpenGL/lib
-          /usr/openwin/lib
-          /usr/shlib
-  )
-endif ()
-
-if(OPENGL_xmesa_INCLUDE_DIR)
-  set( OPENGL_XMESA_FOUND "YES" )
-else()
-  set( OPENGL_XMESA_FOUND "NO" )
-endif()
-
-if(OPENGL_glu_LIBRARY)
-  set( OPENGL_GLU_FOUND "YES" )
-else()
-  set( OPENGL_GLU_FOUND "NO" )
-endif()
-
-# OpenGL_OpenGL_FOUND is a bit unique in that it is okay if /either/ libOpenGL
-# or libGL is found.
-# Using libGL with libEGL is never okay, though; we handle that case later.
-if(NOT OPENGL_opengl_LIBRARY AND NOT OPENGL_gl_LIBRARY)
-  set(OpenGL_OpenGL_FOUND FALSE)
-else()
-  set(OpenGL_OpenGL_FOUND TRUE)
-endif()
-
-if(OPENGL_glx_LIBRARY AND OPENGL_GLX_INCLUDE_DIR)
-  set(OpenGL_GLX_FOUND TRUE)
-else()
-  set(OpenGL_GLX_FOUND FALSE)
-endif()
-
-if(OPENGL_egl_LIBRARY AND OPENGL_EGL_INCLUDE_DIR)
-  set(OpenGL_EGL_FOUND TRUE)
-else()
-  set(OpenGL_EGL_FOUND FALSE)
-endif()
-
-# User-visible names should be plural.
-if(OPENGL_EGL_INCLUDE_DIR)
-  set(OPENGL_EGL_INCLUDE_DIRS ${OPENGL_EGL_INCLUDE_DIR})
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenGL REQUIRED_VARS ${_OpenGL_REQUIRED_VARS}
-                                  HANDLE_COMPONENTS)
-unset(_OpenGL_REQUIRED_VARS)
-
-# OpenGL:: targets
-if(OPENGL_FOUND)
-  # ::OpenGL is a GLVND library, and thus Linux-only: we don't bother checking
-  # for a framework version of this library.
-  if(OPENGL_opengl_LIBRARY AND NOT TARGET OpenGL::OpenGL)
-    if(IS_ABSOLUTE "${OPENGL_opengl_LIBRARY}")
-      add_library(OpenGL::OpenGL UNKNOWN IMPORTED)
-      set_target_properties(OpenGL::OpenGL PROPERTIES IMPORTED_LOCATION
-                            "${OPENGL_opengl_LIBRARY}")
-    else()
-      add_library(OpenGL::OpenGL INTERFACE IMPORTED)
-      set_target_properties(OpenGL::OpenGL PROPERTIES IMPORTED_LIBNAME
-                            "${OPENGL_opengl_LIBRARY}")
-    endif()
-    set_target_properties(OpenGL::OpenGL PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
-                          "${OPENGL_INCLUDE_DIR}")
-  endif()
-
-  # ::GLX is a GLVND library, and thus Linux-only: we don't bother checking
-  # for a framework version of this library.
-  if(OpenGL_GLX_FOUND AND NOT TARGET OpenGL::GLX)
-    if(IS_ABSOLUTE "${OPENGL_glx_LIBRARY}")
-      add_library(OpenGL::GLX UNKNOWN IMPORTED)
-      set_target_properties(OpenGL::GLX PROPERTIES IMPORTED_LOCATION
-                            "${OPENGL_glx_LIBRARY}")
-    else()
-      add_library(OpenGL::GLX INTERFACE IMPORTED)
-      set_target_properties(OpenGL::GLX PROPERTIES IMPORTED_LIBNAME
-                            "${OPENGL_glx_LIBRARY}")
-    endif()
-    set_target_properties(OpenGL::GLX PROPERTIES INTERFACE_LINK_LIBRARIES
-                          OpenGL::OpenGL)
-    set_target_properties(OpenGL::GLX PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
-                          "${OPENGL_GLX_INCLUDE_DIR}")
-  endif()
-
-  if(OPENGL_gl_LIBRARY AND NOT TARGET OpenGL::GL)
-    # A legacy GL library is available, so use it for the legacy GL target.
-    if(IS_ABSOLUTE "${OPENGL_gl_LIBRARY}")
-      add_library(OpenGL::GL UNKNOWN IMPORTED)
-      if(OPENGL_gl_LIBRARY MATCHES "/([^/]+)\\.framework$")
-        set(_gl_fw "${OPENGL_gl_LIBRARY}/${CMAKE_MATCH_1}")
-        if(EXISTS "${_gl_fw}.tbd")
-          string(APPEND _gl_fw ".tbd")
-        endif()
-        set_target_properties(OpenGL::GL PROPERTIES
-          IMPORTED_LOCATION "${_gl_fw}")
-      else()
-        set_target_properties(OpenGL::GL PROPERTIES
-          IMPORTED_LOCATION "${OPENGL_gl_LIBRARY}")
-      endif()
-    else()
-      add_library(OpenGL::GL INTERFACE IMPORTED)
-      set_target_properties(OpenGL::GL PROPERTIES
-        IMPORTED_LIBNAME "${OPENGL_gl_LIBRARY}")
-    endif()
-    set_target_properties(OpenGL::GL PROPERTIES
-      INTERFACE_INCLUDE_DIRECTORIES "${OPENGL_INCLUDE_DIR}")
-  elseif(NOT TARGET OpenGL::GL AND TARGET OpenGL::OpenGL AND TARGET OpenGL::GLX)
-    # A legacy GL library is not available, but we can provide the legacy GL
-    # target using GLVND OpenGL+GLX.
-    add_library(OpenGL::GL INTERFACE IMPORTED)
-    set_target_properties(OpenGL::GL PROPERTIES INTERFACE_LINK_LIBRARIES
-                          OpenGL::OpenGL)
-    set_property(TARGET OpenGL::GL APPEND PROPERTY INTERFACE_LINK_LIBRARIES
-                 OpenGL::GLX)
-    set_target_properties(OpenGL::GL PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
-                          "${OPENGL_INCLUDE_DIR}")
-  endif()
-
-  # ::EGL is a GLVND library, and thus Linux-only: we don't bother checking
-  # for a framework version of this library.
-  # Note we test for OpenGL::OpenGL as a target.  When this module is updated to
-  # support GLES, we would additionally want to check for the hypothetical GLES
-  # target and enable EGL if either ::GLES or ::OpenGL is created.
-  if(TARGET OpenGL::OpenGL AND OpenGL_EGL_FOUND AND NOT TARGET OpenGL::EGL)
-    if(IS_ABSOLUTE "${OPENGL_egl_LIBRARY}")
-      add_library(OpenGL::EGL UNKNOWN IMPORTED)
-      set_target_properties(OpenGL::EGL PROPERTIES IMPORTED_LOCATION
-                            "${OPENGL_egl_LIBRARY}")
-    else()
-      add_library(OpenGL::EGL INTERFACE IMPORTED)
-      set_target_properties(OpenGL::EGL PROPERTIES IMPORTED_LIBNAME
-                            "${OPENGL_egl_LIBRARY}")
-    endif()
-    set_target_properties(OpenGL::EGL PROPERTIES INTERFACE_LINK_LIBRARIES
-                          OpenGL::OpenGL)
-    # Note that EGL's include directory is different from OpenGL/GLX's!
-    set_target_properties(OpenGL::EGL PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
-                          "${OPENGL_EGL_INCLUDE_DIR}")
-  endif()
-
-  if(OPENGL_GLU_FOUND AND NOT TARGET OpenGL::GLU)
-    if(IS_ABSOLUTE "${OPENGL_glu_LIBRARY}")
-      add_library(OpenGL::GLU UNKNOWN IMPORTED)
-      if(OPENGL_glu_LIBRARY MATCHES "/([^/]+)\\.framework$")
-        set(_glu_fw "${OPENGL_glu_LIBRARY}/${CMAKE_MATCH_1}")
-        if(EXISTS "${_glu_fw}.tbd")
-          string(APPEND _glu_fw ".tbd")
-        endif()
-        set_target_properties(OpenGL::GLU PROPERTIES
-          IMPORTED_LOCATION "${_glu_fw}")
-      else()
-        set_target_properties(OpenGL::GLU PROPERTIES
-          IMPORTED_LOCATION "${OPENGL_glu_LIBRARY}")
-      endif()
-    else()
-      add_library(OpenGL::GLU INTERFACE IMPORTED)
-      set_target_properties(OpenGL::GLU PROPERTIES
-        IMPORTED_LIBNAME "${OPENGL_glu_LIBRARY}")
-    endif()
-    set_target_properties(OpenGL::GLU PROPERTIES
-      INTERFACE_LINK_LIBRARIES OpenGL::GL)
-  endif()
-
-  # OPENGL_LIBRARIES mirrors OpenGL::GL's logic ...
-  if(OPENGL_gl_LIBRARY)
-    set(OPENGL_LIBRARIES ${OPENGL_gl_LIBRARY})
-  elseif(TARGET OpenGL::OpenGL AND TARGET OpenGL::GLX)
-    set(OPENGL_LIBRARIES ${OPENGL_opengl_LIBRARY} ${OPENGL_glx_LIBRARY})
-  else()
-    set(OPENGL_LIBRARIES "")
-  endif()
-  # ... and also includes GLU, if available.
-  if(TARGET OpenGL::GLU)
-    list(APPEND OPENGL_LIBRARIES ${OPENGL_glu_LIBRARY})
-  endif()
-endif()
-
-# This deprecated setting is for backward compatibility with CMake1.4
-set(OPENGL_LIBRARY ${OPENGL_LIBRARIES})
-# This deprecated setting is for backward compatibility with CMake1.4
-set(OPENGL_INCLUDE_PATH ${OPENGL_INCLUDE_DIR})
-
-mark_as_advanced(${_OpenGL_CACHE_VARS})
-unset(_OpenGL_CACHE_VARS)
diff --git a/share/cmake-3.18/Modules/FindOpenMP.cmake b/share/cmake-3.18/Modules/FindOpenMP.cmake
deleted file mode 100644
index bb38e28..0000000
--- a/share/cmake-3.18/Modules/FindOpenMP.cmake
+++ /dev/null
@@ -1,605 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindOpenMP
-----------
-
-Finds Open Multi-Processing (OpenMP) support.
-
-This module can be used to detect OpenMP support in a compiler.  If
-the compiler supports OpenMP, the flags required to compile with
-OpenMP support are returned in variables for the different languages.
-The variables may be empty if the compiler does not need a special
-flag to support OpenMP.
-
-Variables
-^^^^^^^^^
-
-The module exposes the components ``C``, ``CXX``, and ``Fortran``.
-Each of these controls the various languages to search OpenMP support for.
-
-Depending on the enabled components the following variables will be set:
-
-``OpenMP_FOUND``
-  Variable indicating that OpenMP flags for all requested languages have been found.
-  If no components are specified, this is true if OpenMP settings for all enabled languages
-  were detected.
-``OpenMP_VERSION``
-  Minimal version of the OpenMP standard detected among the requested languages,
-  or all enabled languages if no components were specified.
-
-This module will set the following variables per language in your
-project, where ``<lang>`` is one of C, CXX, or Fortran:
-
-``OpenMP_<lang>_FOUND``
-  Variable indicating if OpenMP support for ``<lang>`` was detected.
-``OpenMP_<lang>_FLAGS``
-  OpenMP compiler flags for ``<lang>``, separated by spaces.
-``OpenMP_<lang>_INCLUDE_DIRS``
-  Directories that must be added to the header search path for ``<lang>``
-  when using OpenMP.
-
-For linking with OpenMP code written in ``<lang>``, the following
-variables are provided:
-
-``OpenMP_<lang>_LIB_NAMES``
-  :ref:`;-list <CMake Language Lists>` of libraries for OpenMP programs for ``<lang>``.
-``OpenMP_<libname>_LIBRARY``
-  Location of the individual libraries needed for OpenMP support in ``<lang>``.
-``OpenMP_<lang>_LIBRARIES``
-  A list of libraries needed to link with OpenMP code written in ``<lang>``.
-
-Additionally, the module provides :prop_tgt:`IMPORTED` targets:
-
-``OpenMP::OpenMP_<lang>``
-  Target for using OpenMP from ``<lang>``.
-
-Specifically for Fortran, the module sets the following variables:
-
-``OpenMP_Fortran_HAVE_OMPLIB_HEADER``
-  Boolean indicating if OpenMP is accessible through ``omp_lib.h``.
-``OpenMP_Fortran_HAVE_OMPLIB_MODULE``
-  Boolean indicating if OpenMP is accessible through the ``omp_lib`` Fortran module.
-
-The module will also try to provide the OpenMP version variables:
-
-``OpenMP_<lang>_SPEC_DATE``
-  Date of the OpenMP specification implemented by the ``<lang>`` compiler.
-``OpenMP_<lang>_VERSION_MAJOR``
-  Major version of OpenMP implemented by the ``<lang>`` compiler.
-``OpenMP_<lang>_VERSION_MINOR``
-  Minor version of OpenMP implemented by the ``<lang>`` compiler.
-``OpenMP_<lang>_VERSION``
-  OpenMP version implemented by the ``<lang>`` compiler.
-
-The specification date is formatted as given in the OpenMP standard:
-``yyyymm`` where ``yyyy`` and ``mm`` represents the year and month of
-the OpenMP specification implemented by the ``<lang>`` compiler.
-
-For some compilers, it may be necessary to add a header search path to find
-the relevant OpenMP headers.  This location may be language-specific.  Where
-this is needed, the module may attempt to find the location, but it can be
-provided directly by setting the ``OpenMP_<lang>_INCLUDE_DIR`` cache variable.
-Note that this variable is an _input_ control to the module.  Project code
-should use the ``OpenMP_<lang>_INCLUDE_DIRS`` _output_ variable if it needs
-to know what include directories are needed.
-#]=======================================================================]
-
-cmake_policy(PUSH)
-cmake_policy(SET CMP0012 NEW) # if() recognizes numbers and booleans
-cmake_policy(SET CMP0054 NEW) # if() quoted variables not dereferenced
-cmake_policy(SET CMP0057 NEW) # if IN_LIST
-
-function(_OPENMP_FLAG_CANDIDATES LANG)
-  if(NOT OpenMP_${LANG}_FLAG)
-    unset(OpenMP_FLAG_CANDIDATES)
-
-    set(OMP_FLAG_GNU "-fopenmp")
-    set(OMP_FLAG_Clang "-fopenmp=libomp" "-fopenmp=libiomp5" "-fopenmp" "-Xclang -fopenmp")
-    set(OMP_FLAG_AppleClang "-Xclang -fopenmp")
-    set(OMP_FLAG_HP "+Oopenmp")
-    if(WIN32)
-      set(OMP_FLAG_Intel "-Qopenmp")
-    elseif(CMAKE_${LANG}_COMPILER_ID STREQUAL "Intel" AND
-           "${CMAKE_${LANG}_COMPILER_VERSION}" VERSION_LESS "15.0.0.20140528")
-      set(OMP_FLAG_Intel "-openmp")
-    else()
-      set(OMP_FLAG_Intel "-qopenmp")
-    endif()
-    set(OMP_FLAG_MSVC "-openmp")
-    set(OMP_FLAG_PathScale "-openmp")
-    set(OMP_FLAG_NAG "-openmp")
-    set(OMP_FLAG_Absoft "-openmp")
-    set(OMP_FLAG_PGI "-mp")
-    set(OMP_FLAG_Flang "-fopenmp")
-    set(OMP_FLAG_SunPro "-xopenmp")
-    set(OMP_FLAG_XL "-qsmp=omp")
-    # Cray compiler activate OpenMP with -h omp, which is enabled by default.
-    set(OMP_FLAG_Cray " " "-h omp")
-
-    # If we know the correct flags, use those
-    if(DEFINED OMP_FLAG_${CMAKE_${LANG}_COMPILER_ID})
-      set(OpenMP_FLAG_CANDIDATES "${OMP_FLAG_${CMAKE_${LANG}_COMPILER_ID}}")
-    # Fall back to reasonable default tries otherwise
-    else()
-      set(OpenMP_FLAG_CANDIDATES "-openmp" "-fopenmp" "-mp" " ")
-    endif()
-    set(OpenMP_${LANG}_FLAG_CANDIDATES "${OpenMP_FLAG_CANDIDATES}" PARENT_SCOPE)
-  else()
-    set(OpenMP_${LANG}_FLAG_CANDIDATES "${OpenMP_${LANG}_FLAG}" PARENT_SCOPE)
-  endif()
-endfunction()
-
-# sample openmp source code to test
-set(OpenMP_C_CXX_TEST_SOURCE
-"
-#include <omp.h>
-int main(void) {
-#ifdef _OPENMP
-  omp_get_max_threads();
-  return 0;
-#elif defined(__HIP_DEVICE_COMPILE__)
-  return 0;
-#else
-  breaks_on_purpose
-#endif
-}
-")
-
-# in Fortran, an implementation may provide an omp_lib.h header
-# or omp_lib module, or both (OpenMP standard, section 3.1)
-# Furthmore !$ is the Fortran equivalent of #ifdef _OPENMP (OpenMP standard, 2.2.2)
-# Without the conditional compilation, some compilers (e.g. PGI) might compile OpenMP code
-# while not actually enabling OpenMP, building code sequentially
-set(OpenMP_Fortran_TEST_SOURCE
-  "
-      program test
-      @OpenMP_Fortran_INCLUDE_LINE@
-  !$  integer :: n
-      n = omp_get_num_threads()
-      end program test
-  "
-)
-
-function(_OPENMP_WRITE_SOURCE_FILE LANG SRC_FILE_CONTENT_VAR SRC_FILE_NAME SRC_FILE_FULLPATH)
-  set(WORK_DIR ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/FindOpenMP)
-  if("${LANG}" STREQUAL "C")
-    set(SRC_FILE "${WORK_DIR}/${SRC_FILE_NAME}.c")
-    file(WRITE "${SRC_FILE}" "${OpenMP_C_CXX_${SRC_FILE_CONTENT_VAR}}")
-  elseif("${LANG}" STREQUAL "CXX")
-    set(SRC_FILE "${WORK_DIR}/${SRC_FILE_NAME}.cpp")
-    file(WRITE "${SRC_FILE}" "${OpenMP_C_CXX_${SRC_FILE_CONTENT_VAR}}")
-  elseif("${LANG}" STREQUAL "Fortran")
-    set(SRC_FILE "${WORK_DIR}/${SRC_FILE_NAME}.f90")
-    file(WRITE "${SRC_FILE}_in" "${OpenMP_Fortran_${SRC_FILE_CONTENT_VAR}}")
-    configure_file("${SRC_FILE}_in" "${SRC_FILE}" @ONLY)
-  endif()
-  set(${SRC_FILE_FULLPATH} "${SRC_FILE}" PARENT_SCOPE)
-endfunction()
-
-include(${CMAKE_CURRENT_LIST_DIR}/CMakeParseImplicitLinkInfo.cmake)
-
-function(_OPENMP_GET_FLAGS LANG FLAG_MODE OPENMP_FLAG_VAR OPENMP_LIB_NAMES_VAR)
-  _OPENMP_FLAG_CANDIDATES("${LANG}")
-  _OPENMP_WRITE_SOURCE_FILE("${LANG}" "TEST_SOURCE" OpenMPTryFlag _OPENMP_TEST_SRC)
-
-  unset(OpenMP_VERBOSE_COMPILE_OPTIONS)
-  separate_arguments(OpenMP_VERBOSE_OPTIONS NATIVE_COMMAND "${CMAKE_${LANG}_VERBOSE_FLAG}")
-  foreach(_VERBOSE_OPTION IN LISTS OpenMP_VERBOSE_OPTIONS)
-    if(NOT _VERBOSE_OPTION MATCHES "^-Wl,")
-      list(APPEND OpenMP_VERBOSE_COMPILE_OPTIONS ${_VERBOSE_OPTION})
-    endif()
-  endforeach()
-
-  foreach(OPENMP_FLAG IN LISTS OpenMP_${LANG}_FLAG_CANDIDATES)
-    set(OPENMP_FLAGS_TEST "${OPENMP_FLAG}")
-    if(OpenMP_VERBOSE_COMPILE_OPTIONS)
-      string(APPEND OPENMP_FLAGS_TEST " ${OpenMP_VERBOSE_COMPILE_OPTIONS}")
-    endif()
-    string(REGEX REPLACE "[-/=+]" "" OPENMP_PLAIN_FLAG "${OPENMP_FLAG}")
-    try_compile( OpenMP_COMPILE_RESULT_${FLAG_MODE}_${OPENMP_PLAIN_FLAG} ${CMAKE_BINARY_DIR} ${_OPENMP_TEST_SRC}
-      CMAKE_FLAGS "-DCOMPILE_DEFINITIONS:STRING=${OPENMP_FLAGS_TEST}"
-      LINK_LIBRARIES ${CMAKE_${LANG}_VERBOSE_FLAG}
-      OUTPUT_VARIABLE OpenMP_TRY_COMPILE_OUTPUT
-    )
-
-    if(OpenMP_COMPILE_RESULT_${FLAG_MODE}_${OPENMP_PLAIN_FLAG})
-      set("${OPENMP_FLAG_VAR}" "${OPENMP_FLAG}" PARENT_SCOPE)
-
-      if(CMAKE_${LANG}_VERBOSE_FLAG)
-        unset(OpenMP_${LANG}_IMPLICIT_LIBRARIES)
-        unset(OpenMP_${LANG}_IMPLICIT_LINK_DIRS)
-        unset(OpenMP_${LANG}_IMPLICIT_FWK_DIRS)
-        unset(OpenMP_${LANG}_LOG_VAR)
-
-        file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-        "Detecting ${LANG} OpenMP compiler ABI info compiled with the following output:\n${OpenMP_TRY_COMPILE_OUTPUT}\n\n")
-
-        cmake_parse_implicit_link_info("${OpenMP_TRY_COMPILE_OUTPUT}"
-          OpenMP_${LANG}_IMPLICIT_LIBRARIES
-          OpenMP_${LANG}_IMPLICIT_LINK_DIRS
-          OpenMP_${LANG}_IMPLICIT_FWK_DIRS
-          OpenMP_${LANG}_LOG_VAR
-          "${CMAKE_${LANG}_IMPLICIT_OBJECT_REGEX}"
-        )
-
-        file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-        "Parsed ${LANG} OpenMP implicit link information from above output:\n${OpenMP_${LANG}_LOG_VAR}\n\n")
-
-        unset(_OPENMP_LIB_NAMES)
-        foreach(_OPENMP_IMPLICIT_LIB IN LISTS OpenMP_${LANG}_IMPLICIT_LIBRARIES)
-          get_filename_component(_OPENMP_IMPLICIT_LIB_DIR "${_OPENMP_IMPLICIT_LIB}" DIRECTORY)
-          get_filename_component(_OPENMP_IMPLICIT_LIB_NAME "${_OPENMP_IMPLICIT_LIB}" NAME)
-          get_filename_component(_OPENMP_IMPLICIT_LIB_PLAIN "${_OPENMP_IMPLICIT_LIB}" NAME_WE)
-          string(REGEX REPLACE "([][+.*?()^$])" "\\\\\\1" _OPENMP_IMPLICIT_LIB_PLAIN_ESC "${_OPENMP_IMPLICIT_LIB_PLAIN}")
-          string(REGEX REPLACE "([][+.*?()^$])" "\\\\\\1" _OPENMP_IMPLICIT_LIB_PATH_ESC "${_OPENMP_IMPLICIT_LIB}")
-          if(NOT ( "${_OPENMP_IMPLICIT_LIB}" IN_LIST CMAKE_${LANG}_IMPLICIT_LINK_LIBRARIES
-            OR "${CMAKE_${LANG}_STANDARD_LIBRARIES}" MATCHES "(^| )(-Wl,)?(-l)?(${_OPENMP_IMPLICIT_LIB_PLAIN_ESC}|${_OPENMP_IMPLICIT_LIB_PATH_ESC})( |$)"
-            OR "${CMAKE_${LANG}_LINK_EXECUTABLE}" MATCHES "(^| )(-Wl,)?(-l)?(${_OPENMP_IMPLICIT_LIB_PLAIN_ESC}|${_OPENMP_IMPLICIT_LIB_PATH_ESC})( |$)" ) )
-            if(_OPENMP_IMPLICIT_LIB_DIR)
-              set(OpenMP_${_OPENMP_IMPLICIT_LIB_PLAIN}_LIBRARY "${_OPENMP_IMPLICIT_LIB}" CACHE FILEPATH
-                "Path to the ${_OPENMP_IMPLICIT_LIB_PLAIN} library for OpenMP")
-            else()
-              find_library(OpenMP_${_OPENMP_IMPLICIT_LIB_PLAIN}_LIBRARY
-                NAMES "${_OPENMP_IMPLICIT_LIB_NAME}"
-                DOC "Path to the ${_OPENMP_IMPLICIT_LIB_PLAIN} library for OpenMP"
-                HINTS ${OpenMP_${LANG}_IMPLICIT_LINK_DIRS}
-                CMAKE_FIND_ROOT_PATH_BOTH
-                NO_DEFAULT_PATH
-              )
-            endif()
-            mark_as_advanced(OpenMP_${_OPENMP_IMPLICIT_LIB_PLAIN}_LIBRARY)
-            list(APPEND _OPENMP_LIB_NAMES ${_OPENMP_IMPLICIT_LIB_PLAIN})
-          endif()
-        endforeach()
-        set("${OPENMP_LIB_NAMES_VAR}" "${_OPENMP_LIB_NAMES}" PARENT_SCOPE)
-      else()
-        # We do not know how to extract implicit OpenMP libraries for this compiler.
-        # Assume that it handles them automatically, e.g. the Intel Compiler on
-        # Windows should put the dependency in its object files.
-        set("${OPENMP_LIB_NAMES_VAR}" "" PARENT_SCOPE)
-      endif()
-      break()
-    elseif(CMAKE_${LANG}_COMPILER_ID STREQUAL "AppleClang"
-      AND CMAKE_${LANG}_COMPILER_VERSION VERSION_GREATER_EQUAL "7.0")
-
-      # Check for separate OpenMP library on AppleClang 7+
-      find_library(OpenMP_libomp_LIBRARY
-        NAMES omp gomp iomp5
-        HINTS ${CMAKE_${LANG}_IMPLICIT_LINK_DIRECTORIES}
-      )
-      mark_as_advanced(OpenMP_libomp_LIBRARY)
-
-      if(OpenMP_libomp_LIBRARY)
-        # Try without specifying include directory first. We only want to
-        # explicitly add a search path if the header can't be found on the
-        # default header search path already.
-        try_compile( OpenMP_COMPILE_RESULT_${FLAG_MODE}_${OPENMP_PLAIN_FLAG} ${CMAKE_BINARY_DIR} ${_OPENMP_TEST_SRC}
-          CMAKE_FLAGS "-DCOMPILE_DEFINITIONS:STRING=${OPENMP_FLAGS_TEST}"
-          LINK_LIBRARIES ${CMAKE_${LANG}_VERBOSE_FLAG} ${OpenMP_libomp_LIBRARY}
-          OUTPUT_VARIABLE OpenMP_TRY_COMPILE_OUTPUT
-        )
-        if(NOT OpenMP_COMPILE_RESULT_${FLAG_MODE}_${OPENMP_PLAIN_FLAG})
-          find_path(OpenMP_${LANG}_INCLUDE_DIR omp.h)
-          mark_as_advanced(OpenMP_${LANG}_INCLUDE_DIR)
-          set(OpenMP_${LANG}_INCLUDE_DIR "${OpenMP_${LANG}_INCLUDE_DIR}" PARENT_SCOPE)
-          if(OpenMP_${LANG}_INCLUDE_DIR)
-            try_compile( OpenMP_COMPILE_RESULT_${FLAG_MODE}_${OPENMP_PLAIN_FLAG} ${CMAKE_BINARY_DIR} ${_OPENMP_TEST_SRC}
-              CMAKE_FLAGS "-DCOMPILE_DEFINITIONS:STRING=${OPENMP_FLAGS_TEST}"
-                          "-DINCLUDE_DIRECTORIES:STRING=${OpenMP_${LANG}_INCLUDE_DIR}"
-              LINK_LIBRARIES ${CMAKE_${LANG}_VERBOSE_FLAG} ${OpenMP_libomp_LIBRARY}
-              OUTPUT_VARIABLE OpenMP_TRY_COMPILE_OUTPUT
-            )
-          endif()
-        endif()
-        if(OpenMP_COMPILE_RESULT_${FLAG_MODE}_${OPENMP_PLAIN_FLAG})
-          set("${OPENMP_FLAG_VAR}" "${OPENMP_FLAG}" PARENT_SCOPE)
-          set("${OPENMP_LIB_NAMES_VAR}" "libomp" PARENT_SCOPE)
-          break()
-        endif()
-      endif()
-    elseif(CMAKE_${LANG}_COMPILER_ID STREQUAL "Clang" AND WIN32)
-      # Check for separate OpenMP library for Clang on Windows
-      find_library(OpenMP_libomp_LIBRARY
-        NAMES libomp libgomp libiomp5
-        HINTS ${CMAKE_${LANG}_IMPLICIT_LINK_DIRECTORIES}
-      )
-      mark_as_advanced(OpenMP_libomp_LIBRARY)
-      if(OpenMP_libomp_LIBRARY)
-        try_compile( OpenMP_COMPILE_RESULT_${FLAG_MODE}_${OPENMP_PLAIN_FLAG} ${CMAKE_BINARY_DIR} ${_OPENMP_TEST_SRC}
-          CMAKE_FLAGS "-DCOMPILE_DEFINITIONS:STRING=${OPENMP_FLAGS_TEST}"
-          LINK_LIBRARIES ${CMAKE_${LANG}_VERBOSE_FLAG} ${OpenMP_libomp_LIBRARY}
-          OUTPUT_VARIABLE OpenMP_TRY_COMPILE_OUTPUT
-        )
-        if(OpenMP_COMPILE_RESULT_${FLAG_MODE}_${OPENMP_PLAIN_FLAG})
-          set("${OPENMP_FLAG_VAR}" "${OPENMP_FLAG}" PARENT_SCOPE)
-          set("${OPENMP_LIB_NAMES_VAR}" "libomp" PARENT_SCOPE)
-          break()
-        endif()
-      endif()
-    else()
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-        "Detecting ${LANG} OpenMP failed with the following output:\n${OpenMP_TRY_COMPILE_OUTPUT}\n\n")
-    endif()
-    set("${OPENMP_LIB_NAMES_VAR}" "NOTFOUND" PARENT_SCOPE)
-    set("${OPENMP_FLAG_VAR}" "NOTFOUND" PARENT_SCOPE)
-  endforeach()
-
-  unset(OpenMP_VERBOSE_COMPILE_OPTIONS)
-endfunction()
-
-set(OpenMP_C_CXX_CHECK_VERSION_SOURCE
-"
-#include <stdio.h>
-#include <omp.h>
-const char ompver_str[] = { 'I', 'N', 'F', 'O', ':', 'O', 'p', 'e', 'n', 'M',
-                            'P', '-', 'd', 'a', 't', 'e', '[',
-                            ('0' + ((_OPENMP/100000)%10)),
-                            ('0' + ((_OPENMP/10000)%10)),
-                            ('0' + ((_OPENMP/1000)%10)),
-                            ('0' + ((_OPENMP/100)%10)),
-                            ('0' + ((_OPENMP/10)%10)),
-                            ('0' + ((_OPENMP/1)%10)),
-                            ']', '\\0' };
-int main(void)
-{
-  puts(ompver_str);
-  return 0;
-}
-")
-
-set(OpenMP_Fortran_CHECK_VERSION_SOURCE
-"
-      program omp_ver
-      @OpenMP_Fortran_INCLUDE_LINE@
-      integer, parameter :: zero = ichar('0')
-      integer, parameter :: ompv = openmp_version
-      character, dimension(24), parameter :: ompver_str =&
-      (/ 'I', 'N', 'F', 'O', ':', 'O', 'p', 'e', 'n', 'M', 'P', '-',&
-         'd', 'a', 't', 'e', '[',&
-         char(zero + mod(ompv/100000, 10)),&
-         char(zero + mod(ompv/10000, 10)),&
-         char(zero + mod(ompv/1000, 10)),&
-         char(zero + mod(ompv/100, 10)),&
-         char(zero + mod(ompv/10, 10)),&
-         char(zero + mod(ompv/1, 10)), ']' /)
-      print *, ompver_str
-      end program omp_ver
-")
-
-function(_OPENMP_GET_SPEC_DATE LANG SPEC_DATE)
-  _OPENMP_WRITE_SOURCE_FILE("${LANG}" "CHECK_VERSION_SOURCE" OpenMPCheckVersion _OPENMP_TEST_SRC)
-
-  unset(_includeDirFlags)
-  if(OpenMP_${LANG}_INCLUDE_DIR)
-    set(_includeDirFlags "-DINCLUDE_DIRECTORIES:STRING=${OpenMP_${LANG}_INCLUDE_DIR}")
-  endif()
-
-  set(BIN_FILE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/FindOpenMP/ompver_${LANG}.bin")
-  string(REGEX REPLACE "[-/=+]" "" OPENMP_PLAIN_FLAG "${OPENMP_FLAG}")
-  try_compile(OpenMP_SPECTEST_${LANG}_${OPENMP_PLAIN_FLAG} "${CMAKE_BINARY_DIR}" "${_OPENMP_TEST_SRC}"
-              CMAKE_FLAGS "-DCOMPILE_DEFINITIONS:STRING=${OpenMP_${LANG}_FLAGS}" ${_includeDirFlags}
-              COPY_FILE ${BIN_FILE}
-              OUTPUT_VARIABLE OpenMP_TRY_COMPILE_OUTPUT)
-
-  if(${OpenMP_SPECTEST_${LANG}_${OPENMP_PLAIN_FLAG}})
-    file(STRINGS ${BIN_FILE} specstr LIMIT_COUNT 1 REGEX "INFO:OpenMP-date")
-    set(regex_spec_date ".*INFO:OpenMP-date\\[0*([^]]*)\\].*")
-    if("${specstr}" MATCHES "${regex_spec_date}")
-      set(${SPEC_DATE} "${CMAKE_MATCH_1}" PARENT_SCOPE)
-    endif()
-  else()
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-        "Detecting ${LANG} OpenMP version failed with the following output:\n${OpenMP_TRY_COMPILE_OUTPUT}\n\n")
-  endif()
-endfunction()
-
-macro(_OPENMP_SET_VERSION_BY_SPEC_DATE LANG)
-  set(OpenMP_SPEC_DATE_MAP
-    # Preview versions
-    "201611=5.0" # OpenMP 5.0 preview 1
-    # Combined versions, 2.5 onwards
-    "201811=5.0"
-    "201511=4.5"
-    "201307=4.0"
-    "201107=3.1"
-    "200805=3.0"
-    "200505=2.5"
-    # C/C++ version 2.0
-    "200203=2.0"
-    # Fortran version 2.0
-    "200011=2.0"
-    # Fortran version 1.1
-    "199911=1.1"
-    # C/C++ version 1.0 (there's no 1.1 for C/C++)
-    "199810=1.0"
-    # Fortran version 1.0
-    "199710=1.0"
-  )
-  if(MSVC)
-    list(APPEND OpenMP_SPEC_DATE_MAP "2019=2.0")
-  endif()
-
-  if(OpenMP_${LANG}_SPEC_DATE)
-    string(REGEX MATCHALL "${OpenMP_${LANG}_SPEC_DATE}=([0-9]+)\\.([0-9]+)" _version_match "${OpenMP_SPEC_DATE_MAP}")
-  else()
-    set(_version_match "")
-  endif()
-  if(NOT _version_match STREQUAL "")
-    set(OpenMP_${LANG}_VERSION_MAJOR ${CMAKE_MATCH_1})
-    set(OpenMP_${LANG}_VERSION_MINOR ${CMAKE_MATCH_2})
-    set(OpenMP_${LANG}_VERSION "${OpenMP_${LANG}_VERSION_MAJOR}.${OpenMP_${LANG}_VERSION_MINOR}")
-  else()
-    unset(OpenMP_${LANG}_VERSION_MAJOR)
-    unset(OpenMP_${LANG}_VERSION_MINOR)
-    unset(OpenMP_${LANG}_VERSION)
-  endif()
-  unset(_version_match)
-  unset(OpenMP_SPEC_DATE_MAP)
-endmacro()
-
-foreach(LANG IN ITEMS C CXX)
-  if(CMAKE_${LANG}_COMPILER_LOADED)
-    if(NOT DEFINED OpenMP_${LANG}_FLAGS OR "${OpenMP_${LANG}_FLAGS}" STREQUAL "NOTFOUND"
-      OR NOT DEFINED OpenMP_${LANG}_LIB_NAMES OR "${OpenMP_${LANG}_LIB_NAMES}" STREQUAL "NOTFOUND")
-      _OPENMP_GET_FLAGS("${LANG}" "${LANG}" OpenMP_${LANG}_FLAGS_WORK OpenMP_${LANG}_LIB_NAMES_WORK)
-      set(OpenMP_${LANG}_FLAGS "${OpenMP_${LANG}_FLAGS_WORK}"
-        CACHE STRING "${LANG} compiler flags for OpenMP parallelization" FORCE)
-      set(OpenMP_${LANG}_LIB_NAMES "${OpenMP_${LANG}_LIB_NAMES_WORK}"
-        CACHE STRING "${LANG} compiler libraries for OpenMP parallelization" FORCE)
-      mark_as_advanced(OpenMP_${LANG}_FLAGS OpenMP_${LANG}_LIB_NAMES)
-    endif()
-  endif()
-endforeach()
-
-if(CMAKE_Fortran_COMPILER_LOADED)
-  if(NOT DEFINED OpenMP_Fortran_FLAGS OR "${OpenMP_Fortran_FLAGS}" STREQUAL "NOTFOUND"
-    OR NOT DEFINED OpenMP_Fortran_LIB_NAMES OR "${OpenMP_Fortran_LIB_NAMES}" STREQUAL "NOTFOUND"
-    OR NOT DEFINED OpenMP_Fortran_HAVE_OMPLIB_MODULE)
-    set(OpenMP_Fortran_INCLUDE_LINE "use omp_lib\n      implicit none")
-    _OPENMP_GET_FLAGS("Fortran" "FortranHeader" OpenMP_Fortran_FLAGS_WORK OpenMP_Fortran_LIB_NAMES_WORK)
-    if(OpenMP_Fortran_FLAGS_WORK)
-      set(OpenMP_Fortran_HAVE_OMPLIB_MODULE TRUE CACHE BOOL INTERNAL "")
-    endif()
-
-    set(OpenMP_Fortran_FLAGS "${OpenMP_Fortran_FLAGS_WORK}"
-      CACHE STRING "Fortran compiler flags for OpenMP parallelization")
-    set(OpenMP_Fortran_LIB_NAMES "${OpenMP_Fortran_LIB_NAMES_WORK}"
-      CACHE STRING "Fortran compiler libraries for OpenMP parallelization")
-    mark_as_advanced(OpenMP_Fortran_FLAGS OpenMP_Fortran_LIB_NAMES)
-  endif()
-
-  if(NOT DEFINED OpenMP_Fortran_FLAGS OR "${OpenMP_Fortran_FLAGS}" STREQUAL "NOTFOUND"
-    OR NOT DEFINED OpenMP_Fortran_LIB_NAMES OR "${OpenMP_Fortran_LIB_NAMES}" STREQUAL "NOTFOUND"
-    OR NOT DEFINED OpenMP_Fortran_HAVE_OMPLIB_HEADER)
-    set(OpenMP_Fortran_INCLUDE_LINE "implicit none\n      include 'omp_lib.h'")
-    _OPENMP_GET_FLAGS("Fortran" "FortranModule" OpenMP_Fortran_FLAGS_WORK OpenMP_Fortran_LIB_NAMES_WORK)
-    if(OpenMP_Fortran_FLAGS_WORK)
-      set(OpenMP_Fortran_HAVE_OMPLIB_HEADER TRUE CACHE BOOL INTERNAL "")
-    endif()
-
-    set(OpenMP_Fortran_FLAGS "${OpenMP_Fortran_FLAGS_WORK}"
-      CACHE STRING "Fortran compiler flags for OpenMP parallelization")
-
-    set(OpenMP_Fortran_LIB_NAMES "${OpenMP_Fortran_LIB_NAMES}"
-      CACHE STRING "Fortran compiler libraries for OpenMP parallelization")
-  endif()
-
-  if(OpenMP_Fortran_HAVE_OMPLIB_MODULE)
-    set(OpenMP_Fortran_INCLUDE_LINE "use omp_lib\n      implicit none")
-  else()
-    set(OpenMP_Fortran_INCLUDE_LINE "implicit none\n      include 'omp_lib.h'")
-  endif()
-endif()
-
-if(NOT OpenMP_FIND_COMPONENTS)
-  set(OpenMP_FINDLIST C CXX Fortran)
-else()
-  set(OpenMP_FINDLIST ${OpenMP_FIND_COMPONENTS})
-endif()
-
-unset(_OpenMP_MIN_VERSION)
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-
-foreach(LANG IN LISTS OpenMP_FINDLIST)
-  if(CMAKE_${LANG}_COMPILER_LOADED)
-    if (NOT OpenMP_${LANG}_SPEC_DATE AND OpenMP_${LANG}_FLAGS)
-      _OPENMP_GET_SPEC_DATE("${LANG}" OpenMP_${LANG}_SPEC_DATE_INTERNAL)
-      set(OpenMP_${LANG}_SPEC_DATE "${OpenMP_${LANG}_SPEC_DATE_INTERNAL}" CACHE
-        INTERNAL "${LANG} compiler's OpenMP specification date")
-    endif()
-    _OPENMP_SET_VERSION_BY_SPEC_DATE("${LANG}")
-
-    set(OpenMP_${LANG}_FIND_QUIETLY ${OpenMP_FIND_QUIETLY})
-    set(OpenMP_${LANG}_FIND_REQUIRED ${OpenMP_FIND_REQUIRED})
-    set(OpenMP_${LANG}_FIND_VERSION ${OpenMP_FIND_VERSION})
-    set(OpenMP_${LANG}_FIND_VERSION_EXACT ${OpenMP_FIND_VERSION_EXACT})
-
-    set(_OPENMP_${LANG}_REQUIRED_VARS OpenMP_${LANG}_FLAGS)
-    if("${OpenMP_${LANG}_LIB_NAMES}" STREQUAL "NOTFOUND")
-      set(_OPENMP_${LANG}_REQUIRED_LIB_VARS OpenMP_${LANG}_LIB_NAMES)
-    else()
-      foreach(_OPENMP_IMPLICIT_LIB IN LISTS OpenMP_${LANG}_LIB_NAMES)
-        list(APPEND _OPENMP_${LANG}_REQUIRED_LIB_VARS OpenMP_${_OPENMP_IMPLICIT_LIB}_LIBRARY)
-      endforeach()
-    endif()
-
-    find_package_handle_standard_args(OpenMP_${LANG}
-      NAME_MISMATCHED
-      REQUIRED_VARS OpenMP_${LANG}_FLAGS ${_OPENMP_${LANG}_REQUIRED_LIB_VARS}
-      VERSION_VAR OpenMP_${LANG}_VERSION
-    )
-
-    if(OpenMP_${LANG}_FOUND)
-      if(DEFINED OpenMP_${LANG}_VERSION)
-        if(NOT _OpenMP_MIN_VERSION OR _OpenMP_MIN_VERSION VERSION_GREATER OpenMP_${LANG}_VERSION)
-          set(_OpenMP_MIN_VERSION OpenMP_${LANG}_VERSION)
-        endif()
-      endif()
-      set(OpenMP_${LANG}_LIBRARIES "")
-      foreach(_OPENMP_IMPLICIT_LIB IN LISTS OpenMP_${LANG}_LIB_NAMES)
-        list(APPEND OpenMP_${LANG}_LIBRARIES "${OpenMP_${_OPENMP_IMPLICIT_LIB}_LIBRARY}")
-      endforeach()
-      if(OpenMP_${LANG}_INCLUDE_DIR)
-        set(OpenMP_${LANG}_INCLUDE_DIRS ${OpenMP_${LANG}_INCLUDE_DIR})
-      else()
-        set(OpenMP_${LANG}_INCLUDE_DIRS "")
-      endif()
-
-      if(NOT TARGET OpenMP::OpenMP_${LANG})
-        add_library(OpenMP::OpenMP_${LANG} INTERFACE IMPORTED)
-      endif()
-      if(OpenMP_${LANG}_FLAGS)
-        separate_arguments(_OpenMP_${LANG}_OPTIONS NATIVE_COMMAND "${OpenMP_${LANG}_FLAGS}")
-        set_property(TARGET OpenMP::OpenMP_${LANG} PROPERTY
-          INTERFACE_COMPILE_OPTIONS "$<$<COMPILE_LANGUAGE:${LANG}>:${_OpenMP_${LANG}_OPTIONS}>")
-        unset(_OpenMP_${LANG}_OPTIONS)
-      endif()
-      if(OpenMP_${LANG}_INCLUDE_DIRS)
-        set_property(TARGET OpenMP::OpenMP_${LANG} PROPERTY
-          INTERFACE_INCLUDE_DIRECTORIES "$<BUILD_INTERFACE:${OpenMP_${LANG}_INCLUDE_DIRS}>")
-      endif()
-      if(OpenMP_${LANG}_LIBRARIES)
-        set_property(TARGET OpenMP::OpenMP_${LANG} PROPERTY
-          INTERFACE_LINK_LIBRARIES "${OpenMP_${LANG}_LIBRARIES}")
-      endif()
-    endif()
-  endif()
-endforeach()
-
-unset(_OpenMP_REQ_VARS)
-foreach(LANG IN ITEMS C CXX Fortran)
-  if((NOT OpenMP_FIND_COMPONENTS AND CMAKE_${LANG}_COMPILER_LOADED) OR LANG IN_LIST OpenMP_FIND_COMPONENTS)
-    list(APPEND _OpenMP_REQ_VARS "OpenMP_${LANG}_FOUND")
-  endif()
-endforeach()
-
-find_package_handle_standard_args(OpenMP
-    REQUIRED_VARS ${_OpenMP_REQ_VARS}
-    VERSION_VAR ${_OpenMP_MIN_VERSION}
-    HANDLE_COMPONENTS)
-
-set(OPENMP_FOUND ${OpenMP_FOUND})
-
-if(CMAKE_Fortran_COMPILER_LOADED AND OpenMP_Fortran_FOUND)
-  if(NOT DEFINED OpenMP_Fortran_HAVE_OMPLIB_MODULE)
-    set(OpenMP_Fortran_HAVE_OMPLIB_MODULE FALSE CACHE BOOL INTERNAL "")
-  endif()
-  if(NOT DEFINED OpenMP_Fortran_HAVE_OMPLIB_HEADER)
-    set(OpenMP_Fortran_HAVE_OMPLIB_HEADER FALSE CACHE BOOL INTERNAL "")
-  endif()
-endif()
-
-if(NOT ( CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED OR CMAKE_Fortran_COMPILER_LOADED ))
-  message(SEND_ERROR "FindOpenMP requires the C, CXX or Fortran languages to be enabled")
-endif()
-
-unset(OpenMP_C_CXX_TEST_SOURCE)
-unset(OpenMP_Fortran_TEST_SOURCE)
-unset(OpenMP_C_CXX_CHECK_VERSION_SOURCE)
-unset(OpenMP_Fortran_CHECK_VERSION_SOURCE)
-unset(OpenMP_Fortran_INCLUDE_LINE)
-
-cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/FindOpenSSL.cmake b/share/cmake-3.18/Modules/FindOpenSSL.cmake
deleted file mode 100644
index ee40696..0000000
--- a/share/cmake-3.18/Modules/FindOpenSSL.cmake
+++ /dev/null
@@ -1,590 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindOpenSSL
------------
-
-Find the OpenSSL encryption library.
-
-Optional COMPONENTS
-^^^^^^^^^^^^^^^^^^^
-
-This module supports two optional COMPONENTS: ``Crypto`` and ``SSL``.  Both
-components have associated imported targets, as described below.
-
-Imported Targets
-^^^^^^^^^^^^^^^^
-
-This module defines the following :prop_tgt:`IMPORTED` targets:
-
-``OpenSSL::SSL``
-  The OpenSSL ``ssl`` library, if found.
-``OpenSSL::Crypto``
-  The OpenSSL ``crypto`` library, if found.
-``OpenSSL::applink``
-  The OpenSSL ``applink`` components that might be need to be compiled into
-  projects under MSVC. This target is available only if found OpenSSL version
-  is not less than 0.9.8. By linking this target the above OpenSSL targets can
-  be linked even if the project has different MSVC runtime configurations with
-  the above OpenSSL targets. This target has no effect on plaforms other than
-  MSVC.
-
-NOTE: Due to how ``INTERFACE_SOURCES`` are consumed by the consuming target,
-unless you certainly know what you are doing, it is always prefered to link
-``OpenSSL::applink`` target as ``PRIVATE`` and to make sure that this target is
-linked at most once for the whole dependency graph of any library or
-executable:
-
-.. code-block:: cmake
-
-   target_link_libraries(myTarget PRIVATE OpenSSL::applink)
-
-Otherwise you would probably encounter unexpected random problems when building
-and linking, as both the ISO C and the ISO C++ standard claims almost nothing
-about what a link process should be.
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-This module will set the following variables in your project:
-
-``OPENSSL_FOUND``
-  System has the OpenSSL library. If no components are requested it only
-  requires the crypto library.
-``OPENSSL_INCLUDE_DIR``
-  The OpenSSL include directory.
-``OPENSSL_CRYPTO_LIBRARY``
-  The OpenSSL crypto library.
-``OPENSSL_CRYPTO_LIBRARIES``
-  The OpenSSL crypto library and its dependencies.
-``OPENSSL_SSL_LIBRARY``
-  The OpenSSL SSL library.
-``OPENSSL_SSL_LIBRARIES``
-  The OpenSSL SSL library and its dependencies.
-``OPENSSL_LIBRARIES``
-  All OpenSSL libraries and their dependencies.
-``OPENSSL_VERSION``
-  This is set to ``$major.$minor.$revision$patch`` (e.g. ``0.9.8s``).
-``OPENSSL_APPLINK_SOURCE``
-  The sources in the target ``OpenSSL::applink`` that is mentioned above. This
-  variable shall always be undefined if found openssl version is less than
-  0.9.8 or if platform is not MSVC.
-
-Hints
-^^^^^
-
-Set ``OPENSSL_ROOT_DIR`` to the root directory of an OpenSSL installation.
-Set ``OPENSSL_USE_STATIC_LIBS`` to ``TRUE`` to look for static libraries.
-Set ``OPENSSL_MSVC_STATIC_RT`` set ``TRUE`` to choose the MT version of the lib.
-#]=======================================================================]
-
-macro(_OpenSSL_test_and_find_dependencies ssl_library crypto_library)
-  if((CMAKE_SYSTEM_NAME STREQUAL "Linux") AND
-     (("${ssl_library}" MATCHES "\\${CMAKE_STATIC_LIBRARY_SUFFIX}$") OR
-      ("${crypto_library}" MATCHES "\\${CMAKE_STATIC_LIBRARY_SUFFIX}$")))
-    set(_OpenSSL_has_dependencies TRUE)
-    find_package(Threads)
-  else()
-    set(_OpenSSL_has_dependencies FALSE)
-  endif()
-endmacro()
-
-function(_OpenSSL_add_dependencies libraries_var)
-  if(CMAKE_THREAD_LIBS_INIT)
-    list(APPEND ${libraries_var} ${CMAKE_THREAD_LIBS_INIT})
-  endif()
-  list(APPEND ${libraries_var} ${CMAKE_DL_LIBS})
-  set(${libraries_var} ${${libraries_var}} PARENT_SCOPE)
-endfunction()
-
-function(_OpenSSL_target_add_dependencies target)
-  if(_OpenSSL_has_dependencies)
-    set_property( TARGET ${target} APPEND PROPERTY INTERFACE_LINK_LIBRARIES Threads::Threads )
-    set_property( TARGET ${target} APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${CMAKE_DL_LIBS} )
-  endif()
-endfunction()
-
-if (UNIX)
-  find_package(PkgConfig QUIET)
-  pkg_check_modules(_OPENSSL QUIET openssl)
-endif ()
-
-# Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES
-if(OPENSSL_USE_STATIC_LIBS)
-  set(_openssl_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
-  if(WIN32)
-    set(CMAKE_FIND_LIBRARY_SUFFIXES .lib .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
-  else()
-    set(CMAKE_FIND_LIBRARY_SUFFIXES .a )
-  endif()
-endif()
-
-if (WIN32)
-  # http://www.slproweb.com/products/Win32OpenSSL.html
-  set(_OPENSSL_ROOT_HINTS
-    ${OPENSSL_ROOT_DIR}
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;Inno Setup: App Path]"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (64-bit)_is1;Inno Setup: App Path]"
-    ENV OPENSSL_ROOT_DIR
-    )
-  file(TO_CMAKE_PATH "$ENV{PROGRAMFILES}" _programfiles)
-  set(_OPENSSL_ROOT_PATHS
-    "${_programfiles}/OpenSSL"
-    "${_programfiles}/OpenSSL-Win32"
-    "${_programfiles}/OpenSSL-Win64"
-    "C:/OpenSSL/"
-    "C:/OpenSSL-Win32/"
-    "C:/OpenSSL-Win64/"
-    )
-  unset(_programfiles)
-else ()
-  set(_OPENSSL_ROOT_HINTS
-    ${OPENSSL_ROOT_DIR}
-    ENV OPENSSL_ROOT_DIR
-    )
-endif ()
-
-set(_OPENSSL_ROOT_HINTS_AND_PATHS
-    HINTS ${_OPENSSL_ROOT_HINTS}
-    PATHS ${_OPENSSL_ROOT_PATHS}
-    )
-
-find_path(OPENSSL_INCLUDE_DIR
-  NAMES
-    openssl/ssl.h
-  ${_OPENSSL_ROOT_HINTS_AND_PATHS}
-  HINTS
-    ${_OPENSSL_INCLUDEDIR}
-    ${_OPENSSL_INCLUDE_DIRS}
-  PATH_SUFFIXES
-    include
-)
-
-if(WIN32 AND NOT CYGWIN)
-  if(MSVC)
-    # /MD and /MDd are the standard values - if someone wants to use
-    # others, the libnames have to change here too
-    # use also ssl and ssleay32 in debug as fallback for openssl < 0.9.8b
-    # enable OPENSSL_MSVC_STATIC_RT to get the libs build /MT (Multithreaded no-DLL)
-    # In Visual C++ naming convention each of these four kinds of Windows libraries has it's standard suffix:
-    #   * MD for dynamic-release
-    #   * MDd for dynamic-debug
-    #   * MT for static-release
-    #   * MTd for static-debug
-
-    # Implementation details:
-    # We are using the libraries located in the VC subdir instead of the parent directory even though :
-    # libeay32MD.lib is identical to ../libeay32.lib, and
-    # ssleay32MD.lib is identical to ../ssleay32.lib
-    # enable OPENSSL_USE_STATIC_LIBS to use the static libs located in lib/VC/static
-
-    if (OPENSSL_MSVC_STATIC_RT)
-      set(_OPENSSL_MSVC_RT_MODE "MT")
-    else ()
-      set(_OPENSSL_MSVC_RT_MODE "MD")
-    endif ()
-
-    # Since OpenSSL 1.1, lib names are like libcrypto32MTd.lib and libssl32MTd.lib
-    if( "${CMAKE_SIZEOF_VOID_P}" STREQUAL "8" )
-        set(_OPENSSL_MSVC_ARCH_SUFFIX "64")
-    else()
-        set(_OPENSSL_MSVC_ARCH_SUFFIX "32")
-    endif()
-
-    if(OPENSSL_USE_STATIC_LIBS)
-      set(_OPENSSL_PATH_SUFFIXES
-        "lib/VC/static"
-        "VC/static"
-        "lib"
-        )
-    else()
-      set(_OPENSSL_PATH_SUFFIXES
-        "lib/VC"
-        "VC"
-        "lib"
-        )
-    endif ()
-
-    find_library(LIB_EAY_DEBUG
-      NAMES
-        libcrypto${_OPENSSL_MSVC_ARCH_SUFFIX}${_OPENSSL_MSVC_RT_MODE}d
-        libcrypto${_OPENSSL_MSVC_RT_MODE}d
-        libcryptod
-        libeay32${_OPENSSL_MSVC_RT_MODE}d
-        libeay32d
-        cryptod
-      NAMES_PER_DIR
-      ${_OPENSSL_ROOT_HINTS_AND_PATHS}
-      PATH_SUFFIXES
-        ${_OPENSSL_PATH_SUFFIXES}
-    )
-
-    find_library(LIB_EAY_RELEASE
-      NAMES
-        libcrypto${_OPENSSL_MSVC_ARCH_SUFFIX}${_OPENSSL_MSVC_RT_MODE}
-        libcrypto${_OPENSSL_MSVC_RT_MODE}
-        libcrypto
-        libeay32${_OPENSSL_MSVC_RT_MODE}
-        libeay32
-        crypto
-      NAMES_PER_DIR
-      ${_OPENSSL_ROOT_HINTS_AND_PATHS}
-      PATH_SUFFIXES
-        ${_OPENSSL_PATH_SUFFIXES}
-    )
-
-    find_library(SSL_EAY_DEBUG
-      NAMES
-        libssl${_OPENSSL_MSVC_ARCH_SUFFIX}${_OPENSSL_MSVC_RT_MODE}d
-        libssl${_OPENSSL_MSVC_RT_MODE}d
-        libssld
-        ssleay32${_OPENSSL_MSVC_RT_MODE}d
-        ssleay32d
-        ssld
-      NAMES_PER_DIR
-      ${_OPENSSL_ROOT_HINTS_AND_PATHS}
-      PATH_SUFFIXES
-        ${_OPENSSL_PATH_SUFFIXES}
-    )
-
-    find_library(SSL_EAY_RELEASE
-      NAMES
-        libssl${_OPENSSL_MSVC_ARCH_SUFFIX}${_OPENSSL_MSVC_RT_MODE}
-        libssl${_OPENSSL_MSVC_RT_MODE}
-        libssl
-        ssleay32${_OPENSSL_MSVC_RT_MODE}
-        ssleay32
-        ssl
-      NAMES_PER_DIR
-      ${_OPENSSL_ROOT_HINTS_AND_PATHS}
-      PATH_SUFFIXES
-        ${_OPENSSL_PATH_SUFFIXES}
-    )
-
-    set(LIB_EAY_LIBRARY_DEBUG "${LIB_EAY_DEBUG}")
-    set(LIB_EAY_LIBRARY_RELEASE "${LIB_EAY_RELEASE}")
-    set(SSL_EAY_LIBRARY_DEBUG "${SSL_EAY_DEBUG}")
-    set(SSL_EAY_LIBRARY_RELEASE "${SSL_EAY_RELEASE}")
-
-    include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
-    select_library_configurations(LIB_EAY)
-    select_library_configurations(SSL_EAY)
-
-    mark_as_advanced(LIB_EAY_LIBRARY_DEBUG LIB_EAY_LIBRARY_RELEASE
-                     SSL_EAY_LIBRARY_DEBUG SSL_EAY_LIBRARY_RELEASE)
-    set(OPENSSL_SSL_LIBRARY ${SSL_EAY_LIBRARY} )
-    set(OPENSSL_CRYPTO_LIBRARY ${LIB_EAY_LIBRARY} )
-  elseif(MINGW)
-    # same player, for MinGW
-    set(LIB_EAY_NAMES crypto libeay32)
-    set(SSL_EAY_NAMES ssl ssleay32)
-    find_library(LIB_EAY
-      NAMES
-        ${LIB_EAY_NAMES}
-      NAMES_PER_DIR
-      ${_OPENSSL_ROOT_HINTS_AND_PATHS}
-      PATH_SUFFIXES
-        "lib/MinGW"
-        "lib"
-    )
-
-    find_library(SSL_EAY
-      NAMES
-        ${SSL_EAY_NAMES}
-      NAMES_PER_DIR
-      ${_OPENSSL_ROOT_HINTS_AND_PATHS}
-      PATH_SUFFIXES
-        "lib/MinGW"
-        "lib"
-    )
-
-    mark_as_advanced(SSL_EAY LIB_EAY)
-    set(OPENSSL_SSL_LIBRARY ${SSL_EAY} )
-    set(OPENSSL_CRYPTO_LIBRARY ${LIB_EAY} )
-    unset(LIB_EAY_NAMES)
-    unset(SSL_EAY_NAMES)
-  else()
-    # Not sure what to pick for -say- intel, let's use the toplevel ones and hope someone report issues:
-    find_library(LIB_EAY
-      NAMES
-        libcrypto
-        libeay32
-      NAMES_PER_DIR
-      ${_OPENSSL_ROOT_HINTS_AND_PATHS}
-      HINTS
-        ${_OPENSSL_LIBDIR}
-      PATH_SUFFIXES
-        lib
-    )
-
-    find_library(SSL_EAY
-      NAMES
-        libssl
-        ssleay32
-      NAMES_PER_DIR
-      ${_OPENSSL_ROOT_HINTS_AND_PATHS}
-      HINTS
-        ${_OPENSSL_LIBDIR}
-      PATH_SUFFIXES
-        lib
-    )
-
-    mark_as_advanced(SSL_EAY LIB_EAY)
-    set(OPENSSL_SSL_LIBRARY ${SSL_EAY} )
-    set(OPENSSL_CRYPTO_LIBRARY ${LIB_EAY} )
-  endif()
-else()
-
-  find_library(OPENSSL_SSL_LIBRARY
-    NAMES
-      ssl
-      ssleay32
-      ssleay32MD
-    NAMES_PER_DIR
-    ${_OPENSSL_ROOT_HINTS_AND_PATHS}
-    HINTS
-      ${_OPENSSL_LIBDIR}
-      ${_OPENSSL_LIBRARY_DIRS}
-    PATH_SUFFIXES
-      lib
-  )
-
-  find_library(OPENSSL_CRYPTO_LIBRARY
-    NAMES
-      crypto
-    NAMES_PER_DIR
-    ${_OPENSSL_ROOT_HINTS_AND_PATHS}
-    HINTS
-      ${_OPENSSL_LIBDIR}
-      ${_OPENSSL_LIBRARY_DIRS}
-    PATH_SUFFIXES
-      lib
-  )
-
-  mark_as_advanced(OPENSSL_CRYPTO_LIBRARY OPENSSL_SSL_LIBRARY)
-
-endif()
-
-set(OPENSSL_SSL_LIBRARIES ${OPENSSL_SSL_LIBRARY})
-set(OPENSSL_CRYPTO_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY})
-set(OPENSSL_LIBRARIES ${OPENSSL_SSL_LIBRARIES} ${OPENSSL_CRYPTO_LIBRARIES} )
-_OpenSSL_test_and_find_dependencies("${OPENSSL_SSL_LIBRARY}" "${OPENSSL_CRYPTO_LIBRARY}")
-if(_OpenSSL_has_dependencies)
-  _OpenSSL_add_dependencies( OPENSSL_SSL_LIBRARIES )
-  _OpenSSL_add_dependencies( OPENSSL_CRYPTO_LIBRARIES )
-  _OpenSSL_add_dependencies( OPENSSL_LIBRARIES )
-endif()
-
-function(from_hex HEX DEC)
-  string(TOUPPER "${HEX}" HEX)
-  set(_res 0)
-  string(LENGTH "${HEX}" _strlen)
-
-  while (_strlen GREATER 0)
-    math(EXPR _res "${_res} * 16")
-    string(SUBSTRING "${HEX}" 0 1 NIBBLE)
-    string(SUBSTRING "${HEX}" 1 -1 HEX)
-    if (NIBBLE STREQUAL "A")
-      math(EXPR _res "${_res} + 10")
-    elseif (NIBBLE STREQUAL "B")
-      math(EXPR _res "${_res} + 11")
-    elseif (NIBBLE STREQUAL "C")
-      math(EXPR _res "${_res} + 12")
-    elseif (NIBBLE STREQUAL "D")
-      math(EXPR _res "${_res} + 13")
-    elseif (NIBBLE STREQUAL "E")
-      math(EXPR _res "${_res} + 14")
-    elseif (NIBBLE STREQUAL "F")
-      math(EXPR _res "${_res} + 15")
-    else()
-      math(EXPR _res "${_res} + ${NIBBLE}")
-    endif()
-
-    string(LENGTH "${HEX}" _strlen)
-  endwhile()
-
-  set(${DEC} ${_res} PARENT_SCOPE)
-endfunction()
-
-if(OPENSSL_INCLUDE_DIR AND EXISTS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h")
-  file(STRINGS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h" openssl_version_str
-       REGEX "^#[\t ]*define[\t ]+OPENSSL_VERSION_NUMBER[\t ]+0x([0-9a-fA-F])+.*")
-
-  if(openssl_version_str)
-    # The version number is encoded as 0xMNNFFPPS: major minor fix patch status
-    # The status gives if this is a developer or prerelease and is ignored here.
-    # Major, minor, and fix directly translate into the version numbers shown in
-    # the string. The patch field translates to the single character suffix that
-    # indicates the bug fix state, which 00 -> nothing, 01 -> a, 02 -> b and so
-    # on.
-
-    string(REGEX REPLACE "^.*OPENSSL_VERSION_NUMBER[\t ]+0x([0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F]).*$"
-           "\\1;\\2;\\3;\\4;\\5" OPENSSL_VERSION_LIST "${openssl_version_str}")
-    list(GET OPENSSL_VERSION_LIST 0 OPENSSL_VERSION_MAJOR)
-    list(GET OPENSSL_VERSION_LIST 1 OPENSSL_VERSION_MINOR)
-    from_hex("${OPENSSL_VERSION_MINOR}" OPENSSL_VERSION_MINOR)
-    list(GET OPENSSL_VERSION_LIST 2 OPENSSL_VERSION_FIX)
-    from_hex("${OPENSSL_VERSION_FIX}" OPENSSL_VERSION_FIX)
-    list(GET OPENSSL_VERSION_LIST 3 OPENSSL_VERSION_PATCH)
-
-    if (NOT OPENSSL_VERSION_PATCH STREQUAL "00")
-      from_hex("${OPENSSL_VERSION_PATCH}" _tmp)
-      # 96 is the ASCII code of 'a' minus 1
-      math(EXPR OPENSSL_VERSION_PATCH_ASCII "${_tmp} + 96")
-      unset(_tmp)
-      # Once anyone knows how OpenSSL would call the patch versions beyond 'z'
-      # this should be updated to handle that, too. This has not happened yet
-      # so it is simply ignored here for now.
-      string(ASCII "${OPENSSL_VERSION_PATCH_ASCII}" OPENSSL_VERSION_PATCH_STRING)
-    endif ()
-
-    set(OPENSSL_VERSION "${OPENSSL_VERSION_MAJOR}.${OPENSSL_VERSION_MINOR}.${OPENSSL_VERSION_FIX}${OPENSSL_VERSION_PATCH_STRING}")
-  else ()
-    # Since OpenSSL 3.0.0, the new version format is MAJOR.MINOR.PATCH and
-    # a new OPENSSL_VERSION_STR macro contains exactly that
-    file(STRINGS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h" OPENSSL_VERSION_STR
-         REGEX "^#[\t ]*define[\t ]+OPENSSL_VERSION_STR[\t ]+\"([0-9])+\\.([0-9])+\\.([0-9])+\".*")
-    string(REGEX REPLACE "^.*OPENSSL_VERSION_STR[\t ]+\"([0-9]+\\.[0-9]+\\.[0-9]+)\".*$"
-           "\\1" OPENSSL_VERSION_STR "${OPENSSL_VERSION_STR}")
-
-    set(OPENSSL_VERSION "${OPENSSL_VERSION_STR}")
-
-    unset(OPENSSL_VERSION_STR)
-  endif ()
-endif ()
-
-foreach(_comp IN LISTS OpenSSL_FIND_COMPONENTS)
-  if(_comp STREQUAL "Crypto")
-    if(EXISTS "${OPENSSL_INCLUDE_DIR}" AND
-        (EXISTS "${OPENSSL_CRYPTO_LIBRARY}" OR
-        EXISTS "${LIB_EAY_LIBRARY_DEBUG}" OR
-        EXISTS "${LIB_EAY_LIBRARY_RELEASE}")
-    )
-      set(OpenSSL_${_comp}_FOUND TRUE)
-    else()
-      set(OpenSSL_${_comp}_FOUND FALSE)
-    endif()
-  elseif(_comp STREQUAL "SSL")
-    if(EXISTS "${OPENSSL_INCLUDE_DIR}" AND
-        (EXISTS "${OPENSSL_SSL_LIBRARY}" OR
-        EXISTS "${SSL_EAY_LIBRARY_DEBUG}" OR
-        EXISTS "${SSL_EAY_LIBRARY_RELEASE}")
-    )
-      set(OpenSSL_${_comp}_FOUND TRUE)
-    else()
-      set(OpenSSL_${_comp}_FOUND FALSE)
-    endif()
-  else()
-    message(WARNING "${_comp} is not a valid OpenSSL component")
-    set(OpenSSL_${_comp}_FOUND FALSE)
-  endif()
-endforeach()
-unset(_comp)
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-find_package_handle_standard_args(OpenSSL
-  REQUIRED_VARS
-    OPENSSL_CRYPTO_LIBRARY
-    OPENSSL_INCLUDE_DIR
-  VERSION_VAR
-    OPENSSL_VERSION
-  HANDLE_COMPONENTS
-  FAIL_MESSAGE
-    "Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR"
-)
-
-mark_as_advanced(OPENSSL_INCLUDE_DIR)
-
-if(OPENSSL_FOUND)
-  if(NOT TARGET OpenSSL::Crypto AND
-      (EXISTS "${OPENSSL_CRYPTO_LIBRARY}" OR
-        EXISTS "${LIB_EAY_LIBRARY_DEBUG}" OR
-        EXISTS "${LIB_EAY_LIBRARY_RELEASE}")
-      )
-    add_library(OpenSSL::Crypto UNKNOWN IMPORTED)
-    set_target_properties(OpenSSL::Crypto PROPERTIES
-      INTERFACE_INCLUDE_DIRECTORIES "${OPENSSL_INCLUDE_DIR}")
-    if(EXISTS "${OPENSSL_CRYPTO_LIBRARY}")
-      set_target_properties(OpenSSL::Crypto PROPERTIES
-        IMPORTED_LINK_INTERFACE_LANGUAGES "C"
-        IMPORTED_LOCATION "${OPENSSL_CRYPTO_LIBRARY}")
-    endif()
-    if(EXISTS "${LIB_EAY_LIBRARY_RELEASE}")
-      set_property(TARGET OpenSSL::Crypto APPEND PROPERTY
-        IMPORTED_CONFIGURATIONS RELEASE)
-      set_target_properties(OpenSSL::Crypto PROPERTIES
-        IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
-        IMPORTED_LOCATION_RELEASE "${LIB_EAY_LIBRARY_RELEASE}")
-    endif()
-    if(EXISTS "${LIB_EAY_LIBRARY_DEBUG}")
-      set_property(TARGET OpenSSL::Crypto APPEND PROPERTY
-        IMPORTED_CONFIGURATIONS DEBUG)
-      set_target_properties(OpenSSL::Crypto PROPERTIES
-        IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
-        IMPORTED_LOCATION_DEBUG "${LIB_EAY_LIBRARY_DEBUG}")
-    endif()
-    _OpenSSL_target_add_dependencies(OpenSSL::Crypto)
-  endif()
-
-  if(NOT TARGET OpenSSL::SSL AND
-      (EXISTS "${OPENSSL_SSL_LIBRARY}" OR
-        EXISTS "${SSL_EAY_LIBRARY_DEBUG}" OR
-        EXISTS "${SSL_EAY_LIBRARY_RELEASE}")
-      )
-    add_library(OpenSSL::SSL UNKNOWN IMPORTED)
-    set_target_properties(OpenSSL::SSL PROPERTIES
-      INTERFACE_INCLUDE_DIRECTORIES "${OPENSSL_INCLUDE_DIR}")
-    if(EXISTS "${OPENSSL_SSL_LIBRARY}")
-      set_target_properties(OpenSSL::SSL PROPERTIES
-        IMPORTED_LINK_INTERFACE_LANGUAGES "C"
-        IMPORTED_LOCATION "${OPENSSL_SSL_LIBRARY}")
-    endif()
-    if(EXISTS "${SSL_EAY_LIBRARY_RELEASE}")
-      set_property(TARGET OpenSSL::SSL APPEND PROPERTY
-        IMPORTED_CONFIGURATIONS RELEASE)
-      set_target_properties(OpenSSL::SSL PROPERTIES
-        IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
-        IMPORTED_LOCATION_RELEASE "${SSL_EAY_LIBRARY_RELEASE}")
-    endif()
-    if(EXISTS "${SSL_EAY_LIBRARY_DEBUG}")
-      set_property(TARGET OpenSSL::SSL APPEND PROPERTY
-        IMPORTED_CONFIGURATIONS DEBUG)
-      set_target_properties(OpenSSL::SSL PROPERTIES
-        IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
-        IMPORTED_LOCATION_DEBUG "${SSL_EAY_LIBRARY_DEBUG}")
-    endif()
-    if(TARGET OpenSSL::Crypto)
-      set_target_properties(OpenSSL::SSL PROPERTIES
-        INTERFACE_LINK_LIBRARIES OpenSSL::Crypto)
-    endif()
-    _OpenSSL_target_add_dependencies(OpenSSL::SSL)
-  endif()
-
-  if("${OPENSSL_VERSION_MAJOR}.${OPENSSL_VERSION_MAJOR}.${OPENSSL_VERSION_FIX}" VERSION_GREATER_EQUAL "0.9.8")
-    if(MSVC)
-      if(EXISTS "${OPENSSL_INCLUDE_DIR}")
-        set(_OPENSSL_applink_paths PATHS ${OPENSSL_INCLUDE_DIR})
-      endif()
-      find_file(OPENSSL_APPLINK_SOURCE
-        NAMES
-          openssl/applink.c
-        ${_OPENSSL_applink_paths}
-        NO_DEFAULT_PATH)
-      if(OPENSSL_APPLINK_SOURCE)
-        set(_OPENSSL_applink_interface_srcs ${OPENSSL_APPLINK_SOURCE})
-      endif()
-    endif()
-    if(NOT TARGET OpenSSL::applink)
-      add_library(OpenSSL::applink INTERFACE IMPORTED)
-      set_property(TARGET OpenSSL::applink APPEND
-        PROPERTY INTERFACE_SOURCES
-          ${_OPENSSL_applink_interface_srcs})
-    endif()
-  endif()
-endif()
-
-# Restore the original find library ordering
-if(OPENSSL_USE_STATIC_LIBS)
-  set(CMAKE_FIND_LIBRARY_SUFFIXES ${_openssl_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
-endif()
diff --git a/share/cmake-3.18/Modules/FindPNG.cmake b/share/cmake-3.18/Modules/FindPNG.cmake
deleted file mode 100644
index f1fe89a..0000000
--- a/share/cmake-3.18/Modules/FindPNG.cmake
+++ /dev/null
@@ -1,160 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindPNG
--------
-
-Find libpng, the official reference library for the PNG image format.
-
-Imported targets
-^^^^^^^^^^^^^^^^
-
-This module defines the following :prop_tgt:`IMPORTED` target:
-
-``PNG::PNG``
-  The libpng library, if found.
-
-Result variables
-^^^^^^^^^^^^^^^^
-
-This module will set the following variables in your project:
-
-``PNG_INCLUDE_DIRS``
-  where to find png.h, etc.
-``PNG_LIBRARIES``
-  the libraries to link against to use PNG.
-``PNG_DEFINITIONS``
-  You should add_definitions(${PNG_DEFINITIONS}) before compiling code
-  that includes png library files.
-``PNG_FOUND``
-  If false, do not try to use PNG.
-``PNG_VERSION_STRING``
-  the version of the PNG library found (since CMake 2.8.8)
-
-Obsolete variables
-^^^^^^^^^^^^^^^^^^
-
-The following variables may also be set, for backwards compatibility:
-
-``PNG_LIBRARY``
-  where to find the PNG library.
-``PNG_INCLUDE_DIR``
-  where to find the PNG headers (same as PNG_INCLUDE_DIRS)
-
-Since PNG depends on the ZLib compression library, none of the above
-will be defined unless ZLib can be found.
-#]=======================================================================]
-
-if(PNG_FIND_QUIETLY)
-  set(_FIND_ZLIB_ARG QUIET)
-endif()
-find_package(ZLIB ${_FIND_ZLIB_ARG})
-
-if(ZLIB_FOUND)
-  find_path(PNG_PNG_INCLUDE_DIR png.h PATH_SUFFIXES include/libpng)
-
-  list(APPEND PNG_NAMES png libpng)
-  unset(PNG_NAMES_DEBUG)
-  set(_PNG_VERSION_SUFFIXES 17 16 15 14 12)
-  if (PNG_FIND_VERSION MATCHES "^([0-9]+)\\.([0-9]+)(\\..*)?$")
-    set(_PNG_VERSION_SUFFIX_MIN "${CMAKE_MATCH_1}${CMAKE_MATCH_2}")
-    if (PNG_FIND_VERSION_EXACT)
-      set(_PNG_VERSION_SUFFIXES ${_PNG_VERSION_SUFFIX_MIN})
-    else ()
-      string(REGEX REPLACE
-          "${_PNG_VERSION_SUFFIX_MIN}.*" "${_PNG_VERSION_SUFFIX_MIN}"
-          _PNG_VERSION_SUFFIXES "${_PNG_VERSION_SUFFIXES}")
-    endif ()
-    unset(_PNG_VERSION_SUFFIX_MIN)
-  endif ()
-  foreach(v IN LISTS _PNG_VERSION_SUFFIXES)
-    list(APPEND PNG_NAMES png${v} libpng${v} libpng${v}_static)
-    list(APPEND PNG_NAMES_DEBUG png${v}d libpng${v}d libpng${v}_staticd)
-  endforeach()
-  unset(_PNG_VERSION_SUFFIXES)
-  # For compatibility with versions prior to this multi-config search, honor
-  # any PNG_LIBRARY that is already specified and skip the search.
-  if(NOT PNG_LIBRARY)
-    find_library(PNG_LIBRARY_RELEASE NAMES ${PNG_NAMES})
-    find_library(PNG_LIBRARY_DEBUG NAMES ${PNG_NAMES_DEBUG})
-    include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
-    select_library_configurations(PNG)
-    mark_as_advanced(PNG_LIBRARY_RELEASE PNG_LIBRARY_DEBUG)
-  endif()
-  unset(PNG_NAMES)
-  unset(PNG_NAMES_DEBUG)
-
-  # Set by select_library_configurations(), but we want the one from
-  # find_package_handle_standard_args() below.
-  unset(PNG_FOUND)
-
-  if (PNG_LIBRARY AND PNG_PNG_INCLUDE_DIR)
-      # png.h includes zlib.h. Sigh.
-      set(PNG_INCLUDE_DIRS ${PNG_PNG_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR} )
-      set(PNG_INCLUDE_DIR ${PNG_INCLUDE_DIRS} ) # for backward compatibility
-      set(PNG_LIBRARIES ${PNG_LIBRARY} ${ZLIB_LIBRARY})
-      if((CMAKE_SYSTEM_NAME STREQUAL "Linux") AND
-         ("${PNG_LIBRARY}" MATCHES "\\${CMAKE_STATIC_LIBRARY_SUFFIX}$"))
-        list(APPEND PNG_LIBRARIES m)
-      endif()
-
-      if (CYGWIN)
-        if(BUILD_SHARED_LIBS)
-           # No need to define PNG_USE_DLL here, because it's default for Cygwin.
-        else()
-          set (PNG_DEFINITIONS -DPNG_STATIC)
-          set(_PNG_COMPILE_DEFINITIONS PNG_STATIC)
-        endif()
-      endif ()
-
-      if(NOT TARGET PNG::PNG)
-        add_library(PNG::PNG UNKNOWN IMPORTED)
-        set_target_properties(PNG::PNG PROPERTIES
-          INTERFACE_COMPILE_DEFINITIONS "${_PNG_COMPILE_DEFINITIONS}"
-          INTERFACE_INCLUDE_DIRECTORIES "${PNG_INCLUDE_DIRS}"
-          INTERFACE_LINK_LIBRARIES ZLIB::ZLIB)
-        if((CMAKE_SYSTEM_NAME STREQUAL "Linux") AND
-           ("${PNG_LIBRARY}" MATCHES "\\${CMAKE_STATIC_LIBRARY_SUFFIX}$"))
-          set_property(TARGET PNG::PNG APPEND PROPERTY
-            INTERFACE_LINK_LIBRARIES m)
-        endif()
-
-        if(EXISTS "${PNG_LIBRARY}")
-          set_target_properties(PNG::PNG PROPERTIES
-            IMPORTED_LINK_INTERFACE_LANGUAGES "C"
-            IMPORTED_LOCATION "${PNG_LIBRARY}")
-        endif()
-        if(EXISTS "${PNG_LIBRARY_RELEASE}")
-          set_property(TARGET PNG::PNG APPEND PROPERTY
-            IMPORTED_CONFIGURATIONS RELEASE)
-          set_target_properties(PNG::PNG PROPERTIES
-            IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
-            IMPORTED_LOCATION_RELEASE "${PNG_LIBRARY_RELEASE}")
-        endif()
-        if(EXISTS "${PNG_LIBRARY_DEBUG}")
-          set_property(TARGET PNG::PNG APPEND PROPERTY
-            IMPORTED_CONFIGURATIONS DEBUG)
-          set_target_properties(PNG::PNG PROPERTIES
-            IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
-            IMPORTED_LOCATION_DEBUG "${PNG_LIBRARY_DEBUG}")
-        endif()
-      endif()
-
-      unset(_PNG_COMPILE_DEFINITIONS)
-  endif ()
-
-  if (PNG_PNG_INCLUDE_DIR AND EXISTS "${PNG_PNG_INCLUDE_DIR}/png.h")
-      file(STRINGS "${PNG_PNG_INCLUDE_DIR}/png.h" png_version_str REGEX "^#define[ \t]+PNG_LIBPNG_VER_STRING[ \t]+\".+\"")
-
-      string(REGEX REPLACE "^#define[ \t]+PNG_LIBPNG_VER_STRING[ \t]+\"([^\"]+)\".*" "\\1" PNG_VERSION_STRING "${png_version_str}")
-      unset(png_version_str)
-  endif ()
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-find_package_handle_standard_args(PNG
-                                  REQUIRED_VARS PNG_LIBRARY PNG_PNG_INCLUDE_DIR
-                                  VERSION_VAR PNG_VERSION_STRING)
-
-mark_as_advanced(PNG_PNG_INCLUDE_DIR PNG_LIBRARY )
diff --git a/share/cmake-3.18/Modules/FindPackageHandleStandardArgs.cmake b/share/cmake-3.18/Modules/FindPackageHandleStandardArgs.cmake
deleted file mode 100644
index 4fb0825..0000000
--- a/share/cmake-3.18/Modules/FindPackageHandleStandardArgs.cmake
+++ /dev/null
@@ -1,466 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindPackageHandleStandardArgs
------------------------------
-
-This module provides a function intended to be used in :ref:`Find Modules`
-implementing :command:`find_package(<PackageName>)` calls.  It handles the
-``REQUIRED``, ``QUIET`` and version-related arguments of ``find_package``.
-It also sets the ``<PackageName>_FOUND`` variable.  The package is
-considered found if all variables listed contain valid results, e.g.
-valid filepaths.
-
-.. command:: find_package_handle_standard_args
-
-  There are two signatures::
-
-    find_package_handle_standard_args(<PackageName>
-      (DEFAULT_MSG|<custom-failure-message>)
-      <required-var>...
-      )
-
-    find_package_handle_standard_args(<PackageName>
-      [FOUND_VAR <result-var>]
-      [REQUIRED_VARS <required-var>...]
-      [VERSION_VAR <version-var>]
-      [HANDLE_COMPONENTS]
-      [CONFIG_MODE]
-      [NAME_MISMATCHED]
-      [REASON_FAILURE_MESSAGE <reason-failure-message>]
-      [FAIL_MESSAGE <custom-failure-message>]
-      )
-
-  The ``<PackageName>_FOUND`` variable will be set to ``TRUE`` if all
-  the variables ``<required-var>...`` are valid and any optional
-  constraints are satisfied, and ``FALSE`` otherwise.  A success or
-  failure message may be displayed based on the results and on
-  whether the ``REQUIRED`` and/or ``QUIET`` option was given to
-  the :command:`find_package` call.
-
-  The options are:
-
-  ``(DEFAULT_MSG|<custom-failure-message>)``
-    In the simple signature this specifies the failure message.
-    Use ``DEFAULT_MSG`` to ask for a default message to be computed
-    (recommended).  Not valid in the full signature.
-
-  ``FOUND_VAR <result-var>``
-    Obsolete.  Specifies either ``<PackageName>_FOUND`` or
-    ``<PACKAGENAME>_FOUND`` as the result variable.  This exists only
-    for compatibility with older versions of CMake and is now ignored.
-    Result variables of both names are always set for compatibility.
-
-  ``REQUIRED_VARS <required-var>...``
-    Specify the variables which are required for this package.
-    These may be named in the generated failure message asking the
-    user to set the missing variable values.  Therefore these should
-    typically be cache entries such as ``FOO_LIBRARY`` and not output
-    variables like ``FOO_LIBRARIES``. This option is mandatory if
-    ``HANDLE_COMPONENTS`` is not specified.
-
-  ``VERSION_VAR <version-var>``
-    Specify the name of a variable that holds the version of the package
-    that has been found.  This version will be checked against the
-    (potentially) specified required version given to the
-    :command:`find_package` call, including its ``EXACT`` option.
-    The default messages include information about the required
-    version and the version which has been actually found, both
-    if the version is ok or not.
-
-  ``HANDLE_COMPONENTS``
-    Enable handling of package components.  In this case, the command
-    will report which components have been found and which are missing,
-    and the ``<PackageName>_FOUND`` variable will be set to ``FALSE``
-    if any of the required components (i.e. not the ones listed after
-    the ``OPTIONAL_COMPONENTS`` option of :command:`find_package`) are
-    missing.
-
-  ``CONFIG_MODE``
-    Specify that the calling find module is a wrapper around a
-    call to ``find_package(<PackageName> NO_MODULE)``.  This implies
-    a ``VERSION_VAR`` value of ``<PackageName>_VERSION``.  The command
-    will automatically check whether the package configuration file
-    was found.
-
-  ``REASON_FAILURE_MESSAGE <reason-failure-message>``
-    Specify a custom message of the reason for the failure which will be
-    appended to the default generated message.
-
-  ``FAIL_MESSAGE <custom-failure-message>``
-    Specify a custom failure message instead of using the default
-    generated message.  Not recommended.
-
-  ``NAME_MISMATCHED``
-    Indicate that the ``<PackageName>`` does not match
-    ``${CMAKE_FIND_PACKAGE_NAME}``. This is usually a mistake and raises a
-    warning, but it may be intentional for usage of the command for components
-    of a larger package.
-
-Example for the simple signature:
-
-.. code-block:: cmake
-
-  find_package_handle_standard_args(LibXml2 DEFAULT_MSG
-    LIBXML2_LIBRARY LIBXML2_INCLUDE_DIR)
-
-The ``LibXml2`` package is considered to be found if both
-``LIBXML2_LIBRARY`` and ``LIBXML2_INCLUDE_DIR`` are valid.
-Then also ``LibXml2_FOUND`` is set to ``TRUE``.  If it is not found
-and ``REQUIRED`` was used, it fails with a
-:command:`message(FATAL_ERROR)`, independent whether ``QUIET`` was
-used or not.  If it is found, success will be reported, including
-the content of the first ``<required-var>``.  On repeated CMake runs,
-the same message will not be printed again.
-
-.. note::
-
-  If ``<PackageName>`` does not match ``CMAKE_FIND_PACKAGE_NAME`` for the
-  calling module, a warning that there is a mismatch is given. The
-  ``FPHSA_NAME_MISMATCHED`` variable may be set to bypass the warning if using
-  the old signature and the ``NAME_MISMATCHED`` argument using the new
-  signature. To avoid forcing the caller to require newer versions of CMake for
-  usage, the variable's value will be used if defined when the
-  ``NAME_MISMATCHED`` argument is not passed for the new signature (but using
-  both is an error)..
-
-Example for the full signature:
-
-.. code-block:: cmake
-
-  find_package_handle_standard_args(LibArchive
-    REQUIRED_VARS LibArchive_LIBRARY LibArchive_INCLUDE_DIR
-    VERSION_VAR LibArchive_VERSION)
-
-In this case, the ``LibArchive`` package is considered to be found if
-both ``LibArchive_LIBRARY`` and ``LibArchive_INCLUDE_DIR`` are valid.
-Also the version of ``LibArchive`` will be checked by using the version
-contained in ``LibArchive_VERSION``.  Since no ``FAIL_MESSAGE`` is given,
-the default messages will be printed.
-
-Another example for the full signature:
-
-.. code-block:: cmake
-
-  find_package(Automoc4 QUIET NO_MODULE HINTS /opt/automoc4)
-  find_package_handle_standard_args(Automoc4  CONFIG_MODE)
-
-In this case, a ``FindAutmoc4.cmake`` module wraps a call to
-``find_package(Automoc4 NO_MODULE)`` and adds an additional search
-directory for ``automoc4``.  Then the call to
-``find_package_handle_standard_args`` produces a proper success/failure
-message.
-#]=======================================================================]
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageMessage.cmake)
-
-# internal helper macro
-macro(_FPHSA_FAILURE_MESSAGE _msg)
-  set (__msg "${_msg}")
-  if (FPHSA_REASON_FAILURE_MESSAGE)
-    string(APPEND __msg "\n    Reason given by package: ${FPHSA_REASON_FAILURE_MESSAGE}\n")
-  endif()
-  if (${_NAME}_FIND_REQUIRED)
-    message(FATAL_ERROR "${__msg}")
-  else ()
-    if (NOT ${_NAME}_FIND_QUIETLY)
-      message(STATUS "${__msg}")
-    endif ()
-  endif ()
-endmacro()
-
-
-# internal helper macro to generate the failure message when used in CONFIG_MODE:
-macro(_FPHSA_HANDLE_FAILURE_CONFIG_MODE)
-  # <PackageName>_CONFIG is set, but FOUND is false, this means that some other of the REQUIRED_VARS was not found:
-  if(${_NAME}_CONFIG)
-    _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: missing:${MISSING_VARS} (found ${${_NAME}_CONFIG} ${VERSION_MSG})")
-  else()
-    # If _CONSIDERED_CONFIGS is set, the config-file has been found, but no suitable version.
-    # List them all in the error message:
-    if(${_NAME}_CONSIDERED_CONFIGS)
-      set(configsText "")
-      list(LENGTH ${_NAME}_CONSIDERED_CONFIGS configsCount)
-      math(EXPR configsCount "${configsCount} - 1")
-      foreach(currentConfigIndex RANGE ${configsCount})
-        list(GET ${_NAME}_CONSIDERED_CONFIGS ${currentConfigIndex} filename)
-        list(GET ${_NAME}_CONSIDERED_VERSIONS ${currentConfigIndex} version)
-        string(APPEND configsText "\n    ${filename} (version ${version})")
-      endforeach()
-      if (${_NAME}_NOT_FOUND_MESSAGE)
-        if (FPHSA_REASON_FAILURE_MESSAGE)
-          string(PREPEND FPHSA_REASON_FAILURE_MESSAGE "${${_NAME}_NOT_FOUND_MESSAGE}\n    ")
-        else()
-          set(FPHSA_REASON_FAILURE_MESSAGE "${${_NAME}_NOT_FOUND_MESSAGE}")
-        endif()
-      else()
-        string(APPEND configsText "\n")
-      endif()
-      _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE} ${VERSION_MSG}, checked the following files:${configsText}")
-
-    else()
-      # Simple case: No Config-file was found at all:
-      _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: found neither ${_NAME}Config.cmake nor ${_NAME_LOWER}-config.cmake ${VERSION_MSG}")
-    endif()
-  endif()
-endmacro()
-
-
-function(FIND_PACKAGE_HANDLE_STANDARD_ARGS _NAME _FIRST_ARG)
-
-  # Set up the arguments for `cmake_parse_arguments`.
-  set(options  CONFIG_MODE  HANDLE_COMPONENTS NAME_MISMATCHED)
-  set(oneValueArgs  FAIL_MESSAGE  REASON_FAILURE_MESSAGE VERSION_VAR  FOUND_VAR)
-  set(multiValueArgs REQUIRED_VARS)
-
-  # Check whether we are in 'simple' or 'extended' mode:
-  set(_KEYWORDS_FOR_EXTENDED_MODE  ${options} ${oneValueArgs} ${multiValueArgs} )
-  list(FIND _KEYWORDS_FOR_EXTENDED_MODE "${_FIRST_ARG}" INDEX)
-
-  unset(FPHSA_NAME_MISMATCHED_override)
-  if (DEFINED FPHSA_NAME_MISMATCHED)
-    # If the variable NAME_MISMATCHED variable is set, error if it is passed as
-    # an argument. The former is for old signatures, the latter is for new
-    # signatures.
-    list(FIND ARGN "NAME_MISMATCHED" name_mismatched_idx)
-    if (NOT name_mismatched_idx EQUAL "-1")
-      message(FATAL_ERROR
-        "The `NAME_MISMATCHED` argument may only be specified by the argument or "
-        "the variable, not both.")
-    endif ()
-
-    # But use the variable if it is not an argument to avoid forcing minimum
-    # CMake version bumps for calling modules.
-    set(FPHSA_NAME_MISMATCHED_override "${FPHSA_NAME_MISMATCHED}")
-  endif ()
-
-  if(${INDEX} EQUAL -1)
-    set(FPHSA_FAIL_MESSAGE ${_FIRST_ARG})
-    set(FPHSA_REQUIRED_VARS ${ARGN})
-    set(FPHSA_VERSION_VAR)
-  else()
-    cmake_parse_arguments(FPHSA "${options}" "${oneValueArgs}" "${multiValueArgs}"  ${_FIRST_ARG} ${ARGN})
-
-    if(FPHSA_UNPARSED_ARGUMENTS)
-      message(FATAL_ERROR "Unknown keywords given to FIND_PACKAGE_HANDLE_STANDARD_ARGS(): \"${FPHSA_UNPARSED_ARGUMENTS}\"")
-    endif()
-
-    if(NOT FPHSA_FAIL_MESSAGE)
-      set(FPHSA_FAIL_MESSAGE  "DEFAULT_MSG")
-    endif()
-
-    # In config-mode, we rely on the variable <PackageName>_CONFIG, which is set by find_package()
-    # when it successfully found the config-file, including version checking:
-    if(FPHSA_CONFIG_MODE)
-      list(INSERT FPHSA_REQUIRED_VARS 0 ${_NAME}_CONFIG)
-      list(REMOVE_DUPLICATES FPHSA_REQUIRED_VARS)
-      set(FPHSA_VERSION_VAR ${_NAME}_VERSION)
-    endif()
-
-    if(NOT FPHSA_REQUIRED_VARS AND NOT FPHSA_HANDLE_COMPONENTS)
-      message(FATAL_ERROR "No REQUIRED_VARS specified for FIND_PACKAGE_HANDLE_STANDARD_ARGS()")
-    endif()
-  endif()
-
-  if (DEFINED FPHSA_NAME_MISMATCHED_override)
-    set(FPHSA_NAME_MISMATCHED "${FPHSA_NAME_MISMATCHED_override}")
-  endif ()
-
-  if (DEFINED CMAKE_FIND_PACKAGE_NAME
-      AND NOT FPHSA_NAME_MISMATCHED
-      AND NOT _NAME STREQUAL CMAKE_FIND_PACKAGE_NAME)
-    message(AUTHOR_WARNING
-      "The package name passed to `find_package_handle_standard_args` "
-      "(${_NAME}) does not match the name of the calling package "
-      "(${CMAKE_FIND_PACKAGE_NAME}). This can lead to problems in calling "
-      "code that expects `find_package` result variables (e.g., `_FOUND`) "
-      "to follow a certain pattern.")
-  endif ()
-
-# now that we collected all arguments, process them
-
-  if("x${FPHSA_FAIL_MESSAGE}" STREQUAL "xDEFAULT_MSG")
-    set(FPHSA_FAIL_MESSAGE "Could NOT find ${_NAME}")
-  endif()
-
-  if (FPHSA_REQUIRED_VARS)
-    list(GET FPHSA_REQUIRED_VARS 0 _FIRST_REQUIRED_VAR)
-  endif()
-
-  string(TOUPPER ${_NAME} _NAME_UPPER)
-  string(TOLOWER ${_NAME} _NAME_LOWER)
-
-  if(FPHSA_FOUND_VAR)
-    set(_FOUND_VAR_UPPER ${_NAME_UPPER}_FOUND)
-    set(_FOUND_VAR_MIXED ${_NAME}_FOUND)
-    if(FPHSA_FOUND_VAR STREQUAL _FOUND_VAR_MIXED  OR  FPHSA_FOUND_VAR STREQUAL _FOUND_VAR_UPPER)
-      set(_FOUND_VAR ${FPHSA_FOUND_VAR})
-    else()
-      message(FATAL_ERROR "The argument for FOUND_VAR is \"${FPHSA_FOUND_VAR}\", but only \"${_FOUND_VAR_MIXED}\" and \"${_FOUND_VAR_UPPER}\" are valid names.")
-    endif()
-  else()
-    set(_FOUND_VAR ${_NAME_UPPER}_FOUND)
-  endif()
-
-  # collect all variables which were not found, so they can be printed, so the
-  # user knows better what went wrong (#6375)
-  set(MISSING_VARS "")
-  set(DETAILS "")
-  # check if all passed variables are valid
-  set(FPHSA_FOUND_${_NAME} TRUE)
-  foreach(_CURRENT_VAR ${FPHSA_REQUIRED_VARS})
-    if(NOT ${_CURRENT_VAR})
-      set(FPHSA_FOUND_${_NAME} FALSE)
-      string(APPEND MISSING_VARS " ${_CURRENT_VAR}")
-    else()
-      string(APPEND DETAILS "[${${_CURRENT_VAR}}]")
-    endif()
-  endforeach()
-  if(FPHSA_FOUND_${_NAME})
-    set(${_NAME}_FOUND TRUE)
-    set(${_NAME_UPPER}_FOUND TRUE)
-  else()
-    set(${_NAME}_FOUND FALSE)
-    set(${_NAME_UPPER}_FOUND FALSE)
-  endif()
-
-  # component handling
-  unset(FOUND_COMPONENTS_MSG)
-  unset(MISSING_COMPONENTS_MSG)
-
-  if(FPHSA_HANDLE_COMPONENTS)
-    foreach(comp ${${_NAME}_FIND_COMPONENTS})
-      if(${_NAME}_${comp}_FOUND)
-
-        if(NOT DEFINED FOUND_COMPONENTS_MSG)
-          set(FOUND_COMPONENTS_MSG "found components:")
-        endif()
-        string(APPEND FOUND_COMPONENTS_MSG " ${comp}")
-
-      else()
-
-        if(NOT DEFINED MISSING_COMPONENTS_MSG)
-          set(MISSING_COMPONENTS_MSG "missing components:")
-        endif()
-        string(APPEND MISSING_COMPONENTS_MSG " ${comp}")
-
-        if(${_NAME}_FIND_REQUIRED_${comp})
-          set(${_NAME}_FOUND FALSE)
-          string(APPEND MISSING_VARS " ${comp}")
-        endif()
-
-      endif()
-    endforeach()
-    set(COMPONENT_MSG "${FOUND_COMPONENTS_MSG} ${MISSING_COMPONENTS_MSG}")
-    string(APPEND DETAILS "[c${COMPONENT_MSG}]")
-  endif()
-
-  # version handling:
-  set(VERSION_MSG "")
-  set(VERSION_OK TRUE)
-
-  # check with DEFINED here as the requested or found version may be "0"
-  if (DEFINED ${_NAME}_FIND_VERSION)
-    if(DEFINED ${FPHSA_VERSION_VAR})
-      set(_FOUND_VERSION ${${FPHSA_VERSION_VAR}})
-
-      if(${_NAME}_FIND_VERSION_EXACT)       # exact version required
-        # count the dots in the version string
-        string(REGEX REPLACE "[^.]" "" _VERSION_DOTS "${_FOUND_VERSION}")
-        # add one dot because there is one dot more than there are components
-        string(LENGTH "${_VERSION_DOTS}." _VERSION_DOTS)
-        if (_VERSION_DOTS GREATER ${_NAME}_FIND_VERSION_COUNT)
-          # Because of the C++ implementation of find_package() ${_NAME}_FIND_VERSION_COUNT
-          # is at most 4 here. Therefore a simple lookup table is used.
-          if (${_NAME}_FIND_VERSION_COUNT EQUAL 1)
-            set(_VERSION_REGEX "[^.]*")
-          elseif (${_NAME}_FIND_VERSION_COUNT EQUAL 2)
-            set(_VERSION_REGEX "[^.]*\\.[^.]*")
-          elseif (${_NAME}_FIND_VERSION_COUNT EQUAL 3)
-            set(_VERSION_REGEX "[^.]*\\.[^.]*\\.[^.]*")
-          else ()
-            set(_VERSION_REGEX "[^.]*\\.[^.]*\\.[^.]*\\.[^.]*")
-          endif ()
-          string(REGEX REPLACE "^(${_VERSION_REGEX})\\..*" "\\1" _VERSION_HEAD "${_FOUND_VERSION}")
-          unset(_VERSION_REGEX)
-          if (NOT ${_NAME}_FIND_VERSION VERSION_EQUAL _VERSION_HEAD)
-            set(VERSION_MSG "Found unsuitable version \"${_FOUND_VERSION}\", but required is exact version \"${${_NAME}_FIND_VERSION}\"")
-            set(VERSION_OK FALSE)
-          else ()
-            set(VERSION_MSG "(found suitable exact version \"${_FOUND_VERSION}\")")
-          endif ()
-          unset(_VERSION_HEAD)
-        else ()
-          if (NOT ${_NAME}_FIND_VERSION VERSION_EQUAL _FOUND_VERSION)
-            set(VERSION_MSG "Found unsuitable version \"${_FOUND_VERSION}\", but required is exact version \"${${_NAME}_FIND_VERSION}\"")
-            set(VERSION_OK FALSE)
-          else ()
-            set(VERSION_MSG "(found suitable exact version \"${_FOUND_VERSION}\")")
-          endif ()
-        endif ()
-        unset(_VERSION_DOTS)
-
-      else()     # minimum version specified:
-        if (${_NAME}_FIND_VERSION VERSION_GREATER _FOUND_VERSION)
-          set(VERSION_MSG "Found unsuitable version \"${_FOUND_VERSION}\", but required is at least \"${${_NAME}_FIND_VERSION}\"")
-          set(VERSION_OK FALSE)
-        else ()
-          set(VERSION_MSG "(found suitable version \"${_FOUND_VERSION}\", minimum required is \"${${_NAME}_FIND_VERSION}\")")
-        endif ()
-      endif()
-
-    else()
-
-      # if the package was not found, but a version was given, add that to the output:
-      if(${_NAME}_FIND_VERSION_EXACT)
-         set(VERSION_MSG "(Required is exact version \"${${_NAME}_FIND_VERSION}\")")
-      else()
-         set(VERSION_MSG "(Required is at least version \"${${_NAME}_FIND_VERSION}\")")
-      endif()
-
-    endif()
-  else ()
-    # Check with DEFINED as the found version may be 0.
-    if(DEFINED ${FPHSA_VERSION_VAR})
-      set(VERSION_MSG "(found version \"${${FPHSA_VERSION_VAR}}\")")
-    endif()
-  endif ()
-
-  if(VERSION_OK)
-    string(APPEND DETAILS "[v${${FPHSA_VERSION_VAR}}(${${_NAME}_FIND_VERSION})]")
-  else()
-    set(${_NAME}_FOUND FALSE)
-  endif()
-
-
-  # print the result:
-  if (${_NAME}_FOUND)
-    FIND_PACKAGE_MESSAGE(${_NAME} "Found ${_NAME}: ${${_FIRST_REQUIRED_VAR}} ${VERSION_MSG} ${COMPONENT_MSG}" "${DETAILS}")
-  else ()
-
-    if(FPHSA_CONFIG_MODE)
-      _FPHSA_HANDLE_FAILURE_CONFIG_MODE()
-    else()
-      if(NOT VERSION_OK)
-        set(RESULT_MSG)
-        if (_FIRST_REQUIRED_VAR)
-          string (APPEND RESULT_MSG "found ${${_FIRST_REQUIRED_VAR}}")
-        endif()
-        if (COMPONENT_MSG)
-          if (RESULT_MSG)
-            string (APPEND RESULT_MSG ", ")
-          endif()
-          string (APPEND RESULT_MSG "${FOUND_COMPONENTS_MSG}")
-        endif()
-        _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: ${VERSION_MSG} (${RESULT_MSG})")
-      else()
-        _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE} (missing:${MISSING_VARS}) ${VERSION_MSG}")
-      endif()
-    endif()
-
-  endif ()
-
-  set(${_NAME}_FOUND ${${_NAME}_FOUND} PARENT_SCOPE)
-  set(${_NAME_UPPER}_FOUND ${${_NAME}_FOUND} PARENT_SCOPE)
-endfunction()
diff --git a/share/cmake-3.18/Modules/FindPatch.cmake b/share/cmake-3.18/Modules/FindPatch.cmake
deleted file mode 100644
index 4998839..0000000
--- a/share/cmake-3.18/Modules/FindPatch.cmake
+++ /dev/null
@@ -1,69 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindPatch
----------
-
-The module defines the following variables:
-
-``Patch_EXECUTABLE``
-  Path to patch command-line executable.
-``Patch_FOUND``
-  True if the patch command-line executable was found.
-
-The following :prop_tgt:`IMPORTED` targets are also defined:
-
-``Patch::patch``
-  The command-line executable.
-
-Example usage:
-
-.. code-block:: cmake
-
-   find_package(Patch)
-   if(Patch_FOUND)
-     message("Patch found: ${Patch_EXECUTABLE}")
-   endif()
-#]=======================================================================]
-
-set(_doc "Patch command line executable")
-set(_patch_path )
-
-if(CMAKE_HOST_WIN32)
-  set(_patch_path
-    "$ENV{LOCALAPPDATA}/Programs/Git/bin"
-    "$ENV{LOCALAPPDATA}/Programs/Git/usr/bin"
-    "$ENV{APPDATA}/Programs/Git/bin"
-    "$ENV{APPDATA}/Programs/Git/usr/bin"
-    )
-endif()
-
-# First search the PATH
-find_program(Patch_EXECUTABLE
-  NAME patch
-  PATHS ${_patch_path}
-  DOC ${_doc}
-  )
-
-if(CMAKE_HOST_WIN32)
-  # Now look for installations in Git/ directories under typical installation
-  # prefixes on Windows.
-  find_program(Patch_EXECUTABLE
-    NAMES patch
-    PATH_SUFFIXES Git/usr/bin Git/bin GnuWin32/bin
-    DOC ${_doc}
-    )
-endif()
-
-if(Patch_EXECUTABLE AND NOT TARGET Patch::patch)
-  add_executable(Patch::patch IMPORTED)
-  set_property(TARGET Patch::patch PROPERTY IMPORTED_LOCATION ${Patch_EXECUTABLE})
-endif()
-
-unset(_patch_path)
-unset(_doc)
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-find_package_handle_standard_args(Patch
-                                  REQUIRED_VARS Patch_EXECUTABLE)
diff --git a/share/cmake-3.18/Modules/FindPerl.cmake b/share/cmake-3.18/Modules/FindPerl.cmake
deleted file mode 100644
index fd120bf..0000000
--- a/share/cmake-3.18/Modules/FindPerl.cmake
+++ /dev/null
@@ -1,80 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindPerl
---------
-
-Find perl
-
-this module looks for Perl
-
-::
-
-  PERL_EXECUTABLE     - the full path to perl
-  PERL_FOUND          - If false, don't attempt to use perl.
-  PERL_VERSION_STRING - version of perl found (since CMake 2.8.8)
-#]=======================================================================]
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindCygwin.cmake)
-
-set(PERL_POSSIBLE_BIN_PATHS
-  ${CYGWIN_INSTALL_PATH}/bin
-  )
-
-if(WIN32)
-  get_filename_component(
-    ActivePerl_CurrentVersion
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActivePerl;CurrentVersion]"
-    NAME)
-  set(PERL_POSSIBLE_BIN_PATHS ${PERL_POSSIBLE_BIN_PATHS}
-    "C:/Perl/bin"
-    "C:/Strawberry/perl/bin"
-    [HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActivePerl\\${ActivePerl_CurrentVersion}]/bin
-    )
-endif()
-
-find_program(PERL_EXECUTABLE
-  NAMES perl
-  PATHS ${PERL_POSSIBLE_BIN_PATHS}
-  )
-
-if(PERL_EXECUTABLE)
-  ### PERL_VERSION
-  execute_process(
-    COMMAND
-      ${PERL_EXECUTABLE} -V:version
-      OUTPUT_VARIABLE
-        PERL_VERSION_OUTPUT_VARIABLE
-      RESULT_VARIABLE
-        PERL_VERSION_RESULT_VARIABLE
-      ERROR_QUIET
-      OUTPUT_STRIP_TRAILING_WHITESPACE
-  )
-  if(NOT PERL_VERSION_RESULT_VARIABLE AND NOT PERL_VERSION_OUTPUT_VARIABLE MATCHES "^version='UNKNOWN'")
-    string(REGEX REPLACE "version='([^']+)'.*" "\\1" PERL_VERSION_STRING ${PERL_VERSION_OUTPUT_VARIABLE})
-  else()
-    execute_process(
-      COMMAND ${PERL_EXECUTABLE} -v
-      OUTPUT_VARIABLE PERL_VERSION_OUTPUT_VARIABLE
-      RESULT_VARIABLE PERL_VERSION_RESULT_VARIABLE
-      ERROR_QUIET
-      OUTPUT_STRIP_TRAILING_WHITESPACE
-    )
-    if(NOT PERL_VERSION_RESULT_VARIABLE AND PERL_VERSION_OUTPUT_VARIABLE MATCHES "This is perl.*[ \\(]v([0-9\\._]+)[ \\)]")
-      set(PERL_VERSION_STRING "${CMAKE_MATCH_1}")
-    elseif(NOT PERL_VERSION_RESULT_VARIABLE AND PERL_VERSION_OUTPUT_VARIABLE MATCHES "This is perl, version ([0-9\\._]+) +")
-      set(PERL_VERSION_STRING "${CMAKE_MATCH_1}")
-    endif()
-  endif()
-endif()
-
-# Deprecated settings for compatibility with CMake1.4
-set(PERL ${PERL_EXECUTABLE})
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(Perl
-                                  REQUIRED_VARS PERL_EXECUTABLE
-                                  VERSION_VAR PERL_VERSION_STRING)
-
-mark_as_advanced(PERL_EXECUTABLE)
diff --git a/share/cmake-3.18/Modules/FindPerlLibs.cmake b/share/cmake-3.18/Modules/FindPerlLibs.cmake
deleted file mode 100644
index 7e27f31..0000000
--- a/share/cmake-3.18/Modules/FindPerlLibs.cmake
+++ /dev/null
@@ -1,159 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindPerlLibs
-------------
-
-Find Perl libraries
-
-This module finds if PERL is installed and determines where the
-include files and libraries are.  It also determines what the name of
-the library is.  This code sets the following variables:
-
-::
-
-  PERLLIBS_FOUND    = True if perl.h & libperl were found
-  PERL_INCLUDE_PATH = path to where perl.h is found
-  PERL_LIBRARY      = path to libperl
-  PERL_EXECUTABLE   = full path to the perl binary
-
-
-
-The minimum required version of Perl can be specified using the
-standard syntax, e.g.  find_package(PerlLibs 6.0)
-
-::
-
-  The following variables are also available if needed
-  (introduced after CMake 2.6.4)
-
-
-
-::
-
-  PERL_SITESEARCH     = path to the sitesearch install dir (-V:installsitesearch)
-  PERL_SITEARCH       = path to the sitelib install directory (-V:installsitearch)
-  PERL_SITELIB        = path to the sitelib install directory (-V:installsitelib)
-  PERL_VENDORARCH     = path to the vendor arch install directory (-V:installvendorarch)
-  PERL_VENDORLIB      = path to the vendor lib install directory (-V:installvendorlib)
-  PERL_ARCHLIB        = path to the core arch lib install directory (-V:archlib)
-  PERL_PRIVLIB        = path to the core priv lib install directory (-V:privlib)
-  PERL_UPDATE_ARCHLIB = path to the update arch lib install directory (-V:installarchlib)
-  PERL_UPDATE_PRIVLIB = path to the update priv lib install directory (-V:installprivlib)
-  PERL_EXTRA_C_FLAGS = Compilation flags used to build perl
-#]=======================================================================]
-
-# find the perl executable
-include(${CMAKE_CURRENT_LIST_DIR}/FindPerl.cmake)
-
-if (PERL_EXECUTABLE)
-
-  function (perl_get_info _pgi_info tag)
-    cmake_parse_arguments(_PGI "IS_PATH" "" "" ${ARGN})
-
-    set (${_pgi_info} NOTFOUND PARENT_SCOPE)
-
-    execute_process(COMMAND "${PERL_EXECUTABLE}" -V:${tag}
-      OUTPUT_VARIABLE result
-      RESULT_VARIABLE status)
-
-    if (NOT status)
-      string(REGEX REPLACE "${tag}='([^']*)'.*" "\\1" result "${result}")
-      if (_PGI_IS_PATH)
-        file(TO_CMAKE_PATH "${result}" result)
-      endif()
-      set (${_pgi_info} "${result}" PARENT_SCOPE)
-    endif ()
-  endfunction()
-
-  ### PERL_PREFIX
-  perl_get_info(PERL_PREFIX prefix IS_PATH)
-
-  ### PERL_ARCHNAME
-  perl_get_info(PERL_ARCHNAME archname)
-
-  ### PERL_EXTRA_C_FLAGS
-  perl_get_info(PERL_EXTRA_C_FLAGS cppflags)
-
-  ### PERL_SITESEARCH
-  perl_get_info(PERL_SITESEARCH installsitesearch IS_PATH)
-
-  ### PERL_SITEARCH
-  perl_get_info(PERL_SITEARCH installsitearch IS_PATH)
-
-  ### PERL_SITELIB
-  perl_get_info(PERL_SITELIB installsitelib IS_PATH)
-
-  ### PERL_VENDORARCH
-  perl_get_info(PERL_VENDORARCH installvendorarch IS_PATH)
-
-  ### PERL_VENDORLIB
-  perl_get_info(PERL_VENDORLIB installvendorlib IS_PATH)
-
-  ### PERL_ARCHLIB
-  perl_get_info(PERL_ARCHLIB archlib IS_PATH)
-
-  ### PERL_PRIVLIB
-  perl_get_info(PERL_PRIVLIB privlib IS_PATH)
-
-  ### PERL_UPDATE_ARCHLIB
-  perl_get_info(PERL_UPDATE_ARCHLIB installarchlib IS_PATH)
-
-  ### PERL_UPDATE_PRIVLIB
-  perl_get_info(PERL_UPDATE_PRIVLIB installprivlib IS_PATH)
-
-  ### PERL_POSSIBLE_LIBRARY_NAMES
-  perl_get_info(PERL_POSSIBLE_LIBRARY_NAMES libperl)
-  if (NOT PERL_POSSIBLE_LIBRARY_NAMES)
-    set(PERL_POSSIBLE_LIBRARY_NAMES perl${PERL_VERSION_STRING} perl)
-  endif()
-  if (CMAKE_SYSTEM_NAME MATCHES "MSYS|CYGWIN")
-    # on MSYS and CYGWIN environments, current perl -V:libperl gives shared library name
-    # rather than the import library. So, extends possible library names
-    list (APPEND PERL_POSSIBLE_LIBRARY_NAMES perl)
-  endif()
-
-  ### PERL_INCLUDE_PATH
-  find_path(PERL_INCLUDE_PATH
-    NAMES
-      perl.h
-    PATHS
-      "${PERL_UPDATE_ARCHLIB}/CORE"
-      "${PERL_ARCHLIB}/CORE"
-      /usr/lib/perl5/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
-      /usr/lib/perl/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
-      /usr/lib/perl5/${PERL_VERSION_STRING}/CORE
-      /usr/lib/perl/${PERL_VERSION_STRING}/CORE
-  )
-
-  ### PERL_LIBRARY
-  find_library(PERL_LIBRARY
-    NAMES
-      ${PERL_POSSIBLE_LIBRARY_NAMES}
-    PATHS
-      "${PERL_UPDATE_ARCHLIB}/CORE"
-      "${PERL_ARCHLIB}/CORE"
-      /usr/lib/perl5/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
-      /usr/lib/perl/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
-      /usr/lib/perl5/${PERL_VERSION_STRING}/CORE
-      /usr/lib/perl/${PERL_VERSION_STRING}/CORE
-  )
-
-endif ()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-find_package_handle_standard_args(PerlLibs REQUIRED_VARS PERL_LIBRARY PERL_INCLUDE_PATH
-                                           VERSION_VAR PERL_VERSION_STRING)
-
-# Introduced after CMake 2.6.4 to bring module into compliance
-set(PERL_INCLUDE_DIR  ${PERL_INCLUDE_PATH})
-set(PERL_INCLUDE_DIRS ${PERL_INCLUDE_PATH})
-set(PERL_LIBRARIES    ${PERL_LIBRARY})
-# For backward compatibility with CMake before 2.8.8
-set(PERL_VERSION ${PERL_VERSION_STRING})
-
-mark_as_advanced(
-  PERL_INCLUDE_PATH
-  PERL_LIBRARY
-)
diff --git a/share/cmake-3.18/Modules/FindPkgConfig.cmake b/share/cmake-3.18/Modules/FindPkgConfig.cmake
deleted file mode 100644
index 93827d8..0000000
--- a/share/cmake-3.18/Modules/FindPkgConfig.cmake
+++ /dev/null
@@ -1,864 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[========================================[.rst:
-FindPkgConfig
--------------
-
-A ``pkg-config`` module for CMake.
-
-Finds the ``pkg-config`` executable and adds the :command:`pkg_get_variable`,
-:command:`pkg_check_modules` and :command:`pkg_search_module` commands. The
-following variables will also be set:
-
-``PKG_CONFIG_FOUND``
-  if pkg-config executable was found
-``PKG_CONFIG_EXECUTABLE``
-  pathname of the pkg-config program
-``PKG_CONFIG_VERSION_STRING``
-  version of pkg-config (since CMake 2.8.8)
-
-#]========================================]
-
-cmake_policy(PUSH)
-cmake_policy(SET CMP0054 NEW) # if() quoted variables not dereferenced
-cmake_policy(SET CMP0057 NEW) # if IN_LIST
-
-### Common stuff ####
-set(PKG_CONFIG_VERSION 1)
-
-# find pkg-config, use PKG_CONFIG if set
-if((NOT PKG_CONFIG_EXECUTABLE) AND (NOT "$ENV{PKG_CONFIG}" STREQUAL ""))
-  set(PKG_CONFIG_EXECUTABLE "$ENV{PKG_CONFIG}" CACHE FILEPATH "pkg-config executable")
-endif()
-find_program(PKG_CONFIG_EXECUTABLE NAMES pkg-config DOC "pkg-config executable")
-mark_as_advanced(PKG_CONFIG_EXECUTABLE)
-
-set(_PKG_CONFIG_FAILURE_MESSAGE "")
-if (PKG_CONFIG_EXECUTABLE)
-  execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --version
-    OUTPUT_VARIABLE PKG_CONFIG_VERSION_STRING OUTPUT_STRIP_TRAILING_WHITESPACE
-    ERROR_VARIABLE _PKG_CONFIG_VERSION_ERROR ERROR_STRIP_TRAILING_WHITESPACE
-    RESULT_VARIABLE _PKG_CONFIG_VERSION_RESULT
-    )
-
-  if (NOT _PKG_CONFIG_VERSION_RESULT EQUAL 0)
-    string(REPLACE "\n" "\n    " _PKG_CONFIG_VERSION_ERROR "      ${_PKG_CONFIG_VERSION_ERROR}")
-    string(APPEND _PKG_CONFIG_FAILURE_MESSAGE
-      "The command\n"
-      "      \"${PKG_CONFIG_EXECUTABLE}\" --version\n"
-      "    failed with output\n${_PKG_CONFIG_VERSION_ERROR}"
-      )
-    set(PKG_CONFIG_EXECUTABLE "")
-    unset(PKG_CONFIG_VERSION_STRING)
-  endif ()
-  unset(_PKG_CONFIG_VERSION_RESULT)
-endif ()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-find_package_handle_standard_args(PkgConfig
-                                  REQUIRED_VARS PKG_CONFIG_EXECUTABLE
-                                  REASON_FAILURE_MESSAGE "${_PKG_CONFIG_FAILURE_MESSAGE}"
-                                  VERSION_VAR PKG_CONFIG_VERSION_STRING)
-
-# This is needed because the module name is "PkgConfig" but the name of
-# this variable has always been PKG_CONFIG_FOUND so this isn't automatically
-# handled by FPHSA.
-set(PKG_CONFIG_FOUND "${PKGCONFIG_FOUND}")
-
-# Unsets the given variables
-macro(_pkgconfig_unset var)
-  set(${var} "" CACHE INTERNAL "")
-endmacro()
-
-macro(_pkgconfig_set var value)
-  set(${var} ${value} CACHE INTERNAL "")
-endmacro()
-
-# Invokes pkgconfig, cleans up the result and sets variables
-macro(_pkgconfig_invoke _pkglist _prefix _varname _regexp)
-  set(_pkgconfig_invoke_result)
-
-  execute_process(
-    COMMAND ${PKG_CONFIG_EXECUTABLE} ${ARGN} ${_pkglist}
-    OUTPUT_VARIABLE _pkgconfig_invoke_result
-    RESULT_VARIABLE _pkgconfig_failed
-    OUTPUT_STRIP_TRAILING_WHITESPACE)
-
-  if (_pkgconfig_failed)
-    set(_pkgconfig_${_varname} "")
-    _pkgconfig_unset(${_prefix}_${_varname})
-  else()
-    string(REGEX REPLACE "[\r\n]"       " " _pkgconfig_invoke_result "${_pkgconfig_invoke_result}")
-
-    if (NOT ${_regexp} STREQUAL "")
-      string(REGEX REPLACE "${_regexp}" " " _pkgconfig_invoke_result "${_pkgconfig_invoke_result}")
-    endif()
-
-    separate_arguments(_pkgconfig_invoke_result)
-
-    #message(STATUS "  ${_varname} ... ${_pkgconfig_invoke_result}")
-    set(_pkgconfig_${_varname} ${_pkgconfig_invoke_result})
-    _pkgconfig_set(${_prefix}_${_varname} "${_pkgconfig_invoke_result}")
-  endif()
-endmacro()
-
-# Internal version of pkg_get_variable; expects PKG_CONFIG_PATH to already be set
-function (_pkg_get_variable result pkg variable)
-  _pkgconfig_invoke("${pkg}" "prefix" "result" "" "--variable=${variable}")
-  set("${result}"
-    "${prefix_result}"
-    PARENT_SCOPE)
-endfunction ()
-
-# Invokes pkgconfig two times; once without '--static' and once with
-# '--static'
-macro(_pkgconfig_invoke_dyn _pkglist _prefix _varname cleanup_regexp)
-  _pkgconfig_invoke("${_pkglist}" ${_prefix}        ${_varname} "${cleanup_regexp}" ${ARGN})
-  _pkgconfig_invoke("${_pkglist}" ${_prefix} STATIC_${_varname} "${cleanup_regexp}" --static  ${ARGN})
-endmacro()
-
-# Splits given arguments into options and a package list
-macro(_pkgconfig_parse_options _result _is_req _is_silent _no_cmake_path _no_cmake_environment_path _imp_target _imp_target_global)
-  set(${_is_req} 0)
-  set(${_is_silent} 0)
-  set(${_no_cmake_path} 0)
-  set(${_no_cmake_environment_path} 0)
-  set(${_imp_target} 0)
-  set(${_imp_target_global} 0)
-  if(DEFINED PKG_CONFIG_USE_CMAKE_PREFIX_PATH)
-    if(NOT PKG_CONFIG_USE_CMAKE_PREFIX_PATH)
-      set(${_no_cmake_path} 1)
-      set(${_no_cmake_environment_path} 1)
-    endif()
-  elseif(CMAKE_MINIMUM_REQUIRED_VERSION VERSION_LESS 3.1)
-    set(${_no_cmake_path} 1)
-    set(${_no_cmake_environment_path} 1)
-  endif()
-
-  foreach(_pkg ${ARGN})
-    if (_pkg STREQUAL "REQUIRED")
-      set(${_is_req} 1)
-    endif ()
-    if (_pkg STREQUAL "QUIET")
-      set(${_is_silent} 1)
-    endif ()
-    if (_pkg STREQUAL "NO_CMAKE_PATH")
-      set(${_no_cmake_path} 1)
-    endif()
-    if (_pkg STREQUAL "NO_CMAKE_ENVIRONMENT_PATH")
-      set(${_no_cmake_environment_path} 1)
-    endif()
-    if (_pkg STREQUAL "IMPORTED_TARGET")
-      set(${_imp_target} 1)
-    endif()
-    if (_pkg STREQUAL "GLOBAL")
-      set(${_imp_target_global} 1)
-    endif()
-  endforeach()
-
-  if (${_imp_target_global} AND NOT ${_imp_target})
-    message(SEND_ERROR "the argument GLOBAL may only be used together with IMPORTED_TARGET")
-  endif()
-
-  set(${_result} ${ARGN})
-  list(REMOVE_ITEM ${_result} "REQUIRED")
-  list(REMOVE_ITEM ${_result} "QUIET")
-  list(REMOVE_ITEM ${_result} "NO_CMAKE_PATH")
-  list(REMOVE_ITEM ${_result} "NO_CMAKE_ENVIRONMENT_PATH")
-  list(REMOVE_ITEM ${_result} "IMPORTED_TARGET")
-  list(REMOVE_ITEM ${_result} "GLOBAL")
-endmacro()
-
-# Add the content of a variable or an environment variable to a list of
-# paths
-# Usage:
-#  - _pkgconfig_add_extra_path(_extra_paths VAR)
-#  - _pkgconfig_add_extra_path(_extra_paths ENV VAR)
-function(_pkgconfig_add_extra_path _extra_paths_var _var)
-  set(_is_env 0)
-  if(ARGC GREATER 2 AND _var STREQUAL "ENV")
-    set(_var ${ARGV2})
-    set(_is_env 1)
-  endif()
-  if(NOT _is_env)
-    if(NOT "${${_var}}" STREQUAL "")
-      list(APPEND ${_extra_paths_var} ${${_var}})
-    endif()
-  else()
-    if(NOT "$ENV{${_var}}" STREQUAL "")
-      file(TO_CMAKE_PATH "$ENV{${_var}}" _path)
-      list(APPEND ${_extra_paths_var} ${_path})
-      unset(_path)
-    endif()
-  endif()
-  set(${_extra_paths_var} ${${_extra_paths_var}} PARENT_SCOPE)
-endfunction()
-
-# scan the LDFLAGS returned by pkg-config for library directories and
-# libraries, figure out the absolute paths of that libraries in the
-# given directories
-function(_pkg_find_libs _prefix _no_cmake_path _no_cmake_environment_path)
-  unset(_libs)
-  unset(_find_opts)
-
-  # set the options that are used as long as the .pc file does not provide a library
-  # path to look into
-  if(_no_cmake_path)
-    list(APPEND _find_opts "NO_CMAKE_PATH")
-  endif()
-  if(_no_cmake_environment_path)
-    list(APPEND _find_opts "NO_CMAKE_ENVIRONMENT_PATH")
-  endif()
-
-  unset(_search_paths)
-  unset(_next_is_framework)
-  foreach (flag IN LISTS ${_prefix}_LDFLAGS)
-    if (_next_is_framework)
-      list(APPEND _libs "-framework ${flag}")
-      unset(_next_is_framework)
-      continue()
-    endif ()
-    if (flag MATCHES "^-L(.*)")
-      list(APPEND _search_paths ${CMAKE_MATCH_1})
-      continue()
-    endif()
-    if (flag MATCHES "^-l(.*)")
-      set(_pkg_search "${CMAKE_MATCH_1}")
-    else()
-      if (flag STREQUAL "-framework")
-        set(_next_is_framework TRUE)
-      endif ()
-      continue()
-    endif()
-
-    if(_search_paths)
-        # Firstly search in -L paths
-        find_library(pkgcfg_lib_${_prefix}_${_pkg_search}
-                     NAMES ${_pkg_search}
-                     HINTS ${_search_paths} NO_DEFAULT_PATH)
-    endif()
-    find_library(pkgcfg_lib_${_prefix}_${_pkg_search}
-                 NAMES ${_pkg_search}
-                 ${_find_opts})
-    mark_as_advanced(pkgcfg_lib_${_prefix}_${_pkg_search})
-    if(pkgcfg_lib_${_prefix}_${_pkg_search})
-      list(APPEND _libs "${pkgcfg_lib_${_prefix}_${_pkg_search}}")
-    else()
-      list(APPEND _libs ${_pkg_search})
-    endif()
-  endforeach()
-
-  set(${_prefix}_LINK_LIBRARIES "${_libs}" PARENT_SCOPE)
-endfunction()
-
-# create an imported target from all the information returned by pkg-config
-function(_pkg_create_imp_target _prefix _imp_target_global)
-  # only create the target if it is linkable, i.e. no executables
-  if (NOT TARGET PkgConfig::${_prefix}
-      AND ( ${_prefix}_INCLUDE_DIRS OR ${_prefix}_LINK_LIBRARIES OR ${_prefix}_LDFLAGS_OTHER OR ${_prefix}_CFLAGS_OTHER ))
-    if(${_imp_target_global})
-      set(_global_opt "GLOBAL")
-    else()
-      unset(_global_opt)
-    endif()
-    add_library(PkgConfig::${_prefix} INTERFACE IMPORTED ${_global_opt})
-
-    if(${_prefix}_INCLUDE_DIRS)
-      set_property(TARGET PkgConfig::${_prefix} PROPERTY
-                   INTERFACE_INCLUDE_DIRECTORIES "${${_prefix}_INCLUDE_DIRS}")
-    endif()
-    if(${_prefix}_LINK_LIBRARIES)
-      set_property(TARGET PkgConfig::${_prefix} PROPERTY
-                   INTERFACE_LINK_LIBRARIES "${${_prefix}_LINK_LIBRARIES}")
-    endif()
-    if(${_prefix}_LDFLAGS_OTHER)
-      set_property(TARGET PkgConfig::${_prefix} PROPERTY
-                   INTERFACE_LINK_OPTIONS "${${_prefix}_LDFLAGS_OTHER}")
-    endif()
-    if(${_prefix}_CFLAGS_OTHER)
-      set_property(TARGET PkgConfig::${_prefix} PROPERTY
-                   INTERFACE_COMPILE_OPTIONS "${${_prefix}_CFLAGS_OTHER}")
-    endif()
-  endif()
-endfunction()
-
-# recalculate the dynamic output
-# this is a macro and not a function so the result of _pkg_find_libs is automatically propagated
-macro(_pkg_recalculate _prefix _no_cmake_path _no_cmake_environment_path _imp_target _imp_target_global)
-  _pkg_find_libs(${_prefix} ${_no_cmake_path} ${_no_cmake_environment_path})
-  if(${_imp_target})
-    _pkg_create_imp_target(${_prefix} ${_imp_target_global})
-  endif()
-endmacro()
-
-###
-macro(_pkg_set_path_internal)
-  set(_extra_paths)
-
-  if(NOT _no_cmake_path)
-    _pkgconfig_add_extra_path(_extra_paths CMAKE_PREFIX_PATH)
-    _pkgconfig_add_extra_path(_extra_paths CMAKE_FRAMEWORK_PATH)
-    _pkgconfig_add_extra_path(_extra_paths CMAKE_APPBUNDLE_PATH)
-  endif()
-
-  if(NOT _no_cmake_environment_path)
-    _pkgconfig_add_extra_path(_extra_paths ENV CMAKE_PREFIX_PATH)
-    _pkgconfig_add_extra_path(_extra_paths ENV CMAKE_FRAMEWORK_PATH)
-    _pkgconfig_add_extra_path(_extra_paths ENV CMAKE_APPBUNDLE_PATH)
-  endif()
-
-  if(NOT _extra_paths STREQUAL "")
-    # Save the PKG_CONFIG_PATH environment variable, and add paths
-    # from the CMAKE_PREFIX_PATH variables
-    set(_pkgconfig_path_old "$ENV{PKG_CONFIG_PATH}")
-    set(_pkgconfig_path "${_pkgconfig_path_old}")
-    if(NOT _pkgconfig_path STREQUAL "")
-      file(TO_CMAKE_PATH "${_pkgconfig_path}" _pkgconfig_path)
-    endif()
-
-    # Create a list of the possible pkgconfig subfolder (depending on
-    # the system
-    set(_lib_dirs)
-    if(NOT DEFINED CMAKE_SYSTEM_NAME
-        OR (CMAKE_SYSTEM_NAME MATCHES "^(Linux|kFreeBSD|GNU)$"
-            AND NOT CMAKE_CROSSCOMPILING))
-      if(EXISTS "/etc/debian_version") # is this a debian system ?
-        if(CMAKE_LIBRARY_ARCHITECTURE)
-          list(APPEND _lib_dirs "lib/${CMAKE_LIBRARY_ARCHITECTURE}/pkgconfig")
-        endif()
-      else()
-        # not debian, check the FIND_LIBRARY_USE_LIB32_PATHS and FIND_LIBRARY_USE_LIB64_PATHS properties
-        get_property(uselib32 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB32_PATHS)
-        if(uselib32 AND CMAKE_SIZEOF_VOID_P EQUAL 4)
-          list(APPEND _lib_dirs "lib32/pkgconfig")
-        endif()
-        get_property(uselib64 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS)
-        if(uselib64 AND CMAKE_SIZEOF_VOID_P EQUAL 8)
-          list(APPEND _lib_dirs "lib64/pkgconfig")
-        endif()
-        get_property(uselibx32 GLOBAL PROPERTY FIND_LIBRARY_USE_LIBX32_PATHS)
-        if(uselibx32 AND CMAKE_INTERNAL_PLATFORM_ABI STREQUAL "ELF X32")
-          list(APPEND _lib_dirs "libx32/pkgconfig")
-        endif()
-      endif()
-    endif()
-    if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" AND NOT CMAKE_CROSSCOMPILING)
-      list(APPEND _lib_dirs "libdata/pkgconfig")
-    endif()
-    list(APPEND _lib_dirs "lib/pkgconfig")
-    list(APPEND _lib_dirs "share/pkgconfig")
-
-    # Check if directories exist and eventually append them to the
-    # pkgconfig path list
-    foreach(_prefix_dir ${_extra_paths})
-      foreach(_lib_dir ${_lib_dirs})
-        if(EXISTS "${_prefix_dir}/${_lib_dir}")
-          list(APPEND _pkgconfig_path "${_prefix_dir}/${_lib_dir}")
-          list(REMOVE_DUPLICATES _pkgconfig_path)
-        endif()
-      endforeach()
-    endforeach()
-
-    # Prepare and set the environment variable
-    if(NOT _pkgconfig_path STREQUAL "")
-      # remove empty values from the list
-      list(REMOVE_ITEM _pkgconfig_path "")
-      file(TO_NATIVE_PATH "${_pkgconfig_path}" _pkgconfig_path)
-      if(CMAKE_HOST_UNIX)
-        string(REPLACE ";" ":" _pkgconfig_path "${_pkgconfig_path}")
-        string(REPLACE "\\ " " " _pkgconfig_path "${_pkgconfig_path}")
-      endif()
-      set(ENV{PKG_CONFIG_PATH} "${_pkgconfig_path}")
-    endif()
-
-    # Unset variables
-    unset(_lib_dirs)
-    unset(_pkgconfig_path)
-  endif()
-endmacro()
-
-macro(_pkg_restore_path_internal)
-  if(NOT _extra_paths STREQUAL "")
-    # Restore the environment variable
-    set(ENV{PKG_CONFIG_PATH} "${_pkgconfig_path_old}")
-  endif()
-
-  unset(_extra_paths)
-  unset(_pkgconfig_path_old)
-endmacro()
-
-# pkg-config returns frameworks in --libs-only-other
-# they need to be in ${_prefix}_LIBRARIES so "-framework a -framework b" does
-# not incorrectly be combined to "-framework a b"
-function(_pkgconfig_extract_frameworks _prefix)
-  set(ldflags "${${_prefix}_LDFLAGS_OTHER}")
-  list(FIND ldflags "-framework" FR_POS)
-  list(LENGTH ldflags LD_LENGTH)
-
-  # reduce length by 1 as we need "-framework" and the next entry
-  math(EXPR LD_LENGTH "${LD_LENGTH} - 1")
-  while (FR_POS GREATER -1 AND LD_LENGTH GREATER FR_POS)
-    list(REMOVE_AT ldflags ${FR_POS})
-    list(GET ldflags ${FR_POS} HEAD)
-    list(REMOVE_AT ldflags ${FR_POS})
-    math(EXPR LD_LENGTH "${LD_LENGTH} - 2")
-
-    list(APPEND LIBS "-framework ${HEAD}")
-
-    list(FIND ldflags "-framework" FR_POS)
-  endwhile ()
-  set(${_prefix}_LIBRARIES ${${_prefix}_LIBRARIES} ${LIBS} PARENT_SCOPE)
-  set(${_prefix}_LDFLAGS_OTHER "${ldflags}" PARENT_SCOPE)
-endfunction()
-
-# pkg-config returns -isystem include directories in --cflags-only-other,
-# depending on the version and if there is a space between -isystem and
-# the actual path
-function(_pkgconfig_extract_isystem _prefix)
-  set(cflags "${${_prefix}_CFLAGS_OTHER}")
-  set(outflags "")
-  set(incdirs "${${_prefix}_INCLUDE_DIRS}")
-
-  set(next_is_isystem FALSE)
-  foreach (THING IN LISTS cflags)
-    # This may filter "-isystem -isystem". That would not work anyway,
-    # so let it happen.
-    if (THING STREQUAL "-isystem")
-      set(next_is_isystem TRUE)
-      continue()
-    endif ()
-    if (next_is_isystem)
-      set(next_is_isystem FALSE)
-      list(APPEND incdirs "${THING}")
-    elseif (THING MATCHES "^-isystem")
-      string(SUBSTRING "${THING}" 8 -1 THING)
-      list(APPEND incdirs "${THING}")
-    else ()
-      list(APPEND outflags "${THING}")
-    endif ()
-  endforeach ()
-  set(${_prefix}_CFLAGS_OTHER "${outflags}" PARENT_SCOPE)
-  set(${_prefix}_INCLUDE_DIRS "${incdirs}" PARENT_SCOPE)
-endfunction()
-
-###
-macro(_pkg_check_modules_internal _is_required _is_silent _no_cmake_path _no_cmake_environment_path _imp_target _imp_target_global _prefix)
-  _pkgconfig_unset(${_prefix}_FOUND)
-  _pkgconfig_unset(${_prefix}_VERSION)
-  _pkgconfig_unset(${_prefix}_PREFIX)
-  _pkgconfig_unset(${_prefix}_INCLUDEDIR)
-  _pkgconfig_unset(${_prefix}_LIBDIR)
-  _pkgconfig_unset(${_prefix}_MODULE_NAME)
-  _pkgconfig_unset(${_prefix}_LIBS)
-  _pkgconfig_unset(${_prefix}_LIBS_L)
-  _pkgconfig_unset(${_prefix}_LIBS_PATHS)
-  _pkgconfig_unset(${_prefix}_LIBS_OTHER)
-  _pkgconfig_unset(${_prefix}_CFLAGS)
-  _pkgconfig_unset(${_prefix}_CFLAGS_I)
-  _pkgconfig_unset(${_prefix}_CFLAGS_OTHER)
-  _pkgconfig_unset(${_prefix}_STATIC_LIBDIR)
-  _pkgconfig_unset(${_prefix}_STATIC_LIBS)
-  _pkgconfig_unset(${_prefix}_STATIC_LIBS_L)
-  _pkgconfig_unset(${_prefix}_STATIC_LIBS_PATHS)
-  _pkgconfig_unset(${_prefix}_STATIC_LIBS_OTHER)
-  _pkgconfig_unset(${_prefix}_STATIC_CFLAGS)
-  _pkgconfig_unset(${_prefix}_STATIC_CFLAGS_I)
-  _pkgconfig_unset(${_prefix}_STATIC_CFLAGS_OTHER)
-
-  # create a better addressable variable of the modules and calculate its size
-  set(_pkg_check_modules_list ${ARGN})
-  list(LENGTH _pkg_check_modules_list _pkg_check_modules_cnt)
-
-  if(PKG_CONFIG_EXECUTABLE)
-    # give out status message telling checked module
-    if (NOT ${_is_silent})
-      if (_pkg_check_modules_cnt EQUAL 1)
-        message(STATUS "Checking for module '${_pkg_check_modules_list}'")
-      else()
-        message(STATUS "Checking for modules '${_pkg_check_modules_list}'")
-      endif()
-    endif()
-
-    set(_pkg_check_modules_packages)
-    set(_pkg_check_modules_failed)
-
-    _pkg_set_path_internal()
-
-    # iterate through module list and check whether they exist and match the required version
-    foreach (_pkg_check_modules_pkg ${_pkg_check_modules_list})
-      set(_pkg_check_modules_exist_query)
-
-      # check whether version is given
-      if (_pkg_check_modules_pkg MATCHES "(.*[^><])(=|[><]=?)(.*)")
-        set(_pkg_check_modules_pkg_name "${CMAKE_MATCH_1}")
-        set(_pkg_check_modules_pkg_op "${CMAKE_MATCH_2}")
-        set(_pkg_check_modules_pkg_ver "${CMAKE_MATCH_3}")
-      else()
-        set(_pkg_check_modules_pkg_name "${_pkg_check_modules_pkg}")
-        set(_pkg_check_modules_pkg_op)
-        set(_pkg_check_modules_pkg_ver)
-      endif()
-
-      _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_VERSION)
-      _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_PREFIX)
-      _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_INCLUDEDIR)
-      _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_LIBDIR)
-
-      list(APPEND _pkg_check_modules_packages    "${_pkg_check_modules_pkg_name}")
-
-      # create the final query which is of the format:
-      # * <pkg-name> > <version>
-      # * <pkg-name> >= <version>
-      # * <pkg-name> = <version>
-      # * <pkg-name> <= <version>
-      # * <pkg-name> < <version>
-      # * --exists <pkg-name>
-      list(APPEND _pkg_check_modules_exist_query --print-errors --short-errors)
-      if (_pkg_check_modules_pkg_op)
-        list(APPEND _pkg_check_modules_exist_query "${_pkg_check_modules_pkg_name} ${_pkg_check_modules_pkg_op} ${_pkg_check_modules_pkg_ver}")
-      else()
-        list(APPEND _pkg_check_modules_exist_query --exists)
-        list(APPEND _pkg_check_modules_exist_query "${_pkg_check_modules_pkg_name}")
-      endif()
-
-      # execute the query
-      execute_process(
-        COMMAND ${PKG_CONFIG_EXECUTABLE} ${_pkg_check_modules_exist_query}
-        RESULT_VARIABLE _pkgconfig_retval
-        ERROR_VARIABLE _pkgconfig_error
-        ERROR_STRIP_TRAILING_WHITESPACE)
-
-      # evaluate result and tell failures
-      if (_pkgconfig_retval)
-        if(NOT ${_is_silent})
-          message(STATUS "  ${_pkgconfig_error}")
-        endif()
-
-        set(_pkg_check_modules_failed 1)
-      endif()
-    endforeach()
-
-    if(_pkg_check_modules_failed)
-      # fail when requested
-      if (${_is_required})
-        message(FATAL_ERROR "A required package was not found")
-      endif ()
-    else()
-      # when we are here, we checked whether requested modules
-      # exist. Now, go through them and set variables
-
-      _pkgconfig_set(${_prefix}_FOUND 1)
-      list(LENGTH _pkg_check_modules_packages pkg_count)
-
-      # iterate through all modules again and set individual variables
-      foreach (_pkg_check_modules_pkg ${_pkg_check_modules_packages})
-        # handle case when there is only one package required
-        if (pkg_count EQUAL 1)
-          set(_pkg_check_prefix "${_prefix}")
-        else()
-          set(_pkg_check_prefix "${_prefix}_${_pkg_check_modules_pkg}")
-        endif()
-
-        _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" VERSION    ""   --modversion )
-        pkg_get_variable("${_pkg_check_prefix}_PREFIX" ${_pkg_check_modules_pkg} "prefix")
-        pkg_get_variable("${_pkg_check_prefix}_INCLUDEDIR" ${_pkg_check_modules_pkg} "includedir")
-        pkg_get_variable("${_pkg_check_prefix}_LIBDIR" ${_pkg_check_modules_pkg} "libdir")
-        foreach (variable IN ITEMS PREFIX INCLUDEDIR LIBDIR)
-          _pkgconfig_set("${_pkg_check_prefix}_${variable}" "${${_pkg_check_prefix}_${variable}}")
-        endforeach ()
-          _pkgconfig_set("${_pkg_check_prefix}_MODULE_NAME" "${_pkg_check_modules_pkg}")
-
-        if (NOT ${_is_silent})
-          message(STATUS "  Found ${_pkg_check_modules_pkg}, version ${_pkgconfig_VERSION}")
-        endif ()
-      endforeach()
-
-      # set variables which are combined for multiple modules
-      _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LIBRARIES     "(^| )-l"             --libs-only-l )
-      _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LIBRARY_DIRS  "(^| )-L"             --libs-only-L )
-      _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LDFLAGS       ""                    --libs )
-      _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LDFLAGS_OTHER ""                    --libs-only-other )
-
-      if (APPLE AND "-framework" IN_LIST ${_prefix}_LDFLAGS_OTHER)
-        _pkgconfig_extract_frameworks("${_prefix}")
-      endif()
-
-      _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" INCLUDE_DIRS  "(^| )(-I|-isystem ?)" --cflags-only-I )
-      _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" CFLAGS        ""                    --cflags )
-      _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" CFLAGS_OTHER  ""                    --cflags-only-other )
-
-      if (${_prefix}_CFLAGS_OTHER MATCHES "-isystem")
-        _pkgconfig_extract_isystem("${_prefix}")
-      endif ()
-
-      _pkg_recalculate("${_prefix}" ${_no_cmake_path} ${_no_cmake_environment_path} ${_imp_target} ${_imp_target_global})
-    endif()
-
-    _pkg_restore_path_internal()
-  else()
-    if (${_is_required})
-      message(SEND_ERROR "pkg-config tool not found")
-    endif ()
-  endif()
-endmacro()
-
-
-#[========================================[.rst:
-.. command:: pkg_check_modules
-
-  Checks for all the given modules, setting a variety of result variables in
-  the calling scope.
-
-  .. code-block:: cmake
-
-    pkg_check_modules(<prefix>
-                      [REQUIRED] [QUIET]
-                      [NO_CMAKE_PATH]
-                      [NO_CMAKE_ENVIRONMENT_PATH]
-                      [IMPORTED_TARGET [GLOBAL]]
-                      <moduleSpec> [<moduleSpec>...])
-
-  When the ``REQUIRED`` argument is given, the command will fail with an error
-  if module(s) could not be found.
-
-  When the ``QUIET`` argument is given, no status messages will be printed.
-
-  By default, if :variable:`CMAKE_MINIMUM_REQUIRED_VERSION` is 3.1 or
-  later, or if :variable:`PKG_CONFIG_USE_CMAKE_PREFIX_PATH` is set to a
-  boolean ``True`` value, then the :variable:`CMAKE_PREFIX_PATH`,
-  :variable:`CMAKE_FRAMEWORK_PATH`, and :variable:`CMAKE_APPBUNDLE_PATH` cache
-  and environment variables will be added to the ``pkg-config`` search path.
-  The ``NO_CMAKE_PATH`` and ``NO_CMAKE_ENVIRONMENT_PATH`` arguments
-  disable this behavior for the cache variables and environment variables
-  respectively.
-
-  The ``IMPORTED_TARGET`` argument will create an imported target named
-  ``PkgConfig::<prefix>`` that can be passed directly as an argument to
-  :command:`target_link_libraries`. The ``GLOBAL`` argument will make the
-  imported target available in global scope.
-
-  Each ``<moduleSpec>`` can be either a bare module name or it can be a
-  module name with a version constraint (operators ``=``, ``<``, ``>``,
-  ``<=`` and ``>=`` are supported).  The following are examples for a module
-  named ``foo`` with various constraints:
-
-  - ``foo`` matches any version.
-  - ``foo<2`` only matches versions before 2.
-  - ``foo>=3.1`` matches any version from 3.1 or later.
-  - ``foo=1.2.3`` requires that foo must be exactly version 1.2.3.
-
-  The following variables may be set upon return.  Two sets of values exist:
-  One for the common case (``<XXX> = <prefix>``) and another for the
-  information ``pkg-config`` provides when called with the ``--static``
-  option (``<XXX> = <prefix>_STATIC``).
-
-  ``<XXX>_FOUND``
-    set to 1 if module(s) exist
-  ``<XXX>_LIBRARIES``
-    only the libraries (without the '-l')
-  ``<XXX>_LINK_LIBRARIES``
-    the libraries and their absolute paths
-  ``<XXX>_LIBRARY_DIRS``
-    the paths of the libraries (without the '-L')
-  ``<XXX>_LDFLAGS``
-    all required linker flags
-  ``<XXX>_LDFLAGS_OTHER``
-    all other linker flags
-  ``<XXX>_INCLUDE_DIRS``
-    the '-I' preprocessor flags (without the '-I')
-  ``<XXX>_CFLAGS``
-    all required cflags
-  ``<XXX>_CFLAGS_OTHER``
-    the other compiler flags
-
-  All but ``<XXX>_FOUND`` may be a :ref:`;-list <CMake Language Lists>` if the
-  associated variable returned from ``pkg-config`` has multiple values.
-
-  There are some special variables whose prefix depends on the number of
-  ``<moduleSpec>`` given.  When there is only one ``<moduleSpec>``,
-  ``<YYY>`` will simply be ``<prefix>``, but if two or more ``<moduleSpec>``
-  items are given, ``<YYY>`` will be ``<prefix>_<moduleName>``.
-
-  ``<YYY>_VERSION``
-    version of the module
-  ``<YYY>_PREFIX``
-    prefix directory of the module
-  ``<YYY>_INCLUDEDIR``
-    include directory of the module
-  ``<YYY>_LIBDIR``
-    lib directory of the module
-
-  Examples:
-
-  .. code-block:: cmake
-
-    pkg_check_modules (GLIB2 glib-2.0)
-
-  Looks for any version of glib2.  If found, the output variable
-  ``GLIB2_VERSION`` will hold the actual version found.
-
-  .. code-block:: cmake
-
-    pkg_check_modules (GLIB2 glib-2.0>=2.10)
-
-  Looks for at least version 2.10 of glib2.  If found, the output variable
-  ``GLIB2_VERSION`` will hold the actual version found.
-
-  .. code-block:: cmake
-
-    pkg_check_modules (FOO glib-2.0>=2.10 gtk+-2.0)
-
-  Looks for both glib2-2.0 (at least version 2.10) and any version of
-  gtk2+-2.0.  Only if both are found will ``FOO`` be considered found.
-  The ``FOO_glib-2.0_VERSION`` and ``FOO_gtk+-2.0_VERSION`` variables will be
-  set to their respective found module versions.
-
-  .. code-block:: cmake
-
-    pkg_check_modules (XRENDER REQUIRED xrender)
-
-  Requires any version of ``xrender``.  Example output variables set by a
-  successful call::
-
-    XRENDER_LIBRARIES=Xrender;X11
-    XRENDER_STATIC_LIBRARIES=Xrender;X11;pthread;Xau;Xdmcp
-#]========================================]
-macro(pkg_check_modules _prefix _module0)
-  _pkgconfig_parse_options(_pkg_modules _pkg_is_required _pkg_is_silent _no_cmake_path _no_cmake_environment_path _imp_target _imp_target_global "${_module0}" ${ARGN})
-  # check cached value
-  if (NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION} OR NOT ${_prefix}_FOUND OR
-      (NOT "${ARGN}" STREQUAL "" AND NOT "${__pkg_config_arguments_${_prefix}}" STREQUAL "${_module0};${ARGN}") OR
-      (    "${ARGN}" STREQUAL "" AND NOT "${__pkg_config_arguments_${_prefix}}" STREQUAL "${_module0}"))
-    _pkg_check_modules_internal("${_pkg_is_required}" "${_pkg_is_silent}" ${_no_cmake_path} ${_no_cmake_environment_path} ${_imp_target} ${_imp_target_global} "${_prefix}" ${_pkg_modules})
-
-    _pkgconfig_set(__pkg_config_checked_${_prefix} ${PKG_CONFIG_VERSION})
-    if (${_prefix}_FOUND)
-      _pkgconfig_set(__pkg_config_arguments_${_prefix} "${_module0};${ARGN}")
-    endif()
-  else()
-    if (${_prefix}_FOUND)
-      _pkg_recalculate("${_prefix}" ${_no_cmake_path} ${_no_cmake_environment_path} ${_imp_target} ${_imp_target_global})
-    endif()
-  endif()
-endmacro()
-
-
-#[========================================[.rst:
-.. command:: pkg_search_module
-
-  The behavior of this command is the same as :command:`pkg_check_modules`,
-  except that rather than checking for all the specified modules, it searches
-  for just the first successful match.
-
-  .. code-block:: cmake
-
-    pkg_search_module(<prefix>
-                      [REQUIRED] [QUIET]
-                      [NO_CMAKE_PATH]
-                      [NO_CMAKE_ENVIRONMENT_PATH]
-                      [IMPORTED_TARGET [GLOBAL]]
-                      <moduleSpec> [<moduleSpec>...])
-
-  If a module is found, the ``<prefix>_MODULE_NAME`` variable will contain the
-  name of the matching module. This variable can be used if you need to run
-  :command:`pkg_get_variable`.
-
-  Example:
-
-  .. code-block:: cmake
-
-    pkg_search_module (BAR libxml-2.0 libxml2 libxml>=2)
-#]========================================]
-macro(pkg_search_module _prefix _module0)
-  _pkgconfig_parse_options(_pkg_modules_alt _pkg_is_required _pkg_is_silent _no_cmake_path _no_cmake_environment_path _imp_target _imp_target_global "${_module0}" ${ARGN})
-  # check cached value
-  if (NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION} OR NOT ${_prefix}_FOUND)
-    set(_pkg_modules_found 0)
-
-    if (NOT ${_pkg_is_silent})
-      message(STATUS "Checking for one of the modules '${_pkg_modules_alt}'")
-    endif ()
-
-    # iterate through all modules and stop at the first working one.
-    foreach(_pkg_alt ${_pkg_modules_alt})
-      if(NOT _pkg_modules_found)
-        _pkg_check_modules_internal(0 1 ${_no_cmake_path} ${_no_cmake_environment_path} ${_imp_target} ${_imp_target_global} "${_prefix}" "${_pkg_alt}")
-      endif()
-
-      if (${_prefix}_FOUND)
-        set(_pkg_modules_found 1)
-        break()
-      endif()
-    endforeach()
-
-    if (NOT ${_prefix}_FOUND)
-      if(${_pkg_is_required})
-        message(SEND_ERROR "None of the required '${_pkg_modules_alt}' found")
-      endif()
-    endif()
-
-    _pkgconfig_set(__pkg_config_checked_${_prefix} ${PKG_CONFIG_VERSION})
-  elseif (${_prefix}_FOUND)
-    _pkg_recalculate("${_prefix}" ${_no_cmake_path} ${_no_cmake_environment_path} ${_imp_target} ${_imp_target_global})
-  endif()
-endmacro()
-
-#[========================================[.rst:
-.. command:: pkg_get_variable
-
-  Retrieves the value of a pkg-config variable ``varName`` and stores it in the
-  result variable ``resultVar`` in the calling scope.
-
-  .. code-block:: cmake
-
-    pkg_get_variable(<resultVar> <moduleName> <varName>)
-
-  If ``pkg-config`` returns multiple values for the specified variable,
-  ``resultVar`` will contain a :ref:`;-list <CMake Language Lists>`.
-
-  For example:
-
-  .. code-block:: cmake
-
-    pkg_get_variable(GI_GIRDIR gobject-introspection-1.0 girdir)
-#]========================================]
-function (pkg_get_variable result pkg variable)
-  _pkg_set_path_internal()
-  _pkgconfig_invoke("${pkg}" "prefix" "result" "" "--variable=${variable}")
-  set("${result}"
-    "${prefix_result}"
-    PARENT_SCOPE)
-  _pkg_restore_path_internal()
-endfunction ()
-
-
-#[========================================[.rst:
-Variables Affecting Behavior
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. variable:: PKG_CONFIG_EXECUTABLE
-
-  This can be set to the path of the pkg-config executable.  If not provided,
-  it will be set by the module as a result of calling :command:`find_program`
-  internally.  The ``PKG_CONFIG`` environment variable can be used as a hint.
-
-.. variable:: PKG_CONFIG_USE_CMAKE_PREFIX_PATH
-
-  Specifies whether :command:`pkg_check_modules` and
-  :command:`pkg_search_module` should add the paths in the
-  :variable:`CMAKE_PREFIX_PATH`, :variable:`CMAKE_FRAMEWORK_PATH` and
-  :variable:`CMAKE_APPBUNDLE_PATH` cache and environment variables to the
-  ``pkg-config`` search path.
-
-  If this variable is not set, this behavior is enabled by default if
-  :variable:`CMAKE_MINIMUM_REQUIRED_VERSION` is 3.1 or later, disabled
-  otherwise.
-#]========================================]
-
-
-### Local Variables:
-### mode: cmake
-### End:
-
-cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/FindPostgreSQL.cmake b/share/cmake-3.18/Modules/FindPostgreSQL.cmake
deleted file mode 100644
index 1927aa4..0000000
--- a/share/cmake-3.18/Modules/FindPostgreSQL.cmake
+++ /dev/null
@@ -1,284 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindPostgreSQL
---------------
-
-Find the PostgreSQL installation.
-
-IMPORTED Targets
-^^^^^^^^^^^^^^^^
-
-This module defines :prop_tgt:`IMPORTED` target ``PostgreSQL::PostgreSQL``
-if PostgreSQL has been found.
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-This module will set the following variables in your project:
-
-``PostgreSQL_FOUND``
-  True if PostgreSQL is found.
-``PostgreSQL_LIBRARIES``
-  the PostgreSQL libraries needed for linking
-``PostgreSQL_INCLUDE_DIRS``
-  the directories of the PostgreSQL headers
-``PostgreSQL_LIBRARY_DIRS``
-  the link directories for PostgreSQL libraries
-``PostgreSQL_VERSION_STRING``
-  the version of PostgreSQL found
-#]=======================================================================]
-
-# ----------------------------------------------------------------------------
-# History:
-# This module is derived from the module originally found in the VTK source tree.
-#
-# ----------------------------------------------------------------------------
-# Note:
-# PostgreSQL_ADDITIONAL_VERSIONS is a variable that can be used to set the
-# version number of the implementation of PostgreSQL.
-# In Windows the default installation of PostgreSQL uses that as part of the path.
-# E.g C:\Program Files\PostgreSQL\8.4.
-# Currently, the following version numbers are known to this module:
-# "11" "10" "9.6" "9.5" "9.4" "9.3" "9.2" "9.1" "9.0" "8.4" "8.3" "8.2" "8.1" "8.0"
-#
-# To use this variable just do something like this:
-# set(PostgreSQL_ADDITIONAL_VERSIONS "9.2" "8.4.4")
-# before calling find_package(PostgreSQL) in your CMakeLists.txt file.
-# This will mean that the versions you set here will be found first in the order
-# specified before the default ones are searched.
-#
-# ----------------------------------------------------------------------------
-# You may need to manually set:
-#  PostgreSQL_INCLUDE_DIR  - the path to where the PostgreSQL include files are.
-#  PostgreSQL_LIBRARY_DIR  - The path to where the PostgreSQL library files are.
-# If FindPostgreSQL.cmake cannot find the include files or the library files.
-#
-# ----------------------------------------------------------------------------
-# The following variables are set if PostgreSQL is found:
-#  PostgreSQL_FOUND         - Set to true when PostgreSQL is found.
-#  PostgreSQL_INCLUDE_DIRS  - Include directories for PostgreSQL
-#  PostgreSQL_LIBRARY_DIRS  - Link directories for PostgreSQL libraries
-#  PostgreSQL_LIBRARIES     - The PostgreSQL libraries.
-#
-# The ``PostgreSQL::PostgreSQL`` imported target is also created.
-#
-# ----------------------------------------------------------------------------
-# If you have installed PostgreSQL in a non-standard location.
-# (Please note that in the following comments, it is assumed that <Your Path>
-# points to the root directory of the include directory of PostgreSQL.)
-# Then you have three options.
-# 1) After CMake runs, set PostgreSQL_INCLUDE_DIR to <Your Path>/include and
-#    PostgreSQL_LIBRARY_DIR to wherever the library pq (or libpq in windows) is
-# 2) Use CMAKE_INCLUDE_PATH to set a path to <Your Path>/PostgreSQL<-version>. This will allow find_path()
-#    to locate PostgreSQL_INCLUDE_DIR by utilizing the PATH_SUFFIXES option. e.g. In your CMakeLists.txt file
-#    set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "<Your Path>/include")
-# 3) Set an environment variable called ${PostgreSQL_ROOT} that points to the root of where you have
-#    installed PostgreSQL, e.g. <Your Path>.
-#
-# ----------------------------------------------------------------------------
-
-set(PostgreSQL_INCLUDE_PATH_DESCRIPTION "top-level directory containing the PostgreSQL include directories. E.g /usr/local/include/PostgreSQL/8.4 or C:/Program Files/PostgreSQL/8.4/include")
-set(PostgreSQL_INCLUDE_DIR_MESSAGE "Set the PostgreSQL_INCLUDE_DIR cmake cache entry to the ${PostgreSQL_INCLUDE_PATH_DESCRIPTION}")
-set(PostgreSQL_LIBRARY_PATH_DESCRIPTION "top-level directory containing the PostgreSQL libraries.")
-set(PostgreSQL_LIBRARY_DIR_MESSAGE "Set the PostgreSQL_LIBRARY_DIR cmake cache entry to the ${PostgreSQL_LIBRARY_PATH_DESCRIPTION}")
-set(PostgreSQL_ROOT_DIR_MESSAGE "Set the PostgreSQL_ROOT system variable to where PostgreSQL is found on the machine E.g C:/Program Files/PostgreSQL/8.4")
-
-
-set(PostgreSQL_KNOWN_VERSIONS ${PostgreSQL_ADDITIONAL_VERSIONS}
-    "12" "11" "10" "9.6" "9.5" "9.4" "9.3" "9.2" "9.1" "9.0" "8.4" "8.3" "8.2" "8.1" "8.0")
-
-# Define additional search paths for root directories.
-set( PostgreSQL_ROOT_DIRECTORIES
-   ENV PostgreSQL_ROOT
-   ${PostgreSQL_ROOT}
-)
-foreach(suffix ${PostgreSQL_KNOWN_VERSIONS})
-  if(WIN32)
-    list(APPEND PostgreSQL_LIBRARY_ADDITIONAL_SEARCH_SUFFIXES
-        "PostgreSQL/${suffix}/lib")
-    list(APPEND PostgreSQL_INCLUDE_ADDITIONAL_SEARCH_SUFFIXES
-        "PostgreSQL/${suffix}/include")
-    list(APPEND PostgreSQL_TYPE_ADDITIONAL_SEARCH_SUFFIXES
-        "PostgreSQL/${suffix}/include/server")
-  endif()
-  if(UNIX)
-    list(APPEND PostgreSQL_LIBRARY_ADDITIONAL_SEARCH_SUFFIXES
-        "postgresql${suffix}"
-        "pgsql-${suffix}/lib")
-    list(APPEND PostgreSQL_INCLUDE_ADDITIONAL_SEARCH_SUFFIXES
-        "postgresql${suffix}"
-        "postgresql/${suffix}"
-        "pgsql-${suffix}/include")
-    list(APPEND PostgreSQL_TYPE_ADDITIONAL_SEARCH_SUFFIXES
-        "postgresql${suffix}/server"
-        "postgresql/${suffix}/server"
-        "pgsql-${suffix}/include/server")
-  endif()
-endforeach()
-
-#
-# Look for an installation.
-#
-find_path(PostgreSQL_INCLUDE_DIR
-  NAMES libpq-fe.h
-  PATHS
-   # Look in other places.
-   ${PostgreSQL_ROOT_DIRECTORIES}
-  PATH_SUFFIXES
-    pgsql
-    postgresql
-    include
-    ${PostgreSQL_INCLUDE_ADDITIONAL_SEARCH_SUFFIXES}
-  # Help the user find it if we cannot.
-  DOC "The ${PostgreSQL_INCLUDE_DIR_MESSAGE}"
-)
-
-find_path(PostgreSQL_TYPE_INCLUDE_DIR
-  NAMES catalog/pg_type.h
-  PATHS
-   # Look in other places.
-   ${PostgreSQL_ROOT_DIRECTORIES}
-  PATH_SUFFIXES
-    postgresql
-    pgsql/server
-    postgresql/server
-    include/server
-    ${PostgreSQL_TYPE_ADDITIONAL_SEARCH_SUFFIXES}
-  # Help the user find it if we cannot.
-  DOC "The ${PostgreSQL_INCLUDE_DIR_MESSAGE}"
-)
-
-# The PostgreSQL library.
-set (PostgreSQL_LIBRARY_TO_FIND pq)
-# Setting some more prefixes for the library
-set (PostgreSQL_LIB_PREFIX "")
-if ( WIN32 )
-  set (PostgreSQL_LIB_PREFIX ${PostgreSQL_LIB_PREFIX} "lib")
-  set (PostgreSQL_LIBRARY_TO_FIND ${PostgreSQL_LIB_PREFIX}${PostgreSQL_LIBRARY_TO_FIND})
-endif()
-
-function(__postgresql_find_library _name)
-  find_library(${_name}
-   NAMES ${ARGN}
-   PATHS
-     ${PostgreSQL_ROOT_DIRECTORIES}
-   PATH_SUFFIXES
-     lib
-     ${PostgreSQL_LIBRARY_ADDITIONAL_SEARCH_SUFFIXES}
-   # Help the user find it if we cannot.
-   DOC "The ${PostgreSQL_LIBRARY_DIR_MESSAGE}"
-  )
-endfunction()
-
-# For compatibility with versions prior to this multi-config search, honor
-# any PostgreSQL_LIBRARY that is already specified and skip the search.
-if(PostgreSQL_LIBRARY)
-  set(PostgreSQL_LIBRARIES "${PostgreSQL_LIBRARY}")
-  get_filename_component(PostgreSQL_LIBRARY_DIR "${PostgreSQL_LIBRARY}" PATH)
-else()
-  __postgresql_find_library(PostgreSQL_LIBRARY_RELEASE ${PostgreSQL_LIBRARY_TO_FIND})
-  __postgresql_find_library(PostgreSQL_LIBRARY_DEBUG ${PostgreSQL_LIBRARY_TO_FIND}d)
-  include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
-  select_library_configurations(PostgreSQL)
-  mark_as_advanced(PostgreSQL_LIBRARY_RELEASE PostgreSQL_LIBRARY_DEBUG)
-  if(PostgreSQL_LIBRARY_RELEASE)
-    get_filename_component(PostgreSQL_LIBRARY_DIR "${PostgreSQL_LIBRARY_RELEASE}" PATH)
-  elseif(PostgreSQL_LIBRARY_DEBUG)
-    get_filename_component(PostgreSQL_LIBRARY_DIR "${PostgreSQL_LIBRARY_DEBUG}" PATH)
-  else()
-    set(PostgreSQL_LIBRARY_DIR "")
-  endif()
-endif()
-
-if (PostgreSQL_INCLUDE_DIR)
-  # Some platforms include multiple pg_config.hs for multi-lib configurations
-  # This is a temporary workaround.  A better solution would be to compile
-  # a dummy c file and extract the value of the symbol.
-  file(GLOB _PG_CONFIG_HEADERS "${PostgreSQL_INCLUDE_DIR}/pg_config*.h")
-  foreach(_PG_CONFIG_HEADER ${_PG_CONFIG_HEADERS})
-    if(EXISTS "${_PG_CONFIG_HEADER}")
-      file(STRINGS "${_PG_CONFIG_HEADER}" pgsql_version_str
-           REGEX "^#define[\t ]+PG_VERSION_NUM[\t ]+.*")
-      if(pgsql_version_str)
-        string(REGEX REPLACE "^#define[\t ]+PG_VERSION_NUM[\t ]+([0-9]*).*"
-               "\\1" _PostgreSQL_VERSION_NUM "${pgsql_version_str}")
-        break()
-      endif()
-    endif()
-  endforeach()
-  if (_PostgreSQL_VERSION_NUM)
-    # 9.x and older encoding
-    if (_PostgreSQL_VERSION_NUM LESS 100000)
-      math(EXPR _PostgreSQL_major_version "${_PostgreSQL_VERSION_NUM} / 10000")
-      math(EXPR _PostgreSQL_minor_version "${_PostgreSQL_VERSION_NUM} % 10000 / 100")
-      math(EXPR _PostgreSQL_patch_version "${_PostgreSQL_VERSION_NUM} % 100")
-      set(PostgreSQL_VERSION_STRING "${_PostgreSQL_major_version}.${_PostgreSQL_minor_version}.${_PostgreSQL_patch_version}")
-      unset(_PostgreSQL_major_version)
-      unset(_PostgreSQL_minor_version)
-      unset(_PostgreSQL_patch_version)
-    else ()
-      math(EXPR _PostgreSQL_major_version "${_PostgreSQL_VERSION_NUM} / 10000")
-      math(EXPR _PostgreSQL_minor_version "${_PostgreSQL_VERSION_NUM} % 10000")
-      set(PostgreSQL_VERSION_STRING "${_PostgreSQL_major_version}.${_PostgreSQL_minor_version}")
-      unset(_PostgreSQL_major_version)
-      unset(_PostgreSQL_minor_version)
-    endif ()
-  else ()
-    foreach(_PG_CONFIG_HEADER ${_PG_CONFIG_HEADERS})
-      if(EXISTS "${_PG_CONFIG_HEADER}")
-        file(STRINGS "${_PG_CONFIG_HEADER}" pgsql_version_str
-             REGEX "^#define[\t ]+PG_VERSION[\t ]+\".*\"")
-        if(pgsql_version_str)
-          string(REGEX REPLACE "^#define[\t ]+PG_VERSION[\t ]+\"([^\"]*)\".*"
-                 "\\1" PostgreSQL_VERSION_STRING "${pgsql_version_str}")
-          break()
-        endif()
-      endif()
-    endforeach()
-  endif ()
-  unset(_PostgreSQL_VERSION_NUM)
-  unset(pgsql_version_str)
-endif()
-
-# Did we find anything?
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-find_package_handle_standard_args(PostgreSQL
-                                  REQUIRED_VARS PostgreSQL_LIBRARY PostgreSQL_INCLUDE_DIR PostgreSQL_TYPE_INCLUDE_DIR
-                                  VERSION_VAR PostgreSQL_VERSION_STRING)
-set(PostgreSQL_FOUND  ${POSTGRESQL_FOUND})
-
-function(__postgresql_import_library _target _var _config)
-  if(_config)
-    set(_config_suffix "_${_config}")
-  else()
-    set(_config_suffix "")
-  endif()
-
-  set(_lib "${${_var}${_config_suffix}}")
-  if(EXISTS "${_lib}")
-    if(_config)
-      set_property(TARGET ${_target} APPEND PROPERTY
-        IMPORTED_CONFIGURATIONS ${_config})
-    endif()
-    set_target_properties(${_target} PROPERTIES
-      IMPORTED_LOCATION${_config_suffix} "${_lib}")
-  endif()
-endfunction()
-
-# Now try to get the include and library path.
-if(PostgreSQL_FOUND)
-  if (NOT TARGET PostgreSQL::PostgreSQL)
-    add_library(PostgreSQL::PostgreSQL UNKNOWN IMPORTED)
-    set_target_properties(PostgreSQL::PostgreSQL PROPERTIES
-      INTERFACE_INCLUDE_DIRECTORIES "${PostgreSQL_INCLUDE_DIR};${PostgreSQL_TYPE_INCLUDE_DIR}")
-    __postgresql_import_library(PostgreSQL::PostgreSQL PostgreSQL_LIBRARY "")
-    __postgresql_import_library(PostgreSQL::PostgreSQL PostgreSQL_LIBRARY "RELEASE")
-    __postgresql_import_library(PostgreSQL::PostgreSQL PostgreSQL_LIBRARY "DEBUG")
-  endif ()
-  set(PostgreSQL_INCLUDE_DIRS ${PostgreSQL_INCLUDE_DIR} ${PostgreSQL_TYPE_INCLUDE_DIR} )
-  set(PostgreSQL_LIBRARY_DIRS ${PostgreSQL_LIBRARY_DIR} )
-endif()
-
-mark_as_advanced(PostgreSQL_INCLUDE_DIR PostgreSQL_TYPE_INCLUDE_DIR)
diff --git a/share/cmake-3.18/Modules/FindProtobuf.cmake b/share/cmake-3.18/Modules/FindProtobuf.cmake
deleted file mode 100644
index e09717d..0000000
--- a/share/cmake-3.18/Modules/FindProtobuf.cmake
+++ /dev/null
@@ -1,661 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindProtobuf
-------------
-
-Locate and configure the Google Protocol Buffers library.
-
-The following variables can be set and are optional:
-
-``Protobuf_SRC_ROOT_FOLDER``
-  When compiling with MSVC, if this cache variable is set
-  the protobuf-default VS project build locations
-  (vsprojects/Debug and vsprojects/Release
-  or vsprojects/x64/Debug and vsprojects/x64/Release)
-  will be searched for libraries and binaries.
-``Protobuf_IMPORT_DIRS``
-  List of additional directories to be searched for
-  imported .proto files.
-``Protobuf_DEBUG``
-  Show debug messages.
-``Protobuf_USE_STATIC_LIBS``
-  Set to ON to force the use of the static libraries.
-  Default is OFF.
-
-Defines the following variables:
-
-``Protobuf_FOUND``
-  Found the Google Protocol Buffers library
-  (libprotobuf & header files)
-``Protobuf_VERSION``
-  Version of package found.
-``Protobuf_INCLUDE_DIRS``
-  Include directories for Google Protocol Buffers
-``Protobuf_LIBRARIES``
-  The protobuf libraries
-``Protobuf_PROTOC_LIBRARIES``
-  The protoc libraries
-``Protobuf_LITE_LIBRARIES``
-  The protobuf-lite libraries
-
-The following :prop_tgt:`IMPORTED` targets are also defined:
-
-``protobuf::libprotobuf``
-  The protobuf library.
-``protobuf::libprotobuf-lite``
-  The protobuf lite library.
-``protobuf::libprotoc``
-  The protoc library.
-``protobuf::protoc``
-  The protoc compiler.
-
-The following cache variables are also available to set or use:
-
-``Protobuf_LIBRARY``
-  The protobuf library
-``Protobuf_PROTOC_LIBRARY``
-  The protoc library
-``Protobuf_INCLUDE_DIR``
-  The include directory for protocol buffers
-``Protobuf_PROTOC_EXECUTABLE``
-  The protoc compiler
-``Protobuf_LIBRARY_DEBUG``
-  The protobuf library (debug)
-``Protobuf_PROTOC_LIBRARY_DEBUG``
-  The protoc library (debug)
-``Protobuf_LITE_LIBRARY``
-  The protobuf lite library
-``Protobuf_LITE_LIBRARY_DEBUG``
-  The protobuf lite library (debug)
-
-Example:
-
-.. code-block:: cmake
-
-  find_package(Protobuf REQUIRED)
-  include_directories(${Protobuf_INCLUDE_DIRS})
-  include_directories(${CMAKE_CURRENT_BINARY_DIR})
-  protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS foo.proto)
-  protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS EXPORT_MACRO DLL_EXPORT foo.proto)
-  protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS DESCRIPTORS PROTO_DESCS foo.proto)
-  protobuf_generate_python(PROTO_PY foo.proto)
-  add_executable(bar bar.cc ${PROTO_SRCS} ${PROTO_HDRS})
-  target_link_libraries(bar ${Protobuf_LIBRARIES})
-
-.. note::
-  The ``protobuf_generate_cpp`` and ``protobuf_generate_python``
-  functions and :command:`add_executable` or :command:`add_library`
-  calls only work properly within the same directory.
-
-.. command:: protobuf_generate_cpp
-
-  Add custom commands to process ``.proto`` files to C++::
-
-    protobuf_generate_cpp (<SRCS> <HDRS>
-        [DESCRIPTORS <DESC>] [EXPORT_MACRO <MACRO>] [<ARGN>...])
-
-  ``SRCS``
-    Variable to define with autogenerated source files
-  ``HDRS``
-    Variable to define with autogenerated header files
-  ``DESCRIPTORS``
-    Variable to define with autogenerated descriptor files, if requested.
-  ``EXPORT_MACRO``
-    is a macro which should expand to ``__declspec(dllexport)`` or
-    ``__declspec(dllimport)`` depending on what is being compiled.
-  ``ARGN``
-    ``.proto`` files
-
-.. command:: protobuf_generate_python
-
-  Add custom commands to process ``.proto`` files to Python::
-
-    protobuf_generate_python (<PY> [<ARGN>...])
-
-  ``PY``
-    Variable to define with autogenerated Python files
-  ``ARGN``
-    ``.proto`` files
-#]=======================================================================]
-
-function(protobuf_generate)
-  set(_options APPEND_PATH DESCRIPTORS)
-  set(_singleargs LANGUAGE OUT_VAR EXPORT_MACRO PROTOC_OUT_DIR)
-  if(COMMAND target_sources)
-    list(APPEND _singleargs TARGET)
-  endif()
-  set(_multiargs PROTOS IMPORT_DIRS GENERATE_EXTENSIONS)
-
-  cmake_parse_arguments(protobuf_generate "${_options}" "${_singleargs}" "${_multiargs}" "${ARGN}")
-
-  if(NOT protobuf_generate_PROTOS AND NOT protobuf_generate_TARGET)
-    message(SEND_ERROR "Error: protobuf_generate called without any targets or source files")
-    return()
-  endif()
-
-  if(NOT protobuf_generate_OUT_VAR AND NOT protobuf_generate_TARGET)
-    message(SEND_ERROR "Error: protobuf_generate called without a target or output variable")
-    return()
-  endif()
-
-  if(NOT protobuf_generate_LANGUAGE)
-    set(protobuf_generate_LANGUAGE cpp)
-  endif()
-  string(TOLOWER ${protobuf_generate_LANGUAGE} protobuf_generate_LANGUAGE)
-
-  if(NOT protobuf_generate_PROTOC_OUT_DIR)
-    set(protobuf_generate_PROTOC_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
-  endif()
-
-  if(protobuf_generate_EXPORT_MACRO AND protobuf_generate_LANGUAGE STREQUAL cpp)
-    set(_dll_export_decl "dllexport_decl=${protobuf_generate_EXPORT_MACRO}:")
-  endif()
-
-  if(NOT protobuf_generate_GENERATE_EXTENSIONS)
-    if(protobuf_generate_LANGUAGE STREQUAL cpp)
-      set(protobuf_generate_GENERATE_EXTENSIONS .pb.h .pb.cc)
-    elseif(protobuf_generate_LANGUAGE STREQUAL python)
-      set(protobuf_generate_GENERATE_EXTENSIONS _pb2.py)
-    else()
-      message(SEND_ERROR "Error: protobuf_generate given unknown Language ${LANGUAGE}, please provide a value for GENERATE_EXTENSIONS")
-      return()
-    endif()
-  endif()
-
-  if(protobuf_generate_TARGET)
-    get_target_property(_source_list ${protobuf_generate_TARGET} SOURCES)
-    foreach(_file ${_source_list})
-      if(_file MATCHES "proto$")
-        list(APPEND protobuf_generate_PROTOS ${_file})
-      endif()
-    endforeach()
-  endif()
-
-  if(NOT protobuf_generate_PROTOS)
-    message(SEND_ERROR "Error: protobuf_generate could not find any .proto files")
-    return()
-  endif()
-
-  if(protobuf_generate_APPEND_PATH)
-    # Create an include path for each file specified
-    foreach(_file ${protobuf_generate_PROTOS})
-      get_filename_component(_abs_file ${_file} ABSOLUTE)
-      get_filename_component(_abs_path ${_abs_file} PATH)
-      list(FIND _protobuf_include_path ${_abs_path} _contains_already)
-      if(${_contains_already} EQUAL -1)
-          list(APPEND _protobuf_include_path -I ${_abs_path})
-      endif()
-    endforeach()
-  else()
-    set(_protobuf_include_path -I ${CMAKE_CURRENT_SOURCE_DIR})
-  endif()
-
-  foreach(DIR ${protobuf_generate_IMPORT_DIRS})
-    get_filename_component(ABS_PATH ${DIR} ABSOLUTE)
-    list(FIND _protobuf_include_path ${ABS_PATH} _contains_already)
-    if(${_contains_already} EQUAL -1)
-        list(APPEND _protobuf_include_path -I ${ABS_PATH})
-    endif()
-  endforeach()
-
-  set(_generated_srcs_all)
-  foreach(_proto ${protobuf_generate_PROTOS})
-    get_filename_component(_abs_file ${_proto} ABSOLUTE)
-    get_filename_component(_abs_dir ${_abs_file} DIRECTORY)
-    get_filename_component(_basename ${_proto} NAME_WE)
-    file(RELATIVE_PATH _rel_dir ${CMAKE_CURRENT_SOURCE_DIR} ${_abs_dir})
-
-    set(_possible_rel_dir)
-    if (NOT protobuf_generate_APPEND_PATH)
-        set(_possible_rel_dir ${_rel_dir}/)
-    endif()
-
-    set(_generated_srcs)
-    foreach(_ext ${protobuf_generate_GENERATE_EXTENSIONS})
-      list(APPEND _generated_srcs "${protobuf_generate_PROTOC_OUT_DIR}/${_possible_rel_dir}${_basename}${_ext}")
-    endforeach()
-
-    if(protobuf_generate_DESCRIPTORS AND protobuf_generate_LANGUAGE STREQUAL cpp)
-      set(_descriptor_file "${CMAKE_CURRENT_BINARY_DIR}/${_basename}.desc")
-      set(_dll_desc_out "--descriptor_set_out=${_descriptor_file}")
-      list(APPEND _generated_srcs ${_descriptor_file})
-    endif()
-    list(APPEND _generated_srcs_all ${_generated_srcs})
-
-    add_custom_command(
-      OUTPUT ${_generated_srcs}
-      COMMAND  protobuf::protoc
-      ARGS --${protobuf_generate_LANGUAGE}_out ${_dll_export_decl}${protobuf_generate_PROTOC_OUT_DIR} ${_dll_desc_out} ${_protobuf_include_path} ${_abs_file}
-      DEPENDS ${_abs_file} protobuf::protoc
-      COMMENT "Running ${protobuf_generate_LANGUAGE} protocol buffer compiler on ${_proto}"
-      VERBATIM )
-  endforeach()
-
-  set_source_files_properties(${_generated_srcs_all} PROPERTIES GENERATED TRUE)
-  if(protobuf_generate_OUT_VAR)
-    set(${protobuf_generate_OUT_VAR} ${_generated_srcs_all} PARENT_SCOPE)
-  endif()
-  if(protobuf_generate_TARGET)
-    target_sources(${protobuf_generate_TARGET} PRIVATE ${_generated_srcs_all})
-  endif()
-endfunction()
-
-function(PROTOBUF_GENERATE_CPP SRCS HDRS)
-  cmake_parse_arguments(protobuf_generate_cpp "" "EXPORT_MACRO;DESCRIPTORS" "" ${ARGN})
-
-  set(_proto_files "${protobuf_generate_cpp_UNPARSED_ARGUMENTS}")
-  if(NOT _proto_files)
-    message(SEND_ERROR "Error: PROTOBUF_GENERATE_CPP() called without any proto files")
-    return()
-  endif()
-
-  if(PROTOBUF_GENERATE_CPP_APPEND_PATH)
-    set(_append_arg APPEND_PATH)
-  endif()
-
-  if(protobuf_generate_cpp_DESCRIPTORS)
-    set(_descriptors DESCRIPTORS)
-  endif()
-
-  if(DEFINED PROTOBUF_IMPORT_DIRS AND NOT DEFINED Protobuf_IMPORT_DIRS)
-    set(Protobuf_IMPORT_DIRS "${PROTOBUF_IMPORT_DIRS}")
-  endif()
-
-  if(DEFINED Protobuf_IMPORT_DIRS)
-    set(_import_arg IMPORT_DIRS ${Protobuf_IMPORT_DIRS})
-  endif()
-
-  set(_outvar)
-  protobuf_generate(${_append_arg} ${_descriptors} LANGUAGE cpp EXPORT_MACRO ${protobuf_generate_cpp_EXPORT_MACRO} OUT_VAR _outvar ${_import_arg} PROTOS ${_proto_files})
-
-  set(${SRCS})
-  set(${HDRS})
-  if(protobuf_generate_cpp_DESCRIPTORS)
-    set(${protobuf_generate_cpp_DESCRIPTORS})
-  endif()
-
-  foreach(_file ${_outvar})
-    if(_file MATCHES "cc$")
-      list(APPEND ${SRCS} ${_file})
-    elseif(_file MATCHES "desc$")
-      list(APPEND ${protobuf_generate_cpp_DESCRIPTORS} ${_file})
-    else()
-      list(APPEND ${HDRS} ${_file})
-    endif()
-  endforeach()
-  set(${SRCS} ${${SRCS}} PARENT_SCOPE)
-  set(${HDRS} ${${HDRS}} PARENT_SCOPE)
-  if(protobuf_generate_cpp_DESCRIPTORS)
-    set(${protobuf_generate_cpp_DESCRIPTORS} "${${protobuf_generate_cpp_DESCRIPTORS}}" PARENT_SCOPE)
-  endif()
-endfunction()
-
-function(PROTOBUF_GENERATE_PYTHON SRCS)
-  if(NOT ARGN)
-    message(SEND_ERROR "Error: PROTOBUF_GENERATE_PYTHON() called without any proto files")
-    return()
-  endif()
-
-  if(PROTOBUF_GENERATE_CPP_APPEND_PATH)
-    set(_append_arg APPEND_PATH)
-  endif()
-
-  if(DEFINED PROTOBUF_IMPORT_DIRS AND NOT DEFINED Protobuf_IMPORT_DIRS)
-    set(Protobuf_IMPORT_DIRS "${PROTOBUF_IMPORT_DIRS}")
-  endif()
-
-  if(DEFINED Protobuf_IMPORT_DIRS)
-    set(_import_arg IMPORT_DIRS ${Protobuf_IMPORT_DIRS})
-  endif()
-
-  set(_outvar)
-  protobuf_generate(${_append_arg} LANGUAGE python OUT_VAR _outvar ${_import_arg} PROTOS ${ARGN})
-  set(${SRCS} ${_outvar} PARENT_SCOPE)
-endfunction()
-
-
-if(Protobuf_DEBUG)
-  # Output some of their choices
-  message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
-                 "Protobuf_USE_STATIC_LIBS = ${Protobuf_USE_STATIC_LIBS}")
-endif()
-
-
-# Backwards compatibility
-# Define camel case versions of input variables
-foreach(UPPER
-    PROTOBUF_SRC_ROOT_FOLDER
-    PROTOBUF_IMPORT_DIRS
-    PROTOBUF_DEBUG
-    PROTOBUF_LIBRARY
-    PROTOBUF_PROTOC_LIBRARY
-    PROTOBUF_INCLUDE_DIR
-    PROTOBUF_PROTOC_EXECUTABLE
-    PROTOBUF_LIBRARY_DEBUG
-    PROTOBUF_PROTOC_LIBRARY_DEBUG
-    PROTOBUF_LITE_LIBRARY
-    PROTOBUF_LITE_LIBRARY_DEBUG
-    )
-    if (DEFINED ${UPPER})
-        string(REPLACE "PROTOBUF_" "Protobuf_" Camel ${UPPER})
-        if (NOT DEFINED ${Camel})
-            set(${Camel} ${${UPPER}})
-        endif()
-    endif()
-endforeach()
-
-if(CMAKE_SIZEOF_VOID_P EQUAL 8)
-  set(_PROTOBUF_ARCH_DIR x64/)
-endif()
-
-
-# Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES
-if( Protobuf_USE_STATIC_LIBS )
-  set( _protobuf_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
-  if(WIN32)
-    set(CMAKE_FIND_LIBRARY_SUFFIXES .lib .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
-  else()
-    set(CMAKE_FIND_LIBRARY_SUFFIXES .a )
-  endif()
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
-
-# Internal function: search for normal library as well as a debug one
-#    if the debug one is specified also include debug/optimized keywords
-#    in *_LIBRARIES variable
-function(_protobuf_find_libraries name filename)
-  if(${name}_LIBRARIES)
-    # Use result recorded by a previous call.
-    return()
-  elseif(${name}_LIBRARY)
-    # Honor cache entry used by CMake 3.5 and lower.
-    set(${name}_LIBRARIES "${${name}_LIBRARY}" PARENT_SCOPE)
-  else()
-    find_library(${name}_LIBRARY_RELEASE
-      NAMES ${filename}
-      PATHS ${Protobuf_SRC_ROOT_FOLDER}/vsprojects/${_PROTOBUF_ARCH_DIR}Release)
-    mark_as_advanced(${name}_LIBRARY_RELEASE)
-
-    find_library(${name}_LIBRARY_DEBUG
-      NAMES ${filename}d ${filename}
-      PATHS ${Protobuf_SRC_ROOT_FOLDER}/vsprojects/${_PROTOBUF_ARCH_DIR}Debug)
-    mark_as_advanced(${name}_LIBRARY_DEBUG)
-
-    select_library_configurations(${name})
-
-    if(UNIX AND Threads_FOUND)
-      list(APPEND ${name}_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
-    endif()
-
-    set(${name}_LIBRARY "${${name}_LIBRARY}" PARENT_SCOPE)
-    set(${name}_LIBRARIES "${${name}_LIBRARIES}" PARENT_SCOPE)
-  endif()
-endfunction()
-
-#
-# Main.
-#
-
-# By default have PROTOBUF_GENERATE_CPP macro pass -I to protoc
-# for each directory where a proto file is referenced.
-if(NOT DEFINED PROTOBUF_GENERATE_CPP_APPEND_PATH)
-  set(PROTOBUF_GENERATE_CPP_APPEND_PATH TRUE)
-endif()
-
-
-# Google's provided vcproj files generate libraries with a "lib"
-# prefix on Windows
-if(MSVC)
-    set(Protobuf_ORIG_FIND_LIBRARY_PREFIXES "${CMAKE_FIND_LIBRARY_PREFIXES}")
-    set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "")
-
-    find_path(Protobuf_SRC_ROOT_FOLDER protobuf.pc.in)
-endif()
-
-if(UNIX)
-  # Protobuf headers may depend on threading.
-  find_package(Threads QUIET)
-endif()
-
-# The Protobuf library
-_protobuf_find_libraries(Protobuf protobuf)
-#DOC "The Google Protocol Buffers RELEASE Library"
-
-_protobuf_find_libraries(Protobuf_LITE protobuf-lite)
-
-# The Protobuf Protoc Library
-_protobuf_find_libraries(Protobuf_PROTOC protoc)
-
-# Restore original find library prefixes
-if(MSVC)
-    set(CMAKE_FIND_LIBRARY_PREFIXES "${Protobuf_ORIG_FIND_LIBRARY_PREFIXES}")
-endif()
-
-# Find the include directory
-find_path(Protobuf_INCLUDE_DIR
-    google/protobuf/service.h
-    PATHS ${Protobuf_SRC_ROOT_FOLDER}/src
-)
-mark_as_advanced(Protobuf_INCLUDE_DIR)
-
-# Find the protoc Executable
-find_program(Protobuf_PROTOC_EXECUTABLE
-    NAMES protoc
-    DOC "The Google Protocol Buffers Compiler"
-    PATHS
-    ${Protobuf_SRC_ROOT_FOLDER}/vsprojects/${_PROTOBUF_ARCH_DIR}Release
-    ${Protobuf_SRC_ROOT_FOLDER}/vsprojects/${_PROTOBUF_ARCH_DIR}Debug
-)
-mark_as_advanced(Protobuf_PROTOC_EXECUTABLE)
-
-if(Protobuf_DEBUG)
-    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
-        "requested version of Google Protobuf is ${Protobuf_FIND_VERSION}")
-endif()
-
-if(Protobuf_INCLUDE_DIR)
-  set(_PROTOBUF_COMMON_HEADER ${Protobuf_INCLUDE_DIR}/google/protobuf/stubs/common.h)
-
-  if(Protobuf_DEBUG)
-    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
-                   "location of common.h: ${_PROTOBUF_COMMON_HEADER}")
-  endif()
-
-  set(Protobuf_VERSION "")
-  set(Protobuf_LIB_VERSION "")
-  file(STRINGS ${_PROTOBUF_COMMON_HEADER} _PROTOBUF_COMMON_H_CONTENTS REGEX "#define[ \t]+GOOGLE_PROTOBUF_VERSION[ \t]+")
-  if(_PROTOBUF_COMMON_H_CONTENTS MATCHES "#define[ \t]+GOOGLE_PROTOBUF_VERSION[ \t]+([0-9]+)")
-      set(Protobuf_LIB_VERSION "${CMAKE_MATCH_1}")
-  endif()
-  unset(_PROTOBUF_COMMON_H_CONTENTS)
-
-  math(EXPR _PROTOBUF_MAJOR_VERSION "${Protobuf_LIB_VERSION} / 1000000")
-  math(EXPR _PROTOBUF_MINOR_VERSION "${Protobuf_LIB_VERSION} / 1000 % 1000")
-  math(EXPR _PROTOBUF_SUBMINOR_VERSION "${Protobuf_LIB_VERSION} % 1000")
-  set(Protobuf_VERSION "${_PROTOBUF_MAJOR_VERSION}.${_PROTOBUF_MINOR_VERSION}.${_PROTOBUF_SUBMINOR_VERSION}")
-
-  if(Protobuf_DEBUG)
-    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
-        "${_PROTOBUF_COMMON_HEADER} reveals protobuf ${Protobuf_VERSION}")
-  endif()
-
-  if(Protobuf_PROTOC_EXECUTABLE)
-    # Check Protobuf compiler version to be aligned with libraries version
-    execute_process(COMMAND ${Protobuf_PROTOC_EXECUTABLE} --version
-                    OUTPUT_VARIABLE _PROTOBUF_PROTOC_EXECUTABLE_VERSION)
-
-    if("${_PROTOBUF_PROTOC_EXECUTABLE_VERSION}" MATCHES "libprotoc ([0-9.]+)")
-      set(_PROTOBUF_PROTOC_EXECUTABLE_VERSION "${CMAKE_MATCH_1}")
-    endif()
-
-    if(Protobuf_DEBUG)
-      message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
-          "${Protobuf_PROTOC_EXECUTABLE} reveals version ${_PROTOBUF_PROTOC_EXECUTABLE_VERSION}")
-    endif()
-
-    if(NOT "${_PROTOBUF_PROTOC_EXECUTABLE_VERSION}" VERSION_EQUAL "${Protobuf_VERSION}")
-      message(WARNING "Protobuf compiler version ${_PROTOBUF_PROTOC_EXECUTABLE_VERSION}"
-        " doesn't match library version ${Protobuf_VERSION}")
-    endif()
-  endif()
-
-  if(Protobuf_LIBRARY)
-      if(NOT TARGET protobuf::libprotobuf)
-          add_library(protobuf::libprotobuf UNKNOWN IMPORTED)
-          set_target_properties(protobuf::libprotobuf PROPERTIES
-            INTERFACE_INCLUDE_DIRECTORIES "${Protobuf_INCLUDE_DIR}")
-          if(EXISTS "${Protobuf_LIBRARY}")
-            set_target_properties(protobuf::libprotobuf PROPERTIES
-              IMPORTED_LOCATION "${Protobuf_LIBRARY}")
-          endif()
-          if(EXISTS "${Protobuf_LIBRARY_RELEASE}")
-            set_property(TARGET protobuf::libprotobuf APPEND PROPERTY
-              IMPORTED_CONFIGURATIONS RELEASE)
-            set_target_properties(protobuf::libprotobuf PROPERTIES
-              IMPORTED_LOCATION_RELEASE "${Protobuf_LIBRARY_RELEASE}")
-          endif()
-          if(EXISTS "${Protobuf_LIBRARY_DEBUG}")
-            set_property(TARGET protobuf::libprotobuf APPEND PROPERTY
-              IMPORTED_CONFIGURATIONS DEBUG)
-            set_target_properties(protobuf::libprotobuf PROPERTIES
-              IMPORTED_LOCATION_DEBUG "${Protobuf_LIBRARY_DEBUG}")
-          endif()
-          if (Protobuf_VERSION VERSION_GREATER_EQUAL "3.6")
-            set_property(TARGET protobuf::libprotobuf APPEND PROPERTY
-              INTERFACE_COMPILE_FEATURES cxx_std_11
-            )
-          endif()
-          if (MSVC AND NOT Protobuf_USE_STATIC_LIBS)
-            set_property(TARGET protobuf::libprotobuf APPEND PROPERTY
-              INTERFACE_COMPILE_DEFINITIONS "PROTOBUF_USE_DLLS"
-            )
-          endif()
-          if(UNIX AND TARGET Threads::Threads)
-            set_property(TARGET protobuf::libprotobuf APPEND PROPERTY
-                INTERFACE_LINK_LIBRARIES Threads::Threads)
-          endif()
-      endif()
-  endif()
-
-  if(Protobuf_LITE_LIBRARY)
-      if(NOT TARGET protobuf::libprotobuf-lite)
-          add_library(protobuf::libprotobuf-lite UNKNOWN IMPORTED)
-          set_target_properties(protobuf::libprotobuf-lite PROPERTIES
-            INTERFACE_INCLUDE_DIRECTORIES "${Protobuf_INCLUDE_DIR}")
-          if(EXISTS "${Protobuf_LITE_LIBRARY}")
-            set_target_properties(protobuf::libprotobuf-lite PROPERTIES
-              IMPORTED_LOCATION "${Protobuf_LITE_LIBRARY}")
-          endif()
-          if(EXISTS "${Protobuf_LITE_LIBRARY_RELEASE}")
-            set_property(TARGET protobuf::libprotobuf-lite APPEND PROPERTY
-              IMPORTED_CONFIGURATIONS RELEASE)
-            set_target_properties(protobuf::libprotobuf-lite PROPERTIES
-              IMPORTED_LOCATION_RELEASE "${Protobuf_LITE_LIBRARY_RELEASE}")
-          endif()
-          if(EXISTS "${Protobuf_LITE_LIBRARY_DEBUG}")
-            set_property(TARGET protobuf::libprotobuf-lite APPEND PROPERTY
-              IMPORTED_CONFIGURATIONS DEBUG)
-            set_target_properties(protobuf::libprotobuf-lite PROPERTIES
-              IMPORTED_LOCATION_DEBUG "${Protobuf_LITE_LIBRARY_DEBUG}")
-          endif()
-          if (MSVC AND NOT Protobuf_USE_STATIC_LIBS)
-            set_property(TARGET protobuf::libprotobuf-lite APPEND PROPERTY
-              INTERFACE_COMPILE_DEFINITIONS "PROTOBUF_USE_DLLS"
-            )
-          endif()
-          if(UNIX AND TARGET Threads::Threads)
-            set_property(TARGET protobuf::libprotobuf-lite APPEND PROPERTY
-                INTERFACE_LINK_LIBRARIES Threads::Threads)
-          endif()
-      endif()
-  endif()
-
-  if(Protobuf_PROTOC_LIBRARY)
-      if(NOT TARGET protobuf::libprotoc)
-          add_library(protobuf::libprotoc UNKNOWN IMPORTED)
-          set_target_properties(protobuf::libprotoc PROPERTIES
-            INTERFACE_INCLUDE_DIRECTORIES "${Protobuf_INCLUDE_DIR}")
-          if(EXISTS "${Protobuf_PROTOC_LIBRARY}")
-            set_target_properties(protobuf::libprotoc PROPERTIES
-              IMPORTED_LOCATION "${Protobuf_PROTOC_LIBRARY}")
-          endif()
-          if(EXISTS "${Protobuf_PROTOC_LIBRARY_RELEASE}")
-            set_property(TARGET protobuf::libprotoc APPEND PROPERTY
-              IMPORTED_CONFIGURATIONS RELEASE)
-            set_target_properties(protobuf::libprotoc PROPERTIES
-              IMPORTED_LOCATION_RELEASE "${Protobuf_PROTOC_LIBRARY_RELEASE}")
-          endif()
-          if(EXISTS "${Protobuf_PROTOC_LIBRARY_DEBUG}")
-            set_property(TARGET protobuf::libprotoc APPEND PROPERTY
-              IMPORTED_CONFIGURATIONS DEBUG)
-            set_target_properties(protobuf::libprotoc PROPERTIES
-              IMPORTED_LOCATION_DEBUG "${Protobuf_PROTOC_LIBRARY_DEBUG}")
-          endif()
-          if (Protobuf_VERSION VERSION_GREATER_EQUAL "3.6")
-            set_property(TARGET protobuf::libprotoc APPEND PROPERTY
-              INTERFACE_COMPILE_FEATURES cxx_std_11
-            )
-          endif()
-          if (MSVC AND NOT Protobuf_USE_STATIC_LIBS)
-            set_property(TARGET protobuf::libprotoc APPEND PROPERTY
-              INTERFACE_COMPILE_DEFINITIONS "PROTOBUF_USE_DLLS"
-            )
-          endif()
-          if(UNIX AND TARGET Threads::Threads)
-            set_property(TARGET protobuf::libprotoc APPEND PROPERTY
-                INTERFACE_LINK_LIBRARIES Threads::Threads)
-          endif()
-      endif()
-  endif()
-
-  if(Protobuf_PROTOC_EXECUTABLE)
-      if(NOT TARGET protobuf::protoc)
-          add_executable(protobuf::protoc IMPORTED)
-          if(EXISTS "${Protobuf_PROTOC_EXECUTABLE}")
-            set_target_properties(protobuf::protoc PROPERTIES
-              IMPORTED_LOCATION "${Protobuf_PROTOC_EXECUTABLE}")
-          endif()
-      endif()
-  endif()
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(Protobuf
-    REQUIRED_VARS Protobuf_LIBRARIES Protobuf_INCLUDE_DIR
-    VERSION_VAR Protobuf_VERSION
-)
-
-if(Protobuf_FOUND)
-    set(Protobuf_INCLUDE_DIRS ${Protobuf_INCLUDE_DIR})
-endif()
-
-# Restore the original find library ordering
-if( Protobuf_USE_STATIC_LIBS )
-  set(CMAKE_FIND_LIBRARY_SUFFIXES ${_protobuf_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
-endif()
-
-# Backwards compatibility
-# Define upper case versions of output variables
-foreach(Camel
-    Protobuf_SRC_ROOT_FOLDER
-    Protobuf_IMPORT_DIRS
-    Protobuf_DEBUG
-    Protobuf_INCLUDE_DIRS
-    Protobuf_LIBRARIES
-    Protobuf_PROTOC_LIBRARIES
-    Protobuf_LITE_LIBRARIES
-    Protobuf_LIBRARY
-    Protobuf_PROTOC_LIBRARY
-    Protobuf_INCLUDE_DIR
-    Protobuf_PROTOC_EXECUTABLE
-    Protobuf_LIBRARY_DEBUG
-    Protobuf_PROTOC_LIBRARY_DEBUG
-    Protobuf_LITE_LIBRARY
-    Protobuf_LITE_LIBRARY_DEBUG
-    )
-    string(TOUPPER ${Camel} UPPER)
-    set(${UPPER} ${${Camel}})
-endforeach()
diff --git a/share/cmake-3.18/Modules/FindPython.cmake b/share/cmake-3.18/Modules/FindPython.cmake
deleted file mode 100644
index 01b82c4..0000000
--- a/share/cmake-3.18/Modules/FindPython.cmake
+++ /dev/null
@@ -1,448 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindPython
-----------
-
-Find Python interpreter, compiler and development environment (include
-directories and libraries).
-
-The following components are supported:
-
-* ``Interpreter``: search for Python interpreter.
-* ``Compiler``: search for Python compiler. Only offered by IronPython.
-* ``Development``: search for development artifacts (include directories and
-  libraries). This component includes two sub-components which can be specified
-  independently:
-
-  * ``Development.Module``: search for artifacts for Python module
-    developments.
-  * ``Development.Embed``: search for artifacts for Python embedding
-    developments.
-
-* ``NumPy``: search for NumPy include directories.
-
-If no ``COMPONENTS`` are specified, ``Interpreter`` is assumed.
-
-If component ``Development`` is specified, it implies sub-components
-``Development.Module`` and ``Development.Embed``.
-
-To ensure consistent versions between components ``Interpreter``, ``Compiler``,
-``Development`` (or one of its sub-components) and ``NumPy``, specify all
-components at the same time::
-
-  find_package (Python COMPONENTS Interpreter Development)
-
-This module looks preferably for version 3 of Python. If not found, version 2
-is searched.
-To manage concurrent versions 3 and 2 of Python, use :module:`FindPython3` and
-:module:`FindPython2` modules rather than this one.
-
-.. note::
-
-  If components ``Interpreter`` and ``Development`` (or one of its
-  sub-components) are both specified, this module search only for interpreter
-  with same platform architecture as the one defined by ``CMake``
-  configuration. This contraint does not apply if only ``Interpreter``
-  component is specified.
-
-Imported Targets
-^^^^^^^^^^^^^^^^
-
-This module defines the following :ref:`Imported Targets <Imported Targets>`
-(when :prop_gbl:`CMAKE_ROLE` is ``PROJECT``):
-
-``Python::Interpreter``
-  Python interpreter. Target defined if component ``Interpreter`` is found.
-``Python::Compiler``
-  Python compiler. Target defined if component ``Compiler`` is found.
-``Python::Module``
-  Python library for Python module. Target defined if component
-  ``Development.Module`` is found.
-``Python::Python``
-  Python library for Python embedding. Target defined if component
-  ``Development.Embed`` is found.
-``Python::NumPy``
-  NumPy Python library. Target defined if component ``NumPy`` is found.
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-This module will set the following variables in your project
-(see :ref:`Standard Variable Names <CMake Developer Standard Variable Names>`):
-
-``Python_FOUND``
-  System has the Python requested components.
-``Python_Interpreter_FOUND``
-  System has the Python interpreter.
-``Python_EXECUTABLE``
-  Path to the Python interpreter.
-``Python_INTERPRETER_ID``
-  A short string unique to the interpreter. Possible values include:
-    * Python
-    * ActivePython
-    * Anaconda
-    * Canopy
-    * IronPython
-    * PyPy
-``Python_STDLIB``
-  Standard platform independent installation directory.
-
-  Information returned by
-  ``distutils.sysconfig.get_python_lib(plat_specific=False,standard_lib=True)``
-  or else ``sysconfig.get_path('stdlib')``.
-``Python_STDARCH``
-  Standard platform dependent installation directory.
-
-  Information returned by
-  ``distutils.sysconfig.get_python_lib(plat_specific=True,standard_lib=True)``
-  or else ``sysconfig.get_path('platstdlib')``.
-``Python_SITELIB``
-  Third-party platform independent installation directory.
-
-  Information returned by
-  ``distutils.sysconfig.get_python_lib(plat_specific=False,standard_lib=False)``
-  or else ``sysconfig.get_path('purelib')``.
-``Python_SITEARCH``
-  Third-party platform dependent installation directory.
-
-  Information returned by
-  ``distutils.sysconfig.get_python_lib(plat_specific=True,standard_lib=False)``
-  or else ``sysconfig.get_path('platlib')``.
-``Python_SOABI``
-  Extension suffix for modules.
-
-  Information returned by
-  ``distutils.sysconfig.get_config_var('SOABI')`` or computed from
-  ``distutils.sysconfig.get_config_var('EXT_SUFFIX')`` or
-  ``python-config --extension-suffix``. If package ``distutils.sysconfig`` is
-  not available, ``sysconfig.get_config_var('SOABI')`` or
-  ``sysconfig.get_config_var('EXT_SUFFIX')`` are used.
-``Python_Compiler_FOUND``
-  System has the Python compiler.
-``Python_COMPILER``
-  Path to the Python compiler. Only offered by IronPython.
-``Python_COMPILER_ID``
-  A short string unique to the compiler. Possible values include:
-    * IronPython
-``Python_DOTNET_LAUNCHER``
-  The ``.Net`` interpreter. Only used by ``IronPython`` implementation.
-``Python_Development_FOUND``
-  System has the Python development artifacts.
-``Python_Development.Module_FOUND``
-  System has the Python development artifacts for Python module.
-``Python_Development.Embed_FOUND``
-  System has the Python development artifacts for Python embedding.
-``Python_INCLUDE_DIRS``
-  The Python include directories.
-``Python_LIBRARIES``
-  The Python libraries.
-``Python_LIBRARY_DIRS``
-  The Python library directories.
-``Python_RUNTIME_LIBRARY_DIRS``
-  The Python runtime library directories.
-``Python_VERSION``
-  Python version.
-``Python_VERSION_MAJOR``
-  Python major version.
-``Python_VERSION_MINOR``
-  Python minor version.
-``Python_VERSION_PATCH``
-  Python patch version.
-``Python_PyPy_VERSION``
-  Python PyPy version.
-``Python_NumPy_FOUND``
-  System has the NumPy.
-``Python_NumPy_INCLUDE_DIRS``
-  The NumPy include directries.
-``Python_NumPy_VERSION``
-  The NumPy version.
-
-Hints
-^^^^^
-
-``Python_ROOT_DIR``
-  Define the root directory of a Python installation.
-
-``Python_USE_STATIC_LIBS``
-  * If not defined, search for shared libraries and static libraries in that
-    order.
-  * If set to TRUE, search **only** for static libraries.
-  * If set to FALSE, search **only** for shared libraries.
-
-``Python_FIND_ABI``
-  This variable defines which ABIs, as defined in
-  `PEP 3149 <https://www.python.org/dev/peps/pep-3149/>`_, should be searched.
-
-  .. note::
-
-    This hint will be honored only when searched for ``Python`` version 3.
-
-  .. note::
-
-    If ``Python_FIND_ABI`` is not defined, any ABI will be searched.
-
-  The ``Python_FIND_ABI`` variable is a 3-tuple specifying, in that order,
-  ``pydebug`` (``d``), ``pymalloc`` (``m``) and ``unicode`` (``u``) flags.
-  Each element can be set to one of the following:
-
-  * ``ON``: Corresponding flag is selected.
-  * ``OFF``: Corresponding flag is not selected.
-  * ``ANY``: The two posibilties (``ON`` and ``OFF``) will be searched.
-
-  From this 3-tuple, various ABIs will be searched starting from the most
-  specialized to the most general. Moreover, ``debug`` versions will be
-  searched **after** ``non-debug`` ones.
-
-  For example, if we have::
-
-    set (Python_FIND_ABI "ON" "ANY" "ANY")
-
-  The following flags combinations will be appended, in that order, to the
-  artifact names: ``dmu``, ``dm``, ``du``, and ``d``.
-
-  And to search any possible ABIs::
-
-    set (Python_FIND_ABI "ANY" "ANY" "ANY")
-
-  The following combinations, in that order, will be used: ``mu``, ``m``,
-  ``u``, ``<empty>``, ``dmu``, ``dm``, ``du`` and ``d``.
-
-  .. note::
-
-    This hint is useful only on ``POSIX`` systems. So, on ``Windows`` systems,
-    when ``Python_FIND_ABI`` is defined, ``Python`` distributions from
-    `python.org <https://www.python.org/>`_ will be found only if value for
-    each flag is ``OFF`` or ``ANY``.
-
-``Python_FIND_STRATEGY``
-  This variable defines how lookup will be done.
-  The ``Python_FIND_STRATEGY`` variable can be set to one of the following:
-
-  * ``VERSION``: Try to find the most recent version in all specified
-    locations.
-    This is the default if policy :policy:`CMP0094` is undefined or set to
-    ``OLD``.
-  * ``LOCATION``: Stops lookup as soon as a version satisfying version
-    constraints is founded.
-    This is the default if policy :policy:`CMP0094` is set to ``NEW``.
-
-``Python_FIND_REGISTRY``
-  On Windows the ``Python_FIND_REGISTRY`` variable determine the order
-  of preference between registry and environment variables.
-  the ``Python_FIND_REGISTRY`` variable can be set to one of the following:
-
-  * ``FIRST``: Try to use registry before environment variables.
-    This is the default.
-  * ``LAST``: Try to use registry after environment variables.
-  * ``NEVER``: Never try to use registry.
-
-``Python_FIND_FRAMEWORK``
-  On macOS the ``Python_FIND_FRAMEWORK`` variable determine the order of
-  preference between Apple-style and unix-style package components.
-  This variable can take same values as :variable:`CMAKE_FIND_FRAMEWORK`
-  variable.
-
-  .. note::
-
-    Value ``ONLY`` is not supported so ``FIRST`` will be used instead.
-
-  If ``Python_FIND_FRAMEWORK`` is not defined, :variable:`CMAKE_FIND_FRAMEWORK`
-  variable will be used, if any.
-
-``Python_FIND_VIRTUALENV``
-  This variable defines the handling of virtual environments managed by
-  ``virtualenv`` or ``conda``. It is meaningful only when a virtual environment
-  is active (i.e. the ``activate`` script has been evaluated). In this case, it
-  takes precedence over ``Python_FIND_REGISTRY`` and ``CMAKE_FIND_FRAMEWORK``
-  variables.  The ``Python_FIND_VIRTUALENV`` variable can be set to one of the
-  following:
-
-  * ``FIRST``: The virtual environment is used before any other standard
-    paths to look-up for the interpreter. This is the default.
-  * ``ONLY``: Only the virtual environment is used to look-up for the
-    interpreter.
-  * ``STANDARD``: The virtual environment is not used to look-up for the
-    interpreter but environment variable ``PATH`` is always considered.
-    In this case, variable ``Python_FIND_REGISTRY`` (Windows) or
-    ``CMAKE_FIND_FRAMEWORK`` (macOS) can be set with value ``LAST`` or
-    ``NEVER`` to select preferably the interpreter from the virtual
-    environment.
-
-  .. note::
-
-    If the component ``Development`` is requested, it is **strongly**
-    recommended to also include the component ``Interpreter`` to get expected
-    result.
-
-``Python_FIND_IMPLEMENTATIONS``
-  This variable defines, in an ordered list, the different implementations
-  which will be searched. The ``Python_FIND_IMPLEMENTATIONS`` variable can
-  hold the following values:
-
-  * ``CPython``: this is the standard implementation. Various products, like
-    ``Anaconda`` or ``ActivePython``, rely on this implementation.
-  * ``IronPython``: This implementation use the ``CSharp`` language for
-    ``.NET Framework`` on top of the `Dynamic Language Runtime` (``DLR``).
-    See `IronPython <http://ironpython.net>`_.
-  * ``PyPy``: This implementation use ``RPython`` language and
-    ``RPython translation toolchain`` to produce the python interpreter.
-    See `PyPy <https://www.pypy.org>`_.
-
-  The default value is:
-
-  * Windows platform: ``CPython``, ``IronPython``
-  * Other platforms: ``CPython``
-
-  .. note::
-
-    This hint has the lowest priority of all hints, so even if, for example,
-    you specify ``IronPython`` first and ``CPython`` in second, a python
-    product based on ``CPython`` can be selected because, for example with
-    ``Python_FIND_STRATEGY=LOCATION``, each location will be search first for
-    ``IronPython`` and second for ``CPython``.
-
-  .. note::
-
-    When ``IronPython`` is specified, on platforms other than ``Windows``, the
-    ``.Net`` interpreter (i.e. ``mono`` command) is expected to be available
-    through the ``PATH`` variable.
-
-Artifacts Specification
-^^^^^^^^^^^^^^^^^^^^^^^
-
-To solve special cases, it is possible to specify directly the artifacts by
-setting the following variables:
-
-``Python_EXECUTABLE``
-  The path to the interpreter.
-
-``Python_COMPILER``
-  The path to the compiler.
-
-``Python_DOTNET_LAUNCHER``
-  The ``.Net`` interpreter. Only used by ``IronPython`` implementation.
-
-``Python_LIBRARY``
-  The path to the library. It will be used to compute the
-  variables ``Python_LIBRARIES``, ``Python_LIBRAY_DIRS`` and
-  ``Python_RUNTIME_LIBRARY_DIRS``.
-
-``Python_INCLUDE_DIR``
-  The path to the directory of the ``Python`` headers. It will be used to
-  compute the variable ``Python_INCLUDE_DIRS``.
-
-``Python_NumPy_INCLUDE_DIR``
-  The path to the directory of the ``NumPy`` headers. It will be used to
-  compute the variable ``Python_NumPy_INCLUDE_DIRS``.
-
-.. note::
-
-  All paths must be absolute. Any artifact specified with a relative path
-  will be ignored.
-
-.. note::
-
-  When an artifact is specified, all ``HINTS`` will be ignored and no search
-  will be performed for this artifact.
-
-  If more than one artifact is specified, it is the user's responsability to
-  ensure the consistency of the various artifacts.
-
-By default, this module supports multiple calls in different directories of a
-project with different version/component requirements while providing correct
-and consistent results for each call. To support this behavior, ``CMake`` cache
-is not used in the traditional way which can be problematic for interactive
-specification. So, to enable also interactive specification, module behavior
-can be controled with the following variable:
-
-``Python_ARTIFACTS_INTERACTIVE``
-  Selects the behavior of the module. This is a boolean variable:
-
-  * If set to ``TRUE``: Create CMake cache entries for the above artifact
-    specification variables so that users can edit them interactively.
-    This disables support for multiple version/component requirements.
-  * If set to ``FALSE`` or undefined: Enable multiple version/component
-    requirements.
-
-Commands
-^^^^^^^^
-
-This module defines the command ``Python_add_library`` (when
-:prop_gbl:`CMAKE_ROLE` is ``PROJECT``), which has the same semantics as
-:command:`add_library` and adds a dependency to target ``Python::Python`` or,
-when library type is ``MODULE``, to target ``Python::Module`` and takes care of
-Python module naming rules::
-
-  Python_add_library (<name> [STATIC | SHARED | MODULE [WITH_SOABI]]
-                      <source1> [<source2> ...])
-
-If the library type is not specified, ``MODULE`` is assumed.
-
-For ``MODULE`` library type, if option ``WITH_SOABI`` is specified, the
-module suffix will include the ``Python_SOABI`` value, if any.
-#]=======================================================================]
-
-
-set (_PYTHON_PREFIX Python)
-
-if (DEFINED Python_FIND_VERSION)
-  set (_Python_REQUIRED_VERSION_MAJOR ${Python_FIND_VERSION_MAJOR})
-
-  include (${CMAKE_CURRENT_LIST_DIR}/FindPython/Support.cmake)
-else()
-  # iterate over versions in quiet and NOT required modes to avoid multiple
-  # "Found" messages and prematurally failure.
-  set (_Python_QUIETLY ${Python_FIND_QUIETLY})
-  set (_Python_REQUIRED ${Python_FIND_REQUIRED})
-  set (Python_FIND_QUIETLY TRUE)
-  set (Python_FIND_REQUIRED FALSE)
-
-  set (_Python_REQUIRED_VERSIONS 3 2)
-  set (_Python_REQUIRED_VERSION_LAST 2)
-
-  unset (_Python_INPUT_VARS)
-  foreach (_Python_ITEM IN ITEMS Python_EXECUTABLE Python_COMPILER Python_LIBRARY
-                                 Python_INCLUDE_DIR Python_NumPy_INCLUDE_DIR)
-    if (NOT DEFINED ${_Python_ITEM})
-      list (APPEND _Python_INPUT_VARS ${_Python_ITEM})
-    endif()
-  endforeach()
-
-  foreach (_Python_REQUIRED_VERSION_MAJOR IN LISTS _Python_REQUIRED_VERSIONS)
-    set (Python_FIND_VERSION ${_Python_REQUIRED_VERSION_MAJOR})
-    include (${CMAKE_CURRENT_LIST_DIR}/FindPython/Support.cmake)
-    if (Python_FOUND OR
-        _Python_REQUIRED_VERSION_MAJOR EQUAL _Python_REQUIRED_VERSION_LAST)
-      break()
-    endif()
-    # clean-up INPUT variables not set by the user
-    foreach (_Python_ITEM IN LISTS _Python_INPUT_VARS)
-      unset (${_Python_ITEM})
-    endforeach()
-    # clean-up some CACHE variables to ensure look-up restart from scratch
-    foreach (_Python_ITEM IN LISTS _Python_CACHED_VARS)
-      unset (${_Python_ITEM} CACHE)
-    endforeach()
-  endforeach()
-
-  unset (Python_FIND_VERSION)
-
-  set (Python_FIND_QUIETLY ${_Python_QUIETLY})
-  set (Python_FIND_REQUIRED ${_Python_REQUIRED})
-  if (Python_FIND_REQUIRED OR NOT Python_FIND_QUIETLY)
-    # call again validation command to get "Found" or error message
-    find_package_handle_standard_args (Python HANDLE_COMPONENTS
-                                              REQUIRED_VARS ${_Python_REQUIRED_VARS}
-                                              VERSION_VAR Python_VERSION)
-  endif()
-endif()
-
-if (COMMAND __Python_add_library)
-  macro (Python_add_library)
-    __Python_add_library (Python ${ARGV})
-  endmacro()
-endif()
-
-unset (_PYTHON_PREFIX)
diff --git a/share/cmake-3.18/Modules/FindPython/Support.cmake b/share/cmake-3.18/Modules/FindPython/Support.cmake
deleted file mode 100644
index 1be0625..0000000
--- a/share/cmake-3.18/Modules/FindPython/Support.cmake
+++ /dev/null
@@ -1,3172 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#
-# This file is a "template" file used by various FindPython modules.
-#
-
-cmake_policy (GET CMP0094 _${_PYTHON_PREFIX}_LOOKUP_POLICY)
-
-cmake_policy (VERSION 3.7)
-
-if (_${_PYTHON_PREFIX}_LOOKUP_POLICY)
-  cmake_policy (SET CMP0094 ${_${_PYTHON_PREFIX}_LOOKUP_POLICY})
-endif()
-
-#
-# Initial configuration
-#
-if (NOT DEFINED _PYTHON_PREFIX)
-  message (FATAL_ERROR "FindPython: INTERNAL ERROR")
-endif()
-if (NOT DEFINED _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR)
-  message (FATAL_ERROR "FindPython: INTERNAL ERROR")
-endif()
-if (_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR EQUAL "3")
-  set(_${_PYTHON_PREFIX}_VERSIONS 3.9 3.8 3.7 3.6 3.5 3.4 3.3 3.2 3.1 3.0)
-elseif (_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR EQUAL "2")
-  set(_${_PYTHON_PREFIX}_VERSIONS 2.7 2.6 2.5 2.4 2.3 2.2 2.1 2.0)
-else()
-  message (FATAL_ERROR "FindPython: INTERNAL ERROR")
-endif()
-
-get_property(_${_PYTHON_PREFIX}_CMAKE_ROLE GLOBAL PROPERTY CMAKE_ROLE)
-
-
-#
-# helper commands
-#
-macro (_PYTHON_DISPLAY_FAILURE _PYTHON_MSG)
-  if (${_PYTHON_PREFIX}_FIND_REQUIRED)
-    message (FATAL_ERROR "${_PYTHON_MSG}")
-  else()
-    if (NOT ${_PYTHON_PREFIX}_FIND_QUIETLY)
-      message(STATUS "${_PYTHON_MSG}")
-    endif ()
-  endif()
-
-  set (${_PYTHON_PREFIX}_FOUND FALSE)
-  string (TOUPPER "${_PYTHON_PREFIX}" _${_PYTHON_PREFIX}_UPPER_PREFIX)
-  set (${_PYTHON_UPPER_PREFIX}_FOUND FALSE)
-  return()
-endmacro()
-
-
-function (_PYTHON_MARK_AS_INTERNAL)
-  foreach (var IN LISTS ARGV)
-    if (DEFINED CACHE{${var}})
-      set_property (CACHE ${var} PROPERTY TYPE INTERNAL)
-    endif()
-  endforeach()
-endfunction()
-
-
-macro (_PYTHON_SELECT_LIBRARY_CONFIGURATIONS _PYTHON_BASENAME)
-  if(NOT DEFINED ${_PYTHON_BASENAME}_LIBRARY_RELEASE)
-    set(${_PYTHON_BASENAME}_LIBRARY_RELEASE "${_PYTHON_BASENAME}_LIBRARY_RELEASE-NOTFOUND")
-  endif()
-  if(NOT DEFINED ${_PYTHON_BASENAME}_LIBRARY_DEBUG)
-    set(${_PYTHON_BASENAME}_LIBRARY_DEBUG "${_PYTHON_BASENAME}_LIBRARY_DEBUG-NOTFOUND")
-  endif()
-
-  get_property(_PYTHON_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
-  if (${_PYTHON_BASENAME}_LIBRARY_DEBUG AND ${_PYTHON_BASENAME}_LIBRARY_RELEASE AND
-      NOT ${_PYTHON_BASENAME}_LIBRARY_DEBUG STREQUAL ${_PYTHON_BASENAME}_LIBRARY_RELEASE AND
-      (_PYTHON_isMultiConfig OR CMAKE_BUILD_TYPE))
-    # if the generator is multi-config or if CMAKE_BUILD_TYPE is set for
-    # single-config generators, set optimized and debug libraries
-    set (${_PYTHON_BASENAME}_LIBRARIES "")
-    foreach (_PYTHON_libname IN LISTS ${_PYTHON_BASENAME}_LIBRARY_RELEASE)
-      list( APPEND ${_PYTHON_BASENAME}_LIBRARIES optimized "${_PYTHON_libname}")
-    endforeach()
-    foreach (_PYTHON_libname IN LISTS ${_PYTHON_BASENAME}_LIBRARY_DEBUG)
-      list( APPEND ${_PYTHON_BASENAME}_LIBRARIES debug "${_PYTHON_libname}")
-    endforeach()
-  elseif (${_PYTHON_BASENAME}_LIBRARY_RELEASE)
-    set (${_PYTHON_BASENAME}_LIBRARIES "${${_PYTHON_BASENAME}_LIBRARY_RELEASE}")
-  elseif (${_PYTHON_BASENAME}_LIBRARY_DEBUG)
-    set (${_PYTHON_BASENAME}_LIBRARIES "${${_PYTHON_BASENAME}_LIBRARY_DEBUG}")
-  else()
-    set (${_PYTHON_BASENAME}_LIBRARIES "${_PYTHON_BASENAME}_LIBRARY-NOTFOUND")
-  endif()
-endmacro()
-
-
-macro (_PYTHON_FIND_FRAMEWORKS)
-  if (CMAKE_HOST_APPLE OR APPLE)
-    file(TO_CMAKE_PATH "$ENV{CMAKE_FRAMEWORK_PATH}" _pff_CMAKE_FRAMEWORK_PATH)
-    set (_pff_frameworks ${CMAKE_FRAMEWORK_PATH}
-                         ${_pff_CMAKE_FRAMEWORK_PATH}
-                         ~/Library/Frameworks
-                         /usr/local/Frameworks
-                         ${CMAKE_SYSTEM_FRAMEWORK_PATH})
-    list (REMOVE_DUPLICATES _pff_frameworks)
-    foreach (_pff_implementation IN LISTS _${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS)
-      unset (_${_PYTHON_PREFIX}_${_pff_implementation}_FRAMEWORKS)
-      if (_pff_implementation STREQUAL "CPython")
-        foreach (_pff_framework IN LISTS _pff_frameworks)
-          if (EXISTS ${_pff_framework}/Python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR}.framework)
-            list (APPEND _${_PYTHON_PREFIX}_${_pff_implementation}_FRAMEWORKS ${_pff_framework}/Python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR}.framework)
-          endif()
-          if (EXISTS ${_pff_framework}/Python.framework)
-            list (APPEND _${_PYTHON_PREFIX}_${_pff_implementation}_FRAMEWORKS ${_pff_framework}/Python.framework)
-          endif()
-        endforeach()
-      elseif (_pff_implementation STREQUAL "IronPython")
-        foreach (_pff_framework IN LISTS _pff_frameworks)
-          if (EXISTS ${_pff_framework}/IronPython.framework)
-            list (APPEND _${_PYTHON_PREFIX}_${_pff_implementation}_FRAMEWORKS ${_pff_framework}/IronPython.framework)
-          endif()
-        endforeach()
-      endif()
-    endforeach()
-    unset (_pff_implementation)
-    unset (_pff_frameworks)
-    unset (_pff_framework)
-  endif()
-endmacro()
-
-function (_PYTHON_GET_FRAMEWORKS _PYTHON_PGF_FRAMEWORK_PATHS)
-  cmake_parse_arguments (PARSE_ARGV 1 _PGF "" "" "IMPLEMENTATIONS;VERSION")
-
-  if (NOT _PGF_IMPLEMENTATIONS)
-    set (_PGF_IMPLEMENTATIONS ${_${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS})
-  endif()
-
-  set (framework_paths)
-
-  foreach (implementation IN LISTS _PGF_IMPLEMENTATIONS)
-    if (implementation STREQUAL "CPython")
-      foreach (version IN LISTS _PGF_VERSION)
-        foreach (framework IN LISTS _${_PYTHON_PREFIX}_${implementation}_FRAMEWORKS)
-          if (EXISTS "${framework}/Versions/${version}")
-            list (APPEND framework_paths "${framework}/Versions/${version}")
-          endif()
-        endforeach()
-      endforeach()
-    elseif (implementation STREQUAL "IronPython")
-      foreach (version IN LISTS _PGF_VERSION)
-        foreach (framework IN LISTS _${_PYTHON_PREFIX}_${implementation}_FRAMEWORKS)
-          # pick-up all available versions
-          file (GLOB versions LIST_DIRECTORIES true RELATIVE "${framework}/Versions/"
-                              "${framework}/Versions/${version}*")
-          list (SORT versions ORDER DESCENDING)
-          list (TRANSFORM versions PREPEND "${framework}/Versions/")
-          list (APPEND framework_paths ${versions})
-        endforeach()
-      endforeach()
-    endif()
-  endforeach()
-
-  set (${_PYTHON_PGF_FRAMEWORK_PATHS} ${framework_paths} PARENT_SCOPE)
-endfunction()
-
-function (_PYTHON_GET_REGISTRIES _PYTHON_PGR_REGISTRY_PATHS)
-  cmake_parse_arguments (PARSE_ARGV 1 _PGR "" "" "IMPLEMENTATIONS;VERSION")
-
-  if (NOT _PGR_IMPLEMENTATIONS)
-    set (_PGR_IMPLEMENTATIONS ${_${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS})
-  endif()
-
-  set (registries)
-
-  foreach (implementation IN LISTS _PGR_IMPLEMENTATIONS)
-    if (implementation STREQUAL "CPython")
-      foreach (version IN LISTS _PGR_VERSION)
-        string (REPLACE "." "" version_no_dots ${version})
-        list (APPEND registries
-                     [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${version}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath]
-                     [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${version}-${_${_PYTHON_PREFIX}_ARCH2}\\InstallPath])
-        if (version VERSION_GREATER_EQUAL "3.5")
-          get_filename_component (arch "[HKEY_CURRENT_USER\\Software\\Python\\PythonCore\\${version};SysArchitecture]" NAME)
-          if (arch MATCHES "(${_${_PYTHON_PREFIX}_ARCH}|${_${_PYTHON_PREFIX}_ARCH2})bit")
-            list (APPEND registries
-                         [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${version}\\InstallPath])
-          endif()
-        else()
-          list (APPEND registries
-                       [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${version}\\InstallPath])
-        endif()
-        list (APPEND registries
-                     [HKEY_CURRENT_USER\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${version_no_dots}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath]
-                     [HKEY_CURRENT_USER\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${version_no_dots}-${_${_PYTHON_PREFIX}_ARCH2}\\InstallPath]
-                     [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${version}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath]
-                     [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${version}-${_${_PYTHON_PREFIX}_ARCH2}\\InstallPath]
-                     [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${version}\\InstallPath]
-                     [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${version_no_dots}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath]
-                     [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${version_no_dots}-${_${_PYTHON_PREFIX}_ARCH2}\\InstallPath])
-      endforeach()
-    elseif (implementation STREQUAL "IronPython")
-      foreach (version  IN LISTS _PGR_VERSION)
-        list (APPEND registries [HKEY_LOCAL_MACHINE\\SOFTWARE\\IronPython\\${version}\\InstallPath])
-      endforeach()
-    endif()
-  endforeach()
-
-  set (${_PYTHON_PGR_REGISTRY_PATHS} "${registries}" PARENT_SCOPE)
-endfunction()
-
-
-function (_PYTHON_GET_ABIFLAGS _PGABIFLAGS)
-  set (abiflags)
-  list (GET _${_PYTHON_PREFIX}_FIND_ABI 0 pydebug)
-  list (GET _${_PYTHON_PREFIX}_FIND_ABI 1 pymalloc)
-  list (GET _${_PYTHON_PREFIX}_FIND_ABI 2 unicode)
-
-  if (pymalloc STREQUAL "ANY" AND unicode STREQUAL "ANY")
-    set (abiflags "mu" "m" "u" "")
-  elseif (pymalloc STREQUAL "ANY" AND unicode STREQUAL "ON")
-    set (abiflags "mu" "u")
-  elseif (pymalloc STREQUAL "ANY" AND unicode STREQUAL "OFF")
-    set (abiflags "m" "")
-  elseif (pymalloc STREQUAL "ON" AND unicode STREQUAL "ANY")
-    set (abiflags "mu" "m")
-  elseif (pymalloc STREQUAL "ON" AND unicode STREQUAL "ON")
-    set (abiflags "mu")
-  elseif (pymalloc STREQUAL "ON" AND unicode STREQUAL "OFF")
-    set (abiflags "m")
-  elseif (pymalloc STREQUAL "ON" AND unicode STREQUAL "ANY")
-    set (abiflags "u" "")
-  elseif (pymalloc STREQUAL "OFF" AND unicode STREQUAL "ON")
-    set (abiflags "u")
-  endif()
-
-  if (pydebug STREQUAL "ON")
-    if (abiflags)
-      list (TRANSFORM abiflags PREPEND "d")
-    else()
-      set (abiflags "d")
-    endif()
-  elseif (pydebug STREQUAL "ANY")
-    if (abiflags)
-      set (flags "${abiflags}")
-      list (TRANSFORM flags PREPEND "d")
-      list (APPEND abiflags "${flags}")
-    else()
-      set (abiflags "" "d")
-    endif()
-  endif()
-
-  set (${_PGABIFLAGS} "${abiflags}" PARENT_SCOPE)
-endfunction()
-
-function (_PYTHON_GET_PATH_SUFFIXES _PYTHON_PGPS_PATH_SUFFIXES)
-  cmake_parse_arguments (PARSE_ARGV 1 _PGPS "INTERPRETER;COMPILER;LIBRARY;INCLUDE" "" "IMPLEMENTATIONS;VERSION")
-
-  if (NOT _PGPS_IMPLEMENTATIONS)
-    set (_PGPS_IMPLEMENTATIONS ${_${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS})
-  endif()
-
-  if (DEFINED _${_PYTHON_PREFIX}_ABIFLAGS)
-    set (abi "${_${_PYTHON_PREFIX}_ABIFLAGS}")
-  else()
-    set (abi "mu" "m" "u" "")
-  endif()
-
-  set (path_suffixes)
-
-  foreach (implementation IN LISTS _PGPS_IMPLEMENTATIONS)
-    if (implementation STREQUAL "CPython")
-      if (_PGPS_INTERPRETER)
-        list (APPEND path_suffixes bin Scripts)
-      else()
-        foreach (version IN LISTS _PGPS_VERSION)
-          if (_PGPS_LIBRARY)
-            if (CMAKE_LIBRARY_ARCHITECTURE)
-              list (APPEND path_suffixes lib/${CMAKE_LIBRARY_ARCHITECTURE})
-            endif()
-            list (APPEND path_suffixes lib libs)
-
-            if (CMAKE_LIBRARY_ARCHITECTURE)
-              set (suffixes "${abi}")
-              if (suffixes)
-                list (TRANSFORM suffixes PREPEND "lib/python${_PGPS_VERSION}/config-${_PGPS_VERSION}")
-                list (TRANSFORM suffixes APPEND "-${CMAKE_LIBRARY_ARCHITECTURE}")
-              else()
-                set (suffixes "lib/python${_PGPS_VERSION}/config-${_PGPS_VERSION}-${CMAKE_LIBRARY_ARCHITECTURE}")
-              endif()
-              list (APPEND path_suffixes ${suffixes})
-            endif()
-            set (suffixes "${abi}")
-            if (suffixes)
-              list (TRANSFORM suffixes PREPEND "lib/python${_PGPS_VERSION}/config-${_PGPS_VERSION}")
-            else()
-              set (suffixes "lib/python${_PGPS_VERSION}/config-${_PGPS_VERSION}")
-            endif()
-            list (APPEND path_suffixes ${suffixes})
-          elseif (_PGPS_INCLUDE)
-            set (suffixes "${abi}")
-            if (suffixes)
-              list (TRANSFORM suffixes PREPEND "include/python${_PGPS_VERSION}")
-            else()
-              set (suffixes "include/python${_PGPS_VERSION}")
-            endif()
-            list (APPEND path_suffixes ${suffixes} include)
-          endif()
-        endforeach()
-      endif()
-    elseif (implementation STREQUAL "IronPython")
-      if (_PGPS_INTERPRETER OR _PGPS_COMPILER)
-        foreach (version IN LISTS _PGPS_VERSION)
-          list (APPEND path_suffixes "share/ironpython${version}")
-        endforeach()
-        list (APPEND path_suffixes ${_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES})
-      endif()
-    elseif (implementation STREQUAL "PyPy")
-      if (_PGPS_INTERPRETER)
-        list (APPEND path_suffixes ${_${_PYTHON_PREFIX}_PYPY_EXECUTABLE_PATH_SUFFIXES})
-      elseif (_PGPS_LIBRARY)
-        list (APPEND path_suffixes ${_${_PYTHON_PREFIX}_PYPY_LIBRARY_PATH_SUFFIXES})
-      elseif (_PGPS_INCLUDE)
-        list (APPEND path_suffixes ${_${_PYTHON_PREFIX}_PYPY_INCLUDE_PATH_SUFFIXES})
-      endif()
-    endif()
-  endforeach()
-  list (REMOVE_DUPLICATES path_suffixes)
-
-  set (${_PYTHON_PGPS_PATH_SUFFIXES} ${path_suffixes} PARENT_SCOPE)
-endfunction()
-
-function (_PYTHON_GET_NAMES _PYTHON_PGN_NAMES)
-  cmake_parse_arguments (PARSE_ARGV 1 _PGN "POSIX;INTERPRETER;COMPILER;CONFIG;LIBRARY;WIN32;DEBUG" "" "IMPLEMENTATIONS;VERSION")
-
-  if (NOT _PGN_IMPLEMENTATIONS)
-    set (_PGN_IMPLEMENTATIONS ${_${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS})
-  endif()
-
-  set (names)
-
-  foreach (implementation IN LISTS _PGN_IMPLEMENTATIONS)
-    if (implementation STREQUAL "CPython")
-      foreach (version IN LISTS _PGN_VERSION)
-        if (_PGN_WIN32)
-          string (REPLACE "." "" version_no_dots ${version})
-
-          set (name python${version_no_dots})
-          if (_PGN_DEBUG)
-            string (APPEND name "_d")
-          endif()
-
-          list (APPEND names "${name}")
-        endif()
-
-        if (_PGN_POSIX)
-          if (DEFINED _${_PYTHON_PREFIX}_ABIFLAGS)
-            set (abi "${_${_PYTHON_PREFIX}_ABIFLAGS}")
-          else()
-            if (_PGN_INTERPRETER OR _PGN_CONFIG)
-              set (abi "")
-            else()
-              set (abi "mu" "m" "u" "")
-            endif()
-          endif()
-
-          if (abi)
-            if (_PGN_CONFIG AND DEFINED CMAKE_LIBRARY_ARCHITECTURE)
-              set (abinames "${abi}")
-              list (TRANSFORM abinames PREPEND "${CMAKE_LIBRARY_ARCHITECTURE}-python${version}")
-              list (TRANSFORM abinames APPEND "-config")
-              list (APPEND names ${abinames})
-            endif()
-            set (abinames "${abi}")
-            list (TRANSFORM abinames PREPEND "python${version}")
-            if (_PGN_CONFIG)
-              list (TRANSFORM abinames APPEND "-config")
-            endif()
-            list (APPEND names ${abinames})
-          else()
-            unset (abinames)
-            if (_PGN_CONFIG AND DEFINED CMAKE_LIBRARY_ARCHITECTURE)
-              set (abinames "${CMAKE_LIBRARY_ARCHITECTURE}-python${version}")
-            endif()
-            list (APPEND abinames "python${version}")
-            if (_PGN_CONFIG)
-              list (TRANSFORM abinames APPEND "-config")
-            endif()
-            list (APPEND names ${abinames})
-          endif()
-        endif()
-      endforeach()
-      if (_PGN_INTERPRETER)
-        list (APPEND names python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR} python)
-      endif()
-    elseif (implementation STREQUAL "IronPython")
-      if (_PGN_INTERPRETER)
-        if (NOT CMAKE_SYSTEM_NAME STREQUAL "Linux")
-          # Do not use wrapper script on Linux because it is buggy: -c interpreter option cannot be used
-          foreach (version IN LISTS _PGN_VERSION)
-            list (APPEND names "ipy${version}")
-          endforeach()
-        endif()
-        list (APPEND names ${_${_PYTHON_PREFIX}_IRON_PYTHON_INTERPRETER_NAMES})
-      elseif (_PGN_COMPILER)
-        list (APPEND names ${_${_PYTHON_PREFIX}_IRON_PYTHON_COMPILER_NAMES})
-      endif()
-    elseif (implementation STREQUAL "PyPy")
-      if (_PGN_INTERPRETER)
-        list (APPEND names ${_${_PYTHON_PREFIX}_PYPY_NAMES})
-      elseif (_PGN_LIBRARY)
-        if (_PGN_WIN32)
-          foreach (version IN LISTS _PGN_VERSION)
-            string (REPLACE "." "" version_no_dots ${version})
-
-            set (name "python${version_no_dots}")
-            if (_PGN_DEBUG)
-              string (APPEND name "_d")
-            endif()
-            list (APPEND names "${name}")
-          endforeach()
-        endif()
-        list (APPEND names ${_${_PYTHON_PREFIX}_PYPY_LIB_NAMES})
-      endif()
-    endif()
-  endforeach()
-
-  set (${_PYTHON_PGN_NAMES} ${names} PARENT_SCOPE)
-endfunction()
-
-function (_PYTHON_GET_CONFIG_VAR _PYTHON_PGCV_VALUE NAME)
-  unset (${_PYTHON_PGCV_VALUE} PARENT_SCOPE)
-
-  if (NOT NAME MATCHES "^(PREFIX|ABIFLAGS|CONFIGDIR|INCLUDES|LIBS|SOABI)$")
-    return()
-  endif()
-
-  if (_${_PYTHON_PREFIX}_CONFIG)
-    if (NAME STREQUAL "SOABI")
-      set (config_flag "--extension-suffix")
-    else()
-      set (config_flag "--${NAME}")
-    endif()
-    string (TOLOWER "${config_flag}" config_flag)
-    execute_process (COMMAND "${_${_PYTHON_PREFIX}_CONFIG}" ${config_flag}
-                     RESULT_VARIABLE _result
-                     OUTPUT_VARIABLE _values
-                     ERROR_QUIET
-                     OUTPUT_STRIP_TRAILING_WHITESPACE)
-    if (_result)
-      unset (_values)
-    else()
-      if (NAME STREQUAL "INCLUDES")
-        # do some clean-up
-        string (REGEX MATCHALL "(-I|-iwithsysroot)[ ]*[^ ]+" _values "${_values}")
-        string (REGEX REPLACE "(-I|-iwithsysroot)[ ]*" "" _values "${_values}")
-        list (REMOVE_DUPLICATES _values)
-      elseif (NAME STREQUAL "SOABI")
-        # clean-up: remove prefix character and suffix
-        string (REGEX REPLACE "^[.-](.+)(${CMAKE_SHARED_LIBRARY_SUFFIX}|\\.(so|pyd))$" "\\1" _values "${_values}")
-      endif()
-    endif()
-  endif()
-
-  if (_${_PYTHON_PREFIX}_EXECUTABLE AND NOT CMAKE_CROSSCOMPILING)
-    if (NAME STREQUAL "PREFIX")
-      execute_process (COMMAND ${_${_PYTHON_PREFIX}_INTERPRETER_LAUNCHER} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c "import sys\ntry:\n   from distutils import sysconfig\n   sys.stdout.write(';'.join([sysconfig.PREFIX,sysconfig.EXEC_PREFIX,sysconfig.BASE_EXEC_PREFIX]))\nexcept Exception:\n   import sysconfig\n   sys.stdout.write(';'.join([sysconfig.get_config_var('base') or '', sysconfig.get_config_var('installed_base') or '']))"
-                       RESULT_VARIABLE _result
-                       OUTPUT_VARIABLE _values
-                       ERROR_QUIET
-                       OUTPUT_STRIP_TRAILING_WHITESPACE)
-      if (_result)
-        unset (_values)
-      else()
-        list (REMOVE_DUPLICATES _values)
-      endif()
-    elseif (NAME STREQUAL "INCLUDES")
-      if (WIN32)
-        set (_scheme "nt")
-      else()
-        set (_scheme "posix_prefix")
-      endif()
-      execute_process (COMMAND ${_${_PYTHON_PREFIX}_INTERPRETER_LAUNCHER} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
-                               "import sys\ntry:\n   from distutils import sysconfig\n   sys.stdout.write(';'.join([sysconfig.get_python_inc(plat_specific=True),sysconfig.get_python_inc(plat_specific=False)]))\nexcept Exception:\n   import sysconfig\n   sys.stdout.write(';'.join([sysconfig.get_path('platinclude'),sysconfig.get_path('platinclude','${_scheme}'),sysconfig.get_path('include'),sysconfig.get_path('include','${_scheme}')]))"
-                       RESULT_VARIABLE _result
-                       OUTPUT_VARIABLE _values
-                       ERROR_QUIET
-                       OUTPUT_STRIP_TRAILING_WHITESPACE)
-      if (_result)
-        unset (_values)
-      else()
-        list (REMOVE_DUPLICATES _values)
-      endif()
-    elseif (NAME STREQUAL "SOABI")
-      execute_process (COMMAND ${_${_PYTHON_PREFIX}_INTERPRETER_LAUNCHER} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
-                               "import sys\ntry:\n   from distutils import sysconfig\n   sys.stdout.write(';'.join([sysconfig.get_config_var('SOABI') or '',sysconfig.get_config_var('EXT_SUFFIX') or '']))\nexcept Exception:\n   import sysconfig;sys.stdout.write(';'.join([sysconfig.get_config_var('SOABI') or '',sysconfig.get_config_var('EXT_SUFFIX') or '']))"
-                       RESULT_VARIABLE _result
-                       OUTPUT_VARIABLE _soabi
-                       ERROR_QUIET
-                       OUTPUT_STRIP_TRAILING_WHITESPACE)
-      if (_result)
-        unset (_values)
-      else()
-        foreach (_item IN LISTS _soabi)
-          if (_item)
-            set (_values "${_item}")
-            break()
-          endif()
-        endforeach()
-        if (_values)
-          # clean-up: remove prefix character and suffix
-          string (REGEX REPLACE "^[.-](.+)(${CMAKE_SHARED_LIBRARY_SUFFIX}|\\.(so|pyd))$" "\\1" _values "${_values}")
-        endif()
-      endif()
-    else()
-      set (config_flag "${NAME}")
-      if (NAME STREQUAL "CONFIGDIR")
-        set (config_flag "LIBPL")
-      endif()
-      execute_process (COMMAND ${_${_PYTHON_PREFIX}_INTERPRETER_LAUNCHER} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
-                               "import sys\ntry:\n   from distutils import sysconfig\n   sys.stdout.write(sysconfig.get_config_var('${config_flag}'))\nexcept Exception:\n   import sysconfig\n   sys.stdout.write(sysconfig.get_config_var('${config_flag}'))"
-                       RESULT_VARIABLE _result
-                       OUTPUT_VARIABLE _values
-                       ERROR_QUIET
-                       OUTPUT_STRIP_TRAILING_WHITESPACE)
-      if (_result)
-        unset (_values)
-      endif()
-    endif()
-  endif()
-
-  if (config_flag STREQUAL "ABIFLAGS")
-    set (${_PYTHON_PGCV_VALUE} "${_values}" PARENT_SCOPE)
-    return()
-  endif()
-
-  if (NOT _values OR _values STREQUAL "None")
-    return()
-  endif()
-
-  if (NAME STREQUAL "LIBS")
-    # do some clean-up
-    string (REGEX MATCHALL "-(l|framework)[ ]*[^ ]+" _values "${_values}")
-    # remove elements relative to python library itself
-    list (FILTER _values EXCLUDE REGEX "-lpython")
-    list (REMOVE_DUPLICATES _values)
-  endif()
-
-  if (WIN32 AND NAME MATCHES "^(PREFIX|CONFIGDIR|INCLUDES)$")
-    file (TO_CMAKE_PATH "${_values}" _values)
-  endif()
-
-  set (${_PYTHON_PGCV_VALUE} "${_values}" PARENT_SCOPE)
-endfunction()
-
-function (_PYTHON_GET_VERSION)
-  cmake_parse_arguments (PARSE_ARGV 0 _PGV "LIBRARY;INCLUDE" "PREFIX" "")
-
-  unset (${_PGV_PREFIX}VERSION PARENT_SCOPE)
-  unset (${_PGV_PREFIX}VERSION_MAJOR PARENT_SCOPE)
-  unset (${_PGV_PREFIX}VERSION_MINOR PARENT_SCOPE)
-  unset (${_PGV_PREFIX}VERSION_PATCH PARENT_SCOPE)
-  unset (${_PGV_PREFIX}ABI PARENT_SCOPE)
-
-  if (_PGV_LIBRARY)
-    # retrieve version and abi from library name
-    if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE)
-      # extract version from library name
-      if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE MATCHES "python([23])([0-9]+)")
-        set (${_PGV_PREFIX}VERSION_MAJOR "${CMAKE_MATCH_1}" PARENT_SCOPE)
-        set (${_PGV_PREFIX}VERSION_MINOR "${CMAKE_MATCH_2}" PARENT_SCOPE)
-        set (${_PGV_PREFIX}VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}" PARENT_SCOPE)
-        set (${_PGV_PREFIX}ABI "" PARENT_SCOPE)
-      elseif (_${_PYTHON_PREFIX}_LIBRARY_RELEASE MATCHES "python([23])\\.([0-9]+)([dmu]*)")
-        set (${_PGV_PREFIX}VERSION_MAJOR "${CMAKE_MATCH_1}" PARENT_SCOPE)
-        set (${_PGV_PREFIX}VERSION_MINOR "${CMAKE_MATCH_2}" PARENT_SCOPE)
-        set (${_PGV_PREFIX}VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}" PARENT_SCOPE)
-        set (${_PGV_PREFIX}ABI "${CMAKE_MATCH_3}" PARENT_SCOPE)
-      elseif (_${_PYTHON_PREFIX}_LIBRARY_RELEASE MATCHES "pypy(3)?")
-        set (version "${CMAKE_MATCH_1}")
-        if (version EQUAL "3")
-          set (${_PGV_PREFIX}VERSION_MAJOR "3" PARENT_SCOPE)
-          set (${_PGV_PREFIX}VERSION "3" PARENT_SCOPE)
-        else()
-          set (${_PGV_PREFIX}VERSION_MAJOR "2" PARENT_SCOPE)
-          set (${_PGV_PREFIX}VERSION "2" PARENT_SCOPE)
-        endif()
-        set (${_PGV_PREFIX}ABI "" PARENT_SCOPE)
-      endif()
-    endif()
-  else()
-    if (_${_PYTHON_PREFIX}_INCLUDE_DIR)
-      # retrieve version from header file
-      file (STRINGS "${_${_PYTHON_PREFIX}_INCLUDE_DIR}/patchlevel.h" version
-            REGEX "^#define[ \t]+PY_VERSION[ \t]+\"[^\"]+\"")
-      string (REGEX REPLACE "^#define[ \t]+PY_VERSION[ \t]+\"([^\"]+)\".*" "\\1"
-                            version "${version}")
-      string (REGEX MATCHALL "[0-9]+" versions "${version}")
-      list (GET versions 0 version_major)
-      list (GET versions 1 version_minor)
-      list (GET versions 2 version_patch)
-
-      set (${_PGV_PREFIX}VERSION "${version_major}.${version_minor}.${version_patch}" PARENT_SCOPE)
-      set (${_PGV_PREFIX}VERSION_MAJOR ${version_major} PARENT_SCOPE)
-      set (${_PGV_PREFIX}VERSION_MINOR ${version_minor} PARENT_SCOPE)
-      set (${_PGV_PREFIX}VERSION_PATCH ${version_patch} PARENT_SCOPE)
-
-      # compute ABI flags
-      if (version_major VERSION_GREATER "2")
-        file (STRINGS "${_${_PYTHON_PREFIX}_INCLUDE_DIR}/pyconfig.h" config REGEX "(Py_DEBUG|WITH_PYMALLOC|Py_UNICODE_SIZE|MS_WIN32)")
-        set (abi)
-        if (config MATCHES "#[ ]*define[ ]+MS_WIN32")
-          # ABI not used on Windows
-          set (abi "")
-        else()
-          if (config MATCHES "#[ ]*define[ ]+Py_DEBUG[ ]+1")
-            string (APPEND abi "d")
-          endif()
-          if (config MATCHES "#[ ]*define[ ]+WITH_PYMALLOC[ ]+1")
-            string (APPEND abi "m")
-          endif()
-          if (config MATCHES "#[ ]*define[ ]+Py_UNICODE_SIZE[ ]+4")
-            string (APPEND abi "u")
-          endif()
-          set (${_PGV_PREFIX}ABI "${abi}" PARENT_SCOPE)
-        endif()
-      else()
-        # ABI not supported
-        set (${_PGV_PREFIX}ABI "" PARENT_SCOPE)
-      endif()
-    endif()
-  endif()
-endfunction()
-
-function (_PYTHON_GET_LAUNCHER _PYTHON_PGL_NAME)
-  cmake_parse_arguments (PARSE_ARGV 1 _PGL "INTERPRETER;COMPILER" "" "")
-
-  unset ({_PYTHON_PGL_NAME} PARENT_SCOPE)
-
-  if ((_PGL_INTERPRETER AND NOT _${_PYTHON_PREFIX}_EXECUTABLE)
-      OR (_PGL_COMPILER AND NOT _${_PYTHON_PREFIX}_COMPILER))
-    return()
-  endif()
-
-  if ("IronPython" IN_LIST _${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS
-      AND NOT SYSTEM_NAME MATCHES "Windows|Linux")
-    if (_PGL_INTERPRETER)
-      get_filename_component (name "${_${_PYTHON_PREFIX}_EXECUTABLE}" NAME)
-      get_filename_component (ext "${_${_PYTHON_PREFIX}_EXECUTABLE}" LAST_EXT)
-      if (name IN_LIST _${_PYTHON_PREFIX}_IRON_PYTHON_INTERPRETER_NAMES
-          AND ext STREQUAL ".exe")
-        set (${_PYTHON_PGL_NAME} "${${_PYTHON_PREFIX}_DOTNET_LAUNCHER}" PARENT_SCOPE)
-      endif()
-    else()
-      get_filename_component (name "${_${_PYTHON_PREFIX}_COMPILER}" NAME)
-      get_filename_component (ext "${_${_PYTHON_PREFIX}_COMPILER}" LAST_EXT)
-      if (name IN_LIST _${_PYTHON_PREFIX}_IRON_PYTHON_COMPILER_NAMES
-          AND ext STREQUAL ".exe")
-        set (${_PYTHON_PGL_NAME} "${${_PYTHON_PREFIX}_DOTNET_LAUNCHER}" PARENT_SCOPE)
-      endif()
-    endif()
-  endif()
-endfunction()
-
-
-function (_PYTHON_VALIDATE_INTERPRETER)
-  if (NOT _${_PYTHON_PREFIX}_EXECUTABLE)
-    return()
-  endif()
-
-  cmake_parse_arguments (PARSE_ARGV 0 _PVI "EXACT;CHECK_EXISTS" "" "")
-  if (_PVI_UNPARSED_ARGUMENTS)
-    set (expected_version "${_PVI_UNPARSED_ARGUMENTS}")
-  else()
-    unset (expected_version)
-  endif()
-
-  if (_PVI_CHECK_EXISTS AND NOT EXISTS "${_${_PYTHON_PREFIX}_EXECUTABLE}")
-    # interpreter does not exist anymore
-    set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE "Cannot find the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"" PARENT_SCOPE)
-    set_property (CACHE _${_PYTHON_PREFIX}_EXECUTABLE PROPERTY VALUE "${_PYTHON_PREFIX}_EXECUTABLE-NOTFOUND")
-    return()
-  endif()
-
-  _python_get_launcher (launcher INTERPRETER)
-
-  # validate ABI compatibility
-  if (DEFINED _${_PYTHON_PREFIX}_FIND_ABI)
-    execute_process (COMMAND ${launcher} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
-                             "import sys; sys.stdout.write(sys.abiflags)"
-                     RESULT_VARIABLE result
-                     OUTPUT_VARIABLE abi
-                     ERROR_QUIET
-                     OUTPUT_STRIP_TRAILING_WHITESPACE)
-    if (result)
-      # assume ABI is not supported
-      set (abi "")
-    endif()
-    if (NOT abi IN_LIST _${_PYTHON_PREFIX}_ABIFLAGS)
-      # incompatible ABI
-      set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE "Wrong ABI for the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"" PARENT_SCOPE)
-      set_property (CACHE _${_PYTHON_PREFIX}_EXECUTABLE PROPERTY VALUE "${_PYTHON_PREFIX}_EXECUTABLE-NOTFOUND")
-      return()
-    endif()
-  endif()
-
-  get_filename_component (python_name "${_${_PYTHON_PREFIX}_EXECUTABLE}" NAME)
-
-  if (expected_version)
-    if (NOT python_name STREQUAL "python${expected_version}${abi}${CMAKE_EXECUTABLE_SUFFIX}")
-      # compute number of components for version
-      string (REGEX REPLACE "[^.]" "" dots "${expected_version}")
-      # add one dot because there is one dot less than there are components
-      string (LENGTH "${dots}." count)
-      if (count GREATER 3)
-        set (count 3)
-      endif()
-
-      # executable found must have a specific version
-      execute_process (COMMAND ${launcher} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
-                               "import sys; sys.stdout.write('.'.join([str(x) for x in sys.version_info[:${count}]]))"
-                       RESULT_VARIABLE result
-                       OUTPUT_VARIABLE version
-                       ERROR_QUIET
-                       OUTPUT_STRIP_TRAILING_WHITESPACE)
-      if (result)
-        # interpreter is not usable
-        set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE "Cannot use the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"" PARENT_SCOPE)
-        set_property (CACHE _${_PYTHON_PREFIX}_EXECUTABLE PROPERTY VALUE "${_PYTHON_PREFIX}_EXECUTABLE-NOTFOUND")
-      else()
-        if (_PVI_EXACT AND NOT version VERSION_EQUAL expected_version)
-          # interpreter has wrong version
-          set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE "Wrong version for the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"" PARENT_SCOPE)
-          set_property (CACHE _${_PYTHON_PREFIX}_EXECUTABLE PROPERTY VALUE "${_PYTHON_PREFIX}_EXECUTABLE-NOTFOUND")
-        else()
-          # check that version is OK
-          string(REGEX REPLACE "^([0-9]+)\\.?.*$" "\\1" major_version "${version}")
-          string(REGEX REPLACE "^([0-9]+)\\.?.*$" "\\1" expected_major_version "${expected_version}")
-          if (NOT major_version VERSION_EQUAL expected_major_version
-              OR NOT version VERSION_GREATER_EQUAL expected_version)
-            set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE "Wrong version for the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"" PARENT_SCOPE)
-            set_property (CACHE _${_PYTHON_PREFIX}_EXECUTABLE PROPERTY VALUE "${_PYTHON_PREFIX}_EXECUTABLE-NOTFOUND")
-          endif()
-        endif()
-      endif()
-      if (NOT _${_PYTHON_PREFIX}_EXECUTABLE)
-        return()
-      endif()
-    endif()
-  else()
-    if (NOT python_name STREQUAL "python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR}${CMAKE_EXECUTABLE_SUFFIX}")
-      # executable found do not have version in name
-      # ensure major version is OK
-      execute_process (COMMAND ${launcher} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
-                               "import sys; sys.stdout.write(str(sys.version_info[0]))"
-                       RESULT_VARIABLE result
-                       OUTPUT_VARIABLE version
-                       ERROR_QUIET
-                       OUTPUT_STRIP_TRAILING_WHITESPACE)
-      if (result OR NOT version EQUAL _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR)
-        # interpreter not usable or has wrong major version
-        if (result)
-          set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE "Cannot use the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"" PARENT_SCOPE)
-        else()
-          set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE "Wrong major version for the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"" PARENT_SCOPE)
-        endif()
-        set_property (CACHE _${_PYTHON_PREFIX}_EXECUTABLE PROPERTY VALUE "${_PYTHON_PREFIX}_EXECUTABLE-NOTFOUND")
-        return()
-      endif()
-    endif()
-  endif()
-
-  if (CMAKE_SIZEOF_VOID_P AND ("Development.Module" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
-        OR "Development.Embed" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
-      AND NOT CMAKE_CROSSCOMPILING)
-    # In this case, interpreter must have same architecture as environment
-    execute_process (COMMAND ${launcher} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
-                             "import sys, struct; sys.stdout.write(str(struct.calcsize(\"P\")))"
-                     RESULT_VARIABLE result
-                     OUTPUT_VARIABLE size
-                     ERROR_QUIET
-                     OUTPUT_STRIP_TRAILING_WHITESPACE)
-    if (result OR NOT size EQUAL CMAKE_SIZEOF_VOID_P)
-      # interpreter not usable or has wrong architecture
-      if (result)
-        set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE "Cannot use the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"" PARENT_SCOPE)
-      else()
-        set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE "Wrong architecture for the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"" PARENT_SCOPE)
-      endif()
-      set_property (CACHE _${_PYTHON_PREFIX}_EXECUTABLE PROPERTY VALUE "${_PYTHON_PREFIX}_EXECUTABLE-NOTFOUND")
-      return()
-    endif()
-  endif()
-endfunction()
-
-
-function (_PYTHON_VALIDATE_COMPILER)
-  if (NOT _${_PYTHON_PREFIX}_COMPILER)
-    return()
-  endif()
-
-  cmake_parse_arguments (PARSE_ARGV 0 _PVC "EXACT;CHECK_EXISTS" "" "")
-  if (_PVC_UNPARSED_ARGUMENTS)
-    set (major_version FALSE)
-    set (expected_version "${_PVC_UNPARSED_ARGUMENTS}")
-  else()
-    set (major_version TRUE)
-    set (expected_version "${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR}")
-    set (_PVC_EXACT TRUE)
-  endif()
-
-  if (_PVC_CHECK_EXISTS AND NOT EXISTS "${_${_PYTHON_PREFIX}_COMPILER}")
-    # Compiler does not exist anymore
-    set (_${_PYTHON_PREFIX}_Compiler_REASON_FAILURE "Cannot find the compiler \"${_${_PYTHON_PREFIX}_COMPILER}\"" PARENT_SCOPE)
-    set_property (CACHE _${_PYTHON_PREFIX}_COMPILER PROPERTY VALUE "${_PYTHON_PREFIX}_COMPILER-NOTFOUND")
-    return()
-  endif()
-
-  _python_get_launcher (launcher COMPILER)
-
-  # retrieve python environment version from compiler
-  set (working_dir "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/PythonCompilerVersion.dir")
-  if (major_version)
-    # check only major version
-    file (WRITE "${working_dir}/version.py" "import sys; sys.stdout.write(str(sys.version_info[0]))")
-  else()
-    # compute number of components for version
-    string (REGEX REPLACE "[^.]" "" dots "${expected_version}")
-    # add one dot because there is one dot less than there are components
-    string (LENGTH "${dots}." count)
-    if (count GREATER 3)
-      set (count 3)
-    endif()
-    file (WRITE "${working_dir}/version.py" "import sys; sys.stdout.write('.'.join([str(x) for x in sys.version_info[:${count}]]))\n")
-  endif()
-  execute_process (COMMAND ${launcher} "${_${_PYTHON_PREFIX}_COMPILER}"
-                           ${_${_PYTHON_PREFIX}_IRON_PYTHON_COMPILER_ARCH_FLAGS}
-                           /target:exe /embed "${working_dir}/version.py"
-                   WORKING_DIRECTORY "${working_dir}"
-                   OUTPUT_QUIET
-                   ERROR_QUIET
-                   OUTPUT_STRIP_TRAILING_WHITESPACE)
-  get_filename_component (ir_dir "${_${_PYTHON_PREFIX}_COMPILER}" DIRECTORY)
-  execute_process (COMMAND "${CMAKE_COMMAND}" -E env "MONO_PATH=${ir_dir}"
-                                              ${${_PYTHON_PREFIX}_DOTNET_LAUNCHER} "${working_dir}/version.exe"
-                   WORKING_DIRECTORY "${working_dir}"
-                   RESULT_VARIABLE result
-                   OUTPUT_VARIABLE version
-                   ERROR_QUIET)
-  file (REMOVE_RECURSE "${working_dir}")
-  if (result)
-    # compiler is not usable
-    set (_${_PYTHON_PREFIX}_Compiler_REASON_FAILURE "Cannot use the compiler \"${_${_PYTHON_PREFIX}_COMPILER}\"" PARENT_SCOPE)
-    set_property (CACHE _${_PYTHON_PREFIX}_COMPILER PROPERTY VALUE "${_PYTHON_PREFIX}_COMPILER-NOTFOUND")
-  elseif ((_PVC_EXACT AND NOT version VERSION_EQUAL expected_version)
-          OR NOT version VERSION_GREATER_EQUAL expected_version)
-    # Compiler has wrong version
-    set (_${_PYTHON_PREFIX}_Compiler_REASON_FAILURE "Wrong version for the compiler \"${_${_PYTHON_PREFIX}_COMPILER}\"" PARENT_SCOPE)
-    set_property (CACHE _${_PYTHON_PREFIX}_COMPILER PROPERTY VALUE "${_PYTHON_PREFIX}_COMPILER-NOTFOUND")
-  endif()
-endfunction()
-
-
-function (_PYTHON_VALIDATE_LIBRARY)
-  if (NOT _${_PYTHON_PREFIX}_LIBRARY_RELEASE)
-    unset (_${_PYTHON_PREFIX}_LIBRARY_DEBUG)
-    return()
-  endif()
-
-  cmake_parse_arguments (PARSE_ARGV 0 _PVL "EXACT;CHECK_EXISTS" "" "")
-  if (_PVL_UNPARSED_ARGUMENTS)
-    set (expected_version ${_PVL_UNPARSED_ARGUMENTS})
-  else()
-    unset (expected_version)
-  endif()
-
-  if (_PVL_CHECK_EXISTS AND NOT EXISTS "${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}")
-    # library does not exist anymore
-    set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE "Cannot find the library \"${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}\"" PARENT_SCOPE)
-    set_property (CACHE _${_PYTHON_PREFIX}_LIBRARY_RELEASE PROPERTY VALUE "${_PYTHON_PREFIX}_LIBRARY_RELEASE-NOTFOUND")
-    if (WIN32)
-      set_property (CACHE _${_PYTHON_PREFIX}_LIBRARY_DEBUG PROPERTY VALUE "${_PYTHON_PREFIX}_LIBRARY_DEBUG-NOTFOUND")
-    endif()
-    set_property (CACHE _${_PYTHON_PREFIX}_INCLUDE_DIR PROPERTY VALUE "${_PYTHON_PREFIX}_INCLUDE_DIR-NOTFOUND")
-    return()
-  endif()
-
-  # retrieve version and abi from library name
-  _python_get_version (LIBRARY PREFIX lib_)
-
-  if (DEFINED _${_PYTHON_PREFIX}_FIND_ABI AND NOT lib_ABI IN_LIST _${_PYTHON_PREFIX}_ABIFLAGS)
-    # incompatible ABI
-    set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE "Wrong ABI for the library \"${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}\"" PARENT_SCOPE)
-    set_property (CACHE _${_PYTHON_PREFIX}_LIBRARY_RELEASE PROPERTY VALUE "${_PYTHON_PREFIX}_LIBRARY_RELEASE-NOTFOUND")
-  else()
-    if (expected_version)
-      # library have only major.minor information
-      string (REGEX MATCH "[0-9](\\.[0-9]+)?" version "${expected_version}")
-      if ((_PVL_EXACT AND NOT lib_VERSION VERSION_EQUAL version) OR (lib_VERSION VERSION_LESS version))
-        # library has wrong version
-        set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE "Wrong version for the library \"${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}\"" PARENT_SCOPE)
-        set_property (CACHE _${_PYTHON_PREFIX}_LIBRARY_RELEASE PROPERTY VALUE "${_PYTHON_PREFIX}_LIBRARY_RELEASE-NOTFOUND")
-      endif()
-    else()
-      if (NOT lib_VERSION_MAJOR VERSION_EQUAL _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR)
-        # library has wrong major version
-        set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE "Wrong major version for the library \"${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}\"" PARENT_SCOPE)
-        set_property (CACHE _${_PYTHON_PREFIX}_LIBRARY_RELEASE PROPERTY VALUE "${_PYTHON_PREFIX}_LIBRARY_RELEASE-NOTFOUND")
-      endif()
-    endif()
-  endif()
-
-  if (NOT _${_PYTHON_PREFIX}_LIBRARY_RELEASE)
-    if (WIN32)
-      set_property (CACHE _${_PYTHON_PREFIX}_LIBRARY_DEBUG PROPERTY VALUE "${_PYTHON_PREFIX}_LIBRARY_DEBUG-NOTFOUND")
-    endif()
-    unset (_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE CACHE)
-    unset (_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG CACHE)
-    set_property (CACHE _${_PYTHON_PREFIX}_INCLUDE_DIR PROPERTY VALUE "${_PYTHON_PREFIX}_INCLUDE_DIR-NOTFOUND")
-  endif()
-endfunction()
-
-
-function (_PYTHON_VALIDATE_INCLUDE_DIR)
-  if (NOT _${_PYTHON_PREFIX}_INCLUDE_DIR)
-    return()
-  endif()
-
-  cmake_parse_arguments (PARSE_ARGV 0 _PVID "EXACT;CHECK_EXISTS" "" "")
-  if (_PVID_UNPARSED_ARGUMENTS)
-    set (expected_version ${_PVID_UNPARSED_ARGUMENTS})
-  else()
-    unset (expected_version)
-  endif()
-
-  if (_PVID_CHECK_EXISTS AND NOT EXISTS "${_${_PYTHON_PREFIX}_INCLUDE_DIR}")
-    # include file does not exist anymore
-    set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE "Cannot find the directory \"${_${_PYTHON_PREFIX}_INCLUDE_DIR}\"" PARENT_SCOPE)
-    set_property (CACHE _${_PYTHON_PREFIX}_INCLUDE_DIR PROPERTY VALUE "${_PYTHON_PREFIX}_INCLUDE_DIR-NOTFOUND")
-    return()
-  endif()
-
-  # retrieve version from header file
-  _python_get_version (INCLUDE PREFIX inc_)
-
-  if (DEFINED _${_PYTHON_PREFIX}_FIND_ABI AND NOT inc_ABI IN_LIST _${_PYTHON_PREFIX}_ABIFLAGS)
-    # incompatible ABI
-    set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE "Wrong ABI for the directory \"${_${_PYTHON_PREFIX}_INCLUDE_DIR}\"" PARENT_SCOPE)
-    set_property (CACHE _${_PYTHON_PREFIX}_INCLUDE_DIR PROPERTY VALUE "${_PYTHON_PREFIX}_INCLUDE_DIR-NOTFOUND")
-  else()
-    if (expected_version)
-      if ((_PVID_EXACT AND NOT inc_VERSION VERSION_EQUAL expected_version) OR (inc_VERSION VERSION_LESS expected_version))
-        # include dir has wrong version
-        set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE "Wrong version for the directory \"${_${_PYTHON_PREFIX}_INCLUDE_DIR}\"" PARENT_SCOPE)
-        set_property (CACHE _${_PYTHON_PREFIX}_INCLUDE_DIR PROPERTY VALUE "${_PYTHON_PREFIX}_INCLUDE_DIR-NOTFOUND")
-      endif()
-    else()
-      if (NOT inc_VERSION_MAJOR VERSION_EQUAL _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR)
-        # include dir has wrong major version
-        set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE "Wrong major version for the directory \"${_${_PYTHON_PREFIX}_INCLUDE_DIR}\"" PARENT_SCOPE)
-        set_property (CACHE _${_PYTHON_PREFIX}_INCLUDE_DIR PROPERTY VALUE "${_PYTHON_PREFIX}_INCLUDE_DIR-NOTFOUND")
-      endif()
-    endif()
-  endif()
-endfunction()
-
-
-function (_PYTHON_FIND_RUNTIME_LIBRARY _PYTHON_LIB)
-  string (REPLACE "_RUNTIME" "" _PYTHON_LIB "${_PYTHON_LIB}")
-  # look at runtime part on systems supporting it
-  if (CMAKE_SYSTEM_NAME STREQUAL "Windows" OR
-      (CMAKE_SYSTEM_NAME MATCHES "MSYS|CYGWIN"
-        AND ${_PYTHON_LIB} MATCHES "${CMAKE_IMPORT_LIBRARY_SUFFIX}$"))
-    set (CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_SHARED_LIBRARY_SUFFIX})
-    # MSYS has a special syntax for runtime libraries
-    if (CMAKE_SYSTEM_NAME MATCHES "MSYS")
-      list (APPEND CMAKE_FIND_LIBRARY_PREFIXES "msys-")
-    endif()
-    find_library (${ARGV})
-  endif()
-endfunction()
-
-
-function (_PYTHON_SET_LIBRARY_DIRS _PYTHON_SLD_RESULT)
-  unset (_PYTHON_DIRS)
-  set (_PYTHON_LIBS ${ARGN})
-  foreach (_PYTHON_LIB IN LISTS _PYTHON_LIBS)
-    if (${_PYTHON_LIB})
-      get_filename_component (_PYTHON_DIR "${${_PYTHON_LIB}}" DIRECTORY)
-      list (APPEND _PYTHON_DIRS "${_PYTHON_DIR}")
-    endif()
-  endforeach()
-  list (REMOVE_DUPLICATES _PYTHON_DIRS)
-  set (${_PYTHON_SLD_RESULT} ${_PYTHON_DIRS} PARENT_SCOPE)
-endfunction()
-
-
-function (_PYTHON_SET_DEVELOPMENT_MODULE_FOUND module)
-  if ("Development.${module}" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
-    string(TOUPPER "${module}" id)
-    set (module_found TRUE)
-
-    if ("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS
-        AND NOT _${_PYTHON_PREFIX}_LIBRARY_RELEASE)
-      set (module_found FALSE)
-    endif()
-    if ("INCLUDE_DIR" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS
-        AND NOT _${_PYTHON_PREFIX}_INCLUDE_DIR)
-      set (module_found FALSE)
-    endif()
-
-    set (${_PYTHON_PREFIX}_Development.${module}_FOUND ${module_found} PARENT_SCOPE)
-  endif()
-endfunction()
-
-
-# If major version is specified, it must be the same as internal major version
-if (DEFINED ${_PYTHON_PREFIX}_FIND_VERSION_MAJOR
-    AND NOT ${_PYTHON_PREFIX}_FIND_VERSION_MAJOR VERSION_EQUAL _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR)
-  _python_display_failure ("Could NOT find ${_PYTHON_PREFIX}: Wrong major version specified is \"${${_PYTHON_PREFIX}_FIND_VERSION_MAJOR}\", but expected major version is \"${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR}\"")
-endif()
-
-
-# handle components
-if (NOT ${_PYTHON_PREFIX}_FIND_COMPONENTS)
-  set (${_PYTHON_PREFIX}_FIND_COMPONENTS Interpreter)
-  set (${_PYTHON_PREFIX}_FIND_REQUIRED_Interpreter TRUE)
-endif()
-if ("NumPy" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
-  list (APPEND ${_PYTHON_PREFIX}_FIND_COMPONENTS "Interpreter" "Development.Module")
-endif()
-if ("Development" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
-  list (APPEND ${_PYTHON_PREFIX}_FIND_COMPONENTS "Development.Module" "Development.Embed")
-endif()
-list (REMOVE_DUPLICATES ${_PYTHON_PREFIX}_FIND_COMPONENTS)
-foreach (_${_PYTHON_PREFIX}_COMPONENT IN ITEMS Interpreter Compiler Development Development.Module Development.Embed NumPy)
-  set (${_PYTHON_PREFIX}_${_${_PYTHON_PREFIX}_COMPONENT}_FOUND FALSE)
-endforeach()
-if (${_PYTHON_PREFIX}_FIND_REQUIRED_Development)
-  set (${_PYTHON_PREFIX}_FIND_REQUIRED_Development.Module TRUE)
-  set (${_PYTHON_PREFIX}_FIND_REQUIRED_Development.Embed TRUE)
-endif()
-
-unset (_${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
-unset (_${_PYTHON_PREFIX}_FIND_DEVELOPMENT_MODULE_ARTIFACTS)
-unset (_${_PYTHON_PREFIX}_FIND_DEVELOPMENT_EMBED_ARTIFACTS)
-if ("Development.Module" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
-  if (CMAKE_SYSTEM_NAME MATCHES "^(Windows.*|CYGWIN|MSYS)$")
-    list (APPEND _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_MODULE_ARTIFACTS "LIBRARY")
-  endif()
-  list (APPEND _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_MODULE_ARTIFACTS "INCLUDE_DIR")
-endif()
-if ("Development.Embed" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
-  list (APPEND _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_EMBED_ARTIFACTS "LIBRARY" "INCLUDE_DIR")
-endif()
-set (_${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS ${_${_PYTHON_PREFIX}_FIND_DEVELOPMENT_MODULE_ARTIFACTS} ${_${_PYTHON_PREFIX}_FIND_DEVELOPMENT_EMBED_ARTIFACTS})
-list (REMOVE_DUPLICATES _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
-
-# Set versions to search
-## default: search any version
-set (_${_PYTHON_PREFIX}_FIND_VERSIONS ${_${_PYTHON_PREFIX}_VERSIONS})
-unset (_${_PYTHON_PREFIX}_FIND_VERSION_EXACT)
-
-if (${_PYTHON_PREFIX}_FIND_VERSION_COUNT)
-  if (${_PYTHON_PREFIX}_FIND_VERSION_EXACT)
-    set (_${_PYTHON_PREFIX}_FIND_VERSION_EXACT "EXACT")
-    set (_${_PYTHON_PREFIX}_FIND_VERSIONS ${${_PYTHON_PREFIX}_FIND_VERSION_MAJOR}.${${_PYTHON_PREFIX}_FIND_VERSION_MINOR})
-  else()
-    unset (_${_PYTHON_PREFIX}_FIND_VERSIONS)
-    # add all compatible versions
-    foreach (_${_PYTHON_PREFIX}_VERSION IN LISTS _${_PYTHON_PREFIX}_VERSIONS)
-      if (_${_PYTHON_PREFIX}_VERSION VERSION_GREATER_EQUAL "${${_PYTHON_PREFIX}_FIND_VERSION_MAJOR}.${${_PYTHON_PREFIX}_FIND_VERSION_MINOR}")
-        list (APPEND _${_PYTHON_PREFIX}_FIND_VERSIONS ${_${_PYTHON_PREFIX}_VERSION})
-      endif()
-    endforeach()
-  endif()
-endif()
-
-# Set ABIs to search
-## default: search any ABI
-if (_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR VERSION_LESS "3")
-  # ABI not supported
-  unset (_${_PYTHON_PREFIX}_FIND_ABI)
-  set (_${_PYTHON_PREFIX}_ABIFLAGS "")
-else()
-  unset (_${_PYTHON_PREFIX}_FIND_ABI)
-  unset (_${_PYTHON_PREFIX}_ABIFLAGS)
-  if (DEFINED ${_PYTHON_PREFIX}_FIND_ABI)
-    # normalization
-    string (TOUPPER "${${_PYTHON_PREFIX}_FIND_ABI}" _${_PYTHON_PREFIX}_FIND_ABI)
-    list (TRANSFORM _${_PYTHON_PREFIX}_FIND_ABI REPLACE "^(TRUE|Y(ES)?|1)$" "ON")
-    list (TRANSFORM _${_PYTHON_PREFIX}_FIND_ABI REPLACE "^(FALSE|N(O)?|0)$" "OFF")
-    if (NOT _${_PYTHON_PREFIX}_FIND_ABI MATCHES "^(ON|OFF|ANY);(ON|OFF|ANY);(ON|OFF|ANY)$")
-      message (AUTHOR_WARNING "Find${_PYTHON_PREFIX}: ${${_PYTHON_PREFIX}_FIND_ABI}: invalid value for '${_PYTHON_PREFIX}_FIND_ABI'. Ignore it")
-      unset (_${_PYTHON_PREFIX}_FIND_ABI)
-    endif()
-    _python_get_abiflags (_${_PYTHON_PREFIX}_ABIFLAGS)
-  endif()
-endif()
-unset (${_PYTHON_PREFIX}_SOABI)
-
-# Define lookup strategy
-if (_${_PYTHON_PREFIX}_LOOKUP_POLICY STREQUAL "NEW")
-  set (_${_PYTHON_PREFIX}_FIND_STRATEGY "LOCATION")
-else()
-  set (_${_PYTHON_PREFIX}_FIND_STRATEGY "VERSION")
-endif()
-if (DEFINED ${_PYTHON_PREFIX}_FIND_STRATEGY)
-  if (NOT ${_PYTHON_PREFIX}_FIND_STRATEGY MATCHES "^(VERSION|LOCATION)$")
-    message (AUTHOR_WARNING "Find${_PYTHON_PREFIX}: ${${_PYTHON_PREFIX}_FIND_STRATEGY}: invalid value for '${_PYTHON_PREFIX}_FIND_STRATEGY'. 'VERSION' or 'LOCATION' expected.")
-    set (_${_PYTHON_PREFIX}_FIND_STRATEGY "VERSION")
-  else()
-    set (_${_PYTHON_PREFIX}_FIND_STRATEGY "${${_PYTHON_PREFIX}_FIND_STRATEGY}")
-  endif()
-endif()
-
-# Python and Anaconda distributions: define which architectures can be used
-if (CMAKE_SIZEOF_VOID_P)
-  # In this case, search only for 64bit or 32bit
-  math (EXPR _${_PYTHON_PREFIX}_ARCH "${CMAKE_SIZEOF_VOID_P} * 8")
-  set (_${_PYTHON_PREFIX}_ARCH2 ${_${_PYTHON_PREFIX}_ARCH})
-else()
-  # architecture unknown, search for both 64bit and 32bit
-  set (_${_PYTHON_PREFIX}_ARCH 64)
-  set (_${_PYTHON_PREFIX}_ARCH2 32)
-endif()
-
-# IronPython support
-unset (_${_PYTHON_PREFIX}_IRON_PYTHON_INTERPRETER_NAMES)
-unset (_${_PYTHON_PREFIX}_IRON_PYTHON_COMPILER_NAMES)
-unset (_${_PYTHON_PREFIX}_IRON_PYTHON_COMPILER_ARCH_FLAGS)
-if (CMAKE_SIZEOF_VOID_P)
-  if (_${_PYTHON_PREFIX}_ARCH EQUAL "32")
-    set (_${_PYTHON_PREFIX}_IRON_PYTHON_COMPILER_ARCH_FLAGS "/platform:x86")
-  else()
-    set (_${_PYTHON_PREFIX}_IRON_PYTHON_COMPILER_ARCH_FLAGS "/platform:x64")
-  endif()
-endif()
-if (NOT CMAKE_SYSTEM_NAME STREQUAL "Linux")
-  # Do not use wrapper script on Linux because it is buggy: -c interpreter option cannot be used
-  list (APPEND _${_PYTHON_PREFIX}_IRON_PYTHON_INTERPRETER_NAMES "ipy${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR}" "ipy64" "ipy32" "ipy")
-  list (APPEND _${_PYTHON_PREFIX}_IRON_PYTHON_COMPILER_NAMES "ipyc")
-endif()
-list (APPEND _${_PYTHON_PREFIX}_IRON_PYTHON_INTERPRETER_NAMES "ipy.exe")
-list (APPEND _${_PYTHON_PREFIX}_IRON_PYTHON_COMPILER_NAMES "ipyc.exe")
-set (_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES net45 net40 bin)
-
-# PyPy support
-if (_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR EQUAL "3")
-  set (_${_PYTHON_PREFIX}_PYPY_NAMES pypy3)
-  set (_${_PYTHON_PREFIX}_PYPY_LIB_NAMES pypy3-c)
-  if (WIN32)
-    # special name for runtime part
-    list (APPEND _${_PYTHON_PREFIX}_PYPY_LIB_NAMES libpypy3-c)
-  endif()
-  set (_${_PYTHON_PREFIX}_PYPY_INCLUDE_PATH_SUFFIXES lib/pypy3)
-else()
-  set (_${_PYTHON_PREFIX}_PYPY_NAMES pypy)
-  set (_${_PYTHON_PREFIX}_PYPY_LIB_NAMES pypy-c)
-  if (WIN32)
-    # special name for runtime part
-    list (APPEND _${_PYTHON_PREFIX}_PYPY_LIB_NAMES libpypy-c)
-  endif()
-  set (_${_PYTHON_PREFIX}_PYPY_INCLUDE_PATH_SUFFIXES lib/pypy)
-endif()
-set (_${_PYTHON_PREFIX}_PYPY_EXECUTABLE_PATH_SUFFIXES bin)
-set (_${_PYTHON_PREFIX}_PYPY_LIBRARY_PATH_SUFFIXES lib libs bin)
-list (APPEND _${_PYTHON_PREFIX}_PYPY_INCLUDE_PATH_SUFFIXES include)
-
-# Python Implementations handling
-unset (_${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS)
-if (DEFINED ${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS)
-  foreach (_${_PYTHON_PREFIX}_IMPLEMENTATION IN LISTS ${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS)
-    if (NOT _${_PYTHON_PREFIX}_IMPLEMENTATION MATCHES "^(CPython|IronPython|PyPy)$")
-      message (AUTHOR_WARNING "Find${_PYTHON_PREFIX}: ${_${_PYTHON_PREFIX}_IMPLEMENTATION}: invalid value for '${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS'. 'CPython', 'IronPython' or 'PyPy' expected. Value will be ignored.")
-    else()
-      list (APPEND _${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS ${_${_PYTHON_PREFIX}_IMPLEMENTATION})
-    endif()
-  endforeach()
-else()
-  if (WIN32)
-    set (_${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS CPython IronPython)
-  else()
-    set (_${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS CPython)
-  endif()
-endif()
-
-# compute list of names for header file
-unset (_${_PYTHON_PREFIX}_INCLUDE_NAMES)
-foreach (_${_PYTHON_PREFIX}_IMPLEMENTATION IN LISTS _${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS)
-  if (_${_PYTHON_PREFIX}_IMPLEMENTATION STREQUAL "CPython")
-    list (APPEND _${_PYTHON_PREFIX}_INCLUDE_NAMES "Python.h")
-  elseif (_${_PYTHON_PREFIX}_IMPLEMENTATION STREQUAL "PyPy")
-    list (APPEND _${_PYTHON_PREFIX}_INCLUDE_NAMES "PyPy.h")
-  endif()
-endforeach()
-
-
-# Apple frameworks handling
-_python_find_frameworks ()
-
-set (_${_PYTHON_PREFIX}_FIND_FRAMEWORK "FIRST")
-
-if (DEFINED ${_PYTHON_PREFIX}_FIND_FRAMEWORK)
-  if (NOT ${_PYTHON_PREFIX}_FIND_FRAMEWORK MATCHES "^(FIRST|LAST|NEVER)$")
-    message (AUTHOR_WARNING "Find${_PYTHON_PREFIX}: ${${_PYTHON_PREFIX}_FIND_FRAMEWORK}: invalid value for '${_PYTHON_PREFIX}_FIND_FRAMEWORK'. 'FIRST', 'LAST' or 'NEVER' expected. 'FIRST' will be used instead.")
-  else()
-    set (_${_PYTHON_PREFIX}_FIND_FRAMEWORK ${${_PYTHON_PREFIX}_FIND_FRAMEWORK})
-  endif()
-elseif (DEFINED CMAKE_FIND_FRAMEWORK)
-  if (CMAKE_FIND_FRAMEWORK STREQUAL "ONLY")
-    message (AUTHOR_WARNING "Find${_PYTHON_PREFIX}: CMAKE_FIND_FRAMEWORK: 'ONLY' value is not supported. 'FIRST' will be used instead.")
-  elseif (NOT CMAKE_FIND_FRAMEWORK MATCHES "^(FIRST|LAST|NEVER)$")
-    message (AUTHOR_WARNING "Find${_PYTHON_PREFIX}: ${CMAKE_FIND_FRAMEWORK}: invalid value for 'CMAKE_FIND_FRAMEWORK'. 'FIRST', 'LAST' or 'NEVER' expected. 'FIRST' will be used instead.")
-  else()
-    set (_${_PYTHON_PREFIX}_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK})
-  endif()
-endif()
-
-# Save CMAKE_FIND_APPBUNDLE
-if (DEFINED CMAKE_FIND_APPBUNDLE)
-  set (_${_PYTHON_PREFIX}_CMAKE_FIND_APPBUNDLE ${CMAKE_FIND_APPBUNDLE})
-else()
-  unset (_${_PYTHON_PREFIX}_CMAKE_FIND_APPBUNDLE)
-endif()
-# To avoid app bundle lookup
-set (CMAKE_FIND_APPBUNDLE "NEVER")
-
-# Save CMAKE_FIND_FRAMEWORK
-if (DEFINED CMAKE_FIND_FRAMEWORK)
-  set (_${_PYTHON_PREFIX}_CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK})
-else()
-  unset (_${_PYTHON_PREFIX}_CMAKE_FIND_FRAMEWORK)
-endif()
-# To avoid framework lookup
-set (CMAKE_FIND_FRAMEWORK "NEVER")
-
-# Windows Registry handling
-if (DEFINED ${_PYTHON_PREFIX}_FIND_REGISTRY)
-  if (NOT ${_PYTHON_PREFIX}_FIND_REGISTRY MATCHES "^(FIRST|LAST|NEVER)$")
-    message (AUTHOR_WARNING "Find${_PYTHON_PREFIX}: ${${_PYTHON_PREFIX}_FIND_REGISTRY}: invalid value for '${_PYTHON_PREFIX}_FIND_REGISTRY'. 'FIRST', 'LAST' or 'NEVER' expected. 'FIRST' will be used instead.")
-    set (_${_PYTHON_PREFIX}_FIND_REGISTRY "FIRST")
-  else()
-    set (_${_PYTHON_PREFIX}_FIND_REGISTRY ${${_PYTHON_PREFIX}_FIND_REGISTRY})
-  endif()
-else()
-  set (_${_PYTHON_PREFIX}_FIND_REGISTRY "FIRST")
-endif()
-
-# virtual environments recognition
-if (DEFINED ENV{VIRTUAL_ENV} OR DEFINED ENV{CONDA_PREFIX})
-  if (DEFINED ${_PYTHON_PREFIX}_FIND_VIRTUALENV)
-    if (NOT ${_PYTHON_PREFIX}_FIND_VIRTUALENV MATCHES "^(FIRST|ONLY|STANDARD)$")
-      message (AUTHOR_WARNING "Find${_PYTHON_PREFIX}: ${${_PYTHON_PREFIX}_FIND_VIRTUALENV}: invalid value for '${_PYTHON_PREFIX}_FIND_VIRTUALENV'. 'FIRST', 'ONLY' or 'STANDARD' expected. 'FIRST' will be used instead.")
-      set (_${_PYTHON_PREFIX}_FIND_VIRTUALENV "FIRST")
-    else()
-      set (_${_PYTHON_PREFIX}_FIND_VIRTUALENV ${${_PYTHON_PREFIX}_FIND_VIRTUALENV})
-    endif()
-  else()
-    set (_${_PYTHON_PREFIX}_FIND_VIRTUALENV FIRST)
-  endif()
-else()
-  set (_${_PYTHON_PREFIX}_FIND_VIRTUALENV STANDARD)
-endif()
-
-
-# Compute search signature
-# This signature will be used to check validity of cached variables on new search
-set (_${_PYTHON_PREFIX}_SIGNATURE "${${_PYTHON_PREFIX}_ROOT_DIR}:${_${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS}:${_${_PYTHON_PREFIX}_FIND_STRATEGY}:${${_PYTHON_PREFIX}_FIND_VIRTUALENV}")
-if (NOT WIN32)
-  string (APPEND _${_PYTHON_PREFIX}_SIGNATURE ":${${_PYTHON_PREFIX}_USE_STATIC_LIBS}:")
-endif()
-if (CMAKE_HOST_APPLE)
-  string (APPEND _${_PYTHON_PREFIX}_SIGNATURE ":${_${_PYTHON_PREFIX}_FIND_FRAMEWORK}")
-endif()
-if (CMAKE_HOST_WIN32)
-  string (APPEND _${_PYTHON_PREFIX}_SIGNATURE ":${_${_PYTHON_PREFIX}_FIND_REGISTRY}")
-endif()
-
-function (_PYTHON_CHECK_DEVELOPMENT_SIGNATURE module)
-  if ("Development.${module}" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
-    string (TOUPPER "${module}" id)
-    set (signature "${_${_PYTHON_PREFIX}_SIGNATURE}:")
-    if ("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS)
-      list (APPEND signature "${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}:")
-    endif()
-    if ("INCLUDE_DIR" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS)
-      list (APPEND signature "${_${_PYTHON_PREFIX}_INCLUDE_DIR}:")
-    endif()
-    string (MD5 signature "${signature}")
-    if (signature STREQUAL _${_PYTHON_PREFIX}_DEVELOPMENT_${id}_SIGNATURE)
-      if ("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS)
-        _python_validate_library (${${_PYTHON_PREFIX}_FIND_VERSION}
-                                  ${_${_PYTHON_PREFIX}_FIND_VERSION_EXACT}
-                                  CHECK_EXISTS)
-      endif()
-      if ("INCLUDE_DIR" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS)
-        _python_validate_include_dir (${${_PYTHON_PREFIX}_FIND_VERSION}
-                                      ${_${_PYTHON_PREFIX}_FIND_VERSION_EXACT}
-                                      CHECK_EXISTS)
-      endif()
-    else()
-      if ("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS)
-        unset (_${_PYTHON_PREFIX}_LIBRARY_RELEASE CACHE)
-        unset (_${_PYTHON_PREFIX}_LIBRARY_DEBUG CACHE)
-      endif()
-      if ("INCLUDE_DIR" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS)
-        unset (_${_PYTHON_PREFIX}_INCLUDE_DIR CACHE)
-      endif()
-    endif()
-    if (("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS
-          AND NOT _${_PYTHON_PREFIX}_LIBRARY_RELEASE)
-        OR ("INCLUDE_DIR" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS
-          AND NOT _${_PYTHON_PREFIX}_INCLUDE_DIR))
-      unset (_${_PYTHON_PREFIX}_CONFIG CACHE)
-      unset (_${_PYTHON_PREFIX}_DEVELOPMENT_${id}_SIGNATURE CACHE)
-    endif()
-  endif()
-endfunction()
-
-function (_PYTHON_COMPUTE_DEVELOPMENT_SIGNATURE module)
-  string (TOUPPER "${module}" id)
-  if (${_PYTHON_PREFIX}_Development.${module}_FOUND)
-    set (signature "${_${_PYTHON_PREFIX}_SIGNATURE}:")
-    if ("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS)
-      list (APPEND signature "${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}:")
-    endif()
-    if ("INCLUDE_DIR" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS)
-      list (APPEND signature "${_${_PYTHON_PREFIX}_INCLUDE_DIR}:")
-    endif()
-    string (MD5 signature "${signature}")
-    set (_${_PYTHON_PREFIX}_DEVELOPMENT_${id}_SIGNATURE "${signature}" CACHE INTERNAL "")
-  else()
-    unset (_${_PYTHON_PREFIX}_DEVELOPMENT_${id}_SIGNATURE CACHE)
-  endif()
-endfunction()
-
-
-unset (_${_PYTHON_PREFIX}_REQUIRED_VARS)
-unset (_${_PYTHON_PREFIX}_CACHED_VARS)
-unset (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE)
-unset (_${_PYTHON_PREFIX}_Compiler_REASON_FAILURE)
-unset (_${_PYTHON_PREFIX}_Development_REASON_FAILURE)
-unset (_${_PYTHON_PREFIX}_NumPy_REASON_FAILURE)
-
-
-# preamble
-## For IronPython on platforms other than Windows, search for the .Net interpreter
-if ("IronPython" IN_LIST _${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS
-    AND NOT WIN32)
-  find_program (${_PYTHON_PREFIX}_DOTNET_LAUNCHER
-                NAMES "mono")
-endif()
-
-
-# first step, search for the interpreter
-if ("Interpreter" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
-  list (APPEND _${_PYTHON_PREFIX}_CACHED_VARS _${_PYTHON_PREFIX}_EXECUTABLE
-                                              _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES)
-  if (${_PYTHON_PREFIX}_FIND_REQUIRED_Interpreter)
-    list (APPEND _${_PYTHON_PREFIX}_REQUIRED_VARS ${_PYTHON_PREFIX}_EXECUTABLE)
-  endif()
-
-  if (DEFINED ${_PYTHON_PREFIX}_EXECUTABLE
-      AND IS_ABSOLUTE "${${_PYTHON_PREFIX}_EXECUTABLE}")
-    if (NOT ${_PYTHON_PREFIX}_EXECUTABLE STREQUAL _${_PYTHON_PREFIX}_EXECUTABLE)
-      # invalidate cache properties
-      unset (_${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES CACHE)
-    endif()
-    set (_${_PYTHON_PREFIX}_EXECUTABLE "${${_PYTHON_PREFIX}_EXECUTABLE}" CACHE INTERNAL "")
-  elseif (DEFINED _${_PYTHON_PREFIX}_EXECUTABLE)
-    # compute interpreter signature and check validity of definition
-    string (MD5 __${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE "${_${_PYTHON_PREFIX}_SIGNATURE}:${_${_PYTHON_PREFIX}_EXECUTABLE}")
-    if (__${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE STREQUAL _${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE)
-      # check version validity
-      if (${_PYTHON_PREFIX}_FIND_VERSION_EXACT)
-        _python_validate_interpreter (${${_PYTHON_PREFIX}_FIND_VERSION} EXACT CHECK_EXISTS)
-      else()
-        _python_validate_interpreter (${${_PYTHON_PREFIX}_FIND_VERSION} CHECK_EXISTS)
-      endif()
-    else()
-      unset (_${_PYTHON_PREFIX}_EXECUTABLE CACHE)
-    endif()
-    if (NOT _${_PYTHON_PREFIX}_EXECUTABLE)
-      unset (_${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE CACHE)
-      unset (_${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES CACHE)
-    endif()
-  endif()
-
-  if (NOT _${_PYTHON_PREFIX}_EXECUTABLE)
-    set (_${_PYTHON_PREFIX}_HINTS "${${_PYTHON_PREFIX}_ROOT_DIR}" ENV ${_PYTHON_PREFIX}_ROOT_DIR)
-
-    if (_${_PYTHON_PREFIX}_FIND_STRATEGY STREQUAL "LOCATION")
-      # build all executable names
-      _python_get_names (_${_PYTHON_PREFIX}_NAMES VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS} POSIX INTERPRETER)
-      _python_get_path_suffixes (_${_PYTHON_PREFIX}_PATH_SUFFIXES VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS} INTERPRETER)
-
-      # Framework Paths
-      _python_get_frameworks (_${_PYTHON_PREFIX}_FRAMEWORK_PATHS VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS})
-      # Registry Paths
-      _python_get_registries (_${_PYTHON_PREFIX}_REGISTRY_PATHS VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS})
-
-      while (TRUE)
-        # Virtual environments handling
-        if (_${_PYTHON_PREFIX}_FIND_VIRTUALENV MATCHES "^(FIRST|ONLY)$")
-          find_program (_${_PYTHON_PREFIX}_EXECUTABLE
-                        NAMES ${_${_PYTHON_PREFIX}_NAMES}
-                        NAMES_PER_DIR
-                        HINTS ${_${_PYTHON_PREFIX}_HINTS}
-                        PATHS ENV VIRTUAL_ENV ENV CONDA_PREFIX
-                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                        NO_CMAKE_PATH
-                        NO_CMAKE_ENVIRONMENT_PATH
-                        NO_SYSTEM_ENVIRONMENT_PATH
-                        NO_CMAKE_SYSTEM_PATH)
-
-          _python_validate_interpreter (${${_PYTHON_PREFIX}_FIND_VERSION} ${_${_PYTHON_PREFIX}_FIND_VERSION_EXACT})
-          if (_${_PYTHON_PREFIX}_EXECUTABLE)
-            break()
-          endif()
-          if (_${_PYTHON_PREFIX}_FIND_VIRTUALENV STREQUAL "ONLY")
-            break()
-          endif()
-        endif()
-
-        # Apple frameworks handling
-        if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "FIRST")
-          find_program (_${_PYTHON_PREFIX}_EXECUTABLE
-                        NAMES ${_${_PYTHON_PREFIX}_NAMES}
-                        NAMES_PER_DIR
-                        HINTS ${_${_PYTHON_PREFIX}_HINTS}
-                        PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
-                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                        NO_CMAKE_PATH
-                        NO_CMAKE_ENVIRONMENT_PATH
-                        NO_SYSTEM_ENVIRONMENT_PATH
-                        NO_CMAKE_SYSTEM_PATH)
-          _python_validate_interpreter (${${_PYTHON_PREFIX}_FIND_VERSION} ${_${_PYTHON_PREFIX}_FIND_VERSION_EXACT})
-          if (_${_PYTHON_PREFIX}_EXECUTABLE)
-            break()
-          endif()
-        endif()
-        # Windows registry
-        if (CMAKE_HOST_WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "FIRST")
-          find_program (_${_PYTHON_PREFIX}_EXECUTABLE
-                        NAMES ${_${_PYTHON_PREFIX}_NAMES}
-                        NAMES_PER_DIR
-                        HINTS ${_${_PYTHON_PREFIX}_HINTS}
-                        PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
-                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                        NO_SYSTEM_ENVIRONMENT_PATH
-                        NO_CMAKE_SYSTEM_PATH)
-          _python_validate_interpreter (${${_PYTHON_PREFIX}_FIND_VERSION} ${_${_PYTHON_PREFIX}_FIND_VERSION_EXACT})
-          if (_${_PYTHON_PREFIX}_EXECUTABLE)
-            break()
-          endif()
-        endif()
-
-        # try using HINTS
-        find_program (_${_PYTHON_PREFIX}_EXECUTABLE
-                      NAMES ${_${_PYTHON_PREFIX}_NAMES}
-                      NAMES_PER_DIR
-                      HINTS ${_${_PYTHON_PREFIX}_HINTS}
-                      PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                      NO_SYSTEM_ENVIRONMENT_PATH
-                      NO_CMAKE_SYSTEM_PATH)
-        _python_validate_interpreter (${${_PYTHON_PREFIX}_FIND_VERSION} ${_${_PYTHON_PREFIX}_FIND_VERSION_EXACT})
-        if (_${_PYTHON_PREFIX}_EXECUTABLE)
-          break()
-        endif()
-        # try using standard paths
-        find_program (_${_PYTHON_PREFIX}_EXECUTABLE
-                      NAMES ${_${_PYTHON_PREFIX}_NAMES}
-                      NAMES_PER_DIR
-                      PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES})
-        _python_validate_interpreter (${${_PYTHON_PREFIX}_FIND_VERSION} ${_${_PYTHON_PREFIX}_FIND_VERSION_EXACT})
-        if (_${_PYTHON_PREFIX}_EXECUTABLE)
-          break()
-        endif()
-
-        # Apple frameworks handling
-        if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "LAST")
-          find_program (_${_PYTHON_PREFIX}_EXECUTABLE
-                        NAMES ${_${_PYTHON_PREFIX}_NAMES}
-                        NAMES_PER_DIR
-                        PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
-                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                        NO_DEFAULT_PATH)
-          _python_validate_interpreter (${${_PYTHON_PREFIX}_FIND_VERSION} ${_${_PYTHON_PREFIX}_FIND_VERSION_EXACT})
-          if (_${_PYTHON_PREFIX}_EXECUTABLE)
-            break()
-          endif()
-        endif()
-        # Windows registry
-        if (CMAKE_HOST_WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "LAST")
-          find_program (_${_PYTHON_PREFIX}_EXECUTABLE
-                        NAMES ${_${_PYTHON_PREFIX}_NAMES}
-                        NAMES_PER_DIR
-                        PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
-                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                        NO_DEFAULT_PATH)
-          _python_validate_interpreter (${${_PYTHON_PREFIX}_FIND_VERSION} ${_${_PYTHON_PREFIX}_FIND_VERSION_EXACT})
-          if (_${_PYTHON_PREFIX}_EXECUTABLE)
-            break()
-          endif()
-        endif()
-
-        break()
-      endwhile()
-    else()
-      # look-up for various versions and locations
-      foreach (_${_PYTHON_PREFIX}_VERSION IN LISTS _${_PYTHON_PREFIX}_FIND_VERSIONS)
-        _python_get_names (_${_PYTHON_PREFIX}_NAMES VERSION ${_${_PYTHON_PREFIX}_VERSION} POSIX INTERPRETER)
-        _python_get_path_suffixes (_${_PYTHON_PREFIX}_PATH_SUFFIXES VERSION ${_${_PYTHON_PREFIX}_VERSION} INTERPRETER)
-
-        _python_get_frameworks (_${_PYTHON_PREFIX}_FRAMEWORK_PATHS VERSION ${_${_PYTHON_PREFIX}_VERSION})
-        _python_get_registries (_${_PYTHON_PREFIX}_REGISTRY_PATHS VERSION ${_${_PYTHON_PREFIX}_VERSION})
-
-        # Virtual environments handling
-        if (_${_PYTHON_PREFIX}_FIND_VIRTUALENV MATCHES "^(FIRST|ONLY)$")
-          find_program (_${_PYTHON_PREFIX}_EXECUTABLE
-                        NAMES ${_${_PYTHON_PREFIX}_NAMES}
-                        NAMES_PER_DIR
-                        HINTS ${_${_PYTHON_PREFIX}_HINTS}
-                        PATHS ENV VIRTUAL_ENV ENV CONDA_PREFIX
-                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                        NO_CMAKE_PATH
-                        NO_CMAKE_ENVIRONMENT_PATH
-                        NO_SYSTEM_ENVIRONMENT_PATH
-                        NO_CMAKE_SYSTEM_PATH)
-          _python_validate_interpreter (${_${_PYTHON_PREFIX}_VERSION} EXACT)
-          if (_${_PYTHON_PREFIX}_EXECUTABLE)
-            break()
-          endif()
-          if (_${_PYTHON_PREFIX}_FIND_VIRTUALENV STREQUAL "ONLY")
-            continue()
-          endif()
-        endif()
-
-        # Apple frameworks handling
-        if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "FIRST")
-          find_program (_${_PYTHON_PREFIX}_EXECUTABLE
-                        NAMES ${_${_PYTHON_PREFIX}_NAMES}
-                        NAMES_PER_DIR
-                        HINTS ${_${_PYTHON_PREFIX}_HINTS}
-                        PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
-                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                        NO_CMAKE_PATH
-                        NO_CMAKE_ENVIRONMENT_PATH
-                        NO_SYSTEM_ENVIRONMENT_PATH
-                        NO_CMAKE_SYSTEM_PATH)
-        endif()
-
-        # Windows registry
-        if (CMAKE_HOST_WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "FIRST")
-          find_program (_${_PYTHON_PREFIX}_EXECUTABLE
-                        NAMES ${_${_PYTHON_PREFIX}_NAMES}
-                        NAMES_PER_DIR
-                        HINTS ${_${_PYTHON_PREFIX}_HINTS}
-                        PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
-                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                        NO_SYSTEM_ENVIRONMENT_PATH
-                        NO_CMAKE_SYSTEM_PATH)
-        endif()
-
-        _python_validate_interpreter (${_${_PYTHON_PREFIX}_VERSION} EXACT)
-        if (_${_PYTHON_PREFIX}_EXECUTABLE)
-          break()
-        endif()
-
-        # try using HINTS
-        find_program (_${_PYTHON_PREFIX}_EXECUTABLE
-                      NAMES ${_${_PYTHON_PREFIX}_NAMES}
-                      NAMES_PER_DIR
-                      HINTS ${_${_PYTHON_PREFIX}_HINTS}
-                      PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                      NO_SYSTEM_ENVIRONMENT_PATH
-                      NO_CMAKE_SYSTEM_PATH)
-        _python_validate_interpreter (${_${_PYTHON_PREFIX}_VERSION} EXACT)
-        if (_${_PYTHON_PREFIX}_EXECUTABLE)
-          break()
-        endif()
-        # try using standard paths.
-        # NAMES_PER_DIR is not defined on purpose to have a chance to find
-        # expected version.
-        # For example, typical systems have 'python' for version 2.* and 'python3'
-        # for version 3.*. So looking for names per dir will find, potentially,
-        # systematically 'python' (i.e. version 2) even if version 3 is searched.
-        find_program (_${_PYTHON_PREFIX}_EXECUTABLE
-                      NAMES ${_${_PYTHON_PREFIX}_NAMES}
-                      PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES})
-        _python_validate_interpreter (${_${_PYTHON_PREFIX}_VERSION} EXACT)
-        if (_${_PYTHON_PREFIX}_EXECUTABLE)
-          break()
-        endif()
-
-        # Apple frameworks handling
-        if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "LAST")
-          find_program (_${_PYTHON_PREFIX}_EXECUTABLE
-                        NAMES ${_${_PYTHON_PREFIX}_NAMES}
-                        NAMES_PER_DIR
-                        PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
-                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                        NO_DEFAULT_PATH)
-        endif()
-
-        # Windows registry
-        if (CMAKE_HOST_WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "LAST")
-          find_program (_${_PYTHON_PREFIX}_EXECUTABLE
-                        NAMES ${_${_PYTHON_PREFIX}_NAMES}
-                        NAMES_PER_DIR
-                        PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
-                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                        NO_DEFAULT_PATH)
-        endif()
-
-        _python_validate_interpreter (${_${_PYTHON_PREFIX}_VERSION} EXACT)
-        if (_${_PYTHON_PREFIX}_EXECUTABLE)
-          break()
-        endif()
-      endforeach()
-
-      if (NOT _${_PYTHON_PREFIX}_EXECUTABLE AND
-          NOT _${_PYTHON_PREFIX}_FIND_VIRTUALENV STREQUAL "ONLY")
-        # No specific version found. Retry with generic names and standard paths.
-        # NAMES_PER_DIR is not defined on purpose to have a chance to find
-        # expected version.
-        # For example, typical systems have 'python' for version 2.* and 'python3'
-        # for version 3.*. So looking for names per dir will find, potentially,
-        # systematically 'python' (i.e. version 2) even if version 3 is searched.
-        _python_get_names (_${_PYTHON_PREFIX}_NAMES POSIX INTERPRETER)
-        find_program (_${_PYTHON_PREFIX}_EXECUTABLE
-                      NAMES ${_${_PYTHON_PREFIX}_NAMES})
-        _python_validate_interpreter ()
-      endif()
-    endif()
-  endif()
-
-  set (${_PYTHON_PREFIX}_EXECUTABLE "${_${_PYTHON_PREFIX}_EXECUTABLE}")
-  _python_get_launcher (_${_PYTHON_PREFIX}_INTERPRETER_LAUNCHER INTERPRETER)
-
-  # retrieve exact version of executable found
-  if (_${_PYTHON_PREFIX}_EXECUTABLE)
-    execute_process (COMMAND ${_${_PYTHON_PREFIX}_INTERPRETER_LAUNCHER} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
-                             "import sys; sys.stdout.write('.'.join([str(x) for x in sys.version_info[:3]]))"
-                     RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
-                     OUTPUT_VARIABLE ${_PYTHON_PREFIX}_VERSION
-                     ERROR_QUIET
-                     OUTPUT_STRIP_TRAILING_WHITESPACE)
-    if (NOT _${_PYTHON_PREFIX}_RESULT)
-      set (_${_PYTHON_PREFIX}_EXECUTABLE_USABLE TRUE)
-    else()
-      # Interpreter is not usable
-      set (_${_PYTHON_PREFIX}_EXECUTABLE_USABLE FALSE)
-      unset (${_PYTHON_PREFIX}_VERSION)
-      set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE "Cannot run the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"")
-    endif()
-  endif()
-
-  if (_${_PYTHON_PREFIX}_EXECUTABLE AND _${_PYTHON_PREFIX}_EXECUTABLE_USABLE)
-    if (_${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES)
-      set (${_PYTHON_PREFIX}_Interpreter_FOUND TRUE)
-
-      list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 0 ${_PYTHON_PREFIX}_INTERPRETER_ID)
-
-      list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 1 ${_PYTHON_PREFIX}_VERSION_MAJOR)
-      list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 2 ${_PYTHON_PREFIX}_VERSION_MINOR)
-      list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 3 ${_PYTHON_PREFIX}_VERSION_PATCH)
-
-      list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 4 _${_PYTHON_PREFIX}_ARCH)
-      set (_${_PYTHON_PREFIX}_ARCH2 ${_${_PYTHON_PREFIX}_ARCH})
-
-      list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 5 _${_PYTHON_PREFIX}_ABIFLAGS)
-      list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 6 ${_PYTHON_PREFIX}_SOABI)
-
-      list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 7 ${_PYTHON_PREFIX}_STDLIB)
-      list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 8 ${_PYTHON_PREFIX}_STDARCH)
-      list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 9 ${_PYTHON_PREFIX}_SITELIB)
-      list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 10 ${_PYTHON_PREFIX}_SITEARCH)
-    else()
-      string (REGEX MATCHALL "[0-9]+" _${_PYTHON_PREFIX}_VERSIONS "${${_PYTHON_PREFIX}_VERSION}")
-      list (GET _${_PYTHON_PREFIX}_VERSIONS 0 ${_PYTHON_PREFIX}_VERSION_MAJOR)
-      list (GET _${_PYTHON_PREFIX}_VERSIONS 1 ${_PYTHON_PREFIX}_VERSION_MINOR)
-      list (GET _${_PYTHON_PREFIX}_VERSIONS 2 ${_PYTHON_PREFIX}_VERSION_PATCH)
-
-      if (${_PYTHON_PREFIX}_VERSION_MAJOR VERSION_EQUAL _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR)
-        set (${_PYTHON_PREFIX}_Interpreter_FOUND TRUE)
-
-        # Use interpreter version and ABI for future searches to ensure consistency
-        set (_${_PYTHON_PREFIX}_FIND_VERSIONS ${${_PYTHON_PREFIX}_VERSION_MAJOR}.${${_PYTHON_PREFIX}_VERSION_MINOR})
-        execute_process (COMMAND ${_${_PYTHON_PREFIX}_INTERPRETR_LAUNCHER} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
-                                 "import sys; sys.stdout.write(sys.abiflags)"
-                         RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
-                         OUTPUT_VARIABLE _${_PYTHON_PREFIX}_ABIFLAGS
-                         ERROR_QUIET
-                         OUTPUT_STRIP_TRAILING_WHITESPACE)
-        if (_${_PYTHON_PREFIX}_RESULT)
-          # assunme ABI is not supported
-          set (_${_PYTHON_PREFIX}_ABIFLAGS "")
-        endif()
-      endif()
-
-      if (${_PYTHON_PREFIX}_Interpreter_FOUND)
-        unset (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE)
-
-        # compute and save interpreter signature
-        string (MD5 __${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE "${_${_PYTHON_PREFIX}_SIGNATURE}:${_${_PYTHON_PREFIX}_EXECUTABLE}")
-        set (_${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE "${__${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE}" CACHE INTERNAL "")
-
-        if (NOT CMAKE_SIZEOF_VOID_P)
-          # determine interpreter architecture
-          execute_process (COMMAND ${_${_PYTHON_PREFIX}_INTERPRETER_LAUNCHER} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
-                                   "import sys; sys.stdout.write(str(sys.maxsize > 2**32))"
-                           RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
-                           OUTPUT_VARIABLE ${_PYTHON_PREFIX}_IS64BIT
-                           ERROR_VARIABLE ${_PYTHON_PREFIX}_IS64BIT)
-          if (NOT _${_PYTHON_PREFIX}_RESULT)
-            if (${_PYTHON_PREFIX}_IS64BIT)
-              set (_${_PYTHON_PREFIX}_ARCH 64)
-              set (_${_PYTHON_PREFIX}_ARCH2 64)
-            else()
-              set (_${_PYTHON_PREFIX}_ARCH 32)
-              set (_${_PYTHON_PREFIX}_ARCH2 32)
-            endif()
-          endif()
-        endif()
-
-        # retrieve interpreter identity
-        execute_process (COMMAND ${_${_PYTHON_PREFIX}_INTERPRETER_LAUNCHER} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -V
-                         RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
-                         OUTPUT_VARIABLE ${_PYTHON_PREFIX}_INTERPRETER_ID
-                         ERROR_VARIABLE ${_PYTHON_PREFIX}_INTERPRETER_ID)
-        if (NOT _${_PYTHON_PREFIX}_RESULT)
-          if (${_PYTHON_PREFIX}_INTERPRETER_ID MATCHES "Anaconda")
-            set (${_PYTHON_PREFIX}_INTERPRETER_ID "Anaconda")
-          elseif (${_PYTHON_PREFIX}_INTERPRETER_ID MATCHES "Enthought")
-            set (${_PYTHON_PREFIX}_INTERPRETER_ID "Canopy")
-          elseif (${_PYTHON_PREFIX}_INTERPRETER_ID MATCHES "PyPy ([0-9.]+)")
-            set (${_PYTHON_PREFIX}_INTERPRETER_ID "PyPy")
-            set  (${_PYTHON_PREFIX}_PyPy_VERSION "${CMAKE_MATCH_1}")
-          else()
-            string (REGEX REPLACE "^([^ ]+).*" "\\1" ${_PYTHON_PREFIX}_INTERPRETER_ID "${${_PYTHON_PREFIX}_INTERPRETER_ID}")
-            if (${_PYTHON_PREFIX}_INTERPRETER_ID STREQUAL "Python")
-              # try to get a more precise ID
-              execute_process (COMMAND ${_${_PYTHON_PREFIX}_INTERPRETER_LAUNCHER} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
-                                       "import sys; sys.stdout.write(sys.copyright)"
-                               RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
-                               OUTPUT_VARIABLE ${_PYTHON_PREFIX}_COPYRIGHT
-                               ERROR_QUIET)
-              if (${_PYTHON_PREFIX}_COPYRIGHT MATCHES "ActiveState")
-                set (${_PYTHON_PREFIX}_INTERPRETER_ID "ActivePython")
-              endif()
-            endif()
-          endif()
-        else()
-          set (${_PYTHON_PREFIX}_INTERPRETER_ID Python)
-        endif()
-
-        # retrieve various package installation directories
-        execute_process (COMMAND ${_${_PYTHON_PREFIX}_INTERPRETER_LAUNCHER} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
-                                 "import sys\ntry:\n   from distutils import sysconfig\n   sys.stdout.write(';'.join([sysconfig.get_python_lib(plat_specific=False,standard_lib=True),sysconfig.get_python_lib(plat_specific=True,standard_lib=True),sysconfig.get_python_lib(plat_specific=False,standard_lib=False),sysconfig.get_python_lib(plat_specific=True,standard_lib=False)]))\nexcept Exception:\n   import sysconfig\n   sys.stdout.write(';'.join([sysconfig.get_path('stdlib'),sysconfig.get_path('platstdlib'),sysconfig.get_path('purelib'),sysconfig.get_path('platlib')]))"
-                         RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
-                         OUTPUT_VARIABLE _${_PYTHON_PREFIX}_LIBPATHS
-                         ERROR_QUIET)
-        if (NOT _${_PYTHON_PREFIX}_RESULT)
-          list (GET _${_PYTHON_PREFIX}_LIBPATHS 0 ${_PYTHON_PREFIX}_STDLIB)
-          list (GET _${_PYTHON_PREFIX}_LIBPATHS 1 ${_PYTHON_PREFIX}_STDARCH)
-          list (GET _${_PYTHON_PREFIX}_LIBPATHS 2 ${_PYTHON_PREFIX}_SITELIB)
-          list (GET _${_PYTHON_PREFIX}_LIBPATHS 3 ${_PYTHON_PREFIX}_SITEARCH)
-        else()
-          unset (${_PYTHON_PREFIX}_STDLIB)
-          unset (${_PYTHON_PREFIX}_STDARCH)
-          unset (${_PYTHON_PREFIX}_SITELIB)
-          unset (${_PYTHON_PREFIX}_SITEARCH)
-        endif()
-
-        if (_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR VERSION_GREATER_EQUAL "3")
-          _python_get_config_var (${_PYTHON_PREFIX}_SOABI SOABI)
-        endif()
-
-        # store properties in the cache to speed-up future searches
-        set (_${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES
-          "${${_PYTHON_PREFIX}_INTERPRETER_ID};${${_PYTHON_PREFIX}_VERSION_MAJOR};${${_PYTHON_PREFIX}_VERSION_MINOR};${${_PYTHON_PREFIX}_VERSION_PATCH};${_${_PYTHON_PREFIX}_ARCH};${_${_PYTHON_PREFIX}_ABIFLAGS};${${_PYTHON_PREFIX}_SOABI};${${_PYTHON_PREFIX}_STDLIB};${${_PYTHON_PREFIX}_STDARCH};${${_PYTHON_PREFIX}_SITELIB};${${_PYTHON_PREFIX}_SITEARCH}" CACHE INTERNAL "${_PYTHON_PREFIX} Properties")
-      else()
-        unset (_${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE CACHE)
-        unset (${_PYTHON_PREFIX}_INTERPRETER_ID)
-      endif()
-    endif()
-  endif()
-
-  if (${_PYTHON_PREFIX}_ARTIFACTS_INTERACTIVE)
-    set (${_PYTHON_PREFIX}_EXECUTABLE "${_${_PYTHON_PREFIX}_EXECUTABLE}" CACHE FILEPATH "${_PYTHON_PREFIX} Interpreter")
-  endif()
-
-  _python_mark_as_internal (_${_PYTHON_PREFIX}_EXECUTABLE
-                            _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES
-                            _${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE)
-endif()
-
-
-# second step, search for compiler (IronPython)
-if ("Compiler" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
-  list (APPEND _${_PYTHON_PREFIX}_CACHED_VARS _${_PYTHON_PREFIX}_COMPILER)
-  if (${_PYTHON_PREFIX}_FIND_REQUIRED_Compiler)
-    list (APPEND _${_PYTHON_PREFIX}_REQUIRED_VARS ${_PYTHON_PREFIX}_COMPILER)
-  endif()
-
-  if (NOT "IronPython" IN_LIST _${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS)
-    unset (_${_PYTHON_PREFIX}_COMPILER CACHE)
-    unset (_${_PYTHON_PREFIX}_COMPILER_SIGNATURE CACHE)
-  elseif (DEFINED ${_PYTHON_PREFIX}_COMPILER
-      AND IS_ABSOLUTE "${${_PYTHON_PREFIX}_COMPILER}")
-    set (_${_PYTHON_PREFIX}_COMPILER "${${_PYTHON_PREFIX}_COMPILER}" CACHE INTERNAL "")
-  elseif (DEFINED _${_PYTHON_PREFIX}_COMPILER)
-    # compute compiler signature and check validity of definition
-    string (MD5 __${_PYTHON_PREFIX}_COMPILER_SIGNATURE "${_${_PYTHON_PREFIX}_SIGNATURE}:${_${_PYTHON_PREFIX}_COMPILER}")
-    if (__${_PYTHON_PREFIX}_COMPILER_SIGNATURE STREQUAL _${_PYTHON_PREFIX}_COMPILER_SIGNATURE)
-      # check version validity
-      if (${_PYTHON_PREFIX}_FIND_VERSION_EXACT)
-        _python_validate_compiler (${${_PYTHON_PREFIX}_FIND_VERSION} EXACT CHECK_EXISTS)
-      else()
-        _python_validate_compiler (${${_PYTHON_PREFIX}_FIND_VERSION} CHECK_EXISTS)
-      endif()
-    else()
-      unset (_${_PYTHON_PREFIX}_COMPILER CACHE)
-      unset (_${_PYTHON_PREFIX}_COMPILER_SIGNATURE CACHE)
-    endif()
-  endif()
-
-  if ("IronPython" IN_LIST _${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS
-      AND NOT _${_PYTHON_PREFIX}_COMPILER)
-    # IronPython specific artifacts
-    # If IronPython interpreter is found, use its path
-    unset (_${_PYTHON_PREFIX}_IRON_ROOT)
-    if (${_PYTHON_PREFIX}_Interpreter_FOUND AND ${_PYTHON_PREFIX}_INTERPRETER_ID STREQUAL "IronPython")
-      get_filename_component (_${_PYTHON_PREFIX}_IRON_ROOT "${${_PYTHON_PREFIX}_EXECUTABLE}" DIRECTORY)
-    endif()
-
-    if (_${_PYTHON_PREFIX}_FIND_STRATEGY STREQUAL "LOCATION")
-      _python_get_names (_${_PYTHON_PREFIX}_COMPILER_NAMES
-                         IMPLEMENTATIONS IronPython
-                         VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS}
-                         COMPILER)
-
-      _python_get_path_suffixes (_${_PYTHON_PREFIX}_PATH_SUFFIXES
-                                 IMPLEMENTATIONS IronPython
-                                 VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS}
-                                 COMPILER)
-
-      _python_get_frameworks (_${_PYTHON_PREFIX}_FRAMEWORK_PATHS
-                              IMPLEMENTATIONS IronPython
-                              VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS})
-      _python_get_registries (_${_PYTHON_PREFIX}_REGISTRY_PATHS
-                              IMPLEMENTATIONS IronPython
-                              VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS})
-
-      while (TRUE)
-        # Apple frameworks handling
-        if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "FIRST")
-          find_program (_${_PYTHON_PREFIX}_COMPILER
-                        NAMES ${_${_PYTHON_PREFIX}_COMPILER_NAMES}
-                        NAMES_PER_DIR
-                        HINTS ${_${_PYTHON_PREFIX}_IRON_ROOT} ${_${_PYTHON_PREFIX}_HINTS}
-                        PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
-                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                        NO_CMAKE_PATH
-                        NO_CMAKE_ENVIRONMENT_PATH
-                        NO_SYSTEM_ENVIRONMENT_PATH
-                        NO_CMAKE_SYSTEM_PATH)
-          _python_validate_compiler (${${_PYTHON_PREFIX}_FIND_VERSION} ${_${_PYTHON_PREFIX}_FIND_VERSION_EXACT})
-          if (_${_PYTHON_PREFIX}_COMPILER)
-            break()
-          endif()
-        endif()
-        # Windows registry
-        if (CMAKE_HOST_WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "FIRST")
-          find_program (_${_PYTHON_PREFIX}_COMPILER
-                        NAMES ${_${_PYTHON_PREFIX}_COMPILER_NAMES}
-                        NAMES_PER_DIR
-                        HINTS ${_${_PYTHON_PREFIX}_IRON_ROOT} ${_${_PYTHON_PREFIX}_HINTS}
-                        PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
-                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                        NO_SYSTEM_ENVIRONMENT_PATH
-                        NO_CMAKE_SYSTEM_PATH)
-          _python_validate_compiler (${${_PYTHON_PREFIX}_FIND_VERSION} ${_${_PYTHON_PREFIX}_FIND_VERSION_EXACT})
-          if (_${_PYTHON_PREFIX}_COMPILER)
-            break()
-          endif()
-        endif()
-
-        # try using HINTS
-        find_program (_${_PYTHON_PREFIX}_COMPILER
-                      NAMES ${_${_PYTHON_PREFIX}_COMPILER_NAMES}
-                      NAMES_PER_DIR
-                      HINTS ${_${_PYTHON_PREFIX}_IRON_ROOT} ${_${_PYTHON_PREFIX}_HINTS}
-                      PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                      NO_SYSTEM_ENVIRONMENT_PATH
-                      NO_CMAKE_SYSTEM_PATH)
-        _python_validate_compiler (${${_PYTHON_PREFIX}_FIND_VERSION} ${_${_PYTHON_PREFIX}_FIND_VERSION_EXACT})
-        if (_${_PYTHON_PREFIX}_COMPILER)
-          break()
-        endif()
-
-        # try using standard paths
-        find_program (_${_PYTHON_PREFIX}_COMPILER
-                      NAMES ${_${_PYTHON_PREFIX}_COMPILER_NAMES}
-                      NAMES_PER_DIR
-                      PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES})
-        _python_validate_compiler (${${_PYTHON_PREFIX}_FIND_VERSION} ${_${_PYTHON_PREFIX}_FIND_VERSION_EXACT})
-        if (_${_PYTHON_PREFIX}_COMPILER)
-          break()
-        endif()
-
-        # Apple frameworks handling
-        if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "LAST")
-          find_program (_${_PYTHON_PREFIX}_COMPILER
-                        NAMES ${_${_PYTHON_PREFIX}_COMPILER_NAMES}
-                        NAMES_PER_DIR
-                        PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
-                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                        NO_DEFAULT_PATH)
-          _python_validate_compiler (${${_PYTHON_PREFIX}_FIND_VERSION} ${_${_PYTHON_PREFIX}_FIND_VERSION_EXACT})
-          if (_${_PYTHON_PREFIX}_COMPILER)
-            break()
-          endif()
-        endif()
-        # Windows registry
-        if (CMAKE_HOST_WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "LAST")
-          find_program (_${_PYTHON_PREFIX}_COMPILER
-                        NAMES ${_${_PYTHON_PREFIX}_COMPILER_NAMES}
-                        NAMES_PER_DIR
-                        PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
-                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                        NO_DEFAULT_PATH)
-          if (_${_PYTHON_PREFIX}_COMPILER)
-            break()
-          endif()
-        endif()
-
-        break()
-      endwhile()
-    else()
-      # try using root dir and registry
-      foreach (_${_PYTHON_PREFIX}_VERSION IN LISTS _${_PYTHON_PREFIX}_FIND_VERSIONS)
-        _python_get_names (_${_PYTHON_PREFIX}_COMPILER_NAMES
-                           IMPLEMENTATIONS IronPython
-                           VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS}
-                           COMPILER)
-
-        _python_get_path_suffixes (_${_PYTHON_PREFIX}_PATH_SUFFIXES
-                                   IMPLEMENTATIONS IronPython
-                                   VERSION ${_${_PYTHON_PREFIX}_FIND_VERSION}
-                                   COMPILER)
-
-        _python_get_frameworks (_${_PYTHON_PREFIX}_FRAMEWORK_PATHS
-                                IMPLEMENTATIONS IronPython
-                                VERSION ${_${_PYTHON_PREFIX}_VERSION})
-        _python_get_registries (_${_PYTHON_PREFIX}_REGISTRY_PATHS
-                                IMPLEMENTATIONS IronPython
-                                VERSION ${_${_PYTHON_PREFIX}_VERSION})
-
-        # Apple frameworks handling
-        if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "FIRST")
-          find_program (_${_PYTHON_PREFIX}_COMPILER
-                        NAMES ${_${_PYTHON_PREFIX}_COMPILER_NAMES}
-                        NAMES_PER_DIR
-                        HINTS ${_${_PYTHON_PREFIX}_IRON_ROOT} ${_${_PYTHON_PREFIX}_HINTS}
-                        PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
-                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                        NO_CMAKE_PATH
-                        NO_CMAKE_ENVIRONMENT_PATH
-                        NO_SYSTEM_ENVIRONMENT_PATH
-                        NO_CMAKE_SYSTEM_PATH)
-          _python_validate_compiler (${_${_PYTHON_PREFIX}_VERSION} EXACT)
-          if (_${_PYTHON_PREFIX}_COMPILER)
-            break()
-          endif()
-        endif()
-        # Windows registry
-        if (CMAKE_HOST_WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "FIRST")
-          find_program (_${_PYTHON_PREFIX}_COMPILER
-                        NAMES ${_${_PYTHON_PREFIX}_COMPILER_NAMES}
-                        NAMES_PER_DIR
-                        HINTS ${_${_PYTHON_PREFIX}_IRON_ROOT} ${_${_PYTHON_PREFIX}_HINTS}
-                        PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
-                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                        NO_SYSTEM_ENVIRONMENT_PATH
-                        NO_CMAKE_SYSTEM_PATH)
-          _python_validate_compiler (${_${_PYTHON_PREFIX}_VERSION} EXACT)
-          if (_${_PYTHON_PREFIX}_COMPILER)
-            break()
-          endif()
-        endif()
-
-        # try using HINTS
-        find_program (_${_PYTHON_PREFIX}_COMPILER
-                      NAMES ${_${_PYTHON_PREFIX}_COMPILER_NAMES}
-                      NAMES_PER_DIR
-                      HINTS ${_${_PYTHON_PREFIX}_IRON_ROOT} ${_${_PYTHON_PREFIX}_HINTS}
-                      PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                      NO_SYSTEM_ENVIRONMENT_PATH
-                      NO_CMAKE_SYSTEM_PATH)
-        _python_validate_compiler (${_${_PYTHON_PREFIX}_VERSION} EXACT)
-        if (_${_PYTHON_PREFIX}_COMPILER)
-          break()
-        endif()
-
-        # Apple frameworks handling
-        if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "LAST")
-          find_program (_${_PYTHON_PREFIX}_COMPILER
-                        NAMES ${_${_PYTHON_PREFIX}_COMPILER_NAMES}
-                        NAMES_PER_DIR
-                        PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
-                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                        NO_DEFAULT_PATH)
-          _python_validate_compiler (${_${_PYTHON_PREFIX}_VERSION} EXACT)
-          if (_${_PYTHON_PREFIX}_COMPILER)
-            break()
-          endif()
-        endif()
-        # Windows registry
-        if (CMAKE_HOST_WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "LAST")
-          find_program (_${_PYTHON_PREFIX}_COMPILER
-                        NAMES ${_${_PYTHON_PREFIX}_COMPILER_NAMES}
-                        NAMES_PER_DIR
-                        PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
-                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                        NO_DEFAULT_PATH)
-          _python_validate_compiler (${_${_PYTHON_PREFIX}_VERSION} EXACT)
-          if (_${_PYTHON_PREFIX}_COMPILER)
-            break()
-          endif()
-        endif()
-      endforeach()
-
-      # no specific version found, re-try in standard paths
-      _python_get_names (_${_PYTHON_PREFIX}_COMPILER_NAMES
-                         IMPLEMENTATIONS IronPython
-                         VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS}
-                         COMPILER)
-      _python_get_path_suffixes (_${_PYTHON_PREFIX}_PATH_SUFFIXES
-                                 IMPLEMENTATIONS IronPython
-                                 VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS}
-                                 COMPILER)
-      find_program (_${_PYTHON_PREFIX}_COMPILER
-                    NAMES ${_${_PYTHON_PREFIX}_COMPILER_NAMES}
-                    HINTS ${_${_PYTHON_PREFIX}_IRON_ROOT} ${_${_PYTHON_PREFIX}_HINTS}
-                    PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES})
-    endif()
-  endif()
-
-  set (${_PYTHON_PREFIX}_COMPILER "${_${_PYTHON_PREFIX}_COMPILER}")
-
-  if (_${_PYTHON_PREFIX}_COMPILER)
-    # retrieve python environment version from compiler
-    _python_get_launcher (_${_PYTHON_PREFIX}_COMPILER_LAUNCHER COMPILER)
-    set (_${_PYTHON_PREFIX}_VERSION_DIR "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/PythonCompilerVersion.dir")
-    file (WRITE "${_${_PYTHON_PREFIX}_VERSION_DIR}/version.py" "import sys; sys.stdout.write('.'.join([str(x) for x in sys.version_info[:3]]))\n")
-    execute_process (COMMAND ${_${_PYTHON_PREFIX}_COMPILER_LAUNCHER} "${_${_PYTHON_PREFIX}_COMPILER}"
-                             ${_${_PYTHON_PREFIX}_IRON_PYTHON_COMPILER_ARCH_FLAGS}
-                             /target:exe /embed "${_${_PYTHON_PREFIX}_VERSION_DIR}/version.py"
-                     WORKING_DIRECTORY "${_${_PYTHON_PREFIX}_VERSION_DIR}"
-                     OUTPUT_QUIET
-                     ERROR_QUIET)
-    get_filename_component (_${_PYTHON_PREFIX}_IR_DIR "${_${_PYTHON_PREFIX}_COMPILER}" DIRECTORY)
-    execute_process (COMMAND "${CMAKE_COMMAND}" -E env "MONO_PATH=${_${_PYTHON_PREFIX}_IR_DIR}"
-                             ${${_PYTHON_PREFIX}_DOTNET_LAUNCHER} "${_${_PYTHON_PREFIX}_VERSION_DIR}/version.exe"
-                     WORKING_DIRECTORY "${_${_PYTHON_PREFIX}_VERSION_DIR}"
-                     RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
-                     OUTPUT_VARIABLE _${_PYTHON_PREFIX}_VERSION
-                     ERROR_QUIET)
-    if (NOT _${_PYTHON_PREFIX}_RESULT)
-      set (_${_PYTHON_PREFIX}_COMPILER_USABLE TRUE)
-      string (REGEX MATCHALL "[0-9]+" _${_PYTHON_PREFIX}_VERSIONS "${_${_PYTHON_PREFIX}_VERSION}")
-      list (GET _${_PYTHON_PREFIX}_VERSIONS 0 _${_PYTHON_PREFIX}_VERSION_MAJOR)
-      list (GET _${_PYTHON_PREFIX}_VERSIONS 1 _${_PYTHON_PREFIX}_VERSION_MINOR)
-      list (GET _${_PYTHON_PREFIX}_VERSIONS 2 _${_PYTHON_PREFIX}_VERSION_PATCH)
-
-      if (NOT ${_PYTHON_PREFIX}_Interpreter_FOUND)
-        # set public version information
-        set (${_PYTHON_PREFIX}_VERSION ${_${_PYTHON_PREFIX}_VERSION})
-        set (${_PYTHON_PREFIX}_VERSION_MAJOR ${_${_PYTHON_PREFIX}_VERSION_MAJOR})
-        set (${_PYTHON_PREFIX}_VERSION_MINOR ${_${_PYTHON_PREFIX}_VERSION_MINOR})
-        set (${_PYTHON_PREFIX}_VERSION_PATCH ${_${_PYTHON_PREFIX}_VERSION_PATCH})
-      endif()
-    else()
-      # compiler not usable
-      set (_${_PYTHON_PREFIX}_COMPILER_USABLE FALSE)
-      set (_${_PYTHON_PREFIX}_Compiler_REASON_FAILURE "Cannot run the compiler \"${_${_PYTHON_PREFIX}_COMPILER}\"")
-    endif()
-    file (REMOVE_RECURSE "${_${_PYTHON_PREFIX}_VERSION_DIR}")
-  endif()
-
-  if (_${_PYTHON_PREFIX}_COMPILER AND _${_PYTHON_PREFIX}_COMPILER_USABLE)
-    if (${_PYTHON_PREFIX}_Interpreter_FOUND)
-      # Compiler must be compatible with interpreter
-      if ("${_${_PYTHON_PREFIX}_VERSION_MAJOR}.${_${_PYTHON_PREFIX}_VERSION_MINOR}" VERSION_EQUAL "${${_PYTHON_PREFIX}_VERSION_MAJOR}.${${_PYTHON_PREFIX}_VERSION_MINOR}")
-        set (${_PYTHON_PREFIX}_Compiler_FOUND TRUE)
-      endif()
-    elseif (${_PYTHON_PREFIX}_VERSION_MAJOR VERSION_EQUAL _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR)
-      set (${_PYTHON_PREFIX}_Compiler_FOUND TRUE)
-      # Use compiler version for future searches to ensure consistency
-      set (_${_PYTHON_PREFIX}_FIND_VERSIONS ${${_PYTHON_PREFIX}_VERSION_MAJOR}.${${_PYTHON_PREFIX}_VERSION_MINOR})
-    endif()
-  endif()
-
-  if (${_PYTHON_PREFIX}_Compiler_FOUND)
-    unset (_${_PYTHON_PREFIX}_Compiler_REASON_FAILURE)
-
-    # compute and save compiler signature
-    string (MD5 __${_PYTHON_PREFIX}_COMPILER_SIGNATURE "${_${_PYTHON_PREFIX}_SIGNATURE}:${_${_PYTHON_PREFIX}_COMPILER}")
-    set (_${_PYTHON_PREFIX}_COMPILER_SIGNATURE "${__${_PYTHON_PREFIX}_COMPILER_SIGNATURE}" CACHE INTERNAL "")
-
-    set (${_PYTHON_PREFIX}_COMPILER_ID IronPython)
-  else()
-    unset (_${_PYTHON_PREFIX}_COMPILER_SIGNATURE CACHE)
-    unset (${_PYTHON_PREFIX}_COMPILER_ID)
-  endif()
-
-  if (${_PYTHON_PREFIX}_ARTIFACTS_INTERACTIVE)
-    set (${_PYTHON_PREFIX}_COMPILER "${_${_PYTHON_PREFIX}_COMPILER}" CACHE FILEPATH "${_PYTHON_PREFIX} Compiler")
-  endif()
-
-  _python_mark_as_internal (_${_PYTHON_PREFIX}_COMPILER
-                            _${_PYTHON_PREFIX}_COMPILER_SIGNATURE)
-endif()
-
-# third step, search for the development artifacts
-if (${_PYTHON_PREFIX}_FIND_REQUIRED_Development.Module)
-  if ("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_MODULE_ARTIFACTS)
-    list (APPEND _${_PYTHON_PREFIX}_REQUIRED_VARS ${_PYTHON_PREFIX}_LIBRARIES)
-  endif()
-  if ("INCLUDE_DIR" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_MODULE_ARTIFACTS)
-    list (APPEND _${_PYTHON_PREFIX}_REQUIRED_VARS ${_PYTHON_PREFIX}_INCLUDE_DIRS)
-  endif()
-endif()
-if (${_PYTHON_PREFIX}_FIND_REQUIRED_Development.Embed)
-  if ("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_EMBED_ARTIFACTS)
-    list (APPEND _${_PYTHON_PREFIX}_REQUIRED_VARS ${_PYTHON_PREFIX}_LIBRARIES)
-  endif()
-  if ("INCLUDE_DIR" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_EMBED_ARTIFACTS)
-    list (APPEND _${_PYTHON_PREFIX}_REQUIRED_VARS ${_PYTHON_PREFIX}_INCLUDE_DIRS)
-  endif()
-endif()
-list (REMOVE_DUPLICATES _${_PYTHON_PREFIX}_REQUIRED_VARS)
-## Development environment is not compatible with IronPython interpreter
-if (("Development.Module" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
-      OR "Development.Embed" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
-    AND ((${_PYTHON_PREFIX}_Interpreter_FOUND
-        AND NOT ${_PYTHON_PREFIX}_INTERPRETER_ID STREQUAL "IronPython")
-      OR NOT ${_PYTHON_PREFIX}_Interpreter_FOUND))
-  if (${_PYTHON_PREFIX}_Interpreter_FOUND)
-    # reduce possible implementations to the interpreter one
-    if (${_PYTHON_PREFIX}_INTERPRETER_ID STREQUAL "PyPy")
-      set (_${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS "PyPy")
-    else()
-      set (_${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS "CPython")
-    endif()
-  else()
-    list (REMOVE_ITEM _${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS "IronPython")
-  endif()
-  if ("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
-  list (APPEND _${_PYTHON_PREFIX}_CACHED_VARS _${_PYTHON_PREFIX}_LIBRARY_RELEASE
-                                              _${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE
-                                              _${_PYTHON_PREFIX}_LIBRARY_DEBUG
-                                              _${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG)
-  endif()
-  if ("INCLUDE_DIR" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
-    list (APPEND _${_PYTHON_PREFIX}_CACHED_VARS _${_PYTHON_PREFIX}_INCLUDE_DIR)
-  endif()
-
-  _python_check_development_signature (Module)
-  _python_check_development_signature (Embed)
-
-  if (DEFINED ${_PYTHON_PREFIX}_LIBRARY
-      AND IS_ABSOLUTE "${${_PYTHON_PREFIX}_LIBRARY}")
-    set (_${_PYTHON_PREFIX}_LIBRARY_RELEASE "${${_PYTHON_PREFIX}_LIBRARY}" CACHE INTERNAL "")
-    unset (_${_PYTHON_PREFIX}_LIBRARY_DEBUG CACHE)
-    unset (_${_PYTHON_PREFIX}_INCLUDE_DIR CACHE)
-  endif()
-  if (DEFINED ${_PYTHON_PREFIX}_INCLUDE_DIR
-      AND IS_ABSOLUTE "${${_PYTHON_PREFIX}_INCLUDE_DIR}")
-    set (_${_PYTHON_PREFIX}_INCLUDE_DIR "${${_PYTHON_PREFIX}_INCLUDE_DIR}" CACHE INTERNAL "")
-  endif()
-
-  # Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES
-  unset (_${_PYTHON_PREFIX}_CMAKE_FIND_LIBRARY_SUFFIXES)
-  if (DEFINED ${_PYTHON_PREFIX}_USE_STATIC_LIBS AND NOT WIN32)
-    set(_${_PYTHON_PREFIX}_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
-    if(${_PYTHON_PREFIX}_USE_STATIC_LIBS)
-      set (CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX})
-    else()
-      list (REMOVE_ITEM CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX})
-    endif()
-  endif()
-
-  if (NOT _${_PYTHON_PREFIX}_LIBRARY_RELEASE OR NOT _${_PYTHON_PREFIX}_INCLUDE_DIR)
-    # if python interpreter is found, use it to look-up for artifacts
-    # to ensure consistency between interpreter and development environments.
-    # If not, try to locate a compatible config tool
-    if ((NOT ${_PYTHON_PREFIX}_Interpreter_FOUND OR CMAKE_CROSSCOMPILING)
-        AND "CPython" IN_LIST _${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS)
-      set (_${_PYTHON_PREFIX}_HINTS "${${_PYTHON_PREFIX}_ROOT_DIR}" ENV ${_PYTHON_PREFIX}_ROOT_DIR)
-      unset (_${_PYTHON_PREFIX}_VIRTUALENV_PATHS)
-      if (_${_PYTHON_PREFIX}_FIND_VIRTUALENV MATCHES "^(FIRST|ONLY)$")
-        set (_${_PYTHON_PREFIX}_VIRTUALENV_PATHS ENV VIRTUAL_ENV ENV CONDA_PREFIX)
-      endif()
-
-      if (_${_PYTHON_PREFIX}_FIND_STRATEGY STREQUAL "LOCATION")
-        _python_get_names (_${_PYTHON_PREFIX}_CONFIG_NAMES VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS} POSIX CONFIG)
-          # Framework Paths
-        _python_get_frameworks (_${_PYTHON_PREFIX}_FRAMEWORK_PATHS VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS})
-
-        # Apple frameworks handling
-        if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "FIRST")
-          find_program (_${_PYTHON_PREFIX}_CONFIG
-                        NAMES ${_${_PYTHON_PREFIX}_CONFIG_NAMES}
-                        NAMES_PER_DIR
-                        HINTS ${_${_PYTHON_PREFIX}_HINTS}
-                        PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
-                              ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
-                        PATH_SUFFIXES bin
-                        NO_CMAKE_PATH
-                        NO_CMAKE_ENVIRONMENT_PATH
-                        NO_SYSTEM_ENVIRONMENT_PATH
-                        NO_CMAKE_SYSTEM_PATH)
-        endif()
-
-        find_program (_${_PYTHON_PREFIX}_CONFIG
-                      NAMES ${_${_PYTHON_PREFIX}_CONFIG_NAMES}
-                      NAMES_PER_DIR
-                      HINTS ${_${_PYTHON_PREFIX}_HINTS}
-                      PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
-                      PATH_SUFFIXES bin)
-
-        # Apple frameworks handling
-        if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "LAST")
-          find_program (_${_PYTHON_PREFIX}_CONFIG
-                        NAMES ${_${_PYTHON_PREFIX}_CONFIG_NAMES}
-                        NAMES_PER_DIR
-                        PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
-                        PATH_SUFFIXES bin
-                        NO_DEFAULT_PATH)
-        endif()
-
-        if (_${_PYTHON_PREFIX}_CONFIG)
-          execute_process (COMMAND "${_${_PYTHON_PREFIX}_CONFIG}" --help
-                           RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
-                           OUTPUT_VARIABLE __${_PYTHON_PREFIX}_HELP
-                           ERROR_QUIET
-                           OUTPUT_STRIP_TRAILING_WHITESPACE)
-          if (_${_PYTHON_PREFIX}_RESULT)
-            # assume config tool is not usable
-            unset (_${_PYTHON_PREFIX}_CONFIG CACHE)
-          endif()
-        endif()
-
-        if (_${_PYTHON_PREFIX}_CONFIG)
-          execute_process (COMMAND "${_${_PYTHON_PREFIX}_CONFIG}" --abiflags
-                           RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
-                           OUTPUT_VARIABLE __${_PYTHON_PREFIX}_ABIFLAGS
-                           ERROR_QUIET
-                           OUTPUT_STRIP_TRAILING_WHITESPACE)
-          if (_${_PYTHON_PREFIX}_RESULT)
-            # assume ABI is not supported
-            set (__${_PYTHON_PREFIX}_ABIFLAGS "")
-          endif()
-          if (DEFINED _${_PYTHON_PREFIX}_FIND_ABI AND NOT __${_PYTHON_PREFIX}_ABIFLAGS IN_LIST _${_PYTHON_PREFIX}_ABIFLAGS)
-            # Wrong ABI
-            unset (_${_PYTHON_PREFIX}_CONFIG CACHE)
-          endif()
-        endif()
-
-        if (_${_PYTHON_PREFIX}_CONFIG AND DEFINED CMAKE_LIBRARY_ARCHITECTURE)
-          # check that config tool match library architecture
-          execute_process (COMMAND "${_${_PYTHON_PREFIX}_CONFIG}" --configdir
-                           RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
-                           OUTPUT_VARIABLE _${_PYTHON_PREFIX}_CONFIGDIR
-                           ERROR_QUIET
-                           OUTPUT_STRIP_TRAILING_WHITESPACE)
-          if (_${_PYTHON_PREFIX}_RESULT)
-            unset (_${_PYTHON_PREFIX}_CONFIG CACHE)
-          else()
-            string(FIND "${_${_PYTHON_PREFIX}_CONFIGDIR}" "${CMAKE_LIBRARY_ARCHITECTURE}" _${_PYTHON_PREFIX}_RESULT)
-            if (_${_PYTHON_PREFIX}_RESULT EQUAL -1)
-              unset (_${_PYTHON_PREFIX}_CONFIG CACHE)
-            endif()
-          endif()
-        endif()
-      else()
-        foreach (_${_PYTHON_PREFIX}_VERSION IN LISTS _${_PYTHON_PREFIX}_FIND_VERSIONS)
-          # try to use pythonX.Y-config tool
-          _python_get_names (_${_PYTHON_PREFIX}_CONFIG_NAMES VERSION ${_${_PYTHON_PREFIX}_VERSION} POSIX CONFIG)
-
-          # Framework Paths
-          _python_get_frameworks (_${_PYTHON_PREFIX}_FRAMEWORK_PATHS VERSION ${_${_PYTHON_PREFIX}_VERSION})
-
-          # Apple frameworks handling
-          if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "FIRST")
-            find_program (_${_PYTHON_PREFIX}_CONFIG
-                          NAMES ${_${_PYTHON_PREFIX}_CONFIG_NAMES}
-                          NAMES_PER_DIR
-                          HINTS ${_${_PYTHON_PREFIX}_HINTS}
-                          PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
-                                ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
-                          PATH_SUFFIXES bin
-                          NO_CMAKE_PATH
-                          NO_CMAKE_ENVIRONMENT_PATH
-                          NO_SYSTEM_ENVIRONMENT_PATH
-                          NO_CMAKE_SYSTEM_PATH)
-          endif()
-
-          find_program (_${_PYTHON_PREFIX}_CONFIG
-                        NAMES ${_${_PYTHON_PREFIX}_CONFIG_NAMES}
-                        NAMES_PER_DIR
-                        HINTS ${_${_PYTHON_PREFIX}_HINTS}
-                        PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
-                        PATH_SUFFIXES bin)
-
-          # Apple frameworks handling
-          if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "LAST")
-            find_program (_${_PYTHON_PREFIX}_CONFIG
-                          NAMES ${_${_PYTHON_PREFIX}_CONFIG_NAMES}
-                          NAMES_PER_DIR
-                          PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
-                          PATH_SUFFIXES bin
-                          NO_DEFAULT_PATH)
-          endif()
-
-          unset (_${_PYTHON_PREFIX}_CONFIG_NAMES)
-
-          if (_${_PYTHON_PREFIX}_CONFIG)
-            execute_process (COMMAND "${_${_PYTHON_PREFIX}_CONFIG}" --help
-                             RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
-                             OUTPUT_VARIABLE __${_PYTHON_PREFIX}_HELP
-                             ERROR_QUIET
-                             OUTPUT_STRIP_TRAILING_WHITESPACE)
-            if (_${_PYTHON_PREFIX}_RESULT)
-              # assume config tool is not usable
-              unset (_${_PYTHON_PREFIX}_CONFIG CACHE)
-            endif()
-          endif()
-
-          if (NOT _${_PYTHON_PREFIX}_CONFIG)
-            continue()
-          endif()
-
-          execute_process (COMMAND "${_${_PYTHON_PREFIX}_CONFIG}" --abiflags
-                           RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
-                           OUTPUT_VARIABLE __${_PYTHON_PREFIX}_ABIFLAGS
-                           ERROR_QUIET
-                           OUTPUT_STRIP_TRAILING_WHITESPACE)
-          if (_${_PYTHON_PREFIX}_RESULT)
-            # assume ABI is not supported
-            set (__${_PYTHON_PREFIX}_ABIFLAGS "")
-          endif()
-          if (DEFINED _${_PYTHON_PREFIX}_FIND_ABI AND NOT __${_PYTHON_PREFIX}_ABIFLAGS IN_LIST _${_PYTHON_PREFIX}_ABIFLAGS)
-            # Wrong ABI
-            unset (_${_PYTHON_PREFIX}_CONFIG CACHE)
-            continue()
-          endif()
-
-          if (_${_PYTHON_PREFIX}_CONFIG AND DEFINED CMAKE_LIBRARY_ARCHITECTURE)
-            # check that config tool match library architecture
-            execute_process (COMMAND "${_${_PYTHON_PREFIX}_CONFIG}" --configdir
-                             RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
-                             OUTPUT_VARIABLE _${_PYTHON_PREFIX}_CONFIGDIR
-                             ERROR_QUIET
-                             OUTPUT_STRIP_TRAILING_WHITESPACE)
-            if (_${_PYTHON_PREFIX}_RESULT)
-              unset (_${_PYTHON_PREFIX}_CONFIG CACHE)
-              continue()
-            endif()
-            string (FIND "${_${_PYTHON_PREFIX}_CONFIGDIR}" "${CMAKE_LIBRARY_ARCHITECTURE}" _${_PYTHON_PREFIX}_RESULT)
-            if (_${_PYTHON_PREFIX}_RESULT EQUAL -1)
-              unset (_${_PYTHON_PREFIX}_CONFIG CACHE)
-              continue()
-            endif()
-          endif()
-
-          if (_${_PYTHON_PREFIX}_CONFIG)
-            break()
-          endif()
-        endforeach()
-      endif()
-    endif()
-  endif()
-
-  if ("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
-    if (NOT _${_PYTHON_PREFIX}_LIBRARY_RELEASE)
-      if ((${_PYTHON_PREFIX}_Interpreter_FOUND AND NOT CMAKE_CROSSCOMPILING) OR _${_PYTHON_PREFIX}_CONFIG)
-        # retrieve root install directory
-        _python_get_config_var (_${_PYTHON_PREFIX}_PREFIX PREFIX)
-
-        # enforce current ABI
-        _python_get_config_var (_${_PYTHON_PREFIX}_ABIFLAGS ABIFLAGS)
-
-        set (_${_PYTHON_PREFIX}_HINTS "${_${_PYTHON_PREFIX}_PREFIX}")
-
-        # retrieve library
-        ## compute some paths and artifact names
-        if (_${_PYTHON_PREFIX}_CONFIG)
-          string (REGEX REPLACE "^.+python([0-9.]+)[a-z]*-config" "\\1" _${_PYTHON_PREFIX}_VERSION "${_${_PYTHON_PREFIX}_CONFIG}")
-        else()
-          set (_${_PYTHON_PREFIX}_VERSION "${${_PYTHON_PREFIX}_VERSION_MAJOR}.${${_PYTHON_PREFIX}_VERSION_MINOR}")
-        endif()
-        _python_get_path_suffixes (_${_PYTHON_PREFIX}_PATH_SUFFIXES VERSION ${_${_PYTHON_PREFIX}_VERSION} LIBRARY)
-        _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES VERSION ${_${_PYTHON_PREFIX}_VERSION} WIN32 POSIX LIBRARY)
-
-        _python_get_config_var (_${_PYTHON_PREFIX}_CONFIGDIR CONFIGDIR)
-        list (APPEND _${_PYTHON_PREFIX}_HINTS "${_${_PYTHON_PREFIX}_CONFIGDIR}")
-
-        list (APPEND _${_PYTHON_PREFIX}_HINTS "${${_PYTHON_PREFIX}_ROOT_DIR}" ENV ${_PYTHON_PREFIX}_ROOT_DIR)
-
-        find_library (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
-                      NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
-                      NAMES_PER_DIR
-                      HINTS ${_${_PYTHON_PREFIX}_HINTS}
-                      PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                      NO_SYSTEM_ENVIRONMENT_PATH
-                      NO_CMAKE_SYSTEM_PATH)
-      endif()
-
-      # Rely on HINTS and standard paths if interpreter or config tool failed to locate artifacts
-      if (NOT _${_PYTHON_PREFIX}_LIBRARY_RELEASE)
-        set (_${_PYTHON_PREFIX}_HINTS "${${_PYTHON_PREFIX}_ROOT_DIR}" ENV ${_PYTHON_PREFIX}_ROOT_DIR)
-
-        unset (_${_PYTHON_PREFIX}_VIRTUALENV_PATHS)
-        if (_${_PYTHON_PREFIX}_FIND_VIRTUALENV MATCHES "^(FIRST|ONLY)$")
-          set (_${_PYTHON_PREFIX}_VIRTUALENV_PATHS ENV VIRTUAL_ENV ENV CONDA_PREFIX)
-        endif()
-
-        if (_${_PYTHON_PREFIX}_FIND_STRATEGY STREQUAL "LOCATION")
-          # library names
-          _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS} WIN32 POSIX LIBRARY)
-          _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS} WIN32 DEBUG)
-          # Paths suffixes
-          _python_get_path_suffixes (_${_PYTHON_PREFIX}_PATH_SUFFIXES VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS} LIBRARY)
-
-          # Framework Paths
-          _python_get_frameworks (_${_PYTHON_PREFIX}_FRAMEWORK_PATHS VERSION ${_${_PYTHON_PREFIX}_LIB_FIND_VERSIONS})
-          # Registry Paths
-          _python_get_registries (_${_PYTHON_PREFIX}_REGISTRY_PATHS VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS} )
-
-          if (APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "FIRST")
-            find_library (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
-                          NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
-                          NAMES_PER_DIR
-                          HINTS ${_${_PYTHON_PREFIX}_HINTS}
-                          PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
-                                ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
-                          PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                          NO_CMAKE_PATH
-                          NO_CMAKE_ENVIRONMENT_PATH
-                          NO_SYSTEM_ENVIRONMENT_PATH
-                          NO_CMAKE_SYSTEM_PATH)
-          endif()
-
-          if (WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "FIRST")
-            find_library (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
-                          NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
-                          NAMES_PER_DIR
-                          HINTS ${_${_PYTHON_PREFIX}_HINTS}
-                          PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
-                                ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
-                          PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                          NO_SYSTEM_ENVIRONMENT_PATH
-                          NO_CMAKE_SYSTEM_PATH)
-          endif()
-
-          # search in HINTS locations
-          find_library (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
-                        NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
-                        NAMES_PER_DIR
-                        HINTS ${_${_PYTHON_PREFIX}_HINTS}
-                        PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
-                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                        NO_SYSTEM_ENVIRONMENT_PATH
-                        NO_CMAKE_SYSTEM_PATH)
-
-          if (APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "LAST")
-            set (__${_PYTHON_PREFIX}_FRAMEWORK_PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS})
-          else()
-            unset (__${_PYTHON_PREFIX}_FRAMEWORK_PATHS)
-          endif()
-
-          if (WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "LAST")
-            set (__${_PYTHON_PREFIX}_REGISTRY_PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS})
-          else()
-            unset (__${_PYTHON_PREFIX}_REGISTRY_PATHS)
-          endif()
-
-          # search in all default paths
-          find_library (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
-                        NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
-                        NAMES_PER_DIR
-                        PATHS ${__${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
-                              ${__${_PYTHON_PREFIX}_REGISTRY_PATHS}
-                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES})
-        else()
-          foreach (_${_PYTHON_PREFIX}_LIB_VERSION IN LISTS _${_PYTHON_PREFIX}_FIND_VERSIONS)
-            _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES VERSION ${_${_PYTHON_PREFIX}_LIB_VERSION} WIN32 POSIX LIBRARY)
-            _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG VERSION ${_${_PYTHON_PREFIX}_LIB_VERSION} WIN32 DEBUG)
-
-            _python_get_frameworks (_${_PYTHON_PREFIX}_FRAMEWORK_PATHS VERSION ${_${_PYTHON_PREFIX}_LIB_VERSION})
-            _python_get_registries (_${_PYTHON_PREFIX}_REGISTRY_PATHS VERSION ${_${_PYTHON_PREFIX}_LIB_VERSION})
-
-            _python_get_path_suffixes (_${_PYTHON_PREFIX}_PATH_SUFFIXES VERSION ${_${_PYTHON_PREFIX}_LIB_VERSION} LIBRARY)
-
-            if (APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "FIRST")
-              find_library (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
-                            NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
-                            NAMES_PER_DIR
-                            HINTS ${_${_PYTHON_PREFIX}_HINTS}
-                            PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
-                                  ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
-                            PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                            NO_CMAKE_PATH
-                            NO_CMAKE_ENVIRONMENT_PATH
-                            NO_SYSTEM_ENVIRONMENT_PATH
-                            NO_CMAKE_SYSTEM_PATH)
-            endif()
-
-            if (WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "FIRST")
-              find_library (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
-                            NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
-                            NAMES_PER_DIR
-                            HINTS ${_${_PYTHON_PREFIX}_HINTS}
-                            PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
-                                  ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
-                            PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                            NO_SYSTEM_ENVIRONMENT_PATH
-                            NO_CMAKE_SYSTEM_PATH)
-            endif()
-
-            # search in HINTS locations
-            find_library (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
-                          NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
-                          NAMES_PER_DIR
-                          HINTS ${_${_PYTHON_PREFIX}_HINTS}
-                          PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
-                          PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                          NO_SYSTEM_ENVIRONMENT_PATH
-                          NO_CMAKE_SYSTEM_PATH)
-
-            if (APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "LAST")
-              set (__${_PYTHON_PREFIX}_FRAMEWORK_PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS})
-            else()
-              unset (__${_PYTHON_PREFIX}_FRAMEWORK_PATHS)
-            endif()
-
-            if (WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "LAST")
-              set (__${_PYTHON_PREFIX}_REGISTRY_PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS})
-            else()
-              unset (__${_PYTHON_PREFIX}_REGISTRY_PATHS)
-            endif()
-
-            # search in all default paths
-            find_library (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
-                          NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
-                          NAMES_PER_DIR
-                          PATHS ${__${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
-                                ${__${_PYTHON_PREFIX}_REGISTRY_PATHS}
-                          PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES})
-
-            if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE)
-              break()
-            endif()
-          endforeach()
-        endif()
-      endif()
-    endif()
-
-    # finalize library version information
-    _python_get_version (LIBRARY PREFIX _${_PYTHON_PREFIX}_)
-    if (_${_PYTHON_PREFIX}_VERSION EQUAL "${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR}")
-      # not able to extract full version from library name
-      if (${_PYTHON_PREFIX}_Interpreter_FOUND)
-        # update from interpreter
-        set (_${_PYTHON_PREFIX}_VERSION ${${_PYTHON_PREFIX}_VERSION})
-        set (_${_PYTHON_PREFIX}_VERSION_MAJOR ${${_PYTHON_PREFIX}_VERSION_MAJOR})
-        set (_${_PYTHON_PREFIX}_VERSION_MINOR ${${_PYTHON_PREFIX}_VERSION_MINOR})
-        set (_${_PYTHON_PREFIX}_VERSION_PATCH ${${_PYTHON_PREFIX}_VERSION_PATCH})
-      endif()
-    endif()
-
-    set (${_PYTHON_PREFIX}_LIBRARY_RELEASE "${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}")
-
-    if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE AND NOT EXISTS "${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}")
-      set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE "Cannot find the library \"${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}\"")
-      set_property (CACHE _${_PYTHON_PREFIX}_LIBRARY_RELEASE PROPERTY VALUE "${_PYTHON_PREFIX}_LIBRARY_RELEASE-NOTFOUND")
-    endif()
-
-    set (_${_PYTHON_PREFIX}_HINTS "${${_PYTHON_PREFIX}_ROOT_DIR}" ENV ${_PYTHON_PREFIX}_ROOT_DIR)
-
-    if (WIN32 AND _${_PYTHON_PREFIX}_LIBRARY_RELEASE)
-      # search for debug library
-      # use release library location as a hint
-      _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG VERSION ${_${_PYTHON_PREFIX}_VERSION} WIN32 DEBUG)
-      get_filename_component (_${_PYTHON_PREFIX}_PATH "${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}" DIRECTORY)
-      find_library (_${_PYTHON_PREFIX}_LIBRARY_DEBUG
-                    NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG}
-                    NAMES_PER_DIR
-                    HINTS "${_${_PYTHON_PREFIX}_PATH}" ${_${_PYTHON_PREFIX}_HINTS}
-                    NO_DEFAULT_PATH)
-      # second try including CMAKE variables to catch-up non conventional layouts
-      find_library (_${_PYTHON_PREFIX}_LIBRARY_DEBUG
-                    NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG}
-                    NAMES_PER_DIR
-                    NO_SYSTEM_ENVIRONMENT_PATH
-                    NO_CMAKE_SYSTEM_PATH)
-    endif()
-
-    # retrieve runtime libraries
-    if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE)
-      _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES VERSION ${_${_PYTHON_PREFIX}_VERSION} WIN32 POSIX LIBRARY)
-      get_filename_component (_${_PYTHON_PREFIX}_PATH "${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}" DIRECTORY)
-      get_filename_component (_${_PYTHON_PREFIX}_PATH2 "${_${_PYTHON_PREFIX}_PATH}" DIRECTORY)
-      _python_find_runtime_library (_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE
-                                    NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
-                                    NAMES_PER_DIR
-                                    HINTS "${_${_PYTHON_PREFIX}_PATH}"
-                                          "${_${_PYTHON_PREFIX}_PATH2}" ${_${_PYTHON_PREFIX}_HINTS}
-                                    PATH_SUFFIXES bin)
-    endif()
-    if (_${_PYTHON_PREFIX}_LIBRARY_DEBUG)
-      _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG VERSION ${_${_PYTHON_PREFIX}_VERSION} WIN32 DEBUG)
-      get_filename_component (_${_PYTHON_PREFIX}_PATH "${_${_PYTHON_PREFIX}_LIBRARY_DEBUG}" DIRECTORY)
-      get_filename_component (_${_PYTHON_PREFIX}_PATH2 "${_${_PYTHON_PREFIX}_PATH}" DIRECTORY)
-      _python_find_runtime_library (_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG
-                                    NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG}
-                                    NAMES_PER_DIR
-                                    HINTS "${_${_PYTHON_PREFIX}_PATH}"
-                                          "${_${_PYTHON_PREFIX}_PATH2}" ${_${_PYTHON_PREFIX}_HINTS}
-                                    PATH_SUFFIXES bin)
-    endif()
-  endif()
-
-  if ("INCLUDE_DIR" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
-    while (NOT _${_PYTHON_PREFIX}_INCLUDE_DIR)
-      if ("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS
-          AND NOT _${_PYTHON_PREFIX}_LIBRARY_RELEASE)
-        # Don't search for include dir if no library was founded
-        break()
-      endif()
-
-      if ((${_PYTHON_PREFIX}_Interpreter_FOUND AND NOT CMAKE_CROSSCOMPILING) OR _${_PYTHON_PREFIX}_CONFIG)
-        _python_get_config_var (_${_PYTHON_PREFIX}_INCLUDE_DIRS INCLUDES)
-
-        find_path (_${_PYTHON_PREFIX}_INCLUDE_DIR
-                   NAMES ${_${_PYTHON_PREFIX}_INCLUDE_NAMES}
-                   HINTS ${_${_PYTHON_PREFIX}_INCLUDE_DIRS}
-                   NO_SYSTEM_ENVIRONMENT_PATH
-                   NO_CMAKE_SYSTEM_PATH)
-      endif()
-
-      # Rely on HINTS and standard paths if interpreter or config tool failed to locate artifacts
-      if (NOT _${_PYTHON_PREFIX}_INCLUDE_DIR)
-        unset (_${_PYTHON_PREFIX}_VIRTUALENV_PATHS)
-        if (_${_PYTHON_PREFIX}_FIND_VIRTUALENV MATCHES "^(FIRST|ONLY)$")
-          set (_${_PYTHON_PREFIX}_VIRTUALENV_PATHS ENV VIRTUAL_ENV ENV CONDA_PREFIX)
-        endif()
-        unset (_${_PYTHON_PREFIX}_INCLUDE_HINTS)
-
-        if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE)
-          # Use the library's install prefix as a hint
-          if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE MATCHES "^(.+/Frameworks/Python.framework/Versions/[0-9.]+)")
-            list (APPEND _${_PYTHON_PREFIX}_INCLUDE_HINTS "${CMAKE_MATCH_1}")
-          elseif (_${_PYTHON_PREFIX}_LIBRARY_RELEASE MATCHES "^(.+)/lib(64|32)?/python[0-9.]+/config")
-            list (APPEND _${_PYTHON_PREFIX}_INCLUDE_HINTS "${CMAKE_MATCH_1}")
-          elseif (DEFINED CMAKE_LIBRARY_ARCHITECTURE AND ${_${_PYTHON_PREFIX}_LIBRARY_RELEASE} MATCHES "^(.+)/lib/${CMAKE_LIBRARY_ARCHITECTURE}")
-            list (APPEND _${_PYTHON_PREFIX}_INCLUDE_HINTS "${CMAKE_MATCH_1}")
-          else()
-            # assume library is in a directory under root
-            get_filename_component (_${_PYTHON_PREFIX}_PREFIX "${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}" DIRECTORY)
-            get_filename_component (_${_PYTHON_PREFIX}_PREFIX "${_${_PYTHON_PREFIX}_PREFIX}" DIRECTORY)
-            list (APPEND _${_PYTHON_PREFIX}_INCLUDE_HINTS "${_${_PYTHON_PREFIX}_PREFIX}")
-          endif()
-        endif()
-
-        _python_get_frameworks (_${_PYTHON_PREFIX}_FRAMEWORK_PATHS VERSION ${_${_PYTHON_PREFIX}_VERSION})
-        _python_get_registries (_${_PYTHON_PREFIX}_REGISTRY_PATHS VERSION ${_${_PYTHON_PREFIX}_VERSION})
-        _python_get_path_suffixes (_${_PYTHON_PREFIX}_PATH_SUFFIXES VERSION ${_${_PYTHON_PREFIX}_VERSION} INCLUDE)
-
-        if (APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "FIRST")
-          find_path (_${_PYTHON_PREFIX}_INCLUDE_DIR
-                     NAMES ${_${_PYTHON_PREFIX}_INCLUDE_NAMES}
-                     HINTS ${_${_PYTHON_PREFIX}_INCLUDE_HINTS} ${_${_PYTHON_PREFIX}_HINTS}
-                     PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
-                           ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
-                     PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                     NO_CMAKE_PATH
-                     NO_CMAKE_ENVIRONMENT_PATH
-                     NO_SYSTEM_ENVIRONMENT_PATH
-                     NO_CMAKE_SYSTEM_PATH)
-        endif()
-
-        if (WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "FIRST")
-          find_path (_${_PYTHON_PREFIX}_INCLUDE_DIR
-                     NAMES ${_${_PYTHON_PREFIX}_INCLUDE_NAMES}
-                     HINTS ${_${_PYTHON_PREFIX}_INCLUDE_HINTS} ${_${_PYTHON_PREFIX}_HINTS}
-                     PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
-                           ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
-                     PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                     NO_SYSTEM_ENVIRONMENT_PATH
-                     NO_CMAKE_SYSTEM_PATH)
-        endif()
-
-        if (APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "LAST")
-          set (__${_PYTHON_PREFIX}_FRAMEWORK_PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS})
-        else()
-          unset (__${_PYTHON_PREFIX}_FRAMEWORK_PATHS)
-        endif()
-
-        if (WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "LAST")
-          set (__${_PYTHON_PREFIX}_REGISTRY_PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS})
-        else()
-          unset (__${_PYTHON_PREFIX}_REGISTRY_PATHS)
-        endif()
-
-        find_path (_${_PYTHON_PREFIX}_INCLUDE_DIR
-                   NAMES ${_${_PYTHON_PREFIX}_INCLUDE_NAMES}
-                   HINTS ${_${_PYTHON_PREFIX}_INCLUDE_HINTS} ${_${_PYTHON_PREFIX}_HINTS}
-                   PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
-                         ${__${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
-                         ${__${_PYTHON_PREFIX}_REGISTRY_PATHS}
-                   PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
-                   NO_SYSTEM_ENVIRONMENT_PATH
-                   NO_CMAKE_SYSTEM_PATH)
-      endif()
-
-      # search header file in standard locations
-      find_path (_${_PYTHON_PREFIX}_INCLUDE_DIR
-                 NAMES ${_${_PYTHON_PREFIX}_INCLUDE_NAMES})
-
-      break()
-    endwhile()
-
-    set (${_PYTHON_PREFIX}_INCLUDE_DIRS "${_${_PYTHON_PREFIX}_INCLUDE_DIR}")
-
-    if (_${_PYTHON_PREFIX}_INCLUDE_DIR AND NOT EXISTS "${_${_PYTHON_PREFIX}_INCLUDE_DIR}")
-      set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE "Cannot find the directory \"${_${_PYTHON_PREFIX}_INCLUDE_DIR}\"")
-      set_property (CACHE _${_PYTHON_PREFIX}_INCLUDE_DIR PROPERTY VALUE "${_PYTHON_PREFIX}_INCLUDE_DIR-NOTFOUND")
-    endif()
-
-    if (_${_PYTHON_PREFIX}_INCLUDE_DIR)
-      # retrieve version from header file
-      _python_get_version (INCLUDE PREFIX _${_PYTHON_PREFIX}_INC_)
-
-      if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE)
-        if ("${_${_PYTHON_PREFIX}_INC_VERSION_MAJOR}.${_${_PYTHON_PREFIX}_INC_VERSION_MINOR}"
-            VERSION_EQUAL _${_PYTHON_PREFIX}_VERSION)
-          # update versioning
-          set (_${_PYTHON_PREFIX}_VERSION ${_${_PYTHON_PREFIX}_INC_VERSION})
-          set (_${_PYTHON_PREFIX}_VERSION_PATCH ${_${_PYTHON_PREFIX}_INC_VERSION_PATCH})
-        endif()
-      else()
-        set (_${_PYTHON_PREFIX}_VERSION ${_${_PYTHON_PREFIX}_INC_VERSION})
-        set (_${_PYTHON_PREFIX}_VERSION_MAJOR ${_${_PYTHON_PREFIX}_INC_VERSION_MAJOR})
-        set (_${_PYTHON_PREFIX}_VERSION_MINOR ${_${_PYTHON_PREFIX}_INC_VERSION_MINOR})
-        set (_${_PYTHON_PREFIX}_VERSION_PATCH ${_${_PYTHON_PREFIX}_INC_VERSION_PATCH})
-      endif()
-    endif()
-  endif()
-
-  if (NOT ${_PYTHON_PREFIX}_Interpreter_FOUND AND NOT ${_PYTHON_PREFIX}_Compiler_FOUND)
-    # set public version information
-    set (${_PYTHON_PREFIX}_VERSION ${_${_PYTHON_PREFIX}_VERSION})
-    set (${_PYTHON_PREFIX}_VERSION_MAJOR ${_${_PYTHON_PREFIX}_VERSION_MAJOR})
-    set (${_PYTHON_PREFIX}_VERSION_MINOR ${_${_PYTHON_PREFIX}_VERSION_MINOR})
-    set (${_PYTHON_PREFIX}_VERSION_PATCH ${_${_PYTHON_PREFIX}_VERSION_PATCH})
-  endif()
-
-  # define public variables
-  if ("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
-    set (${_PYTHON_PREFIX}_LIBRARY_DEBUG "${_${_PYTHON_PREFIX}_LIBRARY_DEBUG}")
-    _python_select_library_configurations (${_PYTHON_PREFIX})
-
-    set (${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE "${_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE}")
-    set (${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG "${_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG}")
-
-    if (_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE)
-      set (${_PYTHON_PREFIX}_RUNTIME_LIBRARY "${_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE}")
-    elseif (_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG)
-      set (${_PYTHON_PREFIX}_RUNTIME_LIBRARY "${_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG}")
-    else()
-      set (${_PYTHON_PREFIX}_RUNTIME_LIBRARY "${_PYTHON_PREFIX}_RUNTIME_LIBRARY-NOTFOUND")
-    endif()
-
-    _python_set_library_dirs (${_PYTHON_PREFIX}_LIBRARY_DIRS
-                              _${_PYTHON_PREFIX}_LIBRARY_RELEASE
-                              _${_PYTHON_PREFIX}_LIBRARY_DEBUG)
-    if (UNIX)
-      if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE MATCHES "${CMAKE_SHARED_LIBRARY_SUFFIX}$")
-        set (${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DIRS ${${_PYTHON_PREFIX}_LIBRARY_DIRS})
-      endif()
-    else()
-      _python_set_library_dirs (${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DIRS
-                                _${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE
-                                _${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG)
-    endif()
-  endif()
-
-  if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE OR _${_PYTHON_PREFIX}_INCLUDE_DIR)
-    if (${_PYTHON_PREFIX}_Interpreter_FOUND OR ${_PYTHON_PREFIX}_Compiler_FOUND)
-      # development environment must be compatible with interpreter/compiler
-      if ("${_${_PYTHON_PREFIX}_VERSION_MAJOR}.${_${_PYTHON_PREFIX}_VERSION_MINOR}" VERSION_EQUAL "${${_PYTHON_PREFIX}_VERSION_MAJOR}.${${_PYTHON_PREFIX}_VERSION_MINOR}"
-          AND "${_${_PYTHON_PREFIX}_INC_VERSION_MAJOR}.${_${_PYTHON_PREFIX}_INC_VERSION_MINOR}" VERSION_EQUAL "${_${_PYTHON_PREFIX}_VERSION_MAJOR}.${_${_PYTHON_PREFIX}_VERSION_MINOR}")
-        _python_set_development_module_found (Module)
-        _python_set_development_module_found (Embed)
-      endif()
-    elseif (${_PYTHON_PREFIX}_VERSION_MAJOR VERSION_EQUAL _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR
-        AND "${_${_PYTHON_PREFIX}_INC_VERSION_MAJOR}.${_${_PYTHON_PREFIX}_INC_VERSION_MINOR}" VERSION_EQUAL "${_${_PYTHON_PREFIX}_VERSION_MAJOR}.${_${_PYTHON_PREFIX}_VERSION_MINOR}")
-      _python_set_development_module_found (Module)
-      _python_set_development_module_found (Embed)
-    endif()
-    if (DEFINED _${_PYTHON_PREFIX}_FIND_ABI AND
-        (NOT _${_PYTHON_PREFIX}_ABI IN_LIST _${_PYTHON_PREFIX}_ABIFLAGS
-          OR NOT _${_PYTHON_PREFIX}_INC_ABI IN_LIST _${_PYTHON_PREFIX}_ABIFLAGS))
-      set (${_PYTHON_PREFIX}_Development.Module_FOUND FALSE)
-      set (${_PYTHON_PREFIX}_Development.Embed_FOUND FALSE)
-    endif()
-  endif()
-
-  if (( ${_PYTHON_PREFIX}_Development.Module_FOUND
-        AND ${_PYTHON_PREFIX}_Development.Embed_FOUND)
-      OR (NOT "Development.Module" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
-        AND ${_PYTHON_PREFIX}_Development.Embed_FOUND)
-      OR (NOT "Development.Embed" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
-        AND ${_PYTHON_PREFIX}_Development.Module_FOUND))
-    unset (_${_PYTHON_PREFIX}_Development_REASON_FAILURE)
-  endif()
-
-  if ("Development" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
-      AND ${_PYTHON_PREFIX}_Development.Module_FOUND
-      AND ${_PYTHON_PREFIX}_Development.Embed_FOUND)
-    set (${_PYTHON_PREFIX}_Development_FOUND TRUE)
-  endif()
-
-  if ((${_PYTHON_PREFIX}_Development.Module_FOUND
-      OR ${_PYTHON_PREFIX}_Development.Embed_FOUND)
-    AND EXISTS "${_${_PYTHON_PREFIX}_INCLUDE_DIR}/PyPy.h")
-  # retrieve PyPy version
-  file (STRINGS "${_${_PYTHON_PREFIX}_INCLUDE_DIR}/patchlevel.h" ${_PYTHON_PREFIX}_PyPy_VERSION
-                REGEX "^#define[ \t]+PYPY_VERSION[ \t]+\"[^\"]+\"")
-  string (REGEX REPLACE "^#define[ \t]+PYPY_VERSION[ \t]+\"([^\"]+)\".*" "\\1"
-                ${_PYTHON_PREFIX}_PyPy_VERSION "${${_PYTHON_PREFIX}_PyPy_VERSION}")
-  endif()
-
-  if (_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR VERSION_GREATER_EQUAL "3"
-      AND NOT DEFINED ${_PYTHON_PREFIX}_SOABI)
-    _python_get_config_var (${_PYTHON_PREFIX}_SOABI SOABI)
-  endif()
-
-  _python_compute_development_signature (Module)
-  _python_compute_development_signature (Embed)
-
-  # Restore the original find library ordering
-  if (DEFINED _${_PYTHON_PREFIX}_CMAKE_FIND_LIBRARY_SUFFIXES)
-    set (CMAKE_FIND_LIBRARY_SUFFIXES ${_${_PYTHON_PREFIX}_CMAKE_FIND_LIBRARY_SUFFIXES})
-  endif()
-
-  if (${_PYTHON_PREFIX}_ARTIFACTS_INTERACTIVE)
-    if ("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
-      set (${_PYTHON_PREFIX}_LIBRARY "${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}" CACHE FILEPATH "${_PYTHON_PREFIX} Library")
-    endif()
-    if ("INCLUDE_DIR" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
-      set (${_PYTHON_PREFIX}_INCLUDE_DIR "${_${_PYTHON_PREFIX}_INCLUDE_DIR}" CACHE FILEPATH "${_PYTHON_PREFIX} Include Directory")
-    endif()
-  endif()
-
-  _python_mark_as_internal (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
-                            _${_PYTHON_PREFIX}_LIBRARY_DEBUG
-                            _${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE
-                            _${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG
-                            _${_PYTHON_PREFIX}_INCLUDE_DIR
-                            _${_PYTHON_PREFIX}_CONFIG
-                            _${_PYTHON_PREFIX}_DEVELOPMENT_MODULE_SIGNATURE
-                            _${_PYTHON_PREFIX}_DEVELOPMENT_EMBED_SIGNATURE)
-endif()
-
-if (${_PYTHON_PREFIX}_FIND_REQUIRED_NumPy)
-  list (APPEND _${_PYTHON_PREFIX}_REQUIRED_VARS ${_PYTHON_PREFIX}_NumPy_INCLUDE_DIRS)
-endif()
-if ("NumPy" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS AND ${_PYTHON_PREFIX}_Interpreter_FOUND)
-  list (APPEND _${_PYTHON_PREFIX}_CACHED_VARS _${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR)
-
-  if (DEFINED ${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR
-      AND IS_ABSOLUTE "${${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR}")
-    set (_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR "${${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR}" CACHE INTERNAL "")
-  elseif (DEFINED _${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR)
-    # compute numpy signature. Depends on interpreter and development signatures
-    string (MD5 __${_PYTHON_PREFIX}_NUMPY_SIGNATURE "${_${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE}:${_${_PYTHON_PREFIX}_DEVELOPMENT_MODULE_SIGNATURE}:${_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR}")
-    if (NOT __${_PYTHON_PREFIX}_NUMPY_SIGNATURE STREQUAL _${_PYTHON_PREFIX}_NUMPY_SIGNATURE
-        OR NOT EXISTS "${_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR}")
-      unset (_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR CACHE)
-      unset (_${_PYTHON_PREFIX}_NUMPY_SIGNATURE CACHE)
-    endif()
-  endif()
-
-  if (NOT _${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR)
-    execute_process(COMMAND ${${_PYTHON_PREFIX}_INTERPRETER_LAUNCHER} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
-                            "import sys\ntry: import numpy; sys.stdout.write(numpy.get_include())\nexcept:pass\n"
-                    RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
-                    OUTPUT_VARIABLE _${_PYTHON_PREFIX}_NumPy_PATH
-                    ERROR_QUIET
-                    OUTPUT_STRIP_TRAILING_WHITESPACE)
-
-    if (NOT _${_PYTHON_PREFIX}_RESULT)
-      find_path (_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR
-                 NAMES "numpy/arrayobject.h" "numpy/numpyconfig.h"
-                 HINTS "${_${_PYTHON_PREFIX}_NumPy_PATH}"
-                 NO_DEFAULT_PATH)
-    endif()
-  endif()
-
-  set (${_PYTHON_PREFIX}_NumPy_INCLUDE_DIRS "${_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR}")
-
-  if(_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR AND NOT EXISTS "${_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR}")
-    set (_${_PYTHON_PREFIX}_NumPy_REASON_FAILURE "Cannot find the directory \"${_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR}\"")
-    set_property (CACHE _${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR PROPERTY VALUE "${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR-NOTFOUND")
-  endif()
-
-  if (_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR)
-    execute_process (COMMAND ${${_PYTHON_PREFIX}_INTERPRETER_LAUNCHER} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
-                             "import sys\ntry: import numpy; sys.stdout.write(numpy.__version__)\nexcept:pass\n"
-                     RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
-                     OUTPUT_VARIABLE _${_PYTHON_PREFIX}_NumPy_VERSION)
-    if (NOT _${_PYTHON_PREFIX}_RESULT)
-      set (${_PYTHON_PREFIX}_NumPy_VERSION "${_${_PYTHON_PREFIX}_NumPy_VERSION}")
-    else()
-      unset (${_PYTHON_PREFIX}_NumPy_VERSION)
-    endif()
-
-    # final step: set NumPy founded only if Development.Module component is founded as well
-    set(${_PYTHON_PREFIX}_NumPy_FOUND ${${_PYTHON_PREFIX}_Development.Module_FOUND})
-  else()
-    set (${_PYTHON_PREFIX}_NumPy_FOUND FALSE)
-  endif()
-
-  if (${_PYTHON_PREFIX}_NumPy_FOUND)
-    unset (_${_PYTHON_PREFIX}_NumPy_REASON_FAILURE)
-
-    # compute and save numpy signature
-    string (MD5 __${_PYTHON_PREFIX}_NUMPY_SIGNATURE "${_${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE}:${_${_PYTHON_PREFIX}_DEVELOPMENT_MODULE_SIGNATURE}:${${_PYTHON_PREFIX}_NumPyINCLUDE_DIR}")
-    set (_${_PYTHON_PREFIX}_NUMPY_SIGNATURE "${__${_PYTHON_PREFIX}_NUMPY_SIGNATURE}" CACHE INTERNAL "")
-  else()
-    unset (_${_PYTHON_PREFIX}_NUMPY_SIGNATURE CACHE)
-  endif()
-
-  if (${_PYTHON_PREFIX}_ARTIFACTS_INTERACTIVE)
-    set (${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR "${_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR}" CACHE FILEPATH "${_PYTHON_PREFIX} NumPy Include Directory")
-  endif()
-
-  _python_mark_as_internal (_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR
-                            _${_PYTHON_PREFIX}_NUMPY_SIGNATURE)
-endif()
-
-# final validation
-if (${_PYTHON_PREFIX}_VERSION_MAJOR AND
-    NOT ${_PYTHON_PREFIX}_VERSION_MAJOR VERSION_EQUAL _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR)
-  _python_display_failure ("Could NOT find ${_PYTHON_PREFIX}: Found unsuitable major version \"${${_PYTHON_PREFIX}_VERSION_MAJOR}\", but required major version is exact version \"${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR}\"")
-endif()
-
-unset (_${_PYTHON_PREFIX}_REASON_FAILURE)
-foreach (_${_PYTHON_PREFIX}_COMPONENT IN ITEMS Interpreter Compiler Development NumPy)
-  if (_${_PYTHON_PREFIX}_${_${_PYTHON_PREFIX}_COMPONENT}_REASON_FAILURE)
-    string (APPEND _${_PYTHON_PREFIX}_REASON_FAILURE "\n        ${_${_PYTHON_PREFIX}_COMPONENT}: ${_${_PYTHON_PREFIX}_${_${_PYTHON_PREFIX}_COMPONENT}_REASON_FAILURE}")
-    unset (_${_PYTHON_PREFIX}_${_${_PYTHON_PREFIX}_COMPONENT}_REASON_FAILURE)
-  endif()
-endforeach()
-
-include (${CMAKE_CURRENT_LIST_DIR}/../FindPackageHandleStandardArgs.cmake)
-find_package_handle_standard_args (${_PYTHON_PREFIX}
-                                   REQUIRED_VARS ${_${_PYTHON_PREFIX}_REQUIRED_VARS}
-                                   VERSION_VAR ${_PYTHON_PREFIX}_VERSION
-                                   HANDLE_COMPONENTS
-                                   REASON_FAILURE_MESSAGE "${_${_PYTHON_PREFIX}_REASON_FAILURE}")
-
-# Create imported targets and helper functions
-if(_${_PYTHON_PREFIX}_CMAKE_ROLE STREQUAL "PROJECT")
-  if ("Interpreter" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
-      AND ${_PYTHON_PREFIX}_Interpreter_FOUND
-      AND NOT TARGET ${_PYTHON_PREFIX}::Interpreter)
-    add_executable (${_PYTHON_PREFIX}::Interpreter IMPORTED)
-    set_property (TARGET ${_PYTHON_PREFIX}::Interpreter
-                  PROPERTY IMPORTED_LOCATION "${${_PYTHON_PREFIX}_EXECUTABLE}")
-  endif()
-
-  if ("Compiler" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
-      AND ${_PYTHON_PREFIX}_Compiler_FOUND
-      AND NOT TARGET ${_PYTHON_PREFIX}::Compiler)
-    add_executable (${_PYTHON_PREFIX}::Compiler IMPORTED)
-    set_property (TARGET ${_PYTHON_PREFIX}::Compiler
-                  PROPERTY IMPORTED_LOCATION "${${_PYTHON_PREFIX}_COMPILER}")
-  endif()
-
-  if (("Development.Module" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
-        AND ${_PYTHON_PREFIX}_Development.Module_FOUND)
-      OR ("Development.Embed" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
-        AND ${_PYTHON_PREFIX}_Development.Embed_FOUND))
-
-    macro (__PYTHON_IMPORT_LIBRARY __name)
-      if (${_PYTHON_PREFIX}_LIBRARY_RELEASE MATCHES "${CMAKE_SHARED_LIBRARY_SUFFIX}$"
-          OR ${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE)
-        set (_${_PYTHON_PREFIX}_LIBRARY_TYPE SHARED)
-      else()
-        set (_${_PYTHON_PREFIX}_LIBRARY_TYPE STATIC)
-      endif()
-
-      if (NOT TARGET ${__name})
-        add_library (${__name} ${_${_PYTHON_PREFIX}_LIBRARY_TYPE} IMPORTED)
-      endif()
-
-      set_property (TARGET ${__name}
-                    PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${${_PYTHON_PREFIX}_INCLUDE_DIRS}")
-
-      if (${_PYTHON_PREFIX}_LIBRARY_RELEASE AND ${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE)
-        # System manage shared libraries in two parts: import and runtime
-        if (${_PYTHON_PREFIX}_LIBRARY_RELEASE AND ${_PYTHON_PREFIX}_LIBRARY_DEBUG)
-          set_property (TARGET ${__name} PROPERTY IMPORTED_CONFIGURATIONS RELEASE DEBUG)
-          set_target_properties (${__name}
-                                 PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
-                                            IMPORTED_IMPLIB_RELEASE "${${_PYTHON_PREFIX}_LIBRARY_RELEASE}"
-                                            IMPORTED_LOCATION_RELEASE "${${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE}")
-          set_target_properties (${__name}
-                                 PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
-                                            IMPORTED_IMPLIB_DEBUG "${${_PYTHON_PREFIX}_LIBRARY_DEBUG}"
-                                            IMPORTED_LOCATION_DEBUG "${${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG}")
-        else()
-          set_target_properties (${__name}
-                                 PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "C"
-                                            IMPORTED_IMPLIB "${${_PYTHON_PREFIX}_LIBRARIES}"
-                                            IMPORTED_LOCATION "${${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE}")
-        endif()
-      else()
-        if (${_PYTHON_PREFIX}_LIBRARY_RELEASE AND ${_PYTHON_PREFIX}_LIBRARY_DEBUG)
-          set_property (TARGET ${__name} PROPERTY IMPORTED_CONFIGURATIONS RELEASE DEBUG)
-          set_target_properties (${__name}
-                                 PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
-                                            IMPORTED_LOCATION_RELEASE "${${_PYTHON_PREFIX}_LIBRARY_RELEASE}")
-          set_target_properties (${__name}
-                                 PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
-                                            IMPORTED_LOCATION_DEBUG "${${_PYTHON_PREFIX}_LIBRARY_DEBUG}")
-        else()
-          set_target_properties (${__name}
-                                 PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "C"
-                                            IMPORTED_LOCATION "${${_PYTHON_PREFIX}_LIBRARY_RELEASE}")
-        endif()
-      endif()
-
-      if (_${_PYTHON_PREFIX}_LIBRARY_TYPE STREQUAL "STATIC")
-        # extend link information with dependent libraries
-        _python_get_config_var (_${_PYTHON_PREFIX}_LINK_LIBRARIES LIBS)
-        if (_${_PYTHON_PREFIX}_LINK_LIBRARIES)
-          set_property (TARGET ${__name}
-                        PROPERTY INTERFACE_LINK_LIBRARIES ${_${_PYTHON_PREFIX}_LINK_LIBRARIES})
-        endif()
-      endif()
-    endmacro()
-
-    if (${_PYTHON_PREFIX}_Development.Embed_FOUND)
-      __python_import_library (${_PYTHON_PREFIX}::Python)
-    endif()
-
-    if (${_PYTHON_PREFIX}_Development.Module_FOUND)
-      if ("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_MODULE_ARTIFACTS)
-        # On Windows/CYGWIN/MSYS, Python::Module is the same as Python::Python
-        # but ALIAS cannot be used because the imported library is not GLOBAL.
-        __python_import_library (${_PYTHON_PREFIX}::Module)
-      else()
-        if (NOT TARGET ${_PYTHON_PREFIX}::Module)
-          add_library (${_PYTHON_PREFIX}::Module INTERFACE IMPORTED)
-        endif()
-        set_property (TARGET ${_PYTHON_PREFIX}::Module
-                      PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${${_PYTHON_PREFIX}_INCLUDE_DIRS}")
-
-        # When available, enforce shared library generation with undefined symbols
-        if (APPLE)
-          set_property (TARGET ${_PYTHON_PREFIX}::Module
-                        PROPERTY INTERFACE_LINK_OPTIONS "LINKER:-undefined,dynamic_lookup")
-        endif()
-        if (CMAKE_SYSTEM_NAME STREQUAL "SunOS")
-          set_property (TARGET ${_PYTHON_PREFIX}::Module
-                        PROPERTY INTERFACE_LINK_OPTIONS "LINKER:-z,nodefs")
-        endif()
-        if (CMAKE_SYSTEM_NAME STREQUAL "AIX")
-          set_property (TARGET ${_PYTHON_PREFIX}::Module
-                        PROPERTY INTERFACE_LINK_OPTIONS "LINKER:-b,erok")
-        endif()
-      endif()
-    endif()
-
-    #
-    # PYTHON_ADD_LIBRARY (<name> [STATIC|SHARED|MODULE] src1 src2 ... srcN)
-    # It is used to build modules for python.
-    #
-    function (__${_PYTHON_PREFIX}_ADD_LIBRARY prefix name)
-      cmake_parse_arguments (PARSE_ARGV 2 PYTHON_ADD_LIBRARY "STATIC;SHARED;MODULE;WITH_SOABI" "" "")
-
-      if (prefix STREQUAL "Python2" AND PYTHON_ADD_LIBRARY_WITH_SOABI)
-        message (AUTHOR_WARNING "FindPython2: Option `WITH_SOABI` is not supported for Python2 and will be ignored.")
-        unset (PYTHON_ADD_LIBRARY_WITH_SOABI)
-      endif()
-
-      if (PYTHON_ADD_LIBRARY_STATIC)
-        set (type STATIC)
-      elseif (PYTHON_ADD_LIBRARY_SHARED)
-        set (type SHARED)
-      else()
-        set (type MODULE)
-      endif()
-
-      if (type STREQUAL "MODULE" AND NOT TARGET ${prefix}::Module)
-        message (SEND_ERROR "${prefix}_ADD_LIBRARY: dependent target '${prefix}::Module' is not defined.\n   Did you miss to request COMPONENT 'Development.Module'?")
-        return()
-      endif()
-      if (NOT type STREQUAL "MODULE" AND NOT TARGET ${prefix}::Python)
-        message (SEND_ERROR "${prefix}_ADD_LIBRARY: dependent target '${prefix}::Python' is not defined.\n   Did you miss to request COMPONENT 'Development.Embed'?")
-        return()
-      endif()
-
-      add_library (${name} ${type} ${PYTHON_ADD_LIBRARY_UNPARSED_ARGUMENTS})
-
-      get_property (type TARGET ${name} PROPERTY TYPE)
-
-      if (type STREQUAL "MODULE_LIBRARY")
-        target_link_libraries (${name} PRIVATE ${prefix}::Module)
-        # customize library name to follow module name rules
-        set_property (TARGET ${name} PROPERTY PREFIX "")
-        if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
-          set_property (TARGET ${name} PROPERTY SUFFIX ".pyd")
-        endif()
-
-        if (PYTHON_ADD_LIBRARY_WITH_SOABI AND ${prefix}_SOABI)
-          get_property (suffix TARGET ${name} PROPERTY SUFFIX)
-          if (NOT suffix)
-            set (suffix "${CMAKE_SHARED_MODULE_SUFFIX}")
-          endif()
-          set_property (TARGET ${name} PROPERTY SUFFIX ".${${prefix}_SOABI}${suffix}")
-        endif()
-      else()
-        if (PYTHON_ADD_LIBRARY_WITH_SOABI)
-          message (AUTHOR_WARNING "Find${prefix}: Option `WITH_SOABI` is only supported for `MODULE` library type.")
-        endif()
-        target_link_libraries (${name} PRIVATE ${prefix}::Python)
-      endif()
-    endfunction()
-  endif()
-
-  if ("NumPy" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS AND ${_PYTHON_PREFIX}_NumPy_FOUND
-      AND NOT TARGET ${_PYTHON_PREFIX}::NumPy AND TARGET ${_PYTHON_PREFIX}::Module)
-    add_library (${_PYTHON_PREFIX}::NumPy INTERFACE IMPORTED)
-    set_property (TARGET ${_PYTHON_PREFIX}::NumPy
-                  PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${${_PYTHON_PREFIX}_NumPy_INCLUDE_DIRS}")
-    target_link_libraries (${_PYTHON_PREFIX}::NumPy INTERFACE ${_PYTHON_PREFIX}::Module)
-  endif()
-endif()
-
-# final clean-up
-
-# Restore CMAKE_FIND_APPBUNDLE
-if (DEFINED _${_PYTHON_PREFIX}_CMAKE_FIND_APPBUNDLE)
-  set (CMAKE_FIND_APPBUNDLE ${_${_PYTHON_PREFIX}_CMAKE_FIND_APPBUNDLE})
-  unset (_${_PYTHON_PREFIX}_CMAKE_FIND_APPBUNDLE)
-else()
-  unset (CMAKE_FIND_APPBUNDLE)
-endif()
-# Restore CMAKE_FIND_FRAMEWORK
-if (DEFINED _${_PYTHON_PREFIX}_CMAKE_FIND_FRAMEWORK)
-  set (CMAKE_FIND_FRAMEWORK ${_${_PYTHON_PREFIX}_CMAKE_FIND_FRAMEWORK})
-  unset (_${_PYTHON_PREFIX}_CMAKE_FIND_FRAMEWORK)
-else()
-  unset (CMAKE_FIND_FRAMEWORK)
-endif()
diff --git a/share/cmake-3.18/Modules/FindPython2.cmake b/share/cmake-3.18/Modules/FindPython2.cmake
deleted file mode 100644
index 84c0c73..0000000
--- a/share/cmake-3.18/Modules/FindPython2.cmake
+++ /dev/null
@@ -1,344 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindPython2
------------
-
-Find Python 2 interpreter, compiler and development environment (include
-directories and libraries).
-
-The following components are supported:
-
-* ``Interpreter``: search for Python 2 interpreter
-* ``Compiler``: search for Python 2 compiler. Only offered by IronPython.
-* ``Development``: search for development artifacts (include directories and
-  libraries). This component includes two sub-components which can be specified
-  independently:
-
-  * ``Development.Module``: search for artifacts for Python 2 module
-    developments.
-  * ``Development.Embed``: search for artifacts for Python 2 embedding
-    developments.
-
-* ``NumPy``: search for NumPy include directories.
-
-If no ``COMPONENTS`` are specified, ``Interpreter`` is assumed.
-
-If component ``Development`` is specified, it implies sub-components
-``Development.Module`` and ``Development.Embed``.
-
-To ensure consistent versions between components ``Interpreter``, ``Compiler``,
-``Development`` (or one of its sub-components) and ``NumPy``, specify all
-components at the same time::
-
-  find_package (Python2 COMPONENTS Interpreter Development)
-
-This module looks only for version 2 of Python. This module can be used
-concurrently with :module:`FindPython3` module to use both Python versions.
-
-The :module:`FindPython` module can be used if Python version does not matter
-for you.
-
-.. note::
-
-  If components ``Interpreter`` and ``Development`` (or one of its
-  sub-components) are both specified, this module search only for interpreter
-  with same platform architecture as the one defined by ``CMake``
-  configuration. This contraint does not apply if only ``Interpreter``
-  component is specified.
-
-Imported Targets
-^^^^^^^^^^^^^^^^
-
-This module defines the following :ref:`Imported Targets <Imported Targets>`
-(when :prop_gbl:`CMAKE_ROLE` is ``PROJECT``):
-
-``Python2::Interpreter``
-  Python 2 interpreter. Target defined if component ``Interpreter`` is found.
-``Python2::Compiler``
-  Python 2 compiler. Target defined if component ``Compiler`` is found.
-``Python2::Module``
-  Python 2 library for Python module. Target defined if component
-  ``Development.Module`` is found.
-``Python2::Python``
-  Python 2 library for Python embedding. Target defined if component
-  ``Development.Embed`` is found.
-``Python2::NumPy``
-  NumPy library for Python 2. Target defined if component ``NumPy`` is found.
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-This module will set the following variables in your project
-(see :ref:`Standard Variable Names <CMake Developer Standard Variable Names>`):
-
-``Python2_FOUND``
-  System has the Python 2 requested components.
-``Python2_Interpreter_FOUND``
-  System has the Python 2 interpreter.
-``Python2_EXECUTABLE``
-  Path to the Python 2 interpreter.
-``Python2_INTERPRETER_ID``
-  A short string unique to the interpreter. Possible values include:
-    * Python
-    * ActivePython
-    * Anaconda
-    * Canopy
-    * IronPython
-    * PyPy
-``Python2_STDLIB``
-  Standard platform independent installation directory.
-
-  Information returned by
-  ``distutils.sysconfig.get_python_lib(plat_specific=False,standard_lib=True)``
-  or else ``sysconfig.get_path('stdlib')``.
-``Python2_STDARCH``
-  Standard platform dependent installation directory.
-
-  Information returned by
-  ``distutils.sysconfig.get_python_lib(plat_specific=True,standard_lib=True)``
-  or else ``sysconfig.get_path('platstdlib')``.
-``Python2_SITELIB``
-  Third-party platform independent installation directory.
-
-  Information returned by
-  ``distutils.sysconfig.get_python_lib(plat_specific=False,standard_lib=False)``
-  or else ``sysconfig.get_path('purelib')``.
-``Python2_SITEARCH``
-  Third-party platform dependent installation directory.
-
-  Information returned by
-  ``distutils.sysconfig.get_python_lib(plat_specific=True,standard_lib=False)``
-  or else ``sysconfig.get_path('platlib')``.
-``Python2_Compiler_FOUND``
-  System has the Python 2 compiler.
-``Python2_COMPILER``
-  Path to the Python 2 compiler. Only offered by IronPython.
-``Python2_COMPILER_ID``
-  A short string unique to the compiler. Possible values include:
-    * IronPython
-``Python2_DOTNET_LAUNCHER``
-  The ``.Net`` interpreter. Only used by ``IronPython`` implementation.
-``Python2_Development_FOUND``
-  System has the Python 2 development artifacts.
-``Python2_Development.Module_FOUND``
-  System has the Python 2 development artifacts for Python module.
-``Python2_Development.Embed_FOUND``
-  System has the Python 2 development artifacts for Python embedding.
-``Python2_INCLUDE_DIRS``
-  The Python 2 include directories.
-``Python2_LIBRARIES``
-  The Python 2 libraries.
-``Python2_LIBRARY_DIRS``
-  The Python 2 library directories.
-``Python2_RUNTIME_LIBRARY_DIRS``
-  The Python 2 runtime library directories.
-``Python2_VERSION``
-  Python 2 version.
-``Python2_VERSION_MAJOR``
-  Python 2 major version.
-``Python2_VERSION_MINOR``
-  Python 2 minor version.
-``Python2_VERSION_PATCH``
-  Python 2 patch version.
-``Python2_PyPy_VERSION``
-  Python 2 PyPy version.
-``Python2_NumPy_FOUND``
-  System has the NumPy.
-``Python2_NumPy_INCLUDE_DIRS``
-  The NumPy include directries.
-``Python2_NumPy_VERSION``
-  The NumPy version.
-
-Hints
-^^^^^
-
-``Python2_ROOT_DIR``
-  Define the root directory of a Python 2 installation.
-
-``Python2_USE_STATIC_LIBS``
-  * If not defined, search for shared libraries and static libraries in that
-    order.
-  * If set to TRUE, search **only** for static libraries.
-  * If set to FALSE, search **only** for shared libraries.
-
-``Python2_FIND_STRATEGY``
-  This variable defines how lookup will be done.
-  The ``Python2_FIND_STRATEGY`` variable can be set to one of the following:
-
-  * ``VERSION``: Try to find the most recent version in all specified
-    locations.
-    This is the default if policy :policy:`CMP0094` is undefined or set to
-    ``OLD``.
-  * ``LOCATION``: Stops lookup as soon as a version satisfying version
-    constraints is founded.
-    This is the default if policy :policy:`CMP0094` is set to ``NEW``.
-
-``Python2_FIND_REGISTRY``
-  On Windows the ``Python2_FIND_REGISTRY`` variable determine the order
-  of preference between registry and environment variables.
-  the ``Python2_FIND_REGISTRY`` variable can be set to one of the following:
-
-  * ``FIRST``: Try to use registry before environment variables.
-    This is the default.
-  * ``LAST``: Try to use registry after environment variables.
-  * ``NEVER``: Never try to use registry.
-
-``Python2_FIND_FRAMEWORK``
-  On macOS the ``Python2_FIND_FRAMEWORK`` variable determine the order of
-  preference between Apple-style and unix-style package components.
-  This variable can take same values as :variable:`CMAKE_FIND_FRAMEWORK`
-  variable.
-
-  .. note::
-
-    Value ``ONLY`` is not supported so ``FIRST`` will be used instead.
-
-  If ``Python2_FIND_FRAMEWORK`` is not defined, :variable:`CMAKE_FIND_FRAMEWORK`
-  variable will be used, if any.
-
-``Python2_FIND_VIRTUALENV``
-  This variable defines the handling of virtual environments managed by
-  ``virtualenv`` or ``conda``. It is meaningful only when a virtual environment
-  is active (i.e. the ``activate`` script has been evaluated). In this case, it
-  takes precedence over ``Python2_FIND_REGISTRY`` and ``CMAKE_FIND_FRAMEWORK``
-  variables.  The ``Python2_FIND_VIRTUALENV`` variable can be set to one of the
-  following:
-
-  * ``FIRST``: The virtual environment is used before any other standard
-    paths to look-up for the interpreter. This is the default.
-  * ``ONLY``: Only the virtual environment is used to look-up for the
-    interpreter.
-  * ``STANDARD``: The virtual environment is not used to look-up for the
-    interpreter but environment variable ``PATH`` is always considered.
-    In this case, variable ``Python2_FIND_REGISTRY`` (Windows) or
-    ``CMAKE_FIND_FRAMEWORK`` (macOS) can be set with value ``LAST`` or
-    ``NEVER`` to select preferably the interpreter from the virtual
-    environment.
-
-  .. note::
-
-    If the component ``Development`` is requested, it is **strongly**
-    recommended to also include the component ``Interpreter`` to get expected
-    result.
-
-``Python2_FIND_IMPLEMENTATIONS``
-  This variable defines, in an ordered list, the different implementations
-  which will be searched. The ``Python2_FIND_IMPLEMENTATIONS`` variable can
-  hold the following values:
-
-  * ``CPython``: this is the standard implementation. Various products, like
-    ``Anaconda`` or ``ActivePython``, rely on this implementation.
-  * ``IronPython``: This implementation use the ``CSharp`` language for
-    ``.NET Framework`` on top of the `Dynamic Language Runtime` (``DLR``).
-    See `IronPython <http://ironpython.net>`_.
-  * ``PyPy``: This implementation use ``RPython`` language and
-    ``RPython translation toolchain`` to produce the python interpreter.
-    See `PyPy <https://www.pypy.org>`_.
-
-  The default value is:
-
-  * Windows platform: ``CPython``, ``IronPython``
-  * Other platforms: ``CPython``
-
-  .. note::
-
-    This hint has the lowest priority of all hints, so even if, for example,
-    you specify ``IronPython`` first and ``CPython`` in second, a python
-    product based on ``CPython`` can be selected because, for example with
-    ``Python2_FIND_STRATEGY=LOCATION``, each location will be search first for
-    ``IronPython`` and second for ``CPython``.
-
-  .. note::
-
-    When ``IronPython`` is specified, on platforms other than ``Windows``, the
-    ``.Net`` interpreter (i.e. ``mono`` command) is expected to be available
-    through the ``PATH`` variable.
-
-Artifacts Specification
-^^^^^^^^^^^^^^^^^^^^^^^
-
-To solve special cases, it is possible to specify directly the artifacts by
-setting the following variables:
-
-``Python2_EXECUTABLE``
-  The path to the interpreter.
-
-``Python2_COMPILER``
-  The path to the compiler.
-
-``Python2_DOTNET_LAUNCHER``
-  The ``.Net`` interpreter. Only used by ``IronPython`` implementation.
-
-``Python2_LIBRARY``
-  The path to the library. It will be used to compute the
-  variables ``Python2_LIBRARIES``, ``Python2_LIBRAY_DIRS`` and
-  ``Python2_RUNTIME_LIBRARY_DIRS``.
-
-``Python2_INCLUDE_DIR``
-  The path to the directory of the ``Python`` headers. It will be used to
-  compute the variable ``Python2_INCLUDE_DIRS``.
-
-``Python2_NumPy_INCLUDE_DIR``
-  The path to the directory of the ``NumPy`` headers. It will be used to
-  compute the variable ``Python2_NumPy_INCLUDE_DIRS``.
-
-.. note::
-
-  All paths must be absolute. Any artifact specified with a relative path
-  will be ignored.
-
-.. note::
-
-  When an artifact is specified, all ``HINTS`` will be ignored and no search
-  will be performed for this artifact.
-
-  If more than one artifact is specified, it is the user's responsability to
-  ensure the consistency of the various artifacts.
-
-By default, this module supports multiple calls in different directories of a
-project with different version/component requirements while providing correct
-and consistent results for each call. To support this behavior, ``CMake`` cache
-is not used in the traditional way which can be problematic for interactive
-specification. So, to enable also interactive specification, module behavior
-can be controled with the following variable:
-
-``Python2_ARTIFACTS_INTERACTIVE``
-  Selects the behavior of the module. This is a boolean variable:
-
-  * If set to ``TRUE``: Create CMake cache entries for the above artifact
-    specification variables so that users can edit them interactively.
-    This disables support for multiple version/component requirements.
-  * If set to ``FALSE`` or undefined: Enable multiple version/component
-    requirements.
-
-Commands
-^^^^^^^^
-
-This module defines the command ``Python2_add_library`` (when
-:prop_gbl:`CMAKE_ROLE` is ``PROJECT``), which has the same semantics as
-:command:`add_library` and adds a dependency to target ``Python2::Python`` or,
-when library type is ``MODULE``, to target ``Python2::Module`` and takes care
-of Python module naming rules::
-
-  Python2_add_library (<name> [STATIC | SHARED | MODULE]
-                       <source1> [<source2> ...])
-
-If library type is not specified, ``MODULE`` is assumed.
-#]=======================================================================]
-
-
-set (_PYTHON_PREFIX Python2)
-
-set (_Python2_REQUIRED_VERSION_MAJOR 2)
-
-include (${CMAKE_CURRENT_LIST_DIR}/FindPython/Support.cmake)
-
-if (COMMAND __Python2_add_library)
-  macro (Python2_add_library)
-    __Python2_add_library (Python2 ${ARGV})
-  endmacro()
-endif()
-
-unset (_PYTHON_PREFIX)
diff --git a/share/cmake-3.18/Modules/FindPython3.cmake b/share/cmake-3.18/Modules/FindPython3.cmake
deleted file mode 100644
index f142c07..0000000
--- a/share/cmake-3.18/Modules/FindPython3.cmake
+++ /dev/null
@@ -1,397 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindPython3
------------
-
-Find Python 3 interpreter, compiler and development environment (include
-directories and libraries).
-
-The following components are supported:
-
-* ``Interpreter``: search for Python 3 interpreter
-* ``Compiler``: search for Python 3 compiler. Only offered by IronPython.
-* ``Development``: search for development artifacts (include directories and
-  libraries). This component includes two sub-components which can be specified
-  independently:
-
-  * ``Development.Module``: search for artifacts for Python 3 module
-    developments.
-  * ``Development.Embed``: search for artifacts for Python 3 embedding
-    developments.
-
-* ``NumPy``: search for NumPy include directories.
-
-If no ``COMPONENTS`` are specified, ``Interpreter`` is assumed.
-
-If component ``Development`` is specified, it implies sub-components
-``Development.Module`` and ``Development.Embed``.
-
-To ensure consistent versions between components ``Interpreter``, ``Compiler``,
-``Development`` (or one of its sub-components) and ``NumPy``, specify all
-components at the same time::
-
-  find_package (Python3 COMPONENTS Interpreter Development)
-
-This module looks only for version 3 of Python. This module can be used
-concurrently with :module:`FindPython2` module to use both Python versions.
-
-The :module:`FindPython` module can be used if Python version does not matter
-for you.
-
-.. note::
-
-  If components ``Interpreter`` and ``Development`` (or one of its
-  sub-components) are both specified, this module search only for interpreter
-  with same platform architecture as the one defined by ``CMake``
-  configuration. This contraint does not apply if only ``Interpreter``
-  component is specified.
-
-Imported Targets
-^^^^^^^^^^^^^^^^
-
-This module defines the following :ref:`Imported Targets <Imported Targets>`
-(when :prop_gbl:`CMAKE_ROLE` is ``PROJECT``):
-
-``Python3::Interpreter``
-  Python 3 interpreter. Target defined if component ``Interpreter`` is found.
-``Python3::Compiler``
-  Python 3 compiler. Target defined if component ``Compiler`` is found.
-``Python3::Module``
-  Python 3 library for Python module. Target defined if component
-  ``Development.Module`` is found.
-``Python3::Python``
-  Python 3 library for Python embedding. Target defined if component
-  ``Development.Embed`` is found.
-``Python3::NumPy``
-  NumPy library for Python 3. Target defined if component ``NumPy`` is found.
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-This module will set the following variables in your project
-(see :ref:`Standard Variable Names <CMake Developer Standard Variable Names>`):
-
-``Python3_FOUND``
-  System has the Python 3 requested components.
-``Python3_Interpreter_FOUND``
-  System has the Python 3 interpreter.
-``Python3_EXECUTABLE``
-  Path to the Python 3 interpreter.
-``Python3_INTERPRETER_ID``
-  A short string unique to the interpreter. Possible values include:
-    * Python
-    * ActivePython
-    * Anaconda
-    * Canopy
-    * IronPython
-    * PyPy
-``Python3_STDLIB``
-  Standard platform independent installation directory.
-
-  Information returned by
-  ``distutils.sysconfig.get_python_lib(plat_specific=False,standard_lib=True)``
-  or else ``sysconfig.get_path('stdlib')``.
-``Python3_STDARCH``
-  Standard platform dependent installation directory.
-
-  Information returned by
-  ``distutils.sysconfig.get_python_lib(plat_specific=True,standard_lib=True)``
-  or else ``sysconfig.get_path('platstdlib')``.
-``Python3_SITELIB``
-  Third-party platform independent installation directory.
-
-  Information returned by
-  ``distutils.sysconfig.get_python_lib(plat_specific=False,standard_lib=False)``
-  or else ``sysconfig.get_path('purelib')``.
-``Python3_SITEARCH``
-  Third-party platform dependent installation directory.
-
-  Information returned by
-  ``distutils.sysconfig.get_python_lib(plat_specific=True,standard_lib=False)``
-  or else ``sysconfig.get_path('platlib')``.
-``Python3_SOABI``
-  Extension suffix for modules.
-
-  Information returned by
-  ``distutils.sysconfig.get_config_var('SOABI')`` or computed from
-  ``distutils.sysconfig.get_config_var('EXT_SUFFIX')`` or
-  ``python3-config --extension-suffix``. If package ``distutils.sysconfig`` is
-  not available, ``sysconfig.get_config_var('SOABI')`` or
-  ``sysconfig.get_config_var('EXT_SUFFIX')`` are used.
-``Python3_Compiler_FOUND``
-  System has the Python 3 compiler.
-``Python3_COMPILER``
-  Path to the Python 3 compiler. Only offered by IronPython.
-``Python3_COMPILER_ID``
-  A short string unique to the compiler. Possible values include:
-    * IronPython
-``Python3_DOTNET_LAUNCHER``
-  The ``.Net`` interpreter. Only used by ``IronPython`` implementation.
-``Python3_Development_FOUND``
-  System has the Python 3 development artifacts.
-``Python3_Development.Module_FOUND``
-  System has the Python 3 development artifacts for Python module.
-``Python3_Development.Embed_FOUND``
-  System has the Python 3 development artifacts for Python embedding.
-``Python3_INCLUDE_DIRS``
-  The Python 3 include directories.
-``Python3_LIBRARIES``
-  The Python 3 libraries.
-``Python3_LIBRARY_DIRS``
-  The Python 3 library directories.
-``Python3_RUNTIME_LIBRARY_DIRS``
-  The Python 3 runtime library directories.
-``Python3_VERSION``
-  Python 3 version.
-``Python3_VERSION_MAJOR``
-  Python 3 major version.
-``Python3_VERSION_MINOR``
-  Python 3 minor version.
-``Python3_VERSION_PATCH``
-  Python 3 patch version.
-``Python3_PyPy_VERSION``
-  Python 3 PyPy version.
-``Python3_NumPy_FOUND``
-  System has the NumPy.
-``Python3_NumPy_INCLUDE_DIRS``
-  The NumPy include directries.
-``Python3_NumPy_VERSION``
-  The NumPy version.
-
-Hints
-^^^^^
-
-``Python3_ROOT_DIR``
-  Define the root directory of a Python 3 installation.
-
-``Python3_USE_STATIC_LIBS``
-  * If not defined, search for shared libraries and static libraries in that
-    order.
-  * If set to TRUE, search **only** for static libraries.
-  * If set to FALSE, search **only** for shared libraries.
-
-``Python3_FIND_ABI``
-  This variable defines which ABIs, as defined in
-  `PEP 3149 <https://www.python.org/dev/peps/pep-3149/>`_, should be searched.
-
-  .. note::
-
-    If ``Python3_FIND_ABI`` is not defined, any ABI will be searched.
-
-  The ``Python3_FIND_ABI`` variable is a 3-tuple specifying, in that order,
-  ``pydebug`` (``d``), ``pymalloc`` (``m``) and ``unicode`` (``u``) flags.
-  Each element can be set to one of the following:
-
-  * ``ON``: Corresponding flag is selected.
-  * ``OFF``: Corresponding flag is not selected.
-  * ``ANY``: The two posibilties (``ON`` and ``OFF``) will be searched.
-
-  From this 3-tuple, various ABIs will be searched starting from the most
-  specialized to the most general. Moreover, ``debug`` versions will be
-  searched **after** ``non-debug`` ones.
-
-  For example, if we have::
-
-    set (Python3_FIND_ABI "ON" "ANY" "ANY")
-
-  The following flags combinations will be appended, in that order, to the
-  artifact names: ``dmu``, ``dm``, ``du``, and ``d``.
-
-  And to search any possible ABIs::
-
-    set (Python3_FIND_ABI "ANY" "ANY" "ANY")
-
-  The following combinations, in that order, will be used: ``mu``, ``m``,
-  ``u``, ``<empty>``, ``dmu``, ``dm``, ``du`` and ``d``.
-
-  .. note::
-
-    This hint is useful only on ``POSIX`` systems. So, on ``Windows`` systems,
-    when ``Python3_FIND_ABI`` is defined, ``Python`` distributions from
-    `python.org <https://www.python.org/>`_ will be found only if value for
-    each flag is ``OFF`` or ``ANY``.
-
-``Python3_FIND_STRATEGY``
-  This variable defines how lookup will be done.
-  The ``Python3_FIND_STRATEGY`` variable can be set to one of the following:
-
-  * ``VERSION``: Try to find the most recent version in all specified
-    locations.
-    This is the default if policy :policy:`CMP0094` is undefined or set to
-    ``OLD``.
-  * ``LOCATION``: Stops lookup as soon as a version satisfying version
-    constraints is founded.
-    This is the default if policy :policy:`CMP0094` is set to ``NEW``.
-
-``Python3_FIND_REGISTRY``
-  On Windows the ``Python3_FIND_REGISTRY`` variable determine the order
-  of preference between registry and environment variables.
-  The ``Python3_FIND_REGISTRY`` variable can be set to one of the following:
-
-  * ``FIRST``: Try to use registry before environment variables.
-    This is the default.
-  * ``LAST``: Try to use registry after environment variables.
-  * ``NEVER``: Never try to use registry.
-
-``Python3_FIND_FRAMEWORK``
-  On macOS the ``Python3_FIND_FRAMEWORK`` variable determine the order of
-  preference between Apple-style and unix-style package components.
-  This variable can take same values as :variable:`CMAKE_FIND_FRAMEWORK`
-  variable.
-
-  .. note::
-
-    Value ``ONLY`` is not supported so ``FIRST`` will be used instead.
-
-  If ``Python3_FIND_FRAMEWORK`` is not defined, :variable:`CMAKE_FIND_FRAMEWORK`
-  variable will be used, if any.
-
-``Python3_FIND_VIRTUALENV``
-  This variable defines the handling of virtual environments managed by
-  ``virtualenv`` or ``conda``. It is meaningful only when a virtual environment
-  is active (i.e. the ``activate`` script has been evaluated). In this case, it
-  takes precedence over ``Python3_FIND_REGISTRY`` and ``CMAKE_FIND_FRAMEWORK``
-  variables.  The ``Python3_FIND_VIRTUALENV`` variable can be set to one of the
-  following:
-
-  * ``FIRST``: The virtual environment is used before any other standard
-    paths to look-up for the interpreter. This is the default.
-  * ``ONLY``: Only the virtual environment is used to look-up for the
-    interpreter.
-  * ``STANDARD``: The virtual environment is not used to look-up for the
-    interpreter but environment variable ``PATH`` is always considered.
-    In this case, variable ``Python3_FIND_REGISTRY`` (Windows) or
-    ``CMAKE_FIND_FRAMEWORK`` (macOS) can be set with value ``LAST`` or
-    ``NEVER`` to select preferably the interpreter from the virtual
-    environment.
-
-  .. note::
-
-    If the component ``Development`` is requested, it is **strongly**
-    recommended to also include the component ``Interpreter`` to get expected
-    result.
-
-``Python3_FIND_IMPLEMENTATIONS``
-  This variable defines, in an ordered list, the different implementations
-  which will be searched. The ``Python3_FIND_IMPLEMENTATIONS`` variable can
-  hold the following values:
-
-  * ``CPython``: this is the standard implementation. Various products, like
-    ``Anaconda`` or ``ActivePython``, rely on this implementation.
-  * ``IronPython``: This implementation use the ``CSharp`` language for
-    ``.NET Framework`` on top of the `Dynamic Language Runtime` (``DLR``).
-    See `IronPython <http://ironpython.net>`_.
-  * ``PyPy``: This implementation use ``RPython`` language and
-    ``RPython translation toolchain`` to produce the python interpreter.
-    See `PyPy <https://www.pypy.org>`_.
-
-  The default value is:
-
-  * Windows platform: ``CPython``, ``IronPython``
-  * Other platforms: ``CPython``
-
-  .. note::
-
-    This hint has the lowest priority of all hints, so even if, for example,
-    you specify ``IronPython`` first and ``CPython`` in second, a python
-    product based on ``CPython`` can be selected because, for example with
-    ``Python3_FIND_STRATEGY=LOCATION``, each location will be search first for
-    ``IronPython`` and second for ``CPython``.
-
-  .. note::
-
-    When ``IronPython`` is specified, on platforms other than ``Windows``, the
-    ``.Net`` interpreter (i.e. ``mono`` command) is expected to be available
-    through the ``PATH`` variable.
-
-Artifacts Specification
-^^^^^^^^^^^^^^^^^^^^^^^
-
-To solve special cases, it is possible to specify directly the artifacts by
-setting the following variables:
-
-``Python3_EXECUTABLE``
-  The path to the interpreter.
-
-``Python3_COMPILER``
-  The path to the compiler.
-
-``Python3_DOTNET_LAUNCHER``
-  The ``.Net`` interpreter. Only used by ``IronPython`` implementation.
-
-``Python3_LIBRARY``
-  The path to the library. It will be used to compute the
-  variables ``Python3_LIBRARIES``, ``Python3_LIBRAY_DIRS`` and
-  ``Python3_RUNTIME_LIBRARY_DIRS``.
-
-``Python3_INCLUDE_DIR``
-  The path to the directory of the ``Python`` headers. It will be used to
-  compute the variable ``Python3_INCLUDE_DIRS``.
-
-``Python3_NumPy_INCLUDE_DIR``
-  The path to the directory of the ``NumPy`` headers. It will be used to
-  compute the variable ``Python3_NumPy_INCLUDE_DIRS``.
-
-.. note::
-
-  All paths must be absolute. Any artifact specified with a relative path
-  will be ignored.
-
-.. note::
-
-  When an artifact is specified, all ``HINTS`` will be ignored and no search
-  will be performed for this artifact.
-
-  If more than one artifact is specified, it is the user's responsability to
-  ensure the consistency of the various artifacts.
-
-By default, this module supports multiple calls in different directories of a
-project with different version/component requirements while providing correct
-and consistent results for each call. To support this behavior, ``CMake`` cache
-is not used in the traditional way which can be problematic for interactive
-specification. So, to enable also interactive specification, module behavior
-can be controled with the following variable:
-
-``Python3_ARTIFACTS_INTERACTIVE``
-  Selects the behavior of the module. This is a boolean variable:
-
-  * If set to ``TRUE``: Create CMake cache entries for the above artifact
-    specification variables so that users can edit them interactively.
-    This disables support for multiple version/component requirements.
-  * If set to ``FALSE`` or undefined: Enable multiple version/component
-    requirements.
-
-Commands
-^^^^^^^^
-
-This module defines the command ``Python3_add_library`` (when
-:prop_gbl:`CMAKE_ROLE` is ``PROJECT``), which has the same semantics as
-:command:`add_library` and adds a dependency to target ``Python3::Python`` or,
-when library type is ``MODULE``, to target ``Python3::Module`` and takes care
-of Python module naming rules::
-
-  Python3_add_library (<name> [STATIC | SHARED | MODULE [WITH_SOABI]]
-                       <source1> [<source2> ...])
-
-If the library type is not specified, ``MODULE`` is assumed.
-
-For ``MODULE`` library type, if option ``WITH_SOABI`` is specified, the
-module suffix will include the ``Python3_SOABI`` value, if any.
-#]=======================================================================]
-
-
-set (_PYTHON_PREFIX Python3)
-
-set (_Python3_REQUIRED_VERSION_MAJOR 3)
-
-include (${CMAKE_CURRENT_LIST_DIR}/FindPython/Support.cmake)
-
-if (COMMAND __Python3_add_library)
-  macro (Python3_add_library)
-    __Python3_add_library (Python3 ${ARGV})
-  endmacro()
-endif()
-
-unset (_PYTHON_PREFIX)
diff --git a/share/cmake-3.18/Modules/FindPythonInterp.cmake b/share/cmake-3.18/Modules/FindPythonInterp.cmake
deleted file mode 100644
index 1e01a99..0000000
--- a/share/cmake-3.18/Modules/FindPythonInterp.cmake
+++ /dev/null
@@ -1,171 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindPythonInterp
-----------------
-
-.. deprecated:: 3.12
-
-  Use :module:`FindPython3`, :module:`FindPython2` or :module:`FindPython` instead.
-
-Find python interpreter
-
-This module finds if Python interpreter is installed and determines
-where the executables are.  This code sets the following variables:
-
-::
-
-  PYTHONINTERP_FOUND         - Was the Python executable found
-  PYTHON_EXECUTABLE          - path to the Python interpreter
-
-
-
-::
-
-  PYTHON_VERSION_STRING      - Python version found e.g. 2.5.2
-  PYTHON_VERSION_MAJOR       - Python major version found e.g. 2
-  PYTHON_VERSION_MINOR       - Python minor version found e.g. 5
-  PYTHON_VERSION_PATCH       - Python patch version found e.g. 2
-
-
-
-The Python_ADDITIONAL_VERSIONS variable can be used to specify a list
-of version numbers that should be taken into account when searching
-for Python.  You need to set this variable before calling
-find_package(PythonInterp).
-
-If calling both ``find_package(PythonInterp)`` and
-``find_package(PythonLibs)``, call ``find_package(PythonInterp)`` first to
-get the currently active Python version by default with a consistent version
-of PYTHON_LIBRARIES.
-
-.. note::
-
-  A call to ``find_package(PythonInterp ${V})`` for python version ``V``
-  may find a ``python`` executable with no version suffix.  In this case
-  no attempt is made to avoid python executables from other versions.
-  Use :module:`FindPython3`, :module:`FindPython2` or :module:`FindPython`
-  instead.
-
-#]=======================================================================]
-
-unset(_Python_NAMES)
-
-set(_PYTHON1_VERSIONS 1.6 1.5)
-set(_PYTHON2_VERSIONS 2.7 2.6 2.5 2.4 2.3 2.2 2.1 2.0)
-set(_PYTHON3_VERSIONS 3.9 3.8 3.7 3.6 3.5 3.4 3.3 3.2 3.1 3.0)
-
-if(PythonInterp_FIND_VERSION)
-    if(PythonInterp_FIND_VERSION_COUNT GREATER 1)
-        set(_PYTHON_FIND_MAJ_MIN "${PythonInterp_FIND_VERSION_MAJOR}.${PythonInterp_FIND_VERSION_MINOR}")
-        list(APPEND _Python_NAMES
-             python${_PYTHON_FIND_MAJ_MIN}
-             python${PythonInterp_FIND_VERSION_MAJOR})
-        unset(_PYTHON_FIND_OTHER_VERSIONS)
-        if(NOT PythonInterp_FIND_VERSION_EXACT)
-            foreach(_PYTHON_V ${_PYTHON${PythonInterp_FIND_VERSION_MAJOR}_VERSIONS})
-                if(NOT _PYTHON_V VERSION_LESS _PYTHON_FIND_MAJ_MIN)
-                    list(APPEND _PYTHON_FIND_OTHER_VERSIONS ${_PYTHON_V})
-                endif()
-             endforeach()
-        endif()
-        unset(_PYTHON_FIND_MAJ_MIN)
-    else()
-        list(APPEND _Python_NAMES python${PythonInterp_FIND_VERSION_MAJOR})
-        set(_PYTHON_FIND_OTHER_VERSIONS ${_PYTHON${PythonInterp_FIND_VERSION_MAJOR}_VERSIONS})
-    endif()
-else()
-    set(_PYTHON_FIND_OTHER_VERSIONS ${_PYTHON3_VERSIONS} ${_PYTHON2_VERSIONS} ${_PYTHON1_VERSIONS})
-endif()
-find_program(PYTHON_EXECUTABLE NAMES ${_Python_NAMES})
-
-# Set up the versions we know about, in the order we will search. Always add
-# the user supplied additional versions to the front.
-set(_Python_VERSIONS ${Python_ADDITIONAL_VERSIONS})
-# If FindPythonInterp has already found the major and minor version,
-# insert that version next to get consistent versions of the interpreter and
-# library.
-if(DEFINED PYTHONLIBS_VERSION_STRING)
-  string(REPLACE "." ";" _PYTHONLIBS_VERSION "${PYTHONLIBS_VERSION_STRING}")
-  list(GET _PYTHONLIBS_VERSION 0 _PYTHONLIBS_VERSION_MAJOR)
-  list(GET _PYTHONLIBS_VERSION 1 _PYTHONLIBS_VERSION_MINOR)
-  list(APPEND _Python_VERSIONS ${_PYTHONLIBS_VERSION_MAJOR}.${_PYTHONLIBS_VERSION_MINOR})
-endif()
-# Search for the current active python version first
-list(APPEND _Python_VERSIONS ";")
-list(APPEND _Python_VERSIONS ${_PYTHON_FIND_OTHER_VERSIONS})
-
-unset(_PYTHON_FIND_OTHER_VERSIONS)
-unset(_PYTHON1_VERSIONS)
-unset(_PYTHON2_VERSIONS)
-unset(_PYTHON3_VERSIONS)
-
-# Search for newest python version if python executable isn't found
-if(NOT PYTHON_EXECUTABLE)
-    foreach(_CURRENT_VERSION IN LISTS _Python_VERSIONS)
-      set(_Python_NAMES python${_CURRENT_VERSION})
-      if(CMAKE_HOST_WIN32)
-        list(APPEND _Python_NAMES python)
-      endif()
-      find_program(PYTHON_EXECUTABLE
-        NAMES ${_Python_NAMES}
-        PATHS
-            [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]
-            [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-32\\InstallPath]
-            [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-64\\InstallPath]
-            [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]
-            [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-32\\InstallPath]
-            [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-64\\InstallPath]
-        )
-    endforeach()
-endif()
-
-# determine python version string
-if(PYTHON_EXECUTABLE)
-    execute_process(COMMAND "${PYTHON_EXECUTABLE}" -c
-                            "import sys; sys.stdout.write(';'.join([str(x) for x in sys.version_info[:3]]))"
-                    OUTPUT_VARIABLE _VERSION
-                    RESULT_VARIABLE _PYTHON_VERSION_RESULT
-                    ERROR_QUIET)
-    if(NOT _PYTHON_VERSION_RESULT)
-        string(REPLACE ";" "." PYTHON_VERSION_STRING "${_VERSION}")
-        list(GET _VERSION 0 PYTHON_VERSION_MAJOR)
-        list(GET _VERSION 1 PYTHON_VERSION_MINOR)
-        list(GET _VERSION 2 PYTHON_VERSION_PATCH)
-        if(PYTHON_VERSION_PATCH EQUAL 0)
-            # it's called "Python 2.7", not "2.7.0"
-            string(REGEX REPLACE "\\.0$" "" PYTHON_VERSION_STRING "${PYTHON_VERSION_STRING}")
-        endif()
-    else()
-        # sys.version predates sys.version_info, so use that
-        # sys.version was first documented for Python 1.5, so assume version 1.4
-        # if retrieving sys.version fails.
-        execute_process(COMMAND "${PYTHON_EXECUTABLE}" -c "try: import sys; sys.stdout.write(sys.version)\nexcept: sys.stdout.write(\"1.4.0\")"
-                        OUTPUT_VARIABLE _VERSION
-                        RESULT_VARIABLE _PYTHON_VERSION_RESULT
-                        ERROR_QUIET)
-        if(NOT _PYTHON_VERSION_RESULT)
-            string(REGEX REPLACE " .*" "" PYTHON_VERSION_STRING "${_VERSION}")
-            string(REGEX REPLACE "^([0-9]+)\\.[0-9]+.*" "\\1" PYTHON_VERSION_MAJOR "${PYTHON_VERSION_STRING}")
-            string(REGEX REPLACE "^[0-9]+\\.([0-9])+.*" "\\1" PYTHON_VERSION_MINOR "${PYTHON_VERSION_STRING}")
-            if(PYTHON_VERSION_STRING MATCHES "^[0-9]+\\.[0-9]+\\.([0-9]+)")
-                set(PYTHON_VERSION_PATCH "${CMAKE_MATCH_1}")
-            else()
-                set(PYTHON_VERSION_PATCH "0")
-            endif()
-        else()
-            unset(PYTHON_VERSION_STRING)
-            unset(PYTHON_VERSION_MAJOR)
-            unset(PYTHON_VERSION_MINOR)
-            unset(PYTHON_VERSION_PATCH)
-        endif()
-    endif()
-    unset(_PYTHON_VERSION_RESULT)
-    unset(_VERSION)
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(PythonInterp REQUIRED_VARS PYTHON_EXECUTABLE VERSION_VAR PYTHON_VERSION_STRING)
-
-mark_as_advanced(PYTHON_EXECUTABLE)
diff --git a/share/cmake-3.18/Modules/FindPythonLibs.cmake b/share/cmake-3.18/Modules/FindPythonLibs.cmake
deleted file mode 100644
index d3ec7be..0000000
--- a/share/cmake-3.18/Modules/FindPythonLibs.cmake
+++ /dev/null
@@ -1,399 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindPythonLibs
---------------
-
-.. deprecated:: 3.12
-
-  Use :module:`FindPython3`, :module:`FindPython2` or :module:`FindPython` instead.
-
-Find python libraries
-
-This module finds if Python is installed and determines where the
-include files and libraries are.  It also determines what the name of
-the library is.  This code sets the following variables:
-
-::
-
-  PYTHONLIBS_FOUND           - have the Python libs been found
-  PYTHON_LIBRARIES           - path to the python library
-  PYTHON_INCLUDE_PATH        - path to where Python.h is found (deprecated)
-  PYTHON_INCLUDE_DIRS        - path to where Python.h is found
-  PYTHON_DEBUG_LIBRARIES     - path to the debug library (deprecated)
-  PYTHONLIBS_VERSION_STRING  - version of the Python libs found (since CMake 2.8.8)
-
-
-
-The Python_ADDITIONAL_VERSIONS variable can be used to specify a list
-of version numbers that should be taken into account when searching
-for Python.  You need to set this variable before calling
-find_package(PythonLibs).
-
-If you'd like to specify the installation of Python to use, you should
-modify the following cache variables:
-
-::
-
-  PYTHON_LIBRARY             - path to the python library
-  PYTHON_INCLUDE_DIR         - path to where Python.h is found
-
-If calling both ``find_package(PythonInterp)`` and
-``find_package(PythonLibs)``, call ``find_package(PythonInterp)`` first to
-get the currently active Python version by default with a consistent version
-of PYTHON_LIBRARIES.
-#]=======================================================================]
-
-# Use the executable's path as a hint
-set(_Python_LIBRARY_PATH_HINT)
-if(IS_ABSOLUTE "${PYTHON_EXECUTABLE}")
-  if(WIN32)
-    get_filename_component(_Python_PREFIX "${PYTHON_EXECUTABLE}" PATH)
-    if(_Python_PREFIX)
-      set(_Python_LIBRARY_PATH_HINT ${_Python_PREFIX}/libs)
-    endif()
-    unset(_Python_PREFIX)
-  else()
-    get_filename_component(_Python_PREFIX "${PYTHON_EXECUTABLE}" PATH)
-    get_filename_component(_Python_PREFIX "${_Python_PREFIX}" PATH)
-    if(_Python_PREFIX)
-      set(_Python_LIBRARY_PATH_HINT ${_Python_PREFIX}/lib)
-    endif()
-    unset(_Python_PREFIX)
-  endif()
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/CMakeFindFrameworks.cmake)
-# Search for the python framework on Apple.
-CMAKE_FIND_FRAMEWORKS(Python)
-
-# Save CMAKE_FIND_FRAMEWORK
-if(DEFINED CMAKE_FIND_FRAMEWORK)
-  set(_PythonLibs_CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK})
-else()
-  unset(_PythonLibs_CMAKE_FIND_FRAMEWORK)
-endif()
-# To avoid picking up the system Python.h pre-maturely.
-set(CMAKE_FIND_FRAMEWORK LAST)
-
-set(_PYTHON1_VERSIONS 1.6 1.5)
-set(_PYTHON2_VERSIONS 2.7 2.6 2.5 2.4 2.3 2.2 2.1 2.0)
-set(_PYTHON3_VERSIONS 3.9 3.8 3.7 3.6 3.5 3.4 3.3 3.2 3.1 3.0)
-
-if(PythonLibs_FIND_VERSION)
-    if(PythonLibs_FIND_VERSION_COUNT GREATER 1)
-        set(_PYTHON_FIND_MAJ_MIN "${PythonLibs_FIND_VERSION_MAJOR}.${PythonLibs_FIND_VERSION_MINOR}")
-        unset(_PYTHON_FIND_OTHER_VERSIONS)
-        if(PythonLibs_FIND_VERSION_EXACT)
-            if(_PYTHON_FIND_MAJ_MIN STREQUAL PythonLibs_FIND_VERSION)
-                set(_PYTHON_FIND_OTHER_VERSIONS "${PythonLibs_FIND_VERSION}")
-            else()
-                set(_PYTHON_FIND_OTHER_VERSIONS "${PythonLibs_FIND_VERSION}" "${_PYTHON_FIND_MAJ_MIN}")
-            endif()
-        else()
-            foreach(_PYTHON_V ${_PYTHON${PythonLibs_FIND_VERSION_MAJOR}_VERSIONS})
-                if(NOT _PYTHON_V VERSION_LESS _PYTHON_FIND_MAJ_MIN)
-                    list(APPEND _PYTHON_FIND_OTHER_VERSIONS ${_PYTHON_V})
-                endif()
-             endforeach()
-        endif()
-        unset(_PYTHON_FIND_MAJ_MIN)
-    else()
-        set(_PYTHON_FIND_OTHER_VERSIONS ${_PYTHON${PythonLibs_FIND_VERSION_MAJOR}_VERSIONS})
-    endif()
-else()
-    set(_PYTHON_FIND_OTHER_VERSIONS ${_PYTHON3_VERSIONS} ${_PYTHON2_VERSIONS} ${_PYTHON1_VERSIONS})
-endif()
-
-# Set up the versions we know about, in the order we will search. Always add
-# the user supplied additional versions to the front.
-# If FindPythonInterp has already found the major and minor version,
-# insert that version between the user supplied versions and the stock
-# version list.
-set(_Python_VERSIONS ${Python_ADDITIONAL_VERSIONS})
-if(DEFINED PYTHON_VERSION_MAJOR AND DEFINED PYTHON_VERSION_MINOR)
-  list(APPEND _Python_VERSIONS ${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR})
-endif()
-list(APPEND _Python_VERSIONS ${_PYTHON_FIND_OTHER_VERSIONS})
-
-unset(_PYTHON_FIND_OTHER_VERSIONS)
-unset(_PYTHON1_VERSIONS)
-unset(_PYTHON2_VERSIONS)
-unset(_PYTHON3_VERSIONS)
-
-# Python distribution: define which architectures can be used
-if (CMAKE_SIZEOF_VOID_P)
-  # In this case, search only for 64bit or 32bit
-  math (EXPR _PYTHON_ARCH "${CMAKE_SIZEOF_VOID_P} * 8")
-  set (_PYTHON_ARCH2 _PYTHON_PREFIX_ARCH})
-else()
-  if (PYTHON_EXECUTABLE)
-    # determine interpreter architecture
-    execute_process (COMMAND "${PYTHON_EXECUTABLE}" -c "import sys; print(sys.maxsize > 2**32)"
-                     RESULT_VARIABLE _PYTHON_RESULT
-                     OUTPUT_VARIABLE _PYTHON_IS64BIT
-                     ERROR_VARIABLE _PYTHON_IS64BIT)
-      if (NOT _PYTHON_RESULT)
-        if (_PYTHON_IS64BIT)
-          set (_PYTHON_ARCH 64)
-          set (_PYTHON_ARCH2 64)
-        else()
-          set (_PYTHON_ARCH 32)
-          set (_PYTHON_ARCH2 32)
-        endif()
-      endif()
-  else()
-    # architecture unknown, search for both 64bit and 32bit
-    set (_PYTHON_ARCH 64)
-    set (_PYTHON_ARCH2 32)
-  endif()
-endif()
-
-foreach(_CURRENT_VERSION ${_Python_VERSIONS})
-  string(REPLACE "." "" _CURRENT_VERSION_NO_DOTS ${_CURRENT_VERSION})
-  if(WIN32)
-    find_library(PYTHON_DEBUG_LIBRARY
-      NAMES python${_CURRENT_VERSION_NO_DOTS}_d python
-      NAMES_PER_DIR
-      HINTS ${_Python_LIBRARY_PATH_HINT}
-      PATHS
-      [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs/Debug
-      [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH}\\InstallPath]/libs/Debug
-      [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH2}\\InstallPath]/libs/Debug
-      [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs/Debug
-      [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH}\\InstallPath]/libs/Debug
-      [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH2}\\InstallPath]/libs/Debug
-      [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs
-      [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH}\\InstallPath]/libs
-      [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH2}\\InstallPath]/libs
-      [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs
-      [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH}\\InstallPath]/libs
-      [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH2}\\InstallPath]/libs
-      )
-  endif()
-
-  set(PYTHON_FRAMEWORK_LIBRARIES)
-  if(Python_FRAMEWORKS AND NOT PYTHON_LIBRARY)
-    foreach(dir ${Python_FRAMEWORKS})
-      list(APPEND PYTHON_FRAMEWORK_LIBRARIES
-           ${dir}/Versions/${_CURRENT_VERSION}/lib)
-    endforeach()
-  endif()
-  find_library(PYTHON_LIBRARY
-    NAMES
-      python${_CURRENT_VERSION_NO_DOTS}
-      python${_CURRENT_VERSION}mu
-      python${_CURRENT_VERSION}m
-      python${_CURRENT_VERSION}u
-      python${_CURRENT_VERSION}
-    NAMES_PER_DIR
-    HINTS
-      ${_Python_LIBRARY_PATH_HINT}
-    PATHS
-      ${PYTHON_FRAMEWORK_LIBRARIES}
-      [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs
-      [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH}\\InstallPath]/libs
-      [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH2}\\InstallPath]/libs
-      [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs
-      [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH}\\InstallPath]/libs
-      [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH2}\\InstallPath]/libs
-  )
-  # Look for the static library in the Python config directory
-  find_library(PYTHON_LIBRARY
-    NAMES python${_CURRENT_VERSION_NO_DOTS} python${_CURRENT_VERSION}
-    NAMES_PER_DIR
-    # This is where the static library is usually located
-    PATH_SUFFIXES python${_CURRENT_VERSION}/config
-  )
-
-  # Don't search for include dir until library location is known
-  if(PYTHON_LIBRARY)
-
-    # Use the library's install prefix as a hint
-    set(_Python_INCLUDE_PATH_HINT)
-    # PYTHON_LIBRARY may contain a list because of SelectLibraryConfigurations
-    # which may have been run previously. If it is the case, the list can be:
-    #   optimized;<FILEPATH_TO_RELEASE_LIBRARY>;debug;<FILEPATH_TO_DEBUG_LIBRARY>
-    foreach(lib ${PYTHON_LIBRARY} ${PYTHON_DEBUG_LIBRARY})
-      if(IS_ABSOLUTE "${lib}")
-        get_filename_component(_Python_PREFIX "${lib}" PATH)
-        get_filename_component(_Python_PREFIX "${_Python_PREFIX}" PATH)
-        if(_Python_PREFIX)
-          list(APPEND _Python_INCLUDE_PATH_HINT ${_Python_PREFIX}/include)
-        endif()
-        unset(_Python_PREFIX)
-      endif()
-    endforeach()
-
-    # Add framework directories to the search paths
-    set(PYTHON_FRAMEWORK_INCLUDES)
-    if(Python_FRAMEWORKS AND NOT PYTHON_INCLUDE_DIR)
-      foreach(dir ${Python_FRAMEWORKS})
-        list(APPEND PYTHON_FRAMEWORK_INCLUDES
-          ${dir}/Versions/${_CURRENT_VERSION}/include)
-      endforeach()
-    endif()
-
-    find_path(PYTHON_INCLUDE_DIR
-      NAMES Python.h
-      HINTS
-        ${_Python_INCLUDE_PATH_HINT}
-      PATHS
-        ${PYTHON_FRAMEWORK_INCLUDES}
-        [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/include
-        [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH}\\InstallPath]/include
-        [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH2}\\InstallPath]/include
-        [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/include
-        [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH}\\InstallPath]/include
-        [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH2}\\InstallPath]/include
-      PATH_SUFFIXES
-        python${_CURRENT_VERSION}mu
-        python${_CURRENT_VERSION}m
-        python${_CURRENT_VERSION}u
-        python${_CURRENT_VERSION}
-    )
-  endif()
-
-  # For backward compatibility, set PYTHON_INCLUDE_PATH.
-  set(PYTHON_INCLUDE_PATH "${PYTHON_INCLUDE_DIR}")
-
-  if(PYTHON_INCLUDE_DIR AND EXISTS "${PYTHON_INCLUDE_DIR}/patchlevel.h")
-    file(STRINGS "${PYTHON_INCLUDE_DIR}/patchlevel.h" python_version_str
-         REGEX "^#define[ \t]+PY_VERSION[ \t]+\"[^\"]+\"")
-    string(REGEX REPLACE "^#define[ \t]+PY_VERSION[ \t]+\"([^\"]+)\".*" "\\1"
-                         PYTHONLIBS_VERSION_STRING "${python_version_str}")
-    unset(python_version_str)
-  endif()
-
-  if(PYTHON_LIBRARY AND PYTHON_INCLUDE_DIR)
-    break()
-  endif()
-endforeach()
-
-unset(_Python_INCLUDE_PATH_HINT)
-unset(_Python_LIBRARY_PATH_HINT)
-
-mark_as_advanced(
-  PYTHON_DEBUG_LIBRARY
-  PYTHON_LIBRARY
-  PYTHON_INCLUDE_DIR
-)
-
-# We use PYTHON_INCLUDE_DIR, PYTHON_LIBRARY and PYTHON_DEBUG_LIBRARY for the
-# cache entries because they are meant to specify the location of a single
-# library. We now set the variables listed by the documentation for this
-# module.
-set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
-set(PYTHON_DEBUG_LIBRARIES "${PYTHON_DEBUG_LIBRARY}")
-
-# These variables have been historically named in this module different from
-# what SELECT_LIBRARY_CONFIGURATIONS() expects.
-set(PYTHON_LIBRARY_DEBUG "${PYTHON_DEBUG_LIBRARY}")
-set(PYTHON_LIBRARY_RELEASE "${PYTHON_LIBRARY}")
-include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
-SELECT_LIBRARY_CONFIGURATIONS(PYTHON)
-# SELECT_LIBRARY_CONFIGURATIONS() sets ${PREFIX}_FOUND if it has a library.
-# Unset this, this prefix doesn't match the module prefix, they are different
-# for historical reasons.
-unset(PYTHON_FOUND)
-
-# Restore CMAKE_FIND_FRAMEWORK
-if(DEFINED _PythonLibs_CMAKE_FIND_FRAMEWORK)
-  set(CMAKE_FIND_FRAMEWORK ${_PythonLibs_CMAKE_FIND_FRAMEWORK})
-  unset(_PythonLibs_CMAKE_FIND_FRAMEWORK)
-else()
-  unset(CMAKE_FIND_FRAMEWORK)
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(PythonLibs
-                                  REQUIRED_VARS PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS
-                                  VERSION_VAR PYTHONLIBS_VERSION_STRING)
-
-# PYTHON_ADD_MODULE(<name> src1 src2 ... srcN) is used to build modules for python.
-# PYTHON_WRITE_MODULES_HEADER(<filename>) writes a header file you can include
-# in your sources to initialize the static python modules
-function(PYTHON_ADD_MODULE _NAME )
-  get_property(_TARGET_SUPPORTS_SHARED_LIBS
-    GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS)
-  option(PYTHON_ENABLE_MODULE_${_NAME} "Add module ${_NAME}" TRUE)
-  option(PYTHON_MODULE_${_NAME}_BUILD_SHARED
-    "Add module ${_NAME} shared" ${_TARGET_SUPPORTS_SHARED_LIBS})
-
-  # Mark these options as advanced
-  mark_as_advanced(PYTHON_ENABLE_MODULE_${_NAME}
-    PYTHON_MODULE_${_NAME}_BUILD_SHARED)
-
-  if(PYTHON_ENABLE_MODULE_${_NAME})
-    if(PYTHON_MODULE_${_NAME}_BUILD_SHARED)
-      set(PY_MODULE_TYPE MODULE)
-    else()
-      set(PY_MODULE_TYPE STATIC)
-      set_property(GLOBAL  APPEND  PROPERTY  PY_STATIC_MODULES_LIST ${_NAME})
-    endif()
-
-    set_property(GLOBAL  APPEND  PROPERTY  PY_MODULES_LIST ${_NAME})
-    add_library(${_NAME} ${PY_MODULE_TYPE} ${ARGN})
-#    target_link_libraries(${_NAME} ${PYTHON_LIBRARIES})
-
-    if(PYTHON_MODULE_${_NAME}_BUILD_SHARED)
-      set_target_properties(${_NAME} PROPERTIES PREFIX "${PYTHON_MODULE_PREFIX}")
-      if(WIN32 AND NOT CYGWIN)
-        set_target_properties(${_NAME} PROPERTIES SUFFIX ".pyd")
-      endif()
-    endif()
-
-  endif()
-endfunction()
-
-function(PYTHON_WRITE_MODULES_HEADER _filename)
-
-  get_property(PY_STATIC_MODULES_LIST  GLOBAL  PROPERTY PY_STATIC_MODULES_LIST)
-
-  get_filename_component(_name "${_filename}" NAME)
-  string(REPLACE "." "_" _name "${_name}")
-  string(TOUPPER ${_name} _nameUpper)
-  set(_filename ${CMAKE_CURRENT_BINARY_DIR}/${_filename})
-
-  set(_filenameTmp "${_filename}.in")
-  file(WRITE ${_filenameTmp} "/*Created by cmake, do not edit, changes will be lost*/\n")
-  file(APPEND ${_filenameTmp}
-"#ifndef ${_nameUpper}
-#define ${_nameUpper}
-
-#include <Python.h>
-
-#ifdef __cplusplus
-extern \"C\" {
-#endif /* __cplusplus */
-
-")
-
-  foreach(_currentModule ${PY_STATIC_MODULES_LIST})
-    file(APPEND ${_filenameTmp} "extern void init${PYTHON_MODULE_PREFIX}${_currentModule}(void);\n\n")
-  endforeach()
-
-  file(APPEND ${_filenameTmp}
-"#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-")
-
-
-  foreach(_currentModule ${PY_STATIC_MODULES_LIST})
-    file(APPEND ${_filenameTmp} "int ${_name}_${_currentModule}(void) \n{\n  static char name[]=\"${PYTHON_MODULE_PREFIX}${_currentModule}\"; return PyImport_AppendInittab(name, init${PYTHON_MODULE_PREFIX}${_currentModule});\n}\n\n")
-  endforeach()
-
-  file(APPEND ${_filenameTmp} "void ${_name}_LoadAllPythonModules(void)\n{\n")
-  foreach(_currentModule ${PY_STATIC_MODULES_LIST})
-    file(APPEND ${_filenameTmp} "  ${_name}_${_currentModule}();\n")
-  endforeach()
-  file(APPEND ${_filenameTmp} "}\n\n")
-  file(APPEND ${_filenameTmp} "#ifndef EXCLUDE_LOAD_ALL_FUNCTION\nvoid CMakeLoadAllPythonModules(void)\n{\n  ${_name}_LoadAllPythonModules();\n}\n#endif\n\n#endif\n")
-
-# with configure_file() cmake complains that you may not use a file created using file(WRITE) as input file for configure_file()
-  execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${_filenameTmp}" "${_filename}" OUTPUT_QUIET ERROR_QUIET)
-
-endfunction()
diff --git a/share/cmake-3.18/Modules/FindQt.cmake b/share/cmake-3.18/Modules/FindQt.cmake
deleted file mode 100644
index d6a0662..0000000
--- a/share/cmake-3.18/Modules/FindQt.cmake
+++ /dev/null
@@ -1,188 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindQt
-------
-
-Searches for all installed versions of Qt3 or Qt4.
-
-This module cannot handle Qt5 or any later versions.
-For those, see :manual:`cmake-qt(7)`.
-
-This module exists for the :command:`find_package` command only if
-policy :policy:`CMP0084` is not set to ``NEW``.
-
-This module should only be used if your project can work with multiple
-versions of Qt.  If not, you should just directly use FindQt4 or
-FindQt3.  If multiple versions of Qt are found on the machine, then
-The user must set the option DESIRED_QT_VERSION to the version they
-want to use.  If only one version of qt is found on the machine, then
-the DESIRED_QT_VERSION is set to that version and the matching FindQt3
-or FindQt4 module is included.  Once the user sets DESIRED_QT_VERSION,
-then the FindQt3 or FindQt4 module is included.
-
-::
-
-  QT_REQUIRED if this is set to TRUE then if CMake can
-              not find Qt4 or Qt3 an error is raised
-              and a message is sent to the user.
-
-
-
-::
-
-  DESIRED_QT_VERSION OPTION is created
-  QT4_INSTALLED is set to TRUE if qt4 is found.
-  QT3_INSTALLED is set to TRUE if qt3 is found.
-#]=======================================================================]
-
-if(_findqt_testing)
-  set(_findqt_included TRUE)
-  return()
-endif()
-
-# look for signs of qt3 installations
-file(GLOB GLOB_TEMP_VAR /usr/lib*/qt-3*/bin/qmake /usr/lib*/qt3*/bin/qmake)
-if(GLOB_TEMP_VAR)
-  set(QT3_INSTALLED TRUE)
-endif()
-set(GLOB_TEMP_VAR)
-
-file(GLOB GLOB_TEMP_VAR /usr/local/qt-x11-commercial-3*/bin/qmake)
-if(GLOB_TEMP_VAR)
-  set(QT3_INSTALLED TRUE)
-endif()
-set(GLOB_TEMP_VAR)
-
-file(GLOB GLOB_TEMP_VAR /usr/local/lib/qt3/bin/qmake)
-if(GLOB_TEMP_VAR)
-  set(QT3_INSTALLED TRUE)
-endif()
-set(GLOB_TEMP_VAR)
-
-# look for qt4 installations
-file(GLOB GLOB_TEMP_VAR /usr/local/qt-x11-commercial-4*/bin/qmake)
-if(GLOB_TEMP_VAR)
-  set(QT4_INSTALLED TRUE)
-endif()
-set(GLOB_TEMP_VAR)
-
-file(GLOB GLOB_TEMP_VAR /usr/local/Trolltech/Qt-4*/bin/qmake)
-if(GLOB_TEMP_VAR)
-  set(QT4_INSTALLED TRUE)
-endif()
-set(GLOB_TEMP_VAR)
-
-file(GLOB GLOB_TEMP_VAR /usr/local/lib/qt4/bin/qmake)
-if(GLOB_TEMP_VAR)
-  set(QT4_INSTALLED TRUE)
-endif()
-set(GLOB_TEMP_VAR)
-
-if (Qt_FIND_VERSION)
-  if (Qt_FIND_VERSION MATCHES "^([34])(\\.[0-9]+.*)?$")
-    set(DESIRED_QT_VERSION ${CMAKE_MATCH_1})
-  else ()
-    message(FATAL_ERROR "FindQt was called with invalid version '${Qt_FIND_VERSION}'. Only Qt major versions 3 or 4 are supported. If you do not need to support both Qt3 and Qt4 in your source consider calling find_package(Qt3) or find_package(Qt4) instead of find_package(Qt) instead.")
-  endif ()
-endif ()
-
-# now find qmake
-find_program(QT_QMAKE_EXECUTABLE_FINDQT NAMES qmake PATHS "${QT_SEARCH_PATH}/bin" "$ENV{QTDIR}/bin")
-if(QT_QMAKE_EXECUTABLE_FINDQT)
-  exec_program(${QT_QMAKE_EXECUTABLE_FINDQT} ARGS "-query QT_VERSION"
-    OUTPUT_VARIABLE QTVERSION)
-  if(QTVERSION MATCHES "4")
-    set(QT_QMAKE_EXECUTABLE ${QT_QMAKE_EXECUTABLE_FINDQT} CACHE PATH "Qt4 qmake program.")
-    set(QT4_INSTALLED TRUE)
-  endif()
-  if(QTVERSION MATCHES "Unknown")
-    set(QT3_INSTALLED TRUE)
-  endif()
-endif()
-
-if(QT_QMAKE_EXECUTABLE_FINDQT)
-  exec_program( ${QT_QMAKE_EXECUTABLE_FINDQT}
-    ARGS "-query QT_INSTALL_HEADERS"
-    OUTPUT_VARIABLE qt_headers )
-endif()
-
-find_file( QT4_QGLOBAL_H_FILE qglobal.h
-  "${QT_SEARCH_PATH}/Qt/include"
-  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\4.0.0;InstallDir]/include/Qt"
-  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Versions\\4.0.0;InstallDir]/include/Qt"
-  ${qt_headers}/Qt
-  $ENV{QTDIR}/include/Qt
-  /usr/lib/qt/include/Qt
-  /usr/share/qt4/include/Qt
-  /usr/local/include/X11/qt4/Qt
-  C:/Progra~1/qt/include/Qt
-  PATH_SUFFIXES qt/include/Qt include/Qt)
-
-if(QT4_QGLOBAL_H_FILE)
-  set(QT4_INSTALLED TRUE)
-endif()
-
-find_file( QT3_QGLOBAL_H_FILE qglobal.h
-  "${QT_SEARCH_PATH}/Qt/include"
- "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]/include/Qt"
-  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]/include/Qt"
-  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]/include/Qt"
-  C:/Qt/3.3.3Educational/include
-  $ENV{QTDIR}/include
-  /usr/include/qt3/Qt
-  /usr/share/qt3/include
-  /usr/local/include/X11/qt3
-  C:/Progra~1/qt/include
-  PATH_SUFFIXES qt/include include/qt3)
-
-if(QT3_QGLOBAL_H_FILE)
-  set(QT3_INSTALLED TRUE)
-endif()
-
-if(QT3_INSTALLED AND QT4_INSTALLED AND NOT DESIRED_QT_VERSION)
-  # force user to pick if we have both
-  set(DESIRED_QT_VERSION 0 CACHE STRING "Pick a version of Qt to use: 3 or 4")
-else()
-  # if only one found then pick that one
-  if(QT3_INSTALLED AND NOT DESIRED_QT_VERSION EQUAL 4)
-    set(DESIRED_QT_VERSION 3 CACHE STRING "Pick a version of Qt to use: 3 or 4")
-  endif()
-  if(QT4_INSTALLED AND NOT DESIRED_QT_VERSION EQUAL 3)
-    set(DESIRED_QT_VERSION 4 CACHE STRING "Pick a version of Qt to use: 3 or 4")
-  endif()
-endif()
-
-if(DESIRED_QT_VERSION EQUAL 3)
-  set(Qt3_FIND_REQUIRED ${Qt_FIND_REQUIRED})
-  set(Qt3_FIND_QUIETLY  ${Qt_FIND_QUIETLY})
-  include(${CMAKE_CURRENT_LIST_DIR}/FindQt3.cmake)
-endif()
-if(DESIRED_QT_VERSION EQUAL 4)
-  set(Qt4_FIND_REQUIRED ${Qt_FIND_REQUIRED})
-  set(Qt4_FIND_QUIETLY  ${Qt_FIND_QUIETLY})
-  include(${CMAKE_CURRENT_LIST_DIR}/FindQt4.cmake)
-endif()
-
-if(NOT QT3_INSTALLED AND NOT QT4_INSTALLED)
-  if(QT_REQUIRED)
-    message(SEND_ERROR "CMake was unable to find any Qt versions, put qmake in your path, or set QT_QMAKE_EXECUTABLE.")
-  endif()
-else()
-  if(NOT QT_FOUND AND NOT DESIRED_QT_VERSION)
-    if(QT_REQUIRED)
-      message(SEND_ERROR "Multiple versions of Qt found please set DESIRED_QT_VERSION")
-    else()
-      message("Multiple versions of Qt found please set DESIRED_QT_VERSION")
-    endif()
-  endif()
-  if(NOT QT_FOUND AND DESIRED_QT_VERSION)
-    if(QT_REQUIRED)
-      message(FATAL_ERROR "CMake was unable to find Qt version: ${DESIRED_QT_VERSION}. Set advanced values QT_QMAKE_EXECUTABLE and QT${DESIRED_QT_VERSION}_QGLOBAL_H_FILE, if those are set then QT_QT_LIBRARY or QT_LIBRARY_DIR.")
-    else()
-      message( "CMake was unable to find desired Qt version: ${DESIRED_QT_VERSION}. Set advanced values QT_QMAKE_EXECUTABLE and QT${DESIRED_QT_VERSION}_QGLOBAL_H_FILE.")
-    endif()
-  endif()
-endif()
-mark_as_advanced(QT3_QGLOBAL_H_FILE QT4_QGLOBAL_H_FILE QT_QMAKE_EXECUTABLE_FINDQT)
diff --git a/share/cmake-3.18/Modules/FindQt3.cmake b/share/cmake-3.18/Modules/FindQt3.cmake
deleted file mode 100644
index 563ed46..0000000
--- a/share/cmake-3.18/Modules/FindQt3.cmake
+++ /dev/null
@@ -1,296 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindQt3
--------
-
-Locate Qt include paths and libraries
-
-This module defines:
-
-::
-
-  QT_INCLUDE_DIR    - where to find qt.h, etc.
-  QT_LIBRARIES      - the libraries to link against to use Qt.
-  QT_DEFINITIONS    - definitions to use when
-                      compiling code that uses Qt.
-  QT_FOUND          - If false, don't try to use Qt.
-  QT_VERSION_STRING - the version of Qt found
-
-
-
-If you need the multithreaded version of Qt, set QT_MT_REQUIRED to
-TRUE
-
-Also defined, but not for general use are:
-
-::
-
-  QT_MOC_EXECUTABLE, where to find the moc tool.
-  QT_UIC_EXECUTABLE, where to find the uic tool.
-  QT_QT_LIBRARY, where to find the Qt library.
-  QT_QTMAIN_LIBRARY, where to find the qtmain
-   library. This is only required by Qt3 on Windows.
-#]=======================================================================]
-
-# These are around for backwards compatibility
-# they will be set
-#  QT_WRAP_CPP, set true if QT_MOC_EXECUTABLE is found
-#  QT_WRAP_UI set true if QT_UIC_EXECUTABLE is found
-
-# If Qt4 has already been found, fail.
-if(QT4_FOUND)
-  if(Qt3_FIND_REQUIRED)
-    message( FATAL_ERROR "Qt3 and Qt4 cannot be used together in one project.")
-  else()
-    if(NOT Qt3_FIND_QUIETLY)
-      message( STATUS    "Qt3 and Qt4 cannot be used together in one project.")
-    endif()
-    return()
-  endif()
-endif()
-
-
-file(GLOB GLOB_PATHS /usr/lib/qt-3*)
-foreach(GLOB_PATH ${GLOB_PATHS})
-  list(APPEND GLOB_PATHS_BIN "${GLOB_PATH}/bin")
-endforeach()
-find_path(QT_INCLUDE_DIR qt.h
-  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]/include/Qt"
-  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]/include/Qt"
-  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]/include/Qt"
-  $ENV{QTDIR}/include
-  ${GLOB_PATHS}
-  /usr/share/qt3/include
-  C:/Progra~1/qt/include
-  /usr/local/include/X11/qt3
-  PATH_SUFFIXES lib/qt/include lib/qt3/include include/qt include/qt3 qt/include qt3/include
-  )
-
-# if qglobal.h is not in the qt_include_dir then set
-# QT_INCLUDE_DIR to NOTFOUND
-if(NOT EXISTS ${QT_INCLUDE_DIR}/qglobal.h)
-  set(QT_INCLUDE_DIR QT_INCLUDE_DIR-NOTFOUND CACHE PATH "path to Qt3 include directory" FORCE)
-endif()
-
-if(QT_INCLUDE_DIR)
-  #extract the version string from qglobal.h
-  file(STRINGS ${QT_INCLUDE_DIR}/qglobal.h QGLOBAL_H REGEX "#define[\t ]+QT_VERSION_STR[\t ]+\"[0-9]+.[0-9]+.[0-9]+[a-z]*\"")
-  string(REGEX REPLACE ".*\"([0-9]+.[0-9]+.[0-9]+[a-z]*)\".*" "\\1" qt_version_str "${QGLOBAL_H}")
-  unset(QGLOBAL_H)
-
-  # Under windows the qt library (MSVC) has the format qt-mtXYZ where XYZ is the
-  # version X.Y.Z, so we need to remove the dots from version
-  string(REGEX REPLACE "\\." "" qt_version_str_lib "${qt_version_str}")
-  set(QT_VERSION_STRING "${qt_version_str}")
-endif()
-
-file(GLOB GLOB_PATHS_LIB /usr/lib/qt-3*/lib/)
-if (QT_MT_REQUIRED)
-  find_library(QT_QT_LIBRARY
-    NAMES
-    qt-mt qt-mt${qt_version_str_lib} qt-mtnc${qt_version_str_lib}
-    qt-mtedu${qt_version_str_lib} qt-mt230nc qt-mtnc321 qt-mt3
-    PATHS
-      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]"
-      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]"
-      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]"
-      ENV QTDIR
-      ${GLOB_PATHS_LIB}
-      /usr/share/qt3
-      C:/Progra~1/qt
-    PATH_SUFFIXES
-      lib lib/qt lib/qt3 qt qt3 qt/lib qt3/lib
-    )
-
-else ()
-  find_library(QT_QT_LIBRARY
-    NAMES
-    qt qt-${qt_version_str_lib} qt-edu${qt_version_str_lib}
-    qt-mt qt-mt${qt_version_str_lib} qt-mtnc${qt_version_str_lib}
-    qt-mtedu${qt_version_str_lib} qt-mt230nc qt-mtnc321 qt-mt3
-    PATHS
-      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]"
-      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]"
-      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]"
-      ENV QTDIR
-      ${GLOB_PATHS_LIB}
-      /usr/share/qt3
-      C:/Progra~1/qt/lib
-    PATH_SUFFIXES
-      lib lib/qt lib/qt3 qt qt3 qt/lib qt3/lib
-    )
-endif ()
-
-
-find_library(QT_QASSISTANTCLIENT_LIBRARY
-  NAMES qassistantclient
-  PATHS
-    "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]"
-    "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]"
-    "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]"
-    ENV QTDIR
-    ${GLOB_PATHS_LIB}
-    /usr/share/qt3
-    C:/Progra~1/qt
-  PATH_SUFFIXES
-    lib lib/qt lib/qt3 qt qt3 qt/lib qt3/lib
-  )
-
-# Qt 3 should prefer QTDIR over the PATH
-find_program(QT_MOC_EXECUTABLE
-  NAMES moc-qt3 moc3 moc3-mt moc
-  HINTS
-    ENV QTDIR
-  PATHS
-  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]/include/Qt"
-  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]/include/Qt"
-  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]/include/Qt"
-  ${GLOB_PATHS_BIN}
-    /usr/share/qt3
-    C:/Progra~1/qt
-  PATH_SUFFIXES
-    bin lib/qt lib/qt3 qt qt3 qt/bin qt3/bin lib/qt/bin lib/qt3/bin
-  )
-
-if(QT_MOC_EXECUTABLE)
-  set ( QT_WRAP_CPP "YES")
-endif()
-
-# Qt 3 should prefer QTDIR over the PATH
-find_program(QT_UIC_EXECUTABLE
-  NAMES uic-qt3 uic3 uic3-mt uic
-  HINTS
-    ENV QTDIR
-  PATHS
-  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]/include/Qt"
-  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]/include/Qt"
-  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]/include/Qt"
-  ${GLOB_PATHS_BIN}
-    /usr/share/qt3
-    C:/Progra~1/qt
-  PATH_SUFFIXES
-    bin lib/qt lib/qt3 qt qt3 qt/bin qt3/bin lib/qt/bin lib/qt3/bin
-  )
-
-if(QT_UIC_EXECUTABLE)
-  set ( QT_WRAP_UI "YES")
-endif()
-
-if (WIN32)
-  find_library(QT_QTMAIN_LIBRARY qtmain
-    HINTS
-      ENV QTDIR
-      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]"
-      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]"
-      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]"
-    PATHS
-      "$ENV{ProgramFiles}/qt"
-      "C:/Program Files/qt"
-    PATH_SUFFIXES
-      lib
-    DOC "This Library is only needed by and included with Qt3 on MSWindows. It should be NOTFOUND, undefined or IGNORE otherwise."
-    )
-endif ()
-
-#support old QT_MIN_VERSION if set, but not if version is supplied by find_package()
-if(NOT Qt3_FIND_VERSION AND QT_MIN_VERSION)
-  set(Qt3_FIND_VERSION ${QT_MIN_VERSION})
-endif()
-
-# if the include a library are found then we have it
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(Qt3
-                                  REQUIRED_VARS QT_QT_LIBRARY QT_INCLUDE_DIR QT_MOC_EXECUTABLE
-                                  VERSION_VAR QT_VERSION_STRING)
-set(QT_FOUND ${QT3_FOUND} )
-
-if(QT_FOUND)
-  set( QT_LIBRARIES ${QT_LIBRARIES} ${QT_QT_LIBRARY} )
-  set( QT_DEFINITIONS "")
-
-  if (WIN32 AND NOT CYGWIN)
-    if (QT_QTMAIN_LIBRARY)
-      # for version 3
-      set (QT_DEFINITIONS -DQT_DLL -DQT_THREAD_SUPPORT -DNO_DEBUG)
-      set (QT_LIBRARIES imm32.lib ${QT_QT_LIBRARY} ${QT_QTMAIN_LIBRARY} )
-      set (QT_LIBRARIES ${QT_LIBRARIES} winmm wsock32)
-    else ()
-      # for version 2
-      set (QT_LIBRARIES imm32.lib ws2_32.lib ${QT_QT_LIBRARY} )
-    endif ()
-  else ()
-    set (QT_LIBRARIES ${QT_QT_LIBRARY} )
-
-    set (QT_DEFINITIONS -DQT_SHARED -DQT_NO_DEBUG)
-    if(QT_QT_LIBRARY MATCHES "qt-mt")
-      set (QT_DEFINITIONS ${QT_DEFINITIONS} -DQT_THREAD_SUPPORT -D_REENTRANT)
-    endif()
-
-  endif ()
-
-  if (QT_QASSISTANTCLIENT_LIBRARY)
-    set (QT_LIBRARIES ${QT_QASSISTANTCLIENT_LIBRARY} ${QT_LIBRARIES})
-  endif ()
-
-  # Backwards compatibility for CMake1.4 and 1.2
-  set (QT_MOC_EXE ${QT_MOC_EXECUTABLE} )
-  set (QT_UIC_EXE ${QT_UIC_EXECUTABLE} )
-  # for unix add X11 stuff
-  if(UNIX)
-    find_package(X11)
-    if (X11_FOUND)
-      set (QT_LIBRARIES ${QT_LIBRARIES} ${X11_LIBRARIES})
-    endif ()
-    if (CMAKE_DL_LIBS)
-      set (QT_LIBRARIES ${QT_LIBRARIES} ${CMAKE_DL_LIBS})
-    endif ()
-  endif()
-  if(QT_QT_LIBRARY MATCHES "qt-mt")
-    find_package(Threads)
-    set(QT_LIBRARIES ${QT_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
-  endif()
-endif()
-
-if(QT_MOC_EXECUTABLE)
-  execute_process(COMMAND ${QT_MOC_EXECUTABLE} "-v"
-                  OUTPUT_VARIABLE QTVERSION_MOC
-                  ERROR_QUIET)
-endif()
-if(QT_UIC_EXECUTABLE)
-  execute_process(COMMAND ${QT_UIC_EXECUTABLE} "-version"
-                  OUTPUT_VARIABLE QTVERSION_UIC
-                  ERROR_QUIET)
-endif()
-
-set(_QT_UIC_VERSION_3 FALSE)
-if("${QTVERSION_UIC}" MATCHES " 3.")
-  set(_QT_UIC_VERSION_3 TRUE)
-endif()
-
-set(_QT_MOC_VERSION_3 FALSE)
-if("${QTVERSION_MOC}" MATCHES " 3.")
-  set(_QT_MOC_VERSION_3 TRUE)
-endif()
-
-set(QT_WRAP_CPP FALSE)
-if (QT_MOC_EXECUTABLE AND _QT_MOC_VERSION_3)
-  set ( QT_WRAP_CPP TRUE)
-endif ()
-
-set(QT_WRAP_UI FALSE)
-if (QT_UIC_EXECUTABLE AND _QT_UIC_VERSION_3)
-  set ( QT_WRAP_UI TRUE)
-endif ()
-
-mark_as_advanced(
-  QT_INCLUDE_DIR
-  QT_QT_LIBRARY
-  QT_QTMAIN_LIBRARY
-  QT_QASSISTANTCLIENT_LIBRARY
-  QT_UIC_EXECUTABLE
-  QT_MOC_EXECUTABLE
-  QT_WRAP_CPP
-  QT_WRAP_UI
-  )
diff --git a/share/cmake-3.18/Modules/FindQt4.cmake b/share/cmake-3.18/Modules/FindQt4.cmake
deleted file mode 100644
index 3993968..0000000
--- a/share/cmake-3.18/Modules/FindQt4.cmake
+++ /dev/null
@@ -1,1338 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindQt4
--------
-
-Finding and Using Qt4
-^^^^^^^^^^^^^^^^^^^^^
-
-This module can be used to find Qt4.  The most important issue is that
-the Qt4 qmake is available via the system path.  This qmake is then
-used to detect basically everything else.  This module defines a
-number of :prop_tgt:`IMPORTED` targets, macros and variables.
-
-Typical usage could be something like:
-
-.. code-block:: cmake
-
-   set(CMAKE_AUTOMOC ON)
-   set(CMAKE_INCLUDE_CURRENT_DIR ON)
-   find_package(Qt4 4.4.3 REQUIRED QtGui QtXml)
-   add_executable(myexe main.cpp)
-   target_link_libraries(myexe Qt4::QtGui Qt4::QtXml)
-
-.. note::
-
- When using :prop_tgt:`IMPORTED` targets, the qtmain.lib static library is
- automatically linked on Windows for :prop_tgt:`WIN32 <WIN32_EXECUTABLE>`
- executables. To disable that globally, set the
- ``QT4_NO_LINK_QTMAIN`` variable before finding Qt4. To disable that
- for a particular executable, set the ``QT4_NO_LINK_QTMAIN`` target
- property to ``TRUE`` on the executable.
-
-Qt Build Tools
-^^^^^^^^^^^^^^
-
-Qt relies on some bundled tools for code generation, such as ``moc`` for
-meta-object code generation,``uic`` for widget layout and population,
-and ``rcc`` for virtual filesystem content generation.  These tools may be
-automatically invoked by :manual:`cmake(1)` if the appropriate conditions
-are met.  See :manual:`cmake-qt(7)` for more.
-
-Qt Macros
-^^^^^^^^^
-
-In some cases it can be necessary or useful to invoke the Qt build tools in a
-more-manual way. Several macros are available to add targets for such uses.
-
-::
-
-  macro QT4_WRAP_CPP(outfiles inputfile ... [TARGET tgt] OPTIONS ...)
-        create moc code from a list of files containing Qt class with
-        the Q_OBJECT declaration.  Per-directory preprocessor definitions
-        are also added.  If the <tgt> is specified, the
-        INTERFACE_INCLUDE_DIRECTORIES and INTERFACE_COMPILE_DEFINITIONS from
-        the <tgt> are passed to moc.  Options may be given to moc, such as
-        those found when executing "moc -help".
-
-
-::
-
-  macro QT4_WRAP_UI(outfiles inputfile ... OPTIONS ...)
-        create code from a list of Qt designer ui files.
-        Options may be given to uic, such as those found
-        when executing "uic -help"
-
-
-::
-
-  macro QT4_ADD_RESOURCES(outfiles inputfile ... OPTIONS ...)
-        create code from a list of Qt resource files.
-        Options may be given to rcc, such as those found
-        when executing "rcc -help"
-
-
-::
-
-  macro QT4_GENERATE_MOC(inputfile outputfile [TARGET tgt])
-        creates a rule to run moc on infile and create outfile.
-        Use this if for some reason QT4_WRAP_CPP() isn't appropriate, e.g.
-        because you need a custom filename for the moc file or something
-        similar.  If the <tgt> is specified, the
-        INTERFACE_INCLUDE_DIRECTORIES and INTERFACE_COMPILE_DEFINITIONS from
-        the <tgt> are passed to moc.
-
-
-::
-
-  macro QT4_ADD_DBUS_INTERFACE(outfiles interface basename)
-        Create the interface header and implementation files with the
-        given basename from the given interface xml file and add it to
-        the list of sources.
-
-        You can pass additional parameters to the qdbusxml2cpp call by setting
-        properties on the input file:
-
-        INCLUDE the given file will be included in the generate interface header
-
-        CLASSNAME the generated class is named accordingly
-
-        NO_NAMESPACE the generated class is not wrapped in a namespace
-
-
-::
-
-  macro QT4_ADD_DBUS_INTERFACES(outfiles inputfile ... )
-        Create the interface header and implementation files
-        for all listed interface xml files.
-        The basename will be automatically determined from the name
-        of the xml file.
-
-        The source file properties described for
-        QT4_ADD_DBUS_INTERFACE also apply here.
-
-
-::
-
-  macro QT4_ADD_DBUS_ADAPTOR(outfiles xmlfile parentheader parentclassname
-                             [basename] [classname])
-        create a dbus adaptor (header and implementation file) from the xml file
-        describing the interface, and add it to the list of sources. The adaptor
-        forwards the calls to a parent class, defined in parentheader and named
-        parentclassname. The name of the generated files will be
-        <basename>adaptor.{cpp,h} where basename defaults to the basename of the
-        xml file.
-        If <classname> is provided, then it will be used as the classname of the
-        adaptor itself.
-
-
-::
-
-  macro QT4_GENERATE_DBUS_INTERFACE( header [interfacename] OPTIONS ...)
-        generate the xml interface file from the given header.
-        If the optional argument interfacename is omitted, the name of the
-        interface file is constructed from the basename of the header with
-        the suffix .xml appended.
-        Options may be given to qdbuscpp2xml, such as those found when
-        executing "qdbuscpp2xml --help"
-
-
-::
-
-  macro QT4_CREATE_TRANSLATION( qm_files directories ... sources ...
-                                ts_files ... OPTIONS ...)
-        out: qm_files
-        in:  directories sources ts_files
-        options: flags to pass to lupdate, such as -extensions to specify
-        extensions for a directory scan.
-        generates commands to create .ts (vie lupdate) and .qm
-        (via lrelease) - files from directories and/or sources. The ts files are
-        created and/or updated in the source tree (unless given with full paths).
-        The qm files are generated in the build tree.
-        Updating the translations can be done by adding the qm_files
-        to the source list of your library/executable, so they are
-        always updated, or by adding a custom target to control when
-        they get updated/generated.
-
-
-::
-
-  macro QT4_ADD_TRANSLATION( qm_files ts_files ... )
-        out: qm_files
-        in:  ts_files
-        generates commands to create .qm from .ts - files. The generated
-        filenames can be found in qm_files. The ts_files
-        must exist and are not updated in any way.
-
-
-::
-
-  macro QT4_AUTOMOC(sourcefile1 sourcefile2 ... [TARGET tgt])
-        The qt4_automoc macro is obsolete.  Use the CMAKE_AUTOMOC feature instead.
-        This macro is still experimental.
-        It can be used to have moc automatically handled.
-        So if you have the files foo.h and foo.cpp, and in foo.h a
-        a class uses the Q_OBJECT macro, moc has to run on it. If you don't
-        want to use QT4_WRAP_CPP() (which is reliable and mature), you can insert
-        #include "foo.moc"
-        in foo.cpp and then give foo.cpp as argument to QT4_AUTOMOC(). This will
-        scan all listed files at cmake-time for such included moc files and if it
-        finds them cause a rule to be generated to run moc at build time on the
-        accompanying header file foo.h.
-        If a source file has the SKIP_AUTOMOC property set it will be ignored by
-        this macro.
-        If the <tgt> is specified, the INTERFACE_INCLUDE_DIRECTORIES and
-        INTERFACE_COMPILE_DEFINITIONS from the <tgt> are passed to moc.
-
-
-::
-
- function QT4_USE_MODULES( target [link_type] modules...)
-        This function is obsolete. Use target_link_libraries with IMPORTED targets
-        instead.
-        Make <target> use the <modules> from Qt. Using a Qt module means
-        to link to the library, add the relevant include directories for the
-        module, and add the relevant compiler defines for using the module.
-        Modules are roughly equivalent to components of Qt4, so usage would be
-        something like:
-         qt4_use_modules(myexe Core Gui Declarative)
-        to use QtCore, QtGui and QtDeclarative. The optional <link_type> argument
-        can be specified as either LINK_PUBLIC or LINK_PRIVATE to specify the
-        same argument to the target_link_libraries call.
-
-
-IMPORTED Targets
-^^^^^^^^^^^^^^^^
-
-A particular Qt library may be used by using the corresponding
-:prop_tgt:`IMPORTED` target with the :command:`target_link_libraries`
-command:
-
-.. code-block:: cmake
-
-  target_link_libraries(myexe Qt4::QtGui Qt4::QtXml)
-
-Using a target in this way causes :cmake(1)` to use the appropriate include
-directories and compile definitions for the target when compiling ``myexe``.
-
-Targets are aware of their dependencies, so for example it is not necessary
-to list ``Qt4::QtCore`` if another Qt library is listed, and it is not
-necessary to list ``Qt4::QtGui`` if ``Qt4::QtDeclarative`` is listed.
-Targets may be tested for existence in the usual way with the
-:command:`if(TARGET)` command.
-
-The Qt toolkit may contain both debug and release libraries.
-:manual:`cmake(1)` will choose the appropriate version based on the build
-configuration.
-
-``Qt4::QtCore``
- The QtCore target
-``Qt4::QtGui``
- The QtGui target
-``Qt4::Qt3Support``
- The Qt3Support target
-``Qt4::QtAssistant``
- The QtAssistant target
-``Qt4::QtAssistantClient``
- The QtAssistantClient target
-``Qt4::QAxContainer``
- The QAxContainer target (Windows only)
-``Qt4::QAxServer``
- The QAxServer target (Windows only)
-``Qt4::QtDBus``
- The QtDBus target
-``Qt4::QtDeclarative``
- The QtDeclarative target
-``Qt4::QtDesigner``
- The QtDesigner target
-``Qt4::QtDesignerComponents``
- The QtDesignerComponents target
-``Qt4::QtHelp``
- The QtHelp target
-``Qt4::QtMotif``
- The QtMotif target
-``Qt4::QtMultimedia``
- The QtMultimedia target
-``Qt4::QtNetwork``
- The QtNetwork target
-``Qt4::QtNsPLugin``
- The QtNsPLugin target
-``Qt4::QtOpenGL``
- The QtOpenGL target
-``Qt4::QtScript``
- The QtScript target
-``Qt4::QtScriptTools``
- The QtScriptTools target
-``Qt4::QtSql``
- The QtSql target
-``Qt4::QtSvg``
- The QtSvg target
-``Qt4::QtTest``
- The QtTest target
-``Qt4::QtUiTools``
- The QtUiTools target
-``Qt4::QtWebKit``
- The QtWebKit target
-``Qt4::QtXml``
- The QtXml target
-``Qt4::QtXmlPatterns``
- The QtXmlPatterns target
-``Qt4::phonon``
- The phonon target
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-  Below is a detailed list of variables that FindQt4.cmake sets.
-
-``Qt4_FOUND``
- If false, don't try to use Qt 4.
-``QT_FOUND``
- If false, don't try to use Qt. This variable is for compatibility only.
-``QT4_FOUND``
- If false, don't try to use Qt 4. This variable is for compatibility only.
-``QT_VERSION_MAJOR``
- The major version of Qt found.
-``QT_VERSION_MINOR``
- The minor version of Qt found.
-``QT_VERSION_PATCH``
- The patch version of Qt found.
-#]=======================================================================]
-
-# Use find_package( Qt4 COMPONENTS ... ) to enable modules
-if( Qt4_FIND_COMPONENTS )
-  foreach( component ${Qt4_FIND_COMPONENTS} )
-    string( TOUPPER ${component} _COMPONENT )
-    set( QT_USE_${_COMPONENT} 1 )
-  endforeach()
-
-  # To make sure we don't use QtCore or QtGui when not in COMPONENTS
-  if(NOT QT_USE_QTCORE)
-    set( QT_DONT_USE_QTCORE 1 )
-  endif()
-
-  if(NOT QT_USE_QTGUI)
-    set( QT_DONT_USE_QTGUI 1 )
-  endif()
-
-endif()
-
-# If Qt3 has already been found, fail.
-if(QT_QT_LIBRARY)
-  if(Qt4_FIND_REQUIRED)
-    message( FATAL_ERROR "Qt3 and Qt4 cannot be used together in one project.  If switching to Qt4, the CMakeCache.txt needs to be cleaned.")
-  else()
-    if(NOT Qt4_FIND_QUIETLY)
-      message( STATUS    "Qt3 and Qt4 cannot be used together in one project.  If switching to Qt4, the CMakeCache.txt needs to be cleaned.")
-    endif()
-    return()
-  endif()
-endif()
-
-
-include(${CMAKE_CURRENT_LIST_DIR}/CheckCXXSymbolExists.cmake)
-include(${CMAKE_CURRENT_LIST_DIR}/MacroAddFileDependencies.cmake)
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-include(${CMAKE_CURRENT_LIST_DIR}/CMakePushCheckState.cmake)
-
-set(QT_USE_FILE ${CMAKE_ROOT}/Modules/UseQt4.cmake)
-
-set( QT_DEFINITIONS "")
-
-# convenience macro for dealing with debug/release library names
-macro (_QT4_ADJUST_LIB_VARS _camelCaseBasename)
-
-  string(TOUPPER "${_camelCaseBasename}" basename)
-
-  # The name of the imported targets, i.e. the prefix "Qt4::" must not change,
-  # since it is stored in EXPORT-files as name of a required library. If the name would change
-  # here, this would lead to the imported Qt4-library targets not being resolved by cmake anymore.
-  if (QT_${basename}_LIBRARY_RELEASE OR QT_${basename}_LIBRARY_DEBUG)
-
-    if(NOT TARGET Qt4::${_camelCaseBasename})
-      add_library(Qt4::${_camelCaseBasename} UNKNOWN IMPORTED )
-
-      if (QT_${basename}_LIBRARY_RELEASE)
-        set_property(TARGET Qt4::${_camelCaseBasename} APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
-        set(_location "${QT_${basename}_LIBRARY_RELEASE}")
-        if(QT_USE_FRAMEWORKS AND EXISTS ${_location}/${_camelCaseBasename})
-          set_property(TARGET Qt4::${_camelCaseBasename}        PROPERTY IMPORTED_LOCATION_RELEASE "${_location}/${_camelCaseBasename}" )
-        else()
-          set_property(TARGET Qt4::${_camelCaseBasename}        PROPERTY IMPORTED_LOCATION_RELEASE "${_location}" )
-        endif()
-      endif ()
-
-      if (QT_${basename}_LIBRARY_DEBUG)
-        set_property(TARGET Qt4::${_camelCaseBasename} APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
-        set(_location "${QT_${basename}_LIBRARY_DEBUG}")
-        if(QT_USE_FRAMEWORKS AND EXISTS ${_location}/${_camelCaseBasename})
-          set_property(TARGET Qt4::${_camelCaseBasename}        PROPERTY IMPORTED_LOCATION_DEBUG "${_location}/${_camelCaseBasename}" )
-        else()
-          set_property(TARGET Qt4::${_camelCaseBasename}        PROPERTY IMPORTED_LOCATION_DEBUG "${_location}" )
-        endif()
-      endif ()
-      set_property(TARGET Qt4::${_camelCaseBasename} PROPERTY
-        INTERFACE_INCLUDE_DIRECTORIES
-          "${QT_${basename}_INCLUDE_DIR}"
-      )
-      string(REGEX REPLACE "^QT" "" _stemname ${basename})
-      set_property(TARGET Qt4::${_camelCaseBasename} PROPERTY
-        INTERFACE_COMPILE_DEFINITIONS
-          "QT_${_stemname}_LIB"
-      )
-    endif()
-
-    # If QT_USE_IMPORTED_TARGETS is enabled, the QT_QTFOO_LIBRARY variables are set to point at these
-    # imported targets. This works better in general, and is also in almost all cases fully
-    # backward compatible. The only issue is when a project A which had this enabled then exports its
-    # libraries via export or export_library_dependencies(). In this case the libraries from project
-    # A will depend on the imported Qt targets, and the names of these imported targets will be stored
-    # in the dependency files on disk. This means when a project B then uses project A, these imported
-    # targets must be created again, otherwise e.g. "Qt4__QtCore" will be interpreted as name of a
-    # library file on disk, and not as a target, and linking will fail:
-    if(QT_USE_IMPORTED_TARGETS)
-        set(QT_${basename}_LIBRARY       Qt4::${_camelCaseBasename} )
-        set(QT_${basename}_LIBRARIES     Qt4::${_camelCaseBasename} )
-    else()
-
-      # if the release- as well as the debug-version of the library have been found:
-      if (QT_${basename}_LIBRARY_DEBUG AND QT_${basename}_LIBRARY_RELEASE)
-        # if the generator is multi-config or if CMAKE_BUILD_TYPE is set for
-        # single-config generators, set optimized and debug libraries
-        get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
-        if(_isMultiConfig OR CMAKE_BUILD_TYPE)
-          set(QT_${basename}_LIBRARY       optimized ${QT_${basename}_LIBRARY_RELEASE} debug ${QT_${basename}_LIBRARY_DEBUG})
-        else()
-          # For single-config generators where CMAKE_BUILD_TYPE has no value,
-          # just use the release libraries
-          set(QT_${basename}_LIBRARY       ${QT_${basename}_LIBRARY_RELEASE} )
-        endif()
-        set(QT_${basename}_LIBRARIES       optimized ${QT_${basename}_LIBRARY_RELEASE} debug ${QT_${basename}_LIBRARY_DEBUG})
-      endif ()
-
-      # if only the release version was found, set the debug variable also to the release version
-      if (QT_${basename}_LIBRARY_RELEASE AND NOT QT_${basename}_LIBRARY_DEBUG)
-        set(QT_${basename}_LIBRARY_DEBUG ${QT_${basename}_LIBRARY_RELEASE})
-        set(QT_${basename}_LIBRARY       ${QT_${basename}_LIBRARY_RELEASE})
-        set(QT_${basename}_LIBRARIES     ${QT_${basename}_LIBRARY_RELEASE})
-      endif ()
-
-      # if only the debug version was found, set the release variable also to the debug version
-      if (QT_${basename}_LIBRARY_DEBUG AND NOT QT_${basename}_LIBRARY_RELEASE)
-        set(QT_${basename}_LIBRARY_RELEASE ${QT_${basename}_LIBRARY_DEBUG})
-        set(QT_${basename}_LIBRARY         ${QT_${basename}_LIBRARY_DEBUG})
-        set(QT_${basename}_LIBRARIES       ${QT_${basename}_LIBRARY_DEBUG})
-      endif ()
-
-      # put the value in the cache:
-      set(QT_${basename}_LIBRARY ${QT_${basename}_LIBRARY} CACHE STRING "The Qt ${basename} library" FORCE)
-
-    endif()
-
-    set(QT_${basename}_FOUND 1)
-
-  else ()
-
-    set(QT_${basename}_LIBRARY "" CACHE STRING "The Qt ${basename} library" FORCE)
-
-  endif ()
-
-  if (QT_${basename}_INCLUDE_DIR)
-    #add the include directory to QT_INCLUDES
-    set(QT_INCLUDES "${QT_${basename}_INCLUDE_DIR}" ${QT_INCLUDES})
-  endif ()
-
-  # Make variables changeable to the advanced user
-  mark_as_advanced(QT_${basename}_LIBRARY QT_${basename}_LIBRARY_RELEASE QT_${basename}_LIBRARY_DEBUG QT_${basename}_INCLUDE_DIR)
-endmacro ()
-
-function(_QT4_QUERY_QMAKE VAR RESULT)
-  execute_process(COMMAND "${QT_QMAKE_EXECUTABLE}" -query ${VAR}
-    RESULT_VARIABLE return_code
-    OUTPUT_VARIABLE output
-    OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE)
-  if(NOT return_code)
-    file(TO_CMAKE_PATH "${output}" output)
-    set(${RESULT} ${output} PARENT_SCOPE)
-  endif()
-endfunction()
-
-function(_QT4_GET_VERSION_COMPONENTS VERSION RESULT_MAJOR RESULT_MINOR RESULT_PATCH)
-  string(REGEX REPLACE "^([0-9]+)\\.[0-9]+\\.[0-9]+.*" "\\1" QT_VERSION_MAJOR "${QTVERSION}")
-  string(REGEX REPLACE "^[0-9]+\\.([0-9]+)\\.[0-9]+.*" "\\1" QT_VERSION_MINOR "${QTVERSION}")
-  string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" QT_VERSION_PATCH "${QTVERSION}")
-
-  set(${RESULT_MAJOR} ${QT_VERSION_MAJOR} PARENT_SCOPE)
-  set(${RESULT_MINOR} ${QT_VERSION_MINOR} PARENT_SCOPE)
-  set(${RESULT_PATCH} ${QT_VERSION_PATCH} PARENT_SCOPE)
-endfunction()
-
-function(_QT4_FIND_QMAKE QMAKE_NAMES QMAKE_RESULT VERSION_RESULT)
-  list(LENGTH QMAKE_NAMES QMAKE_NAMES_LEN)
-  if(${QMAKE_NAMES_LEN} EQUAL 0)
-    return()
-  endif()
-  list(GET QMAKE_NAMES 0 QMAKE_NAME)
-
-  get_filename_component(qt_install_version "[HKEY_CURRENT_USER\\Software\\trolltech\\Versions;DefaultQtVersion]" NAME)
-
-  find_program(QT_QMAKE_EXECUTABLE NAMES ${QMAKE_NAME}
-    PATHS
-      ENV QTDIR
-      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Versions\\${qt_install_version};InstallDir]"
-    PATH_SUFFIXES bin
-    DOC "The qmake executable for the Qt installation to use"
-  )
-
-  set(major 0)
-  if (QT_QMAKE_EXECUTABLE)
-    _qt4_query_qmake(QT_VERSION QTVERSION)
-    _qt4_get_version_components("${QTVERSION}" major minor patch)
-  endif()
-
-  if (NOT QT_QMAKE_EXECUTABLE OR NOT "${major}" EQUAL 4)
-    set(curr_qmake "${QT_QMAKE_EXECUTABLE}")
-    set(curr_qt_version "${QTVERSION}")
-
-    set(QT_QMAKE_EXECUTABLE NOTFOUND CACHE FILEPATH "" FORCE)
-    list(REMOVE_AT QMAKE_NAMES 0)
-    _qt4_find_qmake("${QMAKE_NAMES}" QMAKE QTVERSION)
-
-    _qt4_get_version_components("${QTVERSION}" major minor patch)
-    if (NOT ${major} EQUAL 4)
-      # Restore possibly found qmake and it's version; these are used later
-      # in error message if incorrect version is found
-      set(QT_QMAKE_EXECUTABLE "${curr_qmake}" CACHE FILEPATH "" FORCE)
-      set(QTVERSION "${curr_qt_version}")
-    endif()
-
-  endif()
-
-
-  set(${QMAKE_RESULT} "${QT_QMAKE_EXECUTABLE}" PARENT_SCOPE)
-  set(${VERSION_RESULT} "${QTVERSION}" PARENT_SCOPE)
-endfunction()
-
-
-set(QT4_INSTALLED_VERSION_TOO_OLD FALSE)
-
-set(_QT4_QMAKE_NAMES qmake qmake4 qmake-qt4 qmake-mac)
-_qt4_find_qmake("${_QT4_QMAKE_NAMES}" QT_QMAKE_EXECUTABLE QTVERSION)
-
-if (QT_QMAKE_EXECUTABLE AND
-  QTVERSION VERSION_GREATER 3 AND QTVERSION VERSION_LESS 5)
-
-  if (Qt5Core_FOUND)
-    # Qt5CoreConfig sets QT_MOC_EXECUTABLE as a non-cache variable to the Qt 5
-    # path to moc.  Unset that variable when Qt 4 and 5 are used together, so
-    # that when find_program looks for moc, it is not set to the Qt 5 version.
-    # If FindQt4 has already put the Qt 4 path in the cache, the unset()
-    # command 'unhides' the (correct) cache variable.
-    unset(QT_MOC_EXECUTABLE)
-  endif()
-  if (QT_QMAKE_EXECUTABLE_LAST)
-    string(COMPARE NOTEQUAL "${QT_QMAKE_EXECUTABLE_LAST}" "${QT_QMAKE_EXECUTABLE}" QT_QMAKE_CHANGED)
-  endif()
-  set(QT_QMAKE_EXECUTABLE_LAST "${QT_QMAKE_EXECUTABLE}" CACHE INTERNAL "" FORCE)
-
-  _qt4_get_version_components("${QTVERSION}" QT_VERSION_MAJOR QT_VERSION_MINOR QT_VERSION_PATCH)
-
-  # ask qmake for the mkspecs directory
-  # we do this first because QT_LIBINFIX might be set
-  if (NOT QT_MKSPECS_DIR  OR  QT_QMAKE_CHANGED)
-    _qt4_query_qmake(QMAKE_MKSPECS qt_mkspecs_dirs)
-    # do not replace : on windows as it might be a drive letter
-    # and windows should already use ; as a separator
-    if(NOT WIN32)
-      string(REPLACE ":" ";" qt_mkspecs_dirs "${qt_mkspecs_dirs}")
-    endif()
-
-    find_path(QT_MKSPECS_DIR NAMES qconfig.pri
-      HINTS ${qt_mkspecs_dirs}
-      PATH_SUFFIXES mkspecs share/qt4/mkspecs
-      DOC "The location of the Qt mkspecs containing qconfig.pri")
-  endif()
-
-  if(EXISTS "${QT_MKSPECS_DIR}/qconfig.pri")
-    file(READ ${QT_MKSPECS_DIR}/qconfig.pri _qconfig_FILE_contents)
-    string(REGEX MATCH "QT_CONFIG[^\n]+" QT_QCONFIG "${_qconfig_FILE_contents}")
-    string(REGEX MATCH "CONFIG[^\n]+" QT_CONFIG "${_qconfig_FILE_contents}")
-    string(REGEX MATCH "EDITION[^\n]+" QT_EDITION "${_qconfig_FILE_contents}")
-    string(REGEX MATCH "QT_LIBINFIX[^\n]+" _qconfig_qt_libinfix "${_qconfig_FILE_contents}")
-    string(REGEX REPLACE "QT_LIBINFIX *= *([^\n]*)" "\\1" QT_LIBINFIX "${_qconfig_qt_libinfix}")
-  endif()
-  if("${QT_EDITION}" MATCHES "DesktopLight")
-    set(QT_EDITION_DESKTOPLIGHT 1)
-  endif()
-
-  # ask qmake for the library dir as a hint, then search for QtCore library and use that as a reference for finding the
-  # others and for setting QT_LIBRARY_DIR
-  if (NOT (QT_QTCORE_LIBRARY_RELEASE OR QT_QTCORE_LIBRARY_DEBUG)  OR QT_QMAKE_CHANGED)
-    _qt4_query_qmake(QT_INSTALL_LIBS QT_LIBRARY_DIR_TMP)
-    set(QT_QTCORE_LIBRARY_RELEASE NOTFOUND)
-    set(QT_QTCORE_LIBRARY_DEBUG NOTFOUND)
-    find_library(QT_QTCORE_LIBRARY_RELEASE
-                 NAMES QtCore${QT_LIBINFIX} QtCore${QT_LIBINFIX}4
-                 HINTS ${QT_LIBRARY_DIR_TMP}
-                 NO_DEFAULT_PATH
-        )
-    find_library(QT_QTCORE_LIBRARY_DEBUG
-                 NAMES QtCore${QT_LIBINFIX}_debug QtCore${QT_LIBINFIX}d QtCore${QT_LIBINFIX}d4
-                 HINTS ${QT_LIBRARY_DIR_TMP}
-                 NO_DEFAULT_PATH
-        )
-
-    if(NOT QT_QTCORE_LIBRARY_RELEASE AND NOT QT_QTCORE_LIBRARY_DEBUG)
-      find_library(QT_QTCORE_LIBRARY_RELEASE
-                   NAMES QtCore${QT_LIBINFIX} QtCore${QT_LIBINFIX}4
-                   HINTS ${QT_LIBRARY_DIR_TMP}
-          )
-      find_library(QT_QTCORE_LIBRARY_DEBUG
-                   NAMES QtCore${QT_LIBINFIX}_debug QtCore${QT_LIBINFIX}d QtCore${QT_LIBINFIX}d4
-                   HINTS ${QT_LIBRARY_DIR_TMP}
-          )
-    endif()
-
-    # try dropping a hint if trying to use Visual Studio with Qt built by MinGW
-    if(NOT QT_QTCORE_LIBRARY_RELEASE AND MSVC)
-      if(EXISTS ${QT_LIBRARY_DIR_TMP}/libqtmain.a)
-        message( FATAL_ERROR "It appears you're trying to use Visual Studio with Qt built by MinGW.  Those compilers do not produce code compatible with each other.")
-      endif()
-    endif()
-
-  endif ()
-
-  # set QT_LIBRARY_DIR based on location of QtCore found.
-  if(QT_QTCORE_LIBRARY_RELEASE)
-    get_filename_component(QT_LIBRARY_DIR_TMP "${QT_QTCORE_LIBRARY_RELEASE}" PATH)
-    set(QT_LIBRARY_DIR ${QT_LIBRARY_DIR_TMP} CACHE INTERNAL "Qt library dir" FORCE)
-    set(QT_QTCORE_FOUND 1)
-  elseif(QT_QTCORE_LIBRARY_DEBUG)
-    get_filename_component(QT_LIBRARY_DIR_TMP "${QT_QTCORE_LIBRARY_DEBUG}" PATH)
-    set(QT_LIBRARY_DIR ${QT_LIBRARY_DIR_TMP} CACHE INTERNAL "Qt library dir" FORCE)
-    set(QT_QTCORE_FOUND 1)
-  else()
-    if(NOT Qt4_FIND_QUIETLY)
-      message(WARNING
-        "${QT_QMAKE_EXECUTABLE} reported QT_INSTALL_LIBS as "
-        "\"${QT_LIBRARY_DIR_TMP}\" "
-        "but QtCore could not be found there.  "
-        "Qt is NOT installed correctly for the target build environment.")
-    endif()
-    set(Qt4_FOUND FALSE)
-    if(Qt4_FIND_REQUIRED)
-      message( FATAL_ERROR "Could NOT find QtCore. Check ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log for more details.")
-    else()
-      return()
-    endif()
-  endif()
-
-  # ask qmake for the binary dir
-  if (NOT QT_BINARY_DIR  OR  QT_QMAKE_CHANGED)
-    _qt4_query_qmake(QT_INSTALL_BINS qt_bins)
-    set(QT_BINARY_DIR ${qt_bins} CACHE INTERNAL "" FORCE)
-  endif ()
-
-  if (APPLE)
-    set(CMAKE_FIND_FRAMEWORK_OLD ${CMAKE_FIND_FRAMEWORK})
-    if (EXISTS ${QT_LIBRARY_DIR}/QtCore.framework)
-      set(QT_USE_FRAMEWORKS ON CACHE INTERNAL "" FORCE)
-      set(CMAKE_FIND_FRAMEWORK FIRST)
-    else ()
-      set(QT_USE_FRAMEWORKS OFF CACHE INTERNAL "" FORCE)
-      set(CMAKE_FIND_FRAMEWORK LAST)
-    endif ()
-  endif ()
-
-  # ask qmake for the include dir
-  if (QT_LIBRARY_DIR AND (NOT QT_QTCORE_INCLUDE_DIR OR NOT QT_HEADERS_DIR OR  QT_QMAKE_CHANGED))
-      _qt4_query_qmake(QT_INSTALL_HEADERS qt_headers)
-      set(QT_QTCORE_INCLUDE_DIR NOTFOUND)
-      find_path(QT_QTCORE_INCLUDE_DIR QtCore
-                HINTS ${qt_headers} ${QT_LIBRARY_DIR}
-                PATH_SUFFIXES QtCore qt4/QtCore
-                NO_DEFAULT_PATH
-        )
-      if(NOT QT_QTCORE_INCLUDE_DIR)
-        find_path(QT_QTCORE_INCLUDE_DIR QtCore
-                  HINTS ${qt_headers} ${QT_LIBRARY_DIR}
-                  PATH_SUFFIXES QtCore qt4/QtCore
-          )
-      endif()
-
-      # Set QT_HEADERS_DIR based on finding QtCore header
-      if(QT_QTCORE_INCLUDE_DIR)
-        if(QT_USE_FRAMEWORKS)
-          set(QT_HEADERS_DIR "${qt_headers}" CACHE INTERNAL "" FORCE)
-        else()
-          get_filename_component(qt_headers "${QT_QTCORE_INCLUDE_DIR}/../" ABSOLUTE)
-          set(QT_HEADERS_DIR "${qt_headers}" CACHE INTERNAL "" FORCE)
-        endif()
-      else()
-        message("Warning: QT_QMAKE_EXECUTABLE reported QT_INSTALL_HEADERS as ${qt_headers}")
-        message("Warning: But QtCore couldn't be found.  Qt must NOT be installed correctly.")
-      endif()
-  endif()
-
-  if(APPLE)
-    set(CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK_OLD})
-  endif()
-
-  # Set QT_INCLUDE_DIR based on QT_HEADERS_DIR
-  if(QT_HEADERS_DIR)
-    if(QT_USE_FRAMEWORKS)
-      # Qt/Mac frameworks has two include dirs.
-      # One is the framework include for which CMake will add a -F flag
-      # and the other is an include dir for non-framework Qt modules
-      set(QT_INCLUDE_DIR ${QT_HEADERS_DIR} ${QT_QTCORE_LIBRARY_RELEASE} )
-    else()
-      set(QT_INCLUDE_DIR ${QT_HEADERS_DIR})
-    endif()
-  endif()
-
-  # Set QT_INCLUDES
-  set( QT_INCLUDES ${QT_MKSPECS_DIR}/default ${QT_INCLUDE_DIR} ${QT_QTCORE_INCLUDE_DIR})
-
-
-  # ask qmake for the documentation directory
-  if (QT_LIBRARY_DIR AND NOT QT_DOC_DIR  OR  QT_QMAKE_CHANGED)
-    _qt4_query_qmake(QT_INSTALL_DOCS qt_doc_dir)
-    set(QT_DOC_DIR ${qt_doc_dir} CACHE PATH "The location of the Qt docs" FORCE)
-  endif ()
-
-
-  # ask qmake for the plugins directory
-  if (QT_LIBRARY_DIR AND NOT QT_PLUGINS_DIR  OR  QT_QMAKE_CHANGED)
-    _qt4_query_qmake(QT_INSTALL_PLUGINS qt_plugins_dir)
-    if(CMAKE_CROSSCOMPILING OR NOT qt_plugins_dir)
-      find_path(QT_PLUGINS_DIR
-        NAMES accessible bearer codecs designer graphicssystems iconengines imageformats inputmethods qmltooling script sqldrivers
-        HINTS ${qt_plugins_dir}
-        PATH_SUFFIXES plugins lib/qt4/plugins
-        DOC "The location of the Qt plugins")
-    else()
-      set(QT_PLUGINS_DIR ${qt_plugins_dir} CACHE PATH "The location of the Qt plugins")
-    endif()
-  endif ()
-
-  # ask qmake for the translations directory
-  if (QT_LIBRARY_DIR AND NOT QT_TRANSLATIONS_DIR  OR  QT_QMAKE_CHANGED)
-    _qt4_query_qmake(QT_INSTALL_TRANSLATIONS qt_translations_dir)
-    set(QT_TRANSLATIONS_DIR ${qt_translations_dir} CACHE PATH "The location of the Qt translations" FORCE)
-  endif ()
-
-  # ask qmake for the imports directory
-  if (QT_LIBRARY_DIR AND NOT QT_IMPORTS_DIR OR QT_QMAKE_CHANGED)
-    _qt4_query_qmake(QT_INSTALL_IMPORTS qt_imports_dir)
-    if(CMAKE_CROSSCOMPILING OR NOT qt_imports_dir)
-      find_path(QT_IMPORTS_DIR NAMES Qt
-        HINTS ${qt_imports_dir}
-        PATH_SUFFIXES imports lib/qt4/imports
-        DOC "The location of the Qt imports")
-    else()
-      set(QT_IMPORTS_DIR ${qt_imports_dir} CACHE PATH "The location of the Qt imports")
-    endif()
-  endif ()
-
-  # Make variables changeable to the advanced user
-  mark_as_advanced( QT_LIBRARY_DIR QT_DOC_DIR QT_MKSPECS_DIR
-                    QT_PLUGINS_DIR QT_TRANSLATIONS_DIR)
-
-
-
-
-  #############################################
-  #
-  # Find out what window system we're using
-  #
-  #############################################
-  cmake_push_check_state()
-  # Add QT_INCLUDE_DIR to CMAKE_REQUIRED_INCLUDES
-  list(APPEND CMAKE_REQUIRED_INCLUDES "${QT_INCLUDE_DIR}")
-  set(CMAKE_REQUIRED_QUIET ${Qt4_FIND_QUIETLY})
-  # Check for Window system symbols (note: only one should end up being set)
-  CHECK_CXX_SYMBOL_EXISTS(Q_WS_X11 "QtCore/qglobal.h" Q_WS_X11)
-  CHECK_CXX_SYMBOL_EXISTS(Q_WS_WIN "QtCore/qglobal.h" Q_WS_WIN)
-  CHECK_CXX_SYMBOL_EXISTS(Q_WS_QWS "QtCore/qglobal.h" Q_WS_QWS)
-  CHECK_CXX_SYMBOL_EXISTS(Q_WS_MAC "QtCore/qglobal.h" Q_WS_MAC)
-  if(Q_WS_MAC)
-    if(QT_QMAKE_CHANGED)
-      unset(QT_MAC_USE_COCOA CACHE)
-    endif()
-    CHECK_CXX_SYMBOL_EXISTS(QT_MAC_USE_COCOA "QtCore/qconfig.h" QT_MAC_USE_COCOA)
-  endif()
-
-  if (QT_QTCOPY_REQUIRED)
-     CHECK_CXX_SYMBOL_EXISTS(QT_IS_QTCOPY "QtCore/qglobal.h" QT_KDE_QT_COPY)
-     if (NOT QT_IS_QTCOPY)
-        message(FATAL_ERROR "qt-copy is required, but hasn't been found")
-     endif ()
-  endif ()
-
-  cmake_pop_check_state()
-  #
-  #############################################
-
-
-
-  ########################################
-  #
-  #       Setting the INCLUDE-Variables
-  #
-  ########################################
-
-  set(QT_MODULES QtGui Qt3Support QtSvg QtScript QtTest QtUiTools
-                 QtHelp QtWebKit QtXmlPatterns phonon QtNetwork QtMultimedia
-                 QtNsPlugin QtOpenGL QtSql QtXml QtDesigner QtDBus QtScriptTools
-                 QtDeclarative)
-
-  if(Q_WS_X11)
-    set(QT_MODULES ${QT_MODULES} QtMotif)
-  endif()
-
-  if(QT_QMAKE_CHANGED)
-    foreach(QT_MODULE ${QT_MODULES})
-      string(TOUPPER ${QT_MODULE} _upper_qt_module)
-      set(QT_${_upper_qt_module}_INCLUDE_DIR NOTFOUND)
-      set(QT_${_upper_qt_module}_LIBRARY_RELEASE NOTFOUND)
-      set(QT_${_upper_qt_module}_LIBRARY_DEBUG NOTFOUND)
-    endforeach()
-    set(QT_QTDESIGNERCOMPONENTS_INCLUDE_DIR NOTFOUND)
-    set(QT_QTDESIGNERCOMPONENTS_LIBRARY_RELEASE NOTFOUND)
-    set(QT_QTDESIGNERCOMPONENTS_LIBRARY_DEBUG NOTFOUND)
-    set(QT_QTASSISTANTCLIENT_INCLUDE_DIR NOTFOUND)
-    set(QT_QTASSISTANTCLIENT_LIBRARY_RELEASE NOTFOUND)
-    set(QT_QTASSISTANTCLIENT_LIBRARY_DEBUG NOTFOUND)
-    set(QT_QTASSISTANT_INCLUDE_DIR NOTFOUND)
-    set(QT_QTASSISTANT_LIBRARY_RELEASE NOTFOUND)
-    set(QT_QTASSISTANT_LIBRARY_DEBUG NOTFOUND)
-    set(QT_QTCLUCENE_LIBRARY_RELEASE NOTFOUND)
-    set(QT_QTCLUCENE_LIBRARY_DEBUG NOTFOUND)
-    set(QT_QAXCONTAINER_INCLUDE_DIR NOTFOUND)
-    set(QT_QAXCONTAINER_LIBRARY_RELEASE NOTFOUND)
-    set(QT_QAXCONTAINER_LIBRARY_DEBUG NOTFOUND)
-    set(QT_QAXSERVER_INCLUDE_DIR NOTFOUND)
-    set(QT_QAXSERVER_LIBRARY_RELEASE NOTFOUND)
-    set(QT_QAXSERVER_LIBRARY_DEBUG NOTFOUND)
-    if(Q_WS_WIN)
-      set(QT_QTMAIN_LIBRARY_DEBUG NOTFOUND)
-      set(QT_QTMAIN_LIBRARY_RELEASE NOTFOUND)
-    endif()
-  endif()
-
-  foreach(QT_MODULE ${QT_MODULES})
-    string(TOUPPER ${QT_MODULE} _upper_qt_module)
-    find_path(QT_${_upper_qt_module}_INCLUDE_DIR ${QT_MODULE}
-              PATHS
-              ${QT_HEADERS_DIR}/${QT_MODULE}
-              ${QT_LIBRARY_DIR}/${QT_MODULE}.framework/Headers
-              NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
-      )
-    # phonon doesn't seem consistent, let's try phonondefs.h for some
-    # installations
-    if(${QT_MODULE} STREQUAL "phonon")
-      find_path(QT_${_upper_qt_module}_INCLUDE_DIR phonondefs.h
-                PATHS
-                ${QT_HEADERS_DIR}/${QT_MODULE}
-                ${QT_LIBRARY_DIR}/${QT_MODULE}.framework/Headers
-                NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
-        )
-    endif()
-  endforeach()
-
-  if(Q_WS_WIN)
-    set(QT_MODULES ${QT_MODULES} QAxContainer QAxServer)
-    # Set QT_AXCONTAINER_INCLUDE_DIR and QT_AXSERVER_INCLUDE_DIR
-    find_path(QT_QAXCONTAINER_INCLUDE_DIR ActiveQt
-      PATHS ${QT_HEADERS_DIR}/ActiveQt
-      NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
-      )
-    find_path(QT_QAXSERVER_INCLUDE_DIR ActiveQt
-      PATHS ${QT_HEADERS_DIR}/ActiveQt
-      NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
-      )
-  endif()
-
-  # Set QT_QTDESIGNERCOMPONENTS_INCLUDE_DIR
-  find_path(QT_QTDESIGNERCOMPONENTS_INCLUDE_DIR QDesignerComponents
-    PATHS
-    ${QT_HEADERS_DIR}/QtDesigner
-    ${QT_LIBRARY_DIR}/QtDesigner.framework/Headers
-    NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
-    )
-
-  # Set QT_QTASSISTANT_INCLUDE_DIR
-  find_path(QT_QTASSISTANT_INCLUDE_DIR QtAssistant
-    PATHS
-    ${QT_HEADERS_DIR}/QtAssistant
-    ${QT_LIBRARY_DIR}/QtAssistant.framework/Headers
-    NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
-    )
-
-  # Set QT_QTASSISTANTCLIENT_INCLUDE_DIR
-  find_path(QT_QTASSISTANTCLIENT_INCLUDE_DIR QAssistantClient
-    PATHS
-    ${QT_HEADERS_DIR}/QtAssistant
-    ${QT_LIBRARY_DIR}/QtAssistant.framework/Headers
-    NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
-    )
-
-  ########################################
-  #
-  #       Setting the LIBRARY-Variables
-  #
-  ########################################
-
-  # find the libraries
-  foreach(QT_MODULE ${QT_MODULES})
-    string(TOUPPER ${QT_MODULE} _upper_qt_module)
-    find_library(QT_${_upper_qt_module}_LIBRARY_RELEASE
-                 NAMES ${QT_MODULE}${QT_LIBINFIX} ${QT_MODULE}${QT_LIBINFIX}4
-                 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
-        )
-    find_library(QT_${_upper_qt_module}_LIBRARY_DEBUG
-                 NAMES ${QT_MODULE}${QT_LIBINFIX}_debug ${QT_MODULE}${QT_LIBINFIX}d ${QT_MODULE}${QT_LIBINFIX}d4
-                 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
-        )
-    if(QT_${_upper_qt_module}_LIBRARY_RELEASE MATCHES "/${QT_MODULE}\\.framework$")
-      if(NOT EXISTS "${QT_${_upper_qt_module}_LIBRARY_RELEASE}/${QT_MODULE}")
-        # Release framework library file does not exist... Force to NOTFOUND:
-        set(QT_${_upper_qt_module}_LIBRARY_RELEASE "QT_${_upper_qt_module}_LIBRARY_RELEASE-NOTFOUND" CACHE FILEPATH "Path to a library." FORCE)
-      endif()
-    endif()
-    if(QT_${_upper_qt_module}_LIBRARY_DEBUG MATCHES "/${QT_MODULE}\\.framework$")
-      if(NOT EXISTS "${QT_${_upper_qt_module}_LIBRARY_DEBUG}/${QT_MODULE}")
-        # Debug framework library file does not exist... Force to NOTFOUND:
-        set(QT_${_upper_qt_module}_LIBRARY_DEBUG "QT_${_upper_qt_module}_LIBRARY_DEBUG-NOTFOUND" CACHE FILEPATH "Path to a library." FORCE)
-      endif()
-    endif()
-  endforeach()
-
-  # QtUiTools is sometimes not in the same directory as the other found libraries
-  # e.g. on Mac, its never a framework like the others are
-  if(QT_QTCORE_LIBRARY_RELEASE AND NOT QT_QTUITOOLS_LIBRARY_RELEASE)
-    find_library(QT_QTUITOOLS_LIBRARY_RELEASE NAMES QtUiTools${QT_LIBINFIX} PATHS ${QT_LIBRARY_DIR})
-  endif()
-
-  # Set QT_QTDESIGNERCOMPONENTS_LIBRARY
-  find_library(QT_QTDESIGNERCOMPONENTS_LIBRARY_RELEASE NAMES QtDesignerComponents${QT_LIBINFIX} QtDesignerComponents${QT_LIBINFIX}4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
-  find_library(QT_QTDESIGNERCOMPONENTS_LIBRARY_DEBUG   NAMES QtDesignerComponents${QT_LIBINFIX}_debug QtDesignerComponents${QT_LIBINFIX}d QtDesignerComponents${QT_LIBINFIX}d4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
-
-  # Set QT_QTMAIN_LIBRARY
-  if(Q_WS_WIN)
-    find_library(QT_QTMAIN_LIBRARY_RELEASE NAMES qtmain${QT_LIBINFIX} PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
-    find_library(QT_QTMAIN_LIBRARY_DEBUG NAMES qtmain${QT_LIBINFIX}d PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
-  endif()
-
-  # Set QT_QTASSISTANTCLIENT_LIBRARY
-  find_library(QT_QTASSISTANTCLIENT_LIBRARY_RELEASE NAMES QtAssistantClient${QT_LIBINFIX} QtAssistantClient${QT_LIBINFIX}4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
-  find_library(QT_QTASSISTANTCLIENT_LIBRARY_DEBUG   NAMES QtAssistantClient${QT_LIBINFIX}_debug QtAssistantClient${QT_LIBINFIX}d QtAssistantClient${QT_LIBINFIX}d4 PATHS ${QT_LIBRARY_DIR}  NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
-
-  # Set QT_QTASSISTANT_LIBRARY
-  find_library(QT_QTASSISTANT_LIBRARY_RELEASE NAMES QtAssistantClient${QT_LIBINFIX} QtAssistantClient${QT_LIBINFIX}4 QtAssistant${QT_LIBINFIX} QtAssistant${QT_LIBINFIX}4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
-  find_library(QT_QTASSISTANT_LIBRARY_DEBUG   NAMES QtAssistantClient${QT_LIBINFIX}_debug QtAssistantClient${QT_LIBINFIX}d QtAssistantClient${QT_LIBINFIX}d4 QtAssistant${QT_LIBINFIX}_debug QtAssistant${QT_LIBINFIX}d4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
-
-  # Set QT_QTHELP_LIBRARY
-  find_library(QT_QTCLUCENE_LIBRARY_RELEASE NAMES QtCLucene${QT_LIBINFIX} QtCLucene${QT_LIBINFIX}4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
-  find_library(QT_QTCLUCENE_LIBRARY_DEBUG   NAMES QtCLucene${QT_LIBINFIX}_debug QtCLucene${QT_LIBINFIX}d QtCLucene${QT_LIBINFIX}d4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
-  if(Q_WS_MAC AND QT_QTCORE_LIBRARY_RELEASE AND NOT QT_QTCLUCENE_LIBRARY_RELEASE)
-    find_library(QT_QTCLUCENE_LIBRARY_RELEASE NAMES QtCLucene${QT_LIBINFIX} PATHS ${QT_LIBRARY_DIR})
-  endif()
-
-
-  ############################################
-  #
-  # Check the existence of the libraries.
-  #
-  ############################################
-
-
-  macro(_qt4_add_target_depends_internal _QT_MODULE _PROPERTY)
-    if (TARGET Qt4::${_QT_MODULE})
-      foreach(_DEPEND ${ARGN})
-        set(_VALID_DEPENDS)
-        if (TARGET Qt4::Qt${_DEPEND})
-          list(APPEND _VALID_DEPENDS Qt4::Qt${_DEPEND})
-        endif()
-        if (_VALID_DEPENDS)
-          set_property(TARGET Qt4::${_QT_MODULE} APPEND PROPERTY
-            ${_PROPERTY}
-            "${_VALID_DEPENDS}"
-          )
-        endif()
-        set(_VALID_DEPENDS)
-      endforeach()
-    endif()
-  endmacro()
-
-  macro(_qt4_add_target_depends _QT_MODULE)
-    if (TARGET Qt4::${_QT_MODULE})
-      get_target_property(_configs Qt4::${_QT_MODULE} IMPORTED_CONFIGURATIONS)
-      _qt4_add_target_depends_internal(${_QT_MODULE} INTERFACE_LINK_LIBRARIES ${ARGN})
-      foreach(_config ${_configs})
-        _qt4_add_target_depends_internal(${_QT_MODULE} IMPORTED_LINK_INTERFACE_LIBRARIES_${_config} ${ARGN})
-      endforeach()
-      set(_configs)
-    endif()
-  endmacro()
-
-  macro(_qt4_add_target_private_depends _QT_MODULE)
-    if (TARGET Qt4::${_QT_MODULE})
-      get_target_property(_configs Qt4::${_QT_MODULE} IMPORTED_CONFIGURATIONS)
-      foreach(_config ${_configs})
-        _qt4_add_target_depends_internal(${_QT_MODULE} IMPORTED_LINK_DEPENDENT_LIBRARIES_${_config} ${ARGN})
-      endforeach()
-      set(_configs)
-    endif()
-  endmacro()
-
-
-  # Set QT_xyz_LIBRARY variable and add
-  # library include path to QT_INCLUDES
-  _QT4_ADJUST_LIB_VARS(QtCore)
-  set_property(TARGET Qt4::QtCore APPEND PROPERTY
-    INTERFACE_INCLUDE_DIRECTORIES
-      "${QT_MKSPECS_DIR}/default"
-      ${QT_INCLUDE_DIR}
-  )
-  set_property(TARGET Qt4::QtCore APPEND PROPERTY
-    INTERFACE_COMPILE_DEFINITIONS
-      $<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
-  )
-  set_property(TARGET Qt4::QtCore PROPERTY
-    INTERFACE_QT_MAJOR_VERSION 4
-  )
-  set_property(TARGET Qt4::QtCore APPEND PROPERTY
-    COMPATIBLE_INTERFACE_STRING QT_MAJOR_VERSION
-  )
-
-  foreach(QT_MODULE ${QT_MODULES})
-    _QT4_ADJUST_LIB_VARS(${QT_MODULE})
-    _qt4_add_target_depends(${QT_MODULE} Core)
-  endforeach()
-
-  _QT4_ADJUST_LIB_VARS(QtAssistant)
-  _QT4_ADJUST_LIB_VARS(QtAssistantClient)
-  _QT4_ADJUST_LIB_VARS(QtCLucene)
-  _QT4_ADJUST_LIB_VARS(QtDesignerComponents)
-
-  # platform dependent libraries
-  if(Q_WS_WIN)
-    _QT4_ADJUST_LIB_VARS(qtmain)
-
-    _QT4_ADJUST_LIB_VARS(QAxServer)
-    if(QT_QAXSERVER_FOUND)
-      set_property(TARGET Qt4::QAxServer PROPERTY
-        INTERFACE_QT4_NO_LINK_QTMAIN ON
-      )
-      set_property(TARGET Qt4::QAxServer APPEND PROPERTY
-        COMPATIBLE_INTERFACE_BOOL QT4_NO_LINK_QTMAIN)
-    endif()
-
-    _QT4_ADJUST_LIB_VARS(QAxContainer)
-  endif()
-
-  # Only public dependencies are listed here.
-  # Eg, QtDBus links to QtXml, but users of QtDBus do not need to
-  # link to QtXml because QtDBus only uses it internally, not in public
-  # headers.
-  # Everything depends on QtCore, but that is covered above already
-  _qt4_add_target_depends(Qt3Support Sql Gui Network)
-  if (TARGET Qt4::Qt3Support)
-    # An additional define is required for QT3_SUPPORT
-    set_property(TARGET Qt4::Qt3Support APPEND PROPERTY INTERFACE_COMPILE_DEFINITIONS QT3_SUPPORT)
-  endif()
-  _qt4_add_target_depends(QtDeclarative Script Gui)
-  _qt4_add_target_depends(QtDesigner Gui)
-  _qt4_add_target_depends(QtHelp Gui)
-  _qt4_add_target_depends(QtMultimedia Gui)
-  _qt4_add_target_depends(QtOpenGL Gui)
-  _qt4_add_target_depends(QtSvg Gui)
-  _qt4_add_target_depends(QtWebKit Gui Network)
-
-  _qt4_add_target_private_depends(Qt3Support Xml)
-  if(QT_VERSION VERSION_GREATER 4.6)
-    _qt4_add_target_private_depends(QtSvg Xml)
-  endif()
-  _qt4_add_target_private_depends(QtDBus Xml)
-  _qt4_add_target_private_depends(QtUiTools Xml Gui)
-  _qt4_add_target_private_depends(QtHelp Sql Xml Network)
-  _qt4_add_target_private_depends(QtXmlPatterns Network)
-  _qt4_add_target_private_depends(QtScriptTools Gui)
-  _qt4_add_target_private_depends(QtWebKit XmlPatterns)
-  _qt4_add_target_private_depends(QtDeclarative XmlPatterns Svg Sql Gui)
-  _qt4_add_target_private_depends(QtMultimedia Gui)
-  _qt4_add_target_private_depends(QtOpenGL Gui)
-  if(QT_QAXSERVER_FOUND)
-    _qt4_add_target_private_depends(QAxServer Gui)
-  endif()
-  if(QT_QAXCONTAINER_FOUND)
-    _qt4_add_target_private_depends(QAxContainer Gui)
-  endif()
-  _qt4_add_target_private_depends(phonon Gui)
-  if(QT_QTDBUS_FOUND)
-    _qt4_add_target_private_depends(phonon DBus)
-  endif()
-
-  if (WIN32 AND NOT QT4_NO_LINK_QTMAIN)
-    set(_isExe $<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>)
-    set(_isWin32 $<BOOL:$<TARGET_PROPERTY:WIN32_EXECUTABLE>>)
-    set(_isNotExcluded $<NOT:$<BOOL:$<TARGET_PROPERTY:QT4_NO_LINK_QTMAIN>>>)
-    set(_isPolicyNEW $<TARGET_POLICY:CMP0020>)
-    get_target_property(_configs Qt4::QtCore IMPORTED_CONFIGURATIONS)
-    set_property(TARGET Qt4::QtCore APPEND PROPERTY
-        INTERFACE_LINK_LIBRARIES
-          $<$<AND:${_isExe},${_isWin32},${_isNotExcluded},${_isPolicyNEW}>:Qt4::qtmain>
-    )
-    foreach(_config ${_configs})
-      set_property(TARGET Qt4::QtCore APPEND PROPERTY
-        IMPORTED_LINK_INTERFACE_LIBRARIES_${_config}
-          $<$<AND:${_isExe},${_isWin32},${_isNotExcluded},${_isPolicyNEW}>:Qt4::qtmain>
-      )
-    endforeach()
-    unset(_configs)
-    unset(_isExe)
-    unset(_isWin32)
-    unset(_isNotExcluded)
-    unset(_isPolicyNEW)
-  endif()
-
-  #######################################
-  #
-  #       Check the executables of Qt
-  #          ( moc, uic, rcc )
-  #
-  #######################################
-
-
-  if(QT_QMAKE_CHANGED)
-    set(QT_UIC_EXECUTABLE NOTFOUND)
-    set(QT_MOC_EXECUTABLE NOTFOUND)
-    set(QT_UIC3_EXECUTABLE NOTFOUND)
-    set(QT_RCC_EXECUTABLE NOTFOUND)
-    set(QT_DBUSCPP2XML_EXECUTABLE NOTFOUND)
-    set(QT_DBUSXML2CPP_EXECUTABLE NOTFOUND)
-    set(QT_LUPDATE_EXECUTABLE NOTFOUND)
-    set(QT_LRELEASE_EXECUTABLE NOTFOUND)
-    set(QT_QCOLLECTIONGENERATOR_EXECUTABLE NOTFOUND)
-    set(QT_DESIGNER_EXECUTABLE NOTFOUND)
-    set(QT_LINGUIST_EXECUTABLE NOTFOUND)
-  endif()
-
-  macro(_find_qt4_program VAR NAME)
-    find_program(${VAR}
-      NAMES ${ARGN}
-      PATHS ${QT_BINARY_DIR}
-      NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
-      )
-    if (${VAR} AND NOT TARGET ${NAME})
-      add_executable(${NAME} IMPORTED)
-      set_property(TARGET ${NAME} PROPERTY IMPORTED_LOCATION ${${VAR}})
-    endif()
-  endmacro()
-
-  _find_qt4_program(QT_MOC_EXECUTABLE Qt4::moc moc-qt4 moc4 moc)
-  _find_qt4_program(QT_UIC_EXECUTABLE Qt4::uic uic-qt4 uic4 uic)
-  _find_qt4_program(QT_UIC3_EXECUTABLE Qt4::uic3 uic3)
-  _find_qt4_program(QT_RCC_EXECUTABLE Qt4::rcc rcc)
-  _find_qt4_program(QT_DBUSCPP2XML_EXECUTABLE Qt4::qdbuscpp2xml qdbuscpp2xml)
-  _find_qt4_program(QT_DBUSXML2CPP_EXECUTABLE Qt4::qdbusxml2cpp qdbusxml2cpp)
-  _find_qt4_program(QT_LUPDATE_EXECUTABLE Qt4::lupdate lupdate-qt4 lupdate4 lupdate)
-  _find_qt4_program(QT_LRELEASE_EXECUTABLE Qt4::lrelease lrelease-qt4 lrelease4 lrelease)
-  _find_qt4_program(QT_QCOLLECTIONGENERATOR_EXECUTABLE Qt4::qcollectiongenerator qcollectiongenerator-qt4 qcollectiongenerator)
-  _find_qt4_program(QT_DESIGNER_EXECUTABLE Qt4::designer designer-qt4 designer4 designer)
-  _find_qt4_program(QT_LINGUIST_EXECUTABLE Qt4::linguist linguist-qt4 linguist4 linguist)
-
-  if (NOT TARGET Qt4::qmake)
-    add_executable(Qt4::qmake IMPORTED)
-    set_property(TARGET Qt4::qmake PROPERTY IMPORTED_LOCATION ${QT_QMAKE_EXECUTABLE})
-  endif()
-
-  if (QT_MOC_EXECUTABLE)
-     set(QT_WRAP_CPP "YES")
-  endif ()
-
-  if (QT_UIC_EXECUTABLE)
-     set(QT_WRAP_UI "YES")
-  endif ()
-
-
-
-  mark_as_advanced( QT_UIC_EXECUTABLE QT_UIC3_EXECUTABLE QT_MOC_EXECUTABLE
-    QT_RCC_EXECUTABLE QT_DBUSXML2CPP_EXECUTABLE QT_DBUSCPP2XML_EXECUTABLE
-    QT_LUPDATE_EXECUTABLE QT_LRELEASE_EXECUTABLE QT_QCOLLECTIONGENERATOR_EXECUTABLE
-    QT_DESIGNER_EXECUTABLE QT_LINGUIST_EXECUTABLE)
-
-
-  # get the directory of the current file, used later on in the file
-  get_filename_component( _qt4_current_dir  "${CMAKE_CURRENT_LIST_FILE}" PATH)
-
-
-  ###############################################
-  #
-  #       configuration/system dependent settings
-  #
-  ###############################################
-
-  include("${_qt4_current_dir}/Qt4ConfigDependentSettings.cmake")
-
-
-  #######################################
-  #
-  #       Check the plugins of Qt
-  #
-  #######################################
-
-  set( QT_PLUGIN_TYPES accessible bearer codecs decorations designer gfxdrivers graphicssystems iconengines imageformats inputmethods mousedrivers phonon_backend script sqldrivers )
-
-  set( QT_ACCESSIBLE_PLUGINS qtaccessiblecompatwidgets qtaccessiblewidgets )
-  set( QT_BEARER_PLUGINS qcorewlanbearer qgenericbearer qnativewifibearer )
-  set( QT_CODECS_PLUGINS qcncodecs qjpcodecs qkrcodecs qtwcodecs )
-  set( QT_DECORATIONS_PLUGINS qdecorationdefault qdecorationwindows )
-  set( QT_DESIGNER_PLUGINS arthurplugin containerextension customwidgetplugin phononwidgets qdeclarativeview qt3supportwidgets qwebview taskmenuextension worldtimeclockplugin )
-  set( QT_GRAPHICSDRIVERS_PLUGINS qgfxtransformed qgfxvnc qscreenvfb )
-  set( QT_GRAPHICSSYSTEMS_PLUGINS qglgraphicssystem qtracegraphicssystem )
-  set( QT_ICONENGINES_PLUGINS qsvgicon )
-  set( QT_IMAGEFORMATS_PLUGINS qgif qjpeg qmng qico qsvg qtiff qtga )
-  set( QT_INPUTMETHODS_PLUGINS qimsw_multi )
-  set( QT_MOUSEDRIVERS_PLUGINS qwstslibmousehandler )
-  if(APPLE)
-    set( QT_PHONON_BACKEND_PLUGINS phonon_qt7 )
-  elseif(WIN32)
-    set( QT_PHONON_BACKEND_PLUGINS phonon_ds9 )
-  endif()
-  set( QT_SCRIPT_PLUGINS qtscriptdbus )
-  set( QT_SQLDRIVERS_PLUGINS qsqldb2 qsqlibase qsqlite qsqlite2 qsqlmysql qsqloci qsqlodbc qsqlpsql qsqltds )
-
-  set( QT_PHONON_PLUGINS ${QT_PHONON_BACKEND_PLUGINS} )
-  set( QT_QT3SUPPORT_PLUGINS qtaccessiblecompatwidgets )
-  set( QT_QTCORE_PLUGINS ${QT_BEARER_PLUGINS} ${QT_CODECS_PLUGINS} )
-  set( QT_QTGUI_PLUGINS qtaccessiblewidgets ${QT_IMAGEFORMATS_PLUGINS} ${QT_DECORATIONS_PLUGINS} ${QT_GRAPHICSDRIVERS_PLUGINS} ${QT_GRAPHICSSYSTEMS_PLUGINS} ${QT_INPUTMETHODS_PLUGINS} ${QT_MOUSEDRIVERS_PLUGINS} )
-  set( QT_QTSCRIPT_PLUGINS ${QT_SCRIPT_PLUGINS} )
-  set( QT_QTSQL_PLUGINS ${QT_SQLDRIVERS_PLUGINS} )
-  set( QT_QTSVG_PLUGINS qsvg qsvgicon )
-
-  if(QT_QMAKE_CHANGED)
-    foreach(QT_PLUGIN_TYPE ${QT_PLUGIN_TYPES})
-      string(TOUPPER ${QT_PLUGIN_TYPE} _upper_qt_plugin_type)
-      set(QT_${_upper_qt_plugin_type}_PLUGINS_DIR ${QT_PLUGINS_DIR}/${QT_PLUGIN_TYPE})
-      foreach(QT_PLUGIN ${QT_${_upper_qt_plugin_type}_PLUGINS})
-        string(TOUPPER ${QT_PLUGIN} _upper_qt_plugin)
-        unset(QT_${_upper_qt_plugin}_LIBRARY_RELEASE CACHE)
-        unset(QT_${_upper_qt_plugin}_LIBRARY_DEBUG CACHE)
-        unset(QT_${_upper_qt_plugin}_LIBRARY CACHE)
-        unset(QT_${_upper_qt_plugin}_PLUGIN_RELEASE CACHE)
-        unset(QT_${_upper_qt_plugin}_PLUGIN_DEBUG CACHE)
-        unset(QT_${_upper_qt_plugin}_PLUGIN CACHE)
-      endforeach()
-    endforeach()
-  endif()
-
-  # find_library works better than find_file but we need to set prefixes to only match plugins
-  foreach(QT_PLUGIN_TYPE ${QT_PLUGIN_TYPES})
-    string(TOUPPER ${QT_PLUGIN_TYPE} _upper_qt_plugin_type)
-    set(QT_${_upper_qt_plugin_type}_PLUGINS_DIR ${QT_PLUGINS_DIR}/${QT_PLUGIN_TYPE})
-    foreach(QT_PLUGIN ${QT_${_upper_qt_plugin_type}_PLUGINS})
-      string(TOUPPER ${QT_PLUGIN} _upper_qt_plugin)
-      if(QT_IS_STATIC)
-        find_library(QT_${_upper_qt_plugin}_LIBRARY_RELEASE
-                     NAMES ${QT_PLUGIN}${QT_LIBINFIX} ${QT_PLUGIN}${QT_LIBINFIX}4
-                     PATHS ${QT_${_upper_qt_plugin_type}_PLUGINS_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
-            )
-        find_library(QT_${_upper_qt_plugin}_LIBRARY_DEBUG
-                     NAMES ${QT_PLUGIN}${QT_LIBINFIX}_debug ${QT_PLUGIN}${QT_LIBINFIX}d ${QT_PLUGIN}${QT_LIBINFIX}d4
-                     PATHS ${QT_${_upper_qt_plugin_type}_PLUGINS_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
-            )
-        _QT4_ADJUST_LIB_VARS(${QT_PLUGIN})
-      else()
-        # find_library works easier/better than find_file but we need to set suffixes to only match plugins
-        set(CMAKE_FIND_LIBRARY_SUFFIXES_DEFAULT ${CMAKE_FIND_LIBRARY_SUFFIXES})
-        set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_SHARED_MODULE_SUFFIX} ${CMAKE_SHARED_LIBRARY_SUFFIX})
-        find_library(QT_${_upper_qt_plugin}_PLUGIN_RELEASE
-                     NAMES ${QT_PLUGIN}${QT_LIBINFIX} ${QT_PLUGIN}${QT_LIBINFIX}4
-                     PATHS ${QT_${_upper_qt_plugin_type}_PLUGINS_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
-            )
-        find_library(QT_${_upper_qt_plugin}_PLUGIN_DEBUG
-                     NAMES ${QT_PLUGIN}${QT_LIBINFIX}_debug ${QT_PLUGIN}${QT_LIBINFIX}d ${QT_PLUGIN}${QT_LIBINFIX}d4
-                     PATHS ${QT_${_upper_qt_plugin_type}_PLUGINS_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
-            )
-        mark_as_advanced(QT_${_upper_qt_plugin}_PLUGIN_RELEASE QT_${_upper_qt_plugin}_PLUGIN_DEBUG)
-        set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_DEFAULT})
-      endif()
-    endforeach()
-  endforeach()
-
-
-  ######################################
-  #
-  #       Macros for building Qt files
-  #
-  ######################################
-
-  include("${_qt4_current_dir}/Qt4Macros.cmake")
-
-endif()
-
-#support old QT_MIN_VERSION if set, but not if version is supplied by find_package()
-if(NOT Qt4_FIND_VERSION AND QT_MIN_VERSION)
-  set(Qt4_FIND_VERSION ${QT_MIN_VERSION})
-endif()
-
-if( Qt4_FIND_COMPONENTS )
-
-  # if components specified in find_package(), make sure each of those pieces were found
-  set(_QT4_FOUND_REQUIRED_VARS QT_QMAKE_EXECUTABLE QT_MOC_EXECUTABLE QT_RCC_EXECUTABLE QT_INCLUDE_DIR QT_LIBRARY_DIR)
-  foreach( component ${Qt4_FIND_COMPONENTS} )
-    string( TOUPPER ${component} _COMPONENT )
-    if(${_COMPONENT} STREQUAL "QTMAIN")
-      if(Q_WS_WIN)
-        set(_QT4_FOUND_REQUIRED_VARS ${_QT4_FOUND_REQUIRED_VARS} QT_${_COMPONENT}_LIBRARY)
-      endif()
-    else()
-      set(_QT4_FOUND_REQUIRED_VARS ${_QT4_FOUND_REQUIRED_VARS} QT_${_COMPONENT}_INCLUDE_DIR QT_${_COMPONENT}_LIBRARY)
-    endif()
-  endforeach()
-
-  if(Qt4_FIND_COMPONENTS MATCHES QtGui)
-    set(_QT4_FOUND_REQUIRED_VARS ${_QT4_FOUND_REQUIRED_VARS} QT_UIC_EXECUTABLE)
-  endif()
-
-else()
-
-  # if no components specified, we'll make a default set of required variables to say Qt is found
-  set(_QT4_FOUND_REQUIRED_VARS QT_QMAKE_EXECUTABLE QT_MOC_EXECUTABLE QT_RCC_EXECUTABLE QT_UIC_EXECUTABLE QT_INCLUDE_DIR
-    QT_LIBRARY_DIR QT_QTCORE_LIBRARY)
-
-endif()
-
-if (NOT QT_VERSION_MAJOR EQUAL 4)
-    set(VERSION_MSG "Found unsuitable Qt version \"${QTVERSION}\" from ${QT_QMAKE_EXECUTABLE}")
-    set(Qt4_FOUND FALSE)
-    if(Qt4_FIND_REQUIRED)
-       message( FATAL_ERROR "${VERSION_MSG}, this code requires Qt 4.x")
-    else()
-      if(NOT Qt4_FIND_QUIETLY)
-         message( STATUS    "${VERSION_MSG}")
-      endif()
-    endif()
-else()
-  FIND_PACKAGE_HANDLE_STANDARD_ARGS(Qt4 FOUND_VAR Qt4_FOUND
-    REQUIRED_VARS ${_QT4_FOUND_REQUIRED_VARS}
-    VERSION_VAR QTVERSION
-    )
-endif()
-
-#######################################
-#
-#       compatibility settings
-#
-#######################################
-# Backwards compatibility for CMake1.4 and 1.2
-set (QT_MOC_EXE ${QT_MOC_EXECUTABLE} )
-set (QT_UIC_EXE ${QT_UIC_EXECUTABLE} )
-set( QT_QT_LIBRARY "")
-set(QT4_FOUND ${Qt4_FOUND})
-set(QT_FOUND ${Qt4_FOUND})
-
diff --git a/share/cmake-3.18/Modules/FindRuby.cmake b/share/cmake-3.18/Modules/FindRuby.cmake
deleted file mode 100644
index 1bdee60..0000000
--- a/share/cmake-3.18/Modules/FindRuby.cmake
+++ /dev/null
@@ -1,512 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindRuby
---------
-
-Find Ruby
-
-This module finds if Ruby is installed and determines where the
-include files and libraries are.  Ruby 1.8 through 2.7 are
-supported.
-
-The minimum required version of Ruby can be specified using the
-standard syntax, e.g.
-
-.. code-block:: cmake
-
-  find_package(Ruby 2.5.1 EXACT REQUIRED)
-  # OR
-  find_package(Ruby 2.4)
-
-It also determines what the name of the library is.
-
-Virtual environments such as RVM are handled as well, by passing
-the argument ``Ruby_FIND_VIRTUALENV``
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-This module will set the following variables in your project:
-
-``Ruby_FOUND``
-  set to true if ruby was found successfully
-``Ruby_EXECUTABLE``
-  full path to the ruby binary
-``Ruby_INCLUDE_DIRS``
-  include dirs to be used when using the ruby library
-``Ruby_LIBRARIES``
-  libraries needed to use ruby from C.
-``Ruby_VERSION``
-  the version of ruby which was found, e.g. "1.8.7"
-``Ruby_VERSION_MAJOR``
-  Ruby major version.
-``Ruby_VERSION_MINOR``
-  Ruby minor version.
-``Ruby_VERSION_PATCH``
-  Ruby patch version.
-
-
-Also:
-
-``Ruby_INCLUDE_PATH``
-  same as Ruby_INCLUDE_DIRS, only provided for compatibility reasons, don't use it
-
-Hints
-^^^^^
-
-``Ruby_ROOT_DIR``
-  Define the root directory of a Ruby installation.
-
-``Ruby_FIND_VIRTUALENV``
-  This variable defines the handling of virtual environments managed by
-  ``rvm``. It is meaningful only when a virtual environment
-  is active (i.e. the ``rvm`` script has been evaluated or at least the
-  ``MY_RUBY_HOME`` environment variable is set).
-  The ``Ruby_FIND_VIRTUALENV`` variable can be set to empty or
-  one of the following:
-
-  * ``FIRST``: The virtual environment is used before any other standard
-    paths to look-up for the interpreter. This is the default.
-  * ``ONLY``: Only the virtual environment is used to look-up for the
-    interpreter.
-  * ``STANDARD``: The virtual environment is not used to look-up for the
-    interpreter (assuming it isn't still in the PATH...)
-
-#]=======================================================================]
-
-# Backwards compatibility
-# Define camel case versions of input variables
-foreach(UPPER
-    RUBY_EXECUTABLE
-    RUBY_LIBRARY
-    RUBY_INCLUDE_DIR
-    RUBY_CONFIG_INCLUDE_DIR
-    )
-    if (DEFINED ${UPPER})
-      string(REPLACE "RUBY_" "Ruby_" Camel ${UPPER})
-        if (NOT DEFINED ${Camel})
-            set(${Camel} ${${UPPER}})
-        endif()
-    endif()
-endforeach()
-
-#   Ruby_ARCHDIR=`$RUBY -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"archdir"@:>@)'`
-#   Ruby_SITEARCHDIR=`$RUBY -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"sitearchdir"@:>@)'`
-#   Ruby_SITEDIR=`$RUBY -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"sitelibdir"@:>@)'`
-#   Ruby_LIBDIR=`$RUBY -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"libdir"@:>@)'`
-#   Ruby_LIBRUBYARG=`$RUBY -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"LIBRUBYARG_SHARED"@:>@)'`
-
-# uncomment the following line to get debug output for this file
-# set(_Ruby_DEBUG_OUTPUT TRUE)
-
-# Determine the list of possible names of the ruby executable depending
-# on which version of ruby is required
-set(_Ruby_POSSIBLE_EXECUTABLE_NAMES ruby)
-
-# If not specified, allow everything as far back as 1.8.0
-if(NOT DEFINED Ruby_FIND_VERSION_MAJOR)
-  set(Ruby_FIND_VERSION "1.8.0")
-  set(Ruby_FIND_VERSION_MAJOR 1)
-  set(Ruby_FIND_VERSION_MINOR 8)
-  set(Ruby_FIND_VERSION_PATCH 0)
-endif()
-
-if(_Ruby_DEBUG_OUTPUT)
-  message("Ruby_FIND_VERSION=${Ruby_FIND_VERSION}")
-  message("Ruby_FIND_VERSION_MAJOR=${Ruby_FIND_VERSION_MAJOR}")
-  message("Ruby_FIND_VERSION_MINOR=${Ruby_FIND_VERSION_MINOR}")
-  message("Ruby_FIND_VERSION_PATCH=${Ruby_FIND_VERSION_PATCH}")
-endif()
-
-set(Ruby_FIND_VERSION_SHORT_NODOT "${Ruby_FIND_VERSION_MAJOR}${Ruby_FIND_VERSION_MINOR}")
-
-# Set name of possible executables, ignoring the minor
-# Eg:
-# 2.1.1 => from ruby27 to ruby21 included
-# 2.1   => from ruby27 to ruby21 included
-# 2     => from ruby26 to ruby20 included
-# empty => from ruby27 to ruby18 included
-if(NOT Ruby_FIND_VERSION_EXACT)
-
-  foreach(_ruby_version RANGE 27 18 -1)
-    string(SUBSTRING "${_ruby_version}" 0 1 _ruby_major_version)
-    string(SUBSTRING "${_ruby_version}" 1 1 _ruby_minor_version)
-
-    if(NOT "${_ruby_major_version}${_ruby_minor_version}" VERSION_LESS ${Ruby_FIND_VERSION_SHORT_NODOT})
-      # Append both rubyX.Y and rubyXY (eg: ruby2.7 ruby27)
-      list(APPEND _Ruby_POSSIBLE_EXECUTABLE_NAMES ruby${_ruby_major_version}.${_ruby_minor_version} ruby${_ruby_major_version}${_ruby_minor_version})
-    else()
-      break()
-    endif()
-
-  endforeach()
-
-  list(REMOVE_DUPLICATES _Ruby_POSSIBLE_EXECUTABLE_NAMES)
-endif()
-
-# virtual environments handling (eg RVM)
-if (DEFINED ENV{MY_RUBY_HOME})
-  if(_Ruby_DEBUG_OUTPUT)
-    message("My ruby home is defined: $ENV{MY_RUBY_HOME}")
-  endif()
-
-  if (DEFINED Ruby_FIND_VIRTUALENV)
-    if (NOT Ruby_FIND_VIRTUALENV MATCHES "^(FIRST|ONLY|STANDARD)$")
-      message (AUTHOR_WARNING "FindRuby: ${Ruby_FIND_VIRTUALENV}: invalid value for 'Ruby_FIND_VIRTUALENV'. 'FIRST', 'ONLY' or 'STANDARD' expected. 'FIRST' will be used instead.")
-      set (_Ruby_FIND_VIRTUALENV "FIRST")
-    else()
-      set (_Ruby_FIND_VIRTUALENV ${Ruby_FIND_VIRTUALENV})
-    endif()
-  else()
-    set (_Ruby_FIND_VIRTUALENV FIRST)
-  endif()
-else()
-  if (DEFINED Ruby_FIND_VIRTUALENV)
-    message("Environment variable MY_RUBY_HOME isn't set, defaulting back to Ruby_FIND_VIRTUALENV=STANDARD")
-  endif()
-  set (_Ruby_FIND_VIRTUALENV STANDARD)
-endif()
-
-if(_Ruby_DEBUG_OUTPUT)
-  message("_Ruby_POSSIBLE_EXECUTABLE_NAMES=${_Ruby_POSSIBLE_EXECUTABLE_NAMES}")
-  message("_Ruby_FIND_VIRTUALENV=${_Ruby_FIND_VIRTUALENV}")
-endif()
-
-function (_RUBY_VALIDATE_INTERPRETER)
-  if (NOT Ruby_EXECUTABLE)
-    return()
-  endif()
-
-  cmake_parse_arguments (PARSE_ARGV 0 _RVI "EXACT;CHECK_EXISTS" "" "")
-  if (_RVI_UNPARSED_ARGUMENTS)
-    set (expected_version ${_RVI_UNPARSED_ARGUMENTS})
-  else()
-    unset (expected_version)
-  endif()
-
-  if (_RVI_CHECK_EXISTS AND NOT EXISTS "${Ruby_EXECUTABLE}")
-    # interpreter does not exist anymore
-    set (_Ruby_Interpreter_REASON_FAILURE "Cannot find the interpreter \"${Ruby_EXECUTABLE}\"")
-    set_property (CACHE Ruby_EXECUTABLE PROPERTY VALUE "Ruby_EXECUTABLE-NOTFOUND")
-    return()
-  endif()
-
-  # Check the version it returns
-  # executable found must have a specific version
-  execute_process (COMMAND "${Ruby_EXECUTABLE}" -e "puts RUBY_VERSION"
-                   RESULT_VARIABLE result
-                   OUTPUT_VARIABLE version
-                   ERROR_QUIET
-                   OUTPUT_STRIP_TRAILING_WHITESPACE)
-  if (result OR (_RVI_EXACT AND NOT version VERSION_EQUAL expected_version) OR (version VERSION_LESS expected_version))
-    # interpreter not usable or has wrong major version
-    if (result)
-      set (_Ruby_Interpreter_REASON_FAILURE "Cannot use the interpreter \"${Ruby_EXECUTABLE}\"")
-    else()
-      set (_Ruby_Interpreter_REASON_FAILURE "Wrong major version for the interpreter \"${Ruby_EXECUTABLE}\"")
-    endif()
-    set_property (CACHE Ruby_EXECUTABLE PROPERTY VALUE "Ruby_EXECUTABLE-NOTFOUND")
-    return()
-  endif()
-
-endfunction()
-
-while(1)
-  # Virtual environments handling
-  if(_Ruby_FIND_VIRTUALENV MATCHES "^(FIRST|ONLY)$")
-    if(_Ruby_DEBUG_OUTPUT)
-      message("Inside Matches")
-    endif()
-    find_program (Ruby_EXECUTABLE
-                  NAMES ${_Ruby_POSSIBLE_EXECUTABLE_NAMES}
-                  NAMES_PER_DIR
-                  PATHS ENV MY_RUBY_HOME
-                  PATH_SUFFIXES bin Scripts
-                  NO_CMAKE_PATH
-                  NO_CMAKE_ENVIRONMENT_PATH
-                  NO_SYSTEM_ENVIRONMENT_PATH
-                  NO_CMAKE_SYSTEM_PATH)
-
-    if(_Ruby_DEBUG_OUTPUT)
-      message("Ruby_EXECUTABLE=${Ruby_EXECUTABLE}")
-    endif()
-
-    _RUBY_VALIDATE_INTERPRETER (${Ruby_FIND_VERSION}})
-    if(Ruby_EXECUTABLE)
-      break()
-    endif()
-    if(NOT _Ruby_FIND_VIRTUALENV STREQUAL "ONLY")
-      break()
-    endif()
-  elseif(_Ruby_DEBUG_OUTPUT)
-    message("_Ruby_FIND_VIRTUALENV doesn't match: ${_Ruby_FIND_VIRTUALENV}")
-  endif()
-
-  # try using standard paths
-  find_program (Ruby_EXECUTABLE
-                NAMES ${_Ruby_POSSIBLE_EXECUTABLE_NAMES}
-                NAMES_PER_DIR)
-  _RUBY_VALIDATE_INTERPRETER (${Ruby_FIND_VERSION})
-  if (Ruby_EXECUTABLE)
-    break()
-  endif()
-
-  break()
-endwhile()
-
-if(Ruby_EXECUTABLE AND NOT Ruby_VERSION_MAJOR)
-  function(_RUBY_CONFIG_VAR RBVAR OUTVAR)
-    execute_process(COMMAND ${Ruby_EXECUTABLE} -r rbconfig -e "print RbConfig::CONFIG['${RBVAR}']"
-      RESULT_VARIABLE _Ruby_SUCCESS
-      OUTPUT_VARIABLE _Ruby_OUTPUT
-      ERROR_QUIET)
-    if(_Ruby_SUCCESS OR _Ruby_OUTPUT STREQUAL "")
-      execute_process(COMMAND ${Ruby_EXECUTABLE} -r rbconfig -e "print Config::CONFIG['${RBVAR}']"
-        RESULT_VARIABLE _Ruby_SUCCESS
-        OUTPUT_VARIABLE _Ruby_OUTPUT
-        ERROR_QUIET)
-    endif()
-    set(${OUTVAR} "${_Ruby_OUTPUT}" PARENT_SCOPE)
-  endfunction()
-
-
-  # query the ruby version
-  _RUBY_CONFIG_VAR("MAJOR" Ruby_VERSION_MAJOR)
-  _RUBY_CONFIG_VAR("MINOR" Ruby_VERSION_MINOR)
-  _RUBY_CONFIG_VAR("TEENY" Ruby_VERSION_PATCH)
-
-  # query the different directories
-  _RUBY_CONFIG_VAR("archdir" Ruby_ARCH_DIR)
-  _RUBY_CONFIG_VAR("arch" Ruby_ARCH)
-  _RUBY_CONFIG_VAR("rubyhdrdir" Ruby_HDR_DIR)
-  _RUBY_CONFIG_VAR("rubyarchhdrdir" Ruby_ARCHHDR_DIR)
-  _RUBY_CONFIG_VAR("libdir" Ruby_POSSIBLE_LIB_DIR)
-  _RUBY_CONFIG_VAR("rubylibdir" Ruby_RUBY_LIB_DIR)
-
-  # site_ruby
-  _RUBY_CONFIG_VAR("sitearchdir" Ruby_SITEARCH_DIR)
-  _RUBY_CONFIG_VAR("sitelibdir" Ruby_SITELIB_DIR)
-
-  # vendor_ruby available ?
-  execute_process(COMMAND ${Ruby_EXECUTABLE} -r vendor-specific -e "print 'true'"
-    OUTPUT_VARIABLE Ruby_HAS_VENDOR_RUBY  ERROR_QUIET)
-
-  if(Ruby_HAS_VENDOR_RUBY)
-    _RUBY_CONFIG_VAR("vendorlibdir" Ruby_VENDORLIB_DIR)
-    _RUBY_CONFIG_VAR("vendorarchdir" Ruby_VENDORARCH_DIR)
-  endif()
-
-  # save the results in the cache so we don't have to run ruby the next time again
-  set(Ruby_VERSION_MAJOR    ${Ruby_VERSION_MAJOR}    CACHE PATH "The Ruby major version" FORCE)
-  set(Ruby_VERSION_MINOR    ${Ruby_VERSION_MINOR}    CACHE PATH "The Ruby minor version" FORCE)
-  set(Ruby_VERSION_PATCH    ${Ruby_VERSION_PATCH}    CACHE PATH "The Ruby patch version" FORCE)
-  set(Ruby_ARCH_DIR         ${Ruby_ARCH_DIR}         CACHE PATH "The Ruby arch dir" FORCE)
-  set(Ruby_HDR_DIR          ${Ruby_HDR_DIR}          CACHE PATH "The Ruby header dir (1.9+)" FORCE)
-  set(Ruby_ARCHHDR_DIR      ${Ruby_ARCHHDR_DIR}      CACHE PATH "The Ruby arch header dir (2.0+)" FORCE)
-  set(Ruby_POSSIBLE_LIB_DIR ${Ruby_POSSIBLE_LIB_DIR} CACHE PATH "The Ruby lib dir" FORCE)
-  set(Ruby_RUBY_LIB_DIR     ${Ruby_RUBY_LIB_DIR}     CACHE PATH "The Ruby ruby-lib dir" FORCE)
-  set(Ruby_SITEARCH_DIR     ${Ruby_SITEARCH_DIR}     CACHE PATH "The Ruby site arch dir" FORCE)
-  set(Ruby_SITELIB_DIR      ${Ruby_SITELIB_DIR}      CACHE PATH "The Ruby site lib dir" FORCE)
-  set(Ruby_HAS_VENDOR_RUBY  ${Ruby_HAS_VENDOR_RUBY}  CACHE BOOL "Vendor Ruby is available" FORCE)
-  set(Ruby_VENDORARCH_DIR   ${Ruby_VENDORARCH_DIR}   CACHE PATH "The Ruby vendor arch dir" FORCE)
-  set(Ruby_VENDORLIB_DIR    ${Ruby_VENDORLIB_DIR}    CACHE PATH "The Ruby vendor lib dir" FORCE)
-
-  mark_as_advanced(
-    Ruby_ARCH_DIR
-    Ruby_ARCH
-    Ruby_HDR_DIR
-    Ruby_ARCHHDR_DIR
-    Ruby_POSSIBLE_LIB_DIR
-    Ruby_RUBY_LIB_DIR
-    Ruby_SITEARCH_DIR
-    Ruby_SITELIB_DIR
-    Ruby_HAS_VENDOR_RUBY
-    Ruby_VENDORARCH_DIR
-    Ruby_VENDORLIB_DIR
-    Ruby_VERSION_MAJOR
-    Ruby_VERSION_MINOR
-    Ruby_VERSION_PATCH
-    )
-endif()
-
-# In case Ruby_EXECUTABLE could not be executed (e.g. cross compiling)
-# try to detect which version we found. This is not too good.
-if(Ruby_EXECUTABLE AND NOT Ruby_VERSION_MAJOR)
-  # by default assume 1.8.0
-  set(Ruby_VERSION_MAJOR 1)
-  set(Ruby_VERSION_MINOR 8)
-  set(Ruby_VERSION_PATCH 0)
-  # check whether we found 1.9.x
-  if(${Ruby_EXECUTABLE} MATCHES "ruby1\\.?9")
-    set(Ruby_VERSION_MAJOR 1)
-    set(Ruby_VERSION_MINOR 9)
-  endif()
-  # check whether we found 2.0.x
-  if(${Ruby_EXECUTABLE} MATCHES "ruby2\\.?0")
-    set(Ruby_VERSION_MAJOR 2)
-    set(Ruby_VERSION_MINOR 0)
-  endif()
-  # check whether we found 2.1.x
-  if(${Ruby_EXECUTABLE} MATCHES "ruby2\\.?1")
-    set(Ruby_VERSION_MAJOR 2)
-    set(Ruby_VERSION_MINOR 1)
-  endif()
-  # check whether we found 2.2.x
-  if(${Ruby_EXECUTABLE} MATCHES "ruby2\\.?2")
-    set(Ruby_VERSION_MAJOR 2)
-    set(Ruby_VERSION_MINOR 2)
-  endif()
-  # check whether we found 2.3.x
-  if(${Ruby_EXECUTABLE} MATCHES "ruby2\\.?3")
-    set(Ruby_VERSION_MAJOR 2)
-    set(Ruby_VERSION_MINOR 3)
-  endif()
-  # check whether we found 2.4.x
-  if(${Ruby_EXECUTABLE} MATCHES "ruby2\\.?4")
-    set(Ruby_VERSION_MAJOR 2)
-    set(Ruby_VERSION_MINOR 4)
-  endif()
-  # check whether we found 2.5.x
-  if(${Ruby_EXECUTABLE} MATCHES "ruby2\\.?5")
-    set(Ruby_VERSION_MAJOR 2)
-    set(Ruby_VERSION_MINOR 5)
-  endif()
-  # check whether we found 2.6.x
-  if(${Ruby_EXECUTABLE} MATCHES "ruby2\\.?6")
-    set(Ruby_VERSION_MAJOR 2)
-    set(Ruby_VERSION_MINOR 6)
-  endif()
-  # check whether we found 2.7.x
-  if(${Ruby_EXECUTABLE} MATCHES "ruby2\\.?7")
-    set(Ruby_VERSION_MAJOR 2)
-    set(Ruby_VERSION_MINOR 7)
-  endif()
-endif()
-
-if(Ruby_VERSION_MAJOR)
-  set(Ruby_VERSION "${Ruby_VERSION_MAJOR}.${Ruby_VERSION_MINOR}.${Ruby_VERSION_PATCH}")
-  set(_Ruby_VERSION_SHORT "${Ruby_VERSION_MAJOR}.${Ruby_VERSION_MINOR}")
-  set(_Ruby_VERSION_SHORT_NODOT "${Ruby_VERSION_MAJOR}${Ruby_VERSION_MINOR}")
-  set(_Ruby_NODOT_VERSION "${Ruby_VERSION_MAJOR}${Ruby_VERSION_MINOR}${Ruby_VERSION_PATCH}")
-endif()
-
-# FIXME: Currently we require both the interpreter and development components to be found
-# in order to use either.  See issue #20474.
-find_path(Ruby_INCLUDE_DIR
-  NAMES ruby.h
-  HINTS
-    ${Ruby_HDR_DIR}
-    ${Ruby_ARCH_DIR}
-    /usr/lib/ruby/${_Ruby_VERSION_SHORT}/i586-linux-gnu/
-)
-
-set(Ruby_INCLUDE_DIRS ${Ruby_INCLUDE_DIR})
-
-# if ruby > 1.8 is required or if ruby > 1.8 was found, search for the config.h dir
-if( Ruby_FIND_VERSION VERSION_GREATER_EQUAL "1.9"  OR  Ruby_VERSION VERSION_GREATER_EQUAL "1.9"  OR  Ruby_HDR_DIR)
-  find_path(Ruby_CONFIG_INCLUDE_DIR
-    NAMES ruby/config.h  config.h
-    HINTS
-      ${Ruby_HDR_DIR}/${Ruby_ARCH}
-      ${Ruby_ARCH_DIR}
-      ${Ruby_ARCHHDR_DIR}
-  )
-
-  set(Ruby_INCLUDE_DIRS ${Ruby_INCLUDE_DIRS} ${Ruby_CONFIG_INCLUDE_DIR} )
-endif()
-
-
-# Determine the list of possible names for the ruby library
-set(_Ruby_POSSIBLE_LIB_NAMES ruby ruby-static ruby${_Ruby_VERSION_SHORT} ruby${_Ruby_VERSION_SHORT_NODOT} ruby-${_Ruby_VERSION_SHORT} ruby-${Ruby_VERSION})
-
-if(WIN32)
-  if(MSVC_TOOLSET_VERSION)
-    set(_Ruby_MSVC_RUNTIME "${MSVC_TOOLSET_VERSION}")
-  else()
-    set(_Ruby_MSVC_RUNTIME "")
-  endif()
-
-  set(_Ruby_ARCH_PREFIX "")
-  if(CMAKE_SIZEOF_VOID_P EQUAL 8)
-    set(_Ruby_ARCH_PREFIX "x64-")
-  endif()
-
-  list(APPEND _Ruby_POSSIBLE_LIB_NAMES
-             "${_Ruby_ARCH_PREFIX}msvcr${_Ruby_MSVC_RUNTIME}-ruby${_Ruby_NODOT_VERSION}"
-             "${_Ruby_ARCH_PREFIX}msvcr${_Ruby_MSVC_RUNTIME}-ruby${_Ruby_NODOT_VERSION}-static"
-             "${_Ruby_ARCH_PREFIX}msvcrt-ruby${_Ruby_NODOT_VERSION}"
-             "${_Ruby_ARCH_PREFIX}msvcrt-ruby${_Ruby_NODOT_VERSION}-static" )
-endif()
-
-find_library(Ruby_LIBRARY NAMES ${_Ruby_POSSIBLE_LIB_NAMES} HINTS ${Ruby_POSSIBLE_LIB_DIR} )
-
-set(_Ruby_REQUIRED_VARS Ruby_EXECUTABLE Ruby_INCLUDE_DIR Ruby_LIBRARY)
-if(_Ruby_VERSION_SHORT_NODOT GREATER 18)
-  list(APPEND _Ruby_REQUIRED_VARS Ruby_CONFIG_INCLUDE_DIR)
-endif()
-
-if(_Ruby_DEBUG_OUTPUT)
-  message(STATUS "--------FindRuby.cmake debug------------")
-  message(STATUS "_Ruby_POSSIBLE_EXECUTABLE_NAMES: ${_Ruby_POSSIBLE_EXECUTABLE_NAMES}")
-  message(STATUS "_Ruby_POSSIBLE_LIB_NAMES: ${_Ruby_POSSIBLE_LIB_NAMES}")
-  message(STATUS "Ruby_ARCH_DIR: ${Ruby_ARCH_DIR}")
-  message(STATUS "Ruby_HDR_DIR: ${Ruby_HDR_DIR}")
-  message(STATUS "Ruby_POSSIBLE_LIB_DIR: ${Ruby_POSSIBLE_LIB_DIR}")
-  message(STATUS "Found Ruby_VERSION: \"${Ruby_VERSION}\" , short: \"${_Ruby_VERSION_SHORT}\", nodot: \"${_Ruby_VERSION_SHORT_NODOT}\"")
-  message(STATUS "_Ruby_REQUIRED_VARS: ${_Ruby_REQUIRED_VARS}")
-  message(STATUS "Ruby_EXECUTABLE: ${Ruby_EXECUTABLE}")
-  message(STATUS "Ruby_LIBRARY: ${Ruby_LIBRARY}")
-  message(STATUS "Ruby_INCLUDE_DIR: ${Ruby_INCLUDE_DIR}")
-  message(STATUS "Ruby_CONFIG_INCLUDE_DIR: ${Ruby_CONFIG_INCLUDE_DIR}")
-  message(STATUS "--------------------")
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(Ruby  REQUIRED_VARS  ${_Ruby_REQUIRED_VARS}
-                                        VERSION_VAR Ruby_VERSION )
-
-if(Ruby_FOUND)
-  set(Ruby_LIBRARIES ${Ruby_LIBRARY})
-endif()
-
-mark_as_advanced(
-  Ruby_EXECUTABLE
-  Ruby_LIBRARY
-  Ruby_INCLUDE_DIR
-  Ruby_CONFIG_INCLUDE_DIR
-  )
-
-# Set some variables for compatibility with previous version of this file (no need to provide a CamelCase version of that...)
-set(RUBY_POSSIBLE_LIB_PATH ${Ruby_POSSIBLE_LIB_DIR})
-set(RUBY_RUBY_LIB_PATH ${Ruby_RUBY_LIB_DIR})
-set(RUBY_INCLUDE_PATH ${Ruby_INCLUDE_DIRS})
-
-# Backwards compatibility
-# Define upper case versions of output variables
-foreach(Camel
-    Ruby_EXECUTABLE
-    Ruby_INCLUDE_DIRS
-    Ruby_LIBRARY
-    Ruby_VERSION
-    Ruby_VERSION_MAJOR
-    Ruby_VERSION_MINOR
-    Ruby_VERSION_PATCH
-    Ruby_INCLUDE_PATH
-
-    Ruby_ARCH_DIR
-    Ruby_ARCH
-    Ruby_HDR_DIR
-    Ruby_ARCHHDR_DIR
-    Ruby_POSSIBLE_LIB_DIR
-    Ruby_RUBY_LIB_DIR
-    Ruby_SITEARCH_DIR
-    Ruby_SITELIB_DIR
-    Ruby_HAS_VENDOR_RUBY
-    Ruby_VENDORARCH_DIR
-
-    )
-    string(TOUPPER ${Camel} UPPER)
-    set(${UPPER} ${${Camel}})
-endforeach()
diff --git a/share/cmake-3.18/Modules/FindSDL.cmake b/share/cmake-3.18/Modules/FindSDL.cmake
deleted file mode 100644
index 8d793a9..0000000
--- a/share/cmake-3.18/Modules/FindSDL.cmake
+++ /dev/null
@@ -1,190 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindSDL
--------
-
-Locate SDL library
-
-This module defines
-
-::
-
-  SDL_LIBRARY, the name of the library to link against
-  SDL_FOUND, if false, do not try to link to SDL
-  SDL_INCLUDE_DIR, where to find SDL.h
-  SDL_VERSION_STRING, human-readable string containing the version of SDL
-
-
-
-This module responds to the flag:
-
-::
-
-  SDL_BUILDING_LIBRARY
-    If this is defined, then no SDL_main will be linked in because
-    only applications need main().
-    Otherwise, it is assumed you are building an application and this
-    module will attempt to locate and set the proper link flags
-    as part of the returned SDL_LIBRARY variable.
-
-
-
-Don't forget to include SDLmain.h and SDLmain.m your project for the
-OS X framework based version.  (Other versions link to -lSDLmain which
-this module will try to find on your behalf.) Also for OS X, this
-module will automatically add the -framework Cocoa on your behalf.
-
-
-
-Additional Note: If you see an empty SDL_LIBRARY_TEMP in your
-configuration and no SDL_LIBRARY, it means CMake did not find your SDL
-library (SDL.dll, libsdl.so, SDL.framework, etc).  Set
-SDL_LIBRARY_TEMP to point to your SDL library, and configure again.
-Similarly, if you see an empty SDLMAIN_LIBRARY, you should set this
-value as appropriate.  These values are used to generate the final
-SDL_LIBRARY variable, but when these values are unset, SDL_LIBRARY
-does not get created.
-
-
-
-$SDLDIR is an environment variable that would correspond to the
-./configure --prefix=$SDLDIR used in building SDL.  l.e.galup 9-20-02
-
-Modified by Eric Wing.  Added code to assist with automated building
-by using environmental variables and providing a more
-controlled/consistent search behavior.  Added new modifications to
-recognize OS X frameworks and additional Unix paths (FreeBSD, etc).
-Also corrected the header search path to follow "proper" SDL
-guidelines.  Added a search for SDLmain which is needed by some
-platforms.  Added a search for threads which is needed by some
-platforms.  Added needed compile switches for MinGW.
-
-On OSX, this will prefer the Framework version (if found) over others.
-People will have to manually change the cache values of SDL_LIBRARY to
-override this selection or set the CMake environment
-CMAKE_INCLUDE_PATH to modify the search paths.
-
-Note that the header path has changed from SDL/SDL.h to just SDL.h
-This needed to change because "proper" SDL convention is #include
-"SDL.h", not <SDL/SDL.h>.  This is done for portability reasons
-because not all systems place things in SDL/ (see FreeBSD).
-#]=======================================================================]
-
-find_path(SDL_INCLUDE_DIR SDL.h
-  HINTS
-    ENV SDLDIR
-  PATH_SUFFIXES SDL SDL12 SDL11
-                # path suffixes to search inside ENV{SDLDIR}
-                include/SDL include/SDL12 include/SDL11 include
-)
-
-if(CMAKE_SIZEOF_VOID_P EQUAL 8)
-  set(VC_LIB_PATH_SUFFIX lib/x64)
-else()
-  set(VC_LIB_PATH_SUFFIX lib/x86)
-endif()
-
-# SDL-1.1 is the name used by FreeBSD ports...
-# don't confuse it for the version number.
-find_library(SDL_LIBRARY_TEMP
-  NAMES SDL SDL-1.1
-  HINTS
-    ENV SDLDIR
-  PATH_SUFFIXES lib ${VC_LIB_PATH_SUFFIX}
-)
-
-# Hide this cache variable from the user, it's an internal implementation
-# detail. The documented library variable for the user is SDL_LIBRARY
-# which is derived from SDL_LIBRARY_TEMP further below.
-set_property(CACHE SDL_LIBRARY_TEMP PROPERTY TYPE INTERNAL)
-
-if(NOT SDL_BUILDING_LIBRARY)
-  if(NOT SDL_INCLUDE_DIR MATCHES ".framework")
-    # Non-OS X framework versions expect you to also dynamically link to
-    # SDLmain. This is mainly for Windows and OS X. Other (Unix) platforms
-    # seem to provide SDLmain for compatibility even though they don't
-    # necessarily need it.
-    find_library(SDLMAIN_LIBRARY
-      NAMES SDLmain SDLmain-1.1
-      HINTS
-        ENV SDLDIR
-      PATH_SUFFIXES lib ${VC_LIB_PATH_SUFFIX}
-      PATHS
-      /opt
-    )
-  endif()
-endif()
-
-# SDL may require threads on your system.
-# The Apple build may not need an explicit flag because one of the
-# frameworks may already provide it.
-# But for non-OSX systems, I will use the CMake Threads package.
-if(NOT APPLE)
-  find_package(Threads)
-endif()
-
-# MinGW needs an additional link flag, -mwindows
-# It's total link flags should look like -lmingw32 -lSDLmain -lSDL -mwindows
-if(MINGW)
-  set(MINGW32_LIBRARY mingw32 "-mwindows" CACHE STRING "link flags for MinGW")
-endif()
-
-if(SDL_LIBRARY_TEMP)
-  # For SDLmain
-  if(SDLMAIN_LIBRARY AND NOT SDL_BUILDING_LIBRARY)
-    list(FIND SDL_LIBRARY_TEMP "${SDLMAIN_LIBRARY}" _SDL_MAIN_INDEX)
-    if(_SDL_MAIN_INDEX EQUAL -1)
-      set(SDL_LIBRARY_TEMP "${SDLMAIN_LIBRARY}" ${SDL_LIBRARY_TEMP})
-    endif()
-    unset(_SDL_MAIN_INDEX)
-  endif()
-
-  # For OS X, SDL uses Cocoa as a backend so it must link to Cocoa.
-  # CMake doesn't display the -framework Cocoa string in the UI even
-  # though it actually is there if I modify a pre-used variable.
-  # I think it has something to do with the CACHE STRING.
-  # So I use a temporary variable until the end so I can set the
-  # "real" variable in one-shot.
-  if(APPLE)
-    set(SDL_LIBRARY_TEMP ${SDL_LIBRARY_TEMP} "-framework Cocoa")
-  endif()
-
-  # For threads, as mentioned Apple doesn't need this.
-  # In fact, there seems to be a problem if I used the Threads package
-  # and try using this line, so I'm just skipping it entirely for OS X.
-  if(NOT APPLE)
-    set(SDL_LIBRARY_TEMP ${SDL_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT})
-  endif()
-
-  # For MinGW library
-  if(MINGW)
-    set(SDL_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL_LIBRARY_TEMP})
-  endif()
-
-  # Set the final string here so the GUI reflects the final state.
-  set(SDL_LIBRARY ${SDL_LIBRARY_TEMP} CACHE STRING "Where the SDL Library can be found")
-endif()
-
-if(SDL_INCLUDE_DIR AND EXISTS "${SDL_INCLUDE_DIR}/SDL_version.h")
-  file(STRINGS "${SDL_INCLUDE_DIR}/SDL_version.h" SDL_VERSION_MAJOR_LINE REGEX "^#define[ \t]+SDL_MAJOR_VERSION[ \t]+[0-9]+$")
-  file(STRINGS "${SDL_INCLUDE_DIR}/SDL_version.h" SDL_VERSION_MINOR_LINE REGEX "^#define[ \t]+SDL_MINOR_VERSION[ \t]+[0-9]+$")
-  file(STRINGS "${SDL_INCLUDE_DIR}/SDL_version.h" SDL_VERSION_PATCH_LINE REGEX "^#define[ \t]+SDL_PATCHLEVEL[ \t]+[0-9]+$")
-  string(REGEX REPLACE "^#define[ \t]+SDL_MAJOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL_VERSION_MAJOR "${SDL_VERSION_MAJOR_LINE}")
-  string(REGEX REPLACE "^#define[ \t]+SDL_MINOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL_VERSION_MINOR "${SDL_VERSION_MINOR_LINE}")
-  string(REGEX REPLACE "^#define[ \t]+SDL_PATCHLEVEL[ \t]+([0-9]+)$" "\\1" SDL_VERSION_PATCH "${SDL_VERSION_PATCH_LINE}")
-  set(SDL_VERSION_STRING ${SDL_VERSION_MAJOR}.${SDL_VERSION_MINOR}.${SDL_VERSION_PATCH})
-  unset(SDL_VERSION_MAJOR_LINE)
-  unset(SDL_VERSION_MINOR_LINE)
-  unset(SDL_VERSION_PATCH_LINE)
-  unset(SDL_VERSION_MAJOR)
-  unset(SDL_VERSION_MINOR)
-  unset(SDL_VERSION_PATCH)
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL
-                                  REQUIRED_VARS SDL_LIBRARY SDL_INCLUDE_DIR
-                                  VERSION_VAR SDL_VERSION_STRING)
diff --git a/share/cmake-3.18/Modules/FindSQLite3.cmake b/share/cmake-3.18/Modules/FindSQLite3.cmake
deleted file mode 100644
index 374d7af..0000000
--- a/share/cmake-3.18/Modules/FindSQLite3.cmake
+++ /dev/null
@@ -1,66 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindSQLite3
------------
-
-Find the SQLite libraries, v3
-
-IMPORTED targets
-^^^^^^^^^^^^^^^^
-
-This module defines the following :prop_tgt:`IMPORTED` target:
-
-``SQLite::SQLite3``
-
-Result variables
-^^^^^^^^^^^^^^^^
-
-This module will set the following variables if found:
-
-``SQLite3_INCLUDE_DIRS``
-  where to find sqlite3.h, etc.
-``SQLite3_LIBRARIES``
-  the libraries to link against to use SQLite3.
-``SQLite3_VERSION``
-  version of the SQLite3 library found
-``SQLite3_FOUND``
-  TRUE if found
-
-#]=======================================================================]
-
-# Look for the necessary header
-find_path(SQLite3_INCLUDE_DIR NAMES sqlite3.h)
-mark_as_advanced(SQLite3_INCLUDE_DIR)
-
-# Look for the necessary library
-find_library(SQLite3_LIBRARY NAMES sqlite3 sqlite)
-mark_as_advanced(SQLite3_LIBRARY)
-
-# Extract version information from the header file
-if(SQLite3_INCLUDE_DIR)
-    file(STRINGS ${SQLite3_INCLUDE_DIR}/sqlite3.h _ver_line
-         REGEX "^#define SQLITE_VERSION  *\"[0-9]+\\.[0-9]+\\.[0-9]+\""
-         LIMIT_COUNT 1)
-    string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+"
-           SQLite3_VERSION "${_ver_line}")
-    unset(_ver_line)
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-find_package_handle_standard_args(SQLite3
-    REQUIRED_VARS SQLite3_INCLUDE_DIR SQLite3_LIBRARY
-    VERSION_VAR SQLite3_VERSION)
-
-# Create the imported target
-if(SQLite3_FOUND)
-    set(SQLite3_INCLUDE_DIRS ${SQLite3_INCLUDE_DIR})
-    set(SQLite3_LIBRARIES ${SQLite3_LIBRARY})
-    if(NOT TARGET SQLite::SQLite3)
-        add_library(SQLite::SQLite3 UNKNOWN IMPORTED)
-        set_target_properties(SQLite::SQLite3 PROPERTIES
-            IMPORTED_LOCATION             "${SQLite3_LIBRARY}"
-            INTERFACE_INCLUDE_DIRECTORIES "${SQLite3_INCLUDE_DIR}")
-    endif()
-endif()
diff --git a/share/cmake-3.18/Modules/FindSWIG.cmake b/share/cmake-3.18/Modules/FindSWIG.cmake
deleted file mode 100644
index 2fded49..0000000
--- a/share/cmake-3.18/Modules/FindSWIG.cmake
+++ /dev/null
@@ -1,110 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindSWIG
---------
-
-Find the Simplified Wrapper and Interface Generator (SWIG_) executable.
-
-
-This module finds an installed SWIG and determines its version. If a
-``COMPONENTS`` or ``OPTIONAL_COMPONENTS`` argument is given to ``find_package``,
-it will also determine supported target languages.  The module sents the
-following variables:
-
-``SWIG_FOUND``
-  Whether SWIG and any required components were found on the system.
-``SWIG_EXECUTABLE``
-  Path to the SWIG executable.
-``SWIG_DIR``
-  Path to the installed SWIG ``Lib`` directory (result of ``swig -swiglib``).
-``SWIG_VERSION``
-  SWIG executable version (result of ``swig -version``).
-``SWIG_<lang>_FOUND``
-  If ``COMPONENTS`` or ``OPTIONAL_COMPONENTS`` are requested, each available
-  target language ``<lang>`` (lowercase) will be set to TRUE.
-
-Any ``COMPONENTS`` given to ``find_package`` should be the names of supported
-target languages as provided to the LANGUAGE argument of ``swig_add_library``,
-such as ``python`` or ``perl5``. Language names *must* be lowercase.
-
-All information is collected from the ``SWIG_EXECUTABLE``, so the version
-to be found can be changed from the command line by means of setting
-``SWIG_EXECUTABLE``.
-
-Example usage requiring SWIG 4.0 or higher and Python language support, with
-optional Fortran support:
-
-.. code-block:: cmake
-
-   find_package(SWIG 4.0 COMPONENTS python OPTIONAL_COMPONENTS fortran)
-   if(SWIG_FOUND)
-     message("SWIG found: ${SWIG_EXECUTABLE}")
-     if(NOT SWIG_fortran_FOUND)
-       message(WARNING "SWIG Fortran bindings cannot be generated")
-     endif()
-   endif()
-
-.. _`SWIG`: http://swig.org
-
-#]=======================================================================]
-
-find_program(SWIG_EXECUTABLE NAMES swig4.0 swig3.0 swig2.0 swig)
-
-if(SWIG_EXECUTABLE)
-  execute_process(COMMAND ${SWIG_EXECUTABLE} -swiglib
-    OUTPUT_VARIABLE SWIG_swiglib_output
-    ERROR_VARIABLE SWIG_swiglib_error
-    RESULT_VARIABLE SWIG_swiglib_result)
-
-  if(SWIG_swiglib_result)
-    if(SWIG_FIND_REQUIRED)
-      message(SEND_ERROR "Command \"${SWIG_EXECUTABLE} -swiglib\" failed with output:\n${SWIG_swiglib_error}")
-    else()
-      message(STATUS "Command \"${SWIG_EXECUTABLE} -swiglib\" failed with output:\n${SWIG_swiglib_error}")
-    endif()
-  else()
-    string(REGEX REPLACE "[\n\r]+" ";" SWIG_swiglib_output ${SWIG_swiglib_output})
-    find_path(SWIG_DIR swig.swg PATHS ${SWIG_swiglib_output} NO_CMAKE_FIND_ROOT_PATH)
-    if(SWIG_DIR)
-      set(SWIG_USE_FILE ${CMAKE_CURRENT_LIST_DIR}/UseSWIG.cmake)
-      execute_process(COMMAND ${SWIG_EXECUTABLE} -version
-        OUTPUT_VARIABLE SWIG_version_output
-        ERROR_VARIABLE SWIG_version_output
-        RESULT_VARIABLE SWIG_version_result)
-      if(SWIG_version_result)
-        message(SEND_ERROR "Command \"${SWIG_EXECUTABLE} -version\" failed with output:\n${SWIG_version_output}")
-      else()
-        string(REGEX REPLACE ".*SWIG Version[^0-9.]*\([0-9.]+\).*" "\\1"
-          SWIG_version_output "${SWIG_version_output}")
-        set(SWIG_VERSION ${SWIG_version_output} CACHE STRING "Swig version" FORCE)
-      endif()
-    endif()
-  endif()
-
-  if(SWIG_FIND_COMPONENTS)
-    execute_process(COMMAND ${SWIG_EXECUTABLE} -help
-      OUTPUT_VARIABLE SWIG_swighelp_output
-      ERROR_VARIABLE SWIG_swighelp_error
-      RESULT_VARIABLE SWIG_swighelp_result)
-    if(SWIG_swighelp_result)
-      message(SEND_ERROR "Command \"${SWIG_EXECUTABLE} -help\" failed with output:\n${SWIG_swiglib_error}")
-    else()
-      string(REPLACE "\n" ";" SWIG_swighelp_output "${SWIG_swighelp_output}")
-      foreach(SWIG_line IN LISTS SWIG_swighelp_output)
-        if(SWIG_line MATCHES "-([A-Za-z0-9_]+) +- *Generate.*wrappers")
-          set(SWIG_${CMAKE_MATCH_1}_FOUND TRUE)
-        endif()
-      endforeach()
-    endif()
-  endif()
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-find_package_handle_standard_args(
-  SWIG HANDLE_COMPONENTS
-  REQUIRED_VARS SWIG_EXECUTABLE SWIG_DIR
-  VERSION_VAR SWIG_VERSION)
-
-mark_as_advanced(SWIG_DIR SWIG_VERSION SWIG_EXECUTABLE)
diff --git a/share/cmake-3.18/Modules/FindSelfPackers.cmake b/share/cmake-3.18/Modules/FindSelfPackers.cmake
deleted file mode 100644
index 1abbcbd..0000000
--- a/share/cmake-3.18/Modules/FindSelfPackers.cmake
+++ /dev/null
@@ -1,58 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindSelfPackers
----------------
-
-Find upx
-
-This module looks for some executable packers (i.e.  software that
-compress executables or shared libs into on-the-fly self-extracting
-executables or shared libs.  Examples:
-
-::
-
-  UPX: http://wildsau.idv.uni-linz.ac.at/mfx/upx.html
-#]=======================================================================]
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindCygwin.cmake)
-
-find_program(SELF_PACKER_FOR_EXECUTABLE
-  upx
-  ${CYGWIN_INSTALL_PATH}/bin
-)
-
-find_program(SELF_PACKER_FOR_SHARED_LIB
-  upx
-  ${CYGWIN_INSTALL_PATH}/bin
-)
-
-mark_as_advanced(
-  SELF_PACKER_FOR_EXECUTABLE
-  SELF_PACKER_FOR_SHARED_LIB
-)
-
-#
-# Set flags
-#
-if (SELF_PACKER_FOR_EXECUTABLE MATCHES "upx")
-  set (SELF_PACKER_FOR_EXECUTABLE_FLAGS "-q" CACHE STRING
-       "Flags for the executable self-packer.")
-else ()
-  set (SELF_PACKER_FOR_EXECUTABLE_FLAGS "" CACHE STRING
-       "Flags for the executable self-packer.")
-endif ()
-
-if (SELF_PACKER_FOR_SHARED_LIB MATCHES "upx")
-  set (SELF_PACKER_FOR_SHARED_LIB_FLAGS "-q" CACHE STRING
-       "Flags for the shared lib self-packer.")
-else ()
-  set (SELF_PACKER_FOR_SHARED_LIB_FLAGS "" CACHE STRING
-       "Flags for the shared lib self-packer.")
-endif ()
-
-mark_as_advanced(
-  SELF_PACKER_FOR_EXECUTABLE_FLAGS
-  SELF_PACKER_FOR_SHARED_LIB_FLAGS
-)
diff --git a/share/cmake-3.18/Modules/FindSquish.cmake b/share/cmake-3.18/Modules/FindSquish.cmake
deleted file mode 100644
index 91d1410..0000000
--- a/share/cmake-3.18/Modules/FindSquish.cmake
+++ /dev/null
@@ -1,288 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindSquish
-----------
-
--- Typical Use
-
-
-
-This module can be used to find Squish.
-
-::
-
-  SQUISH_FOUND                    If false, don't try to use Squish
-  SQUISH_VERSION                  The full version of Squish found
-  SQUISH_VERSION_MAJOR            The major version of Squish found
-  SQUISH_VERSION_MINOR            The minor version of Squish found
-  SQUISH_VERSION_PATCH            The patch version of Squish found
-
-
-
-::
-
-  SQUISH_INSTALL_DIR              The Squish installation directory
-                                  (containing bin, lib, etc)
-  SQUISH_SERVER_EXECUTABLE        The squishserver executable
-  SQUISH_CLIENT_EXECUTABLE        The squishrunner executable
-
-
-
-::
-
-  SQUISH_INSTALL_DIR_FOUND        Was the install directory found?
-  SQUISH_SERVER_EXECUTABLE_FOUND  Was the server executable found?
-  SQUISH_CLIENT_EXECUTABLE_FOUND  Was the client executable found?
-
-
-
-It provides the function squish_add_test() for adding a squish test
-to cmake using Squish >= 4.x:
-
-::
-
-   squish_add_test(cmakeTestName
-     AUT targetName SUITE suiteName TEST squishTestName
-     [SETTINGSGROUP group] [PRE_COMMAND command] [POST_COMMAND command] )
-
-
-
-The arguments have the following meaning:
-
-``cmakeTestName``
-  this will be used as the first argument for add_test()
-``AUT targetName``
-  the name of the cmake target which will be used as AUT, i.e. the
-  executable which will be tested.
-``SUITE suiteName``
-  this is either the full path to the squish suite, or just the
-  last directory of the suite, i.e. the suite name. In this case
-  the CMakeLists.txt which calls squish_add_test() must be located
-  in the parent directory of the suite directory.
-``TEST squishTestName``
-  the name of the squish test, i.e. the name of the subdirectory
-  of the test inside the suite directory.
-``SETTINGSGROUP group``
-  deprecated, this argument will be ignored.
-``PRE_COMMAND command``
-  if specified, the given command will be executed before starting the squish test.
-``POST_COMMAND command``
-  same as PRE_COMMAND, but after the squish test has been executed.
-
-
-
-::
-
-   enable_testing()
-   find_package(Squish 6.5)
-   if (SQUISH_FOUND)
-      squish_add_test(myTestName
-        AUT myApp
-        SUITE ${CMAKE_SOURCE_DIR}/tests/mySuite
-        TEST someSquishTest
-        )
-   endif ()
-
-
-
-
-
-For users of Squish version 3.x the macro squish_v3_add_test() is
-provided:
-
-::
-
-   squish_v3_add_test(testName applicationUnderTest testCase envVars testWrapper)
-   Use this macro to add a test using Squish 3.x.
-
-
-
-::
-
-  enable_testing()
-  find_package(Squish 3.0)
-  if (SQUISH_FOUND)
-    squish_v3_add_test(myTestName myApplication testCase envVars testWrapper)
-  endif ()
-
-
-#]=======================================================================]
-
-set(SQUISH_INSTALL_DIR_STRING "Directory containing the bin, doc, and lib directories for Squish; this should be the root of the installation directory.")
-set(SQUISH_SERVER_EXECUTABLE_STRING "The squishserver executable program.")
-set(SQUISH_CLIENT_EXECUTABLE_STRING "The squishclient executable program.")
-
-# Search only if the location is not already known.
-if(NOT SQUISH_INSTALL_DIR)
-  # Get the system search path as a list.
-  file(TO_CMAKE_PATH "$ENV{PATH}" SQUISH_INSTALL_DIR_SEARCH2)
-
-  # Construct a set of paths relative to the system search path.
-  set(SQUISH_INSTALL_DIR_SEARCH "")
-  foreach(dir ${SQUISH_INSTALL_DIR_SEARCH2})
-    set(SQUISH_INSTALL_DIR_SEARCH ${SQUISH_INSTALL_DIR_SEARCH} "${dir}/../lib/fltk")
-  endforeach()
-  string(REPLACE "//" "/" SQUISH_INSTALL_DIR_SEARCH "${SQUISH_INSTALL_DIR_SEARCH}")
-
-  # Look for an installation
-  find_path(SQUISH_INSTALL_DIR
-    NAMES bin/squishrunner bin/squishrunner.exe
-    HINTS
-    # Look for an environment variable SQUISH_INSTALL_DIR.
-      ENV SQUISH_INSTALL_DIR
-
-    # Look in places relative to the system executable search path.
-    ${SQUISH_INSTALL_DIR_SEARCH}
-
-    DOC "The ${SQUISH_INSTALL_DIR_STRING}"
-    )
-endif()
-
-# search for the executables
-if(SQUISH_INSTALL_DIR)
-  set(SQUISH_INSTALL_DIR_FOUND 1)
-
-  # find the client program
-  if(NOT SQUISH_CLIENT_EXECUTABLE)
-    find_program(SQUISH_CLIENT_EXECUTABLE ${SQUISH_INSTALL_DIR}/bin/squishrunner${CMAKE_EXECUTABLE_SUFFIX} DOC "The ${SQUISH_CLIENT_EXECUTABLE_STRING}")
-  endif()
-
-  # find the server program
-  if(NOT SQUISH_SERVER_EXECUTABLE)
-    find_program(SQUISH_SERVER_EXECUTABLE ${SQUISH_INSTALL_DIR}/bin/squishserver${CMAKE_EXECUTABLE_SUFFIX} DOC "The ${SQUISH_SERVER_EXECUTABLE_STRING}")
-  endif()
-
-else()
-  set(SQUISH_INSTALL_DIR_FOUND 0)
-endif()
-
-
-set(SQUISH_VERSION)
-set(SQUISH_VERSION_MAJOR)
-set(SQUISH_VERSION_MINOR)
-set(SQUISH_VERSION_PATCH)
-
-# record if executables are set
-if(SQUISH_CLIENT_EXECUTABLE)
-  set(SQUISH_CLIENT_EXECUTABLE_FOUND 1)
-  execute_process(COMMAND "${SQUISH_CLIENT_EXECUTABLE}" --version
-                  OUTPUT_VARIABLE _squishVersionOutput
-                  ERROR_QUIET )
-  if("${_squishVersionOutput}" MATCHES "([0-9]+)\\.([0-9]+)\\.([0-9]+)")
-    set(SQUISH_VERSION_MAJOR "${CMAKE_MATCH_1}")
-    set(SQUISH_VERSION_MINOR "${CMAKE_MATCH_2}")
-    set(SQUISH_VERSION_PATCH "${CMAKE_MATCH_3}")
-    set(SQUISH_VERSION "${SQUISH_VERSION_MAJOR}.${SQUISH_VERSION_MINOR}.${SQUISH_VERSION_PATCH}" )
-  endif()
-else()
-  set(SQUISH_CLIENT_EXECUTABLE_FOUND 0)
-endif()
-
-if(SQUISH_SERVER_EXECUTABLE)
-  set(SQUISH_SERVER_EXECUTABLE_FOUND 1)
-else()
-  set(SQUISH_SERVER_EXECUTABLE_FOUND 0)
-endif()
-
-# record if Squish was found
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-find_package_handle_standard_args(Squish  REQUIRED_VARS  SQUISH_INSTALL_DIR SQUISH_CLIENT_EXECUTABLE SQUISH_SERVER_EXECUTABLE
-                                          VERSION_VAR  SQUISH_VERSION )
-
-
-set(_SQUISH_MODULE_DIR "${CMAKE_CURRENT_LIST_DIR}")
-
-macro(squish_v3_add_test testName testAUT testCase envVars testWraper)
-  if("${SQUISH_VERSION_MAJOR}" STRGREATER "3")
-    message(STATUS "Using squish_v3_add_test(), but SQUISH_VERSION_MAJOR is ${SQUISH_VERSION_MAJOR}.\nThis may not work.")
-  endif()
-
-  add_test(${testName}
-    ${CMAKE_COMMAND} -V -VV
-    "-Dsquish_version:STRING=3"
-    "-Dsquish_aut:STRING=${testAUT}"
-    "-Dsquish_server_executable:STRING=${SQUISH_SERVER_EXECUTABLE}"
-    "-Dsquish_client_executable:STRING=${SQUISH_CLIENT_EXECUTABLE}"
-    "-Dsquish_libqtdir:STRING=${QT_LIBRARY_DIR}"
-    "-Dsquish_test_case:STRING=${testCase}"
-    "-Dsquish_env_vars:STRING=${envVars}"
-    "-Dsquish_wrapper:STRING=${testWraper}"
-    "-Dsquish_module_dir:STRING=${_SQUISH_MODULE_DIR}"
-    -P "${_SQUISH_MODULE_DIR}/SquishTestScript.cmake"
-    )
-  set_tests_properties(${testName}
-    PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED;ERROR;FATAL"
-    )
-endmacro()
-
-
-function(squish_v4_add_test testName)
-  if(NOT "${SQUISH_VERSION_MAJOR}" STRGREATER "3")
-    message(STATUS "Using squish_add_test(), but SQUISH_VERSION_MAJOR is ${SQUISH_VERSION_MAJOR}.\nThis may not work.")
-  endif()
-
-  set(oneValueArgs AUT SUITE TEST SETTINGSGROUP PRE_COMMAND POST_COMMAND)
-
-  cmake_parse_arguments(_SQUISH "" "${oneValueArgs}" "" ${ARGN} )
-
-  if(_SQUISH_UNPARSED_ARGUMENTS)
-    message(FATAL_ERROR "Unknown keywords given to SQUISH_ADD_TEST(): \"${_SQUISH_UNPARSED_ARGUMENTS}\"")
-  endif()
-
-  if(NOT _SQUISH_AUT)
-    message(FATAL_ERROR "Required argument AUT not given for SQUISH_ADD_TEST()")
-  endif()
-
-  if(NOT _SQUISH_SUITE)
-    message(FATAL_ERROR "Required argument SUITE not given for SQUISH_ADD_TEST()")
-  endif()
-
-  if(NOT _SQUISH_TEST)
-    message(FATAL_ERROR "Required argument TEST not given for SQUISH_ADD_TEST()")
-  endif()
-
-  get_filename_component(absTestSuite "${_SQUISH_SUITE}" ABSOLUTE)
-  if(NOT EXISTS "${absTestSuite}")
-    message(FATAL_ERROR "Could not find squish test suite ${_SQUISH_SUITE} (checked ${absTestSuite})")
-  endif()
-
-  set(absTestCase "${absTestSuite}/${_SQUISH_TEST}")
-  if(NOT EXISTS "${absTestCase}")
-    message(FATAL_ERROR "Could not find squish testcase ${_SQUISH_TEST} (checked ${absTestCase})")
-  endif()
-
-  if(_SQUISH_SETTINGSGROUP)
-    message("SETTINGSGROUP is deprecated and will be ignored.")
-  endif()
-
-  add_test(NAME ${testName}
-    COMMAND ${CMAKE_COMMAND} -V -VV
-    "-Dsquish_version:STRING=4"
-    "-Dsquish_aut:STRING=$<TARGET_FILE_BASE_NAME:${_SQUISH_AUT}>"
-    "-Dsquish_aut_dir:STRING=$<TARGET_FILE_DIR:${_SQUISH_AUT}>"
-    "-Dsquish_server_executable:STRING=${SQUISH_SERVER_EXECUTABLE}"
-    "-Dsquish_client_executable:STRING=${SQUISH_CLIENT_EXECUTABLE}"
-    "-Dsquish_libqtdir:STRING=${QT_LIBRARY_DIR}"
-    "-Dsquish_test_suite:STRING=${absTestSuite}"
-    "-Dsquish_test_case:STRING=${_SQUISH_TEST}"
-    "-Dsquish_env_vars:STRING=${envVars}"
-    "-Dsquish_wrapper:STRING=${testWraper}"
-    "-Dsquish_module_dir:STRING=${_SQUISH_MODULE_DIR}"
-    "-Dsquish_pre_command:STRING=${_SQUISH_PRE_COMMAND}"
-    "-Dsquish_post_command:STRING=${_SQUISH_POST_COMMAND}"
-    -P "${_SQUISH_MODULE_DIR}/SquishTestScript.cmake"
-    )
-  set_tests_properties(${testName}
-    PROPERTIES FAIL_REGULAR_EXPRESSION "FAIL;FAILED;ERROR;FATAL"
-    )
-endfunction()
-
-macro(squish_add_test)
-  if("${SQUISH_VERSION_MAJOR}" STRGREATER "3")
-    squish_v4_add_test(${ARGV})
-  else()
-    squish_v3_add_test(${ARGV})
-  endif()
-endmacro()
diff --git a/share/cmake-3.18/Modules/FindSubversion.cmake b/share/cmake-3.18/Modules/FindSubversion.cmake
deleted file mode 100644
index 07cb770..0000000
--- a/share/cmake-3.18/Modules/FindSubversion.cmake
+++ /dev/null
@@ -1,166 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindSubversion
---------------
-
-Extract information from a subversion working copy
-
-The module defines the following variables:
-
-::
-
-  Subversion_SVN_EXECUTABLE - path to svn command line client
-  Subversion_VERSION_SVN - version of svn command line client
-  Subversion_FOUND - true if the command line client was found
-  SUBVERSION_FOUND - same as Subversion_FOUND, set for compatibility reasons
-
-
-
-The minimum required version of Subversion can be specified using the
-standard syntax, e.g. ``find_package(Subversion 1.4)``.
-
-If the command line client executable is found two macros are defined:
-
-::
-
-  Subversion_WC_INFO(<dir> <var-prefix> [IGNORE_SVN_FAILURE])
-  Subversion_WC_LOG(<dir> <var-prefix>)
-
-``Subversion_WC_INFO`` extracts information of a subversion working copy at a
-given location.  This macro defines the following variables if running
-Subversion's ``info`` command on ``<dir>`` succeeds; otherwise a
-``SEND_ERROR`` message is generated. The error can be ignored by providing the
-``IGNORE_SVN_FAILURE`` option, which causes these variables to remain
-undefined.
-
-::
-
-  <var-prefix>_WC_URL - url of the repository (at <dir>)
-  <var-prefix>_WC_ROOT - root url of the repository
-  <var-prefix>_WC_REVISION - current revision
-  <var-prefix>_WC_LAST_CHANGED_AUTHOR - author of last commit
-  <var-prefix>_WC_LAST_CHANGED_DATE - date of last commit
-  <var-prefix>_WC_LAST_CHANGED_REV - revision of last commit
-  <var-prefix>_WC_INFO - output of command `svn info <dir>'
-
-``Subversion_WC_LOG`` retrieves the log message of the base revision of a
-subversion working copy at a given location.  This macro defines the variable:
-
-::
-
-  <var-prefix>_LAST_CHANGED_LOG - last log of base revision
-
-Example usage:
-
-::
-
-  find_package(Subversion)
-  if(SUBVERSION_FOUND)
-    Subversion_WC_INFO(${PROJECT_SOURCE_DIR} Project)
-    message("Current revision is ${Project_WC_REVISION}")
-    Subversion_WC_LOG(${PROJECT_SOURCE_DIR} Project)
-    message("Last changed log is ${Project_LAST_CHANGED_LOG}")
-  endif()
-#]=======================================================================]
-
-find_program(Subversion_SVN_EXECUTABLE svn
-  PATHS
-    [HKEY_LOCAL_MACHINE\\Software\\TortoiseSVN;Directory]/bin
-  DOC "subversion command line client")
-mark_as_advanced(Subversion_SVN_EXECUTABLE)
-
-if(Subversion_SVN_EXECUTABLE)
-  # the subversion commands should be executed with the C locale, otherwise
-  # the message (which are parsed) may be translated, Alex
-  set(_Subversion_SAVED_LC_ALL "$ENV{LC_ALL}")
-  set(ENV{LC_ALL} C)
-
-  execute_process(COMMAND ${Subversion_SVN_EXECUTABLE} --version
-    OUTPUT_VARIABLE Subversion_VERSION_SVN
-    ERROR_VARIABLE _Subversion_VERSION_STDERR
-    RESULT_VARIABLE _Subversion_VERSION_RESULT
-    OUTPUT_STRIP_TRAILING_WHITESPACE)
-
-  # restore the previous LC_ALL
-  set(ENV{LC_ALL} ${_Subversion_SAVED_LC_ALL})
-
-  if(_Subversion_VERSION_RESULT EQUAL 0)
-    string(REGEX REPLACE "^(.*\n)?svn, version ([.0-9]+).*"
-      "\\2" Subversion_VERSION_SVN "${Subversion_VERSION_SVN}")
-  else()
-    unset(Subversion_VERSION_SVN)
-    if(_Subversion_VERSION_STDERR MATCHES "svn: error: The subversion command line tools are no longer provided by Xcode")
-      set(Subversion_SVN_EXECUTABLE Subversion_SVN_EXECUTABLE-NOTFOUND)
-    endif()
-  endif()
-
-  macro(Subversion_WC_INFO dir prefix)
-
-    cmake_parse_arguments(
-      "Subversion_WC_INFO"
-      "IGNORE_SVN_FAILURE"
-      "" ""
-      ${ARGN}
-    )
-
-    # the subversion commands should be executed with the C locale, otherwise
-    # the message (which are parsed) may be translated, Alex
-    set(_Subversion_SAVED_LC_ALL "$ENV{LC_ALL}")
-    set(ENV{LC_ALL} C)
-
-    execute_process(COMMAND ${Subversion_SVN_EXECUTABLE} info ${dir}
-      OUTPUT_VARIABLE ${prefix}_WC_INFO
-      ERROR_VARIABLE Subversion_svn_info_error
-      RESULT_VARIABLE Subversion_svn_info_result
-      OUTPUT_STRIP_TRAILING_WHITESPACE)
-
-    if(${Subversion_svn_info_result} EQUAL 0)
-      string(REGEX REPLACE "^(.*\n)?URL: ([^\n]+).*"
-        "\\2" ${prefix}_WC_URL "${${prefix}_WC_INFO}")
-      string(REGEX REPLACE "^(.*\n)?Repository Root: ([^\n]+).*"
-        "\\2" ${prefix}_WC_ROOT "${${prefix}_WC_INFO}")
-      string(REGEX REPLACE "^(.*\n)?Revision: ([^\n]+).*"
-        "\\2" ${prefix}_WC_REVISION "${${prefix}_WC_INFO}")
-      string(REGEX REPLACE "^(.*\n)?Last Changed Author: ([^\n]+).*"
-        "\\2" ${prefix}_WC_LAST_CHANGED_AUTHOR "${${prefix}_WC_INFO}")
-      string(REGEX REPLACE "^(.*\n)?Last Changed Rev: ([^\n]+).*"
-        "\\2" ${prefix}_WC_LAST_CHANGED_REV "${${prefix}_WC_INFO}")
-      string(REGEX REPLACE "^(.*\n)?Last Changed Date: ([^\n]+).*"
-        "\\2" ${prefix}_WC_LAST_CHANGED_DATE "${${prefix}_WC_INFO}")
-    elseif(NOT Subversion_WC_INFO_IGNORE_SVN_FAILURE)
-      message(SEND_ERROR "Command \"${Subversion_SVN_EXECUTABLE} info ${dir}\" failed with output:\n${Subversion_svn_info_error}")
-    endif()
-
-    # restore the previous LC_ALL
-    set(ENV{LC_ALL} ${_Subversion_SAVED_LC_ALL})
-
-  endmacro()
-
-  macro(Subversion_WC_LOG dir prefix)
-    # This macro can block if the certificate is not signed:
-    # svn ask you to accept the certificate and wait for your answer
-    # This macro requires a svn server network access (Internet most of the time)
-    # and can also be slow since it access the svn server
-    execute_process(COMMAND
-      ${Subversion_SVN_EXECUTABLE} --non-interactive log -r BASE ${dir}
-      OUTPUT_VARIABLE ${prefix}_LAST_CHANGED_LOG
-      ERROR_VARIABLE Subversion_svn_log_error
-      RESULT_VARIABLE Subversion_svn_log_result
-      OUTPUT_STRIP_TRAILING_WHITESPACE)
-
-    if(NOT ${Subversion_svn_log_result} EQUAL 0)
-      message(SEND_ERROR "Command \"${Subversion_SVN_EXECUTABLE} log -r BASE ${dir}\" failed with output:\n${Subversion_svn_log_error}")
-    endif()
-  endmacro()
-
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(Subversion REQUIRED_VARS Subversion_SVN_EXECUTABLE
-                                             VERSION_VAR Subversion_VERSION_SVN )
-
-# for compatibility
-set(Subversion_FOUND ${SUBVERSION_FOUND})
-set(Subversion_SVN_FOUND ${SUBVERSION_FOUND})
diff --git a/share/cmake-3.18/Modules/FindTCL.cmake b/share/cmake-3.18/Modules/FindTCL.cmake
deleted file mode 100644
index 960265f..0000000
--- a/share/cmake-3.18/Modules/FindTCL.cmake
+++ /dev/null
@@ -1,241 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindTCL
--------
-
-TK_INTERNAL_PATH was removed.
-
-This module finds if Tcl is installed and determines where the include
-files and libraries are.  It also determines what the name of the
-library is.  This code sets the following variables:
-
-::
-
-  TCL_FOUND              = Tcl was found
-  TK_FOUND               = Tk was found
-  TCLTK_FOUND            = Tcl and Tk were found
-  TCL_LIBRARY            = path to Tcl library (tcl tcl80)
-  TCL_INCLUDE_PATH       = path to where tcl.h can be found
-  TCL_TCLSH              = path to tclsh binary (tcl tcl80)
-  TK_LIBRARY             = path to Tk library (tk tk80 etc)
-  TK_INCLUDE_PATH        = path to where tk.h can be found
-  TK_WISH                = full path to the wish executable
-
-
-
-In an effort to remove some clutter and clear up some issues for
-people who are not necessarily Tcl/Tk gurus/developers, some
-variables were moved or removed.  Changes compared to CMake 2.4 are:
-
-::
-
-   => they were only useful for people writing Tcl/Tk extensions.
-   => these libs are not packaged by default with Tcl/Tk distributions.
-      Even when Tcl/Tk is built from source, several flavors of debug libs
-      are created and there is no real reason to pick a single one
-      specifically (say, amongst tcl84g, tcl84gs, or tcl84sgx).
-      Let's leave that choice to the user by allowing him to assign
-      TCL_LIBRARY to any Tcl library, debug or not.
-   => this ended up being only a Win32 variable, and there is a lot of
-      confusion regarding the location of this file in an installed Tcl/Tk
-      tree anyway (see 8.5 for example). If you need the internal path at
-      this point it is safer you ask directly where the *source* tree is
-      and dig from there.
-#]=======================================================================]
-
-include(${CMAKE_CURRENT_LIST_DIR}/CMakeFindFrameworks.cmake)
-include(${CMAKE_CURRENT_LIST_DIR}/FindTclsh.cmake)
-include(${CMAKE_CURRENT_LIST_DIR}/FindWish.cmake)
-
-if(TCLSH_VERSION_STRING)
-  set(TCL_TCLSH_VERSION "${TCLSH_VERSION_STRING}")
-else()
-  get_filename_component(TCL_TCLSH_PATH "${TCL_TCLSH}" PATH)
-  get_filename_component(TCL_TCLSH_PATH_PARENT "${TCL_TCLSH_PATH}" PATH)
-  string(REGEX REPLACE
-    "^.*tclsh([0-9]\\.*[0-9]).*$" "\\1" TCL_TCLSH_VERSION "${TCL_TCLSH}")
-endif()
-
-get_filename_component(TK_WISH_PATH "${TK_WISH}" PATH)
-get_filename_component(TK_WISH_PATH_PARENT "${TK_WISH_PATH}" PATH)
-string(REGEX REPLACE
-  "^.*wish([0-9]\\.*[0-9]).*$" "\\1" TK_WISH_VERSION "${TK_WISH}")
-
-get_filename_component(TCL_INCLUDE_PATH_PARENT "${TCL_INCLUDE_PATH}" PATH)
-get_filename_component(TK_INCLUDE_PATH_PARENT "${TK_INCLUDE_PATH}" PATH)
-
-get_filename_component(TCL_LIBRARY_PATH "${TCL_LIBRARY}" PATH)
-get_filename_component(TCL_LIBRARY_PATH_PARENT "${TCL_LIBRARY_PATH}" PATH)
-string(REGEX REPLACE
-  "^.*tcl([0-9]\\.*[0-9]).*$" "\\1" TCL_LIBRARY_VERSION "${TCL_LIBRARY}")
-
-get_filename_component(TK_LIBRARY_PATH "${TK_LIBRARY}" PATH)
-get_filename_component(TK_LIBRARY_PATH_PARENT "${TK_LIBRARY_PATH}" PATH)
-string(REGEX REPLACE
-  "^.*tk([0-9]\\.*[0-9]).*$" "\\1" TK_LIBRARY_VERSION "${TK_LIBRARY}")
-
-set(TCLTK_POSSIBLE_LIB_PATHS
-  "${TCL_INCLUDE_PATH_PARENT}/lib"
-  "${TK_INCLUDE_PATH_PARENT}/lib"
-  "${TCL_LIBRARY_PATH}"
-  "${TK_LIBRARY_PATH}"
-  "${TCL_TCLSH_PATH_PARENT}/lib"
-  "${TK_WISH_PATH_PARENT}/lib"
-)
-
-set(TCLTK_POSSIBLE_LIB_PATH_SUFFIXES
-  lib/tcl/tcl8.7
-  lib/tcl/tk8.7
-  lib/tcl/tcl8.6
-  lib/tcl/tk8.6
-  lib/tcl/tcl8.5
-  lib/tcl/tk8.5
-  lib/tcl/tcl8.4
-  lib/tcl/tk8.4
-)
-
-if(WIN32)
-  get_filename_component(
-    ActiveTcl_CurrentVersion
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl;CurrentVersion]"
-    NAME)
-  set(TCLTK_POSSIBLE_LIB_PATHS ${TCLTK_POSSIBLE_LIB_PATHS}
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl\\${ActiveTcl_CurrentVersion}]/lib"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.6;Root]/lib"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.5;Root]/lib"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.4;Root]/lib"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.3;Root]/lib"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.2;Root]/lib"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.0;Root]/lib"
-    "$ENV{ProgramFiles}/Tcl/Lib"
-    "C:/Program Files/Tcl/lib"
-    "C:/Tcl/lib"
-    )
-endif()
-
-find_library(TCL_LIBRARY
-  NAMES
-  tcl
-  tcl${TCL_LIBRARY_VERSION} tcl${TCL_TCLSH_VERSION} tcl${TK_WISH_VERSION}
-  tcl87 tcl8.7 tcl87t tcl8.7t
-  tcl86 tcl8.6 tcl86t tcl8.6t
-  tcl85 tcl8.5
-  tcl84 tcl8.4
-  tcl83 tcl8.3
-  tcl82 tcl8.2
-  tcl80 tcl8.0
-  PATHS ${TCLTK_POSSIBLE_LIB_PATHS}
-  PATH_SUFFIXES ${TCLTK_POSSIBLE_LIB_PATH_SUFFIXES}
-  )
-
-find_library(TK_LIBRARY
-  NAMES
-  tk
-  tk${TK_LIBRARY_VERSION} tk${TCL_TCLSH_VERSION} tk${TK_WISH_VERSION}
-  tk87 tk8.7 tk87t tk8.7t
-  tk86 tk8.6 tk86t tk8.6t
-  tk85 tk8.5
-  tk84 tk8.4
-  tk83 tk8.3
-  tk82 tk8.2
-  tk80 tk8.0
-  PATHS ${TCLTK_POSSIBLE_LIB_PATHS}
-  PATH_SUFFIXES ${TCLTK_POSSIBLE_LIB_PATH_SUFFIXES}
-  )
-
-CMAKE_FIND_FRAMEWORKS(Tcl)
-CMAKE_FIND_FRAMEWORKS(Tk)
-
-set(TCL_FRAMEWORK_INCLUDES)
-if(Tcl_FRAMEWORKS)
-  if(NOT TCL_INCLUDE_PATH)
-    foreach(dir ${Tcl_FRAMEWORKS})
-      set(TCL_FRAMEWORK_INCLUDES ${TCL_FRAMEWORK_INCLUDES} ${dir}/Headers)
-    endforeach()
-  endif()
-endif()
-
-set(TK_FRAMEWORK_INCLUDES)
-if(Tk_FRAMEWORKS)
-  if(NOT TK_INCLUDE_PATH)
-    foreach(dir ${Tk_FRAMEWORKS})
-      set(TK_FRAMEWORK_INCLUDES ${TK_FRAMEWORK_INCLUDES}
-        ${dir}/Headers ${dir}/PrivateHeaders)
-    endforeach()
-  endif()
-endif()
-
-set(TCLTK_POSSIBLE_INCLUDE_PATHS
-  "${TCL_LIBRARY_PATH_PARENT}/include"
-  "${TK_LIBRARY_PATH_PARENT}/include"
-  "${TCL_INCLUDE_PATH}"
-  "${TK_INCLUDE_PATH}"
-  ${TCL_FRAMEWORK_INCLUDES}
-  ${TK_FRAMEWORK_INCLUDES}
-  "${TCL_TCLSH_PATH_PARENT}/include"
-  "${TK_WISH_PATH_PARENT}/include"
-  )
-
-set(TCLTK_POSSIBLE_INCLUDE_PATH_SUFFIXES
-  include/tcl${TK_LIBRARY_VERSION}
-  include/tcl${TCL_LIBRARY_VERSION}
-  include/tcl8.7
-  include/tk8.7
-  include/tcl8.6
-  include/tk8.6
-  include/tcl8.5
-  include/tk8.5
-  include/tcl8.4
-  include/tk8.4
-  include/tcl8.3
-  include/tcl8.2
-  include/tcl8.0
-  )
-
-if(WIN32)
-  set(TCLTK_POSSIBLE_INCLUDE_PATHS ${TCLTK_POSSIBLE_INCLUDE_PATHS}
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl\\${ActiveTcl_CurrentVersion}]/include"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.6;Root]/include"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.5;Root]/include"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.4;Root]/include"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.3;Root]/include"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.2;Root]/include"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.0;Root]/include"
-    "$ENV{ProgramFiles}/Tcl/include"
-    "C:/Program Files/Tcl/include"
-    "C:/Tcl/include"
-    )
-endif()
-
-find_path(TCL_INCLUDE_PATH
-  NAMES tcl.h
-  HINTS ${TCLTK_POSSIBLE_INCLUDE_PATHS}
-  PATH_SUFFIXES ${TCLTK_POSSIBLE_INCLUDE_PATH_SUFFIXES}
-  )
-
-find_path(TK_INCLUDE_PATH
-  NAMES tk.h
-  HINTS ${TCLTK_POSSIBLE_INCLUDE_PATHS}
-  PATH_SUFFIXES ${TCLTK_POSSIBLE_INCLUDE_PATH_SUFFIXES}
-  )
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(TCL DEFAULT_MSG TCL_LIBRARY TCL_INCLUDE_PATH)
-set(FPHSA_NAME_MISMATCHED 1)
-set(TCLTK_FIND_REQUIRED ${TCL_FIND_REQUIRED})
-set(TCLTK_FIND_QUIETLY  ${TCL_FIND_QUIETLY})
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(TCLTK DEFAULT_MSG TCL_LIBRARY TCL_INCLUDE_PATH TK_LIBRARY TK_INCLUDE_PATH)
-set(TK_FIND_REQUIRED ${TCL_FIND_REQUIRED})
-set(TK_FIND_QUIETLY  ${TCL_FIND_QUIETLY})
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(TK DEFAULT_MSG TK_LIBRARY TK_INCLUDE_PATH)
-unset(FPHSA_NAME_MISMATCHED)
-
-mark_as_advanced(
-  TCL_INCLUDE_PATH
-  TK_INCLUDE_PATH
-  TCL_LIBRARY
-  TK_LIBRARY
-  )
diff --git a/share/cmake-3.18/Modules/FindTIFF.cmake b/share/cmake-3.18/Modules/FindTIFF.cmake
deleted file mode 100644
index 00a3a41..0000000
--- a/share/cmake-3.18/Modules/FindTIFF.cmake
+++ /dev/null
@@ -1,106 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindTIFF
---------
-
-Find the TIFF library (``libtiff``).
-
-Imported targets
-^^^^^^^^^^^^^^^^
-
-This module defines the following :prop_tgt:`IMPORTED` targets:
-
-``TIFF::TIFF``
-  The TIFF library, if found.
-
-Result variables
-^^^^^^^^^^^^^^^^
-
-This module will set the following variables in your project:
-
-``TIFF_FOUND``
-  true if the TIFF headers and libraries were found
-``TIFF_INCLUDE_DIR``
-  the directory containing the TIFF headers
-``TIFF_INCLUDE_DIRS``
-  the directory containing the TIFF headers
-``TIFF_LIBRARIES``
-  TIFF libraries to be linked
-
-Cache variables
-^^^^^^^^^^^^^^^
-
-The following cache variables may also be set:
-
-``TIFF_INCLUDE_DIR``
-  the directory containing the TIFF headers
-``TIFF_LIBRARY``
-  the path to the TIFF library
-#]=======================================================================]
-
-find_path(TIFF_INCLUDE_DIR tiff.h)
-
-set(TIFF_NAMES ${TIFF_NAMES} tiff libtiff tiff3 libtiff3)
-foreach(name ${TIFF_NAMES})
-  list(APPEND TIFF_NAMES_DEBUG "${name}d")
-endforeach()
-
-if(NOT TIFF_LIBRARY)
-  find_library(TIFF_LIBRARY_RELEASE NAMES ${TIFF_NAMES})
-  find_library(TIFF_LIBRARY_DEBUG NAMES ${TIFF_NAMES_DEBUG})
-  include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
-  select_library_configurations(TIFF)
-  mark_as_advanced(TIFF_LIBRARY_RELEASE TIFF_LIBRARY_DEBUG)
-endif()
-unset(TIFF_NAMES)
-unset(TIFF_NAMES_DEBUG)
-
-if(TIFF_INCLUDE_DIR AND EXISTS "${TIFF_INCLUDE_DIR}/tiffvers.h")
-    file(STRINGS "${TIFF_INCLUDE_DIR}/tiffvers.h" tiff_version_str
-         REGEX "^#define[\t ]+TIFFLIB_VERSION_STR[\t ]+\"LIBTIFF, Version .*")
-
-    string(REGEX REPLACE "^#define[\t ]+TIFFLIB_VERSION_STR[\t ]+\"LIBTIFF, Version +([^ \\n]*).*"
-           "\\1" TIFF_VERSION_STRING "${tiff_version_str}")
-    unset(tiff_version_str)
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(TIFF
-                                  REQUIRED_VARS TIFF_LIBRARY TIFF_INCLUDE_DIR
-                                  VERSION_VAR TIFF_VERSION_STRING)
-
-if(TIFF_FOUND)
-  set(TIFF_LIBRARIES ${TIFF_LIBRARY})
-  set(TIFF_INCLUDE_DIRS "${TIFF_INCLUDE_DIR}")
-
-  if(NOT TARGET TIFF::TIFF)
-    add_library(TIFF::TIFF UNKNOWN IMPORTED)
-    if(TIFF_INCLUDE_DIRS)
-      set_target_properties(TIFF::TIFF PROPERTIES
-        INTERFACE_INCLUDE_DIRECTORIES "${TIFF_INCLUDE_DIRS}")
-    endif()
-    if(EXISTS "${TIFF_LIBRARY}")
-      set_target_properties(TIFF::TIFF PROPERTIES
-        IMPORTED_LINK_INTERFACE_LANGUAGES "C"
-        IMPORTED_LOCATION "${TIFF_LIBRARY}")
-    endif()
-    if(EXISTS "${TIFF_LIBRARY_RELEASE}")
-      set_property(TARGET TIFF::TIFF APPEND PROPERTY
-        IMPORTED_CONFIGURATIONS RELEASE)
-      set_target_properties(TIFF::TIFF PROPERTIES
-        IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
-        IMPORTED_LOCATION_RELEASE "${TIFF_LIBRARY_RELEASE}")
-    endif()
-    if(EXISTS "${TIFF_LIBRARY_DEBUG}")
-      set_property(TARGET TIFF::TIFF APPEND PROPERTY
-        IMPORTED_CONFIGURATIONS DEBUG)
-      set_target_properties(TIFF::TIFF PROPERTIES
-        IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
-        IMPORTED_LOCATION_DEBUG "${TIFF_LIBRARY_DEBUG}")
-    endif()
-  endif()
-endif()
-
-mark_as_advanced(TIFF_INCLUDE_DIR TIFF_LIBRARY)
diff --git a/share/cmake-3.18/Modules/FindTclsh.cmake b/share/cmake-3.18/Modules/FindTclsh.cmake
deleted file mode 100644
index 82be473..0000000
--- a/share/cmake-3.18/Modules/FindTclsh.cmake
+++ /dev/null
@@ -1,99 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindTclsh
----------
-
-Find tclsh
-
-This module finds if TCL is installed and determines where the include
-files and libraries are.  It also determines what the name of the
-library is.  This code sets the following variables:
-
-::
-
-  TCLSH_FOUND = TRUE if tclsh has been found
-  TCL_TCLSH = the path to the tclsh executable
-
-In cygwin, look for the cygwin version first.  Don't look for it later
-to avoid finding the cygwin version on a Win32 build.
-#]=======================================================================]
-
-if(CYGWIN)
-  find_program(TCL_TCLSH NAMES cygtclsh83 cygtclsh80)
-endif()
-
-get_filename_component(TK_WISH_PATH "${TK_WISH}" PATH)
-get_filename_component(TK_WISH_PATH_PARENT "${TK_WISH_PATH}" PATH)
-string(REGEX REPLACE
-  "^.*wish([0-9]\\.*[0-9]).*$" "\\1" TK_WISH_VERSION "${TK_WISH}")
-
-get_filename_component(TCL_INCLUDE_PATH_PARENT "${TCL_INCLUDE_PATH}" PATH)
-get_filename_component(TK_INCLUDE_PATH_PARENT "${TK_INCLUDE_PATH}" PATH)
-
-get_filename_component(TCL_LIBRARY_PATH "${TCL_LIBRARY}" PATH)
-get_filename_component(TCL_LIBRARY_PATH_PARENT "${TCL_LIBRARY_PATH}" PATH)
-string(REGEX REPLACE
-  "^.*tcl([0-9]\\.*[0-9]).*$" "\\1" TCL_LIBRARY_VERSION "${TCL_LIBRARY}")
-
-get_filename_component(TK_LIBRARY_PATH "${TK_LIBRARY}" PATH)
-get_filename_component(TK_LIBRARY_PATH_PARENT "${TK_LIBRARY_PATH}" PATH)
-string(REGEX REPLACE
-  "^.*tk([0-9]\\.*[0-9]).*$" "\\1" TK_LIBRARY_VERSION "${TK_LIBRARY}")
-
-set(TCLTK_POSSIBLE_BIN_PATHS
-  "${TCL_INCLUDE_PATH_PARENT}/bin"
-  "${TK_INCLUDE_PATH_PARENT}/bin"
-  "${TCL_LIBRARY_PATH_PARENT}/bin"
-  "${TK_LIBRARY_PATH_PARENT}/bin"
-  "${TK_WISH_PATH_PARENT}/bin"
-  )
-
-if(WIN32)
-  get_filename_component(
-    ActiveTcl_CurrentVersion
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl;CurrentVersion]"
-    NAME)
-  set(TCLTK_POSSIBLE_BIN_PATHS ${TCLTK_POSSIBLE_BIN_PATHS}
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl\\${ActiveTcl_CurrentVersion}]/bin"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.6;Root]/bin"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.5;Root]/bin"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.4;Root]/bin"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.3;Root]/bin"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.2;Root]/bin"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.0;Root]/bin"
-    )
-endif()
-
-set(TCL_TCLSH_NAMES
-  tclsh
-  tclsh${TCL_LIBRARY_VERSION} tclsh${TK_LIBRARY_VERSION} tclsh${TK_WISH_VERSION}
-  tclsh87 tclsh8.7
-  tclsh86 tclsh8.6
-  tclsh85 tclsh8.5
-  tclsh84 tclsh8.4
-  tclsh83 tclsh8.3
-  tclsh82 tclsh8.2
-  tclsh80 tclsh8.0
-  )
-
-find_program(TCL_TCLSH
-  NAMES ${TCL_TCLSH_NAMES}
-  HINTS ${TCLTK_POSSIBLE_BIN_PATHS}
-  )
-
-if(TCL_TCLSH)
-  execute_process(COMMAND "${CMAKE_COMMAND}" -E echo puts "\$tcl_version"
-                  COMMAND "${TCL_TCLSH}"
-                  OUTPUT_VARIABLE TCLSH_VERSION_STRING
-                  ERROR_QUIET
-                  OUTPUT_STRIP_TRAILING_WHITESPACE)
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(Tclsh
-                                  REQUIRED_VARS TCL_TCLSH
-                                  VERSION_VAR TCLSH_VERSION_STRING)
-
-mark_as_advanced(TCL_TCLSH)
diff --git a/share/cmake-3.18/Modules/FindThreads.cmake b/share/cmake-3.18/Modules/FindThreads.cmake
deleted file mode 100644
index ee49867..0000000
--- a/share/cmake-3.18/Modules/FindThreads.cmake
+++ /dev/null
@@ -1,248 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindThreads
------------
-
-This module determines the thread library of the system.
-
-Imported Targets
-^^^^^^^^^^^^^^^^
-
-This module defines the following :prop_tgt:`IMPORTED` target:
-
-``Threads::Threads``
-  The thread library, if found.
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-The following variables are set:
-
-``Threads_FOUND``
-  If a supported thread library was found.
-``CMAKE_THREAD_LIBS_INIT``
-  The thread library to use. This may be empty if the thread functions
-  are provided by the system libraries and no special flags are needed
-  to use them.
-``CMAKE_USE_WIN32_THREADS_INIT``
-  If the found thread library is the win32 one.
-``CMAKE_USE_PTHREADS_INIT``
-  If the found thread library is pthread compatible.
-``CMAKE_HP_PTHREADS_INIT``
-  If the found thread library is the HP thread library.
-
-Variables Affecting Behavior
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. variable:: THREADS_PREFER_PTHREAD_FLAG
-
-  If the use of the -pthread compiler and linker flag is preferred then
-  the caller can set this variable to TRUE. The compiler flag can only be
-  used with the imported target. Use of both the imported target as well
-  as this switch is highly recommended for new code.
-
-  This variable has no effect if the system libraries provide the
-  thread functions, i.e. when ``CMAKE_THREAD_LIBS_INIT`` will be empty.
-#]=======================================================================]
-
-include (CheckLibraryExists)
-set(Threads_FOUND FALSE)
-set(CMAKE_REQUIRED_QUIET_SAVE ${CMAKE_REQUIRED_QUIET})
-set(CMAKE_REQUIRED_QUIET ${Threads_FIND_QUIETLY})
-
-if(CMAKE_C_COMPILER_LOADED)
-  include (CheckIncludeFile)
-  include (CheckCSourceCompiles)
-elseif(CMAKE_CXX_COMPILER_LOADED)
-  include (CheckIncludeFileCXX)
-  include (CheckCXXSourceCompiles)
-else()
-  message(FATAL_ERROR "FindThreads only works if either C or CXX language is enabled")
-endif()
-
-# simple pthread test code
-set(PTHREAD_C_CXX_TEST_SOURCE [====[
-#include <pthread.h>
-
-void* test_func(void* data)
-{
-  return data;
-}
-
-int main(void)
-{
-  pthread_t thread;
-  pthread_create(&thread, NULL, test_func, NULL);
-  pthread_detach(thread);
-  pthread_cancel(thread);
-  pthread_join(thread, NULL);
-  pthread_atfork(NULL, NULL, NULL);
-  pthread_exit(NULL);
-
-  return 0;
-}
-]====])
-
-# Internal helper macro.
-# Do NOT even think about using it outside of this file!
-macro(_check_threads_lib LIBNAME FUNCNAME VARNAME)
-  if(NOT Threads_FOUND)
-     CHECK_LIBRARY_EXISTS(${LIBNAME} ${FUNCNAME} "" ${VARNAME})
-     if(${VARNAME})
-       set(CMAKE_THREAD_LIBS_INIT "-l${LIBNAME}")
-       set(CMAKE_HAVE_THREADS_LIBRARY 1)
-       set(Threads_FOUND TRUE)
-     endif()
-  endif ()
-endmacro()
-
-# Internal helper macro.
-# Do NOT even think about using it outside of this file!
-macro(_check_pthreads_flag)
-  if(NOT Threads_FOUND)
-    # If we did not found -lpthread, -lpthread, or -lthread, look for -pthread
-    if(NOT DEFINED THREADS_HAVE_PTHREAD_ARG)
-      message(CHECK_START "Check if compiler accepts -pthread")
-      if(CMAKE_C_COMPILER_LOADED)
-        set(_threads_src ${CMAKE_CURRENT_LIST_DIR}/CheckForPthreads.c)
-      elseif(CMAKE_CXX_COMPILER_LOADED)
-        set(_threads_src ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/FindThreads/CheckForPthreads.cxx)
-        configure_file(${CMAKE_CURRENT_LIST_DIR}/CheckForPthreads.c "${_threads_src}" COPYONLY)
-      endif()
-      try_compile(THREADS_HAVE_PTHREAD_ARG
-        ${CMAKE_BINARY_DIR}
-        ${_threads_src}
-        CMAKE_FLAGS -DLINK_LIBRARIES:STRING=-pthread
-        OUTPUT_VARIABLE OUTPUT)
-      unset(_threads_src)
-
-      if(THREADS_HAVE_PTHREAD_ARG)
-        set(Threads_FOUND TRUE)
-        message(CHECK_PASS "yes")
-      else()
-        message(CHECK_FAIL "no")
-        file(APPEND
-          ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-          "Determining if compiler accepts -pthread failed with the following output:\n${OUTPUT}\n\n")
-      endif()
-
-    endif()
-
-    if(THREADS_HAVE_PTHREAD_ARG)
-      set(Threads_FOUND TRUE)
-      set(CMAKE_THREAD_LIBS_INIT "-pthread")
-    endif()
-  endif()
-endmacro()
-
-# Do we have pthreads?
-if(CMAKE_C_COMPILER_LOADED)
-  CHECK_INCLUDE_FILE("pthread.h" CMAKE_HAVE_PTHREAD_H)
-else()
-  CHECK_INCLUDE_FILE_CXX("pthread.h" CMAKE_HAVE_PTHREAD_H)
-endif()
-
-if(CMAKE_HAVE_PTHREAD_H)
-  #
-  # We have pthread.h
-  # Let's check for the library now.
-  #
-  set(CMAKE_HAVE_THREADS_LIBRARY)
-  if(NOT THREADS_HAVE_PTHREAD_ARG)
-    # Check if pthread functions are in normal C library.
-    # We list some pthread functions in PTHREAD_C_CXX_TEST_SOURCE test code.
-    # If the pthread functions already exist in C library, we could just use
-    # them instead of linking to the additional pthread library.
-    if(CMAKE_C_COMPILER_LOADED)
-      CHECK_C_SOURCE_COMPILES("${PTHREAD_C_CXX_TEST_SOURCE}" CMAKE_HAVE_LIBC_PTHREAD)
-    elseif(CMAKE_CXX_COMPILER_LOADED)
-      CHECK_CXX_SOURCE_COMPILES("${PTHREAD_C_CXX_TEST_SOURCE}" CMAKE_HAVE_LIBC_PTHREAD)
-    endif()
-    if(CMAKE_HAVE_LIBC_PTHREAD)
-      set(CMAKE_THREAD_LIBS_INIT "")
-      set(CMAKE_HAVE_THREADS_LIBRARY 1)
-      set(Threads_FOUND TRUE)
-    else()
-      # Check for -pthread first if enabled. This is the recommended
-      # way, but not backwards compatible as one must also pass -pthread
-      # as compiler flag then.
-      if (THREADS_PREFER_PTHREAD_FLAG)
-         _check_pthreads_flag()
-      endif ()
-
-      if(CMAKE_SYSTEM MATCHES "GHS-MULTI")
-        _check_threads_lib(posix pthread_create CMAKE_HAVE_PTHREADS_CREATE)
-      endif()
-      _check_threads_lib(pthreads pthread_create CMAKE_HAVE_PTHREADS_CREATE)
-      _check_threads_lib(pthread  pthread_create CMAKE_HAVE_PTHREAD_CREATE)
-      if(CMAKE_SYSTEM_NAME MATCHES "SunOS")
-          # On sun also check for -lthread
-          _check_threads_lib(thread thr_create CMAKE_HAVE_THR_CREATE)
-      endif()
-    endif()
-  endif()
-
-  _check_pthreads_flag()
-endif()
-
-if(CMAKE_THREAD_LIBS_INIT OR CMAKE_HAVE_LIBC_PTHREAD)
-  set(CMAKE_USE_PTHREADS_INIT 1)
-  set(Threads_FOUND TRUE)
-endif()
-
-if(CMAKE_SYSTEM_NAME MATCHES "Windows")
-  set(CMAKE_USE_WIN32_THREADS_INIT 1)
-  set(Threads_FOUND TRUE)
-endif()
-
-if(CMAKE_USE_PTHREADS_INIT)
-  if(CMAKE_SYSTEM_NAME MATCHES "HP-UX")
-    # Use libcma if it exists and can be used.  It provides more
-    # symbols than the plain pthread library.  CMA threads
-    # have actually been deprecated:
-    #   http://docs.hp.com/en/B3920-90091/ch12s03.html#d0e11395
-    #   http://docs.hp.com/en/947/d8.html
-    # but we need to maintain compatibility here.
-    # The CMAKE_HP_PTHREADS setting actually indicates whether CMA threads
-    # are available.
-    CHECK_LIBRARY_EXISTS(cma pthread_attr_create "" CMAKE_HAVE_HP_CMA)
-    if(CMAKE_HAVE_HP_CMA)
-      set(CMAKE_THREAD_LIBS_INIT "-lcma")
-      set(CMAKE_HP_PTHREADS_INIT 1)
-      set(Threads_FOUND TRUE)
-    endif()
-    set(CMAKE_USE_PTHREADS_INIT 1)
-  endif()
-
-  if(CMAKE_SYSTEM MATCHES "OSF1-V")
-    set(CMAKE_USE_PTHREADS_INIT 0)
-    set(CMAKE_THREAD_LIBS_INIT )
-  endif()
-
-  if(CMAKE_SYSTEM MATCHES "CYGWIN_NT")
-    set(CMAKE_USE_PTHREADS_INIT 1)
-    set(Threads_FOUND TRUE)
-    set(CMAKE_THREAD_LIBS_INIT )
-    set(CMAKE_USE_WIN32_THREADS_INIT 0)
-  endif()
-endif()
-
-set(CMAKE_REQUIRED_QUIET ${CMAKE_REQUIRED_QUIET_SAVE})
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(Threads DEFAULT_MSG Threads_FOUND)
-
-if(THREADS_FOUND AND NOT TARGET Threads::Threads)
-  add_library(Threads::Threads INTERFACE IMPORTED)
-
-  if(THREADS_HAVE_PTHREAD_ARG)
-    set_property(TARGET Threads::Threads
-                 PROPERTY INTERFACE_COMPILE_OPTIONS "$<$<COMPILE_LANG_AND_ID:CUDA,NVIDIA>:SHELL:-Xcompiler -pthread>"
-                                                    "$<$<NOT:$<COMPILE_LANG_AND_ID:CUDA,NVIDIA>>:-pthread>")
-  endif()
-
-  if(CMAKE_THREAD_LIBS_INIT)
-    set_property(TARGET Threads::Threads PROPERTY INTERFACE_LINK_LIBRARIES "${CMAKE_THREAD_LIBS_INIT}")
-  endif()
-endif()
diff --git a/share/cmake-3.18/Modules/FindUnixCommands.cmake b/share/cmake-3.18/Modules/FindUnixCommands.cmake
deleted file mode 100644
index 2513f5c..0000000
--- a/share/cmake-3.18/Modules/FindUnixCommands.cmake
+++ /dev/null
@@ -1,71 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindUnixCommands
-----------------
-
-Find Unix commands, including the ones from Cygwin
-
-This module looks for the Unix commands ``bash``, ``cp``, ``gzip``,
-``mv``, ``rm``, and ``tar`` and stores the result in the variables
-``BASH``, ``CP``, ``GZIP``, ``MV``, ``RM``, and ``TAR``.
-#]=======================================================================]
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindCygwin.cmake)
-
-find_program(BASH
-  bash
-  ${CYGWIN_INSTALL_PATH}/bin
-)
-mark_as_advanced(
-  BASH
-)
-
-find_program(CP
-  cp
-  ${CYGWIN_INSTALL_PATH}/bin
-)
-mark_as_advanced(
-  CP
-)
-
-find_program(GZIP
-  gzip
-  ${CYGWIN_INSTALL_PATH}/bin
-)
-mark_as_advanced(
-  GZIP
-)
-
-find_program(MV
-  mv
-  ${CYGWIN_INSTALL_PATH}/bin
-)
-mark_as_advanced(
-  MV
-)
-
-find_program(RM
-  rm
-  ${CYGWIN_INSTALL_PATH}/bin
-)
-mark_as_advanced(
-  RM
-)
-
-find_program(TAR
-  NAMES
-  tar
-  gtar
-  PATH
-  ${CYGWIN_INSTALL_PATH}/bin
-)
-mark_as_advanced(
-  TAR
-)
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-find_package_handle_standard_args(UnixCommands
-  REQUIRED_VARS BASH CP GZIP MV RM TAR
-)
diff --git a/share/cmake-3.18/Modules/FindVulkan.cmake b/share/cmake-3.18/Modules/FindVulkan.cmake
deleted file mode 100644
index 4b999b6..0000000
--- a/share/cmake-3.18/Modules/FindVulkan.cmake
+++ /dev/null
@@ -1,88 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindVulkan
-----------
-
-Find Vulkan, which is a low-overhead, cross-platform 3D graphics
-and computing API.
-
-IMPORTED Targets
-^^^^^^^^^^^^^^^^
-
-This module defines :prop_tgt:`IMPORTED` target ``Vulkan::Vulkan``, if
-Vulkan has been found.
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-This module defines the following variables::
-
-  Vulkan_FOUND          - "True" if Vulkan was found
-  Vulkan_INCLUDE_DIRS   - include directories for Vulkan
-  Vulkan_LIBRARIES      - link against this library to use Vulkan
-
-The module will also define two cache variables::
-
-  Vulkan_INCLUDE_DIR    - the Vulkan include directory
-  Vulkan_LIBRARY        - the path to the Vulkan library
-
-Hints
-^^^^^
-
-The ``VULKAN_SDK`` environment variable optionally specifies the
-location of the Vulkan SDK root directory for the given
-architecture. It is typically set by sourcing the toplevel
-``setup-env.sh`` script of the Vulkan SDK directory into the shell
-environment.
-
-#]=======================================================================]
-
-if(WIN32)
-  find_path(Vulkan_INCLUDE_DIR
-    NAMES vulkan/vulkan.h
-    HINTS
-      "$ENV{VULKAN_SDK}/Include"
-    )
-
-  if(CMAKE_SIZEOF_VOID_P EQUAL 8)
-    find_library(Vulkan_LIBRARY
-      NAMES vulkan-1
-      HINTS
-        "$ENV{VULKAN_SDK}/Lib"
-        "$ENV{VULKAN_SDK}/Bin"
-      )
-  elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
-    find_library(Vulkan_LIBRARY
-      NAMES vulkan-1
-      HINTS
-        "$ENV{VULKAN_SDK}/Lib32"
-        "$ENV{VULKAN_SDK}/Bin32"
-      )
-  endif()
-else()
-  find_path(Vulkan_INCLUDE_DIR
-    NAMES vulkan/vulkan.h
-    HINTS "$ENV{VULKAN_SDK}/include")
-  find_library(Vulkan_LIBRARY
-    NAMES vulkan
-    HINTS "$ENV{VULKAN_SDK}/lib")
-endif()
-
-set(Vulkan_LIBRARIES ${Vulkan_LIBRARY})
-set(Vulkan_INCLUDE_DIRS ${Vulkan_INCLUDE_DIR})
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-find_package_handle_standard_args(Vulkan
-  DEFAULT_MSG
-  Vulkan_LIBRARY Vulkan_INCLUDE_DIR)
-
-mark_as_advanced(Vulkan_INCLUDE_DIR Vulkan_LIBRARY)
-
-if(Vulkan_FOUND AND NOT TARGET Vulkan::Vulkan)
-  add_library(Vulkan::Vulkan UNKNOWN IMPORTED)
-  set_target_properties(Vulkan::Vulkan PROPERTIES
-    IMPORTED_LOCATION "${Vulkan_LIBRARIES}"
-    INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}")
-endif()
diff --git a/share/cmake-3.18/Modules/FindWget.cmake b/share/cmake-3.18/Modules/FindWget.cmake
deleted file mode 100644
index bd01ec2..0000000
--- a/share/cmake-3.18/Modules/FindWget.cmake
+++ /dev/null
@@ -1,32 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindWget
---------
-
-Find wget
-
-This module looks for wget.  This module defines the following values:
-
-::
-
-  WGET_EXECUTABLE: the full path to the wget tool.
-  WGET_FOUND: True if wget has been found.
-#]=======================================================================]
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindCygwin.cmake)
-
-find_program(WGET_EXECUTABLE
-  wget
-  ${CYGWIN_INSTALL_PATH}/bin
-)
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(Wget DEFAULT_MSG WGET_EXECUTABLE)
-
-mark_as_advanced( WGET_EXECUTABLE )
-
-# WGET option is deprecated.
-# use WGET_EXECUTABLE instead.
-set (WGET ${WGET_EXECUTABLE})
diff --git a/share/cmake-3.18/Modules/FindX11.cmake b/share/cmake-3.18/Modules/FindX11.cmake
deleted file mode 100644
index aa83575..0000000
--- a/share/cmake-3.18/Modules/FindX11.cmake
+++ /dev/null
@@ -1,823 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindX11
--------
-
-Find X11 installation
-
-Try to find X11 on UNIX systems. The following values are defined
-
-::
-
-  X11_FOUND        - True if X11 is available
-  X11_INCLUDE_DIR  - include directories to use X11
-  X11_LIBRARIES    - link against these to use X11
-
-and also the following more fine grained variables and targets:
-
-::
-
-  X11_ICE_INCLUDE_PATH,          X11_ICE_LIB,        X11_ICE_FOUND,        X11::ICE
-  X11_SM_INCLUDE_PATH,           X11_SM_LIB,         X11_SM_FOUND,         X11::SM
-  X11_X11_INCLUDE_PATH,          X11_X11_LIB,                              X11::X11
-  X11_Xaccessrules_INCLUDE_PATH,
-  X11_Xaccessstr_INCLUDE_PATH,                       X11_Xaccess_FOUND
-  X11_Xau_INCLUDE_PATH,          X11_Xau_LIB,        X11_Xau_FOUND,        X11::Xau
-  X11_xcb_INCLUDE_PATH,          X11_xcb_LIB,        X11_xcb_FOUND,        X11::xcb
-  X11_X11_xcb_INCLUDE_PATH,      X11_X11_xcb_LIB,    X11_X11_xcb_FOUND,    X11::X11_xcb
-  X11_xcb_icccm_INCLUDE_PATH,    X11_xcb_icccm_LIB,  X11_xcb_icccm_FOUND,  X11::xcb_icccm
-  X11_xcb_xkb_INCLUDE_PATH,      X11_xcb_xkb_LIB,    X11_xcb_xkb_FOUND,    X11::xcb_xkb
-  X11_Xcomposite_INCLUDE_PATH,   X11_Xcomposite_LIB, X11_Xcomposite_FOUND, X11::Xcomposite
-  X11_Xcursor_INCLUDE_PATH,      X11_Xcursor_LIB,    X11_Xcursor_FOUND,    X11::Xcursor
-  X11_Xdamage_INCLUDE_PATH,      X11_Xdamage_LIB,    X11_Xdamage_FOUND,    X11::Xdamage
-  X11_Xdmcp_INCLUDE_PATH,        X11_Xdmcp_LIB,      X11_Xdmcp_FOUND,      X11::Xdmcp
-  X11_Xext_INCLUDE_PATH,         X11_Xext_LIB,       X11_Xext_FOUND,       X11::Xext
-  X11_Xxf86misc_INCLUDE_PATH,    X11_Xxf86misc_LIB,  X11_Xxf86misc_FOUND,  X11::Xxf86misc
-  X11_Xxf86vm_INCLUDE_PATH,      X11_Xxf86vm_LIB     X11_Xxf86vm_FOUND,    X11::Xxf86vm
-  X11_Xfixes_INCLUDE_PATH,       X11_Xfixes_LIB,     X11_Xfixes_FOUND,     X11::Xfixes
-  X11_Xft_INCLUDE_PATH,          X11_Xft_LIB,        X11_Xft_FOUND,        X11::Xft
-  X11_Xi_INCLUDE_PATH,           X11_Xi_LIB,         X11_Xi_FOUND,         X11::Xi
-  X11_Xinerama_INCLUDE_PATH,     X11_Xinerama_LIB,   X11_Xinerama_FOUND,   X11::Xinerama
-  X11_Xkb_INCLUDE_PATH,
-  X11_Xkblib_INCLUDE_PATH,                           X11_Xkb_FOUND,        X11::Xkb
-  X11_xkbcommon_INCLUDE_PATH,    X11_xkbcommon_LIB,  X11_xkbcommon_FOUND,  X11::xkbcommon
-  X11_xkbcommon_X11_INCLUDE_PATH,X11_xkbcommon_X11_LIB,X11_xkbcommon_X11_FOUND,X11::xkbcommon_X11
-  X11_xkbfile_INCLUDE_PATH,      X11_xkbfile_LIB,    X11_xkbfile_FOUND,    X11::xkbfile
-  X11_Xmu_INCLUDE_PATH,          X11_Xmu_LIB,        X11_Xmu_FOUND,        X11::Xmu
-  X11_Xpm_INCLUDE_PATH,          X11_Xpm_LIB,        X11_Xpm_FOUND,        X11::Xpm
-  X11_Xtst_INCLUDE_PATH,         X11_Xtst_LIB,       X11_Xtst_FOUND,       X11::Xtst
-  X11_Xrandr_INCLUDE_PATH,       X11_Xrandr_LIB,     X11_Xrandr_FOUND,     X11::Xrandr
-  X11_Xrender_INCLUDE_PATH,      X11_Xrender_LIB,    X11_Xrender_FOUND,    X11::Xrender
-  X11_XRes_INCLUDE_PATH,         X11_XRes_LIB,       X11_XRes_FOUND,       X11::XRes
-  X11_Xss_INCLUDE_PATH,          X11_Xss_LIB,        X11_Xss_FOUND,        X11::Xss
-  X11_Xt_INCLUDE_PATH,           X11_Xt_LIB,         X11_Xt_FOUND,         X11::Xt
-  X11_Xutil_INCLUDE_PATH,                            X11_Xutil_FOUND,      X11::Xutil
-  X11_Xv_INCLUDE_PATH,           X11_Xv_LIB,         X11_Xv_FOUND,         X11::Xv
-  X11_dpms_INCLUDE_PATH,         (in X11_Xext_LIB),  X11_dpms_FOUND
-  X11_XShm_INCLUDE_PATH,         (in X11_Xext_LIB),  X11_XShm_FOUND
-  X11_Xshape_INCLUDE_PATH,       (in X11_Xext_LIB),  X11_Xshape_FOUND
-  X11_XSync_INCLUDE_PATH,        (in X11_Xext_LIB),  X11_XSync_FOUND
-#]=======================================================================]
-
-if (UNIX)
-  set(X11_FOUND 0)
-  # X11 is never a framework and some header files may be
-  # found in tcl on the mac
-  set(CMAKE_FIND_FRAMEWORK_SAVE ${CMAKE_FIND_FRAMEWORK})
-  set(CMAKE_FIND_FRAMEWORK NEVER)
-  set(CMAKE_REQUIRED_QUIET_SAVE ${CMAKE_REQUIRED_QUIET})
-  set(CMAKE_REQUIRED_QUIET ${X11_FIND_QUIETLY})
-  set(X11_INC_SEARCH_PATH
-    /usr/pkg/xorg/include
-    /usr/X11R6/include
-    /usr/X11R7/include
-    /usr/include/X11
-    /usr/openwin/include
-    /usr/openwin/share/include
-    /opt/graphics/OpenGL/include
-    /opt/X11/include
-  )
-
-  set(X11_LIB_SEARCH_PATH
-    /usr/pkg/xorg/lib
-    /usr/X11R6/lib
-    /usr/X11R7/lib
-    /usr/openwin/lib
-    /opt/X11/lib
-  )
-
-  find_path(X11_X11_INCLUDE_PATH X11/X.h                             ${X11_INC_SEARCH_PATH})
-  find_path(X11_Xlib_INCLUDE_PATH X11/Xlib.h                         ${X11_INC_SEARCH_PATH})
-
-  # Look for includes; keep the list sorted by name of the cmake *_INCLUDE_PATH
-  # variable (which doesn't need to match the include file name).
-
-  # Solaris lacks XKBrules.h, so we should skip kxkbd there.
-  find_path(X11_ICE_INCLUDE_PATH X11/ICE/ICE.h                       ${X11_INC_SEARCH_PATH})
-  find_path(X11_SM_INCLUDE_PATH X11/SM/SM.h                          ${X11_INC_SEARCH_PATH})
-  find_path(X11_Xaccessrules_INCLUDE_PATH X11/extensions/XKBrules.h  ${X11_INC_SEARCH_PATH})
-  find_path(X11_Xaccessstr_INCLUDE_PATH X11/extensions/XKBstr.h      ${X11_INC_SEARCH_PATH})
-  find_path(X11_Xau_INCLUDE_PATH X11/Xauth.h                         ${X11_INC_SEARCH_PATH})
-  find_path(X11_xcb_INCLUDE_PATH xcb/xcb.h                           ${X11_INC_SEARCH_PATH})
-  find_path(X11_X11_xcb_INCLUDE_PATH X11/Xlib-xcb.h                  ${X11_INC_SEARCH_PATH})
-  find_path(X11_xcb_icccm_INCLUDE_PATH xcb/xcb_icccm.h               ${X11_INC_SEARCH_PATH})
-  find_path(X11_Xcomposite_INCLUDE_PATH X11/extensions/Xcomposite.h  ${X11_INC_SEARCH_PATH})
-  find_path(X11_Xcursor_INCLUDE_PATH X11/Xcursor/Xcursor.h           ${X11_INC_SEARCH_PATH})
-  find_path(X11_Xdamage_INCLUDE_PATH X11/extensions/Xdamage.h        ${X11_INC_SEARCH_PATH})
-  find_path(X11_Xdmcp_INCLUDE_PATH X11/Xdmcp.h                       ${X11_INC_SEARCH_PATH})
-  find_path(X11_Xext_INCLUDE_PATH X11/extensions/Xext.h              ${X11_INC_SEARCH_PATH})
-  find_path(X11_dpms_INCLUDE_PATH X11/extensions/dpms.h              ${X11_INC_SEARCH_PATH})
-  find_path(X11_Xxf86misc_INCLUDE_PATH X11/extensions/xf86misc.h     ${X11_INC_SEARCH_PATH})
-  find_path(X11_Xxf86vm_INCLUDE_PATH X11/extensions/xf86vmode.h      ${X11_INC_SEARCH_PATH})
-  find_path(X11_Xfixes_INCLUDE_PATH X11/extensions/Xfixes.h          ${X11_INC_SEARCH_PATH})
-  find_path(X11_Xft_INCLUDE_PATH X11/Xft/Xft.h                       ${X11_INC_SEARCH_PATH})
-  find_path(X11_Xi_INCLUDE_PATH X11/extensions/XInput.h              ${X11_INC_SEARCH_PATH})
-  find_path(X11_Xinerama_INCLUDE_PATH X11/extensions/Xinerama.h      ${X11_INC_SEARCH_PATH})
-  find_path(X11_Xkb_INCLUDE_PATH X11/extensions/XKB.h                ${X11_INC_SEARCH_PATH})
-  find_path(X11_xkbcommon_INCLUDE_PATH xkbcommon/xkbcommon.h         ${X11_INC_SEARCH_PATH})
-  find_path(X11_xkbcommon_X11_INCLUDE_PATH xkbcommon/xkbcommon-x11.h ${X11_INC_SEARCH_PATH})
-  find_path(X11_Xkblib_INCLUDE_PATH X11/XKBlib.h                     ${X11_INC_SEARCH_PATH})
-  find_path(X11_xkbfile_INCLUDE_PATH X11/extensions/XKBfile.h        ${X11_INC_SEARCH_PATH})
-  find_path(X11_Xmu_INCLUDE_PATH X11/Xmu/Xmu.h                       ${X11_INC_SEARCH_PATH})
-  find_path(X11_Xpm_INCLUDE_PATH X11/xpm.h                           ${X11_INC_SEARCH_PATH})
-  find_path(X11_Xtst_INCLUDE_PATH X11/extensions/XTest.h             ${X11_INC_SEARCH_PATH})
-  find_path(X11_XShm_INCLUDE_PATH X11/extensions/XShm.h              ${X11_INC_SEARCH_PATH})
-  find_path(X11_Xrandr_INCLUDE_PATH X11/extensions/Xrandr.h          ${X11_INC_SEARCH_PATH})
-  find_path(X11_Xrender_INCLUDE_PATH X11/extensions/Xrender.h        ${X11_INC_SEARCH_PATH})
-  find_path(X11_XRes_INCLUDE_PATH X11/extensions/XRes.h              ${X11_INC_SEARCH_PATH})
-  find_path(X11_Xss_INCLUDE_PATH X11/extensions/scrnsaver.h          ${X11_INC_SEARCH_PATH})
-  find_path(X11_Xshape_INCLUDE_PATH X11/extensions/shape.h           ${X11_INC_SEARCH_PATH})
-  find_path(X11_Xutil_INCLUDE_PATH X11/Xutil.h                       ${X11_INC_SEARCH_PATH})
-  find_path(X11_Xt_INCLUDE_PATH X11/Intrinsic.h                      ${X11_INC_SEARCH_PATH})
-  find_path(X11_Xv_INCLUDE_PATH X11/extensions/Xvlib.h               ${X11_INC_SEARCH_PATH})
-  find_path(X11_XSync_INCLUDE_PATH X11/extensions/sync.h             ${X11_INC_SEARCH_PATH})
-
-  # Backwards compatibility.
-  set(X11_Xinput_INCLUDE_PATH "${X11_Xi_INCLUDE_PATH}")
-  set(X11_xf86misc_INCLUDE_PATH "${X11_Xxf86misc_INCLUDE_PATH}")
-  set(X11_xf86vmode_INCLUDE_PATH "${X11_Xxf8vm_INCLUDE_PATH}")
-  set(X11_Xkbfile_INCLUDE_PATH "${X11_xkbfile_INCLUDE_PATH}")
-  set(X11_XTest_INCLUDE_PATH "${X11_Xtst_INCLUDE_PATH}")
-  set(X11_Xscreensaver_INCLUDE_PATH "${X11_Xss_INCLUDE_PATH}")
-
-  find_library(X11_X11_LIB X11               ${X11_LIB_SEARCH_PATH})
-
-  # Find additional X libraries. Keep list sorted by library name.
-  find_library(X11_ICE_LIB ICE               ${X11_LIB_SEARCH_PATH})
-  find_library(X11_SM_LIB SM                 ${X11_LIB_SEARCH_PATH})
-  find_library(X11_Xau_LIB Xau               ${X11_LIB_SEARCH_PATH})
-  find_library(X11_xcb_LIB xcb               ${X11_LIB_SEARCH_PATH})
-  find_library(X11_X11_xcb_LIB X11-xcb       ${X11_LIB_SEARCH_PATH})
-  find_library(X11_xcb_icccm_LIB xcb-icccm   ${X11_LIB_SEARCH_PATH})
-  find_library(X11_xcb_xkb_LIB xcb-xkb       ${X11_LIB_SEARCH_PATH})
-  find_library(X11_Xcomposite_LIB Xcomposite ${X11_LIB_SEARCH_PATH})
-  find_library(X11_Xcursor_LIB Xcursor       ${X11_LIB_SEARCH_PATH})
-  find_library(X11_Xdamage_LIB Xdamage       ${X11_LIB_SEARCH_PATH})
-  find_library(X11_Xdmcp_LIB Xdmcp           ${X11_LIB_SEARCH_PATH})
-  find_library(X11_Xext_LIB Xext             ${X11_LIB_SEARCH_PATH})
-  find_library(X11_Xfixes_LIB Xfixes         ${X11_LIB_SEARCH_PATH})
-  find_library(X11_Xft_LIB Xft               ${X11_LIB_SEARCH_PATH})
-  find_library(X11_Xi_LIB Xi                 ${X11_LIB_SEARCH_PATH})
-  find_library(X11_Xinerama_LIB Xinerama     ${X11_LIB_SEARCH_PATH})
-  find_library(X11_xkbcommon_LIB xkbcommon   ${X11_LIB_SEARCH_PATH})
-  find_library(X11_xkbcommon_X11_LIB xkbcommon-x11   ${X11_LIB_SEARCH_PATH})
-  find_library(X11_xkbfile_LIB xkbfile       ${X11_LIB_SEARCH_PATH})
-  find_library(X11_Xmu_LIB Xmu               ${X11_LIB_SEARCH_PATH})
-  find_library(X11_Xpm_LIB Xpm               ${X11_LIB_SEARCH_PATH})
-  find_library(X11_Xrandr_LIB Xrandr         ${X11_LIB_SEARCH_PATH})
-  find_library(X11_Xrender_LIB Xrender       ${X11_LIB_SEARCH_PATH})
-  find_library(X11_XRes_LIB XRes             ${X11_LIB_SEARCH_PATH})
-  find_library(X11_Xss_LIB Xss               ${X11_LIB_SEARCH_PATH})
-  find_library(X11_Xt_LIB Xt                 ${X11_LIB_SEARCH_PATH})
-  find_library(X11_Xtst_LIB Xtst             ${X11_LIB_SEARCH_PATH})
-  find_library(X11_Xv_LIB Xv                 ${X11_LIB_SEARCH_PATH})
-  find_library(X11_Xxf86misc_LIB Xxf86misc   ${X11_LIB_SEARCH_PATH})
-  find_library(X11_Xxf86vm_LIB Xxf86vm       ${X11_LIB_SEARCH_PATH})
-
-  # Backwards compatibility.
-  set(X11_Xinput_LIB "${X11_Xi_LIB}")
-  set(X11_Xkbfile_LIB "${X11_xkbfile_LIB}")
-  set(X11_XTest_LIB "${X11_Xtst_LIB}")
-  set(X11_Xscreensaver_LIB "${X11_Xss_LIB}")
-
-  set(X11_LIBRARY_DIR "")
-  if(X11_X11_LIB)
-    get_filename_component(X11_LIBRARY_DIR ${X11_X11_LIB} PATH)
-  endif()
-
-  set(X11_INCLUDE_DIR) # start with empty list
-  if(X11_X11_INCLUDE_PATH)
-    list(APPEND X11_INCLUDE_DIR ${X11_X11_INCLUDE_PATH})
-  endif()
-
-  if(X11_Xlib_INCLUDE_PATH)
-    list(APPEND X11_INCLUDE_DIR ${X11_Xlib_INCLUDE_PATH})
-  endif()
-
-  if(X11_Xutil_INCLUDE_PATH)
-    set(X11_Xutil_FOUND TRUE)
-    list(APPEND X11_INCLUDE_DIR ${X11_Xutil_INCLUDE_PATH})
-  endif()
-
-  if(X11_Xshape_INCLUDE_PATH)
-    set(X11_Xshape_FOUND TRUE)
-    list(APPEND X11_INCLUDE_DIR ${X11_Xshape_INCLUDE_PATH})
-  endif()
-
-  set(X11_LIBRARIES) # start with empty list
-  if(X11_X11_LIB)
-    list(APPEND X11_LIBRARIES ${X11_X11_LIB})
-  endif()
-
-  if(X11_Xext_LIB)
-    set(X11_Xext_FOUND TRUE)
-    list(APPEND X11_LIBRARIES ${X11_Xext_LIB})
-  endif()
-
-  if(X11_Xt_LIB AND X11_Xt_INCLUDE_PATH)
-    set(X11_Xt_FOUND TRUE)
-  endif()
-
-  if(X11_Xft_LIB AND X11_Xft_INCLUDE_PATH)
-    find_package(Freetype QUIET)
-    find_package(Fontconfig QUIET)
-    if (FREETYPE_FOUND AND Fontconfig_FOUND)
-      set(X11_Xft_FOUND TRUE)
-    endif ()
-    list(APPEND X11_INCLUDE_DIR ${X11_Xft_INCLUDE_PATH})
-  endif()
-
-  if(X11_Xv_LIB AND X11_Xv_INCLUDE_PATH)
-    set(X11_Xv_FOUND TRUE)
-    list(APPEND X11_INCLUDE_DIR ${X11_Xv_INCLUDE_PATH})
-  endif()
-
-  if (X11_Xau_LIB AND X11_Xau_INCLUDE_PATH)
-    set(X11_Xau_FOUND TRUE)
-  endif ()
-
-  if (X11_xcb_LIB AND X11_xcb_INCLUDE_PATH)
-    set(X11_xcb_FOUND TRUE)
-  endif ()
-
-  if (X11_X11_xcb_LIB AND X11_X11_xcb_INCLUDE_PATH)
-    set(X11_X11_xcb_FOUND TRUE)
-  endif ()
-
-  if (X11_xcb_icccm_LIB AND X11_xcb_icccm_INCLUDE_PATH)
-    set(X11_xcb_icccm_FOUND TRUE)
-  endif ()
-
-  if (X11_xcb_xkb_LIB)
-    set(X11_xcb_xkb_FOUND TRUE)
-  endif ()
-
-  if (X11_Xdmcp_INCLUDE_PATH AND X11_Xdmcp_LIB)
-      set(X11_Xdmcp_FOUND TRUE)
-      list(APPEND X11_INCLUDE_DIR ${X11_Xdmcp_INCLUDE_PATH})
-  endif ()
-
-  if (X11_Xaccessrules_INCLUDE_PATH AND X11_Xaccessstr_INCLUDE_PATH)
-      set(X11_Xaccess_FOUND TRUE)
-      set(X11_Xaccess_INCLUDE_PATH ${X11_Xaccessstr_INCLUDE_PATH})
-      list(APPEND X11_INCLUDE_DIR ${X11_Xaccess_INCLUDE_PATH})
-  endif ()
-
-  if (X11_Xpm_INCLUDE_PATH AND X11_Xpm_LIB)
-      set(X11_Xpm_FOUND TRUE)
-      list(APPEND X11_INCLUDE_DIR ${X11_Xpm_INCLUDE_PATH})
-  endif ()
-
-  if (X11_Xcomposite_INCLUDE_PATH AND X11_Xcomposite_LIB)
-     set(X11_Xcomposite_FOUND TRUE)
-     list(APPEND X11_INCLUDE_DIR ${X11_Xcomposite_INCLUDE_PATH})
-  endif ()
-
-  if (X11_Xdamage_INCLUDE_PATH AND X11_Xdamage_LIB)
-     set(X11_Xdamage_FOUND TRUE)
-     list(APPEND X11_INCLUDE_DIR ${X11_Xdamage_INCLUDE_PATH})
-  endif ()
-
-  if (X11_XShm_INCLUDE_PATH)
-     set(X11_XShm_FOUND TRUE)
-     list(APPEND X11_INCLUDE_DIR ${X11_XShm_INCLUDE_PATH})
-  endif ()
-
-  if (X11_Xtst_INCLUDE_PATH AND X11_Xtst_LIB)
-      set(X11_Xtst_FOUND TRUE)
-      # Backwards compatibility.
-      set(X11_XTest_FOUND TRUE)
-      list(APPEND X11_INCLUDE_DIR ${X11_Xtst_INCLUDE_PATH})
-  endif ()
-
-  if (X11_Xi_INCLUDE_PATH AND X11_Xi_LIB)
-     set(X11_Xi_FOUND TRUE)
-     # Backwards compatibility.
-     set(X11_Xinput_FOUND TRUE)
-     list(APPEND X11_INCLUDE_DIR ${X11_Xi_INCLUDE_PATH})
-  endif ()
-
-  if (X11_Xinerama_INCLUDE_PATH AND X11_Xinerama_LIB)
-     set(X11_Xinerama_FOUND TRUE)
-     list(APPEND X11_INCLUDE_DIR ${X11_Xinerama_INCLUDE_PATH})
-  endif ()
-
-  if (X11_Xfixes_INCLUDE_PATH AND X11_Xfixes_LIB)
-     set(X11_Xfixes_FOUND TRUE)
-     list(APPEND X11_INCLUDE_DIR ${X11_Xfixes_INCLUDE_PATH})
-  endif ()
-
-  if (X11_Xrender_INCLUDE_PATH AND X11_Xrender_LIB)
-     set(X11_Xrender_FOUND TRUE)
-     list(APPEND X11_INCLUDE_DIR ${X11_Xrender_INCLUDE_PATH})
-  endif ()
-
-  if (X11_XRes_INCLUDE_PATH AND X11_XRes_LIB)
-     set(X11_XRes_FOUND TRUE)
-     list(APPEND X11_INCLUDE_DIR ${X11_XRes_INCLUDE_PATH})
-  endif ()
-
-  if (X11_Xrandr_INCLUDE_PATH AND X11_Xrandr_LIB)
-     set(X11_Xrandr_FOUND TRUE)
-     list(APPEND X11_INCLUDE_DIR ${X11_Xrandr_INCLUDE_PATH})
-  endif ()
-
-  if (X11_Xxf86misc_INCLUDE_PATH AND X11_Xxf86misc_LIB)
-     set(X11_Xxf86misc_FOUND TRUE)
-     # Backwards compatibility.
-     set(X11_xf86misc_FOUND TRUE)
-     list(APPEND X11_INCLUDE_DIR ${X11_Xxf86misc_INCLUDE_PATH})
-  endif ()
-
-  if (X11_Xxf86vm_INCLUDE_PATH AND X11_Xxf86vm_LIB)
-     set(X11_Xxf86vm_FOUND TRUE)
-     # Backwards compatibility.
-     set(X11_xf86vmode_FOUND TRUE)
-     list(APPEND X11_INCLUDE_DIR ${X11_Xxf86vm_INCLUDE_PATH})
-  endif ()
-
-  if (X11_Xcursor_INCLUDE_PATH AND X11_Xcursor_LIB)
-     set(X11_Xcursor_FOUND TRUE)
-     list(APPEND X11_INCLUDE_DIR ${X11_Xcursor_INCLUDE_PATH})
-  endif ()
-
-  if (X11_Xss_INCLUDE_PATH AND X11_Xss_LIB)
-     set(X11_Xss_FOUND TRUE)
-     set(X11_Xscreensaver_FOUND TRUE)
-     list(APPEND X11_INCLUDE_DIR ${X11_Xss_INCLUDE_PATH})
-  endif ()
-
-  if (X11_dpms_INCLUDE_PATH)
-     set(X11_dpms_FOUND TRUE)
-     list(APPEND X11_INCLUDE_DIR ${X11_dpms_INCLUDE_PATH})
-  endif ()
-
-  if (X11_Xkb_INCLUDE_PATH AND X11_Xkblib_INCLUDE_PATH AND X11_Xlib_INCLUDE_PATH)
-     set(X11_Xkb_FOUND TRUE)
-     list(APPEND X11_INCLUDE_DIR ${X11_Xkb_INCLUDE_PATH} )
-  endif ()
-
-  if (X11_xkbcommon_INCLUDE_PATH AND X11_xkbcommon_LIB)
-     set(X11_xkbcommon_FOUND TRUE)
-  endif ()
-
-  if (X11_xkbcommon_X11_INCLUDE_PATH AND X11_xkbcommon_X11_LIB)
-     set(X11_xkbcommon_X11_FOUND TRUE)
-  endif ()
-
-  if (X11_xkbfile_INCLUDE_PATH AND X11_xkbfile_LIB AND X11_Xlib_INCLUDE_PATH)
-     set(X11_xkbfile_FOUND TRUE)
-     # Backwards compatibility.
-     set(X11_Xkbfile_FOUND TRUE)
-     list(APPEND X11_INCLUDE_DIR ${X11_xkbfile_INCLUDE_PATH} )
-  endif ()
-
-  if (X11_Xmu_INCLUDE_PATH AND X11_Xmu_LIB)
-     set(X11_Xmu_FOUND TRUE)
-     list(APPEND X11_INCLUDE_DIR ${X11_Xmu_INCLUDE_PATH})
-  endif ()
-
-  if (X11_XSync_INCLUDE_PATH)
-     set(X11_XSync_FOUND TRUE)
-     list(APPEND X11_INCLUDE_DIR ${X11_XSync_INCLUDE_PATH})
-  endif ()
-
-  if(X11_ICE_LIB AND X11_ICE_INCLUDE_PATH)
-     set(X11_ICE_FOUND TRUE)
-  endif()
-
-  if(X11_SM_LIB AND X11_SM_INCLUDE_PATH)
-     set(X11_SM_FOUND TRUE)
-  endif()
-
-  # Most of the X11 headers will be in the same directories, avoid
-  # creating a huge list of duplicates.
-  if (X11_INCLUDE_DIR)
-     list(REMOVE_DUPLICATES X11_INCLUDE_DIR)
-  endif ()
-
-  # Deprecated variable for backwards compatibility with CMake 1.4
-  if (X11_X11_INCLUDE_PATH AND X11_LIBRARIES)
-    set(X11_FOUND 1)
-  endif ()
-
-  include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-  find_package_handle_standard_args(X11
-    REQUIRED_VARS X11_X11_INCLUDE_PATH X11_X11_LIB
-    HANDLE_COMPONENTS)
-
-  if(X11_FOUND)
-    include(${CMAKE_CURRENT_LIST_DIR}/CheckFunctionExists.cmake)
-    include(${CMAKE_CURRENT_LIST_DIR}/CheckLibraryExists.cmake)
-
-    # Translated from an autoconf-generated configure script.
-    # See libs.m4 in autoconf's m4 directory.
-    if($ENV{ISC} MATCHES "^yes$")
-      set(X11_X_EXTRA_LIBS -lnsl_s -linet)
-    else()
-      set(X11_X_EXTRA_LIBS "")
-
-      # See if XOpenDisplay in X11 works by itself.
-      check_library_exists("${X11_LIBRARIES}" "XOpenDisplay" "${X11_LIBRARY_DIR}" X11_LIB_X11_SOLO)
-      if(NOT X11_LIB_X11_SOLO)
-        # Find library needed for dnet_ntoa.
-        check_library_exists("dnet" "dnet_ntoa" "" X11_LIB_DNET_HAS_DNET_NTOA)
-        if (X11_LIB_DNET_HAS_DNET_NTOA)
-          list(APPEND X11_X_EXTRA_LIBS -ldnet)
-        else ()
-          check_library_exists("dnet_stub" "dnet_ntoa" "" X11_LIB_DNET_STUB_HAS_DNET_NTOA)
-          if (X11_LIB_DNET_STUB_HAS_DNET_NTOA)
-            list(APPEND X11_X_EXTRA_LIBS -ldnet_stub)
-          endif ()
-        endif ()
-      endif()
-
-      # Find library needed for gethostbyname.
-      check_function_exists("gethostbyname" CMAKE_HAVE_GETHOSTBYNAME)
-      if(NOT CMAKE_HAVE_GETHOSTBYNAME)
-        check_library_exists("nsl" "gethostbyname" "" CMAKE_LIB_NSL_HAS_GETHOSTBYNAME)
-        if (CMAKE_LIB_NSL_HAS_GETHOSTBYNAME)
-          list(APPEND X11_X_EXTRA_LIBS -lnsl)
-        else ()
-          check_library_exists("bsd" "gethostbyname" "" CMAKE_LIB_BSD_HAS_GETHOSTBYNAME)
-          if (CMAKE_LIB_BSD_HAS_GETHOSTBYNAME)
-            list(APPEND X11_X_EXTRA_LIBS -lbsd)
-          endif ()
-        endif ()
-      endif()
-
-      # Find library needed for connect.
-      check_function_exists("connect" CMAKE_HAVE_CONNECT)
-      if(NOT CMAKE_HAVE_CONNECT)
-        check_library_exists("socket" "connect" "" CMAKE_LIB_SOCKET_HAS_CONNECT)
-        if (CMAKE_LIB_SOCKET_HAS_CONNECT)
-          list(INSERT X11_X_EXTRA_LIBS 0 -lsocket)
-        endif ()
-      endif()
-
-      # Find library needed for remove.
-      check_function_exists("remove" CMAKE_HAVE_REMOVE)
-      if(NOT CMAKE_HAVE_REMOVE)
-        check_library_exists("posix" "remove" "" CMAKE_LIB_POSIX_HAS_REMOVE)
-        if (CMAKE_LIB_POSIX_HAS_REMOVE)
-          list(APPEND X11_X_EXTRA_LIBS -lposix)
-        endif ()
-      endif()
-
-      # Find library needed for shmat.
-      check_function_exists("shmat" CMAKE_HAVE_SHMAT)
-      if(NOT CMAKE_HAVE_SHMAT)
-        check_library_exists("ipc" "shmat" "" CMAKE_LIB_IPS_HAS_SHMAT)
-        if (CMAKE_LIB_IPS_HAS_SHMAT)
-          list(APPEND X11_X_EXTRA_LIBS -lipc)
-        endif ()
-      endif()
-    endif()
-
-    if (X11_ICE_FOUND)
-      check_library_exists("ICE" "IceConnectionNumber" "${X11_LIBRARY_DIR}"
-                            CMAKE_LIB_ICE_HAS_ICECONNECTIONNUMBER)
-      if(CMAKE_LIB_ICE_HAS_ICECONNECTIONNUMBER)
-        set (X11_X_PRE_LIBS ${X11_ICE_LIB})
-        if(X11_SM_LIB)
-          list(INSERT X11_X_PRE_LIBS 0 ${X11_SM_LIB})
-        endif()
-      endif()
-    endif ()
-
-    # Build the final list of libraries.
-    set(X11_LIBRARIES ${X11_X_PRE_LIBS} ${X11_LIBRARIES} ${X11_X_EXTRA_LIBS})
-
-    if (NOT TARGET X11::X11)
-      add_library(X11::X11 UNKNOWN IMPORTED)
-      set_target_properties(X11::X11 PROPERTIES
-        IMPORTED_LOCATION "${X11_X11_LIB}"
-        INTERFACE_INCLUDE_DIRECTORIES "${X11_X11_INCLUDE_PATH}")
-    endif ()
-  endif ()
-
-  if (X11_ICE_FOUND AND NOT TARGET X11::ICE)
-    add_library(X11::ICE UNKNOWN IMPORTED)
-    set_target_properties(X11::ICE PROPERTIES
-      IMPORTED_LOCATION "${X11_ICE_LIB}"
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_ICE_INCLUDE_PATH}")
-  endif ()
-
-  if (X11_SM_FOUND AND NOT TARGET X11::SM)
-    add_library(X11::SM UNKNOWN IMPORTED)
-    set_target_properties(X11::SM PROPERTIES
-      IMPORTED_LOCATION "${X11_SM_LIB}"
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_SM_INCLUDE_PATH}")
-  endif ()
-
-  if (X11_Xau_FOUND AND NOT TARGET X11::Xau)
-    add_library(X11::Xau UNKNOWN IMPORTED)
-    set_target_properties(X11::Xau PROPERTIES
-      IMPORTED_LOCATION "${X11_Xau_LIB}"
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xau_INCLUDE_PATH}")
-  endif ()
-
-  if (X11_xcb_FOUND AND NOT TARGET X11::xcb)
-    add_library(X11::xcb UNKNOWN IMPORTED)
-    set_target_properties(X11::xcb PROPERTIES
-      IMPORTED_LOCATION "${X11_xcb_LIB}"
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_xcb_INCLUDE_PATH}")
-  endif ()
-
-  if (X11_X11_xcb_FOUND AND NOT TARGET X11::X11_xcb)
-    add_library(X11::X11_xcb UNKNOWN IMPORTED)
-    set_target_properties(X11::X11_xcb PROPERTIES
-      IMPORTED_LOCATION "${X11_X11_xcb_LIB}"
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_X11_xcb_INCLUDE_PATH}"
-      INTERFACE_LINK_LIBRARIES "X11::xcb;X11::X11")
-  endif ()
-
-  if (X11_xcb_icccm_FOUND AND NOT TARGET X11::xcb_icccm)
-    add_library(X11::xcb_icccm UNKNOWN IMPORTED)
-    set_target_properties(X11::xcb_icccm PROPERTIES
-      IMPORTED_LOCATION "${X11_xcb_icccm_LIB}"
-      INTERFACE_LINK_LIBRARIES "X11::xcb")
-  endif ()
-
-  if (X11_xcb_xkb_FOUND AND NOT TARGET X11::xcb_xkb)
-    add_library(X11::xcb_xkb UNKNOWN IMPORTED)
-    set_target_properties(X11::xcb_xkb PROPERTIES
-      IMPORTED_LOCATION "${X11_xcb_xkb_LIB}"
-      INTERFACE_LINK_LIBRARIES "X11::xcb")
-  endif ()
-
-  if (X11_Xcomposite_FOUND AND NOT TARGET X11::Xcomposite)
-    add_library(X11::Xcomposite UNKNOWN IMPORTED)
-    set_target_properties(X11::Xcomposite PROPERTIES
-      IMPORTED_LOCATION "${X11_Xcomposite_LIB}"
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xcomposite_INCLUDE_PATH}"
-      INTERFACE_LINK_LIBRARIES "X11::X11")
-  endif ()
-
-  if (X11_Xcursor_FOUND AND NOT TARGET X11::Xcursor)
-    add_library(X11::Xcursor UNKNOWN IMPORTED)
-    set_target_properties(X11::Xcursor PROPERTIES
-      IMPORTED_LOCATION "${X11_Xcursor_LIB}"
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xcursor_INCLUDE_PATH}"
-      INTERFACE_LINK_LIBRARIES "X11::Xrender;X11::Xfixes;X11::X11")
-  endif ()
-
-  if (X11_Xdamage_FOUND AND NOT TARGET X11::Xdamage)
-    add_library(X11::Xdamage UNKNOWN IMPORTED)
-    set_target_properties(X11::Xdamage PROPERTIES
-      IMPORTED_LOCATION "${X11_Xdamage_LIB}"
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xdamage_INCLUDE_PATH}"
-      INTERFACE_LINK_LIBRARIES "X11::Xfixes;X11::X11")
-  endif ()
-
-  if (X11_Xdmcp_FOUND AND NOT TARGET X11::Xdmcp)
-    add_library(X11::Xdmcp UNKNOWN IMPORTED)
-    set_target_properties(X11::Xdmcp PROPERTIES
-      IMPORTED_LOCATION "${X11_Xdmcp_LIB}"
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xdmcp_INCLUDE_PATH}")
-  endif ()
-
-  if (X11_Xext_FOUND AND NOT TARGET X11::Xext)
-    add_library(X11::Xext UNKNOWN IMPORTED)
-    set_target_properties(X11::Xext PROPERTIES
-      IMPORTED_LOCATION "${X11_Xext_LIB}"
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xext_INCLUDE_PATH}"
-      INTERFACE_LINK_LIBRARIES "X11::X11")
-  endif ()
-
-  if (X11_Xxf86misc_FOUND AND NOT TARGET X11::Xxf86misc)
-    add_library(X11::Xxf86misc UNKNOWN IMPORTED)
-    set_target_properties(X11::Xxf86misc PROPERTIES
-      IMPORTED_LOCATION "${X11_Xxf86misc_LIB}"
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xxf86misc_INCLUDE_PATH}"
-      INTERFACE_LINK_LIBRARIES "X11::X11;X11::Xext")
-  endif ()
-
-  if (X11_Xxf86vm_FOUND AND NOT TARGET X11::Xxf86vm)
-    add_library(X11::Xxf86vm UNKNOWN IMPORTED)
-    set_target_properties(X11::Xxf86vm PROPERTIES
-      IMPORTED_LOCATION "${X11_Xxf86vm_LIB}"
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xxf86vm_INCLUDE_PATH}"
-      INTERFACE_LINK_LIBRARIES "X11::X11;X11::Xext")
-  endif ()
-
-  if (X11_Xfixes_FOUND AND NOT TARGET X11::Xfixes)
-    add_library(X11::Xfixes UNKNOWN IMPORTED)
-    set_target_properties(X11::Xfixes PROPERTIES
-      IMPORTED_LOCATION "${X11_Xfixes_LIB}"
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xfixes_INCLUDE_PATH}"
-      INTERFACE_LINK_LIBRARIES "X11::X11")
-  endif ()
-
-  if (X11_Xft_FOUND AND NOT TARGET X11::Xft)
-    add_library(X11::Xft UNKNOWN IMPORTED)
-    set_target_properties(X11::Xft PROPERTIES
-      IMPORTED_LOCATION "${X11_Xft_LIB}"
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xft_INCLUDE_PATH}"
-      INTERFACE_LINK_LIBRARIES "X11::Xrender;X11::X11;Fontconfig::Fontconfig;Freetype::Freetype")
-  endif ()
-
-  if (X11_Xi_FOUND AND NOT TARGET X11::Xi)
-    add_library(X11::Xi UNKNOWN IMPORTED)
-    set_target_properties(X11::Xi PROPERTIES
-      IMPORTED_LOCATION "${X11_Xi_LIB}"
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xi_INCLUDE_PATH}"
-      INTERFACE_LINK_LIBRARIES "X11::Xext;X11::X11")
-  endif ()
-
-  if (X11_Xinerama_FOUND AND NOT TARGET X11::Xinerama)
-    add_library(X11::Xinerama UNKNOWN IMPORTED)
-    set_target_properties(X11::Xinerama PROPERTIES
-      IMPORTED_LOCATION "${X11_Xinerama_LIB}"
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xinerama_INCLUDE_PATH}"
-      INTERFACE_LINK_LIBRARIES "X11::Xext;X11::X11")
-  endif ()
-
-  if (X11_Xkb_FOUND AND NOT TARGET X11::Xkb)
-    add_library(X11::Xkb INTERFACE IMPORTED)
-    set_target_properties(X11::Xkb PROPERTIES
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xkb_INCLUDE_PATH}"
-      INTERFACE_LINK_LIBRARIES "X11::X11")
-  endif ()
-
-  if (X11_xkbcommon_FOUND AND NOT TARGET X11::xkbcommon)
-    add_library(X11::xkbcommon UNKNOWN IMPORTED)
-    set_target_properties(X11::xkbcommon PROPERTIES
-      IMPORTED_LOCATION "${X11_xkbcommon_LIB}"
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_xkbcommon_INCLUDE_PATH}")
-  endif ()
-
-  if (X11_xkbcommon_X11_FOUND AND NOT TARGET X11::xkbcommon_X11)
-    add_library(X11::xkbcommon_X11 UNKNOWN IMPORTED)
-    set_target_properties(X11::xkbcommon_X11 PROPERTIES
-      IMPORTED_LOCATION "${X11_xkbcommon_X11_LIB}"
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_xkbcommon_X11_INCLUDE_PATH}"
-      INTERFACE_LINK_LIBRARIES "X11::X11;X11::xkbcommon")
-  endif ()
-
-  if (X11_xkbfile_FOUND AND NOT TARGET X11::xkbfile)
-    add_library(X11::xkbfile UNKNOWN IMPORTED)
-    set_target_properties(X11::xkbfile PROPERTIES
-      IMPORTED_LOCATION "${X11_xkbfile_LIB}"
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_xkbfile_INCLUDE_PATH}"
-      INTERFACE_LINK_LIBRARIES "X11::X11")
-  endif ()
-
-  if (X11_Xmu_FOUND AND NOT TARGET X11::Xmu)
-    add_library(X11::Xmu UNKNOWN IMPORTED)
-    set_target_properties(X11::Xmu PROPERTIES
-      IMPORTED_LOCATION "${X11_Xmu_LIB}"
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xmu_INCLUDE_PATH}"
-      INTERFACE_LINK_LIBRARIES "X11::Xt;X11::Xext;X11::X11")
-  endif ()
-
-  if (X11_Xpm_FOUND AND NOT TARGET X11::Xpm)
-    add_library(X11::Xpm UNKNOWN IMPORTED)
-    set_target_properties(X11::Xpm PROPERTIES
-      IMPORTED_LOCATION "${X11_Xpm_LIB}"
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xpm_INCLUDE_PATH}"
-      INTERFACE_LINK_LIBRARIES "X11::X11")
-  endif ()
-
-  if (X11_Xtst_FOUND AND NOT TARGET X11::Xtst)
-    add_library(X11::Xtst UNKNOWN IMPORTED)
-    set_target_properties(X11::Xtst PROPERTIES
-      IMPORTED_LOCATION "${X11_Xtst_LIB}"
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xtst_INCLUDE_PATH}"
-      INTERFACE_LINK_LIBRARIES "X11::Xi;X11::Xext;X11::X11")
-  endif ()
-
-  if (X11_Xrandr_FOUND AND NOT TARGET X11::Xrandr)
-    add_library(X11::Xrandr UNKNOWN IMPORTED)
-    set_target_properties(X11::Xrandr PROPERTIES
-      IMPORTED_LOCATION "${X11_Xrandr_LIB}"
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xrandr_INCLUDE_PATH}"
-      INTERFACE_LINK_LIBRARIES "X11::Xrender;X11::Xext;X11::X11")
-  endif ()
-
-  if (X11_Xrender_FOUND AND NOT TARGET X11::Xrender)
-    add_library(X11::Xrender UNKNOWN IMPORTED)
-    set_target_properties(X11::Xrender PROPERTIES
-      IMPORTED_LOCATION "${X11_Xrender_LIB}"
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xrender_INCLUDE_PATH}"
-      INTERFACE_LINK_LIBRARIES "X11::X11")
-  endif ()
-
-  if (X11_XRes_FOUND AND NOT TARGET X11::XRes)
-    add_library(X11::XRes UNKNOWN IMPORTED)
-    set_target_properties(X11::XRes PROPERTIES
-      IMPORTED_LOCATION "${X11_XRes_LIB}"
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_XRes_INCLUDE_PATH}"
-      INTERFACE_LINK_LIBRARIES "X11::Xext;X11::X11")
-  endif ()
-
-  if (X11_Xss_FOUND AND NOT TARGET X11::Xss)
-    add_library(X11::Xss UNKNOWN IMPORTED)
-    set_target_properties(X11::Xss PROPERTIES
-      IMPORTED_LOCATION "${X11_Xss_LIB}"
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xss_INCLUDE_PATH}"
-      INTERFACE_LINK_LIBRARIES "X11::Xext;X11::X11")
-  endif ()
-
-  if (X11_Xt_FOUND AND NOT TARGET X11::Xt)
-    add_library(X11::Xt UNKNOWN IMPORTED)
-    set_target_properties(X11::Xt PROPERTIES
-      IMPORTED_LOCATION "${X11_Xt_LIB}"
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xt_INCLUDE_PATH}"
-      INTERFACE_LINK_LIBRARIES "X11::ICE;X11::SM;X11::X11")
-  endif ()
-
-  if (X11_Xutil_FOUND AND NOT TARGET X11::Xutil)
-    add_library(X11::Xutil INTERFACE IMPORTED)
-    set_target_properties(X11::Xutil PROPERTIES
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xutil_INCLUDE_PATH}"
-      # libX11 contains the implementations for functions in the Xutil.h
-      # header.
-      INTERFACE_LINK_LIBRARIES "X11::X11")
-  endif ()
-
-  if (X11_Xv_FOUND AND NOT TARGET X11::Xv)
-    add_library(X11::Xv UNKNOWN IMPORTED)
-    set_target_properties(X11::Xv PROPERTIES
-      IMPORTED_LOCATION "${X11_Xv_LIB}"
-      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xv_INCLUDE_PATH}"
-      INTERFACE_LINK_LIBRARIES "X11::Xext;X11::X11")
-  endif ()
-
-  mark_as_advanced(
-    X11_X11_INCLUDE_PATH
-    X11_X11_LIB
-    X11_Xext_INCLUDE_PATH
-    X11_Xext_LIB
-    X11_Xau_LIB
-    X11_Xau_INCLUDE_PATH
-    X11_xcb_LIB
-    X11_xcb_INCLUDE_PATH
-    X11_xcb_xkb_LIB
-    X11_X11_xcb_LIB
-    X11_X11_xcb_INCLUDE_PATH
-    X11_Xlib_INCLUDE_PATH
-    X11_Xutil_INCLUDE_PATH
-    X11_Xcomposite_INCLUDE_PATH
-    X11_Xcomposite_LIB
-    X11_Xfixes_LIB
-    X11_Xfixes_INCLUDE_PATH
-    X11_Xrandr_LIB
-    X11_Xrandr_INCLUDE_PATH
-    X11_Xdamage_LIB
-    X11_Xdamage_INCLUDE_PATH
-    X11_Xrender_LIB
-    X11_Xrender_INCLUDE_PATH
-    X11_XRes_LIB
-    X11_XRes_INCLUDE_PATH
-    X11_Xxf86misc_LIB
-    X11_Xxf86misc_INCLUDE_PATH
-    X11_Xxf86vm_LIB
-    X11_Xxf86vm_INCLUDE_PATH
-    X11_Xi_LIB
-    X11_Xi_INCLUDE_PATH
-    X11_Xinerama_LIB
-    X11_Xinerama_INCLUDE_PATH
-    X11_Xtst_LIB
-    X11_Xtst_INCLUDE_PATH
-    X11_Xcursor_LIB
-    X11_Xcursor_INCLUDE_PATH
-    X11_dpms_INCLUDE_PATH
-    X11_Xt_LIB
-    X11_Xt_INCLUDE_PATH
-    X11_Xdmcp_LIB
-    X11_LIBRARIES
-    X11_Xaccessrules_INCLUDE_PATH
-    X11_Xaccessstr_INCLUDE_PATH
-    X11_Xdmcp_INCLUDE_PATH
-    X11_Xkb_INCLUDE_PATH
-    X11_Xkblib_INCLUDE_PATH
-    X11_xkbcommon_INCLUDE_PATH
-    X11_xkbcommon_LIB
-    X11_xkbcommon_X11_INCLUDE_PATH
-    X11_xkbcommon_X11_LIB
-    X11_xkbfile_INCLUDE_PATH
-    X11_xkbfile_LIB
-    X11_Xmu_INCLUDE_PATH
-    X11_Xmu_LIB
-    X11_Xss_INCLUDE_PATH
-    X11_Xss_LIB
-    X11_Xpm_INCLUDE_PATH
-    X11_Xpm_LIB
-    X11_Xft_LIB
-    X11_Xft_INCLUDE_PATH
-    X11_Xshape_INCLUDE_PATH
-    X11_Xv_LIB
-    X11_Xv_INCLUDE_PATH
-    X11_XShm_INCLUDE_PATH
-    X11_ICE_LIB
-    X11_ICE_INCLUDE_PATH
-    X11_SM_LIB
-    X11_SM_INCLUDE_PATH
-    X11_XSync_INCLUDE_PATH
-  )
-  set(CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK_SAVE})
-  set(CMAKE_REQUIRED_QUIET ${CMAKE_REQUIRED_QUIET_SAVE})
-endif ()
diff --git a/share/cmake-3.18/Modules/FindXCTest.cmake b/share/cmake-3.18/Modules/FindXCTest.cmake
deleted file mode 100644
index 15721e1..0000000
--- a/share/cmake-3.18/Modules/FindXCTest.cmake
+++ /dev/null
@@ -1,213 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindXCTest
-----------
-
-Functions to help creating and executing XCTest bundles.
-
-An XCTest bundle is a CFBundle with a special product-type
-and bundle extension. The Mac Developer Library provides more
-information in the `Testing with Xcode`_ document.
-
-.. _Testing with Xcode: http://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/testing_with_xcode/
-
-Module Functions
-^^^^^^^^^^^^^^^^
-
-.. command:: xctest_add_bundle
-
-  The ``xctest_add_bundle`` function creates a XCTest bundle named
-  <target> which will test the target <testee>. Supported target types
-  for testee are Frameworks and App Bundles::
-
-    xctest_add_bundle(
-      <target>  # Name of the XCTest bundle
-      <testee>  # Target name of the testee
-      )
-
-.. command:: xctest_add_test
-
-  The ``xctest_add_test`` function adds an XCTest bundle to the
-  project to be run by :manual:`ctest(1)`. The test will be named
-  <name> and tests <bundle>::
-
-    xctest_add_test(
-      <name>    # Test name
-      <bundle>  # Target name of XCTest bundle
-      )
-
-Module Variables
-^^^^^^^^^^^^^^^^
-
-The following variables are set by including this module:
-
-.. variable:: XCTest_FOUND
-
-  True if the XCTest Framework and executable were found.
-
-.. variable:: XCTest_EXECUTABLE
-
-  The path to the xctest command line tool used to execute XCTest bundles.
-
-.. variable:: XCTest_INCLUDE_DIRS
-
-  The directory containing the XCTest Framework headers.
-
-.. variable:: XCTest_LIBRARIES
-
-  The location of the XCTest Framework.
-
-#]=======================================================================]
-
-set(_PRESERVED_CMAKE_FIND_ROOT_PATH "${CMAKE_FIND_ROOT_PATH}")
-
-if(CMAKE_EFFECTIVE_SYSTEM_NAME STREQUAL "Apple"
-   AND NOT CMAKE_SYSTEM_NAME STREQUAL "Darwin")
-  # Non-macos systems set the CMAKE_FIND_ROOT_PATH_MODE to "ONLY" which
-  # restricts the search paths too much to find XCTest.framework. In
-  # contrast to the regular system frameworks which reside within the
-  # SDK direectory the XCTest framework is located in the respective
-  # platform directory which is not added to the CMAKE_FIND_ROOT_PATH
-  # (only to CMAKE_SYSTEM_FRAMEWORK_PATH) and therefore not searched.
-  #
-  # Until this is properly addressed, temporaily add the platform
-  # directory to CMAKE_FIND_ROOT_PATH.
-  list(APPEND CMAKE_FIND_ROOT_PATH "${_CMAKE_OSX_SYSROOT_PATH}/../..")
-endif()
-
-find_path(XCTest_INCLUDE_DIR
-  NAMES "XCTest/XCTest.h"
-  DOC "XCTest include directory")
-mark_as_advanced(XCTest_INCLUDE_DIR)
-
-find_library(XCTest_LIBRARY
-  NAMES XCTest
-  DOC "XCTest Framework library")
-mark_as_advanced(XCTest_LIBRARY)
-
-set(CMAKE_FIND_ROOT_PATH "${_PRESERVED_CMAKE_FIND_ROOT_PATH}")
-unset(_PRESERVED_CMAKE_FIND_ROOT_PATH)
-
-execute_process(
-  COMMAND xcrun --find xctest
-  OUTPUT_VARIABLE _xcrun_out OUTPUT_STRIP_TRAILING_WHITESPACE
-  ERROR_VARIABLE _xcrun_err)
-if(_xcrun_out)
-  set(XCTest_EXECUTABLE "${_xcrun_out}" CACHE FILEPATH "XCTest executable")
-  mark_as_advanced(XCTest_EXECUTABLE)
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-find_package_handle_standard_args(XCTest
-  FOUND_VAR XCTest_FOUND
-  REQUIRED_VARS XCTest_LIBRARY XCTest_INCLUDE_DIR XCTest_EXECUTABLE)
-
-if(XCTest_FOUND)
-  set(XCTest_INCLUDE_DIRS "${XCTest_INCLUDE_DIR}")
-  set(XCTest_LIBRARIES "${XCTest_LIBRARY}")
-endif(XCTest_FOUND)
-
-
-function(xctest_add_bundle target testee)
-  if(NOT XCTest_FOUND)
-    message(FATAL_ERROR "XCTest is required to create a XCTest Bundle.")
-  endif(NOT XCTest_FOUND)
-
-  if(NOT CMAKE_OSX_SYSROOT)
-    message(FATAL_ERROR "Adding XCTest bundles requires CMAKE_OSX_SYSROOT to be set.")
-  endif()
-
-  add_library(${target} MODULE ${ARGN})
-
-  set_target_properties(${target} PROPERTIES
-    BUNDLE TRUE
-    XCTEST TRUE
-    XCTEST_TESTEE ${testee})
-
-  target_link_libraries(${target} PRIVATE "-framework Foundation")
-  target_link_libraries(${target} PRIVATE ${XCTest_LIBRARIES})
-  target_include_directories(${target} PRIVATE ${XCTest_INCLUDE_DIRS})
-
-  # retrieve testee target type
-  if(NOT TARGET ${testee})
-    message(FATAL_ERROR "${testee} is not a target.")
-  endif()
-  get_property(_testee_type TARGET ${testee} PROPERTY TYPE)
-  get_property(_testee_framework TARGET ${testee} PROPERTY FRAMEWORK)
-  get_property(_testee_macosx_bundle TARGET ${testee} PROPERTY MACOSX_BUNDLE)
-
-  if(_testee_type STREQUAL "SHARED_LIBRARY" AND _testee_framework)
-    # testee is a Framework
-    target_link_libraries(${target} PRIVATE ${testee})
-
-  elseif(_testee_type STREQUAL "STATIC_LIBRARY")
-    # testee is a static library
-    target_link_libraries(${target} PRIVATE ${testee})
-
-  elseif(_testee_type STREQUAL "EXECUTABLE" AND _testee_macosx_bundle)
-    # testee is an App Bundle
-    add_dependencies(${target} ${testee})
-    if(XCODE)
-      set_target_properties(${target} PROPERTIES
-        XCODE_ATTRIBUTE_BUNDLE_LOADER "$(TEST_HOST)"
-        XCODE_ATTRIBUTE_TEST_HOST "$<TARGET_FILE:${testee}>")
-      if(NOT XCODE_VERSION VERSION_LESS 7.3)
-        set_target_properties(${target} PROPERTIES
-          LIBRARY_OUTPUT_DIRECTORY "$<TARGET_BUNDLE_CONTENT_DIR:${testee}>/PlugIns")
-      endif()
-    else(XCODE)
-      target_link_libraries(${target}
-        PRIVATE -bundle_loader $<TARGET_FILE:${testee}>)
-    endif(XCODE)
-
-  else()
-    message(FATAL_ERROR "Testee ${testee} is of unsupported type.")
-  endif()
-endfunction(xctest_add_bundle)
-
-
-function(xctest_add_test name bundle)
-  if(NOT XCTest_EXECUTABLE)
-    message(FATAL_ERROR "XCTest executable is required to register a test.")
-  endif()
-
-  # check that bundle is a XCTest Bundle
-
-  if(NOT TARGET ${bundle})
-    message(FATAL_ERROR "${bundle} is not a target.")
-  endif(NOT TARGET ${bundle})
-
-  get_property(_test_type TARGET ${bundle} PROPERTY TYPE)
-  get_property(_test_bundle TARGET ${bundle} PROPERTY BUNDLE)
-  get_property(_test_xctest TARGET ${bundle} PROPERTY XCTEST)
-
-  if(NOT _test_type STREQUAL "MODULE_LIBRARY"
-       OR NOT _test_xctest OR NOT _test_bundle)
-    message(FATAL_ERROR "Test ${bundle} is not an XCTest Bundle")
-  endif()
-
-  # get and check testee properties
-
-  get_property(_testee TARGET ${bundle} PROPERTY XCTEST_TESTEE)
-  if(NOT TARGET ${_testee})
-    message(FATAL_ERROR "${_testee} is not a target.")
-  endif()
-
-  get_property(_testee_type TARGET ${_testee} PROPERTY TYPE)
-  get_property(_testee_framework TARGET ${_testee} PROPERTY FRAMEWORK)
-
-  # register test
-
-  add_test(
-    NAME ${name}
-    COMMAND ${XCTest_EXECUTABLE} $<TARGET_BUNDLE_DIR:${bundle}>)
-
-  # point loader to testee in case rpath is disabled
-
-  if(_testee_type STREQUAL "SHARED_LIBRARY" AND _testee_framework)
-    set_property(TEST ${name} APPEND PROPERTY
-      ENVIRONMENT DYLD_FRAMEWORK_PATH=$<TARGET_LINKER_FILE_DIR:${_testee}>/..)
-  endif()
-endfunction(xctest_add_test)
diff --git a/share/cmake-3.18/Modules/FindXalanC.cmake b/share/cmake-3.18/Modules/FindXalanC.cmake
deleted file mode 100644
index 54783e3..0000000
--- a/share/cmake-3.18/Modules/FindXalanC.cmake
+++ /dev/null
@@ -1,153 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindXalanC
------------
-
-Find the Apache Xalan-C++ XSL transform processor headers and libraries.
-
-Imported targets
-^^^^^^^^^^^^^^^^
-
-This module defines the following :prop_tgt:`IMPORTED` targets:
-
-``XalanC::XalanC``
-  The Xalan-C++ ``xalan-c`` library, if found.
-
-Result variables
-^^^^^^^^^^^^^^^^
-
-This module will set the following variables in your project:
-
-``XalanC_FOUND``
-  true if the Xalan headers and libraries were found
-``XalanC_VERSION``
-  Xalan release version
-``XalanC_INCLUDE_DIRS``
-  the directory containing the Xalan headers; note
-  ``XercesC_INCLUDE_DIRS`` is also required
-``XalanC_LIBRARIES``
-  Xalan libraries to be linked; note ``XercesC_LIBRARIES`` is also
-  required
-
-Cache variables
-^^^^^^^^^^^^^^^
-
-The following cache variables may also be set:
-
-``XalanC_INCLUDE_DIR``
-  the directory containing the Xalan headers
-``XalanC_LIBRARY``
-  the Xalan library
-#]=======================================================================]
-
-# Written by Roger Leigh <rleigh@codelibre.net>
-
-function(_XalanC_GET_VERSION  version_hdr)
-    file(STRINGS ${version_hdr} _contents REGEX "^[ \t]*#define XALAN_VERSION_.*")
-    if(_contents)
-        string(REGEX REPLACE "[^*]*#define XALAN_VERSION_MAJOR[ \t(]+([0-9]+).*" "\\1" XalanC_MAJOR "${_contents}")
-        string(REGEX REPLACE "[^*]*#define XALAN_VERSION_MINOR[ \t(]+([0-9]+).*" "\\1" XalanC_MINOR "${_contents}")
-        string(REGEX REPLACE "[^*]*#define XALAN_VERSION_REVISION[ \t(]+([0-9]+).*" "\\1" XalanC_PATCH "${_contents}")
-
-        if(NOT XalanC_MAJOR MATCHES "^[0-9]+$")
-            message(FATAL_ERROR "Version parsing failed for XALAN_VERSION_MAJOR!")
-        endif()
-        if(NOT XalanC_MINOR MATCHES "^[0-9]+$")
-            message(FATAL_ERROR "Version parsing failed for XALAN_VERSION_MINOR!")
-        endif()
-        if(NOT XalanC_PATCH MATCHES "^[0-9]+$")
-            message(FATAL_ERROR "Version parsing failed for XALAN_VERSION_REVISION!")
-        endif()
-
-        set(XalanC_VERSION "${XalanC_MAJOR}.${XalanC_MINOR}.${XalanC_PATCH}" PARENT_SCOPE)
-        set(XalanC_VERSION_MAJOR "${XalanC_MAJOR}" PARENT_SCOPE)
-        set(XalanC_VERSION_MINOR "${XalanC_MINOR}" PARENT_SCOPE)
-        set(XalanC_VERSION_PATCH "${XalanC_PATCH}" PARENT_SCOPE)
-    else()
-        message(FATAL_ERROR "Include file ${version_hdr} does not exist or does not contain expected version information")
-    endif()
-endfunction()
-
-# Find include directory
-find_path(XalanC_INCLUDE_DIR
-          NAMES "xalanc/XalanTransformer/XalanTransformer.hpp"
-          DOC "Xalan-C++ include directory")
-mark_as_advanced(XalanC_INCLUDE_DIR)
-
-if(XalanC_INCLUDE_DIR AND EXISTS "${XalanC_INCLUDE_DIR}/xalanc/Include/XalanVersion.hpp")
-  _XalanC_GET_VERSION("${XalanC_INCLUDE_DIR}/xalanc/Include/XalanVersion.hpp")
-endif()
-
-if(NOT XalanC_LIBRARY)
-  # Find all XalanC libraries
-  find_library(XalanC_LIBRARY_RELEASE
-               NAMES "Xalan-C" "xalan-c"
-                     "Xalan-C_${XalanC_VERSION_MAJOR}"
-                     "Xalan-C_${XalanC_VERSION_MAJOR}_${XalanC_VERSION_MINOR}"
-               DOC "Xalan-C++ libraries (release)")
-  find_library(XalanC_LIBRARY_DEBUG
-               NAMES "Xalan-CD" "xalan-cd"
-                     "Xalan-C_${XalanC_VERSION_MAJOR}D"
-                     "Xalan-C_${XalanC_VERSION_MAJOR}_${XalanC_VERSION_MINOR}D"
-               DOC "Xalan-C++ libraries (debug)")
-  include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
-  select_library_configurations(XalanC)
-  mark_as_advanced(XalanC_LIBRARY_RELEASE XalanC_LIBRARY_DEBUG)
-endif()
-
-unset(XalanC_VERSION_MAJOR)
-unset(XalanC_VERSION_MINOR)
-unset(XalanC_VERSION_PATCH)
-
-unset(XalanC_XERCESC_REQUIRED)
-if(XalanC_FIND_REQUIRED)
-  set(XalanC_XERCESC_REQUIRED REQUIRED)
-endif()
-find_package(XercesC ${XalanC_XERCESC_REQUIRED})
-unset(XalanC_XERCESC_REQUIRED)
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(XalanC
-                                  FOUND_VAR XalanC_FOUND
-                                  REQUIRED_VARS XalanC_LIBRARY
-                                                XalanC_INCLUDE_DIR
-                                                XalanC_VERSION
-                                                XercesC_FOUND
-                                  VERSION_VAR XalanC_VERSION
-                                  FAIL_MESSAGE "Failed to find XalanC")
-
-if(XalanC_FOUND)
-  set(XalanC_INCLUDE_DIRS "${XalanC_INCLUDE_DIR}" ${XercesC_INCLUDE_DIRS})
-  set(XalanC_LIBRARIES "${XalanC_LIBRARY}" ${XercesC_LIBRARIES})
-
-  # For header-only libraries
-  if(NOT TARGET XalanC::XalanC)
-    add_library(XalanC::XalanC UNKNOWN IMPORTED)
-    if(XalanC_INCLUDE_DIRS)
-      set_target_properties(XalanC::XalanC PROPERTIES
-        INTERFACE_INCLUDE_DIRECTORIES "${XalanC_INCLUDE_DIRS}")
-    endif()
-    if(EXISTS "${XalanC_LIBRARY}")
-      set_target_properties(XalanC::XalanC PROPERTIES
-        IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
-        IMPORTED_LOCATION "${XalanC_LIBRARY}")
-    endif()
-    if(EXISTS "${XalanC_LIBRARY_RELEASE}")
-      set_property(TARGET XalanC::XalanC APPEND PROPERTY
-        IMPORTED_CONFIGURATIONS RELEASE)
-      set_target_properties(XalanC::XalanC PROPERTIES
-        IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
-        IMPORTED_LOCATION_RELEASE "${XalanC_LIBRARY_RELEASE}")
-    endif()
-    if(EXISTS "${XalanC_LIBRARY_DEBUG}")
-      set_property(TARGET XalanC::XalanC APPEND PROPERTY
-        IMPORTED_CONFIGURATIONS DEBUG)
-      set_target_properties(XalanC::XalanC PROPERTIES
-        IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX"
-        IMPORTED_LOCATION_DEBUG "${XalanC_LIBRARY_DEBUG}")
-    endif()
-    set_target_properties(XalanC::XalanC PROPERTIES INTERFACE_LINK_LIBRARIES XercesC::XercesC)
-  endif()
-endif()
diff --git a/share/cmake-3.18/Modules/FindXercesC.cmake b/share/cmake-3.18/Modules/FindXercesC.cmake
deleted file mode 100644
index db78b61..0000000
--- a/share/cmake-3.18/Modules/FindXercesC.cmake
+++ /dev/null
@@ -1,142 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindXercesC
------------
-
-Find the Apache Xerces-C++ validating XML parser headers and libraries.
-
-Imported targets
-^^^^^^^^^^^^^^^^
-
-This module defines the following :prop_tgt:`IMPORTED` targets:
-
-``XercesC::XercesC``
-  The Xerces-C++ ``xerces-c`` library, if found.
-
-Result variables
-^^^^^^^^^^^^^^^^
-
-This module will set the following variables in your project:
-
-``XercesC_FOUND``
-  true if the Xerces headers and libraries were found
-``XercesC_VERSION``
-  Xerces release version
-``XercesC_INCLUDE_DIRS``
-  the directory containing the Xerces headers
-``XercesC_LIBRARIES``
-  Xerces libraries to be linked
-
-Cache variables
-^^^^^^^^^^^^^^^
-
-The following cache variables may also be set:
-
-``XercesC_INCLUDE_DIR``
-  the directory containing the Xerces headers
-``XercesC_LIBRARY``
-  the Xerces library
-#]=======================================================================]
-
-# Written by Roger Leigh <rleigh@codelibre.net>
-
-function(_XercesC_GET_VERSION  version_hdr)
-    file(STRINGS ${version_hdr} _contents REGEX "^[ \t]*#define XERCES_VERSION_.*")
-    if(_contents)
-        string(REGEX REPLACE ".*#define XERCES_VERSION_MAJOR[ \t]+([0-9]+).*" "\\1" XercesC_MAJOR "${_contents}")
-        string(REGEX REPLACE ".*#define XERCES_VERSION_MINOR[ \t]+([0-9]+).*" "\\1" XercesC_MINOR "${_contents}")
-        string(REGEX REPLACE ".*#define XERCES_VERSION_REVISION[ \t]+([0-9]+).*" "\\1" XercesC_PATCH "${_contents}")
-
-        if(NOT XercesC_MAJOR MATCHES "^[0-9]+$")
-            message(FATAL_ERROR "Version parsing failed for XERCES_VERSION_MAJOR!")
-        endif()
-        if(NOT XercesC_MINOR MATCHES "^[0-9]+$")
-            message(FATAL_ERROR "Version parsing failed for XERCES_VERSION_MINOR!")
-        endif()
-        if(NOT XercesC_PATCH MATCHES "^[0-9]+$")
-            message(FATAL_ERROR "Version parsing failed for XERCES_VERSION_REVISION!")
-        endif()
-
-        set(XercesC_VERSION "${XercesC_MAJOR}.${XercesC_MINOR}.${XercesC_PATCH}" PARENT_SCOPE)
-        set(XercesC_VERSION_MAJOR "${XercesC_MAJOR}" PARENT_SCOPE)
-        set(XercesC_VERSION_MINOR "${XercesC_MINOR}" PARENT_SCOPE)
-        set(XercesC_VERSION_PATCH "${XercesC_PATCH}" PARENT_SCOPE)
-    else()
-        message(FATAL_ERROR "Include file ${version_hdr} does not exist or does not contain expected version information")
-    endif()
-endfunction()
-
-# Find include directory
-find_path(XercesC_INCLUDE_DIR
-          NAMES "xercesc/util/PlatformUtils.hpp"
-          DOC "Xerces-C++ include directory")
-mark_as_advanced(XercesC_INCLUDE_DIR)
-
-if(XercesC_INCLUDE_DIR AND EXISTS "${XercesC_INCLUDE_DIR}/xercesc/util/XercesVersion.hpp")
-  _XercesC_GET_VERSION("${XercesC_INCLUDE_DIR}/xercesc/util/XercesVersion.hpp")
-endif()
-
-if(NOT XercesC_LIBRARY)
-  # Find all XercesC libraries
-  find_library(XercesC_LIBRARY_RELEASE
-               NAMES "xerces-c"
-                     "xerces-c_${XercesC_VERSION_MAJOR}"
-                     "xerces-c-${XercesC_VERSION_MAJOR}.${XercesC_VERSION_MINOR}"
-               DOC "Xerces-C++ libraries (release)")
-  find_library(XercesC_LIBRARY_DEBUG
-               NAMES "xerces-cd"
-                     "xerces-c_${XercesC_VERSION_MAJOR}D"
-                     "xerces-c_${XercesC_VERSION_MAJOR}_${XercesC_VERSION_MINOR}D"
-               DOC "Xerces-C++ libraries (debug)")
-  include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
-  select_library_configurations(XercesC)
-  mark_as_advanced(XercesC_LIBRARY_RELEASE XercesC_LIBRARY_DEBUG)
-endif()
-
-unset(XercesC_VERSION_MAJOR)
-unset(XercesC_VERSION_MINOR)
-unset(XercesC_VERSION_PATCH)
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(XercesC
-                                  FOUND_VAR XercesC_FOUND
-                                  REQUIRED_VARS XercesC_LIBRARY
-                                                XercesC_INCLUDE_DIR
-                                                XercesC_VERSION
-                                  VERSION_VAR XercesC_VERSION
-                                  FAIL_MESSAGE "Failed to find XercesC")
-
-if(XercesC_FOUND)
-  set(XercesC_INCLUDE_DIRS "${XercesC_INCLUDE_DIR}")
-  set(XercesC_LIBRARIES "${XercesC_LIBRARY}")
-
-  # For header-only libraries
-  if(NOT TARGET XercesC::XercesC)
-    add_library(XercesC::XercesC UNKNOWN IMPORTED)
-    if(XercesC_INCLUDE_DIRS)
-      set_target_properties(XercesC::XercesC PROPERTIES
-        INTERFACE_INCLUDE_DIRECTORIES "${XercesC_INCLUDE_DIRS}")
-    endif()
-    if(EXISTS "${XercesC_LIBRARY}")
-      set_target_properties(XercesC::XercesC PROPERTIES
-        IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
-        IMPORTED_LOCATION "${XercesC_LIBRARY}")
-    endif()
-    if(EXISTS "${XercesC_LIBRARY_RELEASE}")
-      set_property(TARGET XercesC::XercesC APPEND PROPERTY
-        IMPORTED_CONFIGURATIONS RELEASE)
-      set_target_properties(XercesC::XercesC PROPERTIES
-        IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
-        IMPORTED_LOCATION_RELEASE "${XercesC_LIBRARY_RELEASE}")
-    endif()
-    if(EXISTS "${XercesC_LIBRARY_DEBUG}")
-      set_property(TARGET XercesC::XercesC APPEND PROPERTY
-        IMPORTED_CONFIGURATIONS DEBUG)
-      set_target_properties(XercesC::XercesC PROPERTIES
-        IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX"
-        IMPORTED_LOCATION_DEBUG "${XercesC_LIBRARY_DEBUG}")
-    endif()
-  endif()
-endif()
diff --git a/share/cmake-3.18/Modules/FindZLIB.cmake b/share/cmake-3.18/Modules/FindZLIB.cmake
deleted file mode 100644
index 79e2313..0000000
--- a/share/cmake-3.18/Modules/FindZLIB.cmake
+++ /dev/null
@@ -1,149 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindZLIB
---------
-
-Find the native ZLIB includes and library.
-
-IMPORTED Targets
-^^^^^^^^^^^^^^^^
-
-This module defines :prop_tgt:`IMPORTED` target ``ZLIB::ZLIB``, if
-ZLIB has been found.
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-This module defines the following variables:
-
-::
-
-  ZLIB_INCLUDE_DIRS   - where to find zlib.h, etc.
-  ZLIB_LIBRARIES      - List of libraries when using zlib.
-  ZLIB_FOUND          - True if zlib found.
-
-::
-
-  ZLIB_VERSION_STRING - The version of zlib found (x.y.z)
-  ZLIB_VERSION_MAJOR  - The major version of zlib
-  ZLIB_VERSION_MINOR  - The minor version of zlib
-  ZLIB_VERSION_PATCH  - The patch version of zlib
-  ZLIB_VERSION_TWEAK  - The tweak version of zlib
-
-Backward Compatibility
-^^^^^^^^^^^^^^^^^^^^^^
-
-The following variable are provided for backward compatibility
-
-::
-
-  ZLIB_MAJOR_VERSION  - The major version of zlib
-  ZLIB_MINOR_VERSION  - The minor version of zlib
-  ZLIB_PATCH_VERSION  - The patch version of zlib
-
-Hints
-^^^^^
-
-A user may set ``ZLIB_ROOT`` to a zlib installation root to tell this
-module where to look.
-#]=======================================================================]
-
-set(_ZLIB_SEARCHES)
-
-# Search ZLIB_ROOT first if it is set.
-if(ZLIB_ROOT)
-  set(_ZLIB_SEARCH_ROOT PATHS ${ZLIB_ROOT} NO_DEFAULT_PATH)
-  list(APPEND _ZLIB_SEARCHES _ZLIB_SEARCH_ROOT)
-endif()
-
-# Normal search.
-set(_ZLIB_x86 "(x86)")
-set(_ZLIB_SEARCH_NORMAL
-    PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\Zlib;InstallPath]"
-          "$ENV{ProgramFiles}/zlib"
-          "$ENV{ProgramFiles${_ZLIB_x86}}/zlib")
-unset(_ZLIB_x86)
-list(APPEND _ZLIB_SEARCHES _ZLIB_SEARCH_NORMAL)
-
-set(ZLIB_NAMES z zlib zdll zlib1 zlibstatic)
-set(ZLIB_NAMES_DEBUG zd zlibd zdlld zlibd1 zlib1d zlibstaticd)
-
-# Try each search configuration.
-foreach(search ${_ZLIB_SEARCHES})
-  find_path(ZLIB_INCLUDE_DIR NAMES zlib.h ${${search}} PATH_SUFFIXES include)
-endforeach()
-
-# Allow ZLIB_LIBRARY to be set manually, as the location of the zlib library
-if(NOT ZLIB_LIBRARY)
-  foreach(search ${_ZLIB_SEARCHES})
-    find_library(ZLIB_LIBRARY_RELEASE NAMES ${ZLIB_NAMES} NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib)
-    find_library(ZLIB_LIBRARY_DEBUG NAMES ${ZLIB_NAMES_DEBUG} NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib)
-  endforeach()
-
-  include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
-  select_library_configurations(ZLIB)
-endif()
-
-unset(ZLIB_NAMES)
-unset(ZLIB_NAMES_DEBUG)
-
-mark_as_advanced(ZLIB_INCLUDE_DIR)
-
-if(ZLIB_INCLUDE_DIR AND EXISTS "${ZLIB_INCLUDE_DIR}/zlib.h")
-    file(STRINGS "${ZLIB_INCLUDE_DIR}/zlib.h" ZLIB_H REGEX "^#define ZLIB_VERSION \"[^\"]*\"$")
-
-    string(REGEX REPLACE "^.*ZLIB_VERSION \"([0-9]+).*$" "\\1" ZLIB_VERSION_MAJOR "${ZLIB_H}")
-    string(REGEX REPLACE "^.*ZLIB_VERSION \"[0-9]+\\.([0-9]+).*$" "\\1" ZLIB_VERSION_MINOR  "${ZLIB_H}")
-    string(REGEX REPLACE "^.*ZLIB_VERSION \"[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1" ZLIB_VERSION_PATCH "${ZLIB_H}")
-    set(ZLIB_VERSION_STRING "${ZLIB_VERSION_MAJOR}.${ZLIB_VERSION_MINOR}.${ZLIB_VERSION_PATCH}")
-
-    # only append a TWEAK version if it exists:
-    set(ZLIB_VERSION_TWEAK "")
-    if( "${ZLIB_H}" MATCHES "ZLIB_VERSION \"[0-9]+\\.[0-9]+\\.[0-9]+\\.([0-9]+)")
-        set(ZLIB_VERSION_TWEAK "${CMAKE_MATCH_1}")
-        string(APPEND ZLIB_VERSION_STRING ".${ZLIB_VERSION_TWEAK}")
-    endif()
-
-    set(ZLIB_MAJOR_VERSION "${ZLIB_VERSION_MAJOR}")
-    set(ZLIB_MINOR_VERSION "${ZLIB_VERSION_MINOR}")
-    set(ZLIB_PATCH_VERSION "${ZLIB_VERSION_PATCH}")
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(ZLIB REQUIRED_VARS ZLIB_LIBRARY ZLIB_INCLUDE_DIR
-                                       VERSION_VAR ZLIB_VERSION_STRING)
-
-if(ZLIB_FOUND)
-    set(ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR})
-
-    if(NOT ZLIB_LIBRARIES)
-      set(ZLIB_LIBRARIES ${ZLIB_LIBRARY})
-    endif()
-
-    if(NOT TARGET ZLIB::ZLIB)
-      add_library(ZLIB::ZLIB UNKNOWN IMPORTED)
-      set_target_properties(ZLIB::ZLIB PROPERTIES
-        INTERFACE_INCLUDE_DIRECTORIES "${ZLIB_INCLUDE_DIRS}")
-
-      if(ZLIB_LIBRARY_RELEASE)
-        set_property(TARGET ZLIB::ZLIB APPEND PROPERTY
-          IMPORTED_CONFIGURATIONS RELEASE)
-        set_target_properties(ZLIB::ZLIB PROPERTIES
-          IMPORTED_LOCATION_RELEASE "${ZLIB_LIBRARY_RELEASE}")
-      endif()
-
-      if(ZLIB_LIBRARY_DEBUG)
-        set_property(TARGET ZLIB::ZLIB APPEND PROPERTY
-          IMPORTED_CONFIGURATIONS DEBUG)
-        set_target_properties(ZLIB::ZLIB PROPERTIES
-          IMPORTED_LOCATION_DEBUG "${ZLIB_LIBRARY_DEBUG}")
-      endif()
-
-      if(NOT ZLIB_LIBRARY_RELEASE AND NOT ZLIB_LIBRARY_DEBUG)
-        set_property(TARGET ZLIB::ZLIB APPEND PROPERTY
-          IMPORTED_LOCATION "${ZLIB_LIBRARY}")
-      endif()
-    endif()
-endif()
diff --git a/share/cmake-3.18/Modules/FindwxWidgets.cmake b/share/cmake-3.18/Modules/FindwxWidgets.cmake
deleted file mode 100644
index 93ac51d..0000000
--- a/share/cmake-3.18/Modules/FindwxWidgets.cmake
+++ /dev/null
@@ -1,1226 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindwxWidgets
--------------
-
-Find a wxWidgets (a.k.a., wxWindows) installation.
-
-This module finds if wxWidgets is installed and selects a default
-configuration to use.  wxWidgets is a modular library.  To specify the
-modules that you will use, you need to name them as components to the
-package:
-
-find_package(wxWidgets COMPONENTS core base ... OPTIONAL_COMPONENTS net ...)
-
-There are two search branches: a windows style and a unix style.  For
-windows, the following variables are searched for and set to defaults
-in case of multiple choices.  Change them if the defaults are not
-desired (i.e., these are the only variables you should change to
-select a configuration):
-
-::
-
-  wxWidgets_ROOT_DIR      - Base wxWidgets directory
-                            (e.g., C:/wxWidgets-2.6.3).
-  wxWidgets_LIB_DIR       - Path to wxWidgets libraries
-                            (e.g., C:/wxWidgets-2.6.3/lib/vc_lib).
-  wxWidgets_CONFIGURATION - Configuration to use
-                            (e.g., msw, mswd, mswu, mswunivud, etc.)
-  wxWidgets_EXCLUDE_COMMON_LIBRARIES
-                          - Set to TRUE to exclude linking of
-                            commonly required libs (e.g., png tiff
-                            jpeg zlib regex expat).
-
-
-
-For unix style it uses the wx-config utility.  You can select between
-debug/release, unicode/ansi, universal/non-universal, and
-static/shared in the QtDialog or ccmake interfaces by turning ON/OFF
-the following variables:
-
-::
-
-  wxWidgets_USE_DEBUG
-  wxWidgets_USE_UNICODE
-  wxWidgets_USE_UNIVERSAL
-  wxWidgets_USE_STATIC
-
-
-
-There is also a wxWidgets_CONFIG_OPTIONS variable for all other
-options that need to be passed to the wx-config utility.  For example,
-to use the base toolkit found in the /usr/local path, set the variable
-(before calling the FIND_PACKAGE command) as such:
-
-::
-
-  set(wxWidgets_CONFIG_OPTIONS --toolkit=base --prefix=/usr)
-
-
-
-The following are set after the configuration is done for both windows
-and unix style:
-
-::
-
-  wxWidgets_FOUND            - Set to TRUE if wxWidgets was found.
-  wxWidgets_INCLUDE_DIRS     - Include directories for WIN32
-                               i.e., where to find "wx/wx.h" and
-                               "wx/setup.h"; possibly empty for unices.
-  wxWidgets_LIBRARIES        - Path to the wxWidgets libraries.
-  wxWidgets_LIBRARY_DIRS     - compile time link dirs, useful for
-                               rpath on UNIX. Typically an empty string
-                               in WIN32 environment.
-  wxWidgets_DEFINITIONS      - Contains defines required to compile/link
-                               against WX, e.g. WXUSINGDLL
-  wxWidgets_DEFINITIONS_DEBUG- Contains defines required to compile/link
-                               against WX debug builds, e.g. __WXDEBUG__
-  wxWidgets_CXX_FLAGS        - Include dirs and compiler flags for
-                               unices, empty on WIN32. Essentially
-                               "`wx-config --cxxflags`".
-  wxWidgets_USE_FILE         - Convenience include file.
-
-
-
-Sample usage:
-
-::
-
-   # Note that for MinGW users the order of libs is important!
-   find_package(wxWidgets COMPONENTS gl core base OPTIONAL_COMPONENTS net)
-   if(wxWidgets_FOUND)
-     include(${wxWidgets_USE_FILE})
-     # and for each of your dependent executable/library targets:
-     target_link_libraries(<YourTarget> ${wxWidgets_LIBRARIES})
-   endif()
-
-
-
-If wxWidgets is required (i.e., not an optional part):
-
-::
-
-   find_package(wxWidgets REQUIRED gl core base OPTIONAL_COMPONENTS net)
-   include(${wxWidgets_USE_FILE})
-   # and for each of your dependent executable/library targets:
-   target_link_libraries(<YourTarget> ${wxWidgets_LIBRARIES})
-#]=======================================================================]
-
-#
-# FIXME: check this and provide a correct sample usage...
-#        Remember to connect back to the upper text.
-# Sample usage with monolithic wx build:
-#
-#   find_package(wxWidgets COMPONENTS mono)
-#   ...
-
-# NOTES
-#
-# This module has been tested on the WIN32 platform with wxWidgets
-# 2.6.2, 2.6.3, and 2.5.3. However, it has been designed to
-# easily extend support to all possible builds, e.g., static/shared,
-# debug/release, unicode, universal, multilib/monolithic, etc..
-#
-# If you want to use the module and your build type is not supported
-# out-of-the-box, please contact me to exchange information on how
-# your system is setup and I'll try to add support for it.
-#
-# AUTHOR
-#
-# Miguel A. Figueroa-Villanueva (miguelf at ieee dot org).
-# Jan Woetzel (jw at mip.informatik.uni-kiel.de).
-#
-# Based on previous works of:
-# Jan Woetzel (FindwxWindows.cmake),
-# Jorgen Bodde and Jerry Fath (FindwxWin.cmake).
-
-# TODO/ideas
-#
-# (1) Option/Setting to use all available wx libs
-# In contrast to expert developer who lists the
-# minimal set of required libs in wxWidgets_USE_LIBS
-# there is the newbie user:
-#   - who just wants to link against WX with more 'magic'
-#   - doesn't know the internal structure of WX or how it was built,
-#     in particular if it is monolithic or not
-#   - want to link against all available WX libs
-# Basically, the intent here is to mimic what wx-config would do by
-# default (i.e., `wx-config --libs`).
-#
-# Possible solution:
-#   Add a reserved keyword "std" that initializes to what wx-config
-# would default to. If the user has not set the wxWidgets_USE_LIBS,
-# default to "std" instead of "base core" as it is now. To implement
-# "std" will basically boil down to a FOR_EACH lib-FOUND, but maybe
-# checking whether a minimal set was found.
-
-
-# FIXME: This and all the DBG_MSG calls should be removed after the
-# module stabilizes.
-#
-# Helper macro to control the debugging output globally. There are
-# two versions for controlling how verbose your output should be.
-macro(DBG_MSG _MSG)
-#  message(STATUS
-#    "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): ${_MSG}")
-endmacro()
-macro(DBG_MSG_V _MSG)
-#  message(STATUS
-#    "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): ${_MSG}")
-endmacro()
-
-# Clear return values in case the module is loaded more than once.
-set(wxWidgets_FOUND FALSE)
-set(wxWidgets_INCLUDE_DIRS "")
-set(wxWidgets_LIBRARIES    "")
-set(wxWidgets_LIBRARY_DIRS "")
-set(wxWidgets_CXX_FLAGS    "")
-
-# DEPRECATED: This is a patch to support the DEPRECATED use of
-# wxWidgets_USE_LIBS.
-#
-# If wxWidgets_USE_LIBS is set:
-# - if using <components>, then override wxWidgets_USE_LIBS
-# - else set wxWidgets_FIND_COMPONENTS to wxWidgets_USE_LIBS
-if(wxWidgets_USE_LIBS AND NOT wxWidgets_FIND_COMPONENTS)
-  set(wxWidgets_FIND_COMPONENTS ${wxWidgets_USE_LIBS})
-endif()
-DBG_MSG("wxWidgets_FIND_COMPONENTS : ${wxWidgets_FIND_COMPONENTS}")
-
-# Add the convenience use file if available.
-#
-# Get dir of this file which may reside in:
-# - CMAKE_MAKE_ROOT/Modules on CMake installation
-# - CMAKE_MODULE_PATH if user prefers his own specialized version
-set(wxWidgets_USE_FILE "")
-get_filename_component(
-  wxWidgets_CURRENT_LIST_DIR ${CMAKE_CURRENT_LIST_FILE} PATH)
-# Prefer an existing customized version, but the user might override
-# the FindwxWidgets module and not the UsewxWidgets one.
-if(EXISTS "${wxWidgets_CURRENT_LIST_DIR}/UsewxWidgets.cmake")
-  set(wxWidgets_USE_FILE
-    "${wxWidgets_CURRENT_LIST_DIR}/UsewxWidgets.cmake")
-else()
-  set(wxWidgets_USE_FILE UsewxWidgets)
-endif()
-
-#=====================================================================
-# Determine whether unix or win32 paths should be used
-#=====================================================================
-if(WIN32 AND NOT CYGWIN AND NOT MSYS AND NOT CMAKE_CROSSCOMPILING)
-  set(wxWidgets_FIND_STYLE "win32")
-else()
-  set(wxWidgets_FIND_STYLE "unix")
-endif()
-
-#=====================================================================
-# WIN32_FIND_STYLE
-#=====================================================================
-if(wxWidgets_FIND_STYLE STREQUAL "win32")
-  # Useful common wx libs needed by almost all components.
-  set(wxWidgets_COMMON_LIBRARIES png tiff jpeg zlib regex expat)
-
-  # DEPRECATED: Use find_package(wxWidgets COMPONENTS mono) instead.
-  if(NOT wxWidgets_FIND_COMPONENTS)
-    if(wxWidgets_USE_MONOLITHIC)
-      set(wxWidgets_FIND_COMPONENTS mono)
-    else()
-      set(wxWidgets_FIND_COMPONENTS core base) # this is default
-    endif()
-  endif()
-
-  # Add the common (usually required libs) unless
-  # wxWidgets_EXCLUDE_COMMON_LIBRARIES has been set.
-  if(NOT wxWidgets_EXCLUDE_COMMON_LIBRARIES)
-    list(APPEND wxWidgets_FIND_COMPONENTS
-      ${wxWidgets_COMMON_LIBRARIES})
-  endif()
-
-  #-------------------------------------------------------------------
-  # WIN32: Helper MACROS
-  #-------------------------------------------------------------------
-  #
-  # Get filename components for a configuration. For example,
-  #   if _CONFIGURATION = mswunivud, then _PF="msw", _UNV=univ, _UCD=u _DBG=d
-  #   if _CONFIGURATION = mswu,      then _PF="msw", _UNV="",   _UCD=u _DBG=""
-  #
-  macro(WX_GET_NAME_COMPONENTS _CONFIGURATION _PF _UNV _UCD _DBG)
-    DBG_MSG_V(${_CONFIGURATION})
-    string(REGEX MATCH "univ" ${_UNV} "${_CONFIGURATION}")
-    string(REGEX REPLACE "[msw|qt].*(u)[d]*$" "u" ${_UCD} "${_CONFIGURATION}")
-    if(${_UCD} STREQUAL ${_CONFIGURATION})
-      set(${_UCD} "")
-    endif()
-    string(REGEX MATCH "d$" ${_DBG} "${_CONFIGURATION}")
-    string(REGEX MATCH "^[msw|qt]*" ${_PF} "${_CONFIGURATION}")
-  endmacro()
-
-  #
-  # Find libraries associated to a configuration.
-  #
-  macro(WX_FIND_LIBS _PF _UNV _UCD _DBG)
-    DBG_MSG_V("m_unv = ${_UNV}")
-    DBG_MSG_V("m_ucd = ${_UCD}")
-    DBG_MSG_V("m_dbg = ${_DBG}")
-
-    # FIXME: What if both regex libs are available. regex should be
-    # found outside the loop and only wx${LIB}${_UCD}${_DBG}.
-    # Find wxWidgets common libraries.
-    foreach(LIB ${wxWidgets_COMMON_LIBRARIES} scintilla)
-      find_library(WX_${LIB}${_DBG}
-        NAMES
-        wx${LIB}${_UCD}${_DBG} # for regex
-        wx${LIB}${_DBG}
-        PATHS ${WX_LIB_DIR}
-        NO_DEFAULT_PATH
-        )
-      mark_as_advanced(WX_${LIB}${_DBG})
-    endforeach()
-
-    # Find wxWidgets multilib base libraries.
-    find_library(WX_base${_DBG}
-      NAMES
-      wxbase31${_UCD}${_DBG}
-      wxbase30${_UCD}${_DBG}
-      wxbase29${_UCD}${_DBG}
-      wxbase28${_UCD}${_DBG}
-      wxbase27${_UCD}${_DBG}
-      wxbase26${_UCD}${_DBG}
-      wxbase25${_UCD}${_DBG}
-      PATHS ${WX_LIB_DIR}
-      NO_DEFAULT_PATH
-      )
-    mark_as_advanced(WX_base${_DBG})
-    foreach(LIB net odbc xml)
-      find_library(WX_${LIB}${_DBG}
-        NAMES
-        wxbase31${_UCD}${_DBG}_${LIB}
-        wxbase30${_UCD}${_DBG}_${LIB}
-        wxbase29${_UCD}${_DBG}_${LIB}
-        wxbase28${_UCD}${_DBG}_${LIB}
-        wxbase27${_UCD}${_DBG}_${LIB}
-        wxbase26${_UCD}${_DBG}_${LIB}
-        wxbase25${_UCD}${_DBG}_${LIB}
-        PATHS ${WX_LIB_DIR}
-        NO_DEFAULT_PATH
-        )
-      mark_as_advanced(WX_${LIB}${_DBG})
-    endforeach()
-
-    # Find wxWidgets monolithic library.
-    find_library(WX_mono${_DBG}
-      NAMES
-      wx${_PF}${_UNV}31${_UCD}${_DBG}
-      wx${_PF}${_UNV}30${_UCD}${_DBG}
-      wx${_PF}${_UNV}29${_UCD}${_DBG}
-      wx${_PF}${_UNV}28${_UCD}${_DBG}
-      wx${_PF}${_UNV}27${_UCD}${_DBG}
-      wx${_PF}${_UNV}26${_UCD}${_DBG}
-      wx${_PF}${_UNV}25${_UCD}${_DBG}
-      PATHS ${WX_LIB_DIR}
-      NO_DEFAULT_PATH
-      )
-    mark_as_advanced(WX_mono${_DBG})
-
-    # Find wxWidgets multilib libraries.
-    foreach(LIB core adv aui html media xrc dbgrid gl qa richtext
-                stc ribbon propgrid webview)
-      find_library(WX_${LIB}${_DBG}
-        NAMES
-        wx${_PF}${_UNV}31${_UCD}${_DBG}_${LIB}
-        wx${_PF}${_UNV}30${_UCD}${_DBG}_${LIB}
-        wx${_PF}${_UNV}29${_UCD}${_DBG}_${LIB}
-        wx${_PF}${_UNV}28${_UCD}${_DBG}_${LIB}
-        wx${_PF}${_UNV}27${_UCD}${_DBG}_${LIB}
-        wx${_PF}${_UNV}26${_UCD}${_DBG}_${LIB}
-        wx${_PF}${_UNV}25${_UCD}${_DBG}_${LIB}
-        PATHS ${WX_LIB_DIR}
-        NO_DEFAULT_PATH
-        )
-      mark_as_advanced(WX_${LIB}${_DBG})
-    endforeach()
-  endmacro()
-
-  #
-  # Clear all library paths, so that FIND_LIBRARY refinds them.
-  #
-  # Clear a lib, reset its found flag, and mark as advanced.
-  macro(WX_CLEAR_LIB _LIB)
-    set(${_LIB} "${_LIB}-NOTFOUND" CACHE FILEPATH "Cleared." FORCE)
-    set(${_LIB}_FOUND FALSE)
-    mark_as_advanced(${_LIB})
-  endmacro()
-  # Clear all debug or release library paths (arguments are "d" or "").
-  macro(WX_CLEAR_ALL_LIBS _DBG)
-    # Clear wxWidgets common libraries.
-    foreach(LIB ${wxWidgets_COMMON_LIBRARIES} scintilla)
-      WX_CLEAR_LIB(WX_${LIB}${_DBG})
-    endforeach()
-
-    # Clear wxWidgets multilib base libraries.
-    WX_CLEAR_LIB(WX_base${_DBG})
-    foreach(LIB net odbc xml)
-      WX_CLEAR_LIB(WX_${LIB}${_DBG})
-    endforeach()
-
-    # Clear wxWidgets monolithic library.
-    WX_CLEAR_LIB(WX_mono${_DBG})
-
-    # Clear wxWidgets multilib libraries.
-    foreach(LIB core adv aui html media xrc dbgrid gl qa richtext
-                webview stc ribbon propgrid)
-      WX_CLEAR_LIB(WX_${LIB}${_DBG})
-    endforeach()
-  endmacro()
-  # Clear all wxWidgets debug libraries.
-  macro(WX_CLEAR_ALL_DBG_LIBS)
-    WX_CLEAR_ALL_LIBS("d")
-  endmacro()
-  # Clear all wxWidgets release libraries.
-  macro(WX_CLEAR_ALL_REL_LIBS)
-    WX_CLEAR_ALL_LIBS("")
-  endmacro()
-
-  #
-  # Set the wxWidgets_LIBRARIES variable.
-  # Also, Sets output variable wxWidgets_FOUND to FALSE if it fails.
-  #
-  macro(WX_SET_LIBRARIES _LIBS _DBG)
-    DBG_MSG_V("Looking for ${${_LIBS}}")
-    if(WX_USE_REL_AND_DBG)
-      foreach(LIB ${${_LIBS}})
-        DBG_MSG_V("Searching for ${LIB} and ${LIB}d")
-        DBG_MSG_V("WX_${LIB}  : ${WX_${LIB}}")
-        DBG_MSG_V("WX_${LIB}d : ${WX_${LIB}d}")
-        if(WX_${LIB} AND WX_${LIB}d)
-          DBG_MSG_V("Found ${LIB} and ${LIB}d")
-          list(APPEND wxWidgets_LIBRARIES
-            debug ${WX_${LIB}d} optimized ${WX_${LIB}}
-            )
-          set(wxWidgets_${LIB}_FOUND TRUE)
-        elseif(NOT wxWidgets_FIND_REQUIRED_${LIB})
-          DBG_MSG_V("- ignored optional missing WX_${LIB}=${WX_${LIB}} or WX_${LIB}d=${WX_${LIB}d}")
-        else()
-          DBG_MSG_V("- not found due to missing WX_${LIB}=${WX_${LIB}} or WX_${LIB}d=${WX_${LIB}d}")
-          set(wxWidgets_FOUND FALSE)
-        endif()
-      endforeach()
-    else()
-      foreach(LIB ${${_LIBS}})
-        DBG_MSG_V("Searching for ${LIB}${_DBG}")
-        DBG_MSG_V("WX_${LIB}${_DBG} : ${WX_${LIB}${_DBG}}")
-        if(WX_${LIB}${_DBG})
-          DBG_MSG_V("Found ${LIB}${_DBG}")
-          list(APPEND wxWidgets_LIBRARIES ${WX_${LIB}${_DBG}})
-          set(wxWidgets_${LIB}_FOUND TRUE)
-        elseif(NOT wxWidgets_FIND_REQUIRED_${LIB})
-          DBG_MSG_V("- ignored optional missing WX_${LIB}${_DBG}=${WX_${LIB}${_DBG}}")
-        else()
-          DBG_MSG_V("- not found due to missing WX_${LIB}${_DBG}=${WX_${LIB}${_DBG}}")
-          set(wxWidgets_FOUND FALSE)
-        endif()
-      endforeach()
-    endif()
-
-    DBG_MSG_V("OpenGL")
-    list(FIND ${_LIBS} gl WX_USE_GL)
-    if(NOT WX_USE_GL EQUAL -1)
-      DBG_MSG_V("- is required.")
-      list(APPEND wxWidgets_LIBRARIES opengl32 glu32)
-    endif()
-
-    list(APPEND wxWidgets_LIBRARIES winmm comctl32 uuid oleacc uxtheme rpcrt4 shlwapi version wsock32)
-  endmacro()
-
-  #-------------------------------------------------------------------
-  # WIN32: Start actual work.
-  #-------------------------------------------------------------------
-
-  # Look for an installation tree.
-  find_path(wxWidgets_ROOT_DIR
-    NAMES include/wx/wx.h
-    PATHS
-      ENV wxWidgets_ROOT_DIR
-      ENV WXWIN
-      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\wxWidgets_is1;Inno Setup: App Path]"  # WX 2.6.x
-      C:/
-      D:/
-      ENV ProgramFiles
-    PATH_SUFFIXES
-      wxWidgets-3.1.0
-      wxWidgets-3.0.2
-      wxWidgets-3.0.1
-      wxWidgets-3.0.0
-      wxWidgets-2.9.5
-      wxWidgets-2.9.4
-      wxWidgets-2.9.3
-      wxWidgets-2.9.2
-      wxWidgets-2.9.1
-      wxWidgets-2.9.0
-      wxWidgets-2.8.9
-      wxWidgets-2.8.8
-      wxWidgets-2.8.7
-      wxWidgets-2.8.6
-      wxWidgets-2.8.5
-      wxWidgets-2.8.4
-      wxWidgets-2.8.3
-      wxWidgets-2.8.2
-      wxWidgets-2.8.1
-      wxWidgets-2.8.0
-      wxWidgets-2.7.4
-      wxWidgets-2.7.3
-      wxWidgets-2.7.2
-      wxWidgets-2.7.1
-      wxWidgets-2.7.0
-      wxWidgets-2.7.0-1
-      wxWidgets-2.6.4
-      wxWidgets-2.6.3
-      wxWidgets-2.6.2
-      wxWidgets-2.6.1
-      wxWidgets-2.5.4
-      wxWidgets-2.5.3
-      wxWidgets-2.5.2
-      wxWidgets-2.5.1
-      wxWidgets
-    DOC "wxWidgets base/installation directory"
-    )
-
-  # If wxWidgets_ROOT_DIR changed, clear lib dir.
-  if(NOT WX_ROOT_DIR STREQUAL wxWidgets_ROOT_DIR)
-    set(WX_ROOT_DIR ${wxWidgets_ROOT_DIR}
-        CACHE INTERNAL "wxWidgets_ROOT_DIR")
-    set(wxWidgets_LIB_DIR "wxWidgets_LIB_DIR-NOTFOUND"
-        CACHE PATH "Cleared." FORCE)
-  endif()
-
-  if(WX_ROOT_DIR)
-    # Select one default tree inside the already determined wx tree.
-    # Prefer static/shared order usually consistent with build
-    # settings.
-    set(_WX_TOOL "")
-    set(_WX_TOOLVER "")
-    set(_WX_ARCH "")
-    if(MINGW)
-      set(_WX_TOOL gcc)
-    elseif(MSVC)
-      set(_WX_TOOL vc)
-      set(_WX_TOOLVER ${MSVC_TOOLSET_VERSION})
-      # support for a lib/vc14x_x64_dll/ path from wxW 3.1.3 distribution
-      string(REGEX REPLACE ".$" "x" _WX_TOOLVERx ${_WX_TOOLVER})
-      if(CMAKE_SIZEOF_VOID_P EQUAL 8)
-        set(_WX_ARCH _x64)
-      endif()
-    endif()
-    if(BUILD_SHARED_LIBS)
-      find_path(wxWidgets_LIB_DIR
-        NAMES
-          qtu/wx/setup.h
-          qtud/wx/setup.h
-          msw/wx/setup.h
-          mswd/wx/setup.h
-          mswu/wx/setup.h
-          mswud/wx/setup.h
-          mswuniv/wx/setup.h
-          mswunivd/wx/setup.h
-          mswunivu/wx/setup.h
-          mswunivud/wx/setup.h
-        PATHS
-        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVER}_xp${_WX_ARCH}_dll   # prefer shared
-        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVER}${_WX_ARCH}_dll   # prefer shared
-        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVERx}_xp${_WX_ARCH}_dll   # prefer shared
-        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVERx}${_WX_ARCH}_dll   # prefer shared
-        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_ARCH}_dll                 # prefer shared
-        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVER}_xp${_WX_ARCH}_lib
-        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVER}${_WX_ARCH}_lib
-        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVERx}_xp${_WX_ARCH}_lib
-        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVERx}${_WX_ARCH}_lib
-        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_ARCH}_lib
-        DOC "Path to wxWidgets libraries"
-        NO_DEFAULT_PATH
-        )
-    else()
-      find_path(wxWidgets_LIB_DIR
-        NAMES
-          qtu/wx/setup.h
-          qtud/wx/setup.h
-          msw/wx/setup.h
-          mswd/wx/setup.h
-          mswu/wx/setup.h
-          mswud/wx/setup.h
-          mswuniv/wx/setup.h
-          mswunivd/wx/setup.h
-          mswunivu/wx/setup.h
-          mswunivud/wx/setup.h
-        PATHS
-        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVER}_xp${_WX_ARCH}_lib   # prefer static
-        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVER}${_WX_ARCH}_lib   # prefer static
-        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVERx}_xp${_WX_ARCH}_lib   # prefer static
-        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVERx}${_WX_ARCH}_lib   # prefer static
-        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_ARCH}_lib                 # prefer static
-        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVER}_xp${_WX_ARCH}_dll
-        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVER}${_WX_ARCH}_dll
-        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVERx}_xp${_WX_ARCH}_dll
-        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVERx}${_WX_ARCH}_dll
-        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_ARCH}_dll
-        DOC "Path to wxWidgets libraries"
-        NO_DEFAULT_PATH
-        )
-    endif()
-    unset(_WX_TOOL)
-    unset(_WX_TOOLVER)
-    unset(_WX_ARCH)
-
-    # If wxWidgets_LIB_DIR changed, clear all libraries.
-    if(NOT WX_LIB_DIR STREQUAL wxWidgets_LIB_DIR)
-      set(WX_LIB_DIR ${wxWidgets_LIB_DIR} CACHE INTERNAL "wxWidgets_LIB_DIR")
-      WX_CLEAR_ALL_DBG_LIBS()
-      WX_CLEAR_ALL_REL_LIBS()
-    endif()
-
-    if(WX_LIB_DIR)
-      # If building shared libs, define WXUSINGDLL to use dllimport.
-      if(WX_LIB_DIR MATCHES "[dD][lL][lL]")
-        set(wxWidgets_DEFINITIONS WXUSINGDLL)
-        DBG_MSG_V("detected SHARED/DLL tree WX_LIB_DIR=${WX_LIB_DIR}")
-      endif()
-
-      # Search for available configuration types.
-      foreach(CFG mswunivud mswunivd mswud mswd mswunivu mswuniv mswu msw qt qtd qtu qtud)
-        set(WX_${CFG}_FOUND FALSE)
-        if(EXISTS ${WX_LIB_DIR}/${CFG})
-          list(APPEND WX_CONFIGURATION_LIST ${CFG})
-          set(WX_${CFG}_FOUND TRUE)
-          set(WX_CONFIGURATION ${CFG})
-        endif()
-      endforeach()
-      DBG_MSG_V("WX_CONFIGURATION_LIST=${WX_CONFIGURATION_LIST}")
-
-      if(WX_CONFIGURATION)
-        set(wxWidgets_FOUND TRUE)
-
-        # If the selected configuration wasn't found force the default
-        # one. Otherwise, use it but still force a refresh for
-        # updating the doc string with the current list of available
-        # configurations.
-        if(NOT WX_${wxWidgets_CONFIGURATION}_FOUND)
-          set(wxWidgets_CONFIGURATION ${WX_CONFIGURATION} CACHE STRING
-            "Set wxWidgets configuration (${WX_CONFIGURATION_LIST})" FORCE)
-        else()
-          set(wxWidgets_CONFIGURATION ${wxWidgets_CONFIGURATION} CACHE STRING
-            "Set wxWidgets configuration (${WX_CONFIGURATION_LIST})" FORCE)
-        endif()
-
-        # If release config selected, and both release/debug exist.
-        if(WX_${wxWidgets_CONFIGURATION}d_FOUND)
-          option(wxWidgets_USE_REL_AND_DBG
-            "Use release and debug configurations?" TRUE)
-          set(WX_USE_REL_AND_DBG ${wxWidgets_USE_REL_AND_DBG})
-        else()
-          # If the option exists (already in cache), force it false.
-          if(wxWidgets_USE_REL_AND_DBG)
-            set(wxWidgets_USE_REL_AND_DBG FALSE CACHE BOOL
-              "No ${wxWidgets_CONFIGURATION}d found." FORCE)
-          endif()
-          set(WX_USE_REL_AND_DBG FALSE)
-        endif()
-
-        # Get configuration parameters from the name.
-        WX_GET_NAME_COMPONENTS(${wxWidgets_CONFIGURATION} PF UNV UCD DBG)
-
-        # Set wxWidgets lib setup include directory.
-        if(EXISTS ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h)
-          set(wxWidgets_INCLUDE_DIRS
-            ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION})
-        else()
-          DBG_MSG("wxWidgets_FOUND FALSE because ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h does not exists.")
-          set(wxWidgets_FOUND FALSE)
-        endif()
-
-        # Set wxWidgets main include directory.
-        if(EXISTS ${WX_ROOT_DIR}/include/wx/wx.h)
-          list(APPEND wxWidgets_INCLUDE_DIRS ${WX_ROOT_DIR}/include)
-        else()
-          DBG_MSG("wxWidgets_FOUND FALSE because WX_ROOT_DIR=${WX_ROOT_DIR} has no ${WX_ROOT_DIR}/include/wx/wx.h")
-          set(wxWidgets_FOUND FALSE)
-        endif()
-
-        # Find wxWidgets libraries.
-        WX_FIND_LIBS("${PF}" "${UNV}" "${UCD}" "${DBG}")
-        if(WX_USE_REL_AND_DBG)
-          WX_FIND_LIBS("${PF}" "${UNV}" "${UCD}" "d")
-        endif()
-
-        # Settings for requested libs (i.e., include dir, libraries, etc.).
-        WX_SET_LIBRARIES(wxWidgets_FIND_COMPONENTS "${DBG}")
-
-        # Add necessary definitions for unicode builds
-        if("${UCD}" STREQUAL "u")
-          list(APPEND wxWidgets_DEFINITIONS UNICODE _UNICODE)
-        endif()
-
-        # Add necessary definitions for debug builds
-        set(wxWidgets_DEFINITIONS_DEBUG _DEBUG __WXDEBUG__)
-
-      endif()
-    endif()
-  endif()
-
-#=====================================================================
-# UNIX_FIND_STYLE
-#=====================================================================
-else()
-  if(wxWidgets_FIND_STYLE STREQUAL "unix")
-    #-----------------------------------------------------------------
-    # UNIX: Helper MACROS
-    #-----------------------------------------------------------------
-    #
-    # Set the default values based on "wx-config --selected-config".
-    #
-    macro(WX_CONFIG_SELECT_GET_DEFAULT)
-      execute_process(
-        COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}"
-          ${wxWidgets_CONFIG_OPTIONS} --selected-config
-        OUTPUT_VARIABLE _wx_selected_config
-        RESULT_VARIABLE _wx_result
-        ERROR_QUIET
-        )
-      if(_wx_result EQUAL 0)
-        foreach(_opt_name debug static unicode universal)
-          string(TOUPPER ${_opt_name} _upper_opt_name)
-          if(_wx_selected_config MATCHES "${_opt_name}")
-            set(wxWidgets_DEFAULT_${_upper_opt_name} ON)
-          else()
-            set(wxWidgets_DEFAULT_${_upper_opt_name} OFF)
-          endif()
-        endforeach()
-      else()
-        foreach(_upper_opt_name DEBUG STATIC UNICODE UNIVERSAL)
-          set(wxWidgets_DEFAULT_${_upper_opt_name} OFF)
-        endforeach()
-      endif()
-    endmacro()
-
-    #
-    # Query a boolean configuration option to determine if the system
-    # has both builds available. If so, provide the selection option
-    # to the user.
-    #
-    macro(WX_CONFIG_SELECT_QUERY_BOOL _OPT_NAME _OPT_HELP)
-      execute_process(
-        COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}"
-          ${wxWidgets_CONFIG_OPTIONS} --${_OPT_NAME}=yes
-        RESULT_VARIABLE _wx_result_yes
-        OUTPUT_QUIET
-        ERROR_QUIET
-        )
-      execute_process(
-        COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}"
-          ${wxWidgets_CONFIG_OPTIONS} --${_OPT_NAME}=no
-        RESULT_VARIABLE _wx_result_no
-        OUTPUT_QUIET
-        ERROR_QUIET
-        )
-      string(TOUPPER ${_OPT_NAME} _UPPER_OPT_NAME)
-      if(_wx_result_yes EQUAL 0 AND _wx_result_no EQUAL 0)
-        option(wxWidgets_USE_${_UPPER_OPT_NAME}
-          ${_OPT_HELP} ${wxWidgets_DEFAULT_${_UPPER_OPT_NAME}})
-      else()
-        # If option exists (already in cache), force to available one.
-        if(DEFINED wxWidgets_USE_${_UPPER_OPT_NAME})
-          if(_wx_result_yes EQUAL 0)
-            set(wxWidgets_USE_${_UPPER_OPT_NAME} ON  CACHE BOOL ${_OPT_HELP} FORCE)
-          else()
-            set(wxWidgets_USE_${_UPPER_OPT_NAME} OFF CACHE BOOL ${_OPT_HELP} FORCE)
-          endif()
-        endif()
-      endif()
-    endmacro()
-
-    #
-    # Set wxWidgets_SELECT_OPTIONS to wx-config options for selecting
-    # among multiple builds.
-    #
-    macro(WX_CONFIG_SELECT_SET_OPTIONS)
-      set(wxWidgets_SELECT_OPTIONS ${wxWidgets_CONFIG_OPTIONS})
-      foreach(_opt_name debug static unicode universal)
-        string(TOUPPER ${_opt_name} _upper_opt_name)
-        if(DEFINED wxWidgets_USE_${_upper_opt_name})
-          if(wxWidgets_USE_${_upper_opt_name})
-            list(APPEND wxWidgets_SELECT_OPTIONS --${_opt_name}=yes)
-          else()
-            list(APPEND wxWidgets_SELECT_OPTIONS --${_opt_name}=no)
-          endif()
-        endif()
-      endforeach()
-    endmacro()
-
-    #-----------------------------------------------------------------
-    # UNIX: Start actual work.
-    #-----------------------------------------------------------------
-    # Support cross-compiling, only search in the target platform.
-    find_program(wxWidgets_CONFIG_EXECUTABLE
-      NAMES $ENV{WX_CONFIG} wx-config wx-config-3.1 wx-config-3.0 wx-config-2.9 wx-config-2.8
-      DOC "Location of wxWidgets library configuration provider binary (wx-config)."
-      ONLY_CMAKE_FIND_ROOT_PATH
-      )
-
-    if(wxWidgets_CONFIG_EXECUTABLE)
-      set(wxWidgets_FOUND TRUE)
-
-      # get defaults based on "wx-config --selected-config"
-      WX_CONFIG_SELECT_GET_DEFAULT()
-
-      # for each option: if both builds are available, provide option
-      WX_CONFIG_SELECT_QUERY_BOOL(debug "Use debug build?")
-      WX_CONFIG_SELECT_QUERY_BOOL(unicode "Use unicode build?")
-      WX_CONFIG_SELECT_QUERY_BOOL(universal "Use universal build?")
-      WX_CONFIG_SELECT_QUERY_BOOL(static "Link libraries statically?")
-
-      # process selection to set wxWidgets_SELECT_OPTIONS
-      WX_CONFIG_SELECT_SET_OPTIONS()
-      DBG_MSG("wxWidgets_SELECT_OPTIONS=${wxWidgets_SELECT_OPTIONS}")
-
-      # run the wx-config program to get cxxflags
-      execute_process(
-        COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}"
-          ${wxWidgets_SELECT_OPTIONS} --cxxflags
-        OUTPUT_VARIABLE wxWidgets_CXX_FLAGS
-        RESULT_VARIABLE RET
-        ERROR_QUIET
-        )
-      if(RET EQUAL 0)
-        string(STRIP "${wxWidgets_CXX_FLAGS}" wxWidgets_CXX_FLAGS)
-        separate_arguments(wxWidgets_CXX_FLAGS_LIST NATIVE_COMMAND "${wxWidgets_CXX_FLAGS}")
-
-        DBG_MSG_V("wxWidgets_CXX_FLAGS=${wxWidgets_CXX_FLAGS}")
-
-        # parse definitions and include dirs from cxxflags
-        #   drop the -D and -I prefixes
-        set(wxWidgets_CXX_FLAGS)
-        foreach(arg IN LISTS wxWidgets_CXX_FLAGS_LIST)
-          if("${arg}" MATCHES "^-I(.*)$")
-            # include directory
-            list(APPEND wxWidgets_INCLUDE_DIRS "${CMAKE_MATCH_1}")
-          elseif("${arg}" MATCHES "^-D(.*)$")
-            # compile definition
-            list(APPEND wxWidgets_DEFINITIONS "${CMAKE_MATCH_1}")
-          else()
-            list(APPEND wxWidgets_CXX_FLAGS "${arg}")
-          endif()
-        endforeach()
-
-        DBG_MSG_V("wxWidgets_DEFINITIONS=${wxWidgets_DEFINITIONS}")
-        DBG_MSG_V("wxWidgets_INCLUDE_DIRS=${wxWidgets_INCLUDE_DIRS}")
-        DBG_MSG_V("wxWidgets_CXX_FLAGS=${wxWidgets_CXX_FLAGS}")
-
-      else()
-        set(wxWidgets_FOUND FALSE)
-        DBG_MSG_V(
-          "${wxWidgets_CONFIG_EXECUTABLE} --cxxflags FAILED with RET=${RET}")
-      endif()
-
-      # run the wx-config program to get the libs
-      # - NOTE: wx-config doesn't verify that the libs requested exist
-      #         it just produces the names. Maybe a TRY_COMPILE would
-      #         be useful here...
-      unset(_cmp_req)
-      unset(_cmp_opt)
-      foreach(_cmp IN LISTS wxWidgets_FIND_COMPONENTS)
-        if(wxWidgets_FIND_REQUIRED_${_cmp})
-          list(APPEND _cmp_req "${_cmp}")
-        else()
-          list(APPEND _cmp_opt "${_cmp}")
-        endif()
-      endforeach()
-      DBG_MSG_V("wxWidgets required components : ${_cmp_req}")
-      DBG_MSG_V("wxWidgets optional components : ${_cmp_opt}")
-      if(DEFINED _cmp_opt)
-        string(REPLACE ";" "," _cmp_opt "--optional-libs ${_cmp_opt}")
-      endif()
-      string(REPLACE ";" "," _cmp_req "${_cmp_req}")
-      execute_process(
-        COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}"
-          ${wxWidgets_SELECT_OPTIONS} --libs ${_cmp_req} ${_cmp_opt}
-        OUTPUT_VARIABLE wxWidgets_LIBRARIES
-        RESULT_VARIABLE RET
-        ERROR_QUIET
-        )
-      if(RET EQUAL 0)
-        string(STRIP "${wxWidgets_LIBRARIES}" wxWidgets_LIBRARIES)
-        separate_arguments(wxWidgets_LIBRARIES)
-        string(REPLACE "-framework;" "-framework "
-          wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}")
-        string(REPLACE "-weak_framework;" "-weak_framework "
-          wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}")
-        string(REPLACE "-arch;" "-arch "
-          wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}")
-        string(REPLACE "-isysroot;" "-isysroot "
-          wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}")
-
-        # extract linkdirs (-L) for rpath (i.e., LINK_DIRECTORIES)
-        string(REGEX MATCHALL "-L[^;]+"
-          wxWidgets_LIBRARY_DIRS "${wxWidgets_LIBRARIES}")
-        string(REGEX REPLACE "-L([^;]+)" "\\1"
-          wxWidgets_LIBRARY_DIRS "${wxWidgets_LIBRARY_DIRS}")
-
-        DBG_MSG_V("wxWidgets_LIBRARIES=${wxWidgets_LIBRARIES}")
-        DBG_MSG_V("wxWidgets_LIBRARY_DIRS=${wxWidgets_LIBRARY_DIRS}")
-
-      else()
-        set(wxWidgets_FOUND FALSE)
-        DBG_MSG("${wxWidgets_CONFIG_EXECUTABLE} --libs ${_cmp_req} ${_cmp_opt} FAILED with RET=${RET}")
-      endif()
-      unset(_cmp_req)
-      unset(_cmp_opt)
-    endif()
-
-    # When using wx-config in MSYS, the include paths are UNIX style paths which may or may
-    # not work correctly depending on you MSYS/MinGW configuration.  CMake expects native
-    # paths internally.
-    if(wxWidgets_FOUND AND MSYS)
-      find_program(_cygpath_exe cygpath ONLY_CMAKE_FIND_ROOT_PATH)
-      DBG_MSG_V("_cygpath_exe:  ${_cygpath_exe}")
-      if(_cygpath_exe)
-        set(_tmp_path "")
-        foreach(_path ${wxWidgets_INCLUDE_DIRS})
-          execute_process(
-            COMMAND cygpath -w ${_path}
-            OUTPUT_VARIABLE _native_path
-            RESULT_VARIABLE _retv
-            OUTPUT_STRIP_TRAILING_WHITESPACE
-            ERROR_QUIET
-            )
-          if(_retv EQUAL 0)
-            file(TO_CMAKE_PATH ${_native_path} _native_path)
-            DBG_MSG_V("Path ${_path} converted to ${_native_path}")
-            string(APPEND _tmp_path " ${_native_path}")
-          endif()
-        endforeach()
-        DBG_MSG("Setting wxWidgets_INCLUDE_DIRS = ${_tmp_path}")
-        set(wxWidgets_INCLUDE_DIRS ${_tmp_path})
-        separate_arguments(wxWidgets_INCLUDE_DIRS)
-        list(REMOVE_ITEM wxWidgets_INCLUDE_DIRS "")
-
-        set(_tmp_path "")
-        foreach(_path ${wxWidgets_LIBRARY_DIRS})
-          execute_process(
-            COMMAND cygpath -w ${_path}
-            OUTPUT_VARIABLE _native_path
-            RESULT_VARIABLE _retv
-            OUTPUT_STRIP_TRAILING_WHITESPACE
-            ERROR_QUIET
-            )
-          if(_retv EQUAL 0)
-            file(TO_CMAKE_PATH ${_native_path} _native_path)
-            DBG_MSG_V("Path ${_path} converted to ${_native_path}")
-            string(APPEND _tmp_path " ${_native_path}")
-          endif()
-        endforeach()
-        DBG_MSG("Setting wxWidgets_LIBRARY_DIRS = ${_tmp_path}")
-        set(wxWidgets_LIBRARY_DIRS ${_tmp_path})
-        separate_arguments(wxWidgets_LIBRARY_DIRS)
-        list(REMOVE_ITEM wxWidgets_LIBRARY_DIRS "")
-      endif()
-      unset(_cygpath_exe CACHE)
-    endif()
-
-#=====================================================================
-# Neither UNIX_FIND_STYLE, nor WIN32_FIND_STYLE
-#=====================================================================
-  else()
-    if(NOT wxWidgets_FIND_QUIETLY)
-      message(STATUS
-        "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): \n"
-        "  Platform unknown/unsupported. It's neither WIN32 nor UNIX "
-        "find style."
-        )
-    endif()
-  endif()
-endif()
-
-# Check that all libraries are present, as wx-config does not check it
-set(_wx_lib_missing "")
-foreach(_wx_lib_ ${wxWidgets_LIBRARIES})
-  if("${_wx_lib_}" MATCHES "^-l(.*)")
-    set(_wx_lib_name "${CMAKE_MATCH_1}")
-    unset(_wx_lib_found CACHE)
-    find_library(_wx_lib_found NAMES ${_wx_lib_name} HINTS ${wxWidgets_LIBRARY_DIRS})
-    if(_wx_lib_found STREQUAL _wx_lib_found-NOTFOUND)
-      list(APPEND _wx_lib_missing ${_wx_lib_name})
-    endif()
-    unset(_wx_lib_found CACHE)
-  endif()
-endforeach()
-
-if (_wx_lib_missing)
-  string(REPLACE ";" " " _wx_lib_missing "${_wx_lib_missing}")
-  DBG_MSG_V("wxWidgets not found due to following missing libraries: ${_wx_lib_missing}")
-  set(wxWidgets_FOUND FALSE)
-  unset(wxWidgets_LIBRARIES)
-endif()
-unset(_wx_lib_missing)
-
-# Check if a specific version was requested by find_package().
-if(wxWidgets_FOUND)
-  unset(_wx_filename)
-  find_file(_wx_filename wx/version.h PATHS ${wxWidgets_INCLUDE_DIRS} NO_DEFAULT_PATH)
-  dbg_msg("_wx_filename:  ${_wx_filename}")
-
-  if(NOT _wx_filename)
-    message(FATAL_ERROR "wxWidgets wx/version.h file not found in ${wxWidgets_INCLUDE_DIRS}.")
-  endif()
-
-  file(READ "${_wx_filename}" _wx_version_h)
-  unset(_wx_filename CACHE)
-
-  string(REGEX REPLACE "^(.*\n)?#define +wxMAJOR_VERSION +([0-9]+).*"
-    "\\2" wxWidgets_VERSION_MAJOR "${_wx_version_h}" )
-  string(REGEX REPLACE "^(.*\n)?#define +wxMINOR_VERSION +([0-9]+).*"
-    "\\2" wxWidgets_VERSION_MINOR "${_wx_version_h}" )
-  string(REGEX REPLACE "^(.*\n)?#define +wxRELEASE_NUMBER +([0-9]+).*"
-    "\\2" wxWidgets_VERSION_PATCH "${_wx_version_h}" )
-  set(wxWidgets_VERSION_STRING
-    "${wxWidgets_VERSION_MAJOR}.${wxWidgets_VERSION_MINOR}.${wxWidgets_VERSION_PATCH}" )
-  dbg_msg("wxWidgets_VERSION_STRING:    ${wxWidgets_VERSION_STRING}")
-endif()
-
-# Debug output:
-DBG_MSG("wxWidgets_FOUND           : ${wxWidgets_FOUND}")
-DBG_MSG("wxWidgets_INCLUDE_DIRS    : ${wxWidgets_INCLUDE_DIRS}")
-DBG_MSG("wxWidgets_LIBRARY_DIRS    : ${wxWidgets_LIBRARY_DIRS}")
-DBG_MSG("wxWidgets_LIBRARIES       : ${wxWidgets_LIBRARIES}")
-DBG_MSG("wxWidgets_CXX_FLAGS       : ${wxWidgets_CXX_FLAGS}")
-DBG_MSG("wxWidgets_USE_FILE        : ${wxWidgets_USE_FILE}")
-
-#=====================================================================
-#=====================================================================
-
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-
-# FIXME: set wxWidgets_<comp>_FOUND for wx-config branch
-#        and use HANDLE_COMPONENTS on Unix too
-if(wxWidgets_FIND_STYLE STREQUAL "win32")
-  set(wxWidgets_HANDLE_COMPONENTS "HANDLE_COMPONENTS")
-endif()
-
-find_package_handle_standard_args(wxWidgets
-  REQUIRED_VARS wxWidgets_LIBRARIES wxWidgets_INCLUDE_DIRS
-  VERSION_VAR   wxWidgets_VERSION_STRING
-  ${wxWidgets_HANDLE_COMPONENTS}
-  )
-unset(wxWidgets_HANDLE_COMPONENTS)
-
-#=====================================================================
-# Macros for use in wxWidgets apps.
-# - This module will not fail to find wxWidgets based on the code
-#   below. Hence, it's required to check for validity of:
-#
-# wxWidgets_wxrc_EXECUTABLE
-#=====================================================================
-
-# Resource file compiler.
-find_program(wxWidgets_wxrc_EXECUTABLE
-  NAMES $ENV{WXRC_CMD} wxrc
-  PATHS ${wxWidgets_ROOT_DIR}/utils/wxrc/vc_msw
-  DOC "Location of wxWidgets resource file compiler binary (wxrc)"
-  )
-
-#
-# WX_SPLIT_ARGUMENTS_ON(<keyword> <left> <right> <arg1> <arg2> ...)
-#
-# Sets <left> and <right> to contain arguments to the left and right,
-# respectively, of <keyword>.
-#
-# Example usage:
-#  function(WXWIDGETS_ADD_RESOURCES outfiles)
-#    WX_SPLIT_ARGUMENTS_ON(OPTIONS wxrc_files wxrc_options ${ARGN})
-#    ...
-#  endfunction()
-#
-#  WXWIDGETS_ADD_RESOURCES(sources ${xrc_files} OPTIONS -e -o file.C)
-#
-# NOTE: This is a generic piece of code that should be renamed to
-# SPLIT_ARGUMENTS_ON and put in a file serving the same purpose as
-# FindPackageStandardArgs.cmake. At the time of this writing
-# FindQt4.cmake has a QT4_EXTRACT_OPTIONS, which I basically copied
-# here a bit more generalized. So, there are already two find modules
-# using this approach.
-#
-function(WX_SPLIT_ARGUMENTS_ON _keyword _leftvar _rightvar)
-  # FIXME: Document that the input variables will be cleared.
-  #list(APPEND ${_leftvar}  "")
-  #list(APPEND ${_rightvar} "")
-  set(${_leftvar}  "")
-  set(${_rightvar} "")
-
-  set(_doing_right FALSE)
-  foreach(element ${ARGN})
-    if("${element}" STREQUAL "${_keyword}")
-      set(_doing_right TRUE)
-    else()
-      if(_doing_right)
-        list(APPEND ${_rightvar} "${element}")
-      else()
-        list(APPEND ${_leftvar} "${element}")
-      endif()
-    endif()
-  endforeach()
-
-  set(${_leftvar}  ${${_leftvar}}  PARENT_SCOPE)
-  set(${_rightvar} ${${_rightvar}} PARENT_SCOPE)
-endfunction()
-
-#
-# WX_GET_DEPENDENCIES_FROM_XML(
-#   <depends>
-#   <match_pattern>
-#   <clean_pattern>
-#   <xml_contents>
-#   <depends_path>
-#   )
-#
-# FIXME: Add documentation here...
-#
-function(WX_GET_DEPENDENCIES_FROM_XML
-    _depends
-    _match_patt
-    _clean_patt
-    _xml_contents
-    _depends_path
-    )
-
-  string(REGEX MATCHALL
-    ${_match_patt}
-    dep_file_list
-    "${${_xml_contents}}"
-    )
-  foreach(dep_file ${dep_file_list})
-    string(REGEX REPLACE ${_clean_patt} "" dep_file "${dep_file}")
-
-    # make the file have an absolute path
-    if(NOT IS_ABSOLUTE "${dep_file}")
-      set(dep_file "${${_depends_path}}/${dep_file}")
-    endif()
-
-    # append file to dependency list
-    list(APPEND ${_depends} "${dep_file}")
-  endforeach()
-
-  set(${_depends} ${${_depends}} PARENT_SCOPE)
-endfunction()
-
-#
-# WXWIDGETS_ADD_RESOURCES(<sources> <xrc_files>
-#                         OPTIONS <options> [NO_CPP_CODE])
-#
-# Adds a custom command for resource file compilation of the
-# <xrc_files> and appends the output files to <sources>.
-#
-# Example usages:
-#   WXWIDGETS_ADD_RESOURCES(sources xrc/main_frame.xrc)
-#   WXWIDGETS_ADD_RESOURCES(sources ${xrc_files} OPTIONS -e -o altname.cxx)
-#
-function(WXWIDGETS_ADD_RESOURCES _outfiles)
-  WX_SPLIT_ARGUMENTS_ON(OPTIONS rc_file_list rc_options ${ARGN})
-
-  # Parse files for dependencies.
-  set(rc_file_list_abs "")
-  set(rc_depends       "")
-  foreach(rc_file ${rc_file_list})
-    get_filename_component(depends_path ${rc_file} PATH)
-
-    get_filename_component(rc_file_abs ${rc_file} ABSOLUTE)
-    list(APPEND rc_file_list_abs "${rc_file_abs}")
-
-    # All files have absolute paths or paths relative to the location
-    # of the rc file.
-    file(READ "${rc_file_abs}" rc_file_contents)
-
-    # get bitmap/bitmap2 files
-    WX_GET_DEPENDENCIES_FROM_XML(
-      rc_depends
-      "<bitmap[^<]+"
-      "^<bitmap[^>]*>"
-      rc_file_contents
-      depends_path
-      )
-
-    # get url files
-    WX_GET_DEPENDENCIES_FROM_XML(
-      rc_depends
-      "<url[^<]+"
-      "^<url[^>]*>"
-      rc_file_contents
-      depends_path
-      )
-
-    # get wxIcon files
-    WX_GET_DEPENDENCIES_FROM_XML(
-      rc_depends
-      "<object[^>]*class=\"wxIcon\"[^<]+"
-      "^<object[^>]*>"
-      rc_file_contents
-      depends_path
-      )
-  endforeach()
-
-  #
-  # Parse options.
-  #
-  # If NO_CPP_CODE option specified, then produce .xrs file rather
-  # than a .cpp file (i.e., don't add the default --cpp-code option).
-  list(FIND rc_options NO_CPP_CODE index)
-  if(index EQUAL -1)
-    list(APPEND rc_options --cpp-code)
-    # wxrc's default output filename for cpp code.
-    set(outfile resource.cpp)
-  else()
-    list(REMOVE_AT rc_options ${index})
-    # wxrc's default output filename for xrs file.
-    set(outfile resource.xrs)
-  endif()
-
-  # Get output name for use in ADD_CUSTOM_COMMAND.
-  # - short option scanning
-  list(FIND rc_options -o index)
-  if(NOT index EQUAL -1)
-    math(EXPR filename_index "${index} + 1")
-    list(GET rc_options ${filename_index} outfile)
-    #list(REMOVE_AT rc_options ${index} ${filename_index})
-  endif()
-  # - long option scanning
-  string(REGEX MATCH "--output=[^;]*" outfile_opt "${rc_options}")
-  if(outfile_opt)
-    string(REPLACE "--output=" "" outfile "${outfile_opt}")
-  endif()
-  #string(REGEX REPLACE "--output=[^;]*;?" "" rc_options "${rc_options}")
-  #string(REGEX REPLACE ";$" "" rc_options "${rc_options}")
-
-  if(NOT IS_ABSOLUTE "${outfile}")
-    set(outfile "${CMAKE_CURRENT_BINARY_DIR}/${outfile}")
-  endif()
-  add_custom_command(
-    OUTPUT "${outfile}"
-    COMMAND ${wxWidgets_wxrc_EXECUTABLE} ${rc_options} ${rc_file_list_abs}
-    DEPENDS ${rc_file_list_abs} ${rc_depends}
-    )
-
-  # Add generated header to output file list.
-  list(FIND rc_options -e short_index)
-  list(FIND rc_options --extra-cpp-code long_index)
-  if(NOT short_index EQUAL -1 OR NOT long_index EQUAL -1)
-    get_filename_component(outfile_ext ${outfile} EXT)
-    string(REPLACE "${outfile_ext}" ".h" outfile_header "${outfile}")
-    list(APPEND ${_outfiles} "${outfile_header}")
-    set_source_files_properties(
-      "${outfile_header}" PROPERTIES GENERATED TRUE
-      )
-  endif()
-
-  # Add generated file to output file list.
-  list(APPEND ${_outfiles} "${outfile}")
-
-  set(${_outfiles} ${${_outfiles}} PARENT_SCOPE)
-endfunction()
diff --git a/share/cmake-3.18/Modules/FindwxWindows.cmake b/share/cmake-3.18/Modules/FindwxWindows.cmake
deleted file mode 100644
index 35840f5..0000000
--- a/share/cmake-3.18/Modules/FindwxWindows.cmake
+++ /dev/null
@@ -1,730 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FindwxWindows
--------------
-
-.. deprecated:: 3.0
-
-  Replaced by :module:`FindwxWidgets`.
-
-Find wxWindows (wxWidgets) installation
-
-This module finds if wxWindows/wxWidgets is installed and determines
-where the include files and libraries are.  It also determines what
-the name of the library is.  This code sets the following variables:
-
-::
-
-  WXWINDOWS_FOUND     = system has WxWindows
-  WXWINDOWS_LIBRARIES = path to the wxWindows libraries
-                        on Unix/Linux with additional
-                        linker flags from
-                        "wx-config --libs"
-  CMAKE_WXWINDOWS_CXX_FLAGS  = Compiler flags for wxWindows,
-                               essentially "`wx-config --cxxflags`"
-                               on Linux
-  WXWINDOWS_INCLUDE_DIR      = where to find "wx/wx.h" and "wx/setup.h"
-  WXWINDOWS_LINK_DIRECTORIES = link directories, useful for rpath on
-                                Unix
-  WXWINDOWS_DEFINITIONS      = extra defines
-
-
-
-OPTIONS If you need OpenGL support please
-
-::
-
-  set(WXWINDOWS_USE_GL 1)
-
-in your CMakeLists.txt *before* you include this file.
-
-::
-
-  HAVE_ISYSTEM      - true required to replace -I by -isystem on g++
-
-
-
-For convenience include Use_wxWindows.cmake in your project's
-CMakeLists.txt using
-include(${CMAKE_CURRENT_LIST_DIR}/Use_wxWindows.cmake).
-
-USAGE
-
-::
-
-  set(WXWINDOWS_USE_GL 1)
-  find_package(wxWindows)
-
-
-
-NOTES wxWidgets 2.6.x is supported for monolithic builds e.g.
-compiled in wx/build/msw dir as:
-
-::
-
-  nmake -f makefile.vc BUILD=debug SHARED=0 USE_OPENGL=1 MONOLITHIC=1
-
-
-
-DEPRECATED
-
-::
-
-  CMAKE_WX_CAN_COMPILE
-  WXWINDOWS_LIBRARY
-  CMAKE_WX_CXX_FLAGS
-  WXWINDOWS_INCLUDE_PATH
-
-
-
-AUTHOR Jan Woetzel <http://www.mip.informatik.uni-kiel.de/~jw>
-(07/2003-01/2006)
-#]=======================================================================]
-
-# ------------------------------------------------------------------
-#
-# -removed OPTION for CMAKE_WXWINDOWS_USE_GL. Force the developer to SET it before calling this.
-# -major update for wx 2.6.2 and monolithic build option. (10/2005)
-#
-# STATUS
-# tested with:
-#  cmake 1.6.7, Linux (Suse 7.3), wxWindows 2.4.0, gcc 2.95
-#  cmake 1.6.7, Linux (Suse 8.2), wxWindows 2.4.0, gcc 3.3
-#  cmake 1.6.7, Linux (Suse 8.2), wxWindows 2.4.1-patch1,  gcc 3.3
-#  cmake 1.6.7, MS Windows XP home, wxWindows 2.4.1, MS Visual Studio .net 7 2002 (static build)
-#  cmake 2.0.5 on Windows XP and Suse Linux 9.2
-#  cmake 2.0.6 on Windows XP and Suse Linux 9.2, wxWidgets 2.6.2 MONOLITHIC build
-#  cmake 2.2.2 on Windows XP, MS Visual Studio .net 2003 7.1 wxWidgets 2.6.2 MONOLITHIC build
-#
-# TODO
-#  -OPTION for unicode builds
-#  -further testing of DLL linking under MS WIN32
-#  -better support for non-monolithic builds
-#
-
-
-if(WIN32)
-  set(WIN32_STYLE_FIND 1)
-endif()
-if(MINGW)
-  set(WIN32_STYLE_FIND 0)
-  set(UNIX_STYLE_FIND 1)
-endif()
-if(UNIX)
-  set(UNIX_STYLE_FIND 1)
-endif()
-
-
-if(WIN32_STYLE_FIND)
-
-  ## ######################################################################
-  ##
-  ## Windows specific:
-  ##
-  ## candidates for root/base directory of wxwindows
-  ## should have subdirs include and lib containing include/wx/wx.h
-  ## fix the root dir to avoid mixing of headers/libs from different
-  ## versions/builds:
-
-  ## WX supports monolithic and multiple smaller libs (since 2.5.x), we prefer monolithic for now.
-  ## monolithic = WX is built as a single big library
-  ## e.g. compile on WIN32 as  "nmake -f makefile.vc MONOLITHIC=1 BUILD=debug SHARED=0 USE_OPENGL=1" (JW)
-  option(WXWINDOWS_USE_MONOLITHIC "Use monolithic build of WX??" ON)
-  mark_as_advanced(WXWINDOWS_USE_MONOLITHIC)
-
-  ## GL libs used?
-  option(WXWINDOWS_USE_GL "Use Wx with GL support(glcanvas)?" ON)
-  mark_as_advanced(WXWINDOWS_USE_GL)
-
-
-  ## avoid mixing of headers and libs between multiple installed WX versions,
-  ## select just one tree here:
-  find_path(WXWINDOWS_ROOT_DIR  include/wx/wx.h
-    HINTS
-      ENV WXWIN
-      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\wxWidgets_is1;Inno Setup: App Path]"  ## WX 2.6.x
-      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\wxWindows_is1;Inno Setup: App Path]"  ## WX 2.4.x
-    PATHS
-      C:/wxWidgets-2.6.2
-      D:/wxWidgets-2.6.2
-      C:/wxWidgets-2.6.1
-      D:/wxWidgets-2.6.1
-      C:/wxWindows-2.4.2
-      D:/wxWindows-2.4.2
-  )
-  # message("DBG found WXWINDOWS_ROOT_DIR: ${WXWINDOWS_ROOT_DIR}")
-
-
-  ## find libs for combination of static/shared with release/debug
-  ## be careful if you add something here,
-  ## avoid mixing of headers and libs of different wx versions,
-  ## there may be multiple WX versions installed.
-  set (WXWINDOWS_POSSIBLE_LIB_PATHS
-    "${WXWINDOWS_ROOT_DIR}/lib"
-    )
-
-  ## monolithic?
-  if (WXWINDOWS_USE_MONOLITHIC)
-
-    find_library(WXWINDOWS_STATIC_LIBRARY
-      NAMES wx wxmsw wxmsw26
-      PATHS
-      "${WXWINDOWS_ROOT_DIR}/lib/vc_lib"
-      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
-      DOC "wxWindows static release build library" )
-
-    find_library(WXWINDOWS_STATIC_DEBUG_LIBRARY
-      NAMES wxd wxmswd wxmsw26d
-      PATHS
-      "${WXWINDOWS_ROOT_DIR}/lib/vc_lib"
-      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
-      DOC "wxWindows static debug build library" )
-
-    find_library(WXWINDOWS_SHARED_LIBRARY
-      NAMES wxmsw26 wxmsw262 wxmsw24 wxmsw242 wxmsw241 wxmsw240 wx23_2 wx22_9
-      PATHS
-      "${WXWINDOWS_ROOT_DIR}/lib/vc_dll"
-      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
-      DOC "wxWindows shared release build library" )
-
-    find_library(WXWINDOWS_SHARED_DEBUG_LIBRARY
-      NAMES wxmsw26d wxmsw262d wxmsw24d wxmsw241d wxmsw240d wx23_2d wx22_9d
-      PATHS
-      "${WXWINDOWS_ROOT_DIR}/lib/vc_dll"
-      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
-      DOC "wxWindows shared debug build library " )
-
-
-    ##
-    ## required for WXWINDOWS_USE_GL
-    ## gl lib is always build separate:
-    ##
-    find_library(WXWINDOWS_STATIC_LIBRARY_GL
-      NAMES wx_gl wxmsw_gl wxmsw26_gl
-      PATHS
-      "${WXWINDOWS_ROOT_DIR}/lib/vc_lib"
-      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
-      DOC "wxWindows static release build GL library" )
-
-    find_library(WXWINDOWS_STATIC_DEBUG_LIBRARY_GL
-      NAMES wxd_gl wxmswd_gl wxmsw26d_gl
-      PATHS
-      "${WXWINDOWS_ROOT_DIR}/lib/vc_lib"
-      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
-      DOC "wxWindows static debug build GL library" )
-
-
-    find_library(WXWINDOWS_STATIC_DEBUG_LIBRARY_PNG
-      NAMES wxpngd
-      PATHS
-      "${WXWINDOWS_ROOT_DIR}/lib/vc_lib"
-      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
-      DOC "wxWindows static debug png library" )
-
-    find_library(WXWINDOWS_STATIC_LIBRARY_PNG
-      NAMES wxpng
-      PATHS
-      "${WXWINDOWS_ROOT_DIR}/lib/vc_lib"
-      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
-      DOC "wxWindows static png library" )
-
-    find_library(WXWINDOWS_STATIC_DEBUG_LIBRARY_TIFF
-      NAMES wxtiffd
-      PATHS
-      "${WXWINDOWS_ROOT_DIR}/lib/vc_lib"
-      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
-      DOC "wxWindows static debug tiff library" )
-
-    find_library(WXWINDOWS_STATIC_LIBRARY_TIFF
-      NAMES wxtiff
-      PATHS
-      "${WXWINDOWS_ROOT_DIR}/lib/vc_lib"
-      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
-      DOC "wxWindows static tiff library" )
-
-    find_library(WXWINDOWS_STATIC_DEBUG_LIBRARY_JPEG
-      NAMES wxjpegd  wxjpgd
-      PATHS
-      "${WXWINDOWS_ROOT_DIR}/lib/vc_lib"
-      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
-      DOC "wxWindows static debug jpeg library" )
-
-    find_library(WXWINDOWS_STATIC_LIBRARY_JPEG
-      NAMES wxjpeg wxjpg
-      PATHS
-      "${WXWINDOWS_ROOT_DIR}/lib/vc_lib"
-      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
-      DOC "wxWindows static jpeg library" )
-
-    find_library(WXWINDOWS_STATIC_DEBUG_LIBRARY_ZLIB
-      NAMES wxzlibd
-      PATHS
-      "${WXWINDOWS_ROOT_DIR}/lib/vc_lib"
-      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
-      DOC "wxWindows static debug zlib library" )
-
-    find_library(WXWINDOWS_STATIC_LIBRARY_ZLIB
-      NAMES wxzlib
-      PATHS
-      "${WXWINDOWS_ROOT_DIR}/lib/vc_lib"
-      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
-      DOC "wxWindows static zib library" )
-
-    find_library(WXWINDOWS_STATIC_DEBUG_LIBRARY_REGEX
-      NAMES wxregexd
-      PATHS
-      "${WXWINDOWS_ROOT_DIR}/lib/vc_lib"
-      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
-      DOC "wxWindows static debug regex library" )
-
-    find_library(WXWINDOWS_STATIC_LIBRARY_REGEX
-      NAMES wxregex
-      PATHS
-      "${WXWINDOWS_ROOT_DIR}/lib/vc_lib"
-      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
-      DOC "wxWindows static regex library" )
-
-
-
-    ## untested:
-    find_library(WXWINDOWS_SHARED_LIBRARY_GL
-      NAMES wx_gl wxmsw_gl wxmsw26_gl
-      PATHS
-      "${WXWINDOWS_ROOT_DIR}/lib/vc_dll"
-      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
-      DOC "wxWindows shared release build GL library" )
-
-    find_library(WXWINDOWS_SHARED_DEBUG_LIBRARY_GL
-      NAMES wxd_gl wxmswd_gl wxmsw26d_gl
-      PATHS
-      "${WXWINDOWS_ROOT_DIR}/lib/vc_dll"
-      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
-      DOC "wxWindows shared debug build GL library" )
-
-
-  else ()
-    ## WX is built as multiple small pieces libraries instead of monolithic
-
-    ## DEPECATED (jw) replaced by more general WXWINDOWS_USE_MONOLITHIC ON/OFF
-    # option(WXWINDOWS_SEPARATE_LIBS_BUILD "Is wxWindows build with separate libs?" OFF)
-
-    ## HACK: This is very dirty.
-    ## because the libs of a particular version are explicitly listed
-    ## and NOT searched/verified.
-    ## TODO:  Really search for each lib, then decide for
-    ## monolithic x debug x shared x GL (=16 combinations) for at least 18 libs
-    ## -->  about 288 combinations
-    ## thus we need a different approach so solve this correctly ...
-
-    message(STATUS "Warning: You are trying to use wxWidgets without monolithic build (WXWINDOWS_SEPARATE_LIBS_BUILD). This is a HACK, libraries are not verified! (JW).")
-
-    set(WXWINDOWS_STATIC_LIBS ${WXWINDOWS_STATIC_LIBS}
-      wxbase26
-      wxbase26_net
-      wxbase26_odbc
-      wxbase26_xml
-      wxmsw26_adv
-      wxmsw26_core
-      wxmsw26_dbgrid
-      wxmsw26_gl
-      wxmsw26_html
-      wxmsw26_media
-      wxmsw26_qa
-      wxmsw26_xrc
-      wxexpat
-      wxjpeg
-      wxpng
-      wxregex
-      wxtiff
-      wxzlib
-      comctl32
-      rpcrt4
-      wsock32
-      )
-    ## HACK: feed in to optimized / debug libraries if both were FOUND.
-    set(WXWINDOWS_STATIC_DEBUG_LIBS ${WXWINDOWS_STATIC_DEBUG_LIBS}
-      wxbase26d
-      wxbase26d_net
-      wxbase26d_odbc
-      wxbase26d_xml
-      wxmsw26d_adv
-      wxmsw26d_core
-      wxmsw26d_dbgrid
-      wxmsw26d_gl
-      wxmsw26d_html
-      wxmsw26d_media
-      wxmsw26d_qa
-      wxmsw26d_xrc
-      wxexpatd
-      wxjpegd
-      wxpngd
-      wxregexd
-      wxtiffd
-      wxzlibd
-      comctl32
-      rpcrt4
-      wsock32
-      )
-  endif ()
-
-
-  ##
-  ## now we should have found all WX libs available on the system.
-  ## let the user decide which of the available onse to use.
-  ##
-
-  ## if there is at least one shared lib available
-  ## let user choose whether to use shared or static wxwindows libs
-  if(WXWINDOWS_SHARED_LIBRARY OR WXWINDOWS_SHARED_DEBUG_LIBRARY)
-    ## default value OFF because wxWindows MSVS default build is static
-    option(WXWINDOWS_USE_SHARED_LIBS
-      "Use shared versions (dll) of wxWindows libraries?" OFF)
-    mark_as_advanced(WXWINDOWS_USE_SHARED_LIBS)
-  endif()
-
-  ## add system libraries wxwindows always seems to depend on
-  set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
-    comctl32
-    rpcrt4
-    wsock32
-    )
-
-  if (NOT WXWINDOWS_USE_SHARED_LIBS)
-    set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
-      ##  these ones don't seem required, in particular  ctl3d32 is not necessary (Jan Woetzel 07/2003)
-      #   ctl3d32
-      debug ${WXWINDOWS_STATIC_DEBUG_LIBRARY_ZLIB}   optimized ${WXWINDOWS_STATIC_LIBRARY_ZLIB}
-      debug ${WXWINDOWS_STATIC_DEBUG_LIBRARY_REGEX}  optimized ${WXWINDOWS_STATIC_LIBRARY_REGEX}
-      debug ${WXWINDOWS_STATIC_DEBUG_LIBRARY_PNG}    optimized ${WXWINDOWS_STATIC_LIBRARY_PNG}
-      debug ${WXWINDOWS_STATIC_DEBUG_LIBRARY_JPEG}   optimized ${WXWINDOWS_STATIC_LIBRARY_JPEG}
-      debug ${WXWINDOWS_STATIC_DEBUG_LIBRARY_TIFF}   optimized ${WXWINDOWS_STATIC_LIBRARY_TIFF}
-      )
-  endif ()
-
-  ## opengl/glu: TODO/FIXME: better use FindOpenGL.cmake here
-  ## assume release versions of glu an dopengl, here.
-  if (WXWINDOWS_USE_GL)
-    set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
-      opengl32
-      glu32 )
-  endif ()
-
-  ##
-  ## select between use of  shared or static wxWindows lib then set libs to use
-  ## for debug and optimized build.  so the user can switch between debug and
-  ## release build e.g. within MS Visual Studio without running cmake with a
-  ## different build directory again.
-  ##
-  ## then add the build specific include dir for wx/setup.h
-  ##
-
-  if(WXWINDOWS_USE_SHARED_LIBS)
-    ##message("DBG wxWindows use shared lib selected.")
-    ## assume that both builds use the same setup(.h) for simplicity
-
-    ## shared: both wx (debug and release) found?
-    ## assume that both builds use the same setup(.h) for simplicity
-    if(WXWINDOWS_SHARED_DEBUG_LIBRARY AND WXWINDOWS_SHARED_LIBRARY)
-      ##message("DBG wx shared: debug and optimized found.")
-      find_path(WXWINDOWS_INCLUDE_DIR_SETUPH  wx/setup.h
-        ${WXWINDOWS_ROOT_DIR}/lib/mswdlld
-        ${WXWINDOWS_ROOT_DIR}/lib/mswdll
-        ${WXWINDOWS_ROOT_DIR}/lib/vc_dll/mswd
-        ${WXWINDOWS_ROOT_DIR}/lib/vc_dll/msw )
-      set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
-        debug     ${WXWINDOWS_SHARED_DEBUG_LIBRARY}
-        optimized ${WXWINDOWS_SHARED_LIBRARY} )
-      if (WXWINDOWS_USE_GL)
-        set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
-          debug     ${WXWINDOWS_SHARED_DEBUG_LIBRARY_GL}
-          optimized ${WXWINDOWS_SHARED_LIBRARY_GL} )
-      endif ()
-    endif()
-
-    ## shared: only debug wx lib found?
-    if(WXWINDOWS_SHARED_DEBUG_LIBRARY)
-      if(NOT WXWINDOWS_SHARED_LIBRARY)
-        ##message("DBG wx shared: debug (but no optimized) found.")
-        find_path(WXWINDOWS_INCLUDE_DIR_SETUPH  wx/setup.h
-          ${WXWINDOWS_ROOT_DIR}/lib/mswdlld
-          ${WXWINDOWS_ROOT_DIR}/lib/vc_dll/mswd  )
-        set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
-          ${WXWINDOWS_SHARED_DEBUG_LIBRARY} )
-        if (WXWINDOWS_USE_GL)
-          set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
-            ${WXWINDOWS_SHARED_DEBUG_LIBRARY_GL} )
-        endif ()
-      endif()
-    endif()
-
-    ## shared: only release wx lib found?
-    if(NOT WXWINDOWS_SHARED_DEBUG_LIBRARY)
-      if(WXWINDOWS_SHARED_LIBRARY)
-        ##message("DBG wx shared: optimized (but no debug) found.")
-        find_path(WXWINDOWS_INCLUDE_DIR_SETUPH  wx/setup.h
-          ${WXWINDOWS_ROOT_DIR}/lib/mswdll
-          ${WXWINDOWS_ROOT_DIR}/lib/vc_dll/msw  )
-        set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
-          ${WXWINDOWS_SHARED_DEBUG_LIBRARY} )
-        if (WXWINDOWS_USE_GL)
-          set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
-            ${WXWINDOWS_SHARED_DEBUG_LIBRARY_GL} )
-        endif ()
-      endif()
-    endif()
-
-    ## shared: none found?
-    if(NOT WXWINDOWS_SHARED_DEBUG_LIBRARY)
-      if(NOT WXWINDOWS_SHARED_LIBRARY)
-        message(STATUS
-          "No shared wxWindows lib found, but WXWINDOWS_USE_SHARED_LIBS=${WXWINDOWS_USE_SHARED_LIBS}.")
-      endif()
-    endif()
-
-    #########################################################################################
-  else()
-
-    ##jw: DEPRECATED if(NOT WXWINDOWS_SEPARATE_LIBS_BUILD)
-
-    ## static: both wx (debug and release) found?
-    ## assume that both builds use the same setup(.h) for simplicity
-    if(WXWINDOWS_STATIC_DEBUG_LIBRARY AND WXWINDOWS_STATIC_LIBRARY)
-      ##message("DBG wx static: debug and optimized found.")
-      find_path(WXWINDOWS_INCLUDE_DIR_SETUPH  wx/setup.h
-        ${WXWINDOWS_ROOT_DIR}/lib/mswd
-        ${WXWINDOWS_ROOT_DIR}/lib/msw
-        ${WXWINDOWS_ROOT_DIR}/lib/vc_lib/mswd
-        ${WXWINDOWS_ROOT_DIR}/lib/vc_lib/msw )
-      set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
-        debug     ${WXWINDOWS_STATIC_DEBUG_LIBRARY}
-        optimized ${WXWINDOWS_STATIC_LIBRARY} )
-      if (WXWINDOWS_USE_GL)
-        set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
-          debug     ${WXWINDOWS_STATIC_DEBUG_LIBRARY_GL}
-          optimized ${WXWINDOWS_STATIC_LIBRARY_GL} )
-      endif ()
-    endif()
-
-    ## static: only debug wx lib found?
-    if(WXWINDOWS_STATIC_DEBUG_LIBRARY)
-      if(NOT WXWINDOWS_STATIC_LIBRARY)
-        ##message("DBG wx static: debug (but no optimized) found.")
-        find_path(WXWINDOWS_INCLUDE_DIR_SETUPH  wx/setup.h
-          ${WXWINDOWS_ROOT_DIR}/lib/mswd
-          ${WXWINDOWS_ROOT_DIR}/lib/vc_lib/mswd  )
-        set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
-          ${WXWINDOWS_STATIC_DEBUG_LIBRARY} )
-        if (WXWINDOWS_USE_GL)
-          set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
-            ${WXWINDOWS_STATIC_DEBUG_LIBRARY_GL} )
-        endif ()
-      endif()
-    endif()
-
-    ## static: only release wx lib found?
-    if(NOT WXWINDOWS_STATIC_DEBUG_LIBRARY)
-      if(WXWINDOWS_STATIC_LIBRARY)
-        ##message("DBG wx static: optimized (but no debug) found.")
-        find_path(WXWINDOWS_INCLUDE_DIR_SETUPH  wx/setup.h
-          ${WXWINDOWS_ROOT_DIR}/lib/msw
-          ${WXWINDOWS_ROOT_DIR}/lib/vc_lib/msw )
-        set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
-          ${WXWINDOWS_STATIC_LIBRARY} )
-        if (WXWINDOWS_USE_GL)
-          set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
-            ${WXWINDOWS_STATIC_LIBRARY_GL} )
-        endif ()
-      endif()
-    endif()
-
-    ## static: none found?
-    if(NOT WXWINDOWS_STATIC_DEBUG_LIBRARY AND NOT WXWINDOWS_SEPARATE_LIBS_BUILD)
-      if(NOT WXWINDOWS_STATIC_LIBRARY)
-        message(STATUS
-          "No static wxWindows lib found, but WXWINDOWS_USE_SHARED_LIBS=${WXWINDOWS_USE_SHARED_LIBS}.")
-      endif()
-    endif()
-  endif()
-
-
-  ## not necessary in wxWindows 2.4.1 and 2.6.2
-  ## but it may fix a previous bug, see
-  ## http://lists.wxwindows.org/cgi-bin/ezmlm-cgi?8:mss:37574:200305:mpdioeneabobmgjenoap
-  option(WXWINDOWS_SET_DEFINITIONS "Set additional defines for wxWindows" OFF)
-  mark_as_advanced(WXWINDOWS_SET_DEFINITIONS)
-  if (WXWINDOWS_SET_DEFINITIONS)
-    set(WXWINDOWS_DEFINITIONS "-DWINVER=0x400")
-  else ()
-    # clear:
-    set(WXWINDOWS_DEFINITIONS "")
-  endif ()
-
-
-
-  ## Find the include directories for wxwindows
-  ## the first, build specific for wx/setup.h was determined before.
-  ## add inc dir for general for "wx/wx.h"
-  find_path(WXWINDOWS_INCLUDE_DIR  wx/wx.h
-    "${WXWINDOWS_ROOT_DIR}/include" )
-  ## append the build specific include dir for wx/setup.h:
-  if (WXWINDOWS_INCLUDE_DIR_SETUPH)
-    set(WXWINDOWS_INCLUDE_DIR ${WXWINDOWS_INCLUDE_DIR} ${WXWINDOWS_INCLUDE_DIR_SETUPH} )
-  endif ()
-
-
-
-  mark_as_advanced(
-    WXWINDOWS_ROOT_DIR
-    WXWINDOWS_INCLUDE_DIR
-    WXWINDOWS_INCLUDE_DIR_SETUPH
-    WXWINDOWS_STATIC_LIBRARY
-    WXWINDOWS_STATIC_LIBRARY_GL
-    WXWINDOWS_STATIC_DEBUG_LIBRARY
-    WXWINDOWS_STATIC_DEBUG_LIBRARY_GL
-    WXWINDOWS_STATIC_LIBRARY_ZLIB
-    WXWINDOWS_STATIC_DEBUG_LIBRARY_ZLIB
-    WXWINDOWS_STATIC_LIBRARY_REGEX
-    WXWINDOWS_STATIC_DEBUG_LIBRARY_REGEX
-    WXWINDOWS_STATIC_LIBRARY_PNG
-    WXWINDOWS_STATIC_DEBUG_LIBRARY_PNG
-    WXWINDOWS_STATIC_LIBRARY_JPEG
-    WXWINDOWS_STATIC_DEBUG_LIBRARY_JPEG
-    WXWINDOWS_STATIC_DEBUG_LIBRARY_TIFF
-    WXWINDOWS_STATIC_LIBRARY_TIFF
-    WXWINDOWS_SHARED_LIBRARY
-    WXWINDOWS_SHARED_DEBUG_LIBRARY
-    WXWINDOWS_SHARED_LIBRARY_GL
-    WXWINDOWS_SHARED_DEBUG_LIBRARY_GL
-    )
-
-
-else()
-
-  if (UNIX_STYLE_FIND)
-    ## ######################################################################
-    ##
-    ## UNIX/Linux specific:
-    ##
-    ## use backquoted wx-config to query and set flags and libs:
-    ## 06/2003 Jan Woetzel
-    ##
-
-    option(WXWINDOWS_USE_SHARED_LIBS "Use shared versions (.so) of wxWindows libraries" ON)
-    mark_as_advanced(WXWINDOWS_USE_SHARED_LIBS)
-
-    # JW removed option and force the develper th SET it.
-    # option(WXWINDOWS_USE_GL "use wxWindows with GL support (use additional
-    # --gl-libs for wx-config)?" OFF)
-
-    # wx-config should be in your path anyhow, usually no need to set WXWIN or
-    # search in ../wx or ../../wx
-    find_program(CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE
-      NAMES $ENV{WX_CONFIG} wx-config
-      HINTS
-        ENV WXWIN
-        $ENV{WXWIN}/bin
-      PATHS
-      ../wx/bin
-      ../../wx/bin )
-
-    # check whether wx-config was found:
-    if(CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE)
-
-      # use shared/static wx lib?
-      # remember: always link shared to use systems GL etc. libs (no static
-      # linking, just link *against* static .a libs)
-      if(WXWINDOWS_USE_SHARED_LIBS)
-        set(WX_CONFIG_ARGS_LIBS "--libs")
-      else()
-        set(WX_CONFIG_ARGS_LIBS "--static --libs")
-      endif()
-
-      # do we need additionial wx GL stuff like GLCanvas ?
-      if(WXWINDOWS_USE_GL)
-        string(APPEND WX_CONFIG_ARGS_LIBS " --gl-libs" )
-      endif()
-      ##message("DBG: WX_CONFIG_ARGS_LIBS=${WX_CONFIG_ARGS_LIBS}===")
-
-      # set CXXFLAGS to be fed into CMAKE_CXX_FLAGS by the user:
-      if (HAVE_ISYSTEM) # does the compiler support -isystem ?
-              if (NOT APPLE) # -isystem seem sto be unsuppored on Mac
-                if(CMAKE_COMPILER_IS_GNUCC AND CMAKE_COMPILER_IS_GNUCXX )
-            if (CMAKE_CXX_COMPILER MATCHES g\\+\\+)
-              set(CMAKE_WXWINDOWS_CXX_FLAGS "`${CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE} --cxxflags|sed -e s/-I/-isystem/g`")
-            else()
-              set(CMAKE_WXWINDOWS_CXX_FLAGS "`${CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE} --cxxflags`")
-            endif()
-                endif()
-              endif ()
-      endif ()
-      ##message("DBG: for compilation:
-      ##CMAKE_WXWINDOWS_CXX_FLAGS=${CMAKE_WXWINDOWS_CXX_FLAGS}===")
-
-      # keep the back-quoted string for clarity
-      set(WXWINDOWS_LIBRARIES "`${CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE} ${WX_CONFIG_ARGS_LIBS}`")
-      ##message("DBG2: for linking:
-      ##WXWINDOWS_LIBRARIES=${WXWINDOWS_LIBRARIES}===")
-
-      # evaluate wx-config output to separate linker flags and linkdirs for
-      # rpath:
-      exec_program(${CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE}
-        ARGS ${WX_CONFIG_ARGS_LIBS}
-        OUTPUT_VARIABLE WX_CONFIG_LIBS )
-
-      ## extract linkdirs (-L) for rpath
-      ## use regular expression to match wildcard equivalent "-L*<endchar>"
-      ## with <endchar> is a space or a semicolon
-      string(REGEX MATCHALL "[-][L]([^ ;])+" WXWINDOWS_LINK_DIRECTORIES_WITH_PREFIX "${WX_CONFIG_LIBS}" )
-      # message("DBG  WXWINDOWS_LINK_DIRECTORIES_WITH_PREFIX=${WXWINDOWS_LINK_DIRECTORIES_WITH_PREFIX}")
-
-      ## remove prefix -L because we need the pure directory for LINK_DIRECTORIES
-      ## replace -L by ; because the separator seems to be lost otherwise (bug or
-      ## feature?)
-      if(WXWINDOWS_LINK_DIRECTORIES_WITH_PREFIX)
-        string(REGEX REPLACE "[-][L]" ";" WXWINDOWS_LINK_DIRECTORIES ${WXWINDOWS_LINK_DIRECTORIES_WITH_PREFIX} )
-        # message("DBG  WXWINDOWS_LINK_DIRECTORIES=${WXWINDOWS_LINK_DIRECTORIES}")
-      endif()
-
-
-      ## replace space separated string by semicolon separated vector to make it
-      ## work with LINK_DIRECTORIES
-      separate_arguments(WXWINDOWS_LINK_DIRECTORIES)
-
-      mark_as_advanced(
-        CMAKE_WXWINDOWS_CXX_FLAGS
-        WXWINDOWS_INCLUDE_DIR
-        WXWINDOWS_LIBRARIES
-        CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE
-        )
-
-
-      ## we really need wx-config...
-    else()
-      message(STATUS "Cannot find wx-config anywhere on the system. Please put the file into your path or specify it in CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE.")
-      mark_as_advanced(CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE)
-    endif()
-
-
-
-  else()
-    message(STATUS "FindwxWindows.cmake:  Platform unknown/unsupported by FindwxWindows.cmake. It's neither WIN32 nor UNIX")
-  endif()
-endif()
-
-
-if(WXWINDOWS_LIBRARIES)
-  if(WXWINDOWS_INCLUDE_DIR OR CMAKE_WXWINDOWS_CXX_FLAGS)
-    ## found all we need.
-    set(WXWINDOWS_FOUND 1)
-
-    ## set deprecated variables for backward compatibility:
-    set(CMAKE_WX_CAN_COMPILE   ${WXWINDOWS_FOUND})
-    set(WXWINDOWS_LIBRARY     ${WXWINDOWS_LIBRARIES})
-    set(WXWINDOWS_INCLUDE_PATH ${WXWINDOWS_INCLUDE_DIR})
-    set(WXWINDOWS_LINK_DIRECTORIES ${WXWINDOWS_LINK_DIRECTORIES})
-    set(CMAKE_WX_CXX_FLAGS     ${CMAKE_WXWINDOWS_CXX_FLAGS})
-
-  endif()
-endif()
diff --git a/share/cmake-3.18/Modules/FortranCInterface.cmake b/share/cmake-3.18/Modules/FortranCInterface.cmake
deleted file mode 100644
index 547346b..0000000
--- a/share/cmake-3.18/Modules/FortranCInterface.cmake
+++ /dev/null
@@ -1,392 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-FortranCInterface
------------------
-
-Fortran/C Interface Detection
-
-This module automatically detects the API by which C and Fortran
-languages interact.
-
-Module Variables
-^^^^^^^^^^^^^^^^
-
-Variables that indicate if the mangling is found:
-
-``FortranCInterface_GLOBAL_FOUND``
-  Global subroutines and functions.
-
-``FortranCInterface_MODULE_FOUND``
-  Module subroutines and functions (declared by "MODULE PROCEDURE").
-
-This module also provides the following variables to specify
-the detected mangling, though a typical use case does not need
-to reference them and can use the `Module Functions`_ below.
-
-``FortranCInterface_GLOBAL_PREFIX``
-  Prefix for a global symbol without an underscore.
-
-``FortranCInterface_GLOBAL_SUFFIX``
-  Suffix for a global symbol without an underscore.
-
-``FortranCInterface_GLOBAL_CASE``
-  The case for a global symbol without an underscore,
-  either ``UPPER`` or ``LOWER``.
-
-``FortranCInterface_GLOBAL__PREFIX``
-  Prefix for a global symbol with an underscore.
-
-``FortranCInterface_GLOBAL__SUFFIX``
-  Suffix for a global symbol with an underscore.
-
-``FortranCInterface_GLOBAL__CASE``
-  The case for a global symbol with an underscore,
-  either ``UPPER`` or ``LOWER``.
-
-``FortranCInterface_MODULE_PREFIX``
-  Prefix for a module symbol without an underscore.
-
-``FortranCInterface_MODULE_MIDDLE``
-  Middle of a module symbol without an underscore that appears
-  between the name of the module and the name of the symbol.
-
-``FortranCInterface_MODULE_SUFFIX``
-  Suffix for a module symbol without an underscore.
-
-``FortranCInterface_MODULE_CASE``
-  The case for a module symbol without an underscore,
-  either ``UPPER`` or ``LOWER``.
-
-``FortranCInterface_MODULE__PREFIX``
-  Prefix for a module symbol with an underscore.
-
-``FortranCInterface_MODULE__MIDDLE``
-  Middle of a module symbol with an underscore that appears
-  between the name of the module and the name of the symbol.
-
-``FortranCInterface_MODULE__SUFFIX``
-  Suffix for a module symbol with an underscore.
-
-``FortranCInterface_MODULE__CASE``
-  The case for a module symbol with an underscore,
-  either ``UPPER`` or ``LOWER``.
-
-Module Functions
-^^^^^^^^^^^^^^^^
-
-.. command:: FortranCInterface_HEADER
-
-  The ``FortranCInterface_HEADER`` function is provided to generate a
-  C header file containing macros to mangle symbol names::
-
-    FortranCInterface_HEADER(<file>
-                             [MACRO_NAMESPACE <macro-ns>]
-                             [SYMBOL_NAMESPACE <ns>]
-                             [SYMBOLS [<module>:]<function> ...])
-
-  It generates in ``<file>`` definitions of the following macros::
-
-     #define FortranCInterface_GLOBAL (name,NAME) ...
-     #define FortranCInterface_GLOBAL_(name,NAME) ...
-     #define FortranCInterface_MODULE (mod,name, MOD,NAME) ...
-     #define FortranCInterface_MODULE_(mod,name, MOD,NAME) ...
-
-  These macros mangle four categories of Fortran symbols, respectively:
-
-  * Global symbols without '_': ``call mysub()``
-  * Global symbols with '_'   : ``call my_sub()``
-  * Module symbols without '_': ``use mymod; call mysub()``
-  * Module symbols with '_'   : ``use mymod; call my_sub()``
-
-  If mangling for a category is not known, its macro is left undefined.
-  All macros require raw names in both lower case and upper case.
-
-  The options are:
-
-  ``MACRO_NAMESPACE``
-    Replace the default ``FortranCInterface_`` prefix with a given
-    namespace ``<macro-ns>``.
-
-  ``SYMBOLS``
-    List symbols to mangle automatically with C preprocessor definitions::
-
-      <function>          ==> #define <ns><function> ...
-      <module>:<function> ==> #define <ns><module>_<function> ...
-
-    If the mangling for some symbol is not known then no preprocessor
-    definition is created, and a warning is displayed.
-
-  ``SYMBOL_NAMESPACE``
-    Prefix all preprocessor definitions generated by the ``SYMBOLS``
-    option with a given namespace ``<ns>``.
-
-.. command:: FortranCInterface_VERIFY
-
-  The ``FortranCInterface_VERIFY`` function is provided to verify
-  that the Fortran and C/C++ compilers work together::
-
-    FortranCInterface_VERIFY([CXX] [QUIET])
-
-  It tests whether a simple test executable using Fortran and C (and C++
-  when the CXX option is given) compiles and links successfully.  The
-  result is stored in the cache entry ``FortranCInterface_VERIFIED_C``
-  (or ``FortranCInterface_VERIFIED_CXX`` if ``CXX`` is given) as a boolean.
-  If the check fails and ``QUIET`` is not given the function terminates with a
-  fatal error message describing the problem.  The purpose of this check
-  is to stop a build early for incompatible compiler combinations.  The
-  test is built in the ``Release`` configuration.
-
-Example Usage
-^^^^^^^^^^^^^
-
-.. code-block:: cmake
-
-   include(FortranCInterface)
-   FortranCInterface_HEADER(FC.h MACRO_NAMESPACE "FC_")
-
-This creates a "FC.h" header that defines mangling macros ``FC_GLOBAL()``,
-``FC_GLOBAL_()``, ``FC_MODULE()``, and ``FC_MODULE_()``.
-
-.. code-block:: cmake
-
-   include(FortranCInterface)
-   FortranCInterface_HEADER(FCMangle.h
-                            MACRO_NAMESPACE "FC_"
-                            SYMBOL_NAMESPACE "FC_"
-                            SYMBOLS mysub mymod:my_sub)
-
-This creates a "FCMangle.h" header that defines the same ``FC_*()``
-mangling macros as the previous example plus preprocessor symbols
-``FC_mysub`` and ``FC_mymod_my_sub``.
-
-Additional Manglings
-^^^^^^^^^^^^^^^^^^^^
-
-FortranCInterface is aware of possible ``GLOBAL`` and ``MODULE`` manglings
-for many Fortran compilers, but it also provides an interface to specify
-new possible manglings.  Set the variables::
-
-   FortranCInterface_GLOBAL_SYMBOLS
-   FortranCInterface_MODULE_SYMBOLS
-
-before including FortranCInterface to specify manglings of the symbols
-``MySub``, ``My_Sub``, ``MyModule:MySub``, and ``My_Module:My_Sub``.
-For example, the code:
-
-.. code-block:: cmake
-
-   set(FortranCInterface_GLOBAL_SYMBOLS mysub_ my_sub__ MYSUB_)
-     #                                  ^^^^^  ^^^^^^   ^^^^^
-   set(FortranCInterface_MODULE_SYMBOLS
-       __mymodule_MOD_mysub __my_module_MOD_my_sub)
-     #   ^^^^^^^^     ^^^^^   ^^^^^^^^^     ^^^^^^
-   include(FortranCInterface)
-
-tells FortranCInterface to try given ``GLOBAL`` and ``MODULE`` manglings.
-(The carets point at raw symbol names for clarity in this example but
-are not needed.)
-#]=======================================================================]
-
-#-----------------------------------------------------------------------------
-# Execute at most once in a project.
-if(FortranCInterface_SOURCE_DIR)
-  return()
-endif()
-
-cmake_policy(PUSH)
-cmake_policy(SET CMP0007 NEW)
-
-#-----------------------------------------------------------------------------
-# Verify that C and Fortran are available.
-foreach(lang C Fortran)
-  if(NOT CMAKE_${lang}_COMPILER_LOADED)
-    message(FATAL_ERROR
-      "FortranCInterface requires the ${lang} language to be enabled.")
-  endif()
-endforeach()
-
-#-----------------------------------------------------------------------------
-set(FortranCInterface_SOURCE_DIR ${CMAKE_ROOT}/Modules/FortranCInterface)
-
-# MinGW's make tool does not always like () in the path
-if("${CMAKE_GENERATOR}" MATCHES "MinGW" AND
-    "${FortranCInterface_SOURCE_DIR}" MATCHES "[()]")
-  file(COPY ${FortranCInterface_SOURCE_DIR}/
-    DESTINATION ${CMAKE_BINARY_DIR}/CMakeFiles/FortranCInterfaceMinGW)
-  set(FortranCInterface_SOURCE_DIR ${CMAKE_BINARY_DIR}/CMakeFiles/FortranCInterfaceMinGW)
-endif()
-
-# Create the interface detection project if it does not exist.
-if(NOT FortranCInterface_BINARY_DIR)
-  set(FortranCInterface_BINARY_DIR ${CMAKE_BINARY_DIR}/CMakeFiles/FortranCInterface)
-  include(${FortranCInterface_SOURCE_DIR}/Detect.cmake)
-endif()
-
-# Load the detection results.
-include(${FortranCInterface_BINARY_DIR}/Output.cmake)
-
-#-----------------------------------------------------------------------------
-function(FortranCInterface_HEADER file)
-  # Parse arguments.
-  if(IS_ABSOLUTE "${file}")
-    set(FILE "${file}")
-  else()
-    set(FILE "${CMAKE_CURRENT_BINARY_DIR}/${file}")
-  endif()
-  set(MACRO_NAMESPACE "FortranCInterface_")
-  set(SYMBOL_NAMESPACE)
-  set(SYMBOLS)
-  set(doing)
-  foreach(arg ${ARGN})
-    if("x${arg}" MATCHES "^x(SYMBOLS|SYMBOL_NAMESPACE|MACRO_NAMESPACE)$")
-      set(doing "${arg}")
-    elseif("x${doing}" MATCHES "^x(SYMBOLS)$")
-      list(APPEND "${doing}" "${arg}")
-    elseif("x${doing}" MATCHES "^x(SYMBOL_NAMESPACE|MACRO_NAMESPACE)$")
-      set("${doing}" "${arg}")
-      set(doing)
-    else()
-      message(AUTHOR_WARNING "Unknown argument: \"${arg}\"")
-    endif()
-  endforeach()
-
-  # Generate macro definitions.
-  set(HEADER_CONTENT)
-  set(_desc_GLOBAL  "/* Mangling for Fortran global symbols without underscores. */")
-  set(_desc_GLOBAL_ "/* Mangling for Fortran global symbols with underscores. */")
-  set(_desc_MODULE  "/* Mangling for Fortran module symbols without underscores. */")
-  set(_desc_MODULE_ "/* Mangling for Fortran module symbols with underscores. */")
-  foreach(macro GLOBAL GLOBAL_ MODULE MODULE_)
-    if(FortranCInterface_${macro}_MACRO)
-      string(APPEND HEADER_CONTENT "
-${_desc_${macro}}
-#define ${MACRO_NAMESPACE}${macro}${FortranCInterface_${macro}_MACRO}
-")
-    endif()
-  endforeach()
-
-  # Generate symbol mangling definitions.
-  if(SYMBOLS)
-    string(APPEND HEADER_CONTENT "
-/*--------------------------------------------------------------------------*/
-/* Mangle some symbols automatically.                                       */
-")
-  endif()
-  foreach(f ${SYMBOLS})
-    if("${f}" MATCHES ":")
-      # Module symbol name.  Parse "<module>:<function>" syntax.
-      string(REPLACE ":" ";" pieces "${f}")
-      list(GET pieces 0 module)
-      list(GET pieces 1 function)
-      string(TOUPPER "${module}" m_upper)
-      string(TOLOWER "${module}" m_lower)
-      string(TOUPPER "${function}" f_upper)
-      string(TOLOWER "${function}" f_lower)
-      if("${function}" MATCHES "_")
-        set(form "_")
-      else()
-        set(form "")
-      endif()
-      if(FortranCInterface_MODULE${form}_MACRO)
-        string(APPEND HEADER_CONTENT "#define ${SYMBOL_NAMESPACE}${module}_${function} ${MACRO_NAMESPACE}MODULE${form}(${m_lower},${f_lower}, ${m_upper},${f_upper})\n")
-      else()
-        message(AUTHOR_WARNING "No FortranCInterface mangling known for ${f}")
-      endif()
-    else()
-      # Global symbol name.
-      if("${f}" MATCHES "_")
-        set(form "_")
-      else()
-        set(form "")
-      endif()
-      string(TOUPPER "${f}" f_upper)
-      string(TOLOWER "${f}" f_lower)
-      if(FortranCInterface_GLOBAL${form}_MACRO)
-        string(APPEND HEADER_CONTENT "#define ${SYMBOL_NAMESPACE}${f} ${MACRO_NAMESPACE}GLOBAL${form}(${f_lower}, ${f_upper})\n")
-      else()
-        message(AUTHOR_WARNING "No FortranCInterface mangling known for ${f}")
-      endif()
-    endif()
-  endforeach()
-
-  # Store the content.
-  configure_file(${FortranCInterface_SOURCE_DIR}/Macro.h.in ${FILE} @ONLY)
-endfunction()
-
-function(FortranCInterface_VERIFY)
-  # Check arguments.
-
-  set(lang C)
-  set(quiet 0)
-  set(verify_cxx 0)
-  foreach(arg ${ARGN})
-    if("${arg}" STREQUAL "QUIET")
-      set(quiet 1)
-    elseif("${arg}" STREQUAL "CXX")
-      set(lang CXX)
-      set(verify_cxx 1)
-    else()
-      message(FATAL_ERROR
-        "FortranCInterface_VERIFY - called with unknown argument:\n  ${arg}")
-    endif()
-  endforeach()
-
-  if(NOT CMAKE_${lang}_COMPILER_LOADED)
-    message(FATAL_ERROR
-      "FortranCInterface_VERIFY(${lang}) requires ${lang} to be enabled.")
-  endif()
-
-  # Build the verification project if not yet built.
-  if(NOT DEFINED FortranCInterface_VERIFIED_${lang})
-    set(_desc "Verifying Fortran/${lang} Compiler Compatibility")
-    message(CHECK_START "${_desc}")
-
-    # Build a sample project which reports symbols.
-    set(CMAKE_TRY_COMPILE_CONFIGURATION Release)
-    try_compile(FortranCInterface_VERIFY_${lang}_COMPILED
-      ${FortranCInterface_BINARY_DIR}/Verify${lang}
-      ${FortranCInterface_SOURCE_DIR}/Verify
-      VerifyFortranC # project name
-      VerifyFortranC # target name
-      CMAKE_FLAGS -DVERIFY_CXX=${verify_cxx}
-                  -DCMAKE_VERBOSE_MAKEFILE=ON
-                 "-DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS}"
-                 "-DCMAKE_CXX_FLAGS:STRING=${CMAKE_CXX_FLAGS}"
-                 "-DCMAKE_Fortran_FLAGS:STRING=${CMAKE_Fortran_FLAGS}"
-                 "-DCMAKE_C_FLAGS_RELEASE:STRING=${CMAKE_C_FLAGS_RELEASE}"
-                 "-DCMAKE_CXX_FLAGS_RELEASE:STRING=${CMAKE_CXX_FLAGS_RELEASE}"
-                 "-DCMAKE_Fortran_FLAGS_RELEASE:STRING=${CMAKE_Fortran_FLAGS_RELEASE}"
-      OUTPUT_VARIABLE _output)
-    file(WRITE "${FortranCInterface_BINARY_DIR}/Verify${lang}/output.txt" "${_output}")
-
-    # Report results.
-    if(FortranCInterface_VERIFY_${lang}_COMPILED)
-      message(CHECK_PASS "Success")
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-        "${_desc} passed with the following output:\n${_output}\n\n")
-      set(FortranCInterface_VERIFIED_${lang} 1 CACHE INTERNAL "Fortran/${lang} compatibility")
-    else()
-      message(CHECK_FAIL "Failed")
-      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-        "${_desc} failed with the following output:\n${_output}\n\n")
-      set(FortranCInterface_VERIFIED_${lang} 0 CACHE INTERNAL "Fortran/${lang} compatibility")
-    endif()
-    unset(FortranCInterface_VERIFY_${lang}_COMPILED CACHE)
-  endif()
-
-  # Error if compilers are incompatible.
-  if(NOT FortranCInterface_VERIFIED_${lang} AND NOT quiet)
-    file(READ "${FortranCInterface_BINARY_DIR}/Verify${lang}/output.txt" _output)
-    string(REPLACE "\n" "\n  " _output "${_output}")
-    message(FATAL_ERROR
-      "The Fortran compiler:\n  ${CMAKE_Fortran_COMPILER}\n"
-      "and the ${lang} compiler:\n  ${CMAKE_${lang}_COMPILER}\n"
-      "failed to compile a simple test project using both languages.  "
-      "The output was:\n  ${_output}")
-  endif()
-endfunction()
-
-# Restore including context policies.
-cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/FortranCInterface/Detect.cmake b/share/cmake-3.18/Modules/FortranCInterface/Detect.cmake
deleted file mode 100644
index c75067b..0000000
--- a/share/cmake-3.18/Modules/FortranCInterface/Detect.cmake
+++ /dev/null
@@ -1,174 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-configure_file(${FortranCInterface_SOURCE_DIR}/Input.cmake.in
-               ${FortranCInterface_BINARY_DIR}/Input.cmake @ONLY)
-
-# Detect the Fortran/C interface on the first run or when the
-# configuration changes.
-if(${FortranCInterface_BINARY_DIR}/Input.cmake
-    IS_NEWER_THAN ${FortranCInterface_BINARY_DIR}/Output.cmake
-    OR ${FortranCInterface_SOURCE_DIR}/Output.cmake.in
-    IS_NEWER_THAN ${FortranCInterface_BINARY_DIR}/Output.cmake
-    OR ${FortranCInterface_SOURCE_DIR}/CMakeLists.txt
-    IS_NEWER_THAN ${FortranCInterface_BINARY_DIR}/Output.cmake
-    OR ${CMAKE_CURRENT_LIST_FILE}
-    IS_NEWER_THAN ${FortranCInterface_BINARY_DIR}/Output.cmake
-    )
-  message(CHECK_START "Detecting Fortran/C Interface")
-else()
-  return()
-endif()
-
-# Invalidate verification results.
-unset(FortranCInterface_VERIFIED_C CACHE)
-unset(FortranCInterface_VERIFIED_CXX CACHE)
-
-set(_result)
-
-# Build a sample project which reports symbols.
-set(CMAKE_TRY_COMPILE_CONFIGURATION Release)
-try_compile(FortranCInterface_COMPILED
-  ${FortranCInterface_BINARY_DIR}
-  ${FortranCInterface_SOURCE_DIR}
-  FortranCInterface # project name
-  FortranCInterface # target name
-  CMAKE_FLAGS
-    "-DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS}"
-    "-DCMAKE_Fortran_FLAGS:STRING=${CMAKE_Fortran_FLAGS}"
-    "-DCMAKE_C_FLAGS_RELEASE:STRING=${CMAKE_C_FLAGS_RELEASE}"
-    "-DCMAKE_Fortran_FLAGS_RELEASE:STRING=${CMAKE_Fortran_FLAGS_RELEASE}"
-  OUTPUT_VARIABLE FortranCInterface_OUTPUT)
-set(FortranCInterface_COMPILED ${FortranCInterface_COMPILED})
-unset(FortranCInterface_COMPILED CACHE)
-
-# Locate the sample project executable.
-set(FortranCInterface_EXE)
-if(FortranCInterface_COMPILED)
-  include(${FortranCInterface_BINARY_DIR}/exe-Release.cmake OPTIONAL)
-else()
-  set(_result "Failed to compile")
-  file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-    "Fortran/C interface test project failed with the following output:\n"
-    "${FortranCInterface_OUTPUT}\n")
-endif()
-
-# Load symbols from INFO:symbol[] strings in the executable.
-set(FortranCInterface_SYMBOLS)
-if(FortranCInterface_EXE)
-  file(STRINGS "${FortranCInterface_EXE}" _info_strings
-    LIMIT_COUNT 8 REGEX "INFO:[A-Za-z0-9_]+\\[[^]]*\\]")
-  foreach(info ${_info_strings})
-    if("${info}" MATCHES "INFO:symbol\\[([^]]*)\\]")
-      list(APPEND FortranCInterface_SYMBOLS ${CMAKE_MATCH_1})
-    endif()
-  endforeach()
-elseif(NOT _result)
-  set(_result "Failed to load sample executable")
-endif()
-
-set(_case_mysub "LOWER")
-set(_case_my_sub "LOWER")
-set(_case_MYSUB "UPPER")
-set(_case_MY_SUB "UPPER")
-set(_global_regex  "^(_*)(mysub|MYSUB)([_$]*)$")
-set(_global__regex "^(_*)(my_sub|MY_SUB)([_$]*)$")
-set(_module_regex  "^(_*)(mymodule|MYMODULE)([A-Za-z_$]*)(mysub|MYSUB)([_$]*)$")
-set(_module__regex "^(_*)(my_module|MY_MODULE)([A-Za-z_$]*)(my_sub|MY_SUB)([_$]*)$")
-
-# Parse the symbol names.
-foreach(symbol ${FortranCInterface_SYMBOLS})
-  foreach(form "" "_")
-    # Look for global symbols.
-    string(REGEX REPLACE "${_global_${form}regex}"
-                         "\\1;\\2;\\3" pieces "${symbol}")
-    list(LENGTH pieces len)
-    if(len EQUAL 3)
-      set(FortranCInterface_GLOBAL_${form}SYMBOL "${symbol}")
-      list(GET pieces 0 FortranCInterface_GLOBAL_${form}PREFIX)
-      list(GET pieces 1 name)
-      list(GET pieces 2 FortranCInterface_GLOBAL_${form}SUFFIX)
-      set(FortranCInterface_GLOBAL_${form}CASE "${_case_${name}}")
-    endif()
-
-    # Look for module symbols.
-    string(REGEX REPLACE "${_module_${form}regex}"
-                         "\\1;\\2;\\3;\\4;\\5" pieces "${symbol}")
-    list(LENGTH pieces len)
-    if(len EQUAL 5)
-      set(FortranCInterface_MODULE_${form}SYMBOL "${symbol}")
-      list(GET pieces 0 FortranCInterface_MODULE_${form}PREFIX)
-      list(GET pieces 1 module)
-      list(GET pieces 2 FortranCInterface_MODULE_${form}MIDDLE)
-      list(GET pieces 3 name)
-      list(GET pieces 4 FortranCInterface_MODULE_${form}SUFFIX)
-      set(FortranCInterface_MODULE_${form}CASE "${_case_${name}}")
-    endif()
-  endforeach()
-endforeach()
-
-# Construct mangling macro definitions.
-set(_name_LOWER "name")
-set(_name_UPPER "NAME")
-foreach(form "" "_")
-  if(FortranCInterface_GLOBAL_${form}SYMBOL)
-    if(FortranCInterface_GLOBAL_${form}PREFIX)
-      set(_prefix "${FortranCInterface_GLOBAL_${form}PREFIX}##")
-    else()
-      set(_prefix "")
-    endif()
-    if(FortranCInterface_GLOBAL_${form}SUFFIX)
-      set(_suffix "##${FortranCInterface_GLOBAL_${form}SUFFIX}")
-    else()
-      set(_suffix "")
-    endif()
-    set(_name "${_name_${FortranCInterface_GLOBAL_${form}CASE}}")
-    set(FortranCInterface_GLOBAL${form}_MACRO
-      "(name,NAME) ${_prefix}${_name}${_suffix}")
-  endif()
-  if(FortranCInterface_MODULE_${form}SYMBOL)
-    if(FortranCInterface_MODULE_${form}PREFIX)
-      set(_prefix "${FortranCInterface_MODULE_${form}PREFIX}##")
-    else()
-      set(_prefix "")
-    endif()
-    if(FortranCInterface_MODULE_${form}SUFFIX)
-      set(_suffix "##${FortranCInterface_MODULE_${form}SUFFIX}")
-    else()
-      set(_suffix "")
-    endif()
-    set(_name "${_name_${FortranCInterface_MODULE_${form}CASE}}")
-    set(_middle "##${FortranCInterface_MODULE_${form}MIDDLE}##")
-    set(FortranCInterface_MODULE${form}_MACRO
-      "(mod_name,name, mod_NAME,NAME) ${_prefix}mod_${_name}${_middle}${_name}${_suffix}")
-  endif()
-endforeach()
-
-# Summarize what is available.
-foreach(scope GLOBAL MODULE)
-  if(FortranCInterface_${scope}_SYMBOL AND
-      FortranCInterface_${scope}__SYMBOL)
-    set(FortranCInterface_${scope}_FOUND 1)
-  else()
-    set(FortranCInterface_${scope}_FOUND 0)
-  endif()
-endforeach()
-
-# Record the detection results.
-configure_file(${FortranCInterface_SOURCE_DIR}/Output.cmake.in
-               ${FortranCInterface_BINARY_DIR}/Output.cmake @ONLY)
-file(APPEND ${FortranCInterface_BINARY_DIR}/Output.cmake "\n")
-
-# Report the results.
-if(FortranCInterface_GLOBAL_FOUND)
-  if(FortranCInterface_MODULE_FOUND)
-    set(_result "Found GLOBAL and MODULE mangling")
-  else()
-    set(_result "Found GLOBAL but not MODULE mangling")
-  endif()
-  set(_result_type CHECK_PASS)
-elseif(NOT _result)
-  set(_result "Failed to recognize symbols")
-  set(_result_type CHECK_FAIL)
-endif()
-message(${_result_type} "${_result}")
diff --git a/share/cmake-3.18/Modules/GNUInstallDirs.cmake b/share/cmake-3.18/Modules/GNUInstallDirs.cmake
deleted file mode 100644
index 9ef22b9..0000000
--- a/share/cmake-3.18/Modules/GNUInstallDirs.cmake
+++ /dev/null
@@ -1,383 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-GNUInstallDirs
---------------
-
-Define GNU standard installation directories
-
-Provides install directory variables as defined by the
-`GNU Coding Standards`_.
-
-.. _`GNU Coding Standards`: https://www.gnu.org/prep/standards/html_node/Directory-Variables.html
-
-Result Variables
-^^^^^^^^^^^^^^^^
-
-Inclusion of this module defines the following variables:
-
-``CMAKE_INSTALL_<dir>``
-
-  Destination for files of a given type.  This value may be passed to
-  the ``DESTINATION`` options of :command:`install` commands for the
-  corresponding file type.
-
-``CMAKE_INSTALL_FULL_<dir>``
-
-  The absolute path generated from the corresponding ``CMAKE_INSTALL_<dir>``
-  value.  If the value is not already an absolute path, an absolute path
-  is constructed typically by prepending the value of the
-  :variable:`CMAKE_INSTALL_PREFIX` variable.  However, there are some
-  `special cases`_ as documented below.
-
-where ``<dir>`` is one of:
-
-``BINDIR``
-  user executables (``bin``)
-``SBINDIR``
-  system admin executables (``sbin``)
-``LIBEXECDIR``
-  program executables (``libexec``)
-``SYSCONFDIR``
-  read-only single-machine data (``etc``)
-``SHAREDSTATEDIR``
-  modifiable architecture-independent data (``com``)
-``LOCALSTATEDIR``
-  modifiable single-machine data (``var``)
-``RUNSTATEDIR``
-  run-time variable data (``LOCALSTATEDIR/run``)
-``LIBDIR``
-  object code libraries (``lib`` or ``lib64``
-  or ``lib/<multiarch-tuple>`` on Debian)
-``INCLUDEDIR``
-  C header files (``include``)
-``OLDINCLUDEDIR``
-  C header files for non-gcc (``/usr/include``)
-``DATAROOTDIR``
-  read-only architecture-independent data root (``share``)
-``DATADIR``
-  read-only architecture-independent data (``DATAROOTDIR``)
-``INFODIR``
-  info documentation (``DATAROOTDIR/info``)
-``LOCALEDIR``
-  locale-dependent data (``DATAROOTDIR/locale``)
-``MANDIR``
-  man documentation (``DATAROOTDIR/man``)
-``DOCDIR``
-  documentation root (``DATAROOTDIR/doc/PROJECT_NAME``)
-
-If the includer does not define a value the above-shown default will be
-used and the value will appear in the cache for editing by the user.
-
-Special Cases
-^^^^^^^^^^^^^
-
-The following values of :variable:`CMAKE_INSTALL_PREFIX` are special:
-
-``/``
-
-  For ``<dir>`` other than the ``SYSCONFDIR``, ``LOCALSTATEDIR`` and
-  ``RUNSTATEDIR``, the value of ``CMAKE_INSTALL_<dir>`` is prefixed
-  with ``usr/`` if it is not user-specified as an absolute path.
-  For example, the ``INCLUDEDIR`` value ``include`` becomes ``usr/include``.
-  This is required by the `GNU Coding Standards`_, which state:
-
-    When building the complete GNU system, the prefix will be empty
-    and ``/usr`` will be a symbolic link to ``/``.
-
-``/usr``
-
-  For ``<dir>`` equal to ``SYSCONFDIR``, ``LOCALSTATEDIR`` or
-  ``RUNSTATEDIR``, the ``CMAKE_INSTALL_FULL_<dir>`` is computed by
-  prepending just ``/`` to the value of ``CMAKE_INSTALL_<dir>``
-  if it is not user-specified as an absolute path.
-  For example, the ``SYSCONFDIR`` value ``etc`` becomes ``/etc``.
-  This is required by the `GNU Coding Standards`_.
-
-``/opt/...``
-
-  For ``<dir>`` equal to ``SYSCONFDIR``, ``LOCALSTATEDIR`` or
-  ``RUNSTATEDIR``, the ``CMAKE_INSTALL_FULL_<dir>`` is computed by
-  *appending* the prefix to the value of ``CMAKE_INSTALL_<dir>``
-  if it is not user-specified as an absolute path.
-  For example, the ``SYSCONFDIR`` value ``etc`` becomes ``/etc/opt/...``.
-  This is defined by the `Filesystem Hierarchy Standard`_.
-
-.. _`Filesystem Hierarchy Standard`: https://refspecs.linuxfoundation.org/FHS_3.0/fhs/index.html
-
-Macros
-^^^^^^
-
-.. command:: GNUInstallDirs_get_absolute_install_dir
-
-  ::
-
-    GNUInstallDirs_get_absolute_install_dir(absvar var)
-
-  Set the given variable ``absvar`` to the absolute path contained
-  within the variable ``var``.  This is to allow the computation of an
-  absolute path, accounting for all the special cases documented
-  above.  While this macro is used to compute the various
-  ``CMAKE_INSTALL_FULL_<dir>`` variables, it is exposed publicly to
-  allow users who create additional path variables to also compute
-  absolute paths where necessary, using the same logic.
-#]=======================================================================]
-
-cmake_policy(PUSH)
-cmake_policy(SET CMP0054 NEW) # if() quoted variables not dereferenced
-
-# Convert a cache variable to PATH type
-
-macro(_GNUInstallDirs_cache_convert_to_path var description)
-  get_property(_GNUInstallDirs_cache_type CACHE ${var} PROPERTY TYPE)
-  if(_GNUInstallDirs_cache_type STREQUAL "UNINITIALIZED")
-    file(TO_CMAKE_PATH "${${var}}" _GNUInstallDirs_cmakepath)
-    set_property(CACHE ${var} PROPERTY TYPE PATH)
-    set_property(CACHE ${var} PROPERTY VALUE "${_GNUInstallDirs_cmakepath}")
-    set_property(CACHE ${var} PROPERTY HELPSTRING "${description}")
-    unset(_GNUInstallDirs_cmakepath)
-  endif()
-  unset(_GNUInstallDirs_cache_type)
-endmacro()
-
-# Create a cache variable with default for a path.
-macro(_GNUInstallDirs_cache_path var default description)
-  if(NOT DEFINED ${var})
-    set(${var} "${default}" CACHE PATH "${description}")
-  endif()
-  _GNUInstallDirs_cache_convert_to_path("${var}" "${description}")
-endmacro()
-
-# Create a cache variable with not default for a path, with a fallback
-# when unset; used for entries slaved to other entries such as
-# DATAROOTDIR.
-macro(_GNUInstallDirs_cache_path_fallback var default description)
-  if(NOT ${var})
-    set(${var} "" CACHE PATH "${description}")
-    set(${var} "${default}")
-  endif()
-  _GNUInstallDirs_cache_convert_to_path("${var}" "${description}")
-endmacro()
-
-# Installation directories
-#
-
-_GNUInstallDirs_cache_path(CMAKE_INSTALL_BINDIR "bin"
-  "User executables (bin)")
-_GNUInstallDirs_cache_path(CMAKE_INSTALL_SBINDIR "sbin"
-  "System admin executables (sbin)")
-_GNUInstallDirs_cache_path(CMAKE_INSTALL_LIBEXECDIR "libexec"
-  "Program executables (libexec)")
-_GNUInstallDirs_cache_path(CMAKE_INSTALL_SYSCONFDIR "etc"
-  "Read-only single-machine data (etc)")
-_GNUInstallDirs_cache_path(CMAKE_INSTALL_SHAREDSTATEDIR "com"
-  "Modifiable architecture-independent data (com)")
-_GNUInstallDirs_cache_path(CMAKE_INSTALL_LOCALSTATEDIR "var"
-  "Modifiable single-machine data (var)")
-
-# We check if the variable was manually set and not cached, in order to
-# allow projects to set the values as normal variables before including
-# GNUInstallDirs to avoid having the entries cached or user-editable. It
-# replaces the "if(NOT DEFINED CMAKE_INSTALL_XXX)" checks in all the
-# other cases.
-# If CMAKE_INSTALL_LIBDIR is defined, if _libdir_set is false, then the
-# variable is a normal one, otherwise it is a cache one.
-get_property(_libdir_set CACHE CMAKE_INSTALL_LIBDIR PROPERTY TYPE SET)
-if(NOT DEFINED CMAKE_INSTALL_LIBDIR OR (_libdir_set
-    AND DEFINED _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX
-    AND NOT "${_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX}" STREQUAL "${CMAKE_INSTALL_PREFIX}"))
-  # If CMAKE_INSTALL_LIBDIR is not defined, it is always executed.
-  # Otherwise:
-  #  * if _libdir_set is false it is not executed (meaning that it is
-  #    not a cache variable)
-  #  * if _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX is not defined it is
-  #    not executed
-  #  * if _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX and
-  #    CMAKE_INSTALL_PREFIX are the same string it is not executed.
-  #    _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX is updated after the
-  #    execution, of this part of code, therefore at the next inclusion
-  #    of the file, CMAKE_INSTALL_LIBDIR is defined, and the 2 strings
-  #    are equal, meaning that the if is not executed the code the
-  #    second time.
-
-  set(_LIBDIR_DEFAULT "lib")
-  # Override this default 'lib' with 'lib64' iff:
-  #  - we are on Linux system but NOT cross-compiling
-  #  - we are NOT on debian
-  #  - we are on a 64 bits system
-  # reason is: amd64 ABI: https://github.com/hjl-tools/x86-psABI/wiki/X86-psABI
-  # For Debian with multiarch, use 'lib/${CMAKE_LIBRARY_ARCHITECTURE}' if
-  # CMAKE_LIBRARY_ARCHITECTURE is set (which contains e.g. "i386-linux-gnu"
-  # and CMAKE_INSTALL_PREFIX is "/usr"
-  # See http://wiki.debian.org/Multiarch
-  if(DEFINED _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX)
-    set(__LAST_LIBDIR_DEFAULT "lib")
-    # __LAST_LIBDIR_DEFAULT is the default value that we compute from
-    # _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX, not a cache entry for
-    # the value that was last used as the default.
-    # This value is used to figure out whether the user changed the
-    # CMAKE_INSTALL_LIBDIR value manually, or if the value was the
-    # default one. When CMAKE_INSTALL_PREFIX changes, the value is
-    # updated to the new default, unless the user explicitly changed it.
-  endif()
-  if (NOT DEFINED CMAKE_SYSTEM_NAME OR NOT DEFINED CMAKE_SIZEOF_VOID_P)
-    message(AUTHOR_WARNING
-      "Unable to determine default CMAKE_INSTALL_LIBDIR directory because no target architecture is known. "
-      "Please enable at least one language before including GNUInstallDirs.")
-  endif()
-  if(CMAKE_SYSTEM_NAME MATCHES "^(Linux|kFreeBSD|GNU)$"
-      AND NOT CMAKE_CROSSCOMPILING
-      AND NOT EXISTS "/etc/arch-release")
-    if (EXISTS "/etc/debian_version") # is this a debian system ?
-      if(CMAKE_LIBRARY_ARCHITECTURE)
-        if("${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/?$")
-          set(_LIBDIR_DEFAULT "lib/${CMAKE_LIBRARY_ARCHITECTURE}")
-        endif()
-        if(DEFINED _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX
-            AND "${_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/?$")
-          set(__LAST_LIBDIR_DEFAULT "lib/${CMAKE_LIBRARY_ARCHITECTURE}")
-        endif()
-      endif()
-    else() # not debian, rely on CMAKE_SIZEOF_VOID_P:
-      if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
-        set(_LIBDIR_DEFAULT "lib64")
-        if(DEFINED _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX)
-          set(__LAST_LIBDIR_DEFAULT "lib64")
-        endif()
-      endif()
-    endif()
-  endif()
-  if(NOT DEFINED CMAKE_INSTALL_LIBDIR)
-    set(CMAKE_INSTALL_LIBDIR "${_LIBDIR_DEFAULT}" CACHE PATH "Object code libraries (${_LIBDIR_DEFAULT})")
-  elseif(DEFINED __LAST_LIBDIR_DEFAULT
-      AND "${__LAST_LIBDIR_DEFAULT}" STREQUAL "${CMAKE_INSTALL_LIBDIR}")
-    set_property(CACHE CMAKE_INSTALL_LIBDIR PROPERTY VALUE "${_LIBDIR_DEFAULT}")
-  endif()
-endif()
-_GNUInstallDirs_cache_convert_to_path(CMAKE_INSTALL_LIBDIR "Object code libraries (lib)")
-
-# Save for next run
-set(_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE INTERNAL "CMAKE_INSTALL_PREFIX during last run")
-unset(_libdir_set)
-unset(__LAST_LIBDIR_DEFAULT)
-
-_GNUInstallDirs_cache_path(CMAKE_INSTALL_INCLUDEDIR "include"
-  "C header files (include)")
-_GNUInstallDirs_cache_path(CMAKE_INSTALL_OLDINCLUDEDIR "/usr/include"
-  "C header files for non-gcc (/usr/include)")
-_GNUInstallDirs_cache_path(CMAKE_INSTALL_DATAROOTDIR "share"
-  "Read-only architecture-independent data root (share)")
-
-#-----------------------------------------------------------------------------
-# Values whose defaults are relative to DATAROOTDIR.  Store empty values in
-# the cache and store the defaults in local variables if the cache values are
-# not set explicitly.  This auto-updates the defaults as DATAROOTDIR changes.
-
-_GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_DATADIR "${CMAKE_INSTALL_DATAROOTDIR}"
-  "Read-only architecture-independent data (DATAROOTDIR)")
-
-if(CMAKE_SYSTEM_NAME MATCHES "^(([^kF].*)?BSD|DragonFly)$")
-  _GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_INFODIR "info"
-    "Info documentation (info)")
-else()
-  _GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_INFODIR "${CMAKE_INSTALL_DATAROOTDIR}/info"
-    "Info documentation (DATAROOTDIR/info)")
-endif()
-
-if(CMAKE_SYSTEM_NAME MATCHES "^(([^k].*)?BSD|DragonFly)$")
-  _GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_MANDIR "man"
-    "Man documentation (man)")
-else()
-  _GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_MANDIR "${CMAKE_INSTALL_DATAROOTDIR}/man"
-    "Man documentation (DATAROOTDIR/man)")
-endif()
-
-_GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_LOCALEDIR "${CMAKE_INSTALL_DATAROOTDIR}/locale"
-  "Locale-dependent data (DATAROOTDIR/locale)")
-_GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME}"
-  "Documentation root (DATAROOTDIR/doc/PROJECT_NAME)")
-
-_GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_RUNSTATEDIR "${CMAKE_INSTALL_LOCALSTATEDIR}/run"
-  "Run-time variable data (LOCALSTATEDIR/run)")
-
-#-----------------------------------------------------------------------------
-
-mark_as_advanced(
-  CMAKE_INSTALL_BINDIR
-  CMAKE_INSTALL_SBINDIR
-  CMAKE_INSTALL_LIBEXECDIR
-  CMAKE_INSTALL_SYSCONFDIR
-  CMAKE_INSTALL_SHAREDSTATEDIR
-  CMAKE_INSTALL_LOCALSTATEDIR
-  CMAKE_INSTALL_RUNSTATEDIR
-  CMAKE_INSTALL_LIBDIR
-  CMAKE_INSTALL_INCLUDEDIR
-  CMAKE_INSTALL_OLDINCLUDEDIR
-  CMAKE_INSTALL_DATAROOTDIR
-  CMAKE_INSTALL_DATADIR
-  CMAKE_INSTALL_INFODIR
-  CMAKE_INSTALL_LOCALEDIR
-  CMAKE_INSTALL_MANDIR
-  CMAKE_INSTALL_DOCDIR
-  )
-
-macro(GNUInstallDirs_get_absolute_install_dir absvar var)
-  if(NOT IS_ABSOLUTE "${${var}}")
-    # Handle special cases:
-    # - CMAKE_INSTALL_PREFIX == /
-    # - CMAKE_INSTALL_PREFIX == /usr
-    # - CMAKE_INSTALL_PREFIX == /opt/...
-    if("${CMAKE_INSTALL_PREFIX}" STREQUAL "/")
-      if("${dir}" STREQUAL "SYSCONFDIR" OR "${dir}" STREQUAL "LOCALSTATEDIR" OR "${dir}" STREQUAL "RUNSTATEDIR")
-        set(${absvar} "/${${var}}")
-      else()
-        if (NOT "${${var}}" MATCHES "^usr/")
-          set(${var} "usr/${${var}}")
-        endif()
-        set(${absvar} "/${${var}}")
-      endif()
-    elseif("${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/?$")
-      if("${dir}" STREQUAL "SYSCONFDIR" OR "${dir}" STREQUAL "LOCALSTATEDIR" OR "${dir}" STREQUAL "RUNSTATEDIR")
-        set(${absvar} "/${${var}}")
-      else()
-        set(${absvar} "${CMAKE_INSTALL_PREFIX}/${${var}}")
-      endif()
-    elseif("${CMAKE_INSTALL_PREFIX}" MATCHES "^/opt/.*")
-      if("${dir}" STREQUAL "SYSCONFDIR" OR "${dir}" STREQUAL "LOCALSTATEDIR" OR "${dir}" STREQUAL "RUNSTATEDIR")
-        set(${absvar} "/${${var}}${CMAKE_INSTALL_PREFIX}")
-      else()
-        set(${absvar} "${CMAKE_INSTALL_PREFIX}/${${var}}")
-      endif()
-    else()
-      set(${absvar} "${CMAKE_INSTALL_PREFIX}/${${var}}")
-    endif()
-  else()
-    set(${absvar} "${${var}}")
-  endif()
-endmacro()
-
-# Result directories
-#
-foreach(dir
-    BINDIR
-    SBINDIR
-    LIBEXECDIR
-    SYSCONFDIR
-    SHAREDSTATEDIR
-    LOCALSTATEDIR
-    RUNSTATEDIR
-    LIBDIR
-    INCLUDEDIR
-    OLDINCLUDEDIR
-    DATAROOTDIR
-    DATADIR
-    INFODIR
-    LOCALEDIR
-    MANDIR
-    DOCDIR
-    )
-  GNUInstallDirs_get_absolute_install_dir(CMAKE_INSTALL_FULL_${dir} CMAKE_INSTALL_${dir})
-endforeach()
-
-cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/GenerateExportHeader.cmake b/share/cmake-3.18/Modules/GenerateExportHeader.cmake
deleted file mode 100644
index e4481f6..0000000
--- a/share/cmake-3.18/Modules/GenerateExportHeader.cmake
+++ /dev/null
@@ -1,443 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-GenerateExportHeader
---------------------
-
-Function for generation of export macros for libraries
-
-This module provides the function ``GENERATE_EXPORT_HEADER()``.
-
-The ``GENERATE_EXPORT_HEADER`` function can be used to generate a file
-suitable for preprocessor inclusion which contains EXPORT macros to be
-used in library classes::
-
-   GENERATE_EXPORT_HEADER( LIBRARY_TARGET
-             [BASE_NAME <base_name>]
-             [EXPORT_MACRO_NAME <export_macro_name>]
-             [EXPORT_FILE_NAME <export_file_name>]
-             [DEPRECATED_MACRO_NAME <deprecated_macro_name>]
-             [NO_EXPORT_MACRO_NAME <no_export_macro_name>]
-             [INCLUDE_GUARD_NAME <include_guard_name>]
-             [STATIC_DEFINE <static_define>]
-             [NO_DEPRECATED_MACRO_NAME <no_deprecated_macro_name>]
-             [DEFINE_NO_DEPRECATED]
-             [PREFIX_NAME <prefix_name>]
-             [CUSTOM_CONTENT_FROM_VARIABLE <variable>]
-   )
-
-
-The target properties :prop_tgt:`CXX_VISIBILITY_PRESET <<LANG>_VISIBILITY_PRESET>`
-and :prop_tgt:`VISIBILITY_INLINES_HIDDEN` can be used to add the appropriate
-compile flags for targets.  See the documentation of those target properties,
-and the convenience variables
-:variable:`CMAKE_CXX_VISIBILITY_PRESET <CMAKE_<LANG>_VISIBILITY_PRESET>` and
-:variable:`CMAKE_VISIBILITY_INLINES_HIDDEN`.
-
-By default ``GENERATE_EXPORT_HEADER()`` generates macro names in a file
-name determined by the name of the library.  This means that in the
-simplest case, users of ``GenerateExportHeader`` will be equivalent to:
-
-.. code-block:: cmake
-
-   set(CMAKE_CXX_VISIBILITY_PRESET hidden)
-   set(CMAKE_VISIBILITY_INLINES_HIDDEN 1)
-   add_library(somelib someclass.cpp)
-   generate_export_header(somelib)
-   install(TARGETS somelib DESTINATION ${LIBRARY_INSTALL_DIR})
-   install(FILES
-    someclass.h
-    ${PROJECT_BINARY_DIR}/somelib_export.h DESTINATION ${INCLUDE_INSTALL_DIR}
-   )
-
-
-And in the ABI header files:
-
-.. code-block:: c++
-
-   #include "somelib_export.h"
-   class SOMELIB_EXPORT SomeClass {
-     ...
-   };
-
-
-The CMake fragment will generate a file in the
-``${CMAKE_CURRENT_BINARY_DIR}`` called ``somelib_export.h`` containing the
-macros ``SOMELIB_EXPORT``, ``SOMELIB_NO_EXPORT``, ``SOMELIB_DEPRECATED``,
-``SOMELIB_DEPRECATED_EXPORT`` and ``SOMELIB_DEPRECATED_NO_EXPORT``.
-They will be followed by content taken from the variable specified by
-the ``CUSTOM_CONTENT_FROM_VARIABLE`` option, if any.
-The resulting file should be installed with other headers in the library.
-
-The ``BASE_NAME`` argument can be used to override the file name and the
-names used for the macros:
-
-.. code-block:: cmake
-
-   add_library(somelib someclass.cpp)
-   generate_export_header(somelib
-     BASE_NAME other_name
-   )
-
-
-Generates a file called ``other_name_export.h`` containing the macros
-``OTHER_NAME_EXPORT``, ``OTHER_NAME_NO_EXPORT`` and ``OTHER_NAME_DEPRECATED``
-etc.
-
-The ``BASE_NAME`` may be overridden by specifying other options in the
-function.  For example:
-
-.. code-block:: cmake
-
-   add_library(somelib someclass.cpp)
-   generate_export_header(somelib
-     EXPORT_MACRO_NAME OTHER_NAME_EXPORT
-   )
-
-
-creates the macro ``OTHER_NAME_EXPORT`` instead of ``SOMELIB_EXPORT``, but
-other macros and the generated file name is as default:
-
-.. code-block:: cmake
-
-   add_library(somelib someclass.cpp)
-   generate_export_header(somelib
-     DEPRECATED_MACRO_NAME KDE_DEPRECATED
-   )
-
-
-creates the macro ``KDE_DEPRECATED`` instead of ``SOMELIB_DEPRECATED``.
-
-If ``LIBRARY_TARGET`` is a static library, macros are defined without
-values.
-
-If the same sources are used to create both a shared and a static
-library, the uppercased symbol ``${BASE_NAME}_STATIC_DEFINE`` should be
-used when building the static library:
-
-.. code-block:: cmake
-
-   add_library(shared_variant SHARED ${lib_SRCS})
-   add_library(static_variant ${lib_SRCS})
-   generate_export_header(shared_variant BASE_NAME libshared_and_static)
-   set_target_properties(static_variant PROPERTIES
-     COMPILE_FLAGS -DLIBSHARED_AND_STATIC_STATIC_DEFINE)
-
-This will cause the export macros to expand to nothing when building
-the static library.
-
-If ``DEFINE_NO_DEPRECATED`` is specified, then a macro
-``${BASE_NAME}_NO_DEPRECATED`` will be defined This macro can be used to
-remove deprecated code from preprocessor output:
-
-.. code-block:: cmake
-
-   option(EXCLUDE_DEPRECATED "Exclude deprecated parts of the library" FALSE)
-   if (EXCLUDE_DEPRECATED)
-     set(NO_BUILD_DEPRECATED DEFINE_NO_DEPRECATED)
-   endif()
-   generate_export_header(somelib ${NO_BUILD_DEPRECATED})
-
-
-And then in somelib:
-
-.. code-block:: c++
-
-   class SOMELIB_EXPORT SomeClass
-   {
-   public:
-   #ifndef SOMELIB_NO_DEPRECATED
-     SOMELIB_DEPRECATED void oldMethod();
-   #endif
-   };
-
-.. code-block:: c++
-
-   #ifndef SOMELIB_NO_DEPRECATED
-   void SomeClass::oldMethod() {  }
-   #endif
-
-
-If ``PREFIX_NAME`` is specified, the argument will be used as a prefix to
-all generated macros.
-
-For example:
-
-.. code-block:: cmake
-
-   generate_export_header(somelib PREFIX_NAME VTK_)
-
-Generates the macros ``VTK_SOMELIB_EXPORT`` etc.
-
-::
-
-   ADD_COMPILER_EXPORT_FLAGS( [<output_variable>] )
-
-The ``ADD_COMPILER_EXPORT_FLAGS`` function adds ``-fvisibility=hidden`` to
-:variable:`CMAKE_CXX_FLAGS <CMAKE_<LANG>_FLAGS>` if supported, and is a no-op
-on Windows which does not need extra compiler flags for exporting support.
-You may optionally pass a single argument to ``ADD_COMPILER_EXPORT_FLAGS``
-that will be populated with the ``CXX_FLAGS`` required to enable visibility
-support for the compiler/architecture in use.
-
-This function is deprecated.  Set the target properties
-:prop_tgt:`CXX_VISIBILITY_PRESET <<LANG>_VISIBILITY_PRESET>` and
-:prop_tgt:`VISIBILITY_INLINES_HIDDEN` instead.
-#]=======================================================================]
-
-include(CheckCCompilerFlag)
-include(CheckCXXCompilerFlag)
-
-# TODO: Install this macro separately?
-macro(_check_cxx_compiler_attribute _ATTRIBUTE _RESULT)
-  check_cxx_source_compiles("${_ATTRIBUTE} int somefunc() { return 0; }
-    int main() { return somefunc();}" ${_RESULT}
-  )
-endmacro()
-
-# TODO: Install this macro separately?
-macro(_check_c_compiler_attribute _ATTRIBUTE _RESULT)
-  check_c_source_compiles("${_ATTRIBUTE} int somefunc() { return 0; }
-    int main() { return somefunc();}" ${_RESULT}
-  )
-endmacro()
-
-macro(_test_compiler_hidden_visibility)
-
-  if(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.2")
-    set(GCC_TOO_OLD TRUE)
-  elseif(CMAKE_COMPILER_IS_GNUCC AND CMAKE_C_COMPILER_VERSION VERSION_LESS "4.2")
-    set(GCC_TOO_OLD TRUE)
-  elseif(CMAKE_CXX_COMPILER_ID MATCHES Intel AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "12.0")
-    set(_INTEL_TOO_OLD TRUE)
-  endif()
-
-  # Exclude XL here because it misinterprets -fvisibility=hidden even though
-  # the check_cxx_compiler_flag passes
-  if(NOT GCC_TOO_OLD
-      AND NOT _INTEL_TOO_OLD
-      AND NOT WIN32
-      AND NOT CYGWIN
-      AND NOT CMAKE_CXX_COMPILER_ID MATCHES XL
-      AND NOT CMAKE_CXX_COMPILER_ID MATCHES PGI
-      AND NOT CMAKE_CXX_COMPILER_ID MATCHES Watcom)
-    if (CMAKE_CXX_COMPILER_LOADED)
-      check_cxx_compiler_flag(-fvisibility=hidden COMPILER_HAS_HIDDEN_VISIBILITY)
-      check_cxx_compiler_flag(-fvisibility-inlines-hidden
-        COMPILER_HAS_HIDDEN_INLINE_VISIBILITY)
-    else()
-      check_c_compiler_flag(-fvisibility=hidden COMPILER_HAS_HIDDEN_VISIBILITY)
-      check_c_compiler_flag(-fvisibility-inlines-hidden
-        COMPILER_HAS_HIDDEN_INLINE_VISIBILITY)
-    endif()
-  endif()
-endmacro()
-
-macro(_test_compiler_has_deprecated)
-  # NOTE:  Some Embarcadero compilers silently compile __declspec(deprecated)
-  # without error, but this is not a documented feature and the attribute does
-  # not actually generate any warnings.
-  if(CMAKE_CXX_COMPILER_ID MATCHES Borland
-      OR CMAKE_CXX_COMPILER_ID MATCHES Embarcadero
-      OR CMAKE_CXX_COMPILER_ID MATCHES HP
-      OR GCC_TOO_OLD
-      OR CMAKE_CXX_COMPILER_ID MATCHES PGI
-      OR CMAKE_CXX_COMPILER_ID MATCHES Watcom)
-    set(COMPILER_HAS_DEPRECATED "" CACHE INTERNAL
-      "Compiler support for a deprecated attribute")
-  else()
-    if (CMAKE_CXX_COMPILER_LOADED)
-      _check_cxx_compiler_attribute("__attribute__((__deprecated__))"
-        COMPILER_HAS_DEPRECATED_ATTR)
-      if(COMPILER_HAS_DEPRECATED_ATTR)
-        set(COMPILER_HAS_DEPRECATED "${COMPILER_HAS_DEPRECATED_ATTR}"
-          CACHE INTERNAL "Compiler support for a deprecated attribute")
-      else()
-        _check_cxx_compiler_attribute("__declspec(deprecated)"
-          COMPILER_HAS_DEPRECATED)
-      endif()
-    else()
-      _check_c_compiler_attribute("__attribute__((__deprecated__))"
-        COMPILER_HAS_DEPRECATED_ATTR)
-      if(COMPILER_HAS_DEPRECATED_ATTR)
-        set(COMPILER_HAS_DEPRECATED "${COMPILER_HAS_DEPRECATED_ATTR}"
-          CACHE INTERNAL "Compiler support for a deprecated attribute")
-      else()
-        _check_c_compiler_attribute("__declspec(deprecated)"
-          COMPILER_HAS_DEPRECATED)
-      endif()
-
-    endif()
-  endif()
-endmacro()
-
-get_filename_component(_GENERATE_EXPORT_HEADER_MODULE_DIR
-  "${CMAKE_CURRENT_LIST_FILE}" PATH)
-
-macro(_DO_SET_MACRO_VALUES TARGET_LIBRARY)
-  set(DEFINE_DEPRECATED)
-  set(DEFINE_EXPORT)
-  set(DEFINE_IMPORT)
-  set(DEFINE_NO_EXPORT)
-
-  if (COMPILER_HAS_DEPRECATED_ATTR)
-    set(DEFINE_DEPRECATED "__attribute__ ((__deprecated__))")
-  elseif(COMPILER_HAS_DEPRECATED)
-    set(DEFINE_DEPRECATED "__declspec(deprecated)")
-  endif()
-
-  get_property(type TARGET ${TARGET_LIBRARY} PROPERTY TYPE)
-
-  if(NOT ${type} STREQUAL "STATIC_LIBRARY")
-    if(WIN32 OR CYGWIN)
-      set(DEFINE_EXPORT "__declspec(dllexport)")
-      set(DEFINE_IMPORT "__declspec(dllimport)")
-    elseif(COMPILER_HAS_HIDDEN_VISIBILITY)
-      set(DEFINE_EXPORT "__attribute__((visibility(\"default\")))")
-      set(DEFINE_IMPORT "__attribute__((visibility(\"default\")))")
-      set(DEFINE_NO_EXPORT "__attribute__((visibility(\"hidden\")))")
-    endif()
-  endif()
-endmacro()
-
-macro(_DO_GENERATE_EXPORT_HEADER TARGET_LIBRARY)
-  # Option overrides
-  set(options DEFINE_NO_DEPRECATED)
-  set(oneValueArgs PREFIX_NAME BASE_NAME EXPORT_MACRO_NAME EXPORT_FILE_NAME
-    DEPRECATED_MACRO_NAME NO_EXPORT_MACRO_NAME STATIC_DEFINE
-    NO_DEPRECATED_MACRO_NAME CUSTOM_CONTENT_FROM_VARIABLE INCLUDE_GUARD_NAME)
-  set(multiValueArgs)
-
-  cmake_parse_arguments(_GEH "${options}" "${oneValueArgs}" "${multiValueArgs}"
-    ${ARGN})
-
-  set(BASE_NAME "${TARGET_LIBRARY}")
-
-  if(_GEH_BASE_NAME)
-    set(BASE_NAME ${_GEH_BASE_NAME})
-  endif()
-
-  string(TOUPPER ${BASE_NAME} BASE_NAME_UPPER)
-  string(TOLOWER ${BASE_NAME} BASE_NAME_LOWER)
-
-  # Default options
-  set(EXPORT_MACRO_NAME "${_GEH_PREFIX_NAME}${BASE_NAME_UPPER}_EXPORT")
-  set(NO_EXPORT_MACRO_NAME "${_GEH_PREFIX_NAME}${BASE_NAME_UPPER}_NO_EXPORT")
-  set(EXPORT_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/${BASE_NAME_LOWER}_export.h")
-  set(DEPRECATED_MACRO_NAME "${_GEH_PREFIX_NAME}${BASE_NAME_UPPER}_DEPRECATED")
-  set(STATIC_DEFINE "${_GEH_PREFIX_NAME}${BASE_NAME_UPPER}_STATIC_DEFINE")
-  set(NO_DEPRECATED_MACRO_NAME
-    "${_GEH_PREFIX_NAME}${BASE_NAME_UPPER}_NO_DEPRECATED")
-
-  if(_GEH_UNPARSED_ARGUMENTS)
-    message(FATAL_ERROR "Unknown keywords given to GENERATE_EXPORT_HEADER(): \"${_GEH_UNPARSED_ARGUMENTS}\"")
-  endif()
-
-  if(_GEH_EXPORT_MACRO_NAME)
-    set(EXPORT_MACRO_NAME ${_GEH_PREFIX_NAME}${_GEH_EXPORT_MACRO_NAME})
-  endif()
-  string(MAKE_C_IDENTIFIER ${EXPORT_MACRO_NAME} EXPORT_MACRO_NAME)
-  if(_GEH_EXPORT_FILE_NAME)
-    if(IS_ABSOLUTE ${_GEH_EXPORT_FILE_NAME})
-      set(EXPORT_FILE_NAME ${_GEH_EXPORT_FILE_NAME})
-    else()
-      set(EXPORT_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/${_GEH_EXPORT_FILE_NAME}")
-    endif()
-  endif()
-  if(_GEH_DEPRECATED_MACRO_NAME)
-    set(DEPRECATED_MACRO_NAME ${_GEH_PREFIX_NAME}${_GEH_DEPRECATED_MACRO_NAME})
-  endif()
-  string(MAKE_C_IDENTIFIER ${DEPRECATED_MACRO_NAME} DEPRECATED_MACRO_NAME)
-  if(_GEH_NO_EXPORT_MACRO_NAME)
-    set(NO_EXPORT_MACRO_NAME ${_GEH_PREFIX_NAME}${_GEH_NO_EXPORT_MACRO_NAME})
-  endif()
-  string(MAKE_C_IDENTIFIER ${NO_EXPORT_MACRO_NAME} NO_EXPORT_MACRO_NAME)
-  if(_GEH_STATIC_DEFINE)
-    set(STATIC_DEFINE ${_GEH_PREFIX_NAME}${_GEH_STATIC_DEFINE})
-  endif()
-  string(MAKE_C_IDENTIFIER ${STATIC_DEFINE} STATIC_DEFINE)
-
-  if(_GEH_DEFINE_NO_DEPRECATED)
-    set(DEFINE_NO_DEPRECATED 1)
-  else()
-    set(DEFINE_NO_DEPRECATED 0)
-  endif()
-
-  if(_GEH_NO_DEPRECATED_MACRO_NAME)
-    set(NO_DEPRECATED_MACRO_NAME
-      ${_GEH_PREFIX_NAME}${_GEH_NO_DEPRECATED_MACRO_NAME})
-  endif()
-  string(MAKE_C_IDENTIFIER ${NO_DEPRECATED_MACRO_NAME} NO_DEPRECATED_MACRO_NAME)
-
-  if(_GEH_INCLUDE_GUARD_NAME)
-    set(INCLUDE_GUARD_NAME ${_GEH_INCLUDE_GUARD_NAME})
-  else()
-    set(INCLUDE_GUARD_NAME "${EXPORT_MACRO_NAME}_H")
-  endif()
-
-  get_target_property(EXPORT_IMPORT_CONDITION ${TARGET_LIBRARY} DEFINE_SYMBOL)
-
-  if(NOT EXPORT_IMPORT_CONDITION)
-    set(EXPORT_IMPORT_CONDITION ${TARGET_LIBRARY}_EXPORTS)
-  endif()
-  string(MAKE_C_IDENTIFIER ${EXPORT_IMPORT_CONDITION} EXPORT_IMPORT_CONDITION)
-
-  if(_GEH_CUSTOM_CONTENT_FROM_VARIABLE)
-    if(DEFINED "${_GEH_CUSTOM_CONTENT_FROM_VARIABLE}")
-      set(CUSTOM_CONTENT "${${_GEH_CUSTOM_CONTENT_FROM_VARIABLE}}")
-    else()
-      set(CUSTOM_CONTENT "")
-    endif()
-  endif()
-
-  configure_file("${_GENERATE_EXPORT_HEADER_MODULE_DIR}/exportheader.cmake.in"
-    "${EXPORT_FILE_NAME}" @ONLY)
-endmacro()
-
-function(GENERATE_EXPORT_HEADER TARGET_LIBRARY)
-  get_property(type TARGET ${TARGET_LIBRARY} PROPERTY TYPE)
-  if(NOT ${type} STREQUAL "STATIC_LIBRARY"
-      AND NOT ${type} STREQUAL "SHARED_LIBRARY"
-      AND NOT ${type} STREQUAL "OBJECT_LIBRARY"
-      AND NOT ${type} STREQUAL "MODULE_LIBRARY")
-    message(WARNING "This macro can only be used with libraries")
-    return()
-  endif()
-  _test_compiler_hidden_visibility()
-  _test_compiler_has_deprecated()
-  _do_set_macro_values(${TARGET_LIBRARY})
-  _do_generate_export_header(${TARGET_LIBRARY} ${ARGN})
-endfunction()
-
-function(add_compiler_export_flags)
-  if(NOT CMAKE_MINIMUM_REQUIRED_VERSION VERSION_LESS 2.8.12)
-    message(DEPRECATION "The add_compiler_export_flags function is obsolete. Use the CXX_VISIBILITY_PRESET and VISIBILITY_INLINES_HIDDEN target properties instead.")
-  endif()
-
-  _test_compiler_hidden_visibility()
-  _test_compiler_has_deprecated()
-
-  option(USE_COMPILER_HIDDEN_VISIBILITY
-    "Use HIDDEN visibility support if available." ON)
-  mark_as_advanced(USE_COMPILER_HIDDEN_VISIBILITY)
-  if(NOT (USE_COMPILER_HIDDEN_VISIBILITY AND COMPILER_HAS_HIDDEN_VISIBILITY))
-    # Just return if there are no flags to add.
-    return()
-  endif()
-
-  set (EXTRA_FLAGS "-fvisibility=hidden")
-
-  if(COMPILER_HAS_HIDDEN_INLINE_VISIBILITY)
-    set (EXTRA_FLAGS "${EXTRA_FLAGS} -fvisibility-inlines-hidden")
-  endif()
-
-  # Either return the extra flags needed in the supplied argument, or to the
-  # CMAKE_CXX_FLAGS if no argument is supplied.
-  if(ARGC GREATER 0)
-    set(${ARGV0} "${EXTRA_FLAGS}" PARENT_SCOPE)
-  else()
-    string(APPEND CMAKE_CXX_FLAGS " ${EXTRA_FLAGS}")
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" PARENT_SCOPE)
-  endif()
-endfunction()
diff --git a/share/cmake-3.18/Modules/GetPrerequisites.cmake b/share/cmake-3.18/Modules/GetPrerequisites.cmake
deleted file mode 100644
index 5c8c196..0000000
--- a/share/cmake-3.18/Modules/GetPrerequisites.cmake
+++ /dev/null
@@ -1,1047 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-GetPrerequisites
-----------------
-
-.. deprecated:: 3.16
-
-  Use :command:`file(GET_RUNTIME_DEPENDENCIES)` instead.
-
-Functions to analyze and list executable file prerequisites.
-
-This module provides functions to list the .dll, .dylib or .so files
-that an executable or shared library file depends on.  (Its
-prerequisites.)
-
-It uses various tools to obtain the list of required shared library
-files:
-
-::
-
-   dumpbin (Windows)
-   objdump (MinGW on Windows)
-   ldd (Linux/Unix)
-   otool (Mac OSX)
-
-The following functions are provided by this module:
-
-::
-
-   get_prerequisites
-   list_prerequisites
-   list_prerequisites_by_glob
-   gp_append_unique
-   is_file_executable
-   gp_item_default_embedded_path
-     (projects can override with gp_item_default_embedded_path_override)
-   gp_resolve_item
-     (projects can override with gp_resolve_item_override)
-   gp_resolved_file_type
-     (projects can override with gp_resolved_file_type_override)
-   gp_file_type
-
-Requires CMake 2.6 or greater because it uses function, break, return
-and PARENT_SCOPE.
-
-::
-
-  GET_PREREQUISITES(<target> <prerequisites_var> <exclude_system> <recurse>
-                    <exepath> <dirs> [<rpaths>])
-
-Get the list of shared library files required by <target>.  The list
-in the variable named <prerequisites_var> should be empty on first
-entry to this function.  On exit, <prerequisites_var> will contain the
-list of required shared library files.
-
-<target> is the full path to an executable file.  <prerequisites_var>
-is the name of a CMake variable to contain the results.
-<exclude_system> must be 0 or 1 indicating whether to include or
-exclude "system" prerequisites.  If <recurse> is set to 1 all
-prerequisites will be found recursively, if set to 0 only direct
-prerequisites are listed.  <exepath> is the path to the top level
-executable used for @executable_path replacment on the Mac.  <dirs> is
-a list of paths where libraries might be found: these paths are
-searched first when a target without any path info is given.  Then
-standard system locations are also searched: PATH, Framework
-locations, /usr/lib...
-
-The variable GET_PREREQUISITES_VERBOSE can be set to true to enable verbose
-output.
-
-::
-
-  LIST_PREREQUISITES(<target> [<recurse> [<exclude_system> [<verbose>]]])
-
-Print a message listing the prerequisites of <target>.
-
-<target> is the name of a shared library or executable target or the
-full path to a shared library or executable file.  If <recurse> is set
-to 1 all prerequisites will be found recursively, if set to 0 only
-direct prerequisites are listed.  <exclude_system> must be 0 or 1
-indicating whether to include or exclude "system" prerequisites.  With
-<verbose> set to 0 only the full path names of the prerequisites are
-printed, set to 1 extra informatin will be displayed.
-
-::
-
-  LIST_PREREQUISITES_BY_GLOB(<glob_arg> <glob_exp>)
-
-Print the prerequisites of shared library and executable files
-matching a globbing pattern.  <glob_arg> is GLOB or GLOB_RECURSE and
-<glob_exp> is a globbing expression used with "file(GLOB" or
-"file(GLOB_RECURSE" to retrieve a list of matching files.  If a
-matching file is executable, its prerequisites are listed.
-
-Any additional (optional) arguments provided are passed along as the
-optional arguments to the list_prerequisites calls.
-
-::
-
-  GP_APPEND_UNIQUE(<list_var> <value>)
-
-Append <value> to the list variable <list_var> only if the value is
-not already in the list.
-
-::
-
-  IS_FILE_EXECUTABLE(<file> <result_var>)
-
-Return 1 in <result_var> if <file> is a binary executable, 0
-otherwise.
-
-::
-
-  GP_ITEM_DEFAULT_EMBEDDED_PATH(<item> <default_embedded_path_var>)
-
-Return the path that others should refer to the item by when the item
-is embedded inside a bundle.
-
-Override on a per-project basis by providing a project-specific
-gp_item_default_embedded_path_override function.
-
-::
-
-  GP_RESOLVE_ITEM(<context> <item> <exepath> <dirs> <resolved_item_var>
-                  [<rpaths>])
-
-Resolve an item into an existing full path file.
-
-Override on a per-project basis by providing a project-specific
-gp_resolve_item_override function.
-
-::
-
-  GP_RESOLVED_FILE_TYPE(<original_file> <file> <exepath> <dirs> <type_var>
-                        [<rpaths>])
-
-Return the type of <file> with respect to <original_file>.  String
-describing type of prerequisite is returned in variable named
-<type_var>.
-
-Use <exepath> and <dirs> if necessary to resolve non-absolute <file>
-values -- but only for non-embedded items.
-
-Possible types are:
-
-::
-
-   system
-   local
-   embedded
-   other
-
-Override on a per-project basis by providing a project-specific
-gp_resolved_file_type_override function.
-
-::
-
-  GP_FILE_TYPE(<original_file> <file> <type_var>)
-
-Return the type of <file> with respect to <original_file>.  String
-describing type of prerequisite is returned in variable named
-<type_var>.
-
-Possible types are:
-
-::
-
-   system
-   local
-   embedded
-   other
-#]=======================================================================]
-
-cmake_policy(PUSH)
-cmake_policy(SET CMP0057 NEW) # if IN_LIST
-
-function(gp_append_unique list_var value)
-  if(NOT value IN_LIST ${list_var})
-    set(${list_var} ${${list_var}} "${value}" PARENT_SCOPE)
-  endif()
-endfunction()
-
-
-function(is_file_executable file result_var)
-  #
-  # A file is not executable until proven otherwise:
-  #
-  set(${result_var} 0 PARENT_SCOPE)
-
-  get_filename_component(file_full "${file}" ABSOLUTE)
-  string(TOLOWER "${file_full}" file_full_lower)
-
-  # If file name ends in .exe on Windows, *assume* executable:
-  #
-  if(WIN32 AND NOT UNIX)
-    if("${file_full_lower}" MATCHES "\\.exe$")
-      set(${result_var} 1 PARENT_SCOPE)
-      return()
-    endif()
-
-    # A clause could be added here that uses output or return value of dumpbin
-    # to determine ${result_var}. In 99%+? practical cases, the exe name
-    # match will be sufficient...
-    #
-  endif()
-
-  # Use the information returned from the Unix shell command "file" to
-  # determine if ${file_full} should be considered an executable file...
-  #
-  # If the file command's output contains "executable" and does *not* contain
-  # "text" then it is likely an executable suitable for prerequisite analysis
-  # via the get_prerequisites macro.
-  #
-  if(UNIX)
-    if(NOT file_cmd)
-      find_program(file_cmd "file")
-      mark_as_advanced(file_cmd)
-    endif()
-
-    if(file_cmd)
-      execute_process(COMMAND "${file_cmd}" "${file_full}"
-        RESULT_VARIABLE file_rv
-        OUTPUT_VARIABLE file_ov
-        ERROR_VARIABLE file_ev
-        OUTPUT_STRIP_TRAILING_WHITESPACE
-        )
-      if(NOT file_rv STREQUAL "0")
-        message(FATAL_ERROR "${file_cmd} failed: ${file_rv}\n${file_ev}")
-      endif()
-
-      # Replace the name of the file in the output with a placeholder token
-      # (the string " _file_full_ ") so that just in case the path name of
-      # the file contains the word "text" or "executable" we are not fooled
-      # into thinking "the wrong thing" because the file name matches the
-      # other 'file' command output we are looking for...
-      #
-      string(REPLACE "${file_full}" " _file_full_ " file_ov "${file_ov}")
-      string(TOLOWER "${file_ov}" file_ov)
-
-      #message(STATUS "file_ov='${file_ov}'")
-      if("${file_ov}" MATCHES "executable")
-        #message(STATUS "executable!")
-        if("${file_ov}" MATCHES "text")
-          #message(STATUS "but text, so *not* a binary executable!")
-        else()
-          set(${result_var} 1 PARENT_SCOPE)
-          return()
-        endif()
-      endif()
-
-      # Also detect position independent executables on Linux,
-      # where "file" gives "shared object ... (uses shared libraries)"
-      if("${file_ov}" MATCHES "shared object.*\(uses shared libs\)")
-        set(${result_var} 1 PARENT_SCOPE)
-        return()
-      endif()
-
-      # "file" version 5.22 does not print "(used shared libraries)"
-      # but uses "interpreter"
-      if("${file_ov}" MATCHES "shared object.*interpreter")
-        set(${result_var} 1 PARENT_SCOPE)
-        return()
-      endif()
-
-    else()
-      message(STATUS "warning: No 'file' command, skipping execute_process...")
-    endif()
-  endif()
-endfunction()
-
-
-function(gp_item_default_embedded_path item default_embedded_path_var)
-
-  # On Windows and Linux, "embed" prerequisites in the same directory
-  # as the executable by default:
-  #
-  set(path "@executable_path")
-
-  # On the Mac, relative to the executable depending on the type
-  # of the thing we are embedding:
-  #
-  if(APPLE)
-    #
-    # The assumption here is that all executables in the bundle will be
-    # in same-level-directories inside the bundle. The parent directory
-    # of an executable inside the bundle should be MacOS or a sibling of
-    # MacOS and all embedded paths returned from here will begin with
-    # "@executable_path/../" and will work from all executables in all
-    # such same-level-directories inside the bundle.
-    #
-
-    # By default, embed things right next to the main bundle executable:
-    #
-    set(path "@executable_path/../../Contents/MacOS")
-
-    # Embed frameworks and .dylibs in the embedded "Frameworks" directory
-    # (sibling of MacOS):
-    #
-    if(item MATCHES "[^/]+\\.framework/" OR item MATCHES "\\.dylib$")
-      set(path "@executable_path/../Frameworks")
-    endif()
-  endif()
-
-  # Provide a hook so that projects can override the default embedded location
-  # of any given library by whatever logic they choose:
-  #
-  if(COMMAND gp_item_default_embedded_path_override)
-    gp_item_default_embedded_path_override("${item}" path)
-  endif()
-
-  set(${default_embedded_path_var} "${path}" PARENT_SCOPE)
-endfunction()
-
-
-function(gp_resolve_item context item exepath dirs resolved_item_var)
-  set(resolved 0)
-  set(resolved_item "${item}")
-  if(ARGC GREATER 5)
-    set(rpaths "${ARGV5}")
-  else()
-    set(rpaths "")
-  endif()
-
-  # Is it already resolved?
-  #
-  if(IS_ABSOLUTE "${resolved_item}" AND EXISTS "${resolved_item}")
-    set(resolved 1)
-  endif()
-
-  if(NOT resolved)
-    if(item MATCHES "^@executable_path")
-      #
-      # @executable_path references are assumed relative to exepath
-      #
-      string(REPLACE "@executable_path" "${exepath}" ri "${item}")
-      get_filename_component(ri "${ri}" ABSOLUTE)
-
-      if(EXISTS "${ri}")
-        #message(STATUS "info: embedded item exists (${ri})")
-        set(resolved 1)
-        set(resolved_item "${ri}")
-      else()
-        message(STATUS "warning: embedded item does not exist '${ri}'")
-      endif()
-    endif()
-  endif()
-
-  if(NOT resolved)
-    if(item MATCHES "^@loader_path")
-      #
-      # @loader_path references are assumed relative to the
-      # PATH of the given "context" (presumably another library)
-      #
-      get_filename_component(contextpath "${context}" PATH)
-      string(REPLACE "@loader_path" "${contextpath}" ri "${item}")
-      get_filename_component(ri "${ri}" ABSOLUTE)
-
-      if(EXISTS "${ri}")
-        #message(STATUS "info: embedded item exists (${ri})")
-        set(resolved 1)
-        set(resolved_item "${ri}")
-      else()
-        message(STATUS "warning: embedded item does not exist '${ri}'")
-      endif()
-    endif()
-  endif()
-
-  if(NOT resolved)
-    if(item MATCHES "^@rpath")
-      #
-      # @rpath references are relative to the paths built into the binaries with -rpath
-      # We handle this case like we do for other Unixes
-      #
-      string(REPLACE "@rpath/" "" norpath_item "${item}")
-
-      set(ri "ri-NOTFOUND")
-      find_file(ri "${norpath_item}" ${exepath} ${dirs} ${rpaths} NO_DEFAULT_PATH)
-      if(ri)
-        #message(STATUS "info: 'find_file' in exepath/dirs/rpaths (${ri})")
-        set(resolved 1)
-        set(resolved_item "${ri}")
-        set(ri "ri-NOTFOUND")
-      endif()
-
-    endif()
-  endif()
-
-  if(NOT resolved)
-    set(ri "ri-NOTFOUND")
-    find_file(ri "${item}" ${exepath} ${dirs} NO_DEFAULT_PATH)
-    find_file(ri "${item}" ${exepath} ${dirs} /usr/lib)
-
-    get_filename_component(basename_item "${item}" NAME)
-    find_file(ri "${basename_item}" PATHS ${exepath} ${dirs} NO_DEFAULT_PATH)
-    find_file(ri "${basename_item}" PATHS /usr/lib)
-
-    if(ri)
-      #message(STATUS "info: 'find_file' in exepath/dirs (${ri})")
-      set(resolved 1)
-      set(resolved_item "${ri}")
-      set(ri "ri-NOTFOUND")
-    endif()
-  endif()
-
-  if(NOT resolved)
-    if(item MATCHES "[^/]+\\.framework/")
-      set(fw "fw-NOTFOUND")
-      find_file(fw "${item}"
-        "~/Library/Frameworks"
-        "/Library/Frameworks"
-        "/System/Library/Frameworks"
-      )
-      if(fw)
-        #message(STATUS "info: 'find_file' found framework (${fw})")
-        set(resolved 1)
-        set(resolved_item "${fw}")
-        set(fw "fw-NOTFOUND")
-      endif()
-    endif()
-  endif()
-
-  # Using find_program on Windows will find dll files that are in the PATH.
-  # (Converting simple file names into full path names if found.)
-  #
-  if(WIN32 AND NOT UNIX)
-  if(NOT resolved)
-    set(ri "ri-NOTFOUND")
-    find_program(ri "${item}" PATHS ${exepath} ${dirs} NO_DEFAULT_PATH)
-    find_program(ri "${item}" PATHS ${exepath} ${dirs})
-    if(ri)
-      #message(STATUS "info: 'find_program' in exepath/dirs (${ri})")
-      set(resolved 1)
-      set(resolved_item "${ri}")
-      set(ri "ri-NOTFOUND")
-    endif()
-  endif()
-  endif()
-
-  # Provide a hook so that projects can override item resolution
-  # by whatever logic they choose:
-  #
-  if(COMMAND gp_resolve_item_override)
-    gp_resolve_item_override("${context}" "${item}" "${exepath}" "${dirs}" resolved_item resolved)
-  endif()
-
-  if(NOT resolved)
-    message(STATUS "
-warning: cannot resolve item '${item}'
-
-  possible problems:
-    need more directories?
-    need to use InstallRequiredSystemLibraries?
-    run in install tree instead of build tree?
-")
-#    message(STATUS "
-#******************************************************************************
-#warning: cannot resolve item '${item}'
-#
-#  possible problems:
-#    need more directories?
-#    need to use InstallRequiredSystemLibraries?
-#    run in install tree instead of build tree?
-#
-#    context='${context}'
-#    item='${item}'
-#    exepath='${exepath}'
-#    dirs='${dirs}'
-#    resolved_item_var='${resolved_item_var}'
-#******************************************************************************
-#")
-  endif()
-
-  set(${resolved_item_var} "${resolved_item}" PARENT_SCOPE)
-endfunction()
-
-
-function(gp_resolved_file_type original_file file exepath dirs type_var)
-  if(ARGC GREATER 5)
-    set(rpaths "${ARGV5}")
-  else()
-    set(rpaths "")
-  endif()
-  #message(STATUS "**")
-
-  if(NOT IS_ABSOLUTE "${original_file}")
-    message(STATUS "warning: gp_resolved_file_type expects absolute full path for first arg original_file")
-  endif()
-  if(IS_ABSOLUTE "${original_file}")
-    get_filename_component(original_file "${original_file}" ABSOLUTE) # canonicalize path
-  endif()
-
-  set(is_embedded 0)
-  set(is_local 0)
-  set(is_system 0)
-
-  set(resolved_file "${file}")
-
-  if("${file}" MATCHES "^@(executable|loader)_path")
-    set(is_embedded 1)
-  endif()
-
-  if(NOT is_embedded)
-    if(NOT IS_ABSOLUTE "${file}")
-      gp_resolve_item("${original_file}" "${file}" "${exepath}" "${dirs}" resolved_file "${rpaths}")
-    endif()
-    if(IS_ABSOLUTE "${resolved_file}")
-      get_filename_component(resolved_file "${resolved_file}" ABSOLUTE) # canonicalize path
-    endif()
-
-    string(TOLOWER "${original_file}" original_lower)
-    string(TOLOWER "${resolved_file}" lower)
-
-    if(UNIX)
-      if(resolved_file MATCHES "^(/lib/|/lib32/|/libx32/|/lib64/|/usr/lib/|/usr/lib32/|/usr/libx32/|/usr/lib64/|/usr/X11R6/|/usr/bin/)")
-        set(is_system 1)
-      endif()
-    endif()
-
-    if(APPLE)
-      if(resolved_file MATCHES "^(/System/Library/|/usr/lib/)")
-        set(is_system 1)
-      endif()
-    endif()
-
-    if(WIN32)
-      string(TOLOWER "$ENV{SystemRoot}" sysroot)
-      file(TO_CMAKE_PATH "${sysroot}" sysroot)
-
-      string(TOLOWER "$ENV{windir}" windir)
-      file(TO_CMAKE_PATH "${windir}" windir)
-
-      if(lower MATCHES "^(${sysroot}/sys(tem|wow)|${windir}/sys(tem|wow)|(.*/)*(msvc|api-ms-win-|vcruntime)[^/]+dll)")
-        set(is_system 1)
-      endif()
-
-      if(UNIX)
-        # if cygwin, we can get the properly formed windows paths from cygpath
-        find_program(CYGPATH_EXECUTABLE cygpath)
-
-        if(CYGPATH_EXECUTABLE)
-          execute_process(COMMAND ${CYGPATH_EXECUTABLE} -W
-                          RESULT_VARIABLE env_rv
-                          OUTPUT_VARIABLE env_windir
-                          ERROR_VARIABLE env_ev
-                          OUTPUT_STRIP_TRAILING_WHITESPACE)
-          if(NOT env_rv STREQUAL "0")
-            message(FATAL_ERROR "${CYGPATH_EXECUTABLE} -W failed: ${env_rv}\n${env_ev}")
-          endif()
-          execute_process(COMMAND ${CYGPATH_EXECUTABLE} -S
-                          RESULT_VARIABLE env_rv
-                          OUTPUT_VARIABLE env_sysdir
-                          ERROR_VARIABLE env_ev
-                          OUTPUT_STRIP_TRAILING_WHITESPACE)
-          if(NOT env_rv STREQUAL "0")
-            message(FATAL_ERROR "${CYGPATH_EXECUTABLE} -S failed: ${env_rv}\n${env_ev}")
-          endif()
-          string(TOLOWER "${env_windir}" windir)
-          string(TOLOWER "${env_sysdir}" sysroot)
-
-          if(lower MATCHES "^(${sysroot}/sys(tem|wow)|${windir}/sys(tem|wow)|(.*/)*(msvc|api-ms-win-|vcruntime)[^/]+dll)")
-            set(is_system 1)
-          endif()
-        endif()
-      endif()
-    endif()
-
-    if(NOT is_system)
-      get_filename_component(original_path "${original_lower}" PATH)
-      get_filename_component(path "${lower}" PATH)
-      if(original_path STREQUAL path)
-        set(is_local 1)
-      else()
-        string(LENGTH "${original_path}/" original_length)
-        string(LENGTH "${lower}" path_length)
-        if(${path_length} GREATER ${original_length})
-          string(SUBSTRING "${lower}" 0 ${original_length} path)
-          if("${original_path}/" STREQUAL path)
-            set(is_embedded 1)
-          endif()
-        endif()
-      endif()
-    endif()
-  endif()
-
-  # Return type string based on computed booleans:
-  #
-  set(type "other")
-
-  if(is_system)
-    set(type "system")
-  elseif(is_embedded)
-    set(type "embedded")
-  elseif(is_local)
-    set(type "local")
-  endif()
-
-  #message(STATUS "gp_resolved_file_type: '${file}' '${resolved_file}'")
-  #message(STATUS "                type: '${type}'")
-
-  if(NOT is_embedded)
-    if(NOT IS_ABSOLUTE "${resolved_file}")
-      if(lower MATCHES "^(msvc|api-ms-win-|vcruntime)[^/]+dll" AND is_system)
-        message(STATUS "info: non-absolute msvc file '${file}' returning type '${type}'")
-      else()
-        message(STATUS "warning: gp_resolved_file_type non-absolute file '${file}' returning type '${type}' -- possibly incorrect")
-      endif()
-    endif()
-  endif()
-
-  # Provide a hook so that projects can override the decision on whether a
-  # library belongs to the system or not by whatever logic they choose:
-  #
-  if(COMMAND gp_resolved_file_type_override)
-    gp_resolved_file_type_override("${resolved_file}" type)
-  endif()
-
-  set(${type_var} "${type}" PARENT_SCOPE)
-
-  #message(STATUS "**")
-endfunction()
-
-
-function(gp_file_type original_file file type_var)
-  if(NOT IS_ABSOLUTE "${original_file}")
-    message(STATUS "warning: gp_file_type expects absolute full path for first arg original_file")
-  endif()
-
-  get_filename_component(exepath "${original_file}" PATH)
-
-  set(type "")
-  gp_resolved_file_type("${original_file}" "${file}" "${exepath}" "" type)
-
-  set(${type_var} "${type}" PARENT_SCOPE)
-endfunction()
-
-
-function(get_prerequisites target prerequisites_var exclude_system recurse exepath dirs)
-  set(verbose 0)
-  set(eol_char "E")
-  if(ARGC GREATER 6)
-    set(rpaths "${ARGV6}")
-  else()
-    set(rpaths "")
-  endif()
-
-  if(GET_PREREQUISITES_VERBOSE)
-    set(verbose 1)
-  endif()
-
-  if(NOT IS_ABSOLUTE "${target}")
-    message("warning: target '${target}' is not absolute...")
-  endif()
-
-  if(NOT EXISTS "${target}")
-    message("warning: target '${target}' does not exist...")
-    return()
-  endif()
-
-  # Check for a script by extension (.bat,.sh,...) or if the file starts with "#!" (shebang)
-  file(READ ${target} file_contents LIMIT 5)
-  if(target MATCHES "\\.(bat|c?sh|bash|ksh|cmd)$" OR file_contents MATCHES "^#!")
-    message(STATUS "GetPrequisites(${target}) : ignoring script file")
-    # Clear var
-    set(${prerequisites_var} "" PARENT_SCOPE)
-    return()
-  endif()
-
-  set(gp_cmd_paths ${gp_cmd_paths}
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\14.0;InstallDir]/../../VC/bin"
-    "$ENV{VS140COMNTOOLS}/../../VC/bin"
-    "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\12.0;InstallDir]/../../VC/bin"
-    "$ENV{VS120COMNTOOLS}/../../VC/bin"
-    "C:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0;InstallDir]/../../VC/bin"
-    "$ENV{VS110COMNTOOLS}/../../VC/bin"
-    "C:/Program Files (x86)/Microsoft Visual Studio 11.0/VC/bin"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0;InstallDir]/../../VC/bin"
-    "$ENV{VS100COMNTOOLS}/../../VC/bin"
-    "C:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/bin"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\9.0;InstallDir]/../../VC/bin"
-    "$ENV{VS90COMNTOOLS}/../../VC/bin"
-    "C:/Program Files/Microsoft Visual Studio 9.0/VC/bin"
-    "C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/bin"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0;InstallDir]/../../VC/bin"
-    "$ENV{VS80COMNTOOLS}/../../VC/bin"
-    "C:/Program Files/Microsoft Visual Studio 8/VC/BIN"
-    "C:/Program Files (x86)/Microsoft Visual Studio 8/VC/BIN"
-    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\7.1;InstallDir]/../../VC7/bin"
-    "$ENV{VS71COMNTOOLS}/../../VC7/bin"
-    "C:/Program Files/Microsoft Visual Studio .NET 2003/VC7/BIN"
-    "C:/Program Files (x86)/Microsoft Visual Studio .NET 2003/VC7/BIN"
-    )
-
-  # <setup-gp_tool-vars>
-  #
-  # Try to choose the right tool by default. Caller can set gp_tool prior to
-  # calling this function to force using a different tool.
-  #
-  if(NOT gp_tool)
-    set(gp_tool "ldd")
-
-    if(APPLE)
-      set(gp_tool "otool")
-    endif()
-
-    if(WIN32 AND NOT UNIX) # This is how to check for cygwin, har!
-      find_program(gp_dumpbin "dumpbin" PATHS ${gp_cmd_paths})
-      if(gp_dumpbin)
-        set(gp_tool "dumpbin")
-      elseif(CMAKE_OBJDUMP) # Try harder. Maybe we're on MinGW
-        set(gp_tool "${CMAKE_OBJDUMP}")
-      else()
-        set(gp_tool "objdump")
-      endif()
-    endif()
-  endif()
-
-  find_program(gp_cmd ${gp_tool} PATHS ${gp_cmd_paths})
-
-  if(NOT gp_cmd)
-    message(STATUS "warning: could not find '${gp_tool}' - cannot analyze prerequisites...")
-    return()
-  endif()
-
-  set(gp_cmd_maybe_filter)      # optional command to pre-filter gp_tool results
-
-  if(gp_tool MATCHES "ldd$")
-    set(gp_cmd_args "")
-    set(gp_regex "^[\t ]*[^\t ]+ =>[\t ]+([^\t\(]+)( \(.+\))?${eol_char}$")
-    set(gp_regex_error "not found${eol_char}$")
-    set(gp_regex_fallback "^[\t ]*([^\t ]+) => ([^\t ]+).*${eol_char}$")
-    set(gp_regex_cmp_count 1)
-  elseif(gp_tool MATCHES "otool$")
-    set(gp_cmd_args "-L")
-    set(gp_regex "^\t([^\t]+) \\(compatibility version ([0-9]+.[0-9]+.[0-9]+), current version ([0-9]+.[0-9]+.[0-9]+)\\)${eol_char}$")
-    set(gp_regex_error "")
-    set(gp_regex_fallback "")
-    set(gp_regex_cmp_count 3)
-  elseif(gp_tool MATCHES "dumpbin$")
-    set(gp_cmd_args "/dependents")
-    set(gp_regex "^    ([^ ].*[Dd][Ll][Ll])${eol_char}$")
-    set(gp_regex_error "")
-    set(gp_regex_fallback "")
-    set(gp_regex_cmp_count 1)
-  elseif(gp_tool MATCHES "objdump$")
-    set(gp_cmd_args "-p")
-    set(gp_regex "^\t*DLL Name: (.*\\.[Dd][Ll][Ll])${eol_char}$")
-    set(gp_regex_error "")
-    set(gp_regex_fallback "")
-    set(gp_regex_cmp_count 1)
-    # objdump generates copious output so we create a grep filter to pre-filter results
-    if(WIN32)
-      find_program(gp_grep_cmd findstr)
-    else()
-      find_program(gp_grep_cmd grep)
-    endif()
-    if(gp_grep_cmd)
-      set(gp_cmd_maybe_filter COMMAND ${gp_grep_cmd} "-a" "^[[:blank:]]*DLL Name: ")
-    endif()
-  else()
-    message(STATUS "warning: gp_tool='${gp_tool}' is an unknown tool...")
-    message(STATUS "CMake function get_prerequisites needs more code to handle '${gp_tool}'")
-    message(STATUS "Valid gp_tool values are dumpbin, ldd, objdump and otool.")
-    return()
-  endif()
-
-
-  if(gp_tool MATCHES "dumpbin$")
-    # When running dumpbin, it also needs the "Common7/IDE" directory in the
-    # PATH. It will already be in the PATH if being run from a Visual Studio
-    # command prompt. Add it to the PATH here in case we are running from a
-    # different command prompt.
-    #
-    get_filename_component(gp_cmd_dir "${gp_cmd}" PATH)
-    get_filename_component(gp_cmd_dlls_dir "${gp_cmd_dir}/../../Common7/IDE" ABSOLUTE)
-    # Use cmake paths as a user may have a PATH element ending with a backslash.
-    # This will escape the list delimiter and create havoc!
-    if(EXISTS "${gp_cmd_dlls_dir}")
-      # only add to the path if it is not already in the path
-      set(gp_found_cmd_dlls_dir 0)
-      file(TO_CMAKE_PATH "$ENV{PATH}" env_path)
-      foreach(gp_env_path_element ${env_path})
-        if(gp_env_path_element STREQUAL gp_cmd_dlls_dir)
-          set(gp_found_cmd_dlls_dir 1)
-        endif()
-      endforeach()
-
-      if(NOT gp_found_cmd_dlls_dir)
-        file(TO_NATIVE_PATH "${gp_cmd_dlls_dir}" gp_cmd_dlls_dir)
-        set(ENV{PATH} "$ENV{PATH};${gp_cmd_dlls_dir}")
-      endif()
-    endif()
-  endif()
-  #
-  # </setup-gp_tool-vars>
-
-  if(gp_tool MATCHES "ldd$")
-    set(old_ld_env "$ENV{LD_LIBRARY_PATH}")
-    set(new_ld_env "${exepath}")
-    foreach(dir ${dirs})
-      string(APPEND new_ld_env ":${dir}")
-    endforeach()
-    set(ENV{LD_LIBRARY_PATH} "${new_ld_env}:$ENV{LD_LIBRARY_PATH}")
-  endif()
-
-
-  # Track new prerequisites at each new level of recursion. Start with an
-  # empty list at each level:
-  #
-  set(unseen_prereqs)
-
-  # Run gp_cmd on the target:
-  #
-  execute_process(
-    COMMAND ${gp_cmd} ${gp_cmd_args} ${target}
-    ${gp_cmd_maybe_filter}
-    RESULT_VARIABLE gp_rv
-    OUTPUT_VARIABLE gp_cmd_ov
-    ERROR_VARIABLE gp_ev
-    )
-
-  if(gp_tool MATCHES "dumpbin$")
-    # Exclude delay load dependencies under windows (they are listed in dumpbin output after the message below)
-    string(FIND "${gp_cmd_ov}" "Image has the following delay load dependencies" gp_delayload_pos)
-    if (${gp_delayload_pos} GREATER -1)
-      string(SUBSTRING "${gp_cmd_ov}" 0 ${gp_delayload_pos} gp_cmd_ov_no_delayload_deps)
-      string(SUBSTRING "${gp_cmd_ov}" ${gp_delayload_pos} -1 gp_cmd_ov_delayload_deps)
-      if (verbose)
-        message(STATUS "GetPrequisites(${target}) : ignoring the following delay load dependencies :\n ${gp_cmd_ov_delayload_deps}")
-      endif()
-      set(gp_cmd_ov ${gp_cmd_ov_no_delayload_deps})
-    endif()
-  endif()
-
-  if(NOT gp_rv STREQUAL "0")
-    if(gp_tool MATCHES "dumpbin$")
-      # dumpbin error messages seem to go to stdout
-      message(FATAL_ERROR "${gp_cmd} failed: ${gp_rv}\n${gp_ev}\n${gp_cmd_ov}")
-    else()
-      message(FATAL_ERROR "${gp_cmd} failed: ${gp_rv}\n${gp_ev}")
-    endif()
-  endif()
-
-  if(gp_tool MATCHES "ldd$")
-    set(ENV{LD_LIBRARY_PATH} "${old_ld_env}")
-  endif()
-
-  if(verbose)
-    message(STATUS "<RawOutput cmd='${gp_cmd} ${gp_cmd_args} ${target}'>")
-    message(STATUS "gp_cmd_ov='${gp_cmd_ov}'")
-    message(STATUS "</RawOutput>")
-  endif()
-
-  get_filename_component(target_dir "${target}" PATH)
-
-  # Convert to a list of lines:
-  #
-  string(REPLACE ";" "\\;" candidates "${gp_cmd_ov}")
-  string(REPLACE "\n" "${eol_char};" candidates "${candidates}")
-
-  # check for install id and remove it from list, since otool -L can include a
-  # reference to itself
-  set(gp_install_id)
-  if(gp_tool MATCHES "otool$")
-    execute_process(
-      COMMAND ${gp_cmd} -D ${target}
-      RESULT_VARIABLE otool_rv
-      OUTPUT_VARIABLE gp_install_id_ov
-      ERROR_VARIABLE otool_ev
-      )
-    if(NOT otool_rv STREQUAL "0")
-      message(FATAL_ERROR "otool -D failed: ${otool_rv}\n${otool_ev}")
-    endif()
-    # second line is install name
-    string(REGEX REPLACE ".*:\n" "" gp_install_id "${gp_install_id_ov}")
-    if(gp_install_id)
-      # trim
-      string(REGEX MATCH "[^\n ].*[^\n ]" gp_install_id "${gp_install_id}")
-      #message("INSTALL ID is \"${gp_install_id}\"")
-    endif()
-  endif()
-
-  # Analyze each line for file names that match the regular expression:
-  #
-  foreach(candidate ${candidates})
-  if("${candidate}" MATCHES "${gp_regex}")
-
-    # Extract information from each candidate:
-    if(gp_regex_error AND "${candidate}" MATCHES "${gp_regex_error}")
-      string(REGEX REPLACE "${gp_regex_fallback}" "\\1" raw_item "${candidate}")
-    else()
-      string(REGEX REPLACE "${gp_regex}" "\\1" raw_item "${candidate}")
-    endif()
-
-    if(gp_regex_cmp_count GREATER 1)
-      string(REGEX REPLACE "${gp_regex}" "\\2" raw_compat_version "${candidate}")
-      string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\1" compat_major_version "${raw_compat_version}")
-      string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\2" compat_minor_version "${raw_compat_version}")
-      string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\3" compat_patch_version "${raw_compat_version}")
-    endif()
-
-    if(gp_regex_cmp_count GREATER 2)
-      string(REGEX REPLACE "${gp_regex}" "\\3" raw_current_version "${candidate}")
-      string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\1" current_major_version "${raw_current_version}")
-      string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\2" current_minor_version "${raw_current_version}")
-      string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\3" current_patch_version "${raw_current_version}")
-    endif()
-
-    # Use the raw_item as the list entries returned by this function. Use the
-    # gp_resolve_item function to resolve it to an actual full path file if
-    # necessary.
-    #
-    set(item "${raw_item}")
-
-    # Add each item unless it is excluded:
-    #
-    set(add_item 1)
-
-    if(item STREQUAL gp_install_id)
-      set(add_item 0)
-    endif()
-
-    if(add_item AND ${exclude_system})
-      set(type "")
-      gp_resolved_file_type("${target}" "${item}" "${exepath}" "${dirs}" type "${rpaths}")
-
-      if(type STREQUAL "system")
-        set(add_item 0)
-      endif()
-    endif()
-
-    if(add_item)
-      list(LENGTH ${prerequisites_var} list_length_before_append)
-      gp_append_unique(${prerequisites_var} "${item}")
-      list(LENGTH ${prerequisites_var} list_length_after_append)
-
-      if(${recurse})
-        # If item was really added, this is the first time we have seen it.
-        # Add it to unseen_prereqs so that we can recursively add *its*
-        # prerequisites...
-        #
-        # But first: resolve its name to an absolute full path name such
-        # that the analysis tools can simply accept it as input.
-        #
-        if(NOT list_length_before_append EQUAL list_length_after_append)
-          gp_resolve_item("${target}" "${item}" "${exepath}" "${dirs}" resolved_item "${rpaths}")
-          if(EXISTS "${resolved_item}")
-            # Recurse only if we could resolve the item.
-            # Otherwise the prerequisites_var list will be cleared
-            set(unseen_prereqs ${unseen_prereqs} "${resolved_item}")
-          endif()
-        endif()
-      endif()
-    endif()
-  else()
-    if(verbose)
-      message(STATUS "ignoring non-matching line: '${candidate}'")
-    endif()
-  endif()
-  endforeach()
-
-  list(LENGTH ${prerequisites_var} prerequisites_var_length)
-  if(prerequisites_var_length GREATER 0)
-    list(SORT ${prerequisites_var})
-  endif()
-  if(${recurse})
-    set(more_inputs ${unseen_prereqs})
-    foreach(input ${more_inputs})
-      get_prerequisites("${input}" ${prerequisites_var} ${exclude_system} ${recurse} "${exepath}" "${dirs}" "${rpaths}")
-    endforeach()
-  endif()
-
-  set(${prerequisites_var} ${${prerequisites_var}} PARENT_SCOPE)
-endfunction()
-
-
-function(list_prerequisites target)
-  if(ARGC GREATER 1 AND NOT "${ARGV1}" STREQUAL "")
-    set(all "${ARGV1}")
-  else()
-    set(all 1)
-  endif()
-
-  if(ARGC GREATER 2 AND NOT "${ARGV2}" STREQUAL "")
-    set(exclude_system "${ARGV2}")
-  else()
-    set(exclude_system 0)
-  endif()
-
-  if(ARGC GREATER 3 AND NOT "${ARGV3}" STREQUAL "")
-    set(verbose "${ARGV3}")
-  else()
-    set(verbose 0)
-  endif()
-
-  set(count 0)
-  set(count_str "")
-  set(print_count "${verbose}")
-  set(print_prerequisite_type "${verbose}")
-  set(print_target "${verbose}")
-  set(type_str "")
-
-  get_filename_component(exepath "${target}" PATH)
-
-  set(prereqs "")
-  get_prerequisites("${target}" prereqs ${exclude_system} ${all} "${exepath}" "")
-
-  if(print_target)
-    message(STATUS "File '${target}' depends on:")
-  endif()
-
-  foreach(d ${prereqs})
-    math(EXPR count "${count} + 1")
-
-    if(print_count)
-      set(count_str "${count}. ")
-    endif()
-
-    if(print_prerequisite_type)
-      gp_file_type("${target}" "${d}" type)
-      set(type_str " (${type})")
-    endif()
-
-    message(STATUS "${count_str}${d}${type_str}")
-  endforeach()
-endfunction()
-
-
-function(list_prerequisites_by_glob glob_arg glob_exp)
-  message(STATUS "=============================================================================")
-  message(STATUS "List prerequisites of executables matching ${glob_arg} '${glob_exp}'")
-  message(STATUS "")
-  file(${glob_arg} file_list ${glob_exp})
-  foreach(f ${file_list})
-    is_file_executable("${f}" is_f_executable)
-    if(is_f_executable)
-      message(STATUS "=============================================================================")
-      list_prerequisites("${f}" ${ARGN})
-      message(STATUS "")
-    endif()
-  endforeach()
-endfunction()
-
-cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/GoogleTest.cmake b/share/cmake-3.18/Modules/GoogleTest.cmake
deleted file mode 100644
index b210a77..0000000
--- a/share/cmake-3.18/Modules/GoogleTest.cmake
+++ /dev/null
@@ -1,547 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-GoogleTest
-----------
-
-This module defines functions to help use the Google Test infrastructure.  Two
-mechanisms for adding tests are provided. :command:`gtest_add_tests` has been
-around for some time, originally via ``find_package(GTest)``.
-:command:`gtest_discover_tests` was introduced in CMake 3.10.
-
-The (older) :command:`gtest_add_tests` scans source files to identify tests.
-This is usually effective, with some caveats, including in cross-compiling
-environments, and makes setting additional properties on tests more convenient.
-However, its handling of parameterized tests is less comprehensive, and it
-requires re-running CMake to detect changes to the list of tests.
-
-The (newer) :command:`gtest_discover_tests` discovers tests by asking the
-compiled test executable to enumerate its tests.  This is more robust and
-provides better handling of parameterized tests, and does not require CMake
-to be re-run when tests change.  However, it may not work in a cross-compiling
-environment, and setting test properties is less convenient.
-
-More details can be found in the documentation of the respective functions.
-
-Both commands are intended to replace use of :command:`add_test` to register
-tests, and will create a separate CTest test for each Google Test test case.
-Note that this is in some cases less efficient, as common set-up and tear-down
-logic cannot be shared by multiple test cases executing in the same instance.
-However, it provides more fine-grained pass/fail information to CTest, which is
-usually considered as more beneficial.  By default, the CTest test name is the
-same as the Google Test name (i.e. ``suite.testcase``); see also
-``TEST_PREFIX`` and ``TEST_SUFFIX``.
-
-.. command:: gtest_add_tests
-
-  Automatically add tests with CTest by scanning source code for Google Test
-  macros::
-
-    gtest_add_tests(TARGET target
-                    [SOURCES src1...]
-                    [EXTRA_ARGS arg1...]
-                    [WORKING_DIRECTORY dir]
-                    [TEST_PREFIX prefix]
-                    [TEST_SUFFIX suffix]
-                    [SKIP_DEPENDENCY]
-                    [TEST_LIST outVar]
-    )
-
-  ``gtest_add_tests`` attempts to identify tests by scanning source files.
-  Although this is generally effective, it uses only a basic regular expression
-  match, which can be defeated by atypical test declarations, and is unable to
-  fully "split" parameterized tests.  Additionally, it requires that CMake be
-  re-run to discover any newly added, removed or renamed tests (by default,
-  this means that CMake is re-run when any test source file is changed, but see
-  ``SKIP_DEPENDENCY``).  However, it has the advantage of declaring tests at
-  CMake time, which somewhat simplifies setting additional properties on tests,
-  and always works in a cross-compiling environment.
-
-  The options are:
-
-  ``TARGET target``
-    Specifies the Google Test executable, which must be a known CMake
-    executable target.  CMake will substitute the location of the built
-    executable when running the test.
-
-  ``SOURCES src1...``
-    When provided, only the listed files will be scanned for test cases.  If
-    this option is not given, the :prop_tgt:`SOURCES` property of the
-    specified ``target`` will be used to obtain the list of sources.
-
-  ``EXTRA_ARGS arg1...``
-    Any extra arguments to pass on the command line to each test case.
-
-  ``WORKING_DIRECTORY dir``
-    Specifies the directory in which to run the discovered test cases.  If this
-    option is not provided, the current binary directory is used.
-
-  ``TEST_PREFIX prefix``
-    Specifies a ``prefix`` to be prepended to the name of each discovered test
-    case.  This can be useful when the same source files are being used in
-    multiple calls to ``gtest_add_test()`` but with different ``EXTRA_ARGS``.
-
-  ``TEST_SUFFIX suffix``
-    Similar to ``TEST_PREFIX`` except the ``suffix`` is appended to the name of
-    every discovered test case.  Both ``TEST_PREFIX`` and ``TEST_SUFFIX`` may
-    be specified.
-
-  ``SKIP_DEPENDENCY``
-    Normally, the function creates a dependency which will cause CMake to be
-    re-run if any of the sources being scanned are changed.  This is to ensure
-    that the list of discovered tests is updated.  If this behavior is not
-    desired (as may be the case while actually writing the test cases), this
-    option can be used to prevent the dependency from being added.
-
-  ``TEST_LIST outVar``
-    The variable named by ``outVar`` will be populated in the calling scope
-    with the list of discovered test cases.  This allows the caller to do
-    things like manipulate test properties of the discovered tests.
-
-  .. code-block:: cmake
-
-    include(GoogleTest)
-    add_executable(FooTest FooUnitTest.cxx)
-    gtest_add_tests(TARGET      FooTest
-                    TEST_SUFFIX .noArgs
-                    TEST_LIST   noArgsTests
-    )
-    gtest_add_tests(TARGET      FooTest
-                    EXTRA_ARGS  --someArg someValue
-                    TEST_SUFFIX .withArgs
-                    TEST_LIST   withArgsTests
-    )
-    set_tests_properties(${noArgsTests}   PROPERTIES TIMEOUT 10)
-    set_tests_properties(${withArgsTests} PROPERTIES TIMEOUT 20)
-
-  For backward compatibility, the following form is also supported::
-
-    gtest_add_tests(exe args files...)
-
-  ``exe``
-    The path to the test executable or the name of a CMake target.
-  ``args``
-    A ;-list of extra arguments to be passed to executable.  The entire
-    list must be passed as a single argument.  Enclose it in quotes,
-    or pass ``""`` for no arguments.
-  ``files...``
-    A list of source files to search for tests and test fixtures.
-    Alternatively, use ``AUTO`` to specify that ``exe`` is the name
-    of a CMake executable target whose sources should be scanned.
-
-  .. code-block:: cmake
-
-    include(GoogleTest)
-    set(FooTestArgs --foo 1 --bar 2)
-    add_executable(FooTest FooUnitTest.cxx)
-    gtest_add_tests(FooTest "${FooTestArgs}" AUTO)
-
-.. command:: gtest_discover_tests
-
-  Automatically add tests with CTest by querying the compiled test executable
-  for available tests::
-
-    gtest_discover_tests(target
-                         [EXTRA_ARGS arg1...]
-                         [WORKING_DIRECTORY dir]
-                         [TEST_PREFIX prefix]
-                         [TEST_SUFFIX suffix]
-                         [NO_PRETTY_TYPES] [NO_PRETTY_VALUES]
-                         [PROPERTIES name1 value1...]
-                         [TEST_LIST var]
-                         [DISCOVERY_TIMEOUT seconds]
-                         [XML_OUTPUT_DIR dir]
-                         [DISCOVERY_MODE <POST_BUILD|PRE_TEST>]
-    )
-
-  ``gtest_discover_tests()`` sets up a post-build command on the test executable
-  that generates the list of tests by parsing the output from running the test
-  with the ``--gtest_list_tests`` argument.  Compared to the source parsing
-  approach of :command:`gtest_add_tests`, this ensures that the full list of
-  tests, including instantiations of parameterized tests, is obtained.  Since
-  test discovery occurs at build time, it is not necessary to re-run CMake when
-  the list of tests changes.
-  However, it requires that :prop_tgt:`CROSSCOMPILING_EMULATOR` is properly set
-  in order to function in a cross-compiling environment.
-
-  Additionally, setting properties on tests is somewhat less convenient, since
-  the tests are not available at CMake time.  Additional test properties may be
-  assigned to the set of tests as a whole using the ``PROPERTIES`` option.  If
-  more fine-grained test control is needed, custom content may be provided
-  through an external CTest script using the :prop_dir:`TEST_INCLUDE_FILES`
-  directory property.  The set of discovered tests is made accessible to such a
-  script via the ``<target>_TESTS`` variable.
-
-  The options are:
-
-  ``target``
-    Specifies the Google Test executable, which must be a known CMake
-    executable target.  CMake will substitute the location of the built
-    executable when running the test.
-
-  ``EXTRA_ARGS arg1...``
-    Any extra arguments to pass on the command line to each test case.
-
-  ``WORKING_DIRECTORY dir``
-    Specifies the directory in which to run the discovered test cases.  If this
-    option is not provided, the current binary directory is used.
-
-  ``TEST_PREFIX prefix``
-    Specifies a ``prefix`` to be prepended to the name of each discovered test
-    case.  This can be useful when the same test executable is being used in
-    multiple calls to ``gtest_discover_tests()`` but with different
-    ``EXTRA_ARGS``.
-
-  ``TEST_SUFFIX suffix``
-    Similar to ``TEST_PREFIX`` except the ``suffix`` is appended to the name of
-    every discovered test case.  Both ``TEST_PREFIX`` and ``TEST_SUFFIX`` may
-    be specified.
-
-  ``NO_PRETTY_TYPES``
-    By default, the type index of type-parameterized tests is replaced by the
-    actual type name in the CTest test name.  If this behavior is undesirable
-    (e.g. because the type names are unwieldy), this option will suppress this
-    behavior.
-
-  ``NO_PRETTY_VALUES``
-    By default, the value index of value-parameterized tests is replaced by the
-    actual value in the CTest test name.  If this behavior is undesirable
-    (e.g. because the value strings are unwieldy), this option will suppress
-    this behavior.
-
-  ``PROPERTIES name1 value1...``
-    Specifies additional properties to be set on all tests discovered by this
-    invocation of ``gtest_discover_tests()``.
-
-  ``TEST_LIST var``
-    Make the list of tests available in the variable ``var``, rather than the
-    default ``<target>_TESTS``.  This can be useful when the same test
-    executable is being used in multiple calls to ``gtest_discover_tests()``.
-    Note that this variable is only available in CTest.
-
-  ``DISCOVERY_TIMEOUT num``
-    Specifies how long (in seconds) CMake will wait for the test to enumerate
-    available tests.  If the test takes longer than this, discovery (and your
-    build) will fail.  Most test executables will enumerate their tests very
-    quickly, but under some exceptional circumstances, a test may require a
-    longer timeout.  The default is 5.  See also the ``TIMEOUT`` option of
-    :command:`execute_process`.
-
-    .. note::
-
-      In CMake versions 3.10.1 and 3.10.2, this option was called ``TIMEOUT``.
-      This clashed with the ``TIMEOUT`` test property, which is one of the
-      common properties that would be set with the ``PROPERTIES`` keyword,
-      usually leading to legal but unintended behavior.  The keyword was
-      changed to ``DISCOVERY_TIMEOUT`` in CMake 3.10.3 to address this
-      problem.  The ambiguous behavior of the ``TIMEOUT`` keyword in 3.10.1
-      and 3.10.2 has not been preserved.
-
-  ``XML_OUTPUT_DIR dir``
-    If specified, the parameter is passed along with ``--gtest_output=xml:``
-    to test executable. The actual file name is the same as the test target,
-    including prefix and suffix. This should be used instead of
-    ``EXTRA_ARGS --gtest_output=xml`` to avoid race conditions writing the
-    XML result output when using parallel test execution.
-
-  ``DISCOVERY_MODE``
-    Provides greater control over when ``gtest_discover_tests()`` performs test
-    discovery. By default, ``POST_BUILD`` sets up a post-build command
-    to perform test discovery at build time. In certain scenarios, like
-    cross-compiling, this ``POST_BUILD`` behavior is not desirable.
-    By contrast, ``PRE_TEST`` delays test discovery until just prior to test
-    execution. This way test discovery occurs in the target environment
-    where the test has a better chance at finding appropriate runtime
-    dependencies.
-
-    ``DISCOVERY_MODE`` defaults to the value of the
-    ``CMAKE_GTEST_DISCOVER_TESTS_DISCOVERY_MODE`` variable if it is not
-    passed when calling ``gtest_discover_tests()``. This provides a mechanism
-    for globally selecting a preferred test discovery behavior without having
-    to modify each call site.
-
-#]=======================================================================]
-
-# Save project's policies
-cmake_policy(PUSH)
-cmake_policy(SET CMP0057 NEW) # if IN_LIST
-
-#------------------------------------------------------------------------------
-function(gtest_add_tests)
-
-  if (ARGC LESS 1)
-    message(FATAL_ERROR "No arguments supplied to gtest_add_tests()")
-  endif()
-
-  set(options
-      SKIP_DEPENDENCY
-  )
-  set(oneValueArgs
-      TARGET
-      WORKING_DIRECTORY
-      TEST_PREFIX
-      TEST_SUFFIX
-      TEST_LIST
-  )
-  set(multiValueArgs
-      SOURCES
-      EXTRA_ARGS
-  )
-  set(allKeywords ${options} ${oneValueArgs} ${multiValueArgs})
-
-  unset(sources)
-  if("${ARGV0}" IN_LIST allKeywords)
-    cmake_parse_arguments(ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
-    set(autoAddSources YES)
-  else()
-    # Non-keyword syntax, convert to keyword form
-    if (ARGC LESS 3)
-      message(FATAL_ERROR "gtest_add_tests() without keyword options requires at least 3 arguments")
-    endif()
-    set(ARGS_TARGET     "${ARGV0}")
-    set(ARGS_EXTRA_ARGS "${ARGV1}")
-    if(NOT "${ARGV2}" STREQUAL "AUTO")
-      set(ARGS_SOURCES "${ARGV}")
-      list(REMOVE_AT ARGS_SOURCES 0 1)
-    endif()
-  endif()
-
-  # The non-keyword syntax allows the first argument to be an arbitrary
-  # executable rather than a target if source files are also provided. In all
-  # other cases, both forms require a target.
-  if(NOT TARGET "${ARGS_TARGET}" AND NOT ARGS_SOURCES)
-    message(FATAL_ERROR "${ARGS_TARGET} does not define an existing CMake target")
-  endif()
-  if(NOT ARGS_WORKING_DIRECTORY)
-    unset(workDir)
-  else()
-    set(workDir WORKING_DIRECTORY "${ARGS_WORKING_DIRECTORY}")
-  endif()
-
-  if(NOT ARGS_SOURCES)
-    get_property(ARGS_SOURCES TARGET ${ARGS_TARGET} PROPERTY SOURCES)
-  endif()
-
-  unset(testList)
-
-  set(gtest_case_name_regex ".*\\( *([A-Za-z_0-9]+) *, *([A-Za-z_0-9]+) *\\).*")
-  set(gtest_test_type_regex "(TYPED_TEST|TEST_?[FP]?)")
-
-  foreach(source IN LISTS ARGS_SOURCES)
-    if(NOT ARGS_SKIP_DEPENDENCY)
-      set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${source})
-    endif()
-    file(READ "${source}" contents)
-    string(REGEX MATCHALL "${gtest_test_type_regex} *\\(([A-Za-z_0-9 ,]+)\\)" found_tests "${contents}")
-    foreach(hit ${found_tests})
-      string(REGEX MATCH "${gtest_test_type_regex}" test_type ${hit})
-
-      # Parameterized tests have a different signature for the filter
-      if("x${test_type}" STREQUAL "xTEST_P")
-        string(REGEX REPLACE ${gtest_case_name_regex}  "*/\\1.\\2/*" gtest_test_name ${hit})
-      elseif("x${test_type}" STREQUAL "xTEST_F" OR "x${test_type}" STREQUAL "xTEST")
-        string(REGEX REPLACE ${gtest_case_name_regex} "\\1.\\2" gtest_test_name ${hit})
-      elseif("x${test_type}" STREQUAL "xTYPED_TEST")
-        string(REGEX REPLACE ${gtest_case_name_regex} "\\1/*.\\2" gtest_test_name ${hit})
-      else()
-        message(WARNING "Could not parse GTest ${hit} for adding to CTest.")
-        continue()
-      endif()
-
-      # Make sure tests disabled in GTest get disabled in CTest
-      if(gtest_test_name MATCHES "(^|\\.)DISABLED_")
-        # Add the disabled test if CMake is new enough
-        # Note that this check is to allow backwards compatibility so this
-        # module can be copied locally in projects to use with older CMake
-        # versions
-        if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.8.20170401)
-          string(REGEX REPLACE
-                 "(^|\\.)DISABLED_" "\\1"
-                 orig_test_name "${gtest_test_name}"
-          )
-          set(ctest_test_name
-              ${ARGS_TEST_PREFIX}${orig_test_name}${ARGS_TEST_SUFFIX}
-          )
-          add_test(NAME ${ctest_test_name}
-                   ${workDir}
-                   COMMAND ${ARGS_TARGET}
-                     --gtest_also_run_disabled_tests
-                     --gtest_filter=${gtest_test_name}
-                     ${ARGS_EXTRA_ARGS}
-          )
-          set_tests_properties(${ctest_test_name} PROPERTIES DISABLED TRUE)
-          list(APPEND testList ${ctest_test_name})
-        endif()
-      else()
-        set(ctest_test_name ${ARGS_TEST_PREFIX}${gtest_test_name}${ARGS_TEST_SUFFIX})
-        add_test(NAME ${ctest_test_name}
-                 ${workDir}
-                 COMMAND ${ARGS_TARGET}
-                   --gtest_filter=${gtest_test_name}
-                   ${ARGS_EXTRA_ARGS}
-        )
-        list(APPEND testList ${ctest_test_name})
-      endif()
-    endforeach()
-  endforeach()
-
-  if(ARGS_TEST_LIST)
-    set(${ARGS_TEST_LIST} ${testList} PARENT_SCOPE)
-  endif()
-
-endfunction()
-
-#------------------------------------------------------------------------------
-
-function(gtest_discover_tests TARGET)
-  cmake_parse_arguments(
-    ""
-    "NO_PRETTY_TYPES;NO_PRETTY_VALUES"
-    "TEST_PREFIX;TEST_SUFFIX;WORKING_DIRECTORY;TEST_LIST;DISCOVERY_TIMEOUT;XML_OUTPUT_DIR;DISCOVERY_MODE"
-    "EXTRA_ARGS;PROPERTIES"
-    ${ARGN}
-  )
-
-  if(NOT _WORKING_DIRECTORY)
-    set(_WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
-  endif()
-  if(NOT _TEST_LIST)
-    set(_TEST_LIST ${TARGET}_TESTS)
-  endif()
-  if(NOT _DISCOVERY_TIMEOUT)
-    set(_DISCOVERY_TIMEOUT 5)
-  endif()
-  if(NOT _DISCOVERY_MODE)
-    if(NOT CMAKE_GTEST_DISCOVER_TESTS_DISCOVERY_MODE)
-      set(CMAKE_GTEST_DISCOVER_TESTS_DISCOVERY_MODE "POST_BUILD")
-    endif()
-    set(_DISCOVERY_MODE ${CMAKE_GTEST_DISCOVER_TESTS_DISCOVERY_MODE})
-  endif()
-
-  get_property(
-    has_counter
-    TARGET ${TARGET}
-    PROPERTY CTEST_DISCOVERED_TEST_COUNTER
-    SET
-  )
-  if(has_counter)
-    get_property(
-      counter
-      TARGET ${TARGET}
-      PROPERTY CTEST_DISCOVERED_TEST_COUNTER
-    )
-    math(EXPR counter "${counter} + 1")
-  else()
-    set(counter 1)
-  endif()
-  set_property(
-    TARGET ${TARGET}
-    PROPERTY CTEST_DISCOVERED_TEST_COUNTER
-    ${counter}
-  )
-
-  # Define rule to generate test list for aforementioned test executable
-  set(ctest_file_base "${CMAKE_CURRENT_BINARY_DIR}/${TARGET}[${counter}]")
-  set(ctest_include_file "${ctest_file_base}_include.cmake")
-  set(ctest_tests_file "${ctest_file_base}_tests.cmake")
-  get_property(crosscompiling_emulator
-    TARGET ${TARGET}
-    PROPERTY CROSSCOMPILING_EMULATOR
-  )
-
-  if(_DISCOVERY_MODE STREQUAL "POST_BUILD")
-    add_custom_command(
-      TARGET ${TARGET} POST_BUILD
-      BYPRODUCTS "${ctest_tests_file}"
-      COMMAND "${CMAKE_COMMAND}"
-              -D "TEST_TARGET=${TARGET}"
-              -D "TEST_EXECUTABLE=$<TARGET_FILE:${TARGET}>"
-              -D "TEST_EXECUTOR=${crosscompiling_emulator}"
-              -D "TEST_WORKING_DIR=${_WORKING_DIRECTORY}"
-              -D "TEST_EXTRA_ARGS=${_EXTRA_ARGS}"
-              -D "TEST_PROPERTIES=${_PROPERTIES}"
-              -D "TEST_PREFIX=${_TEST_PREFIX}"
-              -D "TEST_SUFFIX=${_TEST_SUFFIX}"
-              -D "NO_PRETTY_TYPES=${_NO_PRETTY_TYPES}"
-              -D "NO_PRETTY_VALUES=${_NO_PRETTY_VALUES}"
-              -D "TEST_LIST=${_TEST_LIST}"
-              -D "CTEST_FILE=${ctest_tests_file}"
-              -D "TEST_DISCOVERY_TIMEOUT=${_DISCOVERY_TIMEOUT}"
-              -D "TEST_XML_OUTPUT_DIR=${_XML_OUTPUT_DIR}"
-              -P "${_GOOGLETEST_DISCOVER_TESTS_SCRIPT}"
-      VERBATIM
-    )
-
-    file(WRITE "${ctest_include_file}"
-      "if(EXISTS \"${ctest_tests_file}\")\n"
-      "  include(\"${ctest_tests_file}\")\n"
-      "else()\n"
-      "  add_test(${TARGET}_NOT_BUILT ${TARGET}_NOT_BUILT)\n"
-      "endif()\n"
-    )
-  elseif(_DISCOVERY_MODE STREQUAL "PRE_TEST")
-
-    get_property(GENERATOR_IS_MULTI_CONFIG GLOBAL
-        PROPERTY GENERATOR_IS_MULTI_CONFIG
-    )
-
-    if(GENERATOR_IS_MULTI_CONFIG)
-      set(ctest_tests_file "${ctest_file_base}_tests-$<CONFIG>.cmake")
-    endif()
-
-    string(CONCAT ctest_include_content
-      "if(EXISTS \"$<TARGET_FILE:${TARGET}>\")"                                    "\n"
-      "  if(\"$<TARGET_FILE:${TARGET}>\" IS_NEWER_THAN \"${ctest_tests_file}\")"   "\n"
-      "    include(GoogleTestAddTests)"                                            "\n"
-      "    gtest_discover_tests_impl("                                             "\n"
-      "      TEST_EXECUTABLE"        " [==[" "$<TARGET_FILE:${TARGET}>"   "]==]"   "\n"
-      "      TEST_EXECUTOR"          " [==[" "${crosscompiling_emulator}" "]==]"   "\n"
-      "      TEST_WORKING_DIR"       " [==[" "${_WORKING_DIRECTORY}"      "]==]"   "\n"
-      "      TEST_EXTRA_ARGS"        " [==[" "${_EXTRA_ARGS}"             "]==]"   "\n"
-      "      TEST_PROPERTIES"        " [==[" "${_PROPERTIES}"             "]==]"   "\n"
-      "      TEST_PREFIX"            " [==[" "${_TEST_PREFIX}"            "]==]"   "\n"
-      "      TEST_SUFFIX"            " [==[" "${_TEST_SUFFIX}"            "]==]"   "\n"
-      "      NO_PRETTY_TYPES"        " [==[" "${_NO_PRETTY_TYPES}"        "]==]"   "\n"
-      "      NO_PRETTY_VALUES"       " [==[" "${_NO_PRETTY_VALUES}"       "]==]"   "\n"
-      "      TEST_LIST"              " [==[" "${_TEST_LIST}"              "]==]"   "\n"
-      "      CTEST_FILE"             " [==[" "${ctest_tests_file}"        "]==]"   "\n"
-      "      TEST_DISCOVERY_TIMEOUT" " [==[" "${_DISCOVERY_TIMEOUT}"      "]==]"   "\n"
-      "      TEST_XML_OUTPUT_DIR"    " [==[" "${_XML_OUTPUT_DIR}"         "]==]"   "\n"
-      "    )"                                                                      "\n"
-      "  endif()"                                                                  "\n"
-      "  include(\"${ctest_tests_file}\")"                                         "\n"
-      "else()"                                                                     "\n"
-      "  add_test(${TARGET}_NOT_BUILT ${TARGET}_NOT_BUILT)"                        "\n"
-      "endif()"                                                                    "\n"
-    )
-
-    if(GENERATOR_IS_MULTI_CONFIG)
-      foreach(_config ${CMAKE_CONFIGURATION_TYPES})
-        file(GENERATE OUTPUT "${ctest_file_base}_include-${_config}.cmake" CONTENT "${ctest_include_content}" CONDITION $<CONFIG:${_config}>)
-      endforeach()
-      file(WRITE "${ctest_include_file}" "include(\"${ctest_file_base}_include-\${CTEST_CONFIGURATION_TYPE}.cmake\")")
-    else()
-      file(GENERATE OUTPUT "${ctest_file_base}_include.cmake" CONTENT "${ctest_include_content}")
-      file(WRITE "${ctest_include_file}" "include(\"${ctest_file_base}_include.cmake\")")
-    endif()
-
-  else()
-    message(FATAL_ERROR "Unknown DISCOVERY_MODE: ${_DISCOVERY_MODE}")
-  endif()
-
-  # Add discovered tests to directory TEST_INCLUDE_FILES
-  set_property(DIRECTORY
-    APPEND PROPERTY TEST_INCLUDE_FILES "${ctest_include_file}"
-  )
-
-endfunction()
-
-###############################################################################
-
-set(_GOOGLETEST_DISCOVER_TESTS_SCRIPT
-  ${CMAKE_CURRENT_LIST_DIR}/GoogleTestAddTests.cmake
-)
-
-# Restore project's policies
-cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/GoogleTestAddTests.cmake b/share/cmake-3.18/Modules/GoogleTestAddTests.cmake
deleted file mode 100644
index 5d098d9..0000000
--- a/share/cmake-3.18/Modules/GoogleTestAddTests.cmake
+++ /dev/null
@@ -1,188 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-cmake_minimum_required(VERSION ${CMAKE_VERSION})
-
-# Overwrite possibly existing ${_CTEST_FILE} with empty file
-set(flush_tests_MODE WRITE)
-
-# Flushes script to ${_CTEST_FILE}
-macro(flush_script)
-  file(${flush_tests_MODE} "${_CTEST_FILE}" "${script}")
-  set(flush_tests_MODE APPEND)
-
-  set(script "")
-endmacro()
-
-# Flushes tests_buffer to tests
-macro(flush_tests_buffer)
-  list(APPEND tests "${tests_buffer}")
-  set(tests_buffer "")
-endmacro()
-
-macro(add_command NAME)
-  set(_args "")
-  foreach(_arg ${ARGN})
-    if(_arg MATCHES "[^-./:a-zA-Z0-9_]")
-      string(APPEND _args " [==[${_arg}]==]")
-    else()
-      string(APPEND _args " ${_arg}")
-    endif()
-  endforeach()
-  string(APPEND script "${NAME}(${_args})\n")
-  string(LENGTH "${script}" _script_len)
-  if(${_script_len} GREATER "50000")
-    flush_script()
-  endif()
-  # Unsets macro local variables to prevent leakage outside of this macro.
-  unset(_args)
-  unset(_script_len)
-endmacro()
-
-function(gtest_discover_tests_impl)
-
-  cmake_parse_arguments(
-    ""
-    ""
-    "NO_PRETTY_TYPES;NO_PRETTY_VALUES;TEST_EXECUTABLE;TEST_EXECUTOR;TEST_WORKING_DIR;TEST_PREFIX;TEST_SUFFIX;TEST_LIST;CTEST_FILE;TEST_DISCOVERY_TIMEOUT;TEST_XML_OUTPUT_DIR"
-    "TEST_EXTRA_ARGS;TEST_PROPERTIES"
-    ${ARGN}
-  )
-
-  set(prefix "${_TEST_PREFIX}")
-  set(suffix "${_TEST_SUFFIX}")
-  set(extra_args ${_TEST_EXTRA_ARGS})
-  set(properties ${_TEST_PROPERTIES})
-  set(script)
-  set(suite)
-  set(tests)
-  set(tests_buffer)
-
-  # Run test executable to get list of available tests
-  if(NOT EXISTS "${_TEST_EXECUTABLE}")
-    message(FATAL_ERROR
-      "Specified test executable does not exist.\n"
-      "  Path: '${_TEST_EXECUTABLE}'"
-    )
-  endif()
-  execute_process(
-    COMMAND ${_TEST_EXECUTOR} "${_TEST_EXECUTABLE}" --gtest_list_tests
-    WORKING_DIRECTORY "${_TEST_WORKING_DIR}"
-    TIMEOUT ${_TEST_DISCOVERY_TIMEOUT}
-    OUTPUT_VARIABLE output
-    RESULT_VARIABLE result
-  )
-  if(NOT ${result} EQUAL 0)
-    string(REPLACE "\n" "\n    " output "${output}")
-    message(FATAL_ERROR
-      "Error running test executable.\n"
-      "  Path: '${_TEST_EXECUTABLE}'\n"
-      "  Result: ${result}\n"
-      "  Output:\n"
-      "    ${output}\n"
-    )
-  endif()
-
-  # Preserve semicolon in test-parameters
-  string(REPLACE [[;]] [[\;]] output "${output}")
-  string(REPLACE "\n" ";" output "${output}")
-
-  # Parse output
-  foreach(line ${output})
-    # Skip header
-    if(NOT line MATCHES "gtest_main\\.cc")
-      # Do we have a module name or a test name?
-      if(NOT line MATCHES "^  ")
-        # Module; remove trailing '.' to get just the name...
-        string(REGEX REPLACE "\\.( *#.*)?" "" suite "${line}")
-        if(line MATCHES "#" AND NOT _NO_PRETTY_TYPES)
-          string(REGEX REPLACE "/[0-9]\\.+ +#.*= +" "/" pretty_suite "${line}")
-        else()
-          set(pretty_suite "${suite}")
-        endif()
-        string(REGEX REPLACE "^DISABLED_" "" pretty_suite "${pretty_suite}")
-      else()
-        # Test name; strip spaces and comments to get just the name...
-        string(REGEX REPLACE " +" "" test "${line}")
-        if(test MATCHES "#" AND NOT _NO_PRETTY_VALUES)
-          string(REGEX REPLACE "/[0-9]+#GetParam..=" "/" pretty_test "${test}")
-        else()
-          string(REGEX REPLACE "#.*" "" pretty_test "${test}")
-        endif()
-        string(REGEX REPLACE "^DISABLED_" "" pretty_test "${pretty_test}")
-        string(REGEX REPLACE "#.*" "" test "${test}")
-        if(NOT "${_TEST_XML_OUTPUT_DIR}" STREQUAL "")
-          set(TEST_XML_OUTPUT_PARAM "--gtest_output=xml:${_TEST_XML_OUTPUT_DIR}/${prefix}${suite}.${test}${suffix}.xml")
-        else()
-          unset(TEST_XML_OUTPUT_PARAM)
-        endif()
-
-        # sanitize test name for further processing downstream
-        set(testname "${prefix}${pretty_suite}.${pretty_test}${suffix}")
-        # escape \
-        string(REPLACE [[\]] [[\\]] testname "${testname}")
-        # escape ;
-        string(REPLACE [[;]] [[\;]] testname "${testname}")
-        # escape $
-        string(REPLACE [[$]] [[\$]] testname "${testname}")
-
-        # ...and add to script
-        add_command(add_test
-          "${testname}"
-          ${_TEST_EXECUTOR}
-          "${_TEST_EXECUTABLE}"
-          "--gtest_filter=${suite}.${test}"
-          "--gtest_also_run_disabled_tests"
-          ${TEST_XML_OUTPUT_PARAM}
-          ${extra_args}
-        )
-        if(suite MATCHES "^DISABLED" OR test MATCHES "^DISABLED")
-          add_command(set_tests_properties
-            "${testname}"
-            PROPERTIES DISABLED TRUE
-          )
-        endif()
-        add_command(set_tests_properties
-          "${testname}"
-          PROPERTIES
-          WORKING_DIRECTORY "${_TEST_WORKING_DIR}"
-          SKIP_REGULAR_EXPRESSION "\\\\[  SKIPPED \\\\]"
-          ${properties}
-        )
-        list(APPEND tests_buffer "${testname}")
-        list(LENGTH tests_buffer tests_buffer_length)
-        if(${tests_buffer_length} GREATER "250")
-          flush_tests_buffer()
-        endif()
-      endif()
-    endif()
-  endforeach()
-
-
-  # Create a list of all discovered tests, which users may use to e.g. set
-  # properties on the tests
-  flush_tests_buffer()
-  add_command(set ${_TEST_LIST} ${tests})
-
-  # Write CTest script
-  flush_script()
-
-endfunction()
-
-if(CMAKE_SCRIPT_MODE_FILE)
-  gtest_discover_tests_impl(
-    NO_PRETTY_TYPES ${NO_PRETTY_TYPES}
-    NO_PRETTY_VALUES ${NO_PRETTY_VALUES}
-    TEST_EXECUTABLE ${TEST_EXECUTABLE}
-    TEST_EXECUTOR ${TEST_EXECUTOR}
-    TEST_WORKING_DIR ${TEST_WORKING_DIR}
-    TEST_PREFIX ${TEST_PREFIX}
-    TEST_SUFFIX ${TEST_SUFFIX}
-    TEST_LIST ${TEST_LIST}
-    CTEST_FILE ${CTEST_FILE}
-    TEST_DISCOVERY_TIMEOUT ${TEST_DISCOVERY_TIMEOUT}
-    TEST_XML_OUTPUT_DIR ${TEST_XML_OUTPUT_DIR}
-    TEST_EXTRA_ARGS ${TEST_EXTRA_ARGS}
-    TEST_PROPERTIES ${TEST_PROPERTIES}
-  )
-endif()
diff --git a/share/cmake-3.18/Modules/InstallRequiredSystemLibraries.cmake b/share/cmake-3.18/Modules/InstallRequiredSystemLibraries.cmake
deleted file mode 100644
index caca697..0000000
--- a/share/cmake-3.18/Modules/InstallRequiredSystemLibraries.cmake
+++ /dev/null
@@ -1,772 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-InstallRequiredSystemLibraries
-------------------------------
-
-Include this module to search for compiler-provided system runtime
-libraries and add install rules for them.  Some optional variables
-may be set prior to including the module to adjust behavior:
-
-``CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS``
-  Specify additional runtime libraries that may not be detected.
-  After inclusion any detected libraries will be appended to this.
-
-``CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP``
-  Set to TRUE to skip calling the :command:`install(PROGRAMS)` command to
-  allow the includer to specify its own install rule, using the value of
-  ``CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS`` to get the list of libraries.
-
-``CMAKE_INSTALL_DEBUG_LIBRARIES``
-  Set to TRUE to install the debug runtime libraries when available
-  with MSVC tools.
-
-``CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY``
-  Set to TRUE to install only the debug runtime libraries with MSVC
-  tools even if the release runtime libraries are also available.
-
-``CMAKE_INSTALL_UCRT_LIBRARIES``
-  Set to TRUE to install the Windows Universal CRT libraries for
-  app-local deployment (e.g. to Windows XP).  This is meaningful
-  only with MSVC from Visual Studio 2015 or higher.
-
-  One may set a ``CMAKE_WINDOWS_KITS_10_DIR`` *environment variable*
-  to an absolute path to tell CMake to look for Windows 10 SDKs in
-  a custom location.  The specified directory is expected to contain
-  ``Redist/ucrt/DLLs/*`` directories.
-
-``CMAKE_INSTALL_MFC_LIBRARIES``
-  Set to TRUE to install the MSVC MFC runtime libraries.
-
-``CMAKE_INSTALL_OPENMP_LIBRARIES``
-  Set to TRUE to install the MSVC OpenMP runtime libraries
-
-``CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION``
-  Specify the :command:`install(PROGRAMS)` command ``DESTINATION``
-  option.  If not specified, the default is ``bin`` on Windows
-  and ``lib`` elsewhere.
-
-``CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS``
-  Set to TRUE to disable warnings about required library files that
-  do not exist.  (For example, Visual Studio Express editions may
-  not provide the redistributable files.)
-
-``CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT``
-  Specify the :command:`install(PROGRAMS)` command ``COMPONENT``
-  option.  If not specified, no such option will be used.
-#]=======================================================================]
-
-cmake_policy(PUSH)
-cmake_policy(SET CMP0054 NEW) # if() quoted variables not dereferenced
-
-set(_IRSL_HAVE_Intel FALSE)
-set(_IRSL_HAVE_MSVC FALSE)
-foreach(LANG IN ITEMS C CXX Fortran)
-  if("${CMAKE_${LANG}_COMPILER_ID}" STREQUAL "Intel")
-    if(NOT _IRSL_HAVE_Intel)
-      get_filename_component(_Intel_basedir "${CMAKE_${LANG}_COMPILER}" PATH)
-      if(CMAKE_SIZEOF_VOID_P EQUAL 8)
-        set(_Intel_archdir intel64)
-      else()
-        set(_Intel_archdir ia32)
-      endif()
-      set(_Intel_compiler_ver ${CMAKE_${LANG}_COMPILER_VERSION})
-      if(WIN32)
-        get_filename_component(_Intel_redistdir "${_Intel_basedir}/../../redist/${_Intel_archdir}/compiler" ABSOLUTE)
-      elseif(APPLE)
-        get_filename_component(_Intel_redistdir "${_Intel_basedir}/../../compiler/lib" ABSOLUTE)
-      else()
-        if(EXISTS "${_Intel_basedir}/../lib/${_Intel_archdir}_lin")
-          get_filename_component(_Intel_redistdir "${_Intel_basedir}/../lib/${_Intel_archdir}" ABSOLUTE)
-        else()
-          get_filename_component(_Intel_redistdir "${_Intel_basedir}/../../compiler/lib/${_Intel_archdir}_lin" ABSOLUTE)
-        endif()
-      endif()
-      set(_IRSL_HAVE_Intel TRUE)
-    endif()
-  elseif("${CMAKE_${LANG}_COMPILER_ID}" STREQUAL "MSVC")
-    set(_IRSL_HAVE_MSVC TRUE)
-  endif()
-endforeach()
-
-if(MSVC)
-  file(TO_CMAKE_PATH "$ENV{SYSTEMROOT}" SYSTEMROOT)
-
-  if(CMAKE_CL_64)
-    if(MSVC_VERSION GREATER 1599)
-      # VS 10 and later:
-      set(CMAKE_MSVC_ARCH x64)
-    else()
-      # VS 9 and earlier:
-      set(CMAKE_MSVC_ARCH amd64)
-    endif()
-  else()
-    set(CMAKE_MSVC_ARCH x86)
-  endif()
-
-  get_filename_component(devenv_dir "${CMAKE_MAKE_PROGRAM}" PATH)
-  get_filename_component(base_dir "${devenv_dir}/../.." ABSOLUTE)
-
-  if(MSVC_VERSION EQUAL 1300)
-    set(__install__libs
-      "${SYSTEMROOT}/system32/msvcp70.dll"
-      "${SYSTEMROOT}/system32/msvcr70.dll"
-      )
-  endif()
-
-  if(MSVC_VERSION EQUAL 1310)
-    set(__install__libs
-      "${SYSTEMROOT}/system32/msvcp71.dll"
-      "${SYSTEMROOT}/system32/msvcr71.dll"
-      )
-  endif()
-
-  if(MSVC_TOOLSET_VERSION EQUAL 80)
-    # Find the runtime library redistribution directory.
-    get_filename_component(msvc_install_dir
-      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0;InstallDir]" ABSOLUTE)
-    if(DEFINED MSVC80_REDIST_DIR AND EXISTS "${MSVC80_REDIST_DIR}")
-      set(MSVC_REDIST_DIR "${MSVC80_REDIST_DIR}") # use old cache entry
-    endif()
-    find_path(MSVC_REDIST_DIR NAMES ${CMAKE_MSVC_ARCH}/Microsoft.VC80.CRT/Microsoft.VC80.CRT.manifest
-      PATHS
-        "${msvc_install_dir}/../../VC/redist"
-        "${base_dir}/VC/redist"
-      )
-    mark_as_advanced(MSVC_REDIST_DIR)
-    set(MSVC_CRT_DIR "${MSVC_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC80.CRT")
-
-    # Install the manifest that allows DLLs to be loaded from the
-    # directory containing the executable.
-    if(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY)
-      set(__install__libs
-        "${MSVC_CRT_DIR}/Microsoft.VC80.CRT.manifest"
-        "${MSVC_CRT_DIR}/msvcm80.dll"
-        "${MSVC_CRT_DIR}/msvcp80.dll"
-        "${MSVC_CRT_DIR}/msvcr80.dll"
-        )
-    else()
-      set(__install__libs)
-    endif()
-
-    if(CMAKE_INSTALL_DEBUG_LIBRARIES)
-      set(MSVC_CRT_DIR
-        "${MSVC_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.VC80.DebugCRT")
-      set(__install__libs ${__install__libs}
-        "${MSVC_CRT_DIR}/Microsoft.VC80.DebugCRT.manifest"
-        "${MSVC_CRT_DIR}/msvcm80d.dll"
-        "${MSVC_CRT_DIR}/msvcp80d.dll"
-        "${MSVC_CRT_DIR}/msvcr80d.dll"
-        )
-    endif()
-  endif()
-
-  if(MSVC_TOOLSET_VERSION EQUAL 90)
-    # Find the runtime library redistribution directory.
-    get_filename_component(msvc_install_dir
-      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\9.0;InstallDir]" ABSOLUTE)
-    get_filename_component(msvc_express_install_dir
-      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\9.0;InstallDir]" ABSOLUTE)
-    if(DEFINED MSVC90_REDIST_DIR AND EXISTS "${MSVC90_REDIST_DIR}")
-      set(MSVC_REDIST_DIR "${MSVC90_REDIST_DIR}") # use old cache entry
-    endif()
-    find_path(MSVC_REDIST_DIR NAMES ${CMAKE_MSVC_ARCH}/Microsoft.VC90.CRT/Microsoft.VC90.CRT.manifest
-      PATHS
-        "${msvc_install_dir}/../../VC/redist"
-        "${msvc_express_install_dir}/../../VC/redist"
-        "${base_dir}/VC/redist"
-      )
-    mark_as_advanced(MSVC_REDIST_DIR)
-    set(MSVC_CRT_DIR "${MSVC_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC90.CRT")
-
-    # Install the manifest that allows DLLs to be loaded from the
-    # directory containing the executable.
-    if(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY)
-      set(__install__libs
-        "${MSVC_CRT_DIR}/Microsoft.VC90.CRT.manifest"
-        "${MSVC_CRT_DIR}/msvcm90.dll"
-        "${MSVC_CRT_DIR}/msvcp90.dll"
-        "${MSVC_CRT_DIR}/msvcr90.dll"
-        )
-    else()
-      set(__install__libs)
-    endif()
-
-    if(CMAKE_INSTALL_DEBUG_LIBRARIES)
-      set(MSVC_CRT_DIR
-        "${MSVC_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.VC90.DebugCRT")
-      set(__install__libs ${__install__libs}
-        "${MSVC_CRT_DIR}/Microsoft.VC90.DebugCRT.manifest"
-        "${MSVC_CRT_DIR}/msvcm90d.dll"
-        "${MSVC_CRT_DIR}/msvcp90d.dll"
-        "${MSVC_CRT_DIR}/msvcr90d.dll"
-        )
-    endif()
-  endif()
-
-  set(MSVC_REDIST_NAME "")
-  set(_MSVC_DLL_VERSION "")
-  set(_MSVC_IDE_VERSION "")
-  if(MSVC_VERSION GREATER_EQUAL 2000)
-    message(WARNING "MSVC ${MSVC_VERSION} not yet supported.")
-  elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 143)
-    message(WARNING "MSVC toolset v${MSVC_TOOLSET_VERSION} not yet supported.")
-  elseif(MSVC_TOOLSET_VERSION EQUAL 142)
-    set(MSVC_REDIST_NAME VC142)
-    set(_MSVC_DLL_VERSION 140)
-    set(_MSVC_IDE_VERSION 16)
-    if(MSVC_VERSION EQUAL 1920)
-      # VS2019 named this differently prior to update 1.
-      set(MSVC_REDIST_NAME VC141)
-    endif()
-  elseif(MSVC_TOOLSET_VERSION EQUAL 141)
-    set(MSVC_REDIST_NAME VC141)
-    set(_MSVC_DLL_VERSION 140)
-    set(_MSVC_IDE_VERSION 15)
-    if(MSVC_VERSION EQUAL 1910)
-      # VS2017 named this differently prior to update 3.
-      set(MSVC_REDIST_NAME VC150)
-    endif()
-  elseif(MSVC_TOOLSET_VERSION)
-    set(MSVC_REDIST_NAME VC${MSVC_TOOLSET_VERSION})
-    math(EXPR _MSVC_DLL_VERSION "${MSVC_TOOLSET_VERSION} / 10 * 10")
-    math(EXPR _MSVC_IDE_VERSION "${MSVC_TOOLSET_VERSION} / 10")
-  endif()
-
-  set(_MSVCRT_DLL_VERSION "")
-  set(_MSVCRT_IDE_VERSION "")
-  if(_MSVC_IDE_VERSION GREATER_EQUAL 10)
-    set(_MSVCRT_DLL_VERSION "${_MSVC_DLL_VERSION}")
-    set(_MSVCRT_IDE_VERSION "${_MSVC_IDE_VERSION}")
-  endif()
-
-  if(_MSVCRT_DLL_VERSION)
-    set(v "${_MSVCRT_DLL_VERSION}")
-    set(vs "${_MSVCRT_IDE_VERSION}")
-
-    # Find the runtime library redistribution directory.
-    if(vs VERSION_LESS 15 AND DEFINED MSVC${vs}_REDIST_DIR AND EXISTS "${MSVC${vs}_REDIST_DIR}")
-      set(MSVC_REDIST_DIR "${MSVC${vs}_REDIST_DIR}") # use old cache entry
-    endif()
-    if(NOT vs VERSION_LESS 15)
-      set(_vs_redist_paths "")
-      # The toolset and its redistributables may come with any VS version 15 or newer.
-      set(_MSVC_IDE_VERSIONS 16 15)
-      foreach(_vs_ver ${_MSVC_IDE_VERSIONS})
-        set(_vs_glob_redist_paths "")
-        cmake_host_system_information(RESULT _vs_dir QUERY VS_${_vs_ver}_DIR) # undocumented query
-        if(IS_DIRECTORY "${_vs_dir}")
-          file(GLOB _vs_glob_redist_paths "${_vs_dir}/VC/Redist/MSVC/*")
-          list(REVERSE _vs_glob_redist_paths)
-          list(APPEND _vs_redist_paths ${_vs_glob_redist_paths})
-        endif()
-        unset(_vs_glob_redist_paths)
-      endforeach()
-      unset(_MSVC_IDE_VERSIONS)
-      unset(_vs_dir)
-    else()
-      get_filename_component(_vs_dir
-        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\${vs}.0;InstallDir]" ABSOLUTE)
-      set(programfilesx86 "ProgramFiles(x86)")
-      set(_vs_redist_paths
-        "${_vs_dir}/../../VC/redist"
-        "${base_dir}/VC/redist"
-        "$ENV{ProgramFiles}/Microsoft Visual Studio ${vs}.0/VC/redist"
-        "$ENV{${programfilesx86}}/Microsoft Visual Studio ${vs}.0/VC/redist"
-        )
-      unset(_vs_dir)
-      unset(programfilesx86)
-    endif()
-    find_path(MSVC_REDIST_DIR NAMES ${CMAKE_MSVC_ARCH}/Microsoft.${MSVC_REDIST_NAME}.CRT PATHS ${_vs_redist_paths})
-    unset(_vs_redist_paths)
-    mark_as_advanced(MSVC_REDIST_DIR)
-    set(MSVC_CRT_DIR "${MSVC_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.${MSVC_REDIST_NAME}.CRT")
-
-    if(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY)
-      set(__install__libs
-        "${MSVC_CRT_DIR}/msvcp${v}.dll"
-        )
-      if(NOT vs VERSION_LESS 14)
-        foreach(crt
-            "${MSVC_CRT_DIR}/msvcp${v}_1.dll"
-            "${MSVC_CRT_DIR}/msvcp${v}_2.dll"
-            "${MSVC_CRT_DIR}/msvcp${v}_codecvt_ids.dll"
-            "${MSVC_CRT_DIR}/vcruntime${v}_1.dll"
-            )
-          if(EXISTS "${crt}")
-            list(APPEND __install__libs "${crt}")
-          endif()
-        endforeach()
-        list(APPEND __install__libs
-            "${MSVC_CRT_DIR}/vcruntime${v}.dll"
-            "${MSVC_CRT_DIR}/concrt${v}.dll"
-            )
-      else()
-        list(APPEND __install__libs "${MSVC_CRT_DIR}/msvcr${v}.dll")
-      endif()
-    else()
-      set(__install__libs)
-    endif()
-
-    if(CMAKE_INSTALL_DEBUG_LIBRARIES)
-      set(MSVC_CRT_DIR
-        "${MSVC_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.${MSVC_REDIST_NAME}.DebugCRT")
-      set(__install__libs ${__install__libs}
-        "${MSVC_CRT_DIR}/msvcp${v}d.dll"
-        )
-      if(NOT vs VERSION_LESS 14)
-        foreach(crt
-            "${MSVC_CRT_DIR}/msvcp${v}_1d.dll"
-            "${MSVC_CRT_DIR}/msvcp${v}_2d.dll"
-            "${MSVC_CRT_DIR}/msvcp${v}d_codecvt_ids.dll"
-            "${MSVC_CRT_DIR}/vcruntime${v}_1d.dll"
-            )
-          if(EXISTS "${crt}")
-            list(APPEND __install__libs "${crt}")
-          endif()
-        endforeach()
-        list(APPEND __install__libs
-            "${MSVC_CRT_DIR}/vcruntime${v}d.dll"
-            "${MSVC_CRT_DIR}/concrt${v}d.dll"
-            )
-      else()
-        list(APPEND __install__libs "${MSVC_CRT_DIR}/msvcr${v}d.dll")
-      endif()
-    endif()
-
-    if(CMAKE_INSTALL_UCRT_LIBRARIES AND NOT vs VERSION_LESS 14)
-      # Find the Windows Kits directory.
-      get_filename_component(windows_kits_dir
-        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots;KitsRoot10]" ABSOLUTE)
-      set(programfilesx86 "ProgramFiles(x86)")
-      if(";${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION};$ENV{UCRTVersion};$ENV{WindowsSDKVersion};" MATCHES [=[;(10\.[0-9.]+)[;\]]=])
-        set(__ucrt_version "${CMAKE_MATCH_1}/")
-      else()
-        set(__ucrt_version "")
-      endif()
-      find_path(WINDOWS_KITS_DIR
-        NAMES
-          Redist/${__ucrt_version}ucrt/DLLs/${CMAKE_MSVC_ARCH}/ucrtbase.dll
-          Redist/ucrt/DLLs/${CMAKE_MSVC_ARCH}/ucrtbase.dll
-        PATHS
-        $ENV{CMAKE_WINDOWS_KITS_10_DIR}
-        "${windows_kits_dir}"
-        "$ENV{ProgramFiles}/Windows Kits/10"
-        "$ENV{${programfilesx86}}/Windows Kits/10"
-        )
-      mark_as_advanced(WINDOWS_KITS_DIR)
-
-      # Glob the list of UCRT DLLs.
-      if(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY)
-        if(EXISTS "${WINDOWS_KITS_DIR}/Redist/${__ucrt_version}ucrt/DLLs/${CMAKE_MSVC_ARCH}/ucrtbase.dll")
-          file(GLOB __ucrt_dlls "${WINDOWS_KITS_DIR}/Redist/${__ucrt_version}ucrt/DLLs/${CMAKE_MSVC_ARCH}/*.dll")
-        else()
-          file(GLOB __ucrt_dlls "${WINDOWS_KITS_DIR}/Redist/ucrt/DLLs/${CMAKE_MSVC_ARCH}/*.dll")
-        endif()
-        list(APPEND __install__libs ${__ucrt_dlls})
-      endif()
-      if(CMAKE_INSTALL_DEBUG_LIBRARIES)
-        if(EXISTS "${WINDOWS_KITS_DIR}/bin/${__ucrt_version}${CMAKE_MSVC_ARCH}/ucrt/ucrtbased.dll")
-          file(GLOB __ucrt_dlls "${WINDOWS_KITS_DIR}/bin/${__ucrt_version}${CMAKE_MSVC_ARCH}/ucrt/*.dll")
-        else()
-          file(GLOB __ucrt_dlls "${WINDOWS_KITS_DIR}/bin/${CMAKE_MSVC_ARCH}/ucrt/*.dll")
-        endif()
-        list(APPEND __install__libs ${__ucrt_dlls})
-      endif()
-    endif()
-  endif()
-
-  if(CMAKE_INSTALL_MFC_LIBRARIES)
-    if(MSVC_VERSION EQUAL 1300)
-      set(__install__libs ${__install__libs}
-        "${SYSTEMROOT}/system32/mfc70.dll"
-        )
-    endif()
-
-    if(MSVC_VERSION EQUAL 1310)
-      set(__install__libs ${__install__libs}
-        "${SYSTEMROOT}/system32/mfc71.dll"
-        )
-    endif()
-
-    if(MSVC_VERSION EQUAL 1400)
-      if(CMAKE_INSTALL_DEBUG_LIBRARIES)
-        set(MSVC_MFC_DIR
-          "${MSVC_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.VC80.DebugMFC")
-        set(__install__libs ${__install__libs}
-          "${MSVC_MFC_DIR}/Microsoft.VC80.DebugMFC.manifest"
-          "${MSVC_MFC_DIR}/mfc80d.dll"
-          "${MSVC_MFC_DIR}/mfc80ud.dll"
-          "${MSVC_MFC_DIR}/mfcm80d.dll"
-          "${MSVC_MFC_DIR}/mfcm80ud.dll"
-          )
-      endif()
-
-      set(MSVC_MFC_DIR "${MSVC_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC80.MFC")
-      # Install the manifest that allows DLLs to be loaded from the
-      # directory containing the executable.
-      if(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY)
-        set(__install__libs ${__install__libs}
-          "${MSVC_MFC_DIR}/Microsoft.VC80.MFC.manifest"
-          "${MSVC_MFC_DIR}/mfc80.dll"
-          "${MSVC_MFC_DIR}/mfc80u.dll"
-          "${MSVC_MFC_DIR}/mfcm80.dll"
-          "${MSVC_MFC_DIR}/mfcm80u.dll"
-          )
-      endif()
-
-      # include the language dll's for vs8 as well as the actual dll's
-      set(MSVC_MFCLOC_DIR "${MSVC_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC80.MFCLOC")
-      # Install the manifest that allows DLLs to be loaded from the
-      # directory containing the executable.
-      set(__install__libs ${__install__libs}
-        "${MSVC_MFCLOC_DIR}/Microsoft.VC80.MFCLOC.manifest"
-        "${MSVC_MFCLOC_DIR}/mfc80chs.dll"
-        "${MSVC_MFCLOC_DIR}/mfc80cht.dll"
-        "${MSVC_MFCLOC_DIR}/mfc80enu.dll"
-        "${MSVC_MFCLOC_DIR}/mfc80esp.dll"
-        "${MSVC_MFCLOC_DIR}/mfc80deu.dll"
-        "${MSVC_MFCLOC_DIR}/mfc80fra.dll"
-        "${MSVC_MFCLOC_DIR}/mfc80ita.dll"
-        "${MSVC_MFCLOC_DIR}/mfc80jpn.dll"
-        "${MSVC_MFCLOC_DIR}/mfc80kor.dll"
-        )
-    endif()
-
-    if(MSVC_VERSION EQUAL 1500)
-      if(CMAKE_INSTALL_DEBUG_LIBRARIES)
-        set(MSVC_MFC_DIR
-          "${MSVC_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.VC90.DebugMFC")
-        set(__install__libs ${__install__libs}
-          "${MSVC_MFC_DIR}/Microsoft.VC90.DebugMFC.manifest"
-          "${MSVC_MFC_DIR}/mfc90d.dll"
-          "${MSVC_MFC_DIR}/mfc90ud.dll"
-          "${MSVC_MFC_DIR}/mfcm90d.dll"
-          "${MSVC_MFC_DIR}/mfcm90ud.dll"
-          )
-      endif()
-
-      set(MSVC_MFC_DIR "${MSVC_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC90.MFC")
-      # Install the manifest that allows DLLs to be loaded from the
-      # directory containing the executable.
-      if(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY)
-        set(__install__libs ${__install__libs}
-          "${MSVC_MFC_DIR}/Microsoft.VC90.MFC.manifest"
-          "${MSVC_MFC_DIR}/mfc90.dll"
-          "${MSVC_MFC_DIR}/mfc90u.dll"
-          "${MSVC_MFC_DIR}/mfcm90.dll"
-          "${MSVC_MFC_DIR}/mfcm90u.dll"
-          )
-      endif()
-
-      # include the language dll's for vs9 as well as the actual dll's
-      set(MSVC_MFCLOC_DIR "${MSVC_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC90.MFCLOC")
-      # Install the manifest that allows DLLs to be loaded from the
-      # directory containing the executable.
-      set(__install__libs ${__install__libs}
-        "${MSVC_MFCLOC_DIR}/Microsoft.VC90.MFCLOC.manifest"
-        "${MSVC_MFCLOC_DIR}/mfc90chs.dll"
-        "${MSVC_MFCLOC_DIR}/mfc90cht.dll"
-        "${MSVC_MFCLOC_DIR}/mfc90enu.dll"
-        "${MSVC_MFCLOC_DIR}/mfc90esp.dll"
-        "${MSVC_MFCLOC_DIR}/mfc90deu.dll"
-        "${MSVC_MFCLOC_DIR}/mfc90fra.dll"
-        "${MSVC_MFCLOC_DIR}/mfc90ita.dll"
-        "${MSVC_MFCLOC_DIR}/mfc90jpn.dll"
-        "${MSVC_MFCLOC_DIR}/mfc90kor.dll"
-        )
-    endif()
-
-    set(_MFC_DLL_VERSION "")
-    set(_MFC_IDE_VERSION "")
-    if(_MSVC_IDE_VERSION GREATER_EQUAL 10)
-      set(_MFC_DLL_VERSION ${_MSVC_DLL_VERSION})
-      set(_MFC_IDE_VERSION ${_MSVC_IDE_VERSION})
-    endif()
-
-    if(_MFC_DLL_VERSION)
-      set(v "${_MFC_DLL_VERSION}")
-      set(vs "${_MFC_IDE_VERSION}")
-
-      # Starting with VS 15 the MFC DLLs may be in a different directory.
-      if (NOT vs VERSION_LESS 15)
-        file(GLOB _MSVC_REDIST_DIRS "${MSVC_REDIST_DIR}/../*")
-        find_path(MSVC_REDIST_MFC_DIR NAMES ${CMAKE_MSVC_ARCH}/Microsoft.${MSVC_REDIST_NAME}.MFC
-          PATHS ${_MSVC_REDIST_DIRS} NO_DEFAULT_PATH)
-        mark_as_advanced(MSVC_REDIST_MFC_DIR)
-        unset(_MSVC_REDIST_DIRS)
-      else()
-        set(MSVC_REDIST_MFC_DIR "${MSVC_REDIST_DIR}")
-      endif()
-
-      # Multi-Byte Character Set versions of MFC are available as optional
-      # addon since Visual Studio 12.  So for version 12 or higher, check
-      # whether they are available and exclude them if they are not.
-
-      if(CMAKE_INSTALL_DEBUG_LIBRARIES)
-        set(MSVC_MFC_DIR
-          "${MSVC_REDIST_MFC_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.${MSVC_REDIST_NAME}.DebugMFC")
-        set(__install__libs ${__install__libs}
-          "${MSVC_MFC_DIR}/mfc${v}ud.dll"
-          "${MSVC_MFC_DIR}/mfcm${v}ud.dll"
-          )
-        if("${v}" LESS 12 OR EXISTS "${MSVC_MFC_DIR}/mfc${v}d.dll")
-          set(__install__libs ${__install__libs}
-            "${MSVC_MFC_DIR}/mfc${v}d.dll"
-          )
-        endif()
-        if("${v}" LESS 12 OR EXISTS "${MSVC_MFC_DIR}/mfcm${v}d.dll")
-          set(__install__libs ${__install__libs}
-            "${MSVC_MFC_DIR}/mfcm${v}d.dll"
-          )
-        endif()
-      endif()
-
-      set(MSVC_MFC_DIR "${MSVC_REDIST_MFC_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.${MSVC_REDIST_NAME}.MFC")
-      if(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY)
-        set(__install__libs ${__install__libs}
-          "${MSVC_MFC_DIR}/mfc${v}u.dll"
-          "${MSVC_MFC_DIR}/mfcm${v}u.dll"
-          )
-        if("${v}" LESS 12 OR EXISTS "${MSVC_MFC_DIR}/mfc${v}.dll")
-          set(__install__libs ${__install__libs}
-            "${MSVC_MFC_DIR}/mfc${v}.dll"
-          )
-        endif()
-        if("${v}" LESS 12 OR EXISTS "${MSVC_MFC_DIR}/mfcm${v}.dll")
-          set(__install__libs ${__install__libs}
-            "${MSVC_MFC_DIR}/mfcm${v}.dll"
-          )
-        endif()
-      endif()
-
-      # include the language dll's as well as the actual dll's
-      set(MSVC_MFCLOC_DIR "${MSVC_REDIST_MFC_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.${MSVC_REDIST_NAME}.MFCLOC")
-      set(__install__libs ${__install__libs}
-        "${MSVC_MFCLOC_DIR}/mfc${v}chs.dll"
-        "${MSVC_MFCLOC_DIR}/mfc${v}cht.dll"
-        "${MSVC_MFCLOC_DIR}/mfc${v}deu.dll"
-        "${MSVC_MFCLOC_DIR}/mfc${v}enu.dll"
-        "${MSVC_MFCLOC_DIR}/mfc${v}esn.dll"
-        "${MSVC_MFCLOC_DIR}/mfc${v}fra.dll"
-        "${MSVC_MFCLOC_DIR}/mfc${v}ita.dll"
-        "${MSVC_MFCLOC_DIR}/mfc${v}jpn.dll"
-        "${MSVC_MFCLOC_DIR}/mfc${v}kor.dll"
-        "${MSVC_MFCLOC_DIR}/mfc${v}rus.dll"
-        )
-    endif()
-  endif()
-
-  # MSVC 8 was the first version with OpenMP
-  # Furthermore, there is no debug version of this
-  if(CMAKE_INSTALL_OPENMP_LIBRARIES AND _IRSL_HAVE_MSVC)
-    set(_MSOMP_DLL_VERSION ${_MSVC_DLL_VERSION})
-    set(_MSOMP_IDE_VERSION ${_MSVC_IDE_VERSION})
-
-    if(_MSOMP_DLL_VERSION)
-      set(v "${_MSOMP_DLL_VERSION}")
-      set(vs "${_MSOMP_IDE_VERSION}")
-      set(MSVC_OPENMP_DIR "${MSVC_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.${MSVC_REDIST_NAME}.OPENMP")
-
-      if(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY)
-        set(__install__libs ${__install__libs}
-          "${MSVC_OPENMP_DIR}/vcomp${v}.dll")
-      endif()
-    endif()
-  endif()
-
-  foreach(lib
-      ${__install__libs}
-      )
-    if(EXISTS ${lib})
-      set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS
-        ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} ${lib})
-    else()
-      if(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS)
-        message(WARNING "system runtime library file does not exist: '${lib}'")
-        # This warning indicates an incomplete Visual Studio installation
-        # or a bug somewhere above here in this file.
-        # If you would like to avoid this warning, fix the real problem, or
-        # set CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS before including
-        # this file.
-      endif()
-    endif()
-  endforeach()
-endif()
-
-if(_IRSL_HAVE_Intel)
-  unset(__install_libs)
-  if(CMAKE_INSTALL_OPENMP_LIBRARIES)
-    if(WIN32)
-      list(APPEND __install_libs "${_Intel_redistdir}/libiomp5md.dll" "${_Intel_redistdir}/libiompstubs5md.dll")
-    elseif(APPLE)
-      list(APPEND __install_libs "${_Intel_redistdir}/libiomp5.dylib" "${_Intel_redistdir}/libiompstubs5.dylib")
-    else()
-      list(APPEND __install_libs "${_Intel_redistdir}/libiomp5.so" "${_Intel_redistdir}/libiompstubs5.so")
-      if(_Intel_compiler_ver VERSION_LESS 17)
-        list(APPEND __install_libs "${_Intel_redistdir}/libomp_db.so")
-      endif()
-      if(_Intel_compiler_ver VERSION_LESS 13)
-        list(APPEND __install_libs "${_Intel_redistdir}/libiompprof5.so")
-      endif()
-    endif()
-  endif()
-  if(WIN32)
-    set(__install_dirs "${_Intel_redistdir}/1033")
-    if(EXISTS "${_Intel_redistdir}/1041")
-      list(APPEND __install_dirs "${_Intel_redistdir}/1041")
-    endif()
-    if(_Intel_compiler_ver VERSION_LESS 18)
-      list(APPEND __install_dirs "${_Intel_redistdir}/irml" "${_Intel_redistdir}/irml_c")
-    endif()
-    foreach(__Intel_lib IN ITEMS cilkrts20.dll libchkp.dll libioffload_host.dll libirngmd.dll
-      libmmd.dll libmmdd.dll libmpx.dll liboffload.dll svml_dispmd.dll)
-
-      list(APPEND __install_libs "${_Intel_redistdir}/${__Intel_lib}")
-    endforeach()
-    if(CMAKE_C_COMPILER_ID STREQUAL Intel OR CMAKE_CXX_COMPILER_ID STREQUAL Intel)
-      list(APPEND __install_libs "${_Intel_redistdir}/libgfxoffload.dll")
-    endif()
-    if(CMAKE_Fortran_COMPILER_ID STREQUAL Intel)
-      foreach(__Intel_lib IN ITEMS ifdlg100.dll libicaf.dll libifcoremd.dll libifcoremdd.dll libifcorert.dll libifcorertd.dll libifportmd.dll)
-
-        list(APPEND __install_libs "${_Intel_redistdir}/${__Intel_lib}")
-      endforeach()
-    endif()
-  elseif(APPLE)
-    foreach(__Intel_lib IN ITEMS libchkp.dylib libcilkrts.5.dylib libcilkrts.dylib libimf.dylib libintlc.dylib libirc.dylib libirng.dylib libsvml.dylib)
-      list(APPEND __install_libs "${_Intel_redistdir}/${__Intel_lib}")
-    endforeach()
-    if(CMAKE_C_COMPILER_ID STREQUAL Intel OR CMAKE_CXX_COMPILER_ID STREQUAL Intel)
-      if(_Intel_compiler_ver VERSION_LESS 17)
-        list(APPEND __install_libs "${_Intel_redistdir}/libistrconv.dylib")
-      endif()
-    endif()
-    if(CMAKE_Fortran_COMPILER_ID STREQUAL Intel)
-      foreach(__Intel_lib IN ITEMS libifcore.dylib libifcoremt.dylib libifport.dylib libifportmt.dylib)
-
-        list(APPEND __install_libs "${_Intel_redistdir}/${__Intel_lib}")
-      endforeach()
-    endif()
-  else()
-    foreach(__Intel_lib IN ITEMS libchkp.so libcilkrts.so libcilkrts.so.5 libimf.so libintlc.so libintlc.so.5 libirc.so libpdbx.so libpdbx.so.5 libsvml.so)
-
-      list(APPEND __install_libs "${_Intel_redistdir}/${__Intel_lib}")
-    endforeach()
-    if(_Intel_compiler_ver VERSION_GREATER_EQUAL 13)
-      foreach(__Intel_lib IN ITEMS libirng.so liboffload.so liboffload.so.5)
-
-        list(APPEND __install_libs "${_Intel_redistdir}/${__Intel_lib}")
-      endforeach()
-    endif()
-    if(CMAKE_C_COMPILER_ID STREQUAL Intel OR CMAKE_CXX_COMPILER_ID STREQUAL Intel)
-      set(__install_dirs "${_Intel_redistdir}/irml")
-      list(APPEND __install_libs "${_Intel_redistdir}/cilk_db.so")
-      if(_Intel_compiler_ver VERSION_GREATER_EQUAL 15)
-        list(APPEND __install_libs "${_Intel_redistdir}/libistrconv.so" "${_Intel_redistdir}/libgfxoffload.so")
-      endif()
-    endif()
-    if(_Intel_compiler_ver VERSION_GREATER_EQUAL 16)
-      foreach(__Intel_lib IN ITEMS libioffload_host.so libioffload_host.so.5 libioffload_target.so libioffload_target.so.5 libmpx.so offload_main)
-
-        list(APPEND __install_libs "${_Intel_redistdir}/${__Intel_lib}")
-      endforeach()
-    endif()
-    if(_Intel_compiler_ver VERSION_LESS 15)
-      foreach(__Intel_lib IN ITEMS libcxaguard.so libcxaguard.so.5)
-
-        list(APPEND __install_libs "${_Intel_redistdir}/${__Intel_lib}")
-      endforeach()
-    endif()
-    if(CMAKE_Fortran_COMPILER_ID STREQUAL Intel)
-      foreach(__Intel_lib IN ITEMS libicaf.so libifcore.so libifcore.so.5 libifcoremt.so libifcoremt.so.5 libifport.so libifport.so.5)
-
-        list(APPEND __install_libs "${_Intel_redistdir}/${__Intel_lib}")
-      endforeach()
-    endif()
-  endif()
-
-  foreach(lib IN LISTS __install_libs)
-    if(EXISTS ${lib})
-      list(APPEND CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS ${lib})
-    else()
-      if(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS)
-        message(WARNING "system runtime library file does not exist: '${lib}'")
-      endif()
-    endif()
-  endforeach()
-
-  foreach(dir IN LISTS __install_dirs)
-    if(EXISTS ${dir})
-      list(APPEND CMAKE_INSTALL_SYSTEM_RUNTIME_DIRECTORIES ${dir})
-    else()
-      if(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS)
-        message(WARNING "system runtime library file does not exist: '${dir}'")
-      endif()
-    endif()
-  endforeach()
-endif()
-
-if(WATCOM)
-  get_filename_component( CompilerPath ${CMAKE_C_COMPILER} PATH )
-  if(CMAKE_C_COMPILER_VERSION)
-    set(_compiler_version ${CMAKE_C_COMPILER_VERSION})
-  else()
-    set(_compiler_version ${CMAKE_CXX_COMPILER_VERSION})
-  endif()
-  string(REGEX MATCHALL "[0-9]+" _watcom_version_list "${_compiler_version}")
-  list(GET _watcom_version_list 0 _watcom_major)
-  list(GET _watcom_version_list 1 _watcom_minor)
-  set( __install__libs
-    ${CompilerPath}/clbr${_watcom_major}${_watcom_minor}.dll
-    ${CompilerPath}/mt7r${_watcom_major}${_watcom_minor}.dll
-    ${CompilerPath}/plbr${_watcom_major}${_watcom_minor}.dll )
-  foreach(lib
-      ${__install__libs}
-      )
-    if(EXISTS ${lib})
-      set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS
-        ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} ${lib})
-    else()
-      if(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS)
-        message(WARNING "system runtime library file does not exist: '${lib}'")
-        # This warning indicates an incomplete Watcom installation
-        # or a bug somewhere above here in this file.
-        # If you would like to avoid this warning, fix the real problem, or
-        # set CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS before including
-        # this file.
-      endif()
-    endif()
-  endforeach()
-endif()
-
-
-# Include system runtime libraries in the installation if any are
-# specified by CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS.
-if(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS)
-  if(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP)
-    if(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION)
-      if(WIN32)
-        set(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION bin)
-      else()
-        set(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION lib)
-      endif()
-    endif()
-    if(CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT)
-      set(_CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT
-        COMPONENT ${CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT})
-    endif()
-    install(PROGRAMS ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS}
-      DESTINATION ${CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION}
-      ${_CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT}
-      )
-
-    install(DIRECTORY ${CMAKE_INSTALL_SYSTEM_RUNTIME_DIRECTORIES}
-      DESTINATION ${CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION}
-      ${_CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT}
-      )
-  endif()
-endif()
-
-cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/Internal/CMakeCheckCompilerFlag.cmake b/share/cmake-3.18/Modules/Internal/CMakeCheckCompilerFlag.cmake
deleted file mode 100644
index 9c8dfb6..0000000
--- a/share/cmake-3.18/Modules/Internal/CMakeCheckCompilerFlag.cmake
+++ /dev/null
@@ -1,158 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=[
-
-NOTE: This function is used internally by CMake. Projects should not include
-      this file directly.
-
-The cmake_check_compiler_flag() function can be used to compile and link a
-source file to check whether a specific compiler or linker flag is supported.
-The function does not use the try_compile() command so as to avoid infinite
-recursion.  It may not work for all platforms or toolchains, the caller is
-responsible for ensuring it is only called in valid situations.
-
-  cmake_check_compiler_flag(<lang> <flag> <result>
-                            [SRC_EXT <ext>] [COMMAND_PATTERN <pattern>]
-                            [FAIL_REGEX <regex> ...]
-                            [OUTPUT_VARIABLE <output>])
-
-Parameters:
-  <lang>   - Language to check.
-  <flag>   - The flag to add to the compile/link command line.
-  <result> - Boolean output variable.  It will be stored in the cache as an
-             internal variable and if true, will cause future tests that assign
-             to that variable to be bypassed.
-
-Optional parameters:
-  SRC_EXT         - Overrides the extension of the source file used for the
-                    check.  Defaults are 'c' (C), 'cxx' (CXX), 'F' (Fortran).
-  COMMAND_PATTERN - Pattern to be used for the command line. The default is
-                    '<FLAG> -o <OUTPUT> <SOURCE>'
-  FAIL_REGEX      - List of additional regular expressions that, if matched by
-                    the output, give a failed result for the check.  A common
-                    set of regular expressions will be included in addition to
-                    those given by FAIL_REGEX.
-  OUTPUT_VARIABLE - Set <output> variable with details about any error.
-#]=]
-
-include_guard(GLOBAL)
-include(CMakeCheckCompilerFlagCommonPatterns)
-
-function(CMAKE_CHECK_COMPILER_FLAG lang flag result)
-  # Cache results between runs similar to check_<lang>_source_compiles()
-  if(DEFINED ${result})
-    return()
-  endif()
-
-  set(comment "Is the '${flag}' option(s) supported")
-  string(REPLACE ";" " " comment "${comment}")
-
-  if (NOT lang MATCHES "^(C|CXX|Fortran|ASM)$")
-    # other possible languages are not supported
-    # log message to keep trace of this problem...
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-      "Function 'CMAKE_CHECK_COMPILER_FLAG' called with unsupported language: ${lang}\n")
-    set(${result} FALSE CACHE INTERNAL ${comment})
-    return()
-  endif()
-  if (lang STREQUAL "ASM")
-    # assume ASM compiler is a multi-language compiler, so supports C language as well
-    set(check_lang C)
-  else()
-    set(check_lang ${lang})
-  endif()
-
-  cmake_parse_arguments(CCCF "" "SRC_EXT;COMMAND_PATTERN;OUTPUT_VARIABLE" "FAIL_REGEX" ${ARGN})
-
-  if (NOT CCCF_COMMAND_PATTERN)
-    set (CCCF_COMMAND_PATTERN "<FLAG> -o <OUTPUT> <SOURCE>")
-  endif()
-
-  list (APPEND CCCF_FAIL_REGEX "argument unused during compilation") # clang
-  if (check_lang STREQUAL "C")
-    list(APPEND CCCF_FAIL_REGEX
-      "command line option .* is valid for .* but not for C") # GNU
-  elseif(check_lang STREQUAL "CXX")
-    list(APPEND CCCF_FAIL_REGEX
-      "command line option .* is valid for .* but not for C\\+\\+") # GNU
-  elseif(check_lang STREQUAL "Fortran")
-    list(APPEND CCCF_FAIL_REGEX
-      "command line option .* is valid for .* but not for Fortran") # GNU
-  endif()
-
-  # Add patterns for common errors
-  check_compiler_flag_common_patterns(COMPILER_FLAG_COMMON_PATTERNS)
-  foreach(arg IN LISTS COMPILER_FLAG_COMMON_PATTERNS)
-    if(arg MATCHES "^FAIL_REGEX$")
-      continue()
-    endif()
-    list(APPEND CCCF_FAIL_REGEX "${arg}")
-  endforeach()
-
-  if(NOT CCCF_SRC_EXT)
-    if (check_lang STREQUAL "C")
-      set(CCCF_SRC_EXT c)
-    elseif(check_lang STREQUAL "CXX")
-      set(CCCF_SRC_EXT cxx)
-    elseif(check_lang STREQUAL "Fortran")
-      set(CCCF_SRC_EXT F)
-    endif()
-  endif()
-
-  if (CCCF_OUTPUT_VARIABLE)
-    unset(${CCCF_OUTPUT_VARIABLE} PARENT_SCOPE)
-  endif()
-
-  # Compute the directory in which to run the test.
-  set(COMPILER_FLAG_DIR "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp")
-  # Compute source and output files.
-  set(COMPILER_FLAG_SRC
-    "${COMPILER_FLAG_DIR}/CompilerFlag${lang}.${CCCF_SRC_EXT}")
-  if(check_lang STREQUAL "Fortran")
-    file(WRITE "${COMPILER_FLAG_SRC}"
-      "      program simple\n      end program simple\n")
-  else()
-    file(WRITE "${COMPILER_FLAG_SRC}" "int main (void)\n{ return 0; }\n")
-  endif()
-  get_filename_component(COMPILER_FLAG_EXE "${COMPILER_FLAG_SRC}" NAME_WE)
-  string(APPEND COMPILER_FLAG_EXE "${CMAKE_EXECUTABLE_SUFFIX}")
-
-  # Build command line
-  separate_arguments(CCCF_COMMAND_PATTERN UNIX_COMMAND
-    "${CCCF_COMMAND_PATTERN}")
-  list(TRANSFORM CCCF_COMMAND_PATTERN REPLACE "<SOURCE>" "${COMPILER_FLAG_SRC}")
-  list(TRANSFORM CCCF_COMMAND_PATTERN REPLACE "<OUTPUT>" "${COMPILER_FLAG_EXE}")
-  list(TRANSFORM CCCF_COMMAND_PATTERN REPLACE "<FLAG>" "${flag}")
-
-  execute_process(
-    COMMAND "${CMAKE_COMMAND}" -E env LC_ALL=C LC_MESSAGES=C LANG=C
-            "${CMAKE_${lang}_COMPILER}" ${CCCF_COMMAND_PATTERN}
-    WORKING_DIRECTORY "${COMPILER_FLAG_DIR}"
-    OUTPUT_VARIABLE COMPILER_FLAG_OUTPUT
-    ERROR_VARIABLE COMPILER_FLAG_OUTPUT
-    RESULT_VARIABLE COMPILER_FLAG_RESULT)
-
-  # Record result in the cache so we can avoid re-testing every CMake run
-  if (COMPILER_FLAG_RESULT)
-    set(${result} FALSE CACHE INTERNAL ${comment})
-  else()
-    foreach(regex IN LISTS CCCF_FAIL_REGEX)
-      if(COMPILER_FLAG_OUTPUT MATCHES "${regex}")
-        set(${result} FALSE CACHE INTERNAL ${comment})
-      endif()
-    endforeach()
-  endif()
-  if (DEFINED ${result})
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-        "Determining if the ${flag} option "
-        "is supported for ${lang} language failed with the following output:\n"
-        "${COMPILER_FLAG_OUTPUT}\n")
-    if (CCCF_OUTPUT_VARIABLE)
-      set(${CCCF_OUTPUT_VARIABLE} "${COMPILER_FLAG_OUTPUT}" PARENT_SCOPE)
-    endif()
-    return()
-  endif()
-
-  set(${result} TRUE CACHE INTERNAL ${comment})
-endfunction()
diff --git a/share/cmake-3.18/Modules/Internal/CPack/CPack.NuGet.nuspec.in b/share/cmake-3.18/Modules/Internal/CPack/CPack.NuGet.nuspec.in
deleted file mode 100644
index b7beb5d..0000000
--- a/share/cmake-3.18/Modules/Internal/CPack/CPack.NuGet.nuspec.in
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
-    <metadata>
-        <!-- Required elements-->
-        <id>@CPACK_NUGET_PACKAGE_NAME@</id>
-        <version>@CPACK_NUGET_PACKAGE_VERSION@</version>
-        <description>@CPACK_NUGET_PACKAGE_DESCRIPTION@</description>
-        <authors>@CPACK_NUGET_PACKAGE_AUTHORS@</authors>
-
-        <!-- Optional elements -->
-        @_CPACK_NUGET_TITLE_TAG@
-        @_CPACK_NUGET_OWNERS_TAG@
-        @_CPACK_NUGET_PROJECTURL_TAG@
-        @_CPACK_NUGET_LICENSEURL_TAG@
-        @_CPACK_NUGET_ICONURL_TAG@
-        @_CPACK_NUGET_REQUIRELICENSEACCEPTANCE_TAG@
-        @_CPACK_NUGET_SUMMARY_TAG@
-        @_CPACK_NUGET_RELEASENOTES_TAG@
-        @_CPACK_NUGET_COPYRIGHT_TAG@
-        @_CPACK_NUGET_TAGS_TAG@
-        @_CPACK_NUGET_DEPENDENCIES_TAG@
-    </metadata>
-    @_CPACK_NUGET_FILES_TAG@
-</package>
diff --git a/share/cmake-3.18/Modules/Internal/CPack/CPackDeb.cmake b/share/cmake-3.18/Modules/Internal/CPack/CPackDeb.cmake
deleted file mode 100644
index db35e3a..0000000
--- a/share/cmake-3.18/Modules/Internal/CPack/CPackDeb.cmake
+++ /dev/null
@@ -1,776 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-# CPack script for creating Debian package
-# Author: Mathieu Malaterre
-#
-# http://wiki.debian.org/HowToPackageForDebian
-
-if(CMAKE_BINARY_DIR)
-  message(FATAL_ERROR "CPackDeb.cmake may only be used by CPack internally.")
-endif()
-
-cmake_policy(PUSH)
-cmake_policy(SET CMP0057 NEW) # if IN_LIST
-
-function(cpack_deb_variable_fallback OUTPUT_VAR_NAME)
-  set(FALLBACK_VAR_NAMES ${ARGN})
-
-  foreach(variable_name IN LISTS FALLBACK_VAR_NAMES)
-    if(${variable_name})
-      set(${OUTPUT_VAR_NAME} "${${variable_name}}" PARENT_SCOPE)
-      break()
-    endif()
-  endforeach()
-endfunction()
-
-function(get_component_package_name var component)
-  string(TOUPPER "${component}" component_upcase)
-  if(CPACK_DEBIAN_${component_upcase}_PACKAGE_NAME)
-    string(TOLOWER "${CPACK_DEBIAN_${component_upcase}_PACKAGE_NAME}" package_name)
-  else()
-    string(TOLOWER "${CPACK_DEBIAN_PACKAGE_NAME}-${component}" package_name)
-  endif()
-
-  set("${var}" "${package_name}" PARENT_SCOPE)
-endfunction()
-
-#extract library name and version for given shared object
-function(extract_so_info shared_object libname version)
-  if(READELF_EXECUTABLE)
-    execute_process(COMMAND "${READELF_EXECUTABLE}" -d "${shared_object}"
-      WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
-      RESULT_VARIABLE result
-      OUTPUT_VARIABLE output
-      ERROR_QUIET
-      OUTPUT_STRIP_TRAILING_WHITESPACE)
-    if(result EQUAL 0)
-      string(REGEX MATCH "\\(?SONAME\\)?[^\n]*\\[([^\n]+)\\.so\\.([^\n]*)\\]" soname "${output}")
-      set(${libname} "${CMAKE_MATCH_1}" PARENT_SCOPE)
-      set(${version} "${CMAKE_MATCH_2}" PARENT_SCOPE)
-    else()
-      message(WARNING "Error running readelf for \"${shared_object}\"")
-    endif()
-  else()
-    message(FATAL_ERROR "Readelf utility is not available.")
-  endif()
-endfunction()
-
-function(cpack_deb_check_description SUMMARY LINES RESULT_VARIABLE)
-  set(_result TRUE)
-
-  # Get the summary line
-  if(NOT SUMMARY MATCHES "^[^\\s].*$")
-    set(_result FALSE)
-    set(${RESULT_VARIABLE} ${_result} PARENT_SCOPE)
-    return()
-  endif()
-
-  foreach(_line IN LISTS LINES)
-    if(NOT _line MATCHES "^ +[^ ]+.*$")
-      set(_result FALSE)
-      break()
-    endif()
-  endforeach()
-
-  set(${RESULT_VARIABLE} ${_result} PARENT_SCOPE)
-endfunction()
-
-function(cpack_deb_format_package_description TEXT OUTPUT_VAR)
-  # Turn the possible multi-line string into a list
-  string(UUID uuid NAMESPACE 00000000-0000-0000-0000-000000000000 TYPE SHA1)
-  string(REPLACE ";" "${uuid}" _text "${TEXT}")
-  string(REPLACE "\n" ";" _lines "${_text}")
-  list(POP_FRONT _lines _summary)
-
-  # If the description ends with a newline (e.g. typically if it was read
-  # from a file) the last line will be empty. We drop it here, otherwise
-  # it would be replaced by a `.` which would lead to the package violating
-  # the extended-description-contains-empty-paragraph debian policy
-  list(POP_BACK _lines _last_line)
-  string(STRIP "${_last_line}" _last_line_strip)
-  if(_last_line_strip)
-    list(APPEND _lines "${_last_line_strip}")
-  endif()
-
-  # Check if reformatting required
-  cpack_deb_check_description("${_summary}" "${_lines}" _result)
-  if(_result)
-    # Ok, no formatting required
-    set(${OUTPUT_VAR} "${TEXT}" PARENT_SCOPE)
-    return()
-  endif()
-
-  # Format the summary line
-  string(STRIP "${_summary}" _summary)
-
-  # Make sure the rest formatted properly
-  set(_result)
-  foreach(_line IN LISTS _lines)
-    string(STRIP "${_line}" _line_strip)
-    if(NOT _line_strip)
-      # Replace empty lines w/ a _single full stop character_
-      set(_line " .")
-    else()
-      # Prepend the normal lines w/ a single space.
-      # If the line already starts w/ at least one space,
-      # it'll become _verbatim_ (assuming it supposed to be
-      # verbatim in the original text).
-      string(PREPEND _line " ")
-    endif()
-    list(APPEND _result "${_line}")
-  endforeach()
-
-  list(PREPEND _result "${_summary}")
-  list(JOIN _result "\n" _result)
-  string(REPLACE "${uuid}"  ";" _result "${_result}")
-  set(${OUTPUT_VAR} "${_result}" PARENT_SCOPE)
-endfunction()
-
-function(cpack_deb_prepare_package_vars)
-  # CPACK_DEBIAN_PACKAGE_SHLIBDEPS
-  # If specify OFF, only user depends are used
-  if(NOT DEFINED CPACK_DEBIAN_PACKAGE_SHLIBDEPS)
-    set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS OFF)
-  endif()
-
-  set(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}${CPACK_DEB_PACKAGE_COMPONENT_PART_PATH}")
-  set(DBGSYMDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}${CPACK_DEB_PACKAGE_COMPONENT_PART_PATH}-dbgsym")
-  file(REMOVE_RECURSE "${DBGSYMDIR}")
-
-  # per component automatic discover: some of the component might not have
-  # binaries.
-  if(CPACK_DEB_PACKAGE_COMPONENT)
-    string(TOUPPER "${CPACK_DEB_PACKAGE_COMPONENT}" _local_component_name)
-    set(_component_shlibdeps_var "CPACK_DEBIAN_${_local_component_name}_PACKAGE_SHLIBDEPS")
-
-    # if set, overrides the global configuration
-    if(DEFINED ${_component_shlibdeps_var})
-      set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS "${${_component_shlibdeps_var}}")
-      if(CPACK_DEBIAN_PACKAGE_DEBUG)
-        message("CPackDeb Debug: component '${CPACK_DEB_PACKAGE_COMPONENT}' dpkg-shlibdeps set to ${CPACK_DEBIAN_PACKAGE_SHLIBDEPS}")
-      endif()
-    endif()
-  endif()
-
-  cpack_deb_variable_fallback("CPACK_DEBIAN_DEBUGINFO_PACKAGE"
-    "CPACK_DEBIAN_${_local_component_name}_DEBUGINFO_PACKAGE"
-    "CPACK_DEBIAN_DEBUGINFO_PACKAGE")
-  if(CPACK_DEBIAN_PACKAGE_SHLIBDEPS OR CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS OR CPACK_DEBIAN_DEBUGINFO_PACKAGE)
-    # Generating binary list - Get type of all install files
-    file(GLOB_RECURSE FILE_PATHS_ LIST_DIRECTORIES false RELATIVE "${WDIR}" "${WDIR}/*")
-
-    find_program(FILE_EXECUTABLE file)
-    if(NOT FILE_EXECUTABLE)
-      message(FATAL_ERROR "CPackDeb: file utility is not available. CPACK_DEBIAN_PACKAGE_SHLIBDEPS and CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS options are not available.")
-    endif()
-
-    # get file info so that we can determine if file is executable or not
-    unset(CPACK_DEB_INSTALL_FILES)
-    foreach(FILE_ IN LISTS FILE_PATHS_)
-      execute_process(COMMAND ${CMAKE_COMMAND} -E env LC_ALL=C ${FILE_EXECUTABLE} "./${FILE_}"
-        WORKING_DIRECTORY "${WDIR}"
-        RESULT_VARIABLE FILE_RESULT_
-        OUTPUT_VARIABLE INSTALL_FILE_)
-      if(NOT FILE_RESULT_ EQUAL 0)
-        message(FATAL_ERROR "CPackDeb: execution of command: '${FILE_EXECUTABLE} ./${FILE_}' failed with exit code: ${FILE_RESULT_}")
-      endif()
-      list(APPEND CPACK_DEB_INSTALL_FILES "${INSTALL_FILE_}")
-    endforeach()
-
-    # Only dynamically linked ELF files are included
-    # Extract only file name infront of ":"
-    foreach(_FILE IN LISTS CPACK_DEB_INSTALL_FILES)
-      if(_FILE MATCHES "ELF.*dynamically linked")
-        string(REGEX MATCH "(^.*):" _FILE_NAME "${_FILE}")
-        list(APPEND CPACK_DEB_BINARY_FILES "${CMAKE_MATCH_1}")
-        set(CONTAINS_EXECUTABLE_FILES_ TRUE)
-      endif()
-      if(_FILE MATCHES "ELF.*shared object")
-        string(REGEX MATCH "(^.*):" _FILE_NAME "${_FILE}")
-        list(APPEND CPACK_DEB_SHARED_OBJECT_FILES "${CMAKE_MATCH_1}")
-      endif()
-      if(_FILE MATCHES "ELF.*not stripped")
-        string(REGEX MATCH "(^.*):" _FILE_NAME "${_FILE}")
-        list(APPEND CPACK_DEB_UNSTRIPPED_FILES "${CMAKE_MATCH_1}")
-      endif()
-    endforeach()
-  endif()
-
-  find_program(READELF_EXECUTABLE NAMES readelf)
-
-  if(CPACK_DEBIAN_DEBUGINFO_PACKAGE AND CPACK_DEB_UNSTRIPPED_FILES)
-    find_program(OBJCOPY_EXECUTABLE NAMES objcopy)
-
-    if(NOT OBJCOPY_EXECUTABLE)
-      message(FATAL_ERROR "debuginfo packages require the objcopy tool")
-    endif()
-    if(NOT READELF_EXECUTABLE)
-      message(FATAL_ERROR "debuginfo packages require the readelf tool")
-    endif()
-
-    file(RELATIVE_PATH _DBGSYM_ROOT "${CPACK_TEMPORARY_DIRECTORY}" "${DBGSYMDIR}")
-    foreach(_FILE IN LISTS CPACK_DEB_UNSTRIPPED_FILES)
-
-      # Get the file's Build ID
-      execute_process(COMMAND env LC_ALL=C ${READELF_EXECUTABLE} -n "${_FILE}"
-        WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
-        OUTPUT_VARIABLE READELF_OUTPUT
-        RESULT_VARIABLE READELF_RESULT
-        ERROR_VARIABLE READELF_ERROR
-        OUTPUT_STRIP_TRAILING_WHITESPACE )
-      if(NOT READELF_RESULT EQUAL 0)
-        message(FATAL_ERROR "CPackDeb: readelf: '${READELF_ERROR}';\n"
-            "executed command: '${READELF_EXECUTABLE} -n ${_FILE}'")
-      endif()
-      if(READELF_OUTPUT MATCHES "Build ID: ([0-9a-zA-Z][0-9a-zA-Z])([0-9a-zA-Z]*)")
-        set(_BUILD_ID_START ${CMAKE_MATCH_1})
-        set(_BUILD_ID_REMAINING ${CMAKE_MATCH_2})
-        list(APPEND BUILD_IDS ${_BUILD_ID_START}${_BUILD_ID_REMAINING})
-      else()
-        message(FATAL_ERROR "Unable to determine Build ID for ${_FILE}")
-      endif()
-
-      # Split out the debug symbols from the binaries
-      set(_FILE_DBGSYM ${_DBGSYM_ROOT}/usr/lib/debug/.build-id/${_BUILD_ID_START}/${_BUILD_ID_REMAINING}.debug)
-      get_filename_component(_OUT_DIR "${_FILE_DBGSYM}" DIRECTORY)
-      file(MAKE_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}/${_OUT_DIR}")
-      execute_process(COMMAND ${OBJCOPY_EXECUTABLE} --only-keep-debug "${_FILE}" "${_FILE_DBGSYM}"
-        WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
-        OUTPUT_VARIABLE OBJCOPY_OUTPUT
-        RESULT_VARIABLE OBJCOPY_RESULT
-        ERROR_VARIABLE OBJCOPY_ERROR
-        OUTPUT_STRIP_TRAILING_WHITESPACE )
-      if(NOT OBJCOPY_RESULT EQUAL 0)
-        message(FATAL_ERROR "CPackDeb: objcopy: '${OBJCOPY_ERROR}';\n"
-            "executed command: '${OBJCOPY_EXECUTABLE} --only-keep-debug ${_FILE} ${_FILE_DBGSYM}'")
-      endif()
-      execute_process(COMMAND ${OBJCOPY_EXECUTABLE} --strip-unneeded ${_FILE}
-        WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
-        OUTPUT_VARIABLE OBJCOPY_OUTPUT
-        RESULT_VARIABLE OBJCOPY_RESULT
-        ERROR_VARIABLE OBJCOPY_ERROR
-        OUTPUT_STRIP_TRAILING_WHITESPACE )
-      if(NOT OBJCOPY_RESULT EQUAL 0)
-        message(FATAL_ERROR "CPackDeb: objcopy: '${OBJCOPY_ERROR}';\n"
-            "executed command: '${OBJCOPY_EXECUTABLE} --strip-debug ${_FILE}'")
-      endif()
-      execute_process(COMMAND ${OBJCOPY_EXECUTABLE} --add-gnu-debuglink=${_FILE_DBGSYM} ${_FILE}
-        WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
-        OUTPUT_VARIABLE OBJCOPY_OUTPUT
-        RESULT_VARIABLE OBJCOPY_RESULT
-        ERROR_VARIABLE OBJCOPY_ERROR
-        OUTPUT_STRIP_TRAILING_WHITESPACE )
-      if(NOT OBJCOPY_RESULT EQUAL 0)
-        message(FATAL_ERROR "CPackDeb: objcopy: '${OBJCOPY_ERROR}';\n"
-            "executed command: '${OBJCOPY_EXECUTABLE} --add-gnu-debuglink=${_FILE_DBGSYM} ${_FILE}'")
-      endif()
-    endforeach()
-  endif()
-
-  if(CPACK_DEBIAN_PACKAGE_SHLIBDEPS)
-    # dpkg-shlibdeps is a Debian utility for generating dependency list
-    find_program(SHLIBDEPS_EXECUTABLE dpkg-shlibdeps)
-
-    if(SHLIBDEPS_EXECUTABLE)
-      # Check version of the dpkg-shlibdeps tool using CPackDEB method
-      execute_process(COMMAND ${CMAKE_COMMAND} -E env LC_ALL=C ${SHLIBDEPS_EXECUTABLE} --version
-        OUTPUT_VARIABLE _TMP_VERSION
-        ERROR_QUIET
-        OUTPUT_STRIP_TRAILING_WHITESPACE)
-      if(_TMP_VERSION MATCHES "dpkg-shlibdeps version ([0-9]+\\.[0-9]+\\.[0-9]+)")
-        set(SHLIBDEPS_EXECUTABLE_VERSION "${CMAKE_MATCH_1}")
-      else()
-        unset(SHLIBDEPS_EXECUTABLE_VERSION)
-      endif()
-
-      if(CPACK_DEBIAN_PACKAGE_DEBUG)
-        message("CPackDeb Debug: dpkg-shlibdeps --version output is '${_TMP_VERSION}'")
-        message("CPackDeb Debug: dpkg-shlibdeps version is <${SHLIBDEPS_EXECUTABLE_VERSION}>")
-      endif()
-
-      if(CONTAINS_EXECUTABLE_FILES_)
-        message("CPackDeb: - Generating dependency list")
-
-        # Create blank control file for running dpkg-shlibdeps
-        # There might be some other way to invoke dpkg-shlibdeps without creating this file
-        # but standard debian package should not have anything that can collide with this file or directory
-        file(MAKE_DIRECTORY ${CPACK_TEMPORARY_DIRECTORY}/debian)
-        file(WRITE ${CPACK_TEMPORARY_DIRECTORY}/debian/control "")
-
-        # Create a DEBIAN directory so that dpkg-shlibdeps can find the package dir when resolving $ORIGIN.
-        file(MAKE_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}/DEBIAN")
-
-        # Add --ignore-missing-info if the tool supports it
-        execute_process(COMMAND ${CMAKE_COMMAND} -E env LC_ALL=C ${SHLIBDEPS_EXECUTABLE} --help
-          OUTPUT_VARIABLE _TMP_HELP
-          ERROR_QUIET
-          OUTPUT_STRIP_TRAILING_WHITESPACE)
-        if(_TMP_HELP MATCHES "--ignore-missing-info")
-          set(IGNORE_MISSING_INFO_FLAG "--ignore-missing-info")
-        endif()
-
-        # Execute dpkg-shlibdeps
-        # --ignore-missing-info : allow dpkg-shlibdeps to run even if some libs do not belong to a package
-        # -O : print to STDOUT
-        execute_process(COMMAND ${SHLIBDEPS_EXECUTABLE} ${IGNORE_MISSING_INFO_FLAG} -O ${CPACK_DEB_BINARY_FILES}
-          WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
-          OUTPUT_VARIABLE SHLIBDEPS_OUTPUT
-          RESULT_VARIABLE SHLIBDEPS_RESULT
-          ERROR_VARIABLE SHLIBDEPS_ERROR
-          OUTPUT_STRIP_TRAILING_WHITESPACE )
-        if(CPACK_DEBIAN_PACKAGE_DEBUG)
-          # dpkg-shlibdeps will throw some warnings if some input files are not binary
-          message( "CPackDeb Debug: dpkg-shlibdeps warnings \n${SHLIBDEPS_ERROR}")
-        endif()
-        if(NOT SHLIBDEPS_RESULT EQUAL 0)
-          message(FATAL_ERROR "CPackDeb: dpkg-shlibdeps: '${SHLIBDEPS_ERROR}';\n"
-              "executed command: '${SHLIBDEPS_EXECUTABLE} ${IGNORE_MISSING_INFO_FLAG} -O ${CPACK_DEB_BINARY_FILES}';\n"
-              "found files: '${INSTALL_FILE_}';\n"
-              "files info: '${CPACK_DEB_INSTALL_FILES}';\n"
-              "binary files: '${CPACK_DEB_BINARY_FILES}'")
-        endif()
-
-        #Get rid of prefix generated by dpkg-shlibdeps
-        string(REGEX REPLACE "^.*Depends=" "" CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS "${SHLIBDEPS_OUTPUT}")
-
-        if(CPACK_DEBIAN_PACKAGE_DEBUG)
-          message("CPackDeb Debug: Found dependency: ${CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS} from output ${SHLIBDEPS_OUTPUT}")
-        endif()
-
-        # Remove blank control file
-        # Might not be safe if package actual contain file or directory named debian
-        file(REMOVE_RECURSE "${CPACK_TEMPORARY_DIRECTORY}/debian")
-
-        # remove temporary directory that was created only for dpkg-shlibdeps execution
-        file(REMOVE_RECURSE "${CPACK_TEMPORARY_DIRECTORY}/DEBIAN")
-      else()
-        if(CPACK_DEBIAN_PACKAGE_DEBUG)
-          message(AUTHOR_WARNING "CPackDeb Debug: Using only user-provided depends because package does not contain executable files that link to shared libraries.")
-        endif()
-      endif()
-    else()
-      message("CPackDeb: Using only user-provided dependencies because dpkg-shlibdeps is not found.")
-    endif()
-
-  else()
-    if(CPACK_DEBIAN_PACKAGE_DEBUG)
-      message("CPackDeb Debug: Using only user-provided dependencies")
-    endif()
-  endif()
-
-  # Let's define the control file found in debian package:
-
-  # Binary package:
-  # http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-binarycontrolfiles
-
-  # DEBIAN/control
-  # debian policy enforce lower case for package name
-  # Package: (mandatory)
-  if(NOT CPACK_DEBIAN_PACKAGE_NAME)
-    string(TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_DEBIAN_PACKAGE_NAME)
-  endif()
-
-  # Version: (mandatory)
-  if(NOT CPACK_DEBIAN_PACKAGE_VERSION)
-    if(NOT CPACK_PACKAGE_VERSION)
-      message(FATAL_ERROR "CPackDeb: Debian package requires a package version")
-    endif()
-    set(CPACK_DEBIAN_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION})
-  endif()
-
-  if(DEFINED CPACK_DEBIAN_PACKAGE_RELEASE OR DEFINED CPACK_DEBIAN_PACKAGE_EPOCH)
-    # only test the version format if CPACK_DEBIAN_PACKAGE_RELEASE or
-    # CPACK_DEBIAN_PACKAGE_EPOCH is set
-    if(NOT CPACK_DEBIAN_PACKAGE_VERSION MATCHES "^[0-9][A-Za-z0-9.+~-]*$")
-      message(FATAL_ERROR
-        "CPackDeb: Debian package version must confirm to \"^[0-9][A-Za-z0-9.+~-]*$\" regex!")
-    endif()
-  else()
-    # before CMake 3.10 version format was not tested so only warn to preserve
-    # backward compatibility
-    if(NOT CPACK_DEBIAN_PACKAGE_VERSION MATCHES "^([0-9]+:)?[0-9][A-Za-z0-9.+~-]*$")
-      message(AUTHOR_WARNING
-        "CPackDeb: Debian package versioning ([<epoch>:]<version>[-<release>])"
-        " should confirm to \"^([0-9]+:)?[0-9][A-Za-z0-9.+~-]*$\" regex in"
-        " order to satisfy Debian packaging rules.")
-    endif()
-  endif()
-
-  if(CPACK_DEBIAN_PACKAGE_RELEASE)
-    if(NOT CPACK_DEBIAN_PACKAGE_RELEASE MATCHES "^[A-Za-z0-9.+~]+$")
-      message(FATAL_ERROR
-        "CPackDeb: Debian package release must confirm to \"^[A-Za-z0-9.+~]+$\" regex!")
-    endif()
-    string(APPEND CPACK_DEBIAN_PACKAGE_VERSION
-      "-${CPACK_DEBIAN_PACKAGE_RELEASE}")
-  elseif(DEFINED CPACK_DEBIAN_PACKAGE_EPOCH)
-    # only test the version format if CPACK_DEBIAN_PACKAGE_RELEASE or
-    # CPACK_DEBIAN_PACKAGE_EPOCH is set - versions CPack/Deb generator before
-    # CMake 3.10 did not check for version format so we have to preserve
-    # backward compatibility
-    if(CPACK_DEBIAN_PACKAGE_VERSION MATCHES ".*-.*")
-      message(FATAL_ERROR
-        "CPackDeb: Debian package version must not contain hyphens when CPACK_DEBIAN_PACKAGE_RELEASE is not provided!")
-    endif()
-  endif()
-
-  if(CPACK_DEBIAN_PACKAGE_EPOCH)
-    if(NOT CPACK_DEBIAN_PACKAGE_EPOCH MATCHES "^[0-9]+$")
-      message(FATAL_ERROR
-        "CPackDeb: Debian package epoch must confirm to \"^[0-9]+$\" regex!")
-    endif()
-    set(CPACK_DEBIAN_PACKAGE_VERSION
-      "${CPACK_DEBIAN_PACKAGE_EPOCH}:${CPACK_DEBIAN_PACKAGE_VERSION}")
-  endif()
-
-  # Architecture: (mandatory)
-  if(CPACK_DEB_PACKAGE_COMPONENT AND CPACK_DEBIAN_${_local_component_name}_PACKAGE_ARCHITECTURE)
-    set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "${CPACK_DEBIAN_${_local_component_name}_PACKAGE_ARCHITECTURE}")
-  elseif(NOT CPACK_DEBIAN_PACKAGE_ARCHITECTURE)
-    # There is no such thing as i686 architecture on debian, you should use i386 instead
-    # $ dpkg --print-architecture
-    find_program(DPKG_CMD dpkg)
-    if(NOT DPKG_CMD)
-      message(STATUS "CPackDeb: Can not find dpkg in your path, default to i386.")
-      set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE i386)
-    endif()
-    execute_process(COMMAND "${DPKG_CMD}" --print-architecture
-      OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE
-      OUTPUT_STRIP_TRAILING_WHITESPACE
-      )
-  endif()
-
-  # Source: (optional)
-  # in case several packages are constructed from a unique source
-  # (multipackaging), the source may be indicated as well.
-  # The source might contain a version if the generated package
-  # version is different from the source version
-  if(NOT CPACK_DEBIAN_PACKAGE_SOURCE)
-    set(CPACK_DEBIAN_PACKAGE_SOURCE "")
-  endif()
-
-  # have a look at get_property(result GLOBAL PROPERTY ENABLED_FEATURES),
-  # this returns the successful find_package() calls, maybe this can help
-  # Depends:
-  # You should set: DEBIAN_PACKAGE_DEPENDS
-  # TODO: automate 'objdump -p | grep NEEDED'
-
-  # if per-component variable, overrides the global CPACK_DEBIAN_PACKAGE_${variable_type_}
-  # automatic dependency discovery will be performed afterwards.
-  if(CPACK_DEB_PACKAGE_COMPONENT)
-    foreach(value_type_ IN ITEMS DEPENDS RECOMMENDS SUGGESTS PREDEPENDS ENHANCES BREAKS CONFLICTS PROVIDES REPLACES SOURCE SECTION PRIORITY NAME)
-      set(_component_var "CPACK_DEBIAN_${_local_component_name}_PACKAGE_${value_type_}")
-
-      # if set, overrides the global variable
-      if(DEFINED ${_component_var})
-        set(CPACK_DEBIAN_PACKAGE_${value_type_} "${${_component_var}}")
-        if(CPACK_DEBIAN_PACKAGE_DEBUG)
-          message("CPackDeb Debug: component '${_local_component_name}' ${value_type_} "
-            "value set to '${CPACK_DEBIAN_PACKAGE_${value_type_}}'")
-        endif()
-      endif()
-    endforeach()
-
-    if(CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS)
-      unset(COMPONENT_DEPENDS)
-      foreach(_PACK IN LISTS CPACK_COMPONENT_${_local_component_name}_DEPENDS)
-        get_component_package_name(_PACK_NAME "${_PACK}")
-        list(PREPEND COMPONENT_DEPENDS "${_PACK_NAME} (= ${CPACK_DEBIAN_PACKAGE_VERSION})")
-      endforeach()
-      list(JOIN COMPONENT_DEPENDS ", " COMPONENT_DEPENDS)
-      if(COMPONENT_DEPENDS)
-        list(PREPEND CPACK_DEBIAN_PACKAGE_DEPENDS ${COMPONENT_DEPENDS})
-        list(JOIN CPACK_DEBIAN_PACKAGE_DEPENDS ", " CPACK_DEBIAN_PACKAGE_DEPENDS)
-      endif()
-    endif()
-  endif()
-
-  # at this point, the CPACK_DEBIAN_PACKAGE_DEPENDS is properly set
-  # to the minimal dependency of the package
-  # Append automatically discovered dependencies .
-  if(CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS)
-    list(APPEND CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS})
-    list(JOIN CPACK_DEBIAN_PACKAGE_DEPENDS ", " CPACK_DEBIAN_PACKAGE_DEPENDS)
-  endif()
-
-  if(NOT CPACK_DEBIAN_PACKAGE_DEPENDS)
-    message(STATUS "CPACK_DEBIAN_PACKAGE_DEPENDS not set, the package will have no dependencies.")
-  endif()
-
-  # Maintainer: (mandatory)
-  if(NOT CPACK_DEBIAN_PACKAGE_MAINTAINER)
-    if(NOT CPACK_PACKAGE_CONTACT)
-      message(FATAL_ERROR "CPackDeb: Debian package requires a maintainer for a package, set CPACK_PACKAGE_CONTACT or CPACK_DEBIAN_PACKAGE_MAINTAINER")
-    endif()
-    set(CPACK_DEBIAN_PACKAGE_MAINTAINER ${CPACK_PACKAGE_CONTACT})
-  endif()
-
-  # Description: (mandatory)
-  # Try package description first
-  if(CPACK_USED_DEFAULT_PACKAGE_DESCRIPTION_FILE)
-    set(_desc_fallback)
-  else()
-    set(_desc_fallback "CPACK_PACKAGE_DESCRIPTION")
-  endif()
-  if(CPACK_DEB_PACKAGE_COMPONENT)
-    cpack_deb_variable_fallback("CPACK_DEBIAN_PACKAGE_DESCRIPTION"
-      "CPACK_DEBIAN_${_local_component_name}_DESCRIPTION"
-      "CPACK_COMPONENT_${_local_component_name}_DESCRIPTION")
-  else()
-    cpack_deb_variable_fallback("CPACK_DEBIAN_PACKAGE_DESCRIPTION"
-      "CPACK_DEBIAN_PACKAGE_DESCRIPTION"
-      ${_desc_fallback})
-  endif()
-
-  # Still no description? ... and description file has set ...
-  if(NOT CPACK_DEBIAN_PACKAGE_DESCRIPTION
-     AND CPACK_PACKAGE_DESCRIPTION_FILE
-     AND NOT CPACK_PACKAGE_DESCRIPTION_FILE STREQUAL CPACK_DEFAULT_PACKAGE_DESCRIPTION_FILE)
-    # Read `CPACK_PACKAGE_DESCRIPTION_FILE` then...
-    file(READ ${CPACK_PACKAGE_DESCRIPTION_FILE} CPACK_DEBIAN_PACKAGE_DESCRIPTION)
-  endif()
-
-  # Still no description? #2
-  if(NOT CPACK_DEBIAN_PACKAGE_DESCRIPTION)
-    # Try to get `CPACK_PACKAGE_DESCRIPTION_SUMMARY` as the last hope
-    if(CPACK_PACKAGE_DESCRIPTION_SUMMARY)
-      set(CPACK_DEBIAN_PACKAGE_DESCRIPTION ${CPACK_PACKAGE_DESCRIPTION_SUMMARY})
-    else()
-      # Giving up! Report an error...
-      set(_description_failure_message
-        "CPackDeb: Debian package requires a summary for a package, set CPACK_PACKAGE_DESCRIPTION_SUMMARY or CPACK_DEBIAN_PACKAGE_DESCRIPTION")
-      if(CPACK_DEB_PACKAGE_COMPONENT)
-        string(APPEND _description_failure_message
-          " or CPACK_DEBIAN_${_local_component_name}_DESCRIPTION")
-      endif()
-      message(FATAL_ERROR _description_failure_message)
-    endif()
-
-  # Ok, description has set. According to the `Debian Policy Manual`_ the frist
-  # line is a pacakge summary.  Try to get it as well...
-  # See also: https://www.debian.org/doc/debian-policy/ch-controlfields.html#description
-  elseif(CPACK_PACKAGE_DESCRIPTION_SUMMARY AND
-         NOT CPACK_PACKAGE_DESCRIPTION_SUMMARY STREQUAL CPACK_DEFAULT_PACKAGE_DESCRIPTION_SUMMARY)
-    # Merge summary w/ the detailed description
-    string(PREPEND CPACK_DEBIAN_PACKAGE_DESCRIPTION "${CPACK_PACKAGE_DESCRIPTION_SUMMARY}\n")
-  endif()
-  # assert(CPACK_DEBIAN_PACKAGE_DESCRIPTION)
-
-  # Make sure description is properly formatted
-  cpack_deb_format_package_description(
-    "${CPACK_DEBIAN_PACKAGE_DESCRIPTION}"
-    CPACK_DEBIAN_PACKAGE_DESCRIPTION
-  )
-
-  # Homepage: (optional)
-  if(NOT CPACK_DEBIAN_PACKAGE_HOMEPAGE AND CPACK_PACKAGE_HOMEPAGE_URL)
-    set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "${CPACK_PACKAGE_HOMEPAGE_URL}")
-  endif()
-
-  # Section: (recommended)
-  if(NOT CPACK_DEBIAN_PACKAGE_SECTION)
-    set(CPACK_DEBIAN_PACKAGE_SECTION "devel")
-  endif()
-
-  # Priority: (recommended)
-  if(NOT CPACK_DEBIAN_PACKAGE_PRIORITY)
-    set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
-  endif()
-
-  if(CPACK_DEBIAN_ARCHIVE_TYPE)
-    if(CPACK_DEBIAN_ARCHIVE_TYPE STREQUAL "paxr")
-      message(DEPRECATION "CPACK_DEBIAN_ARCHIVE_TYPE set to old and invalid "
-        "type 'paxr', mapping to 'gnutar'")
-      set(CPACK_DEBIAN_ARCHIVE_TYPE "gnutar")
-    elseif(NOT CPACK_DEBIAN_ARCHIVE_TYPE STREQUAL "gnutar")
-      message(FATAL_ERROR "CPACK_DEBIAN_ARCHIVE_TYPE set to unsupported"
-        "type ${CPACK_DEBIAN_ARCHIVE_TYPE}")
-    endif()
-  else()
-    set(CPACK_DEBIAN_ARCHIVE_TYPE "gnutar")
-  endif()
-
-  # Compression: (recommended)
-  if(NOT CPACK_DEBIAN_COMPRESSION_TYPE)
-    set(CPACK_DEBIAN_COMPRESSION_TYPE "gzip")
-  endif()
-
-  # Recommends:
-  # You should set: CPACK_DEBIAN_PACKAGE_RECOMMENDS
-
-  # Suggests:
-  # You should set: CPACK_DEBIAN_PACKAGE_SUGGESTS
-
-  # CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
-  # This variable allow advanced user to add custom script to the control.tar.gz (inside the .deb archive)
-  # Typical examples are:
-  # - conffiles
-  # - postinst
-  # - postrm
-  # - prerm
-  # Usage:
-  # set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
-  #    "${CMAKE_CURRENT_SOURCE_DIR}/prerm;${CMAKE_CURRENT_SOURCE_DIR}/postrm")
-
-  # Are we packaging components ?
-  if(CPACK_DEB_PACKAGE_COMPONENT)
-    # override values with per component version if set
-    foreach(VAR_NAME_ IN ITEMS PACKAGE_CONTROL_EXTRA PACKAGE_CONTROL_STRICT_PERMISSION)
-      if(CPACK_DEBIAN_${_local_component_name}_${VAR_NAME_})
-        set(CPACK_DEBIAN_${VAR_NAME_} "${CPACK_DEBIAN_${_local_component_name}_${VAR_NAME_}}")
-      endif()
-    endforeach()
-    get_component_package_name(CPACK_DEBIAN_PACKAGE_NAME ${_local_component_name})
-  endif()
-
-  if(NOT CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY)
-    set(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY "=")
-  endif()
-
-  unset(CPACK_DEBIAN_PACKAGE_SHLIBS_LIST)
-
-  if(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS)
-    if(READELF_EXECUTABLE)
-      foreach(_FILE IN LISTS CPACK_DEB_SHARED_OBJECT_FILES)
-        extract_so_info("${_FILE}" libname soversion)
-        if(libname AND DEFINED soversion)
-          list(APPEND CPACK_DEBIAN_PACKAGE_SHLIBS_LIST
-               "${libname} ${soversion} ${CPACK_DEBIAN_PACKAGE_NAME} (${CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY} ${CPACK_DEBIAN_PACKAGE_VERSION})")
-        else()
-          message(AUTHOR_WARNING "Shared library '${_FILE}' is missing soname or soversion. Library will not be added to DEBIAN/shlibs control file.")
-        endif()
-      endforeach()
-      list(JOIN CPACK_DEBIAN_PACKAGE_SHLIBS_LIST "\n" CPACK_DEBIAN_PACKAGE_SHLIBS_LIST)
-    else()
-      message(FATAL_ERROR "Readelf utility is not available. CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS option is not available.")
-    endif()
-  endif()
-
-  # add ldconfig call in default postrm and postint
-  set(CPACK_ADD_LDCONFIG_CALL 0)
-  foreach(_FILE IN LISTS CPACK_DEB_SHARED_OBJECT_FILES)
-    get_filename_component(_DIR ${_FILE} DIRECTORY)
-    # all files in CPACK_DEB_SHARED_OBJECT_FILES have dot at the beginning
-    if(_DIR STREQUAL "./lib" OR _DIR STREQUAL "./usr/lib")
-      set(CPACK_ADD_LDCONFIG_CALL 1)
-    endif()
-  endforeach()
-
-  if(CPACK_ADD_LDCONFIG_CALL)
-    set(CPACK_DEBIAN_GENERATE_POSTINST 1)
-    set(CPACK_DEBIAN_GENERATE_POSTRM 1)
-    foreach(f IN LISTS PACKAGE_CONTROL_EXTRA)
-      get_filename_component(n "${f}" NAME)
-      if(n STREQUAL "postinst")
-        set(CPACK_DEBIAN_GENERATE_POSTINST 0)
-      endif()
-      if(n STREQUAL "postrm")
-        set(CPACK_DEBIAN_GENERATE_POSTRM 0)
-      endif()
-    endforeach()
-  else()
-    set(CPACK_DEBIAN_GENERATE_POSTINST 0)
-    set(CPACK_DEBIAN_GENERATE_POSTRM 0)
-  endif()
-
-  cpack_deb_variable_fallback("CPACK_DEBIAN_FILE_NAME"
-    "CPACK_DEBIAN_${_local_component_name}_FILE_NAME"
-    "CPACK_DEBIAN_FILE_NAME")
-  if(CPACK_DEBIAN_FILE_NAME)
-    if(CPACK_DEBIAN_FILE_NAME STREQUAL "DEB-DEFAULT")
-      # Patch package file name to be in correct debian format:
-      # <foo>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb
-      set(CPACK_OUTPUT_FILE_NAME
-        "${CPACK_DEBIAN_PACKAGE_NAME}_${CPACK_DEBIAN_PACKAGE_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb")
-      set(CPACK_DBGSYM_OUTPUT_FILE_NAME
-        "${CPACK_DEBIAN_PACKAGE_NAME}-dbgsym_${CPACK_DEBIAN_PACKAGE_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.ddeb")
-    else()
-      if(NOT CPACK_DEBIAN_FILE_NAME MATCHES ".*\\.(deb|ipk)")
-        message(FATAL_ERROR "'${CPACK_DEBIAN_FILE_NAME}' is not a valid DEB package file name as it must end with '.deb' or '.ipk'!")
-      endif()
-
-      set(CPACK_OUTPUT_FILE_NAME "${CPACK_DEBIAN_FILE_NAME}")
-      string(REGEX REPLACE "\.deb$" "-dbgsym.ddeb" CPACK_DBGSYM_OUTPUT_FILE_NAME "${CPACK_DEBIAN_FILE_NAME}")
-    endif()
-
-    set(CPACK_TEMPORARY_PACKAGE_FILE_NAME "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_OUTPUT_FILE_NAME}")
-    get_filename_component(BINARY_DIR "${CPACK_OUTPUT_FILE_PATH}" DIRECTORY)
-    set(CPACK_OUTPUT_FILE_PATH "${BINARY_DIR}/${CPACK_OUTPUT_FILE_NAME}")
-  else()
-    # back compatibility - don't change the name
-    string(REGEX REPLACE "\.deb$" "-dbgsym.ddeb" CPACK_DBGSYM_OUTPUT_FILE_NAME "${CPACK_OUTPUT_FILE_NAME}")
-  endif()
-
-  # Print out some debug information if we were asked for that
-  if(CPACK_DEBIAN_PACKAGE_DEBUG)
-     message("CPackDeb:Debug: CPACK_TOPLEVEL_DIRECTORY          = '${CPACK_TOPLEVEL_DIRECTORY}'")
-     message("CPackDeb:Debug: CPACK_TOPLEVEL_TAG                = '${CPACK_TOPLEVEL_TAG}'")
-     message("CPackDeb:Debug: CPACK_TEMPORARY_DIRECTORY         = '${CPACK_TEMPORARY_DIRECTORY}'")
-     message("CPackDeb:Debug: CPACK_OUTPUT_FILE_NAME            = '${CPACK_OUTPUT_FILE_NAME}'")
-     message("CPackDeb:Debug: CPACK_OUTPUT_FILE_PATH            = '${CPACK_OUTPUT_FILE_PATH}'")
-     message("CPackDeb:Debug: CPACK_PACKAGE_FILE_NAME           = '${CPACK_PACKAGE_FILE_NAME}'")
-     message("CPackDeb:Debug: CPACK_PACKAGE_INSTALL_DIRECTORY   = '${CPACK_PACKAGE_INSTALL_DIRECTORY}'")
-     message("CPackDeb:Debug: CPACK_TEMPORARY_PACKAGE_FILE_NAME = '${CPACK_TEMPORARY_PACKAGE_FILE_NAME}'")
-     message("CPackDeb:Debug: CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION = '${CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION}'")
-     message("CPackDeb:Debug: CPACK_DEBIAN_PACKAGE_SOURCE       = '${CPACK_DEBIAN_PACKAGE_SOURCE}'")
-  endif()
-
-  # For debian source packages:
-  # debian/control
-  # http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-sourcecontrolfiles
-
-  # .dsc
-  # http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-debiansourcecontrolfiles
-
-  # Builds-Depends:
-  #if(NOT CPACK_DEBIAN_PACKAGE_BUILDS_DEPENDS)
-  #  set(CPACK_DEBIAN_PACKAGE_BUILDS_DEPENDS
-  #    "debhelper (>> 5.0.0), libncurses5-dev, tcl8.4"
-  #  )
-  #endif()
-
-  # move variables to parent scope so that they may be used to create debian package
-  set(GEN_CPACK_OUTPUT_FILE_NAME "${CPACK_OUTPUT_FILE_NAME}" PARENT_SCOPE)
-  set(GEN_CPACK_TEMPORARY_PACKAGE_FILE_NAME "${CPACK_TEMPORARY_PACKAGE_FILE_NAME}" PARENT_SCOPE)
-  set(GEN_CPACK_DEBIAN_PACKAGE_NAME "${CPACK_DEBIAN_PACKAGE_NAME}" PARENT_SCOPE)
-  set(GEN_CPACK_DEBIAN_PACKAGE_VERSION "${CPACK_DEBIAN_PACKAGE_VERSION}" PARENT_SCOPE)
-  set(GEN_CPACK_DEBIAN_PACKAGE_SECTION "${CPACK_DEBIAN_PACKAGE_SECTION}" PARENT_SCOPE)
-  set(GEN_CPACK_DEBIAN_PACKAGE_PRIORITY "${CPACK_DEBIAN_PACKAGE_PRIORITY}" PARENT_SCOPE)
-  set(GEN_CPACK_DEBIAN_PACKAGE_ARCHITECTURE "${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}" PARENT_SCOPE)
-  set(GEN_CPACK_DEBIAN_PACKAGE_MAINTAINER "${CPACK_DEBIAN_PACKAGE_MAINTAINER}" PARENT_SCOPE)
-  set(GEN_CPACK_DEBIAN_PACKAGE_DESCRIPTION "${CPACK_DEBIAN_PACKAGE_DESCRIPTION}" PARENT_SCOPE)
-  set(GEN_CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}" PARENT_SCOPE)
-  set(GEN_CPACK_DEBIAN_ARCHIVE_TYPE "${CPACK_DEBIAN_ARCHIVE_TYPE}" PARENT_SCOPE)
-  set(GEN_CPACK_DEBIAN_COMPRESSION_TYPE "${CPACK_DEBIAN_COMPRESSION_TYPE}" PARENT_SCOPE)
-  set(GEN_CPACK_DEBIAN_PACKAGE_RECOMMENDS "${CPACK_DEBIAN_PACKAGE_RECOMMENDS}" PARENT_SCOPE)
-  set(GEN_CPACK_DEBIAN_PACKAGE_SUGGESTS "${CPACK_DEBIAN_PACKAGE_SUGGESTS}" PARENT_SCOPE)
-  set(GEN_CPACK_DEBIAN_PACKAGE_HOMEPAGE "${CPACK_DEBIAN_PACKAGE_HOMEPAGE}" PARENT_SCOPE)
-  set(GEN_CPACK_DEBIAN_PACKAGE_PREDEPENDS "${CPACK_DEBIAN_PACKAGE_PREDEPENDS}" PARENT_SCOPE)
-  set(GEN_CPACK_DEBIAN_PACKAGE_ENHANCES "${CPACK_DEBIAN_PACKAGE_ENHANCES}" PARENT_SCOPE)
-  set(GEN_CPACK_DEBIAN_PACKAGE_BREAKS "${CPACK_DEBIAN_PACKAGE_BREAKS}" PARENT_SCOPE)
-  set(GEN_CPACK_DEBIAN_PACKAGE_CONFLICTS "${CPACK_DEBIAN_PACKAGE_CONFLICTS}" PARENT_SCOPE)
-  set(GEN_CPACK_DEBIAN_PACKAGE_PROVIDES "${CPACK_DEBIAN_PACKAGE_PROVIDES}" PARENT_SCOPE)
-  set(GEN_CPACK_DEBIAN_PACKAGE_REPLACES "${CPACK_DEBIAN_PACKAGE_REPLACES}" PARENT_SCOPE)
-  set(GEN_CPACK_DEBIAN_PACKAGE_SHLIBS "${CPACK_DEBIAN_PACKAGE_SHLIBS_LIST}" PARENT_SCOPE)
-  set(GEN_CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA}" PARENT_SCOPE)
-  set(GEN_CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION
-      "${CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION}" PARENT_SCOPE)
-  set(GEN_CPACK_DEBIAN_PACKAGE_SOURCE
-     "${CPACK_DEBIAN_PACKAGE_SOURCE}" PARENT_SCOPE)
-  set(GEN_CPACK_DEBIAN_GENERATE_POSTINST "${CPACK_DEBIAN_GENERATE_POSTINST}" PARENT_SCOPE)
-  set(GEN_CPACK_DEBIAN_GENERATE_POSTRM "${CPACK_DEBIAN_GENERATE_POSTRM}" PARENT_SCOPE)
-  set(GEN_WDIR "${WDIR}" PARENT_SCOPE)
-
-  set(GEN_CPACK_DEBIAN_DEBUGINFO_PACKAGE "${CPACK_DEBIAN_DEBUGINFO_PACKAGE}" PARENT_SCOPE)
-  if(BUILD_IDS)
-    set(GEN_DBGSYMDIR "${DBGSYMDIR}" PARENT_SCOPE)
-    set(GEN_CPACK_DBGSYM_OUTPUT_FILE_NAME "${CPACK_DBGSYM_OUTPUT_FILE_NAME}" PARENT_SCOPE)
-    list(JOIN BUILD_IDS " " BUILD_IDS)
-    set(GEN_BUILD_IDS "${BUILD_IDS}" PARENT_SCOPE)
-  endif()
-endfunction()
-
-cpack_deb_prepare_package_vars()
-
-cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/Internal/CPack/CPackNuGet.cmake b/share/cmake-3.18/Modules/Internal/CPack/CPackNuGet.cmake
deleted file mode 100644
index 20eed2e..0000000
--- a/share/cmake-3.18/Modules/Internal/CPack/CPackNuGet.cmake
+++ /dev/null
@@ -1,370 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-# Author: Alex Turbov
-
-if(CMAKE_BINARY_DIR)
-  message(FATAL_ERROR "CPackNuGet.cmake may only be used by CPack internally.")
-endif()
-
-function(_cpack_nuget_debug)
-    if(CPACK_NUGET_PACKAGE_DEBUG)
-        message("CPackNuGet:Debug: " ${ARGN})
-    endif()
-endfunction()
-
-function(_cpack_nuget_debug_var NAME)
-    if(CPACK_NUGET_PACKAGE_DEBUG)
-        message("CPackNuGet:Debug: ${NAME}=`${${NAME}}`")
-    endif()
-endfunction()
-
-function(_cpack_nuget_variable_fallback OUTPUT_VAR_NAME NUGET_VAR_NAME)
-    if(ARGN)
-        list(JOIN ARGN "`, `" _va_args)
-        set(_va_args ", ARGN: `${_va_args}`")
-    endif()
-    _cpack_nuget_debug(
-        "_cpack_nuget_variable_fallback: "
-        "OUTPUT_VAR_NAME=`${OUTPUT_VAR_NAME}`, "
-        "NUGET_VAR_NAME=`${NUGET_VAR_NAME}`"
-        "${_va_args}"
-      )
-
-    set(_options USE_CDATA)
-    set(_one_value_args LIST_GLUE)
-    set(_multi_value_args FALLBACK_VARS)
-    cmake_parse_arguments(PARSE_ARGV 0 _args "${_options}" "${_one_value_args}" "${_multi_value_args}")
-
-    if(CPACK_NUGET_PACKAGE_COMPONENT)
-        string(
-            TOUPPER "${CPACK_NUGET_PACKAGE_COMPONENT}"
-            CPACK_NUGET_PACKAGE_COMPONENT_UPPER
-          )
-    endif()
-
-    if(CPACK_NUGET_PACKAGE_COMPONENT
-      AND CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT}_PACKAGE_${NUGET_VAR_NAME}
-      )
-        set(
-            _result
-            "${CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT}_PACKAGE_${NUGET_VAR_NAME}}"
-          )
-        _cpack_nuget_debug(
-            "  CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT}_PACKAGE_${NUGET_VAR_NAME}: "
-            "OUTPUT_VAR_NAME->${OUTPUT_VAR_NAME}=`${_result}`"
-          )
-
-    elseif(CPACK_NUGET_PACKAGE_COMPONENT_UPPER
-      AND CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT_UPPER}_PACKAGE_${NUGET_VAR_NAME}
-      )
-        set(
-            _result
-            "${CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT_UPPER}_PACKAGE_${NUGET_VAR_NAME}}"
-          )
-        _cpack_nuget_debug(
-            "  CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT_UPPER}_PACKAGE_${NUGET_VAR_NAME}: "
-            "OUTPUT_VAR_NAME->${OUTPUT_VAR_NAME}=`${_result}`"
-          )
-
-    elseif(CPACK_NUGET_PACKAGE_${NUGET_VAR_NAME})
-        set(_result "${CPACK_NUGET_PACKAGE_${NUGET_VAR_NAME}}")
-        _cpack_nuget_debug(
-            "  CPACK_NUGET_PACKAGE_${NUGET_VAR_NAME}: "
-            "OUTPUT_VAR_NAME->${OUTPUT_VAR_NAME}=`${_result}`"
-          )
-
-    else()
-        foreach(_var IN LISTS _args_FALLBACK_VARS)
-            _cpack_nuget_debug("  Fallback: ${_var} ...")
-            if(${_var})
-                _cpack_nuget_debug("            ${_var}=`${${_var}}`")
-                set(_result "${${_var}}")
-                _cpack_nuget_debug(
-                    "  ${_var}: OUTPUT_VAR_NAME->${OUTPUT_VAR_NAME}=`${_result}`"
-                  )
-                break()
-            endif()
-        endforeach()
-    endif()
-
-    if(_result)
-        if(_args_USE_CDATA)
-            set(_value_before "<![CDATA[")
-            set(_value_after "]]>")
-        endif()
-
-        list(LENGTH _result _result_len)
-        if(_result_len GREATER 1 AND _args_LIST_GLUE)
-            list(JOIN _result "${_args_LIST_GLUE}" _result)
-        endif()
-
-        set(${OUTPUT_VAR_NAME} "${_value_before}${_result}${_value_after}" PARENT_SCOPE)
-    endif()
-
-endfunction()
-
-function(_cpack_nuget_variable_fallback_and_wrap_into_element ELEMENT NUGET_VAR_NAME)
-    set(_options)
-    set(_one_value_args)
-    set(_multi_value_args FALLBACK_VARS)
-    cmake_parse_arguments(PARSE_ARGV 0 _args "${_options}" "${_one_value_args}" "${_multi_value_args}")
-
-    _cpack_nuget_variable_fallback(_value ${NUGET_VAR_NAME} ${ARGN} USE_CDATA)
-
-    if(_value)
-        string(TOUPPER "${ELEMENT}" _ELEMENT_UP)
-        set(
-            _CPACK_NUGET_${_ELEMENT_UP}_TAG
-            "<${ELEMENT}>${_value}</${ELEMENT}>"
-            PARENT_SCOPE
-          )
-    endif()
-endfunction()
-
-# Print some debug info
-_cpack_nuget_debug("---[CPack NuGet Input Variables]---")
-_cpack_nuget_debug_var(CPACK_PACKAGE_NAME)
-_cpack_nuget_debug_var(CPACK_PACKAGE_VERSION)
-_cpack_nuget_debug_var(CPACK_TOPLEVEL_TAG)
-_cpack_nuget_debug_var(CPACK_TOPLEVEL_DIRECTORY)
-_cpack_nuget_debug_var(CPACK_TEMPORARY_DIRECTORY)
-_cpack_nuget_debug_var(CPACK_NUGET_GROUPS)
-if(CPACK_NUGET_GROUPS)
-    foreach(_group IN LISTS CPACK_NUGET_GROUPS)
-        string(MAKE_C_IDENTIFIER "${_group}" _group_up)
-        string(TOUPPER "${_group_up}" _group_up)
-        _cpack_nuget_debug_var(CPACK_NUGET_${_group_up}_GROUP_COMPONENTS)
-    endforeach()
-endif()
-_cpack_nuget_debug_var(CPACK_NUGET_COMPONENTS)
-_cpack_nuget_debug_var(CPACK_NUGET_ALL_IN_ONE)
-_cpack_nuget_debug_var(CPACK_NUGET_ORDINAL_MONOLITIC)
-_cpack_nuget_debug("-----------------------------------")
-
-function(_cpack_nuget_render_spec)
-    # Make a variable w/ upper-cased component name
-    if(CPACK_NUGET_PACKAGE_COMPONENT)
-        string(TOUPPER "${CPACK_NUGET_PACKAGE_COMPONENT}" CPACK_NUGET_PACKAGE_COMPONENT_UPPER)
-    endif()
-
-    # Set mandatory variables (not wrapped into XML elements)
-    # https://docs.microsoft.com/en-us/nuget/reference/nuspec#required-metadata-elements
-    if(CPACK_NUGET_PACKAGE_COMPONENT)
-        if(CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT_UPPER}_PACKAGE_NAME)
-            set(
-                CPACK_NUGET_PACKAGE_NAME
-                "${CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT_UPPER}_PACKAGE_NAME}"
-              )
-        elseif(NOT CPACK_NUGET_PACKAGE_COMPONENT STREQUAL "Unspecified")
-            set(
-                CPACK_NUGET_PACKAGE_NAME
-                "${CPACK_PACKAGE_NAME}.${CPACK_NUGET_PACKAGE_COMPONENT}"
-              )
-        else()
-            set(CPACK_NUGET_PACKAGE_NAME "${CPACK_PACKAGE_NAME}")
-        endif()
-    elseif(NOT CPACK_NUGET_PACKAGE_NAME)
-        set(CPACK_NUGET_PACKAGE_NAME "${CPACK_PACKAGE_NAME}")
-    endif()
-
-    _cpack_nuget_variable_fallback(
-        CPACK_NUGET_PACKAGE_VERSION VERSION
-        FALLBACK_VARS
-            CPACK_PACKAGE_VERSION
-      )
-    _cpack_nuget_variable_fallback(
-        CPACK_NUGET_PACKAGE_DESCRIPTION DESCRIPTION
-        FALLBACK_VARS
-            CPACK_COMPONENT_${CPACK_NUGET_PACKAGE_COMPONENT}_DESCRIPTION
-            CPACK_COMPONENT_${CPACK_NUGET_PACKAGE_COMPONENT_UPPER}_DESCRIPTION
-            CPACK_COMPONENT_GROUP_${CPACK_NUGET_PACKAGE_COMPONENT_UPPER}_DESCRIPTION
-            CPACK_PACKAGE_DESCRIPTION
-        USE_CDATA
-      )
-    _cpack_nuget_variable_fallback(
-        CPACK_NUGET_PACKAGE_AUTHORS AUTHORS
-        FALLBACK_VARS
-            CPACK_PACKAGE_VENDOR
-        USE_CDATA
-        LIST_GLUE ","
-      )
-
-    # Set optional variables (wrapped into XML elements)
-    # https://docs.microsoft.com/en-us/nuget/reference/nuspec#optional-metadata-elements
-    _cpack_nuget_variable_fallback_and_wrap_into_element(
-        title
-        TITLE
-        FALLBACK_VARS
-            CPACK_COMPONENT_${CPACK_NUGET_PACKAGE_COMPONENT}_DISPLAY_NAME
-            CPACK_COMPONENT_${CPACK_NUGET_PACKAGE_COMPONENT_UPPER}_DISPLAY_NAME
-            CPACK_COMPONENT_GROUP_${CPACK_NUGET_PACKAGE_COMPONENT_UPPER}_DISPLAY_NAME
-      )
-    _cpack_nuget_variable_fallback_and_wrap_into_element(owners OWNERS LIST_GLUE ",")
-    _cpack_nuget_variable_fallback_and_wrap_into_element(
-        projectUrl
-        HOMEPAGE_URL
-        FALLBACK_VARS
-            CPACK_PACKAGE_HOMEPAGE_URL
-      )
-    _cpack_nuget_variable_fallback_and_wrap_into_element(licenseUrl LICENSEURL)
-    _cpack_nuget_variable_fallback_and_wrap_into_element(iconUrl ICONURL)
-    _cpack_nuget_variable_fallback_and_wrap_into_element(
-        summary DESCRIPTION_SUMMARY
-        FALLBACK_VARS
-            CPACK_PACKAGE_DESCRIPTION_SUMMARY
-      )
-    if(CPACK_NUGET_PACKAGE_REQUIRE_LICENSE_ACCEPTANCE)
-        set(
-            _CPACK_NUGET_REQUIRELICENSEACCEPTANCE_TAG
-            "<requireLicenseAcceptance>true</requireLicenseAcceptance>"
-          )
-    endif()
-    _cpack_nuget_variable_fallback_and_wrap_into_element(releaseNotes RELEASE_NOTES)
-    _cpack_nuget_variable_fallback_and_wrap_into_element(copyright COPYRIGHT)
-    _cpack_nuget_variable_fallback_and_wrap_into_element(tags TAGS LIST_GLUE " ")
-
-    # Handle dependencies
-    _cpack_nuget_variable_fallback(_deps DEPENDENCIES)
-    set(_collected_deps)
-    foreach(_dep IN LISTS _deps)
-        _cpack_nuget_debug("  checking dependency `${_dep}`")
-
-        _cpack_nuget_variable_fallback(_ver DEPENDENCIES_${_dep}_VERSION)
-
-        if(NOT _ver)
-            string(TOUPPER "${_dep}" _dep_upper)
-            _cpack_nuget_variable_fallback(_ver DEPENDENCIES_${_dep_upper}_VERSION)
-        endif()
-
-        if(_ver)
-            _cpack_nuget_debug("  got `${_dep}` dependency version ${_ver}")
-            string(CONCAT _collected_deps "${_collected_deps}" "            <dependency id=\"${_dep}\" version=\"${_ver}\" />\n")
-        endif()
-    endforeach()
-
-    # Render deps into the variable
-    if(_collected_deps)
-        string(CONCAT _CPACK_NUGET_DEPENDENCIES_TAG "<dependencies>\n" "${_collected_deps}" "        </dependencies>")
-    endif()
-
-    # Render the spec file
-    # NOTE The spec filename doesn't matter. Being included into a package,
-    # NuGet will name it properly.
-    _cpack_nuget_debug("Rendering `${CPACK_TEMPORARY_DIRECTORY}/CPack.NuGet.nuspec` file...")
-    configure_file(
-        "${CMAKE_ROOT}/Modules/Internal/CPack/CPack.NuGet.nuspec.in"
-        "${CPACK_TEMPORARY_DIRECTORY}/CPack.NuGet.nuspec"
-        @ONLY
-      )
-endfunction()
-
-function(_cpack_nuget_make_files_tag)
-    set(_files)
-    foreach(_comp IN LISTS ARGN)
-        string(APPEND _files "        <file src=\"${_comp}\\**\" target=\".\" />\n")
-    endforeach()
-    set(_CPACK_NUGET_FILES_TAG "<files>\n${_files}    </files>" PARENT_SCOPE)
-endfunction()
-
-find_program(NUGET_EXECUTABLE nuget)
-_cpack_nuget_debug_var(NUGET_EXECUTABLE)
-if(NOT NUGET_EXECUTABLE)
-    message(FATAL_ERROR "NuGet executable not found")
-endif()
-
-# Add details for debug run
-if(CPACK_NUGET_PACKAGE_DEBUG)
-    list(APPEND CPACK_NUGET_PACK_ADDITIONAL_OPTIONS "-Verbosity" "detailed")
-endif()
-
-# Case one: ordinal all-in-one package
-if(CPACK_NUGET_ORDINAL_MONOLITIC)
-    # This variable `CPACK_NUGET_ALL_IN_ONE` set by C++ code:
-    # Meaning to pack all installed files into a single package
-    _cpack_nuget_debug("---[Making an ordinal monolitic package]---")
-    _cpack_nuget_render_spec()
-    execute_process(
-        COMMAND "${NUGET_EXECUTABLE}" pack ${CPACK_NUGET_PACK_ADDITIONAL_OPTIONS}
-        WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
-        RESULT_VARIABLE _nuget_result
-      )
-    if(NOT _nuget_result EQUAL 0)
-        message(FATAL_ERROR "Nuget pack failed")
-    endif()
-
-elseif(CPACK_NUGET_ALL_IN_ONE)
-    # This variable `CPACK_NUGET_ALL_IN_ONE` set by C++ code:
-    # Meaning to pack all installed components into a single package
-    _cpack_nuget_debug("---[Making a monolitic package from installed components]---")
-
-    # Prepare the `files` element which include files from several components
-    _cpack_nuget_make_files_tag(${CPACK_NUGET_COMPONENTS})
-    _cpack_nuget_render_spec()
-    execute_process(
-        COMMAND "${NUGET_EXECUTABLE}" pack ${CPACK_NUGET_PACK_ADDITIONAL_OPTIONS}
-        WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
-        RESULT_VARIABLE _nuget_result
-      )
-    if(NOT _nuget_result EQUAL 0)
-        message(FATAL_ERROR "Nuget pack failed")
-    endif()
-
-else()
-    # Is there any grouped component?
-    if(CPACK_NUGET_GROUPS)
-        _cpack_nuget_debug("---[Making grouped component(s) package(s)]---")
-        foreach(_group IN LISTS CPACK_NUGET_GROUPS)
-            _cpack_nuget_debug("Starting to make the package for group `${_group}`")
-            string(MAKE_C_IDENTIFIER "${_group}" _group_up)
-            string(TOUPPER "${_group_up}" _group_up)
-
-            # Render a spec file which includes all components in the current group
-            unset(_CPACK_NUGET_FILES_TAG)
-            _cpack_nuget_make_files_tag(${CPACK_NUGET_${_group_up}_GROUP_COMPONENTS})
-            # Temporary set `CPACK_NUGET_PACKAGE_COMPONENT` to the group name
-            # to properly collect various per group settings
-            set(CPACK_NUGET_PACKAGE_COMPONENT ${_group})
-            _cpack_nuget_render_spec()
-            unset(CPACK_NUGET_PACKAGE_COMPONENT)
-            execute_process(
-                COMMAND "${NUGET_EXECUTABLE}" pack ${CPACK_NUGET_PACK_ADDITIONAL_OPTIONS}
-                WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
-                RESULT_VARIABLE _nuget_result
-              )
-            if(NOT _nuget_result EQUAL 0)
-                message(FATAL_ERROR "Nuget pack failed")
-            endif()
-        endforeach()
-    endif()
-    # Is there any single component package needed?
-    if(CPACK_NUGET_COMPONENTS)
-        _cpack_nuget_debug("---[Making single-component(s) package(s)]---")
-        foreach(_comp IN LISTS CPACK_NUGET_COMPONENTS)
-            _cpack_nuget_debug("Starting to make the package for component `${_comp}`")
-            # Render a spec file which includes only given component
-            unset(_CPACK_NUGET_FILES_TAG)
-            _cpack_nuget_make_files_tag(${_comp})
-            # Temporary set `CPACK_NUGET_PACKAGE_COMPONENT` to the current
-            # component name to properly collect various per group settings
-            set(CPACK_NUGET_PACKAGE_COMPONENT ${_comp})
-            _cpack_nuget_render_spec()
-            unset(CPACK_NUGET_PACKAGE_COMPONENT)
-            execute_process(
-                COMMAND "${NUGET_EXECUTABLE}" pack ${CPACK_NUGET_PACK_ADDITIONAL_OPTIONS}
-                WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
-                RESULT_VARIABLE _nuget_result
-              )
-            if(NOT _nuget_result EQUAL 0)
-                message(FATAL_ERROR "Nuget pack failed")
-            endif()
-        endforeach()
-    endif()
-endif()
-
-file(GLOB_RECURSE GEN_CPACK_OUTPUT_FILES "${CPACK_TEMPORARY_DIRECTORY}/*.nupkg")
-if(NOT GEN_CPACK_OUTPUT_FILES)
-    message(FATAL_ERROR "NuGet package was not generated at `${CPACK_TEMPORARY_DIRECTORY}`!")
-endif()
-
-_cpack_nuget_debug("Generated files: ${GEN_CPACK_OUTPUT_FILES}")
diff --git a/share/cmake-3.18/Modules/Internal/CPack/CPackRPM.cmake b/share/cmake-3.18/Modules/Internal/CPack/CPackRPM.cmake
deleted file mode 100644
index 08bbc68..0000000
--- a/share/cmake-3.18/Modules/Internal/CPack/CPackRPM.cmake
+++ /dev/null
@@ -1,1889 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-# Author: Eric Noulard with the help of Alexander Neundorf.
-
-cmake_policy(PUSH)
-cmake_policy(SET CMP0057 NEW) # if IN_LIST
-
-function(get_file_permissions FILE RETURN_VAR)
-  execute_process(COMMAND ls -l ${FILE}
-          OUTPUT_VARIABLE permissions_
-          ERROR_QUIET
-          OUTPUT_STRIP_TRAILING_WHITESPACE)
-
-  string(REPLACE " " ";" permissions_ "${permissions_}")
-  list(GET permissions_ 0 permissions_)
-
-  unset(text_notation_)
-  set(any_chars_ ".")
-  foreach(PERMISSION_TYPE "OWNER" "GROUP" "WORLD")
-    if(permissions_ MATCHES "${any_chars_}r.*")
-      list(APPEND text_notation_ "${PERMISSION_TYPE}_READ")
-    endif()
-    string(APPEND any_chars_ ".")
-    if(permissions_ MATCHES "${any_chars_}w.*")
-      list(APPEND text_notation_ "${PERMISSION_TYPE}_WRITE")
-    endif()
-    string(APPEND any_chars_ ".")
-    if(permissions_ MATCHES "${any_chars_}x.*")
-      list(APPEND text_notation_ "${PERMISSION_TYPE}_EXECUTE")
-    endif()
-  endforeach()
-
-  set(${RETURN_VAR} "${text_notation_}" PARENT_SCOPE)
-endfunction()
-
-function(get_unix_permissions_octal_notation PERMISSIONS_VAR RETURN_VAR)
-  set(PERMISSIONS ${${PERMISSIONS_VAR}})
-  list(LENGTH PERMISSIONS PERM_LEN_PRE)
-  list(REMOVE_DUPLICATES PERMISSIONS)
-  list(LENGTH PERMISSIONS PERM_LEN_POST)
-
-  if(NOT ${PERM_LEN_PRE} EQUAL ${PERM_LEN_POST})
-    message(FATAL_ERROR "${PERMISSIONS_VAR} contains duplicate values.")
-  endif()
-
-  foreach(PERMISSION_TYPE "OWNER" "GROUP" "WORLD")
-    set(${PERMISSION_TYPE}_PERMISSIONS 0)
-
-    foreach(PERMISSION ${PERMISSIONS})
-      if("${PERMISSION}" STREQUAL "${PERMISSION_TYPE}_READ")
-        math(EXPR ${PERMISSION_TYPE}_PERMISSIONS "${${PERMISSION_TYPE}_PERMISSIONS} + 4")
-      elseif("${PERMISSION}" STREQUAL "${PERMISSION_TYPE}_WRITE")
-        math(EXPR ${PERMISSION_TYPE}_PERMISSIONS "${${PERMISSION_TYPE}_PERMISSIONS} + 2")
-      elseif("${PERMISSION}" STREQUAL "${PERMISSION_TYPE}_EXECUTE")
-        math(EXPR ${PERMISSION_TYPE}_PERMISSIONS "${${PERMISSION_TYPE}_PERMISSIONS} + 1")
-      elseif(PERMISSION MATCHES "${PERMISSION_TYPE}.*")
-        message(FATAL_ERROR "${PERMISSIONS_VAR} contains invalid values.")
-      endif()
-    endforeach()
-  endforeach()
-
-  set(${RETURN_VAR} "${OWNER_PERMISSIONS}${GROUP_PERMISSIONS}${WORLD_PERMISSIONS}" PARENT_SCOPE)
-endfunction()
-
-function(cpack_rpm_exact_regex regex_var string)
-  string(REGEX REPLACE "([][+.*()^])" "\\\\\\1" regex "${string}")
-  set("${regex_var}" "${regex}" PARENT_SCOPE)
-endfunction()
-
-function(cpack_rpm_prepare_relocation_paths)
-  # set appropriate prefix, remove possible trailing slash and convert backslashes to slashes
-  if(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_PREFIX)
-    file(TO_CMAKE_PATH "${CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_PREFIX}" PATH_PREFIX)
-  elseif(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_PACKAGE_PREFIX)
-    file(TO_CMAKE_PATH "${CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_PACKAGE_PREFIX}" PATH_PREFIX)
-  else()
-    file(TO_CMAKE_PATH "${CPACK_PACKAGING_INSTALL_PREFIX}" PATH_PREFIX)
-  endif()
-
-  set(RPM_RELOCATION_PATHS "${CPACK_RPM_RELOCATION_PATHS}")
-  list(REMOVE_DUPLICATES RPM_RELOCATION_PATHS)
-
-  # set base path prefix
-  if(EXISTS "${WDIR}/${PATH_PREFIX}")
-    if(NOT CPACK_RPM_NO_INSTALL_PREFIX_RELOCATION AND
-       NOT CPACK_RPM_NO_${CPACK_RPM_PACKAGE_COMPONENT}_INSTALL_PREFIX_RELOCATION AND
-       NOT CPACK_RPM_NO_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_INSTALL_PREFIX_RELOCATION)
-      string(APPEND TMP_RPM_PREFIXES "Prefix: ${PATH_PREFIX}\n")
-      list(APPEND RPM_USED_PACKAGE_PREFIXES "${PATH_PREFIX}")
-
-      if(CPACK_RPM_PACKAGE_DEBUG)
-        message("CPackRPM:Debug: removing '${PATH_PREFIX}' from relocation paths")
-      endif()
-    endif()
-  endif()
-
-  # set other path prefixes
-  foreach(RELOCATION_PATH ${RPM_RELOCATION_PATHS})
-    if(IS_ABSOLUTE "${RELOCATION_PATH}")
-      set(PREPARED_RELOCATION_PATH "${RELOCATION_PATH}")
-    elseif(PATH_PREFIX STREQUAL "/")
-      # don't prefix path with a second slash as "//" is treated as network path
-      # by get_filename_component() so it remains in path even inside rpm
-      # package where it may cause problems with relocation
-      set(PREPARED_RELOCATION_PATH "/${RELOCATION_PATH}")
-    else()
-      set(PREPARED_RELOCATION_PATH "${PATH_PREFIX}/${RELOCATION_PATH}")
-    endif()
-
-    # handle cases where path contains extra slashes (e.g. /a//b/ instead of
-    # /a/b)
-    get_filename_component(PREPARED_RELOCATION_PATH
-      "${PREPARED_RELOCATION_PATH}" ABSOLUTE)
-
-    if(EXISTS "${WDIR}/${PREPARED_RELOCATION_PATH}")
-      string(APPEND TMP_RPM_PREFIXES "Prefix: ${PREPARED_RELOCATION_PATH}\n")
-      list(APPEND RPM_USED_PACKAGE_PREFIXES "${PREPARED_RELOCATION_PATH}")
-    endif()
-  endforeach()
-
-  # warn about all the paths that are not relocatable
-  file(GLOB_RECURSE FILE_PATHS_ "${WDIR}/*")
-  foreach(TMP_PATH ${FILE_PATHS_})
-    string(LENGTH "${WDIR}" WDIR_LEN)
-    string(SUBSTRING "${TMP_PATH}" ${WDIR_LEN} -1 TMP_PATH)
-    unset(TMP_PATH_FOUND_)
-
-    foreach(RELOCATION_PATH ${RPM_USED_PACKAGE_PREFIXES})
-      file(RELATIVE_PATH REL_PATH_ "${RELOCATION_PATH}" "${TMP_PATH}")
-      string(SUBSTRING "${REL_PATH_}" 0 2 PREFIX_)
-
-      if(NOT "${PREFIX_}" STREQUAL "..")
-        set(TPM_PATH_FOUND_ TRUE)
-        break()
-      endif()
-    endforeach()
-
-    if(NOT TPM_PATH_FOUND_)
-      message(AUTHOR_WARNING "CPackRPM:Warning: Path ${TMP_PATH} is not on one of the relocatable paths! Package will be partially relocatable.")
-    endif()
-  endforeach()
-
-  set(RPM_USED_PACKAGE_PREFIXES "${RPM_USED_PACKAGE_PREFIXES}" PARENT_SCOPE)
-  set(TMP_RPM_PREFIXES "${TMP_RPM_PREFIXES}" PARENT_SCOPE)
-endfunction()
-
-function(cpack_rpm_prepare_content_list)
-  # get files list
-  file(GLOB_RECURSE CPACK_RPM_INSTALL_FILES LIST_DIRECTORIES true RELATIVE "${WDIR}" "${WDIR}/*")
-  set(CPACK_RPM_INSTALL_FILES "/${CPACK_RPM_INSTALL_FILES}")
-  string(REPLACE ";" ";/" CPACK_RPM_INSTALL_FILES "${CPACK_RPM_INSTALL_FILES}")
-
-  # if we are creating a relocatable package, omit parent directories of
-  # CPACK_RPM_PACKAGE_PREFIX. This is achieved by building a "filter list"
-  # which is passed to the find command that generates the content-list
-  if(CPACK_RPM_PACKAGE_RELOCATABLE)
-    # get a list of the elements in CPACK_RPM_PACKAGE_PREFIXES that are
-    # destinct parent paths of other relocation paths and remove the
-    # final element (so the install-prefix dir itself is not omitted
-    # from the RPM's content-list)
-    list(SORT RPM_USED_PACKAGE_PREFIXES)
-    set(_DISTINCT_PATH "NOT_SET")
-    foreach(_RPM_RELOCATION_PREFIX ${RPM_USED_PACKAGE_PREFIXES})
-      if(NOT "${_RPM_RELOCATION_PREFIX}" MATCHES "${_DISTINCT_PATH}/.*")
-        set(_DISTINCT_PATH "${_RPM_RELOCATION_PREFIX}")
-
-        string(REPLACE "/" ";" _CPACK_RPM_PACKAGE_PREFIX_ELEMS " ${_RPM_RELOCATION_PREFIX}")
-        list(REMOVE_AT _CPACK_RPM_PACKAGE_PREFIX_ELEMS -1)
-        unset(_TMP_LIST)
-        # Now generate all of the parent dirs of the relocation path
-        foreach(_PREFIX_PATH_ELEM ${_CPACK_RPM_PACKAGE_PREFIX_ELEMS})
-          list(APPEND _TMP_LIST "${_PREFIX_PATH_ELEM}")
-          string(REPLACE ";" "/" _OMIT_DIR "${_TMP_LIST}")
-          separate_arguments(_OMIT_DIR)
-          list(APPEND _RPM_DIRS_TO_OMIT ${_OMIT_DIR})
-        endforeach()
-      endif()
-    endforeach()
-  endif()
-
-  if(CPACK_RPM_PACKAGE_DEBUG)
-    message("CPackRPM:Debug: Initial list of path to OMIT in RPM: ${_RPM_DIRS_TO_OMIT}")
-  endif()
-
-  if(NOT DEFINED CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST)
-    set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST /etc /etc/init.d /usr /usr/bin
-        /usr/include /usr/lib /usr/libx32 /usr/lib64
-        /usr/share /usr/share/aclocal /usr/share/doc )
-    if(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION)
-      if(CPACK_RPM_PACKAGE_DEBUG)
-        message("CPackRPM:Debug: Adding ${CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION} to builtin omit list.")
-      endif()
-      list(APPEND CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST "${CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION}")
-    endif()
-  endif()
-
-  if(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST)
-    if(CPACK_RPM_PACKAGE_DEBUG)
-      message("CPackRPM:Debug: CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST= ${CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST}")
-    endif()
-    list(APPEND _RPM_DIRS_TO_OMIT ${CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST})
-  endif()
-
-  if(CPACK_RPM_PACKAGE_DEBUG)
-    message("CPackRPM:Debug: Final list of path to OMIT in RPM: ${_RPM_DIRS_TO_OMIT}")
-  endif()
-
-  list(REMOVE_ITEM CPACK_RPM_INSTALL_FILES ${_RPM_DIRS_TO_OMIT})
-
-  # add man paths that will be compressed
-  # (copied from /usr/lib/rpm/brp-compress - script that does the actual
-  # compressing)
-  list(APPEND MAN_LOCATIONS "/usr/man/man.*" "/usr/man/.*/man.*" "/usr/info.*"
-    "/usr/share/man/man.*" "/usr/share/man/.*/man.*" "/usr/share/info.*"
-    "/usr/kerberos/man.*" "/usr/X11R6/man/man.*" "/usr/lib/perl5/man/man.*"
-    "/usr/share/doc/.*/man/man.*" "/usr/lib/.*/man/man.*")
-
-  if(CPACK_RPM_ADDITIONAL_MAN_DIRS)
-    if(CPACK_RPM_PACKAGE_DEBUG)
-      message("CPackRPM:Debug: CPACK_RPM_ADDITIONAL_MAN_DIRS= ${CPACK_RPM_ADDITIONAL_MAN_DIRS}")
-    endif()
-    list(APPEND MAN_LOCATIONS ${CPACK_RPM_ADDITIONAL_MAN_DIRS})
-  endif()
-
-  foreach(PACK_LOCATION IN LISTS CPACK_RPM_INSTALL_FILES)
-    foreach(MAN_LOCATION IN LISTS MAN_LOCATIONS)
-      # man pages are files inside a certain location
-      if(PACK_LOCATION MATCHES "${MAN_LOCATION}/"
-        AND NOT IS_DIRECTORY "${WDIR}${PACK_LOCATION}"
-        AND NOT IS_SYMLINK "${WDIR}${PACK_LOCATION}")
-        list(FIND CPACK_RPM_INSTALL_FILES "${PACK_LOCATION}" INDEX)
-        # insert file location that covers compressed man pages
-        # even if using a wildcard causes duplicates as those are
-        # handled by RPM and we still keep the same file list
-        # in spec file - wildcard only represents file type (e.g. .gz)
-        list(INSERT CPACK_RPM_INSTALL_FILES ${INDEX} "${PACK_LOCATION}*")
-        # remove file location that doesn't cover compressed man pages
-        math(EXPR INDEX ${INDEX}+1)
-        list(REMOVE_AT CPACK_RPM_INSTALL_FILES ${INDEX})
-
-        break()
-      endif()
-    endforeach()
-  endforeach()
-
-  set(CPACK_RPM_INSTALL_FILES "${CPACK_RPM_INSTALL_FILES}" PARENT_SCOPE)
-endfunction()
-
-function(cpack_rpm_symlink_get_relocation_prefixes LOCATION PACKAGE_PREFIXES RETURN_VARIABLE)
-  foreach(PKG_PREFIX IN LISTS PACKAGE_PREFIXES)
-    string(REGEX MATCH "^${PKG_PREFIX}/.*" FOUND_ "${LOCATION}")
-    if(FOUND_)
-      list(APPEND TMP_PREFIXES "${PKG_PREFIX}")
-    endif()
-  endforeach()
-
-  set(${RETURN_VARIABLE} "${TMP_PREFIXES}" PARENT_SCOPE)
-endfunction()
-
-function(cpack_rpm_symlink_create_relocation_script PACKAGE_PREFIXES)
-  list(LENGTH PACKAGE_PREFIXES LAST_INDEX)
-  set(SORTED_PACKAGE_PREFIXES "${PACKAGE_PREFIXES}")
-  list(SORT SORTED_PACKAGE_PREFIXES)
-  list(REVERSE SORTED_PACKAGE_PREFIXES)
-  math(EXPR LAST_INDEX ${LAST_INDEX}-1)
-
-  foreach(SYMLINK_INDEX RANGE ${LAST_INDEX})
-    list(GET SORTED_PACKAGE_PREFIXES ${SYMLINK_INDEX} SRC_PATH)
-    list(FIND PACKAGE_PREFIXES "${SRC_PATH}" SYMLINK_INDEX) # reverse magic
-    string(LENGTH "${SRC_PATH}" SRC_PATH_LEN)
-
-    set(PARTS_CNT 0)
-    set(SCRIPT_PART "if [ \"$RPM_INSTALL_PREFIX${SYMLINK_INDEX}\" != \"${SRC_PATH}\" ]; then\n")
-
-    # both paths relocated
-    foreach(POINT_INDEX RANGE ${LAST_INDEX})
-      list(GET SORTED_PACKAGE_PREFIXES ${POINT_INDEX} POINT_PATH)
-      list(FIND PACKAGE_PREFIXES "${POINT_PATH}" POINT_INDEX) # reverse magic
-      string(LENGTH "${POINT_PATH}" POINT_PATH_LEN)
-
-      if(_RPM_RELOCATION_SCRIPT_${SYMLINK_INDEX}_${POINT_INDEX})
-        if("${SYMLINK_INDEX}" EQUAL "${POINT_INDEX}")
-          set(INDENT "")
-        else()
-          string(APPEND SCRIPT_PART "  if [ \"$RPM_INSTALL_PREFIX${POINT_INDEX}\" != \"${POINT_PATH}\" ]; then\n")
-          set(INDENT "  ")
-        endif()
-
-        foreach(RELOCATION_NO IN LISTS _RPM_RELOCATION_SCRIPT_${SYMLINK_INDEX}_${POINT_INDEX})
-          math(EXPR PARTS_CNT ${PARTS_CNT}+1)
-
-          math(EXPR RELOCATION_INDEX ${RELOCATION_NO}-1)
-          list(GET _RPM_RELOCATION_SCRIPT_PAIRS ${RELOCATION_INDEX} RELOCATION_SCRIPT_PAIR)
-          string(FIND "${RELOCATION_SCRIPT_PAIR}" ":" SPLIT_INDEX)
-
-          math(EXPR SRC_PATH_END ${SPLIT_INDEX}-${SRC_PATH_LEN})
-          string(SUBSTRING ${RELOCATION_SCRIPT_PAIR} ${SRC_PATH_LEN} ${SRC_PATH_END} SYMLINK_)
-
-          math(EXPR POINT_PATH_START ${SPLIT_INDEX}+1+${POINT_PATH_LEN})
-          string(SUBSTRING ${RELOCATION_SCRIPT_PAIR} ${POINT_PATH_START} -1 POINT_)
-
-          string(APPEND SCRIPT_PART "  ${INDENT}if [ -z \"$CPACK_RPM_RELOCATED_SYMLINK_${RELOCATION_INDEX}\" ]; then\n")
-          string(APPEND SCRIPT_PART "    ${INDENT}ln -s \"$RPM_INSTALL_PREFIX${POINT_INDEX}${POINT_}\" \"$RPM_INSTALL_PREFIX${SYMLINK_INDEX}${SYMLINK_}\"\n")
-          string(APPEND SCRIPT_PART "    ${INDENT}CPACK_RPM_RELOCATED_SYMLINK_${RELOCATION_INDEX}=true\n")
-          string(APPEND SCRIPT_PART "  ${INDENT}fi\n")
-        endforeach()
-
-        if(NOT "${SYMLINK_INDEX}" EQUAL "${POINT_INDEX}")
-          string(APPEND SCRIPT_PART "  fi\n")
-        endif()
-      endif()
-    endforeach()
-
-    # source path relocated
-    if(_RPM_RELOCATION_SCRIPT_${SYMLINK_INDEX}_X)
-      foreach(RELOCATION_NO IN LISTS _RPM_RELOCATION_SCRIPT_${SYMLINK_INDEX}_X)
-        math(EXPR PARTS_CNT ${PARTS_CNT}+1)
-
-        math(EXPR RELOCATION_INDEX ${RELOCATION_NO}-1)
-        list(GET _RPM_RELOCATION_SCRIPT_PAIRS ${RELOCATION_INDEX} RELOCATION_SCRIPT_PAIR)
-        string(FIND "${RELOCATION_SCRIPT_PAIR}" ":" SPLIT_INDEX)
-
-        math(EXPR SRC_PATH_END ${SPLIT_INDEX}-${SRC_PATH_LEN})
-        string(SUBSTRING ${RELOCATION_SCRIPT_PAIR} ${SRC_PATH_LEN} ${SRC_PATH_END} SYMLINK_)
-
-        math(EXPR POINT_PATH_START ${SPLIT_INDEX}+1)
-        string(SUBSTRING ${RELOCATION_SCRIPT_PAIR} ${POINT_PATH_START} -1 POINT_)
-
-        string(APPEND SCRIPT_PART "  if [ -z \"$CPACK_RPM_RELOCATED_SYMLINK_${RELOCATION_INDEX}\" ]; then\n")
-        string(APPEND SCRIPT_PART "    ln -s \"${POINT_}\" \"$RPM_INSTALL_PREFIX${SYMLINK_INDEX}${SYMLINK_}\"\n")
-        string(APPEND SCRIPT_PART "    CPACK_RPM_RELOCATED_SYMLINK_${RELOCATION_INDEX}=true\n")
-        string(APPEND SCRIPT_PART "  fi\n")
-      endforeach()
-    endif()
-
-    if(PARTS_CNT)
-      set(SCRIPT "${SCRIPT_PART}")
-      string(APPEND SCRIPT "fi\n")
-    endif()
-  endforeach()
-
-  # point path relocated
-  foreach(POINT_INDEX RANGE ${LAST_INDEX})
-    list(GET SORTED_PACKAGE_PREFIXES ${POINT_INDEX} POINT_PATH)
-    list(FIND PACKAGE_PREFIXES "${POINT_PATH}" POINT_INDEX) # reverse magic
-    string(LENGTH "${POINT_PATH}" POINT_PATH_LEN)
-
-    if(_RPM_RELOCATION_SCRIPT_X_${POINT_INDEX})
-      string(APPEND SCRIPT "if [ \"$RPM_INSTALL_PREFIX${POINT_INDEX}\" != \"${POINT_PATH}\" ]; then\n")
-
-      foreach(RELOCATION_NO IN LISTS _RPM_RELOCATION_SCRIPT_X_${POINT_INDEX})
-        math(EXPR RELOCATION_INDEX ${RELOCATION_NO}-1)
-        list(GET _RPM_RELOCATION_SCRIPT_PAIRS ${RELOCATION_INDEX} RELOCATION_SCRIPT_PAIR)
-        string(FIND "${RELOCATION_SCRIPT_PAIR}" ":" SPLIT_INDEX)
-
-        string(SUBSTRING ${RELOCATION_SCRIPT_PAIR} 0 ${SPLIT_INDEX} SYMLINK_)
-
-        math(EXPR POINT_PATH_START ${SPLIT_INDEX}+1+${POINT_PATH_LEN})
-        string(SUBSTRING ${RELOCATION_SCRIPT_PAIR} ${POINT_PATH_START} -1 POINT_)
-
-        string(APPEND SCRIPT "  if [ -z \"$CPACK_RPM_RELOCATED_SYMLINK_${RELOCATION_INDEX}\" ]; then\n")
-        string(APPEND SCRIPT "    ln -s \"$RPM_INSTALL_PREFIX${POINT_INDEX}${POINT_}\" \"${SYMLINK_}\"\n")
-        string(APPEND SCRIPT "    CPACK_RPM_RELOCATED_SYMLINK_${RELOCATION_INDEX}=true\n")
-        string(APPEND SCRIPT "  fi\n")
-      endforeach()
-
-      string(APPEND SCRIPT "fi\n")
-    endif()
-  endforeach()
-
-  # no path relocated
-  if(_RPM_RELOCATION_SCRIPT_X_X)
-    foreach(RELOCATION_NO IN LISTS _RPM_RELOCATION_SCRIPT_X_X)
-      math(EXPR RELOCATION_INDEX ${RELOCATION_NO}-1)
-      list(GET _RPM_RELOCATION_SCRIPT_PAIRS ${RELOCATION_INDEX} RELOCATION_SCRIPT_PAIR)
-      string(FIND "${RELOCATION_SCRIPT_PAIR}" ":" SPLIT_INDEX)
-
-      string(SUBSTRING ${RELOCATION_SCRIPT_PAIR} 0 ${SPLIT_INDEX} SYMLINK_)
-
-      math(EXPR POINT_PATH_START ${SPLIT_INDEX}+1)
-      string(SUBSTRING ${RELOCATION_SCRIPT_PAIR} ${POINT_PATH_START} -1 POINT_)
-
-      string(APPEND SCRIPT "if [ -z \"$CPACK_RPM_RELOCATED_SYMLINK_${RELOCATION_INDEX}\" ]; then\n")
-      string(APPEND SCRIPT "  ln -s \"${POINT_}\" \"${SYMLINK_}\"\n")
-      string(APPEND SCRIPT "fi\n")
-    endforeach()
-  endif()
-
-  set(RPM_SYMLINK_POSTINSTALL "${SCRIPT}" PARENT_SCOPE)
-endfunction()
-
-function(cpack_rpm_symlink_add_for_relocation_script PACKAGE_PREFIXES SYMLINK SYMLINK_RELOCATION_PATHS POINT POINT_RELOCATION_PATHS)
-  list(LENGTH SYMLINK_RELOCATION_PATHS SYMLINK_PATHS_COUTN)
-  list(LENGTH POINT_RELOCATION_PATHS POINT_PATHS_COUNT)
-
-  list(APPEND _RPM_RELOCATION_SCRIPT_PAIRS "${SYMLINK}:${POINT}")
-  list(LENGTH _RPM_RELOCATION_SCRIPT_PAIRS PAIR_NO)
-
-  if(SYMLINK_PATHS_COUTN)
-    foreach(SYMLINK_RELOC_PATH IN LISTS SYMLINK_RELOCATION_PATHS)
-      list(FIND PACKAGE_PREFIXES "${SYMLINK_RELOC_PATH}" SYMLINK_INDEX)
-
-      # source path relocated
-      list(APPEND _RPM_RELOCATION_SCRIPT_${SYMLINK_INDEX}_X "${PAIR_NO}")
-      list(APPEND RELOCATION_VARS "_RPM_RELOCATION_SCRIPT_${SYMLINK_INDEX}_X")
-
-      foreach(POINT_RELOC_PATH IN LISTS POINT_RELOCATION_PATHS)
-        list(FIND PACKAGE_PREFIXES "${POINT_RELOC_PATH}" POINT_INDEX)
-
-        # both paths relocated
-        list(APPEND _RPM_RELOCATION_SCRIPT_${SYMLINK_INDEX}_${POINT_INDEX} "${PAIR_NO}")
-        list(APPEND RELOCATION_VARS "_RPM_RELOCATION_SCRIPT_${SYMLINK_INDEX}_${POINT_INDEX}")
-
-        # point path relocated
-        list(APPEND _RPM_RELOCATION_SCRIPT_X_${POINT_INDEX} "${PAIR_NO}")
-        list(APPEND RELOCATION_VARS "_RPM_RELOCATION_SCRIPT_X_${POINT_INDEX}")
-      endforeach()
-    endforeach()
-  elseif(POINT_PATHS_COUNT)
-    foreach(POINT_RELOC_PATH IN LISTS POINT_RELOCATION_PATHS)
-      list(FIND PACKAGE_PREFIXES "${POINT_RELOC_PATH}" POINT_INDEX)
-
-      # point path relocated
-      list(APPEND _RPM_RELOCATION_SCRIPT_X_${POINT_INDEX} "${PAIR_NO}")
-      list(APPEND RELOCATION_VARS "_RPM_RELOCATION_SCRIPT_X_${POINT_INDEX}")
-    endforeach()
-  endif()
-
-  # no path relocated
-  list(APPEND _RPM_RELOCATION_SCRIPT_X_X "${PAIR_NO}")
-  list(APPEND RELOCATION_VARS "_RPM_RELOCATION_SCRIPT_X_X")
-
-  # place variables into parent scope
-  foreach(VAR IN LISTS RELOCATION_VARS)
-    set(${VAR} "${${VAR}}" PARENT_SCOPE)
-  endforeach()
-  set(_RPM_RELOCATION_SCRIPT_PAIRS "${_RPM_RELOCATION_SCRIPT_PAIRS}" PARENT_SCOPE)
-  set(REQUIRES_SYMLINK_RELOCATION_SCRIPT "true" PARENT_SCOPE)
-  set(DIRECTIVE "%ghost " PARENT_SCOPE)
-endfunction()
-
-function(cpack_rpm_prepare_install_files INSTALL_FILES_LIST WDIR PACKAGE_PREFIXES IS_RELOCATABLE)
-  # Prepend directories in ${CPACK_RPM_INSTALL_FILES} with %dir
-  # This is necessary to avoid duplicate files since rpmbuild does
-  # recursion on its own when encountering a pathname which is a directory
-  # which is not flagged as %dir
-  string(STRIP "${INSTALL_FILES_LIST}" INSTALL_FILES_LIST)
-  string(REPLACE "\n" ";" INSTALL_FILES_LIST
-                          "${INSTALL_FILES_LIST}")
-  string(REPLACE "\"" "" INSTALL_FILES_LIST
-                          "${INSTALL_FILES_LIST}")
-  string(LENGTH "${WDIR}" WDR_LEN_)
-
-  list(SORT INSTALL_FILES_LIST) # make file order consistent on all platforms
-
-  foreach(F IN LISTS INSTALL_FILES_LIST)
-    unset(DIRECTIVE)
-
-    if(IS_SYMLINK "${WDIR}/${F}")
-      if(IS_RELOCATABLE)
-        # check that symlink has relocatable format
-        get_filename_component(SYMLINK_LOCATION_ "${WDIR}/${F}" DIRECTORY)
-        execute_process(COMMAND ls -la "${WDIR}/${F}"
-                  WORKING_DIRECTORY "${WDIR}"
-                  OUTPUT_VARIABLE SYMLINK_POINT_
-                  OUTPUT_STRIP_TRAILING_WHITESPACE)
-
-        string(FIND "${SYMLINK_POINT_}" "->" SYMLINK_POINT_INDEX_ REVERSE)
-        math(EXPR SYMLINK_POINT_INDEX_ ${SYMLINK_POINT_INDEX_}+3)
-        string(LENGTH "${SYMLINK_POINT_}" SYMLINK_POINT_LENGTH_)
-
-        # get destination path
-        string(SUBSTRING "${SYMLINK_POINT_}" ${SYMLINK_POINT_INDEX_} ${SYMLINK_POINT_LENGTH_} SYMLINK_POINT_)
-
-        # check if path is relative or absolute
-        string(SUBSTRING "${SYMLINK_POINT_}" 0 1 SYMLINK_IS_ABSOLUTE_)
-
-        if(${SYMLINK_IS_ABSOLUTE_} STREQUAL "/")
-          # prevent absolute paths from having /../ or /./ section inside of them
-          get_filename_component(SYMLINK_POINT_ "${SYMLINK_POINT_}" ABSOLUTE)
-        else()
-          # handle relative path
-          get_filename_component(SYMLINK_POINT_ "${SYMLINK_LOCATION_}/${SYMLINK_POINT_}" ABSOLUTE)
-        endif()
-
-        # recalculate path length after conversion to canonical form
-        string(LENGTH "${SYMLINK_POINT_}" SYMLINK_POINT_LENGTH_)
-
-        cpack_rpm_exact_regex(IN_SYMLINK_POINT_REGEX "${WDIR}")
-        string(APPEND IN_SYMLINK_POINT_REGEX "/.*")
-        if(SYMLINK_POINT_ MATCHES "${IN_SYMLINK_POINT_REGEX}")
-          # only symlinks that are pointing inside the packaging structure should be checked for relocation
-          string(SUBSTRING "${SYMLINK_POINT_}" ${WDR_LEN_} -1 SYMLINK_POINT_WD_)
-          cpack_rpm_symlink_get_relocation_prefixes("${F}" "${PACKAGE_PREFIXES}" "SYMLINK_RELOCATIONS")
-          cpack_rpm_symlink_get_relocation_prefixes("${SYMLINK_POINT_WD_}" "${PACKAGE_PREFIXES}" "POINT_RELOCATIONS")
-
-          list(LENGTH SYMLINK_RELOCATIONS SYMLINK_RELOCATIONS_COUNT)
-          list(LENGTH POINT_RELOCATIONS POINT_RELOCATIONS_COUNT)
-        else()
-          # location pointed to is outside WDR so it should be treated as a permanent symlink
-          set(SYMLINK_POINT_WD_ "${SYMLINK_POINT_}")
-
-          unset(SYMLINK_RELOCATIONS)
-          unset(POINT_RELOCATIONS)
-          unset(SYMLINK_RELOCATIONS_COUNT)
-          unset(POINT_RELOCATIONS_COUNT)
-
-          message(AUTHOR_WARNING "CPackRPM:Warning: Symbolic link '${F}' points to location that is outside packaging path! Link will possibly not be relocatable.")
-        endif()
-
-        if(SYMLINK_RELOCATIONS_COUNT AND POINT_RELOCATIONS_COUNT)
-          # find matching
-          foreach(SYMLINK_RELOCATION_PREFIX IN LISTS SYMLINK_RELOCATIONS)
-            list(FIND POINT_RELOCATIONS "${SYMLINK_RELOCATION_PREFIX}" FOUND_INDEX)
-            if(NOT ${FOUND_INDEX} EQUAL -1)
-              break()
-            endif()
-          endforeach()
-
-          if(NOT ${FOUND_INDEX} EQUAL -1)
-            # symlinks have the same subpath
-            if(${SYMLINK_RELOCATIONS_COUNT} EQUAL 1 AND ${POINT_RELOCATIONS_COUNT} EQUAL 1)
-              # permanent symlink
-              get_filename_component(SYMLINK_LOCATION_ "${F}" DIRECTORY)
-              file(RELATIVE_PATH FINAL_PATH_ ${SYMLINK_LOCATION_} ${SYMLINK_POINT_WD_})
-              execute_process(COMMAND "${CMAKE_COMMAND}" -E create_symlink "${FINAL_PATH_}" "${WDIR}/${F}")
-            else()
-              # relocation subpaths
-              cpack_rpm_symlink_add_for_relocation_script("${PACKAGE_PREFIXES}" "${F}" "${SYMLINK_RELOCATIONS}"
-                  "${SYMLINK_POINT_WD_}" "${POINT_RELOCATIONS}")
-            endif()
-          else()
-            # not on the same relocation path
-            cpack_rpm_symlink_add_for_relocation_script("${PACKAGE_PREFIXES}" "${F}" "${SYMLINK_RELOCATIONS}"
-                "${SYMLINK_POINT_WD_}" "${POINT_RELOCATIONS}")
-          endif()
-        elseif(POINT_RELOCATIONS_COUNT)
-          # point is relocatable
-          cpack_rpm_symlink_add_for_relocation_script("${PACKAGE_PREFIXES}" "${F}" "${SYMLINK_RELOCATIONS}"
-              "${SYMLINK_POINT_WD_}" "${POINT_RELOCATIONS}")
-        else()
-          # is not relocatable or points to non relocatable path - permanent symlink
-          execute_process(COMMAND "${CMAKE_COMMAND}" -E create_symlink "${SYMLINK_POINT_WD_}" "${WDIR}/${F}")
-        endif()
-      endif()
-    elseif(IS_DIRECTORY "${WDIR}/${F}")
-      set(DIRECTIVE "%dir ")
-    endif()
-
-    string(APPEND INSTALL_FILES "${DIRECTIVE}\"${F}\"\n")
-  endforeach()
-
-  if(REQUIRES_SYMLINK_RELOCATION_SCRIPT)
-    cpack_rpm_symlink_create_relocation_script("${PACKAGE_PREFIXES}")
-  endif()
-
-  set(RPM_SYMLINK_POSTINSTALL "${RPM_SYMLINK_POSTINSTALL}" PARENT_SCOPE)
-  set(CPACK_RPM_INSTALL_FILES "${INSTALL_FILES}" PARENT_SCOPE)
-endfunction()
-
-if(CMAKE_BINARY_DIR)
-  message(FATAL_ERROR "CPackRPM.cmake may only be used by CPack internally.")
-endif()
-
-if(NOT UNIX)
-  message(FATAL_ERROR "CPackRPM.cmake may only be used under UNIX.")
-endif()
-
-# We need to check if the binaries were compiled with debug symbols
-# because without them the package will be useless
-function(cpack_rpm_debugsymbol_check INSTALL_FILES WORKING_DIR)
-  if(NOT CPACK_BUILD_SOURCE_DIRS)
-    message(FATAL_ERROR "CPackRPM: CPACK_BUILD_SOURCE_DIRS variable is not set!"
-      " Required for debuginfo packaging. See documentation of"
-      " CPACK_RPM_DEBUGINFO_PACKAGE variable for details.")
-  endif()
-
-  # With objdump we should check the debug symbols
-  find_program(OBJDUMP_EXECUTABLE objdump)
-  if(NOT OBJDUMP_EXECUTABLE)
-    message(FATAL_ERROR "CPackRPM: objdump binary could not be found!"
-      " Required for debuginfo packaging. See documentation of"
-      " CPACK_RPM_DEBUGINFO_PACKAGE variable for details.")
-  endif()
-
-  # With debugedit we prepare source files list
-  find_program(DEBUGEDIT_EXECUTABLE debugedit "/usr/lib/rpm/")
-  if(NOT DEBUGEDIT_EXECUTABLE)
-    message(FATAL_ERROR "CPackRPM: debugedit binary could not be found!"
-      " Required for debuginfo packaging. See documentation of"
-      " CPACK_RPM_DEBUGINFO_PACKAGE variable for details.")
-  endif()
-
-  unset(mkdir_list_)
-  unset(cp_list_)
-  unset(additional_sources_)
-
-  foreach(F IN LISTS INSTALL_FILES)
-    if(IS_DIRECTORY "${WORKING_DIR}/${F}" OR IS_SYMLINK "${WORKING_DIR}/${F}")
-      continue()
-    endif()
-
-    execute_process(COMMAND "${OBJDUMP_EXECUTABLE}" -h ${WORKING_DIR}/${F}
-                    WORKING_DIRECTORY "${CPACK_TOPLEVEL_DIRECTORY}"
-                    RESULT_VARIABLE OBJDUMP_EXEC_RESULT
-                    OUTPUT_VARIABLE OBJDUMP_OUT
-                    ERROR_QUIET)
-    # Check if the given file is an executable or not
-    if(NOT OBJDUMP_EXEC_RESULT)
-      string(FIND "${OBJDUMP_OUT}" "debug" FIND_RESULT)
-      if(FIND_RESULT GREATER -1)
-        set(index_ 0)
-        foreach(source_dir_ IN LISTS CPACK_BUILD_SOURCE_DIRS)
-          string(LENGTH "${source_dir_}" source_dir_len_)
-          string(LENGTH "${CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX}/src_${index_}" debuginfo_dir_len)
-          if(source_dir_len_ LESS debuginfo_dir_len)
-            message(FATAL_ERROR "CPackRPM: source dir path '${source_dir_}' is"
-              " shorter than debuginfo sources dir path '${CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX}/src_${index_}'!"
-              " Source dir path must be longer than debuginfo sources dir path."
-              " Set CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX variable to a shorter value"
-              " or make source dir path longer."
-              " Required for debuginfo packaging. See documentation of"
-              " CPACK_RPM_DEBUGINFO_PACKAGE variable for details.")
-          endif()
-
-          file(REMOVE "${CPACK_RPM_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}${CPACK_RPM_PACKAGE_COMPONENT_PART_PATH}/debugsources_add.list")
-          execute_process(COMMAND "${DEBUGEDIT_EXECUTABLE}" -b "${source_dir_}" -d "${CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX}/src_${index_}" -i -l "${CPACK_RPM_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}${CPACK_RPM_PACKAGE_COMPONENT_PART_PATH}/debugsources_add.list" "${WORKING_DIR}/${F}"
-              RESULT_VARIABLE res_
-              OUTPUT_VARIABLE opt_
-              ERROR_VARIABLE err_
-            )
-
-          file(STRINGS
-            "${CPACK_RPM_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}${CPACK_RPM_PACKAGE_COMPONENT_PART_PATH}/debugsources_add.list"
-            sources_)
-          list(REMOVE_DUPLICATES sources_)
-
-          foreach(source_ IN LISTS sources_)
-            if(EXISTS "${source_dir_}/${source_}" AND NOT IS_DIRECTORY "${source_dir_}/${source_}")
-              get_filename_component(path_part_ "${source_}" DIRECTORY)
-              list(APPEND mkdir_list_ "%{buildroot}${CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX}/src_${index_}/${path_part_}")
-              list(APPEND cp_list_ "cp \"${source_dir_}/${source_}\" \"%{buildroot}${CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX}/src_${index_}/${path_part_}\"")
-
-              list(APPEND additional_sources_ "${CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX}/src_${index_}/${source_}")
-            endif()
-          endforeach()
-
-          math(EXPR index_ "${index_} + 1")
-        endforeach()
-      else()
-        message(WARNING "CPackRPM: File: ${F} does not contain debug symbols. They will possibly be missing from debuginfo package!")
-      endif()
-
-      get_file_permissions("${WORKING_DIR}/${F}" permissions_)
-      if(NOT "USER_EXECUTE" IN_LIST permissions_ AND
-         NOT "GROUP_EXECUTE" IN_LIST permissions_ AND
-         NOT "WORLD_EXECUTE" IN_LIST permissions_)
-        if(CPACK_RPM_INSTALL_WITH_EXEC)
-          execute_process(COMMAND chmod a+x ${WORKING_DIR}/${F}
-                  RESULT_VARIABLE res_
-                  ERROR_VARIABLE err_
-                  OUTPUT_QUIET)
-
-          if(res_)
-            message(FATAL_ERROR "CPackRPM: could not apply execute permissions "
-              "requested by CPACK_RPM_INSTALL_WITH_EXEC variable on "
-              "'${WORKING_DIR}/${F}'! Reason: '${err_}'")
-          endif()
-        else()
-          message(AUTHOR_WARNING "CPackRPM: File: ${WORKING_DIR}/${F} does not "
-            "have execute permissions. Debuginfo symbols will not be extracted"
-            "! Missing debuginfo may cause packaging failure. Consider setting "
-            "execute permissions or setting 'CPACK_RPM_INSTALL_WITH_EXEC' "
-            "variable.")
-        endif()
-      endif()
-    endif()
-  endforeach()
-
-  list(LENGTH mkdir_list_ len_)
-  if(len_)
-    list(REMOVE_DUPLICATES mkdir_list_)
-    unset(TMP_RPM_DEBUGINFO_INSTALL)
-    foreach(part_ IN LISTS mkdir_list_)
-      string(APPEND TMP_RPM_DEBUGINFO_INSTALL "mkdir -p \"${part_}\"\n")
-    endforeach()
-  endif()
-
-  list(LENGTH cp_list_ len_)
-  if(len_)
-    list(REMOVE_DUPLICATES cp_list_)
-    foreach(part_ IN LISTS cp_list_)
-      string(APPEND TMP_RPM_DEBUGINFO_INSTALL "${part_}\n")
-    endforeach()
-  endif()
-
-  if(NOT DEFINED CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS)
-    set(CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS /usr /usr/src /usr/src/debug)
-    if(CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS_ADDITION)
-      if(CPACK_RPM_PACKAGE_DEBUG)
-        message("CPackRPM:Debug: Adding ${CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS_ADDITION} to builtin omit list.")
-      endif()
-      list(APPEND CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS "${CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS_ADDITION}")
-    endif()
-  endif()
-  if(CPACK_RPM_PACKAGE_DEBUG)
-    message("CPackRPM:Debug: CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS= ${CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS}")
-  endif()
-
-  list(LENGTH additional_sources_ len_)
-  if(len_)
-    list(REMOVE_DUPLICATES additional_sources_)
-    unset(additional_sources_all_)
-    foreach(source_ IN LISTS additional_sources_)
-      string(REPLACE "/" ";" split_source_ " ${source_}")
-      list(REMOVE_AT split_source_ 0)
-      unset(tmp_path_)
-      # Now generate all segments of the path
-      foreach(segment_ IN LISTS split_source_)
-        string(APPEND tmp_path_ "/${segment_}")
-        list(APPEND additional_sources_all_ "${tmp_path_}")
-      endforeach()
-    endforeach()
-
-    list(REMOVE_DUPLICATES additional_sources_all_)
-    list(REMOVE_ITEM additional_sources_all_
-      ${CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS})
-
-    unset(TMP_DEBUGINFO_ADDITIONAL_SOURCES)
-    foreach(source_ IN LISTS additional_sources_all_)
-      string(APPEND TMP_DEBUGINFO_ADDITIONAL_SOURCES "${source_}\n")
-    endforeach()
-  endif()
-
-  set(TMP_RPM_DEBUGINFO_INSTALL "${TMP_RPM_DEBUGINFO_INSTALL}" PARENT_SCOPE)
-  set(TMP_DEBUGINFO_ADDITIONAL_SOURCES "${TMP_DEBUGINFO_ADDITIONAL_SOURCES}"
-    PARENT_SCOPE)
-endfunction()
-
-function(cpack_rpm_variable_fallback OUTPUT_VAR_NAME)
-  set(FALLBACK_VAR_NAMES ${ARGN})
-
-  foreach(variable_name IN LISTS FALLBACK_VAR_NAMES)
-    if(${variable_name})
-      set(${OUTPUT_VAR_NAME} "${${variable_name}}" PARENT_SCOPE)
-      break()
-    endif()
-  endforeach()
-endfunction()
-
-function(cpack_rpm_generate_package)
-  # rpmbuild is the basic command for building RPM package
-  # it may be a simple (symbolic) link to rpm command.
-  find_program(RPMBUILD_EXECUTABLE rpmbuild)
-
-  # Check version of the rpmbuild tool this would be easier to
-  # track bugs with users and CPackRPM debug mode.
-  # We may use RPM version in order to check for available version dependent features
-  if(RPMBUILD_EXECUTABLE)
-    execute_process(COMMAND ${RPMBUILD_EXECUTABLE} --version
-                    OUTPUT_VARIABLE _TMP_VERSION
-                    ERROR_QUIET
-                    OUTPUT_STRIP_TRAILING_WHITESPACE)
-    string(REGEX REPLACE "^.* " ""
-           RPMBUILD_EXECUTABLE_VERSION
-           ${_TMP_VERSION})
-    if(CPACK_RPM_PACKAGE_DEBUG)
-      message("CPackRPM:Debug: rpmbuild version is <${RPMBUILD_EXECUTABLE_VERSION}>")
-    endif()
-  endif()
-
-  if(NOT RPMBUILD_EXECUTABLE)
-    message(FATAL_ERROR "RPM package requires rpmbuild executable")
-  endif()
-
-  # Display lsb_release output if DEBUG mode enable
-  # This will help to diagnose problem with CPackRPM
-  # because we will know on which kind of Linux we are
-  if(CPACK_RPM_PACKAGE_DEBUG)
-    find_program(LSB_RELEASE_EXECUTABLE lsb_release)
-    if(LSB_RELEASE_EXECUTABLE)
-      execute_process(COMMAND ${LSB_RELEASE_EXECUTABLE} -a
-                      OUTPUT_VARIABLE _TMP_LSB_RELEASE_OUTPUT
-                      ERROR_QUIET
-                      OUTPUT_STRIP_TRAILING_WHITESPACE)
-      string(REGEX REPLACE "\n" ", "
-             LSB_RELEASE_OUTPUT
-             ${_TMP_LSB_RELEASE_OUTPUT})
-    else ()
-      set(LSB_RELEASE_OUTPUT "lsb_release not installed/found!")
-    endif()
-    message("CPackRPM:Debug: LSB_RELEASE  = ${LSB_RELEASE_OUTPUT}")
-  endif()
-
-  # We may use RPM version in the future in order
-  # to shut down warning about space in buildtree
-  # some recent RPM version should support space in different places.
-  # not checked [yet].
-  if(CPACK_TOPLEVEL_DIRECTORY MATCHES ".* .*")
-    message(FATAL_ERROR "${RPMBUILD_EXECUTABLE} can't handle paths with spaces, use a build directory without spaces for building RPMs.")
-  endif()
-
-  # If rpmbuild is found
-  # we try to discover alien since we may be on non RPM distro like Debian.
-  # In this case we may try to to use more advanced features
-  # like generating RPM directly from DEB using alien.
-  # FIXME feature not finished (yet)
-  find_program(ALIEN_EXECUTABLE alien)
-  if(ALIEN_EXECUTABLE)
-    message(STATUS "alien found, we may be on a Debian based distro.")
-  endif()
-
-  # Are we packaging components ?
-  if(CPACK_RPM_PACKAGE_COMPONENT)
-    string(TOUPPER ${CPACK_RPM_PACKAGE_COMPONENT} CPACK_RPM_PACKAGE_COMPONENT_UPPER)
-  endif()
-
-  set(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}${CPACK_RPM_PACKAGE_COMPONENT_PART_PATH}")
-
-  #
-  # Use user-defined RPM specific variables value
-  # or generate reasonable default value from
-  # CPACK_xxx generic values.
-  # The variables comes from the needed (mandatory or not)
-  # values found in the RPM specification file aka ".spec" file.
-  # The variables which may/should be defined are:
-  #
-
-  # CPACK_RPM_PACKAGE_SUMMARY (mandatory)
-
-  if(CPACK_RPM_PACKAGE_COMPONENT)
-    cpack_rpm_variable_fallback("CPACK_RPM_PACKAGE_SUMMARY"
-      "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_SUMMARY"
-      "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_PACKAGE_SUMMARY")
-  endif()
-
-  if(NOT CPACK_RPM_PACKAGE_SUMMARY)
-    if(CPACK_PACKAGE_DESCRIPTION_SUMMARY)
-      set(CPACK_RPM_PACKAGE_SUMMARY ${CPACK_PACKAGE_DESCRIPTION_SUMMARY})
-    else()
-      # if neither var is defined lets use the name as summary
-      string(TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_RPM_PACKAGE_SUMMARY)
-    endif()
-  endif()
-
-  if(NOT CPACK_RPM_PACKAGE_URL AND CPACK_PACKAGE_HOMEPAGE_URL)
-    set(CPACK_RPM_PACKAGE_URL "${CPACK_PACKAGE_HOMEPAGE_URL}")
-  endif()
-
-  # CPACK_RPM_PACKAGE_NAME (mandatory)
-  if(NOT CPACK_RPM_PACKAGE_NAME)
-    string(TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_RPM_PACKAGE_NAME)
-  endif()
-
-  if(CPACK_RPM_PACKAGE_COMPONENT)
-    string(TOUPPER "${CPACK_RPM_MAIN_COMPONENT}"
-      CPACK_RPM_MAIN_COMPONENT_UPPER)
-
-    if(NOT CPACK_RPM_MAIN_COMPONENT_UPPER STREQUAL CPACK_RPM_PACKAGE_COMPONENT_UPPER)
-      string(APPEND CPACK_RPM_PACKAGE_NAME "-${CPACK_RPM_PACKAGE_COMPONENT}")
-
-      cpack_rpm_variable_fallback("CPACK_RPM_PACKAGE_NAME"
-        "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_NAME"
-        "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_PACKAGE_NAME")
-    endif()
-  endif()
-
-  # CPACK_RPM_PACKAGE_VERSION (mandatory)
-  if(NOT CPACK_RPM_PACKAGE_VERSION)
-    if(NOT CPACK_PACKAGE_VERSION)
-      message(FATAL_ERROR "RPM package requires a package version")
-    endif()
-    set(CPACK_RPM_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION})
-  endif()
-  # Replace '-' in version with '_'
-  # '-' character is  an Illegal RPM version character
-  # it is illegal because it is used to separate
-  # RPM "Version" from RPM "Release"
-  string(REPLACE "-" "_" CPACK_RPM_PACKAGE_VERSION ${CPACK_RPM_PACKAGE_VERSION})
-
-  # CPACK_RPM_PACKAGE_ARCHITECTURE (mandatory)
-  if(NOT CPACK_RPM_PACKAGE_ARCHITECTURE)
-    execute_process(COMMAND uname "-m"
-                    OUTPUT_VARIABLE CPACK_RPM_PACKAGE_ARCHITECTURE
-                    OUTPUT_STRIP_TRAILING_WHITESPACE)
-  else()
-    if(CPACK_RPM_PACKAGE_DEBUG)
-      message("CPackRPM:Debug: using user-specified build arch = ${CPACK_RPM_PACKAGE_ARCHITECTURE}")
-    endif()
-  endif()
-
-  if(CPACK_RPM_PACKAGE_COMPONENT)
-    cpack_rpm_variable_fallback("CPACK_RPM_PACKAGE_ARCHITECTURE"
-      "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_ARCHITECTURE"
-      "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_PACKAGE_ARCHITECTURE")
-
-    if(CPACK_RPM_PACKAGE_DEBUG)
-      message("CPackRPM:Debug: using component build arch = ${CPACK_RPM_PACKAGE_ARCHITECTURE}")
-    endif()
-  endif()
-
-  if(${CPACK_RPM_PACKAGE_ARCHITECTURE} STREQUAL "noarch")
-    set(TMP_RPM_BUILDARCH "Buildarch: ${CPACK_RPM_PACKAGE_ARCHITECTURE}")
-  else()
-    set(TMP_RPM_BUILDARCH "")
-  endif()
-
-  # CPACK_RPM_PACKAGE_RELEASE
-  # The RPM release is the numbering of the RPM package ITSELF
-  # this is the version of the PACKAGING and NOT the version
-  # of the CONTENT of the package.
-  # You may well need to generate a new RPM package release
-  # without changing the version of the packaged software.
-  # This is the case when the packaging is buggy (not) the software :=)
-  # If not set, 1 is a good candidate
-  if(NOT CPACK_RPM_PACKAGE_RELEASE)
-    set(CPACK_RPM_PACKAGE_RELEASE "1")
-  endif()
-
-  if(CPACK_RPM_PACKAGE_RELEASE_DIST)
-    string(APPEND CPACK_RPM_PACKAGE_RELEASE "%{?dist}")
-  endif()
-
-  # CPACK_RPM_PACKAGE_LICENSE
-  if(NOT CPACK_RPM_PACKAGE_LICENSE)
-    set(CPACK_RPM_PACKAGE_LICENSE "unknown")
-  endif()
-
-  # CPACK_RPM_PACKAGE_GROUP
-  if(CPACK_RPM_PACKAGE_COMPONENT)
-    cpack_rpm_variable_fallback("CPACK_RPM_PACKAGE_GROUP"
-      "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_GROUP"
-      "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_PACKAGE_GROUP")
-  endif()
-
-  if(NOT CPACK_RPM_PACKAGE_GROUP)
-    set(CPACK_RPM_PACKAGE_GROUP "unknown")
-  endif()
-
-  # CPACK_RPM_PACKAGE_VENDOR
-  if(NOT CPACK_RPM_PACKAGE_VENDOR)
-    if(CPACK_PACKAGE_VENDOR)
-      set(CPACK_RPM_PACKAGE_VENDOR "${CPACK_PACKAGE_VENDOR}")
-    else()
-      set(CPACK_RPM_PACKAGE_VENDOR "unknown")
-    endif()
-  endif()
-
-  # CPACK_RPM_PACKAGE_SOURCE
-  # The name of the source tarball in case we generate a source RPM
-
-  # CPACK_RPM_PACKAGE_DESCRIPTION
-  # The variable content may be either
-  #   - explicitly given by the user or
-  #   - filled with the content of CPACK_PACKAGE_DESCRIPTION_FILE
-  #     if it is defined
-  #   - set to a default value
-  #
-
-  if(CPACK_RPM_PACKAGE_COMPONENT)
-    cpack_rpm_variable_fallback("CPACK_RPM_PACKAGE_DESCRIPTION"
-      "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_DESCRIPTION"
-      "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_PACKAGE_DESCRIPTION"
-      "CPACK_COMPONENT_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_DESCRIPTION")
-  endif()
-
-  if(NOT CPACK_RPM_PACKAGE_DESCRIPTION)
-    if(CPACK_PACKAGE_DESCRIPTION_FILE)
-      file(READ ${CPACK_PACKAGE_DESCRIPTION_FILE} CPACK_RPM_PACKAGE_DESCRIPTION)
-    else ()
-      set(CPACK_RPM_PACKAGE_DESCRIPTION "no package description available")
-    endif ()
-  endif ()
-
-  # CPACK_RPM_COMPRESSION_TYPE
-  #
-  if (CPACK_RPM_COMPRESSION_TYPE)
-     if(CPACK_RPM_PACKAGE_DEBUG)
-       message("CPackRPM:Debug: User Specified RPM compression type: ${CPACK_RPM_COMPRESSION_TYPE}")
-     endif()
-     if(CPACK_RPM_COMPRESSION_TYPE STREQUAL "lzma")
-       set(CPACK_RPM_COMPRESSION_TYPE_TMP "%define _binary_payload w9.lzdio")
-     endif()
-     if(CPACK_RPM_COMPRESSION_TYPE STREQUAL "xz")
-       set(CPACK_RPM_COMPRESSION_TYPE_TMP "%define _binary_payload w7.xzdio")
-     endif()
-     if(CPACK_RPM_COMPRESSION_TYPE STREQUAL "bzip2")
-       set(CPACK_RPM_COMPRESSION_TYPE_TMP "%define _binary_payload w9.bzdio")
-     endif()
-     if(CPACK_RPM_COMPRESSION_TYPE STREQUAL "gzip")
-       set(CPACK_RPM_COMPRESSION_TYPE_TMP "%define _binary_payload w9.gzdio")
-     endif()
-  else()
-     set(CPACK_RPM_COMPRESSION_TYPE_TMP "")
-  endif()
-
-  if(NOT CPACK_RPM_PACKAGE_SOURCES)
-    if(CPACK_PACKAGE_RELOCATABLE OR CPACK_RPM_PACKAGE_RELOCATABLE)
-      if(CPACK_RPM_PACKAGE_DEBUG)
-        message("CPackRPM:Debug: Trying to build a relocatable package")
-      endif()
-      if(CPACK_SET_DESTDIR AND (NOT CPACK_SET_DESTDIR STREQUAL "I_ON"))
-        message("CPackRPM:Warning: CPACK_SET_DESTDIR is set (=${CPACK_SET_DESTDIR}) while requesting a relocatable package (CPACK_RPM_PACKAGE_RELOCATABLE is set): this is not supported, the package won't be relocatable.")
-        set(CPACK_RPM_PACKAGE_RELOCATABLE FALSE)
-      else()
-        set(CPACK_RPM_PACKAGE_PREFIX ${CPACK_PACKAGING_INSTALL_PREFIX}) # kept for back compatibility (provided external RPM spec files)
-        cpack_rpm_prepare_relocation_paths()
-        set(CPACK_RPM_PACKAGE_RELOCATABLE TRUE)
-      endif()
-    endif()
-  else()
-    if(CPACK_RPM_PACKAGE_COMPONENT)
-      message(FATAL_ERROR "CPACK_RPM_PACKAGE_SOURCES parameter can not be used"
-        " in combination with CPACK_RPM_PACKAGE_COMPONENT parameter!")
-    endif()
-
-    set(CPACK_RPM_PACKAGE_RELOCATABLE FALSE) # disable relocatable option if building source RPM
-  endif()
-
-  execute_process(
-    COMMAND "${RPMBUILD_EXECUTABLE}" --querytags
-    OUTPUT_VARIABLE RPMBUILD_TAG_LIST
-    OUTPUT_STRIP_TRAILING_WHITESPACE)
-  string(REPLACE "\n" ";" RPMBUILD_TAG_LIST "${RPMBUILD_TAG_LIST}")
-
-  if(CPACK_RPM_PACKAGE_EPOCH)
-    set(TMP_RPM_EPOCH "Epoch: ${CPACK_RPM_PACKAGE_EPOCH}")
-  endif()
-
-  # Check if additional fields for RPM spec header are given
-  # There may be some COMPONENT specific variables as well
-  # If component specific var is not provided we use the global one
-  # for each component
-  foreach(_RPM_SPEC_HEADER URL REQUIRES SUGGESTS PROVIDES OBSOLETES PREFIX CONFLICTS AUTOPROV AUTOREQ AUTOREQPROV REQUIRES_PRE REQUIRES_POST REQUIRES_PREUN REQUIRES_POSTUN)
-
-    if(CPACK_RPM_PACKAGE_DEBUG)
-      message("CPackRPM:Debug: processing ${_RPM_SPEC_HEADER}")
-    endif()
-
-    if(CPACK_RPM_PACKAGE_COMPONENT)
-      cpack_rpm_variable_fallback("CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}"
-        "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_${_RPM_SPEC_HEADER}"
-        "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_PACKAGE_${_RPM_SPEC_HEADER}")
-    endif()
-
-    if(DEFINED CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER})
-      # Prefix can be replaced by Prefixes but the old version still works so we'll ignore it for now
-      # Requires* is a special case because it gets transformed to Requires(pre/post/preun/postun)
-      # Auto* is a special case because the tags can not be queried by querytags rpmbuild flag
-      set(special_case_tags_ PREFIX REQUIRES_PRE REQUIRES_POST REQUIRES_PREUN REQUIRES_POSTUN AUTOPROV AUTOREQ AUTOREQPROV)
-      if(NOT _RPM_SPEC_HEADER IN_LIST RPMBUILD_TAG_LIST AND NOT _RPM_SPEC_HEADER IN_LIST special_case_tags_)
-        message(AUTHOR_WARNING "CPackRPM:Warning: ${_RPM_SPEC_HEADER} not "
-            "supported in provided rpmbuild. Tag will not be used.")
-        continue()
-      endif()
-
-      if(CPACK_RPM_PACKAGE_DEBUG)
-        message("CPackRPM:Debug: using CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}")
-      endif()
-
-      set(CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}_TMP ${CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}})
-    endif()
-
-    # Treat the RPM Spec keyword iff it has been properly defined
-    if(DEFINED CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}_TMP)
-      # Transform NAME --> Name e.g. PROVIDES --> Provides
-      # The Upper-case first letter and lowercase tail is the
-      # appropriate value required in the final RPM spec file.
-      string(SUBSTRING ${_RPM_SPEC_HEADER} 1 -1 _PACKAGE_HEADER_TAIL)
-      string(TOLOWER "${_PACKAGE_HEADER_TAIL}" _PACKAGE_HEADER_TAIL)
-      string(SUBSTRING ${_RPM_SPEC_HEADER} 0 1 _PACKAGE_HEADER_NAME)
-      string(APPEND _PACKAGE_HEADER_NAME "${_PACKAGE_HEADER_TAIL}")
-      # The following keywords require parentheses around the "pre" or "post" suffix in the final RPM spec file.
-      set(SCRIPTS_REQUIREMENTS_LIST REQUIRES_PRE REQUIRES_POST REQUIRES_PREUN REQUIRES_POSTUN)
-      list(FIND SCRIPTS_REQUIREMENTS_LIST ${_RPM_SPEC_HEADER} IS_SCRIPTS_REQUIREMENT_FOUND)
-      if(NOT ${IS_SCRIPTS_REQUIREMENT_FOUND} EQUAL -1)
-        string(REPLACE "_" "(" _PACKAGE_HEADER_NAME "${_PACKAGE_HEADER_NAME}")
-        string(APPEND _PACKAGE_HEADER_NAME ")")
-      endif()
-      if(CPACK_RPM_PACKAGE_DEBUG)
-        message("CPackRPM:Debug: User defined ${_PACKAGE_HEADER_NAME}:\n ${CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}_TMP}")
-      endif()
-      set(TMP_RPM_${_RPM_SPEC_HEADER} "${_PACKAGE_HEADER_NAME}: ${CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}_TMP}")
-      unset(CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}_TMP)
-    endif()
-  endforeach()
-
-  # CPACK_RPM_SPEC_INSTALL_POST
-  # May be used to define a RPM post intallation script
-  # for example setting it to "/bin/true" may prevent
-  # rpmbuild from stripping binaries.
-  if(CPACK_RPM_SPEC_INSTALL_POST)
-    if(CPACK_RPM_PACKAGE_DEBUG)
-      message("CPackRPM:Debug: User defined CPACK_RPM_SPEC_INSTALL_POST = ${CPACK_RPM_SPEC_INSTALL_POST}")
-    endif()
-    set(TMP_RPM_SPEC_INSTALL_POST "%define __spec_install_post ${CPACK_RPM_SPEC_INSTALL_POST}")
-  endif()
-
-  # CPACK_RPM_POST_INSTALL_SCRIPT_FILE (or CPACK_RPM_<COMPONENT>_POST_INSTALL_SCRIPT_FILE)
-  # CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE (or CPACK_RPM_<COMPONENT>_POST_UNINSTALL_SCRIPT_FILE)
-  # CPACK_RPM_POST_TRANS_SCRIPT_FILE (or CPACK_RPM_<COMPONENT>_POST_TRANS_SCRIPT_FILE)
-  # May be used to embed a post installation/uninstallation/transaction script in the spec file.
-  # The referred script file(s) will be read and directly
-  # put after the %post or %postun or %posttrans section
-  # ----------------------------------------------------------------
-  # CPACK_RPM_PRE_INSTALL_SCRIPT_FILE (or CPACK_RPM_<COMPONENT>_PRE_INSTALL_SCRIPT_FILE)
-  # CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE (or CPACK_RPM_<COMPONENT>_PRE_UNINSTALL_SCRIPT_FILE)
-  # CPACK_RPM_PRE_TRANS_SCRIPT_FILE (or CPACK_RPM_<COMPONENT>_PRE_TRANS_SCRIPT_FILE)
-  # May be used to embed a pre installation/uninstallation/transaction script in the spec file.
-  # The referred script file(s) will be read and directly
-  # put after the %pre or %preun or %pretrans section
-  foreach(RPM_SCRIPT_FILE_TYPE_ "INSTALL" "UNINSTALL" "TRANS")
-    foreach(RPM_SCRIPT_FILE_TIME_ "PRE" "POST")
-      set("CPACK_RPM_${RPM_SCRIPT_FILE_TIME_}_${RPM_SCRIPT_FILE_TYPE_}_READ_FILE"
-        "${CPACK_RPM_${RPM_SCRIPT_FILE_TIME_}_${RPM_SCRIPT_FILE_TYPE_}_SCRIPT_FILE}")
-
-      if(CPACK_RPM_PACKAGE_COMPONENT)
-        cpack_rpm_variable_fallback("CPACK_RPM_${RPM_SCRIPT_FILE_TIME_}_${RPM_SCRIPT_FILE_TYPE_}_READ_FILE"
-          "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_${RPM_SCRIPT_FILE_TIME_}_${RPM_SCRIPT_FILE_TYPE_}_SCRIPT_FILE"
-          "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_${RPM_SCRIPT_FILE_TIME_}_${RPM_SCRIPT_FILE_TYPE_}_SCRIPT_FILE")
-      endif()
-
-      # Handle file if it has been specified
-      if(CPACK_RPM_${RPM_SCRIPT_FILE_TIME_}_${RPM_SCRIPT_FILE_TYPE_}_READ_FILE)
-        if(EXISTS ${CPACK_RPM_${RPM_SCRIPT_FILE_TIME_}_${RPM_SCRIPT_FILE_TYPE_}_READ_FILE})
-          file(READ ${CPACK_RPM_${RPM_SCRIPT_FILE_TIME_}_${RPM_SCRIPT_FILE_TYPE_}_READ_FILE}
-            "CPACK_RPM_SPEC_${RPM_SCRIPT_FILE_TIME_}${RPM_SCRIPT_FILE_TYPE_}")
-        else()
-          message("CPackRPM:Warning: CPACK_RPM_${RPM_SCRIPT_FILE_TIME_}_${RPM_SCRIPT_FILE_TYPE_}_SCRIPT_FILE <${CPACK_RPM_${RPM_SCRIPT_FILE_TIME_}_${RPM_SCRIPT_FILE_TYPE_}_READ_FILE}> does not exists - ignoring")
-        endif()
-      else()
-        # reset SPEC var value if no file has been specified
-        # (either globally or component-wise)
-        set("CPACK_RPM_SPEC_${RPM_SCRIPT_FILE_TIME_}${RPM_SCRIPT_FILE_TYPE_}" "")
-      endif()
-    endforeach()
-  endforeach()
-
-  # CPACK_RPM_CHANGELOG_FILE
-  # May be used to embed a changelog in the spec file.
-  # The referred file will be read and directly put after the %changelog section
-  if(CPACK_RPM_CHANGELOG_FILE)
-    if(EXISTS ${CPACK_RPM_CHANGELOG_FILE})
-      file(READ ${CPACK_RPM_CHANGELOG_FILE} CPACK_RPM_SPEC_CHANGELOG)
-    else()
-      message(SEND_ERROR "CPackRPM:Warning: CPACK_RPM_CHANGELOG_FILE <${CPACK_RPM_CHANGELOG_FILE}> does not exists - ignoring")
-    endif()
-  else()
-    set(CPACK_RPM_SPEC_CHANGELOG "* Sun Jul 4 2010 Eric Noulard <eric.noulard@gmail.com> - ${CPACK_RPM_PACKAGE_VERSION}-${CPACK_RPM_PACKAGE_RELEASE}\n  Generated by CPack RPM (no Changelog file were provided)")
-  endif()
-
-  # CPACK_RPM_SPEC_MORE_DEFINE
-  # This is a generated spec rpm file spaceholder
-  if(CPACK_RPM_SPEC_MORE_DEFINE)
-    if(CPACK_RPM_PACKAGE_DEBUG)
-      message("CPackRPM:Debug: User defined more define spec line specified:\n ${CPACK_RPM_SPEC_MORE_DEFINE}")
-    endif()
-  endif()
-
-  # Now we may create the RPM build tree structure
-  set(CPACK_RPM_ROOTDIR "${CPACK_TOPLEVEL_DIRECTORY}")
-  if(CPACK_RPM_PACKAGE_DEBUG)
-    message("CPackRPM:Debug: Using CPACK_RPM_ROOTDIR=${CPACK_RPM_ROOTDIR}")
-  endif()
-  # Prepare RPM build tree
-  file(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR})
-  file(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/tmp)
-  file(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/BUILD)
-  file(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/RPMS)
-  file(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/SOURCES)
-  file(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/SPECS)
-  file(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/SRPMS)
-
-  # it seems rpmbuild can't handle spaces in the path
-  # neither escaping (as below) nor putting quotes around the path seem to help
-  #string(REGEX REPLACE " " "\\\\ " CPACK_RPM_DIRECTORY "${CPACK_TOPLEVEL_DIRECTORY}")
-  set(CPACK_RPM_DIRECTORY "${CPACK_TOPLEVEL_DIRECTORY}")
-
-  cpack_rpm_prepare_content_list()
-
-  # In component case, put CPACK_ABSOLUTE_DESTINATION_FILES_<COMPONENT>
-  #                   into CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL
-  #         otherwise, put CPACK_ABSOLUTE_DESTINATION_FILES
-  # This must be done BEFORE the CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL handling
-  if(CPACK_RPM_PACKAGE_COMPONENT)
-    if(CPACK_ABSOLUTE_DESTINATION_FILES)
-      cpack_rpm_variable_fallback("COMPONENT_FILES_TAG"
-        "CPACK_ABSOLUTE_DESTINATION_FILES_${CPACK_RPM_PACKAGE_COMPONENT}"
-        "CPACK_ABSOLUTE_DESTINATION_FILES_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}")
-      set(CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL "${${COMPONENT_FILES_TAG}}")
-      if(CPACK_RPM_PACKAGE_DEBUG)
-        message("CPackRPM:Debug: Handling Absolute Destination Files: <${CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL}>")
-        message("CPackRPM:Debug: in component = ${CPACK_RPM_PACKAGE_COMPONENT}")
-      endif()
-    endif()
-  else()
-    if(CPACK_ABSOLUTE_DESTINATION_FILES)
-      set(CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL "${CPACK_ABSOLUTE_DESTINATION_FILES}")
-    endif()
-  endif()
-
-  # In component case, set CPACK_RPM_USER_FILELIST_INTERNAL with CPACK_RPM_<COMPONENT>_USER_FILELIST.
-  set(CPACK_RPM_USER_FILELIST_INTERNAL "")
-  if(CPACK_RPM_PACKAGE_COMPONENT)
-    cpack_rpm_variable_fallback("CPACK_RPM_USER_FILELIST_INTERNAL"
-      "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_USER_FILELIST"
-      "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_USER_FILELIST")
-
-    if(CPACK_RPM_PACKAGE_DEBUG AND CPACK_RPM_USER_FILELIST_INTERNAL)
-      message("CPackRPM:Debug: Handling User Filelist: <${CPACK_RPM_USER_FILELIST_INTERNAL}>")
-      message("CPackRPM:Debug: in component = ${CPACK_RPM_PACKAGE_COMPONENT}")
-    endif()
-  elseif(CPACK_RPM_USER_FILELIST)
-    set(CPACK_RPM_USER_FILELIST_INTERNAL "${CPACK_RPM_USER_FILELIST}")
-  endif()
-
-  # Handle user specified file line list in CPACK_RPM_USER_FILELIST_INTERNAL
-  # Remove those files from CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL
-  #                      or CPACK_RPM_INSTALL_FILES,
-  # hence it must be done before these auto-generated lists are processed.
-  if(CPACK_RPM_USER_FILELIST_INTERNAL)
-    if(CPACK_RPM_PACKAGE_DEBUG)
-      message("CPackRPM:Debug: Handling User Filelist: <${CPACK_RPM_USER_FILELIST_INTERNAL}>")
-    endif()
-
-    # Create CMake list from CPACK_RPM_INSTALL_FILES
-    string(STRIP "${CPACK_RPM_INSTALL_FILES}" CPACK_RPM_INSTALL_FILES_LIST)
-    string(REPLACE "\n" ";" CPACK_RPM_INSTALL_FILES_LIST
-                            "${CPACK_RPM_INSTALL_FILES_LIST}")
-    string(REPLACE "\"" "" CPACK_RPM_INSTALL_FILES_LIST
-                            "${CPACK_RPM_INSTALL_FILES_LIST}")
-
-    set(CPACK_RPM_USER_INSTALL_FILES "")
-    foreach(F IN LISTS CPACK_RPM_USER_FILELIST_INTERNAL)
-      string(REGEX REPLACE "%[A-Za-z]+(\\([^()]*\\))? " "" F_PATH ${F})
-      string(REGEX MATCH "(%[A-Za-z]+(\\([^()]*\\))? )*" F_PREFIX ${F})
-      string(STRIP ${F_PREFIX} F_PREFIX)
-
-      if(CPACK_RPM_PACKAGE_DEBUG)
-        message("CPackRPM:Debug: F_PREFIX=<${F_PREFIX}>, F_PATH=<${F_PATH}>")
-      endif()
-      if(F_PREFIX)
-        string(APPEND F_PREFIX " ")
-      endif()
-      # Rebuild the user list file
-      string(APPEND CPACK_RPM_USER_INSTALL_FILES "${F_PREFIX}\"${F_PATH}\"\n")
-
-      # Remove from CPACK_RPM_INSTALL_FILES and CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL
-      list(REMOVE_ITEM CPACK_RPM_INSTALL_FILES_LIST ${F_PATH})
-      # ABSOLUTE destination files list may not exists at all
-      if (CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL)
-        list(REMOVE_ITEM CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL ${F_PATH})
-      endif()
-    endforeach()
-
-    # Rebuild CPACK_RPM_INSTALL_FILES
-    set(CPACK_RPM_INSTALL_FILES "")
-    foreach(F IN LISTS CPACK_RPM_INSTALL_FILES_LIST)
-      string(APPEND CPACK_RPM_INSTALL_FILES "\"${F}\"\n")
-    endforeach()
-  else()
-    set(CPACK_RPM_USER_INSTALL_FILES "")
-  endif()
-
-  if (CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL)
-    if(CPACK_RPM_PACKAGE_DEBUG)
-      message("CPackRPM:Debug: Handling Absolute Destination Files: ${CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL}")
-    endif()
-    # Remove trailing space
-    string(STRIP "${CPACK_RPM_INSTALL_FILES}" CPACK_RPM_INSTALL_FILES_LIST)
-    # Transform endline separated - string into CMake List
-    string(REPLACE "\n" ";" CPACK_RPM_INSTALL_FILES_LIST "${CPACK_RPM_INSTALL_FILES_LIST}")
-    # Remove unnecessary quotes
-    string(REPLACE "\"" "" CPACK_RPM_INSTALL_FILES_LIST "${CPACK_RPM_INSTALL_FILES_LIST}")
-    # Remove ABSOLUTE install file from INSTALL FILE LIST
-    list(REMOVE_ITEM CPACK_RPM_INSTALL_FILES_LIST ${CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL})
-    # Rebuild INSTALL_FILES
-    set(CPACK_RPM_INSTALL_FILES "")
-    foreach(F IN LISTS CPACK_RPM_INSTALL_FILES_LIST)
-      string(APPEND CPACK_RPM_INSTALL_FILES "\"${F}\"\n")
-    endforeach()
-    # Build ABSOLUTE_INSTALL_FILES
-    set(CPACK_RPM_ABSOLUTE_INSTALL_FILES "")
-    foreach(F IN LISTS CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL)
-      string(APPEND CPACK_RPM_ABSOLUTE_INSTALL_FILES "%config \"${F}\"\n")
-    endforeach()
-    if(CPACK_RPM_PACKAGE_DEBUG)
-      message("CPackRPM:Debug: CPACK_RPM_ABSOLUTE_INSTALL_FILES=${CPACK_RPM_ABSOLUTE_INSTALL_FILES}")
-      message("CPackRPM:Debug: CPACK_RPM_INSTALL_FILES=${CPACK_RPM_INSTALL_FILES}")
-    endif()
-  else()
-    # reset vars in order to avoid leakage of value(s) from one component to another
-    set(CPACK_RPM_ABSOLUTE_INSTALL_FILES "")
-  endif()
-
-  cpack_rpm_variable_fallback("CPACK_RPM_DEBUGINFO_PACKAGE"
-    "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_DEBUGINFO_PACKAGE"
-    "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_DEBUGINFO_PACKAGE"
-    "CPACK_RPM_DEBUGINFO_PACKAGE")
-  if(CPACK_RPM_DEBUGINFO_PACKAGE OR (CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE AND NOT GENERATE_SPEC_PARTS))
-    cpack_rpm_variable_fallback("CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX"
-      "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_BUILD_SOURCE_DIRS_PREFIX"
-      "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_BUILD_SOURCE_DIRS_PREFIX"
-      "CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX")
-    if(NOT CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX)
-      set(CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX "/usr/src/debug/${CPACK_PACKAGE_FILE_NAME}${CPACK_RPM_PACKAGE_COMPONENT_PART_PATH}")
-    endif()
-
-    # handle cases where path contains extra slashes (e.g. /a//b/ instead of
-    # /a/b)
-    get_filename_component(CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX
-      "${CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX}" ABSOLUTE)
-
-    if(CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE AND GENERATE_SPEC_PARTS)
-      file(WRITE "${CPACK_RPM_ROOTDIR}/SPECS/${CPACK_RPM_PACKAGE_COMPONENT}.files"
-        "${CPACK_RPM_INSTALL_FILES}")
-    else()
-      if(CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE AND CPACK_RPM_PACKAGE_COMPONENT)
-        # this part is only required by components packaging - with monolithic
-        # packages we can be certain that there are no other components present
-        # so CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE is a noop
-        if(CPACK_RPM_DEBUGINFO_PACKAGE)
-          # only add current package files to debuginfo list if debuginfo
-          # generation is enabled for current package
-          string(STRIP "${CPACK_RPM_INSTALL_FILES}" install_files_)
-          string(REPLACE "\n" ";" install_files_ "${install_files_}")
-          string(REPLACE "\"" "" install_files_ "${install_files_}")
-        else()
-          unset(install_files_)
-        endif()
-
-        file(GLOB files_ "${CPACK_RPM_DIRECTORY}/SPECS/*.files")
-
-        foreach(f_ IN LISTS files_)
-          file(READ "${f_}" tmp_)
-          string(APPEND install_files_ ";${tmp_}")
-        endforeach()
-
-        # if there were other components/groups so we need to move files from them
-        # to current component otherwise those files won't be found
-        file(GLOB components_ LIST_DIRECTORIES true RELATIVE
-          "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}"
-          "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}/*")
-        foreach(component_ IN LISTS components_)
-          string(TOUPPER "${component_}" component_dir_upper_)
-          if(component_dir_upper_ STREQUAL CPACK_RPM_PACKAGE_COMPONENT_UPPER)
-            # skip current component
-            continue()
-          endif()
-
-          file(GLOB_RECURSE files_for_move_ LIST_DIRECTORIES false RELATIVE
-            "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}/${component_}"
-            "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}/${component_}/*")
-
-          foreach(f_ IN LISTS files_for_move_)
-            get_filename_component(dir_path_ "${f_}" DIRECTORY)
-            set(src_file_
-              "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}/${component_}/${f_}")
-
-            # check that we are not overriding an existing file that doesn't
-            # match the file that we want to copy
-            if(EXISTS "${src_file_}" AND EXISTS "${WDIR}/${f_}")
-              execute_process(
-                  COMMAND ${CMAKE_COMMAND} -E compare_files "${src_file_}" "${WDIR}/${f_}"
-                  RESULT_VARIABLE res_
-                )
-              if(res_)
-                message(FATAL_ERROR "CPackRPM:Error: File on path '${WDIR}/${f_}'"
-                  " already exists but is a different than the one in component"
-                  " '${component_}'! Packages will not be generated.")
-              endif()
-            endif()
-
-            file(MAKE_DIRECTORY "${WDIR}/${dir_path_}")
-            file(RENAME "${src_file_}"
-              "${WDIR}/${f_}")
-          endforeach()
-        endforeach()
-
-        cpack_rpm_debugsymbol_check("${install_files_}" "${WDIR}")
-      else()
-        string(STRIP "${CPACK_RPM_INSTALL_FILES}" install_files_)
-        string(REPLACE "\n" ";" install_files_ "${install_files_}")
-        string(REPLACE "\"" "" install_files_ "${install_files_}")
-
-        cpack_rpm_debugsymbol_check("${install_files_}" "${WDIR}")
-      endif()
-
-      if(TMP_DEBUGINFO_ADDITIONAL_SOURCES)
-        set(TMP_RPM_DEBUGINFO "
-# Modified version of %%debug_package macro
-# defined in /usr/lib/rpm/macros as that one
-# can't handle injection of extra source files.
-%ifnarch noarch
-%global __debug_package 1
-%package debuginfo
-Summary: Debug information for package %{name}
-Group: Development/Debug
-AutoReqProv: 0
-%description debuginfo
-This package provides debug information for package %{name}.
-Debug information is useful when developing applications that use this
-package or when debugging this package.
-%files debuginfo -f debugfiles.list
-%defattr(-,root,root)
-${TMP_DEBUGINFO_ADDITIONAL_SOURCES}
-%endif
-")
-      elseif(CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE)
-        message(AUTHOR_WARNING "CPackRPM:Warning: debuginfo package was requested"
-          " but will not be generated as no source files were found!")
-      else()
-        message(AUTHOR_WARNING "CPackRPM:Warning: debuginfo package was requested"
-          " but will not be generated as no source files were found! Component: '"
-          "${CPACK_RPM_PACKAGE_COMPONENT}'.")
-      endif()
-    endif()
-  endif()
-
-  # Prepare install files
-  cpack_rpm_prepare_install_files(
-      "${CPACK_RPM_INSTALL_FILES}"
-      "${WDIR}"
-      "${RPM_USED_PACKAGE_PREFIXES}"
-      "${CPACK_RPM_PACKAGE_RELOCATABLE}"
-    )
-
-  # set default user and group
-  foreach(_PERM_TYPE "USER" "GROUP")
-    if(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_DEFAULT_${_PERM_TYPE})
-      set(TMP_DEFAULT_${_PERM_TYPE} "${CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_DEFAULT_${_PERM_TYPE}}")
-    elseif(CPACK_RPM_DEFAULT_${_PERM_TYPE})
-      set(TMP_DEFAULT_${_PERM_TYPE} "${CPACK_RPM_DEFAULT_${_PERM_TYPE}}")
-    else()
-      set(TMP_DEFAULT_${_PERM_TYPE} "root")
-    endif()
-  endforeach()
-
-  # set default file and dir permissions
-  foreach(_PERM_TYPE "FILE" "DIR")
-    if(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_DEFAULT_${_PERM_TYPE}_PERMISSIONS)
-      get_unix_permissions_octal_notation("CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_DEFAULT_${_PERM_TYPE}_PERMISSIONS" "TMP_DEFAULT_${_PERM_TYPE}_PERMISSIONS")
-      set(_PERMISSIONS_VAR "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_DEFAULT_${_PERM_TYPE}_PERMISSIONS")
-    elseif(CPACK_RPM_DEFAULT_${_PERM_TYPE}_PERMISSIONS)
-      get_unix_permissions_octal_notation("CPACK_RPM_DEFAULT_${_PERM_TYPE}_PERMISSIONS" "TMP_DEFAULT_${_PERM_TYPE}_PERMISSIONS")
-      set(_PERMISSIONS_VAR "CPACK_RPM_DEFAULT_${_PERM_TYPE}_PERMISSIONS")
-    else()
-      set(TMP_DEFAULT_${_PERM_TYPE}_PERMISSIONS "-")
-    endif()
-  endforeach()
-
-  # The name of the final spec file to be used by rpmbuild
-  set(CPACK_RPM_BINARY_SPECFILE "${CPACK_RPM_ROOTDIR}/SPECS/${CPACK_RPM_PACKAGE_NAME}.spec")
-
-  # Print out some debug information if we were asked for that
-  if(CPACK_RPM_PACKAGE_DEBUG)
-     message("CPackRPM:Debug: CPACK_TOPLEVEL_DIRECTORY          = ${CPACK_TOPLEVEL_DIRECTORY}")
-     message("CPackRPM:Debug: CPACK_TOPLEVEL_TAG                = ${CPACK_TOPLEVEL_TAG}")
-     message("CPackRPM:Debug: CPACK_TEMPORARY_DIRECTORY         = ${CPACK_TEMPORARY_DIRECTORY}")
-     message("CPackRPM:Debug: CPACK_OUTPUT_FILE_NAME            = ${CPACK_OUTPUT_FILE_NAME}")
-     message("CPackRPM:Debug: CPACK_OUTPUT_FILE_PATH            = ${CPACK_OUTPUT_FILE_PATH}")
-     message("CPackRPM:Debug: CPACK_PACKAGE_FILE_NAME           = ${CPACK_PACKAGE_FILE_NAME}")
-     message("CPackRPM:Debug: CPACK_RPM_BINARY_SPECFILE         = ${CPACK_RPM_BINARY_SPECFILE}")
-     message("CPackRPM:Debug: CPACK_PACKAGE_INSTALL_DIRECTORY   = ${CPACK_PACKAGE_INSTALL_DIRECTORY}")
-     message("CPackRPM:Debug: CPACK_TEMPORARY_PACKAGE_FILE_NAME = ${CPACK_TEMPORARY_PACKAGE_FILE_NAME}")
-  endif()
-
-  #
-  # USER generated/provided spec file handling.
-  #
-
-  # We can have a component specific spec file.
-  if(CPACK_RPM_PACKAGE_COMPONENT)
-    cpack_rpm_variable_fallback("CPACK_RPM_USER_BINARY_SPECFILE"
-      "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_USER_BINARY_SPECFILE"
-      "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_USER_BINARY_SPECFILE")
-  endif()
-
-  cpack_rpm_variable_fallback("CPACK_RPM_FILE_NAME"
-    "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_FILE_NAME"
-    "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_FILE_NAME"
-    "CPACK_RPM_FILE_NAME")
-  if(NOT CPACK_RPM_FILE_NAME STREQUAL "RPM-DEFAULT")
-    if(CPACK_RPM_FILE_NAME)
-      if(NOT CPACK_RPM_FILE_NAME MATCHES ".*\\.rpm")
-        message(FATAL_ERROR "'${CPACK_RPM_FILE_NAME}' is not a valid RPM package file name as it must end with '.rpm'!")
-      endif()
-    else()
-      # old file name format for back compatibility
-      string(TOUPPER "${CPACK_RPM_MAIN_COMPONENT}"
-        CPACK_RPM_MAIN_COMPONENT_UPPER)
-
-      if(CPACK_RPM_MAIN_COMPONENT_UPPER STREQUAL CPACK_RPM_PACKAGE_COMPONENT_UPPER)
-        # this is the main component so ignore the component filename part
-        set(CPACK_RPM_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}.rpm")
-      else()
-        set(CPACK_RPM_FILE_NAME "${CPACK_OUTPUT_FILE_NAME}")
-      endif()
-    endif()
-    # else example:
-    #set(CPACK_RPM_FILE_NAME "${CPACK_RPM_PACKAGE_NAME}-${CPACK_RPM_PACKAGE_VERSION}-${CPACK_RPM_PACKAGE_RELEASE}-${CPACK_RPM_PACKAGE_ARCHITECTURE}.rpm")
-
-    if(CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE AND GENERATE_SPEC_PARTS)
-      string(TOLOWER "${CPACK_RPM_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}.*\\.rpm" expected_filename_)
-
-      file(WRITE "${CPACK_RPM_ROOTDIR}/SPECS/${CPACK_RPM_PACKAGE_COMPONENT}.rpm_name"
-        "${expected_filename_};${CPACK_RPM_FILE_NAME}")
-    elseif(NOT CPACK_RPM_DEBUGINFO_PACKAGE)
-      set(FILE_NAME_DEFINE "%define _rpmfilename ${CPACK_RPM_FILE_NAME}")
-    endif()
-  endif()
-
-  if(CPACK_RPM_PACKAGE_SOURCES) # source rpm
-    set(archive_name_ "${CPACK_RPM_PACKAGE_NAME}-${CPACK_RPM_PACKAGE_VERSION}")
-
-    execute_process(
-        COMMAND ${CMAKE_COMMAND} -E tar "cfvz" "${CPACK_RPM_DIRECTORY}/SOURCES/${archive_name_}.tar.gz" "${CPACK_PACKAGE_FILE_NAME}"
-        WORKING_DIRECTORY ${CPACK_RPM_DIRECTORY}
-      )
-    set(TMP_RPM_SOURCE "Source: ${archive_name_}.tar.gz")
-
-    if(CPACK_RPM_BUILDREQUIRES)
-      set(TMP_RPM_BUILD_REQUIRES "BuildRequires: ${CPACK_RPM_BUILDREQUIRES}")
-    endif()
-
-    # Disable debuginfo packages - srpm generates invalid packages due to
-    # releasing control to cpack to generate binary packages.
-    # Note however that this doesn't prevent cpack to generate debuginfo
-    # packages when run from srpm with --rebuild.
-    set(TMP_RPM_DISABLE_DEBUGINFO "%define debug_package %{nil}")
-
-    if(NOT CPACK_RPM_SOURCE_PKG_PACKAGING_INSTALL_PREFIX)
-      set(CPACK_RPM_SOURCE_PKG_PACKAGING_INSTALL_PREFIX "/")
-    endif()
-
-    set(TMP_RPM_BUILD
-      "
-%build
-mkdir cpack_rpm_build_dir
-cd cpack_rpm_build_dir
-'${CMAKE_COMMAND}' ${CPACK_RPM_SOURCE_PKG_BUILD_PARAMS} -DCPACK_PACKAGING_INSTALL_PREFIX=${CPACK_RPM_SOURCE_PKG_PACKAGING_INSTALL_PREFIX} ../${CPACK_PACKAGE_FILE_NAME}
-make %{?_smp_mflags}" # %{?_smp_mflags} -> -j option
-      )
-    set(TMP_RPM_INSTALL
-      "
-cd cpack_rpm_build_dir
-cpack -G RPM
-mv *.rpm %_rpmdir"
-      )
-    set(TMP_RPM_PREP "%setup -c")
-
-    set(RPMBUILD_FLAGS "-bs")
-
-     file(WRITE ${CPACK_RPM_BINARY_SPECFILE}.in
-      "# Restore old style debuginfo creation for rpm >= 4.14.
-%undefine _debugsource_packages
-%undefine _debuginfo_subpackages
-
-# -*- rpm-spec -*-
-BuildRoot:      %_topdir/\@CPACK_PACKAGE_FILE_NAME\@
-Summary:        \@CPACK_RPM_PACKAGE_SUMMARY\@
-Name:           \@CPACK_RPM_PACKAGE_NAME\@
-Version:        \@CPACK_RPM_PACKAGE_VERSION\@
-Release:        \@CPACK_RPM_PACKAGE_RELEASE\@
-License:        \@CPACK_RPM_PACKAGE_LICENSE\@
-Group:          \@CPACK_RPM_PACKAGE_GROUP\@
-Vendor:         \@CPACK_RPM_PACKAGE_VENDOR\@
-
-\@TMP_RPM_SOURCE\@
-\@TMP_RPM_BUILD_REQUIRES\@
-\@TMP_RPM_BUILDARCH\@
-\@TMP_RPM_PREFIXES\@
-
-\@TMP_RPM_DISABLE_DEBUGINFO\@
-
-%define _rpmdir %_topdir/RPMS
-%define _srcrpmdir %_topdir/SRPMS
-\@FILE_NAME_DEFINE\@
-%define _unpackaged_files_terminate_build 0
-\@TMP_RPM_SPEC_INSTALL_POST\@
-\@CPACK_RPM_SPEC_MORE_DEFINE\@
-\@CPACK_RPM_COMPRESSION_TYPE_TMP\@
-
-%description
-\@CPACK_RPM_PACKAGE_DESCRIPTION\@
-
-# This is a shortcutted spec file generated by CMake RPM generator
-# we skip _install step because CPack does that for us.
-# We do only save CPack installed tree in _prepr
-# and then restore it in build.
-%prep
-\@TMP_RPM_PREP\@
-
-\@TMP_RPM_BUILD\@
-
-#p build
-
-%install
-\@TMP_RPM_INSTALL\@
-
-%clean
-
-%changelog
-\@CPACK_RPM_SPEC_CHANGELOG\@
-"
-    )
-
-  elseif(GENERATE_SPEC_PARTS) # binary rpm with single debuginfo package
-    file(WRITE ${CPACK_RPM_BINARY_SPECFILE}.in
-        "# -*- rpm-spec -*-
-%package -n \@CPACK_RPM_PACKAGE_NAME\@
-Summary:        \@CPACK_RPM_PACKAGE_SUMMARY\@
-Version:        \@CPACK_RPM_PACKAGE_VERSION\@
-Release:        \@CPACK_RPM_PACKAGE_RELEASE\@
-License:        \@CPACK_RPM_PACKAGE_LICENSE\@
-Group:          \@CPACK_RPM_PACKAGE_GROUP\@
-Vendor:         \@CPACK_RPM_PACKAGE_VENDOR\@
-
-\@TMP_RPM_URL\@
-\@TMP_RPM_REQUIRES\@
-\@TMP_RPM_REQUIRES_PRE\@
-\@TMP_RPM_REQUIRES_POST\@
-\@TMP_RPM_REQUIRES_PREUN\@
-\@TMP_RPM_REQUIRES_POSTUN\@
-\@TMP_RPM_PROVIDES\@
-\@TMP_RPM_OBSOLETES\@
-\@TMP_RPM_CONFLICTS\@
-\@TMP_RPM_SUGGESTS\@
-\@TMP_RPM_AUTOPROV\@
-\@TMP_RPM_AUTOREQ\@
-\@TMP_RPM_AUTOREQPROV\@
-\@TMP_RPM_BUILDARCH\@
-\@TMP_RPM_PREFIXES\@
-\@TMP_RPM_EPOCH\@
-
-%description -n \@CPACK_RPM_PACKAGE_NAME\@
-\@CPACK_RPM_PACKAGE_DESCRIPTION\@
-
-%files -n \@CPACK_RPM_PACKAGE_NAME\@
-%defattr(\@TMP_DEFAULT_FILE_PERMISSIONS\@,\@TMP_DEFAULT_USER\@,\@TMP_DEFAULT_GROUP\@,\@TMP_DEFAULT_DIR_PERMISSIONS\@)
-\@CPACK_RPM_INSTALL_FILES\@
-\@CPACK_RPM_ABSOLUTE_INSTALL_FILES\@
-\@CPACK_RPM_USER_INSTALL_FILES\@
-"
-    )
-
-  else()  # binary rpm
-    if(CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE)
-      # find generated spec file and take its name
-      file(GLOB spec_files_ "${CPACK_RPM_DIRECTORY}/SPECS/*.spec")
-
-      foreach(f_ IN LISTS spec_files_)
-        file(READ "${f_}" tmp_)
-        string(APPEND TMP_OTHER_COMPONENTS "\n${tmp_}\n")
-      endforeach()
-    endif()
-
-    # We should generate a USER spec file template:
-    #  - either because the user asked for it : CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE
-    #  - or the user did not provide one : NOT CPACK_RPM_USER_BINARY_SPECFILE
-    set(RPMBUILD_FLAGS "-bb")
-    if(CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE OR NOT CPACK_RPM_USER_BINARY_SPECFILE)
-
-      file(WRITE ${CPACK_RPM_BINARY_SPECFILE}.in
-        "# Restore old style debuginfo creation for rpm >= 4.14.
-%undefine _debugsource_packages
-%undefine _debuginfo_subpackages
-
-# -*- rpm-spec -*-
-BuildRoot:      %_topdir/\@CPACK_PACKAGE_FILE_NAME\@\@CPACK_RPM_PACKAGE_COMPONENT_PART_PATH\@
-Summary:        \@CPACK_RPM_PACKAGE_SUMMARY\@
-Name:           \@CPACK_RPM_PACKAGE_NAME\@
-Version:        \@CPACK_RPM_PACKAGE_VERSION\@
-Release:        \@CPACK_RPM_PACKAGE_RELEASE\@
-License:        \@CPACK_RPM_PACKAGE_LICENSE\@
-Group:          \@CPACK_RPM_PACKAGE_GROUP\@
-Vendor:         \@CPACK_RPM_PACKAGE_VENDOR\@
-
-\@TMP_RPM_URL\@
-\@TMP_RPM_REQUIRES\@
-\@TMP_RPM_REQUIRES_PRE\@
-\@TMP_RPM_REQUIRES_POST\@
-\@TMP_RPM_REQUIRES_PREUN\@
-\@TMP_RPM_REQUIRES_POSTUN\@
-\@TMP_RPM_PROVIDES\@
-\@TMP_RPM_OBSOLETES\@
-\@TMP_RPM_CONFLICTS\@
-\@TMP_RPM_SUGGESTS\@
-\@TMP_RPM_AUTOPROV\@
-\@TMP_RPM_AUTOREQ\@
-\@TMP_RPM_AUTOREQPROV\@
-\@TMP_RPM_BUILDARCH\@
-\@TMP_RPM_PREFIXES\@
-\@TMP_RPM_EPOCH\@
-
-\@TMP_RPM_DEBUGINFO\@
-
-%define _rpmdir %_topdir/RPMS
-%define _srcrpmdir %_topdir/SRPMS
-\@FILE_NAME_DEFINE\@
-%define _unpackaged_files_terminate_build 0
-\@TMP_RPM_SPEC_INSTALL_POST\@
-\@CPACK_RPM_SPEC_MORE_DEFINE\@
-\@CPACK_RPM_COMPRESSION_TYPE_TMP\@
-
-%description
-\@CPACK_RPM_PACKAGE_DESCRIPTION\@
-
-# This is a shortcutted spec file generated by CMake RPM generator
-# we skip _install step because CPack does that for us.
-# We do only save CPack installed tree in _prepr
-# and then restore it in build.
-%prep
-mv $RPM_BUILD_ROOT %_topdir/tmpBBroot
-
-%install
-if [ -e $RPM_BUILD_ROOT ];
-then
-  rm -rf $RPM_BUILD_ROOT
-fi
-mv %_topdir/tmpBBroot $RPM_BUILD_ROOT
-
-\@TMP_RPM_DEBUGINFO_INSTALL\@
-
-%clean
-
-%post
-\@RPM_SYMLINK_POSTINSTALL\@
-\@CPACK_RPM_SPEC_POSTINSTALL\@
-
-%posttrans
-\@CPACK_RPM_SPEC_POSTTRANS\@
-
-%postun
-\@CPACK_RPM_SPEC_POSTUNINSTALL\@
-
-%pre
-\@CPACK_RPM_SPEC_PREINSTALL\@
-
-%pretrans
-\@CPACK_RPM_SPEC_PRETRANS\@
-
-%preun
-\@CPACK_RPM_SPEC_PREUNINSTALL\@
-
-%files
-%defattr(\@TMP_DEFAULT_FILE_PERMISSIONS\@,\@TMP_DEFAULT_USER\@,\@TMP_DEFAULT_GROUP\@,\@TMP_DEFAULT_DIR_PERMISSIONS\@)
-\@CPACK_RPM_INSTALL_FILES\@
-\@CPACK_RPM_ABSOLUTE_INSTALL_FILES\@
-\@CPACK_RPM_USER_INSTALL_FILES\@
-
-%changelog
-\@CPACK_RPM_SPEC_CHANGELOG\@
-
-\@TMP_OTHER_COMPONENTS\@
-"
-      )
-    endif()
-
-    # Stop here if we were asked to only generate a template USER spec file
-    # The generated file may then be used as a template by user who wants
-    # to customize their own spec file.
-    if(CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE)
-      message(FATAL_ERROR "CPackRPM: STOP here Generated USER binary spec file template is: ${CPACK_RPM_BINARY_SPECFILE}.in")
-    endif()
-  endif()
-
-  # After that we may either use a user provided spec file
-  # or generate one using appropriate variables value.
-  if(CPACK_RPM_USER_BINARY_SPECFILE)
-    # User may have specified SPECFILE just use it
-    message("CPackRPM: Will use USER specified spec file: ${CPACK_RPM_USER_BINARY_SPECFILE}")
-    # The user provided file is processed for @var replacement
-    configure_file(${CPACK_RPM_USER_BINARY_SPECFILE} ${CPACK_RPM_BINARY_SPECFILE} @ONLY)
-  else()
-    # No User specified spec file, will use the generated spec file
-    message("CPackRPM: Will use GENERATED spec file: ${CPACK_RPM_BINARY_SPECFILE}")
-    # Note the just created file is processed for @var replacement
-    configure_file(${CPACK_RPM_BINARY_SPECFILE}.in ${CPACK_RPM_BINARY_SPECFILE} @ONLY)
-  endif()
-
-  if(NOT GENERATE_SPEC_PARTS) # generate package
-    if(RPMBUILD_EXECUTABLE)
-      # Now call rpmbuild using the SPECFILE
-      execute_process(
-        COMMAND "${RPMBUILD_EXECUTABLE}" ${RPMBUILD_FLAGS}
-                --define "_topdir ${CPACK_RPM_DIRECTORY}"
-                --buildroot "%_topdir/${CPACK_PACKAGE_FILE_NAME}${CPACK_RPM_PACKAGE_COMPONENT_PART_PATH}"
-                --target "${CPACK_RPM_PACKAGE_ARCHITECTURE}"
-                "${CPACK_RPM_BINARY_SPECFILE}"
-        WORKING_DIRECTORY "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}${CPACK_RPM_PACKAGE_COMPONENT_PART_PATH}"
-        RESULT_VARIABLE CPACK_RPMBUILD_EXEC_RESULT
-        ERROR_FILE "${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_NAME}.err"
-        OUTPUT_FILE "${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_NAME}.out")
-      if(CPACK_RPM_PACKAGE_DEBUG OR CPACK_RPMBUILD_EXEC_RESULT)
-        file(READ ${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_NAME}.err RPMBUILDERR)
-        file(READ ${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_NAME}.out RPMBUILDOUT)
-        message("CPackRPM:Debug: You may consult rpmbuild logs in: ")
-        message("CPackRPM:Debug:    - ${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_NAME}.err")
-        message("CPackRPM:Debug: *** ${RPMBUILDERR} ***")
-        message("CPackRPM:Debug:    - ${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_NAME}.out")
-        message("CPackRPM:Debug: *** ${RPMBUILDOUT} ***")
-      endif()
-    else()
-      if(ALIEN_EXECUTABLE)
-        message(FATAL_ERROR "RPM packaging through alien not done (yet)")
-      endif()
-    endif()
-
-    # find generated rpm files and take their names
-    file(GLOB_RECURSE GENERATED_FILES "${CPACK_RPM_DIRECTORY}/RPMS/*.rpm"
-      "${CPACK_RPM_DIRECTORY}/SRPMS/*.rpm")
-
-    if(NOT GENERATED_FILES)
-      message(FATAL_ERROR "RPM package was not generated! ${CPACK_RPM_DIRECTORY}")
-    endif()
-
-    unset(expected_filenames_)
-    unset(filenames_)
-    if(CPACK_RPM_DEBUGINFO_PACKAGE AND NOT CPACK_RPM_FILE_NAME STREQUAL "RPM-DEFAULT")
-      list(APPEND expected_filenames_
-        "${CPACK_RPM_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}.*\\.rpm")
-      list(APPEND filenames_ "${CPACK_RPM_FILE_NAME}")
-    endif()
-
-    if(CPACK_RPM_DEBUGINFO_PACKAGE)
-      cpack_rpm_variable_fallback("CPACK_RPM_DEBUGINFO_FILE_NAME"
-        "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_DEBUGINFO_FILE_NAME"
-        "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_DEBUGINFO_FILE_NAME"
-        "CPACK_RPM_DEBUGINFO_FILE_NAME")
-
-      if(CPACK_RPM_DEBUGINFO_FILE_NAME AND
-        NOT CPACK_RPM_DEBUGINFO_FILE_NAME STREQUAL "RPM-DEFAULT")
-        list(APPEND expected_filenames_
-          "${CPACK_RPM_PACKAGE_NAME}-debuginfo-${CPACK_PACKAGE_VERSION}.*\\.rpm")
-        string(REPLACE "@cpack_component@" "${CPACK_RPM_PACKAGE_COMPONENT}"
-          CPACK_RPM_DEBUGINFO_FILE_NAME "${CPACK_RPM_DEBUGINFO_FILE_NAME}")
-        list(APPEND filenames_ "${CPACK_RPM_DEBUGINFO_FILE_NAME}")
-      endif()
-    endif()
-
-    # check if other files have to be renamed
-    file(GLOB rename_files_ "${CPACK_RPM_DIRECTORY}/SPECS/*.rpm_name")
-    if(rename_files_)
-      foreach(f_ IN LISTS rename_files_)
-        file(READ "${f_}" tmp_)
-        list(GET tmp_ 0 efn_)
-        list(APPEND expected_filenames_ "${efn_}")
-        list(GET tmp_ 1 fn_)
-        list(APPEND filenames_ "${fn_}")
-      endforeach()
-    endif()
-
-    if(expected_filenames_)
-      foreach(F IN LISTS GENERATED_FILES)
-        unset(matched_)
-        foreach(expected_ IN LISTS expected_filenames_)
-          if(F MATCHES ".*/${expected_}")
-            list(FIND expected_filenames_ "${expected_}" idx_)
-            list(GET filenames_ ${idx_} filename_)
-            get_filename_component(FILE_PATH "${F}" DIRECTORY)
-            file(RENAME "${F}" "${FILE_PATH}/${filename_}")
-            list(APPEND new_files_list_ "${FILE_PATH}/${filename_}")
-            set(matched_ "YES")
-
-            break()
-          endif()
-        endforeach()
-
-        if(NOT matched_)
-          list(APPEND new_files_list_ "${F}")
-        endif()
-      endforeach()
-
-      set(GENERATED_FILES "${new_files_list_}")
-    endif()
-  endif()
-
-  set(GEN_CPACK_OUTPUT_FILES "${GENERATED_FILES}" PARENT_SCOPE)
-
-  if(CPACK_RPM_PACKAGE_DEBUG)
-     message("CPackRPM:Debug: GEN_CPACK_OUTPUT_FILES = ${GENERATED_FILES}")
-  endif()
-endfunction()
-
-cpack_rpm_generate_package()
-
-cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/Internal/CPack/NSIS.template.in b/share/cmake-3.18/Modules/Internal/CPack/NSIS.template.in
deleted file mode 100644
index 6009ce0..0000000
--- a/share/cmake-3.18/Modules/Internal/CPack/NSIS.template.in
+++ /dev/null
@@ -1,979 +0,0 @@
-; CPack install script designed for a nmake build
-
-;--------------------------------
-; You must define these values
-
-  !define VERSION "@CPACK_PACKAGE_VERSION@"
-  !define PATCH  "@CPACK_PACKAGE_VERSION_PATCH@"
-  !define INST_DIR "@CPACK_TEMPORARY_DIRECTORY@"
-
-;--------------------------------
-;Variables
-
-  Var MUI_TEMP
-  Var STARTMENU_FOLDER
-  Var SV_ALLUSERS
-  Var START_MENU
-  Var DO_NOT_ADD_TO_PATH
-  Var ADD_TO_PATH_ALL_USERS
-  Var ADD_TO_PATH_CURRENT_USER
-  Var INSTALL_DESKTOP
-  Var IS_DEFAULT_INSTALLDIR
-;--------------------------------
-;Include Modern UI
-
-  !include "MUI.nsh"
-
-  ;Default installation folder
-  InstallDir "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@"
-
-;--------------------------------
-;General
-
-  ;Name and file
-  Name "@CPACK_NSIS_PACKAGE_NAME@"
-  OutFile "@CPACK_TOPLEVEL_DIRECTORY@/@CPACK_OUTPUT_FILE_NAME@"
-
-  ;Set compression
-  SetCompressor @CPACK_NSIS_COMPRESSOR@
-
-  ;Require administrator access
-  RequestExecutionLevel admin
-
-@CPACK_NSIS_DEFINES@
-@CPACK_NSIS_MANIFEST_DPI_AWARE_CODE@
-
-  !include Sections.nsh
-
-;--- Component support macros: ---
-; The code for the add/remove functionality is from:
-;   http://nsis.sourceforge.net/Add/Remove_Functionality
-; It has been modified slightly and extended to provide
-; inter-component dependencies.
-Var AR_SecFlags
-Var AR_RegFlags
-@CPACK_NSIS_SECTION_SELECTED_VARS@
-
-; Loads the "selected" flag for the section named SecName into the
-; variable VarName.
-!macro LoadSectionSelectedIntoVar SecName VarName
- SectionGetFlags ${${SecName}} $${VarName}
- IntOp $${VarName} $${VarName} & ${SF_SELECTED}  ;Turn off all other bits
-!macroend
-
-; Loads the value of a variable... can we get around this?
-!macro LoadVar VarName
-  IntOp $R0 0 + $${VarName}
-!macroend
-
-; Sets the value of a variable
-!macro StoreVar VarName IntValue
-  IntOp $${VarName} 0 + ${IntValue}
-!macroend
-
-!macro InitSection SecName
-  ;  This macro reads component installed flag from the registry and
-  ;changes checked state of the section on the components page.
-  ;Input: section index constant name specified in Section command.
-
-  ClearErrors
-  ;Reading component status from registry
-  ReadRegDWORD $AR_RegFlags HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" "Installed"
-  IfErrors "default_${SecName}"
-    ;Status will stay default if registry value not found
-    ;(component was never installed)
-  IntOp $AR_RegFlags $AR_RegFlags & ${SF_SELECTED} ;Turn off all other bits
-  SectionGetFlags ${${SecName}} $AR_SecFlags  ;Reading default section flags
-  IntOp $AR_SecFlags $AR_SecFlags & 0xFFFE  ;Turn lowest (enabled) bit off
-  IntOp $AR_SecFlags $AR_RegFlags | $AR_SecFlags      ;Change lowest bit
-
-  ; Note whether this component was installed before
-  !insertmacro StoreVar ${SecName}_was_installed $AR_RegFlags
-  IntOp $R0 $AR_RegFlags & $AR_RegFlags
-
-  ;Writing modified flags
-  SectionSetFlags ${${SecName}} $AR_SecFlags
-
- "default_${SecName}:"
- !insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected
-!macroend
-
-!macro FinishSection SecName
-  ;  This macro reads section flag set by user and removes the section
-  ;if it is not selected.
-  ;Then it writes component installed flag to registry
-  ;Input: section index constant name specified in Section command.
-
-  SectionGetFlags ${${SecName}} $AR_SecFlags  ;Reading section flags
-  ;Checking lowest bit:
-  IntOp $AR_SecFlags $AR_SecFlags & ${SF_SELECTED}
-  IntCmp $AR_SecFlags 1 "leave_${SecName}"
-    ;Section is not selected:
-    ;Calling Section uninstall macro and writing zero installed flag
-    !insertmacro "Remove_${${SecName}}"
-    WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \
-  "Installed" 0
-    Goto "exit_${SecName}"
-
- "leave_${SecName}:"
-    ;Section is selected:
-    WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \
-  "Installed" 1
-
- "exit_${SecName}:"
-!macroend
-
-!macro RemoveSection_CPack SecName
-  ;  This macro is used to call section's Remove_... macro
-  ;from the uninstaller.
-  ;Input: section index constant name specified in Section command.
-
-  !insertmacro "Remove_${${SecName}}"
-!macroend
-
-; Determine whether the selection of SecName changed
-!macro MaybeSelectionChanged SecName
-  !insertmacro LoadVar ${SecName}_selected
-  SectionGetFlags ${${SecName}} $R1
-  IntOp $R1 $R1 & ${SF_SELECTED} ;Turn off all other bits
-
-  ; See if the status has changed:
-  IntCmp $R0 $R1 "${SecName}_unchanged"
-  !insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected
-
-  IntCmp $R1 ${SF_SELECTED} "${SecName}_was_selected"
-  !insertmacro "Deselect_required_by_${SecName}"
-  goto "${SecName}_unchanged"
-
-  "${SecName}_was_selected:"
-  !insertmacro "Select_${SecName}_depends"
-
-  "${SecName}_unchanged:"
-!macroend
-;--- End of Add/Remove macros ---
-
-;--------------------------------
-;Interface Settings
-
-  !define MUI_HEADERIMAGE
-  !define MUI_ABORTWARNING
-
-;----------------------------------------
-; based upon a script of "Written by KiCHiK 2003-01-18 05:57:02"
-;----------------------------------------
-!verbose 3
-!include "WinMessages.NSH"
-!verbose 4
-;====================================================
-; get_NT_environment
-;     Returns: the selected environment
-;     Output : head of the stack
-;====================================================
-!macro select_NT_profile UN
-Function ${UN}select_NT_profile
-   StrCmp $ADD_TO_PATH_ALL_USERS "1" 0 environment_single
-      DetailPrint "Selected environment for all users"
-      Push "all"
-      Return
-   environment_single:
-      DetailPrint "Selected environment for current user only."
-      Push "current"
-      Return
-FunctionEnd
-!macroend
-!insertmacro select_NT_profile ""
-!insertmacro select_NT_profile "un."
-;----------------------------------------------------
-!define NT_current_env 'HKCU "Environment"'
-!define NT_all_env     'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"'
-
-!ifndef WriteEnvStr_RegKey
-  !ifdef ALL_USERS
-    !define WriteEnvStr_RegKey \
-       'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"'
-  !else
-    !define WriteEnvStr_RegKey 'HKCU "Environment"'
-  !endif
-!endif
-
-; AddToPath - Adds the given dir to the search path.
-;        Input - head of the stack
-;        Note - Win9x systems requires reboot
-
-Function AddToPath
-  Exch $0
-  Push $1
-  Push $2
-  Push $3
-
-  # don't add if the path doesn't exist
-  IfFileExists "$0\*.*" "" AddToPath_done
-
-  ReadEnvStr $1 PATH
-  ; if the path is too long for a NSIS variable NSIS will return a 0
-  ; length string.  If we find that, then warn and skip any path
-  ; modification as it will trash the existing path.
-  StrLen $2 $1
-  IntCmp $2 0 CheckPathLength_ShowPathWarning CheckPathLength_Done CheckPathLength_Done
-    CheckPathLength_ShowPathWarning:
-    Messagebox MB_OK|MB_ICONEXCLAMATION "Warning! PATH too long installer unable to modify PATH!"
-    Goto AddToPath_done
-  CheckPathLength_Done:
-  Push "$1;"
-  Push "$0;"
-  Call StrStr
-  Pop $2
-  StrCmp $2 "" "" AddToPath_done
-  Push "$1;"
-  Push "$0\;"
-  Call StrStr
-  Pop $2
-  StrCmp $2 "" "" AddToPath_done
-  GetFullPathName /SHORT $3 $0
-  Push "$1;"
-  Push "$3;"
-  Call StrStr
-  Pop $2
-  StrCmp $2 "" "" AddToPath_done
-  Push "$1;"
-  Push "$3\;"
-  Call StrStr
-  Pop $2
-  StrCmp $2 "" "" AddToPath_done
-
-  Call IsNT
-  Pop $1
-  StrCmp $1 1 AddToPath_NT
-    ; Not on NT
-    StrCpy $1 $WINDIR 2
-    FileOpen $1 "$1\autoexec.bat" a
-    FileSeek $1 -1 END
-    FileReadByte $1 $2
-    IntCmp $2 26 0 +2 +2 # DOS EOF
-      FileSeek $1 -1 END # write over EOF
-    FileWrite $1 "$\r$\nSET PATH=%PATH%;$3$\r$\n"
-    FileClose $1
-    SetRebootFlag true
-    Goto AddToPath_done
-
-  AddToPath_NT:
-    StrCmp $ADD_TO_PATH_ALL_USERS "1" ReadAllKey
-      ReadRegStr $1 ${NT_current_env} "PATH"
-      Goto DoTrim
-    ReadAllKey:
-      ReadRegStr $1 ${NT_all_env} "PATH"
-    DoTrim:
-    StrCmp $1 "" AddToPath_NTdoIt
-      Push $1
-      Call Trim
-      Pop $1
-      StrCpy $0 "$1;$0"
-    AddToPath_NTdoIt:
-      StrCmp $ADD_TO_PATH_ALL_USERS "1" WriteAllKey
-        WriteRegExpandStr ${NT_current_env} "PATH" $0
-        Goto DoSend
-      WriteAllKey:
-        WriteRegExpandStr ${NT_all_env} "PATH" $0
-      DoSend:
-      SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
-
-  AddToPath_done:
-    Pop $3
-    Pop $2
-    Pop $1
-    Pop $0
-FunctionEnd
-
-
-; RemoveFromPath - Remove a given dir from the path
-;     Input: head of the stack
-
-Function un.RemoveFromPath
-  Exch $0
-  Push $1
-  Push $2
-  Push $3
-  Push $4
-  Push $5
-  Push $6
-
-  IntFmt $6 "%c" 26 # DOS EOF
-
-  Call un.IsNT
-  Pop $1
-  StrCmp $1 1 unRemoveFromPath_NT
-    ; Not on NT
-    StrCpy $1 $WINDIR 2
-    FileOpen $1 "$1\autoexec.bat" r
-    GetTempFileName $4
-    FileOpen $2 $4 w
-    GetFullPathName /SHORT $0 $0
-    StrCpy $0 "SET PATH=%PATH%;$0"
-    Goto unRemoveFromPath_dosLoop
-
-    unRemoveFromPath_dosLoop:
-      FileRead $1 $3
-      StrCpy $5 $3 1 -1 # read last char
-      StrCmp $5 $6 0 +2 # if DOS EOF
-        StrCpy $3 $3 -1 # remove DOS EOF so we can compare
-      StrCmp $3 "$0$\r$\n" unRemoveFromPath_dosLoopRemoveLine
-      StrCmp $3 "$0$\n" unRemoveFromPath_dosLoopRemoveLine
-      StrCmp $3 "$0" unRemoveFromPath_dosLoopRemoveLine
-      StrCmp $3 "" unRemoveFromPath_dosLoopEnd
-      FileWrite $2 $3
-      Goto unRemoveFromPath_dosLoop
-      unRemoveFromPath_dosLoopRemoveLine:
-        SetRebootFlag true
-        Goto unRemoveFromPath_dosLoop
-
-    unRemoveFromPath_dosLoopEnd:
-      FileClose $2
-      FileClose $1
-      StrCpy $1 $WINDIR 2
-      Delete "$1\autoexec.bat"
-      CopyFiles /SILENT $4 "$1\autoexec.bat"
-      Delete $4
-      Goto unRemoveFromPath_done
-
-  unRemoveFromPath_NT:
-    StrCmp $ADD_TO_PATH_ALL_USERS "1" unReadAllKey
-      ReadRegStr $1 ${NT_current_env} "PATH"
-      Goto unDoTrim
-    unReadAllKey:
-      ReadRegStr $1 ${NT_all_env} "PATH"
-    unDoTrim:
-    StrCpy $5 $1 1 -1 # copy last char
-    StrCmp $5 ";" +2 # if last char != ;
-      StrCpy $1 "$1;" # append ;
-    Push $1
-    Push "$0;"
-    Call un.StrStr ; Find `$0;` in $1
-    Pop $2 ; pos of our dir
-    StrCmp $2 "" unRemoveFromPath_done
-      ; else, it is in path
-      # $0 - path to add
-      # $1 - path var
-      StrLen $3 "$0;"
-      StrLen $4 $2
-      StrCpy $5 $1 -$4 # $5 is now the part before the path to remove
-      StrCpy $6 $2 "" $3 # $6 is now the part after the path to remove
-      StrCpy $3 $5$6
-
-      StrCpy $5 $3 1 -1 # copy last char
-      StrCmp $5 ";" 0 +2 # if last char == ;
-        StrCpy $3 $3 -1 # remove last char
-
-      StrCmp $ADD_TO_PATH_ALL_USERS "1" unWriteAllKey
-        WriteRegExpandStr ${NT_current_env} "PATH" $3
-        Goto unDoSend
-      unWriteAllKey:
-        WriteRegExpandStr ${NT_all_env} "PATH" $3
-      unDoSend:
-      SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
-
-  unRemoveFromPath_done:
-    Pop $6
-    Pop $5
-    Pop $4
-    Pop $3
-    Pop $2
-    Pop $1
-    Pop $0
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Uninstall sutff
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-###########################################
-#            Utility Functions            #
-###########################################
-
-;====================================================
-; IsNT - Returns 1 if the current system is NT, 0
-;        otherwise.
-;     Output: head of the stack
-;====================================================
-; IsNT
-; no input
-; output, top of the stack = 1 if NT or 0 if not
-;
-; Usage:
-;   Call IsNT
-;   Pop $R0
-;  ($R0 at this point is 1 or 0)
-
-!macro IsNT un
-Function ${un}IsNT
-  Push $0
-  ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
-  StrCmp $0 "" 0 IsNT_yes
-  ; we are not NT.
-  Pop $0
-  Push 0
-  Return
-
-  IsNT_yes:
-    ; NT!!!
-    Pop $0
-    Push 1
-FunctionEnd
-!macroend
-!insertmacro IsNT ""
-!insertmacro IsNT "un."
-
-; StrStr
-; input, top of stack = string to search for
-;        top of stack-1 = string to search in
-; output, top of stack (replaces with the portion of the string remaining)
-; modifies no other variables.
-;
-; Usage:
-;   Push "this is a long ass string"
-;   Push "ass"
-;   Call StrStr
-;   Pop $R0
-;  ($R0 at this point is "ass string")
-
-!macro StrStr un
-Function ${un}StrStr
-Exch $R1 ; st=haystack,old$R1, $R1=needle
-  Exch    ; st=old$R1,haystack
-  Exch $R2 ; st=old$R1,old$R2, $R2=haystack
-  Push $R3
-  Push $R4
-  Push $R5
-  StrLen $R3 $R1
-  StrCpy $R4 0
-  ; $R1=needle
-  ; $R2=haystack
-  ; $R3=len(needle)
-  ; $R4=cnt
-  ; $R5=tmp
-  loop:
-    StrCpy $R5 $R2 $R3 $R4
-    StrCmp $R5 $R1 done
-    StrCmp $R5 "" done
-    IntOp $R4 $R4 + 1
-    Goto loop
-done:
-  StrCpy $R1 $R2 "" $R4
-  Pop $R5
-  Pop $R4
-  Pop $R3
-  Pop $R2
-  Exch $R1
-FunctionEnd
-!macroend
-!insertmacro StrStr ""
-!insertmacro StrStr "un."
-
-Function Trim ; Added by Pelaca
-	Exch $R1
-	Push $R2
-Loop:
-	StrCpy $R2 "$R1" 1 -1
-	StrCmp "$R2" " " RTrim
-	StrCmp "$R2" "$\n" RTrim
-	StrCmp "$R2" "$\r" RTrim
-	StrCmp "$R2" ";" RTrim
-	GoTo Done
-RTrim:
-	StrCpy $R1 "$R1" -1
-	Goto Loop
-Done:
-	Pop $R2
-	Exch $R1
-FunctionEnd
-
-Function ConditionalAddToRegisty
-  Pop $0
-  Pop $1
-  StrCmp "$0" "" ConditionalAddToRegisty_EmptyString
-    WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" \
-    "$1" "$0"
-    ;MessageBox MB_OK "Set Registry: '$1' to '$0'"
-    DetailPrint "Set install registry entry: '$1' to '$0'"
-  ConditionalAddToRegisty_EmptyString:
-FunctionEnd
-
-;--------------------------------
-
-!ifdef CPACK_USES_DOWNLOAD
-Function DownloadFile
-    IfFileExists $INSTDIR\* +2
-    CreateDirectory $INSTDIR
-    Pop $0
-
-    ; Skip if already downloaded
-    IfFileExists $INSTDIR\$0 0 +2
-    Return
-
-    StrCpy $1 "@CPACK_DOWNLOAD_SITE@"
-
-  try_again:
-    NSISdl::download "$1/$0" "$INSTDIR\$0"
-
-    Pop $1
-    StrCmp $1 "success" success
-    StrCmp $1 "Cancelled" cancel
-    MessageBox MB_OK "Download failed: $1"
-  cancel:
-    Return
-  success:
-FunctionEnd
-!endif
-
-;--------------------------------
-; Define some macro setting for the gui
-@CPACK_NSIS_INSTALLER_MUI_ICON_CODE@
-@CPACK_NSIS_INSTALLER_ICON_CODE@
-@CPACK_NSIS_INSTALLER_MUI_WELCOMEFINISH_CODE@
-@CPACK_NSIS_INSTALLER_MUI_UNWELCOMEFINISH_CODE@
-@CPACK_NSIS_INSTALLER_MUI_COMPONENTS_DESC@
-@CPACK_NSIS_INSTALLER_MUI_FINISHPAGE_RUN_CODE@
-
-;--------------------------------
-;Pages
-  @CPACK_NSIS_INSTALLER_WELCOME_TITLE_CODE@
-  @CPACK_NSIS_INSTALLER_WELCOME_TITLE_3LINES_CODE@
-  !insertmacro MUI_PAGE_WELCOME
-
-  !insertmacro MUI_PAGE_LICENSE "@CPACK_RESOURCE_FILE_LICENSE@"
-  Page custom InstallOptionsPage
-  !insertmacro MUI_PAGE_DIRECTORY
-
-  ;Start Menu Folder Page Configuration
-  !define MUI_STARTMENUPAGE_REGISTRY_ROOT "SHCTX"
-  !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@"
-  !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
-  !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER
-
-  @CPACK_NSIS_PAGE_COMPONENTS@
-
-  !insertmacro MUI_PAGE_INSTFILES
-  @CPACK_NSIS_INSTALLER_FINISH_TITLE_CODE@
-  @CPACK_NSIS_INSTALLER_FINISH_TITLE_3LINES_CODE@
-  !insertmacro MUI_PAGE_FINISH
-
-  !insertmacro MUI_UNPAGE_CONFIRM
-  !insertmacro MUI_UNPAGE_INSTFILES
-
-;--------------------------------
-;Languages
-
-  !insertmacro MUI_LANGUAGE "English" ;first language is the default language
-  !insertmacro MUI_LANGUAGE "Albanian"
-  !insertmacro MUI_LANGUAGE "Arabic"
-  !insertmacro MUI_LANGUAGE "Basque"
-  !insertmacro MUI_LANGUAGE "Belarusian"
-  !insertmacro MUI_LANGUAGE "Bosnian"
-  !insertmacro MUI_LANGUAGE "Breton"
-  !insertmacro MUI_LANGUAGE "Bulgarian"
-  !insertmacro MUI_LANGUAGE "Croatian"
-  !insertmacro MUI_LANGUAGE "Czech"
-  !insertmacro MUI_LANGUAGE "Danish"
-  !insertmacro MUI_LANGUAGE "Dutch"
-  !insertmacro MUI_LANGUAGE "Estonian"
-  !insertmacro MUI_LANGUAGE "Farsi"
-  !insertmacro MUI_LANGUAGE "Finnish"
-  !insertmacro MUI_LANGUAGE "French"
-  !insertmacro MUI_LANGUAGE "German"
-  !insertmacro MUI_LANGUAGE "Greek"
-  !insertmacro MUI_LANGUAGE "Hebrew"
-  !insertmacro MUI_LANGUAGE "Hungarian"
-  !insertmacro MUI_LANGUAGE "Icelandic"
-  !insertmacro MUI_LANGUAGE "Indonesian"
-  !insertmacro MUI_LANGUAGE "Irish"
-  !insertmacro MUI_LANGUAGE "Italian"
-  !insertmacro MUI_LANGUAGE "Japanese"
-  !insertmacro MUI_LANGUAGE "Korean"
-  !insertmacro MUI_LANGUAGE "Kurdish"
-  !insertmacro MUI_LANGUAGE "Latvian"
-  !insertmacro MUI_LANGUAGE "Lithuanian"
-  !insertmacro MUI_LANGUAGE "Luxembourgish"
-  !insertmacro MUI_LANGUAGE "Macedonian"
-  !insertmacro MUI_LANGUAGE "Malay"
-  !insertmacro MUI_LANGUAGE "Mongolian"
-  !insertmacro MUI_LANGUAGE "Norwegian"
-  !insertmacro MUI_LANGUAGE "Polish"
-  !insertmacro MUI_LANGUAGE "Portuguese"
-  !insertmacro MUI_LANGUAGE "PortugueseBR"
-  !insertmacro MUI_LANGUAGE "Romanian"
-  !insertmacro MUI_LANGUAGE "Russian"
-  !insertmacro MUI_LANGUAGE "Serbian"
-  !insertmacro MUI_LANGUAGE "SerbianLatin"
-  !insertmacro MUI_LANGUAGE "SimpChinese"
-  !insertmacro MUI_LANGUAGE "Slovak"
-  !insertmacro MUI_LANGUAGE "Slovenian"
-  !insertmacro MUI_LANGUAGE "Spanish"
-  !insertmacro MUI_LANGUAGE "Swedish"
-  !insertmacro MUI_LANGUAGE "Thai"
-  !insertmacro MUI_LANGUAGE "TradChinese"
-  !insertmacro MUI_LANGUAGE "Turkish"
-  !insertmacro MUI_LANGUAGE "Ukrainian"
-  !insertmacro MUI_LANGUAGE "Welsh"
-
-;--------------------------------
-;Reserve Files
-
-  ;These files should be inserted before other files in the data block
-  ;Keep these lines before any File command
-  ;Only for solid compression (by default, solid compression is enabled for BZIP2 and LZMA)
-
-  ReserveFile "NSIS.InstallOptions.ini"
-  !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
-
-  ; for UserInfo::GetName and UserInfo::GetAccountType
-  ReserveFile /plugin 'UserInfo.dll'
-
-;--------------------------------
-; Installation types
-@CPACK_NSIS_INSTALLATION_TYPES@
-
-;--------------------------------
-; Component sections
-@CPACK_NSIS_COMPONENT_SECTIONS@
-
-;--------------------------------
-;Installer Sections
-
-Section "-Core installation"
-  ;Use the entire tree produced by the INSTALL target.  Keep the
-  ;list of directories here in sync with the RMDir commands below.
-  SetOutPath "$INSTDIR"
-  @CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS@
-  @CPACK_NSIS_FULL_INSTALL@
-
-  ;Store installation folder
-  WriteRegStr SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "" $INSTDIR
-
-  ;Create uninstaller
-  WriteUninstaller "$INSTDIR\@CPACK_NSIS_UNINSTALL_NAME@.exe"
-  Push "DisplayName"
-  Push "@CPACK_NSIS_DISPLAY_NAME@"
-  Call ConditionalAddToRegisty
-  Push "DisplayVersion"
-  Push "@CPACK_PACKAGE_VERSION@"
-  Call ConditionalAddToRegisty
-  Push "Publisher"
-  Push "@CPACK_PACKAGE_VENDOR@"
-  Call ConditionalAddToRegisty
-  Push "UninstallString"
-  Push "$INSTDIR\@CPACK_NSIS_UNINSTALL_NAME@.exe"
-  Call ConditionalAddToRegisty
-  Push "NoRepair"
-  Push "1"
-  Call ConditionalAddToRegisty
-
-  !ifdef CPACK_NSIS_ADD_REMOVE
-  ;Create add/remove functionality
-  Push "ModifyPath"
-  Push "$INSTDIR\AddRemove.exe"
-  Call ConditionalAddToRegisty
-  !else
-  Push "NoModify"
-  Push "1"
-  Call ConditionalAddToRegisty
-  !endif
-
-  ; Optional registration
-  Push "DisplayIcon"
-  Push "$INSTDIR\@CPACK_NSIS_INSTALLED_ICON_NAME@"
-  Call ConditionalAddToRegisty
-  Push "HelpLink"
-  Push "@CPACK_NSIS_HELP_LINK@"
-  Call ConditionalAddToRegisty
-  Push "URLInfoAbout"
-  Push "@CPACK_NSIS_URL_INFO_ABOUT@"
-  Call ConditionalAddToRegisty
-  Push "Contact"
-  Push "@CPACK_NSIS_CONTACT@"
-  Call ConditionalAddToRegisty
-  !insertmacro MUI_INSTALLOPTIONS_READ $INSTALL_DESKTOP "NSIS.InstallOptions.ini" "Field 5" "State"
-  !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
-
-  ;Create shortcuts
-  CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER"
-@CPACK_NSIS_CREATE_ICONS@
-@CPACK_NSIS_CREATE_ICONS_EXTRA@
-  CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\@CPACK_NSIS_UNINSTALL_NAME@.exe"
-
-  ;Read a value from an InstallOptions INI file
-  !insertmacro MUI_INSTALLOPTIONS_READ $DO_NOT_ADD_TO_PATH "NSIS.InstallOptions.ini" "Field 2" "State"
-  !insertmacro MUI_INSTALLOPTIONS_READ $ADD_TO_PATH_ALL_USERS "NSIS.InstallOptions.ini" "Field 3" "State"
-  !insertmacro MUI_INSTALLOPTIONS_READ $ADD_TO_PATH_CURRENT_USER "NSIS.InstallOptions.ini" "Field 4" "State"
-
-  ; Write special uninstall registry entries
-  Push "StartMenu"
-  Push "$STARTMENU_FOLDER"
-  Call ConditionalAddToRegisty
-  Push "DoNotAddToPath"
-  Push "$DO_NOT_ADD_TO_PATH"
-  Call ConditionalAddToRegisty
-  Push "AddToPathAllUsers"
-  Push "$ADD_TO_PATH_ALL_USERS"
-  Call ConditionalAddToRegisty
-  Push "AddToPathCurrentUser"
-  Push "$ADD_TO_PATH_CURRENT_USER"
-  Call ConditionalAddToRegisty
-  Push "InstallToDesktop"
-  Push "$INSTALL_DESKTOP"
-  Call ConditionalAddToRegisty
-
-  !insertmacro MUI_STARTMENU_WRITE_END
-
-@CPACK_NSIS_EXTRA_INSTALL_COMMANDS@
-
-SectionEnd
-
-Section "-Add to path"
-  Push $INSTDIR\bin
-  StrCmp "@CPACK_NSIS_MODIFY_PATH@" "ON" 0 doNotAddToPath
-  StrCmp $DO_NOT_ADD_TO_PATH "1" doNotAddToPath 0
-    Call AddToPath
-  doNotAddToPath:
-SectionEnd
-
-;--------------------------------
-; Create custom pages
-Function InstallOptionsPage
-  !insertmacro MUI_HEADER_TEXT "Install Options" "Choose options for installing @CPACK_NSIS_PACKAGE_NAME@"
-  !insertmacro MUI_INSTALLOPTIONS_DISPLAY "NSIS.InstallOptions.ini"
-
-FunctionEnd
-
-;--------------------------------
-; determine admin versus local install
-Function un.onInit
-
-  ClearErrors
-  UserInfo::GetName
-  IfErrors noLM
-  Pop $0
-  UserInfo::GetAccountType
-  Pop $1
-  StrCmp $1 "Admin" 0 +3
-    SetShellVarContext all
-    ;MessageBox MB_OK 'User "$0" is in the Admin group'
-    Goto done
-  StrCmp $1 "Power" 0 +3
-    SetShellVarContext all
-    ;MessageBox MB_OK 'User "$0" is in the Power Users group'
-    Goto done
-
-  noLM:
-    ;Get installation folder from registry if available
-
-  done:
-
-FunctionEnd
-
-;--- Add/Remove callback functions: ---
-!macro SectionList MacroName
-  ;This macro used to perform operation on multiple sections.
-  ;List all of your components in following manner here.
-@CPACK_NSIS_COMPONENT_SECTION_LIST@
-!macroend
-
-Section -FinishComponents
-  ;Removes unselected components and writes component status to registry
-  !insertmacro SectionList "FinishSection"
-
-!ifdef CPACK_NSIS_ADD_REMOVE
-  ; Get the name of the installer executable
-  System::Call 'kernel32::GetModuleFileNameA(i 0, t .R0, i 1024) i r1'
-  StrCpy $R3 $R0
-
-  ; Strip off the last 13 characters, to see if we have AddRemove.exe
-  StrLen $R1 $R0
-  IntOp $R1 $R0 - 13
-  StrCpy $R2 $R0 13 $R1
-  StrCmp $R2 "AddRemove.exe" addremove_installed
-
-  ; We're not running AddRemove.exe, so install it
-  CopyFiles $R3 $INSTDIR\AddRemove.exe
-
-  addremove_installed:
-!endif
-SectionEnd
-;--- End of Add/Remove callback functions ---
-
-;--------------------------------
-; Component dependencies
-Function .onSelChange
-  !insertmacro SectionList MaybeSelectionChanged
-FunctionEnd
-
-;--------------------------------
-;Uninstaller Section
-
-Section "Uninstall"
-  ReadRegStr $START_MENU SHCTX \
-   "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "StartMenu"
-  ;MessageBox MB_OK "Start menu is in: $START_MENU"
-  ReadRegStr $DO_NOT_ADD_TO_PATH SHCTX \
-    "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "DoNotAddToPath"
-  ReadRegStr $ADD_TO_PATH_ALL_USERS SHCTX \
-    "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "AddToPathAllUsers"
-  ReadRegStr $ADD_TO_PATH_CURRENT_USER SHCTX \
-    "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "AddToPathCurrentUser"
-  ;MessageBox MB_OK "Add to path: $DO_NOT_ADD_TO_PATH all users: $ADD_TO_PATH_ALL_USERS"
-  ReadRegStr $INSTALL_DESKTOP SHCTX \
-    "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "InstallToDesktop"
-  ;MessageBox MB_OK "Install to desktop: $INSTALL_DESKTOP "
-
-@CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS@
-
-  ;Remove files we installed.
-  ;Keep the list of directories here in sync with the File commands above.
-@CPACK_NSIS_DELETE_FILES@
-@CPACK_NSIS_DELETE_DIRECTORIES@
-
-!ifdef CPACK_NSIS_ADD_REMOVE
-  ;Remove the add/remove program
-  Delete "$INSTDIR\AddRemove.exe"
-!endif
-
-  ;Remove the uninstaller itself.
-  Delete "$INSTDIR\@CPACK_NSIS_UNINSTALL_NAME@.exe"
-  DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@"
-
-  ;Remove the installation directory if it is empty.
-  RMDir "$INSTDIR"
-
-  ; Remove the registry entries.
-  DeleteRegKey SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@"
-
-  ; Removes all optional components
-  !insertmacro SectionList "RemoveSection_CPack"
-
-  !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
-
-  Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk"
-@CPACK_NSIS_DELETE_ICONS@
-@CPACK_NSIS_DELETE_ICONS_EXTRA@
-
-  ;Delete empty start menu parent directories
-  StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP"
-
-  startMenuDeleteLoop:
-    ClearErrors
-    RMDir $MUI_TEMP
-    GetFullPathName $MUI_TEMP "$MUI_TEMP\.."
-
-    IfErrors startMenuDeleteLoopDone
-
-    StrCmp "$MUI_TEMP" "$SMPROGRAMS" startMenuDeleteLoopDone startMenuDeleteLoop
-  startMenuDeleteLoopDone:
-
-  ; If the user changed the shortcut, then untinstall may not work. This should
-  ; try to fix it.
-  StrCpy $MUI_TEMP "$START_MENU"
-  Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk"
-@CPACK_NSIS_DELETE_ICONS_EXTRA@
-
-  ;Delete empty start menu parent directories
-  StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP"
-
-  secondStartMenuDeleteLoop:
-    ClearErrors
-    RMDir $MUI_TEMP
-    GetFullPathName $MUI_TEMP "$MUI_TEMP\.."
-
-    IfErrors secondStartMenuDeleteLoopDone
-
-    StrCmp "$MUI_TEMP" "$SMPROGRAMS" secondStartMenuDeleteLoopDone secondStartMenuDeleteLoop
-  secondStartMenuDeleteLoopDone:
-
-  DeleteRegKey /ifempty SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@"
-
-  Push $INSTDIR\bin
-  StrCmp $DO_NOT_ADD_TO_PATH_ "1" doNotRemoveFromPath 0
-    Call un.RemoveFromPath
-  doNotRemoveFromPath:
-SectionEnd
-
-;--------------------------------
-; determine admin versus local install
-; Is install for "AllUsers" or "JustMe"?
-; Default to "JustMe" - set to "AllUsers" if admin or on Win9x
-; This function is used for the very first "custom page" of the installer.
-; This custom page does not show up visibly, but it executes prior to the
-; first visible page and sets up $INSTDIR properly...
-; Choose different default installation folder based on SV_ALLUSERS...
-; "Program Files" for AllUsers, "My Documents" for JustMe...
-
-Function .onInit
-  StrCmp "@CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL@" "ON" 0 inst
-
-  ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "UninstallString"
-  StrCmp $0 "" inst
-
-  MessageBox MB_YESNOCANCEL|MB_ICONEXCLAMATION \
-  "@CPACK_NSIS_PACKAGE_NAME@ is already installed. $\n$\nDo you want to uninstall the old version before installing the new one?" \
-  /SD IDYES IDYES uninst IDNO inst
-  Abort
-
-;Run the uninstaller
-uninst:
-  ClearErrors
-  StrLen $2 "\Uninstall.exe"
-  StrCpy $3 $0 -$2 # remove "\Uninstall.exe" from UninstallString to get path
-  ExecWait '"$0" /S _?=$3' ;Do not copy the uninstaller to a temp file
-
-  IfErrors uninst_failed inst
-uninst_failed:
-  MessageBox MB_OK|MB_ICONSTOP "Uninstall failed."
-  Abort
-
-
-inst:
-  ; Reads components status for registry
-  !insertmacro SectionList "InitSection"
-
-  ; check to see if /D has been used to change
-  ; the install directory by comparing it to the
-  ; install directory that is expected to be the
-  ; default
-  StrCpy $IS_DEFAULT_INSTALLDIR 0
-  StrCmp "$INSTDIR" "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" 0 +2
-    StrCpy $IS_DEFAULT_INSTALLDIR 1
-
-  StrCpy $SV_ALLUSERS "JustMe"
-  ; if default install dir then change the default
-  ; if it is installed for JustMe
-  StrCmp "$IS_DEFAULT_INSTALLDIR" "1" 0 +2
-    StrCpy $INSTDIR "$DOCUMENTS\@CPACK_PACKAGE_INSTALL_DIRECTORY@"
-
-  ClearErrors
-  UserInfo::GetName
-  IfErrors noLM
-  Pop $0
-  UserInfo::GetAccountType
-  Pop $1
-  StrCmp $1 "Admin" 0 +4
-    SetShellVarContext all
-    ;MessageBox MB_OK 'User "$0" is in the Admin group'
-    StrCpy $SV_ALLUSERS "AllUsers"
-    Goto done
-  StrCmp $1 "Power" 0 +4
-    SetShellVarContext all
-    ;MessageBox MB_OK 'User "$0" is in the Power Users group'
-    StrCpy $SV_ALLUSERS "AllUsers"
-    Goto done
-
-  noLM:
-    StrCpy $SV_ALLUSERS "AllUsers"
-    ;Get installation folder from registry if available
-
-  done:
-  StrCmp $SV_ALLUSERS "AllUsers" 0 +3
-    StrCmp "$IS_DEFAULT_INSTALLDIR" "1" 0 +2
-      StrCpy $INSTDIR "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@"
-
-  StrCmp "@CPACK_NSIS_MODIFY_PATH@" "ON" 0 noOptionsPage
-    !insertmacro MUI_INSTALLOPTIONS_EXTRACT "NSIS.InstallOptions.ini"
-
-  noOptionsPage:
-FunctionEnd
diff --git a/share/cmake-3.18/Modules/Internal/CPack/WIX.template.in b/share/cmake-3.18/Modules/Internal/CPack/WIX.template.in
deleted file mode 100644
index c4fc83a..0000000
--- a/share/cmake-3.18/Modules/Internal/CPack/WIX.template.in
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<?include "cpack_variables.wxi"?>
-
-<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
-    RequiredVersion="3.6.3303.0">
-
-    <Product Id="$(var.CPACK_WIX_PRODUCT_GUID)"
-        Name="$(var.CPACK_PACKAGE_NAME)"
-        Language="1033"
-        Version="$(var.CPACK_PACKAGE_VERSION)"
-        Manufacturer="$(var.CPACK_PACKAGE_VENDOR)"
-        UpgradeCode="$(var.CPACK_WIX_UPGRADE_GUID)">
-
-        <Package InstallerVersion="301" Compressed="yes"/>
-
-        <Media Id="1" Cabinet="media1.cab" EmbedCab="yes"/>
-
-        <MajorUpgrade
-            Schedule="afterInstallInitialize"
-            AllowSameVersionUpgrades="yes"
-            DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit."/>
-
-        <WixVariable Id="WixUILicenseRtf" Value="$(var.CPACK_WIX_LICENSE_RTF)"/>
-        <Property Id="WIXUI_INSTALLDIR" Value="INSTALL_ROOT"/>
-
-        <?ifdef CPACK_WIX_PRODUCT_ICON?>
-        <Property Id="ARPPRODUCTICON">ProductIcon.ico</Property>
-        <Icon Id="ProductIcon.ico" SourceFile="$(var.CPACK_WIX_PRODUCT_ICON)"/>
-        <?endif?>
-
-        <?ifdef CPACK_WIX_UI_BANNER?>
-        <WixVariable Id="WixUIBannerBmp" Value="$(var.CPACK_WIX_UI_BANNER)"/>
-        <?endif?>
-
-        <?ifdef CPACK_WIX_UI_DIALOG?>
-        <WixVariable Id="WixUIDialogBmp" Value="$(var.CPACK_WIX_UI_DIALOG)"/>
-        <?endif?>
-
-        <FeatureRef Id="ProductFeature"/>
-
-        <UIRef Id="$(var.CPACK_WIX_UI_REF)" />
-
-        <?include "properties.wxi"?>
-        <?include "product_fragment.wxi"?>
-    </Product>
-</Wix>
diff --git a/share/cmake-3.18/Modules/Internal/FeatureTesting.cmake b/share/cmake-3.18/Modules/Internal/FeatureTesting.cmake
deleted file mode 100644
index 72d96b3..0000000
--- a/share/cmake-3.18/Modules/Internal/FeatureTesting.cmake
+++ /dev/null
@@ -1,119 +0,0 @@
-
-macro(_record_compiler_features lang compile_flags feature_list)
-  include("${CMAKE_ROOT}/Modules/Compiler/${CMAKE_${lang}_COMPILER_ID}-${lang}-FeatureTests.cmake" OPTIONAL)
-
-  string(TOLOWER ${lang} lang_lc)
-  file(REMOVE "${CMAKE_BINARY_DIR}/CMakeFiles/feature_tests.bin")
-  file(WRITE "${CMAKE_BINARY_DIR}/CMakeFiles/feature_tests.${lang_lc}" "
-  const char features[] = {\"\\n\"\n")
-
-  get_property(known_features GLOBAL PROPERTY CMAKE_${lang}_KNOWN_FEATURES)
-
-  foreach(feature ${known_features})
-    if (_cmake_feature_test_${feature})
-      if (${_cmake_feature_test_${feature}} STREQUAL 1)
-        set(_feature_condition "\"1\" ")
-      else()
-        set(_feature_condition "#if ${_cmake_feature_test_${feature}}\n\"1\"\n#else\n\"0\"\n#endif\n")
-      endif()
-      file(APPEND "${CMAKE_BINARY_DIR}/CMakeFiles/feature_tests.${lang_lc}" "\"${lang}_FEATURE:\"\n${_feature_condition}\"${feature}\\n\"\n")
-    endif()
-  endforeach()
-  file(APPEND "${CMAKE_BINARY_DIR}/CMakeFiles/feature_tests.${lang_lc}"
-    "\n};\n\nint main(int argc, char** argv) { (void)argv; return features[argc]; }\n")
-
-  if(CMAKE_${lang}_LINK_WITH_STANDARD_COMPILE_OPTION)
-    # This toolchain requires use of the language standard flag
-    # when linking in order to use the matching standard library.
-    set(compile_flags_for_link "${compile_flags}")
-  else()
-    set(compile_flags_for_link "")
-  endif()
-
-  try_compile(CMAKE_${lang}_FEATURE_TEST
-    ${CMAKE_BINARY_DIR} "${CMAKE_BINARY_DIR}/CMakeFiles/feature_tests.${lang_lc}"
-    COMPILE_DEFINITIONS "${compile_flags}"
-    LINK_LIBRARIES "${compile_flags_for_link}"
-    OUTPUT_VARIABLE _output
-    COPY_FILE "${CMAKE_BINARY_DIR}/CMakeFiles/feature_tests.bin"
-    COPY_FILE_ERROR _copy_error
-    )
-  if(CMAKE_${lang}_FEATURE_TEST AND NOT _copy_error)
-    set(_result 0)
-  else()
-    set(_result 255)
-  endif()
-  unset(CMAKE_${lang}_FEATURE_TEST CACHE)
-  unset(compile_flags_for_link)
-
-  if (_result EQUAL 0)
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-      "\n\nDetecting ${lang} [${compile_flags}] compiler features compiled with the following output:\n${_output}\n\n")
-    if(EXISTS "${CMAKE_BINARY_DIR}/CMakeFiles/feature_tests.bin")
-      file(STRINGS "${CMAKE_BINARY_DIR}/CMakeFiles/feature_tests.bin"
-        features REGEX "${lang}_FEATURE:.*")
-      foreach(info ${features})
-        file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-          "    Feature record: ${info}\n")
-        string(REPLACE "${lang}_FEATURE:" "" info ${info})
-        string(SUBSTRING ${info} 0 1 has_feature)
-        if(has_feature)
-          string(REGEX REPLACE "^1" "" feature ${info})
-          list(APPEND ${feature_list} ${feature})
-        endif()
-      endforeach()
-    endif()
-  else()
-    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-      "Detecting ${lang} [${compile_flags}] compiler features failed to compile with the following output:\n${_output}\n${_copy_error}\n\n")
-  endif()
-endmacro()
-
-macro(_record_compiler_features_c std)
-  list(APPEND CMAKE_C${std}_COMPILE_FEATURES c_std_${std})
-
-  get_property(lang_level_has_features GLOBAL PROPERTY CMAKE_C${std}_KNOWN_FEATURES)
-  if(lang_level_has_features)
-    _record_compiler_features(C "${CMAKE_C${std}_STANDARD_COMPILE_OPTION}" CMAKE_C${std}_COMPILE_FEATURES)
-  endif()
-  unset(lang_level_has_features)
-endmacro()
-
-macro(_record_compiler_features_cxx std)
-  list(APPEND CMAKE_CXX${std}_COMPILE_FEATURES cxx_std_${std})
-
-  get_property(lang_level_has_features GLOBAL PROPERTY CMAKE_CXX${std}_KNOWN_FEATURES)
-  if(lang_level_has_features)
-    _record_compiler_features(CXX "${CMAKE_CXX${std}_STANDARD_COMPILE_OPTION}" CMAKE_CXX${std}_COMPILE_FEATURES)
-  endif()
-  unset(lang_level_has_features)
-endmacro()
-
-macro(_record_compiler_features_cuda std)
-  list(APPEND CMAKE_CUDA${std}_COMPILE_FEATURES cuda_std_${std})
-
-  get_property(lang_level_has_features GLOBAL PROPERTY CMAKE_CUDA${std}_KNOWN_FEATURES)
-  if(lang_level_has_features)
-    _record_compiler_features(CUDA "${CMAKE_CUDA${std}_STANDARD_COMPILE_OPTION}" CMAKE_CUDA${std}_COMPILE_FEATURES)
-  endif()
-  unset(lang_level_has_features)
-endmacro()
-
-macro(_has_compiler_features lang level compile_flags feature_list)
-  # presume all known features are supported
-  get_property(known_features GLOBAL PROPERTY CMAKE_${lang}${level}_KNOWN_FEATURES)
-  list(APPEND ${feature_list} ${known_features})
-endmacro()
-
-macro(_has_compiler_features_c std)
-  list(APPEND CMAKE_C${std}_COMPILE_FEATURES c_std_${std})
-  _has_compiler_features(C ${std} "${CMAKE_C${std}_STANDARD_COMPILE_OPTION}" CMAKE_C${std}_COMPILE_FEATURES)
-endmacro()
-macro(_has_compiler_features_cxx std)
-  list(APPEND CMAKE_CXX${std}_COMPILE_FEATURES cxx_std_${std})
-  _has_compiler_features(CXX ${std} "${CMAKE_CXX${std}_STANDARD_COMPILE_OPTION}" CMAKE_CXX${std}_COMPILE_FEATURES)
-endmacro()
-macro(_has_compiler_features_cuda std)
-  list(APPEND CMAKE_CUDA${std}_COMPILE_FEATURES cuda_std_${std})
-  _has_compiler_features(CUDA ${std} "${CMAKE_CUDA${std}_STANDARD_COMPILE_OPTION}" CMAKE_CUDA${std}_COMPILE_FEATURES)
-endmacro()
diff --git a/share/cmake-3.18/Modules/MacroAddFileDependencies.cmake b/share/cmake-3.18/Modules/MacroAddFileDependencies.cmake
deleted file mode 100644
index ca60b57..0000000
--- a/share/cmake-3.18/Modules/MacroAddFileDependencies.cmake
+++ /dev/null
@@ -1,30 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-MacroAddFileDependencies
-------------------------
-
-MACRO_ADD_FILE_DEPENDENCIES(<_file> depend_files...)
-
-Using the macro MACRO_ADD_FILE_DEPENDENCIES() is discouraged.  There
-are usually better ways to specify the correct dependencies.
-
-MACRO_ADD_FILE_DEPENDENCIES(<_file> depend_files...) is just a
-convenience wrapper around the OBJECT_DEPENDS source file property.
-You can just use set_property(SOURCE <file> APPEND PROPERTY
-OBJECT_DEPENDS depend_files) instead.
-#]=======================================================================]
-
-macro (MACRO_ADD_FILE_DEPENDENCIES _file)
-
-  get_source_file_property(_deps ${_file} OBJECT_DEPENDS)
-  if (_deps)
-    set(_deps ${_deps} ${ARGN})
-  else ()
-    set(_deps ${ARGN})
-  endif ()
-
-  set_source_files_properties(${_file} PROPERTIES OBJECT_DEPENDS "${_deps}")
-
-endmacro ()
diff --git a/share/cmake-3.18/Modules/Platform/ARTOS-GNU-C.cmake b/share/cmake-3.18/Modules/Platform/ARTOS-GNU-C.cmake
deleted file mode 100644
index fe8d782..0000000
--- a/share/cmake-3.18/Modules/Platform/ARTOS-GNU-C.cmake
+++ /dev/null
@@ -1,9 +0,0 @@
-# Define ARTOS to select proper behaviour and tell preprocessor to accept C++ style comments.
-string(APPEND CMAKE_C_FLAGS_INIT " -DARTOS -Xp -+")
-# ac doesn't support -g properly and doesn't support the normal gcc optimization options. Just use the defaults set by ac.
-string(APPEND CMAKE_C_FLAGS_DEBUG_INIT " ")
-string(APPEND CMAKE_C_FLAGS_MINSIZEREL_INIT " -DNDEBUG")
-string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " -DNDEBUG")
-string(APPEND CMAKE_C_FLAGS_RELWITHDEBINFO_INIT " -DNDEBUG")
-# Most projects expect the stdio functions to be available.
-set(CMAKE_C_STANDARD_LIBRARIES_INIT "stdio.a")
diff --git a/share/cmake-3.18/Modules/Platform/Android-Clang.cmake b/share/cmake-3.18/Modules/Platform/Android-Clang.cmake
deleted file mode 100644
index 25c4b25..0000000
--- a/share/cmake-3.18/Modules/Platform/Android-Clang.cmake
+++ /dev/null
@@ -1,88 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-# This module is shared by multiple languages; use include blocker.
-if(__ANDROID_COMPILER_CLANG)
-  return()
-endif()
-set(__ANDROID_COMPILER_CLANG 1)
-
-# Include the NDK hook.
-# It can be used by NDK to inject necessary fixes for an earlier cmake.
-if(CMAKE_ANDROID_NDK)
-  include(${CMAKE_ANDROID_NDK}/build/cmake/hooks/pre/Android-Clang.cmake OPTIONAL)
-endif()
-
-# Load flags from NDK. This file may provides the following variables:
-#   _ANDROID_NDK_INIT_CFLAGS
-#   _ANDROID_NDK_INIT_CFLAGS_DEBUG
-#   _ANDROID_NDK_INIT_CFLAGS_RELEASE
-#   _ANDROID_NDK_INIT_LDFLAGS
-#   _ANDROID_NDK_INIT_LDFLAGS_EXE
-if(CMAKE_ANDROID_NDK)
-  include(${CMAKE_ANDROID_NDK}/build/cmake/flags.cmake OPTIONAL
-          RESULT_VARIABLE _INCLUDED_FLAGS)
-endif()
-
-# Support for NVIDIA Nsight Tegra Visual Studio Edition was previously
-# implemented in the CMake VS IDE generators.  Avoid interfering with
-# that functionality for now.  Later we may try to integrate this.
-if(CMAKE_VS_PLATFORM_NAME STREQUAL "Tegra-Android")
-  macro(__android_compiler_clang lang)
-  endmacro()
-  return()
-endif()
-
-# Commonly used Android toolchain files that pre-date CMake upstream support
-# set CMAKE_SYSTEM_VERSION to 1.  Avoid interfering with them.
-if(CMAKE_SYSTEM_VERSION EQUAL 1)
-  macro(__android_compiler_clang lang)
-  endmacro()
-  return()
-endif()
-
-# Natively compiling on an Android host doesn't use the NDK cross-compilation
-# tools.
-if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Android")
-  macro(__android_compiler_clang lang)
-  endmacro()
-  return()
-endif()
-
-include(Platform/Android-Common)
-
-if(_INCLUDED_FLAGS)
-  # NDK provides the flags.
-  set(_ANDROID_ABI_INIT_CFLAGS "${_ANDROID_NDK_INIT_CFLAGS}")
-  set(_ANDROID_ABI_INIT_CFLAGS_DEBUG "${_ANDROID_NDK_INIT_CFLAGS_DEBUG}")
-  set(_ANDROID_ABI_INIT_CFLAGS_RELEASE "${_ANDROID_NDK_INIT_CFLAGS_RELEASE}")
-  set(_ANDROID_ABI_INIT_LDFLAGS "${_ANDROID_NDK_INIT_LDFLAGS}")
-  set(_ANDROID_ABI_INIT_EXE_LDFLAGS "${_ANDROID_NDK_INIT_LDFLAGS_EXE}")
-else()
-  # The NDK toolchain configuration files at:
-  #
-  #   <ndk>/[build/core/]toolchains/*-clang*/setup.mk
-  #
-  # contain logic to set LLVM_TRIPLE for Clang-based toolchains for each target.
-  # We need to produce the same target here to produce compatible binaries.
-  include(Platform/Android/abi-${CMAKE_ANDROID_ARCH_ABI}-Clang)
-endif()
-
-macro(__android_compiler_clang lang)
-  if(NOT "x${lang}" STREQUAL "xASM")
-    __android_compiler_common(${lang})
-  endif()
-  if(NOT CMAKE_${lang}_COMPILER_TARGET)
-    set(CMAKE_${lang}_COMPILER_TARGET "${CMAKE_ANDROID_ARCH_LLVM_TRIPLE}")
-    if(CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED)
-      string(APPEND CMAKE_${lang}_COMPILER_TARGET "${CMAKE_SYSTEM_VERSION}")
-    endif()
-    list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "--target=${CMAKE_${lang}_COMPILER_TARGET}")
-  endif()
-endmacro()
-
-# Include the NDK hook.
-# It can be used by NDK to inject necessary fixes for an earlier cmake.
-if(CMAKE_ANDROID_NDK)
-  include(${CMAKE_ANDROID_NDK}/build/cmake/hooks/post/Android-Clang.cmake OPTIONAL)
-endif()
diff --git a/share/cmake-3.18/Modules/Platform/Android-Common.cmake b/share/cmake-3.18/Modules/Platform/Android-Common.cmake
deleted file mode 100644
index 39da933..0000000
--- a/share/cmake-3.18/Modules/Platform/Android-Common.cmake
+++ /dev/null
@@ -1,230 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-# This module is shared by multiple languages; use include blocker.
-if(__ANDROID_COMPILER_COMMON)
-  return()
-endif()
-set(__ANDROID_COMPILER_COMMON 1)
-
-if(CMAKE_ANDROID_NDK)
-  # <ndk>/build/core/definitions.mk
-
-  set(_ANDROID_STL_TYPES
-    none
-    system
-    c++_static
-    c++_shared
-    gabi++_static
-    gabi++_shared
-    gnustl_static
-    gnustl_shared
-    stlport_static
-    stlport_shared
-    )
-
-  if(CMAKE_ANDROID_STL_TYPE)
-    list(FIND _ANDROID_STL_TYPES "${CMAKE_ANDROID_STL_TYPE}" _ANDROID_STL_TYPE_FOUND)
-    if(_ANDROID_STL_TYPE_FOUND EQUAL -1)
-      string(REPLACE ";" "\n  " _msg ";${_ANDROID_STL_TYPES}")
-      message(FATAL_ERROR
-        "The CMAKE_ANDROID_STL_TYPE '${CMAKE_ANDROID_STL_TYPE}' is not one of the allowed values:${_msg}\n"
-        )
-    endif()
-    unset(_ANDROID_STL_TYPE_FOUND)
-  elseif(IS_DIRECTORY ${CMAKE_ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++)
-    set(CMAKE_ANDROID_STL_TYPE "gnustl_static")
-  else()
-    set(CMAKE_ANDROID_STL_TYPE "c++_static")
-  endif()
-
-  unset(_ANDROID_STL_TYPES)
-
-  # Forward Android-specific platform variables to try_compile projects.
-  list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
-    CMAKE_ANDROID_STL_TYPE
-    )
-endif()
-
-if(CMAKE_ANDROID_STL_TYPE)
-  if(CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED)
-    if(CMAKE_ANDROID_STL_TYPE STREQUAL "system")
-      set(_ANDROID_STL_EXCEPTIONS 0)
-      set(_ANDROID_STL_RTTI 0)
-      macro(__android_stl lang)
-        string(APPEND CMAKE_${lang}_FLAGS_INIT " -stdlib=libstdc++")
-        if(_ANDROID_STL_EXCEPTIONS OR _ANDROID_STL_RTTI)
-          string(APPEND CMAKE_${lang}_STANDARD_LIBRARIES " -lc++abi")
-          if(CMAKE_SYSTEM_VERSION LESS 21)
-            list(APPEND CMAKE_${lang}_STANDARD_LIBRARIES "-landroid_support")
-          endif()
-        endif()
-      endmacro()
-    elseif(CMAKE_ANDROID_STL_TYPE STREQUAL "c++_static")
-      set(_ANDROID_STL_EXCEPTIONS 1)
-      set(_ANDROID_STL_RTTI 1)
-      macro(__android_stl lang)
-        string(APPEND CMAKE_${lang}_FLAGS_INIT " -stdlib=libc++")
-        string(APPEND CMAKE_${lang}_STANDARD_LIBRARIES " -static-libstdc++")
-      endmacro()
-    elseif(CMAKE_ANDROID_STL_TYPE STREQUAL "c++_shared")
-      set(_ANDROID_STL_EXCEPTIONS 1)
-      set(_ANDROID_STL_RTTI 1)
-      macro(__android_stl lang)
-        string(APPEND CMAKE_${lang}_FLAGS_INIT " -stdlib=libc++")
-      endmacro()
-    elseif(CMAKE_ANDROID_STL_TYPE STREQUAL "none")
-      set(_ANDROID_STL_RTTI 0)
-      set(_ANDROID_STL_EXCEPTIONS 0)
-      macro(__android_stl lang)
-        # FIXME: Add a way to add project-wide language-specific compile-only flags.
-        set(CMAKE_CXX_COMPILE_OBJECT
-          "<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE> -nostdinc++")
-        string(APPEND CMAKE_${lang}_STANDARD_LIBRARIES " -nostdlib++")
-      endmacro()
-    else()
-      message(FATAL_ERROR
-        "Android: STL '${CMAKE_ANDROID_STL_TYPE}' not supported by this NDK."
-        )
-    endif()
-    if(DEFINED CMAKE_ANDROID_RTTI)
-      set(_ANDROID_STL_RTTI ${CMAKE_ANDROID_RTTI})
-    endif()
-    if(DEFINED CMAKE_ANDROID_EXCEPTIONS)
-      set(_ANDROID_STL_EXCEPTIONS ${CMAKE_ANDROID_EXCEPTIONS})
-    endif()
-  elseif(CMAKE_ANDROID_NDK)
-
-    macro(__android_stl_inc lang dir req)
-      if(EXISTS "${dir}")
-        list(APPEND CMAKE_${lang}_STANDARD_INCLUDE_DIRECTORIES "${dir}")
-      elseif(${req})
-        message(FATAL_ERROR
-          "Android: STL '${CMAKE_ANDROID_STL_TYPE}' include directory not found:\n"
-          "  ${dir}"
-          )
-      endif()
-    endmacro()
-
-    macro(__android_stl_lib lang lib req)
-      if(CMAKE_ANDROID_ARCH_ABI MATCHES "^armeabi" AND NOT CMAKE_ANDROID_ARM_MODE)
-        get_filename_component(_ANDROID_STL_LIBDIR "${lib}" DIRECTORY)
-        get_filename_component(_ANDROID_STL_LIBNAME "${lib}" NAME)
-        set(_ANDROID_STL_LIBTHUMB "${_ANDROID_STL_LIBDIR}/thumb/${_ANDROID_STL_LIBNAME}")
-        unset(_ANDROID_STL_LIBDIR)
-        unset(_ANDROID_STL_LIBNAME)
-      else()
-        set(_ANDROID_STL_LIBTHUMB "")
-      endif()
-
-      if(_ANDROID_STL_LIBTHUMB AND EXISTS "${_ANDROID_STL_LIBTHUMB}")
-        string(APPEND CMAKE_${lang}_STANDARD_LIBRARIES " \"${_ANDROID_STL_LIBTHUMB}\"")
-      elseif(EXISTS "${lib}")
-        string(APPEND CMAKE_${lang}_STANDARD_LIBRARIES " \"${lib}\"")
-      elseif(${req})
-        message(FATAL_ERROR
-          "Android: STL '${CMAKE_ANDROID_STL_TYPE}' library file not found:\n"
-          "  ${lib}"
-          )
-      endif()
-
-      unset(_ANDROID_STL_LIBTHUMB)
-    endmacro()
-
-    include(Platform/Android/ndk-stl-${CMAKE_ANDROID_STL_TYPE})
-  else()
-    macro(__android_stl lang)
-    endmacro()
-  endif()
-else()
-  macro(__android_stl lang)
-  endmacro()
-endif()
-
-# The NDK toolchain configuration files at:
-#
-#   <ndk>/[build/core/]toolchains/*/setup.mk
-#
-# contain logic to set TARGET_CFLAGS and TARGET_LDFLAGS (and debug/release
-# variants) to tell their build system what flags to pass for each ABI.
-# We need to produce the same flags here to produce compatible binaries.
-# We initialize these variables here and set them in the compiler-specific
-# modules that include this one.  Then we use them in the macro below when
-# it is called.
-set(_ANDROID_ABI_INIT_CFLAGS "")
-set(_ANDROID_ABI_INIT_CFLAGS_DEBUG "")
-set(_ANDROID_ABI_INIT_CFLAGS_RELEASE "")
-set(_ANDROID_ABI_INIT_LDFLAGS "")
-set(_ANDROID_ABI_INIT_EXE_LDFLAGS "")
-
-macro(__android_compiler_common lang)
-  if(_ANDROID_ABI_INIT_CFLAGS)
-    string(APPEND CMAKE_${lang}_FLAGS_INIT " ${_ANDROID_ABI_INIT_CFLAGS}")
-  endif()
-  if(_ANDROID_ABI_INIT_CFLAGS_DEBUG)
-    string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " ${_ANDROID_ABI_INIT_CFLAGS_DEBUG}")
-  endif()
-  if(_ANDROID_ABI_INIT_CFLAGS_RELEASE)
-    string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " ${_ANDROID_ABI_INIT_CFLAGS_RELEASE}")
-    string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " ${_ANDROID_ABI_INIT_CFLAGS_RELEASE}")
-    string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " ${_ANDROID_ABI_INIT_CFLAGS_RELEASE}")
-  endif()
-  if(_ANDROID_ABI_INIT_LDFLAGS)
-    foreach(t EXE SHARED MODULE)
-      string(APPEND CMAKE_${t}_LINKER_FLAGS_INIT " ${_ANDROID_ABI_INIT_LDFLAGS}")
-    endforeach()
-  endif()
-  if(_ANDROID_ABI_INIT_EXE_LDFLAGS)
-    string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT " ${_ANDROID_ABI_INIT_EXE_LDFLAGS}")
-  endif()
-
-  if(DEFINED _ANDROID_STL_EXCEPTIONS)
-    if(_ANDROID_STL_EXCEPTIONS)
-      string(APPEND CMAKE_${lang}_FLAGS_INIT " -fexceptions")
-    else()
-      string(APPEND CMAKE_${lang}_FLAGS_INIT " -fno-exceptions")
-    endif()
-  endif()
-
-  if("x${lang}" STREQUAL "xCXX" AND DEFINED _ANDROID_STL_RTTI)
-    if(_ANDROID_STL_RTTI)
-      string(APPEND CMAKE_${lang}_FLAGS_INIT " -frtti")
-    else()
-      string(APPEND CMAKE_${lang}_FLAGS_INIT " -fno-rtti")
-    endif()
-  endif()
-
-  if("x${lang}" STREQUAL "xCXX")
-    __android_stl(CXX)
-  endif()
-
-  if(CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED)
-    string(APPEND CMAKE_${lang}_STANDARD_LIBRARIES " -latomic -lm")
-  endif()
-
-  # <ndk>/build/core/definitions.mk appends the sysroot's include directory
-  # explicitly at the end of the command-line include path so that it
-  # precedes the toolchain's builtin include directories.  This is
-  # necessary so that Android API-version-specific headers are preferred
-  # over those in the toolchain's `include-fixed` directory (which cannot
-  # possibly match all versions).
-  #
-  # Do not do this for a standalone toolchain because it is already
-  # tied to a specific API version.
-  if(CMAKE_ANDROID_NDK AND NOT CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED)
-    if(CMAKE_SYSROOT_COMPILE)
-      set(_cmake_sysroot_compile "${CMAKE_SYSROOT_COMPILE}")
-    else()
-      set(_cmake_sysroot_compile "${CMAKE_SYSROOT}")
-    endif()
-    if(NOT CMAKE_ANDROID_NDK_DEPRECATED_HEADERS)
-      list(APPEND CMAKE_${lang}_STANDARD_INCLUDE_DIRECTORIES
-        "${_cmake_sysroot_compile}/usr/include"
-        "${_cmake_sysroot_compile}/usr/include/${CMAKE_ANDROID_ARCH_TRIPLE}"
-        )
-    else()
-      list(APPEND CMAKE_${lang}_STANDARD_INCLUDE_DIRECTORIES "${_cmake_sysroot_compile}/usr/include")
-    endif()
-    unset(_cmake_sysroot_compile)
-  endif()
-endmacro()
diff --git a/share/cmake-3.18/Modules/Platform/Android-Determine.cmake b/share/cmake-3.18/Modules/Platform/Android-Determine.cmake
deleted file mode 100644
index 4ba3601..0000000
--- a/share/cmake-3.18/Modules/Platform/Android-Determine.cmake
+++ /dev/null
@@ -1,511 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-# When CMAKE_SYSTEM_NAME is "Android", CMakeDetermineSystem loads this module.
-# This module detects platform-wide information about the Android target
-# in order to store it in "CMakeSystem.cmake".
-
-# Include the NDK hook.
-# It can be used by NDK to inject necessary fixes for an earlier cmake.
-if(CMAKE_ANDROID_NDK)
-  include(${CMAKE_ANDROID_NDK}/build/cmake/hooks/pre/Android-Determine.cmake OPTIONAL)
-endif()
-
-# Support for NVIDIA Nsight Tegra Visual Studio Edition was previously
-# implemented in the CMake VS IDE generators.  Avoid interfering with
-# that functionality for now.  Later we may try to integrate this.
-if(CMAKE_GENERATOR MATCHES "Visual Studio")
-  return()
-endif()
-
-# Commonly used Android toolchain files that pre-date CMake upstream support
-# set CMAKE_SYSTEM_VERSION to 1.  Avoid interfering with them.
-if(CMAKE_SYSTEM_VERSION EQUAL 1)
-  return()
-endif()
-
-# Natively compiling on an Android host doesn't use the NDK cross-compilation
-# tools.
-if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Android")
-  return()
-endif()
-
-cmake_policy(PUSH)
-cmake_policy(SET CMP0057 NEW) # if IN_LIST
-
-# If the user provided CMAKE_SYSROOT for us, extract information from it.
-set(_ANDROID_SYSROOT_NDK "")
-set(_ANDROID_SYSROOT_API "")
-set(_ANDROID_SYSROOT_ARCH "")
-set(_ANDROID_SYSROOT_STANDALONE_TOOLCHAIN "")
-if(CMAKE_SYSROOT)
-  if(NOT IS_DIRECTORY "${CMAKE_SYSROOT}")
-    message(FATAL_ERROR
-      "Android: The specified CMAKE_SYSROOT:\n"
-      "  ${CMAKE_SYSROOT}\n"
-      "is not an existing directory."
-      )
-  endif()
-  if(CMAKE_SYSROOT MATCHES "^([^\\\n]*)/platforms/android-([0-9]+)/arch-([a-z0-9_]+)$")
-    set(_ANDROID_SYSROOT_NDK "${CMAKE_MATCH_1}")
-    set(_ANDROID_SYSROOT_API "${CMAKE_MATCH_2}")
-    set(_ANDROID_SYSROOT_ARCH "${CMAKE_MATCH_3}")
-  elseif(CMAKE_SYSROOT MATCHES "^([^\\\n]*)/sysroot$")
-    set(_ANDROID_SYSROOT_STANDALONE_TOOLCHAIN "${CMAKE_MATCH_1}")
-  else()
-    message(FATAL_ERROR
-      "The value of CMAKE_SYSROOT:\n"
-      "  ${CMAKE_SYSROOT}\n"
-      "does not match any of the forms:\n"
-      "  <ndk>/platforms/android-<api>/arch-<arch>\n"
-      "  <standalone-toolchain>/sysroot\n"
-      "where:\n"
-      "  <ndk>  = Android NDK directory (with forward slashes)\n"
-      "  <api>  = Android API version number (decimal digits)\n"
-      "  <arch> = Android ARCH name (lower case)\n"
-      "  <standalone-toolchain> = Path to standalone toolchain prefix\n"
-      )
-  endif()
-endif()
-
-# Find the Android NDK.
-if(CMAKE_ANDROID_NDK)
-  if(NOT IS_DIRECTORY "${CMAKE_ANDROID_NDK}")
-    message(FATAL_ERROR
-      "Android: The NDK root directory specified by CMAKE_ANDROID_NDK:\n"
-      "  ${CMAKE_ANDROID_NDK}\n"
-      "does not exist."
-      )
-  endif()
-elseif(CMAKE_ANDROID_STANDALONE_TOOLCHAIN)
-  if(NOT IS_DIRECTORY "${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}")
-    message(FATAL_ERROR
-      "Android: The standalone toolchain directory specified by CMAKE_ANDROID_STANDALONE_TOOLCHAIN:\n"
-      "  ${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}\n"
-      "does not exist."
-      )
-  endif()
-  if(NOT EXISTS "${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}/sysroot/usr/include/android/api-level.h")
-    message(FATAL_ERROR
-      "Android: The standalone toolchain directory specified by CMAKE_ANDROID_STANDALONE_TOOLCHAIN:\n"
-      "  ${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}\n"
-      "does not contain a sysroot with a known layout.  The file:\n"
-      "  ${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}/sysroot/usr/include/android/api-level.h\n"
-      "does not exist."
-      )
-  endif()
-else()
-  if(IS_DIRECTORY "${_ANDROID_SYSROOT_NDK}")
-    set(CMAKE_ANDROID_NDK "${_ANDROID_SYSROOT_NDK}")
-  elseif(IS_DIRECTORY "${_ANDROID_SYSROOT_STANDALONE_TOOLCHAIN}")
-    set(CMAKE_ANDROID_STANDALONE_TOOLCHAIN "${_ANDROID_SYSROOT_STANDALONE_TOOLCHAIN}")
-  elseif(IS_DIRECTORY "${ANDROID_NDK}")
-    file(TO_CMAKE_PATH "${ANDROID_NDK}" CMAKE_ANDROID_NDK)
-  elseif(IS_DIRECTORY "${ANDROID_STANDALONE_TOOLCHAIN}")
-    file(TO_CMAKE_PATH "${ANDROID_STANDALONE_TOOLCHAIN}" CMAKE_ANDROID_STANDALONE_TOOLCHAIN)
-  elseif(IS_DIRECTORY "$ENV{ANDROID_NDK_ROOT}")
-    file(TO_CMAKE_PATH "$ENV{ANDROID_NDK_ROOT}" CMAKE_ANDROID_NDK)
-  elseif(IS_DIRECTORY "$ENV{ANDROID_NDK}")
-    file(TO_CMAKE_PATH "$ENV{ANDROID_NDK}" CMAKE_ANDROID_NDK)
-  elseif(IS_DIRECTORY "$ENV{ANDROID_STANDALONE_TOOLCHAIN}")
-    file(TO_CMAKE_PATH "$ENV{ANDROID_STANDALONE_TOOLCHAIN}" CMAKE_ANDROID_STANDALONE_TOOLCHAIN)
-  endif()
-  # TODO: Search harder for the NDK or standalone toolchain.
-endif()
-
-set(_ANDROID_STANDALONE_TOOLCHAIN_API "")
-if(CMAKE_ANDROID_STANDALONE_TOOLCHAIN)
-  # Try to read the API level from the toolchain launcher.
-  if(EXISTS "${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}/bin/clang")
-    set(_ANDROID_API_LEVEL_CLANG_REGEX "__ANDROID_API__=([0-9]+)")
-    file(STRINGS "${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}/bin/clang" _ANDROID_STANDALONE_TOOLCHAIN_BIN_CLANG
-      REGEX "${_ANDROID_API_LEVEL_CLANG_REGEX}" LIMIT_COUNT 1 LIMIT_INPUT 65536)
-    if(_ANDROID_STANDALONE_TOOLCHAIN_BIN_CLANG MATCHES "${_ANDROID_API_LEVEL_CLANG_REGEX}")
-      set(_ANDROID_STANDALONE_TOOLCHAIN_API "${CMAKE_MATCH_1}")
-    endif()
-    unset(_ANDROID_STANDALONE_TOOLCHAIN_BIN_CLANG)
-    unset(_ANDROID_API_LEVEL_CLANG_REGEX)
-  endif()
-  if(NOT _ANDROID_STANDALONE_TOOLCHAIN_API)
-    # The compiler launcher does not know __ANDROID_API__.  Assume this
-    # is not unified headers and look for it in the api-level.h header.
-    set(_ANDROID_API_LEVEL_H_REGEX "^[\t ]*#[\t ]*define[\t ]+__ANDROID_API__[\t ]+([0-9]+)")
-    file(STRINGS "${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}/sysroot/usr/include/android/api-level.h"
-      _ANDROID_API_LEVEL_H_CONTENT REGEX "${_ANDROID_API_LEVEL_H_REGEX}")
-    if(_ANDROID_API_LEVEL_H_CONTENT MATCHES "${_ANDROID_API_LEVEL_H_REGEX}")
-      set(_ANDROID_STANDALONE_TOOLCHAIN_API "${CMAKE_MATCH_1}")
-    endif()
-  endif()
-  if(NOT _ANDROID_STANDALONE_TOOLCHAIN_API)
-    message(WARNING
-      "Android: Did not detect API level from\n"
-      "  ${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}/bin/clang\n"
-      "or\n"
-      "  ${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}/sysroot/usr/include/android/api-level.h\n"
-      )
-  endif()
-endif()
-
-if(NOT CMAKE_ANDROID_NDK AND NOT CMAKE_ANDROID_STANDALONE_TOOLCHAIN)
-  message(FATAL_ERROR "Android: Neither the NDK or a standalone toolchain was found.")
-endif()
-
-if(CMAKE_ANDROID_NDK)
-  # NDK >= 18 has platforms.cmake. It provides:
-  #   NDK_MIN_PLATFORM_LEVEL
-  #   NDK_MAX_PLATFORM_LEVEL
-  include("${CMAKE_ANDROID_NDK}/build/cmake/platforms.cmake" OPTIONAL RESULT_VARIABLE _INCLUDED_PLATFORMS)
-  # NDK >= 18 has abis.cmake. It provides:
-  #   NDK_KNOWN_DEVICE_ABI32S
-  #   NDK_KNOWN_DEVICE_ABI64S
-  # NDK >= 23 also provides:
-  #   NDK_KNOWN_DEVICE_ABIS
-  #   NDK_ABI_<abi>_PROC
-  #   NDK_ABI_<abi>_ARCH
-  #   NDK_ABI_<abi>_TRIPLE
-  #   NDK_ABI_<abi>_LLVM_TRIPLE
-  #   NDK_PROC_<processor>_ABI
-  #   NDK_ARCH_<arch>_ABI
-  include("${CMAKE_ANDROID_NDK}/build/cmake/abis.cmake" OPTIONAL RESULT_VARIABLE _INCLUDED_ABIS)
-endif()
-
-if(CMAKE_ANDROID_NDK)
-  # Identify the host platform.
-  if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
-    if(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "x86_64")
-      set(CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG "darwin-x86_64")
-    else()
-      set(CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG "darwin-x86")
-    endif()
-  elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
-    if(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "x86_64")
-      set(CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG "linux-x86_64")
-    else()
-      set(CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG "linux-x86")
-    endif()
-  elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
-    if(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "AMD64")
-      set(CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG "windows-x86_64")
-    else()
-      set(CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG "windows")
-    endif()
-  else()
-    message(FATAL_ERROR "Android: Builds hosted on '${CMAKE_HOST_SYSTEM_NAME}' not supported.")
-  endif()
-
-  # Look for a unified toolchain/sysroot provided with the NDK.
-  set(CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED "${CMAKE_ANDROID_NDK}/toolchains/llvm/prebuilt/${CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG}")
-  if(NOT IS_DIRECTORY "${CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED}/sysroot")
-    set(CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED "")
-  endif()
-else()
-  set(CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG "")
-  set(CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED "")
-endif()
-
-if(_INCLUDED_ABIS)
-  if(NDK_KNOWN_DEVICE_ABIS)
-    set(_ANDROID_KNOWN_ABIS ${NDK_KNOWN_DEVICE_ABIS})
-  else()
-    set(_ANDROID_KNOWN_ABIS ${NDK_KNOWN_DEVICE_ABI32S} ${NDK_KNOWN_DEVICE_ABI64S})
-  endif()
-endif()
-
-if(NOT DEFINED NDK_KNOWN_DEVICE_ABIS)
-  # The NDK is not new enough to provide ABI information.
-  # https://developer.android.com/ndk/guides/abis.html
-
-  set(NDK_ABI_arm64-v8a_PROC           "aarch64")
-  set(NDK_ABI_arm64-v8a_ARCH           "arm64")
-  set(NDK_ABI_arm64-v8a_TRIPLE         "aarch64-linux-android")
-  set(NDK_ABI_arm64-v8a_LLVM_TRIPLE    "aarch64-none-linux-android")
-  set(NDK_ABI_armeabi-v7a_PROC         "armv7-a")
-  set(NDK_ABI_armeabi-v7a_ARCH         "arm")
-  set(NDK_ABI_armeabi-v7a_TRIPLE       "arm-linux-androideabi")
-  set(NDK_ABI_armeabi-v7a_LLVM_TRIPLE  "armv7-none-linux-androideabi")
-  set(NDK_ABI_armeabi-v6_PROC          "armv6")
-  set(NDK_ABI_armeabi-v6_ARCH          "arm")
-  set(NDK_ABI_armeabi-v6_TRIPLE        "arm-linux-androideabi")
-  set(NDK_ABI_armeabi-v6_LLVM_TRIPLE   "armv6-none-linux-androideabi")
-  set(NDK_ABI_armeabi_PROC             "armv5te")
-  set(NDK_ABI_armeabi_ARCH             "arm")
-  set(NDK_ABI_armeabi_TRIPLE           "arm-linux-androideabi")
-  set(NDK_ABI_armeabi_LLVM_TRIPLE      "armv5te-none-linux-androideabi")
-  set(NDK_ABI_mips_PROC                "mips")
-  set(NDK_ABI_mips_ARCH                "mips")
-  set(NDK_ABI_mips_TRIPLE              "mipsel-linux-android")
-  set(NDK_ABI_mips_LLVM_TRIPLE         "mipsel-none-linux-android")
-  set(NDK_ABI_mips64_PROC              "mips64")
-  set(NDK_ABI_mips64_ARCH              "mips64")
-  set(NDK_ABI_mips64_TRIPLE            "mips64el-linux-android")
-  set(NDK_ABI_mips64_LLVM_TRIPLE       "mips64el-none-linux-android")
-  set(NDK_ABI_x86_PROC                 "i686")
-  set(NDK_ABI_x86_ARCH                 "x86")
-  set(NDK_ABI_x86_TRIPLE               "i686-linux-android")
-  set(NDK_ABI_x86_LLVM_TRIPLE          "i686-none-linux-android")
-  set(NDK_ABI_x86_64_PROC              "x86_64")
-  set(NDK_ABI_x86_64_ARCH              "x86_64")
-  set(NDK_ABI_x86_64_TRIPLE            "x86_64-linux-android")
-  set(NDK_ABI_x86_64_LLVM_TRIPLE       "x86_64-none-linux-android")
-
-  set(NDK_PROC_aarch64_ABI "arm64-v8a")
-  set(NDK_PROC_armv7-a_ABI "armeabi-v7a")
-  set(NDK_PROC_armv6_ABI   "armeabi-v6")
-  set(NDK_PROC_armv5te_ABI "armeabi")
-  set(NDK_PROC_i686_ABI    "x86")
-  set(NDK_PROC_mips_ABI    "mips")
-  set(NDK_PROC_mips64_ABI  "mips64")
-  set(NDK_PROC_x86_64_ABI  "x86_64")
-
-  set(NDK_ARCH_arm64_ABI  "arm64-v8a")
-  set(NDK_ARCH_arm_ABI    "armeabi")
-  set(NDK_ARCH_mips_ABI   "mips")
-  set(NDK_ARCH_mips64_ABI "mips64")
-  set(NDK_ARCH_x86_ABI    "x86")
-  set(NDK_ARCH_x86_64_ABI "x86_64")
-endif()
-
-# Validate inputs.
-if(CMAKE_ANDROID_ARCH_ABI AND NOT DEFINED "NDK_ABI_${CMAKE_ANDROID_ARCH_ABI}_PROC")
-  message(FATAL_ERROR "Android: Unknown ABI CMAKE_ANDROID_ARCH_ABI='${CMAKE_ANDROID_ARCH_ABI}'.")
-endif()
-if(CMAKE_SYSTEM_PROCESSOR AND NOT DEFINED "NDK_PROC_${CMAKE_SYSTEM_PROCESSOR}_ABI")
-  message(FATAL_ERROR "Android: Unknown processor CMAKE_SYSTEM_PROCESSOR='${CMAKE_SYSTEM_PROCESSOR}'.")
-endif()
-if(_ANDROID_SYSROOT_ARCH AND NOT DEFINED "NDK_ARCH_${_ANDROID_SYSROOT_ARCH}_ABI")
-  message(FATAL_ERROR
-    "Android: Unknown architecture '${_ANDROID_SYSROOT_ARCH}' specified in CMAKE_SYSROOT:\n"
-    "  ${CMAKE_SYSROOT}"
-    )
-endif()
-
-# Select an ABI.
-if(NOT CMAKE_ANDROID_ARCH_ABI)
-  if(CMAKE_SYSTEM_PROCESSOR)
-    set(CMAKE_ANDROID_ARCH_ABI "${NDK_PROC_${CMAKE_SYSTEM_PROCESSOR}_ABI}")
-  elseif(_ANDROID_SYSROOT_ARCH)
-    set(CMAKE_ANDROID_ARCH_ABI "${NDK_ARCH_${_ANDROID_SYSROOT_ARCH}_ABI}")
-  elseif(_INCLUDED_ABIS)
-    # Default to the oldest ARM ABI.
-    foreach(abi armeabi armeabi-v7a arm64-v8a)
-      if("${abi}" IN_LIST _ANDROID_KNOWN_ABIS)
-        set(CMAKE_ANDROID_ARCH_ABI "${abi}")
-        break()
-      endif()
-    endforeach()
-    if(NOT CMAKE_ANDROID_ARCH_ABI)
-      message(FATAL_ERROR
-        "Android: Can not determine the default ABI. Please set CMAKE_ANDROID_ARCH_ABI."
-      )
-    endif()
-  else()
-    # https://developer.android.com/ndk/guides/application_mk.html
-    # Default is the oldest ARM ABI.
-
-    # Lookup the available ABIs among all toolchains.
-    set(_ANDROID_ABIS "")
-    file(GLOB _ANDROID_CONFIG_MKS
-      "${CMAKE_ANDROID_NDK}/build/core/toolchains/*/config.mk"
-      "${CMAKE_ANDROID_NDK}/toolchains/*/config.mk"
-      )
-    foreach(config_mk IN LISTS _ANDROID_CONFIG_MKS)
-      file(STRINGS "${config_mk}" _ANDROID_TOOL_ABIS REGEX "^TOOLCHAIN_ABIS :=")
-      string(REPLACE "TOOLCHAIN_ABIS :=" "" _ANDROID_TOOL_ABIS "${_ANDROID_TOOL_ABIS}")
-      separate_arguments(_ANDROID_TOOL_ABIS UNIX_COMMAND "${_ANDROID_TOOL_ABIS}")
-      list(APPEND _ANDROID_ABIS ${_ANDROID_TOOL_ABIS})
-      unset(_ANDROID_TOOL_ABIS)
-    endforeach()
-    unset(_ANDROID_CONFIG_MKS)
-
-    # Choose the oldest among the available arm ABIs.
-    if(_ANDROID_ABIS)
-      list(REMOVE_DUPLICATES _ANDROID_ABIS)
-      foreach(abi armeabi armeabi-v7a arm64-v8a)
-        if("${abi}" IN_LIST _ANDROID_ABIS)
-          set(CMAKE_ANDROID_ARCH_ABI "${abi}")
-          break()
-        endif()
-      endforeach()
-    endif()
-    unset(_ANDROID_ABIS)
-
-    if(NOT CMAKE_ANDROID_ARCH_ABI)
-      set(CMAKE_ANDROID_ARCH_ABI "armeabi")
-    endif()
-  endif()
-endif()
-if(_INCLUDED_ABIS AND NOT CMAKE_ANDROID_ARCH_ABI IN_LIST _ANDROID_KNOWN_ABIS)
-  message(FATAL_ERROR
-    "Android: ABI '${CMAKE_ANDROID_ARCH_ABI}' is not supported by the NDK.\n"
-    "Supported ABIS: ${_ANDROID_KNOWN_ABIS}."
-  )
-endif()
-set(CMAKE_ANDROID_ARCH "${NDK_ABI_${CMAKE_ANDROID_ARCH_ABI}_ARCH}")
-if(_ANDROID_SYSROOT_ARCH AND NOT "x${_ANDROID_SYSROOT_ARCH}" STREQUAL "x${CMAKE_ANDROID_ARCH}")
-  message(FATAL_ERROR
-    "Android: Architecture '${_ANDROID_SYSROOT_ARCH}' specified in CMAKE_SYSROOT:\n"
-    "  ${CMAKE_SYSROOT}\n"
-    "does not match architecture '${CMAKE_ANDROID_ARCH}' for the ABI '${CMAKE_ANDROID_ARCH_ABI}'."
-    )
-endif()
-set(CMAKE_ANDROID_ARCH_TRIPLE "${NDK_ABI_${CMAKE_ANDROID_ARCH_ABI}_TRIPLE}")
-set(CMAKE_ANDROID_ARCH_LLVM_TRIPLE
-    "${NDK_ABI_${CMAKE_ANDROID_ARCH_ABI}_LLVM_TRIPLE}")
-
-# Select a processor.
-if(NOT CMAKE_SYSTEM_PROCESSOR)
-  set(CMAKE_SYSTEM_PROCESSOR "${NDK_ABI_${CMAKE_ANDROID_ARCH_ABI}_PROC}")
-endif()
-
-# If the user specified both an ABI and a processor then they might not match.
-if(NOT NDK_ABI_${CMAKE_ANDROID_ARCH_ABI}_PROC STREQUAL CMAKE_SYSTEM_PROCESSOR)
-  message(FATAL_ERROR "Android: The specified CMAKE_ANDROID_ARCH_ABI='${CMAKE_ANDROID_ARCH_ABI}' and CMAKE_SYSTEM_PROCESSOR='${CMAKE_SYSTEM_PROCESSOR}' is not a valid combination.")
-endif()
-
-# Select an API.
-if(CMAKE_SYSTEM_VERSION)
-  set(_ANDROID_API_VAR CMAKE_SYSTEM_VERSION)
-elseif(CMAKE_ANDROID_API)
-  set(CMAKE_SYSTEM_VERSION "${CMAKE_ANDROID_API}")
-  set(_ANDROID_API_VAR CMAKE_ANDROID_API)
-elseif(_ANDROID_SYSROOT_API)
-  set(CMAKE_SYSTEM_VERSION "${_ANDROID_SYSROOT_API}")
-  set(_ANDROID_API_VAR CMAKE_SYSROOT)
-elseif(_ANDROID_STANDALONE_TOOLCHAIN_API)
-  set(CMAKE_SYSTEM_VERSION "${_ANDROID_STANDALONE_TOOLCHAIN_API}")
-endif()
-if(CMAKE_SYSTEM_VERSION)
-  if(CMAKE_ANDROID_API AND NOT "x${CMAKE_ANDROID_API}" STREQUAL "x${CMAKE_SYSTEM_VERSION}")
-    message(FATAL_ERROR
-      "Android: The API specified by CMAKE_ANDROID_API='${CMAKE_ANDROID_API}' is not consistent with CMAKE_SYSTEM_VERSION='${CMAKE_SYSTEM_VERSION}'."
-      )
-  endif()
-  if(_ANDROID_SYSROOT_API)
-    foreach(v CMAKE_ANDROID_API CMAKE_SYSTEM_VERSION)
-      if(${v} AND NOT "x${_ANDROID_SYSROOT_API}" STREQUAL "x${${v}}")
-        message(FATAL_ERROR
-          "Android: The API specified by ${v}='${${v}}' is not consistent with CMAKE_SYSROOT:\n"
-          "  ${CMAKE_SYSROOT}"
-          )
-      endif()
-    endforeach()
-  endif()
-  if(CMAKE_ANDROID_NDK)
-    if (_INCLUDED_PLATFORMS)
-      if(CMAKE_SYSTEM_VERSION GREATER NDK_MAX_PLATFORM_LEVEL OR
-         CMAKE_SYSTEM_VERSION LESS NDK_MIN_PLATFORM_LEVEL)
-        message(FATAL_ERROR
-          "Android: The API level ${CMAKE_SYSTEM_VERSION} is not supported by the NDK.\n"
-          "Choose one in the range of [${NDK_MIN_PLATFORM_LEVEL}, ${NDK_MAX_PLATFORM_LEVEL}]."
-        )
-      endif()
-    else()
-      if(NOT IS_DIRECTORY "${CMAKE_ANDROID_NDK}/platforms/android-${CMAKE_SYSTEM_VERSION}")
-        message(FATAL_ERROR
-          "Android: The API specified by ${_ANDROID_API_VAR}='${${_ANDROID_API_VAR}}' does not exist in the NDK.  "
-          "The directory:\n"
-          "  ${CMAKE_ANDROID_NDK}/platforms/android-${CMAKE_SYSTEM_VERSION}\n"
-          "does not exist."
-          )
-      endif()
-    endif()
-  endif()
-elseif(CMAKE_ANDROID_NDK)
-  if (_INCLUDED_PLATFORMS)
-    set(CMAKE_SYSTEM_VERSION ${NDK_MIN_PLATFORM_LEVEL})
-    # And for LP64 we need to pull up to 21. No diagnostic is provided here because
-    # minSdkVersion < 21 is valid for the project even though it may not be for this
-    # ABI.
-    if(CMAKE_ANDROID_ARCH_ABI MATCHES "64(-v8a)?$" AND CMAKE_SYSTEM_VERSION LESS 21)
-      set(CMAKE_SYSTEM_VERSION 21)
-    endif()
-  else()
-    file(GLOB _ANDROID_APIS_1 RELATIVE "${CMAKE_ANDROID_NDK}/platforms" "${CMAKE_ANDROID_NDK}/platforms/android-[0-9]")
-    file(GLOB _ANDROID_APIS_2 RELATIVE "${CMAKE_ANDROID_NDK}/platforms" "${CMAKE_ANDROID_NDK}/platforms/android-[0-9][0-9]")
-    list(SORT _ANDROID_APIS_1)
-    list(SORT _ANDROID_APIS_2)
-    set(_ANDROID_APIS ${_ANDROID_APIS_1} ${_ANDROID_APIS_2})
-    unset(_ANDROID_APIS_1)
-    unset(_ANDROID_APIS_2)
-    if(_ANDROID_APIS STREQUAL "")
-      message(FATAL_ERROR
-        "Android: No APIs found in the NDK.  No\n"
-        "  ${CMAKE_ANDROID_NDK}/platforms/android-*\n"
-        "directories exist."
-        )
-    endif()
-    string(REPLACE "android-" "" _ANDROID_APIS "${_ANDROID_APIS}")
-    list(REVERSE _ANDROID_APIS)
-    list(GET _ANDROID_APIS 0 CMAKE_SYSTEM_VERSION)
-    unset(_ANDROID_APIS)
-  endif()
-endif()
-if(NOT CMAKE_SYSTEM_VERSION MATCHES "^[0-9]+$")
-  message(FATAL_ERROR "Android: The API specified by CMAKE_SYSTEM_VERSION='${CMAKE_SYSTEM_VERSION}' is not an integer.")
-endif()
-
-if(CMAKE_ANDROID_NDK AND NOT DEFINED CMAKE_ANDROID_NDK_DEPRECATED_HEADERS)
-  if(IS_DIRECTORY "${CMAKE_ANDROID_NDK}/sysroot/usr/include/${CMAKE_ANDROID_ARCH_TRIPLE}")
-    # Unified headers exist so we use them by default.
-    set(CMAKE_ANDROID_NDK_DEPRECATED_HEADERS 0)
-  else()
-    # Unified headers do not exist so use the deprecated headers.
-    set(CMAKE_ANDROID_NDK_DEPRECATED_HEADERS 1)
-  endif()
-endif()
-
-# Save the Android-specific information in CMakeSystem.cmake.
-set(CMAKE_SYSTEM_CUSTOM_CODE "
-set(CMAKE_ANDROID_NDK \"${CMAKE_ANDROID_NDK}\")
-set(CMAKE_ANDROID_STANDALONE_TOOLCHAIN \"${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}\")
-set(CMAKE_ANDROID_ARCH \"${CMAKE_ANDROID_ARCH}\")
-set(CMAKE_ANDROID_ARCH_ABI \"${CMAKE_ANDROID_ARCH_ABI}\")
-")
-
-if(CMAKE_ANDROID_NDK)
-  string(APPEND CMAKE_SYSTEM_CUSTOM_CODE
-    "set(CMAKE_ANDROID_ARCH_TRIPLE \"${CMAKE_ANDROID_ARCH_TRIPLE}\")\n"
-    "set(CMAKE_ANDROID_ARCH_LLVM_TRIPLE \"${CMAKE_ANDROID_ARCH_LLVM_TRIPLE}\")\n"
-    "set(CMAKE_ANDROID_NDK_DEPRECATED_HEADERS \"${CMAKE_ANDROID_NDK_DEPRECATED_HEADERS}\")\n"
-    "set(CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG \"${CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG}\")\n"
-    "set(CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED \"${CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED}\")\n"
-    )
-endif()
-
-# Select an ARM variant.
-if(CMAKE_ANDROID_ARCH_ABI MATCHES "^armeabi")
-  if(CMAKE_ANDROID_ARM_MODE)
-    set(CMAKE_ANDROID_ARM_MODE 1)
-  else()
-    set(CMAKE_ANDROID_ARM_MODE 0)
-  endif()
-  string(APPEND CMAKE_SYSTEM_CUSTOM_CODE
-    "set(CMAKE_ANDROID_ARM_MODE \"${CMAKE_ANDROID_ARM_MODE}\")\n"
-    )
-elseif(DEFINED CMAKE_ANDROID_ARM_MODE)
-  message(FATAL_ERROR "Android: CMAKE_ANDROID_ARM_MODE is set but is valid only for 'armeabi' architectures.")
-endif()
-
-if(CMAKE_ANDROID_ARCH_ABI STREQUAL "armeabi-v7a")
-  if(CMAKE_ANDROID_ARM_NEON)
-    set(CMAKE_ANDROID_ARM_NEON 1)
-  else()
-    set(CMAKE_ANDROID_ARM_NEON 0)
-  endif()
-  string(APPEND CMAKE_SYSTEM_CUSTOM_CODE
-    "set(CMAKE_ANDROID_ARM_NEON \"${CMAKE_ANDROID_ARM_NEON}\")\n"
-    )
-elseif(DEFINED CMAKE_ANDROID_ARM_NEON)
-  message(FATAL_ERROR "Android: CMAKE_ANDROID_ARM_NEON is set but is valid only for 'armeabi-v7a' architecture.")
-endif()
-
-# Report the chosen architecture.
-message(STATUS "Android: Targeting API '${CMAKE_SYSTEM_VERSION}' with architecture '${CMAKE_ANDROID_ARCH}', ABI '${CMAKE_ANDROID_ARCH_ABI}', and processor '${CMAKE_SYSTEM_PROCESSOR}'")
-
-cmake_policy(POP)
-
-# Include the NDK hook.
-# It can be used by NDK to inject necessary fixes for an earlier cmake.
-if(CMAKE_ANDROID_NDK)
-  include(${CMAKE_ANDROID_NDK}/build/cmake/hooks/post/Android-Determine.cmake OPTIONAL)
-endif()
diff --git a/share/cmake-3.18/Modules/Platform/Android-Initialize.cmake b/share/cmake-3.18/Modules/Platform/Android-Initialize.cmake
deleted file mode 100644
index 96228cc..0000000
--- a/share/cmake-3.18/Modules/Platform/Android-Initialize.cmake
+++ /dev/null
@@ -1,67 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-# When CMAKE_SYSTEM_NAME is "Android", CMakeSystemSpecificInitialize loads this
-# module.
-
-# Include the NDK hook.
-# It can be used by NDK to inject necessary fixes for an earlier cmake.
-if(CMAKE_ANDROID_NDK)
-  include(${CMAKE_ANDROID_NDK}/build/cmake/hooks/pre/Android-Initialize.cmake OPTIONAL)
-endif()
-
-# Support for NVIDIA Nsight Tegra Visual Studio Edition was previously
-# implemented in the CMake VS IDE generators.  Avoid interfering with
-# that functionality for now.  Later we may try to integrate this.
-if(CMAKE_VS_PLATFORM_NAME STREQUAL "Tegra-Android")
-  return()
-endif()
-
-# Commonly used Android toolchain files that pre-date CMake upstream support
-# set CMAKE_SYSTEM_VERSION to 1.  Avoid interfering with them.
-if(CMAKE_SYSTEM_VERSION EQUAL 1)
-  return()
-endif()
-
-set(CMAKE_BUILD_TYPE_INIT "RelWithDebInfo")
-
-# Skip sysroot selection if the NDK has a unified toolchain.
-if(CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED)
-  return()
-endif()
-
-# Natively compiling on an Android host doesn't use the NDK cross-compilation
-# tools.
-if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Android")
-  return()
-endif()
-
-if(NOT CMAKE_SYSROOT)
-  if(CMAKE_ANDROID_NDK)
-    set(CMAKE_SYSROOT "${CMAKE_ANDROID_NDK}/platforms/android-${CMAKE_SYSTEM_VERSION}/arch-${CMAKE_ANDROID_ARCH}")
-    if(NOT CMAKE_ANDROID_NDK_DEPRECATED_HEADERS)
-      set(CMAKE_SYSROOT_COMPILE "${CMAKE_ANDROID_NDK}/sysroot")
-    endif()
-  elseif(CMAKE_ANDROID_STANDALONE_TOOLCHAIN)
-    set(CMAKE_SYSROOT "${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}/sysroot")
-  endif()
-endif()
-
-if(CMAKE_SYSROOT)
-  if(NOT IS_DIRECTORY "${CMAKE_SYSROOT}")
-    message(FATAL_ERROR
-      "Android: The system root directory needed for the selected Android version and architecture does not exist:\n"
-      "  ${CMAKE_SYSROOT}\n"
-      )
-  endif()
-else()
-  message(FATAL_ERROR
-    "Android: No CMAKE_SYSROOT was selected."
-    )
-endif()
-
-# Include the NDK hook.
-# It can be used by NDK to inject necessary fixes for an earlier cmake.
-if(CMAKE_ANDROID_NDK)
-  include(${CMAKE_ANDROID_NDK}/build/cmake/hooks/post/Android-Initialize.cmake OPTIONAL)
-endif()
diff --git a/share/cmake-3.18/Modules/Platform/Android.cmake b/share/cmake-3.18/Modules/Platform/Android.cmake
deleted file mode 100644
index e4b9a09..0000000
--- a/share/cmake-3.18/Modules/Platform/Android.cmake
+++ /dev/null
@@ -1,92 +0,0 @@
-# Include the NDK hook.
-# It can be used by NDK to inject necessary fixes for an earlier cmake.
-if(CMAKE_ANDROID_NDK)
-  include(${CMAKE_ANDROID_NDK}/build/cmake/hooks/pre/Android.cmake OPTIONAL)
-endif()
-
-include(Platform/Linux)
-
-set(ANDROID 1)
-
-# Natively compiling on an Android host doesn't need these flags to be reset.
-if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Android")
-  return()
-endif()
-
-# Conventionally Android does not use versioned soname
-# But in modern versions it is acceptable
-if(NOT DEFINED CMAKE_PLATFORM_NO_VERSIONED_SONAME)
-  set(CMAKE_PLATFORM_NO_VERSIONED_SONAME 1)
-endif()
-
-# Android reportedly ignores RPATH, and we cannot predict the install
-# location anyway.
-set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "")
-
-# Nsight Tegra Visual Studio Edition takes care of
-# prefixing library names with '-l'.
-if(CMAKE_VS_PLATFORM_NAME STREQUAL "Tegra-Android")
-  set(CMAKE_LINK_LIBRARY_FLAG "")
-endif()
-
-# Commonly used Android toolchain files that pre-date CMake upstream support
-# set CMAKE_SYSTEM_VERSION to 1.  Avoid interfering with them.
-if(CMAKE_SYSTEM_VERSION EQUAL 1)
-  return()
-endif()
-
-if(CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED)
-  # Tell CMake not to search host sysroots for headers/libraries.
-
-  # All paths added to CMAKE_SYSTEM_*_PATH below will be rerooted under
-  # CMAKE_FIND_ROOT_PATH. This is set because:
-  # 1. Users may structure their libraries in a way similar to NDK. When they do that,
-  #    they can simply append another path to CMAKE_FIND_ROOT_PATH.
-  # 2. CMAKE_FIND_ROOT_PATH must be non-empty for CMAKE_FIND_ROOT_PATH_MODE_* == ONLY
-  #    to be meaningful. https://github.com/android-ndk/ndk/issues/890
-  list(APPEND CMAKE_FIND_ROOT_PATH "${CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED}/sysroot")
-
-  # Allow users to override these values in case they want more strict behaviors.
-  # For example, they may want to prevent the NDK's libz from being picked up so
-  # they can use their own.
-  # https://github.com/android-ndk/ndk/issues/517
-  if(NOT DEFINED CMAKE_FIND_ROOT_PATH_MODE_PROGRAM)
-    set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
-  endif()
-
-  if(NOT DEFINED CMAKE_FIND_ROOT_PATH_MODE_LIBRARY)
-    set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
-  endif()
-
-  if(NOT DEFINED CMAKE_FIND_ROOT_PATH_MODE_INCLUDE)
-    set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
-  endif()
-
-  if(NOT DEFINED CMAKE_FIND_ROOT_PATH_MODE_PACKAGE)
-    set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
-  endif()
-
-  # Don't search paths in PATH environment variable.
-  if(NOT DEFINED CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH)
-    set(CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH OFF)
-  endif()
-
-  # Allows CMake to find headers in the architecture-specific include directories.
-  set(CMAKE_LIBRARY_ARCHITECTURE "${CMAKE_ANDROID_ARCH_TRIPLE}")
-
-  # Instructs CMake to search the correct API level for libraries.
-  # Besides the paths like <root>/<prefix>/lib/<arch>, cmake also searches <root>/<prefix>.
-  # So we can add the API level specific directory directly.
-  # https://github.com/android/ndk/issues/929
-  list(PREPEND CMAKE_SYSTEM_PREFIX_PATH
-    "/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}/${CMAKE_SYSTEM_VERSION}"
-    )
-
-  list(APPEND CMAKE_SYSTEM_PROGRAM_PATH "${CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED}/bin")
-endif()
-
-# Include the NDK hook.
-# It can be used by NDK to inject necessary fixes for an earlier cmake.
-if(CMAKE_ANDROID_NDK)
-  include(${CMAKE_ANDROID_NDK}/build/cmake/hooks/post/Android.cmake OPTIONAL)
-endif()
diff --git a/share/cmake-3.18/Modules/Platform/Android/Determine-Compiler-NDK.cmake b/share/cmake-3.18/Modules/Platform/Android/Determine-Compiler-NDK.cmake
deleted file mode 100644
index f56e1d5..0000000
--- a/share/cmake-3.18/Modules/Platform/Android/Determine-Compiler-NDK.cmake
+++ /dev/null
@@ -1,271 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-# In Android NDK r19 and above there is a single clang toolchain.
-if(CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED)
-  if(CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION AND NOT CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION STREQUAL "clang")
-    message(FATAL_ERROR
-      "Android: The CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION value '${CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION}' "
-      "is not supported by this NDK.  It must be 'clang' or not set at all."
-      )
-  endif()
-  message(STATUS "Android: Selected unified Clang toolchain")
-  set(_ANDROID_TOOL_NDK_TOOLCHAIN_VERSION "clang")
-  set(_ANDROID_TOOL_C_COMPILER "${CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED}/bin/clang${_ANDROID_HOST_EXT}")
-  set(_ANDROID_TOOL_C_TOOLCHAIN_MACHINE "${CMAKE_ANDROID_ARCH_TRIPLE}")
-  set(_ANDROID_TOOL_C_TOOLCHAIN_VERSION "")
-  set(_ANDROID_TOOL_C_COMPILER_EXTERNAL_TOOLCHAIN "")
-  set(_ANDROID_TOOL_C_TOOLCHAIN_PREFIX "${CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED}/bin/${CMAKE_ANDROID_ARCH_TRIPLE}-")
-  set(_ANDROID_TOOL_C_TOOLCHAIN_SUFFIX "${_ANDROID_HOST_EXT}")
-  set(_ANDROID_TOOL_CXX_COMPILER "${CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED}/bin/clang++${_ANDROID_HOST_EXT}")
-  set(_ANDROID_TOOL_CXX_TOOLCHAIN_MACHINE "${CMAKE_ANDROID_ARCH_TRIPLE}")
-  set(_ANDROID_TOOL_CXX_TOOLCHAIN_VERSION "")
-  set(_ANDROID_TOOL_CXX_COMPILER_EXTERNAL_TOOLCHAIN "")
-  set(_ANDROID_TOOL_CXX_TOOLCHAIN_PREFIX "${CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED}/bin/${CMAKE_ANDROID_ARCH_TRIPLE}-")
-  set(_ANDROID_TOOL_CXX_TOOLCHAIN_SUFFIX "${_ANDROID_HOST_EXT}")
-  set(_CMAKE_TOOLCHAIN_PREFIX "${CMAKE_ANDROID_ARCH_TRIPLE}-")
-  return()
-endif()
-
-# In Android NDK releases there is build system toolchain selection logic in
-# these files:
-#
-# * <ndk>/build/core/init.mk
-# * <ndk>/build/core/setup-toolchain.mk
-# * <ndk>/[build/core/]toolchains/<toolchain>/{config.mk,setup.mk}
-#
-# We parse information out of the ``config.mk`` and ``setup.mk`` files below.
-#
-# There is also a "toolchains" directory with the prebuilt toolchains themselves:
-#
-# * <triple-or-arch>-<gcc-version>/prebuilt/<host>/bin/<triple>-gcc(.exe)?
-#   The gcc compiler to be invoked.
-#
-# * llvm*/prebuilt/<host>/bin/clang
-#   The clang compiler to be invoked with flags:
-#     -target <triple>
-#     -gcc-toolchain <ndk>/toolchains/<triple-or-arch>-<gcc-version>
-
-# Glob available toolchains in the NDK, restricted by any version request.
-if(CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION STREQUAL "clang")
-  set(_ANDROID_TOOL_PATTERNS "*-clang" "*-clang[0-9].[0-9]")
-elseif(CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION)
-  if(NOT CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION MATCHES "^(clang)?[0-9]\\.[0-9]$")
-    message(FATAL_ERROR
-      "Android: The CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION value '${CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION}' "
-      "is not one of the allowed forms:\n"
-      "  <major>.<minor>       = GCC of specified version\n"
-      "  clang<major>.<minor>  = Clang of specified version\n"
-      "  clang                 = Clang of most recent available version\n"
-      )
-  endif()
-  set(_ANDROID_TOOL_PATTERNS "*-${CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION}")
-else()
-  # If we can find any gcc toolchains then use one by default.
-  # Otherwise we look for clang toolchains (e.g. NDK r18+).
-  file(GLOB _ANDROID_CONFIG_MKS_FOR_GCC
-    "${CMAKE_ANDROID_NDK}/build/core/toolchains/*-[0-9].[0-9]/config.mk"
-    "${CMAKE_ANDROID_NDK}/toolchains/*-[0-9].[0-9]/config.mk"
-    )
-  if(_ANDROID_CONFIG_MKS_FOR_GCC)
-    set(_ANDROID_TOOL_PATTERNS "*-[0-9].[0-9]")
-  else()
-    set(_ANDROID_TOOL_PATTERNS "*-clang")
-  endif()
-  unset(_ANDROID_CONFIG_MKS_FOR_GCC)
-endif()
-set(_ANDROID_CONFIG_MK_PATTERNS)
-foreach(base "build/core/toolchains" "toolchains")
-  foreach(pattern IN LISTS _ANDROID_TOOL_PATTERNS)
-    list(APPEND _ANDROID_CONFIG_MK_PATTERNS
-      "${CMAKE_ANDROID_NDK}/${base}/${pattern}/config.mk"
-      )
-  endforeach()
-endforeach()
-unset(_ANDROID_TOOL_PATTERNS)
-file(GLOB _ANDROID_CONFIG_MKS ${_ANDROID_CONFIG_MK_PATTERNS})
-unset(_ANDROID_CONFIG_MK_PATTERNS)
-
-# Find the newest toolchain version matching the ABI.
-set(_ANDROID_TOOL_NAME "")
-set(_ANDROID_TOOL_VERS 0)
-set(_ANDROID_TOOL_VERS_NDK "")
-set(_ANDROID_TOOL_SETUP_MK "")
-foreach(config_mk IN LISTS _ANDROID_CONFIG_MKS)
-  # Check that the toolchain matches the ABI.
-  file(STRINGS "${config_mk}" _ANDROID_TOOL_ABIS REGEX "^TOOLCHAIN_ABIS :=.* ${CMAKE_ANDROID_ARCH_ABI}( |$)")
-  if(NOT _ANDROID_TOOL_ABIS)
-    continue()
-  endif()
-  unset(_ANDROID_TOOL_ABIS)
-
-  # Check the version.
-  if("${config_mk}" MATCHES [[/([^/]+-((clang)?([0-9]\.[0-9]|)))/config.mk$]])
-    set(_ANDROID_CUR_NAME "${CMAKE_MATCH_1}")
-    set(_ANDROID_CUR_VERS "${CMAKE_MATCH_4}")
-    set(_ANDROID_CUR_VERS_NDK "${CMAKE_MATCH_2}")
-    if(_ANDROID_TOOL_VERS STREQUAL "")
-      # already the latest possible
-    elseif(_ANDROID_CUR_VERS STREQUAL "" OR _ANDROID_CUR_VERS VERSION_GREATER _ANDROID_TOOL_VERS)
-      set(_ANDROID_TOOL_NAME "${_ANDROID_CUR_NAME}")
-      set(_ANDROID_TOOL_VERS "${_ANDROID_CUR_VERS}")
-      set(_ANDROID_TOOL_VERS_NDK "${_ANDROID_CUR_VERS_NDK}")
-      string(REPLACE "/config.mk" "/setup.mk" _ANDROID_TOOL_SETUP_MK "${config_mk}")
-    endif()
-    unset(_ANDROID_CUR_TOOL)
-    unset(_ANDROID_CUR_VERS)
-    unset(_ANDROID_CUR_VERS_NDK)
-  endif()
-endforeach()
-
-# Verify that we have a suitable toolchain.
-if(NOT _ANDROID_TOOL_NAME)
-  if(_ANDROID_CONFIG_MKS)
-    string(REPLACE ";" "\n  " _ANDROID_TOOLS_MSG "after considering:;${_ANDROID_CONFIG_MKS}")
-  else()
-    set(_ANDROID_TOOLS_MSG "")
-  endif()
-  if(CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION)
-    string(CONCAT _ANDROID_TOOLS_MSG
-      "of the version specified by CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION:\n"
-      "  ${CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION}\n"
-      "${_ANDROID_TOOLS_MSG}")
-  endif()
-  message(FATAL_ERROR
-    "Android: No toolchain for ABI '${CMAKE_ANDROID_ARCH_ABI}' found in the NDK:\n"
-    "  ${CMAKE_ANDROID_NDK}\n"
-    "${_ANDROID_TOOLS_MSG}"
-    )
-endif()
-unset(_ANDROID_CONFIG_MKS)
-
-# For clang toolchains we still need to find a gcc toolchain.
-if(_ANDROID_TOOL_NAME MATCHES "-clang")
-  set(_ANDROID_TOOL_CLANG_NAME "${_ANDROID_TOOL_NAME}")
-  set(_ANDROID_TOOL_CLANG_VERS "${_ANDROID_TOOL_VERS}")
-  set(_ANDROID_TOOL_NAME "")
-  set(_ANDROID_TOOL_VERS "")
-else()
-  set(_ANDROID_TOOL_CLANG_NAME "")
-  set(_ANDROID_TOOL_CLANG_VERS "")
-endif()
-
-# Parse the toolchain setup.mk file to extract information we need.
-# Their content is not standardized across toolchains or NDK versions,
-# so we match known cases.  Note that the parsing is stateful across
-# lines because we need to substitute for some Make variable references.
-if(CMAKE_ANDROID_NDK_TOOLCHAIN_DEBUG)
-  message(STATUS "loading: ${_ANDROID_TOOL_SETUP_MK}")
-endif()
-file(STRINGS "${_ANDROID_TOOL_SETUP_MK}" _ANDROID_TOOL_SETUP REGEX "^(LLVM|TOOLCHAIN)_[A-Z_]+ +:= +.*$")
-unset(_ANDROID_TOOL_SETUP_MK)
-set(_ANDROID_TOOL_PREFIX "")
-set(_ANDROID_TOOL_NAME_ONLY "")
-set(_ANDROID_TOOL_LLVM_NAME "llvm")
-set(_ANDROID_TOOL_LLVM_VERS "")
-foreach(line IN LISTS _ANDROID_TOOL_SETUP)
-  if(CMAKE_ANDROID_NDK_TOOLCHAIN_DEBUG)
-    message(STATUS "setup.mk: ${line}")
-  endif()
-
-  if(line MATCHES [[^TOOLCHAIN_PREFIX +:= +.*/bin/([^$/ ]*) *$]])
-    # We just matched the toolchain prefix with no Make variable references.
-    set(_ANDROID_TOOL_PREFIX "${CMAKE_MATCH_1}")
-  elseif(_ANDROID_TOOL_CLANG_NAME)
-    # For clang toolchains we need to find more information.
-    if(line MATCHES [[^TOOLCHAIN_VERSION +:= +([0-9.]+) *$]])
-      # We just matched the gcc toolchain version number.  Save it for later.
-      set(_ANDROID_TOOL_VERS "${CMAKE_MATCH_1}")
-    elseif(line MATCHES [[^TOOLCHAIN_NAME +:= +(.*\$\(TOOLCHAIN_VERSION\)) *$]])
-      # We just matched the gcc toolchain name with a version number placeholder, so substitute it.
-      # The gcc toolchain version number will have already been extracted from a TOOLCHAIN_VERSION line.
-      string(REPLACE "$(TOOLCHAIN_VERSION)" "${_ANDROID_TOOL_VERS}" _ANDROID_TOOL_NAME "${CMAKE_MATCH_1}")
-    elseif(line MATCHES [[^TOOLCHAIN_NAME +:= +([^$/ ]+) *$]])
-      # We just matched the gcc toolchain name without version number.  Save it for later.
-      set(_ANDROID_TOOL_NAME_ONLY "${CMAKE_MATCH_1}")
-    elseif(line MATCHES [[^TOOLCHAIN_PREFIX +:= +.*/bin/(\$\(TOOLCHAIN_NAME\)-) *$]])
-      # We just matched the toolchain prefix with a name placholder, so substitute it.
-      # The gcc toolchain name will have already been extracted without version number from a TOOLCHAIN_NAME line.
-      string(REPLACE "$(TOOLCHAIN_NAME)" "${_ANDROID_TOOL_NAME_ONLY}" _ANDROID_TOOL_PREFIX "${CMAKE_MATCH_1}")
-    elseif(line MATCHES [[^LLVM_VERSION +:= +([0-9.]+)$]])
-      # We just matched the llvm prebuilt binary toolchain version number.  Save it for later.
-      set(_ANDROID_TOOL_LLVM_VERS "${CMAKE_MATCH_1}")
-    elseif(line MATCHES [[^LLVM_NAME +:= +(llvm-\$\(LLVM_VERSION\)) *$]])
-      # We just matched the llvm prebuilt binary toolchain directory name with a version number placeholder,
-      # so substitute it. The llvm prebuilt binary toolchain version number will have already been extracted
-      # from a LLVM_VERSION line.
-      string(REPLACE "$(LLVM_VERSION)" "${_ANDROID_TOOL_LLVM_VERS}" _ANDROID_TOOL_LLVM_NAME "${CMAKE_MATCH_1}")
-    elseif(line MATCHES [[^LLVM_TOOLCHAIN_PREBUILT_ROOT +:= +\$\(call get-toolchain-root.*,([^$ ]+)\) *$]])
-      # We just matched the llvm prebuilt binary toolchain directory name.
-      set(_ANDROID_TOOL_LLVM_NAME "${CMAKE_MATCH_1}")
-    elseif(line MATCHES [[^TOOLCHAIN_ROOT +:= +\$\(call get-toolchain-root.*,(\$\(TOOLCHAIN_NAME\)-[0-9.]+)\) *$]])
-      # We just matched a placeholder for the name followed by a version number.
-      # The gcc toolchain name will have already been extracted without version number from a TOOLCHAIN_NAME line.
-      # Substitute for the placeholder to get the full gcc toolchain name.
-      string(REPLACE "$(TOOLCHAIN_NAME)" "${_ANDROID_TOOL_NAME_ONLY}" _ANDROID_TOOL_NAME "${CMAKE_MATCH_1}")
-    elseif(line MATCHES [[^TOOLCHAIN_ROOT +:= +\$\(call get-toolchain-root.*,([^$ ]+)\) *$]])
-      # We just matched the full gcc toolchain name without placeholder.
-      set(_ANDROID_TOOL_NAME "${CMAKE_MATCH_1}")
-    endif()
-  endif()
-endforeach()
-unset(_ANDROID_TOOL_NAME_ONLY)
-unset(_ANDROID_TOOL_LLVM_VERS)
-unset(_ANDROID_TOOL_SETUP)
-
-# Fall back to parsing the version and prefix from the tool name.
-if(NOT _ANDROID_TOOL_VERS AND "${_ANDROID_TOOL_NAME}" MATCHES "-([0-9.]+)$")
-  set(_ANDROID_TOOL_VERS "${CMAKE_MATCH_1}")
-endif()
-if(NOT _ANDROID_TOOL_PREFIX AND "${_ANDROID_TOOL_NAME}" MATCHES "^(.*-)[0-9.]+$")
-  set(_ANDROID_TOOL_PREFIX "${CMAKE_MATCH_1}")
-endif()
-
-# Help CMakeFindBinUtils locate things.
-set(_CMAKE_TOOLCHAIN_PREFIX "${_ANDROID_TOOL_PREFIX}")
-
-set(_ANDROID_TOOL_NDK_TOOLCHAIN_VERSION "${_ANDROID_TOOL_VERS_NDK}")
-
-# _ANDROID_TOOL_PREFIX should now match `gcc -dumpmachine`.
-string(REGEX REPLACE "-$" "" _ANDROID_TOOL_C_TOOLCHAIN_MACHINE "${_ANDROID_TOOL_PREFIX}")
-
-set(_ANDROID_TOOL_C_TOOLCHAIN_VERSION "${_ANDROID_TOOL_VERS}")
-set(_ANDROID_TOOL_C_TOOLCHAIN_PREFIX "${CMAKE_ANDROID_NDK}/toolchains/${_ANDROID_TOOL_NAME}/prebuilt/${CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG}/bin/${_ANDROID_TOOL_PREFIX}")
-set(_ANDROID_TOOL_C_TOOLCHAIN_SUFFIX "${_ANDROID_HOST_EXT}")
-
-set(_ANDROID_TOOL_CXX_TOOLCHAIN_MACHINE "${_ANDROID_TOOL_C_TOOLCHAIN_MACHINE}")
-set(_ANDROID_TOOL_CXX_TOOLCHAIN_VERSION "${_ANDROID_TOOL_C_TOOLCHAIN_VERSION}")
-set(_ANDROID_TOOL_CXX_TOOLCHAIN_PREFIX "${_ANDROID_TOOL_C_TOOLCHAIN_PREFIX}")
-set(_ANDROID_TOOL_CXX_TOOLCHAIN_SUFFIX "${_ANDROID_TOOL_C_TOOLCHAIN_SUFFIX}")
-
-if(_ANDROID_TOOL_CLANG_NAME)
-  message(STATUS "Android: Selected Clang toolchain '${_ANDROID_TOOL_CLANG_NAME}' with GCC toolchain '${_ANDROID_TOOL_NAME}'")
-  set(_ANDROID_TOOL_C_COMPILER "${CMAKE_ANDROID_NDK}/toolchains/${_ANDROID_TOOL_LLVM_NAME}/prebuilt/${CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG}/bin/clang${_ANDROID_HOST_EXT}")
-  set(_ANDROID_TOOL_C_COMPILER_EXTERNAL_TOOLCHAIN ${CMAKE_ANDROID_NDK}/toolchains/${_ANDROID_TOOL_NAME}/prebuilt/${CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG})
-  set(_ANDROID_TOOL_CXX_COMPILER "${CMAKE_ANDROID_NDK}/toolchains/${_ANDROID_TOOL_LLVM_NAME}/prebuilt/${CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG}/bin/clang++${_ANDROID_HOST_EXT}")
-  set(_ANDROID_TOOL_CXX_COMPILER_EXTERNAL_TOOLCHAIN "${_ANDROID_TOOL_C_COMPILER_EXTERNAL_TOOLCHAIN}")
-else()
-  message(STATUS "Android: Selected GCC toolchain '${_ANDROID_TOOL_NAME}'")
-  set(_ANDROID_TOOL_C_COMPILER "${_ANDROID_TOOL_C_TOOLCHAIN_PREFIX}gcc${_ANDROID_TOOL_C_TOOLCHAIN_SUFFIX}")
-  set(_ANDROID_TOOL_C_COMPILER_EXTERNAL_TOOLCHAIN "")
-  set(_ANDROID_TOOL_CXX_COMPILER "${_ANDROID_TOOL_CXX_TOOLCHAIN_PREFIX}g++${_ANDROID_TOOL_CXX_TOOLCHAIN_SUFFIX}")
-  set(_ANDROID_TOOL_CXX_COMPILER_EXTERNAL_TOOLCHAIN "")
-endif()
-
-if(CMAKE_ANDROID_NDK_TOOLCHAIN_DEBUG)
-  message(STATUS "_ANDROID_TOOL_NAME=${_ANDROID_TOOL_NAME}")
-  message(STATUS "_ANDROID_TOOL_VERS=${_ANDROID_TOOL_VERS}")
-  message(STATUS "_ANDROID_TOOL_VERS_NDK=${_ANDROID_TOOL_VERS_NDK}")
-  message(STATUS "_ANDROID_TOOL_PREFIX=${_ANDROID_TOOL_PREFIX}")
-  message(STATUS "_ANDROID_TOOL_CLANG_NAME=${_ANDROID_TOOL_CLANG_NAME}")
-  message(STATUS "_ANDROID_TOOL_CLANG_VERS=${_ANDROID_TOOL_CLANG_VERS}")
-  message(STATUS "_ANDROID_TOOL_LLVM_NAME=${_ANDROID_TOOL_LLVM_NAME}")
-endif()
-
-unset(_ANDROID_TOOL_NAME)
-unset(_ANDROID_TOOL_VERS)
-unset(_ANDROID_TOOL_VERS_NDK)
-unset(_ANDROID_TOOL_PREFIX)
-unset(_ANDROID_TOOL_CLANG_NAME)
-unset(_ANDROID_TOOL_CLANG_VERS)
-unset(_ANDROID_TOOL_LLVM_NAME)
diff --git a/share/cmake-3.18/Modules/Platform/Apple-NVIDIA-CUDA.cmake b/share/cmake-3.18/Modules/Platform/Apple-NVIDIA-CUDA.cmake
deleted file mode 100644
index bec3948..0000000
--- a/share/cmake-3.18/Modules/Platform/Apple-NVIDIA-CUDA.cmake
+++ /dev/null
@@ -1,19 +0,0 @@
-include(Platform/Darwin)
-
-set(__IMPLICT_LINKS )
-foreach(dir ${CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES})
-  string(APPEND __IMPLICT_LINKS " -L\"${dir}\"")
-endforeach()
-foreach(lib ${CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES})
-  if(${lib} MATCHES "/")
-    string(APPEND __IMPLICT_LINKS " \"${lib}\"")
-  else()
-    string(APPEND __IMPLICT_LINKS " -l${lib}")
-  endif()
-endforeach()
-
-set(CMAKE_SHARED_LIBRARY_CREATE_CUDA_FLAGS "-shared -Wl,-headerpad_max_install_names")
-set(CMAKE_SHARED_MODULE_CREATE_CUDA_FLAGS "-shared -Wl,-headerpad_max_install_names")
-
-set(CMAKE_CUDA_CREATE_SHARED_LIBRARY "<CMAKE_CUDA_HOST_LINK_LAUNCHER> <CMAKE_SHARED_LIBRARY_CUDA_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CUDA_FLAGS> -o <TARGET> <SONAME_FLAG> <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>${__IMPLICT_LINKS}")
-set(CMAKE_CUDA_CREATE_SHARED_MODULE "<CMAKE_CUDA_HOST_LINK_LAUNCHER> <CMAKE_SHARED_LIBRARY_CUDA_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CUDA_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>${__IMPLICT_LINKS}")
diff --git a/share/cmake-3.18/Modules/Platform/CYGWIN-GNU.cmake b/share/cmake-3.18/Modules/Platform/CYGWIN-GNU.cmake
deleted file mode 100644
index 4fa14ce..0000000
--- a/share/cmake-3.18/Modules/Platform/CYGWIN-GNU.cmake
+++ /dev/null
@@ -1,54 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# This module is shared by multiple languages; use include blocker.
-if(__CYGWIN_COMPILER_GNU)
-  return()
-endif()
-set(__CYGWIN_COMPILER_GNU 1)
-
-# TODO: Is -Wl,--enable-auto-import now always default?
-string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT " -Wl,--enable-auto-import")
-set(CMAKE_CREATE_WIN32_EXE  "-mwindows")
-
-set(CMAKE_GNULD_IMAGE_VERSION
-  "-Wl,--major-image-version,<TARGET_VERSION_MAJOR>,--minor-image-version,<TARGET_VERSION_MINOR>")
-set(CMAKE_GENERATOR_RC windres)
-macro(__cygwin_compiler_gnu lang)
-  # Binary link rules.
-  set(CMAKE_${lang}_CREATE_SHARED_MODULE
-    "<CMAKE_${lang}_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_MODULE_${lang}_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_MODULE_CREATE_${lang}_FLAGS> -o <TARGET> ${CMAKE_GNULD_IMAGE_VERSION} <OBJECTS> <LINK_LIBRARIES>")
-  set(CMAKE_${lang}_CREATE_SHARED_LIBRARY
-    "<CMAKE_${lang}_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_${lang}_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS> -o <TARGET> -Wl,--out-implib,<TARGET_IMPLIB> ${CMAKE_GNULD_IMAGE_VERSION} <OBJECTS> <LINK_LIBRARIES>")
-  set(CMAKE_${lang}_LINK_EXECUTABLE
-    "<CMAKE_${lang}_COMPILER> <FLAGS> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> -Wl,--out-implib,<TARGET_IMPLIB> ${CMAKE_GNULD_IMAGE_VERSION} <LINK_LIBRARIES>")
-
-   # No -fPIC on cygwin
-  set(CMAKE_${lang}_COMPILE_OPTIONS_PIC "")
-  set(CMAKE_${lang}_COMPILE_OPTIONS_PIE "")
-  set(_CMAKE_${lang}_PIE_MAY_BE_SUPPORTED_BY_LINKER NO)
-  set(CMAKE_${lang}_LINK_OPTIONS_PIE "")
-  set(CMAKE_${lang}_LINK_OPTIONS_NO_PIE "")
-  set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "")
-
-  # Initialize C link type selection flags.  These flags are used when
-  # building a shared library, shared module, or executable that links
-  # to other libraries to select whether to use the static or shared
-  # versions of the libraries.
-  foreach(type SHARED_LIBRARY SHARED_MODULE EXE)
-    set(CMAKE_${type}_LINK_STATIC_${lang}_FLAGS "-Wl,-Bstatic")
-    set(CMAKE_${type}_LINK_DYNAMIC_${lang}_FLAGS "-Wl,-Bdynamic")
-  endforeach()
-
-  set(CMAKE_EXE_EXPORTS_${lang}_FLAG "-Wl,--export-all-symbols")
-  # TODO: Is -Wl,--enable-auto-import now always default?
-  string(APPEND CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS " -Wl,--enable-auto-import")
-  set(CMAKE_SHARED_MODULE_CREATE_${lang}_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS}")
-
-  if(NOT CMAKE_RC_COMPILER_INIT)
-    set(CMAKE_RC_COMPILER_INIT windres)
-  endif()
-
-  enable_language(RC)
-endmacro()
diff --git a/share/cmake-3.18/Modules/Platform/CYGWIN.cmake b/share/cmake-3.18/Modules/Platform/CYGWIN.cmake
deleted file mode 100644
index 9b897bd..0000000
--- a/share/cmake-3.18/Modules/Platform/CYGWIN.cmake
+++ /dev/null
@@ -1,74 +0,0 @@
-if("${CMAKE_MINIMUM_REQUIRED_VERSION}" VERSION_LESS "2.8.3.20101214")
-  set(__USE_CMAKE_LEGACY_CYGWIN_WIN32 1)
-endif()
-if(NOT DEFINED WIN32)
-  set(WIN32 0)
-  if(DEFINED __USE_CMAKE_LEGACY_CYGWIN_WIN32)
-    if(NOT DEFINED CMAKE_LEGACY_CYGWIN_WIN32
-        AND DEFINED ENV{CMAKE_LEGACY_CYGWIN_WIN32})
-      set(CMAKE_LEGACY_CYGWIN_WIN32 $ENV{CMAKE_LEGACY_CYGWIN_WIN32})
-    endif()
-    if(CMAKE_LEGACY_CYGWIN_WIN32)
-      message(STATUS "Defining WIN32 under Cygwin due to CMAKE_LEGACY_CYGWIN_WIN32")
-      set(WIN32 1)
-    elseif("x${CMAKE_LEGACY_CYGWIN_WIN32}" STREQUAL "x")
-      message(WARNING "CMake no longer defines WIN32 on Cygwin!"
-        "\n"
-        "(1) If you are just trying to build this project, ignore this warning "
-        "or quiet it by setting CMAKE_LEGACY_CYGWIN_WIN32=0 in your environment or "
-        "in the CMake cache.  "
-        "If later configuration or build errors occur then this project may "
-        "have been written under the assumption that Cygwin is WIN32.  "
-        "In that case, set CMAKE_LEGACY_CYGWIN_WIN32=1 instead."
-        "\n"
-        "(2) If you are developing this project, add the line\n"
-        "  set(CMAKE_LEGACY_CYGWIN_WIN32 0) # Remove when CMake >= 2.8.4 is required\n"
-        "at the top of your top-level CMakeLists.txt file or set the minimum "
-        "required version of CMake to 2.8.4 or higher.  "
-        "Then teach your project to build on Cygwin without WIN32.")
-    endif()
-  elseif(DEFINED CMAKE_LEGACY_CYGWIN_WIN32)
-    message(AUTHOR_WARNING "CMAKE_LEGACY_CYGWIN_WIN32 ignored because\n"
-      "  cmake_minimum_required(VERSION ${CMAKE_MINIMUM_REQUIRED_VERSION})\n"
-      "is at least 2.8.4.")
-  endif()
-endif()
-if(DEFINED __USE_CMAKE_LEGACY_CYGWIN_WIN32)
-  # Pass WIN32 legacy setting to scripts.
-  if(WIN32)
-    set(ENV{CMAKE_LEGACY_CYGWIN_WIN32} 1)
-  else()
-    set(ENV{CMAKE_LEGACY_CYGWIN_WIN32} 0)
-  endif()
-  unset(__USE_CMAKE_LEGACY_CYGWIN_WIN32)
-endif()
-
-set(CYGWIN 1)
-
-set(CMAKE_SHARED_LIBRARY_PREFIX "cyg")
-set(CMAKE_SHARED_LIBRARY_SUFFIX ".dll")
-set(CMAKE_SHARED_MODULE_PREFIX "cyg")
-set(CMAKE_SHARED_MODULE_SUFFIX ".dll")
-set(CMAKE_IMPORT_LIBRARY_PREFIX "lib")
-set(CMAKE_IMPORT_LIBRARY_SUFFIX ".dll.a")
-set(CMAKE_EXECUTABLE_SUFFIX ".exe")          # .exe
-# Modules have a different default prefix that shared libs.
-set(CMAKE_MODULE_EXISTS 1)
-
-set(CMAKE_FIND_LIBRARY_PREFIXES "lib")
-set(CMAKE_FIND_LIBRARY_SUFFIXES ".dll.a" ".a")
-
-# Shared libraries on cygwin can be named with their version number.
-set(CMAKE_SHARED_LIBRARY_NAME_WITH_VERSION 1)
-
-include(Platform/UnixPaths)
-
-# Windows API on Cygwin
-list(APPEND CMAKE_SYSTEM_INCLUDE_PATH
-  /usr/include/w32api
-  )
-
-# Windows API on Cygwin
-list(APPEND CMAKE_SYSTEM_LIBRARY_PATH
-  /usr/lib/w32api
-  )
diff --git a/share/cmake-3.18/Modules/Platform/Darwin-Initialize.cmake b/share/cmake-3.18/Modules/Platform/Darwin-Initialize.cmake
deleted file mode 100644
index 80e9a40..0000000
--- a/share/cmake-3.18/Modules/Platform/Darwin-Initialize.cmake
+++ /dev/null
@@ -1,301 +0,0 @@
-# Ask xcode-select where to find /Developer or fall back to ancient location.
-execute_process(COMMAND xcode-select -print-path
-  OUTPUT_VARIABLE _stdout
-  OUTPUT_STRIP_TRAILING_WHITESPACE
-  ERROR_VARIABLE _stderr
-  RESULT_VARIABLE _failed)
-if(NOT _failed AND IS_DIRECTORY ${_stdout})
-  set(OSX_DEVELOPER_ROOT ${_stdout})
-elseif(IS_DIRECTORY "/Developer")
-  set(OSX_DEVELOPER_ROOT "/Developer")
-else()
-  set(OSX_DEVELOPER_ROOT "")
-endif()
-
-execute_process(COMMAND sw_vers -productVersion
-  OUTPUT_VARIABLE CURRENT_OSX_VERSION
-  OUTPUT_STRIP_TRAILING_WHITESPACE)
-
-# Save CMAKE_OSX_ARCHITECTURES from the environment.
-set(CMAKE_OSX_ARCHITECTURES "$ENV{CMAKE_OSX_ARCHITECTURES}" CACHE STRING
-  "Build architectures for OSX")
-
-# macOS, iOS, tvOS, and watchOS should lookup compilers from
-# Platform/Apple-${CMAKE_CXX_COMPILER_ID}-<LANG>
-set(CMAKE_EFFECTIVE_SYSTEM_NAME "Apple")
-
-#----------------------------------------------------------------------------
-# _CURRENT_OSX_VERSION - as a two-component string: 10.5, 10.6, ...
-#
-string(REGEX REPLACE "^([0-9]+\\.[0-9]+).*$" "\\1"
-  _CURRENT_OSX_VERSION "${CURRENT_OSX_VERSION}")
-
-#----------------------------------------------------------------------------
-# CMAKE_OSX_DEPLOYMENT_TARGET
-
-# Set cache variable - end user may change this during ccmake or cmake-gui configure.
-if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND _CURRENT_OSX_VERSION VERSION_GREATER 10.3)
-  set(CMAKE_OSX_DEPLOYMENT_TARGET "$ENV{MACOSX_DEPLOYMENT_TARGET}" CACHE STRING
-    "Minimum OS X version to target for deployment (at runtime); newer APIs weak linked. Set to empty string for default value.")
-endif()
-
-#----------------------------------------------------------------------------
-# CMAKE_OSX_SYSROOT
-
-if(CMAKE_OSX_SYSROOT)
-  # Use the existing value without further computation to choose a default.
-  set(_CMAKE_OSX_SYSROOT_DEFAULT "${CMAKE_OSX_SYSROOT}")
-elseif(NOT "x$ENV{SDKROOT}" STREQUAL "x" AND
-        (NOT "x$ENV{SDKROOT}" MATCHES "/" OR IS_DIRECTORY "$ENV{SDKROOT}"))
-  # Use the value of SDKROOT from the environment.
-  set(_CMAKE_OSX_SYSROOT_DEFAULT "$ENV{SDKROOT}")
-elseif(CMAKE_SYSTEM_NAME STREQUAL iOS)
-  set(_CMAKE_OSX_SYSROOT_DEFAULT "iphoneos")
-elseif(CMAKE_SYSTEM_NAME STREQUAL tvOS)
-  set(_CMAKE_OSX_SYSROOT_DEFAULT "appletvos")
-elseif(CMAKE_SYSTEM_NAME STREQUAL watchOS)
-  set(_CMAKE_OSX_SYSROOT_DEFAULT "watchos")
-elseif("${CMAKE_GENERATOR}" MATCHES Xcode
-       OR CMAKE_OSX_DEPLOYMENT_TARGET
-       OR CMAKE_OSX_ARCHITECTURES MATCHES "[^;]"
-       OR NOT EXISTS "/usr/include/sys/types.h")
-  # Find installed SDKs in either Xcode-4.3+ or pre-4.3 SDKs directory.
-  set(_CMAKE_OSX_SDKS_DIR "")
-  if(OSX_DEVELOPER_ROOT)
-    foreach(d Platforms/MacOSX.platform/Developer/SDKs SDKs)
-      file(GLOB _CMAKE_OSX_SDKS ${OSX_DEVELOPER_ROOT}/${d}/*)
-      if(_CMAKE_OSX_SDKS)
-        set(_CMAKE_OSX_SDKS_DIR ${OSX_DEVELOPER_ROOT}/${d})
-        break()
-      endif()
-    endforeach()
-  endif()
-
-  if(_CMAKE_OSX_SDKS_DIR)
-    # Select SDK for current OSX version accounting for the known
-    # specially named SDKs.
-    set(_CMAKE_OSX_SDKS_VER_SUFFIX_10.4 "u")
-    set(_CMAKE_OSX_SDKS_VER_SUFFIX_10.3 ".9")
-
-    # find the latest SDK
-    set(_CMAKE_OSX_LATEST_SDK_VERSION "0.0")
-    file(GLOB _CMAKE_OSX_SDKS RELATIVE "${_CMAKE_OSX_SDKS_DIR}" "${_CMAKE_OSX_SDKS_DIR}/MacOSX*.sdk")
-    foreach(_SDK ${_CMAKE_OSX_SDKS})
-      if(_SDK MATCHES "MacOSX([0-9]+\\.[0-9]+)[^/]*\\.sdk" AND CMAKE_MATCH_1 VERSION_GREATER ${_CMAKE_OSX_LATEST_SDK_VERSION})
-        set(_CMAKE_OSX_LATEST_SDK_VERSION "${CMAKE_MATCH_1}")
-      endif()
-    endforeach()
-
-    # pick an SDK that works
-    set(_CMAKE_OSX_SYSROOT_DEFAULT)
-    foreach(ver ${CMAKE_OSX_DEPLOYMENT_TARGET}
-                ${_CURRENT_OSX_VERSION}
-                ${_CMAKE_OSX_LATEST_SDK_VERSION})
-      set(_CMAKE_OSX_DEPLOYMENT_TARGET ${ver})
-      set(_CMAKE_OSX_SDKS_VER ${_CMAKE_OSX_DEPLOYMENT_TARGET}${_CMAKE_OSX_SDKS_VER_SUFFIX_${_CMAKE_OSX_DEPLOYMENT_TARGET}})
-      set(_CMAKE_OSX_SYSROOT_CHECK "${_CMAKE_OSX_SDKS_DIR}/MacOSX${_CMAKE_OSX_SDKS_VER}.sdk")
-      if(IS_DIRECTORY "${_CMAKE_OSX_SYSROOT_CHECK}")
-        set(_CMAKE_OSX_SYSROOT_DEFAULT "${_CMAKE_OSX_SYSROOT_CHECK}")
-        break()
-      endif()
-    endforeach()
-
-    if(NOT CMAKE_CROSSCOMPILING AND NOT CMAKE_OSX_DEPLOYMENT_TARGET AND _CURRENT_OSX_VERSION VERSION_LESS _CMAKE_OSX_DEPLOYMENT_TARGET)
-      set(CMAKE_OSX_DEPLOYMENT_TARGET ${_CURRENT_OSX_VERSION} CACHE STRING
-        "Minimum OS X version to target for deployment (at runtime); newer APIs weak linked. Set to empty string for default value." FORCE)
-    endif()
-  else()
-    # Assume developer files are in root (such as Xcode 4.5 command-line tools).
-    set(_CMAKE_OSX_SYSROOT_DEFAULT "")
-  endif()
-endif()
-
-# Set cache variable - end user may change this during ccmake or cmake-gui configure.
-# Choose the type based on the current value.
-set(_CMAKE_OSX_SYSROOT_TYPE STRING)
-foreach(v CMAKE_OSX_SYSROOT _CMAKE_OSX_SYSROOT_DEFAULT)
-  if("x${${v}}" MATCHES "/")
-    set(_CMAKE_OSX_SYSROOT_TYPE PATH)
-    break()
-  endif()
-endforeach()
-set(CMAKE_OSX_SYSROOT "${_CMAKE_OSX_SYSROOT_DEFAULT}" CACHE ${_CMAKE_OSX_SYSROOT_TYPE}
-  "The product will be built against the headers and libraries located inside the indicated SDK.")
-
-# Resolves the SDK name into a path
-function(_apple_resolve_sdk_path sdk_name ret)
-  execute_process(
-    COMMAND xcrun -sdk ${sdk_name} --show-sdk-path
-    OUTPUT_VARIABLE _stdout
-    OUTPUT_STRIP_TRAILING_WHITESPACE
-    ERROR_VARIABLE _stderr
-    RESULT_VARIABLE _failed
-  )
-  set(${ret} "${_stdout}" PARENT_SCOPE)
-endfunction()
-
-function(_apple_resolve_supported_archs_for_sdk_from_system_lib sdk_path ret ret_failed)
-  # Detect the supported SDK architectures by inspecting the main libSystem library.
-  set(common_lib_prefix "${sdk_path}/usr/lib/libSystem")
-  set(system_lib_dylib_path "${common_lib_prefix}.dylib")
-  set(system_lib_tbd_path "${common_lib_prefix}.tbd")
-
-  # Newer SDKs ship text based dylib stub files which contain the architectures supported by the
-  # library in text form.
-  if(EXISTS "${system_lib_tbd_path}")
-    file(STRINGS "${system_lib_tbd_path}" tbd_lines REGEX "^archs: +\\[.+\\]")
-    if(NOT tbd_lines)
-      set(${ret_failed} TRUE PARENT_SCOPE)
-      return()
-    endif()
-
-    # The tbd architectures line looks like the following:
-    # archs:           [ armv7, armv7s, arm64, arm64e ]
-    list(GET tbd_lines 0 first_arch_line)
-    string(REGEX REPLACE
-           "archs: +\\[ (.+) \\]" "\\1" arches_comma_separated "${first_arch_line}")
-    string(STRIP "${arches_comma_separated}" arches_comma_separated)
-    string(REPLACE "," ";" arch_list "${arches_comma_separated}")
-    string(REPLACE " " "" arch_list "${arch_list}")
-    if(NOT arch_list)
-      set(${ret_failed} TRUE PARENT_SCOPE)
-      return()
-    endif()
-    set(${ret} "${arch_list}" PARENT_SCOPE)
-  elseif(EXISTS "${system_lib_dylib_path}")
-    # Old SDKs (Xcode < 7) ship dylib files, use lipo to inspect the supported architectures.
-    # Can't use -archs because the option is not available in older Xcode versions.
-    execute_process(
-      COMMAND lipo -info ${system_lib_dylib_path}
-      OUTPUT_VARIABLE lipo_output
-      OUTPUT_STRIP_TRAILING_WHITESPACE
-      ERROR_VARIABLE _stderr
-      RESULT_VARIABLE _failed
-    )
-    if(_failed OR NOT lipo_output OR NOT lipo_output MATCHES "(Non-fat file:|Architectures in the fat file:)")
-      set(${ret_failed} TRUE PARENT_SCOPE)
-      return()
-    endif()
-
-    # The lipo output looks like the following:
-    # Non-fat file: <path> is architecture: i386
-    # Architectures in the fat file: <path> are: i386 x86_64
-    string(REGEX REPLACE
-           "^(.+)is architecture:(.+)" "\\2" arches_space_separated "${lipo_output}")
-    string(REGEX REPLACE
-            "^(.+)are:(.+)" "\\2" arches_space_separated "${arches_space_separated}")
-
-    # Need to clean up the arches, with Xcode 4.6.3 the output of lipo -info contains some
-    # additional info, e.g.
-    # Architectures in the fat file: <path> are: armv7 (cputype (12) cpusubtype (11))
-    string(REGEX REPLACE
-            "\\(.+\\)" "" arches_space_separated "${arches_space_separated}")
-
-    # The output is space separated.
-    string(STRIP "${arches_space_separated}" arches_space_separated)
-    string(REPLACE " " ";" arch_list "${arches_space_separated}")
-
-    if(NOT arch_list)
-      set(${ret_failed} TRUE PARENT_SCOPE)
-      return()
-    endif()
-    set(${ret} "${arch_list}" PARENT_SCOPE)
-  else()
-    # This shouldn't happen, but keep it for safety.
-    message(WARNING "No way to find architectures for given sdk_path '${sdk_path}'")
-    set(${ret_failed} TRUE PARENT_SCOPE)
-  endif()
-endfunction()
-
-# Handle multi-arch sysroots. Do this before CMAKE_OSX_SYSROOT is
-# transformed into a path, so that we know the sysroot name.
-function(_apple_resolve_multi_arch_sysroots)
-  if(DEFINED CMAKE_APPLE_ARCH_SYSROOTS)
-    return() # Already cached
-  endif()
-
-  list(LENGTH CMAKE_OSX_ARCHITECTURES _num_archs)
-  if(NOT (_num_archs GREATER 1))
-    return() # Only apply to multi-arch
-  endif()
-
-  if(CMAKE_OSX_SYSROOT STREQUAL "macosx")
-    # macOS doesn't have a simulator sdk / sysroot, so there is no need to handle per-sdk arches.
-    return()
-  endif()
-
-  if(IS_DIRECTORY "${CMAKE_OSX_SYSROOT}")
-    if(NOT CMAKE_OSX_SYSROOT STREQUAL _CMAKE_OSX_SYSROOT_DEFAULT)
-      message(WARNING "Can not resolve multi-arch sysroots with CMAKE_OSX_SYSROOT set to path (${CMAKE_OSX_SYSROOT})")
-    endif()
-    return()
-  endif()
-
-  string(REPLACE "os" "simulator" _simulator_sdk ${CMAKE_OSX_SYSROOT})
-  set(_sdks "${CMAKE_OSX_SYSROOT};${_simulator_sdk}")
-  foreach(sdk ${_sdks})
-    _apple_resolve_sdk_path(${sdk} _sdk_path)
-    if(NOT IS_DIRECTORY "${_sdk_path}")
-      message(WARNING "Failed to resolve SDK path for '${sdk}'")
-      continue()
-    endif()
-
-    _apple_resolve_supported_archs_for_sdk_from_system_lib(${_sdk_path} _sdk_archs _failed)
-
-    if(_failed)
-      # Failure to extract supported architectures for an SDK means that the installed SDK is old
-      # and does not provide such information (SDKs that come with Xcode >= 10.x started providing
-      # the information). In such a case, return early, and handle multi-arch builds the old way
-      # (no per-sdk arches).
-      return()
-    endif()
-
-    set(_sdk_archs_${sdk} ${_sdk_archs})
-    set(_sdk_path_${sdk} ${_sdk_path})
-  endforeach()
-
-  foreach(arch ${CMAKE_OSX_ARCHITECTURES})
-    set(_arch_sysroot "")
-    foreach(sdk ${_sdks})
-      list(FIND _sdk_archs_${sdk} ${arch} arch_index)
-      if(NOT arch_index EQUAL -1)
-        set(_arch_sysroot ${_sdk_path_${sdk}})
-        break()
-      endif()
-    endforeach()
-    if(_arch_sysroot)
-      list(APPEND _arch_sysroots ${_arch_sysroot})
-    else()
-      message(WARNING "No SDK found for architecture '${arch}'")
-      list(APPEND _arch_sysroots "${arch}-SDK-NOTFOUND")
-    endif()
-  endforeach()
-
-  set(CMAKE_APPLE_ARCH_SYSROOTS "${_arch_sysroots}" CACHE INTERNAL
-    "Architecture dependent sysroots, one per CMAKE_OSX_ARCHITECTURES")
-endfunction()
-
-_apple_resolve_multi_arch_sysroots()
-
-# Transform CMAKE_OSX_SYSROOT to absolute path
-set(_CMAKE_OSX_SYSROOT_PATH "")
-if(CMAKE_OSX_SYSROOT)
-  if("x${CMAKE_OSX_SYSROOT}" MATCHES "/")
-    # This is a path to the SDK.  Make sure it exists.
-    if(NOT IS_DIRECTORY "${CMAKE_OSX_SYSROOT}")
-      message(WARNING "Ignoring CMAKE_OSX_SYSROOT value:\n ${CMAKE_OSX_SYSROOT}\n"
-        "because the directory does not exist.")
-      set(CMAKE_OSX_SYSROOT "")
-    endif()
-    set(_CMAKE_OSX_SYSROOT_PATH "${CMAKE_OSX_SYSROOT}")
-  else()
-    _apple_resolve_sdk_path(${CMAKE_OSX_SYSROOT} _sdk_path)
-    if(IS_DIRECTORY "${_sdk_path}")
-      set(_CMAKE_OSX_SYSROOT_PATH "${_sdk_path}")
-      # For non-Xcode generators use the path.
-      if(NOT "${CMAKE_GENERATOR}" MATCHES "Xcode")
-        set(CMAKE_OSX_SYSROOT "${_CMAKE_OSX_SYSROOT_PATH}")
-      endif()
-    endif()
-  endif()
-endif()
diff --git a/share/cmake-3.18/Modules/Platform/Darwin.cmake b/share/cmake-3.18/Modules/Platform/Darwin.cmake
deleted file mode 100644
index c6de3b0..0000000
--- a/share/cmake-3.18/Modules/Platform/Darwin.cmake
+++ /dev/null
@@ -1,236 +0,0 @@
-set(APPLE 1)
-
-if(CMAKE_SYSTEM_NAME STREQUAL "iOS" OR CMAKE_SYSTEM_NAME STREQUAL "tvOS" OR CMAKE_SYSTEM_NAME STREQUAL "watchOS")
-  if(NOT DEFINED CMAKE_MACOSX_BUNDLE)
-    set(CMAKE_MACOSX_BUNDLE ON)
-  endif()
-
-  list(APPEND CMAKE_FIND_ROOT_PATH "${_CMAKE_OSX_SYSROOT_PATH}")
-  if(NOT DEFINED CMAKE_FIND_ROOT_PATH_MODE_LIBRARY)
-      set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
-  endif()
-  if(NOT DEFINED CMAKE_FIND_ROOT_PATH_MODE_INCLUDE)
-      set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
-  endif()
-  if(NOT DEFINED CMAKE_FIND_ROOT_PATH_MODE_PACKAGE)
-      set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
-  endif()
-endif()
-
-# Darwin versions:
-#   6.x == Mac OSX 10.2 (Jaguar)
-#   7.x == Mac OSX 10.3 (Panther)
-#   8.x == Mac OSX 10.4 (Tiger)
-#   9.x == Mac OSX 10.5 (Leopard)
-#  10.x == Mac OSX 10.6 (Snow Leopard)
-#  11.x == Mac OSX 10.7 (Lion)
-#  12.x == Mac OSX 10.8 (Mountain Lion)
-string(REGEX REPLACE "^([0-9]+)\\.([0-9]+).*$" "\\1" DARWIN_MAJOR_VERSION "${CMAKE_SYSTEM_VERSION}")
-string(REGEX REPLACE "^([0-9]+)\\.([0-9]+).*$" "\\2" DARWIN_MINOR_VERSION "${CMAKE_SYSTEM_VERSION}")
-
-# Do not use the "-Wl,-search_paths_first" flag with the OSX 10.2 compiler.
-# Done this way because it is too early to do a TRY_COMPILE.
-if(NOT DEFINED HAVE_FLAG_SEARCH_PATHS_FIRST)
-  set(HAVE_FLAG_SEARCH_PATHS_FIRST 0)
-  if("${DARWIN_MAJOR_VERSION}" GREATER 6)
-    set(HAVE_FLAG_SEARCH_PATHS_FIRST 1)
-  endif()
-endif()
-# More desirable, but does not work:
-  #include(CheckCXXCompilerFlag)
-  #CHECK_CXX_COMPILER_FLAG("-Wl,-search_paths_first" HAVE_FLAG_SEARCH_PATHS_FIRST)
-
-set(CMAKE_SHARED_LIBRARY_PREFIX "lib")
-set(CMAKE_SHARED_LIBRARY_SUFFIX ".dylib")
-set(CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES ".tbd" ".so")
-set(CMAKE_SHARED_MODULE_PREFIX "lib")
-set(CMAKE_SHARED_MODULE_SUFFIX ".so")
-set(CMAKE_MODULE_EXISTS 1)
-set(CMAKE_DL_LIBS "")
-
-# Enable rpath support for 10.5 and greater where it is known to work.
-if("${DARWIN_MAJOR_VERSION}" GREATER 8)
-  set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,")
-endif()
-
-foreach(lang C CXX OBJC OBJCXX)
-  set(CMAKE_${lang}_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ")
-  set(CMAKE_${lang}_OSX_CURRENT_VERSION_FLAG "-current_version ")
-  set(CMAKE_${lang}_LINK_FLAGS "-Wl,-headerpad_max_install_names")
-
-  if(HAVE_FLAG_SEARCH_PATHS_FIRST)
-    set(CMAKE_${lang}_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_${lang}_LINK_FLAGS}")
-  endif()
-
-  set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-dynamiclib -Wl,-headerpad_max_install_names")
-  set(CMAKE_SHARED_MODULE_CREATE_${lang}_FLAGS "-bundle -Wl,-headerpad_max_install_names")
-  set(CMAKE_SHARED_MODULE_LOADER_${lang}_FLAG "-Wl,-bundle_loader,")
-endforeach()
-
-set(CMAKE_PLATFORM_HAS_INSTALLNAME 1)
-set(CMAKE_FIND_LIBRARY_SUFFIXES ".tbd" ".dylib" ".so" ".a")
-
-# hack: if a new cmake (which uses CMAKE_INSTALL_NAME_TOOL) runs on an old build tree
-# (where install_name_tool was hardcoded) and where CMAKE_INSTALL_NAME_TOOL isn't in the cache
-# and still cmake didn't fail in CMakeFindBinUtils.cmake (because it isn't rerun)
-# hardcode CMAKE_INSTALL_NAME_TOOL here to install_name_tool, so it behaves as it did before, Alex
-if(NOT DEFINED CMAKE_INSTALL_NAME_TOOL)
-  find_program(CMAKE_INSTALL_NAME_TOOL install_name_tool)
-  mark_as_advanced(CMAKE_INSTALL_NAME_TOOL)
-endif()
-
-# Enable shared library versioning.
-set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-install_name")
-
-if("${_CURRENT_OSX_VERSION}" VERSION_LESS "10.5")
-  # Need to list dependent shared libraries on link line.  When building
-  # with -isysroot (for universal binaries), the linker always looks for
-  # dependent libraries under the sysroot.  Listing them on the link
-  # line works around the problem.
-  set(CMAKE_LINK_DEPENDENT_LIBRARY_FILES 1)
-endif()
-
-foreach(lang C CXX Fortran OBJC OBJCXX)
-  # Xcode does not support -isystem yet.
-  if(XCODE)
-    set(CMAKE_INCLUDE_SYSTEM_FLAG_${lang})
-  endif()
-
-  set(CMAKE_${lang}_CREATE_SHARED_LIBRARY
-    "<CMAKE_${lang}_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS> <LINK_FLAGS> -o <TARGET> <SONAME_FLAG> <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
-
-  set(CMAKE_${lang}_CREATE_SHARED_MODULE
-      "<CMAKE_${lang}_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_MODULE_CREATE_${lang}_FLAGS> <LINK_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
-
-  set(CMAKE_${lang}_CREATE_MACOSX_FRAMEWORK
-      "<CMAKE_${lang}_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS> <LINK_FLAGS> -o <TARGET> <SONAME_FLAG> <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
-
-  # Set default framework search path flag for languages known to use a
-  # preprocessor that may find headers in frameworks.
-  set(CMAKE_${lang}_FRAMEWORK_SEARCH_FLAG -F)
-endforeach()
-
-# default to searching for frameworks first
-if(NOT DEFINED CMAKE_FIND_FRAMEWORK)
-  set(CMAKE_FIND_FRAMEWORK FIRST)
-endif()
-
-# Older OS X linkers do not report their framework search path
-# with -v but "man ld" documents the following locations.
-set(CMAKE_PLATFORM_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES
-  ${_CMAKE_OSX_SYSROOT_PATH}/Library/Frameworks
-  ${_CMAKE_OSX_SYSROOT_PATH}/System/Library/Frameworks
-  )
-if(_CMAKE_OSX_SYSROOT_PATH)
-  # Treat some paths as implicit so we do not override the SDK versions.
-  list(APPEND CMAKE_PLATFORM_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES
-    /System/Library/Frameworks)
-endif()
-if("${_CURRENT_OSX_VERSION}" VERSION_LESS "10.5")
-  # Older OS X tools had more implicit paths.
-  list(APPEND CMAKE_PLATFORM_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES
-    ${_CMAKE_OSX_SYSROOT_PATH}/Network/Library/Frameworks)
-endif()
-
-# set up the default search directories for frameworks
-set(CMAKE_SYSTEM_FRAMEWORK_PATH
-  ~/Library/Frameworks
-  )
-if(_CMAKE_OSX_SYSROOT_PATH)
-  list(APPEND CMAKE_SYSTEM_FRAMEWORK_PATH
-    ${_CMAKE_OSX_SYSROOT_PATH}/Library/Frameworks
-    ${_CMAKE_OSX_SYSROOT_PATH}/Network/Library/Frameworks
-    ${_CMAKE_OSX_SYSROOT_PATH}/System/Library/Frameworks
-    )
-  # add platform developer framework path if exists
-  foreach(_path
-    # Xcode 6
-    ${_CMAKE_OSX_SYSROOT_PATH}/../../Library/Frameworks
-    # Xcode 5 iOS
-    ${_CMAKE_OSX_SYSROOT_PATH}/Developer/Library/Frameworks
-    # Xcode 5 OSX
-    ${_CMAKE_OSX_SYSROOT_PATH}/../../../../../Library/Frameworks
-    )
-    get_filename_component(_abolute_path "${_path}" ABSOLUTE)
-    if(EXISTS "${_abolute_path}")
-      list(APPEND CMAKE_SYSTEM_FRAMEWORK_PATH "${_abolute_path}")
-      break()
-    endif()
-  endforeach()
-
-  if(EXISTS ${_CMAKE_OSX_SYSROOT_PATH}/usr/lib)
-    list(INSERT CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES 0 ${_CMAKE_OSX_SYSROOT_PATH}/usr/lib)
-  endif()
-  if(EXISTS ${_CMAKE_OSX_SYSROOT_PATH}/usr/local/lib)
-    list(INSERT CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES 0 ${_CMAKE_OSX_SYSROOT_PATH}/usr/local/lib)
-  endif()
-endif()
-if (OSX_DEVELOPER_ROOT AND EXISTS "${OSX_DEVELOPER_ROOT}/Library/Frameworks")
-  list(APPEND CMAKE_SYSTEM_FRAMEWORK_PATH
-    ${OSX_DEVELOPER_ROOT}/Library/Frameworks)
-endif()
-list(APPEND CMAKE_SYSTEM_FRAMEWORK_PATH
-  /Library/Frameworks
-  /Network/Library/Frameworks
-  /System/Library/Frameworks)
-
-# Warn about known system mis-configuration case.
-if(CMAKE_OSX_SYSROOT)
-  get_property(_IN_TC GLOBAL PROPERTY IN_TRY_COMPILE)
-  if(NOT _IN_TC AND
-     NOT IS_SYMLINK "${CMAKE_OSX_SYSROOT}/Library/Frameworks"
-     AND IS_SYMLINK "${CMAKE_OSX_SYSROOT}/Library/Frameworks/Frameworks")
-    message(WARNING "The SDK Library/Frameworks path\n"
-      " ${CMAKE_OSX_SYSROOT}/Library/Frameworks\n"
-      "is not set up correctly on this system.  "
-      "This is known to occur when installing Xcode 3.2.6:\n"
-      " http://bugs.python.org/issue14018\n"
-      "The problem may cause build errors that report missing system frameworks.  "
-      "Fix your SDK symlinks to resolve this issue and avoid this warning."
-      )
-  endif()
-endif()
-
-# default to searching for application bundles first
-if(NOT DEFINED CMAKE_FIND_APPBUNDLE)
-  set(CMAKE_FIND_APPBUNDLE FIRST)
-endif()
-# set up the default search directories for application bundles
-set(_apps_paths)
-foreach(_path
-  "~/Applications"
-  "/Applications"
-  "${OSX_DEVELOPER_ROOT}/../Applications" # Xcode 4.3+
-  "${OSX_DEVELOPER_ROOT}/Applications"    # pre-4.3
-  )
-  get_filename_component(_apps "${_path}" ABSOLUTE)
-  if(EXISTS "${_apps}")
-    list(APPEND _apps_paths "${_apps}")
-  endif()
-endforeach()
-if(_apps_paths)
-  list(REMOVE_DUPLICATES _apps_paths)
-endif()
-set(CMAKE_SYSTEM_APPBUNDLE_PATH
-  ${_apps_paths})
-unset(_apps_paths)
-
-include(Platform/UnixPaths)
-if(_CMAKE_OSX_SYSROOT_PATH)
-  if(EXISTS ${_CMAKE_OSX_SYSROOT_PATH}/usr/include)
-    list(INSERT CMAKE_SYSTEM_PREFIX_PATH 0 ${_CMAKE_OSX_SYSROOT_PATH}/usr)
-    foreach(lang C CXX OBJC OBJCXX Swift)
-      list(APPEND _CMAKE_${lang}_IMPLICIT_INCLUDE_DIRECTORIES_INIT ${_CMAKE_OSX_SYSROOT_PATH}/usr/include)
-    endforeach()
-  endif()
-  if(EXISTS ${_CMAKE_OSX_SYSROOT_PATH}/usr/local/include)
-    list(INSERT CMAKE_SYSTEM_PREFIX_PATH 0 ${_CMAKE_OSX_SYSROOT_PATH}/usr/local)
-    foreach(lang C CXX OBJC OBJCXX Swift)
-      list(APPEND _CMAKE_${lang}_IMPLICIT_INCLUDE_DIRECTORIES_INIT ${_CMAKE_OSX_SYSROOT_PATH}/usr/local/include)
-    endforeach()
-  endif()
-endif()
-list(APPEND CMAKE_SYSTEM_PREFIX_PATH
-  /sw        # Fink
-  /opt/local # MacPorts
-  )
diff --git a/share/cmake-3.18/Modules/Platform/HP-UX.cmake b/share/cmake-3.18/Modules/Platform/HP-UX.cmake
deleted file mode 100644
index 9572a7e..0000000
--- a/share/cmake-3.18/Modules/Platform/HP-UX.cmake
+++ /dev/null
@@ -1,47 +0,0 @@
-if(NOT DEFINED CMAKE_PLATFORM_REQUIRED_RUNTIME_PATH)
-  set(CMAKE_PLATFORM_REQUIRED_RUNTIME_PATH /usr/lib)
-endif()
-
-if(NOT CMAKE_SYSTEM_PROCESSOR STREQUAL "ia64")
-  set(CMAKE_SHARED_LIBRARY_SUFFIX ".sl")          # .so
-  set(CMAKE_FIND_LIBRARY_SUFFIXES ".sl" ".so" ".a")
-  set(CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES ".so")
-endif()
-set(CMAKE_DL_LIBS "dld")
-
-# The HP linker needs to find transitive shared library dependencies
-# in the -L path.  Therefore the runtime path must be added to the
-# link line with -L flags.
-set(CMAKE_SHARED_LIBRARY_LINK_C_WITH_RUNTIME_PATH 1)
-set(CMAKE_LINK_DEPENDENT_LIBRARY_DIRS 1)
-
-# Shared libraries with no builtin soname may not be linked safely by
-# specifying the file path.
-set(CMAKE_PLATFORM_USES_PATH_WHEN_NO_SONAME 1)
-
-# set flags for gcc support
-include(Platform/UnixPaths)
-
-# Look in both 32-bit and 64-bit implict link directories, but tell
-# CMake not to pass the paths to the linker.  The linker will find the
-# library for the proper architecture.  In the future we should detect
-# which path will be used by the linker.  Since the pointer type size
-# CMAKE_SIZEOF_VOID_P is not set until after this file executes, we
-# would need to append to CMAKE_SYSTEM_LIBRARY_PATH at a later point
-# (after CMakeTest(LANG)Compiler.cmake runs for at least one language).
-list(APPEND CMAKE_SYSTEM_LIBRARY_PATH /usr/lib/hpux32)
-list(APPEND CMAKE_SYSTEM_LIBRARY_PATH /usr/lib/hpux64)
-list(APPEND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES
-  /usr/lib/hpux32 /usr/lib/hpux64)
-
-# Initialize C and CXX link type selection flags.  These flags are
-# used when building a shared library, shared module, or executable
-# that links to other libraries to select whether to use the static or
-# shared versions of the libraries.
-foreach(type SHARED_LIBRARY SHARED_MODULE EXE)
-  foreach(lang C CXX)
-    set(CMAKE_${type}_LINK_STATIC_${lang}_FLAGS "-Wl,-a,archive")
-    set(CMAKE_${type}_LINK_DYNAMIC_${lang}_FLAGS "-Wl,-a,default")
-  endforeach()
-endforeach()
-
diff --git a/share/cmake-3.18/Modules/Platform/Haiku.cmake b/share/cmake-3.18/Modules/Platform/Haiku.cmake
deleted file mode 100644
index 7e0af61..0000000
--- a/share/cmake-3.18/Modules/Platform/Haiku.cmake
+++ /dev/null
@@ -1,131 +0,0 @@
-# process only once
-if(HAIKU)
-  return()
-endif()
-
-set(HAIKU 1)
-set(UNIX 1)
-
-set(CMAKE_DL_LIBS "")
-set(CMAKE_SHARED_LIBRARY_C_FLAGS "-fPIC")
-set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared")
-set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,")
-set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP ":")
-set(CMAKE_SHARED_LIBRARY_RPATH_ORIGIN_TOKEN "\$ORIGIN")
-set(CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG "-Wl,-rpath-link,")
-set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,")
-set(CMAKE_EXE_EXPORTS_C_FLAG "-Wl,--export-dynamic")
-
-# Determine, if the C or C++ compiler is configured for a secondary
-# architecture. If so, that will change the search paths we set below. We check
-# whether the compiler's library search paths contain a
-# "/boot/system/develop/lib/<subdir>/", which we assume to be the secondary
-# architecture specific subdirectory and extract the name of the architecture
-# accordingly.
-
-# First of all, find a C or C++ compiler we can run. The "arg1" is necessary
-# here for compilers such as "distcc gcc-x86" or "ccache gcc-x86"
-# TODO See CMakeDetermineCompilerId.cmake for some more things we may want to do.
-if(CMAKE_C_COMPILER)
-  set(__HAIKU_COMPILER ${CMAKE_C_COMPILER})
-  string (STRIP "${CMAKE_C_COMPILER_ARG1}" __HAIKU_COMPILER_FLAGS)
-else()
-  set(__HAIKU_COMPILER ${CMAKE_CXX_COMPILER})
-  string (STRIP "${CMAKE_CXX_COMPILER_ARG1}" __HAIKU_COMPILER_FLAGS)
-endif()
-
-
-execute_process(
-  COMMAND ${__HAIKU_COMPILER} ${__HAIKU_COMPILER_FLAGS} -print-search-dirs
-  OUTPUT_VARIABLE _HAIKU_SEARCH_DIRS
-  RESULT_VARIABLE _HAIKU_SEARCH_DIRS_FOUND
-  OUTPUT_STRIP_TRAILING_WHITESPACE)
-
-string(REGEX MATCH "libraries: =?([^\n]*:)?/boot/system/develop/lib/([^/]*)/?(:?\n+)" _dummy "${_HAIKU_SEARCH_DIRS}\n")
-set(CMAKE_HAIKU_SECONDARY_ARCH "${CMAKE_MATCH_2}")
-
-if(NOT CMAKE_HAIKU_SECONDARY_ARCH)
-  set(CMAKE_HAIKU_SECONDARY_ARCH_SUBDIR "")
-  unset(CMAKE_HAIKU_SECONDARY_ARCH)
-else()
-  set(CMAKE_HAIKU_SECONDARY_ARCH_SUBDIR "/${CMAKE_HAIKU_SECONDARY_ARCH}")
-
-  # Override CMAKE_*LIBRARY_ARCHITECTURE. This will cause FIND_LIBRARY to search
-  # the libraries in the correct subdirectory first. It still isn't completely
-  # correct, since the parent directories shouldn't be searched at all. The
-  # primary architecture library might still be found, if there isn't one
-  # installed for the secondary architecture or it is installed in a less
-  # specific location.
-  set(CMAKE_LIBRARY_ARCHITECTURE ${CMAKE_HAIKU_SECONDARY_ARCH})
-  set(CMAKE_C_LIBRARY_ARCHITECTURE ${CMAKE_HAIKU_SECONDARY_ARCH})
-  set(CMAKE_CXX_LIBRARY_ARCHITECTURE ${CMAKE_HAIKU_SECONDARY_ARCH})
-endif()
-
-list(APPEND CMAKE_SYSTEM_PREFIX_PATH
-  /boot/system/non-packaged
-  /boot/system
-  )
-
-LIST(APPEND CMAKE_HAIKU_COMMON_INCLUDE_DIRECTORIES
-  /boot/system/non-packaged/develop/headers${CMAKE_HAIKU_SECONDARY_ARCH_SUBDIR}
-  /boot/system/develop/headers/os
-  /boot/system/develop/headers/os/app
-  /boot/system/develop/headers/os/device
-  /boot/system/develop/headers/os/drivers
-  /boot/system/develop/headers/os/game
-  /boot/system/develop/headers/os/interface
-  /boot/system/develop/headers/os/kernel
-  /boot/system/develop/headers/os/locale
-  /boot/system/develop/headers/os/mail
-  /boot/system/develop/headers/os/media
-  /boot/system/develop/headers/os/midi
-  /boot/system/develop/headers/os/midi2
-  /boot/system/develop/headers/os/net
-  /boot/system/develop/headers/os/opengl
-  /boot/system/develop/headers/os/storage
-  /boot/system/develop/headers/os/support
-  /boot/system/develop/headers/os/translation
-  /boot/system/develop/headers/os/add-ons/graphics
-  /boot/system/develop/headers/os/add-ons/input_server
-  /boot/system/develop/headers/os/add-ons/screen_saver
-  /boot/system/develop/headers/os/add-ons/tracker
-  /boot/system/develop/headers/os/be_apps/Deskbar
-  /boot/system/develop/headers/os/be_apps/NetPositive
-  /boot/system/develop/headers/os/be_apps/Tracker
-  /boot/system/develop/headers/3rdparty
-  /boot/system/develop/headers/bsd
-  /boot/system/develop/headers/glibc
-  /boot/system/develop/headers/gnu
-  /boot/system/develop/headers/posix
-  /boot/system/develop/headers${CMAKE_HAIKU_SECONDARY_ARCH_SUBDIR}
-  )
-IF (CMAKE_HAIKU_SECONDARY_ARCH)
-  LIST(APPEND CMAKE_HAIKU_COMMON_INCLUDE_DIRECTORIES
-    /boot/system/develop/headers
-    )
-ENDIF (CMAKE_HAIKU_SECONDARY_ARCH)
-
-LIST(APPEND CMAKE_HAIKU_C_INCLUDE_DIRECTORIES
-  ${CMAKE_HAIKU_COMMON_INCLUDE_DIRECTORIES}
-  )
-
-LIST(APPEND CMAKE_HAIKU_CXX_INCLUDE_DIRECTORIES
-  ${CMAKE_HAIKU_COMMON_INCLUDE_DIRECTORIES})
-
-LIST(APPEND CMAKE_SYSTEM_INCLUDE_PATH ${CMAKE_HAIKU_C_INCLUDE_DIRECTORIES})
-
-LIST(APPEND CMAKE_HAIKU_DEVELOP_LIB_DIRECTORIES
-  /boot/system/non-packaged/develop/lib${CMAKE_HAIKU_SECONDARY_ARCH_SUBDIR}
-  /boot/system/develop/lib${CMAKE_HAIKU_SECONDARY_ARCH_SUBDIR}
-  )
-
-LIST(APPEND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES
-  ${CMAKE_HAIKU_DEVELOP_LIB_DIRECTORIES}
-  )
-
-LIST(APPEND CMAKE_SYSTEM_LIBRARY_PATH ${CMAKE_HAIKU_DEVELOP_LIB_DIRECTORIES})
-
-if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
-  set(CMAKE_INSTALL_PREFIX "/boot/system" CACHE PATH
-    "Install path prefix, prepended onto install directories." FORCE)
-endif()
diff --git a/share/cmake-3.18/Modules/Platform/Linux-Intel-Fortran.cmake b/share/cmake-3.18/Modules/Platform/Linux-Intel-Fortran.cmake
deleted file mode 100644
index d8e94d0..0000000
--- a/share/cmake-3.18/Modules/Platform/Linux-Intel-Fortran.cmake
+++ /dev/null
@@ -1,4 +0,0 @@
-include(Platform/Linux-Intel)
-__linux_compiler_intel(Fortran)
-string(APPEND CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS " -nofor_main")
-set(CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS "")
diff --git a/share/cmake-3.18/Modules/Platform/Windows-Clang-C.cmake b/share/cmake-3.18/Modules/Platform/Windows-Clang-C.cmake
deleted file mode 100644
index d007105..0000000
--- a/share/cmake-3.18/Modules/Platform/Windows-Clang-C.cmake
+++ /dev/null
@@ -1,2 +0,0 @@
-include(Platform/Windows-Clang)
-__windows_compiler_clang(C)
diff --git a/share/cmake-3.18/Modules/Platform/Windows-Clang-CXX.cmake b/share/cmake-3.18/Modules/Platform/Windows-Clang-CXX.cmake
deleted file mode 100644
index f1d40f2..0000000
--- a/share/cmake-3.18/Modules/Platform/Windows-Clang-CXX.cmake
+++ /dev/null
@@ -1,3 +0,0 @@
-include(Platform/Windows-Clang)
-set(_COMPILE_CXX_MSVC " -TP")
-__windows_compiler_clang(CXX)
diff --git a/share/cmake-3.18/Modules/Platform/Windows-Clang.cmake b/share/cmake-3.18/Modules/Platform/Windows-Clang.cmake
deleted file mode 100644
index dff8166..0000000
--- a/share/cmake-3.18/Modules/Platform/Windows-Clang.cmake
+++ /dev/null
@@ -1,179 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# This module is shared by multiple languages; use include blocker.
-if(__WINDOWS_CLANG)
-  return()
-endif()
-set(__WINDOWS_CLANG 1)
-
-macro(__windows_compiler_clang_gnu lang)
-  set(CMAKE_LIBRARY_PATH_FLAG "-L")
-  set(CMAKE_LINK_LIBRARY_FLAG "-l")
-
-  set(CMAKE_IMPORT_LIBRARY_PREFIX "")
-  set(CMAKE_SHARED_LIBRARY_PREFIX "")
-  set(CMAKE_SHARED_MODULE_PREFIX  "")
-  set(CMAKE_STATIC_LIBRARY_PREFIX "")
-  set(CMAKE_EXECUTABLE_SUFFIX     ".exe")
-  set(CMAKE_IMPORT_LIBRARY_SUFFIX ".lib")
-  set(CMAKE_SHARED_LIBRARY_SUFFIX ".dll")
-  set(CMAKE_SHARED_MODULE_SUFFIX  ".dll")
-  set(CMAKE_STATIC_LIBRARY_SUFFIX ".lib")
-  if(NOT "${lang}" STREQUAL "ASM")
-    set(CMAKE_DEPFILE_FLAGS_${lang} "-MD -MT <OBJECT> -MF <DEPFILE>")
-  endif()
-
-  set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "")
-  set(CMAKE_FIND_LIBRARY_SUFFIXES ".dll.a" ".a" ".lib")
-  set(CMAKE_SUPPORT_WINDOWS_EXPORT_ALL_SYMBOLS 1)
-  set (CMAKE_LINK_DEF_FILE_FLAG "-Xlinker /DEF:")
-
-  if("${CMAKE_${lang}_SIMULATE_VERSION}" MATCHES "^([0-9]+)\\.([0-9]+)")
-    math(EXPR MSVC_VERSION "${CMAKE_MATCH_1}*100 + ${CMAKE_MATCH_2}")
-  endif()
-
-  # No -fPIC on Windows
-  set(CMAKE_${lang}_COMPILE_OPTIONS_PIC "")
-  set(CMAKE_${lang}_COMPILE_OPTIONS_PIE "")
-  set(_CMAKE_${lang}_PIE_MAY_BE_SUPPORTED_BY_LINKER NO)
-  set(CMAKE_${lang}_LINK_OPTIONS_PIE "")
-  set(CMAKE_${lang}_LINK_OPTIONS_NO_PIE "")
-  set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "")
-
-  set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_OBJECTS 1)
-  set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_LIBRARIES 1)
-  set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_INCLUDES 1)
-
-  set(CMAKE_${lang}_COMPILE_OPTIONS_IPO "-flto")
-  set(_CMAKE_${lang}_IPO_SUPPORTED_BY_CMAKE YES)
-  set(_CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER YES)
-  set(CMAKE_${lang}_ARCHIVE_CREATE_IPO "<CMAKE_AR> cr <TARGET> <LINK_FLAGS> <OBJECTS>")
-  set(CMAKE_${lang}_ARCHIVE_APPEND_IPO "<CMAKE_AR> r <TARGET> <LINK_FLAGS> <OBJECTS>")
-  set(CMAKE_${lang}_ARCHIVE_FINISH_IPO "<CMAKE_RANLIB> <TARGET>")
-
-  # Create archiving rules to support large object file lists for static libraries.
-  set(CMAKE_${lang}_ARCHIVE_CREATE "<CMAKE_AR> qc <TARGET> <LINK_FLAGS> <OBJECTS>")
-  set(CMAKE_${lang}_ARCHIVE_APPEND "<CMAKE_AR> q <TARGET> <LINK_FLAGS> <OBJECTS>")
-  set(CMAKE_${lang}_ARCHIVE_FINISH "<CMAKE_RANLIB> <TARGET>")
-  set(CMAKE_${lang}_CREATE_SHARED_LIBRARY
-    "<CMAKE_${lang}_COMPILER> -fuse-ld=lld-link -nostartfiles -nostdlib <CMAKE_SHARED_LIBRARY_${lang}_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS> -o <TARGET> ${CMAKE_GNULD_IMAGE_VERSION} -Xlinker /implib:<TARGET_IMPLIB> -Xlinker /pdb:<TARGET_PDB> -Xlinker /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> <OBJECTS> <LINK_LIBRARIES>")
-  set(CMAKE_${lang}_CREATE_SHARED_MODULE ${CMAKE_${lang}_CREATE_SHARED_LIBRARY})
-  set(CMAKE_${lang}_LINK_EXECUTABLE
-    "<CMAKE_${lang}_COMPILER> -fuse-ld=lld-link -nostartfiles -nostdlib <FLAGS> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> -Xlinker /implib:<TARGET_IMPLIB> -Xlinker /pdb:<TARGET_PDB> -Xlinker /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> ${CMAKE_GNULD_IMAGE_VERSION} <LINK_LIBRARIES>")
-
-  if(NOT "${lang}" STREQUAL "ASM")
-    set(CMAKE_${lang}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreaded         -Xclang -flto-visibility-public-std -D_MT -Xclang --dependent-lib=libcmt)
-    set(CMAKE_${lang}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDLL      -D_DLL -D_MT -Xclang --dependent-lib=msvcrt)
-    set(CMAKE_${lang}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebug    -D_DEBUG -Xclang -flto-visibility-public-std -D_MT -Xclang --dependent-lib=libcmtd)
-    set(CMAKE_${lang}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebugDLL -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd)
-
-    if(CMAKE_MSVC_RUNTIME_LIBRARY_DEFAULT)
-      set(__ADDED_FLAGS "")
-      set(__ADDED_FLAGS_DEBUG "")
-    else()
-      set(__ADDED_FLAGS_DEBUG "-D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd")
-      set(__ADDED_FLAGS "-D_DLL -D_MT -Xclang --dependent-lib=msvcrt")
-    endif()
-
-    string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -g -Xclang -gcodeview -O0 ${__ADDED_FLAGS_DEBUG}")
-    string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -Os -DNDEBUG ${__ADDED_FLAGS}")
-    string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -O3 -DNDEBUG ${__ADDED_FLAGS}")
-    string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -O2 -g -DNDEBUG -Xclang -gcodeview ${__ADDED_FLAGS}")
-  endif()
-  set(CMAKE_INCLUDE_SYSTEM_FLAG_${lang} "-isystem ")
-
-  set(CMAKE_PCH_EXTENSION .pch)
-  set(CMAKE_PCH_PROLOGUE "#pragma clang system_header")
-  set(CMAKE_${lang}_COMPILE_OPTIONS_USE_PCH -Xclang -include-pch -Xclang <PCH_FILE> -Xclang -include -Xclang <PCH_HEADER>)
-  set(CMAKE_${lang}_COMPILE_OPTIONS_CREATE_PCH -Xclang -emit-pch -Xclang -include -Xclang <PCH_HEADER>)
-
-  unset(__ADDED_FLAGS)
-  unset(__ADDED_FLAGS_DEBUG)
-  string(TOLOWER "${CMAKE_BUILD_TYPE}" BUILD_TYPE_LOWER)
-  set(CMAKE_${lang}_STANDARD_LIBRARIES_INIT "-lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 -loldnames")
-
-  enable_language(RC)
-endmacro()
-
-if("x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC"
-    OR "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
-
-  if ( DEFINED CMAKE_C_COMPILER_ID AND DEFINED CMAKE_CXX_COMPILER_ID
-       AND NOT "x${CMAKE_C_COMPILER_ID}" STREQUAL "x${CMAKE_CXX_COMPILER_ID}")
-    message(FATAL_ERROR "The current configuration mixes Clang and MSVC or "
-            "some other CL compatible compiler tool. This is not supported. "
-            "Use either clang or MSVC as both C and C++ compilers.")
-  endif()
-
-  if ( DEFINED CMAKE_C_COMPILER_FRONTEND_VARIANT AND DEFINED CMAKE_CXX_COMPILER_FRONTEND_VARIANT
-       AND NOT "x${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "x${CMAKE_CXX_COMPILER_FRONTEND_VARIANT}")
-    message(FATAL_ERROR "The current configuration uses the Clang compiler "
-            "tool with mixed frontend variants, both the GNU and in MSVC CL "
-            "like variants. This is not supported. Use either clang/clang++ "
-            "or clang-cl as both C and C++ compilers.")
-  endif()
-
-  if(NOT CMAKE_RC_COMPILER_INIT)
-    # Check if rc is already in the path
-    # This may happen in cases where the user is already in a visual studio environment when CMake is invoked
-    find_program(__RC_COMPILER_PATH NAMES rc)
-
-    # Default to rc if it's available, otherwise fall back to llvm-rc
-    if(__RC_COMPILER_PATH)
-      set(CMAKE_RC_COMPILER_INIT rc)
-    else()
-      set(CMAKE_RC_COMPILER_INIT llvm-rc)
-    endif()
-
-    unset(__RC_COMPILER_PATH CACHE)
-  endif()
-
-  if ( "x${CMAKE_CXX_COMPILER_FRONTEND_VARIANT}" STREQUAL "xMSVC" OR "x${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "xMSVC" )
-    include(Platform/Windows-MSVC)
-
-    # Feed the preprocessed rc file to llvm-rc
-    if(CMAKE_RC_COMPILER_INIT MATCHES "llvm-rc")
-      if(DEFINED CMAKE_C_COMPILER_ID)
-        set(CMAKE_RC_PREPROCESSOR CMAKE_C_COMPILER)
-      elseif(DEFINED CMAKE_CXX_COMPILER_ID)
-        set(CMAKE_RC_PREPROCESSOR CMAKE_CXX_COMPILER)
-      endif()
-      if(DEFINED CMAKE_RC_PREPROCESSOR)
-        set(CMAKE_DEPFILE_FLAGS_RC "-clang:-MD -clang:-MF -clang:<DEPFILE>")
-        set(CMAKE_RC_COMPILE_OBJECT "${CMAKE_COMMAND} -E cmake_llvm_rc <SOURCE> <OBJECT>.pp <${CMAKE_RC_PREPROCESSOR}> <DEFINES> -DRC_INVOKED <INCLUDES> <FLAGS> -E <SOURCE> -- <CMAKE_RC_COMPILER> <DEFINES> -I <SOURCE_DIR> <INCLUDES> /fo <OBJECT> <OBJECT>.pp")
-        if(CMAKE_GENERATOR STREQUAL "Ninja")
-          set(CMAKE_NINJA_CMCLDEPS_RC 0)
-          set(CMAKE_NINJA_DEP_TYPE_RC gcc)
-        endif()
-        unset(CMAKE_RC_PREPROCESSOR)
-      endif()
-    endif()
-
-    macro(__windows_compiler_clang lang)
-      set(_COMPILE_${lang} "${_COMPILE_${lang}_MSVC}")
-      __windows_compiler_msvc(${lang})
-    endmacro()
-  else()
-    cmake_policy(GET CMP0091 __WINDOWS_CLANG_CMP0091)
-    if(__WINDOWS_CLANG_CMP0091 STREQUAL "NEW")
-      set(CMAKE_MSVC_RUNTIME_LIBRARY_DEFAULT "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
-    else()
-      set(CMAKE_MSVC_RUNTIME_LIBRARY_DEFAULT "")
-    endif()
-    unset(__WINDOWS_CLANG_CMP0091)
-
-    set(CMAKE_BUILD_TYPE_INIT Debug)
-
-    macro(__windows_compiler_clang lang)
-      __windows_compiler_clang_gnu(${lang})
-    endmacro()
-  endif()
-
-else()
-  include(Platform/Windows-GNU)
-  macro(__windows_compiler_clang lang)
-    __windows_compiler_gnu(${lang})
-  endmacro()
-endif()
diff --git a/share/cmake-3.18/Modules/Platform/Windows-Embarcadero.cmake b/share/cmake-3.18/Modules/Platform/Windows-Embarcadero.cmake
deleted file mode 100644
index 0c24739..0000000
--- a/share/cmake-3.18/Modules/Platform/Windows-Embarcadero.cmake
+++ /dev/null
@@ -1,136 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# This module is shared by multiple languages; use include blocker.
-if(__WINDOWS_EMBARCADERO)
-  return()
-endif()
-set(__WINDOWS_EMBARCADERO 1)
-
-set(BORLAND 1)
-
-if("${CMAKE_${_lang}_COMPILER_VERSION}" VERSION_LESS 6.30)
-  # Borland target type flags (bcc32 -h -t):
-  set(_tW "-tW")       # -tW  GUI App         (implies -U__CONSOLE__)
-  set(_tC "-tWC")      # -tWC Console App     (implies -D__CONSOLE__=1)
-  set(_tD "-tWD")      # -tWD Build a DLL     (implies -D__DLL__=1 -D_DLL=1)
-  set(_tM "-tWM")      # -tWM Enable threads  (implies -D__MT__=1 -D_MT=1)
-  set(_tR "-tWR -tW-") # -tWR Use DLL runtime (implies -D_RTLDLL, and '-tW' too!!)
-  # Notes:
-  #  - The flags affect linking so we pass them to the linker.
-  #  - The flags affect preprocessing so we pass them to the compiler.
-  #  - Since '-tWR' implies '-tW' we use '-tWR -tW-' instead.
-  #  - Since '-tW-' disables '-tWD' we use '-tWR -tW- -tWD' for DLLs.
-else()
-  set(EMBARCADERO 1)
-  set(_tC "-tC") # Target is a console application
-  set(_tD "-tD") # Target is a shared library
-  set(_tM "-tM") # Target is multi-threaded
-  set(_tR "-tR") # Target uses the dynamic RTL
-  set(_tW "-tW") # Target is a Windows application
-endif()
-set(_COMPILE_C "-c")
-set(_COMPILE_CXX "-P -c")
-
-set(CMAKE_LIBRARY_PATH_FLAG "-L")
-set(CMAKE_LINK_LIBRARY_FLAG "")
-
-set(CMAKE_FIND_LIBRARY_SUFFIXES "-bcc.lib" ".lib")
-
-# uncomment these out to debug makefiles
-#set(CMAKE_START_TEMP_FILE "")
-#set(CMAKE_END_TEMP_FILE "")
-#set(CMAKE_VERBOSE_MAKEFILE 1)
-
-# Borland cannot handle + in the file name, so mangle object file name
-set (CMAKE_MANGLE_OBJECT_FILE_NAMES "ON")
-
-# extra flags for a win32 exe
-set(CMAKE_CREATE_WIN32_EXE "${_tW}" )
-# extra flags for a console app
-set(CMAKE_CREATE_CONSOLE_EXE "${_tC}" )
-
-set (CMAKE_BUILD_TYPE Debug CACHE STRING
-     "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel.")
-
-foreach(t EXE SHARED MODULE)
-  string(APPEND CMAKE_${t}_LINKER_FLAGS_INIT " ${_tM} -lS:1048576 -lSc:4098 -lH:1048576 -lHc:8192 ")
-  string(APPEND CMAKE_${t}_LINKER_FLAGS_DEBUG_INIT " -v")
-  string(APPEND CMAKE_${t}_LINKER_FLAGS_RELWITHDEBINFO_INIT " -v")
-endforeach()
-
-# The Borland link tool does not support multiple concurrent
-# invocations within a single working directory.
-if(NOT DEFINED CMAKE_JOB_POOL_LINK)
-  set(CMAKE_JOB_POOL_LINK BCC32LinkPool)
-  get_property(_bccjp GLOBAL PROPERTY JOB_POOLS)
-  if(NOT _bccjp MATCHES "BCC32LinkPool=")
-      set_property(GLOBAL APPEND PROPERTY JOB_POOLS BCC32LinkPool=1)
-  endif()
-  unset(_bccjp)
-endif()
-
-macro(__embarcadero_language lang)
-  set(CMAKE_${lang}_COMPILE_OPTIONS_DLL "${_tD}") # Note: This variable is a ';' separated list
-  set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "${_tD}") # ... while this is a space separated string.
-  set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_INCLUDES 1)
-
-  set (CMAKE_${lang}_LINKER_WRAPPER_FLAG "-l")
-
-  # compile a source file into an object file
-  # place <DEFINES> outside the response file because Borland refuses
-  # to parse quotes from the response file.
-  set(CMAKE_${lang}_COMPILE_OBJECT
-    "<CMAKE_${lang}_COMPILER> ${_tR} -DWIN32 <DEFINES> <INCLUDES> <FLAGS> -o<OBJECT> ${_COMPILE_${lang}} <SOURCE>"
-    )
-
-  set(CMAKE_${lang}_LINK_EXECUTABLE
-    "<CMAKE_${lang}_COMPILER> ${_tR} -e<TARGET> <LINK_FLAGS> <FLAGS> ${CMAKE_START_TEMP_FILE} <LINK_LIBRARIES> <OBJECTS>${CMAKE_END_TEMP_FILE}"
-    # "implib -c -w <TARGET_IMPLIB> <TARGET>"
-    )
-
-  # place <DEFINES> outside the response file because Borland refuses
-  # to parse quotes from the response file.
-  set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE
-    "cpp32 -DWIN32 <DEFINES> <INCLUDES> <FLAGS> -o<PREPROCESSED_SOURCE> ${_COMPILE_${lang}} <SOURCE>"
-    )
-  # Borland >= 5.6 allows -P option for cpp32, <= 5.5 does not
-
-  # Create a module library.
-  set(CMAKE_${lang}_CREATE_SHARED_MODULE
-    "<CMAKE_${lang}_COMPILER> ${_tR} ${_tD} ${CMAKE_START_TEMP_FILE}-e<TARGET> <LINK_FLAGS> <LINK_LIBRARIES> <OBJECTS>${CMAKE_END_TEMP_FILE}"
-    )
-
-  # Create an import library for another target.
-  set(CMAKE_${lang}_CREATE_IMPORT_LIBRARY
-    "implib -c -w <TARGET_IMPLIB> <TARGET>"
-    )
-
-  # Create a shared library.
-  # First create a module and then its import library.
-  set(CMAKE_${lang}_CREATE_SHARED_LIBRARY
-    ${CMAKE_${lang}_CREATE_SHARED_MODULE}
-    ${CMAKE_${lang}_CREATE_IMPORT_LIBRARY}
-    )
-
-  # create a static library
-  set(CMAKE_${lang}_CREATE_STATIC_LIBRARY
-    "tlib ${CMAKE_START_TEMP_FILE}/p512 <LINK_FLAGS> /a <TARGET_QUOTED> <OBJECTS>${CMAKE_END_TEMP_FILE}"
-    )
-
-  # Precompile Headers
-  if (EMBARCADERO)
-    set(CMAKE_PCH_EXTENSION .pch)
-    set(CMAKE_${lang}_COMPILE_OPTIONS_USE_PCH -Xclang -include-pch -Xclang <PCH_FILE> -Xclang -include -Xclang <PCH_HEADER>)
-    set(CMAKE_${lang}_COMPILE_OPTIONS_CREATE_PCH -Xclang -emit-pch -Xclang -include -Xclang <PCH_HEADER>)
-  endif()
-
-  # Initial configuration flags.
-  string(APPEND CMAKE_${lang}_FLAGS_INIT " ${_tM}")
-  string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -Od -v")
-  string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -O1 -DNDEBUG")
-  string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -O2 -DNDEBUG")
-  string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -Od")
-  set(CMAKE_${lang}_STANDARD_LIBRARIES_INIT "import32.lib")
-endmacro()
diff --git a/share/cmake-3.18/Modules/Platform/Windows-GNU.cmake b/share/cmake-3.18/Modules/Platform/Windows-GNU.cmake
deleted file mode 100644
index a2e3811..0000000
--- a/share/cmake-3.18/Modules/Platform/Windows-GNU.cmake
+++ /dev/null
@@ -1,206 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# This module is shared by multiple languages; use include blocker.
-if(__WINDOWS_GNU)
-  return()
-endif()
-set(__WINDOWS_GNU 1)
-
-set(CMAKE_IMPORT_LIBRARY_PREFIX "lib")
-set(CMAKE_SHARED_LIBRARY_PREFIX "lib")
-set(CMAKE_SHARED_MODULE_PREFIX  "lib")
-set(CMAKE_STATIC_LIBRARY_PREFIX "lib")
-
-set(CMAKE_EXECUTABLE_SUFFIX     ".exe")
-set(CMAKE_IMPORT_LIBRARY_SUFFIX ".dll.a")
-set(CMAKE_SHARED_LIBRARY_SUFFIX ".dll")
-set(CMAKE_SHARED_MODULE_SUFFIX  ".dll")
-set(CMAKE_STATIC_LIBRARY_SUFFIX ".a")
-
-if(MSYS OR MINGW)
-  set(CMAKE_EXTRA_LINK_EXTENSIONS ".lib") # MinGW can also link to a MS .lib
-endif()
-
-if(MINGW)
-  set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "")
-  set(CMAKE_FIND_LIBRARY_SUFFIXES ".dll.a" ".a" ".lib")
-  set(CMAKE_C_STANDARD_LIBRARIES_INIT "-lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32")
-  set(CMAKE_CXX_STANDARD_LIBRARIES_INIT "${CMAKE_C_STANDARD_LIBRARIES_INIT}")
-endif()
-
-set(CMAKE_DL_LIBS "")
-set(CMAKE_LIBRARY_PATH_FLAG "-L")
-set(CMAKE_LINK_LIBRARY_FLAG "-l")
-set(CMAKE_LINK_DEF_FILE_FLAG "") # Empty string: passing the file is enough
-set(CMAKE_LINK_LIBRARY_SUFFIX "")
-set(CMAKE_CREATE_WIN32_EXE  "-mwindows")
-
-set(CMAKE_GNULD_IMAGE_VERSION
-  "-Wl,--major-image-version,<TARGET_VERSION_MAJOR>,--minor-image-version,<TARGET_VERSION_MINOR>")
-
-# Check if GNU ld is too old to support @FILE syntax.
-set(__WINDOWS_GNU_LD_RESPONSE 1)
-execute_process(COMMAND ld -v OUTPUT_VARIABLE _help ERROR_VARIABLE _help)
-if("${_help}" MATCHES "GNU ld .* 2\\.1[1-6]")
-  set(__WINDOWS_GNU_LD_RESPONSE 0)
-endif()
-
-macro(__windows_compiler_gnu lang)
-
-  if(MSYS OR MINGW)
-    # Create archiving rules to support large object file lists for static libraries.
-    set(CMAKE_${lang}_ARCHIVE_CREATE "<CMAKE_AR> qc <TARGET> <LINK_FLAGS> <OBJECTS>")
-    set(CMAKE_${lang}_ARCHIVE_APPEND "<CMAKE_AR> q <TARGET> <LINK_FLAGS> <OBJECTS>")
-    set(CMAKE_${lang}_ARCHIVE_FINISH "<CMAKE_RANLIB> <TARGET>")
-
-    # Initialize C link type selection flags.  These flags are used when
-    # building a shared library, shared module, or executable that links
-    # to other libraries to select whether to use the static or shared
-    # versions of the libraries.
-    foreach(type SHARED_LIBRARY SHARED_MODULE EXE)
-      set(CMAKE_${type}_LINK_STATIC_${lang}_FLAGS "-Wl,-Bstatic")
-      set(CMAKE_${type}_LINK_DYNAMIC_${lang}_FLAGS "-Wl,-Bdynamic")
-    endforeach()
-  endif()
-
-  # No -fPIC on Windows
-  set(CMAKE_${lang}_COMPILE_OPTIONS_PIC "")
-  set(CMAKE_${lang}_COMPILE_OPTIONS_PIE "")
-  set(_CMAKE_${lang}_PIE_MAY_BE_SUPPORTED_BY_LINKER NO)
-  set(CMAKE_${lang}_LINK_OPTIONS_PIE "")
-  set(CMAKE_${lang}_LINK_OPTIONS_NO_PIE "")
-  set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "")
-
-  set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_OBJECTS ${__WINDOWS_GNU_LD_RESPONSE})
-  set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_LIBRARIES ${__WINDOWS_GNU_LD_RESPONSE})
-  set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_INCLUDES 1)
-
-  # We prefer "@" for response files but it is not supported by gcc 3.
-  execute_process(COMMAND ${CMAKE_${lang}_COMPILER} --version OUTPUT_VARIABLE _ver ERROR_VARIABLE _ver)
-  if("${_ver}" MATCHES "\\(GCC\\) 3\\.")
-    if("${lang}" STREQUAL "Fortran")
-      # The GNU Fortran compiler reports an error:
-      #   no input files; unwilling to write output files
-      # when the response file is passed with "-Wl,@".
-      set(CMAKE_Fortran_USE_RESPONSE_FILE_FOR_OBJECTS 0)
-    else()
-      # Use "-Wl,@" to pass the response file to the linker.
-      set(CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG "-Wl,@")
-    endif()
-    # The GNU 3.x compilers do not support response files (only linkers).
-    set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_INCLUDES 0)
-    # Link libraries are generated only for the front-end.
-    set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_LIBRARIES 0)
-  else()
-    # Use "@" to pass the response file to the front-end.
-    set(CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG "@")
-  endif()
-
-  # Binary link rules.
-  set(CMAKE_${lang}_CREATE_SHARED_MODULE
-    "<CMAKE_${lang}_COMPILER> <CMAKE_SHARED_MODULE_${lang}_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_MODULE_CREATE_${lang}_FLAGS> -o <TARGET> ${CMAKE_GNULD_IMAGE_VERSION} <OBJECTS> <LINK_LIBRARIES>")
-  set(CMAKE_${lang}_CREATE_SHARED_LIBRARY
-    "<CMAKE_${lang}_COMPILER> <CMAKE_SHARED_LIBRARY_${lang}_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS> -o <TARGET> -Wl,--out-implib,<TARGET_IMPLIB> ${CMAKE_GNULD_IMAGE_VERSION} <OBJECTS> <LINK_LIBRARIES>")
-  set(CMAKE_${lang}_LINK_EXECUTABLE
-    "<CMAKE_${lang}_COMPILER> <FLAGS> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> -Wl,--out-implib,<TARGET_IMPLIB> ${CMAKE_GNULD_IMAGE_VERSION} <LINK_LIBRARIES>")
-
-  list(APPEND CMAKE_${lang}_ABI_FILES "Platform/Windows-GNU-${lang}-ABI")
-
-  # Support very long lists of object files.
-  # TODO: check for which gcc versions this is still needed, not needed for gcc >= 4.4.
-  # Ninja generator doesn't support this work around.
-  if("${CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG}" STREQUAL "@" AND NOT CMAKE_GENERATOR MATCHES "Ninja")
-    foreach(rule CREATE_SHARED_MODULE CREATE_SHARED_LIBRARY LINK_EXECUTABLE)
-      # The gcc/collect2/ld toolchain does not use response files
-      # internally so we cannot pass long object lists.  Instead pass
-      # the object file list in a response file to the archiver to put
-      # them in a temporary archive.  Hand the archive to the linker.
-      string(REPLACE "<OBJECTS>" "-Wl,--whole-archive <OBJECT_DIR>/objects.a -Wl,--no-whole-archive"
-        CMAKE_${lang}_${rule} "${CMAKE_${lang}_${rule}}")
-      set(CMAKE_${lang}_${rule}
-        "<CMAKE_COMMAND> -E rm -f <OBJECT_DIR>/objects.a"
-        "<CMAKE_AR> cr <OBJECT_DIR>/objects.a <OBJECTS>"
-        "${CMAKE_${lang}_${rule}}"
-        )
-    endforeach()
-  endif()
-
-  if(NOT CMAKE_RC_COMPILER_INIT AND NOT CMAKE_GENERATOR_RC)
-    set(CMAKE_RC_COMPILER_INIT ${_CMAKE_TOOLCHAIN_PREFIX}windres)
-  endif()
-
-  enable_language(RC)
-endmacro()
-
-macro(__windows_compiler_gnu_abi lang)
-  if(CMAKE_NO_GNUtoMS)
-    set(CMAKE_GNUtoMS 0)
-  else()
-    option(CMAKE_GNUtoMS "Convert GNU import libraries to MS format (requires Visual Studio)" OFF)
-  endif()
-
-  if(CMAKE_GNUtoMS AND NOT CMAKE_GNUtoMS_LIB)
-    # Find MS development environment setup script for this architecture.
-    # We need to use the MS Librarian tool (lib.exe).
-    # Find the most recent version available.
-
-    # Query the VS Installer tool for locations of VS 2017 and above.
-    set(_vs_installer_paths "")
-    foreach(vs RANGE 16 15 -1) # change the first number to the largest supported version
-      cmake_host_system_information(RESULT _vs_dir QUERY VS_${vs}_DIR)
-      if(_vs_dir)
-        list(APPEND _vs_installer_paths "${_vs_dir}/VC/Auxiliary/Build")
-      endif()
-    endforeach(vs)
-
-    if("${CMAKE_SIZEOF_VOID_P}" EQUAL 4)
-      find_program(CMAKE_GNUtoMS_VCVARS NAMES vcvars32.bat
-        DOC "Visual Studio vcvars32.bat"
-        PATHS
-        ${_vs_installer_paths}
-        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\14.0\\Setup\\VC;ProductDir]/bin"
-        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\12.0\\Setup\\VC;ProductDir]/bin"
-        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0\\Setup\\VC;ProductDir]/bin"
-        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VC;ProductDir]/bin"
-        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\9.0\\Setup\\VC;ProductDir]/bin"
-        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/bin"
-        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\7.1\\Setup\\VC;ProductDir]/bin"
-        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\6.0\\Setup\\Microsoft Visual C++;ProductDir]/bin"
-        )
-      set(CMAKE_GNUtoMS_ARCH x86)
-    elseif("${CMAKE_SIZEOF_VOID_P}" EQUAL 8)
-      find_program(CMAKE_GNUtoMS_VCVARS NAMES vcvars64.bat vcvarsamd64.bat
-        DOC "Visual Studio vcvarsamd64.bat"
-        PATHS
-        ${_vs_installer_paths}
-        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\14.0\\Setup\\VC;ProductDir]/bin/amd64"
-        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\12.0\\Setup\\VC;ProductDir]/bin/amd64"
-        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0\\Setup\\VC;ProductDir]/bin/amd64"
-        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VC;ProductDir]/bin/amd64"
-        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\9.0\\Setup\\VC;ProductDir]/bin/amd64"
-        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/bin/amd64"
-        )
-      set(CMAKE_GNUtoMS_ARCH amd64)
-    endif()
-    unset(_vs_installer_paths)
-    set_property(CACHE CMAKE_GNUtoMS_VCVARS PROPERTY ADVANCED 1)
-    if(CMAKE_GNUtoMS_VCVARS)
-      # Create helper script to run lib.exe from MS environment.
-      string(REPLACE "/" "\\" CMAKE_GNUtoMS_BAT "${CMAKE_GNUtoMS_VCVARS}")
-      set(CMAKE_GNUtoMS_LIB ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeGNUtoMS_lib.bat)
-      configure_file(${CMAKE_ROOT}/Modules/Platform/GNUtoMS_lib.bat.in ${CMAKE_GNUtoMS_LIB})
-    else()
-      message(WARNING "Disabling CMAKE_GNUtoMS option because CMAKE_GNUtoMS_VCVARS is not set.")
-      set(CMAKE_GNUtoMS 0)
-    endif()
-  endif()
-
-  if(CMAKE_GNUtoMS)
-    # Teach CMake how to create a MS import library at link time.
-    set(CMAKE_${lang}_GNUtoMS_RULE " -Wl,--output-def,<TARGET_NAME>.def"
-      "<CMAKE_COMMAND> -Dlib=\"${CMAKE_GNUtoMS_LIB}\" -Ddef=<TARGET_NAME>.def -Ddll=<TARGET> -Dimp=<TARGET_IMPLIB> -P \"${CMAKE_ROOT}/Modules/Platform/GNUtoMS_lib.cmake\""
-      )
-  endif()
-endmacro()
diff --git a/share/cmake-3.18/Modules/Platform/Windows-Intel-C.cmake b/share/cmake-3.18/Modules/Platform/Windows-Intel-C.cmake
deleted file mode 100644
index 06d8f50..0000000
--- a/share/cmake-3.18/Modules/Platform/Windows-Intel-C.cmake
+++ /dev/null
@@ -1,4 +0,0 @@
-include(Platform/Windows-Intel)
-__windows_compiler_intel(C)
-set(CMAKE_NINJA_DEPTYPE_C intel) # special value handled by CMake
-set(CMAKE_DEPFILE_FLAGS_C "-QMMD -QMT <OBJECT> -QMF <DEPFILE>")
diff --git a/share/cmake-3.18/Modules/Platform/Windows-Intel-CXX.cmake b/share/cmake-3.18/Modules/Platform/Windows-Intel-CXX.cmake
deleted file mode 100644
index 666de6e..0000000
--- a/share/cmake-3.18/Modules/Platform/Windows-Intel-CXX.cmake
+++ /dev/null
@@ -1,5 +0,0 @@
-include(Platform/Windows-Intel)
-set(_COMPILE_CXX " /TP")
-__windows_compiler_intel(CXX)
-set(CMAKE_NINJA_DEPTYPE_CXX intel) # special value handled by CMake
-set(CMAKE_DEPFILE_FLAGS_CXX "-QMMD -QMT <OBJECT> -QMF <DEPFILE>")
diff --git a/share/cmake-3.18/Modules/Platform/Windows-Intel.cmake b/share/cmake-3.18/Modules/Platform/Windows-Intel.cmake
deleted file mode 100644
index 5d8f7fc..0000000
--- a/share/cmake-3.18/Modules/Platform/Windows-Intel.cmake
+++ /dev/null
@@ -1,18 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# This module is shared by multiple languages; use include blocker.
-if(__WINDOWS_INTEL)
-  return()
-endif()
-set(__WINDOWS_INTEL 1)
-
-include(Platform/Windows-MSVC)
-macro(__windows_compiler_intel lang)
-  __windows_compiler_msvc(${lang})
-  string(REPLACE "<CMAKE_AR>" "xilib" CMAKE_${lang}_CREATE_STATIC_LIBRARY "${CMAKE_${lang}_CREATE_STATIC_LIBRARY}")
-  foreach(rule CREATE_SHARED_LIBRARY CREATE_SHARED_MODULE LINK_EXECUTABLE)
-    string(REPLACE "<CMAKE_LINKER>" "xilink" CMAKE_${lang}_${rule} "${CMAKE_${lang}_${rule}}")
-  endforeach()
-endmacro()
diff --git a/share/cmake-3.18/Modules/Platform/Windows-MSVC-C.cmake b/share/cmake-3.18/Modules/Platform/Windows-MSVC-C.cmake
deleted file mode 100644
index cbe1586..0000000
--- a/share/cmake-3.18/Modules/Platform/Windows-MSVC-C.cmake
+++ /dev/null
@@ -1,5 +0,0 @@
-include(Platform/Windows-MSVC)
-if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 18.0)
-  set(_FS_C " /FS")
-endif()
-__windows_compiler_msvc(C)
diff --git a/share/cmake-3.18/Modules/Platform/Windows-MSVC-CXX.cmake b/share/cmake-3.18/Modules/Platform/Windows-MSVC-CXX.cmake
deleted file mode 100644
index 0e85005..0000000
--- a/share/cmake-3.18/Modules/Platform/Windows-MSVC-CXX.cmake
+++ /dev/null
@@ -1,6 +0,0 @@
-include(Platform/Windows-MSVC)
-set(_COMPILE_CXX " /TP")
-if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 18.0)
-  set(_FS_CXX " /FS")
-endif()
-__windows_compiler_msvc(CXX)
diff --git a/share/cmake-3.18/Modules/Platform/Windows-MSVC.cmake b/share/cmake-3.18/Modules/Platform/Windows-MSVC.cmake
deleted file mode 100644
index 2476a33..0000000
--- a/share/cmake-3.18/Modules/Platform/Windows-MSVC.cmake
+++ /dev/null
@@ -1,441 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-# This module is shared by multiple languages; use include blocker.
-if(__WINDOWS_MSVC)
-  return()
-endif()
-set(__WINDOWS_MSVC 1)
-
-set(CMAKE_LIBRARY_PATH_FLAG "-LIBPATH:")
-set(CMAKE_LINK_LIBRARY_FLAG "")
-set(MSVC 1)
-
-# hack: if a new cmake (which uses CMAKE_LINKER) runs on an old build tree
-# (where link was hardcoded) and where CMAKE_LINKER isn't in the cache
-# and still cmake didn't fail in CMakeFindBinUtils.cmake (because it isn't rerun)
-# hardcode CMAKE_LINKER here to link, so it behaves as it did before, Alex
-if(NOT DEFINED CMAKE_LINKER)
-  set(CMAKE_LINKER link)
-endif()
-
-if(CMAKE_VERBOSE_MAKEFILE)
-  set(CMAKE_CL_NOLOGO)
-else()
-  set(CMAKE_CL_NOLOGO "/nologo")
-endif()
-
-if(CMAKE_SYSTEM_NAME STREQUAL "WindowsCE")
-  set(CMAKE_CREATE_WIN32_EXE "/entry:WinMainCRTStartup")
-  set(CMAKE_CREATE_CONSOLE_EXE "/entry:mainACRTStartup")
-  set(_PLATFORM_LINK_FLAGS " /subsystem:windowsce")
-else()
-  set(CMAKE_CREATE_WIN32_EXE "/subsystem:windows")
-  set(CMAKE_CREATE_CONSOLE_EXE "/subsystem:console")
-  set(_PLATFORM_LINK_FLAGS "")
-endif()
-
-set(CMAKE_SUPPORT_WINDOWS_EXPORT_ALL_SYMBOLS 1)
-if(NOT CMAKE_NO_BUILD_TYPE AND CMAKE_GENERATOR MATCHES "Visual Studio")
-  set (CMAKE_NO_BUILD_TYPE 1)
-endif()
-
-if("${CMAKE_GENERATOR}" MATCHES "Visual Studio")
-  set(MSVC_IDE 1)
-else()
-  set(MSVC_IDE 0)
-endif()
-
-if(NOT MSVC_VERSION)
-  if("x${CMAKE_C_COMPILER_ID}" STREQUAL "xMSVC")
-    set(_compiler_version ${CMAKE_C_COMPILER_VERSION})
-  elseif("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC")
-    set(_compiler_version ${CMAKE_CXX_COMPILER_VERSION})
-  elseif(CMAKE_C_SIMULATE_VERSION)
-    set(_compiler_version ${CMAKE_C_SIMULATE_VERSION})
-  elseif(CMAKE_CXX_SIMULATE_VERSION)
-    set(_compiler_version ${CMAKE_CXX_SIMULATE_VERSION})
-  elseif(CMAKE_Fortran_SIMULATE_VERSION)
-    set(_compiler_version ${CMAKE_Fortran_SIMULATE_VERSION})
-  elseif(CMAKE_CUDA_SIMULATE_VERSION)
-    set(_compiler_version ${CMAKE_CUDA_SIMULATE_VERSION})
-  elseif(CMAKE_C_COMPILER_VERSION)
-    set(_compiler_version ${CMAKE_C_COMPILER_VERSION})
-  else()
-    set(_compiler_version ${CMAKE_CXX_COMPILER_VERSION})
-  endif()
-  if("${_compiler_version}" MATCHES "^([0-9]+)\\.([0-9]+)")
-    math(EXPR MSVC_VERSION "${CMAKE_MATCH_1}*100 + ${CMAKE_MATCH_2}")
-  else()
-    message(FATAL_ERROR "MSVC compiler version not detected properly: ${_compiler_version}")
-  endif()
-
-  if(MSVC_VERSION GREATER_EQUAL 1920)
-    # VS 2019 or greater
-    set(MSVC_TOOLSET_VERSION 142)
-  elseif(MSVC_VERSION GREATER_EQUAL 1910)
-    # VS 2017 or greater
-    set(MSVC_TOOLSET_VERSION 141)
-  elseif(MSVC_VERSION EQUAL 1900)
-    # VS 2015
-    set(MSVC_TOOLSET_VERSION 140)
-  elseif(MSVC_VERSION EQUAL 1800)
-    # VS 2013
-    set(MSVC_TOOLSET_VERSION 120)
-  elseif(MSVC_VERSION EQUAL 1700)
-    # VS 2012
-    set(MSVC_TOOLSET_VERSION 110)
-  elseif(MSVC_VERSION EQUAL 1600)
-    # VS 2010
-    set(MSVC_TOOLSET_VERSION 100)
-  elseif(MSVC_VERSION EQUAL 1500)
-    # VS 2008
-    set(MSVC_TOOLSET_VERSION 90)
-  elseif(MSVC_VERSION EQUAL 1400)
-    # VS 2005
-    set(MSVC_TOOLSET_VERSION 80)
-  else()
-    # We don't support MSVC_TOOLSET_VERSION for earlier compiler.
-  endif()
-
-  set(MSVC10)
-  set(MSVC11)
-  set(MSVC12)
-  set(MSVC14)
-  set(MSVC60)
-  set(MSVC70)
-  set(MSVC71)
-  set(MSVC80)
-  set(MSVC90)
-  set(CMAKE_COMPILER_2005)
-  set(CMAKE_COMPILER_SUPPORTS_PDBTYPE)
-  if(NOT "${_compiler_version}" VERSION_LESS 20)
-    # We no longer provide per-version variables.  Use MSVC_VERSION instead.
-  elseif(NOT "${_compiler_version}" VERSION_LESS 19)
-    set(MSVC14 1)
-  elseif(NOT "${_compiler_version}" VERSION_LESS 18)
-    set(MSVC12 1)
-  elseif(NOT "${_compiler_version}" VERSION_LESS 17)
-    set(MSVC11 1)
-  elseif(NOT  "${_compiler_version}" VERSION_LESS 16)
-    set(MSVC10 1)
-  elseif(NOT  "${_compiler_version}" VERSION_LESS 15)
-    set(MSVC90 1)
-  elseif(NOT  "${_compiler_version}" VERSION_LESS 14)
-    set(MSVC80 1)
-    set(CMAKE_COMPILER_2005 1)
-  elseif(NOT  "${_compiler_version}" VERSION_LESS 13.10)
-    set(MSVC71 1)
-  elseif(NOT  "${_compiler_version}" VERSION_LESS 13)
-    set(MSVC70 1)
-  else()
-    set(MSVC60 1)
-    set(CMAKE_COMPILER_SUPPORTS_PDBTYPE 1)
-  endif()
-endif()
-
-if(MSVC_C_ARCHITECTURE_ID MATCHES 64 OR MSVC_CXX_ARCHITECTURE_ID MATCHES 64)
-  set(CMAKE_CL_64 1)
-else()
-  set(CMAKE_CL_64 0)
-endif()
-if(CMAKE_FORCE_WIN64 OR CMAKE_FORCE_IA64)
-  set(CMAKE_CL_64 1)
-endif()
-
-if("${MSVC_VERSION}" GREATER 1599)
-  set(MSVC_INCREMENTAL_DEFAULT ON)
-endif()
-
-# default to Debug builds
-set(CMAKE_BUILD_TYPE_INIT Debug)
-
-# Compute an architecture family from the architecture id.
-foreach(lang C CXX)
-  set(_MSVC_${lang}_ARCHITECTURE_FAMILY "${MSVC_${lang}_ARCHITECTURE_ID}")
-  if(_MSVC_${lang}_ARCHITECTURE_FAMILY MATCHES "^ARM64")
-    set(_MSVC_${lang}_ARCHITECTURE_FAMILY "ARM64")
-  elseif(_MSVC_${lang}_ARCHITECTURE_FAMILY MATCHES "^ARM")
-    set(_MSVC_${lang}_ARCHITECTURE_FAMILY "ARM")
-  elseif(_MSVC_${lang}_ARCHITECTURE_FAMILY MATCHES "^SH")
-    set(_MSVC_${lang}_ARCHITECTURE_FAMILY "SHx")
-  endif()
-endforeach()
-
-if(WINCE)
-  foreach(lang C CXX)
-    string(TOUPPER "${_MSVC_${lang}_ARCHITECTURE_FAMILY}" _MSVC_${lang}_ARCHITECTURE_FAMILY_UPPER)
-  endforeach()
-
-  if("${CMAKE_SYSTEM_VERSION}" MATCHES "^([0-9]+)\\.([0-9]+)")
-    math(EXPR _CE_VERSION "${CMAKE_MATCH_1}*100 + ${CMAKE_MATCH_2}")
-  elseif("${CMAKE_SYSTEM_VERSION}" STREQUAL "")
-    set(_CE_VERSION "500")
-  else()
-    message(FATAL_ERROR "Invalid Windows CE version: ${CMAKE_SYSTEM_VERSION}")
-  endif()
-
-  set(_PLATFORM_DEFINES "/D_WIN32_WCE=0x${_CE_VERSION} /DUNDER_CE /DWINCE")
-  set(_PLATFORM_DEFINES_C " /D${_MSVC_C_ARCHITECTURE_FAMILY} /D_${_MSVC_C_ARCHITECTURE_FAMILY_UPPER}_")
-  set(_PLATFORM_DEFINES_CXX " /D${_MSVC_CXX_ARCHITECTURE_FAMILY} /D_${_MSVC_CXX_ARCHITECTURE_FAMILY_UPPER}_")
-
-  set(_RTC1 "")
-  set(_FLAGS_C "")
-  set(_FLAGS_CXX " /GR /EHsc")
-
-  foreach(lang C CXX)
-    if(_MSVC_${lang}_ARCHITECTURE_FAMILY STREQUAL "ARM")
-      string(APPEND _PLATFORM_DEFINES_${lang} " /D${MSVC_${lang}_ARCHITECTURE_ID}")
-      if(MSVC_${lang}_ARCHITECTURE_ID MATCHES "^ARMV([45])I$")
-        string(APPEND _FLAGS_${lang} " /QRarch${CMAKE_MATCH_1}T")
-      endif()
-    endif()
-  endforeach()
-
-  set(CMAKE_C_STANDARD_LIBRARIES_INIT "coredll.lib ole32.lib oleaut32.lib uuid.lib commctrl.lib")
-  foreach(t EXE SHARED MODULE)
-    string(APPEND CMAKE_${t}_LINKER_FLAGS_INIT " /NODEFAULTLIB:libc.lib /NODEFAULTLIB:oldnames.lib")
-  endforeach()
-
-  if (MSVC_VERSION LESS 1600)
-    string(APPEND CMAKE_C_STANDARD_LIBRARIES_INIT " corelibc.lib")
-  endif ()
-elseif(WINDOWS_PHONE OR WINDOWS_STORE)
-  set(_PLATFORM_DEFINES "/DWIN32")
-  set(_FLAGS_C " /DUNICODE /D_UNICODE")
-  set(_FLAGS_CXX " /DUNICODE /D_UNICODE /GR /EHsc")
-  if(WINDOWS_STORE AND MSVC_VERSION GREATER 1899)
-    set(CMAKE_C_STANDARD_LIBRARIES_INIT "WindowsApp.lib")
-  elseif(WINDOWS_PHONE)
-    set(CMAKE_C_STANDARD_LIBRARIES_INIT "WindowsPhoneCore.lib RuntimeObject.lib PhoneAppModelHost.lib")
-  elseif(_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM" OR _MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM" OR _MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM64" OR _MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM64")
-    set(CMAKE_C_STANDARD_LIBRARIES_INIT "kernel32.lib user32.lib")
-  else()
-    set(CMAKE_C_STANDARD_LIBRARIES_INIT "kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib")
-  endif()
-else()
-  set(_PLATFORM_DEFINES "/DWIN32")
-
-  if(_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM" OR _MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM")
-    set(CMAKE_C_STANDARD_LIBRARIES_INIT "kernel32.lib user32.lib")
-  elseif(MSVC_VERSION GREATER 1310)
-    if(CMAKE_VS_PLATFORM_TOOLSET MATCHES "v[0-9]+_clang_.*")
-      # Clang/C2 in MSVC14 Update 1 seems to not support -fsantinize (yet?)
-      # set(_RTC1 "-fsantinize=memory,safe-stack")
-      set(_FLAGS_CXX " -frtti -fexceptions")
-    else()
-      set(_RTC1 "/RTC1")
-      set(_FLAGS_CXX " /GR /EHsc")
-    endif()
-    set(CMAKE_C_STANDARD_LIBRARIES_INIT "kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib")
-  else()
-    set(_RTC1 "/GZ")
-    set(_FLAGS_CXX " /GR /GX")
-    set(CMAKE_C_STANDARD_LIBRARIES_INIT "kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib")
-  endif()
-
-  if(MSVC_VERSION LESS 1310)
-    set(_FLAGS_C   " /Zm1000${_FLAGS_C}")
-    set(_FLAGS_CXX " /Zm1000${_FLAGS_CXX}")
-  endif()
-endif()
-
-set(CMAKE_CXX_STANDARD_LIBRARIES_INIT "${CMAKE_C_STANDARD_LIBRARIES_INIT}")
-
-# executable linker flags
-set (CMAKE_LINK_DEF_FILE_FLAG "/DEF:")
-# set the machine type
-if(MSVC_C_ARCHITECTURE_ID)
-  if(MSVC_C_ARCHITECTURE_ID MATCHES "^ARMV.I")
-    set(_MACHINE_ARCH_FLAG "/machine:THUMB")
-  elseif(_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM64")
-    set(_MACHINE_ARCH_FLAG "/machine:ARM64")
-  elseif(_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM")
-    set(_MACHINE_ARCH_FLAG "/machine:ARM")
-  else()
-    set(_MACHINE_ARCH_FLAG "/machine:${MSVC_C_ARCHITECTURE_ID}")
-  endif()
-elseif(MSVC_CXX_ARCHITECTURE_ID)
-  if(MSVC_CXX_ARCHITECTURE_ID MATCHES "^ARMV.I")
-    set(_MACHINE_ARCH_FLAG "/machine:THUMB")
-  elseif(_MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM64")
-    set(_MACHINE_ARCH_FLAG "/machine:ARM64")
-  elseif(_MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM")
-    set(_MACHINE_ARCH_FLAG "/machine:ARM")
-  else()
-    set(_MACHINE_ARCH_FLAG "/machine:${MSVC_CXX_ARCHITECTURE_ID}")
-  endif()
-elseif(MSVC_Fortran_ARCHITECTURE_ID)
-  set(_MACHINE_ARCH_FLAG "/machine:${MSVC_Fortran_ARCHITECTURE_ID}")
-endif()
-
-# add /debug and /INCREMENTAL:YES to DEBUG and RELWITHDEBINFO also add pdbtype
-# on versions that support it
-set( MSVC_INCREMENTAL_YES_FLAG "")
-if(NOT WINDOWS_PHONE AND NOT WINDOWS_STORE)
-  if(NOT MSVC_INCREMENTAL_DEFAULT)
-    set( MSVC_INCREMENTAL_YES_FLAG "/INCREMENTAL:YES")
-  else()
-    set(  MSVC_INCREMENTAL_YES_FLAG "/INCREMENTAL" )
-  endif()
-endif()
-
-foreach(t EXE SHARED MODULE)
-  string(APPEND CMAKE_${t}_LINKER_FLAGS_INIT " ${_MACHINE_ARCH_FLAG}")
-  if (CMAKE_COMPILER_SUPPORTS_PDBTYPE)
-    string(APPEND CMAKE_${t}_LINKER_FLAGS_DEBUG_INIT " /debug /pdbtype:sept ${MSVC_INCREMENTAL_YES_FLAG}")
-    string(APPEND CMAKE_${t}_LINKER_FLAGS_RELWITHDEBINFO_INIT " /debug /pdbtype:sept ${MSVC_INCREMENTAL_YES_FLAG}")
-  else ()
-    string(APPEND CMAKE_${t}_LINKER_FLAGS_DEBUG_INIT " /debug ${MSVC_INCREMENTAL_YES_FLAG}")
-    string(APPEND CMAKE_${t}_LINKER_FLAGS_RELWITHDEBINFO_INIT " /debug ${MSVC_INCREMENTAL_YES_FLAG}")
-  endif ()
-  # for release and minsize release default to no incremental linking
-  string(APPEND CMAKE_${t}_LINKER_FLAGS_MINSIZEREL_INIT " /INCREMENTAL:NO")
-  string(APPEND CMAKE_${t}_LINKER_FLAGS_RELEASE_INIT " /INCREMENTAL:NO")
-endforeach()
-
-string(APPEND CMAKE_STATIC_LINKER_FLAGS_INIT " ${_MACHINE_ARCH_FLAG}")
-unset(_MACHINE_ARCH_FLAG)
-
-cmake_policy(GET CMP0091 __WINDOWS_MSVC_CMP0091)
-if(__WINDOWS_MSVC_CMP0091 STREQUAL "NEW")
-  set(CMAKE_MSVC_RUNTIME_LIBRARY_DEFAULT "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
-else()
-  set(CMAKE_MSVC_RUNTIME_LIBRARY_DEFAULT "")
-endif()
-unset(__WINDOWS_MSVC_CMP0091)
-
-macro(__windows_compiler_msvc lang)
-  if(NOT MSVC_VERSION LESS 1400)
-    # for 2005 make sure the manifest is put in the dll with mt
-    set(_CMAKE_VS_LINK_DLL "<CMAKE_COMMAND> -E vs_link_dll --intdir=<OBJECT_DIR> --rc=<CMAKE_RC_COMPILER> --mt=<CMAKE_MT> --manifests <MANIFESTS> -- ")
-    set(_CMAKE_VS_LINK_EXE "<CMAKE_COMMAND> -E vs_link_exe --intdir=<OBJECT_DIR> --rc=<CMAKE_RC_COMPILER> --mt=<CMAKE_MT> --manifests <MANIFESTS> -- ")
-  endif()
-  set(CMAKE_${lang}_CREATE_SHARED_LIBRARY
-    "${_CMAKE_VS_LINK_DLL}<CMAKE_LINKER> ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} /out:<TARGET> /implib:<TARGET_IMPLIB> /pdb:<TARGET_PDB> /dll /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR>${_PLATFORM_LINK_FLAGS} <LINK_FLAGS> <LINK_LIBRARIES> ${CMAKE_END_TEMP_FILE}")
-
-  set(CMAKE_${lang}_CREATE_SHARED_MODULE ${CMAKE_${lang}_CREATE_SHARED_LIBRARY})
-  set(CMAKE_${lang}_CREATE_STATIC_LIBRARY  "<CMAKE_AR> ${CMAKE_CL_NOLOGO} <LINK_FLAGS> /out:<TARGET> <OBJECTS> ")
-
-  set(CMAKE_${lang}_COMPILE_OBJECT
-    "<CMAKE_${lang}_COMPILER> ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO}${_COMPILE_${lang}} <DEFINES> <INCLUDES> <FLAGS> /Fo<OBJECT> /Fd<TARGET_COMPILE_PDB>${_FS_${lang}} -c <SOURCE>${CMAKE_END_TEMP_FILE}")
-  set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE
-    "<CMAKE_${lang}_COMPILER> > <PREPROCESSED_SOURCE> ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO}${_COMPILE_${lang}} <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE>${CMAKE_END_TEMP_FILE}")
-  set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE
-    "<CMAKE_${lang}_COMPILER> ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO}${_COMPILE_${lang}} <DEFINES> <INCLUDES> <FLAGS> /FoNUL /FAs /Fa<ASSEMBLY_SOURCE> /c <SOURCE>${CMAKE_END_TEMP_FILE}")
-
-  set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_OBJECTS 1)
-  set(CMAKE_${lang}_LINK_EXECUTABLE
-    "${_CMAKE_VS_LINK_EXE}<CMAKE_LINKER> ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} /out:<TARGET> /implib:<TARGET_IMPLIB> /pdb:<TARGET_PDB> /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR>${_PLATFORM_LINK_FLAGS} <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>${CMAKE_END_TEMP_FILE}")
-
-  set(CMAKE_PCH_EXTENSION .pch)
-  set(CMAKE_LINK_PCH ON)
-  if (CMAKE_${lang}_COMPILER_ID STREQUAL "Clang")
-    set(CMAKE_PCH_PROLOGUE "#pragma clang system_header")
-  elseif(MSVC_VERSION GREATER_EQUAL 1913)
-    # At least MSVC toolet 14.13 from VS 2017 15.6
-    set(CMAKE_PCH_PROLOGUE "#pragma system_header")
-  endif()
-  if (NOT ${CMAKE_${lang}_COMPILER_ID} STREQUAL "Clang")
-    set(CMAKE_PCH_COPY_COMPILE_PDB ON)
-  endif()
-  set(CMAKE_${lang}_COMPILE_OPTIONS_USE_PCH /Yu<PCH_HEADER> /Fp<PCH_FILE> /FI<PCH_HEADER>)
-  set(CMAKE_${lang}_COMPILE_OPTIONS_CREATE_PCH /Yc<PCH_HEADER> /Fp<PCH_FILE> /FI<PCH_HEADER>)
-
-  if("x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xMSVC")
-    set(_CMAKE_${lang}_IPO_SUPPORTED_BY_CMAKE YES)
-    set(_CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER YES)
-
-    set(CMAKE_${lang}_COMPILE_OPTIONS_IPO "/GL")
-    set(CMAKE_${lang}_LINK_OPTIONS_IPO "/INCREMENTAL:NO" "/LTCG")
-    string(REPLACE "<LINK_FLAGS> " "/LTCG <LINK_FLAGS> "
-      CMAKE_${lang}_CREATE_STATIC_LIBRARY_IPO "${CMAKE_${lang}_CREATE_STATIC_LIBRARY}")
-  elseif("x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xClang" OR
-         "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xFlang")
-    set(_CMAKE_${lang}_IPO_SUPPORTED_BY_CMAKE YES)
-    set(_CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER YES)
-
-    # '-flto=thin' available since Clang 3.9 and Xcode 8
-    # * http://clang.llvm.org/docs/ThinLTO.html#clang-llvm
-    # * https://trac.macports.org/wiki/XcodeVersionInfo
-    set(_CMAKE_LTO_THIN TRUE)
-    if(CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.9)
-      set(_CMAKE_LTO_THIN FALSE)
-    endif()
-
-    if(_CMAKE_LTO_THIN)
-      set(CMAKE_${lang}_COMPILE_OPTIONS_IPO "-flto=thin")
-    else()
-      set(CMAKE_${lang}_COMPILE_OPTIONS_IPO "-flto")
-    endif()
-  endif()
-
-  if("x${lang}" STREQUAL "xC" OR
-      "x${lang}" STREQUAL "xCXX")
-    if(CMAKE_MSVC_RUNTIME_LIBRARY_DEFAULT)
-      set(_MDd "")
-      set(_MD "")
-    else()
-      set(_MDd " /MDd")
-      set(_MD " /MD")
-    endif()
-
-    cmake_policy(GET CMP0092 _cmp0092)
-    if(_cmp0092 STREQUAL "NEW")
-      set(_W3 "")
-      set(_Wall "")
-    else()
-      set(_W3 " /W3")
-      set(_Wall " -Wall")
-    endif()
-    unset(_cmp0092)
-
-    if(CMAKE_VS_PLATFORM_TOOLSET MATCHES "v[0-9]+_clang_.*")
-      # note: MSVC 14 2015 Update 1 sets -fno-ms-compatibility by default, but this does not allow one to compile many projects
-      # that include MS's own headers. CMake itself is affected project too.
-      string(APPEND CMAKE_${lang}_FLAGS_INIT " ${_PLATFORM_DEFINES}${_PLATFORM_DEFINES_${lang}} -fms-extensions -fms-compatibility -D_WINDOWS${_Wall}${_FLAGS_${lang}}")
-      string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT "${_MDd} -gline-tables-only -fno-inline -O0 ${_RTC1}")
-      string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT "${_MD} -O2 -DNDEBUG")
-      string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT "${_MD} -gline-tables-only -O2 -fno-inline -DNDEBUG")
-      string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT "${_MD} -DNDEBUG") # TODO: Add '-Os' once VS generator maps it properly for Clang
-    else()
-      string(APPEND CMAKE_${lang}_FLAGS_INIT " ${_PLATFORM_DEFINES}${_PLATFORM_DEFINES_${lang}} /D_WINDOWS${_W3}${_FLAGS_${lang}}")
-      string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT "${_MDd} /Zi /Ob0 /Od ${_RTC1}")
-      string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT "${_MD} /O2 /Ob2 /DNDEBUG")
-      string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT "${_MD} /Zi /O2 /Ob1 /DNDEBUG")
-      string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT "${_MD} /O1 /Ob1 /DNDEBUG")
-    endif()
-    unset(_Wall)
-    unset(_W3)
-    unset(_MDd)
-    unset(_MD)
-
-    set(CMAKE_${lang}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreaded         -MT)
-    set(CMAKE_${lang}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDLL      -MD)
-    set(CMAKE_${lang}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebug    -MTd)
-    set(CMAKE_${lang}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebugDLL -MDd)
-  endif()
-  set(CMAKE_${lang}_LINKER_SUPPORTS_PDB ON)
-  set(CMAKE_NINJA_DEPTYPE_${lang} msvc)
-  __windows_compiler_msvc_enable_rc("${_PLATFORM_DEFINES} ${_PLATFORM_DEFINES_${lang}}")
-endmacro()
-
-macro(__windows_compiler_msvc_enable_rc flags)
-  if(NOT CMAKE_RC_COMPILER_INIT)
-    set(CMAKE_RC_COMPILER_INIT rc)
-  endif()
-  if(NOT CMAKE_RC_FLAGS_INIT)
-    # llvm-rc fails when flags are specified with /D and no space after
-    string(REPLACE " /D" " -D" fixed_flags " ${flags}")
-    string(APPEND CMAKE_RC_FLAGS_INIT " ${fixed_flags}")
-  endif()
-  if(NOT CMAKE_RC_FLAGS_DEBUG_INIT)
-    string(APPEND CMAKE_RC_FLAGS_DEBUG_INIT " -D_DEBUG")
-  endif()
-
-  enable_language(RC)
-  if(NOT DEFINED CMAKE_NINJA_CMCLDEPS_RC)
-    set(CMAKE_NINJA_CMCLDEPS_RC 1)
-  endif()
-endmacro()
diff --git a/share/cmake-3.18/Modules/Platform/Windows-NVIDIA-CUDA.cmake b/share/cmake-3.18/Modules/Platform/Windows-NVIDIA-CUDA.cmake
deleted file mode 100644
index a88f4bc..0000000
--- a/share/cmake-3.18/Modules/Platform/Windows-NVIDIA-CUDA.cmake
+++ /dev/null
@@ -1,96 +0,0 @@
-include(Platform/Windows-MSVC)
-
-set(CMAKE_CUDA_COMPILE_PTX_COMPILATION
-  "<CMAKE_CUDA_COMPILER> ${_CMAKE_CUDA_EXTRA_FLAGS} <DEFINES> <INCLUDES> <FLAGS> ${_CMAKE_COMPILE_AS_CUDA_FLAG} -ptx <SOURCE> -o <OBJECT> -Xcompiler=-Fd<TARGET_COMPILE_PDB>,-FS")
-set(CMAKE_CUDA_COMPILE_SEPARABLE_COMPILATION
-  "<CMAKE_CUDA_COMPILER> ${_CMAKE_CUDA_EXTRA_FLAGS} <DEFINES> <INCLUDES> <FLAGS> ${_CMAKE_COMPILE_AS_CUDA_FLAG} -dc <SOURCE> -o <OBJECT> -Xcompiler=-Fd<TARGET_COMPILE_PDB>,-FS")
-set(CMAKE_CUDA_COMPILE_WHOLE_COMPILATION
-  "<CMAKE_CUDA_COMPILER> ${_CMAKE_CUDA_EXTRA_FLAGS} <DEFINES> <INCLUDES> <FLAGS> ${_CMAKE_COMPILE_AS_CUDA_FLAG} -c <SOURCE> -o <OBJECT> -Xcompiler=-Fd<TARGET_COMPILE_PDB>,-FS")
-
-set(__IMPLICT_LINKS )
-foreach(dir ${CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES})
-  string(APPEND __IMPLICT_LINKS " -LIBPATH:\"${dir}\"")
-endforeach()
-foreach(lib ${CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES})
-  string(APPEND __IMPLICT_LINKS " \"${lib}\"")
-endforeach()
-set(CMAKE_CUDA_LINK_EXECUTABLE
-   "<CMAKE_CUDA_HOST_LINK_LAUNCHER> <LINK_FLAGS> <OBJECTS> /out:<TARGET> /implib:<TARGET_IMPLIB> /pdb:<TARGET_PDB> /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> <LINK_LIBRARIES>${__IMPLICT_LINKS}")
-
-set(_CMAKE_VS_LINK_DLL "<CMAKE_COMMAND> -E vs_link_dll --intdir=<OBJECT_DIR> --rc=<CMAKE_RC_COMPILER> --mt=<CMAKE_MT> --manifests <MANIFESTS> -- ")
-set(_CMAKE_VS_LINK_EXE "<CMAKE_COMMAND> -E vs_link_exe --intdir=<OBJECT_DIR> --rc=<CMAKE_RC_COMPILER> --mt=<CMAKE_MT> --manifests <MANIFESTS> -- ")
-set(CMAKE_CUDA_CREATE_SHARED_LIBRARY
-  "${_CMAKE_VS_LINK_DLL}<CMAKE_LINKER> ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} /out:<TARGET> /implib:<TARGET_IMPLIB> /pdb:<TARGET_PDB> /dll /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR>${_PLATFORM_LINK_FLAGS} <LINK_FLAGS> <LINK_LIBRARIES>${__IMPLICT_LINKS} ${CMAKE_END_TEMP_FILE}")
-
-set(CMAKE_CUDA_CREATE_SHARED_MODULE ${CMAKE_CUDA_CREATE_SHARED_LIBRARY})
-set(CMAKE_CUDA_CREATE_STATIC_LIBRARY  "<CMAKE_AR> ${CMAKE_CL_NOLOGO} <LINK_FLAGS> /out:<TARGET> <OBJECTS> ")
-set(CMAKE_CUDA_LINKER_SUPPORTS_PDB ON)
-set(CMAKE_CUDA_LINK_EXECUTABLE
-  "${_CMAKE_VS_LINK_EXE}<CMAKE_LINKER> ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} /out:<TARGET> /implib:<TARGET_IMPLIB> /pdb:<TARGET_PDB> /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR>${_PLATFORM_LINK_FLAGS} <LINK_FLAGS> <LINK_LIBRARIES>${__IMPLICT_LINKS} ${CMAKE_END_TEMP_FILE}")
-unset(_CMAKE_VS_LINK_EXE)
-unset(_CMAKE_VS_LINK_EXE)
-
-
-# Add implicit host link directories that contain device libraries
-# to the device link line.
-set(__IMPLICT_DLINK_DIRS ${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES})
-if(__IMPLICT_DLINK_DIRS)
-  list(REMOVE_ITEM __IMPLICT_DLINK_DIRS ${CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES})
-endif()
-set(__IMPLICT_DLINK_FLAGS )
-foreach(dir ${__IMPLICT_DLINK_DIRS})
-  if(EXISTS "${dir}/curand_static.lib")
-    string(APPEND __IMPLICT_DLINK_FLAGS " -L\"${dir}\"")
-  endif()
-endforeach()
-unset(__IMPLICT_DLINK_DIRS)
-
-set(CMAKE_CUDA_DEVICE_LINK_LIBRARY
-  "<CMAKE_CUDA_COMPILER> ${_CMAKE_CUDA_EXTRA_FLAGS} <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> ${_CMAKE_CUDA_EXTRA_DEVICE_LINK_FLAGS} -shared -dlink <OBJECTS> -o <TARGET> <LINK_LIBRARIES> -Xcompiler=-Fd<TARGET_COMPILE_PDB>,-FS${__IMPLICT_DLINK_FLAGS}")
-set(CMAKE_CUDA_DEVICE_LINK_EXECUTABLE
-  "<CMAKE_CUDA_COMPILER> ${_CMAKE_CUDA_EXTRA_FLAGS} <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> ${_CMAKE_CUDA_EXTRA_DEVICE_LINK_FLAGS} -shared -dlink <OBJECTS> -o <TARGET> <LINK_LIBRARIES> -Xcompiler=-Fd<TARGET_COMPILE_PDB>,-FS${__IMPLICT_DLINK_FLAGS}")
-unset(__IMPLICT_DLINK_FLAGS)
-
-string(REPLACE "/D" "-D" _PLATFORM_DEFINES_CUDA "${_PLATFORM_DEFINES}${_PLATFORM_DEFINES_CXX}")
-
-if(CMAKE_MSVC_RUNTIME_LIBRARY_DEFAULT)
-  set(_MDd "")
-  set(_MD "")
-else()
-  set(_MDd "-MDd ")
-  set(_MD "-MD ")
-endif()
-
-cmake_policy(GET CMP0092 _cmp0092)
-if(_cmp0092 STREQUAL "NEW")
-  set(_W3 "")
-else()
-  set(_W3 "/W3")
-endif()
-unset(_cmp0092)
-
-set(CMAKE_CUDA_RUNTIME_LIBRARY_LINK_OPTIONS_STATIC  "cudadevrt;cudart_static")
-set(CMAKE_CUDA_RUNTIME_LIBRARY_LINK_OPTIONS_SHARED  "cudadevrt;cudart")
-set(CMAKE_CUDA_RUNTIME_LIBRARY_LINK_OPTIONS_NONE    "")
-
-if(UNIX)
-  list(APPEND CMAKE_CUDA_RUNTIME_LIBRARY_LINK_OPTIONS_STATIC "rt" "pthread" "dl")
-endif()
-
-string(APPEND CMAKE_CUDA_FLAGS_INIT " ${PLATFORM_DEFINES_CUDA} -D_WINDOWS -Xcompiler=\"${_W3}${_FLAGS_CXX}\"")
-string(APPEND CMAKE_CUDA_FLAGS_DEBUG_INIT " -Xcompiler=\"${_MDd}-Zi -Ob0 -Od ${_RTC1}\"")
-string(APPEND CMAKE_CUDA_FLAGS_RELEASE_INIT " -Xcompiler=\"${_MD}-O2 -Ob2\" -DNDEBUG")
-string(APPEND CMAKE_CUDA_FLAGS_RELWITHDEBINFO_INIT " -Xcompiler=\"${_MD}-Zi -O2 -Ob1\" -DNDEBUG")
-string(APPEND CMAKE_CUDA_FLAGS_MINSIZEREL_INIT " -Xcompiler=\"${_MD}-O1 -Ob1\" -DNDEBUG")
-unset(_W3)
-unset(_MDd)
-unset(_MD)
-
-set(CMAKE_CUDA_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreaded         -Xcompiler=-MT)
-set(CMAKE_CUDA_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDLL      -Xcompiler=-MD)
-set(CMAKE_CUDA_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebug    -Xcompiler=-MTd)
-set(CMAKE_CUDA_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebugDLL -Xcompiler=-MDd)
-
-set(CMAKE_CUDA_STANDARD_LIBRARIES_INIT "${CMAKE_C_STANDARD_LIBRARIES_INIT}")
-
-__windows_compiler_msvc_enable_rc("${_PLATFORM_DEFINES} ${_PLATFORM_DEFINES_CXX}")
diff --git a/share/cmake-3.18/Modules/Platform/Windows-OpenWatcom-C.cmake b/share/cmake-3.18/Modules/Platform/Windows-OpenWatcom-C.cmake
deleted file mode 100644
index ce9bc45..0000000
--- a/share/cmake-3.18/Modules/Platform/Windows-OpenWatcom-C.cmake
+++ /dev/null
@@ -1 +0,0 @@
-include(Platform/Windows-OpenWatcom)
diff --git a/share/cmake-3.18/Modules/Platform/Windows-OpenWatcom-CXX.cmake b/share/cmake-3.18/Modules/Platform/Windows-OpenWatcom-CXX.cmake
deleted file mode 100644
index ce9bc45..0000000
--- a/share/cmake-3.18/Modules/Platform/Windows-OpenWatcom-CXX.cmake
+++ /dev/null
@@ -1 +0,0 @@
-include(Platform/Windows-OpenWatcom)
diff --git a/share/cmake-3.18/Modules/Platform/Windows-OpenWatcom.cmake b/share/cmake-3.18/Modules/Platform/Windows-OpenWatcom.cmake
deleted file mode 100644
index 70055da..0000000
--- a/share/cmake-3.18/Modules/Platform/Windows-OpenWatcom.cmake
+++ /dev/null
@@ -1,32 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-# This module is shared by multiple languages; use include blocker.
-include_guard()
-
-set(CMAKE_BUILD_TYPE_INIT Debug)
-
-set(CMAKE_CREATE_WIN32_EXE "system nt_win" )
-set(CMAKE_CREATE_CONSOLE_EXE "system nt" )
-string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT " system nt_dll")
-string(APPEND CMAKE_MODULE_LINKER_FLAGS_INIT " system nt_dll")
-
-set(CMAKE_C_COMPILE_OPTIONS_DLL "-bd") # Note: This variable is a ';' separated list
-set(CMAKE_SHARED_LIBRARY_C_FLAGS "-bd") # ... while this is a space separated string.
-
-set(CMAKE_RC_COMPILER "rc" )
-
-# single/multi-threaded                 /-bm
-# static/DLL run-time libraries         /-br
-# default is setup for multi-threaded + DLL run-time libraries
-string(APPEND CMAKE_C_FLAGS_INIT " -bt=nt -dWIN32 -br -bm")
-string(APPEND CMAKE_CXX_FLAGS_INIT " -bt=nt -xs -dWIN32 -br -bm")
-
-if(CMAKE_CROSSCOMPILING)
-  if(NOT CMAKE_C_STANDARD_INCLUDE_DIRECTORIES)
-    set(CMAKE_C_STANDARD_INCLUDE_DIRECTORIES $ENV{WATCOM}/h $ENV{WATCOM}/h/nt)
-  endif()
-  if(NOT CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES)
-    set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES $ENV{WATCOM}/h $ENV{WATCOM}/h/nt)
-  endif()
-endif()
diff --git a/share/cmake-3.18/Modules/Platform/Windows-df.cmake b/share/cmake-3.18/Modules/Platform/Windows-df.cmake
deleted file mode 100644
index 8b824bc..0000000
--- a/share/cmake-3.18/Modules/Platform/Windows-df.cmake
+++ /dev/null
@@ -1,60 +0,0 @@
-# compiler support for fortran CVF compiler on windows
-
-set(CMAKE_WINDOWS_OBJECT_PATH 1)
-set(CMAKE_LIBRARY_PATH_FLAG "-LIBPATH:")
-set(CMAKE_LINK_LIBRARY_FLAG "")
-set(WIN32 1)
-if(CMAKE_VERBOSE_MAKEFILE)
-  set(CMAKE_CL_NOLOGO)
-else()
-  set(CMAKE_CL_NOLOGO "/nologo")
-endif()
-
-set(CMAKE_Fortran_MODDIR_FLAG "-module:")
-
-set(CMAKE_Fortran_CREATE_SHARED_LIBRARY
- "link ${CMAKE_CL_NOLOGO} ${CMAKE_START_TEMP_FILE} /out:<TARGET> /dll <LINK_FLAGS> <OBJECTS> <LINK_LIBRARIES> ${CMAKE_END_TEMP_FILE}")
-
-set(CMAKE_Fortran_CREATE_SHARED_MODULE ${CMAKE_Fortran_CREATE_SHARED_LIBRARY})
-
-# create a C++ static library
-set(CMAKE_Fortran_CREATE_STATIC_LIBRARY  "lib ${CMAKE_CL_NOLOGO} <LINK_FLAGS> /out:<TARGET> <OBJECTS> ")
-
-# compile a C++ file into an object file
-set(CMAKE_Fortran_COMPILE_OBJECT
-    "<CMAKE_Fortran_COMPILER> ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO} /object:<OBJECT> <FLAGS> /compile_only <SOURCE>${CMAKE_END_TEMP_FILE}")
-
-set(CMAKE_Fortran_LINK_EXECUTABLE
-    "<CMAKE_Fortran_COMPILER> ${CMAKE_CL_NOLOGO} ${CMAKE_START_TEMP_FILE} <FLAGS> /exe:<TARGET> <OBJECTS> /link <CMAKE_Fortran_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>${CMAKE_END_TEMP_FILE}")
-
-set(CMAKE_CREATE_WIN32_EXE /winapp)
-set(CMAKE_CREATE_CONSOLE_EXE )
-
-# does the compiler support pdbtype and is it the newer compiler
-
-set(CMAKE_BUILD_TYPE_INIT Debug)
-set (CMAKE_Fortran_FLAGS_INIT "")
-set (CMAKE_Fortran_FLAGS_DEBUG_INIT "/debug:full")
-set (CMAKE_Fortran_FLAGS_MINSIZEREL_INIT "/Optimize:2 /Define:NDEBUG")
-set (CMAKE_Fortran_FLAGS_RELEASE_INIT "/Optimize:1 /Define:NDEBUG")
-set (CMAKE_Fortran_FLAGS_RELWITHDEBINFO_INIT "/Optimize:1 /debug:full /Define:NDEBUG")
-
-set (CMAKE_Fortran_STANDARD_LIBRARIES_INIT "user32.lib")
-
-# executable linker flags
-set (CMAKE_LINK_DEF_FILE_FLAG "/DEF:")
-set (CMAKE_EXE_LINKER_FLAGS_INIT " /INCREMENTAL:YES")
-if (CMAKE_COMPILER_SUPPORTS_PDBTYPE)
-  set (CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT "/debug /pdbtype:sept")
-  set (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT "/debug /pdbtype:sept")
-else ()
-  set (CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT "/debug")
-  set (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT "/debug")
-endif ()
-
-set (CMAKE_SHARED_LINKER_FLAGS_INIT ${CMAKE_EXE_LINKER_FLAGS_INIT})
-set (CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT ${CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT})
-set (CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO_INIT ${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT})
-set (CMAKE_MODULE_LINKER_FLAGS_INIT ${CMAKE_SHARED_LINKER_FLAGS_INIT})
-set (CMAKE_MODULE_LINKER_FLAGS_DEBUG_INIT ${CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT})
-set (CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO_INIT ${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT})
diff --git a/share/cmake-3.18/Modules/ProcessorCount.cmake b/share/cmake-3.18/Modules/ProcessorCount.cmake
deleted file mode 100644
index 43ec889..0000000
--- a/share/cmake-3.18/Modules/ProcessorCount.cmake
+++ /dev/null
@@ -1,237 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-ProcessorCount
---------------
-
-ProcessorCount(var)
-
-Determine the number of processors/cores and save value in ${var}
-
-Sets the variable named ${var} to the number of physical cores
-available on the machine if the information can be determined.
-Otherwise it is set to 0.  Currently this functionality is implemented
-for AIX, cygwin, FreeBSD, HPUX, Linux, macOS, QNX, Sun and
-Windows.
-
-This function is guaranteed to return a positive integer (>=1) if it
-succeeds.  It returns 0 if there's a problem determining the processor
-count.
-
-Example use, in a ctest -S dashboard script:
-
-::
-
-   include(ProcessorCount)
-   ProcessorCount(N)
-   if(NOT N EQUAL 0)
-     set(CTEST_BUILD_FLAGS -j${N})
-     set(ctest_test_args ${ctest_test_args} PARALLEL_LEVEL ${N})
-   endif()
-
-
-
-This function is intended to offer an approximation of the value of
-the number of compute cores available on the current machine, such
-that you may use that value for parallel building and parallel
-testing.  It is meant to help utilize as much of the machine as seems
-reasonable.  Of course, knowledge of what else might be running on the
-machine simultaneously should be used when deciding whether to request
-a machine's full capacity all for yourself.
-#]=======================================================================]
-
-# A more reliable way might be to compile a small C program that uses the CPUID
-# instruction, but that again requires compiler support or compiling assembler
-# code.
-
-function(ProcessorCount var)
-  # Unknown:
-  set(count 0)
-
-  if(WIN32)
-    # Windows:
-    set(count "$ENV{NUMBER_OF_PROCESSORS}")
-    #message("ProcessorCount: WIN32, trying environment variable")
-  endif()
-
-  if(NOT count)
-    # Mac, FreeBSD, OpenBSD (systems with sysctl):
-    find_program(ProcessorCount_cmd_sysctl sysctl
-      PATHS /usr/sbin /sbin)
-    mark_as_advanced(ProcessorCount_cmd_sysctl)
-    if(ProcessorCount_cmd_sysctl)
-      execute_process(COMMAND ${ProcessorCount_cmd_sysctl} -n hw.ncpu
-        ERROR_QUIET
-        OUTPUT_STRIP_TRAILING_WHITESPACE
-        OUTPUT_VARIABLE count)
-      #message("ProcessorCount: trying sysctl '${ProcessorCount_cmd_sysctl}'")
-    endif()
-  endif()
-
-  if(NOT count)
-    # Linux (systems with nproc):
-    # Prefer nproc to getconf if available as getconf may return the host CPU count in Linux containers
-    find_program(ProcessorCount_cmd_nproc nproc)
-    mark_as_advanced(ProcessorCount_cmd_nproc)
-    if(ProcessorCount_cmd_nproc)
-      execute_process(COMMAND ${ProcessorCount_cmd_nproc}
-        ERROR_QUIET
-        OUTPUT_STRIP_TRAILING_WHITESPACE
-        OUTPUT_VARIABLE count)
-      #message("ProcessorCount: trying nproc '${ProcessorCount_cmd_nproc}'")
-    endif()
-  endif()
-
-  if(NOT count)
-    # Linux (systems with getconf):
-    find_program(ProcessorCount_cmd_getconf getconf)
-    mark_as_advanced(ProcessorCount_cmd_getconf)
-    if(ProcessorCount_cmd_getconf)
-      execute_process(COMMAND ${ProcessorCount_cmd_getconf} _NPROCESSORS_ONLN
-        ERROR_QUIET
-        OUTPUT_STRIP_TRAILING_WHITESPACE
-        OUTPUT_VARIABLE count)
-      #message("ProcessorCount: trying getconf '${ProcessorCount_cmd_getconf}'")
-    endif()
-  endif()
-
-  if(NOT count)
-    # HPUX (systems with machinfo):
-    find_program(ProcessorCount_cmd_machinfo machinfo
-      PATHS /usr/contrib/bin)
-    mark_as_advanced(ProcessorCount_cmd_machinfo)
-    if(ProcessorCount_cmd_machinfo)
-      execute_process(COMMAND ${ProcessorCount_cmd_machinfo}
-        ERROR_QUIET
-        OUTPUT_STRIP_TRAILING_WHITESPACE
-        OUTPUT_VARIABLE machinfo_output)
-      string(REGEX MATCHALL "Number of CPUs = ([0-9]+)" procs "${machinfo_output}")
-      set(count "${CMAKE_MATCH_1}")
-      if(NOT count)
-        string(REGEX MATCHALL "([0-9]+) logical processors" procs "${machinfo_output}")
-        set(count "${CMAKE_MATCH_1}")
-      endif()
-      #message("ProcessorCount: trying machinfo '${ProcessorCount_cmd_machinfo}'")
-    else()
-      find_program(ProcessorCount_cmd_mpsched mpsched)
-      mark_as_advanced(ProcessorCount_cmd_mpsched)
-      if(ProcessorCount_cmd_mpsched)
-        execute_process(COMMAND ${ProcessorCount_cmd_mpsched} -s
-          OUTPUT_QUIET
-          ERROR_STRIP_TRAILING_WHITESPACE
-          ERROR_VARIABLE mpsched_output)
-        string(REGEX MATCHALL "Processor Count *: *([0-9]+)" procs "${mpsched_output}")
-        set(count "${CMAKE_MATCH_1}")
-        #message("ProcessorCount: trying mpsched -s '${ProcessorCount_cmd_mpsched}'")
-      endif()
-    endif()
-  endif()
-
-  if(NOT count)
-    # AIX (systems with lsconf):
-    find_program(ProcessorCount_cmd_lsconf lsconf
-      PATHS /usr/sbin)
-    mark_as_advanced(ProcessorCount_cmd_lsconf)
-    if(ProcessorCount_cmd_lsconf)
-      execute_process(COMMAND ${ProcessorCount_cmd_lsconf}
-        ERROR_QUIET
-        OUTPUT_STRIP_TRAILING_WHITESPACE
-        OUTPUT_VARIABLE lsconf_output)
-      string(REGEX MATCHALL "Number Of Processors: ([0-9]+)" procs "${lsconf_output}")
-      set(count "${CMAKE_MATCH_1}")
-      #message("ProcessorCount: trying lsconf '${ProcessorCount_cmd_lsconf}'")
-    endif()
-  endif()
-
-  if(NOT count)
-    # QNX (systems with pidin):
-    find_program(ProcessorCount_cmd_pidin pidin)
-    mark_as_advanced(ProcessorCount_cmd_pidin)
-    if(ProcessorCount_cmd_pidin)
-      execute_process(COMMAND ${ProcessorCount_cmd_pidin} info
-        ERROR_QUIET
-        OUTPUT_STRIP_TRAILING_WHITESPACE
-        OUTPUT_VARIABLE pidin_output)
-      string(REGEX MATCHALL "Processor[0-9]+: " procs "${pidin_output}")
-      list(LENGTH procs count)
-      #message("ProcessorCount: trying pidin '${ProcessorCount_cmd_pidin}'")
-    endif()
-  endif()
-
-  if(NOT count)
-    # Sun (systems where psrinfo tool is available)
-    find_program(ProcessorCount_cmd_psrinfo psrinfo PATHS /usr/sbin /sbin)
-    mark_as_advanced(ProcessorCount_cmd_psrinfo)
-    if (ProcessorCount_cmd_psrinfo)
-      execute_process(COMMAND ${ProcessorCount_cmd_psrinfo} -p -v
-        ERROR_QUIET
-        OUTPUT_STRIP_TRAILING_WHITESPACE
-        OUTPUT_VARIABLE psrinfo_output)
-      string(REGEX MATCHALL "has [0-9]+ virtual processor" procs "${psrinfo_output}")
-      set(count "")
-      foreach(proc ${procs})
-        string(REGEX MATCH "has ([0-9]+) virtual" res ${proc})
-        math(EXPR count "${count} + ${CMAKE_MATCH_1}")
-      endforeach()
-      #message("ProcessorCount: trying '${ProcessorCount_cmd_psrinfo}' -p -v")
-    else()
-      # Sun (systems where uname -X emits "NumCPU" in its output):
-      find_program(ProcessorCount_cmd_uname uname)
-      mark_as_advanced(ProcessorCount_cmd_uname)
-      if(ProcessorCount_cmd_uname)
-        execute_process(COMMAND ${ProcessorCount_cmd_uname} -X
-          ERROR_QUIET
-          OUTPUT_STRIP_TRAILING_WHITESPACE
-          OUTPUT_VARIABLE uname_X_output)
-        string(REGEX MATCHALL "NumCPU = ([0-9]+)" procs "${uname_X_output}")
-        set(count "${CMAKE_MATCH_1}")
-        #message("ProcessorCount: trying uname -X '${ProcessorCount_cmd_uname}'")
-      endif()
-    endif()
-  endif()
-
-  # Execute this code when all previously attempted methods return empty
-  # output:
-  #
-  if(NOT count)
-    # Systems with /proc/cpuinfo:
-    set(cpuinfo_file /proc/cpuinfo)
-    if(EXISTS "${cpuinfo_file}")
-      file(STRINGS "${cpuinfo_file}" procs REGEX "^processor.: [0-9]+$")
-      list(LENGTH procs count)
-      #message("ProcessorCount: trying cpuinfo '${cpuinfo_file}'")
-    endif()
-  endif()
-
-  if(NOT count)
-    # Haiku
-    find_program(ProcessorCount_cmd_sysinfo sysinfo)
-    if(ProcessorCount_cmd_sysinfo)
-      execute_process(COMMAND ${ProcessorCount_cmd_sysinfo}
-        ERROR_QUIET
-        OUTPUT_STRIP_TRAILING_WHITESPACE
-        OUTPUT_VARIABLE sysinfo_X_output)
-      string(REGEX MATCHALL "\nCPU #[0-9]+:" procs "\n${sysinfo_X_output}")
-      list(LENGTH procs count)
-      #message("ProcessorCount: trying sysinfo '${ProcessorCount_cmd_sysinfo}'")
-    endif()
-  endif()
-
-  # Since cygwin builds of CMake do not define WIN32 anymore, but they still
-  # run on Windows, and will still have this env var defined:
-  #
-  if(NOT count)
-    set(count "$ENV{NUMBER_OF_PROCESSORS}")
-    #message("ProcessorCount: last fallback, trying environment variable")
-  endif()
-
-  # Ensure an integer return (avoid inadvertently returning an empty string
-  # or an error string)... If it's not a decimal integer, return 0:
-  #
-  if(NOT count MATCHES "^[0-9]+$")
-    set(count 0)
-  endif()
-
-  set(${var} ${count} PARENT_SCOPE)
-endfunction()
diff --git a/share/cmake-3.18/Modules/TestBigEndian.cmake b/share/cmake-3.18/Modules/TestBigEndian.cmake
deleted file mode 100644
index 8a769b7..0000000
--- a/share/cmake-3.18/Modules/TestBigEndian.cmake
+++ /dev/null
@@ -1,123 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-TestBigEndian
--------------
-
-Define macro to determine endian type
-
-Check if the system is big endian or little endian
-
-::
-
-  TEST_BIG_ENDIAN(VARIABLE)
-  VARIABLE - variable to store the result to
-#]=======================================================================]
-
-include(CheckTypeSize)
-
-macro(TEST_BIG_ENDIAN VARIABLE)
-  if(NOT DEFINED HAVE_${VARIABLE})
-    message(CHECK_START "Check if the system is big endian")
-    message(CHECK_START "Searching 16 bit integer")
-
-    if(CMAKE_C_COMPILER_LOADED)
-      set(_test_language "C")
-    elseif(CMAKE_CXX_COMPILER_LOADED)
-      set(_test_language "CXX")
-    else()
-      message(FATAL_ERROR "TEST_BIG_ENDIAN needs either C or CXX language enabled")
-    endif()
-
-    CHECK_TYPE_SIZE("unsigned short" CMAKE_SIZEOF_UNSIGNED_SHORT LANGUAGE ${_test_language})
-    if(CMAKE_SIZEOF_UNSIGNED_SHORT EQUAL 2)
-      message(CHECK_PASS "Using unsigned short")
-      set(CMAKE_16BIT_TYPE "unsigned short")
-    else()
-      CHECK_TYPE_SIZE("unsigned int"   CMAKE_SIZEOF_UNSIGNED_INT LANGUAGE ${_test_language})
-      if(CMAKE_SIZEOF_UNSIGNED_INT)
-        message(CHECK_PASS "Using unsigned int")
-        set(CMAKE_16BIT_TYPE "unsigned int")
-
-      else()
-
-        CHECK_TYPE_SIZE("unsigned long"  CMAKE_SIZEOF_UNSIGNED_LONG LANGUAGE ${_test_language})
-        if(CMAKE_SIZEOF_UNSIGNED_LONG)
-          message(CHECK_PASS "Using unsigned long")
-          set(CMAKE_16BIT_TYPE "unsigned long")
-        else()
-          message(FATAL_ERROR "no suitable type found")
-        endif()
-
-      endif()
-
-    endif()
-
-    if(_test_language STREQUAL "CXX")
-      set(_test_file "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/TestEndianess.cpp")
-    else()
-      set(_test_file "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/TestEndianess.c")
-    endif()
-
-    configure_file("${CMAKE_ROOT}/Modules/TestEndianess.c.in"
-                   ${_test_file}
-                   @ONLY)
-
-     file(READ ${_test_file} TEST_ENDIANESS_FILE_CONTENT)
-
-     try_compile(HAVE_${VARIABLE}
-      "${CMAKE_BINARY_DIR}"
-      ${_test_file}
-      OUTPUT_VARIABLE OUTPUT
-      COPY_FILE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/TestEndianess.bin" )
-
-      if(HAVE_${VARIABLE})
-
-        file(STRINGS "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/TestEndianess.bin"
-            CMAKE_TEST_ENDIANESS_STRINGS_LE LIMIT_COUNT 1 REGEX "THIS IS LITTLE ENDIAN")
-
-        file(STRINGS "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/TestEndianess.bin"
-            CMAKE_TEST_ENDIANESS_STRINGS_BE LIMIT_COUNT 1 REGEX "THIS IS BIG ENDIAN")
-
-        # on mac, if there are universal binaries built both will be true
-        # return the result depending on the machine on which cmake runs
-        if(CMAKE_TEST_ENDIANESS_STRINGS_BE  AND  CMAKE_TEST_ENDIANESS_STRINGS_LE)
-          if(CMAKE_SYSTEM_PROCESSOR MATCHES powerpc)
-            set(CMAKE_TEST_ENDIANESS_STRINGS_BE TRUE)
-            set(CMAKE_TEST_ENDIANESS_STRINGS_LE FALSE)
-          else()
-            set(CMAKE_TEST_ENDIANESS_STRINGS_BE FALSE)
-            set(CMAKE_TEST_ENDIANESS_STRINGS_LE TRUE)
-          endif()
-          message(STATUS "TEST_BIG_ENDIAN found different results, consider setting CMAKE_OSX_ARCHITECTURES or CMAKE_TRY_COMPILE_OSX_ARCHITECTURES to one or no architecture !")
-        endif()
-
-        if(CMAKE_TEST_ENDIANESS_STRINGS_LE)
-          set(${VARIABLE} 0 CACHE INTERNAL "Result of TEST_BIG_ENDIAN" FORCE)
-          message(CHECK_PASS "little endian")
-        endif()
-
-        if(CMAKE_TEST_ENDIANESS_STRINGS_BE)
-          set(${VARIABLE} 1 CACHE INTERNAL "Result of TEST_BIG_ENDIAN" FORCE)
-          message(CHECK_PASS "big endian")
-        endif()
-
-        if(NOT CMAKE_TEST_ENDIANESS_STRINGS_BE  AND  NOT CMAKE_TEST_ENDIANESS_STRINGS_LE)
-          message(CHECK_FAIL "TEST_BIG_ENDIAN found no result!")
-          message(SEND_ERROR "TEST_BIG_ENDIAN found no result!")
-        endif()
-
-        file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
-          "Determining if the system is big endian passed with the following output:\n${OUTPUT}\nTestEndianess.c:\n${TEST_ENDIANESS_FILE_CONTENT}\n\n")
-
-      else()
-        message(CHECK_FAIL "failed")
-        file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
-          "Determining if the system is big endian failed with the following output:\n${OUTPUT}\nTestEndianess.c:\n${TEST_ENDIANESS_FILE_CONTENT}\n\n")
-        set(${VARIABLE})
-      endif()
-  endif()
-endmacro()
-
-
diff --git a/share/cmake-3.18/Modules/UseJava.cmake b/share/cmake-3.18/Modules/UseJava.cmake
deleted file mode 100644
index db3fb95..0000000
--- a/share/cmake-3.18/Modules/UseJava.cmake
+++ /dev/null
@@ -1,1438 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-UseJava
--------
-
-Use Module for Java
-
-This file provides functions for Java.  It is assumed that
-:module:`FindJava` has already been loaded.  See :module:`FindJava` for
-information on how to load Java into your CMake project.
-
-Creating And Installing JARs
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. code-block:: cmake
-
-  add_jar(<target_name>
-          [SOURCES] <source1> [<source2>...] [<resource1>...]
-          [INCLUDE_JARS <jar1> [<jar2>...]]
-          [ENTRY_POINT <entry>]
-          [VERSION <version>]
-          [OUTPUT_NAME <name>]
-          [OUTPUT_DIR <dir>]
-          [GENERATE_NATIVE_HEADERS <target> [DESTINATION <dir>]]
-          )
-
-This command creates a ``<target_name>.jar``.  It compiles the given
-``<source>`` files and adds the given ``<resource>`` files to
-the jar file.  Source files can be java files or listing files
-(prefixed by ``@``).  If only resource files are given then just a jar file
-is created.  The list of ``INCLUDE_JARS`` are added to the classpath when
-compiling the java sources and also to the dependencies of the target.
-``INCLUDE_JARS`` also accepts other target names created by ``add_jar()``.
-For backwards compatibility, jar files listed as sources are ignored (as
-they have been since the first version of this module).
-
-The default ``OUTPUT_DIR`` can also be changed by setting the variable
-``CMAKE_JAVA_TARGET_OUTPUT_DIR``.
-
-Optionally, using option ``GENERATE_NATIVE_HEADERS``, native header files can
-be generated for methods declared as native.  These files provide the
-connective glue that allow your Java and C code to interact.  An INTERFACE
-target will be created for an easy usage of generated files.  Sub-option
-``DESTINATION`` can be used to specify the output directory for generated
-header files.
-
-``GENERATE_NATIVE_HEADERS`` option requires, at least, version 1.8 of the JDK.
-
-The ``add_jar()`` function sets the following target properties on
-``<target_name>``:
-
-``INSTALL_FILES``
-  The files which should be installed.  This is used by ``install_jar()``.
-``JNI_SYMLINK``
-  The JNI symlink which should be installed.  This is used by
-  ``install_jni_symlink()``.
-``JAR_FILE``
-  The location of the jar file so that you can include it.
-``CLASSDIR``
-  The directory where the class files can be found.  For example to use them
-  with ``javah``.
-
-.. code-block:: cmake
-
- install_jar(<target_name> <destination>)
- install_jar(<target_name> DESTINATION <destination> [COMPONENT <component>])
-
-This command installs the ``<target_name>`` files to the given
-``<destination>``.  It should be called in the same scope as ``add_jar()`` or
-it will fail.
-
-The ``install_jar()`` function sets the ``INSTALL_DESTINATION`` target
-property on jars so installed.  This property holds the ``<destination>`` as
-described above, and is used by ``install_jar_exports()``.  You can get this
-information with :command:`get_property` and the ``INSTALL_DESTINATION``
-property key.
-
-.. code-block:: cmake
-
- install_jni_symlink(<target_name> <destination>)
- install_jni_symlink(<target_name> DESTINATION <destination> [COMPONENT <component>])
-
-This command installs the ``<target_name>`` JNI symlinks to the given
-``<destination>``.  It should be called in the same scope as ``add_jar()`` or
-it will fail.
-
-.. code-block:: cmake
-
- install_jar_exports(TARGETS <jars>...
-                     [NAMESPACE <namespace>]
-                     FILE <filename>
-                     DESTINATION <destination> [COMPONENT <component>])
-
-This command installs a target export file ``<filename>`` for the named jar
-targets to the given ``<destination>`` directory.  Its function is similar to
-that of :command:`install(EXPORTS)`.
-
-.. code-block:: cmake
-
- export_jars(TARGETS <jars>...
-             [NAMESPACE <namespace>]
-             FILE <filename>)
-
-This command writes a target export file ``<filename>`` for the named ``<jars>``
-targets.  Its function is similar to that of :command:`export`.
-
-
-Examples
-""""""""
-
-To add compile flags to the target you can set these flags with the following
-variable:
-
-.. code-block:: cmake
-
-  set(CMAKE_JAVA_COMPILE_FLAGS -nowarn)
-
-
-To add a path or a jar file to the class path you can do this with the
-``CMAKE_JAVA_INCLUDE_PATH`` variable.
-
-.. code-block:: cmake
-
-  set(CMAKE_JAVA_INCLUDE_PATH /usr/share/java/shibboleet.jar)
-
-To use a different output name for the target you can set it with:
-
-.. code-block:: cmake
-
-  add_jar(foobar foobar.java OUTPUT_NAME shibboleet.jar)
-
-To use a different output directory than ``CMAKE_CURRENT_BINARY_DIR`` you can
-set it with:
-
-.. code-block:: cmake
-
-  add_jar(foobar foobar.java OUTPUT_DIR ${PROJECT_BINARY_DIR}/bin)
-
-To define an entry point in your jar you can set it with the ``ENTRY_POINT``
-named argument:
-
-.. code-block:: cmake
-
-  add_jar(example ENTRY_POINT com/examples/MyProject/Main)
-
-To define a custom manifest for the jar, you can set it with the ``MANIFEST``
-named argument:
-
-.. code-block:: cmake
-
-  add_jar(example MANIFEST /path/to/manifest)
-
-To add a version to the target output name you can set it using the ``VERSION``
-named argument to ``add_jar()``.  The following example will create a jar file
-with the name ``shibboleet-1.0.0.jar`` and will create a symlink
-``shibboleet.jar`` pointing to the jar with the version information.
-
-.. code-block:: cmake
-
-  add_jar(shibboleet shibbotleet.java VERSION 1.2.0)
-
-If the target is a JNI library, utilize the following commands to
-create a JNI symbolic link:
-
-.. code-block:: cmake
-
-  set(CMAKE_JNI_TARGET TRUE)
-  add_jar(shibboleet shibbotleet.java VERSION 1.2.0)
-  install_jar(shibboleet ${LIB_INSTALL_DIR}/shibboleet)
-  install_jni_symlink(shibboleet ${JAVA_LIB_INSTALL_DIR})
-
-If a single target needs to produce more than one jar from its
-java source code, to prevent the accumulation of duplicate class
-files in subsequent jars, set/reset ``CMAKE_JAR_CLASSES_PREFIX`` prior
-to calling the ``add_jar()`` function:
-
-.. code-block:: cmake
-
-  set(CMAKE_JAR_CLASSES_PREFIX com/redhat/foo)
-  add_jar(foo foo.java)
-
-  set(CMAKE_JAR_CLASSES_PREFIX com/redhat/bar)
-  add_jar(bar bar.java)
-
-For an optimum usage of option ``GENERATE_NATIVE_HEADERS``, it is recommended to
-include module JNI before any call to ``add_jar()``. The produced target for
-native headers can then be used to compile C/C++ sources with the
-:command:`target_link_libraries` command.
-
-.. code-block:: cmake
-
-  find_package(JNI)
-  add_jar(foo foo.java GENERATE_NATIVE_HEADERS foo-native)
-  add_library(bar bar.cpp)
-  target_link_libraries(bar PRIVATE foo-native)
-
-
-Finding JARs
-^^^^^^^^^^^^
-
-.. code-block:: cmake
-
-  find_jar(<VAR>
-           <name> | NAMES <name1> [<name2>...]
-           [PATHS <path1> [<path2>... ENV <var>]]
-           [VERSIONS <version1> [<version2>]]
-           [DOC "cache documentation string"]
-          )
-
-This command is used to find a full path to the named jar.  A cache
-entry named by ``<VAR>`` is created to store the result of this command.
-If the full path to a jar is found the result is stored in the
-variable and the search will not repeated unless the variable is
-cleared.  If nothing is found, the result will be ``<VAR>-NOTFOUND``, and
-the search will be attempted again next time ``find_jar()`` is invoked with
-the same variable.  The name of the full path to a file that is
-searched for is specified by the names listed after ``NAMES`` argument.
-Additional search locations can be specified after the ``PATHS`` argument.
-If you require special a version of a jar file you can specify it with
-the ``VERSIONS`` argument.  The argument after ``DOC`` will be used for the
-documentation string in the cache.
-
-
-Javadoc
-^^^^^^^
-
-The ``create_javadoc()`` command can be used to create java documentation
-based on files or packages.  For more details please read the javadoc manpage.
-
-There are two main signatures for ``create_javadoc()``.  The first signature
-works with package names on a path with source files.
-
-.. code-block:: cmake
-
- create_javadoc(<VAR>
-                PACKAGES <pkg1> [<pkg2>...]
-                [SOURCEPATH <sourcepath>]
-                [CLASSPATH <classpath>]
-                [INSTALLPATH <install path>]
-                [DOCTITLE "the documentation title"]
-                [WINDOWTITLE "the title of the document"]
-                [AUTHOR TRUE|FALSE]
-                [USE TRUE|FALSE]
-                [VERSION TRUE|FALSE]
-                )
-
-For example:
-
-.. code-block:: cmake
-
-  create_javadoc(my_example_doc
-    PACKAGES com.example.foo com.example.bar
-    SOURCEPATH "${CMAKE_CURRENT_SOURCE_DIR}"
-    CLASSPATH ${CMAKE_JAVA_INCLUDE_PATH}
-    WINDOWTITLE "My example"
-    DOCTITLE "<h1>My example</h1>"
-    AUTHOR TRUE
-    USE TRUE
-    VERSION TRUE
-  )
-
-The second signature for ``create_javadoc()`` works on a given list of
-files.
-
-.. code-block:: cmake
-
-  create_javadoc(<VAR>
-                 FILES <file1> [<file2>...]
-                 [CLASSPATH <classpath>]
-                 [INSTALLPATH <install path>]
-                 [DOCTITLE "the documentation title"]
-                 [WINDOWTITLE "the title of the document"]
-                 [AUTHOR TRUE|FALSE]
-                 [USE TRUE|FALSE]
-                 [VERSION TRUE|FALSE]
-                )
-
-For example:
-
-.. code-block:: cmake
-
-  create_javadoc(my_example_doc
-    FILES ${example_SRCS}
-    CLASSPATH ${CMAKE_JAVA_INCLUDE_PATH}
-    WINDOWTITLE "My example"
-    DOCTITLE "<h1>My example</h1>"
-    AUTHOR TRUE
-    USE TRUE
-    VERSION TRUE
-  )
-
-Both signatures share most of the options.  These options are the same
-as what you can find in the javadoc manpage.  Please look at the
-manpage for ``CLASSPATH``, ``DOCTITLE``, ``WINDOWTITLE``, ``AUTHOR``, ``USE``
-and ``VERSION``.
-
-If you don't set the ``INSTALLPATH``, then by default the documentation will
-be installed to :
-
-::
-
-   ${CMAKE_INSTALL_PREFIX}/share/javadoc/<VAR>
-
-
-Header Generation
-^^^^^^^^^^^^^^^^^
-
-.. code-block:: cmake
-
- create_javah(TARGET <target> | GENERATED_FILES <VAR>
-              CLASSES <class>...
-              [CLASSPATH <classpath>...]
-              [DEPENDS <depend>...]
-              [OUTPUT_NAME <path>|OUTPUT_DIR <path>]
-              )
-
-Create C header files from java classes. These files provide the connective glue
-that allow your Java and C code to interact.
-
-.. deprecated:: 3.11
-
-.. note::
-
-  This command will no longer be supported starting with version 10 of the JDK
-  due to the `suppression of javah tool <http://openjdk.java.net/jeps/313>`_.
-  The ``add_jar(GENERATE_NATIVE_HEADERS)`` command should be used instead.
-
-There are two main signatures for ``create_javah()``.  The first signature
-returns generated files through variable specified by the ``GENERATED_FILES``
-option.  For example:
-
-.. code-block:: cmake
-
-  create_javah(GENERATED_FILES files_headers
-    CLASSES org.cmake.HelloWorld
-    CLASSPATH hello.jar
-  )
-
-The second signature for ``create_javah()`` creates a target which encapsulates
-header files generation. E.g.
-
-.. code-block:: cmake
-
-  create_javah(TARGET target_headers
-    CLASSES org.cmake.HelloWorld
-    CLASSPATH hello.jar
-  )
-
-Both signatures share same options.
-
-``CLASSES <class>...``
-  Specifies Java classes used to generate headers.
-
-``CLASSPATH <classpath>...``
-  Specifies various paths to look up classes. Here .class files, jar files or
-  targets created by command add_jar can be used.
-
-``DEPENDS <depend>...``
-  Targets on which the javah target depends.
-
-``OUTPUT_NAME <path>``
-  Concatenates the resulting header files for all the classes listed by option
-  ``CLASSES`` into ``<path>``.  Same behavior as option ``-o`` of javah tool.
-
-``OUTPUT_DIR <path>``
-  Sets the directory where the header files will be generated.  Same behavior
-  as option ``-d`` of javah tool.  If not specified,
-  :variable:`CMAKE_CURRENT_BINARY_DIR` is used as the output directory.
-#]=======================================================================]
-
-function (__java_copy_file src dest comment)
-    add_custom_command(
-        OUTPUT  ${dest}
-        COMMAND ${CMAKE_COMMAND} -E copy_if_different
-        ARGS    ${src}
-                ${dest}
-        DEPENDS ${src}
-        COMMENT ${comment}
-        VERBATIM
-        )
-endfunction ()
-
-function(__java_lcat VAR)
-    foreach(_line IN LISTS ARGN)
-        string(APPEND ${VAR} "${_line}\n")
-    endforeach()
-
-    set(${VAR} "${${VAR}}" PARENT_SCOPE)
-endfunction()
-
-function(__java_export_jar VAR TARGET PATH)
-    get_target_property(_jarpath ${TARGET} JAR_FILE)
-    get_filename_component(_jarname ${_jarpath} NAME)
-    set(_target "${_jar_NAMESPACE}${TARGET}")
-    __java_lcat(${VAR}
-      "# Create imported target ${_target}"
-      "add_library(${_target} IMPORTED STATIC)"
-      "set_target_properties(${_target} PROPERTIES"
-      "  IMPORTED_LOCATION \"${PATH}/${_jarname}\""
-      "  JAR_FILE \"${PATH}/${_jarname}\")"
-      ""
-    )
-    set(${VAR} "${${VAR}}" PARENT_SCOPE)
-endfunction()
-
-# define helper scripts
-set(_JAVA_EXPORT_TARGETS_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/javaTargets.cmake.in)
-set(_JAVA_SYMLINK_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/UseJavaSymlinks.cmake)
-
-if (CMAKE_HOST_WIN32 AND NOT CYGWIN AND CMAKE_HOST_SYSTEM_NAME MATCHES "Windows")
-    set(_UseJava_PATH_SEP "$<SEMICOLON>")
-else ()
-    set(_UseJava_PATH_SEP ":")
-endif()
-
-function(add_jar _TARGET_NAME)
-
-    cmake_parse_arguments(_add_jar
-      ""
-      "VERSION;OUTPUT_DIR;OUTPUT_NAME;ENTRY_POINT;MANIFEST"
-      "SOURCES;INCLUDE_JARS;GENERATE_NATIVE_HEADERS"
-      ${ARGN}
-    )
-
-    # In CMake < 2.8.12, add_jar used variables which were set prior to calling
-    # add_jar for customizing the behavior of add_jar. In order to be backwards
-    # compatible, check if any of those variables are set, and use them to
-    # initialize values of the named arguments. (Giving the corresponding named
-    # argument will override the value set here.)
-    #
-    # New features should use named arguments only.
-    if(NOT DEFINED _add_jar_VERSION AND DEFINED CMAKE_JAVA_TARGET_VERSION)
-        set(_add_jar_VERSION "${CMAKE_JAVA_TARGET_VERSION}")
-    endif()
-    if(NOT DEFINED _add_jar_OUTPUT_DIR AND DEFINED CMAKE_JAVA_TARGET_OUTPUT_DIR)
-        set(_add_jar_OUTPUT_DIR "${CMAKE_JAVA_TARGET_OUTPUT_DIR}")
-    endif()
-    if(NOT DEFINED _add_jar_OUTPUT_NAME AND DEFINED CMAKE_JAVA_TARGET_OUTPUT_NAME)
-        set(_add_jar_OUTPUT_NAME "${CMAKE_JAVA_TARGET_OUTPUT_NAME}")
-        # reset
-        set(CMAKE_JAVA_TARGET_OUTPUT_NAME)
-    endif()
-    if(NOT DEFINED _add_jar_ENTRY_POINT AND DEFINED CMAKE_JAVA_JAR_ENTRY_POINT)
-        set(_add_jar_ENTRY_POINT "${CMAKE_JAVA_JAR_ENTRY_POINT}")
-    endif()
-
-    set(_JAVA_SOURCE_FILES ${_add_jar_SOURCES} ${_add_jar_UNPARSED_ARGUMENTS})
-
-    if (NOT DEFINED _add_jar_OUTPUT_DIR)
-        set(_add_jar_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
-    else()
-        get_filename_component(_add_jar_OUTPUT_DIR ${_add_jar_OUTPUT_DIR} ABSOLUTE)
-    endif()
-    # ensure output directory exists
-    file (MAKE_DIRECTORY "${_add_jar_OUTPUT_DIR}")
-
-    if (_add_jar_ENTRY_POINT)
-        set(_ENTRY_POINT_OPTION e)
-        set(_ENTRY_POINT_VALUE ${_add_jar_ENTRY_POINT})
-    endif ()
-
-    if (_add_jar_MANIFEST)
-        set(_MANIFEST_OPTION m)
-        get_filename_component (_MANIFEST_VALUE "${_add_jar_MANIFEST}" ABSOLUTE)
-    endif ()
-
-    unset (_GENERATE_NATIVE_HEADERS)
-    if (_add_jar_GENERATE_NATIVE_HEADERS)
-      # Raise an error if JDK version is less than 1.8 because javac -h is not supported
-      # by earlier versions.
-      if (Java_VERSION VERSION_LESS 1.8)
-        message (FATAL_ERROR "ADD_JAR: GENERATE_NATIVE_HEADERS is not supported with this version of Java.")
-      endif()
-      cmake_parse_arguments (_add_jar_GENERATE_NATIVE_HEADERS "" "DESTINATION" "" ${_add_jar_GENERATE_NATIVE_HEADERS})
-      if (NOT _add_jar_GENERATE_NATIVE_HEADERS_UNPARSED_ARGUMENTS)
-        message (FATAL_ERROR "ADD_JAR: GENERATE_NATIVE_HEADERS: missing required argument.")
-      endif()
-      list (LENGTH _add_jar_GENERATE_NATIVE_HEADERS_UNPARSED_ARGUMENTS length)
-      if (length GREATER 1)
-        list (REMOVE_AT _add_jar_GENERATE_NATIVE_HEADERS_UNPARSED_ARGUMENTS 0)
-        message (FATAL_ERROR "ADD_JAR: GENERATE_NATIVE_HEADERS: ${_add_jar_GENERATE_NATIVE_HEADERS_UNPARSED_ARGUMENTS}: unexpected argument(s).")
-      endif()
-      if (NOT _add_jar_GENERATE_NATIVE_HEADERS_DESTINATION)
-        set (_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${_TARGET_NAME}.dir/native_headers")
-      endif()
-
-      set (_GENERATE_NATIVE_HEADERS_TARGET ${_add_jar_GENERATE_NATIVE_HEADERS_UNPARSED_ARGUMENTS})
-      set (_GENERATE_NATIVE_HEADERS_OUTPUT_DIR "${_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION}")
-      set (_GENERATE_NATIVE_HEADERS -h "${_GENERATE_NATIVE_HEADERS_OUTPUT_DIR}")
-    endif()
-
-    if (LIBRARY_OUTPUT_PATH)
-        set(CMAKE_JAVA_LIBRARY_OUTPUT_PATH ${LIBRARY_OUTPUT_PATH})
-    else ()
-        set(CMAKE_JAVA_LIBRARY_OUTPUT_PATH ${_add_jar_OUTPUT_DIR})
-    endif ()
-
-    set(CMAKE_JAVA_INCLUDE_PATH
-        ${CMAKE_JAVA_INCLUDE_PATH}
-        ${CMAKE_CURRENT_SOURCE_DIR}
-        ${CMAKE_JAVA_OBJECT_OUTPUT_PATH}
-        ${CMAKE_JAVA_LIBRARY_OUTPUT_PATH}
-    )
-
-    foreach (JAVA_INCLUDE_DIR IN LISTS CMAKE_JAVA_INCLUDE_PATH)
-       string(APPEND CMAKE_JAVA_INCLUDE_PATH_FINAL "${_UseJava_PATH_SEP}${JAVA_INCLUDE_DIR}")
-    endforeach()
-
-    set(CMAKE_JAVA_CLASS_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${_TARGET_NAME}.dir")
-
-    set(_JAVA_TARGET_OUTPUT_NAME "${_TARGET_NAME}.jar")
-    if (_add_jar_OUTPUT_NAME AND _add_jar_VERSION)
-        set(_JAVA_TARGET_OUTPUT_NAME "${_add_jar_OUTPUT_NAME}-${_add_jar_VERSION}.jar")
-        set(_JAVA_TARGET_OUTPUT_LINK "${_add_jar_OUTPUT_NAME}.jar")
-    elseif (_add_jar_VERSION)
-        set(_JAVA_TARGET_OUTPUT_NAME "${_TARGET_NAME}-${_add_jar_VERSION}.jar")
-        set(_JAVA_TARGET_OUTPUT_LINK "${_TARGET_NAME}.jar")
-    elseif (_add_jar_OUTPUT_NAME)
-        set(_JAVA_TARGET_OUTPUT_NAME "${_add_jar_OUTPUT_NAME}.jar")
-    endif ()
-
-    set(_JAVA_CLASS_FILES)
-    set(_JAVA_COMPILE_FILES)
-    set(_JAVA_COMPILE_FILELISTS)
-    set(_JAVA_DEPENDS)
-    set(_JAVA_COMPILE_DEPENDS)
-    set(_JAVA_RESOURCE_FILES)
-    set(_JAVA_RESOURCE_FILES_RELATIVE)
-    foreach(_JAVA_SOURCE_FILE IN LISTS _JAVA_SOURCE_FILES)
-        get_filename_component(_JAVA_EXT ${_JAVA_SOURCE_FILE} EXT)
-        get_filename_component(_JAVA_FILE ${_JAVA_SOURCE_FILE} NAME_WE)
-        get_filename_component(_JAVA_PATH ${_JAVA_SOURCE_FILE} PATH)
-        get_filename_component(_JAVA_FULL ${_JAVA_SOURCE_FILE} ABSOLUTE)
-
-        if (_JAVA_SOURCE_FILE MATCHES "^@(.+)$")
-            get_filename_component(_JAVA_FULL ${CMAKE_MATCH_1} ABSOLUTE)
-            list(APPEND _JAVA_COMPILE_FILELISTS ${_JAVA_FULL})
-
-        elseif (_JAVA_EXT MATCHES ".java")
-            file(RELATIVE_PATH _JAVA_REL_BINARY_PATH ${CMAKE_CURRENT_BINARY_DIR} ${_JAVA_FULL})
-            file(RELATIVE_PATH _JAVA_REL_SOURCE_PATH ${CMAKE_CURRENT_SOURCE_DIR} ${_JAVA_FULL})
-            string(LENGTH ${_JAVA_REL_BINARY_PATH} _BIN_LEN)
-            string(LENGTH ${_JAVA_REL_SOURCE_PATH} _SRC_LEN)
-            if (_BIN_LEN LESS _SRC_LEN)
-                set(_JAVA_REL_PATH ${_JAVA_REL_BINARY_PATH})
-            else ()
-                set(_JAVA_REL_PATH ${_JAVA_REL_SOURCE_PATH})
-            endif ()
-            get_filename_component(_JAVA_REL_PATH ${_JAVA_REL_PATH} PATH)
-
-            list(APPEND _JAVA_COMPILE_FILES ${_JAVA_SOURCE_FILE})
-            set(_JAVA_CLASS_FILE "${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${_JAVA_REL_PATH}/${_JAVA_FILE}.class")
-            set(_JAVA_CLASS_FILES ${_JAVA_CLASS_FILES} ${_JAVA_CLASS_FILE})
-
-        elseif (_JAVA_EXT MATCHES ".jar"
-                OR _JAVA_EXT MATCHES ".war"
-                OR _JAVA_EXT MATCHES ".ear"
-                OR _JAVA_EXT MATCHES ".sar")
-            # Ignored for backward compatibility
-
-        elseif (_JAVA_EXT STREQUAL "")
-            list(APPEND CMAKE_JAVA_INCLUDE_PATH ${JAVA_JAR_TARGET_${_JAVA_SOURCE_FILE}} ${JAVA_JAR_TARGET_${_JAVA_SOURCE_FILE}_CLASSPATH})
-            list(APPEND _JAVA_DEPENDS ${JAVA_JAR_TARGET_${_JAVA_SOURCE_FILE}})
-
-        else ()
-            __java_copy_file(${CMAKE_CURRENT_SOURCE_DIR}/${_JAVA_SOURCE_FILE}
-                             ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${_JAVA_SOURCE_FILE}
-                             "Copying ${_JAVA_SOURCE_FILE} to the build directory")
-            list(APPEND _JAVA_RESOURCE_FILES ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${_JAVA_SOURCE_FILE})
-            list(APPEND _JAVA_RESOURCE_FILES_RELATIVE ${_JAVA_SOURCE_FILE})
-        endif ()
-    endforeach()
-
-    foreach(_JAVA_INCLUDE_JAR IN LISTS _add_jar_INCLUDE_JARS)
-        if (TARGET ${_JAVA_INCLUDE_JAR})
-            get_target_property(_JAVA_JAR_PATH ${_JAVA_INCLUDE_JAR} JAR_FILE)
-            if (_JAVA_JAR_PATH)
-                string(APPEND CMAKE_JAVA_INCLUDE_PATH_FINAL "${_UseJava_PATH_SEP}${_JAVA_JAR_PATH}")
-                list(APPEND CMAKE_JAVA_INCLUDE_PATH ${_JAVA_JAR_PATH})
-                list(APPEND _JAVA_DEPENDS ${_JAVA_INCLUDE_JAR})
-                list(APPEND _JAVA_COMPILE_DEPENDS ${_JAVA_JAR_PATH})
-            else ()
-                message(SEND_ERROR "add_jar: INCLUDE_JARS target ${_JAVA_INCLUDE_JAR} is not a jar")
-            endif ()
-        else ()
-            string(APPEND CMAKE_JAVA_INCLUDE_PATH_FINAL "${_UseJava_PATH_SEP}${_JAVA_INCLUDE_JAR}")
-            list(APPEND CMAKE_JAVA_INCLUDE_PATH "${_JAVA_INCLUDE_JAR}")
-            list(APPEND _JAVA_DEPENDS "${_JAVA_INCLUDE_JAR}")
-            list(APPEND _JAVA_COMPILE_DEPENDS "${_JAVA_INCLUDE_JAR}")
-        endif ()
-    endforeach()
-
-    if (_JAVA_COMPILE_FILES OR _JAVA_COMPILE_FILELISTS)
-        set (_JAVA_SOURCES_FILELISTS)
-
-        if (_JAVA_COMPILE_FILES)
-            # Create the list of files to compile.
-            set(_JAVA_SOURCES_FILE ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_sources)
-            string(REPLACE ";" "\"\n\"" _JAVA_COMPILE_STRING "\"${_JAVA_COMPILE_FILES}\"")
-            set(CMAKE_CONFIGURABLE_FILE_CONTENT "${_JAVA_COMPILE_STRING}")
-            configure_file("${CMAKE_ROOT}/Modules/CMakeConfigurableFile.in"
-              "${_JAVA_SOURCES_FILE}" @ONLY)
-            unset(CMAKE_CONFIGURABLE_FILE_CONTENT)
-            list (APPEND _JAVA_SOURCES_FILELISTS "@${_JAVA_SOURCES_FILE}")
-        endif()
-        if (_JAVA_COMPILE_FILELISTS)
-            foreach (_JAVA_FILELIST IN LISTS _JAVA_COMPILE_FILELISTS)
-                list (APPEND _JAVA_SOURCES_FILELISTS "@${_JAVA_FILELIST}")
-            endforeach()
-        endif()
-
-        # Compile the java files and create a list of class files
-        add_custom_command(
-            # NOTE: this command generates an artificial dependency file
-            OUTPUT ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME}
-            COMMAND ${CMAKE_COMMAND}
-                -DCMAKE_JAVA_CLASS_OUTPUT_PATH=${CMAKE_JAVA_CLASS_OUTPUT_PATH}
-                -DCMAKE_JAR_CLASSES_PREFIX=${CMAKE_JAR_CLASSES_PREFIX}
-                -P ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/UseJava/ClearClassFiles.cmake
-            COMMAND ${Java_JAVAC_EXECUTABLE}
-                ${CMAKE_JAVA_COMPILE_FLAGS}
-                -classpath "${CMAKE_JAVA_INCLUDE_PATH_FINAL}"
-                -d ${CMAKE_JAVA_CLASS_OUTPUT_PATH}
-                ${_GENERATE_NATIVE_HEADERS}
-                ${_JAVA_SOURCES_FILELISTS}
-            COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME}
-            DEPENDS ${_JAVA_COMPILE_FILES} ${_JAVA_COMPILE_FILELISTS} ${_JAVA_COMPILE_DEPENDS} ${_JAVA_SOURCES_FILE}
-            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-            COMMENT "Building Java objects for ${_TARGET_NAME}.jar"
-            VERBATIM
-        )
-        add_custom_command(
-            OUTPUT ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist
-            COMMAND ${CMAKE_COMMAND}
-                -DCMAKE_JAVA_CLASS_OUTPUT_PATH=${CMAKE_JAVA_CLASS_OUTPUT_PATH}
-                -DCMAKE_JAR_CLASSES_PREFIX=${CMAKE_JAR_CLASSES_PREFIX}
-                -P ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/UseJavaClassFilelist.cmake
-            DEPENDS ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME}
-            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-            VERBATIM
-        )
-    else ()
-        # create an empty java_class_filelist
-        if (NOT EXISTS ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist)
-            file(WRITE ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist "")
-        endif()
-    endif ()
-
-    # create the jar file
-    set(_JAVA_JAR_OUTPUT_PATH
-      "${_add_jar_OUTPUT_DIR}/${_JAVA_TARGET_OUTPUT_NAME}")
-    if (CMAKE_JNI_TARGET)
-        add_custom_command(
-            OUTPUT ${_JAVA_JAR_OUTPUT_PATH}
-            COMMAND ${Java_JAR_EXECUTABLE}
-                -cf${_ENTRY_POINT_OPTION}${_MANIFEST_OPTION} ${_JAVA_JAR_OUTPUT_PATH} ${_ENTRY_POINT_VALUE} ${_MANIFEST_VALUE}
-                ${_JAVA_RESOURCE_FILES_RELATIVE} @java_class_filelist
-            COMMAND ${CMAKE_COMMAND}
-                -D_JAVA_TARGET_DIR=${_add_jar_OUTPUT_DIR}
-                -D_JAVA_TARGET_OUTPUT_NAME=${_JAVA_TARGET_OUTPUT_NAME}
-                -D_JAVA_TARGET_OUTPUT_LINK=${_JAVA_TARGET_OUTPUT_LINK}
-                -P ${_JAVA_SYMLINK_SCRIPT}
-            COMMAND ${CMAKE_COMMAND}
-                -D_JAVA_TARGET_DIR=${_add_jar_OUTPUT_DIR}
-                -D_JAVA_TARGET_OUTPUT_NAME=${_JAVA_JAR_OUTPUT_PATH}
-                -D_JAVA_TARGET_OUTPUT_LINK=${_JAVA_TARGET_OUTPUT_LINK}
-                -P ${_JAVA_SYMLINK_SCRIPT}
-            DEPENDS ${_JAVA_RESOURCE_FILES} ${_JAVA_DEPENDS} ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist
-            WORKING_DIRECTORY ${CMAKE_JAVA_CLASS_OUTPUT_PATH}
-            COMMENT "Creating Java archive ${_JAVA_TARGET_OUTPUT_NAME}"
-            VERBATIM
-        )
-    else ()
-        add_custom_command(
-            OUTPUT ${_JAVA_JAR_OUTPUT_PATH}
-            COMMAND ${Java_JAR_EXECUTABLE}
-                -cf${_ENTRY_POINT_OPTION}${_MANIFEST_OPTION} ${_JAVA_JAR_OUTPUT_PATH} ${_ENTRY_POINT_VALUE} ${_MANIFEST_VALUE}
-                ${_JAVA_RESOURCE_FILES_RELATIVE} @java_class_filelist
-            COMMAND ${CMAKE_COMMAND}
-                -D_JAVA_TARGET_DIR=${_add_jar_OUTPUT_DIR}
-                -D_JAVA_TARGET_OUTPUT_NAME=${_JAVA_TARGET_OUTPUT_NAME}
-                -D_JAVA_TARGET_OUTPUT_LINK=${_JAVA_TARGET_OUTPUT_LINK}
-                -P ${_JAVA_SYMLINK_SCRIPT}
-            WORKING_DIRECTORY ${CMAKE_JAVA_CLASS_OUTPUT_PATH}
-            DEPENDS ${_JAVA_RESOURCE_FILES} ${_JAVA_DEPENDS} ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist
-            COMMENT "Creating Java archive ${_JAVA_TARGET_OUTPUT_NAME}"
-            VERBATIM
-        )
-    endif ()
-
-    # Add the target and make sure we have the latest resource files.
-    add_custom_target(${_TARGET_NAME} ALL DEPENDS ${_JAVA_JAR_OUTPUT_PATH})
-
-    set_property(
-        TARGET
-            ${_TARGET_NAME}
-        PROPERTY
-            INSTALL_FILES
-                ${_JAVA_JAR_OUTPUT_PATH}
-    )
-
-    if (_JAVA_TARGET_OUTPUT_LINK)
-        set_property(
-            TARGET
-                ${_TARGET_NAME}
-            PROPERTY
-                INSTALL_FILES
-                    ${_JAVA_JAR_OUTPUT_PATH}
-                    ${_add_jar_OUTPUT_DIR}/${_JAVA_TARGET_OUTPUT_LINK}
-        )
-
-        if (CMAKE_JNI_TARGET)
-            set_property(
-                TARGET
-                    ${_TARGET_NAME}
-                PROPERTY
-                    JNI_SYMLINK
-                        ${_add_jar_OUTPUT_DIR}/${_JAVA_TARGET_OUTPUT_LINK}
-            )
-        endif ()
-    endif ()
-
-    set_property(
-        TARGET
-            ${_TARGET_NAME}
-        PROPERTY
-            JAR_FILE
-                ${_JAVA_JAR_OUTPUT_PATH}
-    )
-
-    set_property(
-        TARGET
-            ${_TARGET_NAME}
-        PROPERTY
-            CLASSDIR
-                ${CMAKE_JAVA_CLASS_OUTPUT_PATH}
-    )
-
-  if (_GENERATE_NATIVE_HEADERS)
-    # create an INTERFACE library encapsulating include directory for generated headers
-    add_library (${_GENERATE_NATIVE_HEADERS_TARGET} INTERFACE)
-    target_include_directories (${_GENERATE_NATIVE_HEADERS_TARGET} INTERFACE
-      "${_GENERATE_NATIVE_HEADERS_OUTPUT_DIR}"
-      ${JNI_INCLUDE_DIRS})
-    # this INTERFACE library depends on jar generation
-    add_dependencies (${_GENERATE_NATIVE_HEADERS_TARGET} ${_TARGET_NAME})
-
-    set_property (DIRECTORY APPEND PROPERTY ADDITIONAL_CLEAN_FILES
-      "${_GENERATE_NATIVE_HEADERS_OUTPUT_DIR}")
-  endif()
-endfunction()
-
-function(INSTALL_JAR _TARGET_NAME)
-    if (ARGC EQUAL 2)
-      set (_DESTINATION ${ARGV1})
-    else()
-      cmake_parse_arguments(_install_jar
-        ""
-        "DESTINATION;COMPONENT"
-        ""
-        ${ARGN})
-      if (_install_jar_DESTINATION)
-        set (_DESTINATION ${_install_jar_DESTINATION})
-      else()
-        message(SEND_ERROR "install_jar: ${_TARGET_NAME}: DESTINATION must be specified.")
-      endif()
-
-      if (_install_jar_COMPONENT)
-        set (_COMPONENT COMPONENT ${_install_jar_COMPONENT})
-      endif()
-    endif()
-
-    get_property(__FILES
-        TARGET
-            ${_TARGET_NAME}
-        PROPERTY
-            INSTALL_FILES
-    )
-    set_property(
-        TARGET
-            ${_TARGET_NAME}
-        PROPERTY
-            INSTALL_DESTINATION
-            ${_DESTINATION}
-    )
-
-    if (__FILES)
-        install(
-            FILES
-                ${__FILES}
-            DESTINATION
-                ${_DESTINATION}
-            ${_COMPONENT}
-        )
-    else ()
-        message(SEND_ERROR "install_jar: The target ${_TARGET_NAME} is not known in this scope.")
-    endif ()
-endfunction()
-
-function(INSTALL_JNI_SYMLINK _TARGET_NAME)
-    if (ARGC EQUAL 2)
-      set (_DESTINATION ${ARGV1})
-    else()
-      cmake_parse_arguments(_install_jni_symlink
-        ""
-        "DESTINATION;COMPONENT"
-        ""
-        ${ARGN})
-      if (_install_jni_symlink_DESTINATION)
-        set (_DESTINATION ${_install_jni_symlink_DESTINATION})
-      else()
-        message(SEND_ERROR "install_jni_symlink: ${_TARGET_NAME}: DESTINATION must be specified.")
-      endif()
-
-      if (_install_jni_symlink_COMPONENT)
-        set (_COMPONENT COMPONENT ${_install_jni_symlink_COMPONENT})
-      endif()
-    endif()
-
-    get_property(__SYMLINK
-        TARGET
-            ${_TARGET_NAME}
-        PROPERTY
-            JNI_SYMLINK
-    )
-
-    if (__SYMLINK)
-        install(
-            FILES
-                ${__SYMLINK}
-            DESTINATION
-                ${_DESTINATION}
-            ${_COMPONENT}
-        )
-    else ()
-        message(SEND_ERROR "install_jni_symlink: The target ${_TARGET_NAME} is not known in this scope.")
-    endif ()
-endfunction()
-
-function (find_jar VARIABLE)
-    set(_jar_names)
-    set(_jar_files)
-    set(_jar_versions)
-    set(_jar_paths
-        /usr/share/java/
-        /usr/local/share/java/
-        ${Java_JAR_PATHS})
-    set(_jar_doc "NOTSET")
-
-    set(_state "name")
-
-    foreach (arg IN LISTS ARGN)
-        if (_state STREQUAL "name")
-            if (arg STREQUAL "VERSIONS")
-                set(_state "versions")
-            elseif (arg STREQUAL "NAMES")
-                set(_state "names")
-            elseif (arg STREQUAL "PATHS")
-                set(_state "paths")
-            elseif (arg STREQUAL "DOC")
-                set(_state "doc")
-            else ()
-                set(_jar_names ${arg})
-                if (_jar_doc STREQUAL "NOTSET")
-                    set(_jar_doc "Finding ${arg} jar")
-                endif ()
-            endif ()
-        elseif (_state STREQUAL "versions")
-            if (arg STREQUAL "NAMES")
-                set(_state "names")
-            elseif (arg STREQUAL "PATHS")
-                set(_state "paths")
-            elseif (arg STREQUAL "DOC")
-                set(_state "doc")
-            else ()
-                set(_jar_versions ${_jar_versions} ${arg})
-            endif ()
-        elseif (_state STREQUAL "names")
-            if (arg STREQUAL "VERSIONS")
-                set(_state "versions")
-            elseif (arg STREQUAL "PATHS")
-                set(_state "paths")
-            elseif (arg STREQUAL "DOC")
-                set(_state "doc")
-            else ()
-                set(_jar_names ${_jar_names} ${arg})
-                if (_jar_doc STREQUAL "NOTSET")
-                    set(_jar_doc "Finding ${arg} jar")
-                endif ()
-            endif ()
-        elseif (_state STREQUAL "paths")
-            if (arg STREQUAL "VERSIONS")
-                set(_state "versions")
-            elseif (arg STREQUAL "NAMES")
-                set(_state "names")
-            elseif (arg STREQUAL "DOC")
-                set(_state "doc")
-            else ()
-                set(_jar_paths ${_jar_paths} ${arg})
-            endif ()
-        elseif (_state STREQUAL "doc")
-            if (arg STREQUAL "VERSIONS")
-                set(_state "versions")
-            elseif (arg STREQUAL "NAMES")
-                set(_state "names")
-            elseif (arg STREQUAL "PATHS")
-                set(_state "paths")
-            else ()
-                set(_jar_doc ${arg})
-            endif ()
-        endif ()
-    endforeach ()
-
-    if (NOT _jar_names)
-        message(FATAL_ERROR "find_jar: No name to search for given")
-    endif ()
-
-    foreach (jar_name IN LISTS _jar_names)
-        foreach (version IN LISTS _jar_versions)
-            set(_jar_files ${_jar_files} ${jar_name}-${version}.jar)
-        endforeach ()
-        set(_jar_files ${_jar_files} ${jar_name}.jar)
-    endforeach ()
-
-    find_file(${VARIABLE}
-        NAMES   ${_jar_files}
-        PATHS   ${_jar_paths}
-        DOC     ${_jar_doc}
-        NO_DEFAULT_PATH)
-endfunction ()
-
-function(create_javadoc _target)
-    set(_javadoc_packages)
-    set(_javadoc_files)
-    set(_javadoc_sourcepath)
-    set(_javadoc_classpath)
-    set(_javadoc_installpath "${CMAKE_INSTALL_PREFIX}/share/javadoc")
-    set(_javadoc_doctitle)
-    set(_javadoc_windowtitle)
-    set(_javadoc_author FALSE)
-    set(_javadoc_version FALSE)
-    set(_javadoc_use FALSE)
-
-    set(_state "package")
-
-    foreach (arg IN LISTS ARGN)
-        if (_state STREQUAL "package")
-            if (arg STREQUAL "PACKAGES")
-                set(_state "packages")
-            elseif (arg STREQUAL "FILES")
-                set(_state "files")
-            elseif (arg STREQUAL "SOURCEPATH")
-                set(_state "sourcepath")
-            elseif (arg STREQUAL "CLASSPATH")
-                set(_state "classpath")
-            elseif (arg STREQUAL "INSTALLPATH")
-                set(_state "installpath")
-            elseif (arg STREQUAL "DOCTITLE")
-                set(_state "doctitle")
-            elseif (arg STREQUAL "WINDOWTITLE")
-                set(_state "windowtitle")
-            elseif (arg STREQUAL "AUTHOR")
-                set(_state "author")
-            elseif (arg STREQUAL "USE")
-                set(_state "use")
-            elseif (arg STREQUAL "VERSION")
-                set(_state "version")
-            else ()
-                set(_javadoc_packages ${arg})
-                set(_state "packages")
-            endif ()
-        elseif (_state STREQUAL "packages")
-            if (arg STREQUAL "FILES")
-                set(_state "files")
-            elseif (arg STREQUAL "SOURCEPATH")
-                set(_state "sourcepath")
-            elseif (arg STREQUAL "CLASSPATH")
-                set(_state "classpath")
-            elseif (arg STREQUAL "INSTALLPATH")
-                set(_state "installpath")
-            elseif (arg STREQUAL "DOCTITLE")
-                set(_state "doctitle")
-            elseif (arg STREQUAL "WINDOWTITLE")
-                set(_state "windowtitle")
-            elseif (arg STREQUAL "AUTHOR")
-                set(_state "author")
-            elseif (arg STREQUAL "USE")
-                set(_state "use")
-            elseif (arg STREQUAL "VERSION")
-                set(_state "version")
-            else ()
-                list(APPEND _javadoc_packages ${arg})
-            endif ()
-        elseif (_state STREQUAL "files")
-            if (arg STREQUAL "PACKAGES")
-                set(_state "packages")
-            elseif (arg STREQUAL "SOURCEPATH")
-                set(_state "sourcepath")
-            elseif (arg STREQUAL "CLASSPATH")
-                set(_state "classpath")
-            elseif (arg STREQUAL "INSTALLPATH")
-                set(_state "installpath")
-            elseif (arg STREQUAL "DOCTITLE")
-                set(_state "doctitle")
-            elseif (arg STREQUAL "WINDOWTITLE")
-                set(_state "windowtitle")
-            elseif (arg STREQUAL "AUTHOR")
-                set(_state "author")
-            elseif (arg STREQUAL "USE")
-                set(_state "use")
-            elseif (arg STREQUAL "VERSION")
-                set(_state "version")
-            else ()
-                list(APPEND _javadoc_files ${arg})
-            endif ()
-        elseif (_state STREQUAL "sourcepath")
-            if (arg STREQUAL "PACKAGES")
-                set(_state "packages")
-            elseif (arg STREQUAL "FILES")
-                set(_state "files")
-            elseif (arg STREQUAL "CLASSPATH")
-                set(_state "classpath")
-            elseif (arg STREQUAL "INSTALLPATH")
-                set(_state "installpath")
-            elseif (arg STREQUAL "DOCTITLE")
-                set(_state "doctitle")
-            elseif (arg STREQUAL "WINDOWTITLE")
-                set(_state "windowtitle")
-            elseif (arg STREQUAL "AUTHOR")
-                set(_state "author")
-            elseif (arg STREQUAL "USE")
-                set(_state "use")
-            elseif (arg STREQUAL "VERSION")
-                set(_state "version")
-            else ()
-                list(APPEND _javadoc_sourcepath ${arg})
-            endif ()
-        elseif (_state STREQUAL "classpath")
-            if (arg STREQUAL "PACKAGES")
-                set(_state "packages")
-            elseif (arg STREQUAL "FILES")
-                set(_state "files")
-            elseif (arg STREQUAL "SOURCEPATH")
-                set(_state "sourcepath")
-            elseif (arg STREQUAL "INSTALLPATH")
-                set(_state "installpath")
-            elseif (arg STREQUAL "DOCTITLE")
-                set(_state "doctitle")
-            elseif (arg STREQUAL "WINDOWTITLE")
-                set(_state "windowtitle")
-            elseif (arg STREQUAL "AUTHOR")
-                set(_state "author")
-            elseif (arg STREQUAL "USE")
-                set(_state "use")
-            elseif (arg STREQUAL "VERSION")
-                set(_state "version")
-            else ()
-                list(APPEND _javadoc_classpath ${arg})
-            endif ()
-        elseif (_state STREQUAL "installpath")
-            if (arg STREQUAL "PACKAGES")
-                set(_state "packages")
-            elseif (arg STREQUAL "FILES")
-                set(_state "files")
-            elseif (arg STREQUAL "SOURCEPATH")
-                set(_state "sourcepath")
-            elseif (arg STREQUAL "DOCTITLE")
-                set(_state "doctitle")
-            elseif (arg STREQUAL "WINDOWTITLE")
-                set(_state "windowtitle")
-            elseif (arg STREQUAL "AUTHOR")
-                set(_state "author")
-            elseif (arg STREQUAL "USE")
-                set(_state "use")
-            elseif (arg STREQUAL "VERSION")
-                set(_state "version")
-            else ()
-                set(_javadoc_installpath ${arg})
-            endif ()
-        elseif (_state STREQUAL "doctitle")
-            if (${arg} STREQUAL "PACKAGES")
-                set(_state "packages")
-            elseif (arg STREQUAL "FILES")
-                set(_state "files")
-            elseif (arg STREQUAL "SOURCEPATH")
-                set(_state "sourcepath")
-            elseif (arg STREQUAL "INSTALLPATH")
-                set(_state "installpath")
-            elseif (arg STREQUAL "CLASSPATH")
-                set(_state "classpath")
-            elseif (arg STREQUAL "WINDOWTITLE")
-                set(_state "windowtitle")
-            elseif (arg STREQUAL "AUTHOR")
-                set(_state "author")
-            elseif (arg STREQUAL "USE")
-                set(_state "use")
-            elseif (arg STREQUAL "VERSION")
-                set(_state "version")
-            else ()
-                set(_javadoc_doctitle ${arg})
-            endif ()
-        elseif (_state STREQUAL "windowtitle")
-            if (${arg} STREQUAL "PACKAGES")
-                set(_state "packages")
-            elseif (arg STREQUAL "FILES")
-                set(_state "files")
-            elseif (arg STREQUAL "SOURCEPATH")
-                set(_state "sourcepath")
-            elseif (arg STREQUAL "CLASSPATH")
-                set(_state "classpath")
-            elseif (arg STREQUAL "INSTALLPATH")
-                set(_state "installpath")
-            elseif (arg STREQUAL "DOCTITLE")
-                set(_state "doctitle")
-            elseif (arg STREQUAL "AUTHOR")
-                set(_state "author")
-            elseif (arg STREQUAL "USE")
-                set(_state "use")
-            elseif (arg STREQUAL "VERSION")
-                set(_state "version")
-            else ()
-                set(_javadoc_windowtitle ${arg})
-            endif ()
-        elseif (_state STREQUAL "author")
-            if (arg STREQUAL "PACKAGES")
-                set(_state "packages")
-            elseif (arg STREQUAL "FILES")
-                set(_state "files")
-            elseif (arg STREQUAL "SOURCEPATH")
-                set(_state "sourcepath")
-            elseif (arg STREQUAL "CLASSPATH")
-                set(_state "classpath")
-            elseif (arg STREQUAL "INSTALLPATH")
-                set(_state "installpath")
-            elseif (arg STREQUAL "DOCTITLE")
-                set(_state "doctitle")
-            elseif (arg STREQUAL "WINDOWTITLE")
-                set(_state "windowtitle")
-            elseif (arg STREQUAL "AUTHOR")
-                set(_state "author")
-            elseif (arg STREQUAL "USE")
-                set(_state "use")
-            elseif (arg STREQUAL "VERSION")
-                set(_state "version")
-            else ()
-                set(_javadoc_author ${arg})
-            endif ()
-        elseif (_state STREQUAL "use")
-            if (arg STREQUAL "PACKAGES")
-                set(_state "packages")
-            elseif (arg STREQUAL "FILES")
-                set(_state "files")
-            elseif (arg STREQUAL "SOURCEPATH")
-                set(_state "sourcepath")
-            elseif (arg STREQUAL "CLASSPATH")
-                set(_state "classpath")
-            elseif (arg STREQUAL "INSTALLPATH")
-                set(_state "installpath")
-            elseif (arg STREQUAL "DOCTITLE")
-                set(_state "doctitle")
-            elseif (arg STREQUAL "WINDOWTITLE")
-                set(_state "windowtitle")
-            elseif (arg STREQUAL "AUTHOR")
-                set(_state "author")
-            elseif (arg STREQUAL "USE")
-                set(_state "use")
-            elseif (arg STREQUAL "VERSION")
-                set(_state "version")
-            else ()
-                set(_javadoc_use ${arg})
-            endif ()
-        elseif (_state STREQUAL "version")
-            if (arg STREQUAL "PACKAGES")
-                set(_state "packages")
-            elseif (arg STREQUAL "FILES")
-                set(_state "files")
-            elseif (arg STREQUAL "SOURCEPATH")
-                set(_state "sourcepath")
-            elseif (arg STREQUAL "CLASSPATH")
-                set(_state "classpath")
-            elseif (arg STREQUAL "INSTALLPATH")
-                set(_state "installpath")
-            elseif (arg STREQUAL "DOCTITLE")
-                set(_state "doctitle")
-            elseif (arg STREQUAL "WINDOWTITLE")
-                set(_state "windowtitle")
-            elseif (arg STREQUAL "AUTHOR")
-                set(_state "author")
-            elseif (arg STREQUAL "USE")
-                set(_state "use")
-            elseif (arg STREQUAL "VERSION")
-                set(_state "version")
-            else ()
-                set(_javadoc_version ${arg})
-            endif ()
-        endif ()
-    endforeach ()
-
-    set(_javadoc_builddir ${CMAKE_CURRENT_BINARY_DIR}/javadoc/${_target})
-    set(_javadoc_options -d ${_javadoc_builddir})
-
-    if (_javadoc_sourcepath)
-        list(JOIN _javadoc_sourcepath "${_UseJava_PATH_SEP}" _javadoc_sourcepath)
-        list(APPEND _javadoc_options -sourcepath "\"${_javadoc_sourcepath}\"")
-    endif ()
-
-    if (_javadoc_classpath)
-        list(JOIN _javadoc_classpath "${_UseJava_PATH_SEP}" _javadoc_classpath)
-        list(APPEND _javadoc_options -classpath "\"${_javadoc_classpath}\"")
-    endif ()
-
-    if (_javadoc_doctitle)
-        list(APPEND _javadoc_options -doctitle '${_javadoc_doctitle}')
-    endif ()
-
-    if (_javadoc_windowtitle)
-        list(APPEND _javadoc_options -windowtitle '${_javadoc_windowtitle}')
-    endif ()
-
-    if (_javadoc_author)
-        list(APPEND _javadoc_options -author)
-    endif ()
-
-    if (_javadoc_use)
-        list(APPEND _javadoc_options -use)
-    endif ()
-
-    if (_javadoc_version)
-        list(APPEND _javadoc_options -version)
-    endif ()
-
-    add_custom_target(${_target}_javadoc ALL
-        COMMAND ${Java_JAVADOC_EXECUTABLE}
-                ${_javadoc_options}
-                ${_javadoc_files}
-                ${_javadoc_packages}
-        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-    )
-
-    install(
-        DIRECTORY ${_javadoc_builddir}
-        DESTINATION ${_javadoc_installpath}
-    )
-endfunction()
-
-function (create_javah)
-  if (Java_VERSION VERSION_GREATER_EQUAL 10)
-    message (FATAL_ERROR "create_javah: not supported with this Java version. Use add_jar(GENERATE_NATIVE_HEADERS) instead.")
-  elseif (Java_VERSION VERSION_GREATER_EQUAL 1.8)
-    message (DEPRECATION "create_javah: this command will no longer be supported starting with version 10 of JDK. Update your project by using command add_jar(GENERATE_NATIVE_HEADERS) instead.")
-  endif()
-
-    cmake_parse_arguments(_create_javah
-      ""
-      "TARGET;GENERATED_FILES;OUTPUT_NAME;OUTPUT_DIR"
-      "CLASSES;CLASSPATH;DEPENDS"
-      ${ARGN})
-
-    # ckeck parameters
-    if (NOT _create_javah_TARGET AND NOT _create_javah_GENERATED_FILES)
-      message (FATAL_ERROR "create_javah: TARGET or GENERATED_FILES must be specified.")
-    endif()
-    if (_create_javah_OUTPUT_NAME AND _create_javah_OUTPUT_DIR)
-      message (FATAL_ERROR "create_javah: OUTPUT_NAME and OUTPUT_DIR are mutually exclusive.")
-    endif()
-
-    if (NOT _create_javah_CLASSES)
-      message (FATAL_ERROR "create_javah: CLASSES is a required parameter.")
-    endif()
-
-    set (_output_files)
-
-    # handle javah options
-    set (_javah_options)
-
-    if (_create_javah_CLASSPATH)
-      # CLASSPATH can specify directories, jar files or targets created with add_jar command
-      set (_classpath)
-      foreach (_path IN LISTS _create_javah_CLASSPATH)
-        if (TARGET ${_path})
-          get_target_property (_jar_path ${_path} JAR_FILE)
-          if (_jar_path)
-            list (APPEND _classpath "${_jar_path}")
-            list (APPEND _create_javah_DEPENDS "${_path}")
-          else()
-            message(SEND_ERROR "create_javah: CLASSPATH target ${_path} is not a jar.")
-          endif()
-        elseif (EXISTS "${_path}")
-          list (APPEND _classpath "${_path}")
-          if (NOT IS_DIRECTORY "${_path}")
-            list (APPEND _create_javah_DEPENDS "${_path}")
-          endif()
-        else()
-          message(SEND_ERROR "create_javah: CLASSPATH entry ${_path} does not exist.")
-        endif()
-      endforeach()
-      string (REPLACE ";" "${_UseJava_PATH_SEP}" _classpath "${_classpath}")
-      list (APPEND _javah_options -classpath "${_classpath}")
-    endif()
-
-    if (_create_javah_OUTPUT_DIR)
-      list (APPEND _javah_options -d "${_create_javah_OUTPUT_DIR}")
-    endif()
-
-    if (_create_javah_OUTPUT_NAME)
-      list (APPEND _javah_options -o "${_create_javah_OUTPUT_NAME}")
-      set (_output_files "${_create_javah_OUTPUT_NAME}")
-
-      get_filename_component (_create_javah_OUTPUT_DIR "${_create_javah_OUTPUT_NAME}" DIRECTORY)
-      get_filename_component (_create_javah_OUTPUT_DIR "${_create_javah_OUTPUT_DIR}" ABSOLUTE)
-    endif()
-
-    if (NOT _create_javah_OUTPUT_DIR)
-      set (_create_javah_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}")
-    endif()
-
-    if (NOT _create_javah_OUTPUT_NAME)
-      # compute output names
-      foreach (_class IN LISTS _create_javah_CLASSES)
-        string (REPLACE "." "_" _c_header "${_class}")
-        set (_c_header  "${_create_javah_OUTPUT_DIR}/${_c_header}.h")
-        list (APPEND _output_files "${_c_header}")
-      endforeach()
-    endif()
-
-    # finalize custom command arguments
-    if (_create_javah_DEPENDS)
-      list (INSERT _create_javah_DEPENDS 0 DEPENDS)
-    endif()
-
-    add_custom_command (OUTPUT ${_output_files}
-      COMMAND "${Java_JAVAH_EXECUTABLE}" ${_javah_options} -jni ${_create_javah_CLASSES}
-      ${_create_javah_DEPENDS}
-      WORKING_DIRECTORY ${_create_javah_OUTPUT_DIR}
-      COMMENT "Building C header files from classes...")
-
-    if (_create_javah_TARGET)
-      add_custom_target (${_create_javah_TARGET} ALL DEPENDS ${_output_files})
-    endif()
-    if (_create_javah_GENERATED_FILES)
-      set (${_create_javah_GENERATED_FILES} ${_output_files} PARENT_SCOPE)
-    endif()
-endfunction()
-
-function(export_jars)
-    # Parse and validate arguments
-    cmake_parse_arguments(_export_jars
-      ""
-      "FILE;NAMESPACE"
-      "TARGETS"
-      ${ARGN}
-    )
-    if (NOT _export_jars_FILE)
-      message(SEND_ERROR "export_jars: FILE must be specified.")
-    endif()
-    if (NOT _export_jars_TARGETS)
-      message(SEND_ERROR "export_jars: TARGETS must be specified.")
-    endif()
-    set(_jar_NAMESPACE "${_export_jars_NAMESPACE}")
-
-    # Set content of generated exports file
-    string(REPLACE ";" " " __targets__ "${_export_jars_TARGETS}")
-    set(__targetdefs__ "")
-    foreach(_target IN LISTS _export_jars_TARGETS)
-        get_target_property(_jarpath ${_target} JAR_FILE)
-        get_filename_component(_jarpath ${_jarpath} PATH)
-        __java_export_jar(__targetdefs__ ${_target} "${_jarpath}")
-    endforeach()
-
-    # Generate exports file
-    configure_file(
-      ${_JAVA_EXPORT_TARGETS_SCRIPT}
-      ${_export_jars_FILE}
-      @ONLY
-    )
-endfunction()
-
-function(install_jar_exports)
-    # Parse and validate arguments
-    cmake_parse_arguments(_install_jar_exports
-      ""
-      "FILE;DESTINATION;COMPONENT;NAMESPACE"
-      "TARGETS"
-      ${ARGN}
-    )
-    if (NOT _install_jar_exports_FILE)
-      message(SEND_ERROR "install_jar_exports: FILE must be specified.")
-    endif()
-    if (NOT _install_jar_exports_DESTINATION)
-      message(SEND_ERROR "install_jar_exports: DESTINATION must be specified.")
-    endif()
-    if (NOT _install_jar_exports_TARGETS)
-      message(SEND_ERROR "install_jar_exports: TARGETS must be specified.")
-    endif()
-    set(_jar_NAMESPACE "${_install_jar_exports_NAMESPACE}")
-
-    if (_install_jar_exports_COMPONENT)
-      set (_COMPONENT COMPONENT ${_install_jar_exports_COMPONENT})
-    endif()
-
-    # Determine relative path from installed export file to install prefix
-    if(IS_ABSOLUTE "${_install_jar_exports_DESTINATION}")
-      file(RELATIVE_PATH _relpath
-        ${_install_jar_exports_DESTINATION}
-        ${CMAKE_INSTALL_PREFIX}
-      )
-    else()
-      file(RELATIVE_PATH _relpath
-        ${CMAKE_INSTALL_PREFIX}/${_install_jar_exports_DESTINATION}
-        ${CMAKE_INSTALL_PREFIX}
-      )
-    endif()
-
-    # Set up unique location for generated exports file
-    string(SHA256 _hash "${_install_jar_exports_DESTINATION}")
-    set(_tmpdir ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/JavaExports/${_hash})
-
-    # Set content of generated exports file
-    string(REPLACE ";" " " __targets__ "${_install_jar_exports_TARGETS}")
-    set(__targetdefs__ "set(_prefix \${CMAKE_CURRENT_LIST_DIR}/${_relpath})\n\n")
-    foreach(_target IN LISTS _install_jar_exports_TARGETS)
-        get_target_property(_dir ${_target} INSTALL_DESTINATION)
-        __java_export_jar(__targetdefs__ ${_target} "\${_prefix}/${_dir}")
-    endforeach()
-    __java_lcat(__targetdefs__ "\nunset(_prefix)")
-
-    # Generate and install exports file
-    configure_file(
-      ${_JAVA_EXPORT_TARGETS_SCRIPT}
-      ${_tmpdir}/${_install_jar_exports_FILE}
-      @ONLY
-    )
-    install(FILES ${_tmpdir}/${_install_jar_exports_FILE}
-            DESTINATION ${_install_jar_exports_DESTINATION}
-            ${_COMPONENT})
-endfunction()
diff --git a/share/cmake-3.18/Modules/UseJavaClassFilelist.cmake b/share/cmake-3.18/Modules/UseJavaClassFilelist.cmake
deleted file mode 100644
index 1c4baa9..0000000
--- a/share/cmake-3.18/Modules/UseJavaClassFilelist.cmake
+++ /dev/null
@@ -1,49 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-UseJavaClassFilelist
---------------------
-
-
-
-
-
-This script create a list of compiled Java class files to be added to
-a jar file.  This avoids including cmake files which get created in
-the binary directory.
-#]=======================================================================]
-
-if (CMAKE_JAVA_CLASS_OUTPUT_PATH)
-    if (EXISTS "${CMAKE_JAVA_CLASS_OUTPUT_PATH}")
-
-        set(_JAVA_GLOBBED_FILES)
-        if (CMAKE_JAR_CLASSES_PREFIX)
-            foreach(JAR_CLASS_PREFIX ${CMAKE_JAR_CLASSES_PREFIX})
-                message(STATUS "JAR_CLASS_PREFIX: ${JAR_CLASS_PREFIX}")
-
-                file(GLOB_RECURSE _JAVA_GLOBBED_TMP_FILES "${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${JAR_CLASS_PREFIX}/*.class")
-                if (_JAVA_GLOBBED_TMP_FILES)
-                    list(APPEND _JAVA_GLOBBED_FILES ${_JAVA_GLOBBED_TMP_FILES})
-                endif ()
-            endforeach()
-        else()
-            file(GLOB_RECURSE _JAVA_GLOBBED_FILES "${CMAKE_JAVA_CLASS_OUTPUT_PATH}/*.class")
-        endif ()
-
-        set(_JAVA_CLASS_FILES)
-        # file(GLOB_RECURSE foo RELATIVE) is broken so we need this.
-        foreach(_JAVA_GLOBBED_FILE ${_JAVA_GLOBBED_FILES})
-            file(RELATIVE_PATH _JAVA_CLASS_FILE ${CMAKE_JAVA_CLASS_OUTPUT_PATH} ${_JAVA_GLOBBED_FILE})
-            set(_JAVA_CLASS_FILES ${_JAVA_CLASS_FILES}${_JAVA_CLASS_FILE}\n)
-        endforeach()
-
-        # write to file
-        file(WRITE ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist ${_JAVA_CLASS_FILES})
-
-    else ()
-        message(SEND_ERROR "FATAL: Java class output path doesn't exist")
-    endif ()
-else ()
-    message(SEND_ERROR "FATAL: Can't find CMAKE_JAVA_CLASS_OUTPUT_PATH")
-endif ()
diff --git a/share/cmake-3.18/Modules/UseJavaSymlinks.cmake b/share/cmake-3.18/Modules/UseJavaSymlinks.cmake
deleted file mode 100644
index 3969f54..0000000
--- a/share/cmake-3.18/Modules/UseJavaSymlinks.cmake
+++ /dev/null
@@ -1,29 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-UseJavaSymlinks
----------------
-
-
-
-
-
-Helper script for UseJava.cmake
-#]=======================================================================]
-
-if (UNIX AND _JAVA_TARGET_OUTPUT_LINK)
-    if (_JAVA_TARGET_OUTPUT_NAME)
-        find_program(LN_EXECUTABLE
-            NAMES
-                ln
-        )
-
-        execute_process(
-            COMMAND ${LN_EXECUTABLE} -sf "${_JAVA_TARGET_OUTPUT_NAME}" "${_JAVA_TARGET_OUTPUT_LINK}"
-            WORKING_DIRECTORY ${_JAVA_TARGET_DIR}
-        )
-    else ()
-        message(SEND_ERROR "FATAL: Can't find _JAVA_TARGET_OUTPUT_NAME")
-    endif ()
-endif ()
diff --git a/share/cmake-3.18/Modules/UseSWIG.cmake b/share/cmake-3.18/Modules/UseSWIG.cmake
deleted file mode 100644
index a60e05e..0000000
--- a/share/cmake-3.18/Modules/UseSWIG.cmake
+++ /dev/null
@@ -1,865 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-UseSWIG
--------
-
-This file provides support for ``SWIG``. It is assumed that :module:`FindSWIG`
-module has already been loaded.
-
-Defines the following command for use with ``SWIG``:
-
-.. command:: swig_add_library
-
-  Define swig module with given name and specified language::
-
-    swig_add_library(<name>
-                     [TYPE <SHARED|MODULE|STATIC|USE_BUILD_SHARED_LIBS>]
-                     LANGUAGE <language>
-                     [NO_PROXY]
-                     [OUTPUT_DIR <directory>]
-                     [OUTFILE_DIR <directory>]
-                     SOURCES <file>...
-                    )
-
-  Targets created with the ``swig_add_library`` command have the same
-  capabilities as targets created with the :command:`add_library` command, so
-  those targets can be used with any command expecting a target (e.g.
-  :command:`target_link_libraries`).
-
-  .. note::
-
-    This command creates a target with the specified ``<name>`` when
-    policy :policy:`CMP0078` is set to ``NEW``.  Otherwise, the legacy
-    behavior will choose a different target name and store it in the
-    ``SWIG_MODULE_<name>_REAL_NAME`` variable.
-
-  .. note::
-
-    For multi-config generators, this module does not support
-    configuration-specific files generated by ``SWIG``. All build
-    configurations must result in the same generated source file.
-
-  .. note::
-
-    For Make-based generators, ``swig_add_library`` does not track file
-    dependencies, so depending on the ``<name>_swig_compilation`` custom target
-    is required for targets which require the ``swig``-generated files to
-    exist. Other generators may depend on the source files that would be
-    generated by SWIG.
-
-  ``TYPE``
-    ``SHARED``, ``MODULE`` and ``STATIC`` have the same semantic as for the
-    :command:`add_library` command. If ``USE_BUILD_SHARED_LIBS`` is specified,
-    the library type will be ``STATIC`` or ``SHARED`` based on whether the
-    current value of the :variable:`BUILD_SHARED_LIBS` variable is ``ON``. If
-    no type is specified, ``MODULE`` will be used.
-
-  ``LANGUAGE``
-    Specify the target language.
-
-  ``NO_PROXY``
-    Prevent the generation of the wrapper layer (swig ``-noproxy`` option).
-
-  ``OUTPUT_DIR``
-    Specify where to write the language specific files (swig ``-outdir``
-    option). If not given, the ``CMAKE_SWIG_OUTDIR`` variable will be used.
-    If neither is specified, the default depends on the value of the
-    ``UseSWIG_MODULE_VERSION`` variable as follows:
-
-    * If ``UseSWIG_MODULE_VERSION`` is 1 or is undefined, output is written to
-      the :variable:`CMAKE_CURRENT_BINARY_DIR` directory.
-    * If ``UseSWIG_MODULE_VERSION`` is 2, a dedicated directory will be used.
-      The path of this directory can be retrieved from the
-      ``SWIG_SUPPORT_FILES_DIRECTORY`` target property.
-
-  ``OUTFILE_DIR``
-    Specify an output directory name where the generated source file will be
-    placed (swig -o option). If not specified, the ``SWIG_OUTFILE_DIR`` variable
-    will be used. If neither is specified, ``OUTPUT_DIR`` or
-    ``CMAKE_SWIG_OUTDIR`` is used instead.
-
-  ``SOURCES``
-    List of sources for the library. Files with extension ``.i`` will be
-    identified as sources for the ``SWIG`` tool. Other files will be handled in
-    the standard way. This behavior can be overriden by specifying the variable
-    ``SWIG_SOURCE_FILE_EXTENSIONS``.
-
-  .. note::
-
-    If ``UseSWIG_MODULE_VERSION`` is set to 2, it is **strongly** recommended
-    to use a dedicated directory unique to the target when either the
-    ``OUTPUT_DIR`` option or the ``CMAKE_SWIG_OUTDIR`` variable are specified.
-    The output directory contents are erased as part of the target build, so
-    to prevent interference between targets or losing other important files,
-    each target should have its own dedicated output directory.
-
-.. command:: swig_link_libraries
-
-  Link libraries to swig module::
-
-    swig_link_libraries(<name> <item>...)
-
-  This command has same capabilities as :command:`target_link_libraries`
-  command.
-
-  .. note::
-
-    If variable ``UseSWIG_TARGET_NAME_PREFERENCE`` is set to ``STANDARD``, this
-    command is deprecated and :command:`target_link_libraries` command must be
-    used instead.
-
-Source file properties on module files **must** be set before the invocation
-of the ``swig_add_library`` command to specify special behavior of SWIG and
-ensure generated files will receive the required settings.
-
-``CPLUSPLUS``
-  Call SWIG in c++ mode.  For example:
-
-  .. code-block:: cmake
-
-    set_property(SOURCE mymod.i PROPERTY CPLUSPLUS ON)
-    swig_add_library(mymod LANGUAGE python SOURCES mymod.i)
-
-``INCLUDE_DIRECTORIES``, ``COMPILE_DEFINITIONS`` and ``COMPILE_OPTIONS``
-  Add custom flags to SWIG compiler and have same semantic as properties
-  :prop_sf:`INCLUDE_DIRECTORIES`, :prop_sf:`COMPILE_DEFINITIONS` and
-  :prop_sf:`COMPILE_OPTIONS`.
-
-``USE_TARGET_INCLUDE_DIRECTORIES``
-  If set to ``TRUE``, contents of target property
-  :prop_tgt:`INCLUDE_DIRECTORIES` will be forwarded to ``SWIG`` compiler.
-  If set to ``FALSE`` target property :prop_tgt:`INCLUDE_DIRECTORIES` will be
-  ignored. If not set, target property ``SWIG_USE_TARGET_INCLUDE_DIRECTORIES``
-  will be considered.
-
-``GENERATED_INCLUDE_DIRECTORIES``, ``GENERATED_COMPILE_DEFINITIONS`` and ``GENERATED_COMPILE_OPTIONS``
-  Add custom flags to the C/C++ generated source. They will fill, respectively,
-  properties :prop_sf:`INCLUDE_DIRECTORIES`, :prop_sf:`COMPILE_DEFINITIONS` and
-  :prop_sf:`COMPILE_OPTIONS` of generated C/C++ file.
-
-``DEPENDS``
-  Specify additional dependencies to the source file.
-
-``SWIG_MODULE_NAME``
-  Specify the actual import name of the module in the target language.
-  This is required if it cannot be scanned automatically from source
-  or different from the module file basename.  For example:
-
-  .. code-block:: cmake
-
-    set_property(SOURCE mymod.i PROPERTY SWIG_MODULE_NAME mymod_realname)
-
-  .. note::
-
-    If policy :policy:`CMP0086` is set to ``NEW``, ``-module <module_name>``
-    is passed to ``SWIG`` compiler.
-
-Target library properties can be set to apply same configuration to all SWIG
-input files.
-
-``SWIG_INCLUDE_DIRECTORIES``, ``SWIG_COMPILE_DEFINITIONS`` and ``SWIG_COMPILE_OPTIONS``
-  These properties will be applied to all SWIG input files and have same
-  semantic as target properties :prop_tgt:`INCLUDE_DIRECTORIES`,
-  :prop_tgt:`COMPILE_DEFINITIONS` and :prop_tgt:`COMPILE_OPTIONS`.
-
-  .. code-block:: cmake
-
-    set (UseSWIG_TARGET_NAME_PREFERENCE STANDARD)
-    swig_add_library(mymod LANGUAGE python SOURCES mymod.i)
-    set_property(TARGET mymod PROPERTY SWIG_COMPILE_DEFINITIONS MY_DEF1 MY_DEF2)
-    set_property(TARGET mymod PROPERTY SWIG_COMPILE_OPTIONS -bla -blb)
-
-``SWIG_USE_TARGET_INCLUDE_DIRECTORIES``
-  If set to ``TRUE``, contents of target property
-  :prop_tgt:`INCLUDE_DIRECTORIES` will be forwarded to ``SWIG`` compiler.
-  If set to ``FALSE`` or not defined, target property
-  :prop_tgt:`INCLUDE_DIRECTORIES` will be ignored. This behavior can be
-  overridden by specifying source property ``USE_TARGET_INCLUDE_DIRECTORIES``.
-
-``SWIG_GENERATED_INCLUDE_DIRECTORIES``, ``SWIG_GENERATED_COMPILE_DEFINITIONS`` and ``SWIG_GENERATED_COMPILE_OPTIONS``
-  These properties will populate, respectively, properties
-  :prop_sf:`INCLUDE_DIRECTORIES`, :prop_sf:`COMPILE_DEFINITIONS` and
-  :prop_sf:`COMPILE_FLAGS` of all generated C/C++ files.
-
-``SWIG_DEPENDS``
-  Add dependencies to all SWIG input files.
-
-The following target properties are output properties and can be used to get
-information about support files generated by ``SWIG`` interface compilation.
-
-``SWIG_SUPPORT_FILES``
-  This output property list of wrapper files generated during SWIG compilation.
-
-  .. code-block:: cmake
-
-    set (UseSWIG_TARGET_NAME_PREFERENCE STANDARD)
-    swig_add_library(mymod LANGUAGE python SOURCES mymod.i)
-    get_property(support_files TARGET mymod PROPERTY SWIG_SUPPORT_FILES)
-
-  .. note::
-
-    Only most principal support files are listed. In case some advanced
-    features of ``SWIG`` are used (for example ``%template``), associated
-    support files may not be listed. Prefer to use the
-    ``SWIG_SUPPORT_FILES_DIRECTORY`` property to handle support files.
-
-``SWIG_SUPPORT_FILES_DIRECTORY``
-  This output property specifies the directory where support files will be
-  generated.
-
-Some variables can be set to customize the behavior of ``swig_add_library``
-as well as ``SWIG``:
-
-``UseSWIG_MODULE_VERSION``
-  Specify different behaviors for ``UseSWIG`` module.
-
-  * Set to 1 or undefined: Legacy behavior is applied.
-  * Set to 2: A new strategy is applied regarding support files: the output
-    directory of support files is erased before ``SWIG`` interface compilation.
-
-``CMAKE_SWIG_FLAGS``
-  Add flags to all swig calls.
-
-``CMAKE_SWIG_OUTDIR``
-  Specify where to write the language specific files (swig ``-outdir`` option).
-
-``SWIG_OUTFILE_DIR``
-  Specify an output directory name where the generated source file will be
-  placed.  If not specified, ``CMAKE_SWIG_OUTDIR`` is used.
-
-``SWIG_MODULE_<name>_EXTRA_DEPS``
-  Specify extra dependencies for the generated module for ``<name>``.
-
-``SWIG_SOURCE_FILE_EXTENSIONS``
-  Specify a list of source file extensions to override the default
-  behavior of considering only ``.i`` files as sources for the ``SWIG``
-  tool. For example:
-
-  .. code-block:: cmake
-
-    set(SWIG_SOURCE_FILE_EXTENSIONS ".i" ".swg")
-#]=======================================================================]
-
-cmake_policy(GET CMP0078 target_name_policy)
-cmake_policy(GET CMP0086 module_name_policy)
-
-cmake_policy (VERSION 3.12)
-if (target_name_policy)
-  # respect user choice regarding CMP0078 policy
-  cmake_policy(SET CMP0078 ${target_name_policy})
-endif()
-if (module_name_policy)
-  # respect user choice regarding CMP0086 policy
-  cmake_policy(SET CMP0086 ${module_name_policy})
-endif()
-unset(target_name_policy)
-unset(module_name_policy)
-
-set(SWIG_CXX_EXTENSION "cxx")
-set(SWIG_EXTRA_LIBRARIES "")
-
-set(SWIG_PYTHON_EXTRA_FILE_EXTENSIONS ".py")
-set(SWIG_JAVA_EXTRA_FILE_EXTENSIONS ".java" "JNI.java")
-set(SWIG_CSHARP_EXTRA_FILE_EXTENSIONS ".cs" "PINVOKE.cs")
-
-set(SWIG_MANAGE_SUPPORT_FILES_SCRIPT "${CMAKE_CURRENT_LIST_DIR}/UseSWIG/ManageSupportFiles.cmake")
-
-##
-## PRIVATE functions
-##
-function (__SWIG_COMPUTE_TIMESTAMP name language infile workingdir __timestamp)
-  get_filename_component(filename "${infile}" NAME_WE)
-  set(${__timestamp}
-    "${workingdir}/${filename}${language}.stamp" PARENT_SCOPE)
-  # get_filename_component(filename "${infile}" ABSOLUTE)
-  # string(UUID uuid NAMESPACE 9735D882-D2F8-4E1D-88C9-A0A4F1F6ECA4
-  #   NAME ${name}-${language}-${filename} TYPE SHA1)
-  # set(${__timestamp} "${workingdir}/${uuid}.stamp" PARENT_SCOPE)
-endfunction()
-
-#
-# For given swig module initialize variables associated with it
-#
-macro(SWIG_MODULE_INITIALIZE name language)
-  string(TOUPPER "${language}" SWIG_MODULE_${name}_LANGUAGE)
-  string(TOLOWER "${language}" SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG)
-
-  if (NOT DEFINED SWIG_MODULE_${name}_NOPROXY)
-    set (SWIG_MODULE_${name}_NOPROXY FALSE)
-  endif()
-  if ("-noproxy" IN_LIST CMAKE_SWIG_FLAGS)
-    set (SWIG_MODULE_${name}_NOPROXY TRUE)
-  endif ()
-
-  if (SWIG_MODULE_${name}_NOPROXY AND
-      NOT ("-noproxy" IN_LIST CMAKE_SWIG_FLAGS OR "-noproxy" IN_LIST SWIG_MODULE_${name}_EXTRA_FLAGS))
-    list (APPEND SWIG_MODULE_${name}_EXTRA_FLAGS "-noproxy")
-  endif()
-  if(SWIG_MODULE_${name}_LANGUAGE STREQUAL "UNKNOWN")
-    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
-  elseif(SWIG_MODULE_${name}_LANGUAGE STREQUAL "PERL" AND
-         NOT "-shadow" IN_LIST SWIG_MODULE_${name}_EXTRA_FLAGS)
-    list(APPEND SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
-  endif()
-endmacro()
-
-#
-# For a given language, input file, and output file, determine extra files that
-# will be generated. This is internal swig macro.
-#
-
-function(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
-  set(files)
-  get_source_file_property(module_basename
-    "${infile}" SWIG_MODULE_NAME)
-  if(NOT module_basename)
-
-    # try to get module name from "%module foo" syntax
-    if ( EXISTS "${infile}" )
-      file ( STRINGS "${infile}" module_basename REGEX "[ ]*%module[ ]*[a-zA-Z0-9_]+.*" )
-    endif ()
-    if ( module_basename )
-      string ( REGEX REPLACE "[ ]*%module[ ]*([a-zA-Z0-9_]+).*" "\\1" module_basename "${module_basename}" )
-
-    else ()
-      # try to get module name from "%module (options=...) foo" syntax
-      if ( EXISTS "${infile}" )
-        file ( STRINGS "${infile}" module_basename REGEX "[ ]*%module[ ]*\\(.*\\)[ ]*[a-zA-Z0-9_]+.*" )
-      endif ()
-      if ( module_basename )
-        string ( REGEX REPLACE "[ ]*%module[ ]*\\(.*\\)[ ]*([a-zA-Z0-9_]+).*" "\\1" module_basename "${module_basename}" )
-
-      else ()
-        # fallback to file basename
-        get_filename_component(module_basename "${infile}" NAME_WE)
-      endif ()
-    endif ()
-
-  endif()
-  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSIONS})
-    set(extra_file "${generatedpath}/${module_basename}${it}")
-    if (extra_file MATCHES "\\.cs$" AND CMAKE_CSharp_COMPILER_LOADED)
-      set_source_files_properties(${extra_file} PROPERTIES LANGUAGE "CSharp")
-    else()
-      # Treat extra outputs as plain files regardless of language.
-      set_source_files_properties(${extra_file} PROPERTIES LANGUAGE "")
-    endif()
-    list(APPEND files "${extra_file}")
-  endforeach()
-
-  if (language STREQUAL "FORTRAN" AND CMAKE_Fortran_COMPILER_LOADED)
-    # Process possible user-supplied extension in flags (obtained via parent
-    # scope variable) to determine the source file name.
-    list(FIND SWIG_COMPILATION_FLAGS "-fext" fext_idx)
-    if (fext_idx EQUAL -1)
-      # Default Fortran generated extension
-      set(fext "f90")
-    else()
-      # Get extension from user-provided flag
-      math(EXPR fext_idx "${fext_idx} + 1")
-      list(GET SWIG_COMPILATION_FLAGS "${fext_idx}" fext)
-    endif()
-    set(extra_file "${generatedpath}/${module_basename}.${fext}")
-    set_source_files_properties("${extra_file}" PROPERTIES LANGUAGE "Fortran")
-    list(APPEND files "${extra_file}")
-  endif()
-
-  set (${outfiles} ${files} PARENT_SCOPE)
-endfunction()
-
-#
-# Take swig (*.i) file and add proper custom commands for it
-#
-function(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
-  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
-  get_source_file_property(swig_source_file_cplusplus "${infile}" CPLUSPLUS)
-
-  # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir
-  if(CMAKE_SWIG_OUTDIR)
-    set(outdir ${CMAKE_SWIG_OUTDIR})
-  else()
-    set(outdir ${CMAKE_CURRENT_BINARY_DIR})
-  endif()
-
-  if(SWIG_OUTFILE_DIR)
-    set(outfiledir ${SWIG_OUTFILE_DIR})
-  else()
-    set(outfiledir ${outdir})
-  endif()
-
-  if(SWIG_WORKING_DIR)
-    set (workingdir "${SWIG_WORKING_DIR}")
-  else()
-    set(workingdir "${outdir}")
-  endif()
-
-  if(SWIG_TARGET_NAME)
-    set(target_name ${SWIG_TARGET_NAME})
-  else()
-    set(target_name ${name})
-  endif()
-
-  set (swig_source_file_flags ${CMAKE_SWIG_FLAGS})
-  # handle various swig compile flags properties
-  get_source_file_property (include_directories "${infile}" INCLUDE_DIRECTORIES)
-  if (include_directories)
-    list (APPEND swig_source_file_flags "$<$<BOOL:${include_directories}>:-I$<JOIN:${include_directories},$<SEMICOLON>-I>>")
-  endif()
-  set (property "$<TARGET_PROPERTY:${target_name},SWIG_INCLUDE_DIRECTORIES>")
-  list (APPEND swig_source_file_flags "$<$<BOOL:${property}>:-I$<JOIN:$<TARGET_GENEX_EVAL:${target_name},${property}>,$<SEMICOLON>-I>>")
-  set (property "$<TARGET_PROPERTY:${target_name},INCLUDE_DIRECTORIES>")
-  get_source_file_property(use_target_include_dirs "${infile}" USE_TARGET_INCLUDE_DIRECTORIES)
-  if (use_target_include_dirs)
-    list (APPEND swig_source_file_flags "$<$<BOOL:${property}>:-I$<JOIN:${property},$<SEMICOLON>-I>>")
-  elseif(use_target_include_dirs STREQUAL "NOTFOUND")
-    # not defined at source level, rely on target level
-    list (APPEND swig_source_file_flags "$<$<AND:$<BOOL:$<TARGET_PROPERTY:${target_name},SWIG_USE_TARGET_INCLUDE_DIRECTORIES>>,$<BOOL:${property}>>:-I$<JOIN:${property},$<SEMICOLON>-I>>")
-  endif()
-
-  set (property "$<TARGET_PROPERTY:${target_name},SWIG_COMPILE_DEFINITIONS>")
-  list (APPEND swig_source_file_flags "$<$<BOOL:${property}>:-D$<JOIN:$<TARGET_GENEX_EVAL:${target_name},${property}>,$<SEMICOLON>-D>>")
-  get_source_file_property (compile_definitions "${infile}" COMPILE_DEFINITIONS)
-  if (compile_definitions)
-    list (APPEND swig_source_file_flags "$<$<BOOL:${compile_definitions}>:-D$<JOIN:${compile_definitions},$<SEMICOLON>-D>>")
-  endif()
-
-  list (APPEND swig_source_file_flags "$<TARGET_GENEX_EVAL:${target_name},$<TARGET_PROPERTY:${target_name},SWIG_COMPILE_OPTIONS>>")
-  get_source_file_property (compile_options "${infile}" COMPILE_OPTIONS)
-  if (compile_options)
-    list (APPEND swig_source_file_flags ${compile_options})
-  endif()
-
-  # legacy support
-  get_source_file_property (swig_flags "${infile}" SWIG_FLAGS)
-  if (swig_flags)
-    list (APPEND swig_source_file_flags ${swig_flags})
-  endif()
-
-  get_filename_component(swig_source_file_fullname "${infile}" ABSOLUTE)
-
-  if (NOT SWIG_MODULE_${name}_NOPROXY)
-    set(SWIG_COMPILATION_FLAGS ${swig_source_file_flags})
-    SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
-      swig_extra_generated_files
-      "${outdir}"
-      "${swig_source_file_fullname}")
-  endif()
-  set(swig_generated_file_fullname
-    "${outfiledir}/${swig_source_file_name_we}")
-  # add the language into the name of the file (i.e. TCL_wrap)
-  # this allows for the same .i file to be wrapped into different languages
-  string(APPEND swig_generated_file_fullname
-    "${SWIG_MODULE_${name}_LANGUAGE}_wrap")
-
-  if(swig_source_file_cplusplus)
-    string(APPEND swig_generated_file_fullname
-      ".${SWIG_CXX_EXTENSION}")
-  else()
-    string(APPEND swig_generated_file_fullname
-      ".c")
-  endif()
-
-  get_directory_property (cmake_include_directories INCLUDE_DIRECTORIES)
-  list (REMOVE_DUPLICATES cmake_include_directories)
-  set (swig_include_dirs)
-  if (cmake_include_directories)
-    set (swig_include_dirs "$<$<BOOL:${cmake_include_directories}>:-I$<JOIN:${cmake_include_directories},$<SEMICOLON>-I>>")
-  endif()
-
-  set(swig_special_flags)
-  # default is c, so add c++ flag if it is c++
-  if(swig_source_file_cplusplus)
-    list (APPEND swig_special_flags "-c++")
-  endif()
-
-  cmake_policy(GET CMP0086 module_name_policy)
-  if (module_name_policy STREQUAL "NEW")
-    get_source_file_property(module_name "${infile}" SWIG_MODULE_NAME)
-    if (module_name)
-      list (APPEND swig_special_flags "-module" "${module_name}")
-    endif()
-  else()
-    if (NOT module_name_policy)
-      cmake_policy(GET_WARNING CMP0086 _cmp0086_warning)
-      message(AUTHOR_WARNING "${_cmp0086_warning}\n")
-    endif()
-  endif()
-
-  set (swig_extra_flags)
-  if(SWIG_MODULE_${name}_LANGUAGE STREQUAL "CSHARP")
-    if(NOT ("-dllimport" IN_LIST swig_source_file_flags OR "-dllimport" IN_LIST SWIG_MODULE_${name}_EXTRA_FLAGS))
-      # This makes sure that the name used in the generated DllImport
-      # matches the library name created by CMake
-      list (APPEND SWIG_MODULE_${name}_EXTRA_FLAGS "-dllimport" "$<TARGET_FILE_PREFIX:${target_name}>$<TARGET_FILE_BASE_NAME:${target_name}>")
-    endif()
-  endif()
-  if (SWIG_MODULE_${name}_LANGUAGE STREQUAL "PYTHON" AND NOT SWIG_MODULE_${name}_NOPROXY)
-    if(NOT ("-interface" IN_LIST swig_source_file_flags OR "-interface" IN_LIST SWIG_MODULE_${name}_EXTRA_FLAGS))
-      # This makes sure that the name used in the proxy code
-      # matches the library name created by CMake
-      list (APPEND SWIG_MODULE_${name}_EXTRA_FLAGS "-interface" "$<TARGET_FILE_PREFIX:${target_name}>$<TARGET_FILE_BASE_NAME:${target_name}>")
-    endif()
-  endif()
-  list (APPEND swig_extra_flags ${SWIG_MODULE_${name}_EXTRA_FLAGS})
-
-  # dependencies
-  set (swig_dependencies ${SWIG_MODULE_${name}_EXTRA_DEPS} $<TARGET_PROPERTY:${target_name},SWIG_DEPENDS>)
-  get_source_file_property(file_depends "${infile}" DEPENDS)
-  if (file_depends)
-    list (APPEND swig_dependencies ${file_depends})
-  endif()
-
-  if (UseSWIG_MODULE_VERSION VERSION_GREATER 1)
-    # as part of custom command, start by removing old generated files
-    # to ensure obsolete files do not stay
-    set (swig_file_outdir "${workingdir}/${swig_source_file_name_we}.files")
-    set (swig_cleanup_command COMMAND "${CMAKE_COMMAND}" "-DSUPPORT_FILES_WORKING_DIRECTORY=${swig_file_outdir}" "-DSUPPORT_FILES_OUTPUT_DIRECTORY=${outdir}" -DACTION=CLEAN -P "${SWIG_MANAGE_SUPPORT_FILES_SCRIPT}")
-    set (swig_copy_command COMMAND "${CMAKE_COMMAND}" "-DSUPPORT_FILES_WORKING_DIRECTORY=${swig_file_outdir}" "-DSUPPORT_FILES_OUTPUT_DIRECTORY=${outdir}" -DACTION=COPY -P "${SWIG_MANAGE_SUPPORT_FILES_SCRIPT}")
-  else()
-    set (swig_file_outdir "${outdir}")
-    unset (swig_cleanup_command)
-    unset (swig_copy_command)
-  endif()
-
-  # IMPLICIT_DEPENDS below can not handle situations where a dependent file is
-  # removed. We need an extra step with timestamp and custom target, see #16830
-  # As this is needed only for Makefile generator do it conditionally
-  if(CMAKE_GENERATOR MATCHES "Make")
-    __swig_compute_timestamp(${name} ${SWIG_MODULE_${name}_LANGUAGE}
-      "${infile}" "${workingdir}" swig_generated_timestamp)
-    set(swig_custom_output "${swig_generated_timestamp}")
-    set(swig_custom_products
-      BYPRODUCTS "${swig_generated_file_fullname}" ${swig_extra_generated_files})
-    set(swig_timestamp_command
-      COMMAND ${CMAKE_COMMAND} -E touch "${swig_generated_timestamp}")
-  else()
-    set(swig_custom_output
-      "${swig_generated_file_fullname}" ${swig_extra_generated_files})
-    set(swig_custom_products)
-    set(swig_timestamp_command)
-  endif()
-  add_custom_command(
-    OUTPUT ${swig_custom_output}
-    ${swig_custom_products}
-    ${swig_cleanup_command}
-    # Let's create the ${outdir} at execution time, in case dir contains $(OutDir)
-    COMMAND "${CMAKE_COMMAND}" -E make_directory ${outdir} ${outfiledir}
-    ${swig_timestamp_command}
-    COMMAND "${CMAKE_COMMAND}" -E env "SWIG_LIB=${SWIG_DIR}" "${SWIG_EXECUTABLE}"
-    "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
-    "${swig_source_file_flags}"
-    -outdir "${swig_file_outdir}"
-    ${swig_special_flags}
-    ${swig_extra_flags}
-    "${swig_include_dirs}"
-    -o "${swig_generated_file_fullname}"
-    "${swig_source_file_fullname}"
-    ${swig_copy_command}
-    MAIN_DEPENDENCY "${swig_source_file_fullname}"
-    DEPENDS ${swig_dependencies}
-    IMPLICIT_DEPENDS CXX "${swig_source_file_fullname}"
-    COMMENT "Swig compile ${infile} for ${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
-    COMMAND_EXPAND_LISTS)
-  set_source_files_properties("${swig_generated_file_fullname}" ${swig_extra_generated_files}
-    PROPERTIES GENERATED 1)
-
-  ## add all properties for generated file to various properties
-  get_property (include_directories SOURCE "${infile}" PROPERTY GENERATED_INCLUDE_DIRECTORIES)
-  set_property (SOURCE "${swig_generated_file_fullname}" PROPERTY INCLUDE_DIRECTORIES ${include_directories} $<TARGET_GENEX_EVAL:${target_name},$<TARGET_PROPERTY:${target_name},SWIG_GENERATED_INCLUDE_DIRECTORIES>>)
-
-  get_property (compile_definitions SOURCE "${infile}" PROPERTY GENERATED_COMPILE_DEFINITIONS)
-  set_property (SOURCE "${swig_generated_file_fullname}" PROPERTY COMPILE_DEFINITIONS $<TARGET_GENEX_EVAL:${target_name},$<TARGET_PROPERTY:${target_name},SWIG_GENERATED_COMPILE_DEFINITIONS>> ${compile_definitions})
-
-  get_property (compile_options SOURCE "${infile}" PROPERTY GENERATED_COMPILE_OPTIONS)
-  set_property (SOURCE "${swig_generated_file_fullname}" PROPERTY COMPILE_OPTIONS $<TARGET_GENEX_EVAL:${target_name},$<TARGET_PROPERTY:${target_name},SWIG_GENERATED_COMPILE_OPTIONS>> ${compile_options})
-
-  if (SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG MATCHES "php")
-    set_property (SOURCE "${swig_generated_file_fullname}" APPEND PROPERTY INCLUDE_DIRECTORIES "${outdir}")
-  endif()
-
-  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files} PARENT_SCOPE)
-
-  # legacy support
-  set (swig_generated_file_fullname "${swig_generated_file_fullname}" PARENT_SCOPE)
-endfunction()
-
-#
-# Create Swig module
-#
-macro(SWIG_ADD_MODULE name language)
-  message(DEPRECATION "SWIG_ADD_MODULE is deprecated. Use SWIG_ADD_LIBRARY instead.")
-  swig_add_library(${name}
-                   LANGUAGE ${language}
-                   TYPE MODULE
-                   SOURCES ${ARGN})
-endmacro()
-
-
-function(SWIG_ADD_LIBRARY name)
-  set(options NO_PROXY)
-  set(oneValueArgs LANGUAGE
-                   TYPE
-                   OUTPUT_DIR
-                   OUTFILE_DIR)
-  set(multiValueArgs SOURCES)
-  cmake_parse_arguments(_SAM "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
-
-  if (_SAM_UNPARSED_ARGUMENTS)
-    message(FATAL_ERROR "SWIG_ADD_LIBRARY: ${_SAM_UNPARSED_ARGUMENTS}: unexpected arguments")
-  endif()
-
-  if(NOT DEFINED _SAM_LANGUAGE)
-    message(FATAL_ERROR "SWIG_ADD_LIBRARY: Missing LANGUAGE argument")
-  endif()
-
-  if(NOT DEFINED _SAM_SOURCES)
-    message(FATAL_ERROR "SWIG_ADD_LIBRARY: Missing SOURCES argument")
-  endif()
-
-  if(NOT DEFINED _SAM_TYPE)
-    set(_SAM_TYPE MODULE)
-  elseif(_SAM_TYPE STREQUAL "USE_BUILD_SHARED_LIBS")
-    unset(_SAM_TYPE)
-  endif()
-
-  cmake_policy(GET CMP0078 target_name_policy)
-  if (target_name_policy STREQUAL "NEW")
-    set (UseSWIG_TARGET_NAME_PREFERENCE STANDARD)
-  else()
-    if (NOT target_name_policy)
-      cmake_policy(GET_WARNING CMP0078 _cmp0078_warning)
-      message(AUTHOR_WARNING "${_cmp0078_warning}\n")
-    endif()
-    if (NOT DEFINED UseSWIG_TARGET_NAME_PREFERENCE)
-      set (UseSWIG_TARGET_NAME_PREFERENCE LEGACY)
-    elseif (NOT UseSWIG_TARGET_NAME_PREFERENCE MATCHES "^(LEGACY|STANDARD)$")
-      message (FATAL_ERROR "UseSWIG_TARGET_NAME_PREFERENCE: ${UseSWIG_TARGET_NAME_PREFERENCE}: invalid value. 'LEGACY' or 'STANDARD' is expected.")
-    endif()
-  endif()
-
-  if (NOT DEFINED UseSWIG_MODULE_VERSION)
-    set (UseSWIG_MODULE_VERSION 1)
-  elseif (NOT UseSWIG_MODULE_VERSION MATCHES "^(1|2)$")
-    message (FATAL_ERROR "UseSWIG_MODULE_VERSION: ${UseSWIG_MODULE_VERSION}: invalid value. 1 or 2 is expected.")
-  endif()
-
-  set (SWIG_MODULE_${name}_NOPROXY ${_SAM_NO_PROXY})
-  swig_module_initialize(${name} ${_SAM_LANGUAGE})
-
-  # compute real target name.
-  if (UseSWIG_TARGET_NAME_PREFERENCE STREQUAL "LEGACY" AND
-      SWIG_MODULE_${name}_LANGUAGE STREQUAL "PYTHON" AND NOT SWIG_MODULE_${name}_NOPROXY)
-    # swig will produce a module.py containing an 'import _modulename' statement,
-    # which implies having a corresponding _modulename.so (*NIX), _modulename.pyd (Win32),
-    # unless the -noproxy flag is used
-    set(target_name "_${name}")
-  else()
-    set(target_name "${name}")
-  endif()
-
-  if (TARGET ${target_name})
-    # a target with same name is already defined.
-    # call NOW add_library command to raise the most useful error message
-    add_library(${target_name})
-    return()
-  endif()
-
-  set (workingdir "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${target_name}.dir")
-  # set special variable to pass extra information to command SWIG_ADD_SOURCE_TO_MODULE
-  # which cannot be changed due to legacy compatibility
-  set (SWIG_WORKING_DIR "${workingdir}")
-  set (SWIG_TARGET_NAME "${target_name}")
-
-  set (outputdir "${_SAM_OUTPUT_DIR}")
-  if (NOT _SAM_OUTPUT_DIR)
-    if (CMAKE_SWIG_OUTDIR)
-      set (outputdir "${CMAKE_SWIG_OUTDIR}")
-    else()
-      if (UseSWIG_MODULE_VERSION VERSION_GREATER 1)
-        set (outputdir "${workingdir}/${_SAM_LANGUAGE}.files")
-      else()
-        set (outputdir "${CMAKE_CURRENT_BINARY_DIR}")
-      endif()
-    endif()
-  endif()
-
-  set (outfiledir "${_SAM_OUTFILE_DIR}")
-  if(NOT _SAM_OUTFILE_DIR)
-    if (SWIG_OUTFILE_DIR)
-      set (outfiledir "${SWIG_OUTFILE_DIR}")
-    else()
-      if (_SAM_OUTPUT_DIR OR CMAKE_SWIG_OUTDIR)
-        set (outfiledir "${outputdir}")
-    else()
-        set (outfiledir "${workingdir}")
-      endif()
-    endif()
-  endif()
-  # set again, locally, predefined variables to ensure compatibility
-  # with command SWIG_ADD_SOURCE_TO_MODULE
-  set(CMAKE_SWIG_OUTDIR "${outputdir}")
-  set(SWIG_OUTFILE_DIR "${outfiledir}")
-
-  # See if the user has specified source extensions for swig files?
-  if (NOT DEFINED SWIG_SOURCE_FILE_EXTENSIONS)
-    # Assume the default (*.i) file extension for Swig source files
-    set(SWIG_SOURCE_FILE_EXTENSIONS ".i")
-  endif()
-
-  # Generate a regex out of file extensions.
-  string(REGEX REPLACE "([$^.*+?|()-])" "\\\\\\1" swig_source_ext_regex "${SWIG_SOURCE_FILE_EXTENSIONS}")
-  list (JOIN swig_source_ext_regex "|" swig_source_ext_regex)
-  string (PREPEND swig_source_ext_regex "(")
-  string (APPEND swig_source_ext_regex ")$")
-
-  set(swig_dot_i_sources ${_SAM_SOURCES})
-  list(FILTER swig_dot_i_sources INCLUDE REGEX ${swig_source_ext_regex})
-  if (NOT swig_dot_i_sources)
-    message(FATAL_ERROR "SWIG_ADD_LIBRARY: no SWIG interface files specified")
-  endif()
-  set(swig_other_sources ${_SAM_SOURCES})
-  list(REMOVE_ITEM swig_other_sources ${swig_dot_i_sources})
-
-  set(swig_generated_sources)
-  set(swig_generated_timestamps)
-  foreach(swig_it IN LISTS swig_dot_i_sources)
-    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source "${swig_it}")
-    list (APPEND swig_generated_sources "${swig_generated_source}")
-    if(CMAKE_GENERATOR MATCHES "Make")
-      __swig_compute_timestamp(${name} ${SWIG_MODULE_${name}_LANGUAGE} "${swig_it}"
-        "${workingdir}" swig_timestamp)
-      list (APPEND swig_generated_timestamps "${swig_timestamp}")
-    endif()
-  endforeach()
-  set_property (DIRECTORY APPEND PROPERTY
-    ADDITIONAL_CLEAN_FILES ${swig_generated_sources} ${swig_generated_timestamps})
-  if (UseSWIG_MODULE_VERSION VERSION_GREATER 1)
-    set_property (DIRECTORY APPEND PROPERTY ADDITIONAL_CLEAN_FILES "${outputdir}")
-  endif()
-
-  add_library(${target_name}
-    ${_SAM_TYPE}
-    ${swig_generated_sources}
-    ${swig_other_sources})
-  if(CMAKE_GENERATOR MATCHES "Make")
-    # see IMPLICIT_DEPENDS above
-    add_custom_target(${name}_swig_compilation DEPENDS ${swig_generated_timestamps})
-    add_dependencies(${target_name} ${name}_swig_compilation)
-  endif()
-  if(_SAM_TYPE STREQUAL "MODULE")
-    set_target_properties(${target_name} PROPERTIES NO_SONAME ON)
-  endif()
-  string(TOLOWER "${_SAM_LANGUAGE}" swig_lowercase_language)
-  if (swig_lowercase_language STREQUAL "octave")
-    set_target_properties(${target_name} PROPERTIES PREFIX "")
-    set_target_properties(${target_name} PROPERTIES SUFFIX ".oct")
-  elseif (swig_lowercase_language STREQUAL "go")
-    set_target_properties(${target_name} PROPERTIES PREFIX "")
-  elseif (swig_lowercase_language STREQUAL "java")
-    # In java you want:
-    #      System.loadLibrary("LIBRARY");
-    # then JNI will look for a library whose name is platform dependent, namely
-    #   MacOS  : libLIBRARY.jnilib
-    #   Windows: LIBRARY.dll
-    #   Linux  : libLIBRARY.so
-    if (APPLE)
-      set_target_properties (${target_name} PROPERTIES SUFFIX ".jnilib")
-    endif()
-    if ((WIN32 AND MINGW) OR CYGWIN OR CMAKE_SYSTEM_NAME STREQUAL MSYS)
-      set_target_properties(${target_name} PROPERTIES PREFIX "")
-    endif()
-  elseif (swig_lowercase_language STREQUAL "lua")
-    if(_SAM_TYPE STREQUAL "MODULE")
-      set_target_properties(${target_name} PROPERTIES PREFIX "")
-    endif()
-  elseif (swig_lowercase_language STREQUAL "python")
-    if (UseSWIG_TARGET_NAME_PREFERENCE STREQUAL "STANDARD" AND NOT SWIG_MODULE_${name}_NOPROXY)
-      # swig will produce a module.py containing an 'import _modulename' statement,
-      # which implies having a corresponding _modulename.so (*NIX), _modulename.pyd (Win32),
-      # unless the -noproxy flag is used
-      set_target_properties(${target_name} PROPERTIES PREFIX "_")
-    else()
-      set_target_properties(${target_name} PROPERTIES PREFIX "")
-    endif()
-    # Python extension modules on Windows must have the extension ".pyd"
-    # instead of ".dll" as of Python 2.5.  Older python versions do support
-    # this suffix.
-    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
-    # <quote>
-    # Windows: .dll is no longer supported as a filename extension for extension modules.
-    # .pyd is now the only filename extension that will be searched for.
-    # </quote>
-    if(WIN32 AND NOT CYGWIN)
-      set_target_properties(${target_name} PROPERTIES SUFFIX ".pyd")
-    endif()
-  elseif (swig_lowercase_language STREQUAL "r")
-    set_target_properties(${target_name} PROPERTIES PREFIX "")
-  elseif (swig_lowercase_language STREQUAL "ruby")
-    # In ruby you want:
-    #      require 'LIBRARY'
-    # then ruby will look for a library whose name is platform dependent, namely
-    #   MacOS  : LIBRARY.bundle
-    #   Windows: LIBRARY.dll
-    #   Linux  : LIBRARY.so
-    set_target_properties (${target_name} PROPERTIES PREFIX "")
-    if (APPLE)
-      set_target_properties (${target_name} PROPERTIES SUFFIX ".bundle")
-    endif ()
-  elseif (swig_lowercase_language STREQUAL "perl")
-    # assume empty prefix because we expect the module to be dynamically loaded
-    set_target_properties (${target_name} PROPERTIES PREFIX "")
-    if (APPLE)
-      set_target_properties (${target_name} PROPERTIES SUFFIX ".dylib")
-    endif ()
-  elseif (swig_lowercase_language STREQUAL "fortran")
-    # Do *not* override the target's library prefix
-  else()
-    # assume empty prefix because we expect the module to be dynamically loaded
-    set_target_properties (${target_name} PROPERTIES PREFIX "")
-  endif ()
-
-  # target property SWIG_SUPPORT_FILES_DIRECTORY specify output directory of support files
-  set_property (TARGET ${target_name} PROPERTY SWIG_SUPPORT_FILES_DIRECTORY "${outputdir}")
-  # target property SWIG_SUPPORT_FILES lists principal proxy support files
-  if (NOT SWIG_MODULE_${name}_NOPROXY)
-    string(TOUPPER "${_SAM_LANGUAGE}" swig_uppercase_language)
-    set(swig_all_support_files)
-    foreach (swig_it IN LISTS SWIG_${swig_uppercase_language}_EXTRA_FILE_EXTENSIONS)
-      set (swig_support_files ${swig_generated_sources})
-      list (FILTER swig_support_files INCLUDE REGEX ".*${swig_it}$")
-      list(APPEND swig_all_support_files ${swig_support_files})
-    endforeach()
-    if (swig_all_support_files)
-      list(REMOVE_DUPLICATES swig_all_support_files)
-    endif()
-    set_property (TARGET ${target_name} PROPERTY SWIG_SUPPORT_FILES ${swig_all_support_files})
-  endif()
-
-  # to ensure legacy behavior, export some variables
-  set (SWIG_MODULE_${name}_LANGUAGE "${SWIG_MODULE_${name}_LANGUAGE}" PARENT_SCOPE)
-  set (SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}" PARENT_SCOPE)
-  set (SWIG_MODULE_${name}_REAL_NAME "${target_name}" PARENT_SCOPE)
-  set (SWIG_MODULE_${name}_NOPROXY "${SWIG_MODULE_${name}_NOPROXY}" PARENT_SCOPE)
-  set (SWIG_MODULE_${name}_EXTRA_FLAGS "${SWIG_MODULE_${name}_EXTRA_FLAGS}" PARENT_SCOPE)
-  # the last one is a bit crazy but it is documented, so...
-  # NOTA: works as expected if only ONE input file is specified
-  set (swig_generated_file_fullname "${swig_generated_file_fullname}" PARENT_SCOPE)
-endfunction()
-
-#
-# Like TARGET_LINK_LIBRARIES but for swig modules
-#
-function(SWIG_LINK_LIBRARIES name)
-  if (UseSWIG_TARGET_NAME_PREFERENCE STREQUAL "STANDARD")
-    message(DEPRECATION "SWIG_LINK_LIBRARIES is deprecated. Use TARGET_LINK_LIBRARIES instead.")
-    target_link_libraries(${name} ${ARGN})
-  else()
-    if(SWIG_MODULE_${name}_REAL_NAME)
-      target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
-    else()
-      message(SEND_ERROR "Cannot find Swig library \"${name}\".")
-    endif()
-  endif()
-endfunction()
diff --git a/share/cmake-3.18/Modules/UseSWIG/ManageSupportFiles.cmake b/share/cmake-3.18/Modules/UseSWIG/ManageSupportFiles.cmake
deleted file mode 100644
index 4a03900..0000000
--- a/share/cmake-3.18/Modules/UseSWIG/ManageSupportFiles.cmake
+++ /dev/null
@@ -1,31 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-if (ACTION STREQUAL "CLEAN")
-  # Collect current list of generated files
-  file (GLOB files LIST_DIRECTORIES FALSE RELATIVE "${SUPPORT_FILES_WORKING_DIRECTORY}" "${SUPPORT_FILES_WORKING_DIRECTORY}/*")
-
-  if (files)
-    # clean-up the output directory
-    ## compute full paths
-    list (TRANSFORM files PREPEND "${SUPPORT_FILES_OUTPUT_DIRECTORY}/")
-    ## remove generated files from the output directory
-    file (REMOVE ${files})
-
-    # clean-up working directory
-    file (REMOVE_RECURSE "${SUPPORT_FILES_WORKING_DIRECTORY}")
-  endif()
-
-  file (MAKE_DIRECTORY "${SUPPORT_FILES_WORKING_DIRECTORY}")
-endif()
-
-if (ACTION STREQUAL "COPY")
-  # Collect current list of generated files
-  file (GLOB files LIST_DIRECTORIES FALSE "${SUPPORT_FILES_WORKING_DIRECTORY}/*")
-
-  if (files)
-    # copy files to the output directory
-    file (COPY ${files} DESTINATION "${SUPPORT_FILES_OUTPUT_DIRECTORY}")
-  endif()
-endif()
diff --git a/share/cmake-3.18/Modules/VTKCompatibility.cmake b/share/cmake-3.18/Modules/VTKCompatibility.cmake
deleted file mode 100644
index 1b0815e..0000000
--- a/share/cmake-3.18/Modules/VTKCompatibility.cmake
+++ /dev/null
@@ -1,42 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-
-if(APPLE)
-  set(CMAKE_CXX_CREATE_SHARED_LIBRARY "${CMAKE_C_CREATE_SHARED_LIBRARY}")
-  set(CMAKE_CXX_CREATE_SHARED_MODULE "${CMAKE_C_CREATE_SHARED_MODULE}")
-  string( REGEX REPLACE "CMAKE_C_COMPILER"
-    CMAKE_CXX_COMPILER CMAKE_CXX_CREATE_SHARED_MODULE
-    "${CMAKE_CXX_CREATE_SHARED_MODULE}")
-  string( REGEX REPLACE "CMAKE_C_COMPILER"
-    CMAKE_CXX_COMPILER CMAKE_CXX_CREATE_SHARED_LIBRARY
-    "${CMAKE_CXX_CREATE_SHARED_LIBRARY}")
-endif()
-
-set(VTKFTGL_BINARY_DIR "${VTK_BINARY_DIR}/Utilities/ftgl"
-  CACHE INTERNAL "")
-set(VTKFREETYPE_BINARY_DIR "${VTK_BINARY_DIR}/Utilities/freetype"
-  CACHE INTERNAL "")
-set(VTKFTGL_SOURCE_DIR "${VTK_SOURCE_DIR}/Utilities/ftgl"
-  CACHE INTERNAL "")
-set(VTKFREETYPE_SOURCE_DIR "${VTK_SOURCE_DIR}/Utilities/freetype"
-  CACHE INTERNAL "")
-
-set(VTK_GLEXT_FILE "${VTK_SOURCE_DIR}/Utilities/ParseOGLExt/headers/glext.h"
-  CACHE FILEPATH
-  "Location of the OpenGL extensions header file (glext.h).")
-set(VTK_GLXEXT_FILE
-  "${VTK_SOURCE_DIR}/Utilities/ParseOGLExt/headers/glxext.h" CACHE FILEPATH
-  "Location of the GLX extensions header file (glxext.h).")
-set(VTK_WGLEXT_FILE "${VTK_SOURCE_DIR}/Utilities/ParseOGLExt/headers/wglext.h"
-  CACHE FILEPATH
-  "Location of the WGL extensions header file (wglext.h).")
-
-# work around an old bug in VTK
-set(TIFF_RIGHT_VERSION 1)
-
-# for very old VTK (versions prior to 4.2)
-macro(SOURCE_FILES)
-  message (FATAL_ERROR "You are trying to build a very old version of VTK (prior to VTK 4.2). To do this you need to use CMake 2.0 as it was the last version of CMake to support VTK 4.0.")
-endmacro()
-
diff --git a/share/cmake-3.18/Modules/WriteCompilerDetectionHeader.cmake b/share/cmake-3.18/Modules/WriteCompilerDetectionHeader.cmake
deleted file mode 100644
index 23d81b5..0000000
--- a/share/cmake-3.18/Modules/WriteCompilerDetectionHeader.cmake
+++ /dev/null
@@ -1,693 +0,0 @@
-# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-# file Copyright.txt or https://cmake.org/licensing for details.
-
-#[=======================================================================[.rst:
-WriteCompilerDetectionHeader
-----------------------------
-
-This module provides the function ``write_compiler_detection_header()``.
-
-This function can be used to generate a file suitable for preprocessor
-inclusion which contains macros to be used in source code::
-
-   write_compiler_detection_header(
-             FILE <file>
-             PREFIX <prefix>
-             [OUTPUT_FILES_VAR <output_files_var> OUTPUT_DIR <output_dir>]
-             COMPILERS <compiler> [...]
-             FEATURES <feature> [...]
-             [BARE_FEATURES <feature> [...]]
-             [VERSION <version>]
-             [PROLOG <prolog>]
-             [EPILOG <epilog>]
-             [ALLOW_UNKNOWN_COMPILERS]
-             [ALLOW_UNKNOWN_COMPILER_VERSIONS]
-   )
-
-This generates the file ``<file>`` with macros which all have the prefix
-``<prefix>``.
-
-By default, all content is written directly to the ``<file>``.  The
-``OUTPUT_FILES_VAR`` may be specified to cause the compiler-specific
-content to be written to separate files.  The separate files are then
-available in the ``<output_files_var>`` and may be consumed by the caller
-for installation for example.  The ``OUTPUT_DIR`` specifies a relative
-path from the main ``<file>`` to the compiler-specific files. For example:
-
-.. code-block:: cmake
-
-   write_compiler_detection_header(
-     FILE climbingstats_compiler_detection.h
-     PREFIX ClimbingStats
-     OUTPUT_FILES_VAR support_files
-     OUTPUT_DIR compilers
-     COMPILERS GNU Clang MSVC Intel
-     FEATURES cxx_variadic_templates
-   )
-   install(FILES
-     ${CMAKE_CURRENT_BINARY_DIR}/climbingstats_compiler_detection.h
-     DESTINATION include
-   )
-   install(FILES
-     ${support_files}
-     DESTINATION include/compilers
-   )
-
-
-``VERSION`` may be used to specify the API version to be generated.
-Future versions of CMake may introduce alternative APIs.  A given
-API is selected by any ``<version>`` value greater than or equal
-to the version of CMake that introduced the given API and less
-than the version of CMake that introduced its succeeding API.
-The value of the :variable:`CMAKE_MINIMUM_REQUIRED_VERSION`
-variable is used if no explicit version is specified.
-(As of CMake version |release| there is only one API version.)
-
-``PROLOG`` may be specified as text content to write at the start of the
-header. ``EPILOG`` may be specified as text content to write at the end
-of the header
-
-At least one ``<compiler>`` and one ``<feature>`` must be listed.  Compilers
-which are known to CMake, but not specified are detected and a preprocessor
-``#error`` is generated for them.  A preprocessor macro matching
-``<PREFIX>_COMPILER_IS_<compiler>`` is generated for each compiler
-known to CMake to contain the value ``0`` or ``1``.
-
-Possible compiler identifiers are documented with the
-:variable:`CMAKE_<LANG>_COMPILER_ID` variable.
-Available features in this version of CMake are listed in the
-:prop_gbl:`CMAKE_C_KNOWN_FEATURES` and
-:prop_gbl:`CMAKE_CXX_KNOWN_FEATURES` global properties.
-The ``{c,cxx}_std_*`` meta-features are ignored if requested.
-
-See the :manual:`cmake-compile-features(7)` manual for information on
-compile features.
-
-``BARE_FEATURES`` will define the compatibility macros with the name used in
-newer versions of the language standard, so the code can use the new feature
-name unconditionally.
-
-``ALLOW_UNKNOWN_COMPILERS`` and ``ALLOW_UNKNOWN_COMPILER_VERSIONS`` cause
-the module to generate conditions that treat unknown compilers as simply
-lacking all features.  Without these options the default behavior is to
-generate a ``#error`` for unknown compilers and versions.
-
-Feature Test Macros
-===================
-
-For each compiler, a preprocessor macro is generated matching
-``<PREFIX>_COMPILER_IS_<compiler>`` which has the content either ``0``
-or ``1``, depending on the compiler in use. Preprocessor macros for
-compiler version components are generated matching
-``<PREFIX>_COMPILER_VERSION_MAJOR`` ``<PREFIX>_COMPILER_VERSION_MINOR``
-and ``<PREFIX>_COMPILER_VERSION_PATCH`` containing decimal values
-for the corresponding compiler version components, if defined.
-
-A preprocessor test is generated based on the compiler version
-denoting whether each feature is enabled.  A preprocessor macro
-matching ``<PREFIX>_COMPILER_<FEATURE>``, where ``<FEATURE>`` is the
-upper-case ``<feature>`` name, is generated to contain the value
-``0`` or ``1`` depending on whether the compiler in use supports the
-feature:
-
-.. code-block:: cmake
-
-   write_compiler_detection_header(
-     FILE climbingstats_compiler_detection.h
-     PREFIX ClimbingStats
-     COMPILERS GNU Clang AppleClang MSVC Intel
-     FEATURES cxx_variadic_templates
-   )
-
-.. code-block:: c++
-
-   #if ClimbingStats_COMPILER_CXX_VARIADIC_TEMPLATES
-   template<typename... T>
-   void someInterface(T t...) { /* ... */ }
-   #else
-   // Compatibility versions
-   template<typename T1>
-   void someInterface(T1 t1) { /* ... */ }
-   template<typename T1, typename T2>
-   void someInterface(T1 t1, T2 t2) { /* ... */ }
-   template<typename T1, typename T2, typename T3>
-   void someInterface(T1 t1, T2 t2, T3 t3) { /* ... */ }
-   #endif
-
-Symbol Macros
-=============
-
-Some additional symbol-defines are created for particular features for
-use as symbols which may be conditionally defined empty:
-
-.. code-block:: c++
-
-   class MyClass ClimbingStats_FINAL
-   {
-       ClimbingStats_CONSTEXPR int someInterface() { return 42; }
-   };
-
-The ``ClimbingStats_FINAL`` macro will expand to ``final`` if the
-compiler (and its flags) support the ``cxx_final`` feature, and the
-``ClimbingStats_CONSTEXPR`` macro will expand to ``constexpr``
-if ``cxx_constexpr`` is supported.
-
-If ``BARE_FEATURES cxx_final`` was given as argument the ``final`` keyword
-will be defined for old compilers, too.
-
-The following features generate corresponding symbol defines and if they
-are available as ``BARE_FEATURES``:
-
-========================== =================================== ================= ======
-        Feature                          Define                      Symbol       bare
-========================== =================================== ================= ======
-``c_restrict``              ``<PREFIX>_RESTRICT``               ``restrict``      yes
-``cxx_constexpr``           ``<PREFIX>_CONSTEXPR``              ``constexpr``     yes
-``cxx_deleted_functions``   ``<PREFIX>_DELETED_FUNCTION``       ``= delete``
-``cxx_extern_templates``    ``<PREFIX>_EXTERN_TEMPLATE``        ``extern``
-``cxx_final``               ``<PREFIX>_FINAL``                  ``final``         yes
-``cxx_noexcept``            ``<PREFIX>_NOEXCEPT``               ``noexcept``      yes
-``cxx_noexcept``            ``<PREFIX>_NOEXCEPT_EXPR(X)``       ``noexcept(X)``
-``cxx_override``            ``<PREFIX>_OVERRIDE``               ``override``      yes
-========================== =================================== ================= ======
-
-Compatibility Implementation Macros
-===================================
-
-Some features are suitable for wrapping in a macro with a backward
-compatibility implementation if the compiler does not support the feature.
-
-When the ``cxx_static_assert`` feature is not provided by the compiler,
-a compatibility implementation is available via the
-``<PREFIX>_STATIC_ASSERT(COND)`` and
-``<PREFIX>_STATIC_ASSERT_MSG(COND, MSG)`` function-like macros. The macros
-expand to ``static_assert`` where that compiler feature is available, and
-to a compatibility implementation otherwise. In the first form, the
-condition is stringified in the message field of ``static_assert``.  In
-the second form, the message ``MSG`` is passed to the message field of
-``static_assert``, or ignored if using the backward compatibility
-implementation.
-
-The ``cxx_attribute_deprecated`` feature provides a macro definition
-``<PREFIX>_DEPRECATED``, which expands to either the standard
-``[[deprecated]]`` attribute or a compiler-specific decorator such
-as ``__attribute__((__deprecated__))`` used by GNU compilers.
-
-The ``cxx_alignas`` feature provides a macro definition
-``<PREFIX>_ALIGNAS`` which expands to either the standard ``alignas``
-decorator or a compiler-specific decorator such as
-``__attribute__ ((__aligned__))`` used by GNU compilers.
-
-The ``cxx_alignof`` feature provides a macro definition
-``<PREFIX>_ALIGNOF`` which expands to either the standard ``alignof``
-decorator or a compiler-specific decorator such as ``__alignof__``
-used by GNU compilers.
-
-============================= ================================ ===================== ======
-          Feature                          Define                     Symbol          bare
-============================= ================================ ===================== ======
-``cxx_alignas``                ``<PREFIX>_ALIGNAS``             ``alignas``
-``cxx_alignof``                ``<PREFIX>_ALIGNOF``             ``alignof``
-``cxx_nullptr``                ``<PREFIX>_NULLPTR``             ``nullptr``           yes
-``cxx_static_assert``          ``<PREFIX>_STATIC_ASSERT``       ``static_assert``
-``cxx_static_assert``          ``<PREFIX>_STATIC_ASSERT_MSG``   ``static_assert``
-``cxx_attribute_deprecated``   ``<PREFIX>_DEPRECATED``          ``[[deprecated]]``
-``cxx_attribute_deprecated``   ``<PREFIX>_DEPRECATED_MSG``      ``[[deprecated]]``
-``cxx_thread_local``           ``<PREFIX>_THREAD_LOCAL``        ``thread_local``
-============================= ================================ ===================== ======
-
-A use-case which arises with such deprecation macros is the deprecation
-of an entire library.  In that case, all public API in the library may
-be decorated with the ``<PREFIX>_DEPRECATED`` macro.  This results in
-very noisy build output when building the library itself, so the macro
-may be may be defined to empty in that case when building the deprecated
-library:
-
-.. code-block:: cmake
-
-  add_library(compat_support ${srcs})
-  target_compile_definitions(compat_support
-    PRIVATE
-      CompatSupport_DEPRECATED=
-  )
-#]=======================================================================]
-
-include(${CMAKE_CURRENT_LIST_DIR}/CMakeCompilerIdDetection.cmake)
-
-function(_load_compiler_variables CompilerId lang)
-  include("${CMAKE_ROOT}/Modules/Compiler/${CompilerId}-${lang}-FeatureTests.cmake" OPTIONAL)
-  set(_cmake_oldestSupported_${CompilerId} ${_cmake_oldestSupported} PARENT_SCOPE)
-  foreach(feature ${ARGN})
-    set(_cmake_feature_test_${CompilerId}_${feature} ${_cmake_feature_test_${feature}} PARENT_SCOPE)
-  endforeach()
-  include("${CMAKE_ROOT}/Modules/Compiler/${CompilerId}-${lang}-DetermineCompiler.cmake" OPTIONAL
-      RESULT_VARIABLE determinedCompiler)
-  if (NOT determinedCompiler)
-    include("${CMAKE_ROOT}/Modules/Compiler/${CompilerId}-DetermineCompiler.cmake" OPTIONAL)
-  endif()
-  set(_compiler_id_version_compute_${CompilerId} ${_compiler_id_version_compute} PARENT_SCOPE)
-endfunction()
-
-macro(_simpledefine FEATURE_NAME FEATURE_TESTNAME FEATURE_STRING FEATURE_DEFAULT_STRING)
-  if (feature STREQUAL "${FEATURE_NAME}")
-        set(def_value "${prefix_arg}_${FEATURE_TESTNAME}")
-        string(APPEND file_content "
-#  if defined(${def_name}) && ${def_name}
-#    define ${def_value} ${FEATURE_STRING}
-#  else
-#    define ${def_value} ${FEATURE_DEFAULT_STRING}
-#  endif
-\n")
-  endif()
-endmacro()
-
-macro(_simplebaredefine FEATURE_NAME FEATURE_STRING FEATURE_DEFAULT_STRING)
-  if (feature STREQUAL "${FEATURE_NAME}")
-        string(APPEND file_content "
-#  if !(defined(${def_name}) && ${def_name})
-#    define ${FEATURE_STRING} ${FEATURE_DEFAULT_STRING}
-#  endif
-\n")
-  endif()
-endmacro()
-
-function(_check_feature_lists C_FEATURE_VAR CXX_FEATURE_VAR)
-  foreach(feature ${ARGN})
-    if (feature MATCHES "^c_std_")
-      # ignored
-    elseif (feature MATCHES "^cxx_std_")
-      # ignored
-    elseif (feature MATCHES "^cxx_")
-      list(APPEND _langs CXX)
-      list(APPEND ${CXX_FEATURE_VAR} ${feature})
-    elseif (feature MATCHES "^c_")
-      list(APPEND _langs C)
-      list(APPEND ${C_FEATURE_VAR} ${feature})
-    else()
-      message(FATAL_ERROR "Unsupported feature ${feature}.")
-    endif()
-  endforeach()
-  set(${C_FEATURE_VAR} ${${C_FEATURE_VAR}} PARENT_SCOPE)
-  set(${CXX_FEATURE_VAR} ${${CXX_FEATURE_VAR}} PARENT_SCOPE)
-  set(_langs ${_langs} PARENT_SCOPE)
-endfunction()
-
-function(write_compiler_detection_header
-    file_keyword file_arg
-    prefix_keyword prefix_arg
-    )
-  if (NOT "x${file_keyword}" STREQUAL "xFILE")
-    message(FATAL_ERROR "write_compiler_detection_header: FILE parameter missing.")
-  endif()
-  if (NOT "x${prefix_keyword}" STREQUAL "xPREFIX")
-    message(FATAL_ERROR "write_compiler_detection_header: PREFIX parameter missing.")
-  endif()
-  set(options ALLOW_UNKNOWN_COMPILERS ALLOW_UNKNOWN_COMPILER_VERSIONS)
-  set(oneValueArgs VERSION EPILOG PROLOG OUTPUT_FILES_VAR OUTPUT_DIR)
-  set(multiValueArgs COMPILERS FEATURES BARE_FEATURES)
-  cmake_parse_arguments(_WCD "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
-
-  if (NOT _WCD_COMPILERS)
-    message(FATAL_ERROR "Invalid arguments.  write_compiler_detection_header requires at least one compiler.")
-  endif()
-  if (NOT _WCD_FEATURES AND NOT _WCD_BARE_FEATURES)
-    message(FATAL_ERROR "Invalid arguments.  write_compiler_detection_header requires at least one feature.")
-  endif()
-
-  if(_WCD_UNPARSED_ARGUMENTS)
-    message(FATAL_ERROR "Unparsed arguments: ${_WCD_UNPARSED_ARGUMENTS}")
-  endif()
-
-  if (prefix_arg STREQUAL "")
-    message(FATAL_ERROR "A prefix must be specified")
-  endif()
-  string(MAKE_C_IDENTIFIER ${prefix_arg} cleaned_prefix)
-  if (NOT prefix_arg STREQUAL cleaned_prefix)
-    message(FATAL_ERROR "The prefix must be a valid C identifier.")
-  endif()
-
-  if(NOT _WCD_VERSION)
-    set(_WCD_VERSION ${CMAKE_MINIMUM_REQUIRED_VERSION})
-  endif()
-  set(_min_version 3.1.0) # Version which introduced this function
-  if (_WCD_VERSION VERSION_LESS _min_version)
-    set(err "VERSION compatibility for write_compiler_detection_header is set to ${_WCD_VERSION}, which is too low.")
-    string(APPEND err "  It must be set to at least ${_min_version}.  ")
-    string(APPEND err "  Either set the VERSION parameter to the write_compiler_detection_header function, or update")
-    string(APPEND err " your minimum required CMake version with the cmake_minimum_required command.")
-    message(FATAL_ERROR "${err}")
-  endif()
-
-  if(_WCD_OUTPUT_FILES_VAR)
-    if(NOT _WCD_OUTPUT_DIR)
-      message(FATAL_ERROR "If OUTPUT_FILES_VAR is specified, then OUTPUT_DIR must also be specified.")
-    endif()
-  endif()
-  if(_WCD_OUTPUT_DIR)
-    if(NOT _WCD_OUTPUT_FILES_VAR)
-      message(FATAL_ERROR "If OUTPUT_DIR is specified, then OUTPUT_FILES_VAR must also be specified.")
-    endif()
-    get_filename_component(main_file_dir ${file_arg} DIRECTORY)
-    if (NOT IS_ABSOLUTE ${main_file_dir})
-      set(main_file_dir "${CMAKE_CURRENT_BINARY_DIR}/${main_file_dir}")
-    endif()
-    if (NOT IS_ABSOLUTE ${_WCD_OUTPUT_DIR})
-      set(_WCD_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/${_WCD_OUTPUT_DIR}")
-    endif()
-    get_filename_component(out_file_dir ${_WCD_OUTPUT_DIR} ABSOLUTE)
-    string(FIND ${out_file_dir} ${main_file_dir} idx)
-    if (NOT idx EQUAL 0)
-      message(FATAL_ERROR "The compiler-specific output directory must be within the same directory as the main file.")
-    endif()
-
-    if (main_file_dir STREQUAL out_file_dir)
-      unset(_WCD_OUTPUT_DIR)
-    else()
-      string(REPLACE "${main_file_dir}/" "" _WCD_OUTPUT_DIR "${out_file_dir}/")
-    endif()
-  endif()
-
-  set(compilers
-    GNU
-    Clang
-    AppleClang
-    MSVC
-    SunPro
-    Intel
-  )
-
-  set(_hex_compilers ADSP Borland Embarcadero SunPro)
-
-  foreach(_comp ${_WCD_COMPILERS})
-    list(FIND compilers ${_comp} idx)
-    if (idx EQUAL -1)
-      message(FATAL_ERROR "Unsupported compiler ${_comp}.")
-    endif()
-    if (NOT _need_hex_conversion)
-      list(FIND _hex_compilers ${_comp} idx)
-      if (NOT idx EQUAL -1)
-        set(_need_hex_conversion TRUE)
-      endif()
-    endif()
-  endforeach()
-
-  set(file_content "
-// This is a generated file. Do not edit!
-
-#ifndef ${prefix_arg}_COMPILER_DETECTION_H
-#define ${prefix_arg}_COMPILER_DETECTION_H
-")
-
-  if (_WCD_PROLOG)
-    string(APPEND file_content "\n${_WCD_PROLOG}\n")
-  endif()
-
-  if (_need_hex_conversion)
-    string(APPEND file_content "
-#define ${prefix_arg}_DEC(X) (X)
-#define ${prefix_arg}_HEX(X) ( \\
-    ((X)>>28 & 0xF) * 10000000 + \\
-    ((X)>>24 & 0xF) *  1000000 + \\
-    ((X)>>20 & 0xF) *   100000 + \\
-    ((X)>>16 & 0xF) *    10000 + \\
-    ((X)>>12 & 0xF) *     1000 + \\
-    ((X)>>8  & 0xF) *      100 + \\
-    ((X)>>4  & 0xF) *       10 + \\
-    ((X)     & 0xF) \\
-    )\n")
-  endif()
-
-  _check_feature_lists(C_features CXX_features ${_WCD_FEATURES})
-  _check_feature_lists(C_bare_features CXX_bare_features ${_WCD_BARE_FEATURES})
-  list(REMOVE_DUPLICATES _langs)
-
-  if(_WCD_OUTPUT_FILES_VAR)
-    get_filename_component(main_file_name ${file_arg} NAME)
-    set(compiler_file_content_
-"#ifndef ${prefix_arg}_COMPILER_DETECTION_H
-#  error This file may only be included from ${main_file_name}
-#endif\n")
-  endif()
-
-  foreach(_lang ${_langs})
-    set(target_compilers)
-    foreach(compiler ${_WCD_COMPILERS})
-      _load_compiler_variables(${compiler} ${_lang} ${${_lang}_features})
-      if(_cmake_oldestSupported_${compiler})
-        list(APPEND target_compilers ${compiler})
-      endif()
-    endforeach()
-
-    get_property(known_features GLOBAL PROPERTY CMAKE_${_lang}_KNOWN_FEATURES)
-    foreach(feature ${${_lang}_features})
-      list(FIND known_features ${feature} idx)
-      if (idx EQUAL -1)
-        message(FATAL_ERROR "Unsupported feature ${feature}.")
-      endif()
-    endforeach()
-
-    if(_lang STREQUAL CXX)
-      string(APPEND file_content "\n#ifdef __cplusplus\n")
-    else()
-      string(APPEND file_content "\n#ifndef __cplusplus\n")
-    endif()
-
-    compiler_id_detection(ID_CONTENT ${_lang} PREFIX ${prefix_arg}_
-      ID_DEFINE
-    )
-
-    string(APPEND file_content "${ID_CONTENT}\n")
-
-    set(pp_if "if")
-    foreach(compiler ${target_compilers})
-      string(APPEND file_content "\n#  ${pp_if} ${prefix_arg}_COMPILER_IS_${compiler}\n")
-
-      if(_WCD_OUTPUT_FILES_VAR)
-        set(compile_file_name "${_WCD_OUTPUT_DIR}${prefix_arg}_COMPILER_INFO_${compiler}_${_lang}.h")
-        string(APPEND file_content "\n#    include \"${compile_file_name}\"\n")
-      endif()
-
-      if(_WCD_OUTPUT_FILES_VAR)
-        set(compiler_file_content compiler_file_content_${compiler}_${_lang})
-      else()
-        set(compiler_file_content file_content)
-      endif()
-
-      if(NOT _WCD_ALLOW_UNKNOWN_COMPILER_VERSIONS)
-        string(APPEND ${compiler_file_content} "
-#    if !(${_cmake_oldestSupported_${compiler}})
-#      error Unsupported compiler version
-#    endif\n")
-      endif()
-
-      set(PREFIX ${prefix_arg}_)
-      if (_need_hex_conversion)
-        set(MACRO_DEC ${prefix_arg}_DEC)
-        set(MACRO_HEX ${prefix_arg}_HEX)
-      else()
-        set(MACRO_DEC)
-        set(MACRO_HEX)
-      endif()
-      string(CONFIGURE "${_compiler_id_version_compute_${compiler}}" VERSION_BLOCK @ONLY)
-      string(APPEND ${compiler_file_content} "${VERSION_BLOCK}\n")
-      set(PREFIX)
-      set(MACRO_DEC)
-      set(MACRO_HEX)
-
-      set(pp_if "elif")
-      foreach(feature ${${_lang}_features})
-        string(TOUPPER ${feature} feature_upper)
-        set(feature_PP "COMPILER_${feature_upper}")
-        set(_define_item "\n#    define ${prefix_arg}_${feature_PP} 0\n")
-        if (_cmake_feature_test_${compiler}_${feature} STREQUAL "1")
-          set(_define_item "\n#    define ${prefix_arg}_${feature_PP} 1\n")
-        elseif (_cmake_feature_test_${compiler}_${feature})
-          set(_define_item "\n#      define ${prefix_arg}_${feature_PP} 0\n")
-          set(_define_item "\n#    if ${_cmake_feature_test_${compiler}_${feature}}\n#      define ${prefix_arg}_${feature_PP} 1\n#    else${_define_item}#    endif\n")
-        endif()
-        string(APPEND ${compiler_file_content} "${_define_item}")
-      endforeach()
-    endforeach()
-    if(pp_if STREQUAL "elif")
-      if(_WCD_ALLOW_UNKNOWN_COMPILERS)
-        string(APPEND file_content "
-#  endif\n")
-      else()
-        string(APPEND file_content "
-#  else
-#    error Unsupported compiler
-#  endif\n")
-      endif()
-    endif()
-    foreach(feature ${${_lang}_features})
-      string(TOUPPER ${feature} feature_upper)
-      set(feature_PP "COMPILER_${feature_upper}")
-      set(def_name ${prefix_arg}_${feature_PP})
-      _simpledefine(c_restrict RESTRICT restrict "")
-      _simpledefine(cxx_constexpr CONSTEXPR constexpr "")
-      _simpledefine(cxx_final FINAL final "")
-      _simpledefine(cxx_override OVERRIDE override "")
-      if (feature STREQUAL cxx_static_assert)
-        set(def_value "${prefix_arg}_STATIC_ASSERT(X)")
-        set(def_value_msg "${prefix_arg}_STATIC_ASSERT_MSG(X, MSG)")
-        set(def_fallback "enum { ${prefix_arg}_STATIC_ASSERT_JOIN(${prefix_arg}StaticAssertEnum, __LINE__) = sizeof(${prefix_arg}StaticAssert<X>) }")
-        string(APPEND file_content "#  if defined(${def_name}) && ${def_name}
-#    define ${def_value} static_assert(X, #X)
-#    define ${def_value_msg} static_assert(X, MSG)
-#  else
-#    define ${prefix_arg}_STATIC_ASSERT_JOIN(X, Y) ${prefix_arg}_STATIC_ASSERT_JOIN_IMPL(X, Y)
-#    define ${prefix_arg}_STATIC_ASSERT_JOIN_IMPL(X, Y) X##Y
-template<bool> struct ${prefix_arg}StaticAssert;
-template<> struct ${prefix_arg}StaticAssert<true>{};
-#    define ${def_value} ${def_fallback}
-#    define ${def_value_msg} ${def_fallback}
-#  endif
-\n")
-      endif()
-      if (feature STREQUAL cxx_alignas)
-        set(def_value "${prefix_arg}_ALIGNAS(X)")
-        string(APPEND file_content "
-#  if defined(${def_name}) && ${def_name}
-#    define ${def_value} alignas(X)
-#  elif ${prefix_arg}_COMPILER_IS_GNU || ${prefix_arg}_COMPILER_IS_Clang || ${prefix_arg}_COMPILER_IS_AppleClang
-#    define ${def_value} __attribute__ ((__aligned__(X)))
-#  elif ${prefix_arg}_COMPILER_IS_MSVC
-#    define ${def_value} __declspec(align(X))
-#  else
-#    define ${def_value}
-#  endif
-\n")
-      endif()
-      if (feature STREQUAL cxx_alignof)
-        set(def_value "${prefix_arg}_ALIGNOF(X)")
-        string(APPEND file_content "
-#  if defined(${def_name}) && ${def_name}
-#    define ${def_value} alignof(X)
-#  elif ${prefix_arg}_COMPILER_IS_GNU || ${prefix_arg}_COMPILER_IS_Clang || ${prefix_arg}_COMPILER_IS_AppleClang
-#    define ${def_value} __alignof__(X)
-#  elif ${prefix_arg}_COMPILER_IS_MSVC
-#    define ${def_value} __alignof(X)
-#  endif
-\n")
-      endif()
-      _simpledefine(cxx_deleted_functions DELETED_FUNCTION "= delete" "")
-      _simpledefine(cxx_extern_templates EXTERN_TEMPLATE extern "")
-      if (feature STREQUAL cxx_noexcept)
-        set(def_value "${prefix_arg}_NOEXCEPT")
-        string(APPEND file_content "
-#  if defined(${def_name}) && ${def_name}
-#    define ${def_value} noexcept
-#    define ${def_value}_EXPR(X) noexcept(X)
-#  else
-#    define ${def_value}
-#    define ${def_value}_EXPR(X)
-#  endif
-\n")
-      endif()
-      if (feature STREQUAL cxx_nullptr)
-        set(def_value "${prefix_arg}_NULLPTR")
-        string(APPEND file_content "
-#  if defined(${def_name}) && ${def_name}
-#    define ${def_value} nullptr
-#  elif ${prefix_arg}_COMPILER_IS_GNU
-#    define ${def_value} __null
-#  else
-#    define ${def_value} 0
-#  endif
-\n")
-      endif()
-      if (feature STREQUAL cxx_thread_local)
-        set(def_value "${prefix_arg}_THREAD_LOCAL")
-        string(APPEND file_content "
-#  if defined(${def_name}) && ${def_name}
-#    define ${def_value} thread_local
-#  elif ${prefix_arg}_COMPILER_IS_GNU || ${prefix_arg}_COMPILER_IS_Clang || ${prefix_arg}_COMPILER_IS_AppleClang
-#    define ${def_value} __thread
-#  elif ${prefix_arg}_COMPILER_IS_MSVC
-#    define ${def_value} __declspec(thread)
-#  else
-// ${def_value} not defined for this configuration.
-#  endif
-\n")
-      endif()
-      if (feature STREQUAL cxx_attribute_deprecated)
-        set(def_name ${prefix_arg}_${feature_PP})
-        set(def_value "${prefix_arg}_DEPRECATED")
-        string(APPEND file_content "
-#  ifndef ${def_value}
-#    if defined(${def_name}) && ${def_name}
-#      define ${def_value} [[deprecated]]
-#      define ${def_value}_MSG(MSG) [[deprecated(MSG)]]
-#    elif ${prefix_arg}_COMPILER_IS_GNU || ${prefix_arg}_COMPILER_IS_Clang
-#      define ${def_value} __attribute__((__deprecated__))
-#      define ${def_value}_MSG(MSG) __attribute__((__deprecated__(MSG)))
-#    elif ${prefix_arg}_COMPILER_IS_MSVC
-#      define ${def_value} __declspec(deprecated)
-#      define ${def_value}_MSG(MSG) __declspec(deprecated(MSG))
-#    else
-#      define ${def_value}
-#      define ${def_value}_MSG(MSG)
-#    endif
-#  endif
-\n")
-      endif()
-    endforeach()
-
-    foreach(feature ${${_lang}_bare_features})
-      string(TOUPPER ${feature} feature_upper)
-      set(feature_PP "COMPILER_${feature_upper}")
-      set(def_name ${prefix_arg}_${feature_PP})
-      _simplebaredefine(c_restrict restrict "")
-      _simplebaredefine(cxx_constexpr constexpr "")
-      _simplebaredefine(cxx_final final "")
-      _simplebaredefine(cxx_override override "")
-      if (feature STREQUAL cxx_nullptr)
-        set(def_value "nullptr")
-        string(APPEND file_content "
-#  if !(defined(${def_name}) && ${def_name})
-#    if ${prefix_arg}_COMPILER_IS_GNU
-#      define ${def_value} __null
-#    else
-#      define ${def_value} 0
-#    endif
-#  endif
-\n")
-      endif()
-      _simplebaredefine(cxx_noexcept noexcept "")
-    endforeach()
-
-    string(APPEND file_content "#endif\n")
-
-  endforeach()
-
-  if(_WCD_OUTPUT_FILES_VAR)
-    foreach(compiler ${_WCD_COMPILERS})
-      foreach(_lang ${_langs})
-        if(compiler_file_content_${compiler}_${_lang})
-          set(CMAKE_CONFIGURABLE_FILE_CONTENT "${compiler_file_content_}")
-          string(APPEND CMAKE_CONFIGURABLE_FILE_CONTENT "${compiler_file_content_${compiler}_${_lang}}")
-
-          set(compile_file_name "${_WCD_OUTPUT_DIR}${prefix_arg}_COMPILER_INFO_${compiler}_${_lang}.h")
-          set(full_path "${main_file_dir}/${compile_file_name}")
-          list(APPEND ${_WCD_OUTPUT_FILES_VAR} ${full_path})
-          configure_file("${CMAKE_ROOT}/Modules/CMakeConfigurableFile.in"
-            "${full_path}"
-            @ONLY
-          )
-        endif()
-      endforeach()
-    endforeach()
-    set(${_WCD_OUTPUT_FILES_VAR} ${${_WCD_OUTPUT_FILES_VAR}} PARENT_SCOPE)
-  endif()
-
-  if (_WCD_EPILOG)
-    string(APPEND file_content "\n${_WCD_EPILOG}\n")
-  endif()
-  string(APPEND file_content "\n#endif")
-
-  set(CMAKE_CONFIGURABLE_FILE_CONTENT ${file_content})
-  configure_file("${CMAKE_ROOT}/Modules/CMakeConfigurableFile.in"
-    "${file_arg}"
-    @ONLY
-  )
-endfunction()
diff --git a/share/cmake-3.18/Modules/javaTargets.cmake.in b/share/cmake-3.18/Modules/javaTargets.cmake.in
deleted file mode 100644
index c5f9c78..0000000
--- a/share/cmake-3.18/Modules/javaTargets.cmake.in
+++ /dev/null
@@ -1,39 +0,0 @@
-cmake_minimum_required(VERSION 2.8)
-cmake_policy(PUSH)
-cmake_policy(VERSION 2.8)
-
-#----------------------------------------------------------------
-# Generated CMake Java target import file.
-#----------------------------------------------------------------
-
-# Protect against multiple inclusion, which would fail when already imported targets are added once more.
-set(_targetsDefined)
-set(_targetsNotDefined)
-set(_expectedTargets)
-foreach(_expectedTarget @__targets__@)
-  list(APPEND _expectedTargets ${_expectedTarget})
-  if(TARGET ${_expectedTarget})
-    list(APPEND _targetsDefined ${_expectedTarget})
-  else()
-    list(APPEND _targetsNotDefined ${_expectedTarget})
-  endif()
-endforeach()
-if("%${_targetsDefined}" STREQUAL "%${_expectedTargets}")
-  unset(_targetsDefined)
-  unset(_targetsNotDefined)
-  unset(_expectedTargets)
-  cmake_policy(POP)
-  return()
-endif()
-if(NOT "${_targetsDefined}" STREQUAL "")
-  message(FATAL_ERROR
-    "Some (but not all) targets in this export set were already defined.\n"
-    "Targets Defined: ${_targetsDefined}\n"
-    "Targets not yet defined: ${_targetsNotDefined}\n")
-endif()
-unset(_targetsDefined)
-unset(_targetsNotDefined)
-unset(_expectedTargets)
-
-@__targetdefs__@
-cmake_policy(POP)
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v10_CSharp.json b/share/cmake-3.18/Templates/MSBuild/FlagTables/v10_CSharp.json
deleted file mode 100644
index 5989aea..0000000
--- a/share/cmake-3.18/Templates/MSBuild/FlagTables/v10_CSharp.json
+++ /dev/null
@@ -1,574 +0,0 @@
-[
-  {
-    "name":  "ProjectName",
-    "switch": "out:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "OutputType",
-    "switch": "target:exe",
-    "comment": "",
-    "value": "Exe",
-    "flags": []
-  },
-  {
-    "name":  "OutputType",
-    "switch": "target:winexe",
-    "comment": "",
-    "value": "Winexe",
-    "flags": []
-  },
-  {
-    "name":  "OutputType",
-    "switch": "target:library",
-    "comment": "",
-    "value": "Library",
-    "flags": []
-  },
-  {
-    "name":  "OutputType",
-    "switch": "target:module",
-    "comment": "",
-    "value": "Module",
-    "flags": []
-  },
-  {
-    "name":  "DocumentationFile",
-    "switch": "doc",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:x86",
-    "comment": "",
-    "value": "x86",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:Itanium",
-    "comment": "",
-    "value": "Itanium",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:x64",
-    "comment": "",
-    "value": "x64",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:arm",
-    "comment": "",
-    "value": "arm",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:anycpu32bitpreferred",
-    "comment": "",
-    "value": "anycpu32bitpreferred",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:anycpu",
-    "comment": "",
-    "value": "anycpu",
-    "flags": []
-  },
-  {
-    "name":  "References",
-    "switch": "reference:",
-    "comment": "mit alias",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "References",
-    "switch": "reference:",
-    "comment": "dateiliste",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "AddModules",
-    "switch": "addmodule:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name":  "Win32Resource",
-    "switch": "win32res:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "ApplicationIcon",
-    "switch": "win32icon:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "ApplicationManifest",
-    "switch": "win32manifest:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "NoWin32Manifest",
-    "switch": "nowin32manifest",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DefineDebug",
-    "switch": "debug",
-    "comment": "",
-    "value": "true",
-    "flags": [
-      "Continue"
-    ]
-  },
-  {
-    "name":  "DebugSymbols",
-    "switch": "debug",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DebugSymbols",
-    "switch": "debug-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "DebugSymbols",
-    "switch": "debug+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DebugType",
-    "switch": "debug:none",
-    "comment": "",
-    "value": "none",
-    "flags": []
-  },
-  {
-    "name":  "DebugType",
-    "switch": "debug:full",
-    "comment": "",
-    "value": "full",
-    "flags": []
-  },
-  {
-    "name":  "DebugType",
-    "switch": "debug:pdbonly",
-    "comment": "",
-    "value": "pdbonly",
-    "flags": []
-  },
-  {
-    "name":  "Optimize",
-    "switch": "optimize",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "Optimize",
-    "switch": "optimize-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "Optimize",
-    "switch": "optimize+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "TreatWarningsAsErrors",
-    "switch": "warnaserror",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "TreatWarningsAsErrors",
-    "switch": "warnaserror-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "TreatWarningsAsErrors",
-    "switch": "warnaserror+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "WarningsAsErrors",
-    "switch": "warnaserror",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "WarningsAsErrors",
-    "switch": "warnaserror-",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "WarningsAsErrors",
-    "switch": "warnaserror+",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:0",
-    "comment": "",
-    "value": "0",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:1",
-    "comment": "",
-    "value": "1",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:2",
-    "comment": "",
-    "value": "2",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:3",
-    "comment": "",
-    "value": "3",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:4",
-    "comment": "",
-    "value": "4",
-    "flags": []
-  },
-  {
-    "name":  "NoWarn",
-    "switch": "nowarn:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired",
-      "CommaAppendable"
-    ]
-  },
-  {
-    "name":  "CheckForOverflowUnderflow",
-    "switch": "checked",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "CheckForOverflowUnderflow",
-    "switch": "checked-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "CheckForOverflowUnderflow",
-    "switch": "checked+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "AllowUnsafeBlocks",
-    "switch": "unsafe",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "AllowUnsafeBlocks",
-    "switch": "unsafe-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "AllowUnsafeBlocks",
-    "switch": "unsafe+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DefineConstants",
-    "switch": "define:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "SemicolonAppendable",
-      "UserValue"
-    ]
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:ISO-1",
-    "comment": "",
-    "value": "ISO-1",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:ISO-2",
-    "comment": "",
-    "value": "ISO-2",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:3",
-    "comment": "",
-    "value": "3",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:4",
-    "comment": "",
-    "value": "4",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:5",
-    "comment": "",
-    "value": "5",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:6",
-    "comment": "",
-    "value": "6",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:default",
-    "comment": "",
-    "value": "default",
-    "flags": []
-  },
-  {
-    "name":  "DelaySign",
-    "switch": "delaysign",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DelaySign",
-    "switch": "delaysign-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "DelaySign",
-    "switch": "delaysign+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "AssemblyOriginatorKeyFile",
-    "switch": "keyfile",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "KeyContainerName",
-    "switch": "keycontainer",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "NoLogo",
-    "switch": "nologo",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "NoConfig",
-    "switch": "noconfig",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "BaseAddress",
-    "switch": "baseaddress:",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "CodePage",
-    "switch": "codepage",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "Utf8Output",
-    "switch": "utf8output",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "MainEntryPoint",
-    "switch": "main:",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "GenerateFullPaths",
-    "switch": "fullpaths",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "FileAlignment",
-    "switch": "filealign",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "PdbFile",
-    "switch": "pdb:",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "NoStandardLib",
-    "switch": "nostdlib",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "NoStandardLib",
-    "switch": "nostdlib-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "NoStandardLib",
-    "switch": "nostdlib+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "SubsystemVersion",
-    "switch": "subsystemversion",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "AdditionalLibPaths",
-    "switch": "lib:",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "ErrorReport",
-    "switch": "errorreport:none",
-    "comment": "Do Not Send Report",
-    "value": "none",
-    "flags": []
-  },
-  {
-    "name":  "ErrorReport",
-    "switch": "errorreport:prompt",
-    "comment": "Prompt Immediately",
-    "value": "prompt",
-    "flags": []
-  },
-  {
-    "name":  "ErrorReport",
-    "switch": "errorreport:queue",
-    "comment": "Queue For Next Login",
-    "value": "queue",
-    "flags": []
-  },
-  {
-    "name":  "ErrorReport",
-    "switch": "errorreport:send",
-    "comment": "Send Automatically",
-    "value": "send",
-    "flags": []
-  }
-]
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v10_Link.json b/share/cmake-3.18/Templates/MSBuild/FlagTables/v10_Link.json
deleted file mode 100644
index ac5b8b1..0000000
--- a/share/cmake-3.18/Templates/MSBuild/FlagTables/v10_Link.json
+++ /dev/null
@@ -1,1137 +0,0 @@
-[
-  {
-    "name": "ShowProgress",
-    "switch": "",
-    "comment": "Not Set",
-    "value": "NotSet",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE",
-    "comment": "Display all progress messages",
-    "value": "LinkVerbose",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:Lib",
-    "comment": "For Libraries Searched",
-    "value": "LinkVerboseLib",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:ICF",
-    "comment": "About COMDAT folding during optimized linking",
-    "value": "LinkVerboseICF",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:REF",
-    "comment": "About data removed during optimized linking",
-    "value": "LinkVerboseREF",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:SAFESEH",
-    "comment": "About Modules incompatible with SEH",
-    "value": "LinkVerboseSAFESEH",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:CLR",
-    "comment": "About linker activity related to managed code",
-    "value": "LinkVerboseCLR",
-    "flags": []
-  },
-  {
-    "name": "ForceFileOutput",
-    "switch": "FORCE",
-    "comment": "Enabled",
-    "value": "Enabled",
-    "flags": []
-  },
-  {
-    "name": "ForceFileOutput",
-    "switch": "FORCE:MULTIPLE",
-    "comment": "Multiply Defined Symbol Only",
-    "value": "MultiplyDefinedSymbolOnly",
-    "flags": []
-  },
-  {
-    "name": "ForceFileOutput",
-    "switch": "FORCE:UNRESOLVED",
-    "comment": "Undefined Symbol Only",
-    "value": "UndefinedSymbolOnly",
-    "flags": []
-  },
-  {
-    "name": "CreateHotPatchableImage",
-    "switch": "FUNCTIONPADMIN",
-    "comment": "Enabled",
-    "value": "Enabled",
-    "flags": []
-  },
-  {
-    "name": "CreateHotPatchableImage",
-    "switch": "FUNCTIONPADMIN:5",
-    "comment": "X86 Image Only",
-    "value": "X86Image",
-    "flags": []
-  },
-  {
-    "name": "CreateHotPatchableImage",
-    "switch": "FUNCTIONPADMIN:6",
-    "comment": "X64 Image Only",
-    "value": "X64Image",
-    "flags": []
-  },
-  {
-    "name": "CreateHotPatchableImage",
-    "switch": "FUNCTIONPADMIN:16",
-    "comment": "Itanium Image Only",
-    "value": "ItaniumImage",
-    "flags": []
-  },
-  {
-    "name": "UACExecutionLevel",
-    "switch": "level='asInvoker'",
-    "comment": "asInvoker",
-    "value": "AsInvoker",
-    "flags": []
-  },
-  {
-    "name": "UACExecutionLevel",
-    "switch": "level='highestAvailable'",
-    "comment": "highestAvailable",
-    "value": "HighestAvailable",
-    "flags": []
-  },
-  {
-    "name": "UACExecutionLevel",
-    "switch": "level='requireAdministrator'",
-    "comment": "requireAdministrator",
-    "value": "RequireAdministrator",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "",
-    "comment": "Not Set",
-    "value": "NotSet",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:CONSOLE",
-    "comment": "Console",
-    "value": "Console",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:WINDOWS",
-    "comment": "Windows",
-    "value": "Windows",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:NATIVE",
-    "comment": "Native",
-    "value": "Native",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:EFI_APPLICATION",
-    "comment": "EFI Application",
-    "value": "EFI Application",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
-    "comment": "EFI Boot Service Driver",
-    "value": "EFI Boot Service Driver",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:EFI_ROM",
-    "comment": "EFI ROM",
-    "value": "EFI ROM",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:EFI_RUNTIME_DRIVER",
-    "comment": "EFI Runtime",
-    "value": "EFI Runtime",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:WINDOWSCE",
-    "comment": "WindowsCE",
-    "value": "WindowsCE",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:POSIX",
-    "comment": "POSIX",
-    "value": "POSIX",
-    "flags": []
-  },
-  {
-    "name": "Driver",
-    "switch": "",
-    "comment": "Not Set",
-    "value": "NotSet",
-    "flags": []
-  },
-  {
-    "name": "Driver",
-    "switch": "Driver",
-    "comment": "Driver",
-    "value": "Driver",
-    "flags": []
-  },
-  {
-    "name": "Driver",
-    "switch": "DRIVER:UPONLY",
-    "comment": "UP Only",
-    "value": "UpOnly",
-    "flags": []
-  },
-  {
-    "name": "Driver",
-    "switch": "DRIVER:WDM",
-    "comment": "WDM",
-    "value": "WDM",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "",
-    "comment": "Default",
-    "value": "Default",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "LTCG",
-    "comment": "Use Link Time Code Generation",
-    "value": "UseLinkTimeCodeGeneration",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "LTCG:PGInstrument",
-    "comment": "Profile Guided Optimization - Instrument",
-    "value": "PGInstrument",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "LTCG:PGOptimize",
-    "comment": "Profile Guided Optimization - Optimization",
-    "value": "PGOptimization",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "LTCG:PGUpdate",
-    "comment": "Profile Guided Optimization - Update",
-    "value": "PGUpdate",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "",
-    "comment": "Not Set",
-    "value": "NotSet",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:ARM",
-    "comment": "MachineARM",
-    "value": "MachineARM",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:EBC",
-    "comment": "MachineEBC",
-    "value": "MachineEBC",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:IA64",
-    "comment": "MachineIA64",
-    "value": "MachineIA64",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:MIPS",
-    "comment": "MachineMIPS",
-    "value": "MachineMIPS",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:MIPS16",
-    "comment": "MachineMIPS16",
-    "value": "MachineMIPS16",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:MIPSFPU",
-    "comment": "MachineMIPSFPU",
-    "value": "MachineMIPSFPU",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:MIPSFPU16",
-    "comment": "MachineMIPSFPU16",
-    "value": "MachineMIPSFPU16",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:SH4",
-    "comment": "MachineSH4",
-    "value": "MachineSH4",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:THUMB",
-    "comment": "MachineTHUMB",
-    "value": "MachineTHUMB",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:X64",
-    "comment": "MachineX64",
-    "value": "MachineX64",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:X86",
-    "comment": "MachineX86",
-    "value": "MachineX86",
-    "flags": []
-  },
-  {
-    "name": "CLRThreadAttribute",
-    "switch": "CLRTHREADATTRIBUTE:MTA",
-    "comment": "MTA threading attribute",
-    "value": "MTAThreadingAttribute",
-    "flags": []
-  },
-  {
-    "name": "CLRThreadAttribute",
-    "switch": "CLRTHREADATTRIBUTE:STA",
-    "comment": "STA threading attribute",
-    "value": "STAThreadingAttribute",
-    "flags": []
-  },
-  {
-    "name": "CLRThreadAttribute",
-    "switch": "CLRTHREADATTRIBUTE:NONE",
-    "comment": "Default threading attribute",
-    "value": "DefaultThreadingAttribute",
-    "flags": []
-  },
-  {
-    "name": "CLRImageType",
-    "switch": "CLRIMAGETYPE:IJW",
-    "comment": "Force IJW image",
-    "value": "ForceIJWImage",
-    "flags": []
-  },
-  {
-    "name": "CLRImageType",
-    "switch": "CLRIMAGETYPE:PURE",
-    "comment": "Force Pure IL Image",
-    "value": "ForcePureILImage",
-    "flags": []
-  },
-  {
-    "name": "CLRImageType",
-    "switch": "CLRIMAGETYPE:SAFE",
-    "comment": "Force Safe IL Image",
-    "value": "ForceSafeILImage",
-    "flags": []
-  },
-  {
-    "name": "CLRImageType",
-    "switch": "",
-    "comment": "Default image type",
-    "value": "Default",
-    "flags": []
-  },
-  {
-    "name": "LinkErrorReporting",
-    "switch": "ERRORREPORT:PROMPT",
-    "comment": "PromptImmediately",
-    "value": "PromptImmediately",
-    "flags": []
-  },
-  {
-    "name": "LinkErrorReporting",
-    "switch": "ERRORREPORT:QUEUE",
-    "comment": "Queue For Next Login",
-    "value": "QueueForNextLogin",
-    "flags": []
-  },
-  {
-    "name": "LinkErrorReporting",
-    "switch": "ERRORREPORT:SEND",
-    "comment": "Send Error Report",
-    "value": "SendErrorReport",
-    "flags": []
-  },
-  {
-    "name": "LinkErrorReporting",
-    "switch": "ERRORREPORT:NONE",
-    "comment": "No Error Report",
-    "value": "NoErrorReport",
-    "flags": []
-  },
-  {
-    "name": "CLRSupportLastError",
-    "switch": "CLRSupportLastError",
-    "comment": "Enabled",
-    "value": "Enabled",
-    "flags": []
-  },
-  {
-    "name": "CLRSupportLastError",
-    "switch": "CLRSupportLastError:NO",
-    "comment": "Disabled",
-    "value": "Disabled",
-    "flags": []
-  },
-  {
-    "name": "CLRSupportLastError",
-    "switch": "CLRSupportLastError:SYSTEMDLL",
-    "comment": "System Dlls Only",
-    "value": "SystemDlls",
-    "flags": []
-  },
-  {
-    "name": "LinkIncremental",
-    "switch": "INCREMENTAL:NO",
-    "comment": "Enable Incremental Linking",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "LinkIncremental",
-    "switch": "INCREMENTAL",
-    "comment": "Enable Incremental Linking",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SuppressStartupBanner",
-    "switch": "NOLOGO",
-    "comment": "Suppress Startup Banner",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "LinkStatus",
-    "switch": "LTCG:NOSTATUS",
-    "comment": "Link Status",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "LinkStatus",
-    "switch": "LTCG:STATUS",
-    "comment": "Link Status",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "PreventDllBinding",
-    "switch": "ALLOWBIND:NO",
-    "comment": "Prevent Dll Binding",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "PreventDllBinding",
-    "switch": "ALLOWBIND",
-    "comment": "Prevent Dll Binding",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "TreatLinkerWarningAsErrors",
-    "switch": "WX:NO",
-    "comment": "Treat Linker Warning As Errors",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "TreatLinkerWarningAsErrors",
-    "switch": "WX",
-    "comment": "Treat Linker Warning As Errors",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "IgnoreAllDefaultLibraries",
-    "switch": "NODEFAULTLIB",
-    "comment": "Ignore All Default Libraries",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "GenerateManifest",
-    "switch": "MANIFEST:NO",
-    "comment": "Generate Manifest",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "GenerateManifest",
-    "switch": "MANIFEST",
-    "comment": "Generate Manifest",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "AllowIsolation",
-    "switch": "ALLOWISOLATION:NO",
-    "comment": "Allow Isolation",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "AllowIsolation",
-    "switch": "ALLOWISOLATION",
-    "comment": "Allow Isolation",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "EnableUAC",
-    "switch": "MANIFESTUAC:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired",
-      "SpaceAppendable"
-    ]
-  },
-  {
-    "name": "UACUIAccess",
-    "switch": "uiAccess='false'",
-    "comment": "UAC Bypass UI Protection",
-    "value": "false",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "UACUIAccess",
-    "switch": "uiAccess='false'",
-    "comment": "UAC Bypass UI Protection",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "UACUIAccess",
-    "switch": "uiAccess='true'",
-    "comment": "UAC Bypass UI Protection",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "GenerateDebugInformation",
-    "switch": "DEBUG",
-    "comment": "Generate Debug Info",
-    "value": "true",
-    "flags": [
-      "CaseInsensitive"
-    ]
-  },
-  {
-    "name": "GenerateMapFile",
-    "switch": "MAP",
-    "comment": "Generate Map File",
-    "value": "true",
-    "flags": [
-      "UserValue",
-      "UserIgnored",
-      "Continue"
-    ]
-  },
-  {
-    "name": "MapExports",
-    "switch": "MAPINFO:EXPORTS",
-    "comment": "Map Exports",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "AssemblyDebug",
-    "switch": "ASSEMBLYDEBUG:DISABLE",
-    "comment": "Debuggable Assembly",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "AssemblyDebug",
-    "switch": "ASSEMBLYDEBUG",
-    "comment": "Debuggable Assembly",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "LargeAddressAware",
-    "switch": "LARGEADDRESSAWARE:NO",
-    "comment": "Enable Large Addresses",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "LargeAddressAware",
-    "switch": "LARGEADDRESSAWARE",
-    "comment": "Enable Large Addresses",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "TerminalServerAware",
-    "switch": "TSAWARE:NO",
-    "comment": "Terminal Server",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "TerminalServerAware",
-    "switch": "TSAWARE",
-    "comment": "Terminal Server",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SwapRunFromCD",
-    "switch": "SWAPRUN:CD",
-    "comment": "Swap Run From CD",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SwapRunFromNET",
-    "switch": "SWAPRUN:NET",
-    "comment": "Swap Run From Network",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "OptimizeReferences",
-    "switch": "OPT:NOREF",
-    "comment": "References",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "OptimizeReferences",
-    "switch": "OPT:REF",
-    "comment": "References",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "EnableCOMDATFolding",
-    "switch": "OPT:NOICF",
-    "comment": "Enable COMDAT Folding",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "EnableCOMDATFolding",
-    "switch": "OPT:ICF",
-    "comment": "Enable COMDAT Folding",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "IgnoreEmbeddedIDL",
-    "switch": "IGNOREIDL",
-    "comment": "Ignore Embedded IDL",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "NoEntryPoint",
-    "switch": "NOENTRY",
-    "comment": "No Entry Point",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SetChecksum",
-    "switch": "RELEASE",
-    "comment": "Set Checksum",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "RandomizedBaseAddress",
-    "switch": "DYNAMICBASE:NO",
-    "comment": "Randomized Base Address",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "RandomizedBaseAddress",
-    "switch": "DYNAMICBASE",
-    "comment": "Randomized Base Address",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "FixedBaseAddress",
-    "switch": "FIXED:NO",
-    "comment": "Fixed Base Address",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "FixedBaseAddress",
-    "switch": "FIXED",
-    "comment": "Fixed Base Address",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "DataExecutionPrevention",
-    "switch": "NXCOMPAT:NO",
-    "comment": "Data Execution Prevention (DEP)",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "DataExecutionPrevention",
-    "switch": "NXCOMPAT",
-    "comment": "Data Execution Prevention (DEP)",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "TurnOffAssemblyGeneration",
-    "switch": "NOASSEMBLY",
-    "comment": "Turn Off Assembly Generation",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SupportUnloadOfDelayLoadedDLL",
-    "switch": "DELAY:UNLOAD",
-    "comment": "Unload delay loaded DLL",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SupportNobindOfDelayLoadedDLL",
-    "switch": "DELAY:NOBIND",
-    "comment": "Nobind delay loaded DLL",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "Profile",
-    "switch": "PROFILE",
-    "comment": "Profile",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "LinkDelaySign",
-    "switch": "DELAYSIGN:NO",
-    "comment": "Delay Sign",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "LinkDelaySign",
-    "switch": "DELAYSIGN",
-    "comment": "Delay Sign",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "CLRUnmanagedCodeCheck",
-    "switch": "CLRUNMANAGEDCODECHECK:NO",
-    "comment": "CLR Unmanaged Code Check",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "CLRUnmanagedCodeCheck",
-    "switch": "CLRUNMANAGEDCODECHECK",
-    "comment": "CLR Unmanaged Code Check",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "ImageHasSafeExceptionHandlers",
-    "switch": "SAFESEH:NO",
-    "comment": "Image Has Safe Exception Handlers",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "ImageHasSafeExceptionHandlers",
-    "switch": "SAFESEH",
-    "comment": "Image Has Safe Exception Handlers",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "LinkDLL",
-    "switch": "DLL",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "AdditionalLibraryDirectories",
-    "switch": "LIBPATH:",
-    "comment": "Additional Library Directories",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "IgnoreSpecificDefaultLibraries",
-    "switch": "NODEFAULTLIB:",
-    "comment": "Ignore Specific Default Libraries",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "AddModuleNamesToAssembly",
-    "switch": "ASSEMBLYMODULE:",
-    "comment": "Add Module to Assembly",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "EmbedManagedResourceFile",
-    "switch": "ASSEMBLYRESOURCE:",
-    "comment": "Embed Managed Resource File",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "ForceSymbolReferences",
-    "switch": "INCLUDE:",
-    "comment": "Force Symbol References",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "DelayLoadDLLs",
-    "switch": "DELAYLOAD:",
-    "comment": "Delay Loaded Dlls",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "AssemblyLinkResource",
-    "switch": "ASSEMBLYLINKRESOURCE:",
-    "comment": "Assembly Link Resource",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "AdditionalManifestDependencies",
-    "switch": "MANIFESTDEPENDENCY:",
-    "comment": "Additional Manifest Dependencies",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "OutputFile",
-    "switch": "OUT:",
-    "comment": "Output File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "Version",
-    "switch": "VERSION:",
-    "comment": "Version",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "SpecifySectionAttributes",
-    "switch": "SECTION:",
-    "comment": "Specify Section Attributes",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MSDOSStubFileName",
-    "switch": "STUB:",
-    "comment": "MS-DOS Stub File Name",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ModuleDefinitionFile",
-    "switch": "DEF:",
-    "comment": "Module Definition File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ManifestFile",
-    "switch": "ManifestFile:",
-    "comment": "Manifest File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ProgramDatabaseFile",
-    "switch": "PDB:",
-    "comment": "Generate Program Database File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "StripPrivateSymbols",
-    "switch": "PDBSTRIPPED:",
-    "comment": "Strip Private Symbols",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MapFileName",
-    "switch": "MAP:",
-    "comment": "Map File Name",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "HeapReserveSize",
-    "switch": "HEAP:",
-    "comment": "Heap Reserve Size",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "HeapCommitSize",
-    "switch": "HEAP",
-    "comment": "Heap Commit Size",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "StackReserveSize",
-    "switch": "STACK:",
-    "comment": "Stack Reserve Size",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "StackCommitSize",
-    "switch": "STACK",
-    "comment": "Stack Commit Size",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "FunctionOrder",
-    "switch": "ORDER:@",
-    "comment": "Function Order",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ProfileGuidedDatabase",
-    "switch": "PGD:",
-    "comment": "Profile Guided Database",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MidlCommandFile",
-    "switch": "MIDL:@",
-    "comment": "MIDL Commands",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MergedIDLBaseFileName",
-    "switch": "IDLOUT:",
-    "comment": "Merged IDL Base File Name",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "TypeLibraryFile",
-    "switch": "TLBOUT:",
-    "comment": "Type Library",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "EntryPointSymbol",
-    "switch": "ENTRY:",
-    "comment": "Entry Point",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "BaseAddress",
-    "switch": "BASE:",
-    "comment": "Base Address",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ImportLibrary",
-    "switch": "IMPLIB:",
-    "comment": "Import Library",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MergeSections",
-    "switch": "MERGE:",
-    "comment": "Merge Sections",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "LinkKeyFile",
-    "switch": "KEYFILE:",
-    "comment": "Key File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "KeyContainer",
-    "switch": "KEYCONTAINER:",
-    "comment": "Key Container",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "TypeLibraryResourceID",
-    "switch": "TLBID:",
-    "comment": "TypeLib Resource ID",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "SectionAlignment",
-    "switch": "ALIGN:",
-    "comment": "SectionAlignment",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  }
-]
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v11_CSharp.json b/share/cmake-3.18/Templates/MSBuild/FlagTables/v11_CSharp.json
deleted file mode 100644
index 5989aea..0000000
--- a/share/cmake-3.18/Templates/MSBuild/FlagTables/v11_CSharp.json
+++ /dev/null
@@ -1,574 +0,0 @@
-[
-  {
-    "name":  "ProjectName",
-    "switch": "out:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "OutputType",
-    "switch": "target:exe",
-    "comment": "",
-    "value": "Exe",
-    "flags": []
-  },
-  {
-    "name":  "OutputType",
-    "switch": "target:winexe",
-    "comment": "",
-    "value": "Winexe",
-    "flags": []
-  },
-  {
-    "name":  "OutputType",
-    "switch": "target:library",
-    "comment": "",
-    "value": "Library",
-    "flags": []
-  },
-  {
-    "name":  "OutputType",
-    "switch": "target:module",
-    "comment": "",
-    "value": "Module",
-    "flags": []
-  },
-  {
-    "name":  "DocumentationFile",
-    "switch": "doc",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:x86",
-    "comment": "",
-    "value": "x86",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:Itanium",
-    "comment": "",
-    "value": "Itanium",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:x64",
-    "comment": "",
-    "value": "x64",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:arm",
-    "comment": "",
-    "value": "arm",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:anycpu32bitpreferred",
-    "comment": "",
-    "value": "anycpu32bitpreferred",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:anycpu",
-    "comment": "",
-    "value": "anycpu",
-    "flags": []
-  },
-  {
-    "name":  "References",
-    "switch": "reference:",
-    "comment": "mit alias",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "References",
-    "switch": "reference:",
-    "comment": "dateiliste",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "AddModules",
-    "switch": "addmodule:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name":  "Win32Resource",
-    "switch": "win32res:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "ApplicationIcon",
-    "switch": "win32icon:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "ApplicationManifest",
-    "switch": "win32manifest:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "NoWin32Manifest",
-    "switch": "nowin32manifest",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DefineDebug",
-    "switch": "debug",
-    "comment": "",
-    "value": "true",
-    "flags": [
-      "Continue"
-    ]
-  },
-  {
-    "name":  "DebugSymbols",
-    "switch": "debug",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DebugSymbols",
-    "switch": "debug-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "DebugSymbols",
-    "switch": "debug+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DebugType",
-    "switch": "debug:none",
-    "comment": "",
-    "value": "none",
-    "flags": []
-  },
-  {
-    "name":  "DebugType",
-    "switch": "debug:full",
-    "comment": "",
-    "value": "full",
-    "flags": []
-  },
-  {
-    "name":  "DebugType",
-    "switch": "debug:pdbonly",
-    "comment": "",
-    "value": "pdbonly",
-    "flags": []
-  },
-  {
-    "name":  "Optimize",
-    "switch": "optimize",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "Optimize",
-    "switch": "optimize-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "Optimize",
-    "switch": "optimize+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "TreatWarningsAsErrors",
-    "switch": "warnaserror",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "TreatWarningsAsErrors",
-    "switch": "warnaserror-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "TreatWarningsAsErrors",
-    "switch": "warnaserror+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "WarningsAsErrors",
-    "switch": "warnaserror",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "WarningsAsErrors",
-    "switch": "warnaserror-",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "WarningsAsErrors",
-    "switch": "warnaserror+",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:0",
-    "comment": "",
-    "value": "0",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:1",
-    "comment": "",
-    "value": "1",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:2",
-    "comment": "",
-    "value": "2",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:3",
-    "comment": "",
-    "value": "3",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:4",
-    "comment": "",
-    "value": "4",
-    "flags": []
-  },
-  {
-    "name":  "NoWarn",
-    "switch": "nowarn:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired",
-      "CommaAppendable"
-    ]
-  },
-  {
-    "name":  "CheckForOverflowUnderflow",
-    "switch": "checked",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "CheckForOverflowUnderflow",
-    "switch": "checked-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "CheckForOverflowUnderflow",
-    "switch": "checked+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "AllowUnsafeBlocks",
-    "switch": "unsafe",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "AllowUnsafeBlocks",
-    "switch": "unsafe-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "AllowUnsafeBlocks",
-    "switch": "unsafe+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DefineConstants",
-    "switch": "define:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "SemicolonAppendable",
-      "UserValue"
-    ]
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:ISO-1",
-    "comment": "",
-    "value": "ISO-1",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:ISO-2",
-    "comment": "",
-    "value": "ISO-2",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:3",
-    "comment": "",
-    "value": "3",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:4",
-    "comment": "",
-    "value": "4",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:5",
-    "comment": "",
-    "value": "5",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:6",
-    "comment": "",
-    "value": "6",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:default",
-    "comment": "",
-    "value": "default",
-    "flags": []
-  },
-  {
-    "name":  "DelaySign",
-    "switch": "delaysign",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DelaySign",
-    "switch": "delaysign-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "DelaySign",
-    "switch": "delaysign+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "AssemblyOriginatorKeyFile",
-    "switch": "keyfile",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "KeyContainerName",
-    "switch": "keycontainer",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "NoLogo",
-    "switch": "nologo",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "NoConfig",
-    "switch": "noconfig",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "BaseAddress",
-    "switch": "baseaddress:",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "CodePage",
-    "switch": "codepage",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "Utf8Output",
-    "switch": "utf8output",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "MainEntryPoint",
-    "switch": "main:",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "GenerateFullPaths",
-    "switch": "fullpaths",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "FileAlignment",
-    "switch": "filealign",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "PdbFile",
-    "switch": "pdb:",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "NoStandardLib",
-    "switch": "nostdlib",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "NoStandardLib",
-    "switch": "nostdlib-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "NoStandardLib",
-    "switch": "nostdlib+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "SubsystemVersion",
-    "switch": "subsystemversion",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "AdditionalLibPaths",
-    "switch": "lib:",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "ErrorReport",
-    "switch": "errorreport:none",
-    "comment": "Do Not Send Report",
-    "value": "none",
-    "flags": []
-  },
-  {
-    "name":  "ErrorReport",
-    "switch": "errorreport:prompt",
-    "comment": "Prompt Immediately",
-    "value": "prompt",
-    "flags": []
-  },
-  {
-    "name":  "ErrorReport",
-    "switch": "errorreport:queue",
-    "comment": "Queue For Next Login",
-    "value": "queue",
-    "flags": []
-  },
-  {
-    "name":  "ErrorReport",
-    "switch": "errorreport:send",
-    "comment": "Send Automatically",
-    "value": "send",
-    "flags": []
-  }
-]
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v11_Link.json b/share/cmake-3.18/Templates/MSBuild/FlagTables/v11_Link.json
deleted file mode 100644
index 5d5c13f..0000000
--- a/share/cmake-3.18/Templates/MSBuild/FlagTables/v11_Link.json
+++ /dev/null
@@ -1,1272 +0,0 @@
-[
-  {
-    "name": "ShowProgress",
-    "switch": "",
-    "comment": "Not Set",
-    "value": "NotSet",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE",
-    "comment": "Display all progress messages",
-    "value": "LinkVerbose",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:Lib",
-    "comment": "For Libraries Searched",
-    "value": "LinkVerboseLib",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:ICF",
-    "comment": "About COMDAT folding during optimized linking",
-    "value": "LinkVerboseICF",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:REF",
-    "comment": "About data removed during optimized linking",
-    "value": "LinkVerboseREF",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:SAFESEH",
-    "comment": "About Modules incompatible with SEH",
-    "value": "LinkVerboseSAFESEH",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:CLR",
-    "comment": "About linker activity related to managed code",
-    "value": "LinkVerboseCLR",
-    "flags": []
-  },
-  {
-    "name": "ForceFileOutput",
-    "switch": "FORCE",
-    "comment": "Enabled",
-    "value": "Enabled",
-    "flags": []
-  },
-  {
-    "name": "ForceFileOutput",
-    "switch": "FORCE:MULTIPLE",
-    "comment": "Multiply Defined Symbol Only",
-    "value": "MultiplyDefinedSymbolOnly",
-    "flags": []
-  },
-  {
-    "name": "ForceFileOutput",
-    "switch": "FORCE:UNRESOLVED",
-    "comment": "Undefined Symbol Only",
-    "value": "UndefinedSymbolOnly",
-    "flags": []
-  },
-  {
-    "name": "CreateHotPatchableImage",
-    "switch": "FUNCTIONPADMIN",
-    "comment": "Enabled",
-    "value": "Enabled",
-    "flags": []
-  },
-  {
-    "name": "CreateHotPatchableImage",
-    "switch": "FUNCTIONPADMIN:5",
-    "comment": "X86 Image Only",
-    "value": "X86Image",
-    "flags": []
-  },
-  {
-    "name": "CreateHotPatchableImage",
-    "switch": "FUNCTIONPADMIN:6",
-    "comment": "X64 Image Only",
-    "value": "X64Image",
-    "flags": []
-  },
-  {
-    "name": "CreateHotPatchableImage",
-    "switch": "FUNCTIONPADMIN:16",
-    "comment": "Itanium Image Only",
-    "value": "ItaniumImage",
-    "flags": []
-  },
-  {
-    "name": "UACExecutionLevel",
-    "switch": "level='asInvoker'",
-    "comment": "asInvoker",
-    "value": "AsInvoker",
-    "flags": []
-  },
-  {
-    "name": "UACExecutionLevel",
-    "switch": "level='highestAvailable'",
-    "comment": "highestAvailable",
-    "value": "HighestAvailable",
-    "flags": []
-  },
-  {
-    "name": "UACExecutionLevel",
-    "switch": "level='requireAdministrator'",
-    "comment": "requireAdministrator",
-    "value": "RequireAdministrator",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "",
-    "comment": "Not Set",
-    "value": "NotSet",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:CONSOLE",
-    "comment": "Console",
-    "value": "Console",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:WINDOWS",
-    "comment": "Windows",
-    "value": "Windows",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:NATIVE",
-    "comment": "Native",
-    "value": "Native",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:EFI_APPLICATION",
-    "comment": "EFI Application",
-    "value": "EFI Application",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
-    "comment": "EFI Boot Service Driver",
-    "value": "EFI Boot Service Driver",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:EFI_ROM",
-    "comment": "EFI ROM",
-    "value": "EFI ROM",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:EFI_RUNTIME_DRIVER",
-    "comment": "EFI Runtime",
-    "value": "EFI Runtime",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:POSIX",
-    "comment": "POSIX",
-    "value": "POSIX",
-    "flags": []
-  },
-  {
-    "name": "Driver",
-    "switch": "",
-    "comment": "Not Set",
-    "value": "NotSet",
-    "flags": []
-  },
-  {
-    "name": "Driver",
-    "switch": "Driver",
-    "comment": "Driver",
-    "value": "Driver",
-    "flags": []
-  },
-  {
-    "name": "Driver",
-    "switch": "DRIVER:UPONLY",
-    "comment": "UP Only",
-    "value": "UpOnly",
-    "flags": []
-  },
-  {
-    "name": "Driver",
-    "switch": "DRIVER:WDM",
-    "comment": "WDM",
-    "value": "WDM",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "",
-    "comment": "Default",
-    "value": "Default",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "LTCG",
-    "comment": "Use Link Time Code Generation",
-    "value": "UseLinkTimeCodeGeneration",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "LTCG:PGInstrument",
-    "comment": "Profile Guided Optimization - Instrument",
-    "value": "PGInstrument",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "LTCG:PGOptimize",
-    "comment": "Profile Guided Optimization - Optimization",
-    "value": "PGOptimization",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "LTCG:PGUpdate",
-    "comment": "Profile Guided Optimization - Update",
-    "value": "PGUpdate",
-    "flags": []
-  },
-  {
-    "name": "GenerateWindowsMetadata",
-    "switch": "WINMD",
-    "comment": "Yes",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "GenerateWindowsMetadata",
-    "switch": "WINMD:NO",
-    "comment": "No",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataSignHash",
-    "switch": "WINMDSIGNHASH:SHA1",
-    "comment": "SHA1",
-    "value": "SHA1",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataSignHash",
-    "switch": "WINMDSIGNHASH:SHA256",
-    "comment": "SHA256",
-    "value": "SHA256",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataSignHash",
-    "switch": "WINMDSIGNHASH:SHA384",
-    "comment": "SHA384",
-    "value": "SHA384",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataSignHash",
-    "switch": "WINMDSIGNHASH:SHA512",
-    "comment": "SHA512",
-    "value": "SHA512",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "",
-    "comment": "Not Set",
-    "value": "NotSet",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:ARM",
-    "comment": "MachineARM",
-    "value": "MachineARM",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:EBC",
-    "comment": "MachineEBC",
-    "value": "MachineEBC",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:IA64",
-    "comment": "MachineIA64",
-    "value": "MachineIA64",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:MIPS",
-    "comment": "MachineMIPS",
-    "value": "MachineMIPS",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:MIPS16",
-    "comment": "MachineMIPS16",
-    "value": "MachineMIPS16",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:MIPSFPU",
-    "comment": "MachineMIPSFPU",
-    "value": "MachineMIPSFPU",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:MIPSFPU16",
-    "comment": "MachineMIPSFPU16",
-    "value": "MachineMIPSFPU16",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:SH4",
-    "comment": "MachineSH4",
-    "value": "MachineSH4",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:THUMB",
-    "comment": "MachineTHUMB",
-    "value": "MachineTHUMB",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:X64",
-    "comment": "MachineX64",
-    "value": "MachineX64",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:X86",
-    "comment": "MachineX86",
-    "value": "MachineX86",
-    "flags": []
-  },
-  {
-    "name": "CLRThreadAttribute",
-    "switch": "CLRTHREADATTRIBUTE:MTA",
-    "comment": "MTA threading attribute",
-    "value": "MTAThreadingAttribute",
-    "flags": []
-  },
-  {
-    "name": "CLRThreadAttribute",
-    "switch": "CLRTHREADATTRIBUTE:STA",
-    "comment": "STA threading attribute",
-    "value": "STAThreadingAttribute",
-    "flags": []
-  },
-  {
-    "name": "CLRThreadAttribute",
-    "switch": "CLRTHREADATTRIBUTE:NONE",
-    "comment": "Default threading attribute",
-    "value": "DefaultThreadingAttribute",
-    "flags": []
-  },
-  {
-    "name": "CLRImageType",
-    "switch": "CLRIMAGETYPE:IJW",
-    "comment": "Force IJW image",
-    "value": "ForceIJWImage",
-    "flags": []
-  },
-  {
-    "name": "CLRImageType",
-    "switch": "CLRIMAGETYPE:PURE",
-    "comment": "Force Pure IL Image",
-    "value": "ForcePureILImage",
-    "flags": []
-  },
-  {
-    "name": "CLRImageType",
-    "switch": "CLRIMAGETYPE:SAFE",
-    "comment": "Force Safe IL Image",
-    "value": "ForceSafeILImage",
-    "flags": []
-  },
-  {
-    "name": "CLRImageType",
-    "switch": "",
-    "comment": "Default image type",
-    "value": "Default",
-    "flags": []
-  },
-  {
-    "name": "SignHash",
-    "switch": "CLRSIGNHASH:SHA1",
-    "comment": "SHA1",
-    "value": "SHA1",
-    "flags": []
-  },
-  {
-    "name": "SignHash",
-    "switch": "CLRSIGNHASH:SHA256",
-    "comment": "SHA256",
-    "value": "SHA256",
-    "flags": []
-  },
-  {
-    "name": "SignHash",
-    "switch": "CLRSIGNHASH:SHA384",
-    "comment": "SHA384",
-    "value": "SHA384",
-    "flags": []
-  },
-  {
-    "name": "SignHash",
-    "switch": "CLRSIGNHASH:SHA512",
-    "comment": "SHA512",
-    "value": "SHA512",
-    "flags": []
-  },
-  {
-    "name": "LinkErrorReporting",
-    "switch": "ERRORREPORT:PROMPT",
-    "comment": "PromptImmediately",
-    "value": "PromptImmediately",
-    "flags": []
-  },
-  {
-    "name": "LinkErrorReporting",
-    "switch": "ERRORREPORT:QUEUE",
-    "comment": "Queue For Next Login",
-    "value": "QueueForNextLogin",
-    "flags": []
-  },
-  {
-    "name": "LinkErrorReporting",
-    "switch": "ERRORREPORT:SEND",
-    "comment": "Send Error Report",
-    "value": "SendErrorReport",
-    "flags": []
-  },
-  {
-    "name": "LinkErrorReporting",
-    "switch": "ERRORREPORT:NONE",
-    "comment": "No Error Report",
-    "value": "NoErrorReport",
-    "flags": []
-  },
-  {
-    "name": "CLRSupportLastError",
-    "switch": "CLRSupportLastError",
-    "comment": "Enabled",
-    "value": "Enabled",
-    "flags": []
-  },
-  {
-    "name": "CLRSupportLastError",
-    "switch": "CLRSupportLastError:NO",
-    "comment": "Disabled",
-    "value": "Disabled",
-    "flags": []
-  },
-  {
-    "name": "CLRSupportLastError",
-    "switch": "CLRSupportLastError:SYSTEMDLL",
-    "comment": "System Dlls Only",
-    "value": "SystemDlls",
-    "flags": []
-  },
-  {
-    "name": "LinkIncremental",
-    "switch": "INCREMENTAL:NO",
-    "comment": "Enable Incremental Linking",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "LinkIncremental",
-    "switch": "INCREMENTAL",
-    "comment": "Enable Incremental Linking",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SuppressStartupBanner",
-    "switch": "NOLOGO",
-    "comment": "Suppress Startup Banner",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "LinkStatus",
-    "switch": "LTCG:NOSTATUS",
-    "comment": "Link Status",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "LinkStatus",
-    "switch": "LTCG:STATUS",
-    "comment": "Link Status",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "PreventDllBinding",
-    "switch": "ALLOWBIND:NO",
-    "comment": "Prevent Dll Binding",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "PreventDllBinding",
-    "switch": "ALLOWBIND",
-    "comment": "Prevent Dll Binding",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "TreatLinkerWarningAsErrors",
-    "switch": "WX:NO",
-    "comment": "Treat Linker Warning As Errors",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "TreatLinkerWarningAsErrors",
-    "switch": "WX",
-    "comment": "Treat Linker Warning As Errors",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "IgnoreAllDefaultLibraries",
-    "switch": "NODEFAULTLIB",
-    "comment": "Ignore All Default Libraries",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "GenerateManifest",
-    "switch": "MANIFEST:NO",
-    "comment": "Generate Manifest",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "GenerateManifest",
-    "switch": "MANIFEST",
-    "comment": "Generate Manifest",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "AllowIsolation",
-    "switch": "ALLOWISOLATION:NO",
-    "comment": "Allow Isolation",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "AllowIsolation",
-    "switch": "",
-    "comment": "Allow Isolation",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "EnableUAC",
-    "switch": "MANIFESTUAC:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired",
-      "SpaceAppendable"
-    ]
-  },
-  {
-    "name": "UACUIAccess",
-    "switch": "uiAccess='false'",
-    "comment": "UAC Bypass UI Protection",
-    "value": "false",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "UACUIAccess",
-    "switch": "uiAccess='false'",
-    "comment": "UAC Bypass UI Protection",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "UACUIAccess",
-    "switch": "uiAccess='true'",
-    "comment": "UAC Bypass UI Protection",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "ManifestEmbed",
-    "switch": "manifest:embed",
-    "comment": "Embed Manifest",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "GenerateDebugInformation",
-    "switch": "DEBUG",
-    "comment": "Generate Debug Info",
-    "value": "true",
-    "flags": [
-      "CaseInsensitive"
-    ]
-  },
-  {
-    "name": "GenerateMapFile",
-    "switch": "MAP",
-    "comment": "Generate Map File",
-    "value": "true",
-    "flags": [
-      "UserValue",
-      "UserIgnored",
-      "Continue"
-    ]
-  },
-  {
-    "name": "MapExports",
-    "switch": "MAPINFO:EXPORTS",
-    "comment": "Map Exports",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "AssemblyDebug",
-    "switch": "ASSEMBLYDEBUG:DISABLE",
-    "comment": "Debuggable Assembly",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "AssemblyDebug",
-    "switch": "ASSEMBLYDEBUG",
-    "comment": "Debuggable Assembly",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "LargeAddressAware",
-    "switch": "LARGEADDRESSAWARE:NO",
-    "comment": "Enable Large Addresses",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "LargeAddressAware",
-    "switch": "LARGEADDRESSAWARE",
-    "comment": "Enable Large Addresses",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "TerminalServerAware",
-    "switch": "TSAWARE:NO",
-    "comment": "Terminal Server",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "TerminalServerAware",
-    "switch": "TSAWARE",
-    "comment": "Terminal Server",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SwapRunFromCD",
-    "switch": "SWAPRUN:CD",
-    "comment": "Swap Run From CD",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SwapRunFromNET",
-    "switch": "SWAPRUN:NET",
-    "comment": "Swap Run From Network",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "OptimizeReferences",
-    "switch": "OPT:NOREF",
-    "comment": "References",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "OptimizeReferences",
-    "switch": "OPT:REF",
-    "comment": "References",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "EnableCOMDATFolding",
-    "switch": "OPT:NOICF",
-    "comment": "Enable COMDAT Folding",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "EnableCOMDATFolding",
-    "switch": "OPT:ICF",
-    "comment": "Enable COMDAT Folding",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "IgnoreEmbeddedIDL",
-    "switch": "IGNOREIDL",
-    "comment": "Ignore Embedded IDL",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "AppContainer",
-    "switch": "APPCONTAINER",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataLinkDelaySign",
-    "switch": "WINMDDELAYSIGN:NO",
-    "comment": "Windows Metadata Delay Sign",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataLinkDelaySign",
-    "switch": "WINMDDELAYSIGN",
-    "comment": "Windows Metadata Delay Sign",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "NoEntryPoint",
-    "switch": "NOENTRY",
-    "comment": "No Entry Point",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SetChecksum",
-    "switch": "RELEASE",
-    "comment": "Set Checksum",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "RandomizedBaseAddress",
-    "switch": "DYNAMICBASE:NO",
-    "comment": "Randomized Base Address",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "RandomizedBaseAddress",
-    "switch": "DYNAMICBASE",
-    "comment": "Randomized Base Address",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "FixedBaseAddress",
-    "switch": "FIXED:NO",
-    "comment": "Fixed Base Address",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "FixedBaseAddress",
-    "switch": "FIXED",
-    "comment": "Fixed Base Address",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "DataExecutionPrevention",
-    "switch": "NXCOMPAT:NO",
-    "comment": "Data Execution Prevention (DEP)",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "DataExecutionPrevention",
-    "switch": "NXCOMPAT",
-    "comment": "Data Execution Prevention (DEP)",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "TurnOffAssemblyGeneration",
-    "switch": "NOASSEMBLY",
-    "comment": "Turn Off Assembly Generation",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SupportUnloadOfDelayLoadedDLL",
-    "switch": "DELAY:UNLOAD",
-    "comment": "Unload delay loaded DLL",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SupportNobindOfDelayLoadedDLL",
-    "switch": "DELAY:NOBIND",
-    "comment": "Nobind delay loaded DLL",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "Profile",
-    "switch": "PROFILE",
-    "comment": "Profile",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "LinkDelaySign",
-    "switch": "DELAYSIGN:NO",
-    "comment": "Delay Sign",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "LinkDelaySign",
-    "switch": "DELAYSIGN",
-    "comment": "Delay Sign",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "CLRUnmanagedCodeCheck",
-    "switch": "CLRUNMANAGEDCODECHECK:NO",
-    "comment": "CLR Unmanaged Code Check",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "CLRUnmanagedCodeCheck",
-    "switch": "CLRUNMANAGEDCODECHECK",
-    "comment": "CLR Unmanaged Code Check",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "DetectOneDefinitionRule",
-    "switch": "ODR",
-    "comment": "Detect One Definition Rule violations",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "ImageHasSafeExceptionHandlers",
-    "switch": "SAFESEH:NO",
-    "comment": "Image Has Safe Exception Handlers",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "ImageHasSafeExceptionHandlers",
-    "switch": "SAFESEH",
-    "comment": "Image Has Safe Exception Handlers",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "LinkDLL",
-    "switch": "DLL",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "AdditionalLibraryDirectories",
-    "switch": "LIBPATH:",
-    "comment": "Additional Library Directories",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "IgnoreSpecificDefaultLibraries",
-    "switch": "NODEFAULTLIB:",
-    "comment": "Ignore Specific Default Libraries",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "AddModuleNamesToAssembly",
-    "switch": "ASSEMBLYMODULE:",
-    "comment": "Add Module to Assembly",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "EmbedManagedResourceFile",
-    "switch": "ASSEMBLYRESOURCE:",
-    "comment": "Embed Managed Resource File",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "ForceSymbolReferences",
-    "switch": "INCLUDE:",
-    "comment": "Force Symbol References",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "DelayLoadDLLs",
-    "switch": "DELAYLOAD:",
-    "comment": "Delay Loaded Dlls",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "AssemblyLinkResource",
-    "switch": "ASSEMBLYLINKRESOURCE:",
-    "comment": "Assembly Link Resource",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "AdditionalManifestDependencies",
-    "switch": "MANIFESTDEPENDENCY:",
-    "comment": "Additional Manifest Dependencies",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "ManifestInput",
-    "switch": "manifestinput:",
-    "comment": "Manifest Input",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "OutputFile",
-    "switch": "OUT:",
-    "comment": "Output File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "Version",
-    "switch": "VERSION:",
-    "comment": "Version",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "SpecifySectionAttributes",
-    "switch": "SECTION:",
-    "comment": "Specify Section Attributes",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MSDOSStubFileName",
-    "switch": "STUB:",
-    "comment": "MS-DOS Stub File Name",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ModuleDefinitionFile",
-    "switch": "DEF:",
-    "comment": "Module Definition File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ManifestFile",
-    "switch": "ManifestFile:",
-    "comment": "Manifest File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ProgramDatabaseFile",
-    "switch": "PDB:",
-    "comment": "Generate Program Database File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "StripPrivateSymbols",
-    "switch": "PDBSTRIPPED:",
-    "comment": "Strip Private Symbols",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MapFileName",
-    "switch": "MAP:",
-    "comment": "Map File Name",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "HeapReserveSize",
-    "switch": "HEAP:",
-    "comment": "Heap Reserve Size",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "HeapCommitSize",
-    "switch": "HEAP",
-    "comment": "Heap Commit Size",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "StackReserveSize",
-    "switch": "STACK:",
-    "comment": "Stack Reserve Size",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "StackCommitSize",
-    "switch": "STACK",
-    "comment": "Stack Commit Size",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "FunctionOrder",
-    "switch": "ORDER:@",
-    "comment": "Function Order",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ProfileGuidedDatabase",
-    "switch": "PGD:",
-    "comment": "Profile Guided Database",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MidlCommandFile",
-    "switch": "MIDL:@",
-    "comment": "MIDL Commands",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MergedIDLBaseFileName",
-    "switch": "IDLOUT:",
-    "comment": "Merged IDL Base File Name",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "TypeLibraryFile",
-    "switch": "TLBOUT:",
-    "comment": "Type Library",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "WindowsMetadataFile",
-    "switch": "WINMDFILE:",
-    "comment": "Windows Metadata File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "WindowsMetadataLinkKeyFile",
-    "switch": "WINMDKEYFILE:",
-    "comment": "Windows Metadata Key File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "WindowsMetadataKeyContainer",
-    "switch": "WINMDKEYCONTAINER:",
-    "comment": "Windows Metadata Key Container",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "EntryPointSymbol",
-    "switch": "ENTRY:",
-    "comment": "Entry Point",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "BaseAddress",
-    "switch": "BASE:",
-    "comment": "Base Address",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ImportLibrary",
-    "switch": "IMPLIB:",
-    "comment": "Import Library",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MergeSections",
-    "switch": "MERGE:",
-    "comment": "Merge Sections",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "LinkKeyFile",
-    "switch": "KEYFILE:",
-    "comment": "Key File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "KeyContainer",
-    "switch": "KEYCONTAINER:",
-    "comment": "Key Container",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "TypeLibraryResourceID",
-    "switch": "TLBID:",
-    "comment": "TypeLib Resource ID",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "SectionAlignment",
-    "switch": "ALIGN:",
-    "comment": "SectionAlignment",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  }
-]
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v12_CSharp.json b/share/cmake-3.18/Templates/MSBuild/FlagTables/v12_CSharp.json
deleted file mode 100644
index 5989aea..0000000
--- a/share/cmake-3.18/Templates/MSBuild/FlagTables/v12_CSharp.json
+++ /dev/null
@@ -1,574 +0,0 @@
-[
-  {
-    "name":  "ProjectName",
-    "switch": "out:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "OutputType",
-    "switch": "target:exe",
-    "comment": "",
-    "value": "Exe",
-    "flags": []
-  },
-  {
-    "name":  "OutputType",
-    "switch": "target:winexe",
-    "comment": "",
-    "value": "Winexe",
-    "flags": []
-  },
-  {
-    "name":  "OutputType",
-    "switch": "target:library",
-    "comment": "",
-    "value": "Library",
-    "flags": []
-  },
-  {
-    "name":  "OutputType",
-    "switch": "target:module",
-    "comment": "",
-    "value": "Module",
-    "flags": []
-  },
-  {
-    "name":  "DocumentationFile",
-    "switch": "doc",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:x86",
-    "comment": "",
-    "value": "x86",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:Itanium",
-    "comment": "",
-    "value": "Itanium",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:x64",
-    "comment": "",
-    "value": "x64",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:arm",
-    "comment": "",
-    "value": "arm",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:anycpu32bitpreferred",
-    "comment": "",
-    "value": "anycpu32bitpreferred",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:anycpu",
-    "comment": "",
-    "value": "anycpu",
-    "flags": []
-  },
-  {
-    "name":  "References",
-    "switch": "reference:",
-    "comment": "mit alias",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "References",
-    "switch": "reference:",
-    "comment": "dateiliste",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "AddModules",
-    "switch": "addmodule:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name":  "Win32Resource",
-    "switch": "win32res:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "ApplicationIcon",
-    "switch": "win32icon:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "ApplicationManifest",
-    "switch": "win32manifest:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "NoWin32Manifest",
-    "switch": "nowin32manifest",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DefineDebug",
-    "switch": "debug",
-    "comment": "",
-    "value": "true",
-    "flags": [
-      "Continue"
-    ]
-  },
-  {
-    "name":  "DebugSymbols",
-    "switch": "debug",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DebugSymbols",
-    "switch": "debug-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "DebugSymbols",
-    "switch": "debug+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DebugType",
-    "switch": "debug:none",
-    "comment": "",
-    "value": "none",
-    "flags": []
-  },
-  {
-    "name":  "DebugType",
-    "switch": "debug:full",
-    "comment": "",
-    "value": "full",
-    "flags": []
-  },
-  {
-    "name":  "DebugType",
-    "switch": "debug:pdbonly",
-    "comment": "",
-    "value": "pdbonly",
-    "flags": []
-  },
-  {
-    "name":  "Optimize",
-    "switch": "optimize",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "Optimize",
-    "switch": "optimize-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "Optimize",
-    "switch": "optimize+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "TreatWarningsAsErrors",
-    "switch": "warnaserror",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "TreatWarningsAsErrors",
-    "switch": "warnaserror-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "TreatWarningsAsErrors",
-    "switch": "warnaserror+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "WarningsAsErrors",
-    "switch": "warnaserror",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "WarningsAsErrors",
-    "switch": "warnaserror-",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "WarningsAsErrors",
-    "switch": "warnaserror+",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:0",
-    "comment": "",
-    "value": "0",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:1",
-    "comment": "",
-    "value": "1",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:2",
-    "comment": "",
-    "value": "2",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:3",
-    "comment": "",
-    "value": "3",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:4",
-    "comment": "",
-    "value": "4",
-    "flags": []
-  },
-  {
-    "name":  "NoWarn",
-    "switch": "nowarn:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired",
-      "CommaAppendable"
-    ]
-  },
-  {
-    "name":  "CheckForOverflowUnderflow",
-    "switch": "checked",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "CheckForOverflowUnderflow",
-    "switch": "checked-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "CheckForOverflowUnderflow",
-    "switch": "checked+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "AllowUnsafeBlocks",
-    "switch": "unsafe",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "AllowUnsafeBlocks",
-    "switch": "unsafe-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "AllowUnsafeBlocks",
-    "switch": "unsafe+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DefineConstants",
-    "switch": "define:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "SemicolonAppendable",
-      "UserValue"
-    ]
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:ISO-1",
-    "comment": "",
-    "value": "ISO-1",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:ISO-2",
-    "comment": "",
-    "value": "ISO-2",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:3",
-    "comment": "",
-    "value": "3",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:4",
-    "comment": "",
-    "value": "4",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:5",
-    "comment": "",
-    "value": "5",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:6",
-    "comment": "",
-    "value": "6",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:default",
-    "comment": "",
-    "value": "default",
-    "flags": []
-  },
-  {
-    "name":  "DelaySign",
-    "switch": "delaysign",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DelaySign",
-    "switch": "delaysign-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "DelaySign",
-    "switch": "delaysign+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "AssemblyOriginatorKeyFile",
-    "switch": "keyfile",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "KeyContainerName",
-    "switch": "keycontainer",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "NoLogo",
-    "switch": "nologo",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "NoConfig",
-    "switch": "noconfig",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "BaseAddress",
-    "switch": "baseaddress:",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "CodePage",
-    "switch": "codepage",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "Utf8Output",
-    "switch": "utf8output",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "MainEntryPoint",
-    "switch": "main:",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "GenerateFullPaths",
-    "switch": "fullpaths",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "FileAlignment",
-    "switch": "filealign",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "PdbFile",
-    "switch": "pdb:",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "NoStandardLib",
-    "switch": "nostdlib",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "NoStandardLib",
-    "switch": "nostdlib-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "NoStandardLib",
-    "switch": "nostdlib+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "SubsystemVersion",
-    "switch": "subsystemversion",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "AdditionalLibPaths",
-    "switch": "lib:",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "ErrorReport",
-    "switch": "errorreport:none",
-    "comment": "Do Not Send Report",
-    "value": "none",
-    "flags": []
-  },
-  {
-    "name":  "ErrorReport",
-    "switch": "errorreport:prompt",
-    "comment": "Prompt Immediately",
-    "value": "prompt",
-    "flags": []
-  },
-  {
-    "name":  "ErrorReport",
-    "switch": "errorreport:queue",
-    "comment": "Queue For Next Login",
-    "value": "queue",
-    "flags": []
-  },
-  {
-    "name":  "ErrorReport",
-    "switch": "errorreport:send",
-    "comment": "Send Automatically",
-    "value": "send",
-    "flags": []
-  }
-]
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v12_Link.json b/share/cmake-3.18/Templates/MSBuild/FlagTables/v12_Link.json
deleted file mode 100644
index 5d5c13f..0000000
--- a/share/cmake-3.18/Templates/MSBuild/FlagTables/v12_Link.json
+++ /dev/null
@@ -1,1272 +0,0 @@
-[
-  {
-    "name": "ShowProgress",
-    "switch": "",
-    "comment": "Not Set",
-    "value": "NotSet",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE",
-    "comment": "Display all progress messages",
-    "value": "LinkVerbose",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:Lib",
-    "comment": "For Libraries Searched",
-    "value": "LinkVerboseLib",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:ICF",
-    "comment": "About COMDAT folding during optimized linking",
-    "value": "LinkVerboseICF",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:REF",
-    "comment": "About data removed during optimized linking",
-    "value": "LinkVerboseREF",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:SAFESEH",
-    "comment": "About Modules incompatible with SEH",
-    "value": "LinkVerboseSAFESEH",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:CLR",
-    "comment": "About linker activity related to managed code",
-    "value": "LinkVerboseCLR",
-    "flags": []
-  },
-  {
-    "name": "ForceFileOutput",
-    "switch": "FORCE",
-    "comment": "Enabled",
-    "value": "Enabled",
-    "flags": []
-  },
-  {
-    "name": "ForceFileOutput",
-    "switch": "FORCE:MULTIPLE",
-    "comment": "Multiply Defined Symbol Only",
-    "value": "MultiplyDefinedSymbolOnly",
-    "flags": []
-  },
-  {
-    "name": "ForceFileOutput",
-    "switch": "FORCE:UNRESOLVED",
-    "comment": "Undefined Symbol Only",
-    "value": "UndefinedSymbolOnly",
-    "flags": []
-  },
-  {
-    "name": "CreateHotPatchableImage",
-    "switch": "FUNCTIONPADMIN",
-    "comment": "Enabled",
-    "value": "Enabled",
-    "flags": []
-  },
-  {
-    "name": "CreateHotPatchableImage",
-    "switch": "FUNCTIONPADMIN:5",
-    "comment": "X86 Image Only",
-    "value": "X86Image",
-    "flags": []
-  },
-  {
-    "name": "CreateHotPatchableImage",
-    "switch": "FUNCTIONPADMIN:6",
-    "comment": "X64 Image Only",
-    "value": "X64Image",
-    "flags": []
-  },
-  {
-    "name": "CreateHotPatchableImage",
-    "switch": "FUNCTIONPADMIN:16",
-    "comment": "Itanium Image Only",
-    "value": "ItaniumImage",
-    "flags": []
-  },
-  {
-    "name": "UACExecutionLevel",
-    "switch": "level='asInvoker'",
-    "comment": "asInvoker",
-    "value": "AsInvoker",
-    "flags": []
-  },
-  {
-    "name": "UACExecutionLevel",
-    "switch": "level='highestAvailable'",
-    "comment": "highestAvailable",
-    "value": "HighestAvailable",
-    "flags": []
-  },
-  {
-    "name": "UACExecutionLevel",
-    "switch": "level='requireAdministrator'",
-    "comment": "requireAdministrator",
-    "value": "RequireAdministrator",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "",
-    "comment": "Not Set",
-    "value": "NotSet",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:CONSOLE",
-    "comment": "Console",
-    "value": "Console",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:WINDOWS",
-    "comment": "Windows",
-    "value": "Windows",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:NATIVE",
-    "comment": "Native",
-    "value": "Native",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:EFI_APPLICATION",
-    "comment": "EFI Application",
-    "value": "EFI Application",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
-    "comment": "EFI Boot Service Driver",
-    "value": "EFI Boot Service Driver",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:EFI_ROM",
-    "comment": "EFI ROM",
-    "value": "EFI ROM",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:EFI_RUNTIME_DRIVER",
-    "comment": "EFI Runtime",
-    "value": "EFI Runtime",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:POSIX",
-    "comment": "POSIX",
-    "value": "POSIX",
-    "flags": []
-  },
-  {
-    "name": "Driver",
-    "switch": "",
-    "comment": "Not Set",
-    "value": "NotSet",
-    "flags": []
-  },
-  {
-    "name": "Driver",
-    "switch": "Driver",
-    "comment": "Driver",
-    "value": "Driver",
-    "flags": []
-  },
-  {
-    "name": "Driver",
-    "switch": "DRIVER:UPONLY",
-    "comment": "UP Only",
-    "value": "UpOnly",
-    "flags": []
-  },
-  {
-    "name": "Driver",
-    "switch": "DRIVER:WDM",
-    "comment": "WDM",
-    "value": "WDM",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "",
-    "comment": "Default",
-    "value": "Default",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "LTCG",
-    "comment": "Use Link Time Code Generation",
-    "value": "UseLinkTimeCodeGeneration",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "LTCG:PGInstrument",
-    "comment": "Profile Guided Optimization - Instrument",
-    "value": "PGInstrument",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "LTCG:PGOptimize",
-    "comment": "Profile Guided Optimization - Optimization",
-    "value": "PGOptimization",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "LTCG:PGUpdate",
-    "comment": "Profile Guided Optimization - Update",
-    "value": "PGUpdate",
-    "flags": []
-  },
-  {
-    "name": "GenerateWindowsMetadata",
-    "switch": "WINMD",
-    "comment": "Yes",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "GenerateWindowsMetadata",
-    "switch": "WINMD:NO",
-    "comment": "No",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataSignHash",
-    "switch": "WINMDSIGNHASH:SHA1",
-    "comment": "SHA1",
-    "value": "SHA1",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataSignHash",
-    "switch": "WINMDSIGNHASH:SHA256",
-    "comment": "SHA256",
-    "value": "SHA256",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataSignHash",
-    "switch": "WINMDSIGNHASH:SHA384",
-    "comment": "SHA384",
-    "value": "SHA384",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataSignHash",
-    "switch": "WINMDSIGNHASH:SHA512",
-    "comment": "SHA512",
-    "value": "SHA512",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "",
-    "comment": "Not Set",
-    "value": "NotSet",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:ARM",
-    "comment": "MachineARM",
-    "value": "MachineARM",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:EBC",
-    "comment": "MachineEBC",
-    "value": "MachineEBC",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:IA64",
-    "comment": "MachineIA64",
-    "value": "MachineIA64",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:MIPS",
-    "comment": "MachineMIPS",
-    "value": "MachineMIPS",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:MIPS16",
-    "comment": "MachineMIPS16",
-    "value": "MachineMIPS16",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:MIPSFPU",
-    "comment": "MachineMIPSFPU",
-    "value": "MachineMIPSFPU",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:MIPSFPU16",
-    "comment": "MachineMIPSFPU16",
-    "value": "MachineMIPSFPU16",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:SH4",
-    "comment": "MachineSH4",
-    "value": "MachineSH4",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:THUMB",
-    "comment": "MachineTHUMB",
-    "value": "MachineTHUMB",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:X64",
-    "comment": "MachineX64",
-    "value": "MachineX64",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:X86",
-    "comment": "MachineX86",
-    "value": "MachineX86",
-    "flags": []
-  },
-  {
-    "name": "CLRThreadAttribute",
-    "switch": "CLRTHREADATTRIBUTE:MTA",
-    "comment": "MTA threading attribute",
-    "value": "MTAThreadingAttribute",
-    "flags": []
-  },
-  {
-    "name": "CLRThreadAttribute",
-    "switch": "CLRTHREADATTRIBUTE:STA",
-    "comment": "STA threading attribute",
-    "value": "STAThreadingAttribute",
-    "flags": []
-  },
-  {
-    "name": "CLRThreadAttribute",
-    "switch": "CLRTHREADATTRIBUTE:NONE",
-    "comment": "Default threading attribute",
-    "value": "DefaultThreadingAttribute",
-    "flags": []
-  },
-  {
-    "name": "CLRImageType",
-    "switch": "CLRIMAGETYPE:IJW",
-    "comment": "Force IJW image",
-    "value": "ForceIJWImage",
-    "flags": []
-  },
-  {
-    "name": "CLRImageType",
-    "switch": "CLRIMAGETYPE:PURE",
-    "comment": "Force Pure IL Image",
-    "value": "ForcePureILImage",
-    "flags": []
-  },
-  {
-    "name": "CLRImageType",
-    "switch": "CLRIMAGETYPE:SAFE",
-    "comment": "Force Safe IL Image",
-    "value": "ForceSafeILImage",
-    "flags": []
-  },
-  {
-    "name": "CLRImageType",
-    "switch": "",
-    "comment": "Default image type",
-    "value": "Default",
-    "flags": []
-  },
-  {
-    "name": "SignHash",
-    "switch": "CLRSIGNHASH:SHA1",
-    "comment": "SHA1",
-    "value": "SHA1",
-    "flags": []
-  },
-  {
-    "name": "SignHash",
-    "switch": "CLRSIGNHASH:SHA256",
-    "comment": "SHA256",
-    "value": "SHA256",
-    "flags": []
-  },
-  {
-    "name": "SignHash",
-    "switch": "CLRSIGNHASH:SHA384",
-    "comment": "SHA384",
-    "value": "SHA384",
-    "flags": []
-  },
-  {
-    "name": "SignHash",
-    "switch": "CLRSIGNHASH:SHA512",
-    "comment": "SHA512",
-    "value": "SHA512",
-    "flags": []
-  },
-  {
-    "name": "LinkErrorReporting",
-    "switch": "ERRORREPORT:PROMPT",
-    "comment": "PromptImmediately",
-    "value": "PromptImmediately",
-    "flags": []
-  },
-  {
-    "name": "LinkErrorReporting",
-    "switch": "ERRORREPORT:QUEUE",
-    "comment": "Queue For Next Login",
-    "value": "QueueForNextLogin",
-    "flags": []
-  },
-  {
-    "name": "LinkErrorReporting",
-    "switch": "ERRORREPORT:SEND",
-    "comment": "Send Error Report",
-    "value": "SendErrorReport",
-    "flags": []
-  },
-  {
-    "name": "LinkErrorReporting",
-    "switch": "ERRORREPORT:NONE",
-    "comment": "No Error Report",
-    "value": "NoErrorReport",
-    "flags": []
-  },
-  {
-    "name": "CLRSupportLastError",
-    "switch": "CLRSupportLastError",
-    "comment": "Enabled",
-    "value": "Enabled",
-    "flags": []
-  },
-  {
-    "name": "CLRSupportLastError",
-    "switch": "CLRSupportLastError:NO",
-    "comment": "Disabled",
-    "value": "Disabled",
-    "flags": []
-  },
-  {
-    "name": "CLRSupportLastError",
-    "switch": "CLRSupportLastError:SYSTEMDLL",
-    "comment": "System Dlls Only",
-    "value": "SystemDlls",
-    "flags": []
-  },
-  {
-    "name": "LinkIncremental",
-    "switch": "INCREMENTAL:NO",
-    "comment": "Enable Incremental Linking",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "LinkIncremental",
-    "switch": "INCREMENTAL",
-    "comment": "Enable Incremental Linking",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SuppressStartupBanner",
-    "switch": "NOLOGO",
-    "comment": "Suppress Startup Banner",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "LinkStatus",
-    "switch": "LTCG:NOSTATUS",
-    "comment": "Link Status",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "LinkStatus",
-    "switch": "LTCG:STATUS",
-    "comment": "Link Status",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "PreventDllBinding",
-    "switch": "ALLOWBIND:NO",
-    "comment": "Prevent Dll Binding",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "PreventDllBinding",
-    "switch": "ALLOWBIND",
-    "comment": "Prevent Dll Binding",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "TreatLinkerWarningAsErrors",
-    "switch": "WX:NO",
-    "comment": "Treat Linker Warning As Errors",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "TreatLinkerWarningAsErrors",
-    "switch": "WX",
-    "comment": "Treat Linker Warning As Errors",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "IgnoreAllDefaultLibraries",
-    "switch": "NODEFAULTLIB",
-    "comment": "Ignore All Default Libraries",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "GenerateManifest",
-    "switch": "MANIFEST:NO",
-    "comment": "Generate Manifest",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "GenerateManifest",
-    "switch": "MANIFEST",
-    "comment": "Generate Manifest",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "AllowIsolation",
-    "switch": "ALLOWISOLATION:NO",
-    "comment": "Allow Isolation",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "AllowIsolation",
-    "switch": "",
-    "comment": "Allow Isolation",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "EnableUAC",
-    "switch": "MANIFESTUAC:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired",
-      "SpaceAppendable"
-    ]
-  },
-  {
-    "name": "UACUIAccess",
-    "switch": "uiAccess='false'",
-    "comment": "UAC Bypass UI Protection",
-    "value": "false",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "UACUIAccess",
-    "switch": "uiAccess='false'",
-    "comment": "UAC Bypass UI Protection",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "UACUIAccess",
-    "switch": "uiAccess='true'",
-    "comment": "UAC Bypass UI Protection",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "ManifestEmbed",
-    "switch": "manifest:embed",
-    "comment": "Embed Manifest",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "GenerateDebugInformation",
-    "switch": "DEBUG",
-    "comment": "Generate Debug Info",
-    "value": "true",
-    "flags": [
-      "CaseInsensitive"
-    ]
-  },
-  {
-    "name": "GenerateMapFile",
-    "switch": "MAP",
-    "comment": "Generate Map File",
-    "value": "true",
-    "flags": [
-      "UserValue",
-      "UserIgnored",
-      "Continue"
-    ]
-  },
-  {
-    "name": "MapExports",
-    "switch": "MAPINFO:EXPORTS",
-    "comment": "Map Exports",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "AssemblyDebug",
-    "switch": "ASSEMBLYDEBUG:DISABLE",
-    "comment": "Debuggable Assembly",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "AssemblyDebug",
-    "switch": "ASSEMBLYDEBUG",
-    "comment": "Debuggable Assembly",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "LargeAddressAware",
-    "switch": "LARGEADDRESSAWARE:NO",
-    "comment": "Enable Large Addresses",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "LargeAddressAware",
-    "switch": "LARGEADDRESSAWARE",
-    "comment": "Enable Large Addresses",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "TerminalServerAware",
-    "switch": "TSAWARE:NO",
-    "comment": "Terminal Server",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "TerminalServerAware",
-    "switch": "TSAWARE",
-    "comment": "Terminal Server",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SwapRunFromCD",
-    "switch": "SWAPRUN:CD",
-    "comment": "Swap Run From CD",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SwapRunFromNET",
-    "switch": "SWAPRUN:NET",
-    "comment": "Swap Run From Network",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "OptimizeReferences",
-    "switch": "OPT:NOREF",
-    "comment": "References",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "OptimizeReferences",
-    "switch": "OPT:REF",
-    "comment": "References",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "EnableCOMDATFolding",
-    "switch": "OPT:NOICF",
-    "comment": "Enable COMDAT Folding",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "EnableCOMDATFolding",
-    "switch": "OPT:ICF",
-    "comment": "Enable COMDAT Folding",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "IgnoreEmbeddedIDL",
-    "switch": "IGNOREIDL",
-    "comment": "Ignore Embedded IDL",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "AppContainer",
-    "switch": "APPCONTAINER",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataLinkDelaySign",
-    "switch": "WINMDDELAYSIGN:NO",
-    "comment": "Windows Metadata Delay Sign",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataLinkDelaySign",
-    "switch": "WINMDDELAYSIGN",
-    "comment": "Windows Metadata Delay Sign",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "NoEntryPoint",
-    "switch": "NOENTRY",
-    "comment": "No Entry Point",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SetChecksum",
-    "switch": "RELEASE",
-    "comment": "Set Checksum",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "RandomizedBaseAddress",
-    "switch": "DYNAMICBASE:NO",
-    "comment": "Randomized Base Address",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "RandomizedBaseAddress",
-    "switch": "DYNAMICBASE",
-    "comment": "Randomized Base Address",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "FixedBaseAddress",
-    "switch": "FIXED:NO",
-    "comment": "Fixed Base Address",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "FixedBaseAddress",
-    "switch": "FIXED",
-    "comment": "Fixed Base Address",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "DataExecutionPrevention",
-    "switch": "NXCOMPAT:NO",
-    "comment": "Data Execution Prevention (DEP)",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "DataExecutionPrevention",
-    "switch": "NXCOMPAT",
-    "comment": "Data Execution Prevention (DEP)",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "TurnOffAssemblyGeneration",
-    "switch": "NOASSEMBLY",
-    "comment": "Turn Off Assembly Generation",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SupportUnloadOfDelayLoadedDLL",
-    "switch": "DELAY:UNLOAD",
-    "comment": "Unload delay loaded DLL",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SupportNobindOfDelayLoadedDLL",
-    "switch": "DELAY:NOBIND",
-    "comment": "Nobind delay loaded DLL",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "Profile",
-    "switch": "PROFILE",
-    "comment": "Profile",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "LinkDelaySign",
-    "switch": "DELAYSIGN:NO",
-    "comment": "Delay Sign",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "LinkDelaySign",
-    "switch": "DELAYSIGN",
-    "comment": "Delay Sign",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "CLRUnmanagedCodeCheck",
-    "switch": "CLRUNMANAGEDCODECHECK:NO",
-    "comment": "CLR Unmanaged Code Check",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "CLRUnmanagedCodeCheck",
-    "switch": "CLRUNMANAGEDCODECHECK",
-    "comment": "CLR Unmanaged Code Check",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "DetectOneDefinitionRule",
-    "switch": "ODR",
-    "comment": "Detect One Definition Rule violations",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "ImageHasSafeExceptionHandlers",
-    "switch": "SAFESEH:NO",
-    "comment": "Image Has Safe Exception Handlers",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "ImageHasSafeExceptionHandlers",
-    "switch": "SAFESEH",
-    "comment": "Image Has Safe Exception Handlers",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "LinkDLL",
-    "switch": "DLL",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "AdditionalLibraryDirectories",
-    "switch": "LIBPATH:",
-    "comment": "Additional Library Directories",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "IgnoreSpecificDefaultLibraries",
-    "switch": "NODEFAULTLIB:",
-    "comment": "Ignore Specific Default Libraries",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "AddModuleNamesToAssembly",
-    "switch": "ASSEMBLYMODULE:",
-    "comment": "Add Module to Assembly",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "EmbedManagedResourceFile",
-    "switch": "ASSEMBLYRESOURCE:",
-    "comment": "Embed Managed Resource File",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "ForceSymbolReferences",
-    "switch": "INCLUDE:",
-    "comment": "Force Symbol References",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "DelayLoadDLLs",
-    "switch": "DELAYLOAD:",
-    "comment": "Delay Loaded Dlls",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "AssemblyLinkResource",
-    "switch": "ASSEMBLYLINKRESOURCE:",
-    "comment": "Assembly Link Resource",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "AdditionalManifestDependencies",
-    "switch": "MANIFESTDEPENDENCY:",
-    "comment": "Additional Manifest Dependencies",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "ManifestInput",
-    "switch": "manifestinput:",
-    "comment": "Manifest Input",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "OutputFile",
-    "switch": "OUT:",
-    "comment": "Output File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "Version",
-    "switch": "VERSION:",
-    "comment": "Version",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "SpecifySectionAttributes",
-    "switch": "SECTION:",
-    "comment": "Specify Section Attributes",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MSDOSStubFileName",
-    "switch": "STUB:",
-    "comment": "MS-DOS Stub File Name",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ModuleDefinitionFile",
-    "switch": "DEF:",
-    "comment": "Module Definition File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ManifestFile",
-    "switch": "ManifestFile:",
-    "comment": "Manifest File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ProgramDatabaseFile",
-    "switch": "PDB:",
-    "comment": "Generate Program Database File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "StripPrivateSymbols",
-    "switch": "PDBSTRIPPED:",
-    "comment": "Strip Private Symbols",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MapFileName",
-    "switch": "MAP:",
-    "comment": "Map File Name",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "HeapReserveSize",
-    "switch": "HEAP:",
-    "comment": "Heap Reserve Size",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "HeapCommitSize",
-    "switch": "HEAP",
-    "comment": "Heap Commit Size",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "StackReserveSize",
-    "switch": "STACK:",
-    "comment": "Stack Reserve Size",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "StackCommitSize",
-    "switch": "STACK",
-    "comment": "Stack Commit Size",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "FunctionOrder",
-    "switch": "ORDER:@",
-    "comment": "Function Order",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ProfileGuidedDatabase",
-    "switch": "PGD:",
-    "comment": "Profile Guided Database",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MidlCommandFile",
-    "switch": "MIDL:@",
-    "comment": "MIDL Commands",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MergedIDLBaseFileName",
-    "switch": "IDLOUT:",
-    "comment": "Merged IDL Base File Name",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "TypeLibraryFile",
-    "switch": "TLBOUT:",
-    "comment": "Type Library",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "WindowsMetadataFile",
-    "switch": "WINMDFILE:",
-    "comment": "Windows Metadata File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "WindowsMetadataLinkKeyFile",
-    "switch": "WINMDKEYFILE:",
-    "comment": "Windows Metadata Key File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "WindowsMetadataKeyContainer",
-    "switch": "WINMDKEYCONTAINER:",
-    "comment": "Windows Metadata Key Container",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "EntryPointSymbol",
-    "switch": "ENTRY:",
-    "comment": "Entry Point",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "BaseAddress",
-    "switch": "BASE:",
-    "comment": "Base Address",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ImportLibrary",
-    "switch": "IMPLIB:",
-    "comment": "Import Library",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MergeSections",
-    "switch": "MERGE:",
-    "comment": "Merge Sections",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "LinkKeyFile",
-    "switch": "KEYFILE:",
-    "comment": "Key File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "KeyContainer",
-    "switch": "KEYCONTAINER:",
-    "comment": "Key Container",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "TypeLibraryResourceID",
-    "switch": "TLBID:",
-    "comment": "TypeLib Resource ID",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "SectionAlignment",
-    "switch": "ALIGN:",
-    "comment": "SectionAlignment",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  }
-]
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v140_CSharp.json b/share/cmake-3.18/Templates/MSBuild/FlagTables/v140_CSharp.json
deleted file mode 100644
index 5989aea..0000000
--- a/share/cmake-3.18/Templates/MSBuild/FlagTables/v140_CSharp.json
+++ /dev/null
@@ -1,574 +0,0 @@
-[
-  {
-    "name":  "ProjectName",
-    "switch": "out:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "OutputType",
-    "switch": "target:exe",
-    "comment": "",
-    "value": "Exe",
-    "flags": []
-  },
-  {
-    "name":  "OutputType",
-    "switch": "target:winexe",
-    "comment": "",
-    "value": "Winexe",
-    "flags": []
-  },
-  {
-    "name":  "OutputType",
-    "switch": "target:library",
-    "comment": "",
-    "value": "Library",
-    "flags": []
-  },
-  {
-    "name":  "OutputType",
-    "switch": "target:module",
-    "comment": "",
-    "value": "Module",
-    "flags": []
-  },
-  {
-    "name":  "DocumentationFile",
-    "switch": "doc",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:x86",
-    "comment": "",
-    "value": "x86",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:Itanium",
-    "comment": "",
-    "value": "Itanium",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:x64",
-    "comment": "",
-    "value": "x64",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:arm",
-    "comment": "",
-    "value": "arm",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:anycpu32bitpreferred",
-    "comment": "",
-    "value": "anycpu32bitpreferred",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:anycpu",
-    "comment": "",
-    "value": "anycpu",
-    "flags": []
-  },
-  {
-    "name":  "References",
-    "switch": "reference:",
-    "comment": "mit alias",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "References",
-    "switch": "reference:",
-    "comment": "dateiliste",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "AddModules",
-    "switch": "addmodule:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name":  "Win32Resource",
-    "switch": "win32res:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "ApplicationIcon",
-    "switch": "win32icon:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "ApplicationManifest",
-    "switch": "win32manifest:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "NoWin32Manifest",
-    "switch": "nowin32manifest",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DefineDebug",
-    "switch": "debug",
-    "comment": "",
-    "value": "true",
-    "flags": [
-      "Continue"
-    ]
-  },
-  {
-    "name":  "DebugSymbols",
-    "switch": "debug",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DebugSymbols",
-    "switch": "debug-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "DebugSymbols",
-    "switch": "debug+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DebugType",
-    "switch": "debug:none",
-    "comment": "",
-    "value": "none",
-    "flags": []
-  },
-  {
-    "name":  "DebugType",
-    "switch": "debug:full",
-    "comment": "",
-    "value": "full",
-    "flags": []
-  },
-  {
-    "name":  "DebugType",
-    "switch": "debug:pdbonly",
-    "comment": "",
-    "value": "pdbonly",
-    "flags": []
-  },
-  {
-    "name":  "Optimize",
-    "switch": "optimize",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "Optimize",
-    "switch": "optimize-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "Optimize",
-    "switch": "optimize+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "TreatWarningsAsErrors",
-    "switch": "warnaserror",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "TreatWarningsAsErrors",
-    "switch": "warnaserror-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "TreatWarningsAsErrors",
-    "switch": "warnaserror+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "WarningsAsErrors",
-    "switch": "warnaserror",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "WarningsAsErrors",
-    "switch": "warnaserror-",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "WarningsAsErrors",
-    "switch": "warnaserror+",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:0",
-    "comment": "",
-    "value": "0",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:1",
-    "comment": "",
-    "value": "1",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:2",
-    "comment": "",
-    "value": "2",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:3",
-    "comment": "",
-    "value": "3",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:4",
-    "comment": "",
-    "value": "4",
-    "flags": []
-  },
-  {
-    "name":  "NoWarn",
-    "switch": "nowarn:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired",
-      "CommaAppendable"
-    ]
-  },
-  {
-    "name":  "CheckForOverflowUnderflow",
-    "switch": "checked",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "CheckForOverflowUnderflow",
-    "switch": "checked-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "CheckForOverflowUnderflow",
-    "switch": "checked+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "AllowUnsafeBlocks",
-    "switch": "unsafe",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "AllowUnsafeBlocks",
-    "switch": "unsafe-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "AllowUnsafeBlocks",
-    "switch": "unsafe+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DefineConstants",
-    "switch": "define:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "SemicolonAppendable",
-      "UserValue"
-    ]
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:ISO-1",
-    "comment": "",
-    "value": "ISO-1",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:ISO-2",
-    "comment": "",
-    "value": "ISO-2",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:3",
-    "comment": "",
-    "value": "3",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:4",
-    "comment": "",
-    "value": "4",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:5",
-    "comment": "",
-    "value": "5",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:6",
-    "comment": "",
-    "value": "6",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:default",
-    "comment": "",
-    "value": "default",
-    "flags": []
-  },
-  {
-    "name":  "DelaySign",
-    "switch": "delaysign",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DelaySign",
-    "switch": "delaysign-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "DelaySign",
-    "switch": "delaysign+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "AssemblyOriginatorKeyFile",
-    "switch": "keyfile",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "KeyContainerName",
-    "switch": "keycontainer",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "NoLogo",
-    "switch": "nologo",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "NoConfig",
-    "switch": "noconfig",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "BaseAddress",
-    "switch": "baseaddress:",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "CodePage",
-    "switch": "codepage",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "Utf8Output",
-    "switch": "utf8output",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "MainEntryPoint",
-    "switch": "main:",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "GenerateFullPaths",
-    "switch": "fullpaths",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "FileAlignment",
-    "switch": "filealign",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "PdbFile",
-    "switch": "pdb:",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "NoStandardLib",
-    "switch": "nostdlib",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "NoStandardLib",
-    "switch": "nostdlib-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "NoStandardLib",
-    "switch": "nostdlib+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "SubsystemVersion",
-    "switch": "subsystemversion",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "AdditionalLibPaths",
-    "switch": "lib:",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "ErrorReport",
-    "switch": "errorreport:none",
-    "comment": "Do Not Send Report",
-    "value": "none",
-    "flags": []
-  },
-  {
-    "name":  "ErrorReport",
-    "switch": "errorreport:prompt",
-    "comment": "Prompt Immediately",
-    "value": "prompt",
-    "flags": []
-  },
-  {
-    "name":  "ErrorReport",
-    "switch": "errorreport:queue",
-    "comment": "Queue For Next Login",
-    "value": "queue",
-    "flags": []
-  },
-  {
-    "name":  "ErrorReport",
-    "switch": "errorreport:send",
-    "comment": "Send Automatically",
-    "value": "send",
-    "flags": []
-  }
-]
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v140_Link.json b/share/cmake-3.18/Templates/MSBuild/FlagTables/v140_Link.json
deleted file mode 100644
index 3fb072c..0000000
--- a/share/cmake-3.18/Templates/MSBuild/FlagTables/v140_Link.json
+++ /dev/null
@@ -1,1316 +0,0 @@
-[
-  {
-    "name": "ShowProgress",
-    "switch": "",
-    "comment": "Not Set",
-    "value": "NotSet",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE",
-    "comment": "Display all progress messages",
-    "value": "LinkVerbose",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:Lib",
-    "comment": "For Libraries Searched",
-    "value": "LinkVerboseLib",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:ICF",
-    "comment": "About COMDAT folding during optimized linking",
-    "value": "LinkVerboseICF",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:REF",
-    "comment": "About data removed during optimized linking",
-    "value": "LinkVerboseREF",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:SAFESEH",
-    "comment": "About Modules incompatible with SEH",
-    "value": "LinkVerboseSAFESEH",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:CLR",
-    "comment": "About linker activity related to managed code",
-    "value": "LinkVerboseCLR",
-    "flags": []
-  },
-  {
-    "name": "ForceFileOutput",
-    "switch": "FORCE",
-    "comment": "Enabled",
-    "value": "Enabled",
-    "flags": []
-  },
-  {
-    "name": "ForceFileOutput",
-    "switch": "FORCE:MULTIPLE",
-    "comment": "Multiply Defined Symbol Only",
-    "value": "MultiplyDefinedSymbolOnly",
-    "flags": []
-  },
-  {
-    "name": "ForceFileOutput",
-    "switch": "FORCE:UNRESOLVED",
-    "comment": "Undefined Symbol Only",
-    "value": "UndefinedSymbolOnly",
-    "flags": []
-  },
-  {
-    "name": "CreateHotPatchableImage",
-    "switch": "FUNCTIONPADMIN",
-    "comment": "Enabled",
-    "value": "Enabled",
-    "flags": []
-  },
-  {
-    "name": "CreateHotPatchableImage",
-    "switch": "FUNCTIONPADMIN:5",
-    "comment": "X86 Image Only",
-    "value": "X86Image",
-    "flags": []
-  },
-  {
-    "name": "CreateHotPatchableImage",
-    "switch": "FUNCTIONPADMIN:6",
-    "comment": "X64 Image Only",
-    "value": "X64Image",
-    "flags": []
-  },
-  {
-    "name": "CreateHotPatchableImage",
-    "switch": "FUNCTIONPADMIN:16",
-    "comment": "Itanium Image Only",
-    "value": "ItaniumImage",
-    "flags": []
-  },
-  {
-    "name": "UACExecutionLevel",
-    "switch": "level='asInvoker'",
-    "comment": "asInvoker",
-    "value": "AsInvoker",
-    "flags": []
-  },
-  {
-    "name": "UACExecutionLevel",
-    "switch": "level='highestAvailable'",
-    "comment": "highestAvailable",
-    "value": "HighestAvailable",
-    "flags": []
-  },
-  {
-    "name": "UACExecutionLevel",
-    "switch": "level='requireAdministrator'",
-    "comment": "requireAdministrator",
-    "value": "RequireAdministrator",
-    "flags": []
-  },
-  {
-    "name": "GenerateDebugInformation",
-    "switch": "DEBUG",
-    "comment": "Optimize for debugging",
-    "value": "true",
-    "flags": [
-      "CaseInsensitive"
-    ]
-  },
-  {
-    "name": "GenerateDebugInformation",
-    "switch": "DEBUG:FASTLINK",
-    "comment": "Optimize for faster linking",
-    "value": "DebugFastLink",
-    "flags": [
-      "CaseInsensitive"
-    ]
-  },
-  {
-    "name": "GenerateDebugInformation",
-    "switch": "DEBUG:FULL",
-    "comment": "Optimize for debugging",
-    "value": "true",
-    "flags": [
-      "CaseInsensitive"
-    ]
-  },
-  {
-    "name": "GenerateDebugInformation",
-    "switch": "DEBUG:NONE",
-    "comment": "Produces no debugging information",
-    "value": "false",
-    "flags": [
-      "CaseInsensitive"
-    ]
-  },
-  {
-    "name": "SubSystem",
-    "switch": "",
-    "comment": "Not Set",
-    "value": "NotSet",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:CONSOLE",
-    "comment": "Console",
-    "value": "Console",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:WINDOWS",
-    "comment": "Windows",
-    "value": "Windows",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:NATIVE",
-    "comment": "Native",
-    "value": "Native",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:EFI_APPLICATION",
-    "comment": "EFI Application",
-    "value": "EFI Application",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
-    "comment": "EFI Boot Service Driver",
-    "value": "EFI Boot Service Driver",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:EFI_ROM",
-    "comment": "EFI ROM",
-    "value": "EFI ROM",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:EFI_RUNTIME_DRIVER",
-    "comment": "EFI Runtime",
-    "value": "EFI Runtime",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:POSIX",
-    "comment": "POSIX",
-    "value": "POSIX",
-    "flags": []
-  },
-  {
-    "name": "Driver",
-    "switch": "",
-    "comment": "Not Set",
-    "value": "NotSet",
-    "flags": []
-  },
-  {
-    "name": "Driver",
-    "switch": "Driver",
-    "comment": "Driver",
-    "value": "Driver",
-    "flags": []
-  },
-  {
-    "name": "Driver",
-    "switch": "DRIVER:UPONLY",
-    "comment": "UP Only",
-    "value": "UpOnly",
-    "flags": []
-  },
-  {
-    "name": "Driver",
-    "switch": "DRIVER:WDM",
-    "comment": "WDM",
-    "value": "WDM",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "",
-    "comment": "Default",
-    "value": "Default",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "LTCG:incremental",
-    "comment": "Use Fast Link Time Code Generation",
-    "value": "UseFastLinkTimeCodeGeneration",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "LTCG",
-    "comment": "Use Link Time Code Generation",
-    "value": "UseLinkTimeCodeGeneration",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "LTCG:PGInstrument",
-    "comment": "Profile Guided Optimization - Instrument",
-    "value": "PGInstrument",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "LTCG:PGOptimize",
-    "comment": "Profile Guided Optimization - Optimization",
-    "value": "PGOptimization",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "LTCG:PGUpdate",
-    "comment": "Profile Guided Optimization - Update",
-    "value": "PGUpdate",
-    "flags": []
-  },
-  {
-    "name": "GenerateWindowsMetadata",
-    "switch": "WINMD",
-    "comment": "Yes",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "GenerateWindowsMetadata",
-    "switch": "WINMD:NO",
-    "comment": "No",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataSignHash",
-    "switch": "WINMDSIGNHASH:SHA1",
-    "comment": "SHA1",
-    "value": "SHA1",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataSignHash",
-    "switch": "WINMDSIGNHASH:SHA256",
-    "comment": "SHA256",
-    "value": "SHA256",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataSignHash",
-    "switch": "WINMDSIGNHASH:SHA384",
-    "comment": "SHA384",
-    "value": "SHA384",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataSignHash",
-    "switch": "WINMDSIGNHASH:SHA512",
-    "comment": "SHA512",
-    "value": "SHA512",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "",
-    "comment": "Not Set",
-    "value": "NotSet",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:ARM",
-    "comment": "MachineARM",
-    "value": "MachineARM",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:EBC",
-    "comment": "MachineEBC",
-    "value": "MachineEBC",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:IA64",
-    "comment": "MachineIA64",
-    "value": "MachineIA64",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:MIPS",
-    "comment": "MachineMIPS",
-    "value": "MachineMIPS",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:MIPS16",
-    "comment": "MachineMIPS16",
-    "value": "MachineMIPS16",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:MIPSFPU",
-    "comment": "MachineMIPSFPU",
-    "value": "MachineMIPSFPU",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:MIPSFPU16",
-    "comment": "MachineMIPSFPU16",
-    "value": "MachineMIPSFPU16",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:SH4",
-    "comment": "MachineSH4",
-    "value": "MachineSH4",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:THUMB",
-    "comment": "MachineTHUMB",
-    "value": "MachineTHUMB",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:X64",
-    "comment": "MachineX64",
-    "value": "MachineX64",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:X86",
-    "comment": "MachineX86",
-    "value": "MachineX86",
-    "flags": []
-  },
-  {
-    "name": "CLRThreadAttribute",
-    "switch": "CLRTHREADATTRIBUTE:MTA",
-    "comment": "MTA threading attribute",
-    "value": "MTAThreadingAttribute",
-    "flags": []
-  },
-  {
-    "name": "CLRThreadAttribute",
-    "switch": "CLRTHREADATTRIBUTE:STA",
-    "comment": "STA threading attribute",
-    "value": "STAThreadingAttribute",
-    "flags": []
-  },
-  {
-    "name": "CLRThreadAttribute",
-    "switch": "CLRTHREADATTRIBUTE:NONE",
-    "comment": "Default threading attribute",
-    "value": "DefaultThreadingAttribute",
-    "flags": []
-  },
-  {
-    "name": "CLRImageType",
-    "switch": "CLRIMAGETYPE:IJW",
-    "comment": "Force IJW image",
-    "value": "ForceIJWImage",
-    "flags": []
-  },
-  {
-    "name": "CLRImageType",
-    "switch": "CLRIMAGETYPE:PURE",
-    "comment": "Force Pure IL Image",
-    "value": "ForcePureILImage",
-    "flags": []
-  },
-  {
-    "name": "CLRImageType",
-    "switch": "CLRIMAGETYPE:SAFE",
-    "comment": "Force Safe IL Image",
-    "value": "ForceSafeILImage",
-    "flags": []
-  },
-  {
-    "name": "CLRImageType",
-    "switch": "",
-    "comment": "Default image type",
-    "value": "Default",
-    "flags": []
-  },
-  {
-    "name": "SignHash",
-    "switch": "CLRSIGNHASH:SHA1",
-    "comment": "SHA1",
-    "value": "SHA1",
-    "flags": []
-  },
-  {
-    "name": "SignHash",
-    "switch": "CLRSIGNHASH:SHA256",
-    "comment": "SHA256",
-    "value": "SHA256",
-    "flags": []
-  },
-  {
-    "name": "SignHash",
-    "switch": "CLRSIGNHASH:SHA384",
-    "comment": "SHA384",
-    "value": "SHA384",
-    "flags": []
-  },
-  {
-    "name": "SignHash",
-    "switch": "CLRSIGNHASH:SHA512",
-    "comment": "SHA512",
-    "value": "SHA512",
-    "flags": []
-  },
-  {
-    "name": "LinkErrorReporting",
-    "switch": "ERRORREPORT:PROMPT",
-    "comment": "PromptImmediately",
-    "value": "PromptImmediately",
-    "flags": []
-  },
-  {
-    "name": "LinkErrorReporting",
-    "switch": "ERRORREPORT:QUEUE",
-    "comment": "Queue For Next Login",
-    "value": "QueueForNextLogin",
-    "flags": []
-  },
-  {
-    "name": "LinkErrorReporting",
-    "switch": "ERRORREPORT:SEND",
-    "comment": "Send Error Report",
-    "value": "SendErrorReport",
-    "flags": []
-  },
-  {
-    "name": "LinkErrorReporting",
-    "switch": "ERRORREPORT:NONE",
-    "comment": "No Error Report",
-    "value": "NoErrorReport",
-    "flags": []
-  },
-  {
-    "name": "CLRSupportLastError",
-    "switch": "CLRSupportLastError",
-    "comment": "Enabled",
-    "value": "Enabled",
-    "flags": []
-  },
-  {
-    "name": "CLRSupportLastError",
-    "switch": "CLRSupportLastError:NO",
-    "comment": "Disabled",
-    "value": "Disabled",
-    "flags": []
-  },
-  {
-    "name": "CLRSupportLastError",
-    "switch": "CLRSupportLastError:SYSTEMDLL",
-    "comment": "System Dlls Only",
-    "value": "SystemDlls",
-    "flags": []
-  },
-  {
-    "name": "LinkIncremental",
-    "switch": "INCREMENTAL:NO",
-    "comment": "Enable Incremental Linking",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "LinkIncremental",
-    "switch": "INCREMENTAL",
-    "comment": "Enable Incremental Linking",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SuppressStartupBanner",
-    "switch": "NOLOGO",
-    "comment": "Suppress Startup Banner",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "LinkStatus",
-    "switch": "LTCG:NOSTATUS",
-    "comment": "Link Status",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "LinkStatus",
-    "switch": "LTCG:STATUS",
-    "comment": "Link Status",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "PreventDllBinding",
-    "switch": "ALLOWBIND:NO",
-    "comment": "Prevent Dll Binding",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "PreventDllBinding",
-    "switch": "ALLOWBIND",
-    "comment": "Prevent Dll Binding",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "TreatLinkerWarningAsErrors",
-    "switch": "WX:NO",
-    "comment": "Treat Linker Warning As Errors",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "TreatLinkerWarningAsErrors",
-    "switch": "WX",
-    "comment": "Treat Linker Warning As Errors",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "IgnoreAllDefaultLibraries",
-    "switch": "NODEFAULTLIB",
-    "comment": "Ignore All Default Libraries",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "GenerateManifest",
-    "switch": "MANIFEST:NO",
-    "comment": "Generate Manifest",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "GenerateManifest",
-    "switch": "MANIFEST",
-    "comment": "Generate Manifest",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "AllowIsolation",
-    "switch": "ALLOWISOLATION:NO",
-    "comment": "Allow Isolation",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "AllowIsolation",
-    "switch": "",
-    "comment": "Allow Isolation",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "EnableUAC",
-    "switch": "MANIFESTUAC:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired",
-      "SpaceAppendable"
-    ]
-  },
-  {
-    "name": "UACUIAccess",
-    "switch": "uiAccess='false'",
-    "comment": "UAC Bypass UI Protection",
-    "value": "false",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "UACUIAccess",
-    "switch": "uiAccess='false'",
-    "comment": "UAC Bypass UI Protection",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "UACUIAccess",
-    "switch": "uiAccess='true'",
-    "comment": "UAC Bypass UI Protection",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "ManifestEmbed",
-    "switch": "manifest:embed",
-    "comment": "Embed Manifest",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "GenerateMapFile",
-    "switch": "MAP",
-    "comment": "Generate Map File",
-    "value": "true",
-    "flags": [
-      "UserValue",
-      "UserIgnored",
-      "Continue"
-    ]
-  },
-  {
-    "name": "MapExports",
-    "switch": "MAPINFO:EXPORTS",
-    "comment": "Map Exports",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "AssemblyDebug",
-    "switch": "ASSEMBLYDEBUG:DISABLE",
-    "comment": "Debuggable Assembly",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "AssemblyDebug",
-    "switch": "ASSEMBLYDEBUG",
-    "comment": "Debuggable Assembly",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "LargeAddressAware",
-    "switch": "LARGEADDRESSAWARE:NO",
-    "comment": "Enable Large Addresses",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "LargeAddressAware",
-    "switch": "LARGEADDRESSAWARE",
-    "comment": "Enable Large Addresses",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "TerminalServerAware",
-    "switch": "TSAWARE:NO",
-    "comment": "Terminal Server",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "TerminalServerAware",
-    "switch": "TSAWARE",
-    "comment": "Terminal Server",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SwapRunFromCD",
-    "switch": "SWAPRUN:CD",
-    "comment": "Swap Run From CD",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SwapRunFromNET",
-    "switch": "SWAPRUN:NET",
-    "comment": "Swap Run From Network",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "OptimizeReferences",
-    "switch": "OPT:NOREF",
-    "comment": "References",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "OptimizeReferences",
-    "switch": "OPT:REF",
-    "comment": "References",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "EnableCOMDATFolding",
-    "switch": "OPT:NOICF",
-    "comment": "Enable COMDAT Folding",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "EnableCOMDATFolding",
-    "switch": "OPT:ICF",
-    "comment": "Enable COMDAT Folding",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "IgnoreEmbeddedIDL",
-    "switch": "IGNOREIDL",
-    "comment": "Ignore Embedded IDL",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "AppContainer",
-    "switch": "APPCONTAINER",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataLinkDelaySign",
-    "switch": "WINMDDELAYSIGN:NO",
-    "comment": "Windows Metadata Delay Sign",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataLinkDelaySign",
-    "switch": "WINMDDELAYSIGN",
-    "comment": "Windows Metadata Delay Sign",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "NoEntryPoint",
-    "switch": "NOENTRY",
-    "comment": "No Entry Point",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SetChecksum",
-    "switch": "RELEASE",
-    "comment": "Set Checksum",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "RandomizedBaseAddress",
-    "switch": "DYNAMICBASE:NO",
-    "comment": "Randomized Base Address",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "RandomizedBaseAddress",
-    "switch": "DYNAMICBASE",
-    "comment": "Randomized Base Address",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "FixedBaseAddress",
-    "switch": "FIXED:NO",
-    "comment": "Fixed Base Address",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "FixedBaseAddress",
-    "switch": "FIXED",
-    "comment": "Fixed Base Address",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "DataExecutionPrevention",
-    "switch": "NXCOMPAT:NO",
-    "comment": "Data Execution Prevention (DEP)",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "DataExecutionPrevention",
-    "switch": "NXCOMPAT",
-    "comment": "Data Execution Prevention (DEP)",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "TurnOffAssemblyGeneration",
-    "switch": "NOASSEMBLY",
-    "comment": "Turn Off Assembly Generation",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SupportUnloadOfDelayLoadedDLL",
-    "switch": "DELAY:UNLOAD",
-    "comment": "Unload delay loaded DLL",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SupportNobindOfDelayLoadedDLL",
-    "switch": "DELAY:NOBIND",
-    "comment": "Nobind delay loaded DLL",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "Profile",
-    "switch": "PROFILE",
-    "comment": "Profile",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "LinkDelaySign",
-    "switch": "DELAYSIGN:NO",
-    "comment": "Delay Sign",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "LinkDelaySign",
-    "switch": "DELAYSIGN",
-    "comment": "Delay Sign",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "CLRUnmanagedCodeCheck",
-    "switch": "CLRUNMANAGEDCODECHECK:NO",
-    "comment": "CLR Unmanaged Code Check",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "CLRUnmanagedCodeCheck",
-    "switch": "CLRUNMANAGEDCODECHECK",
-    "comment": "CLR Unmanaged Code Check",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "DetectOneDefinitionRule",
-    "switch": "ODR",
-    "comment": "Detect One Definition Rule violations",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "ImageHasSafeExceptionHandlers",
-    "switch": "SAFESEH:NO",
-    "comment": "Image Has Safe Exception Handlers",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "ImageHasSafeExceptionHandlers",
-    "switch": "SAFESEH",
-    "comment": "Image Has Safe Exception Handlers",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "LinkDLL",
-    "switch": "DLL",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "AdditionalLibraryDirectories",
-    "switch": "LIBPATH:",
-    "comment": "Additional Library Directories",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "Natvis",
-    "switch": "NATVIS:",
-    "comment": "Natvis files",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "IgnoreSpecificDefaultLibraries",
-    "switch": "NODEFAULTLIB:",
-    "comment": "Ignore Specific Default Libraries",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "AddModuleNamesToAssembly",
-    "switch": "ASSEMBLYMODULE:",
-    "comment": "Add Module to Assembly",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "EmbedManagedResourceFile",
-    "switch": "ASSEMBLYRESOURCE:",
-    "comment": "Embed Managed Resource File",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "ForceSymbolReferences",
-    "switch": "INCLUDE:",
-    "comment": "Force Symbol References",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "DelayLoadDLLs",
-    "switch": "DELAYLOAD:",
-    "comment": "Delay Loaded Dlls",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "AssemblyLinkResource",
-    "switch": "ASSEMBLYLINKRESOURCE:",
-    "comment": "Assembly Link Resource",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "AdditionalManifestDependencies",
-    "switch": "MANIFESTDEPENDENCY:",
-    "comment": "Additional Manifest Dependencies",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "ManifestInput",
-    "switch": "manifestinput:",
-    "comment": "Manifest Input",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "OutputFile",
-    "switch": "OUT:",
-    "comment": "Output File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "Version",
-    "switch": "VERSION:",
-    "comment": "Version",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "SpecifySectionAttributes",
-    "switch": "SECTION:",
-    "comment": "Specify Section Attributes",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MSDOSStubFileName",
-    "switch": "STUB:",
-    "comment": "MS-DOS Stub File Name",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ModuleDefinitionFile",
-    "switch": "DEF:",
-    "comment": "Module Definition File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ManifestFile",
-    "switch": "ManifestFile:",
-    "comment": "Manifest File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ProgramDatabaseFile",
-    "switch": "PDB:",
-    "comment": "Generate Program Database File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "StripPrivateSymbols",
-    "switch": "PDBSTRIPPED:",
-    "comment": "Strip Private Symbols",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MapFileName",
-    "switch": "MAP:",
-    "comment": "Map File Name",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "HeapReserveSize",
-    "switch": "HEAP:",
-    "comment": "Heap Reserve Size",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "HeapCommitSize",
-    "switch": "HEAP",
-    "comment": "Heap Commit Size",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "StackReserveSize",
-    "switch": "STACK:",
-    "comment": "Stack Reserve Size",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "StackCommitSize",
-    "switch": "STACK",
-    "comment": "Stack Commit Size",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "FunctionOrder",
-    "switch": "ORDER:@",
-    "comment": "Function Order",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ProfileGuidedDatabase",
-    "switch": "PGD:",
-    "comment": "Profile Guided Database",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MidlCommandFile",
-    "switch": "MIDL:@",
-    "comment": "MIDL Commands",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MergedIDLBaseFileName",
-    "switch": "IDLOUT:",
-    "comment": "Merged IDL Base File Name",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "TypeLibraryFile",
-    "switch": "TLBOUT:",
-    "comment": "Type Library",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "WindowsMetadataFile",
-    "switch": "WINMDFILE:",
-    "comment": "Windows Metadata File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "WindowsMetadataLinkKeyFile",
-    "switch": "WINMDKEYFILE:",
-    "comment": "Windows Metadata Key File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "WindowsMetadataKeyContainer",
-    "switch": "WINMDKEYCONTAINER:",
-    "comment": "Windows Metadata Key Container",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "EntryPointSymbol",
-    "switch": "ENTRY:",
-    "comment": "Entry Point",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "BaseAddress",
-    "switch": "BASE:",
-    "comment": "Base Address",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ImportLibrary",
-    "switch": "IMPLIB:",
-    "comment": "Import Library",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MergeSections",
-    "switch": "MERGE:",
-    "comment": "Merge Sections",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "LinkKeyFile",
-    "switch": "KEYFILE:",
-    "comment": "Key File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "KeyContainer",
-    "switch": "KEYCONTAINER:",
-    "comment": "Key Container",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "TypeLibraryResourceID",
-    "switch": "TLBID:",
-    "comment": "TypeLib Resource ID",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "SectionAlignment",
-    "switch": "ALIGN:",
-    "comment": "SectionAlignment",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  }
-]
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v141_CL.json b/share/cmake-3.18/Templates/MSBuild/FlagTables/v141_CL.json
deleted file mode 100644
index 01fafe4..0000000
--- a/share/cmake-3.18/Templates/MSBuild/FlagTables/v141_CL.json
+++ /dev/null
@@ -1,1268 +0,0 @@
-[
-  {
-    "name": "DebugInformationFormat",
-    "switch": "",
-    "comment": "None",
-    "value": "None",
-    "flags": []
-  },
-  {
-    "name": "DebugInformationFormat",
-    "switch": "Z7",
-    "comment": "C7 compatible",
-    "value": "OldStyle",
-    "flags": []
-  },
-  {
-    "name": "DebugInformationFormat",
-    "switch": "Zi",
-    "comment": "Program Database",
-    "value": "ProgramDatabase",
-    "flags": []
-  },
-  {
-    "name": "DebugInformationFormat",
-    "switch": "ZI",
-    "comment": "Program Database for Edit And Continue",
-    "value": "EditAndContinue",
-    "flags": []
-  },
-  {
-    "name": "CompileAsManaged",
-    "switch": "",
-    "comment": "No Common Language RunTime Support",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "CompileAsManaged",
-    "switch": "clr",
-    "comment": "Common Language RunTime Support",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "CompileAsManaged",
-    "switch": "clr:pure",
-    "comment": "Pure MSIL Common Language RunTime Support",
-    "value": "Pure",
-    "flags": []
-  },
-  {
-    "name": "CompileAsManaged",
-    "switch": "clr:safe",
-    "comment": "Safe MSIL Common Language RunTime Support",
-    "value": "Safe",
-    "flags": []
-  },
-  {
-    "name": "WarningLevel",
-    "switch": "W0",
-    "comment": "Turn Off All Warnings",
-    "value": "TurnOffAllWarnings",
-    "flags": []
-  },
-  {
-    "name": "WarningLevel",
-    "switch": "W1",
-    "comment": "Level1",
-    "value": "Level1",
-    "flags": []
-  },
-  {
-    "name": "WarningLevel",
-    "switch": "W2",
-    "comment": "Level2",
-    "value": "Level2",
-    "flags": []
-  },
-  {
-    "name": "WarningLevel",
-    "switch": "W3",
-    "comment": "Level3",
-    "value": "Level3",
-    "flags": []
-  },
-  {
-    "name": "WarningLevel",
-    "switch": "W4",
-    "comment": "Level4",
-    "value": "Level4",
-    "flags": []
-  },
-  {
-    "name": "WarningLevel",
-    "switch": "Wall",
-    "comment": "EnableAllWarnings",
-    "value": "EnableAllWarnings",
-    "flags": []
-  },
-  {
-    "name": "DiagnosticsFormat",
-    "switch": "diagnostics:caret",
-    "comment": "Caret",
-    "value": "Caret",
-    "flags": []
-  },
-  {
-    "name": "DiagnosticsFormat",
-    "switch": "diagnostics:column",
-    "comment": "Column Info",
-    "value": "Column",
-    "flags": []
-  },
-  {
-    "name": "DiagnosticsFormat",
-    "switch": "diagnostics:classic",
-    "comment": "Classic",
-    "value": "Classic",
-    "flags": []
-  },
-  {
-    "name": "Optimization",
-    "switch": "",
-    "comment": "Custom",
-    "value": "Custom",
-    "flags": []
-  },
-  {
-    "name": "Optimization",
-    "switch": "Od",
-    "comment": "Disabled",
-    "value": "Disabled",
-    "flags": []
-  },
-  {
-    "name": "Optimization",
-    "switch": "O1",
-    "comment": "Maximum Optimization (Favor Size)",
-    "value": "MinSpace",
-    "flags": []
-  },
-  {
-    "name": "Optimization",
-    "switch": "O2",
-    "comment": "Maximum Optimization (Favor Speed)",
-    "value": "MaxSpeed",
-    "flags": []
-  },
-  {
-    "name": "Optimization",
-    "switch": "Ox",
-    "comment": "Optimizations (Favor Speed)",
-    "value": "Full",
-    "flags": []
-  },
-  {
-    "name": "InlineFunctionExpansion",
-    "switch": "",
-    "comment": "Default",
-    "value": "Default",
-    "flags": []
-  },
-  {
-    "name": "InlineFunctionExpansion",
-    "switch": "Ob0",
-    "comment": "Disabled",
-    "value": "Disabled",
-    "flags": []
-  },
-  {
-    "name": "InlineFunctionExpansion",
-    "switch": "Ob1",
-    "comment": "Only __inline",
-    "value": "OnlyExplicitInline",
-    "flags": []
-  },
-  {
-    "name": "InlineFunctionExpansion",
-    "switch": "Ob2",
-    "comment": "Any Suitable",
-    "value": "AnySuitable",
-    "flags": []
-  },
-  {
-    "name": "FavorSizeOrSpeed",
-    "switch": "Os",
-    "comment": "Favor small code",
-    "value": "Size",
-    "flags": []
-  },
-  {
-    "name": "FavorSizeOrSpeed",
-    "switch": "Ot",
-    "comment": "Favor fast code",
-    "value": "Speed",
-    "flags": []
-  },
-  {
-    "name": "FavorSizeOrSpeed",
-    "switch": "",
-    "comment": "Neither",
-    "value": "Neither",
-    "flags": []
-  },
-  {
-    "name": "ExceptionHandling",
-    "switch": "EHa",
-    "comment": "Yes with SEH Exceptions",
-    "value": "Async",
-    "flags": []
-  },
-  {
-    "name": "ExceptionHandling",
-    "switch": "EHsc",
-    "comment": "Yes",
-    "value": "Sync",
-    "flags": []
-  },
-  {
-    "name": "ExceptionHandling",
-    "switch": "EHs",
-    "comment": "Yes with Extern C functions",
-    "value": "SyncCThrow",
-    "flags": []
-  },
-  {
-    "name": "ExceptionHandling",
-    "switch": "",
-    "comment": "No",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "BasicRuntimeChecks",
-    "switch": "RTCs",
-    "comment": "Stack Frames",
-    "value": "StackFrameRuntimeCheck",
-    "flags": []
-  },
-  {
-    "name": "BasicRuntimeChecks",
-    "switch": "RTCu",
-    "comment": "Uninitialized variables",
-    "value": "UninitializedLocalUsageCheck",
-    "flags": []
-  },
-  {
-    "name": "BasicRuntimeChecks",
-    "switch": "RTC1",
-    "comment": "Both (/RTC1, equiv. to /RTCsu)",
-    "value": "EnableFastChecks",
-    "flags": []
-  },
-  {
-    "name": "BasicRuntimeChecks",
-    "switch": "",
-    "comment": "Default",
-    "value": "Default",
-    "flags": []
-  },
-  {
-    "name": "RuntimeLibrary",
-    "switch": "MT",
-    "comment": "Multi-threaded",
-    "value": "MultiThreaded",
-    "flags": []
-  },
-  {
-    "name": "RuntimeLibrary",
-    "switch": "MTd",
-    "comment": "Multi-threaded Debug",
-    "value": "MultiThreadedDebug",
-    "flags": []
-  },
-  {
-    "name": "RuntimeLibrary",
-    "switch": "MD",
-    "comment": "Multi-threaded DLL",
-    "value": "MultiThreadedDLL",
-    "flags": []
-  },
-  {
-    "name": "RuntimeLibrary",
-    "switch": "MDd",
-    "comment": "Multi-threaded Debug DLL",
-    "value": "MultiThreadedDebugDLL",
-    "flags": []
-  },
-  {
-    "name": "StructMemberAlignment",
-    "switch": "Zp1",
-    "comment": "1 Byte",
-    "value": "1Byte",
-    "flags": []
-  },
-  {
-    "name": "StructMemberAlignment",
-    "switch": "Zp2",
-    "comment": "2 Bytes",
-    "value": "2Bytes",
-    "flags": []
-  },
-  {
-    "name": "StructMemberAlignment",
-    "switch": "Zp4",
-    "comment": "4 Byte",
-    "value": "4Bytes",
-    "flags": []
-  },
-  {
-    "name": "StructMemberAlignment",
-    "switch": "Zp8",
-    "comment": "8 Bytes",
-    "value": "8Bytes",
-    "flags": []
-  },
-  {
-    "name": "StructMemberAlignment",
-    "switch": "Zp16",
-    "comment": "16 Bytes",
-    "value": "16Bytes",
-    "flags": []
-  },
-  {
-    "name": "StructMemberAlignment",
-    "switch": "",
-    "comment": "Default",
-    "value": "Default",
-    "flags": []
-  },
-  {
-    "name": "BufferSecurityCheck",
-    "switch": "GS-",
-    "comment": "Disable Security Check",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "BufferSecurityCheck",
-    "switch": "GS",
-    "comment": "Enable Security Check",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "ControlFlowGuard",
-    "switch": "guard:cf",
-    "comment": "Yes",
-    "value": "Guard",
-    "flags": []
-  },
-  {
-    "name": "ControlFlowGuard",
-    "switch": "",
-    "comment": "No",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "EnableEnhancedInstructionSet",
-    "switch": "arch:SSE",
-    "comment": "Streaming SIMD Extensions",
-    "value": "StreamingSIMDExtensions",
-    "flags": []
-  },
-  {
-    "name": "EnableEnhancedInstructionSet",
-    "switch": "arch:SSE2",
-    "comment": "Streaming SIMD Extensions 2",
-    "value": "StreamingSIMDExtensions2",
-    "flags": []
-  },
-  {
-    "name": "EnableEnhancedInstructionSet",
-    "switch": "arch:AVX",
-    "comment": "Advanced Vector Extensions",
-    "value": "AdvancedVectorExtensions",
-    "flags": []
-  },
-  {
-    "name": "EnableEnhancedInstructionSet",
-    "switch": "arch:AVX2",
-    "comment": "Advanced Vector Extensions 2",
-    "value": "AdvancedVectorExtensions2",
-    "flags": []
-  },
-  {
-    "name": "EnableEnhancedInstructionSet",
-    "switch": "arch:IA32",
-    "comment": "No Enhanced Instructions",
-    "value": "NoExtensions",
-    "flags": []
-  },
-  {
-    "name": "EnableEnhancedInstructionSet",
-    "switch": "",
-    "comment": "Not Set",
-    "value": "NotSet",
-    "flags": []
-  },
-  {
-    "name": "FloatingPointModel",
-    "switch": "fp:precise",
-    "comment": "Precise",
-    "value": "Precise",
-    "flags": []
-  },
-  {
-    "name": "FloatingPointModel",
-    "switch": "fp:strict",
-    "comment": "Strict",
-    "value": "Strict",
-    "flags": []
-  },
-  {
-    "name": "FloatingPointModel",
-    "switch": "fp:fast",
-    "comment": "Fast",
-    "value": "Fast",
-    "flags": []
-  },
-  {
-    "name": "SpectreMitigation",
-    "switch": "Qspectre",
-    "comment": "Spectre mitigations",
-    "value": "Spectre",
-    "flags": []
-  },
-  {
-    "name": "LanguageStandard",
-    "switch": "std:c++14",
-    "comment": "ISO C++14 Standard",
-    "value": "stdcpp14",
-    "flags": []
-  },
-  {
-    "name": "LanguageStandard",
-    "switch": "std:c++17",
-    "comment": "ISO C++17 Standard",
-    "value": "stdcpp17",
-    "flags": []
-  },
-  {
-    "name": "LanguageStandard",
-    "switch": "std:c++latest",
-    "comment": "ISO C++ Latest Draft Standard",
-    "value": "stdcpplatest",
-    "flags": []
-  },
-  {
-    "name": "PrecompiledHeader",
-    "switch": "Yc",
-    "comment": "Create",
-    "value": "Create",
-    "flags": [
-      "UserValue",
-      "UserIgnored",
-      "Continue"
-    ]
-  },
-  {
-    "name": "PrecompiledHeader",
-    "switch": "Yu",
-    "comment": "Use",
-    "value": "Use",
-    "flags": [
-      "UserValue",
-      "UserIgnored",
-      "Continue"
-    ]
-  },
-  {
-    "name": "PrecompiledHeader",
-    "switch": "Y-",
-    "comment": "Not Using Precompiled Headers",
-    "value": "NotUsing",
-    "flags": []
-  },
-  {
-    "name": "AssemblerOutput",
-    "switch": "",
-    "comment": "No Listing",
-    "value": "NoListing",
-    "flags": []
-  },
-  {
-    "name": "AssemblerOutput",
-    "switch": "FA",
-    "comment": "Assembly-Only Listing",
-    "value": "AssemblyCode",
-    "flags": []
-  },
-  {
-    "name": "AssemblerOutput",
-    "switch": "FAc",
-    "comment": "Assembly With Machine Code",
-    "value": "AssemblyAndMachineCode",
-    "flags": []
-  },
-  {
-    "name": "AssemblerOutput",
-    "switch": "FAs",
-    "comment": "Assembly With Source Code",
-    "value": "AssemblyAndSourceCode",
-    "flags": []
-  },
-  {
-    "name": "AssemblerOutput",
-    "switch": "FAcs",
-    "comment": "Assembly, Machine Code and Source",
-    "value": "All",
-    "flags": []
-  },
-  {
-    "name": "CallingConvention",
-    "switch": "Gd",
-    "comment": "__cdecl",
-    "value": "Cdecl",
-    "flags": []
-  },
-  {
-    "name": "CallingConvention",
-    "switch": "Gr",
-    "comment": "__fastcall",
-    "value": "FastCall",
-    "flags": []
-  },
-  {
-    "name": "CallingConvention",
-    "switch": "Gz",
-    "comment": "__stdcall",
-    "value": "StdCall",
-    "flags": []
-  },
-  {
-    "name": "CallingConvention",
-    "switch": "Gv",
-    "comment": "__vectorcall",
-    "value": "VectorCall",
-    "flags": []
-  },
-  {
-    "name": "CompileAs",
-    "switch": "",
-    "comment": "Default",
-    "value": "Default",
-    "flags": []
-  },
-  {
-    "name": "CompileAs",
-    "switch": "TC",
-    "comment": "Compile as C Code",
-    "value": "CompileAsC",
-    "flags": []
-  },
-  {
-    "name": "CompileAs",
-    "switch": "TP",
-    "comment": "Compile as C++ Code",
-    "value": "CompileAsCpp",
-    "flags": []
-  },
-  {
-    "name": "ErrorReporting",
-    "switch": "errorReport:none",
-    "comment": "Do Not Send Report",
-    "value": "None",
-    "flags": []
-  },
-  {
-    "name": "ErrorReporting",
-    "switch": "errorReport:prompt",
-    "comment": "Prompt Immediately",
-    "value": "Prompt",
-    "flags": []
-  },
-  {
-    "name": "ErrorReporting",
-    "switch": "errorReport:queue",
-    "comment": "Queue For Next Login",
-    "value": "Queue",
-    "flags": []
-  },
-  {
-    "name": "ErrorReporting",
-    "switch": "errorReport:send",
-    "comment": "Send Automatically",
-    "value": "Send",
-    "flags": []
-  },
-  {
-    "name": "CompileAsWinRT",
-    "switch": "ZW",
-    "comment": "Consume Windows Runtime Extension",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "WinRTNoStdLib",
-    "switch": "ZW:nostdlib",
-    "comment": "No Standard WinRT Libraries",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SuppressStartupBanner",
-    "switch": "nologo",
-    "comment": "Suppress Startup Banner",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "TreatWarningAsError",
-    "switch": "WX-",
-    "comment": "Treat Warnings As Errors",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "TreatWarningAsError",
-    "switch": "WX",
-    "comment": "Treat Warnings As Errors",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SDLCheck",
-    "switch": "sdl-",
-    "comment": "SDL checks",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "SDLCheck",
-    "switch": "sdl",
-    "comment": "SDL checks",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "MultiProcessorCompilation",
-    "switch": "MP",
-    "comment": "Multi-processor Compilation",
-    "value": "true",
-    "flags": [
-      "UserValue",
-      "UserIgnored",
-      "Continue"
-    ]
-  },
-  {
-    "name": "IntrinsicFunctions",
-    "switch": "Oi",
-    "comment": "Enable Intrinsic Functions",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "OmitFramePointers",
-    "switch": "Oy-",
-    "comment": "Omit Frame Pointers",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "OmitFramePointers",
-    "switch": "Oy",
-    "comment": "Omit Frame Pointers",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "EnableFiberSafeOptimizations",
-    "switch": "GT",
-    "comment": "Enable Fiber-Safe Optimizations",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "WholeProgramOptimization",
-    "switch": "GL",
-    "comment": "Whole Program Optimization",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "UndefineAllPreprocessorDefinitions",
-    "switch": "u",
-    "comment": "Undefine All Preprocessor Definitions",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "IgnoreStandardIncludePath",
-    "switch": "X",
-    "comment": "Ignore Standard Include Paths",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "PreprocessToFile",
-    "switch": "P",
-    "comment": "Preprocess to a File",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "PreprocessSuppressLineNumbers",
-    "switch": "EP",
-    "comment": "Preprocess Suppress Line Numbers",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "PreprocessKeepComments",
-    "switch": "C",
-    "comment": "Keep Comments",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "StringPooling",
-    "switch": "GF-",
-    "comment": "Enable String Pooling",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "StringPooling",
-    "switch": "GF",
-    "comment": "Enable String Pooling",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "MinimalRebuild",
-    "switch": "Gm-",
-    "comment": "Enable Minimal Rebuild",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "MinimalRebuild",
-    "switch": "Gm",
-    "comment": "Enable Minimal Rebuild",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SmallerTypeCheck",
-    "switch": "RTCc",
-    "comment": "Smaller Type Check",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "FunctionLevelLinking",
-    "switch": "Gy-",
-    "comment": "Enable Function-Level Linking",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "FunctionLevelLinking",
-    "switch": "Gy",
-    "comment": "Enable Function-Level Linking",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "EnableParallelCodeGeneration",
-    "switch": "Qpar-",
-    "comment": "Enable Parallel Code Generation",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "EnableParallelCodeGeneration",
-    "switch": "Qpar",
-    "comment": "Enable Parallel Code Generation",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "FloatingPointExceptions",
-    "switch": "fp:except-",
-    "comment": "Enable Floating Point Exceptions",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "FloatingPointExceptions",
-    "switch": "fp:except",
-    "comment": "Enable Floating Point Exceptions",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "CreateHotpatchableImage",
-    "switch": "hotpatch",
-    "comment": "Create Hotpatchable Image",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "DisableLanguageExtensions",
-    "switch": "Za",
-    "comment": "Disable Language Extensions",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "ConformanceMode",
-    "switch": "permissive-",
-    "comment": "Conformance mode enabled",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "ConformanceMode",
-    "switch": "permissive",
-    "comment": "Conformance mode disabled",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "TreatWChar_tAsBuiltInType",
-    "switch": "Zc:wchar_t-",
-    "comment": "Treat WChar_t As Built in Type",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "TreatWChar_tAsBuiltInType",
-    "switch": "Zc:wchar_t",
-    "comment": "Treat WChar_t As Built in Type",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "ForceConformanceInForLoopScope",
-    "switch": "Zc:forScope-",
-    "comment": "Force Conformance in For Loop Scope",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "ForceConformanceInForLoopScope",
-    "switch": "Zc:forScope",
-    "comment": "Force Conformance in For Loop Scope",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "RemoveUnreferencedCodeData",
-    "switch": "Zc:inline-",
-    "comment": "Remove unreferenced code and data",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "RemoveUnreferencedCodeData",
-    "switch": "Zc:inline",
-    "comment": "Remove unreferenced code and data",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "EnforceTypeConversionRules",
-    "switch": "Zc:rvalueCast-",
-    "comment": "Enforce type conversion rules",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "EnforceTypeConversionRules",
-    "switch": "Zc:rvalueCast",
-    "comment": "Enforce type conversion rules",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "RuntimeTypeInfo",
-    "switch": "GR-",
-    "comment": "Enable Run-Time Type Information",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "RuntimeTypeInfo",
-    "switch": "GR",
-    "comment": "Enable Run-Time Type Information",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "OpenMPSupport",
-    "switch": "openmp-",
-    "comment": "Open MP Support",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "OpenMPSupport",
-    "switch": "openmp",
-    "comment": "Open MP Support",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "EnableModules",
-    "switch": "experimental:module",
-    "comment": "Enable C++ Modules (experimental)",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "ExpandAttributedSource",
-    "switch": "Fx",
-    "comment": "Expand Attributed Source",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "UseUnicodeForAssemblerListing",
-    "switch": "FAu",
-    "comment": "Use Unicode For Assembler Listing",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "GenerateXMLDocumentationFiles",
-    "switch": "doc",
-    "comment": "Generate XML Documentation Files",
-    "value": "true",
-    "flags": [
-      "UserValue",
-      "UserIgnored",
-      "Continue"
-    ]
-  },
-  {
-    "name": "BrowseInformation",
-    "switch": "FR",
-    "comment": "Enable Browse Information",
-    "value": "true",
-    "flags": [
-      "UserValue",
-      "UserIgnored",
-      "Continue"
-    ]
-  },
-  {
-    "name": "ShowIncludes",
-    "switch": "showIncludes",
-    "comment": "Show Includes",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "EnablePREfast",
-    "switch": "analyze-",
-    "comment": "Enable Code Analysis",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "EnablePREfast",
-    "switch": "analyze",
-    "comment": "Enable Code Analysis",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "UseFullPaths",
-    "switch": "FC",
-    "comment": "Use Full Paths",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "OmitDefaultLibName",
-    "switch": "Zl",
-    "comment": "Omit Default Library Name",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "AdditionalIncludeDirectories",
-    "switch": "I",
-    "comment": "Additional Include Directories",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "AdditionalUsingDirectories",
-    "switch": "AI",
-    "comment": "Additional #using Directories",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "PreprocessorDefinitions",
-    "switch": "D",
-    "comment": "Preprocessor Definitions",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "UndefinePreprocessorDefinitions",
-    "switch": "U",
-    "comment": "Undefine Preprocessor Definitions",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "DisableSpecificWarnings",
-    "switch": "wd",
-    "comment": "Disable Specific Warnings",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "ForcedIncludeFiles",
-    "switch": "FI",
-    "comment": "Forced Include File",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "ForcedUsingFiles",
-    "switch": "FU",
-    "comment": "Forced #using File",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "PREfastLog",
-    "switch": "analyze:log",
-    "comment": "Code Analysis Log",
-    "value": "",
-    "flags": [
-      "UserFollowing"
-    ]
-  },
-  {
-    "name": "PREfastAdditionalPlugins",
-    "switch": "analyze:plugin",
-    "comment": "Additional Code Analysis Native plugins",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "TreatSpecificWarningsAsErrors",
-    "switch": "we",
-    "comment": "Treat Specific Warnings As Errors",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "WarningVersion",
-    "switch": "Wv:",
-    "comment": "Warning Version",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "PreprocessOutputPath",
-    "switch": "Fi",
-    "comment": "Preprocess Output Path",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "PrecompiledHeaderFile",
-    "switch": "Yu",
-    "comment": "Precompiled Header File",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "PrecompiledHeaderFile",
-    "switch": "Yc",
-    "comment": "Precompiled Header File",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "PrecompiledHeaderOutputFile",
-    "switch": "Fp",
-    "comment": "Precompiled Header Output File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "AssemblerListingLocation",
-    "switch": "Fa",
-    "comment": "ASM List Location",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ObjectFileName",
-    "switch": "Fo",
-    "comment": "Object File Name",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ProgramDataBaseFileName",
-    "switch": "Fd",
-    "comment": "Program Database File Name",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "XMLDocumentationFileName",
-    "switch": "doc",
-    "comment": "XML Documentation File Name",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "BrowseInformationFile",
-    "switch": "FR",
-    "comment": "Browse Information File",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "ProcessorNumber",
-    "switch": "MP",
-    "comment": "Number of processors",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "CppLanguageStandard",
-    "switch": "",
-    "comment": "Default",
-    "value": "Default",
-    "flags": []
-  },
-  {
-    "name": "CppLanguageStandard",
-    "switch": "std=c++98",
-    "comment": "C++03",
-    "value": "c++98",
-    "flags": []
-  },
-  {
-    "name": "CppLanguageStandard",
-    "switch": "std=c++11",
-    "comment": "C++11",
-    "value": "c++11",
-    "flags": []
-  },
-  {
-    "name": "CppLanguageStandard",
-    "switch": "std=c++1y",
-    "comment": "C++14",
-    "value": "c++1y",
-    "flags": []
-  },
-  {
-    "name": "CppLanguageStandard",
-    "switch": "std=c++14",
-    "comment": "C++14",
-    "value": "c++1y",
-    "flags": []
-  },
-  {
-    "name": "CppLanguageStandard",
-    "switch": "std=gnu++98",
-    "comment": "C++03 (GNU Dialect)",
-    "value": "gnu++98",
-    "flags": []
-  },
-  {
-    "name": "CppLanguageStandard",
-    "switch": "std=gnu++11",
-    "comment": "C++11 (GNU Dialect)",
-    "value": "gnu++11",
-    "flags": []
-  },
-  {
-    "name": "CppLanguageStandard",
-    "switch": "std=gnu++1y",
-    "comment": "C++14 (GNU Dialect)",
-    "value": "gnu++1y",
-    "flags": []
-  },
-  {
-    "name": "CppLanguageStandard",
-    "switch": "std=gnu++14",
-    "comment": "C++14 (GNU Dialect)",
-    "value": "gnu++1y",
-    "flags": []
-  },
-  {
-    "name": "SupportJustMyCode",
-    "switch": "JMC-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "SupportJustMyCode",
-    "switch": "JMC",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  }
-]
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v141_CSharp.json b/share/cmake-3.18/Templates/MSBuild/FlagTables/v141_CSharp.json
deleted file mode 100644
index 5989aea..0000000
--- a/share/cmake-3.18/Templates/MSBuild/FlagTables/v141_CSharp.json
+++ /dev/null
@@ -1,574 +0,0 @@
-[
-  {
-    "name":  "ProjectName",
-    "switch": "out:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "OutputType",
-    "switch": "target:exe",
-    "comment": "",
-    "value": "Exe",
-    "flags": []
-  },
-  {
-    "name":  "OutputType",
-    "switch": "target:winexe",
-    "comment": "",
-    "value": "Winexe",
-    "flags": []
-  },
-  {
-    "name":  "OutputType",
-    "switch": "target:library",
-    "comment": "",
-    "value": "Library",
-    "flags": []
-  },
-  {
-    "name":  "OutputType",
-    "switch": "target:module",
-    "comment": "",
-    "value": "Module",
-    "flags": []
-  },
-  {
-    "name":  "DocumentationFile",
-    "switch": "doc",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:x86",
-    "comment": "",
-    "value": "x86",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:Itanium",
-    "comment": "",
-    "value": "Itanium",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:x64",
-    "comment": "",
-    "value": "x64",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:arm",
-    "comment": "",
-    "value": "arm",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:anycpu32bitpreferred",
-    "comment": "",
-    "value": "anycpu32bitpreferred",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:anycpu",
-    "comment": "",
-    "value": "anycpu",
-    "flags": []
-  },
-  {
-    "name":  "References",
-    "switch": "reference:",
-    "comment": "mit alias",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "References",
-    "switch": "reference:",
-    "comment": "dateiliste",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "AddModules",
-    "switch": "addmodule:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name":  "Win32Resource",
-    "switch": "win32res:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "ApplicationIcon",
-    "switch": "win32icon:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "ApplicationManifest",
-    "switch": "win32manifest:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "NoWin32Manifest",
-    "switch": "nowin32manifest",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DefineDebug",
-    "switch": "debug",
-    "comment": "",
-    "value": "true",
-    "flags": [
-      "Continue"
-    ]
-  },
-  {
-    "name":  "DebugSymbols",
-    "switch": "debug",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DebugSymbols",
-    "switch": "debug-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "DebugSymbols",
-    "switch": "debug+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DebugType",
-    "switch": "debug:none",
-    "comment": "",
-    "value": "none",
-    "flags": []
-  },
-  {
-    "name":  "DebugType",
-    "switch": "debug:full",
-    "comment": "",
-    "value": "full",
-    "flags": []
-  },
-  {
-    "name":  "DebugType",
-    "switch": "debug:pdbonly",
-    "comment": "",
-    "value": "pdbonly",
-    "flags": []
-  },
-  {
-    "name":  "Optimize",
-    "switch": "optimize",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "Optimize",
-    "switch": "optimize-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "Optimize",
-    "switch": "optimize+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "TreatWarningsAsErrors",
-    "switch": "warnaserror",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "TreatWarningsAsErrors",
-    "switch": "warnaserror-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "TreatWarningsAsErrors",
-    "switch": "warnaserror+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "WarningsAsErrors",
-    "switch": "warnaserror",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "WarningsAsErrors",
-    "switch": "warnaserror-",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "WarningsAsErrors",
-    "switch": "warnaserror+",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:0",
-    "comment": "",
-    "value": "0",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:1",
-    "comment": "",
-    "value": "1",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:2",
-    "comment": "",
-    "value": "2",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:3",
-    "comment": "",
-    "value": "3",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:4",
-    "comment": "",
-    "value": "4",
-    "flags": []
-  },
-  {
-    "name":  "NoWarn",
-    "switch": "nowarn:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired",
-      "CommaAppendable"
-    ]
-  },
-  {
-    "name":  "CheckForOverflowUnderflow",
-    "switch": "checked",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "CheckForOverflowUnderflow",
-    "switch": "checked-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "CheckForOverflowUnderflow",
-    "switch": "checked+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "AllowUnsafeBlocks",
-    "switch": "unsafe",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "AllowUnsafeBlocks",
-    "switch": "unsafe-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "AllowUnsafeBlocks",
-    "switch": "unsafe+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DefineConstants",
-    "switch": "define:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "SemicolonAppendable",
-      "UserValue"
-    ]
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:ISO-1",
-    "comment": "",
-    "value": "ISO-1",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:ISO-2",
-    "comment": "",
-    "value": "ISO-2",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:3",
-    "comment": "",
-    "value": "3",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:4",
-    "comment": "",
-    "value": "4",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:5",
-    "comment": "",
-    "value": "5",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:6",
-    "comment": "",
-    "value": "6",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:default",
-    "comment": "",
-    "value": "default",
-    "flags": []
-  },
-  {
-    "name":  "DelaySign",
-    "switch": "delaysign",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DelaySign",
-    "switch": "delaysign-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "DelaySign",
-    "switch": "delaysign+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "AssemblyOriginatorKeyFile",
-    "switch": "keyfile",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "KeyContainerName",
-    "switch": "keycontainer",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "NoLogo",
-    "switch": "nologo",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "NoConfig",
-    "switch": "noconfig",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "BaseAddress",
-    "switch": "baseaddress:",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "CodePage",
-    "switch": "codepage",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "Utf8Output",
-    "switch": "utf8output",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "MainEntryPoint",
-    "switch": "main:",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "GenerateFullPaths",
-    "switch": "fullpaths",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "FileAlignment",
-    "switch": "filealign",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "PdbFile",
-    "switch": "pdb:",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "NoStandardLib",
-    "switch": "nostdlib",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "NoStandardLib",
-    "switch": "nostdlib-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "NoStandardLib",
-    "switch": "nostdlib+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "SubsystemVersion",
-    "switch": "subsystemversion",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "AdditionalLibPaths",
-    "switch": "lib:",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "ErrorReport",
-    "switch": "errorreport:none",
-    "comment": "Do Not Send Report",
-    "value": "none",
-    "flags": []
-  },
-  {
-    "name":  "ErrorReport",
-    "switch": "errorreport:prompt",
-    "comment": "Prompt Immediately",
-    "value": "prompt",
-    "flags": []
-  },
-  {
-    "name":  "ErrorReport",
-    "switch": "errorreport:queue",
-    "comment": "Queue For Next Login",
-    "value": "queue",
-    "flags": []
-  },
-  {
-    "name":  "ErrorReport",
-    "switch": "errorreport:send",
-    "comment": "Send Automatically",
-    "value": "send",
-    "flags": []
-  }
-]
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v141_Link.json b/share/cmake-3.18/Templates/MSBuild/FlagTables/v141_Link.json
deleted file mode 100644
index 66ee76f..0000000
--- a/share/cmake-3.18/Templates/MSBuild/FlagTables/v141_Link.json
+++ /dev/null
@@ -1,1323 +0,0 @@
-[
-  {
-    "name": "ShowProgress",
-    "switch": "",
-    "comment": "Not Set",
-    "value": "NotSet",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE",
-    "comment": "Display all progress messages",
-    "value": "LinkVerbose",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:Lib",
-    "comment": "For Libraries Searched",
-    "value": "LinkVerboseLib",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:ICF",
-    "comment": "About COMDAT folding during optimized linking",
-    "value": "LinkVerboseICF",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:REF",
-    "comment": "About data removed during optimized linking",
-    "value": "LinkVerboseREF",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:SAFESEH",
-    "comment": "About Modules incompatible with SEH",
-    "value": "LinkVerboseSAFESEH",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:CLR",
-    "comment": "About linker activity related to managed code",
-    "value": "LinkVerboseCLR",
-    "flags": []
-  },
-  {
-    "name": "ForceFileOutput",
-    "switch": "FORCE",
-    "comment": "Enabled",
-    "value": "Enabled",
-    "flags": []
-  },
-  {
-    "name": "ForceFileOutput",
-    "switch": "FORCE:MULTIPLE",
-    "comment": "Multiply Defined Symbol Only",
-    "value": "MultiplyDefinedSymbolOnly",
-    "flags": []
-  },
-  {
-    "name": "ForceFileOutput",
-    "switch": "FORCE:UNRESOLVED",
-    "comment": "Undefined Symbol Only",
-    "value": "UndefinedSymbolOnly",
-    "flags": []
-  },
-  {
-    "name": "CreateHotPatchableImage",
-    "switch": "FUNCTIONPADMIN",
-    "comment": "Enabled",
-    "value": "Enabled",
-    "flags": []
-  },
-  {
-    "name": "CreateHotPatchableImage",
-    "switch": "FUNCTIONPADMIN:5",
-    "comment": "X86 Image Only",
-    "value": "X86Image",
-    "flags": []
-  },
-  {
-    "name": "CreateHotPatchableImage",
-    "switch": "FUNCTIONPADMIN:6",
-    "comment": "X64 Image Only",
-    "value": "X64Image",
-    "flags": []
-  },
-  {
-    "name": "CreateHotPatchableImage",
-    "switch": "FUNCTIONPADMIN:16",
-    "comment": "Itanium Image Only",
-    "value": "ItaniumImage",
-    "flags": []
-  },
-  {
-    "name": "UACExecutionLevel",
-    "switch": "level='asInvoker'",
-    "comment": "asInvoker",
-    "value": "AsInvoker",
-    "flags": []
-  },
-  {
-    "name": "UACExecutionLevel",
-    "switch": "level='highestAvailable'",
-    "comment": "highestAvailable",
-    "value": "HighestAvailable",
-    "flags": []
-  },
-  {
-    "name": "UACExecutionLevel",
-    "switch": "level='requireAdministrator'",
-    "comment": "requireAdministrator",
-    "value": "RequireAdministrator",
-    "flags": []
-  },
-  {
-    "name": "GenerateDebugInformation",
-    "switch": "DEBUG",
-    "comment": "Generate Debug Information",
-    "value": "true",
-    "flags": [
-      "CaseInsensitive"
-    ]
-  },
-  {
-    "name": "GenerateDebugInformation",
-    "switch": "DEBUG:FASTLINK",
-    "comment": "Generate Debug Information optimized for faster links",
-    "value": "DebugFastLink",
-    "flags": [
-      "CaseInsensitive"
-    ]
-  },
-  {
-    "name": "GenerateDebugInformation",
-    "switch": "DEBUG:FULL",
-    "comment": "Generate Debug Information optimized for sharing and publishing",
-    "value": "DebugFull",
-    "flags": [
-      "CaseInsensitive"
-    ]
-  },
-  {
-    "name": "GenerateDebugInformation",
-    "switch": "DEBUG:NONE",
-    "comment": "Produces no debugging information",
-    "value": "false",
-    "flags": [
-      "CaseInsensitive"
-    ]
-  },
-  {
-    "name": "SubSystem",
-    "switch": "",
-    "comment": "Not Set",
-    "value": "NotSet",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:CONSOLE",
-    "comment": "Console",
-    "value": "Console",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:WINDOWS",
-    "comment": "Windows",
-    "value": "Windows",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:NATIVE",
-    "comment": "Native",
-    "value": "Native",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:EFI_APPLICATION",
-    "comment": "EFI Application",
-    "value": "EFI Application",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
-    "comment": "EFI Boot Service Driver",
-    "value": "EFI Boot Service Driver",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:EFI_ROM",
-    "comment": "EFI ROM",
-    "value": "EFI ROM",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:EFI_RUNTIME_DRIVER",
-    "comment": "EFI Runtime",
-    "value": "EFI Runtime",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:POSIX",
-    "comment": "POSIX",
-    "value": "POSIX",
-    "flags": []
-  },
-  {
-    "name": "Driver",
-    "switch": "",
-    "comment": "Not Set",
-    "value": "NotSet",
-    "flags": []
-  },
-  {
-    "name": "Driver",
-    "switch": "Driver",
-    "comment": "Driver",
-    "value": "Driver",
-    "flags": []
-  },
-  {
-    "name": "Driver",
-    "switch": "DRIVER:UPONLY",
-    "comment": "UP Only",
-    "value": "UpOnly",
-    "flags": []
-  },
-  {
-    "name": "Driver",
-    "switch": "DRIVER:WDM",
-    "comment": "WDM",
-    "value": "WDM",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "",
-    "comment": "Default",
-    "value": "Default",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "LTCG:incremental",
-    "comment": "Use Fast Link Time Code Generation",
-    "value": "UseFastLinkTimeCodeGeneration",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "LTCG",
-    "comment": "Use Link Time Code Generation",
-    "value": "UseLinkTimeCodeGeneration",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "LTCG:PGInstrument",
-    "comment": "Profile Guided Optimization - Instrument",
-    "value": "PGInstrument",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "LTCG:PGOptimize",
-    "comment": "Profile Guided Optimization - Optimization",
-    "value": "PGOptimization",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "LTCG:PGUpdate",
-    "comment": "Profile Guided Optimization - Update",
-    "value": "PGUpdate",
-    "flags": []
-  },
-  {
-    "name": "GenerateWindowsMetadata",
-    "switch": "WINMD",
-    "comment": "Yes",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "GenerateWindowsMetadata",
-    "switch": "WINMD:NO",
-    "comment": "No",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataSignHash",
-    "switch": "WINMDSIGNHASH:SHA1",
-    "comment": "SHA1",
-    "value": "SHA1",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataSignHash",
-    "switch": "WINMDSIGNHASH:SHA256",
-    "comment": "SHA256",
-    "value": "SHA256",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataSignHash",
-    "switch": "WINMDSIGNHASH:SHA384",
-    "comment": "SHA384",
-    "value": "SHA384",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataSignHash",
-    "switch": "WINMDSIGNHASH:SHA512",
-    "comment": "SHA512",
-    "value": "SHA512",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "",
-    "comment": "Not Set",
-    "value": "NotSet",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:ARM",
-    "comment": "MachineARM",
-    "value": "MachineARM",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:ARM64",
-    "comment": "MachineARM64",
-    "value": "MachineARM64",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:EBC",
-    "comment": "MachineEBC",
-    "value": "MachineEBC",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:IA64",
-    "comment": "MachineIA64",
-    "value": "MachineIA64",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:MIPS",
-    "comment": "MachineMIPS",
-    "value": "MachineMIPS",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:MIPS16",
-    "comment": "MachineMIPS16",
-    "value": "MachineMIPS16",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:MIPSFPU",
-    "comment": "MachineMIPSFPU",
-    "value": "MachineMIPSFPU",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:MIPSFPU16",
-    "comment": "MachineMIPSFPU16",
-    "value": "MachineMIPSFPU16",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:SH4",
-    "comment": "MachineSH4",
-    "value": "MachineSH4",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:THUMB",
-    "comment": "MachineTHUMB",
-    "value": "MachineTHUMB",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:X64",
-    "comment": "MachineX64",
-    "value": "MachineX64",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:X86",
-    "comment": "MachineX86",
-    "value": "MachineX86",
-    "flags": []
-  },
-  {
-    "name": "CLRThreadAttribute",
-    "switch": "CLRTHREADATTRIBUTE:MTA",
-    "comment": "MTA threading attribute",
-    "value": "MTAThreadingAttribute",
-    "flags": []
-  },
-  {
-    "name": "CLRThreadAttribute",
-    "switch": "CLRTHREADATTRIBUTE:STA",
-    "comment": "STA threading attribute",
-    "value": "STAThreadingAttribute",
-    "flags": []
-  },
-  {
-    "name": "CLRThreadAttribute",
-    "switch": "CLRTHREADATTRIBUTE:NONE",
-    "comment": "Default threading attribute",
-    "value": "DefaultThreadingAttribute",
-    "flags": []
-  },
-  {
-    "name": "CLRImageType",
-    "switch": "CLRIMAGETYPE:IJW",
-    "comment": "Force IJW image",
-    "value": "ForceIJWImage",
-    "flags": []
-  },
-  {
-    "name": "CLRImageType",
-    "switch": "CLRIMAGETYPE:PURE",
-    "comment": "Force Pure IL Image",
-    "value": "ForcePureILImage",
-    "flags": []
-  },
-  {
-    "name": "CLRImageType",
-    "switch": "CLRIMAGETYPE:SAFE",
-    "comment": "Force Safe IL Image",
-    "value": "ForceSafeILImage",
-    "flags": []
-  },
-  {
-    "name": "CLRImageType",
-    "switch": "",
-    "comment": "Default image type",
-    "value": "Default",
-    "flags": []
-  },
-  {
-    "name": "SignHash",
-    "switch": "CLRSIGNHASH:SHA1",
-    "comment": "SHA1",
-    "value": "SHA1",
-    "flags": []
-  },
-  {
-    "name": "SignHash",
-    "switch": "CLRSIGNHASH:SHA256",
-    "comment": "SHA256",
-    "value": "SHA256",
-    "flags": []
-  },
-  {
-    "name": "SignHash",
-    "switch": "CLRSIGNHASH:SHA384",
-    "comment": "SHA384",
-    "value": "SHA384",
-    "flags": []
-  },
-  {
-    "name": "SignHash",
-    "switch": "CLRSIGNHASH:SHA512",
-    "comment": "SHA512",
-    "value": "SHA512",
-    "flags": []
-  },
-  {
-    "name": "LinkErrorReporting",
-    "switch": "ERRORREPORT:PROMPT",
-    "comment": "PromptImmediately",
-    "value": "PromptImmediately",
-    "flags": []
-  },
-  {
-    "name": "LinkErrorReporting",
-    "switch": "ERRORREPORT:QUEUE",
-    "comment": "Queue For Next Login",
-    "value": "QueueForNextLogin",
-    "flags": []
-  },
-  {
-    "name": "LinkErrorReporting",
-    "switch": "ERRORREPORT:SEND",
-    "comment": "Send Error Report",
-    "value": "SendErrorReport",
-    "flags": []
-  },
-  {
-    "name": "LinkErrorReporting",
-    "switch": "ERRORREPORT:NONE",
-    "comment": "No Error Report",
-    "value": "NoErrorReport",
-    "flags": []
-  },
-  {
-    "name": "CLRSupportLastError",
-    "switch": "CLRSupportLastError",
-    "comment": "Enabled",
-    "value": "Enabled",
-    "flags": []
-  },
-  {
-    "name": "CLRSupportLastError",
-    "switch": "CLRSupportLastError:NO",
-    "comment": "Disabled",
-    "value": "Disabled",
-    "flags": []
-  },
-  {
-    "name": "CLRSupportLastError",
-    "switch": "CLRSupportLastError:SYSTEMDLL",
-    "comment": "System Dlls Only",
-    "value": "SystemDlls",
-    "flags": []
-  },
-  {
-    "name": "LinkIncremental",
-    "switch": "INCREMENTAL:NO",
-    "comment": "Enable Incremental Linking",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "LinkIncremental",
-    "switch": "INCREMENTAL",
-    "comment": "Enable Incremental Linking",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SuppressStartupBanner",
-    "switch": "NOLOGO",
-    "comment": "Suppress Startup Banner",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "LinkStatus",
-    "switch": "LTCG:NOSTATUS",
-    "comment": "Link Status",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "LinkStatus",
-    "switch": "LTCG:STATUS",
-    "comment": "Link Status",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "PreventDllBinding",
-    "switch": "ALLOWBIND:NO",
-    "comment": "Prevent Dll Binding",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "PreventDllBinding",
-    "switch": "ALLOWBIND",
-    "comment": "Prevent Dll Binding",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "TreatLinkerWarningAsErrors",
-    "switch": "WX:NO",
-    "comment": "Treat Linker Warning As Errors",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "TreatLinkerWarningAsErrors",
-    "switch": "WX",
-    "comment": "Treat Linker Warning As Errors",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "IgnoreAllDefaultLibraries",
-    "switch": "NODEFAULTLIB",
-    "comment": "Ignore All Default Libraries",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "GenerateManifest",
-    "switch": "MANIFEST:NO",
-    "comment": "Generate Manifest",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "GenerateManifest",
-    "switch": "MANIFEST",
-    "comment": "Generate Manifest",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "AllowIsolation",
-    "switch": "ALLOWISOLATION:NO",
-    "comment": "Allow Isolation",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "AllowIsolation",
-    "switch": "",
-    "comment": "Allow Isolation",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "EnableUAC",
-    "switch": "MANIFESTUAC:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired",
-      "SpaceAppendable"
-    ]
-  },
-  {
-    "name": "UACUIAccess",
-    "switch": "uiAccess='false'",
-    "comment": "UAC Bypass UI Protection",
-    "value": "false",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "UACUIAccess",
-    "switch": "uiAccess='false'",
-    "comment": "UAC Bypass UI Protection",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "UACUIAccess",
-    "switch": "uiAccess='true'",
-    "comment": "UAC Bypass UI Protection",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "ManifestEmbed",
-    "switch": "manifest:embed",
-    "comment": "Embed Manifest",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "GenerateMapFile",
-    "switch": "MAP",
-    "comment": "Generate Map File",
-    "value": "true",
-    "flags": [
-      "UserValue",
-      "UserIgnored",
-      "Continue"
-    ]
-  },
-  {
-    "name": "MapExports",
-    "switch": "MAPINFO:EXPORTS",
-    "comment": "Map Exports",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "AssemblyDebug",
-    "switch": "ASSEMBLYDEBUG:DISABLE",
-    "comment": "Debuggable Assembly",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "AssemblyDebug",
-    "switch": "ASSEMBLYDEBUG",
-    "comment": "Debuggable Assembly",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "LargeAddressAware",
-    "switch": "LARGEADDRESSAWARE:NO",
-    "comment": "Enable Large Addresses",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "LargeAddressAware",
-    "switch": "LARGEADDRESSAWARE",
-    "comment": "Enable Large Addresses",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "TerminalServerAware",
-    "switch": "TSAWARE:NO",
-    "comment": "Terminal Server",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "TerminalServerAware",
-    "switch": "TSAWARE",
-    "comment": "Terminal Server",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SwapRunFromCD",
-    "switch": "SWAPRUN:CD",
-    "comment": "Swap Run From CD",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SwapRunFromNET",
-    "switch": "SWAPRUN:NET",
-    "comment": "Swap Run From Network",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "OptimizeReferences",
-    "switch": "OPT:NOREF",
-    "comment": "References",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "OptimizeReferences",
-    "switch": "OPT:REF",
-    "comment": "References",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "EnableCOMDATFolding",
-    "switch": "OPT:NOICF",
-    "comment": "Enable COMDAT Folding",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "EnableCOMDATFolding",
-    "switch": "OPT:ICF",
-    "comment": "Enable COMDAT Folding",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "IgnoreEmbeddedIDL",
-    "switch": "IGNOREIDL",
-    "comment": "Ignore Embedded IDL",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "AppContainer",
-    "switch": "APPCONTAINER",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataLinkDelaySign",
-    "switch": "WINMDDELAYSIGN:NO",
-    "comment": "Windows Metadata Delay Sign",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataLinkDelaySign",
-    "switch": "WINMDDELAYSIGN",
-    "comment": "Windows Metadata Delay Sign",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "NoEntryPoint",
-    "switch": "NOENTRY",
-    "comment": "No Entry Point",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SetChecksum",
-    "switch": "RELEASE",
-    "comment": "Set Checksum",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "RandomizedBaseAddress",
-    "switch": "DYNAMICBASE:NO",
-    "comment": "Randomized Base Address",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "RandomizedBaseAddress",
-    "switch": "DYNAMICBASE",
-    "comment": "Randomized Base Address",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "FixedBaseAddress",
-    "switch": "FIXED:NO",
-    "comment": "Fixed Base Address",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "FixedBaseAddress",
-    "switch": "FIXED",
-    "comment": "Fixed Base Address",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "DataExecutionPrevention",
-    "switch": "NXCOMPAT:NO",
-    "comment": "Data Execution Prevention (DEP)",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "DataExecutionPrevention",
-    "switch": "NXCOMPAT",
-    "comment": "Data Execution Prevention (DEP)",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "TurnOffAssemblyGeneration",
-    "switch": "NOASSEMBLY",
-    "comment": "Turn Off Assembly Generation",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SupportUnloadOfDelayLoadedDLL",
-    "switch": "DELAY:UNLOAD",
-    "comment": "Unload delay loaded DLL",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SupportNobindOfDelayLoadedDLL",
-    "switch": "DELAY:NOBIND",
-    "comment": "Nobind delay loaded DLL",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "Profile",
-    "switch": "PROFILE",
-    "comment": "Profile",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "LinkDelaySign",
-    "switch": "DELAYSIGN:NO",
-    "comment": "Delay Sign",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "LinkDelaySign",
-    "switch": "DELAYSIGN",
-    "comment": "Delay Sign",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "CLRUnmanagedCodeCheck",
-    "switch": "CLRUNMANAGEDCODECHECK:NO",
-    "comment": "CLR Unmanaged Code Check",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "CLRUnmanagedCodeCheck",
-    "switch": "CLRUNMANAGEDCODECHECK",
-    "comment": "CLR Unmanaged Code Check",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "DetectOneDefinitionRule",
-    "switch": "ODR",
-    "comment": "Detect One Definition Rule violations",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "ImageHasSafeExceptionHandlers",
-    "switch": "SAFESEH:NO",
-    "comment": "Image Has Safe Exception Handlers",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "ImageHasSafeExceptionHandlers",
-    "switch": "SAFESEH",
-    "comment": "Image Has Safe Exception Handlers",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "LinkDLL",
-    "switch": "DLL",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "AdditionalLibraryDirectories",
-    "switch": "LIBPATH:",
-    "comment": "Additional Library Directories",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "Natvis",
-    "switch": "NATVIS:",
-    "comment": "Natvis files",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "IgnoreSpecificDefaultLibraries",
-    "switch": "NODEFAULTLIB:",
-    "comment": "Ignore Specific Default Libraries",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "AddModuleNamesToAssembly",
-    "switch": "ASSEMBLYMODULE:",
-    "comment": "Add Module to Assembly",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "EmbedManagedResourceFile",
-    "switch": "ASSEMBLYRESOURCE:",
-    "comment": "Embed Managed Resource File",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "ForceSymbolReferences",
-    "switch": "INCLUDE:",
-    "comment": "Force Symbol References",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "DelayLoadDLLs",
-    "switch": "DELAYLOAD:",
-    "comment": "Delay Loaded Dlls",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "AssemblyLinkResource",
-    "switch": "ASSEMBLYLINKRESOURCE:",
-    "comment": "Assembly Link Resource",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "AdditionalManifestDependencies",
-    "switch": "MANIFESTDEPENDENCY:",
-    "comment": "Additional Manifest Dependencies",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "ManifestInput",
-    "switch": "manifestinput:",
-    "comment": "Manifest Input",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "OutputFile",
-    "switch": "OUT:",
-    "comment": "Output File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "Version",
-    "switch": "VERSION:",
-    "comment": "Version",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "SpecifySectionAttributes",
-    "switch": "SECTION:",
-    "comment": "Specify Section Attributes",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MSDOSStubFileName",
-    "switch": "STUB:",
-    "comment": "MS-DOS Stub File Name",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ModuleDefinitionFile",
-    "switch": "DEF:",
-    "comment": "Module Definition File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ManifestFile",
-    "switch": "ManifestFile:",
-    "comment": "Manifest File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ProgramDatabaseFile",
-    "switch": "PDB:",
-    "comment": "Generate Program Database File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "StripPrivateSymbols",
-    "switch": "PDBSTRIPPED:",
-    "comment": "Strip Private Symbols",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MapFileName",
-    "switch": "MAP:",
-    "comment": "Map File Name",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "HeapReserveSize",
-    "switch": "HEAP:",
-    "comment": "Heap Reserve Size",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "HeapCommitSize",
-    "switch": "HEAP",
-    "comment": "Heap Commit Size",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "StackReserveSize",
-    "switch": "STACK:",
-    "comment": "Stack Reserve Size",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "StackCommitSize",
-    "switch": "STACK",
-    "comment": "Stack Commit Size",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "FunctionOrder",
-    "switch": "ORDER:@",
-    "comment": "Function Order",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ProfileGuidedDatabase",
-    "switch": "PGD:",
-    "comment": "Profile Guided Database",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MidlCommandFile",
-    "switch": "MIDL:@",
-    "comment": "MIDL Commands",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MergedIDLBaseFileName",
-    "switch": "IDLOUT:",
-    "comment": "Merged IDL Base File Name",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "TypeLibraryFile",
-    "switch": "TLBOUT:",
-    "comment": "Type Library",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "WindowsMetadataFile",
-    "switch": "WINMDFILE:",
-    "comment": "Windows Metadata File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "WindowsMetadataLinkKeyFile",
-    "switch": "WINMDKEYFILE:",
-    "comment": "Windows Metadata Key File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "WindowsMetadataKeyContainer",
-    "switch": "WINMDKEYCONTAINER:",
-    "comment": "Windows Metadata Key Container",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "EntryPointSymbol",
-    "switch": "ENTRY:",
-    "comment": "Entry Point",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "BaseAddress",
-    "switch": "BASE:",
-    "comment": "Base Address",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ImportLibrary",
-    "switch": "IMPLIB:",
-    "comment": "Import Library",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MergeSections",
-    "switch": "MERGE:",
-    "comment": "Merge Sections",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "LinkKeyFile",
-    "switch": "KEYFILE:",
-    "comment": "Key File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "KeyContainer",
-    "switch": "KEYCONTAINER:",
-    "comment": "Key Container",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "TypeLibraryResourceID",
-    "switch": "TLBID:",
-    "comment": "TypeLib Resource ID",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "SectionAlignment",
-    "switch": "ALIGN:",
-    "comment": "SectionAlignment",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  }
-]
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v142_CL.json b/share/cmake-3.18/Templates/MSBuild/FlagTables/v142_CL.json
deleted file mode 100644
index 95b9d14..0000000
--- a/share/cmake-3.18/Templates/MSBuild/FlagTables/v142_CL.json
+++ /dev/null
@@ -1,1212 +0,0 @@
-[
-  {
-    "name": "DebugInformationFormat",
-    "switch": "",
-    "comment": "None",
-    "value": "None",
-    "flags": []
-  },
-  {
-    "name": "DebugInformationFormat",
-    "switch": "Z7",
-    "comment": "C7 compatible",
-    "value": "OldStyle",
-    "flags": []
-  },
-  {
-    "name": "DebugInformationFormat",
-    "switch": "Zi",
-    "comment": "Program Database",
-    "value": "ProgramDatabase",
-    "flags": []
-  },
-  {
-    "name": "DebugInformationFormat",
-    "switch": "ZI",
-    "comment": "Program Database for Edit And Continue",
-    "value": "EditAndContinue",
-    "flags": []
-  },
-  {
-    "name": "CompileAsManaged",
-    "switch": "",
-    "comment": "No Common Language RunTime Support",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "CompileAsManaged",
-    "switch": "clr",
-    "comment": "Common Language RunTime Support",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "CompileAsManaged",
-    "switch": "clr:pure",
-    "comment": "Pure MSIL Common Language RunTime Support",
-    "value": "Pure",
-    "flags": []
-  },
-  {
-    "name": "CompileAsManaged",
-    "switch": "clr:safe",
-    "comment": "Safe MSIL Common Language RunTime Support",
-    "value": "Safe",
-    "flags": []
-  },
-  {
-    "name": "WarningLevel",
-    "switch": "W0",
-    "comment": "Turn Off All Warnings",
-    "value": "TurnOffAllWarnings",
-    "flags": []
-  },
-  {
-    "name": "WarningLevel",
-    "switch": "W1",
-    "comment": "Level1",
-    "value": "Level1",
-    "flags": []
-  },
-  {
-    "name": "WarningLevel",
-    "switch": "W2",
-    "comment": "Level2",
-    "value": "Level2",
-    "flags": []
-  },
-  {
-    "name": "WarningLevel",
-    "switch": "W3",
-    "comment": "Level3",
-    "value": "Level3",
-    "flags": []
-  },
-  {
-    "name": "WarningLevel",
-    "switch": "W4",
-    "comment": "Level4",
-    "value": "Level4",
-    "flags": []
-  },
-  {
-    "name": "WarningLevel",
-    "switch": "Wall",
-    "comment": "EnableAllWarnings",
-    "value": "EnableAllWarnings",
-    "flags": []
-  },
-  {
-    "name": "DiagnosticsFormat",
-    "switch": "diagnostics:caret",
-    "comment": "Caret",
-    "value": "Caret",
-    "flags": []
-  },
-  {
-    "name": "DiagnosticsFormat",
-    "switch": "diagnostics:column",
-    "comment": "Column Info",
-    "value": "Column",
-    "flags": []
-  },
-  {
-    "name": "DiagnosticsFormat",
-    "switch": "diagnostics:classic",
-    "comment": "Classic",
-    "value": "Classic",
-    "flags": []
-  },
-  {
-    "name": "Optimization",
-    "switch": "",
-    "comment": "Custom",
-    "value": "Custom",
-    "flags": []
-  },
-  {
-    "name": "Optimization",
-    "switch": "Od",
-    "comment": "Disabled",
-    "value": "Disabled",
-    "flags": []
-  },
-  {
-    "name": "Optimization",
-    "switch": "O1",
-    "comment": "Maximum Optimization (Favor Size)",
-    "value": "MinSpace",
-    "flags": []
-  },
-  {
-    "name": "Optimization",
-    "switch": "O2",
-    "comment": "Maximum Optimization (Favor Speed)",
-    "value": "MaxSpeed",
-    "flags": []
-  },
-  {
-    "name": "Optimization",
-    "switch": "Ox",
-    "comment": "Optimizations (Favor Speed)",
-    "value": "Full",
-    "flags": []
-  },
-  {
-    "name": "InlineFunctionExpansion",
-    "switch": "",
-    "comment": "Default",
-    "value": "Default",
-    "flags": []
-  },
-  {
-    "name": "InlineFunctionExpansion",
-    "switch": "Ob0",
-    "comment": "Disabled",
-    "value": "Disabled",
-    "flags": []
-  },
-  {
-    "name": "InlineFunctionExpansion",
-    "switch": "Ob1",
-    "comment": "Only __inline",
-    "value": "OnlyExplicitInline",
-    "flags": []
-  },
-  {
-    "name": "InlineFunctionExpansion",
-    "switch": "Ob2",
-    "comment": "Any Suitable",
-    "value": "AnySuitable",
-    "flags": []
-  },
-  {
-    "name": "FavorSizeOrSpeed",
-    "switch": "Os",
-    "comment": "Favor small code",
-    "value": "Size",
-    "flags": []
-  },
-  {
-    "name": "FavorSizeOrSpeed",
-    "switch": "Ot",
-    "comment": "Favor fast code",
-    "value": "Speed",
-    "flags": []
-  },
-  {
-    "name": "FavorSizeOrSpeed",
-    "switch": "",
-    "comment": "Neither",
-    "value": "Neither",
-    "flags": []
-  },
-  {
-    "name": "ExceptionHandling",
-    "switch": "EHa",
-    "comment": "Yes with SEH Exceptions",
-    "value": "Async",
-    "flags": []
-  },
-  {
-    "name": "ExceptionHandling",
-    "switch": "EHsc",
-    "comment": "Yes",
-    "value": "Sync",
-    "flags": []
-  },
-  {
-    "name": "ExceptionHandling",
-    "switch": "EHs",
-    "comment": "Yes with Extern C functions",
-    "value": "SyncCThrow",
-    "flags": []
-  },
-  {
-    "name": "ExceptionHandling",
-    "switch": "",
-    "comment": "No",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "BasicRuntimeChecks",
-    "switch": "RTCs",
-    "comment": "Stack Frames",
-    "value": "StackFrameRuntimeCheck",
-    "flags": []
-  },
-  {
-    "name": "BasicRuntimeChecks",
-    "switch": "RTCu",
-    "comment": "Uninitialized variables",
-    "value": "UninitializedLocalUsageCheck",
-    "flags": []
-  },
-  {
-    "name": "BasicRuntimeChecks",
-    "switch": "RTC1",
-    "comment": "Both (/RTC1, equiv. to /RTCsu)",
-    "value": "EnableFastChecks",
-    "flags": []
-  },
-  {
-    "name": "BasicRuntimeChecks",
-    "switch": "",
-    "comment": "Default",
-    "value": "Default",
-    "flags": []
-  },
-  {
-    "name": "RuntimeLibrary",
-    "switch": "MT",
-    "comment": "Multi-threaded",
-    "value": "MultiThreaded",
-    "flags": []
-  },
-  {
-    "name": "RuntimeLibrary",
-    "switch": "MTd",
-    "comment": "Multi-threaded Debug",
-    "value": "MultiThreadedDebug",
-    "flags": []
-  },
-  {
-    "name": "RuntimeLibrary",
-    "switch": "MD",
-    "comment": "Multi-threaded DLL",
-    "value": "MultiThreadedDLL",
-    "flags": []
-  },
-  {
-    "name": "RuntimeLibrary",
-    "switch": "MDd",
-    "comment": "Multi-threaded Debug DLL",
-    "value": "MultiThreadedDebugDLL",
-    "flags": []
-  },
-  {
-    "name": "StructMemberAlignment",
-    "switch": "Zp1",
-    "comment": "1 Byte",
-    "value": "1Byte",
-    "flags": []
-  },
-  {
-    "name": "StructMemberAlignment",
-    "switch": "Zp2",
-    "comment": "2 Bytes",
-    "value": "2Bytes",
-    "flags": []
-  },
-  {
-    "name": "StructMemberAlignment",
-    "switch": "Zp4",
-    "comment": "4 Byte",
-    "value": "4Bytes",
-    "flags": []
-  },
-  {
-    "name": "StructMemberAlignment",
-    "switch": "Zp8",
-    "comment": "8 Bytes",
-    "value": "8Bytes",
-    "flags": []
-  },
-  {
-    "name": "StructMemberAlignment",
-    "switch": "Zp16",
-    "comment": "16 Bytes",
-    "value": "16Bytes",
-    "flags": []
-  },
-  {
-    "name": "StructMemberAlignment",
-    "switch": "",
-    "comment": "Default",
-    "value": "Default",
-    "flags": []
-  },
-  {
-    "name": "BufferSecurityCheck",
-    "switch": "GS-",
-    "comment": "Disable Security Check",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "BufferSecurityCheck",
-    "switch": "GS",
-    "comment": "Enable Security Check",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "ControlFlowGuard",
-    "switch": "guard:cf",
-    "comment": "Yes",
-    "value": "Guard",
-    "flags": []
-  },
-  {
-    "name": "ControlFlowGuard",
-    "switch": "",
-    "comment": "No",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "EnableEnhancedInstructionSet",
-    "switch": "arch:SSE",
-    "comment": "Streaming SIMD Extensions",
-    "value": "StreamingSIMDExtensions",
-    "flags": []
-  },
-  {
-    "name": "EnableEnhancedInstructionSet",
-    "switch": "arch:SSE2",
-    "comment": "Streaming SIMD Extensions 2",
-    "value": "StreamingSIMDExtensions2",
-    "flags": []
-  },
-  {
-    "name": "EnableEnhancedInstructionSet",
-    "switch": "arch:AVX",
-    "comment": "Advanced Vector Extensions",
-    "value": "AdvancedVectorExtensions",
-    "flags": []
-  },
-  {
-    "name": "EnableEnhancedInstructionSet",
-    "switch": "arch:AVX2",
-    "comment": "Advanced Vector Extensions 2",
-    "value": "AdvancedVectorExtensions2",
-    "flags": []
-  },
-  {
-    "name": "EnableEnhancedInstructionSet",
-    "switch": "arch:IA32",
-    "comment": "No Enhanced Instructions",
-    "value": "NoExtensions",
-    "flags": []
-  },
-  {
-    "name": "EnableEnhancedInstructionSet",
-    "switch": "",
-    "comment": "Not Set",
-    "value": "NotSet",
-    "flags": []
-  },
-  {
-    "name": "FloatingPointModel",
-    "switch": "fp:precise",
-    "comment": "Precise",
-    "value": "Precise",
-    "flags": []
-  },
-  {
-    "name": "FloatingPointModel",
-    "switch": "fp:strict",
-    "comment": "Strict",
-    "value": "Strict",
-    "flags": []
-  },
-  {
-    "name": "FloatingPointModel",
-    "switch": "fp:fast",
-    "comment": "Fast",
-    "value": "Fast",
-    "flags": []
-  },
-  {
-    "name": "SpectreMitigation",
-    "switch": "Qspectre-",
-    "comment": "Spectre mitigations disabled",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "SpectreMitigation",
-    "switch": "Qspectre",
-    "comment": "Spectre mitigations enabled",
-    "value": "Spectre",
-    "flags": []
-  },
-  {
-    "name": "LanguageStandard",
-    "switch": "std:c++14",
-    "comment": "ISO C++14 Standard",
-    "value": "stdcpp14",
-    "flags": []
-  },
-  {
-    "name": "LanguageStandard",
-    "switch": "std:c++17",
-    "comment": "ISO C++17 Standard",
-    "value": "stdcpp17",
-    "flags": []
-  },
-  {
-    "name": "LanguageStandard",
-    "switch": "std:c++latest",
-    "comment": "Preview - Features from the Latest C++ Working Draft",
-    "value": "stdcpplatest",
-    "flags": []
-  },
-  {
-    "name": "PrecompiledHeader",
-    "switch": "Yc",
-    "comment": "Create",
-    "value": "Create",
-    "flags": [
-      "UserValue",
-      "UserIgnored",
-      "Continue"
-    ]
-  },
-  {
-    "name": "PrecompiledHeader",
-    "switch": "Yu",
-    "comment": "Use",
-    "value": "Use",
-    "flags": [
-      "UserValue",
-      "UserIgnored",
-      "Continue"
-    ]
-  },
-  {
-    "name": "PrecompiledHeader",
-    "switch": "Y-",
-    "comment": "Not Using Precompiled Headers",
-    "value": "NotUsing",
-    "flags": []
-  },
-  {
-    "name": "AssemblerOutput",
-    "switch": "",
-    "comment": "No Listing",
-    "value": "NoListing",
-    "flags": []
-  },
-  {
-    "name": "AssemblerOutput",
-    "switch": "FA",
-    "comment": "Assembly-Only Listing",
-    "value": "AssemblyCode",
-    "flags": []
-  },
-  {
-    "name": "AssemblerOutput",
-    "switch": "FAc",
-    "comment": "Assembly With Machine Code",
-    "value": "AssemblyAndMachineCode",
-    "flags": []
-  },
-  {
-    "name": "AssemblerOutput",
-    "switch": "FAs",
-    "comment": "Assembly With Source Code",
-    "value": "AssemblyAndSourceCode",
-    "flags": []
-  },
-  {
-    "name": "AssemblerOutput",
-    "switch": "FAcs",
-    "comment": "Assembly, Machine Code and Source",
-    "value": "All",
-    "flags": []
-  },
-  {
-    "name": "CallingConvention",
-    "switch": "Gd",
-    "comment": "__cdecl",
-    "value": "Cdecl",
-    "flags": []
-  },
-  {
-    "name": "CallingConvention",
-    "switch": "Gr",
-    "comment": "__fastcall",
-    "value": "FastCall",
-    "flags": []
-  },
-  {
-    "name": "CallingConvention",
-    "switch": "Gz",
-    "comment": "__stdcall",
-    "value": "StdCall",
-    "flags": []
-  },
-  {
-    "name": "CallingConvention",
-    "switch": "Gv",
-    "comment": "__vectorcall",
-    "value": "VectorCall",
-    "flags": []
-  },
-  {
-    "name": "CompileAs",
-    "switch": "",
-    "comment": "Default",
-    "value": "Default",
-    "flags": []
-  },
-  {
-    "name": "CompileAs",
-    "switch": "TC",
-    "comment": "Compile as C Code",
-    "value": "CompileAsC",
-    "flags": []
-  },
-  {
-    "name": "CompileAs",
-    "switch": "TP",
-    "comment": "Compile as C++ Code",
-    "value": "CompileAsCpp",
-    "flags": []
-  },
-  {
-    "name": "ErrorReporting",
-    "switch": "errorReport:none",
-    "comment": "Do Not Send Report",
-    "value": "None",
-    "flags": []
-  },
-  {
-    "name": "ErrorReporting",
-    "switch": "errorReport:prompt",
-    "comment": "Prompt Immediately",
-    "value": "Prompt",
-    "flags": []
-  },
-  {
-    "name": "ErrorReporting",
-    "switch": "errorReport:queue",
-    "comment": "Queue For Next Login",
-    "value": "Queue",
-    "flags": []
-  },
-  {
-    "name": "ErrorReporting",
-    "switch": "errorReport:send",
-    "comment": "Send Automatically",
-    "value": "Send",
-    "flags": []
-  },
-  {
-    "name": "SupportJustMyCode",
-    "switch": "JMC-",
-    "comment": "Support Just My Code Debugging",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "SupportJustMyCode",
-    "switch": "JMC",
-    "comment": "Support Just My Code Debugging",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "CompileAsWinRT",
-    "switch": "ZW",
-    "comment": "Consume Windows Runtime Extension",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "WinRTNoStdLib",
-    "switch": "ZW:nostdlib",
-    "comment": "No Standard WinRT Libraries",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SuppressStartupBanner",
-    "switch": "nologo",
-    "comment": "Suppress Startup Banner",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "TreatWarningAsError",
-    "switch": "WX-",
-    "comment": "Treat Warnings As Errors",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "TreatWarningAsError",
-    "switch": "WX",
-    "comment": "Treat Warnings As Errors",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SDLCheck",
-    "switch": "sdl-",
-    "comment": "SDL checks",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "SDLCheck",
-    "switch": "sdl",
-    "comment": "SDL checks",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "MultiProcessorCompilation",
-    "switch": "MP",
-    "comment": "Multi-processor Compilation",
-    "value": "true",
-    "flags": [
-      "UserValue",
-      "UserIgnored",
-      "Continue"
-    ]
-  },
-  {
-    "name": "IntrinsicFunctions",
-    "switch": "Oi",
-    "comment": "Enable Intrinsic Functions",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "OmitFramePointers",
-    "switch": "Oy-",
-    "comment": "Omit Frame Pointers",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "OmitFramePointers",
-    "switch": "Oy",
-    "comment": "Omit Frame Pointers",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "EnableFiberSafeOptimizations",
-    "switch": "GT",
-    "comment": "Enable Fiber-Safe Optimizations",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "WholeProgramOptimization",
-    "switch": "GL",
-    "comment": "Whole Program Optimization",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "UndefineAllPreprocessorDefinitions",
-    "switch": "u",
-    "comment": "Undefine All Preprocessor Definitions",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "IgnoreStandardIncludePath",
-    "switch": "X",
-    "comment": "Ignore Standard Include Paths",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "PreprocessToFile",
-    "switch": "P",
-    "comment": "Preprocess to a File",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "PreprocessSuppressLineNumbers",
-    "switch": "EP",
-    "comment": "Preprocess Suppress Line Numbers",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "PreprocessKeepComments",
-    "switch": "C",
-    "comment": "Keep Comments",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "StringPooling",
-    "switch": "GF-",
-    "comment": "Enable String Pooling",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "StringPooling",
-    "switch": "GF",
-    "comment": "Enable String Pooling",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "MinimalRebuild",
-    "switch": "Gm-",
-    "comment": "Enable Minimal Rebuild",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "MinimalRebuild",
-    "switch": "Gm",
-    "comment": "Enable Minimal Rebuild",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SmallerTypeCheck",
-    "switch": "RTCc",
-    "comment": "Smaller Type Check",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "FunctionLevelLinking",
-    "switch": "Gy-",
-    "comment": "Enable Function-Level Linking",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "FunctionLevelLinking",
-    "switch": "Gy",
-    "comment": "Enable Function-Level Linking",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "EnableParallelCodeGeneration",
-    "switch": "Qpar-",
-    "comment": "Enable Parallel Code Generation",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "EnableParallelCodeGeneration",
-    "switch": "Qpar",
-    "comment": "Enable Parallel Code Generation",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "FloatingPointExceptions",
-    "switch": "fp:except-",
-    "comment": "Enable Floating Point Exceptions",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "FloatingPointExceptions",
-    "switch": "fp:except",
-    "comment": "Enable Floating Point Exceptions",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "CreateHotpatchableImage",
-    "switch": "hotpatch",
-    "comment": "Create Hotpatchable Image",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "DisableLanguageExtensions",
-    "switch": "Za",
-    "comment": "Disable Language Extensions",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "ConformanceMode",
-    "switch": "permissive-",
-    "comment": "Conformance mode enabled",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "ConformanceMode",
-    "switch": "permissive",
-    "comment": "Conformance mode disabled",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "TreatWChar_tAsBuiltInType",
-    "switch": "Zc:wchar_t-",
-    "comment": "Treat WChar_t As Built in Type",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "TreatWChar_tAsBuiltInType",
-    "switch": "Zc:wchar_t",
-    "comment": "Treat WChar_t As Built in Type",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "ForceConformanceInForLoopScope",
-    "switch": "Zc:forScope-",
-    "comment": "Force Conformance in For Loop Scope",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "ForceConformanceInForLoopScope",
-    "switch": "Zc:forScope",
-    "comment": "Force Conformance in For Loop Scope",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "RemoveUnreferencedCodeData",
-    "switch": "Zc:inline-",
-    "comment": "Remove unreferenced code and data",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "RemoveUnreferencedCodeData",
-    "switch": "Zc:inline",
-    "comment": "Remove unreferenced code and data",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "EnforceTypeConversionRules",
-    "switch": "Zc:rvalueCast-",
-    "comment": "Enforce type conversion rules",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "EnforceTypeConversionRules",
-    "switch": "Zc:rvalueCast",
-    "comment": "Enforce type conversion rules",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "RuntimeTypeInfo",
-    "switch": "GR-",
-    "comment": "Enable Run-Time Type Information",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "RuntimeTypeInfo",
-    "switch": "GR",
-    "comment": "Enable Run-Time Type Information",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "OpenMPSupport",
-    "switch": "openmp-",
-    "comment": "Open MP Support",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "OpenMPSupport",
-    "switch": "openmp",
-    "comment": "Open MP Support",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "EnableModules",
-    "switch": "experimental:module",
-    "comment": "Enable C++ Modules (experimental)",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "ExpandAttributedSource",
-    "switch": "Fx",
-    "comment": "Expand Attributed Source",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "UseUnicodeForAssemblerListing",
-    "switch": "FAu",
-    "comment": "Use Unicode For Assembler Listing",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "GenerateXMLDocumentationFiles",
-    "switch": "doc",
-    "comment": "Generate XML Documentation Files",
-    "value": "true",
-    "flags": [
-      "UserValue",
-      "UserIgnored",
-      "Continue"
-    ]
-  },
-  {
-    "name": "BrowseInformation",
-    "switch": "FR",
-    "comment": "Enable Browse Information",
-    "value": "true",
-    "flags": [
-      "UserValue",
-      "UserIgnored",
-      "Continue"
-    ]
-  },
-  {
-    "name": "ShowIncludes",
-    "switch": "showIncludes",
-    "comment": "Show Includes",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "EnablePREfast",
-    "switch": "analyze-",
-    "comment": "Enable Code Analysis",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "EnablePREfast",
-    "switch": "analyze",
-    "comment": "Enable Code Analysis",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "UseFullPaths",
-    "switch": "FC",
-    "comment": "Use Full Paths",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "OmitDefaultLibName",
-    "switch": "Zl",
-    "comment": "Omit Default Library Name",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "AdditionalIncludeDirectories",
-    "switch": "I",
-    "comment": "Additional Include Directories",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "AdditionalUsingDirectories",
-    "switch": "AI",
-    "comment": "Additional #using Directories",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "PreprocessorDefinitions",
-    "switch": "D",
-    "comment": "Preprocessor Definitions",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "UndefinePreprocessorDefinitions",
-    "switch": "U",
-    "comment": "Undefine Preprocessor Definitions",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "DisableSpecificWarnings",
-    "switch": "wd",
-    "comment": "Disable Specific Warnings",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "ForcedIncludeFiles",
-    "switch": "FI",
-    "comment": "Forced Include File",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "ForcedUsingFiles",
-    "switch": "FU",
-    "comment": "Forced #using File",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "PREfastLog",
-    "switch": "analyze:log",
-    "comment": "Code Analysis Log",
-    "value": "",
-    "flags": [
-      "UserFollowing"
-    ]
-  },
-  {
-    "name": "PREfastAdditionalPlugins",
-    "switch": "analyze:plugin",
-    "comment": "Additional Code Analysis Native plugins",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "TreatSpecificWarningsAsErrors",
-    "switch": "we",
-    "comment": "Treat Specific Warnings As Errors",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "WarningVersion",
-    "switch": "Wv:",
-    "comment": "Warning Version",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "PreprocessOutputPath",
-    "switch": "Fi",
-    "comment": "Preprocess Output Path",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "PrecompiledHeaderFile",
-    "switch": "Yu",
-    "comment": "Precompiled Header File",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "PrecompiledHeaderFile",
-    "switch": "Yc",
-    "comment": "Precompiled Header File",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "PrecompiledHeaderOutputFile",
-    "switch": "Fp",
-    "comment": "Precompiled Header Output File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "AssemblerListingLocation",
-    "switch": "Fa",
-    "comment": "ASM List Location",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ObjectFileName",
-    "switch": "Fo",
-    "comment": "Object File Name",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ProgramDataBaseFileName",
-    "switch": "Fd",
-    "comment": "Program Database File Name",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "XMLDocumentationFileName",
-    "switch": "doc",
-    "comment": "XML Documentation File Name",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "BrowseInformationFile",
-    "switch": "FR",
-    "comment": "Browse Information File",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "ProcessorNumber",
-    "switch": "MP",
-    "comment": "Number of processors",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  }
-]
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v142_CSharp.json b/share/cmake-3.18/Templates/MSBuild/FlagTables/v142_CSharp.json
deleted file mode 100644
index 5989aea..0000000
--- a/share/cmake-3.18/Templates/MSBuild/FlagTables/v142_CSharp.json
+++ /dev/null
@@ -1,574 +0,0 @@
-[
-  {
-    "name":  "ProjectName",
-    "switch": "out:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "OutputType",
-    "switch": "target:exe",
-    "comment": "",
-    "value": "Exe",
-    "flags": []
-  },
-  {
-    "name":  "OutputType",
-    "switch": "target:winexe",
-    "comment": "",
-    "value": "Winexe",
-    "flags": []
-  },
-  {
-    "name":  "OutputType",
-    "switch": "target:library",
-    "comment": "",
-    "value": "Library",
-    "flags": []
-  },
-  {
-    "name":  "OutputType",
-    "switch": "target:module",
-    "comment": "",
-    "value": "Module",
-    "flags": []
-  },
-  {
-    "name":  "DocumentationFile",
-    "switch": "doc",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:x86",
-    "comment": "",
-    "value": "x86",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:Itanium",
-    "comment": "",
-    "value": "Itanium",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:x64",
-    "comment": "",
-    "value": "x64",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:arm",
-    "comment": "",
-    "value": "arm",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:anycpu32bitpreferred",
-    "comment": "",
-    "value": "anycpu32bitpreferred",
-    "flags": []
-  },
-  {
-    "name":  "Platform",
-    "switch": "platform:anycpu",
-    "comment": "",
-    "value": "anycpu",
-    "flags": []
-  },
-  {
-    "name":  "References",
-    "switch": "reference:",
-    "comment": "mit alias",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "References",
-    "switch": "reference:",
-    "comment": "dateiliste",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "AddModules",
-    "switch": "addmodule:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name":  "Win32Resource",
-    "switch": "win32res:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "ApplicationIcon",
-    "switch": "win32icon:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "ApplicationManifest",
-    "switch": "win32manifest:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name":  "NoWin32Manifest",
-    "switch": "nowin32manifest",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DefineDebug",
-    "switch": "debug",
-    "comment": "",
-    "value": "true",
-    "flags": [
-      "Continue"
-    ]
-  },
-  {
-    "name":  "DebugSymbols",
-    "switch": "debug",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DebugSymbols",
-    "switch": "debug-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "DebugSymbols",
-    "switch": "debug+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DebugType",
-    "switch": "debug:none",
-    "comment": "",
-    "value": "none",
-    "flags": []
-  },
-  {
-    "name":  "DebugType",
-    "switch": "debug:full",
-    "comment": "",
-    "value": "full",
-    "flags": []
-  },
-  {
-    "name":  "DebugType",
-    "switch": "debug:pdbonly",
-    "comment": "",
-    "value": "pdbonly",
-    "flags": []
-  },
-  {
-    "name":  "Optimize",
-    "switch": "optimize",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "Optimize",
-    "switch": "optimize-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "Optimize",
-    "switch": "optimize+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "TreatWarningsAsErrors",
-    "switch": "warnaserror",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "TreatWarningsAsErrors",
-    "switch": "warnaserror-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "TreatWarningsAsErrors",
-    "switch": "warnaserror+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "WarningsAsErrors",
-    "switch": "warnaserror",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "WarningsAsErrors",
-    "switch": "warnaserror-",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "WarningsAsErrors",
-    "switch": "warnaserror+",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:0",
-    "comment": "",
-    "value": "0",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:1",
-    "comment": "",
-    "value": "1",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:2",
-    "comment": "",
-    "value": "2",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:3",
-    "comment": "",
-    "value": "3",
-    "flags": []
-  },
-  {
-    "name":  "WarningLevel",
-    "switch": "warn:4",
-    "comment": "",
-    "value": "4",
-    "flags": []
-  },
-  {
-    "name":  "NoWarn",
-    "switch": "nowarn:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired",
-      "CommaAppendable"
-    ]
-  },
-  {
-    "name":  "CheckForOverflowUnderflow",
-    "switch": "checked",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "CheckForOverflowUnderflow",
-    "switch": "checked-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "CheckForOverflowUnderflow",
-    "switch": "checked+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "AllowUnsafeBlocks",
-    "switch": "unsafe",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "AllowUnsafeBlocks",
-    "switch": "unsafe-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "AllowUnsafeBlocks",
-    "switch": "unsafe+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DefineConstants",
-    "switch": "define:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "SemicolonAppendable",
-      "UserValue"
-    ]
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:ISO-1",
-    "comment": "",
-    "value": "ISO-1",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:ISO-2",
-    "comment": "",
-    "value": "ISO-2",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:3",
-    "comment": "",
-    "value": "3",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:4",
-    "comment": "",
-    "value": "4",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:5",
-    "comment": "",
-    "value": "5",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:6",
-    "comment": "",
-    "value": "6",
-    "flags": []
-  },
-  {
-    "name":  "LangVersion",
-    "switch": "langversion:default",
-    "comment": "",
-    "value": "default",
-    "flags": []
-  },
-  {
-    "name":  "DelaySign",
-    "switch": "delaysign",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "DelaySign",
-    "switch": "delaysign-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "DelaySign",
-    "switch": "delaysign+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "AssemblyOriginatorKeyFile",
-    "switch": "keyfile",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "KeyContainerName",
-    "switch": "keycontainer",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "NoLogo",
-    "switch": "nologo",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "NoConfig",
-    "switch": "noconfig",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "BaseAddress",
-    "switch": "baseaddress:",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "CodePage",
-    "switch": "codepage",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "Utf8Output",
-    "switch": "utf8output",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "MainEntryPoint",
-    "switch": "main:",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "GenerateFullPaths",
-    "switch": "fullpaths",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "FileAlignment",
-    "switch": "filealign",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "PdbFile",
-    "switch": "pdb:",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "NoStandardLib",
-    "switch": "nostdlib",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "NoStandardLib",
-    "switch": "nostdlib-",
-    "comment": "",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name":  "NoStandardLib",
-    "switch": "nostdlib+",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name":  "SubsystemVersion",
-    "switch": "subsystemversion",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "AdditionalLibPaths",
-    "switch": "lib:",
-    "comment": "",
-    "value": "",
-    "flags": []
-  },
-  {
-    "name":  "ErrorReport",
-    "switch": "errorreport:none",
-    "comment": "Do Not Send Report",
-    "value": "none",
-    "flags": []
-  },
-  {
-    "name":  "ErrorReport",
-    "switch": "errorreport:prompt",
-    "comment": "Prompt Immediately",
-    "value": "prompt",
-    "flags": []
-  },
-  {
-    "name":  "ErrorReport",
-    "switch": "errorreport:queue",
-    "comment": "Queue For Next Login",
-    "value": "queue",
-    "flags": []
-  },
-  {
-    "name":  "ErrorReport",
-    "switch": "errorreport:send",
-    "comment": "Send Automatically",
-    "value": "send",
-    "flags": []
-  }
-]
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v142_Link.json b/share/cmake-3.18/Templates/MSBuild/FlagTables/v142_Link.json
deleted file mode 100644
index 66ee76f..0000000
--- a/share/cmake-3.18/Templates/MSBuild/FlagTables/v142_Link.json
+++ /dev/null
@@ -1,1323 +0,0 @@
-[
-  {
-    "name": "ShowProgress",
-    "switch": "",
-    "comment": "Not Set",
-    "value": "NotSet",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE",
-    "comment": "Display all progress messages",
-    "value": "LinkVerbose",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:Lib",
-    "comment": "For Libraries Searched",
-    "value": "LinkVerboseLib",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:ICF",
-    "comment": "About COMDAT folding during optimized linking",
-    "value": "LinkVerboseICF",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:REF",
-    "comment": "About data removed during optimized linking",
-    "value": "LinkVerboseREF",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:SAFESEH",
-    "comment": "About Modules incompatible with SEH",
-    "value": "LinkVerboseSAFESEH",
-    "flags": []
-  },
-  {
-    "name": "ShowProgress",
-    "switch": "VERBOSE:CLR",
-    "comment": "About linker activity related to managed code",
-    "value": "LinkVerboseCLR",
-    "flags": []
-  },
-  {
-    "name": "ForceFileOutput",
-    "switch": "FORCE",
-    "comment": "Enabled",
-    "value": "Enabled",
-    "flags": []
-  },
-  {
-    "name": "ForceFileOutput",
-    "switch": "FORCE:MULTIPLE",
-    "comment": "Multiply Defined Symbol Only",
-    "value": "MultiplyDefinedSymbolOnly",
-    "flags": []
-  },
-  {
-    "name": "ForceFileOutput",
-    "switch": "FORCE:UNRESOLVED",
-    "comment": "Undefined Symbol Only",
-    "value": "UndefinedSymbolOnly",
-    "flags": []
-  },
-  {
-    "name": "CreateHotPatchableImage",
-    "switch": "FUNCTIONPADMIN",
-    "comment": "Enabled",
-    "value": "Enabled",
-    "flags": []
-  },
-  {
-    "name": "CreateHotPatchableImage",
-    "switch": "FUNCTIONPADMIN:5",
-    "comment": "X86 Image Only",
-    "value": "X86Image",
-    "flags": []
-  },
-  {
-    "name": "CreateHotPatchableImage",
-    "switch": "FUNCTIONPADMIN:6",
-    "comment": "X64 Image Only",
-    "value": "X64Image",
-    "flags": []
-  },
-  {
-    "name": "CreateHotPatchableImage",
-    "switch": "FUNCTIONPADMIN:16",
-    "comment": "Itanium Image Only",
-    "value": "ItaniumImage",
-    "flags": []
-  },
-  {
-    "name": "UACExecutionLevel",
-    "switch": "level='asInvoker'",
-    "comment": "asInvoker",
-    "value": "AsInvoker",
-    "flags": []
-  },
-  {
-    "name": "UACExecutionLevel",
-    "switch": "level='highestAvailable'",
-    "comment": "highestAvailable",
-    "value": "HighestAvailable",
-    "flags": []
-  },
-  {
-    "name": "UACExecutionLevel",
-    "switch": "level='requireAdministrator'",
-    "comment": "requireAdministrator",
-    "value": "RequireAdministrator",
-    "flags": []
-  },
-  {
-    "name": "GenerateDebugInformation",
-    "switch": "DEBUG",
-    "comment": "Generate Debug Information",
-    "value": "true",
-    "flags": [
-      "CaseInsensitive"
-    ]
-  },
-  {
-    "name": "GenerateDebugInformation",
-    "switch": "DEBUG:FASTLINK",
-    "comment": "Generate Debug Information optimized for faster links",
-    "value": "DebugFastLink",
-    "flags": [
-      "CaseInsensitive"
-    ]
-  },
-  {
-    "name": "GenerateDebugInformation",
-    "switch": "DEBUG:FULL",
-    "comment": "Generate Debug Information optimized for sharing and publishing",
-    "value": "DebugFull",
-    "flags": [
-      "CaseInsensitive"
-    ]
-  },
-  {
-    "name": "GenerateDebugInformation",
-    "switch": "DEBUG:NONE",
-    "comment": "Produces no debugging information",
-    "value": "false",
-    "flags": [
-      "CaseInsensitive"
-    ]
-  },
-  {
-    "name": "SubSystem",
-    "switch": "",
-    "comment": "Not Set",
-    "value": "NotSet",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:CONSOLE",
-    "comment": "Console",
-    "value": "Console",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:WINDOWS",
-    "comment": "Windows",
-    "value": "Windows",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:NATIVE",
-    "comment": "Native",
-    "value": "Native",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:EFI_APPLICATION",
-    "comment": "EFI Application",
-    "value": "EFI Application",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
-    "comment": "EFI Boot Service Driver",
-    "value": "EFI Boot Service Driver",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:EFI_ROM",
-    "comment": "EFI ROM",
-    "value": "EFI ROM",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:EFI_RUNTIME_DRIVER",
-    "comment": "EFI Runtime",
-    "value": "EFI Runtime",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:POSIX",
-    "comment": "POSIX",
-    "value": "POSIX",
-    "flags": []
-  },
-  {
-    "name": "Driver",
-    "switch": "",
-    "comment": "Not Set",
-    "value": "NotSet",
-    "flags": []
-  },
-  {
-    "name": "Driver",
-    "switch": "Driver",
-    "comment": "Driver",
-    "value": "Driver",
-    "flags": []
-  },
-  {
-    "name": "Driver",
-    "switch": "DRIVER:UPONLY",
-    "comment": "UP Only",
-    "value": "UpOnly",
-    "flags": []
-  },
-  {
-    "name": "Driver",
-    "switch": "DRIVER:WDM",
-    "comment": "WDM",
-    "value": "WDM",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "",
-    "comment": "Default",
-    "value": "Default",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "LTCG:incremental",
-    "comment": "Use Fast Link Time Code Generation",
-    "value": "UseFastLinkTimeCodeGeneration",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "LTCG",
-    "comment": "Use Link Time Code Generation",
-    "value": "UseLinkTimeCodeGeneration",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "LTCG:PGInstrument",
-    "comment": "Profile Guided Optimization - Instrument",
-    "value": "PGInstrument",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "LTCG:PGOptimize",
-    "comment": "Profile Guided Optimization - Optimization",
-    "value": "PGOptimization",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "LTCG:PGUpdate",
-    "comment": "Profile Guided Optimization - Update",
-    "value": "PGUpdate",
-    "flags": []
-  },
-  {
-    "name": "GenerateWindowsMetadata",
-    "switch": "WINMD",
-    "comment": "Yes",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "GenerateWindowsMetadata",
-    "switch": "WINMD:NO",
-    "comment": "No",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataSignHash",
-    "switch": "WINMDSIGNHASH:SHA1",
-    "comment": "SHA1",
-    "value": "SHA1",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataSignHash",
-    "switch": "WINMDSIGNHASH:SHA256",
-    "comment": "SHA256",
-    "value": "SHA256",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataSignHash",
-    "switch": "WINMDSIGNHASH:SHA384",
-    "comment": "SHA384",
-    "value": "SHA384",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataSignHash",
-    "switch": "WINMDSIGNHASH:SHA512",
-    "comment": "SHA512",
-    "value": "SHA512",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "",
-    "comment": "Not Set",
-    "value": "NotSet",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:ARM",
-    "comment": "MachineARM",
-    "value": "MachineARM",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:ARM64",
-    "comment": "MachineARM64",
-    "value": "MachineARM64",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:EBC",
-    "comment": "MachineEBC",
-    "value": "MachineEBC",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:IA64",
-    "comment": "MachineIA64",
-    "value": "MachineIA64",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:MIPS",
-    "comment": "MachineMIPS",
-    "value": "MachineMIPS",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:MIPS16",
-    "comment": "MachineMIPS16",
-    "value": "MachineMIPS16",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:MIPSFPU",
-    "comment": "MachineMIPSFPU",
-    "value": "MachineMIPSFPU",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:MIPSFPU16",
-    "comment": "MachineMIPSFPU16",
-    "value": "MachineMIPSFPU16",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:SH4",
-    "comment": "MachineSH4",
-    "value": "MachineSH4",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:THUMB",
-    "comment": "MachineTHUMB",
-    "value": "MachineTHUMB",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:X64",
-    "comment": "MachineX64",
-    "value": "MachineX64",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:X86",
-    "comment": "MachineX86",
-    "value": "MachineX86",
-    "flags": []
-  },
-  {
-    "name": "CLRThreadAttribute",
-    "switch": "CLRTHREADATTRIBUTE:MTA",
-    "comment": "MTA threading attribute",
-    "value": "MTAThreadingAttribute",
-    "flags": []
-  },
-  {
-    "name": "CLRThreadAttribute",
-    "switch": "CLRTHREADATTRIBUTE:STA",
-    "comment": "STA threading attribute",
-    "value": "STAThreadingAttribute",
-    "flags": []
-  },
-  {
-    "name": "CLRThreadAttribute",
-    "switch": "CLRTHREADATTRIBUTE:NONE",
-    "comment": "Default threading attribute",
-    "value": "DefaultThreadingAttribute",
-    "flags": []
-  },
-  {
-    "name": "CLRImageType",
-    "switch": "CLRIMAGETYPE:IJW",
-    "comment": "Force IJW image",
-    "value": "ForceIJWImage",
-    "flags": []
-  },
-  {
-    "name": "CLRImageType",
-    "switch": "CLRIMAGETYPE:PURE",
-    "comment": "Force Pure IL Image",
-    "value": "ForcePureILImage",
-    "flags": []
-  },
-  {
-    "name": "CLRImageType",
-    "switch": "CLRIMAGETYPE:SAFE",
-    "comment": "Force Safe IL Image",
-    "value": "ForceSafeILImage",
-    "flags": []
-  },
-  {
-    "name": "CLRImageType",
-    "switch": "",
-    "comment": "Default image type",
-    "value": "Default",
-    "flags": []
-  },
-  {
-    "name": "SignHash",
-    "switch": "CLRSIGNHASH:SHA1",
-    "comment": "SHA1",
-    "value": "SHA1",
-    "flags": []
-  },
-  {
-    "name": "SignHash",
-    "switch": "CLRSIGNHASH:SHA256",
-    "comment": "SHA256",
-    "value": "SHA256",
-    "flags": []
-  },
-  {
-    "name": "SignHash",
-    "switch": "CLRSIGNHASH:SHA384",
-    "comment": "SHA384",
-    "value": "SHA384",
-    "flags": []
-  },
-  {
-    "name": "SignHash",
-    "switch": "CLRSIGNHASH:SHA512",
-    "comment": "SHA512",
-    "value": "SHA512",
-    "flags": []
-  },
-  {
-    "name": "LinkErrorReporting",
-    "switch": "ERRORREPORT:PROMPT",
-    "comment": "PromptImmediately",
-    "value": "PromptImmediately",
-    "flags": []
-  },
-  {
-    "name": "LinkErrorReporting",
-    "switch": "ERRORREPORT:QUEUE",
-    "comment": "Queue For Next Login",
-    "value": "QueueForNextLogin",
-    "flags": []
-  },
-  {
-    "name": "LinkErrorReporting",
-    "switch": "ERRORREPORT:SEND",
-    "comment": "Send Error Report",
-    "value": "SendErrorReport",
-    "flags": []
-  },
-  {
-    "name": "LinkErrorReporting",
-    "switch": "ERRORREPORT:NONE",
-    "comment": "No Error Report",
-    "value": "NoErrorReport",
-    "flags": []
-  },
-  {
-    "name": "CLRSupportLastError",
-    "switch": "CLRSupportLastError",
-    "comment": "Enabled",
-    "value": "Enabled",
-    "flags": []
-  },
-  {
-    "name": "CLRSupportLastError",
-    "switch": "CLRSupportLastError:NO",
-    "comment": "Disabled",
-    "value": "Disabled",
-    "flags": []
-  },
-  {
-    "name": "CLRSupportLastError",
-    "switch": "CLRSupportLastError:SYSTEMDLL",
-    "comment": "System Dlls Only",
-    "value": "SystemDlls",
-    "flags": []
-  },
-  {
-    "name": "LinkIncremental",
-    "switch": "INCREMENTAL:NO",
-    "comment": "Enable Incremental Linking",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "LinkIncremental",
-    "switch": "INCREMENTAL",
-    "comment": "Enable Incremental Linking",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SuppressStartupBanner",
-    "switch": "NOLOGO",
-    "comment": "Suppress Startup Banner",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "LinkStatus",
-    "switch": "LTCG:NOSTATUS",
-    "comment": "Link Status",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "LinkStatus",
-    "switch": "LTCG:STATUS",
-    "comment": "Link Status",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "PreventDllBinding",
-    "switch": "ALLOWBIND:NO",
-    "comment": "Prevent Dll Binding",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "PreventDllBinding",
-    "switch": "ALLOWBIND",
-    "comment": "Prevent Dll Binding",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "TreatLinkerWarningAsErrors",
-    "switch": "WX:NO",
-    "comment": "Treat Linker Warning As Errors",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "TreatLinkerWarningAsErrors",
-    "switch": "WX",
-    "comment": "Treat Linker Warning As Errors",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "IgnoreAllDefaultLibraries",
-    "switch": "NODEFAULTLIB",
-    "comment": "Ignore All Default Libraries",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "GenerateManifest",
-    "switch": "MANIFEST:NO",
-    "comment": "Generate Manifest",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "GenerateManifest",
-    "switch": "MANIFEST",
-    "comment": "Generate Manifest",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "AllowIsolation",
-    "switch": "ALLOWISOLATION:NO",
-    "comment": "Allow Isolation",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "AllowIsolation",
-    "switch": "",
-    "comment": "Allow Isolation",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "EnableUAC",
-    "switch": "MANIFESTUAC:",
-    "comment": "",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired",
-      "SpaceAppendable"
-    ]
-  },
-  {
-    "name": "UACUIAccess",
-    "switch": "uiAccess='false'",
-    "comment": "UAC Bypass UI Protection",
-    "value": "false",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "UACUIAccess",
-    "switch": "uiAccess='false'",
-    "comment": "UAC Bypass UI Protection",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "UACUIAccess",
-    "switch": "uiAccess='true'",
-    "comment": "UAC Bypass UI Protection",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "ManifestEmbed",
-    "switch": "manifest:embed",
-    "comment": "Embed Manifest",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "GenerateMapFile",
-    "switch": "MAP",
-    "comment": "Generate Map File",
-    "value": "true",
-    "flags": [
-      "UserValue",
-      "UserIgnored",
-      "Continue"
-    ]
-  },
-  {
-    "name": "MapExports",
-    "switch": "MAPINFO:EXPORTS",
-    "comment": "Map Exports",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "AssemblyDebug",
-    "switch": "ASSEMBLYDEBUG:DISABLE",
-    "comment": "Debuggable Assembly",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "AssemblyDebug",
-    "switch": "ASSEMBLYDEBUG",
-    "comment": "Debuggable Assembly",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "LargeAddressAware",
-    "switch": "LARGEADDRESSAWARE:NO",
-    "comment": "Enable Large Addresses",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "LargeAddressAware",
-    "switch": "LARGEADDRESSAWARE",
-    "comment": "Enable Large Addresses",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "TerminalServerAware",
-    "switch": "TSAWARE:NO",
-    "comment": "Terminal Server",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "TerminalServerAware",
-    "switch": "TSAWARE",
-    "comment": "Terminal Server",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SwapRunFromCD",
-    "switch": "SWAPRUN:CD",
-    "comment": "Swap Run From CD",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SwapRunFromNET",
-    "switch": "SWAPRUN:NET",
-    "comment": "Swap Run From Network",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "OptimizeReferences",
-    "switch": "OPT:NOREF",
-    "comment": "References",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "OptimizeReferences",
-    "switch": "OPT:REF",
-    "comment": "References",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "EnableCOMDATFolding",
-    "switch": "OPT:NOICF",
-    "comment": "Enable COMDAT Folding",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "EnableCOMDATFolding",
-    "switch": "OPT:ICF",
-    "comment": "Enable COMDAT Folding",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "IgnoreEmbeddedIDL",
-    "switch": "IGNOREIDL",
-    "comment": "Ignore Embedded IDL",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "AppContainer",
-    "switch": "APPCONTAINER",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataLinkDelaySign",
-    "switch": "WINMDDELAYSIGN:NO",
-    "comment": "Windows Metadata Delay Sign",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "WindowsMetadataLinkDelaySign",
-    "switch": "WINMDDELAYSIGN",
-    "comment": "Windows Metadata Delay Sign",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "NoEntryPoint",
-    "switch": "NOENTRY",
-    "comment": "No Entry Point",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SetChecksum",
-    "switch": "RELEASE",
-    "comment": "Set Checksum",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "RandomizedBaseAddress",
-    "switch": "DYNAMICBASE:NO",
-    "comment": "Randomized Base Address",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "RandomizedBaseAddress",
-    "switch": "DYNAMICBASE",
-    "comment": "Randomized Base Address",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "FixedBaseAddress",
-    "switch": "FIXED:NO",
-    "comment": "Fixed Base Address",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "FixedBaseAddress",
-    "switch": "FIXED",
-    "comment": "Fixed Base Address",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "DataExecutionPrevention",
-    "switch": "NXCOMPAT:NO",
-    "comment": "Data Execution Prevention (DEP)",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "DataExecutionPrevention",
-    "switch": "NXCOMPAT",
-    "comment": "Data Execution Prevention (DEP)",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "TurnOffAssemblyGeneration",
-    "switch": "NOASSEMBLY",
-    "comment": "Turn Off Assembly Generation",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SupportUnloadOfDelayLoadedDLL",
-    "switch": "DELAY:UNLOAD",
-    "comment": "Unload delay loaded DLL",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "SupportNobindOfDelayLoadedDLL",
-    "switch": "DELAY:NOBIND",
-    "comment": "Nobind delay loaded DLL",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "Profile",
-    "switch": "PROFILE",
-    "comment": "Profile",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "LinkDelaySign",
-    "switch": "DELAYSIGN:NO",
-    "comment": "Delay Sign",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "LinkDelaySign",
-    "switch": "DELAYSIGN",
-    "comment": "Delay Sign",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "CLRUnmanagedCodeCheck",
-    "switch": "CLRUNMANAGEDCODECHECK:NO",
-    "comment": "CLR Unmanaged Code Check",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "CLRUnmanagedCodeCheck",
-    "switch": "CLRUNMANAGEDCODECHECK",
-    "comment": "CLR Unmanaged Code Check",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "DetectOneDefinitionRule",
-    "switch": "ODR",
-    "comment": "Detect One Definition Rule violations",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "ImageHasSafeExceptionHandlers",
-    "switch": "SAFESEH:NO",
-    "comment": "Image Has Safe Exception Handlers",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "ImageHasSafeExceptionHandlers",
-    "switch": "SAFESEH",
-    "comment": "Image Has Safe Exception Handlers",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "LinkDLL",
-    "switch": "DLL",
-    "comment": "",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "AdditionalLibraryDirectories",
-    "switch": "LIBPATH:",
-    "comment": "Additional Library Directories",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "Natvis",
-    "switch": "NATVIS:",
-    "comment": "Natvis files",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "IgnoreSpecificDefaultLibraries",
-    "switch": "NODEFAULTLIB:",
-    "comment": "Ignore Specific Default Libraries",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "AddModuleNamesToAssembly",
-    "switch": "ASSEMBLYMODULE:",
-    "comment": "Add Module to Assembly",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "EmbedManagedResourceFile",
-    "switch": "ASSEMBLYRESOURCE:",
-    "comment": "Embed Managed Resource File",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "ForceSymbolReferences",
-    "switch": "INCLUDE:",
-    "comment": "Force Symbol References",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "DelayLoadDLLs",
-    "switch": "DELAYLOAD:",
-    "comment": "Delay Loaded Dlls",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "AssemblyLinkResource",
-    "switch": "ASSEMBLYLINKRESOURCE:",
-    "comment": "Assembly Link Resource",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "AdditionalManifestDependencies",
-    "switch": "MANIFESTDEPENDENCY:",
-    "comment": "Additional Manifest Dependencies",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "ManifestInput",
-    "switch": "manifestinput:",
-    "comment": "Manifest Input",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "OutputFile",
-    "switch": "OUT:",
-    "comment": "Output File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "Version",
-    "switch": "VERSION:",
-    "comment": "Version",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "SpecifySectionAttributes",
-    "switch": "SECTION:",
-    "comment": "Specify Section Attributes",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MSDOSStubFileName",
-    "switch": "STUB:",
-    "comment": "MS-DOS Stub File Name",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ModuleDefinitionFile",
-    "switch": "DEF:",
-    "comment": "Module Definition File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ManifestFile",
-    "switch": "ManifestFile:",
-    "comment": "Manifest File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ProgramDatabaseFile",
-    "switch": "PDB:",
-    "comment": "Generate Program Database File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "StripPrivateSymbols",
-    "switch": "PDBSTRIPPED:",
-    "comment": "Strip Private Symbols",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MapFileName",
-    "switch": "MAP:",
-    "comment": "Map File Name",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "HeapReserveSize",
-    "switch": "HEAP:",
-    "comment": "Heap Reserve Size",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "HeapCommitSize",
-    "switch": "HEAP",
-    "comment": "Heap Commit Size",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "StackReserveSize",
-    "switch": "STACK:",
-    "comment": "Stack Reserve Size",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "StackCommitSize",
-    "switch": "STACK",
-    "comment": "Stack Commit Size",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "UserRequired"
-    ]
-  },
-  {
-    "name": "FunctionOrder",
-    "switch": "ORDER:@",
-    "comment": "Function Order",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ProfileGuidedDatabase",
-    "switch": "PGD:",
-    "comment": "Profile Guided Database",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MidlCommandFile",
-    "switch": "MIDL:@",
-    "comment": "MIDL Commands",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MergedIDLBaseFileName",
-    "switch": "IDLOUT:",
-    "comment": "Merged IDL Base File Name",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "TypeLibraryFile",
-    "switch": "TLBOUT:",
-    "comment": "Type Library",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "WindowsMetadataFile",
-    "switch": "WINMDFILE:",
-    "comment": "Windows Metadata File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "WindowsMetadataLinkKeyFile",
-    "switch": "WINMDKEYFILE:",
-    "comment": "Windows Metadata Key File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "WindowsMetadataKeyContainer",
-    "switch": "WINMDKEYCONTAINER:",
-    "comment": "Windows Metadata Key Container",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "EntryPointSymbol",
-    "switch": "ENTRY:",
-    "comment": "Entry Point",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "BaseAddress",
-    "switch": "BASE:",
-    "comment": "Base Address",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ImportLibrary",
-    "switch": "IMPLIB:",
-    "comment": "Import Library",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "MergeSections",
-    "switch": "MERGE:",
-    "comment": "Merge Sections",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "LinkKeyFile",
-    "switch": "KEYFILE:",
-    "comment": "Key File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "KeyContainer",
-    "switch": "KEYCONTAINER:",
-    "comment": "Key Container",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "TypeLibraryResourceID",
-    "switch": "TLBID:",
-    "comment": "TypeLib Resource ID",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "SectionAlignment",
-    "switch": "ALIGN:",
-    "comment": "SectionAlignment",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  }
-]
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v14_LIB.json b/share/cmake-3.18/Templates/MSBuild/FlagTables/v14_LIB.json
deleted file mode 100644
index 5990ed1..0000000
--- a/share/cmake-3.18/Templates/MSBuild/FlagTables/v14_LIB.json
+++ /dev/null
@@ -1,304 +0,0 @@
-[
-  {
-    "name": "ErrorReporting",
-    "switch": "ERRORREPORT:PROMPT",
-    "comment": "PromptImmediately",
-    "value": "PromptImmediately",
-    "flags": []
-  },
-  {
-    "name": "ErrorReporting",
-    "switch": "ERRORREPORT:QUEUE",
-    "comment": "Queue For Next Login",
-    "value": "QueueForNextLogin",
-    "flags": []
-  },
-  {
-    "name": "ErrorReporting",
-    "switch": "ERRORREPORT:SEND",
-    "comment": "Send Error Report",
-    "value": "SendErrorReport",
-    "flags": []
-  },
-  {
-    "name": "ErrorReporting",
-    "switch": "ERRORREPORT:NONE",
-    "comment": "No Error Report",
-    "value": "NoErrorReport",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:ARM",
-    "comment": "MachineARM",
-    "value": "MachineARM",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:ARM64",
-    "comment": "MachineARM64",
-    "value": "MachineARM64",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:EBC",
-    "comment": "MachineEBC",
-    "value": "MachineEBC",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:IA64",
-    "comment": "MachineIA64",
-    "value": "MachineIA64",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:MIPS",
-    "comment": "MachineMIPS",
-    "value": "MachineMIPS",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:MIPS16",
-    "comment": "MachineMIPS16",
-    "value": "MachineMIPS16",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:MIPSFPU",
-    "comment": "MachineMIPSFPU",
-    "value": "MachineMIPSFPU",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:MIPSFPU16",
-    "comment": "MachineMIPSFPU16",
-    "value": "MachineMIPSFPU16",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:SH4",
-    "comment": "MachineSH4",
-    "value": "MachineSH4",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:THUMB",
-    "comment": "MachineTHUMB",
-    "value": "MachineTHUMB",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:X64",
-    "comment": "MachineX64",
-    "value": "MachineX64",
-    "flags": []
-  },
-  {
-    "name": "TargetMachine",
-    "switch": "MACHINE:X86",
-    "comment": "MachineX86",
-    "value": "MachineX86",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:CONSOLE",
-    "comment": "Console",
-    "value": "Console",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:WINDOWS",
-    "comment": "Windows",
-    "value": "Windows",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:NATIVE",
-    "comment": "Native",
-    "value": "Native",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:EFI_APPLICATION",
-    "comment": "EFI Application",
-    "value": "EFI Application",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
-    "comment": "EFI Boot Service Driver",
-    "value": "EFI Boot Service Driver",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:EFI_ROM",
-    "comment": "EFI ROM",
-    "value": "EFI ROM",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:EFI_RUNTIME_DRIVER",
-    "comment": "EFI Runtime",
-    "value": "EFI Runtime",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:WINDOWSCE",
-    "comment": "WindowsCE",
-    "value": "WindowsCE",
-    "flags": []
-  },
-  {
-    "name": "SubSystem",
-    "switch": "SUBSYSTEM:POSIX",
-    "comment": "POSIX",
-    "value": "POSIX",
-    "flags": []
-  },
-  {
-    "name": "SuppressStartupBanner",
-    "switch": "NOLOGO",
-    "comment": "Suppress Startup Banner",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "IgnoreAllDefaultLibraries",
-    "switch": "NODEFAULTLIB",
-    "comment": "Ignore All Default Libraries",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "TreatLibWarningAsErrors",
-    "switch": "WX:NO",
-    "comment": "Treat Lib Warning As Errors",
-    "value": "false",
-    "flags": []
-  },
-  {
-    "name": "TreatLibWarningAsErrors",
-    "switch": "WX",
-    "comment": "Treat Lib Warning As Errors",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "Verbose",
-    "switch": "VERBOSE",
-    "comment": "Verbose",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "LinkTimeCodeGeneration",
-    "switch": "LTCG",
-    "comment": "Link Time Code Generation",
-    "value": "true",
-    "flags": []
-  },
-  {
-    "name": "AdditionalLibraryDirectories",
-    "switch": "LIBPATH:",
-    "comment": "Additional Library Directories",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "IgnoreSpecificDefaultLibraries",
-    "switch": "NODEFAULTLIB:",
-    "comment": "Ignore Specific Default Libraries",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "ExportNamedFunctions",
-    "switch": "EXPORT:",
-    "comment": "Export Named Functions",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "RemoveObjects",
-    "switch": "REMOVE:",
-    "comment": "Remove Objects",
-    "value": "",
-    "flags": [
-      "UserValue",
-      "SemicolonAppendable"
-    ]
-  },
-  {
-    "name": "OutputFile",
-    "switch": "OUT:",
-    "comment": "Output File",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ModuleDefinitionFile",
-    "switch": "DEF:",
-    "comment": "Module Definition File Name",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "ForceSymbolReferences",
-    "switch": "INCLUDE:",
-    "comment": "Force Symbol References",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "DisplayLibrary",
-    "switch": "LIST:",
-    "comment": "Display Library to standard output",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  },
-  {
-    "name": "Name",
-    "switch": "NAME:",
-    "comment": "Name",
-    "value": "",
-    "flags": [
-      "UserValue"
-    ]
-  }
-]
diff --git a/share/cmake-3.18/Templates/TestDriver.cxx.in b/share/cmake-3.18/Templates/TestDriver.cxx.in
deleted file mode 100644
index 053f1ee..0000000
--- a/share/cmake-3.18/Templates/TestDriver.cxx.in
+++ /dev/null
@@ -1,146 +0,0 @@
-#include <ctype.h>  /* NOLINT */
-#include <stdio.h>  /* NOLINT */
-#include <stdlib.h> /* NOLINT */
-#include <string.h> /* NOLINT */
-
-#if defined(_MSC_VER)
-#pragma warning(disable : 4996) /* deprecation */
-#endif
-
-@CMAKE_TESTDRIVER_EXTRA_INCLUDES@
-
-/* Forward declare test functions. */
-@CMAKE_FORWARD_DECLARE_TESTS@
-
-#ifdef __cplusplus
-#  define CM_CAST(TYPE, EXPR) static_cast<TYPE>(EXPR)
-#  if __cplusplus >= 201103L
-#    define CM_NULL nullptr
-#  else
-#    define CM_NULL NULL
-#  endif
-#else
-#  define CM_CAST(TYPE, EXPR) (TYPE)(EXPR)
-#  define CM_NULL NULL
-#endif
-
-/* Create map.  */
-
-typedef int (*MainFuncPointer)(int, char* []); /* NOLINT */
-typedef struct /* NOLINT */
-{
-  const char* name;
-  MainFuncPointer func;
-} functionMapEntry;
-
-static functionMapEntry cmakeGeneratedFunctionMapEntries[] = {
-  @CMAKE_FUNCTION_TABLE_ENTIRES@
-  { CM_NULL, CM_NULL } /* NOLINT */
-};
-
-static const int NumTests = CM_CAST(int,
-  sizeof(cmakeGeneratedFunctionMapEntries) / sizeof(functionMapEntry)) - 1;
-
-/* Allocate and create a lowercased copy of string
-   (note that it has to be free'd manually) */
-static char* lowercase(const char* string)
-{
-  char *new_string;
-  char *p;
-  size_t stringSize;
-
-  stringSize = CM_CAST(size_t, strlen(string) + 1);
-  new_string = CM_CAST(char*, malloc(sizeof(char) * stringSize));
-
-  if (new_string == CM_NULL) { /* NOLINT */
-    return CM_NULL;            /* NOLINT */
-  }
-  strcpy(new_string, string);  /* NOLINT */
-  for (p = new_string; *p != 0; ++p) {
-    *p = CM_CAST(char, tolower(*p));
-  }
-  return new_string;
-}
-
-int main(int ac, char* av[])
-{
-  int i;
-  int testNum = 0;
-  int partial_match;
-  char *arg;
-  int testToRun = -1;
-
-  @CMAKE_TESTDRIVER_ARGVC_FUNCTION@
-
-  /* If no test name was given */
-  /* process command line with user function.  */
-  if (ac < 2) {
-    /* Ask for a test.  */
-    printf("Available tests:\n");
-    for (i = 0; i < NumTests; ++i) {
-      printf("%3d. %s\n", i, cmakeGeneratedFunctionMapEntries[i].name);
-    }
-    printf("To run a test, enter the test number: ");
-    fflush(stdout);
-    if (scanf("%d", &testNum) != 1) {
-      printf("Couldn't parse that input as a number\n");
-      return -1;
-    }
-    if (testNum >= NumTests) {
-      printf("%3d is an invalid test number.\n", testNum);
-      return -1;
-    }
-    testToRun = testNum;
-    ac--;
-    av++;
-  }
-  partial_match = 0;
-  arg = CM_NULL; /* NOLINT */
-  /* If partial match is requested.  */
-  if (testToRun == -1 && ac > 1) {
-    partial_match = (strcmp(av[1], "-R") == 0) ? 1 : 0;
-  }
-  if (partial_match != 0 && ac < 3) {
-    printf("-R needs an additional parameter.\n");
-    return -1;
-  }
-  if (testToRun == -1) {
-    arg = lowercase(av[1 + partial_match]);
-  }
-  for (i = 0; i < NumTests && testToRun == -1; ++i) {
-    char *test_name = lowercase(cmakeGeneratedFunctionMapEntries[i].name);
-    if (partial_match != 0 && strstr(test_name, arg) != CM_NULL) { /* NOLINT */
-      testToRun = i;
-      ac -= 2;
-      av += 2;
-    } else if (partial_match == 0 && strcmp(test_name, arg) == 0) {
-      testToRun = i;
-      ac--;
-      av++;
-    }
-    free(test_name);
-  }
-  free(arg);
-  if (testToRun != -1) {
-    int result;
-@CMAKE_TESTDRIVER_BEFORE_TESTMAIN@
-    if (testToRun < 0 || testToRun >= NumTests) {
-      printf("testToRun was modified by TestDriver code to an invalid value: "
-             "%3d.\n",
-             testNum);
-      return -1;
-    }
-    result = (*cmakeGeneratedFunctionMapEntries[testToRun].func)(ac, av);
-@CMAKE_TESTDRIVER_AFTER_TESTMAIN@
-    return result;
-  }
-
-  /* Nothing was run, display the test names.  */
-  printf("Available tests:\n");
-  for (i = 0; i < NumTests; ++i) {
-    printf("%3d. %s\n", i, cmakeGeneratedFunctionMapEntries[i].name);
-  }
-  printf("Failed: %s is an invalid test name.\n", av[1]);
-
-  return -1;
-}
diff --git a/share/cmake-3.22/Help/command/DEVICE_LINK_OPTIONS.txt b/share/cmake-3.22/Help/command/DEVICE_LINK_OPTIONS.txt
new file mode 100644
index 0000000..3d50208
--- /dev/null
+++ b/share/cmake-3.22/Help/command/DEVICE_LINK_OPTIONS.txt
@@ -0,0 +1,14 @@
+Host And Device Specific Link Options
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.18
+  When a device link step is involved, which is controlled by
+  :prop_tgt:`CUDA_SEPARABLE_COMPILATION` and
+  :prop_tgt:`CUDA_RESOLVE_DEVICE_SYMBOLS` properties and policy :policy:`CMP0105`,
+  the raw options will be delivered to the host and device link steps (wrapped in
+  ``-Xcompiler`` or equivalent for device link). Options wrapped with
+  ``$<DEVICE_LINK:...>``
+  :manual:`generator expression <cmake-generator-expressions(7)>` will be used
+  only for the device link step. Options wrapped with ``$<HOST_LINK:...>``
+  :manual:`generator expression <cmake-generator-expressions(7)>` will be used
+  only for the host link step.
diff --git a/share/cmake-3.22/Help/command/FIND_XXX.txt b/share/cmake-3.22/Help/command/FIND_XXX.txt
new file mode 100644
index 0000000..5b63e1c
--- /dev/null
+++ b/share/cmake-3.22/Help/command/FIND_XXX.txt
@@ -0,0 +1,184 @@
+A short-hand signature is:
+
+.. parsed-literal::
+
+   |FIND_XXX| (<VAR> name1 [path1 path2 ...])
+
+The general signature is:
+
+.. parsed-literal::
+
+   |FIND_XXX| (
+             <VAR>
+             name | |NAMES|
+             [HINTS [path | ENV var]... ]
+             [PATHS [path | ENV var]... ]
+             [PATH_SUFFIXES suffix1 [suffix2 ...]]
+             [DOC "cache documentation string"]
+             [NO_CACHE]
+             [REQUIRED]
+             [NO_DEFAULT_PATH]
+             [NO_PACKAGE_ROOT_PATH]
+             [NO_CMAKE_PATH]
+             [NO_CMAKE_ENVIRONMENT_PATH]
+             [NO_SYSTEM_ENVIRONMENT_PATH]
+             [NO_CMAKE_SYSTEM_PATH]
+             [CMAKE_FIND_ROOT_PATH_BOTH |
+              ONLY_CMAKE_FIND_ROOT_PATH |
+              NO_CMAKE_FIND_ROOT_PATH]
+            )
+
+This command is used to find a |SEARCH_XXX_DESC|.
+A cache entry, or a normal variable if ``NO_CACHE`` is specified,
+named by ``<VAR>`` is created to store the result of this command.
+If the |SEARCH_XXX| is found the result is stored in the variable
+and the search will not be repeated unless the variable is cleared.
+If nothing is found, the result will be ``<VAR>-NOTFOUND``.
+
+Options include:
+
+``NAMES``
+  Specify one or more possible names for the |SEARCH_XXX|.
+
+  When using this to specify names with and without a version
+  suffix, we recommend specifying the unversioned name first
+  so that locally-built packages can be found before those
+  provided by distributions.
+
+``HINTS``, ``PATHS``
+  Specify directories to search in addition to the default locations.
+  The ``ENV var`` sub-option reads paths from a system environment
+  variable.
+
+``PATH_SUFFIXES``
+  Specify additional subdirectories to check below each directory
+  location otherwise considered.
+
+``DOC``
+  Specify the documentation string for the ``<VAR>`` cache entry.
+
+``NO_CACHE``
+  .. versionadded:: 3.21
+
+  The result of the search will be stored in a normal variable rather than
+  a cache entry.
+
+  .. note::
+
+    If the variable is already set before the call (as a normal or cache
+    variable) then the search will not occur.
+
+  .. warning::
+
+    This option should be used with caution because it can greatly increase
+    the cost of repeated configure steps.
+
+``REQUIRED``
+  .. versionadded:: 3.18
+
+  Stop processing with an error message if nothing is found, otherwise
+  the search will be attempted again the next time |FIND_XXX| is invoked
+  with the same variable.
+
+If ``NO_DEFAULT_PATH`` is specified, then no additional paths are
+added to the search.
+If ``NO_DEFAULT_PATH`` is not specified, the search process is as follows:
+
+.. |FIND_PACKAGE_ROOT_PREFIX_PATH_XXX_SUBDIR| replace::
+   |prefix_XXX_SUBDIR| for each ``<prefix>`` in the
+   :variable:`<PackageName>_ROOT` CMake variable and the
+   :envvar:`<PackageName>_ROOT` environment variable if
+   called from within a find module loaded by
+   :command:`find_package(<PackageName>)`
+
+.. |CMAKE_PREFIX_PATH_XXX_SUBDIR| replace::
+   |prefix_XXX_SUBDIR| for each ``<prefix>`` in :variable:`CMAKE_PREFIX_PATH`
+
+.. |SYSTEM_ENVIRONMENT_PREFIX_PATH_XXX_SUBDIR| replace::
+   |prefix_XXX_SUBDIR| for each ``<prefix>/[s]bin`` in ``PATH``, and
+   |entry_XXX_SUBDIR| for other entries in ``PATH``
+
+.. |CMAKE_SYSTEM_PREFIX_PATH_XXX_SUBDIR| replace::
+   |prefix_XXX_SUBDIR| for each ``<prefix>`` in
+   :variable:`CMAKE_SYSTEM_PREFIX_PATH`
+
+1. .. versionadded:: 3.12
+    If called from within a find module or any other script loaded by a call to
+    :command:`find_package(<PackageName>)`, search prefixes unique to the
+    current package being found.  Specifically, look in the
+    :variable:`<PackageName>_ROOT` CMake variable and the
+    :envvar:`<PackageName>_ROOT` environment variable.
+    The package root variables are maintained as a stack, so if called from
+    nested find modules or config packages, root paths from the parent's find
+    module or config package will be searched after paths from the current
+    module or package.  In other words, the search order would be
+    ``<CurrentPackage>_ROOT``, ``ENV{<CurrentPackage>_ROOT}``,
+    ``<ParentPackage>_ROOT``, ``ENV{<ParentPackage>_ROOT}``, etc.
+    This can be skipped if ``NO_PACKAGE_ROOT_PATH`` is passed or by setting
+    the :variable:`CMAKE_FIND_USE_PACKAGE_ROOT_PATH` to ``FALSE``.
+    See policy :policy:`CMP0074`.
+
+   * |FIND_PACKAGE_ROOT_PREFIX_PATH_XXX|
+
+2. Search paths specified in cmake-specific cache variables.
+   These are intended to be used on the command line with a ``-DVAR=value``.
+   The values are interpreted as :ref:`semicolon-separated lists <CMake Language Lists>`.
+   This can be skipped if ``NO_CMAKE_PATH`` is passed or by setting the
+   :variable:`CMAKE_FIND_USE_CMAKE_PATH` to ``FALSE``.
+
+   * |CMAKE_PREFIX_PATH_XXX|
+   * |CMAKE_XXX_PATH|
+   * |CMAKE_XXX_MAC_PATH|
+
+3. Search paths specified in cmake-specific environment variables.
+   These are intended to be set in the user's shell configuration,
+   and therefore use the host's native path separator
+   (``;`` on Windows and ``:`` on UNIX).
+   This can be skipped if ``NO_CMAKE_ENVIRONMENT_PATH`` is passed or
+   by setting the :variable:`CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH` to ``FALSE``.
+
+   * |CMAKE_PREFIX_PATH_XXX|
+   * |CMAKE_XXX_PATH|
+   * |CMAKE_XXX_MAC_PATH|
+
+4. Search the paths specified by the ``HINTS`` option.
+   These should be paths computed by system introspection, such as a
+   hint provided by the location of another item already found.
+   Hard-coded guesses should be specified with the ``PATHS`` option.
+
+5. Search the standard system environment variables.
+   This can be skipped if ``NO_SYSTEM_ENVIRONMENT_PATH`` is passed or by
+   setting the :variable:`CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH` to ``FALSE``.
+
+   * |SYSTEM_ENVIRONMENT_PATH_XXX|
+   * |SYSTEM_ENVIRONMENT_PATH_WINDOWS_XXX|
+
+6. Search cmake variables defined in the Platform files
+   for the current system.  This can be skipped if ``NO_CMAKE_SYSTEM_PATH``
+   is passed or by setting the :variable:`CMAKE_FIND_USE_CMAKE_SYSTEM_PATH`
+   to ``FALSE``.
+
+   * |CMAKE_SYSTEM_PREFIX_PATH_XXX|
+   * |CMAKE_SYSTEM_XXX_PATH|
+   * |CMAKE_SYSTEM_XXX_MAC_PATH|
+
+   The platform paths that these variables contain are locations that
+   typically include installed software. An example being ``/usr/local`` for
+   UNIX based platforms.
+
+7. Search the paths specified by the PATHS option
+   or in the short-hand version of the command.
+   These are typically hard-coded guesses.
+
+.. versionadded:: 3.16
+  Added ``CMAKE_FIND_USE_<CATEGORY>_PATH`` variables to globally disable
+  various search locations.
+
+.. |FIND_ARGS_XXX| replace:: <VAR> NAMES name
+
+On macOS the :variable:`CMAKE_FIND_FRAMEWORK` and
+:variable:`CMAKE_FIND_APPBUNDLE` variables determine the order of
+preference between Apple-style and unix-style package components.
+
+.. include:: FIND_XXX_ROOT.txt
+.. include:: FIND_XXX_ORDER.txt
diff --git a/share/cmake-3.18/Help/command/FIND_XXX_ORDER.txt b/share/cmake-3.22/Help/command/FIND_XXX_ORDER.txt
similarity index 100%
rename from share/cmake-3.18/Help/command/FIND_XXX_ORDER.txt
rename to share/cmake-3.22/Help/command/FIND_XXX_ORDER.txt
diff --git a/share/cmake-3.18/Help/command/FIND_XXX_ROOT.txt b/share/cmake-3.22/Help/command/FIND_XXX_ROOT.txt
similarity index 100%
rename from share/cmake-3.18/Help/command/FIND_XXX_ROOT.txt
rename to share/cmake-3.22/Help/command/FIND_XXX_ROOT.txt
diff --git a/share/cmake-3.22/Help/command/LINK_OPTIONS_LINKER.txt b/share/cmake-3.22/Help/command/LINK_OPTIONS_LINKER.txt
new file mode 100644
index 0000000..e71e5ea
--- /dev/null
+++ b/share/cmake-3.22/Help/command/LINK_OPTIONS_LINKER.txt
@@ -0,0 +1,25 @@
+Handling Compiler Driver Differences
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+To pass options to the linker tool, each compiler driver has its own syntax.
+The ``LINKER:`` prefix and ``,`` separator can be used to specify, in a portable
+way, options to pass to the linker tool. ``LINKER:`` is replaced by the
+appropriate driver option and ``,`` by the appropriate driver separator.
+The driver prefix and driver separator are given by the values of the
+:variable:`CMAKE_<LANG>_LINKER_WRAPPER_FLAG` and
+:variable:`CMAKE_<LANG>_LINKER_WRAPPER_FLAG_SEP` variables.
+
+For example, ``"LINKER:-z,defs"`` becomes ``-Xlinker -z -Xlinker defs`` for
+``Clang`` and ``-Wl,-z,defs`` for ``GNU GCC``.
+
+The ``LINKER:`` prefix can be specified as part of a ``SHELL:`` prefix
+expression.
+
+The ``LINKER:`` prefix supports, as an alternative syntax, specification of
+arguments using the ``SHELL:`` prefix and space as separator. The previous
+example then becomes ``"LINKER:SHELL:-z defs"``.
+
+.. note::
+
+  Specifying the ``SHELL:`` prefix anywhere other than at the beginning of the
+  ``LINKER:`` prefix is not supported.
diff --git a/share/cmake-3.22/Help/command/OPTIONS_SHELL.txt b/share/cmake-3.22/Help/command/OPTIONS_SHELL.txt
new file mode 100644
index 0000000..4171f01
--- /dev/null
+++ b/share/cmake-3.22/Help/command/OPTIONS_SHELL.txt
@@ -0,0 +1,15 @@
+Option De-duplication
+^^^^^^^^^^^^^^^^^^^^^
+
+The final set of options used for a target is constructed by
+accumulating options from the current target and the usage requirements of
+its dependencies.  The set of options is de-duplicated to avoid repetition.
+
+.. versionadded:: 3.12
+  While beneficial for individual options, the de-duplication step can break
+  up option groups.  For example, ``-option A -option B`` becomes
+  ``-option A B``.  One may specify a group of options using shell-like
+  quoting along with a ``SHELL:`` prefix.  The ``SHELL:`` prefix is dropped,
+  and the rest of the option string is parsed using the
+  :command:`separate_arguments` ``UNIX_COMMAND`` mode. For example,
+  ``"SHELL:-option A" "SHELL:-option B"`` becomes ``-option A -option B``.
diff --git a/share/cmake-3.22/Help/command/add_compile_definitions.rst b/share/cmake-3.22/Help/command/add_compile_definitions.rst
new file mode 100644
index 0000000..48e33be
--- /dev/null
+++ b/share/cmake-3.22/Help/command/add_compile_definitions.rst
@@ -0,0 +1,27 @@
+add_compile_definitions
+-----------------------
+
+.. versionadded:: 3.12
+
+Add preprocessor definitions to the compilation of source files.
+
+.. code-block:: cmake
+
+  add_compile_definitions(<definition> ...)
+
+Adds preprocessor definitions to the compiler command line.
+
+The preprocessor definitions are added to the :prop_dir:`COMPILE_DEFINITIONS`
+directory property for the current ``CMakeLists`` file. They are also added to
+the :prop_tgt:`COMPILE_DEFINITIONS` target property for each target in the
+current ``CMakeLists`` file.
+
+Definitions are specified using the syntax ``VAR`` or ``VAR=value``.
+Function-style definitions are not supported. CMake will automatically
+escape the value correctly for the native build system (note that CMake
+language syntax may require escapes to specify some values).
+
+Arguments to ``add_compile_definitions`` may use "generator expressions" with
+the syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)`
+manual for available expressions.  See the :manual:`cmake-buildsystem(7)`
+manual for more on defining buildsystem properties.
diff --git a/share/cmake-3.18/Help/command/add_compile_options.rst b/share/cmake-3.22/Help/command/add_compile_options.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/add_compile_options.rst
rename to share/cmake-3.22/Help/command/add_compile_options.rst
diff --git a/share/cmake-3.22/Help/command/add_custom_command.rst b/share/cmake-3.22/Help/command/add_custom_command.rst
new file mode 100644
index 0000000..b45a079
--- /dev/null
+++ b/share/cmake-3.22/Help/command/add_custom_command.rst
@@ -0,0 +1,447 @@
+add_custom_command
+------------------
+
+Add a custom build rule to the generated build system.
+
+There are two main signatures for ``add_custom_command``.
+
+Generating Files
+^^^^^^^^^^^^^^^^
+
+The first signature is for adding a custom command to produce an output:
+
+.. code-block:: cmake
+
+  add_custom_command(OUTPUT output1 [output2 ...]
+                     COMMAND command1 [ARGS] [args1...]
+                     [COMMAND command2 [ARGS] [args2...] ...]
+                     [MAIN_DEPENDENCY depend]
+                     [DEPENDS [depends...]]
+                     [BYPRODUCTS [files...]]
+                     [IMPLICIT_DEPENDS <lang1> depend1
+                                      [<lang2> depend2] ...]
+                     [WORKING_DIRECTORY dir]
+                     [COMMENT comment]
+                     [DEPFILE depfile]
+                     [JOB_POOL job_pool]
+                     [VERBATIM] [APPEND] [USES_TERMINAL]
+                     [COMMAND_EXPAND_LISTS])
+
+This defines a command to generate specified ``OUTPUT`` file(s).
+A target created in the same directory (``CMakeLists.txt`` file)
+that specifies any output of the custom command as a source file
+is given a rule to generate the file using the command at build time.
+Do not list the output in more than one independent target that
+may build in parallel or the two instances of the rule may conflict
+(instead use the :command:`add_custom_target` command to drive the
+command and make the other targets depend on that one).
+In makefile terms this creates a new target in the following form::
+
+  OUTPUT: MAIN_DEPENDENCY DEPENDS
+          COMMAND
+
+The options are:
+
+``APPEND``
+  Append the ``COMMAND`` and ``DEPENDS`` option values to the custom
+  command for the first output specified.  There must have already
+  been a previous call to this command with the same output.
+
+  If the previous call specified the output via a generator expression,
+  the output specified by the current call must match in at least one
+  configuration after evaluating generator expressions.  In this case,
+  the appended commands and dependencies apply to all configurations.
+
+  The ``COMMENT``, ``MAIN_DEPENDENCY``, and ``WORKING_DIRECTORY``
+  options are currently ignored when APPEND is given, but may be
+  used in the future.
+
+``BYPRODUCTS``
+  .. versionadded:: 3.2
+
+  Specify the files the command is expected to produce but whose
+  modification time may or may not be newer than the dependencies.
+  If a byproduct name is a relative path it will be interpreted
+  relative to the build tree directory corresponding to the
+  current source directory.
+  Each byproduct file will be marked with the :prop_sf:`GENERATED`
+  source file property automatically.
+
+  Explicit specification of byproducts is supported by the
+  :generator:`Ninja` generator to tell the ``ninja`` build tool
+  how to regenerate byproducts when they are missing.  It is
+  also useful when other build rules (e.g. custom commands)
+  depend on the byproducts.  Ninja requires a build rule for any
+  generated file on which another rule depends even if there are
+  order-only dependencies to ensure the byproducts will be
+  available before their dependents build.
+
+  The :ref:`Makefile Generators` will remove ``BYPRODUCTS`` and other
+  :prop_sf:`GENERATED` files during ``make clean``.
+
+  .. versionadded:: 3.20
+    Arguments to ``BYPRODUCTS`` may use a restricted set of
+    :manual:`generator expressions <cmake-generator-expressions(7)>`.
+    :ref:`Target-dependent expressions <Target-Dependent Queries>` are not
+    permitted.
+
+``COMMAND``
+  Specify the command-line(s) to execute at build time.
+  If more than one ``COMMAND`` is specified they will be executed in order,
+  but *not* necessarily composed into a stateful shell or batch script.
+  (To run a full script, use the :command:`configure_file` command or the
+  :command:`file(GENERATE)` command to create it, and then specify
+  a ``COMMAND`` to launch it.)
+  The optional ``ARGS`` argument is for backward compatibility and
+  will be ignored.
+
+  If ``COMMAND`` specifies an executable target name (created by the
+  :command:`add_executable` command), it will automatically be replaced
+  by the location of the executable created at build time if either of
+  the following is true:
+
+  * The target is not being cross-compiled (i.e. the
+    :variable:`CMAKE_CROSSCOMPILING` variable is not set to true).
+  * .. versionadded:: 3.6
+      The target is being cross-compiled and an emulator is provided (i.e.
+      its :prop_tgt:`CROSSCOMPILING_EMULATOR` target property is set).
+      In this case, the contents of :prop_tgt:`CROSSCOMPILING_EMULATOR` will be
+      prepended to the command before the location of the target executable.
+
+  If neither of the above conditions are met, it is assumed that the
+  command name is a program to be found on the ``PATH`` at build time.
+
+  Arguments to ``COMMAND`` may use
+  :manual:`generator expressions <cmake-generator-expressions(7)>`.
+  Use the :genex:`TARGET_FILE` generator expression to refer to the location
+  of a target later in the command line (i.e. as a command argument rather
+  than as the command to execute).
+
+  Whenever one of the following target based generator expressions are used as
+  a command to execute or is mentioned in a command argument, a target-level
+  dependency will be added automatically so that the mentioned target will be
+  built before any target using this custom command
+  (see policy :policy:`CMP0112`).
+
+    * ``TARGET_FILE``
+    * ``TARGET_LINKER_FILE``
+    * ``TARGET_SONAME_FILE``
+    * ``TARGET_PDB_FILE``
+
+  This target-level dependency does NOT add a file-level dependency that would
+  cause the custom command to re-run whenever the executable is recompiled.
+  List target names with the ``DEPENDS`` option to add such file-level
+  dependencies.
+
+
+``COMMENT``
+  Display the given message before the commands are executed at
+  build time.
+
+``DEPENDS``
+  Specify files on which the command depends.  Each argument is converted
+  to a dependency as follows:
+
+  1. If the argument is the name of a target (created by the
+     :command:`add_custom_target`, :command:`add_executable`, or
+     :command:`add_library` command) a target-level dependency is
+     created to make sure the target is built before any target
+     using this custom command.  Additionally, if the target is an
+     executable or library, a file-level dependency is created to
+     cause the custom command to re-run whenever the target is
+     recompiled.
+
+  2. If the argument is an absolute path, a file-level dependency
+     is created on that path.
+
+  3. If the argument is the name of a source file that has been
+     added to a target or on which a source file property has been set,
+     a file-level dependency is created on that source file.
+
+  4. If the argument is a relative path and it exists in the current
+     source directory, a file-level dependency is created on that
+     file in the current source directory.
+
+  5. Otherwise, a file-level dependency is created on that path relative
+     to the current binary directory.
+
+  If any dependency is an ``OUTPUT`` of another custom command in the same
+  directory (``CMakeLists.txt`` file), CMake automatically brings the other
+  custom command into the target in which this command is built.
+
+  .. versionadded:: 3.16
+    A target-level dependency is added if any dependency is listed as
+    ``BYPRODUCTS`` of a target or any of its build events in the same
+    directory to ensure the byproducts will be available.
+
+  If ``DEPENDS`` is not specified, the command will run whenever
+  the ``OUTPUT`` is missing; if the command does not actually
+  create the ``OUTPUT``, the rule will always run.
+
+  .. versionadded:: 3.1
+    Arguments to ``DEPENDS`` may use
+    :manual:`generator expressions <cmake-generator-expressions(7)>`.
+
+``COMMAND_EXPAND_LISTS``
+  .. versionadded:: 3.8
+
+  Lists in ``COMMAND`` arguments will be expanded, including those
+  created with
+  :manual:`generator expressions <cmake-generator-expressions(7)>`,
+  allowing ``COMMAND`` arguments such as
+  ``${CC} "-I$<JOIN:$<TARGET_PROPERTY:foo,INCLUDE_DIRECTORIES>,;-I>" foo.cc``
+  to be properly expanded.
+
+``IMPLICIT_DEPENDS``
+  Request scanning of implicit dependencies of an input file.
+  The language given specifies the programming language whose
+  corresponding dependency scanner should be used.
+  Currently only ``C`` and ``CXX`` language scanners are supported.
+  The language has to be specified for every file in the
+  ``IMPLICIT_DEPENDS`` list.  Dependencies discovered from the
+  scanning are added to those of the custom command at build time.
+  Note that the ``IMPLICIT_DEPENDS`` option is currently supported
+  only for Makefile generators and will be ignored by other generators.
+
+  .. note::
+
+    This option cannot be specified at the same time as ``DEPFILE`` option.
+
+``JOB_POOL``
+  .. versionadded:: 3.15
+
+  Specify a :prop_gbl:`pool <JOB_POOLS>` for the :generator:`Ninja`
+  generator. Incompatible with ``USES_TERMINAL``, which implies
+  the ``console`` pool.
+  Using a pool that is not defined by :prop_gbl:`JOB_POOLS` causes
+  an error by ninja at build time.
+
+``MAIN_DEPENDENCY``
+  Specify the primary input source file to the command.  This is
+  treated just like any value given to the ``DEPENDS`` option
+  but also suggests to Visual Studio generators where to hang
+  the custom command. Each source file may have at most one command
+  specifying it as its main dependency. A compile command (i.e. for a
+  library or an executable) counts as an implicit main dependency which
+  gets silently overwritten by a custom command specification.
+
+``OUTPUT``
+  Specify the output files the command is expected to produce.
+  If an output name is a relative path it will be interpreted
+  relative to the build tree directory corresponding to the
+  current source directory.
+  Each output file will be marked with the :prop_sf:`GENERATED`
+  source file property automatically.
+  If the output of the custom command is not actually created
+  as a file on disk it should be marked with the :prop_sf:`SYMBOLIC`
+  source file property.
+
+  .. versionadded:: 3.20
+    Arguments to ``OUTPUT`` may use a restricted set of
+    :manual:`generator expressions <cmake-generator-expressions(7)>`.
+    :ref:`Target-dependent expressions <Target-Dependent Queries>` are not
+    permitted.
+
+``USES_TERMINAL``
+  .. versionadded:: 3.2
+
+  The command will be given direct access to the terminal if possible.
+  With the :generator:`Ninja` generator, this places the command in
+  the ``console`` :prop_gbl:`pool <JOB_POOLS>`.
+
+``VERBATIM``
+  All arguments to the commands will be escaped properly for the
+  build tool so that the invoked command receives each argument
+  unchanged.  Note that one level of escapes is still used by the
+  CMake language processor before add_custom_command even sees the
+  arguments.  Use of ``VERBATIM`` is recommended as it enables
+  correct behavior.  When ``VERBATIM`` is not given the behavior
+  is platform specific because there is no protection of
+  tool-specific special characters.
+
+``WORKING_DIRECTORY``
+  Execute the command with the given current working directory.
+  If it is a relative path it will be interpreted relative to the
+  build tree directory corresponding to the current source directory.
+
+  .. versionadded:: 3.13
+    Arguments to ``WORKING_DIRECTORY`` may use
+    :manual:`generator expressions <cmake-generator-expressions(7)>`.
+
+``DEPFILE``
+  .. versionadded:: 3.7
+
+  Specify a ``.d`` depfile which holds dependencies for the custom command.
+  It is usually emitted by the custom command itself.  This keyword may only
+  be used if the generator supports it, as detailed below.
+
+  .. versionadded:: 3.7
+    The :generator:`Ninja` generator supports ``DEPFILE`` since the keyword
+    was first added.
+
+  .. versionadded:: 3.17
+    Added the :generator:`Ninja Multi-Config` generator, which included
+    support for the ``DEPFILE`` keyword.
+
+  .. versionadded:: 3.20
+    Added support for :ref:`Makefile Generators`.
+
+    .. note::
+
+      ``DEPFILE`` cannot be specified at the same time as the
+      ``IMPLICIT_DEPENDS`` option for :ref:`Makefile Generators`.
+
+  .. versionadded:: 3.21
+    Added support for :ref:`Visual Studio Generators` with VS 2012 and above,
+    and for the :generator:`Xcode` generator.  Support for
+    :manual:`generator expressions <cmake-generator-expressions(7)>` was also
+    added.
+
+  Using ``DEPFILE`` with generators other than those listed above is an error.
+
+  If the ``DEPFILE`` argument is relative, it should be relative to
+  :variable:`CMAKE_CURRENT_BINARY_DIR`, and any relative paths inside the
+  ``DEPFILE`` should also be relative to :variable:`CMAKE_CURRENT_BINARY_DIR`.
+  See policy :policy:`CMP0116`, which is always ``NEW`` for
+  :ref:`Makefile Generators`, :ref:`Visual Studio Generators`,
+  and the :generator:`Xcode` generator.
+
+Examples: Generating Files
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Custom commands may be used to generate source files.
+For example, the code:
+
+.. code-block:: cmake
+
+  add_custom_command(
+    OUTPUT out.c
+    COMMAND someTool -i ${CMAKE_CURRENT_SOURCE_DIR}/in.txt
+                     -o out.c
+    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/in.txt
+    VERBATIM)
+  add_library(myLib out.c)
+
+adds a custom command to run ``someTool`` to generate ``out.c`` and then
+compile the generated source as part of a library.  The generation rule
+will re-run whenever ``in.txt`` changes.
+
+.. versionadded:: 3.20
+  One may use generator expressions to specify per-configuration outputs.
+  For example, the code:
+
+  .. code-block:: cmake
+
+    add_custom_command(
+      OUTPUT "out-$<CONFIG>.c"
+      COMMAND someTool -i ${CMAKE_CURRENT_SOURCE_DIR}/in.txt
+                       -o "out-$<CONFIG>.c"
+                       -c "$<CONFIG>"
+      DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/in.txt
+      VERBATIM)
+    add_library(myLib "out-$<CONFIG>.c")
+
+  adds a custom command to run ``someTool`` to generate ``out-<config>.c``,
+  where ``<config>`` is the build configuration, and then compile the generated
+  source as part of a library.
+
+.. _`add_custom_command(TARGET)`:
+
+Build Events
+^^^^^^^^^^^^
+
+The second signature adds a custom command to a target such as a
+library or executable.  This is useful for performing an operation
+before or after building the target.  The command becomes part of the
+target and will only execute when the target itself is built.  If the
+target is already built, the command will not execute.
+
+.. code-block:: cmake
+
+  add_custom_command(TARGET <target>
+                     PRE_BUILD | PRE_LINK | POST_BUILD
+                     COMMAND command1 [ARGS] [args1...]
+                     [COMMAND command2 [ARGS] [args2...] ...]
+                     [BYPRODUCTS [files...]]
+                     [WORKING_DIRECTORY dir]
+                     [COMMENT comment]
+                     [VERBATIM] [USES_TERMINAL]
+                     [COMMAND_EXPAND_LISTS])
+
+This defines a new command that will be associated with building the
+specified ``<target>``.  The ``<target>`` must be defined in the current
+directory; targets defined in other directories may not be specified.
+
+When the command will happen is determined by which
+of the following is specified:
+
+``PRE_BUILD``
+  On :ref:`Visual Studio Generators`, run before any other rules are
+  executed within the target.
+  On other generators, run just before ``PRE_LINK`` commands.
+``PRE_LINK``
+  Run after sources have been compiled but before linking the binary
+  or running the librarian or archiver tool of a static library.
+  This is not defined for targets created by the
+  :command:`add_custom_target` command.
+``POST_BUILD``
+  Run after all other rules within the target have been executed.
+
+.. note::
+  Because generator expressions can be used in custom commands,
+  it is possible to define ``COMMAND`` lines or whole custom commands
+  which evaluate to empty strings for certain configurations.
+  For **Visual Studio 2010 (and newer)** generators these command
+  lines or custom commands will be omitted for the specific
+  configuration and no "empty-string-command" will be added.
+
+  This allows to add individual build events for every configuration.
+
+.. versionadded:: 3.21
+  Support for target-dependent generator expressions.
+
+Examples: Build Events
+^^^^^^^^^^^^^^^^^^^^^^
+
+A ``POST_BUILD`` event may be used to post-process a binary after linking.
+For example, the code:
+
+.. code-block:: cmake
+
+  add_executable(myExe myExe.c)
+  add_custom_command(
+    TARGET myExe POST_BUILD
+    COMMAND someHasher -i "$<TARGET_FILE:myExe>"
+                       -o "$<TARGET_FILE:myExe>.hash"
+    VERBATIM)
+
+will run ``someHasher`` to produce a ``.hash`` file next to the executable
+after linking.
+
+.. versionadded:: 3.20
+  One may use generator expressions to specify per-configuration byproducts.
+  For example, the code:
+
+  .. code-block:: cmake
+
+    add_library(myPlugin MODULE myPlugin.c)
+    add_custom_command(
+      TARGET myPlugin POST_BUILD
+      COMMAND someHasher -i "$<TARGET_FILE:myPlugin>"
+                         --as-code "myPlugin-hash-$<CONFIG>.c"
+      BYPRODUCTS "myPlugin-hash-$<CONFIG>.c"
+      VERBATIM)
+    add_executable(myExe myExe.c "myPlugin-hash-$<CONFIG>.c")
+
+  will run ``someHasher`` after linking ``myPlugin``, e.g. to produce a ``.c``
+  file containing code to check the hash of ``myPlugin`` that the ``myExe``
+  executable can use to verify it before loading.
+
+Ninja Multi-Config
+^^^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.20
+
+  ``add_custom_command`` supports the :generator:`Ninja Multi-Config`
+  generator's cross-config capabilities. See the generator documentation
+  for more information.
diff --git a/share/cmake-3.22/Help/command/add_custom_target.rst b/share/cmake-3.22/Help/command/add_custom_target.rst
new file mode 100644
index 0000000..def23fa
--- /dev/null
+++ b/share/cmake-3.22/Help/command/add_custom_target.rst
@@ -0,0 +1,181 @@
+add_custom_target
+-----------------
+
+Add a target with no output so it will always be built.
+
+.. code-block:: cmake
+
+  add_custom_target(Name [ALL] [command1 [args1...]]
+                    [COMMAND command2 [args2...] ...]
+                    [DEPENDS depend depend depend ... ]
+                    [BYPRODUCTS [files...]]
+                    [WORKING_DIRECTORY dir]
+                    [COMMENT comment]
+                    [JOB_POOL job_pool]
+                    [VERBATIM] [USES_TERMINAL]
+                    [COMMAND_EXPAND_LISTS]
+                    [SOURCES src1 [src2...]])
+
+Adds a target with the given name that executes the given commands.
+The target has no output file and is *always considered out of date*
+even if the commands try to create a file with the name of the target.
+Use the :command:`add_custom_command` command to generate a file with
+dependencies.  By default nothing depends on the custom target.  Use
+the :command:`add_dependencies` command to add dependencies to or
+from other targets.
+
+The options are:
+
+``ALL``
+  Indicate that this target should be added to the default build
+  target so that it will be run every time (the command cannot be
+  called ``ALL``).
+
+``BYPRODUCTS``
+  .. versionadded:: 3.2
+
+  Specify the files the command is expected to produce but whose
+  modification time may or may not be updated on subsequent builds.
+  If a byproduct name is a relative path it will be interpreted
+  relative to the build tree directory corresponding to the
+  current source directory.
+  Each byproduct file will be marked with the :prop_sf:`GENERATED`
+  source file property automatically.
+
+  Explicit specification of byproducts is supported by the
+  :generator:`Ninja` generator to tell the ``ninja`` build tool
+  how to regenerate byproducts when they are missing.  It is
+  also useful when other build rules (e.g. custom commands)
+  depend on the byproducts.  Ninja requires a build rule for any
+  generated file on which another rule depends even if there are
+  order-only dependencies to ensure the byproducts will be
+  available before their dependents build.
+
+  The :ref:`Makefile Generators` will remove ``BYPRODUCTS`` and other
+  :prop_sf:`GENERATED` files during ``make clean``.
+
+  .. versionadded:: 3.20
+    Arguments to ``BYPRODUCTS`` may use a restricted set of
+    :manual:`generator expressions <cmake-generator-expressions(7)>`.
+    :ref:`Target-dependent expressions <Target-Dependent Queries>` are not
+    permitted.
+
+``COMMAND``
+  Specify the command-line(s) to execute at build time.
+  If more than one ``COMMAND`` is specified they will be executed in order,
+  but *not* necessarily composed into a stateful shell or batch script.
+  (To run a full script, use the :command:`configure_file` command or the
+  :command:`file(GENERATE)` command to create it, and then specify
+  a ``COMMAND`` to launch it.)
+
+  If ``COMMAND`` specifies an executable target name (created by the
+  :command:`add_executable` command), it will automatically be replaced
+  by the location of the executable created at build time if either of
+  the following is true:
+
+  * The target is not being cross-compiled (i.e. the
+    :variable:`CMAKE_CROSSCOMPILING` variable is not set to true).
+  * .. versionadded:: 3.6
+      The target is being cross-compiled and an emulator is provided (i.e.
+      its :prop_tgt:`CROSSCOMPILING_EMULATOR` target property is set).
+      In this case, the contents of :prop_tgt:`CROSSCOMPILING_EMULATOR` will be
+      prepended to the command before the location of the target executable.
+
+  If neither of the above conditions are met, it is assumed that the
+  command name is a program to be found on the ``PATH`` at build time.
+
+  Arguments to ``COMMAND`` may use
+  :manual:`generator expressions <cmake-generator-expressions(7)>`.
+  Use the :genex:`TARGET_FILE` generator expression to refer to the location
+  of a target later in the command line (i.e. as a command argument rather
+  than as the command to execute).
+
+  Whenever one of the following target based generator expressions are used as
+  a command to execute or is mentioned in a command argument, a target-level
+  dependency will be added automatically so that the mentioned target will be
+  built before this custom target (see policy :policy:`CMP0112`).
+
+    * ``TARGET_FILE``
+    * ``TARGET_LINKER_FILE``
+    * ``TARGET_SONAME_FILE``
+    * ``TARGET_PDB_FILE``
+
+  The command and arguments are optional and if not specified an empty
+  target will be created.
+
+``COMMENT``
+  Display the given message before the commands are executed at
+  build time.
+
+``DEPENDS``
+  Reference files and outputs of custom commands created with
+  :command:`add_custom_command` command calls in the same directory
+  (``CMakeLists.txt`` file).  They will be brought up to date when
+  the target is built.
+
+  .. versionchanged:: 3.16
+    A target-level dependency is added if any dependency is a byproduct
+    of a target or any of its build events in the same directory to ensure
+    the byproducts will be available before this target is built.
+
+  Use the :command:`add_dependencies` command to add dependencies
+  on other targets.
+
+``COMMAND_EXPAND_LISTS``
+  .. versionadded:: 3.8
+
+  Lists in ``COMMAND`` arguments will be expanded, including those
+  created with
+  :manual:`generator expressions <cmake-generator-expressions(7)>`,
+  allowing ``COMMAND`` arguments such as
+  ``${CC} "-I$<JOIN:$<TARGET_PROPERTY:foo,INCLUDE_DIRECTORIES>,;-I>" foo.cc``
+  to be properly expanded.
+
+``JOB_POOL``
+  .. versionadded:: 3.15
+
+  Specify a :prop_gbl:`pool <JOB_POOLS>` for the :generator:`Ninja`
+  generator. Incompatible with ``USES_TERMINAL``, which implies
+  the ``console`` pool.
+  Using a pool that is not defined by :prop_gbl:`JOB_POOLS` causes
+  an error by ninja at build time.
+
+``SOURCES``
+  Specify additional source files to be included in the custom target.
+  Specified source files will be added to IDE project files for
+  convenience in editing even if they have no build rules.
+
+``VERBATIM``
+  All arguments to the commands will be escaped properly for the
+  build tool so that the invoked command receives each argument
+  unchanged.  Note that one level of escapes is still used by the
+  CMake language processor before ``add_custom_target`` even sees
+  the arguments.  Use of ``VERBATIM`` is recommended as it enables
+  correct behavior.  When ``VERBATIM`` is not given the behavior
+  is platform specific because there is no protection of
+  tool-specific special characters.
+
+``USES_TERMINAL``
+  .. versionadded:: 3.2
+
+  The command will be given direct access to the terminal if possible.
+  With the :generator:`Ninja` generator, this places the command in
+  the ``console`` :prop_gbl:`pool <JOB_POOLS>`.
+
+``WORKING_DIRECTORY``
+  Execute the command with the given current working directory.
+  If it is a relative path it will be interpreted relative to the
+  build tree directory corresponding to the current source directory.
+
+  .. versionadded:: 3.13
+    Arguments to ``WORKING_DIRECTORY`` may use
+    :manual:`generator expressions <cmake-generator-expressions(7)>`.
+
+Ninja Multi-Config
+^^^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.20
+
+  ``add_custom_target`` supports the :generator:`Ninja Multi-Config`
+  generator's cross-config capabilities. See the generator documentation
+  for more information.
diff --git a/share/cmake-3.18/Help/command/add_definitions.rst b/share/cmake-3.22/Help/command/add_definitions.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/add_definitions.rst
rename to share/cmake-3.22/Help/command/add_definitions.rst
diff --git a/share/cmake-3.22/Help/command/add_dependencies.rst b/share/cmake-3.22/Help/command/add_dependencies.rst
new file mode 100644
index 0000000..14c0183
--- /dev/null
+++ b/share/cmake-3.22/Help/command/add_dependencies.rst
@@ -0,0 +1,26 @@
+add_dependencies
+----------------
+
+Add a dependency between top-level targets.
+
+.. code-block:: cmake
+
+  add_dependencies(<target> [<target-dependency>]...)
+
+Makes a top-level ``<target>`` depend on other top-level targets to
+ensure that they build before ``<target>`` does.  A top-level target
+is one created by one of the :command:`add_executable`,
+:command:`add_library`, or :command:`add_custom_target` commands
+(but not targets generated by CMake like ``install``).
+
+Dependencies added to an :ref:`imported target <Imported Targets>`
+or an :ref:`interface library <Interface Libraries>` are followed
+transitively in its place since the target itself does not build.
+
+.. versionadded:: 3.3
+  Allow adding dependencies to interface libraries.
+
+See the ``DEPENDS`` option of :command:`add_custom_target` and
+:command:`add_custom_command` commands for adding file-level
+dependencies in custom rules.  See the :prop_sf:`OBJECT_DEPENDS`
+source file property to add file-level dependencies to object files.
diff --git a/share/cmake-3.22/Help/command/add_executable.rst b/share/cmake-3.22/Help/command/add_executable.rst
new file mode 100644
index 0000000..dde9429
--- /dev/null
+++ b/share/cmake-3.22/Help/command/add_executable.rst
@@ -0,0 +1,109 @@
+add_executable
+--------------
+
+.. only:: html
+
+  .. contents::
+
+Add an executable to the project using the specified source files.
+
+Normal Executables
+^^^^^^^^^^^^^^^^^^
+
+.. code-block:: cmake
+
+  add_executable(<name> [WIN32] [MACOSX_BUNDLE]
+                 [EXCLUDE_FROM_ALL]
+                 [source1] [source2 ...])
+
+Adds an executable target called ``<name>`` to be built from the source
+files listed in the command invocation.  The
+``<name>`` corresponds to the logical target name and must be globally
+unique within a project.  The actual file name of the executable built is
+constructed based on conventions of the native platform (such as
+``<name>.exe`` or just ``<name>``).
+
+.. versionadded:: 3.1
+  Source arguments to ``add_executable`` may use "generator expressions" with
+  the syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)`
+  manual for available expressions.
+
+.. versionadded:: 3.11
+  The source files can be omitted if they are added later using
+  :command:`target_sources`.
+
+By default the executable file will be created in the build tree
+directory corresponding to the source tree directory in which the
+command was invoked.  See documentation of the
+:prop_tgt:`RUNTIME_OUTPUT_DIRECTORY` target property to change this
+location.  See documentation of the :prop_tgt:`OUTPUT_NAME` target property
+to change the ``<name>`` part of the final file name.
+
+If ``WIN32`` is given the property :prop_tgt:`WIN32_EXECUTABLE` will be
+set on the target created.  See documentation of that target property for
+details.
+
+If ``MACOSX_BUNDLE`` is given the corresponding property will be set on
+the created target.  See documentation of the :prop_tgt:`MACOSX_BUNDLE`
+target property for details.
+
+If ``EXCLUDE_FROM_ALL`` is given the corresponding property will be set on
+the created target.  See documentation of the :prop_tgt:`EXCLUDE_FROM_ALL`
+target property for details.
+
+See the :manual:`cmake-buildsystem(7)` manual for more on defining
+buildsystem properties.
+
+See also :prop_sf:`HEADER_FILE_ONLY` on what to do if some sources are
+pre-processed, and you want to have the original sources reachable from
+within IDE.
+
+Imported Executables
+^^^^^^^^^^^^^^^^^^^^
+
+.. code-block:: cmake
+
+  add_executable(<name> IMPORTED [GLOBAL])
+
+An :ref:`IMPORTED executable target <Imported Targets>` references an
+executable file located outside the project.  No rules are generated to
+build it, and the :prop_tgt:`IMPORTED` target property is ``True``.  The
+target name has scope in the directory in which it is created and below, but
+the ``GLOBAL`` option extends visibility.  It may be referenced like any
+target built within the project.  ``IMPORTED`` executables are useful
+for convenient reference from commands like :command:`add_custom_command`.
+Details about the imported executable are specified by setting properties
+whose names begin in ``IMPORTED_``.  The most important such property is
+:prop_tgt:`IMPORTED_LOCATION` (and its per-configuration version
+:prop_tgt:`IMPORTED_LOCATION_<CONFIG>`) which specifies the location of
+the main executable file on disk.  See documentation of the ``IMPORTED_*``
+properties for more information.
+
+Alias Executables
+^^^^^^^^^^^^^^^^^
+
+.. code-block:: cmake
+
+  add_executable(<name> ALIAS <target>)
+
+Creates an :ref:`Alias Target <Alias Targets>`, such that ``<name>`` can
+be used to refer to ``<target>`` in subsequent commands.  The ``<name>``
+does not appear in the generated buildsystem as a make target.  The
+``<target>`` may not be an ``ALIAS``.
+
+.. versionadded:: 3.11
+  An ``ALIAS`` can target a ``GLOBAL`` :ref:`Imported Target <Imported Targets>`
+
+.. versionadded:: 3.18
+  An ``ALIAS`` can target a non-``GLOBAL`` Imported Target. Such alias is
+  scoped to the directory in which it is created and subdirectories.
+  The :prop_tgt:`ALIAS_GLOBAL` target property can be used to check if the
+  alias is global or not.
+
+``ALIAS`` targets can be used as targets to read properties
+from, executables for custom commands and custom targets.  They can also be
+tested for existence with the regular :command:`if(TARGET)` subcommand.
+The ``<name>`` may not be used to modify properties of ``<target>``, that
+is, it may not be used as the operand of :command:`set_property`,
+:command:`set_target_properties`, :command:`target_link_libraries` etc.
+An ``ALIAS`` target may not be installed or exported.
diff --git a/share/cmake-3.22/Help/command/add_library.rst b/share/cmake-3.22/Help/command/add_library.rst
new file mode 100644
index 0000000..1235155
--- /dev/null
+++ b/share/cmake-3.22/Help/command/add_library.rst
@@ -0,0 +1,262 @@
+add_library
+-----------
+
+.. only:: html
+
+   .. contents::
+
+Add a library to the project using the specified source files.
+
+Normal Libraries
+^^^^^^^^^^^^^^^^
+
+.. code-block:: cmake
+
+  add_library(<name> [STATIC | SHARED | MODULE]
+              [EXCLUDE_FROM_ALL]
+              [<source>...])
+
+Adds a library target called ``<name>`` to be built from the source files
+listed in the command invocation.  The ``<name>``
+corresponds to the logical target name and must be globally unique within
+a project.  The actual file name of the library built is constructed based
+on conventions of the native platform (such as ``lib<name>.a`` or
+``<name>.lib``).
+
+.. versionadded:: 3.1
+  Source arguments to ``add_library`` may use "generator expressions" with
+  the syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)`
+  manual for available expressions.
+
+.. versionadded:: 3.11
+  The source files can be omitted if they are added later using
+  :command:`target_sources`.
+
+``STATIC``, ``SHARED``, or ``MODULE`` may be given to specify the type of
+library to be created.  ``STATIC`` libraries are archives of object files
+for use when linking other targets.  ``SHARED`` libraries are linked
+dynamically and loaded at runtime.  ``MODULE`` libraries are plugins that
+are not linked into other targets but may be loaded dynamically at runtime
+using dlopen-like functionality.  If no type is given explicitly the
+type is ``STATIC`` or ``SHARED`` based on whether the current value of the
+variable :variable:`BUILD_SHARED_LIBS` is ``ON``.  For ``SHARED`` and
+``MODULE`` libraries the :prop_tgt:`POSITION_INDEPENDENT_CODE` target
+property is set to ``ON`` automatically.
+A ``SHARED`` library may be marked with the :prop_tgt:`FRAMEWORK`
+target property to create an macOS Framework.
+
+.. versionadded:: 3.8
+  A ``STATIC`` library may be marked with the :prop_tgt:`FRAMEWORK`
+  target property to create a static Framework.
+
+If a library does not export any symbols, it must not be declared as a
+``SHARED`` library.  For example, a Windows resource DLL or a managed C++/CLI
+DLL that exports no unmanaged symbols would need to be a ``MODULE`` library.
+This is because CMake expects a ``SHARED`` library to always have an
+associated import library on Windows.
+
+By default the library file will be created in the build tree directory
+corresponding to the source tree directory in which the command was
+invoked.  See documentation of the :prop_tgt:`ARCHIVE_OUTPUT_DIRECTORY`,
+:prop_tgt:`LIBRARY_OUTPUT_DIRECTORY`, and
+:prop_tgt:`RUNTIME_OUTPUT_DIRECTORY` target properties to change this
+location.  See documentation of the :prop_tgt:`OUTPUT_NAME` target
+property to change the ``<name>`` part of the final file name.
+
+If ``EXCLUDE_FROM_ALL`` is given the corresponding property will be set on
+the created target.  See documentation of the :prop_tgt:`EXCLUDE_FROM_ALL`
+target property for details.
+
+See the :manual:`cmake-buildsystem(7)` manual for more on defining
+buildsystem properties.
+
+See also :prop_sf:`HEADER_FILE_ONLY` on what to do if some sources are
+pre-processed, and you want to have the original sources reachable from
+within IDE.
+
+Object Libraries
+^^^^^^^^^^^^^^^^
+
+.. code-block:: cmake
+
+  add_library(<name> OBJECT [<source>...])
+
+Creates an :ref:`Object Library <Object Libraries>`.  An object library
+compiles source files but does not archive or link their object files into a
+library.  Instead other targets created by :command:`add_library` or
+:command:`add_executable` may reference the objects using an expression of the
+form ``$<TARGET_OBJECTS:objlib>`` as a source, where ``objlib`` is the
+object library name.  For example:
+
+.. code-block:: cmake
+
+  add_library(... $<TARGET_OBJECTS:objlib> ...)
+  add_executable(... $<TARGET_OBJECTS:objlib> ...)
+
+will include objlib's object files in a library and an executable
+along with those compiled from their own sources.  Object libraries
+may contain only sources that compile, header files, and other files
+that would not affect linking of a normal library (e.g. ``.txt``).
+They may contain custom commands generating such sources, but not
+``PRE_BUILD``, ``PRE_LINK``, or ``POST_BUILD`` commands.  Some native build
+systems (such as Xcode) may not like targets that have only object files, so
+consider adding at least one real source file to any target that references
+``$<TARGET_OBJECTS:objlib>``.
+
+.. versionadded:: 3.12
+  Object libraries can be linked to with :command:`target_link_libraries`.
+
+Interface Libraries
+^^^^^^^^^^^^^^^^^^^
+
+.. code-block:: cmake
+
+  add_library(<name> INTERFACE)
+
+Creates an :ref:`Interface Library <Interface Libraries>`.
+An ``INTERFACE`` library target does not compile sources and does
+not produce a library artifact on disk.  However, it may have
+properties set on it and it may be installed and exported.
+Typically, ``INTERFACE_*`` properties are populated on an interface
+target using the commands:
+
+* :command:`set_property`,
+* :command:`target_link_libraries(INTERFACE)`,
+* :command:`target_link_options(INTERFACE)`,
+* :command:`target_include_directories(INTERFACE)`,
+* :command:`target_compile_options(INTERFACE)`,
+* :command:`target_compile_definitions(INTERFACE)`, and
+* :command:`target_sources(INTERFACE)`,
+
+and then it is used as an argument to :command:`target_link_libraries`
+like any other target.
+
+An interface library created with the above signature has no source files
+itself and is not included as a target in the generated buildsystem.
+
+.. versionadded:: 3.15
+  An interface library can have :prop_tgt:`PUBLIC_HEADER` and
+  :prop_tgt:`PRIVATE_HEADER` properties.  The headers specified by those
+  properties can be installed using the :command:`install(TARGETS)` command.
+
+.. versionadded:: 3.19
+  An interface library target may be created with source files:
+
+  .. code-block:: cmake
+
+    add_library(<name> INTERFACE [<source>...] [EXCLUDE_FROM_ALL])
+
+  Source files may be listed directly in the ``add_library`` call or added
+  later by calls to :command:`target_sources` with the ``PRIVATE`` or
+  ``PUBLIC`` keywords.
+
+  If an interface library has source files (i.e. the :prop_tgt:`SOURCES`
+  target property is set), it will appear in the generated buildsystem
+  as a build target much like a target defined by the
+  :command:`add_custom_target` command.  It does not compile any sources,
+  but does contain build rules for custom commands created by the
+  :command:`add_custom_command` command.
+
+.. note::
+  In most command signatures where the ``INTERFACE`` keyword appears,
+  the items listed after it only become part of that target's usage
+  requirements and are not part of the target's own settings.  However,
+  in this signature of ``add_library``, the ``INTERFACE`` keyword refers
+  to the library type only.  Sources listed after it in the ``add_library``
+  call are ``PRIVATE`` to the interface library and do not appear in its
+  :prop_tgt:`INTERFACE_SOURCES` target property.
+
+.. _`add_library imported libraries`:
+
+Imported Libraries
+^^^^^^^^^^^^^^^^^^
+
+.. code-block:: cmake
+
+  add_library(<name> <type> IMPORTED [GLOBAL])
+
+Creates an :ref:`IMPORTED library target <Imported Targets>` called ``<name>``.
+No rules are generated to build it, and the :prop_tgt:`IMPORTED` target
+property is ``True``.  The target name has scope in the directory in which
+it is created and below, but the ``GLOBAL`` option extends visibility.
+It may be referenced like any target built within the project.
+``IMPORTED`` libraries are useful for convenient reference from commands
+like :command:`target_link_libraries`.  Details about the imported library
+are specified by setting properties whose names begin in ``IMPORTED_`` and
+``INTERFACE_``.
+
+The ``<type>`` must be one of:
+
+``STATIC``, ``SHARED``, ``MODULE``, ``UNKNOWN``
+  References a library file located outside the project.  The
+  :prop_tgt:`IMPORTED_LOCATION` target property (or its per-configuration
+  variant :prop_tgt:`IMPORTED_LOCATION_<CONFIG>`) specifies the
+  location of the main library file on disk:
+
+  * For a ``SHARED`` library on most non-Windows platforms, the main library
+    file is the ``.so`` or ``.dylib`` file used by both linkers and dynamic
+    loaders.  If the referenced library file has a ``SONAME`` (or on macOS,
+    has a ``LC_ID_DYLIB`` starting in ``@rpath/``), the value of that field
+    should be set in the :prop_tgt:`IMPORTED_SONAME` target property.
+    If the referenced library file does not have a ``SONAME``, but the
+    platform supports it, then  the :prop_tgt:`IMPORTED_NO_SONAME` target
+    property should be set.
+
+  * For a ``SHARED`` library on Windows, the :prop_tgt:`IMPORTED_IMPLIB`
+    target property (or its per-configuration variant
+    :prop_tgt:`IMPORTED_IMPLIB_<CONFIG>`) specifies the location of the
+    DLL import library file (``.lib`` or ``.dll.a``) on disk, and the
+    ``IMPORTED_LOCATION`` is the location of the ``.dll`` runtime
+    library (and is optional, but needed by the :genex:`TARGET_RUNTIME_DLLS`
+    generator expression).
+
+  Additional usage requirements may be specified in ``INTERFACE_*`` properties.
+
+  An ``UNKNOWN`` library type is typically only used in the implementation of
+  :ref:`Find Modules`.  It allows the path to an imported library (often found
+  using the :command:`find_library` command) to be used without having to know
+  what type of library it is.  This is especially useful on Windows where a
+  static library and a DLL's import library both have the same file extension.
+
+``OBJECT``
+  References a set of object files located outside the project.
+  The :prop_tgt:`IMPORTED_OBJECTS` target property (or its per-configuration
+  variant :prop_tgt:`IMPORTED_OBJECTS_<CONFIG>`) specifies the locations of
+  object files on disk.
+  Additional usage requirements may be specified in ``INTERFACE_*`` properties.
+
+``INTERFACE``
+  Does not reference any library or object files on disk, but may
+  specify usage requirements in ``INTERFACE_*`` properties.
+
+See documentation of the ``IMPORTED_*`` and ``INTERFACE_*`` properties
+for more information.
+
+Alias Libraries
+^^^^^^^^^^^^^^^
+
+.. code-block:: cmake
+
+  add_library(<name> ALIAS <target>)
+
+Creates an :ref:`Alias Target <Alias Targets>`, such that ``<name>`` can be
+used to refer to ``<target>`` in subsequent commands.  The ``<name>`` does
+not appear in the generated buildsystem as a make target.  The ``<target>``
+may not be an ``ALIAS``.
+
+.. versionadded:: 3.11
+  An ``ALIAS`` can target a ``GLOBAL`` :ref:`Imported Target <Imported Targets>`
+
+.. versionadded:: 3.18
+  An ``ALIAS`` can target a non-``GLOBAL`` Imported Target. Such alias is
+  scoped to the directory in which it is created and below.
+  The :prop_tgt:`ALIAS_GLOBAL` target property can be used to check if the
+  alias is global or not.
+
+``ALIAS`` targets can be used as linkable targets and as targets to
+read properties from.  They can also be tested for existence with the
+regular :command:`if(TARGET)` subcommand.  The ``<name>`` may not be used
+to modify properties of ``<target>``, that is, it may not be used as the
+operand of :command:`set_property`, :command:`set_target_properties`,
+:command:`target_link_libraries` etc.  An ``ALIAS`` target may not be
+installed or exported.
diff --git a/share/cmake-3.22/Help/command/add_link_options.rst b/share/cmake-3.22/Help/command/add_link_options.rst
new file mode 100644
index 0000000..f03e7c0
--- /dev/null
+++ b/share/cmake-3.22/Help/command/add_link_options.rst
@@ -0,0 +1,35 @@
+add_link_options
+----------------
+
+.. versionadded:: 3.13
+
+Add options to the link step for executable, shared library or module
+library targets in the current directory and below that are added after
+this command is invoked.
+
+.. code-block:: cmake
+
+  add_link_options(<option> ...)
+
+This command can be used to add any link options, but alternative commands
+exist to add libraries (:command:`target_link_libraries` or
+:command:`link_libraries`).  See documentation of the
+:prop_dir:`directory <LINK_OPTIONS>` and
+:prop_tgt:`target <LINK_OPTIONS>` ``LINK_OPTIONS`` properties.
+
+.. note::
+
+  This command cannot be used to add options for static library targets,
+  since they do not use a linker.  To add archiver or MSVC librarian flags,
+  see the :prop_tgt:`STATIC_LIBRARY_OPTIONS` target property.
+
+Arguments to ``add_link_options`` may use "generator expressions" with
+the syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)`
+manual for available expressions.  See the :manual:`cmake-buildsystem(7)`
+manual for more on defining buildsystem properties.
+
+.. include:: DEVICE_LINK_OPTIONS.txt
+
+.. include:: OPTIONS_SHELL.txt
+
+.. include:: LINK_OPTIONS_LINKER.txt
diff --git a/share/cmake-3.18/Help/command/add_subdirectory.rst b/share/cmake-3.22/Help/command/add_subdirectory.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/add_subdirectory.rst
rename to share/cmake-3.22/Help/command/add_subdirectory.rst
diff --git a/share/cmake-3.22/Help/command/add_test.rst b/share/cmake-3.22/Help/command/add_test.rst
new file mode 100644
index 0000000..95cd037
--- /dev/null
+++ b/share/cmake-3.22/Help/command/add_test.rst
@@ -0,0 +1,82 @@
+add_test
+--------
+
+Add a test to the project to be run by :manual:`ctest(1)`.
+
+.. code-block:: cmake
+
+  add_test(NAME <name> COMMAND <command> [<arg>...]
+           [CONFIGURATIONS <config>...]
+           [WORKING_DIRECTORY <dir>]
+           [COMMAND_EXPAND_LISTS])
+
+Adds a test called ``<name>``.  The test name may contain arbitrary
+characters, expressed as a :ref:`Quoted Argument` or :ref:`Bracket Argument`
+if necessary.  See policy :policy:`CMP0110`.  The options are:
+
+``COMMAND``
+  Specify the test command-line.  If ``<command>`` specifies an
+  executable target (created by :command:`add_executable`) it will
+  automatically be replaced by the location of the executable created
+  at build time.
+
+``CONFIGURATIONS``
+  Restrict execution of the test only to the named configurations.
+
+``WORKING_DIRECTORY``
+  Set the :prop_test:`WORKING_DIRECTORY` test property to
+  specify the working directory in which to execute the test.
+  If not specified the test will be run with the current working
+  directory set to the build directory corresponding to the
+  current source directory.
+
+``COMMAND_EXPAND_LISTS``
+  .. versionadded:: 3.16
+
+  Lists in ``COMMAND`` arguments will be expanded, including those
+  created with
+  :manual:`generator expressions <cmake-generator-expressions(7)>`.
+
+The given test command is expected to exit with code ``0`` to pass and
+non-zero to fail, or vice-versa if the :prop_test:`WILL_FAIL` test
+property is set.  Any output written to stdout or stderr will be
+captured by :manual:`ctest(1)` but does not affect the pass/fail status
+unless the :prop_test:`PASS_REGULAR_EXPRESSION`,
+:prop_test:`FAIL_REGULAR_EXPRESSION` or
+:prop_test:`SKIP_REGULAR_EXPRESSION` test property is used.
+
+.. versionadded:: 3.16
+  Added :prop_test:`SKIP_REGULAR_EXPRESSION` property.
+
+The ``COMMAND`` and ``WORKING_DIRECTORY`` options may use "generator
+expressions" with the syntax ``$<...>``.  See the
+:manual:`cmake-generator-expressions(7)` manual for available expressions.
+
+Example usage:
+
+.. code-block:: cmake
+
+  add_test(NAME mytest
+           COMMAND testDriver --config $<CONFIG>
+                              --exe $<TARGET_FILE:myexe>)
+
+This creates a test ``mytest`` whose command runs a ``testDriver`` tool
+passing the configuration name and the full path to the executable
+file produced by target ``myexe``.
+
+.. note::
+
+  CMake will generate tests only if the :command:`enable_testing`
+  command has been invoked.  The :module:`CTest` module invokes the
+  command automatically unless the ``BUILD_TESTING`` option is turned
+  ``OFF``.
+
+---------------------------------------------------------------------
+
+.. code-block:: cmake
+
+  add_test(<name> <command> [<arg>...])
+
+Add a test called ``<name>`` with the given command-line.  Unlike
+the above ``NAME`` signature no transformation is performed on the
+command-line to support target names or generator expressions.
diff --git a/share/cmake-3.18/Help/command/aux_source_directory.rst b/share/cmake-3.22/Help/command/aux_source_directory.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/aux_source_directory.rst
rename to share/cmake-3.22/Help/command/aux_source_directory.rst
diff --git a/share/cmake-3.18/Help/command/break.rst b/share/cmake-3.22/Help/command/break.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/break.rst
rename to share/cmake-3.22/Help/command/break.rst
diff --git a/share/cmake-3.22/Help/command/build_command.rst b/share/cmake-3.22/Help/command/build_command.rst
new file mode 100644
index 0000000..a03979d
--- /dev/null
+++ b/share/cmake-3.22/Help/command/build_command.rst
@@ -0,0 +1,51 @@
+build_command
+-------------
+
+Get a command line to build the current project.
+This is mainly intended for internal use by the :module:`CTest` module.
+
+.. code-block:: cmake
+
+  build_command(<variable>
+                [CONFIGURATION <config>]
+                [PARALLEL_LEVEL <parallel>]
+                [TARGET <target>]
+                [PROJECT_NAME <projname>] # legacy, causes warning
+               )
+
+Sets the given ``<variable>`` to a command-line string of the form::
+
+ <cmake> --build . [--config <config>] [--parallel <parallel>] [--target <target>...] [-- -i]
+
+where ``<cmake>`` is the location of the :manual:`cmake(1)` command-line
+tool, and ``<config>``, ``<parallel>`` and ``<target>`` are the values
+provided to the ``CONFIGURATION``, ``PARALLEL_LEVEL`` and ``TARGET``
+options, if any.  The trailing ``-- -i`` option is added for
+:ref:`Makefile Generators` if policy :policy:`CMP0061` is not set to
+``NEW``.
+
+When invoked, this ``cmake --build`` command line will launch the
+underlying build system tool.
+
+.. versionadded:: 3.21
+  The ``PARALLEL_LEVEL`` argument can be used to set the ``--parallel``
+  flag.
+
+.. code-block:: cmake
+
+  build_command(<cachevariable> <makecommand>)
+
+This second signature is deprecated, but still available for backwards
+compatibility.  Use the first signature instead.
+
+It sets the given ``<cachevariable>`` to a command-line string as
+above but without the ``--target`` option.
+The ``<makecommand>`` is ignored but should be the full path to
+devenv, nmake, make or one of the end user build tools
+for legacy invocations.
+
+.. note::
+ In CMake versions prior to 3.0 this command returned a command
+ line that directly invokes the native build tool for the current
+ generator.  Their implementation of the ``PROJECT_NAME`` option
+ had no useful effects, so CMake now warns on use of the option.
diff --git a/share/cmake-3.18/Help/command/build_name.rst b/share/cmake-3.22/Help/command/build_name.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/build_name.rst
rename to share/cmake-3.22/Help/command/build_name.rst
diff --git a/share/cmake-3.22/Help/command/cmake_host_system_information.rst b/share/cmake-3.22/Help/command/cmake_host_system_information.rst
new file mode 100644
index 0000000..998e146
--- /dev/null
+++ b/share/cmake-3.22/Help/command/cmake_host_system_information.rst
@@ -0,0 +1,248 @@
+cmake_host_system_information
+-----------------------------
+
+Query host system specific information.
+
+.. code-block:: cmake
+
+  cmake_host_system_information(RESULT <variable> QUERY <key> ...)
+
+Queries system information of the host system on which cmake runs.
+One or more ``<key>`` can be provided to select the information to be
+queried.  The list of queried values is stored in ``<variable>``.
+
+``<key>`` can be one of the following values:
+
+``NUMBER_OF_LOGICAL_CORES``
+  Number of logical cores
+
+``NUMBER_OF_PHYSICAL_CORES``
+  Number of physical cores
+
+``HOSTNAME``
+  Hostname
+
+``FQDN``
+  Fully qualified domain name
+
+``TOTAL_VIRTUAL_MEMORY``
+  Total virtual memory in MiB [#mebibytes]_
+
+``AVAILABLE_VIRTUAL_MEMORY``
+  Available virtual memory in MiB [#mebibytes]_
+
+``TOTAL_PHYSICAL_MEMORY``
+  Total physical memory in MiB [#mebibytes]_
+
+``AVAILABLE_PHYSICAL_MEMORY``
+  Available physical memory in MiB [#mebibytes]_
+
+``IS_64BIT``
+  .. versionadded:: 3.10
+
+  One if processor is 64Bit
+
+``HAS_FPU``
+  .. versionadded:: 3.10
+
+  One if processor has floating point unit
+
+``HAS_MMX``
+  .. versionadded:: 3.10
+
+  One if processor supports MMX instructions
+
+``HAS_MMX_PLUS``
+  .. versionadded:: 3.10
+
+  One if processor supports Ext. MMX instructions
+
+``HAS_SSE``
+  .. versionadded:: 3.10
+
+  One if processor supports SSE instructions
+
+``HAS_SSE2``
+  .. versionadded:: 3.10
+
+  One if processor supports SSE2 instructions
+
+``HAS_SSE_FP``
+  .. versionadded:: 3.10
+
+  One if processor supports SSE FP instructions
+
+``HAS_SSE_MMX``
+  .. versionadded:: 3.10
+
+  One if processor supports SSE MMX instructions
+
+``HAS_AMD_3DNOW``
+  .. versionadded:: 3.10
+
+  One if processor supports 3DNow instructions
+
+``HAS_AMD_3DNOW_PLUS``
+  .. versionadded:: 3.10
+
+  One if processor supports 3DNow+ instructions
+
+``HAS_IA64``
+  .. versionadded:: 3.10
+
+  One if IA64 processor emulating x86
+
+``HAS_SERIAL_NUMBER``
+  .. versionadded:: 3.10
+
+  One if processor has serial number
+
+``PROCESSOR_SERIAL_NUMBER``
+  .. versionadded:: 3.10
+
+  Processor serial number
+
+``PROCESSOR_NAME``
+  .. versionadded:: 3.10
+
+  Human readable processor name
+
+``PROCESSOR_DESCRIPTION``
+  .. versionadded:: 3.10
+
+  Human readable full processor description
+
+``OS_NAME``
+  .. versionadded:: 3.10
+
+  See :variable:`CMAKE_HOST_SYSTEM_NAME`
+
+``OS_RELEASE``
+  .. versionadded:: 3.10
+
+  The OS sub-type e.g. on Windows ``Professional``
+
+``OS_VERSION``
+  .. versionadded:: 3.10
+
+  The OS build ID
+
+``OS_PLATFORM``
+  .. versionadded:: 3.10
+
+  See :variable:`CMAKE_HOST_SYSTEM_PROCESSOR`
+
+``DISTRIB_INFO``
+  .. versionadded:: 3.22
+
+  Read :file:`/etc/os-release` file and define the given ``<variable>``
+  into a list of read variables
+
+``DISTRIB_<name>``
+  .. versionadded:: 3.22
+
+  Get the ``<name>`` variable (see `man 5 os-release`_) if it exists in the
+  :file:`/etc/os-release` file
+
+  Example:
+
+  .. code-block:: cmake
+
+      cmake_host_system_information(RESULT PRETTY_NAME QUERY DISTRIB_PRETTY_NAME)
+      message(STATUS "${PRETTY_NAME}")
+
+      cmake_host_system_information(RESULT DISTRO QUERY DISTRIB_INFO)
+
+      foreach(VAR IN LISTS DISTRO)
+        message(STATUS "${VAR}=`${${VAR}}`")
+      endforeach()
+
+
+  Output::
+
+    -- Ubuntu 20.04.2 LTS
+    -- DISTRO_BUG_REPORT_URL=`https://bugs.launchpad.net/ubuntu/`
+    -- DISTRO_HOME_URL=`https://www.ubuntu.com/`
+    -- DISTRO_ID=`ubuntu`
+    -- DISTRO_ID_LIKE=`debian`
+    -- DISTRO_NAME=`Ubuntu`
+    -- DISTRO_PRETTY_NAME=`Ubuntu 20.04.2 LTS`
+    -- DISTRO_PRIVACY_POLICY_URL=`https://www.ubuntu.com/legal/terms-and-policies/privacy-policy`
+    -- DISTRO_SUPPORT_URL=`https://help.ubuntu.com/`
+    -- DISTRO_UBUNTU_CODENAME=`focal`
+    -- DISTRO_VERSION=`20.04.2 LTS (Focal Fossa)`
+    -- DISTRO_VERSION_CODENAME=`focal`
+    -- DISTRO_VERSION_ID=`20.04`
+
+If :file:`/etc/os-release` file is not found, the command tries to gather OS
+identification via fallback scripts.  The fallback script can use `various
+distribution-specific files`_ to collect OS identification data and map it
+into `man 5 os-release`_ variables.
+
+Fallback Interface Variables
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. variable:: CMAKE_GET_OS_RELEASE_FALLBACK_SCRIPTS
+
+  In addition to the scripts shipped with CMake, a user may append full
+  paths to his script(s) to the this list.  The script filename has the
+  following format: ``NNN-<name>.cmake``, where ``NNN`` is three digits
+  used to apply collected scripts in a specific order.
+
+.. variable:: CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_<varname>
+
+  Variables collected by the user provided fallback script
+  ought to be assigned to CMake variables using this naming
+  convention.  Example, the ``ID`` variable from the manual becomes
+  ``CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_ID``.
+
+.. variable:: CMAKE_GET_OS_RELEASE_FALLBACK_RESULT
+
+  The fallback script ought to store names of all assigned
+  ``CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_<varname>`` variables in this list.
+
+Example:
+
+.. code-block:: cmake
+
+  # Try to detect some old distribution
+  # See also
+  # - http://linuxmafia.com/faq/Admin/release-files.html
+  #
+  if(NOT EXISTS "${CMAKE_SYSROOT}/etc/foobar-release")
+    return()
+  endif()
+  # Get the first string only
+  file(
+      STRINGS "${CMAKE_SYSROOT}/etc/foobar-release" CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT
+      LIMIT_COUNT 1
+    )
+  #
+  # Example:
+  #
+  #   Foobar distribution release 1.2.3 (server)
+  #
+  if(CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT MATCHES "Foobar distribution release ([0-9\.]+) .*")
+    set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_NAME Foobar)
+    set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_PRETTY_NAME "${CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT}")
+    set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_ID foobar)
+    set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION ${CMAKE_MATCH_1})
+    set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION_ID ${CMAKE_MATCH_1})
+    list(
+        APPEND CMAKE_GET_OS_RELEASE_FALLBACK_RESULT
+        CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_NAME
+        CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_PRETTY_NAME
+        CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_ID
+        CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION
+        CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION_ID
+      )
+  endif()
+  unset(CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT)
+
+
+.. rubric:: Footnotes
+
+.. [#mebibytes] One MiB (mebibyte) is equal to 1024x1024 bytes.
+
+.. _man 5 os-release: https://www.freedesktop.org/software/systemd/man/os-release.html
+.. _various distribution-specific files: http://linuxmafia.com/faq/Admin/release-files.html
diff --git a/share/cmake-3.22/Help/command/cmake_language.rst b/share/cmake-3.22/Help/command/cmake_language.rst
new file mode 100644
index 0000000..2859f6b
--- /dev/null
+++ b/share/cmake-3.22/Help/command/cmake_language.rst
@@ -0,0 +1,227 @@
+cmake_language
+--------------
+
+.. versionadded:: 3.18
+
+Call meta-operations on CMake commands.
+
+Synopsis
+^^^^^^^^
+
+.. parsed-literal::
+
+  cmake_language(`CALL`_ <command> [<arg>...])
+  cmake_language(`EVAL`_ CODE <code>...)
+  cmake_language(`DEFER`_ <options>... CALL <command> [<arg>...])
+
+Introduction
+^^^^^^^^^^^^
+
+This command will call meta-operations on built-in CMake commands or
+those created via the :command:`macro` or :command:`function` commands.
+
+``cmake_language`` does not introduce a new variable or policy scope.
+
+Calling Commands
+^^^^^^^^^^^^^^^^
+
+.. _CALL:
+
+.. code-block:: cmake
+
+  cmake_language(CALL <command> [<arg>...])
+
+Calls the named ``<command>`` with the given arguments (if any).
+For example, the code:
+
+.. code-block:: cmake
+
+  set(message_command "message")
+  cmake_language(CALL ${message_command} STATUS "Hello World!")
+
+is equivalent to
+
+.. code-block:: cmake
+
+  message(STATUS "Hello World!")
+
+.. note::
+  To ensure consistency of the code, the following commands are not allowed:
+
+  * ``if`` / ``elseif`` / ``else`` / ``endif``
+  * ``while`` / ``endwhile``
+  * ``foreach`` / ``endforeach``
+  * ``function`` / ``endfunction``
+  * ``macro`` / ``endmacro``
+
+Evaluating Code
+^^^^^^^^^^^^^^^
+
+.. _EVAL:
+
+.. code-block:: cmake
+
+  cmake_language(EVAL CODE <code>...)
+
+Evaluates the ``<code>...`` as CMake code.
+
+For example, the code:
+
+.. code-block:: cmake
+
+  set(A TRUE)
+  set(B TRUE)
+  set(C TRUE)
+  set(condition "(A AND B) OR C")
+
+  cmake_language(EVAL CODE "
+    if (${condition})
+      message(STATUS TRUE)
+    else()
+      message(STATUS FALSE)
+    endif()"
+  )
+
+is equivalent to
+
+.. code-block:: cmake
+
+  set(A TRUE)
+  set(B TRUE)
+  set(C TRUE)
+  set(condition "(A AND B) OR C")
+
+  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/eval.cmake "
+    if (${condition})
+      message(STATUS TRUE)
+    else()
+      message(STATUS FALSE)
+    endif()"
+  )
+
+  include(${CMAKE_CURRENT_BINARY_DIR}/eval.cmake)
+
+Deferring Calls
+^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.19
+
+.. _DEFER:
+
+.. code-block:: cmake
+
+  cmake_language(DEFER <options>... CALL <command> [<arg>...])
+
+Schedules a call to the named ``<command>`` with the given arguments (if any)
+to occur at a later time.  By default, deferred calls are executed as if
+written at the end of the current directory's ``CMakeLists.txt`` file,
+except that they run even after a :command:`return` call.  Variable
+references in arguments are evaluated at the time the deferred call is
+executed.
+
+The options are:
+
+``DIRECTORY <dir>``
+  Schedule the call for the end of the given directory instead of the
+  current directory.  The ``<dir>`` may reference either a source
+  directory or its corresponding binary directory.  Relative paths are
+  treated as relative to the current source directory.
+
+  The given directory must be known to CMake, being either the top-level
+  directory or one added by :command:`add_subdirectory`.  Furthermore,
+  the given directory must not yet be finished processing.  This means
+  it can be the current directory or one of its ancestors.
+
+``ID <id>``
+  Specify an identification for the deferred call.
+  The ``<id>`` may not be empty and may not begin with a capital letter ``A-Z``.
+  The ``<id>`` may begin with an underscore (``_``) only if it was generated
+  automatically by an earlier call that used ``ID_VAR`` to get the id.
+
+``ID_VAR <var>``
+  Specify a variable in which to store the identification for the
+  deferred call.  If ``ID <id>`` is not given, a new identification
+  will be generated and the generated id will start with an underscore (``_``).
+
+The currently scheduled list of deferred calls may be retrieved:
+
+.. code-block:: cmake
+
+  cmake_language(DEFER [DIRECTORY <dir>] GET_CALL_IDS <var>)
+
+This will store in ``<var>`` a :ref:`semicolon-separated list <CMake Language
+Lists>` of deferred call ids.  The ids are for the directory scope in which
+the calls have been deferred to (i.e. where they will be executed), which can
+be different to the scope in which they were created.  The ``DIRECTORY``
+option can be used to specify the scope for which to retrieve the call ids.
+If that option is not given, the call ids for the current directory scope will
+be returned.
+
+Details of a specific call may be retrieved from its id:
+
+.. code-block:: cmake
+
+  cmake_language(DEFER [DIRECTORY <dir>] GET_CALL <id> <var>)
+
+This will store in ``<var>`` a :ref:`semicolon-separated list <CMake Language
+Lists>` in which the first element is the name of the command to be
+called, and the remaining elements are its unevaluated arguments (any
+contained ``;`` characters are included literally and cannot be distinguished
+from multiple arguments).  If multiple calls are scheduled with the same id,
+this retrieves the first one.  If no call is scheduled with the given id in
+the specified ``DIRECTORY`` scope (or the current directory scope if no
+``DIRECTORY`` option is given), this stores an empty string in the variable.
+
+Deferred calls may be canceled by their id:
+
+.. code-block:: cmake
+
+  cmake_language(DEFER [DIRECTORY <dir>] CANCEL_CALL <id>...)
+
+This cancels all deferred calls matching any of the given ids in the specified
+``DIRECTORY`` scope (or the current directory scope if no ``DIRECTORY`` option
+is given).  Unknown ids are silently ignored.
+
+Deferred Call Examples
+""""""""""""""""""""""
+
+For example, the code:
+
+.. code-block:: cmake
+
+  cmake_language(DEFER CALL message "${deferred_message}")
+  cmake_language(DEFER ID_VAR id CALL message "Canceled Message")
+  cmake_language(DEFER CANCEL_CALL ${id})
+  message("Immediate Message")
+  set(deferred_message "Deferred Message")
+
+prints::
+
+  Immediate Message
+  Deferred Message
+
+The ``Cancelled Message`` is never printed because its command is
+canceled.  The ``deferred_message`` variable reference is not evaluated
+until the call site, so it can be set after the deferred call is scheduled.
+
+In order to evaluate variable references immediately when scheduling a
+deferred call, wrap it using ``cmake_language(EVAL)``.  However, note that
+arguments will be re-evaluated in the deferred call, though that can be
+avoided by using bracket arguments.  For example:
+
+.. code-block:: cmake
+
+  set(deferred_message "Deferred Message 1")
+  set(re_evaluated [[${deferred_message}]])
+  cmake_language(EVAL CODE "
+    cmake_language(DEFER CALL message [[${deferred_message}]])
+    cmake_language(DEFER CALL message \"${re_evaluated}\")
+  ")
+  message("Immediate Message")
+  set(deferred_message "Deferred Message 2")
+
+also prints::
+
+  Immediate Message
+  Deferred Message 1
+  Deferred Message 2
diff --git a/share/cmake-3.22/Help/command/cmake_minimum_required.rst b/share/cmake-3.22/Help/command/cmake_minimum_required.rst
new file mode 100644
index 0000000..d159770
--- /dev/null
+++ b/share/cmake-3.22/Help/command/cmake_minimum_required.rst
@@ -0,0 +1,81 @@
+cmake_minimum_required
+----------------------
+
+Require a minimum version of cmake.
+
+.. code-block:: cmake
+
+  cmake_minimum_required(VERSION <min>[...<policy_max>] [FATAL_ERROR])
+
+.. versionadded:: 3.12
+  The optional ``<policy_max>`` version.
+
+Sets the minimum required version of cmake for a project.
+Also updates the policy settings as explained below.
+
+``<min>`` and the optional ``<policy_max>`` are each CMake versions of the
+form ``major.minor[.patch[.tweak]]``, and the ``...`` is literal.
+
+If the running version of CMake is lower than the ``<min>`` required
+version it will stop processing the project and report an error.
+The optional ``<policy_max>`` version, if specified, must be at least the
+``<min>`` version and affects policy settings as described in `Policy Settings`_.
+If the running version of CMake is older than 3.12, the extra ``...``
+dots will be seen as version component separators, resulting in the
+``...<max>`` part being ignored and preserving the pre-3.12 behavior
+of basing policies on ``<min>``.
+
+This command will set the value of the
+:variable:`CMAKE_MINIMUM_REQUIRED_VERSION` variable to ``<min>``.
+
+The ``FATAL_ERROR`` option is accepted but ignored by CMake 2.6 and
+higher.  It should be specified so CMake versions 2.4 and lower fail
+with an error instead of just a warning.
+
+.. note::
+  Call the ``cmake_minimum_required()`` command at the beginning of
+  the top-level ``CMakeLists.txt`` file even before calling the
+  :command:`project` command.  It is important to establish version
+  and policy settings before invoking other commands whose behavior
+  they may affect.  See also policy :policy:`CMP0000`.
+
+  Calling ``cmake_minimum_required()`` inside a :command:`function`
+  limits some effects to the function scope when invoked.  For example,
+  the :variable:`CMAKE_MINIMUM_REQUIRED_VERSION` variable won't be set
+  in the calling scope.  Functions do not introduce their own policy
+  scope though, so policy settings of the caller *will* be affected
+  (see below).  Due to this mix of things that do and do not affect the
+  calling scope, calling ``cmake_minimum_required()`` inside a function
+  is generally discouraged.
+
+.. _`Policy Settings`:
+
+Policy Settings
+^^^^^^^^^^^^^^^
+
+The ``cmake_minimum_required(VERSION)`` command implicitly invokes the
+:command:`cmake_policy(VERSION)` command to specify that the current
+project code is written for the given range of CMake versions.
+All policies known to the running version of CMake and introduced
+in the ``<min>`` (or ``<max>``, if specified) version or earlier will
+be set to use ``NEW`` behavior.  All policies introduced in later
+versions will be unset.  This effectively requests behavior preferred
+as of a given CMake version and tells newer CMake versions to warn
+about their new policies.
+
+When a ``<min>`` version higher than 2.4 is specified the command
+implicitly invokes
+
+.. code-block:: cmake
+
+  cmake_policy(VERSION <min>[...<max>])
+
+which sets CMake policies based on the range of versions specified.
+When a ``<min>`` version 2.4 or lower is given the command implicitly
+invokes
+
+.. code-block:: cmake
+
+  cmake_policy(VERSION 2.4[...<max>])
+
+which enables compatibility features for CMake 2.4 and lower.
diff --git a/share/cmake-3.22/Help/command/cmake_parse_arguments.rst b/share/cmake-3.22/Help/command/cmake_parse_arguments.rst
new file mode 100644
index 0000000..7c85da6
--- /dev/null
+++ b/share/cmake-3.22/Help/command/cmake_parse_arguments.rst
@@ -0,0 +1,115 @@
+cmake_parse_arguments
+---------------------
+
+Parse function or macro arguments.
+
+.. code-block:: cmake
+
+  cmake_parse_arguments(<prefix> <options> <one_value_keywords>
+                        <multi_value_keywords> <args>...)
+
+  cmake_parse_arguments(PARSE_ARGV <N> <prefix> <options>
+                        <one_value_keywords> <multi_value_keywords>)
+
+.. versionadded:: 3.5
+  This command is implemented natively.  Previously, it has been defined in the
+  module :module:`CMakeParseArguments`.
+
+This command is for use in macros or functions.
+It processes the arguments given to that macro or function,
+and defines a set of variables which hold the values of the
+respective options.
+
+The first signature reads processes arguments passed in the ``<args>...``.
+This may be used in either a :command:`macro` or a :command:`function`.
+
+.. versionadded:: 3.7
+  The ``PARSE_ARGV`` signature is only for use in a :command:`function`
+  body.  In this case the arguments that are parsed come from the
+  ``ARGV#`` variables of the calling function.  The parsing starts with
+  the ``<N>``-th argument, where ``<N>`` is an unsigned integer.
+  This allows for the values to have special characters like ``;`` in them.
+
+The ``<options>`` argument contains all options for the respective macro,
+i.e.  keywords which can be used when calling the macro without any value
+following, like e.g.  the ``OPTIONAL`` keyword of the :command:`install`
+command.
+
+The ``<one_value_keywords>`` argument contains all keywords for this macro
+which are followed by one value, like e.g. ``DESTINATION`` keyword of the
+:command:`install` command.
+
+The ``<multi_value_keywords>`` argument contains all keywords for this
+macro which can be followed by more than one value, like e.g. the
+``TARGETS`` or ``FILES`` keywords of the :command:`install` command.
+
+.. versionchanged:: 3.5
+  All keywords shall be unique. I.e. every keyword shall only be specified
+  once in either ``<options>``, ``<one_value_keywords>`` or
+  ``<multi_value_keywords>``. A warning will be emitted if uniqueness is
+  violated.
+
+When done, ``cmake_parse_arguments`` will consider for each of the
+keywords listed in ``<options>``, ``<one_value_keywords>`` and
+``<multi_value_keywords>`` a variable composed of the given ``<prefix>``
+followed by ``"_"`` and the name of the respective keyword.  These
+variables will then hold the respective value from the argument list
+or be undefined if the associated option could not be found.
+For the ``<options>`` keywords, these will always be defined,
+to ``TRUE`` or ``FALSE``, whether the option is in the argument list or not.
+
+All remaining arguments are collected in a variable
+``<prefix>_UNPARSED_ARGUMENTS`` that will be undefined if all arguments
+were recognized. This can be checked afterwards to see
+whether your macro was called with unrecognized parameters.
+
+.. versionadded:: 3.15
+   ``<one_value_keywords>`` and ``<multi_value_keywords>`` that were given no
+   values at all are collected in a variable
+   ``<prefix>_KEYWORDS_MISSING_VALUES`` that will be undefined if all keywords
+   received values. This can be checked to see if there were keywords without
+   any values given.
+
+Consider the following example macro, ``my_install()``, which takes similar
+arguments to the real :command:`install` command:
+
+.. code-block:: cmake
+
+   macro(my_install)
+       set(options OPTIONAL FAST)
+       set(oneValueArgs DESTINATION RENAME)
+       set(multiValueArgs TARGETS CONFIGURATIONS)
+       cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}"
+                             "${multiValueArgs}" ${ARGN} )
+
+       # ...
+
+Assume ``my_install()`` has been called like this:
+
+.. code-block:: cmake
+
+   my_install(TARGETS foo bar DESTINATION bin OPTIONAL blub CONFIGURATIONS)
+
+After the ``cmake_parse_arguments`` call the macro will have set or undefined
+the following variables::
+
+   MY_INSTALL_OPTIONAL = TRUE
+   MY_INSTALL_FAST = FALSE # was not used in call to my_install
+   MY_INSTALL_DESTINATION = "bin"
+   MY_INSTALL_RENAME <UNDEFINED> # was not used
+   MY_INSTALL_TARGETS = "foo;bar"
+   MY_INSTALL_CONFIGURATIONS <UNDEFINED> # was not used
+   MY_INSTALL_UNPARSED_ARGUMENTS = "blub" # nothing expected after "OPTIONAL"
+   MY_INSTALL_KEYWORDS_MISSING_VALUES = "CONFIGURATIONS"
+            # No value for "CONFIGURATIONS" given
+
+You can then continue and process these variables.
+
+Keywords terminate lists of values, e.g. if directly after a
+``one_value_keyword`` another recognized keyword follows, this is
+interpreted as the beginning of the new option.  E.g.
+``my_install(TARGETS foo DESTINATION OPTIONAL)`` would result in
+``MY_INSTALL_DESTINATION`` set to ``"OPTIONAL"``, but as ``OPTIONAL``
+is a keyword itself ``MY_INSTALL_DESTINATION`` will be empty (but added
+to ``MY_INSTALL_KEYWORDS_MISSING_VALUES``) and ``MY_INSTALL_OPTIONAL`` will
+therefore be set to ``TRUE``.
diff --git a/share/cmake-3.22/Help/command/cmake_path.rst b/share/cmake-3.22/Help/command/cmake_path.rst
new file mode 100644
index 0000000..454c860
--- /dev/null
+++ b/share/cmake-3.22/Help/command/cmake_path.rst
@@ -0,0 +1,786 @@
+cmake_path
+----------
+
+.. versionadded:: 3.20
+
+This command is for the manipulation of paths.  Only syntactic aspects of
+paths are handled, there is no interaction of any kind with any underlying
+file system.  The path may represent a non-existing path or even one that
+is not allowed to exist on the current file system or platform.
+For operations that do interact with the filesystem, see the :command:`file`
+command.
+
+.. note::
+
+  The ``cmake_path`` command handles paths in the format of the build system
+  (i.e. the host platform), not the target system.  When cross-compiling,
+  if the path contains elements that are not representable on the host
+  platform (e.g. a drive letter when the host is not Windows), the results
+  will be unpredictable.
+
+Synopsis
+^^^^^^^^
+
+.. parsed-literal::
+
+  `Conventions`_
+
+  `Path Structure And Terminology`_
+
+  `Normalization`_
+
+  `Decomposition`_
+    cmake_path(`GET`_ <path-var> :ref:`ROOT_NAME <GET_ROOT_NAME>` <out-var>)
+    cmake_path(`GET`_ <path-var> :ref:`ROOT_DIRECTORY <GET_ROOT_DIRECTORY>` <out-var>)
+    cmake_path(`GET`_ <path-var> :ref:`ROOT_PATH <GET_ROOT_PATH>` <out-var>)
+    cmake_path(`GET`_ <path-var> :ref:`FILENAME <GET_FILENAME>` <out-var>)
+    cmake_path(`GET`_ <path-var> :ref:`EXTENSION <GET_EXTENSION>` [LAST_ONLY] <out-var>)
+    cmake_path(`GET`_ <path-var> :ref:`STEM <GET_STEM>` [LAST_ONLY] <out-var>)
+    cmake_path(`GET`_ <path-var> :ref:`RELATIVE_PART <GET_RELATIVE_PART>` <out-var>)
+    cmake_path(`GET`_ <path-var> :ref:`PARENT_PATH <GET_PARENT_PATH>` <out-var>)
+
+  `Query`_
+    cmake_path(`HAS_ROOT_NAME`_ <path-var> <out-var>)
+    cmake_path(`HAS_ROOT_DIRECTORY`_ <path-var> <out-var>)
+    cmake_path(`HAS_ROOT_PATH`_ <path-var> <out-var>)
+    cmake_path(`HAS_FILENAME`_ <path-var> <out-var>)
+    cmake_path(`HAS_EXTENSION`_ <path-var> <out-var>)
+    cmake_path(`HAS_STEM`_ <path-var> <out-var>)
+    cmake_path(`HAS_RELATIVE_PART`_ <path-var> <out-var>)
+    cmake_path(`HAS_PARENT_PATH`_ <path-var> <out-var>)
+    cmake_path(`IS_ABSOLUTE`_ <path-var> <out-var>)
+    cmake_path(`IS_RELATIVE`_ <path-var> <out-var>)
+    cmake_path(`IS_PREFIX`_ <path-var> <input> [NORMALIZE] <out-var>)
+    cmake_path(`COMPARE`_ <input1> <OP> <input2> <out-var>)
+
+  `Modification`_
+    cmake_path(:ref:`SET <cmake_path-SET>` <path-var> [NORMALIZE] <input>)
+    cmake_path(`APPEND`_ <path-var> [<input>...] [OUTPUT_VARIABLE <out-var>])
+    cmake_path(`APPEND_STRING`_ <path-var> [<input>...] [OUTPUT_VARIABLE <out-var>])
+    cmake_path(`REMOVE_FILENAME`_ <path-var> [OUTPUT_VARIABLE <out-var>])
+    cmake_path(`REPLACE_FILENAME`_ <path-var> <input> [OUTPUT_VARIABLE <out-var>])
+    cmake_path(`REMOVE_EXTENSION`_ <path-var> [LAST_ONLY] [OUTPUT_VARIABLE <out-var>])
+    cmake_path(`REPLACE_EXTENSION`_ <path-var> [LAST_ONLY] <input> [OUTPUT_VARIABLE <out-var>])
+
+  `Generation`_
+    cmake_path(`NORMAL_PATH`_ <path-var> [OUTPUT_VARIABLE <out-var>])
+    cmake_path(`RELATIVE_PATH`_ <path-var> [BASE_DIRECTORY <input>] [OUTPUT_VARIABLE <out-var>])
+    cmake_path(`ABSOLUTE_PATH`_ <path-var> [BASE_DIRECTORY <input>] [NORMALIZE] [OUTPUT_VARIABLE <out-var>])
+
+  `Native Conversion`_
+    cmake_path(`NATIVE_PATH`_ <path-var> [NORMALIZE] <out-var>)
+    cmake_path(`CONVERT`_ <input> `TO_CMAKE_PATH_LIST`_ <out-var> [NORMALIZE])
+    cmake_path(`CONVERT`_ <input> `TO_NATIVE_PATH_LIST`_ <out-var> [NORMALIZE])
+
+  `Hashing`_
+    cmake_path(`HASH`_ <path-var> <out-var>)
+
+Conventions
+^^^^^^^^^^^
+
+The following conventions are used in this command's documentation:
+
+``<path-var>``
+  Always the name of a variable.  For commands that expect a ``<path-var>``
+  as input, the variable must exist and it is expected to hold a single path.
+
+``<input>``
+  A string literal which may contain a path, path fragment, or multiple paths
+  with a special separator depending on the command.  See the description of
+  each command to see how this is interpreted.
+
+``<input>...``
+  Zero or more string literal arguments.
+
+``<out-var>``
+  The name of a variable into which the result of a command will be written.
+
+
+Path Structure And Terminology
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+A path has the following structure (all components are optional, with some
+constraints):
+
+::
+
+  root-name root-directory-separator (item-name directory-separator)* filename
+
+``root-name``
+  Identifies the root on a filesystem with multiple roots (such as ``"C:"``
+  or ``"//myserver"``). It is optional.
+
+``root-directory-separator``
+  A directory separator that, if present, indicates that this path is
+  absolute.  If it is missing and the first element other than the
+  ``root-name`` is an ``item-name``, then the path is relative.
+
+``item-name``
+  A sequence of characters that aren't directory separators.  This name may
+  identify a file, a hard link, a symbolic link, or a directory.  Two special
+  cases are recognized:
+
+    * The item name consisting of a single dot character ``.`` is a
+      directory name that refers to the current directory.
+
+    * The item name consisting of two dot characters ``..`` is a
+      directory name that refers to the parent directory.
+
+  The ``(...)*`` pattern shown above is to indicate that there can be zero
+  or more item names, with multiple items separated by a
+  ``directory-separator``.  The ``()*`` characters are not part of the path.
+
+``directory-separator``
+  The only recognized directory separator is a forward slash character ``/``.
+  If this character is repeated, it is treated as a single directory
+  separator.  In other words, ``/usr///////lib`` is the same as ``/usr/lib``.
+
+.. _FILENAME_DEF:
+.. _EXTENSION_DEF:
+.. _STEM_DEF:
+
+``filename``
+  A path has a ``filename`` if it does not end with a ``directory-separator``.
+  The ``filename`` is effectively the last ``item-name`` of the path, so it
+  can also be a hard link, symbolic link or a directory.
+
+  A ``filename`` can have an *extension*.  By default, the extension is
+  defined as the sub-string beginning at the left-most period (including
+  the period) and until the end of the ``filename``.  In commands that
+  accept a ``LAST_ONLY`` keyword, ``LAST_ONLY`` changes the interpretation
+  to the sub-string beginning at the right-most period.
+
+  The following exceptions apply to the above interpretation:
+
+    * If the first character in the ``filename`` is a period, that period is
+      ignored (i.e. a ``filename`` like ``".profile"`` is treated as having
+      no extension).
+
+    * If the ``filename`` is either ``.`` or ``..``, it has no extension.
+
+  The *stem* is the part of the ``filename`` before the extension.
+
+Some commands refer to a ``root-path``.  This is the concatenation of
+``root-name`` and ``root-directory-separator``, either or both of which can
+be empty.  A ``relative-part`` refers to the full path with any ``root-path``
+removed.
+
+
+Creating A Path Variable
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+While a path can be created with care using an ordinary :command:`set`
+command, it is recommended to use :ref:`cmake_path(SET) <cmake_path-SET>`
+instead, as it automatically converts the path to the required form where
+required.  The :ref:`cmake_path(APPEND) <APPEND>` subcommand may
+be another suitable alternative where a path needs to be constructed by
+joining fragments.  The following example compares the three methods for
+constructing the same path:
+
+.. code-block:: cmake
+
+  set(path1 "${CMAKE_CURRENT_SOURCE_DIR}/data")
+
+  cmake_path(SET path2 "${CMAKE_CURRENT_SOURCE_DIR}/data")
+
+  cmake_path(APPEND path3 "${CMAKE_CURRENT_SOURCE_DIR}" "data")
+
+`Modification`_ and `Generation`_ sub-commands can either store the result
+in-place, or in a separate variable named after an ``OUTPUT_VARIABLE``
+keyword.  All other sub-commands store the result in a mandatory ``<out-var>``
+variable.
+
+.. _Normalization:
+
+Normalization
+^^^^^^^^^^^^^
+
+Some sub-commands support *normalizing* a path.  The algorithm used to
+normalize a path is as follows:
+
+1. If the path is empty, stop (the normalized form of an empty path is
+   also an empty path).
+2. Replace each ``directory-separator``, which may consist of multiple
+   separators, with a single ``/`` (``/a///b  --> /a/b``).
+3. Remove each solitary period (``.``) and any immediately following
+   ``directory-separator`` (``/a/./b/. --> /a/b``).
+4. Remove each ``item-name`` (other than ``..``) that is immediately
+   followed by a ``directory-separator`` and a ``..``, along with any
+   immediately following ``directory-separator`` (``/a/b/../c --> a/c``).
+5. If there is a ``root-directory``, remove any ``..`` and any
+   ``directory-separators`` immediately following them.  The parent of the
+   root directory is treated as still the root directory (``/../a --> /a``).
+6. If the last ``item-name`` is ``..``, remove any trailing
+   ``directory-separator`` (``../ --> ..``).
+7. If the path is empty by this stage, add a ``dot`` (normal form of ``./``
+   is ``.``).
+
+
+Decomposition
+^^^^^^^^^^^^^
+
+.. _GET:
+.. _GET_ROOT_NAME:
+.. _GET_ROOT_DIRECTORY:
+.. _GET_ROOT_PATH:
+.. _GET_FILENAME:
+.. _GET_EXTENSION:
+.. _GET_STEM:
+.. _GET_RELATIVE_PART:
+.. _GET_PARENT_PATH:
+
+The following forms of the ``GET`` subcommand each retrieve a different
+component or group of components from a path.  See
+`Path Structure And Terminology`_ for the meaning of each path component.
+
+::
+
+  cmake_path(GET <path-var> ROOT_NAME <out-var>)
+  cmake_path(GET <path-var> ROOT_DIRECTORY <out-var>)
+  cmake_path(GET <path-var> ROOT_PATH <out-var>)
+  cmake_path(GET <path-var> FILENAME <out-var>)
+  cmake_path(GET <path-var> EXTENSION [LAST_ONLY] <out-var>)
+  cmake_path(GET <path-var> STEM [LAST_ONLY] <out-var>)
+  cmake_path(GET <path-var> RELATIVE_PART <out-var>)
+  cmake_path(GET <path-var> PARENT_PATH <out-var>)
+
+If a requested component is not present in the path, an empty string will be
+stored in ``<out-var>``.  For example, only Windows systems have the concept
+of a ``root-name``, so when the host machine is non-Windows, the ``ROOT_NAME``
+subcommand will always return an empty string.
+
+For ``PARENT_PATH``, if the `HAS_RELATIVE_PART`_ subcommand returns false,
+the result is a copy of ``<path-var>``.  Note that this implies that a root
+directory is considered to have a parent, with that parent being itself.
+Where `HAS_RELATIVE_PART`_ returns true, the result will essentially be
+``<path-var>`` with one less element.
+
+Root examples
+"""""""""""""
+
+.. code-block:: cmake
+
+  set(path "c:/a")
+
+  cmake_path(GET path ROOT_NAME rootName)
+  cmake_path(GET path ROOT_DIRECTORY rootDir)
+  cmake_path(GET path ROOT_PATH rootPath)
+
+  message("Root name is \"${rootName}\"")
+  message("Root directory is \"${rootDir}\"")
+  message("Root path is \"${rootPath}\"")
+
+::
+
+  Root name is "c:"
+  Root directory is "/"
+  Root path is "c:/"
+
+Filename examples
+"""""""""""""""""
+
+.. code-block:: cmake
+
+  set(path "/a/b")
+  cmake_path(GET path FILENAME filename)
+  message("First filename is \"${filename}\"")
+
+  # Trailing slash means filename is empty
+  set(path "/a/b/")
+  cmake_path(GET path FILENAME filename)
+  message("Second filename is \"${filename}\"")
+
+::
+
+  First filename is "b"
+  Second filename is ""
+
+Extension and stem examples
+"""""""""""""""""""""""""""
+
+.. code-block:: cmake
+
+  set(path "name.ext1.ext2")
+
+  cmake_path(GET path EXTENSION fullExt)
+  cmake_path(GET path STEM fullStem)
+  message("Full extension is \"${fullExt}\"")
+  message("Full stem is \"${fullStem}\"")
+
+  # Effect of LAST_ONLY
+  cmake_path(GET path EXTENSION LAST_ONLY lastExt)
+  cmake_path(GET path STEM LAST_ONLY lastStem)
+  message("Last extension is \"${lastExt}\"")
+  message("Last stem is \"${lastStem}\"")
+
+  # Special cases
+  set(dotPath "/a/.")
+  set(dotDotPath "/a/..")
+  set(someMorePath "/a/.some.more")
+  cmake_path(GET dotPath EXTENSION dotExt)
+  cmake_path(GET dotPath STEM dotStem)
+  cmake_path(GET dotDotPath EXTENSION dotDotExt)
+  cmake_path(GET dotDotPath STEM dotDotStem)
+  cmake_path(GET dotMorePath EXTENSION someMoreExt)
+  cmake_path(GET dotMorePath STEM someMoreStem)
+  message("Dot extension is \"${dotExt}\"")
+  message("Dot stem is \"${dotStem}\"")
+  message("Dot-dot extension is \"${dotDotExt}\"")
+  message("Dot-dot stem is \"${dotDotStem}\"")
+  message(".some.more extension is \"${someMoreExt}\"")
+  message(".some.more stem is \"${someMoreStem}\"")
+
+::
+
+  Full extension is ".ext1.ext2"
+  Full stem is "name"
+  Last extension is ".ext2"
+  Last stem is "name.ext1"
+  Dot extension is ""
+  Dot stem is "."
+  Dot-dot extension is ""
+  Dot-dot stem is ".."
+  .some.more extension is ".more"
+  .some.more stem is ".some"
+
+Relative part examples
+""""""""""""""""""""""
+
+.. code-block:: cmake
+
+  set(path "c:/a/b")
+  cmake_path(GET path RELATIVE_PART result)
+  message("Relative part is \"${result}\"")
+
+  set(path "c/d")
+  cmake_path(GET path RELATIVE_PART result)
+  message("Relative part is \"${result}\"")
+
+  set(path "/")
+  cmake_path(GET path RELATIVE_PART result)
+  message("Relative part is \"${result}\"")
+
+::
+
+  Relative part is "a/b"
+  Relative part is "c/d"
+  Relative part is ""
+
+Path traversal examples
+"""""""""""""""""""""""
+
+.. code-block:: cmake
+
+  set(path "c:/a/b")
+  cmake_path(GET path PARENT_PATH result)
+  message("Parent path is \"${result}\"")
+
+  set(path "c:/")
+  cmake_path(GET path PARENT_PATH result)
+  message("Parent path is \"${result}\"")
+
+::
+
+  Parent path is "c:/a"
+  Parent path is "c:/"
+
+
+Query
+^^^^^
+
+Each of the ``GET`` subcommands has a corresponding ``HAS_...``
+subcommand which can be used to discover whether a particular path
+component is present.  See `Path Structure And Terminology`_ for the
+meaning of each path component.
+
+.. _HAS_ROOT_NAME:
+.. _HAS_ROOT_DIRECTORY:
+.. _HAS_ROOT_PATH:
+.. _HAS_FILENAME:
+.. _HAS_EXTENSION:
+.. _HAS_STEM:
+.. _HAS_RELATIVE_PART:
+.. _HAS_PARENT_PATH:
+
+::
+
+  cmake_path(HAS_ROOT_NAME <path-var> <out-var>)
+  cmake_path(HAS_ROOT_DIRECTORY <path-var> <out-var>)
+  cmake_path(HAS_ROOT_PATH <path-var> <out-var>)
+  cmake_path(HAS_FILENAME <path-var> <out-var>)
+  cmake_path(HAS_EXTENSION <path-var> <out-var>)
+  cmake_path(HAS_STEM <path-var> <out-var>)
+  cmake_path(HAS_RELATIVE_PART <path-var> <out-var>)
+  cmake_path(HAS_PARENT_PATH <path-var> <out-var>)
+
+Each of the above follows the predictable pattern of setting ``<out-var>``
+to true if the path has the associated component, or false otherwise.
+Note the following special cases:
+
+* For ``HAS_ROOT_PATH``, a true result will only be returned if at least one
+  of ``root-name`` or ``root-directory`` is non-empty.
+
+* For ``HAS_PARENT_PATH``, the root directory is also considered to have a
+  parent, which will be itself.  The result is true except if the path
+  consists of just a :ref:`filename <FILENAME_DEF>`.
+
+.. _IS_ABSOLUTE:
+
+::
+
+  cmake_path(IS_ABSOLUTE <path-var> <out-var>)
+
+Sets ``<out-var>`` to true if ``<path-var>`` is absolute.  An absolute path
+is a path that unambiguously identifies the location of a file without
+reference to an additional starting location.  On Windows, this means the
+path must have both a ``root-name`` and a ``root-directory-separator`` to be
+considered absolute.  On other platforms, just a ``root-directory-separator``
+is sufficient.  Note that this means on Windows, ``IS_ABSOLUTE`` can be
+false while ``HAS_ROOT_DIRECTORY`` can be true.
+
+.. _IS_RELATIVE:
+
+::
+
+  cmake_path(IS_RELATIVE <path-var> <out-var>)
+
+This will store the opposite of ``IS_ABSOLUTE`` in ``<out-var>``.
+
+.. _IS_PREFIX:
+
+::
+
+  cmake_path(IS_PREFIX <path-var> <input> [NORMALIZE] <out-var>)
+
+Checks if ``<path-var>`` is the prefix of ``<input>``.
+
+When the ``NORMALIZE`` option is specified, ``<path-var>`` and ``<input>``
+are :ref:`normalized <Normalization>` before the check.
+
+.. code-block:: cmake
+
+  set(path "/a/b/c")
+  cmake_path(IS_PREFIX path "/a/b/c/d" result) # result = true
+  cmake_path(IS_PREFIX path "/a/b" result)     # result = false
+  cmake_path(IS_PREFIX path "/x/y/z" result)   # result = false
+
+  set(path "/a/b")
+  cmake_path(IS_PREFIX path "/a/c/../b" NORMALIZE result)   # result = true
+
+.. _COMPARE:
+
+::
+
+  cmake_path(COMPARE <input1> EQUAL <input2> <out-var>)
+  cmake_path(COMPARE <input1> NOT_EQUAL <input2> <out-var>)
+
+Compares the lexical representations of two paths provided as string literals.
+No normalization is performed on either path.  Equality is determined
+according to the following pseudo-code logic:
+
+::
+
+  if(NOT <input1>.root_name() STREQUAL <input2>.root_name())
+    return FALSE
+
+  if(<input1>.has_root_directory() XOR <input2>.has_root_directory())
+    return FALSE
+
+  Return FALSE if a relative portion of <input1> is not lexicographically
+  equal to the relative portion of <input2>. This comparison is performed path
+  component-wise. If all of the components compare equal, then return TRUE.
+
+.. note::
+  Unlike most other ``cmake_path()`` subcommands, the ``COMPARE`` subcommand
+  takes literal strings as input, not the names of variables.
+
+
+Modification
+^^^^^^^^^^^^
+
+.. _cmake_path-SET:
+
+::
+
+  cmake_path(SET <path-var> [NORMALIZE] <input>)
+
+Assign the ``<input>`` path to ``<path-var>``.  If ``<input>`` is a native
+path, it is converted into a cmake-style path with forward-slashes
+(``/``). On Windows, the long filename marker is taken into account.
+
+When the ``NORMALIZE`` option is specified, the path is :ref:`normalized
+<Normalization>` before the conversion.
+
+For example:
+
+.. code-block:: cmake
+
+  set(native_path "c:\\a\\b/..\\c")
+  cmake_path(SET path "${native_path}")
+  message("CMake path is \"${path}\"")
+
+  cmake_path(SET path NORMALIZE "${native_path}")
+  message("Normalized CMake path is \"${path}\"")
+
+Output::
+
+  CMake path is "c:/a/b/../c"
+  Normalized CMake path is "c:/a/c"
+
+.. _APPEND:
+
+::
+
+  cmake_path(APPEND <path-var> [<input>...] [OUTPUT_VARIABLE <out-var>])
+
+Append all the ``<input>`` arguments to the ``<path-var>`` using ``/`` as
+the ``directory-separator``.  Depending on the ``<input>``, the previous
+contents of ``<path-var>`` may be discarded.  For each ``<input>`` argument,
+the following algorithm (pseudo-code) applies:
+
+::
+
+  # <path> is the contents of <path-var>
+
+  if(<input>.is_absolute() OR
+     (<input>.has_root_name() AND
+      NOT <input>.root_name() STREQUAL <path>.root_name()))
+    replace <path> with <input>
+    return()
+  endif()
+
+  if(<input>.has_root_directory())
+    remove any root-directory and the entire relative path from <path>
+  elseif(<path>.has_filename() OR
+         (NOT <path-var>.has_root_directory() OR <path>.is_absolute()))
+    append directory-separator to <path>
+  endif()
+
+  append <input> omitting any root-name to <path>
+
+.. _APPEND_STRING:
+
+::
+
+  cmake_path(APPEND_STRING <path-var> [<input>...] [OUTPUT_VARIABLE <out-var>])
+
+Append all the ``<input>`` arguments to the ``<path-var>`` without adding any
+``directory-separator``.
+
+.. _REMOVE_FILENAME:
+
+::
+
+  cmake_path(REMOVE_FILENAME <path-var> [OUTPUT_VARIABLE <out-var>])
+
+Removes the :ref:`filename <FILENAME_DEF>` component (as returned by
+:ref:`GET ... FILENAME <GET_FILENAME>`) from ``<path-var>``.  After removal,
+any trailing ``directory-separator`` is left alone, if present.
+
+If ``OUTPUT_VARIABLE`` is not given, then after this function returns,
+`HAS_FILENAME`_ returns false for ``<path-var>``.
+
+For example:
+
+.. code-block:: cmake
+
+  set(path "/a/b")
+  cmake_path(REMOVE_FILENAME path)
+  message("First path is \"${path}\"")
+
+  # filename is now already empty, the following removes nothing
+  cmake_path(REMOVE_FILENAME path)
+  message("Second path is \"${result}\"")
+
+Output::
+
+  First path is "/a/"
+  Second path is "/a/"
+
+.. _REPLACE_FILENAME:
+
+::
+
+  cmake_path(REPLACE_FILENAME <path-var> <input> [OUTPUT_VARIABLE <out-var>])
+
+Replaces the :ref:`filename <FILENAME_DEF>` component from ``<path-var>``
+with ``<input>``.  If ``<path-var>`` has no filename component (i.e.
+`HAS_FILENAME`_ returns false), the path is unchanged.  The operation is
+equivalent to the following:
+
+.. code-block:: cmake
+
+  cmake_path(HAS_FILENAME path has_filename)
+  if(has_filename)
+    cmake_path(REMOVE_FILENAME path)
+    cmake_path(APPEND path input);
+  endif()
+
+.. _REMOVE_EXTENSION:
+
+::
+
+  cmake_path(REMOVE_EXTENSION <path-var> [LAST_ONLY]
+                                         [OUTPUT_VARIABLE <out-var>])
+
+Removes the :ref:`extension <EXTENSION_DEF>`, if any, from ``<path-var>``.
+
+.. _REPLACE_EXTENSION:
+
+::
+
+  cmake_path(REPLACE_EXTENSION <path-var> [LAST_ONLY] <input>
+                               [OUTPUT_VARIABLE <out-var>])
+
+Replaces the :ref:`extension <EXTENSION_DEF>` with ``<input>``.  Its effect
+is equivalent to the following:
+
+.. code-block:: cmake
+
+  cmake_path(REMOVE_EXTENSION path)
+  if(NOT "input" MATCHES "^\\.")
+    cmake_path(APPEND_STRING path ".")
+  endif()
+  cmake_path(APPEND_STRING path "input")
+
+
+Generation
+^^^^^^^^^^
+
+.. _NORMAL_PATH:
+
+::
+
+  cmake_path(NORMAL_PATH <path-var> [OUTPUT_VARIABLE <out-var>])
+
+Normalize ``<path-var>`` according the steps described in :ref:`Normalization`.
+
+.. _cmake_path-RELATIVE_PATH:
+.. _RELATIVE_PATH:
+
+::
+
+  cmake_path(RELATIVE_PATH <path-var> [BASE_DIRECTORY <input>]
+                                      [OUTPUT_VARIABLE <out-var>])
+
+Modifies ``<path-var>`` to make it relative to the ``BASE_DIRECTORY`` argument.
+If ``BASE_DIRECTORY`` is not specified, the default base directory will be
+:variable:`CMAKE_CURRENT_SOURCE_DIR`.
+
+For reference, the algorithm used to compute the relative path is the same
+as that used by C++
+`std::filesystem::path::lexically_relative
+<https://en.cppreference.com/w/cpp/filesystem/path/lexically_normal>`_.
+
+.. _ABSOLUTE_PATH:
+
+::
+
+  cmake_path(ABSOLUTE_PATH <path-var> [BASE_DIRECTORY <input>] [NORMALIZE]
+                                      [OUTPUT_VARIABLE <out-var>])
+
+If ``<path-var>`` is a relative path (`IS_RELATIVE`_ is true), it is evaluated
+relative to the given base directory specified by ``BASE_DIRECTORY`` option.
+If ``BASE_DIRECTORY`` is not specified, the default base directory will be
+:variable:`CMAKE_CURRENT_SOURCE_DIR`.
+
+When the ``NORMALIZE`` option is specified, the path is :ref:`normalized
+<Normalization>` after the path computation.
+
+Because ``cmake_path()`` does not access the filesystem, symbolic links are
+not resolved and any leading tilde is not expanded.  To compute a real path
+with symbolic links resolved and leading tildes expanded, use the
+:command:`file(REAL_PATH)` command instead.
+
+Native Conversion
+^^^^^^^^^^^^^^^^^
+
+For commands in this section, *native* refers to the host platform, not the
+target platform when cross-compiling.
+
+.. _cmake_path-NATIVE_PATH:
+.. _NATIVE_PATH:
+
+::
+
+  cmake_path(NATIVE_PATH <path-var> [NORMALIZE] <out-var>)
+
+Converts a cmake-style ``<path-var>`` into a native path with
+platform-specific slashes (``\`` on Windows hosts and ``/`` elsewhere).
+
+When the ``NORMALIZE`` option is specified, the path is :ref:`normalized
+<Normalization>` before the conversion.
+
+.. _CONVERT:
+.. _cmake_path-TO_CMAKE_PATH_LIST:
+.. _TO_CMAKE_PATH_LIST:
+
+::
+
+  cmake_path(CONVERT <input> TO_CMAKE_PATH_LIST <out-var> [NORMALIZE])
+
+Converts a native ``<input>`` path into a cmake-style path with forward
+slashes (``/``).  On Windows hosts, the long filename marker is taken into
+account.  The input can be a single path or a system search path like
+``$ENV{PATH}``.  A search path will be converted to a cmake-style list
+separated by ``;`` characters (on non-Windows platforms, this essentially
+means ``:`` separators are replaced with ``;``).  The result of the
+conversion is stored in the ``<out-var>`` variable.
+
+When the ``NORMALIZE`` option is specified, the path is :ref:`normalized
+<Normalization>` before the conversion.
+
+.. note::
+  Unlike most other ``cmake_path()`` subcommands, the ``CONVERT`` subcommand
+  takes a literal string as input, not the name of a variable.
+
+.. _cmake_path-TO_NATIVE_PATH_LIST:
+.. _TO_NATIVE_PATH_LIST:
+
+::
+
+  cmake_path(CONVERT <input> TO_NATIVE_PATH_LIST <out-var> [NORMALIZE])
+
+Converts a cmake-style ``<input>`` path into a native path with
+platform-specific slashes (``\`` on Windows hosts and ``/`` elsewhere).
+The input can be a single path or a cmake-style list.  A list will be
+converted into a native search path (``;``-separated on Windows,
+``:``-separated on other platforms).  The result of the conversion is
+stored in the ``<out-var>`` variable.
+
+When the ``NORMALIZE`` option is specified, the path is :ref:`normalized
+<Normalization>` before the conversion.
+
+.. note::
+  Unlike most other ``cmake_path()`` subcommands, the ``CONVERT`` subcommand
+  takes a literal string as input, not the name of a variable.
+
+For example:
+
+.. code-block:: cmake
+
+  set(paths "/a/b/c" "/x/y/z")
+  cmake_path(CONVERT "${paths}" TO_NATIVE_PATH_LIST native_paths)
+  message("Native path list is \"${native_paths}\"")
+
+Output on Windows::
+
+  Native path list is "\a\b\c;\x\y\z"
+
+Output on all other platforms::
+
+  Native path list is "/a/b/c:/x/y/z"
+
+Hashing
+^^^^^^^
+
+.. _HASH:
+
+::
+
+    cmake_path(HASH <path-var> <out-var>)
+
+Compute a hash value of ``<path-var>`` such that for two paths ``p1`` and
+``p2`` that compare equal (:ref:`COMPARE ... EQUAL <COMPARE>`), the hash
+value of ``p1`` is equal to the hash value of ``p2``.  The path is always
+:ref:`normalized <Normalization>` before the hash is computed.
diff --git a/share/cmake-3.22/Help/command/cmake_policy.rst b/share/cmake-3.22/Help/command/cmake_policy.rst
new file mode 100644
index 0000000..94060d9
--- /dev/null
+++ b/share/cmake-3.22/Help/command/cmake_policy.rst
@@ -0,0 +1,111 @@
+cmake_policy
+------------
+
+Manage CMake Policy settings.  See the :manual:`cmake-policies(7)`
+manual for defined policies.
+
+As CMake evolves it is sometimes necessary to change existing behavior
+in order to fix bugs or improve implementations of existing features.
+The CMake Policy mechanism is designed to help keep existing projects
+building as new versions of CMake introduce changes in behavior.  Each
+new policy (behavioral change) is given an identifier of the form
+``CMP<NNNN>`` where ``<NNNN>`` is an integer index.  Documentation
+associated with each policy describes the ``OLD`` and ``NEW`` behavior
+and the reason the policy was introduced.  Projects may set each policy
+to select the desired behavior.  When CMake needs to know which behavior
+to use it checks for a setting specified by the project.  If no
+setting is available the ``OLD`` behavior is assumed and a warning is
+produced requesting that the policy be set.
+
+Setting Policies by CMake Version
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The ``cmake_policy`` command is used to set policies to ``OLD`` or ``NEW``
+behavior.  While setting policies individually is supported, we
+encourage projects to set policies based on CMake versions:
+
+.. code-block:: cmake
+
+  cmake_policy(VERSION <min>[...<max>])
+
+.. versionadded:: 3.12
+  The optional ``<max>`` version.
+
+``<min>`` and the optional ``<max>`` are each CMake versions of the form
+``major.minor[.patch[.tweak]]``, and the ``...`` is literal.  The ``<min>``
+version must be at least ``2.4`` and at most the running version of CMake.
+The ``<max>`` version, if specified, must be at least the ``<min>`` version
+but may exceed the running version of CMake.  If the running version of
+CMake is older than 3.12, the extra ``...`` dots will be seen as version
+component separators, resulting in the ``...<max>`` part being ignored and
+preserving the pre-3.12 behavior of basing policies on ``<min>``.
+
+This specifies that the current CMake code is written for the given
+range of CMake versions.  All policies known to the running version of CMake
+and introduced in the ``<min>`` (or ``<max>``, if specified) version
+or earlier will be set to use ``NEW`` behavior.  All policies
+introduced in later versions will be unset (unless the
+:variable:`CMAKE_POLICY_DEFAULT_CMP<NNNN>` variable sets a default).
+This effectively requests behavior preferred as of a given CMake
+version and tells newer CMake versions to warn about their new policies.
+
+Note that the :command:`cmake_minimum_required(VERSION)`
+command implicitly calls ``cmake_policy(VERSION)`` too.
+
+Setting Policies Explicitly
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. code-block:: cmake
+
+  cmake_policy(SET CMP<NNNN> NEW)
+  cmake_policy(SET CMP<NNNN> OLD)
+
+Tell CMake to use the ``OLD`` or ``NEW`` behavior for a given policy.
+Projects depending on the old behavior of a given policy may silence a
+policy warning by setting the policy state to ``OLD``.  Alternatively
+one may fix the project to work with the new behavior and set the
+policy state to ``NEW``.
+
+.. include:: ../policy/DEPRECATED.txt
+
+Checking Policy Settings
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. code-block:: cmake
+
+  cmake_policy(GET CMP<NNNN> <variable>)
+
+Check whether a given policy is set to ``OLD`` or ``NEW`` behavior.
+The output ``<variable>`` value will be ``OLD`` or ``NEW`` if the
+policy is set, and empty otherwise.
+
+CMake Policy Stack
+^^^^^^^^^^^^^^^^^^
+
+CMake keeps policy settings on a stack, so changes made by the
+``cmake_policy`` command affect only the top of the stack.  A new entry on
+the policy stack is managed automatically for each subdirectory to
+protect its parents and siblings.  CMake also manages a new entry for
+scripts loaded by :command:`include` and :command:`find_package` commands
+except when invoked with the ``NO_POLICY_SCOPE`` option
+(see also policy :policy:`CMP0011`).
+The ``cmake_policy`` command provides an interface to manage custom
+entries on the policy stack:
+
+.. code-block:: cmake
+
+  cmake_policy(PUSH)
+  cmake_policy(POP)
+
+Each ``PUSH`` must have a matching ``POP`` to erase any changes.
+This is useful to make temporary changes to policy settings.
+Calls to the :command:`cmake_minimum_required(VERSION)`,
+``cmake_policy(VERSION)``, or ``cmake_policy(SET)`` commands
+influence only the current top of the policy stack.
+
+Commands created by the :command:`function` and :command:`macro`
+commands record policy settings when they are created and
+use the pre-record policies when they are invoked.  If the function or
+macro implementation sets policies, the changes automatically
+propagate up through callers until they reach the closest nested
+policy stack entry.
diff --git a/share/cmake-3.22/Help/command/configure_file.rst b/share/cmake-3.22/Help/command/configure_file.rst
new file mode 100644
index 0000000..1d81423
--- /dev/null
+++ b/share/cmake-3.22/Help/command/configure_file.rst
@@ -0,0 +1,184 @@
+configure_file
+--------------
+
+Copy a file to another location and modify its contents.
+
+.. code-block:: cmake
+
+  configure_file(<input> <output>
+                 [NO_SOURCE_PERMISSIONS | USE_SOURCE_PERMISSIONS |
+                  FILE_PERMISSIONS <permissions>...]
+                 [COPYONLY] [ESCAPE_QUOTES] [@ONLY]
+                 [NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])
+
+Copies an ``<input>`` file to an ``<output>`` file and substitutes
+variable values referenced as ``@VAR@`` or ``${VAR}`` in the input
+file content.  Each variable reference will be replaced with the
+current value of the variable, or the empty string if the variable
+is not defined.  Furthermore, input lines of the form
+
+.. code-block:: c
+
+  #cmakedefine VAR ...
+
+will be replaced with either
+
+.. code-block:: c
+
+  #define VAR ...
+
+or
+
+.. code-block:: c
+
+  /* #undef VAR */
+
+depending on whether ``VAR`` is set in CMake to any value not considered
+a false constant by the :command:`if` command.  The "..." content on the
+line after the variable name, if any, is processed as above.
+
+Unlike lines of the form ``#cmakedefine VAR ...``, in lines of the form
+``#cmakedefine01 VAR``, ``VAR`` itself will expand to ``VAR 0`` or ``VAR 1``
+rather than being assigned the value ``...``. Therefore, input lines of the form
+
+.. code-block:: c
+
+  #cmakedefine01 VAR
+
+will be replaced with either
+
+.. code-block:: c
+
+  #define VAR 0
+
+or
+
+.. code-block:: c
+
+  #define VAR 1
+
+Input lines of the form ``#cmakedefine01 VAR ...`` will expand
+as ``#cmakedefine01 VAR ... 0`` or ``#cmakedefine01 VAR ... 0``,
+which may lead to undefined behavior.
+
+.. versionadded:: 3.10
+  The result lines (with the exception of the ``#undef`` comments) can be
+  indented using spaces and/or tabs between the ``#`` character
+  and the ``cmakedefine`` or ``cmakedefine01`` words. This whitespace
+  indentation will be preserved in the output lines:
+
+  .. code-block:: c
+
+    #  cmakedefine VAR
+    #  cmakedefine01 VAR
+
+  will be replaced, if ``VAR`` is defined, with
+
+  .. code-block:: c
+
+    #  define VAR
+    #  define VAR 1
+
+If the input file is modified the build system will re-run CMake to
+re-configure the file and generate the build system again.
+The generated file is modified and its timestamp updated on subsequent
+cmake runs only if its content is changed.
+
+The arguments are:
+
+``<input>``
+  Path to the input file.  A relative path is treated with respect to
+  the value of :variable:`CMAKE_CURRENT_SOURCE_DIR`.  The input path
+  must be a file, not a directory.
+
+``<output>``
+  Path to the output file or directory.  A relative path is treated
+  with respect to the value of :variable:`CMAKE_CURRENT_BINARY_DIR`.
+  If the path names an existing directory the output file is placed
+  in that directory with the same file name as the input file.
+  If the path contains non-existent directories, they are created.
+
+``NO_SOURCE_PERMISSIONS``
+  .. versionadded:: 3.19
+
+  Do not transfer the permissions of the input file to the output file.
+  The copied file permissions default to the standard 644 value
+  (-rw-r--r--).
+
+``USE_SOURCE_PERMISSIONS``
+  .. versionadded:: 3.20
+
+  Transfer the permissions of the input file to the output file.
+  This is already the default behavior if none of the three permissions-related
+  keywords are given (``NO_SOURCE_PERMISSIONS``, ``USE_SOURCE_PERMISSIONS``
+  or ``FILE_PERMISSIONS``).  The ``USE_SOURCE_PERMISSIONS`` keyword mostly
+  serves as a way of making the intended behavior clearer at the call site.
+
+``FILE_PERMISSIONS <permissions>...``
+  .. versionadded:: 3.20
+
+  Ignore the input file's permissions and use the specified ``<permissions>``
+  for the output file instead.
+
+``COPYONLY``
+  Copy the file without replacing any variable references or other
+  content.  This option may not be used with ``NEWLINE_STYLE``.
+
+``ESCAPE_QUOTES``
+  Escape any substituted quotes with backslashes (C-style).
+
+``@ONLY``
+  Restrict variable replacement to references of the form ``@VAR@``.
+  This is useful for configuring scripts that use ``${VAR}`` syntax.
+
+``NEWLINE_STYLE <style>``
+  Specify the newline style for the output file.  Specify
+  ``UNIX`` or ``LF`` for ``\n`` newlines, or specify
+  ``DOS``, ``WIN32``, or ``CRLF`` for ``\r\n`` newlines.
+  This option may not be used with ``COPYONLY``.
+
+Example
+^^^^^^^
+
+Consider a source tree containing a ``foo.h.in`` file:
+
+.. code-block:: c
+
+  #cmakedefine FOO_ENABLE
+  #cmakedefine FOO_STRING "@FOO_STRING@"
+
+An adjacent ``CMakeLists.txt`` may use ``configure_file`` to
+configure the header:
+
+.. code-block:: cmake
+
+  option(FOO_ENABLE "Enable Foo" ON)
+  if(FOO_ENABLE)
+    set(FOO_STRING "foo")
+  endif()
+  configure_file(foo.h.in foo.h @ONLY)
+
+This creates a ``foo.h`` in the build directory corresponding to
+this source directory.  If the ``FOO_ENABLE`` option is on, the
+configured file will contain:
+
+.. code-block:: c
+
+  #define FOO_ENABLE
+  #define FOO_STRING "foo"
+
+Otherwise it will contain:
+
+.. code-block:: c
+
+  /* #undef FOO_ENABLE */
+  /* #undef FOO_STRING */
+
+One may then use the :command:`include_directories` command to
+specify the output directory as an include directory:
+
+.. code-block:: cmake
+
+  include_directories(${CMAKE_CURRENT_BINARY_DIR})
+
+so that sources may include the header as ``#include <foo.h>``.
diff --git a/share/cmake-3.22/Help/command/continue.rst b/share/cmake-3.22/Help/command/continue.rst
new file mode 100644
index 0000000..f62802e
--- /dev/null
+++ b/share/cmake-3.22/Help/command/continue.rst
@@ -0,0 +1,16 @@
+continue
+--------
+
+.. versionadded:: 3.2
+
+Continue to the top of enclosing foreach or while loop.
+
+.. code-block:: cmake
+
+  continue()
+
+The ``continue`` command allows a cmake script to abort the rest of a block
+in a :command:`foreach` or :command:`while` loop, and start at the top of
+the next iteration.
+
+See also the :command:`break` command.
diff --git a/share/cmake-3.18/Help/command/create_test_sourcelist.rst b/share/cmake-3.22/Help/command/create_test_sourcelist.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/create_test_sourcelist.rst
rename to share/cmake-3.22/Help/command/create_test_sourcelist.rst
diff --git a/share/cmake-3.22/Help/command/ctest_build.rst b/share/cmake-3.22/Help/command/ctest_build.rst
new file mode 100644
index 0000000..e05df1a
--- /dev/null
+++ b/share/cmake-3.22/Help/command/ctest_build.rst
@@ -0,0 +1,93 @@
+ctest_build
+-----------
+
+Perform the :ref:`CTest Build Step` as a :ref:`Dashboard Client`.
+
+::
+
+  ctest_build([BUILD <build-dir>] [APPEND]
+              [CONFIGURATION <config>]
+              [PARALLEL_LEVEL <parallel>]
+              [FLAGS <flags>]
+              [PROJECT_NAME <project-name>]
+              [TARGET <target-name>]
+              [NUMBER_ERRORS <num-err-var>]
+              [NUMBER_WARNINGS <num-warn-var>]
+              [RETURN_VALUE <result-var>]
+              [CAPTURE_CMAKE_ERROR <result-var>]
+              )
+
+Build the project and store results in ``Build.xml``
+for submission with the :command:`ctest_submit` command.
+
+The :variable:`CTEST_BUILD_COMMAND` variable may be set to explicitly
+specify the build command line.  Otherwise the build command line is
+computed automatically based on the options given.
+
+The options are:
+
+``BUILD <build-dir>``
+  Specify the top-level build directory.  If not given, the
+  :variable:`CTEST_BINARY_DIRECTORY` variable is used.
+
+``APPEND``
+  Mark ``Build.xml`` for append to results previously submitted to a
+  dashboard server since the last :command:`ctest_start` call.
+  Append semantics are defined by the dashboard server in use.
+  This does *not* cause results to be appended to a ``.xml`` file
+  produced by a previous call to this command.
+
+``CONFIGURATION <config>``
+  Specify the build configuration (e.g. ``Debug``).  If not
+  specified the ``CTEST_BUILD_CONFIGURATION`` variable will be checked.
+  Otherwise the ``-C <cfg>`` option given to the :manual:`ctest(1)`
+  command will be used, if any.
+
+``PARALLEL_LEVEL <parallel>``
+  .. versionadded:: 3.21
+
+  Specify the parallel level of the underlying build system.  If not
+  specified, the :envvar:`CMAKE_BUILD_PARALLEL_LEVEL` environment
+  variable will be checked.
+
+``FLAGS <flags>``
+  Pass additional arguments to the underlying build command.
+  If not specified the ``CTEST_BUILD_FLAGS`` variable will be checked.
+  This can, e.g., be used to trigger a parallel build using the
+  ``-j`` option of make. See the :module:`ProcessorCount` module
+  for an example.
+
+``PROJECT_NAME <project-name>``
+  Ignored since CMake 3.0.
+
+  .. versionchanged:: 3.14
+    This value is no longer required.
+
+``TARGET <target-name>``
+  Specify the name of a target to build.  If not specified the
+  ``CTEST_BUILD_TARGET`` variable will be checked.  Otherwise the
+  default target will be built.  This is the "all" target
+  (called ``ALL_BUILD`` in :ref:`Visual Studio Generators`).
+
+``NUMBER_ERRORS <num-err-var>``
+  Store the number of build errors detected in the given variable.
+
+``NUMBER_WARNINGS <num-warn-var>``
+  Store the number of build warnings detected in the given variable.
+
+``RETURN_VALUE <result-var>``
+  Store the return value of the native build tool in the given variable.
+
+``CAPTURE_CMAKE_ERROR <result-var>``
+  .. versionadded:: 3.7
+
+  Store in the ``<result-var>`` variable -1 if there are any errors running
+  the command and prevent ctest from returning non-zero if an error occurs.
+
+``QUIET``
+  .. versionadded:: 3.3
+
+  Suppress any CTest-specific non-error output that would have been
+  printed to the console otherwise.  The summary of warnings / errors,
+  as well as the output from the native build tool is unaffected by
+  this option.
diff --git a/share/cmake-3.22/Help/command/ctest_configure.rst b/share/cmake-3.22/Help/command/ctest_configure.rst
new file mode 100644
index 0000000..95712aa
--- /dev/null
+++ b/share/cmake-3.22/Help/command/ctest_configure.rst
@@ -0,0 +1,50 @@
+ctest_configure
+---------------
+
+Perform the :ref:`CTest Configure Step` as a :ref:`Dashboard Client`.
+
+::
+
+  ctest_configure([BUILD <build-dir>] [SOURCE <source-dir>] [APPEND]
+                  [OPTIONS <options>] [RETURN_VALUE <result-var>] [QUIET]
+                  [CAPTURE_CMAKE_ERROR <result-var>])
+
+Configure the project build tree and record results in ``Configure.xml``
+for submission with the :command:`ctest_submit` command.
+
+The options are:
+
+``BUILD <build-dir>``
+  Specify the top-level build directory.  If not given, the
+  :variable:`CTEST_BINARY_DIRECTORY` variable is used.
+
+``SOURCE <source-dir>``
+  Specify the source directory.  If not given, the
+  :variable:`CTEST_SOURCE_DIRECTORY` variable is used.
+
+``APPEND``
+  Mark ``Configure.xml`` for append to results previously submitted to a
+  dashboard server since the last :command:`ctest_start` call.
+  Append semantics are defined by the dashboard server in use.
+  This does *not* cause results to be appended to a ``.xml`` file
+  produced by a previous call to this command.
+
+``OPTIONS <options>``
+  Specify command-line arguments to pass to the configuration tool.
+
+``RETURN_VALUE <result-var>``
+  Store in the ``<result-var>`` variable the return value of the native
+  configuration tool.
+
+``CAPTURE_CMAKE_ERROR <result-var>``
+  .. versionadded:: 3.7
+
+  Store in the ``<result-var>`` variable -1 if there are any errors running
+  the command and prevent ctest from returning non-zero if an error occurs.
+
+``QUIET``
+  .. versionadded:: 3.3
+
+  Suppress any CTest-specific non-error messages that would have
+  otherwise been printed to the console.  Output from the underlying
+  configure command is not affected.
diff --git a/share/cmake-3.22/Help/command/ctest_coverage.rst b/share/cmake-3.22/Help/command/ctest_coverage.rst
new file mode 100644
index 0000000..a6c643b
--- /dev/null
+++ b/share/cmake-3.22/Help/command/ctest_coverage.rst
@@ -0,0 +1,50 @@
+ctest_coverage
+--------------
+
+Perform the :ref:`CTest Coverage Step` as a :ref:`Dashboard Client`.
+
+::
+
+  ctest_coverage([BUILD <build-dir>] [APPEND]
+                 [LABELS <label>...]
+                 [RETURN_VALUE <result-var>]
+                 [CAPTURE_CMAKE_ERROR <result-var>]
+                 [QUIET]
+                 )
+
+Collect coverage tool results and stores them in ``Coverage.xml``
+for submission with the :command:`ctest_submit` command.
+
+The options are:
+
+``BUILD <build-dir>``
+  Specify the top-level build directory.  If not given, the
+  :variable:`CTEST_BINARY_DIRECTORY` variable is used.
+
+``APPEND``
+  Mark ``Coverage.xml`` for append to results previously submitted to a
+  dashboard server since the last :command:`ctest_start` call.
+  Append semantics are defined by the dashboard server in use.
+  This does *not* cause results to be appended to a ``.xml`` file
+  produced by a previous call to this command.
+
+``LABELS``
+  Filter the coverage report to include only source files labeled
+  with at least one of the labels specified.
+
+``RETURN_VALUE <result-var>``
+  Store in the ``<result-var>`` variable ``0`` if coverage tools
+  ran without error and non-zero otherwise.
+
+``CAPTURE_CMAKE_ERROR <result-var>``
+  .. versionadded:: 3.7
+
+  Store in the ``<result-var>`` variable -1 if there are any errors running
+  the command and prevent ctest from returning non-zero if an error occurs.
+
+``QUIET``
+  .. versionadded:: 3.3
+
+  Suppress any CTest-specific non-error output that would have been
+  printed to the console otherwise.  The summary indicating how many
+  lines of code were covered is unaffected by this option.
diff --git a/share/cmake-3.18/Help/command/ctest_empty_binary_directory.rst b/share/cmake-3.22/Help/command/ctest_empty_binary_directory.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/ctest_empty_binary_directory.rst
rename to share/cmake-3.22/Help/command/ctest_empty_binary_directory.rst
diff --git a/share/cmake-3.22/Help/command/ctest_memcheck.rst b/share/cmake-3.22/Help/command/ctest_memcheck.rst
new file mode 100644
index 0000000..8b79077
--- /dev/null
+++ b/share/cmake-3.22/Help/command/ctest_memcheck.rst
@@ -0,0 +1,45 @@
+ctest_memcheck
+--------------
+
+Perform the :ref:`CTest MemCheck Step` as a :ref:`Dashboard Client`.
+
+::
+
+  ctest_memcheck([BUILD <build-dir>] [APPEND]
+                 [START <start-number>]
+                 [END <end-number>]
+                 [STRIDE <stride-number>]
+                 [EXCLUDE <exclude-regex>]
+                 [INCLUDE <include-regex>]
+                 [EXCLUDE_LABEL <label-exclude-regex>]
+                 [INCLUDE_LABEL <label-include-regex>]
+                 [EXCLUDE_FIXTURE <regex>]
+                 [EXCLUDE_FIXTURE_SETUP <regex>]
+                 [EXCLUDE_FIXTURE_CLEANUP <regex>]
+                 [PARALLEL_LEVEL <level>]
+                 [RESOURCE_SPEC_FILE <file>]
+                 [TEST_LOAD <threshold>]
+                 [SCHEDULE_RANDOM <ON|OFF>]
+                 [STOP_ON_FAILURE]
+                 [STOP_TIME <time-of-day>]
+                 [RETURN_VALUE <result-var>]
+                 [CAPTURE_CMAKE_ERROR <result-var>]
+                 [REPEAT <mode>:<n>]
+                 [OUTPUT_JUNIT <file>]
+                 [DEFECT_COUNT <defect-count-var>]
+                 [QUIET]
+                 )
+
+
+Run tests with a dynamic analysis tool and store results in
+``MemCheck.xml`` for submission with the :command:`ctest_submit`
+command.
+
+Most options are the same as those for the :command:`ctest_test` command.
+
+The options unique to this command are:
+
+``DEFECT_COUNT <defect-count-var>``
+  .. versionadded:: 3.8
+
+  Store in the ``<defect-count-var>`` the number of defects found.
diff --git a/share/cmake-3.18/Help/command/ctest_read_custom_files.rst b/share/cmake-3.22/Help/command/ctest_read_custom_files.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/ctest_read_custom_files.rst
rename to share/cmake-3.22/Help/command/ctest_read_custom_files.rst
diff --git a/share/cmake-3.18/Help/command/ctest_run_script.rst b/share/cmake-3.22/Help/command/ctest_run_script.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/ctest_run_script.rst
rename to share/cmake-3.22/Help/command/ctest_run_script.rst
diff --git a/share/cmake-3.18/Help/command/ctest_sleep.rst b/share/cmake-3.22/Help/command/ctest_sleep.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/ctest_sleep.rst
rename to share/cmake-3.22/Help/command/ctest_sleep.rst
diff --git a/share/cmake-3.22/Help/command/ctest_start.rst b/share/cmake-3.22/Help/command/ctest_start.rst
new file mode 100644
index 0000000..c0f3c6d
--- /dev/null
+++ b/share/cmake-3.22/Help/command/ctest_start.rst
@@ -0,0 +1,88 @@
+ctest_start
+-----------
+
+Starts the testing for a given model
+
+::
+
+  ctest_start(<model> [<source> [<binary>]] [GROUP <group>] [QUIET])
+
+  ctest_start([<model> [<source> [<binary>]]] [GROUP <group>] APPEND [QUIET])
+
+Starts the testing for a given model.  The command should be called
+after the binary directory is initialized.
+
+The parameters are as follows:
+
+``<model>``
+  Set the dashboard model. Must be one of ``Experimental``, ``Continuous``, or
+  ``Nightly``. This parameter is required unless ``APPEND`` is specified.
+
+``<source>``
+  Set the source directory. If not specified, the value of
+  :variable:`CTEST_SOURCE_DIRECTORY` is used instead.
+
+``<binary>``
+  Set the binary directory. If not specified, the value of
+  :variable:`CTEST_BINARY_DIRECTORY` is used instead.
+
+``GROUP <group>``
+  If ``GROUP`` is used, the submissions will go to the specified group on the
+  CDash server. If no ``GROUP`` is specified, the name of the model is used by
+  default.
+
+  .. versionchanged:: 3.16
+    This replaces the deprecated option ``TRACK``. Despite the name
+    change its behavior is unchanged.
+
+``APPEND``
+  If ``APPEND`` is used, the existing ``TAG`` is used rather than creating a new
+  one based on the current time stamp. If you use ``APPEND``, you can omit the
+  ``<model>`` and ``GROUP <group>`` parameters, because they will be read from
+  the generated ``TAG`` file. For example:
+
+  .. code-block:: cmake
+
+    ctest_start(Experimental GROUP GroupExperimental)
+
+  Later, in another ``ctest -S`` script:
+
+  .. code-block:: cmake
+
+    ctest_start(APPEND)
+
+  When the second script runs ``ctest_start(APPEND)``, it will read the
+  ``Experimental`` model and ``GroupExperimental`` group from the ``TAG`` file
+  generated by the first ``ctest_start()`` command. Please note that if you
+  call ``ctest_start(APPEND)`` and specify a different model or group than
+  in the first ``ctest_start()`` command, a warning will be issued, and the
+  new model and group will be used.
+
+``QUIET``
+  .. versionadded:: 3.3
+
+  If ``QUIET`` is used, CTest will suppress any non-error messages that it
+  otherwise would have printed to the console.
+
+The parameters for ``ctest_start()`` can be issued in any order, with the
+exception that ``<model>``, ``<source>``, and ``<binary>`` have to appear
+in that order with respect to each other. The following are all valid and
+equivalent:
+
+.. code-block:: cmake
+
+  ctest_start(Experimental path/to/source path/to/binary GROUP SomeGroup QUIET APPEND)
+
+  ctest_start(GROUP SomeGroup Experimental QUIET path/to/source APPEND path/to/binary)
+
+  ctest_start(APPEND QUIET Experimental path/to/source GROUP SomeGroup path/to/binary)
+
+However, for the sake of readability, it is recommended that you order your
+parameters in the order listed at the top of this page.
+
+If the :variable:`CTEST_CHECKOUT_COMMAND` variable (or the
+:variable:`CTEST_CVS_CHECKOUT` variable) is set, its content is treated as
+command-line.  The command is invoked with the current working directory set
+to the parent of the source directory, even if the source directory already
+exists.  This can be used to create the source tree from a version control
+repository.
diff --git a/share/cmake-3.22/Help/command/ctest_submit.rst b/share/cmake-3.22/Help/command/ctest_submit.rst
new file mode 100644
index 0000000..d661825
--- /dev/null
+++ b/share/cmake-3.22/Help/command/ctest_submit.rst
@@ -0,0 +1,131 @@
+ctest_submit
+------------
+
+Perform the :ref:`CTest Submit Step` as a :ref:`Dashboard Client`.
+
+::
+
+  ctest_submit([PARTS <part>...] [FILES <file>...]
+               [SUBMIT_URL <url>]
+               [BUILD_ID <result-var>]
+               [HTTPHEADER <header>]
+               [RETRY_COUNT <count>]
+               [RETRY_DELAY <delay>]
+               [RETURN_VALUE <result-var>]
+               [CAPTURE_CMAKE_ERROR <result-var>]
+               [QUIET]
+               )
+
+Submit results to a dashboard server.
+By default all available parts are submitted.
+
+The options are:
+
+``PARTS <part>...``
+  Specify a subset of parts to submit.  Valid part names are::
+
+    Start      = nothing
+    Update     = ctest_update results, in Update.xml
+    Configure  = ctest_configure results, in Configure.xml
+    Build      = ctest_build results, in Build.xml
+    Test       = ctest_test results, in Test.xml
+    Coverage   = ctest_coverage results, in Coverage.xml
+    MemCheck   = ctest_memcheck results, in DynamicAnalysis.xml and
+                 DynamicAnalysis-Test.xml
+    Notes      = Files listed by CTEST_NOTES_FILES, in Notes.xml
+    ExtraFiles = Files listed by CTEST_EXTRA_SUBMIT_FILES
+    Upload     = Files prepared for upload by ctest_upload(), in Upload.xml
+    Submit     = nothing
+    Done       = Build is complete, in Done.xml
+
+``FILES <file>...``
+  Specify an explicit list of specific files to be submitted.
+  Each individual file must exist at the time of the call.
+
+``SUBMIT_URL <url>``
+  .. versionadded:: 3.14
+
+  The ``http`` or ``https`` URL of the dashboard server to send the submission
+  to.  If not given, the :variable:`CTEST_SUBMIT_URL` variable is used.
+
+``BUILD_ID <result-var>``
+  .. versionadded:: 3.15
+
+  Store in the ``<result-var>`` variable the ID assigned to this build by
+  CDash.
+
+``HTTPHEADER <HTTP-header>``
+  .. versionadded:: 3.9
+
+  Specify HTTP header to be included in the request to CDash during submission.
+  For example, CDash can be configured to only accept submissions from
+  authenticated clients. In this case, you should provide a bearer token in your
+  header:
+
+  .. code-block:: cmake
+
+    ctest_submit(HTTPHEADER "Authorization: Bearer <auth-token>")
+
+  This suboption can be repeated several times for multiple headers.
+
+``RETRY_COUNT <count>``
+  Specify how many times to retry a timed-out submission.
+
+``RETRY_DELAY <delay>``
+  Specify how long (in seconds) to wait after a timed-out submission
+  before attempting to re-submit.
+
+``RETURN_VALUE <result-var>``
+  Store in the ``<result-var>`` variable ``0`` for success and
+  non-zero on failure.
+
+``CAPTURE_CMAKE_ERROR <result-var>``
+  .. versionadded:: 3.13
+
+  Store in the ``<result-var>`` variable -1 if there are any errors running
+  the command and prevent ctest from returning non-zero if an error occurs.
+
+``QUIET``
+  .. versionadded:: 3.3
+
+  Suppress all non-error messages that would have otherwise been
+  printed to the console.
+
+Submit to CDash Upload API
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.2
+
+::
+
+  ctest_submit(CDASH_UPLOAD <file> [CDASH_UPLOAD_TYPE <type>]
+               [SUBMIT_URL <url>]
+               [BUILD_ID <result-var>]
+               [HTTPHEADER <header>]
+               [RETRY_COUNT <count>]
+               [RETRY_DELAY <delay>]
+               [RETURN_VALUE <result-var>]
+               [QUIET])
+
+This second signature is used to upload files to CDash via the CDash
+file upload API. The API first sends a request to upload to CDash along
+with a content hash of the file. If CDash does not already have the file,
+then it is uploaded. Along with the file, a CDash type string is specified
+to tell CDash which handler to use to process the data.
+
+This signature interprets options in the same way as the first one.
+
+.. versionadded:: 3.8
+  Added the ``RETRY_COUNT``, ``RETRY_DELAY``, ``QUIET`` options.
+
+.. versionadded:: 3.9
+  Added the ``HTTPHEADER`` option.
+
+.. versionadded:: 3.13
+  Added the ``RETURN_VALUE`` option.
+
+.. versionadded:: 3.14
+  Added the ``SUBMIT_URL`` option.
+
+.. versionadded:: 3.15
+  Added the ``BUILD_ID`` option.
diff --git a/share/cmake-3.22/Help/command/ctest_test.rst b/share/cmake-3.22/Help/command/ctest_test.rst
new file mode 100644
index 0000000..6a9a6a0
--- /dev/null
+++ b/share/cmake-3.22/Help/command/ctest_test.rst
@@ -0,0 +1,306 @@
+ctest_test
+----------
+
+Perform the :ref:`CTest Test Step` as a :ref:`Dashboard Client`.
+
+::
+
+  ctest_test([BUILD <build-dir>] [APPEND]
+             [START <start-number>]
+             [END <end-number>]
+             [STRIDE <stride-number>]
+             [EXCLUDE <exclude-regex>]
+             [INCLUDE <include-regex>]
+             [EXCLUDE_LABEL <label-exclude-regex>]
+             [INCLUDE_LABEL <label-include-regex>]
+             [EXCLUDE_FIXTURE <regex>]
+             [EXCLUDE_FIXTURE_SETUP <regex>]
+             [EXCLUDE_FIXTURE_CLEANUP <regex>]
+             [PARALLEL_LEVEL <level>]
+             [RESOURCE_SPEC_FILE <file>]
+             [TEST_LOAD <threshold>]
+             [SCHEDULE_RANDOM <ON|OFF>]
+             [STOP_ON_FAILURE]
+             [STOP_TIME <time-of-day>]
+             [RETURN_VALUE <result-var>]
+             [CAPTURE_CMAKE_ERROR <result-var>]
+             [REPEAT <mode>:<n>]
+             [OUTPUT_JUNIT <file>]
+             [QUIET]
+             )
+
+..
+   _note: If updating the argument list here, please also update the argument
+   list documentation for :command:`ctest_memcheck` as well.
+
+Run tests in the project build tree and store results in
+``Test.xml`` for submission with the :command:`ctest_submit` command.
+
+The options are:
+
+``BUILD <build-dir>``
+  Specify the top-level build directory.  If not given, the
+  :variable:`CTEST_BINARY_DIRECTORY` variable is used.
+
+``APPEND``
+  Mark ``Test.xml`` for append to results previously submitted to a
+  dashboard server since the last :command:`ctest_start` call.
+  Append semantics are defined by the dashboard server in use.
+  This does *not* cause results to be appended to a ``.xml`` file
+  produced by a previous call to this command.
+
+``START <start-number>``
+  Specify the beginning of a range of test numbers.
+
+``END <end-number>``
+  Specify the end of a range of test numbers.
+
+``STRIDE <stride-number>``
+  Specify the stride by which to step across a range of test numbers.
+
+``EXCLUDE <exclude-regex>``
+  Specify a regular expression matching test names to exclude.
+
+``INCLUDE <include-regex>``
+  Specify a regular expression matching test names to include.
+  Tests not matching this expression are excluded.
+
+``EXCLUDE_LABEL <label-exclude-regex>``
+  Specify a regular expression matching test labels to exclude.
+
+``INCLUDE_LABEL <label-include-regex>``
+  Specify a regular expression matching test labels to include.
+  Tests not matching this expression are excluded.
+
+``EXCLUDE_FIXTURE <regex>``
+  .. versionadded:: 3.7
+
+  If a test in the set of tests to be executed requires a particular fixture,
+  that fixture's setup and cleanup tests would normally be added to the test
+  set automatically. This option prevents adding setup or cleanup tests for
+  fixtures matching the ``<regex>``. Note that all other fixture behavior is
+  retained, including test dependencies and skipping tests that have fixture
+  setup tests that fail.
+
+``EXCLUDE_FIXTURE_SETUP <regex>``
+  .. versionadded:: 3.7
+
+  Same as ``EXCLUDE_FIXTURE`` except only matching setup tests are excluded.
+
+``EXCLUDE_FIXTURE_CLEANUP <regex>``
+  .. versionadded:: 3.7
+
+  Same as ``EXCLUDE_FIXTURE`` except only matching cleanup tests are excluded.
+
+``PARALLEL_LEVEL <level>``
+  Specify a positive number representing the number of tests to
+  be run in parallel.
+
+``RESOURCE_SPEC_FILE <file>``
+  .. versionadded:: 3.16
+
+  Specify a
+  :ref:`resource specification file <ctest-resource-specification-file>`. See
+  :ref:`ctest-resource-allocation` for more information.
+
+``TEST_LOAD <threshold>``
+  .. versionadded:: 3.4
+
+  While running tests in parallel, try not to start tests when they
+  may cause the CPU load to pass above a given threshold.  If not
+  specified the :variable:`CTEST_TEST_LOAD` variable will be checked,
+  and then the ``--test-load`` command-line argument to :manual:`ctest(1)`.
+  See also the ``TestLoad`` setting in the :ref:`CTest Test Step`.
+
+``REPEAT <mode>:<n>``
+  .. versionadded:: 3.17
+
+  Run tests repeatedly based on the given ``<mode>`` up to ``<n>`` times.
+  The modes are:
+
+  ``UNTIL_FAIL``
+    Require each test to run ``<n>`` times without failing in order to pass.
+    This is useful in finding sporadic failures in test cases.
+
+  ``UNTIL_PASS``
+    Allow each test to run up to ``<n>`` times in order to pass.
+    Repeats tests if they fail for any reason.
+    This is useful in tolerating sporadic failures in test cases.
+
+  ``AFTER_TIMEOUT``
+    Allow each test to run up to ``<n>`` times in order to pass.
+    Repeats tests only if they timeout.
+    This is useful in tolerating sporadic timeouts in test cases
+    on busy machines.
+
+``SCHEDULE_RANDOM <ON|OFF>``
+  Launch tests in a random order.  This may be useful for detecting
+  implicit test dependencies.
+
+``STOP_ON_FAILURE``
+  .. versionadded:: 3.18
+
+  Stop the execution of the tests once one has failed.
+
+``STOP_TIME <time-of-day>``
+  Specify a time of day at which the tests should all stop running.
+
+``RETURN_VALUE <result-var>``
+  Store in the ``<result-var>`` variable ``0`` if all tests passed.
+  Store non-zero if anything went wrong.
+
+``CAPTURE_CMAKE_ERROR <result-var>``
+  .. versionadded:: 3.7
+
+  Store in the ``<result-var>`` variable -1 if there are any errors running
+  the command and prevent ctest from returning non-zero if an error occurs.
+
+``OUTPUT_JUNIT <file>``
+  .. versionadded:: 3.21
+
+  Write test results to ``<file>`` in JUnit XML format. If ``<file>`` is a
+  relative path, it will be placed in the build directory. If ``<file>``
+  already exists, it will be overwritten. Note that the resulting JUnit XML
+  file is **not** uploaded to CDash because it would be redundant with
+  CTest's ``Test.xml`` file.
+
+``QUIET``
+  .. versionadded:: 3.3
+
+  Suppress any CTest-specific non-error messages that would have otherwise
+  been printed to the console.  Output from the underlying test command is not
+  affected.  Summary info detailing the percentage of passing tests is also
+  unaffected by the ``QUIET`` option.
+
+See also the :variable:`CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE`
+and :variable:`CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE` variables.
+
+.. _`Additional Test Measurements`:
+
+Additional Test Measurements
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+CTest can parse the output of your tests for extra measurements to report
+to CDash.
+
+When run as a :ref:`Dashboard Client`, CTest will include these custom
+measurements in the ``Test.xml`` file that gets uploaded to CDash.
+
+Check the `CDash test measurement documentation
+<https://github.com/Kitware/CDash/blob/master/docs/test_measurements.md>`_
+for more information on the types of test measurements that CDash recognizes.
+
+.. versionadded: 3.22
+  CTest can parse custom measurements from tags named
+  ``<CTestMeasurement>`` or ``<CTestMeasurementFile>``. The older names
+  ``<DartMeasurement>`` and ``<DartMeasurementFile>`` are still supported.
+
+The following example demonstrates how to output a variety of custom test
+measurements.
+
+.. code-block:: c++
+
+   std::cout <<
+     "<CTestMeasurement type=\"numeric/double\" name=\"score\">28.3</CTestMeasurement>"
+     << std::endl;
+
+   std::cout <<
+     "<CTestMeasurement type=\"text/string\" name=\"color\">red</CTestMeasurement>"
+     << std::endl;
+
+   std::cout <<
+     "<CTestMeasurement type=\"text/link\" name=\"CMake URL\">https://cmake.org</CTestMeasurement>"
+     << std::endl;
+
+   std::cout <<
+     "<CTestMeasurement type=\"text/preformatted\" name=\"Console Output\">" <<
+     "line 1.\n" <<
+     "  \033[31;1m line 2. Bold red, and indented!\033[0;0ml\n" <<
+     "line 3. Not bold or indented...\n" <<
+     "</CTestMeasurement>" << std::endl;
+
+Image Measurements
+""""""""""""""""""
+
+The following example demonstrates how to upload test images to CDash.
+
+.. code-block:: c++
+
+   std::cout <<
+     "<CTestMeasurementFile type=\"image/jpg\" name=\"TestImage\">" <<
+     "/dir/to/test_img.jpg</CTestMeasurementFile>" << std::endl;
+
+   std::cout <<
+     "<CTestMeasurementFile type=\"image/gif\" name=\"ValidImage\">" <<
+     "/dir/to/valid_img.gif</CTestMeasurementFile>" << std::endl;
+
+   std::cout <<
+     "<CTestMeasurementFile type=\"image/png\" name=\"AlgoResult\"> <<
+     "/dir/to/img.png</CTestMeasurementFile>"
+     << std::endl;
+
+Images will be displayed together in an interactive comparison mode on CDash
+if they are provided with two or more of the following names.
+
+* ``TestImage``
+* ``ValidImage``
+* ``BaselineImage``
+* ``DifferenceImage2``
+
+By convention, ``TestImage`` is the image generated by your test, and
+``ValidImage`` (or ``BaselineImage``) is basis of comparison used to determine
+if the test passed or failed.
+
+If another image name is used it will be displayed by CDash as a static image
+separate from the interactive comparison UI.
+
+Attached Files
+""""""""""""""
+
+.. versionadded:: 3.21
+
+The following example demonstrates how to upload non-image files to CDash.
+
+.. code-block:: c++
+
+   std::cout <<
+     "<CTestMeasurementFile type=\"file\" name=\"TestInputData1\">" <<
+     "/dir/to/data1.csv</CTestMeasurementFile>\n"                   <<
+     "<CTestMeasurementFile type=\"file\" name=\"TestInputData2\">" <<
+     "/dir/to/data2.csv</CTestMeasurementFile>"                     << std::endl;
+
+If the name of the file to upload is known at configure time, you can use the
+:prop_test:`ATTACHED_FILES` or :prop_test:`ATTACHED_FILES_ON_FAIL` test
+properties instead.
+
+Custom Details
+""""""""""""""
+
+.. versionadded:: 3.21
+
+The following example demonstrates how to specify a custom value for the
+``Test Details`` field displayed on CDash.
+
+.. code-block:: c++
+
+   std::cout <<
+     "<CTestDetails>My Custom Details Value</CTestDetails>" << std::endl;
+
+.. _`Additional Labels`:
+
+Additional Labels
+"""""""""""""""""
+
+.. versionadded:: 3.22
+
+The following example demonstrates how to add additional labels to a test
+at runtime.
+
+.. code-block:: c++
+
+   std::cout <<
+     "<CTestLabel>Custom Label 1</CTestLabel>\n" <<
+     "<CTestLabel>Custom Label 2</CTestLabel>"   << std::endl;
+
+Use the :prop_test:`LABELS` test property instead for labels that can be
+determined at configure time.
diff --git a/share/cmake-3.22/Help/command/ctest_update.rst b/share/cmake-3.22/Help/command/ctest_update.rst
new file mode 100644
index 0000000..63f991b
--- /dev/null
+++ b/share/cmake-3.22/Help/command/ctest_update.rst
@@ -0,0 +1,43 @@
+ctest_update
+------------
+
+Perform the :ref:`CTest Update Step` as a :ref:`Dashboard Client`.
+
+::
+
+  ctest_update([SOURCE <source-dir>]
+               [RETURN_VALUE <result-var>]
+               [CAPTURE_CMAKE_ERROR <result-var>]
+               [QUIET])
+
+Update the source tree from version control and record results in
+``Update.xml`` for submission with the :command:`ctest_submit` command.
+
+The options are:
+
+``SOURCE <source-dir>``
+  Specify the source directory.  If not given, the
+  :variable:`CTEST_SOURCE_DIRECTORY` variable is used.
+
+``RETURN_VALUE <result-var>``
+  Store in the ``<result-var>`` variable the number of files
+  updated or ``-1`` on error.
+
+``CAPTURE_CMAKE_ERROR <result-var>``
+  .. versionadded:: 3.13
+
+  Store in the ``<result-var>`` variable -1 if there are any errors running
+  the command and prevent ctest from returning non-zero if an error occurs.
+
+``QUIET``
+  .. versionadded:: 3.3
+
+  Tell CTest to suppress most non-error messages that it would
+  have otherwise printed to the console.  CTest will still report
+  the new revision of the repository and any conflicting files
+  that were found.
+
+The update always follows the version control branch currently checked
+out in the source directory.  See the :ref:`CTest Update Step`
+documentation for information about variables that change the behavior
+of ``ctest_update()``.
diff --git a/share/cmake-3.22/Help/command/ctest_upload.rst b/share/cmake-3.22/Help/command/ctest_upload.rst
new file mode 100644
index 0000000..ffddd0a
--- /dev/null
+++ b/share/cmake-3.22/Help/command/ctest_upload.rst
@@ -0,0 +1,26 @@
+ctest_upload
+------------
+
+Upload files to a dashboard server as a :ref:`Dashboard Client`.
+
+::
+
+  ctest_upload(FILES <file>... [QUIET] [CAPTURE_CMAKE_ERROR <result-var>])
+
+The options are:
+
+``FILES <file>...``
+  Specify a list of files to be sent along with the build results to the
+  dashboard server.
+
+``QUIET``
+  .. versionadded:: 3.3
+
+  Suppress any CTest-specific non-error output that would have been
+  printed to the console otherwise.
+
+``CAPTURE_CMAKE_ERROR <result-var>``
+  .. versionadded:: 3.7
+
+  Store in the ``<result-var>`` variable -1 if there are any errors running
+  the command and prevent ctest from returning non-zero if an error occurs.
diff --git a/share/cmake-3.18/Help/command/define_property.rst b/share/cmake-3.22/Help/command/define_property.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/define_property.rst
rename to share/cmake-3.22/Help/command/define_property.rst
diff --git a/share/cmake-3.18/Help/command/else.rst b/share/cmake-3.22/Help/command/else.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/else.rst
rename to share/cmake-3.22/Help/command/else.rst
diff --git a/share/cmake-3.18/Help/command/elseif.rst b/share/cmake-3.22/Help/command/elseif.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/elseif.rst
rename to share/cmake-3.22/Help/command/elseif.rst
diff --git a/share/cmake-3.22/Help/command/enable_language.rst b/share/cmake-3.22/Help/command/enable_language.rst
new file mode 100644
index 0000000..d2acbc8
--- /dev/null
+++ b/share/cmake-3.22/Help/command/enable_language.rst
@@ -0,0 +1,38 @@
+enable_language
+---------------
+Enable a language (CXX/C/OBJC/OBJCXX/Fortran/etc)
+
+.. code-block:: cmake
+
+  enable_language(<lang> [OPTIONAL] )
+
+Enables support for the named language in CMake.  This is
+the same as the :command:`project` command but does not create any of the extra
+variables that are created by the project command.  Example languages
+are ``CXX``, ``C``, ``CUDA``, ``OBJC``, ``OBJCXX``, ``Fortran``,
+``HIP``, ``ISPC``, and ``ASM``.
+
+.. versionadded:: 3.8
+  Added ``CUDA`` support.
+
+.. versionadded:: 3.16
+  Added ``OBJC`` and ``OBJCXX`` support.
+
+.. versionadded:: 3.18
+  Added ``ISPC`` support.
+
+.. versionadded:: 3.21
+  Added ``HIP`` support.
+
+If enabling ``ASM``, enable it last so that CMake can check whether
+compilers for other languages like ``C`` work for assembly too.
+
+This command must be called in file scope, not in a function call.
+Furthermore, it must be called in the highest directory common to all
+targets using the named language directly for compiling sources or
+indirectly through link dependencies.  It is simplest to enable all
+needed languages in the top-level directory of a project.
+
+The ``OPTIONAL`` keyword is a placeholder for future implementation and
+does not currently work. Instead you can use the :module:`CheckLanguage`
+module to verify support before enabling.
diff --git a/share/cmake-3.18/Help/command/enable_testing.rst b/share/cmake-3.22/Help/command/enable_testing.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/enable_testing.rst
rename to share/cmake-3.22/Help/command/enable_testing.rst
diff --git a/share/cmake-3.18/Help/command/endforeach.rst b/share/cmake-3.22/Help/command/endforeach.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/endforeach.rst
rename to share/cmake-3.22/Help/command/endforeach.rst
diff --git a/share/cmake-3.18/Help/command/endfunction.rst b/share/cmake-3.22/Help/command/endfunction.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/endfunction.rst
rename to share/cmake-3.22/Help/command/endfunction.rst
diff --git a/share/cmake-3.18/Help/command/endif.rst b/share/cmake-3.22/Help/command/endif.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/endif.rst
rename to share/cmake-3.22/Help/command/endif.rst
diff --git a/share/cmake-3.18/Help/command/endmacro.rst b/share/cmake-3.22/Help/command/endmacro.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/endmacro.rst
rename to share/cmake-3.22/Help/command/endmacro.rst
diff --git a/share/cmake-3.18/Help/command/endwhile.rst b/share/cmake-3.22/Help/command/endwhile.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/endwhile.rst
rename to share/cmake-3.22/Help/command/endwhile.rst
diff --git a/share/cmake-3.18/Help/command/exec_program.rst b/share/cmake-3.22/Help/command/exec_program.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/exec_program.rst
rename to share/cmake-3.22/Help/command/exec_program.rst
diff --git a/share/cmake-3.22/Help/command/execute_process.rst b/share/cmake-3.22/Help/command/execute_process.rst
new file mode 100644
index 0000000..82fcd46
--- /dev/null
+++ b/share/cmake-3.22/Help/command/execute_process.rst
@@ -0,0 +1,158 @@
+execute_process
+---------------
+
+Execute one or more child processes.
+
+.. code-block:: cmake
+
+  execute_process(COMMAND <cmd1> [<arguments>]
+                  [COMMAND <cmd2> [<arguments>]]...
+                  [WORKING_DIRECTORY <directory>]
+                  [TIMEOUT <seconds>]
+                  [RESULT_VARIABLE <variable>]
+                  [RESULTS_VARIABLE <variable>]
+                  [OUTPUT_VARIABLE <variable>]
+                  [ERROR_VARIABLE <variable>]
+                  [INPUT_FILE <file>]
+                  [OUTPUT_FILE <file>]
+                  [ERROR_FILE <file>]
+                  [OUTPUT_QUIET]
+                  [ERROR_QUIET]
+                  [COMMAND_ECHO <where>]
+                  [OUTPUT_STRIP_TRAILING_WHITESPACE]
+                  [ERROR_STRIP_TRAILING_WHITESPACE]
+                  [ENCODING <name>]
+                  [ECHO_OUTPUT_VARIABLE]
+                  [ECHO_ERROR_VARIABLE]
+                  [COMMAND_ERROR_IS_FATAL <ANY|LAST>])
+
+Runs the given sequence of one or more commands.
+
+Commands are executed concurrently as a pipeline, with the standard
+output of each process piped to the standard input of the next.
+A single standard error pipe is used for all processes.
+
+Options:
+
+``COMMAND``
+ A child process command line.
+
+ CMake executes the child process using operating system APIs directly.
+ All arguments are passed VERBATIM to the child process.
+ No intermediate shell is used, so shell operators such as ``>``
+ are treated as normal arguments.
+ (Use the ``INPUT_*``, ``OUTPUT_*``, and ``ERROR_*`` options to
+ redirect stdin, stdout, and stderr.)
+
+ If a sequential execution of multiple commands is required, use multiple
+ :command:`execute_process` calls with a single ``COMMAND`` argument.
+
+``WORKING_DIRECTORY``
+ The named directory will be set as the current working directory of
+ the child processes.
+
+``TIMEOUT``
+ After the specified number of seconds (fractions allowed), all unfinished
+ child processes will be terminated, and the ``RESULT_VARIABLE`` will be
+ set to a string mentioning the "timeout".
+
+``RESULT_VARIABLE``
+ The variable will be set to contain the result of last child process.
+ This will be an integer return code from the last child or a string
+ describing an error condition.
+
+``RESULTS_VARIABLE <variable>``
+ .. versionadded:: 3.10
+
+ The variable will be set to contain the result of all processes as a
+ :ref:`semicolon-separated list <CMake Language Lists>`, in order of the
+ given ``COMMAND`` arguments.  Each entry will be an integer return code
+ from the corresponding child or a string describing an error condition.
+
+``OUTPUT_VARIABLE``, ``ERROR_VARIABLE``
+ The variable named will be set with the contents of the standard output
+ and standard error pipes, respectively.  If the same variable is named
+ for both pipes their output will be merged in the order produced.
+
+``INPUT_FILE, OUTPUT_FILE``, ``ERROR_FILE``
+ The file named will be attached to the standard input of the first
+ process, standard output of the last process, or standard error of
+ all processes, respectively.
+
+ .. versionadded:: 3.3
+  If the same file is named for both output and error then it will be used
+  for both.
+
+``OUTPUT_QUIET``, ``ERROR_QUIET``
+ The standard output or standard error results will be quietly ignored.
+
+``COMMAND_ECHO <where>``
+ .. versionadded:: 3.15
+
+ The command being run will be echo'ed to ``<where>`` with ``<where>``
+ being set to one of ``STDERR``, ``STDOUT`` or ``NONE``.
+ See the :variable:`CMAKE_EXECUTE_PROCESS_COMMAND_ECHO` variable for a way
+ to control the default behavior when this option is not present.
+
+``ENCODING <name>``
+ .. versionadded:: 3.8
+
+ On Windows, the encoding that is used to decode output from the process.
+ Ignored on other platforms.
+ Valid encoding names are:
+
+ ``NONE``
+   Perform no decoding.  This assumes that the process output is encoded
+   in the same way as CMake's internal encoding (UTF-8).
+   This is the default.
+ ``AUTO``
+   Use the current active console's codepage or if that isn't
+   available then use ANSI.
+ ``ANSI``
+   Use the ANSI codepage.
+ ``OEM``
+   Use the original equipment manufacturer (OEM) code page.
+ ``UTF8`` or ``UTF-8``
+   Use the UTF-8 codepage.
+
+   .. versionadded:: 3.11
+     Accept ``UTF-8`` spelling for consistency with the
+     `UTF-8 RFC <https://www.ietf.org/rfc/rfc3629>`_ naming convention.
+
+``ECHO_OUTPUT_VARIABLE``, ``ECHO_ERROR_VARIABLE``
+  .. versionadded:: 3.18
+
+  The standard output or standard error will not be exclusively redirected to
+  the configured variables.
+
+  The output will be duplicated, it will be sent into the configured variables
+  and also on standard output or standard error.
+
+  This is analogous to the ``tee`` Unix command.
+
+``COMMAND_ERROR_IS_FATAL <ANY|LAST>``
+  .. versionadded:: 3.19
+
+  The option following ``COMMAND_ERROR_IS_FATAL`` determines the behavior when
+  an error is encountered:
+
+    ``ANY``
+    If any of the commands in the list of commands fail, the
+    ``execute_process()`` command halts with an error.
+
+    ``LAST``
+    If the last command in the list of commands fails, the
+    ``execute_process()`` command halts with an error.  Commands earlier in the
+    list will not cause a fatal error.
+
+If more than one ``OUTPUT_*`` or ``ERROR_*`` option is given for the
+same pipe the precedence is not specified.
+If no ``OUTPUT_*`` or ``ERROR_*`` options are given the output will
+be shared with the corresponding pipes of the CMake process itself.
+
+The :command:`execute_process` command is a newer more powerful version of
+:command:`exec_program`, but the old command has been kept for compatibility.
+Both commands run while CMake is processing the project prior to build
+system generation.  Use :command:`add_custom_target` and
+:command:`add_custom_command` to create custom commands that run at
+build time.
diff --git a/share/cmake-3.22/Help/command/export.rst b/share/cmake-3.22/Help/command/export.rst
new file mode 100644
index 0000000..e8a1fa7
--- /dev/null
+++ b/share/cmake-3.22/Help/command/export.rst
@@ -0,0 +1,93 @@
+export
+------
+
+Export targets from the build tree for use by outside projects.
+
+.. code-block:: cmake
+
+  export(EXPORT <export-name> [NAMESPACE <namespace>] [FILE <filename>])
+
+Creates a file ``<filename>`` that may be included by outside projects to
+import targets from the current project's build tree.  This is useful
+during cross-compiling to build utility executables that can run on
+the host platform in one project and then import them into another
+project being compiled for the target platform.  If the ``NAMESPACE``
+option is given the ``<namespace>`` string will be prepended to all target
+names written to the file.
+
+Target installations are associated with the export ``<export-name>``
+using the ``EXPORT`` option of the :command:`install(TARGETS)` command.
+
+The file created by this command is specific to the build tree and
+should never be installed.  See the :command:`install(EXPORT)` command to
+export targets from an installation tree.
+
+The properties set on the generated IMPORTED targets will have the
+same values as the final values of the input TARGETS.
+
+.. code-block:: cmake
+
+  export(TARGETS [target1 [target2 [...]]] [NAMESPACE <namespace>]
+         [APPEND] FILE <filename> [EXPORT_LINK_INTERFACE_LIBRARIES])
+
+This signature is similar to the ``EXPORT`` signature, but targets are listed
+explicitly rather than specified as an export-name.  If the APPEND option is
+given the generated code will be appended to the file instead of overwriting it.
+The EXPORT_LINK_INTERFACE_LIBRARIES keyword, if present, causes the
+contents of the properties matching
+``(IMPORTED_)?LINK_INTERFACE_LIBRARIES(_<CONFIG>)?`` to be exported, when
+policy CMP0022 is NEW.  If a library target is included in the export
+but a target to which it links is not included the behavior is
+unspecified.
+
+.. note::
+
+  :ref:`Object Libraries` under :generator:`Xcode` have special handling if
+  multiple architectures are listed in :variable:`CMAKE_OSX_ARCHITECTURES`.
+  In this case they will be exported as :ref:`Interface Libraries` with
+  no object files available to clients.  This is sufficient to satisfy
+  transitive usage requirements of other targets that link to the
+  object libraries in their implementation.
+
+.. code-block:: cmake
+
+  export(PACKAGE <PackageName>)
+
+Store the current build directory in the CMake user package registry
+for package ``<PackageName>``.  The :command:`find_package` command may consider the
+directory while searching for package ``<PackageName>``.  This helps dependent
+projects find and use a package from the current project's build tree
+without help from the user.  Note that the entry in the package
+registry that this command creates works only in conjunction with a
+package configuration file (``<PackageName>Config.cmake``) that works with the
+build tree. In some cases, for example for packaging and for system
+wide installations, it is not desirable to write the user package
+registry.
+
+.. versionchanged:: 3.1
+  If the :variable:`CMAKE_EXPORT_NO_PACKAGE_REGISTRY` variable
+  is enabled, the ``export(PACKAGE)`` command will do nothing.
+
+.. versionchanged:: 3.15
+  By default the ``export(PACKAGE)`` command does nothing (see policy
+  :policy:`CMP0090`) because populating the user package registry has effects
+  outside the source and build trees.  Set the
+  :variable:`CMAKE_EXPORT_PACKAGE_REGISTRY` variable to add build directories
+  to the CMake user package registry.
+
+.. code-block:: cmake
+
+  export(TARGETS [target1 [target2 [...]]]  [ANDROID_MK <filename>])
+
+.. versionadded:: 3.7
+
+This signature exports cmake built targets to the android ndk build system
+by creating an Android.mk file that references the prebuilt targets. The
+Android NDK supports the use of prebuilt libraries, both static and shared.
+This allows cmake to build the libraries of a project and make them available
+to an ndk build system complete with transitive dependencies, include flags
+and defines required to use the libraries. The signature takes a list of
+targets and puts them in the Android.mk file specified by the ``<filename>``
+given. This signature can only be used if policy CMP0022 is NEW for all
+targets given. A error will be issued if that policy is set to OLD for one
+of the targets.
diff --git a/share/cmake-3.18/Help/command/export_library_dependencies.rst b/share/cmake-3.22/Help/command/export_library_dependencies.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/export_library_dependencies.rst
rename to share/cmake-3.22/Help/command/export_library_dependencies.rst
diff --git a/share/cmake-3.22/Help/command/file.rst b/share/cmake-3.22/Help/command/file.rst
new file mode 100644
index 0000000..799b6ff
--- /dev/null
+++ b/share/cmake-3.22/Help/command/file.rst
@@ -0,0 +1,1236 @@
+file
+----
+
+File manipulation command.
+
+This command is dedicated to file and path manipulation requiring access to the
+filesystem.
+
+For other path manipulation, handling only syntactic aspects, have a look at
+:command:`cmake_path` command.
+
+.. note::
+
+  The sub-commands `RELATIVE_PATH`_, `TO_CMAKE_PATH`_ and `TO_NATIVE_PATH`_ has
+  been superseded, respectively, by sub-commands
+  :ref:`RELATIVE_PATH <cmake_path-RELATIVE_PATH>`,
+  :ref:`CONVERT ... TO_CMAKE_PATH_LIST <cmake_path-TO_CMAKE_PATH_LIST>` and
+  :ref:`CONVERT ... TO_NATIVE_PATH_LIST <cmake_path-TO_NATIVE_PATH_LIST>` of
+  :command:`cmake_path` command.
+
+Synopsis
+^^^^^^^^
+
+.. parsed-literal::
+
+  `Reading`_
+    file(`READ`_ <filename> <out-var> [...])
+    file(`STRINGS`_ <filename> <out-var> [...])
+    file(`\<HASH\> <HASH_>`_ <filename> <out-var>)
+    file(`TIMESTAMP`_ <filename> <out-var> [...])
+    file(`GET_RUNTIME_DEPENDENCIES`_ [...])
+
+  `Writing`_
+    file({`WRITE`_ | `APPEND`_} <filename> <content>...)
+    file({`TOUCH`_ | `TOUCH_NOCREATE`_} [<file>...])
+    file(`GENERATE`_ OUTPUT <output-file> [...])
+    file(`CONFIGURE`_ OUTPUT <output-file> CONTENT <content> [...])
+
+  `Filesystem`_
+    file({`GLOB`_ | `GLOB_RECURSE`_} <out-var> [...] [<globbing-expr>...])
+    file(`MAKE_DIRECTORY`_ [<dir>...])
+    file({`REMOVE`_ | `REMOVE_RECURSE`_ } [<files>...])
+    file(`RENAME`_ <oldname> <newname> [...])
+    file(`COPY_FILE`_ <oldname> <newname> [...])
+    file({`COPY`_ | `INSTALL`_} <file>... DESTINATION <dir> [...])
+    file(`SIZE`_ <filename> <out-var>)
+    file(`READ_SYMLINK`_ <linkname> <out-var>)
+    file(`CREATE_LINK`_ <original> <linkname> [...])
+    file(`CHMOD`_ <files>... <directories>... PERMISSIONS <permissions>... [...])
+    file(`CHMOD_RECURSE`_ <files>... <directories>... PERMISSIONS <permissions>... [...])
+
+  `Path Conversion`_
+    file(`REAL_PATH`_ <path> <out-var> [BASE_DIRECTORY <dir>] [EXPAND_TILDE])
+    file(`RELATIVE_PATH`_ <out-var> <directory> <file>)
+    file({`TO_CMAKE_PATH`_ | `TO_NATIVE_PATH`_} <path> <out-var>)
+
+  `Transfer`_
+    file(`DOWNLOAD`_ <url> [<file>] [...])
+    file(`UPLOAD`_ <file> <url> [...])
+
+  `Locking`_
+    file(`LOCK`_ <path> [...])
+
+  `Archiving`_
+    file(`ARCHIVE_CREATE`_ OUTPUT <archive> PATHS <paths>... [...])
+    file(`ARCHIVE_EXTRACT`_ INPUT <archive> [...])
+
+Reading
+^^^^^^^
+
+.. _READ:
+
+.. code-block:: cmake
+
+  file(READ <filename> <variable>
+       [OFFSET <offset>] [LIMIT <max-in>] [HEX])
+
+Read content from a file called ``<filename>`` and store it in a
+``<variable>``.  Optionally start from the given ``<offset>`` and
+read at most ``<max-in>`` bytes.  The ``HEX`` option causes data to
+be converted to a hexadecimal representation (useful for binary data). If the
+``HEX`` option is specified, letters in the output (``a`` through ``f``) are in
+lowercase.
+
+.. _STRINGS:
+
+.. code-block:: cmake
+
+  file(STRINGS <filename> <variable> [<options>...])
+
+Parse a list of ASCII strings from ``<filename>`` and store it in
+``<variable>``.  Binary data in the file are ignored.  Carriage return
+(``\r``, CR) characters are ignored.  The options are:
+
+``LENGTH_MAXIMUM <max-len>``
+ Consider only strings of at most a given length.
+
+``LENGTH_MINIMUM <min-len>``
+ Consider only strings of at least a given length.
+
+``LIMIT_COUNT <max-num>``
+ Limit the number of distinct strings to be extracted.
+
+``LIMIT_INPUT <max-in>``
+ Limit the number of input bytes to read from the file.
+
+``LIMIT_OUTPUT <max-out>``
+ Limit the number of total bytes to store in the ``<variable>``.
+
+``NEWLINE_CONSUME``
+ Treat newline characters (``\n``, LF) as part of string content
+ instead of terminating at them.
+
+``NO_HEX_CONVERSION``
+ Intel Hex and Motorola S-record files are automatically converted to
+ binary while reading unless this option is given.
+
+``REGEX <regex>``
+ Consider only strings that match the given regular expression,
+ as described under :ref:`string(REGEX) <Regex Specification>`.
+
+``ENCODING <encoding-type>``
+ .. versionadded:: 3.1
+
+ Consider strings of a given encoding.  Currently supported encodings are:
+ ``UTF-8``, ``UTF-16LE``, ``UTF-16BE``, ``UTF-32LE``, ``UTF-32BE``.
+ If the ``ENCODING`` option is not provided and the file has a Byte Order Mark,
+ the ``ENCODING`` option will be defaulted to respect the Byte Order Mark.
+
+ .. versionadded:: 3.2
+   Added the ``UTF-16LE``, ``UTF-16BE``, ``UTF-32LE``, ``UTF-32BE`` encodings.
+
+For example, the code
+
+.. code-block:: cmake
+
+  file(STRINGS myfile.txt myfile)
+
+stores a list in the variable ``myfile`` in which each item is a line
+from the input file.
+
+.. _HASH:
+
+.. code-block:: cmake
+
+  file(<HASH> <filename> <variable>)
+
+Compute a cryptographic hash of the content of ``<filename>`` and
+store it in a ``<variable>``.  The supported ``<HASH>`` algorithm names
+are those listed by the :ref:`string(\<HASH\>) <Supported Hash Algorithms>`
+command.
+
+.. _TIMESTAMP:
+
+.. code-block:: cmake
+
+  file(TIMESTAMP <filename> <variable> [<format>] [UTC])
+
+Compute a string representation of the modification time of ``<filename>``
+and store it in ``<variable>``.  Should the command be unable to obtain a
+timestamp variable will be set to the empty string ("").
+
+See the :command:`string(TIMESTAMP)` command for documentation of
+the ``<format>`` and ``UTC`` options.
+
+.. _GET_RUNTIME_DEPENDENCIES:
+
+.. code-block:: cmake
+
+  file(GET_RUNTIME_DEPENDENCIES
+    [RESOLVED_DEPENDENCIES_VAR <deps_var>]
+    [UNRESOLVED_DEPENDENCIES_VAR <unresolved_deps_var>]
+    [CONFLICTING_DEPENDENCIES_PREFIX <conflicting_deps_prefix>]
+    [EXECUTABLES [<executable_files>...]]
+    [LIBRARIES [<library_files>...]]
+    [MODULES [<module_files>...]]
+    [DIRECTORIES [<directories>...]]
+    [BUNDLE_EXECUTABLE <bundle_executable_file>]
+    [PRE_INCLUDE_REGEXES [<regexes>...]]
+    [PRE_EXCLUDE_REGEXES [<regexes>...]]
+    [POST_INCLUDE_REGEXES [<regexes>...]]
+    [POST_EXCLUDE_REGEXES [<regexes>...]]
+    [POST_INCLUDE_FILES [<files>...]]
+    [POST_EXCLUDE_FILES [<files>...]]
+    )
+
+.. versionadded:: 3.16
+
+Recursively get the list of libraries depended on by the given files.
+
+Please note that this sub-command is not intended to be used in project mode.
+It is intended for use at install time, either from code generated by the
+:command:`install(RUNTIME_DEPENDENCY_SET)` command, or from code provided by
+the project via :command:`install(CODE)` or :command:`install(SCRIPT)`.
+For example:
+
+.. code-block:: cmake
+
+  install(CODE [[
+    file(GET_RUNTIME_DEPENDENCIES
+      # ...
+      )
+    ]])
+
+The arguments are as follows:
+
+``RESOLVED_DEPENDENCIES_VAR <deps_var>``
+  Name of the variable in which to store the list of resolved dependencies.
+
+``UNRESOLVED_DEPENDENCIES_VAR <unresolved_deps_var>``
+  Name of the variable in which to store the list of unresolved dependencies.
+  If this variable is not specified, and there are any unresolved dependencies,
+  an error is issued.
+
+``CONFLICTING_DEPENDENCIES_PREFIX <conflicting_deps_prefix>``
+  Variable prefix in which to store conflicting dependency information.
+  Dependencies are conflicting if two files with the same name are found in
+  two different directories. The list of filenames that conflict are stored in
+  ``<conflicting_deps_prefix>_FILENAMES``. For each filename, the list of paths
+  that were found for that filename are stored in
+  ``<conflicting_deps_prefix>_<filename>``.
+
+``EXECUTABLES <executable_files>``
+  List of executable files to read for dependencies. These are executables that
+  are typically created with :command:`add_executable`, but they do not have to
+  be created by CMake. On Apple platforms, the paths to these files determine
+  the value of ``@executable_path`` when recursively resolving the libraries.
+  Specifying any kind of library (``STATIC``, ``MODULE``, or ``SHARED``) here
+  will result in undefined behavior.
+
+``LIBRARIES <library_files>``
+  List of library files to read for dependencies. These are libraries that are
+  typically created with :command:`add_library(SHARED)`, but they do not have
+  to be created by CMake. Specifying ``STATIC`` libraries, ``MODULE``
+  libraries, or executables here will result in undefined behavior.
+
+``MODULES <module_files>``
+  List of loadable module files to read for dependencies. These are modules
+  that are typically created with :command:`add_library(MODULE)`, but they do
+  not have to be created by CMake. They are typically used by calling
+  ``dlopen()`` at runtime rather than linked at link time with ``ld -l``.
+  Specifying ``STATIC`` libraries, ``SHARED`` libraries, or executables here
+  will result in undefined behavior.
+
+``DIRECTORIES <directories>``
+  List of additional directories to search for dependencies. On Linux
+  platforms, these directories are searched if the dependency is not found in
+  any of the other usual paths. If it is found in such a directory, a warning
+  is issued, because it means that the file is incomplete (it does not list all
+  of the directories that contain its dependencies). On Windows platforms,
+  these directories are searched if the dependency is not found in any of the
+  other search paths, but no warning is issued, because searching other paths
+  is a normal part of Windows dependency resolution. On Apple platforms, this
+  argument has no effect.
+
+``BUNDLE_EXECUTABLE <bundle_executable_file>``
+  Executable to treat as the "bundle executable" when resolving libraries. On
+  Apple platforms, this argument determines the value of ``@executable_path``
+  when recursively resolving libraries for ``LIBRARIES`` and ``MODULES`` files.
+  It has no effect on ``EXECUTABLES`` files. On other platforms, it has no
+  effect. This is typically (but not always) one of the executables in the
+  ``EXECUTABLES`` argument which designates the "main" executable of the
+  package.
+
+The following arguments specify filters for including or excluding libraries to
+be resolved. See below for a full description of how they work.
+
+``PRE_INCLUDE_REGEXES <regexes>``
+  List of pre-include regexes through which to filter the names of
+  not-yet-resolved dependencies.
+
+``PRE_EXCLUDE_REGEXES <regexes>``
+  List of pre-exclude regexes through which to filter the names of
+  not-yet-resolved dependencies.
+
+``POST_INCLUDE_REGEXES <regexes>``
+  List of post-include regexes through which to filter the names of resolved
+  dependencies.
+
+``POST_EXCLUDE_REGEXES <regexes>``
+  List of post-exclude regexes through which to filter the names of resolved
+  dependencies.
+
+``POST_INCLUDE_FILES <files>``
+  .. versionadded:: 3.21
+
+  List of post-include filenames through which to filter the names of resolved
+  dependencies. Symlinks are resolved when attempting to match these filenames.
+
+``POST_EXCLUDE_FILES <files>``
+  .. versionadded:: 3.21
+
+  List of post-exclude filenames through which to filter the names of resolved
+  dependencies. Symlinks are resolved when attempting to match these filenames.
+
+These arguments can be used to exclude unwanted system libraries when
+resolving the dependencies, or to include libraries from a specific
+directory. The filtering works as follows:
+
+1. If the not-yet-resolved dependency matches any of the
+   ``PRE_INCLUDE_REGEXES``, steps 2 and 3 are skipped, and the dependency
+   resolution proceeds to step 4.
+2. If the not-yet-resolved dependency matches any of the
+   ``PRE_EXCLUDE_REGEXES``, dependency resolution stops for that dependency.
+3. Otherwise, dependency resolution proceeds.
+4. ``file(GET_RUNTIME_DEPENDENCIES)`` searches for the dependency according to
+   the linking rules of the platform (see below).
+5. If the dependency is found, and its full path matches one of the
+   ``POST_INCLUDE_REGEXES`` or ``POST_INCLUDE_FILES``, the full path is added
+   to the resolved dependencies, and ``file(GET_RUNTIME_DEPENDENCIES)``
+   recursively resolves that library's own dependencies. Otherwise, resolution
+   proceeds to step 6.
+6. If the dependency is found, but its full path matches one of the
+   ``POST_EXCLUDE_REGEXES`` or ``POST_EXCLUDE_FILES``, it is not added to the
+   resolved dependencies, and dependency resolution stops for that dependency.
+7. If the dependency is found, and its full path does not match either
+   ``POST_INCLUDE_REGEXES``, ``POST_INCLUDE_FILES``, ``POST_EXCLUDE_REGEXES``,
+   or ``POST_EXCLUDE_FILES``, the full path is added to the resolved
+   dependencies, and ``file(GET_RUNTIME_DEPENDENCIES)``  recursively resolves
+   that library's own dependencies.
+
+Different platforms have different rules for how dependencies are resolved.
+These specifics are described here.
+
+On Linux platforms, library resolution works as follows:
+
+1. If the depending file does not have any ``RUNPATH`` entries, and the library
+   exists in one of the depending file's ``RPATH`` entries, or its parents', in
+   that order, the dependency is resolved to that file.
+2. Otherwise, if the depending file has any ``RUNPATH`` entries, and the
+   library exists in one of those entries, the dependency is resolved to that
+   file.
+3. Otherwise, if the library exists in one of the directories listed by
+   ``ldconfig``, the dependency is resolved to that file.
+4. Otherwise, if the library exists in one of the ``DIRECTORIES`` entries, the
+   dependency is resolved to that file. In this case, a warning is issued,
+   because finding a file in one of the ``DIRECTORIES`` means that the
+   depending file is not complete (it does not list all the directories from
+   which it pulls dependencies).
+5. Otherwise, the dependency is unresolved.
+
+On Windows platforms, library resolution works as follows:
+
+1. The dependent DLL name is converted to lowercase. Windows DLL names are
+   case-insensitive, and some linkers mangle the case of the DLL dependency
+   names. However, this makes it more difficult for ``PRE_INCLUDE_REGEXES``,
+   ``PRE_EXCLUDE_REGEXES``, ``POST_INCLUDE_REGEXES``, and
+   ``POST_EXCLUDE_REGEXES`` to properly filter DLL names - every regex would
+   have to check for both uppercase and lowercase letters. For example:
+
+   .. code-block:: cmake
+
+     file(GET_RUNTIME_DEPENDENCIES
+       # ...
+       PRE_INCLUDE_REGEXES "^[Mm][Yy][Ll][Ii][Bb][Rr][Aa][Rr][Yy]\\.[Dd][Ll][Ll]$"
+       )
+
+   Converting the DLL name to lowercase allows the regexes to only match
+   lowercase names, thus simplifying the regex. For example:
+
+   .. code-block:: cmake
+
+     file(GET_RUNTIME_DEPENDENCIES
+       # ...
+       PRE_INCLUDE_REGEXES "^mylibrary\\.dll$"
+       )
+
+   This regex will match ``mylibrary.dll`` regardless of how it is cased,
+   either on disk or in the depending file. (For example, it will match
+   ``mylibrary.dll``, ``MyLibrary.dll``, and ``MYLIBRARY.DLL``.)
+
+   Please note that the directory portion of any resolved DLLs retains its
+   casing and is not converted to lowercase. Only the filename portion is
+   converted.
+
+2. (**Not yet implemented**) If the depending file is a Windows Store app, and
+   the dependency is listed as a dependency in the application's package
+   manifest, the dependency is resolved to that file.
+3. Otherwise, if the library exists in the same directory as the depending
+   file, the dependency is resolved to that file.
+4. Otherwise, if the library exists in either the operating system's
+   ``system32`` directory or the ``Windows`` directory, in that order, the
+   dependency is resolved to that file.
+5. Otherwise, if the library exists in one of the directories specified by
+   ``DIRECTORIES``, in the order they are listed, the dependency is resolved to
+   that file. In this case, a warning is not issued, because searching other
+   directories is a normal part of Windows library resolution.
+6. Otherwise, the dependency is unresolved.
+
+On Apple platforms, library resolution works as follows:
+
+1. If the dependency starts with ``@executable_path/``, and an ``EXECUTABLES``
+   argument is in the process of being resolved, and replacing
+   ``@executable_path/`` with the directory of the executable yields an
+   existing file, the dependency is resolved to that file.
+2. Otherwise, if the dependency starts with ``@executable_path/``, and there is
+   a ``BUNDLE_EXECUTABLE`` argument, and replacing ``@executable_path/`` with
+   the directory of the bundle executable yields an existing file, the
+   dependency is resolved to that file.
+3. Otherwise, if the dependency starts with ``@loader_path/``, and replacing
+   ``@loader_path/`` with the directory of the depending file yields an
+   existing file, the dependency is resolved to that file.
+4. Otherwise, if the dependency starts with ``@rpath/``, and replacing
+   ``@rpath/`` with one of the ``RPATH`` entries of the depending file yields
+   an existing file, the dependency is resolved to that file. Note that
+   ``RPATH`` entries that start with ``@executable_path/`` or ``@loader_path/``
+   also have these items replaced with the appropriate path.
+5. Otherwise, if the dependency is an absolute file that exists, the dependency
+   is resolved to that file.
+6. Otherwise, the dependency is unresolved.
+
+This function accepts several variables that determine which tool is used for
+dependency resolution:
+
+.. variable:: CMAKE_GET_RUNTIME_DEPENDENCIES_PLATFORM
+
+  Determines which operating system and executable format the files are built
+  for. This could be one of several values:
+
+  * ``linux+elf``
+  * ``windows+pe``
+  * ``macos+macho``
+
+  If this variable is not specified, it is determined automatically by system
+  introspection.
+
+.. variable:: CMAKE_GET_RUNTIME_DEPENDENCIES_TOOL
+
+  Determines the tool to use for dependency resolution. It could be one of
+  several values, depending on the value of
+  :variable:`CMAKE_GET_RUNTIME_DEPENDENCIES_PLATFORM`:
+
+  ================================================= =============================================
+     ``CMAKE_GET_RUNTIME_DEPENDENCIES_PLATFORM``       ``CMAKE_GET_RUNTIME_DEPENDENCIES_TOOL``
+  ================================================= =============================================
+  ``linux+elf``                                     ``objdump``
+  ``windows+pe``                                    ``dumpbin``
+  ``windows+pe``                                    ``objdump``
+  ``macos+macho``                                   ``otool``
+  ================================================= =============================================
+
+  If this variable is not specified, it is determined automatically by system
+  introspection.
+
+.. variable:: CMAKE_GET_RUNTIME_DEPENDENCIES_COMMAND
+
+  Determines the path to the tool to use for dependency resolution. This is the
+  actual path to ``objdump``, ``dumpbin``, or ``otool``.
+
+  If this variable is not specified, it is determined by the value of
+  ``CMAKE_OBJDUMP`` if set, else by system introspection.
+
+  .. versionadded:: 3.18
+    Use ``CMAKE_OBJDUMP`` if set.
+
+Writing
+^^^^^^^
+
+.. _WRITE:
+.. _APPEND:
+
+.. code-block:: cmake
+
+  file(WRITE <filename> <content>...)
+  file(APPEND <filename> <content>...)
+
+Write ``<content>`` into a file called ``<filename>``.  If the file does
+not exist, it will be created.  If the file already exists, ``WRITE``
+mode will overwrite it and ``APPEND`` mode will append to the end.
+Any directories in the path specified by ``<filename>`` that do not
+exist will be created.
+
+If the file is a build input, use the :command:`configure_file` command
+to update the file only when its content changes.
+
+.. _TOUCH:
+.. _TOUCH_NOCREATE:
+
+.. code-block:: cmake
+
+  file(TOUCH [<files>...])
+  file(TOUCH_NOCREATE [<files>...])
+
+.. versionadded:: 3.12
+
+Create a file with no content if it does not yet exist. If the file already
+exists, its access and/or modification will be updated to the time when the
+function call is executed.
+
+Use TOUCH_NOCREATE to touch a file if it exists but not create it. If a file
+does not exist it will be silently ignored.
+
+With TOUCH and TOUCH_NOCREATE the contents of an existing file will not be
+modified.
+
+.. _GENERATE:
+
+.. code-block:: cmake
+
+  file(GENERATE OUTPUT output-file
+       <INPUT input-file|CONTENT content>
+       [CONDITION expression] [TARGET target]
+       [NO_SOURCE_PERMISSIONS | USE_SOURCE_PERMISSIONS |
+        FILE_PERMISSIONS <permissions>...]
+       [NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])
+
+Generate an output file for each build configuration supported by the current
+:manual:`CMake Generator <cmake-generators(7)>`.  Evaluate
+:manual:`generator expressions <cmake-generator-expressions(7)>`
+from the input content to produce the output content.  The options are:
+
+``CONDITION <condition>``
+  Generate the output file for a particular configuration only if
+  the condition is true.  The condition must be either ``0`` or ``1``
+  after evaluating generator expressions.
+
+``CONTENT <content>``
+  Use the content given explicitly as input.
+
+``INPUT <input-file>``
+  Use the content from a given file as input.
+
+  .. versionchanged:: 3.10
+    A relative path is treated with respect to the value of
+    :variable:`CMAKE_CURRENT_SOURCE_DIR`.  See policy :policy:`CMP0070`.
+
+``OUTPUT <output-file>``
+  Specify the output file name to generate.  Use generator expressions
+  such as ``$<CONFIG>`` to specify a configuration-specific output file
+  name.  Multiple configurations may generate the same output file only
+  if the generated content is identical.  Otherwise, the ``<output-file>``
+  must evaluate to an unique name for each configuration.
+
+  .. versionchanged:: 3.10
+    A relative path (after evaluating generator expressions) is treated
+    with respect to the value of :variable:`CMAKE_CURRENT_BINARY_DIR`.
+    See policy :policy:`CMP0070`.
+
+``TARGET <target>``
+  .. versionadded:: 3.19
+
+  Specify which target to use when evaluating generator expressions that
+  require a target for evaluation (e.g. ``$<COMPILE_FEATURES:...>``,
+  ``$<TARGET_PROPERTY:prop>``).
+
+``NO_SOURCE_PERMISSIONS``
+  .. versionadded:: 3.20
+
+  The generated file permissions default to the standard 644 value
+  (-rw-r--r--).
+
+``USE_SOURCE_PERMISSIONS``
+  .. versionadded:: 3.20
+
+  Transfer the file permissions of the ``INPUT`` file to the generated file.
+  This is already the default behavior if none of the three permissions-related
+  keywords are given (``NO_SOURCE_PERMISSIONS``, ``USE_SOURCE_PERMISSIONS``
+  or ``FILE_PERMISSIONS``).  The ``USE_SOURCE_PERMISSIONS`` keyword mostly
+  serves as a way of making the intended behavior clearer at the call site.
+  It is an error to specify this option without ``INPUT``.
+
+``FILE_PERMISSIONS <permissions>...``
+  .. versionadded:: 3.20
+
+  Use the specified permissions for the generated file.
+
+``NEWLINE_STYLE <style>``
+  .. versionadded:: 3.20
+
+  Specify the newline style for the generated file.  Specify
+  ``UNIX`` or ``LF`` for ``\n`` newlines, or specify
+  ``DOS``, ``WIN32``, or ``CRLF`` for ``\r\n`` newlines.
+
+Exactly one ``CONTENT`` or ``INPUT`` option must be given.  A specific
+``OUTPUT`` file may be named by at most one invocation of ``file(GENERATE)``.
+Generated files are modified and their timestamp updated on subsequent cmake
+runs only if their content is changed.
+
+Note also that ``file(GENERATE)`` does not create the output file until the
+generation phase. The output file will not yet have been written when the
+``file(GENERATE)`` command returns, it is written only after processing all
+of a project's ``CMakeLists.txt`` files.
+
+.. _CONFIGURE:
+
+.. code-block:: cmake
+
+  file(CONFIGURE OUTPUT output-file
+       CONTENT content
+       [ESCAPE_QUOTES] [@ONLY]
+       [NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])
+
+.. versionadded:: 3.18
+
+Generate an output file using the input given by ``CONTENT`` and substitute
+variable values referenced as ``@VAR@`` or ``${VAR}`` contained therein. The
+substitution rules behave the same as the :command:`configure_file` command.
+In order to match :command:`configure_file`'s behavior, generator expressions
+are not supported for both ``OUTPUT`` and ``CONTENT``.
+
+The arguments are:
+
+``OUTPUT <output-file>``
+  Specify the output file name to generate. A relative path is treated with
+  respect to the value of :variable:`CMAKE_CURRENT_BINARY_DIR`.
+  ``<output-file>`` does not support generator expressions.
+
+``CONTENT <content>``
+  Use the content given explicitly as input.
+  ``<content>`` does not support generator expressions.
+
+``ESCAPE_QUOTES``
+  Escape any substituted quotes with backslashes (C-style).
+
+``@ONLY``
+  Restrict variable replacement to references of the form ``@VAR@``.
+  This is useful for configuring scripts that use ``${VAR}`` syntax.
+
+``NEWLINE_STYLE <style>``
+  Specify the newline style for the output file.  Specify
+  ``UNIX`` or ``LF`` for ``\n`` newlines, or specify
+  ``DOS``, ``WIN32``, or ``CRLF`` for ``\r\n`` newlines.
+
+Filesystem
+^^^^^^^^^^
+
+.. _GLOB:
+.. _GLOB_RECURSE:
+
+.. code-block:: cmake
+
+  file(GLOB <variable>
+       [LIST_DIRECTORIES true|false] [RELATIVE <path>] [CONFIGURE_DEPENDS]
+       [<globbing-expressions>...])
+  file(GLOB_RECURSE <variable> [FOLLOW_SYMLINKS]
+       [LIST_DIRECTORIES true|false] [RELATIVE <path>] [CONFIGURE_DEPENDS]
+       [<globbing-expressions>...])
+
+Generate a list of files that match the ``<globbing-expressions>`` and
+store it into the ``<variable>``.  Globbing expressions are similar to
+regular expressions, but much simpler.  If ``RELATIVE`` flag is
+specified, the results will be returned as relative paths to the given
+path.
+
+.. versionchanged:: 3.6
+  The results will be ordered lexicographically.
+
+On Windows and macOS, globbing is case-insensitive even if the underlying
+filesystem is case-sensitive (both filenames and globbing expressions are
+converted to lowercase before matching).  On other platforms, globbing is
+case-sensitive.
+
+.. versionadded:: 3.3
+  By default ``GLOB`` lists directories - directories are omitted in result if
+  ``LIST_DIRECTORIES`` is set to false.
+
+.. versionadded:: 3.12
+  If the ``CONFIGURE_DEPENDS`` flag is specified, CMake will add logic
+  to the main build system check target to rerun the flagged ``GLOB`` commands
+  at build time. If any of the outputs change, CMake will regenerate the build
+  system.
+
+.. note::
+  We do not recommend using GLOB to collect a list of source files from
+  your source tree.  If no CMakeLists.txt file changes when a source is
+  added or removed then the generated build system cannot know when to
+  ask CMake to regenerate.
+  The ``CONFIGURE_DEPENDS`` flag may not work reliably on all generators, or if
+  a new generator is added in the future that cannot support it, projects using
+  it will be stuck. Even if ``CONFIGURE_DEPENDS`` works reliably, there is
+  still a cost to perform the check on every rebuild.
+
+Examples of globbing expressions include::
+
+  *.cxx      - match all files with extension cxx
+  *.vt?      - match all files with extension vta,...,vtz
+  f[3-5].txt - match files f3.txt, f4.txt, f5.txt
+
+The ``GLOB_RECURSE`` mode will traverse all the subdirectories of the
+matched directory and match the files.  Subdirectories that are symlinks
+are only traversed if ``FOLLOW_SYMLINKS`` is given or policy
+:policy:`CMP0009` is not set to ``NEW``.
+
+.. versionadded:: 3.3
+  By default ``GLOB_RECURSE`` omits directories from result list - setting
+  ``LIST_DIRECTORIES`` to true adds directories to result list.
+  If ``FOLLOW_SYMLINKS`` is given or policy :policy:`CMP0009` is not set to
+  ``NEW`` then ``LIST_DIRECTORIES`` treats symlinks as directories.
+
+Examples of recursive globbing include::
+
+  /dir/*.py  - match all python files in /dir and subdirectories
+
+.. _MAKE_DIRECTORY:
+
+.. code-block:: cmake
+
+  file(MAKE_DIRECTORY [<directories>...])
+
+Create the given directories and their parents as needed.
+
+.. _REMOVE:
+.. _REMOVE_RECURSE:
+
+.. code-block:: cmake
+
+  file(REMOVE [<files>...])
+  file(REMOVE_RECURSE [<files>...])
+
+Remove the given files.  The ``REMOVE_RECURSE`` mode will remove the given
+files and directories, also non-empty directories. No error is emitted if a
+given file does not exist.  Relative input paths are evaluated with respect
+to the current source directory.
+
+.. versionchanged:: 3.15
+  Empty input paths are ignored with a warning.  Previous versions of CMake
+  interpreted empty strings as a relative path with respect to the current
+  directory and removed its contents.
+
+.. _RENAME:
+
+.. code-block:: cmake
+
+  file(RENAME <oldname> <newname>
+       [RESULT <result>]
+       [NO_REPLACE])
+
+Move a file or directory within a filesystem from ``<oldname>`` to
+``<newname>``, replacing the destination atomically.
+
+The options are:
+
+``RESULT <result>``
+  .. versionadded:: 3.21
+
+  Set ``<result>`` variable to ``0`` on success or an error message otherwise.
+  If ``RESULT`` is not specified and the operation fails, an error is emitted.
+
+``NO_REPLACE``
+  .. versionadded:: 3.21
+
+  If the ``<newname>`` path already exists, do not replace it.
+  If ``RESULT <result>`` is used, the result variable will be
+  set to ``NO_REPLACE``.  Otherwise, an error is emitted.
+
+.. _COPY_FILE:
+
+.. code-block:: cmake
+
+  file(COPY_FILE <oldname> <newname>
+       [RESULT <result>]
+       [ONLY_IF_DIFFERENT])
+
+.. versionadded:: 3.21
+
+Copy a file from ``<oldname>`` to ``<newname>``. Directories are not
+supported. Symlinks are ignored and ``<oldfile>``'s content is read and
+written to ``<newname>`` as a new file.
+
+The options are:
+
+``RESULT <result>``
+  Set ``<result>`` variable to ``0`` on success or an error message otherwise.
+  If ``RESULT`` is not specified and the operation fails, an error is emitted.
+
+``ONLY_IF_DIFFERENT``
+  If the ``<newname>`` path already exists, do not replace it if the file's
+  contents are already the same as ``<oldname>`` (this avoids updating
+  ``<newname>``'s timestamp).
+
+This sub-command has some similarities to :command:`configure_file` with the
+``COPYONLY`` option.  An important difference is that :command:`configure_file`
+creates a dependency on the source file, so CMake will be re-run if it changes.
+The ``file(COPY_FILE)`` sub-command does not create such a dependency.
+
+See also the ``file(COPY)`` sub-command just below which provides
+further file-copying capabilities.
+
+.. _COPY:
+.. _INSTALL:
+
+.. code-block:: cmake
+
+  file(<COPY|INSTALL> <files>... DESTINATION <dir>
+       [NO_SOURCE_PERMISSIONS | USE_SOURCE_PERMISSIONS]
+       [FILE_PERMISSIONS <permissions>...]
+       [DIRECTORY_PERMISSIONS <permissions>...]
+       [FOLLOW_SYMLINK_CHAIN]
+       [FILES_MATCHING]
+       [[PATTERN <pattern> | REGEX <regex>]
+        [EXCLUDE] [PERMISSIONS <permissions>...]] [...])
+
+.. note::
+
+  For a simple file copying operation, the ``file(COPY_FILE)`` sub-command
+  just above may be easier to use.
+
+The ``COPY`` signature copies files, directories, and symlinks to a
+destination folder.  Relative input paths are evaluated with respect
+to the current source directory, and a relative destination is
+evaluated with respect to the current build directory.  Copying
+preserves input file timestamps, and optimizes out a file if it exists
+at the destination with the same timestamp.  Copying preserves input
+permissions unless explicit permissions or ``NO_SOURCE_PERMISSIONS``
+are given (default is ``USE_SOURCE_PERMISSIONS``).
+
+.. versionadded:: 3.15
+  If ``FOLLOW_SYMLINK_CHAIN`` is specified, ``COPY`` will recursively resolve
+  the symlinks at the paths given until a real file is found, and install
+  a corresponding symlink in the destination for each symlink encountered. For
+  each symlink that is installed, the resolution is stripped of the directory,
+  leaving only the filename, meaning that the new symlink points to a file in
+  the same directory as the symlink. This feature is useful on some Unix systems,
+  where libraries are installed as a chain of symlinks with version numbers, with
+  less specific versions pointing to more specific versions.
+  ``FOLLOW_SYMLINK_CHAIN`` will install all of these symlinks and the library
+  itself into the destination directory. For example, if you have the following
+  directory structure:
+
+* ``/opt/foo/lib/libfoo.so.1.2.3``
+* ``/opt/foo/lib/libfoo.so.1.2 -> libfoo.so.1.2.3``
+* ``/opt/foo/lib/libfoo.so.1 -> libfoo.so.1.2``
+* ``/opt/foo/lib/libfoo.so -> libfoo.so.1``
+
+and you do:
+
+.. code-block:: cmake
+
+  file(COPY /opt/foo/lib/libfoo.so DESTINATION lib FOLLOW_SYMLINK_CHAIN)
+
+This will install all of the symlinks and ``libfoo.so.1.2.3`` itself into
+``lib``.
+
+See the :command:`install(DIRECTORY)` command for documentation of
+permissions, ``FILES_MATCHING``, ``PATTERN``, ``REGEX``, and
+``EXCLUDE`` options.  Copying directories preserves the structure
+of their content even if options are used to select a subset of
+files.
+
+The ``INSTALL`` signature differs slightly from ``COPY``: it prints
+status messages, and ``NO_SOURCE_PERMISSIONS`` is default.
+
+Installation scripts generated by the :command:`install` command
+use this signature (with some undocumented options for internal use).
+
+.. versionchanged:: 3.22
+
+  The environment variable :envvar:`CMAKE_INSTALL_MODE` can override the
+  default copying behavior of :command:`file(INSTALL)`.
+
+.. _SIZE:
+
+.. code-block:: cmake
+
+  file(SIZE <filename> <variable>)
+
+.. versionadded:: 3.14
+
+Determine the file size of the ``<filename>`` and put the result in
+``<variable>`` variable. Requires that ``<filename>`` is a valid path
+pointing to a file and is readable.
+
+.. _READ_SYMLINK:
+
+.. code-block:: cmake
+
+  file(READ_SYMLINK <linkname> <variable>)
+
+.. versionadded:: 3.14
+
+This subcommand queries the symlink ``<linkname>`` and stores the path it
+points to in the result ``<variable>``.  If ``<linkname>`` does not exist or
+is not a symlink, CMake issues a fatal error.
+
+Note that this command returns the raw symlink path and does not resolve
+a relative path.  The following is an example of how to ensure that an
+absolute path is obtained:
+
+.. code-block:: cmake
+
+  set(linkname "/path/to/foo.sym")
+  file(READ_SYMLINK "${linkname}" result)
+  if(NOT IS_ABSOLUTE "${result}")
+    get_filename_component(dir "${linkname}" DIRECTORY)
+    set(result "${dir}/${result}")
+  endif()
+
+.. _CREATE_LINK:
+
+.. code-block:: cmake
+
+  file(CREATE_LINK <original> <linkname>
+       [RESULT <result>] [COPY_ON_ERROR] [SYMBOLIC])
+
+.. versionadded:: 3.14
+
+Create a link ``<linkname>`` that points to ``<original>``.
+It will be a hard link by default, but providing the ``SYMBOLIC`` option
+results in a symbolic link instead.  Hard links require that ``original``
+exists and is a file, not a directory.  If ``<linkname>`` already exists,
+it will be overwritten.
+
+The ``<result>`` variable, if specified, receives the status of the operation.
+It is set to ``0`` upon success or an error message otherwise.  If ``RESULT``
+is not specified and the operation fails, a fatal error is emitted.
+
+Specifying ``COPY_ON_ERROR`` enables copying the file as a fallback if
+creating the link fails.  It can be useful for handling situations such as
+``<original>`` and ``<linkname>`` being on different drives or mount points,
+which would make them unable to support a hard link.
+
+.. _CHMOD:
+
+.. code-block:: cmake
+
+  file(CHMOD <files>... <directories>...
+      [PERMISSIONS <permissions>...]
+      [FILE_PERMISSIONS <permissions>...]
+      [DIRECTORY_PERMISSIONS <permissions>...])
+
+.. versionadded:: 3.19
+
+Set the permissions for the ``<files>...`` and ``<directories>...`` specified.
+Valid permissions are  ``OWNER_READ``, ``OWNER_WRITE``, ``OWNER_EXECUTE``,
+``GROUP_READ``, ``GROUP_WRITE``, ``GROUP_EXECUTE``, ``WORLD_READ``,
+``WORLD_WRITE``, ``WORLD_EXECUTE``, ``SETUID``, ``SETGID``.
+
+Valid combination of keywords are:
+
+``PERMISSIONS``
+  All items are changed.
+
+``FILE_PERMISSIONS``
+  Only files are changed.
+
+``DIRECTORY_PERMISSIONS``
+  Only directories are changed.
+
+``PERMISSIONS`` and ``FILE_PERMISSIONS``
+  ``FILE_PERMISSIONS`` overrides ``PERMISSIONS`` for files.
+
+``PERMISSIONS`` and ``DIRECTORY_PERMISSIONS``
+  ``DIRECTORY_PERMISSIONS`` overrides ``PERMISSIONS`` for directories.
+
+``FILE_PERMISSIONS`` and ``DIRECTORY_PERMISSIONS``
+  Use ``FILE_PERMISSIONS`` for files and ``DIRECTORY_PERMISSIONS`` for
+  directories.
+
+
+.. _CHMOD_RECURSE:
+
+.. code-block:: cmake
+
+  file(CHMOD_RECURSE <files>... <directories>...
+       [PERMISSIONS <permissions>...]
+       [FILE_PERMISSIONS <permissions>...]
+       [DIRECTORY_PERMISSIONS <permissions>...])
+
+.. versionadded:: 3.19
+
+Same as `CHMOD`_, but change the permissions of files and directories present in
+the ``<directories>...`` recursively.
+
+Path Conversion
+^^^^^^^^^^^^^^^
+
+.. _REAL_PATH:
+
+.. code-block:: cmake
+
+  file(REAL_PATH <path> <out-var> [BASE_DIRECTORY <dir>] [EXPAND_TILDE])
+
+.. versionadded:: 3.19
+
+Compute the absolute path to an existing file or directory with symlinks
+resolved.
+
+``BASE_DIRECTORY <dir>``
+  If the provided ``<path>`` is a relative path, it is evaluated relative to the
+  given base directory ``<dir>``. If no base directory is provided, the default
+  base directory will be :variable:`CMAKE_CURRENT_SOURCE_DIR`.
+
+``EXPAND_TILDE``
+  .. versionadded:: 3.21
+
+  If the ``<path>`` is ``~`` or starts with ``~/``, the ``~`` is replaced by
+  the user's home directory.  The path to the home directory is obtained from
+  environment variables.  On Windows, the ``USERPROFILE`` environment variable
+  is used, falling back to the ``HOME`` environment variable if ``USERPROFILE``
+  is not defined.  On all other platforms, only ``HOME`` is used.
+
+.. _RELATIVE_PATH:
+
+.. code-block:: cmake
+
+  file(RELATIVE_PATH <variable> <directory> <file>)
+
+Compute the relative path from a ``<directory>`` to a ``<file>`` and
+store it in the ``<variable>``.
+
+.. _TO_CMAKE_PATH:
+.. _TO_NATIVE_PATH:
+
+.. code-block:: cmake
+
+  file(TO_CMAKE_PATH "<path>" <variable>)
+  file(TO_NATIVE_PATH "<path>" <variable>)
+
+The ``TO_CMAKE_PATH`` mode converts a native ``<path>`` into a cmake-style
+path with forward-slashes (``/``).  The input can be a single path or a
+system search path like ``$ENV{PATH}``.  A search path will be converted
+to a cmake-style list separated by ``;`` characters.
+
+The ``TO_NATIVE_PATH`` mode converts a cmake-style ``<path>`` into a native
+path with platform-specific slashes (``\`` on Windows hosts and ``/``
+elsewhere).
+
+Always use double quotes around the ``<path>`` to be sure it is treated
+as a single argument to this command.
+
+Transfer
+^^^^^^^^
+
+.. _DOWNLOAD:
+.. _UPLOAD:
+
+.. code-block:: cmake
+
+  file(DOWNLOAD <url> [<file>] [<options>...])
+  file(UPLOAD   <file> <url> [<options>...])
+
+The ``DOWNLOAD`` subcommand downloads the given ``<url>`` to a local ``<file>``.
+The ``UPLOAD`` mode uploads a local ``<file>`` to a given ``<url>``.
+
+.. versionadded:: 3.19
+  If ``<file>`` is not specified for ``file(DOWNLOAD)``, the file is not saved.
+  This can be useful if you want to know if a file can be downloaded (for example,
+  to check that it exists) without actually saving it anywhere.
+
+Options to both ``DOWNLOAD`` and ``UPLOAD`` are:
+
+``INACTIVITY_TIMEOUT <seconds>``
+  Terminate the operation after a period of inactivity.
+
+``LOG <variable>``
+  Store a human-readable log of the operation in a variable.
+
+``SHOW_PROGRESS``
+  Print progress information as status messages until the operation is
+  complete.
+
+``STATUS <variable>``
+  Store the resulting status of the operation in a variable.
+  The status is a ``;`` separated list of length 2.
+  The first element is the numeric return value for the operation,
+  and the second element is a string value for the error.
+  A ``0`` numeric error means no error in the operation.
+
+``TIMEOUT <seconds>``
+  Terminate the operation after a given total time has elapsed.
+
+``USERPWD <username>:<password>``
+  .. versionadded:: 3.7
+
+  Set username and password for operation.
+
+``HTTPHEADER <HTTP-header>``
+  .. versionadded:: 3.7
+
+  HTTP header for operation. Suboption can be repeated several times.
+
+``NETRC <level>``
+  .. versionadded:: 3.11
+
+  Specify whether the .netrc file is to be used for operation.  If this
+  option is not specified, the value of the :variable:`CMAKE_NETRC` variable
+  will be used instead.
+  Valid levels are:
+
+  ``IGNORED``
+    The .netrc file is ignored.
+    This is the default.
+  ``OPTIONAL``
+    The .netrc file is optional, and information in the URL is preferred.
+    The file will be scanned to find which ever information is not specified
+    in the URL.
+  ``REQUIRED``
+    The .netrc file is required, and information in the URL is ignored.
+
+``NETRC_FILE <file>``
+  .. versionadded:: 3.11
+
+  Specify an alternative .netrc file to the one in your home directory,
+  if the ``NETRC`` level is ``OPTIONAL`` or ``REQUIRED``. If this option
+  is not specified, the value of the :variable:`CMAKE_NETRC_FILE` variable will
+  be used instead.
+
+``TLS_VERIFY <ON|OFF>``
+  Specify whether to verify the server certificate for ``https://`` URLs.
+  The default is to *not* verify. If this option is not specified, the value
+  of the :variable:`CMAKE_TLS_VERIFY` variable will be used instead.
+
+  .. versionadded:: 3.18
+    Added support to ``file(UPLOAD)``.
+
+``TLS_CAINFO <file>``
+  Specify a custom Certificate Authority file for ``https://`` URLs. If this
+  option is not specified, the value of the :variable:`CMAKE_TLS_CAINFO`
+  variable will be used instead.
+
+  .. versionadded:: 3.18
+    Added support to ``file(UPLOAD)``.
+
+For ``https://`` URLs CMake must be built with OpenSSL support.  ``TLS/SSL``
+certificates are not checked by default.  Set ``TLS_VERIFY`` to ``ON`` to
+check certificates.
+
+Additional options to ``DOWNLOAD`` are:
+
+``EXPECTED_HASH ALGO=<value>``
+
+  Verify that the downloaded content hash matches the expected value, where
+  ``ALGO`` is one of the algorithms supported by ``file(<HASH>)``.
+  If it does not match, the operation fails with an error. It is an error to
+  specify this if ``DOWNLOAD`` is not given a ``<file>``.
+
+``EXPECTED_MD5 <value>``
+  Historical short-hand for ``EXPECTED_HASH MD5=<value>``. It is an error to
+  specify this if ``DOWNLOAD`` is not given a ``<file>``.
+
+Locking
+^^^^^^^
+
+.. _LOCK:
+
+.. code-block:: cmake
+
+  file(LOCK <path> [DIRECTORY] [RELEASE]
+       [GUARD <FUNCTION|FILE|PROCESS>]
+       [RESULT_VARIABLE <variable>]
+       [TIMEOUT <seconds>])
+
+.. versionadded:: 3.2
+
+Lock a file specified by ``<path>`` if no ``DIRECTORY`` option present and file
+``<path>/cmake.lock`` otherwise. File will be locked for scope defined by
+``GUARD`` option (default value is ``PROCESS``). ``RELEASE`` option can be used
+to unlock file explicitly. If option ``TIMEOUT`` is not specified CMake will
+wait until lock succeed or until fatal error occurs. If ``TIMEOUT`` is set to
+``0`` lock will be tried once and result will be reported immediately. If
+``TIMEOUT`` is not ``0`` CMake will try to lock file for the period specified
+by ``<seconds>`` value. Any errors will be interpreted as fatal if there is no
+``RESULT_VARIABLE`` option. Otherwise result will be stored in ``<variable>``
+and will be ``0`` on success or error message on failure.
+
+Note that lock is advisory - there is no guarantee that other processes will
+respect this lock, i.e. lock synchronize two or more CMake instances sharing
+some modifiable resources. Similar logic applied to ``DIRECTORY`` option -
+locking parent directory doesn't prevent other ``LOCK`` commands to lock any
+child directory or file.
+
+Trying to lock file twice is not allowed.  Any intermediate directories and
+file itself will be created if they not exist.  ``GUARD`` and ``TIMEOUT``
+options ignored on ``RELEASE`` operation.
+
+Archiving
+^^^^^^^^^
+
+.. _ARCHIVE_CREATE:
+
+.. code-block:: cmake
+
+  file(ARCHIVE_CREATE OUTPUT <archive>
+    PATHS <paths>...
+    [FORMAT <format>]
+    [COMPRESSION <compression> [COMPRESSION_LEVEL <compression-level>]]
+    [MTIME <mtime>]
+    [VERBOSE])
+
+.. versionadded:: 3.18
+
+Creates the specified ``<archive>`` file with the files and directories
+listed in ``<paths>``.  Note that ``<paths>`` must list actual files or
+directories, wildcards are not supported.
+
+Use the ``FORMAT`` option to specify the archive format.  Supported values
+for ``<format>`` are ``7zip``, ``gnutar``, ``pax``, ``paxr``, ``raw`` and
+``zip``.  If ``FORMAT`` is not given, the default format is ``paxr``.
+
+Some archive formats allow the type of compression to be specified.
+The ``7zip`` and ``zip`` archive formats already imply a specific type of
+compression.  The other formats use no compression by default, but can be
+directed to do so with the ``COMPRESSION`` option.  Valid values for
+``<compression>`` are ``None``, ``BZip2``, ``GZip``, ``XZ``, and ``Zstd``.
+
+.. versionadded:: 3.19
+  The compression level can be specified with the ``COMPRESSION_LEVEL`` option.
+  The ``<compression-level>`` should be between 0-9, with the default being 0.
+  The ``COMPRESSION`` option must be present when ``COMPRESSION_LEVEL`` is given.
+
+.. note::
+  With ``FORMAT`` set to ``raw`` only one file will be compressed with the
+  compression type specified by ``COMPRESSION``.
+
+The ``VERBOSE`` option enables verbose output for the archive operation.
+
+To specify the modification time recorded in tarball entries, use
+the ``MTIME`` option.
+
+.. _ARCHIVE_EXTRACT:
+
+.. code-block:: cmake
+
+  file(ARCHIVE_EXTRACT INPUT <archive>
+    [DESTINATION <dir>]
+    [PATTERNS <patterns>...]
+    [LIST_ONLY]
+    [VERBOSE])
+
+.. versionadded:: 3.18
+
+Extracts or lists the content of the specified ``<archive>``.
+
+The directory where the content of the archive will be extracted to can
+be specified using the ``DESTINATION`` option.  If the directory does not
+exist, it will be created.  If ``DESTINATION`` is not given, the current
+binary directory will be used.
+
+If required, you may select which files and directories to list or extract
+from the archive using the specified ``<patterns>``.  Wildcards are supported.
+If the ``PATTERNS`` option is not given, the entire archive will be listed or
+extracted.
+
+``LIST_ONLY`` will list the files in the archive rather than extract them.
+
+With ``VERBOSE``, the command will produce verbose output.
diff --git a/share/cmake-3.22/Help/command/find_file.rst b/share/cmake-3.22/Help/command/find_file.rst
new file mode 100644
index 0000000..39dfb85
--- /dev/null
+++ b/share/cmake-3.22/Help/command/find_file.rst
@@ -0,0 +1,37 @@
+find_file
+---------
+
+.. |FIND_XXX| replace:: find_file
+.. |NAMES| replace:: NAMES name1 [name2 ...]
+.. |SEARCH_XXX| replace:: full path to a file
+.. |SEARCH_XXX_DESC| replace:: full path to named file
+.. |prefix_XXX_SUBDIR| replace:: ``<prefix>/include``
+.. |entry_XXX_SUBDIR| replace:: ``<entry>/include``
+
+.. |FIND_PACKAGE_ROOT_PREFIX_PATH_XXX| replace::
+   ``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`
+   is set, and |FIND_PACKAGE_ROOT_PREFIX_PATH_XXX_SUBDIR|
+.. |CMAKE_PREFIX_PATH_XXX| replace::
+   ``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`
+   is set, and |CMAKE_PREFIX_PATH_XXX_SUBDIR|
+.. |CMAKE_XXX_PATH| replace:: :variable:`CMAKE_INCLUDE_PATH`
+.. |CMAKE_XXX_MAC_PATH| replace:: :variable:`CMAKE_FRAMEWORK_PATH`
+
+.. |SYSTEM_ENVIRONMENT_PATH_XXX| replace:: The directories in ``INCLUDE``
+   and ``PATH``.
+.. |SYSTEM_ENVIRONMENT_PATH_WINDOWS_XXX| replace:: On Windows hosts:
+      ``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`
+      is set, and |SYSTEM_ENVIRONMENT_PREFIX_PATH_XXX_SUBDIR|.
+
+.. |CMAKE_SYSTEM_PREFIX_PATH_XXX| replace::
+   ``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`
+   is set, and |CMAKE_SYSTEM_PREFIX_PATH_XXX_SUBDIR|
+.. |CMAKE_SYSTEM_XXX_PATH| replace::
+   :variable:`CMAKE_SYSTEM_INCLUDE_PATH`
+.. |CMAKE_SYSTEM_XXX_MAC_PATH| replace::
+   :variable:`CMAKE_SYSTEM_FRAMEWORK_PATH`
+
+.. |CMAKE_FIND_ROOT_PATH_MODE_XXX| replace::
+   :variable:`CMAKE_FIND_ROOT_PATH_MODE_INCLUDE`
+
+.. include:: FIND_XXX.txt
diff --git a/share/cmake-3.22/Help/command/find_library.rst b/share/cmake-3.22/Help/command/find_library.rst
new file mode 100644
index 0000000..ab957ce
--- /dev/null
+++ b/share/cmake-3.22/Help/command/find_library.rst
@@ -0,0 +1,82 @@
+find_library
+------------
+
+.. |FIND_XXX| replace:: find_library
+.. |NAMES| replace:: NAMES name1 [name2 ...] [NAMES_PER_DIR]
+.. |SEARCH_XXX| replace:: library
+.. |SEARCH_XXX_DESC| replace:: library
+.. |prefix_XXX_SUBDIR| replace:: ``<prefix>/lib``
+.. |entry_XXX_SUBDIR| replace:: ``<entry>/lib``
+
+.. |FIND_PACKAGE_ROOT_PREFIX_PATH_XXX| replace::
+   ``<prefix>/lib/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE` is set,
+   and |FIND_PACKAGE_ROOT_PREFIX_PATH_XXX_SUBDIR|
+.. |CMAKE_PREFIX_PATH_XXX| replace::
+   ``<prefix>/lib/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE` is set,
+   and |CMAKE_PREFIX_PATH_XXX_SUBDIR|
+.. |CMAKE_XXX_PATH| replace:: :variable:`CMAKE_LIBRARY_PATH`
+.. |CMAKE_XXX_MAC_PATH| replace:: :variable:`CMAKE_FRAMEWORK_PATH`
+
+.. |SYSTEM_ENVIRONMENT_PATH_XXX| replace:: The directories in ``LIB``
+   and ``PATH``.
+.. |SYSTEM_ENVIRONMENT_PATH_WINDOWS_XXX| replace:: On Windows hosts:
+      ``<prefix>/lib/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`
+      is set, and |SYSTEM_ENVIRONMENT_PREFIX_PATH_XXX_SUBDIR|.
+
+.. |CMAKE_SYSTEM_PREFIX_PATH_XXX| replace::
+   ``<prefix>/lib/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE` is set,
+   and |CMAKE_SYSTEM_PREFIX_PATH_XXX_SUBDIR|
+.. |CMAKE_SYSTEM_XXX_PATH| replace::
+   :variable:`CMAKE_SYSTEM_LIBRARY_PATH`
+.. |CMAKE_SYSTEM_XXX_MAC_PATH| replace::
+   :variable:`CMAKE_SYSTEM_FRAMEWORK_PATH`
+
+.. |CMAKE_FIND_ROOT_PATH_MODE_XXX| replace::
+   :variable:`CMAKE_FIND_ROOT_PATH_MODE_LIBRARY`
+
+.. include:: FIND_XXX.txt
+
+When more than one value is given to the ``NAMES`` option this command by
+default will consider one name at a time and search every directory
+for it.  The ``NAMES_PER_DIR`` option tells this command to consider one
+directory at a time and search for all names in it.
+
+Each library name given to the ``NAMES`` option is first considered
+as a library file name and then considered with platform-specific
+prefixes (e.g. ``lib``) and suffixes (e.g. ``.so``).  Therefore one
+may specify library file names such as ``libfoo.a`` directly.
+This can be used to locate static libraries on UNIX-like systems.
+
+If the library found is a framework, then ``<VAR>`` will be set to the full
+path to the framework ``<fullPath>/A.framework``.  When a full path to a
+framework is used as a library, CMake will use a ``-framework A``, and a
+``-F<fullPath>`` to link the framework to the target.
+
+If the :variable:`CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX` variable is set all
+search paths will be tested as normal, with the suffix appended, and with
+all matches of ``lib/`` replaced with
+``lib${CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX}/``.  This variable overrides
+the :prop_gbl:`FIND_LIBRARY_USE_LIB32_PATHS`,
+:prop_gbl:`FIND_LIBRARY_USE_LIBX32_PATHS`,
+and :prop_gbl:`FIND_LIBRARY_USE_LIB64_PATHS` global properties.
+
+If the :prop_gbl:`FIND_LIBRARY_USE_LIB32_PATHS` global property is set
+all search paths will be tested as normal, with ``32/`` appended, and
+with all matches of ``lib/`` replaced with ``lib32/``.  This property is
+automatically set for the platforms that are known to need it if at
+least one of the languages supported by the :command:`project` command
+is enabled.
+
+If the :prop_gbl:`FIND_LIBRARY_USE_LIBX32_PATHS` global property is set
+all search paths will be tested as normal, with ``x32/`` appended, and
+with all matches of ``lib/`` replaced with ``libx32/``.  This property is
+automatically set for the platforms that are known to need it if at
+least one of the languages supported by the :command:`project` command
+is enabled.
+
+If the :prop_gbl:`FIND_LIBRARY_USE_LIB64_PATHS` global property is set
+all search paths will be tested as normal, with ``64/`` appended, and
+with all matches of ``lib/`` replaced with ``lib64/``.  This property is
+automatically set for the platforms that are known to need it if at
+least one of the languages supported by the :command:`project` command
+is enabled.
diff --git a/share/cmake-3.22/Help/command/find_package.rst b/share/cmake-3.22/Help/command/find_package.rst
new file mode 100644
index 0000000..1a79a8a
--- /dev/null
+++ b/share/cmake-3.22/Help/command/find_package.rst
@@ -0,0 +1,618 @@
+find_package
+------------
+
+.. only:: html
+
+   .. contents::
+
+Find a package (usually provided by something external to the project),
+and load its package-specific details.
+
+Search Modes
+^^^^^^^^^^^^
+
+The command has two very distinct ways of conducting the search:
+
+**Module mode**
+  In this mode, CMake searches for a file called ``Find<PackageName>.cmake``,
+  looking first in the locations listed in the :variable:`CMAKE_MODULE_PATH`,
+  then among the :ref:`Find Modules` provided by the CMake installation.
+  If the file is found, it is read and processed by CMake.  It is responsible
+  for finding the package, checking the version, and producing any needed
+  messages.  Some Find modules provide limited or no support for versioning;
+  check the Find module's documentation.
+
+  The ``Find<PackageName>.cmake`` file is not typically provided by the
+  package itself.  Rather, it is normally provided by something external to
+  the package, such as the operating system, CMake itself, or even the project
+  from which the ``find_package()`` command was called.  Being externally
+  provided, :ref:`Find Modules` tend to be heuristic in nature and are
+  susceptible to becoming out-of-date.  They typically search for certain
+  libraries, files and other package artifacts.
+
+  Module mode is only supported by the
+  :ref:`basic command signature <Basic Signature>`.
+
+**Config mode**
+  In this mode, CMake searches for a file called
+  ``<lowercasePackageName>-config.cmake`` or ``<PackageName>Config.cmake``.
+  It will also look for ``<lowercasePackageName>-config-version.cmake`` or
+  ``<PackageName>ConfigVersion.cmake`` if version details were specified
+  (see :ref:`version selection` for an explanation of how these separate
+  version files are used).
+
+  In config mode, the command can be given a list of names to search for
+  as package names.  The locations where CMake searches for the config and
+  version files is considerably more complicated than for Module mode
+  (see :ref:`search procedure`).
+
+  The config and version files are typically installed as part of the
+  package, so they tend to be more reliable than Find modules.  They usually
+  contain direct knowledge of the package contents, so no searching or
+  heuristics are needed within the config or version files themselves.
+
+  Config mode is supported by both the :ref:`basic <Basic Signature>` and
+  :ref:`full <Full Signature>` command signatures.
+
+The command arguments determine which of the above modes is used.  When the
+`basic signature`_ is used, the command searches in Module mode first.
+If the package is not found, the search falls back to Config mode.
+A user may set the :variable:`CMAKE_FIND_PACKAGE_PREFER_CONFIG` variable
+to true to reverse the priority and direct CMake to search using Config mode
+first before falling back to Module mode.  The basic signature can also be
+forced to use only Module mode with a ``MODULE`` keyword.  If the
+`full signature`_ is used, the command only searches in Config mode.
+
+Where possible, user code should generally look for packages using the
+`basic signature`_, since that allows the package to be found with either mode.
+Project maintainers wishing to provide a config package should understand
+the bigger picture, as explained in :ref:`Full Signature` and all subsequent
+sections on this page.
+
+.. _`basic signature`:
+
+Basic Signature
+^^^^^^^^^^^^^^^
+
+.. code-block:: cmake
+
+  find_package(<PackageName> [version] [EXACT] [QUIET] [MODULE]
+               [REQUIRED] [[COMPONENTS] [components...]]
+               [OPTIONAL_COMPONENTS components...]
+               [NO_POLICY_SCOPE])
+
+The basic signature is supported by both Module and Config modes.
+The ``MODULE`` keyword implies that only Module mode can be used to find
+the package, with no fallback to Config mode.
+
+Regardless of the mode used, a ``<PackageName>_FOUND`` variable will be
+set to indicate whether the package was found.  When the package is found,
+package-specific information may be provided through other variables and
+:ref:`Imported Targets` documented by the package itself.  The
+``QUIET`` option disables informational messages, including those indicating
+that the package cannot be found if it is not ``REQUIRED``.  The ``REQUIRED``
+option stops processing with an error message if the package cannot be found.
+
+A package-specific list of required components may be listed after the
+``COMPONENTS`` keyword.  If any of these components are not able to be
+satisfied, the package overall is considered to be not found.  If the
+``REQUIRED`` option is also present, this is treated as a fatal error,
+otherwise execution still continues.  As a form of shorthand, if the
+``REQUIRED`` option is present, the ``COMPONENTS`` keyword can be omitted
+and the required components can be listed directly after ``REQUIRED``.
+
+Additional optional components may be listed after
+``OPTIONAL_COMPONENTS``.  If these cannot be satisfied, the package overall
+can still be considered found, as long as all required components are
+satisfied.
+
+The set of available components and their meaning are defined by the
+target package.  Formally, it is up to the target package how to
+interpret the component information given to it, but it should follow
+the expectations stated above.  For calls where no components are specified,
+there is no single expected behavior and target packages should clearly
+define what occurs in such cases.  Common arrangements include assuming it
+should find all components, no components or some well-defined subset of the
+available components.
+
+.. _FIND_PACKAGE_VERSION_FORMAT:
+
+The ``[version]`` argument requests a version with which the package found
+should be compatible. There are two possible forms in which it may be
+specified:
+
+  * A single version with the format ``major[.minor[.patch[.tweak]]]``, where
+    each component is a numeric value.
+  * A version range with the format ``versionMin...[<]versionMax`` where
+    ``versionMin`` and ``versionMax`` have the same format and constraints
+    on components being integers as the single version.  By default, both end
+    points are included.  By specifying ``<``, the upper end point will be
+    excluded. Version ranges are only supported with CMake 3.19 or later.
+
+The ``EXACT`` option requests that the version be matched exactly. This option
+is incompatible with the specification of a version range.
+
+If no ``[version]`` and/or component list is given to a recursive invocation
+inside a find-module, the corresponding arguments are forwarded
+automatically from the outer call (including the ``EXACT`` flag for
+``[version]``).  Version support is currently provided only on a
+package-by-package basis (see the `Version Selection`_ section below).
+When a version range is specified but the package is only designed to expect
+a single version, the package will ignore the upper end point of the range and
+only take the single version at the lower end of the range into account.
+
+See the :command:`cmake_policy` command documentation for discussion
+of the ``NO_POLICY_SCOPE`` option.
+
+.. _`full signature`:
+
+Full Signature
+^^^^^^^^^^^^^^
+
+.. code-block:: cmake
+
+  find_package(<PackageName> [version] [EXACT] [QUIET]
+               [REQUIRED] [[COMPONENTS] [components...]]
+               [OPTIONAL_COMPONENTS components...]
+               [CONFIG|NO_MODULE]
+               [NO_POLICY_SCOPE]
+               [NAMES name1 [name2 ...]]
+               [CONFIGS config1 [config2 ...]]
+               [HINTS path1 [path2 ... ]]
+               [PATHS path1 [path2 ... ]]
+               [PATH_SUFFIXES suffix1 [suffix2 ...]]
+               [NO_DEFAULT_PATH]
+               [NO_PACKAGE_ROOT_PATH]
+               [NO_CMAKE_PATH]
+               [NO_CMAKE_ENVIRONMENT_PATH]
+               [NO_SYSTEM_ENVIRONMENT_PATH]
+               [NO_CMAKE_PACKAGE_REGISTRY]
+               [NO_CMAKE_BUILDS_PATH] # Deprecated; does nothing.
+               [NO_CMAKE_SYSTEM_PATH]
+               [NO_CMAKE_SYSTEM_PACKAGE_REGISTRY]
+               [CMAKE_FIND_ROOT_PATH_BOTH |
+                ONLY_CMAKE_FIND_ROOT_PATH |
+                NO_CMAKE_FIND_ROOT_PATH])
+
+The ``CONFIG`` option, the synonymous ``NO_MODULE`` option, or the use
+of options not specified in the `basic signature`_ all enforce pure Config
+mode.  In pure Config mode, the command skips Module mode search and
+proceeds at once with Config mode search.
+
+Config mode search attempts to locate a configuration file provided by the
+package to be found.  A cache entry called ``<PackageName>_DIR`` is created to
+hold the directory containing the file.  By default the command
+searches for a package with the name ``<PackageName>``.  If the ``NAMES`` option
+is given the names following it are used instead of ``<PackageName>``.
+The command searches for a file called ``<PackageName>Config.cmake`` or
+``<lowercasePackageName>-config.cmake`` for each name specified.
+A replacement set of possible configuration file names may be given
+using the ``CONFIGS`` option.  The :ref:`search procedure` is specified below.
+Once found, any :ref:`version constraint <version selection>` is checked,
+and if satisfied, the configuration file is read and processed by CMake.
+Since the file is provided by the package it already knows the
+location of package contents.  The full path to the configuration file
+is stored in the cmake variable ``<PackageName>_CONFIG``.
+
+All configuration files which have been considered by CMake while
+searching for the package with an appropriate version are stored in the
+``<PackageName>_CONSIDERED_CONFIGS`` variable, and the associated versions
+in the ``<PackageName>_CONSIDERED_VERSIONS`` variable.
+
+If the package configuration file cannot be found CMake will generate
+an error describing the problem unless the ``QUIET`` argument is
+specified.  If ``REQUIRED`` is specified and the package is not found a
+fatal error is generated and the configure step stops executing.  If
+``<PackageName>_DIR`` has been set to a directory not containing a
+configuration file CMake will ignore it and search from scratch.
+
+Package maintainers providing CMake package configuration files are
+encouraged to name and install them such that the :ref:`search procedure`
+outlined below will find them without requiring use of additional options.
+
+.. _`search procedure`:
+
+Config Mode Search Procedure
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. note::
+  When Config mode is used, this search procedure is applied regardless of
+  whether the :ref:`full <full signature>` or :ref:`basic <basic signature>`
+  signature was given.
+
+CMake constructs a set of possible installation prefixes for the
+package.  Under each prefix several directories are searched for a
+configuration file.  The tables below show the directories searched.
+Each entry is meant for installation trees following Windows (``W``), UNIX
+(``U``), or Apple (``A``) conventions::
+
+  <prefix>/                                                       (W)
+  <prefix>/(cmake|CMake)/                                         (W)
+  <prefix>/<name>*/                                               (W)
+  <prefix>/<name>*/(cmake|CMake)/                                 (W)
+  <prefix>/(lib/<arch>|lib*|share)/cmake/<name>*/                 (U)
+  <prefix>/(lib/<arch>|lib*|share)/<name>*/                       (U)
+  <prefix>/(lib/<arch>|lib*|share)/<name>*/(cmake|CMake)/         (U)
+  <prefix>/<name>*/(lib/<arch>|lib*|share)/cmake/<name>*/         (W/U)
+  <prefix>/<name>*/(lib/<arch>|lib*|share)/<name>*/               (W/U)
+  <prefix>/<name>*/(lib/<arch>|lib*|share)/<name>*/(cmake|CMake)/ (W/U)
+
+On systems supporting macOS :prop_tgt:`FRAMEWORK` and :prop_tgt:`BUNDLE`, the
+following directories are searched for Frameworks or Application Bundles
+containing a configuration file::
+
+  <prefix>/<name>.framework/Resources/                    (A)
+  <prefix>/<name>.framework/Resources/CMake/              (A)
+  <prefix>/<name>.framework/Versions/*/Resources/         (A)
+  <prefix>/<name>.framework/Versions/*/Resources/CMake/   (A)
+  <prefix>/<name>.app/Contents/Resources/                 (A)
+  <prefix>/<name>.app/Contents/Resources/CMake/           (A)
+
+In all cases the ``<name>`` is treated as case-insensitive and corresponds
+to any of the names specified (``<PackageName>`` or names given by ``NAMES``).
+
+Paths with ``lib/<arch>`` are enabled if the
+:variable:`CMAKE_LIBRARY_ARCHITECTURE` variable is set. ``lib*`` includes one
+or more of the values ``lib64``, ``lib32``, ``libx32`` or ``lib`` (searched in
+that order).
+
+* Paths with ``lib64`` are searched on 64 bit platforms if the
+  :prop_gbl:`FIND_LIBRARY_USE_LIB64_PATHS` property is set to ``TRUE``.
+* Paths with ``lib32`` are searched on 32 bit platforms if the
+  :prop_gbl:`FIND_LIBRARY_USE_LIB32_PATHS` property is set to ``TRUE``.
+* Paths with ``libx32`` are searched on platforms using the x32 ABI
+  if the :prop_gbl:`FIND_LIBRARY_USE_LIBX32_PATHS` property is set to ``TRUE``.
+* The ``lib`` path is always searched.
+
+If ``PATH_SUFFIXES`` is specified, the suffixes are appended to each
+(``W``) or (``U``) directory entry one-by-one.
+
+This set of directories is intended to work in cooperation with
+projects that provide configuration files in their installation trees.
+Directories above marked with (``W``) are intended for installations on
+Windows where the prefix may point at the top of an application's
+installation directory.  Those marked with (``U``) are intended for
+installations on UNIX platforms where the prefix is shared by multiple
+packages.  This is merely a convention, so all (``W``) and (``U``) directories
+are still searched on all platforms.  Directories marked with (``A``) are
+intended for installations on Apple platforms.  The
+:variable:`CMAKE_FIND_FRAMEWORK` and :variable:`CMAKE_FIND_APPBUNDLE`
+variables determine the order of preference.
+
+The set of installation prefixes is constructed using the following
+steps.  If ``NO_DEFAULT_PATH`` is specified all ``NO_*`` options are
+enabled.
+
+1. .. versionadded:: 3.12
+    Search paths specified in the :variable:`<PackageName>_ROOT` CMake
+    variable and the :envvar:`<PackageName>_ROOT` environment variable,
+    where ``<PackageName>`` is the package to be found.
+    The package root variables are maintained as a stack so if
+    called from within a find module, root paths from the parent's find
+    module will also be searched after paths for the current package.
+    This can be skipped if ``NO_PACKAGE_ROOT_PATH`` is passed or by setting
+    the :variable:`CMAKE_FIND_USE_PACKAGE_ROOT_PATH` to ``FALSE``.
+    See policy :policy:`CMP0074`.
+
+2. Search paths specified in cmake-specific cache variables.  These
+   are intended to be used on the command line with a ``-DVAR=value``.
+   The values are interpreted as :ref:`semicolon-separated lists <CMake Language Lists>`.
+   This can be skipped if ``NO_CMAKE_PATH`` is passed or by setting the
+   :variable:`CMAKE_FIND_USE_CMAKE_PATH` to ``FALSE``:
+
+   * :variable:`CMAKE_PREFIX_PATH`
+   * :variable:`CMAKE_FRAMEWORK_PATH`
+   * :variable:`CMAKE_APPBUNDLE_PATH`
+
+3. Search paths specified in cmake-specific environment variables.
+   These are intended to be set in the user's shell configuration,
+   and therefore use the host's native path separator
+   (``;`` on Windows and ``:`` on UNIX).
+   This can be skipped if ``NO_CMAKE_ENVIRONMENT_PATH`` is passed or by setting
+   the :variable:`CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH` to ``FALSE``:
+
+   * ``<PackageName>_DIR``
+   * :envvar:`CMAKE_PREFIX_PATH`
+   * ``CMAKE_FRAMEWORK_PATH``
+   * ``CMAKE_APPBUNDLE_PATH``
+
+4. Search paths specified by the ``HINTS`` option.  These should be paths
+   computed by system introspection, such as a hint provided by the
+   location of another item already found.  Hard-coded guesses should
+   be specified with the ``PATHS`` option.
+
+5. Search the standard system environment variables.  This can be
+   skipped if ``NO_SYSTEM_ENVIRONMENT_PATH`` is passed  or by setting the
+   :variable:`CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH` to ``FALSE``. Path entries
+   ending in ``/bin`` or ``/sbin`` are automatically converted to their
+   parent directories:
+
+   * ``PATH``
+
+6. Search paths stored in the CMake :ref:`User Package Registry`.
+   This can be skipped if ``NO_CMAKE_PACKAGE_REGISTRY`` is passed or by
+   setting the variable :variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY`
+   to ``FALSE`` or the deprecated variable
+   :variable:`CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY` to ``TRUE``.
+
+   See the :manual:`cmake-packages(7)` manual for details on the user
+   package registry.
+
+7. Search cmake variables defined in the Platform files for the
+   current system.  This can be skipped if ``NO_CMAKE_SYSTEM_PATH`` is
+   passed or by setting the :variable:`CMAKE_FIND_USE_CMAKE_SYSTEM_PATH`
+   to ``FALSE``:
+
+   * :variable:`CMAKE_SYSTEM_PREFIX_PATH`
+   * :variable:`CMAKE_SYSTEM_FRAMEWORK_PATH`
+   * :variable:`CMAKE_SYSTEM_APPBUNDLE_PATH`
+
+   The platform paths that these variables contain are locations that
+   typically include installed software. An example being ``/usr/local`` for
+   UNIX based platforms.
+
+8. Search paths stored in the CMake :ref:`System Package Registry`.
+   This can be skipped if ``NO_CMAKE_SYSTEM_PACKAGE_REGISTRY`` is passed
+   or by setting the :variable:`CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY`
+   variable to ``FALSE`` or the deprecated variable
+   :variable:`CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY` to ``TRUE``.
+
+   See the :manual:`cmake-packages(7)` manual for details on the system
+   package registry.
+
+9. Search paths specified by the ``PATHS`` option.  These are typically
+   hard-coded guesses.
+
+.. versionadded:: 3.16
+   Added the ``CMAKE_FIND_USE_<CATEGORY>`` variables to globally disable
+   various search locations.
+
+.. |FIND_XXX| replace:: find_package
+.. |FIND_ARGS_XXX| replace:: <PackageName>
+.. |CMAKE_FIND_ROOT_PATH_MODE_XXX| replace::
+   :variable:`CMAKE_FIND_ROOT_PATH_MODE_PACKAGE`
+
+.. include:: FIND_XXX_ROOT.txt
+.. include:: FIND_XXX_ORDER.txt
+
+By default the value stored in the result variable will be the path at
+which the file is found.  The :variable:`CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS`
+variable may be set to ``TRUE`` before calling ``find_package`` in order
+to resolve symbolic links and store the real path to the file.
+
+Every non-REQUIRED ``find_package`` call can be disabled or made REQUIRED:
+
+* Setting the :variable:`CMAKE_DISABLE_FIND_PACKAGE_<PackageName>` variable
+  to ``TRUE`` disables the package.
+
+* Setting the :variable:`CMAKE_REQUIRE_FIND_PACKAGE_<PackageName>` variable
+  to ``TRUE`` makes the package REQUIRED.
+
+Setting both variables to ``TRUE`` simultaneously is an error.
+
+.. _`version selection`:
+
+Config Mode Version Selection
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. note::
+  When Config mode is used, this version selection process is applied
+  regardless of whether the :ref:`full <full signature>` or
+  :ref:`basic <basic signature>` signature was given.
+
+When the ``[version]`` argument is given, Config mode will only find a
+version of the package that claims compatibility with the requested
+version (see :ref:`format specification <FIND_PACKAGE_VERSION_FORMAT>`). If the
+``EXACT`` option is given, only a version of the package claiming an exact match
+of the requested version may be found.  CMake does not establish any
+convention for the meaning of version numbers.  Package version
+numbers are checked by "version" files provided by the packages
+themselves.  For a candidate package configuration file
+``<config-file>.cmake`` the corresponding version file is located next
+to it and named either ``<config-file>-version.cmake`` or
+``<config-file>Version.cmake``.  If no such version file is available
+then the configuration file is assumed to not be compatible with any
+requested version.  A basic version file containing generic version
+matching code can be created using the
+:module:`CMakePackageConfigHelpers` module.  When a version file
+is found it is loaded to check the requested version number.  The
+version file is loaded in a nested scope in which the following
+variables have been defined:
+
+``PACKAGE_FIND_NAME``
+  The ``<PackageName>``
+``PACKAGE_FIND_VERSION``
+  Full requested version string
+``PACKAGE_FIND_VERSION_MAJOR``
+  Major version if requested, else 0
+``PACKAGE_FIND_VERSION_MINOR``
+  Minor version if requested, else 0
+``PACKAGE_FIND_VERSION_PATCH``
+  Patch version if requested, else 0
+``PACKAGE_FIND_VERSION_TWEAK``
+  Tweak version if requested, else 0
+``PACKAGE_FIND_VERSION_COUNT``
+  Number of version components, 0 to 4
+
+When a version range is specified, the above version variables will hold
+values based on the lower end of the version range.  This is to preserve
+compatibility with packages that have not been implemented to expect version
+ranges.  In addition, the version range will be described by the following
+variables:
+
+``PACKAGE_FIND_VERSION_RANGE``
+  Full requested version range string
+``PACKAGE_FIND_VERSION_RANGE_MIN``
+  This specifies whether the lower end point of the version range should be
+  included or excluded.  Currently, the only supported value for this variable
+  is ``INCLUDE``.
+``PACKAGE_FIND_VERSION_RANGE_MAX``
+  This specifies whether the upper end point of the version range should be
+  included or excluded.  The supported values for this variable are
+  ``INCLUDE`` and ``EXCLUDE``.
+
+``PACKAGE_FIND_VERSION_MIN``
+  Full requested version string of the lower end point of the range
+``PACKAGE_FIND_VERSION_MIN_MAJOR``
+  Major version of the lower end point if requested, else 0
+``PACKAGE_FIND_VERSION_MIN_MINOR``
+  Minor version of the lower end point if requested, else 0
+``PACKAGE_FIND_VERSION_MIN_PATCH``
+  Patch version of the lower end point if requested, else 0
+``PACKAGE_FIND_VERSION_MIN_TWEAK``
+  Tweak version of the lower end point if requested, else 0
+``PACKAGE_FIND_VERSION_MIN_COUNT``
+  Number of version components of the lower end point, 0 to 4
+
+``PACKAGE_FIND_VERSION_MAX``
+  Full requested version string of the upper end point of the range
+``PACKAGE_FIND_VERSION_MAX_MAJOR``
+  Major version of the upper end point if requested, else 0
+``PACKAGE_FIND_VERSION_MAX_MINOR``
+  Minor version of the upper end point if requested, else 0
+``PACKAGE_FIND_VERSION_MAX_PATCH``
+  Patch version of the upper end point if requested, else 0
+``PACKAGE_FIND_VERSION_MAX_TWEAK``
+  Tweak version of the upper end point if requested, else 0
+``PACKAGE_FIND_VERSION_MAX_COUNT``
+  Number of version components of the upper end point, 0 to 4
+
+Regardless of whether a single version or a version range is specified, the
+variable ``PACKAGE_FIND_VERSION_COMPLETE`` will be defined and will hold
+the full requested version string as specified.
+
+The version file checks whether it satisfies the requested version and
+sets these variables:
+
+``PACKAGE_VERSION``
+  Full provided version string
+``PACKAGE_VERSION_EXACT``
+  True if version is exact match
+``PACKAGE_VERSION_COMPATIBLE``
+  True if version is compatible
+``PACKAGE_VERSION_UNSUITABLE``
+  True if unsuitable as any version
+
+These variables are checked by the ``find_package`` command to determine
+whether the configuration file provides an acceptable version.  They
+are not available after the ``find_package`` call returns.  If the version
+is acceptable the following variables are set:
+
+``<PackageName>_VERSION``
+  Full provided version string
+``<PackageName>_VERSION_MAJOR``
+  Major version if provided, else 0
+``<PackageName>_VERSION_MINOR``
+  Minor version if provided, else 0
+``<PackageName>_VERSION_PATCH``
+  Patch version if provided, else 0
+``<PackageName>_VERSION_TWEAK``
+  Tweak version if provided, else 0
+``<PackageName>_VERSION_COUNT``
+  Number of version components, 0 to 4
+
+and the corresponding package configuration file is loaded.
+When multiple package configuration files are available whose version files
+claim compatibility with the version requested it is unspecified which
+one is chosen: unless the variable :variable:`CMAKE_FIND_PACKAGE_SORT_ORDER`
+is set no attempt is made to choose a highest or closest version number.
+
+To control the order in which ``find_package`` checks for compatibility use
+the two variables :variable:`CMAKE_FIND_PACKAGE_SORT_ORDER` and
+:variable:`CMAKE_FIND_PACKAGE_SORT_DIRECTION`.
+For instance in order to select the highest version one can set
+
+.. code-block:: cmake
+
+  SET(CMAKE_FIND_PACKAGE_SORT_ORDER NATURAL)
+  SET(CMAKE_FIND_PACKAGE_SORT_DIRECTION DEC)
+
+before calling ``find_package``.
+
+Package File Interface Variables
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+When loading a find module or package configuration file ``find_package``
+defines variables to provide information about the call arguments (and
+restores their original state before returning):
+
+``CMAKE_FIND_PACKAGE_NAME``
+  The ``<PackageName>`` which is searched for
+``<PackageName>_FIND_REQUIRED``
+  True if ``REQUIRED`` option was given
+``<PackageName>_FIND_QUIETLY``
+  True if ``QUIET`` option was given
+``<PackageName>_FIND_VERSION``
+  Full requested version string
+``<PackageName>_FIND_VERSION_MAJOR``
+  Major version if requested, else 0
+``<PackageName>_FIND_VERSION_MINOR``
+  Minor version if requested, else 0
+``<PackageName>_FIND_VERSION_PATCH``
+  Patch version if requested, else 0
+``<PackageName>_FIND_VERSION_TWEAK``
+  Tweak version if requested, else 0
+``<PackageName>_FIND_VERSION_COUNT``
+  Number of version components, 0 to 4
+``<PackageName>_FIND_VERSION_EXACT``
+  True if ``EXACT`` option was given
+``<PackageName>_FIND_COMPONENTS``
+  List of specified components (required and optional)
+``<PackageName>_FIND_REQUIRED_<c>``
+  True if component ``<c>`` is required,
+  false if component ``<c>`` is optional
+
+When a version range is specified, the above version variables will hold
+values based on the lower end of the version range.  This is to preserve
+compatibility with packages that have not been implemented to expect version
+ranges.  In addition, the version range will be described by the following
+variables:
+
+``<PackageName>_FIND_VERSION_RANGE``
+  Full requested version range string
+``<PackageName>_FIND_VERSION_RANGE_MIN``
+  This specifies whether the lower end point of the version range is
+  included or excluded.  Currently, ``INCLUDE`` is the only supported value.
+``<PackageName>_FIND_VERSION_RANGE_MAX``
+  This specifies whether the upper end point of the version range is
+  included or excluded.  The possible values for this variable are
+  ``INCLUDE`` or ``EXCLUDE``.
+
+``<PackageName>_FIND_VERSION_MIN``
+  Full requested version string of the lower end point of the range
+``<PackageName>_FIND_VERSION_MIN_MAJOR``
+  Major version of the lower end point if requested, else 0
+``<PackageName>_FIND_VERSION_MIN_MINOR``
+  Minor version of the lower end point if requested, else 0
+``<PackageName>_FIND_VERSION_MIN_PATCH``
+  Patch version of the lower end point if requested, else 0
+``<PackageName>_FIND_VERSION_MIN_TWEAK``
+  Tweak version of the lower end point if requested, else 0
+``<PackageName>_FIND_VERSION_MIN_COUNT``
+  Number of version components of the lower end point, 0 to 4
+
+``<PackageName>_FIND_VERSION_MAX``
+  Full requested version string of the upper end point of the range
+``<PackageName>_FIND_VERSION_MAX_MAJOR``
+  Major version of the upper end point if requested, else 0
+``<PackageName>_FIND_VERSION_MAX_MINOR``
+  Minor version of the upper end point if requested, else 0
+``<PackageName>_FIND_VERSION_MAX_PATCH``
+  Patch version of the upper end point if requested, else 0
+``<PackageName>_FIND_VERSION_MAX_TWEAK``
+  Tweak version of the upper end point if requested, else 0
+``<PackageName>_FIND_VERSION_MAX_COUNT``
+  Number of version components of the upper end point, 0 to 4
+
+Regardless of whether a single version or a version range is specified, the
+variable ``<PackageName>_FIND_VERSION_COMPLETE`` will be defined and will hold
+the full requested version string as specified.
+
+In Module mode the loaded find module is responsible to honor the
+request detailed by these variables; see the find module for details.
+In Config mode ``find_package`` handles ``REQUIRED``, ``QUIET``, and
+``[version]`` options automatically but leaves it to the package
+configuration file to handle components in a way that makes sense
+for the package.  The package configuration file may set
+``<PackageName>_FOUND`` to false to tell ``find_package`` that component
+requirements are not satisfied.
diff --git a/share/cmake-3.22/Help/command/find_path.rst b/share/cmake-3.22/Help/command/find_path.rst
new file mode 100644
index 0000000..ec66771
--- /dev/null
+++ b/share/cmake-3.22/Help/command/find_path.rst
@@ -0,0 +1,42 @@
+find_path
+---------
+
+.. |FIND_XXX| replace:: find_path
+.. |NAMES| replace:: NAMES name1 [name2 ...]
+.. |SEARCH_XXX| replace:: file in a directory
+.. |SEARCH_XXX_DESC| replace:: directory containing the named file
+.. |prefix_XXX_SUBDIR| replace:: ``<prefix>/include``
+.. |entry_XXX_SUBDIR| replace:: ``<entry>/include``
+
+.. |FIND_PACKAGE_ROOT_PREFIX_PATH_XXX| replace::
+   ``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`
+   is set, and |FIND_PACKAGE_ROOT_PREFIX_PATH_XXX_SUBDIR|
+.. |CMAKE_PREFIX_PATH_XXX| replace::
+   ``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`
+   is set, and |CMAKE_PREFIX_PATH_XXX_SUBDIR|
+.. |CMAKE_XXX_PATH| replace:: :variable:`CMAKE_INCLUDE_PATH`
+.. |CMAKE_XXX_MAC_PATH| replace:: :variable:`CMAKE_FRAMEWORK_PATH`
+
+.. |SYSTEM_ENVIRONMENT_PATH_XXX| replace:: The directories in ``INCLUDE``
+   and ``PATH``.
+.. |SYSTEM_ENVIRONMENT_PATH_WINDOWS_XXX| replace:: On Windows hosts:
+      ``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`
+      is set, and |SYSTEM_ENVIRONMENT_PREFIX_PATH_XXX_SUBDIR|.
+
+.. |CMAKE_SYSTEM_PREFIX_PATH_XXX| replace::
+   ``<prefix>/include/<arch>`` if :variable:`CMAKE_LIBRARY_ARCHITECTURE`
+   is set, and |CMAKE_SYSTEM_PREFIX_PATH_XXX_SUBDIR|
+.. |CMAKE_SYSTEM_XXX_PATH| replace::
+   :variable:`CMAKE_SYSTEM_INCLUDE_PATH`
+.. |CMAKE_SYSTEM_XXX_MAC_PATH| replace::
+   :variable:`CMAKE_SYSTEM_FRAMEWORK_PATH`
+
+.. |CMAKE_FIND_ROOT_PATH_MODE_XXX| replace::
+   :variable:`CMAKE_FIND_ROOT_PATH_MODE_INCLUDE`
+
+.. include:: FIND_XXX.txt
+
+When searching for frameworks, if the file is specified as ``A/b.h``, then
+the framework search will look for ``A.framework/Headers/b.h``.  If that
+is found the path will be set to the path to the framework.  CMake
+will convert this to the correct ``-F`` option to include the file.
diff --git a/share/cmake-3.18/Help/command/find_program.rst b/share/cmake-3.22/Help/command/find_program.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/find_program.rst
rename to share/cmake-3.22/Help/command/find_program.rst
diff --git a/share/cmake-3.18/Help/command/fltk_wrap_ui.rst b/share/cmake-3.22/Help/command/fltk_wrap_ui.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/fltk_wrap_ui.rst
rename to share/cmake-3.22/Help/command/fltk_wrap_ui.rst
diff --git a/share/cmake-3.22/Help/command/foreach.rst b/share/cmake-3.22/Help/command/foreach.rst
new file mode 100644
index 0000000..d9f54ca
--- /dev/null
+++ b/share/cmake-3.22/Help/command/foreach.rst
@@ -0,0 +1,132 @@
+foreach
+-------
+
+Evaluate a group of commands for each value in a list.
+
+.. code-block:: cmake
+
+  foreach(<loop_var> <items>)
+    <commands>
+  endforeach()
+
+where ``<items>`` is a list of items that are separated by
+semicolon or whitespace.
+All commands between ``foreach`` and the matching ``endforeach`` are recorded
+without being invoked.  Once the ``endforeach`` is evaluated, the recorded
+list of commands is invoked once for each item in ``<items>``.
+At the beginning of each iteration the variable ``<loop_var>`` will be set
+to the value of the current item.
+
+The scope of ``<loop_var>`` is restricted to the loop scope. See policy
+:policy:`CMP0124` for details.
+
+The commands :command:`break` and :command:`continue` provide means to
+escape from the normal control flow.
+
+Per legacy, the :command:`endforeach` command admits
+an optional ``<loop_var>`` argument.
+If used, it must be a verbatim
+repeat of the argument of the opening
+``foreach`` command.
+
+.. code-block:: cmake
+
+  foreach(<loop_var> RANGE <stop>)
+
+In this variant, ``foreach`` iterates over the numbers
+0, 1, ... up to (and including) the nonnegative integer ``<stop>``.
+
+.. code-block:: cmake
+
+  foreach(<loop_var> RANGE <start> <stop> [<step>])
+
+In this variant, ``foreach`` iterates over the numbers from
+``<start>`` up to at most ``<stop>`` in steps of ``<step>``.
+If ``<step>`` is not specified, then the step size is 1.
+The three arguments ``<start>`` ``<stop>`` ``<step>`` must
+all be nonnegative integers, and ``<stop>`` must not be
+smaller than ``<start>``; otherwise you enter the danger zone
+of undocumented behavior that may change in future releases.
+
+.. code-block:: cmake
+
+  foreach(<loop_var> IN [LISTS [<lists>]] [ITEMS [<items>]])
+
+In this variant, ``<lists>`` is a whitespace or semicolon
+separated list of list-valued variables. The ``foreach``
+command iterates over each item in each given list.
+The ``<items>`` following the ``ITEMS`` keyword are processed
+as in the first variant of the ``foreach`` command.
+The forms ``LISTS A`` and ``ITEMS ${A}`` are
+equivalent.
+
+The following example shows how the ``LISTS`` option is
+processed:
+
+.. code-block:: cmake
+
+  set(A 0;1)
+  set(B 2 3)
+  set(C "4 5")
+  set(D 6;7 8)
+  set(E "")
+  foreach(X IN LISTS A B C D E)
+      message(STATUS "X=${X}")
+  endforeach()
+
+yields
+::
+
+  -- X=0
+  -- X=1
+  -- X=2
+  -- X=3
+  -- X=4 5
+  -- X=6
+  -- X=7
+  -- X=8
+
+
+.. code-block:: cmake
+
+  foreach(<loop_var>... IN ZIP_LISTS <lists>)
+
+.. versionadded:: 3.17
+
+In this variant, ``<lists>`` is a whitespace or semicolon
+separated list of list-valued variables. The ``foreach``
+command iterates over each list simultaneously setting the
+iteration variables as follows:
+
+- if the only ``loop_var`` given, then it sets a series of
+  ``loop_var_N`` variables to the current item from the
+  corresponding list;
+- if multiple variable names passed, their count should match
+  the lists variables count;
+- if any of the lists are shorter, the corresponding iteration
+  variable is not defined for the current iteration.
+
+.. code-block:: cmake
+
+  list(APPEND English one two three four)
+  list(APPEND Bahasa satu dua tiga)
+
+  foreach(num IN ZIP_LISTS English Bahasa)
+      message(STATUS "num_0=${num_0}, num_1=${num_1}")
+  endforeach()
+
+  foreach(en ba IN ZIP_LISTS English Bahasa)
+      message(STATUS "en=${en}, ba=${ba}")
+  endforeach()
+
+yields
+::
+
+  -- num_0=one, num_1=satu
+  -- num_0=two, num_1=dua
+  -- num_0=three, num_1=tiga
+  -- num_0=four, num_1=
+  -- en=one, ba=satu
+  -- en=two, ba=dua
+  -- en=three, ba=tiga
+  -- en=four, ba=
diff --git a/share/cmake-3.22/Help/command/function.rst b/share/cmake-3.22/Help/command/function.rst
new file mode 100644
index 0000000..3d25aa4
--- /dev/null
+++ b/share/cmake-3.22/Help/command/function.rst
@@ -0,0 +1,75 @@
+function
+--------
+
+Start recording a function for later invocation as a command.
+
+.. code-block:: cmake
+
+  function(<name> [<arg1> ...])
+    <commands>
+  endfunction()
+
+Defines a function named ``<name>`` that takes arguments named
+``<arg1>``, ...  The ``<commands>`` in the function definition
+are recorded; they are not executed until the function is invoked.
+
+Per legacy, the :command:`endfunction` command admits an optional
+``<name>`` argument. If used, it must be a verbatim repeat of the
+argument of the opening ``function`` command.
+
+A function opens a new scope: see :command:`set(var PARENT_SCOPE)` for
+details.
+
+See the :command:`cmake_policy()` command documentation for the behavior
+of policies inside functions.
+
+See the :command:`macro()` command documentation for differences
+between CMake functions and macros.
+
+Invocation
+^^^^^^^^^^
+
+The function invocation is case-insensitive. A function defined as
+
+.. code-block:: cmake
+
+  function(foo)
+    <commands>
+  endfunction()
+
+can be invoked through any of
+
+.. code-block:: cmake
+
+  foo()
+  Foo()
+  FOO()
+  cmake_language(CALL foo)
+
+and so on. However, it is strongly recommended to stay with the
+case chosen in the function definition. Typically functions use
+all-lowercase names.
+
+.. versionadded:: 3.18
+  The :command:`cmake_language(CALL ...)` command can also be used to
+  invoke the function.
+
+Arguments
+^^^^^^^^^
+
+When the function is invoked, the recorded ``<commands>`` are first
+modified by replacing formal parameters (``${arg1}``, ...) with the
+arguments passed, and then invoked as normal commands.
+
+In addition to referencing the formal parameters you can reference the
+``ARGC`` variable which will be set to the number of arguments passed
+into the function as well as ``ARGV0``, ``ARGV1``, ``ARGV2``, ...  which
+will have the actual values of the arguments passed in.  This facilitates
+creating functions with optional arguments.
+
+Furthermore, ``ARGV`` holds the list of all arguments given to the
+function and ``ARGN`` holds the list of arguments past the last expected
+argument.  Referencing to ``ARGV#`` arguments beyond ``ARGC`` have
+undefined behavior.  Checking that ``ARGC`` is greater than ``#`` is
+the only way to ensure that ``ARGV#`` was passed to the function as an
+extra argument.
diff --git a/share/cmake-3.18/Help/command/get_cmake_property.rst b/share/cmake-3.22/Help/command/get_cmake_property.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/get_cmake_property.rst
rename to share/cmake-3.22/Help/command/get_cmake_property.rst
diff --git a/share/cmake-3.22/Help/command/get_directory_property.rst b/share/cmake-3.22/Help/command/get_directory_property.rst
new file mode 100644
index 0000000..0ccbfb0
--- /dev/null
+++ b/share/cmake-3.22/Help/command/get_directory_property.rst
@@ -0,0 +1,36 @@
+get_directory_property
+----------------------
+
+Get a property of ``DIRECTORY`` scope.
+
+.. code-block:: cmake
+
+  get_directory_property(<variable> [DIRECTORY <dir>] <prop-name>)
+
+Stores a property of directory scope in the named ``<variable>``.
+
+The ``DIRECTORY`` argument specifies another directory from which
+to retrieve the property value instead of the current directory.
+Relative paths are treated as relative to the
+current source directory.  CMake must already know about the directory,
+either by having added it through a call to :command:`add_subdirectory`
+or being the top level directory.
+
+.. versionadded:: 3.19
+  ``<dir>`` may reference a binary directory.
+
+If the property is not defined for the nominated directory scope,
+an empty string is returned.  In the case of ``INHERITED`` properties,
+if the property is not found for the nominated directory scope,
+the search will chain to a parent scope as described for the
+:command:`define_property` command.
+
+.. code-block:: cmake
+
+  get_directory_property(<variable> [DIRECTORY <dir>]
+                         DEFINITION <var-name>)
+
+Get a variable definition from a directory.  This form is useful to
+get a variable definition from another directory.
+
+See also the more general :command:`get_property` command.
diff --git a/share/cmake-3.22/Help/command/get_filename_component.rst b/share/cmake-3.22/Help/command/get_filename_component.rst
new file mode 100644
index 0000000..4bdd388
--- /dev/null
+++ b/share/cmake-3.22/Help/command/get_filename_component.rst
@@ -0,0 +1,65 @@
+get_filename_component
+----------------------
+
+Get a specific component of a full filename.
+
+.. versionchanged:: 3.20
+  This command been superseded by :command:`cmake_path` command, except
+  ``REALPATH`` now offered by :ref:`file(REAL_PATH) <REAL_PATH>` command and
+  ``PROGRAM`` now available in :command:`separate_arguments(PROGRAM)` command.
+
+.. code-block:: cmake
+
+  get_filename_component(<var> <FileName> <mode> [CACHE])
+
+Sets ``<var>`` to a component of ``<FileName>``, where ``<mode>`` is one of:
+
+::
+
+ DIRECTORY = Directory without file name
+ NAME      = File name without directory
+ EXT       = File name longest extension (.b.c from d/a.b.c)
+ NAME_WE   = File name with neither the directory nor the longest extension
+ LAST_EXT  = File name last extension (.c from d/a.b.c)
+ NAME_WLE  = File name with neither the directory nor the last extension
+ PATH      = Legacy alias for DIRECTORY (use for CMake <= 2.8.11)
+
+.. versionadded:: 3.14
+  Added the ``LAST_EXT`` and ``NAME_WLE`` modes.
+
+Paths are returned with forward slashes and have no trailing slashes.
+If the optional ``CACHE`` argument is specified, the result variable is
+added to the cache.
+
+.. code-block:: cmake
+
+  get_filename_component(<var> <FileName> <mode> [BASE_DIR <dir>] [CACHE])
+
+.. versionadded:: 3.4
+
+Sets ``<var>`` to the absolute path of ``<FileName>``, where ``<mode>`` is one
+of:
+
+::
+
+ ABSOLUTE  = Full path to file
+ REALPATH  = Full path to existing file with symlinks resolved
+
+If the provided ``<FileName>`` is a relative path, it is evaluated relative
+to the given base directory ``<dir>``.  If no base directory is
+provided, the default base directory will be
+:variable:`CMAKE_CURRENT_SOURCE_DIR`.
+
+Paths are returned with forward slashes and have no trailing slashes.  If the
+optional ``CACHE`` argument is specified, the result variable is added to the
+cache.
+
+.. code-block:: cmake
+
+  get_filename_component(<var> <FileName> PROGRAM [PROGRAM_ARGS <arg_var>] [CACHE])
+
+The program in ``<FileName>`` will be found in the system search path or
+left as a full path.  If ``PROGRAM_ARGS`` is present with ``PROGRAM``, then
+any command-line arguments present in the ``<FileName>`` string are split
+from the program name and stored in ``<arg_var>``.  This is used to
+separate a program name from its arguments in a command line string.
diff --git a/share/cmake-3.22/Help/command/get_property.rst b/share/cmake-3.22/Help/command/get_property.rst
new file mode 100644
index 0000000..46da285
--- /dev/null
+++ b/share/cmake-3.22/Help/command/get_property.rst
@@ -0,0 +1,101 @@
+get_property
+------------
+
+Get a property.
+
+.. code-block:: cmake
+
+  get_property(<variable>
+               <GLOBAL             |
+                DIRECTORY [<dir>]  |
+                TARGET    <target> |
+                SOURCE    <source>
+                          [DIRECTORY <dir> | TARGET_DIRECTORY <target>] |
+                INSTALL   <file>   |
+                TEST      <test>   |
+                CACHE     <entry>  |
+                VARIABLE           >
+               PROPERTY <name>
+               [SET | DEFINED | BRIEF_DOCS | FULL_DOCS])
+
+Gets one property from one object in a scope.
+
+The first argument specifies the variable in which to store the result.
+The second argument determines the scope from which to get the property.
+It must be one of the following:
+
+``GLOBAL``
+  Scope is unique and does not accept a name.
+
+``DIRECTORY``
+  Scope defaults to the current directory but another
+  directory (already processed by CMake) may be named by the
+  full or relative path ``<dir>``.
+  Relative paths are treated as relative to the current source directory.
+  See also the :command:`get_directory_property` command.
+
+  .. versionadded:: 3.19
+    ``<dir>`` may reference a binary directory.
+
+``TARGET``
+  Scope must name one existing target.
+  See also the :command:`get_target_property` command.
+
+``SOURCE``
+  Scope must name one source file.  By default, the source file's property
+  will be read from the current source directory's scope.
+
+  .. versionadded:: 3.18
+    Directory scope can be overridden with one of the following sub-options:
+
+    ``DIRECTORY <dir>``
+      The source file property will be read from the ``<dir>`` directory's
+      scope.  CMake must already know about
+      the directory, either by having added it through a call
+      to :command:`add_subdirectory` or ``<dir>`` being the top level directory.
+      Relative paths are treated as relative to the current source directory.
+
+      .. versionadded:: 3.19
+        ``<dir>`` may reference a binary directory.
+
+    ``TARGET_DIRECTORY <target>``
+      The source file property will be read from the directory scope in which
+      ``<target>`` was created (``<target>`` must therefore already exist).
+
+  See also the :command:`get_source_file_property` command.
+
+``INSTALL``
+  .. versionadded:: 3.1
+
+  Scope must name one installed file path.
+
+``TEST``
+  Scope must name one existing test.
+  See also the :command:`get_test_property` command.
+
+``CACHE``
+  Scope must name one cache entry.
+
+``VARIABLE``
+  Scope is unique and does not accept a name.
+
+The required ``PROPERTY`` option is immediately followed by the name of
+the property to get.  If the property is not set an empty value is
+returned, although some properties support inheriting from a parent scope
+if defined to behave that way (see :command:`define_property`).
+
+If the ``SET`` option is given the variable is set to a boolean
+value indicating whether the property has been set.  If the ``DEFINED``
+option is given the variable is set to a boolean value indicating
+whether the property has been defined such as with the
+:command:`define_property` command.
+
+If ``BRIEF_DOCS`` or ``FULL_DOCS`` is given then the variable is set to a
+string containing documentation for the requested property.  If
+documentation is requested for a property that has not been defined
+``NOTFOUND`` is returned.
+
+.. note::
+
+  The :prop_sf:`GENERATED` source file property may be globally visible.
+  See its documentation for details.
diff --git a/share/cmake-3.22/Help/command/get_source_file_property.rst b/share/cmake-3.22/Help/command/get_source_file_property.rst
new file mode 100644
index 0000000..ae41565
--- /dev/null
+++ b/share/cmake-3.22/Help/command/get_source_file_property.rst
@@ -0,0 +1,47 @@
+get_source_file_property
+------------------------
+
+Get a property for a source file.
+
+.. code-block:: cmake
+
+  get_source_file_property(<variable> <file>
+                           [DIRECTORY <dir> | TARGET_DIRECTORY <target>]
+                           <property>)
+
+Gets a property from a source file.  The value of the property is
+stored in the specified ``<variable>``.  If the source property is not found,
+the behavior depends on whether it has been defined to be an ``INHERITED``
+property or not (see :command:`define_property`).  Non-inherited properties
+will set ``variable`` to ``NOTFOUND``, whereas inherited properties will search
+the relevant parent scope as described for the :command:`define_property`
+command and if still unable to find the property, ``variable`` will be set to
+an empty string.
+
+By default, the source file's property will be read from the current source
+directory's scope.
+
+.. versionadded:: 3.18
+  Directory scope can be overridden with one of the following sub-options:
+
+  ``DIRECTORY <dir>``
+    The source file property will be read from the ``<dir>`` directory's
+    scope.  CMake must already know about that source directory, either by
+    having added it through a call to :command:`add_subdirectory` or ``<dir>``
+    being the top level source directory.  Relative paths are treated as
+    relative to the current source directory.
+
+  ``TARGET_DIRECTORY <target>``
+    The source file property will be read from the directory scope in which
+    ``<target>`` was created (``<target>`` must therefore already exist).
+
+Use :command:`set_source_files_properties` to set property values.  Source
+file properties usually control how the file is built. One property that is
+always there is :prop_sf:`LOCATION`.
+
+See also the more general :command:`get_property` command.
+
+.. note::
+
+  The :prop_sf:`GENERATED` source file property may be globally visible.
+  See its documentation for details.
diff --git a/share/cmake-3.18/Help/command/get_target_property.rst b/share/cmake-3.22/Help/command/get_target_property.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/get_target_property.rst
rename to share/cmake-3.22/Help/command/get_target_property.rst
diff --git a/share/cmake-3.18/Help/command/get_test_property.rst b/share/cmake-3.22/Help/command/get_test_property.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/get_test_property.rst
rename to share/cmake-3.22/Help/command/get_test_property.rst
diff --git a/share/cmake-3.22/Help/command/if.rst b/share/cmake-3.22/Help/command/if.rst
new file mode 100644
index 0000000..5dba13e
--- /dev/null
+++ b/share/cmake-3.22/Help/command/if.rst
@@ -0,0 +1,375 @@
+if
+--
+
+Conditionally execute a group of commands.
+
+Synopsis
+^^^^^^^^
+
+.. code-block:: cmake
+
+  if(<condition>)
+    <commands>
+  elseif(<condition>) # optional block, can be repeated
+    <commands>
+  else()              # optional block
+    <commands>
+  endif()
+
+Evaluates the ``condition`` argument of the ``if`` clause according to the
+`Condition syntax`_ described below. If the result is true, then the
+``commands`` in the ``if`` block are executed.
+Otherwise, optional ``elseif`` blocks are processed in the same way.
+Finally, if no ``condition`` is true, ``commands`` in the optional ``else``
+block are executed.
+
+Per legacy, the :command:`else` and :command:`endif` commands admit
+an optional ``<condition>`` argument.
+If used, it must be a verbatim
+repeat of the argument of the opening
+``if`` command.
+
+.. _`Condition Syntax`:
+
+Condition Syntax
+^^^^^^^^^^^^^^^^
+
+The following syntax applies to the ``condition`` argument of
+the ``if``, ``elseif`` and :command:`while` clauses.
+
+Compound conditions are evaluated in the following order of precedence:
+Innermost parentheses are evaluated first. Next come unary tests such
+as `EXISTS`_, `COMMAND`_, and `DEFINED`_.  Then binary tests such as
+`EQUAL`_, `LESS`_, `LESS_EQUAL`_, `GREATER`_, `GREATER_EQUAL`_,
+`STREQUAL`_, `STRLESS`_, `STRLESS_EQUAL`_, `STRGREATER`_,
+`STRGREATER_EQUAL`_, `VERSION_EQUAL`_, `VERSION_LESS`_,
+`VERSION_LESS_EQUAL`_, `VERSION_GREATER`_, `VERSION_GREATER_EQUAL`_,
+and `MATCHES`_.  Then the boolean operators in the order `NOT`_,  `AND`_,
+and finally `OR`_.
+
+Basic Expressions
+"""""""""""""""""
+
+``if(<constant>)``
+ True if the constant is ``1``, ``ON``, ``YES``, ``TRUE``, ``Y``,
+ or a non-zero number.  False if the constant is ``0``, ``OFF``,
+ ``NO``, ``FALSE``, ``N``, ``IGNORE``, ``NOTFOUND``, the empty string,
+ or ends in the suffix ``-NOTFOUND``.  Named boolean constants are
+ case-insensitive.  If the argument is not one of these specific
+ constants, it is treated as a variable or string (see `Variable Expansion`_
+ further below) and one of the following two forms applies.
+
+``if(<variable>)``
+ True if given a variable that is defined to a value that is not a false
+ constant.  False otherwise, including if the variable is undefined.
+ Note that macro arguments are not variables.
+ Environment variables also cannot be tested this way, e.g.
+ ``if(ENV{some_var})`` will always evaluate to false.
+
+``if(<string>)``
+ A quoted string always evaluates to false unless:
+
+ * The string's value is one of the true constants, or
+ * Policy :policy:`CMP0054` is not set to ``NEW`` and the string's value
+   happens to be a variable name that is affected by :policy:`CMP0054`'s
+   behavior.
+
+Logic Operators
+"""""""""""""""
+
+.. _NOT:
+
+``if(NOT <condition>)``
+ True if the condition is not true.
+
+.. _AND:
+
+``if(<cond1> AND <cond2>)``
+ True if both conditions would be considered true individually.
+
+.. _OR:
+
+``if(<cond1> OR <cond2>)``
+ True if either condition would be considered true individually.
+
+``if((condition) AND (condition OR (condition)))``
+ The conditions inside the parenthesis are evaluated first and then
+ the remaining condition is evaluated as in the other examples.
+ Where there are nested parenthesis the innermost are evaluated as part
+ of evaluating the condition that contains them.
+
+Existence Checks
+""""""""""""""""
+
+.. _COMMAND:
+
+``if(COMMAND command-name)``
+ True if the given name is a command, macro or function that can be
+ invoked.
+
+``if(POLICY policy-id)``
+ True if the given name is an existing policy (of the form ``CMP<NNNN>``).
+
+``if(TARGET target-name)``
+ True if the given name is an existing logical target name created
+ by a call to the :command:`add_executable`, :command:`add_library`,
+ or :command:`add_custom_target` command that has already been invoked
+ (in any directory).
+
+``if(TEST test-name)``
+ .. versionadded:: 3.3
+  True if the given name is an existing test name created by the
+  :command:`add_test` command.
+
+.. _DEFINED:
+
+``if(DEFINED <name>|CACHE{<name>}|ENV{<name>})``
+ True if a variable, cache variable or environment variable
+ with given ``<name>`` is defined. The value of the variable
+ does not matter. Note that macro arguments are not variables.
+
+ .. versionadded:: 3.14
+  Added support for ``CACHE{<name>}`` variables.
+
+``if(<variable|string> IN_LIST <variable>)``
+ .. versionadded:: 3.3
+  True if the given element is contained in the named list variable.
+
+File Operations
+"""""""""""""""
+
+.. _EXISTS:
+
+``if(EXISTS path-to-file-or-directory)``
+ True if the named file or directory exists.  Behavior is well-defined
+ only for explicit full paths (a leading ``~/`` is not expanded as
+ a home directory and is considered a relative path).
+ Resolves symbolic links, i.e. if the named file or directory is a
+ symbolic link, returns true if the target of the symbolic link exists.
+
+``if(file1 IS_NEWER_THAN file2)``
+ True if ``file1`` is newer than ``file2`` or if one of the two files doesn't
+ exist.  Behavior is well-defined only for full paths.  If the file
+ time stamps are exactly the same, an ``IS_NEWER_THAN`` comparison returns
+ true, so that any dependent build operations will occur in the event
+ of a tie.  This includes the case of passing the same file name for
+ both file1 and file2.
+
+``if(IS_DIRECTORY path-to-directory)``
+ True if the given name is a directory.  Behavior is well-defined only
+ for full paths.
+
+``if(IS_SYMLINK file-name)``
+ True if the given name is a symbolic link.  Behavior is well-defined
+ only for full paths.
+
+``if(IS_ABSOLUTE path)``
+ True if the given path is an absolute path.  Note the following special
+ cases:
+
+ * An empty ``path`` evaluates to false.
+ * On Windows hosts, any ``path`` that begins with a drive letter and colon
+   (e.g. ``C:``), a forward slash or a backslash will evaluate to true.
+   This means a path like ``C:no\base\dir`` will evaluate to true, even
+   though the non-drive part of the path is relative.
+ * On non-Windows hosts, any ``path`` that begins with a tilde (``~``)
+   evaluates to true.
+
+Comparisons
+"""""""""""
+
+.. _MATCHES:
+
+``if(<variable|string> MATCHES regex)``
+ True if the given string or variable's value matches the given regular
+ expression.  See :ref:`Regex Specification` for regex format.
+
+ .. versionadded:: 3.9
+  ``()`` groups are captured in :variable:`CMAKE_MATCH_<n>` variables.
+
+.. _LESS:
+
+``if(<variable|string> LESS <variable|string>)``
+ True if the given string or variable's value is a valid number and less
+ than that on the right.
+
+.. _GREATER:
+
+``if(<variable|string> GREATER <variable|string>)``
+ True if the given string or variable's value is a valid number and greater
+ than that on the right.
+
+.. _EQUAL:
+
+``if(<variable|string> EQUAL <variable|string>)``
+ True if the given string or variable's value is a valid number and equal
+ to that on the right.
+
+.. _LESS_EQUAL:
+
+``if(<variable|string> LESS_EQUAL <variable|string>)``
+ .. versionadded:: 3.7
+  True if the given string or variable's value is a valid number and less
+  than or equal to that on the right.
+
+.. _GREATER_EQUAL:
+
+``if(<variable|string> GREATER_EQUAL <variable|string>)``
+ .. versionadded:: 3.7
+  True if the given string or variable's value is a valid number and greater
+  than or equal to that on the right.
+
+.. _STRLESS:
+
+``if(<variable|string> STRLESS <variable|string>)``
+ True if the given string or variable's value is lexicographically less
+ than the string or variable on the right.
+
+.. _STRGREATER:
+
+``if(<variable|string> STRGREATER <variable|string>)``
+ True if the given string or variable's value is lexicographically greater
+ than the string or variable on the right.
+
+.. _STREQUAL:
+
+``if(<variable|string> STREQUAL <variable|string>)``
+ True if the given string or variable's value is lexicographically equal
+ to the string or variable on the right.
+
+.. _STRLESS_EQUAL:
+
+``if(<variable|string> STRLESS_EQUAL <variable|string>)``
+ .. versionadded:: 3.7
+  True if the given string or variable's value is lexicographically less
+  than or equal to the string or variable on the right.
+
+.. _STRGREATER_EQUAL:
+
+``if(<variable|string> STRGREATER_EQUAL <variable|string>)``
+ .. versionadded:: 3.7
+  True if the given string or variable's value is lexicographically greater
+  than or equal to the string or variable on the right.
+
+Version Comparisons
+"""""""""""""""""""
+
+.. _VERSION_LESS:
+
+``if(<variable|string> VERSION_LESS <variable|string>)``
+ Component-wise integer version number comparison (version format is
+ ``major[.minor[.patch[.tweak]]]``, omitted components are treated as zero).
+ Any non-integer version component or non-integer trailing part of a version
+ component effectively truncates the string at that point.
+
+.. _VERSION_GREATER:
+
+``if(<variable|string> VERSION_GREATER <variable|string>)``
+ Component-wise integer version number comparison (version format is
+ ``major[.minor[.patch[.tweak]]]``, omitted components are treated as zero).
+ Any non-integer version component or non-integer trailing part of a version
+ component effectively truncates the string at that point.
+
+.. _VERSION_EQUAL:
+
+``if(<variable|string> VERSION_EQUAL <variable|string>)``
+ Component-wise integer version number comparison (version format is
+ ``major[.minor[.patch[.tweak]]]``, omitted components are treated as zero).
+ Any non-integer version component or non-integer trailing part of a version
+ component effectively truncates the string at that point.
+
+.. _VERSION_LESS_EQUAL:
+
+``if(<variable|string> VERSION_LESS_EQUAL <variable|string>)``
+ .. versionadded:: 3.7
+  Component-wise integer version number comparison (version format is
+  ``major[.minor[.patch[.tweak]]]``, omitted components are treated as zero).
+  Any non-integer version component or non-integer trailing part of a version
+  component effectively truncates the string at that point.
+
+.. _VERSION_GREATER_EQUAL:
+
+``if(<variable|string> VERSION_GREATER_EQUAL <variable|string>)``
+ .. versionadded:: 3.7
+  Component-wise integer version number comparison (version format is
+  ``major[.minor[.patch[.tweak]]]``, omitted components are treated as zero).
+  Any non-integer version component or non-integer trailing part of a version
+  component effectively truncates the string at that point.
+
+Variable Expansion
+^^^^^^^^^^^^^^^^^^
+
+The if command was written very early in CMake's history, predating
+the ``${}`` variable evaluation syntax, and for convenience evaluates
+variables named by its arguments as shown in the above signatures.
+Note that normal variable evaluation with ``${}`` applies before the if
+command even receives the arguments.  Therefore code like
+
+.. code-block:: cmake
+
+ set(var1 OFF)
+ set(var2 "var1")
+ if(${var2})
+
+appears to the if command as
+
+.. code-block:: cmake
+
+  if(var1)
+
+and is evaluated according to the ``if(<variable>)`` case documented
+above.  The result is ``OFF`` which is false.  However, if we remove the
+``${}`` from the example then the command sees
+
+.. code-block:: cmake
+
+  if(var2)
+
+which is true because ``var2`` is defined to ``var1`` which is not a false
+constant.
+
+Automatic evaluation applies in the other cases whenever the
+above-documented condition syntax accepts ``<variable|string>``:
+
+* The left hand argument to ``MATCHES`` is first checked to see if it is
+  a defined variable, if so the variable's value is used, otherwise the
+  original value is used.
+
+* If the left hand argument to ``MATCHES`` is missing it returns false
+  without error
+
+* Both left and right hand arguments to ``LESS``, ``GREATER``, ``EQUAL``,
+  ``LESS_EQUAL``, and ``GREATER_EQUAL``, are independently tested to see if
+  they are defined variables, if so their defined values are used otherwise
+  the original value is used.
+
+* Both left and right hand arguments to ``STRLESS``, ``STRGREATER``,
+  ``STREQUAL``, ``STRLESS_EQUAL``, and ``STRGREATER_EQUAL`` are independently
+  tested to see if they are defined variables, if so their defined values are
+  used otherwise the original value is used.
+
+* Both left and right hand arguments to ``VERSION_LESS``,
+  ``VERSION_GREATER``, ``VERSION_EQUAL``, ``VERSION_LESS_EQUAL``, and
+  ``VERSION_GREATER_EQUAL`` are independently tested to see if they are defined
+  variables, if so their defined values are used otherwise the original value
+  is used.
+
+* The right hand argument to ``NOT`` is tested to see if it is a boolean
+  constant, if so the value is used, otherwise it is assumed to be a
+  variable and it is dereferenced.
+
+* The left and right hand arguments to ``AND`` and ``OR`` are independently
+  tested to see if they are boolean constants, if so they are used as
+  such, otherwise they are assumed to be variables and are dereferenced.
+
+.. versionchanged:: 3.1
+  To prevent ambiguity, potential variable or keyword names can be
+  specified in a :ref:`Quoted Argument` or a :ref:`Bracket Argument`.
+  A quoted or bracketed variable or keyword will be interpreted as a
+  string and not dereferenced or interpreted.
+  See policy :policy:`CMP0054`.
+
+There is no automatic evaluation for environment or cache
+:ref:`Variable References`.  Their values must be referenced as
+``$ENV{<name>}`` or ``$CACHE{<name>}`` wherever the above-documented
+condition syntax accepts ``<variable|string>``.
diff --git a/share/cmake-3.18/Help/command/include.rst b/share/cmake-3.22/Help/command/include.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/include.rst
rename to share/cmake-3.22/Help/command/include.rst
diff --git a/share/cmake-3.18/Help/command/include_directories.rst b/share/cmake-3.22/Help/command/include_directories.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/include_directories.rst
rename to share/cmake-3.22/Help/command/include_directories.rst
diff --git a/share/cmake-3.22/Help/command/include_external_msproject.rst b/share/cmake-3.22/Help/command/include_external_msproject.rst
new file mode 100644
index 0000000..4354654
--- /dev/null
+++ b/share/cmake-3.22/Help/command/include_external_msproject.rst
@@ -0,0 +1,27 @@
+include_external_msproject
+--------------------------
+
+Include an external Microsoft project file in a workspace.
+
+.. code-block:: cmake
+
+  include_external_msproject(projectname location
+                             [TYPE projectTypeGUID]
+                             [GUID projectGUID]
+                             [PLATFORM platformName]
+                             dep1 dep2 ...)
+
+Includes an external Microsoft project in the generated workspace
+file.  Currently does nothing on UNIX.  This will create a target
+named ``[projectname]``.  This can be used in the :command:`add_dependencies`
+command to make things depend on the external project.
+
+``TYPE``, ``GUID`` and ``PLATFORM`` are optional parameters that allow one to
+specify the type of project, id (``GUID``) of the project and the name of
+the target platform.  This is useful for projects requiring values
+other than the default (e.g.  WIX projects).
+
+.. versionadded:: 3.9
+  If the imported project has different configuration names than the
+  current project, set the :prop_tgt:`MAP_IMPORTED_CONFIG_<CONFIG>`
+  target property to specify the mapping.
diff --git a/share/cmake-3.22/Help/command/include_guard.rst b/share/cmake-3.22/Help/command/include_guard.rst
new file mode 100644
index 0000000..dca3b6f
--- /dev/null
+++ b/share/cmake-3.22/Help/command/include_guard.rst
@@ -0,0 +1,48 @@
+include_guard
+-------------
+
+.. versionadded:: 3.10
+
+Provides an include guard for the file currently being processed by CMake.
+
+.. code-block:: cmake
+
+  include_guard([DIRECTORY|GLOBAL])
+
+Sets up an include guard for the current CMake file (see the
+:variable:`CMAKE_CURRENT_LIST_FILE` variable documentation).
+
+CMake will end its processing of the current file at the location of the
+:command:`include_guard` command if the current file has already been
+processed for the applicable scope (see below). This provides functionality
+similar to the include guards commonly used in source headers or to the
+``#pragma once`` directive. If the current file has been processed previously
+for the applicable scope, the effect is as though :command:`return` had been
+called. Do not call this command from inside a function being defined within
+the current file.
+
+An optional argument specifying the scope of the guard may be provided.
+Possible values for the option are:
+
+``DIRECTORY``
+  The include guard applies within the current directory and below. The file
+  will only be included once within this directory scope, but may be included
+  again by other files outside of this directory (i.e. a parent directory or
+  another directory not pulled in by :command:`add_subdirectory` or
+  :command:`include` from the current file or its children).
+
+``GLOBAL``
+  The include guard applies globally to the whole build. The current file
+  will only be included once regardless of the scope.
+
+If no arguments given, ``include_guard`` has the same scope as a variable,
+meaning that the include guard effect is isolated by the most recent
+function scope or current directory if no inner function scopes exist.
+In this case the command behavior is the same as:
+
+.. code-block:: cmake
+
+  if(__CURRENT_FILE_VAR__)
+    return()
+  endif()
+  set(__CURRENT_FILE_VAR__ TRUE)
diff --git a/share/cmake-3.18/Help/command/include_regular_expression.rst b/share/cmake-3.22/Help/command/include_regular_expression.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/include_regular_expression.rst
rename to share/cmake-3.22/Help/command/include_regular_expression.rst
diff --git a/share/cmake-3.22/Help/command/install.rst b/share/cmake-3.22/Help/command/install.rst
new file mode 100644
index 0000000..1236f1d
--- /dev/null
+++ b/share/cmake-3.22/Help/command/install.rst
@@ -0,0 +1,922 @@
+install
+-------
+
+Specify rules to run at install time.
+
+Synopsis
+^^^^^^^^
+
+.. parsed-literal::
+
+  install(`TARGETS`_ <target>... [...])
+  install(`IMPORTED_RUNTIME_ARTIFACTS`_ <target>... [...])
+  install({`FILES`_ | `PROGRAMS`_} <file>... [...])
+  install(`DIRECTORY`_ <dir>... [...])
+  install(`SCRIPT`_ <file> [...])
+  install(`CODE`_ <code> [...])
+  install(`EXPORT`_ <export-name> [...])
+  install(`RUNTIME_DEPENDENCY_SET`_ <set-name> [...])
+
+Introduction
+^^^^^^^^^^^^
+
+This command generates installation rules for a project.  Install rules
+specified by calls to the ``install()`` command within a source directory
+are executed in order during installation.
+
+.. versionchanged:: 3.14
+  Install rules in subdirectories
+  added by calls to the :command:`add_subdirectory` command are interleaved
+  with those in the parent directory to run in the order declared (see
+  policy :policy:`CMP0082`).
+
+.. versionchanged:: 3.22
+  The environment variable :envvar:`CMAKE_INSTALL_MODE` can override the
+  default copying behavior of :command:`install()`.
+
+There are multiple signatures for this command.  Some of them define
+installation options for files and targets.  Options common to
+multiple signatures are covered here but they are valid only for
+signatures that specify them.  The common options are:
+
+``DESTINATION``
+  Specify the directory on disk to which a file will be installed.
+  Arguments can be relative or absolute paths.
+
+  If a relative path is given it is interpreted relative to the value
+  of the :variable:`CMAKE_INSTALL_PREFIX` variable.
+  The prefix can be relocated at install time using the ``DESTDIR``
+  mechanism explained in the :variable:`CMAKE_INSTALL_PREFIX` variable
+  documentation.
+
+  If an absolute path (with a leading slash or drive letter) is given
+  it is used verbatim.
+
+  As absolute paths are not supported by :manual:`cpack <cpack(1)>` installer
+  generators, it is preferable to use relative paths throughout.
+  In particular, there is no need to make paths absolute by prepending
+  :variable:`CMAKE_INSTALL_PREFIX`; this prefix is used by default if
+  the DESTINATION is a relative path.
+
+``PERMISSIONS``
+  Specify permissions for installed files.  Valid permissions are
+  ``OWNER_READ``, ``OWNER_WRITE``, ``OWNER_EXECUTE``, ``GROUP_READ``,
+  ``GROUP_WRITE``, ``GROUP_EXECUTE``, ``WORLD_READ``, ``WORLD_WRITE``,
+  ``WORLD_EXECUTE``, ``SETUID``, and ``SETGID``.  Permissions that do
+  not make sense on certain platforms are ignored on those platforms.
+
+``CONFIGURATIONS``
+  Specify a list of build configurations for which the install rule
+  applies (Debug, Release, etc.). Note that the values specified for
+  this option only apply to options listed AFTER the ``CONFIGURATIONS``
+  option. For example, to set separate install paths for the Debug and
+  Release configurations, do the following:
+
+  .. code-block:: cmake
+
+    install(TARGETS target
+            CONFIGURATIONS Debug
+            RUNTIME DESTINATION Debug/bin)
+    install(TARGETS target
+            CONFIGURATIONS Release
+            RUNTIME DESTINATION Release/bin)
+
+  Note that ``CONFIGURATIONS`` appears BEFORE ``RUNTIME DESTINATION``.
+
+``COMPONENT``
+  Specify an installation component name with which the install rule
+  is associated, such as "runtime" or "development".  During
+  component-specific installation only install rules associated with
+  the given component name will be executed.  During a full installation
+  all components are installed unless marked with ``EXCLUDE_FROM_ALL``.
+  If ``COMPONENT`` is not provided a default component "Unspecified" is
+  created.  The default component name may be controlled with the
+  :variable:`CMAKE_INSTALL_DEFAULT_COMPONENT_NAME` variable.
+
+``EXCLUDE_FROM_ALL``
+  .. versionadded:: 3.6
+
+  Specify that the file is excluded from a full installation and only
+  installed as part of a component-specific installation
+
+``RENAME``
+  Specify a name for an installed file that may be different from the
+  original file.  Renaming is allowed only when a single file is
+  installed by the command.
+
+``OPTIONAL``
+  Specify that it is not an error if the file to be installed does
+  not exist.
+
+.. versionadded:: 3.1
+  Command signatures that install files may print messages during
+  installation.  Use the :variable:`CMAKE_INSTALL_MESSAGE` variable
+  to control which messages are printed.
+
+.. versionadded:: 3.11
+  Many of the ``install()`` variants implicitly create the directories
+  containing the installed files. If
+  :variable:`CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS` is set, these
+  directories will be created with the permissions specified. Otherwise,
+  they will be created according to the uname rules on Unix-like platforms.
+  Windows platforms are unaffected.
+
+Installing Targets
+^^^^^^^^^^^^^^^^^^
+
+.. _`install(TARGETS)`:
+.. _TARGETS:
+
+.. code-block:: cmake
+
+  install(TARGETS targets... [EXPORT <export-name>]
+          [RUNTIME_DEPENDENCIES args...|RUNTIME_DEPENDENCY_SET <set-name>]
+          [[ARCHIVE|LIBRARY|RUNTIME|OBJECTS|FRAMEWORK|BUNDLE|
+            PRIVATE_HEADER|PUBLIC_HEADER|RESOURCE]
+           [DESTINATION <dir>]
+           [PERMISSIONS permissions...]
+           [CONFIGURATIONS [Debug|Release|...]]
+           [COMPONENT <component>]
+           [NAMELINK_COMPONENT <component>]
+           [OPTIONAL] [EXCLUDE_FROM_ALL]
+           [NAMELINK_ONLY|NAMELINK_SKIP]
+          ] [...]
+          [INCLUDES DESTINATION [<dir> ...]]
+          )
+
+The ``TARGETS`` form specifies rules for installing targets from a
+project.  There are several kinds of target :ref:`Output Artifacts`
+that may be installed:
+
+``ARCHIVE``
+  Target artifacts of this kind include:
+
+  * *Static libraries*
+    (except on macOS when marked as ``FRAMEWORK``, see below);
+  * *DLL import libraries*
+    (on all Windows-based systems including Cygwin; they have extension
+    ``.lib``, in contrast to the ``.dll`` libraries that go to ``RUNTIME``);
+  * On AIX, the *linker import file* created for executables with
+    :prop_tgt:`ENABLE_EXPORTS` enabled.
+
+``LIBRARY``
+  Target artifacts of this kind include:
+
+  * *Shared libraries*, except
+
+    - DLLs (these go to ``RUNTIME``, see below),
+    - on macOS when marked as ``FRAMEWORK`` (see below).
+
+``RUNTIME``
+  Target artifacts of this kind include:
+
+  * *Executables*
+    (except on macOS when marked as ``MACOSX_BUNDLE``, see ``BUNDLE`` below);
+  * DLLs (on all Windows-based systems including Cygwin; note that the
+    accompanying import libraries are of kind ``ARCHIVE``).
+
+``OBJECTS``
+  .. versionadded:: 3.9
+
+  Object files associated with *object libraries*.
+
+``FRAMEWORK``
+  Both static and shared libraries marked with the ``FRAMEWORK``
+  property are treated as ``FRAMEWORK`` targets on macOS.
+
+``BUNDLE``
+  Executables marked with the :prop_tgt:`MACOSX_BUNDLE` property are treated as
+  ``BUNDLE`` targets on macOS.
+
+``PUBLIC_HEADER``
+  Any :prop_tgt:`PUBLIC_HEADER` files associated with a library are installed in
+  the destination specified by the ``PUBLIC_HEADER`` argument on non-Apple
+  platforms. Rules defined by this argument are ignored for :prop_tgt:`FRAMEWORK`
+  libraries on Apple platforms because the associated files are installed
+  into the appropriate locations inside the framework folder. See
+  :prop_tgt:`PUBLIC_HEADER` for details.
+
+``PRIVATE_HEADER``
+  Similar to ``PUBLIC_HEADER``, but for ``PRIVATE_HEADER`` files. See
+  :prop_tgt:`PRIVATE_HEADER` for details.
+
+``RESOURCE``
+  Similar to ``PUBLIC_HEADER`` and ``PRIVATE_HEADER``, but for
+  ``RESOURCE`` files. See :prop_tgt:`RESOURCE` for details.
+
+For each of these arguments given, the arguments following them only apply
+to the target or file type specified in the argument. If none is given, the
+installation properties apply to all target types. If only one is given then
+only targets of that type will be installed (which can be used to install
+just a DLL or just an import library.)
+
+For regular executables, static libraries and shared libraries, the
+``DESTINATION`` argument is not required.  For these target types, when
+``DESTINATION`` is omitted, a default destination will be taken from the
+appropriate variable from :module:`GNUInstallDirs`, or set to a built-in
+default value if that variable is not defined.  The same is true for the
+public and private headers associated with the installed targets through the
+:prop_tgt:`PUBLIC_HEADER` and :prop_tgt:`PRIVATE_HEADER` target properties.
+A destination must always be provided for module libraries, Apple bundles and
+frameworks.  A destination can be omitted for interface and object libraries,
+but they are handled differently (see the discussion of this topic toward the
+end of this section).
+
+The following table shows the target types with their associated variables and
+built-in defaults that apply when no destination is given:
+
+================== =============================== ======================
+   Target Type         GNUInstallDirs Variable        Built-In Default
+================== =============================== ======================
+``RUNTIME``        ``${CMAKE_INSTALL_BINDIR}``     ``bin``
+``LIBRARY``        ``${CMAKE_INSTALL_LIBDIR}``     ``lib``
+``ARCHIVE``        ``${CMAKE_INSTALL_LIBDIR}``     ``lib``
+``PRIVATE_HEADER`` ``${CMAKE_INSTALL_INCLUDEDIR}`` ``include``
+``PUBLIC_HEADER``  ``${CMAKE_INSTALL_INCLUDEDIR}`` ``include``
+================== =============================== ======================
+
+Projects wishing to follow the common practice of installing headers into a
+project-specific subdirectory will need to provide a destination rather than
+rely on the above.
+
+To make packages compliant with distribution filesystem layout policies, if
+projects must specify a ``DESTINATION``, it is recommended that they use a
+path that begins with the appropriate :module:`GNUInstallDirs` variable.
+This allows package maintainers to control the install destination by setting
+the appropriate cache variables.  The following example shows a static library
+being installed to the default destination provided by
+:module:`GNUInstallDirs`, but with its headers installed to a project-specific
+subdirectory that follows the above recommendation:
+
+.. code-block:: cmake
+
+  add_library(mylib STATIC ...)
+  set_target_properties(mylib PROPERTIES PUBLIC_HEADER mylib.h)
+  include(GNUInstallDirs)
+  install(TARGETS mylib
+          PUBLIC_HEADER
+            DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/myproj
+  )
+
+In addition to the common options listed above, each target can accept
+the following additional arguments:
+
+``NAMELINK_COMPONENT``
+  .. versionadded:: 3.12
+
+  On some platforms a versioned shared library has a symbolic link such
+  as::
+
+    lib<name>.so -> lib<name>.so.1
+
+  where ``lib<name>.so.1`` is the soname of the library and ``lib<name>.so``
+  is a "namelink" allowing linkers to find the library when given
+  ``-l<name>``. The ``NAMELINK_COMPONENT`` option is similar to the
+  ``COMPONENT`` option, but it changes the installation component of a shared
+  library namelink if one is generated. If not specified, this defaults to the
+  value of ``COMPONENT``. It is an error to use this parameter outside of a
+  ``LIBRARY`` block.
+
+  Consider the following example:
+
+  .. code-block:: cmake
+
+    install(TARGETS mylib
+            LIBRARY
+              COMPONENT Libraries
+              NAMELINK_COMPONENT Development
+            PUBLIC_HEADER
+              COMPONENT Development
+           )
+
+  In this scenario, if you choose to install only the ``Development``
+  component, both the headers and namelink will be installed without the
+  library. (If you don't also install the ``Libraries`` component, the
+  namelink will be a dangling symlink, and projects that link to the library
+  will have build errors.) If you install only the ``Libraries`` component,
+  only the library will be installed, without the headers and namelink.
+
+  This option is typically used for package managers that have separate
+  runtime and development packages. For example, on Debian systems, the
+  library is expected to be in the runtime package, and the headers and
+  namelink are expected to be in the development package.
+
+  See the :prop_tgt:`VERSION` and :prop_tgt:`SOVERSION` target properties for
+  details on creating versioned shared libraries.
+
+``NAMELINK_ONLY``
+  This option causes the installation of only the namelink when a library
+  target is installed. On platforms where versioned shared libraries do not
+  have namelinks or when a library is not versioned, the ``NAMELINK_ONLY``
+  option installs nothing. It is an error to use this parameter outside of a
+  ``LIBRARY`` block.
+
+  When ``NAMELINK_ONLY`` is given, either ``NAMELINK_COMPONENT`` or
+  ``COMPONENT`` may be used to specify the installation component of the
+  namelink, but ``COMPONENT`` should generally be preferred.
+
+``NAMELINK_SKIP``
+  Similar to ``NAMELINK_ONLY``, but it has the opposite effect: it causes the
+  installation of library files other than the namelink when a library target
+  is installed. When neither ``NAMELINK_ONLY`` or ``NAMELINK_SKIP`` are given,
+  both portions are installed. On platforms where versioned shared libraries
+  do not have symlinks or when a library is not versioned, ``NAMELINK_SKIP``
+  installs the library. It is an error to use this parameter outside of a
+  ``LIBRARY`` block.
+
+  If ``NAMELINK_SKIP`` is specified, ``NAMELINK_COMPONENT`` has no effect. It
+  is not recommended to use ``NAMELINK_SKIP`` in conjunction with
+  ``NAMELINK_COMPONENT``.
+
+The `install(TARGETS)`_ command can also accept the following options at the
+top level:
+
+``EXPORT``
+  This option associates the installed target files with an export called
+  ``<export-name>``.  It must appear before any target options.  To actually
+  install the export file itself, call `install(EXPORT)`_, documented below.
+  See documentation of the :prop_tgt:`EXPORT_NAME` target property to change
+  the name of the exported target.
+
+``INCLUDES DESTINATION``
+  This option specifies a list of directories which will be added to the
+  :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` target property of the
+  ``<targets>`` when exported by the `install(EXPORT)`_ command. If a
+  relative path is specified, it is treated as relative to the
+  ``$<INSTALL_PREFIX>``.
+
+``RUNTIME_DEPENDENCY_SET``
+  .. versionadded:: 3.21
+
+  This option causes all runtime dependencies of installed executable, shared
+  library, and module targets to be added to the specified runtime dependency
+  set. This set can then be installed with an
+  `install(RUNTIME_DEPENDENCY_SET)`_ command.
+
+  This keyword and the ``RUNTIME_DEPENDENCIES`` keyword are mutually
+  exclusive.
+
+``RUNTIME_DEPENDENCIES``
+  .. versionadded:: 3.21
+
+  This option causes all runtime dependencies of installed executable, shared
+  library, and module targets to be installed along with the targets
+  themselves. The ``RUNTIME``, ``LIBRARY``, ``FRAMEWORK``, and generic
+  arguments are used to determine the properties (``DESTINATION``,
+  ``COMPONENT``, etc.) of the installation of these dependencies.
+
+  ``RUNTIME_DEPENDENCIES`` is semantically equivalent to the following pair
+  of calls:
+
+  .. code-block:: cmake
+
+    install(TARGETS ... RUNTIME_DEPENDENCY_SET <set-name>)
+    install(RUNTIME_DEPENDENCY_SET <set-name> args...)
+
+  where ``<set-name>`` will be a randomly generated set name.
+  The ``args...`` may include any of the following keywords supported by
+  the `install(RUNTIME_DEPENDENCY_SET)`_ command:
+
+  * ``DIRECTORIES``
+  * ``PRE_INCLUDE_REGEXES``
+  * ``PRE_EXCLUDE_REGEXES``
+  * ``POST_INCLUDE_REGEXES``
+  * ``POST_EXCLUDE_REGEXES``
+  * ``POST_INCLUDE_FILES``
+  * ``POST_EXCLUDE_FILES``
+
+  The ``RUNTIME_DEPENDENCIES`` and ``RUNTIME_DEPENDENCY_SET`` keywords are
+  mutually exclusive.
+
+One or more groups of properties may be specified in a single call to
+the ``TARGETS`` form of this command.  A target may be installed more than
+once to different locations.  Consider hypothetical targets ``myExe``,
+``mySharedLib``, and ``myStaticLib``.  The code:
+
+.. code-block:: cmake
+
+  install(TARGETS myExe mySharedLib myStaticLib
+          RUNTIME DESTINATION bin
+          LIBRARY DESTINATION lib
+          ARCHIVE DESTINATION lib/static)
+  install(TARGETS mySharedLib DESTINATION /some/full/path)
+
+will install ``myExe`` to ``<prefix>/bin`` and ``myStaticLib`` to
+``<prefix>/lib/static``.  On non-DLL platforms ``mySharedLib`` will be
+installed to ``<prefix>/lib`` and ``/some/full/path``.  On DLL platforms
+the ``mySharedLib`` DLL will be installed to ``<prefix>/bin`` and
+``/some/full/path`` and its import library will be installed to
+``<prefix>/lib/static`` and ``/some/full/path``.
+
+:ref:`Interface Libraries` may be listed among the targets to install.
+They install no artifacts but will be included in an associated ``EXPORT``.
+If :ref:`Object Libraries` are listed but given no destination for their
+object files, they will be exported as :ref:`Interface Libraries`.
+This is sufficient to satisfy transitive usage requirements of other
+targets that link to the object libraries in their implementation.
+
+Installing a target with the :prop_tgt:`EXCLUDE_FROM_ALL` target property
+set to ``TRUE`` has undefined behavior.
+
+.. versionadded:: 3.3
+  An install destination given as a ``DESTINATION`` argument may
+  use "generator expressions" with the syntax ``$<...>``.  See the
+  :manual:`cmake-generator-expressions(7)` manual for available expressions.
+
+.. versionadded:: 3.13
+  `install(TARGETS)`_ can install targets that were created in
+  other directories.  When using such cross-directory install rules, running
+  ``make install`` (or similar) from a subdirectory will not guarantee that
+  targets from other directories are up-to-date.  You can use
+  :command:`target_link_libraries` or :command:`add_dependencies`
+  to ensure that such out-of-directory targets are built before the
+  subdirectory-specific install rules are run.
+
+Installing Imported Runtime Artifacts
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. _`install(IMPORTED_RUNTIME_ARTIFACTS)`:
+.. _IMPORTED_RUNTIME_ARTIFACTS:
+
+.. versionadded:: 3.21
+
+.. code-block:: cmake
+
+  install(IMPORTED_RUNTIME_ARTIFACTS targets...
+          [RUNTIME_DEPENDENCY_SET <set-name>]
+          [[LIBRARY|RUNTIME|FRAMEWORK|BUNDLE]
+           [DESTINATION <dir>]
+           [PERMISSIONS permissions...]
+           [CONFIGURATIONS [Debug|Release|...]]
+           [COMPONENT <component>]
+           [OPTIONAL] [EXCLUDE_FROM_ALL]
+          ] [...]
+          )
+
+The ``IMPORTED_RUNTIME_ARTIFACTS`` form specifies rules for installing the
+runtime artifacts of imported targets. Projects may do this if they want to
+bundle outside executables or modules inside their installation. The
+``LIBRARY``, ``RUNTIME``, ``FRAMEWORK``, and ``BUNDLE`` arguments have the
+same semantics that they do in the `TARGETS`_ mode. Only the runtime artifacts
+of imported targets are installed (except in the case of :prop_tgt:`FRAMEWORK`
+libraries, :prop_tgt:`MACOSX_BUNDLE` executables, and :prop_tgt:`BUNDLE`
+CFBundles.) For example, headers and import libraries associated with DLLs are
+not installed. In the case of :prop_tgt:`FRAMEWORK` libraries,
+:prop_tgt:`MACOSX_BUNDLE` executables, and :prop_tgt:`BUNDLE` CFBundles, the
+entire directory is installed.
+
+The ``RUNTIME_DEPENDENCY_SET`` option causes the runtime artifacts of the
+imported executable, shared library, and module library ``targets`` to be
+added to the ``<set-name>`` runtime dependency set. This set can then be
+installed with an `install(RUNTIME_DEPENDENCY_SET)`_ command.
+
+Installing Files
+^^^^^^^^^^^^^^^^
+
+.. _`install(FILES)`:
+.. _`install(PROGRAMS)`:
+.. _FILES:
+.. _PROGRAMS:
+
+.. code-block:: cmake
+
+  install(<FILES|PROGRAMS> files...
+          TYPE <type> | DESTINATION <dir>
+          [PERMISSIONS permissions...]
+          [CONFIGURATIONS [Debug|Release|...]]
+          [COMPONENT <component>]
+          [RENAME <name>] [OPTIONAL] [EXCLUDE_FROM_ALL])
+
+The ``FILES`` form specifies rules for installing files for a project.
+File names given as relative paths are interpreted with respect to the
+current source directory.  Files installed by this form are by default
+given permissions ``OWNER_WRITE``, ``OWNER_READ``, ``GROUP_READ``, and
+``WORLD_READ`` if no ``PERMISSIONS`` argument is given.
+
+The ``PROGRAMS`` form is identical to the ``FILES`` form except that the
+default permissions for the installed file also include ``OWNER_EXECUTE``,
+``GROUP_EXECUTE``, and ``WORLD_EXECUTE``.  This form is intended to install
+programs that are not targets, such as shell scripts.  Use the ``TARGETS``
+form to install targets built within the project.
+
+The list of ``files...`` given to ``FILES`` or ``PROGRAMS`` may use
+"generator expressions" with the syntax ``$<...>``.  See the
+:manual:`cmake-generator-expressions(7)` manual for available expressions.
+However, if any item begins in a generator expression it must evaluate
+to a full path.
+
+Either a ``TYPE`` or a ``DESTINATION`` must be provided, but not both.
+A ``TYPE`` argument specifies the generic file type of the files being
+installed.  A destination will then be set automatically by taking the
+corresponding variable from :module:`GNUInstallDirs`, or by using a
+built-in default if that variable is not defined.  See the table below for
+the supported file types and their corresponding variables and built-in
+defaults.  Projects can provide a ``DESTINATION`` argument instead of a
+file type if they wish to explicitly define the install destination.
+
+======================= ================================== =========================
+   ``TYPE`` Argument         GNUInstallDirs Variable           Built-In Default
+======================= ================================== =========================
+``BIN``                 ``${CMAKE_INSTALL_BINDIR}``        ``bin``
+``SBIN``                ``${CMAKE_INSTALL_SBINDIR}``       ``sbin``
+``LIB``                 ``${CMAKE_INSTALL_LIBDIR}``        ``lib``
+``INCLUDE``             ``${CMAKE_INSTALL_INCLUDEDIR}``    ``include``
+``SYSCONF``             ``${CMAKE_INSTALL_SYSCONFDIR}``    ``etc``
+``SHAREDSTATE``         ``${CMAKE_INSTALL_SHARESTATEDIR}`` ``com``
+``LOCALSTATE``          ``${CMAKE_INSTALL_LOCALSTATEDIR}`` ``var``
+``RUNSTATE``            ``${CMAKE_INSTALL_RUNSTATEDIR}``   ``<LOCALSTATE dir>/run``
+``DATA``                ``${CMAKE_INSTALL_DATADIR}``       ``<DATAROOT dir>``
+``INFO``                ``${CMAKE_INSTALL_INFODIR}``       ``<DATAROOT dir>/info``
+``LOCALE``              ``${CMAKE_INSTALL_LOCALEDIR}``     ``<DATAROOT dir>/locale``
+``MAN``                 ``${CMAKE_INSTALL_MANDIR}``        ``<DATAROOT dir>/man``
+``DOC``                 ``${CMAKE_INSTALL_DOCDIR}``        ``<DATAROOT dir>/doc``
+======================= ================================== =========================
+
+Projects wishing to follow the common practice of installing headers into a
+project-specific subdirectory will need to provide a destination rather than
+rely on the above.
+
+Note that some of the types' built-in defaults use the ``DATAROOT`` directory as
+a prefix. The ``DATAROOT`` prefix is calculated similarly to the types, with
+``CMAKE_INSTALL_DATAROOTDIR`` as the variable and ``share`` as the built-in
+default. You cannot use ``DATAROOT`` as a ``TYPE`` parameter; please use
+``DATA`` instead.
+
+To make packages compliant with distribution filesystem layout policies, if
+projects must specify a ``DESTINATION``, it is recommended that they use a
+path that begins with the appropriate :module:`GNUInstallDirs` variable.
+This allows package maintainers to control the install destination by setting
+the appropriate cache variables.  The following example shows how to follow
+this advice while installing headers to a project-specific subdirectory:
+
+.. code-block:: cmake
+
+  include(GNUInstallDirs)
+  install(FILES mylib.h
+          DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/myproj
+  )
+
+.. versionadded:: 3.4
+  An install destination given as a ``DESTINATION`` argument may
+  use "generator expressions" with the syntax ``$<...>``.  See the
+  :manual:`cmake-generator-expressions(7)` manual for available expressions.
+
+.. versionadded:: 3.20
+  An install rename given as a ``RENAME`` argument may
+  use "generator expressions" with the syntax ``$<...>``.  See the
+  :manual:`cmake-generator-expressions(7)` manual for available expressions.
+
+Installing Directories
+^^^^^^^^^^^^^^^^^^^^^^
+
+.. _`install(DIRECTORY)`:
+.. _DIRECTORY:
+
+.. code-block:: cmake
+
+  install(DIRECTORY dirs...
+          TYPE <type> | DESTINATION <dir>
+          [FILE_PERMISSIONS permissions...]
+          [DIRECTORY_PERMISSIONS permissions...]
+          [USE_SOURCE_PERMISSIONS] [OPTIONAL] [MESSAGE_NEVER]
+          [CONFIGURATIONS [Debug|Release|...]]
+          [COMPONENT <component>] [EXCLUDE_FROM_ALL]
+          [FILES_MATCHING]
+          [[PATTERN <pattern> | REGEX <regex>]
+           [EXCLUDE] [PERMISSIONS permissions...]] [...])
+
+The ``DIRECTORY`` form installs contents of one or more directories to a
+given destination.  The directory structure is copied verbatim to the
+destination.  The last component of each directory name is appended to
+the destination directory but a trailing slash may be used to avoid
+this because it leaves the last component empty.  Directory names
+given as relative paths are interpreted with respect to the current
+source directory.  If no input directory names are given the
+destination directory will be created but nothing will be installed
+into it.  The ``FILE_PERMISSIONS`` and ``DIRECTORY_PERMISSIONS`` options
+specify permissions given to files and directories in the destination.
+If ``USE_SOURCE_PERMISSIONS`` is specified and ``FILE_PERMISSIONS`` is not,
+file permissions will be copied from the source directory structure.
+If no permissions are specified files will be given the default
+permissions specified in the ``FILES`` form of the command, and the
+directories will be given the default permissions specified in the
+``PROGRAMS`` form of the command.
+
+.. versionadded:: 3.1
+  The ``MESSAGE_NEVER`` option disables file installation status output.
+
+Installation of directories may be controlled with fine granularity
+using the ``PATTERN`` or ``REGEX`` options.  These "match" options specify a
+globbing pattern or regular expression to match directories or files
+encountered within input directories.  They may be used to apply
+certain options (see below) to a subset of the files and directories
+encountered.  The full path to each input file or directory (with
+forward slashes) is matched against the expression.  A ``PATTERN`` will
+match only complete file names: the portion of the full path matching
+the pattern must occur at the end of the file name and be preceded by
+a slash.  A ``REGEX`` will match any portion of the full path but it may
+use ``/`` and ``$`` to simulate the ``PATTERN`` behavior.  By default all
+files and directories are installed whether or not they are matched.
+The ``FILES_MATCHING`` option may be given before the first match option
+to disable installation of files (but not directories) not matched by
+any expression.  For example, the code
+
+.. code-block:: cmake
+
+  install(DIRECTORY src/ DESTINATION include/myproj
+          FILES_MATCHING PATTERN "*.h")
+
+will extract and install header files from a source tree.
+
+Some options may follow a ``PATTERN`` or ``REGEX`` expression as described
+under :ref:`string(REGEX) <Regex Specification>` and are applied
+only to files or directories matching them.  The ``EXCLUDE`` option will
+skip the matched file or directory.  The ``PERMISSIONS`` option overrides
+the permissions setting for the matched file or directory.  For
+example the code
+
+.. code-block:: cmake
+
+  install(DIRECTORY icons scripts/ DESTINATION share/myproj
+          PATTERN "CVS" EXCLUDE
+          PATTERN "scripts/*"
+          PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
+                      GROUP_EXECUTE GROUP_READ)
+
+will install the ``icons`` directory to ``share/myproj/icons`` and the
+``scripts`` directory to ``share/myproj``.  The icons will get default
+file permissions, the scripts will be given specific permissions, and any
+``CVS`` directories will be excluded.
+
+Either a ``TYPE`` or a ``DESTINATION`` must be provided, but not both.
+A ``TYPE`` argument specifies the generic file type of the files within the
+listed directories being installed.  A destination will then be set
+automatically by taking the corresponding variable from
+:module:`GNUInstallDirs`, or by using a built-in default if that variable
+is not defined.  See the table below for the supported file types and their
+corresponding variables and built-in defaults.  Projects can provide a
+``DESTINATION`` argument instead of a file type if they wish to explicitly
+define the install destination.
+
+======================= ================================== =========================
+   ``TYPE`` Argument         GNUInstallDirs Variable           Built-In Default
+======================= ================================== =========================
+``BIN``                 ``${CMAKE_INSTALL_BINDIR}``        ``bin``
+``SBIN``                ``${CMAKE_INSTALL_SBINDIR}``       ``sbin``
+``LIB``                 ``${CMAKE_INSTALL_LIBDIR}``        ``lib``
+``INCLUDE``             ``${CMAKE_INSTALL_INCLUDEDIR}``    ``include``
+``SYSCONF``             ``${CMAKE_INSTALL_SYSCONFDIR}``    ``etc``
+``SHAREDSTATE``         ``${CMAKE_INSTALL_SHARESTATEDIR}`` ``com``
+``LOCALSTATE``          ``${CMAKE_INSTALL_LOCALSTATEDIR}`` ``var``
+``RUNSTATE``            ``${CMAKE_INSTALL_RUNSTATEDIR}``   ``<LOCALSTATE dir>/run``
+``DATA``                ``${CMAKE_INSTALL_DATADIR}``       ``<DATAROOT dir>``
+``INFO``                ``${CMAKE_INSTALL_INFODIR}``       ``<DATAROOT dir>/info``
+``LOCALE``              ``${CMAKE_INSTALL_LOCALEDIR}``     ``<DATAROOT dir>/locale``
+``MAN``                 ``${CMAKE_INSTALL_MANDIR}``        ``<DATAROOT dir>/man``
+``DOC``                 ``${CMAKE_INSTALL_DOCDIR}``        ``<DATAROOT dir>/doc``
+======================= ================================== =========================
+
+Note that some of the types' built-in defaults use the ``DATAROOT`` directory as
+a prefix. The ``DATAROOT`` prefix is calculated similarly to the types, with
+``CMAKE_INSTALL_DATAROOTDIR`` as the variable and ``share`` as the built-in
+default. You cannot use ``DATAROOT`` as a ``TYPE`` parameter; please use
+``DATA`` instead.
+
+To make packages compliant with distribution filesystem layout policies, if
+projects must specify a ``DESTINATION``, it is recommended that they use a
+path that begins with the appropriate :module:`GNUInstallDirs` variable.
+This allows package maintainers to control the install destination by setting
+the appropriate cache variables.
+
+.. versionadded:: 3.4
+  An install destination given as a ``DESTINATION`` argument may
+  use "generator expressions" with the syntax ``$<...>``.  See the
+  :manual:`cmake-generator-expressions(7)` manual for available expressions.
+
+.. versionadded:: 3.5
+  The list of ``dirs...`` given to ``DIRECTORY`` may use
+  "generator expressions" too.
+
+Custom Installation Logic
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. _`install(CODE)`:
+.. _`install(SCRIPT)`:
+.. _CODE:
+.. _SCRIPT:
+
+.. code-block:: cmake
+
+  install([[SCRIPT <file>] [CODE <code>]]
+          [ALL_COMPONENTS | COMPONENT <component>]
+          [EXCLUDE_FROM_ALL] [...])
+
+The ``SCRIPT`` form will invoke the given CMake script files during
+installation.  If the script file name is a relative path it will be
+interpreted with respect to the current source directory.  The ``CODE``
+form will invoke the given CMake code during installation.  Code is
+specified as a single argument inside a double-quoted string.  For
+example, the code
+
+.. code-block:: cmake
+
+  install(CODE "MESSAGE(\"Sample install message.\")")
+
+will print a message during installation.
+
+.. versionadded:: 3.21
+  When the ``ALL_COMPONENTS`` option is given, the custom installation
+  script code will be executed for every component of a component-specific
+  installation.  This option is mutually exclusive with the ``COMPONENT``
+  option.
+
+.. versionadded:: 3.14
+  ``<file>`` or ``<code>`` may use "generator expressions" with the syntax
+  ``$<...>`` (in the case of ``<file>``, this refers to their use in the file
+  name, not the file's contents).  See the
+  :manual:`cmake-generator-expressions(7)` manual for available expressions.
+
+Installing Exports
+^^^^^^^^^^^^^^^^^^
+
+.. _`install(EXPORT)`:
+.. _EXPORT:
+
+.. code-block:: cmake
+
+  install(EXPORT <export-name> DESTINATION <dir>
+          [NAMESPACE <namespace>] [[FILE <name>.cmake]|
+          [PERMISSIONS permissions...]
+          [CONFIGURATIONS [Debug|Release|...]]
+          [EXPORT_LINK_INTERFACE_LIBRARIES]
+          [COMPONENT <component>]
+          [EXCLUDE_FROM_ALL])
+  install(EXPORT_ANDROID_MK <export-name> DESTINATION <dir> [...])
+
+The ``EXPORT`` form generates and installs a CMake file containing code to
+import targets from the installation tree into another project.
+Target installations are associated with the export ``<export-name>``
+using the ``EXPORT`` option of the `install(TARGETS)`_ signature
+documented above.  The ``NAMESPACE`` option will prepend ``<namespace>`` to
+the target names as they are written to the import file.  By default
+the generated file will be called ``<export-name>.cmake`` but the ``FILE``
+option may be used to specify a different name.  The value given to
+the ``FILE`` option must be a file name with the ``.cmake`` extension.
+If a ``CONFIGURATIONS`` option is given then the file will only be installed
+when one of the named configurations is installed.  Additionally, the
+generated import file will reference only the matching target
+configurations.  The ``EXPORT_LINK_INTERFACE_LIBRARIES`` keyword, if
+present, causes the contents of the properties matching
+``(IMPORTED_)?LINK_INTERFACE_LIBRARIES(_<CONFIG>)?`` to be exported, when
+policy :policy:`CMP0022` is ``NEW``.
+
+.. note::
+  The installed ``<export-name>.cmake`` file may come with additional
+  per-configuration ``<export-name>-*.cmake`` files to be loaded by
+  globbing.  Do not use an export name that is the same as the package
+  name in combination with installing a ``<package-name>-config.cmake``
+  file or the latter may be incorrectly matched by the glob and loaded.
+
+When a ``COMPONENT`` option is given, the listed ``<component>`` implicitly
+depends on all components mentioned in the export set. The exported
+``<name>.cmake`` file will require each of the exported components to be
+present in order for dependent projects to build properly. For example, a
+project may define components ``Runtime`` and ``Development``, with shared
+libraries going into the ``Runtime`` component and static libraries and
+headers going into the ``Development`` component. The export set would also
+typically be part of the ``Development`` component, but it would export
+targets from both the ``Runtime`` and ``Development`` components. Therefore,
+the ``Runtime`` component would need to be installed if the ``Development``
+component was installed, but not vice versa. If the ``Development`` component
+was installed without the ``Runtime`` component, dependent projects that try
+to link against it would have build errors. Package managers, such as APT and
+RPM, typically handle this by listing the ``Runtime`` component as a dependency
+of the ``Development`` component in the package metadata, ensuring that the
+library is always installed if the headers and CMake export file are present.
+
+.. versionadded:: 3.7
+  In addition to cmake language files, the ``EXPORT_ANDROID_MK`` mode maybe
+  used to specify an export to the android ndk build system.  This mode
+  accepts the same options as the normal export mode.  The Android
+  NDK supports the use of prebuilt libraries, both static and shared. This
+  allows cmake to build the libraries of a project and make them available
+  to an ndk build system complete with transitive dependencies, include flags
+  and defines required to use the libraries.
+
+The ``EXPORT`` form is useful to help outside projects use targets built
+and installed by the current project.  For example, the code
+
+.. code-block:: cmake
+
+  install(TARGETS myexe EXPORT myproj DESTINATION bin)
+  install(EXPORT myproj NAMESPACE mp_ DESTINATION lib/myproj)
+  install(EXPORT_ANDROID_MK myproj DESTINATION share/ndk-modules)
+
+will install the executable ``myexe`` to ``<prefix>/bin`` and code to import
+it in the file ``<prefix>/lib/myproj/myproj.cmake`` and
+``<prefix>/share/ndk-modules/Android.mk``.  An outside project
+may load this file with the include command and reference the ``myexe``
+executable from the installation tree using the imported target name
+``mp_myexe`` as if the target were built in its own tree.
+
+.. note::
+  This command supersedes the :command:`install_targets` command and
+  the :prop_tgt:`PRE_INSTALL_SCRIPT` and :prop_tgt:`POST_INSTALL_SCRIPT`
+  target properties.  It also replaces the ``FILES`` forms of the
+  :command:`install_files` and :command:`install_programs` commands.
+  The processing order of these install rules relative to
+  those generated by :command:`install_targets`,
+  :command:`install_files`, and :command:`install_programs` commands
+  is not defined.
+
+Installing Runtime Dependencies
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. _`install(RUNTIME_DEPENDENCY_SET)`:
+.. _RUNTIME_DEPENDENCY_SET:
+
+.. versionadded:: 3.21
+
+.. code-block:: cmake
+
+  install(RUNTIME_DEPENDENCY_SET <set-name>
+          [[LIBRARY|RUNTIME|FRAMEWORK]
+           [DESTINATION <dir>]
+           [PERMISSIONS permissions...]
+           [CONFIGURATIONS [Debug|Release|...]]
+           [COMPONENT <component>]
+           [NAMELINK_COMPONENT <component>]
+           [OPTIONAL] [EXCLUDE_FROM_ALL]
+          ] [...]
+          [PRE_INCLUDE_REGEXES regexes...]
+          [PRE_EXCLUDE_REGEXES regexes...]
+          [POST_INCLUDE_REGEXES regexes...]
+          [POST_EXCLUDE_REGEXES regexes...]
+          [POST_INCLUDE_FILES files...]
+          [POST_EXCLUDE_FILES files...]
+          [DIRECTORIES directories...]
+          )
+
+Installs a runtime dependency set previously created by one or more
+`install(TARGETS)`_ or `install(IMPORTED_RUNTIME_ARTIFACTS)`_ commands. The
+dependencies of targets belonging to a runtime dependency set are installed in
+the ``RUNTIME`` destination and component on DLL platforms, and in the
+``LIBRARY`` destination and component on non-DLL platforms. macOS frameworks
+are installed in the ``FRAMEWORK`` destination and component.
+Targets built within the build tree will never be installed as runtime
+dependencies, nor will their own dependencies, unless the targets themselves
+are installed with `install(TARGETS)`_.
+
+The generated install script calls :command:`file(GET_RUNTIME_DEPENDENCIES)`
+on the build-tree files to calculate the runtime dependencies. The build-tree
+executable files are passed as the ``EXECUTABLES`` argument, the build-tree
+shared libraries as the ``LIBRARIES`` argument, and the build-tree modules as
+the ``MODULES`` argument. On macOS, if one of the executables is a
+:prop_tgt:`MACOSX_BUNDLE`, that executable is passed as the
+``BUNDLE_EXECUTABLE`` argument. At most one such bundle executable may be in
+the runtime dependency set on macOS. The :prop_tgt:`MACOSX_BUNDLE` property
+has no effect on other platforms. Note that
+:command:`file(GET_RUNTIME_DEPENDENCIES)` only supports collecting the runtime
+dependencies for Windows, Linux and macOS platforms, so
+``install(RUNTIME_DEPENDENCY_SET)`` has the same limitation.
+
+The following sub-arguments are forwarded through as the corresponding
+arguments to :command:`file(GET_RUNTIME_DEPENDENCIES)` (for those that provide
+a non-empty list of directories, regular expressions or files).  They all
+support :manual:`generator expressions <cmake-generator-expressions(7)>`.
+
+* ``DIRECTORIES <directories>``
+* ``PRE_INCLUDE_REGEXES <regexes>``
+* ``PRE_EXCLUDE_REGEXES <regexes>``
+* ``POST_INCLUDE_REGEXES <regexes>``
+* ``POST_EXCLUDE_REGEXES <regexes>``
+* ``POST_INCLUDE_FILES <files>``
+* ``POST_EXCLUDE_FILES <files>``
+
+Generated Installation Script
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. note::
+
+  Use of this feature is not recommended. Please consider using the
+  ``--install`` argument of :manual:`cmake(1)` instead.
+
+The ``install()`` command generates a file, ``cmake_install.cmake``, inside
+the build directory, which is used internally by the generated install target
+and by CPack. You can also invoke this script manually with ``cmake -P``. This
+script accepts several variables:
+
+``COMPONENT``
+  Set this variable to install only a single CPack component as opposed to all
+  of them. For example, if you only want to install the ``Development``
+  component, run ``cmake -DCOMPONENT=Development -P cmake_install.cmake``.
+
+``BUILD_TYPE``
+  Set this variable to change the build type if you are using a multi-config
+  generator. For example, to install with the ``Debug`` configuration, run
+  ``cmake -DBUILD_TYPE=Debug -P cmake_install.cmake``.
+
+``DESTDIR``
+  This is an environment variable rather than a CMake variable. It allows you
+  to change the installation prefix on UNIX systems. See :envvar:`DESTDIR` for
+  details.
diff --git a/share/cmake-3.22/Help/command/install_files.rst b/share/cmake-3.22/Help/command/install_files.rst
new file mode 100644
index 0000000..494f3d0
--- /dev/null
+++ b/share/cmake-3.22/Help/command/install_files.rst
@@ -0,0 +1,41 @@
+install_files
+-------------
+
+.. deprecated:: 3.0
+
+  Use the :command:`install(FILES)` command instead.
+
+This command has been superseded by the :command:`install` command.  It is
+provided for compatibility with older CMake code.  The ``FILES`` form is
+directly replaced by the ``FILES`` form of the :command:`install`
+command.  The regexp form can be expressed more clearly using the ``GLOB``
+form of the :command:`file` command.
+
+::
+
+  install_files(<dir> extension file file ...)
+
+Create rules to install the listed files with the given extension into
+the given directory.  Only files existing in the current source tree
+or its corresponding location in the binary tree may be listed.  If a
+file specified already has an extension, that extension will be
+removed first.  This is useful for providing lists of source files
+such as foo.cxx when you want the corresponding foo.h to be installed.
+A typical extension is ``.h``.
+
+::
+
+  install_files(<dir> regexp)
+
+Any files in the current source directory that match the regular
+expression will be installed.
+
+::
+
+  install_files(<dir> FILES file file ...)
+
+Any files listed after the ``FILES`` keyword will be installed explicitly
+from the names given.  Full paths are allowed in this form.
+
+The directory ``<dir>`` is relative to the installation prefix, which is
+stored in the variable :variable:`CMAKE_INSTALL_PREFIX`.
diff --git a/share/cmake-3.22/Help/command/install_programs.rst b/share/cmake-3.22/Help/command/install_programs.rst
new file mode 100644
index 0000000..eafae89
--- /dev/null
+++ b/share/cmake-3.22/Help/command/install_programs.rst
@@ -0,0 +1,36 @@
+install_programs
+----------------
+
+.. deprecated:: 3.0
+
+  Use the :command:`install(PROGRAMS)` command instead.
+
+This command has been superseded by the :command:`install` command.  It is
+provided for compatibility with older CMake code.  The ``FILES`` form is
+directly replaced by the ``PROGRAMS`` form of the :command:`install`
+command.  The regexp form can be expressed more clearly using the ``GLOB``
+form of the :command:`file` command.
+
+::
+
+  install_programs(<dir> file1 file2 [file3 ...])
+  install_programs(<dir> FILES file1 [file2 ...])
+
+Create rules to install the listed programs into the given directory.
+Use the ``FILES`` argument to guarantee that the file list version of the
+command will be used even when there is only one argument.
+
+::
+
+  install_programs(<dir> regexp)
+
+In the second form any program in the current source directory that
+matches the regular expression will be installed.
+
+This command is intended to install programs that are not built by
+cmake, such as shell scripts.  See the ``TARGETS`` form of the
+:command:`install` command to create installation rules for targets built
+by cmake.
+
+The directory ``<dir>`` is relative to the installation prefix, which is
+stored in the variable :variable:`CMAKE_INSTALL_PREFIX`.
diff --git a/share/cmake-3.22/Help/command/install_targets.rst b/share/cmake-3.22/Help/command/install_targets.rst
new file mode 100644
index 0000000..9355f8d
--- /dev/null
+++ b/share/cmake-3.22/Help/command/install_targets.rst
@@ -0,0 +1,19 @@
+install_targets
+---------------
+
+.. deprecated:: 3.0
+
+  Use the :command:`install(TARGETS)` command instead.
+
+This command has been superseded by the :command:`install` command.  It is
+provided for compatibility with older CMake code.
+
+::
+
+  install_targets(<dir> [RUNTIME_DIRECTORY dir] target target)
+
+Create rules to install the listed targets into the given directory.
+The directory ``<dir>`` is relative to the installation prefix, which is
+stored in the variable :variable:`CMAKE_INSTALL_PREFIX`.  If
+``RUNTIME_DIRECTORY`` is specified, then on systems with special runtime
+files (Windows DLL), the files will be copied to that directory.
diff --git a/share/cmake-3.22/Help/command/link_directories.rst b/share/cmake-3.22/Help/command/link_directories.rst
new file mode 100644
index 0000000..6732402
--- /dev/null
+++ b/share/cmake-3.22/Help/command/link_directories.rst
@@ -0,0 +1,55 @@
+link_directories
+----------------
+
+Add directories in which the linker will look for libraries.
+
+.. code-block:: cmake
+
+  link_directories([AFTER|BEFORE] directory1 [directory2 ...])
+
+Adds the paths in which the linker should search for libraries.
+Relative paths given to this command are interpreted as relative to
+the current source directory, see :policy:`CMP0015`.
+
+The command will apply only to targets created after it is called.
+
+.. versionadded:: 3.13
+  The directories are added to the :prop_dir:`LINK_DIRECTORIES` directory
+  property for the current ``CMakeLists.txt`` file, converting relative
+  paths to absolute as needed.  See the :manual:`cmake-buildsystem(7)`
+  manual for more on defining buildsystem properties.
+
+.. versionadded:: 3.13
+  By default the directories specified are appended onto the current list of
+  directories.  This default behavior can be changed by setting
+  :variable:`CMAKE_LINK_DIRECTORIES_BEFORE` to ``ON``.  By using
+  ``AFTER`` or ``BEFORE`` explicitly, you can select between appending and
+  prepending, independent of the default.
+
+.. versionadded:: 3.13
+  Arguments to ``link_directories`` may use "generator expressions" with
+  the syntax "$<...>".  See the :manual:`cmake-generator-expressions(7)`
+  manual for available expressions.
+
+.. note::
+
+  This command is rarely necessary and should be avoided where there are
+  other choices.  Prefer to pass full absolute paths to libraries where
+  possible, since this ensures the correct library will always be linked.
+  The :command:`find_library` command provides the full path, which can
+  generally be used directly in calls to :command:`target_link_libraries`.
+  Situations where a library search path may be needed include:
+
+  - Project generators like Xcode where the user can switch target
+    architecture at build time, but a full path to a library cannot
+    be used because it only provides one architecture (i.e. it is not
+    a universal binary).
+  - Libraries may themselves have other private library dependencies
+    that expect to be found via ``RPATH`` mechanisms, but some linkers
+    are not able to fully decode those paths (e.g. due to the presence
+    of things like ``$ORIGIN``).
+
+  If a library search path must be provided, prefer to localize the effect
+  where possible by using the :command:`target_link_directories` command
+  rather than ``link_directories()``.  The target-specific command can also
+  control how the search directories propagate to other dependent targets.
diff --git a/share/cmake-3.18/Help/command/link_libraries.rst b/share/cmake-3.22/Help/command/link_libraries.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/link_libraries.rst
rename to share/cmake-3.22/Help/command/link_libraries.rst
diff --git a/share/cmake-3.22/Help/command/list.rst b/share/cmake-3.22/Help/command/list.rst
new file mode 100644
index 0000000..9b49cb4
--- /dev/null
+++ b/share/cmake-3.22/Help/command/list.rst
@@ -0,0 +1,355 @@
+list
+----
+
+List operations.
+
+Synopsis
+^^^^^^^^
+
+.. parsed-literal::
+
+  `Reading`_
+    list(`LENGTH`_ <list> <out-var>)
+    list(`GET`_ <list> <element index> [<index> ...] <out-var>)
+    list(`JOIN`_ <list> <glue> <out-var>)
+    list(`SUBLIST`_ <list> <begin> <length> <out-var>)
+
+  `Search`_
+    list(`FIND`_ <list> <value> <out-var>)
+
+  `Modification`_
+    list(`APPEND`_ <list> [<element>...])
+    list(`FILTER`_ <list> {INCLUDE | EXCLUDE} REGEX <regex>)
+    list(`INSERT`_ <list> <index> [<element>...])
+    list(`POP_BACK`_ <list> [<out-var>...])
+    list(`POP_FRONT`_ <list> [<out-var>...])
+    list(`PREPEND`_ <list> [<element>...])
+    list(`REMOVE_ITEM`_ <list> <value>...)
+    list(`REMOVE_AT`_ <list> <index>...)
+    list(`REMOVE_DUPLICATES`_ <list>)
+    list(`TRANSFORM`_ <list> <ACTION> [...])
+
+  `Ordering`_
+    list(`REVERSE`_ <list>)
+    list(`SORT`_ <list> [...])
+
+Introduction
+^^^^^^^^^^^^
+
+The list subcommands ``APPEND``, ``INSERT``, ``FILTER``, ``PREPEND``,
+``POP_BACK``, ``POP_FRONT``, ``REMOVE_AT``, ``REMOVE_ITEM``,
+``REMOVE_DUPLICATES``, ``REVERSE`` and ``SORT`` may create
+new values for the list within the current CMake variable scope.  Similar to
+the :command:`set` command, the LIST command creates new variable values in
+the current scope, even if the list itself is actually defined in a parent
+scope.  To propagate the results of these operations upwards, use
+:command:`set` with ``PARENT_SCOPE``, :command:`set` with
+``CACHE INTERNAL``, or some other means of value propagation.
+
+.. note::
+
+  A list in cmake is a ``;`` separated group of strings.  To create a
+  list the set command can be used.  For example, ``set(var a b c d e)``
+  creates a list with ``a;b;c;d;e``, and ``set(var "a b c d e")`` creates a
+  string or a list with one item in it.   (Note macro arguments are not
+  variables, and therefore cannot be used in LIST commands.)
+
+.. note::
+
+  When specifying index values, if ``<element index>`` is 0 or greater, it
+  is indexed from the beginning of the list, with 0 representing the
+  first list element.  If ``<element index>`` is -1 or lesser, it is indexed
+  from the end of the list, with -1 representing the last list element.
+  Be careful when counting with negative indices: they do not start from
+  0.  -0 is equivalent to 0, the first list element.
+
+Reading
+^^^^^^^
+
+.. _LENGTH:
+
+.. code-block:: cmake
+
+  list(LENGTH <list> <output variable>)
+
+Returns the list's length.
+
+.. _GET:
+
+.. code-block:: cmake
+
+  list(GET <list> <element index> [<element index> ...] <output variable>)
+
+Returns the list of elements specified by indices from the list.
+
+.. _JOIN:
+
+.. code-block:: cmake
+
+  list(JOIN <list> <glue> <output variable>)
+
+.. versionadded:: 3.12
+
+Returns a string joining all list's elements using the glue string.
+To join multiple strings, which are not part of a list, use ``JOIN`` operator
+from :command:`string` command.
+
+.. _SUBLIST:
+
+.. code-block:: cmake
+
+  list(SUBLIST <list> <begin> <length> <output variable>)
+
+.. versionadded:: 3.12
+
+Returns a sublist of the given list.
+If ``<length>`` is 0, an empty list will be returned.
+If ``<length>`` is -1 or the list is smaller than ``<begin>+<length>`` then
+the remaining elements of the list starting at ``<begin>`` will be returned.
+
+Search
+^^^^^^
+
+.. _FIND:
+
+.. code-block:: cmake
+
+  list(FIND <list> <value> <output variable>)
+
+Returns the index of the element specified in the list or -1
+if it wasn't found.
+
+Modification
+^^^^^^^^^^^^
+
+.. _APPEND:
+
+.. code-block:: cmake
+
+  list(APPEND <list> [<element> ...])
+
+Appends elements to the list.
+
+.. _FILTER:
+
+.. code-block:: cmake
+
+  list(FILTER <list> <INCLUDE|EXCLUDE> REGEX <regular_expression>)
+
+.. versionadded:: 3.6
+
+Includes or removes items from the list that match the mode's pattern.
+In ``REGEX`` mode, items will be matched against the given regular expression.
+
+For more information on regular expressions look under
+:ref:`string(REGEX) <Regex Specification>`.
+
+.. _INSERT:
+
+.. code-block:: cmake
+
+  list(INSERT <list> <element_index> <element> [<element> ...])
+
+Inserts elements to the list to the specified location.
+
+.. _POP_BACK:
+
+.. code-block:: cmake
+
+  list(POP_BACK <list> [<out-var>...])
+
+.. versionadded:: 3.15
+
+If no variable name is given, removes exactly one element. Otherwise,
+with `N` variable names provided, assign the last `N` elements' values
+to the given variables and then remove the last `N` values from
+``<list>``.
+
+.. _POP_FRONT:
+
+.. code-block:: cmake
+
+  list(POP_FRONT <list> [<out-var>...])
+
+.. versionadded:: 3.15
+
+If no variable name is given, removes exactly one element. Otherwise,
+with `N` variable names provided, assign the first `N` elements' values
+to the given variables and then remove the first `N` values from
+``<list>``.
+
+.. _PREPEND:
+
+.. code-block:: cmake
+
+  list(PREPEND <list> [<element> ...])
+
+.. versionadded:: 3.15
+
+Insert elements to the 0th position in the list.
+
+.. _REMOVE_ITEM:
+
+.. code-block:: cmake
+
+  list(REMOVE_ITEM <list> <value> [<value> ...])
+
+Removes all instances of the given items from the list.
+
+.. _REMOVE_AT:
+
+.. code-block:: cmake
+
+  list(REMOVE_AT <list> <index> [<index> ...])
+
+Removes items at given indices from the list.
+
+.. _REMOVE_DUPLICATES:
+
+.. code-block:: cmake
+
+  list(REMOVE_DUPLICATES <list>)
+
+Removes duplicated items in the list. The relative order of items is preserved,
+but if duplicates are encountered, only the first instance is preserved.
+
+.. _TRANSFORM:
+
+.. code-block:: cmake
+
+  list(TRANSFORM <list> <ACTION> [<SELECTOR>]
+                        [OUTPUT_VARIABLE <output variable>])
+
+.. versionadded:: 3.12
+
+Transforms the list by applying an action to all or, by specifying a
+``<SELECTOR>``, to the selected elements of the list, storing the result
+in-place or in the specified output variable.
+
+.. note::
+
+   The ``TRANSFORM`` sub-command does not change the number of elements in the
+   list. If a ``<SELECTOR>`` is specified, only some elements will be changed,
+   the other ones will remain the same as before the transformation.
+
+``<ACTION>`` specifies the action to apply to the elements of the list.
+The actions have exactly the same semantics as sub-commands of the
+:command:`string` command.  ``<ACTION>`` must be one of the following:
+
+``APPEND``, ``PREPEND``: Append, prepend specified value to each element of
+the list.
+
+  .. code-block:: cmake
+
+    list(TRANSFORM <list> <APPEND|PREPEND> <value> ...)
+
+``TOUPPER``, ``TOLOWER``: Convert each element of the list to upper, lower
+characters.
+
+  .. code-block:: cmake
+
+    list(TRANSFORM <list> <TOLOWER|TOUPPER> ...)
+
+``STRIP``: Remove leading and trailing spaces from each element of the
+list.
+
+  .. code-block:: cmake
+
+    list(TRANSFORM <list> STRIP ...)
+
+``GENEX_STRIP``: Strip any
+:manual:`generator expressions <cmake-generator-expressions(7)>` from each
+element of the list.
+
+  .. code-block:: cmake
+
+    list(TRANSFORM <list> GENEX_STRIP ...)
+
+``REPLACE``: Match the regular expression as many times as possible and
+substitute the replacement expression for the match for each element
+of the list
+(Same semantic as ``REGEX REPLACE`` from :command:`string` command).
+
+  .. code-block:: cmake
+
+    list(TRANSFORM <list> REPLACE <regular_expression>
+                                  <replace_expression> ...)
+
+``<SELECTOR>`` determines which elements of the list will be transformed.
+Only one type of selector can be specified at a time.  When given,
+``<SELECTOR>`` must be one of the following:
+
+``AT``: Specify a list of indexes.
+
+  .. code-block:: cmake
+
+    list(TRANSFORM <list> <ACTION> AT <index> [<index> ...] ...)
+
+``FOR``: Specify a range with, optionally, an increment used to iterate over
+the range.
+
+  .. code-block:: cmake
+
+    list(TRANSFORM <list> <ACTION> FOR <start> <stop> [<step>] ...)
+
+``REGEX``: Specify a regular expression. Only elements matching the regular
+expression will be transformed.
+
+  .. code-block:: cmake
+
+    list(TRANSFORM <list> <ACTION> REGEX <regular_expression> ...)
+
+
+Ordering
+^^^^^^^^
+
+.. _REVERSE:
+
+.. code-block:: cmake
+
+  list(REVERSE <list>)
+
+Reverses the contents of the list in-place.
+
+.. _SORT:
+
+.. code-block:: cmake
+
+  list(SORT <list> [COMPARE <compare>] [CASE <case>] [ORDER <order>])
+
+Sorts the list in-place alphabetically.
+
+.. versionadded:: 3.13
+  Added the ``COMPARE``, ``CASE``, and ``ORDER`` options.
+
+.. versionadded:: 3.18
+  Added the ``COMPARE NATURAL`` option.
+
+Use the ``COMPARE`` keyword to select the comparison method for sorting.
+The ``<compare>`` option should be one of:
+
+* ``STRING``: Sorts a list of strings alphabetically.  This is the
+  default behavior if the ``COMPARE`` option is not given.
+* ``FILE_BASENAME``: Sorts a list of pathnames of files by their basenames.
+* ``NATURAL``: Sorts a list of strings using natural order
+  (see ``strverscmp(3)`` manual), i.e. such that contiguous digits
+  are compared as whole numbers.
+  For example: the following list `10.0 1.1 2.1 8.0 2.0 3.1`
+  will be sorted as `1.1 2.0 2.1 3.1 8.0 10.0` if the ``NATURAL``
+  comparison is selected where it will be sorted as
+  `1.1 10.0 2.0 2.1 3.1 8.0` with the ``STRING`` comparison.
+
+Use the ``CASE`` keyword to select a case sensitive or case insensitive
+sort mode.  The ``<case>`` option should be one of:
+
+* ``SENSITIVE``: List items are sorted in a case-sensitive manner.  This is
+  the default behavior if the ``CASE`` option is not given.
+* ``INSENSITIVE``: List items are sorted case insensitively.  The order of
+  items which differ only by upper/lowercase is not specified.
+
+To control the sort order, the ``ORDER`` keyword can be given.
+The ``<order>`` option should be one of:
+
+* ``ASCENDING``: Sorts the list in ascending order.  This is the default
+  behavior when the ``ORDER`` option is not given.
+* ``DESCENDING``: Sorts the list in descending order.
diff --git a/share/cmake-3.18/Help/command/load_cache.rst b/share/cmake-3.22/Help/command/load_cache.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/load_cache.rst
rename to share/cmake-3.22/Help/command/load_cache.rst
diff --git a/share/cmake-3.18/Help/command/load_command.rst b/share/cmake-3.22/Help/command/load_command.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/load_command.rst
rename to share/cmake-3.22/Help/command/load_command.rst
diff --git a/share/cmake-3.22/Help/command/macro.rst b/share/cmake-3.22/Help/command/macro.rst
new file mode 100644
index 0000000..5fe4c00
--- /dev/null
+++ b/share/cmake-3.22/Help/command/macro.rst
@@ -0,0 +1,151 @@
+macro
+-----
+
+Start recording a macro for later invocation as a command
+
+.. code-block:: cmake
+
+  macro(<name> [<arg1> ...])
+    <commands>
+  endmacro()
+
+Defines a macro named ``<name>`` that takes arguments named
+``<arg1>``, ... Commands listed after macro, but before the
+matching :command:`endmacro()`, are not executed until the macro
+is invoked.
+
+Per legacy, the :command:`endmacro` command admits an optional
+``<name>`` argument. If used, it must be a verbatim repeat of the
+argument of the opening ``macro`` command.
+
+See the :command:`cmake_policy()` command documentation for the behavior
+of policies inside macros.
+
+See the :ref:`Macro vs Function` section below for differences
+between CMake macros and :command:`functions <function>`.
+
+Invocation
+^^^^^^^^^^
+
+The macro invocation is case-insensitive. A macro defined as
+
+.. code-block:: cmake
+
+  macro(foo)
+    <commands>
+  endmacro()
+
+can be invoked through any of
+
+.. code-block:: cmake
+
+  foo()
+  Foo()
+  FOO()
+  cmake_language(CALL foo)
+
+and so on. However, it is strongly recommended to stay with the
+case chosen in the macro definition.  Typically macros use
+all-lowercase names.
+
+.. versionadded:: 3.18
+  The :command:`cmake_language(CALL ...)` command can also be used to
+  invoke the macro.
+
+Arguments
+^^^^^^^^^
+
+When a macro is invoked, the commands recorded in the macro are
+first modified by replacing formal parameters (``${arg1}``, ...)
+with the arguments passed, and then invoked as normal commands.
+
+In addition to referencing the formal parameters you can reference the
+values ``${ARGC}`` which will be set to the number of arguments passed
+into the function as well as ``${ARGV0}``, ``${ARGV1}``, ``${ARGV2}``,
+...  which will have the actual values of the arguments passed in.
+This facilitates creating macros with optional arguments.
+
+Furthermore, ``${ARGV}`` holds the list of all arguments given to the
+macro and ``${ARGN}`` holds the list of arguments past the last expected
+argument.
+Referencing to ``${ARGV#}`` arguments beyond ``${ARGC}`` have undefined
+behavior. Checking that ``${ARGC}`` is greater than ``#`` is the only
+way to ensure that ``${ARGV#}`` was passed to the function as an extra
+argument.
+
+.. _`Macro vs Function`:
+
+Macro vs Function
+^^^^^^^^^^^^^^^^^
+
+The ``macro`` command is very similar to the :command:`function` command.
+Nonetheless, there are a few important differences.
+
+In a function, ``ARGN``, ``ARGC``, ``ARGV`` and ``ARGV0``, ``ARGV1``, ...
+are true variables in the usual CMake sense.  In a macro, they are not,
+they are string replacements much like the C preprocessor would do
+with a macro.  This has a number of consequences, as explained in
+the :ref:`Argument Caveats` section below.
+
+Another difference between macros and functions is the control flow.
+A function is executed by transferring control from the calling
+statement to the function body.  A macro is executed as if the macro
+body were pasted in place of the calling statement.  This has the
+consequence that a :command:`return()` in a macro body does not
+just terminate execution of the macro; rather, control is returned
+from the scope of the macro call.  To avoid confusion, it is recommended
+to avoid :command:`return()` in macros altogether.
+
+Unlike a function, the :variable:`CMAKE_CURRENT_FUNCTION`,
+:variable:`CMAKE_CURRENT_FUNCTION_LIST_DIR`,
+:variable:`CMAKE_CURRENT_FUNCTION_LIST_FILE`,
+:variable:`CMAKE_CURRENT_FUNCTION_LIST_LINE` variables are not
+set for a macro.
+
+.. _`Argument Caveats`:
+
+Argument Caveats
+^^^^^^^^^^^^^^^^
+
+Since ``ARGN``, ``ARGC``, ``ARGV``, ``ARGV0`` etc. are not variables,
+you will NOT be able to use commands like
+
+.. code-block:: cmake
+
+ if(ARGV1) # ARGV1 is not a variable
+ if(DEFINED ARGV2) # ARGV2 is not a variable
+ if(ARGC GREATER 2) # ARGC is not a variable
+ foreach(loop_var IN LISTS ARGN) # ARGN is not a variable
+
+In the first case, you can use ``if(${ARGV1})``.  In the second and
+third case, the proper way to check if an optional variable was
+passed to the macro is to use ``if(${ARGC} GREATER 2)``.  In the
+last case, you can use ``foreach(loop_var ${ARGN})`` but this will
+skip empty arguments.  If you need to include them, you can use
+
+.. code-block:: cmake
+
+ set(list_var "${ARGN}")
+ foreach(loop_var IN LISTS list_var)
+
+Note that if you have a variable with the same name in the scope from
+which the macro is called, using unreferenced names will use the
+existing variable instead of the arguments. For example:
+
+.. code-block:: cmake
+
+ macro(bar)
+   foreach(arg IN LISTS ARGN)
+     <commands>
+   endforeach()
+ endmacro()
+
+ function(foo)
+   bar(x y z)
+ endfunction()
+
+ foo(a b c)
+
+Will loop over ``a;b;c`` and not over ``x;y;z`` as one might have expected.
+If you want true CMake variables and/or better CMake scope control you
+should look at the function command.
diff --git a/share/cmake-3.18/Help/command/make_directory.rst b/share/cmake-3.22/Help/command/make_directory.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/make_directory.rst
rename to share/cmake-3.22/Help/command/make_directory.rst
diff --git a/share/cmake-3.22/Help/command/mark_as_advanced.rst b/share/cmake-3.22/Help/command/mark_as_advanced.rst
new file mode 100644
index 0000000..201363f
--- /dev/null
+++ b/share/cmake-3.22/Help/command/mark_as_advanced.rst
@@ -0,0 +1,28 @@
+mark_as_advanced
+----------------
+
+Mark cmake cached variables as advanced.
+
+.. code-block:: cmake
+
+  mark_as_advanced([CLEAR|FORCE] <var1> ...)
+
+Sets the advanced/non-advanced state of the named
+cached variables.
+
+An advanced variable will not be displayed in any
+of the cmake GUIs unless the ``show advanced`` option is on.
+In script mode, the advanced/non-advanced state has no effect.
+
+If the keyword ``CLEAR`` is given
+then advanced variables are changed back to unadvanced.
+If the keyword ``FORCE`` is given
+then the variables are made advanced.
+If neither ``FORCE`` nor ``CLEAR`` is specified,
+new values will be marked as advanced, but if a
+variable already has an advanced/non-advanced state,
+it will not be changed.
+
+.. versionchanged:: 3.17
+  Variables passed to this command which are not already in the cache
+  are ignored. See policy :policy:`CMP0102`.
diff --git a/share/cmake-3.22/Help/command/math.rst b/share/cmake-3.22/Help/command/math.rst
new file mode 100644
index 0000000..8386aab
--- /dev/null
+++ b/share/cmake-3.22/Help/command/math.rst
@@ -0,0 +1,38 @@
+math
+----
+
+Evaluate a mathematical expression.
+
+.. code-block:: cmake
+
+  math(EXPR <variable> "<expression>" [OUTPUT_FORMAT <format>])
+
+Evaluates a mathematical ``<expression>`` and sets ``<variable>`` to the
+resulting value.  The result of the expression must be representable as a
+64-bit signed integer.
+
+The mathematical expression must be given as a string (i.e. enclosed in
+double quotation marks). An example is ``"5 * (10 + 13)"``.
+Supported operators are ``+``, ``-``, ``*``, ``/``, ``%``, ``|``, ``&``,
+``^``, ``~``, ``<<``, ``>>``, and ``(...)``; they have the same meaning
+as in C code.
+
+.. versionadded:: 3.13
+  Hexadecimal numbers are recognized when prefixed with ``0x``, as in C code.
+
+.. versionadded:: 3.13
+  The result is formatted according to the option ``OUTPUT_FORMAT``,
+  where ``<format>`` is one of
+
+  ``HEXADECIMAL``
+    Hexadecimal notation as in C code, i. e. starting with "0x".
+  ``DECIMAL``
+    Decimal notation. Which is also used if no ``OUTPUT_FORMAT`` option
+    is specified.
+
+For example
+
+.. code-block:: cmake
+
+  math(EXPR value "100 * 0xA" OUTPUT_FORMAT DECIMAL)      # value is set to "1000"
+  math(EXPR value "100 * 0xA" OUTPUT_FORMAT HEXADECIMAL)  # value is set to "0x3e8"
diff --git a/share/cmake-3.22/Help/command/message.rst b/share/cmake-3.22/Help/command/message.rst
new file mode 100644
index 0000000..e44803e
--- /dev/null
+++ b/share/cmake-3.22/Help/command/message.rst
@@ -0,0 +1,191 @@
+message
+-------
+
+Log a message.
+
+Synopsis
+^^^^^^^^
+
+.. parsed-literal::
+
+  `General messages`_
+    message([<mode>] "message text" ...)
+
+  `Reporting checks`_
+    message(<checkState> "message text" ...)
+
+
+General messages
+^^^^^^^^^^^^^^^^
+
+.. code-block:: cmake
+
+  message([<mode>] "message text" ...)
+
+Record the specified message text in the log.  If more than one message
+string is given, they are concatenated into a single message with no
+separator between the strings.
+
+The optional ``<mode>`` keyword determines the type of message, which
+influences the way the message is handled:
+
+``FATAL_ERROR``
+  CMake Error, stop processing and generation.
+
+``SEND_ERROR``
+  CMake Error, continue processing, but skip generation.
+
+``WARNING``
+  CMake Warning, continue processing.
+
+``AUTHOR_WARNING``
+  CMake Warning (dev), continue processing.
+
+``DEPRECATION``
+  CMake Deprecation Error or Warning if variable
+  :variable:`CMAKE_ERROR_DEPRECATED` or :variable:`CMAKE_WARN_DEPRECATED`
+  is enabled, respectively, else no message.
+
+(none) or ``NOTICE``
+  Important message printed to stderr to attract user's attention.
+
+``STATUS``
+  The main interesting messages that project users might be interested in.
+  Ideally these should be concise, no more than a single line, but still
+  informative.
+
+``VERBOSE``
+  Detailed informational messages intended for project users.  These messages
+  should provide additional details that won't be of interest in most cases,
+  but which may be useful to those building the project when they want deeper
+  insight into what's happening.
+
+``DEBUG``
+  Detailed informational messages intended for developers working on the
+  project itself as opposed to users who just want to build it.  These messages
+  will not typically be of interest to other users building the project and
+  will often be closely related to internal implementation details.
+
+``TRACE``
+  Fine-grained messages with very low-level implementation details.  Messages
+  using this log level would normally only be temporary and would expect to be
+  removed before releasing the project, packaging up the files, etc.
+
+.. versionadded:: 3.15
+  Added the ``NOTICE``, ``VERBOSE``, ``DEBUG``, and ``TRACE`` levels.
+
+The CMake command-line tool displays ``STATUS`` to ``TRACE`` messages on stdout
+with the message preceded by two hyphens and a space.  All other message types
+are sent to stderr and are not prefixed with hyphens.  The
+:manual:`CMake GUI <cmake-gui(1)>` displays all messages in its log area.
+The :manual:`curses interface <ccmake(1)>` shows ``STATUS`` to ``TRACE``
+messages one at a time on a status line and other messages in an
+interactive pop-up box.  The ``--log-level`` command-line option to each of
+these tools can be used to control which messages will be shown.
+
+.. versionadded:: 3.17
+  To make a log level persist between CMake runs, the
+  :variable:`CMAKE_MESSAGE_LOG_LEVEL` variable can be set instead.
+  Note that the command line option takes precedence over the cache variable.
+
+.. versionadded:: 3.16
+  Messages of log levels ``NOTICE`` and below will have each line preceded
+  by the content of the :variable:`CMAKE_MESSAGE_INDENT` variable (converted to
+  a single string by concatenating its list items).  For ``STATUS`` to ``TRACE``
+  messages, this indenting content will be inserted after the hyphens.
+
+.. versionadded:: 3.17
+  Messages of log levels ``NOTICE`` and below can also have each line preceded
+  with context of the form ``[some.context.example]``.  The content between the
+  square brackets is obtained by converting the :variable:`CMAKE_MESSAGE_CONTEXT`
+  list variable to a dot-separated string.  The message context will always
+  appear before any indenting content but after any automatically added leading
+  hyphens. By default, message context is not shown, it has to be explicitly
+  enabled by giving the :manual:`cmake <cmake(1)>` ``--log-context``
+  command-line option or by setting the :variable:`CMAKE_MESSAGE_CONTEXT_SHOW`
+  variable to true.  See the :variable:`CMAKE_MESSAGE_CONTEXT` documentation for
+  usage examples.
+
+CMake Warning and Error message text displays using a simple markup
+language.  Non-indented text is formatted in line-wrapped paragraphs
+delimited by newlines.  Indented text is considered pre-formatted.
+
+
+Reporting checks
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.17
+
+A common pattern in CMake output is a message indicating the start of some
+sort of check, followed by another message reporting the result of that check.
+For example:
+
+.. code-block:: cmake
+
+  message(STATUS "Looking for someheader.h")
+  #... do the checks, set checkSuccess with the result
+  if(checkSuccess)
+    message(STATUS "Looking for someheader.h - found")
+  else()
+    message(STATUS "Looking for someheader.h - not found")
+  endif()
+
+This can be more robustly and conveniently expressed using the ``CHECK_...``
+keyword form of the ``message()`` command:
+
+.. code-block:: cmake
+
+  message(<checkState> "message" ...)
+
+where ``<checkState>`` must be one of the following:
+
+  ``CHECK_START``
+    Record a concise message about the check about to be performed.
+
+  ``CHECK_PASS``
+    Record a successful result for a check.
+
+  ``CHECK_FAIL``
+    Record an unsuccessful result for a check.
+
+When recording a check result, the command repeats the message from the most
+recently started check for which no result has yet been reported, then some
+separator characters and then the message text provided after the
+``CHECK_PASS`` or ``CHECK_FAIL`` keyword.  Check messages are always reported
+at ``STATUS`` log level.
+
+Checks may be nested and every ``CHECK_START`` should have exactly one
+matching ``CHECK_PASS`` or ``CHECK_FAIL``.
+The :variable:`CMAKE_MESSAGE_INDENT` variable can also be used to add
+indenting to nested checks if desired.  For example:
+
+.. code-block:: cmake
+
+  message(CHECK_START "Finding my things")
+  list(APPEND CMAKE_MESSAGE_INDENT "  ")
+  unset(missingComponents)
+
+  message(CHECK_START "Finding partA")
+  # ... do check, assume we find A
+  message(CHECK_PASS "found")
+
+  message(CHECK_START "Finding partB")
+  # ... do check, assume we don't find B
+  list(APPEND missingComponents B)
+  message(CHECK_FAIL "not found")
+
+  list(POP_BACK CMAKE_MESSAGE_INDENT)
+  if(missingComponents)
+    message(CHECK_FAIL "missing components: ${missingComponents}")
+  else()
+    message(CHECK_PASS "all components found")
+  endif()
+
+Output from the above would appear something like the following::
+
+  -- Finding my things
+  --   Finding partA
+  --   Finding partA - found
+  --   Finding partB
+  --   Finding partB - not found
+  -- Finding my things - missing components: B
diff --git a/share/cmake-3.18/Help/command/option.rst b/share/cmake-3.22/Help/command/option.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/option.rst
rename to share/cmake-3.22/Help/command/option.rst
diff --git a/share/cmake-3.18/Help/command/output_required_files.rst b/share/cmake-3.22/Help/command/output_required_files.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/output_required_files.rst
rename to share/cmake-3.22/Help/command/output_required_files.rst
diff --git a/share/cmake-3.22/Help/command/project.rst b/share/cmake-3.22/Help/command/project.rst
new file mode 100644
index 0000000..2a9dcfe
--- /dev/null
+++ b/share/cmake-3.22/Help/command/project.rst
@@ -0,0 +1,164 @@
+project
+-------
+
+Set the name of the project.
+
+Synopsis
+^^^^^^^^
+
+.. code-block:: cmake
+
+ project(<PROJECT-NAME> [<language-name>...])
+ project(<PROJECT-NAME>
+         [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
+         [DESCRIPTION <project-description-string>]
+         [HOMEPAGE_URL <url-string>]
+         [LANGUAGES <language-name>...])
+
+Sets the name of the project, and stores it in the variable
+:variable:`PROJECT_NAME`. When called from the top-level
+``CMakeLists.txt`` also stores the project name in the
+variable :variable:`CMAKE_PROJECT_NAME`.
+
+Also sets the variables:
+
+:variable:`PROJECT_SOURCE_DIR`, :variable:`<PROJECT-NAME>_SOURCE_DIR`
+  Absolute path to the source directory for the project.
+
+:variable:`PROJECT_BINARY_DIR`, :variable:`<PROJECT-NAME>_BINARY_DIR`
+  Absolute path to the binary directory for the project.
+
+:variable:`PROJECT_IS_TOP_LEVEL`, :variable:`<PROJECT-NAME>_IS_TOP_LEVEL`
+  .. versionadded:: 3.21
+
+  Boolean value indicating whether the project is top-level.
+
+Further variables are set by the optional arguments described in the following.
+If any of these arguments is not used, then the corresponding variables are
+set to the empty string.
+
+Options
+^^^^^^^
+
+The options are:
+
+``VERSION <version>``
+  Optional; may not be used unless policy :policy:`CMP0048` is
+  set to ``NEW``.
+
+  Takes a ``<version>`` argument composed of non-negative integer components,
+  i.e. ``<major>[.<minor>[.<patch>[.<tweak>]]]``,
+  and sets the variables
+
+  * :variable:`PROJECT_VERSION`,
+    :variable:`<PROJECT-NAME>_VERSION`
+  * :variable:`PROJECT_VERSION_MAJOR`,
+    :variable:`<PROJECT-NAME>_VERSION_MAJOR`
+  * :variable:`PROJECT_VERSION_MINOR`,
+    :variable:`<PROJECT-NAME>_VERSION_MINOR`
+  * :variable:`PROJECT_VERSION_PATCH`,
+    :variable:`<PROJECT-NAME>_VERSION_PATCH`
+  * :variable:`PROJECT_VERSION_TWEAK`,
+    :variable:`<PROJECT-NAME>_VERSION_TWEAK`.
+
+  .. versionadded:: 3.12
+    When the ``project()`` command is called from the top-level
+    ``CMakeLists.txt``, then the version is also stored in the variable
+    :variable:`CMAKE_PROJECT_VERSION`.
+
+``DESCRIPTION <project-description-string>``
+  .. versionadded:: 3.9
+
+  Optional.
+  Sets the variables
+
+  * :variable:`PROJECT_DESCRIPTION`, :variable:`<PROJECT-NAME>_DESCRIPTION`
+
+  to ``<project-description-string>``.
+  It is recommended that this description is a relatively short string,
+  usually no more than a few words.
+
+  When the ``project()`` command is called from the top-level ``CMakeLists.txt``,
+  then the description is also stored in the variable :variable:`CMAKE_PROJECT_DESCRIPTION`.
+
+  .. versionadded:: 3.12
+    Added the ``<PROJECT-NAME>_DESCRIPTION`` variable.
+
+``HOMEPAGE_URL <url-string>``
+  .. versionadded:: 3.12
+
+  Optional.
+  Sets the variables
+
+  * :variable:`PROJECT_HOMEPAGE_URL`, :variable:`<PROJECT-NAME>_HOMEPAGE_URL`
+
+  to ``<url-string>``, which should be the canonical home URL for the project.
+
+  When the ``project()`` command is called from the top-level ``CMakeLists.txt``,
+  then the URL also is stored in the variable :variable:`CMAKE_PROJECT_HOMEPAGE_URL`.
+
+``LANGUAGES <language-name>...``
+  Optional.
+  Can also be specified without ``LANGUAGES`` keyword per the first, short signature.
+
+  Selects which programming languages are needed to build the project.
+  Supported languages include ``C``, ``CXX`` (i.e.  C++), ``CUDA``,
+  ``OBJC`` (i.e. Objective-C), ``OBJCXX``, ``Fortran``, ``HIP``, ``ISPC``, and ``ASM``.
+  By default ``C`` and ``CXX`` are enabled if no language options are given.
+  Specify language ``NONE``, or use the ``LANGUAGES`` keyword and list no languages,
+  to skip enabling any languages.
+
+  .. versionadded:: 3.8
+    Added ``CUDA`` support.
+
+  .. versionadded:: 3.16
+    Added ``OBJC`` and ``OBJCXX`` support.
+
+  .. versionadded:: 3.18
+    Added ``ISPC`` support.
+
+  If enabling ``ASM``, list it last so that CMake can check whether
+  compilers for other languages like ``C`` work for assembly too.
+
+The variables set through the ``VERSION``, ``DESCRIPTION`` and ``HOMEPAGE_URL``
+options are intended for use as default values in package metadata and documentation.
+
+Code Injection
+^^^^^^^^^^^^^^
+
+If the :variable:`CMAKE_PROJECT_INCLUDE_BEFORE` or
+:variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE_BEFORE` variables are set,
+the files they point to will be included as the first step of the
+``project()`` command.
+If both are set, then :variable:`CMAKE_PROJECT_INCLUDE_BEFORE` will be
+included before :variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE_BEFORE`.
+
+If the :variable:`CMAKE_PROJECT_INCLUDE` or
+:variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE` variables are set, the files
+they point to will be included as the last step of the ``project()`` command.
+If both are set, then :variable:`CMAKE_PROJECT_INCLUDE` will be included before
+:variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE`.
+
+.. versionadded:: 3.15
+  Added the ``CMAKE_PROJECT_INCLUDE`` and ``CMAKE_PROJECT_INCLUDE_BEFORE``
+  variables.
+
+.. versionadded:: 3.17
+  Added the ``CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE_BEFORE`` variable.
+
+Usage
+^^^^^
+
+The top-level ``CMakeLists.txt`` file for a project must contain a
+literal, direct call to the ``project()`` command; loading one
+through the :command:`include` command is not sufficient.  If no such
+call exists, CMake will issue a warning and pretend there is a
+``project(Project)`` at the top to enable the default languages
+(``C`` and ``CXX``).
+
+.. note::
+  Call the ``project()`` command near the top of the top-level
+  ``CMakeLists.txt``, but *after* calling :command:`cmake_minimum_required`.
+  It is important to establish version and policy settings before invoking
+  other commands whose behavior they may affect.
+  See also policy :policy:`CMP0000`.
diff --git a/share/cmake-3.18/Help/command/qt_wrap_cpp.rst b/share/cmake-3.22/Help/command/qt_wrap_cpp.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/qt_wrap_cpp.rst
rename to share/cmake-3.22/Help/command/qt_wrap_cpp.rst
diff --git a/share/cmake-3.18/Help/command/qt_wrap_ui.rst b/share/cmake-3.22/Help/command/qt_wrap_ui.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/qt_wrap_ui.rst
rename to share/cmake-3.22/Help/command/qt_wrap_ui.rst
diff --git a/share/cmake-3.18/Help/command/remove.rst b/share/cmake-3.22/Help/command/remove.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/remove.rst
rename to share/cmake-3.22/Help/command/remove.rst
diff --git a/share/cmake-3.18/Help/command/remove_definitions.rst b/share/cmake-3.22/Help/command/remove_definitions.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/remove_definitions.rst
rename to share/cmake-3.22/Help/command/remove_definitions.rst
diff --git a/share/cmake-3.22/Help/command/return.rst b/share/cmake-3.22/Help/command/return.rst
new file mode 100644
index 0000000..ec009d8
--- /dev/null
+++ b/share/cmake-3.22/Help/command/return.rst
@@ -0,0 +1,20 @@
+return
+------
+
+Return from a file, directory or function.
+
+.. code-block:: cmake
+
+  return()
+
+Returns from a file, directory or function.  When this command is
+encountered in an included file (via :command:`include` or
+:command:`find_package`), it causes processing of the current file to stop
+and control is returned to the including file.  If it is encountered in a
+file which is not included by another file, e.g.  a ``CMakeLists.txt``,
+deferred calls scheduled by :command:`cmake_language(DEFER)` are invoked and
+control is returned to the parent directory if there is one.  If return is
+called in a function, control is returned to the caller of the function.
+
+Note that a :command:`macro <macro>`, unlike a :command:`function <function>`,
+is expanded in place and therefore cannot handle ``return()``.
diff --git a/share/cmake-3.22/Help/command/separate_arguments.rst b/share/cmake-3.22/Help/command/separate_arguments.rst
new file mode 100644
index 0000000..f66af35
--- /dev/null
+++ b/share/cmake-3.22/Help/command/separate_arguments.rst
@@ -0,0 +1,80 @@
+separate_arguments
+------------------
+
+Parse command-line arguments into a semicolon-separated list.
+
+.. code-block:: cmake
+
+  separate_arguments(<variable> <mode> [PROGRAM [SEPARATE_ARGS]] <args>)
+
+Parses a space-separated string ``<args>`` into a list of items,
+and stores this list in semicolon-separated standard form in ``<variable>``.
+
+This function is intended for parsing command-line arguments.
+The entire command line must be passed as one string in the
+argument ``<args>``.
+
+The exact parsing rules depend on the operating system.
+They are specified by the ``<mode>`` argument which must
+be one of the following keywords:
+
+``UNIX_COMMAND``
+  Arguments are separated by unquoted whitespace.
+  Both single-quote and double-quote pairs are respected.
+  A backslash escapes the next literal character (``\"`` is ``"``);
+  there are no special escapes (``\n`` is just ``n``).
+
+``WINDOWS_COMMAND``
+  A Windows command-line is parsed using the same
+  syntax the runtime library uses to construct argv at startup.  It
+  separates arguments by whitespace that is not double-quoted.
+  Backslashes are literal unless they precede double-quotes.  See the
+  MSDN article `Parsing C Command-Line Arguments`_ for details.
+
+``NATIVE_COMMAND``
+  .. versionadded:: 3.9
+
+  Proceeds as in ``WINDOWS_COMMAND`` mode if the host system is Windows.
+  Otherwise proceeds as in ``UNIX_COMMAND`` mode.
+
+``PROGRAM``
+  .. versionadded:: 3.19
+
+  The first item in ``<args>`` is assumed to be an executable and will be
+  searched in the system search path or left as a full path. If not found,
+  ``<variable>`` will be empty. Otherwise, ``<variable>`` is a list of 2
+  elements:
+
+    0. Absolute path of the program
+    1. Any command-line arguments present in ``<args>`` as a string
+
+  For example:
+
+  .. code-block:: cmake
+
+    separate_arguments (out UNIX_COMMAND PROGRAM "cc -c main.c")
+
+  * First element of the list: ``/path/to/cc``
+  * Second element of the list: ``" -c main.c"``
+
+``SEPARATE_ARGS``
+  When this sub-option of ``PROGRAM`` option is specified, command-line
+  arguments will be split as well and stored in ``<variable>``.
+
+  For example:
+
+  .. code-block:: cmake
+
+    separate_arguments (out UNIX_COMMAND PROGRAM SEPARATE_ARGS "cc -c main.c")
+
+  The contents of ``out`` will be: ``/path/to/cc;-c;main.c``
+
+.. _`Parsing C Command-Line Arguments`: https://msdn.microsoft.com/library/a1y7w461.aspx
+
+.. code-block:: cmake
+
+  separate_arguments(<var>)
+
+Convert the value of ``<var>`` to a semi-colon separated list.  All
+spaces are replaced with ';'.  This helps with generating command
+lines.
diff --git a/share/cmake-3.22/Help/command/set.rst b/share/cmake-3.22/Help/command/set.rst
new file mode 100644
index 0000000..af862e4
--- /dev/null
+++ b/share/cmake-3.22/Help/command/set.rst
@@ -0,0 +1,108 @@
+set
+---
+
+Set a normal, cache, or environment variable to a given value.
+See the :ref:`cmake-language(7) variables <CMake Language Variables>`
+documentation for the scopes and interaction of normal variables
+and cache entries.
+
+Signatures of this command that specify a ``<value>...`` placeholder
+expect zero or more arguments.  Multiple arguments will be joined as
+a :ref:`semicolon-separated list <CMake Language Lists>` to form the actual variable
+value to be set.  Zero arguments will cause normal variables to be
+unset.  See the :command:`unset` command to unset variables explicitly.
+
+Set Normal Variable
+^^^^^^^^^^^^^^^^^^^
+
+.. code-block:: cmake
+
+  set(<variable> <value>... [PARENT_SCOPE])
+
+Sets the given ``<variable>`` in the current function or directory scope.
+
+If the ``PARENT_SCOPE`` option is given the variable will be set in
+the scope above the current scope.  Each new directory or function
+creates a new scope.  This command will set the value of a variable
+into the parent directory or calling function (whichever is applicable
+to the case at hand). The previous state of the variable's value stays the
+same in the current scope (e.g., if it was undefined before, it is still
+undefined and if it had a value, it is still that value).
+
+Set Cache Entry
+^^^^^^^^^^^^^^^
+
+.. code-block:: cmake
+
+  set(<variable> <value>... CACHE <type> <docstring> [FORCE])
+
+Sets the given cache ``<variable>`` (cache entry).  Since cache entries
+are meant to provide user-settable values this does not overwrite
+existing cache entries by default.  Use the ``FORCE`` option to
+overwrite existing entries.
+
+The ``<type>`` must be specified as one of:
+
+``BOOL``
+  Boolean ``ON/OFF`` value.  :manual:`cmake-gui(1)` offers a checkbox.
+
+``FILEPATH``
+  Path to a file on disk.  :manual:`cmake-gui(1)` offers a file dialog.
+
+``PATH``
+  Path to a directory on disk.  :manual:`cmake-gui(1)` offers a file dialog.
+
+``STRING``
+  A line of text.  :manual:`cmake-gui(1)` offers a text field or a
+  drop-down selection if the :prop_cache:`STRINGS` cache entry
+  property is set.
+
+``INTERNAL``
+  A line of text.  :manual:`cmake-gui(1)` does not show internal entries.
+  They may be used to store variables persistently across runs.
+  Use of this type implies ``FORCE``.
+
+The ``<docstring>`` must be specified as a line of text providing
+a quick summary of the option for presentation to :manual:`cmake-gui(1)`
+users.
+
+If the cache entry does not exist prior to the call or the ``FORCE``
+option is given then the cache entry will be set to the given value.
+
+.. note::
+
+  The content of the cache variable will not be directly accessible if a normal
+  variable of the same name already exists (see :ref:`rules of variable
+  evaluation <CMake Language Variables>`). If policy :policy:`CMP0126` is set
+  to ``OLD``, any normal variable binding in the current scope will be removed.
+
+It is possible for the cache entry to exist prior to the call but
+have no type set if it was created on the :manual:`cmake(1)` command
+line by a user through the ``-D<var>=<value>`` option without
+specifying a type.  In this case the ``set`` command will add the
+type.  Furthermore, if the ``<type>`` is ``PATH`` or ``FILEPATH``
+and the ``<value>`` provided on the command line is a relative path,
+then the ``set`` command will treat the path as relative to the
+current working directory and convert it to an absolute path.
+
+Set Environment Variable
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. code-block:: cmake
+
+  set(ENV{<variable>} [<value>])
+
+Sets an :manual:`Environment Variable <cmake-env-variables(7)>`
+to the given value.
+Subsequent calls of ``$ENV{<variable>}`` will return this new value.
+
+This command affects only the current CMake process, not the process
+from which CMake was called, nor the system environment at large,
+nor the environment of subsequent build or test processes.
+
+If no argument is given after ``ENV{<variable>}`` or if ``<value>`` is
+an empty string, then this command will clear any existing value of the
+environment variable.
+
+Arguments after ``<value>`` are ignored. If extra arguments are found,
+then an author warning is issued.
diff --git a/share/cmake-3.18/Help/command/set_directory_properties.rst b/share/cmake-3.22/Help/command/set_directory_properties.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/set_directory_properties.rst
rename to share/cmake-3.22/Help/command/set_directory_properties.rst
diff --git a/share/cmake-3.22/Help/command/set_property.rst b/share/cmake-3.22/Help/command/set_property.rst
new file mode 100644
index 0000000..555520d
--- /dev/null
+++ b/share/cmake-3.22/Help/command/set_property.rst
@@ -0,0 +1,112 @@
+set_property
+------------
+
+Set a named property in a given scope.
+
+.. code-block:: cmake
+
+  set_property(<GLOBAL                      |
+                DIRECTORY [<dir>]           |
+                TARGET    [<target1> ...]   |
+                SOURCE    [<src1> ...]
+                          [DIRECTORY <dirs> ...]
+                          [TARGET_DIRECTORY <targets> ...] |
+                INSTALL   [<file1> ...]     |
+                TEST      [<test1> ...]     |
+                CACHE     [<entry1> ...]    >
+               [APPEND] [APPEND_STRING]
+               PROPERTY <name> [<value1> ...])
+
+Sets one property on zero or more objects of a scope.
+
+The first argument determines the scope in which the property is set.
+It must be one of the following:
+
+``GLOBAL``
+  Scope is unique and does not accept a name.
+
+``DIRECTORY``
+  Scope defaults to the current directory but other directories
+  (already processed by CMake) may be named by full or relative path.
+  Relative paths are treated as relative to the current source directory.
+  See also the :command:`set_directory_properties` command.
+
+  .. versionadded:: 3.19
+    ``<dir>`` may reference a binary directory.
+
+``TARGET``
+  Scope may name zero or more existing targets.
+  See also the :command:`set_target_properties` command.
+
+``SOURCE``
+  Scope may name zero or more source files.  By default, source file properties
+  are only visible to targets added in the same directory (``CMakeLists.txt``).
+
+  .. versionadded:: 3.18
+    Visibility can be set in other directory scopes using one or both of the
+    following sub-options:
+
+    ``DIRECTORY <dirs>...``
+      The source file property will be set in each of the ``<dirs>``
+      directories' scopes.  CMake must already know about
+      each of these directories, either by having added them through a call to
+      :command:`add_subdirectory` or it being the top level source directory.
+      Relative paths are treated as relative to the current source directory.
+
+      .. versionadded:: 3.19
+        ``<dirs>`` may reference a binary directory.
+
+    ``TARGET_DIRECTORY <targets>...``
+      The source file property will be set in each of the directory scopes
+      where any of the specified ``<targets>`` were created (the ``<targets>``
+      must therefore already exist).
+
+  See also the :command:`set_source_files_properties` command.
+
+``INSTALL``
+  .. versionadded:: 3.1
+
+  Scope may name zero or more installed file paths.
+  These are made available to CPack to influence deployment.
+
+  Both the property key and value may use generator expressions.
+  Specific properties may apply to installed files and/or directories.
+
+  Path components have to be separated by forward slashes,
+  must be normalized and are case sensitive.
+
+  To reference the installation prefix itself with a relative path use ``.``.
+
+  Currently installed file properties are only defined for
+  the WIX generator where the given paths are relative
+  to the installation prefix.
+
+``TEST``
+  Scope may name zero or more existing tests.
+  See also the :command:`set_tests_properties` command.
+
+``CACHE``
+  Scope must name zero or more cache existing entries.
+
+The required ``PROPERTY`` option is immediately followed by the name of
+the property to set.  Remaining arguments are used to compose the
+property value in the form of a semicolon-separated list.
+
+If the ``APPEND`` option is given the list is appended to any existing
+property value (except that empty values are ignored and not appended).
+If the ``APPEND_STRING`` option is given the string is
+appended to any existing property value as string, i.e. it results in a
+longer string and not a list of strings.  When using ``APPEND`` or
+``APPEND_STRING`` with a property defined to support ``INHERITED``
+behavior (see :command:`define_property`), no inheriting occurs when
+finding the initial value to append to.  If the property is not already
+directly set in the nominated scope, the command will behave as though
+``APPEND`` or ``APPEND_STRING`` had not been given.
+
+See the :manual:`cmake-properties(7)` manual for a list of properties
+in each scope.
+
+.. note::
+
+  The :prop_sf:`GENERATED` source file property may be globally visible.
+  See its documentation for details.
diff --git a/share/cmake-3.22/Help/command/set_source_files_properties.rst b/share/cmake-3.22/Help/command/set_source_files_properties.rst
new file mode 100644
index 0000000..61c69a2
--- /dev/null
+++ b/share/cmake-3.22/Help/command/set_source_files_properties.rst
@@ -0,0 +1,43 @@
+set_source_files_properties
+---------------------------
+
+Source files can have properties that affect how they are built.
+
+.. code-block:: cmake
+
+  set_source_files_properties(<files> ...
+                              [DIRECTORY <dirs> ...]
+                              [TARGET_DIRECTORY <targets> ...]
+                              PROPERTIES <prop1> <value1>
+                              [<prop2> <value2>] ...)
+
+Sets properties associated with source files using a key/value paired
+list.
+
+.. versionadded:: 3.18
+  By default, source file properties are only visible to targets added in the
+  same directory (``CMakeLists.txt``).  Visibility can be set in other directory
+  scopes using one or both of the following options:
+
+``DIRECTORY <dirs>...``
+  The source file properties will be set in each of the ``<dirs>``
+  directories' scopes.  CMake must already know about each of these
+  source directories, either by having added them through a call to
+  :command:`add_subdirectory` or it being the top level source directory.
+  Relative paths are treated as relative to the current source directory.
+
+``TARGET_DIRECTORY <targets>...``
+  The source file properties will be set in each of the directory scopes
+  where any of the specified ``<targets>`` were created (the ``<targets>``
+  must therefore already exist).
+
+Use :command:`get_source_file_property` to get property values.
+See also the :command:`set_property(SOURCE)` command.
+
+See :ref:`Source File Properties` for the list of properties known
+to CMake.
+
+.. note::
+
+  The :prop_sf:`GENERATED` source file property may be globally visible.
+  See its documentation for details.
diff --git a/share/cmake-3.18/Help/command/set_target_properties.rst b/share/cmake-3.22/Help/command/set_target_properties.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/set_target_properties.rst
rename to share/cmake-3.22/Help/command/set_target_properties.rst
diff --git a/share/cmake-3.18/Help/command/set_tests_properties.rst b/share/cmake-3.22/Help/command/set_tests_properties.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/set_tests_properties.rst
rename to share/cmake-3.22/Help/command/set_tests_properties.rst
diff --git a/share/cmake-3.22/Help/command/site_name.rst b/share/cmake-3.22/Help/command/site_name.rst
new file mode 100644
index 0000000..09b5a9f
--- /dev/null
+++ b/share/cmake-3.22/Help/command/site_name.rst
@@ -0,0 +1,12 @@
+site_name
+---------
+
+Set the given variable to the name of the computer.
+
+.. code-block:: cmake
+
+  site_name(variable)
+
+On UNIX-like platforms, if the variable ``HOSTNAME`` is set, its value
+will be executed as a command expected to print out the host name,
+much like the ``hostname`` command-line tool.
diff --git a/share/cmake-3.22/Help/command/source_group.rst b/share/cmake-3.22/Help/command/source_group.rst
new file mode 100644
index 0000000..83ae286
--- /dev/null
+++ b/share/cmake-3.22/Help/command/source_group.rst
@@ -0,0 +1,71 @@
+source_group
+------------
+
+Define a grouping for source files in IDE project generation.
+There are two different signatures to create source groups.
+
+.. code-block:: cmake
+
+  source_group(<name> [FILES <src>...] [REGULAR_EXPRESSION <regex>])
+  source_group(TREE <root> [PREFIX <prefix>] [FILES <src>...])
+
+Defines a group into which sources will be placed in project files.
+This is intended to set up file tabs in Visual Studio.
+The group is scoped in the directory where the command is called,
+and applies to sources in targets created in that directory.
+
+The options are:
+
+``TREE``
+ .. versionadded:: 3.8
+
+ CMake will automatically detect, from ``<src>`` files paths, source groups
+ it needs to create, to keep structure of source groups analogically to the
+ actual files and directories structure in the project. Paths of ``<src>``
+ files will be cut to be relative to ``<root>``. The command fails if the
+ paths within ``src`` do not start with ``root``.
+
+``PREFIX``
+ .. versionadded:: 3.8
+
+ Source group and files located directly in ``<root>`` path, will be placed
+ in ``<prefix>`` source groups.
+
+``FILES``
+ Any source file specified explicitly will be placed in group
+ ``<name>``.  Relative paths are interpreted with respect to the
+ current source directory.
+
+``REGULAR_EXPRESSION``
+ Any source file whose name matches the regular expression will
+ be placed in group ``<name>``.
+
+If a source file matches multiple groups, the *last* group that
+explicitly lists the file with ``FILES`` will be favored, if any.
+If no group explicitly lists the file, the *last* group whose
+regular expression matches the file will be favored.
+
+The ``<name>`` of the group and ``<prefix>`` argument may contain forward
+slashes or backslashes to specify subgroups.  Backslashes need to be escaped
+appropriately:
+
+.. code-block:: cmake
+
+  source_group(base/subdir ...)
+  source_group(outer\\inner ...)
+  source_group(TREE <root> PREFIX sources\\inc ...)
+
+.. versionadded:: 3.18
+  Allow using forward slashes (``/``) to specify subgroups.
+
+For backwards compatibility, the short-hand signature
+
+.. code-block:: cmake
+
+  source_group(<name> <regex>)
+
+is equivalent to
+
+.. code-block:: cmake
+
+  source_group(<name> REGULAR_EXPRESSION <regex>)
diff --git a/share/cmake-3.22/Help/command/string.rst b/share/cmake-3.22/Help/command/string.rst
new file mode 100644
index 0000000..29ad082
--- /dev/null
+++ b/share/cmake-3.22/Help/command/string.rst
@@ -0,0 +1,647 @@
+string
+------
+
+String operations.
+
+Synopsis
+^^^^^^^^
+
+.. parsed-literal::
+
+  `Search and Replace`_
+    string(`FIND`_ <string> <substring> <out-var> [...])
+    string(`REPLACE`_ <match-string> <replace-string> <out-var> <input>...)
+    string(`REGEX MATCH`_ <match-regex> <out-var> <input>...)
+    string(`REGEX MATCHALL`_ <match-regex> <out-var> <input>...)
+    string(`REGEX REPLACE`_ <match-regex> <replace-expr> <out-var> <input>...)
+
+  `Manipulation`_
+    string(`APPEND`_ <string-var> [<input>...])
+    string(`PREPEND`_ <string-var> [<input>...])
+    string(`CONCAT`_ <out-var> [<input>...])
+    string(`JOIN`_ <glue> <out-var> [<input>...])
+    string(`TOLOWER`_ <string> <out-var>)
+    string(`TOUPPER`_ <string> <out-var>)
+    string(`LENGTH`_ <string> <out-var>)
+    string(`SUBSTRING`_ <string> <begin> <length> <out-var>)
+    string(`STRIP`_ <string> <out-var>)
+    string(`GENEX_STRIP`_ <string> <out-var>)
+    string(`REPEAT`_ <string> <count> <out-var>)
+
+  `Comparison`_
+    string(`COMPARE`_ <op> <string1> <string2> <out-var>)
+
+  `Hashing`_
+    string(`\<HASH\> <HASH_>`_ <out-var> <input>)
+
+  `Generation`_
+    string(`ASCII`_ <number>... <out-var>)
+    string(`HEX`_ <string> <out-var>)
+    string(`CONFIGURE`_ <string> <out-var> [...])
+    string(`MAKE_C_IDENTIFIER`_ <string> <out-var>)
+    string(`RANDOM`_ [<option>...] <out-var>)
+    string(`TIMESTAMP`_ <out-var> [<format string>] [UTC])
+    string(`UUID`_ <out-var> ...)
+
+  `JSON`_
+    string(JSON <out-var> [ERROR_VARIABLE <error-var>]
+           {`GET`_ | `TYPE`_ | :ref:`LENGTH <JSONLENGTH>` | `REMOVE`_}
+           <json-string> <member|index> [<member|index> ...])
+    string(JSON <out-var> [ERROR_VARIABLE <error-var>]
+           `MEMBER`_ <json-string>
+           [<member|index> ...] <index>)
+    string(JSON <out-var> [ERROR_VARIABLE <error-var>]
+           `SET`_ <json-string>
+           <member|index> [<member|index> ...] <value>)
+    string(JSON <out-var> [ERROR_VARIABLE <error-var>]
+           `EQUAL`_ <json-string1> <json-string2>)
+
+Search and Replace
+^^^^^^^^^^^^^^^^^^
+
+Search and Replace With Plain Strings
+"""""""""""""""""""""""""""""""""""""
+
+.. _FIND:
+
+.. code-block:: cmake
+
+  string(FIND <string> <substring> <output_variable> [REVERSE])
+
+Return the position where the given ``<substring>`` was found in
+the supplied ``<string>``.  If the ``REVERSE`` flag was used, the command will
+search for the position of the last occurrence of the specified
+``<substring>``.  If the ``<substring>`` is not found, a position of -1 is
+returned.
+
+The ``string(FIND)`` subcommand treats all strings as ASCII-only characters.
+The index stored in ``<output_variable>`` will also be counted in bytes,
+so strings containing multi-byte characters may lead to unexpected results.
+
+.. _REPLACE:
+
+.. code-block:: cmake
+
+  string(REPLACE <match_string>
+         <replace_string> <output_variable>
+         <input> [<input>...])
+
+Replace all occurrences of ``<match_string>`` in the ``<input>``
+with ``<replace_string>`` and store the result in the ``<output_variable>``.
+
+Search and Replace With Regular Expressions
+"""""""""""""""""""""""""""""""""""""""""""
+
+.. _`REGEX MATCH`:
+
+.. code-block:: cmake
+
+  string(REGEX MATCH <regular_expression>
+         <output_variable> <input> [<input>...])
+
+Match the ``<regular_expression>`` once and store the match in the
+``<output_variable>``.
+All ``<input>`` arguments are concatenated before matching.
+Regular expressions are specified in the subsection just below.
+
+.. _`REGEX MATCHALL`:
+
+.. code-block:: cmake
+
+  string(REGEX MATCHALL <regular_expression>
+         <output_variable> <input> [<input>...])
+
+Match the ``<regular_expression>`` as many times as possible and store the
+matches in the ``<output_variable>`` as a list.
+All ``<input>`` arguments are concatenated before matching.
+
+.. _`REGEX REPLACE`:
+
+.. code-block:: cmake
+
+  string(REGEX REPLACE <regular_expression>
+         <replacement_expression> <output_variable>
+         <input> [<input>...])
+
+Match the ``<regular_expression>`` as many times as possible and substitute
+the ``<replacement_expression>`` for the match in the output.
+All ``<input>`` arguments are concatenated before matching.
+
+The ``<replacement_expression>`` may refer to parenthesis-delimited
+subexpressions of the match using ``\1``, ``\2``, ..., ``\9``.  Note that
+two backslashes (``\\1``) are required in CMake code to get a backslash
+through argument parsing.
+
+.. _`Regex Specification`:
+
+Regex Specification
+"""""""""""""""""""
+
+The following characters have special meaning in regular expressions:
+
+``^``
+  Matches at beginning of input
+``$``
+  Matches at end of input
+``.``
+  Matches any single character
+``\<char>``
+  Matches the single character specified by ``<char>``.  Use this to
+  match special regex characters, e.g. ``\.`` for a literal ``.``
+  or ``\\`` for a literal backslash ``\``.  Escaping a non-special
+  character is unnecessary but allowed, e.g. ``\a`` matches ``a``.
+``[ ]``
+  Matches any character(s) inside the brackets
+``[^ ]``
+  Matches any character(s) not inside the brackets
+``-``
+  Inside brackets, specifies an inclusive range between
+  characters on either side e.g. ``[a-f]`` is ``[abcdef]``
+  To match a literal ``-`` using brackets, make it the first
+  or the last character e.g. ``[+*/-]`` matches basic
+  mathematical operators.
+``*``
+  Matches preceding pattern zero or more times
+``+``
+  Matches preceding pattern one or more times
+``?``
+  Matches preceding pattern zero or once only
+``|``
+  Matches a pattern on either side of the ``|``
+``()``
+  Saves a matched subexpression, which can be referenced
+  in the ``REGEX REPLACE`` operation.
+
+  .. versionadded:: 3.9
+    All regular expression-related commands, including e.g.
+    :command:`if(MATCHES)`, save subgroup matches in the variables
+    :variable:`CMAKE_MATCH_<n>` for ``<n>`` 0..9.
+
+``*``, ``+`` and ``?`` have higher precedence than concatenation.  ``|``
+has lower precedence than concatenation.  This means that the regular
+expression ``^ab+d$`` matches ``abbd`` but not ``ababd``, and the regular
+expression ``^(ab|cd)$`` matches ``ab`` but not ``abd``.
+
+CMake language :ref:`Escape Sequences` such as ``\t``, ``\r``, ``\n``,
+and ``\\`` may be used to construct literal tabs, carriage returns,
+newlines, and backslashes (respectively) to pass in a regex.  For example:
+
+* The quoted argument ``"[ \t\r\n]"`` specifies a regex that matches
+  any single whitespace character.
+* The quoted argument ``"[/\\]"`` specifies a regex that matches
+  a single forward slash ``/`` or backslash ``\``.
+* The quoted argument ``"[A-Za-z0-9_]"`` specifies a regex that matches
+  any single "word" character in the C locale.
+* The quoted argument ``"\\(\\a\\+b\\)"`` specifies a regex that matches
+  the exact string ``(a+b)``.  Each ``\\`` is parsed in a quoted argument
+  as just ``\``, so the regex itself is actually ``\(\a\+\b\)``.  This
+  can alternatively be specified in a :ref:`bracket argument` without
+  having to escape the backslashes, e.g. ``[[\(\a\+\b\)]]``.
+
+Manipulation
+^^^^^^^^^^^^
+
+.. _APPEND:
+
+.. code-block:: cmake
+
+  string(APPEND <string_variable> [<input>...])
+
+.. versionadded:: 3.4
+
+Append all the ``<input>`` arguments to the string.
+
+.. _PREPEND:
+
+.. code-block:: cmake
+
+  string(PREPEND <string_variable> [<input>...])
+
+.. versionadded:: 3.10
+
+Prepend all the ``<input>`` arguments to the string.
+
+.. _CONCAT:
+
+.. code-block:: cmake
+
+  string(CONCAT <output_variable> [<input>...])
+
+Concatenate all the ``<input>`` arguments together and store
+the result in the named ``<output_variable>``.
+
+.. _JOIN:
+
+.. code-block:: cmake
+
+  string(JOIN <glue> <output_variable> [<input>...])
+
+.. versionadded:: 3.12
+
+Join all the ``<input>`` arguments together using the ``<glue>``
+string and store the result in the named ``<output_variable>``.
+
+To join a list's elements, prefer to use the ``JOIN`` operator
+from the :command:`list` command.  This allows for the elements to have
+special characters like ``;`` in them.
+
+.. _TOLOWER:
+
+.. code-block:: cmake
+
+  string(TOLOWER <string> <output_variable>)
+
+Convert ``<string>`` to lower characters.
+
+.. _TOUPPER:
+
+.. code-block:: cmake
+
+  string(TOUPPER <string> <output_variable>)
+
+Convert ``<string>`` to upper characters.
+
+.. _LENGTH:
+
+.. code-block:: cmake
+
+  string(LENGTH <string> <output_variable>)
+
+Store in an ``<output_variable>`` a given string's length in bytes.
+Note that this means if ``<string>`` contains multi-byte characters, the
+result stored in ``<output_variable>`` will *not* be the number of characters.
+
+.. _SUBSTRING:
+
+.. code-block:: cmake
+
+  string(SUBSTRING <string> <begin> <length> <output_variable>)
+
+Store in an ``<output_variable>`` a substring of a given ``<string>``.  If
+``<length>`` is ``-1`` the remainder of the string starting at ``<begin>``
+will be returned.
+
+.. versionchanged:: 3.2
+  If ``<string>`` is shorter than ``<length>`` then the end of the string
+  is used instead.  Previous versions of CMake reported an error in this case.
+
+Both ``<begin>`` and ``<length>`` are counted in bytes, so care must
+be exercised if ``<string>`` could contain multi-byte characters.
+
+.. _STRIP:
+
+.. code-block:: cmake
+
+  string(STRIP <string> <output_variable>)
+
+Store in an ``<output_variable>`` a substring of a given ``<string>`` with
+leading and trailing spaces removed.
+
+.. _GENEX_STRIP:
+
+.. code-block:: cmake
+
+  string(GENEX_STRIP <string> <output_variable>)
+
+.. versionadded:: 3.1
+
+Strip any :manual:`generator expressions <cmake-generator-expressions(7)>`
+from the input ``<string>`` and store the result in the ``<output_variable>``.
+
+.. _REPEAT:
+
+.. code-block:: cmake
+
+  string(REPEAT <string> <count> <output_variable>)
+
+.. versionadded:: 3.15
+
+Produce the output string as the input ``<string>`` repeated ``<count>`` times.
+
+Comparison
+^^^^^^^^^^
+
+.. _COMPARE:
+
+.. code-block:: cmake
+
+  string(COMPARE LESS <string1> <string2> <output_variable>)
+  string(COMPARE GREATER <string1> <string2> <output_variable>)
+  string(COMPARE EQUAL <string1> <string2> <output_variable>)
+  string(COMPARE NOTEQUAL <string1> <string2> <output_variable>)
+  string(COMPARE LESS_EQUAL <string1> <string2> <output_variable>)
+  string(COMPARE GREATER_EQUAL <string1> <string2> <output_variable>)
+
+Compare the strings and store true or false in the ``<output_variable>``.
+
+.. versionadded:: 3.7
+  Added the ``LESS_EQUAL`` and ``GREATER_EQUAL`` options.
+
+.. _`Supported Hash Algorithms`:
+
+Hashing
+^^^^^^^
+
+.. _`HASH`:
+
+.. code-block:: cmake
+
+  string(<HASH> <output_variable> <input>)
+
+Compute a cryptographic hash of the ``<input>`` string.
+The supported ``<HASH>`` algorithm names are:
+
+``MD5``
+  Message-Digest Algorithm 5, RFC 1321.
+``SHA1``
+  US Secure Hash Algorithm 1, RFC 3174.
+``SHA224``
+  US Secure Hash Algorithms, RFC 4634.
+``SHA256``
+  US Secure Hash Algorithms, RFC 4634.
+``SHA384``
+  US Secure Hash Algorithms, RFC 4634.
+``SHA512``
+  US Secure Hash Algorithms, RFC 4634.
+``SHA3_224``
+  Keccak SHA-3.
+``SHA3_256``
+  Keccak SHA-3.
+``SHA3_384``
+  Keccak SHA-3.
+``SHA3_512``
+  Keccak SHA-3.
+
+.. versionadded:: 3.8
+  Added the ``SHA3_*`` hash algorithms.
+
+Generation
+^^^^^^^^^^
+
+.. _ASCII:
+
+.. code-block:: cmake
+
+  string(ASCII <number> [<number> ...] <output_variable>)
+
+Convert all numbers into corresponding ASCII characters.
+
+.. _HEX:
+
+.. code-block:: cmake
+
+  string(HEX <string> <output_variable>)
+
+.. versionadded:: 3.18
+
+Convert each byte in the input ``<string>`` to its hexadecimal representation
+and store the concatenated hex digits in the ``<output_variable>``. Letters in
+the output (``a`` through ``f``) are in lowercase.
+
+.. _CONFIGURE:
+
+.. code-block:: cmake
+
+  string(CONFIGURE <string> <output_variable>
+         [@ONLY] [ESCAPE_QUOTES])
+
+Transform a ``<string>`` like :command:`configure_file` transforms a file.
+
+.. _MAKE_C_IDENTIFIER:
+
+.. code-block:: cmake
+
+  string(MAKE_C_IDENTIFIER <string> <output_variable>)
+
+Convert each non-alphanumeric character in the input ``<string>`` to an
+underscore and store the result in the ``<output_variable>``.  If the first
+character of the ``<string>`` is a digit, an underscore will also be prepended
+to the result.
+
+.. _RANDOM:
+
+.. code-block:: cmake
+
+  string(RANDOM [LENGTH <length>] [ALPHABET <alphabet>]
+         [RANDOM_SEED <seed>] <output_variable>)
+
+Return a random string of given ``<length>`` consisting of
+characters from the given ``<alphabet>``.  Default length is 5 characters
+and default alphabet is all numbers and upper and lower case letters.
+If an integer ``RANDOM_SEED`` is given, its value will be used to seed the
+random number generator.
+
+.. _TIMESTAMP:
+
+.. code-block:: cmake
+
+  string(TIMESTAMP <output_variable> [<format_string>] [UTC])
+
+Write a string representation of the current date
+and/or time to the ``<output_variable>``.
+
+If the command is unable to obtain a timestamp, the ``<output_variable>``
+will be set to the empty string ``""``.
+
+The optional ``UTC`` flag requests the current date/time representation to
+be in Coordinated Universal Time (UTC) rather than local time.
+
+The optional ``<format_string>`` may contain the following format
+specifiers:
+
+``%%``
+  .. versionadded:: 3.8
+
+  A literal percent sign (%).
+
+``%d``
+  The day of the current month (01-31).
+
+``%H``
+  The hour on a 24-hour clock (00-23).
+
+``%I``
+  The hour on a 12-hour clock (01-12).
+
+``%j``
+  The day of the current year (001-366).
+
+``%m``
+  The month of the current year (01-12).
+
+``%b``
+  .. versionadded:: 3.7
+
+  Abbreviated month name (e.g. Oct).
+
+``%B``
+  .. versionadded:: 3.10
+
+  Full month name (e.g. October).
+
+``%M``
+  The minute of the current hour (00-59).
+
+``%s``
+  .. versionadded:: 3.6
+
+  Seconds since midnight (UTC) 1-Jan-1970 (UNIX time).
+
+``%S``
+  The second of the current minute.  60 represents a leap second. (00-60)
+
+``%U``
+  The week number of the current year (00-53).
+
+``%V``
+  .. versionadded:: 3.22
+
+  The ISO 8601 week number of the current year (01-53).
+
+``%w``
+  The day of the current week. 0 is Sunday. (0-6)
+
+``%a``
+  .. versionadded:: 3.7
+
+  Abbreviated weekday name (e.g. Fri).
+
+``%A``
+  .. versionadded:: 3.10
+
+  Full weekday name (e.g. Friday).
+
+``%y``
+  The last two digits of the current year (00-99).
+
+``%Y``
+  The current year.
+
+Unknown format specifiers will be ignored and copied to the output
+as-is.
+
+If no explicit ``<format_string>`` is given, it will default to:
+
+::
+
+   %Y-%m-%dT%H:%M:%S    for local time.
+   %Y-%m-%dT%H:%M:%SZ   for UTC.
+
+.. versionadded:: 3.8
+  If the ``SOURCE_DATE_EPOCH`` environment variable is set,
+  its value will be used instead of the current time.
+  See https://reproducible-builds.org/specs/source-date-epoch/ for details.
+
+.. _UUID:
+
+.. code-block:: cmake
+
+  string(UUID <output_variable> NAMESPACE <namespace> NAME <name>
+         TYPE <MD5|SHA1> [UPPER])
+
+.. versionadded:: 3.1
+
+Create a universally unique identifier (aka GUID) as per RFC4122
+based on the hash of the combined values of ``<namespace>``
+(which itself has to be a valid UUID) and ``<name>``.
+The hash algorithm can be either ``MD5`` (Version 3 UUID) or
+``SHA1`` (Version 5 UUID).
+A UUID has the format ``xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx``
+where each ``x`` represents a lower case hexadecimal character.
+Where required, an uppercase representation can be requested
+with the optional ``UPPER`` flag.
+
+.. _JSON:
+
+JSON
+^^^^
+
+.. versionadded:: 3.19
+
+Functionality for querying a JSON string.
+
+.. note::
+  In each of the following JSON-related subcommands, if the optional
+  ``ERROR_VARIABLE`` argument is given, errors will be reported in
+  ``<error-variable>`` and the ``<out-var>`` will be set to
+  ``<member|index>-[<member|index>...]-NOTFOUND`` with the path elements
+  up to the point where the error occurred, or just ``NOTFOUND`` if there
+  is no relevant path.  If an error occurs but the ``ERROR_VARIABLE``
+  option is not present, a fatal error message is generated.  If no error
+  occurs, the ``<error-variable>`` will be set to ``NOTFOUND``.
+
+.. _GET:
+.. code-block:: cmake
+
+  string(JSON <out-var> [ERROR_VARIABLE <error-variable>]
+         GET <json-string> <member|index> [<member|index> ...])
+
+Get an element from ``<json-string>`` at the location given
+by the list of ``<member|index>`` arguments.
+Array and object elements will be returned as a JSON string.
+Boolean elements will be returned as ``ON`` or ``OFF``.
+Null elements will be returned as an empty string.
+Number and string types will be returned as strings.
+
+.. _TYPE:
+.. code-block:: cmake
+
+  string(JSON <out-var> [ERROR_VARIABLE <error-variable>]
+         TYPE <json-string> <member|index> [<member|index> ...])
+
+Get the type of an element in ``<json-string>`` at the location
+given by the list of ``<member|index>`` arguments. The ``<out-var>``
+will be set to one of ``NULL``, ``NUMBER``, ``STRING``, ``BOOLEAN``,
+``ARRAY``, or ``OBJECT``.
+
+.. _MEMBER:
+.. code-block:: cmake
+
+  string(JSON <out-var> [ERROR_VARIABLE <error-var>]
+         MEMBER <json-string>
+         [<member|index> ...] <index>)
+
+Get the name of the ``<index>``-th member in ``<json-string>`` at the location
+given by the list of ``<member|index>`` arguments.
+Requires an element of object type.
+
+.. _JSONLENGTH:
+.. code-block:: cmake
+
+  string(JSON <out-var> [ERROR_VARIABLE <error-variable>]
+         LENGTH <json-string> <member|index> [<member|index> ...])
+
+Get the length of an element in ``<json-string>`` at the location
+given by the list of ``<member|index>`` arguments.
+Requires an element of array or object type.
+
+.. _REMOVE:
+.. code-block:: cmake
+
+  string(JSON <out-var> [ERROR_VARIABLE <error-variable>]
+         REMOVE <json-string> <member|index> [<member|index> ...])
+
+Remove an element from ``<json-string>`` at the location
+given by the list of ``<member|index>`` arguments. The JSON string
+without the removed element will be stored in ``<out-var>``.
+
+.. _SET:
+.. code-block:: cmake
+
+  string(JSON <out-var> [ERROR_VARIABLE <error-variable>]
+         SET <json-string> <member|index> [<member|index> ...] <value>)
+
+Set an element in ``<json-string>`` at the location
+given by the list of ``<member|index>`` arguments to ``<value>``.
+The contents of ``<value>`` should be valid JSON.
+
+.. _EQUAL:
+.. code-block:: cmake
+
+  string(JSON <out-var> [ERROR_VARIABLE <error-var>]
+         EQUAL <json-string1> <json-string2>)
+
+Compare the two JSON objects given by ``<json-string1>`` and ``<json-string2>``
+for equality.  The contents of ``<json-string1>`` and ``<json-string2>``
+should be valid JSON.  The ``<out-var>`` will be set to a true value if the
+JSON objects are considered equal, or a false value otherwise.
diff --git a/share/cmake-3.18/Help/command/subdir_depends.rst b/share/cmake-3.22/Help/command/subdir_depends.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/subdir_depends.rst
rename to share/cmake-3.22/Help/command/subdir_depends.rst
diff --git a/share/cmake-3.18/Help/command/subdirs.rst b/share/cmake-3.22/Help/command/subdirs.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/subdirs.rst
rename to share/cmake-3.22/Help/command/subdirs.rst
diff --git a/share/cmake-3.22/Help/command/target_compile_definitions.rst b/share/cmake-3.22/Help/command/target_compile_definitions.rst
new file mode 100644
index 0000000..3fb113a
--- /dev/null
+++ b/share/cmake-3.22/Help/command/target_compile_definitions.rst
@@ -0,0 +1,50 @@
+target_compile_definitions
+--------------------------
+
+Add compile definitions to a target.
+
+.. code-block:: cmake
+
+  target_compile_definitions(<target>
+    <INTERFACE|PUBLIC|PRIVATE> [items1...]
+    [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
+
+Specifies compile definitions to use when compiling a given ``<target>``.  The
+named ``<target>`` must have been created by a command such as
+:command:`add_executable` or :command:`add_library` and must not be an
+:ref:`ALIAS target <Alias Targets>`.
+
+The ``INTERFACE``, ``PUBLIC`` and ``PRIVATE`` keywords are required to
+specify the scope of the following arguments.  ``PRIVATE`` and ``PUBLIC``
+items will populate the :prop_tgt:`COMPILE_DEFINITIONS` property of
+``<target>``. ``PUBLIC`` and ``INTERFACE`` items will populate the
+:prop_tgt:`INTERFACE_COMPILE_DEFINITIONS` property of ``<target>``.
+The following arguments specify compile definitions.  Repeated calls for the
+same ``<target>`` append items in the order called.
+
+.. versionadded:: 3.11
+  Allow setting ``INTERFACE`` items on :ref:`IMPORTED targets <Imported Targets>`.
+
+Arguments to ``target_compile_definitions`` may use "generator expressions"
+with the syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)`
+manual for available expressions.  See the :manual:`cmake-buildsystem(7)`
+manual for more on defining buildsystem properties.
+
+Any leading ``-D`` on an item will be removed.  Empty items are ignored.
+For example, the following are all equivalent:
+
+.. code-block:: cmake
+
+  target_compile_definitions(foo PUBLIC FOO)
+  target_compile_definitions(foo PUBLIC -DFOO)  # -D removed
+  target_compile_definitions(foo PUBLIC "" FOO) # "" ignored
+  target_compile_definitions(foo PUBLIC -D FOO) # -D becomes "", then ignored
+
+Definitions may optionally have values:
+
+.. code-block:: cmake
+
+  target_compile_definitions(foo PUBLIC FOO=1)
+
+Note that many compilers treat ``-DFOO`` as equivalent to ``-DFOO=1``, but
+other tools may not recognize this in all circumstances (e.g. IntelliSense).
diff --git a/share/cmake-3.22/Help/command/target_compile_features.rst b/share/cmake-3.22/Help/command/target_compile_features.rst
new file mode 100644
index 0000000..58502bf
--- /dev/null
+++ b/share/cmake-3.22/Help/command/target_compile_features.rst
@@ -0,0 +1,37 @@
+target_compile_features
+-----------------------
+
+.. versionadded:: 3.1
+
+Add expected compiler features to a target.
+
+.. code-block:: cmake
+
+  target_compile_features(<target> <PRIVATE|PUBLIC|INTERFACE> <feature> [...])
+
+Specifies compiler features required when compiling a given target.  If the
+feature is not listed in the :variable:`CMAKE_C_COMPILE_FEATURES`,
+:variable:`CMAKE_CUDA_COMPILE_FEATURES`, or :variable:`CMAKE_CXX_COMPILE_FEATURES`
+variables, then an error will be reported by CMake.  If the use of the feature requires
+an additional compiler flag, such as ``-std=gnu++11``, the flag will be added
+automatically.
+
+The ``INTERFACE``, ``PUBLIC`` and ``PRIVATE`` keywords are required to
+specify the scope of the features.  ``PRIVATE`` and ``PUBLIC`` items will
+populate the :prop_tgt:`COMPILE_FEATURES` property of ``<target>``.
+``PUBLIC`` and ``INTERFACE`` items will populate the
+:prop_tgt:`INTERFACE_COMPILE_FEATURES` property of ``<target>``.
+Repeated calls for the same ``<target>`` append items.
+
+.. versionadded:: 3.11
+  Allow setting ``INTERFACE`` items on :ref:`IMPORTED targets <Imported Targets>`.
+
+The named ``<target>`` must have been created by a command such as
+:command:`add_executable` or :command:`add_library` and must not be an
+:ref:`ALIAS target <Alias Targets>`.
+
+Arguments to ``target_compile_features`` may use "generator expressions"
+with the syntax ``$<...>``.
+See the :manual:`cmake-generator-expressions(7)` manual for available
+expressions.  See the :manual:`cmake-compile-features(7)` manual for
+information on compile features and a list of supported compilers.
diff --git a/share/cmake-3.22/Help/command/target_compile_options.rst b/share/cmake-3.22/Help/command/target_compile_options.rst
new file mode 100644
index 0000000..e45b209
--- /dev/null
+++ b/share/cmake-3.22/Help/command/target_compile_options.rst
@@ -0,0 +1,52 @@
+target_compile_options
+----------------------
+
+Add compile options to a target.
+
+.. code-block:: cmake
+
+  target_compile_options(<target> [BEFORE]
+    <INTERFACE|PUBLIC|PRIVATE> [items1...]
+    [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
+
+Adds options to the :prop_tgt:`COMPILE_OPTIONS` or
+:prop_tgt:`INTERFACE_COMPILE_OPTIONS` target properties. These options
+are used when compiling the given ``<target>``, which must have been
+created by a command such as :command:`add_executable` or
+:command:`add_library` and must not be an :ref:`ALIAS target <Alias Targets>`.
+
+Arguments
+^^^^^^^^^
+
+If ``BEFORE`` is specified, the content will be prepended to the property
+instead of being appended.
+
+The ``INTERFACE``, ``PUBLIC`` and ``PRIVATE`` keywords are required to
+specify the scope of the following arguments.  ``PRIVATE`` and ``PUBLIC``
+items will populate the :prop_tgt:`COMPILE_OPTIONS` property of
+``<target>``.  ``PUBLIC`` and ``INTERFACE`` items will populate the
+:prop_tgt:`INTERFACE_COMPILE_OPTIONS` property of ``<target>``.
+The following arguments specify compile options.  Repeated calls for the same
+``<target>`` append items in the order called.
+
+.. versionadded:: 3.11
+  Allow setting ``INTERFACE`` items on :ref:`IMPORTED targets <Imported Targets>`.
+
+Arguments to ``target_compile_options`` may use "generator expressions"
+with the syntax ``$<...>``. See the :manual:`cmake-generator-expressions(7)`
+manual for available expressions.  See the :manual:`cmake-buildsystem(7)`
+manual for more on defining buildsystem properties.
+
+.. include:: OPTIONS_SHELL.txt
+
+See Also
+^^^^^^^^
+
+This command can be used to add any options. However, for adding
+preprocessor definitions and include directories it is recommended
+to use the more specific commands :command:`target_compile_definitions`
+and :command:`target_include_directories`.
+
+For directory-wide settings, there is the command :command:`add_compile_options`.
+
+For file-specific settings, there is the source file property :prop_sf:`COMPILE_OPTIONS`.
diff --git a/share/cmake-3.22/Help/command/target_include_directories.rst b/share/cmake-3.22/Help/command/target_include_directories.rst
new file mode 100644
index 0000000..3e53b2e
--- /dev/null
+++ b/share/cmake-3.22/Help/command/target_include_directories.rst
@@ -0,0 +1,64 @@
+target_include_directories
+--------------------------
+
+Add include directories to a target.
+
+.. code-block:: cmake
+
+  target_include_directories(<target> [SYSTEM] [AFTER|BEFORE]
+    <INTERFACE|PUBLIC|PRIVATE> [items1...]
+    [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
+
+Specifies include directories to use when compiling a given target.
+The named ``<target>`` must have been created by a command such
+as :command:`add_executable` or :command:`add_library` and must not be an
+:ref:`ALIAS target <Alias Targets>`.
+
+By using ``AFTER`` or ``BEFORE`` explicitly, you can select between appending
+and prepending, independent of the default.
+
+The ``INTERFACE``, ``PUBLIC`` and ``PRIVATE`` keywords are required to specify
+the scope of the following arguments.  ``PRIVATE`` and ``PUBLIC`` items will
+populate the :prop_tgt:`INCLUDE_DIRECTORIES` property of ``<target>``.
+``PUBLIC`` and ``INTERFACE`` items will populate the
+:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` property of ``<target>``.
+The following arguments specify include directories.
+
+.. versionadded:: 3.11
+  Allow setting ``INTERFACE`` items on :ref:`IMPORTED targets <Imported Targets>`.
+
+Specified include directories may be absolute paths or relative paths.
+Repeated calls for the same <target> append items in the order called.  If
+``SYSTEM`` is specified, the compiler will be told the
+directories are meant as system include directories on some platforms
+(signalling this setting might achieve effects such as the compiler
+skipping warnings, or these fixed-install system files not being
+considered in dependency calculations - see compiler docs).  If ``SYSTEM``
+is used together with ``PUBLIC`` or ``INTERFACE``, the
+:prop_tgt:`INTERFACE_SYSTEM_INCLUDE_DIRECTORIES` target property will be
+populated with the specified directories.
+
+Arguments to ``target_include_directories`` may use "generator expressions"
+with the syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)`
+manual for available expressions.  See the :manual:`cmake-buildsystem(7)`
+manual for more on defining buildsystem properties.
+
+Include directories usage requirements commonly differ between the build-tree
+and the install-tree.  The ``BUILD_INTERFACE`` and ``INSTALL_INTERFACE``
+generator expressions can be used to describe separate usage requirements
+based on the usage location.  Relative paths are allowed within the
+``INSTALL_INTERFACE`` expression and are interpreted relative to the
+installation prefix.  For example:
+
+.. code-block:: cmake
+
+  target_include_directories(mylib PUBLIC
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/mylib>
+    $<INSTALL_INTERFACE:include/mylib>  # <prefix>/include/mylib
+  )
+
+Creating Relocatable Packages
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. |INTERFACE_PROPERTY_LINK| replace:: :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES`
+.. include:: /include/INTERFACE_INCLUDE_DIRECTORIES_WARNING.txt
diff --git a/share/cmake-3.22/Help/command/target_link_directories.rst b/share/cmake-3.22/Help/command/target_link_directories.rst
new file mode 100644
index 0000000..bb75a3d
--- /dev/null
+++ b/share/cmake-3.22/Help/command/target_link_directories.rst
@@ -0,0 +1,57 @@
+target_link_directories
+-----------------------
+
+.. versionadded:: 3.13
+
+Add link directories to a target.
+
+.. code-block:: cmake
+
+  target_link_directories(<target> [BEFORE]
+    <INTERFACE|PUBLIC|PRIVATE> [items1...]
+    [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
+
+Specifies the paths in which the linker should search for libraries when
+linking a given target.  Each item can be an absolute or relative path,
+with the latter being interpreted as relative to the current source
+directory.  These items will be added to the link command.
+
+The named ``<target>`` must have been created by a command such as
+:command:`add_executable` or :command:`add_library` and must not be an
+:ref:`ALIAS target <Alias Targets>`.
+
+The ``INTERFACE``, ``PUBLIC`` and ``PRIVATE`` keywords are required to
+specify the scope of the items that follow them.  ``PRIVATE`` and
+``PUBLIC`` items will populate the :prop_tgt:`LINK_DIRECTORIES` property
+of ``<target>``.  ``PUBLIC`` and ``INTERFACE`` items will populate the
+:prop_tgt:`INTERFACE_LINK_DIRECTORIES` property of ``<target>``
+(:ref:`IMPORTED targets <Imported Targets>` only support ``INTERFACE`` items).
+Each item specifies a link directory and will be converted to an absolute
+path if necessary before adding it to the relevant property.  Repeated
+calls for the same ``<target>`` append items in the order called.
+
+If ``BEFORE`` is specified, the content will be prepended to the relevant
+property instead of being appended.
+
+Arguments to ``target_link_directories`` may use "generator expressions"
+with the syntax ``$<...>``. See the :manual:`cmake-generator-expressions(7)`
+manual for available expressions.  See the :manual:`cmake-buildsystem(7)`
+manual for more on defining buildsystem properties.
+
+.. note::
+
+  This command is rarely necessary and should be avoided where there are
+  other choices.  Prefer to pass full absolute paths to libraries where
+  possible, since this ensures the correct library will always be linked.
+  The :command:`find_library` command provides the full path, which can
+  generally be used directly in calls to :command:`target_link_libraries`.
+  Situations where a library search path may be needed include:
+
+  - Project generators like Xcode where the user can switch target
+    architecture at build time, but a full path to a library cannot
+    be used because it only provides one architecture (i.e. it is not
+    a universal binary).
+  - Libraries may themselves have other private library dependencies
+    that expect to be found via ``RPATH`` mechanisms, but some linkers
+    are not able to fully decode those paths (e.g. due to the presence
+    of things like ``$ORIGIN``).
diff --git a/share/cmake-3.22/Help/command/target_link_libraries.rst b/share/cmake-3.22/Help/command/target_link_libraries.rst
new file mode 100644
index 0000000..c85094a
--- /dev/null
+++ b/share/cmake-3.22/Help/command/target_link_libraries.rst
@@ -0,0 +1,407 @@
+target_link_libraries
+---------------------
+
+.. only:: html
+
+   .. contents::
+
+Specify libraries or flags to use when linking a given target and/or
+its dependents.  :ref:`Usage requirements <Target Usage Requirements>`
+from linked library targets will be propagated.  Usage requirements
+of a target's dependencies affect compilation of its own sources.
+
+Overview
+^^^^^^^^
+
+This command has several signatures as detailed in subsections below.
+All of them have the general form
+
+.. code-block:: cmake
+
+  target_link_libraries(<target> ... <item>... ...)
+
+The named ``<target>`` must have been created by a command such as
+:command:`add_executable` or :command:`add_library` and must not be an
+:ref:`ALIAS target <Alias Targets>`.  If policy :policy:`CMP0079` is not
+set to ``NEW`` then the target must have been created in the current
+directory.  Repeated calls for the same ``<target>`` append items in
+the order called.
+
+.. versionadded:: 3.13
+  The ``<target>`` doesn't have to be defined in the same directory as the
+  ``target_link_libraries`` call.
+
+Each ``<item>`` may be:
+
+* **A library target name**: The generated link line will have the
+  full path to the linkable library file associated with the target.
+  The buildsystem will have a dependency to re-link ``<target>`` if
+  the library file changes.
+
+  The named target must be created by :command:`add_library` within
+  the project or as an :ref:`IMPORTED library <Imported Targets>`.
+  If it is created within the project an ordering dependency will
+  automatically be added in the build system to make sure the named
+  library target is up-to-date before the ``<target>`` links.
+
+  If an imported library has the :prop_tgt:`IMPORTED_NO_SONAME`
+  target property set, CMake may ask the linker to search for
+  the library instead of using the full path
+  (e.g. ``/usr/lib/libfoo.so`` becomes ``-lfoo``).
+
+  The full path to the target's artifact will be quoted/escaped for
+  the shell automatically.
+
+* **A full path to a library file**: The generated link line will
+  normally preserve the full path to the file. The buildsystem will
+  have a dependency to re-link ``<target>`` if the library file changes.
+
+  There are some cases where CMake may ask the linker to search for
+  the library (e.g. ``/usr/lib/libfoo.so`` becomes ``-lfoo``), such
+  as when a shared library is detected to have no ``SONAME`` field.
+  See policy :policy:`CMP0060` for discussion of another case.
+
+  If the library file is in a macOS framework, the ``Headers`` directory
+  of the framework will also be processed as a
+  :ref:`usage requirement <Target Usage Requirements>`.  This has the same
+  effect as passing the framework directory as an include directory.
+
+  .. versionadded:: 3.8
+    On :ref:`Visual Studio Generators` for VS 2010 and above, library files
+    ending in ``.targets`` will be treated as MSBuild targets files and
+    imported into generated project files.  This is not supported by other
+    generators.
+
+  The full path to the library file will be quoted/escaped for
+  the shell automatically.
+
+* **A plain library name**: The generated link line will ask the linker
+  to search for the library (e.g. ``foo`` becomes ``-lfoo`` or ``foo.lib``).
+
+  The library name/flag is treated as a command-line string fragment and
+  will be used with no extra quoting or escaping.
+
+* **A link flag**: Item names starting with ``-``, but not ``-l`` or
+  ``-framework``, are treated as linker flags.  Note that such flags will
+  be treated like any other library link item for purposes of transitive
+  dependencies, so they are generally safe to specify only as private link
+  items that will not propagate to dependents.
+
+  Link flags specified here are inserted into the link command in the same
+  place as the link libraries. This might not be correct, depending on
+  the linker. Use the :prop_tgt:`LINK_OPTIONS` target property or
+  :command:`target_link_options` command to add link
+  flags explicitly. The flags will then be placed at the toolchain-defined
+  flag position in the link command.
+
+  .. versionadded:: 3.13
+    :prop_tgt:`LINK_OPTIONS` target property and :command:`target_link_options`
+    command.  For earlier versions of CMake, use :prop_tgt:`LINK_FLAGS`
+    property instead.
+
+  The link flag is treated as a command-line string fragment and
+  will be used with no extra quoting or escaping.
+
+* **A generator expression**: A ``$<...>`` :manual:`generator expression
+  <cmake-generator-expressions(7)>` may evaluate to any of the above
+  items or to a :ref:`semicolon-separated list <CMake Language Lists>` of them.
+  If the ``...`` contains any ``;`` characters, e.g. after evaluation
+  of a ``${list}`` variable, be sure to use an explicitly quoted
+  argument ``"$<...>"`` so that this command receives it as a
+  single ``<item>``.
+
+  Additionally, a generator expression may be used as a fragment of
+  any of the above items, e.g. ``foo$<1:_d>``.
+
+  Note that generator expressions will not be used in OLD handling of
+  policy :policy:`CMP0003` or policy :policy:`CMP0004`.
+
+* A ``debug``, ``optimized``, or ``general`` keyword immediately followed
+  by another ``<item>``.  The item following such a keyword will be used
+  only for the corresponding build configuration.  The ``debug`` keyword
+  corresponds to the ``Debug`` configuration (or to configurations named
+  in the :prop_gbl:`DEBUG_CONFIGURATIONS` global property if it is set).
+  The ``optimized`` keyword corresponds to all other configurations.  The
+  ``general`` keyword corresponds to all configurations, and is purely
+  optional.  Higher granularity may be achieved for per-configuration
+  rules by creating and linking to
+  :ref:`IMPORTED library targets <Imported Targets>`.
+  These keywords are interpreted immediately by this command and therefore
+  have no special meaning when produced by a generator expression.
+
+Items containing ``::``, such as ``Foo::Bar``, are assumed to be
+:ref:`IMPORTED <Imported Targets>` or :ref:`ALIAS <Alias Targets>` library
+target names and will cause an error if no such target exists.
+See policy :policy:`CMP0028`.
+
+See the :manual:`cmake-buildsystem(7)` manual for more on defining
+buildsystem properties.
+
+Libraries for a Target and/or its Dependents
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. code-block:: cmake
+
+  target_link_libraries(<target>
+                        <PRIVATE|PUBLIC|INTERFACE> <item>...
+                       [<PRIVATE|PUBLIC|INTERFACE> <item>...]...)
+
+The ``PUBLIC``, ``PRIVATE`` and ``INTERFACE`` keywords can be used to
+specify both the link dependencies and the link interface in one command.
+Libraries and targets following ``PUBLIC`` are linked to, and are made
+part of the link interface.  Libraries and targets following ``PRIVATE``
+are linked to, but are not made part of the link interface.  Libraries
+following ``INTERFACE`` are appended to the link interface and are not
+used for linking ``<target>``.
+
+Libraries for both a Target and its Dependents
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. code-block:: cmake
+
+  target_link_libraries(<target> <item>...)
+
+Library dependencies are transitive by default with this signature.
+When this target is linked into another target then the libraries
+linked to this target will appear on the link line for the other
+target too.  This transitive "link interface" is stored in the
+:prop_tgt:`INTERFACE_LINK_LIBRARIES` target property and may be overridden
+by setting the property directly.  When :policy:`CMP0022` is not set to
+``NEW``, transitive linking is built in but may be overridden by the
+:prop_tgt:`LINK_INTERFACE_LIBRARIES` property.  Calls to other signatures
+of this command may set the property making any libraries linked
+exclusively by this signature private.
+
+Libraries for a Target and/or its Dependents (Legacy)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. code-block:: cmake
+
+  target_link_libraries(<target>
+                        <LINK_PRIVATE|LINK_PUBLIC> <lib>...
+                       [<LINK_PRIVATE|LINK_PUBLIC> <lib>...]...)
+
+The ``LINK_PUBLIC`` and ``LINK_PRIVATE`` modes can be used to specify both
+the link dependencies and the link interface in one command.
+
+This signature is for compatibility only.  Prefer the ``PUBLIC`` or
+``PRIVATE`` keywords instead.
+
+Libraries and targets following ``LINK_PUBLIC`` are linked to, and are
+made part of the :prop_tgt:`INTERFACE_LINK_LIBRARIES`.  If policy
+:policy:`CMP0022` is not ``NEW``, they are also made part of the
+:prop_tgt:`LINK_INTERFACE_LIBRARIES`.  Libraries and targets following
+``LINK_PRIVATE`` are linked to, but are not made part of the
+:prop_tgt:`INTERFACE_LINK_LIBRARIES` (or :prop_tgt:`LINK_INTERFACE_LIBRARIES`).
+
+Libraries for Dependents Only (Legacy)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. code-block:: cmake
+
+  target_link_libraries(<target> LINK_INTERFACE_LIBRARIES <item>...)
+
+The ``LINK_INTERFACE_LIBRARIES`` mode appends the libraries to the
+:prop_tgt:`INTERFACE_LINK_LIBRARIES` target property instead of using them
+for linking.  If policy :policy:`CMP0022` is not ``NEW``, then this mode
+also appends libraries to the :prop_tgt:`LINK_INTERFACE_LIBRARIES` and its
+per-configuration equivalent.
+
+This signature is for compatibility only.  Prefer the ``INTERFACE`` mode
+instead.
+
+Libraries specified as ``debug`` are wrapped in a generator expression to
+correspond to debug builds.  If policy :policy:`CMP0022` is
+not ``NEW``, the libraries are also appended to the
+:prop_tgt:`LINK_INTERFACE_LIBRARIES_DEBUG <LINK_INTERFACE_LIBRARIES_<CONFIG>>`
+property (or to the properties corresponding to configurations listed in
+the :prop_gbl:`DEBUG_CONFIGURATIONS` global property if it is set).
+Libraries specified as ``optimized`` are appended to the
+:prop_tgt:`INTERFACE_LINK_LIBRARIES` property.  If policy :policy:`CMP0022`
+is not ``NEW``, they are also appended to the
+:prop_tgt:`LINK_INTERFACE_LIBRARIES` property.  Libraries specified as
+``general`` (or without any keyword) are treated as if specified for both
+``debug`` and ``optimized``.
+
+Linking Object Libraries
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.12
+
+:ref:`Object Libraries` may be used as the ``<target>`` (first) argument
+of ``target_link_libraries`` to specify dependencies of their sources
+on other libraries.  For example, the code
+
+.. code-block:: cmake
+
+  add_library(A SHARED a.c)
+  target_compile_definitions(A PUBLIC A)
+
+  add_library(obj OBJECT obj.c)
+  target_compile_definitions(obj PUBLIC OBJ)
+  target_link_libraries(obj PUBLIC A)
+
+compiles ``obj.c`` with ``-DA -DOBJ`` and establishes usage requirements
+for ``obj`` that propagate to its dependents.
+
+Normal libraries and executables may link to :ref:`Object Libraries`
+to get their objects and usage requirements.  Continuing the above
+example, the code
+
+.. code-block:: cmake
+
+  add_library(B SHARED b.c)
+  target_link_libraries(B PUBLIC obj)
+
+compiles ``b.c`` with ``-DA -DOBJ``, creates shared library ``B``
+with object files from ``b.c`` and ``obj.c``, and links ``B`` to ``A``.
+Furthermore, the code
+
+.. code-block:: cmake
+
+  add_executable(main main.c)
+  target_link_libraries(main B)
+
+compiles ``main.c`` with ``-DA -DOBJ`` and links executable ``main``
+to ``B`` and ``A``.  The object library's usage requirements are
+propagated transitively through ``B``, but its object files are not.
+
+:ref:`Object Libraries` may "link" to other object libraries to get
+usage requirements, but since they do not have a link step nothing
+is done with their object files.  Continuing from the above example,
+the code:
+
+.. code-block:: cmake
+
+  add_library(obj2 OBJECT obj2.c)
+  target_link_libraries(obj2 PUBLIC obj)
+
+  add_executable(main2 main2.c)
+  target_link_libraries(main2 obj2)
+
+compiles ``obj2.c`` with ``-DA -DOBJ``, creates executable ``main2``
+with object files from ``main2.c`` and ``obj2.c``, and links ``main2``
+to ``A``.
+
+In other words, when :ref:`Object Libraries` appear in a target's
+:prop_tgt:`INTERFACE_LINK_LIBRARIES` property they will be
+treated as :ref:`Interface Libraries`, but when they appear in
+a target's :prop_tgt:`LINK_LIBRARIES` property their object files
+will be included in the link too.
+
+.. _`Linking Object Libraries via $<TARGET_OBJECTS>`:
+
+Linking Object Libraries via $<TARGET_OBJECTS>
+""""""""""""""""""""""""""""""""""""""""""""""
+
+.. versionadded:: 3.21
+
+The object files associated with an object library may be referenced
+by the :genex:`$<TARGET_OBJECTS>` generator expression.  Such object
+files are placed on the link line *before* all libraries, regardless
+of their relative order.  Additionally, an ordering dependency will be
+added to the build system to make sure the object library is up-to-date
+before the dependent target links.  For example, the code
+
+.. code-block:: cmake
+
+  add_library(obj3 OBJECT obj3.c)
+  target_compile_definitions(obj3 PUBLIC OBJ3)
+
+  add_executable(main3 main3.c)
+  target_link_libraries(main3 PRIVATE a3 $<TARGET_OBJECTS:obj3> b3)
+
+links executable ``main3`` with object files from ``main3.c``
+and ``obj3.c`` followed by the ``a3`` and ``b3`` libraries.
+``main3.c`` is *not* compiled with usage requirements from ``obj3``,
+such as ``-DOBJ3``.
+
+This approach can be used to achieve transitive inclusion of object
+files in link lines as usage requirements.  Continuing the above
+example, the code
+
+.. code-block:: cmake
+
+  add_library(iface_obj3 INTERFACE)
+  target_link_libraries(iface_obj3 INTERFACE obj3 $<TARGET_OBJECTS:obj3>)
+
+creates an interface library ``iface_obj3`` that forwards the ``obj3``
+usage requirements and adds the ``obj3`` object files to dependents'
+link lines.  The code
+
+.. code-block:: cmake
+
+  add_executable(use_obj3 use_obj3.c)
+  target_link_libraries(use_obj3 PRIVATE iface_obj3)
+
+compiles ``use_obj3.c`` with ``-DOBJ3`` and links executable ``use_obj3``
+with object files from ``use_obj3.c`` and ``obj3.c``.
+
+This also works transitively through a static library.  Since a static
+library does not link, it does not consume the object files from
+object libraries referenced this way.  Instead, the object files
+become transitive link dependencies of the static library.
+Continuing the above example, the code
+
+.. code-block:: cmake
+
+  add_library(static3 STATIC static3.c)
+  target_link_libraries(static3 PRIVATE iface_obj3)
+
+  add_executable(use_static3 use_static3.c)
+  target_link_libraries(use_static3 PRIVATE static3)
+
+compiles ``static3.c`` with ``-DOBJ3`` and creates ``libstatic3.a``
+using only its own object file.  ``use_static3.c`` is compiled *without*
+``-DOBJ3`` because the usage requirement is not transitive through
+the private dependency of ``static3``.  However, the link dependencies
+of ``static3`` are propagated, including the ``iface_obj3`` reference
+to ``$<TARGET_OBJECTS:obj3>``.  The ``use_static3`` executable is
+created with object files from ``use_static3.c`` and ``obj3.c``, and
+linked to library ``libstatic3.a``.
+
+When using this approach, it is the project's responsibility to avoid
+linking multiple dependent binaries to ``iface_obj3``, because they will
+all get the ``obj3`` object files on their link lines.
+
+.. note::
+
+  Referencing :genex:`$<TARGET_OBJECTS>` in ``target_link_libraries``
+  calls worked in versions of CMake prior to 3.21 for some cases,
+  but was not fully supported:
+
+  * It did not place the object files before libraries on link lines.
+  * It did not add an ordering dependency on the object library.
+  * It did not work in Xcode with multiple architectures.
+
+Cyclic Dependencies of Static Libraries
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The library dependency graph is normally acyclic (a DAG), but in the case
+of mutually-dependent ``STATIC`` libraries CMake allows the graph to
+contain cycles (strongly connected components).  When another target links
+to one of the libraries, CMake repeats the entire connected component.
+For example, the code
+
+.. code-block:: cmake
+
+  add_library(A STATIC a.c)
+  add_library(B STATIC b.c)
+  target_link_libraries(A B)
+  target_link_libraries(B A)
+  add_executable(main main.c)
+  target_link_libraries(main A)
+
+links ``main`` to ``A B A B``.  While one repetition is usually
+sufficient, pathological object file and symbol arrangements can require
+more.  One may handle such cases by using the
+:prop_tgt:`LINK_INTERFACE_MULTIPLICITY` target property or by manually
+repeating the component in the last ``target_link_libraries`` call.
+However, if two archives are really so interdependent they should probably
+be combined into a single archive, perhaps by using :ref:`Object Libraries`.
+
+Creating Relocatable Packages
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. |INTERFACE_PROPERTY_LINK| replace:: :prop_tgt:`INTERFACE_LINK_LIBRARIES`
+.. include:: /include/INTERFACE_LINK_LIBRARIES_WARNING.txt
diff --git a/share/cmake-3.22/Help/command/target_link_options.rst b/share/cmake-3.22/Help/command/target_link_options.rst
new file mode 100644
index 0000000..87dff39
--- /dev/null
+++ b/share/cmake-3.22/Help/command/target_link_options.rst
@@ -0,0 +1,54 @@
+target_link_options
+-------------------
+
+.. versionadded:: 3.13
+
+Add options to the link step for an executable, shared library or module
+library target.
+
+.. code-block:: cmake
+
+  target_link_options(<target> [BEFORE]
+    <INTERFACE|PUBLIC|PRIVATE> [items1...]
+    [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
+
+The named ``<target>`` must have been created by a command such as
+:command:`add_executable` or :command:`add_library` and must not be an
+:ref:`ALIAS target <Alias Targets>`.
+
+This command can be used to add any link options, but alternative commands
+exist to add libraries (:command:`target_link_libraries` or
+:command:`link_libraries`).  See documentation of the
+:prop_dir:`directory <LINK_OPTIONS>` and
+:prop_tgt:`target <LINK_OPTIONS>` ``LINK_OPTIONS`` properties.
+
+.. note::
+
+  This command cannot be used to add options for static library targets,
+  since they do not use a linker.  To add archiver or MSVC librarian flags,
+  see the :prop_tgt:`STATIC_LIBRARY_OPTIONS` target property.
+
+If ``BEFORE`` is specified, the content will be prepended to the property
+instead of being appended.
+
+The ``INTERFACE``, ``PUBLIC`` and ``PRIVATE`` keywords are required to
+specify the scope of the following arguments.  ``PRIVATE`` and ``PUBLIC``
+items will populate the :prop_tgt:`LINK_OPTIONS` property of
+``<target>``.  ``PUBLIC`` and ``INTERFACE`` items will populate the
+:prop_tgt:`INTERFACE_LINK_OPTIONS` property of ``<target>``.
+The following arguments specify link options.  Repeated calls for the same
+``<target>`` append items in the order called.
+
+.. note::
+  :ref:`IMPORTED targets <Imported Targets>` only support ``INTERFACE`` items.
+
+Arguments to ``target_link_options`` may use "generator expressions"
+with the syntax ``$<...>``. See the :manual:`cmake-generator-expressions(7)`
+manual for available expressions.  See the :manual:`cmake-buildsystem(7)`
+manual for more on defining buildsystem properties.
+
+.. include:: DEVICE_LINK_OPTIONS.txt
+
+.. include:: OPTIONS_SHELL.txt
+
+.. include:: LINK_OPTIONS_LINKER.txt
diff --git a/share/cmake-3.22/Help/command/target_precompile_headers.rst b/share/cmake-3.22/Help/command/target_precompile_headers.rst
new file mode 100644
index 0000000..9f7dabb
--- /dev/null
+++ b/share/cmake-3.22/Help/command/target_precompile_headers.rst
@@ -0,0 +1,125 @@
+target_precompile_headers
+-------------------------
+
+.. versionadded:: 3.16
+
+Add a list of header files to precompile.
+
+Precompiling header files can speed up compilation by creating a partially
+processed version of some header files, and then using that version during
+compilations rather than repeatedly parsing the original headers.
+
+Main Form
+^^^^^^^^^
+
+.. code-block:: cmake
+
+  target_precompile_headers(<target>
+    <INTERFACE|PUBLIC|PRIVATE> [header1...]
+    [<INTERFACE|PUBLIC|PRIVATE> [header2...] ...])
+
+The command adds header files to the :prop_tgt:`PRECOMPILE_HEADERS` and/or
+:prop_tgt:`INTERFACE_PRECOMPILE_HEADERS` target properties of ``<target>``.
+The named ``<target>`` must have been created by a command such as
+:command:`add_executable` or :command:`add_library` and must not be an
+:ref:`ALIAS target <Alias Targets>`.
+
+The ``INTERFACE``, ``PUBLIC`` and ``PRIVATE`` keywords are required to
+specify the scope of the following arguments.  ``PRIVATE`` and ``PUBLIC``
+items will populate the :prop_tgt:`PRECOMPILE_HEADERS` property of
+``<target>``.  ``PUBLIC`` and ``INTERFACE`` items will populate the
+:prop_tgt:`INTERFACE_PRECOMPILE_HEADERS` property of ``<target>``
+(:ref:`IMPORTED targets <Imported Targets>` only support ``INTERFACE`` items).
+Repeated calls for the same ``<target>`` will append items in the order called.
+
+Projects should generally avoid using ``PUBLIC`` or ``INTERFACE`` for targets
+that will be :ref:`exported <install(EXPORT)>`, or they should at least use
+the :genex:`$<BUILD_INTERFACE:...>` generator expression to prevent precompile
+headers from appearing in an installed exported target.  Consumers of a target
+should typically be in control of what precompile headers they use, not have
+precompile headers forced on them by the targets being consumed (since
+precompile headers are not typically usage requirements).  A notable exception
+to this is where an :ref:`interface library <Interface Libraries>` is created
+to define a commonly used set of precompile headers in one place and then other
+targets link to that interface library privately.  In this case, the interface
+library exists specifically to propagate the precompile headers to its
+consumers and the consumer is effectively still in control, since it decides
+whether to link to the interface library or not.
+
+The list of header files is used to generate a header file named
+``cmake_pch.h|xx`` which is used to generate the precompiled header file
+(``.pch``, ``.gch``, ``.pchi``) artifact.  The ``cmake_pch.h|xx`` header
+file will be force included (``-include`` for GCC, ``/FI`` for MSVC) to
+all source files, so sources do not need to have ``#include "pch.h"``.
+
+Header file names specified with angle brackets (e.g. ``<unordered_map>``) or
+explicit double quotes (escaped for the :manual:`cmake-language(7)`,
+e.g. ``[["other_header.h"]]``) will be treated as is, and include directories
+must be available for the compiler to find them.  Other header file names
+(e.g. ``project_header.h``) are interpreted as being relative to the current
+source directory (e.g. :variable:`CMAKE_CURRENT_SOURCE_DIR`) and will be
+included by absolute path.  For example:
+
+.. code-block:: cmake
+
+  target_precompile_headers(myTarget
+    PUBLIC
+      project_header.h
+    PRIVATE
+      [["other_header.h"]]
+      <unordered_map>
+  )
+
+Arguments to ``target_precompile_headers()`` may use "generator expressions"
+with the syntax ``$<...>``.
+See the :manual:`cmake-generator-expressions(7)` manual for available
+expressions.
+The :genex:`$<COMPILE_LANGUAGE:...>` generator expression is particularly
+useful for specifying a language-specific header to precompile for
+only one language (e.g. ``CXX`` and not ``C``).  In this case, header
+file names that are not explicitly in double quotes or angle brackets
+must be specified by absolute path.  Also, when specifying angle brackets
+inside a generator expression, be sure to encode the closing ``>`` as
+``$<ANGLE-R>``.  For example:
+
+.. code-block:: cmake
+
+  target_precompile_headers(mylib PRIVATE
+    "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/cxx_only.h>"
+    "$<$<COMPILE_LANGUAGE:C>:<stddef.h$<ANGLE-R>>"
+    "$<$<COMPILE_LANGUAGE:CXX>:<cstddef$<ANGLE-R>>"
+  )
+
+
+Reusing Precompile Headers
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The command also supports a second signature which can be used to specify that
+one target re-uses a precompiled header file artifact from another target
+instead of generating its own:
+
+.. code-block:: cmake
+
+  target_precompile_headers(<target> REUSE_FROM <other_target>)
+
+This form sets the :prop_tgt:`PRECOMPILE_HEADERS_REUSE_FROM` property to
+``<other_target>`` and adds a dependency such that ``<target>`` will depend
+on ``<other_target>``.  CMake will halt with an error if the
+:prop_tgt:`PRECOMPILE_HEADERS` property of ``<target>`` is already set when
+the ``REUSE_FROM`` form is used.
+
+.. note::
+
+  The ``REUSE_FROM`` form requires the same set of compiler options,
+  compiler flags and compiler definitions for both ``<target>`` and
+  ``<other_target>``.  Some compilers (e.g. GCC) may issue a warning if the
+  precompiled header file cannot be used (``-Winvalid-pch``).
+
+See Also
+^^^^^^^^
+
+To disable precompile headers for specific targets, see the
+:prop_tgt:`DISABLE_PRECOMPILE_HEADERS` target property.
+
+To prevent precompile headers from being used when compiling a specific
+source file, see the :prop_sf:`SKIP_PRECOMPILE_HEADERS` source file property.
diff --git a/share/cmake-3.22/Help/command/target_sources.rst b/share/cmake-3.22/Help/command/target_sources.rst
new file mode 100644
index 0000000..520614a
--- /dev/null
+++ b/share/cmake-3.22/Help/command/target_sources.rst
@@ -0,0 +1,48 @@
+target_sources
+--------------
+
+.. versionadded:: 3.1
+
+Add sources to a target.
+
+.. code-block:: cmake
+
+  target_sources(<target>
+    <INTERFACE|PUBLIC|PRIVATE> [items1...]
+    [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
+
+Specifies sources to use when building a target and/or its dependents.
+The named ``<target>`` must have been created by a command such as
+:command:`add_executable` or :command:`add_library` or
+:command:`add_custom_target` and must not be an
+:ref:`ALIAS target <Alias Targets>`.
+
+.. versionchanged:: 3.13
+  Relative source file paths are interpreted as being relative to the current
+  source directory (i.e. :variable:`CMAKE_CURRENT_SOURCE_DIR`).
+  See policy :policy:`CMP0076`.
+
+.. versionadded:: 3.20
+  ``<target>`` can be a custom target.
+
+The ``INTERFACE``, ``PUBLIC`` and ``PRIVATE`` keywords are required to
+specify the scope of the items following them.  ``PRIVATE`` and ``PUBLIC``
+items will populate the :prop_tgt:`SOURCES` property of
+``<target>``, which are used when building the target itself.
+``PUBLIC`` and ``INTERFACE`` items will populate the
+:prop_tgt:`INTERFACE_SOURCES` property of ``<target>``, which are used
+when building dependents.
+The following arguments specify sources.  Repeated calls for the same
+``<target>`` append items in the order called. The targets created by
+:command:`add_custom_target` can only have ``PRIVATE`` scope.
+
+.. versionadded:: 3.3
+  Allow exporting targets with :prop_tgt:`INTERFACE_SOURCES`.
+
+.. versionadded:: 3.11
+  Allow setting ``INTERFACE`` items on :ref:`IMPORTED targets <Imported Targets>`.
+
+Arguments to ``target_sources`` may use "generator expressions"
+with the syntax ``$<...>``. See the :manual:`cmake-generator-expressions(7)`
+manual for available expressions.  See the :manual:`cmake-buildsystem(7)`
+manual for more on defining buildsystem properties.
diff --git a/share/cmake-3.22/Help/command/try_compile.rst b/share/cmake-3.22/Help/command/try_compile.rst
new file mode 100644
index 0000000..06da910
--- /dev/null
+++ b/share/cmake-3.22/Help/command/try_compile.rst
@@ -0,0 +1,214 @@
+try_compile
+-----------
+
+.. only:: html
+
+   .. contents::
+
+Try building some code.
+
+Try Compiling Whole Projects
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. code-block:: cmake
+
+  try_compile(<resultVar> <bindir> <srcdir>
+              <projectName> [<targetName>] [CMAKE_FLAGS <flags>...]
+              [OUTPUT_VARIABLE <var>])
+
+Try building a project.  The success or failure of the ``try_compile``,
+i.e. ``TRUE`` or ``FALSE`` respectively, is returned in ``<resultVar>``.
+
+.. versionadded:: 3.14
+  The name of the ``<resultVar>`` is defined by the user.  Previously, it had
+  a fixed name ``RESULT_VAR``.
+
+In this form, ``<srcdir>`` should contain a complete CMake project with a
+``CMakeLists.txt`` file and all sources.  The ``<bindir>`` and ``<srcdir>``
+will not be deleted after this command is run.  Specify ``<targetName>`` to
+build a specific target instead of the ``all`` or ``ALL_BUILD`` target.  See
+below for the meaning of other options.
+
+Try Compiling Source Files
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. code-block:: cmake
+
+  try_compile(<resultVar> <bindir> <srcfile|SOURCES srcfile...>
+              [CMAKE_FLAGS <flags>...]
+              [COMPILE_DEFINITIONS <defs>...]
+              [LINK_OPTIONS <options>...]
+              [LINK_LIBRARIES <libs>...]
+              [OUTPUT_VARIABLE <var>]
+              [COPY_FILE <fileName> [COPY_FILE_ERROR <var>]]
+              [<LANG>_STANDARD <std>]
+              [<LANG>_STANDARD_REQUIRED <bool>]
+              [<LANG>_EXTENSIONS <bool>]
+              )
+
+Try building an executable or static library from one or more source files
+(which one is determined by the :variable:`CMAKE_TRY_COMPILE_TARGET_TYPE`
+variable).  The success or failure of the ``try_compile``, i.e. ``TRUE`` or
+``FALSE`` respectively, is returned in ``<resultVar>``.
+
+.. versionadded:: 3.14
+  The name of the ``<resultVar>`` is defined by the user.  Previously, it had
+  a fixed name ``RESULT_VAR``.
+
+In this form, one or more source files must be provided.  If
+:variable:`CMAKE_TRY_COMPILE_TARGET_TYPE` is unset or is set to ``EXECUTABLE``,
+the sources must include a definition for ``main`` and CMake will create a
+``CMakeLists.txt`` file to build the source(s) as an executable.
+If :variable:`CMAKE_TRY_COMPILE_TARGET_TYPE` is set to ``STATIC_LIBRARY``,
+a static library will be built instead and no definition for ``main`` is
+required.  For an executable, the generated ``CMakeLists.txt`` file would
+contain something like the following:
+
+.. code-block:: cmake
+
+  add_definitions(<expanded COMPILE_DEFINITIONS from caller>)
+  include_directories(${INCLUDE_DIRECTORIES})
+  link_directories(${LINK_DIRECTORIES})
+  add_executable(cmTryCompileExec <srcfile>...)
+  target_link_options(cmTryCompileExec PRIVATE <LINK_OPTIONS from caller>)
+  target_link_libraries(cmTryCompileExec ${LINK_LIBRARIES})
+
+The options are:
+
+``CMAKE_FLAGS <flags>...``
+  Specify flags of the form ``-DVAR:TYPE=VALUE`` to be passed to
+  the ``cmake`` command-line used to drive the test build.
+  The above example shows how values for variables
+  ``INCLUDE_DIRECTORIES``, ``LINK_DIRECTORIES``, and ``LINK_LIBRARIES``
+  are used.
+
+``COMPILE_DEFINITIONS <defs>...``
+  Specify ``-Ddefinition`` arguments to pass to :command:`add_definitions`
+  in the generated test project.
+
+``COPY_FILE <fileName>``
+  Copy the built executable or static library to the given ``<fileName>``.
+
+``COPY_FILE_ERROR <var>``
+  Use after ``COPY_FILE`` to capture into variable ``<var>`` any error
+  message encountered while trying to copy the file.
+
+``LINK_LIBRARIES <libs>...``
+  Specify libraries to be linked in the generated project.
+  The list of libraries may refer to system libraries and to
+  :ref:`Imported Targets <Imported Targets>` from the calling project.
+
+  If this option is specified, any ``-DLINK_LIBRARIES=...`` value
+  given to the ``CMAKE_FLAGS`` option will be ignored.
+
+``LINK_OPTIONS <options>...``
+  .. versionadded:: 3.14
+
+  Specify link step options to pass to :command:`target_link_options` or to
+  set the :prop_tgt:`STATIC_LIBRARY_OPTIONS` target property in the generated
+  project, depending on the :variable:`CMAKE_TRY_COMPILE_TARGET_TYPE` variable.
+
+``OUTPUT_VARIABLE <var>``
+  Store the output from the build process in the given variable.
+
+``<LANG>_STANDARD <std>``
+  .. versionadded:: 3.8
+
+  Specify the :prop_tgt:`C_STANDARD`, :prop_tgt:`CXX_STANDARD`,
+  :prop_tgt:`OBJC_STANDARD`, :prop_tgt:`OBJCXX_STANDARD`,
+  or :prop_tgt:`CUDA_STANDARD` target property of the generated project.
+
+``<LANG>_STANDARD_REQUIRED <bool>``
+  .. versionadded:: 3.8
+
+  Specify the :prop_tgt:`C_STANDARD_REQUIRED`,
+  :prop_tgt:`CXX_STANDARD_REQUIRED`, :prop_tgt:`OBJC_STANDARD_REQUIRED`,
+  :prop_tgt:`OBJCXX_STANDARD_REQUIRED`,or :prop_tgt:`CUDA_STANDARD_REQUIRED`
+  target property of the generated project.
+
+``<LANG>_EXTENSIONS <bool>``
+  .. versionadded:: 3.8
+
+  Specify the :prop_tgt:`C_EXTENSIONS`, :prop_tgt:`CXX_EXTENSIONS`,
+  :prop_tgt:`OBJC_EXTENSIONS`, :prop_tgt:`OBJCXX_EXTENSIONS`,
+  or :prop_tgt:`CUDA_EXTENSIONS` target property of the generated project.
+
+In this version all files in ``<bindir>/CMakeFiles/CMakeTmp`` will be
+cleaned automatically.  For debugging, ``--debug-trycompile`` can be
+passed to ``cmake`` to avoid this clean.  However, multiple sequential
+``try_compile`` operations reuse this single output directory.  If you use
+``--debug-trycompile``, you can only debug one ``try_compile`` call at a time.
+The recommended procedure is to protect all ``try_compile`` calls in your
+project by ``if(NOT DEFINED <resultVar>)`` logic, configure with cmake
+all the way through once, then delete the cache entry associated with
+the try_compile call of interest, and then re-run cmake again with
+``--debug-trycompile``.
+
+Other Behavior Settings
+^^^^^^^^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.4
+  If set, the following variables are passed in to the generated
+  try_compile CMakeLists.txt to initialize compile target properties with
+  default values:
+
+  * :variable:`CMAKE_CUDA_RUNTIME_LIBRARY`
+  * :variable:`CMAKE_ENABLE_EXPORTS`
+  * :variable:`CMAKE_LINK_SEARCH_START_STATIC`
+  * :variable:`CMAKE_LINK_SEARCH_END_STATIC`
+  * :variable:`CMAKE_MSVC_RUNTIME_LIBRARY`
+  * :variable:`CMAKE_POSITION_INDEPENDENT_CODE`
+
+  If :policy:`CMP0056` is set to ``NEW``, then
+  :variable:`CMAKE_EXE_LINKER_FLAGS` is passed in as well.
+
+.. versionchanged:: 3.14
+  If :policy:`CMP0083` is set to ``NEW``, then in order to obtain correct
+  behavior at link time, the ``check_pie_supported()`` command from the
+  :module:`CheckPIESupported` module must be called before using the
+  :command:`try_compile` command.
+
+The current settings of :policy:`CMP0065` and :policy:`CMP0083` are propagated
+through to the generated test project.
+
+Set the :variable:`CMAKE_TRY_COMPILE_CONFIGURATION` variable to choose
+a build configuration.
+
+.. versionadded:: 3.6
+  Set the :variable:`CMAKE_TRY_COMPILE_TARGET_TYPE` variable to specify
+  the type of target used for the source file signature.
+
+.. versionadded:: 3.6
+  Set the :variable:`CMAKE_TRY_COMPILE_PLATFORM_VARIABLES` variable to specify
+  variables that must be propagated into the test project.  This variable is
+  meant for use only in toolchain files and is only honored by the
+  ``try_compile()`` command for the source files form, not when given a whole
+  project.
+
+.. versionchanged:: 3.8
+  If :policy:`CMP0067` is set to ``NEW``, or any of the ``<LANG>_STANDARD``,
+  ``<LANG>_STANDARD_REQUIRED``, or ``<LANG>_EXTENSIONS`` options are used,
+  then the language standard variables are honored:
+
+  * :variable:`CMAKE_C_STANDARD`
+  * :variable:`CMAKE_C_STANDARD_REQUIRED`
+  * :variable:`CMAKE_C_EXTENSIONS`
+  * :variable:`CMAKE_CXX_STANDARD`
+  * :variable:`CMAKE_CXX_STANDARD_REQUIRED`
+  * :variable:`CMAKE_CXX_EXTENSIONS`
+  * :variable:`CMAKE_OBJC_STANDARD`
+  * :variable:`CMAKE_OBJC_STANDARD_REQUIRED`
+  * :variable:`CMAKE_OBJC_EXTENSIONS`
+  * :variable:`CMAKE_OBJCXX_STANDARD`
+  * :variable:`CMAKE_OBJCXX_STANDARD_REQUIRED`
+  * :variable:`CMAKE_OBJCXX_EXTENSIONS`
+  * :variable:`CMAKE_CUDA_STANDARD`
+  * :variable:`CMAKE_CUDA_STANDARD_REQUIRED`
+  * :variable:`CMAKE_CUDA_EXTENSIONS`
+
+  Their values are used to set the corresponding target properties in
+  the generated project (unless overridden by an explicit option).
+
+.. versionchanged:: 3.14
+  For the :generator:`Green Hills MULTI` generator the GHS toolset and target
+  system customization cache variables are also propagated into the test project.
diff --git a/share/cmake-3.22/Help/command/try_run.rst b/share/cmake-3.22/Help/command/try_run.rst
new file mode 100644
index 0000000..404de98
--- /dev/null
+++ b/share/cmake-3.22/Help/command/try_run.rst
@@ -0,0 +1,123 @@
+try_run
+-------
+
+.. only:: html
+
+   .. contents::
+
+Try compiling and then running some code.
+
+Try Compiling and Running Source Files
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. code-block:: cmake
+
+  try_run(<runResultVar> <compileResultVar>
+          <bindir> <srcfile> [CMAKE_FLAGS <flags>...]
+          [COMPILE_DEFINITIONS <defs>...]
+          [LINK_OPTIONS <options>...]
+          [LINK_LIBRARIES <libs>...]
+          [COMPILE_OUTPUT_VARIABLE <var>]
+          [RUN_OUTPUT_VARIABLE <var>]
+          [OUTPUT_VARIABLE <var>]
+          [WORKING_DIRECTORY <var>]
+          [ARGS <args>...])
+
+Try compiling a ``<srcfile>``.  Returns ``TRUE`` or ``FALSE`` for success
+or failure in ``<compileResultVar>``.  If the compile succeeded, runs the
+executable and returns its exit code in ``<runResultVar>``.  If the
+executable was built, but failed to run, then ``<runResultVar>`` will be
+set to ``FAILED_TO_RUN``.  See the :command:`try_compile` command for
+information on how the test project is constructed to build the source file.
+
+.. versionadded:: 3.14
+  The names of the result variables ``<runResultVar>`` and
+  ``<compileResultVar>`` are defined by the user.  Previously, they had
+  fixed names ``RUN_RESULT_VAR`` and ``COMPILE_RESULT_VAR``.
+
+The options are:
+
+``CMAKE_FLAGS <flags>...``
+  Specify flags of the form ``-DVAR:TYPE=VALUE`` to be passed to
+  the ``cmake`` command-line used to drive the test build.
+  The example in :command:`try_compile` shows how values for variables
+  ``INCLUDE_DIRECTORIES``, ``LINK_DIRECTORIES``, and ``LINK_LIBRARIES``
+  are used.
+
+``COMPILE_DEFINITIONS <defs>...``
+  Specify ``-Ddefinition`` arguments to pass to :command:`add_definitions`
+  in the generated test project.
+
+``COMPILE_OUTPUT_VARIABLE <var>``
+  Report the compile step build output in a given variable.
+
+``LINK_LIBRARIES <libs>...``
+  .. versionadded:: 3.2
+
+  Specify libraries to be linked in the generated project.
+  The list of libraries may refer to system libraries and to
+  :ref:`Imported Targets <Imported Targets>` from the calling project.
+
+  If this option is specified, any ``-DLINK_LIBRARIES=...`` value
+  given to the ``CMAKE_FLAGS`` option will be ignored.
+
+``LINK_OPTIONS <options>...``
+  .. versionadded:: 3.14
+
+  Specify link step options to pass to :command:`target_link_options` in the
+  generated project.
+
+``OUTPUT_VARIABLE <var>``
+  Report the compile build output and the output from running the executable
+  in the given variable.  This option exists for legacy reasons.  Prefer
+  ``COMPILE_OUTPUT_VARIABLE`` and ``RUN_OUTPUT_VARIABLE`` instead.
+
+``RUN_OUTPUT_VARIABLE <var>``
+  Report the output from running the executable in a given variable.
+
+``WORKING_DIRECTORY <var>``
+  .. versionadded:: 3.20
+
+  Run the executable in the given directory. If no ``WORKING_DIRECTORY`` is
+  specified, the executable will run in ``<bindir>``.
+
+Other Behavior Settings
+^^^^^^^^^^^^^^^^^^^^^^^
+
+Set the :variable:`CMAKE_TRY_COMPILE_CONFIGURATION` variable to choose
+a build configuration.
+
+Behavior when Cross Compiling
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.3
+  Use ``CMAKE_CROSSCOMPILING_EMULATOR`` when running cross-compiled
+  binaries.
+
+When cross compiling, the executable compiled in the first step
+usually cannot be run on the build host.  The ``try_run`` command checks
+the :variable:`CMAKE_CROSSCOMPILING` variable to detect whether CMake is in
+cross-compiling mode.  If that is the case, it will still try to compile
+the executable, but it will not try to run the executable unless the
+:variable:`CMAKE_CROSSCOMPILING_EMULATOR` variable is set.  Instead it
+will create cache variables which must be filled by the user or by
+presetting them in some CMake script file to the values the executable
+would have produced if it had been run on its actual target platform.
+These cache entries are:
+
+``<runResultVar>``
+  Exit code if the executable were to be run on the target platform.
+
+``<runResultVar>__TRYRUN_OUTPUT``
+  Output from stdout and stderr if the executable were to be run on
+  the target platform.  This is created only if the
+  ``RUN_OUTPUT_VARIABLE`` or ``OUTPUT_VARIABLE`` option was used.
+
+In order to make cross compiling your project easier, use ``try_run``
+only if really required.  If you use ``try_run``, use the
+``RUN_OUTPUT_VARIABLE`` or ``OUTPUT_VARIABLE`` options only if really
+required.  Using them will require that when cross-compiling, the cache
+variables will have to be set manually to the output of the executable.
+You can also "guard" the calls to ``try_run`` with an :command:`if`
+block checking the :variable:`CMAKE_CROSSCOMPILING` variable and
+provide an easy-to-preset alternative for this case.
diff --git a/share/cmake-3.18/Help/command/unset.rst b/share/cmake-3.22/Help/command/unset.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/unset.rst
rename to share/cmake-3.22/Help/command/unset.rst
diff --git a/share/cmake-3.18/Help/command/use_mangled_mesa.rst b/share/cmake-3.22/Help/command/use_mangled_mesa.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/use_mangled_mesa.rst
rename to share/cmake-3.22/Help/command/use_mangled_mesa.rst
diff --git a/share/cmake-3.18/Help/command/utility_source.rst b/share/cmake-3.22/Help/command/utility_source.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/utility_source.rst
rename to share/cmake-3.22/Help/command/utility_source.rst
diff --git a/share/cmake-3.18/Help/command/variable_requires.rst b/share/cmake-3.22/Help/command/variable_requires.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/variable_requires.rst
rename to share/cmake-3.22/Help/command/variable_requires.rst
diff --git a/share/cmake-3.22/Help/command/variable_watch.rst b/share/cmake-3.22/Help/command/variable_watch.rst
new file mode 100644
index 0000000..8293f5a
--- /dev/null
+++ b/share/cmake-3.22/Help/command/variable_watch.rst
@@ -0,0 +1,48 @@
+variable_watch
+--------------
+
+Watch the CMake variable for change.
+
+.. code-block:: cmake
+
+  variable_watch(<variable> [<command>])
+
+If the specified ``<variable>`` changes and no ``<command>`` is given,
+a message will be printed to inform about the change.
+
+If ``<command>`` is given, this command will be executed instead.
+The command will receive the following arguments:
+``COMMAND(<variable> <access> <value> <current_list_file> <stack>)``
+
+``<variable>``
+ Name of the variable being accessed.
+
+``<access>``
+ One of ``READ_ACCESS``, ``UNKNOWN_READ_ACCESS``, ``MODIFIED_ACCESS``,
+ ``UNKNOWN_MODIFIED_ACCESS``, or ``REMOVED_ACCESS``.  The ``UNKNOWN_``
+ values are only used when the variable has never been set.  Once set,
+ they are never used again during the same CMake run, even if the
+ variable is later unset.
+
+``<value>``
+ The value of the variable.  On a modification, this is the new
+ (modified) value of the variable.  On removal, the value is empty.
+
+``<current_list_file>``
+ Full path to the file doing the access.
+
+``<stack>``
+ List of absolute paths of all files currently on the stack of file
+ inclusion, with the bottom-most file first and the currently
+ processed file (that is, ``current_list_file``) last.
+
+Note that for some accesses such as :command:`list(APPEND)`, the watcher
+is executed twice, first with a read access and then with a write one.
+Also note that an :command:`if(DEFINED)` query on the variable does not
+register as an access and the watcher is not executed.
+
+Only non-cache variables can be watched using this command.  Access to
+cache variables is never watched.  However, the existence of a cache
+variable ``var`` causes accesses to the non-cache variable ``var`` to
+not use the ``UNKNOWN_`` prefix, even if a non-cache variable ``var``
+has never existed.
diff --git a/share/cmake-3.18/Help/command/while.rst b/share/cmake-3.22/Help/command/while.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/while.rst
rename to share/cmake-3.22/Help/command/while.rst
diff --git a/share/cmake-3.18/Help/command/write_file.rst b/share/cmake-3.22/Help/command/write_file.rst
similarity index 100%
rename from share/cmake-3.18/Help/command/write_file.rst
rename to share/cmake-3.22/Help/command/write_file.rst
diff --git a/share/cmake-3.22/Help/cpack_gen/archive.rst b/share/cmake-3.22/Help/cpack_gen/archive.rst
new file mode 100644
index 0000000..47e8e13
--- /dev/null
+++ b/share/cmake-3.22/Help/cpack_gen/archive.rst
@@ -0,0 +1,89 @@
+CPack Archive Generator
+-----------------------
+
+CPack generator for packaging files into an archive, which can have
+any of the following formats:
+
+  - 7Z - 7zip - (.7z)
+  - TBZ2 (.tar.bz2)
+  - TGZ (.tar.gz)
+  - TXZ (.tar.xz)
+  - TZ (.tar.Z)
+  - TZST (.tar.zst)
+  - ZIP (.zip)
+
+.. versionadded:: 3.1
+  ``7Z`` and ``TXZ`` formats support.
+
+.. versionadded:: 3.16
+  ``TZST`` format support.
+
+When this generator is called from ``CPackSourceConfig.cmake`` (or through
+the ``package_source`` target), then the generated archive will contain all
+files in the project directory, except those specified in
+:variable:`CPACK_SOURCE_IGNORE_FILES`.  The following is one example of
+packaging all source files of a project:
+
+.. code-block:: cmake
+
+  set(CPACK_SOURCE_GENERATOR "TGZ")
+  set(CPACK_SOURCE_IGNORE_FILES
+    \\.git/
+    build/
+    ".*~$"
+  )
+  set(CPACK_VERBATIM_VARIABLES YES)
+  include(CPack)
+
+When this generator is called from ``CPackConfig.cmake`` (or through the
+``package`` target), then the generated archive will contain all files
+that have been installed via CMake's :command:`install` command (and the
+deprecated commands :command:`install_files`, :command:`install_programs`,
+and :command:`install_targets`).
+
+Variables specific to CPack Archive generator
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. variable:: CPACK_ARCHIVE_FILE_NAME
+              CPACK_ARCHIVE_<component>_FILE_NAME
+
+  Package file name without extension. The extension is determined from the
+  archive format (see list above) and automatically appended to the file name.
+  The default is ``<CPACK_PACKAGE_FILE_NAME>[-<component>]``, with spaces
+  replaced by '-'.
+
+  .. versionadded:: 3.9
+    Per-component ``CPACK_ARCHIVE_<component>_FILE_NAME`` variables.
+
+.. variable:: CPACK_ARCHIVE_COMPONENT_INSTALL
+
+  Enable component packaging. If enabled (ON), then the archive generator
+  creates  multiple packages. The default is OFF, which means that a single
+  package containing files of all components is generated.
+
+Variables used by CPack Archive generator
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+These variables are used by the Archive generator, but are also available to
+CPack generators which are essentially archives at their core. These include:
+
+  - :cpack_gen:`CPack Cygwin Generator`
+  - :cpack_gen:`CPack FreeBSD Generator`
+
+.. variable:: CPACK_ARCHIVE_THREADS
+
+  .. versionadded:: 3.18
+
+  The number of threads to use when performing the compression. If set to
+  ``0``, the number of available cores on the machine will be used instead.
+  The default is ``1`` which limits compression to a single thread. Note that
+  not all compression modes support threading in all environments. Currently,
+  only the XZ compression may support it.
+
+  See also the :variable:`CPACK_THREADS` variable.
+
+  .. versionadded:: 3.21
+
+    Official CMake binaries available on ``cmake.org`` now ship
+    with a ``liblzma`` that supports parallel compression.
+    Older versions did not.
diff --git a/share/cmake-3.22/Help/cpack_gen/bundle.rst b/share/cmake-3.22/Help/cpack_gen/bundle.rst
new file mode 100644
index 0000000..5e335c0
--- /dev/null
+++ b/share/cmake-3.22/Help/cpack_gen/bundle.rst
@@ -0,0 +1,76 @@
+CPack Bundle Generator
+----------------------
+
+CPack Bundle generator (macOS) specific options
+
+Variables specific to CPack Bundle generator
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Installers built on macOS using the Bundle generator use the
+aforementioned DragNDrop (``CPACK_DMG_xxx``) variables, plus the following
+Bundle-specific parameters (``CPACK_BUNDLE_xxx``).
+
+.. variable:: CPACK_BUNDLE_NAME
+
+ The name of the generated bundle. This appears in the macOS Finder as the
+ bundle name. Required.
+
+.. variable:: CPACK_BUNDLE_PLIST
+
+ Path to an macOS Property List (``.plist``) file that will be used
+ for the generated bundle. This
+ assumes that the caller has generated or specified their own ``Info.plist``
+ file. Required.
+
+.. variable:: CPACK_BUNDLE_ICON
+
+ Path to an macOS icon file that will be used as the icon for the generated
+ bundle. This is the icon that appears in the macOS Finder for the bundle, and
+ in the macOS dock when the bundle is opened. Required.
+
+.. variable:: CPACK_BUNDLE_STARTUP_COMMAND
+
+ Path to a startup script. This is a path to an executable or script that
+ will be run whenever an end-user double-clicks the generated bundle in the
+ macOS Finder. Optional.
+
+.. variable:: CPACK_BUNDLE_APPLE_CERT_APP
+
+ .. versionadded:: 3.2
+
+ The name of your Apple supplied code signing certificate for the application.
+ The name usually takes the form ``Developer ID Application: [Name]`` or
+ ``3rd Party Mac Developer Application: [Name]``. If this variable is not set
+ the application will not be signed.
+
+.. variable:: CPACK_BUNDLE_APPLE_ENTITLEMENTS
+
+ .. versionadded:: 3.2
+
+ The name of the Property List (``.plist``) file that contains your Apple
+ entitlements for sandboxing your application. This file is required
+ for submission to the macOS App Store.
+
+.. variable:: CPACK_BUNDLE_APPLE_CODESIGN_FILES
+
+ .. versionadded:: 3.2
+
+ A list of additional files that you wish to be signed. You do not need to
+ list the main application folder, or the main executable. You should
+ list any frameworks and plugins that are included in your app bundle.
+
+.. variable:: CPACK_BUNDLE_APPLE_CODESIGN_PARAMETER
+
+ .. versionadded:: 3.3
+
+ Additional parameter that will passed to ``codesign``.
+ Default value: ``--deep -f``
+
+.. variable:: CPACK_COMMAND_CODESIGN
+
+ .. versionadded:: 3.2
+
+ Path to the ``codesign(1)`` command used to sign applications with an
+ Apple cert. This variable can be used to override the automatically
+ detected command (or specify its location if the auto-detection fails
+ to find it).
diff --git a/share/cmake-3.22/Help/cpack_gen/cygwin.rst b/share/cmake-3.22/Help/cpack_gen/cygwin.rst
new file mode 100644
index 0000000..c537a79
--- /dev/null
+++ b/share/cmake-3.22/Help/cpack_gen/cygwin.rst
@@ -0,0 +1,30 @@
+CPack Cygwin Generator
+----------------------
+
+Cygwin CPack generator (Cygwin).
+
+Variables affecting the CPack Cygwin generator
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+- .. versionadded:: 3.18
+    :variable:`CPACK_ARCHIVE_THREADS`
+
+
+Variables specific to CPack Cygwin generator
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The
+following variable is specific to installers build on and/or for
+Cygwin:
+
+.. variable:: CPACK_CYGWIN_PATCH_NUMBER
+
+ The Cygwin patch number.  FIXME: This documentation is incomplete.
+
+.. variable:: CPACK_CYGWIN_PATCH_FILE
+
+ The Cygwin patch file.  FIXME: This documentation is incomplete.
+
+.. variable:: CPACK_CYGWIN_BUILD_SCRIPT
+
+ The Cygwin build script.  FIXME: This documentation is incomplete.
diff --git a/share/cmake-3.22/Help/cpack_gen/deb.rst b/share/cmake-3.22/Help/cpack_gen/deb.rst
new file mode 100644
index 0000000..f96ca32
--- /dev/null
+++ b/share/cmake-3.22/Help/cpack_gen/deb.rst
@@ -0,0 +1,700 @@
+CPack DEB Generator
+-------------------
+
+The built in (binary) CPack DEB generator (Unix only)
+
+Variables specific to CPack Debian (DEB) generator
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The CPack DEB generator may be used to create DEB package using :module:`CPack`.
+The CPack DEB generator is a :module:`CPack` generator thus it uses the
+``CPACK_XXX`` variables used by :module:`CPack`.
+
+The CPack DEB generator should work on any Linux host but it will produce
+better deb package when Debian specific tools ``dpkg-xxx`` are usable on
+the build system.
+
+The CPack DEB generator has specific features which are controlled by the
+specifics ``CPACK_DEBIAN_XXX`` variables.
+
+``CPACK_DEBIAN_<COMPONENT>_XXXX`` variables may be used in order to have
+**component** specific values.  Note however that ``<COMPONENT>`` refers to
+the **grouping name** written in upper case. It may be either a component name
+or a component GROUP name.
+
+Here are some CPack DEB generator wiki resources that are here for historic
+reasons and are no longer maintained but may still prove useful:
+
+ - https://gitlab.kitware.com/cmake/community/-/wikis/doc/cpack/Configuration
+ - https://gitlab.kitware.com/cmake/community/-/wikis/doc/cpack/PackageGenerators#deb-unix-only
+
+List of CPack DEB generator specific variables:
+
+.. variable:: CPACK_DEB_COMPONENT_INSTALL
+
+ Enable component packaging for CPackDEB
+
+ * Mandatory : NO
+ * Default   : OFF
+
+ If enabled (ON) multiple packages are generated. By default a single package
+ containing files of all components is generated.
+
+.. variable:: CPACK_DEBIAN_PACKAGE_NAME
+              CPACK_DEBIAN_<COMPONENT>_PACKAGE_NAME
+
+ Set Package control field (variable is automatically transformed to lower
+ case).
+
+ * Mandatory : YES
+ * Default   :
+
+   - :variable:`CPACK_PACKAGE_NAME` for non-component based
+     installations
+   - :variable:`CPACK_DEBIAN_PACKAGE_NAME` suffixed with -<COMPONENT>
+     for component-based installations.
+
+ .. versionadded:: 3.5
+  Per-component ``CPACK_DEBIAN_<COMPONENT>_PACKAGE_NAME`` variables.
+
+ See https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Source
+
+.. variable:: CPACK_DEBIAN_FILE_NAME
+              CPACK_DEBIAN_<COMPONENT>_FILE_NAME
+
+ .. versionadded:: 3.6
+
+ Package file name.
+
+ * Mandatory : YES
+ * Default   : ``<CPACK_PACKAGE_FILE_NAME>[-<component>].deb``
+
+ This may be set to ``DEB-DEFAULT`` to allow the CPack DEB generator to generate
+ package file name by itself in deb format::
+
+   <PackageName>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb
+
+ Alternatively provided package file name must end
+ with either ``.deb`` or ``.ipk`` suffix.
+
+ .. versionadded:: 3.10
+  ``.ipk`` suffix used by OPKG packaging system.
+
+ .. note::
+
+   Preferred setting of this variable is ``DEB-DEFAULT`` but for backward
+   compatibility with the CPack DEB generator in CMake prior to version 3.6 this
+   feature is disabled by default.
+
+ .. note::
+
+   By using non default filenames duplicate names may occur. Duplicate files
+   get overwritten and it is up to the packager to set the variables in a
+   manner that will prevent such errors.
+
+.. variable:: CPACK_DEBIAN_PACKAGE_EPOCH
+
+ .. versionadded:: 3.10
+
+ The Debian package epoch
+
+ * Mandatory : No
+ * Default   : -
+
+ Optional number that should be incremented when changing versioning schemas
+ or fixing mistakes in the version numbers of older packages.
+
+.. variable:: CPACK_DEBIAN_PACKAGE_VERSION
+
+ The Debian package version
+
+ * Mandatory : YES
+ * Default   : :variable:`CPACK_PACKAGE_VERSION`
+
+ This variable may contain only alphanumerics (A-Za-z0-9) and the characters
+ . + - ~ (full stop, plus, hyphen, tilde) and should start with a digit. If
+ :variable:`CPACK_DEBIAN_PACKAGE_RELEASE` is not set then hyphens are not
+ allowed.
+
+ .. note::
+
+   For backward compatibility with CMake 3.9 and lower a failed test of this
+   variable's content is not a hard error when both
+   :variable:`CPACK_DEBIAN_PACKAGE_RELEASE` and
+   :variable:`CPACK_DEBIAN_PACKAGE_EPOCH` variables are not set. An author
+   warning is reported instead.
+
+.. variable:: CPACK_DEBIAN_PACKAGE_RELEASE
+
+ .. versionadded:: 3.6
+
+ The Debian package release - Debian revision number.
+
+ * Mandatory : No
+ * Default   : -
+
+ This is the numbering of the DEB package itself, i.e. the version of the
+ packaging and not the version of the content (see
+ :variable:`CPACK_DEBIAN_PACKAGE_VERSION`). One may change the default value
+ if the previous packaging was buggy and/or you want to put here a fancy Linux
+ distro specific numbering.
+
+.. variable:: CPACK_DEBIAN_PACKAGE_ARCHITECTURE
+              CPACK_DEBIAN_<COMPONENT>_PACKAGE_ARCHITECTURE
+
+ The Debian package architecture
+
+ * Mandatory : YES
+ * Default   : Output of ``dpkg --print-architecture`` (or ``i386``
+   if ``dpkg`` is not found)
+
+ .. versionadded:: 3.6
+  Per-component ``CPACK_DEBIAN_<COMPONENT>_PACKAGE_ARCHITECTURE`` variables.
+
+.. variable:: CPACK_DEBIAN_PACKAGE_DEPENDS
+              CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS
+
+ Sets the Debian dependencies of this package.
+
+ * Mandatory : NO
+ * Default   :
+
+   - An empty string for non-component based installations
+   - :variable:`CPACK_DEBIAN_PACKAGE_DEPENDS` for component-based
+     installations.
+
+
+ .. versionadded:: 3.3
+  Per-component ``CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS`` variables.
+
+ .. note::
+
+   If :variable:`CPACK_DEBIAN_PACKAGE_SHLIBDEPS` or
+   more specifically :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_SHLIBDEPS`
+   is set for this component, the discovered dependencies will be appended
+   to :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS` instead of
+   :variable:`CPACK_DEBIAN_PACKAGE_DEPENDS`. If
+   :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS` is an empty string,
+   only the automatically discovered dependencies will be set for this
+   component.
+
+ Example::
+
+   set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.3.1-6), libc6 (< 2.4)")
+
+.. variable:: CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS
+
+ .. versionadded:: 3.6
+
+ Sets inter-component dependencies if listed with
+ :variable:`CPACK_COMPONENT_<compName>_DEPENDS` variables.
+
+ * Mandatory : NO
+ * Default   : -
+
+.. variable:: CPACK_DEBIAN_PACKAGE_MAINTAINER
+
+ The Debian package maintainer
+
+ * Mandatory : YES
+ * Default   : ``CPACK_PACKAGE_CONTACT``
+
+.. variable:: CPACK_DEBIAN_PACKAGE_DESCRIPTION
+              CPACK_DEBIAN_<COMPONENT>_DESCRIPTION
+
+ The Debian package description
+
+ * Mandatory : YES
+ * Default   :
+
+   - :variable:`CPACK_DEBIAN_<COMPONENT>_DESCRIPTION` (component
+     based installers only) if set, or :variable:`CPACK_DEBIAN_PACKAGE_DESCRIPTION` if set, or
+   - :variable:`CPACK_COMPONENT_<compName>_DESCRIPTION` (component
+     based installers only) if set, or :variable:`CPACK_PACKAGE_DESCRIPTION` if set, or
+   - content of the file specified in :variable:`CPACK_PACKAGE_DESCRIPTION_FILE` if set
+
+ If after that description is not set, :variable:`CPACK_PACKAGE_DESCRIPTION_SUMMARY` going to be
+ used if set. Otherwise, :variable:`CPACK_PACKAGE_DESCRIPTION_SUMMARY` will be added as the first
+ line of description as defined in `Debian Policy Manual`_.
+
+ .. versionadded:: 3.3
+  Per-component ``CPACK_COMPONENT_<compName>_DESCRIPTION`` variables.
+
+ .. versionadded:: 3.16
+  Per-component ``CPACK_DEBIAN_<COMPONENT>_DESCRIPTION`` variables.
+
+ .. versionadded:: 3.16
+  The ``CPACK_PACKAGE_DESCRIPTION_FILE`` variable.
+
+.. _Debian Policy Manual: https://www.debian.org/doc/debian-policy/ch-controlfields.html#description
+
+.. variable:: CPACK_DEBIAN_PACKAGE_SECTION
+              CPACK_DEBIAN_<COMPONENT>_PACKAGE_SECTION
+
+ Set Section control field e.g. admin, devel, doc, ...
+
+ * Mandatory : YES
+ * Default   : "devel"
+
+ .. versionadded:: 3.5
+  Per-component ``CPACK_DEBIAN_<COMPONENT>_PACKAGE_SECTION`` variables.
+
+ See https://www.debian.org/doc/debian-policy/ch-archive.html#s-subsections
+
+.. variable:: CPACK_DEBIAN_ARCHIVE_TYPE
+
+ .. versionadded:: 3.7
+
+ .. deprecated:: 3.14
+
+ The archive format used for creating the Debian package.
+
+ * Mandatory : YES
+ * Default   : "gnutar"
+
+ Possible value is:
+
+ - gnutar
+
+ .. note::
+
+   This variable previously defaulted to the ``paxr`` value, but ``dpkg``
+   has never supported that tar format. For backwards compatibility the
+   ``paxr`` value will be mapped to ``gnutar`` and a deprecation message
+   will be emitted.
+
+.. variable:: CPACK_DEBIAN_COMPRESSION_TYPE
+
+ .. versionadded:: 3.1
+
+ The compression used for creating the Debian package.
+
+ * Mandatory : YES
+ * Default   : "gzip"
+
+ Possible values are:
+
+  ``lzma``
+    Lempel–Ziv–Markov chain algorithm
+
+  ``xz``
+    XZ Utils compression
+
+  ``bzip2``
+    bzip2 Burrows–Wheeler algorithm
+
+  ``gzip``
+    GNU Gzip compression
+
+  ``zstd``
+    .. versionadded:: 3.22
+
+    Zstandard compression
+
+
+.. variable:: CPACK_DEBIAN_PACKAGE_PRIORITY
+              CPACK_DEBIAN_<COMPONENT>_PACKAGE_PRIORITY
+
+ Set Priority control field e.g. required, important, standard, optional,
+ extra
+
+ * Mandatory : YES
+ * Default   : "optional"
+
+ .. versionadded:: 3.5
+  Per-component ``CPACK_DEBIAN_<COMPONENT>_PACKAGE_PRIORITY`` variables.
+
+ See https://www.debian.org/doc/debian-policy/ch-archive.html#s-priorities
+
+.. variable:: CPACK_DEBIAN_PACKAGE_HOMEPAGE
+
+ The URL of the web site for this package, preferably (when applicable) the
+ site from which the original source can be obtained and any additional
+ upstream documentation or information may be found.
+
+ * Mandatory : NO
+ * Default   : :variable:`CMAKE_PROJECT_HOMEPAGE_URL`
+
+ .. versionadded:: 3.12
+  The ``CMAKE_PROJECT_HOMEPAGE_URL`` variable.
+
+ .. note::
+
+   The content of this field is a simple URL without any surrounding
+   characters such as <>.
+
+.. variable:: CPACK_DEBIAN_PACKAGE_SHLIBDEPS
+              CPACK_DEBIAN_<COMPONENT>_PACKAGE_SHLIBDEPS
+
+ May be set to ON in order to use ``dpkg-shlibdeps`` to generate
+ better package dependency list.
+
+ * Mandatory : NO
+ * Default   :
+
+   - :variable:`CPACK_DEBIAN_PACKAGE_SHLIBDEPS` if set or
+   - OFF
+
+ .. note::
+
+   You may need set :variable:`CMAKE_INSTALL_RPATH` to an appropriate value
+   if you use this feature, because if you don't ``dpkg-shlibdeps``
+   may fail to find your own shared libs.
+   See https://gitlab.kitware.com/cmake/community/-/wikis/doc/cmake/RPATH-handling
+
+ .. note::
+
+   You can also set :variable:`CPACK_DEBIAN_PACKAGE_SHLIBDEPS_PRIVATE_DIRS`
+   to an appropriate value if you use this feature, in order to please
+   ``dpkg-shlibdeps``. However, you should only do this for private
+   shared libraries that could not get resolved otherwise.
+
+ .. versionadded:: 3.3
+  Per-component ``CPACK_DEBIAN_<COMPONENT>_PACKAGE_SHLIBDEPS`` variables.
+
+ .. versionadded:: 3.6
+  Correct handling of ``$ORIGIN`` in :variable:`CMAKE_INSTALL_RPATH`.
+
+.. variable:: CPACK_DEBIAN_PACKAGE_SHLIBDEPS_PRIVATE_DIRS
+
+ .. versionadded:: 3.20
+
+ May be set to a list of directories that will be given to ``dpkg-shlibdeps``
+ via its ``-l`` option. These will be searched by ``dpkg-shlibdeps`` in order
+ to find private shared library dependencies.
+
+ * Mandatory : NO
+ * Default   :
+
+ .. note::
+
+   You should prefer to set :variable:`CMAKE_INSTALL_RPATH` to an appropriate
+   value if you use ``dpkg-shlibdeps``. The current option is really only
+   needed for private shared library dependencies.
+
+.. variable:: CPACK_DEBIAN_PACKAGE_DEBUG
+
+ May be set when invoking cpack in order to trace debug information
+ during the CPack DEB generator run.
+
+ * Mandatory : NO
+ * Default   : -
+
+.. variable:: CPACK_DEBIAN_PACKAGE_PREDEPENDS
+              CPACK_DEBIAN_<COMPONENT>_PACKAGE_PREDEPENDS
+
+ Sets the `Pre-Depends` field of the Debian package.
+ Like :variable:`Depends <CPACK_DEBIAN_PACKAGE_DEPENDS>`, except that it
+ also forces ``dpkg`` to complete installation of the packages named
+ before even starting the installation of the package which declares the
+ pre-dependency.
+
+ * Mandatory : NO
+ * Default   :
+
+   - An empty string for non-component based installations
+   - :variable:`CPACK_DEBIAN_PACKAGE_PREDEPENDS` for component-based
+     installations.
+
+ .. versionadded:: 3.4
+  Per-component ``CPACK_DEBIAN_<COMPONENT>_PACKAGE_PREDEPENDS`` variables.
+
+ See http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps
+
+.. variable:: CPACK_DEBIAN_PACKAGE_ENHANCES
+              CPACK_DEBIAN_<COMPONENT>_PACKAGE_ENHANCES
+
+ Sets the `Enhances` field of the Debian package.
+ Similar to :variable:`Suggests <CPACK_DEBIAN_PACKAGE_SUGGESTS>` but works
+ in the opposite direction: declares that a package can enhance the
+ functionality of another package.
+
+ * Mandatory : NO
+ * Default   :
+
+   - An empty string for non-component based installations
+   - :variable:`CPACK_DEBIAN_PACKAGE_ENHANCES` for component-based
+     installations.
+
+ .. versionadded:: 3.4
+  Per-component ``CPACK_DEBIAN_<COMPONENT>_PACKAGE_ENHANCES`` variables.
+
+ See http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps
+
+.. variable:: CPACK_DEBIAN_PACKAGE_BREAKS
+              CPACK_DEBIAN_<COMPONENT>_PACKAGE_BREAKS
+
+ Sets the `Breaks` field of the Debian package.
+ When a binary package (P) declares that it breaks other packages (B),
+ ``dpkg`` will not allow the package (P) which declares `Breaks` be
+ **unpacked** unless the packages that will be broken (B) are deconfigured
+ first.
+ As long as the package (P) is configured, the previously deconfigured
+ packages (B) cannot be reconfigured again.
+
+ * Mandatory : NO
+ * Default   :
+
+   - An empty string for non-component based installations
+   - :variable:`CPACK_DEBIAN_PACKAGE_BREAKS` for component-based
+     installations.
+
+ .. versionadded:: 3.4
+  Per-component ``CPACK_DEBIAN_<COMPONENT>_PACKAGE_BREAKS`` variables.
+
+ See https://www.debian.org/doc/debian-policy/ch-relationships.html#s-breaks
+
+.. variable:: CPACK_DEBIAN_PACKAGE_CONFLICTS
+              CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONFLICTS
+
+ Sets the `Conflicts` field of the Debian package.
+ When one binary package declares a conflict with another using a `Conflicts`
+ field, ``dpkg`` will not allow them to be unpacked on the system at
+ the same time.
+
+ * Mandatory : NO
+ * Default   :
+
+   - An empty string for non-component based installations
+   - :variable:`CPACK_DEBIAN_PACKAGE_CONFLICTS` for component-based
+     installations.
+
+ .. versionadded:: 3.4
+  Per-component ``CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONFLICTS`` variables.
+
+ See https://www.debian.org/doc/debian-policy/ch-relationships.html#s-conflicts
+
+ .. note::
+
+   This is a stronger restriction than
+   :variable:`Breaks <CPACK_DEBIAN_PACKAGE_BREAKS>`, which prevents the
+   broken package from being configured while the breaking package is in
+   the "Unpacked" state but allows both packages to be unpacked at the same
+   time.
+
+.. variable:: CPACK_DEBIAN_PACKAGE_PROVIDES
+              CPACK_DEBIAN_<COMPONENT>_PACKAGE_PROVIDES
+
+ Sets the `Provides` field of the Debian package.
+ A virtual package is one which appears in the `Provides` control field of
+ another package.
+
+ * Mandatory : NO
+ * Default   :
+
+   - An empty string for non-component based installations
+   - :variable:`CPACK_DEBIAN_PACKAGE_PROVIDES` for component-based
+     installations.
+
+ .. versionadded:: 3.4
+  Per-component ``CPACK_DEBIAN_<COMPONENT>_PACKAGE_PROVIDES`` variables.
+
+ See https://www.debian.org/doc/debian-policy/ch-relationships.html#s-virtual
+
+.. variable:: CPACK_DEBIAN_PACKAGE_REPLACES
+              CPACK_DEBIAN_<COMPONENT>_PACKAGE_REPLACES
+
+ Sets the `Replaces` field of the Debian package.
+ Packages can declare in their control file that they should overwrite
+ files in certain other packages, or completely replace other packages.
+
+ * Mandatory : NO
+ * Default   :
+
+   - An empty string for non-component based installations
+   - :variable:`CPACK_DEBIAN_PACKAGE_REPLACES` for component-based
+     installations.
+
+ .. versionadded:: 3.4
+  Per-component ``CPACK_DEBIAN_<COMPONENT>_PACKAGE_REPLACES`` variables.
+
+ See http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps
+
+.. variable:: CPACK_DEBIAN_PACKAGE_RECOMMENDS
+              CPACK_DEBIAN_<COMPONENT>_PACKAGE_RECOMMENDS
+
+ Sets the `Recommends` field of the Debian package.
+ Allows packages to declare a strong, but not absolute, dependency on other
+ packages.
+
+ * Mandatory : NO
+ * Default   :
+
+   - An empty string for non-component based installations
+   - :variable:`CPACK_DEBIAN_PACKAGE_RECOMMENDS` for component-based
+     installations.
+
+ .. versionadded:: 3.4
+  Per-component ``CPACK_DEBIAN_<COMPONENT>_PACKAGE_RECOMMENDS`` variables.
+
+ See http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps
+
+.. variable:: CPACK_DEBIAN_PACKAGE_SUGGESTS
+              CPACK_DEBIAN_<COMPONENT>_PACKAGE_SUGGESTS
+
+ Sets the `Suggests` field of the Debian package.
+ Allows packages to declare a suggested package install grouping.
+
+ * Mandatory : NO
+ * Default   :
+
+   - An empty string for non-component based installations
+   - :variable:`CPACK_DEBIAN_PACKAGE_SUGGESTS` for component-based
+     installations.
+
+ .. versionadded:: 3.4
+  Per-component ``CPACK_DEBIAN_<COMPONENT>_PACKAGE_SUGGESTS`` variables.
+
+ See http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps
+
+.. variable:: CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS
+
+ .. versionadded:: 3.6
+
+ * Mandatory : NO
+ * Default   : OFF
+
+ Allows to generate shlibs control file automatically. Compatibility is defined by
+ :variable:`CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY` variable value.
+
+ .. note::
+
+   Libraries are only considered if they have both library name and version
+   set. This can be done by setting SOVERSION property with
+   :command:`set_target_properties` command.
+
+.. variable:: CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY
+
+ .. versionadded:: 3.6
+
+ Compatibility policy for auto-generated shlibs control file.
+
+ * Mandatory : NO
+ * Default   : "="
+
+ Defines compatibility policy for auto-generated shlibs control file.
+ Possible values: "=", ">="
+
+ See https://www.debian.org/doc/debian-policy/ch-sharedlibs.html#s-sharedlibs-shlibdeps
+
+.. variable:: CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
+              CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONTROL_EXTRA
+
+ This variable allow advanced user to add custom script to the
+ control.tar.gz.
+ Typical usage is for conffiles, postinst, postrm, prerm.
+
+ * Mandatory : NO
+ * Default   : -
+
+ Usage::
+
+  set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
+      "${CMAKE_CURRENT_SOURCE_DIR}/prerm;${CMAKE_CURRENT_SOURCE_DIR}/postrm")
+
+ .. versionadded:: 3.4
+  Per-component ``CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONTROL_EXTRA`` variables.
+
+.. variable:: CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION
+              CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONTROL_STRICT_PERMISSION
+
+ .. versionadded:: 3.4
+
+ This variable indicates if the Debian policy on control files should be
+ strictly followed.
+
+ * Mandatory : NO
+ * Default   : FALSE
+
+ Usage::
+
+  set(CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION TRUE)
+
+ This overrides the permissions on the original files, following the rules
+ set by Debian policy
+ https://www.debian.org/doc/debian-policy/ch-files.html#s-permissions-owners
+
+ .. note::
+
+  The original permissions of the files will be used in the final
+  package unless this variable is set to ``TRUE``.
+  In particular, the scripts should have the proper executable
+  flag prior to the generation of the package.
+
+.. variable:: CPACK_DEBIAN_PACKAGE_SOURCE
+              CPACK_DEBIAN_<COMPONENT>_PACKAGE_SOURCE
+
+ .. versionadded:: 3.5
+
+ Sets the ``Source`` field of the binary Debian package.
+ When the binary package name is not the same as the source package name
+ (in particular when several components/binaries are generated from one
+ source) the source from which the binary has been generated should be
+ indicated with the field ``Source``.
+
+ * Mandatory : NO
+ * Default   :
+
+   - An empty string for non-component based installations
+   - :variable:`CPACK_DEBIAN_PACKAGE_SOURCE` for component-based
+     installations.
+
+ See https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Source
+
+ .. note::
+
+   This value is not interpreted. It is possible to pass an optional
+   revision number of the referenced source package as well.
+
+Packaging of debug information
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.13
+
+Dbgsym packages contain debug symbols for debugging packaged binaries.
+
+Dbgsym packaging has its own set of variables:
+
+.. variable:: CPACK_DEBIAN_DEBUGINFO_PACKAGE
+              CPACK_DEBIAN_<component>_DEBUGINFO_PACKAGE
+
+ Enable generation of dbgsym .ddeb package(s).
+
+ * Mandatory : NO
+ * Default   : OFF
+
+.. note::
+
+ Setting this also strips the ELF files in the generated non-dbgsym package,
+ which results in debuginfo only being available in the dbgsym package.
+
+.. note::
+
+ Binaries must contain debug symbols before packaging so use either ``Debug``
+ or ``RelWithDebInfo`` for :variable:`CMAKE_BUILD_TYPE` variable value.
+
+ Additionally, if :variable:`CPACK_STRIP_FILES` is set, the files will be stripped before
+ they get to the DEB generator, so will not contain debug symbols and
+ a dbgsym package will not get built. Do not use with :variable:`CPACK_STRIP_FILES`.
+
+Building Debian packages on Windows
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.10
+
+To communicate UNIX file permissions from the install stage
+to the CPack DEB generator the "cmake_mode_t" NTFS
+alternate data stream (ADT) is used.
+
+When a filesystem without ADT support is used only owner read/write
+permissions can be preserved.
+
+Reproducible packages
+^^^^^^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.13
+
+The environment variable ``SOURCE_DATE_EPOCH`` may be set to a UNIX
+timestamp, defined as the number of seconds, excluding leap seconds,
+since 01 Jan 1970 00:00:00 UTC.  If set, the CPack DEB generator will
+use its value for timestamps in the package.
diff --git a/share/cmake-3.22/Help/cpack_gen/dmg.rst b/share/cmake-3.22/Help/cpack_gen/dmg.rst
new file mode 100644
index 0000000..1f05618
--- /dev/null
+++ b/share/cmake-3.22/Help/cpack_gen/dmg.rst
@@ -0,0 +1,131 @@
+CPack DragNDrop Generator
+-------------------------
+
+The DragNDrop CPack generator (macOS) creates a DMG image.
+
+Variables specific to CPack DragNDrop generator
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The following variables are specific to the DragNDrop installers built
+on macOS:
+
+.. variable:: CPACK_DMG_VOLUME_NAME
+
+ The volume name of the generated disk image. Defaults to
+ CPACK_PACKAGE_FILE_NAME.
+
+.. variable:: CPACK_DMG_FORMAT
+
+ The disk image format. Common values are ``UDRO`` (UDIF read-only), ``UDZO`` (UDIF
+ zlib-compressed) or ``UDBZ`` (UDIF bzip2-compressed). Refer to ``hdiutil(1)`` for
+ more information on other available formats. Defaults to ``UDZO``.
+
+.. variable:: CPACK_DMG_DS_STORE
+
+ Path to a custom ``.DS_Store`` file. This ``.DS_Store`` file can be used to
+ specify the Finder window position/geometry and layout (such as hidden
+ toolbars, placement of the icons etc.). This file has to be generated by
+ the Finder (either manually or through AppleScript) using a normal folder
+ from which the ``.DS_Store`` file can then be extracted.
+
+.. variable:: CPACK_DMG_DS_STORE_SETUP_SCRIPT
+
+ .. versionadded:: 3.5
+
+ Path to a custom AppleScript file.  This AppleScript is used to generate
+ a ``.DS_Store`` file which specifies the Finder window position/geometry and
+ layout (such as hidden toolbars, placement of the icons etc.).
+ By specifying a custom AppleScript there is no need to use
+ ``CPACK_DMG_DS_STORE``, as the ``.DS_Store`` that is generated by the AppleScript
+ will be packaged.
+
+.. variable:: CPACK_DMG_BACKGROUND_IMAGE
+
+ Path to an image file to be used as the background.  This file will be
+ copied to ``.background``/``background.<ext>``, where ``<ext>`` is the original image file
+ extension.  The background image is installed into the image before
+ ``CPACK_DMG_DS_STORE_SETUP_SCRIPT`` is executed or ``CPACK_DMG_DS_STORE`` is
+ installed.  By default no background image is set.
+
+.. variable:: CPACK_DMG_DISABLE_APPLICATIONS_SYMLINK
+
+ .. versionadded:: 3.6
+
+ Default behavior is to include a symlink to ``/Applications`` in the DMG.
+ Set this option to ``ON`` to avoid adding the symlink.
+
+.. variable:: CPACK_DMG_SLA_DIR
+
+  .. versionadded:: 3.5
+
+  Directory where license and menu files for different languages are stored.
+  Setting this causes CPack to look for a ``<language>.menu.txt`` and
+  ``<language>.license.txt`` or ``<language>.license.rtf`` file for every
+  language defined in ``CPACK_DMG_SLA_LANGUAGES``.  If both this variable and
+  ``CPACK_RESOURCE_FILE_LICENSE`` are set, CPack will only look for the menu
+  files and use the same license file for all languages.  If both
+  ``<language>.license.txt`` and ``<language>.license.rtf`` exist, the ``.txt``
+  file will be used.
+
+  .. versionadded:: 3.17
+    RTF support.
+
+.. variable:: CPACK_DMG_SLA_LANGUAGES
+
+  .. versionadded:: 3.5
+
+  Languages for which a license agreement is provided when mounting the
+  generated DMG. A menu file consists of 9 lines of text. The first line is
+  is the name of the language itself, uppercase, in English (e.g. German).
+  The other lines are translations of the following strings:
+
+  - Agree
+  - Disagree
+  - Print
+  - Save...
+  - You agree to the terms of the License Agreement when you click the
+    "Agree" button.
+  - Software License Agreement
+  - This text cannot be saved. The disk may be full or locked, or the file
+    may be locked.
+  - Unable to print. Make sure you have selected a printer.
+
+  For every language in this list, CPack will try to find files
+  ``<language>.menu.txt`` and ``<language>.license.txt`` in the directory
+  specified by the :variable:`CPACK_DMG_SLA_DIR` variable.
+
+.. variable:: CPACK_DMG_<component>_FILE_NAME
+
+ .. versionadded:: 3.17
+
+ File name when packaging ``<component>`` as its own DMG
+ (``CPACK_COMPONENTS_GROUPING`` set to IGNORE).
+
+ - Default: ``CPACK_PACKAGE_FILE_NAME-<component>``
+
+.. variable:: CPACK_DMG_FILESYSTEM
+
+ .. versionadded:: 3.21
+
+ The filesystem format. Common values are ``APFS`` and ``HFS+``.
+ See ``man hdiutil`` for a full list of supported formats.
+ Defaults to ``HFS+``.
+
+.. variable:: CPACK_COMMAND_HDIUTIL
+
+ Path to the ``hdiutil(1)`` command used to operate on disk image files on
+ macOS. This variable can be used to override the automatically detected
+ command (or specify its location if the auto-detection fails to find it).
+
+.. variable:: CPACK_COMMAND_SETFILE
+
+ Path to the ``SetFile(1)`` command used to set extended attributes on files and
+ directories on macOS. This variable can be used to override the
+ automatically detected command (or specify its location if the
+ auto-detection fails to find it).
+
+.. variable:: CPACK_COMMAND_REZ
+
+ Path to the ``Rez(1)`` command used to compile resources on macOS. This
+ variable can be used to override the automatically detected command (or
+ specify its location if the auto-detection fails to find it).
diff --git a/share/cmake-3.22/Help/cpack_gen/external.rst b/share/cmake-3.22/Help/cpack_gen/external.rst
new file mode 100644
index 0000000..4c083f0
--- /dev/null
+++ b/share/cmake-3.22/Help/cpack_gen/external.rst
@@ -0,0 +1,294 @@
+CPack External Generator
+------------------------
+
+.. versionadded:: 3.13
+
+CPack provides many generators to create packages for a variety of platforms
+and packaging systems. The intention is for CMake/CPack to be a complete
+end-to-end solution for building and packaging a software project. However, it
+may not always be possible to use CPack for the entire packaging process, due
+to either technical limitations or policies that require the use of certain
+tools. For this reason, CPack provides the "External" generator, which allows
+external packaging software to take advantage of some of the functionality
+provided by CPack, such as component installation and the dependency graph.
+
+Integration with External Packaging Tools
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The CPack External generator generates a ``.json`` file containing the
+CPack internal metadata, which gives external software information
+on how to package the software. External packaging software may itself
+invoke CPack, consume the generated metadata,
+install and package files as required.
+
+Alternatively CPack can invoke an external packaging software
+through an optional custom CMake script in
+:variable:`CPACK_EXTERNAL_PACKAGE_SCRIPT` instead.
+
+Staging of installation files may also optionally be
+taken care of by the generator when enabled through the
+:variable:`CPACK_EXTERNAL_ENABLE_STAGING` variable.
+
+JSON Format
+^^^^^^^^^^^
+
+The JSON metadata file contains a list of CPack components and component groups,
+the various options passed to :command:`cpack_add_component` and
+:command:`cpack_add_component_group`, the dependencies between the components
+and component groups, and various other options passed to CPack.
+
+The JSON's root object will always provide two fields:
+``formatVersionMajor`` and ``formatVersionMinor``, which are always integers
+that describe the output format of the generator. Backwards-compatible changes
+to the output format (for example, adding a new field that didn't exist before)
+cause the minor version to be incremented, and backwards-incompatible changes
+(for example, deleting a field or changing its meaning) cause the major version
+to be incremented and the minor version reset to 0. The format version is
+always of the format ``major.minor``. In other words, it always has exactly two
+parts, separated by a period.
+
+You can request one or more specific versions of the output format as described
+below with :variable:`CPACK_EXTERNAL_REQUESTED_VERSIONS`. The output format will
+have a major version that exactly matches the requested major version, and a
+minor version that is greater than or equal to the requested minor version. If
+no version is requested with :variable:`CPACK_EXTERNAL_REQUESTED_VERSIONS`, the
+latest known major version is used by default. Currently, the only supported
+format is 1.0, which is described below.
+
+Version 1.0
+***********
+
+In addition to the standard format fields, format version 1.0 provides the
+following fields in the root:
+
+``components``
+  The ``components`` field is an object with component names as the keys and
+  objects describing the components as the values. The component objects have
+  the following fields:
+
+  ``name``
+    The name of the component. This is always the same as the key in the
+    ``components`` object.
+
+  ``displayName``
+    The value of the ``DISPLAY_NAME`` field passed to
+    :command:`cpack_add_component`.
+
+  ``description``
+    The value of the ``DESCRIPTION`` field passed to
+    :command:`cpack_add_component`.
+
+  ``isHidden``
+    True if ``HIDDEN`` was passed to :command:`cpack_add_component`, false if
+    it was not.
+
+  ``isRequired``
+    True if ``REQUIRED`` was passed to :command:`cpack_add_component`, false if
+    it was not.
+
+  ``isDisabledByDefault``
+    True if ``DISABLED`` was passed to :command:`cpack_add_component`, false if
+    it was not.
+
+  ``group``
+    Only present if ``GROUP`` was passed to :command:`cpack_add_component`. If
+    so, this field is a string value containing the component's group.
+
+  ``dependencies``
+    An array of components the component depends on. This contains the values
+    in the ``DEPENDS`` argument passed to :command:`cpack_add_component`. If no
+    ``DEPENDS`` argument was passed, this is an empty list.
+
+  ``installationTypes``
+    An array of installation types the component is part of. This contains the
+    values in the ``INSTALL_TYPES`` argument passed to
+    :command:`cpack_add_component`. If no ``INSTALL_TYPES`` argument was
+    passed, this is an empty list.
+
+  ``isDownloaded``
+    True if ``DOWNLOADED`` was passed to :command:`cpack_add_component`, false
+    if it was not.
+
+  ``archiveFile``
+    The name of the archive file passed with the ``ARCHIVE_FILE`` argument to
+    :command:`cpack_add_component`. If no ``ARCHIVE_FILE`` argument was passed,
+    this is an empty string.
+
+``componentGroups``
+  The ``componentGroups`` field is an object with component group names as the
+  keys and objects describing the component groups as the values. The component
+  group objects have the following fields:
+
+  ``name``
+    The name of the component group. This is always the same as the key in the
+    ``componentGroups`` object.
+
+  ``displayName``
+    The value of the ``DISPLAY_NAME`` field passed to
+    :command:`cpack_add_component_group`.
+
+  ``description``
+    The value of the ``DESCRIPTION`` field passed to
+    :command:`cpack_add_component_group`.
+
+  ``parentGroup``
+    Only present if ``PARENT_GROUP`` was passed to
+    :command:`cpack_add_component_group`. If so, this field is a string value
+    containing the component group's parent group.
+
+  ``isExpandedByDefault``
+    True if ``EXPANDED`` was passed to :command:`cpack_add_component_group`,
+    false if it was not.
+
+  ``isBold``
+    True if ``BOLD_TITLE`` was passed to :command:`cpack_add_component_group`,
+    false if it was not.
+
+  ``components``
+    An array of names of components that are direct members of the group
+    (components that have this group as their ``GROUP``). Components of
+    subgroups are not included.
+
+  ``subgroups``
+    An array of names of component groups that are subgroups of the group
+    (groups that have this group as their ``PARENT_GROUP``).
+
+``installationTypes``
+  The ``installationTypes`` field is an object with installation type names as
+  the keys and objects describing the installation types as the values. The
+  installation type objects have the following fields:
+
+  ``name``
+    The name of the installation type. This is always the same as the key in
+    the ``installationTypes`` object.
+
+  ``displayName``
+    The value of the ``DISPLAY_NAME`` field passed to
+    :command:`cpack_add_install_type`.
+
+  ``index``
+    The integer index of the installation type in the list.
+
+``projects``
+  The ``projects`` field is an array of objects describing CMake projects which
+  comprise the CPack project. The values in this field are derived from
+  :variable:`CPACK_INSTALL_CMAKE_PROJECTS`. In most cases, this will be only a
+  single project. The project objects have the following fields:
+
+  ``projectName``
+    The project name passed to :variable:`CPACK_INSTALL_CMAKE_PROJECTS`.
+
+  ``component``
+    The name of the component or component set which comprises the project.
+
+  ``directory``
+    The build directory of the CMake project. This is the directory which
+    contains the ``cmake_install.cmake`` script.
+
+  ``subDirectory``
+    The subdirectory to install the project into inside the CPack package.
+
+``packageName``
+  The package name given in :variable:`CPACK_PACKAGE_NAME`. Only present if
+  this option is set.
+
+``packageVersion``
+  The package version given in :variable:`CPACK_PACKAGE_VERSION`. Only present
+  if this option is set.
+
+``packageDescriptionFile``
+  The package description file given in
+  :variable:`CPACK_PACKAGE_DESCRIPTION_FILE`. Only present if this option is
+  set.
+
+``packageDescriptionSummary``
+  The package description summary given in
+  :variable:`CPACK_PACKAGE_DESCRIPTION_SUMMARY`. Only present if this option is
+  set.
+
+``buildConfig``
+  The build configuration given to CPack with the ``-C`` option. Only present
+  if this option is set.
+
+``defaultDirectoryPermissions``
+  The default directory permissions given in
+  :variable:`CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS`. Only present if this
+  option is set.
+
+``setDestdir``
+  True if :variable:`CPACK_SET_DESTDIR` is true, false if it is not.
+
+``packagingInstallPrefix``
+  The install prefix given in :variable:`CPACK_PACKAGING_INSTALL_PREFIX`. Only
+  present if :variable:`CPACK_SET_DESTDIR` is true.
+
+``stripFiles``
+  True if :variable:`CPACK_STRIP_FILES` is true, false if it is not.
+
+``warnOnAbsoluteInstallDestination``
+  True if :variable:`CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION` is true, false
+  if it is not.
+
+``errorOnAbsoluteInstallDestination``
+  True if :variable:`CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION` is true,
+  false if it is not.
+
+Variables specific to CPack External generator
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. variable:: CPACK_EXTERNAL_REQUESTED_VERSIONS
+
+  This variable is used to request a specific version of the CPack External
+  generator. It is a list of ``major.minor`` values, separated by semicolons.
+
+  If this variable is set to a non-empty value, the CPack External generator
+  will iterate through each item in the list to search for a version that it
+  knows how to generate. Requested versions should be listed in order of
+  descending preference by the client software, as the first matching version
+  in the list will be generated.
+
+  The generator knows how to generate the version if it has a versioned
+  generator whose major version exactly matches the requested major version,
+  and whose minor version is greater than or equal to the requested minor
+  version. For example, if ``CPACK_EXTERNAL_REQUESTED_VERSIONS`` contains 1.0, and
+  the CPack External generator knows how to generate 1.1, it will generate 1.1.
+  If the generator doesn't know how to generate a version in the list, it skips
+  the version and looks at the next one. If it doesn't know how to generate any
+  of the requested versions, an error is thrown.
+
+  If this variable is not set, or is empty, the CPack External generator will
+  generate the highest major and minor version that it knows how to generate.
+
+  If an invalid version is encountered in ``CPACK_EXTERNAL_REQUESTED_VERSIONS`` (one
+  that doesn't match ``major.minor``, where ``major`` and ``minor`` are
+  integers), it is ignored.
+
+.. variable:: CPACK_EXTERNAL_ENABLE_STAGING
+
+  This variable can be set to true to enable optional installation
+  into a temporary staging area which can then be picked up
+  and packaged by an external packaging tool.
+  The top level directory used by CPack for the current packaging
+  task is contained in ``CPACK_TOPLEVEL_DIRECTORY``.
+  It is automatically cleaned up on each run before packaging is initiated
+  and can be used for custom temporary files required by
+  the external packaging tool.
+  It also contains the staging area ``CPACK_TEMPORARY_DIRECTORY``
+  into which CPack performs the installation when staging is enabled.
+
+.. variable:: CPACK_EXTERNAL_PACKAGE_SCRIPT
+
+  This variable can optionally specify the full path to
+  a CMake script file to be run as part of the CPack invocation.
+  It is invoked after (optional) staging took place and may
+  run an external packaging tool. The script has access to
+  the variables defined by the CPack config file.
+
+.. variable:: CPACK_EXTERNAL_BUILT_PACKAGES
+
+  .. versionadded:: 3.19
+
+  The ``CPACK_EXTERNAL_PACKAGE_SCRIPT`` script may set this list variable to the
+  full paths of generated package files.  CPack will copy these files from the
+  staging directory back to the top build directory and possibly produce
+  checksum files if the :variable:`CPACK_PACKAGE_CHECKSUM` is set.
diff --git a/share/cmake-3.22/Help/cpack_gen/freebsd.rst b/share/cmake-3.22/Help/cpack_gen/freebsd.rst
new file mode 100644
index 0000000..f429bc5
--- /dev/null
+++ b/share/cmake-3.22/Help/cpack_gen/freebsd.rst
@@ -0,0 +1,149 @@
+CPack FreeBSD Generator
+-----------------------
+
+.. versionadded:: 3.10
+
+The built in (binary) CPack FreeBSD (pkg) generator (Unix only)
+
+Variables affecting the CPack FreeBSD (pkg) generator
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+- .. versionadded:: 3.18
+    :variable:`CPACK_ARCHIVE_THREADS`
+
+Variables specific to CPack FreeBSD (pkg) generator
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The CPack FreeBSD generator may be used to create pkg(8) packages -- these may
+be used on FreeBSD, DragonflyBSD, NetBSD, OpenBSD, but also on Linux or OSX,
+depending on the installed package-management tools -- using :module:`CPack`.
+
+The CPack FreeBSD generator is a :module:`CPack` generator and uses the
+``CPACK_XXX`` variables used by :module:`CPack`. It tries to re-use packaging
+information that may already be specified for Debian packages for the
+:cpack_gen:`CPack DEB Generator`. It also tries to re-use RPM packaging
+information when Debian does not specify.
+
+The CPack FreeBSD generator should work on any host with libpkg installed. The
+packages it produces are specific to the host architecture and ABI.
+
+The CPack FreeBSD generator sets package-metadata through
+``CPACK_FREEBSD_XXX`` variables. The CPack FreeBSD generator, unlike the
+CPack Deb generator, does not specially support componentized packages; a
+single package is created from all the software artifacts created through
+CMake.
+
+All of the variables can be set specifically for FreeBSD packaging in
+the CPackConfig file or in CMakeLists.txt, but most of them have defaults
+that use general settings (e.g. CMAKE_PROJECT_NAME) or Debian-specific
+variables when those make sense (e.g. the homepage of an upstream project
+is usually unchanged by the flavor of packaging). When there is no Debian
+information to fall back on, but the RPM packaging has it, fall back to
+the RPM information (e.g. package license).
+
+.. variable:: CPACK_FREEBSD_PACKAGE_NAME
+
+  Sets the package name (in the package manifest, but also affects the
+  output filename).
+
+  * Mandatory: YES
+  * Default:
+
+    - :variable:`CPACK_PACKAGE_NAME` (this is always set by CPack itself,
+      based on CMAKE_PROJECT_NAME).
+
+.. variable:: CPACK_FREEBSD_PACKAGE_COMMENT
+
+  Sets the package comment. This is the short description displayed by
+  pkg(8) in standard "pkg info" output.
+
+  * Mandatory: YES
+  * Default:
+
+    - :variable:`CPACK_PACKAGE_DESCRIPTION_SUMMARY` (this is always set
+      by CPack itself, if nothing else sets it explicitly).
+    - :variable:`PROJECT_DESCRIPTION` (this can be set with the DESCRIPTION
+      parameter for :command:`project`).
+
+.. variable:: CPACK_FREEBSD_PACKAGE_DESCRIPTION
+
+  Sets the package description. This is the long description of the package,
+  given by "pkg info" with a specific package as argument.
+
+  * Mandatory: YES
+  * Default:
+
+    - :variable:`CPACK_DEBIAN_PACKAGE_DESCRIPTION` (this may be set already
+      for Debian packaging, so it is used as a fallback).
+
+.. variable:: CPACK_FREEBSD_PACKAGE_WWW
+
+  The URL of the web site for this package, preferably (when applicable) the
+  site from which the original source can be obtained and any additional
+  upstream documentation or information may be found.
+
+  * Mandatory: YES
+  * Default:
+
+   - :variable:`CMAKE_PROJECT_HOMEPAGE_URL`, or if that is not set,
+     :variable:`CPACK_DEBIAN_PACKAGE_HOMEPAGE` (this may be set already
+     for Debian packaging, so it is used as a fallback).
+
+  .. versionadded:: 3.12
+    The ``CMAKE_PROJECT_HOMEPAGE_URL`` variable.
+
+.. variable:: CPACK_FREEBSD_PACKAGE_LICENSE
+
+  The license, or licenses, which apply to this software package. This must
+  be one or more license-identifiers that pkg recognizes as acceptable license
+  identifiers (e.g. "GPLv2").
+
+  * Mandatory: YES
+  * Default:
+
+    - :variable:`CPACK_RPM_PACKAGE_LICENSE`
+
+.. variable:: CPACK_FREEBSD_PACKAGE_LICENSE_LOGIC
+
+  This variable is only of importance if there is more than one license.
+  The default is "single", which is only applicable to a single license.
+  Other acceptable values are determined by pkg -- those are "dual" or "multi" --
+  meaning choice (OR) or simultaneous (AND) application of the licenses.
+
+  * Mandatory: NO
+  * Default: single
+
+.. variable:: CPACK_FREEBSD_PACKAGE_MAINTAINER
+
+  The FreeBSD maintainer (e.g. kde@freebsd.org) of this package.
+
+  * Mandatory: YES
+  * Default: none
+
+.. variable:: CPACK_FREEBSD_PACKAGE_ORIGIN
+
+  The origin (ports label) of this package; for packages built by CPack
+  outside of the ports system this is of less importance. The default
+  puts the package somewhere under misc/, as a stopgap.
+
+  * Mandatory: YES
+  * Default: misc/<package name>
+
+.. variable:: CPACK_FREEBSD_PACKAGE_CATEGORIES
+
+  The ports categories where this package lives (if it were to be built
+  from ports). If none is set a single category is determined based on
+  the package origin.
+
+  * Mandatory: YES
+  * Default: derived from ORIGIN
+
+.. variable:: CPACK_FREEBSD_PACKAGE_DEPS
+
+  A list of package origins that should be added as package dependencies.
+  These are in the form <category>/<packagename>, e.g. x11/libkonq.
+  No version information needs to be provided (this is not included
+  in the manifest).
+
+  * Mandatory: NO
+  * Default: empty
diff --git a/share/cmake-3.22/Help/cpack_gen/ifw.rst b/share/cmake-3.22/Help/cpack_gen/ifw.rst
new file mode 100644
index 0000000..6817eac
--- /dev/null
+++ b/share/cmake-3.22/Help/cpack_gen/ifw.rst
@@ -0,0 +1,407 @@
+CPack IFW Generator
+-------------------
+
+.. versionadded:: 3.1
+
+Configure and run the Qt Installer Framework to generate a Qt installer.
+
+.. only:: html
+
+  .. contents::
+
+Overview
+^^^^^^^^
+
+This :manual:`cpack generator <cpack-generators(7)>` generates
+configuration and meta information for the `Qt Installer Framework
+<http://doc.qt.io/qtinstallerframework/index.html>`_ (QtIFW),
+and runs QtIFW tools to generate a Qt installer.
+
+QtIFW provides tools and utilities to create installers for
+the platforms supported by `Qt <https://www.qt.io>`_: Linux,
+Microsoft Windows, and macOS.
+
+To make use of this generator, QtIFW needs to be installed.
+The :module:`CPackIFW` module looks for the location of the
+QtIFW command-line utilities, and defines several commands to
+control the behavior of this generator.
+
+Variables
+^^^^^^^^^
+
+You can use the following variables to change behavior of CPack ``IFW``
+generator.
+
+Debug
+"""""
+
+.. variable:: CPACK_IFW_VERBOSE
+
+ .. versionadded:: 3.3
+
+ Set to ``ON`` to enable addition debug output.
+ By default is ``OFF``.
+
+Package
+"""""""
+
+.. variable:: CPACK_IFW_PACKAGE_TITLE
+
+ Name of the installer as displayed on the title bar.
+ By default used :variable:`CPACK_PACKAGE_DESCRIPTION_SUMMARY`.
+
+.. variable:: CPACK_IFW_PACKAGE_PUBLISHER
+
+ Publisher of the software (as shown in the Windows Control Panel).
+ By default used :variable:`CPACK_PACKAGE_VENDOR`.
+
+.. variable:: CPACK_IFW_PRODUCT_URL
+
+ URL to a page that contains product information on your web site.
+
+.. variable:: CPACK_IFW_PACKAGE_ICON
+
+ Filename for a custom installer icon. The actual file is '.icns' (macOS),
+ '.ico' (Windows). No functionality on Unix.
+
+.. variable:: CPACK_IFW_PACKAGE_WINDOW_ICON
+
+ Filename for a custom window icon in PNG format for the Installer
+ application.
+
+.. variable:: CPACK_IFW_PACKAGE_LOGO
+
+ Filename for a logo is used as QWizard::LogoPixmap.
+
+.. variable:: CPACK_IFW_PACKAGE_WATERMARK
+
+ .. versionadded:: 3.8
+
+ Filename for a watermark is used as QWizard::WatermarkPixmap.
+
+.. variable:: CPACK_IFW_PACKAGE_BANNER
+
+ .. versionadded:: 3.8
+
+ Filename for a banner is used as QWizard::BannerPixmap.
+
+.. variable:: CPACK_IFW_PACKAGE_BACKGROUND
+
+ .. versionadded:: 3.8
+
+ Filename for an image used as QWizard::BackgroundPixmap (only used by MacStyle).
+
+.. variable:: CPACK_IFW_PACKAGE_WIZARD_STYLE
+
+ .. versionadded:: 3.8
+
+ Wizard style to be used ("Modern", "Mac", "Aero" or "Classic").
+
+.. variable:: CPACK_IFW_PACKAGE_WIZARD_DEFAULT_WIDTH
+
+ .. versionadded:: 3.8
+
+ Default width of the wizard in pixels. Setting a banner image will override this.
+
+.. variable:: CPACK_IFW_PACKAGE_WIZARD_DEFAULT_HEIGHT
+
+ .. versionadded:: 3.8
+
+ Default height of the wizard in pixels. Setting a watermark image will override this.
+
+.. variable:: CPACK_IFW_PACKAGE_WIZARD_SHOW_PAGE_LIST
+
+ .. versionadded:: 3.20
+
+ Set to ``OFF`` if the widget listing installer pages on the left side of the wizard should not be shown.
+
+ It is ``ON`` by default, but will only have an effect if using QtIFW 4.0 or later.
+
+.. variable:: CPACK_IFW_PACKAGE_TITLE_COLOR
+
+ .. versionadded:: 3.8
+
+ Color of the titles and subtitles (takes an HTML color code, such as "#88FF33").
+
+.. variable:: CPACK_IFW_PACKAGE_STYLE_SHEET
+
+ .. versionadded:: 3.15
+
+ Filename for a stylesheet.
+
+.. variable:: CPACK_IFW_TARGET_DIRECTORY
+
+ Default target directory for installation.
+ By default used
+ "@ApplicationsDir@/:variable:`CPACK_PACKAGE_INSTALL_DIRECTORY`"
+ (variables embedded in '@' are expanded by the
+ `QtIFW scripting engine <https://doc.qt.io/qtinstallerframework/scripting.html>`_).
+
+ You can use predefined variables.
+
+.. variable:: CPACK_IFW_ADMIN_TARGET_DIRECTORY
+
+ Default target directory for installation with administrator rights.
+
+ You can use predefined variables.
+
+.. variable:: CPACK_IFW_PACKAGE_REMOVE_TARGET_DIR
+
+ .. versionadded:: 3.11
+
+ Set to ``OFF`` if the target directory should not be deleted when uninstalling.
+
+ Is ``ON`` by default
+
+.. variable:: CPACK_IFW_PACKAGE_GROUP
+
+ The group, which will be used to configure the root package
+
+.. variable:: CPACK_IFW_PACKAGE_NAME
+
+ The root package name, which will be used if configuration group is not
+ specified
+
+.. variable:: CPACK_IFW_PACKAGE_START_MENU_DIRECTORY
+
+ .. versionadded:: 3.3
+
+ Name of the default program group for the product in the Windows Start menu.
+
+ By default used :variable:`CPACK_IFW_PACKAGE_NAME`.
+
+.. variable:: CPACK_IFW_PACKAGE_MAINTENANCE_TOOL_NAME
+
+ .. versionadded:: 3.3
+
+ Filename of the generated maintenance tool.
+ The platform-specific executable file extension is appended.
+
+ By default used QtIFW defaults (``maintenancetool``).
+
+.. variable:: CPACK_IFW_PACKAGE_MAINTENANCE_TOOL_INI_FILE
+
+ .. versionadded:: 3.3
+
+ Filename for the configuration of the generated maintenance tool.
+
+ By default used QtIFW defaults (``maintenancetool.ini``).
+
+.. variable:: CPACK_IFW_PACKAGE_ALLOW_NON_ASCII_CHARACTERS
+
+ .. versionadded:: 3.3
+
+ Set to ``ON`` if the installation path can contain non-ASCII characters.
+
+ Is ``ON`` for QtIFW less 2.0 tools.
+
+.. variable:: CPACK_IFW_PACKAGE_ALLOW_SPACE_IN_PATH
+
+ .. versionadded:: 3.3
+
+ Set to ``OFF`` if the installation path cannot contain space characters.
+
+ Is ``ON`` for QtIFW less 2.0 tools.
+
+.. variable:: CPACK_IFW_PACKAGE_CONTROL_SCRIPT
+
+ .. versionadded:: 3.3
+
+ Filename for a custom installer control script.
+
+.. variable:: CPACK_IFW_PACKAGE_RESOURCES
+
+ .. versionadded:: 3.7
+
+ List of additional resources ('.qrc' files) to include in the installer
+ binary.
+
+ You can use :command:`cpack_ifw_add_package_resources` command to resolve
+ relative paths.
+
+.. variable:: CPACK_IFW_PACKAGE_FILE_EXTENSION
+
+ .. versionadded:: 3.10
+
+ The target binary extension.
+
+ On Linux, the name of the target binary is automatically extended with
+ '.run', if you do not specify the extension.
+
+ On Windows, the target is created as an application with the extension
+ '.exe', which is automatically added, if not supplied.
+
+ On Mac, the target is created as an DMG disk image with the extension
+ '.dmg', which is automatically added, if not supplied.
+
+.. variable:: CPACK_IFW_REPOSITORIES_ALL
+
+ The list of remote repositories.
+
+ The default value of this variable is computed by CPack and contains
+ all repositories added with command :command:`cpack_ifw_add_repository`
+ or updated with command :command:`cpack_ifw_update_repository`.
+
+.. variable:: CPACK_IFW_DOWNLOAD_ALL
+
+ If this is ``ON`` all components will be downloaded.
+ By default is ``OFF`` or used value
+ from ``CPACK_DOWNLOAD_ALL`` if set
+
+Components
+""""""""""
+
+.. variable:: CPACK_IFW_RESOLVE_DUPLICATE_NAMES
+
+ Resolve duplicate names when installing components with groups.
+
+.. variable:: CPACK_IFW_PACKAGES_DIRECTORIES
+
+ Additional prepared packages dirs that will be used to resolve
+ dependent components.
+
+.. variable:: CPACK_IFW_REPOSITORIES_DIRECTORIES
+
+ .. versionadded:: 3.10
+
+ Additional prepared repository dirs that will be used to resolve and
+ repack dependent components. This feature available only
+ since QtIFW 3.1.
+
+QtIFW Tools
+"""""""""""
+
+.. variable:: CPACK_IFW_FRAMEWORK_VERSION
+
+ .. versionadded:: 3.3
+
+ The version of used QtIFW tools.
+
+The following variables provide the locations of the QtIFW
+command-line tools as discovered by the module :module:`CPackIFW`.
+These variables are cached, and may be configured if needed.
+
+.. variable:: CPACK_IFW_ARCHIVEGEN_EXECUTABLE
+
+ .. versionadded:: 3.19
+
+ The path to ``archivegen``.
+
+.. variable:: CPACK_IFW_BINARYCREATOR_EXECUTABLE
+
+ The path to ``binarycreator``.
+
+.. variable:: CPACK_IFW_REPOGEN_EXECUTABLE
+
+ The path to ``repogen``.
+
+.. variable:: CPACK_IFW_INSTALLERBASE_EXECUTABLE
+
+ The path to ``installerbase``.
+
+.. variable:: CPACK_IFW_DEVTOOL_EXECUTABLE
+
+ The path to ``devtool``.
+
+Hints for Finding QtIFW
+"""""""""""""""""""""""
+
+Generally, the CPack ``IFW`` generator automatically finds QtIFW tools,
+but if you don't use a default path for installation of the QtIFW tools,
+the path may be specified in either a CMake or an environment variable:
+
+.. variable:: CPACK_IFW_ROOT
+
+ .. versionadded:: 3.9
+
+ An CMake variable which specifies the location of the QtIFW tool suite.
+
+ The variable will be cached in the ``CPackConfig.cmake`` file and used at
+ CPack runtime.
+
+.. variable:: QTIFWDIR
+
+ An environment variable which specifies the location of the QtIFW tool
+ suite.
+
+.. note::
+  The specified path should not contain "bin" at the end
+  (for example: "D:\\DevTools\\QtIFW2.0.5").
+
+The :variable:`CPACK_IFW_ROOT` variable has a higher priority and overrides
+the value of the :variable:`QTIFWDIR` variable.
+
+Other Settings
+^^^^^^^^^^^^^^
+
+Online installer
+""""""""""""""""
+
+By default, this generator generates an *offline installer*. This means that
+that all packaged files are fully contained in the installer executable.
+
+In contrast, an *online installer* will download some or all components from
+a remote server.
+
+The ``DOWNLOADED`` option in the :command:`cpack_add_component` command
+specifies that a component is to be downloaded. Alternatively, the ``ALL``
+option in the :command:`cpack_configure_downloads` command specifies that
+`all` components are to be be downloaded.
+
+The :command:`cpack_ifw_add_repository` command and the
+:variable:`CPACK_IFW_DOWNLOAD_ALL` variable allow for more specific
+configuration.
+
+When there are online components, CPack will write them to archive files.
+The help page of the :module:`CPackComponent` module, especially the section
+on the :command:`cpack_configure_downloads` function, explains how to make
+these files accessible from a download URL.
+
+Internationalization
+""""""""""""""""""""
+
+.. versionadded:: 3.9
+
+Some variables and command arguments support internationalization via
+CMake script. This is an optional feature.
+
+Installers created by QtIFW tools have built-in support for
+internationalization and many phrases are localized to many languages,
+but this does not apply to the description of the your components and groups
+that will be distributed.
+
+Localization of the description of your components and groups is useful for
+users of your installers.
+
+A localized variable or argument can contain a single default value, and a
+set of pairs the name of the locale and the localized value.
+
+For example:
+
+.. code-block:: cmake
+
+   set(LOCALIZABLE_VARIABLE "Default value"
+     en "English value"
+     en_US "American value"
+     en_GB "Great Britain value"
+     )
+
+See Also
+^^^^^^^^
+
+Qt Installer Framework Manual:
+
+* Index page:
+  http://doc.qt.io/qtinstallerframework/index.html
+
+* Component Scripting:
+  http://doc.qt.io/qtinstallerframework/scripting.html
+
+* Predefined Variables:
+  http://doc.qt.io/qtinstallerframework/scripting.html#predefined-variables
+
+* Promoting Updates:
+  http://doc.qt.io/qtinstallerframework/ifw-updates.html
+
+Download Qt Installer Framework for your platform from Qt site:
+ http://download.qt.io/official_releases/qt-installer-framework
diff --git a/share/cmake-3.22/Help/cpack_gen/nsis.rst b/share/cmake-3.22/Help/cpack_gen/nsis.rst
new file mode 100644
index 0000000..299cfec
--- /dev/null
+++ b/share/cmake-3.22/Help/cpack_gen/nsis.rst
@@ -0,0 +1,209 @@
+CPack NSIS Generator
+--------------------
+
+CPack Nullsoft Scriptable Install System (NSIS) generator specific options.
+
+.. versionchanged:: 3.22
+ The NSIS generator requires NSIS 3.03 or newer.
+
+Variables specific to CPack NSIS generator
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The following variables are specific to the graphical installers built
+on Windows Nullsoft Scriptable Install System.
+
+.. variable:: CPACK_NSIS_INSTALL_ROOT
+
+ The default installation directory presented to the end user by the NSIS
+ installer is under this root dir. The full directory presented to the end
+ user is: ``${CPACK_NSIS_INSTALL_ROOT}/${CPACK_PACKAGE_INSTALL_DIRECTORY}``
+
+.. variable:: CPACK_NSIS_MUI_ICON
+
+ An icon filename.  The name of a ``*.ico`` file used as the main icon for the
+ generated install program.
+
+.. variable:: CPACK_NSIS_MUI_UNIICON
+
+ An icon filename.  The name of a ``*.ico`` file used as the main icon for the
+ generated uninstall program.
+
+.. variable:: CPACK_NSIS_INSTALLER_MUI_ICON_CODE
+
+ undocumented.
+
+.. variable:: CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP
+
+ .. versionadded:: 3.5
+
+ The filename of a bitmap to use as the NSIS ``MUI_WELCOMEFINISHPAGE_BITMAP``.
+
+.. variable:: CPACK_NSIS_MUI_UNWELCOMEFINISHPAGE_BITMAP
+
+ .. versionadded:: 3.5
+
+ The filename of a bitmap to use as the NSIS ``MUI_UNWELCOMEFINISHPAGE_BITMAP``.
+
+.. variable:: CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS
+
+ Extra NSIS commands that will be added to the beginning of the install
+ Section, before your install tree is available on the target system.
+
+.. variable:: CPACK_NSIS_EXTRA_INSTALL_COMMANDS
+
+ Extra NSIS commands that will be added to the end of the install Section,
+ after your install tree is available on the target system.
+
+.. variable:: CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS
+
+ Extra NSIS commands that will be added to the uninstall Section, before
+ your install tree is removed from the target system.
+
+.. variable:: CPACK_NSIS_COMPRESSOR
+
+ The arguments that will be passed to the NSIS `SetCompressor` command.
+
+.. variable:: CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL
+
+ Ask about uninstalling previous versions first.  If this is set to ``ON``,
+ then an installer will look for previous installed versions and if one is
+ found, ask the user whether to uninstall it before proceeding with the
+ install.
+
+.. variable:: CPACK_NSIS_MODIFY_PATH
+
+ Modify ``PATH`` toggle.  If this is set to ``ON``, then an extra page will appear
+ in the installer that will allow the user to choose whether the program
+ directory should be added to the system ``PATH`` variable.
+
+.. variable:: CPACK_NSIS_DISPLAY_NAME
+
+ The display name string that appears in the Windows `Apps & features`
+ in `Control Panel`
+
+.. variable:: CPACK_NSIS_PACKAGE_NAME
+
+ The title displayed at the top of the installer.
+
+.. variable:: CPACK_NSIS_INSTALLED_ICON_NAME
+
+ A path to the executable that contains the installer icon.
+
+.. variable:: CPACK_NSIS_HELP_LINK
+
+ URL to a web site providing assistance in installing your application.
+
+.. variable:: CPACK_NSIS_URL_INFO_ABOUT
+
+ URL to a web site providing more information about your application.
+
+.. variable:: CPACK_NSIS_CONTACT
+
+ Contact information for questions and comments about the installation
+ process.
+
+.. variable:: CPACK_NSIS_<compName>_INSTALL_DIRECTORY
+
+ .. versionadded:: 3.7
+
+ Custom install directory for the specified component ``<compName>`` instead
+ of ``$INSTDIR``.
+
+.. variable:: CPACK_NSIS_CREATE_ICONS_EXTRA
+
+ Additional NSIS commands for creating `Start Menu` shortcuts.
+
+.. variable:: CPACK_NSIS_DELETE_ICONS_EXTRA
+
+ Additional NSIS commands to uninstall `Start Menu` shortcuts.
+
+.. variable:: CPACK_NSIS_EXECUTABLES_DIRECTORY
+
+ Creating NSIS `Start Menu` links assumes that they are in ``bin`` unless this
+ variable is set.  For example, you would set this to ``exec`` if your
+ executables are in an exec directory.
+
+.. variable:: CPACK_NSIS_MUI_FINISHPAGE_RUN
+
+ Specify an executable to add an option to run on the finish page of the
+ NSIS installer.
+
+.. variable:: CPACK_NSIS_MENU_LINKS
+
+ Specify links in ``[application]`` menu.  This should contain a list of pair
+ ``link`` ``link name``. The link may be a URL or a path relative to
+ installation prefix.  Like::
+
+  set(CPACK_NSIS_MENU_LINKS
+      "doc/cmake-@CMake_VERSION_MAJOR@.@CMake_VERSION_MINOR@/cmake.html"
+      "CMake Help" "https://cmake.org" "CMake Web Site")
+
+.. variable:: CPACK_NSIS_UNINSTALL_NAME
+
+ .. versionadded:: 3.17
+
+ Specify the name of the program to uninstall the version.
+ Default is ``Uninstall``.
+
+.. variable:: CPACK_NSIS_WELCOME_TITLE
+
+  .. versionadded:: 3.17
+
+  The title to display on the top of the page for the welcome page.
+
+.. variable:: CPACK_NSIS_WELCOME_TITLE_3LINES
+
+ .. versionadded:: 3.17
+
+ Display the title in the welcome page on 3 lines instead of 2.
+
+.. variable:: CPACK_NSIS_FINISH_TITLE
+
+ .. versionadded:: 3.17
+
+ The title to display on the top of the page for the finish page.
+
+.. variable:: CPACK_NSIS_FINISH_TITLE_3LINES
+
+ .. versionadded:: 3.17
+
+ Display the title in the finish page on 3 lines instead of 2.
+
+.. variable:: CPACK_NSIS_MUI_HEADERIMAGE
+
+ .. versionadded:: 3.17
+
+ The image to display on the header of installers pages.
+
+.. variable:: CPACK_NSIS_MANIFEST_DPI_AWARE
+
+ .. versionadded:: 3.18
+
+ If set, declares that the installer is DPI-aware.
+
+.. variable:: CPACK_NSIS_BRANDING_TEXT
+
+ .. versionadded:: 3.20
+
+ If set, updates the text at the bottom of the install window.
+ To set the string to blank, use a space (" ").
+
+.. variable:: CPACK_NSIS_BRANDING_TEXT_TRIM_POSITION
+
+ .. versionadded:: 3.20
+
+ If set, trim down the size of the control to the size of the branding text string.
+ Allowed values for this variable are ``LEFT``, ``CENTER`` or ``RIGHT``.
+ If not specified, the default behavior is ``LEFT``.
+
+.. variable:: CPACK_NSIS_EXECUTABLE
+
+ .. versionadded:: 3.21
+
+ If set, specify the name of the NSIS executable. Default is ``makensis``.
+
+.. variable:: CPACK_NSIS_IGNORE_LICENSE_PAGE
+
+ .. versionadded:: 3.22
+
+ If set, do not display the page containing the license during installation.
diff --git a/share/cmake-3.22/Help/cpack_gen/nuget.rst b/share/cmake-3.22/Help/cpack_gen/nuget.rst
new file mode 100644
index 0000000..c980dd6
--- /dev/null
+++ b/share/cmake-3.22/Help/cpack_gen/nuget.rst
@@ -0,0 +1,255 @@
+CPack NuGet Generator
+---------------------
+
+.. versionadded:: 3.12
+
+When build a NuGet package there is no direct way to control an output
+filename due a lack of the corresponding CLI option of NuGet, so there
+is no ``CPACK_NUGET_PACKAGE_FILE_NAME`` variable. To form the output filename
+NuGet uses the package name and the version according to its built-in rules.
+
+Also, be aware that including a top level directory
+(``CPACK_INCLUDE_TOPLEVEL_DIRECTORY``) is ignored by this generator.
+
+
+Variables specific to CPack NuGet generator
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The CPack NuGet generator may be used to create NuGet packages using
+:module:`CPack`. The CPack NuGet generator is a :module:`CPack` generator thus
+it uses the ``CPACK_XXX`` variables used by :module:`CPack`.
+
+The CPack NuGet generator has specific features which are controlled by the
+specifics ``CPACK_NUGET_XXX`` variables. In the "one per group" mode
+(see :variable:`CPACK_COMPONENTS_GROUPING`), ``<compName>`` placeholder
+in the variables below would contain a group name (uppercased and turned into
+a "C" identifier).
+
+List of CPack NuGet generator specific variables:
+
+.. variable:: CPACK_NUGET_COMPONENT_INSTALL
+
+ Enable component packaging for CPack NuGet generator
+
+ * Mandatory : NO
+ * Default   : OFF
+
+.. variable:: CPACK_NUGET_PACKAGE_NAME
+              CPACK_NUGET_<compName>_PACKAGE_NAME
+
+ The NUGET package name. ``CPACK_NUGET_PACKAGE_NAME`` is used as the
+ package ``id`` on nuget.org_
+
+ * Mandatory : YES
+ * Default   : :variable:`CPACK_PACKAGE_NAME`
+
+.. variable:: CPACK_NUGET_PACKAGE_VERSION
+              CPACK_NUGET_<compName>_PACKAGE_VERSION
+
+ The NuGet package version.
+
+ * Mandatory : YES
+ * Default   : :variable:`CPACK_PACKAGE_VERSION`
+
+.. variable:: CPACK_NUGET_PACKAGE_DESCRIPTION
+              CPACK_NUGET_<compName>_PACKAGE_DESCRIPTION
+
+ A long description of the package for UI display.
+
+ * Mandatory : YES
+ * Default   :
+    - :variable:`CPACK_COMPONENT_<compName>_DESCRIPTION`,
+    - ``CPACK_COMPONENT_GROUP_<groupName>_DESCRIPTION``,
+    - :variable:`CPACK_PACKAGE_DESCRIPTION`
+
+.. variable:: CPACK_NUGET_PACKAGE_AUTHORS
+              CPACK_NUGET_<compName>_PACKAGE_AUTHORS
+
+ A comma-separated list of packages authors, matching the profile names
+ on nuget.org_. These are displayed in the NuGet Gallery on
+ nuget.org_ and are used to cross-reference packages by the same
+ authors.
+
+ * Mandatory : YES
+ * Default   : :variable:`CPACK_PACKAGE_VENDOR`
+
+.. variable:: CPACK_NUGET_PACKAGE_TITLE
+              CPACK_NUGET_<compName>_PACKAGE_TITLE
+
+ A human-friendly title of the package, typically used in UI displays
+ as on nuget.org_ and the Package Manager in Visual Studio. If not
+ specified, the package ID is used.
+
+ * Mandatory : NO
+ * Default   :
+    - :variable:`CPACK_COMPONENT_<compName>_DISPLAY_NAME`,
+    - ``CPACK_COMPONENT_GROUP_<groupName>_DISPLAY_NAME``
+
+.. variable:: CPACK_NUGET_PACKAGE_OWNERS
+              CPACK_NUGET_<compName>_PACKAGE_OWNERS
+
+ A comma-separated list of the package creators using profile names
+ on nuget.org_. This is often the same list as in authors,
+ and is ignored when uploading the package to nuget.org_.
+
+ * Mandatory : NO
+ * Default   : -
+
+.. variable:: CPACK_NUGET_PACKAGE_HOMEPAGE_URL
+              CPACK_NUGET_<compName>_PACKAGE_HOMEPAGE_URL
+
+ An URL for the package's home page, often shown in UI displays as well
+ as nuget.org_.
+
+ * Mandatory : NO
+ * Default   : :variable:`CPACK_PACKAGE_HOMEPAGE_URL`
+
+.. variable:: CPACK_NUGET_PACKAGE_LICENSEURL
+              CPACK_NUGET_<compName>_PACKAGE_LICENSEURL
+
+ .. deprecated:: 3.20
+  Use a local license file
+  (:variable:`CPACK_NUGET_PACKAGE_LICENSE_FILE_NAME`)
+  or a `(SPDX) license identifier`_
+  (:variable:`CPACK_NUGET_PACKAGE_LICENSE_EXPRESSION`) instead.
+
+ An URL for the package's license, often shown in UI displays as well
+ as on nuget.org_.
+
+ * Mandatory : NO
+ * Default   : -
+
+.. variable:: CPACK_NUGET_PACKAGE_LICENSE_EXPRESSION
+              CPACK_NUGET_<compName>_PACKAGE_LICENSE_EXPRESSION
+
+ .. versionadded:: 3.20
+
+ A Software Package Data Exchange `(SPDX) license identifier`_ such as
+ ``MIT``, ``BSD-3-Clause``, or ``LGPL-3.0-or-later``. In the case of a
+ choice of licenses or more complex restrictions, compound license
+ expressions may be formed using boolean operators, for example
+ ``MIT OR BSD-3-Clause``.  See the `SPDX specification`_ for guidance
+ on forming complex license expressions.
+
+ If ``CPACK_NUGET_PACKAGE_LICENSE_FILE_NAME`` is specified,
+ ``CPACK_NUGET_PACKAGE_LICENSE_EXPRESSION`` is ignored.
+
+ * Mandatory : NO
+ * Default   : -
+
+.. variable:: CPACK_NUGET_PACKAGE_LICENSE_FILE_NAME
+              CPACK_NUGET_<compName>_PACKAGE_LICENSE_FILE_NAME
+
+ The package's license file in :file:`.txt` or :file:`.md` format.
+
+ If ``CPACK_NUGET_PACKAGE_LICENSE_FILE_NAME`` is specified,
+ ``CPACK_NUGET_PACKAGE_LICENSE_EXPRESSION`` is ignored.
+
+ .. versionadded:: 3.20
+
+ * Mandatory : NO
+ * Default   : -
+
+.. variable:: CPACK_NUGET_PACKAGE_ICONURL
+              CPACK_NUGET_<compName>_PACKAGE_ICONURL
+
+ .. deprecated:: 3.20
+  Use a local icon file (:variable:`CPACK_NUGET_PACKAGE_ICON`) instead.
+
+ An URL for a 64x64 image with transparency background to use as the
+ icon for the package in UI display.
+
+ * Mandatory : NO
+ * Default   : -
+
+.. variable:: CPACK_NUGET_PACKAGE_ICON
+              CPACK_NUGET_<compName>_PACKAGE_ICON
+
+ .. versionadded:: 3.20
+
+ The filename of a 64x64 image with transparency background to use as the
+ icon for the package in UI display.
+
+ * Mandatory : NO
+ * Default   : -
+
+.. variable:: CPACK_NUGET_PACKAGE_DESCRIPTION_SUMMARY
+              CPACK_NUGET_<compName>_PACKAGE_DESCRIPTION_SUMMARY
+
+ A short description of the package for UI display. If omitted, a
+ truncated version of description is used.
+
+ * Mandatory : NO
+ * Default   : :variable:`CPACK_PACKAGE_DESCRIPTION_SUMMARY`
+
+.. variable:: CPACK_NUGET_PACKAGE_RELEASE_NOTES
+              CPACK_NUGET_<compName>_PACKAGE_RELEASE_NOTES
+
+ A description of the changes made in this release of the package,
+ often used in UI like the Updates tab of the Visual Studio Package
+ Manager in place of the package description.
+
+ * Mandatory : NO
+ * Default   : -
+
+.. variable:: CPACK_NUGET_PACKAGE_COPYRIGHT
+              CPACK_NUGET_<compName>_PACKAGE_COPYRIGHT
+
+ Copyright details for the package.
+
+ * Mandatory : NO
+ * Default   : -
+
+.. variable:: CPACK_NUGET_PACKAGE_LANGUAGE
+              CPACK_NUGET_<compName>_PACKAGE_LANGUAGE
+
+ .. versionadded:: 3.20
+
+ Locale specifier for the package, for example ``en_CA``.
+
+ * Mandatory : NO
+ * Default   : -
+
+.. variable:: CPACK_NUGET_PACKAGE_TAGS
+              CPACK_NUGET_<compName>_PACKAGE_TAGS
+
+ A space-delimited list of tags and keywords that describe the
+ package and aid discoverability of packages through search and
+ filtering.
+
+ * Mandatory : NO
+ * Default   : -
+
+.. variable:: CPACK_NUGET_PACKAGE_DEPENDENCIES
+              CPACK_NUGET_<compName>_PACKAGE_DEPENDENCIES
+
+ A list of package dependencies.
+
+ * Mandatory : NO
+ * Default   : -
+
+.. variable:: CPACK_NUGET_PACKAGE_DEPENDENCIES_<dependency>_VERSION
+              CPACK_NUGET_<compName>_PACKAGE_DEPENDENCIES_<dependency>_VERSION
+
+ A `version specification`_ for the particular dependency, where
+ ``<dependency>`` is an item of the dependency list (see above)
+ transformed with ``MAKE_C_IDENTIFIER`` function of :command:`string`
+ command.
+
+ * Mandatory : NO
+ * Default   : -
+
+.. variable:: CPACK_NUGET_PACKAGE_DEBUG
+
+ Enable debug messages while executing CPack NuGet generator.
+
+ * Mandatory : NO
+ * Default   : OFF
+
+
+.. _nuget.org: http://nuget.org
+.. _version specification: https://docs.microsoft.com/en-us/nuget/reference/package-versioning#version-ranges-and-wildcards
+.. _(SPDX) license identifier: https://spdx.org/licenses/
+.. _SPDX specification: https://spdx.github.io/spdx-spec/appendix-IV-SPDX-license-expressions/
+
+.. NuGet spec docs https://docs.microsoft.com/en-us/nuget/reference/nuspec
diff --git a/share/cmake-3.22/Help/cpack_gen/packagemaker.rst b/share/cmake-3.22/Help/cpack_gen/packagemaker.rst
new file mode 100644
index 0000000..256446d
--- /dev/null
+++ b/share/cmake-3.22/Help/cpack_gen/packagemaker.rst
@@ -0,0 +1,87 @@
+CPack PackageMaker Generator
+----------------------------
+
+PackageMaker CPack generator (macOS).
+
+.. deprecated:: 3.17
+
+  Xcode no longer distributes the PackageMaker tools.
+  This CPack generator will be removed in a future version of CPack.
+
+Variables specific to CPack PackageMaker generator
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The following variable is specific to installers built on Mac
+macOS using PackageMaker:
+
+.. variable:: CPACK_OSX_PACKAGE_VERSION
+
+ The version of macOS that the resulting PackageMaker archive should be
+ compatible with. Different versions of macOS support different
+ features. For example, CPack can only build component-based installers for
+ macOS 10.4 or newer, and can only build installers that download
+ components on-the-fly for macOS 10.5 or newer. If left blank, this value
+ will be set to the minimum version of macOS that supports the requested
+ features. Set this variable to some value (e.g., 10.4) only if you want to
+ guarantee that your installer will work on that version of macOS, and
+ don't mind missing extra features available in the installer shipping with
+ later versions of macOS.
+
+Background Image
+""""""""""""""""
+
+.. versionadded:: 3.17
+
+This group of variables controls the background image of the generated
+installer.
+
+.. variable:: CPACK_PACKAGEMAKER_BACKGROUND
+
+ Adds a background to Distribution XML if specified. The value contains the
+ path to image in ``Resources`` directory.
+
+.. variable:: CPACK_PACKAGEMAKER_BACKGROUND_ALIGNMENT
+
+ Adds an ``alignment`` attribute to the background in Distribution XML.
+ Refer to Apple documentation for valid values.
+
+.. variable:: CPACK_PACKAGEMAKER_BACKGROUND_SCALING
+
+ Adds a ``scaling`` attribute to the background in Distribution XML.
+ Refer to Apple documentation for valid values.
+
+.. variable:: CPACK_PACKAGEMAKER_BACKGROUND_MIME_TYPE
+
+ Adds a ``mime-type`` attribute to the background in Distribution XML.
+ The option contains MIME type of an image.
+
+.. variable:: CPACK_PACKAGEMAKER_BACKGROUND_UTI
+
+ Adds an ``uti`` attribute to the background in Distribution XML.
+ The option contains UTI type of an image.
+
+.. variable:: CPACK_PACKAGEMAKER_BACKGROUND_DARKAQUA
+
+ Adds a background for the Dark Aqua theme to Distribution XML if
+ specified. The value contains the path to image in ``Resources``
+ directory.
+
+.. variable:: CPACK_PACKAGEMAKER_BACKGROUND_DARKAQUA_ALIGNMENT
+
+ Does the same as :variable:`CPACK_PACKAGEMAKER_BACKGROUND_ALIGNMENT` option,
+ but for the dark theme.
+
+.. variable:: CPACK_PACKAGEMAKER_BACKGROUND_DARKAQUA_SCALING
+
+ Does the same as :variable:`CPACK_PACKAGEMAKER_BACKGROUND_SCALING` option,
+ but for the dark theme.
+
+.. variable:: CPACK_PACKAGEMAKER_BACKGROUND_DARKAQUA_MIME_TYPE
+
+ Does the same as :variable:`CPACK_PACKAGEMAKER_BACKGROUND_MIME_TYPE` option,
+ but for the dark theme.
+
+.. variable:: CPACK_PACKAGEMAKER_BACKGROUND_DARKAQUA_UTI
+
+ Does the same as :variable:`CPACK_PACKAGEMAKER_BACKGROUND_UTI` option,
+ but for the dark theme.
diff --git a/share/cmake-3.22/Help/cpack_gen/productbuild.rst b/share/cmake-3.22/Help/cpack_gen/productbuild.rst
new file mode 100644
index 0000000..cf3041f
--- /dev/null
+++ b/share/cmake-3.22/Help/cpack_gen/productbuild.rst
@@ -0,0 +1,138 @@
+CPack productbuild Generator
+----------------------------
+
+.. versionadded:: 3.7
+
+productbuild CPack generator (macOS).
+
+Variables specific to CPack productbuild generator
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The following variable is specific to installers built on Mac
+macOS using ProductBuild:
+
+.. variable:: CPACK_COMMAND_PRODUCTBUILD
+
+ Path to the ``productbuild(1)`` command used to generate a product archive for
+ the macOS Installer or Mac App Store.  This variable can be used to override
+ the automatically detected command (or specify its location if the
+ auto-detection fails to find it).
+
+.. variable:: CPACK_PRODUCTBUILD_IDENTITY_NAME
+
+ .. versionadded:: 3.8
+
+ Adds a digital signature to the resulting package.
+
+
+.. variable:: CPACK_PRODUCTBUILD_KEYCHAIN_PATH
+
+ .. versionadded:: 3.8
+
+ Specify a specific keychain to search for the signing identity.
+
+
+.. variable:: CPACK_COMMAND_PKGBUILD
+
+ Path to the ``pkgbuild(1)`` command used to generate an macOS component package
+ on macOS.  This variable can be used to override the automatically detected
+ command (or specify its location if the auto-detection fails to find it).
+
+
+.. variable:: CPACK_PKGBUILD_IDENTITY_NAME
+
+ .. versionadded:: 3.8
+
+ Adds a digital signature to the resulting package.
+
+
+.. variable:: CPACK_PKGBUILD_KEYCHAIN_PATH
+
+ .. versionadded:: 3.8
+
+ Specify a specific keychain to search for the signing identity.
+
+
+.. variable:: CPACK_PREFLIGHT_<COMP>_SCRIPT
+
+ Full path to a file that will be used as the ``preinstall`` script for the
+ named ``<COMP>`` component's package, where ``<COMP>`` is the uppercased
+ component name.  No ``preinstall`` script is added if this variable is not
+ defined for a given component.
+
+
+.. variable:: CPACK_POSTFLIGHT_<COMP>_SCRIPT
+
+ Full path to a file that will be used as the ``postinstall`` script for the
+ named ``<COMP>`` component's package, where ``<COMP>`` is the uppercased
+ component name.  No ``postinstall`` script is added if this variable is not
+ defined for a given component.
+
+.. variable:: CPACK_PRODUCTBUILD_RESOURCES_DIR
+
+ .. versionadded:: 3.9
+
+ If specified the productbuild generator copies files from this directory
+ (including subdirectories) to the ``Resources`` directory. This is done
+ before the :variable:`CPACK_RESOURCE_FILE_WELCOME`,
+ :variable:`CPACK_RESOURCE_FILE_README`, and
+ :variable:`CPACK_RESOURCE_FILE_LICENSE` files are copied.
+
+Background Image
+""""""""""""""""
+
+.. versionadded:: 3.17
+
+This group of variables controls the background image of the generated
+installer.
+
+.. variable:: CPACK_PRODUCTBUILD_BACKGROUND
+
+ Adds a background to Distribution XML if specified. The value contains the
+ path to image in ``Resources`` directory.
+
+.. variable:: CPACK_PRODUCTBUILD_BACKGROUND_ALIGNMENT
+
+ Adds an ``alignment`` attribute to the background in Distribution XML.
+ Refer to Apple documentation for valid values.
+
+.. variable:: CPACK_PRODUCTBUILD_BACKGROUND_SCALING
+
+ Adds a ``scaling`` attribute to the background in Distribution XML.
+ Refer to Apple documentation for valid values.
+
+.. variable:: CPACK_PRODUCTBUILD_BACKGROUND_MIME_TYPE
+
+ Adds a ``mime-type`` attribute to the background in Distribution XML.
+ The option contains MIME type of an image.
+
+.. variable:: CPACK_PRODUCTBUILD_BACKGROUND_UTI
+
+ Adds an ``uti`` attribute to the background in Distribution XML.
+ The option contains UTI type of an image.
+
+.. variable:: CPACK_PRODUCTBUILD_BACKGROUND_DARKAQUA
+
+ Adds a background for the Dark Aqua theme to Distribution XML if
+ specified. The value contains the path to image in ``Resources``
+ directory.
+
+.. variable:: CPACK_PRODUCTBUILD_BACKGROUND_DARKAQUA_ALIGNMENT
+
+ Does the same as :variable:`CPACK_PRODUCTBUILD_BACKGROUND_ALIGNMENT` option,
+ but for the dark theme.
+
+.. variable:: CPACK_PRODUCTBUILD_BACKGROUND_DARKAQUA_SCALING
+
+ Does the same as :variable:`CPACK_PRODUCTBUILD_BACKGROUND_SCALING` option,
+ but for the dark theme.
+
+.. variable:: CPACK_PRODUCTBUILD_BACKGROUND_DARKAQUA_MIME_TYPE
+
+ Does the same as :variable:`CPACK_PRODUCTBUILD_BACKGROUND_MIME_TYPE` option,
+ but for the dark theme.
+
+.. variable:: CPACK_PRODUCTBUILD_BACKGROUND_DARKAQUA_UTI
+
+ Does the same as :variable:`CPACK_PRODUCTBUILD_BACKGROUND_UTI` option,
+ but for the dark theme.
diff --git a/share/cmake-3.22/Help/cpack_gen/rpm.rst b/share/cmake-3.22/Help/cpack_gen/rpm.rst
new file mode 100644
index 0000000..0d287fc
--- /dev/null
+++ b/share/cmake-3.22/Help/cpack_gen/rpm.rst
@@ -0,0 +1,1054 @@
+CPack RPM Generator
+-------------------
+
+The built in (binary) CPack RPM generator (Unix only)
+
+Variables specific to CPack RPM generator
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The CPack RPM generator may be used to create RPM packages using :module:`CPack`.
+The CPack RPM generator is a :module:`CPack` generator thus it uses the
+``CPACK_XXX`` variables used by :module:`CPack`.
+
+The CPack RPM generator has specific features which are controlled by the specifics
+``CPACK_RPM_XXX`` variables.
+
+``CPACK_RPM_<COMPONENT>_XXXX`` variables may be used in order to have
+**component** specific values.  Note however that ``<COMPONENT>`` refers to the
+**grouping name** written in upper case. It may be either a component name or
+a component GROUP name. Usually those variables correspond to RPM spec file
+entities. One may find information about spec files here
+http://www.rpm.org/wiki/Docs
+
+.. versionchanged:: 3.6
+
+ `<COMPONENT>` part of variables is preferred to be in upper case (e.g. if
+ component is named ``foo`` then use ``CPACK_RPM_FOO_XXXX`` variable name format)
+ as is with other ``CPACK_<COMPONENT>_XXXX`` variables.
+ For the purposes of back compatibility (CMake/CPack version 3.5 and lower)
+ support for same cased component (e.g. ``fOo`` would be used as
+ ``CPACK_RPM_fOo_XXXX``) is still supported for variables defined in older
+ versions of CMake/CPack but is not guaranteed for variables that
+ will be added in the future. For the sake of back compatibility same cased
+ component variables also override upper cased versions where both are
+ present.
+
+Here are some CPack RPM generator wiki resources that are here for historic
+reasons and are no longer maintained but may still prove useful:
+
+ - https://gitlab.kitware.com/cmake/community/-/wikis/doc/cpack/Configuration
+ - https://gitlab.kitware.com/cmake/community/-/wikis/doc/cpack/PackageGenerators#rpm-unix-only
+
+List of CPack RPM generator specific variables:
+
+.. variable:: CPACK_RPM_COMPONENT_INSTALL
+
+ Enable component packaging for CPack RPM generator
+
+ * Mandatory : NO
+ * Default   : OFF
+
+ If enabled (``ON``) multiple packages are generated. By default
+ a single package containing files of all components is generated.
+
+.. variable:: CPACK_RPM_PACKAGE_SUMMARY
+              CPACK_RPM_<component>_PACKAGE_SUMMARY
+
+ The RPM package summary.
+
+ * Mandatory : YES
+ * Default   : :variable:`CPACK_PACKAGE_DESCRIPTION_SUMMARY`
+
+ .. versionadded:: 3.2
+  Per-component ``CPACK_RPM_<component>_PACKAGE_SUMMARY`` variables.
+
+.. variable:: CPACK_RPM_PACKAGE_NAME
+              CPACK_RPM_<component>_PACKAGE_NAME
+
+ The RPM package name.
+
+ * Mandatory : YES
+ * Default   : :variable:`CPACK_PACKAGE_NAME`
+
+ .. versionadded:: 3.5
+  Per-component ``CPACK_RPM_<component>_PACKAGE_NAME`` variables.
+
+.. variable:: CPACK_RPM_FILE_NAME
+              CPACK_RPM_<component>_FILE_NAME
+
+ .. versionadded:: 3.6
+
+ Package file name.
+
+ * Mandatory : YES
+ * Default   : ``<CPACK_PACKAGE_FILE_NAME>[-<component>].rpm`` with spaces
+               replaced by '-'
+
+ This may be set to ``RPM-DEFAULT`` to allow ``rpmbuild`` tool to generate package
+ file name by itself.
+ Alternatively provided package file name must end with ``.rpm`` suffix.
+
+ .. note::
+
+   By using user provided spec file, rpm macro extensions such as for
+   generating ``debuginfo`` packages or by simply using multiple components more
+   than one rpm file may be generated, either from a single spec file or from
+   multiple spec files (each component execution produces its own spec file).
+   In such cases duplicate file names may occur as a result of this variable
+   setting or spec file content structure. Duplicate files get overwritten
+   and it is up to the packager to set the variables in a manner that will
+   prevent such errors.
+
+.. variable:: CPACK_RPM_MAIN_COMPONENT
+
+ .. versionadded:: 3.8
+
+ Main component that is packaged without component suffix.
+
+ * Mandatory : NO
+ * Default   : -
+
+ This variable can be set to any component or group name so that component or
+ group rpm package is generated without component suffix in filename and
+ package name.
+
+.. variable:: CPACK_RPM_PACKAGE_EPOCH
+
+ .. versionadded:: 3.10
+
+ The RPM package epoch
+
+ * Mandatory : No
+ * Default   : -
+
+ Optional number that should be incremented when changing versioning schemas
+ or fixing mistakes in the version numbers of older packages.
+
+.. variable:: CPACK_RPM_PACKAGE_VERSION
+
+ The RPM package version.
+
+ * Mandatory : YES
+ * Default   : :variable:`CPACK_PACKAGE_VERSION`
+
+.. variable:: CPACK_RPM_PACKAGE_ARCHITECTURE
+              CPACK_RPM_<component>_PACKAGE_ARCHITECTURE
+
+ The RPM package architecture.
+
+ * Mandatory : YES
+ * Default   : Native architecture output by ``uname -m``
+
+ This may be set to ``noarch`` if you know you are building a ``noarch`` package.
+
+ .. versionadded:: 3.3
+  Per-component ``CPACK_RPM_<component>_PACKAGE_ARCHITECTURE`` variables.
+
+.. variable:: CPACK_RPM_PACKAGE_RELEASE
+
+ The RPM package release.
+
+ * Mandatory : YES
+ * Default   : 1
+
+ This is the numbering of the RPM package itself, i.e. the version of the
+ packaging and not the version of the content (see
+ :variable:`CPACK_RPM_PACKAGE_VERSION`). One may change the default value if
+ the previous packaging was buggy and/or you want to put here a fancy Linux
+ distro specific numbering.
+
+.. note::
+
+ This is the string that goes into the RPM ``Release:`` field. Some distros
+ (e.g. Fedora, CentOS) require ``1%{?dist}`` format and not just a number.
+ ``%{?dist}`` part can be added by setting :variable:`CPACK_RPM_PACKAGE_RELEASE_DIST`.
+
+.. variable:: CPACK_RPM_PACKAGE_RELEASE_DIST
+
+ .. versionadded:: 3.6
+
+ The dist tag that is added  RPM ``Release:`` field.
+
+ * Mandatory : NO
+ * Default   : OFF
+
+ This is the reported ``%{dist}`` tag from the current distribution or empty
+ ``%{dist}`` if RPM macro is not set. If this variable is set then RPM
+ ``Release:`` field value is set to ``${CPACK_RPM_PACKAGE_RELEASE}%{?dist}``.
+
+.. variable:: CPACK_RPM_PACKAGE_LICENSE
+
+ The RPM package license policy.
+
+ * Mandatory : YES
+ * Default   : "unknown"
+
+.. variable:: CPACK_RPM_PACKAGE_GROUP
+              CPACK_RPM_<component>_PACKAGE_GROUP
+
+ The RPM package group.
+
+ * Mandatory : YES
+ * Default   : "unknown"
+
+ .. versionadded:: 3.5
+  Per-component ``CPACK_RPM_<component>_PACKAGE_GROUP`` variables.
+
+.. variable:: CPACK_RPM_PACKAGE_VENDOR
+
+ The RPM package vendor.
+
+ * Mandatory : YES
+ * Default   : CPACK_PACKAGE_VENDOR if set or "unknown"
+
+.. variable:: CPACK_RPM_PACKAGE_URL
+              CPACK_RPM_<component>_PACKAGE_URL
+
+ The projects URL.
+
+ * Mandatory : NO
+ * Default   : :variable:`CMAKE_PROJECT_HOMEPAGE_URL`
+
+ .. versionadded:: 3.12
+  The ``CMAKE_PROJECT_HOMEPAGE_URL`` variable.
+
+.. variable:: CPACK_RPM_PACKAGE_DESCRIPTION
+              CPACK_RPM_<component>_PACKAGE_DESCRIPTION
+
+ RPM package description.
+
+ * Mandatory : YES
+ * Default : :variable:`CPACK_COMPONENT_<compName>_DESCRIPTION` (component
+   based installers only) if set, :variable:`CPACK_PACKAGE_DESCRIPTION_FILE`
+   if set or "no package description available"
+
+ .. versionadded:: 3.2
+  Per-component ``CPACK_RPM_<component>_PACKAGE_DESCRIPTION`` variables.
+
+.. variable:: CPACK_RPM_COMPRESSION_TYPE
+
+ RPM compression type.
+
+ * Mandatory : NO
+ * Default   : -
+
+ May be used to override RPM compression type to be used to build the
+ RPM. For example some Linux distribution now default to ``lzma`` or ``xz``
+ compression whereas older cannot use such RPM. Using this one can enforce
+ compression type to be used.
+
+ Possible values are:
+
+ - lzma
+ - xz
+ - bzip2
+ - gzip
+
+.. variable:: CPACK_RPM_PACKAGE_AUTOREQ
+              CPACK_RPM_<component>_PACKAGE_AUTOREQ
+
+ RPM spec autoreq field.
+
+ * Mandatory : NO
+ * Default   : -
+
+ May be used to enable (``1``, ``yes``) or disable (``0``, ``no``) automatic
+ shared libraries dependency detection. Dependencies are added to requires list.
+
+ .. note::
+
+   By default automatic dependency detection is enabled by rpm generator.
+
+.. variable:: CPACK_RPM_PACKAGE_AUTOPROV
+              CPACK_RPM_<component>_PACKAGE_AUTOPROV
+
+ RPM spec autoprov field.
+
+ * Mandatory : NO
+ * Default   : -
+
+ May be used to enable (``1``, ``yes``) or disable (``0``, ``no``)
+ automatic listing of shared libraries that are provided by the package.
+ Shared libraries are added to provides list.
+
+ .. note::
+
+   By default automatic provides detection is enabled by rpm generator.
+
+.. variable:: CPACK_RPM_PACKAGE_AUTOREQPROV
+              CPACK_RPM_<component>_PACKAGE_AUTOREQPROV
+
+ RPM spec autoreqprov field.
+
+ * Mandatory : NO
+ * Default   : -
+
+ Variable enables/disables autoreq and autoprov at the same time.
+ See :variable:`CPACK_RPM_PACKAGE_AUTOREQ` and
+ :variable:`CPACK_RPM_PACKAGE_AUTOPROV` for more details.
+
+ .. note::
+
+   By default automatic detection feature is enabled by rpm.
+
+.. variable:: CPACK_RPM_PACKAGE_REQUIRES
+              CPACK_RPM_<component>_PACKAGE_REQUIRES
+
+ RPM spec requires field.
+
+ * Mandatory : NO
+ * Default   : -
+
+ May be used to set RPM dependencies (requires). Note that you must enclose
+ the complete requires string between quotes, for example::
+
+  set(CPACK_RPM_PACKAGE_REQUIRES "python >= 2.5.0, cmake >= 2.8")
+
+ The required package list of an RPM file could be printed with::
+
+  rpm -qp --requires file.rpm
+
+.. variable:: CPACK_RPM_PACKAGE_CONFLICTS
+              CPACK_RPM_<component>_PACKAGE_CONFLICTS
+
+ RPM spec conflicts field.
+
+ * Mandatory : NO
+ * Default   : -
+
+ May be used to set negative RPM dependencies (conflicts). Note that you must
+ enclose the complete requires string between quotes, for example::
+
+  set(CPACK_RPM_PACKAGE_CONFLICTS "libxml2")
+
+ The conflicting package list of an RPM file could be printed with::
+
+  rpm -qp --conflicts file.rpm
+
+.. variable:: CPACK_RPM_PACKAGE_REQUIRES_PRE
+              CPACK_RPM_<component>_PACKAGE_REQUIRES_PRE
+
+ .. versionadded:: 3.2
+
+ RPM spec requires(pre) field.
+
+ * Mandatory : NO
+ * Default   : -
+
+ May be used to set RPM preinstall dependencies (requires(pre)). Note that
+ you must enclose the complete requires string between quotes, for example::
+
+  set(CPACK_RPM_PACKAGE_REQUIRES_PRE "shadow-utils, initscripts")
+
+.. variable:: CPACK_RPM_PACKAGE_REQUIRES_POST
+              CPACK_RPM_<component>_PACKAGE_REQUIRES_POST
+
+ .. versionadded:: 3.2
+
+ RPM spec requires(post) field.
+
+ * Mandatory : NO
+ * Default   : -
+
+ May be used to set RPM postinstall dependencies (requires(post)). Note that
+ you must enclose the complete requires string between quotes, for example::
+
+  set(CPACK_RPM_PACKAGE_REQUIRES_POST "shadow-utils, initscripts")
+
+.. variable:: CPACK_RPM_PACKAGE_REQUIRES_POSTUN
+              CPACK_RPM_<component>_PACKAGE_REQUIRES_POSTUN
+
+ .. versionadded:: 3.2
+
+ RPM spec requires(postun) field.
+
+ * Mandatory : NO
+ * Default   : -
+
+ May be used to set RPM postuninstall dependencies (requires(postun)). Note
+ that you must enclose the complete requires string between quotes, for
+ example::
+
+  set(CPACK_RPM_PACKAGE_REQUIRES_POSTUN "shadow-utils, initscripts")
+
+.. variable:: CPACK_RPM_PACKAGE_REQUIRES_PREUN
+              CPACK_RPM_<component>_PACKAGE_REQUIRES_PREUN
+
+ .. versionadded:: 3.2
+
+ RPM spec requires(preun) field.
+
+ * Mandatory : NO
+ * Default   : -
+
+ May be used to set RPM preuninstall dependencies (requires(preun)). Note that
+ you must enclose the complete requires string between quotes, for example::
+
+  set(CPACK_RPM_PACKAGE_REQUIRES_PREUN "shadow-utils, initscripts")
+
+.. variable:: CPACK_RPM_PACKAGE_SUGGESTS
+              CPACK_RPM_<component>_PACKAGE_SUGGESTS
+
+ RPM spec suggest field.
+
+ * Mandatory : NO
+ * Default   : -
+
+ May be used to set weak RPM dependencies (suggests). If ``rpmbuild`` doesn't
+ support the ``Suggests`` tag, CPack will emit a warning and ignore this
+ variable. Note that you must enclose the complete requires string between
+ quotes.
+
+.. variable:: CPACK_RPM_PACKAGE_PROVIDES
+              CPACK_RPM_<component>_PACKAGE_PROVIDES
+
+ RPM spec provides field.
+
+ * Mandatory : NO
+ * Default   : -
+
+ May be used to set RPM dependencies (provides). The provided package list
+ of an RPM file could be printed with::
+
+  rpm -qp --provides file.rpm
+
+.. variable:: CPACK_RPM_PACKAGE_OBSOLETES
+              CPACK_RPM_<component>_PACKAGE_OBSOLETES
+
+ RPM spec obsoletes field.
+
+ * Mandatory : NO
+ * Default   : -
+
+ May be used to set RPM packages that are obsoleted by this one.
+
+.. variable:: CPACK_RPM_PACKAGE_RELOCATABLE
+
+ build a relocatable RPM.
+
+ * Mandatory : NO
+ * Default   : CPACK_PACKAGE_RELOCATABLE
+
+ If this variable is set to TRUE or ON, the CPack RPM generator will try
+ to build a relocatable RPM package. A relocatable RPM may
+ be installed using::
+
+  rpm --prefix or --relocate
+
+ in order to install it at an alternate place see rpm(8). Note that
+ currently this may fail if :variable:`CPACK_SET_DESTDIR` is set to ``ON``. If
+ :variable:`CPACK_SET_DESTDIR` is set then you will get a warning message but
+ if there is file installed with absolute path you'll get unexpected behavior.
+
+.. variable:: CPACK_RPM_SPEC_INSTALL_POST
+
+ Deprecated - use :variable:`CPACK_RPM_SPEC_MORE_DEFINE` instead.
+
+ * Mandatory : NO
+ * Default   : -
+ * Deprecated: YES
+
+ May be used to override the ``__spec_install_post`` section within the
+ generated spec file.  This affects the install step during package creation,
+ not during package installation.  For adding operations to be performed
+ during package installation, use
+ :variable:`CPACK_RPM_POST_INSTALL_SCRIPT_FILE` instead.
+
+.. variable:: CPACK_RPM_SPEC_MORE_DEFINE
+
+ RPM extended spec definitions lines.
+
+ * Mandatory : NO
+ * Default   : -
+
+ May be used to add any ``%define`` lines to the generated spec file.  An
+ example of its use is to prevent stripping of executables (but note that
+ this may also disable other default post install processing)::
+
+   set(CPACK_RPM_SPEC_MORE_DEFINE "%define __spec_install_post /bin/true")
+
+.. variable:: CPACK_RPM_PACKAGE_DEBUG
+
+ Toggle CPack RPM generator debug output.
+
+ * Mandatory : NO
+ * Default   : -
+
+ May be set when invoking cpack in order to trace debug information
+ during CPack RPM run. For example you may launch CPack like this::
+
+  cpack -D CPACK_RPM_PACKAGE_DEBUG=1 -G RPM
+
+.. variable:: CPACK_RPM_USER_BINARY_SPECFILE
+              CPACK_RPM_<componentName>_USER_BINARY_SPECFILE
+
+ A user provided spec file.
+
+ * Mandatory : NO
+ * Default   : -
+
+ May be set by the user in order to specify a USER binary spec file
+ to be used by the CPack RPM generator instead of generating the file.
+ The specified file will be processed by configure_file( @ONLY).
+
+.. variable:: CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE
+
+ Spec file template.
+
+ * Mandatory : NO
+ * Default   : -
+
+ If set CPack will generate a template for USER specified binary
+ spec file and stop with an error. For example launch CPack like this::
+
+  cpack -D CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE=1 -G RPM
+
+ The user may then use this file in order to hand-craft is own
+ binary spec file which may be used with
+ :variable:`CPACK_RPM_USER_BINARY_SPECFILE`.
+
+.. variable:: CPACK_RPM_PRE_INSTALL_SCRIPT_FILE
+              CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE
+              CPACK_RPM_PRE_TRANS_SCRIPT_FILE
+
+ Path to file containing pre install/uninstall/transaction script.
+
+ * Mandatory : NO
+ * Default   : -
+
+ May be used to embed a pre installation/uninstallation/transaction script in the spec file.
+ The referred script file (or both) will be read and directly
+ put after the ``%pre`` or ``%preun`` section
+ If :variable:`CPACK_RPM_COMPONENT_INSTALL` is set to ON the install/uninstall/transaction
+ script for each component can be overridden with
+ ``CPACK_RPM_<COMPONENT>_PRE_INSTALL_SCRIPT_FILE``,
+ ``CPACK_RPM_<COMPONENT>_PRE_UNINSTALL_SCRIPT_FILE``, and
+ ``CPACK_RPM_<COMPONENT>_PRE_TRANS_SCRIPT_FILE``
+ One may verify which scriptlet has been included with::
+
+  rpm -qp --scripts  package.rpm
+
+ .. versionadded:: 3.18
+  The ``CPACK_RPM_PRE_TRANS_SCRIPT_FILE`` variable.
+
+.. variable:: CPACK_RPM_POST_INSTALL_SCRIPT_FILE
+              CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE
+              CPACK_RPM_POST_TRANS_SCRIPT_FILE
+
+ Path to file containing post install/uninstall/transaction script.
+
+ * Mandatory : NO
+ * Default   : -
+
+ May be used to embed a post installation/uninstallation/transaction script in the spec file.
+ The referred script file (or both) will be read and directly
+ put after the ``%post`` or ``%postun`` section.
+ If :variable:`CPACK_RPM_COMPONENT_INSTALL` is set to ON the install/uninstall/transaction
+ script for each component can be overridden with
+ ``CPACK_RPM_<COMPONENT>_POST_INSTALL_SCRIPT_FILE``,
+ ``CPACK_RPM_<COMPONENT>_POST_UNINSTALL_SCRIPT_FILE``, and
+ ``CPACK_RPM_<COMPONENT>_POST_TRANS_SCRIPT_FILE``
+ One may verify which scriptlet has been included with::
+
+  rpm -qp --scripts  package.rpm
+
+ .. versionadded:: 3.18
+  The ``CPACK_RPM_POST_TRANS_SCRIPT_FILE`` variable.
+
+.. variable:: CPACK_RPM_USER_FILELIST
+              CPACK_RPM_<COMPONENT>_USER_FILELIST
+
+ * Mandatory : NO
+ * Default   : -
+
+ May be used to explicitly specify ``%(<directive>)`` file line
+ in the spec file. Like ``%config(noreplace)`` or any other directive
+ that be found in the ``%files`` section. Since
+ the CPack RPM generator is generating the list of files (and directories) the
+ user specified files of the ``CPACK_RPM_<COMPONENT>_USER_FILELIST`` list will
+ be removed from the generated list. If referring to directories do
+ not add a trailing slash.
+
+ .. versionadded:: 3.8
+  You can have multiple directives per line, as in
+  ``%attr(600,root,root) %config(noreplace)``.
+
+.. variable:: CPACK_RPM_CHANGELOG_FILE
+
+ RPM changelog file.
+
+ * Mandatory : NO
+ * Default   : -
+
+ May be used to embed a changelog in the spec file.
+ The referred file will be read and directly put after the ``%changelog``
+ section.
+
+.. variable:: CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST
+
+ list of path to be excluded.
+
+ * Mandatory : NO
+ * Default   : /etc /etc/init.d /usr /usr/bin /usr/include /usr/lib
+               /usr/libx32 /usr/lib64 /usr/share /usr/share/aclocal
+               /usr/share/doc
+
+ May be used to exclude path (directories or files) from the auto-generated
+ list of paths discovered by CPack RPM. The default value contains a
+ reasonable set of values if the variable is not defined by the user. If the
+ variable is defined by the user then the CPack RPM generator will NOT any of
+ the default path. If you want to add some path to the default list then you
+ can use :variable:`CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION` variable.
+
+ .. versionadded:: 3.10
+  Added ``/usr/share/aclocal`` to the default list of excludes.
+
+.. variable:: CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION
+
+ additional list of path to be excluded.
+
+ * Mandatory : NO
+ * Default   : -
+
+ May be used to add more exclude path (directories or files) from the initial
+ default list of excluded paths. See
+ :variable:`CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST`.
+
+.. variable:: CPACK_RPM_RELOCATION_PATHS
+
+ .. versionadded:: 3.2
+
+ Packages relocation paths list.
+
+ * Mandatory : NO
+ * Default   : -
+
+ May be used to specify more than one relocation path per relocatable RPM.
+ Variable contains a list of relocation paths that if relative are prefixed
+ by the value of :variable:`CPACK_RPM_<COMPONENT>_PACKAGE_PREFIX` or by the
+ value of :variable:`CPACK_PACKAGING_INSTALL_PREFIX` if the component version
+ is not provided.
+ Variable is not component based as its content can be used to set a different
+ path prefix for e.g. binary dir and documentation dir at the same time.
+ Only prefixes that are required by a certain component are added to that
+ component - component must contain at least one file/directory/symbolic link
+ with :variable:`CPACK_RPM_RELOCATION_PATHS` prefix for a certain relocation
+ path to be added. Package will not contain any relocation paths if there are
+ no files/directories/symbolic links on any of the provided prefix locations.
+ Packages that either do not contain any relocation paths or contain
+ files/directories/symbolic links that are outside relocation paths print
+ out an ``AUTHOR_WARNING`` that RPM will be partially relocatable.
+
+.. variable:: CPACK_RPM_<COMPONENT>_PACKAGE_PREFIX
+
+ .. versionadded:: 3.2
+
+ Per component relocation path install prefix.
+
+ * Mandatory : NO
+ * Default   : CPACK_PACKAGING_INSTALL_PREFIX
+
+ May be used to set per component :variable:`CPACK_PACKAGING_INSTALL_PREFIX`
+ for relocatable RPM packages.
+
+.. variable:: CPACK_RPM_NO_INSTALL_PREFIX_RELOCATION
+              CPACK_RPM_NO_<COMPONENT>_INSTALL_PREFIX_RELOCATION
+
+ .. versionadded:: 3.3
+
+ Removal of default install prefix from relocation paths list.
+
+ * Mandatory : NO
+ * Default   : CPACK_PACKAGING_INSTALL_PREFIX or CPACK_RPM_<COMPONENT>_PACKAGE_PREFIX
+               are treated as one of relocation paths
+
+ May be used to remove CPACK_PACKAGING_INSTALL_PREFIX and CPACK_RPM_<COMPONENT>_PACKAGE_PREFIX
+ from relocatable RPM prefix paths.
+
+.. variable:: CPACK_RPM_ADDITIONAL_MAN_DIRS
+
+ .. versionadded:: 3.3
+
+ * Mandatory : NO
+ * Default   : -
+
+ May be used to set additional man dirs that could potentially be compressed
+ by brp-compress RPM macro. Variable content must be a list of regular
+ expressions that point to directories containing man files or to man files
+ directly. Note that in order to compress man pages a path must also be
+ present in brp-compress RPM script and that brp-compress script must be
+ added to RPM configuration by the operating system.
+
+ Regular expressions that are added by default were taken from brp-compress
+ RPM macro:
+
+ - /usr/man/man.*
+ - /usr/man/.*/man.*
+ - /usr/info.*
+ - /usr/share/man/man.*
+ - /usr/share/man/.*/man.*
+ - /usr/share/info.*
+ - /usr/kerberos/man.*
+ - /usr/X11R6/man/man.*
+ - /usr/lib/perl5/man/man.*
+ - /usr/share/doc/.*/man/man.*
+ - /usr/lib/.*/man/man.*
+
+.. variable:: CPACK_RPM_DEFAULT_USER
+              CPACK_RPM_<compName>_DEFAULT_USER
+
+ .. versionadded:: 3.6
+
+ default user ownership of RPM content
+
+ * Mandatory : NO
+ * Default   : root
+
+ Value should be user name and not UID.
+ Note that <compName> must be in upper-case.
+
+.. variable:: CPACK_RPM_DEFAULT_GROUP
+              CPACK_RPM_<compName>_DEFAULT_GROUP
+
+ .. versionadded:: 3.6
+
+ default group ownership of RPM content
+
+ * Mandatory : NO
+ * Default   : root
+
+ Value should be group name and not GID.
+ Note that <compName> must be in upper-case.
+
+.. variable:: CPACK_RPM_DEFAULT_FILE_PERMISSIONS
+              CPACK_RPM_<compName>_DEFAULT_FILE_PERMISSIONS
+
+ .. versionadded:: 3.6
+
+ default permissions used for packaged files
+
+ * Mandatory : NO
+ * Default   : - (system default)
+
+ Accepted values are lists with ``PERMISSIONS``. Valid permissions
+ are:
+
+ - OWNER_READ
+ - OWNER_WRITE
+ - OWNER_EXECUTE
+ - GROUP_READ
+ - GROUP_WRITE
+ - GROUP_EXECUTE
+ - WORLD_READ
+ - WORLD_WRITE
+ - WORLD_EXECUTE
+
+ Note that <compName> must be in upper-case.
+
+.. variable:: CPACK_RPM_DEFAULT_DIR_PERMISSIONS
+              CPACK_RPM_<compName>_DEFAULT_DIR_PERMISSIONS
+
+ .. versionadded:: 3.6
+
+ default permissions used for packaged directories
+
+ * Mandatory : NO
+ * Default   : - (system default)
+
+ Accepted values are lists with PERMISSIONS. Valid permissions
+ are the same as for :variable:`CPACK_RPM_DEFAULT_FILE_PERMISSIONS`.
+ Note that <compName> must be in upper-case.
+
+.. variable:: CPACK_RPM_INSTALL_WITH_EXEC
+
+ .. versionadded:: 3.11
+
+ force execute permissions on programs and shared libraries
+
+ * Mandatory : NO
+ * Default   : - (system default)
+
+ Force set owner, group and world execute permissions on programs and shared
+ libraries. This can be used for creating valid rpm packages on systems such
+ as Debian where shared libraries do not have execute permissions set.
+
+.. note::
+
+ Programs and shared libraries without execute permissions are ignored during
+ separation of debug symbols from the binary for debuginfo packages.
+
+Packaging of Symbolic Links
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.3
+
+The CPack RPM generator supports packaging of symbolic links::
+
+  execute_process(COMMAND ${CMAKE_COMMAND}
+    -E create_symlink <relative_path_location> <symlink_name>)
+  install(FILES ${CMAKE_CURRENT_BINARY_DIR}/<symlink_name>
+    DESTINATION <symlink_location> COMPONENT libraries)
+
+Symbolic links will be optimized (paths will be shortened if possible)
+before being added to the package or if multiple relocation paths are
+detected, a post install symlink relocation script will be generated.
+
+Symbolic links may point to locations that are not packaged by the same
+package (either a different component or even not packaged at all) but
+those locations will be treated as if they were a part of the package
+while determining if symlink should be either created or present in a
+post install script - depending on relocation paths.
+
+.. versionchanged:: 3.6
+ Symbolic links that point to locations outside packaging path produce a
+ warning and are treated as non relocatable permanent symbolic links.
+ Previous versions of CMake produced an error in this case.
+
+Currently there are a few limitations though:
+
+* For component based packaging component interdependency is not checked
+  when processing symbolic links. Symbolic links pointing to content of
+  a different component are treated the same way as if pointing to location
+  that will not be packaged.
+
+* Symbolic links pointing to a location through one or more intermediate
+  symbolic links will not be handled differently - if the intermediate
+  symbolic link(s) is also on a relocatable path, relocating it during
+  package installation may cause initial symbolic link to point to an
+  invalid location.
+
+Packaging of debug information
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.7
+
+Debuginfo packages contain debug symbols and sources for debugging packaged
+binaries.
+
+Debuginfo RPM packaging has its own set of variables:
+
+.. variable:: CPACK_RPM_DEBUGINFO_PACKAGE
+              CPACK_RPM_<component>_DEBUGINFO_PACKAGE
+
+ Enable generation of debuginfo RPM package(s).
+
+ * Mandatory : NO
+ * Default   : OFF
+
+.. note::
+
+ Binaries must contain debug symbols before packaging so use either ``Debug``
+ or ``RelWithDebInfo`` for :variable:`CMAKE_BUILD_TYPE` variable value.
+
+ Additionally, if :variable:`CPACK_STRIP_FILES` is set, the files will be stripped before
+ they get to the RPM generator, so will not contain debug symbols and
+ a debuginfo package will not get built. Do not use with :variable:`CPACK_STRIP_FILES`.
+
+.. note::
+
+ Packages generated from packages without binary files, with binary files but
+ without execute permissions or without debug symbols will cause packaging
+ termination.
+
+.. variable:: CPACK_BUILD_SOURCE_DIRS
+
+ Provides locations of root directories of source files from which binaries
+ were built.
+
+ * Mandatory : YES if :variable:`CPACK_RPM_DEBUGINFO_PACKAGE` is set
+ * Default   : -
+
+.. note::
+
+ For CMake project :variable:`CPACK_BUILD_SOURCE_DIRS` is set by default to
+ point to :variable:`CMAKE_SOURCE_DIR` and :variable:`CMAKE_BINARY_DIR` paths.
+
+.. note::
+
+ Sources with path prefixes that do not fall under any location provided with
+ :variable:`CPACK_BUILD_SOURCE_DIRS` will not be present in debuginfo package.
+
+.. variable:: CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX
+              CPACK_RPM_<component>_BUILD_SOURCE_DIRS_PREFIX
+
+ Prefix of location where sources will be placed during package installation.
+
+ * Mandatory : YES if :variable:`CPACK_RPM_DEBUGINFO_PACKAGE` is set
+ * Default   : "/usr/src/debug/<CPACK_PACKAGE_FILE_NAME>" and
+               for component packaging "/usr/src/debug/<CPACK_PACKAGE_FILE_NAME>-<component>"
+
+.. note::
+
+ Each source path prefix is additionally suffixed by ``src_<index>`` where
+ index is index of the path used from :variable:`CPACK_BUILD_SOURCE_DIRS`
+ variable. This produces ``<CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX>/src_<index>``
+ replacement path.
+ Limitation is that replaced path part must be shorter or of equal
+ length than the length of its replacement. If that is not the case either
+ :variable:`CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX` variable has to be set to
+ a shorter path or source directories must be placed on a longer path.
+
+.. variable:: CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS
+
+ Directories containing sources that should be excluded from debuginfo packages.
+
+ * Mandatory : NO
+ * Default   : "/usr /usr/src /usr/src/debug"
+
+ Listed paths are owned by other RPM packages and should therefore not be
+ deleted on debuginfo package uninstallation.
+
+.. variable:: CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS_ADDITION
+
+ Paths that should be appended to :variable:`CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS`
+ for exclusion.
+
+ * Mandatory : NO
+ * Default   : -
+
+.. variable:: CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE
+
+ .. versionadded:: 3.8
+
+ Create a single debuginfo package even if components packaging is set.
+
+ * Mandatory : NO
+ * Default   : OFF
+
+ When this variable is enabled it produces a single debuginfo package even if
+ component packaging is enabled.
+
+ When using this feature in combination with components packaging and there is
+ more than one component this variable requires :variable:`CPACK_RPM_MAIN_COMPONENT`
+ to be set.
+
+.. note::
+
+ If none of the :variable:`CPACK_RPM_<component>_DEBUGINFO_PACKAGE` variables
+ is set then :variable:`CPACK_RPM_DEBUGINFO_PACKAGE` is automatically set to
+ ``ON`` when :variable:`CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE` is set.
+
+.. variable:: CPACK_RPM_DEBUGINFO_FILE_NAME
+              CPACK_RPM_<component>_DEBUGINFO_FILE_NAME
+
+ .. versionadded:: 3.9
+
+ Debuginfo package file name.
+
+ * Mandatory : NO
+ * Default   : rpmbuild tool generated package file name
+
+ Alternatively provided debuginfo package file name must end with ``.rpm``
+ suffix and should differ from file names of other generated packages.
+
+ Variable may contain ``@cpack_component@`` placeholder which will be
+ replaced by component name if component packaging is enabled otherwise it
+ deletes the placeholder.
+
+ Setting the variable to ``RPM-DEFAULT`` may be used to explicitly set
+ filename generation to default.
+
+.. note::
+
+ :variable:`CPACK_RPM_FILE_NAME` also supports rpmbuild tool generated package
+ file name - disabled by default but can be enabled by setting the variable to
+ ``RPM-DEFAULT``.
+
+Packaging of sources (SRPM)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.7
+
+SRPM packaging is enabled by setting :variable:`CPACK_RPM_PACKAGE_SOURCES`
+variable while usually using :variable:`CPACK_INSTALLED_DIRECTORIES` variable
+to provide directory containing CMakeLists.txt and source files.
+
+For CMake projects SRPM package would be produced by executing::
+
+  cpack -G RPM --config ./CPackSourceConfig.cmake
+
+.. note::
+
+ Produced SRPM package is expected to be built with :manual:`cmake(1)` executable
+ and packaged with :manual:`cpack(1)` executable so CMakeLists.txt has to be
+ located in root source directory and must be able to generate binary rpm
+ packages by executing ``cpack -G`` command. The two executables as well as
+ rpmbuild must also be present when generating binary rpm packages from the
+ produced SRPM package.
+
+Once the SRPM package is generated it can be used to generate binary packages
+by creating a directory structure for rpm generation and executing rpmbuild
+tool::
+
+  mkdir -p build_dir/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
+  rpmbuild --define "_topdir <path_to_build_dir>" --rebuild <SRPM_file_name>
+
+Generated packages will be located in build_dir/RPMS directory or its sub
+directories.
+
+.. note::
+
+ SRPM package internally uses CPack/RPM generator to generate binary packages
+ so CMakeScripts.txt can decide during the SRPM to binary rpm generation step
+ what content the package(s) should have as well as how they should be packaged
+ (monolithic or components). CMake can decide this for e.g. by reading environment
+ variables set by the package manager before starting the process of generating
+ binary rpm packages. This way a single SRPM package can be used to produce
+ different binary rpm packages on different platforms depending on the platform's
+ packaging rules.
+
+Source RPM packaging has its own set of variables:
+
+.. variable:: CPACK_RPM_PACKAGE_SOURCES
+
+ Should the content be packaged as a source rpm (default is binary rpm).
+
+ * Mandatory : NO
+ * Default   : OFF
+
+.. note::
+
+ For cmake projects :variable:`CPACK_RPM_PACKAGE_SOURCES` variable is set
+ to ``OFF`` in CPackConfig.cmake and ``ON`` in CPackSourceConfig.cmake
+ generated files.
+
+.. variable:: CPACK_RPM_SOURCE_PKG_BUILD_PARAMS
+
+ Additional command-line parameters provided to :manual:`cmake(1)` executable.
+
+ * Mandatory : NO
+ * Default   : -
+
+.. variable:: CPACK_RPM_SOURCE_PKG_PACKAGING_INSTALL_PREFIX
+
+ Packaging install prefix that would be provided in :variable:`CPACK_PACKAGING_INSTALL_PREFIX`
+ variable for producing binary RPM packages.
+
+ * Mandatory : YES
+ * Default   : "/"
+
+.. variable:: CPACK_RPM_BUILDREQUIRES
+
+ List of source rpm build dependencies.
+
+ * Mandatory : NO
+ * Default   : -
+
+ May be used to set source RPM build dependencies (BuildRequires). Note that
+ you must enclose the complete build requirements string between quotes, for
+ example::
+
+  set(CPACK_RPM_BUILDREQUIRES "python >= 2.5.0, cmake >= 2.8")
+
+.. variable:: CPACK_RPM_REQUIRES_EXCLUDE_FROM
+
+ .. versionadded:: 3.22
+
+ * Mandatory : NO
+ * Default   : -
+
+ May be used to keep the dependency generator from scanning specific files
+ or directories for dependencies.  Note that you can use a regular
+ expression that matches all of the directories or files, for example::
+
+  set(CPACK_RPM_REQUIRES_EXCLUDE_FROM "bin/libqsqloci.*\\.so.*")
diff --git a/share/cmake-3.22/Help/cpack_gen/wix.rst b/share/cmake-3.22/Help/cpack_gen/wix.rst
new file mode 100644
index 0000000..79f835e
--- /dev/null
+++ b/share/cmake-3.22/Help/cpack_gen/wix.rst
@@ -0,0 +1,322 @@
+CPack WIX Generator
+-------------------
+
+CPack WIX generator specific options
+
+.. versionadded:: 3.7
+  Support :variable:`CPACK_COMPONENT_<compName>_DISABLED` variable.
+
+Variables specific to CPack WIX generator
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The following variables are specific to the installers built on
+Windows using WiX.
+
+.. variable:: CPACK_WIX_UPGRADE_GUID
+
+ Upgrade GUID (``Product/@UpgradeCode``)
+
+ Will be automatically generated unless explicitly provided.
+
+ It should be explicitly set to a constant generated globally unique
+ identifier (GUID) to allow your installers to replace existing
+ installations that use the same GUID.
+
+ You may for example explicitly set this variable in your
+ CMakeLists.txt to the value that has been generated per default.  You
+ should not use GUIDs that you did not generate yourself or which may
+ belong to other projects.
+
+ A GUID shall have the following fixed length syntax::
+
+  XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
+
+ (each X represents an uppercase hexadecimal digit)
+
+.. variable:: CPACK_WIX_PRODUCT_GUID
+
+ Product GUID (``Product/@Id``)
+
+ Will be automatically generated unless explicitly provided.
+
+ If explicitly provided this will set the Product Id of your installer.
+
+ The installer will abort if it detects a pre-existing installation that
+ uses the same GUID.
+
+ The GUID shall use the syntax described for CPACK_WIX_UPGRADE_GUID.
+
+.. variable:: CPACK_WIX_LICENSE_RTF
+
+ RTF License File
+
+ If CPACK_RESOURCE_FILE_LICENSE has an .rtf extension it is used as-is.
+
+ If CPACK_RESOURCE_FILE_LICENSE has an .txt extension it is implicitly
+ converted to RTF by the WIX Generator.
+ The expected encoding of the .txt file is UTF-8.
+
+ With CPACK_WIX_LICENSE_RTF you can override the license file used by the
+ WIX Generator in case CPACK_RESOURCE_FILE_LICENSE is in an unsupported
+ format or the .txt -> .rtf conversion does not work as expected.
+
+.. variable:: CPACK_WIX_PRODUCT_ICON
+
+ The Icon shown next to the program name in Add/Remove programs.
+
+ If set, this icon is used in place of the default icon.
+
+.. variable:: CPACK_WIX_UI_REF
+
+ This variable allows you to override the Id of the ``<UIRef>`` element
+ in the WiX template.
+
+ The default is ``WixUI_InstallDir`` in case no CPack components have
+ been defined and ``WixUI_FeatureTree`` otherwise.
+
+.. variable:: CPACK_WIX_UI_BANNER
+
+ The bitmap will appear at the top of all installer pages other than the
+ welcome and completion dialogs.
+
+ If set, this image will replace the default banner image.
+
+ This image must be 493 by 58 pixels.
+
+.. variable:: CPACK_WIX_UI_DIALOG
+
+ Background bitmap used on the welcome and completion dialogs.
+
+ If this variable is set, the installer will replace the default dialog
+ image.
+
+ This image must be 493 by 312 pixels.
+
+.. variable:: CPACK_WIX_PROGRAM_MENU_FOLDER
+
+ Start menu folder name for launcher.
+
+ If this variable is not set, it will be initialized with CPACK_PACKAGE_NAME
+
+ .. versionadded:: 3.16
+  If this variable is set to ``.``, then application shortcuts will be
+  created directly in the start menu and the uninstaller shortcut will be
+  omitted.
+
+.. variable:: CPACK_WIX_CULTURES
+
+ Language(s) of the installer
+
+ Languages are compiled into the WixUI extension library.  To use them,
+ simply provide the name of the culture.  If you specify more than one
+ culture identifier in a comma or semicolon delimited list, the first one
+ that is found will be used.  You can find a list of supported languages at:
+ http://wix.sourceforge.net/manual-wix3/WixUI_localization.htm
+
+.. variable:: CPACK_WIX_TEMPLATE
+
+ Template file for WiX generation
+
+ If this variable is set, the specified template will be used to generate
+ the WiX wxs file.  This should be used if further customization of the
+ output is required.
+
+ If this variable is not set, the default MSI template included with CMake
+ will be used.
+
+.. variable:: CPACK_WIX_PATCH_FILE
+
+ Optional list of XML files with fragments to be inserted into
+ generated WiX sources.
+
+ .. versionadded:: 3.5
+  Support listing multiple patch files.
+
+ This optional variable can be used to specify an XML file that the
+ WIX generator will use to inject fragments into its generated
+ source files.
+
+ Patch files understood by the CPack WIX generator
+ roughly follow this RELAX NG compact schema:
+
+ .. code-block:: none
+
+    start = CPackWiXPatch
+
+    CPackWiXPatch = element CPackWiXPatch { CPackWiXFragment* }
+
+    CPackWiXFragment = element CPackWiXFragment
+    {
+        attribute Id { string },
+        fragmentContent*
+    }
+
+    fragmentContent = element * - CPackWiXFragment
+    {
+        (attribute * { text } | text | fragmentContent)*
+    }
+
+ Currently fragments can be injected into most
+ Component, File, Directory and Feature elements.
+
+ .. versionadded:: 3.3
+  The following additional special Ids can be used:
+
+  * ``#PRODUCT`` for the ``<Product>`` element.
+  * ``#PRODUCTFEATURE`` for the root ``<Feature>`` element.
+
+ .. versionadded:: 3.7
+  Support patching arbitrary ``<Feature>`` elements.
+
+ .. versionadded:: 3.9
+  Allow setting additional attributes.
+
+ The following example illustrates how this works.
+
+ Given that the WIX generator creates the following XML element:
+
+ .. code-block:: xml
+
+    <Component Id="CM_CP_applications.bin.my_libapp.exe" Guid="*"/>
+
+ The following XML patch file may be used to inject an Environment element
+ into it:
+
+ .. code-block:: xml
+
+    <CPackWiXPatch>
+      <CPackWiXFragment Id="CM_CP_applications.bin.my_libapp.exe">
+        <Environment Id="MyEnvironment" Action="set"
+          Name="MyVariableName" Value="MyVariableValue"/>
+      </CPackWiXFragment>
+    </CPackWiXPatch>
+
+.. variable:: CPACK_WIX_EXTRA_SOURCES
+
+ Extra WiX source files
+
+ This variable provides an optional list of extra WiX source files (.wxs)
+ that should be compiled and linked.  The full path to source files is
+ required.
+
+.. variable:: CPACK_WIX_EXTRA_OBJECTS
+
+ Extra WiX object files or libraries
+
+ This variable provides an optional list of extra WiX object (.wixobj)
+ and/or WiX library (.wixlib) files.  The full path to objects and libraries
+ is required.
+
+.. variable:: CPACK_WIX_EXTENSIONS
+
+ This variable provides a list of additional extensions for the WiX
+ tools light and candle.
+
+.. variable:: CPACK_WIX_<TOOL>_EXTENSIONS
+
+ This is the tool specific version of CPACK_WIX_EXTENSIONS.
+ ``<TOOL>`` can be either LIGHT or CANDLE.
+
+.. variable:: CPACK_WIX_<TOOL>_EXTRA_FLAGS
+
+ This list variable allows you to pass additional
+ flags to the WiX tool ``<TOOL>``.
+
+ Use it at your own risk.
+ Future versions of CPack may generate flags which may be in conflict
+ with your own flags.
+
+ ``<TOOL>`` can be either LIGHT or CANDLE.
+
+.. variable:: CPACK_WIX_CMAKE_PACKAGE_REGISTRY
+
+ If this variable is set the generated installer will create
+ an entry in the windows registry key
+ ``HKEY_LOCAL_MACHINE\Software\Kitware\CMake\Packages\<PackageName>``
+ The value for ``<PackageName>`` is provided by this variable.
+
+ Assuming you also install a CMake configuration file this will
+ allow other CMake projects to find your package with
+ the :command:`find_package` command.
+
+.. variable:: CPACK_WIX_PROPERTY_<PROPERTY>
+
+ .. versionadded:: 3.1
+
+ This variable can be used to provide a value for
+ the Windows Installer property ``<PROPERTY>``
+
+ The following list contains some example properties that can be used to
+ customize information under
+ "Programs and Features" (also known as "Add or Remove Programs")
+
+ * ARPCOMMENTS - Comments
+ * ARPHELPLINK - Help and support information URL
+ * ARPURLINFOABOUT - General information URL
+ * ARPURLUPDATEINFO - Update information URL
+ * ARPHELPTELEPHONE - Help and support telephone number
+ * ARPSIZE - Size (in kilobytes) of the application
+
+.. variable:: CPACK_WIX_ROOT_FEATURE_TITLE
+
+ .. versionadded:: 3.7
+
+ Sets the name of the root install feature in the WIX installer. Same as
+ CPACK_COMPONENT_<compName>_DISPLAY_NAME for components.
+
+.. variable:: CPACK_WIX_ROOT_FEATURE_DESCRIPTION
+
+ .. versionadded:: 3.7
+
+ Sets the description of the root install feature in the WIX installer. Same as
+ CPACK_COMPONENT_<compName>_DESCRIPTION for components.
+
+.. variable:: CPACK_WIX_SKIP_PROGRAM_FOLDER
+
+ .. versionadded:: 3.7
+
+ If this variable is set to true, the default install location
+ of the generated package will be CPACK_PACKAGE_INSTALL_DIRECTORY directly.
+ The install location will not be located relatively below
+ ProgramFiles or ProgramFiles64.
+
+  .. note::
+    Installers created with this feature do not take differences
+    between the system on which the installer is created
+    and the system on which the installer might be used into account.
+
+    It is therefore possible that the installer e.g. might try to install
+    onto a drive that is unavailable or unintended or a path that does not
+    follow the localization or convention of the system on which the
+    installation is performed.
+
+.. variable:: CPACK_WIX_ROOT_FOLDER_ID
+
+ .. versionadded:: 3.9
+
+ This variable allows specification of a custom root folder ID.
+ The generator specific ``<64>`` token can be used for
+ folder IDs that come in 32-bit and 64-bit variants.
+ In 32-bit builds the token will expand empty while in 64-bit builds
+ it will expand to ``64``.
+
+ When unset generated installers will default installing to
+ ``ProgramFiles<64>Folder``.
+
+.. variable:: CPACK_WIX_ROOT
+
+ This variable can optionally be set to the root directory
+ of a custom WiX Toolset installation.
+
+ When unspecified CPack will try to locate a WiX Toolset
+ installation via the ``WIX`` environment variable instead.
+
+.. variable:: CPACK_WIX_CUSTOM_XMLNS
+
+ .. versionadded:: 3.19
+
+ This variable provides a list of custom namespace declarations that are necessary
+ for using WiX extensions. Each declaration should be in the form name=url, where
+ name is the plain namespace without the usual xmlns: prefix and url is an unquoted
+ namespace url. A list of commonly known WiX schemata can be found here:
+ https://wixtoolset.org/documentation/manual/v3/xsd/
diff --git a/share/cmake-3.22/Help/envvar/ASM_DIALECT.rst b/share/cmake-3.22/Help/envvar/ASM_DIALECT.rst
new file mode 100644
index 0000000..c89515e
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/ASM_DIALECT.rst
@@ -0,0 +1,22 @@
+ASM<DIALECT>
+------------
+
+.. include:: ENV_VAR.txt
+
+Preferred executable for compiling a specific dialect of assembly language
+files. ``ASM<DIALECT>`` can be ``ASM``, ``ASM_NASM`` (Netwide Assembler),
+``ASM_MASM`` (Microsoft Assembler) or ``ASM-ATT`` (Assembler AT&T).
+Will only be used by CMake on the first configuration to determine
+``ASM<DIALECT>`` compiler, after which the value for ``ASM<DIALECT>`` is stored
+in the cache as
+:variable:`CMAKE_ASM<DIALECT>_COMPILER <CMAKE_<LANG>_COMPILER>`. For subsequent
+configuration runs, the environment variable will be ignored in favor of
+:variable:`CMAKE_ASM<DIALECT>_COMPILER <CMAKE_<LANG>_COMPILER>`.
+
+.. note::
+  Options that are required to make the compiler work correctly can be included;
+  they can not be changed.
+
+.. code-block:: console
+
+  $ export ASM="custom-compiler --arg1 --arg2"
diff --git a/share/cmake-3.18/Help/envvar/ASM_DIALECTFLAGS.rst b/share/cmake-3.22/Help/envvar/ASM_DIALECTFLAGS.rst
similarity index 100%
rename from share/cmake-3.18/Help/envvar/ASM_DIALECTFLAGS.rst
rename to share/cmake-3.22/Help/envvar/ASM_DIALECTFLAGS.rst
diff --git a/share/cmake-3.22/Help/envvar/CC.rst b/share/cmake-3.22/Help/envvar/CC.rst
new file mode 100644
index 0000000..1bb8d51
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/CC.rst
@@ -0,0 +1,19 @@
+CC
+--
+
+.. include:: ENV_VAR.txt
+
+Preferred executable for compiling ``C`` language files. Will only be used by
+CMake on the first configuration to determine ``C`` compiler, after which the
+value for ``CC`` is stored in the cache as
+:variable:`CMAKE_C_COMPILER <CMAKE_<LANG>_COMPILER>`. For any configuration run
+(including the first), the environment variable will be ignored if the
+:variable:`CMAKE_C_COMPILER <CMAKE_<LANG>_COMPILER>` variable is defined.
+
+.. note::
+  Options that are required to make the compiler work correctly can be included;
+  they can not be changed.
+
+.. code-block:: console
+
+  $ export CC="custom-compiler --arg1 --arg2"
diff --git a/share/cmake-3.22/Help/envvar/CCMAKE_COLORS.rst b/share/cmake-3.22/Help/envvar/CCMAKE_COLORS.rst
new file mode 100644
index 0000000..4e76bf8
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/CCMAKE_COLORS.rst
@@ -0,0 +1,36 @@
+CCMAKE_COLORS
+-------------
+
+.. versionadded:: 3.18
+
+Determines what colors are used by the CMake curses interface,
+when run on a terminal that supports colors.
+The syntax follows the same conventions as ``LS_COLORS``;
+that is, a list of key/value pairs separated by ``:``.
+
+Keys are a single letter corresponding to a CMake cache variable type:
+
+- ``s``: A ``STRING``.
+- ``p``: A ``FILEPATH``.
+- ``c``: A value which has an associated list of choices.
+- ``y``: A ``BOOL`` which has a true-like value (e.g. ``ON``, ``YES``).
+- ``n``: A ``BOOL`` which has a false-like value (e.g. ``OFF``, ``NO``).
+
+Values are an integer number that specifies what color to use.
+``0`` is black (you probably don't want to use that).
+Others are determined by your terminal's color support.
+Most (color) terminals will support at least 8 or 16 colors.
+Some will support up to 256 colors. The colors will likely match
+`this chart <https://upload.wikimedia.org/wikipedia/commons/1/15/Xterm_256color_chart.svg>`_,
+although the first 16 colors may match the original
+`CGA color palette <https://en.wikipedia.org/wiki/Color_Graphics_Adapter#Color_palette>`_.
+(Many modern terminal emulators also allow their color palette,
+at least for the first 16 colors, to be configured by the user.)
+
+Note that fairly minimal checking is done for bad colors
+(although a value higher than what curses believes your terminal supports
+will be silently ignored) or bad syntax.
+
+For example::
+
+  CCMAKE_COLORS='s=39:p=220:c=207:n=196:y=46'
diff --git a/share/cmake-3.18/Help/envvar/CFLAGS.rst b/share/cmake-3.22/Help/envvar/CFLAGS.rst
similarity index 100%
rename from share/cmake-3.18/Help/envvar/CFLAGS.rst
rename to share/cmake-3.22/Help/envvar/CFLAGS.rst
diff --git a/share/cmake-3.22/Help/envvar/CMAKE_APPLE_SILICON_PROCESSOR.rst b/share/cmake-3.22/Help/envvar/CMAKE_APPLE_SILICON_PROCESSOR.rst
new file mode 100644
index 0000000..adecb72
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/CMAKE_APPLE_SILICON_PROCESSOR.rst
@@ -0,0 +1,13 @@
+CMAKE_APPLE_SILICON_PROCESSOR
+-----------------------------
+
+.. versionadded:: 3.19.2
+
+.. include:: ENV_VAR.txt
+
+On Apple Silicon hosts running macOS, set this environment variable to tell
+CMake what architecture to use for :variable:`CMAKE_HOST_SYSTEM_PROCESSOR`.
+The value must be either ``arm64`` or ``x86_64``.
+
+The :variable:`CMAKE_APPLE_SILICON_PROCESSOR` normal variable, if set,
+overrides this environment variable.
diff --git a/share/cmake-3.22/Help/envvar/CMAKE_BUILD_PARALLEL_LEVEL.rst b/share/cmake-3.22/Help/envvar/CMAKE_BUILD_PARALLEL_LEVEL.rst
new file mode 100644
index 0000000..dbc589a
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/CMAKE_BUILD_PARALLEL_LEVEL.rst
@@ -0,0 +1,13 @@
+CMAKE_BUILD_PARALLEL_LEVEL
+--------------------------
+
+.. versionadded:: 3.12
+
+.. include:: ENV_VAR.txt
+
+Specifies the maximum number of concurrent processes to use when building
+using the ``cmake --build`` command line
+:ref:`Build Tool Mode <Build Tool Mode>`.
+
+If this variable is defined empty the native build tool's default number is
+used.
diff --git a/share/cmake-3.22/Help/envvar/CMAKE_BUILD_TYPE.rst b/share/cmake-3.22/Help/envvar/CMAKE_BUILD_TYPE.rst
new file mode 100644
index 0000000..f798aff
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/CMAKE_BUILD_TYPE.rst
@@ -0,0 +1,10 @@
+CMAKE_BUILD_TYPE
+----------------
+
+.. versionadded:: 3.22
+
+.. include:: ENV_VAR.txt
+
+The ``CMAKE_BUILD_TYPE`` environment variable specifies a default value
+for the :variable:`CMAKE_BUILD_TYPE` variable when there is no explicit
+configuration given on the first run while creating a new build tree.
diff --git a/share/cmake-3.22/Help/envvar/CMAKE_CONFIGURATION_TYPES.rst b/share/cmake-3.22/Help/envvar/CMAKE_CONFIGURATION_TYPES.rst
new file mode 100644
index 0000000..833aa4a
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/CMAKE_CONFIGURATION_TYPES.rst
@@ -0,0 +1,11 @@
+CMAKE_CONFIGURATION_TYPES
+-------------------------
+
+.. versionadded:: 3.22
+
+.. include:: ENV_VAR.txt
+
+The ``CMAKE_CONFIGURATION_TYPES`` environment variable specifies a
+default value for the :variable:`CMAKE_CONFIGURATION_TYPES` variable
+when there is no explicit configuration given on the first run while
+creating a new build tree.
diff --git a/share/cmake-3.18/Help/envvar/CMAKE_CONFIG_TYPE.rst b/share/cmake-3.22/Help/envvar/CMAKE_CONFIG_TYPE.rst
similarity index 100%
rename from share/cmake-3.18/Help/envvar/CMAKE_CONFIG_TYPE.rst
rename to share/cmake-3.22/Help/envvar/CMAKE_CONFIG_TYPE.rst
diff --git a/share/cmake-3.22/Help/envvar/CMAKE_EXPORT_COMPILE_COMMANDS.rst b/share/cmake-3.22/Help/envvar/CMAKE_EXPORT_COMPILE_COMMANDS.rst
new file mode 100644
index 0000000..9e678be
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/CMAKE_EXPORT_COMPILE_COMMANDS.rst
@@ -0,0 +1,11 @@
+CMAKE_EXPORT_COMPILE_COMMANDS
+-----------------------------
+
+.. versionadded:: 3.17
+
+.. include:: ENV_VAR.txt
+
+The default value for :variable:`CMAKE_EXPORT_COMPILE_COMMANDS` when there
+is no explicit configuration given on the first run while creating a new
+build tree.  On later runs in an existing build tree the value persists in
+the cache as :variable:`CMAKE_EXPORT_COMPILE_COMMANDS`.
diff --git a/share/cmake-3.22/Help/envvar/CMAKE_GENERATOR.rst b/share/cmake-3.22/Help/envvar/CMAKE_GENERATOR.rst
new file mode 100644
index 0000000..3488b04
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/CMAKE_GENERATOR.rst
@@ -0,0 +1,18 @@
+CMAKE_GENERATOR
+---------------
+
+.. versionadded:: 3.15
+
+.. include:: ENV_VAR.txt
+
+Specifies the CMake default generator to use when no generator is supplied
+with ``-G``. If the provided value doesn't name a generator known by CMake,
+the internal default is used.  Either way the resulting generator selection
+is stored in the :variable:`CMAKE_GENERATOR` variable.
+
+Some generators may be additionally configured using the environment
+variables:
+
+* :envvar:`CMAKE_GENERATOR_PLATFORM`
+* :envvar:`CMAKE_GENERATOR_TOOLSET`
+* :envvar:`CMAKE_GENERATOR_INSTANCE`
diff --git a/share/cmake-3.22/Help/envvar/CMAKE_GENERATOR_INSTANCE.rst b/share/cmake-3.22/Help/envvar/CMAKE_GENERATOR_INSTANCE.rst
new file mode 100644
index 0000000..8ca7d80
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/CMAKE_GENERATOR_INSTANCE.rst
@@ -0,0 +1,9 @@
+CMAKE_GENERATOR_INSTANCE
+------------------------
+
+.. versionadded:: 3.15
+
+.. include:: ENV_VAR.txt
+
+Default value for :variable:`CMAKE_GENERATOR_INSTANCE` if no Cache entry is
+present. This value is only applied if :envvar:`CMAKE_GENERATOR` is set.
diff --git a/share/cmake-3.22/Help/envvar/CMAKE_GENERATOR_PLATFORM.rst b/share/cmake-3.22/Help/envvar/CMAKE_GENERATOR_PLATFORM.rst
new file mode 100644
index 0000000..b039845
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/CMAKE_GENERATOR_PLATFORM.rst
@@ -0,0 +1,10 @@
+CMAKE_GENERATOR_PLATFORM
+------------------------
+
+.. versionadded:: 3.15
+
+.. include:: ENV_VAR.txt
+
+Default value for :variable:`CMAKE_GENERATOR_PLATFORM` if no Cache entry
+is present and no value is specified by :manual:`cmake(1)` ``-A`` option.
+This value is only applied if :envvar:`CMAKE_GENERATOR` is set.
diff --git a/share/cmake-3.22/Help/envvar/CMAKE_GENERATOR_TOOLSET.rst b/share/cmake-3.22/Help/envvar/CMAKE_GENERATOR_TOOLSET.rst
new file mode 100644
index 0000000..394dd88
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/CMAKE_GENERATOR_TOOLSET.rst
@@ -0,0 +1,10 @@
+CMAKE_GENERATOR_TOOLSET
+-----------------------
+
+.. versionadded:: 3.15
+
+.. include:: ENV_VAR.txt
+
+Default value for :variable:`CMAKE_GENERATOR_TOOLSET` if no Cache entry
+is present and no value is specified by :manual:`cmake(1)` ``-T`` option.
+This value is only applied if :envvar:`CMAKE_GENERATOR` is set.
diff --git a/share/cmake-3.22/Help/envvar/CMAKE_INSTALL_MODE.rst b/share/cmake-3.22/Help/envvar/CMAKE_INSTALL_MODE.rst
new file mode 100644
index 0000000..4549ea1
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/CMAKE_INSTALL_MODE.rst
@@ -0,0 +1,116 @@
+CMAKE_INSTALL_MODE
+------------------
+
+.. versionadded:: 3.22
+
+.. include:: ENV_VAR.txt
+
+The ``CMAKE_INSTALL_MODE`` environment variable allows users to operate
+CMake in an alternate mode of :command:`file(INSTALL)` and :command:`install()`.
+
+The default behavior for an installation is to copy a source file from a
+source directory into a destination directory. This environment variable
+however allows the user to override this behavior, causing CMake to create
+symbolic links instead.
+
+Usage Scenarios
+^^^^^^^^^^^^^^^
+
+Installing symbolic links rather than copying files can help in the following
+ways:
+
+* Conserving storage space because files do not have to be duplicated on disk.
+* Changes to the source of the symbolic link are seen at the install
+  destination without having to re-run the install step.
+* Editing through the link at the install destination will modify the source
+  of the link. This may be useful when dealing with CMake project hierarchies,
+  i.e. using :module:`ExternalProject` and consistent source navigation and
+  refactoring is desired across projects.
+
+Allowed Values
+^^^^^^^^^^^^^^
+
+The following values are allowed for ``CMAKE_INSTALL_MODE``:
+
+``COPY``, empty or unset
+  Duplicate the file at its destination.  This is the default behavior.
+
+``ABS_SYMLINK``
+  Create an *absolute* symbolic link to the source file at the destination.
+  Halt with an error if the link cannot be created.
+
+``ABS_SYMLINK_OR_COPY``
+  Like ``ABS_SYMLINK`` but fall back to silently copying if the symlink
+  couldn't be created.
+
+``REL_SYMLINK``
+  Create a *relative* symbolic link to the source file at the destination.
+  Halt with an error if the link cannot be created.
+
+``REL_SYMLINK_OR_COPY``
+  Like ``REL_SYMLINK`` but fall back to silently copying if the symlink
+  couldn't be created.
+
+``SYMLINK``
+  Try as if through ``REL_SYMLINK`` and fall back to ``ABS_SYMLINK`` if the
+  referenced file cannot be expressed using a relative path.
+  Halt with an error if the link cannot be created.
+
+``SYMLINK_OR_COPY``
+  Like ``SYMLINK`` but fall back to silently copying if the symlink couldn't
+  be created.
+
+.. note::
+  A symbolic link consists of a reference file path rather than contents of its
+  own, hence there are two ways to express the relation, either by a *relative*
+  or an *absolute* path.
+
+When To Set The Environment Variable
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+For the environment variable to take effect, it must be set during the correct
+build phase(s).
+
+* If the project calls :command:`file(INSTALL)` directly, the environment
+  variable must be set during the configuration phase.
+* In order to apply to :command:`install()`, the environment variable must be
+  set during installation.  This could be during a build if using the
+  ``install`` or ``package`` build targets, or separate from the build when
+  invoking an install or running :manual:`cpack <cpack(1)>` from the command
+  line.
+* When using :module:`ExternalProject`, it might be required during the build
+  phase, since the external project's own configure, build and install steps
+  will execute during the main project's build phase.
+
+Given the above, it is recommended to set the environment variable consistently
+across all phases (configure, build and install).
+
+Caveats
+^^^^^^^
+
+Use this environment variable with caution. The following highlights some
+points to be considered:
+
+* ``CMAKE_INSTALL_MODE`` only affects files, not directories.
+
+* Symbolic links are not available on all platforms.
+
+* The way this environment variable interacts with the install step of
+  :module:`ExternalProject` is more complex. For further details, see that
+  module's documentation.
+
+* A symbolic link ties the destination to the source in a persistent way.
+  Writing to either of the two affects both file system objects.
+  This is in contrast to normal install behavior which only copies files as
+  they were at the time the install was performed, with no enduring
+  relationship between the source and destination of the install.
+
+* Combining ``CMAKE_INSTALL_MODE`` with :prop_tgt:`IOS_INSTALL_COMBINED` is
+  not supported.
+
+* Changing ``CMAKE_INSTALL_MODE`` from what it was on a previous run can lead
+  to unexpected results.  Moving from a non-symlinking mode to a symlinking
+  mode will discard any previous file at the destination, but the reverse is
+  not true.  Once a symlink exists at the destination, even if you switch to a
+  non-symlink mode, the symlink will continue to exist at the destination and
+  will not be replaced by an actual file.
diff --git a/share/cmake-3.22/Help/envvar/CMAKE_LANG_COMPILER_LAUNCHER.rst b/share/cmake-3.22/Help/envvar/CMAKE_LANG_COMPILER_LAUNCHER.rst
new file mode 100644
index 0000000..c384fa1
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/CMAKE_LANG_COMPILER_LAUNCHER.rst
@@ -0,0 +1,12 @@
+CMAKE_<LANG>_COMPILER_LAUNCHER
+------------------------------
+
+.. versionadded:: 3.17
+
+.. include:: ENV_VAR.txt
+
+Default compiler launcher to use for the specified language. Will only be used
+by CMake to initialize the variable on the first configuration. Afterwards, it
+is available through the cache setting of the variable of the same name. For
+any configuration run (including the first), the environment variable will be
+ignored if the :variable:`CMAKE_<LANG>_COMPILER_LAUNCHER` variable is defined.
diff --git a/share/cmake-3.22/Help/envvar/CMAKE_LANG_LINKER_LAUNCHER.rst b/share/cmake-3.22/Help/envvar/CMAKE_LANG_LINKER_LAUNCHER.rst
new file mode 100644
index 0000000..6251d9c
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/CMAKE_LANG_LINKER_LAUNCHER.rst
@@ -0,0 +1,13 @@
+CMAKE_<LANG>_LINKER_LAUNCHER
+----------------------------
+
+.. versionadded:: 3.21
+
+.. include:: ENV_VAR.txt
+
+Default launcher to use when linking a target of the specified language. Will
+only be used by CMake to initialize the variable on the first configuration.
+Afterwards, it is available through the cache setting of the variable of the
+same name. For any configuration run (including the first), the environment
+variable will be ignored if the :variable:`CMAKE_<LANG>_LINKER_LAUNCHER`
+variable is defined.
diff --git a/share/cmake-3.18/Help/envvar/CMAKE_MSVCIDE_RUN_PATH.rst b/share/cmake-3.22/Help/envvar/CMAKE_MSVCIDE_RUN_PATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/envvar/CMAKE_MSVCIDE_RUN_PATH.rst
rename to share/cmake-3.22/Help/envvar/CMAKE_MSVCIDE_RUN_PATH.rst
diff --git a/share/cmake-3.22/Help/envvar/CMAKE_NO_VERBOSE.rst b/share/cmake-3.22/Help/envvar/CMAKE_NO_VERBOSE.rst
new file mode 100644
index 0000000..fe733f8
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/CMAKE_NO_VERBOSE.rst
@@ -0,0 +1,10 @@
+CMAKE_NO_VERBOSE
+----------------
+
+.. versionadded:: 3.14
+
+Disables verbose output from CMake when :envvar:`VERBOSE` environment variable
+is set.
+
+Only your build tool of choice will still print verbose output when you start
+to actually build your project.
diff --git a/share/cmake-3.18/Help/envvar/CMAKE_OSX_ARCHITECTURES.rst b/share/cmake-3.22/Help/envvar/CMAKE_OSX_ARCHITECTURES.rst
similarity index 100%
rename from share/cmake-3.18/Help/envvar/CMAKE_OSX_ARCHITECTURES.rst
rename to share/cmake-3.22/Help/envvar/CMAKE_OSX_ARCHITECTURES.rst
diff --git a/share/cmake-3.18/Help/envvar/CMAKE_PREFIX_PATH.rst b/share/cmake-3.22/Help/envvar/CMAKE_PREFIX_PATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/envvar/CMAKE_PREFIX_PATH.rst
rename to share/cmake-3.22/Help/envvar/CMAKE_PREFIX_PATH.rst
diff --git a/share/cmake-3.22/Help/envvar/CMAKE_TOOLCHAIN_FILE.rst b/share/cmake-3.22/Help/envvar/CMAKE_TOOLCHAIN_FILE.rst
new file mode 100644
index 0000000..7ea9cea
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/CMAKE_TOOLCHAIN_FILE.rst
@@ -0,0 +1,12 @@
+CMAKE_TOOLCHAIN_FILE
+--------------------
+
+.. versionadded:: 3.21
+
+.. include:: ENV_VAR.txt
+
+The ``CMAKE_TOOLCHAIN_FILE`` environment variable specifies a default value
+for the :variable:`CMAKE_TOOLCHAIN_FILE` variable when there is no explicit
+configuration given on the first run while creating a new build tree.
+On later runs in an existing build tree the value persists in the cache
+as :variable:`CMAKE_TOOLCHAIN_FILE`.
diff --git a/share/cmake-3.22/Help/envvar/CSFLAGS.rst b/share/cmake-3.22/Help/envvar/CSFLAGS.rst
new file mode 100644
index 0000000..784328a
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/CSFLAGS.rst
@@ -0,0 +1,15 @@
+CSFLAGS
+-------
+
+.. versionadded:: 3.9.2
+
+.. include:: ENV_VAR.txt
+
+Default compilation flags to be used when compiling ``CSharp`` files. Will only be
+used by CMake on the first configuration to determine ``CSharp`` default
+compilation flags, after which the value for ``CSFLAGS`` is stored in the cache
+as :variable:`CMAKE_CSharp_FLAGS <CMAKE_<LANG>_FLAGS>`. For any configuration
+run (including the first), the environment variable will be ignored if the
+:variable:`CMAKE_CSharp_FLAGS <CMAKE_<LANG>_FLAGS>` variable is defined.
+
+See also :variable:`CMAKE_CSharp_FLAGS_INIT <CMAKE_<LANG>_FLAGS_INIT>`.
diff --git a/share/cmake-3.18/Help/envvar/CTEST_INTERACTIVE_DEBUG_MODE.rst b/share/cmake-3.22/Help/envvar/CTEST_INTERACTIVE_DEBUG_MODE.rst
similarity index 100%
rename from share/cmake-3.18/Help/envvar/CTEST_INTERACTIVE_DEBUG_MODE.rst
rename to share/cmake-3.22/Help/envvar/CTEST_INTERACTIVE_DEBUG_MODE.rst
diff --git a/share/cmake-3.18/Help/envvar/CTEST_OUTPUT_ON_FAILURE.rst b/share/cmake-3.22/Help/envvar/CTEST_OUTPUT_ON_FAILURE.rst
similarity index 100%
rename from share/cmake-3.18/Help/envvar/CTEST_OUTPUT_ON_FAILURE.rst
rename to share/cmake-3.22/Help/envvar/CTEST_OUTPUT_ON_FAILURE.rst
diff --git a/share/cmake-3.18/Help/envvar/CTEST_PARALLEL_LEVEL.rst b/share/cmake-3.22/Help/envvar/CTEST_PARALLEL_LEVEL.rst
similarity index 100%
rename from share/cmake-3.18/Help/envvar/CTEST_PARALLEL_LEVEL.rst
rename to share/cmake-3.22/Help/envvar/CTEST_PARALLEL_LEVEL.rst
diff --git a/share/cmake-3.22/Help/envvar/CTEST_PROGRESS_OUTPUT.rst b/share/cmake-3.22/Help/envvar/CTEST_PROGRESS_OUTPUT.rst
new file mode 100644
index 0000000..8c29d7d
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/CTEST_PROGRESS_OUTPUT.rst
@@ -0,0 +1,18 @@
+CTEST_PROGRESS_OUTPUT
+---------------------
+
+.. versionadded:: 3.13
+
+.. include:: ENV_VAR.txt
+
+Boolean environment variable that affects how :manual:`ctest <ctest(1)>`
+command output reports overall progress.  When set to ``1``, ``TRUE``, ``ON`` or anything
+else that evaluates to boolean true, progress is reported by repeatedly
+updating the same line.  This greatly reduces the overall verbosity, but is
+only supported when output is sent directly to a terminal.  If the environment
+variable is not set or has a value that evaluates to false, output is reported
+normally with each test having its own start and end lines logged to the
+output.
+
+The ``--progress`` option to :manual:`ctest <ctest(1)>` overrides this
+environment variable if both are given.
diff --git a/share/cmake-3.18/Help/envvar/CTEST_USE_LAUNCHERS_DEFAULT.rst b/share/cmake-3.22/Help/envvar/CTEST_USE_LAUNCHERS_DEFAULT.rst
similarity index 100%
rename from share/cmake-3.18/Help/envvar/CTEST_USE_LAUNCHERS_DEFAULT.rst
rename to share/cmake-3.22/Help/envvar/CTEST_USE_LAUNCHERS_DEFAULT.rst
diff --git a/share/cmake-3.22/Help/envvar/CUDAARCHS.rst b/share/cmake-3.22/Help/envvar/CUDAARCHS.rst
new file mode 100644
index 0000000..82369cd
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/CUDAARCHS.rst
@@ -0,0 +1,13 @@
+CUDAARCHS
+---------
+
+.. versionadded:: 3.20
+
+.. include:: ENV_VAR.txt
+
+Value used to initialize :variable:`CMAKE_CUDA_ARCHITECTURES` on the first
+configuration if it's not already defined. Subsequent runs will use the value
+stored in the cache.
+
+This is a semicolon-separated list of architectures as described in
+:prop_tgt:`CUDA_ARCHITECTURES`.
diff --git a/share/cmake-3.22/Help/envvar/CUDACXX.rst b/share/cmake-3.22/Help/envvar/CUDACXX.rst
new file mode 100644
index 0000000..1722128
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/CUDACXX.rst
@@ -0,0 +1,21 @@
+CUDACXX
+-------
+
+.. versionadded:: 3.8
+
+.. include:: ENV_VAR.txt
+
+Preferred executable for compiling ``CUDA`` language files. Will only be used by
+CMake on the first configuration to determine ``CUDA`` compiler, after which the
+value for ``CUDA`` is stored in the cache as
+:variable:`CMAKE_CUDA_COMPILER <CMAKE_<LANG>_COMPILER>`. For any configuration
+run (including the first), the environment variable will be ignored if the
+:variable:`CMAKE_CUDA_COMPILER <CMAKE_<LANG>_COMPILER>` variable is defined.
+
+.. note::
+  Options that are required to make the compiler work correctly can be included;
+  they can not be changed.
+
+.. code-block:: console
+
+  $ export CUDACXX="custom-compiler --arg1 --arg2"
diff --git a/share/cmake-3.22/Help/envvar/CUDAFLAGS.rst b/share/cmake-3.22/Help/envvar/CUDAFLAGS.rst
new file mode 100644
index 0000000..af577a0
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/CUDAFLAGS.rst
@@ -0,0 +1,15 @@
+CUDAFLAGS
+---------
+
+.. versionadded:: 3.8
+
+.. include:: ENV_VAR.txt
+
+Default compilation flags to be used when compiling ``CUDA`` files. Will only be
+used by CMake on the first configuration to determine ``CUDA`` default
+compilation flags, after which the value for ``CUDAFLAGS`` is stored in the
+cache as :variable:`CMAKE_CUDA_FLAGS <CMAKE_<LANG>_FLAGS>`. For any configuration
+run (including the first), the environment variable will be ignored if
+the :variable:`CMAKE_CUDA_FLAGS <CMAKE_<LANG>_FLAGS>` variable is defined.
+
+See also :variable:`CMAKE_CUDA_FLAGS_INIT <CMAKE_<LANG>_FLAGS_INIT>`.
diff --git a/share/cmake-3.22/Help/envvar/CUDAHOSTCXX.rst b/share/cmake-3.22/Help/envvar/CUDAHOSTCXX.rst
new file mode 100644
index 0000000..cf65927
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/CUDAHOSTCXX.rst
@@ -0,0 +1,24 @@
+CUDAHOSTCXX
+-----------
+
+.. versionadded:: 3.8
+
+.. include:: ENV_VAR.txt
+
+Preferred executable for compiling host code when compiling ``CUDA``
+language files. Will only be used by CMake on the first configuration to
+determine ``CUDA`` host compiler, after which the value for ``CUDAHOSTCXX`` is
+stored in the cache as :variable:`CMAKE_CUDA_HOST_COMPILER`. For any
+configuration run (including the first), the environment variable will be
+ignored if the :variable:`CMAKE_CUDA_HOST_COMPILER` variable is defined.
+
+This environment variable is primarily meant for use with projects that
+enable ``CUDA`` as a first-class language.
+
+.. note::
+
+  Ignored when using :ref:`Visual Studio Generators`.
+
+.. versionadded:: 3.13
+  The :module:`FindCUDA`
+  module will use this variable to initialize its ``CUDA_HOST_COMPILER`` setting.
diff --git a/share/cmake-3.22/Help/envvar/CXX.rst b/share/cmake-3.22/Help/envvar/CXX.rst
new file mode 100644
index 0000000..61ba5b8
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/CXX.rst
@@ -0,0 +1,19 @@
+CXX
+---
+
+.. include:: ENV_VAR.txt
+
+Preferred executable for compiling ``CXX`` language files. Will only be used by
+CMake on the first configuration to determine ``CXX`` compiler, after which the
+value for ``CXX`` is stored in the cache as
+:variable:`CMAKE_CXX_COMPILER <CMAKE_<LANG>_COMPILER>`. For any configuration
+run (including the first), the environment variable will be ignored if the
+:variable:`CMAKE_CXX_COMPILER <CMAKE_<LANG>_COMPILER>` variable is defined.
+
+.. note::
+  Options that are required to make the compiler work correctly can be included;
+  they can not be changed.
+
+.. code-block:: console
+
+  $ export CXX="custom-compiler --arg1 --arg2"
diff --git a/share/cmake-3.18/Help/envvar/CXXFLAGS.rst b/share/cmake-3.22/Help/envvar/CXXFLAGS.rst
similarity index 100%
rename from share/cmake-3.18/Help/envvar/CXXFLAGS.rst
rename to share/cmake-3.22/Help/envvar/CXXFLAGS.rst
diff --git a/share/cmake-3.18/Help/envvar/DASHBOARD_TEST_FROM_CTEST.rst b/share/cmake-3.22/Help/envvar/DASHBOARD_TEST_FROM_CTEST.rst
similarity index 100%
rename from share/cmake-3.18/Help/envvar/DASHBOARD_TEST_FROM_CTEST.rst
rename to share/cmake-3.22/Help/envvar/DASHBOARD_TEST_FROM_CTEST.rst
diff --git a/share/cmake-3.18/Help/envvar/DESTDIR.rst b/share/cmake-3.22/Help/envvar/DESTDIR.rst
similarity index 100%
rename from share/cmake-3.18/Help/envvar/DESTDIR.rst
rename to share/cmake-3.22/Help/envvar/DESTDIR.rst
diff --git a/share/cmake-3.18/Help/envvar/ENV_VAR.txt b/share/cmake-3.22/Help/envvar/ENV_VAR.txt
similarity index 100%
rename from share/cmake-3.18/Help/envvar/ENV_VAR.txt
rename to share/cmake-3.22/Help/envvar/ENV_VAR.txt
diff --git a/share/cmake-3.22/Help/envvar/FC.rst b/share/cmake-3.22/Help/envvar/FC.rst
new file mode 100644
index 0000000..70e1475
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/FC.rst
@@ -0,0 +1,20 @@
+FC
+--
+
+.. include:: ENV_VAR.txt
+
+Preferred executable for compiling ``Fortran`` language files. Will only be used
+by CMake on the first configuration to determine ``Fortran`` compiler, after
+which the value for ``Fortran`` is stored in the cache as
+:variable:`CMAKE_Fortran_COMPILER <CMAKE_<LANG>_COMPILER>`. For any
+configuration run (including the first), the environment variable will be
+ignored if the :variable:`CMAKE_Fortran_COMPILER <CMAKE_<LANG>_COMPILER>`
+variable is defined.
+
+.. note::
+  Options that are required to make the compiler work correctly can be included;
+  they can not be changed.
+
+.. code-block:: console
+
+  $ export FC="custom-compiler --arg1 --arg2"
diff --git a/share/cmake-3.18/Help/envvar/FFLAGS.rst b/share/cmake-3.22/Help/envvar/FFLAGS.rst
similarity index 100%
rename from share/cmake-3.18/Help/envvar/FFLAGS.rst
rename to share/cmake-3.22/Help/envvar/FFLAGS.rst
diff --git a/share/cmake-3.22/Help/envvar/HIPCXX.rst b/share/cmake-3.22/Help/envvar/HIPCXX.rst
new file mode 100644
index 0000000..23329e9
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/HIPCXX.rst
@@ -0,0 +1,13 @@
+HIPCXX
+------
+
+.. versionadded:: 3.21
+
+.. include:: ENV_VAR.txt
+
+Preferred executable for compiling ``HIP`` language files. Will only be used by
+CMake on the first configuration to determine ``HIP`` compiler, after which the
+value for ``HIP`` is stored in the cache as
+:variable:`CMAKE_HIP_COMPILER <CMAKE_<LANG>_COMPILER>`. For any configuration
+run (including the first), the environment variable will be ignored if the
+:variable:`CMAKE_HIP_COMPILER <CMAKE_<LANG>_COMPILER>` variable is defined.
diff --git a/share/cmake-3.22/Help/envvar/HIPFLAGS.rst b/share/cmake-3.22/Help/envvar/HIPFLAGS.rst
new file mode 100644
index 0000000..0df3416
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/HIPFLAGS.rst
@@ -0,0 +1,15 @@
+HIPFLAGS
+--------
+
+.. versionadded:: 3.21
+
+.. include:: ENV_VAR.txt
+
+Default compilation flags to be used when compiling ``HIP`` files. Will only be
+used by CMake on the first configuration to determine ``HIP`` default
+compilation flags, after which the value for ``HIPFLAGS`` is stored in the
+cache as :variable:`CMAKE_HIP_FLAGS <CMAKE_<LANG>_FLAGS>`. For any configuration
+run (including the first), the environment variable will be ignored if
+the :variable:`CMAKE_HIP_FLAGS <CMAKE_<LANG>_FLAGS>` variable is defined.
+
+See also :variable:`CMAKE_HIP_FLAGS_INIT <CMAKE_<LANG>_FLAGS_INIT>`.
diff --git a/share/cmake-3.22/Help/envvar/ISPC.rst b/share/cmake-3.22/Help/envvar/ISPC.rst
new file mode 100644
index 0000000..bcd6260
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/ISPC.rst
@@ -0,0 +1,13 @@
+ISPC
+-------
+
+.. versionadded:: 3.19
+
+.. include:: ENV_VAR.txt
+
+Preferred executable for compiling ``ISPC`` language files. Will only be used by
+CMake on the first configuration to determine ``ISPC`` compiler, after which the
+value for ``ISPC`` is stored in the cache as
+:variable:`CMAKE_ISPC_COMPILER <CMAKE_<LANG>_COMPILER>`. For any configuration
+run (including the first), the environment variable will be ignored if the
+:variable:`CMAKE_ISPC_COMPILER <CMAKE_<LANG>_COMPILER>` variable is defined.
diff --git a/share/cmake-3.22/Help/envvar/ISPCFLAGS.rst b/share/cmake-3.22/Help/envvar/ISPCFLAGS.rst
new file mode 100644
index 0000000..21df037
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/ISPCFLAGS.rst
@@ -0,0 +1,15 @@
+ISPCFLAGS
+---------
+
+.. versionadded:: 3.19
+
+.. include:: ENV_VAR.txt
+
+Default compilation flags to be used when compiling ``ISPC`` files. Will only be
+used by CMake on the first configuration to determine ``ISPC`` default
+compilation flags, after which the value for ``ISPCFLAGS`` is stored in the
+cache as :variable:`CMAKE_ISPC_FLAGS <CMAKE_<LANG>_FLAGS>`. For any configuration
+run (including the first), the environment variable will be ignored if
+the :variable:`CMAKE_ISPC_FLAGS <CMAKE_<LANG>_FLAGS>` variable is defined.
+
+See also :variable:`CMAKE_ISPC_FLAGS_INIT <CMAKE_<LANG>_FLAGS_INIT>`.
diff --git a/share/cmake-3.18/Help/envvar/LDFLAGS.rst b/share/cmake-3.22/Help/envvar/LDFLAGS.rst
similarity index 100%
rename from share/cmake-3.18/Help/envvar/LDFLAGS.rst
rename to share/cmake-3.22/Help/envvar/LDFLAGS.rst
diff --git a/share/cmake-3.18/Help/envvar/MACOSX_DEPLOYMENT_TARGET.rst b/share/cmake-3.22/Help/envvar/MACOSX_DEPLOYMENT_TARGET.rst
similarity index 100%
rename from share/cmake-3.18/Help/envvar/MACOSX_DEPLOYMENT_TARGET.rst
rename to share/cmake-3.22/Help/envvar/MACOSX_DEPLOYMENT_TARGET.rst
diff --git a/share/cmake-3.22/Help/envvar/OBJC.rst b/share/cmake-3.22/Help/envvar/OBJC.rst
new file mode 100644
index 0000000..2d95806
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/OBJC.rst
@@ -0,0 +1,16 @@
+OBJC
+----
+
+.. versionadded:: 3.16.7
+
+.. include:: ENV_VAR.txt
+
+Preferred executable for compiling ``OBJC`` language files. Will only be used
+by CMake on the first configuration to determine ``OBJC`` compiler, after
+which the value for ``OBJC`` is stored in the cache as
+:variable:`CMAKE_OBJC_COMPILER <CMAKE_<LANG>_COMPILER>`. For any configuration
+run (including the first), the environment variable will be ignored if the
+:variable:`CMAKE_OBJC_COMPILER <CMAKE_<LANG>_COMPILER>` variable is defined.
+
+If ``OBJC`` is not defined, the :envvar:`CC` environment variable will
+be checked instead.
diff --git a/share/cmake-3.22/Help/envvar/OBJCXX.rst b/share/cmake-3.22/Help/envvar/OBJCXX.rst
new file mode 100644
index 0000000..71286d9
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/OBJCXX.rst
@@ -0,0 +1,16 @@
+OBJCXX
+------
+
+.. versionadded:: 3.16.7
+
+.. include:: ENV_VAR.txt
+
+Preferred executable for compiling ``OBJCXX`` language files. Will only be used
+by CMake on the first configuration to determine ``OBJCXX`` compiler, after
+which the value for ``OBJCXX`` is stored in the cache as
+:variable:`CMAKE_OBJCXX_COMPILER <CMAKE_<LANG>_COMPILER>`. For any configuration
+run (including the first), the environment variable will be ignored if the
+:variable:`CMAKE_OBJCXX_COMPILER <CMAKE_<LANG>_COMPILER>` variable is defined.
+
+If ``OBJCXX`` is not defined, the :envvar:`CXX` environment variable will
+be checked instead.
diff --git a/share/cmake-3.22/Help/envvar/PackageName_ROOT.rst b/share/cmake-3.22/Help/envvar/PackageName_ROOT.rst
new file mode 100644
index 0000000..0cdd384
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/PackageName_ROOT.rst
@@ -0,0 +1,19 @@
+<PackageName>_ROOT
+------------------
+
+.. versionadded:: 3.12
+
+.. include:: ENV_VAR.txt
+
+Calls to :command:`find_package(<PackageName>)` will search in prefixes
+specified by the ``<PackageName>_ROOT`` environment variable, where
+``<PackageName>`` is the name given to the :command:`find_package` call
+and ``_ROOT`` is literal.  For example, ``find_package(Foo)`` will search
+prefixes specified in the ``Foo_ROOT`` environment variable (if set).
+See policy :policy:`CMP0074`.
+
+This variable may hold a single prefix or a list of prefixes separated
+by ``:`` on UNIX or ``;`` on Windows (the same as the ``PATH`` environment
+variable convention on those platforms).
+
+See also the :variable:`<PackageName>_ROOT` CMake variable.
diff --git a/share/cmake-3.22/Help/envvar/RC.rst b/share/cmake-3.22/Help/envvar/RC.rst
new file mode 100644
index 0000000..8a9324d
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/RC.rst
@@ -0,0 +1,19 @@
+RC
+--
+
+.. include:: ENV_VAR.txt
+
+Preferred executable for compiling ``resource`` files. Will only be used by CMake
+on the first configuration to determine ``resource`` compiler, after which the
+value for ``RC`` is stored in the cache as
+:variable:`CMAKE_RC_COMPILER <CMAKE_<LANG>_COMPILER>`. For any configuration run
+(including the first), the environment variable will be ignored if the
+:variable:`CMAKE_RC_COMPILER <CMAKE_<LANG>_COMPILER>` variable is defined.
+
+.. note::
+  Options that are required to make the compiler work correctly can be included;
+  they can not be changed.
+
+.. code-block:: console
+
+  $ export RC="custom-compiler --arg1 --arg2"
diff --git a/share/cmake-3.18/Help/envvar/RCFLAGS.rst b/share/cmake-3.22/Help/envvar/RCFLAGS.rst
similarity index 100%
rename from share/cmake-3.18/Help/envvar/RCFLAGS.rst
rename to share/cmake-3.22/Help/envvar/RCFLAGS.rst
diff --git a/share/cmake-3.22/Help/envvar/SWIFTC.rst b/share/cmake-3.22/Help/envvar/SWIFTC.rst
new file mode 100644
index 0000000..896e156
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/SWIFTC.rst
@@ -0,0 +1,21 @@
+SWIFTC
+------
+
+.. versionadded:: 3.15
+
+.. include:: ENV_VAR.txt
+
+Preferred executable for compiling ``Swift`` language files. Will only be used by
+CMake on the first configuration to determine ``Swift`` compiler, after which the
+value for ``SWIFTC`` is stored in the cache as
+:variable:`CMAKE_Swift_COMPILER <CMAKE_<LANG>_COMPILER>`. For any configuration run
+(including the first), the environment variable will be ignored if the
+:variable:`CMAKE_Swift_COMPILER <CMAKE_<LANG>_COMPILER>` variable is defined.
+
+.. note::
+  Options that are required to make the compiler work correctly can be included;
+  they can not be changed.
+
+.. code-block:: console
+
+  $ export SWIFTC="custom-compiler --arg1 --arg2"
diff --git a/share/cmake-3.22/Help/envvar/VERBOSE.rst b/share/cmake-3.22/Help/envvar/VERBOSE.rst
new file mode 100644
index 0000000..5911951
--- /dev/null
+++ b/share/cmake-3.22/Help/envvar/VERBOSE.rst
@@ -0,0 +1,12 @@
+VERBOSE
+-------
+
+.. versionadded:: 3.14
+
+Activates verbose output from CMake and your build tools of choice when
+you start to actually build your project.
+
+Note that any given value is ignored. It's just checked for existence.
+
+See also :ref:`Build Tool Mode <Build Tool Mode>` and
+:envvar:`CMAKE_NO_VERBOSE` environment variable
diff --git a/share/cmake-3.18/Help/generator/Borland Makefiles.rst b/share/cmake-3.22/Help/generator/Borland Makefiles.rst
similarity index 100%
rename from share/cmake-3.18/Help/generator/Borland Makefiles.rst
rename to share/cmake-3.22/Help/generator/Borland Makefiles.rst
diff --git a/share/cmake-3.22/Help/generator/CodeBlocks.rst b/share/cmake-3.22/Help/generator/CodeBlocks.rst
new file mode 100644
index 0000000..85da715
--- /dev/null
+++ b/share/cmake-3.22/Help/generator/CodeBlocks.rst
@@ -0,0 +1,35 @@
+CodeBlocks
+----------
+
+Generates CodeBlocks project files.
+
+Project files for CodeBlocks will be created in the top directory and
+in every subdirectory which features a ``CMakeLists.txt`` file containing
+a :command:`project` call.  Additionally a hierarchy of makefiles is generated
+into the build tree.
+The appropriate make program can build the
+project through the default ``all`` target.  An ``install`` target is
+also provided.
+
+.. versionadded:: 3.10
+ The :variable:`CMAKE_CODEBLOCKS_EXCLUDE_EXTERNAL_FILES` variable may
+ be set to ``ON`` to exclude any files which are located outside of
+ the project root directory.
+
+This "extra" generator may be specified as:
+
+``CodeBlocks - MinGW Makefiles``
+ Generate with :generator:`MinGW Makefiles`.
+
+``CodeBlocks - NMake Makefiles``
+ Generate with :generator:`NMake Makefiles`.
+
+``CodeBlocks - NMake Makefiles JOM``
+ .. versionadded:: 3.8
+  Generate with :generator:`NMake Makefiles JOM`.
+
+``CodeBlocks - Ninja``
+ Generate with :generator:`Ninja`.
+
+``CodeBlocks - Unix Makefiles``
+ Generate with :generator:`Unix Makefiles`.
diff --git a/share/cmake-3.22/Help/generator/CodeLite.rst b/share/cmake-3.22/Help/generator/CodeLite.rst
new file mode 100644
index 0000000..4f276df
--- /dev/null
+++ b/share/cmake-3.22/Help/generator/CodeLite.rst
@@ -0,0 +1,30 @@
+CodeLite
+----------
+
+Generates CodeLite project files.
+
+Project files for CodeLite will be created in the top directory and
+in every subdirectory which features a CMakeLists.txt file containing
+a :command:`project` call.
+The appropriate make program can build the
+project through the default ``all`` target.  An ``install`` target
+is also provided.
+
+.. versionadded:: 3.7
+ The :variable:`CMAKE_CODELITE_USE_TARGETS` variable may be set to ``ON``
+ to change the default behavior from projects to targets as the basis
+ for project files.
+
+This "extra" generator may be specified as:
+
+``CodeLite - MinGW Makefiles``
+ Generate with :generator:`MinGW Makefiles`.
+
+``CodeLite - NMake Makefiles``
+ Generate with :generator:`NMake Makefiles`.
+
+``CodeLite - Ninja``
+ Generate with :generator:`Ninja`.
+
+``CodeLite - Unix Makefiles``
+ Generate with :generator:`Unix Makefiles`.
diff --git a/share/cmake-3.18/Help/generator/Eclipse CDT4.rst b/share/cmake-3.22/Help/generator/Eclipse CDT4.rst
similarity index 100%
rename from share/cmake-3.18/Help/generator/Eclipse CDT4.rst
rename to share/cmake-3.22/Help/generator/Eclipse CDT4.rst
diff --git a/share/cmake-3.22/Help/generator/Green Hills MULTI.rst b/share/cmake-3.22/Help/generator/Green Hills MULTI.rst
new file mode 100644
index 0000000..5d2b1cd
--- /dev/null
+++ b/share/cmake-3.22/Help/generator/Green Hills MULTI.rst
@@ -0,0 +1,88 @@
+Green Hills MULTI
+-----------------
+
+.. versionadded:: 3.3
+
+.. versionadded:: 3.15
+  Linux support.
+
+Generates Green Hills MULTI project files (experimental, work-in-progress).
+
+Customizations are available through the following cache variables:
+
+* ``GHS_CUSTOMIZATION``
+* ``GHS_GPJ_MACROS``
+
+.. versionadded:: 3.14
+  The buildsystem has predetermined build-configuration settings that can be controlled
+  via the :variable:`CMAKE_BUILD_TYPE` variable.
+
+Toolset and Platform Selection
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.13
+
+Customizations that are used to pick toolset and target system:
+
+* The ``-A <arch>`` can be supplied for setting the target architecture.
+  ``<arch>`` usually is one of ``arm``, ``ppc``, ``86``, etcetera.
+  If the target architecture is not specified then
+  the default architecture of ``arm`` will be used.
+
+* The ``-T <toolset>`` option can be used to set the directory location of the toolset.
+  Both absolute and relative paths are valid. Relative paths use ``GHS_TOOLSET_ROOT``
+  as the root. If the toolset is not specified then the latest toolset found in
+  ``GHS_TOOLSET_ROOT`` will be used.
+
+Cache variables that are used for toolset and target system customization:
+
+* ``GHS_TARGET_PLATFORM``
+
+  | Defaults to ``integrity``.
+  | Usual values are ``integrity``, ``threadx``, ``uvelosity``, ``velosity``,
+    ``vxworks``, ``standalone``.
+
+* ``GHS_PRIMARY_TARGET``
+
+  | Sets ``primaryTarget`` entry in project file.
+  | Defaults to ``<arch>_<GHS_TARGET_PLATFORM>.tgt``.
+
+* ``GHS_TOOLSET_ROOT``
+
+  | Root path for ``toolset`` searches.
+  | Defaults to ``C:/ghs`` in Windows or ``/usr/ghs`` in Linux.
+
+* ``GHS_OS_ROOT``
+
+  | Root path for RTOS searches.
+  | Defaults to ``C:/ghs`` in Windows or ``/usr/ghs`` in Linux.
+
+* ``GHS_OS_DIR`` and ``GHS_OS_DIR_OPTION``
+
+  | Sets ``-os_dir`` entry in project file.
+  | Defaults to latest platform OS installation at ``GHS_OS_ROOT``.  Set this value if
+    a specific RTOS is to be used.
+  | ``GHS_OS_DIR_OPTION`` default value is ``-os_dir``.
+
+  .. versionadded:: 3.15
+    The ``GHS_OS_DIR_OPTION`` variable.
+
+* ``GHS_BSP_NAME``
+
+  | Sets ``-bsp`` entry in project file.
+  | Defaults to ``sim<arch>`` for ``integrity`` platforms.
+
+Target Properties
+^^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.14
+
+The following properties are available:
+
+* :prop_tgt:`GHS_INTEGRITY_APP`
+* :prop_tgt:`GHS_NO_SOURCE_GROUP_FILE`
+
+.. note::
+  This generator is deemed experimental as of CMake |release|
+  and is still a work in progress.  Future versions of CMake
+  may make breaking changes as the generator matures.
diff --git a/share/cmake-3.18/Help/generator/Kate.rst b/share/cmake-3.22/Help/generator/Kate.rst
similarity index 100%
rename from share/cmake-3.18/Help/generator/Kate.rst
rename to share/cmake-3.22/Help/generator/Kate.rst
diff --git a/share/cmake-3.18/Help/generator/MSYS Makefiles.rst b/share/cmake-3.22/Help/generator/MSYS Makefiles.rst
similarity index 100%
rename from share/cmake-3.18/Help/generator/MSYS Makefiles.rst
rename to share/cmake-3.22/Help/generator/MSYS Makefiles.rst
diff --git a/share/cmake-3.18/Help/generator/MinGW Makefiles.rst b/share/cmake-3.22/Help/generator/MinGW Makefiles.rst
similarity index 100%
rename from share/cmake-3.18/Help/generator/MinGW Makefiles.rst
rename to share/cmake-3.22/Help/generator/MinGW Makefiles.rst
diff --git a/share/cmake-3.22/Help/generator/NMake Makefiles JOM.rst b/share/cmake-3.22/Help/generator/NMake Makefiles JOM.rst
new file mode 100644
index 0000000..e0f4c90
--- /dev/null
+++ b/share/cmake-3.22/Help/generator/NMake Makefiles JOM.rst
@@ -0,0 +1,7 @@
+NMake Makefiles JOM
+-------------------
+
+Generates JOM makefiles.
+
+.. versionadded:: 3.8
+  :generator:`CodeBlocks` generator can be used as an extra generator.
diff --git a/share/cmake-3.18/Help/generator/NMake Makefiles.rst b/share/cmake-3.22/Help/generator/NMake Makefiles.rst
similarity index 100%
rename from share/cmake-3.18/Help/generator/NMake Makefiles.rst
rename to share/cmake-3.22/Help/generator/NMake Makefiles.rst
diff --git a/share/cmake-3.22/Help/generator/Ninja Multi-Config.rst b/share/cmake-3.22/Help/generator/Ninja Multi-Config.rst
new file mode 100644
index 0000000..e5ce4f5
--- /dev/null
+++ b/share/cmake-3.22/Help/generator/Ninja Multi-Config.rst
@@ -0,0 +1,165 @@
+Ninja Multi-Config
+------------------
+
+.. versionadded:: 3.17
+
+Generates multiple ``build-<Config>.ninja`` files.
+
+This generator is very much like the :generator:`Ninja` generator, but with
+some key differences. Only these differences will be discussed in this
+document.
+
+Unlike the :generator:`Ninja` generator, ``Ninja Multi-Config`` generates
+multiple configurations at once with :variable:`CMAKE_CONFIGURATION_TYPES`
+instead of only one configuration with :variable:`CMAKE_BUILD_TYPE`. One
+``build-<Config>.ninja`` file will be generated for each of these
+configurations (with ``<Config>`` being the configuration name.) These files
+are intended to be run with ``ninja -f build-<Config>.ninja``. A
+``build.ninja`` file is also generated, using the configuration from either
+:variable:`CMAKE_DEFAULT_BUILD_TYPE` or the first item from
+:variable:`CMAKE_CONFIGURATION_TYPES`.
+
+``cmake --build . --config <Config>`` will always use ``build-<Config>.ninja``
+to build. If no ``--config`` argument is specified, ``cmake --build .`` will
+use ``build.ninja``.
+
+Each ``build-<Config>.ninja`` file contains ``<target>`` targets as well as
+``<target>:<Config>`` targets, where ``<Config>`` is the same as the
+configuration specified in ``build-<Config>.ninja`` Additionally, if
+cross-config mode is enabled, ``build-<Config>.ninja`` may contain
+``<target>:<OtherConfig>`` targets, where ``<OtherConfig>`` is a cross-config,
+as well as ``<target>:all``, which builds the target in all cross-configs. See
+below for how to enable cross-config mode.
+
+The ``Ninja Multi-Config`` generator recognizes the following variables:
+
+:variable:`CMAKE_CONFIGURATION_TYPES`
+  Specifies the total set of configurations to build. Unlike with other
+  multi-config generators, this variable has a value of
+  ``Debug;Release;RelWithDebInfo`` by default.
+
+:variable:`CMAKE_CROSS_CONFIGS`
+  Specifies a :ref:`semicolon-separated list <CMake Language Lists>` of
+  configurations available from all ``build-<Config>.ninja`` files.
+
+:variable:`CMAKE_DEFAULT_BUILD_TYPE`
+  Specifies the configuration to use by default in a ``build.ninja`` file.
+
+:variable:`CMAKE_DEFAULT_CONFIGS`
+  Specifies a :ref:`semicolon-separated list <CMake Language Lists>` of
+  configurations to build for a target in ``build.ninja``
+  if no ``:<Config>`` suffix is specified.
+
+Consider the following example:
+
+.. code-block:: cmake
+
+  cmake_minimum_required(VERSION 3.16)
+  project(MultiConfigNinja C)
+
+  add_executable(generator generator.c)
+  add_custom_command(OUTPUT generated.c COMMAND generator generated.c)
+  add_library(generated ${CMAKE_BINARY_DIR}/generated.c)
+
+Now assume you configure the project with ``Ninja Multi-Config`` and run one of
+the following commands:
+
+.. code-block:: shell
+
+  ninja -f build-Debug.ninja generated
+  # OR
+  cmake --build . --config Debug --target generated
+
+This would build the ``Debug`` configuration of ``generator``, which would be
+used to generate ``generated.c``, which would be used to build the ``Debug``
+configuration of ``generated``.
+
+But if :variable:`CMAKE_CROSS_CONFIGS` is set to ``all``, and you run the
+following instead:
+
+.. code-block:: shell
+
+  ninja -f build-Release.ninja generated:Debug
+  # OR
+  cmake --build . --config Release --target generated:Debug
+
+This would build the ``Release`` configuration of ``generator``, which would be
+used to generate ``generated.c``, which would be used to build the ``Debug``
+configuration of ``generated``. This is useful for running a release-optimized
+version of a generator utility while still building the debug version of the
+targets built with the generated code.
+
+Custom Commands
+^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.20
+
+The ``Ninja Multi-Config`` generator adds extra capabilities to
+:command:`add_custom_command` and :command:`add_custom_target` through its
+cross-config mode. The ``COMMAND``, ``DEPENDS``, and ``WORKING_DIRECTORY``
+arguments can be evaluated in the context of either the "command config" (the
+"native" configuration of the ``build-<Config>.ninja`` file in use) or the
+"output config" (the configuration used to evaluate the ``OUTPUT`` and
+``BYPRODUCTS``).
+
+If either ``OUTPUT`` or ``BYPRODUCTS`` names a path that is common to
+more than one configuration (e.g. it does not use any generator expressions),
+all arguments are evaluated in the command config by default.
+If all ``OUTPUT`` and ``BYPRODUCTS`` paths are unique to each configuration
+(e.g. by using the ``$<CONFIG>`` generator expression), the first argument of
+``COMMAND`` is still evaluated in the command config by default, while all
+subsequent arguments, as well as the arguments to ``DEPENDS`` and
+``WORKING_DIRECTORY``, are evaluated in the output config. These defaults can
+be overridden with the ``$<OUTPUT_CONFIG:...>`` and ``$<COMMAND_CONFIG:...>``
+generator-expressions. Note that if a target is specified by its name in
+``DEPENDS``, or as the first argument of ``COMMAND``, it is always evaluated
+in the command config, even if it is wrapped in ``$<OUTPUT_CONFIG:...>``
+(because its plain name is not a generator expression).
+
+As an example, consider the following:
+
+.. code-block:: cmake
+
+  add_custom_command(
+    OUTPUT "$<CONFIG>.txt"
+    COMMAND generator "$<CONFIG>.txt" "$<OUTPUT_CONFIG:$<CONFIG>>" "$<COMMAND_CONFIG:$<CONFIG>>"
+    DEPENDS tgt1 "$<TARGET_FILE:tgt2>" "$<OUTPUT_CONFIG:$<TARGET_FILE:tgt3>>" "$<COMMAND_CONFIG:$<TARGET_FILE:tgt4>>"
+    )
+
+Assume that ``generator``, ``tgt1``, ``tgt2``, ``tgt3``, and ``tgt4`` are all
+executable targets, and assume that ``$<CONFIG>.txt`` is built in the ``Debug``
+output config using the ``Release`` command config. The ``Release`` build of
+the ``generator`` target is called with ``Debug.txt Debug Release`` as
+arguments. The command depends on the ``Release`` builds of ``tgt1`` and
+``tgt4``, and the ``Debug`` builds of ``tgt2`` and ``tgt3``.
+
+``PRE_BUILD``, ``PRE_LINK``, and ``POST_BUILD`` custom commands for targets
+only get run in their "native" configuration (the ``Release`` configuration in
+the ``build-Release.ninja`` file) unless they have no ``BYPRODUCTS`` or their
+``BYPRODUCTS`` are unique per config. Consider the following example:
+
+.. code-block:: cmake
+
+  add_executable(exe main.c)
+  add_custom_command(
+    TARGET exe
+    POST_BUILD
+    COMMAND ${CMAKE_COMMAND} -E echo "Running no-byproduct command"
+    )
+  add_custom_command(
+    TARGET exe
+    POST_BUILD
+    COMMAND ${CMAKE_COMMAND} -E echo "Running separate-byproduct command for $<CONFIG>"
+    BYPRODUCTS $<CONFIG>.txt
+    )
+  add_custom_command(
+    TARGET exe
+    POST_BUILD
+    COMMAND ${CMAKE_COMMAND} -E echo "Running common-byproduct command for $<CONFIG>"
+    BYPRODUCTS exe.txt
+    )
+
+In this example, if you build ``exe:Debug`` in ``build-Release.ninja``, the
+first and second custom commands get run, since their byproducts are unique
+per-config, but the last custom command does not. However, if you build
+``exe:Release`` in ``build-Release.ninja``, all three custom commands get run.
diff --git a/share/cmake-3.22/Help/generator/Ninja.rst b/share/cmake-3.22/Help/generator/Ninja.rst
new file mode 100644
index 0000000..f3ba222
--- /dev/null
+++ b/share/cmake-3.22/Help/generator/Ninja.rst
@@ -0,0 +1,67 @@
+Ninja
+-----
+
+Generates ``build.ninja`` files.
+
+A ``build.ninja`` file is generated into the build tree.  Use the ninja
+program to build the project through the ``all`` target and install the
+project through the ``install`` (or ``install/strip``) target.
+
+For each subdirectory ``sub/dir`` of the project, additional targets
+are generated:
+
+``sub/dir/all``
+
+  .. versionadded:: 3.6
+
+    Depends on all targets required by the subdirectory.
+
+``sub/dir/install``
+
+  .. versionadded:: 3.7
+
+    Runs the install step in the subdirectory, if any.
+
+``sub/dir/install/strip``
+
+  .. versionadded:: 3.7
+    Runs the install step in the subdirectory followed by a ``CMAKE_STRIP`` command,
+    if any.
+
+    The ``CMAKE_STRIP`` variable will contain the platform's ``strip`` utility, which
+    removes symbols information from generated binaries.
+
+``sub/dir/test``
+
+  .. versionadded:: 3.7
+
+    Runs the test step in the subdirectory, if any.
+
+``sub/dir/package``
+
+  .. versionadded:: 3.7
+
+    Runs the package step in the subdirectory, if any.
+
+Fortran Support
+^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.7
+
+The ``Ninja`` generator conditionally supports Fortran when the ``ninja``
+tool is at least version 1.10 (which has the required features).
+
+Swift Support
+^^^^^^^^^^^^^
+
+.. versionadded:: 3.15
+
+The Swift support is experimental, not considered stable, and may change
+in future releases of CMake.
+
+See Also
+^^^^^^^^
+
+.. versionadded:: 3.17
+  The :generator:`Ninja Multi-Config` generator is similar to the ``Ninja``
+  generator, but generates multiple configurations at once.
diff --git a/share/cmake-3.18/Help/generator/Sublime Text 2.rst b/share/cmake-3.22/Help/generator/Sublime Text 2.rst
similarity index 100%
rename from share/cmake-3.18/Help/generator/Sublime Text 2.rst
rename to share/cmake-3.22/Help/generator/Sublime Text 2.rst
diff --git a/share/cmake-3.18/Help/generator/Unix Makefiles.rst b/share/cmake-3.22/Help/generator/Unix Makefiles.rst
similarity index 100%
rename from share/cmake-3.18/Help/generator/Unix Makefiles.rst
rename to share/cmake-3.22/Help/generator/Unix Makefiles.rst
diff --git a/share/cmake-3.18/Help/generator/VS_TOOLSET_HOST_ARCH.txt b/share/cmake-3.22/Help/generator/VS_TOOLSET_HOST_ARCH.txt
similarity index 100%
rename from share/cmake-3.18/Help/generator/VS_TOOLSET_HOST_ARCH.txt
rename to share/cmake-3.22/Help/generator/VS_TOOLSET_HOST_ARCH.txt
diff --git a/share/cmake-3.22/Help/generator/VS_TOOLSET_HOST_ARCH_LEGACY.txt b/share/cmake-3.22/Help/generator/VS_TOOLSET_HOST_ARCH_LEGACY.txt
new file mode 100644
index 0000000..069638b
--- /dev/null
+++ b/share/cmake-3.22/Help/generator/VS_TOOLSET_HOST_ARCH_LEGACY.txt
@@ -0,0 +1,11 @@
+.. versionadded:: 3.8
+  For each toolset that comes with this version of Visual Studio, there are
+  variants that are themselves compiled for 32-bit (``x86``) and
+  64-bit (``x64``) hosts (independent of the architecture they target).
+  |VS_TOOLSET_HOST_ARCH_DEFAULT|
+  One may explicitly request use of either the 32-bit or 64-bit host tools
+  by adding either ``host=x86`` or ``host=x64`` to the toolset specification.
+  See the :variable:`CMAKE_GENERATOR_TOOLSET` variable for details.
+
+.. versionadded:: 3.14
+  Added support for ``host=x86`` option.
diff --git a/share/cmake-3.22/Help/generator/Visual Studio 10 2010.rst b/share/cmake-3.22/Help/generator/Visual Studio 10 2010.rst
new file mode 100644
index 0000000..9ec33c3
--- /dev/null
+++ b/share/cmake-3.22/Help/generator/Visual Studio 10 2010.rst
@@ -0,0 +1,52 @@
+Visual Studio 10 2010
+---------------------
+
+Deprecated.  Generates Visual Studio 10 (VS 2010) project files.
+
+.. note::
+  This generator is deprecated and will be removed in a future version
+  of CMake.  It will still be possible to build with VS 10 2010 tools
+  using the :generator:`Visual Studio 11 2012` (or above) generator
+  with :variable:`CMAKE_GENERATOR_TOOLSET` set to ``v100``, or by
+  using the :generator:`NMake Makefiles` generator.
+
+For compatibility with CMake versions prior to 3.0, one may specify this
+generator using the name ``Visual Studio 10`` without the year component.
+
+Project Types
+^^^^^^^^^^^^^
+
+Only Visual C++ and C# projects may be generated (and Fortran with
+Intel compiler integration).  Other types of projects (Database,
+Website, etc.) are not supported.
+
+Platform Selection
+^^^^^^^^^^^^^^^^^^
+
+The default target platform name (architecture) is ``Win32``.
+
+.. versionadded:: 3.1
+  The :variable:`CMAKE_GENERATOR_PLATFORM` variable may be set, perhaps
+  via the :manual:`cmake(1)` ``-A`` option, to specify a target platform
+  name (architecture).  For example:
+
+  * ``cmake -G "Visual Studio 10 2010" -A Win32``
+  * ``cmake -G "Visual Studio 10 2010" -A x64``
+  * ``cmake -G "Visual Studio 10 2010" -A Itanium``
+
+For compatibility with CMake versions prior to 3.1, one may specify
+a target platform name optionally at the end of the generator name.
+This is supported only for:
+
+``Visual Studio 10 2010 Win64``
+  Specify target platform ``x64``.
+
+``Visual Studio 10 2010 IA64``
+  Specify target platform ``Itanium``.
+
+Toolset Selection
+^^^^^^^^^^^^^^^^^
+
+The ``v100`` toolset that comes with Visual Studio 10 2010 is selected by
+default.  The :variable:`CMAKE_GENERATOR_TOOLSET` option may be set, perhaps
+via the :manual:`cmake(1)` ``-T`` option, to specify another toolset.
diff --git a/share/cmake-3.22/Help/generator/Visual Studio 11 2012.rst b/share/cmake-3.22/Help/generator/Visual Studio 11 2012.rst
new file mode 100644
index 0000000..3952228
--- /dev/null
+++ b/share/cmake-3.22/Help/generator/Visual Studio 11 2012.rst
@@ -0,0 +1,50 @@
+Visual Studio 11 2012
+---------------------
+
+Generates Visual Studio 11 (VS 2012) project files.
+
+For compatibility with CMake versions prior to 3.0, one may specify this
+generator using the name "Visual Studio 11" without the year component.
+
+Project Types
+^^^^^^^^^^^^^
+
+Only Visual C++ and C# projects may be generated (and Fortran with
+Intel compiler integration).  Other types of projects (JavaScript,
+Database, Website, etc.) are not supported.
+
+Platform Selection
+^^^^^^^^^^^^^^^^^^
+
+The default target platform name (architecture) is ``Win32``.
+
+.. versionadded:: 3.1
+  The :variable:`CMAKE_GENERATOR_PLATFORM` variable may be set, perhaps
+  via the :manual:`cmake(1)` ``-A`` option, to specify a target platform
+  name (architecture).  For example:
+
+  * ``cmake -G "Visual Studio 11 2012" -A Win32``
+  * ``cmake -G "Visual Studio 11 2012" -A x64``
+  * ``cmake -G "Visual Studio 11 2012" -A ARM``
+  * ``cmake -G "Visual Studio 11 2012" -A <WinCE-SDK>``
+    (Specify a target platform matching a Windows CE SDK name.)
+
+For compatibility with CMake versions prior to 3.1, one may specify
+a target platform name optionally at the end of the generator name.
+This is supported only for:
+
+``Visual Studio 11 2012 Win64``
+  Specify target platform ``x64``.
+
+``Visual Studio 11 2012 ARM``
+  Specify target platform ``ARM``.
+
+``Visual Studio 11 2012 <WinCE-SDK>``
+  Specify target platform matching a Windows CE SDK name.
+
+Toolset Selection
+^^^^^^^^^^^^^^^^^
+
+The ``v110`` toolset that comes with Visual Studio 11 2012 is selected by
+default.  The :variable:`CMAKE_GENERATOR_TOOLSET` option may be set, perhaps
+via the :manual:`cmake(1)` ``-T`` option, to specify another toolset.
diff --git a/share/cmake-3.22/Help/generator/Visual Studio 12 2013.rst b/share/cmake-3.22/Help/generator/Visual Studio 12 2013.rst
new file mode 100644
index 0000000..54a4d7e
--- /dev/null
+++ b/share/cmake-3.22/Help/generator/Visual Studio 12 2013.rst
@@ -0,0 +1,50 @@
+Visual Studio 12 2013
+---------------------
+
+Generates Visual Studio 12 (VS 2013) project files.
+
+For compatibility with CMake versions prior to 3.0, one may specify this
+generator using the name "Visual Studio 12" without the year component.
+
+Project Types
+^^^^^^^^^^^^^
+
+Only Visual C++ and C# projects may be generated (and Fortran with
+Intel compiler integration).  Other types of projects (JavaScript,
+Powershell, Python, etc.) are not supported.
+
+Platform Selection
+^^^^^^^^^^^^^^^^^^
+
+The default target platform name (architecture) is ``Win32``.
+
+.. versionadded:: 3.1
+  The :variable:`CMAKE_GENERATOR_PLATFORM` variable may be set, perhaps
+  via the :manual:`cmake(1)` ``-A`` option, to specify a target platform
+  name (architecture).  For example:
+
+  * ``cmake -G "Visual Studio 12 2013" -A Win32``
+  * ``cmake -G "Visual Studio 12 2013" -A x64``
+  * ``cmake -G "Visual Studio 12 2013" -A ARM``
+
+For compatibility with CMake versions prior to 3.1, one may specify
+a target platform name optionally at the end of the generator name.
+This is supported only for:
+
+``Visual Studio 12 2013 Win64``
+  Specify target platform ``x64``.
+
+``Visual Studio 12 2013 ARM``
+  Specify target platform ``ARM``.
+
+Toolset Selection
+^^^^^^^^^^^^^^^^^
+
+The ``v120`` toolset that comes with Visual Studio 12 2013 is selected by
+default.  The :variable:`CMAKE_GENERATOR_TOOLSET` option may be set, perhaps
+via the :manual:`cmake(1)` ``-T`` option, to specify another toolset.
+
+.. |VS_TOOLSET_HOST_ARCH_DEFAULT| replace::
+   By default this generator uses the 32-bit variant even on a 64-bit host.
+
+.. include:: VS_TOOLSET_HOST_ARCH_LEGACY.txt
diff --git a/share/cmake-3.22/Help/generator/Visual Studio 14 2015.rst b/share/cmake-3.22/Help/generator/Visual Studio 14 2015.rst
new file mode 100644
index 0000000..d704ab2
--- /dev/null
+++ b/share/cmake-3.22/Help/generator/Visual Studio 14 2015.rst
@@ -0,0 +1,66 @@
+Visual Studio 14 2015
+---------------------
+
+.. versionadded:: 3.1
+
+Generates Visual Studio 14 (VS 2015) project files.
+
+Project Types
+^^^^^^^^^^^^^
+
+Only Visual C++ and C# projects may be generated (and Fortran with
+Intel compiler integration).  Other types of projects (JavaScript,
+Powershell, Python, etc.) are not supported.
+
+Platform Selection
+^^^^^^^^^^^^^^^^^^
+
+The default target platform name (architecture) is ``Win32``.
+
+The :variable:`CMAKE_GENERATOR_PLATFORM` variable may be set, perhaps
+via the :manual:`cmake(1)` ``-A`` option, to specify a target platform
+name (architecture).  For example:
+
+* ``cmake -G "Visual Studio 14 2015" -A Win32``
+* ``cmake -G "Visual Studio 14 2015" -A x64``
+* ``cmake -G "Visual Studio 14 2015" -A ARM``
+
+For compatibility with CMake versions prior to 3.1, one may specify
+a target platform name optionally at the end of the generator name.
+This is supported only for:
+
+``Visual Studio 14 2015 Win64``
+  Specify target platform ``x64``.
+
+``Visual Studio 14 2015 ARM``
+  Specify target platform ``ARM``.
+
+Toolset Selection
+^^^^^^^^^^^^^^^^^
+
+The ``v140`` toolset that comes with Visual Studio 14 2015 is selected by
+default.  The :variable:`CMAKE_GENERATOR_TOOLSET` option may be set, perhaps
+via the :manual:`cmake(1)` ``-T`` option, to specify another toolset.
+
+.. |VS_TOOLSET_HOST_ARCH_DEFAULT| replace::
+   By default this generator uses the 32-bit variant even on a 64-bit host.
+
+.. include:: VS_TOOLSET_HOST_ARCH_LEGACY.txt
+
+.. _`Windows 10 SDK Maximum Version for VS 2015`:
+
+Windows 10 SDK Maximum Version for VS 2015
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.19
+
+Microsoft stated in a "Windows 10 October 2018 Update" blog post that Windows
+10 SDK versions (15063, 16299, 17134, 17763) are not supported by VS 2015 and
+are only supported by VS 2017 and later.  Therefore by default CMake
+automatically ignores Windows 10 SDKs beyond ``10.0.14393.0``.
+
+However, there are other recommendations for certain driver/Win32 builds that
+indicate otherwise.  A user can override this behavior by either setting the
+:variable:`CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION_MAXIMUM` to a false value
+or setting the :variable:`CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION_MAXIMUM` to
+the string value of the required maximum (e.g. ``10.0.15063.0``).
diff --git a/share/cmake-3.22/Help/generator/Visual Studio 15 2017.rst b/share/cmake-3.22/Help/generator/Visual Studio 15 2017.rst
new file mode 100644
index 0000000..b4d6f6d
--- /dev/null
+++ b/share/cmake-3.22/Help/generator/Visual Studio 15 2017.rst
@@ -0,0 +1,67 @@
+Visual Studio 15 2017
+---------------------
+
+.. versionadded:: 3.7.1
+
+Generates Visual Studio 15 (VS 2017) project files.
+
+Project Types
+^^^^^^^^^^^^^
+
+Only Visual C++ and C# projects may be generated (and Fortran with
+Intel compiler integration).  Other types of projects (JavaScript,
+Powershell, Python, etc.) are not supported.
+
+Instance Selection
+^^^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.11
+
+VS 2017 supports multiple installations on the same machine.
+The :variable:`CMAKE_GENERATOR_INSTANCE` variable may be set as a
+cache entry containing the absolute path to a Visual Studio instance.
+If the value is not specified explicitly by the user or a toolchain file,
+CMake queries the Visual Studio Installer to locate VS instances, chooses
+one, and sets the variable as a cache entry to hold the value persistently.
+
+When CMake first chooses an instance, if the ``VS150COMNTOOLS`` environment
+variable is set and points to the ``Common7/Tools`` directory within
+one of the instances, that instance will be used.  Otherwise, if more
+than one instance is installed we do not define which one is chosen
+by default.
+
+Platform Selection
+^^^^^^^^^^^^^^^^^^
+
+The default target platform name (architecture) is ``Win32``.
+
+The :variable:`CMAKE_GENERATOR_PLATFORM` variable may be set, perhaps
+via the :manual:`cmake(1)` ``-A`` option, to specify a target platform
+name (architecture).  For example:
+
+* ``cmake -G "Visual Studio 15 2017" -A Win32``
+* ``cmake -G "Visual Studio 15 2017" -A x64``
+* ``cmake -G "Visual Studio 15 2017" -A ARM``
+* ``cmake -G "Visual Studio 15 2017" -A ARM64``
+
+For compatibility with CMake versions prior to 3.1, one may specify
+a target platform name optionally at the end of the generator name.
+This is supported only for:
+
+``Visual Studio 15 2017 Win64``
+  Specify target platform ``x64``.
+
+``Visual Studio 15 2017 ARM``
+  Specify target platform ``ARM``.
+
+Toolset Selection
+^^^^^^^^^^^^^^^^^
+
+The ``v141`` toolset that comes with Visual Studio 15 2017 is selected by
+default.  The :variable:`CMAKE_GENERATOR_TOOLSET` option may be set, perhaps
+via the :manual:`cmake(1)` ``-T`` option, to specify another toolset.
+
+.. |VS_TOOLSET_HOST_ARCH_DEFAULT| replace::
+   By default this generator uses the 32-bit variant even on a 64-bit host.
+
+.. include:: VS_TOOLSET_HOST_ARCH_LEGACY.txt
diff --git a/share/cmake-3.22/Help/generator/Visual Studio 16 2019.rst b/share/cmake-3.22/Help/generator/Visual Studio 16 2019.rst
new file mode 100644
index 0000000..72399e0
--- /dev/null
+++ b/share/cmake-3.22/Help/generator/Visual Studio 16 2019.rst
@@ -0,0 +1,57 @@
+Visual Studio 16 2019
+---------------------
+
+.. versionadded:: 3.14
+
+Generates Visual Studio 16 (VS 2019) project files.
+
+Project Types
+^^^^^^^^^^^^^
+
+Only Visual C++ and C# projects may be generated (and Fortran with
+Intel compiler integration).  Other types of projects (JavaScript,
+Powershell, Python, etc.) are not supported.
+
+Instance Selection
+^^^^^^^^^^^^^^^^^^
+
+VS 2019 supports multiple installations on the same machine.
+The :variable:`CMAKE_GENERATOR_INSTANCE` variable may be set as a
+cache entry containing the absolute path to a Visual Studio instance.
+If the value is not specified explicitly by the user or a toolchain file,
+CMake queries the Visual Studio Installer to locate VS instances, chooses
+one, and sets the variable as a cache entry to hold the value persistently.
+
+When CMake first chooses an instance, if the ``VS160COMNTOOLS`` environment
+variable is set and points to the ``Common7/Tools`` directory within
+one of the instances, that instance will be used.  Otherwise, if more
+than one instance is installed we do not define which one is chosen
+by default.
+
+Platform Selection
+^^^^^^^^^^^^^^^^^^
+
+The default target platform name (architecture) is that of the host
+and is provided in the :variable:`CMAKE_VS_PLATFORM_NAME_DEFAULT` variable.
+
+The :variable:`CMAKE_GENERATOR_PLATFORM` variable may be set, perhaps
+via the :manual:`cmake(1)` ``-A`` option, to specify a target platform
+name (architecture).  For example:
+
+* ``cmake -G "Visual Studio 16 2019" -A Win32``
+* ``cmake -G "Visual Studio 16 2019" -A x64``
+* ``cmake -G "Visual Studio 16 2019" -A ARM``
+* ``cmake -G "Visual Studio 16 2019" -A ARM64``
+
+Toolset Selection
+^^^^^^^^^^^^^^^^^
+
+The ``v142`` toolset that comes with Visual Studio 16 2019 is selected by
+default.  The :variable:`CMAKE_GENERATOR_TOOLSET` option may be set, perhaps
+via the :manual:`cmake(1)` ``-T`` option, to specify another toolset.
+
+.. |VS_TOOLSET_HOST_ARCH_DEFAULT| replace::
+   By default this generator uses the 64-bit variant on x64 hosts and
+   the 32-bit variant otherwise.
+
+.. include:: VS_TOOLSET_HOST_ARCH.txt
diff --git a/share/cmake-3.22/Help/generator/Visual Studio 17 2022.rst b/share/cmake-3.22/Help/generator/Visual Studio 17 2022.rst
new file mode 100644
index 0000000..b3f49f3
--- /dev/null
+++ b/share/cmake-3.22/Help/generator/Visual Studio 17 2022.rst
@@ -0,0 +1,57 @@
+Visual Studio 17 2022
+---------------------
+
+.. versionadded:: 3.21
+
+Generates Visual Studio 17 (VS 2022) project files.
+
+Project Types
+^^^^^^^^^^^^^
+
+Only Visual C++ and C# projects may be generated (and Fortran with
+Intel compiler integration).  Other types of projects (JavaScript,
+Powershell, Python, etc.) are not supported.
+
+Instance Selection
+^^^^^^^^^^^^^^^^^^
+
+VS 2022 supports multiple installations on the same machine.
+The :variable:`CMAKE_GENERATOR_INSTANCE` variable may be set as a
+cache entry containing the absolute path to a Visual Studio instance.
+If the value is not specified explicitly by the user or a toolchain file,
+CMake queries the Visual Studio Installer to locate VS instances, chooses
+one, and sets the variable as a cache entry to hold the value persistently.
+
+When CMake first chooses an instance, if the ``VS170COMNTOOLS`` environment
+variable is set and points to the ``Common7/Tools`` directory within
+one of the instances, that instance will be used.  Otherwise, if more
+than one instance is installed we do not define which one is chosen
+by default.
+
+Platform Selection
+^^^^^^^^^^^^^^^^^^
+
+The default target platform name (architecture) is that of the host
+and is provided in the :variable:`CMAKE_VS_PLATFORM_NAME_DEFAULT` variable.
+
+The :variable:`CMAKE_GENERATOR_PLATFORM` variable may be set, perhaps
+via the :manual:`cmake(1)` ``-A`` option, to specify a target platform
+name (architecture).  For example:
+
+* ``cmake -G "Visual Studio 17 2022" -A Win32``
+* ``cmake -G "Visual Studio 17 2022" -A x64``
+* ``cmake -G "Visual Studio 17 2022" -A ARM``
+* ``cmake -G "Visual Studio 17 2022" -A ARM64``
+
+Toolset Selection
+^^^^^^^^^^^^^^^^^
+
+The ``v143`` toolset that comes with VS 17 2022 is selected by default.
+The :variable:`CMAKE_GENERATOR_TOOLSET` option may be set, perhaps
+via the :manual:`cmake(1)` ``-T`` option, to specify another toolset.
+
+.. |VS_TOOLSET_HOST_ARCH_DEFAULT| replace::
+   By default this generator uses the 64-bit variant on x64 hosts and
+   the 32-bit variant otherwise.
+
+.. include:: VS_TOOLSET_HOST_ARCH.txt
diff --git a/share/cmake-3.18/Help/generator/Visual Studio 6.rst b/share/cmake-3.22/Help/generator/Visual Studio 6.rst
similarity index 100%
rename from share/cmake-3.18/Help/generator/Visual Studio 6.rst
rename to share/cmake-3.22/Help/generator/Visual Studio 6.rst
diff --git a/share/cmake-3.18/Help/generator/Visual Studio 7 .NET 2003.rst b/share/cmake-3.22/Help/generator/Visual Studio 7 .NET 2003.rst
similarity index 100%
rename from share/cmake-3.18/Help/generator/Visual Studio 7 .NET 2003.rst
rename to share/cmake-3.22/Help/generator/Visual Studio 7 .NET 2003.rst
diff --git a/share/cmake-3.18/Help/generator/Visual Studio 7.rst b/share/cmake-3.22/Help/generator/Visual Studio 7.rst
similarity index 100%
rename from share/cmake-3.18/Help/generator/Visual Studio 7.rst
rename to share/cmake-3.22/Help/generator/Visual Studio 7.rst
diff --git a/share/cmake-3.18/Help/generator/Visual Studio 8 2005.rst b/share/cmake-3.22/Help/generator/Visual Studio 8 2005.rst
similarity index 100%
rename from share/cmake-3.18/Help/generator/Visual Studio 8 2005.rst
rename to share/cmake-3.22/Help/generator/Visual Studio 8 2005.rst
diff --git a/share/cmake-3.22/Help/generator/Visual Studio 9 2008.rst b/share/cmake-3.22/Help/generator/Visual Studio 9 2008.rst
new file mode 100644
index 0000000..644f936
--- /dev/null
+++ b/share/cmake-3.22/Help/generator/Visual Studio 9 2008.rst
@@ -0,0 +1,33 @@
+Visual Studio 9 2008
+--------------------
+
+Generates Visual Studio 9 2008 project files.
+
+Platform Selection
+^^^^^^^^^^^^^^^^^^
+
+The default target platform name (architecture) is ``Win32``.
+
+.. versionadded:: 3.1
+  The :variable:`CMAKE_GENERATOR_PLATFORM` variable may be set, perhaps
+  via the :manual:`cmake(1)` ``-A`` option, to specify a target platform
+  name (architecture).  For example:
+
+  * ``cmake -G "Visual Studio 9 2008" -A Win32``
+  * ``cmake -G "Visual Studio 9 2008" -A x64``
+  * ``cmake -G "Visual Studio 9 2008" -A Itanium``
+  * ``cmake -G "Visual Studio 9 2008" -A <WinCE-SDK>``
+    (Specify a target platform matching a Windows CE SDK name.)
+
+For compatibility with CMake versions prior to 3.1, one may specify
+a target platform name optionally at the end of the generator name.
+This is supported only for:
+
+``Visual Studio 9 2008 Win64``
+  Specify target platform ``x64``.
+
+``Visual Studio 9 2008 IA64``
+  Specify target platform ``Itanium``.
+
+``Visual Studio 9 2008 <WinCE-SDK>``
+  Specify target platform matching a Windows CE SDK name.
diff --git a/share/cmake-3.18/Help/generator/Watcom WMake.rst b/share/cmake-3.22/Help/generator/Watcom WMake.rst
similarity index 100%
rename from share/cmake-3.18/Help/generator/Watcom WMake.rst
rename to share/cmake-3.22/Help/generator/Watcom WMake.rst
diff --git a/share/cmake-3.22/Help/generator/Xcode.rst b/share/cmake-3.22/Help/generator/Xcode.rst
new file mode 100644
index 0000000..e4900a1
--- /dev/null
+++ b/share/cmake-3.22/Help/generator/Xcode.rst
@@ -0,0 +1,46 @@
+Xcode
+-----
+
+Generate Xcode project files.
+
+.. versionchanged:: 3.15
+  This generator supports Xcode 5.0 and above.
+
+.. _`Xcode Build System Selection`:
+
+Toolset and Build System Selection
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+By default Xcode is allowed to select its own default toolchain.
+The :variable:`CMAKE_GENERATOR_TOOLSET` option may be set, perhaps
+via the :manual:`cmake(1)` ``-T`` option, to specify another toolset.
+
+.. versionadded:: 3.19
+  This generator supports toolset specification using one of these forms:
+
+* ``toolset``
+* ``toolset[,key=value]*``
+* ``key=value[,key=value]*``
+
+The ``toolset`` specifies the toolset name.  The selected toolset name
+is provided in the :variable:`CMAKE_XCODE_PLATFORM_TOOLSET` variable.
+
+The ``key=value`` pairs form a comma-separated list of options to
+specify generator-specific details of the toolset selection.
+Supported pairs are:
+
+``buildsystem=<variant>``
+  Specify the buildsystem variant to use.
+  See the :variable:`CMAKE_XCODE_BUILD_SYSTEM` variable for allowed values.
+
+  For example, to select the original build system under Xcode 12,
+  run :manual:`cmake(1)` with the option ``-T buildsystem=1``.
+
+Swift Support
+^^^^^^^^^^^^^
+
+.. versionadded:: 3.4
+
+When using the :generator:`Xcode` generator with Xcode 6.1 or higher,
+one may enable the ``Swift`` language with the :command:`enable_language`
+command or the :command:`project`.
diff --git a/share/cmake-3.18/Help/include/COMPILE_DEFINITIONS_DISCLAIMER.txt b/share/cmake-3.22/Help/include/COMPILE_DEFINITIONS_DISCLAIMER.txt
similarity index 100%
rename from share/cmake-3.18/Help/include/COMPILE_DEFINITIONS_DISCLAIMER.txt
rename to share/cmake-3.22/Help/include/COMPILE_DEFINITIONS_DISCLAIMER.txt
diff --git a/share/cmake-3.18/Help/include/INTERFACE_INCLUDE_DIRECTORIES_WARNING.txt b/share/cmake-3.22/Help/include/INTERFACE_INCLUDE_DIRECTORIES_WARNING.txt
similarity index 100%
rename from share/cmake-3.18/Help/include/INTERFACE_INCLUDE_DIRECTORIES_WARNING.txt
rename to share/cmake-3.22/Help/include/INTERFACE_INCLUDE_DIRECTORIES_WARNING.txt
diff --git a/share/cmake-3.18/Help/include/INTERFACE_LINK_LIBRARIES_WARNING.txt b/share/cmake-3.22/Help/include/INTERFACE_LINK_LIBRARIES_WARNING.txt
similarity index 100%
rename from share/cmake-3.18/Help/include/INTERFACE_LINK_LIBRARIES_WARNING.txt
rename to share/cmake-3.22/Help/include/INTERFACE_LINK_LIBRARIES_WARNING.txt
diff --git a/share/cmake-3.22/Help/index.rst b/share/cmake-3.22/Help/index.rst
new file mode 100644
index 0000000..fdbf847
--- /dev/null
+++ b/share/cmake-3.22/Help/index.rst
@@ -0,0 +1,107 @@
+.. title:: CMake Reference Documentation
+
+Introduction
+############
+
+CMake is a tool to manage building of source code.  Originally, CMake was
+designed as a generator for various dialects of ``Makefile``, today
+CMake generates modern buildsystems such as ``Ninja`` as well as project
+files for IDEs such as Visual Studio and Xcode.
+
+CMake is widely used for the C and C++ languages, but it may be used to
+build source code of other languages too.
+
+People encountering CMake for the first time may have different initial
+goals.  To learn how to build a source code package downloaded from the
+internet, start with the :guide:`User Interaction Guide`.
+This will detail the steps needed to run the :manual:`cmake(1)` or
+:manual:`cmake-gui(1)` executable and how to choose a generator, and
+how to complete the build.
+
+The :guide:`Using Dependencies Guide` is aimed at developers
+wishing to get started using a third-party library.
+
+For developers starting a project using CMake, the :guide:`CMake Tutorial`
+is a suitable starting point.  The :manual:`cmake-buildsystem(7)`
+manual is aimed at developers expanding their knowledge of maintaining
+a buildsystem and becoming familiar with the build targets that
+can be represented in CMake.  The :manual:`cmake-packages(7)` manual
+explains how to create packages which can easily be consumed by
+third-party CMake-based buildsystems.
+
+Command-Line Tools
+##################
+
+.. toctree::
+   :maxdepth: 1
+
+   /manual/cmake.1
+   /manual/ctest.1
+   /manual/cpack.1
+
+Interactive Dialogs
+###################
+
+.. toctree::
+   :maxdepth: 1
+
+   /manual/cmake-gui.1
+   /manual/ccmake.1
+
+Reference Manuals
+#################
+
+.. toctree::
+   :maxdepth: 1
+
+   /manual/cmake-buildsystem.7
+   /manual/cmake-commands.7
+   /manual/cmake-compile-features.7
+   /manual/cmake-developer.7
+   /manual/cmake-env-variables.7
+   /manual/cmake-file-api.7
+   /manual/cmake-generator-expressions.7
+   /manual/cmake-generators.7
+   /manual/cmake-language.7
+   /manual/cmake-modules.7
+   /manual/cmake-packages.7
+   /manual/cmake-policies.7
+   /manual/cmake-presets.7
+   /manual/cmake-properties.7
+   /manual/cmake-qt.7
+   /manual/cmake-server.7
+   /manual/cmake-toolchains.7
+   /manual/cmake-variables.7
+   /manual/cpack-generators.7
+
+.. only:: not man
+
+ Guides
+ ######
+
+ .. toctree::
+    :maxdepth: 1
+
+    /guide/tutorial/index
+    /guide/user-interaction/index
+    /guide/using-dependencies/index
+    /guide/importing-exporting/index
+    /guide/ide-integration/index
+
+.. only:: html or text
+
+ Release Notes
+ #############
+
+ .. toctree::
+    :maxdepth: 1
+
+    /release/index
+
+.. only:: html
+
+ Index and Search
+ ################
+
+ * :ref:`genindex`
+ * :ref:`search`
diff --git a/share/cmake-3.18/Help/manual/ID_RESERVE.txt b/share/cmake-3.22/Help/manual/ID_RESERVE.txt
similarity index 100%
rename from share/cmake-3.18/Help/manual/ID_RESERVE.txt
rename to share/cmake-3.22/Help/manual/ID_RESERVE.txt
diff --git a/share/cmake-3.18/Help/manual/LINKS.txt b/share/cmake-3.22/Help/manual/LINKS.txt
similarity index 100%
rename from share/cmake-3.18/Help/manual/LINKS.txt
rename to share/cmake-3.22/Help/manual/LINKS.txt
diff --git a/share/cmake-3.22/Help/manual/OPTIONS_BUILD.txt b/share/cmake-3.22/Help/manual/OPTIONS_BUILD.txt
new file mode 100644
index 0000000..8e23b77
--- /dev/null
+++ b/share/cmake-3.22/Help/manual/OPTIONS_BUILD.txt
@@ -0,0 +1,134 @@
+``-S <path-to-source>``
+ Path to root directory of the CMake project to build.
+
+``-B <path-to-build>``
+ Path to directory which CMake will use as the root of build directory.
+
+ If the directory doesn't already exist CMake will make it.
+
+``-C <initial-cache>``
+ Pre-load a script to populate the cache.
+
+ When CMake is first run in an empty build tree, it creates a
+ ``CMakeCache.txt`` file and populates it with customizable settings for
+ the project.  This option may be used to specify a file from which
+ to load cache entries before the first pass through the project's
+ CMake listfiles.  The loaded entries take priority over the
+ project's default values.  The given file should be a CMake script
+ containing :command:`set` commands that use the ``CACHE`` option, not a
+ cache-format file.
+
+ References to :variable:`CMAKE_SOURCE_DIR` and :variable:`CMAKE_BINARY_DIR`
+ within the script evaluate to the top-level source and build tree.
+
+``-D <var>:<type>=<value>, -D <var>=<value>``
+ Create or update a CMake ``CACHE`` entry.
+
+ When CMake is first run in an empty build tree, it creates a
+ ``CMakeCache.txt`` file and populates it with customizable settings for
+ the project.  This option may be used to specify a setting that
+ takes priority over the project's default value.  The option may be
+ repeated for as many ``CACHE`` entries as desired.
+
+ If the ``:<type>`` portion is given it must be one of the types
+ specified by the :command:`set` command documentation for its
+ ``CACHE`` signature.
+ If the ``:<type>`` portion is omitted the entry will be created
+ with no type if it does not exist with a type already.  If a
+ command in the project sets the type to ``PATH`` or ``FILEPATH``
+ then the ``<value>`` will be converted to an absolute path.
+
+ This option may also be given as a single argument:
+ ``-D<var>:<type>=<value>`` or ``-D<var>=<value>``.
+
+``-U <globbing_expr>``
+ Remove matching entries from CMake ``CACHE``.
+
+ This option may be used to remove one or more variables from the
+ ``CMakeCache.txt`` file, globbing expressions using ``*`` and ``?`` are
+ supported.  The option may be repeated for as many ``CACHE`` entries as
+ desired.
+
+ Use with care, you can make your ``CMakeCache.txt`` non-working.
+
+``-G <generator-name>``
+ Specify a build system generator.
+
+ CMake may support multiple native build systems on certain
+ platforms.  A generator is responsible for generating a particular
+ build system.  Possible generator names are specified in the
+ :manual:`cmake-generators(7)` manual.
+
+ If not specified, CMake checks the :envvar:`CMAKE_GENERATOR` environment
+ variable and otherwise falls back to a builtin default selection.
+
+``-T <toolset-spec>``
+ Toolset specification for the generator, if supported.
+
+ Some CMake generators support a toolset specification to tell
+ the native build system how to choose a compiler.  See the
+ :variable:`CMAKE_GENERATOR_TOOLSET` variable for details.
+
+``-A <platform-name>``
+ Specify platform name if supported by generator.
+
+ Some CMake generators support a platform name to be given to the
+ native build system to choose a compiler or SDK.  See the
+ :variable:`CMAKE_GENERATOR_PLATFORM` variable for details.
+
+``--toolchain <path-to-file>``
+ Specify the cross compiling toolchain file, equivalent to setting
+ :variable:`CMAKE_TOOLCHAIN_FILE` variable.
+
+``--install-prefix <directory>``
+ Specify the installation directory, used by the
+ :variable:`CMAKE_INSTALL_PREFIX` variable. Must be an absolute path.
+
+``-Wno-dev``
+ Suppress developer warnings.
+
+ Suppress warnings that are meant for the author of the
+ ``CMakeLists.txt`` files. By default this will also turn off
+ deprecation warnings.
+
+``-Wdev``
+ Enable developer warnings.
+
+ Enable warnings that are meant for the author of the ``CMakeLists.txt``
+ files. By default this will also turn on deprecation warnings.
+
+``-Werror=dev``
+ Make developer warnings errors.
+
+ Make warnings that are meant for the author of the ``CMakeLists.txt`` files
+ errors. By default this will also turn on deprecated warnings as errors.
+
+``-Wno-error=dev``
+ Make developer warnings not errors.
+
+ Make warnings that are meant for the author of the ``CMakeLists.txt`` files not
+ errors. By default this will also turn off deprecated warnings as errors.
+
+``-Wdeprecated``
+ Enable deprecated functionality warnings.
+
+ Enable warnings for usage of deprecated functionality, that are meant
+ for the author of the ``CMakeLists.txt`` files.
+
+``-Wno-deprecated``
+ Suppress deprecated functionality warnings.
+
+ Suppress warnings for usage of deprecated functionality, that are meant
+ for the author of the ``CMakeLists.txt`` files.
+
+``-Werror=deprecated``
+ Make deprecated macro and function warnings errors.
+
+ Make warnings for usage of deprecated macros and functions, that are meant
+ for the author of the ``CMakeLists.txt`` files, errors.
+
+``-Wno-error=deprecated``
+ Make deprecated macro and function warnings not errors.
+
+ Make warnings for usage of deprecated macros and functions, that are meant
+ for the author of the ``CMakeLists.txt`` files, not errors.
diff --git a/share/cmake-3.18/Help/manual/OPTIONS_HELP.txt b/share/cmake-3.22/Help/manual/OPTIONS_HELP.txt
similarity index 100%
rename from share/cmake-3.18/Help/manual/OPTIONS_HELP.txt
rename to share/cmake-3.22/Help/manual/OPTIONS_HELP.txt
diff --git a/share/cmake-3.18/Help/manual/ccmake.1.rst b/share/cmake-3.22/Help/manual/ccmake.1.rst
similarity index 100%
rename from share/cmake-3.18/Help/manual/ccmake.1.rst
rename to share/cmake-3.22/Help/manual/ccmake.1.rst
diff --git a/share/cmake-3.22/Help/manual/cmake-buildsystem.7.rst b/share/cmake-3.22/Help/manual/cmake-buildsystem.7.rst
new file mode 100644
index 0000000..2f43070
--- /dev/null
+++ b/share/cmake-3.22/Help/manual/cmake-buildsystem.7.rst
@@ -0,0 +1,1104 @@
+.. cmake-manual-description: CMake Buildsystem Reference
+
+cmake-buildsystem(7)
+********************
+
+.. only:: html
+
+   .. contents::
+
+Introduction
+============
+
+A CMake-based buildsystem is organized as a set of high-level logical
+targets.  Each target corresponds to an executable or library, or
+is a custom target containing custom commands.  Dependencies between the
+targets are expressed in the buildsystem to determine the build order
+and the rules for regeneration in response to change.
+
+Binary Targets
+==============
+
+Executables and libraries are defined using the :command:`add_executable`
+and :command:`add_library` commands.  The resulting binary files have
+appropriate :prop_tgt:`PREFIX`, :prop_tgt:`SUFFIX` and extensions for the
+platform targeted. Dependencies between binary targets are expressed using
+the :command:`target_link_libraries` command:
+
+.. code-block:: cmake
+
+  add_library(archive archive.cpp zip.cpp lzma.cpp)
+  add_executable(zipapp zipapp.cpp)
+  target_link_libraries(zipapp archive)
+
+``archive`` is defined as a ``STATIC`` library -- an archive containing objects
+compiled from ``archive.cpp``, ``zip.cpp``, and ``lzma.cpp``.  ``zipapp``
+is defined as an executable formed by compiling and linking ``zipapp.cpp``.
+When linking the ``zipapp`` executable, the ``archive`` static library is
+linked in.
+
+Binary Executables
+------------------
+
+The :command:`add_executable` command defines an executable target:
+
+.. code-block:: cmake
+
+  add_executable(mytool mytool.cpp)
+
+Commands such as :command:`add_custom_command`, which generates rules to be
+run at build time can transparently use an :prop_tgt:`EXECUTABLE <TYPE>`
+target as a ``COMMAND`` executable.  The buildsystem rules will ensure that
+the executable is built before attempting to run the command.
+
+Binary Library Types
+--------------------
+
+.. _`Normal Libraries`:
+
+Normal Libraries
+^^^^^^^^^^^^^^^^
+
+By default, the :command:`add_library` command defines a ``STATIC`` library,
+unless a type is specified.  A type may be specified when using the command:
+
+.. code-block:: cmake
+
+  add_library(archive SHARED archive.cpp zip.cpp lzma.cpp)
+
+.. code-block:: cmake
+
+  add_library(archive STATIC archive.cpp zip.cpp lzma.cpp)
+
+The :variable:`BUILD_SHARED_LIBS` variable may be enabled to change the
+behavior of :command:`add_library` to build shared libraries by default.
+
+In the context of the buildsystem definition as a whole, it is largely
+irrelevant whether particular libraries are ``SHARED`` or ``STATIC`` --
+the commands, dependency specifications and other APIs work similarly
+regardless of the library type.  The ``MODULE`` library type is
+dissimilar in that it is generally not linked to -- it is not used in
+the right-hand-side of the :command:`target_link_libraries` command.
+It is a type which is loaded as a plugin using runtime techniques.
+If the library does not export any unmanaged symbols (e.g. Windows
+resource DLL, C++/CLI DLL), it is required that the library not be a
+``SHARED`` library because CMake expects ``SHARED`` libraries to export
+at least one symbol.
+
+.. code-block:: cmake
+
+  add_library(archive MODULE 7z.cpp)
+
+.. _`Apple Frameworks`:
+
+Apple Frameworks
+""""""""""""""""
+
+A ``SHARED`` library may be marked with the :prop_tgt:`FRAMEWORK`
+target property to create an macOS or iOS Framework Bundle.
+A library with the ``FRAMEWORK`` target property should also set the
+:prop_tgt:`FRAMEWORK_VERSION` target property.  This property is typically
+set to the value of "A" by macOS conventions.
+The ``MACOSX_FRAMEWORK_IDENTIFIER`` sets ``CFBundleIdentifier`` key
+and it uniquely identifies the bundle.
+
+.. code-block:: cmake
+
+  add_library(MyFramework SHARED MyFramework.cpp)
+  set_target_properties(MyFramework PROPERTIES
+    FRAMEWORK TRUE
+    FRAMEWORK_VERSION A # Version "A" is macOS convention
+    MACOSX_FRAMEWORK_IDENTIFIER org.cmake.MyFramework
+  )
+
+.. _`Object Libraries`:
+
+Object Libraries
+^^^^^^^^^^^^^^^^
+
+The ``OBJECT`` library type defines a non-archival collection of object files
+resulting from compiling the given source files.  The object files collection
+may be used as source inputs to other targets by using the syntax
+``$<TARGET_OBJECTS:name>``.  This is a
+:manual:`generator expression <cmake-generator-expressions(7)>` that can be
+used to supply the ``OBJECT`` library content to other targets:
+
+.. code-block:: cmake
+
+  add_library(archive OBJECT archive.cpp zip.cpp lzma.cpp)
+
+  add_library(archiveExtras STATIC $<TARGET_OBJECTS:archive> extras.cpp)
+
+  add_executable(test_exe $<TARGET_OBJECTS:archive> test.cpp)
+
+The link (or archiving) step of those other targets will use the object
+files collection in addition to those from their own sources.
+
+Alternatively, object libraries may be linked into other targets:
+
+.. code-block:: cmake
+
+  add_library(archive OBJECT archive.cpp zip.cpp lzma.cpp)
+
+  add_library(archiveExtras STATIC extras.cpp)
+  target_link_libraries(archiveExtras PUBLIC archive)
+
+  add_executable(test_exe test.cpp)
+  target_link_libraries(test_exe archive)
+
+The link (or archiving) step of those other targets will use the object
+files from ``OBJECT`` libraries that are *directly* linked.  Additionally,
+usage requirements of the ``OBJECT`` libraries will be honored when compiling
+sources in those other targets.  Furthermore, those usage requirements
+will propagate transitively to dependents of those other targets.
+
+Object libraries may not be used as the ``TARGET`` in a use of the
+:command:`add_custom_command(TARGET)` command signature.  However,
+the list of objects can be used by :command:`add_custom_command(OUTPUT)`
+or :command:`file(GENERATE)` by using ``$<TARGET_OBJECTS:objlib>``.
+
+Build Specification and Usage Requirements
+==========================================
+
+The :command:`target_include_directories`, :command:`target_compile_definitions`
+and :command:`target_compile_options` commands specify the build specifications
+and the usage requirements of binary targets.  The commands populate the
+:prop_tgt:`INCLUDE_DIRECTORIES`, :prop_tgt:`COMPILE_DEFINITIONS` and
+:prop_tgt:`COMPILE_OPTIONS` target properties respectively, and/or the
+:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES`, :prop_tgt:`INTERFACE_COMPILE_DEFINITIONS`
+and :prop_tgt:`INTERFACE_COMPILE_OPTIONS` target properties.
+
+Each of the commands has a ``PRIVATE``, ``PUBLIC`` and ``INTERFACE`` mode.  The
+``PRIVATE`` mode populates only the non-``INTERFACE_`` variant of the target
+property and the ``INTERFACE`` mode populates only the ``INTERFACE_`` variants.
+The ``PUBLIC`` mode populates both variants of the respective target property.
+Each command may be invoked with multiple uses of each keyword:
+
+.. code-block:: cmake
+
+  target_compile_definitions(archive
+    PRIVATE BUILDING_WITH_LZMA
+    INTERFACE USING_ARCHIVE_LIB
+  )
+
+Note that usage requirements are not designed as a way to make downstreams
+use particular :prop_tgt:`COMPILE_OPTIONS` or
+:prop_tgt:`COMPILE_DEFINITIONS` etc for convenience only.  The contents of
+the properties must be **requirements**, not merely recommendations or
+convenience.
+
+See the :ref:`Creating Relocatable Packages` section of the
+:manual:`cmake-packages(7)` manual for discussion of additional care
+that must be taken when specifying usage requirements while creating
+packages for redistribution.
+
+Target Properties
+-----------------
+
+The contents of the :prop_tgt:`INCLUDE_DIRECTORIES`,
+:prop_tgt:`COMPILE_DEFINITIONS` and :prop_tgt:`COMPILE_OPTIONS` target
+properties are used appropriately when compiling the source files of a
+binary target.
+
+Entries in the :prop_tgt:`INCLUDE_DIRECTORIES` are added to the compile line
+with ``-I`` or ``-isystem`` prefixes and in the order of appearance in the
+property value.
+
+Entries in the :prop_tgt:`COMPILE_DEFINITIONS` are prefixed with ``-D`` or
+``/D`` and added to the compile line in an unspecified order.  The
+:prop_tgt:`DEFINE_SYMBOL` target property is also added as a compile
+definition as a special convenience case for ``SHARED`` and ``MODULE``
+library targets.
+
+Entries in the :prop_tgt:`COMPILE_OPTIONS` are escaped for the shell and added
+in the order of appearance in the property value.  Several compile options have
+special separate handling, such as :prop_tgt:`POSITION_INDEPENDENT_CODE`.
+
+The contents of the :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES`,
+:prop_tgt:`INTERFACE_COMPILE_DEFINITIONS` and
+:prop_tgt:`INTERFACE_COMPILE_OPTIONS` target properties are
+*Usage Requirements* -- they specify content which consumers
+must use to correctly compile and link with the target they appear on.
+For any binary target, the contents of each ``INTERFACE_`` property on
+each target specified in a :command:`target_link_libraries` command is
+consumed:
+
+.. code-block:: cmake
+
+  set(srcs archive.cpp zip.cpp)
+  if (LZMA_FOUND)
+    list(APPEND srcs lzma.cpp)
+  endif()
+  add_library(archive SHARED ${srcs})
+  if (LZMA_FOUND)
+    # The archive library sources are compiled with -DBUILDING_WITH_LZMA
+    target_compile_definitions(archive PRIVATE BUILDING_WITH_LZMA)
+  endif()
+  target_compile_definitions(archive INTERFACE USING_ARCHIVE_LIB)
+
+  add_executable(consumer)
+  # Link consumer to archive and consume its usage requirements. The consumer
+  # executable sources are compiled with -DUSING_ARCHIVE_LIB.
+  target_link_libraries(consumer archive)
+
+Because it is common to require that the source directory and corresponding
+build directory are added to the :prop_tgt:`INCLUDE_DIRECTORIES`, the
+:variable:`CMAKE_INCLUDE_CURRENT_DIR` variable can be enabled to conveniently
+add the corresponding directories to the :prop_tgt:`INCLUDE_DIRECTORIES` of
+all targets.  The variable :variable:`CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE`
+can be enabled to add the corresponding directories to the
+:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` of all targets.  This makes use of
+targets in multiple different directories convenient through use of the
+:command:`target_link_libraries` command.
+
+
+.. _`Target Usage Requirements`:
+
+Transitive Usage Requirements
+-----------------------------
+
+The usage requirements of a target can transitively propagate to dependents.
+The :command:`target_link_libraries` command has ``PRIVATE``,
+``INTERFACE`` and ``PUBLIC`` keywords to control the propagation.
+
+.. code-block:: cmake
+
+  add_library(archive archive.cpp)
+  target_compile_definitions(archive INTERFACE USING_ARCHIVE_LIB)
+
+  add_library(serialization serialization.cpp)
+  target_compile_definitions(serialization INTERFACE USING_SERIALIZATION_LIB)
+
+  add_library(archiveExtras extras.cpp)
+  target_link_libraries(archiveExtras PUBLIC archive)
+  target_link_libraries(archiveExtras PRIVATE serialization)
+  # archiveExtras is compiled with -DUSING_ARCHIVE_LIB
+  # and -DUSING_SERIALIZATION_LIB
+
+  add_executable(consumer consumer.cpp)
+  # consumer is compiled with -DUSING_ARCHIVE_LIB
+  target_link_libraries(consumer archiveExtras)
+
+Because ``archive`` is a ``PUBLIC`` dependency of ``archiveExtras``, the
+usage requirements of it are propagated to ``consumer`` too.  Because
+``serialization`` is a ``PRIVATE`` dependency of ``archiveExtras``, the usage
+requirements of it are not propagated to ``consumer``.
+
+Generally, a dependency should be specified in a use of
+:command:`target_link_libraries` with the ``PRIVATE`` keyword if it is used by
+only the implementation of a library, and not in the header files.  If a
+dependency is additionally used in the header files of a library (e.g. for
+class inheritance), then it should be specified as a ``PUBLIC`` dependency.
+A dependency which is not used by the implementation of a library, but only by
+its headers should be specified as an ``INTERFACE`` dependency.  The
+:command:`target_link_libraries` command may be invoked with multiple uses of
+each keyword:
+
+.. code-block:: cmake
+
+  target_link_libraries(archiveExtras
+    PUBLIC archive
+    PRIVATE serialization
+  )
+
+Usage requirements are propagated by reading the ``INTERFACE_`` variants
+of target properties from dependencies and appending the values to the
+non-``INTERFACE_`` variants of the operand.  For example, the
+:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` of dependencies is read and
+appended to the :prop_tgt:`INCLUDE_DIRECTORIES` of the operand.  In cases
+where order is relevant and maintained, and the order resulting from the
+:command:`target_link_libraries` calls does not allow correct compilation,
+use of an appropriate command to set the property directly may update the
+order.
+
+For example, if the linked libraries for a target must be specified
+in the order ``lib1`` ``lib2`` ``lib3`` , but the include directories must
+be specified in the order ``lib3`` ``lib1`` ``lib2``:
+
+.. code-block:: cmake
+
+  target_link_libraries(myExe lib1 lib2 lib3)
+  target_include_directories(myExe
+    PRIVATE $<TARGET_PROPERTY:lib3,INTERFACE_INCLUDE_DIRECTORIES>)
+
+Note that care must be taken when specifying usage requirements for targets
+which will be exported for installation using the :command:`install(EXPORT)`
+command.  See :ref:`Creating Packages` for more.
+
+.. _`Compatible Interface Properties`:
+
+Compatible Interface Properties
+-------------------------------
+
+Some target properties are required to be compatible between a target and
+the interface of each dependency.  For example, the
+:prop_tgt:`POSITION_INDEPENDENT_CODE` target property may specify a
+boolean value of whether a target should be compiled as
+position-independent-code, which has platform-specific consequences.
+A target may also specify the usage requirement
+:prop_tgt:`INTERFACE_POSITION_INDEPENDENT_CODE` to communicate that
+consumers must be compiled as position-independent-code.
+
+.. code-block:: cmake
+
+  add_executable(exe1 exe1.cpp)
+  set_property(TARGET exe1 PROPERTY POSITION_INDEPENDENT_CODE ON)
+
+  add_library(lib1 SHARED lib1.cpp)
+  set_property(TARGET lib1 PROPERTY INTERFACE_POSITION_INDEPENDENT_CODE ON)
+
+  add_executable(exe2 exe2.cpp)
+  target_link_libraries(exe2 lib1)
+
+Here, both ``exe1`` and ``exe2`` will be compiled as position-independent-code.
+``lib1`` will also be compiled as position-independent-code because that is the
+default setting for ``SHARED`` libraries.  If dependencies have conflicting,
+non-compatible requirements :manual:`cmake(1)` issues a diagnostic:
+
+.. code-block:: cmake
+
+  add_library(lib1 SHARED lib1.cpp)
+  set_property(TARGET lib1 PROPERTY INTERFACE_POSITION_INDEPENDENT_CODE ON)
+
+  add_library(lib2 SHARED lib2.cpp)
+  set_property(TARGET lib2 PROPERTY INTERFACE_POSITION_INDEPENDENT_CODE OFF)
+
+  add_executable(exe1 exe1.cpp)
+  target_link_libraries(exe1 lib1)
+  set_property(TARGET exe1 PROPERTY POSITION_INDEPENDENT_CODE OFF)
+
+  add_executable(exe2 exe2.cpp)
+  target_link_libraries(exe2 lib1 lib2)
+
+The ``lib1`` requirement ``INTERFACE_POSITION_INDEPENDENT_CODE`` is not
+"compatible" with the :prop_tgt:`POSITION_INDEPENDENT_CODE` property of
+the ``exe1`` target.  The library requires that consumers are built as
+position-independent-code, while the executable specifies to not built as
+position-independent-code, so a diagnostic is issued.
+
+The ``lib1`` and ``lib2`` requirements are not "compatible".  One of them
+requires that consumers are built as position-independent-code, while
+the other requires that consumers are not built as position-independent-code.
+Because ``exe2`` links to both and they are in conflict, a CMake error message
+is issued::
+
+  CMake Error: The INTERFACE_POSITION_INDEPENDENT_CODE property of "lib2" does
+  not agree with the value of POSITION_INDEPENDENT_CODE already determined
+  for "exe2".
+
+To be "compatible", the :prop_tgt:`POSITION_INDEPENDENT_CODE` property,
+if set must be either the same, in a boolean sense, as the
+:prop_tgt:`INTERFACE_POSITION_INDEPENDENT_CODE` property of all transitively
+specified dependencies on which that property is set.
+
+This property of "compatible interface requirement" may be extended to other
+properties by specifying the property in the content of the
+:prop_tgt:`COMPATIBLE_INTERFACE_BOOL` target property.  Each specified property
+must be compatible between the consuming target and the corresponding property
+with an ``INTERFACE_`` prefix from each dependency:
+
+.. code-block:: cmake
+
+  add_library(lib1Version2 SHARED lib1_v2.cpp)
+  set_property(TARGET lib1Version2 PROPERTY INTERFACE_CUSTOM_PROP ON)
+  set_property(TARGET lib1Version2 APPEND PROPERTY
+    COMPATIBLE_INTERFACE_BOOL CUSTOM_PROP
+  )
+
+  add_library(lib1Version3 SHARED lib1_v3.cpp)
+  set_property(TARGET lib1Version3 PROPERTY INTERFACE_CUSTOM_PROP OFF)
+
+  add_executable(exe1 exe1.cpp)
+  target_link_libraries(exe1 lib1Version2) # CUSTOM_PROP will be ON
+
+  add_executable(exe2 exe2.cpp)
+  target_link_libraries(exe2 lib1Version2 lib1Version3) # Diagnostic
+
+Non-boolean properties may also participate in "compatible interface"
+computations.  Properties specified in the
+:prop_tgt:`COMPATIBLE_INTERFACE_STRING`
+property must be either unspecified or compare to the same string among
+all transitively specified dependencies. This can be useful to ensure
+that multiple incompatible versions of a library are not linked together
+through transitive requirements of a target:
+
+.. code-block:: cmake
+
+  add_library(lib1Version2 SHARED lib1_v2.cpp)
+  set_property(TARGET lib1Version2 PROPERTY INTERFACE_LIB_VERSION 2)
+  set_property(TARGET lib1Version2 APPEND PROPERTY
+    COMPATIBLE_INTERFACE_STRING LIB_VERSION
+  )
+
+  add_library(lib1Version3 SHARED lib1_v3.cpp)
+  set_property(TARGET lib1Version3 PROPERTY INTERFACE_LIB_VERSION 3)
+
+  add_executable(exe1 exe1.cpp)
+  target_link_libraries(exe1 lib1Version2) # LIB_VERSION will be "2"
+
+  add_executable(exe2 exe2.cpp)
+  target_link_libraries(exe2 lib1Version2 lib1Version3) # Diagnostic
+
+The :prop_tgt:`COMPATIBLE_INTERFACE_NUMBER_MAX` target property specifies
+that content will be evaluated numerically and the maximum number among all
+specified will be calculated:
+
+.. code-block:: cmake
+
+  add_library(lib1Version2 SHARED lib1_v2.cpp)
+  set_property(TARGET lib1Version2 PROPERTY INTERFACE_CONTAINER_SIZE_REQUIRED 200)
+  set_property(TARGET lib1Version2 APPEND PROPERTY
+    COMPATIBLE_INTERFACE_NUMBER_MAX CONTAINER_SIZE_REQUIRED
+  )
+
+  add_library(lib1Version3 SHARED lib1_v3.cpp)
+  set_property(TARGET lib1Version3 PROPERTY INTERFACE_CONTAINER_SIZE_REQUIRED 1000)
+
+  add_executable(exe1 exe1.cpp)
+  # CONTAINER_SIZE_REQUIRED will be "200"
+  target_link_libraries(exe1 lib1Version2)
+
+  add_executable(exe2 exe2.cpp)
+  # CONTAINER_SIZE_REQUIRED will be "1000"
+  target_link_libraries(exe2 lib1Version2 lib1Version3)
+
+Similarly, the :prop_tgt:`COMPATIBLE_INTERFACE_NUMBER_MIN` may be used to
+calculate the numeric minimum value for a property from dependencies.
+
+Each calculated "compatible" property value may be read in the consumer at
+generate-time using generator expressions.
+
+Note that for each dependee, the set of properties specified in each
+compatible interface property must not intersect with the set specified in
+any of the other properties.
+
+Property Origin Debugging
+-------------------------
+
+Because build specifications can be determined by dependencies, the lack of
+locality of code which creates a target and code which is responsible for
+setting build specifications may make the code more difficult to reason about.
+:manual:`cmake(1)` provides a debugging facility to print the origin of the
+contents of properties which may be determined by dependencies.  The properties
+which can be debugged are listed in the
+:variable:`CMAKE_DEBUG_TARGET_PROPERTIES` variable documentation:
+
+.. code-block:: cmake
+
+  set(CMAKE_DEBUG_TARGET_PROPERTIES
+    INCLUDE_DIRECTORIES
+    COMPILE_DEFINITIONS
+    POSITION_INDEPENDENT_CODE
+    CONTAINER_SIZE_REQUIRED
+    LIB_VERSION
+  )
+  add_executable(exe1 exe1.cpp)
+
+In the case of properties listed in :prop_tgt:`COMPATIBLE_INTERFACE_BOOL` or
+:prop_tgt:`COMPATIBLE_INTERFACE_STRING`, the debug output shows which target
+was responsible for setting the property, and which other dependencies also
+defined the property.  In the case of
+:prop_tgt:`COMPATIBLE_INTERFACE_NUMBER_MAX` and
+:prop_tgt:`COMPATIBLE_INTERFACE_NUMBER_MIN`, the debug output shows the
+value of the property from each dependency, and whether the value determines
+the new extreme.
+
+Build Specification with Generator Expressions
+----------------------------------------------
+
+Build specifications may use
+:manual:`generator expressions <cmake-generator-expressions(7)>` containing
+content which may be conditional or known only at generate-time.  For example,
+the calculated "compatible" value of a property may be read with the
+``TARGET_PROPERTY`` expression:
+
+.. code-block:: cmake
+
+  add_library(lib1Version2 SHARED lib1_v2.cpp)
+  set_property(TARGET lib1Version2 PROPERTY
+    INTERFACE_CONTAINER_SIZE_REQUIRED 200)
+  set_property(TARGET lib1Version2 APPEND PROPERTY
+    COMPATIBLE_INTERFACE_NUMBER_MAX CONTAINER_SIZE_REQUIRED
+  )
+
+  add_executable(exe1 exe1.cpp)
+  target_link_libraries(exe1 lib1Version2)
+  target_compile_definitions(exe1 PRIVATE
+      CONTAINER_SIZE=$<TARGET_PROPERTY:CONTAINER_SIZE_REQUIRED>
+  )
+
+In this case, the ``exe1`` source files will be compiled with
+``-DCONTAINER_SIZE=200``.
+
+The unary ``TARGET_PROPERTY`` generator expression and the ``TARGET_POLICY``
+generator expression are evaluated with the consuming target context.  This
+means that a usage requirement specification may be evaluated differently based
+on the consumer:
+
+.. code-block:: cmake
+
+  add_library(lib1 lib1.cpp)
+  target_compile_definitions(lib1 INTERFACE
+    $<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:LIB1_WITH_EXE>
+    $<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:LIB1_WITH_SHARED_LIB>
+    $<$<TARGET_POLICY:CMP0041>:CONSUMER_CMP0041_NEW>
+  )
+
+  add_executable(exe1 exe1.cpp)
+  target_link_libraries(exe1 lib1)
+
+  cmake_policy(SET CMP0041 NEW)
+
+  add_library(shared_lib shared_lib.cpp)
+  target_link_libraries(shared_lib lib1)
+
+The ``exe1`` executable will be compiled with ``-DLIB1_WITH_EXE``, while the
+``shared_lib`` shared library will be compiled with ``-DLIB1_WITH_SHARED_LIB``
+and ``-DCONSUMER_CMP0041_NEW``, because policy :policy:`CMP0041` is
+``NEW`` at the point where the ``shared_lib`` target is created.
+
+The ``BUILD_INTERFACE`` expression wraps requirements which are only used when
+consumed from a target in the same buildsystem, or when consumed from a target
+exported to the build directory using the :command:`export` command.  The
+``INSTALL_INTERFACE`` expression wraps requirements which are only used when
+consumed from a target which has been installed and exported with the
+:command:`install(EXPORT)` command:
+
+.. code-block:: cmake
+
+  add_library(ClimbingStats climbingstats.cpp)
+  target_compile_definitions(ClimbingStats INTERFACE
+    $<BUILD_INTERFACE:ClimbingStats_FROM_BUILD_LOCATION>
+    $<INSTALL_INTERFACE:ClimbingStats_FROM_INSTALLED_LOCATION>
+  )
+  install(TARGETS ClimbingStats EXPORT libExport ${InstallArgs})
+  install(EXPORT libExport NAMESPACE Upstream::
+          DESTINATION lib/cmake/ClimbingStats)
+  export(EXPORT libExport NAMESPACE Upstream::)
+
+  add_executable(exe1 exe1.cpp)
+  target_link_libraries(exe1 ClimbingStats)
+
+In this case, the ``exe1`` executable will be compiled with
+``-DClimbingStats_FROM_BUILD_LOCATION``.  The exporting commands generate
+:prop_tgt:`IMPORTED` targets with either the ``INSTALL_INTERFACE`` or the
+``BUILD_INTERFACE`` omitted, and the ``*_INTERFACE`` marker stripped away.
+A separate project consuming the ``ClimbingStats`` package would contain:
+
+.. code-block:: cmake
+
+  find_package(ClimbingStats REQUIRED)
+
+  add_executable(Downstream main.cpp)
+  target_link_libraries(Downstream Upstream::ClimbingStats)
+
+Depending on whether the ``ClimbingStats`` package was used from the build
+location or the install location, the ``Downstream`` target would be compiled
+with either ``-DClimbingStats_FROM_BUILD_LOCATION`` or
+``-DClimbingStats_FROM_INSTALL_LOCATION``.  For more about packages and
+exporting see the :manual:`cmake-packages(7)` manual.
+
+.. _`Include Directories and Usage Requirements`:
+
+Include Directories and Usage Requirements
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Include directories require some special consideration when specified as usage
+requirements and when used with generator expressions.  The
+:command:`target_include_directories` command accepts both relative and
+absolute include directories:
+
+.. code-block:: cmake
+
+  add_library(lib1 lib1.cpp)
+  target_include_directories(lib1 PRIVATE
+    /absolute/path
+    relative/path
+  )
+
+Relative paths are interpreted relative to the source directory where the
+command appears.  Relative paths are not allowed in the
+:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` of :prop_tgt:`IMPORTED` targets.
+
+In cases where a non-trivial generator expression is used, the
+``INSTALL_PREFIX`` expression may be used within the argument of an
+``INSTALL_INTERFACE`` expression.  It is a replacement marker which
+expands to the installation prefix when imported by a consuming project.
+
+Include directories usage requirements commonly differ between the build-tree
+and the install-tree.  The ``BUILD_INTERFACE`` and ``INSTALL_INTERFACE``
+generator expressions can be used to describe separate usage requirements
+based on the usage location.  Relative paths are allowed within the
+``INSTALL_INTERFACE`` expression and are interpreted relative to the
+installation prefix.  For example:
+
+.. code-block:: cmake
+
+  add_library(ClimbingStats climbingstats.cpp)
+  target_include_directories(ClimbingStats INTERFACE
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/generated>
+    $<INSTALL_INTERFACE:/absolute/path>
+    $<INSTALL_INTERFACE:relative/path>
+    $<INSTALL_INTERFACE:$<INSTALL_PREFIX>/$<CONFIG>/generated>
+  )
+
+Two convenience APIs are provided relating to include directories usage
+requirements.  The :variable:`CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE` variable
+may be enabled, with an equivalent effect to:
+
+.. code-block:: cmake
+
+  set_property(TARGET tgt APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR};${CMAKE_CURRENT_BINARY_DIR}>
+  )
+
+for each target affected.  The convenience for installed targets is
+an ``INCLUDES DESTINATION`` component with the :command:`install(TARGETS)`
+command:
+
+.. code-block:: cmake
+
+  install(TARGETS foo bar bat EXPORT tgts ${dest_args}
+    INCLUDES DESTINATION include
+  )
+  install(EXPORT tgts ${other_args})
+  install(FILES ${headers} DESTINATION include)
+
+This is equivalent to appending ``${CMAKE_INSTALL_PREFIX}/include`` to the
+:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` of each of the installed
+:prop_tgt:`IMPORTED` targets when generated by :command:`install(EXPORT)`.
+
+When the :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` of an
+:ref:`imported target <Imported targets>` is consumed, the entries in the
+property are treated as ``SYSTEM`` include directories, as if they were
+listed in the :prop_tgt:`INTERFACE_SYSTEM_INCLUDE_DIRECTORIES` of the
+dependency. This can result in omission of compiler warnings for headers
+found in those directories.  This behavior for :ref:`imported targets` may
+be controlled by setting the :prop_tgt:`NO_SYSTEM_FROM_IMPORTED` target
+property on the *consumers* of imported targets.
+
+If a binary target is linked transitively to a macOS :prop_tgt:`FRAMEWORK`, the
+``Headers`` directory of the framework is also treated as a usage requirement.
+This has the same effect as passing the framework directory as an include
+directory.
+
+Link Libraries and Generator Expressions
+----------------------------------------
+
+Like build specifications, :prop_tgt:`link libraries <LINK_LIBRARIES>` may be
+specified with generator expression conditions.  However, as consumption of
+usage requirements is based on collection from linked dependencies, there is
+an additional limitation that the link dependencies must form a "directed
+acyclic graph".  That is, if linking to a target is dependent on the value of
+a target property, that target property may not be dependent on the linked
+dependencies:
+
+.. code-block:: cmake
+
+  add_library(lib1 lib1.cpp)
+  add_library(lib2 lib2.cpp)
+  target_link_libraries(lib1 PUBLIC
+    $<$<TARGET_PROPERTY:POSITION_INDEPENDENT_CODE>:lib2>
+  )
+  add_library(lib3 lib3.cpp)
+  set_property(TARGET lib3 PROPERTY INTERFACE_POSITION_INDEPENDENT_CODE ON)
+
+  add_executable(exe1 exe1.cpp)
+  target_link_libraries(exe1 lib1 lib3)
+
+As the value of the :prop_tgt:`POSITION_INDEPENDENT_CODE` property of
+the ``exe1`` target is dependent on the linked libraries (``lib3``), and the
+edge of linking ``exe1`` is determined by the same
+:prop_tgt:`POSITION_INDEPENDENT_CODE` property, the dependency graph above
+contains a cycle.  :manual:`cmake(1)` issues an error message.
+
+.. _`Output Artifacts`:
+
+Output Artifacts
+----------------
+
+The buildsystem targets created by the :command:`add_library` and
+:command:`add_executable` commands create rules to create binary outputs.
+The exact output location of the binaries can only be determined at
+generate-time because it can depend on the build-configuration and the
+link-language of linked dependencies etc.  ``TARGET_FILE``,
+``TARGET_LINKER_FILE`` and related expressions can be used to access the
+name and location of generated binaries.  These expressions do not work
+for ``OBJECT`` libraries however, as there is no single file generated
+by such libraries which is relevant to the expressions.
+
+There are three kinds of output artifacts that may be build by targets
+as detailed in the following sections.  Their classification differs
+between DLL platforms and non-DLL platforms.  All Windows-based
+systems including Cygwin are DLL platforms.
+
+.. _`Runtime Output Artifacts`:
+
+Runtime Output Artifacts
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+A *runtime* output artifact of a buildsystem target may be:
+
+* The executable file (e.g. ``.exe``) of an executable target
+  created by the :command:`add_executable` command.
+
+* On DLL platforms: the executable file (e.g. ``.dll``) of a shared
+  library target created by the :command:`add_library` command
+  with the ``SHARED`` option.
+
+The :prop_tgt:`RUNTIME_OUTPUT_DIRECTORY` and :prop_tgt:`RUNTIME_OUTPUT_NAME`
+target properties may be used to control runtime output artifact locations
+and names in the build tree.
+
+.. _`Library Output Artifacts`:
+
+Library Output Artifacts
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+A *library* output artifact of a buildsystem target may be:
+
+* The loadable module file (e.g. ``.dll`` or ``.so``) of a module
+  library target created by the :command:`add_library` command
+  with the ``MODULE`` option.
+
+* On non-DLL platforms: the shared library file (e.g. ``.so`` or ``.dylib``)
+  of a shared library target created by the :command:`add_library`
+  command with the ``SHARED`` option.
+
+The :prop_tgt:`LIBRARY_OUTPUT_DIRECTORY` and :prop_tgt:`LIBRARY_OUTPUT_NAME`
+target properties may be used to control library output artifact locations
+and names in the build tree.
+
+.. _`Archive Output Artifacts`:
+
+Archive Output Artifacts
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+An *archive* output artifact of a buildsystem target may be:
+
+* The static library file (e.g. ``.lib`` or ``.a``) of a static
+  library target created by the :command:`add_library` command
+  with the ``STATIC`` option.
+
+* On DLL platforms: the import library file (e.g. ``.lib``) of a shared
+  library target created by the :command:`add_library` command
+  with the ``SHARED`` option.  This file is only guaranteed to exist if
+  the library exports at least one unmanaged symbol.
+
+* On DLL platforms: the import library file (e.g. ``.lib``) of an
+  executable target created by the :command:`add_executable` command
+  when its :prop_tgt:`ENABLE_EXPORTS` target property is set.
+
+* On AIX: the linker import file (e.g. ``.imp``) of an executable target
+  created by the :command:`add_executable` command when its
+  :prop_tgt:`ENABLE_EXPORTS` target property is set.
+
+The :prop_tgt:`ARCHIVE_OUTPUT_DIRECTORY` and :prop_tgt:`ARCHIVE_OUTPUT_NAME`
+target properties may be used to control archive output artifact locations
+and names in the build tree.
+
+Directory-Scoped Commands
+-------------------------
+
+The :command:`target_include_directories`,
+:command:`target_compile_definitions` and
+:command:`target_compile_options` commands have an effect on only one
+target at a time.  The commands :command:`add_compile_definitions`,
+:command:`add_compile_options` and :command:`include_directories` have
+a similar function, but operate at directory scope instead of target
+scope for convenience.
+
+.. _`Build Configurations`:
+
+Build Configurations
+====================
+
+Configurations determine specifications for a certain type of build, such
+as ``Release`` or ``Debug``.  The way this is specified depends on the type
+of :manual:`generator <cmake-generators(7)>` being used.  For single
+configuration generators like  :ref:`Makefile Generators` and
+:generator:`Ninja`, the configuration is specified at configure time by the
+:variable:`CMAKE_BUILD_TYPE` variable. For multi-configuration generators
+like :ref:`Visual Studio <Visual Studio Generators>`, :generator:`Xcode`, and
+:generator:`Ninja Multi-Config`, the configuration is chosen by the user at
+build time and :variable:`CMAKE_BUILD_TYPE` is ignored.  In the
+multi-configuration case, the set of *available* configurations is specified
+at configure time by the :variable:`CMAKE_CONFIGURATION_TYPES` variable,
+but the actual configuration used cannot be known until the build stage.
+This difference is often misunderstood, leading to problematic code like the
+following:
+
+.. code-block:: cmake
+
+  # WARNING: This is wrong for multi-config generators because they don't use
+  #          and typically don't even set CMAKE_BUILD_TYPE
+  string(TOLOWER ${CMAKE_BUILD_TYPE} build_type)
+  if (build_type STREQUAL debug)
+    target_compile_definitions(exe1 PRIVATE DEBUG_BUILD)
+  endif()
+
+:manual:`Generator expressions <cmake-generator-expressions(7)>` should be
+used instead to handle configuration-specific logic correctly, regardless of
+the generator used.  For example:
+
+.. code-block:: cmake
+
+  # Works correctly for both single and multi-config generators
+  target_compile_definitions(exe1 PRIVATE
+    $<$<CONFIG:Debug>:DEBUG_BUILD>
+  )
+
+In the presence of :prop_tgt:`IMPORTED` targets, the content of
+:prop_tgt:`MAP_IMPORTED_CONFIG_DEBUG <MAP_IMPORTED_CONFIG_<CONFIG>>` is also
+accounted for by the above ``$<CONFIG:Debug>`` expression.
+
+
+Case Sensitivity
+----------------
+
+:variable:`CMAKE_BUILD_TYPE` and :variable:`CMAKE_CONFIGURATION_TYPES` are
+just like other variables in that any string comparisons made with their
+values will be case-sensitive.  The ``$<CONFIG>`` generator expression also
+preserves the casing of the configuration as set by the user or CMake defaults.
+For example:
+
+.. code-block:: cmake
+
+  # NOTE: Don't use these patterns, they are for illustration purposes only.
+
+  set(CMAKE_BUILD_TYPE Debug)
+  if(CMAKE_BUILD_TYPE STREQUAL DEBUG)
+    # ... will never get here, "Debug" != "DEBUG"
+  endif()
+  add_custom_target(print_config ALL
+    # Prints "Config is Debug" in this single-config case
+    COMMAND ${CMAKE_COMMAND} -E echo "Config is $<CONFIG>"
+    VERBATIM
+  )
+
+  set(CMAKE_CONFIGURATION_TYPES Debug Release)
+  if(DEBUG IN_LIST CMAKE_CONFIGURATION_TYPES)
+    # ... will never get here, "Debug" != "DEBUG"
+  endif()
+
+In contrast, CMake treats the configuration type case-insensitively when
+using it internally in places that modify behavior based on the configuration.
+For example, the ``$<CONFIG:Debug>`` generator expression will evaluate to 1
+for a configuration of not only ``Debug``, but also ``DEBUG``, ``debug`` or
+even ``DeBuG``.  Therefore, you can specify configuration types in
+:variable:`CMAKE_BUILD_TYPE` and :variable:`CMAKE_CONFIGURATION_TYPES` with
+any mixture of upper and lowercase, although there are strong conventions
+(see the next section).  If you must test the value in string comparisons,
+always convert the value to upper or lowercase first and adjust the test
+accordingly.
+
+Default And Custom Configurations
+---------------------------------
+
+By default, CMake defines a number of standard configurations:
+
+* ``Debug``
+* ``Release``
+* ``RelWithDebInfo``
+* ``MinSizeRel``
+
+In multi-config generators, the :variable:`CMAKE_CONFIGURATION_TYPES` variable
+will be populated with (potentially a subset of) the above list by default,
+unless overridden by the project or user.  The actual configuration used is
+selected by the user at build time.
+
+For single-config generators, the configuration is specified with the
+:variable:`CMAKE_BUILD_TYPE` variable at configure time and cannot be changed
+at build time.  The default value will often be none of the above standard
+configurations and will instead be an empty string.  A common misunderstanding
+is that this is the same as ``Debug``, but that is not the case.  Users should
+always explicitly specify the build type instead to avoid this common problem.
+
+The above standard configuration types provide reasonable behavior on most
+platforms, but they can be extended to provide other types.  Each configuration
+defines a set of compiler and linker flag variables for the language in use.
+These variables follow the convention :variable:`CMAKE_<LANG>_FLAGS_<CONFIG>`,
+where ``<CONFIG>`` is always the uppercase configuration name.  When defining
+a custom configuration type, make sure these variables are set appropriately,
+typically as cache variables.
+
+
+Pseudo Targets
+==============
+
+Some target types do not represent outputs of the buildsystem, but only inputs
+such as external dependencies, aliases or other non-build artifacts.  Pseudo
+targets are not represented in the generated buildsystem.
+
+.. _`Imported Targets`:
+
+Imported Targets
+----------------
+
+An :prop_tgt:`IMPORTED` target represents a pre-existing dependency.  Usually
+such targets are defined by an upstream package and should be treated as
+immutable. After declaring an :prop_tgt:`IMPORTED` target one can adjust its
+target properties by using the customary commands such as
+:command:`target_compile_definitions`, :command:`target_include_directories`,
+:command:`target_compile_options` or :command:`target_link_libraries` just like
+with any other regular target.
+
+:prop_tgt:`IMPORTED` targets may have the same usage requirement properties
+populated as binary targets, such as
+:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES`,
+:prop_tgt:`INTERFACE_COMPILE_DEFINITIONS`,
+:prop_tgt:`INTERFACE_COMPILE_OPTIONS`,
+:prop_tgt:`INTERFACE_LINK_LIBRARIES`, and
+:prop_tgt:`INTERFACE_POSITION_INDEPENDENT_CODE`.
+
+The :prop_tgt:`LOCATION` may also be read from an IMPORTED target, though there
+is rarely reason to do so.  Commands such as :command:`add_custom_command` can
+transparently use an :prop_tgt:`IMPORTED` :prop_tgt:`EXECUTABLE <TYPE>` target
+as a ``COMMAND`` executable.
+
+The scope of the definition of an :prop_tgt:`IMPORTED` target is the directory
+where it was defined.  It may be accessed and used from subdirectories, but
+not from parent directories or sibling directories.  The scope is similar to
+the scope of a cmake variable.
+
+It is also possible to define a ``GLOBAL`` :prop_tgt:`IMPORTED` target which is
+accessible globally in the buildsystem.
+
+See the :manual:`cmake-packages(7)` manual for more on creating packages
+with :prop_tgt:`IMPORTED` targets.
+
+.. _`Alias Targets`:
+
+Alias Targets
+-------------
+
+An ``ALIAS`` target is a name which may be used interchangeably with
+a binary target name in read-only contexts.  A primary use-case for ``ALIAS``
+targets is for example or unit test executables accompanying a library, which
+may be part of the same buildsystem or built separately based on user
+configuration.
+
+.. code-block:: cmake
+
+  add_library(lib1 lib1.cpp)
+  install(TARGETS lib1 EXPORT lib1Export ${dest_args})
+  install(EXPORT lib1Export NAMESPACE Upstream:: ${other_args})
+
+  add_library(Upstream::lib1 ALIAS lib1)
+
+In another directory, we can link unconditionally to the ``Upstream::lib1``
+target, which may be an :prop_tgt:`IMPORTED` target from a package, or an
+``ALIAS`` target if built as part of the same buildsystem.
+
+.. code-block:: cmake
+
+  if (NOT TARGET Upstream::lib1)
+    find_package(lib1 REQUIRED)
+  endif()
+  add_executable(exe1 exe1.cpp)
+  target_link_libraries(exe1 Upstream::lib1)
+
+``ALIAS`` targets are not mutable, installable or exportable.  They are
+entirely local to the buildsystem description.  A name can be tested for
+whether it is an ``ALIAS`` name by reading the :prop_tgt:`ALIASED_TARGET`
+property from it:
+
+.. code-block:: cmake
+
+  get_target_property(_aliased Upstream::lib1 ALIASED_TARGET)
+  if(_aliased)
+    message(STATUS "The name Upstream::lib1 is an ALIAS for ${_aliased}.")
+  endif()
+
+.. _`Interface Libraries`:
+
+Interface Libraries
+-------------------
+
+An ``INTERFACE`` library target does not compile sources and does not
+produce a library artifact on disk, so it has no :prop_tgt:`LOCATION`.
+
+It may specify usage requirements such as
+:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES`,
+:prop_tgt:`INTERFACE_COMPILE_DEFINITIONS`,
+:prop_tgt:`INTERFACE_COMPILE_OPTIONS`,
+:prop_tgt:`INTERFACE_LINK_LIBRARIES`,
+:prop_tgt:`INTERFACE_SOURCES`,
+and :prop_tgt:`INTERFACE_POSITION_INDEPENDENT_CODE`.
+Only the ``INTERFACE`` modes of the :command:`target_include_directories`,
+:command:`target_compile_definitions`, :command:`target_compile_options`,
+:command:`target_sources`, and :command:`target_link_libraries` commands
+may be used with ``INTERFACE`` libraries.
+
+Since CMake 3.19, an ``INTERFACE`` library target may optionally contain
+source files.  An interface library that contains source files will be
+included as a build target in the generated buildsystem.  It does not
+compile sources, but may contain custom commands to generate other sources.
+Additionally, IDEs will show the source files as part of the target for
+interactive reading and editing.
+
+A primary use-case for ``INTERFACE`` libraries is header-only libraries.
+
+.. code-block:: cmake
+
+  add_library(Eigen INTERFACE
+    src/eigen.h
+    src/vector.h
+    src/matrix.h
+    )
+  target_include_directories(Eigen INTERFACE
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
+    $<INSTALL_INTERFACE:include/Eigen>
+  )
+
+  add_executable(exe1 exe1.cpp)
+  target_link_libraries(exe1 Eigen)
+
+Here, the usage requirements from the ``Eigen`` target are consumed and used
+when compiling, but it has no effect on linking.
+
+Another use-case is to employ an entirely target-focussed design for usage
+requirements:
+
+.. code-block:: cmake
+
+  add_library(pic_on INTERFACE)
+  set_property(TARGET pic_on PROPERTY INTERFACE_POSITION_INDEPENDENT_CODE ON)
+  add_library(pic_off INTERFACE)
+  set_property(TARGET pic_off PROPERTY INTERFACE_POSITION_INDEPENDENT_CODE OFF)
+
+  add_library(enable_rtti INTERFACE)
+  target_compile_options(enable_rtti INTERFACE
+    $<$<OR:$<COMPILER_ID:GNU>,$<COMPILER_ID:Clang>>:-rtti>
+  )
+
+  add_executable(exe1 exe1.cpp)
+  target_link_libraries(exe1 pic_on enable_rtti)
+
+This way, the build specification of ``exe1`` is expressed entirely as linked
+targets, and the complexity of compiler-specific flags is encapsulated in an
+``INTERFACE`` library target.
+
+``INTERFACE`` libraries may be installed and exported.  Any content they refer
+to must be installed separately:
+
+.. code-block:: cmake
+
+  set(Eigen_headers
+    src/eigen.h
+    src/vector.h
+    src/matrix.h
+    )
+  add_library(Eigen INTERFACE ${Eigen_headers})
+  target_include_directories(Eigen INTERFACE
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
+    $<INSTALL_INTERFACE:include/Eigen>
+  )
+
+  install(TARGETS Eigen EXPORT eigenExport)
+  install(EXPORT eigenExport NAMESPACE Upstream::
+    DESTINATION lib/cmake/Eigen
+  )
+  install(FILES ${Eigen_headers}
+    DESTINATION include/Eigen
+  )
diff --git a/share/cmake-3.22/Help/manual/cmake-commands.7.rst b/share/cmake-3.22/Help/manual/cmake-commands.7.rst
new file mode 100644
index 0000000..036fa8f
--- /dev/null
+++ b/share/cmake-3.22/Help/manual/cmake-commands.7.rst
@@ -0,0 +1,174 @@
+.. cmake-manual-description: CMake Language Command Reference
+
+cmake-commands(7)
+*****************
+
+.. only:: html
+
+   .. contents::
+
+Scripting Commands
+==================
+
+These commands are always available.
+
+.. toctree::
+   :maxdepth: 1
+
+   /command/break
+   /command/cmake_host_system_information
+   /command/cmake_language
+   /command/cmake_minimum_required
+   /command/cmake_parse_arguments
+   /command/cmake_path
+   /command/cmake_policy
+   /command/configure_file
+   /command/continue
+   /command/else
+   /command/elseif
+   /command/endforeach
+   /command/endfunction
+   /command/endif
+   /command/endmacro
+   /command/endwhile
+   /command/execute_process
+   /command/file
+   /command/find_file
+   /command/find_library
+   /command/find_package
+   /command/find_path
+   /command/find_program
+   /command/foreach
+   /command/function
+   /command/get_cmake_property
+   /command/get_directory_property
+   /command/get_filename_component
+   /command/get_property
+   /command/if
+   /command/include
+   /command/include_guard
+   /command/list
+   /command/macro
+   /command/mark_as_advanced
+   /command/math
+   /command/message
+   /command/option
+   /command/return
+   /command/separate_arguments
+   /command/set
+   /command/set_directory_properties
+   /command/set_property
+   /command/site_name
+   /command/string
+   /command/unset
+   /command/variable_watch
+   /command/while
+
+Project Commands
+================
+
+These commands are available only in CMake projects.
+
+.. toctree::
+   :maxdepth: 1
+
+   /command/add_compile_definitions
+   /command/add_compile_options
+   /command/add_custom_command
+   /command/add_custom_target
+   /command/add_definitions
+   /command/add_dependencies
+   /command/add_executable
+   /command/add_library
+   /command/add_link_options
+   /command/add_subdirectory
+   /command/add_test
+   /command/aux_source_directory
+   /command/build_command
+   /command/create_test_sourcelist
+   /command/define_property
+   /command/enable_language
+   /command/enable_testing
+   /command/export
+   /command/fltk_wrap_ui
+   /command/get_source_file_property
+   /command/get_target_property
+   /command/get_test_property
+   /command/include_directories
+   /command/include_external_msproject
+   /command/include_regular_expression
+   /command/install
+   /command/link_directories
+   /command/link_libraries
+   /command/load_cache
+   /command/project
+   /command/remove_definitions
+   /command/set_source_files_properties
+   /command/set_target_properties
+   /command/set_tests_properties
+   /command/source_group
+   /command/target_compile_definitions
+   /command/target_compile_features
+   /command/target_compile_options
+   /command/target_include_directories
+   /command/target_link_directories
+   /command/target_link_libraries
+   /command/target_link_options
+   /command/target_precompile_headers
+   /command/target_sources
+   /command/try_compile
+   /command/try_run
+
+.. _`CTest Commands`:
+
+CTest Commands
+==============
+
+These commands are available only in CTest scripts.
+
+.. toctree::
+   :maxdepth: 1
+
+   /command/ctest_build
+   /command/ctest_configure
+   /command/ctest_coverage
+   /command/ctest_empty_binary_directory
+   /command/ctest_memcheck
+   /command/ctest_read_custom_files
+   /command/ctest_run_script
+   /command/ctest_sleep
+   /command/ctest_start
+   /command/ctest_submit
+   /command/ctest_test
+   /command/ctest_update
+   /command/ctest_upload
+
+Deprecated Commands
+===================
+
+These commands are deprecated and are only made available to maintain
+backward compatibility.  The documentation of each command states the
+CMake version in which it was deprecated.  Do not use these commands
+in new code.
+
+.. toctree::
+   :maxdepth: 1
+
+   /command/build_name
+   /command/exec_program
+   /command/export_library_dependencies
+   /command/install_files
+   /command/install_programs
+   /command/install_targets
+   /command/load_command
+   /command/make_directory
+   /command/output_required_files
+   /command/qt_wrap_cpp
+   /command/qt_wrap_ui
+   /command/remove
+   /command/subdir_depends
+   /command/subdirs
+   /command/use_mangled_mesa
+   /command/utility_source
+   /command/variable_requires
+   /command/write_file
diff --git a/share/cmake-3.22/Help/manual/cmake-compile-features.7.rst b/share/cmake-3.22/Help/manual/cmake-compile-features.7.rst
new file mode 100644
index 0000000..67b0f6e
--- /dev/null
+++ b/share/cmake-3.22/Help/manual/cmake-compile-features.7.rst
@@ -0,0 +1,282 @@
+.. cmake-manual-description: CMake Compile Features Reference
+
+cmake-compile-features(7)
+*************************
+
+.. only:: html
+
+   .. contents::
+
+Introduction
+============
+
+Project source code may depend on, or be conditional on, the availability
+of certain features of the compiler.  There are three use-cases which arise:
+`Compile Feature Requirements`_, `Optional Compile Features`_
+and `Conditional Compilation Options`_.
+
+While features are typically specified in programming language standards,
+CMake provides a primary user interface based on granular handling of
+the features, not the language standard that introduced the feature.
+
+The :prop_gbl:`CMAKE_C_KNOWN_FEATURES`, :prop_gbl:`CMAKE_CUDA_KNOWN_FEATURES`,
+and :prop_gbl:`CMAKE_CXX_KNOWN_FEATURES` global properties contain all the
+features known to CMake, regardless of compiler support for the feature.
+The :variable:`CMAKE_C_COMPILE_FEATURES`, :variable:`CMAKE_CUDA_COMPILE_FEATURES`
+, and :variable:`CMAKE_CXX_COMPILE_FEATURES` variables contain all features
+CMake knows are known to the compiler, regardless of language standard
+or compile flags needed to use them.
+
+Features known to CMake are named mostly following the same convention
+as the Clang feature test macros.  There are some exceptions, such as
+CMake using ``cxx_final`` and ``cxx_override`` instead of the single
+``cxx_override_control`` used by Clang.
+
+Note that there are no separate compile features properties or variables for
+the ``OBJC`` or ``OBJCXX`` languages.  These are based off ``C`` or ``C++``
+respectively, so the properties and variables for their corresponding base
+language should be used instead.
+
+Compile Feature Requirements
+============================
+
+Compile feature requirements may be specified with the
+:command:`target_compile_features` command.  For example, if a target must
+be compiled with compiler support for the
+:prop_gbl:`cxx_constexpr <CMAKE_CXX_KNOWN_FEATURES>` feature:
+
+.. code-block:: cmake
+
+  add_library(mylib requires_constexpr.cpp)
+  target_compile_features(mylib PRIVATE cxx_constexpr)
+
+In processing the requirement for the ``cxx_constexpr`` feature,
+:manual:`cmake(1)` will ensure that the in-use C++ compiler is capable
+of the feature, and will add any necessary flags such as ``-std=gnu++11``
+to the compile lines of C++ files in the ``mylib`` target.  A
+``FATAL_ERROR`` is issued if the compiler is not capable of the
+feature.
+
+The exact compile flags and language standard are deliberately not part
+of the user interface for this use-case.  CMake will compute the
+appropriate compile flags to use by considering the features specified
+for each target.
+
+Such compile flags are added even if the compiler supports the
+particular feature without the flag. For example, the GNU compiler
+supports variadic templates (with a warning) even if ``-std=gnu++98`` is
+used.  CMake adds the ``-std=gnu++11`` flag if ``cxx_variadic_templates``
+is specified as a requirement.
+
+In the above example, ``mylib`` requires ``cxx_constexpr`` when it
+is built itself, but consumers of ``mylib`` are not required to use a
+compiler which supports ``cxx_constexpr``.  If the interface of
+``mylib`` does require the ``cxx_constexpr`` feature (or any other
+known feature), that may be specified with the ``PUBLIC`` or
+``INTERFACE`` signatures of :command:`target_compile_features`:
+
+.. code-block:: cmake
+
+  add_library(mylib requires_constexpr.cpp)
+  # cxx_constexpr is a usage-requirement
+  target_compile_features(mylib PUBLIC cxx_constexpr)
+
+  # main.cpp will be compiled with -std=gnu++11 on GNU for cxx_constexpr.
+  add_executable(myexe main.cpp)
+  target_link_libraries(myexe mylib)
+
+Feature requirements are evaluated transitively by consuming the link
+implementation.  See :manual:`cmake-buildsystem(7)` for more on
+transitive behavior of build properties and usage requirements.
+
+.. _`Requiring Language Standards`:
+
+Requiring Language Standards
+----------------------------
+
+In projects that use a large number of commonly available features from
+a particular language standard (e.g. C++ 11) one may specify a
+meta-feature (e.g. ``cxx_std_11``) that requires use of a compiler mode
+that is at minimum aware of that standard, but could be greater.
+This is simpler than specifying all the features individually, but does
+not guarantee the existence of any particular feature.
+Diagnosis of use of unsupported features will be delayed until compile time.
+
+For example, if C++ 11 features are used extensively in a project's
+header files, then clients must use a compiler mode that is no less
+than C++ 11.  This can be requested with the code:
+
+.. code-block:: cmake
+
+  target_compile_features(mylib PUBLIC cxx_std_11)
+
+In this example, CMake will ensure the compiler is invoked in a mode
+of at-least C++ 11 (or C++ 14, C++ 17, ...), adding flags such as
+``-std=gnu++11`` if necessary.  This applies to sources within ``mylib``
+as well as any dependents (that may include headers from ``mylib``).
+
+Availability of Compiler Extensions
+-----------------------------------
+
+The :prop_tgt:`<LANG>_EXTENSIONS` target property defaults to the compiler's
+default (see :variable:`CMAKE_<LANG>_EXTENSIONS_DEFAULT`). Note that because
+most compilers enable extensions by default, this may expose portability bugs
+in user code or in the headers of third-party dependencies.
+
+:prop_tgt:`<LANG>_EXTENSIONS` used to default to ``ON``. See :policy:`CMP0128`.
+
+Optional Compile Features
+=========================
+
+Compile features may be preferred if available, without creating a hard
+requirement.   This can be achieved by *not* specifying features with
+:command:`target_compile_features` and instead checking the compiler
+capabilities with preprocessor conditions in project code.
+
+In this use-case, the project may wish to establish a particular language
+standard if available from the compiler, and use preprocessor conditions
+to detect the features actually available.  A language standard may be
+established by `Requiring Language Standards`_ using
+:command:`target_compile_features` with meta-features like ``cxx_std_11``,
+or by setting the :prop_tgt:`CXX_STANDARD` target property or
+:variable:`CMAKE_CXX_STANDARD` variable.
+
+See also policy :policy:`CMP0120` and legacy documentation on
+:ref:`Example Usage <WCDH Example Usage>` of the deprecated
+:module:`WriteCompilerDetectionHeader` module.
+
+Conditional Compilation Options
+===============================
+
+Libraries may provide entirely different header files depending on
+requested compiler features.
+
+For example, a header at ``with_variadics/interface.h`` may contain:
+
+.. code-block:: c++
+
+  template<int I, int... Is>
+  struct Interface;
+
+  template<int I>
+  struct Interface<I>
+  {
+    static int accumulate()
+    {
+      return I;
+    }
+  };
+
+  template<int I, int... Is>
+  struct Interface
+  {
+    static int accumulate()
+    {
+      return I + Interface<Is...>::accumulate();
+    }
+  };
+
+while a header at ``no_variadics/interface.h`` may contain:
+
+.. code-block:: c++
+
+  template<int I1, int I2 = 0, int I3 = 0, int I4 = 0>
+  struct Interface
+  {
+    static int accumulate() { return I1 + I2 + I3 + I4; }
+  };
+
+It may be possible to write an abstraction ``interface.h`` header
+containing something like:
+
+.. code-block:: c++
+
+  #ifdef HAVE_CXX_VARIADIC_TEMPLATES
+  #include "with_variadics/interface.h"
+  #else
+  #include "no_variadics/interface.h"
+  #endif
+
+However this could be unmaintainable if there are many files to
+abstract. What is needed is to use alternative include directories
+depending on the compiler capabilities.
+
+CMake provides a ``COMPILE_FEATURES``
+:manual:`generator expression <cmake-generator-expressions(7)>` to implement
+such conditions.  This may be used with the build-property commands such as
+:command:`target_include_directories` and :command:`target_link_libraries`
+to set the appropriate :manual:`buildsystem <cmake-buildsystem(7)>`
+properties:
+
+.. code-block:: cmake
+
+  add_library(foo INTERFACE)
+  set(with_variadics ${CMAKE_CURRENT_SOURCE_DIR}/with_variadics)
+  set(no_variadics ${CMAKE_CURRENT_SOURCE_DIR}/no_variadics)
+  target_include_directories(foo
+    INTERFACE
+      "$<$<COMPILE_FEATURES:cxx_variadic_templates>:${with_variadics}>"
+      "$<$<NOT:$<COMPILE_FEATURES:cxx_variadic_templates>>:${no_variadics}>"
+    )
+
+Consuming code then simply links to the ``foo`` target as usual and uses
+the feature-appropriate include directory
+
+.. code-block:: cmake
+
+  add_executable(consumer_with consumer_with.cpp)
+  target_link_libraries(consumer_with foo)
+  set_property(TARGET consumer_with CXX_STANDARD 11)
+
+  add_executable(consumer_no consumer_no.cpp)
+  target_link_libraries(consumer_no foo)
+
+Supported Compilers
+===================
+
+CMake is currently aware of the :prop_tgt:`C++ standards <CXX_STANDARD>`
+and :prop_gbl:`compile features <CMAKE_CXX_KNOWN_FEATURES>` available from
+the following :variable:`compiler ids <CMAKE_<LANG>_COMPILER_ID>` as of the
+versions specified for each:
+
+* ``AppleClang``: Apple Clang for Xcode versions 4.4+.
+* ``Clang``: Clang compiler versions 2.9+.
+* ``GNU``: GNU compiler versions 4.4+.
+* ``MSVC``: Microsoft Visual Studio versions 2010+.
+* ``SunPro``: Oracle SolarisStudio versions 12.4+.
+* ``Intel``: Intel compiler versions 12.1+.
+
+CMake is currently aware of the :prop_tgt:`C standards <C_STANDARD>`
+and :prop_gbl:`compile features <CMAKE_C_KNOWN_FEATURES>` available from
+the following :variable:`compiler ids <CMAKE_<LANG>_COMPILER_ID>` as of the
+versions specified for each:
+
+* all compilers and versions listed above for C++.
+* ``GNU``: GNU compiler versions 3.4+
+
+CMake is currently aware of the :prop_tgt:`C++ standards <CXX_STANDARD>` and
+their associated meta-features (e.g. ``cxx_std_11``) available from the
+following :variable:`compiler ids <CMAKE_<LANG>_COMPILER_ID>` as of the
+versions specified for each:
+
+* ``Cray``: Cray Compiler Environment version 8.1+.
+* ``Fujitsu``: Fujitsu HPC compiler 4.0+.
+* ``PGI``: PGI version 12.10+.
+* ``NVHPC``: NVIDIA HPC compilers version 11.0+.
+* ``TI``: Texas Instruments compiler.
+* ``XL``: IBM XL version 10.1+.
+
+CMake is currently aware of the :prop_tgt:`C standards <C_STANDARD>` and
+their associated meta-features (e.g. ``c_std_99``) available from the
+following :variable:`compiler ids <CMAKE_<LANG>_COMPILER_ID>` as of the
+versions specified for each:
+
+* all compilers and versions listed above with only meta-features for C++.
+
+CMake is currently aware of the :prop_tgt:`CUDA standards <CUDA_STANDARD>` and
+their associated meta-features (e.g. ``cuda_std_11``) available from the
+following :variable:`compiler ids <CMAKE_<LANG>_COMPILER_ID>` as of the
+versions specified for each:
+
+* ``Clang``: Clang compiler 5.0+.
+* ``NVIDIA``: NVIDIA nvcc compiler 7.5+.
diff --git a/share/cmake-3.22/Help/manual/cmake-developer.7.rst b/share/cmake-3.22/Help/manual/cmake-developer.7.rst
new file mode 100644
index 0000000..fe146de
--- /dev/null
+++ b/share/cmake-3.22/Help/manual/cmake-developer.7.rst
@@ -0,0 +1,501 @@
+.. cmake-manual-description: CMake Developer Reference
+
+cmake-developer(7)
+******************
+
+.. only:: html
+
+   .. contents::
+
+Introduction
+============
+
+This manual is intended for reference by developers working with
+:manual:`cmake-language(7)` code, whether writing their own modules,
+authoring their own build systems, or working on CMake itself.
+
+See https://cmake.org/get-involved/ to get involved in development of
+CMake upstream.  It includes links to contribution instructions, which
+in turn link to developer guides for CMake itself.
+
+.. _`Find Modules`:
+
+Find Modules
+============
+
+A "find module" is a ``Find<PackageName>.cmake`` file to be loaded by the
+:command:`find_package` command when invoked for ``<PackageName>``.
+
+The primary task of a find module is to determine whether a package is
+available, set the ``<PackageName>_FOUND`` variable to reflect this and
+provide any variables, macros and imported targets required to use the
+package.  A find module is useful in cases where an upstream library does
+not provide a :ref:`config file package <Config File Packages>`.
+
+The traditional approach is to use variables for everything, including
+libraries and executables: see the `Standard Variable Names`_ section
+below.  This is what most of the existing find modules provided by CMake
+do.
+
+The more modern approach is to behave as much like
+:ref:`config file packages <Config File Packages>` files as possible, by
+providing :ref:`imported target <Imported targets>`.  This has the advantage
+of propagating :ref:`Target Usage Requirements` to consumers.
+
+In either case (or even when providing both variables and imported
+targets), find modules should provide backwards compatibility with old
+versions that had the same name.
+
+A FindFoo.cmake module will typically be loaded by the command::
+
+  find_package(Foo [major[.minor[.patch[.tweak]]]]
+               [EXACT] [QUIET] [REQUIRED]
+               [[COMPONENTS] [components...]]
+               [OPTIONAL_COMPONENTS components...]
+               [NO_POLICY_SCOPE])
+
+See the :command:`find_package` documentation for details on what
+variables are set for the find module.  Most of these are dealt with by
+using :module:`FindPackageHandleStandardArgs`.
+
+Briefly, the module should only locate versions of the package
+compatible with the requested version, as described by the
+``Foo_FIND_VERSION`` family of variables.  If ``Foo_FIND_QUIETLY`` is
+set to true, it should avoid printing messages, including anything
+complaining about the package not being found.  If ``Foo_FIND_REQUIRED``
+is set to true, the module should issue a ``FATAL_ERROR`` if the package
+cannot be found.  If neither are set to true, it should print a
+non-fatal message if it cannot find the package.
+
+Packages that find multiple semi-independent parts (like bundles of
+libraries) should search for the components listed in
+``Foo_FIND_COMPONENTS`` if it is set , and only set ``Foo_FOUND`` to
+true if for each searched-for component ``<c>`` that was not found,
+``Foo_FIND_REQUIRED_<c>`` is not set to true.  The ``HANDLE_COMPONENTS``
+argument of ``find_package_handle_standard_args()`` can be used to
+implement this.
+
+If ``Foo_FIND_COMPONENTS`` is not set, which modules are searched for
+and required is up to the find module, but should be documented.
+
+For internal implementation, it is a generally accepted convention that
+variables starting with underscore are for temporary use only.
+
+
+.. _`CMake Developer Standard Variable Names`:
+
+Standard Variable Names
+-----------------------
+
+For a ``FindXxx.cmake`` module that takes the approach of setting
+variables (either instead of or in addition to creating imported
+targets), the following variable names should be used to keep things
+consistent between Find modules.  Note that all variables start with
+``Xxx_``, which (unless otherwise noted) must match exactly the name
+of the ``FindXxx.cmake`` file, including upper/lowercase.
+This prefix on the variable names ensures that they do not conflict with
+variables of other Find modules.  The same pattern should also be followed
+for any macros, functions and imported targets defined by the Find module.
+
+``Xxx_INCLUDE_DIRS``
+  The final set of include directories listed in one variable for use by
+  client code. This should not be a cache entry (note that this also means
+  this variable should not be used as the result variable of a
+  :command:`find_path` command - see ``Xxx_INCLUDE_DIR`` below for that).
+
+``Xxx_LIBRARIES``
+  The libraries to use with the module.  These may be CMake targets, full
+  absolute paths to a library binary or the name of a library that the
+  linker must find in its search path.  This should not be a cache entry
+  (note that this also means this variable should not be used as the
+  result variable of a :command:`find_library` command - see
+  ``Xxx_LIBRARY`` below for that).
+
+``Xxx_DEFINITIONS``
+  The compile definitions to use when compiling code that uses the module.
+  This really shouldn't include options such as ``-DHAS_JPEG`` that a client
+  source-code file uses to decide whether to ``#include <jpeg.h>``
+
+``Xxx_EXECUTABLE``
+  The full absolute path to an executable.  In this case, ``Xxx`` might not
+  be the name of the module, it might be the name of the tool (usually
+  converted to all uppercase), assuming that tool has such a well-known name
+  that it is unlikely that another tool with the same name exists.  It would
+  be appropriate to use this as the result variable of a
+  :command:`find_program` command.
+
+``Xxx_YYY_EXECUTABLE``
+  Similar to ``Xxx_EXECUTABLE`` except here the ``Xxx`` is always the module
+  name and ``YYY`` is the tool name (again, usually fully uppercase).
+  Prefer this form if the tool name is not very widely known or has the
+  potential  to clash with another tool.  For greater consistency, also
+  prefer this form if the module provides more than one executable.
+
+``Xxx_LIBRARY_DIRS``
+  Optionally, the final set of library directories listed in one
+  variable for use by client code. This should not be a cache entry.
+
+``Xxx_ROOT_DIR``
+  Where to find the base directory of the module.
+
+``Xxx_VERSION_VV``
+  Variables of this form specify whether the ``Xxx`` module being provided
+  is version ``VV`` of the module.  There should not be more than one
+  variable of this form set to true for a given module.  For example, a
+  module ``Barry`` might have evolved over many years and gone through a
+  number of different major versions.  Version 3 of the ``Barry`` module
+  might set the variable ``Barry_VERSION_3`` to true, whereas an older
+  version of the module might set ``Barry_VERSION_2`` to true instead.
+  It would be an error for both ``Barry_VERSION_3`` and ``Barry_VERSION_2``
+  to both be set to true.
+
+``Xxx_WRAP_YY``
+  When a variable of this form is set to false, it indicates that the
+  relevant wrapping command should not be used.  The wrapping command
+  depends on the module, it may be implied by the module name or it might
+  be specified by the ``YY`` part of the variable.
+
+``Xxx_Yy_FOUND``
+  For variables of this form, ``Yy`` is the name of a component for the
+  module.  It should match exactly one of the valid component names that
+  may be passed to the :command:`find_package` command for the module.
+  If a variable of this form is set to false, it means that the ``Yy``
+  component of module ``Xxx`` was not found or is not available.
+  Variables of this form would typically be used for optional components
+  so that the caller can check whether an optional component is available.
+
+``Xxx_FOUND``
+  When the :command:`find_package` command returns to the caller, this
+  variable will be set to true if the module was deemed to have been found
+  successfully.
+
+``Xxx_NOT_FOUND_MESSAGE``
+  Should be set by config-files in the case that it has set
+  ``Xxx_FOUND`` to FALSE.  The contained message will be printed by the
+  :command:`find_package` command and by
+  :command:`find_package_handle_standard_args` to inform the user about the
+  problem.  Use this instead of calling :command:`message` directly to
+  report a reason for failing to find the module or package.
+
+``Xxx_RUNTIME_LIBRARY_DIRS``
+  Optionally, the runtime library search path for use when running an
+  executable linked to shared libraries.  The list should be used by
+  user code to create the ``PATH`` on windows or ``LD_LIBRARY_PATH`` on
+  UNIX.  This should not be a cache entry.
+
+``Xxx_VERSION``
+  The full version string of the package found, if any.  Note that many
+  existing modules provide ``Xxx_VERSION_STRING`` instead.
+
+``Xxx_VERSION_MAJOR``
+  The major version of the package found, if any.
+
+``Xxx_VERSION_MINOR``
+  The minor version of the package found, if any.
+
+``Xxx_VERSION_PATCH``
+  The patch version of the package found, if any.
+
+The following names should not usually be used in ``CMakeLists.txt`` files.
+They are intended for use by Find modules to specify and cache the locations
+of specific files or directories.  Users are typically able to set and edit
+these variables to control the behavior of Find modules (like entering the
+path to a library manually):
+
+``Xxx_LIBRARY``
+  The path of the library.  Use this form only when the module provides a
+  single library.  It is appropriate to use this as the result variable
+  in a :command:`find_library` command.
+
+``Xxx_Yy_LIBRARY``
+  The path of library ``Yy`` provided by the module ``Xxx``.  Use this form
+  when the module provides more than one library or where other modules may
+  also provide a library of the same name. It is also appropriate to use
+  this form as the result variable in a :command:`find_library` command.
+
+``Xxx_INCLUDE_DIR``
+  When the module provides only a single library, this variable can be used
+  to specify where to find headers for using the library (or more accurately,
+  the path that consumers of the library should add to their header search
+  path).  It would be appropriate to use this as the result variable in a
+  :command:`find_path` command.
+
+``Xxx_Yy_INCLUDE_DIR``
+  If the module provides more than one library or where other modules may
+  also provide a library of the same name, this form is recommended for
+  specifying where to find headers for using library ``Yy`` provided by
+  the module.  Again, it would be appropriate to use this as the result
+  variable in a :command:`find_path` command.
+
+To prevent users being overwhelmed with settings to configure, try to
+keep as many options as possible out of the cache, leaving at least one
+option which can be used to disable use of the module, or locate a
+not-found library (e.g. ``Xxx_ROOT_DIR``).  For the same reason, mark
+most cache options as advanced.  For packages which provide both debug
+and release binaries, it is common to create cache variables with a
+``_LIBRARY_<CONFIG>`` suffix, such as ``Foo_LIBRARY_RELEASE`` and
+``Foo_LIBRARY_DEBUG``.  The :module:`SelectLibraryConfigurations` module
+can be helpful for such cases.
+
+While these are the standard variable names, you should provide
+backwards compatibility for any old names that were actually in use.
+Make sure you comment them as deprecated, so that no-one starts using
+them.
+
+
+A Sample Find Module
+--------------------
+
+We will describe how to create a simple find module for a library ``Foo``.
+
+The top of the module should begin with a license notice, followed by
+a blank line, and then followed by a :ref:`Bracket Comment`.  The comment
+should begin with ``.rst:`` to indicate that the rest of its content is
+reStructuredText-format documentation.  For example:
+
+::
+
+  # Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+  # file Copyright.txt or https://cmake.org/licensing for details.
+
+  #[=======================================================================[.rst:
+  FindFoo
+  -------
+
+  Finds the Foo library.
+
+  Imported Targets
+  ^^^^^^^^^^^^^^^^
+
+  This module provides the following imported targets, if found:
+
+  ``Foo::Foo``
+    The Foo library
+
+  Result Variables
+  ^^^^^^^^^^^^^^^^
+
+  This will define the following variables:
+
+  ``Foo_FOUND``
+    True if the system has the Foo library.
+  ``Foo_VERSION``
+    The version of the Foo library which was found.
+  ``Foo_INCLUDE_DIRS``
+    Include directories needed to use Foo.
+  ``Foo_LIBRARIES``
+    Libraries needed to link to Foo.
+
+  Cache Variables
+  ^^^^^^^^^^^^^^^
+
+  The following cache variables may also be set:
+
+  ``Foo_INCLUDE_DIR``
+    The directory containing ``foo.h``.
+  ``Foo_LIBRARY``
+    The path to the Foo library.
+
+  #]=======================================================================]
+
+The module documentation consists of:
+
+* An underlined heading specifying the module name.
+
+* A simple description of what the module finds.
+  More description may be required for some packages.  If there are
+  caveats or other details users of the module should be aware of,
+  specify them here.
+
+* A section listing imported targets provided by the module, if any.
+
+* A section listing result variables provided by the module.
+
+* Optionally a section listing cache variables used by the module, if any.
+
+If the package provides any macros or functions, they should be listed in
+an additional section, but can be documented by additional ``.rst:``
+comment blocks immediately above where those macros or functions are defined.
+
+The find module implementation may begin below the documentation block.
+Now the actual libraries and so on have to be found.  The code here will
+obviously vary from module to module (dealing with that, after all, is the
+point of find modules), but there tends to be a common pattern for libraries.
+
+First, we try to use ``pkg-config`` to find the library.  Note that we
+cannot rely on this, as it may not be available, but it provides a good
+starting point.
+
+.. code-block:: cmake
+
+  find_package(PkgConfig)
+  pkg_check_modules(PC_Foo QUIET Foo)
+
+This should define some variables starting ``PC_Foo_`` that contain the
+information from the ``Foo.pc`` file.
+
+Now we need to find the libraries and include files; we use the
+information from ``pkg-config`` to provide hints to CMake about where to
+look.
+
+.. code-block:: cmake
+
+  find_path(Foo_INCLUDE_DIR
+    NAMES foo.h
+    PATHS ${PC_Foo_INCLUDE_DIRS}
+    PATH_SUFFIXES Foo
+  )
+  find_library(Foo_LIBRARY
+    NAMES foo
+    PATHS ${PC_Foo_LIBRARY_DIRS}
+  )
+
+Alternatively, if the library is available with multiple configurations, you can
+use :module:`SelectLibraryConfigurations` to automatically set the
+``Foo_LIBRARY`` variable instead:
+
+.. code-block:: cmake
+
+  find_library(Foo_LIBRARY_RELEASE
+    NAMES foo
+    PATHS ${PC_Foo_LIBRARY_DIRS}/Release
+  )
+  find_library(Foo_LIBRARY_DEBUG
+    NAMES foo
+    PATHS ${PC_Foo_LIBRARY_DIRS}/Debug
+  )
+
+  include(SelectLibraryConfigurations)
+  select_library_configurations(Foo)
+
+If you have a good way of getting the version (from a header file, for
+example), you can use that information to set ``Foo_VERSION`` (although
+note that find modules have traditionally used ``Foo_VERSION_STRING``,
+so you may want to set both).  Otherwise, attempt to use the information
+from ``pkg-config``
+
+.. code-block:: cmake
+
+  set(Foo_VERSION ${PC_Foo_VERSION})
+
+Now we can use :module:`FindPackageHandleStandardArgs` to do most of the
+rest of the work for us
+
+.. code-block:: cmake
+
+  include(FindPackageHandleStandardArgs)
+  find_package_handle_standard_args(Foo
+    FOUND_VAR Foo_FOUND
+    REQUIRED_VARS
+      Foo_LIBRARY
+      Foo_INCLUDE_DIR
+    VERSION_VAR Foo_VERSION
+  )
+
+This will check that the ``REQUIRED_VARS`` contain values (that do not
+end in ``-NOTFOUND``) and set ``Foo_FOUND`` appropriately.  It will also
+cache those values.  If ``Foo_VERSION`` is set, and a required version
+was passed to :command:`find_package`, it will check the requested version
+against the one in ``Foo_VERSION``.  It will also print messages as
+appropriate; note that if the package was found, it will print the
+contents of the first required variable to indicate where it was found.
+
+At this point, we have to provide a way for users of the find module to
+link to the library or libraries that were found.  There are two
+approaches, as discussed in the `Find Modules`_ section above.  The
+traditional variable approach looks like
+
+.. code-block:: cmake
+
+  if(Foo_FOUND)
+    set(Foo_LIBRARIES ${Foo_LIBRARY})
+    set(Foo_INCLUDE_DIRS ${Foo_INCLUDE_DIR})
+    set(Foo_DEFINITIONS ${PC_Foo_CFLAGS_OTHER})
+  endif()
+
+If more than one library was found, all of them should be included in
+these variables (see the `Standard Variable Names`_ section for more
+information).
+
+When providing imported targets, these should be namespaced (hence the
+``Foo::`` prefix); CMake will recognize that values passed to
+:command:`target_link_libraries` that contain ``::`` in their name are
+supposed to be imported targets (rather than just library names), and
+will produce appropriate diagnostic messages if that target does not
+exist (see policy :policy:`CMP0028`).
+
+.. code-block:: cmake
+
+  if(Foo_FOUND AND NOT TARGET Foo::Foo)
+    add_library(Foo::Foo UNKNOWN IMPORTED)
+    set_target_properties(Foo::Foo PROPERTIES
+      IMPORTED_LOCATION "${Foo_LIBRARY}"
+      INTERFACE_COMPILE_OPTIONS "${PC_Foo_CFLAGS_OTHER}"
+      INTERFACE_INCLUDE_DIRECTORIES "${Foo_INCLUDE_DIR}"
+    )
+  endif()
+
+One thing to note about this is that the ``INTERFACE_INCLUDE_DIRECTORIES`` and
+similar properties should only contain information about the target itself, and
+not any of its dependencies.  Instead, those dependencies should also be
+targets, and CMake should be told that they are dependencies of this target.
+CMake will then combine all the necessary information automatically.
+
+The type of the :prop_tgt:`IMPORTED` target created in the
+:command:`add_library` command can always be specified as ``UNKNOWN``
+type.  This simplifies the code in cases where static or shared variants may
+be found, and CMake will determine the type by inspecting the files.
+
+If the library is available with multiple configurations, the
+:prop_tgt:`IMPORTED_CONFIGURATIONS` target property should also be
+populated:
+
+.. code-block:: cmake
+
+  if(Foo_FOUND)
+    if (NOT TARGET Foo::Foo)
+      add_library(Foo::Foo UNKNOWN IMPORTED)
+    endif()
+    if (Foo_LIBRARY_RELEASE)
+      set_property(TARGET Foo::Foo APPEND PROPERTY
+        IMPORTED_CONFIGURATIONS RELEASE
+      )
+      set_target_properties(Foo::Foo PROPERTIES
+        IMPORTED_LOCATION_RELEASE "${Foo_LIBRARY_RELEASE}"
+      )
+    endif()
+    if (Foo_LIBRARY_DEBUG)
+      set_property(TARGET Foo::Foo APPEND PROPERTY
+        IMPORTED_CONFIGURATIONS DEBUG
+      )
+      set_target_properties(Foo::Foo PROPERTIES
+        IMPORTED_LOCATION_DEBUG "${Foo_LIBRARY_DEBUG}"
+      )
+    endif()
+    set_target_properties(Foo::Foo PROPERTIES
+      INTERFACE_COMPILE_OPTIONS "${PC_Foo_CFLAGS_OTHER}"
+      INTERFACE_INCLUDE_DIRECTORIES "${Foo_INCLUDE_DIR}"
+    )
+  endif()
+
+The ``RELEASE`` variant should be listed first in the property
+so that the variant is chosen if the user uses a configuration which is
+not an exact match for any listed ``IMPORTED_CONFIGURATIONS``.
+
+Most of the cache variables should be hidden in the ``ccmake`` interface unless
+the user explicitly asks to edit them.
+
+.. code-block:: cmake
+
+  mark_as_advanced(
+    Foo_INCLUDE_DIR
+    Foo_LIBRARY
+  )
+
+If this module replaces an older version, you should set compatibility variables
+to cause the least disruption possible.
+
+.. code-block:: cmake
+
+  # compatibility variables
+  set(Foo_VERSION_STRING ${Foo_VERSION})
diff --git a/share/cmake-3.22/Help/manual/cmake-env-variables.7.rst b/share/cmake-3.22/Help/manual/cmake-env-variables.7.rst
new file mode 100644
index 0000000..0799fdd
--- /dev/null
+++ b/share/cmake-3.22/Help/manual/cmake-env-variables.7.rst
@@ -0,0 +1,103 @@
+.. cmake-manual-description: CMake Environment Variables Reference
+
+cmake-env-variables(7)
+**********************
+
+.. only:: html
+
+   .. contents::
+
+This page lists environment variables that have special
+meaning to CMake.
+
+For general information on environment variables, see the
+:ref:`Environment Variables <CMake Language Environment Variables>`
+section in the cmake-language manual.
+
+Environment Variables that Change Behavior
+==========================================
+
+.. toctree::
+   :maxdepth: 1
+
+   /envvar/CMAKE_PREFIX_PATH
+
+Environment Variables that Control the Build
+============================================
+
+.. toctree::
+   :maxdepth: 1
+
+   /envvar/CMAKE_APPLE_SILICON_PROCESSOR
+   /envvar/CMAKE_BUILD_PARALLEL_LEVEL
+   /envvar/CMAKE_BUILD_TYPE
+   /envvar/CMAKE_CONFIGURATION_TYPES
+   /envvar/CMAKE_CONFIG_TYPE
+   /envvar/CMAKE_EXPORT_COMPILE_COMMANDS
+   /envvar/CMAKE_GENERATOR
+   /envvar/CMAKE_GENERATOR_INSTANCE
+   /envvar/CMAKE_GENERATOR_PLATFORM
+   /envvar/CMAKE_GENERATOR_TOOLSET
+   /envvar/CMAKE_INSTALL_MODE
+   /envvar/CMAKE_LANG_COMPILER_LAUNCHER
+   /envvar/CMAKE_LANG_LINKER_LAUNCHER
+   /envvar/CMAKE_MSVCIDE_RUN_PATH
+   /envvar/CMAKE_NO_VERBOSE
+   /envvar/CMAKE_OSX_ARCHITECTURES
+   /envvar/CMAKE_TOOLCHAIN_FILE
+   /envvar/DESTDIR
+   /envvar/LDFLAGS
+   /envvar/MACOSX_DEPLOYMENT_TARGET
+   /envvar/PackageName_ROOT
+   /envvar/VERBOSE
+
+Environment Variables for Languages
+===================================
+
+.. toctree::
+   :maxdepth: 1
+
+   /envvar/ASM_DIALECT
+   /envvar/ASM_DIALECTFLAGS
+   /envvar/CC
+   /envvar/CFLAGS
+   /envvar/CSFLAGS
+   /envvar/CUDAARCHS
+   /envvar/CUDACXX
+   /envvar/CUDAFLAGS
+   /envvar/CUDAHOSTCXX
+   /envvar/CXX
+   /envvar/CXXFLAGS
+   /envvar/FC
+   /envvar/FFLAGS
+   /envvar/HIPCXX
+   /envvar/HIPFLAGS
+   /envvar/ISPC
+   /envvar/ISPCFLAGS
+   /envvar/OBJC
+   /envvar/OBJCXX
+   /envvar/RC
+   /envvar/RCFLAGS
+   /envvar/SWIFTC
+
+Environment Variables for CTest
+===============================
+
+.. toctree::
+   :maxdepth: 1
+
+   /envvar/CMAKE_CONFIG_TYPE
+   /envvar/CTEST_INTERACTIVE_DEBUG_MODE
+   /envvar/CTEST_OUTPUT_ON_FAILURE
+   /envvar/CTEST_PARALLEL_LEVEL
+   /envvar/CTEST_PROGRESS_OUTPUT
+   /envvar/CTEST_USE_LAUNCHERS_DEFAULT
+   /envvar/DASHBOARD_TEST_FROM_CTEST
+
+Environment Variables for the CMake curses interface
+====================================================
+
+.. toctree::
+   :maxdepth: 1
+
+   /envvar/CCMAKE_COLORS
diff --git a/share/cmake-3.22/Help/manual/cmake-file-api.7.rst b/share/cmake-3.22/Help/manual/cmake-file-api.7.rst
new file mode 100644
index 0000000..5e22ea9
--- /dev/null
+++ b/share/cmake-3.22/Help/manual/cmake-file-api.7.rst
@@ -0,0 +1,1540 @@
+.. cmake-manual-description: CMake File-Based API
+
+cmake-file-api(7)
+*****************
+
+.. only:: html
+
+   .. contents::
+
+Introduction
+============
+
+CMake provides a file-based API that clients may use to get semantic
+information about the buildsystems CMake generates.  Clients may use
+the API by writing query files to a specific location in a build tree
+to request zero or more `Object Kinds`_.  When CMake generates the
+buildsystem in that build tree it will read the query files and write
+reply files for the client to read.
+
+The file-based API uses a ``<build>/.cmake/api/`` directory at the top
+of a build tree.  The API is versioned to support changes to the layout
+of files within the API directory.  API file layout versioning is
+orthogonal to the versioning of `Object Kinds`_ used in replies.
+This version of CMake supports only one API version, `API v1`_.
+
+API v1
+======
+
+API v1 is housed in the ``<build>/.cmake/api/v1/`` directory.
+It has the following subdirectories:
+
+``query/``
+  Holds query files written by clients.
+  These may be `v1 Shared Stateless Query Files`_,
+  `v1 Client Stateless Query Files`_, or `v1 Client Stateful Query Files`_.
+
+``reply/``
+  Holds reply files written by CMake whenever it runs to generate a build
+  system.  These are indexed by a `v1 Reply Index File`_ file that may
+  reference additional `v1 Reply Files`_.  CMake owns all reply files.
+  Clients must never remove them.
+
+  Clients may look for and read a reply index file at any time.
+  Clients may optionally create the ``reply/`` directory at any time
+  and monitor it for the appearance of a new reply index file.
+
+v1 Shared Stateless Query Files
+-------------------------------
+
+Shared stateless query files allow clients to share requests for
+major versions of the `Object Kinds`_ and get all requested versions
+recognized by the CMake that runs.
+
+Clients may create shared requests by creating empty files in the
+``v1/query/`` directory.  The form is::
+
+  <build>/.cmake/api/v1/query/<kind>-v<major>
+
+where ``<kind>`` is one of the `Object Kinds`_, ``-v`` is literal,
+and ``<major>`` is the major version number.
+
+Files of this form are stateless shared queries not owned by any specific
+client.  Once created they should not be removed without external client
+coordination or human intervention.
+
+v1 Client Stateless Query Files
+-------------------------------
+
+Client stateless query files allow clients to create owned requests for
+major versions of the `Object Kinds`_ and get all requested versions
+recognized by the CMake that runs.
+
+Clients may create owned requests by creating empty files in
+client-specific query subdirectories.  The form is::
+
+  <build>/.cmake/api/v1/query/client-<client>/<kind>-v<major>
+
+where ``client-`` is literal, ``<client>`` is a string uniquely
+identifying the client, ``<kind>`` is one of the `Object Kinds`_,
+``-v`` is literal, and ``<major>`` is the major version number.
+Each client must choose a unique ``<client>`` identifier via its
+own means.
+
+Files of this form are stateless queries owned by the client ``<client>``.
+The owning client may remove them at any time.
+
+v1 Client Stateful Query Files
+------------------------------
+
+Stateful query files allow clients to request a list of versions of
+each of the `Object Kinds`_ and get only the most recent version
+recognized by the CMake that runs.
+
+Clients may create owned stateful queries by creating ``query.json``
+files in client-specific query subdirectories.  The form is::
+
+  <build>/.cmake/api/v1/query/client-<client>/query.json
+
+where ``client-`` is literal, ``<client>`` is a string uniquely
+identifying the client, and ``query.json`` is literal.  Each client
+must choose a unique ``<client>`` identifier via its own means.
+
+``query.json`` files are stateful queries owned by the client ``<client>``.
+The owning client may update or remove them at any time.  When a
+given client installation is updated it may then update the stateful
+query it writes to build trees to request newer object versions.
+This can be used to avoid asking CMake to generate multiple object
+versions unnecessarily.
+
+A ``query.json`` file must contain a JSON object:
+
+.. code-block:: json
+
+  {
+    "requests": [
+      { "kind": "<kind>" , "version": 1 },
+      { "kind": "<kind>" , "version": { "major": 1, "minor": 2 } },
+      { "kind": "<kind>" , "version": [2, 1] },
+      { "kind": "<kind>" , "version": [2, { "major": 1, "minor": 2 }] },
+      { "kind": "<kind>" , "version": 1, "client": {} },
+      { "kind": "..." }
+    ],
+    "client": {}
+  }
+
+The members are:
+
+``requests``
+  A JSON array containing zero or more requests.  Each request is
+  a JSON object with members:
+
+  ``kind``
+    Specifies one of the `Object Kinds`_ to be included in the reply.
+
+  ``version``
+    Indicates the version(s) of the object kind that the client
+    understands.  Versions have major and minor components following
+    semantic version conventions.  The value must be
+
+    * a JSON integer specifying a (non-negative) major version number, or
+    * a JSON object containing ``major`` and (optionally) ``minor``
+      members specifying non-negative integer version components, or
+    * a JSON array whose elements are each one of the above.
+
+  ``client``
+    Optional member reserved for use by the client.  This value is
+    preserved in the reply written for the client in the
+    `v1 Reply Index File`_ but is otherwise ignored.  Clients may use
+    this to pass custom information with a request through to its reply.
+
+  For each requested object kind CMake will choose the *first* version
+  that it recognizes for that kind among those listed in the request.
+  The response will use the selected *major* version with the highest
+  *minor* version known to the running CMake for that major version.
+  Therefore clients should list all supported major versions in
+  preferred order along with the minimal minor version required
+  for each major version.
+
+``client``
+  Optional member reserved for use by the client.  This value is
+  preserved in the reply written for the client in the
+  `v1 Reply Index File`_ but is otherwise ignored.  Clients may use
+  this to pass custom information with a query through to its reply.
+
+Other ``query.json`` top-level members are reserved for future use.
+If present they are ignored for forward compatibility.
+
+v1 Reply Index File
+-------------------
+
+CMake writes an ``index-*.json`` file to the ``v1/reply/`` directory
+whenever it runs to generate a build system.  Clients must read the
+reply index file first and may read other `v1 Reply Files`_ only by
+following references.  The form of the reply index file name is::
+
+  <build>/.cmake/api/v1/reply/index-<unspecified>.json
+
+where ``index-`` is literal and ``<unspecified>`` is an unspecified
+name selected by CMake.  Whenever a new index file is generated it
+is given a new name and any old one is deleted.  During the short
+time between these steps there may be multiple index files present;
+the one with the largest name in lexicographic order is the current
+index file.
+
+The reply index file contains a JSON object:
+
+.. code-block:: json
+
+  {
+    "cmake": {
+      "version": {
+        "major": 3, "minor": 14, "patch": 0, "suffix": "",
+        "string": "3.14.0", "isDirty": false
+      },
+      "paths": {
+        "cmake": "/prefix/bin/cmake",
+        "ctest": "/prefix/bin/ctest",
+        "cpack": "/prefix/bin/cpack",
+        "root": "/prefix/share/cmake-3.14"
+      },
+      "generator": {
+        "multiConfig": false,
+        "name": "Unix Makefiles"
+      }
+    },
+    "objects": [
+      { "kind": "<kind>",
+        "version": { "major": 1, "minor": 0 },
+        "jsonFile": "<file>" },
+      { "...": "..." }
+    ],
+    "reply": {
+      "<kind>-v<major>": { "kind": "<kind>",
+                           "version": { "major": 1, "minor": 0 },
+                           "jsonFile": "<file>" },
+      "<unknown>": { "error": "unknown query file" },
+      "...": {},
+      "client-<client>": {
+        "<kind>-v<major>": { "kind": "<kind>",
+                             "version": { "major": 1, "minor": 0 },
+                             "jsonFile": "<file>" },
+        "<unknown>": { "error": "unknown query file" },
+        "...": {},
+        "query.json": {
+          "requests": [ {}, {}, {} ],
+          "responses": [
+            { "kind": "<kind>",
+              "version": { "major": 1, "minor": 0 },
+              "jsonFile": "<file>" },
+            { "error": "unknown query file" },
+            { "...": {} }
+          ],
+          "client": {}
+        }
+      }
+    }
+  }
+
+The members are:
+
+``cmake``
+  A JSON object containing information about the instance of CMake that
+  generated the reply.  It contains members:
+
+  ``version``
+    A JSON object specifying the version of CMake with members:
+
+    ``major``, ``minor``, ``patch``
+      Integer values specifying the major, minor, and patch version components.
+    ``suffix``
+      A string specifying the version suffix, if any, e.g. ``g0abc3``.
+    ``string``
+      A string specifying the full version in the format
+      ``<major>.<minor>.<patch>[-<suffix>]``.
+    ``isDirty``
+      A boolean indicating whether the version was built from a version
+      controlled source tree with local modifications.
+
+  ``paths``
+    A JSON object specifying paths to things that come with CMake.
+    It has members for ``cmake``, ``ctest``, and ``cpack`` whose values
+    are JSON strings specifying the absolute path to each tool,
+    represented with forward slashes.  It also has a ``root`` member for
+    the absolute path to the directory containing CMake resources like the
+    ``Modules/`` directory (see :variable:`CMAKE_ROOT`).
+
+  ``generator``
+    A JSON object describing the CMake generator used for the build.
+    It has members:
+
+    ``multiConfig``
+      A boolean specifying whether the generator supports multiple output
+      configurations.
+    ``name``
+      A string specifying the name of the generator.
+    ``platform``
+      If the generator supports :variable:`CMAKE_GENERATOR_PLATFORM`,
+      this is a string specifying the generator platform name.
+
+``objects``
+  A JSON array listing all versions of all `Object Kinds`_ generated
+  as part of the reply.  Each array entry is a
+  `v1 Reply File Reference`_.
+
+``reply``
+  A JSON object mirroring the content of the ``query/`` directory
+  that CMake loaded to produce the reply.  The members are of the form
+
+  ``<kind>-v<major>``
+    A member of this form appears for each of the
+    `v1 Shared Stateless Query Files`_ that CMake recognized as a
+    request for object kind ``<kind>`` with major version ``<major>``.
+    The value is a `v1 Reply File Reference`_ to the corresponding
+    reply file for that object kind and version.
+
+  ``<unknown>``
+    A member of this form appears for each of the
+    `v1 Shared Stateless Query Files`_ that CMake did not recognize.
+    The value is a JSON object with a single ``error`` member
+    containing a string with an error message indicating that the
+    query file is unknown.
+
+  ``client-<client>``
+    A member of this form appears for each client-owned directory
+    holding `v1 Client Stateless Query Files`_.
+    The value is a JSON object mirroring the content of the
+    ``query/client-<client>/`` directory.  The members are of the form:
+
+    ``<kind>-v<major>``
+      A member of this form appears for each of the
+      `v1 Client Stateless Query Files`_ that CMake recognized as a
+      request for object kind ``<kind>`` with major version ``<major>``.
+      The value is a `v1 Reply File Reference`_ to the corresponding
+      reply file for that object kind and version.
+
+    ``<unknown>``
+      A member of this form appears for each of the
+      `v1 Client Stateless Query Files`_ that CMake did not recognize.
+      The value is a JSON object with a single ``error`` member
+      containing a string with an error message indicating that the
+      query file is unknown.
+
+    ``query.json``
+      This member appears for clients using
+      `v1 Client Stateful Query Files`_.
+      If the ``query.json`` file failed to read or parse as a JSON object,
+      this member is a JSON object with a single ``error`` member
+      containing a string with an error message.  Otherwise, this member
+      is a JSON object mirroring the content of the ``query.json`` file.
+      The members are:
+
+      ``client``
+        A copy of the ``query.json`` file ``client`` member, if it exists.
+
+      ``requests``
+        A copy of the ``query.json`` file ``requests`` member, if it exists.
+
+      ``responses``
+        If the ``query.json`` file ``requests`` member is missing or invalid,
+        this member is a JSON object with a single ``error`` member
+        containing a string with an error message.  Otherwise, this member
+        contains a JSON array with a response for each entry of the
+        ``requests`` array, in the same order.  Each response is
+
+        * a JSON object with a single ``error`` member containing a string
+          with an error message, or
+        * a `v1 Reply File Reference`_ to the corresponding reply file for
+          the requested object kind and selected version.
+
+After reading the reply index file, clients may read the other
+`v1 Reply Files`_ it references.
+
+v1 Reply File Reference
+^^^^^^^^^^^^^^^^^^^^^^^
+
+The reply index file represents each reference to another reply file
+using a JSON object with members:
+
+``kind``
+  A string specifying one of the `Object Kinds`_.
+``version``
+  A JSON object with members ``major`` and ``minor`` specifying
+  integer version components of the object kind.
+``jsonFile``
+  A JSON string specifying a path relative to the reply index file
+  to another JSON file containing the object.
+
+v1 Reply Files
+--------------
+
+Reply files containing specific `Object Kinds`_ are written by CMake.
+The names of these files are unspecified and must not be interpreted
+by clients.  Clients must first read the `v1 Reply Index File`_ and
+and follow references to the names of the desired response objects.
+
+Reply files (including the index file) will never be replaced by
+files of the same name but different content.  This allows a client
+to read the files concurrently with a running CMake that may generate
+a new reply.  However, after generating a new reply CMake will attempt
+to remove reply files from previous runs that it did not just write.
+If a client attempts to read a reply file referenced by the index but
+finds the file missing, that means a concurrent CMake has generated
+a new reply.  The client may simply start again by reading the new
+reply index file.
+
+.. _`file-api object kinds`:
+
+Object Kinds
+============
+
+The CMake file-based API reports semantic information about the build
+system using the following kinds of JSON objects.  Each kind of object
+is versioned independently using semantic versioning with major and
+minor components.  Every kind of object has the form:
+
+.. code-block:: json
+
+  {
+    "kind": "<kind>",
+    "version": { "major": 1, "minor": 0 },
+    "...": {}
+  }
+
+The ``kind`` member is a string specifying the object kind name.
+The ``version`` member is a JSON object with ``major`` and ``minor``
+members specifying integer components of the object kind's version.
+Additional top-level members are specific to each object kind.
+
+Object Kind "codemodel"
+-----------------------
+
+The ``codemodel`` object kind describes the build system structure as
+modeled by CMake.
+
+There is only one ``codemodel`` object major version, version 2.
+Version 1 does not exist to avoid confusion with that from
+:manual:`cmake-server(7)` mode.
+
+"codemodel" version 2
+^^^^^^^^^^^^^^^^^^^^^
+
+``codemodel`` object version 2 is a JSON object:
+
+.. code-block:: json
+
+  {
+    "kind": "codemodel",
+    "version": { "major": 2, "minor": 2 },
+    "paths": {
+      "source": "/path/to/top-level-source-dir",
+      "build": "/path/to/top-level-build-dir"
+    },
+    "configurations": [
+      {
+        "name": "Debug",
+        "directories": [
+          {
+            "source": ".",
+            "build": ".",
+            "childIndexes": [ 1 ],
+            "projectIndex": 0,
+            "targetIndexes": [ 0 ],
+            "hasInstallRule": true,
+            "minimumCMakeVersion": {
+              "string": "3.14"
+            },
+            "jsonFile": "<file>"
+          },
+          {
+            "source": "sub",
+            "build": "sub",
+            "parentIndex": 0,
+            "projectIndex": 0,
+            "targetIndexes": [ 1 ],
+            "minimumCMakeVersion": {
+              "string": "3.14"
+            },
+            "jsonFile": "<file>"
+          }
+        ],
+        "projects": [
+          {
+            "name": "MyProject",
+            "directoryIndexes": [ 0, 1 ],
+            "targetIndexes": [ 0, 1 ]
+          }
+        ],
+        "targets": [
+          {
+            "name": "MyExecutable",
+            "directoryIndex": 0,
+            "projectIndex": 0,
+            "jsonFile": "<file>"
+          },
+          {
+            "name": "MyLibrary",
+            "directoryIndex": 1,
+            "projectIndex": 0,
+            "jsonFile": "<file>"
+          }
+        ]
+      }
+    ]
+  }
+
+The members specific to ``codemodel`` objects are:
+
+``paths``
+  A JSON object containing members:
+
+  ``source``
+    A string specifying the absolute path to the top-level source directory,
+    represented with forward slashes.
+
+  ``build``
+    A string specifying the absolute path to the top-level build directory,
+    represented with forward slashes.
+
+``configurations``
+  A JSON array of entries corresponding to available build configurations.
+  On single-configuration generators there is one entry for the value
+  of the :variable:`CMAKE_BUILD_TYPE` variable.  For multi-configuration
+  generators there is an entry for each configuration listed in the
+  :variable:`CMAKE_CONFIGURATION_TYPES` variable.
+  Each entry is a JSON object containing members:
+
+  ``name``
+    A string specifying the name of the configuration, e.g. ``Debug``.
+
+  ``directories``
+    A JSON array of entries each corresponding to a build system directory
+    whose source directory contains a ``CMakeLists.txt`` file.  The first
+    entry corresponds to the top-level directory.  Each entry is a
+    JSON object containing members:
+
+    ``source``
+      A string specifying the path to the source directory, represented
+      with forward slashes.  If the directory is inside the top-level
+      source directory then the path is specified relative to that
+      directory (with ``.`` for the top-level source directory itself).
+      Otherwise the path is absolute.
+
+    ``build``
+      A string specifying the path to the build directory, represented
+      with forward slashes.  If the directory is inside the top-level
+      build directory then the path is specified relative to that
+      directory (with ``.`` for the top-level build directory itself).
+      Otherwise the path is absolute.
+
+    ``parentIndex``
+      Optional member that is present when the directory is not top-level.
+      The value is an unsigned integer 0-based index of another entry in
+      the main ``directories`` array that corresponds to the parent
+      directory that added this directory as a subdirectory.
+
+    ``childIndexes``
+      Optional member that is present when the directory has subdirectories.
+      The value is a JSON array of entries corresponding to child directories
+      created by the :command:`add_subdirectory` or :command:`subdirs`
+      command.  Each entry is an unsigned integer 0-based index of another
+      entry in the main ``directories`` array.
+
+    ``projectIndex``
+      An unsigned integer 0-based index into the main ``projects`` array
+      indicating the build system project to which the this directory belongs.
+
+    ``targetIndexes``
+      Optional member that is present when the directory itself has targets,
+      excluding those belonging to subdirectories.  The value is a JSON
+      array of entries corresponding to the targets.  Each entry is an
+      unsigned integer 0-based index into the main ``targets`` array.
+
+    ``minimumCMakeVersion``
+      Optional member present when a minimum required version of CMake is
+      known for the directory.  This is the ``<min>`` version given to the
+      most local call to the :command:`cmake_minimum_required(VERSION)`
+      command in the directory itself or one of its ancestors.
+      The value is a JSON object with one member:
+
+      ``string``
+        A string specifying the minimum required version in the format::
+
+          <major>.<minor>[.<patch>[.<tweak>]][<suffix>]
+
+        Each component is an unsigned integer and the suffix may be an
+        arbitrary string.
+
+    ``hasInstallRule``
+      Optional member that is present with boolean value ``true`` when
+      the directory or one of its subdirectories contains any
+      :command:`install` rules, i.e. whether a ``make install``
+      or equivalent rule is available.
+
+    ``jsonFile``
+      A JSON string specifying a path relative to the codemodel file
+      to another JSON file containing a
+      `"codemodel" version 2 "directory" object`_.
+
+      This field was added in codemodel version 2.3.
+
+  ``projects``
+    A JSON array of entries corresponding to the top-level project
+    and sub-projects defined in the build system.  Each (sub-)project
+    corresponds to a source directory whose ``CMakeLists.txt`` file
+    calls the :command:`project` command with a project name different
+    from its parent directory.  The first entry corresponds to the
+    top-level project.
+
+    Each entry is a JSON object containing members:
+
+    ``name``
+      A string specifying the name given to the :command:`project` command.
+
+    ``parentIndex``
+      Optional member that is present when the project is not top-level.
+      The value is an unsigned integer 0-based index of another entry in
+      the main ``projects`` array that corresponds to the parent project
+      that added this project as a sub-project.
+
+    ``childIndexes``
+      Optional member that is present when the project has sub-projects.
+      The value is a JSON array of entries corresponding to the sub-projects.
+      Each entry is an unsigned integer 0-based index of another
+      entry in the main ``projects`` array.
+
+    ``directoryIndexes``
+      A JSON array of entries corresponding to build system directories
+      that are part of the project.  The first entry corresponds to the
+      top-level directory of the project.  Each entry is an unsigned
+      integer 0-based index into the main ``directories`` array.
+
+    ``targetIndexes``
+      Optional member that is present when the project itself has targets,
+      excluding those belonging to sub-projects.  The value is a JSON
+      array of entries corresponding to the targets.  Each entry is an
+      unsigned integer 0-based index into the main ``targets`` array.
+
+  ``targets``
+    A JSON array of entries corresponding to the build system targets.
+    Such targets are created by calls to :command:`add_executable`,
+    :command:`add_library`, and :command:`add_custom_target`, excluding
+    imported targets and interface libraries (which do not generate any
+    build rules).  Each entry is a JSON object containing members:
+
+    ``name``
+      A string specifying the target name.
+
+    ``id``
+      A string uniquely identifying the target.  This matches the ``id``
+      field in the file referenced by ``jsonFile``.
+
+    ``directoryIndex``
+      An unsigned integer 0-based index into the main ``directories`` array
+      indicating the build system directory in which the target is defined.
+
+    ``projectIndex``
+      An unsigned integer 0-based index into the main ``projects`` array
+      indicating the build system project in which the target is defined.
+
+    ``jsonFile``
+      A JSON string specifying a path relative to the codemodel file
+      to another JSON file containing a
+      `"codemodel" version 2 "target" object`_.
+
+"codemodel" version 2 "directory" object
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+A codemodel "directory" object is referenced by a `"codemodel" version 2`_
+object's ``directories`` array.  Each "directory" object is a JSON object
+with members:
+
+``paths``
+  A JSON object containing members:
+
+  ``source``
+    A string specifying the path to the source directory, represented
+    with forward slashes.  If the directory is inside the top-level
+    source directory then the path is specified relative to that
+    directory (with ``.`` for the top-level source directory itself).
+    Otherwise the path is absolute.
+
+  ``build``
+    A string specifying the path to the build directory, represented
+    with forward slashes.  If the directory is inside the top-level
+    build directory then the path is specified relative to that
+    directory (with ``.`` for the top-level build directory itself).
+    Otherwise the path is absolute.
+
+``installers``
+  A JSON array of entries corresponding to :command:`install` rules.
+  Each entry is a JSON object containing members:
+
+  ``component``
+    A string specifying the component selected by the corresponding
+    :command:`install` command invocation.
+
+  ``destination``
+    Optional member that is present for specific ``type`` values below.
+    The value is a string specifying the install destination path.
+    The path may be absolute or relative to the install prefix.
+
+  ``paths``
+    Optional member that is present for specific ``type`` values below.
+    The value is a JSON array of entries corresponding to the paths
+    (files or directories) to be installed.  Each entry is one of:
+
+    * A string specifying the path from which a file or directory
+      is to be installed.  The portion of the path not preceded by
+      a ``/`` also specifies the path (name) to which the file
+      or directory is to be installed under the destination.
+
+    * A JSON object with members:
+
+      ``from``
+        A string specifying the path from which a file or directory
+        is to be installed.
+
+      ``to``
+        A string specifying the path to which the file or directory
+        is to be installed under the destination.
+
+    In both cases the paths are represented with forward slashes.  If
+    the "from" path is inside the top-level directory documented by the
+    corresponding ``type`` value, then the path is specified relative
+    to that directory.  Otherwise the path is absolute.
+
+  ``type``
+    A string specifying the type of installation rule.  The value is one
+    of the following, with some variants providing additional members:
+
+    ``file``
+      An :command:`install(FILES)` or :command:`install(PROGRAMS)` call.
+      The ``destination`` and ``paths`` members are populated, with paths
+      under the top-level *source* directory expressed relative to it.
+      The ``isOptional`` member may exist.
+      This type has no additional members.
+
+    ``directory``
+      An :command:`install(DIRECTORY)` call.
+      The ``destination`` and ``paths`` members are populated, with paths
+      under the top-level *source* directory expressed relative to it.
+      The ``isOptional`` member may exist.
+      This type has no additional members.
+
+    ``target``
+      An :command:`install(TARGETS)` call.
+      The ``destination`` and ``paths`` members are populated, with paths
+      under the top-level *build* directory expressed relative to it.
+      The ``isOptional`` member may exist.
+      This type has additional members ``targetId``, ``targetIndex``,
+      ``targetIsImportLibrary``, and ``targetInstallNamelink``.
+
+    ``export``
+      An :command:`install(EXPORT)` call.
+      The ``destination`` and ``paths`` members are populated, with paths
+      under the top-level *build* directory expressed relative to it.
+      The ``paths`` entries refer to files generated automatically by
+      CMake for installation, and their actual values are considered
+      private implementation details.
+      This type has additional members ``exportName`` and ``exportTargets``.
+
+    ``script``
+      An :command:`install(SCRIPT)` call.
+      This type has additional member ``scriptFile``.
+
+    ``code``
+      An :command:`install(CODE)` call.
+      This type has no additional members.
+
+    ``importedRuntimeArtifacts``
+      An :command:`install(IMPORTED_RUNTIME_ARTIFACTS)` call.
+      The ``destination`` member is populated. The ``isOptional`` member may
+      exist. This type has no additional members.
+
+    ``runtimeDependencySet``
+      An :command:`install(RUNTIME_DEPENDENCY_SET)` call or an
+      :command:`install(TARGETS)` call with ``RUNTIME_DEPENDENCIES``. The
+      ``destination`` member is populated. This type has additional members
+      ``runtimeDependencySetName`` and ``runtimeDependencySetType``.
+
+  ``isExcludeFromAll``
+    Optional member that is present with boolean value ``true`` when
+    :command:`install` is called with the ``EXCLUDE_FROM_ALL`` option.
+
+  ``isForAllComponents``
+    Optional member that is present with boolean value ``true`` when
+    :command:`install(SCRIPT|CODE)` is called with the
+    ``ALL_COMPONENTS`` option.
+
+  ``isOptional``
+    Optional member that is present with boolean value ``true`` when
+    :command:`install` is called with the ``OPTIONAL`` option.
+    This is allowed when ``type`` is ``file``, ``directory``, or ``target``.
+
+  ``targetId``
+    Optional member that is present when ``type`` is ``target``.
+    The value is a string uniquely identifying the target to be installed.
+    This matches the ``id`` member of the target in the main
+    "codemodel" object's ``targets`` array.
+
+  ``targetIndex``
+    Optional member that is present when ``type`` is ``target``.
+    The value is an unsigned integer 0-based index into the main "codemodel"
+    object's ``targets`` array for the target to be installed.
+
+  ``targetIsImportLibrary``
+    Optional member that is present when ``type`` is ``target`` and
+    the installer is for a Windows DLL import library file or for an
+    AIX linker import file.  If present, it has boolean value ``true``.
+
+  ``targetInstallNamelink``
+    Optional member that is present when ``type`` is ``target`` and
+    the installer corresponds to a target that may use symbolic links
+    to implement the :prop_tgt:`VERSION` and :prop_tgt:`SOVERSION`
+    target properties.
+    The value is a string indicating how the installer is supposed to
+    handle the symlinks: ``skip`` means the installer should skip the
+    symlinks and install only the real file, and ``only`` means the
+    installer should install only the symlinks and not the real file.
+    In all cases the ``paths`` member lists what it actually installs.
+
+  ``exportName``
+    Optional member that is present when ``type`` is ``export``.
+    The value is a string specifying the name of the export.
+
+  ``exportTargets``
+    Optional member that is present when ``type`` is ``export``.
+    The value is a JSON array of entries corresponding to the targets
+    included in the export.  Each entry is a JSON object with members:
+
+    ``id``
+      A string uniquely identifying the target.  This matches
+      the ``id`` member of the target in the main "codemodel"
+      object's ``targets`` array.
+
+    ``index``
+      An unsigned integer 0-based index into the main "codemodel"
+      object's ``targets`` array for the target.
+
+  ``runtimeDependencySetName``
+    Optional member that is present when ``type`` is ``runtimeDependencySet``
+    and the installer was created by an
+    :command:`install(RUNTIME_DEPENDENCY_SET)` call. The value is a string
+    specifying the name of the runtime dependency set that was installed.
+
+  ``runtimeDependencySetType``
+    Optional member that is present when ``type`` is ``runtimeDependencySet``.
+    The value is a string with one of the following values:
+
+    ``library``
+      Indicates that this installer installs dependencies that are not macOS
+      frameworks.
+
+    ``framework``
+      Indicates that this installer installs dependencies that are macOS
+      frameworks.
+
+  ``scriptFile``
+    Optional member that is present when ``type`` is ``script``.
+    The value is a string specifying the path to the script file on disk,
+    represented with forward slashes.  If the file is inside the top-level
+    source directory then the path is specified relative to that directory.
+    Otherwise the path is absolute.
+
+  ``backtrace``
+    Optional member that is present when a CMake language backtrace to
+    the :command:`install` or other command invocation that added this
+    installer is available.  The value is an unsigned integer 0-based
+    index into the ``backtraceGraph`` member's ``nodes`` array.
+
+``backtraceGraph``
+  A `"codemodel" version 2 "backtrace graph"`_ whose nodes are referenced
+  from ``backtrace`` members elsewhere in this "directory" object.
+
+"codemodel" version 2 "target" object
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+A codemodel "target" object is referenced by a `"codemodel" version 2`_
+object's ``targets`` array.  Each "target" object is a JSON object
+with members:
+
+``name``
+  A string specifying the logical name of the target.
+
+``id``
+  A string uniquely identifying the target.  The format is unspecified
+  and should not be interpreted by clients.
+
+``type``
+  A string specifying the type of the target.  The value is one of
+  ``EXECUTABLE``, ``STATIC_LIBRARY``, ``SHARED_LIBRARY``,
+  ``MODULE_LIBRARY``, ``OBJECT_LIBRARY``, ``INTERFACE_LIBRARY``,
+  or ``UTILITY``.
+
+``backtrace``
+  Optional member that is present when a CMake language backtrace to
+  the command in the source code that created the target is available.
+  The value is an unsigned integer 0-based index into the
+  ``backtraceGraph`` member's ``nodes`` array.
+
+``folder``
+  Optional member that is present when the :prop_tgt:`FOLDER` target
+  property is set.  The value is a JSON object with one member:
+
+  ``name``
+    A string specifying the name of the target folder.
+
+``paths``
+  A JSON object containing members:
+
+  ``source``
+    A string specifying the path to the target's source directory,
+    represented with forward slashes.  If the directory is inside the
+    top-level source directory then the path is specified relative to
+    that directory (with ``.`` for the top-level source directory itself).
+    Otherwise the path is absolute.
+
+  ``build``
+    A string specifying the path to the target's build directory,
+    represented with forward slashes.  If the directory is inside the
+    top-level build directory then the path is specified relative to
+    that directory (with ``.`` for the top-level build directory itself).
+    Otherwise the path is absolute.
+
+``nameOnDisk``
+  Optional member that is present for executable and library targets
+  that are linked or archived into a single primary artifact.
+  The value is a string specifying the file name of that artifact on disk.
+
+``artifacts``
+  Optional member that is present for executable and library targets
+  that produce artifacts on disk meant for consumption by dependents.
+  The value is a JSON array of entries corresponding to the artifacts.
+  Each entry is a JSON object containing one member:
+
+  ``path``
+    A string specifying the path to the file on disk, represented with
+    forward slashes.  If the file is inside the top-level build directory
+    then the path is specified relative to that directory.
+    Otherwise the path is absolute.
+
+``isGeneratorProvided``
+  Optional member that is present with boolean value ``true`` if the
+  target is provided by CMake's build system generator rather than by
+  a command in the source code.
+
+``install``
+  Optional member that is present when the target has an :command:`install`
+  rule.  The value is a JSON object with members:
+
+  ``prefix``
+    A JSON object specifying the installation prefix.  It has one member:
+
+    ``path``
+      A string specifying the value of :variable:`CMAKE_INSTALL_PREFIX`.
+
+  ``destinations``
+    A JSON array of entries specifying an install destination path.
+    Each entry is a JSON object with members:
+
+    ``path``
+      A string specifying the install destination path.  The path may
+      be absolute or relative to the install prefix.
+
+    ``backtrace``
+      Optional member that is present when a CMake language backtrace to
+      the :command:`install` command invocation that specified this
+      destination is available.  The value is an unsigned integer 0-based
+      index into the ``backtraceGraph`` member's ``nodes`` array.
+
+``link``
+  Optional member that is present for executables and shared library
+  targets that link into a runtime binary.  The value is a JSON object
+  with members describing the link step:
+
+  ``language``
+    A string specifying the language (e.g. ``C``, ``CXX``, ``Fortran``)
+    of the toolchain is used to invoke the linker.
+
+  ``commandFragments``
+    Optional member that is present when fragments of the link command
+    line invocation are available.  The value is a JSON array of entries
+    specifying ordered fragments.  Each entry is a JSON object with members:
+
+    ``fragment``
+      A string specifying a fragment of the link command line invocation.
+      The value is encoded in the build system's native shell format.
+
+    ``role``
+      A string specifying the role of the fragment's content:
+
+      * ``flags``: link flags.
+      * ``libraries``: link library file paths or flags.
+      * ``libraryPath``: library search path flags.
+      * ``frameworkPath``: macOS framework search path flags.
+
+  ``lto``
+    Optional member that is present with boolean value ``true``
+    when link-time optimization (a.k.a. interprocedural optimization
+    or link-time code generation) is enabled.
+
+  ``sysroot``
+    Optional member that is present when the :variable:`CMAKE_SYSROOT_LINK`
+    or :variable:`CMAKE_SYSROOT` variable is defined.  The value is a
+    JSON object with one member:
+
+    ``path``
+      A string specifying the absolute path to the sysroot, represented
+      with forward slashes.
+
+``archive``
+  Optional member that is present for static library targets.  The value
+  is a JSON object with members describing the archive step:
+
+  ``commandFragments``
+    Optional member that is present when fragments of the archiver command
+    line invocation are available.  The value is a JSON array of entries
+    specifying the fragments.  Each entry is a JSON object with members:
+
+    ``fragment``
+      A string specifying a fragment of the archiver command line invocation.
+      The value is encoded in the build system's native shell format.
+
+    ``role``
+      A string specifying the role of the fragment's content:
+
+      * ``flags``: archiver flags.
+
+  ``lto``
+    Optional member that is present with boolean value ``true``
+    when link-time optimization (a.k.a. interprocedural optimization
+    or link-time code generation) is enabled.
+
+``dependencies``
+  Optional member that is present when the target depends on other targets.
+  The value is a JSON array of entries corresponding to the dependencies.
+  Each entry is a JSON object with members:
+
+  ``id``
+    A string uniquely identifying the target on which this target depends.
+    This matches the main ``id`` member of the other target.
+
+  ``backtrace``
+    Optional member that is present when a CMake language backtrace to
+    the :command:`add_dependencies`, :command:`target_link_libraries`,
+    or other command invocation that created this dependency is
+    available.  The value is an unsigned integer 0-based index into
+    the ``backtraceGraph`` member's ``nodes`` array.
+
+``sources``
+  A JSON array of entries corresponding to the target's source files.
+  Each entry is a JSON object with members:
+
+  ``path``
+    A string specifying the path to the source file on disk, represented
+    with forward slashes.  If the file is inside the top-level source
+    directory then the path is specified relative to that directory.
+    Otherwise the path is absolute.
+
+  ``compileGroupIndex``
+    Optional member that is present when the source is compiled.
+    The value is an unsigned integer 0-based index into the
+    ``compileGroups`` array.
+
+  ``sourceGroupIndex``
+    Optional member that is present when the source is part of a source
+    group either via the :command:`source_group` command or by default.
+    The value is an unsigned integer 0-based index into the
+    ``sourceGroups`` array.
+
+  ``isGenerated``
+    Optional member that is present with boolean value ``true`` if
+    the source is :prop_sf:`GENERATED`.
+
+  ``backtrace``
+    Optional member that is present when a CMake language backtrace to
+    the :command:`target_sources`, :command:`add_executable`,
+    :command:`add_library`, :command:`add_custom_target`, or other
+    command invocation that added this source to the target is
+    available.  The value is an unsigned integer 0-based index into
+    the ``backtraceGraph`` member's ``nodes`` array.
+
+``sourceGroups``
+  Optional member that is present when sources are grouped together by
+  the :command:`source_group` command or by default.  The value is a
+  JSON array of entries corresponding to the groups.  Each entry is
+  a JSON object with members:
+
+  ``name``
+    A string specifying the name of the source group.
+
+  ``sourceIndexes``
+    A JSON array listing the sources belonging to the group.
+    Each entry is an unsigned integer 0-based index into the
+    main ``sources`` array for the target.
+
+``compileGroups``
+  Optional member that is present when the target has sources that compile.
+  The value is a JSON array of entries corresponding to groups of sources
+  that all compile with the same settings.  Each entry is a JSON object
+  with members:
+
+  ``sourceIndexes``
+    A JSON array listing the sources belonging to the group.
+    Each entry is an unsigned integer 0-based index into the
+    main ``sources`` array for the target.
+
+  ``language``
+    A string specifying the language (e.g. ``C``, ``CXX``, ``Fortran``)
+    of the toolchain is used to compile the source file.
+
+  ``languageStandard``
+    Optional member that is present when the language standard is set
+    explicitly (e.g. via :prop_tgt:`CXX_STANDARD`) or implicitly by
+    compile features.  Each entry is a JSON object with two members:
+
+    ``backtraces``
+      Optional member that is present when a CMake language backtrace to
+      the ``<LANG>_STANDARD`` setting is available.  If the language
+      standard was set implicitly by compile features those are used as
+      the backtrace(s).  It's possible for multiple compile features to
+      require the same language standard so there could be multiple
+      backtraces. The value is a JSON array with each entry being an
+      unsigned integer 0-based index into the ``backtraceGraph``
+      member's ``nodes`` array.
+
+    ``standard``
+      String representing the language standard.
+
+    This field was added in codemodel version 2.2.
+
+  ``compileCommandFragments``
+    Optional member that is present when fragments of the compiler command
+    line invocation are available.  The value is a JSON array of entries
+    specifying ordered fragments.  Each entry is a JSON object with
+    one member:
+
+    ``fragment``
+      A string specifying a fragment of the compile command line invocation.
+      The value is encoded in the build system's native shell format.
+
+  ``includes``
+    Optional member that is present when there are include directories.
+    The value is a JSON array with an entry for each directory.  Each
+    entry is a JSON object with members:
+
+    ``path``
+      A string specifying the path to the include directory,
+      represented with forward slashes.
+
+    ``isSystem``
+      Optional member that is present with boolean value ``true`` if
+      the include directory is marked as a system include directory.
+
+    ``backtrace``
+      Optional member that is present when a CMake language backtrace to
+      the :command:`target_include_directories` or other command invocation
+      that added this include directory is available.  The value is
+      an unsigned integer 0-based index into the ``backtraceGraph``
+      member's ``nodes`` array.
+
+  ``precompileHeaders``
+    Optional member that is present when :command:`target_precompile_headers`
+    or other command invocations set :prop_tgt:`PRECOMPILE_HEADERS` on the
+    target.  The value is a JSON array with an entry for each header.  Each
+    entry is a JSON object with members:
+
+    ``header``
+      Full path to the precompile header file.
+
+    ``backtrace``
+      Optional member that is present when a CMake language backtrace to
+      the :command:`target_precompile_headers` or other command invocation
+      that added this precompiled header is available.  The value is an
+      unsigned integer 0-based index into the ``backtraceGraph`` member's
+      ``nodes`` array.
+
+    This field was added in codemodel version 2.1.
+
+  ``defines``
+    Optional member that is present when there are preprocessor definitions.
+    The value is a JSON array with an entry for each definition.  Each
+    entry is a JSON object with members:
+
+    ``define``
+      A string specifying the preprocessor definition in the format
+      ``<name>[=<value>]``, e.g. ``DEF`` or ``DEF=1``.
+
+    ``backtrace``
+      Optional member that is present when a CMake language backtrace to
+      the :command:`target_compile_definitions` or other command invocation
+      that added this preprocessor definition is available.  The value is
+      an unsigned integer 0-based index into the ``backtraceGraph``
+      member's ``nodes`` array.
+
+  ``sysroot``
+    Optional member that is present when the
+    :variable:`CMAKE_SYSROOT_COMPILE` or :variable:`CMAKE_SYSROOT`
+    variable is defined.  The value is a JSON object with one member:
+
+    ``path``
+      A string specifying the absolute path to the sysroot, represented
+      with forward slashes.
+
+``backtraceGraph``
+  A `"codemodel" version 2 "backtrace graph"`_ whose nodes are referenced
+  from ``backtrace`` members elsewhere in this "target" object.
+
+"codemodel" version 2 "backtrace graph"
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The ``backtraceGraph`` member of a `"codemodel" version 2 "directory" object`_,
+or `"codemodel" version 2 "target" object`_ is a JSON object describing a
+graph of backtraces.  Its nodes are referenced from ``backtrace`` members
+elsewhere in the containing object.  The backtrace graph object members are:
+
+``nodes``
+  A JSON array listing nodes in the backtrace graph.  Each entry
+  is a JSON object with members:
+
+  ``file``
+    An unsigned integer 0-based index into the backtrace ``files`` array.
+
+  ``line``
+    An optional member present when the node represents a line within
+    the file.  The value is an unsigned integer 1-based line number.
+
+  ``command``
+    An optional member present when the node represents a command
+    invocation within the file.  The value is an unsigned integer
+    0-based index into the backtrace ``commands`` array.
+
+  ``parent``
+    An optional member present when the node is not the bottom of
+    the call stack.  The value is an unsigned integer 0-based index
+    of another entry in the backtrace ``nodes`` array.
+
+``commands``
+  A JSON array listing command names referenced by backtrace nodes.
+  Each entry is a string specifying a command name.
+
+``files``
+  A JSON array listing CMake language files referenced by backtrace nodes.
+  Each entry is a string specifying the path to a file, represented
+  with forward slashes.  If the file is inside the top-level source
+  directory then the path is specified relative to that directory.
+  Otherwise the path is absolute.
+
+Object Kind "cache"
+-------------------
+
+The ``cache`` object kind lists cache entries.  These are the
+:ref:`CMake Language Variables` stored in the persistent cache
+(``CMakeCache.txt``) for the build tree.
+
+There is only one ``cache`` object major version, version 2.
+Version 1 does not exist to avoid confusion with that from
+:manual:`cmake-server(7)` mode.
+
+"cache" version 2
+^^^^^^^^^^^^^^^^^
+
+``cache`` object version 2 is a JSON object:
+
+.. code-block:: json
+
+  {
+    "kind": "cache",
+    "version": { "major": 2, "minor": 0 },
+    "entries": [
+      {
+        "name": "BUILD_SHARED_LIBS",
+        "value": "ON",
+        "type": "BOOL",
+        "properties": [
+          {
+            "name": "HELPSTRING",
+            "value": "Build shared libraries"
+          }
+        ]
+      },
+      {
+        "name": "CMAKE_GENERATOR",
+        "value": "Unix Makefiles",
+        "type": "INTERNAL",
+        "properties": [
+          {
+            "name": "HELPSTRING",
+            "value": "Name of generator."
+          }
+        ]
+      }
+    ]
+  }
+
+The members specific to ``cache`` objects are:
+
+``entries``
+  A JSON array whose entries are each a JSON object specifying a
+  cache entry.  The members of each entry are:
+
+  ``name``
+    A string specifying the name of the entry.
+
+  ``value``
+    A string specifying the value of the entry.
+
+  ``type``
+    A string specifying the type of the entry used by
+    :manual:`cmake-gui(1)` to choose a widget for editing.
+
+  ``properties``
+    A JSON array of entries specifying associated
+    :ref:`cache entry properties <Cache Entry Properties>`.
+    Each entry is a JSON object containing members:
+
+    ``name``
+      A string specifying the name of the cache entry property.
+
+    ``value``
+      A string specifying the value of the cache entry property.
+
+Object Kind "cmakeFiles"
+------------------------
+
+The ``cmakeFiles`` object kind lists files used by CMake while
+configuring and generating the build system.  These include the
+``CMakeLists.txt`` files as well as included ``.cmake`` files.
+
+There is only one ``cmakeFiles`` object major version, version 1.
+
+"cmakeFiles" version 1
+^^^^^^^^^^^^^^^^^^^^^^
+
+``cmakeFiles`` object version 1 is a JSON object:
+
+.. code-block:: json
+
+  {
+    "kind": "cmakeFiles",
+    "version": { "major": 1, "minor": 0 },
+    "paths": {
+      "build": "/path/to/top-level-build-dir",
+      "source": "/path/to/top-level-source-dir"
+    },
+    "inputs": [
+      {
+        "path": "CMakeLists.txt"
+      },
+      {
+        "isGenerated": true,
+        "path": "/path/to/top-level-build-dir/.../CMakeSystem.cmake"
+      },
+      {
+        "isExternal": true,
+        "path": "/path/to/external/third-party/module.cmake"
+      },
+      {
+        "isCMake": true,
+        "isExternal": true,
+        "path": "/path/to/cmake/Modules/CMakeGenericSystem.cmake"
+      }
+    ]
+  }
+
+The members specific to ``cmakeFiles`` objects are:
+
+``paths``
+  A JSON object containing members:
+
+  ``source``
+    A string specifying the absolute path to the top-level source directory,
+    represented with forward slashes.
+
+  ``build``
+    A string specifying the absolute path to the top-level build directory,
+    represented with forward slashes.
+
+``inputs``
+  A JSON array whose entries are each a JSON object specifying an input
+  file used by CMake when configuring and generating the build system.
+  The members of each entry are:
+
+  ``path``
+    A string specifying the path to an input file to CMake, represented
+    with forward slashes.  If the file is inside the top-level source
+    directory then the path is specified relative to that directory.
+    Otherwise the path is absolute.
+
+  ``isGenerated``
+    Optional member that is present with boolean value ``true``
+    if the path specifies a file that is under the top-level
+    build directory and the build is out-of-source.
+    This member is not available on in-source builds.
+
+  ``isExternal``
+    Optional member that is present with boolean value ``true``
+    if the path specifies a file that is not under the top-level
+    source or build directories.
+
+  ``isCMake``
+    Optional member that is present with boolean value ``true``
+    if the path specifies a file in the CMake installation.
+
+Object Kind "toolchains"
+------------------------
+
+The ``toolchains`` object kind lists properties of the toolchains used during
+the build.  These include the language, compiler path, ID, and version.
+
+There is only one ``toolchains`` object major version, version 1.
+
+"toolchains" version 1
+^^^^^^^^^^^^^^^^^^^^^^
+
+``toolchains`` object version 1 is a JSON object:
+
+.. code-block:: json
+
+  {
+    "kind": "toolchains",
+    "version": { "major": 1, "minor": 0 },
+    "toolchains": [
+      {
+        "language": "C",
+        "compiler": {
+          "path": "/usr/bin/cc",
+          "id": "GNU",
+          "version": "9.3.0",
+          "implicit": {
+            "includeDirectories": [
+              "/usr/lib/gcc/x86_64-linux-gnu/9/include",
+              "/usr/local/include",
+              "/usr/include/x86_64-linux-gnu",
+              "/usr/include"
+            ],
+            "linkDirectories": [
+              "/usr/lib/gcc/x86_64-linux-gnu/9",
+              "/usr/lib/x86_64-linux-gnu",
+              "/usr/lib",
+              "/lib/x86_64-linux-gnu",
+              "/lib"
+            ],
+            "linkFrameworkDirectories": [],
+            "linkLibraries": [ "gcc", "gcc_s", "c", "gcc", "gcc_s" ]
+          }
+        },
+        "sourceFileExtensions": [ "c", "m" ]
+      },
+      {
+        "language": "CXX",
+        "compiler": {
+          "path": "/usr/bin/c++",
+          "id": "GNU",
+          "version": "9.3.0",
+          "implicit": {
+            "includeDirectories": [
+              "/usr/include/c++/9",
+              "/usr/include/x86_64-linux-gnu/c++/9",
+              "/usr/include/c++/9/backward",
+              "/usr/lib/gcc/x86_64-linux-gnu/9/include",
+              "/usr/local/include",
+              "/usr/include/x86_64-linux-gnu",
+              "/usr/include"
+            ],
+            "linkDirectories": [
+              "/usr/lib/gcc/x86_64-linux-gnu/9",
+              "/usr/lib/x86_64-linux-gnu",
+              "/usr/lib",
+              "/lib/x86_64-linux-gnu",
+              "/lib"
+            ],
+            "linkFrameworkDirectories": [],
+            "linkLibraries": [
+              "stdc++", "m", "gcc_s", "gcc", "c", "gcc_s", "gcc"
+            ]
+          }
+        },
+        "sourceFileExtensions": [
+          "C", "M", "c++", "cc", "cpp", "cxx", "mm", "CPP"
+        ]
+      }
+    ]
+  }
+
+The members specific to ``toolchains`` objects are:
+
+``toolchains``
+  A JSON array whose entries are each a JSON object specifying a toolchain
+  associated with a particular language. The members of each entry are:
+
+  ``language``
+    A JSON string specifying the toolchain language, like C or CXX. Language
+    names are the same as language names that can be passed to the
+    :command:`project` command. Because CMake only supports a single toolchain
+    per language, this field can be used as a key.
+
+  ``compiler``
+    A JSON object containing members:
+
+    ``path``
+      Optional member that is present when the
+      :variable:`CMAKE_<LANG>_COMPILER` variable is defined for the current
+      language. Its value is a JSON string holding the path to the compiler.
+
+    ``id``
+      Optional member that is present when the
+      :variable:`CMAKE_<LANG>_COMPILER_ID` variable is defined for the current
+      language. Its value is a JSON string holding the ID (GNU, MSVC, etc.) of
+      the compiler.
+
+    ``version``
+      Optional member that is present when the
+      :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable is defined for the
+      current language. Its value is a JSON string holding the version of the
+      compiler.
+
+    ``target``
+      Optional member that is present when the
+      :variable:`CMAKE_<LANG>_COMPILER_TARGET` variable is defined for the
+      current language. Its value is a JSON string holding the cross-compiling
+      target of the compiler.
+
+    ``implicit``
+      A JSON object containing members:
+
+      ``includeDirectories``
+        Optional member that is present when the
+        :variable:`CMAKE_<LANG>_IMPLICIT_INCLUDE_DIRECTORIES` variable is
+        defined for the current language. Its value is a JSON array of JSON
+        strings where each string holds a path to an implicit include
+        directory for the compiler.
+
+      ``linkDirectories``
+        Optional member that is present when the
+        :variable:`CMAKE_<LANG>_IMPLICIT_LINK_DIRECTORIES` variable is
+        defined for the current language. Its value is a JSON array of JSON
+        strings where each string holds a path to an implicit link directory
+        for the compiler.
+
+      ``linkFrameworkDirectories``
+        Optional member that is present when the
+        :variable:`CMAKE_<LANG>_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES` variable
+        is defined for the current language. Its value is a JSON array of JSON
+        strings where each string holds a path to an implicit link framework
+        directory for the compiler.
+
+      ``linkLibraries``
+        Optional member that is present when the
+        :variable:`CMAKE_<LANG>_IMPLICIT_LINK_LIBRARIES` variable is defined
+        for the current language. Its value is a JSON array of JSON strings
+        where each string holds a path to an implicit link library for the
+        compiler.
+
+  ``sourceFileExtensions``
+    Optional member that is present when the
+    :variable:`CMAKE_<LANG>_SOURCE_FILE_EXTENSIONS` variable is defined for
+    the current language. Its value is a JSON array of JSON strings where each
+    each string holds a file extension (without the leading dot) for the
+    language.
diff --git a/share/cmake-3.22/Help/manual/cmake-generator-expressions.7.rst b/share/cmake-3.22/Help/manual/cmake-generator-expressions.7.rst
new file mode 100644
index 0000000..df13dd0
--- /dev/null
+++ b/share/cmake-3.22/Help/manual/cmake-generator-expressions.7.rst
@@ -0,0 +1,1193 @@
+.. cmake-manual-description: CMake Generator Expressions
+
+cmake-generator-expressions(7)
+******************************
+
+.. only:: html
+
+   .. contents::
+
+Introduction
+============
+
+Generator expressions are evaluated during build system generation to produce
+information specific to each build configuration.
+
+Generator expressions are allowed in the context of many target properties,
+such as :prop_tgt:`LINK_LIBRARIES`, :prop_tgt:`INCLUDE_DIRECTORIES`,
+:prop_tgt:`COMPILE_DEFINITIONS` and others.  They may also be used when using
+commands to populate those properties, such as :command:`target_link_libraries`,
+:command:`target_include_directories`, :command:`target_compile_definitions`
+and others.
+
+They enable conditional linking, conditional definitions used when compiling,
+conditional include directories, and more.  The conditions may be based on
+the build configuration, target properties, platform information or any other
+queryable information.
+
+Generator expressions have the form ``$<...>``.  To avoid confusion, this page
+deviates from most of the CMake documentation in that it omits angular brackets
+``<...>`` around placeholders like ``condition``, ``string``, ``target``,
+among others.
+
+Generator expressions can be nested, as shown in most of the examples below.
+
+.. _`Boolean Generator Expressions`:
+
+Boolean Generator Expressions
+=============================
+
+Boolean expressions evaluate to either ``0`` or ``1``.
+They are typically used to construct the condition in a :ref:`conditional
+generator expression<Conditional Generator Expressions>`.
+
+Available boolean expressions are:
+
+Logical Operators
+-----------------
+
+.. genex:: $<BOOL:string>
+
+  Converts ``string`` to ``0`` or ``1``. Evaluates to ``0`` if any of the
+  following is true:
+
+  * ``string`` is empty,
+  * ``string`` is a case-insensitive equal of
+    ``0``, ``FALSE``, ``OFF``, ``N``, ``NO``, ``IGNORE``, or ``NOTFOUND``, or
+  * ``string`` ends in the suffix ``-NOTFOUND`` (case-sensitive).
+
+  Otherwise evaluates to ``1``.
+
+.. genex:: $<AND:conditions>
+
+  where ``conditions`` is a comma-separated list of boolean expressions.
+  Evaluates to ``1`` if all conditions are ``1``.
+  Otherwise evaluates to ``0``.
+
+.. genex:: $<OR:conditions>
+
+  where ``conditions`` is a comma-separated list of boolean expressions.
+  Evaluates to ``1`` if at least one of the conditions is ``1``.
+  Otherwise evaluates to ``0``.
+
+.. genex:: $<NOT:condition>
+
+  ``0`` if ``condition`` is ``1``, else ``1``.
+
+String Comparisons
+------------------
+
+.. genex:: $<STREQUAL:string1,string2>
+
+  ``1`` if ``string1`` and ``string2`` are equal, else ``0``.
+  The comparison is case-sensitive.  For a case-insensitive comparison,
+  combine with a :ref:`string transforming generator expression
+  <String Transforming Generator Expressions>`,
+
+  .. code-block:: cmake
+
+    $<STREQUAL:$<UPPER_CASE:${foo}>,"BAR"> # "1" if ${foo} is any of "BAR", "Bar", "bar", ...
+
+.. genex:: $<EQUAL:value1,value2>
+
+  ``1`` if ``value1`` and ``value2`` are numerically equal, else ``0``.
+
+.. genex:: $<IN_LIST:string,list>
+
+  .. versionadded:: 3.12
+
+  ``1`` if ``string`` is member of the semicolon-separated ``list``, else ``0``.
+  Uses case-sensitive comparisons.
+
+.. genex:: $<VERSION_LESS:v1,v2>
+
+  ``1`` if ``v1`` is a version less than ``v2``, else ``0``.
+
+.. genex:: $<VERSION_GREATER:v1,v2>
+
+  ``1`` if ``v1`` is a version greater than ``v2``, else ``0``.
+
+.. genex:: $<VERSION_EQUAL:v1,v2>
+
+  ``1`` if ``v1`` is the same version as ``v2``, else ``0``.
+
+.. genex:: $<VERSION_LESS_EQUAL:v1,v2>
+
+  .. versionadded:: 3.7
+
+  ``1`` if ``v1`` is a version less than or equal to ``v2``, else ``0``.
+
+.. genex:: $<VERSION_GREATER_EQUAL:v1,v2>
+
+  .. versionadded:: 3.7
+
+  ``1`` if ``v1`` is a version greater than or equal to ``v2``, else ``0``.
+
+Variable Queries
+----------------
+
+.. genex:: $<TARGET_EXISTS:target>
+
+  .. versionadded:: 3.12
+
+  ``1`` if ``target`` exists, else ``0``.
+
+.. genex:: $<CONFIG:cfgs>
+
+  ``1`` if config is any one of the entries in comma-separated list
+  ``cfgs``, else ``0``. This is a case-insensitive comparison. The mapping in
+  :prop_tgt:`MAP_IMPORTED_CONFIG_<CONFIG>` is also considered by this
+  expression when it is evaluated on a property on an :prop_tgt:`IMPORTED`
+  target.
+
+.. genex:: $<PLATFORM_ID:platform_ids>
+
+  where ``platform_ids`` is a comma-separated list.
+  ``1`` if the CMake's platform id matches any one of the entries in
+  ``platform_ids``, otherwise ``0``.
+  See also the :variable:`CMAKE_SYSTEM_NAME` variable.
+
+.. genex:: $<C_COMPILER_ID:compiler_ids>
+
+  where ``compiler_ids`` is a comma-separated list.
+  ``1`` if the CMake's compiler id of the C compiler matches any one
+  of the entries in ``compiler_ids``, otherwise ``0``.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_ID` variable.
+
+.. genex:: $<CXX_COMPILER_ID:compiler_ids>
+
+  where ``compiler_ids`` is a comma-separated list.
+  ``1`` if the CMake's compiler id of the CXX compiler matches any one
+  of the entries in ``compiler_ids``, otherwise ``0``.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_ID` variable.
+
+.. genex:: $<CUDA_COMPILER_ID:compiler_ids>
+
+  .. versionadded:: 3.15
+
+  where ``compiler_ids`` is a comma-separated list.
+  ``1`` if the CMake's compiler id of the CUDA compiler matches any one
+  of the entries in ``compiler_ids``, otherwise ``0``.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_ID` variable.
+
+.. genex:: $<OBJC_COMPILER_ID:compiler_ids>
+
+  .. versionadded:: 3.16
+
+  where ``compiler_ids`` is a comma-separated list.
+  ``1`` if the CMake's compiler id of the Objective-C compiler matches any one
+  of the entries in ``compiler_ids``, otherwise ``0``.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_ID` variable.
+
+.. genex:: $<OBJCXX_COMPILER_ID:compiler_ids>
+
+  .. versionadded:: 3.16
+
+  where ``compiler_ids`` is a comma-separated list.
+  ``1`` if the CMake's compiler id of the Objective-C++ compiler matches any one
+  of the entries in ``compiler_ids``, otherwise ``0``.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_ID` variable.
+
+.. genex:: $<Fortran_COMPILER_ID:compiler_ids>
+
+  where ``compiler_ids`` is a comma-separated list.
+  ``1`` if the CMake's compiler id of the Fortran compiler matches any one
+  of the entries in ``compiler_ids``, otherwise ``0``.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_ID` variable.
+
+.. genex:: $<HIP_COMPILER_ID:compiler_ids>
+
+  where ``compiler_ids`` is a comma-separated list.
+  ``1`` if the CMake's compiler id of the HIP compiler matches any one
+  of the entries in ``compiler_ids``, otherwise ``0``.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_ID` variable.
+
+.. genex:: $<ISPC_COMPILER_ID:compiler_ids>
+
+  .. versionadded:: 3.19
+
+  where ``compiler_ids`` is a comma-separated list.
+  ``1`` if the CMake's compiler id of the ISPC compiler matches any one
+  of the entries in ``compiler_ids``, otherwise ``0``.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_ID` variable.
+
+.. genex:: $<C_COMPILER_VERSION:version>
+
+  ``1`` if the version of the C compiler matches ``version``, otherwise ``0``.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable.
+
+.. genex:: $<CXX_COMPILER_VERSION:version>
+
+  ``1`` if the version of the CXX compiler matches ``version``, otherwise ``0``.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable.
+
+.. genex:: $<CUDA_COMPILER_VERSION:version>
+
+  .. versionadded:: 3.15
+
+  ``1`` if the version of the CXX compiler matches ``version``, otherwise ``0``.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable.
+
+.. genex:: $<OBJC_COMPILER_VERSION:version>
+
+  .. versionadded:: 3.16
+
+  ``1`` if the version of the OBJC compiler matches ``version``, otherwise ``0``.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable.
+
+.. genex:: $<OBJCXX_COMPILER_VERSION:version>
+
+  .. versionadded:: 3.16
+
+  ``1`` if the version of the OBJCXX compiler matches ``version``, otherwise ``0``.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable.
+
+.. genex:: $<Fortran_COMPILER_VERSION:version>
+
+  ``1`` if the version of the Fortran compiler matches ``version``, otherwise ``0``.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable.
+
+.. genex:: $<HIP_COMPILER_VERSION:version>
+
+  ``1`` if the version of the HIP compiler matches ``version``, otherwise ``0``.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable.
+
+.. genex:: $<ISPC_COMPILER_VERSION:version>
+
+  .. versionadded:: 3.19
+
+  ``1`` if the version of the ISPC compiler matches ``version``, otherwise ``0``.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable.
+
+.. genex:: $<TARGET_POLICY:policy>
+
+  ``1`` if the ``policy`` was NEW when the 'head' target was created,
+  else ``0``.  If the ``policy`` was not set, the warning message for the policy
+  will be emitted. This generator expression only works for a subset of
+  policies.
+
+.. genex:: $<COMPILE_FEATURES:features>
+
+  .. versionadded:: 3.1
+
+  where ``features`` is a comma-spearated list.
+  Evaluates to ``1`` if all of the ``features`` are available for the 'head'
+  target, and ``0`` otherwise. If this expression is used while evaluating
+  the link implementation of a target and if any dependency transitively
+  increases the required :prop_tgt:`C_STANDARD` or :prop_tgt:`CXX_STANDARD`
+  for the 'head' target, an error is reported.  See the
+  :manual:`cmake-compile-features(7)` manual for information on
+  compile features and a list of supported compilers.
+
+.. _`Boolean COMPILE_LANGUAGE Generator Expression`:
+
+.. genex:: $<COMPILE_LANG_AND_ID:language,compiler_ids>
+
+  .. versionadded:: 3.15
+
+  ``1`` when the language used for compilation unit matches ``language`` and
+  the CMake's compiler id of the language compiler matches any one of the
+  entries in ``compiler_ids``, otherwise ``0``. This expression is a short form
+  for the combination of ``$<COMPILE_LANGUAGE:language>`` and
+  ``$<LANG_COMPILER_ID:compiler_ids>``. This expression may be used to specify
+  compile options, compile definitions, and include directories for source files of a
+  particular language and compiler combination in a target. For example:
+
+  .. code-block:: cmake
+
+    add_executable(myapp main.cpp foo.c bar.cpp zot.cu)
+    target_compile_definitions(myapp
+      PRIVATE $<$<COMPILE_LANG_AND_ID:CXX,AppleClang,Clang>:COMPILING_CXX_WITH_CLANG>
+              $<$<COMPILE_LANG_AND_ID:CXX,Intel>:COMPILING_CXX_WITH_INTEL>
+              $<$<COMPILE_LANG_AND_ID:C,Clang>:COMPILING_C_WITH_CLANG>
+    )
+
+  This specifies the use of different compile definitions based on both
+  the compiler id and compilation language. This example will have a
+  ``COMPILING_CXX_WITH_CLANG`` compile definition when Clang is the CXX
+  compiler, and ``COMPILING_CXX_WITH_INTEL`` when Intel is the CXX compiler.
+  Likewise when the C compiler is Clang it will only see the  ``COMPILING_C_WITH_CLANG``
+  definition.
+
+  Without the ``COMPILE_LANG_AND_ID`` generator expression the same logic
+  would be expressed as:
+
+  .. code-block:: cmake
+
+    target_compile_definitions(myapp
+      PRIVATE $<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CXX_COMPILER_ID:AppleClang,Clang>>:COMPILING_CXX_WITH_CLANG>
+              $<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CXX_COMPILER_ID:Intel>>:COMPILING_CXX_WITH_INTEL>
+              $<$<AND:$<COMPILE_LANGUAGE:C>,$<C_COMPILER_ID:Clang>>:COMPILING_C_WITH_CLANG>
+    )
+
+.. genex:: $<COMPILE_LANGUAGE:languages>
+
+  .. versionadded:: 3.3
+
+  ``1`` when the language used for compilation unit matches any of the entries
+  in ``languages``, otherwise ``0``.  This expression may be used to specify
+  compile options, compile definitions, and include directories for source files of a
+  particular language in a target. For example:
+
+  .. code-block:: cmake
+
+    add_executable(myapp main.cpp foo.c bar.cpp zot.cu)
+    target_compile_options(myapp
+      PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-fno-exceptions>
+    )
+    target_compile_definitions(myapp
+      PRIVATE $<$<COMPILE_LANGUAGE:CXX>:COMPILING_CXX>
+              $<$<COMPILE_LANGUAGE:CUDA>:COMPILING_CUDA>
+    )
+    target_include_directories(myapp
+      PRIVATE $<$<COMPILE_LANGUAGE:CXX,CUDA>:/opt/foo/headers>
+    )
+
+  This specifies the use of the ``-fno-exceptions`` compile option,
+  ``COMPILING_CXX`` compile definition, and ``cxx_headers`` include
+  directory for C++ only (compiler id checks elided).  It also specifies
+  a ``COMPILING_CUDA`` compile definition for CUDA.
+
+  Note that with :ref:`Visual Studio Generators` and :generator:`Xcode` there
+  is no way to represent target-wide compile definitions or include directories
+  separately for ``C`` and ``CXX`` languages.
+  Also, with :ref:`Visual Studio Generators` there is no way to represent
+  target-wide flags separately for ``C`` and ``CXX`` languages.  Under these
+  generators, expressions for both C and C++ sources will be evaluated
+  using ``CXX`` if there are any C++ sources and otherwise using ``C``.
+  A workaround is to create separate libraries for each source file language
+  instead:
+
+  .. code-block:: cmake
+
+    add_library(myapp_c foo.c)
+    add_library(myapp_cxx bar.cpp)
+    target_compile_options(myapp_cxx PUBLIC -fno-exceptions)
+    add_executable(myapp main.cpp)
+    target_link_libraries(myapp myapp_c myapp_cxx)
+
+.. _`Boolean LINK_LANGUAGE Generator Expression`:
+
+.. genex:: $<LINK_LANG_AND_ID:language,compiler_ids>
+
+  .. versionadded:: 3.18
+
+  ``1`` when the language used for link step matches ``language`` and the
+  CMake's compiler id of the language linker matches any one of the entries
+  in ``compiler_ids``, otherwise ``0``. This expression is a short form for the
+  combination of ``$<LINK_LANGUAGE:language>`` and
+  ``$<LANG_COMPILER_ID:compiler_ids>``. This expression may be used to specify
+  link libraries, link options, link directories and link dependencies of a
+  particular language and linker combination in a target. For example:
+
+  .. code-block:: cmake
+
+    add_library(libC_Clang ...)
+    add_library(libCXX_Clang ...)
+    add_library(libC_Intel ...)
+    add_library(libCXX_Intel ...)
+
+    add_executable(myapp main.c)
+    if (CXX_CONFIG)
+      target_sources(myapp PRIVATE file.cxx)
+    endif()
+    target_link_libraries(myapp
+      PRIVATE $<$<LINK_LANG_AND_ID:CXX,Clang,AppleClang>:libCXX_Clang>
+              $<$<LINK_LANG_AND_ID:C,Clang,AppleClang>:libC_Clang>
+              $<$<LINK_LANG_AND_ID:CXX,Intel>:libCXX_Intel>
+              $<$<LINK_LANG_AND_ID:C,Intel>:libC_Intel>)
+
+  This specifies the use of different link libraries based on both the
+  compiler id and link language. This example will have target ``libCXX_Clang``
+  as link dependency when ``Clang`` or ``AppleClang`` is the ``CXX``
+  linker, and ``libCXX_Intel`` when ``Intel`` is the ``CXX`` linker.
+  Likewise when the ``C`` linker is ``Clang`` or ``AppleClang``, target
+  ``libC_Clang`` will be added as link dependency and ``libC_Intel`` when
+  ``Intel`` is the ``C`` linker.
+
+  See :ref:`the note related to
+  <Constraints LINK_LANGUAGE Generator Expression>`
+  ``$<LINK_LANGUAGE:language>`` for constraints about the usage of this
+  generator expression.
+
+.. genex:: $<LINK_LANGUAGE:languages>
+
+  .. versionadded:: 3.18
+
+  ``1`` when the language used for link step matches any of the entries
+  in ``languages``, otherwise ``0``.  This expression may be used to specify
+  link libraries, link options, link directories and link dependencies of a
+  particular language in a target. For example:
+
+  .. code-block:: cmake
+
+    add_library(api_C ...)
+    add_library(api_CXX ...)
+    add_library(api INTERFACE)
+    target_link_options(api INTERFACE $<$<LINK_LANGUAGE:C>:-opt_c>
+                                        $<$<LINK_LANGUAGE:CXX>:-opt_cxx>)
+    target_link_libraries(api INTERFACE $<$<LINK_LANGUAGE:C>:api_C>
+                                        $<$<LINK_LANGUAGE:CXX>:api_CXX>)
+
+    add_executable(myapp1 main.c)
+    target_link_options(myapp1 PRIVATE api)
+
+    add_executable(myapp2 main.cpp)
+    target_link_options(myapp2 PRIVATE api)
+
+  This specifies to use the ``api`` target for linking targets ``myapp1`` and
+  ``myapp2``. In practice, ``myapp1`` will link with target ``api_C`` and
+  option ``-opt_c`` because it will use ``C`` as link language. And ``myapp2``
+  will link with ``api_CXX`` and option ``-opt_cxx`` because ``CXX`` will be
+  the link language.
+
+  .. _`Constraints LINK_LANGUAGE Generator Expression`:
+
+  .. note::
+
+    To determine the link language of a target, it is required to collect,
+    transitively, all the targets which will be linked to it. So, for link
+    libraries properties, a double evaluation will be done. During the first
+    evaluation, ``$<LINK_LANGUAGE:..>`` expressions will always return ``0``.
+    The link language computed after this first pass will be used to do the
+    second pass. To avoid inconsistency, it is required that the second pass
+    do not change the link language. Moreover, to avoid unexpected
+    side-effects, it is required to specify complete entities as part of the
+    ``$<LINK_LANGUAGE:..>`` expression. For example:
+
+    .. code-block:: cmake
+
+      add_library(lib STATIC file.cxx)
+      add_library(libother STATIC file.c)
+
+      # bad usage
+      add_executable(myapp1 main.c)
+      target_link_libraries(myapp1 PRIVATE lib$<$<LINK_LANGUAGE:C>:other>)
+
+      # correct usage
+      add_executable(myapp2 main.c)
+      target_link_libraries(myapp2 PRIVATE $<$<LINK_LANGUAGE:C>:libother>)
+
+    In this example, for ``myapp1``, the first pass will, unexpectedly,
+    determine that the link language is ``CXX`` because the evaluation of the
+    generator expression will be an empty string so ``myapp1`` will depends on
+    target ``lib`` which is ``C++``. On the contrary, for ``myapp2``, the first
+    evaluation will give ``C`` as link language, so the second pass will
+    correctly add target ``libother`` as link dependency.
+
+.. genex:: $<DEVICE_LINK:list>
+
+  .. versionadded:: 3.18
+
+  Returns the list if it is the device link step, an empty list otherwise.
+  The device link step is controlled by :prop_tgt:`CUDA_SEPARABLE_COMPILATION`
+  and :prop_tgt:`CUDA_RESOLVE_DEVICE_SYMBOLS` properties and
+  policy :policy:`CMP0105`. This expression can only be used to specify link
+  options.
+
+.. genex:: $<HOST_LINK:list>
+
+  .. versionadded:: 3.18
+
+  Returns the list if it is the normal link step, an empty list otherwise.
+  This expression is mainly useful when a device link step is also involved
+  (see ``$<DEVICE_LINK:list>`` generator expression). This expression can only
+  be used to specify link options.
+
+String-Valued Generator Expressions
+===================================
+
+These expressions expand to some string.
+For example,
+
+.. code-block:: cmake
+
+  include_directories(/usr/include/$<CXX_COMPILER_ID>/)
+
+expands to ``/usr/include/GNU/`` or ``/usr/include/Clang/`` etc, depending on
+the compiler identifier.
+
+String-valued expressions may also be combined with other expressions.
+Here an example for a string-valued expression within a boolean expressions
+within a conditional expression:
+
+.. code-block:: cmake
+
+  $<$<VERSION_LESS:$<CXX_COMPILER_VERSION>,4.2.0>:OLD_COMPILER>
+
+expands to ``OLD_COMPILER`` if the
+:variable:`CMAKE_CXX_COMPILER_VERSION <CMAKE_<LANG>_COMPILER_VERSION>` is less
+than 4.2.0.
+
+And here two nested string-valued expressions:
+
+.. code-block:: cmake
+
+  -I$<JOIN:$<TARGET_PROPERTY:INCLUDE_DIRECTORIES>, -I>
+
+generates a string of the entries in the :prop_tgt:`INCLUDE_DIRECTORIES` target
+property with each entry preceded by ``-I``.
+
+Expanding on the previous example, if one first wants to check if the
+``INCLUDE_DIRECTORIES`` property is non-empty, then it is advisable to
+introduce a helper variable to keep the code readable:
+
+.. code-block:: cmake
+
+  set(prop "$<TARGET_PROPERTY:INCLUDE_DIRECTORIES>") # helper variable
+  $<$<BOOL:${prop}>:-I$<JOIN:${prop}, -I>>
+
+The following string-valued generator expressions are available:
+
+Escaped Characters
+------------------
+
+String literals to escape the special meaning a character would otherwise have:
+
+.. genex:: $<ANGLE-R>
+
+  A literal ``>``. Used for example to compare strings that contain a ``>``.
+
+.. genex:: $<COMMA>
+
+  A literal ``,``. Used for example to compare strings which contain a ``,``.
+
+.. genex:: $<SEMICOLON>
+
+  A literal ``;``. Used to prevent list expansion on an argument with ``;``.
+
+.. _`Conditional Generator Expressions`:
+
+Conditional Expressions
+-----------------------
+
+Conditional generator expressions depend on a boolean condition
+that must be ``0`` or ``1``.
+
+.. genex:: $<condition:true_string>
+
+  Evaluates to ``true_string`` if ``condition`` is ``1``.
+  Otherwise evaluates to the empty string.
+
+.. genex:: $<IF:condition,true_string,false_string>
+
+  .. versionadded:: 3.8
+
+  Evaluates to ``true_string`` if ``condition`` is ``1``.
+  Otherwise evaluates to ``false_string``.
+
+Typically, the ``condition`` is a :ref:`boolean generator expression
+<Boolean Generator Expressions>`.  For instance,
+
+.. code-block:: cmake
+
+  $<$<CONFIG:Debug>:DEBUG_MODE>
+
+expands to ``DEBUG_MODE`` when the ``Debug`` configuration is used, and
+otherwise expands to the empty string.
+
+.. _`String Transforming Generator Expressions`:
+
+String Transformations
+----------------------
+
+.. genex:: $<JOIN:list,string>
+
+  Joins the list with the content of ``string``.
+
+.. genex:: $<REMOVE_DUPLICATES:list>
+
+  .. versionadded:: 3.15
+
+  Removes duplicated items in the given ``list``.
+
+.. genex:: $<FILTER:list,INCLUDE|EXCLUDE,regex>
+
+  .. versionadded:: 3.15
+
+  Includes or removes items from ``list`` that match the regular expression ``regex``.
+
+.. genex:: $<LOWER_CASE:string>
+
+  Content of ``string`` converted to lower case.
+
+.. genex:: $<UPPER_CASE:string>
+
+  Content of ``string`` converted to upper case.
+
+.. genex:: $<GENEX_EVAL:expr>
+
+  .. versionadded:: 3.12
+
+  Content of ``expr`` evaluated as a generator expression in the current
+  context. This enables consumption of generator expressions whose
+  evaluation results itself in generator expressions.
+
+.. genex:: $<TARGET_GENEX_EVAL:tgt,expr>
+
+  .. versionadded:: 3.12
+
+  Content of ``expr`` evaluated as a generator expression in the context of
+  ``tgt`` target. This enables consumption of custom target properties that
+  themselves contain generator expressions.
+
+  Having the capability to evaluate generator expressions is very useful when
+  you want to manage custom properties supporting generator expressions.
+  For example:
+
+  .. code-block:: cmake
+
+    add_library(foo ...)
+
+    set_property(TARGET foo PROPERTY
+      CUSTOM_KEYS $<$<CONFIG:DEBUG>:FOO_EXTRA_THINGS>
+    )
+
+    add_custom_target(printFooKeys
+      COMMAND ${CMAKE_COMMAND} -E echo $<TARGET_PROPERTY:foo,CUSTOM_KEYS>
+    )
+
+  This naive implementation of the ``printFooKeys`` custom command is wrong
+  because ``CUSTOM_KEYS`` target property is not evaluated and the content
+  is passed as is (i.e. ``$<$<CONFIG:DEBUG>:FOO_EXTRA_THINGS>``).
+
+  To have the expected result (i.e. ``FOO_EXTRA_THINGS`` if config is
+  ``Debug``), it is required to evaluate the output of
+  ``$<TARGET_PROPERTY:foo,CUSTOM_KEYS>``:
+
+  .. code-block:: cmake
+
+    add_custom_target(printFooKeys
+      COMMAND ${CMAKE_COMMAND} -E
+        echo $<TARGET_GENEX_EVAL:foo,$<TARGET_PROPERTY:foo,CUSTOM_KEYS>>
+    )
+
+Variable Queries
+----------------
+
+.. genex:: $<CONFIG>
+
+  Configuration name.
+
+.. genex:: $<CONFIGURATION>
+
+  Configuration name. Deprecated since CMake 3.0. Use ``CONFIG`` instead.
+
+.. genex:: $<PLATFORM_ID>
+
+  The current system's CMake platform id.
+  See also the :variable:`CMAKE_SYSTEM_NAME` variable.
+
+.. genex:: $<C_COMPILER_ID>
+
+  The CMake's compiler id of the C compiler used.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_ID` variable.
+
+.. genex:: $<CXX_COMPILER_ID>
+
+  The CMake's compiler id of the CXX compiler used.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_ID` variable.
+
+.. genex:: $<CUDA_COMPILER_ID>
+
+  The CMake's compiler id of the CUDA compiler used.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_ID` variable.
+
+.. genex:: $<OBJC_COMPILER_ID>
+
+  .. versionadded:: 3.16
+
+  The CMake's compiler id of the OBJC compiler used.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_ID` variable.
+
+.. genex:: $<OBJCXX_COMPILER_ID>
+
+  .. versionadded:: 3.16
+
+  The CMake's compiler id of the OBJCXX compiler used.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_ID` variable.
+
+.. genex:: $<Fortran_COMPILER_ID>
+
+  The CMake's compiler id of the Fortran compiler used.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_ID` variable.
+
+.. genex:: $<HIP_COMPILER_ID>
+
+  The CMake's compiler id of the HIP compiler used.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_ID` variable.
+
+.. genex:: $<ISPC_COMPILER_ID>
+
+  .. versionadded:: 3.19
+
+  The CMake's compiler id of the ISPC compiler used.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_ID` variable.
+
+.. genex:: $<C_COMPILER_VERSION>
+
+  The version of the C compiler used.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable.
+
+.. genex:: $<CXX_COMPILER_VERSION>
+
+  The version of the CXX compiler used.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable.
+
+.. genex:: $<CUDA_COMPILER_VERSION>
+
+  The version of the CUDA compiler used.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable.
+
+.. genex:: $<OBJC_COMPILER_VERSION>
+
+  .. versionadded:: 3.16
+
+  The version of the OBJC compiler used.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable.
+
+.. genex:: $<OBJCXX_COMPILER_VERSION>
+
+  .. versionadded:: 3.16
+
+  The version of the OBJCXX compiler used.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable.
+
+.. genex:: $<Fortran_COMPILER_VERSION>
+
+  The version of the Fortran compiler used.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable.
+
+.. genex:: $<HIP_COMPILER_VERSION>
+
+  The version of the HIP compiler used.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable.
+
+.. genex:: $<ISPC_COMPILER_VERSION>
+
+  .. versionadded:: 3.19
+
+  The version of the ISPC compiler used.
+  See also the :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable.
+
+.. genex:: $<COMPILE_LANGUAGE>
+
+  .. versionadded:: 3.3
+
+  The compile language of source files when evaluating compile options.
+  See :ref:`the related boolean expression
+  <Boolean COMPILE_LANGUAGE Generator Expression>`
+  ``$<COMPILE_LANGUAGE:language>``
+  for notes about the portability of this generator expression.
+
+.. genex:: $<LINK_LANGUAGE>
+
+  .. versionadded:: 3.18
+
+  The link language of target when evaluating link options.
+  See :ref:`the related boolean expression
+  <Boolean LINK_LANGUAGE Generator Expression>` ``$<LINK_LANGUAGE:language>``
+  for notes about the portability of this generator expression.
+
+  .. note::
+
+    This generator expression is not supported by the link libraries
+    properties to avoid side-effects due to the double evaluation of
+    these properties.
+
+.. _`Target-Dependent Queries`:
+
+Target-Dependent Queries
+------------------------
+
+These queries refer to a target ``tgt``. This can be any runtime artifact,
+namely:
+
+* an executable target created by :command:`add_executable`
+* a shared library target (``.so``, ``.dll`` but not their ``.lib`` import library)
+  created by :command:`add_library`
+* a static library target created by :command:`add_library`
+
+In the following, "the ``tgt`` filename" means the name of the ``tgt``
+binary file. This has to be distinguished from "the target name",
+which is just the string ``tgt``.
+
+.. genex:: $<TARGET_NAME_IF_EXISTS:tgt>
+
+  .. versionadded:: 3.12
+
+  The target name ``tgt`` if the target exists, an empty string otherwise.
+
+  Note that ``tgt`` is not added as a dependency of the target this
+  expression is evaluated on.
+
+.. genex:: $<TARGET_FILE:tgt>
+
+  Full path to the ``tgt`` binary file.
+
+.. genex:: $<TARGET_FILE_BASE_NAME:tgt>
+
+  .. versionadded:: 3.15
+
+  Base name of ``tgt``, i.e. ``$<TARGET_FILE_NAME:tgt>`` without prefix and
+  suffix.
+  For example, if the ``tgt`` filename is ``libbase.so``, the base name is ``base``.
+
+  See also the :prop_tgt:`OUTPUT_NAME`, :prop_tgt:`ARCHIVE_OUTPUT_NAME`,
+  :prop_tgt:`LIBRARY_OUTPUT_NAME` and :prop_tgt:`RUNTIME_OUTPUT_NAME`
+  target properties and their configuration specific variants
+  :prop_tgt:`OUTPUT_NAME_<CONFIG>`, :prop_tgt:`ARCHIVE_OUTPUT_NAME_<CONFIG>`,
+  :prop_tgt:`LIBRARY_OUTPUT_NAME_<CONFIG>` and
+  :prop_tgt:`RUNTIME_OUTPUT_NAME_<CONFIG>`.
+
+  The :prop_tgt:`<CONFIG>_POSTFIX` and :prop_tgt:`DEBUG_POSTFIX` target
+  properties can also be considered.
+
+  Note that ``tgt`` is not added as a dependency of the target this
+  expression is evaluated on.
+
+.. genex:: $<TARGET_FILE_PREFIX:tgt>
+
+  .. versionadded:: 3.15
+
+  Prefix of the ``tgt`` filename (such as ``lib``).
+
+  See also the :prop_tgt:`PREFIX` target property.
+
+  Note that ``tgt`` is not added as a dependency of the target this
+  expression is evaluated on.
+
+.. genex:: $<TARGET_FILE_SUFFIX:tgt>
+
+  .. versionadded:: 3.15
+
+  Suffix of the ``tgt`` filename (extension such as ``.so`` or ``.exe``).
+
+  See also the :prop_tgt:`SUFFIX` target property.
+
+  Note that ``tgt`` is not added as a dependency of the target this
+  expression is evaluated on.
+
+.. genex:: $<TARGET_FILE_NAME:tgt>
+
+  The ``tgt`` filename.
+
+  Note that ``tgt`` is not added as a dependency of the target this
+  expression is evaluated on (see policy :policy:`CMP0112`).
+
+.. genex:: $<TARGET_FILE_DIR:tgt>
+
+  Directory of the ``tgt`` binary file.
+
+  Note that ``tgt`` is not added as a dependency of the target this
+  expression is evaluated on (see policy :policy:`CMP0112`).
+
+.. genex:: $<TARGET_LINKER_FILE:tgt>
+
+  File used when linking to the ``tgt`` target.  This will usually
+  be the library that ``tgt`` represents (``.a``, ``.lib``, ``.so``),
+  but for a shared library on DLL platforms, it would be the ``.lib``
+  import library associated with the DLL.
+
+.. genex:: $<TARGET_LINKER_FILE_BASE_NAME:tgt>
+
+  .. versionadded:: 3.15
+
+  Base name of file used to link the target ``tgt``, i.e.
+  ``$<TARGET_LINKER_FILE_NAME:tgt>`` without prefix and suffix. For example,
+  if target file name is ``libbase.a``, the base name is ``base``.
+
+  See also the :prop_tgt:`OUTPUT_NAME`, :prop_tgt:`ARCHIVE_OUTPUT_NAME`,
+  and :prop_tgt:`LIBRARY_OUTPUT_NAME` target properties and their configuration
+  specific variants :prop_tgt:`OUTPUT_NAME_<CONFIG>`,
+  :prop_tgt:`ARCHIVE_OUTPUT_NAME_<CONFIG>` and
+  :prop_tgt:`LIBRARY_OUTPUT_NAME_<CONFIG>`.
+
+  The :prop_tgt:`<CONFIG>_POSTFIX` and :prop_tgt:`DEBUG_POSTFIX` target
+  properties can also be considered.
+
+  Note that ``tgt`` is not added as a dependency of the target this
+  expression is evaluated on.
+
+.. genex:: $<TARGET_LINKER_FILE_PREFIX:tgt>
+
+  .. versionadded:: 3.15
+
+  Prefix of file used to link target ``tgt``.
+
+  See also the :prop_tgt:`PREFIX` and :prop_tgt:`IMPORT_PREFIX` target
+  properties.
+
+  Note that ``tgt`` is not added as a dependency of the target this
+  expression is evaluated on.
+
+.. genex:: $<TARGET_LINKER_FILE_SUFFIX:tgt>
+
+  .. versionadded:: 3.15
+
+  Suffix of file used to link where ``tgt`` is the name of a target.
+
+  The suffix corresponds to the file extension (such as ".so" or ".lib").
+
+  See also the :prop_tgt:`SUFFIX` and :prop_tgt:`IMPORT_SUFFIX` target
+  properties.
+
+  Note that ``tgt`` is not added as a dependency of the target this
+  expression is evaluated on.
+
+.. genex:: $<TARGET_LINKER_FILE_NAME:tgt>
+
+  Name of file used to link target ``tgt``.
+
+  Note that ``tgt`` is not added as a dependency of the target this
+  expression is evaluated on (see policy :policy:`CMP0112`).
+
+.. genex:: $<TARGET_LINKER_FILE_DIR:tgt>
+
+  Directory of file used to link target ``tgt``.
+
+  Note that ``tgt`` is not added as a dependency of the target this
+  expression is evaluated on (see policy :policy:`CMP0112`).
+
+.. genex:: $<TARGET_SONAME_FILE:tgt>
+
+  File with soname (``.so.3``) where ``tgt`` is the name of a target.
+.. genex:: $<TARGET_SONAME_FILE_NAME:tgt>
+
+  Name of file with soname (``.so.3``).
+
+  Note that ``tgt`` is not added as a dependency of the target this
+  expression is evaluated on (see policy :policy:`CMP0112`).
+
+.. genex:: $<TARGET_SONAME_FILE_DIR:tgt>
+
+  Directory of with soname (``.so.3``).
+
+  Note that ``tgt`` is not added as a dependency of the target this
+  expression is evaluated on (see policy :policy:`CMP0112`).
+
+.. genex:: $<TARGET_PDB_FILE:tgt>
+
+  .. versionadded:: 3.1
+
+  Full path to the linker generated program database file (.pdb)
+  where ``tgt`` is the name of a target.
+
+  See also the :prop_tgt:`PDB_NAME` and :prop_tgt:`PDB_OUTPUT_DIRECTORY`
+  target properties and their configuration specific variants
+  :prop_tgt:`PDB_NAME_<CONFIG>` and :prop_tgt:`PDB_OUTPUT_DIRECTORY_<CONFIG>`.
+
+.. genex:: $<TARGET_PDB_FILE_BASE_NAME:tgt>
+
+  .. versionadded:: 3.15
+
+  Base name of the linker generated program database file (.pdb)
+  where ``tgt`` is the name of a target.
+
+  The base name corresponds to the target PDB file name (see
+  ``$<TARGET_PDB_FILE_NAME:tgt>``) without prefix and suffix. For example,
+  if target file name is ``base.pdb``, the base name is ``base``.
+
+  See also the :prop_tgt:`PDB_NAME` target property and its configuration
+  specific variant :prop_tgt:`PDB_NAME_<CONFIG>`.
+
+  The :prop_tgt:`<CONFIG>_POSTFIX` and :prop_tgt:`DEBUG_POSTFIX` target
+  properties can also be considered.
+
+  Note that ``tgt`` is not added as a dependency of the target this
+  expression is evaluated on.
+
+.. genex:: $<TARGET_PDB_FILE_NAME:tgt>
+
+  .. versionadded:: 3.1
+
+  Name of the linker generated program database file (.pdb).
+
+  Note that ``tgt`` is not added as a dependency of the target this
+  expression is evaluated on (see policy :policy:`CMP0112`).
+
+.. genex:: $<TARGET_PDB_FILE_DIR:tgt>
+
+  .. versionadded:: 3.1
+
+  Directory of the linker generated program database file (.pdb).
+
+  Note that ``tgt`` is not added as a dependency of the target this
+  expression is evaluated on (see policy :policy:`CMP0112`).
+
+.. genex:: $<TARGET_BUNDLE_DIR:tgt>
+
+  .. versionadded:: 3.9
+
+  Full path to the bundle directory (``my.app``, ``my.framework``, or
+  ``my.bundle``) where ``tgt`` is the name of a target.
+
+  Note that ``tgt`` is not added as a dependency of the target this
+  expression is evaluated on (see policy :policy:`CMP0112`).
+
+.. genex:: $<TARGET_BUNDLE_CONTENT_DIR:tgt>
+
+  .. versionadded:: 3.9
+
+  Full path to the bundle content directory where ``tgt`` is the name of a
+  target. For the macOS SDK it leads to ``my.app/Contents``, ``my.framework``,
+  or ``my.bundle/Contents``. For all other SDKs (e.g. iOS) it leads to
+  ``my.app``, ``my.framework``, or ``my.bundle`` due to the flat bundle
+  structure.
+
+  Note that ``tgt`` is not added as a dependency of the target this
+  expression is evaluated on (see policy :policy:`CMP0112`).
+
+.. genex:: $<TARGET_PROPERTY:tgt,prop>
+
+  Value of the property ``prop`` on the target ``tgt``.
+
+  Note that ``tgt`` is not added as a dependency of the target this
+  expression is evaluated on.
+
+.. genex:: $<TARGET_PROPERTY:prop>
+
+  Value of the property ``prop`` on the target for which the expression
+  is being evaluated. Note that for generator expressions in
+  :ref:`Target Usage Requirements` this is the consuming target rather
+  than the target specifying the requirement.
+
+.. genex:: $<TARGET_RUNTIME_DLLS:tgt>
+
+  .. versionadded:: 3.21
+
+  List of DLLs that the target depends on at runtime. This is determined by
+  the locations of all the ``SHARED`` and ``MODULE`` targets in the target's
+  transitive dependencies. Using this generator expression on targets other
+  than executables, ``SHARED`` libraries, and ``MODULE`` libraries is an error.
+  On non-DLL platforms, it evaluates to an empty string.
+
+  This generator expression can be used to copy all of the DLLs that a target
+  depends on into its output directory in a ``POST_BUILD`` custom command. For
+  example:
+
+  .. code-block:: cmake
+
+    find_package(foo CONFIG REQUIRED) # package generated by install(EXPORT)
+
+    add_executable(exe main.c)
+    target_link_libraries(exe PRIVATE foo::foo foo::bar)
+    add_custom_command(TARGET exe POST_BUILD
+      COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_RUNTIME_DLLS:exe> $<TARGET_FILE_DIR:exe>
+      COMMAND_EXPAND_LISTS
+      )
+
+  .. note::
+
+    :ref:`Imported Targets` are supported only if they know the location
+    of their ``.dll`` files.  An imported ``SHARED`` or ``MODULE`` library
+    must have :prop_tgt:`IMPORTED_LOCATION` set to its ``.dll`` file.  See
+    the :ref:`add_library imported libraries <add_library imported libraries>`
+    section for details.  Many :ref:`Find Modules` produce imported targets
+    with the ``UNKNOWN`` type and therefore will be ignored.
+
+.. genex:: $<INSTALL_PREFIX>
+
+  Content of the install prefix when the target is exported via
+  :command:`install(EXPORT)`, or when evaluated in the
+  :prop_tgt:`INSTALL_NAME_DIR` property or the ``INSTALL_NAME_DIR`` argument of
+  :command:`install(RUNTIME_DEPENDENCY_SET)`, and empty otherwise.
+
+Output-Related Expressions
+--------------------------
+
+.. genex:: $<TARGET_NAME:...>
+
+  Marks ``...`` as being the name of a target.  This is required if exporting
+  targets to multiple dependent export sets.  The ``...`` must be a literal
+  name of a target- it may not contain generator expressions.
+
+.. genex:: $<LINK_ONLY:...>
+
+  .. versionadded:: 3.1
+
+  Content of ``...`` except when evaluated in a link interface while
+  propagating :ref:`Target Usage Requirements`, in which case it is the
+  empty string.
+  Intended for use only in an :prop_tgt:`INTERFACE_LINK_LIBRARIES` target
+  property, perhaps via the :command:`target_link_libraries` command,
+  to specify private link dependencies without other usage requirements.
+
+.. genex:: $<INSTALL_INTERFACE:...>
+
+  Content of ``...`` when the property is exported using :command:`install(EXPORT)`,
+  and empty otherwise.
+
+.. genex:: $<BUILD_INTERFACE:...>
+
+  Content of ``...`` when the property is exported using :command:`export`, or
+  when the target is used by another target in the same buildsystem. Expands to
+  the empty string otherwise.
+
+.. genex:: $<MAKE_C_IDENTIFIER:...>
+
+  Content of ``...`` converted to a C identifier.  The conversion follows the
+  same behavior as :command:`string(MAKE_C_IDENTIFIER)`.
+
+.. genex:: $<TARGET_OBJECTS:objLib>
+
+  .. versionadded:: 3.1
+
+  List of objects resulting from build of ``objLib``.
+
+.. genex:: $<SHELL_PATH:...>
+
+  .. versionadded:: 3.4
+
+  Content of ``...`` converted to shell path style. For example, slashes are
+  converted to backslashes in Windows shells and drive letters are converted
+  to posix paths in MSYS shells. The ``...`` must be an absolute path.
+
+  .. versionadded:: 3.14
+    The ``...`` may be a :ref:`semicolon-separated list <CMake Language Lists>`
+    of paths, in which case each path is converted individually and a result
+    list is generated using the shell path separator (``:`` on POSIX and
+    ``;`` on Windows).  Be sure to enclose the argument containing this genex
+    in double quotes in CMake source code so that ``;`` does not split arguments.
+
+.. genex:: $<OUTPUT_CONFIG:...>
+
+  .. versionadded:: 3.20
+
+  Only valid in :command:`add_custom_command` and :command:`add_custom_target`
+  as the outer-most generator expression in an argument.
+  With the :generator:`Ninja Multi-Config` generator, generator expressions
+  in ``...`` are evaluated using the custom command's "output config".
+  With other generators, the content of ``...`` is evaluated normally.
+
+.. genex:: $<COMMAND_CONFIG:...>
+
+  .. versionadded:: 3.20
+
+  Only valid in :command:`add_custom_command` and :command:`add_custom_target`
+  as the outer-most generator expression in an argument.
+  With the :generator:`Ninja Multi-Config` generator, generator expressions
+  in ``...`` are evaluated using the custom command's "command config".
+  With other generators, the content of ``...`` is evaluated normally.
+
+Debugging
+=========
+
+Since generator expressions are evaluated during generation of the buildsystem,
+and not during processing of ``CMakeLists.txt`` files, it is not possible to
+inspect their result with the :command:`message()` command.
+
+One possible way to generate debug messages is to add a custom target,
+
+.. code-block:: cmake
+
+  add_custom_target(genexdebug COMMAND ${CMAKE_COMMAND} -E echo "$<...>")
+
+The shell command ``make genexdebug`` (invoked after execution of ``cmake``)
+would then print the result of ``$<...>``.
+
+Another way is to write debug messages to a file:
+
+.. code-block:: cmake
+
+  file(GENERATE OUTPUT filename CONTENT "$<...>")
diff --git a/share/cmake-3.22/Help/manual/cmake-generators.7.rst b/share/cmake-3.22/Help/manual/cmake-generators.7.rst
new file mode 100644
index 0000000..663b18d
--- /dev/null
+++ b/share/cmake-3.22/Help/manual/cmake-generators.7.rst
@@ -0,0 +1,121 @@
+.. cmake-manual-description: CMake Generators Reference
+
+cmake-generators(7)
+*******************
+
+.. only:: html
+
+   .. contents::
+
+Introduction
+============
+
+A *CMake Generator* is responsible for writing the input files for
+a native build system.  Exactly one of the `CMake Generators`_ must be
+selected for a build tree to determine what native build system is to
+be used.  Optionally one of the `Extra Generators`_ may be selected
+as a variant of some of the `Command-Line Build Tool Generators`_ to
+produce project files for an auxiliary IDE.
+
+CMake Generators are platform-specific so each may be available only
+on certain platforms.  The :manual:`cmake(1)` command-line tool ``--help``
+output lists available generators on the current platform.  Use its ``-G``
+option to specify the generator for a new build tree.
+The :manual:`cmake-gui(1)` offers interactive selection of a generator
+when creating a new build tree.
+
+CMake Generators
+================
+
+.. _`Command-Line Build Tool Generators`:
+
+Command-Line Build Tool Generators
+----------------------------------
+
+These generators support command-line build tools.  In order to use them,
+one must launch CMake from a command-line prompt whose environment is
+already configured for the chosen compiler and build tool.
+
+.. _`Makefile Generators`:
+
+Makefile Generators
+^^^^^^^^^^^^^^^^^^^
+
+.. toctree::
+   :maxdepth: 1
+
+   /generator/Borland Makefiles
+   /generator/MSYS Makefiles
+   /generator/MinGW Makefiles
+   /generator/NMake Makefiles
+   /generator/NMake Makefiles JOM
+   /generator/Unix Makefiles
+   /generator/Watcom WMake
+
+.. _`Ninja Generators`:
+
+Ninja Generators
+^^^^^^^^^^^^^^^^
+
+.. toctree::
+   :maxdepth: 1
+
+   /generator/Ninja
+   /generator/Ninja Multi-Config
+
+.. _`IDE Build Tool Generators`:
+
+IDE Build Tool Generators
+-------------------------
+
+These generators support Integrated Development Environment (IDE)
+project files.  Since the IDEs configure their own environment
+one may launch CMake from any environment.
+
+.. _`Visual Studio Generators`:
+
+Visual Studio Generators
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. toctree::
+   :maxdepth: 1
+
+   /generator/Visual Studio 6
+   /generator/Visual Studio 7
+   /generator/Visual Studio 7 .NET 2003
+   /generator/Visual Studio 8 2005
+   /generator/Visual Studio 9 2008
+   /generator/Visual Studio 10 2010
+   /generator/Visual Studio 11 2012
+   /generator/Visual Studio 12 2013
+   /generator/Visual Studio 14 2015
+   /generator/Visual Studio 15 2017
+   /generator/Visual Studio 16 2019
+   /generator/Visual Studio 17 2022
+
+Other Generators
+^^^^^^^^^^^^^^^^
+
+.. toctree::
+   :maxdepth: 1
+
+   /generator/Green Hills MULTI
+   /generator/Xcode
+
+Extra Generators
+================
+
+Some of the `CMake Generators`_ listed in the :manual:`cmake(1)`
+command-line tool ``--help`` output may have variants that specify
+an extra generator for an auxiliary IDE tool.  Such generator
+names have the form ``<extra-generator> - <main-generator>``.
+The following extra generators are known to CMake.
+
+.. toctree::
+   :maxdepth: 1
+
+   /generator/CodeBlocks
+   /generator/CodeLite
+   /generator/Eclipse CDT4
+   /generator/Kate
+   /generator/Sublime Text 2
diff --git a/share/cmake-3.22/Help/manual/cmake-gui.1.rst b/share/cmake-3.22/Help/manual/cmake-gui.1.rst
new file mode 100644
index 0000000..281986f
--- /dev/null
+++ b/share/cmake-3.22/Help/manual/cmake-gui.1.rst
@@ -0,0 +1,52 @@
+.. cmake-manual-description: CMake GUI Command-Line Reference
+
+cmake-gui(1)
+************
+
+Synopsis
+========
+
+.. parsed-literal::
+
+ cmake-gui [<options>]
+ cmake-gui [<options>] {<path-to-source> | <path-to-existing-build>}
+ cmake-gui [<options>] -S <path-to-source> -B <path-to-build>
+ cmake-gui [<options>] --browse-manual
+
+Description
+===========
+
+The **cmake-gui** executable is the CMake GUI.  Project configuration
+settings may be specified interactively.  Brief instructions are
+provided at the bottom of the window when the program is running.
+
+CMake is a cross-platform build system generator.  Projects specify
+their build process with platform-independent CMake listfiles included
+in each directory of a source tree with the name ``CMakeLists.txt``.
+Users build a project by using CMake to generate a build system for a
+native tool on their platform.
+
+Options
+=======
+
+``-S <path-to-source>``
+ Path to root directory of the CMake project to build.
+
+``-B <path-to-build>``
+ Path to directory which CMake will use as the root of build directory.
+
+ If the directory doesn't already exist CMake will make it.
+
+``--preset=<preset-name>``
+ Name of the preset to use from the project's
+ :manual:`presets <cmake-presets(7)>` files, if it has them.
+
+``--browse-manual``
+ Open the CMake reference manual in a browser and immediately exit.
+
+.. include:: OPTIONS_HELP.txt
+
+See Also
+========
+
+.. include:: LINKS.txt
diff --git a/share/cmake-3.18/Help/manual/cmake-language.7.rst b/share/cmake-3.22/Help/manual/cmake-language.7.rst
similarity index 100%
rename from share/cmake-3.18/Help/manual/cmake-language.7.rst
rename to share/cmake-3.22/Help/manual/cmake-language.7.rst
diff --git a/share/cmake-3.22/Help/manual/cmake-modules.7.rst b/share/cmake-3.22/Help/manual/cmake-modules.7.rst
new file mode 100644
index 0000000..141eeaa
--- /dev/null
+++ b/share/cmake-3.22/Help/manual/cmake-modules.7.rst
@@ -0,0 +1,323 @@
+.. cmake-manual-description: CMake Modules Reference
+
+cmake-modules(7)
+****************
+
+The modules listed here are part of the CMake distribution.
+Projects may provide further modules; their location(s)
+can be specified in the :variable:`CMAKE_MODULE_PATH` variable.
+
+Utility Modules
+^^^^^^^^^^^^^^^
+
+These modules are loaded using the :command:`include` command.
+
+.. toctree::
+   :maxdepth: 1
+
+   /module/AndroidTestUtilities
+   /module/BundleUtilities
+   /module/CheckCCompilerFlag
+   /module/CheckCompilerFlag
+   /module/CheckCSourceCompiles
+   /module/CheckCSourceRuns
+   /module/CheckCXXCompilerFlag
+   /module/CheckCXXSourceCompiles
+   /module/CheckCXXSourceRuns
+   /module/CheckCXXSymbolExists
+   /module/CheckFortranCompilerFlag
+   /module/CheckFortranFunctionExists
+   /module/CheckFortranSourceCompiles
+   /module/CheckFortranSourceRuns
+   /module/CheckFunctionExists
+   /module/CheckIncludeFileCXX
+   /module/CheckIncludeFile
+   /module/CheckIncludeFiles
+   /module/CheckIPOSupported
+   /module/CheckLanguage
+   /module/CheckLibraryExists
+   /module/CheckLinkerFlag
+   /module/CheckOBJCCompilerFlag
+   /module/CheckOBJCSourceCompiles
+   /module/CheckOBJCSourceRuns
+   /module/CheckOBJCXXCompilerFlag
+   /module/CheckOBJCXXSourceCompiles
+   /module/CheckOBJCXXSourceRuns
+   /module/CheckPIESupported
+   /module/CheckPrototypeDefinition
+   /module/CheckSourceCompiles
+   /module/CheckSourceRuns
+   /module/CheckStructHasMember
+   /module/CheckSymbolExists
+   /module/CheckTypeSize
+   /module/CheckVariableExists
+   /module/CMakeAddFortranSubdirectory
+   /module/CMakeBackwardCompatibilityCXX
+   /module/CMakeDependentOption
+   /module/CMakeFindDependencyMacro
+   /module/CMakeFindFrameworks
+   /module/CMakeFindPackageMode
+   /module/CMakeGraphVizOptions
+   /module/CMakePackageConfigHelpers
+   /module/CMakePrintHelpers
+   /module/CMakePrintSystemInformation
+   /module/CMakePushCheckState
+   /module/CMakeVerifyManifest
+   /module/CPack
+   /module/CPackComponent
+   /module/CPackIFW
+   /module/CPackIFWConfigureFile
+   /module/CSharpUtilities
+   /module/CTest
+   /module/CTestCoverageCollectGCOV
+   /module/CTestScriptMode
+   /module/CTestUseLaunchers
+   /module/Dart
+   /module/DeployQt4
+   /module/ExternalData
+   /module/ExternalProject
+   /module/FeatureSummary
+   /module/FetchContent
+   /module/FindPackageHandleStandardArgs
+   /module/FindPackageMessage
+   /module/FortranCInterface
+   /module/GenerateExportHeader
+   /module/GetPrerequisites
+   /module/GNUInstallDirs
+   /module/GoogleTest
+   /module/InstallRequiredSystemLibraries
+   /module/ProcessorCount
+   /module/SelectLibraryConfigurations
+   /module/SquishTestScript
+   /module/TestBigEndian
+   /module/TestForANSIForScope
+   /module/TestForANSIStreamHeaders
+   /module/TestForSSTREAM
+   /module/TestForSTDNamespace
+   /module/UseEcos
+   /module/UseJava
+   /module/UseSWIG
+   /module/UsewxWidgets
+
+Find Modules
+^^^^^^^^^^^^
+
+These modules search for third-party software.
+They are normally called through the :command:`find_package` command.
+
+.. toctree::
+   :maxdepth: 1
+
+   /module/FindALSA
+   /module/FindArmadillo
+   /module/FindASPELL
+   /module/FindAVIFile
+   /module/FindBacktrace
+   /module/FindBISON
+   /module/FindBLAS
+   /module/FindBoost
+   /module/FindBullet
+   /module/FindBZip2
+   /module/FindCABLE
+   /module/FindCoin3D
+   /module/FindCUDAToolkit
+   /module/FindCups
+   /module/FindCURL
+   /module/FindCurses
+   /module/FindCVS
+   /module/FindCxxTest
+   /module/FindCygwin
+   /module/FindDart
+   /module/FindDCMTK
+   /module/FindDevIL
+   /module/FindDoxygen
+   /module/FindEnvModules
+   /module/FindEXPAT
+   /module/FindFLEX
+   /module/FindFLTK
+   /module/FindFLTK2
+   /module/FindFontconfig
+   /module/FindFreetype
+   /module/FindGCCXML
+   /module/FindGDAL
+   /module/FindGettext
+   /module/FindGIF
+   /module/FindGit
+   /module/FindGLEW
+   /module/FindGLUT
+   /module/FindGnuplot
+   /module/FindGnuTLS
+   /module/FindGSL
+   /module/FindGTest
+   /module/FindGTK
+   /module/FindGTK2
+   /module/FindHDF5
+   /module/FindHg
+   /module/FindHSPELL
+   /module/FindHTMLHelp
+   /module/FindIce
+   /module/FindIconv
+   /module/FindIcotool
+   /module/FindICU
+   /module/FindImageMagick
+   /module/FindIntl
+   /module/FindITK
+   /module/FindJasper
+   /module/FindJava
+   /module/FindJNI
+   /module/FindJPEG
+   /module/FindKDE3
+   /module/FindKDE4
+   /module/FindLAPACK
+   /module/FindLATEX
+   /module/FindLibArchive
+   /module/FindLibinput
+   /module/FindLibLZMA
+   /module/FindLibXml2
+   /module/FindLibXslt
+   /module/FindLTTngUST
+   /module/FindLua
+   /module/FindLua50
+   /module/FindLua51
+   /module/FindMatlab
+   /module/FindMFC
+   /module/FindMotif
+   /module/FindMPEG
+   /module/FindMPEG2
+   /module/FindMPI
+   /module/FindMsys
+   /module/FindODBC
+   /module/FindOpenACC
+   /module/FindOpenAL
+   /module/FindOpenCL
+   /module/FindOpenGL
+   /module/FindOpenMP
+   /module/FindOpenSceneGraph
+   /module/FindOpenSSL
+   /module/FindOpenThreads
+   /module/Findosg
+   /module/Findosg_functions
+   /module/FindosgAnimation
+   /module/FindosgDB
+   /module/FindosgFX
+   /module/FindosgGA
+   /module/FindosgIntrospection
+   /module/FindosgManipulator
+   /module/FindosgParticle
+   /module/FindosgPresentation
+   /module/FindosgProducer
+   /module/FindosgQt
+   /module/FindosgShadow
+   /module/FindosgSim
+   /module/FindosgTerrain
+   /module/FindosgText
+   /module/FindosgUtil
+   /module/FindosgViewer
+   /module/FindosgVolume
+   /module/FindosgWidget
+   /module/FindPatch
+   /module/FindPerl
+   /module/FindPerlLibs
+   /module/FindPHP4
+   /module/FindPhysFS
+   /module/FindPike
+   /module/FindPkgConfig
+   /module/FindPNG
+   /module/FindPostgreSQL
+   /module/FindProducer
+   /module/FindProtobuf
+   /module/FindPython
+   /module/FindPython2
+   /module/FindPython3
+   /module/FindQt3
+   /module/FindQt4
+   /module/FindQuickTime
+   /module/FindRTI
+   /module/FindRuby
+   /module/FindSDL
+   /module/FindSDL_image
+   /module/FindSDL_mixer
+   /module/FindSDL_net
+   /module/FindSDL_sound
+   /module/FindSDL_ttf
+   /module/FindSelfPackers
+   /module/FindSquish
+   /module/FindSQLite3
+   /module/FindSubversion
+   /module/FindSWIG
+   /module/FindTCL
+   /module/FindTclsh
+   /module/FindTclStub
+   /module/FindThreads
+   /module/FindTIFF
+   /module/FindUnixCommands
+   /module/FindVTK
+   /module/FindVulkan
+   /module/FindWget
+   /module/FindWish
+   /module/FindwxWidgets
+   /module/FindX11
+   /module/FindXalanC
+   /module/FindXCTest
+   /module/FindXercesC
+   /module/FindXMLRPC
+   /module/FindZLIB
+
+Deprecated Modules
+^^^^^^^^^^^^^^^^^^^
+
+Deprecated Utility Modules
+==========================
+
+.. toctree::
+   :maxdepth: 1
+
+   /module/AddFileDependencies
+   /module/CMakeDetermineVSServicePack
+   /module/CMakeExpandImportedTargets
+   /module/CMakeForceCompiler
+   /module/CMakeParseArguments
+   /module/Documentation
+   /module/MacroAddFileDependencies
+   /module/TestCXXAcceptsFlag
+   /module/UseJavaClassFilelist
+   /module/UseJavaSymlinks
+   /module/UsePkgConfig
+   /module/Use_wxWindows
+   /module/WriteBasicConfigVersionFile
+   /module/WriteCompilerDetectionHeader
+
+Deprecated Find Modules
+=======================
+
+.. toctree::
+   :maxdepth: 1
+
+   /module/FindCUDA
+   /module/FindPythonInterp
+   /module/FindPythonLibs
+   /module/FindQt
+   /module/FindwxWindows
+
+Legacy CPack Modules
+====================
+
+These modules used to be mistakenly exposed to the user, and have been moved
+out of user visibility. They are for CPack internal use, and should never be
+used directly.
+
+.. toctree::
+   :maxdepth: 1
+
+   /module/CPackArchive
+   /module/CPackBundle
+   /module/CPackCygwin
+   /module/CPackDeb
+   /module/CPackDMG
+   /module/CPackFreeBSD
+   /module/CPackNSIS
+   /module/CPackNuGet
+   /module/CPackPackageMaker
+   /module/CPackProductBuild
+   /module/CPackRPM
+   /module/CPackWIX
diff --git a/share/cmake-3.22/Help/manual/cmake-packages.7.rst b/share/cmake-3.22/Help/manual/cmake-packages.7.rst
new file mode 100644
index 0000000..5c109ff
--- /dev/null
+++ b/share/cmake-3.22/Help/manual/cmake-packages.7.rst
@@ -0,0 +1,721 @@
+.. cmake-manual-description: CMake Packages Reference
+
+cmake-packages(7)
+*****************
+
+.. only:: html
+
+   .. contents::
+
+Introduction
+============
+
+Packages provide dependency information to CMake based buildsystems.  Packages
+are found with the :command:`find_package` command.  The result of
+using :command:`find_package` is either a set of :prop_tgt:`IMPORTED` targets, or
+a set of variables corresponding to build-relevant information.
+
+Using Packages
+==============
+
+CMake provides direct support for two forms of packages,
+`Config-file Packages`_ and `Find-module Packages`_.
+Indirect support for ``pkg-config`` packages is also provided via
+the :module:`FindPkgConfig` module.  In all cases, the basic form
+of :command:`find_package` calls is the same:
+
+.. code-block:: cmake
+
+  find_package(Qt4 4.7.0 REQUIRED) # CMake provides a Qt4 find-module
+  find_package(Qt5Core 5.1.0 REQUIRED) # Qt provides a Qt5 package config file.
+  find_package(LibXml2 REQUIRED) # Use pkg-config via the LibXml2 find-module
+
+In cases where it is known that a package configuration file is provided by
+upstream, and only that should be used, the ``CONFIG`` keyword may be passed
+to :command:`find_package`:
+
+.. code-block:: cmake
+
+  find_package(Qt5Core 5.1.0 CONFIG REQUIRED)
+  find_package(Qt5Gui 5.1.0 CONFIG)
+
+Similarly, the ``MODULE`` keyword says to use only a find-module:
+
+.. code-block:: cmake
+
+  find_package(Qt4 4.7.0 MODULE REQUIRED)
+
+Specifying the type of package explicitly improves the error message shown to
+the user if it is not found.
+
+Both types of packages also support specifying components of a package,
+either after the ``REQUIRED`` keyword:
+
+.. code-block:: cmake
+
+  find_package(Qt5 5.1.0 CONFIG REQUIRED Widgets Xml Sql)
+
+or as a separate ``COMPONENTS`` list:
+
+.. code-block:: cmake
+
+  find_package(Qt5 5.1.0 COMPONENTS Widgets Xml Sql)
+
+or as a separate ``OPTIONAL_COMPONENTS`` list:
+
+.. code-block:: cmake
+
+  find_package(Qt5 5.1.0 COMPONENTS Widgets
+                         OPTIONAL_COMPONENTS Xml Sql
+  )
+
+Handling of ``COMPONENTS`` and ``OPTIONAL_COMPONENTS`` is defined by the
+package.
+
+By setting the :variable:`CMAKE_DISABLE_FIND_PACKAGE_<PackageName>` variable to
+``TRUE``, the ``<PackageName>`` package will not be searched, and will always
+be ``NOTFOUND``. Likewise, setting the
+:variable:`CMAKE_REQUIRE_FIND_PACKAGE_<PackageName>` to ``TRUE`` will make the
+package REQUIRED.
+
+.. _`Config File Packages`:
+
+Config-file Packages
+--------------------
+
+A config-file package is a set of files provided by upstreams for downstreams
+to use. CMake searches in a number of locations for package configuration files, as
+described in the :command:`find_package` documentation.  The most simple way for
+a CMake user to tell :manual:`cmake(1)` to search in a non-standard prefix for
+a package is to set the ``CMAKE_PREFIX_PATH`` cache variable.
+
+Config-file packages are provided by upstream vendors as part of development
+packages, that is, they belong with the header files and any other files
+provided to assist downstreams in using the package.
+
+A set of variables which provide package status information are also set
+automatically when using a config-file package.  The ``<PackageName>_FOUND``
+variable is set to true or false, depending on whether the package was
+found.  The ``<PackageName>_DIR`` cache variable is set to the location of the
+package configuration file.
+
+Find-module Packages
+--------------------
+
+A find module is a file with a set of rules for finding the required pieces of
+a dependency, primarily header files and libraries.  Typically, a find module
+is needed when the upstream is not built with CMake, or is not CMake-aware
+enough to otherwise provide a package configuration file.  Unlike a package configuration
+file, it is not shipped with upstream, but is used by downstream to find the
+files by guessing locations of files with platform-specific hints.
+
+Unlike the case of an upstream-provided package configuration file, no single point
+of reference identifies the package as being found, so the ``<PackageName>_FOUND``
+variable is not automatically set by the :command:`find_package` command.  It
+can still be expected to be set by convention however and should be set by
+the author of the Find-module.  Similarly there is no ``<PackageName>_DIR`` variable,
+but each of the artifacts such as library locations and header file locations
+provide a separate cache variable.
+
+See the :manual:`cmake-developer(7)` manual for more information about creating
+Find-module files.
+
+Package Layout
+==============
+
+A config-file package consists of a `Package Configuration File`_ and
+optionally a `Package Version File`_ provided with the project distribution.
+
+Package Configuration File
+--------------------------
+
+Consider a project ``Foo`` that installs the following files::
+
+  <prefix>/include/foo-1.2/foo.h
+  <prefix>/lib/foo-1.2/libfoo.a
+
+It may also provide a CMake package configuration file::
+
+  <prefix>/lib/cmake/foo-1.2/FooConfig.cmake
+
+with content defining :prop_tgt:`IMPORTED` targets, or defining variables, such
+as:
+
+.. code-block:: cmake
+
+  # ...
+  # (compute PREFIX relative to file location)
+  # ...
+  set(Foo_INCLUDE_DIRS ${PREFIX}/include/foo-1.2)
+  set(Foo_LIBRARIES ${PREFIX}/lib/foo-1.2/libfoo.a)
+
+If another project wishes to use ``Foo`` it need only to locate the ``FooConfig.cmake``
+file and load it to get all the information it needs about package content
+locations.  Since the package configuration file is provided by the package
+installation it already knows all the file locations.
+
+The :command:`find_package` command may be used to search for the package
+configuration file.  This command constructs a set of installation prefixes
+and searches under each prefix in several locations.  Given the name ``Foo``,
+it looks for a file called ``FooConfig.cmake`` or ``foo-config.cmake``.
+The full set of locations is specified in the :command:`find_package` command
+documentation. One place it looks is::
+
+ <prefix>/lib/cmake/Foo*/
+
+where ``Foo*`` is a case-insensitive globbing expression.  In our example the
+globbing expression will match ``<prefix>/lib/cmake/foo-1.2`` and the package
+configuration file will be found.
+
+Once found, a package configuration file is immediately loaded.  It, together
+with a package version file, contains all the information the project needs to
+use the package.
+
+Package Version File
+--------------------
+
+When the :command:`find_package` command finds a candidate package configuration
+file it looks next to it for a version file. The version file is loaded to test
+whether the package version is an acceptable match for the version requested.
+If the version file claims compatibility the configuration file is accepted.
+Otherwise it is ignored.
+
+The name of the package version file must match that of the package configuration
+file but has either ``-version`` or ``Version`` appended to the name before
+the ``.cmake`` extension.  For example, the files::
+
+ <prefix>/lib/cmake/foo-1.3/foo-config.cmake
+ <prefix>/lib/cmake/foo-1.3/foo-config-version.cmake
+
+and::
+
+ <prefix>/lib/cmake/bar-4.2/BarConfig.cmake
+ <prefix>/lib/cmake/bar-4.2/BarConfigVersion.cmake
+
+are each pairs of package configuration files and corresponding package version
+files.
+
+When the :command:`find_package` command loads a version file it first sets the
+following variables:
+
+``PACKAGE_FIND_NAME``
+ The ``<PackageName>``
+
+``PACKAGE_FIND_VERSION``
+ Full requested version string
+
+``PACKAGE_FIND_VERSION_MAJOR``
+ Major version if requested, else 0
+
+``PACKAGE_FIND_VERSION_MINOR``
+ Minor version if requested, else 0
+
+``PACKAGE_FIND_VERSION_PATCH``
+ Patch version if requested, else 0
+
+``PACKAGE_FIND_VERSION_TWEAK``
+ Tweak version if requested, else 0
+
+``PACKAGE_FIND_VERSION_COUNT``
+ Number of version components, 0 to 4
+
+The version file must use these variables to check whether it is compatible or
+an exact match for the requested version and set the following variables with
+results:
+
+``PACKAGE_VERSION``
+ Full provided version string
+
+``PACKAGE_VERSION_EXACT``
+ True if version is exact match
+
+``PACKAGE_VERSION_COMPATIBLE``
+ True if version is compatible
+
+``PACKAGE_VERSION_UNSUITABLE``
+ True if unsuitable as any version
+
+Version files are loaded in a nested scope so they are free to set any variables
+they wish as part of their computation. The find_package command wipes out the
+scope when the version file has completed and it has checked the output
+variables. When the version file claims to be an acceptable match for the
+requested version the find_package command sets the following variables for
+use by the project:
+
+``<PackageName>_VERSION``
+ Full provided version string
+
+``<PackageName>_VERSION_MAJOR``
+ Major version if provided, else 0
+
+``<PackageName>_VERSION_MINOR``
+ Minor version if provided, else 0
+
+``<PackageName>_VERSION_PATCH``
+ Patch version if provided, else 0
+
+``<PackageName>_VERSION_TWEAK``
+ Tweak version if provided, else 0
+
+``<PackageName>_VERSION_COUNT``
+ Number of version components, 0 to 4
+
+The variables report the version of the package that was actually found.
+The ``<PackageName>`` part of their name matches the argument given to the
+:command:`find_package` command.
+
+.. _`Creating Packages`:
+
+Creating Packages
+=================
+
+Usually, the upstream depends on CMake itself and can use some CMake facilities
+for creating the package files. Consider an upstream which provides a single
+shared library:
+
+.. code-block:: cmake
+
+  project(UpstreamLib)
+
+  set(CMAKE_INCLUDE_CURRENT_DIR ON)
+  set(CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON)
+
+  set(Upstream_VERSION 3.4.1)
+
+  include(GenerateExportHeader)
+
+  add_library(ClimbingStats SHARED climbingstats.cpp)
+  generate_export_header(ClimbingStats)
+  set_property(TARGET ClimbingStats PROPERTY VERSION ${Upstream_VERSION})
+  set_property(TARGET ClimbingStats PROPERTY SOVERSION 3)
+  set_property(TARGET ClimbingStats PROPERTY
+    INTERFACE_ClimbingStats_MAJOR_VERSION 3)
+  set_property(TARGET ClimbingStats APPEND PROPERTY
+    COMPATIBLE_INTERFACE_STRING ClimbingStats_MAJOR_VERSION
+  )
+
+  install(TARGETS ClimbingStats EXPORT ClimbingStatsTargets
+    LIBRARY DESTINATION lib
+    ARCHIVE DESTINATION lib
+    RUNTIME DESTINATION bin
+    INCLUDES DESTINATION include
+  )
+  install(
+    FILES
+      climbingstats.h
+      "${CMAKE_CURRENT_BINARY_DIR}/climbingstats_export.h"
+    DESTINATION
+      include
+    COMPONENT
+      Devel
+  )
+
+  include(CMakePackageConfigHelpers)
+  write_basic_package_version_file(
+    "${CMAKE_CURRENT_BINARY_DIR}/ClimbingStats/ClimbingStatsConfigVersion.cmake"
+    VERSION ${Upstream_VERSION}
+    COMPATIBILITY AnyNewerVersion
+  )
+
+  export(EXPORT ClimbingStatsTargets
+    FILE "${CMAKE_CURRENT_BINARY_DIR}/ClimbingStats/ClimbingStatsTargets.cmake"
+    NAMESPACE Upstream::
+  )
+  configure_file(cmake/ClimbingStatsConfig.cmake
+    "${CMAKE_CURRENT_BINARY_DIR}/ClimbingStats/ClimbingStatsConfig.cmake"
+    COPYONLY
+  )
+
+  set(ConfigPackageLocation lib/cmake/ClimbingStats)
+  install(EXPORT ClimbingStatsTargets
+    FILE
+      ClimbingStatsTargets.cmake
+    NAMESPACE
+      Upstream::
+    DESTINATION
+      ${ConfigPackageLocation}
+  )
+  install(
+    FILES
+      cmake/ClimbingStatsConfig.cmake
+      "${CMAKE_CURRENT_BINARY_DIR}/ClimbingStats/ClimbingStatsConfigVersion.cmake"
+    DESTINATION
+      ${ConfigPackageLocation}
+    COMPONENT
+      Devel
+  )
+
+The :module:`CMakePackageConfigHelpers` module provides a macro for creating
+a simple ``ConfigVersion.cmake`` file.  This file sets the version of the
+package.  It is read by CMake when :command:`find_package` is called to
+determine the compatibility with the requested version, and to set some
+version-specific variables ``<PackageName>_VERSION``, ``<PackageName>_VERSION_MAJOR``,
+``<PackageName>_VERSION_MINOR`` etc.  The :command:`install(EXPORT)` command is
+used to export the targets in the ``ClimbingStatsTargets`` export-set, defined
+previously by the :command:`install(TARGETS)` command. This command generates
+the ``ClimbingStatsTargets.cmake`` file to contain :prop_tgt:`IMPORTED`
+targets, suitable for use by downstreams and arranges to install it to
+``lib/cmake/ClimbingStats``.  The generated ``ClimbingStatsConfigVersion.cmake``
+and a ``cmake/ClimbingStatsConfig.cmake`` are installed to the same location,
+completing the package.
+
+The generated :prop_tgt:`IMPORTED` targets have appropriate properties set
+to define their :ref:`usage requirements <Target Usage Requirements>`, such as
+:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES`,
+:prop_tgt:`INTERFACE_COMPILE_DEFINITIONS` and other relevant built-in
+``INTERFACE_`` properties.  The ``INTERFACE`` variant of user-defined
+properties listed in :prop_tgt:`COMPATIBLE_INTERFACE_STRING` and
+other :ref:`Compatible Interface Properties` are also propagated to the
+generated :prop_tgt:`IMPORTED` targets.  In the above case,
+``ClimbingStats_MAJOR_VERSION`` is defined as a string which must be
+compatible among the dependencies of any depender.  By setting this custom
+defined user property in this version and in the next version of
+``ClimbingStats``, :manual:`cmake(1)` will issue a diagnostic if there is an
+attempt to use version 3 together with version 4.  Packages can choose to
+employ such a pattern if different major versions of the package are designed
+to be incompatible.
+
+A ``NAMESPACE`` with double-colons is specified when exporting the targets
+for installation.  This convention of double-colons gives CMake a hint that
+the name is an :prop_tgt:`IMPORTED` target when it is used by downstreams
+with the :command:`target_link_libraries` command.  This way, CMake can
+issue a diagnostic if the package providing it has not yet been found.
+
+In this case, when using :command:`install(TARGETS)` the ``INCLUDES DESTINATION``
+was specified.  This causes the ``IMPORTED`` targets to have their
+:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` populated with the ``include``
+directory in the :variable:`CMAKE_INSTALL_PREFIX`.  When the ``IMPORTED``
+target is used by downstream, it automatically consumes the entries from
+that property.
+
+Creating a Package Configuration File
+-------------------------------------
+
+In this case, the ``ClimbingStatsConfig.cmake`` file could be as simple as:
+
+.. code-block:: cmake
+
+  include("${CMAKE_CURRENT_LIST_DIR}/ClimbingStatsTargets.cmake")
+
+As this allows downstreams to use the ``IMPORTED`` targets.  If any macros
+should be provided by the ``ClimbingStats`` package, they should
+be in a separate file which is installed to the same location as the
+``ClimbingStatsConfig.cmake`` file, and included from there.
+
+This can also be extended to cover dependencies:
+
+.. code-block:: cmake
+
+  # ...
+  add_library(ClimbingStats SHARED climbingstats.cpp)
+  generate_export_header(ClimbingStats)
+
+  find_package(Stats 2.6.4 REQUIRED)
+  target_link_libraries(ClimbingStats PUBLIC Stats::Types)
+
+As the ``Stats::Types`` target is a ``PUBLIC`` dependency of ``ClimbingStats``,
+downstreams must also find the ``Stats`` package and link to the ``Stats::Types``
+library.  The ``Stats`` package should be found in the ``ClimbingStatsConfig.cmake``
+file to ensure this.  The ``find_dependency`` macro from the
+:module:`CMakeFindDependencyMacro` helps with this by propagating
+whether the package is ``REQUIRED``, or ``QUIET`` etc.  All ``REQUIRED``
+dependencies of a package should be found in the ``Config.cmake`` file:
+
+.. code-block:: cmake
+
+  include(CMakeFindDependencyMacro)
+  find_dependency(Stats 2.6.4)
+
+  include("${CMAKE_CURRENT_LIST_DIR}/ClimbingStatsTargets.cmake")
+  include("${CMAKE_CURRENT_LIST_DIR}/ClimbingStatsMacros.cmake")
+
+The ``find_dependency`` macro also sets ``ClimbingStats_FOUND`` to ``False`` if
+the dependency is not found, along with a diagnostic that the ``ClimbingStats``
+package can not be used without the ``Stats`` package.
+
+If ``COMPONENTS`` are specified when the downstream uses :command:`find_package`,
+they are listed in the ``<PackageName>_FIND_COMPONENTS`` variable. If a particular
+component is non-optional, then the ``<PackageName>_FIND_REQUIRED_<comp>`` will
+be true. This can be tested with logic in the package configuration file:
+
+.. code-block:: cmake
+
+  include(CMakeFindDependencyMacro)
+  find_dependency(Stats 2.6.4)
+
+  include("${CMAKE_CURRENT_LIST_DIR}/ClimbingStatsTargets.cmake")
+  include("${CMAKE_CURRENT_LIST_DIR}/ClimbingStatsMacros.cmake")
+
+  set(_supported_components Plot Table)
+
+  foreach(_comp ${ClimbingStats_FIND_COMPONENTS})
+    if (NOT ";${_supported_components};" MATCHES ";${_comp};")
+      set(ClimbingStats_FOUND False)
+      set(ClimbingStats_NOT_FOUND_MESSAGE "Unsupported component: ${_comp}")
+    endif()
+    include("${CMAKE_CURRENT_LIST_DIR}/ClimbingStats${_comp}Targets.cmake")
+  endforeach()
+
+Here, the ``ClimbingStats_NOT_FOUND_MESSAGE`` is set to a diagnosis that the package
+could not be found because an invalid component was specified.  This message
+variable can be set for any case where the ``_FOUND`` variable is set to ``False``,
+and will be displayed to the user.
+
+Creating a Package Configuration File for the Build Tree
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The :command:`export(EXPORT)` command creates an :prop_tgt:`IMPORTED` targets
+definition file which is specific to the build-tree, and is not relocatable.
+This can similarly be used with a suitable package configuration file and
+package version file to define a package for the build tree which may be used
+without installation.  Consumers of the build tree can simply ensure that the
+:variable:`CMAKE_PREFIX_PATH` contains the build directory, or set the
+``ClimbingStats_DIR`` to ``<build_dir>/ClimbingStats`` in the cache.
+
+.. _`Creating Relocatable Packages`:
+
+Creating Relocatable Packages
+-----------------------------
+
+A relocatable package must not reference absolute paths of files on
+the machine where the package is built that will not exist on the
+machines where the package may be installed.
+
+Packages created by :command:`install(EXPORT)` are designed to be relocatable,
+using paths relative to the location of the package itself.  When defining
+the interface of a target for ``EXPORT``, keep in mind that the include
+directories should be specified as relative paths which are relative to the
+:variable:`CMAKE_INSTALL_PREFIX`:
+
+.. code-block:: cmake
+
+  target_include_directories(tgt INTERFACE
+    # Wrong, not relocatable:
+    $<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/include/TgtName>
+  )
+
+  target_include_directories(tgt INTERFACE
+    # Ok, relocatable:
+    $<INSTALL_INTERFACE:include/TgtName>
+  )
+
+The ``$<INSTALL_PREFIX>``
+:manual:`generator expression <cmake-generator-expressions(7)>` may be used as
+a placeholder for the install prefix without resulting in a non-relocatable
+package.  This is necessary if complex generator expressions are used:
+
+.. code-block:: cmake
+
+  target_include_directories(tgt INTERFACE
+    # Ok, relocatable:
+    $<INSTALL_INTERFACE:$<$<CONFIG:Debug>:$<INSTALL_PREFIX>/include/TgtName>>
+  )
+
+This also applies to paths referencing external dependencies.
+It is not advisable to populate any properties which may contain
+paths, such as :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` and
+:prop_tgt:`INTERFACE_LINK_LIBRARIES`, with paths relevant to dependencies.
+For example, this code may not work well for a relocatable package:
+
+.. code-block:: cmake
+
+  target_link_libraries(ClimbingStats INTERFACE
+    ${Foo_LIBRARIES} ${Bar_LIBRARIES}
+    )
+  target_include_directories(ClimbingStats INTERFACE
+    "$<INSTALL_INTERFACE:${Foo_INCLUDE_DIRS};${Bar_INCLUDE_DIRS}>"
+    )
+
+The referenced variables may contain the absolute paths to libraries
+and include directories **as found on the machine the package was made on**.
+This would create a package with hard-coded paths to dependencies and not
+suitable for relocation.
+
+Ideally such dependencies should be used through their own
+:ref:`IMPORTED targets <Imported Targets>` that have their own
+:prop_tgt:`IMPORTED_LOCATION` and usage requirement properties
+such as :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` populated
+appropriately.  Those imported targets may then be used with
+the :command:`target_link_libraries` command for ``ClimbingStats``:
+
+.. code-block:: cmake
+
+  target_link_libraries(ClimbingStats INTERFACE Foo::Foo Bar::Bar)
+
+With this approach the package references its external dependencies
+only through the names of :ref:`IMPORTED targets <Imported Targets>`.
+When a consumer uses the installed package, the consumer will run the
+appropriate :command:`find_package` commands (via the ``find_dependency``
+macro described above) to find the dependencies and populate the
+imported targets with appropriate paths on their own machine.
+
+Unfortunately many :manual:`modules <cmake-modules(7)>` shipped with
+CMake do not yet provide :ref:`IMPORTED targets <Imported Targets>`
+because their development pre-dated this approach.  This may improve
+incrementally over time.  Workarounds to create relocatable packages
+using such modules include:
+
+* When building the package, specify each ``Foo_LIBRARY`` cache
+  entry as just a library name, e.g. ``-DFoo_LIBRARY=foo``.  This
+  tells the corresponding find module to populate the ``Foo_LIBRARIES``
+  with just ``foo`` to ask the linker to search for the library
+  instead of hard-coding a path.
+
+* Or, after installing the package content but before creating the
+  package installation binary for redistribution, manually replace
+  the absolute paths with placeholders for substitution by the
+  installation tool when the package is installed.
+
+.. _`Package Registry`:
+
+Package Registry
+================
+
+CMake provides two central locations to register packages that have
+been built or installed anywhere on a system:
+
+* `User Package Registry`_
+* `System Package Registry`_
+
+The registries are especially useful to help projects find packages in
+non-standard install locations or directly in their own build trees.
+A project may populate either the user or system registry (using its own
+means, see below) to refer to its location.
+In either case the package should store at the registered location a
+`Package Configuration File`_ (``<PackageName>Config.cmake``) and optionally a
+`Package Version File`_ (``<PackageName>ConfigVersion.cmake``).
+
+The :command:`find_package` command searches the two package registries
+as two of the search steps specified in its documentation.  If it has
+sufficient permissions it also removes stale package registry entries
+that refer to directories that do not exist or do not contain a matching
+package configuration file.
+
+.. _`User Package Registry`:
+
+User Package Registry
+---------------------
+
+The User Package Registry is stored in a per-user location.
+The :command:`export(PACKAGE)` command may be used to register a project
+build tree in the user package registry.  CMake currently provides no
+interface to add install trees to the user package registry.  Installers
+must be manually taught to register their packages if desired.
+
+On Windows the user package registry is stored in the Windows registry
+under a key in ``HKEY_CURRENT_USER``.
+
+A ``<PackageName>`` may appear under registry key::
+
+  HKEY_CURRENT_USER\Software\Kitware\CMake\Packages\<PackageName>
+
+as a ``REG_SZ`` value, with arbitrary name, that specifies the directory
+containing the package configuration file.
+
+On UNIX platforms the user package registry is stored in the user home
+directory under ``~/.cmake/packages``.  A ``<PackageName>`` may appear under
+the directory::
+
+  ~/.cmake/packages/<PackageName>
+
+as a file, with arbitrary name, whose content specifies the directory
+containing the package configuration file.
+
+.. _`System Package Registry`:
+
+System Package Registry
+-----------------------
+
+The System Package Registry is stored in a system-wide location.
+CMake currently provides no interface to add to the system package registry.
+Installers must be manually taught to register their packages if desired.
+
+On Windows the system package registry is stored in the Windows registry
+under a key in ``HKEY_LOCAL_MACHINE``.  A ``<PackageName>`` may appear under
+registry key::
+
+  HKEY_LOCAL_MACHINE\Software\Kitware\CMake\Packages\<PackageName>
+
+as a ``REG_SZ`` value, with arbitrary name, that specifies the directory
+containing the package configuration file.
+
+There is no system package registry on non-Windows platforms.
+
+.. _`Disabling the Package Registry`:
+
+Disabling the Package Registry
+------------------------------
+
+In some cases using the Package Registries is not desirable. CMake
+allows one to disable them using the following variables:
+
+* The :command:`export(PACKAGE)` command does not populate the user
+  package registry when :policy:`CMP0090` is set to ``NEW`` unless the
+  :variable:`CMAKE_EXPORT_PACKAGE_REGISTRY` variable explicitly enables it.
+  When :policy:`CMP0090` is *not* set to ``NEW`` then
+  :command:`export(PACKAGE)` populates the user package registry unless
+  the :variable:`CMAKE_EXPORT_NO_PACKAGE_REGISTRY` variable explicitly
+  disables it.
+* :variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY` disables the
+  User Package Registry in all the :command:`find_package` calls when
+  set to ``FALSE``.
+* Deprecated :variable:`CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY` disables the
+  User Package Registry in all the :command:`find_package` calls when set
+  to ``TRUE``. This variable is ignored when
+  :variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY` has been set.
+* :variable:`CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY` disables
+  the System Package Registry in all the :command:`find_package` calls.
+
+Package Registry Example
+------------------------
+
+A simple convention for naming package registry entries is to use content
+hashes.  They are deterministic and unlikely to collide
+(:command:`export(PACKAGE)` uses this approach).
+The name of an entry referencing a specific directory is simply the content
+hash of the directory path itself.
+
+If a project arranges for package registry entries to exist, such as::
+
+ > reg query HKCU\Software\Kitware\CMake\Packages\MyPackage
+ HKEY_CURRENT_USER\Software\Kitware\CMake\Packages\MyPackage
+  45e7d55f13b87179bb12f907c8de6fc4 REG_SZ c:/Users/Me/Work/lib/cmake/MyPackage
+  7b4a9844f681c80ce93190d4e3185db9 REG_SZ c:/Users/Me/Work/MyPackage-build
+
+or::
+
+ $ cat ~/.cmake/packages/MyPackage/7d1fb77e07ce59a81bed093bbee945bd
+ /home/me/work/lib/cmake/MyPackage
+ $ cat ~/.cmake/packages/MyPackage/f92c1db873a1937f3100706657c63e07
+ /home/me/work/MyPackage-build
+
+then the ``CMakeLists.txt`` code:
+
+.. code-block:: cmake
+
+  find_package(MyPackage)
+
+will search the registered locations for package configuration files
+(``MyPackageConfig.cmake``).  The search order among package registry
+entries for a single package is unspecified and the entry names
+(hashes in this example) have no meaning.  Registered locations may
+contain package version files (``MyPackageConfigVersion.cmake``) to
+tell :command:`find_package` whether a specific location is suitable
+for the version requested.
+
+Package Registry Ownership
+--------------------------
+
+Package registry entries are individually owned by the project installations
+that they reference.  A package installer is responsible for adding its own
+entry and the corresponding uninstaller is responsible for removing it.
+
+The :command:`export(PACKAGE)` command populates the user package registry
+with the location of a project build tree.  Build trees tend to be deleted by
+developers and have no "uninstall" event that could trigger removal of their
+entries.  In order to keep the registries clean the :command:`find_package`
+command automatically removes stale entries it encounters if it has sufficient
+permissions.  CMake provides no interface to remove an entry referencing an
+existing build tree once :command:`export(PACKAGE)` has been invoked.
+However, if the project removes its package configuration file from the build
+tree then the entry referencing the location will be considered stale.
diff --git a/share/cmake-3.22/Help/manual/cmake-policies.7.rst b/share/cmake-3.22/Help/manual/cmake-policies.7.rst
new file mode 100644
index 0000000..3df4f9f
--- /dev/null
+++ b/share/cmake-3.22/Help/manual/cmake-policies.7.rst
@@ -0,0 +1,343 @@
+.. cmake-manual-description: CMake Policies Reference
+
+cmake-policies(7)
+*****************
+
+.. only:: html
+
+   .. contents::
+
+Introduction
+============
+
+Policies in CMake are used to preserve backward compatible behavior
+across multiple releases.  When a new policy is introduced, newer CMake
+versions will begin to warn about the backward compatible behavior.  It
+is possible to disable the warning by explicitly requesting the OLD, or
+backward compatible behavior using the :command:`cmake_policy` command.
+It is also possible to request ``NEW``, or non-backward compatible behavior
+for a policy, also avoiding the warning.  Each policy can also be set to
+either ``NEW`` or ``OLD`` behavior explicitly on the command line with the
+:variable:`CMAKE_POLICY_DEFAULT_CMP<NNNN>` variable.
+
+A policy is a deprecation mechanism and not a reliable feature toggle.
+A policy should almost never be set to ``OLD``, except to silence warnings
+in an otherwise frozen or stable codebase, or temporarily as part of a
+larger migration path. The ``OLD`` behavior of each policy is undesirable
+and will be replaced with an error condition in a future release.
+
+The :command:`cmake_minimum_required` command does more than report an
+error if a too-old version of CMake is used to build a project.  It
+also sets all policies introduced in that CMake version or earlier to
+``NEW`` behavior.  To manage policies without increasing the minimum required
+CMake version, the :command:`if(POLICY)` command may be used:
+
+.. code-block:: cmake
+
+  if(POLICY CMP0990)
+    cmake_policy(SET CMP0990 NEW)
+  endif()
+
+This has the effect of using the ``NEW`` behavior with newer CMake releases which
+users may be using and not issuing a compatibility warning.
+
+The setting of a policy is confined in some cases to not propagate to the
+parent scope.  For example, if the files read by the :command:`include` command
+or the :command:`find_package` command contain a use of :command:`cmake_policy`,
+that policy setting will not affect the caller by default.  Both commands accept
+an optional ``NO_POLICY_SCOPE`` keyword to control this behavior.
+
+The :variable:`CMAKE_MINIMUM_REQUIRED_VERSION` variable may also be used
+to determine whether to report an error on use of deprecated macros or
+functions.
+
+Policies Introduced by CMake 3.22
+=================================
+
+.. toctree::
+   :maxdepth: 1
+
+   CMP0128: Selection of language standard and extension flags improved. </policy/CMP0128>
+   CMP0127: cmake_dependent_option() supports full Condition Syntax. </policy/CMP0127>
+
+Policies Introduced by CMake 3.21
+=================================
+
+.. toctree::
+   :maxdepth: 1
+
+   CMP0126: set(CACHE) does not remove a normal variable of the same name. </policy/CMP0126>
+   CMP0125: find_(path|file|library|program) have consistent behavior for cache variables. </policy/CMP0125>
+   CMP0124: foreach() loop variables are only available in the loop scope. </policy/CMP0124>
+   CMP0123: ARMClang cpu/arch compile and link flags must be set explicitly. </policy/CMP0123>
+   CMP0122: UseSWIG use standard library name conventions for csharp language. </policy/CMP0122>
+   CMP0121: The list command detects invalid indices. </policy/CMP0121>
+
+Policies Introduced by CMake 3.20
+=================================
+
+.. toctree::
+   :maxdepth: 1
+
+   CMP0120: The WriteCompilerDetectionHeader module is removed. </policy/CMP0120>
+   CMP0119: LANGUAGE source file property explicitly compiles as language. </policy/CMP0119>
+   CMP0118: The GENERATED source file property is now visible in all directories. </policy/CMP0118>
+   CMP0117: MSVC RTTI flag /GR is not added to CMAKE_CXX_FLAGS by default. </policy/CMP0117>
+   CMP0116: Ninja generators transform DEPFILEs from add_custom_command(). </policy/CMP0116>
+   CMP0115: Source file extensions must be explicit. </policy/CMP0115>
+
+Policies Introduced by CMake 3.19
+=================================
+
+.. toctree::
+   :maxdepth: 1
+
+   CMP0114: ExternalProject step targets fully adopt their steps. </policy/CMP0114>
+   CMP0113: Makefile generators do not repeat custom commands from target dependencies. </policy/CMP0113>
+   CMP0112: Target file component generator expressions do not add target dependencies. </policy/CMP0112>
+   CMP0111: An imported target missing its location property fails during generation. </policy/CMP0111>
+   CMP0110: add_test() supports arbitrary characters in test names. </policy/CMP0110>
+   CMP0109: find_program() requires permission to execute but not to read. </policy/CMP0109>
+
+Policies Introduced by CMake 3.18
+=================================
+
+.. toctree::
+   :maxdepth: 1
+
+   CMP0108: A target cannot link to itself through an alias. </policy/CMP0108>
+   CMP0107: An ALIAS target cannot overwrite another target. </policy/CMP0107>
+   CMP0106: The Documentation module is removed. </policy/CMP0106>
+   CMP0105: Device link step uses the link options. </policy/CMP0105>
+   CMP0104: CMAKE_CUDA_ARCHITECTURES now detected for NVCC, empty CUDA_ARCHITECTURES not allowed. </policy/CMP0104>
+   CMP0103: Multiple export() with same FILE without APPEND is not allowed. </policy/CMP0103>
+
+Policies Introduced by CMake 3.17
+=================================
+
+.. toctree::
+   :maxdepth: 1
+
+   CMP0102: mark_as_advanced() does nothing if a cache entry does not exist. </policy/CMP0102>
+   CMP0101: target_compile_options honors BEFORE keyword in all scopes. </policy/CMP0101>
+   CMP0100: Let AUTOMOC and AUTOUIC process .hh header files. </policy/CMP0100>
+   CMP0099: Link properties are transitive over private dependency on static libraries. </policy/CMP0099>
+   CMP0098: FindFLEX runs flex in CMAKE_CURRENT_BINARY_DIR when executing. </policy/CMP0098>
+
+Policies Introduced by CMake 3.16
+=================================
+
+.. toctree::
+   :maxdepth: 1
+
+   CMP0097: ExternalProject_Add with GIT_SUBMODULES "" initializes no submodules. </policy/CMP0097>
+   CMP0096: project() preserves leading zeros in version components. </policy/CMP0096>
+   CMP0095: RPATH entries are properly escaped in the intermediary CMake install script. </policy/CMP0095>
+
+Policies Introduced by CMake 3.15
+=================================
+
+.. toctree::
+   :maxdepth: 1
+
+   CMP0094: FindPython3, FindPython2 and FindPython use LOCATION for lookup strategy. </policy/CMP0094>
+   CMP0093: FindBoost reports Boost_VERSION in x.y.z format. </policy/CMP0093>
+   CMP0092: MSVC warning flags are not in CMAKE_{C,CXX}_FLAGS by default. </policy/CMP0092>
+   CMP0091: MSVC runtime library flags are selected by an abstraction. </policy/CMP0091>
+   CMP0090: export(PACKAGE) does not populate package registry by default. </policy/CMP0090>
+   CMP0089: Compiler id for IBM Clang-based XL compilers is now XLClang. </policy/CMP0089>
+
+Policies Introduced by CMake 3.14
+=================================
+
+.. toctree::
+   :maxdepth: 1
+
+   CMP0088: FindBISON runs bison in CMAKE_CURRENT_BINARY_DIR when executing. </policy/CMP0088>
+   CMP0087: install(SCRIPT | CODE) supports generator expressions. </policy/CMP0087>
+   CMP0086: UseSWIG honors SWIG_MODULE_NAME via -module flag. </policy/CMP0086>
+   CMP0085: IN_LIST generator expression handles empty list items. </policy/CMP0085>
+   CMP0084: The FindQt module does not exist for find_package(). </policy/CMP0084>
+   CMP0083: Add PIE options when linking executable. </policy/CMP0083>
+   CMP0082: Install rules from add_subdirectory() are interleaved with those in caller. </policy/CMP0082>
+
+
+Policies Introduced by CMake 3.13
+=================================
+
+.. toctree::
+   :maxdepth: 1
+
+   CMP0081: Relative paths not allowed in LINK_DIRECTORIES target property. </policy/CMP0081>
+   CMP0080: BundleUtilities cannot be included at configure time. </policy/CMP0080>
+   CMP0079: target_link_libraries allows use with targets in other directories. </policy/CMP0079>
+   CMP0078: UseSWIG generates standard target names. </policy/CMP0078>
+   CMP0077: option() honors normal variables. </policy/CMP0077>
+   CMP0076: target_sources() command converts relative paths to absolute. </policy/CMP0076>
+
+Policies Introduced by CMake 3.12
+=================================
+
+.. toctree::
+   :maxdepth: 1
+
+   CMP0075: Include file check macros honor CMAKE_REQUIRED_LIBRARIES. </policy/CMP0075>
+   CMP0074: find_package uses PackageName_ROOT variables. </policy/CMP0074>
+   CMP0073: Do not produce legacy _LIB_DEPENDS cache entries. </policy/CMP0073>
+
+Policies Introduced by CMake 3.11
+=================================
+
+.. toctree::
+   :maxdepth: 1
+
+   CMP0072: FindOpenGL prefers GLVND by default when available. </policy/CMP0072>
+
+Policies Introduced by CMake 3.10
+=================================
+
+.. toctree::
+   :maxdepth: 1
+
+   CMP0071: Let AUTOMOC and AUTOUIC process GENERATED files. </policy/CMP0071>
+   CMP0070: Define file(GENERATE) behavior for relative paths. </policy/CMP0070>
+
+Policies Introduced by CMake 3.9
+================================
+
+.. toctree::
+   :maxdepth: 1
+
+   CMP0069: INTERPROCEDURAL_OPTIMIZATION is enforced when enabled. </policy/CMP0069>
+   CMP0068: RPATH settings on macOS do not affect install_name. </policy/CMP0068>
+
+Policies Introduced by CMake 3.8
+================================
+
+.. toctree::
+   :maxdepth: 1
+
+   CMP0067: Honor language standard in try_compile() source-file signature. </policy/CMP0067>
+
+Policies Introduced by CMake 3.7
+================================
+
+.. toctree::
+   :maxdepth: 1
+
+   CMP0066: Honor per-config flags in try_compile() source-file signature. </policy/CMP0066>
+
+Policies Introduced by CMake 3.4
+================================
+
+.. toctree::
+   :maxdepth: 1
+
+   CMP0065: Do not add flags to export symbols from executables without the ENABLE_EXPORTS target property. </policy/CMP0065>
+   CMP0064: Support new TEST if() operator. </policy/CMP0064>
+
+Policies Introduced by CMake 3.3
+================================
+
+.. toctree::
+   :maxdepth: 1
+
+   CMP0063: Honor visibility properties for all target types. </policy/CMP0063>
+   CMP0062: Disallow install() of export() result. </policy/CMP0062>
+   CMP0061: CTest does not by default tell make to ignore errors (-i). </policy/CMP0061>
+   CMP0060: Link libraries by full path even in implicit directories. </policy/CMP0060>
+   CMP0059: Do not treat DEFINITIONS as a built-in directory property. </policy/CMP0059>
+   CMP0058: Ninja requires custom command byproducts to be explicit. </policy/CMP0058>
+   CMP0057: Support new IN_LIST if() operator. </policy/CMP0057>
+
+Policies Introduced by CMake 3.2
+================================
+
+.. toctree::
+   :maxdepth: 1
+
+   CMP0056: Honor link flags in try_compile() source-file signature. </policy/CMP0056>
+   CMP0055: Strict checking for break() command. </policy/CMP0055>
+
+Policies Introduced by CMake 3.1
+================================
+
+.. toctree::
+   :maxdepth: 1
+
+   CMP0054: Only interpret if() arguments as variables or keywords when unquoted. </policy/CMP0054>
+   CMP0053: Simplify variable reference and escape sequence evaluation. </policy/CMP0053>
+   CMP0052: Reject source and build dirs in installed INTERFACE_INCLUDE_DIRECTORIES. </policy/CMP0052>
+   CMP0051: List TARGET_OBJECTS in SOURCES target property. </policy/CMP0051>
+
+Policies Introduced by CMake 3.0
+================================
+
+.. toctree::
+   :maxdepth: 1
+
+   CMP0050: Disallow add_custom_command SOURCE signatures. </policy/CMP0050>
+   CMP0049: Do not expand variables in target source entries. </policy/CMP0049>
+   CMP0048: project() command manages VERSION variables. </policy/CMP0048>
+   CMP0047: Use QCC compiler id for the qcc drivers on QNX. </policy/CMP0047>
+   CMP0046: Error on non-existent dependency in add_dependencies. </policy/CMP0046>
+   CMP0045: Error on non-existent target in get_target_property. </policy/CMP0045>
+   CMP0044: Case sensitive Lang_COMPILER_ID generator expressions. </policy/CMP0044>
+   CMP0043: Ignore COMPILE_DEFINITIONS_Config properties. </policy/CMP0043>
+   CMP0042: MACOSX_RPATH is enabled by default. </policy/CMP0042>
+   CMP0041: Error on relative include with generator expression. </policy/CMP0041>
+   CMP0040: The target in the TARGET signature of add_custom_command() must exist. </policy/CMP0040>
+   CMP0039: Utility targets may not have link dependencies. </policy/CMP0039>
+   CMP0038: Targets may not link directly to themselves. </policy/CMP0038>
+   CMP0037: Target names should not be reserved and should match a validity pattern. </policy/CMP0037>
+   CMP0036: The build_name command should not be called. </policy/CMP0036>
+   CMP0035: The variable_requires command should not be called. </policy/CMP0035>
+   CMP0034: The utility_source command should not be called. </policy/CMP0034>
+   CMP0033: The export_library_dependencies command should not be called. </policy/CMP0033>
+   CMP0032: The output_required_files command should not be called. </policy/CMP0032>
+   CMP0031: The load_command command should not be called. </policy/CMP0031>
+   CMP0030: The use_mangled_mesa command should not be called. </policy/CMP0030>
+   CMP0029: The subdir_depends command should not be called. </policy/CMP0029>
+   CMP0028: Double colon in target name means ALIAS or IMPORTED target. </policy/CMP0028>
+   CMP0027: Conditionally linked imported targets with missing include directories. </policy/CMP0027>
+   CMP0026: Disallow use of the LOCATION target property. </policy/CMP0026>
+   CMP0025: Compiler id for Apple Clang is now AppleClang. </policy/CMP0025>
+   CMP0024: Disallow include export result. </policy/CMP0024>
+
+Policies Introduced by CMake 2.8
+================================
+
+.. toctree::
+   :maxdepth: 1
+
+   CMP0023: Plain and keyword target_link_libraries signatures cannot be mixed. </policy/CMP0023>
+   CMP0022: INTERFACE_LINK_LIBRARIES defines the link interface. </policy/CMP0022>
+   CMP0021: Fatal error on relative paths in INCLUDE_DIRECTORIES target property. </policy/CMP0021>
+   CMP0020: Automatically link Qt executables to qtmain target on Windows. </policy/CMP0020>
+   CMP0019: Do not re-expand variables in include and link information. </policy/CMP0019>
+   CMP0018: Ignore CMAKE_SHARED_LIBRARY_Lang_FLAGS variable. </policy/CMP0018>
+   CMP0017: Prefer files from the CMake module directory when including from there. </policy/CMP0017>
+   CMP0016: target_link_libraries() reports error if its only argument is not a target. </policy/CMP0016>
+   CMP0015: link_directories() treats paths relative to the source dir. </policy/CMP0015>
+   CMP0014: Input directories must have CMakeLists.txt. </policy/CMP0014>
+   CMP0013: Duplicate binary directories are not allowed. </policy/CMP0013>
+   CMP0012: if() recognizes numbers and boolean constants. </policy/CMP0012>
+
+Policies Introduced by CMake 2.6
+================================
+
+.. toctree::
+   :maxdepth: 1
+
+   CMP0011: Included scripts do automatic cmake_policy PUSH and POP. </policy/CMP0011>
+   CMP0010: Bad variable reference syntax is an error. </policy/CMP0010>
+   CMP0009: FILE GLOB_RECURSE calls should not follow symlinks by default. </policy/CMP0009>
+   CMP0008: Libraries linked by full-path must have a valid library file name. </policy/CMP0008>
+   CMP0007: list command no longer ignores empty elements. </policy/CMP0007>
+   CMP0006: Installing MACOSX_BUNDLE targets requires a BUNDLE DESTINATION. </policy/CMP0006>
+   CMP0005: Preprocessor definition values are now escaped automatically. </policy/CMP0005>
+   CMP0004: Libraries linked may not have leading or trailing whitespace. </policy/CMP0004>
+   CMP0003: Libraries linked via full path no longer produce linker search paths. </policy/CMP0003>
+   CMP0002: Logical target names must be globally unique. </policy/CMP0002>
+   CMP0001: CMAKE_BACKWARDS_COMPATIBILITY should no longer be used. </policy/CMP0001>
+   CMP0000: A minimum required CMake version must be specified. </policy/CMP0000>
diff --git a/share/cmake-3.22/Help/manual/cmake-presets.7.rst b/share/cmake-3.22/Help/manual/cmake-presets.7.rst
new file mode 100644
index 0000000..74e9fae
--- /dev/null
+++ b/share/cmake-3.22/Help/manual/cmake-presets.7.rst
@@ -0,0 +1,1021 @@
+.. cmake-manual-description: CMakePresets.json
+
+cmake-presets(7)
+****************
+
+.. only:: html
+
+   .. contents::
+
+Introduction
+============
+
+One problem that CMake users often face is sharing settings with other people
+for common ways to configure a project. This may be done to support CI builds,
+or for users who frequently use the same build. CMake supports two files,
+``CMakePresets.json`` and ``CMakeUserPresets.json``, that allow users to
+specify common configure options and share them with others.
+
+``CMakePresets.json`` and ``CMakeUserPresets.json`` live in the project's root
+directory. They both have exactly the same format, and both are optional
+(though at least one must be present if ``--preset`` is specified.)
+``CMakePresets.json`` is meant to save project-wide builds, while
+``CMakeUserPresets.json`` is meant for developers to save their own local
+builds. ``CMakePresets.json`` may be checked into a version control system, and
+``CMakeUserPresets.json`` should NOT be checked in. For example, if a project
+is using Git, ``CMakePresets.json`` may be tracked, and
+``CMakeUserPresets.json`` should be added to the ``.gitignore``.
+
+Format
+======
+
+The files are a JSON document with an object as the root:
+
+.. literalinclude:: presets/example.json
+  :language: json
+
+The root object recognizes the following fields:
+
+``version``
+
+  A required integer representing the version of the JSON schema.
+  The supported versions are ``1``, ``2``, and ``3``.
+
+``cmakeMinimumRequired``
+
+  An optional object representing the minimum version of CMake needed to
+  build this project. This object consists of the following fields:
+
+  ``major``
+
+    An optional integer representing the major version.
+
+  ``minor``
+
+    An optional integer representing the minor version.
+
+  ``patch``
+
+    An optional integer representing the patch version.
+
+``vendor``
+
+  An optional map containing vendor-specific information. CMake does not
+  interpret the contents of this field except to verify that it is a map if
+  it does exist. However, the keys should be a vendor-specific domain name
+  followed by a ``/``-separated path. For example, the Example IDE 1.0 could
+  use ``example.com/ExampleIDE/1.0``. The value of each field can be anything
+  desired by the vendor, though will typically be a map.
+
+``configurePresets``
+
+  An optional array of `Configure Preset`_ objects.
+  This is allowed in preset files specifying version ``1`` or above.
+
+``buildPresets``
+
+  An optional array of `Build Preset`_ objects.
+  This is allowed in preset files specifying version ``2`` or above.
+
+``testPresets``
+
+  An optional array of `Test Preset`_ objects.
+  This is allowed in preset files specifying version ``2`` or above.
+
+Configure Preset
+^^^^^^^^^^^^^^^^
+
+Each entry of the ``configurePresets`` array is a JSON object
+that may contain the following fields:
+
+``name``
+
+  A required string representing the machine-friendly name of the preset.
+  This identifier is used in the :ref:`cmake --preset <CMake Options>` option.
+  There must not be two configure presets in the union of ``CMakePresets.json``
+  and ``CMakeUserPresets.json`` in the same directory with the same name.
+  However, a configure preset may have the same name as a build or test preset.
+
+``hidden``
+
+  An optional boolean specifying whether or not a preset should be hidden.
+  If a preset is hidden, it cannot be used in the ``--preset=`` argument,
+  will not show up in the :manual:`CMake GUI <cmake-gui(1)>`, and does not
+  have to have a valid ``generator`` or ``binaryDir``, even from
+  inheritance. ``hidden`` presets are intended to be used as a base for
+  other presets to inherit via the ``inherits`` field.
+
+``inherits``
+
+  An optional array of strings representing the names of presets to inherit
+  from. The preset will inherit all of the fields from the ``inherits``
+  presets by default (except ``name``, ``hidden``, ``inherits``,
+  ``description``, and ``displayName``), but can override them as
+  desired. If multiple ``inherits`` presets provide conflicting values for
+  the same field, the earlier preset in the ``inherits`` list will be
+  preferred. Presets in ``CMakePresets.json`` may not inherit from presets
+  in ``CMakeUserPresets.json``.
+
+  This field can also be a string, which is equivalent to an array
+  containing one string.
+
+``condition``
+
+  An optional `Condition`_ object. This is allowed in preset files specifying
+  version ``3`` or above.
+
+``vendor``
+
+  An optional map containing vendor-specific information. CMake does not
+  interpret the contents of this field except to verify that it is a map
+  if it does exist. However, it should follow the same conventions as the
+  root-level ``vendor`` field. If vendors use their own per-preset
+  ``vendor`` field, they should implement inheritance in a sensible manner
+  when appropriate.
+
+``displayName``
+
+  An optional string with a human-friendly name of the preset.
+
+``description``
+
+  An optional string with a human-friendly description of the preset.
+
+``generator``
+
+  An optional string representing the generator to use for the preset. If
+  ``generator`` is not specified, it must be inherited from the
+  ``inherits`` preset (unless this preset is ``hidden``). In version ``3``
+  or above, this field may be omitted to fall back to regular generator
+  discovery procedure.
+
+  Note that for Visual Studio generators, unlike in the command line ``-G``
+  argument, you cannot include the platform name in the generator name. Use
+  the ``architecture`` field instead.
+
+``architecture``, ``toolset``
+
+  Optional fields representing the platform and toolset, respectively, for
+  generators that support them. Each may be either a string or an object
+  with the following fields:
+
+  ``value``
+
+    An optional string representing the value.
+
+  ``strategy``
+
+    An optional string telling CMake how to handle the ``architecture`` or
+    ``toolset`` field. Valid values are:
+
+    ``"set"``
+
+      Set the respective value. This will result in an error for generators
+      that do not support the respective field.
+
+    ``"external"``
+
+      Do not set the value, even if the generator supports it. This is
+      useful if, for example, a preset uses the Ninja generator, and an IDE
+      knows how to set up the Visual C++ environment from the
+      ``architecture`` and ``toolset`` fields. In that case, CMake will
+      ignore the field, but the IDE can use them to set up the environment
+      before invoking CMake.
+
+``toolchainFile``
+
+  An optional string representing the path to the toolchain file.
+  This field supports `macro expansion`_. If a relative path is specified,
+  it is calculated relative to the build directory, and if not found,
+  relative to the source directory. This field takes precedence over any
+  :variable:`CMAKE_TOOLCHAIN_FILE` value. It is allowed in preset files
+  specifying version ``3`` or above.
+
+``binaryDir``
+
+  An optional string representing the path to the output binary directory.
+  This field supports `macro expansion`_. If a relative path is specified,
+  it is calculated relative to the source directory. If ``binaryDir`` is not
+  specified, it must be inherited from the ``inherits`` preset (unless this
+  preset is ``hidden``). In version ``3`` or above, this field may be
+  omitted.
+
+``installDir``
+
+  An optional string representing the path to the installation directory.
+  This field supports `macro expansion`_. If a relative path is specified,
+  it is calculated relative to the source directory. This is allowed in
+  preset files specifying version ``3`` or above.
+
+``cmakeExecutable``
+
+  An optional string representing the path to the CMake executable to use
+  for this preset. This is reserved for use by IDEs, and is not used by
+  CMake itself. IDEs that use this field should expand any macros in it.
+
+``cacheVariables``
+
+  An optional map of cache variables. The key is the variable name (which
+  may not be an empty string), and the value is either ``null``, a boolean
+  (which is equivalent to a value of ``"TRUE"`` or ``"FALSE"`` and a type
+  of ``BOOL``), a string representing the value of the variable (which
+  supports `macro expansion`_), or an object with the following fields:
+
+  ``type``
+
+    An optional string representing the type of the variable.
+
+  ``value``
+
+    A required string or boolean representing the value of the variable.
+    A boolean is equivalent to ``"TRUE"`` or ``"FALSE"``. This field
+    supports `macro expansion`_.
+
+  Cache variables are inherited through the ``inherits`` field, and the
+  preset's variables will be the union of its own ``cacheVariables`` and
+  the ``cacheVariables`` from all its parents. If multiple presets in this
+  union define the same variable, the standard rules of ``inherits`` are
+  applied. Setting a variable to ``null`` causes it to not be set, even if
+  a value was inherited from another preset.
+
+``environment``
+
+  An optional map of environment variables. The key is the variable name
+  (which may not be an empty string), and the value is either ``null`` or
+  a string representing the value of the variable. Each variable is set
+  regardless of whether or not a value was given to it by the process's
+  environment. This field supports `macro expansion`_, and environment
+  variables in this map may reference each other, and may be listed in any
+  order, as long as such references do not cause a cycle (for example,
+  if ``ENV_1`` is ``$env{ENV_2}``, ``ENV_2`` may not be ``$env{ENV_1}``.)
+
+  Environment variables are inherited through the ``inherits`` field, and
+  the preset's environment will be the union of its own ``environment`` and
+  the ``environment`` from all its parents. If multiple presets in this
+  union define the same variable, the standard rules of ``inherits`` are
+  applied. Setting a variable to ``null`` causes it to not be set, even if
+  a value was inherited from another preset.
+
+``warnings``
+
+  An optional object specifying the warnings to enable. The object may
+  contain the following fields:
+
+  ``dev``
+
+    An optional boolean. Equivalent to passing ``-Wdev`` or ``-Wno-dev``
+    on the command line. This may not be set to ``false`` if ``errors.dev``
+    is set to ``true``.
+
+  ``deprecated``
+
+    An optional boolean. Equivalent to passing ``-Wdeprecated`` or
+    ``-Wno-deprecated`` on the command line. This may not be set to
+    ``false`` if ``errors.deprecated`` is set to ``true``.
+
+  ``uninitialized``
+
+    An optional boolean. Setting this to ``true`` is equivalent to passing
+    ``--warn-uninitialized`` on the command line.
+
+  ``unusedCli``
+
+    An optional boolean. Setting this to ``false`` is equivalent to passing
+    ``--no-warn-unused-cli`` on the command line.
+
+  ``systemVars``
+
+    An optional boolean. Setting this to ``true`` is equivalent to passing
+    ``--check-system-vars`` on the command line.
+
+``errors``
+
+  An optional object specifying the errors to enable. The object may
+  contain the following fields:
+
+  ``dev``
+
+    An optional boolean. Equivalent to passing ``-Werror=dev`` or
+    ``-Wno-error=dev`` on the command line. This may not be set to ``true``
+    if ``warnings.dev`` is set to ``false``.
+
+  ``deprecated``
+
+    An optional boolean. Equivalent to passing ``-Werror=deprecated`` or
+    ``-Wno-error=deprecated`` on the command line. This may not be set to
+    ``true`` if ``warnings.deprecated`` is set to ``false``.
+
+``debug``
+
+  An optional object specifying debug options. The object may contain the
+  following fields:
+
+  ``output``
+
+    An optional boolean. Setting this to ``true`` is equivalent to passing
+    ``--debug-output`` on the command line.
+
+  ``tryCompile``
+
+    An optional boolean. Setting this to ``true`` is equivalent to passing
+    ``--debug-trycompile`` on the command line.
+
+  ``find``
+
+    An optional boolean. Setting this to ``true`` is equivalent to passing
+    ``--debug-find`` on the command line.
+
+Build Preset
+^^^^^^^^^^^^
+
+Each entry of the ``buildPresets`` array is a JSON object
+that may contain the following fields:
+
+``name``
+
+  A required string representing the machine-friendly name of the preset.
+  This identifier is used in the
+  :ref:`cmake --build --preset <Build Tool Mode>` option.
+  There must not be two build presets in the union of ``CMakePresets.json``
+  and ``CMakeUserPresets.json`` in the same directory with the same name.
+  However, a build preset may have the same name as a configure or test preset.
+
+``hidden``
+
+  An optional boolean specifying whether or not a preset should be hidden.
+  If a preset is hidden, it cannot be used in the ``--preset`` argument
+  and does not have to have a valid ``configurePreset``, even from
+  inheritance. ``hidden`` presets are intended to be used as a base for
+  other presets to inherit via the ``inherits`` field.
+
+``inherits``
+
+  An optional array of strings representing the names of presets to
+  inherit from. The preset will inherit all of the fields from the
+  ``inherits`` presets by default (except ``name``, ``hidden``,
+  ``inherits``, ``description``, and ``displayName``), but can override
+  them as desired. If multiple ``inherits`` presets provide conflicting
+  values for the same field, the earlier preset in the ``inherits`` list
+  will be preferred. Presets in ``CMakePresets.json`` may not inherit from
+  presets in ``CMakeUserPresets.json``.
+
+  This field can also be a string, which is equivalent to an array
+  containing one string.
+
+``condition``
+
+  An optional `Condition`_ object. This is allowed in preset files specifying
+  version ``3`` or above.
+
+``vendor``
+
+  An optional map containing vendor-specific information. CMake does not
+  interpret the contents of this field except to verify that it is a map
+  if it does exist. However, it should follow the same conventions as the
+  root-level ``vendor`` field. If vendors use their own per-preset
+  ``vendor`` field, they should implement inheritance in a sensible manner
+  when appropriate.
+
+``displayName``
+
+  An optional string with a human-friendly name of the preset.
+
+``description``
+
+  An optional string with a human-friendly description of the preset.
+
+``environment``
+
+  An optional map of environment variables. The key is the variable name
+  (which may not be an empty string), and the value is either ``null`` or
+  a string representing the value of the variable. Each variable is set
+  regardless of whether or not a value was given to it by the process's
+  environment. This field supports macro expansion, and environment
+  variables in this map may reference each other, and may be listed in any
+  order, as long as such references do not cause a cycle (for example, if
+  ``ENV_1`` is ``$env{ENV_2}``, ``ENV_2`` may not be ``$env{ENV_1}``.)
+
+  Environment variables are inherited through the ``inherits`` field, and
+  the preset's environment will be the union of its own ``environment``
+  and the ``environment`` from all its parents. If multiple presets in
+  this union define the same variable, the standard rules of ``inherits``
+  are applied. Setting a variable to ``null`` causes it to not be set,
+  even if a value was inherited from another preset.
+
+  .. note::
+
+    For a CMake project using ExternalProject with a configuration preset
+    having environment variables needed in the ExternalProject, use a build
+    preset that inherits that configuration preset or the ExternalProject
+    will not have the environment variables set in the configuration preset.
+    Example: suppose the host defaults to one compiler (say Clang)
+    and the user wishes to use another compiler (say GCC). Set configuration
+    preset environment variables ``CC`` and ``CXX`` and use a build preset
+    that inherits that configuration preset. Otherwise the ExternalProject
+    may use a different (system default) compiler than the top-level CMake
+    project.
+
+``configurePreset``
+
+  An optional string specifying the name of a configure preset to
+  associate with this build preset. If ``configurePreset`` is not
+  specified, it must be inherited from the inherits preset (unless this
+  preset is hidden). The build directory is inferred from the configure
+  preset, so the build will take place in the same ``binaryDir`` that the
+  configuration did.
+
+``inheritConfigureEnvironment``
+
+  An optional boolean that defaults to true. If true, the environment
+  variables from the associated configure preset are inherited after all
+  inherited build preset environments, but before environment variables
+  explicitly specified in this build preset.
+
+``jobs``
+
+  An optional integer. Equivalent to passing ``--parallel`` or ``-j`` on
+  the command line.
+
+``targets``
+
+  An optional string or array of strings. Equivalent to passing
+  ``--target`` or ``-t`` on the command line. Vendors may ignore the
+  targets property or hide build presets that explicitly specify targets.
+  This field supports macro expansion.
+
+``configuration``
+
+  An optional string. Equivalent to passing ``--config`` on the command
+  line.
+
+``cleanFirst``
+
+  An optional bool. If true, equivalent to passing ``--clean-first`` on
+  the command line.
+
+``verbose``
+
+  An optional bool. If true, equivalent to passing ``--verbose`` on the
+  command line.
+
+``nativeToolOptions``
+
+  An optional array of strings. Equivalent to passing options after ``--``
+  on the command line. The array values support macro expansion.
+
+Test Preset
+^^^^^^^^^^^
+
+Each entry of the ``testPresets`` array is a JSON object
+that may contain the following fields:
+
+``name``
+
+  A required string representing the machine-friendly name of the preset.
+  This identifier is used in the :ref:`ctest --preset <CTest Options>` option.
+  There must not be two test presets in the union of ``CMakePresets.json``
+  and ``CMakeUserPresets.json`` in the same directory with the same name.
+  However, a test preset may have the same name as a configure or build preset.
+
+``hidden``
+
+  An optional boolean specifying whether or not a preset should be hidden.
+  If a preset is hidden, it cannot be used in the ``--preset`` argument
+  and does not have to have a valid ``configurePreset``, even from
+  inheritance. ``hidden`` presets are intended to be used as a base for
+  other presets to inherit via the ``inherits`` field.
+
+``inherits``
+
+  An optional array of strings representing the names of presets to
+  inherit from. The preset will inherit all of the fields from the
+  ``inherits`` presets by default (except ``name``, ``hidden``,
+  ``inherits``, ``description``, and ``displayName``), but can override
+  them as desired. If multiple ``inherits`` presets provide conflicting
+  values for the same field, the earlier preset in the ``inherits`` list
+  will be preferred. Presets in ``CMakePresets.json`` may not inherit from
+  presets in ``CMakeUserPresets.json``.
+
+  This field can also be a string, which is equivalent to an array
+  containing one string.
+
+``condition``
+
+  An optional `Condition`_ object. This is allowed in preset files specifying
+  version ``3`` or above.
+
+``vendor``
+
+  An optional map containing vendor-specific information. CMake does not
+  interpret the contents of this field except to verify that it is a map
+  if it does exist. However, it should follow the same conventions as the
+  root-level ``vendor`` field. If vendors use their own per-preset
+  ``vendor`` field, they should implement inheritance in a sensible manner
+  when appropriate.
+
+``displayName``
+
+  An optional string with a human-friendly name of the preset.
+
+``description``
+
+  An optional string with a human-friendly description of the preset.
+
+``environment``
+
+  An optional map of environment variables. The key is the variable name
+  (which may not be an empty string), and the value is either ``null`` or
+  a string representing the value of the variable. Each variable is set
+  regardless of whether or not a value was given to it by the process's
+  environment. This field supports macro expansion, and environment
+  variables in this map may reference each other, and may be listed in any
+  order, as long as such references do not cause a cycle (for example, if
+  ``ENV_1`` is ``$env{ENV_2}``, ``ENV_2`` may not be ``$env{ENV_1}``.)
+
+  Environment variables are inherited through the ``inherits`` field, and
+  the preset's environment will be the union of its own ``environment``
+  and the ``environment`` from all its parents. If multiple presets in
+  this union define the same variable, the standard rules of ``inherits``
+  are applied. Setting a variable to ``null`` causes it to not be set,
+  even if a value was inherited from another preset.
+
+``configurePreset``
+
+  An optional string specifying the name of a configure preset to
+  associate with this test preset. If ``configurePreset`` is not
+  specified, it must be inherited from the inherits preset (unless this
+  preset is hidden). The build directory is inferred from the configure
+  preset, so tests will run in the same ``binaryDir`` that the
+  configuration did and build did.
+
+``inheritConfigureEnvironment``
+
+  An optional boolean that defaults to true. If true, the environment
+  variables from the associated configure preset are inherited after all
+  inherited test preset environments, but before environment variables
+  explicitly specified in this test preset.
+
+``configuration``
+
+  An optional string. Equivalent to passing ``--build-config`` on the
+  command line.
+
+``overwriteConfigurationFile``
+
+  An optional array of configuration options to overwrite options
+  specified in the CTest configuration file. Equivalent to passing
+  ``--overwrite`` for each value in the array. The array values
+  support macro expansion.
+
+``output``
+
+  An optional object specifying output options. The object may contain the
+  following fields.
+
+  ``shortProgress``
+
+    An optional bool. If true, equivalent to passing ``--progress`` on the
+    command line.
+
+  ``verbosity``
+
+    An optional string specifying verbosity level. Must be one of the
+    following:
+
+    ``default``
+
+      Equivalent to passing no verbosity flags on the command line.
+
+    ``verbose``
+
+      Equivalent to passing ``--verbose`` on the command line.
+
+    ``extra``
+
+      Equivalent to passing ``--extra-verbose`` on the command line.
+
+  ``debug``
+
+    An optional bool. If true, equivalent to passing ``--debug`` on the
+    command line.
+
+  ``outputOnFailure``
+
+    An optional bool. If true, equivalent to passing
+    ``--output-on-failure`` on the command line.
+
+  ``quiet``
+
+    An optional bool. If true, equivalent to passing ``--quiet`` on the
+    command line.
+
+  ``outputLogFile``
+
+    An optional string specifying a path to a log file. Equivalent to
+    passing ``--output-log`` on the command line. This field supports
+    macro expansion.
+
+  ``labelSummary``
+
+    An optional bool. If false, equivalent to passing
+    ``--no-label-summary`` on the command line.
+
+  ``subprojectSummary``
+
+    An optional bool. If false, equivalent to passing
+    ``--no-subproject-summary`` on the command line.
+
+  ``maxPassedTestOutputSize``
+
+    An optional integer specifying the maximum output for passed tests in
+    bytes. Equivalent to passing ``--test-output-size-passed`` on the
+    command line.
+
+  ``maxFailedTestOutputSize``
+
+    An optional integer specifying the maximum output for failed tests in
+    bytes. Equivalent to passing ``--test-output-size-failed`` on the
+    command line.
+
+  ``maxTestNameWidth``
+
+    An optional integer specifying the maximum width of a test name to
+    output. Equivalent to passing ``--max-width`` on the command line.
+
+``filter``
+
+  An optional object specifying how to filter the tests to run. The object
+  may contain the following fields.
+
+  ``include``
+
+    An optional object specifying which tests to include. The object may
+    contain the following fields.
+
+    ``name``
+
+      An optional string specifying a regex for test names. Equivalent to
+      passing ``--tests-regex`` on the command line. This field supports
+      macro expansion. CMake regex syntax is described under
+      :ref:`string(REGEX) <Regex Specification>`.
+
+
+    ``label``
+
+      An optional string specifying a regex for test labels. Equivalent to
+      passing ``--label-regex`` on the command line. This field supports
+      macro expansion.
+
+    ``useUnion``
+
+      An optional bool. Equivalent to passing ``--union`` on the command
+      line.
+
+    ``index``
+
+      An optional object specifying tests to include by test index. The
+      object may contain the following fields. Can also be an optional
+      string specifying a file with the command line syntax for
+      ``--tests-information``. If specified as a string, this field
+      supports macro expansion.
+
+      ``start``
+
+        An optional integer specifying a test index to start testing at.
+
+      ``end``
+
+        An optional integer specifying a test index to stop testing at.
+
+      ``stride``
+
+        An optional integer specifying the increment.
+
+      ``specificTests``
+
+        An optional array of integers specifying specific test indices to
+        run.
+
+  ``exclude``
+
+    An optional object specifying which tests to exclude. The object may
+    contain the following fields.
+
+    ``name``
+
+      An optional string specifying a regex for test names. Equivalent to
+      passing ``--exclude-regex`` on the command line. This field supports
+      macro expansion.
+
+    ``label``
+
+      An optional string specifying a regex for test labels. Equivalent to
+      passing ``--label-exclude`` on the command line. This field supports
+      macro expansion.
+
+    ``fixtures``
+
+      An optional object specifying which fixtures to exclude from adding
+      tests. The object may contain the following fields.
+
+      ``any``
+
+        An optional string specifying a regex for text fixtures to exclude
+        from adding any tests. Equivalent to ``--fixture-exclude-any`` on
+        the command line. This field supports macro expansion.
+
+      ``setup``
+
+        An optional string specifying a regex for text fixtures to exclude
+        from adding setup tests. Equivalent to ``--fixture-exclude-setup``
+        on the command line. This field supports macro expansion.
+
+      ``cleanup``
+
+        An optional string specifying a regex for text fixtures to exclude
+        from adding cleanup tests. Equivalent to
+        ``--fixture-exclude-cleanup`` on the command line. This field
+        supports macro expansion.
+
+``execution``
+
+  An optional object specifying options for test execution. The object may
+  contain the following fields.
+
+  ``stopOnFailure``
+
+    An optional bool. If true, equivalent to passing ``--stop-on-failure``
+    on the command line.
+
+  ``enableFailover``
+
+    An optional bool. If true, equivalent to passing ``-F`` on the command
+    line.
+
+  ``jobs``
+
+    An optional integer. Equivalent to passing ``--parallel`` on the
+    command line.
+
+  ``resourceSpecFile``
+
+    An optional string. Equivalent to passing ``--resource-spec-file`` on
+    the command line. This field supports macro expansion.
+
+  ``testLoad``
+
+    An optional integer. Equivalent to passing ``--test-load`` on the
+    command line.
+
+  ``showOnly``
+
+    An optional string. Equivalent to passing ``--show-only`` on the
+    command line. The string must be one of the following values:
+
+    ``human``
+
+    ``json-v1``
+
+  ``repeat``
+
+    An optional object specifying how to repeat tests. Equivalent to
+    passing ``--repeat`` on the command line. The object must have the
+    following fields.
+
+    ``mode``
+
+      A required string. Must be one of the following values:
+
+      ``until-fail``
+
+      ``until-pass``
+
+      ``after-timeout``
+
+    ``count``
+
+      A required integer.
+
+  ``interactiveDebugging``
+
+    An optional bool. If true, equivalent to passing
+    ``--interactive-debug-mode 1`` on the command line. If false,
+    equivalent to passing ``--interactive-debug-mode 0`` on the command
+    line.
+
+  ``scheduleRandom``
+
+    An optional bool. If true, equivalent to passing ``--schedule-random``
+    on the command line.
+
+  ``timeout``
+
+    An optional integer. Equivalent to passing ``--timeout`` on the
+    command line.
+
+  ``noTestsAction``
+
+    An optional string specifying the behavior if no tests are found. Must
+    be one of the following values:
+
+    ``default``
+
+      Equivalent to not passing any value on the command line.
+
+    ``error``
+
+      Equivalent to passing ``--no-tests=error`` on the command line.
+
+    ``ignore``
+
+      Equivalent to passing ``--no-tests=ignore`` on the command line.
+
+Condition
+^^^^^^^^^
+
+The ``condition`` field of a preset, allowed in preset files specifying version
+``3`` or above, is used to determine whether or not the preset is enabled. For
+example, this can be used to disable a preset on platforms other than Windows.
+``condition`` may be either a boolean, ``null``, or an object. If it is a
+boolean, the boolean indicates whether the preset is enabled or disabled. If it
+is ``null``, the preset is enabled, but the ``null`` condition is not inherited
+by any presets that may inherit from the preset. Sub-conditions (for example in
+a ``not``, ``anyOf``, or ``allOf`` condition) may not be ``null``. If it is an
+object, it has the following fields:
+
+``type``
+
+  A required string with one of the following values:
+
+  ``"const"``
+
+    Indicates that the condition is constant. This is equivalent to using a
+    boolean in place of the object. The condition object will have the
+    following additional fields:
+
+    ``value``
+
+      A required boolean which provides a constant value for the condition's
+      evaluation.
+
+  ``"equals"``
+
+  ``"notEquals"``
+
+    Indicates that the condition compares two strings to see if they are equal
+    (or not equal). The condition object will have the following additional
+    fields:
+
+    ``lhs``
+
+      First string to compare. This field supports macro expansion.
+
+    ``rhs``
+
+      Second string to compare. This field supports macro expansion.
+
+  ``"inList"``
+
+  ``"notInList"``
+
+    Indicates that the condition searches for a string in a list of strings.
+    The condition object will have the following additional fields:
+
+    ``string``
+
+      A required string to search for. This field supports macro expansion.
+
+    ``list``
+
+      A required list of strings to search. This field supports macro
+      expansion, and uses short-circuit evaluation.
+
+  ``"matches"``
+
+  ``"notMatches"``
+
+    Indicates that the condition searches for a regular expression in a string.
+    The condition object will have the following additional fields:
+
+    ``string``
+
+      A required string to search. This field supports macro expansion.
+
+    ``regex``
+
+      A required regular expression to search for. This field supports macro
+      expansion.
+
+  ``"anyOf"``
+
+  ``"allOf"``
+
+    Indicates that the condition is an aggregation of zero or more nested
+    conditions. The condition object will have the following additional fields:
+
+    ``conditions``
+
+      A required array of condition objects. These conditions use short-circuit
+      evaluation.
+
+  ``"not"``
+
+    Indicates that the condition is an inversion of another condition. The
+    condition object will have the following additional fields:
+
+    ``condition``
+
+      A required condition object.
+
+Macro Expansion
+^^^^^^^^^^^^^^^
+
+As mentioned above, some fields support macro expansion. Macros are
+recognized in the form ``$<macro-namespace>{<macro-name>}``. All macros are
+evaluated in the context of the preset being used, even if the macro is in a
+field that was inherited from another preset. For example, if the ``Base``
+preset sets variable ``PRESET_NAME`` to ``${presetName}``, and the
+``Derived`` preset inherits from ``Base``, ``PRESET_NAME`` will be set to
+``Derived``.
+
+It is an error to not put a closing brace at the end of a macro name. For
+example, ``${sourceDir`` is invalid. A dollar sign (``$``) followed by
+anything other than a left curly brace (``{``) with a possible namespace is
+interpreted as a literal dollar sign.
+
+Recognized macros include:
+
+``${sourceDir}``
+
+  Path to the project source directory.
+
+``${sourceParentDir}``
+
+  Path to the project source directory's parent directory.
+
+``${sourceDirName}``
+
+  The last filename component of ``${sourceDir}``. For example, if
+  ``${sourceDir}`` is ``/path/to/source``, this would be ``source``.
+
+``${presetName}``
+
+  Name specified in the preset's ``name`` field.
+
+``${generator}``
+
+  Generator specified in the preset's ``generator`` field. For build and
+  test presets, this will evaluate to the generator specified by
+  ``configurePreset``.
+
+``${hostSystemName}``
+
+  The name of the host operating system. Contains the same value as
+  :variable:`CMAKE_HOST_SYSTEM_NAME`. This is allowed in preset files
+  specifying version ``3`` or above.
+
+``${dollar}``
+
+  A literal dollar sign (``$``).
+
+``$env{<variable-name>}``
+
+  Environment variable with name ``<variable-name>``. The variable name may
+  not be an empty string. If the variable is defined in the ``environment``
+  field, that value is used instead of the value from the parent environment.
+  If the environment variable is not defined, this evaluates as an empty
+  string.
+
+  Note that while Windows environment variable names are case-insensitive,
+  variable names within a preset are still case-sensitive. This may lead to
+  unexpected results when using inconsistent casing. For best results, keep
+  the casing of environment variable names consistent.
+
+``$penv{<variable-name>}``
+
+  Similar to ``$env{<variable-name>}``, except that the value only comes from
+  the parent environment, and never from the ``environment`` field. This
+  allows you to prepend or append values to existing environment variables.
+  For example, setting ``PATH`` to ``/path/to/ninja/bin:$penv{PATH}`` will
+  prepend ``/path/to/ninja/bin`` to the ``PATH`` environment variable. This
+  is needed because ``$env{<variable-name>}`` does not allow circular
+  references.
+
+``$vendor{<macro-name>}``
+
+  An extension point for vendors to insert their own macros. CMake will not
+  be able to use presets which have a ``$vendor{<macro-name>}`` macro, and
+  effectively ignores such presets. However, it will still be able to use
+  other presets from the same file.
+
+  CMake does not make any attempt to interpret ``$vendor{<macro-name>}``
+  macros. However, to avoid name collisions, IDE vendors should prefix
+  ``<macro-name>`` with a very short (preferably <= 4 characters) vendor
+  identifier prefix, followed by a ``.``, followed by the macro name. For
+  example, the Example IDE could have ``$vendor{xide.ideInstallDir}``.
+
+Schema
+======
+
+:download:`This file </manual/presets/schema.json>` provides a machine-readable
+JSON schema for the ``CMakePresets.json`` format.
diff --git a/share/cmake-3.22/Help/manual/cmake-properties.7.rst b/share/cmake-3.22/Help/manual/cmake-properties.7.rst
new file mode 100644
index 0000000..bb5dba3
--- /dev/null
+++ b/share/cmake-3.22/Help/manual/cmake-properties.7.rst
@@ -0,0 +1,600 @@
+.. cmake-manual-description: CMake Properties Reference
+
+cmake-properties(7)
+*******************
+
+.. only:: html
+
+   .. contents::
+
+.. _`Global Properties`:
+
+Properties of Global Scope
+==========================
+
+.. toctree::
+   :maxdepth: 1
+
+   /prop_gbl/ALLOW_DUPLICATE_CUSTOM_TARGETS
+   /prop_gbl/AUTOGEN_SOURCE_GROUP
+   /prop_gbl/AUTOGEN_TARGETS_FOLDER
+   /prop_gbl/AUTOMOC_SOURCE_GROUP
+   /prop_gbl/AUTOMOC_TARGETS_FOLDER
+   /prop_gbl/AUTORCC_SOURCE_GROUP
+   /prop_gbl/AUTOUIC_SOURCE_GROUP
+   /prop_gbl/CMAKE_C_KNOWN_FEATURES
+   /prop_gbl/CMAKE_CUDA_KNOWN_FEATURES
+   /prop_gbl/CMAKE_CXX_KNOWN_FEATURES
+   /prop_gbl/CMAKE_ROLE
+   /prop_gbl/DEBUG_CONFIGURATIONS
+   /prop_gbl/DISABLED_FEATURES
+   /prop_gbl/ECLIPSE_EXTRA_CPROJECT_CONTENTS
+   /prop_gbl/ECLIPSE_EXTRA_NATURES
+   /prop_gbl/ENABLED_FEATURES
+   /prop_gbl/ENABLED_LANGUAGES
+   /prop_gbl/FIND_LIBRARY_USE_LIB32_PATHS
+   /prop_gbl/FIND_LIBRARY_USE_LIB64_PATHS
+   /prop_gbl/FIND_LIBRARY_USE_LIBX32_PATHS
+   /prop_gbl/FIND_LIBRARY_USE_OPENBSD_VERSIONING
+   /prop_gbl/GENERATOR_IS_MULTI_CONFIG
+   /prop_gbl/GLOBAL_DEPENDS_DEBUG_MODE
+   /prop_gbl/GLOBAL_DEPENDS_NO_CYCLES
+   /prop_gbl/IN_TRY_COMPILE
+   /prop_gbl/JOB_POOLS
+   /prop_gbl/PACKAGES_FOUND
+   /prop_gbl/PACKAGES_NOT_FOUND
+   /prop_gbl/PREDEFINED_TARGETS_FOLDER
+   /prop_gbl/REPORT_UNDEFINED_PROPERTIES
+   /prop_gbl/RULE_LAUNCH_COMPILE
+   /prop_gbl/RULE_LAUNCH_CUSTOM
+   /prop_gbl/RULE_LAUNCH_LINK
+   /prop_gbl/RULE_MESSAGES
+   /prop_gbl/TARGET_ARCHIVES_MAY_BE_SHARED_LIBS
+   /prop_gbl/TARGET_MESSAGES
+   /prop_gbl/TARGET_SUPPORTS_SHARED_LIBS
+   /prop_gbl/USE_FOLDERS
+   /prop_gbl/XCODE_EMIT_EFFECTIVE_PLATFORM_NAME
+
+.. _`Directory Properties`:
+
+Properties on Directories
+=========================
+
+.. toctree::
+   :maxdepth: 1
+
+   /prop_dir/ADDITIONAL_CLEAN_FILES
+   /prop_dir/BINARY_DIR
+   /prop_dir/BUILDSYSTEM_TARGETS
+   /prop_dir/CACHE_VARIABLES
+   /prop_dir/CLEAN_NO_CUSTOM
+   /prop_dir/CMAKE_CONFIGURE_DEPENDS
+   /prop_dir/COMPILE_DEFINITIONS
+   /prop_dir/COMPILE_OPTIONS
+   /prop_dir/DEFINITIONS
+   /prop_dir/EXCLUDE_FROM_ALL
+   /prop_dir/IMPLICIT_DEPENDS_INCLUDE_TRANSFORM
+   /prop_dir/IMPORTED_TARGETS
+   /prop_dir/INCLUDE_DIRECTORIES
+   /prop_dir/INCLUDE_REGULAR_EXPRESSION
+   /prop_dir/INTERPROCEDURAL_OPTIMIZATION
+   /prop_dir/INTERPROCEDURAL_OPTIMIZATION_CONFIG
+   /prop_dir/LABELS
+   /prop_dir/LINK_DIRECTORIES
+   /prop_dir/LINK_OPTIONS
+   /prop_dir/LISTFILE_STACK
+   /prop_dir/MACROS
+   /prop_dir/PARENT_DIRECTORY
+   /prop_dir/RULE_LAUNCH_COMPILE
+   /prop_dir/RULE_LAUNCH_CUSTOM
+   /prop_dir/RULE_LAUNCH_LINK
+   /prop_dir/SOURCE_DIR
+   /prop_dir/SUBDIRECTORIES
+   /prop_dir/TESTS
+   /prop_dir/TEST_INCLUDE_FILES
+   /prop_dir/VARIABLES
+   /prop_dir/VS_GLOBAL_SECTION_POST_section
+   /prop_dir/VS_GLOBAL_SECTION_PRE_section
+   /prop_dir/VS_STARTUP_PROJECT
+
+.. _`Target Properties`:
+
+Properties on Targets
+=====================
+
+.. toctree::
+   :maxdepth: 1
+
+   /prop_tgt/ADDITIONAL_CLEAN_FILES
+   /prop_tgt/AIX_EXPORT_ALL_SYMBOLS
+   /prop_tgt/ALIAS_GLOBAL
+   /prop_tgt/ALIASED_TARGET
+   /prop_tgt/ANDROID_ANT_ADDITIONAL_OPTIONS
+   /prop_tgt/ANDROID_API
+   /prop_tgt/ANDROID_API_MIN
+   /prop_tgt/ANDROID_ARCH
+   /prop_tgt/ANDROID_ASSETS_DIRECTORIES
+   /prop_tgt/ANDROID_GUI
+   /prop_tgt/ANDROID_JAR_DEPENDENCIES
+   /prop_tgt/ANDROID_JAR_DIRECTORIES
+   /prop_tgt/ANDROID_JAVA_SOURCE_DIR
+   /prop_tgt/ANDROID_NATIVE_LIB_DEPENDENCIES
+   /prop_tgt/ANDROID_NATIVE_LIB_DIRECTORIES
+   /prop_tgt/ANDROID_PROCESS_MAX
+   /prop_tgt/ANDROID_PROGUARD
+   /prop_tgt/ANDROID_PROGUARD_CONFIG_PATH
+   /prop_tgt/ANDROID_SECURE_PROPS_PATH
+   /prop_tgt/ANDROID_SKIP_ANT_STEP
+   /prop_tgt/ANDROID_STL_TYPE
+   /prop_tgt/ARCHIVE_OUTPUT_DIRECTORY
+   /prop_tgt/ARCHIVE_OUTPUT_DIRECTORY_CONFIG
+   /prop_tgt/ARCHIVE_OUTPUT_NAME
+   /prop_tgt/ARCHIVE_OUTPUT_NAME_CONFIG
+   /prop_tgt/AUTOGEN_BUILD_DIR
+   /prop_tgt/AUTOGEN_ORIGIN_DEPENDS
+   /prop_tgt/AUTOGEN_PARALLEL
+   /prop_tgt/AUTOGEN_TARGET_DEPENDS
+   /prop_tgt/AUTOMOC
+   /prop_tgt/AUTOMOC_COMPILER_PREDEFINES
+   /prop_tgt/AUTOMOC_DEPEND_FILTERS
+   /prop_tgt/AUTOMOC_EXECUTABLE
+   /prop_tgt/AUTOMOC_MACRO_NAMES
+   /prop_tgt/AUTOMOC_MOC_OPTIONS
+   /prop_tgt/AUTOMOC_PATH_PREFIX
+   /prop_tgt/AUTORCC
+   /prop_tgt/AUTORCC_EXECUTABLE
+   /prop_tgt/AUTORCC_OPTIONS
+   /prop_tgt/AUTOUIC
+   /prop_tgt/AUTOUIC_EXECUTABLE
+   /prop_tgt/AUTOUIC_OPTIONS
+   /prop_tgt/AUTOUIC_SEARCH_PATHS
+   /prop_tgt/BINARY_DIR
+   /prop_tgt/BUILD_RPATH
+   /prop_tgt/BUILD_RPATH_USE_ORIGIN
+   /prop_tgt/BUILD_WITH_INSTALL_NAME_DIR
+   /prop_tgt/BUILD_WITH_INSTALL_RPATH
+   /prop_tgt/BUNDLE
+   /prop_tgt/BUNDLE_EXTENSION
+   /prop_tgt/C_EXTENSIONS
+   /prop_tgt/C_STANDARD
+   /prop_tgt/C_STANDARD_REQUIRED
+   /prop_tgt/COMMON_LANGUAGE_RUNTIME
+   /prop_tgt/COMPATIBLE_INTERFACE_BOOL
+   /prop_tgt/COMPATIBLE_INTERFACE_NUMBER_MAX
+   /prop_tgt/COMPATIBLE_INTERFACE_NUMBER_MIN
+   /prop_tgt/COMPATIBLE_INTERFACE_STRING
+   /prop_tgt/COMPILE_DEFINITIONS
+   /prop_tgt/COMPILE_FEATURES
+   /prop_tgt/COMPILE_FLAGS
+   /prop_tgt/COMPILE_OPTIONS
+   /prop_tgt/COMPILE_PDB_NAME
+   /prop_tgt/COMPILE_PDB_NAME_CONFIG
+   /prop_tgt/COMPILE_PDB_OUTPUT_DIRECTORY
+   /prop_tgt/COMPILE_PDB_OUTPUT_DIRECTORY_CONFIG
+   /prop_tgt/CONFIG_OUTPUT_NAME
+   /prop_tgt/CONFIG_POSTFIX
+   /prop_tgt/CROSSCOMPILING_EMULATOR
+   /prop_tgt/CUDA_ARCHITECTURES
+   /prop_tgt/CUDA_EXTENSIONS
+   /prop_tgt/CUDA_PTX_COMPILATION
+   /prop_tgt/CUDA_RESOLVE_DEVICE_SYMBOLS
+   /prop_tgt/CUDA_RUNTIME_LIBRARY
+   /prop_tgt/CUDA_SEPARABLE_COMPILATION
+   /prop_tgt/CUDA_STANDARD
+   /prop_tgt/CUDA_STANDARD_REQUIRED
+   /prop_tgt/CXX_EXTENSIONS
+   /prop_tgt/CXX_STANDARD
+   /prop_tgt/CXX_STANDARD_REQUIRED
+   /prop_tgt/DEBUG_POSTFIX
+   /prop_tgt/DEFINE_SYMBOL
+   /prop_tgt/DEPLOYMENT_ADDITIONAL_FILES
+   /prop_tgt/DEPLOYMENT_REMOTE_DIRECTORY
+   /prop_tgt/DEPRECATION
+   /prop_tgt/DISABLE_PRECOMPILE_HEADERS
+   /prop_tgt/DOTNET_TARGET_FRAMEWORK
+   /prop_tgt/DOTNET_TARGET_FRAMEWORK_VERSION
+   /prop_tgt/EchoString
+   /prop_tgt/ENABLE_EXPORTS
+   /prop_tgt/EXCLUDE_FROM_ALL
+   /prop_tgt/EXCLUDE_FROM_DEFAULT_BUILD
+   /prop_tgt/EXCLUDE_FROM_DEFAULT_BUILD_CONFIG
+   /prop_tgt/EXPORT_COMPILE_COMMANDS
+   /prop_tgt/EXPORT_NAME
+   /prop_tgt/EXPORT_PROPERTIES
+   /prop_tgt/FOLDER
+   /prop_tgt/Fortran_BUILDING_INSTRINSIC_MODULES
+   /prop_tgt/Fortran_FORMAT
+   /prop_tgt/Fortran_MODULE_DIRECTORY
+   /prop_tgt/Fortran_PREPROCESS
+   /prop_tgt/FRAMEWORK
+   /prop_tgt/FRAMEWORK_MULTI_CONFIG_POSTFIX_CONFIG
+   /prop_tgt/FRAMEWORK_VERSION
+   /prop_tgt/GENERATOR_FILE_NAME
+   /prop_tgt/GHS_INTEGRITY_APP
+   /prop_tgt/GHS_NO_SOURCE_GROUP_FILE
+   /prop_tgt/GNUtoMS
+   /prop_tgt/HAS_CXX
+   /prop_tgt/HIP_ARCHITECTURES
+   /prop_tgt/HIP_EXTENSIONS
+   /prop_tgt/HIP_STANDARD
+   /prop_tgt/HIP_STANDARD_REQUIRED
+   /prop_tgt/IMPLICIT_DEPENDS_INCLUDE_TRANSFORM
+   /prop_tgt/IMPORTED
+   /prop_tgt/IMPORTED_COMMON_LANGUAGE_RUNTIME
+   /prop_tgt/IMPORTED_CONFIGURATIONS
+   /prop_tgt/IMPORTED_GLOBAL
+   /prop_tgt/IMPORTED_IMPLIB
+   /prop_tgt/IMPORTED_IMPLIB_CONFIG
+   /prop_tgt/IMPORTED_LIBNAME
+   /prop_tgt/IMPORTED_LIBNAME_CONFIG
+   /prop_tgt/IMPORTED_LINK_DEPENDENT_LIBRARIES
+   /prop_tgt/IMPORTED_LINK_DEPENDENT_LIBRARIES_CONFIG
+   /prop_tgt/IMPORTED_LINK_INTERFACE_LANGUAGES
+   /prop_tgt/IMPORTED_LINK_INTERFACE_LANGUAGES_CONFIG
+   /prop_tgt/IMPORTED_LINK_INTERFACE_LIBRARIES
+   /prop_tgt/IMPORTED_LINK_INTERFACE_LIBRARIES_CONFIG
+   /prop_tgt/IMPORTED_LINK_INTERFACE_MULTIPLICITY
+   /prop_tgt/IMPORTED_LINK_INTERFACE_MULTIPLICITY_CONFIG
+   /prop_tgt/IMPORTED_LOCATION
+   /prop_tgt/IMPORTED_LOCATION_CONFIG
+   /prop_tgt/IMPORTED_NO_SONAME
+   /prop_tgt/IMPORTED_NO_SONAME_CONFIG
+   /prop_tgt/IMPORTED_OBJECTS
+   /prop_tgt/IMPORTED_OBJECTS_CONFIG
+   /prop_tgt/IMPORTED_SONAME
+   /prop_tgt/IMPORTED_SONAME_CONFIG
+   /prop_tgt/IMPORT_PREFIX
+   /prop_tgt/IMPORT_SUFFIX
+   /prop_tgt/INCLUDE_DIRECTORIES
+   /prop_tgt/INSTALL_NAME_DIR
+   /prop_tgt/INSTALL_REMOVE_ENVIRONMENT_RPATH
+   /prop_tgt/INSTALL_RPATH
+   /prop_tgt/INSTALL_RPATH_USE_LINK_PATH
+   /prop_tgt/INTERFACE_AUTOUIC_OPTIONS
+   /prop_tgt/INTERFACE_COMPILE_DEFINITIONS
+   /prop_tgt/INTERFACE_COMPILE_FEATURES
+   /prop_tgt/INTERFACE_COMPILE_OPTIONS
+   /prop_tgt/INTERFACE_INCLUDE_DIRECTORIES
+   /prop_tgt/INTERFACE_LINK_DEPENDS
+   /prop_tgt/INTERFACE_LINK_DIRECTORIES
+   /prop_tgt/INTERFACE_LINK_LIBRARIES
+   /prop_tgt/INTERFACE_LINK_OPTIONS
+   /prop_tgt/INTERFACE_POSITION_INDEPENDENT_CODE
+   /prop_tgt/INTERFACE_PRECOMPILE_HEADERS
+   /prop_tgt/INTERFACE_SOURCES
+   /prop_tgt/INTERFACE_SYSTEM_INCLUDE_DIRECTORIES
+   /prop_tgt/INTERPROCEDURAL_OPTIMIZATION
+   /prop_tgt/INTERPROCEDURAL_OPTIMIZATION_CONFIG
+   /prop_tgt/IOS_INSTALL_COMBINED
+   /prop_tgt/ISPC_HEADER_DIRECTORY
+   /prop_tgt/ISPC_HEADER_SUFFIX
+   /prop_tgt/ISPC_INSTRUCTION_SETS
+   /prop_tgt/JOB_POOL_COMPILE
+   /prop_tgt/JOB_POOL_LINK
+   /prop_tgt/JOB_POOL_PRECOMPILE_HEADER
+   /prop_tgt/LABELS
+   /prop_tgt/LANG_CLANG_TIDY
+   /prop_tgt/LANG_COMPILER_LAUNCHER
+   /prop_tgt/LANG_CPPCHECK
+   /prop_tgt/LANG_CPPLINT
+   /prop_tgt/LANG_EXTENSIONS
+   /prop_tgt/LANG_INCLUDE_WHAT_YOU_USE
+   /prop_tgt/LANG_LINKER_LAUNCHER
+   /prop_tgt/LANG_STANDARD
+   /prop_tgt/LANG_STANDARD_REQUIRED
+   /prop_tgt/LANG_VISIBILITY_PRESET
+   /prop_tgt/LIBRARY_OUTPUT_DIRECTORY
+   /prop_tgt/LIBRARY_OUTPUT_DIRECTORY_CONFIG
+   /prop_tgt/LIBRARY_OUTPUT_NAME
+   /prop_tgt/LIBRARY_OUTPUT_NAME_CONFIG
+   /prop_tgt/LINK_DEPENDS
+   /prop_tgt/LINK_DEPENDS_NO_SHARED
+   /prop_tgt/LINK_DIRECTORIES
+   /prop_tgt/LINK_FLAGS
+   /prop_tgt/LINK_FLAGS_CONFIG
+   /prop_tgt/LINK_INTERFACE_LIBRARIES
+   /prop_tgt/LINK_INTERFACE_LIBRARIES_CONFIG
+   /prop_tgt/LINK_INTERFACE_MULTIPLICITY
+   /prop_tgt/LINK_INTERFACE_MULTIPLICITY_CONFIG
+   /prop_tgt/LINK_LIBRARIES
+   /prop_tgt/LINK_OPTIONS
+   /prop_tgt/LINK_SEARCH_END_STATIC
+   /prop_tgt/LINK_SEARCH_START_STATIC
+   /prop_tgt/LINK_WHAT_YOU_USE
+   /prop_tgt/LINKER_LANGUAGE
+   /prop_tgt/LOCATION
+   /prop_tgt/LOCATION_CONFIG
+   /prop_tgt/MACHO_COMPATIBILITY_VERSION
+   /prop_tgt/MACHO_CURRENT_VERSION
+   /prop_tgt/MACOSX_BUNDLE
+   /prop_tgt/MACOSX_BUNDLE_INFO_PLIST
+   /prop_tgt/MACOSX_FRAMEWORK_INFO_PLIST
+   /prop_tgt/MACOSX_RPATH
+   /prop_tgt/MANUALLY_ADDED_DEPENDENCIES
+   /prop_tgt/MAP_IMPORTED_CONFIG_CONFIG
+   /prop_tgt/MSVC_RUNTIME_LIBRARY
+   /prop_tgt/NAME
+   /prop_tgt/NO_SONAME
+   /prop_tgt/NO_SYSTEM_FROM_IMPORTED
+   /prop_tgt/OBJC_EXTENSIONS
+   /prop_tgt/OBJC_STANDARD
+   /prop_tgt/OBJC_STANDARD_REQUIRED
+   /prop_tgt/OBJCXX_EXTENSIONS
+   /prop_tgt/OBJCXX_STANDARD
+   /prop_tgt/OBJCXX_STANDARD_REQUIRED
+   /prop_tgt/OPTIMIZE_DEPENDENCIES
+   /prop_tgt/OSX_ARCHITECTURES
+   /prop_tgt/OSX_ARCHITECTURES_CONFIG
+   /prop_tgt/OUTPUT_NAME
+   /prop_tgt/OUTPUT_NAME_CONFIG
+   /prop_tgt/PCH_WARN_INVALID
+   /prop_tgt/PCH_INSTANTIATE_TEMPLATES
+   /prop_tgt/PDB_NAME
+   /prop_tgt/PDB_NAME_CONFIG
+   /prop_tgt/PDB_OUTPUT_DIRECTORY
+   /prop_tgt/PDB_OUTPUT_DIRECTORY_CONFIG
+   /prop_tgt/POSITION_INDEPENDENT_CODE
+   /prop_tgt/PRECOMPILE_HEADERS
+   /prop_tgt/PRECOMPILE_HEADERS_REUSE_FROM
+   /prop_tgt/PREFIX
+   /prop_tgt/PRIVATE_HEADER
+   /prop_tgt/PROJECT_LABEL
+   /prop_tgt/PUBLIC_HEADER
+   /prop_tgt/RESOURCE
+   /prop_tgt/RULE_LAUNCH_COMPILE
+   /prop_tgt/RULE_LAUNCH_CUSTOM
+   /prop_tgt/RULE_LAUNCH_LINK
+   /prop_tgt/RUNTIME_OUTPUT_DIRECTORY
+   /prop_tgt/RUNTIME_OUTPUT_DIRECTORY_CONFIG
+   /prop_tgt/RUNTIME_OUTPUT_NAME
+   /prop_tgt/RUNTIME_OUTPUT_NAME_CONFIG
+   /prop_tgt/SKIP_BUILD_RPATH
+   /prop_tgt/SOURCE_DIR
+   /prop_tgt/SOURCES
+   /prop_tgt/SOVERSION
+   /prop_tgt/STATIC_LIBRARY_FLAGS
+   /prop_tgt/STATIC_LIBRARY_FLAGS_CONFIG
+   /prop_tgt/STATIC_LIBRARY_OPTIONS
+   /prop_tgt/SUFFIX
+   /prop_tgt/Swift_DEPENDENCIES_FILE
+   /prop_tgt/Swift_LANGUAGE_VERSION
+   /prop_tgt/Swift_MODULE_DIRECTORY
+   /prop_tgt/Swift_MODULE_NAME
+   /prop_tgt/TYPE
+   /prop_tgt/UNITY_BUILD
+   /prop_tgt/UNITY_BUILD_BATCH_SIZE
+   /prop_tgt/UNITY_BUILD_CODE_AFTER_INCLUDE
+   /prop_tgt/UNITY_BUILD_CODE_BEFORE_INCLUDE
+   /prop_tgt/UNITY_BUILD_MODE
+   /prop_tgt/UNITY_BUILD_UNIQUE_ID
+   /prop_tgt/VERSION
+   /prop_tgt/VISIBILITY_INLINES_HIDDEN
+   /prop_tgt/VS_CONFIGURATION_TYPE
+   /prop_tgt/VS_DEBUGGER_COMMAND
+   /prop_tgt/VS_DEBUGGER_COMMAND_ARGUMENTS
+   /prop_tgt/VS_DEBUGGER_ENVIRONMENT
+   /prop_tgt/VS_DEBUGGER_WORKING_DIRECTORY
+   /prop_tgt/VS_DESKTOP_EXTENSIONS_VERSION
+   /prop_tgt/VS_DOTNET_DOCUMENTATION_FILE
+   /prop_tgt/VS_DOTNET_REFERENCE_refname
+   /prop_tgt/VS_DOTNET_REFERENCEPROP_refname_TAG_tagname
+   /prop_tgt/VS_DOTNET_REFERENCES
+   /prop_tgt/VS_DOTNET_REFERENCES_COPY_LOCAL
+   /prop_tgt/VS_DOTNET_TARGET_FRAMEWORK_VERSION
+   /prop_tgt/VS_DPI_AWARE
+   /prop_tgt/VS_GLOBAL_KEYWORD
+   /prop_tgt/VS_GLOBAL_PROJECT_TYPES
+   /prop_tgt/VS_GLOBAL_ROOTNAMESPACE
+   /prop_tgt/VS_GLOBAL_variable
+   /prop_tgt/VS_IOT_EXTENSIONS_VERSION
+   /prop_tgt/VS_IOT_STARTUP_TASK
+   /prop_tgt/VS_JUST_MY_CODE_DEBUGGING
+   /prop_tgt/VS_KEYWORD
+   /prop_tgt/VS_MOBILE_EXTENSIONS_VERSION
+   /prop_tgt/VS_NO_SOLUTION_DEPLOY
+   /prop_tgt/VS_PACKAGE_REFERENCES
+   /prop_tgt/VS_PLATFORM_TOOLSET
+   /prop_tgt/VS_PROJECT_IMPORT
+   /prop_tgt/VS_SCC_AUXPATH
+   /prop_tgt/VS_SCC_LOCALPATH
+   /prop_tgt/VS_SCC_PROJECTNAME
+   /prop_tgt/VS_SCC_PROVIDER
+   /prop_tgt/VS_SDK_REFERENCES
+   /prop_tgt/VS_SOLUTION_DEPLOY
+   /prop_tgt/VS_SOURCE_SETTINGS_tool
+   /prop_tgt/VS_USER_PROPS
+   /prop_tgt/VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION
+   /prop_tgt/VS_WINRT_COMPONENT
+   /prop_tgt/VS_WINRT_EXTENSIONS
+   /prop_tgt/VS_WINRT_REFERENCES
+   /prop_tgt/WIN32_EXECUTABLE
+   /prop_tgt/WINDOWS_EXPORT_ALL_SYMBOLS
+   /prop_tgt/XCODE_ATTRIBUTE_an-attribute
+   /prop_tgt/XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY
+   /prop_tgt/XCODE_EMBED_FRAMEWORKS_REMOVE_HEADERS_ON_COPY
+   /prop_tgt/XCODE_EMBED_type
+   /prop_tgt/XCODE_EMBED_type_CODE_SIGN_ON_COPY
+   /prop_tgt/XCODE_EMBED_type_PATH
+   /prop_tgt/XCODE_EMBED_type_REMOVE_HEADERS_ON_COPY
+   /prop_tgt/XCODE_EXPLICIT_FILE_TYPE
+   /prop_tgt/XCODE_GENERATE_SCHEME
+   /prop_tgt/XCODE_LINK_BUILD_PHASE_MODE
+   /prop_tgt/XCODE_PRODUCT_TYPE
+   /prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER
+   /prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN
+   /prop_tgt/XCODE_SCHEME_ARGUMENTS
+   /prop_tgt/XCODE_SCHEME_DEBUG_AS_ROOT
+   /prop_tgt/XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING
+   /prop_tgt/XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER
+   /prop_tgt/XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS
+   /prop_tgt/XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE
+   /prop_tgt/XCODE_SCHEME_ENVIRONMENT
+   /prop_tgt/XCODE_SCHEME_EXECUTABLE
+   /prop_tgt/XCODE_SCHEME_GUARD_MALLOC
+   /prop_tgt/XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP
+   /prop_tgt/XCODE_SCHEME_MALLOC_GUARD_EDGES
+   /prop_tgt/XCODE_SCHEME_MALLOC_SCRIBBLE
+   /prop_tgt/XCODE_SCHEME_MALLOC_STACK
+   /prop_tgt/XCODE_SCHEME_THREAD_SANITIZER
+   /prop_tgt/XCODE_SCHEME_THREAD_SANITIZER_STOP
+   /prop_tgt/XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER
+   /prop_tgt/XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP
+   /prop_tgt/XCODE_SCHEME_WORKING_DIRECTORY
+   /prop_tgt/XCODE_SCHEME_ZOMBIE_OBJECTS
+   /prop_tgt/XCTEST
+
+.. _`Test Properties`:
+
+Properties on Tests
+===================
+
+.. toctree::
+   :maxdepth: 1
+
+   /prop_test/ATTACHED_FILES
+   /prop_test/ATTACHED_FILES_ON_FAIL
+   /prop_test/COST
+   /prop_test/DEPENDS
+   /prop_test/DISABLED
+   /prop_test/ENVIRONMENT
+   /prop_test/ENVIRONMENT_MODIFICATION
+   /prop_test/FAIL_REGULAR_EXPRESSION
+   /prop_test/FIXTURES_CLEANUP
+   /prop_test/FIXTURES_REQUIRED
+   /prop_test/FIXTURES_SETUP
+   /prop_test/LABELS
+   /prop_test/MEASUREMENT
+   /prop_test/PASS_REGULAR_EXPRESSION
+   /prop_test/PROCESSOR_AFFINITY
+   /prop_test/PROCESSORS
+   /prop_test/REQUIRED_FILES
+   /prop_test/RESOURCE_GROUPS
+   /prop_test/RESOURCE_LOCK
+   /prop_test/RUN_SERIAL
+   /prop_test/SKIP_REGULAR_EXPRESSION
+   /prop_test/SKIP_RETURN_CODE
+   /prop_test/TIMEOUT
+   /prop_test/TIMEOUT_AFTER_MATCH
+   /prop_test/WILL_FAIL
+   /prop_test/WORKING_DIRECTORY
+
+.. _`Source File Properties`:
+
+Properties on Source Files
+==========================
+
+.. toctree::
+   :maxdepth: 1
+
+   /prop_sf/ABSTRACT
+   /prop_sf/AUTORCC_OPTIONS
+   /prop_sf/AUTOUIC_OPTIONS
+   /prop_sf/COMPILE_DEFINITIONS
+   /prop_sf/COMPILE_FLAGS
+   /prop_sf/COMPILE_OPTIONS
+   /prop_sf/EXTERNAL_OBJECT
+   /prop_sf/Fortran_FORMAT
+   /prop_sf/Fortran_PREPROCESS
+   /prop_sf/GENERATED
+   /prop_sf/HEADER_FILE_ONLY
+   /prop_sf/INCLUDE_DIRECTORIES
+   /prop_sf/KEEP_EXTENSION
+   /prop_sf/LABELS
+   /prop_sf/LANGUAGE
+   /prop_sf/LOCATION
+   /prop_sf/MACOSX_PACKAGE_LOCATION
+   /prop_sf/OBJECT_DEPENDS
+   /prop_sf/OBJECT_OUTPUTS
+   /prop_sf/SKIP_AUTOGEN
+   /prop_sf/SKIP_AUTOMOC
+   /prop_sf/SKIP_AUTORCC
+   /prop_sf/SKIP_AUTOUIC
+   /prop_sf/SKIP_PRECOMPILE_HEADERS
+   /prop_sf/SKIP_UNITY_BUILD_INCLUSION
+   /prop_sf/Swift_DEPENDENCIES_FILE
+   /prop_sf/Swift_DIAGNOSTICS_FILE
+   /prop_sf/SYMBOLIC
+   /prop_sf/UNITY_GROUP
+   /prop_sf/VS_COPY_TO_OUT_DIR
+   /prop_sf/VS_CSHARP_tagname
+   /prop_sf/VS_DEPLOYMENT_CONTENT
+   /prop_sf/VS_DEPLOYMENT_LOCATION
+   /prop_sf/VS_INCLUDE_IN_VSIX
+   /prop_sf/VS_RESOURCE_GENERATOR
+   /prop_sf/VS_SETTINGS
+   /prop_sf/VS_SHADER_DISABLE_OPTIMIZATIONS
+   /prop_sf/VS_SHADER_ENABLE_DEBUG
+   /prop_sf/VS_SHADER_ENTRYPOINT
+   /prop_sf/VS_SHADER_FLAGS
+   /prop_sf/VS_SHADER_MODEL
+   /prop_sf/VS_SHADER_OBJECT_FILE_NAME
+   /prop_sf/VS_SHADER_OUTPUT_HEADER_FILE
+   /prop_sf/VS_SHADER_TYPE
+   /prop_sf/VS_SHADER_VARIABLE_NAME
+   /prop_sf/VS_TOOL_OVERRIDE.rst
+   /prop_sf/VS_XAML_TYPE
+   /prop_sf/WRAP_EXCLUDE
+   /prop_sf/XCODE_EXPLICIT_FILE_TYPE
+   /prop_sf/XCODE_FILE_ATTRIBUTES
+   /prop_sf/XCODE_LAST_KNOWN_FILE_TYPE
+
+.. _`Cache Entry Properties`:
+
+Properties on Cache Entries
+===========================
+
+.. toctree::
+   :maxdepth: 1
+
+   /prop_cache/ADVANCED
+   /prop_cache/HELPSTRING
+   /prop_cache/MODIFIED
+   /prop_cache/STRINGS
+   /prop_cache/TYPE
+   /prop_cache/VALUE
+
+.. _`Installed File Properties`:
+
+Properties on Installed Files
+=============================
+
+.. toctree::
+   :maxdepth: 1
+
+   /prop_inst/CPACK_DESKTOP_SHORTCUTS.rst
+   /prop_inst/CPACK_NEVER_OVERWRITE.rst
+   /prop_inst/CPACK_PERMANENT.rst
+   /prop_inst/CPACK_START_MENU_SHORTCUTS.rst
+   /prop_inst/CPACK_STARTUP_SHORTCUTS.rst
+   /prop_inst/CPACK_WIX_ACL.rst
+
+
+Deprecated Properties on Directories
+====================================
+
+.. toctree::
+   :maxdepth: 1
+
+   /prop_dir/ADDITIONAL_MAKE_CLEAN_FILES
+   /prop_dir/COMPILE_DEFINITIONS_CONFIG
+   /prop_dir/TEST_INCLUDE_FILE
+
+
+Deprecated Properties on Targets
+================================
+
+.. toctree::
+   :maxdepth: 1
+
+   /prop_tgt/COMPILE_DEFINITIONS_CONFIG
+   /prop_tgt/POST_INSTALL_SCRIPT
+   /prop_tgt/PRE_INSTALL_SCRIPT
+
+
+Deprecated Properties on Source Files
+=====================================
+
+.. toctree::
+   :maxdepth: 1
+
+   /prop_sf/COMPILE_DEFINITIONS_CONFIG
diff --git a/share/cmake-3.22/Help/manual/cmake-qt.7.rst b/share/cmake-3.22/Help/manual/cmake-qt.7.rst
new file mode 100644
index 0000000..f156f95
--- /dev/null
+++ b/share/cmake-3.22/Help/manual/cmake-qt.7.rst
@@ -0,0 +1,262 @@
+.. cmake-manual-description: CMake Qt Features Reference
+
+cmake-qt(7)
+***********
+
+.. only:: html
+
+   .. contents::
+
+Introduction
+============
+
+CMake can find and use Qt 4 and Qt 5 libraries.  The Qt 4 libraries are found
+by the :module:`FindQt4` find-module shipped with CMake, whereas the
+Qt 5 libraries are found using "Config-file Packages" shipped with Qt 5. See
+:manual:`cmake-packages(7)` for more information about CMake packages, and
+see `the Qt cmake manual <http://qt-project.org/doc/qt-5/cmake-manual.html>`_
+for your Qt version.
+
+Qt 4 and Qt 5 may be used together in the same
+:manual:`CMake buildsystem <cmake-buildsystem(7)>`:
+
+.. code-block:: cmake
+
+  cmake_minimum_required(VERSION 3.8.0 FATAL_ERROR)
+
+  project(Qt4And5)
+
+  set(CMAKE_AUTOMOC ON)
+
+  find_package(Qt5 COMPONENTS Widgets DBus REQUIRED)
+  add_executable(publisher publisher.cpp)
+  target_link_libraries(publisher Qt5::Widgets Qt5::DBus)
+
+  find_package(Qt4 REQUIRED)
+  add_executable(subscriber subscriber.cpp)
+  target_link_libraries(subscriber Qt4::QtGui Qt4::QtDBus)
+
+A CMake target may not link to both Qt 4 and Qt 5.  A diagnostic is issued if
+this is attempted or results from transitive target dependency evaluation.
+
+Qt Build Tools
+==============
+
+Qt relies on some bundled tools for code generation, such as ``moc`` for
+meta-object code generation, ``uic`` for widget layout and population,
+and ``rcc`` for virtual file system content generation.  These tools may be
+automatically invoked by :manual:`cmake(1)` if the appropriate conditions
+are met.  The automatic tool invocation may be used with both Qt 4 and Qt 5.
+
+.. _`Qt AUTOMOC`:
+
+AUTOMOC
+^^^^^^^
+
+The :prop_tgt:`AUTOMOC` target property controls whether :manual:`cmake(1)`
+inspects the C++ files in the target to determine if they require ``moc`` to
+be run, and to create rules to execute ``moc`` at the appropriate time.
+
+If a macro from :prop_tgt:`AUTOMOC_MACRO_NAMES` is found in a header file,
+``moc`` will be run on the file.  The result will be put into a file named
+according to ``moc_<basename>.cpp``.
+If the macro is found in a C++ implementation
+file, the moc output will be put into a file named according to
+``<basename>.moc``, following the Qt conventions.  The ``<basename>.moc`` must
+be included by the user in the C++ implementation file with a preprocessor
+``#include``.
+
+Included ``moc_*.cpp`` and ``*.moc`` files will be generated in the
+``<AUTOGEN_BUILD_DIR>/include`` directory which is
+automatically added to the target's :prop_tgt:`INCLUDE_DIRECTORIES`.
+
+* This differs from CMake 3.7 and below; see their documentation for details.
+
+* For :prop_gbl:`multi configuration generators <GENERATOR_IS_MULTI_CONFIG>`,
+  the include directory is ``<AUTOGEN_BUILD_DIR>/include_<CONFIG>``.
+
+* See :prop_tgt:`AUTOGEN_BUILD_DIR`.
+
+Not included ``moc_<basename>.cpp`` files will be generated in custom
+folders to avoid name collisions and included in a separate
+file which is compiled into the target, named either
+``<AUTOGEN_BUILD_DIR>/mocs_compilation.cpp`` or
+``<AUTOGEN_BUILD_DIR>/mocs_compilation_$<CONFIG>.cpp``.
+
+* See :prop_tgt:`AUTOGEN_BUILD_DIR`.
+
+The ``moc`` command line will consume the :prop_tgt:`COMPILE_DEFINITIONS` and
+:prop_tgt:`INCLUDE_DIRECTORIES` target properties from the target it is being
+invoked for, and for the appropriate build configuration.
+
+The :prop_tgt:`AUTOMOC` target property may be pre-set for all
+following targets by setting the :variable:`CMAKE_AUTOMOC` variable.  The
+:prop_tgt:`AUTOMOC_MOC_OPTIONS` target property may be populated to set
+options to pass to ``moc``. The :variable:`CMAKE_AUTOMOC_MOC_OPTIONS`
+variable may be populated to pre-set the options for all following targets.
+
+Additional macro names to search for can be added to
+:prop_tgt:`AUTOMOC_MACRO_NAMES`.
+
+Additional ``moc`` dependency file names can be extracted from source code
+by using :prop_tgt:`AUTOMOC_DEPEND_FILTERS`.
+
+Source C++ files can be excluded from :prop_tgt:`AUTOMOC` processing by
+enabling :prop_sf:`SKIP_AUTOMOC` or the broader :prop_sf:`SKIP_AUTOGEN`.
+
+.. _`Qt AUTOUIC`:
+
+AUTOUIC
+^^^^^^^
+
+The :prop_tgt:`AUTOUIC` target property controls whether :manual:`cmake(1)`
+inspects the C++ files in the target to determine if they require ``uic`` to
+be run, and to create rules to execute ``uic`` at the appropriate time.
+
+If a preprocessor ``#include`` directive is found which matches
+``<path>ui_<basename>.h``, and a ``<basename>.ui`` file exists,
+then ``uic`` will be executed to generate the appropriate file.
+The ``<basename>.ui`` file is searched for in the following places
+
+1. ``<source_dir>/<basename>.ui``
+2. ``<source_dir>/<path><basename>.ui``
+3. ``<AUTOUIC_SEARCH_PATHS>/<basename>.ui``
+4. ``<AUTOUIC_SEARCH_PATHS>/<path><basename>.ui``
+
+where ``<source_dir>`` is the directory of the C++ file and
+:prop_tgt:`AUTOUIC_SEARCH_PATHS` is a list of additional search paths.
+
+The generated generated ``ui_*.h`` files are placed in the
+``<AUTOGEN_BUILD_DIR>/include`` directory which is
+automatically added to the target's :prop_tgt:`INCLUDE_DIRECTORIES`.
+
+* This differs from CMake 3.7 and below; see their documentation for details.
+
+* For :prop_gbl:`multi configuration generators <GENERATOR_IS_MULTI_CONFIG>`,
+  the include directory is ``<AUTOGEN_BUILD_DIR>/include_<CONFIG>``.
+
+* See :prop_tgt:`AUTOGEN_BUILD_DIR`.
+
+The :prop_tgt:`AUTOUIC` target property may be pre-set for all following
+targets by setting the :variable:`CMAKE_AUTOUIC` variable.  The
+:prop_tgt:`AUTOUIC_OPTIONS` target property may be populated to set options
+to pass to ``uic``.  The :variable:`CMAKE_AUTOUIC_OPTIONS` variable may be
+populated to pre-set the options for all following targets.  The
+:prop_sf:`AUTOUIC_OPTIONS` source file property may be set on the
+``<basename>.ui`` file to set particular options for the file.  This
+overrides options from the :prop_tgt:`AUTOUIC_OPTIONS` target property.
+
+A target may populate the :prop_tgt:`INTERFACE_AUTOUIC_OPTIONS` target
+property with options that should be used when invoking ``uic``.  This must be
+consistent with the :prop_tgt:`AUTOUIC_OPTIONS` target property content of the
+depender target.  The :variable:`CMAKE_DEBUG_TARGET_PROPERTIES` variable may
+be used to track the origin target of such
+:prop_tgt:`INTERFACE_AUTOUIC_OPTIONS`.  This means that a library which
+provides an alternative translation system for Qt may specify options which
+should be used when running ``uic``:
+
+.. code-block:: cmake
+
+  add_library(KI18n klocalizedstring.cpp)
+  target_link_libraries(KI18n Qt5::Core)
+
+  # KI18n uses the tr2i18n() function instead of tr().  That function is
+  # declared in the klocalizedstring.h header.
+  set(autouic_options
+    -tr tr2i18n
+    -include klocalizedstring.h
+  )
+
+  set_property(TARGET KI18n APPEND PROPERTY
+    INTERFACE_AUTOUIC_OPTIONS ${autouic_options}
+  )
+
+A consuming project linking to the target exported from upstream automatically
+uses appropriate options when ``uic`` is run by :prop_tgt:`AUTOUIC`, as a
+result of linking with the :prop_tgt:`IMPORTED` target:
+
+.. code-block:: cmake
+
+  set(CMAKE_AUTOUIC ON)
+  # Uses a libwidget.ui file:
+  add_library(LibWidget libwidget.cpp)
+  target_link_libraries(LibWidget
+    KF5::KI18n
+    Qt5::Widgets
+  )
+
+Source files can be excluded from :prop_tgt:`AUTOUIC` processing by
+enabling :prop_sf:`SKIP_AUTOUIC` or the broader :prop_sf:`SKIP_AUTOGEN`.
+
+.. _`Qt AUTORCC`:
+
+AUTORCC
+^^^^^^^
+
+The :prop_tgt:`AUTORCC` target property controls whether :manual:`cmake(1)`
+creates rules to execute ``rcc`` at the appropriate time on source files
+which have the suffix ``.qrc``.
+
+.. code-block:: cmake
+
+  add_executable(myexe main.cpp resource_file.qrc)
+
+The :prop_tgt:`AUTORCC` target property may be pre-set for all following targets
+by setting the :variable:`CMAKE_AUTORCC` variable.  The
+:prop_tgt:`AUTORCC_OPTIONS` target property may be populated to set options
+to pass to ``rcc``.  The :variable:`CMAKE_AUTORCC_OPTIONS` variable may be
+populated to pre-set the options for all following targets.  The
+:prop_sf:`AUTORCC_OPTIONS` source file property may be set on the
+``<name>.qrc`` file to set particular options for the file.  This
+overrides options from the :prop_tgt:`AUTORCC_OPTIONS` target property.
+
+Source files can be excluded from :prop_tgt:`AUTORCC` processing by
+enabling :prop_sf:`SKIP_AUTORCC` or the broader :prop_sf:`SKIP_AUTOGEN`.
+
+The ``<ORIGIN>_autogen`` target
+===============================
+
+The ``moc`` and ``uic`` tools are executed as part of a synthesized
+``<ORIGIN>_autogen`` :command:`custom target <add_custom_target>` generated by
+CMake.  By default that ``<ORIGIN>_autogen`` target inherits the dependencies
+of the ``<ORIGIN>`` target (see :prop_tgt:`AUTOGEN_ORIGIN_DEPENDS`).
+Target dependencies may be added to the ``<ORIGIN>_autogen`` target by adding
+them to the :prop_tgt:`AUTOGEN_TARGET_DEPENDS` target property.
+
+Visual Studio Generators
+========================
+
+When using the :manual:`Visual Studio generators <cmake-generators(7)>`, CMake
+generates a ``PRE_BUILD`` :command:`custom command <add_custom_command>`
+instead of the ``<ORIGIN>_autogen`` :command:`custom target <add_custom_target>`
+(for :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`).
+This isn't always possible though and
+an ``<ORIGIN>_autogen`` :command:`custom target <add_custom_target>` is used,
+when either
+
+- the ``<ORIGIN>`` target depends on :prop_sf:`GENERATED` files which aren't
+  excluded from :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC` by
+  :prop_sf:`SKIP_AUTOMOC`, :prop_sf:`SKIP_AUTOUIC`, :prop_sf:`SKIP_AUTOGEN`
+  or :policy:`CMP0071`
+- :prop_tgt:`AUTOGEN_TARGET_DEPENDS` lists a source file
+- :variable:`CMAKE_GLOBAL_AUTOGEN_TARGET` is enabled
+
+qtmain.lib on Windows
+=====================
+
+The Qt 4 and 5 :prop_tgt:`IMPORTED` targets for the QtGui libraries specify
+that the qtmain.lib static library shipped with Qt will be linked by all
+dependent executables which have the :prop_tgt:`WIN32_EXECUTABLE` enabled.
+
+To disable this behavior, enable the ``Qt5_NO_LINK_QTMAIN`` target property for
+Qt 5 based targets or ``QT4_NO_LINK_QTMAIN`` target property for Qt 4 based
+targets.
+
+.. code-block:: cmake
+
+  add_executable(myexe WIN32 main.cpp)
+  target_link_libraries(myexe Qt4::QtGui)
+
+  add_executable(myexe_no_qtmain WIN32 main_no_qtmain.cpp)
+  set_property(TARGET main_no_qtmain PROPERTY QT4_NO_LINK_QTMAIN ON)
+  target_link_libraries(main_no_qtmain Qt4::QtGui)
diff --git a/share/cmake-3.22/Help/manual/cmake-server.7.rst b/share/cmake-3.22/Help/manual/cmake-server.7.rst
new file mode 100644
index 0000000..6c8d0f4
--- /dev/null
+++ b/share/cmake-3.22/Help/manual/cmake-server.7.rst
@@ -0,0 +1,7 @@
+.. cmake-manual-description: CMake Server
+
+cmake-server(7)
+***************
+
+The :manual:`cmake(1)` server mode has been removed since CMake 3.20.
+Clients should use the :manual:`cmake-file-api(7)` instead.
diff --git a/share/cmake-3.22/Help/manual/cmake-toolchains.7.rst b/share/cmake-3.22/Help/manual/cmake-toolchains.7.rst
new file mode 100644
index 0000000..a941310
--- /dev/null
+++ b/share/cmake-3.22/Help/manual/cmake-toolchains.7.rst
@@ -0,0 +1,672 @@
+.. cmake-manual-description: CMake Toolchains Reference
+
+cmake-toolchains(7)
+*******************
+
+.. only:: html
+
+   .. contents::
+
+Introduction
+============
+
+CMake uses a toolchain of utilities to compile, link libraries and create
+archives, and other tasks to drive the build. The toolchain utilities available
+are determined by the languages enabled. In normal builds, CMake automatically
+determines the toolchain for host builds based on system introspection and
+defaults. In cross-compiling scenarios, a toolchain file may be specified
+with information about compiler and utility paths.
+
+Languages
+=========
+
+Languages are enabled by the :command:`project` command.  Language-specific
+built-in variables, such as
+:variable:`CMAKE_CXX_COMPILER <CMAKE_<LANG>_COMPILER>`,
+:variable:`CMAKE_CXX_COMPILER_ID <CMAKE_<LANG>_COMPILER_ID>` etc are set by
+invoking the :command:`project` command.  If no project command
+is in the top-level CMakeLists file, one will be implicitly generated. By default
+the enabled languages are ``C`` and ``CXX``:
+
+.. code-block:: cmake
+
+  project(C_Only C)
+
+A special value of ``NONE`` can also be used with the :command:`project` command
+to enable no languages:
+
+.. code-block:: cmake
+
+  project(MyProject NONE)
+
+The :command:`enable_language` command can be used to enable languages after the
+:command:`project` command:
+
+.. code-block:: cmake
+
+  enable_language(CXX)
+
+When a language is enabled, CMake finds a compiler for that language, and
+determines some information, such as the vendor and version of the compiler,
+the target architecture and bitwidth, the location of corresponding utilities
+etc.
+
+The :prop_gbl:`ENABLED_LANGUAGES` global property contains the languages which
+are currently enabled.
+
+Variables and Properties
+========================
+
+Several variables relate to the language components of a toolchain which are
+enabled. :variable:`CMAKE_<LANG>_COMPILER` is the full path to the compiler used
+for ``<LANG>``. :variable:`CMAKE_<LANG>_COMPILER_ID` is the identifier used
+by CMake for the compiler and :variable:`CMAKE_<LANG>_COMPILER_VERSION` is the
+version of the compiler.
+
+The :variable:`CMAKE_<LANG>_FLAGS` variables and the configuration-specific
+equivalents contain flags that will be added to the compile command when
+compiling a file of a particular language.
+
+As the linker is invoked by the compiler driver, CMake needs a way to determine
+which compiler to use to invoke the linker. This is calculated by the
+:prop_sf:`LANGUAGE` of source files in the target, and in the case of static
+libraries, the language of the dependent libraries. The choice CMake makes may
+be overridden with the :prop_tgt:`LINKER_LANGUAGE` target property.
+
+Toolchain Features
+==================
+
+CMake provides the :command:`try_compile` command and wrapper macros such as
+:module:`CheckCXXSourceCompiles`, :module:`CheckCXXSymbolExists` and
+:module:`CheckIncludeFile` to test capability and availability of various
+toolchain features. These APIs test the toolchain in some way and cache the
+result so that the test does not have to be performed again the next time
+CMake runs.
+
+Some toolchain features have built-in handling in CMake, and do not require
+compile-tests. For example, :prop_tgt:`POSITION_INDEPENDENT_CODE` allows
+specifying that a target should be built as position-independent code, if
+the compiler supports that feature. The :prop_tgt:`<LANG>_VISIBILITY_PRESET`
+and :prop_tgt:`VISIBILITY_INLINES_HIDDEN` target properties add flags for
+hidden visibility, if supported by the compiler.
+
+.. _`Cross Compiling Toolchain`:
+
+Cross Compiling
+===============
+
+If :manual:`cmake(1)` is invoked with the command line parameter
+``--toolchain path/to/file`` or ``-DCMAKE_TOOLCHAIN_FILE=path/to/file``, the
+file will be loaded early to set values for the compilers.
+The :variable:`CMAKE_CROSSCOMPILING` variable is set to true when CMake is
+cross-compiling.
+
+Note that using the :variable:`CMAKE_SOURCE_DIR` or :variable:`CMAKE_BINARY_DIR`
+variables inside a toolchain file is typically undesirable.  The toolchain
+file is used in contexts where these variables have different values when used
+in different places (e.g. as part of a call to :command:`try_compile`).  In most
+cases, where there is a need to evaluate paths inside a toolchain file, the more
+appropriate variable to use would be :variable:`CMAKE_CURRENT_LIST_DIR`, since
+it always has an unambiguous, predictable value.
+
+Cross Compiling for Linux
+-------------------------
+
+A typical cross-compiling toolchain for Linux has content such
+as:
+
+.. code-block:: cmake
+
+  set(CMAKE_SYSTEM_NAME Linux)
+  set(CMAKE_SYSTEM_PROCESSOR arm)
+
+  set(CMAKE_SYSROOT /home/devel/rasp-pi-rootfs)
+  set(CMAKE_STAGING_PREFIX /home/devel/stage)
+
+  set(tools /home/devel/gcc-4.7-linaro-rpi-gnueabihf)
+  set(CMAKE_C_COMPILER ${tools}/bin/arm-linux-gnueabihf-gcc)
+  set(CMAKE_CXX_COMPILER ${tools}/bin/arm-linux-gnueabihf-g++)
+
+  set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+  set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+  set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+  set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
+
+The :variable:`CMAKE_SYSTEM_NAME` is the CMake-identifier of the target platform
+to build for.
+
+The :variable:`CMAKE_SYSTEM_PROCESSOR` is the CMake-identifier of the target architecture
+to build for.
+
+The :variable:`CMAKE_SYSROOT` is optional, and may be specified if a sysroot
+is available.
+
+The :variable:`CMAKE_STAGING_PREFIX` is also optional. It may be used to specify
+a path on the host to install to. The :variable:`CMAKE_INSTALL_PREFIX` is always
+the runtime installation location, even when cross-compiling.
+
+The :variable:`CMAKE_<LANG>_COMPILER` variables may be set to full paths, or to
+names of compilers to search for in standard locations.   For toolchains that
+do not support linking binaries without custom flags or scripts one may set
+the :variable:`CMAKE_TRY_COMPILE_TARGET_TYPE` variable to ``STATIC_LIBRARY``
+to tell CMake not to try to link executables during its checks.
+
+CMake ``find_*`` commands will look in the sysroot, and the :variable:`CMAKE_FIND_ROOT_PATH`
+entries by default in all cases, as well as looking in the host system root prefix.
+Although this can be controlled on a case-by-case basis, when cross-compiling, it
+can be useful to exclude looking in either the host or the target for particular
+artifacts. Generally, includes, libraries and packages should be found in the
+target system prefixes, whereas executables which must be run as part of the build
+should be found only on the host and not on the target. This is the purpose of
+the ``CMAKE_FIND_ROOT_PATH_MODE_*`` variables.
+
+.. _`Cray Cross-Compile`:
+
+Cross Compiling for the Cray Linux Environment
+----------------------------------------------
+
+Cross compiling for compute nodes in the Cray Linux Environment can be done
+without needing a separate toolchain file.  Specifying
+``-DCMAKE_SYSTEM_NAME=CrayLinuxEnvironment`` on the CMake command line will
+ensure that the appropriate build settings and search paths are configured.
+The platform will pull its configuration from the current environment
+variables and will configure a project to use the compiler wrappers from the
+Cray Programming Environment's ``PrgEnv-*`` modules if present and loaded.
+
+The default configuration of the Cray Programming Environment is to only
+support static libraries.  This can be overridden and shared libraries
+enabled by setting the ``CRAYPE_LINK_TYPE`` environment variable to
+``dynamic``.
+
+Running CMake without specifying :variable:`CMAKE_SYSTEM_NAME` will
+run the configure step in host mode assuming a standard Linux environment.
+If not overridden, the ``PrgEnv-*`` compiler wrappers will end up getting used,
+which if targeting the either the login node or compute node, is likely not the
+desired behavior.  The exception to this would be if you are building directly
+on a NID instead of cross-compiling from a login node. If trying to build
+software for a login node, you will need to either first unload the
+currently loaded ``PrgEnv-*`` module or explicitly tell CMake to use the
+system compilers in ``/usr/bin`` instead of the Cray wrappers.  If instead
+targeting a compute node is desired, just specify the
+:variable:`CMAKE_SYSTEM_NAME` as mentioned above.
+
+Cross Compiling using Clang
+---------------------------
+
+Some compilers such as Clang are inherently cross compilers.
+The :variable:`CMAKE_<LANG>_COMPILER_TARGET` can be set to pass a
+value to those supported compilers when compiling:
+
+.. code-block:: cmake
+
+  set(CMAKE_SYSTEM_NAME Linux)
+  set(CMAKE_SYSTEM_PROCESSOR arm)
+
+  set(triple arm-linux-gnueabihf)
+
+  set(CMAKE_C_COMPILER clang)
+  set(CMAKE_C_COMPILER_TARGET ${triple})
+  set(CMAKE_CXX_COMPILER clang++)
+  set(CMAKE_CXX_COMPILER_TARGET ${triple})
+
+Similarly, some compilers do not ship their own supplementary utilities
+such as linkers, but provide a way to specify the location of the external
+toolchain which will be used by the compiler driver. The
+:variable:`CMAKE_<LANG>_COMPILER_EXTERNAL_TOOLCHAIN` variable can be set in a
+toolchain file to pass the path to the compiler driver.
+
+Cross Compiling for QNX
+-----------------------
+
+As the Clang compiler the QNX QCC compile is inherently a cross compiler.
+And the :variable:`CMAKE_<LANG>_COMPILER_TARGET` can be set to pass a
+value to those supported compilers when compiling:
+
+.. code-block:: cmake
+
+  set(CMAKE_SYSTEM_NAME QNX)
+
+  set(arch gcc_ntoarmv7le)
+
+  set(CMAKE_C_COMPILER qcc)
+  set(CMAKE_C_COMPILER_TARGET ${arch})
+  set(CMAKE_CXX_COMPILER QCC)
+  set(CMAKE_CXX_COMPILER_TARGET ${arch})
+
+  set(CMAKE_SYSROOT $ENV{QNX_TARGET})
+
+
+Cross Compiling for Windows CE
+------------------------------
+
+Cross compiling for Windows CE requires the corresponding SDK being
+installed on your system.  These SDKs are usually installed under
+``C:/Program Files (x86)/Windows CE Tools/SDKs``.
+
+A toolchain file to configure a Visual Studio generator for
+Windows CE may look like this:
+
+.. code-block:: cmake
+
+  set(CMAKE_SYSTEM_NAME WindowsCE)
+
+  set(CMAKE_SYSTEM_VERSION 8.0)
+  set(CMAKE_SYSTEM_PROCESSOR arm)
+
+  set(CMAKE_GENERATOR_TOOLSET CE800) # Can be omitted for 8.0
+  set(CMAKE_GENERATOR_PLATFORM SDK_AM335X_SK_WEC2013_V310)
+
+The :variable:`CMAKE_GENERATOR_PLATFORM` tells the generator which SDK to use.
+Further :variable:`CMAKE_SYSTEM_VERSION` tells the generator what version of
+Windows CE to use.  Currently version 8.0 (Windows Embedded Compact 2013) is
+supported out of the box.  Other versions may require one to set
+:variable:`CMAKE_GENERATOR_TOOLSET` to the correct value.
+
+Cross Compiling for Windows 10 Universal Applications
+-----------------------------------------------------
+
+A toolchain file to configure a Visual Studio generator for a
+Windows 10 Universal Application may look like this:
+
+.. code-block:: cmake
+
+  set(CMAKE_SYSTEM_NAME WindowsStore)
+  set(CMAKE_SYSTEM_VERSION 10.0)
+
+A Windows 10 Universal Application targets both Windows Store and
+Windows Phone.  Specify the :variable:`CMAKE_SYSTEM_VERSION` variable
+to be ``10.0`` to build with the latest available Windows 10 SDK.
+Specify a more specific version (e.g. ``10.0.10240.0`` for RTM)
+to build with the corresponding SDK.
+
+Cross Compiling for Windows Phone
+---------------------------------
+
+A toolchain file to configure a Visual Studio generator for
+Windows Phone may look like this:
+
+.. code-block:: cmake
+
+  set(CMAKE_SYSTEM_NAME WindowsPhone)
+  set(CMAKE_SYSTEM_VERSION 8.1)
+
+Cross Compiling for Windows Store
+---------------------------------
+
+A toolchain file to configure a Visual Studio generator for
+Windows Store may look like this:
+
+.. code-block:: cmake
+
+  set(CMAKE_SYSTEM_NAME WindowsStore)
+  set(CMAKE_SYSTEM_VERSION 8.1)
+
+.. _`Cross Compiling for Android`:
+
+Cross Compiling for Android
+---------------------------
+
+A toolchain file may configure cross-compiling for Android by setting the
+:variable:`CMAKE_SYSTEM_NAME` variable to ``Android``.  Further configuration
+is specific to the Android development environment to be used.
+
+For :ref:`Visual Studio Generators`, CMake expects :ref:`NVIDIA Nsight Tegra
+Visual Studio Edition <Cross Compiling for Android with NVIDIA Nsight Tegra
+Visual Studio Edition>` or the :ref:`Visual Studio tools for Android
+<Cross Compiling for Android with the NDK>` to be installed. See those sections
+for further configuration details.
+
+For :ref:`Makefile Generators` and the :generator:`Ninja` generator,
+CMake expects one of these environments:
+
+* :ref:`NDK <Cross Compiling for Android with the NDK>`
+* :ref:`Standalone Toolchain <Cross Compiling for Android with a Standalone Toolchain>`
+
+CMake uses the following steps to select one of the environments:
+
+* If the :variable:`CMAKE_ANDROID_NDK` variable is set, the NDK at the
+  specified location will be used.
+
+* Else, if the :variable:`CMAKE_ANDROID_STANDALONE_TOOLCHAIN` variable
+  is set, the Standalone Toolchain at the specified location will be used.
+
+* Else, if the :variable:`CMAKE_SYSROOT` variable is set to a directory
+  of the form ``<ndk>/platforms/android-<api>/arch-<arch>``, the ``<ndk>``
+  part will be used as the value of :variable:`CMAKE_ANDROID_NDK` and the
+  NDK will be used.
+
+* Else, if the :variable:`CMAKE_SYSROOT` variable is set to a directory of the
+  form ``<standalone-toolchain>/sysroot``, the ``<standalone-toolchain>`` part
+  will be used as the value of :variable:`CMAKE_ANDROID_STANDALONE_TOOLCHAIN`
+  and the Standalone Toolchain will be used.
+
+* Else, if a cmake variable ``ANDROID_NDK`` is set it will be used
+  as the value of :variable:`CMAKE_ANDROID_NDK`, and the NDK will be used.
+
+* Else, if a cmake variable ``ANDROID_STANDALONE_TOOLCHAIN`` is set, it will be
+  used as the value of :variable:`CMAKE_ANDROID_STANDALONE_TOOLCHAIN`, and the
+  Standalone Toolchain will be used.
+
+* Else, if an environment variable ``ANDROID_NDK_ROOT`` or
+  ``ANDROID_NDK`` is set, it will be used as the value of
+  :variable:`CMAKE_ANDROID_NDK`, and the NDK will be used.
+
+* Else, if an environment variable ``ANDROID_STANDALONE_TOOLCHAIN`` is
+  set then it will be used as the value of
+  :variable:`CMAKE_ANDROID_STANDALONE_TOOLCHAIN`, and the Standalone
+  Toolchain will be used.
+
+* Else, an error diagnostic will be issued that neither the NDK or
+  Standalone Toolchain can be found.
+
+.. versionadded:: 3.20
+  If an Android NDK is selected, its version number is reported
+  in the :variable:`CMAKE_ANDROID_NDK_VERSION` variable.
+
+.. _`Cross Compiling for Android with the NDK`:
+
+Cross Compiling for Android with the NDK
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+A toolchain file may configure :ref:`Makefile Generators`,
+:ref:`Ninja Generators`, or :ref:`Visual Studio Generators` to target
+Android for cross-compiling.
+
+Configure use of an Android NDK with the following variables:
+
+:variable:`CMAKE_SYSTEM_NAME`
+  Set to ``Android``.  Must be specified to enable cross compiling
+  for Android.
+
+:variable:`CMAKE_SYSTEM_VERSION`
+  Set to the Android API level.  If not specified, the value is
+  determined as follows:
+
+  * If the :variable:`CMAKE_ANDROID_API` variable is set, its value
+    is used as the API level.
+  * If the :variable:`CMAKE_SYSROOT` variable is set, the API level is
+    detected from the NDK directory structure containing the sysroot.
+  * Otherwise, the latest API level available in the NDK is used.
+
+:variable:`CMAKE_ANDROID_ARCH_ABI`
+  Set to the Android ABI (architecture).  If not specified, this
+  variable will default to the first supported ABI in the list of
+  ``armeabi``, ``armeabi-v7a`` and ``arm64-v8a``.
+  The :variable:`CMAKE_ANDROID_ARCH` variable will be computed
+  from ``CMAKE_ANDROID_ARCH_ABI`` automatically.
+  Also see the :variable:`CMAKE_ANDROID_ARM_MODE` and
+  :variable:`CMAKE_ANDROID_ARM_NEON` variables.
+
+:variable:`CMAKE_ANDROID_NDK`
+  Set to the absolute path to the Android NDK root directory.
+  If not specified, a default for this variable will be chosen
+  as specified :ref:`above <Cross Compiling for Android>`.
+
+:variable:`CMAKE_ANDROID_NDK_DEPRECATED_HEADERS`
+  Set to a true value to use the deprecated per-api-level headers
+  instead of the unified headers.  If not specified, the default will
+  be false unless using a NDK that does not provide unified headers.
+
+:variable:`CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION`
+  On NDK r19 or above, this variable must be unset or set to ``clang``.
+  On NDK r18 or below, set this to the version of the NDK toolchain to
+  be selected as the compiler.  If not specified, the default will be
+  the latest available GCC toolchain.
+
+:variable:`CMAKE_ANDROID_STL_TYPE`
+  Set to specify which C++ standard library to use.  If not specified,
+  a default will be selected as described in the variable documentation.
+
+The following variables will be computed and provided automatically:
+
+:variable:`CMAKE_<LANG>_ANDROID_TOOLCHAIN_PREFIX`
+  The absolute path prefix to the binutils in the NDK toolchain.
+
+:variable:`CMAKE_<LANG>_ANDROID_TOOLCHAIN_SUFFIX`
+  The host platform suffix of the binutils in the NDK toolchain.
+
+
+For example, a toolchain file might contain:
+
+.. code-block:: cmake
+
+  set(CMAKE_SYSTEM_NAME Android)
+  set(CMAKE_SYSTEM_VERSION 21) # API level
+  set(CMAKE_ANDROID_ARCH_ABI arm64-v8a)
+  set(CMAKE_ANDROID_NDK /path/to/android-ndk)
+  set(CMAKE_ANDROID_STL_TYPE gnustl_static)
+
+Alternatively one may specify the values without a toolchain file:
+
+.. code-block:: console
+
+  $ cmake ../src \
+    -DCMAKE_SYSTEM_NAME=Android \
+    -DCMAKE_SYSTEM_VERSION=21 \
+    -DCMAKE_ANDROID_ARCH_ABI=arm64-v8a \
+    -DCMAKE_ANDROID_NDK=/path/to/android-ndk \
+    -DCMAKE_ANDROID_STL_TYPE=gnustl_static
+
+.. _`Cross Compiling for Android with a Standalone Toolchain`:
+
+Cross Compiling for Android with a Standalone Toolchain
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+A toolchain file may configure :ref:`Makefile Generators` or the
+:generator:`Ninja` generator to target Android for cross-compiling
+using a standalone toolchain.
+
+Configure use of an Android standalone toolchain with the following variables:
+
+:variable:`CMAKE_SYSTEM_NAME`
+  Set to ``Android``.  Must be specified to enable cross compiling
+  for Android.
+
+:variable:`CMAKE_ANDROID_STANDALONE_TOOLCHAIN`
+  Set to the absolute path to the standalone toolchain root directory.
+  A ``${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}/sysroot`` directory
+  must exist.
+  If not specified, a default for this variable will be chosen
+  as specified :ref:`above <Cross Compiling for Android>`.
+
+:variable:`CMAKE_ANDROID_ARM_MODE`
+  When the standalone toolchain targets ARM, optionally set this to ``ON``
+  to target 32-bit ARM instead of 16-bit Thumb.
+  See variable documentation for details.
+
+:variable:`CMAKE_ANDROID_ARM_NEON`
+  When the standalone toolchain targets ARM v7, optionally set thisto ``ON``
+  to target ARM NEON devices.  See variable documentation for details.
+
+The following variables will be computed and provided automatically:
+
+:variable:`CMAKE_SYSTEM_VERSION`
+  The Android API level detected from the standalone toolchain.
+
+:variable:`CMAKE_ANDROID_ARCH_ABI`
+  The Android ABI detected from the standalone toolchain.
+
+:variable:`CMAKE_<LANG>_ANDROID_TOOLCHAIN_PREFIX`
+  The absolute path prefix to the ``binutils`` in the standalone toolchain.
+
+:variable:`CMAKE_<LANG>_ANDROID_TOOLCHAIN_SUFFIX`
+  The host platform suffix of the ``binutils`` in the standalone toolchain.
+
+For example, a toolchain file might contain:
+
+.. code-block:: cmake
+
+  set(CMAKE_SYSTEM_NAME Android)
+  set(CMAKE_ANDROID_STANDALONE_TOOLCHAIN /path/to/android-toolchain)
+
+Alternatively one may specify the values without a toolchain file:
+
+.. code-block:: console
+
+  $ cmake ../src \
+    -DCMAKE_SYSTEM_NAME=Android \
+    -DCMAKE_ANDROID_STANDALONE_TOOLCHAIN=/path/to/android-toolchain
+
+.. _`Cross Compiling for Android with NVIDIA Nsight Tegra Visual Studio Edition`:
+
+Cross Compiling for Android with NVIDIA Nsight Tegra Visual Studio Edition
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+A toolchain file to configure one of the :ref:`Visual Studio Generators`
+to build using NVIDIA Nsight Tegra targeting Android may look like this:
+
+.. code-block:: cmake
+
+  set(CMAKE_SYSTEM_NAME Android)
+
+The :variable:`CMAKE_GENERATOR_TOOLSET` may be set to select
+the Nsight Tegra "Toolchain Version" value.
+
+See also target properties:
+
+* :prop_tgt:`ANDROID_ANT_ADDITIONAL_OPTIONS`
+* :prop_tgt:`ANDROID_API_MIN`
+* :prop_tgt:`ANDROID_API`
+* :prop_tgt:`ANDROID_ARCH`
+* :prop_tgt:`ANDROID_ASSETS_DIRECTORIES`
+* :prop_tgt:`ANDROID_GUI`
+* :prop_tgt:`ANDROID_JAR_DEPENDENCIES`
+* :prop_tgt:`ANDROID_JAR_DIRECTORIES`
+* :prop_tgt:`ANDROID_JAVA_SOURCE_DIR`
+* :prop_tgt:`ANDROID_NATIVE_LIB_DEPENDENCIES`
+* :prop_tgt:`ANDROID_NATIVE_LIB_DIRECTORIES`
+* :prop_tgt:`ANDROID_PROCESS_MAX`
+* :prop_tgt:`ANDROID_PROGUARD_CONFIG_PATH`
+* :prop_tgt:`ANDROID_PROGUARD`
+* :prop_tgt:`ANDROID_SECURE_PROPS_PATH`
+* :prop_tgt:`ANDROID_SKIP_ANT_STEP`
+* :prop_tgt:`ANDROID_STL_TYPE`
+
+.. _`Cross Compiling for iOS, tvOS, or watchOS`:
+
+Cross Compiling for iOS, tvOS, or watchOS
+-----------------------------------------
+
+For cross-compiling to iOS, tvOS, or watchOS, the :generator:`Xcode`
+generator is recommended.  The :generator:`Unix Makefiles` or
+:generator:`Ninja` generators can also be used, but they require the
+project to handle more areas like target CPU selection and code signing.
+
+Any of the three systems can be targeted by setting the
+:variable:`CMAKE_SYSTEM_NAME` variable to a value from the table below.
+By default, the latest Device SDK is chosen.  As for all Apple platforms,
+a different SDK (e.g. a simulator) can be selected by setting the
+:variable:`CMAKE_OSX_SYSROOT` variable, although this should rarely be
+necessary (see :ref:`Switching Between Device and Simulator` below).
+A list of available SDKs can be obtained by running ``xcodebuild -showsdks``.
+
+=======  ================= ==================== ================
+OS       CMAKE_SYSTEM_NAME Device SDK (default) Simulator SDK
+=======  ================= ==================== ================
+iOS      iOS               iphoneos             iphonesimulator
+tvOS     tvOS              appletvos            appletvsimulator
+watchOS  watchOS           watchos              watchsimulator
+=======  ================= ==================== ================
+
+For example, to create a CMake configuration for iOS, the following
+command is sufficient:
+
+.. code-block:: console
+
+  cmake .. -GXcode -DCMAKE_SYSTEM_NAME=iOS
+
+Variable :variable:`CMAKE_OSX_ARCHITECTURES` can be used to set architectures
+for both device and simulator. Variable :variable:`CMAKE_OSX_DEPLOYMENT_TARGET`
+can be used to set an iOS/tvOS/watchOS deployment target.
+
+Next configuration will install fat 5 architectures iOS library
+and add the ``-miphoneos-version-min=9.3``/``-mios-simulator-version-min=9.3``
+flags to the compiler:
+
+.. code-block:: console
+
+  $ cmake -S. -B_builds -GXcode \
+      -DCMAKE_SYSTEM_NAME=iOS \
+      "-DCMAKE_OSX_ARCHITECTURES=armv7;armv7s;arm64;i386;x86_64" \
+      -DCMAKE_OSX_DEPLOYMENT_TARGET=9.3 \
+      -DCMAKE_INSTALL_PREFIX=`pwd`/_install \
+      -DCMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH=NO \
+      -DCMAKE_IOS_INSTALL_COMBINED=YES
+
+Example:
+
+.. code-block:: cmake
+
+  # CMakeLists.txt
+  cmake_minimum_required(VERSION 3.14)
+  project(foo)
+  add_library(foo foo.cpp)
+  install(TARGETS foo DESTINATION lib)
+
+Install:
+
+.. code-block:: console
+
+    $ cmake --build _builds --config Release --target install
+
+Check library:
+
+.. code-block:: console
+
+    $ lipo -info _install/lib/libfoo.a
+    Architectures in the fat file: _install/lib/libfoo.a are: i386 armv7 armv7s x86_64 arm64
+
+.. code-block:: console
+
+    $ otool -l _install/lib/libfoo.a | grep -A2 LC_VERSION_MIN_IPHONEOS
+          cmd LC_VERSION_MIN_IPHONEOS
+      cmdsize 16
+      version 9.3
+
+Code Signing
+^^^^^^^^^^^^
+
+Some build artifacts for the embedded Apple platforms require mandatory
+code signing.  If the :generator:`Xcode` generator is being used and
+code signing is required or desired, the development team ID can be
+specified via the ``CMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM`` CMake variable.
+This team ID will then be included in the generated Xcode project.
+By default, CMake avoids the need for code signing during the internal
+configuration phase (i.e compiler ID and feature detection).
+
+.. _`Switching Between Device and Simulator`:
+
+Switching Between Device and Simulator
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+When configuring for any of the embedded platforms, one can target either
+real devices or the simulator.  Both have their own separate SDK, but CMake
+only supports specifying a single SDK for the configuration phase.  This
+means the developer must select one or the other at configuration time.
+When using the :generator:`Xcode` generator, this is less of a limitation
+because Xcode still allows you to build for either a device or a simulator,
+even though configuration was only performed for one of the two.  From
+within the Xcode IDE, builds are performed for the selected "destination"
+platform.  When building from the command line, the desired sdk can be
+specified directly by passing a ``-sdk`` option to the underlying build
+tool (``xcodebuild``).  For example:
+
+.. code-block:: console
+
+  $ cmake --build ... -- -sdk iphonesimulator
+
+Please note that checks made during configuration were performed against
+the configure-time SDK and might not hold true for other SDKs.  Commands
+like :command:`find_package`, :command:`find_library`, etc. store and use
+details only for the configured SDK/platform, so they can be problematic
+if wanting to switch between device and simulator builds. You can follow
+the next rules to make device + simulator configuration work:
+
+- Use explicit ``-l`` linker flag,
+  e.g. ``target_link_libraries(foo PUBLIC "-lz")``
+
+- Use explicit ``-framework`` linker flag,
+  e.g. ``target_link_libraries(foo PUBLIC "-framework CoreFoundation")``
+
+- Use :command:`find_package` only for libraries installed with
+  :variable:`CMAKE_IOS_INSTALL_COMBINED` feature
diff --git a/share/cmake-3.22/Help/manual/cmake-variables.7.rst b/share/cmake-3.22/Help/manual/cmake-variables.7.rst
new file mode 100644
index 0000000..4ed0b2e
--- /dev/null
+++ b/share/cmake-3.22/Help/manual/cmake-variables.7.rst
@@ -0,0 +1,728 @@
+.. cmake-manual-description: CMake Variables Reference
+
+cmake-variables(7)
+******************
+
+.. only:: html
+
+   .. contents::
+
+This page documents variables that are provided by CMake
+or have meaning to CMake when set by project code.
+
+For general information on variables, see the
+:ref:`Variables <CMake Language Variables>`
+section in the cmake-language manual.
+
+.. include:: ID_RESERVE.txt
+
+Variables that Provide Information
+==================================
+
+.. toctree::
+   :maxdepth: 1
+
+   /variable/CMAKE_AR
+   /variable/CMAKE_ARGC
+   /variable/CMAKE_ARGV0
+   /variable/CMAKE_BINARY_DIR
+   /variable/CMAKE_BUILD_TOOL
+   /variable/CMAKE_CACHE_MAJOR_VERSION
+   /variable/CMAKE_CACHE_MINOR_VERSION
+   /variable/CMAKE_CACHE_PATCH_VERSION
+   /variable/CMAKE_CACHEFILE_DIR
+   /variable/CMAKE_CFG_INTDIR
+   /variable/CMAKE_COMMAND
+   /variable/CMAKE_CPACK_COMMAND
+   /variable/CMAKE_CROSSCOMPILING
+   /variable/CMAKE_CROSSCOMPILING_EMULATOR
+   /variable/CMAKE_CTEST_COMMAND
+   /variable/CMAKE_CURRENT_BINARY_DIR
+   /variable/CMAKE_CURRENT_FUNCTION
+   /variable/CMAKE_CURRENT_FUNCTION_LIST_DIR
+   /variable/CMAKE_CURRENT_FUNCTION_LIST_FILE
+   /variable/CMAKE_CURRENT_FUNCTION_LIST_LINE
+   /variable/CMAKE_CURRENT_LIST_DIR
+   /variable/CMAKE_CURRENT_LIST_FILE
+   /variable/CMAKE_CURRENT_LIST_LINE
+   /variable/CMAKE_CURRENT_SOURCE_DIR
+   /variable/CMAKE_DEBUG_TARGET_PROPERTIES
+   /variable/CMAKE_DIRECTORY_LABELS
+   /variable/CMAKE_DL_LIBS
+   /variable/CMAKE_DOTNET_TARGET_FRAMEWORK
+   /variable/CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION
+   /variable/CMAKE_EDIT_COMMAND
+   /variable/CMAKE_EXECUTABLE_SUFFIX
+   /variable/CMAKE_EXECUTABLE_SUFFIX_LANG
+   /variable/CMAKE_EXTRA_GENERATOR
+   /variable/CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES
+   /variable/CMAKE_FIND_DEBUG_MODE
+   /variable/CMAKE_FIND_PACKAGE_NAME
+   /variable/CMAKE_FIND_PACKAGE_SORT_DIRECTION
+   /variable/CMAKE_FIND_PACKAGE_SORT_ORDER
+   /variable/CMAKE_GENERATOR
+   /variable/CMAKE_GENERATOR_INSTANCE
+   /variable/CMAKE_GENERATOR_PLATFORM
+   /variable/CMAKE_GENERATOR_TOOLSET
+   /variable/CMAKE_IMPORT_LIBRARY_PREFIX
+   /variable/CMAKE_IMPORT_LIBRARY_SUFFIX
+   /variable/CMAKE_JOB_POOL_COMPILE
+   /variable/CMAKE_JOB_POOL_LINK
+   /variable/CMAKE_JOB_POOL_PRECOMPILE_HEADER
+   /variable/CMAKE_JOB_POOLS
+   /variable/CMAKE_LANG_COMPILER_AR
+   /variable/CMAKE_LANG_COMPILER_FRONTEND_VARIANT
+   /variable/CMAKE_LANG_COMPILER_RANLIB
+   /variable/CMAKE_LANG_LINK_LIBRARY_SUFFIX
+   /variable/CMAKE_LINK_LIBRARY_SUFFIX
+   /variable/CMAKE_LINK_SEARCH_END_STATIC
+   /variable/CMAKE_LINK_SEARCH_START_STATIC
+   /variable/CMAKE_MAJOR_VERSION
+   /variable/CMAKE_MAKE_PROGRAM
+   /variable/CMAKE_MATCH_COUNT
+   /variable/CMAKE_MATCH_n
+   /variable/CMAKE_MINIMUM_REQUIRED_VERSION
+   /variable/CMAKE_MINOR_VERSION
+   /variable/CMAKE_NETRC
+   /variable/CMAKE_NETRC_FILE
+   /variable/CMAKE_PARENT_LIST_FILE
+   /variable/CMAKE_PATCH_VERSION
+   /variable/CMAKE_PROJECT_DESCRIPTION
+   /variable/CMAKE_PROJECT_HOMEPAGE_URL
+   /variable/CMAKE_PROJECT_NAME
+   /variable/CMAKE_PROJECT_VERSION
+   /variable/CMAKE_PROJECT_VERSION_MAJOR
+   /variable/CMAKE_PROJECT_VERSION_MINOR
+   /variable/CMAKE_PROJECT_VERSION_PATCH
+   /variable/CMAKE_PROJECT_VERSION_TWEAK
+   /variable/CMAKE_RANLIB
+   /variable/CMAKE_ROOT
+   /variable/CMAKE_RULE_MESSAGES
+   /variable/CMAKE_SCRIPT_MODE_FILE
+   /variable/CMAKE_SHARED_LIBRARY_PREFIX
+   /variable/CMAKE_SHARED_LIBRARY_SUFFIX
+   /variable/CMAKE_SHARED_MODULE_PREFIX
+   /variable/CMAKE_SHARED_MODULE_SUFFIX
+   /variable/CMAKE_SIZEOF_VOID_P
+   /variable/CMAKE_SKIP_INSTALL_RULES
+   /variable/CMAKE_SKIP_RPATH
+   /variable/CMAKE_SOURCE_DIR
+   /variable/CMAKE_STATIC_LIBRARY_PREFIX
+   /variable/CMAKE_STATIC_LIBRARY_SUFFIX
+   /variable/CMAKE_Swift_MODULE_DIRECTORY
+   /variable/CMAKE_Swift_NUM_THREADS
+   /variable/CMAKE_TOOLCHAIN_FILE
+   /variable/CMAKE_TWEAK_VERSION
+   /variable/CMAKE_VERBOSE_MAKEFILE
+   /variable/CMAKE_VERSION
+   /variable/CMAKE_VS_DEVENV_COMMAND
+   /variable/CMAKE_VS_MSBUILD_COMMAND
+   /variable/CMAKE_VS_NsightTegra_VERSION
+   /variable/CMAKE_VS_PLATFORM_NAME
+   /variable/CMAKE_VS_PLATFORM_NAME_DEFAULT
+   /variable/CMAKE_VS_PLATFORM_TOOLSET
+   /variable/CMAKE_VS_PLATFORM_TOOLSET_CUDA
+   /variable/CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR
+   /variable/CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE
+   /variable/CMAKE_VS_PLATFORM_TOOLSET_VERSION
+   /variable/CMAKE_VS_TARGET_FRAMEWORK_VERSION
+   /variable/CMAKE_VS_TARGET_FRAMEWORK_IDENTIFIER
+   /variable/CMAKE_VS_TARGET_FRAMEWORK_TARGETS_VERSION
+   /variable/CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION
+   /variable/CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION_MAXIMUM
+   /variable/CMAKE_XCODE_BUILD_SYSTEM
+   /variable/CMAKE_XCODE_PLATFORM_TOOLSET
+   /variable/PROJECT-NAME_BINARY_DIR
+   /variable/PROJECT-NAME_DESCRIPTION
+   /variable/PROJECT-NAME_HOMEPAGE_URL
+   /variable/PROJECT-NAME_IS_TOP_LEVEL
+   /variable/PROJECT-NAME_SOURCE_DIR
+   /variable/PROJECT-NAME_VERSION
+   /variable/PROJECT-NAME_VERSION_MAJOR
+   /variable/PROJECT-NAME_VERSION_MINOR
+   /variable/PROJECT-NAME_VERSION_PATCH
+   /variable/PROJECT-NAME_VERSION_TWEAK
+   /variable/PROJECT_BINARY_DIR
+   /variable/PROJECT_DESCRIPTION
+   /variable/PROJECT_HOMEPAGE_URL
+   /variable/PROJECT_IS_TOP_LEVEL
+   /variable/PROJECT_NAME
+   /variable/PROJECT_SOURCE_DIR
+   /variable/PROJECT_VERSION
+   /variable/PROJECT_VERSION_MAJOR
+   /variable/PROJECT_VERSION_MINOR
+   /variable/PROJECT_VERSION_PATCH
+   /variable/PROJECT_VERSION_TWEAK
+
+Variables that Change Behavior
+==============================
+
+.. toctree::
+   :maxdepth: 1
+
+   /variable/BUILD_SHARED_LIBS
+   /variable/CMAKE_ABSOLUTE_DESTINATION_FILES
+   /variable/CMAKE_APPBUNDLE_PATH
+   /variable/CMAKE_AUTOMOC_RELAXED_MODE
+   /variable/CMAKE_BACKWARDS_COMPATIBILITY
+   /variable/CMAKE_BUILD_TYPE
+   /variable/CMAKE_CLANG_VFS_OVERLAY
+   /variable/CMAKE_CODEBLOCKS_COMPILER_ID
+   /variable/CMAKE_CODEBLOCKS_EXCLUDE_EXTERNAL_FILES
+   /variable/CMAKE_CODELITE_USE_TARGETS
+   /variable/CMAKE_COLOR_MAKEFILE
+   /variable/CMAKE_CONFIGURATION_TYPES
+   /variable/CMAKE_DEPENDS_IN_PROJECT_ONLY
+   /variable/CMAKE_DISABLE_FIND_PACKAGE_PackageName
+   /variable/CMAKE_ECLIPSE_GENERATE_LINKED_RESOURCES
+   /variable/CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT
+   /variable/CMAKE_ECLIPSE_MAKE_ARGUMENTS
+   /variable/CMAKE_ECLIPSE_RESOURCE_ENCODING
+   /variable/CMAKE_ECLIPSE_VERSION
+   /variable/CMAKE_ERROR_DEPRECATED
+   /variable/CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION
+   /variable/CMAKE_EXECUTE_PROCESS_COMMAND_ECHO
+   /variable/CMAKE_EXPORT_COMPILE_COMMANDS
+   /variable/CMAKE_EXPORT_PACKAGE_REGISTRY
+   /variable/CMAKE_EXPORT_NO_PACKAGE_REGISTRY
+   /variable/CMAKE_FIND_APPBUNDLE
+   /variable/CMAKE_FIND_FRAMEWORK
+   /variable/CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX
+   /variable/CMAKE_FIND_LIBRARY_PREFIXES
+   /variable/CMAKE_FIND_LIBRARY_SUFFIXES
+   /variable/CMAKE_FIND_NO_INSTALL_PREFIX
+   /variable/CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY
+   /variable/CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY
+   /variable/CMAKE_FIND_PACKAGE_PREFER_CONFIG
+   /variable/CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS
+   /variable/CMAKE_FIND_PACKAGE_WARN_NO_MODULE
+   /variable/CMAKE_FIND_ROOT_PATH
+   /variable/CMAKE_FIND_ROOT_PATH_MODE_INCLUDE
+   /variable/CMAKE_FIND_ROOT_PATH_MODE_LIBRARY
+   /variable/CMAKE_FIND_ROOT_PATH_MODE_PACKAGE
+   /variable/CMAKE_FIND_ROOT_PATH_MODE_PROGRAM
+   /variable/CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH
+   /variable/CMAKE_FIND_USE_CMAKE_PATH
+   /variable/CMAKE_FIND_USE_CMAKE_SYSTEM_PATH
+   /variable/CMAKE_FIND_USE_PACKAGE_REGISTRY
+   /variable/CMAKE_FIND_USE_PACKAGE_ROOT_PATH
+   /variable/CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH
+   /variable/CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY
+   /variable/CMAKE_FRAMEWORK_PATH
+   /variable/CMAKE_IGNORE_PATH
+   /variable/CMAKE_INCLUDE_DIRECTORIES_BEFORE
+   /variable/CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE
+   /variable/CMAKE_INCLUDE_PATH
+   /variable/CMAKE_INSTALL_DEFAULT_COMPONENT_NAME
+   /variable/CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS
+   /variable/CMAKE_INSTALL_MESSAGE
+   /variable/CMAKE_INSTALL_PREFIX
+   /variable/CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT
+   /variable/CMAKE_LIBRARY_PATH
+   /variable/CMAKE_LINK_DIRECTORIES_BEFORE
+   /variable/CMAKE_MFC_FLAG
+   /variable/CMAKE_MAXIMUM_RECURSION_DEPTH
+   /variable/CMAKE_MESSAGE_CONTEXT
+   /variable/CMAKE_MESSAGE_CONTEXT_SHOW
+   /variable/CMAKE_MESSAGE_INDENT
+   /variable/CMAKE_MESSAGE_LOG_LEVEL
+   /variable/CMAKE_MODULE_PATH
+   /variable/CMAKE_POLICY_DEFAULT_CMPNNNN
+   /variable/CMAKE_POLICY_WARNING_CMPNNNN
+   /variable/CMAKE_PREFIX_PATH
+   /variable/CMAKE_PROGRAM_PATH
+   /variable/CMAKE_PROJECT_INCLUDE
+   /variable/CMAKE_PROJECT_INCLUDE_BEFORE
+   /variable/CMAKE_PROJECT_PROJECT-NAME_INCLUDE
+   /variable/CMAKE_PROJECT_PROJECT-NAME_INCLUDE_BEFORE
+   /variable/CMAKE_REQUIRE_FIND_PACKAGE_PackageName
+   /variable/CMAKE_SKIP_INSTALL_ALL_DEPENDENCY
+   /variable/CMAKE_STAGING_PREFIX
+   /variable/CMAKE_SUBLIME_TEXT_2_ENV_SETTINGS
+   /variable/CMAKE_SUBLIME_TEXT_2_EXCLUDE_BUILD_TREE
+   /variable/CMAKE_SUPPRESS_REGENERATION
+   /variable/CMAKE_SYSROOT
+   /variable/CMAKE_SYSROOT_COMPILE
+   /variable/CMAKE_SYSROOT_LINK
+   /variable/CMAKE_SYSTEM_APPBUNDLE_PATH
+   /variable/CMAKE_SYSTEM_FRAMEWORK_PATH
+   /variable/CMAKE_SYSTEM_IGNORE_PATH
+   /variable/CMAKE_SYSTEM_INCLUDE_PATH
+   /variable/CMAKE_SYSTEM_LIBRARY_PATH
+   /variable/CMAKE_SYSTEM_PREFIX_PATH
+   /variable/CMAKE_SYSTEM_PROGRAM_PATH
+   /variable/CMAKE_TLS_CAINFO
+   /variable/CMAKE_TLS_VERIFY
+   /variable/CMAKE_USER_MAKE_RULES_OVERRIDE
+   /variable/CMAKE_WARN_DEPRECATED
+   /variable/CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION
+   /variable/CMAKE_XCODE_GENERATE_SCHEME
+   /variable/CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY
+   /variable/CMAKE_XCODE_LINK_BUILD_PHASE_MODE
+   /variable/CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER
+   /variable/CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN
+   /variable/CMAKE_XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING
+   /variable/CMAKE_XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER
+   /variable/CMAKE_XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS
+   /variable/CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE
+   /variable/CMAKE_XCODE_SCHEME_ENVIRONMENT
+   /variable/CMAKE_XCODE_SCHEME_GUARD_MALLOC
+   /variable/CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP
+   /variable/CMAKE_XCODE_SCHEME_MALLOC_GUARD_EDGES
+   /variable/CMAKE_XCODE_SCHEME_MALLOC_SCRIBBLE
+   /variable/CMAKE_XCODE_SCHEME_MALLOC_STACK
+   /variable/CMAKE_XCODE_SCHEME_THREAD_SANITIZER
+   /variable/CMAKE_XCODE_SCHEME_THREAD_SANITIZER_STOP
+   /variable/CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER
+   /variable/CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP
+   /variable/CMAKE_XCODE_SCHEME_WORKING_DIRECTORY
+   /variable/CMAKE_XCODE_SCHEME_ZOMBIE_OBJECTS
+   /variable/PackageName_ROOT
+
+Variables that Describe the System
+==================================
+
+.. toctree::
+   :maxdepth: 1
+
+   /variable/ANDROID
+   /variable/APPLE
+   /variable/BORLAND
+   /variable/CMAKE_ANDROID_NDK_VERSION
+   /variable/CMAKE_CL_64
+   /variable/CMAKE_COMPILER_2005
+   /variable/CMAKE_HOST_APPLE
+   /variable/CMAKE_HOST_SOLARIS
+   /variable/CMAKE_HOST_SYSTEM
+   /variable/CMAKE_HOST_SYSTEM_NAME
+   /variable/CMAKE_HOST_SYSTEM_PROCESSOR
+   /variable/CMAKE_HOST_SYSTEM_VERSION
+   /variable/CMAKE_HOST_UNIX
+   /variable/CMAKE_HOST_WIN32
+   /variable/CMAKE_LIBRARY_ARCHITECTURE
+   /variable/CMAKE_LIBRARY_ARCHITECTURE_REGEX
+   /variable/CMAKE_OBJECT_PATH_MAX
+   /variable/CMAKE_SYSTEM
+   /variable/CMAKE_SYSTEM_NAME
+   /variable/CMAKE_SYSTEM_PROCESSOR
+   /variable/CMAKE_SYSTEM_VERSION
+   /variable/CYGWIN
+   /variable/GHS-MULTI
+   /variable/IOS
+   /variable/MINGW
+   /variable/MSVC
+   /variable/MSVC10
+   /variable/MSVC11
+   /variable/MSVC12
+   /variable/MSVC14
+   /variable/MSVC60
+   /variable/MSVC70
+   /variable/MSVC71
+   /variable/MSVC80
+   /variable/MSVC90
+   /variable/MSVC_IDE
+   /variable/MSVC_TOOLSET_VERSION
+   /variable/MSVC_VERSION
+   /variable/MSYS
+   /variable/UNIX
+   /variable/WIN32
+   /variable/WINCE
+   /variable/WINDOWS_PHONE
+   /variable/WINDOWS_STORE
+   /variable/XCODE
+   /variable/XCODE_VERSION
+
+Variables that Control the Build
+================================
+
+.. toctree::
+   :maxdepth: 1
+
+   /variable/CMAKE_AIX_EXPORT_ALL_SYMBOLS
+   /variable/CMAKE_ANDROID_ANT_ADDITIONAL_OPTIONS
+   /variable/CMAKE_ANDROID_API
+   /variable/CMAKE_ANDROID_API_MIN
+   /variable/CMAKE_ANDROID_ARCH
+   /variable/CMAKE_ANDROID_ARCH_ABI
+   /variable/CMAKE_ANDROID_ARM_MODE
+   /variable/CMAKE_ANDROID_ARM_NEON
+   /variable/CMAKE_ANDROID_ASSETS_DIRECTORIES
+   /variable/CMAKE_ANDROID_EXCEPTIONS
+   /variable/CMAKE_ANDROID_GUI
+   /variable/CMAKE_ANDROID_JAR_DEPENDENCIES
+   /variable/CMAKE_ANDROID_JAR_DIRECTORIES
+   /variable/CMAKE_ANDROID_JAVA_SOURCE_DIR
+   /variable/CMAKE_ANDROID_NATIVE_LIB_DEPENDENCIES
+   /variable/CMAKE_ANDROID_NATIVE_LIB_DIRECTORIES
+   /variable/CMAKE_ANDROID_NDK
+   /variable/CMAKE_ANDROID_NDK_DEPRECATED_HEADERS
+   /variable/CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG
+   /variable/CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION
+   /variable/CMAKE_ANDROID_PROCESS_MAX
+   /variable/CMAKE_ANDROID_PROGUARD
+   /variable/CMAKE_ANDROID_PROGUARD_CONFIG_PATH
+   /variable/CMAKE_ANDROID_RTTI
+   /variable/CMAKE_ANDROID_SECURE_PROPS_PATH
+   /variable/CMAKE_ANDROID_SKIP_ANT_STEP
+   /variable/CMAKE_ANDROID_STANDALONE_TOOLCHAIN
+   /variable/CMAKE_ANDROID_STL_TYPE
+   /variable/CMAKE_APPLE_SILICON_PROCESSOR
+   /variable/CMAKE_ARCHIVE_OUTPUT_DIRECTORY
+   /variable/CMAKE_ARCHIVE_OUTPUT_DIRECTORY_CONFIG
+   /variable/CMAKE_AUTOGEN_ORIGIN_DEPENDS
+   /variable/CMAKE_AUTOGEN_PARALLEL
+   /variable/CMAKE_AUTOGEN_VERBOSE
+   /variable/CMAKE_AUTOMOC
+   /variable/CMAKE_AUTOMOC_COMPILER_PREDEFINES
+   /variable/CMAKE_AUTOMOC_DEPEND_FILTERS
+   /variable/CMAKE_AUTOMOC_MACRO_NAMES
+   /variable/CMAKE_AUTOMOC_MOC_OPTIONS
+   /variable/CMAKE_AUTOMOC_PATH_PREFIX
+   /variable/CMAKE_AUTORCC
+   /variable/CMAKE_AUTORCC_OPTIONS
+   /variable/CMAKE_AUTOUIC
+   /variable/CMAKE_AUTOUIC_OPTIONS
+   /variable/CMAKE_AUTOUIC_SEARCH_PATHS
+   /variable/CMAKE_BUILD_RPATH
+   /variable/CMAKE_BUILD_RPATH_USE_ORIGIN
+   /variable/CMAKE_BUILD_WITH_INSTALL_NAME_DIR
+   /variable/CMAKE_BUILD_WITH_INSTALL_RPATH
+   /variable/CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY
+   /variable/CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY_CONFIG
+   /variable/CMAKE_CONFIG_POSTFIX
+   /variable/CMAKE_CROSS_CONFIGS
+   /variable/CMAKE_CTEST_ARGUMENTS
+   /variable/CMAKE_CUDA_RESOLVE_DEVICE_SYMBOLS
+   /variable/CMAKE_CUDA_RUNTIME_LIBRARY
+   /variable/CMAKE_CUDA_SEPARABLE_COMPILATION
+   /variable/CMAKE_DEBUG_POSTFIX
+   /variable/CMAKE_DEFAULT_BUILD_TYPE
+   /variable/CMAKE_DEFAULT_CONFIGS
+   /variable/CMAKE_DISABLE_PRECOMPILE_HEADERS
+   /variable/CMAKE_DEPENDS_USE_COMPILER
+   /variable/CMAKE_ENABLE_EXPORTS
+   /variable/CMAKE_EXE_LINKER_FLAGS
+   /variable/CMAKE_EXE_LINKER_FLAGS_CONFIG
+   /variable/CMAKE_EXE_LINKER_FLAGS_CONFIG_INIT
+   /variable/CMAKE_EXE_LINKER_FLAGS_INIT
+   /variable/CMAKE_FOLDER
+   /variable/CMAKE_FRAMEWORK
+   /variable/CMAKE_FRAMEWORK_MULTI_CONFIG_POSTFIX_CONFIG
+   /variable/CMAKE_Fortran_FORMAT
+   /variable/CMAKE_Fortran_MODULE_DIRECTORY
+   /variable/CMAKE_Fortran_PREPROCESS
+   /variable/CMAKE_GHS_NO_SOURCE_GROUP_FILE
+   /variable/CMAKE_GLOBAL_AUTOGEN_TARGET
+   /variable/CMAKE_GLOBAL_AUTOGEN_TARGET_NAME
+   /variable/CMAKE_GLOBAL_AUTORCC_TARGET
+   /variable/CMAKE_GLOBAL_AUTORCC_TARGET_NAME
+   /variable/CMAKE_GNUtoMS
+   /variable/CMAKE_INCLUDE_CURRENT_DIR
+   /variable/CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE
+   /variable/CMAKE_INSTALL_NAME_DIR
+   /variable/CMAKE_INSTALL_REMOVE_ENVIRONMENT_RPATH
+   /variable/CMAKE_INSTALL_RPATH
+   /variable/CMAKE_INSTALL_RPATH_USE_LINK_PATH
+   /variable/CMAKE_INTERPROCEDURAL_OPTIMIZATION
+   /variable/CMAKE_INTERPROCEDURAL_OPTIMIZATION_CONFIG
+   /variable/CMAKE_IOS_INSTALL_COMBINED
+   /variable/CMAKE_LANG_CLANG_TIDY
+   /variable/CMAKE_LANG_COMPILER_LAUNCHER
+   /variable/CMAKE_LANG_CPPCHECK
+   /variable/CMAKE_LANG_CPPLINT
+   /variable/CMAKE_LANG_INCLUDE_WHAT_YOU_USE
+   /variable/CMAKE_LANG_LINKER_LAUNCHER
+   /variable/CMAKE_LANG_LINK_LIBRARY_FILE_FLAG
+   /variable/CMAKE_LANG_LINK_LIBRARY_FLAG
+   /variable/CMAKE_LANG_LINK_WHAT_YOU_USE_FLAG
+   /variable/CMAKE_LANG_VISIBILITY_PRESET
+   /variable/CMAKE_LIBRARY_OUTPUT_DIRECTORY
+   /variable/CMAKE_LIBRARY_OUTPUT_DIRECTORY_CONFIG
+   /variable/CMAKE_LIBRARY_PATH_FLAG
+   /variable/CMAKE_LINK_DEF_FILE_FLAG
+   /variable/CMAKE_LINK_DEPENDS_NO_SHARED
+   /variable/CMAKE_LINK_INTERFACE_LIBRARIES
+   /variable/CMAKE_LINK_LIBRARY_FILE_FLAG
+   /variable/CMAKE_LINK_LIBRARY_FLAG
+   /variable/CMAKE_LINK_WHAT_YOU_USE
+   /variable/CMAKE_LINK_WHAT_YOU_USE_CHECK
+   /variable/CMAKE_MACOSX_BUNDLE
+   /variable/CMAKE_MACOSX_RPATH
+   /variable/CMAKE_MAP_IMPORTED_CONFIG_CONFIG
+   /variable/CMAKE_MODULE_LINKER_FLAGS
+   /variable/CMAKE_MODULE_LINKER_FLAGS_CONFIG
+   /variable/CMAKE_MODULE_LINKER_FLAGS_CONFIG_INIT
+   /variable/CMAKE_MODULE_LINKER_FLAGS_INIT
+   /variable/CMAKE_MSVCIDE_RUN_PATH
+   /variable/CMAKE_MSVC_RUNTIME_LIBRARY
+   /variable/CMAKE_NINJA_OUTPUT_PATH_PREFIX
+   /variable/CMAKE_NO_BUILTIN_CHRPATH
+   /variable/CMAKE_NO_SYSTEM_FROM_IMPORTED
+   /variable/CMAKE_OPTIMIZE_DEPENDENCIES
+   /variable/CMAKE_OSX_ARCHITECTURES
+   /variable/CMAKE_OSX_DEPLOYMENT_TARGET
+   /variable/CMAKE_OSX_SYSROOT
+   /variable/CMAKE_PCH_WARN_INVALID
+   /variable/CMAKE_PCH_INSTANTIATE_TEMPLATES
+   /variable/CMAKE_PDB_OUTPUT_DIRECTORY
+   /variable/CMAKE_PDB_OUTPUT_DIRECTORY_CONFIG
+   /variable/CMAKE_POSITION_INDEPENDENT_CODE
+   /variable/CMAKE_RUNTIME_OUTPUT_DIRECTORY
+   /variable/CMAKE_RUNTIME_OUTPUT_DIRECTORY_CONFIG
+   /variable/CMAKE_SHARED_LINKER_FLAGS
+   /variable/CMAKE_SHARED_LINKER_FLAGS_CONFIG
+   /variable/CMAKE_SHARED_LINKER_FLAGS_CONFIG_INIT
+   /variable/CMAKE_SHARED_LINKER_FLAGS_INIT
+   /variable/CMAKE_SKIP_BUILD_RPATH
+   /variable/CMAKE_SKIP_INSTALL_RPATH
+   /variable/CMAKE_STATIC_LINKER_FLAGS
+   /variable/CMAKE_STATIC_LINKER_FLAGS_CONFIG
+   /variable/CMAKE_STATIC_LINKER_FLAGS_CONFIG_INIT
+   /variable/CMAKE_STATIC_LINKER_FLAGS_INIT
+   /variable/CMAKE_TRY_COMPILE_CONFIGURATION
+   /variable/CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
+   /variable/CMAKE_TRY_COMPILE_TARGET_TYPE
+   /variable/CMAKE_UNITY_BUILD
+   /variable/CMAKE_UNITY_BUILD_BATCH_SIZE
+   /variable/CMAKE_UNITY_BUILD_UNIQUE_ID
+   /variable/CMAKE_USE_RELATIVE_PATHS
+   /variable/CMAKE_VISIBILITY_INLINES_HIDDEN
+   /variable/CMAKE_VS_GLOBALS
+   /variable/CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD
+   /variable/CMAKE_VS_INCLUDE_PACKAGE_TO_DEFAULT_BUILD
+   /variable/CMAKE_VS_JUST_MY_CODE_DEBUGGING
+   /variable/CMAKE_VS_SDK_EXCLUDE_DIRECTORIES
+   /variable/CMAKE_VS_SDK_EXECUTABLE_DIRECTORIES
+   /variable/CMAKE_VS_SDK_INCLUDE_DIRECTORIES
+   /variable/CMAKE_VS_SDK_LIBRARY_DIRECTORIES
+   /variable/CMAKE_VS_SDK_LIBRARY_WINRT_DIRECTORIES
+   /variable/CMAKE_VS_SDK_REFERENCE_DIRECTORIES
+   /variable/CMAKE_VS_SDK_SOURCE_DIRECTORIES
+   /variable/CMAKE_VS_WINRT_BY_DEFAULT
+   /variable/CMAKE_WIN32_EXECUTABLE
+   /variable/CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS
+   /variable/CMAKE_XCODE_ATTRIBUTE_an-attribute
+   /variable/EXECUTABLE_OUTPUT_PATH
+   /variable/LIBRARY_OUTPUT_PATH
+
+Variables for Languages
+=======================
+
+.. toctree::
+   :maxdepth: 1
+
+   /variable/CMAKE_COMPILER_IS_GNUCC
+   /variable/CMAKE_COMPILER_IS_GNUCXX
+   /variable/CMAKE_COMPILER_IS_GNUG77
+   /variable/CMAKE_CUDA_ARCHITECTURES
+   /variable/CMAKE_CUDA_COMPILE_FEATURES
+   /variable/CMAKE_CUDA_EXTENSIONS
+   /variable/CMAKE_CUDA_HOST_COMPILER
+   /variable/CMAKE_CUDA_STANDARD
+   /variable/CMAKE_CUDA_STANDARD_REQUIRED
+   /variable/CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES
+   /variable/CMAKE_CXX_COMPILE_FEATURES
+   /variable/CMAKE_CXX_EXTENSIONS
+   /variable/CMAKE_CXX_STANDARD
+   /variable/CMAKE_CXX_STANDARD_REQUIRED
+   /variable/CMAKE_C_COMPILE_FEATURES
+   /variable/CMAKE_C_EXTENSIONS
+   /variable/CMAKE_C_STANDARD
+   /variable/CMAKE_C_STANDARD_REQUIRED
+   /variable/CMAKE_Fortran_MODDIR_DEFAULT
+   /variable/CMAKE_Fortran_MODDIR_FLAG
+   /variable/CMAKE_Fortran_MODOUT_FLAG
+   /variable/CMAKE_HIP_ARCHITECTURES
+   /variable/CMAKE_HIP_EXTENSIONS
+   /variable/CMAKE_HIP_STANDARD
+   /variable/CMAKE_HIP_STANDARD_REQUIRED
+   /variable/CMAKE_ISPC_HEADER_DIRECTORY
+   /variable/CMAKE_ISPC_HEADER_SUFFIX
+   /variable/CMAKE_ISPC_INSTRUCTION_SETS
+   /variable/CMAKE_LANG_ANDROID_TOOLCHAIN_MACHINE
+   /variable/CMAKE_LANG_ANDROID_TOOLCHAIN_PREFIX
+   /variable/CMAKE_LANG_ANDROID_TOOLCHAIN_SUFFIX
+   /variable/CMAKE_LANG_ARCHIVE_APPEND
+   /variable/CMAKE_LANG_ARCHIVE_CREATE
+   /variable/CMAKE_LANG_ARCHIVE_FINISH
+   /variable/CMAKE_LANG_BYTE_ORDER
+   /variable/CMAKE_LANG_COMPILER
+   /variable/CMAKE_LANG_COMPILER_EXTERNAL_TOOLCHAIN
+   /variable/CMAKE_LANG_COMPILER_ID
+   /variable/CMAKE_LANG_COMPILER_LOADED
+   /variable/CMAKE_LANG_COMPILER_PREDEFINES_COMMAND
+   /variable/CMAKE_LANG_COMPILER_TARGET
+   /variable/CMAKE_LANG_COMPILER_VERSION
+   /variable/CMAKE_LANG_COMPILE_OBJECT
+   /variable/CMAKE_LANG_CREATE_SHARED_LIBRARY
+   /variable/CMAKE_LANG_CREATE_SHARED_MODULE
+   /variable/CMAKE_LANG_CREATE_STATIC_LIBRARY
+   /variable/CMAKE_LANG_EXTENSIONS
+   /variable/CMAKE_LANG_EXTENSIONS_DEFAULT
+   /variable/CMAKE_LANG_FLAGS
+   /variable/CMAKE_LANG_FLAGS_CONFIG
+   /variable/CMAKE_LANG_FLAGS_CONFIG_INIT
+   /variable/CMAKE_LANG_FLAGS_DEBUG
+   /variable/CMAKE_LANG_FLAGS_DEBUG_INIT
+   /variable/CMAKE_LANG_FLAGS_INIT
+   /variable/CMAKE_LANG_FLAGS_MINSIZEREL
+   /variable/CMAKE_LANG_FLAGS_MINSIZEREL_INIT
+   /variable/CMAKE_LANG_FLAGS_RELEASE
+   /variable/CMAKE_LANG_FLAGS_RELEASE_INIT
+   /variable/CMAKE_LANG_FLAGS_RELWITHDEBINFO
+   /variable/CMAKE_LANG_FLAGS_RELWITHDEBINFO_INIT
+   /variable/CMAKE_LANG_IGNORE_EXTENSIONS
+   /variable/CMAKE_LANG_IMPLICIT_INCLUDE_DIRECTORIES
+   /variable/CMAKE_LANG_IMPLICIT_LINK_DIRECTORIES
+   /variable/CMAKE_LANG_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES
+   /variable/CMAKE_LANG_IMPLICIT_LINK_LIBRARIES
+   /variable/CMAKE_LANG_LIBRARY_ARCHITECTURE
+   /variable/CMAKE_LANG_LINK_EXECUTABLE
+   /variable/CMAKE_LANG_LINKER_PREFERENCE
+   /variable/CMAKE_LANG_LINKER_PREFERENCE_PROPAGATES
+   /variable/CMAKE_LANG_LINKER_WRAPPER_FLAG
+   /variable/CMAKE_LANG_LINKER_WRAPPER_FLAG_SEP
+   /variable/CMAKE_LANG_OUTPUT_EXTENSION
+   /variable/CMAKE_LANG_SIMULATE_ID
+   /variable/CMAKE_LANG_SIMULATE_VERSION
+   /variable/CMAKE_LANG_SIZEOF_DATA_PTR
+   /variable/CMAKE_LANG_SOURCE_FILE_EXTENSIONS
+   /variable/CMAKE_LANG_STANDARD
+   /variable/CMAKE_LANG_STANDARD_DEFAULT
+   /variable/CMAKE_LANG_STANDARD_INCLUDE_DIRECTORIES
+   /variable/CMAKE_LANG_STANDARD_LIBRARIES
+   /variable/CMAKE_LANG_STANDARD_REQUIRED
+   /variable/CMAKE_OBJC_EXTENSIONS
+   /variable/CMAKE_OBJC_STANDARD
+   /variable/CMAKE_OBJC_STANDARD_REQUIRED
+   /variable/CMAKE_OBJCXX_EXTENSIONS
+   /variable/CMAKE_OBJCXX_STANDARD
+   /variable/CMAKE_OBJCXX_STANDARD_REQUIRED
+   /variable/CMAKE_Swift_LANGUAGE_VERSION
+   /variable/CMAKE_USER_MAKE_RULES_OVERRIDE_LANG
+
+Variables for CTest
+===================
+
+.. toctree::
+   :maxdepth: 1
+
+   /variable/CTEST_BINARY_DIRECTORY
+   /variable/CTEST_BUILD_COMMAND
+   /variable/CTEST_BUILD_NAME
+   /variable/CTEST_BZR_COMMAND
+   /variable/CTEST_BZR_UPDATE_OPTIONS
+   /variable/CTEST_CHANGE_ID
+   /variable/CTEST_CHECKOUT_COMMAND
+   /variable/CTEST_CONFIGURATION_TYPE
+   /variable/CTEST_CONFIGURE_COMMAND
+   /variable/CTEST_COVERAGE_COMMAND
+   /variable/CTEST_COVERAGE_EXTRA_FLAGS
+   /variable/CTEST_CURL_OPTIONS
+   /variable/CTEST_CUSTOM_COVERAGE_EXCLUDE
+   /variable/CTEST_CUSTOM_ERROR_EXCEPTION
+   /variable/CTEST_CUSTOM_ERROR_MATCH
+   /variable/CTEST_CUSTOM_ERROR_POST_CONTEXT
+   /variable/CTEST_CUSTOM_ERROR_PRE_CONTEXT
+   /variable/CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE
+   /variable/CTEST_CUSTOM_MAXIMUM_NUMBER_OF_ERRORS
+   /variable/CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS
+   /variable/CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE
+   /variable/CTEST_CUSTOM_MEMCHECK_IGNORE
+   /variable/CTEST_CUSTOM_POST_MEMCHECK
+   /variable/CTEST_CUSTOM_POST_TEST
+   /variable/CTEST_CUSTOM_PRE_MEMCHECK
+   /variable/CTEST_CUSTOM_PRE_TEST
+   /variable/CTEST_CUSTOM_TESTS_IGNORE
+   /variable/CTEST_CUSTOM_WARNING_EXCEPTION
+   /variable/CTEST_CUSTOM_WARNING_MATCH
+   /variable/CTEST_CVS_CHECKOUT
+   /variable/CTEST_CVS_COMMAND
+   /variable/CTEST_CVS_UPDATE_OPTIONS
+   /variable/CTEST_DROP_LOCATION
+   /variable/CTEST_DROP_METHOD
+   /variable/CTEST_DROP_SITE
+   /variable/CTEST_DROP_SITE_CDASH
+   /variable/CTEST_DROP_SITE_PASSWORD
+   /variable/CTEST_DROP_SITE_USER
+   /variable/CTEST_EXTRA_COVERAGE_GLOB
+   /variable/CTEST_GIT_COMMAND
+   /variable/CTEST_GIT_INIT_SUBMODULES
+   /variable/CTEST_GIT_UPDATE_CUSTOM
+   /variable/CTEST_GIT_UPDATE_OPTIONS
+   /variable/CTEST_HG_COMMAND
+   /variable/CTEST_HG_UPDATE_OPTIONS
+   /variable/CTEST_LABELS_FOR_SUBPROJECTS
+   /variable/CTEST_MEMORYCHECK_COMMAND
+   /variable/CTEST_MEMORYCHECK_COMMAND_OPTIONS
+   /variable/CTEST_MEMORYCHECK_SANITIZER_OPTIONS
+   /variable/CTEST_MEMORYCHECK_SUPPRESSIONS_FILE
+   /variable/CTEST_MEMORYCHECK_TYPE
+   /variable/CTEST_NIGHTLY_START_TIME
+   /variable/CTEST_P4_CLIENT
+   /variable/CTEST_P4_COMMAND
+   /variable/CTEST_P4_OPTIONS
+   /variable/CTEST_P4_UPDATE_OPTIONS
+   /variable/CTEST_RESOURCE_SPEC_FILE
+   /variable/CTEST_RUN_CURRENT_SCRIPT
+   /variable/CTEST_SCP_COMMAND
+   /variable/CTEST_SCRIPT_DIRECTORY
+   /variable/CTEST_SITE
+   /variable/CTEST_SUBMIT_URL
+   /variable/CTEST_SOURCE_DIRECTORY
+   /variable/CTEST_SVN_COMMAND
+   /variable/CTEST_SVN_OPTIONS
+   /variable/CTEST_SVN_UPDATE_OPTIONS
+   /variable/CTEST_TEST_LOAD
+   /variable/CTEST_TEST_TIMEOUT
+   /variable/CTEST_TRIGGER_SITE
+   /variable/CTEST_UPDATE_COMMAND
+   /variable/CTEST_UPDATE_OPTIONS
+   /variable/CTEST_UPDATE_VERSION_ONLY
+   /variable/CTEST_UPDATE_VERSION_OVERRIDE
+   /variable/CTEST_USE_LAUNCHERS
+
+Variables for CPack
+===================
+
+.. toctree::
+   :maxdepth: 1
+
+   /variable/CPACK_ABSOLUTE_DESTINATION_FILES
+   /variable/CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY
+   /variable/CPACK_CUSTOM_INSTALL_VARIABLES
+   /variable/CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION
+   /variable/CPACK_INCLUDE_TOPLEVEL_DIRECTORY
+   /variable/CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS
+   /variable/CPACK_PACKAGING_INSTALL_PREFIX
+   /variable/CPACK_SET_DESTDIR
+   /variable/CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION
+
+Variable Expansion Operators
+============================
+
+.. toctree::
+   :maxdepth: 1
+
+   /variable/CACHE
+   /variable/ENV
+
+Internal Variables
+==================
+
+CMake has many internal variables.  Most of them are undocumented.
+Some of them, however, were at some point described as normal
+variables, and therefore may be encountered in legacy code. They
+are subject to change, and not recommended for use in project code.
+
+.. toctree::
+   :maxdepth: 1
+
+   /variable/CMAKE_HOME_DIRECTORY
+   /variable/CMAKE_INTERNAL_PLATFORM_ABI
+   /variable/CMAKE_LANG_COMPILER_ABI
+   /variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID
+   /variable/CMAKE_LANG_COMPILER_VERSION_INTERNAL
+   /variable/CMAKE_LANG_PLATFORM_ID
+   /variable/CMAKE_NOT_USING_CONFIG_FLAGS
+   /variable/CMAKE_VS_INTEL_Fortran_PROJECT_VERSION
diff --git a/share/cmake-3.22/Help/manual/cmake.1.rst b/share/cmake-3.22/Help/manual/cmake.1.rst
new file mode 100644
index 0000000..e23ddd8
--- /dev/null
+++ b/share/cmake-3.22/Help/manual/cmake.1.rst
@@ -0,0 +1,865 @@
+.. cmake-manual-description: CMake Command-Line Reference
+
+cmake(1)
+********
+
+Synopsis
+========
+
+.. parsed-literal::
+
+ `Generate a Project Buildsystem`_
+  cmake [<options>] <path-to-source>
+  cmake [<options>] <path-to-existing-build>
+  cmake [<options>] -S <path-to-source> -B <path-to-build>
+
+ `Build a Project`_
+  cmake --build <dir> [<options>] [-- <build-tool-options>]
+
+ `Install a Project`_
+  cmake --install <dir> [<options>]
+
+ `Open a Project`_
+  cmake --open <dir>
+
+ `Run a Script`_
+  cmake [{-D <var>=<value>}...] -P <cmake-script-file>
+
+ `Run a Command-Line Tool`_
+  cmake -E <command> [<options>]
+
+ `Run the Find-Package Tool`_
+  cmake --find-package [<options>]
+
+ `View Help`_
+  cmake --help[-<topic>]
+
+Description
+===========
+
+The **cmake** executable is the command-line interface of the cross-platform
+buildsystem generator CMake.  The above `Synopsis`_ lists various actions
+the tool can perform as described in sections below.
+
+To build a software project with CMake, `Generate a Project Buildsystem`_.
+Optionally use **cmake** to `Build a Project`_, `Install a Project`_ or just
+run the corresponding build tool (e.g. ``make``) directly.  **cmake** can also
+be used to `View Help`_.
+
+The other actions are meant for use by software developers writing
+scripts in the :manual:`CMake language <cmake-language(7)>` to support
+their builds.
+
+For graphical user interfaces that may be used in place of **cmake**,
+see :manual:`ccmake <ccmake(1)>` and :manual:`cmake-gui <cmake-gui(1)>`.
+For command-line interfaces to the CMake testing and packaging facilities,
+see :manual:`ctest <ctest(1)>` and :manual:`cpack <cpack(1)>`.
+
+For more information on CMake at large, `see also`_ the links at the end
+of this manual.
+
+
+Introduction to CMake Buildsystems
+==================================
+
+A *buildsystem* describes how to build a project's executables and libraries
+from its source code using a *build tool* to automate the process.  For
+example, a buildsystem may be a ``Makefile`` for use with a command-line
+``make`` tool or a project file for an Integrated Development Environment
+(IDE).  In order to avoid maintaining multiple such buildsystems, a project
+may specify its buildsystem abstractly using files written in the
+:manual:`CMake language <cmake-language(7)>`.  From these files CMake
+generates a preferred buildsystem locally for each user through a backend
+called a *generator*.
+
+To generate a buildsystem with CMake, the following must be selected:
+
+Source Tree
+  The top-level directory containing source files provided by the project.
+  The project specifies its buildsystem using files as described in the
+  :manual:`cmake-language(7)` manual, starting with a top-level file named
+  ``CMakeLists.txt``.  These files specify build targets and their
+  dependencies as described in the :manual:`cmake-buildsystem(7)` manual.
+
+Build Tree
+  The top-level directory in which buildsystem files and build output
+  artifacts (e.g. executables and libraries) are to be stored.
+  CMake will write a ``CMakeCache.txt`` file to identify the directory
+  as a build tree and store persistent information such as buildsystem
+  configuration options.
+
+  To maintain a pristine source tree, perform an *out-of-source* build
+  by using a separate dedicated build tree.  An *in-source* build in
+  which the build tree is placed in the same directory as the source
+  tree is also supported, but discouraged.
+
+Generator
+  This chooses the kind of buildsystem to generate.  See the
+  :manual:`cmake-generators(7)` manual for documentation of all generators.
+  Run ``cmake --help`` to see a list of generators available locally.
+  Optionally use the ``-G`` option below to specify a generator, or simply
+  accept the default CMake chooses for the current platform.
+
+  When using one of the :ref:`Command-Line Build Tool Generators`
+  CMake expects that the environment needed by the compiler toolchain
+  is already configured in the shell.  When using one of the
+  :ref:`IDE Build Tool Generators`, no particular environment is needed.
+
+.. _`Generate a Project Buildsystem`:
+
+Generate a Project Buildsystem
+==============================
+
+Run CMake with one of the following command signatures to specify the
+source and build trees and generate a buildsystem:
+
+``cmake [<options>] <path-to-source>``
+  Uses the current working directory as the build tree, and
+  ``<path-to-source>`` as the source tree.  The specified path may
+  be absolute or relative to the current working directory.
+  The source tree must contain a ``CMakeLists.txt`` file and must
+  *not* contain a ``CMakeCache.txt`` file because the latter
+  identifies an existing build tree.  For example:
+
+  .. code-block:: console
+
+    $ mkdir build ; cd build
+    $ cmake ../src
+
+``cmake [<options>] <path-to-existing-build>``
+  Uses ``<path-to-existing-build>`` as the build tree, and loads the
+  path to the source tree from its ``CMakeCache.txt`` file, which must
+  have already been generated by a previous run of CMake.  The specified
+  path may be absolute or relative to the current working directory.
+  For example:
+
+  .. code-block:: console
+
+    $ cd build
+    $ cmake .
+
+``cmake [<options>] -S <path-to-source> -B <path-to-build>``
+  Uses ``<path-to-build>`` as the build tree and ``<path-to-source>``
+  as the source tree.  The specified paths may be absolute or relative
+  to the current working directory.  The source tree must contain a
+  ``CMakeLists.txt`` file.  The build tree will be created automatically
+  if it does not already exist.  For example:
+
+  .. code-block:: console
+
+    $ cmake -S src -B build
+
+In all cases the ``<options>`` may be zero or more of the `Options`_ below.
+
+After generating a buildsystem one may use the corresponding native
+build tool to build the project.  For example, after using the
+:generator:`Unix Makefiles` generator one may run ``make`` directly:
+
+  .. code-block:: console
+
+    $ make
+    $ make install
+
+Alternatively, one may use **cmake** to `Build a Project`_ by
+automatically choosing and invoking the appropriate native build tool.
+
+.. _`CMake Options`:
+
+Options
+-------
+
+.. include:: OPTIONS_BUILD.txt
+
+``-L[A][H]``
+ List non-advanced cached variables.
+
+ List ``CACHE`` variables will run CMake and list all the variables from
+ the CMake ``CACHE`` that are not marked as ``INTERNAL`` or :prop_cache:`ADVANCED`.
+ This will effectively display current CMake settings, which can then be
+ changed with ``-D`` option.  Changing some of the variables may result
+ in more variables being created.  If ``A`` is specified, then it will
+ display also advanced variables.  If ``H`` is specified, it will also
+ display help for each variable.
+
+``-N``
+ View mode only.
+
+ Only load the cache.  Do not actually run configure and generate
+ steps.
+
+``--graphviz=[file]``
+ Generate graphviz of dependencies, see :module:`CMakeGraphVizOptions` for more.
+
+ Generate a graphviz input file that will contain all the library and
+ executable dependencies in the project.  See the documentation for
+ :module:`CMakeGraphVizOptions` for more details.
+
+``--system-information [file]``
+ Dump information about this system.
+
+ Dump a wide range of information about the current system.  If run
+ from the top of a binary tree for a CMake project it will dump
+ additional information such as the cache, log files etc.
+
+``--log-level=<ERROR|WARNING|NOTICE|STATUS|VERBOSE|DEBUG|TRACE>``
+ Set the log level.
+
+ The :command:`message` command will only output messages of the specified
+ log level or higher.  The default log level is ``STATUS``.
+
+ To make a log level persist between CMake runs, set
+ :variable:`CMAKE_MESSAGE_LOG_LEVEL` as a cache variable instead.
+ If both the command line option and the variable are given, the command line
+ option takes precedence.
+
+ For backward compatibility reasons, ``--loglevel`` is also accepted as a
+ synonym for this option.
+
+``--log-context``
+ Enable the :command:`message` command outputting context attached to each
+ message.
+
+ This option turns on showing context for the current CMake run only.
+ To make showing the context persistent for all subsequent CMake runs, set
+ :variable:`CMAKE_MESSAGE_CONTEXT_SHOW` as a cache variable instead.
+ When this command line option is given, :variable:`CMAKE_MESSAGE_CONTEXT_SHOW`
+ is ignored.
+
+``--debug-trycompile``
+ Do not delete the :command:`try_compile` build tree.
+ Only useful on one :command:`try_compile` at a time.
+
+ Do not delete the files and directories created for :command:`try_compile`
+ calls.  This is useful in debugging failed try_compiles.  It may
+ however change the results of the try-compiles as old junk from a
+ previous try-compile may cause a different test to either pass or
+ fail incorrectly.  This option is best used for one try-compile at a
+ time, and only when debugging.
+
+``--debug-output``
+ Put cmake in a debug mode.
+
+ Print extra information during the cmake run like stack traces with
+ :command:`message(SEND_ERROR)` calls.
+
+``--debug-find``
+ Put cmake find commands in a debug mode.
+
+ Print extra find call information during the cmake run to standard
+ error. Output is designed for human consumption and not for parsing.
+ See also the :variable:`CMAKE_FIND_DEBUG_MODE` variable for debugging
+ a more local part of the project.
+
+``--trace``
+ Put cmake in trace mode.
+
+ Print a trace of all calls made and from where.
+
+``--trace-expand``
+ Put cmake in trace mode.
+
+ Like ``--trace``, but with variables expanded.
+
+``--trace-format=<format>``
+ Put cmake in trace mode and sets the trace output format.
+
+ ``<format>`` can be one of the following values.
+
+   ``human``
+     Prints each trace line in a human-readable format. This is the
+     default format.
+
+   ``json-v1``
+     Prints each line as a separate JSON document. Each document is
+     separated by a newline ( ``\n`` ). It is guaranteed that no
+     newline characters will be present inside a JSON document.
+
+     JSON trace format:
+
+     .. code-block:: json
+
+       {
+         "file": "/full/path/to/the/CMake/file.txt",
+         "line": 0,
+         "cmd": "add_executable",
+         "args": ["foo", "bar"],
+         "time": 1579512535.9687231,
+         "frame": 2
+       }
+
+     The members are:
+
+     ``file``
+       The full path to the CMake source file where the function
+       was called.
+
+     ``line``
+       The line in ``file`` of the function call.
+
+     ``defer``
+       Optional member that is present when the function call was deferred
+       by :command:`cmake_language(DEFER)`.  If present, its value is a
+       string containing the deferred call ``<id>``.
+
+     ``cmd``
+       The name of the function that was called.
+
+     ``args``
+       A string list of all function parameters.
+
+     ``time``
+       Timestamp (seconds since epoch) of the function call.
+
+     ``frame``
+       Stack frame depth of the function that was called.
+
+     Additionally, the first JSON document outputted contains the
+     ``version`` key for the current major and minor version of the
+
+     JSON trace format:
+
+     .. code-block:: json
+
+       {
+         "version": {
+           "major": 1,
+           "minor": 1
+         }
+       }
+
+     The members are:
+
+     ``version``
+       Indicates the version of the JSON format. The version has a
+       major and minor components following semantic version conventions.
+
+``--trace-source=<file>``
+ Put cmake in trace mode, but output only lines of a specified file.
+
+ Multiple options are allowed.
+
+``--trace-redirect=<file>``
+ Put cmake in trace mode and redirect trace output to a file instead of stderr.
+
+``--warn-uninitialized``
+ Warn about uninitialized values.
+
+ Print a warning when an uninitialized variable is used.
+
+``--warn-unused-vars``
+ Does nothing.  In CMake versions 3.2 and below this enabled warnings about
+ unused variables.  In CMake versions 3.3 through 3.18 the option was broken.
+ In CMake 3.19 and above the option has been removed.
+
+``--no-warn-unused-cli``
+ Don't warn about command line options.
+
+ Don't find variables that are declared on the command line, but not
+ used.
+
+``--check-system-vars``
+ Find problems with variable usage in system files.
+
+ Normally, unused and uninitialized variables are searched for only
+ in :variable:`CMAKE_SOURCE_DIR` and :variable:`CMAKE_BINARY_DIR`.
+ This flag tells CMake to warn about other files as well.
+
+``--profiling-output=<path>``
+ Used in conjunction with ``--profiling-format`` to output to a given path.
+
+``--profiling-format=<file>``
+ Enable the output of profiling data of CMake script in the given format.
+
+ This can aid performance analysis of CMake scripts executed. Third party
+ applications should be used to process the output into human readable format.
+
+ Currently supported values are:
+ ``google-trace`` Outputs in Google Trace Format, which can be parsed by the
+ about:tracing tab of Google Chrome or using a plugin for a tool like Trace
+ Compass.
+
+``--preset <preset>``, ``--preset=<preset>``
+ Reads a :manual:`preset <cmake-presets(7)>` from
+ ``<path-to-source>/CMakePresets.json`` and
+ ``<path-to-source>/CMakeUserPresets.json``. The preset may specify the
+ generator and the build directory, and a list of variables and other
+ arguments to pass to CMake. The current working directory must contain
+ CMake preset files. The :manual:`CMake GUI <cmake-gui(1)>` can
+ also recognize ``CMakePresets.json`` and ``CMakeUserPresets.json`` files. For
+ full details on these files, see :manual:`cmake-presets(7)`.
+
+ The presets are read before all other command line options. The options
+ specified by the preset (variables, generator, etc.) can all be overridden by
+ manually specifying them on the command line. For example, if the preset sets
+ a variable called ``MYVAR`` to ``1``, but the user sets it to ``2`` with a
+ ``-D`` argument, the value ``2`` is preferred.
+
+``--list-presets, --list-presets=<[configure | build | test | all]>``
+ Lists the available presets. If no option is specified only configure presets
+ will be listed. The current working directory must contain CMake preset files.
+
+.. _`Build Tool Mode`:
+
+Build a Project
+===============
+
+CMake provides a command-line signature to build an already-generated
+project binary tree:
+
+.. code-block:: shell
+
+  cmake --build <dir>             [<options>] [-- <build-tool-options>]
+  cmake --build --preset <preset> [<options>] [-- <build-tool-options>]
+
+This abstracts a native build tool's command-line interface with the
+following options:
+
+``--build <dir>``
+  Project binary directory to be built.  This is required (unless a preset
+  is specified) and must be first.
+
+``--preset <preset>``, ``--preset=<preset>``
+  Use a build preset to specify build options. The project binary directory
+  is inferred from the ``configurePreset`` key. The current working directory
+  must contain CMake preset files.
+  See :manual:`preset <cmake-presets(7)>` for more details.
+
+``--list-presets``
+  Lists the available build presets. The current working directory must
+  contain CMake preset files.
+
+``--parallel [<jobs>], -j [<jobs>]``
+  The maximum number of concurrent processes to use when building.
+  If ``<jobs>`` is omitted the native build tool's default number is used.
+
+  The :envvar:`CMAKE_BUILD_PARALLEL_LEVEL` environment variable, if set,
+  specifies a default parallel level when this option is not given.
+
+  Some native build tools always build in parallel.  The use of ``<jobs>``
+  value of ``1`` can be used to limit to a single job.
+
+``--target <tgt>..., -t <tgt>...``
+  Build ``<tgt>`` instead of the default target.  Multiple targets may be
+  given, separated by spaces.
+
+``--config <cfg>``
+  For multi-configuration tools, choose configuration ``<cfg>``.
+
+``--clean-first``
+  Build target ``clean`` first, then build.
+  (To clean only, use ``--target clean``.)
+
+``--use-stderr``
+  Ignored.  Behavior is default in CMake >= 3.0.
+
+``--verbose, -v``
+  Enable verbose output - if supported - including the build commands to be
+  executed.
+
+  This option can be omitted if :envvar:`VERBOSE` environment variable or
+  :variable:`CMAKE_VERBOSE_MAKEFILE` cached variable is set.
+
+
+``--``
+  Pass remaining options to the native tool.
+
+Run ``cmake --build`` with no options for quick help.
+
+Install a Project
+=================
+
+CMake provides a command-line signature to install an already-generated
+project binary tree:
+
+.. code-block:: shell
+
+  cmake --install <dir> [<options>]
+
+This may be used after building a project to run installation without
+using the generated build system or the native build tool.
+The options are:
+
+``--install <dir>``
+  Project binary directory to install. This is required and must be first.
+
+``--config <cfg>``
+  For multi-configuration generators, choose configuration ``<cfg>``.
+
+``--component <comp>``
+  Component-based install. Only install component ``<comp>``.
+
+``--default-directory-permissions <permissions>``
+  Default directory install permissions. Permissions in format ``<u=rwx,g=rx,o=rx>``.
+
+``--prefix <prefix>``
+  Override the installation prefix, :variable:`CMAKE_INSTALL_PREFIX`.
+
+``--strip``
+  Strip before installing.
+
+``-v, --verbose``
+  Enable verbose output.
+
+  This option can be omitted if :envvar:`VERBOSE` environment variable is set.
+
+Run ``cmake --install`` with no options for quick help.
+
+Open a Project
+==============
+
+.. code-block:: shell
+
+  cmake --open <dir>
+
+Open the generated project in the associated application.  This is only
+supported by some generators.
+
+
+.. _`Script Processing Mode`:
+
+Run a Script
+============
+
+.. code-block:: shell
+
+  cmake [{-D <var>=<value>}...] -P <cmake-script-file> [-- <unparsed-options>...]
+
+Process the given cmake file as a script written in the CMake
+language.  No configure or generate step is performed and the cache
+is not modified.  If variables are defined using ``-D``, this must be
+done before the ``-P`` argument.
+
+Any options after ``--`` are not parsed by CMake, but they are still included
+in the set of :variable:`CMAKE_ARGV<n> <CMAKE_ARGV0>` variables passed to the
+script (including the ``--`` itself).
+
+
+Run a Command-Line Tool
+=======================
+
+CMake provides builtin command-line tools through the signature
+
+.. code-block:: shell
+
+  cmake -E <command> [<options>]
+
+Run ``cmake -E`` or ``cmake -E help`` for a summary of commands.
+Available commands are:
+
+``capabilities``
+  Report cmake capabilities in JSON format. The output is a JSON object
+  with the following keys:
+
+  ``version``
+    A JSON object with version information. Keys are:
+
+    ``string``
+      The full version string as displayed by cmake ``--version``.
+    ``major``
+      The major version number in integer form.
+    ``minor``
+      The minor version number in integer form.
+    ``patch``
+      The patch level in integer form.
+    ``suffix``
+      The cmake version suffix string.
+    ``isDirty``
+      A bool that is set if the cmake build is from a dirty tree.
+
+  ``generators``
+    A list available generators. Each generator is a JSON object with the
+    following keys:
+
+    ``name``
+      A string containing the name of the generator.
+    ``toolsetSupport``
+      ``true`` if the generator supports toolsets and ``false`` otherwise.
+    ``platformSupport``
+      ``true`` if the generator supports platforms and ``false`` otherwise.
+    ``supportedPlatforms``
+      .. versionadded:: 3.21
+
+      Optional member that may be present when the generator supports
+      platform specification via :variable:`CMAKE_GENERATOR_PLATFORM`
+      (``-A ...``).  The value is a list of platforms known to be supported.
+    ``extraGenerators``
+      A list of strings with all the extra generators compatible with
+      the generator.
+
+  ``fileApi``
+    Optional member that is present when the :manual:`cmake-file-api(7)`
+    is available.  The value is a JSON object with one member:
+
+    ``requests``
+      A JSON array containing zero or more supported file-api requests.
+      Each request is a JSON object with members:
+
+      ``kind``
+        Specifies one of the supported :ref:`file-api object kinds`.
+
+      ``version``
+        A JSON array whose elements are each a JSON object containing
+        ``major`` and ``minor`` members specifying non-negative integer
+        version components.
+
+  ``serverMode``
+    ``true`` if cmake supports server-mode and ``false`` otherwise.
+    Always false since CMake 3.20.
+
+``cat <files>...``
+  Concatenate files and print on the standard output.
+
+``chdir <dir> <cmd> [<arg>...]``
+  Change the current working directory and run a command.
+
+``compare_files [--ignore-eol] <file1> <file2>``
+  Check if ``<file1>`` is same as ``<file2>``. If files are the same,
+  then returns ``0``, if not it returns ``1``.  In case of invalid
+  arguments, it returns 2. The ``--ignore-eol`` option
+  implies line-wise comparison and ignores LF/CRLF differences.
+
+``copy <file>... <destination>``
+  Copy files to ``<destination>`` (either file or directory).
+  If multiple files are specified, the ``<destination>`` must be
+  directory and it must exist. Wildcards are not supported.
+  ``copy`` does follow symlinks. That means it does not copy symlinks,
+  but the files or directories it point to.
+
+``copy_directory <dir>... <destination>``
+  Copy content of ``<dir>...`` directories to ``<destination>`` directory.
+  If ``<destination>`` directory does not exist it will be created.
+  ``copy_directory`` does follow symlinks.
+
+``copy_if_different <file>... <destination>``
+  Copy files to ``<destination>`` (either file or directory) if
+  they have changed.
+  If multiple files are specified, the ``<destination>`` must be
+  directory and it must exist.
+  ``copy_if_different`` does follow symlinks.
+
+``create_symlink <old> <new>``
+  Create a symbolic link ``<new>`` naming ``<old>``.
+
+  .. note::
+    Path to where ``<new>`` symbolic link will be created has to exist beforehand.
+
+``create_hardlink <old> <new>``
+  Create a hard link ``<new>`` naming ``<old>``.
+
+  .. note::
+    Path to where ``<new>`` hard link will be created has to exist beforehand.
+    ``<old>`` has to exist beforehand.
+
+``echo [<string>...]``
+  Displays arguments as text.
+
+``echo_append [<string>...]``
+  Displays arguments as text but no new line.
+
+``env [--unset=NAME]... [NAME=VALUE]... COMMAND [ARG]...``
+  Run command in a modified environment.
+
+``environment``
+  Display the current environment variables.
+
+``false``
+  Do nothing, with an exit code of 1.
+
+``make_directory <dir>...``
+  Create ``<dir>`` directories.  If necessary, create parent
+  directories too.  If a directory already exists it will be
+  silently ignored.
+
+``md5sum <file>...``
+  Create MD5 checksum of files in ``md5sum`` compatible format::
+
+     351abe79cd3800b38cdfb25d45015a15  file1.txt
+     052f86c15bbde68af55c7f7b340ab639  file2.txt
+
+``sha1sum <file>...``
+  Create SHA1 checksum of files in ``sha1sum`` compatible format::
+
+     4bb7932a29e6f73c97bb9272f2bdc393122f86e0  file1.txt
+     1df4c8f318665f9a5f2ed38f55adadb7ef9f559c  file2.txt
+
+``sha224sum <file>...``
+  Create SHA224 checksum of files in ``sha224sum`` compatible format::
+
+     b9b9346bc8437bbda630b0b7ddfc5ea9ca157546dbbf4c613192f930  file1.txt
+     6dfbe55f4d2edc5fe5c9197bca51ceaaf824e48eba0cc453088aee24  file2.txt
+
+``sha256sum <file>...``
+  Create SHA256 checksum of files in ``sha256sum`` compatible format::
+
+     76713b23615d31680afeb0e9efe94d47d3d4229191198bb46d7485f9cb191acc  file1.txt
+     15b682ead6c12dedb1baf91231e1e89cfc7974b3787c1e2e01b986bffadae0ea  file2.txt
+
+``sha384sum <file>...``
+  Create SHA384 checksum of files in ``sha384sum`` compatible format::
+
+     acc049fedc091a22f5f2ce39a43b9057fd93c910e9afd76a6411a28a8f2b8a12c73d7129e292f94fc0329c309df49434  file1.txt
+     668ddeb108710d271ee21c0f3acbd6a7517e2b78f9181c6a2ff3b8943af92b0195dcb7cce48aa3e17893173c0a39e23d  file2.txt
+
+``sha512sum <file>...``
+  Create SHA512 checksum of files in ``sha512sum`` compatible format::
+
+     2a78d7a6c5328cfb1467c63beac8ff21794213901eaadafd48e7800289afbc08e5fb3e86aa31116c945ee3d7bf2a6194489ec6101051083d1108defc8e1dba89  file1.txt
+     7a0b54896fe5e70cca6dd643ad6f672614b189bf26f8153061c4d219474b05dad08c4e729af9f4b009f1a1a280cb625454bf587c690f4617c27e3aebdf3b7a2d  file2.txt
+
+``remove [-f] <file>...``
+  .. deprecated:: 3.17
+
+  Remove the file(s). The planned behavior was that if any of the
+  listed files already do not exist, the command returns a non-zero exit code,
+  but no message is logged. The ``-f`` option changes the behavior to return a
+  zero exit code (i.e. success) in such situations instead.
+  ``remove`` does not follow symlinks. That means it remove only symlinks
+  and not files it point to.
+
+  The implementation was buggy and always returned 0. It cannot be fixed without
+  breaking backwards compatibility. Use ``rm`` instead.
+
+``remove_directory <dir>...``
+  .. deprecated:: 3.17
+
+  Remove ``<dir>`` directories and their contents. If a directory does
+  not exist it will be silently ignored.  If ``<dir>`` is a symlink to
+  a directory, just the symlink will be removed.
+  Use ``rm`` instead.
+
+``rename <oldname> <newname>``
+  Rename a file or directory (on one volume). If file with the ``<newname>`` name
+  already exists, then it will be silently replaced.
+
+``rm [-rRf] <file> <dir>...``
+  Remove the files ``<file>`` or directories ``dir``.
+  Use ``-r`` or ``-R`` to remove directories and their contents recursively.
+  If any of the listed files/directories do not exist, the command returns a
+  non-zero exit code, but no message is logged. The ``-f`` option changes
+  the behavior to return a zero exit code (i.e. success) in such
+  situations instead.
+
+``server``
+  Launch :manual:`cmake-server(7)` mode.
+
+``sleep <number>...``
+  Sleep for given number of seconds.
+
+``tar [cxt][vf][zjJ] file.tar [<options>] [--] [<pathname>...]``
+  Create or extract a tar or zip archive.  Options are:
+
+  ``c``
+    Create a new archive containing the specified files.
+    If used, the ``<pathname>...`` argument is mandatory.
+  ``x``
+    Extract to disk from the archive.
+    The ``<pathname>...`` argument could be used to extract only selected files
+    or directories.
+    When extracting selected files or directories, you must provide their exact
+    names including the path, as printed by list (``-t``).
+  ``t``
+    List archive contents.
+    The ``<pathname>...`` argument could be used to list only selected files
+    or directories.
+  ``v``
+    Produce verbose output.
+  ``z``
+    Compress the resulting archive with gzip.
+  ``j``
+    Compress the resulting archive with bzip2.
+  ``J``
+    Compress the resulting archive with XZ.
+  ``--zstd``
+    Compress the resulting archive with Zstandard.
+  ``--files-from=<file>``
+    Read file names from the given file, one per line.
+    Blank lines are ignored.  Lines may not start in ``-``
+    except for ``--add-file=<name>`` to add files whose
+    names start in ``-``.
+  ``--format=<format>``
+    Specify the format of the archive to be created.
+    Supported formats are: ``7zip``, ``gnutar``, ``pax``,
+    ``paxr`` (restricted pax, default), and ``zip``.
+  ``--mtime=<date>``
+    Specify modification time recorded in tarball entries.
+  ``--``
+    Stop interpreting options and treat all remaining arguments
+    as file names, even if they start with ``-``.
+
+
+``time <command> [<args>...]``
+  Run command and display elapsed time.
+
+``touch <file>...``
+  Creates ``<file>`` if file do not exist.
+  If ``<file>`` exists, it is changing ``<file>`` access and modification times.
+
+``touch_nocreate <file>...``
+  Touch a file if it exists but do not create it.  If a file does
+  not exist it will be silently ignored.
+
+``true``
+  Do nothing, with an exit code of 0.
+
+Windows-specific Command-Line Tools
+-----------------------------------
+
+The following ``cmake -E`` commands are available only on Windows:
+
+``delete_regv <key>``
+  Delete Windows registry value.
+
+``env_vs8_wince <sdkname>``
+  Displays a batch file which sets the environment for the provided
+  Windows CE SDK installed in VS2005.
+
+``env_vs9_wince <sdkname>``
+  Displays a batch file which sets the environment for the provided
+  Windows CE SDK installed in VS2008.
+
+``write_regv <key> <value>``
+  Write Windows registry value.
+
+
+Run the Find-Package Tool
+=========================
+
+CMake provides a pkg-config like helper for Makefile-based projects:
+
+.. code-block:: shell
+
+  cmake --find-package [<options>]
+
+It searches a package using :command:`find_package()` and prints the
+resulting flags to stdout.  This can be used instead of pkg-config
+to find installed libraries in plain Makefile-based projects or in
+autoconf-based projects (via ``share/aclocal/cmake.m4``).
+
+.. note::
+  This mode is not well-supported due to some technical limitations.
+  It is kept for compatibility but should not be used in new projects.
+
+
+View Help
+=========
+
+To print selected pages from the CMake documentation, use
+
+.. code-block:: shell
+
+  cmake --help[-<topic>]
+
+with one of the following options:
+
+.. include:: OPTIONS_HELP.txt
+
+To view the presets available for a project, use
+
+.. code-block:: shell
+
+  cmake <source-dir> --list-presets
+
+See Also
+========
+
+.. include:: LINKS.txt
diff --git a/share/cmake-3.18/Help/manual/cpack-generators.7.rst b/share/cmake-3.22/Help/manual/cpack-generators.7.rst
similarity index 100%
rename from share/cmake-3.18/Help/manual/cpack-generators.7.rst
rename to share/cmake-3.22/Help/manual/cpack-generators.7.rst
diff --git a/share/cmake-3.18/Help/manual/cpack.1.rst b/share/cmake-3.22/Help/manual/cpack.1.rst
similarity index 100%
rename from share/cmake-3.18/Help/manual/cpack.1.rst
rename to share/cmake-3.22/Help/manual/cpack.1.rst
diff --git a/share/cmake-3.22/Help/manual/ctest.1.rst b/share/cmake-3.22/Help/manual/ctest.1.rst
new file mode 100644
index 0000000..d66c5a9
--- /dev/null
+++ b/share/cmake-3.22/Help/manual/ctest.1.rst
@@ -0,0 +1,1685 @@
+.. cmake-manual-description: CTest Command-Line Reference
+
+ctest(1)
+********
+
+.. contents::
+
+Synopsis
+========
+
+.. parsed-literal::
+
+ ctest [<options>]
+ ctest --build-and-test <path-to-source> <path-to-build>
+       --build-generator <generator> [<options>...]
+       [--build-options <opts>...] [--test-command <command> [<args>...]]
+ ctest {-D <dashboard> | -M <model> -T <action> | -S <script> | -SP <script>}
+       [-- <dashboard-options>...]
+
+Description
+===========
+
+The **ctest** executable is the CMake test driver program.
+CMake-generated build trees created for projects that use the
+:command:`enable_testing` and :command:`add_test` commands have testing support.
+This program will run the tests and report results.
+
+.. _`CTest Options`:
+
+Options
+=======
+
+``--preset <preset>``, ``--preset=<preset>``
+ Use a test preset to specify test options. The project binary directory
+ is inferred from the ``configurePreset`` key. The current working directory
+ must contain CMake preset files.
+ See :manual:`preset <cmake-presets(7)>` for more details.
+
+``--list-presets``
+ Lists the available test presets. The current working directory must contain
+ CMake preset files.
+
+``-C <cfg>, --build-config <cfg>``
+ Choose configuration to test.
+
+ Some CMake-generated build trees can have multiple build
+ configurations in the same tree.  This option can be used to specify
+ which one should be tested.  Example configurations are ``Debug`` and
+ ``Release``.
+
+``--progress``
+ Enable short progress output from tests.
+
+ When the output of **ctest** is being sent directly to a terminal, the
+ progress through the set of tests is reported by updating the same line
+ rather than printing start and end messages for each test on new lines.
+ This can significantly reduce the verbosity of the test output.
+ Test completion messages are still output on their own line for failed
+ tests and the final test summary will also still be logged.
+
+ This option can also be enabled by setting the environment variable
+ :envvar:`CTEST_PROGRESS_OUTPUT`.
+
+``-V,--verbose``
+ Enable verbose output from tests.
+
+ Test output is normally suppressed and only summary information is
+ displayed.  This option will show all test output.
+
+``-VV,--extra-verbose``
+ Enable more verbose output from tests.
+
+ Test output is normally suppressed and only summary information is
+ displayed.  This option will show even more test output.
+
+``--debug``
+ Displaying more verbose internals of CTest.
+
+ This feature will result in a large number of output that is mostly
+ useful for debugging dashboard problems.
+
+``--output-on-failure``
+ Output anything outputted by the test program if the test should fail.
+ This option can also be enabled by setting the
+ :envvar:`CTEST_OUTPUT_ON_FAILURE` environment variable
+
+``--stop-on-failure``
+ Stop running the tests when the first failure happens.
+
+``-F``
+ Enable failover.
+
+ This option allows CTest to resume a test set execution that was
+ previously interrupted.  If no interruption occurred, the ``-F`` option
+ will have no effect.
+
+``-j <jobs>, --parallel <jobs>``
+ Run the tests in parallel using the given number of jobs.
+
+ This option tells CTest to run the tests in parallel using given
+ number of jobs. This option can also be set by setting the
+ :envvar:`CTEST_PARALLEL_LEVEL` environment variable.
+
+ This option can be used with the :prop_test:`PROCESSORS` test property.
+
+ See `Label and Subproject Summary`_.
+
+``--resource-spec-file <file>``
+ Run CTest with :ref:`resource allocation <ctest-resource-allocation>` enabled,
+ using the
+ :ref:`resource specification file <ctest-resource-specification-file>`
+ specified in ``<file>``.
+
+ When ``ctest`` is run as a `Dashboard Client`_ this sets the
+ ``ResourceSpecFile`` option of the `CTest Test Step`_.
+
+``--test-load <level>``
+ While running tests in parallel (e.g. with ``-j``), try not to start
+ tests when they may cause the CPU load to pass above a given threshold.
+
+ When ``ctest`` is run as a `Dashboard Client`_ this sets the
+ ``TestLoad`` option of the `CTest Test Step`_.
+
+``-Q,--quiet``
+ Make CTest quiet.
+
+ This option will suppress all the output.  The output log file will
+ still be generated if the ``--output-log`` is specified.  Options such
+ as ``--verbose``, ``--extra-verbose``, and ``--debug`` are ignored
+ if ``--quiet`` is specified.
+
+``-O <file>, --output-log <file>``
+ Output to log file.
+
+ This option tells CTest to write all its output to a ``<file>`` log file.
+
+``--output-junit <file>``
+ Write test results in JUnit format.
+
+ This option tells CTest to write test results to ``<file>`` in JUnit XML
+ format. If ``<file>`` already exists, it will be overwritten. If using the
+ ``-S`` option to run a dashboard script, use the ``OUTPUT_JUNIT`` keyword
+ with the :command:`ctest_test` command instead.
+
+``-N,--show-only[=<format>]``
+ Disable actual execution of tests.
+
+ This option tells CTest to list the tests that would be run but not
+ actually run them.  Useful in conjunction with the ``-R`` and ``-E``
+ options.
+
+ ``<format>`` can be one of the following values.
+
+   ``human``
+     Human-friendly output.  This is not guaranteed to be stable.
+     This is the default.
+
+   ``json-v1``
+     Dump the test information in JSON format.
+     See `Show as JSON Object Model`_.
+
+``-L <regex>, --label-regex <regex>``
+ Run tests with labels matching regular expression as described under
+ :ref:`string(REGEX) <Regex Specification>`.
+
+ This option tells CTest to run only the tests whose labels match the
+ given regular expression.  When more than one ``-L`` option is given,
+ a test will only be run if each regular expression matches at least one
+ of the test's labels (i.e. the multiple ``-L`` labels form an ``AND``
+ relationship).  See `Label Matching`_.
+
+``-R <regex>, --tests-regex <regex>``
+ Run tests matching regular expression.
+
+ This option tells CTest to run only the tests whose names match the
+ given regular expression.
+
+``-E <regex>, --exclude-regex <regex>``
+ Exclude tests matching regular expression.
+
+ This option tells CTest to NOT run the tests whose names match the
+ given regular expression.
+
+``-LE <regex>, --label-exclude <regex>``
+ Exclude tests with labels matching regular expression.
+
+ This option tells CTest to NOT run the tests whose labels match the
+ given regular expression.  When more than one ``-LE`` option is given,
+ a test will only be excluded if each regular expression matches at least one
+ of the test's labels (i.e. the multiple ``-LE`` labels form an ``AND``
+ relationship).  See `Label Matching`_.
+
+``-FA <regex>, --fixture-exclude-any <regex>``
+ Exclude fixtures matching ``<regex>`` from automatically adding any tests to
+ the test set.
+
+ If a test in the set of tests to be executed requires a particular fixture,
+ that fixture's setup and cleanup tests would normally be added to the test set
+ automatically. This option prevents adding setup or cleanup tests for fixtures
+ matching the ``<regex>``. Note that all other fixture behavior is retained,
+ including test dependencies and skipping tests that have fixture setup tests
+ that fail.
+
+``-FS <regex>, --fixture-exclude-setup <regex>``
+ Same as ``-FA`` except only matching setup tests are excluded.
+
+``-FC <regex>, --fixture-exclude-cleanup <regex>``
+ Same as ``-FA`` except only matching cleanup tests are excluded.
+
+``-D <dashboard>, --dashboard <dashboard>``
+ Execute dashboard test.
+
+ This option tells CTest to act as a CDash client and perform a
+ dashboard test.  All tests are ``<Mode><Test>``, where ``<Mode>`` can be
+ ``Experimental``, ``Nightly``, and ``Continuous``, and ``<Test>`` can be
+ ``Start``, ``Update``, ``Configure``, ``Build``, ``Test``,
+ ``Coverage``, and ``Submit``.
+
+ See `Dashboard Client`_.
+
+``-D <var>:<type>=<value>``
+ Define a variable for script mode.
+
+ Pass in variable values on the command line.  Use in conjunction
+ with ``-S`` to pass variable values to a dashboard script.  Parsing ``-D``
+ arguments as variable values is only attempted if the value
+ following ``-D`` does not match any of the known dashboard types.
+
+``-M <model>, --test-model <model>``
+ Sets the model for a dashboard.
+
+ This option tells CTest to act as a CDash client where the ``<model>``
+ can be ``Experimental``, ``Nightly``, and ``Continuous``.
+ Combining ``-M`` and ``-T`` is similar to ``-D``.
+
+ See `Dashboard Client`_.
+
+``-T <action>, --test-action <action>``
+ Sets the dashboard action to perform.
+
+ This option tells CTest to act as a CDash client and perform some
+ action such as ``start``, ``build``, ``test`` etc. See
+ `Dashboard Client Steps`_ for the full list of actions.
+ Combining ``-M`` and ``-T`` is similar to ``-D``.
+
+ See `Dashboard Client`_.
+
+``-S <script>, --script <script>``
+ Execute a dashboard for a configuration.
+
+ This option tells CTest to load in a configuration script which sets
+ a number of parameters such as the binary and source directories.
+ Then CTest will do what is required to create and run a dashboard.
+ This option basically sets up a dashboard and then runs ``ctest -D``
+ with the appropriate options.
+
+ See `Dashboard Client`_.
+
+``-SP <script>, --script-new-process <script>``
+ Execute a dashboard for a configuration.
+
+ This option does the same operations as ``-S`` but it will do them in a
+ separate process.  This is primarily useful in cases where the
+ script may modify the environment and you do not want the modified
+ environment to impact other ``-S`` scripts.
+
+ See `Dashboard Client`_.
+
+``-I [Start,End,Stride,test#,test#|Test file], --tests-information``
+ Run a specific number of tests by number.
+
+ This option causes CTest to run tests starting at number ``Start``,
+ ending at number ``End``, and incrementing by ``Stride``.  Any additional
+ numbers after ``Stride`` are considered individual test numbers.  ``Start``,
+ ``End``, or ``Stride`` can be empty.  Optionally a file can be given that
+ contains the same syntax as the command line.
+
+``-U, --union``
+ Take the Union of ``-I`` and ``-R``.
+
+ When both ``-R`` and ``-I`` are specified by default the intersection of
+ tests are run.  By specifying ``-U`` the union of tests is run instead.
+
+``--rerun-failed``
+ Run only the tests that failed previously.
+
+ This option tells CTest to perform only the tests that failed during
+ its previous run.  When this option is specified, CTest ignores all
+ other options intended to modify the list of tests to run (``-L``, ``-R``,
+ ``-E``, ``-LE``, ``-I``, etc).  In the event that CTest runs and no tests
+ fail, subsequent calls to CTest with the ``--rerun-failed`` option will run
+ the set of tests that most recently failed (if any).
+
+``--repeat <mode>:<n>``
+  Run tests repeatedly based on the given ``<mode>`` up to ``<n>`` times.
+  The modes are:
+
+  ``until-fail``
+    Require each test to run ``<n>`` times without failing in order to pass.
+    This is useful in finding sporadic failures in test cases.
+
+  ``until-pass``
+    Allow each test to run up to ``<n>`` times in order to pass.
+    Repeats tests if they fail for any reason.
+    This is useful in tolerating sporadic failures in test cases.
+
+  ``after-timeout``
+    Allow each test to run up to ``<n>`` times in order to pass.
+    Repeats tests only if they timeout.
+    This is useful in tolerating sporadic timeouts in test cases
+    on busy machines.
+
+``--repeat-until-fail <n>``
+ Equivalent to ``--repeat until-fail:<n>``.
+
+``--max-width <width>``
+ Set the max width for a test name to output.
+
+ Set the maximum width for each test name to show in the output.
+ This allows the user to widen the output to avoid clipping the test
+ name which can be very annoying.
+
+``--interactive-debug-mode [0|1]``
+ Set the interactive mode to ``0`` or ``1``.
+
+ This option causes CTest to run tests in either an interactive mode
+ or a non-interactive mode.  In dashboard mode (``Experimental``, ``Nightly``,
+ ``Continuous``), the default is non-interactive.  In non-interactive mode,
+ the environment variable :envvar:`DASHBOARD_TEST_FROM_CTEST` is set.
+
+ Prior to CMake 3.11, interactive mode on Windows allowed system debug
+ popup windows to appear.  Now, due to CTest's use of ``libuv`` to launch
+ test processes, all system debug popup windows are always blocked.
+
+``--no-label-summary``
+ Disable timing summary information for labels.
+
+ This option tells CTest not to print summary information for each
+ label associated with the tests run.  If there are no labels on the
+ tests, nothing extra is printed.
+
+ See `Label and Subproject Summary`_.
+
+``--no-subproject-summary``
+ Disable timing summary information for subprojects.
+
+ This option tells CTest not to print summary information for each
+ subproject associated with the tests run.  If there are no subprojects on the
+ tests, nothing extra is printed.
+
+ See `Label and Subproject Summary`_.
+
+``--build-and-test``
+See `Build and Test Mode`_.
+
+``--test-dir <dir>``
+Specify the directory in which to look for tests.
+
+``--test-output-size-passed <size>``
+ Limit the output for passed tests to ``<size>`` bytes.
+
+``--test-output-size-failed <size>``
+ Limit the output for failed tests to ``<size>`` bytes.
+
+``--overwrite``
+ Overwrite CTest configuration option.
+
+ By default CTest uses configuration options from configuration file.
+ This option will overwrite the configuration option.
+
+``--force-new-ctest-process``
+ Run child CTest instances as new processes.
+
+ By default CTest will run child CTest instances within the same
+ process.  If this behavior is not desired, this argument will
+ enforce new processes for child CTest processes.
+
+``--schedule-random``
+ Use a random order for scheduling tests.
+
+ This option will run the tests in a random order.  It is commonly
+ used to detect implicit dependencies in a test suite.
+
+``--submit-index``
+ Legacy option for old Dart2 dashboard server feature.
+ Do not use.
+
+``--timeout <seconds>``
+ Set the default test timeout.
+
+ This option effectively sets a timeout on all tests that do not
+ already have a timeout set on them via the :prop_test:`TIMEOUT`
+ property.
+
+``--stop-time <time>``
+ Set a time at which all tests should stop running.
+
+ Set a real time of day at which all tests should timeout.  Example:
+ ``7:00:00 -0400``.  Any time format understood by the curl date parser
+ is accepted.  Local time is assumed if no timezone is specified.
+
+``--print-labels``
+ Print all available test labels.
+
+ This option will not run any tests, it will simply print the list of
+ all labels associated with the test set.
+
+``--no-tests=<[error|ignore]>``
+ Regard no tests found either as error or ignore it.
+
+ If no tests were found, the default behavior of CTest is to always log an
+ error message but to return an error code in script mode only.  This option
+ unifies the behavior of CTest by either returning an error code if no tests
+ were found or by ignoring it.
+
+.. include:: OPTIONS_HELP.txt
+
+.. _`Label Matching`:
+
+Label Matching
+==============
+
+Tests may have labels attached to them. Tests may be included
+or excluded from a test run by filtering on the labels.
+Each individual filter is a regular expression applied to
+the labels attached to a test.
+
+When ``-L`` is used, in order for a test to be included in a
+test run, each regular expression must match at least one
+label.  Using more than one ``-L`` option means "match **all**
+of these".
+
+The ``-LE`` option works just like ``-L``, but excludes tests
+rather than including them. A test is excluded if each regular
+expression matches at least one label.
+
+If a test has no labels attached to it, then ``-L`` will never
+include that test, and ``-LE`` will never exclude that test.
+As an example of tests with labels, consider five tests,
+with the following labels:
+
+* *test1* has labels *tuesday* and *production*
+* *test2* has labels *tuesday* and *test*
+* *test3* has labels *wednesday* and *production*
+* *test4* has label *wednesday*
+* *test5* has labels *friday* and *test*
+
+Running ``ctest`` with ``-L tuesday -L test`` will select *test2*, which has
+both labels. Running CTest with ``-L test`` will select *test2* and
+*test5*, because both of them have a label that matches that regular
+expression.
+
+Because the matching works with regular expressions, take note that
+running CTest with ``-L es`` will match all five tests.
+To select the *tuesday* and *wednesday* tests together, use a single
+regular expression that matches either of them, like ``-L "tue|wed"``.
+
+.. _`Label and Subproject Summary`:
+
+Label and Subproject Summary
+============================
+
+CTest prints timing summary information for each ``LABEL`` and subproject
+associated with the tests run. The label time summary will not include labels
+that are mapped to subprojects.
+
+.. versionadded:: 3.22
+  Labels added dynamically during test execution are also reported in the
+  timing summary.  See :ref:`Additional Labels`.
+
+When the :prop_test:`PROCESSORS` test property is set, CTest will display a
+weighted test timing result in label and subproject summaries. The time is
+reported with `sec*proc` instead of just `sec`.
+
+The weighted time summary reported for each label or subproject ``j``
+is computed as::
+
+  Weighted Time Summary for Label/Subproject j =
+      sum(raw_test_time[j,i] * num_processors[j,i], i=1...num_tests[j])
+
+  for labels/subprojects j=1...total
+
+where:
+
+* ``raw_test_time[j,i]``: Wall-clock time for the ``i`` test
+  for the ``j`` label or subproject
+* ``num_processors[j,i]``: Value of the CTest :prop_test:`PROCESSORS` property
+  for the ``i`` test for the ``j`` label or subproject
+* ``num_tests[j]``: Number of tests associated with the ``j`` label or subproject
+* ``total``: Total number of labels or subprojects that have at least one test run
+
+Therefore, the weighted time summary for each label or subproject represents
+the amount of time that CTest gave to run the tests for each label or
+subproject and gives a good representation of the total expense of the tests
+for each label or subproject when compared to other labels or subprojects.
+
+For example, if ``SubprojectA`` showed ``100 sec*proc`` and ``SubprojectB`` showed
+``10 sec*proc``, then CTest allocated approximately 10 times the CPU/core time
+to run the tests for ``SubprojectA`` than for ``SubprojectB`` (e.g. so if effort
+is going to be expended to reduce the cost of the test suite for the whole
+project, then reducing the cost of the test suite for ``SubprojectA`` would
+likely have a larger impact than effort to reduce the cost of the test suite
+for ``SubprojectB``).
+
+.. _`Build and Test Mode`:
+
+Build and Test Mode
+===================
+
+CTest provides a command-line signature to configure (i.e. run cmake on),
+build, and/or execute a test::
+
+  ctest --build-and-test <path-to-source> <path-to-build>
+        --build-generator <generator>
+        [<options>...]
+        [--build-options <opts>...]
+        [--test-command <command> [<args>...]]
+
+The configure and test steps are optional. The arguments to this command line
+are the source and binary directories.  The ``--build-generator`` option *must*
+be provided to use ``--build-and-test``.  If ``--test-command`` is specified
+then that will be run after the build is complete.  Other options that affect
+this mode include:
+
+``--build-target``
+ Specify a specific target to build.
+
+ If left out the ``all`` target is built.
+
+``--build-nocmake``
+ Run the build without running cmake first.
+
+ Skip the cmake step.
+
+``--build-run-dir``
+ Specify directory to run programs from.
+
+ Directory where programs will be after it has been compiled.
+
+``--build-two-config``
+ Run CMake twice.
+
+``--build-exe-dir``
+ Specify the directory for the executable.
+
+``--build-generator``
+ Specify the generator to use. See the :manual:`cmake-generators(7)` manual.
+
+``--build-generator-platform``
+ Specify the generator-specific platform.
+
+``--build-generator-toolset``
+ Specify the generator-specific toolset.
+
+``--build-project``
+ Specify the name of the project to build.
+
+``--build-makeprogram``
+ Specify the explicit make program to be used by CMake when configuring and
+ building the project. Only applicable for Make and Ninja based generators.
+
+``--build-noclean``
+ Skip the make clean step.
+
+``--build-config-sample``
+ A sample executable to use to determine the configuration that
+ should be used.  e.g.  ``Debug``, ``Release`` etc.
+
+``--build-options``
+ Additional options for configuring the build (i.e. for CMake, not for
+ the build tool).  Note that if this is specified, the ``--build-options``
+ keyword and its arguments must be the last option given on the command
+ line, with the possible exception of ``--test-command``.
+
+``--test-command``
+ The command to run as the test step with the ``--build-and-test`` option.
+ All arguments following this keyword will be assumed to be part of the
+ test command line, so it must be the last option given.
+
+``--test-timeout``
+ The time limit in seconds
+
+.. _`Dashboard Client`:
+
+Dashboard Client
+================
+
+CTest can operate as a client for the `CDash`_ software quality dashboard
+application.  As a dashboard client, CTest performs a sequence of steps
+to configure, build, and test software, and then submits the results to
+a `CDash`_ server. The command-line signature used to submit to `CDash`_ is::
+
+  ctest (-D <dashboard> | -M <model> -T <action> | -S <script> | -SP <script>)
+        [-- <dashboard-options>...]
+
+Options for Dashboard Client include:
+
+``--group <group>``
+ Specify what group you'd like to submit results to
+
+ Submit dashboard to specified group instead of default one.  By
+ default, the dashboard is submitted to Nightly, Experimental, or
+ Continuous group, but by specifying this option, the group can be
+ arbitrary.
+
+ This replaces the deprecated option ``--track``.
+ Despite the name change its behavior is unchanged.
+
+``-A <file>, --add-notes <file>``
+ Add a notes file with submission.
+
+ This option tells CTest to include a notes file when submitting
+ dashboard.
+
+``--tomorrow-tag``
+ ``Nightly`` or ``Experimental`` starts with next day tag.
+
+ This is useful if the build will not finish in one day.
+
+``--extra-submit <file>[;<file>]``
+ Submit extra files to the dashboard.
+
+ This option will submit extra files to the dashboard.
+
+``--http1.0``
+ Submit using `HTTP 1.0`.
+
+ This option will force CTest to use `HTTP 1.0` to submit files to the
+ dashboard, instead of `HTTP 1.1`.
+
+``--no-compress-output``
+ Do not compress test output when submitting.
+
+ This flag will turn off automatic compression of test output.  Use
+ this to maintain compatibility with an older version of CDash which
+ doesn't support compressed test output.
+
+Dashboard Client Steps
+----------------------
+
+CTest defines an ordered list of testing steps of which some or all may
+be run as a dashboard client:
+
+``Start``
+  Start a new dashboard submission to be composed of results recorded
+  by the following steps.
+  See the `CTest Start Step`_ section below.
+
+``Update``
+  Update the source tree from its version control repository.
+  Record the old and new versions and the list of updated source files.
+  See the `CTest Update Step`_ section below.
+
+``Configure``
+  Configure the software by running a command in the build tree.
+  Record the configuration output log.
+  See the `CTest Configure Step`_ section below.
+
+``Build``
+  Build the software by running a command in the build tree.
+  Record the build output log and detect warnings and errors.
+  See the `CTest Build Step`_ section below.
+
+``Test``
+  Test the software by loading a ``CTestTestfile.cmake``
+  from the build tree and executing the defined tests.
+  Record the output and result of each test.
+  See the `CTest Test Step`_ section below.
+
+``Coverage``
+  Compute coverage of the source code by running a coverage
+  analysis tool and recording its output.
+  See the `CTest Coverage Step`_ section below.
+
+``MemCheck``
+  Run the software test suite through a memory check tool.
+  Record the test output, results, and issues reported by the tool.
+  See the `CTest MemCheck Step`_ section below.
+
+``Submit``
+  Submit results recorded from other testing steps to the
+  software quality dashboard server.
+  See the `CTest Submit Step`_ section below.
+
+Dashboard Client Modes
+----------------------
+
+CTest defines three modes of operation as a dashboard client:
+
+``Nightly``
+  This mode is intended to be invoked once per day, typically at night.
+  It enables the ``Start``, ``Update``, ``Configure``, ``Build``, ``Test``,
+  ``Coverage``, and ``Submit`` steps by default.  Selected steps run even
+  if the ``Update`` step reports no changes to the source tree.
+
+``Continuous``
+  This mode is intended to be invoked repeatedly throughout the day.
+  It enables the ``Start``, ``Update``, ``Configure``, ``Build``, ``Test``,
+  ``Coverage``, and ``Submit`` steps by default, but exits after the
+  ``Update`` step if it reports no changes to the source tree.
+
+``Experimental``
+  This mode is intended to be invoked by a developer to test local changes.
+  It enables the ``Start``, ``Configure``, ``Build``, ``Test``, ``Coverage``,
+  and ``Submit`` steps by default.
+
+Dashboard Client via CTest Command-Line
+---------------------------------------
+
+CTest can perform testing on an already-generated build tree.
+Run the ``ctest`` command with the current working directory set
+to the build tree and use one of these signatures::
+
+  ctest -D <mode>[<step>]
+  ctest -M <mode> [ -T <step> ]...
+
+The ``<mode>`` must be one of the above `Dashboard Client Modes`_,
+and each ``<step>`` must be one of the above `Dashboard Client Steps`_.
+
+CTest reads the `Dashboard Client Configuration`_ settings from
+a file in the build tree called either ``CTestConfiguration.ini``
+or ``DartConfiguration.tcl`` (the names are historical).  The format
+of the file is::
+
+  # Lines starting in '#' are comments.
+  # Other non-blank lines are key-value pairs.
+  <setting>: <value>
+
+where ``<setting>`` is the setting name and ``<value>`` is the
+setting value.
+
+In build trees generated by CMake, this configuration file is
+generated by the :module:`CTest` module if included by the project.
+The module uses variables to obtain a value for each setting
+as documented with the settings below.
+
+.. _`CTest Script`:
+
+Dashboard Client via CTest Script
+---------------------------------
+
+CTest can perform testing driven by a :manual:`cmake-language(7)`
+script that creates and maintains the source and build tree as
+well as performing the testing steps.  Run the ``ctest`` command
+with the current working directory set outside of any build tree
+and use one of these signatures::
+
+  ctest -S <script>
+  ctest -SP <script>
+
+The ``<script>`` file must call :ref:`CTest Commands` commands
+to run testing steps explicitly as documented below.  The commands
+obtain `Dashboard Client Configuration`_ settings from their
+arguments or from variables set in the script.
+
+Dashboard Client Configuration
+==============================
+
+The `Dashboard Client Steps`_ may be configured by named
+settings as documented in the following sections.
+
+.. _`CTest Start Step`:
+
+CTest Start Step
+----------------
+
+Start a new dashboard submission to be composed of results recorded
+by the following steps.
+
+In a `CTest Script`_, the :command:`ctest_start` command runs this step.
+Arguments to the command may specify some of the step settings.
+The command first runs the command-line specified by the
+``CTEST_CHECKOUT_COMMAND`` variable, if set, to initialize the source
+directory.
+
+Configuration settings include:
+
+``BuildDirectory``
+  The full path to the project build tree.
+
+  * `CTest Script`_ variable: :variable:`CTEST_BINARY_DIRECTORY`
+  * :module:`CTest` module variable: :variable:`PROJECT_BINARY_DIR`
+
+``SourceDirectory``
+  The full path to the project source tree.
+
+  * `CTest Script`_ variable: :variable:`CTEST_SOURCE_DIRECTORY`
+  * :module:`CTest` module variable: :variable:`PROJECT_SOURCE_DIR`
+
+.. _`CTest Update Step`:
+
+CTest Update Step
+-----------------
+
+In a `CTest Script`_, the :command:`ctest_update` command runs this step.
+Arguments to the command may specify some of the step settings.
+
+Configuration settings to specify the version control tool include:
+
+``BZRCommand``
+  ``bzr`` command-line tool to use if source tree is managed by Bazaar.
+
+  * `CTest Script`_ variable: :variable:`CTEST_BZR_COMMAND`
+  * :module:`CTest` module variable: none
+
+``BZRUpdateOptions``
+  Command-line options to the ``BZRCommand`` when updating the source.
+
+  * `CTest Script`_ variable: :variable:`CTEST_BZR_UPDATE_OPTIONS`
+  * :module:`CTest` module variable: none
+
+``CVSCommand``
+  ``cvs`` command-line tool to use if source tree is managed by CVS.
+
+  * `CTest Script`_ variable: :variable:`CTEST_CVS_COMMAND`
+  * :module:`CTest` module variable: ``CVSCOMMAND``
+
+``CVSUpdateOptions``
+  Command-line options to the ``CVSCommand`` when updating the source.
+
+  * `CTest Script`_ variable: :variable:`CTEST_CVS_UPDATE_OPTIONS`
+  * :module:`CTest` module variable: ``CVS_UPDATE_OPTIONS``
+
+``GITCommand``
+  ``git`` command-line tool to use if source tree is managed by Git.
+
+  * `CTest Script`_ variable: :variable:`CTEST_GIT_COMMAND`
+  * :module:`CTest` module variable: ``GITCOMMAND``
+
+  The source tree is updated by ``git fetch`` followed by
+  ``git reset --hard`` to the ``FETCH_HEAD``.  The result is the same
+  as ``git pull`` except that any local modifications are overwritten.
+  Use ``GITUpdateCustom`` to specify a different approach.
+
+``GITInitSubmodules``
+  If set, CTest will update the repository's submodules before updating.
+
+  * `CTest Script`_ variable: :variable:`CTEST_GIT_INIT_SUBMODULES`
+  * :module:`CTest` module variable: ``CTEST_GIT_INIT_SUBMODULES``
+
+``GITUpdateCustom``
+  Specify a custom command line (as a semicolon-separated list) to run
+  in the source tree (Git work tree) to update it instead of running
+  the ``GITCommand``.
+
+  * `CTest Script`_ variable: :variable:`CTEST_GIT_UPDATE_CUSTOM`
+  * :module:`CTest` module variable: ``CTEST_GIT_UPDATE_CUSTOM``
+
+``GITUpdateOptions``
+  Command-line options to the ``GITCommand`` when updating the source.
+
+  * `CTest Script`_ variable: :variable:`CTEST_GIT_UPDATE_OPTIONS`
+  * :module:`CTest` module variable: ``GIT_UPDATE_OPTIONS``
+
+``HGCommand``
+  ``hg`` command-line tool to use if source tree is managed by Mercurial.
+
+  * `CTest Script`_ variable: :variable:`CTEST_HG_COMMAND`
+  * :module:`CTest` module variable: none
+
+``HGUpdateOptions``
+  Command-line options to the ``HGCommand`` when updating the source.
+
+  * `CTest Script`_ variable: :variable:`CTEST_HG_UPDATE_OPTIONS`
+  * :module:`CTest` module variable: none
+
+``P4Client``
+  Value of the ``-c`` option to the ``P4Command``.
+
+  * `CTest Script`_ variable: :variable:`CTEST_P4_CLIENT`
+  * :module:`CTest` module variable: ``CTEST_P4_CLIENT``
+
+``P4Command``
+  ``p4`` command-line tool to use if source tree is managed by Perforce.
+
+  * `CTest Script`_ variable: :variable:`CTEST_P4_COMMAND`
+  * :module:`CTest` module variable: ``P4COMMAND``
+
+``P4Options``
+  Command-line options to the ``P4Command`` for all invocations.
+
+  * `CTest Script`_ variable: :variable:`CTEST_P4_OPTIONS`
+  * :module:`CTest` module variable: ``CTEST_P4_OPTIONS``
+
+``P4UpdateCustom``
+  Specify a custom command line (as a semicolon-separated list) to run
+  in the source tree (Perforce tree) to update it instead of running
+  the ``P4Command``.
+
+  * `CTest Script`_ variable: none
+  * :module:`CTest` module variable: ``CTEST_P4_UPDATE_CUSTOM``
+
+``P4UpdateOptions``
+  Command-line options to the ``P4Command`` when updating the source.
+
+  * `CTest Script`_ variable: :variable:`CTEST_P4_UPDATE_OPTIONS`
+  * :module:`CTest` module variable: ``CTEST_P4_UPDATE_OPTIONS``
+
+``SVNCommand``
+  ``svn`` command-line tool to use if source tree is managed by Subversion.
+
+  * `CTest Script`_ variable: :variable:`CTEST_SVN_COMMAND`
+  * :module:`CTest` module variable: ``SVNCOMMAND``
+
+``SVNOptions``
+  Command-line options to the ``SVNCommand`` for all invocations.
+
+  * `CTest Script`_ variable: :variable:`CTEST_SVN_OPTIONS`
+  * :module:`CTest` module variable: ``CTEST_SVN_OPTIONS``
+
+``SVNUpdateOptions``
+  Command-line options to the ``SVNCommand`` when updating the source.
+
+  * `CTest Script`_ variable: :variable:`CTEST_SVN_UPDATE_OPTIONS`
+  * :module:`CTest` module variable: ``SVN_UPDATE_OPTIONS``
+
+``UpdateCommand``
+  Specify the version-control command-line tool to use without
+  detecting the VCS that manages the source tree.
+
+  * `CTest Script`_ variable: :variable:`CTEST_UPDATE_COMMAND`
+  * :module:`CTest` module variable: ``<VCS>COMMAND``
+    when ``UPDATE_TYPE`` is ``<vcs>``, else ``UPDATE_COMMAND``
+
+``UpdateOptions``
+  Command-line options to the ``UpdateCommand``.
+
+  * `CTest Script`_ variable: :variable:`CTEST_UPDATE_OPTIONS`
+  * :module:`CTest` module variable: ``<VCS>_UPDATE_OPTIONS``
+    when ``UPDATE_TYPE`` is ``<vcs>``, else ``UPDATE_OPTIONS``
+
+``UpdateType``
+  Specify the version-control system that manages the source
+  tree if it cannot be detected automatically.
+  The value may be ``bzr``, ``cvs``, ``git``, ``hg``,
+  ``p4``, or ``svn``.
+
+  * `CTest Script`_ variable: none, detected from source tree
+  * :module:`CTest` module variable: ``UPDATE_TYPE`` if set,
+    else ``CTEST_UPDATE_TYPE``
+
+.. _`UpdateVersionOnly`:
+
+``UpdateVersionOnly``
+  Specify that you want the version control update command to only
+  discover the current version that is checked out, and not to update
+  to a different version.
+
+  * `CTest Script`_ variable: :variable:`CTEST_UPDATE_VERSION_ONLY`
+
+.. _`UpdateVersionOverride`:
+
+``UpdateVersionOverride``
+  Specify the current version of your source tree.
+
+  When this variable is set to a non-empty string, CTest will report the value
+  you specified rather than using the update command to discover the current
+  version that is checked out. Use of this variable supersedes
+  ``UpdateVersionOnly``. Like ``UpdateVersionOnly``, using this variable tells
+  CTest not to update the source tree to a different version.
+
+  * `CTest Script`_ variable: :variable:`CTEST_UPDATE_VERSION_OVERRIDE`
+
+Additional configuration settings include:
+
+``NightlyStartTime``
+  In the ``Nightly`` dashboard mode, specify the "nightly start time".
+  With centralized version control systems (``cvs`` and ``svn``),
+  the ``Update`` step checks out the version of the software as of
+  this time so that multiple clients choose a common version to test.
+  This is not well-defined in distributed version-control systems so
+  the setting is ignored.
+
+  * `CTest Script`_ variable: :variable:`CTEST_NIGHTLY_START_TIME`
+  * :module:`CTest` module variable: ``NIGHTLY_START_TIME`` if set,
+    else ``CTEST_NIGHTLY_START_TIME``
+
+.. _`CTest Configure Step`:
+
+CTest Configure Step
+--------------------
+
+In a `CTest Script`_, the :command:`ctest_configure` command runs this step.
+Arguments to the command may specify some of the step settings.
+
+Configuration settings include:
+
+``ConfigureCommand``
+  Command-line to launch the software configuration process.
+  It will be executed in the location specified by the
+  ``BuildDirectory`` setting.
+
+  * `CTest Script`_ variable: :variable:`CTEST_CONFIGURE_COMMAND`
+  * :module:`CTest` module variable: :variable:`CMAKE_COMMAND`
+    followed by :variable:`PROJECT_SOURCE_DIR`
+
+``LabelsForSubprojects``
+  Specify a semicolon-separated list of labels that will be treated as
+  subprojects. This mapping will be passed on to CDash when configure, test or
+  build results are submitted.
+
+  * `CTest Script`_ variable: :variable:`CTEST_LABELS_FOR_SUBPROJECTS`
+  * :module:`CTest` module variable: ``CTEST_LABELS_FOR_SUBPROJECTS``
+
+  See `Label and Subproject Summary`_.
+
+.. _`CTest Build Step`:
+
+CTest Build Step
+----------------
+
+In a `CTest Script`_, the :command:`ctest_build` command runs this step.
+Arguments to the command may specify some of the step settings.
+
+Configuration settings include:
+
+``DefaultCTestConfigurationType``
+  When the build system to be launched allows build-time selection
+  of the configuration (e.g. ``Debug``, ``Release``), this specifies
+  the default configuration to be built when no ``-C`` option is
+  given to the ``ctest`` command.  The value will be substituted into
+  the value of ``MakeCommand`` to replace the literal string
+  ``${CTEST_CONFIGURATION_TYPE}`` if it appears.
+
+  * `CTest Script`_ variable: :variable:`CTEST_CONFIGURATION_TYPE`
+  * :module:`CTest` module variable: ``DEFAULT_CTEST_CONFIGURATION_TYPE``,
+    initialized by the :envvar:`CMAKE_CONFIG_TYPE` environment variable
+
+``LabelsForSubprojects``
+  Specify a semicolon-separated list of labels that will be treated as
+  subprojects. This mapping will be passed on to CDash when configure, test or
+  build results are submitted.
+
+  * `CTest Script`_ variable: :variable:`CTEST_LABELS_FOR_SUBPROJECTS`
+  * :module:`CTest` module variable: ``CTEST_LABELS_FOR_SUBPROJECTS``
+
+  See `Label and Subproject Summary`_.
+
+``MakeCommand``
+  Command-line to launch the software build process.
+  It will be executed in the location specified by the
+  ``BuildDirectory`` setting.
+
+  * `CTest Script`_ variable: :variable:`CTEST_BUILD_COMMAND`
+  * :module:`CTest` module variable: ``MAKECOMMAND``,
+    initialized by the :command:`build_command` command
+
+``UseLaunchers``
+  For build trees generated by CMake using one of the
+  :ref:`Makefile Generators` or the :generator:`Ninja`
+  generator, specify whether the
+  ``CTEST_USE_LAUNCHERS`` feature is enabled by the
+  :module:`CTestUseLaunchers` module (also included by the
+  :module:`CTest` module).  When enabled, the generated build
+  system wraps each invocation of the compiler, linker, or
+  custom command line with a "launcher" that communicates
+  with CTest via environment variables and files to report
+  granular build warning and error information.  Otherwise,
+  CTest must "scrape" the build output log for diagnostics.
+
+  * `CTest Script`_ variable: :variable:`CTEST_USE_LAUNCHERS`
+  * :module:`CTest` module variable: ``CTEST_USE_LAUNCHERS``
+
+.. _`CTest Test Step`:
+
+CTest Test Step
+---------------
+
+In a `CTest Script`_, the :command:`ctest_test` command runs this step.
+Arguments to the command may specify some of the step settings.
+
+Configuration settings include:
+
+``ResourceSpecFile``
+  Specify a
+  :ref:`resource specification file <ctest-resource-specification-file>`.
+
+  * `CTest Script`_ variable: :variable:`CTEST_RESOURCE_SPEC_FILE`
+  * :module:`CTest` module variable: ``CTEST_RESOURCE_SPEC_FILE``
+
+  See :ref:`ctest-resource-allocation` for more information.
+
+``LabelsForSubprojects``
+  Specify a semicolon-separated list of labels that will be treated as
+  subprojects. This mapping will be passed on to CDash when configure, test or
+  build results are submitted.
+
+  * `CTest Script`_ variable: :variable:`CTEST_LABELS_FOR_SUBPROJECTS`
+  * :module:`CTest` module variable: ``CTEST_LABELS_FOR_SUBPROJECTS``
+
+  See `Label and Subproject Summary`_.
+
+``TestLoad``
+  While running tests in parallel (e.g. with ``-j``), try not to start
+  tests when they may cause the CPU load to pass above a given threshold.
+
+  * `CTest Script`_ variable: :variable:`CTEST_TEST_LOAD`
+  * :module:`CTest` module variable: ``CTEST_TEST_LOAD``
+
+``TimeOut``
+  The default timeout for each test if not specified by the
+  :prop_test:`TIMEOUT` test property.
+
+  * `CTest Script`_ variable: :variable:`CTEST_TEST_TIMEOUT`
+  * :module:`CTest` module variable: ``DART_TESTING_TIMEOUT``
+
+To report extra test values to CDash, see :ref:`Additional Test Measurements`.
+
+.. _`CTest Coverage Step`:
+
+CTest Coverage Step
+-------------------
+
+In a `CTest Script`_, the :command:`ctest_coverage` command runs this step.
+Arguments to the command may specify some of the step settings.
+
+Configuration settings include:
+
+``CoverageCommand``
+  Command-line tool to perform software coverage analysis.
+  It will be executed in the location specified by the
+  ``BuildDirectory`` setting.
+
+  * `CTest Script`_ variable: :variable:`CTEST_COVERAGE_COMMAND`
+  * :module:`CTest` module variable: ``COVERAGE_COMMAND``
+
+``CoverageExtraFlags``
+  Specify command-line options to the ``CoverageCommand`` tool.
+
+  * `CTest Script`_ variable: :variable:`CTEST_COVERAGE_EXTRA_FLAGS`
+  * :module:`CTest` module variable: ``COVERAGE_EXTRA_FLAGS``
+
+  These options are the first arguments passed to ``CoverageCommand``.
+
+.. _`CTest MemCheck Step`:
+
+CTest MemCheck Step
+-------------------
+
+In a `CTest Script`_, the :command:`ctest_memcheck` command runs this step.
+Arguments to the command may specify some of the step settings.
+
+Configuration settings include:
+
+``MemoryCheckCommand``
+  Command-line tool to perform dynamic analysis.  Test command lines
+  will be launched through this tool.
+
+  * `CTest Script`_ variable: :variable:`CTEST_MEMORYCHECK_COMMAND`
+  * :module:`CTest` module variable: ``MEMORYCHECK_COMMAND``
+
+``MemoryCheckCommandOptions``
+  Specify command-line options to the ``MemoryCheckCommand`` tool.
+  They will be placed prior to the test command line.
+
+  * `CTest Script`_ variable: :variable:`CTEST_MEMORYCHECK_COMMAND_OPTIONS`
+  * :module:`CTest` module variable: ``MEMORYCHECK_COMMAND_OPTIONS``
+
+``MemoryCheckType``
+  Specify the type of memory checking to perform.
+
+  * `CTest Script`_ variable: :variable:`CTEST_MEMORYCHECK_TYPE`
+  * :module:`CTest` module variable: ``MEMORYCHECK_TYPE``
+
+``MemoryCheckSanitizerOptions``
+  Specify options to sanitizers when running with a sanitize-enabled build.
+
+  * `CTest Script`_ variable: :variable:`CTEST_MEMORYCHECK_SANITIZER_OPTIONS`
+  * :module:`CTest` module variable: ``MEMORYCHECK_SANITIZER_OPTIONS``
+
+``MemoryCheckSuppressionFile``
+  Specify a file containing suppression rules for the
+  ``MemoryCheckCommand`` tool.  It will be passed with options
+  appropriate to the tool.
+
+  * `CTest Script`_ variable: :variable:`CTEST_MEMORYCHECK_SUPPRESSIONS_FILE`
+  * :module:`CTest` module variable: ``MEMORYCHECK_SUPPRESSIONS_FILE``
+
+Additional configuration settings include:
+
+``BoundsCheckerCommand``
+  Specify a ``MemoryCheckCommand`` that is known to be command-line
+  compatible with Bounds Checker.
+
+  * `CTest Script`_ variable: none
+  * :module:`CTest` module variable: none
+
+``PurifyCommand``
+  Specify a ``MemoryCheckCommand`` that is known to be command-line
+  compatible with Purify.
+
+  * `CTest Script`_ variable: none
+  * :module:`CTest` module variable: ``PURIFYCOMMAND``
+
+``ValgrindCommand``
+  Specify a ``MemoryCheckCommand`` that is known to be command-line
+  compatible with Valgrind.
+
+  * `CTest Script`_ variable: none
+  * :module:`CTest` module variable: ``VALGRIND_COMMAND``
+
+``ValgrindCommandOptions``
+  Specify command-line options to the ``ValgrindCommand`` tool.
+  They will be placed prior to the test command line.
+
+  * `CTest Script`_ variable: none
+  * :module:`CTest` module variable: ``VALGRIND_COMMAND_OPTIONS``
+
+``DrMemoryCommand``
+  Specify a ``MemoryCheckCommand`` that is known to be a command-line
+  compatible with DrMemory.
+
+  * `CTest Script`_ variable: none
+  * :module:`CTest` module variable: ``DRMEMORY_COMMAND``
+
+``DrMemoryCommandOptions``
+  Specify command-line options to the ``DrMemoryCommand`` tool.
+  They will be placed prior to the test command line.
+
+  * `CTest Script`_ variable: none
+  * :module:`CTest` module variable: ``DRMEMORY_COMMAND_OPTIONS``
+
+``CudaSanitizerCommand``
+  Specify a ``MemoryCheckCommand`` that is known to be a command-line
+  compatible with cuda-memcheck or compute-sanitizer.
+
+  * `CTest Script`_ variable: none
+  * :module:`CTest` module variable: ``CUDA_SANITIZER_COMMAND``
+
+``CudaSanitizerCommandOptions``
+  Specify command-line options to the ``CudaSanitizerCommand`` tool.
+  They will be placed prior to the test command line.
+
+  * `CTest Script`_ variable: none
+  * :module:`CTest` module variable: ``CUDA_SANITIZER_COMMAND_OPTIONS``
+
+.. _`CTest Submit Step`:
+
+CTest Submit Step
+-----------------
+
+In a `CTest Script`_, the :command:`ctest_submit` command runs this step.
+Arguments to the command may specify some of the step settings.
+
+Configuration settings include:
+
+``BuildName``
+  Describe the dashboard client platform with a short string.
+  (Operating system, compiler, etc.)
+
+  * `CTest Script`_ variable: :variable:`CTEST_BUILD_NAME`
+  * :module:`CTest` module variable: ``BUILDNAME``
+
+``CDashVersion``
+  Legacy option.  Not used.
+
+  * `CTest Script`_ variable: none, detected from server
+  * :module:`CTest` module variable: ``CTEST_CDASH_VERSION``
+
+``CTestSubmitRetryCount``
+  Specify a number of attempts to retry submission on network failure.
+
+  * `CTest Script`_ variable: none,
+    use the :command:`ctest_submit` ``RETRY_COUNT`` option.
+  * :module:`CTest` module variable: ``CTEST_SUBMIT_RETRY_COUNT``
+
+``CTestSubmitRetryDelay``
+  Specify a delay before retrying submission on network failure.
+
+  * `CTest Script`_ variable: none,
+    use the :command:`ctest_submit` ``RETRY_DELAY`` option.
+  * :module:`CTest` module variable: ``CTEST_SUBMIT_RETRY_DELAY``
+
+``CurlOptions``
+  Specify a semicolon-separated list of options to control the
+  Curl library that CTest uses internally to connect to the
+  server.  Possible options are ``CURLOPT_SSL_VERIFYPEER_OFF``
+  and ``CURLOPT_SSL_VERIFYHOST_OFF``.
+
+  * `CTest Script`_ variable: :variable:`CTEST_CURL_OPTIONS`
+  * :module:`CTest` module variable: ``CTEST_CURL_OPTIONS``
+
+``DropLocation``
+  Legacy option.  When ``SubmitURL`` is not set, it is constructed from
+  ``DropMethod``, ``DropSiteUser``, ``DropSitePassword``, ``DropSite``, and
+  ``DropLocation``.
+
+  * `CTest Script`_ variable: :variable:`CTEST_DROP_LOCATION`
+  * :module:`CTest` module variable: ``DROP_LOCATION`` if set,
+    else ``CTEST_DROP_LOCATION``
+
+``DropMethod``
+  Legacy option.  When ``SubmitURL`` is not set, it is constructed from
+  ``DropMethod``, ``DropSiteUser``, ``DropSitePassword``, ``DropSite``, and
+  ``DropLocation``.
+
+  * `CTest Script`_ variable: :variable:`CTEST_DROP_METHOD`
+  * :module:`CTest` module variable: ``DROP_METHOD`` if set,
+    else ``CTEST_DROP_METHOD``
+
+``DropSite``
+  Legacy option.  When ``SubmitURL`` is not set, it is constructed from
+  ``DropMethod``, ``DropSiteUser``, ``DropSitePassword``, ``DropSite``, and
+  ``DropLocation``.
+
+  * `CTest Script`_ variable: :variable:`CTEST_DROP_SITE`
+  * :module:`CTest` module variable: ``DROP_SITE`` if set,
+    else ``CTEST_DROP_SITE``
+
+``DropSitePassword``
+  Legacy option.  When ``SubmitURL`` is not set, it is constructed from
+  ``DropMethod``, ``DropSiteUser``, ``DropSitePassword``, ``DropSite``, and
+  ``DropLocation``.
+
+  * `CTest Script`_ variable: :variable:`CTEST_DROP_SITE_PASSWORD`
+  * :module:`CTest` module variable: ``DROP_SITE_PASSWORD`` if set,
+    else ``CTEST_DROP_SITE_PASWORD``
+
+``DropSiteUser``
+  Legacy option.  When ``SubmitURL`` is not set, it is constructed from
+  ``DropMethod``, ``DropSiteUser``, ``DropSitePassword``, ``DropSite``, and
+  ``DropLocation``.
+
+  * `CTest Script`_ variable: :variable:`CTEST_DROP_SITE_USER`
+  * :module:`CTest` module variable: ``DROP_SITE_USER`` if set,
+    else ``CTEST_DROP_SITE_USER``
+
+``IsCDash``
+  Legacy option.  Not used.
+
+  * `CTest Script`_ variable: :variable:`CTEST_DROP_SITE_CDASH`
+  * :module:`CTest` module variable: ``CTEST_DROP_SITE_CDASH``
+
+``ScpCommand``
+  Legacy option.  Not used.
+
+  * `CTest Script`_ variable: :variable:`CTEST_SCP_COMMAND`
+  * :module:`CTest` module variable: ``SCPCOMMAND``
+
+``Site``
+  Describe the dashboard client host site with a short string.
+  (Hostname, domain, etc.)
+
+  * `CTest Script`_ variable: :variable:`CTEST_SITE`
+  * :module:`CTest` module variable: ``SITE``,
+    initialized by the :command:`site_name` command
+
+``SubmitURL``
+  The ``http`` or ``https`` URL of the dashboard server to send the submission
+  to.
+
+  * `CTest Script`_ variable: :variable:`CTEST_SUBMIT_URL`
+  * :module:`CTest` module variable: ``SUBMIT_URL`` if set,
+    else ``CTEST_SUBMIT_URL``
+
+``TriggerSite``
+  Legacy option.  Not used.
+
+  * `CTest Script`_ variable: :variable:`CTEST_TRIGGER_SITE`
+  * :module:`CTest` module variable: ``TRIGGER_SITE`` if set,
+    else ``CTEST_TRIGGER_SITE``
+
+.. _`Show as JSON Object Model`:
+
+Show as JSON Object Model
+=========================
+
+When the ``--show-only=json-v1`` command line option is given, the test
+information is output in JSON format.  Version 1.0 of the JSON object
+model is defined as follows:
+
+``kind``
+  The string "ctestInfo".
+
+``version``
+  A JSON object specifying the version components.  Its members are
+
+  ``major``
+    A non-negative integer specifying the major version component.
+  ``minor``
+    A non-negative integer specifying the minor version component.
+
+``backtraceGraph``
+    JSON object representing backtrace information with the
+    following members:
+
+    ``commands``
+      List of command names.
+    ``files``
+      List of file names.
+    ``nodes``
+      List of node JSON objects with members:
+
+      ``command``
+        Index into the ``commands`` member of the ``backtraceGraph``.
+      ``file``
+        Index into the ``files`` member of the ``backtraceGraph``.
+      ``line``
+        Line number in the file where the backtrace was added.
+      ``parent``
+        Index into the ``nodes`` member of the ``backtraceGraph``
+        representing the parent in the graph.
+
+``tests``
+  A JSON array listing information about each test.  Each entry
+  is a JSON object with members:
+
+  ``name``
+    Test name.
+  ``config``
+    Configuration that the test can run on.
+    Empty string means any config.
+  ``command``
+    List where the first element is the test command and the
+    remaining elements are the command arguments.
+  ``backtrace``
+    Index into the ``nodes`` member of the ``backtraceGraph``.
+  ``properties``
+    Test properties.
+    Can contain keys for each of the supported test properties.
+
+.. _`ctest-resource-allocation`:
+
+Resource Allocation
+===================
+
+CTest provides a mechanism for tests to specify the resources that they need
+in a fine-grained way, and for users to specify the resources available on
+the running machine. This allows CTest to internally keep track of which
+resources are in use and which are free, scheduling tests in a way that
+prevents them from trying to claim resources that are not available.
+
+When the resource allocation feature is used, CTest will not oversubscribe
+resources. For example, if a resource has 8 slots, CTest will not run tests
+that collectively use more than 8 slots at a time. This has the effect of
+limiting how many tests can run at any given time, even if a high ``-j``
+argument is used, if those tests all use some slots from the same resource.
+In addition, it means that a single test that uses more of a resource than is
+available on a machine will not run at all (and will be reported as
+``Not Run``).
+
+A common use case for this feature is for tests that require the use of a GPU.
+Multiple tests can simultaneously allocate memory from a GPU, but if too many
+tests try to do this at once, some of them will fail to allocate, resulting in
+a failed test, even though the test would have succeeded if it had the memory
+it needed. By using the resource allocation feature, each test can specify how
+much memory it requires from a GPU, allowing CTest to schedule tests in a way
+that running several of these tests at once does not exhaust the GPU's memory
+pool.
+
+Please note that CTest has no concept of what a GPU is or how much memory it
+has, nor does it have any way of communicating with a GPU to retrieve this
+information or perform any memory management. CTest simply keeps track of a
+list of abstract resource types, each of which has a certain number of slots
+available for tests to use. Each test specifies the number of slots that it
+requires from a certain resource, and CTest then schedules them in a way that
+prevents the total number of slots in use from exceeding the listed capacity.
+When a test is executed, and slots from a resource are allocated to that test,
+tests may assume that they have exclusive use of those slots for the duration
+of the test's process.
+
+The CTest resource allocation feature consists of two inputs:
+
+* The :ref:`resource specification file <ctest-resource-specification-file>`,
+  described below, which describes the resources available on the system.
+* The :prop_test:`RESOURCE_GROUPS` property of tests, which describes the
+  resources required by the test.
+
+When CTest runs a test, the resources allocated to that test are passed in the
+form of a set of
+:ref:`environment variables <ctest-resource-environment-variables>` as
+described below. Using this information to decide which resource to connect to
+is left to the test writer.
+
+The ``RESOURCE_GROUPS`` property tells CTest what resources a test expects
+to use grouped in a way meaningful to the test.  The test itself must read
+the :ref:`environment variables <ctest-resource-environment-variables>` to
+determine which resources have been allocated to each group.  For example,
+each group may correspond to a process the test will spawn when executed.
+
+Note that even if a test specifies a ``RESOURCE_GROUPS`` property, it is still
+possible for that to test to run without any resource allocation (and without
+the corresponding
+:ref:`environment variables <ctest-resource-environment-variables>`)
+if the user does not pass a resource specification file. Passing this file,
+either through the ``--resource-spec-file`` command-line argument or the
+``RESOURCE_SPEC_FILE`` argument to :command:`ctest_test`, is what activates the
+resource allocation feature. Tests should check the
+``CTEST_RESOURCE_GROUP_COUNT`` environment variable to find out whether or not
+resource allocation is activated. This variable will always (and only) be
+defined if resource allocation is activated. If resource allocation is not
+activated, then the ``CTEST_RESOURCE_GROUP_COUNT`` variable will not exist,
+even if it exists for the parent ``ctest`` process. If a test absolutely must
+have resource allocation, then it can return a failing exit code or use the
+:prop_test:`SKIP_RETURN_CODE` or :prop_test:`SKIP_REGULAR_EXPRESSION`
+properties to indicate a skipped test.
+
+.. _`ctest-resource-specification-file`:
+
+Resource Specification File
+---------------------------
+
+The resource specification file is a JSON file which is passed to CTest, either
+on the :manual:`ctest(1)` command line as ``--resource-spec-file``, or as the
+``RESOURCE_SPEC_FILE`` argument of :command:`ctest_test`. If a dashboard script
+is used and ``RESOURCE_SPEC_FILE`` is not specified, the value of
+:variable:`CTEST_RESOURCE_SPEC_FILE` in the dashboard script is used instead.
+If ``--resource-spec-file``, ``RESOURCE_SPEC_FILE``, and
+:variable:`CTEST_RESOURCE_SPEC_FILE` in the dashboard script are not specified,
+the value of :variable:`CTEST_RESOURCE_SPEC_FILE` in the CMake build is used
+instead. If none of these are specified, no resource spec file is used.
+
+The resource specification file must be a JSON object. All examples in this
+document assume the following resource specification file:
+
+.. code-block:: json
+
+  {
+    "version": {
+      "major": 1,
+      "minor": 0
+    },
+    "local": [
+      {
+        "gpus": [
+          {
+            "id": "0",
+            "slots": 2
+          },
+          {
+            "id": "1",
+            "slots": 4
+          },
+          {
+            "id": "2",
+            "slots": 2
+          },
+          {
+            "id": "3"
+          }
+        ],
+        "crypto_chips": [
+          {
+            "id": "card0",
+            "slots": 4
+          }
+        ]
+      }
+    ]
+  }
+
+The members are:
+
+``version``
+  An object containing a ``major`` integer field and a ``minor`` integer field.
+  Currently, the only supported version is major ``1``, minor ``0``. Any other
+  value is an error.
+
+``local``
+  A JSON array of resource sets present on the system.  Currently, this array
+  is restricted to being of size 1.
+
+  Each array element is a JSON object with members whose names are equal to the
+  desired resource types, such as ``gpus``. These names must start with a
+  lowercase letter or an underscore, and subsequent characters can be a
+  lowercase letter, a digit, or an underscore. Uppercase letters are not
+  allowed, because certain platforms have case-insensitive environment
+  variables. See the `Environment Variables`_ section below for
+  more information. It is recommended that the resource type name be the plural
+  of a noun, such as ``gpus`` or ``crypto_chips`` (and not ``gpu`` or
+  ``crypto_chip``.)
+
+  Please note that the names ``gpus`` and ``crypto_chips`` are just examples,
+  and CTest does not interpret them in any way. You are free to make up any
+  resource type you want to meet your own requirements.
+
+  The value for each resource type is a JSON array consisting of JSON objects,
+  each of which describe a specific instance of the specified resource. These
+  objects have the following members:
+
+  ``id``
+    A string consisting of an identifier for the resource. Each character in
+    the identifier can be a lowercase letter, a digit, or an underscore.
+    Uppercase letters are not allowed.
+
+    Identifiers must be unique within a resource type. However, they do not
+    have to be unique across resource types. For example, it is valid to have a
+    ``gpus`` resource named ``0`` and a ``crypto_chips`` resource named ``0``,
+    but not two ``gpus`` resources both named ``0``.
+
+    Please note that the IDs ``0``, ``1``, ``2``, ``3``, and ``card0`` are just
+    examples, and CTest does not interpret them in any way. You are free to
+    make up any IDs you want to meet your own requirements.
+
+  ``slots``
+    An optional unsigned number specifying the number of slots available on the
+    resource. For example, this could be megabytes of RAM on a GPU, or
+    cryptography units available on a cryptography chip. If ``slots`` is not
+    specified, a default value of ``1`` is assumed.
+
+In the example file above, there are four GPUs with ID's 0 through 3. GPU 0 has
+2 slots, GPU 1 has 4, GPU 2 has 2, and GPU 3 has a default of 1 slot. There is
+also one cryptography chip with 4 slots.
+
+``RESOURCE_GROUPS`` Property
+----------------------------
+
+See :prop_test:`RESOURCE_GROUPS` for a description of this property.
+
+.. _`ctest-resource-environment-variables`:
+
+Environment Variables
+---------------------
+
+Once CTest has decided which resources to allocate to a test, it passes this
+information to the test executable as a series of environment variables. For
+each example below, we will assume that the test in question has a
+:prop_test:`RESOURCE_GROUPS` property of
+``2,gpus:2;gpus:4,gpus:1,crypto_chips:2``.
+
+The following variables are passed to the test process:
+
+.. envvar:: CTEST_RESOURCE_GROUP_COUNT
+
+  The total number of groups specified by the :prop_test:`RESOURCE_GROUPS`
+  property. For example:
+
+  * ``CTEST_RESOURCE_GROUP_COUNT=3``
+
+  This variable will only be defined if :manual:`ctest(1)` has been given a
+  ``--resource-spec-file``, or if :command:`ctest_test` has been given a
+  ``RESOURCE_SPEC_FILE``. If no resource specification file has been given,
+  this variable will not be defined.
+
+.. envvar:: CTEST_RESOURCE_GROUP_<num>
+
+  The list of resource types allocated to each group, with each item
+  separated by a comma. ``<num>`` is a number from zero to
+  ``CTEST_RESOURCE_GROUP_COUNT`` minus one. ``CTEST_RESOURCE_GROUP_<num>``
+  is defined for each ``<num>`` in this range. For example:
+
+  * ``CTEST_RESOURCE_GROUP_0=gpus``
+  * ``CTEST_RESOURCE_GROUP_1=gpus``
+  * ``CTEST_RESOURCE_GROUP_2=crypto_chips,gpus``
+
+.. envvar:: CTEST_RESOURCE_GROUP_<num>_<resource-type>
+
+  The list of resource IDs and number of slots from each ID allocated to each
+  group for a given resource type. This variable consists of a series of
+  pairs, each pair separated by a semicolon, and with the two items in the pair
+  separated by a comma. The first item in each pair is ``id:`` followed by the
+  ID of a resource of type ``<resource-type>``, and the second item is
+  ``slots:`` followed by the number of slots from that resource allocated to
+  the given group. For example:
+
+  * ``CTEST_RESOURCE_GROUP_0_GPUS=id:0,slots:2``
+  * ``CTEST_RESOURCE_GROUP_1_GPUS=id:2,slots:2``
+  * ``CTEST_RESOURCE_GROUP_2_GPUS=id:1,slots:4;id:3,slots:1``
+  * ``CTEST_RESOURCE_GROUP_2_CRYPTO_CHIPS=id:card0,slots:2``
+
+  In this example, group 0 gets 2 slots from GPU ``0``, group 1 gets 2 slots
+  from GPU ``2``, and group 2 gets 4 slots from GPU ``1``, 1 slot from GPU
+  ``3``, and 2 slots from cryptography chip ``card0``.
+
+  ``<num>`` is a number from zero to ``CTEST_RESOURCE_GROUP_COUNT`` minus one.
+  ``<resource-type>`` is the name of a resource type, converted to uppercase.
+  ``CTEST_RESOURCE_GROUP_<num>_<resource-type>`` is defined for the product
+  of each ``<num>`` in the range listed above and each resource type listed in
+  ``CTEST_RESOURCE_GROUP_<num>``.
+
+  Because some platforms have case-insensitive names for environment variables,
+  the names of resource types may not clash in a case-insensitive environment.
+  Because of this, for the sake of simplicity, all resource types must be
+  listed in all lowercase in the
+  :ref:`resource specification file <ctest-resource-specification-file>` and
+  in the :prop_test:`RESOURCE_GROUPS` property, and they are converted to all
+  uppercase in the ``CTEST_RESOURCE_GROUP_<num>_<resource-type>`` environment
+  variable.
+
+See Also
+========
+
+.. include:: LINKS.txt
+
+_`CDash`: https://cdash.org
diff --git a/share/cmake-3.22/Help/manual/presets/example.json b/share/cmake-3.22/Help/manual/presets/example.json
new file mode 100644
index 0000000..b08445a
--- /dev/null
+++ b/share/cmake-3.22/Help/manual/presets/example.json
@@ -0,0 +1,70 @@
+{
+  "version": 3,
+  "cmakeMinimumRequired": {
+    "major": 3,
+    "minor": 21,
+    "patch": 0
+  },
+  "configurePresets": [
+    {
+      "name": "default",
+      "displayName": "Default Config",
+      "description": "Default build using Ninja generator",
+      "generator": "Ninja",
+      "binaryDir": "${sourceDir}/build/default",
+      "cacheVariables": {
+        "FIRST_CACHE_VARIABLE": {
+          "type": "BOOL",
+          "value": "OFF"
+        },
+        "SECOND_CACHE_VARIABLE": "ON"
+      },
+      "environment": {
+        "MY_ENVIRONMENT_VARIABLE": "Test",
+        "PATH": "$env{HOME}/ninja/bin:$penv{PATH}"
+      },
+      "vendor": {
+        "example.com/ExampleIDE/1.0": {
+          "autoFormat": true
+        }
+      }
+    },
+    {
+      "name": "ninja-multi",
+      "inherits": "default",
+      "displayName": "Ninja Multi-Config",
+      "description": "Default build using Ninja Multi-Config generator",
+      "generator": "Ninja Multi-Config"
+    },
+    {
+      "name": "windows-only",
+      "inherits": "default",
+      "displayName": "Windows-only configuration",
+      "description": "This build is only available on Windows",
+      "condition": {
+        "type": "equals",
+        "lhs": "${hostSystemName}",
+        "rhs": "Windows"
+      }
+    }
+  ],
+  "buildPresets": [
+    {
+      "name": "default",
+      "configurePreset": "default"
+    }
+  ],
+  "testPresets": [
+    {
+      "name": "default",
+      "configurePreset": "default",
+      "output": {"outputOnFailure": true},
+      "execution": {"noTestsAction": "error", "stopOnFailure": true}
+    }
+  ],
+  "vendor": {
+    "example.com/ExampleIDE/1.0": {
+      "autoFormat": false
+    }
+  }
+}
diff --git a/share/cmake-3.22/Help/manual/presets/schema.json b/share/cmake-3.22/Help/manual/presets/schema.json
new file mode 100644
index 0000000..7852550
--- /dev/null
+++ b/share/cmake-3.22/Help/manual/presets/schema.json
@@ -0,0 +1,1240 @@
+{
+  "$schema": "http://json-schema.org/draft-07/schema#",
+  "type": "object",
+  "description": "The presets specify the generator and the build directory, and optionally a list of variables and other arguments to pass to CMake.",
+  "oneOf": [
+    {
+      "properties": {
+        "version": {
+          "const": 1,
+          "description": "A required integer representing the version of the JSON schema."
+        },
+        "cmakeMinimumRequired": { "$ref": "#/definitions/cmakeMinimumRequired"},
+        "vendor": { "$ref": "#/definitions/vendor" },
+        "configurePresets": { "$ref": "#/definitions/configurePresetsV1"}
+      },
+      "additionalProperties": false
+    },
+    {
+      "properties": {
+        "version": {
+          "const": 2,
+          "description": "A required integer representing the version of the JSON schema."
+        },
+        "cmakeMinimumRequired": { "$ref": "#/definitions/cmakeMinimumRequired"},
+        "vendor": { "$ref": "#/definitions/vendor" },
+        "configurePresets": { "$ref": "#/definitions/configurePresetsV1"},
+        "buildPresets": { "$ref": "#/definitions/buildPresetsV2"},
+        "testPresets": { "$ref": "#/definitions/testPresetsV2"}
+      },
+      "additionalProperties": false
+    },
+    {
+      "properties": {
+        "version": {
+          "const": 3,
+          "description": "A required integer representing the version of the JSON schema."
+        },
+        "cmakeMinimumRequired": { "$ref": "#/definitions/cmakeMinimumRequired"},
+        "vendor": { "$ref": "#/definitions/vendor" },
+        "configurePresets": { "$ref": "#/definitions/configurePresetsV3"},
+        "buildPresets": { "$ref": "#/definitions/buildPresetsV3"},
+        "testPresets": { "$ref": "#/definitions/testPresetsV3"}
+      },
+      "additionalProperties": false
+    }
+  ],
+  "required": [
+    "version"
+  ],
+  "definitions": {
+    "cmakeMinimumRequired": {
+      "type": "object",
+      "description": "An optional object representing the minimum version of CMake needed to build this project.",
+      "properties": {
+        "major": {
+          "type": "integer",
+          "description": "An optional integer representing the major version."
+        },
+        "minor": {
+          "type": "integer",
+          "description": "An optional integer representing the minor version."
+        },
+        "patch": {
+          "type": "integer",
+          "description": "An optional integer representing the patch version."
+        }
+      },
+      "additionalProperties": false
+    },
+    "vendor": {
+      "type": "object",
+      "description": "An optional map containing vendor-specific information. CMake does not interpret the contents of this field except to verify that it is a map if it does exist. However, the keys should be a vendor-specific domain name followed by a /-separated path. For example, the Example IDE 1.0 could use example.com/ExampleIDE/1.0. The value of each field can be anything desired by the vendor, though will typically be a map.",
+      "properties": {}
+    },
+    "configurePresetsItemsV3": {
+      "type": "array",
+      "description": "A configure preset object.",
+      "items": {
+        "type": "object",
+        "description": "A configure preset object.",
+        "properties": {
+          "binaryDir": {
+            "type": "string",
+            "description": "An optional string representing the path to the output binary directory. This field supports macro expansion. If a relative path is specified, it is calculated relative to the source directory. If binaryDir is not specified, the path is calculated using regular methods."
+          },
+          "generator": {
+            "type": "string",
+            "description": "An optional string representing the generator to use for the preset. If generator is not specified, the normal generator discovery procedure is used. Note that for Visual Studio generators, unlike in the command line -G argument, you cannot include the platform name in the generator name. Use the architecture field instead."
+          },
+          "toolchainFile": {
+            "type": "string",
+            "description": "An optional string representing the path to the toolchain file. This field supports macro expansion. If a relative path is specified, it is calculated relative to the build directory, and if not found, relative to the source directory."
+          },
+          "installDir": {
+            "type": "string",
+            "description": "An optional string representing the path to the installation directory. This field supports macro expansion. If a relative path is specified, it is calculated relative to the source directory."
+          },
+          "condition": { "$ref": "#/definitions/topCondition" }
+        }
+      }
+    },
+    "configurePresetsItemsV1": {
+      "type": "array",
+      "description": "An optional array of configure preset objects.",
+      "items": {
+        "type": "object",
+        "description": "A configure preset object.",
+        "properties": {
+          "name": {
+            "type": "string",
+            "description": "A required string representing the machine-friendly name of the preset. This identifier is used in the --preset argument. There must not be two presets in the union of CMakePresets.json and CMakeUserPresets.json in the same directory with the same name.",
+            "minLength": 1
+          },
+          "hidden": {
+            "type": "boolean",
+            "description": "An optional boolean specifying whether or not a preset should be hidden. If a preset is hidden, it cannot be used in the --preset= argument, will not show up in the CMake GUI, and does not have to have a valid generator or binaryDir, even from inheritance. Hidden presets are intended to be used as a base for other presets to inherit via the inherits field."
+          },
+          "inherits": {
+            "anyOf": [
+              {
+                "type": "string",
+                "description": "An optional string representing the name of the preset to inherit from.",
+                "minLength": 1
+              },
+              {
+                "type": "array",
+                "description": "An optional array of strings representing the names of presets to inherit from. The preset will inherit all of the fields from the inherits presets by default (except name, hidden, inherits, description, and displayName), but can override them as desired. If multiple inherits presets provide conflicting values for the same field, the earlier preset in the inherits list will be preferred. Presets in CMakePresets.json must not inherit from presets in CMakeUserPresets.json.",
+                "items": {
+                  "type": "string",
+                  "description": "An optional string representing the name of the preset to inherit from.",
+                  "minLength": 1
+                }
+              }
+            ]
+          },
+          "vendor": {
+            "type": "object",
+            "description": "An optional map containing vendor-specific information. CMake does not interpret the contents of this field except to verify that it is a map if it does exist. However, it should follow the same conventions as the root-level vendor field. If vendors use their own per-preset vendor field, they should implement inheritance in a sensible manner when appropriate.",
+            "properties": {}
+          },
+          "displayName": {
+            "type": "string",
+            "description": "An optional string with a human-friendly name of the preset."
+          },
+          "description": {
+            "type": "string",
+            "description": "An optional string with a human-friendly description of the preset."
+          },
+          "generator": {
+            "type": "string",
+            "description": "An optional string representing the generator to use for the preset. If generator is not specified, it must be inherited from the inherits preset (unless this preset is hidden). Note that for Visual Studio generators, unlike in the command line -G argument, you cannot include the platform name in the generator name. Use the architecture field instead."
+          },
+          "architecture": {
+            "anyOf": [
+              {
+                "type": "string",
+                "description": "An optional string representing the platform for generators that support it."
+              },
+              {
+                "type": "object",
+                "description": "An optional object representing the platform for generators that support it.",
+                "properties": {
+                  "value": {
+                    "type": "string",
+                    "description": "An optional string representing the value."
+                  },
+                  "strategy": {
+                    "type": "string",
+                    "description": "An optional string telling CMake how to handle the field. Valid values are: \"set\" Set the respective value. This will result in an error for generators that do not support the respective field. \"external\" Do not set the value, even if the generator supports it. This is useful if, for example, a preset uses the Ninja generator, and an IDE knows how to set up the Visual C++ environment from the architecture and toolset fields. In that case, CMake will ignore the field, but the IDE can use them to set up the environment before invoking CMake.",
+                    "enum": [
+                      "set",
+                      "external"
+                    ]
+                  }
+                },
+                "additionalProperties": false
+              }
+            ]
+          },
+          "toolset": {
+            "anyOf": [
+              {
+                "type": "string",
+                "description": "An optional string representing the toolset for generators that support it."
+              },
+              {
+                "type": "object",
+                "description": "An optional object representing the toolset for generators that support it.",
+                "properties": {
+                  "value": {
+                    "type": "string",
+                    "description": "An optional string representing the value."
+                  },
+                  "strategy": {
+                    "type": "string",
+                    "description": "An optional string telling CMake how to handle the field. Valid values are: \"set\" Set the respective value. This will result in an error for generators that do not support the respective field. \"external\" Do not set the value, even if the generator supports it. This is useful if, for example, a preset uses the Ninja generator, and an IDE knows how to set up the Visual C++ environment from the architecture and toolset fields. In that case, CMake will ignore the field, but the IDE can use them to set up the environment before invoking CMake.",
+                    "enum": [
+                      "set",
+                      "external"
+                    ]
+                  }
+                },
+                "additionalProperties": false
+              }
+            ]
+          },
+          "binaryDir": {
+            "type": "string",
+            "description": "An optional string representing the path to the output binary directory. This field supports macro expansion. If a relative path is specified, it is calculated relative to the source directory. If binaryDir is not specified, it must be inherited from the inherits preset (unless this preset is hidden)."
+          },
+          "cmakeExecutable": {
+            "type": "string",
+            "description": "An optional string representing the path to the CMake executable to use for this preset. This is reserved for use by IDEs, and is not used by CMake itself. IDEs that use this field should expand any macros in it."
+          },
+          "cacheVariables": {
+            "type": "object",
+            "description": "An optional map of cache variables. The key is the variable name (which must not be an empty string). Cache variables are inherited through the inherits field, and the preset's variables will be the union of its own cacheVariables and the cacheVariables from all its parents. If multiple presets in this union define the same variable, the standard rules of inherits are applied.",
+            "properties": {},
+            "additionalProperties": {
+              "anyOf": [
+                {
+                  "type": "null",
+                  "description": "Setting a variable to null causes it to not be set, even if a value was inherited from another preset."
+                },
+                {
+                  "type": "boolean",
+                  "description": "A boolean representing the value of the variable. Equivalent to \"TRUE\" or \"FALSE\"."
+                },
+                {
+                  "type": "string",
+                  "description": "A string representing the value of the variable (which supports macro expansion)."
+                },
+                {
+                  "type": "object",
+                  "description": "An object representing the type and value of the variable.",
+                  "properties": {
+                    "type": {
+                      "type": "string",
+                      "description": "An optional string representing the type of the variable. It should be BOOL, FILEPATH, PATH, STRING, or INTERNAL."
+                    },
+                    "value": {
+                      "anyOf": [
+                        {
+                          "type": "boolean",
+                          "description": "A required boolean representing the value of the variable. Equivalent to \"TRUE\" or \"FALSE\"."
+                        },
+                        {
+                          "type": "string",
+                          "description": "A required string representing the value of the variable. This field supports macro expansion."
+                        }
+                      ]
+                    }
+                  },
+                  "required": [
+                    "value"
+                  ],
+                  "additionalProperties": false
+                }
+              ]
+            },
+            "propertyNames": {
+              "pattern": "^.+$"
+            }
+          },
+          "environment": {
+            "type": "object",
+            "description": "An optional map of environment variables. The key is the variable name (which must not be an empty string). Each variable is set regardless of whether or not a value was given to it by the process's environment. This field supports macro expansion, and environment variables in this map may reference each other, and may be listed in any order, as long as such references do not cause a cycle (for example,if ENV_1 is $env{ENV_2}, ENV_2 may not be $env{ENV_1}.) Environment variables are inherited through the inherits field, and the preset's environment will be the union of its own environment and the environment from all its parents. If multiple presets in this union define the same variable, the standard rules of inherits are applied. Setting a variable to null causes it to not be set, even if a value was inherited from another preset.",
+            "properties": {},
+            "additionalProperties": {
+              "anyOf": [
+                {
+                  "type": "null",
+                  "description": "Setting a variable to null causes it to not be set, even if a value was inherited from another preset."
+                },
+                {
+                  "type": "string",
+                  "description": "A string representing the value of the variable."
+                }
+              ]
+            },
+            "propertyNames": {
+              "pattern": "^.+$"
+            }
+          },
+          "warnings": {
+            "type": "object",
+            "description": "An optional object specifying warnings.",
+            "properties": {
+              "dev": {
+                "type": "boolean",
+                "description": "An optional boolean. Equivalent to passing -Wdev or -Wno-dev on the command line. This may not be set to false if errors.dev is set to true."
+              },
+              "deprecated": {
+                "type": "boolean",
+                "description": "An optional boolean. Equivalent to passing -Wdeprecated or -Wno-deprecated on the command line. This may not be set to false if errors.deprecated is set to true."
+              },
+              "uninitialized": {
+                "type": "boolean",
+                "description": "An optional boolean. Setting this to true is equivalent to passing --warn-uninitialized on the command line."
+              },
+              "unusedCli": {
+                "type": "boolean",
+                "description": "An optional boolean. Setting this to false is equivalent to passing --no-warn-unused-cli on the command line."
+              },
+              "systemVars": {
+                "type": "boolean",
+                "description": "An optional boolean. Setting this to true is equivalent to passing --check-system-vars on the command line."
+              }
+            },
+            "additionalProperties": false
+          },
+          "errors": {
+            "type": "object",
+            "description": "An optional object specifying errors.",
+            "properties": {
+              "dev": {
+                "type": "boolean",
+                "description": "An optional boolean. Equivalent to passing -Werror=dev or -Wno-error=dev on the command line. This may not be set to true if warnings.dev is set to false."
+              },
+              "deprecated": {
+                "type": "boolean",
+                "description": "An optional boolean. Equivalent to passing -Werror=deprecated or -Wno-error=deprecated on the command line. This may not be set to true if warnings.deprecated is set to false."
+              }
+            },
+            "additionalProperties": false
+          },
+          "debug": {
+            "type": "object",
+            "description": "An optional object specifying debug options.",
+            "properties": {
+              "output": {
+                "type": "boolean",
+                "description": "An optional boolean. Setting this to true is equivalent to passing --debug-output on the command line."
+              },
+              "tryCompile": {
+                "type": "boolean",
+                "description": "An optional boolean. Setting this to true is equivalent to passing --debug-trycompile on the command line."
+              },
+              "find": {
+                "type": "boolean",
+                "description": "An optional boolean. Setting this to true is equivalent to passing --debug-find on the command line."
+              }
+            },
+            "additionalProperties": false
+          }
+        }
+      }
+    },
+    "configurePresetsV3": {
+      "type": "array",
+      "description": "An optional array of configure preset objects.",
+      "allOf": [
+        { "$ref": "#/definitions/configurePresetsItemsV1" },
+        { "$ref": "#/definitions/configurePresetsItemsV3" }
+      ],
+      "items": {
+        "properties": {
+          "name": {},
+          "hidden": {},
+          "inherits": {},
+          "vendor": {},
+          "displayName": {},
+          "description": {},
+          "generator": {},
+          "architecture": {},
+          "toolset": {},
+          "toolchainFile": {},
+          "binaryDir": {},
+          "installDir": {},
+          "cmakeExecutable": {},
+          "cacheVariables": {},
+          "environment": {},
+          "warnings": {},
+          "errors": {},
+          "debug": {},
+          "condition": {}
+        },
+        "required": [
+          "name"
+        ],
+        "additionalProperties": false
+      }
+    },
+    "configurePresetsV1": {
+      "type": "array",
+      "description": "An optional array of configure preset objects.",
+      "allOf": [
+        { "$ref": "#/definitions/configurePresetsItemsV1" }
+      ],
+      "items": {
+        "properties": {
+          "name": {},
+          "hidden": {},
+          "inherits": {},
+          "vendor": {},
+          "displayName": {},
+          "description": {},
+          "generator": {},
+          "architecture": {},
+          "toolset": {},
+          "binaryDir": {},
+          "cmakeExecutable": {},
+          "cacheVariables": {},
+          "environment": {},
+          "warnings": {},
+          "errors": {},
+          "debug": {}
+        },
+        "required": [
+          "name"
+        ],
+        "additionalProperties": false
+      }
+    },
+    "buildPresetsItemsV3": {
+      "type": "array",
+      "description": "An optional array of build preset objects. Used to specify arguments to cmake --build. Available in version 2 and higher.",
+      "items": {
+        "type": "object",
+        "properties": {
+          "condition": { "$ref": "#/definitions/topCondition" }
+        }
+      }
+    },
+    "buildPresetsItemsV2": {
+      "type": "array",
+      "description": "An optional array of build preset objects. Used to specify arguments to cmake --build. Available in version 2 and higher.",
+      "items": {
+        "type": "object",
+        "properties": {
+          "name": {
+            "type": "string",
+            "description": "A required string representing the machine-friendly name of the preset. This identifier is used in the --preset argument. There must not be two presets (configure, build, or test) in the union of CMakePresets.json and CMakeUserPresets.json in the same directory with the same name.",
+            "minLength": 1
+          },
+          "hidden": {
+            "type": "boolean",
+            "description": "An optional boolean specifying whether or not a preset should be hidden. If a preset is hidden, it cannot be used in the --preset argument, will not show up in the CMake GUI, and does not have to have a valid configurePreset, even from inheritance. Hidden presets are intended to be used as a base for other presets to inherit via the inherits field."
+          },
+          "inherits": {
+            "anyOf": [
+              {
+                "type": "string",
+                "description": "An optional string representing the name of the build preset to inherit from.",
+                "minLength": 1
+              },
+              {
+                "type": "array",
+                "description": "An optional array of strings representing the names of build presets to inherit from. The preset will inherit all of the fields from the inherits presets by default (except name, hidden, inherits, description, and displayName), but can override them as desired. If multiple inherits presets provide conflicting values for the same field, the earlier preset in the inherits list will be preferred. Presets in CMakePresets.json must not inherit from presets in CMakeUserPresets.json.",
+                "items": {
+                  "type": "string",
+                  "description": "An optional string representing the name of the preset to inherit from.",
+                  "minLength": 1
+                }
+              }
+            ]
+          },
+          "configurePreset": {
+            "type": "string",
+            "description": "An optional string specifying the name of a configure preset to associate with this build preset. If configurePreset is not specified, it must be inherited from the inherits preset (unless this preset is hidden). The build tree directory is inferred from the configure preset.",
+            "minLength": 1
+          },
+          "vendor": {
+            "type": "object",
+            "description": "An optional map containing vendor-specific information. CMake does not interpret the contents of this field except to verify that it is a map if it does exist. However, it should follow the same conventions as the root-level vendor field. If vendors use their own per-preset vendor field, they should implement inheritance in a sensible manner when appropriate.",
+            "properties": {}
+          },
+          "displayName": {
+            "type": "string",
+            "description": "An optional string with a human-friendly name of the preset."
+          },
+          "description": {
+            "type": "string",
+            "description": "An optional string with a human-friendly description of the preset."
+          },
+          "inheritConfigureEnvironment": {
+            "type": "boolean",
+            "description": "An optional boolean that defaults to true. If true, the environment variables from the associated configure preset are inherited after all inherited build preset environments, but before environment variables explicitly specified in this build preset."
+          },
+          "environment": {
+            "type": "object",
+            "description": "An optional map of environment variables. The key is the variable name (which must not be an empty string). Each variable is set regardless of whether or not a value was given to it by the process's environment. This field supports macro expansion, and environment variables in this map may reference each other, and may be listed in any order, as long as such references do not cause a cycle (for example,if ENV_1 is $env{ENV_2}, ENV_2 may not be $env{ENV_1}.) Environment variables are inherited through the inherits field, and the preset's environment will be the union of its own environment and the environment from all its parents. If multiple presets in this union define the same variable, the standard rules of inherits are applied. Setting a variable to null causes it to not be set, even if a value was inherited from another preset.",
+            "properties": {},
+            "additionalProperties": {
+              "anyOf": [
+                {
+                  "type": "null",
+                  "description": "Setting a variable to null causes it to not be set, even if a value was inherited from another preset."
+                },
+                {
+                  "type": "string",
+                  "description": "A string representing the value of the variable."
+                }
+              ]
+            },
+            "propertyNames": {
+              "pattern": "^.+$"
+            }
+          },
+          "jobs": {
+            "type": "integer",
+            "description": "An optional integer. Equivalent to passing --parallel or -j on the command line."
+          },
+          "targets": {
+            "anyOf": [
+              {
+                "type": "string",
+                "description": "An optional string. Equivalent to passing --target or -t on the command line. Vendors may ignore the targets property or hide build presets that explicitly specify targets."
+              },
+              {
+                "type": "array",
+                "description": "An optional array of strings. Equivalent to passing --target or -t on the command line. Vendors may ignore the targets property or hide build presets that explicitly specify targets.",
+                "items": {
+                  "type": "string",
+                  "description": "An optional string. Equivalent to passing --target or -t on the command line. Vendors may ignore the targets property or hide build presets that explicitly specify targets."
+                }
+              }
+            ]
+          },
+          "configuration": {
+            "type": "string",
+            "description": "An optional string. Equivalent to passing --config on the command line."
+          },
+          "cleanFirst": {
+            "type": "boolean",
+            "description": "An optional boolean. If true, equivalent to passing --clean-first on the command line."
+          },
+          "verbose": {
+            "type": "boolean",
+            "description": "An optional boolean. If true, equivalent to passing --verbose on the command line."
+          },
+          "nativeToolOptions": {
+            "type": "array",
+            "description": "An optional array of strings. Equivalent to passing options after -- on the command line.",
+            "items": {
+              "type": "string",
+              "description": "An optional string representing an option to pass after -- on the command line."
+            }
+          }
+        },
+        "required": [
+          "name"
+        ]
+      }
+    },
+    "buildPresetsV3": {
+      "type": "array",
+      "description": "An optional array of build preset objects. Used to specify arguments to cmake --build. Available in version 2 and higher.",
+      "allOf": [
+        { "$ref": "#/definitions/buildPresetsItemsV3" },
+        { "$ref": "#/definitions/buildPresetsItemsV2" }
+      ],
+      "items": {
+        "type": "object",
+        "properties": {
+          "name": {},
+          "hidden": {},
+          "inherits": {},
+          "configurePreset": {},
+          "vendor": {},
+          "displayName": {},
+          "description": {},
+          "inheritConfigureEnvironment": {},
+          "environment": {},
+          "jobs": {},
+          "targets": {},
+          "configuration": {},
+          "cleanFirst": {},
+          "verbose": {},
+          "nativeToolOptions": {},
+          "condition": {}
+        },
+        "required": [
+          "name"
+        ],
+        "additionalProperties": false
+      }
+    },
+    "buildPresetsV2": {
+      "type": "array",
+      "description": "An optional array of build preset objects. Used to specify arguments to cmake --build. Available in version 2 and higher.",
+      "allOf": [
+        { "$ref": "#/definitions/buildPresetsItemsV2" }
+      ],
+      "items": {
+        "type": "object",
+        "properties": {
+          "name": {},
+          "hidden": {},
+          "inherits": {},
+          "configurePreset": {},
+          "vendor": {},
+          "displayName": {},
+          "description": {},
+          "inheritConfigureEnvironment": {},
+          "environment": {},
+          "jobs": {},
+          "targets": {},
+          "configuration": {},
+          "cleanFirst": {},
+          "verbose": {},
+          "nativeToolOptions": {}
+        },
+        "required": [
+          "name"
+        ],
+        "additionalProperties": false
+      }
+    },
+    "testPresetsItemsV3": {
+      "type": "array",
+      "description": "An optional array of test preset objects. Used to specify arguments to ctest. Available in version 2 and higher.",
+      "items": {
+        "type": "object",
+        "properties": {
+          "condition": { "$ref": "#/definitions/topCondition" }
+        }
+      }
+    },
+    "testPresetsItemsV2": {
+      "type": "array",
+      "description": "An optional array of test preset objects. Used to specify arguments to ctest. Available in version 2 and higher.",
+      "items": {
+        "type": "object",
+        "properties": {
+          "name": {
+            "type": "string",
+            "description": "A required string representing the machine-friendly name of the preset. This identifier is used in the --preset argument. There must not be two presets (configure, build, or test) in the union of CMakePresets.json and CMakeUserPresets.json in the same directory with the same name.",
+            "minLength": 1
+          },
+          "hidden": {
+            "type": "boolean",
+            "description": "An optional boolean specifying whether or not a preset should be hidden. If a preset is hidden, it cannot be used in the --preset argument, will not show up in the CMake GUI, and does not have to have a valid configurePreset, even from inheritance. Hidden presets are intended to be used as a base for other presets to inherit via the inherits field."
+          },
+          "inherits": {
+            "anyOf": [
+              {
+                "type": "string",
+                "description": "An optional string representing the name of the test preset to inherit from.",
+                "minLength": 1
+              },
+              {
+                "type": "array",
+                "description": "An optional array of strings representing the names of test presets to inherit from. The preset will inherit all of the fields from the inherits presets by default (except name, hidden, inherits, description, and displayName), but can override them as desired. If multiple inherits presets provide conflicting values for the same field, the earlier preset in the inherits list will be preferred. Presets in CMakePresets.json must not inherit from presets in CMakeUserPresets.json.",
+                "items": {
+                  "type": "string",
+                  "description": "An optional string representing the name of the preset to inherit from.",
+                  "minLength": 1
+                }
+              }
+            ]
+          },
+          "configurePreset": {
+            "type": "string",
+            "description": "An optional string specifying the name of a configure preset to associate with this test preset. If configurePreset is not specified, it must be inherited from the inherits preset (unless this preset is hidden). The build tree directory is inferred from the configure preset.",
+            "minLength": 1
+          },
+          "vendor": {
+            "type": "object",
+            "description": "An optional map containing vendor-specific information. CMake does not interpret the contents of this field except to verify that it is a map if it does exist. However, it should follow the same conventions as the root-level vendor field. If vendors use their own per-preset vendor field, they should implement inheritance in a sensible manner when appropriate.",
+            "properties": {}
+          },
+          "displayName": {
+            "type": "string",
+            "description": "An optional string with a human-friendly name of the preset."
+          },
+          "description": {
+            "type": "string",
+            "description": "An optional string with a human-friendly description of the preset."
+          },
+          "inheritConfigureEnvironment": {
+            "type": "boolean",
+            "description": "An optional boolean that defaults to true. If true, the environment variables from the associated configure preset are inherited after all inherited test preset environments, but before environment variables explicitly specified in this test preset."
+          },
+          "environment": {
+            "type": "object",
+            "description": "An optional map of environment variables. The key is the variable name (which must not be an empty string). Each variable is set regardless of whether or not a value was given to it by the process's environment. This field supports macro expansion, and environment variables in this map may reference each other, and may be listed in any order, as long as such references do not cause a cycle (for example,if ENV_1 is $env{ENV_2}, ENV_2 may not be $env{ENV_1}.) Environment variables are inherited through the inherits field, and the preset's environment will be the union of its own environment and the environment from all its parents. If multiple presets in this union define the same variable, the standard rules of inherits are applied. Setting a variable to null causes it to not be set, even if a value was inherited from another preset.",
+            "properties": {},
+            "additionalProperties": {
+              "anyOf": [
+                {
+                  "type": "null",
+                  "description": "Setting a variable to null causes it to not be set, even if a value was inherited from another preset."
+                },
+                {
+                  "type": "string",
+                  "description": "A string representing the value of the variable."
+                }
+              ]
+            },
+            "propertyNames": {
+              "pattern": "^.+$"
+            }
+          },
+          "configuration": {
+            "type": "string",
+            "description": "An optional string. Equivalent to passing --build-config on the command line."
+          },
+          "overwriteConfigurationFile": {
+            "type": "array",
+            "description": "An optional array of configuration options to overwrite options specified in the CTest configuration file. Equivalent to passing ``--overwrite`` for each value in the array.",
+            "items": {
+              "type": "string",
+              "description": "An option written as a key-value pair in the form \"key=value\"."
+            }
+          },
+          "output": {
+            "type": "object",
+            "description": "An optional object specifying output options.",
+            "properties": {
+              "shortProgress": {
+                "type": "boolean",
+                "description": "An optional boolean. If true, equivalent to passing --progress on the command line."
+              },
+              "verbosity": {
+                "type": "string",
+                "description": "An optional string specifying verbosity level. Valid values are \"default\" (equivalent to passing no verbosity flags on the command line), \"verbose\" (equivalent to passing --verbose on the command line), and \"extra\" (equivalent to passing --extra-verbose on the command line).",
+                "enum": [
+                  "default", "verbose", "extra"
+                ]
+              },
+              "debug": {
+                "type": "boolean",
+                "description": "An optional boolean. If true, equivalent to passing --debug on the command line."
+              },
+              "outputOnFailure": {
+                "type": "boolean",
+                "description": "An optional boolean. If true, equivalent to passing --output-on-failure on the command line."
+              },
+              "quiet": {
+                "type": "boolean",
+                "description": "An optional boolean. If true, equivalent to passing --quiet on the command line."
+              },
+              "outputLogFile": {
+                "type": "string",
+                "description": "An optional string specifying a path to a log file. Equivalent to passing --output-log on the command line."
+              },
+              "labelSummary": {
+                "type": "boolean",
+                "description": "An optional boolean. If false, equivalent to passing --no-label-summary on the command line."
+              },
+              "subprojectSummary": {
+                "type": "boolean",
+                "description": "An optional boolean. If false, equivalent to passing --no-subproject-summary on the command line."
+              },
+              "maxPassedTestOutputSize": {
+                "type": "integer",
+                "description": "An optional integer specifying the maximum output for passed tests in bytes. Equivalent to passing --test-output-size-passed on the command line."
+              },
+              "maxFailedTestOutputSize": {
+                "type": "integer",
+                "description": "An optional integer specifying the maximum output for failed tests in bytes. Equivalent to passing --test-output-size-failed on the command line."
+              },
+              "maxTestNameWidth": {
+                "type": "integer",
+                "description": "An optional integer specifying the maximum width of a test name to output. Equivalent to passing --max-width on the command line."
+              }
+            },
+            "additionalProperties": false
+          },
+          "filter": {
+            "type": "object",
+            "description": "An optional object specifying how to filter the tests to run.",
+            "properties": {
+              "include": {
+                "type": "object",
+                "description": "An optional object specifying which tests to include.",
+                "properties": {
+                  "name": {
+                    "type": "string",
+                    "description": "An optional string specifying a regex for test names. Equivalent to passing --tests-regex on the command line."
+                  },
+                  "label": {
+                    "type": "string",
+                    "description": "An optional string specifying a regex for test labels. Equivalent to passing --label-regex on the command line."
+                  },
+                  "index": {
+                    "anyOf": [
+                      {
+                        "type": "object",
+                        "description": "An optional object specifying tests to include by test index.",
+                        "properties": {
+                          "start": {
+                            "type": "integer",
+                            "description": "An optional integer specifying a test index to start testing at."
+                          },
+                          "end": {
+                            "type": "integer",
+                            "description": "An optional integer specifying a test index to stop testing at."
+                          },
+                          "stride": {
+                            "type": "integer",
+                            "description": "An optional integer specifying the increment."
+                          },
+                          "specificTests": {
+                            "type": "array",
+                            "description": "An optional array of integers specifying specific test indices to run.",
+                            "items": {
+                              "type": "integer",
+                              "description": "An integer specifying the test to run by index."
+                            }
+                          }
+                        },
+                        "additionalProperties": false
+                      },
+                      {
+                        "type": "string",
+                        "description": "An optional string specifying a file with the command line syntax for --tests-information."
+                      }
+                    ]
+                  },
+                  "useUnion": {
+                    "type": "boolean",
+                    "description": "An optional boolean. Equivalent to passing --union on the command line."
+                  }
+                },
+                "additionalProperties": false
+              },
+              "exclude": {
+                "type": "object",
+                "description": "An optional object specifying which tests to exclude.",
+                "properties": {
+                  "name": {
+                    "type": "string",
+                    "description": "An optional string specifying a regex for test names. Equivalent to passing --exclude-regex on the command line."
+                  },
+                  "label": {
+                    "type": "string",
+                    "description": "An optional string specifying a regex for test labels. Equivalent to passing --label-exclude on the command line."
+                  },
+                  "fixtures": {
+                    "type": "object",
+                    "description": "An optional object specifying which fixtures to exclude from adding tests.",
+                    "properties": {
+                      "any": {
+                        "type": "string",
+                        "description": "An optional string specifying a regex for text fixtures to exclude from adding any tests. Equivalent to --fixture-exclude-any on the command line."
+                      },
+                      "setup": {
+                        "type": "string",
+                        "description": "An optional string specifying a regex for text fixtures to exclude from adding setup tests. Equivalent to --fixture-exclude-setup on the command line."
+                      },
+                      "cleanup": {
+                        "type": "string",
+                        "description": "An optional string specifying a regex for text fixtures to exclude from adding cleanup tests. Equivalent to --fixture-exclude-cleanup on the command line."
+                      }
+                    },
+                    "additionalProperties": false
+                  }
+                }
+              }
+            },
+            "additionalProperties": false
+          },
+          "execution": {
+            "type": "object",
+            "description": "An optional object specifying options for test execution.",
+            "properties": {
+              "stopOnFailure": {
+                "type": "boolean",
+                "description": "An optional boolean. If true, equivalent to passing --stop-on-failure on the command line."
+              },
+              "enableFailover": {
+                "type": "boolean",
+                "description": "An optional boolean. If true, equivalent to passing -F on the command line."
+              },
+              "jobs": {
+                "type": "integer",
+                "description": "An optional integer. Equivalent to passing --parallel on the command line."
+              },
+              "resourceSpecFile": {
+                "type": "string",
+                "description": "An optional string. Equivalent to passing --resource-spec-file on the command line."
+              },
+              "testLoad": {
+                "type": "integer",
+                "description": "An optional integer. Equivalent to passing --test-load on the command line."
+              },
+              "showOnly": {
+                "type": "string",
+                "description": "An optional string. Equivalent to passing --show-only on the command line. Value must be \"human\" or \"json-v1\".",
+                "enum": [
+                  "human", "json-v1"
+                ]
+              },
+              "repeat": {
+                "type": "object",
+                "description": "An optional object specifying how to repeat tests. Equivalent to passing --repeat on the command line.",
+                "properties": {
+                  "mode": {
+                    "type": "string",
+                    "description": "A required string. Must be one of the following values: \"until-fail\", \"until-pass\", or \"after-timeout\".",
+                    "enum": [
+                      "until-fail", "until-pass", "after-timeout"
+                    ]
+                  },
+                  "count": {
+                    "type": "integer",
+                    "description": "A required integer."
+                  }
+                },
+                "required": [
+                  "mode", "count"
+                ],
+                "additionalProperties": false
+              },
+              "interactiveDebugging": {
+                "type": "boolean",
+                "description": "An optional boolean. If true, equivalent to passing --interactive-debug-mode 1 on the command line. If false, equivalent to passing --interactive-debug-mode 0 on the command line."
+              },
+              "scheduleRandom": {
+                "type": "boolean",
+                "description": "An optional boolean. If true, equivalent to passing --schedule-random on the command line."
+              },
+              "timeout": {
+                "type": "integer",
+                "description": "An optional integer. Equivalent to passing --timeout on the command line."
+              },
+              "noTestsAction": {
+                "type": "string",
+                "description": "An optional string specifying the behavior if no tests are found. Must be one of the following values: \"default\" (equivalent to not passing any value on the command line), \"error\" (equivalent to passing --no-tests=error on the command line), or \"ignore\" (equivalent to passing --no-tests-ignore on the command line).",
+                "enum": [
+                  "default", "error", "ignore"
+                ]
+              }
+            },
+            "additionalProperties": false
+          }
+        },
+        "required": [
+          "name"
+        ]
+      }
+    },
+    "testPresetsV3": {
+      "type": "array",
+      "description": "An optional array of test preset objects. Used to specify arguments to ctest. Available in version 2 and higher.",
+      "allOf": [
+        { "$ref": "#/definitions/testPresetsItemsV2" },
+        { "$ref": "#/definitions/testPresetsItemsV3" }
+      ],
+      "items": {
+        "type": "object",
+        "properties": {
+          "name": {},
+          "hidden": {},
+          "inherits": {},
+          "configurePreset": {},
+          "vendor": {},
+          "displayName": {},
+          "description": {},
+          "inheritConfigureEnvironment": {},
+          "environment": {},
+          "configuration": {},
+          "overwriteConfigurationFile": {},
+          "output": {},
+          "filter": {},
+          "execution": {},
+          "condition": {}
+        },
+        "required": [
+          "name"
+        ],
+        "additionalProperties": false
+      }
+    },
+    "testPresetsV2": {
+      "type": "array",
+      "description": "An optional array of test preset objects. Used to specify arguments to ctest. Available in version 2 and higher.",
+      "allOf": [
+        { "$ref": "#/definitions/testPresetsItemsV2" }
+      ],
+      "items": {
+        "type": "object",
+        "properties": {
+          "name": {},
+          "hidden": {},
+          "inherits": {},
+          "configurePreset": {},
+          "vendor": {},
+          "displayName": {},
+          "description": {},
+          "inheritConfigureEnvironment": {},
+          "environment": {},
+          "configuration": {},
+          "overwriteConfigurationFile": {},
+          "output": {},
+          "filter": {},
+          "execution": {}
+        },
+        "required": [
+          "name"
+        ],
+        "additionalProperties": false
+      }
+    },
+    "condition": {
+      "anyOf": [
+        {
+          "type": "boolean",
+          "description": "A boolean which provides a constant value for the condition's evaluation."
+        },
+        {
+          "type": "object",
+          "properties": {
+            "type": {
+              "type": "string",
+              "description": "A required string specifying the type of the condition.",
+              "const": "const"
+            },
+            "value": {
+              "type": "boolean",
+              "description": "A required boolean which provides a constant value for the condition's evaluation."
+            }
+          },
+          "required": [
+            "type",
+            "value"
+          ],
+          "additionalProperties": false
+        },
+        {
+          "type": "object",
+          "properties": {
+            "type": {
+              "type": "string",
+              "description": "A required string specifying the type of the condition.",
+              "const": "equals"
+            },
+            "lhs": {
+              "type": "string",
+              "description": "First string to compare. This field supports macro expansion."
+            },
+            "rhs": {
+              "type": "string",
+              "description": "Second string to compare. This field supports macro expansion."
+            }
+          },
+          "required": [
+            "type",
+            "lhs",
+            "rhs"
+          ],
+          "additionalProperties": false
+        },
+        {
+          "type": "object",
+          "properties": {
+            "type": {
+              "type": "string",
+              "description": "A required string specifying the type of the condition.",
+              "const": "notEquals"
+            },
+            "lhs": {
+              "type": "string",
+              "description": "First string to compare. This field supports macro expansion."
+            },
+            "rhs": {
+              "type": "string",
+              "description": "Second string to compare. This field supports macro expansion."
+            }
+          },
+          "required": [
+            "type",
+            "lhs",
+            "rhs"
+          ],
+          "additionalProperties": false
+        },
+        {
+          "type": "object",
+          "properties": {
+            "type": {
+              "type": "string",
+              "description": "A required string specifying the type of the condition.",
+              "const": "inList"
+            },
+            "string": {
+              "type": "string",
+              "description": "A required string to search for. This field supports macro expansion."
+            },
+            "list": {
+              "type": "array",
+              "description": "A required list of strings to search. This field supports macro expansion, and uses short-circuit evaluation.",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "required": [
+            "type",
+            "string",
+            "list"
+          ],
+          "additionalProperties": false
+        },
+        {
+          "type": "object",
+          "properties": {
+            "type": {
+              "type": "string",
+              "description": "A required string specifying the type of the condition.",
+              "const": "notInList"
+            },
+            "string": {
+              "type": "string",
+              "description": "A required string to search for. This field supports macro expansion."
+            },
+            "list": {
+              "type": "array",
+              "description": "A required list of strings to search. This field supports macro expansion, and uses short-circuit evaluation.",
+              "items": {
+                "type": "string"
+              }
+            }
+          },
+          "required": [
+            "type",
+            "string",
+            "list"
+          ],
+          "additionalProperties": false
+        },
+        {
+          "type": "object",
+          "properties": {
+            "type": {
+              "type": "string",
+              "description": "A required string specifying the type of the condition.",
+              "const": "matches"
+            },
+            "string": {
+              "type": "string",
+              "description": "A required string to search. This field supports macro expansion."
+            },
+            "regex": {
+              "type": "string",
+              "description": "A required regular expression to search for. This field supports macro expansion."
+            }
+          },
+          "required": [
+            "type",
+            "string",
+            "regex"
+          ],
+          "additionalProperties": false
+        },
+        {
+          "type": "object",
+          "properties": {
+            "type": {
+              "type": "string",
+              "description": "A required string specifying the type of the condition.",
+              "const": "notMatches"
+            },
+            "string": {
+              "type": "string",
+              "description": "A required string to search. This field supports macro expansion."
+            },
+            "regex": {
+              "type": "string",
+              "description": "A required regular expression to search for. This field supports macro expansion."
+            }
+          },
+          "required": [
+            "type",
+            "string",
+            "regex"
+          ],
+          "additionalProperties": false
+        },
+        {
+          "type": "object",
+          "properties": {
+            "type": {
+              "type": "string",
+              "description": "A required string specifying the type of the condition.",
+              "const": "anyOf"
+            },
+            "conditions": {
+              "type": "array",
+              "description": "A required array of condition objects. These conditions use short-circuit evaluation.",
+              "items": { "$ref": "#/definitions/condition" }
+            }
+          },
+          "required": [
+            "type",
+            "conditions"
+          ],
+          "additionalProperties": false
+        },
+        {
+          "type": "object",
+          "properties": {
+            "type": {
+              "type": "string",
+              "description": "A required string specifying the type of the condition.",
+              "const": "allOf"
+            },
+            "conditions": {
+              "type": "array",
+              "description": "A required array of condition objects. These conditions use short-circuit evaluation.",
+              "items": { "$ref": "#/definitions/condition" }
+            }
+          },
+          "required": [
+            "type",
+            "conditions"
+          ],
+          "additionalProperties": false
+        },
+        {
+          "type": "object",
+          "properties": {
+            "type": {
+              "type": "string",
+              "description": "A required string specifying the type of the condition.",
+              "const": "not"
+            },
+            "condition": { "$ref": "#/definitions/condition" }
+          },
+          "required": [
+            "type",
+            "condition"
+          ],
+          "additionalProperties": false
+        }
+      ]
+    },
+    "topCondition": {
+      "anyOf": [
+        { "$ref": "#/definitions/condition" },
+        {
+          "type": "null",
+          "description": "Null indicates that the condition always evaluates to true and is not inherited."
+        }
+      ]
+    }
+  }
+}
diff --git a/share/cmake-3.18/Help/module/AddFileDependencies.rst b/share/cmake-3.22/Help/module/AddFileDependencies.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/AddFileDependencies.rst
rename to share/cmake-3.22/Help/module/AddFileDependencies.rst
diff --git a/share/cmake-3.18/Help/module/AndroidTestUtilities.rst b/share/cmake-3.22/Help/module/AndroidTestUtilities.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/AndroidTestUtilities.rst
rename to share/cmake-3.22/Help/module/AndroidTestUtilities.rst
diff --git a/share/cmake-3.18/Help/module/BundleUtilities.rst b/share/cmake-3.22/Help/module/BundleUtilities.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/BundleUtilities.rst
rename to share/cmake-3.22/Help/module/BundleUtilities.rst
diff --git a/share/cmake-3.18/Help/module/CMakeAddFortranSubdirectory.rst b/share/cmake-3.22/Help/module/CMakeAddFortranSubdirectory.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CMakeAddFortranSubdirectory.rst
rename to share/cmake-3.22/Help/module/CMakeAddFortranSubdirectory.rst
diff --git a/share/cmake-3.18/Help/module/CMakeBackwardCompatibilityCXX.rst b/share/cmake-3.22/Help/module/CMakeBackwardCompatibilityCXX.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CMakeBackwardCompatibilityCXX.rst
rename to share/cmake-3.22/Help/module/CMakeBackwardCompatibilityCXX.rst
diff --git a/share/cmake-3.18/Help/module/CMakeDependentOption.rst b/share/cmake-3.22/Help/module/CMakeDependentOption.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CMakeDependentOption.rst
rename to share/cmake-3.22/Help/module/CMakeDependentOption.rst
diff --git a/share/cmake-3.18/Help/module/CMakeDetermineVSServicePack.rst b/share/cmake-3.22/Help/module/CMakeDetermineVSServicePack.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CMakeDetermineVSServicePack.rst
rename to share/cmake-3.22/Help/module/CMakeDetermineVSServicePack.rst
diff --git a/share/cmake-3.18/Help/module/CMakeExpandImportedTargets.rst b/share/cmake-3.22/Help/module/CMakeExpandImportedTargets.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CMakeExpandImportedTargets.rst
rename to share/cmake-3.22/Help/module/CMakeExpandImportedTargets.rst
diff --git a/share/cmake-3.18/Help/module/CMakeFindDependencyMacro.rst b/share/cmake-3.22/Help/module/CMakeFindDependencyMacro.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CMakeFindDependencyMacro.rst
rename to share/cmake-3.22/Help/module/CMakeFindDependencyMacro.rst
diff --git a/share/cmake-3.18/Help/module/CMakeFindFrameworks.rst b/share/cmake-3.22/Help/module/CMakeFindFrameworks.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CMakeFindFrameworks.rst
rename to share/cmake-3.22/Help/module/CMakeFindFrameworks.rst
diff --git a/share/cmake-3.18/Help/module/CMakeFindPackageMode.rst b/share/cmake-3.22/Help/module/CMakeFindPackageMode.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CMakeFindPackageMode.rst
rename to share/cmake-3.22/Help/module/CMakeFindPackageMode.rst
diff --git a/share/cmake-3.18/Help/module/CMakeForceCompiler.rst b/share/cmake-3.22/Help/module/CMakeForceCompiler.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CMakeForceCompiler.rst
rename to share/cmake-3.22/Help/module/CMakeForceCompiler.rst
diff --git a/share/cmake-3.18/Help/module/CMakeGraphVizOptions.rst b/share/cmake-3.22/Help/module/CMakeGraphVizOptions.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CMakeGraphVizOptions.rst
rename to share/cmake-3.22/Help/module/CMakeGraphVizOptions.rst
diff --git a/share/cmake-3.18/Help/module/CMakePackageConfigHelpers.rst b/share/cmake-3.22/Help/module/CMakePackageConfigHelpers.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CMakePackageConfigHelpers.rst
rename to share/cmake-3.22/Help/module/CMakePackageConfigHelpers.rst
diff --git a/share/cmake-3.18/Help/module/CMakeParseArguments.rst b/share/cmake-3.22/Help/module/CMakeParseArguments.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CMakeParseArguments.rst
rename to share/cmake-3.22/Help/module/CMakeParseArguments.rst
diff --git a/share/cmake-3.18/Help/module/CMakePrintHelpers.rst b/share/cmake-3.22/Help/module/CMakePrintHelpers.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CMakePrintHelpers.rst
rename to share/cmake-3.22/Help/module/CMakePrintHelpers.rst
diff --git a/share/cmake-3.18/Help/module/CMakePrintSystemInformation.rst b/share/cmake-3.22/Help/module/CMakePrintSystemInformation.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CMakePrintSystemInformation.rst
rename to share/cmake-3.22/Help/module/CMakePrintSystemInformation.rst
diff --git a/share/cmake-3.18/Help/module/CMakePushCheckState.rst b/share/cmake-3.22/Help/module/CMakePushCheckState.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CMakePushCheckState.rst
rename to share/cmake-3.22/Help/module/CMakePushCheckState.rst
diff --git a/share/cmake-3.18/Help/module/CMakeVerifyManifest.rst b/share/cmake-3.22/Help/module/CMakeVerifyManifest.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CMakeVerifyManifest.rst
rename to share/cmake-3.22/Help/module/CMakeVerifyManifest.rst
diff --git a/share/cmake-3.18/Help/module/CPack.rst b/share/cmake-3.22/Help/module/CPack.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CPack.rst
rename to share/cmake-3.22/Help/module/CPack.rst
diff --git a/share/cmake-3.22/Help/module/CPackArchive.rst b/share/cmake-3.22/Help/module/CPackArchive.rst
new file mode 100644
index 0000000..f5d6da4
--- /dev/null
+++ b/share/cmake-3.22/Help/module/CPackArchive.rst
@@ -0,0 +1,6 @@
+CPackArchive
+------------
+
+.. versionadded:: 3.9
+
+The documentation for the CPack Archive generator has moved here: :cpack_gen:`CPack Archive Generator`
diff --git a/share/cmake-3.18/Help/module/CPackBundle.rst b/share/cmake-3.22/Help/module/CPackBundle.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CPackBundle.rst
rename to share/cmake-3.22/Help/module/CPackBundle.rst
diff --git a/share/cmake-3.18/Help/module/CPackComponent.rst b/share/cmake-3.22/Help/module/CPackComponent.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CPackComponent.rst
rename to share/cmake-3.22/Help/module/CPackComponent.rst
diff --git a/share/cmake-3.18/Help/module/CPackCygwin.rst b/share/cmake-3.22/Help/module/CPackCygwin.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CPackCygwin.rst
rename to share/cmake-3.22/Help/module/CPackCygwin.rst
diff --git a/share/cmake-3.18/Help/module/CPackDMG.rst b/share/cmake-3.22/Help/module/CPackDMG.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CPackDMG.rst
rename to share/cmake-3.22/Help/module/CPackDMG.rst
diff --git a/share/cmake-3.18/Help/module/CPackDeb.rst b/share/cmake-3.22/Help/module/CPackDeb.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CPackDeb.rst
rename to share/cmake-3.22/Help/module/CPackDeb.rst
diff --git a/share/cmake-3.22/Help/module/CPackFreeBSD.rst b/share/cmake-3.22/Help/module/CPackFreeBSD.rst
new file mode 100644
index 0000000..7ae6164
--- /dev/null
+++ b/share/cmake-3.22/Help/module/CPackFreeBSD.rst
@@ -0,0 +1,6 @@
+CPackFreeBSD
+------------
+
+.. versionadded:: 3.10
+
+The documentation for the CPack FreeBSD generator has moved here: :cpack_gen:`CPack FreeBSD Generator`
diff --git a/share/cmake-3.18/Help/module/CPackIFW.rst b/share/cmake-3.22/Help/module/CPackIFW.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CPackIFW.rst
rename to share/cmake-3.22/Help/module/CPackIFW.rst
diff --git a/share/cmake-3.18/Help/module/CPackIFWConfigureFile.rst b/share/cmake-3.22/Help/module/CPackIFWConfigureFile.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CPackIFWConfigureFile.rst
rename to share/cmake-3.22/Help/module/CPackIFWConfigureFile.rst
diff --git a/share/cmake-3.18/Help/module/CPackNSIS.rst b/share/cmake-3.22/Help/module/CPackNSIS.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CPackNSIS.rst
rename to share/cmake-3.22/Help/module/CPackNSIS.rst
diff --git a/share/cmake-3.22/Help/module/CPackNuGet.rst b/share/cmake-3.22/Help/module/CPackNuGet.rst
new file mode 100644
index 0000000..bbed7f9
--- /dev/null
+++ b/share/cmake-3.22/Help/module/CPackNuGet.rst
@@ -0,0 +1,6 @@
+CPackNuGet
+----------
+
+.. versionadded:: 3.12
+
+The documentation for the CPack NuGet generator has moved here: :cpack_gen:`CPack NuGet Generator`
diff --git a/share/cmake-3.18/Help/module/CPackPackageMaker.rst b/share/cmake-3.22/Help/module/CPackPackageMaker.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CPackPackageMaker.rst
rename to share/cmake-3.22/Help/module/CPackPackageMaker.rst
diff --git a/share/cmake-3.22/Help/module/CPackProductBuild.rst b/share/cmake-3.22/Help/module/CPackProductBuild.rst
new file mode 100644
index 0000000..e12cd32
--- /dev/null
+++ b/share/cmake-3.22/Help/module/CPackProductBuild.rst
@@ -0,0 +1,6 @@
+CPackProductBuild
+-----------------
+
+.. versionadded:: 3.7
+
+The documentation for the CPack productbuild generator has moved here: :cpack_gen:`CPack productbuild Generator`
diff --git a/share/cmake-3.18/Help/module/CPackRPM.rst b/share/cmake-3.22/Help/module/CPackRPM.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CPackRPM.rst
rename to share/cmake-3.22/Help/module/CPackRPM.rst
diff --git a/share/cmake-3.18/Help/module/CPackWIX.rst b/share/cmake-3.22/Help/module/CPackWIX.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CPackWIX.rst
rename to share/cmake-3.22/Help/module/CPackWIX.rst
diff --git a/share/cmake-3.18/Help/module/CSharpUtilities.rst b/share/cmake-3.22/Help/module/CSharpUtilities.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CSharpUtilities.rst
rename to share/cmake-3.22/Help/module/CSharpUtilities.rst
diff --git a/share/cmake-3.18/Help/module/CTest.rst b/share/cmake-3.22/Help/module/CTest.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CTest.rst
rename to share/cmake-3.22/Help/module/CTest.rst
diff --git a/share/cmake-3.18/Help/module/CTestCoverageCollectGCOV.rst b/share/cmake-3.22/Help/module/CTestCoverageCollectGCOV.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CTestCoverageCollectGCOV.rst
rename to share/cmake-3.22/Help/module/CTestCoverageCollectGCOV.rst
diff --git a/share/cmake-3.18/Help/module/CTestScriptMode.rst b/share/cmake-3.22/Help/module/CTestScriptMode.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CTestScriptMode.rst
rename to share/cmake-3.22/Help/module/CTestScriptMode.rst
diff --git a/share/cmake-3.18/Help/module/CTestUseLaunchers.rst b/share/cmake-3.22/Help/module/CTestUseLaunchers.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CTestUseLaunchers.rst
rename to share/cmake-3.22/Help/module/CTestUseLaunchers.rst
diff --git a/share/cmake-3.18/Help/module/CheckCCompilerFlag.rst b/share/cmake-3.22/Help/module/CheckCCompilerFlag.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckCCompilerFlag.rst
rename to share/cmake-3.22/Help/module/CheckCCompilerFlag.rst
diff --git a/share/cmake-3.18/Help/module/CheckCSourceCompiles.rst b/share/cmake-3.22/Help/module/CheckCSourceCompiles.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckCSourceCompiles.rst
rename to share/cmake-3.22/Help/module/CheckCSourceCompiles.rst
diff --git a/share/cmake-3.18/Help/module/CheckCSourceRuns.rst b/share/cmake-3.22/Help/module/CheckCSourceRuns.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckCSourceRuns.rst
rename to share/cmake-3.22/Help/module/CheckCSourceRuns.rst
diff --git a/share/cmake-3.18/Help/module/CheckCXXCompilerFlag.rst b/share/cmake-3.22/Help/module/CheckCXXCompilerFlag.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckCXXCompilerFlag.rst
rename to share/cmake-3.22/Help/module/CheckCXXCompilerFlag.rst
diff --git a/share/cmake-3.18/Help/module/CheckCXXSourceCompiles.rst b/share/cmake-3.22/Help/module/CheckCXXSourceCompiles.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckCXXSourceCompiles.rst
rename to share/cmake-3.22/Help/module/CheckCXXSourceCompiles.rst
diff --git a/share/cmake-3.18/Help/module/CheckCXXSourceRuns.rst b/share/cmake-3.22/Help/module/CheckCXXSourceRuns.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckCXXSourceRuns.rst
rename to share/cmake-3.22/Help/module/CheckCXXSourceRuns.rst
diff --git a/share/cmake-3.18/Help/module/CheckCXXSymbolExists.rst b/share/cmake-3.22/Help/module/CheckCXXSymbolExists.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckCXXSymbolExists.rst
rename to share/cmake-3.22/Help/module/CheckCXXSymbolExists.rst
diff --git a/share/cmake-3.22/Help/module/CheckCompilerFlag.rst b/share/cmake-3.22/Help/module/CheckCompilerFlag.rst
new file mode 100644
index 0000000..bcf19a8
--- /dev/null
+++ b/share/cmake-3.22/Help/module/CheckCompilerFlag.rst
@@ -0,0 +1 @@
+.. cmake-module:: ../../Modules/CheckCompilerFlag.cmake
diff --git a/share/cmake-3.18/Help/module/CheckFortranCompilerFlag.rst b/share/cmake-3.22/Help/module/CheckFortranCompilerFlag.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckFortranCompilerFlag.rst
rename to share/cmake-3.22/Help/module/CheckFortranCompilerFlag.rst
diff --git a/share/cmake-3.18/Help/module/CheckFortranFunctionExists.rst b/share/cmake-3.22/Help/module/CheckFortranFunctionExists.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckFortranFunctionExists.rst
rename to share/cmake-3.22/Help/module/CheckFortranFunctionExists.rst
diff --git a/share/cmake-3.18/Help/module/CheckFortranSourceCompiles.rst b/share/cmake-3.22/Help/module/CheckFortranSourceCompiles.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckFortranSourceCompiles.rst
rename to share/cmake-3.22/Help/module/CheckFortranSourceCompiles.rst
diff --git a/share/cmake-3.18/Help/module/CheckFortranSourceRuns.rst b/share/cmake-3.22/Help/module/CheckFortranSourceRuns.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckFortranSourceRuns.rst
rename to share/cmake-3.22/Help/module/CheckFortranSourceRuns.rst
diff --git a/share/cmake-3.18/Help/module/CheckFunctionExists.rst b/share/cmake-3.22/Help/module/CheckFunctionExists.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckFunctionExists.rst
rename to share/cmake-3.22/Help/module/CheckFunctionExists.rst
diff --git a/share/cmake-3.18/Help/module/CheckIPOSupported.rst b/share/cmake-3.22/Help/module/CheckIPOSupported.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckIPOSupported.rst
rename to share/cmake-3.22/Help/module/CheckIPOSupported.rst
diff --git a/share/cmake-3.18/Help/module/CheckIncludeFile.rst b/share/cmake-3.22/Help/module/CheckIncludeFile.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckIncludeFile.rst
rename to share/cmake-3.22/Help/module/CheckIncludeFile.rst
diff --git a/share/cmake-3.18/Help/module/CheckIncludeFileCXX.rst b/share/cmake-3.22/Help/module/CheckIncludeFileCXX.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckIncludeFileCXX.rst
rename to share/cmake-3.22/Help/module/CheckIncludeFileCXX.rst
diff --git a/share/cmake-3.18/Help/module/CheckIncludeFiles.rst b/share/cmake-3.22/Help/module/CheckIncludeFiles.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckIncludeFiles.rst
rename to share/cmake-3.22/Help/module/CheckIncludeFiles.rst
diff --git a/share/cmake-3.18/Help/module/CheckLanguage.rst b/share/cmake-3.22/Help/module/CheckLanguage.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckLanguage.rst
rename to share/cmake-3.22/Help/module/CheckLanguage.rst
diff --git a/share/cmake-3.18/Help/module/CheckLibraryExists.rst b/share/cmake-3.22/Help/module/CheckLibraryExists.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckLibraryExists.rst
rename to share/cmake-3.22/Help/module/CheckLibraryExists.rst
diff --git a/share/cmake-3.18/Help/module/CheckLinkerFlag.rst b/share/cmake-3.22/Help/module/CheckLinkerFlag.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckLinkerFlag.rst
rename to share/cmake-3.22/Help/module/CheckLinkerFlag.rst
diff --git a/share/cmake-3.18/Help/module/CheckOBJCCompilerFlag.rst b/share/cmake-3.22/Help/module/CheckOBJCCompilerFlag.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckOBJCCompilerFlag.rst
rename to share/cmake-3.22/Help/module/CheckOBJCCompilerFlag.rst
diff --git a/share/cmake-3.18/Help/module/CheckOBJCSourceCompiles.rst b/share/cmake-3.22/Help/module/CheckOBJCSourceCompiles.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckOBJCSourceCompiles.rst
rename to share/cmake-3.22/Help/module/CheckOBJCSourceCompiles.rst
diff --git a/share/cmake-3.18/Help/module/CheckOBJCSourceRuns.rst b/share/cmake-3.22/Help/module/CheckOBJCSourceRuns.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckOBJCSourceRuns.rst
rename to share/cmake-3.22/Help/module/CheckOBJCSourceRuns.rst
diff --git a/share/cmake-3.18/Help/module/CheckOBJCXXCompilerFlag.rst b/share/cmake-3.22/Help/module/CheckOBJCXXCompilerFlag.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckOBJCXXCompilerFlag.rst
rename to share/cmake-3.22/Help/module/CheckOBJCXXCompilerFlag.rst
diff --git a/share/cmake-3.18/Help/module/CheckOBJCXXSourceCompiles.rst b/share/cmake-3.22/Help/module/CheckOBJCXXSourceCompiles.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckOBJCXXSourceCompiles.rst
rename to share/cmake-3.22/Help/module/CheckOBJCXXSourceCompiles.rst
diff --git a/share/cmake-3.18/Help/module/CheckOBJCXXSourceRuns.rst b/share/cmake-3.22/Help/module/CheckOBJCXXSourceRuns.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckOBJCXXSourceRuns.rst
rename to share/cmake-3.22/Help/module/CheckOBJCXXSourceRuns.rst
diff --git a/share/cmake-3.18/Help/module/CheckPIESupported.rst b/share/cmake-3.22/Help/module/CheckPIESupported.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckPIESupported.rst
rename to share/cmake-3.22/Help/module/CheckPIESupported.rst
diff --git a/share/cmake-3.18/Help/module/CheckPrototypeDefinition.rst b/share/cmake-3.22/Help/module/CheckPrototypeDefinition.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckPrototypeDefinition.rst
rename to share/cmake-3.22/Help/module/CheckPrototypeDefinition.rst
diff --git a/share/cmake-3.22/Help/module/CheckSourceCompiles.rst b/share/cmake-3.22/Help/module/CheckSourceCompiles.rst
new file mode 100644
index 0000000..906db0a
--- /dev/null
+++ b/share/cmake-3.22/Help/module/CheckSourceCompiles.rst
@@ -0,0 +1 @@
+.. cmake-module:: ../../Modules/CheckSourceCompiles.cmake
diff --git a/share/cmake-3.22/Help/module/CheckSourceRuns.rst b/share/cmake-3.22/Help/module/CheckSourceRuns.rst
new file mode 100644
index 0000000..d469244
--- /dev/null
+++ b/share/cmake-3.22/Help/module/CheckSourceRuns.rst
@@ -0,0 +1 @@
+.. cmake-module:: ../../Modules/CheckSourceRuns.cmake
diff --git a/share/cmake-3.18/Help/module/CheckStructHasMember.rst b/share/cmake-3.22/Help/module/CheckStructHasMember.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckStructHasMember.rst
rename to share/cmake-3.22/Help/module/CheckStructHasMember.rst
diff --git a/share/cmake-3.18/Help/module/CheckSymbolExists.rst b/share/cmake-3.22/Help/module/CheckSymbolExists.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckSymbolExists.rst
rename to share/cmake-3.22/Help/module/CheckSymbolExists.rst
diff --git a/share/cmake-3.18/Help/module/CheckTypeSize.rst b/share/cmake-3.22/Help/module/CheckTypeSize.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckTypeSize.rst
rename to share/cmake-3.22/Help/module/CheckTypeSize.rst
diff --git a/share/cmake-3.18/Help/module/CheckVariableExists.rst b/share/cmake-3.22/Help/module/CheckVariableExists.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/CheckVariableExists.rst
rename to share/cmake-3.22/Help/module/CheckVariableExists.rst
diff --git a/share/cmake-3.18/Help/module/Dart.rst b/share/cmake-3.22/Help/module/Dart.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/Dart.rst
rename to share/cmake-3.22/Help/module/Dart.rst
diff --git a/share/cmake-3.18/Help/module/DeployQt4.rst b/share/cmake-3.22/Help/module/DeployQt4.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/DeployQt4.rst
rename to share/cmake-3.22/Help/module/DeployQt4.rst
diff --git a/share/cmake-3.18/Help/module/Documentation.rst b/share/cmake-3.22/Help/module/Documentation.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/Documentation.rst
rename to share/cmake-3.22/Help/module/Documentation.rst
diff --git a/share/cmake-3.18/Help/module/ExternalData.rst b/share/cmake-3.22/Help/module/ExternalData.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/ExternalData.rst
rename to share/cmake-3.22/Help/module/ExternalData.rst
diff --git a/share/cmake-3.18/Help/module/ExternalProject.rst b/share/cmake-3.22/Help/module/ExternalProject.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/ExternalProject.rst
rename to share/cmake-3.22/Help/module/ExternalProject.rst
diff --git a/share/cmake-3.18/Help/module/FeatureSummary.rst b/share/cmake-3.22/Help/module/FeatureSummary.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FeatureSummary.rst
rename to share/cmake-3.22/Help/module/FeatureSummary.rst
diff --git a/share/cmake-3.18/Help/module/FetchContent.rst b/share/cmake-3.22/Help/module/FetchContent.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FetchContent.rst
rename to share/cmake-3.22/Help/module/FetchContent.rst
diff --git a/share/cmake-3.18/Help/module/FindALSA.rst b/share/cmake-3.22/Help/module/FindALSA.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindALSA.rst
rename to share/cmake-3.22/Help/module/FindALSA.rst
diff --git a/share/cmake-3.18/Help/module/FindASPELL.rst b/share/cmake-3.22/Help/module/FindASPELL.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindASPELL.rst
rename to share/cmake-3.22/Help/module/FindASPELL.rst
diff --git a/share/cmake-3.18/Help/module/FindAVIFile.rst b/share/cmake-3.22/Help/module/FindAVIFile.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindAVIFile.rst
rename to share/cmake-3.22/Help/module/FindAVIFile.rst
diff --git a/share/cmake-3.18/Help/module/FindArmadillo.rst b/share/cmake-3.22/Help/module/FindArmadillo.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindArmadillo.rst
rename to share/cmake-3.22/Help/module/FindArmadillo.rst
diff --git a/share/cmake-3.18/Help/module/FindBISON.rst b/share/cmake-3.22/Help/module/FindBISON.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindBISON.rst
rename to share/cmake-3.22/Help/module/FindBISON.rst
diff --git a/share/cmake-3.18/Help/module/FindBLAS.rst b/share/cmake-3.22/Help/module/FindBLAS.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindBLAS.rst
rename to share/cmake-3.22/Help/module/FindBLAS.rst
diff --git a/share/cmake-3.18/Help/module/FindBZip2.rst b/share/cmake-3.22/Help/module/FindBZip2.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindBZip2.rst
rename to share/cmake-3.22/Help/module/FindBZip2.rst
diff --git a/share/cmake-3.18/Help/module/FindBacktrace.rst b/share/cmake-3.22/Help/module/FindBacktrace.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindBacktrace.rst
rename to share/cmake-3.22/Help/module/FindBacktrace.rst
diff --git a/share/cmake-3.18/Help/module/FindBoost.rst b/share/cmake-3.22/Help/module/FindBoost.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindBoost.rst
rename to share/cmake-3.22/Help/module/FindBoost.rst
diff --git a/share/cmake-3.18/Help/module/FindBullet.rst b/share/cmake-3.22/Help/module/FindBullet.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindBullet.rst
rename to share/cmake-3.22/Help/module/FindBullet.rst
diff --git a/share/cmake-3.18/Help/module/FindCABLE.rst b/share/cmake-3.22/Help/module/FindCABLE.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindCABLE.rst
rename to share/cmake-3.22/Help/module/FindCABLE.rst
diff --git a/share/cmake-3.18/Help/module/FindCUDA.rst b/share/cmake-3.22/Help/module/FindCUDA.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindCUDA.rst
rename to share/cmake-3.22/Help/module/FindCUDA.rst
diff --git a/share/cmake-3.18/Help/module/FindCUDAToolkit.rst b/share/cmake-3.22/Help/module/FindCUDAToolkit.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindCUDAToolkit.rst
rename to share/cmake-3.22/Help/module/FindCUDAToolkit.rst
diff --git a/share/cmake-3.18/Help/module/FindCURL.rst b/share/cmake-3.22/Help/module/FindCURL.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindCURL.rst
rename to share/cmake-3.22/Help/module/FindCURL.rst
diff --git a/share/cmake-3.18/Help/module/FindCVS.rst b/share/cmake-3.22/Help/module/FindCVS.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindCVS.rst
rename to share/cmake-3.22/Help/module/FindCVS.rst
diff --git a/share/cmake-3.18/Help/module/FindCoin3D.rst b/share/cmake-3.22/Help/module/FindCoin3D.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindCoin3D.rst
rename to share/cmake-3.22/Help/module/FindCoin3D.rst
diff --git a/share/cmake-3.18/Help/module/FindCups.rst b/share/cmake-3.22/Help/module/FindCups.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindCups.rst
rename to share/cmake-3.22/Help/module/FindCups.rst
diff --git a/share/cmake-3.18/Help/module/FindCurses.rst b/share/cmake-3.22/Help/module/FindCurses.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindCurses.rst
rename to share/cmake-3.22/Help/module/FindCurses.rst
diff --git a/share/cmake-3.18/Help/module/FindCxxTest.rst b/share/cmake-3.22/Help/module/FindCxxTest.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindCxxTest.rst
rename to share/cmake-3.22/Help/module/FindCxxTest.rst
diff --git a/share/cmake-3.18/Help/module/FindCygwin.rst b/share/cmake-3.22/Help/module/FindCygwin.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindCygwin.rst
rename to share/cmake-3.22/Help/module/FindCygwin.rst
diff --git a/share/cmake-3.18/Help/module/FindDCMTK.rst b/share/cmake-3.22/Help/module/FindDCMTK.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindDCMTK.rst
rename to share/cmake-3.22/Help/module/FindDCMTK.rst
diff --git a/share/cmake-3.18/Help/module/FindDart.rst b/share/cmake-3.22/Help/module/FindDart.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindDart.rst
rename to share/cmake-3.22/Help/module/FindDart.rst
diff --git a/share/cmake-3.18/Help/module/FindDevIL.rst b/share/cmake-3.22/Help/module/FindDevIL.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindDevIL.rst
rename to share/cmake-3.22/Help/module/FindDevIL.rst
diff --git a/share/cmake-3.18/Help/module/FindDoxygen.rst b/share/cmake-3.22/Help/module/FindDoxygen.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindDoxygen.rst
rename to share/cmake-3.22/Help/module/FindDoxygen.rst
diff --git a/share/cmake-3.18/Help/module/FindEXPAT.rst b/share/cmake-3.22/Help/module/FindEXPAT.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindEXPAT.rst
rename to share/cmake-3.22/Help/module/FindEXPAT.rst
diff --git a/share/cmake-3.18/Help/module/FindEnvModules.rst b/share/cmake-3.22/Help/module/FindEnvModules.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindEnvModules.rst
rename to share/cmake-3.22/Help/module/FindEnvModules.rst
diff --git a/share/cmake-3.18/Help/module/FindFLEX.rst b/share/cmake-3.22/Help/module/FindFLEX.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindFLEX.rst
rename to share/cmake-3.22/Help/module/FindFLEX.rst
diff --git a/share/cmake-3.18/Help/module/FindFLTK.rst b/share/cmake-3.22/Help/module/FindFLTK.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindFLTK.rst
rename to share/cmake-3.22/Help/module/FindFLTK.rst
diff --git a/share/cmake-3.18/Help/module/FindFLTK2.rst b/share/cmake-3.22/Help/module/FindFLTK2.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindFLTK2.rst
rename to share/cmake-3.22/Help/module/FindFLTK2.rst
diff --git a/share/cmake-3.18/Help/module/FindFontconfig.rst b/share/cmake-3.22/Help/module/FindFontconfig.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindFontconfig.rst
rename to share/cmake-3.22/Help/module/FindFontconfig.rst
diff --git a/share/cmake-3.18/Help/module/FindFreetype.rst b/share/cmake-3.22/Help/module/FindFreetype.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindFreetype.rst
rename to share/cmake-3.22/Help/module/FindFreetype.rst
diff --git a/share/cmake-3.18/Help/module/FindGCCXML.rst b/share/cmake-3.22/Help/module/FindGCCXML.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindGCCXML.rst
rename to share/cmake-3.22/Help/module/FindGCCXML.rst
diff --git a/share/cmake-3.18/Help/module/FindGDAL.rst b/share/cmake-3.22/Help/module/FindGDAL.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindGDAL.rst
rename to share/cmake-3.22/Help/module/FindGDAL.rst
diff --git a/share/cmake-3.18/Help/module/FindGIF.rst b/share/cmake-3.22/Help/module/FindGIF.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindGIF.rst
rename to share/cmake-3.22/Help/module/FindGIF.rst
diff --git a/share/cmake-3.18/Help/module/FindGLEW.rst b/share/cmake-3.22/Help/module/FindGLEW.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindGLEW.rst
rename to share/cmake-3.22/Help/module/FindGLEW.rst
diff --git a/share/cmake-3.18/Help/module/FindGLUT.rst b/share/cmake-3.22/Help/module/FindGLUT.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindGLUT.rst
rename to share/cmake-3.22/Help/module/FindGLUT.rst
diff --git a/share/cmake-3.18/Help/module/FindGSL.rst b/share/cmake-3.22/Help/module/FindGSL.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindGSL.rst
rename to share/cmake-3.22/Help/module/FindGSL.rst
diff --git a/share/cmake-3.18/Help/module/FindGTK.rst b/share/cmake-3.22/Help/module/FindGTK.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindGTK.rst
rename to share/cmake-3.22/Help/module/FindGTK.rst
diff --git a/share/cmake-3.18/Help/module/FindGTK2.rst b/share/cmake-3.22/Help/module/FindGTK2.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindGTK2.rst
rename to share/cmake-3.22/Help/module/FindGTK2.rst
diff --git a/share/cmake-3.18/Help/module/FindGTest.rst b/share/cmake-3.22/Help/module/FindGTest.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindGTest.rst
rename to share/cmake-3.22/Help/module/FindGTest.rst
diff --git a/share/cmake-3.18/Help/module/FindGettext.rst b/share/cmake-3.22/Help/module/FindGettext.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindGettext.rst
rename to share/cmake-3.22/Help/module/FindGettext.rst
diff --git a/share/cmake-3.18/Help/module/FindGit.rst b/share/cmake-3.22/Help/module/FindGit.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindGit.rst
rename to share/cmake-3.22/Help/module/FindGit.rst
diff --git a/share/cmake-3.18/Help/module/FindGnuTLS.rst b/share/cmake-3.22/Help/module/FindGnuTLS.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindGnuTLS.rst
rename to share/cmake-3.22/Help/module/FindGnuTLS.rst
diff --git a/share/cmake-3.18/Help/module/FindGnuplot.rst b/share/cmake-3.22/Help/module/FindGnuplot.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindGnuplot.rst
rename to share/cmake-3.22/Help/module/FindGnuplot.rst
diff --git a/share/cmake-3.18/Help/module/FindHDF5.rst b/share/cmake-3.22/Help/module/FindHDF5.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindHDF5.rst
rename to share/cmake-3.22/Help/module/FindHDF5.rst
diff --git a/share/cmake-3.18/Help/module/FindHSPELL.rst b/share/cmake-3.22/Help/module/FindHSPELL.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindHSPELL.rst
rename to share/cmake-3.22/Help/module/FindHSPELL.rst
diff --git a/share/cmake-3.18/Help/module/FindHTMLHelp.rst b/share/cmake-3.22/Help/module/FindHTMLHelp.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindHTMLHelp.rst
rename to share/cmake-3.22/Help/module/FindHTMLHelp.rst
diff --git a/share/cmake-3.18/Help/module/FindHg.rst b/share/cmake-3.22/Help/module/FindHg.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindHg.rst
rename to share/cmake-3.22/Help/module/FindHg.rst
diff --git a/share/cmake-3.18/Help/module/FindICU.rst b/share/cmake-3.22/Help/module/FindICU.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindICU.rst
rename to share/cmake-3.22/Help/module/FindICU.rst
diff --git a/share/cmake-3.18/Help/module/FindITK.rst b/share/cmake-3.22/Help/module/FindITK.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindITK.rst
rename to share/cmake-3.22/Help/module/FindITK.rst
diff --git a/share/cmake-3.18/Help/module/FindIce.rst b/share/cmake-3.22/Help/module/FindIce.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindIce.rst
rename to share/cmake-3.22/Help/module/FindIce.rst
diff --git a/share/cmake-3.18/Help/module/FindIconv.rst b/share/cmake-3.22/Help/module/FindIconv.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindIconv.rst
rename to share/cmake-3.22/Help/module/FindIconv.rst
diff --git a/share/cmake-3.18/Help/module/FindIcotool.rst b/share/cmake-3.22/Help/module/FindIcotool.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindIcotool.rst
rename to share/cmake-3.22/Help/module/FindIcotool.rst
diff --git a/share/cmake-3.18/Help/module/FindImageMagick.rst b/share/cmake-3.22/Help/module/FindImageMagick.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindImageMagick.rst
rename to share/cmake-3.22/Help/module/FindImageMagick.rst
diff --git a/share/cmake-3.18/Help/module/FindIntl.rst b/share/cmake-3.22/Help/module/FindIntl.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindIntl.rst
rename to share/cmake-3.22/Help/module/FindIntl.rst
diff --git a/share/cmake-3.18/Help/module/FindJNI.rst b/share/cmake-3.22/Help/module/FindJNI.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindJNI.rst
rename to share/cmake-3.22/Help/module/FindJNI.rst
diff --git a/share/cmake-3.18/Help/module/FindJPEG.rst b/share/cmake-3.22/Help/module/FindJPEG.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindJPEG.rst
rename to share/cmake-3.22/Help/module/FindJPEG.rst
diff --git a/share/cmake-3.18/Help/module/FindJasper.rst b/share/cmake-3.22/Help/module/FindJasper.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindJasper.rst
rename to share/cmake-3.22/Help/module/FindJasper.rst
diff --git a/share/cmake-3.18/Help/module/FindJava.rst b/share/cmake-3.22/Help/module/FindJava.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindJava.rst
rename to share/cmake-3.22/Help/module/FindJava.rst
diff --git a/share/cmake-3.18/Help/module/FindKDE3.rst b/share/cmake-3.22/Help/module/FindKDE3.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindKDE3.rst
rename to share/cmake-3.22/Help/module/FindKDE3.rst
diff --git a/share/cmake-3.18/Help/module/FindKDE4.rst b/share/cmake-3.22/Help/module/FindKDE4.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindKDE4.rst
rename to share/cmake-3.22/Help/module/FindKDE4.rst
diff --git a/share/cmake-3.18/Help/module/FindLAPACK.rst b/share/cmake-3.22/Help/module/FindLAPACK.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindLAPACK.rst
rename to share/cmake-3.22/Help/module/FindLAPACK.rst
diff --git a/share/cmake-3.18/Help/module/FindLATEX.rst b/share/cmake-3.22/Help/module/FindLATEX.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindLATEX.rst
rename to share/cmake-3.22/Help/module/FindLATEX.rst
diff --git a/share/cmake-3.18/Help/module/FindLTTngUST.rst b/share/cmake-3.22/Help/module/FindLTTngUST.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindLTTngUST.rst
rename to share/cmake-3.22/Help/module/FindLTTngUST.rst
diff --git a/share/cmake-3.18/Help/module/FindLibArchive.rst b/share/cmake-3.22/Help/module/FindLibArchive.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindLibArchive.rst
rename to share/cmake-3.22/Help/module/FindLibArchive.rst
diff --git a/share/cmake-3.18/Help/module/FindLibLZMA.rst b/share/cmake-3.22/Help/module/FindLibLZMA.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindLibLZMA.rst
rename to share/cmake-3.22/Help/module/FindLibLZMA.rst
diff --git a/share/cmake-3.18/Help/module/FindLibXml2.rst b/share/cmake-3.22/Help/module/FindLibXml2.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindLibXml2.rst
rename to share/cmake-3.22/Help/module/FindLibXml2.rst
diff --git a/share/cmake-3.18/Help/module/FindLibXslt.rst b/share/cmake-3.22/Help/module/FindLibXslt.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindLibXslt.rst
rename to share/cmake-3.22/Help/module/FindLibXslt.rst
diff --git a/share/cmake-3.18/Help/module/FindLibinput.rst b/share/cmake-3.22/Help/module/FindLibinput.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindLibinput.rst
rename to share/cmake-3.22/Help/module/FindLibinput.rst
diff --git a/share/cmake-3.18/Help/module/FindLua.rst b/share/cmake-3.22/Help/module/FindLua.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindLua.rst
rename to share/cmake-3.22/Help/module/FindLua.rst
diff --git a/share/cmake-3.18/Help/module/FindLua50.rst b/share/cmake-3.22/Help/module/FindLua50.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindLua50.rst
rename to share/cmake-3.22/Help/module/FindLua50.rst
diff --git a/share/cmake-3.18/Help/module/FindLua51.rst b/share/cmake-3.22/Help/module/FindLua51.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindLua51.rst
rename to share/cmake-3.22/Help/module/FindLua51.rst
diff --git a/share/cmake-3.18/Help/module/FindMFC.rst b/share/cmake-3.22/Help/module/FindMFC.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindMFC.rst
rename to share/cmake-3.22/Help/module/FindMFC.rst
diff --git a/share/cmake-3.18/Help/module/FindMPEG.rst b/share/cmake-3.22/Help/module/FindMPEG.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindMPEG.rst
rename to share/cmake-3.22/Help/module/FindMPEG.rst
diff --git a/share/cmake-3.18/Help/module/FindMPEG2.rst b/share/cmake-3.22/Help/module/FindMPEG2.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindMPEG2.rst
rename to share/cmake-3.22/Help/module/FindMPEG2.rst
diff --git a/share/cmake-3.18/Help/module/FindMPI.rst b/share/cmake-3.22/Help/module/FindMPI.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindMPI.rst
rename to share/cmake-3.22/Help/module/FindMPI.rst
diff --git a/share/cmake-3.18/Help/module/FindMatlab.rst b/share/cmake-3.22/Help/module/FindMatlab.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindMatlab.rst
rename to share/cmake-3.22/Help/module/FindMatlab.rst
diff --git a/share/cmake-3.18/Help/module/FindMotif.rst b/share/cmake-3.22/Help/module/FindMotif.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindMotif.rst
rename to share/cmake-3.22/Help/module/FindMotif.rst
diff --git a/share/cmake-3.22/Help/module/FindMsys.rst b/share/cmake-3.22/Help/module/FindMsys.rst
new file mode 100644
index 0000000..fc5495c
--- /dev/null
+++ b/share/cmake-3.22/Help/module/FindMsys.rst
@@ -0,0 +1 @@
+.. cmake-module:: ../../Modules/FindMsys.cmake
diff --git a/share/cmake-3.18/Help/module/FindODBC.rst b/share/cmake-3.22/Help/module/FindODBC.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindODBC.rst
rename to share/cmake-3.22/Help/module/FindODBC.rst
diff --git a/share/cmake-3.18/Help/module/FindOpenACC.rst b/share/cmake-3.22/Help/module/FindOpenACC.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindOpenACC.rst
rename to share/cmake-3.22/Help/module/FindOpenACC.rst
diff --git a/share/cmake-3.18/Help/module/FindOpenAL.rst b/share/cmake-3.22/Help/module/FindOpenAL.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindOpenAL.rst
rename to share/cmake-3.22/Help/module/FindOpenAL.rst
diff --git a/share/cmake-3.18/Help/module/FindOpenCL.rst b/share/cmake-3.22/Help/module/FindOpenCL.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindOpenCL.rst
rename to share/cmake-3.22/Help/module/FindOpenCL.rst
diff --git a/share/cmake-3.18/Help/module/FindOpenGL.rst b/share/cmake-3.22/Help/module/FindOpenGL.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindOpenGL.rst
rename to share/cmake-3.22/Help/module/FindOpenGL.rst
diff --git a/share/cmake-3.18/Help/module/FindOpenMP.rst b/share/cmake-3.22/Help/module/FindOpenMP.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindOpenMP.rst
rename to share/cmake-3.22/Help/module/FindOpenMP.rst
diff --git a/share/cmake-3.18/Help/module/FindOpenSSL.rst b/share/cmake-3.22/Help/module/FindOpenSSL.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindOpenSSL.rst
rename to share/cmake-3.22/Help/module/FindOpenSSL.rst
diff --git a/share/cmake-3.18/Help/module/FindOpenSceneGraph.rst b/share/cmake-3.22/Help/module/FindOpenSceneGraph.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindOpenSceneGraph.rst
rename to share/cmake-3.22/Help/module/FindOpenSceneGraph.rst
diff --git a/share/cmake-3.18/Help/module/FindOpenThreads.rst b/share/cmake-3.22/Help/module/FindOpenThreads.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindOpenThreads.rst
rename to share/cmake-3.22/Help/module/FindOpenThreads.rst
diff --git a/share/cmake-3.18/Help/module/FindPHP4.rst b/share/cmake-3.22/Help/module/FindPHP4.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindPHP4.rst
rename to share/cmake-3.22/Help/module/FindPHP4.rst
diff --git a/share/cmake-3.18/Help/module/FindPNG.rst b/share/cmake-3.22/Help/module/FindPNG.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindPNG.rst
rename to share/cmake-3.22/Help/module/FindPNG.rst
diff --git a/share/cmake-3.18/Help/module/FindPackageHandleStandardArgs.rst b/share/cmake-3.22/Help/module/FindPackageHandleStandardArgs.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindPackageHandleStandardArgs.rst
rename to share/cmake-3.22/Help/module/FindPackageHandleStandardArgs.rst
diff --git a/share/cmake-3.18/Help/module/FindPackageMessage.rst b/share/cmake-3.22/Help/module/FindPackageMessage.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindPackageMessage.rst
rename to share/cmake-3.22/Help/module/FindPackageMessage.rst
diff --git a/share/cmake-3.18/Help/module/FindPatch.rst b/share/cmake-3.22/Help/module/FindPatch.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindPatch.rst
rename to share/cmake-3.22/Help/module/FindPatch.rst
diff --git a/share/cmake-3.18/Help/module/FindPerl.rst b/share/cmake-3.22/Help/module/FindPerl.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindPerl.rst
rename to share/cmake-3.22/Help/module/FindPerl.rst
diff --git a/share/cmake-3.18/Help/module/FindPerlLibs.rst b/share/cmake-3.22/Help/module/FindPerlLibs.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindPerlLibs.rst
rename to share/cmake-3.22/Help/module/FindPerlLibs.rst
diff --git a/share/cmake-3.18/Help/module/FindPhysFS.rst b/share/cmake-3.22/Help/module/FindPhysFS.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindPhysFS.rst
rename to share/cmake-3.22/Help/module/FindPhysFS.rst
diff --git a/share/cmake-3.18/Help/module/FindPike.rst b/share/cmake-3.22/Help/module/FindPike.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindPike.rst
rename to share/cmake-3.22/Help/module/FindPike.rst
diff --git a/share/cmake-3.18/Help/module/FindPkgConfig.rst b/share/cmake-3.22/Help/module/FindPkgConfig.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindPkgConfig.rst
rename to share/cmake-3.22/Help/module/FindPkgConfig.rst
diff --git a/share/cmake-3.18/Help/module/FindPostgreSQL.rst b/share/cmake-3.22/Help/module/FindPostgreSQL.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindPostgreSQL.rst
rename to share/cmake-3.22/Help/module/FindPostgreSQL.rst
diff --git a/share/cmake-3.18/Help/module/FindProducer.rst b/share/cmake-3.22/Help/module/FindProducer.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindProducer.rst
rename to share/cmake-3.22/Help/module/FindProducer.rst
diff --git a/share/cmake-3.18/Help/module/FindProtobuf.rst b/share/cmake-3.22/Help/module/FindProtobuf.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindProtobuf.rst
rename to share/cmake-3.22/Help/module/FindProtobuf.rst
diff --git a/share/cmake-3.18/Help/module/FindPython.rst b/share/cmake-3.22/Help/module/FindPython.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindPython.rst
rename to share/cmake-3.22/Help/module/FindPython.rst
diff --git a/share/cmake-3.18/Help/module/FindPython2.rst b/share/cmake-3.22/Help/module/FindPython2.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindPython2.rst
rename to share/cmake-3.22/Help/module/FindPython2.rst
diff --git a/share/cmake-3.18/Help/module/FindPython3.rst b/share/cmake-3.22/Help/module/FindPython3.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindPython3.rst
rename to share/cmake-3.22/Help/module/FindPython3.rst
diff --git a/share/cmake-3.18/Help/module/FindPythonInterp.rst b/share/cmake-3.22/Help/module/FindPythonInterp.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindPythonInterp.rst
rename to share/cmake-3.22/Help/module/FindPythonInterp.rst
diff --git a/share/cmake-3.18/Help/module/FindPythonLibs.rst b/share/cmake-3.22/Help/module/FindPythonLibs.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindPythonLibs.rst
rename to share/cmake-3.22/Help/module/FindPythonLibs.rst
diff --git a/share/cmake-3.18/Help/module/FindQt.rst b/share/cmake-3.22/Help/module/FindQt.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindQt.rst
rename to share/cmake-3.22/Help/module/FindQt.rst
diff --git a/share/cmake-3.18/Help/module/FindQt3.rst b/share/cmake-3.22/Help/module/FindQt3.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindQt3.rst
rename to share/cmake-3.22/Help/module/FindQt3.rst
diff --git a/share/cmake-3.18/Help/module/FindQt4.rst b/share/cmake-3.22/Help/module/FindQt4.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindQt4.rst
rename to share/cmake-3.22/Help/module/FindQt4.rst
diff --git a/share/cmake-3.18/Help/module/FindQuickTime.rst b/share/cmake-3.22/Help/module/FindQuickTime.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindQuickTime.rst
rename to share/cmake-3.22/Help/module/FindQuickTime.rst
diff --git a/share/cmake-3.18/Help/module/FindRTI.rst b/share/cmake-3.22/Help/module/FindRTI.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindRTI.rst
rename to share/cmake-3.22/Help/module/FindRTI.rst
diff --git a/share/cmake-3.18/Help/module/FindRuby.rst b/share/cmake-3.22/Help/module/FindRuby.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindRuby.rst
rename to share/cmake-3.22/Help/module/FindRuby.rst
diff --git a/share/cmake-3.18/Help/module/FindSDL.rst b/share/cmake-3.22/Help/module/FindSDL.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindSDL.rst
rename to share/cmake-3.22/Help/module/FindSDL.rst
diff --git a/share/cmake-3.18/Help/module/FindSDL_image.rst b/share/cmake-3.22/Help/module/FindSDL_image.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindSDL_image.rst
rename to share/cmake-3.22/Help/module/FindSDL_image.rst
diff --git a/share/cmake-3.18/Help/module/FindSDL_mixer.rst b/share/cmake-3.22/Help/module/FindSDL_mixer.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindSDL_mixer.rst
rename to share/cmake-3.22/Help/module/FindSDL_mixer.rst
diff --git a/share/cmake-3.18/Help/module/FindSDL_net.rst b/share/cmake-3.22/Help/module/FindSDL_net.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindSDL_net.rst
rename to share/cmake-3.22/Help/module/FindSDL_net.rst
diff --git a/share/cmake-3.18/Help/module/FindSDL_sound.rst b/share/cmake-3.22/Help/module/FindSDL_sound.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindSDL_sound.rst
rename to share/cmake-3.22/Help/module/FindSDL_sound.rst
diff --git a/share/cmake-3.18/Help/module/FindSDL_ttf.rst b/share/cmake-3.22/Help/module/FindSDL_ttf.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindSDL_ttf.rst
rename to share/cmake-3.22/Help/module/FindSDL_ttf.rst
diff --git a/share/cmake-3.18/Help/module/FindSQLite3.rst b/share/cmake-3.22/Help/module/FindSQLite3.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindSQLite3.rst
rename to share/cmake-3.22/Help/module/FindSQLite3.rst
diff --git a/share/cmake-3.18/Help/module/FindSWIG.rst b/share/cmake-3.22/Help/module/FindSWIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindSWIG.rst
rename to share/cmake-3.22/Help/module/FindSWIG.rst
diff --git a/share/cmake-3.18/Help/module/FindSelfPackers.rst b/share/cmake-3.22/Help/module/FindSelfPackers.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindSelfPackers.rst
rename to share/cmake-3.22/Help/module/FindSelfPackers.rst
diff --git a/share/cmake-3.18/Help/module/FindSquish.rst b/share/cmake-3.22/Help/module/FindSquish.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindSquish.rst
rename to share/cmake-3.22/Help/module/FindSquish.rst
diff --git a/share/cmake-3.18/Help/module/FindSubversion.rst b/share/cmake-3.22/Help/module/FindSubversion.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindSubversion.rst
rename to share/cmake-3.22/Help/module/FindSubversion.rst
diff --git a/share/cmake-3.18/Help/module/FindTCL.rst b/share/cmake-3.22/Help/module/FindTCL.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindTCL.rst
rename to share/cmake-3.22/Help/module/FindTCL.rst
diff --git a/share/cmake-3.18/Help/module/FindTIFF.rst b/share/cmake-3.22/Help/module/FindTIFF.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindTIFF.rst
rename to share/cmake-3.22/Help/module/FindTIFF.rst
diff --git a/share/cmake-3.18/Help/module/FindTclStub.rst b/share/cmake-3.22/Help/module/FindTclStub.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindTclStub.rst
rename to share/cmake-3.22/Help/module/FindTclStub.rst
diff --git a/share/cmake-3.18/Help/module/FindTclsh.rst b/share/cmake-3.22/Help/module/FindTclsh.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindTclsh.rst
rename to share/cmake-3.22/Help/module/FindTclsh.rst
diff --git a/share/cmake-3.18/Help/module/FindThreads.rst b/share/cmake-3.22/Help/module/FindThreads.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindThreads.rst
rename to share/cmake-3.22/Help/module/FindThreads.rst
diff --git a/share/cmake-3.18/Help/module/FindUnixCommands.rst b/share/cmake-3.22/Help/module/FindUnixCommands.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindUnixCommands.rst
rename to share/cmake-3.22/Help/module/FindUnixCommands.rst
diff --git a/share/cmake-3.18/Help/module/FindVTK.rst b/share/cmake-3.22/Help/module/FindVTK.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindVTK.rst
rename to share/cmake-3.22/Help/module/FindVTK.rst
diff --git a/share/cmake-3.18/Help/module/FindVulkan.rst b/share/cmake-3.22/Help/module/FindVulkan.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindVulkan.rst
rename to share/cmake-3.22/Help/module/FindVulkan.rst
diff --git a/share/cmake-3.18/Help/module/FindWget.rst b/share/cmake-3.22/Help/module/FindWget.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindWget.rst
rename to share/cmake-3.22/Help/module/FindWget.rst
diff --git a/share/cmake-3.18/Help/module/FindWish.rst b/share/cmake-3.22/Help/module/FindWish.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindWish.rst
rename to share/cmake-3.22/Help/module/FindWish.rst
diff --git a/share/cmake-3.18/Help/module/FindX11.rst b/share/cmake-3.22/Help/module/FindX11.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindX11.rst
rename to share/cmake-3.22/Help/module/FindX11.rst
diff --git a/share/cmake-3.18/Help/module/FindXCTest.rst b/share/cmake-3.22/Help/module/FindXCTest.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindXCTest.rst
rename to share/cmake-3.22/Help/module/FindXCTest.rst
diff --git a/share/cmake-3.18/Help/module/FindXMLRPC.rst b/share/cmake-3.22/Help/module/FindXMLRPC.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindXMLRPC.rst
rename to share/cmake-3.22/Help/module/FindXMLRPC.rst
diff --git a/share/cmake-3.18/Help/module/FindXalanC.rst b/share/cmake-3.22/Help/module/FindXalanC.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindXalanC.rst
rename to share/cmake-3.22/Help/module/FindXalanC.rst
diff --git a/share/cmake-3.18/Help/module/FindXercesC.rst b/share/cmake-3.22/Help/module/FindXercesC.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindXercesC.rst
rename to share/cmake-3.22/Help/module/FindXercesC.rst
diff --git a/share/cmake-3.18/Help/module/FindZLIB.rst b/share/cmake-3.22/Help/module/FindZLIB.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindZLIB.rst
rename to share/cmake-3.22/Help/module/FindZLIB.rst
diff --git a/share/cmake-3.18/Help/module/Findosg.rst b/share/cmake-3.22/Help/module/Findosg.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/Findosg.rst
rename to share/cmake-3.22/Help/module/Findosg.rst
diff --git a/share/cmake-3.18/Help/module/FindosgAnimation.rst b/share/cmake-3.22/Help/module/FindosgAnimation.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindosgAnimation.rst
rename to share/cmake-3.22/Help/module/FindosgAnimation.rst
diff --git a/share/cmake-3.18/Help/module/FindosgDB.rst b/share/cmake-3.22/Help/module/FindosgDB.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindosgDB.rst
rename to share/cmake-3.22/Help/module/FindosgDB.rst
diff --git a/share/cmake-3.18/Help/module/FindosgFX.rst b/share/cmake-3.22/Help/module/FindosgFX.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindosgFX.rst
rename to share/cmake-3.22/Help/module/FindosgFX.rst
diff --git a/share/cmake-3.18/Help/module/FindosgGA.rst b/share/cmake-3.22/Help/module/FindosgGA.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindosgGA.rst
rename to share/cmake-3.22/Help/module/FindosgGA.rst
diff --git a/share/cmake-3.18/Help/module/FindosgIntrospection.rst b/share/cmake-3.22/Help/module/FindosgIntrospection.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindosgIntrospection.rst
rename to share/cmake-3.22/Help/module/FindosgIntrospection.rst
diff --git a/share/cmake-3.18/Help/module/FindosgManipulator.rst b/share/cmake-3.22/Help/module/FindosgManipulator.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindosgManipulator.rst
rename to share/cmake-3.22/Help/module/FindosgManipulator.rst
diff --git a/share/cmake-3.18/Help/module/FindosgParticle.rst b/share/cmake-3.22/Help/module/FindosgParticle.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindosgParticle.rst
rename to share/cmake-3.22/Help/module/FindosgParticle.rst
diff --git a/share/cmake-3.18/Help/module/FindosgPresentation.rst b/share/cmake-3.22/Help/module/FindosgPresentation.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindosgPresentation.rst
rename to share/cmake-3.22/Help/module/FindosgPresentation.rst
diff --git a/share/cmake-3.18/Help/module/FindosgProducer.rst b/share/cmake-3.22/Help/module/FindosgProducer.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindosgProducer.rst
rename to share/cmake-3.22/Help/module/FindosgProducer.rst
diff --git a/share/cmake-3.18/Help/module/FindosgQt.rst b/share/cmake-3.22/Help/module/FindosgQt.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindosgQt.rst
rename to share/cmake-3.22/Help/module/FindosgQt.rst
diff --git a/share/cmake-3.18/Help/module/FindosgShadow.rst b/share/cmake-3.22/Help/module/FindosgShadow.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindosgShadow.rst
rename to share/cmake-3.22/Help/module/FindosgShadow.rst
diff --git a/share/cmake-3.18/Help/module/FindosgSim.rst b/share/cmake-3.22/Help/module/FindosgSim.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindosgSim.rst
rename to share/cmake-3.22/Help/module/FindosgSim.rst
diff --git a/share/cmake-3.18/Help/module/FindosgTerrain.rst b/share/cmake-3.22/Help/module/FindosgTerrain.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindosgTerrain.rst
rename to share/cmake-3.22/Help/module/FindosgTerrain.rst
diff --git a/share/cmake-3.18/Help/module/FindosgText.rst b/share/cmake-3.22/Help/module/FindosgText.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindosgText.rst
rename to share/cmake-3.22/Help/module/FindosgText.rst
diff --git a/share/cmake-3.18/Help/module/FindosgUtil.rst b/share/cmake-3.22/Help/module/FindosgUtil.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindosgUtil.rst
rename to share/cmake-3.22/Help/module/FindosgUtil.rst
diff --git a/share/cmake-3.18/Help/module/FindosgViewer.rst b/share/cmake-3.22/Help/module/FindosgViewer.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindosgViewer.rst
rename to share/cmake-3.22/Help/module/FindosgViewer.rst
diff --git a/share/cmake-3.18/Help/module/FindosgVolume.rst b/share/cmake-3.22/Help/module/FindosgVolume.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindosgVolume.rst
rename to share/cmake-3.22/Help/module/FindosgVolume.rst
diff --git a/share/cmake-3.18/Help/module/FindosgWidget.rst b/share/cmake-3.22/Help/module/FindosgWidget.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindosgWidget.rst
rename to share/cmake-3.22/Help/module/FindosgWidget.rst
diff --git a/share/cmake-3.18/Help/module/Findosg_functions.rst b/share/cmake-3.22/Help/module/Findosg_functions.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/Findosg_functions.rst
rename to share/cmake-3.22/Help/module/Findosg_functions.rst
diff --git a/share/cmake-3.18/Help/module/FindwxWidgets.rst b/share/cmake-3.22/Help/module/FindwxWidgets.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindwxWidgets.rst
rename to share/cmake-3.22/Help/module/FindwxWidgets.rst
diff --git a/share/cmake-3.18/Help/module/FindwxWindows.rst b/share/cmake-3.22/Help/module/FindwxWindows.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FindwxWindows.rst
rename to share/cmake-3.22/Help/module/FindwxWindows.rst
diff --git a/share/cmake-3.18/Help/module/FortranCInterface.rst b/share/cmake-3.22/Help/module/FortranCInterface.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/FortranCInterface.rst
rename to share/cmake-3.22/Help/module/FortranCInterface.rst
diff --git a/share/cmake-3.18/Help/module/GNUInstallDirs.rst b/share/cmake-3.22/Help/module/GNUInstallDirs.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/GNUInstallDirs.rst
rename to share/cmake-3.22/Help/module/GNUInstallDirs.rst
diff --git a/share/cmake-3.18/Help/module/GenerateExportHeader.rst b/share/cmake-3.22/Help/module/GenerateExportHeader.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/GenerateExportHeader.rst
rename to share/cmake-3.22/Help/module/GenerateExportHeader.rst
diff --git a/share/cmake-3.18/Help/module/GetPrerequisites.rst b/share/cmake-3.22/Help/module/GetPrerequisites.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/GetPrerequisites.rst
rename to share/cmake-3.22/Help/module/GetPrerequisites.rst
diff --git a/share/cmake-3.18/Help/module/GoogleTest.rst b/share/cmake-3.22/Help/module/GoogleTest.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/GoogleTest.rst
rename to share/cmake-3.22/Help/module/GoogleTest.rst
diff --git a/share/cmake-3.18/Help/module/InstallRequiredSystemLibraries.rst b/share/cmake-3.22/Help/module/InstallRequiredSystemLibraries.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/InstallRequiredSystemLibraries.rst
rename to share/cmake-3.22/Help/module/InstallRequiredSystemLibraries.rst
diff --git a/share/cmake-3.18/Help/module/MacroAddFileDependencies.rst b/share/cmake-3.22/Help/module/MacroAddFileDependencies.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/MacroAddFileDependencies.rst
rename to share/cmake-3.22/Help/module/MacroAddFileDependencies.rst
diff --git a/share/cmake-3.18/Help/module/ProcessorCount.rst b/share/cmake-3.22/Help/module/ProcessorCount.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/ProcessorCount.rst
rename to share/cmake-3.22/Help/module/ProcessorCount.rst
diff --git a/share/cmake-3.18/Help/module/SelectLibraryConfigurations.rst b/share/cmake-3.22/Help/module/SelectLibraryConfigurations.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/SelectLibraryConfigurations.rst
rename to share/cmake-3.22/Help/module/SelectLibraryConfigurations.rst
diff --git a/share/cmake-3.18/Help/module/SquishTestScript.rst b/share/cmake-3.22/Help/module/SquishTestScript.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/SquishTestScript.rst
rename to share/cmake-3.22/Help/module/SquishTestScript.rst
diff --git a/share/cmake-3.18/Help/module/TestBigEndian.rst b/share/cmake-3.22/Help/module/TestBigEndian.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/TestBigEndian.rst
rename to share/cmake-3.22/Help/module/TestBigEndian.rst
diff --git a/share/cmake-3.18/Help/module/TestCXXAcceptsFlag.rst b/share/cmake-3.22/Help/module/TestCXXAcceptsFlag.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/TestCXXAcceptsFlag.rst
rename to share/cmake-3.22/Help/module/TestCXXAcceptsFlag.rst
diff --git a/share/cmake-3.18/Help/module/TestForANSIForScope.rst b/share/cmake-3.22/Help/module/TestForANSIForScope.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/TestForANSIForScope.rst
rename to share/cmake-3.22/Help/module/TestForANSIForScope.rst
diff --git a/share/cmake-3.18/Help/module/TestForANSIStreamHeaders.rst b/share/cmake-3.22/Help/module/TestForANSIStreamHeaders.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/TestForANSIStreamHeaders.rst
rename to share/cmake-3.22/Help/module/TestForANSIStreamHeaders.rst
diff --git a/share/cmake-3.18/Help/module/TestForSSTREAM.rst b/share/cmake-3.22/Help/module/TestForSSTREAM.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/TestForSSTREAM.rst
rename to share/cmake-3.22/Help/module/TestForSSTREAM.rst
diff --git a/share/cmake-3.18/Help/module/TestForSTDNamespace.rst b/share/cmake-3.22/Help/module/TestForSTDNamespace.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/TestForSTDNamespace.rst
rename to share/cmake-3.22/Help/module/TestForSTDNamespace.rst
diff --git a/share/cmake-3.18/Help/module/UseEcos.rst b/share/cmake-3.22/Help/module/UseEcos.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/UseEcos.rst
rename to share/cmake-3.22/Help/module/UseEcos.rst
diff --git a/share/cmake-3.18/Help/module/UseJava.rst b/share/cmake-3.22/Help/module/UseJava.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/UseJava.rst
rename to share/cmake-3.22/Help/module/UseJava.rst
diff --git a/share/cmake-3.22/Help/module/UseJavaClassFilelist.rst b/share/cmake-3.22/Help/module/UseJavaClassFilelist.rst
new file mode 100644
index 0000000..29949be
--- /dev/null
+++ b/share/cmake-3.22/Help/module/UseJavaClassFilelist.rst
@@ -0,0 +1,6 @@
+UseJavaClassFilelist
+--------------------
+
+.. versionchanged:: 3.20
+  This module was previously documented by mistake and was never meant for
+  direct inclusion by project code.  See the :module:`UseJava` module.
diff --git a/share/cmake-3.22/Help/module/UseJavaSymlinks.rst b/share/cmake-3.22/Help/module/UseJavaSymlinks.rst
new file mode 100644
index 0000000..1058a68
--- /dev/null
+++ b/share/cmake-3.22/Help/module/UseJavaSymlinks.rst
@@ -0,0 +1,6 @@
+UseJavaSymlinks
+---------------
+
+.. versionchanged:: 3.20
+  This module was previously documented by mistake and was never meant for
+  direct inclusion by project code.  See the :module:`UseJava` module.
diff --git a/share/cmake-3.18/Help/module/UsePkgConfig.rst b/share/cmake-3.22/Help/module/UsePkgConfig.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/UsePkgConfig.rst
rename to share/cmake-3.22/Help/module/UsePkgConfig.rst
diff --git a/share/cmake-3.18/Help/module/UseSWIG.rst b/share/cmake-3.22/Help/module/UseSWIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/UseSWIG.rst
rename to share/cmake-3.22/Help/module/UseSWIG.rst
diff --git a/share/cmake-3.18/Help/module/Use_wxWindows.rst b/share/cmake-3.22/Help/module/Use_wxWindows.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/Use_wxWindows.rst
rename to share/cmake-3.22/Help/module/Use_wxWindows.rst
diff --git a/share/cmake-3.18/Help/module/UsewxWidgets.rst b/share/cmake-3.22/Help/module/UsewxWidgets.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/UsewxWidgets.rst
rename to share/cmake-3.22/Help/module/UsewxWidgets.rst
diff --git a/share/cmake-3.18/Help/module/WriteBasicConfigVersionFile.rst b/share/cmake-3.22/Help/module/WriteBasicConfigVersionFile.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/WriteBasicConfigVersionFile.rst
rename to share/cmake-3.22/Help/module/WriteBasicConfigVersionFile.rst
diff --git a/share/cmake-3.18/Help/module/WriteCompilerDetectionHeader.rst b/share/cmake-3.22/Help/module/WriteCompilerDetectionHeader.rst
similarity index 100%
rename from share/cmake-3.18/Help/module/WriteCompilerDetectionHeader.rst
rename to share/cmake-3.22/Help/module/WriteCompilerDetectionHeader.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0000.rst b/share/cmake-3.22/Help/policy/CMP0000.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0000.rst
rename to share/cmake-3.22/Help/policy/CMP0000.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0001.rst b/share/cmake-3.22/Help/policy/CMP0001.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0001.rst
rename to share/cmake-3.22/Help/policy/CMP0001.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0002.rst b/share/cmake-3.22/Help/policy/CMP0002.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0002.rst
rename to share/cmake-3.22/Help/policy/CMP0002.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0003.rst b/share/cmake-3.22/Help/policy/CMP0003.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0003.rst
rename to share/cmake-3.22/Help/policy/CMP0003.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0004.rst b/share/cmake-3.22/Help/policy/CMP0004.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0004.rst
rename to share/cmake-3.22/Help/policy/CMP0004.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0005.rst b/share/cmake-3.22/Help/policy/CMP0005.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0005.rst
rename to share/cmake-3.22/Help/policy/CMP0005.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0006.rst b/share/cmake-3.22/Help/policy/CMP0006.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0006.rst
rename to share/cmake-3.22/Help/policy/CMP0006.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0007.rst b/share/cmake-3.22/Help/policy/CMP0007.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0007.rst
rename to share/cmake-3.22/Help/policy/CMP0007.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0008.rst b/share/cmake-3.22/Help/policy/CMP0008.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0008.rst
rename to share/cmake-3.22/Help/policy/CMP0008.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0009.rst b/share/cmake-3.22/Help/policy/CMP0009.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0009.rst
rename to share/cmake-3.22/Help/policy/CMP0009.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0010.rst b/share/cmake-3.22/Help/policy/CMP0010.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0010.rst
rename to share/cmake-3.22/Help/policy/CMP0010.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0011.rst b/share/cmake-3.22/Help/policy/CMP0011.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0011.rst
rename to share/cmake-3.22/Help/policy/CMP0011.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0012.rst b/share/cmake-3.22/Help/policy/CMP0012.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0012.rst
rename to share/cmake-3.22/Help/policy/CMP0012.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0013.rst b/share/cmake-3.22/Help/policy/CMP0013.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0013.rst
rename to share/cmake-3.22/Help/policy/CMP0013.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0014.rst b/share/cmake-3.22/Help/policy/CMP0014.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0014.rst
rename to share/cmake-3.22/Help/policy/CMP0014.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0015.rst b/share/cmake-3.22/Help/policy/CMP0015.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0015.rst
rename to share/cmake-3.22/Help/policy/CMP0015.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0016.rst b/share/cmake-3.22/Help/policy/CMP0016.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0016.rst
rename to share/cmake-3.22/Help/policy/CMP0016.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0017.rst b/share/cmake-3.22/Help/policy/CMP0017.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0017.rst
rename to share/cmake-3.22/Help/policy/CMP0017.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0018.rst b/share/cmake-3.22/Help/policy/CMP0018.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0018.rst
rename to share/cmake-3.22/Help/policy/CMP0018.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0019.rst b/share/cmake-3.22/Help/policy/CMP0019.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0019.rst
rename to share/cmake-3.22/Help/policy/CMP0019.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0020.rst b/share/cmake-3.22/Help/policy/CMP0020.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0020.rst
rename to share/cmake-3.22/Help/policy/CMP0020.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0021.rst b/share/cmake-3.22/Help/policy/CMP0021.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0021.rst
rename to share/cmake-3.22/Help/policy/CMP0021.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0022.rst b/share/cmake-3.22/Help/policy/CMP0022.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0022.rst
rename to share/cmake-3.22/Help/policy/CMP0022.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0023.rst b/share/cmake-3.22/Help/policy/CMP0023.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0023.rst
rename to share/cmake-3.22/Help/policy/CMP0023.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0024.rst b/share/cmake-3.22/Help/policy/CMP0024.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0024.rst
rename to share/cmake-3.22/Help/policy/CMP0024.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0025.rst b/share/cmake-3.22/Help/policy/CMP0025.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0025.rst
rename to share/cmake-3.22/Help/policy/CMP0025.rst
diff --git a/share/cmake-3.22/Help/policy/CMP0026.rst b/share/cmake-3.22/Help/policy/CMP0026.rst
new file mode 100644
index 0000000..e08fd54
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0026.rst
@@ -0,0 +1,29 @@
+CMP0026
+-------
+
+Disallow use of the LOCATION property for build targets.
+
+CMake 2.8.12 and lower allowed reading the :prop_tgt:`LOCATION` target
+property (and configuration-specific variants) to
+determine the eventual location of build targets.  This relies on the
+assumption that all necessary information is available at
+configure-time to determine the final location and filename of the
+target.  However, this property is not fully determined until later at
+generate-time.  At generate time, the :genex:`$<TARGET_FILE>` generator
+expression can be used to determine the eventual :prop_tgt:`LOCATION` of a target
+output.
+
+Code which reads the :prop_tgt:`LOCATION` target property can be ported to
+use the :genex:`$<TARGET_FILE>` generator expression together with the
+:command:`file(GENERATE)` subcommand to generate a file containing
+the target location.
+
+The ``OLD`` behavior for this policy is to allow reading the :prop_tgt:`LOCATION`
+properties from build-targets.  The ``NEW`` behavior for this policy is to
+not to allow reading the :prop_tgt:`LOCATION` properties from build-targets.
+
+This policy was introduced in CMake version 3.0.  CMake version
+|release| warns when the policy is not set and uses ``OLD`` behavior.  Use
+the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/CMP0027.rst b/share/cmake-3.22/Help/policy/CMP0027.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0027.rst
rename to share/cmake-3.22/Help/policy/CMP0027.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0028.rst b/share/cmake-3.22/Help/policy/CMP0028.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0028.rst
rename to share/cmake-3.22/Help/policy/CMP0028.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0029.rst b/share/cmake-3.22/Help/policy/CMP0029.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0029.rst
rename to share/cmake-3.22/Help/policy/CMP0029.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0030.rst b/share/cmake-3.22/Help/policy/CMP0030.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0030.rst
rename to share/cmake-3.22/Help/policy/CMP0030.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0031.rst b/share/cmake-3.22/Help/policy/CMP0031.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0031.rst
rename to share/cmake-3.22/Help/policy/CMP0031.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0032.rst b/share/cmake-3.22/Help/policy/CMP0032.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0032.rst
rename to share/cmake-3.22/Help/policy/CMP0032.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0033.rst b/share/cmake-3.22/Help/policy/CMP0033.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0033.rst
rename to share/cmake-3.22/Help/policy/CMP0033.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0034.rst b/share/cmake-3.22/Help/policy/CMP0034.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0034.rst
rename to share/cmake-3.22/Help/policy/CMP0034.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0035.rst b/share/cmake-3.22/Help/policy/CMP0035.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0035.rst
rename to share/cmake-3.22/Help/policy/CMP0035.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0036.rst b/share/cmake-3.22/Help/policy/CMP0036.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0036.rst
rename to share/cmake-3.22/Help/policy/CMP0036.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0037.rst b/share/cmake-3.22/Help/policy/CMP0037.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0037.rst
rename to share/cmake-3.22/Help/policy/CMP0037.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0038.rst b/share/cmake-3.22/Help/policy/CMP0038.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0038.rst
rename to share/cmake-3.22/Help/policy/CMP0038.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0039.rst b/share/cmake-3.22/Help/policy/CMP0039.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0039.rst
rename to share/cmake-3.22/Help/policy/CMP0039.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0040.rst b/share/cmake-3.22/Help/policy/CMP0040.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0040.rst
rename to share/cmake-3.22/Help/policy/CMP0040.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0041.rst b/share/cmake-3.22/Help/policy/CMP0041.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0041.rst
rename to share/cmake-3.22/Help/policy/CMP0041.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0042.rst b/share/cmake-3.22/Help/policy/CMP0042.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0042.rst
rename to share/cmake-3.22/Help/policy/CMP0042.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0043.rst b/share/cmake-3.22/Help/policy/CMP0043.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0043.rst
rename to share/cmake-3.22/Help/policy/CMP0043.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0044.rst b/share/cmake-3.22/Help/policy/CMP0044.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0044.rst
rename to share/cmake-3.22/Help/policy/CMP0044.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0045.rst b/share/cmake-3.22/Help/policy/CMP0045.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0045.rst
rename to share/cmake-3.22/Help/policy/CMP0045.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0046.rst b/share/cmake-3.22/Help/policy/CMP0046.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0046.rst
rename to share/cmake-3.22/Help/policy/CMP0046.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0047.rst b/share/cmake-3.22/Help/policy/CMP0047.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0047.rst
rename to share/cmake-3.22/Help/policy/CMP0047.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0048.rst b/share/cmake-3.22/Help/policy/CMP0048.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0048.rst
rename to share/cmake-3.22/Help/policy/CMP0048.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0049.rst b/share/cmake-3.22/Help/policy/CMP0049.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0049.rst
rename to share/cmake-3.22/Help/policy/CMP0049.rst
diff --git a/share/cmake-3.18/Help/policy/CMP0050.rst b/share/cmake-3.22/Help/policy/CMP0050.rst
similarity index 100%
rename from share/cmake-3.18/Help/policy/CMP0050.rst
rename to share/cmake-3.22/Help/policy/CMP0050.rst
diff --git a/share/cmake-3.22/Help/policy/CMP0051.rst b/share/cmake-3.22/Help/policy/CMP0051.rst
new file mode 100644
index 0000000..3558909
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0051.rst
@@ -0,0 +1,28 @@
+CMP0051
+-------
+
+.. versionadded:: 3.1
+
+List :genex:`TARGET_OBJECTS` in SOURCES target property.
+
+CMake 3.0 and lower did not include the ``TARGET_OBJECTS``
+:manual:`generator expression <cmake-generator-expressions(7)>` when
+returning the :prop_tgt:`SOURCES` target property.
+
+Configure-time CMake code is not able to handle generator expressions.  If
+using the :prop_tgt:`SOURCES` target property at configure time, it may be
+necessary to first remove generator expressions using the
+:command:`string(GENEX_STRIP)` command.  Generate-time CMake code such as
+:command:`file(GENERATE)` can handle the content without stripping.
+
+The ``OLD`` behavior for this policy is to omit ``TARGET_OBJECTS``
+expressions from the :prop_tgt:`SOURCES` target property.  The ``NEW``
+behavior for this policy is to include ``TARGET_OBJECTS`` expressions
+in the output.
+
+This policy was introduced in CMake version 3.1.
+CMake version |release| warns when the policy is not set and uses
+``OLD`` behavior.  Use the :command:`cmake_policy` command to set it
+to ``OLD`` or ``NEW`` explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0052.rst b/share/cmake-3.22/Help/policy/CMP0052.rst
new file mode 100644
index 0000000..c75f9ab
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0052.rst
@@ -0,0 +1,29 @@
+CMP0052
+-------
+
+.. versionadded:: 3.1
+
+Reject source and build dirs in installed
+:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES`.
+
+CMake 3.0 and lower allowed subdirectories of the source directory or build
+directory to be in the :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` of
+installed and exported targets, if the directory was also a subdirectory of
+the installation prefix.  This makes the installation depend on the
+existence of the source dir or binary dir, and the installation will be
+broken if either are removed after installation.
+
+See :ref:`Include Directories and Usage Requirements` for more on
+specifying include directories for targets.
+
+The ``OLD`` behavior for this policy is to export the content of the
+:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` with the source or binary
+directory.  The ``NEW`` behavior for this
+policy is to issue an error if such a directory is used.
+
+This policy was introduced in CMake version 3.1.
+CMake version |release| warns when the policy is not set and uses
+``OLD`` behavior.  Use the :command:`cmake_policy` command to set it
+to ``OLD`` or ``NEW`` explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0053.rst b/share/cmake-3.22/Help/policy/CMP0053.rst
new file mode 100644
index 0000000..9b18b2d
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0053.rst
@@ -0,0 +1,52 @@
+CMP0053
+-------
+
+.. versionadded:: 3.1
+
+Simplify variable reference and escape sequence evaluation.
+
+CMake 3.1 introduced a much faster implementation of evaluation of the
+:ref:`Variable References` and :ref:`Escape Sequences` documented in the
+:manual:`cmake-language(7)` manual.  While the behavior is identical
+to the legacy implementation in most cases, some corner cases were
+cleaned up to simplify the behavior.  Specifically:
+
+* Expansion of ``@VAR@`` reference syntax defined by the
+  :command:`configure_file` and :command:`string(CONFIGURE)`
+  commands is no longer performed in other contexts.
+
+* Literal ``${VAR}`` reference syntax may contain only
+  alphanumeric characters (``A-Z``, ``a-z``, ``0-9``) and
+  the characters ``_``, ``.``, ``/``, ``-``, and ``+``.
+  Note that ``$`` is technically allowed in the ``NEW`` behavior, but is
+  invalid for ``OLD`` behavior.  This is due to an oversight during the
+  implementation of :policy:`CMP0053` and its use as a literal variable
+  reference is discouraged for this reason.
+  Variables with other characters in their name may still
+  be referenced indirectly, e.g.
+
+  .. code-block:: cmake
+
+    set(varname "otherwise & disallowed $ characters")
+    message("${${varname}}")
+
+* The setting of policy :policy:`CMP0010` is not considered,
+  so improper variable reference syntax is always an error.
+
+* More characters are allowed to be escaped in variable names.
+  Previously, only ``()#" \@^`` were valid characters to
+  escape. Now any non-alphanumeric, non-semicolon, non-NUL
+  character may be escaped following the ``escape_identity``
+  production in the :ref:`Escape Sequences` section of the
+  :manual:`cmake-language(7)` manual.
+
+The ``OLD`` behavior for this policy is to honor the legacy behavior for
+variable references and escape sequences.  The ``NEW`` behavior is to
+use the simpler variable expansion and escape sequence evaluation rules.
+
+This policy was introduced in CMake version 3.1.
+CMake version |release| warns when the policy is not set and uses
+``OLD`` behavior.  Use the :command:`cmake_policy` command to set
+it to ``OLD`` or ``NEW`` explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0054.rst b/share/cmake-3.22/Help/policy/CMP0054.rst
new file mode 100644
index 0000000..c7ae019
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0054.rst
@@ -0,0 +1,54 @@
+CMP0054
+-------
+
+.. versionadded:: 3.1
+
+Only interpret :command:`if` arguments as variables or keywords when unquoted.
+
+CMake 3.1 and above no longer implicitly dereference variables or
+interpret keywords in an :command:`if` command argument when
+it is a :ref:`Quoted Argument` or a :ref:`Bracket Argument`.
+
+The ``OLD`` behavior for this policy is to dereference variables and
+interpret keywords even if they are quoted or bracketed.
+The ``NEW`` behavior is to not dereference variables or interpret keywords
+that have been quoted or bracketed.
+
+Given the following partial example:
+
+::
+
+  set(A E)
+  set(E "")
+
+  if("${A}" STREQUAL "")
+    message("Result is TRUE before CMake 3.1 or when CMP0054 is OLD")
+  else()
+    message("Result is FALSE in CMake 3.1 and above if CMP0054 is NEW")
+  endif()
+
+After explicit expansion of variables this gives:
+
+::
+
+  if("E" STREQUAL "")
+
+With the policy set to ``OLD`` implicit expansion reduces this semantically to:
+
+::
+
+  if("" STREQUAL "")
+
+With the policy set to ``NEW`` the quoted arguments will not be
+further dereferenced:
+
+::
+
+  if("E" STREQUAL "")
+
+This policy was introduced in CMake version 3.1.
+CMake version |release| warns when the policy is not set and uses
+``OLD`` behavior.  Use the :command:`cmake_policy` command to set
+it to ``OLD`` or ``NEW`` explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0055.rst b/share/cmake-3.22/Help/policy/CMP0055.rst
new file mode 100644
index 0000000..47cac8e
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0055.rst
@@ -0,0 +1,21 @@
+CMP0055
+-------
+
+.. versionadded:: 3.2
+
+Strict checking for the :command:`break` command.
+
+CMake 3.1 and lower allowed calls to the :command:`break` command
+outside of a loop context and also ignored any given arguments.
+This was undefined behavior.
+
+The ``OLD`` behavior for this policy is to allow :command:`break` to be placed
+outside of loop contexts and ignores any arguments.  The ``NEW`` behavior for this
+policy is to issue an error if a misplaced break or any arguments are found.
+
+This policy was introduced in CMake version 3.2.
+CMake version |release| warns when the policy is not set and uses
+``OLD`` behavior.  Use the :command:`cmake_policy` command to set it to ``OLD`` or
+``NEW`` explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0056.rst b/share/cmake-3.22/Help/policy/CMP0056.rst
new file mode 100644
index 0000000..628a6a1
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0056.rst
@@ -0,0 +1,36 @@
+CMP0056
+-------
+
+.. versionadded:: 3.2
+
+Honor link flags in :command:`try_compile` source-file signature.
+
+The :command:`try_compile` command source-file signature generates a
+``CMakeLists.txt`` file to build the source file into an executable.
+In order to compile the source the same way as it might be compiled
+by the calling project, the generated project sets the value of the
+:variable:`CMAKE_<LANG>_FLAGS` variable to that in the calling project.
+The value of the :variable:`CMAKE_EXE_LINKER_FLAGS` variable may be
+needed in some cases too, but CMake 3.1 and lower did not set it in
+the generated project.  CMake 3.2 and above prefer to set it so that
+linker flags are honored as well as compiler flags.  This policy
+provides compatibility with the pre-3.2 behavior.
+
+The ``OLD`` behavior for this policy is to not set the value of the
+:variable:`CMAKE_EXE_LINKER_FLAGS` variable in the generated test
+project.  The ``NEW`` behavior for this policy is to set the value of
+the :variable:`CMAKE_EXE_LINKER_FLAGS` variable in the test project
+to the same as it is in the calling project.
+
+If the project code does not set the policy explicitly, users may
+set it on the command line by defining the
+:variable:`CMAKE_POLICY_DEFAULT_CMP0056 <CMAKE_POLICY_DEFAULT_CMP<NNNN>>`
+variable in the cache.
+
+This policy was introduced in CMake version 3.2.  Unlike most policies,
+CMake version |release| does *not* warn by default when this policy
+is not set and simply uses ``OLD`` behavior.  See documentation of the
+:variable:`CMAKE_POLICY_WARNING_CMP0056 <CMAKE_POLICY_WARNING_CMP<NNNN>>`
+variable to control the warning.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0057.rst b/share/cmake-3.22/Help/policy/CMP0057.rst
new file mode 100644
index 0000000..76aebfb
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0057.rst
@@ -0,0 +1,18 @@
+CMP0057
+-------
+
+.. versionadded:: 3.3
+
+Support new :command:`if` IN_LIST operator.
+
+CMake 3.3 adds support for the new IN_LIST operator.
+
+The ``OLD`` behavior for this policy is to ignore the IN_LIST operator.
+The ``NEW`` behavior is to interpret the IN_LIST operator.
+
+This policy was introduced in CMake version 3.3.
+CMake version |release| warns when the policy is not set and uses
+``OLD`` behavior.  Use the :command:`cmake_policy` command to set
+it to ``OLD`` or ``NEW`` explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0058.rst b/share/cmake-3.22/Help/policy/CMP0058.rst
new file mode 100644
index 0000000..06cc74b
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0058.rst
@@ -0,0 +1,112 @@
+CMP0058
+-------
+
+.. versionadded:: 3.3
+
+Ninja requires custom command byproducts to be explicit.
+
+When an intermediate file generated during the build is consumed
+by an expensive operation or a large tree of dependents, one may
+reduce the work needed for an incremental rebuild by updating the
+file timestamp only when its content changes.  With this approach
+the generation rule must have a separate output file that is always
+updated with a new timestamp that is newer than any dependencies of
+the rule so that the build tool re-runs the rule only when the input
+changes.  We refer to the separate output file as a rule's *witness*
+and the generated file as a rule's *byproduct*.
+
+Byproducts may not be listed as outputs because their timestamps are
+allowed to be older than the inputs.  No build tools (like ``make``)
+that existed when CMake was designed have a way to express byproducts.
+Therefore CMake versions prior to 3.2 had no way to specify them.
+Projects typically left byproducts undeclared in the rules that
+generate them.  For example:
+
+.. code-block:: cmake
+
+  add_custom_command(
+    OUTPUT witness.txt
+    COMMAND ${CMAKE_COMMAND} -E copy_if_different
+            ${CMAKE_CURRENT_SOURCE_DIR}/input.txt
+            byproduct.txt # timestamp may not change
+    COMMAND ${CMAKE_COMMAND} -E touch witness.txt
+    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/input.txt
+    )
+  add_custom_target(Provider DEPENDS witness.txt)
+  add_custom_command(
+    OUTPUT generated.c
+    COMMAND expensive-task -i byproduct.txt -o generated.c
+    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/byproduct.txt
+    )
+  add_library(Consumer generated.c)
+  add_dependencies(Consumer Provider)
+
+This works well for all generators except :generator:`Ninja`.
+The Ninja build tool sees a rule listing ``byproduct.txt``
+as a dependency and no rule listing it as an output.  Ninja then
+complains that there is no way to satisfy the dependency and
+stops building even though there are order-only dependencies
+that ensure ``byproduct.txt`` will exist before its consumers
+need it.  See discussion of this problem in `Ninja Issue 760`_
+for further details on why Ninja works this way.
+
+.. _`Ninja Issue 760`: https://github.com/martine/ninja/issues/760
+
+Instead of leaving byproducts undeclared in the rules that generate
+them, Ninja expects byproducts to be listed along with other outputs.
+Such rules may be marked with a ``restat`` option that tells Ninja
+to check the timestamps of outputs after the rules run.  This
+prevents byproducts whose timestamps do not change from causing
+their dependents to re-build unnecessarily.
+
+Since the above approach does not tell CMake what custom command
+generates ``byproduct.txt``, the Ninja generator does not have
+enough information to add the byproduct as an output of any rule.
+CMake 2.8.12 and above work around this problem and allow projects
+using the above approach to build by generating ``phony`` build
+rules to tell Ninja to tolerate such missing files.  However, this
+workaround prevents Ninja from diagnosing a dependency that is
+really missing.  It also works poorly in in-source builds where
+every custom command dependency, even on source files, needs to
+be treated this way because CMake does not have enough information
+to know which files are generated as byproducts of custom commands.
+
+CMake 3.2 introduced the ``BYPRODUCTS`` option to the
+:command:`add_custom_command` and :command:`add_custom_target`
+commands.  This option allows byproducts to be specified explicitly:
+
+.. code-block:: cmake
+
+  add_custom_command(
+    OUTPUT witness.txt
+    BYPRODUCTS byproduct.txt # explicit byproduct specification
+    COMMAND ${CMAKE_COMMAND} -E copy_if_different
+            ${CMAKE_CURRENT_SOURCE_DIR}/input.txt
+            byproduct.txt # timestamp may not change
+  ...
+
+The ``BYPRODUCTS`` option is used by the :generator:`Ninja` generator
+to list byproducts among the outputs of the custom commands that
+generate them, and is ignored by other generators.
+
+CMake 3.3 and above prefer to require projects to specify custom
+command byproducts explicitly so that it can avoid using the
+``phony`` rule workaround altogether.  Policy ``CMP0058`` was
+introduced to provide compatibility with existing projects that
+still need the workaround.
+
+This policy has no effect on generators other than :generator:`Ninja`.
+The ``OLD`` behavior for this policy is to generate Ninja ``phony``
+rules for unknown dependencies in the build tree.  The ``NEW``
+behavior for this policy is to not generate these and instead
+require projects to specify custom command ``BYPRODUCTS`` explicitly.
+
+This policy was introduced in CMake version 3.3.
+CMake version |release| warns when it sees unknown dependencies in
+out-of-source build trees if the policy is not set and then uses
+``OLD`` behavior.  Use the :command:`cmake_policy` command to set
+the policy to ``OLD`` or ``NEW`` explicitly.  The policy setting
+must be in scope at the end of the top-level ``CMakeLists.txt``
+file of the project and has global effect.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0059.rst b/share/cmake-3.22/Help/policy/CMP0059.rst
new file mode 100644
index 0000000..6317d05
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0059.rst
@@ -0,0 +1,21 @@
+CMP0059
+-------
+
+.. versionadded:: 3.3
+
+Do not treat ``DEFINITIONS`` as a built-in directory property.
+
+CMake 3.3 and above no longer make a list of definitions available through
+the :prop_dir:`DEFINITIONS` directory property.  The
+:prop_dir:`COMPILE_DEFINITIONS` directory property may be used instead.
+
+The ``OLD`` behavior for this policy is to provide the list of flags given
+so far to the :command:`add_definitions` command.  The ``NEW`` behavior is
+to behave as a normal user-defined directory property.
+
+This policy was introduced in CMake version 3.3.
+CMake version |release| warns when the policy is not set and uses
+``OLD`` behavior.  Use the :command:`cmake_policy` command to set
+it to ``OLD`` or ``NEW`` explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0060.rst b/share/cmake-3.22/Help/policy/CMP0060.rst
new file mode 100644
index 0000000..09257d1
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0060.rst
@@ -0,0 +1,67 @@
+CMP0060
+-------
+
+.. versionadded:: 3.3
+
+Link libraries by full path even in implicit directories.
+
+Policy :policy:`CMP0003` was introduced with the intention of always
+linking library files by full path when a full path is given to the
+:command:`target_link_libraries` command.  However, on some platforms
+(e.g. HP-UX) the compiler front-end adds alternative library search paths
+for the current architecture (e.g. ``/usr/lib/<arch>`` has alternatives
+to libraries in ``/usr/lib`` for the current architecture).
+On such platforms the :command:`find_library` may find a library such as
+``/usr/lib/libfoo.so`` that does not belong to the current architecture.
+
+Prior to policy :policy:`CMP0003` projects would still build in such
+cases because the incorrect library path would be converted to ``-lfoo``
+on the link line and the linker would find the proper library in the
+arch-specific search path provided by the compiler front-end implicitly.
+At the time we chose to remain compatible with such projects by always
+converting library files found in implicit link directories to ``-lfoo``
+flags to ask the linker to search for them.  This approach allowed existing
+projects to continue to build while still linking to libraries outside
+implicit link directories via full path (such as those in the build tree).
+
+CMake does allow projects to override this behavior by using an
+:ref:`IMPORTED library target <Imported Targets>` with its
+:prop_tgt:`IMPORTED_LOCATION` property set to the desired full path to
+a library file.  In fact, many :ref:`Find Modules` are learning to provide
+:ref:`Imported Targets` instead of just the traditional ``Foo_LIBRARIES``
+variable listing library files.  However, this makes the link line
+generated for a library found by a Find Module depend on whether it
+is linked through an imported target or not, which is inconsistent.
+Furthermore, this behavior has been a source of confusion because the
+generated link line for a library file depends on its location.  It is
+also problematic for projects trying to link statically because flags
+like ``-Wl,-Bstatic -lfoo -Wl,-Bdynamic`` may be used to help the linker
+select ``libfoo.a`` instead of ``libfoo.so`` but then leak dynamic linking
+to following libraries.  (See the :prop_tgt:`LINK_SEARCH_END_STATIC`
+target property for a solution typically used for that problem.)
+
+When the special case for libraries in implicit link directories was first
+introduced the list of implicit link directories was simply hard-coded
+(e.g. ``/lib``, ``/usr/lib``, and a few others).  Since that time, CMake
+has learned to detect the implicit link directories used by the compiler
+front-end.  If necessary, the :command:`find_library` command could be
+taught to use this information to help find libraries of the proper
+architecture.
+
+For these reasons, CMake 3.3 and above prefer to drop the special case
+and link libraries by full path even when they are in implicit link
+directories.  Policy ``CMP0060`` provides compatibility for existing
+projects.
+
+The ``OLD`` behavior for this policy is to ask the linker to search for
+libraries whose full paths are known to be in implicit link directories.
+The ``NEW`` behavior for this policy is to link libraries by full path even
+if they are in implicit link directories.
+
+This policy was introduced in CMake version 3.3.  Unlike most policies,
+CMake version |release| does *not* warn by default when this policy
+is not set and simply uses ``OLD`` behavior.  See documentation of the
+:variable:`CMAKE_POLICY_WARNING_CMP0060 <CMAKE_POLICY_WARNING_CMP<NNNN>>`
+variable to control the warning.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0061.rst b/share/cmake-3.22/Help/policy/CMP0061.rst
new file mode 100644
index 0000000..aca551d
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0061.rst
@@ -0,0 +1,28 @@
+CMP0061
+-------
+
+.. versionadded:: 3.3
+
+CTest does not by default tell ``make`` to ignore errors (``-i``).
+
+The :command:`ctest_build` and :command:`build_command` commands no
+longer generate build commands for :ref:`Makefile Generators` with
+the ``-i`` option.  Previously this was done to help build as much
+of tested projects as possible.  However, this behavior is not
+consistent with other generators and also causes the return code
+of the ``make`` tool to be meaningless.
+
+Of course users may still add this option manually by setting
+:variable:`CTEST_BUILD_COMMAND` or the ``MAKECOMMAND`` cache entry.
+See the :ref:`CTest Build Step` ``MakeCommand`` setting documentation
+for their effects.
+
+The ``OLD`` behavior for this policy is to add ``-i`` to ``make``
+calls in CTest.  The ``NEW`` behavior for this policy is to not
+add ``-i``.
+
+This policy was introduced in CMake version 3.3.  Unlike most policies,
+CMake version |release| does *not* warn when this policy is not set and
+simply uses ``OLD`` behavior.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0062.rst b/share/cmake-3.22/Help/policy/CMP0062.rst
new file mode 100644
index 0000000..01e93f0
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0062.rst
@@ -0,0 +1,31 @@
+CMP0062
+-------
+
+.. versionadded:: 3.3
+
+Disallow :command:`install` of :command:`export` result.
+
+The :command:`export()` command generates a file containing
+:ref:`Imported Targets`, which is suitable for use from the build
+directory.  It is not suitable for installation because it contains absolute
+paths to buildsystem locations, and is particular to a single build
+configuration.
+
+The :command:`install(EXPORT)` generates and installs files which contain
+:ref:`Imported Targets`.  These files are generated with relative paths
+(unless the user specifies absolute paths), and are designed for
+multi-configuration use.  See :ref:`Creating Packages` for more.
+
+CMake 3.3 no longer allows the use of the :command:`install(FILES)` command
+with the result of the :command:`export()` command.
+
+The ``OLD`` behavior for this policy is to allow installing the result of
+an :command:`export()` command.  The ``NEW`` behavior for this policy is
+not to allow installing the result of an :command:`export()` command.
+
+This policy was introduced in CMake version 3.3.  CMake version
+|release| warns when the policy is not set and uses ``OLD`` behavior.  Use
+the :command:`cmake_policy()` command to set it to ``OLD`` or ``NEW``
+explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0063.rst b/share/cmake-3.22/Help/policy/CMP0063.rst
new file mode 100644
index 0000000..fec3ad8
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0063.rst
@@ -0,0 +1,30 @@
+CMP0063
+-------
+
+.. versionadded:: 3.3
+
+Honor visibility properties for all target types.
+
+The :prop_tgt:`<LANG>_VISIBILITY_PRESET` and
+:prop_tgt:`VISIBILITY_INLINES_HIDDEN` target properties affect visibility
+of symbols during dynamic linking.  When first introduced these properties
+affected compilation of sources only in shared libraries, module libraries,
+and executables with the :prop_tgt:`ENABLE_EXPORTS` property set.  This
+was sufficient for the basic use cases of shared libraries and executables
+with plugins.  However, some sources may be compiled as part of static
+libraries or object libraries and then linked into a shared library later.
+CMake 3.3 and above prefer to honor these properties for sources compiled
+in all target types.  This policy preserves compatibility for projects
+expecting the properties to work only for some target types.
+
+The ``OLD`` behavior for this policy is to ignore the visibility properties
+for static libraries, object libraries, and executables without exports.
+The ``NEW`` behavior for this policy is to honor the visibility properties
+for all target types.
+
+This policy was introduced in CMake version 3.3.  CMake version
+|release| warns when the policy is not set and uses ``OLD`` behavior.  Use
+the :command:`cmake_policy()` command to set it to ``OLD`` or ``NEW``
+explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0064.rst b/share/cmake-3.22/Help/policy/CMP0064.rst
new file mode 100644
index 0000000..0c20c13
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0064.rst
@@ -0,0 +1,19 @@
+CMP0064
+-------
+
+.. versionadded:: 3.4
+
+Recognize ``TEST`` as a operator for the :command:`if` command.
+
+The ``TEST`` operator was added to the :command:`if` command to determine if a
+given test name was created by the :command:`add_test` command.
+
+The ``OLD`` behavior for this policy is to ignore the ``TEST`` operator.
+The ``NEW`` behavior is to interpret the ``TEST`` operator.
+
+This policy was introduced in CMake version 3.4.  CMake version
+|release| warns when the policy is not set and uses ``OLD`` behavior.  Use
+the :command:`cmake_policy()` command to set it to ``OLD`` or ``NEW``
+explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0065.rst b/share/cmake-3.22/Help/policy/CMP0065.rst
new file mode 100644
index 0000000..8968b91
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0065.rst
@@ -0,0 +1,29 @@
+CMP0065
+-------
+
+.. versionadded:: 3.4
+
+Do not add flags to export symbols from executables without
+the :prop_tgt:`ENABLE_EXPORTS` target property.
+
+CMake 3.3 and below, for historical reasons, always linked executables
+on some platforms with flags like ``-rdynamic`` to export symbols from
+the executables for use by any plugins they may load via ``dlopen``.
+CMake 3.4 and above prefer to do this only for executables that are
+explicitly marked with the :prop_tgt:`ENABLE_EXPORTS` target property.
+
+The ``OLD`` behavior of this policy is to always use the additional link
+flags when linking executables regardless of the value of the
+:prop_tgt:`ENABLE_EXPORTS` target property.
+
+The ``NEW`` behavior of this policy is to only use the additional link
+flags when linking executables if the :prop_tgt:`ENABLE_EXPORTS` target
+property is set to ``True``.
+
+This policy was introduced in CMake version 3.4.  Unlike most policies,
+CMake version |release| does *not* warn by default when this policy
+is not set and simply uses ``OLD`` behavior.  See documentation of the
+:variable:`CMAKE_POLICY_WARNING_CMP0065 <CMAKE_POLICY_WARNING_CMP<NNNN>>`
+variable to control the warning.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0066.rst b/share/cmake-3.22/Help/policy/CMP0066.rst
new file mode 100644
index 0000000..b08430f
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0066.rst
@@ -0,0 +1,29 @@
+CMP0066
+-------
+
+.. versionadded:: 3.7
+
+Honor per-config flags in :command:`try_compile` source-file signature.
+
+The source file signature of the :command:`try_compile` command uses the value
+of the :variable:`CMAKE_<LANG>_FLAGS` variable in the test project so that the
+test compilation works as it would in the main project.  However, CMake 3.6 and
+below do not also honor config-specific compiler flags such as those in the
+:variable:`CMAKE_<LANG>_FLAGS_DEBUG` variable.  CMake 3.7 and above prefer to
+honor config-specific compiler flags too.  This policy provides compatibility
+for projects that do not expect config-specific compiler flags to be used.
+
+The ``OLD`` behavior of this policy is to ignore config-specific flag
+variables like :variable:`CMAKE_<LANG>_FLAGS_DEBUG` and only use CMake's
+built-in defaults for the current compiler and platform.
+
+The ``NEW`` behavior of this policy is to honor config-specific flag
+variabldes like :variable:`CMAKE_<LANG>_FLAGS_DEBUG`.
+
+This policy was introduced in CMake version 3.7.  Unlike most policies,
+CMake version |release| does *not* warn by default when this policy
+is not set and simply uses ``OLD`` behavior.  See documentation of the
+:variable:`CMAKE_POLICY_WARNING_CMP0066 <CMAKE_POLICY_WARNING_CMP<NNNN>>`
+variable to control the warning.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0067.rst b/share/cmake-3.22/Help/policy/CMP0067.rst
new file mode 100644
index 0000000..8358bb2
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0067.rst
@@ -0,0 +1,39 @@
+CMP0067
+-------
+
+.. versionadded:: 3.8
+
+Honor language standard in :command:`try_compile` source-file signature.
+
+The :command:`try_compile` source file signature is intended to allow
+callers to check whether they will be able to compile a given source file
+with the current toolchain.  In order to match compiler behavior, any
+language standard mode should match.  However, CMake 3.7 and below did not
+do this.  CMake 3.8 and above prefer to honor the language standard settings
+for ``C``, ``CXX`` (C++), and ``CUDA`` using the values of the variables:
+
+* :variable:`CMAKE_C_STANDARD`
+* :variable:`CMAKE_C_STANDARD_REQUIRED`
+* :variable:`CMAKE_C_EXTENSIONS`
+* :variable:`CMAKE_CXX_STANDARD`
+* :variable:`CMAKE_CXX_STANDARD_REQUIRED`
+* :variable:`CMAKE_CXX_EXTENSIONS`
+* :variable:`CMAKE_CUDA_STANDARD`
+* :variable:`CMAKE_CUDA_STANDARD_REQUIRED`
+* :variable:`CMAKE_CUDA_EXTENSIONS`
+
+This policy provides compatibility for projects that do not expect
+the language standard settings to be used automatically.
+
+The ``OLD`` behavior of this policy is to ignore language standard
+setting variables when generating the ``try_compile`` test project.
+The ``NEW`` behavior of this policy is to honor language standard
+setting variables.
+
+This policy was introduced in CMake version 3.8.  Unlike most policies,
+CMake version |release| does *not* warn by default when this policy
+is not set and simply uses ``OLD`` behavior.  See documentation of the
+:variable:`CMAKE_POLICY_WARNING_CMP0067 <CMAKE_POLICY_WARNING_CMP<NNNN>>`
+variable to control the warning.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0068.rst b/share/cmake-3.22/Help/policy/CMP0068.rst
new file mode 100644
index 0000000..5d2a4b1
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0068.rst
@@ -0,0 +1,37 @@
+CMP0068
+-------
+
+.. versionadded:: 3.9
+
+``RPATH`` settings on macOS do not affect ``install_name``.
+
+CMake 3.9 and newer remove any effect the following settings may have on the
+``install_name`` of a target on macOS:
+
+* :prop_tgt:`BUILD_WITH_INSTALL_RPATH` target property
+* :prop_tgt:`SKIP_BUILD_RPATH` target property
+* :variable:`CMAKE_SKIP_RPATH` variable
+* :variable:`CMAKE_SKIP_INSTALL_RPATH` variable
+
+Previously, setting :prop_tgt:`BUILD_WITH_INSTALL_RPATH` had the effect of
+setting both the ``install_name`` of a target to :prop_tgt:`INSTALL_NAME_DIR`
+and the ``RPATH`` to :prop_tgt:`INSTALL_RPATH`.  In CMake 3.9, it only affects
+setting of ``RPATH``.  However, if one wants :prop_tgt:`INSTALL_NAME_DIR` to
+apply to the target in the build tree, one may set
+:prop_tgt:`BUILD_WITH_INSTALL_NAME_DIR`.
+
+If :prop_tgt:`SKIP_BUILD_RPATH`, :variable:`CMAKE_SKIP_RPATH` or
+:variable:`CMAKE_SKIP_INSTALL_RPATH` were used to strip the directory portion
+of the ``install_name`` of a target, one may set ``INSTALL_NAME_DIR=""``
+instead.
+
+The ``OLD`` behavior of this policy is to use the ``RPATH`` settings for
+``install_name`` on macOS.  The ``NEW`` behavior of this policy is to ignore
+the ``RPATH`` settings for ``install_name`` on macOS.
+
+This policy was introduced in CMake version 3.9.  CMake version
+|release| warns when the policy is not set and uses ``OLD`` behavior.
+Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
+explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0069.rst b/share/cmake-3.22/Help/policy/CMP0069.rst
new file mode 100644
index 0000000..eafac45
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0069.rst
@@ -0,0 +1,94 @@
+CMP0069
+-------
+
+.. versionadded:: 3.9
+
+:prop_tgt:`INTERPROCEDURAL_OPTIMIZATION` is enforced when enabled.
+
+CMake 3.9 and newer prefer to add IPO flags whenever the
+:prop_tgt:`INTERPROCEDURAL_OPTIMIZATION` target property is enabled and
+produce an error if flags are not known to CMake for the current compiler.
+Since a given compiler may not support IPO flags in all environments in which
+it is used, it is now the project's responsibility to use the
+:module:`CheckIPOSupported` module to check for support before enabling the
+:prop_tgt:`INTERPROCEDURAL_OPTIMIZATION` target property.  This approach
+allows a project to conditionally activate IPO when supported.  It also
+allows an end user to set the :variable:`CMAKE_INTERPROCEDURAL_OPTIMIZATION`
+variable in an environment known to support IPO even if the project does
+not enable the property.
+
+Since CMake 3.8 and lower only honored :prop_tgt:`INTERPROCEDURAL_OPTIMIZATION`
+for the Intel compiler on Linux, some projects may unconditionally enable the
+target property.  Policy ``CMP0069`` provides compatibility with such projects.
+
+This policy takes effect whenever the IPO property is enabled.  The ``OLD``
+behavior for this policy is to add IPO flags only for Intel compiler on Linux.
+The ``NEW`` behavior for this policy is to add IPO flags for the current
+compiler or produce an error if CMake does not know the flags.
+
+This policy was introduced in CMake version 3.9.  CMake version
+|release| warns when the policy is not set and uses ``OLD`` behavior.
+Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
+explicitly.
+
+.. include:: DEPRECATED.txt
+
+Examples
+^^^^^^^^
+
+Behave like CMake 3.8 and do not apply any IPO flags except for Intel compiler
+on Linux:
+
+.. code-block:: cmake
+
+  cmake_minimum_required(VERSION 3.8)
+  project(foo)
+
+  # ...
+
+  set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
+
+Use the :module:`CheckIPOSupported` module to detect whether IPO is
+supported by the current compiler, environment, and CMake version.
+Produce a fatal error if support is not available:
+
+.. code-block:: cmake
+
+  cmake_minimum_required(VERSION 3.9) # CMP0069 NEW
+  project(foo)
+
+  include(CheckIPOSupported)
+  check_ipo_supported()
+
+  # ...
+
+  set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
+
+Apply IPO flags only if compiler supports it:
+
+.. code-block:: cmake
+
+  cmake_minimum_required(VERSION 3.9) # CMP0069 NEW
+  project(foo)
+
+  include(CheckIPOSupported)
+
+  # ...
+
+  check_ipo_supported(RESULT result)
+  if(result)
+    set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
+  endif()
+
+Apply IPO flags without any checks.  This may lead to build errors if IPO
+is not supported by the compiler in the current environment.  Produce an
+error if CMake does not know IPO flags for the current compiler:
+
+.. code-block:: cmake
+
+  cmake_minimum_required(VERSION 3.9) # CMP0069 NEW
+  project(foo)
+
+  # ...
+
+  set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
diff --git a/share/cmake-3.22/Help/policy/CMP0070.rst b/share/cmake-3.22/Help/policy/CMP0070.rst
new file mode 100644
index 0000000..c880d1f
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0070.rst
@@ -0,0 +1,27 @@
+CMP0070
+-------
+
+.. versionadded:: 3.10
+
+Define :command:`file(GENERATE)` behavior for relative paths.
+
+CMake 3.10 and newer define that relative paths given to ``INPUT`` and
+``OUTPUT`` arguments of ``file(GENERATE)`` are interpreted relative to the
+current source and binary directories, respectively.  CMake 3.9 and lower did
+not define any behavior for relative paths but did not diagnose them either
+and accidentally treated them relative to the process working directory.
+Policy ``CMP0070`` provides compatibility with projects that used the old
+undefined behavior.
+
+This policy affects behavior of relative paths given to ``file(GENERATE)``.
+The ``OLD`` behavior for this policy is to treat the paths relative to the
+working directory of CMake.  The ``NEW`` behavior for this policy is to
+interpret relative paths with respect to the current source or binary
+directory of the caller.
+
+This policy was introduced in CMake version 3.10.  CMake version
+|release| warns when the policy is not set and uses ``OLD`` behavior.
+Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
+explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0071.rst b/share/cmake-3.22/Help/policy/CMP0071.rst
new file mode 100644
index 0000000..700d3b0
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0071.rst
@@ -0,0 +1,44 @@
+CMP0071
+-------
+
+.. versionadded:: 3.10
+
+Let :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC` process
+:prop_sf:`GENERATED` files.
+
+Since version 3.10, CMake processes **regular** and :prop_sf:`GENERATED`
+source files in :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`.
+In earlier CMake versions, only **regular** source files were processed.
+:prop_sf:`GENERATED` source files were ignored silently.
+
+This policy affects how source files that are :prop_sf:`GENERATED`
+get treated in :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`.
+
+The ``OLD`` behavior for this policy is to ignore :prop_sf:`GENERATED`
+source files in :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`.
+
+The ``NEW`` behavior for this policy is to process :prop_sf:`GENERATED`
+source files in :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC` just like regular
+source files.
+
+.. note::
+
+  To silence the ``CMP0071`` warning source files can be excluded from
+  :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC` processing by setting the
+  source file properties :prop_sf:`SKIP_AUTOMOC`, :prop_sf:`SKIP_AUTOUIC` or
+  :prop_sf:`SKIP_AUTOGEN`.
+
+Source skip example::
+
+  # ...
+  set_property(SOURCE /path/to/file1.h PROPERTY SKIP_AUTOMOC ON)
+  set_property(SOURCE /path/to/file2.h PROPERTY SKIP_AUTOUIC ON)
+  set_property(SOURCE /path/to/file3.h PROPERTY SKIP_AUTOGEN ON)
+  # ...
+
+This policy was introduced in CMake version 3.10.  CMake version
+|release| warns when the policy is not set and uses ``OLD`` behavior.
+Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
+explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0072.rst b/share/cmake-3.22/Help/policy/CMP0072.rst
new file mode 100644
index 0000000..1dcdfef
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0072.rst
@@ -0,0 +1,28 @@
+CMP0072
+-------
+
+.. versionadded:: 3.11
+
+:module:`FindOpenGL` prefers GLVND by default when available.
+
+The :module:`FindOpenGL` module provides an ``OpenGL::GL`` target and an
+``OPENGL_LIBRARIES`` variable for projects to use for legacy GL interfaces.
+When both a legacy GL library (e.g. ``libGL.so``) and GLVND libraries
+for OpenGL and GLX (e.g. ``libOpenGL.so`` and ``libGLX.so``) are available,
+the module must choose between them.  It documents an ``OpenGL_GL_PREFERENCE``
+variable that can be used to specify an explicit preference.  When no such
+preference is set, the module must choose a default preference.
+
+CMake 3.11 and above prefer to choose GLVND libraries.  This policy provides
+compatibility with projects that expect the legacy GL library to be used.
+
+The ``OLD`` behavior for this policy is to set ``OpenGL_GL_PREFERENCE`` to
+``LEGACY``.  The ``NEW`` behavior for this policy is to set
+``OpenGL_GL_PREFERENCE`` to ``GLVND``.
+
+This policy was introduced in CMake version 3.11.  CMake version
+|release| warns when the policy is not set and uses ``OLD`` behavior.
+Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
+explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0073.rst b/share/cmake-3.22/Help/policy/CMP0073.rst
new file mode 100644
index 0000000..8f0345c
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0073.rst
@@ -0,0 +1,27 @@
+CMP0073
+-------
+
+.. versionadded:: 3.12
+
+Do not produce legacy ``_LIB_DEPENDS`` cache entries.
+
+Ancient CMake versions once used ``<tgt>_LIB_DEPENDS`` cache entries to
+propagate library link dependencies.  This has long been done by other
+means, leaving the :command:`export_library_dependencies` command as the
+only user of these values.  That command has long been disallowed by
+policy :policy:`CMP0033`, but the ``<tgt>_LIB_DEPENDS`` cache entries
+were left for compatibility with possible non-standard uses by projects.
+
+CMake 3.12 and above now prefer to not produce these cache entries
+at all.  This policy provides compatibility with projects that have
+not been updated to avoid using them.
+
+The ``OLD`` behavior for this policy is to set ``<tgt>_LIB_DEPENDS`` cache
+entries.  The ``NEW`` behavior for this policy is to not set them.
+
+This policy was introduced in CMake version 3.12.  Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+Unlike most policies, CMake version |release| does *not* warn
+when this policy is not set and simply uses ``OLD`` behavior.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0074.rst b/share/cmake-3.22/Help/policy/CMP0074.rst
new file mode 100644
index 0000000..863bbb2
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0074.rst
@@ -0,0 +1,25 @@
+CMP0074
+-------
+
+.. versionadded:: 3.12
+
+:command:`find_package` uses ``<PackageName>_ROOT`` variables.
+
+In CMake 3.12 and above the :command:`find_package(<PackageName>)` command now
+searches prefixes specified by the :variable:`<PackageName>_ROOT` CMake
+variable and the :envvar:`<PackageName>_ROOT` environment variable.
+Package roots are maintained as a stack so nested calls to all ``find_*``
+commands inside find modules and config packages also search the roots as
+prefixes.  This policy provides compatibility with projects that have not been
+updated to avoid using ``<PackageName>_ROOT`` variables for other purposes.
+
+The ``OLD`` behavior for this policy is to ignore ``<PackageName>_ROOT``
+variables.  The ``NEW`` behavior for this policy is to use
+``<PackageName>_ROOT`` variables.
+
+This policy was introduced in CMake version 3.12.  CMake version
+|release| warns when the policy is not set and uses ``OLD`` behavior.
+Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
+explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0075.rst b/share/cmake-3.22/Help/policy/CMP0075.rst
new file mode 100644
index 0000000..4213782
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0075.rst
@@ -0,0 +1,28 @@
+CMP0075
+-------
+
+.. versionadded:: 3.12
+
+Include file check macros honor ``CMAKE_REQUIRED_LIBRARIES``.
+
+In CMake 3.12 and above, the
+
+* ``check_include_file`` macro in the :module:`CheckIncludeFile` module, the
+* ``check_include_file_cxx`` macro in the
+  :module:`CheckIncludeFileCXX` module, and the
+* ``check_include_files`` macro in the :module:`CheckIncludeFiles` module
+
+now prefer to link the check executable to the libraries listed in the
+``CMAKE_REQUIRED_LIBRARIES`` variable.  This policy provides compatibility
+with projects that have not been updated to expect this behavior.
+
+The ``OLD`` behavior for this policy is to ignore ``CMAKE_REQUIRED_LIBRARIES``
+in the include file check macros.  The ``NEW`` behavior of this policy is to
+honor ``CMAKE_REQUIRED_LIBRARIES`` in the include file check macros.
+
+This policy was introduced in CMake version 3.12.  CMake version
+|release| warns when the policy is not set and uses ``OLD`` behavior.
+Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
+explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0076.rst b/share/cmake-3.22/Help/policy/CMP0076.rst
new file mode 100644
index 0000000..edca742
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0076.rst
@@ -0,0 +1,28 @@
+CMP0076
+-------
+
+.. versionadded:: 3.13
+
+The :command:`target_sources` command converts relative paths to absolute.
+
+In CMake 3.13 and above, the :command:`target_sources` command now converts
+relative source file paths to absolute paths in the following cases:
+
+* Source files are added to the target's :prop_tgt:`INTERFACE_SOURCES`
+  property.
+* The target's :prop_tgt:`SOURCE_DIR` property differs from
+  :variable:`CMAKE_CURRENT_SOURCE_DIR`.
+
+A path that begins with a generator expression is always left unmodified.
+
+This policy provides compatibility with projects that have not been updated
+to expect this behavior.  The ``OLD`` behavior for this policy is to leave
+all relative source file paths unmodified.  The ``NEW`` behavior of this
+policy is to convert relative paths to absolute according to above rules.
+
+This policy was introduced in CMake version 3.13.  CMake version
+|release| warns when the policy is not set and uses ``OLD`` behavior.
+Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
+explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0077.rst b/share/cmake-3.22/Help/policy/CMP0077.rst
new file mode 100644
index 0000000..482125a
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0077.rst
@@ -0,0 +1,60 @@
+CMP0077
+-------
+
+.. versionadded:: 3.13
+
+:command:`option` honors normal variables.
+
+The :command:`option` command is typically used to create a cache entry
+to allow users to set the option.  However, there are cases in which a
+normal (non-cached) variable of the same name as the option may be
+defined by the project prior to calling the :command:`option` command.
+For example, a project that embeds another project as a subdirectory
+may want to hard-code options of the subproject to build the way it needs.
+
+For historical reasons in CMake 3.12 and below the :command:`option`
+command *removes* a normal (non-cached) variable of the same name when:
+
+* a cache entry of the specified name does not exist at all, or
+* a cache entry of the specified name exists but has not been given
+  a type (e.g. via ``-D<name>=ON`` on the command line).
+
+In both of these cases (typically on the first run in a new build tree),
+the :command:`option` command gives the cache entry type ``BOOL`` and
+removes any normal (non-cached) variable of the same name.  In the
+remaining case that the cache entry of the specified name already
+exists and has a type (typically on later runs in a build tree), the
+:command:`option` command changes nothing and any normal variable of
+the same name remains set.
+
+In CMake 3.13 and above the :command:`option` command prefers to
+do nothing when a normal variable of the given name already exists.
+It does not create or update a cache entry or remove the normal variable.
+The new behavior is consistent between the first and later runs in a
+build tree.  This policy provides compatibility with projects that have
+not been updated to expect the new behavior.
+
+When the :command:`option` command sees a normal variable of the given
+name:
+
+* The ``OLD`` behavior for this policy is to proceed even when a normal
+  variable of the same name exists.  If the cache entry does not already
+  exist and have a type then it is created and/or given a type and the
+  normal variable is removed.
+
+* The ``NEW`` behavior for this policy is to do nothing when a normal
+  variable of the same name exists.  The normal variable is not removed.
+  The cache entry is not created or updated and is ignored if it exists.
+
+See :policy:`CMP0126` for a similar policy for the :command:`set(CACHE)`
+command, but note that there are some differences in ``NEW`` behavior
+between the two policies.
+
+This policy was introduced in CMake version 3.13.  CMake version
+|release| warns when the policy is not set and uses ``OLD`` behavior.
+Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
+explicitly within a project.  Use the :variable:`CMAKE_POLICY_DEFAULT_CMP0077
+<CMAKE_POLICY_DEFAULT_CMP\<NNNN\>>` variable to set the policy for
+a third-party project in a subdirectory without modifying it.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0078.rst b/share/cmake-3.22/Help/policy/CMP0078.rst
new file mode 100644
index 0000000..89fdb0b
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0078.rst
@@ -0,0 +1,26 @@
+CMP0078
+-------
+
+.. versionadded:: 3.13
+
+:module:`UseSWIG` generates standard target names.
+
+Starting with CMake 3.13, :module:`UseSWIG` generates now standard target
+names. This policy provides compatibility with projects that expect the legacy
+behavior.
+
+The ``OLD`` behavior for this policy relies on
+``UseSWIG_TARGET_NAME_PREFERENCE`` variable that can be used to specify an
+explicit preference.  The value may be one of:
+
+* ``LEGACY``: legacy strategy is applied. Variable
+  ``SWIG_MODULE_<name>_REAL_NAME`` must be used to get real target name.
+  This is the default if not specified.
+* ``STANDARD``: target name matches specified name.
+
+This policy was introduced in CMake version 3.13.  CMake version
+|release| warns when the policy is not set and uses ``OLD`` behavior.
+Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
+explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0079.rst b/share/cmake-3.22/Help/policy/CMP0079.rst
new file mode 100644
index 0000000..01aa08d
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0079.rst
@@ -0,0 +1,42 @@
+CMP0079
+-------
+
+.. versionadded:: 3.13
+
+:command:`target_link_libraries` allows use with targets in other directories.
+
+Prior to CMake 3.13 the :command:`target_link_libraries` command did not
+accept targets not created in the calling directory as its first argument
+for calls that update the :prop_tgt:`LINK_LIBRARIES` of the target itself.
+It did accidentally accept targets from other directories on calls that
+only update the :prop_tgt:`INTERFACE_LINK_LIBRARIES`, but would simply
+add entries to the property as if the call were made in the original
+directory.  Thus link interface libraries specified this way were always
+looked up by generators in the scope of the original target rather than
+in the scope that called :command:`target_link_libraries`.
+
+CMake 3.13 now allows the :command:`target_link_libraries` command to
+be called from any directory to add link dependencies and link interface
+libraries to targets created in other directories.  The entries are added
+to :prop_tgt:`LINK_LIBRARIES` and :prop_tgt:`INTERFACE_LINK_LIBRARIES`
+using a special (internal) suffix to tell the generators to look up the
+names in the calling scope rather than the scope that created the target.
+
+This policy provides compatibility with projects that already use
+:command:`target_link_libraries` with the ``INTERFACE`` keyword
+on a target in another directory to add :prop_tgt:`INTERFACE_LINK_LIBRARIES`
+entries to be looked up in the target's directory.  Such projects should
+be updated to be aware of the new scoping rules in that case.
+
+The ``OLD`` behavior of this policy is to disallow
+:command:`target_link_libraries` calls naming targets from another directory
+except in the previously accidentally allowed case of using the ``INTERFACE``
+keyword only.  The ``NEW`` behavior of this policy is to allow all such
+calls but use the new scoping rules.
+
+This policy was introduced in CMake version 3.13.  CMake version
+|release| warns when the policy is not set and uses ``OLD`` behavior.
+Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
+explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0080.rst b/share/cmake-3.22/Help/policy/CMP0080.rst
new file mode 100644
index 0000000..789efea
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0080.rst
@@ -0,0 +1,27 @@
+CMP0080
+-------
+
+.. versionadded:: 3.13
+
+:module:`BundleUtilities` cannot be included at configure time.
+
+The macros provided by :module:`BundleUtilities` are intended to be invoked
+at install time rather than at configure time, because they depend on the
+listed targets already existing at the time they are invoked. If they are
+invoked at configure time, the targets haven't been built yet, and the
+commands will fail.
+
+This policy restricts the inclusion of :module:`BundleUtilities` to
+``cmake -P`` style scripts and install rules. Specifically, it looks for the
+presence of :variable:`CMAKE_GENERATOR` and throws a fatal error if it exists.
+
+The ``OLD`` behavior of this policy is to allow :module:`BundleUtilities` to
+be included at configure time. The ``NEW`` behavior of this policy is to
+disallow such inclusion.
+
+This policy was introduced in CMake version 3.13.  CMake version
+|release| warns when the policy is not set and uses ``OLD`` behavior.
+Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
+explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0081.rst b/share/cmake-3.22/Help/policy/CMP0081.rst
new file mode 100644
index 0000000..d1573dd
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0081.rst
@@ -0,0 +1,24 @@
+CMP0081
+-------
+
+.. versionadded:: 3.13
+
+Relative paths not allowed in :prop_tgt:`LINK_DIRECTORIES` target property.
+
+CMake 3.12 and lower allowed the :prop_dir:`LINK_DIRECTORIES` directory
+property to contain relative paths.  The base path for such relative
+entries is not well defined.  CMake 3.13 and later will issue a
+``FATAL_ERROR`` if the :prop_tgt:`LINK_DIRECTORIES` target property
+(which is initialized by the :prop_dir:`LINK_DIRECTORIES` directory property)
+contains a relative path.
+
+The ``OLD`` behavior for this policy is not to warn about relative paths
+in the :prop_tgt:`LINK_DIRECTORIES` target property.  The ``NEW`` behavior for
+this policy is to issue a ``FATAL_ERROR`` if :prop_tgt:`LINK_DIRECTORIES`
+contains a relative path.
+
+This policy was introduced in CMake version 3.13.  CMake version
+|release| warns when the policy is not set and uses ``OLD`` behavior.  Use
+the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0082.rst b/share/cmake-3.22/Help/policy/CMP0082.rst
new file mode 100644
index 0000000..25c9580
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0082.rst
@@ -0,0 +1,28 @@
+CMP0082
+-------
+
+.. versionadded:: 3.14
+
+Install rules from :command:`add_subdirectory` calls are interleaved with
+those in caller.
+
+CMake 3.13 and lower ran the install rules from :command:`add_subdirectory`
+after all other install rules, even if :command:`add_subdirectory` was called
+before the other install rules.  CMake 3.14 and above prefer to interleave
+these :command:`add_subdirectory` install rules with the others so that
+they are run in the order they are declared.  This policy provides
+compatibility for projects that have not been updated to expect the
+new behavior.
+
+The ``OLD`` behavior for this policy is to run the install rules from
+:command:`add_subdirectory` after the other install rules.  The ``NEW``
+behavior for this policy is to run all install rules in the order they are
+declared.
+
+This policy was introduced in CMake version 3.14.  Unlike most policies,
+CMake version |release| does *not* warn by default when this policy
+is not set and simply uses ``OLD`` behavior.  See documentation of the
+:variable:`CMAKE_POLICY_WARNING_CMP0082 <CMAKE_POLICY_WARNING_CMP<NNNN>>`
+variable to control the warning.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0083.rst b/share/cmake-3.22/Help/policy/CMP0083.rst
new file mode 100644
index 0000000..7518ee3
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0083.rst
@@ -0,0 +1,71 @@
+CMP0083
+-------
+
+.. versionadded:: 3.14
+
+To control generation of Position Independent Executable (``PIE``) or not, some
+flags are required at link time.
+
+CMake 3.13 and lower did not add these link flags when
+:prop_tgt:`POSITION_INDEPENDENT_CODE` is set.
+
+The ``OLD`` behavior for this policy is to not manage ``PIE`` link flags. The
+``NEW`` behavior is to add link flags if :prop_tgt:`POSITION_INDEPENDENT_CODE`
+is set:
+
+* Set to ``TRUE``: flags to produce a position independent executable are
+  passed to the linker step. For example ``-pie`` for ``GCC``.
+* Set to ``FALSE``: flags not to produce a position independent executable are
+  passed to the linker step. For example ``-no-pie`` for ``GCC``.
+* Not set: no flags are passed to the linker step.
+
+Since a given linker may not support ``PIE`` flags in all environments in
+which it is used, it is the project's responsibility to use the
+:module:`CheckPIESupported` module to check for support to ensure that the
+:prop_tgt:`POSITION_INDEPENDENT_CODE` target property for executables will be
+honored at link time.
+
+This policy was introduced in CMake version 3.14. Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+Unlike most policies, CMake version |release| does not warn when this policy is
+not set and simply uses ``OLD`` behavior.
+
+.. Note::
+
+   Android platform has a special handling of ``PIE`` so it is not required
+   to use the :module:`CheckPIESupported` module to ensure flags are passed to
+   the linker.
+
+.. include:: DEPRECATED.txt
+
+Examples
+^^^^^^^^
+
+Behave like CMake 3.13 and do not apply any ``PIE`` flags at link stage.
+
+.. code-block:: cmake
+
+  cmake_minimum_required(VERSION 3.13)
+  project(foo)
+
+  # ...
+
+  add_executable(foo ...)
+  set_property(TARGET foo PROPERTY POSITION_INDEPENDENT_CODE TRUE)
+
+Use the :module:`CheckPIESupported` module to detect whether ``PIE`` is
+supported by the current linker and environment.  Apply ``PIE`` flags only
+if the linker supports them.
+
+.. code-block:: cmake
+
+  cmake_minimum_required(VERSION 3.14) # CMP0083 NEW
+  project(foo)
+
+  include(CheckPIESupported)
+  check_pie_supported()
+
+  # ...
+
+  add_executable(foo ...)
+  set_property(TARGET foo PROPERTY POSITION_INDEPENDENT_CODE TRUE)
diff --git a/share/cmake-3.22/Help/policy/CMP0084.rst b/share/cmake-3.22/Help/policy/CMP0084.rst
new file mode 100644
index 0000000..9547701
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0084.rst
@@ -0,0 +1,28 @@
+CMP0084
+-------
+
+.. versionadded:: 3.14
+
+The :module:`FindQt` module does not exist for :command:`find_package`.
+
+The existence of :module:`FindQt` means that for Qt upstream to provide
+package config files that can be found by ``find_package(Qt)``, the consuming
+project has to explicitly specify ``find_package(Qt CONFIG)``. Removing this
+module gives Qt a path forward for exporting its own config files which can
+easily be found by consuming projects.
+
+This policy pretends that CMake's internal :module:`FindQt` module does not
+exist for :command:`find_package`. If a project really wants to use Qt 3 or 4,
+it can call ``find_package(Qt[34])``, ``include(FindQt)``, or add
+:module:`FindQt` to their :variable:`CMAKE_MODULE_PATH`.
+
+The ``OLD`` behavior of this policy is for :module:`FindQt` to exist for
+:command:`find_package`. The ``NEW`` behavior is to pretend that it doesn't
+exist for :command:`find_package`.
+
+This policy was introduced in CMake version 3.14.  CMake version
+|release| warns when the policy is not set and uses ``OLD`` behavior.
+Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
+explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0085.rst b/share/cmake-3.22/Help/policy/CMP0085.rst
new file mode 100644
index 0000000..d90c72f
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0085.rst
@@ -0,0 +1,23 @@
+CMP0085
+-------
+
+.. versionadded:: 3.14
+
+``$<IN_LIST:...>`` handles empty list items.
+
+In CMake 3.13 and lower, the ``$<IN_LIST:...>`` generator expression always
+returned ``0`` if the first argument was empty, even if the list contained an
+empty item. This behavior is inconsistent with the ``IN_LIST`` behavior of
+:command:`if`, which this generator expression is meant to emulate. CMake 3.14
+and later handles this case correctly.
+
+The ``OLD`` behavior of this policy is for ``$<IN_LIST:...>`` to always return
+``0`` if the first argument is empty. The ``NEW`` behavior is to return ``1``
+if the first argument is empty and the list contains an empty item.
+
+This policy was introduced in CMake version 3.14.  CMake version
+|release| warns when the policy is not set and uses ``OLD`` behavior.
+Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
+explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0086.rst b/share/cmake-3.22/Help/policy/CMP0086.rst
new file mode 100644
index 0000000..725b502
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0086.rst
@@ -0,0 +1,22 @@
+CMP0086
+-------
+
+.. versionadded:: 3.14
+
+:module:`UseSWIG` honors ``SWIG_MODULE_NAME`` via ``-module`` flag.
+
+Starting with CMake 3.14, :module:`UseSWIG` passes option
+``-module <module_name>`` to ``SWIG`` compiler if the file property
+``SWIG_MODULE_NAME`` is specified. This policy provides compatibility with
+projects that expect the legacy behavior.
+
+The ``OLD`` behavior for this policy is to never pass ``-module`` option.
+The ``NEW`` behavior is to pass ``-module`` option to ``SWIG`` compiler if
+``SWIG_MODULE_NAME`` is specified.
+
+This policy was introduced in CMake version 3.14.  CMake version
+|release| warns when the policy is not set and uses ``OLD`` behavior.
+Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
+explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0087.rst b/share/cmake-3.22/Help/policy/CMP0087.rst
new file mode 100644
index 0000000..4a65506
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0087.rst
@@ -0,0 +1,31 @@
+CMP0087
+-------
+
+.. versionadded:: 3.14
+
+:command:`install(CODE)` and :command:`install(SCRIPT)` support generator
+expressions.
+
+In CMake 3.13 and earlier, :command:`install(CODE)` and
+:command:`install(SCRIPT)` did not evaluate generator expressions.  CMake 3.14
+and later will evaluate generator expressions for :command:`install(CODE)` and
+:command:`install(SCRIPT)`.
+
+The ``OLD`` behavior of this policy is for :command:`install(CODE)` and
+:command:`install(SCRIPT)` to not evaluate generator expressions.  The ``NEW``
+behavior is to evaluate generator expressions for :command:`install(CODE)` and
+:command:`install(SCRIPT)`.
+
+Note that it is the value of this policy setting at the end of the directory
+scope that is important, not its setting at the time of the call to
+:command:`install(CODE)` or :command:`install(SCRIPT)`.  This has implications
+for calling these commands from places that have their own policy scope but not
+their own directory scope (e.g. from files brought in via :command:`include()`
+rather than :command:`add_subdirectory()`).
+
+This policy was introduced in CMake version 3.14.  CMake version
+|release| warns when the policy is not set and uses ``OLD`` behavior.
+Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
+explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0088.rst b/share/cmake-3.22/Help/policy/CMP0088.rst
new file mode 100644
index 0000000..1840a58
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0088.rst
@@ -0,0 +1,31 @@
+CMP0088
+-------
+
+.. versionadded:: 3.14
+
+:module:`FindBISON` runs bison in :variable:`CMAKE_CURRENT_BINARY_DIR`
+when executing.
+
+The module provides a ``BISON_TARGET`` macro which generates BISON output.
+In CMake 3.13 and below the macro would generate a custom command that runs
+``bison`` in the source directory.  CMake 3.14 and later prefer to run it
+in the build directory and use :variable:`CMAKE_CURRENT_BINARY_DIR` as the
+``WORKING_DIRECTORY`` of its :command:`add_custom_command` invocation.
+This ensures that any implicitly generated file is written to the build
+tree rather than the source.
+
+This policy provides compatibility for projects that have not been updated
+to expect the new behavior.
+
+The ``OLD`` behavior for this policy is for ``BISON_TARGET`` to use
+the current source directory for the ``WORKING_DIRECTORY`` and where
+to generate implicit files. The ``NEW`` behavior of this policy is to
+use the current binary directory for the ``WORKING_DIRECTORY`` and where
+to generate implicit files.
+
+This policy was introduced in CMake version 3.14.  Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+Unlike most policies, CMake version |release| does *not* warn
+when this policy is not set and simply uses ``OLD`` behavior.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0089.rst b/share/cmake-3.22/Help/policy/CMP0089.rst
new file mode 100644
index 0000000..e3fc77a
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0089.rst
@@ -0,0 +1,32 @@
+CMP0089
+-------
+
+.. versionadded:: 3.15
+
+Compiler id for IBM Clang-based XL compilers is now ``XLClang``.
+
+CMake 3.15 and above recognize that IBM's Clang-based XL compilers
+that define ``__ibmxl__`` are a new front-end distinct from ``xlc``
+with a different command line and set of capabilities.
+CMake now prefers to present this to projects by setting the
+:variable:`CMAKE_<LANG>_COMPILER_ID` variable to ``XLClang`` instead
+of ``XL``.  However, existing projects may assume the compiler id for
+Clang-based XL is just ``XL`` as it was in CMake versions prior to 3.15.
+Therefore this policy determines for Clang-based XL compilers which
+compiler id to report in the :variable:`CMAKE_<LANG>_COMPILER_ID`
+variable after language ``<LANG>`` is enabled by the :command:`project`
+or :command:`enable_language` command.  The policy must be set prior
+to the invocation of either command.
+
+The ``OLD`` behavior for this policy is to use compiler id ``XL``.  The
+``NEW`` behavior for this policy is to use compiler id ``XLClang``.
+
+This policy was introduced in CMake version 3.15.  Use the
+:command:`cmake_policy` command to set this policy to ``OLD`` or ``NEW`` explicitly.
+Unlike most policies, CMake version |release| does *not* warn
+by default when this policy is not set and simply uses ``OLD`` behavior.
+See documentation of the
+:variable:`CMAKE_POLICY_WARNING_CMP0089 <CMAKE_POLICY_WARNING_CMP<NNNN>>`
+variable to control the warning.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0090.rst b/share/cmake-3.22/Help/policy/CMP0090.rst
new file mode 100644
index 0000000..58dd999
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0090.rst
@@ -0,0 +1,29 @@
+CMP0090
+-------
+
+.. versionadded:: 3.15
+
+:command:`export(PACKAGE)` does not populate package registry by default.
+
+In CMake 3.14 and below the :command:`export(PACKAGE)` command populated the
+user package registry by default and users needed to set the
+:variable:`CMAKE_EXPORT_NO_PACKAGE_REGISTRY` to disable it, e.g. in automated
+build and packaging environments.  Since the user package registry is stored
+outside the build tree, this side effect should not be enabled by default.
+Therefore CMake 3.15 and above prefer that :command:`export(PACKAGE)` does
+nothing unless an explicit :variable:`CMAKE_EXPORT_PACKAGE_REGISTRY` variable
+is set to enable it.  This policy provides compatibility with projects that
+have not been updated.
+
+The ``OLD`` behavior for this policy is for :command:`export(PACKAGE)` command
+to populate the user package registry unless
+:variable:`CMAKE_EXPORT_NO_PACKAGE_REGISTRY` is enabled.
+The ``NEW`` behavior is for :command:`export(PACKAGE)` command to do nothing
+unless the :variable:`CMAKE_EXPORT_PACKAGE_REGISTRY` is enabled.
+
+This policy was introduced in CMake version 3.15.  Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+Unlike most policies, CMake version |release| does *not* warn
+when this policy is not set and simply uses ``OLD`` behavior.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0091.rst b/share/cmake-3.22/Help/policy/CMP0091.rst
new file mode 100644
index 0000000..ffc0ade
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0091.rst
@@ -0,0 +1,51 @@
+CMP0091
+-------
+
+.. versionadded:: 3.15
+
+MSVC runtime library flags are selected by an abstraction.
+
+Compilers targeting the MSVC ABI have flags to select the MSVC runtime library.
+Runtime library selection typically varies with build configuration because
+there is a separate runtime library for Debug builds.
+
+In CMake 3.14 and below, MSVC runtime library selection flags are added to
+the default :variable:`CMAKE_<LANG>_FLAGS_<CONFIG>` cache entries by CMake
+automatically.  This allows users to edit their cache entries to adjust the
+flags.  However, the presence of such default flags is problematic for
+projects that want to choose a different runtime library programmatically.
+In particular, it requires string editing of the
+:variable:`CMAKE_<LANG>_FLAGS_<CONFIG>` variables with knowledge of the
+CMake builtin defaults so they can be replaced.
+
+CMake 3.15 and above prefer to leave the MSVC runtime library selection flags
+out of the default :variable:`CMAKE_<LANG>_FLAGS_<CONFIG>` values and instead
+offer a first-class abstraction.  The :variable:`CMAKE_MSVC_RUNTIME_LIBRARY`
+variable and :prop_tgt:`MSVC_RUNTIME_LIBRARY` target property may be set to
+select the MSVC runtime library.  If they are not set then CMake uses the
+default value ``MultiThreaded$<$<CONFIG:Debug>:Debug>DLL`` which is
+equivalent to the original flags.
+
+This policy provides compatibility with projects that have not been updated
+to be aware of the abstraction.  The policy setting takes effect as of the
+first :command:`project` or :command:`enable_language` command that enables
+a language whose compiler targets the MSVC ABI.
+
+.. note::
+
+  Once the policy has taken effect at the top of a project, that choice
+  must be used throughout the tree.  In projects that have nested projects
+  in subdirectories, be sure to convert everything together.
+
+The ``OLD`` behavior for this policy is to place MSVC runtime library
+flags in the default :variable:`CMAKE_<LANG>_FLAGS_<CONFIG>` cache
+entries and ignore the :variable:`CMAKE_MSVC_RUNTIME_LIBRARY` abstraction.
+The ``NEW`` behavior for this policy is to *not* place MSVC runtime
+library flags in the default cache entries and use the abstraction instead.
+
+This policy was introduced in CMake version 3.15.  Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+Unlike many policies, CMake version |release| does *not* warn
+when this policy is not set and simply uses ``OLD`` behavior.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0092.rst b/share/cmake-3.22/Help/policy/CMP0092.rst
new file mode 100644
index 0000000..2f39830
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0092.rst
@@ -0,0 +1,40 @@
+CMP0092
+-------
+
+.. versionadded:: 3.15
+
+MSVC warning flags are not in :variable:`CMAKE_<LANG>_FLAGS` by default.
+
+When using MSVC-like compilers in CMake 3.14 and below, warning flags
+like ``/W3`` are added to :variable:`CMAKE_<LANG>_FLAGS` by default.
+This is problematic for projects that want to choose a different warning
+level programmatically.  In particular, it requires string editing of the
+:variable:`CMAKE_<LANG>_FLAGS` variables with knowledge of the
+CMake builtin defaults so they can be replaced.
+
+CMake 3.15 and above prefer to leave out warning flags from the value of
+:variable:`CMAKE_<LANG>_FLAGS` by default.
+
+This policy provides compatibility with projects that have not been updated
+to expect the lack of warning flags.  The policy setting takes effect as of
+the first :command:`project` or :command:`enable_language` command that
+initializes :variable:`CMAKE_<LANG>_FLAGS` for a given language ``<LANG>``.
+
+.. note::
+
+  Once the policy has taken effect at the top of a project for a given
+  language, that choice must be used throughout the tree for that language.
+  In projects that have nested projects in subdirectories, be sure to
+  convert everything together.
+
+The ``OLD`` behavior for this policy is to place MSVC warning flags in the
+default :variable:`CMAKE_<LANG>_FLAGS` cache entries.  The ``NEW`` behavior
+for this policy is to *not* place MSVC warning flags in the default cache
+entries.
+
+This policy was introduced in CMake version 3.15.  Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+Unlike many policies, CMake version |release| does *not* warn
+when this policy is not set and simply uses ``OLD`` behavior.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0093.rst b/share/cmake-3.22/Help/policy/CMP0093.rst
new file mode 100644
index 0000000..4a9955f
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0093.rst
@@ -0,0 +1,26 @@
+CMP0093
+-------
+
+.. versionadded:: 3.15
+
+:module:`FindBoost` reports ``Boost_VERSION`` in ``x.y.z`` format.
+
+In CMake 3.14 and below the module would report the Boost version
+number as specified in the preprocessor definition ``BOOST_VERSION`` in
+the ``boost/version.hpp`` file. In CMake 3.15 and later it is preferred
+that the reported version number matches the ``x.y.z`` format reported
+by the CMake package shipped with Boost ``1.70.0`` and later. The macro
+value is still reported in the ``Boost_VERSION_MACRO`` variable.
+
+The ``OLD`` behavior for this policy is for :module:`FindBoost` to report
+``Boost_VERSION`` as specified in the preprocessor definition
+``BOOST_VERSION`` in ``boost/version.hpp``. The ``NEW`` behavior for this
+policy is for :module:`FindBoost` to report ``Boost_VERSION`` in
+``x.y.z`` format.
+
+This policy was introduced in CMake version 3.15.  Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+Unlike many policies, CMake version |release| does *not* warn
+when this policy is not set and simply uses the ``OLD`` behavior.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0094.rst b/share/cmake-3.22/Help/policy/CMP0094.rst
new file mode 100644
index 0000000..1b57658
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0094.rst
@@ -0,0 +1,24 @@
+CMP0094
+-------
+
+.. versionadded:: 3.15
+
+Modules :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
+use ``LOCATION`` for lookup strategy.
+
+Starting with CMake 3.15, Modules :module:`FindPython3`, :module:`FindPython2`
+and :module:`FindPython` set value ``LOCATION`` for, respectively, variables
+``Python3_FIND_STRATEGY``, ``Python2_FIND_STRATEGY`` and
+``Python_FIND_STRATEGY``. This policy provides compatibility with projects that
+expect the legacy behavior.
+
+The ``OLD`` behavior for this policy set value ``VERSION`` for variables
+``Python3_FIND_STRATEGY``, ``Python2_FIND_STRATEGY`` and
+``Python_FIND_STRATEGY``.
+
+This policy was introduced in CMake version 3.15.  Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+Unlike many policies, CMake version |release| does *not* warn
+when this policy is not set and simply uses the ``OLD`` behavior.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0095.rst b/share/cmake-3.22/Help/policy/CMP0095.rst
new file mode 100644
index 0000000..ebdbab6
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0095.rst
@@ -0,0 +1,32 @@
+CMP0095
+-------
+
+.. versionadded:: 3.16
+
+``RPATH`` entries are properly escaped in the intermediary CMake install script.
+
+In CMake 3.15 and earlier, ``RPATH`` entries set via
+:variable:`CMAKE_INSTALL_RPATH` or via :prop_tgt:`INSTALL_RPATH` have not been
+escaped before being inserted into the ``cmake_install.cmake`` script. Dynamic
+linkers on ELF-based systems (e.g. Linux and FreeBSD) allow certain keywords in
+``RPATH`` entries, such as ``${ORIGIN}`` (More details are available in the
+``ld.so`` man pages on those systems). The syntax of these keywords can match
+CMake's variable syntax. In order to not be substituted (usually to an empty
+string) already by the intermediary ``cmake_install.cmake`` script, the user had
+to double-escape such ``RPATH`` keywords, e.g.
+``set(CMAKE_INSTALL_RPATH "\\\${ORIGIN}/../lib")``. Since the intermediary
+``cmake_install.cmake`` script is an implementation detail of CMake, CMake 3.16
+and later will make sure ``RPATH`` entries are inserted literally by escaping
+any coincidental CMake syntax.
+
+The ``OLD`` behavior of this policy is to not escape ``RPATH`` entries in the
+intermediary ``cmake_install.cmake`` script. The ``NEW`` behavior is to properly
+escape coincidental CMake syntax in ``RPATH`` entries when generating the
+intermediary ``cmake_install.cmake`` script.
+
+This policy was introduced in CMake version 3.16. CMake version |release| warns
+when the policy is not set and detected usage of CMake-like syntax and uses
+``OLD`` behavior. Use the :command:`cmake_policy` command to set it to ``OLD``
+or ``NEW`` explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0096.rst b/share/cmake-3.22/Help/policy/CMP0096.rst
new file mode 100644
index 0000000..8fd6f72
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0096.rst
@@ -0,0 +1,27 @@
+CMP0096
+-------
+
+.. versionadded:: 3.16
+
+The :command:`project` command preserves leading zeros in version components.
+
+When a ``VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]`` argument is given
+to the :command:`project` command, it stores the version string in the
+``PROJECT_VERSION`` variable and stores individual integer version components
+in ``PROJECT_VERSION_{MAJOR,MINOR,PATCH,TWEAK}`` variables (see policy
+:policy:`CMP0048`).  CMake 3.15 and below dropped leading zeros from each
+component.  CMake 3.16 and higher prefer to preserve leading zeros.  This
+policy provides compatibility for projects that have not been updated to
+expect the new behavior.
+
+The ``OLD`` behavior of this policy drops leading zeros in all components,
+e.g.  such that version ``1.07.06`` becomes ``1.7.6``.  The ``NEW`` behavior
+of this policy preserves the leading zeros in all components, such that
+version ``1.07.06`` remains unchanged.
+
+This policy was introduced in CMake version 3.16.  Unlike many policies, CMake
+version |release| does *not* warn when this policy is not set and simply uses
+the ``OLD`` behavior.  Use the :command:`cmake_policy` command to set it to
+``OLD`` or ``NEW`` explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0097.rst b/share/cmake-3.22/Help/policy/CMP0097.rst
new file mode 100644
index 0000000..2240874
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0097.rst
@@ -0,0 +1,25 @@
+CMP0097
+-------
+
+.. versionadded:: 3.16
+
+:command:`ExternalProject_Add` with ``GIT_SUBMODULES ""`` initializes no
+submodules.
+
+The module provides a ``GIT_SUBMODULES`` option which controls what submodules
+to initialize and update. Starting with CMake 3.16, explicitly setting
+``GIT_SUBMODULES`` to an empty string means no submodules will be initialized
+or updated.
+
+This policy provides compatibility for projects that have not been updated
+to expect the new behavior.
+
+The ``OLD`` behavior for this policy is for ``GIT_SUBMODULES`` when set to
+an empty string to initialize and update all git submodules.
+The ``NEW`` behavior for this policy is for ``GIT_SUBMODULES`` when set to
+an empty string to initialize and update no git submodules.
+
+This policy was introduced in CMake version 3.16.  Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+Unlike most policies, CMake version |release| does *not* warn
+when this policy is not set and simply uses ``OLD`` behavior.
diff --git a/share/cmake-3.22/Help/policy/CMP0098.rst b/share/cmake-3.22/Help/policy/CMP0098.rst
new file mode 100644
index 0000000..e793380
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0098.rst
@@ -0,0 +1,32 @@
+CMP0098
+-------
+
+.. versionadded:: 3.17
+
+:module:`FindFLEX` runs ``flex`` in directory
+:variable:`CMAKE_CURRENT_BINARY_DIR` when executing.
+
+The module provides a ``FLEX_TARGET`` macro which generates FLEX output.
+In CMake 3.16 and below the macro would generate a custom command that runs
+``flex`` in the current source directory.  CMake 3.17 and later prefer to
+run it in the build directory and use :variable:`CMAKE_CURRENT_BINARY_DIR`
+as the ``WORKING_DIRECTORY`` of its :command:`add_custom_command` invocation.
+This ensures that any implicitly generated file is written relative to the
+build tree rather than the source tree, unless the generated file is
+provided as absolute path.
+
+This policy provides compatibility for projects that have not been updated
+to expect the new behavior.
+
+The ``OLD`` behavior for this policy is for ``FLEX_TARGET`` to use
+the current source directory for the ``WORKING_DIRECTORY`` and where
+to generate implicit files. The ``NEW`` behavior of this policy is to
+use the current binary directory for the ``WORKING_DIRECTORY`` relative to
+which implicit files are generated unless provided as absolute path.
+
+This policy was introduced in CMake version 3.17.  Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+Unlike many policies, CMake version |release| does *not* warn
+when this policy is not set and simply uses ``OLD`` behavior.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0099.rst b/share/cmake-3.22/Help/policy/CMP0099.rst
new file mode 100644
index 0000000..0c64949
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0099.rst
@@ -0,0 +1,26 @@
+CMP0099
+-------
+
+.. versionadded:: 3.17
+
+Target link properties :prop_tgt:`INTERFACE_LINK_OPTIONS`,
+:prop_tgt:`INTERFACE_LINK_DIRECTORIES` and :prop_tgt:`INTERFACE_LINK_DEPENDS`
+are now transitive over private dependencies of static libraries.
+
+In CMake 3.16 and below the interface link properties attached to libraries
+are not propagated for private dependencies of static libraries.
+Only the libraries themselves are propagated to link the dependent binary.
+CMake 3.17 and later prefer to propagate all interface link properties.
+This policy provides compatibility for projects that have not been updated
+to expect the new behavior.
+
+The ``OLD`` behavior for this policy is to not propagate interface link
+properties. The ``NEW`` behavior of this policy is to propagate interface link
+properties.
+
+This policy was introduced in CMake version 3.17.  Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+Unlike many policies, CMake version |release| does *not* warn
+when this policy is not set and simply uses ``OLD`` behavior.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0100.rst b/share/cmake-3.22/Help/policy/CMP0100.rst
new file mode 100644
index 0000000..730fa82
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0100.rst
@@ -0,0 +1,42 @@
+CMP0100
+-------
+
+.. versionadded:: 3.17
+
+Let :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC` process
+header files that end with a ``.hh`` extension.
+
+Since version 3.17, CMake processes header files that end with a
+``.hh`` extension in :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`.
+In earlier CMake versions, these header files were ignored by
+:prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`.
+
+This policy affects how header files that end with a ``.hh`` extension
+get treated in :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`.
+
+The ``OLD`` behavior for this policy is to ignore ``.hh`` header files
+in :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`.
+
+The ``NEW`` behavior for this policy is to process ``.hh`` header files
+in :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC` just like other header files.
+
+.. note::
+
+  To silence the ``CMP0100`` warning source files can be excluded from
+  :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC` processing by setting the
+  source file properties :prop_sf:`SKIP_AUTOMOC`, :prop_sf:`SKIP_AUTOUIC` or
+  :prop_sf:`SKIP_AUTOGEN`.
+
+  .. code-block:: cmake
+
+    # Source skip example:
+    set_property(SOURCE /path/to/file1.hh PROPERTY SKIP_AUTOMOC ON)
+    set_property(SOURCE /path/to/file2.hh PROPERTY SKIP_AUTOUIC ON)
+    set_property(SOURCE /path/to/file3.hh PROPERTY SKIP_AUTOGEN ON)
+
+This policy was introduced in CMake version 3.17.0.  CMake version
+|release| warns when the policy is not set and uses ``OLD`` behavior.
+Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
+explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0101.rst b/share/cmake-3.22/Help/policy/CMP0101.rst
new file mode 100644
index 0000000..f02bccc
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0101.rst
@@ -0,0 +1,22 @@
+CMP0101
+-------
+
+.. versionadded:: 3.17
+
+:command:`target_compile_options` now honors ``BEFORE`` keyword in all scopes.
+
+In CMake 3.16 and below the :command:`target_compile_options` ignores the
+``BEFORE`` keyword in private scope. CMake 3.17 and later honors
+``BEFORE`` keyword in all scopes. This policy provides compatibility for
+projects that have not been updated to expect the new behavior.
+
+The ``OLD`` behavior for this policy is to not honor ``BEFORE`` keyword in
+private scope. The ``NEW`` behavior of this policy is to honor
+``BEFORE`` keyword in all scopes.
+
+This policy was introduced in CMake version 3.17.  Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+Unlike many policies, CMake version |release| does *not* warn
+when this policy is not set and simply uses ``OLD`` behavior.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0102.rst b/share/cmake-3.22/Help/policy/CMP0102.rst
new file mode 100644
index 0000000..08024bf
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0102.rst
@@ -0,0 +1,29 @@
+CMP0102
+-------
+
+.. versionadded:: 3.17
+
+The :command:`mark_as_advanced` command no longer creates a cache entry if one
+does not already exist.
+
+In CMake 3.16 and below, if a variable was not defined at all or just defined
+locally, the :command:`mark_as_advanced` command would create a new cache
+entry with an ``UNINITIALIZED`` type and no value. When a :command:`find_path`
+(or other similar ``find_`` command) would next run, it would find this
+undefined cache entry and set it up with an empty string value. This process
+would end up deleting the local variable in the process (due to the way the
+cache works), effectively clearing any stored ``find_`` results that were only
+available in the local scope.
+
+The ``OLD`` behavior for this policy is to create the empty cache definition.
+The ``NEW`` behavior of this policy is to ignore variables which do not
+already exist in the cache.
+
+This policy was introduced in CMake version 3.17.  Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+Unlike many policies, CMake version |release| does *not* warn
+when this policy is not set and simply uses ``OLD`` behavior.  See
+documentation of the :variable:`CMAKE_POLICY_WARNING_CMP0102
+<CMAKE_POLICY_WARNING_CMP<NNNN>>` variable to control the warning.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0103.rst b/share/cmake-3.22/Help/policy/CMP0103.rst
new file mode 100644
index 0000000..b5f44d1
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0103.rst
@@ -0,0 +1,24 @@
+CMP0103
+-------
+
+.. versionadded:: 3.18
+
+Multiple calls to :command:`export` command with same ``FILE`` without
+``APPEND`` is no longer allowed.
+
+In CMake 3.17 and below, multiple calls to :command:`export` command with the
+same ``FILE`` without ``APPEND`` are accepted silently but only the last
+occurrence is taken into account during the generation.
+
+The ``OLD`` behavior for this policy is to ignore the multiple occurrences of
+ :command:`export` command except the last one.
+
+The ``NEW`` behavior of this policy is to raise an error on second call to
+:command:`export` command with same ``FILE`` without ``APPEND``.
+
+This policy was introduced in CMake version 3.18.  CMake version
+|release| warns when the policy is not set and uses ``OLD`` behavior.
+Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
+explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0104.rst b/share/cmake-3.22/Help/policy/CMP0104.rst
new file mode 100644
index 0000000..b125729
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0104.rst
@@ -0,0 +1,58 @@
+CMP0104
+-------
+
+.. versionadded:: 3.18
+
+Initialize :variable:`CMAKE_CUDA_ARCHITECTURES` when
+:variable:`CMAKE_CUDA_COMPILER_ID <CMAKE_<LANG>_COMPILER_ID>` is ``NVIDIA``.
+Raise an error if :prop_tgt:`CUDA_ARCHITECTURES` is empty.
+
+:variable:`CMAKE_CUDA_ARCHITECTURES` introduced in CMake 3.18 is used to
+initialize :prop_tgt:`CUDA_ARCHITECTURES`, which passes correct code generation
+flags to the CUDA compiler.
+
+Previous to this users had to manually specify the code generation flags. This
+policy is for backwards compatibility with manually specifying code generation
+flags.
+
+The ``OLD`` behavior for this policy is to not initialize
+:variable:`CMAKE_CUDA_ARCHITECTURES` when
+:variable:`CMAKE_CUDA_COMPILER_ID <CMAKE_<LANG>_COMPILER_ID>` is ``NVIDIA``.
+Empty :prop_tgt:`CUDA_ARCHITECTURES` is allowed.
+
+The ``NEW`` behavior of this policy is to initialize
+:variable:`CMAKE_CUDA_ARCHITECTURES` when
+:variable:`CMAKE_CUDA_COMPILER_ID <CMAKE_<LANG>_COMPILER_ID>` is ``NVIDIA``
+and raise an error if :prop_tgt:`CUDA_ARCHITECTURES` is empty during generation.
+
+If :prop_tgt:`CUDA_ARCHITECTURES` is set to a false value no architectures
+flags are passed to the compiler. This is intended to support packagers and
+the rare cases where full control over the passed flags is required.
+
+This policy was introduced in CMake version 3.18.  CMake version
+|release| warns when the policy is not set and uses ``OLD`` behavior.
+Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
+explicitly.
+
+.. include:: DEPRECATED.txt
+
+Examples
+^^^^^^^^
+
+.. code-block:: cmake
+
+  set_target_properties(tgt PROPERTIES CUDA_ARCHITECTURES "35;50;72")
+
+Generates code for real and virtual architectures ``30``, ``50`` and ``72``.
+
+.. code-block:: cmake
+
+  set_property(TARGET tgt PROPERTY CUDA_ARCHITECTURES 70-real 72-virtual)
+
+Generates code for real architecture ``70`` and virtual architecture ``72``.
+
+.. code-block:: cmake
+
+  set_property(TARGET tgt PROPERTY CUDA_ARCHITECTURES OFF)
+
+CMake will not pass any architecture flags to the compiler.
diff --git a/share/cmake-3.22/Help/policy/CMP0105.rst b/share/cmake-3.22/Help/policy/CMP0105.rst
new file mode 100644
index 0000000..097a59a
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0105.rst
@@ -0,0 +1,21 @@
+CMP0105
+-------
+
+.. versionadded:: 3.18
+
+:prop_tgt:`LINK_OPTIONS` and :prop_tgt:`INTERFACE_LINK_OPTIONS` target
+properties are now used for the device link step.
+
+In CMake 3.17 and below, link options are not used by the device link step.
+
+The ``OLD`` behavior for this policy is to ignore the link options.
+
+The ``NEW`` behavior of this policy is to use the link options during the
+device link step.
+
+This policy was introduced in CMake version 3.17.  Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+Unlike many policies, CMake version |release| does *not* warn
+when this policy is not set and simply uses ``OLD`` behavior.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0106.rst b/share/cmake-3.22/Help/policy/CMP0106.rst
new file mode 100644
index 0000000..18a6635
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0106.rst
@@ -0,0 +1,21 @@
+CMP0106
+-------
+
+.. versionadded:: 3.18
+
+The :module:`Documentation` module is removed.
+
+The :module:`Documentation` was added as a support mechanism for the VTK
+project and was tuned for that project. Instead of CMake providing this module
+with (now old) VTK patterns for cache variables and required packages, the
+module is now deprecated by CMake itself.
+
+The ``OLD`` behavior of this policy is for :module:`Documentation` to add
+cache variables and find VTK documentation dependent packages. The ``NEW``
+behavior is to act as an empty module.
+
+This policy was introduced in CMake version 3.18.  CMake version |release|
+warns when the policy is not set and uses ``OLD`` behavior. Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0107.rst b/share/cmake-3.22/Help/policy/CMP0107.rst
new file mode 100644
index 0000000..da5ae06
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0107.rst
@@ -0,0 +1,21 @@
+CMP0107
+-------
+
+.. versionadded:: 3.18
+
+It is not allowed to create an ``ALIAS`` target with the same name as an
+another target.
+
+In CMake 3.17 and below, an ``ALIAS`` target can overwrite silently an existing
+target with the same name.
+
+The ``OLD`` behavior for this policy is to allow target overwrite.
+
+The ``NEW`` behavior of this policy is to prevent target overwriting.
+
+This policy was introduced in CMake version 3.17.  Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+Unlike many policies, CMake version |release| does *not* warn
+when this policy is not set and simply uses ``OLD`` behavior.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0108.rst b/share/cmake-3.22/Help/policy/CMP0108.rst
new file mode 100644
index 0000000..4d1091d
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0108.rst
@@ -0,0 +1,21 @@
+CMP0108
+-------
+
+.. versionadded:: 3.18
+
+A target is not allowed to link to itself even through an ``ALIAS`` target.
+
+In CMake 3.17 and below, a target can link to a target aliased to itself.
+
+The ``OLD`` behavior for this policy is to allow a target to link to a target
+aliased to itself.
+
+The ``NEW`` behavior of this policy is to prevent a target to link to itself
+through an ``ALIAS`` target.
+
+This policy was introduced in CMake version 3.17.  Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+Unlike many policies, CMake version |release| does *not* warn
+when this policy is not set and simply uses ``OLD`` behavior.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0109.rst b/share/cmake-3.22/Help/policy/CMP0109.rst
new file mode 100644
index 0000000..f86287f
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0109.rst
@@ -0,0 +1,24 @@
+CMP0109
+-------
+
+.. versionadded:: 3.19
+
+:command:`find_program` requires permission to execute but not to read.
+
+In CMake 3.18 and below, the :command:`find_program` command on UNIX
+would find files that are readable without requiring execute permission,
+and would not find files that are executable without read permission.
+In CMake 3.19 and above, ``find_program`` now prefers to require execute
+permission but not read permission.  This policy provides compatibility
+with projects that have not been updated to expect the new behavior.
+
+The ``OLD`` behavior for this policy is for ``find_program`` to require
+read permission but not execute permission.
+The ``NEW`` behavior for this policy is for ``find_program`` to require
+execute permission but not read permission.
+
+This policy was introduced in CMake version 3.19.  CMake version |release|
+warns when the policy is not set and uses ``OLD`` behavior.  Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0110.rst b/share/cmake-3.22/Help/policy/CMP0110.rst
new file mode 100644
index 0000000..6977d41
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0110.rst
@@ -0,0 +1,26 @@
+CMP0110
+-------
+
+.. versionadded:: 3.19
+
+:command:`add_test` supports arbitrary characters in test names.
+
+:command:`add_test` can now (officially) create tests with whitespace and
+other special characters in its name.  Before CMake version 3.19 that was not
+allowed, however, it was possible to work around this limitation by explicitly
+putting escaped quotes around the test's name in the ``add_test`` command.
+
+Although never officially supported several projects in the wild found and
+implemented this workaround.  However, the new change which officially allows
+the ``add_test`` command to support whitespace and other special characters in
+test names now breaks that workaround.  In order for these projects to work
+smoothly with newer CMake versions, this policy was introduced.
+
+The ``OLD`` behavior of this policy is to still prevent ``add_test`` from
+handling whitespace and special characters properly (if not using the
+mentioned workaround).  The ``NEW`` behavior on the other hand allows names
+with whitespace and special characters for tests created by ``add_test``.
+
+This policy was introduced in CMake version 3.19.  CMake version |release|
+warns when the policy is not set and uses ``OLD`` behavior. Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
diff --git a/share/cmake-3.22/Help/policy/CMP0111.rst b/share/cmake-3.22/Help/policy/CMP0111.rst
new file mode 100644
index 0000000..e327583
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0111.rst
@@ -0,0 +1,27 @@
+CMP0111
+-------
+
+.. versionadded:: 3.19
+
+An imported target missing its location property fails during generation.
+
+:ref:`Imported Targets` for library files and executables require that
+their location on disk is specified in a target property such as
+:prop_tgt:`IMPORTED_LOCATION`, :prop_tgt:`IMPORTED_IMPLIB`, or a
+per-configuration equivalent.  If a needed location property is not set,
+CMake 3.18 and below generate the string ``<TARGET_NAME>-NOTFOUND`` in
+its place, which results in failures of the corresponding rules at build
+time.  CMake 3.19 and above prefer instead to raise an error during
+generation.  This policy provides compatibility for projects that have
+not been updated to expect the new behavior.
+
+The ``OLD`` behavior of this policy is to generate the location of an imported
+unknown, static or shared library target as ``<TARGET_NAME>-NOTFOUND`` if not
+set.
+The ``NEW`` behavior is to raise an error.
+
+This policy was introduced in CMake version 3.19.  CMake version |release|
+warns when the policy is not set and uses ``OLD`` behavior. Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0112.rst b/share/cmake-3.22/Help/policy/CMP0112.rst
new file mode 100644
index 0000000..313a51e
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0112.rst
@@ -0,0 +1,40 @@
+CMP0112
+-------
+
+.. versionadded:: 3.19
+
+Target file component generator expressions do not add target dependencies.
+
+The following target-based generator expressions that query for directory or
+file name components no longer add a dependency on the evaluated target.
+
+    - ``TARGET_FILE_NAME``
+    - ``TARGET_FILE_DIR``
+    - ``TARGET_LINKER_FILE_BASE_NAME``
+    - ``TARGET_LINKER_FILE_NAME``
+    - ``TARGET_LINKER_FILE_DIR``
+    - ``TARGET_SONAME_FILE_NAME``
+    - ``TARGET_SONAME_FILE_DIR``
+    - ``TARGET_PDB_FILE_NAME``
+    - ``TARGET_PDB_FILE_DIR``
+    - ``TARGET_BUNDLE_DIR``
+    - ``TARGET_BUNDLE_CONTENT_DIR``
+
+
+In CMake 3.18 and lower a dependency on the evaluated target of the above
+generator expressions would always be added.  CMake 3.19 and above prefer
+to not add this dependency.  This policy provides compatibility for projects
+that have not been updated to expect the new behavior.
+
+The ``OLD`` behavior for this policy is to add a dependency on the evaluated
+target for the above generator expressions.  The ``NEW`` behavior of
+this policy is to not add a dependency on the evaluated target for the
+above generator expressions.
+
+This policy was introduced in CMake version 3.19.  Unlike many policies,
+CMake version |release| does *not* warn by default when this policy
+is not set and simply uses ``OLD`` behavior.  See documentation of the
+:variable:`CMAKE_POLICY_WARNING_CMP0112 <CMAKE_POLICY_WARNING_CMP<NNNN>>`
+variable to control the warning.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0113.rst b/share/cmake-3.22/Help/policy/CMP0113.rst
new file mode 100644
index 0000000..6f56902
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0113.rst
@@ -0,0 +1,43 @@
+CMP0113
+-------
+
+.. versionadded:: 3.19
+
+:ref:`Makefile Generators` do not repeat custom commands from target
+dependencies.
+
+Consider a chain of custom commands split across two dependent targets:
+
+.. code-block:: cmake
+
+  add_custom_command(OUTPUT output-not-created
+    COMMAND ... DEPENDS ...)
+  set_property(SOURCE output-not-created PROPERTY SYMBOLIC 1)
+  add_custom_command(OUTPUT output-created
+    COMMAND ... DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/output-not-created)
+  add_custom_target(first DEPENDS output-not-created)
+  add_custom_target(second DEPENDS output-created)
+  add_dependencies(second first)
+
+In CMake 3.18 and lower, the Makefile generators put a copy of both custom
+commands in the Makefile for target ``second`` even though its dependency on
+target ``first`` ensures that the first custom command runs before the second.
+Running ``make second`` would cause the first custom command to run once in
+the ``first`` target and then again in the ``second`` target.
+
+CMake 3.19 and above prefer to not duplicate custom commands in a target that
+are already generated in other targets on which the target depends (directly or
+indirectly).  This policy provides compatibility for projects that have not
+been updated to expect the new behavior.  In particular, projects that relied
+on the duplicate execution or that did not properly set the :prop_sf:`SYMBOLIC`
+source file property may be affected.
+
+The ``OLD`` behavior for this policy is to duplicate custom commands in
+dependent targets.  The ``NEW`` behavior of this policy is to not duplicate
+custom commands in dependent targets.
+
+This policy was introduced in CMake version 3.19.  Unlike many policies,
+CMake version |release| does *not* warn when this policy is not set and
+simply uses ``OLD`` behavior.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0114.rst b/share/cmake-3.22/Help/policy/CMP0114.rst
new file mode 100644
index 0000000..ae48478
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0114.rst
@@ -0,0 +1,85 @@
+CMP0114
+-------
+
+.. versionadded:: 3.19
+
+:module:`ExternalProject` step targets fully adopt their steps.
+
+The :command:`ExternalProject_Add` ``STEP_TARGETS`` option, and the
+:command:`ExternalProject_Add_StepTargets` function, can be used to
+create build targets for individual steps of an external project.
+
+In CMake 3.18 and below, step targets have some limitations:
+
+* Step targets always depend on targets named by the
+  :command:`ExternalProject_Add` ``DEPENDS`` option even though
+  not all steps need them.  In order to allow step targets to be created
+  without those dependencies, the :command:`ExternalProject_Add`
+  ``INDEPENDENT_STEP_TARGETS`` option or the
+  :command:`ExternalProject_Add_StepTargets` ``NO_DEPENDS`` option may
+  be used.  However, adding such "independent" step targets makes sense
+  only for specific steps such as ``download``, ``update``, and ``patch``
+  because they do not need any of the external project's build dependencies.
+  Furthermore, it does not make sense to create independent step targets
+  for steps that depend on non-independent steps.  Such rules are not
+  enforced, and projects that do not follow them can generate build systems
+  with confusing and generator-specific behavior.
+
+* Step targets hold copies of the custom commands implementing their
+  steps that are separate from the copies in the primary target created
+  by :command:`ExternalProject_Add`, and the primary target does not
+  depend on the step targets.  In parallel builds that drive the primary
+  target and step targets concurrently, multiple copies of the steps'
+  commands may run concurrently and race each other.
+
+  Also, prior to policy :policy:`CMP0113`, the step targets generated
+  by :ref:`Makefile Generators` also contain all the custom commands
+  on which their step depends.  This can lead to repeated execution of
+  those steps even in serial builds.
+
+In CMake 3.19 and above, the :module:`ExternalProject` module prefers
+a revised design to address these problems:
+
+* Each step is classified as "independent" if it does not depend
+  on other targets named by the :command:`ExternalProject_Add` ``DEPENDS``.
+  The predefined steps are automatically classified by default:
+
+  * The ``download``, ``update``, and ``patch`` steps are independent.
+  * The ``configure``, ``build``, ``test``, and ``install`` steps are not.
+
+  For custom steps, the :command:`ExternalProject_Add_Step` command provides
+  an ``INDEPENDENT`` option to mark them as independent.  It is an error to
+  mark a step as independent if it depends on other steps that are not.  Note
+  that this use of the term "independent" refers only to independence from
+  external targets and is orthogonal to a step's dependencies on other steps.
+
+* Step targets created by the :command:`ExternalProject_Add` ``STEP_TARGETS``
+  option or the :command:`ExternalProject_Add_Step` function are now
+  independent if and only if their steps are marked as independent.
+  The :command:`ExternalProject_Add` ``INDEPENDENT_STEP_TARGETS`` option
+  and :command:`ExternalProject_Add_StepTargets` ``NO_DEPENDS`` option
+  are no longer allowed.
+
+* Step targets, when created, are fully responsible for holding the
+  custom commands implementing their steps.  The primary target created
+  by :command:`ExternalProject_Add` depends on the step targets, and the
+  step targets depend on each other.  The target-level dependencies match
+  the file-level dependencies used by the custom commands for each step.
+
+  When the :command:`ExternalProject_Add` ``UPDATE_DISCONNECTED`` or
+  ``TEST_EXCLUDE_FROM_MAIN`` option is used, or the
+  :command:`ExternalProject_Add_Step` ``EXCLUDE_FROM_MAIN`` option is used
+  for a custom step, some step targets may be created automatically.
+  These are needed to hold the steps commonly depended upon by the primary
+  target and the disconnected step targets.
+
+Policy ``CMP0114`` provides compatibility for projects that have not been
+updated to expect the new behavior.  The ``OLD`` behavior for this policy
+is to use the above-documented behavior from 3.18 and below.  The ``NEW``
+behavior for this policy is to use the above-documented behavior preferred
+by 3.19 and above.
+
+This policy was introduced in CMake version 3.19.  CMake version
+|release| warns when the policy is not set and uses ``OLD`` behavior.
+Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
+explicitly.
diff --git a/share/cmake-3.22/Help/policy/CMP0115.rst b/share/cmake-3.22/Help/policy/CMP0115.rst
new file mode 100644
index 0000000..7f82c43
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0115.rst
@@ -0,0 +1,34 @@
+CMP0115
+-------
+
+.. versionadded:: 3.20
+
+Source file extensions must be explicit.
+
+In CMake 3.19 and below, if a source file could not be found by the name
+specified, it would append a list of known extensions to the name to see if
+the file with the extension could be found. For example, this would allow the
+user to run:
+
+.. code-block:: cmake
+
+  add_executable(exe main)
+
+and put ``main.c`` in the executable without specifying the extension.
+
+Starting in CMake 3.20, CMake prefers all source files to have their extensions
+explicitly listed:
+
+.. code-block:: cmake
+
+  add_executable(exe main.c)
+
+The ``OLD`` behavior for this policy is to implicitly append known extensions
+to source files if they can't be found. The ``NEW`` behavior of this policy is
+to not append known extensions and require them to be explicit.
+
+This policy was introduced in CMake version 3.20.  CMake version |release|
+warns when the policy is not set and uses ``OLD`` behavior. Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0116.rst b/share/cmake-3.22/Help/policy/CMP0116.rst
new file mode 100644
index 0000000..18e5a96
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0116.rst
@@ -0,0 +1,41 @@
+CMP0116
+-------
+
+.. versionadded:: 3.20
+
+Ninja generators transform ``DEPFILE`` s from :command:`add_custom_command`.
+
+In CMake 3.19 and below, files given to the ``DEPFILE`` argument of
+:command:`add_custom_command` were passed directly to Ninja's ``depfile``
+variable without any path resolution. This meant that if
+:command:`add_custom_command` was called from a subdirectory (created by
+:command:`add_subdirectory`), the ``DEPFILE`` argument would have to be either
+an absolute path or a path relative to :variable:`CMAKE_BINARY_DIR`, rather
+than :variable:`CMAKE_CURRENT_BINARY_DIR`. In addition, no transformation was
+done on the file listed in ``DEPFILE``, which meant that the paths within the
+``DEPFILE`` had the same restrictions.
+
+Starting with CMake 3.20, the ``DEPFILE`` argument is relative to
+:variable:`CMAKE_CURRENT_BINARY_DIR` (unless it is absolute), and the paths in
+the ``DEPFILE`` are also relative to :variable:`CMAKE_CURRENT_BINARY_DIR`.
+CMake automatically transforms the paths in the ``DEPFILE`` (unless they are
+absolute) after the custom command is run. The file listed in ``DEPFILE`` is
+not modified in any way. Instead, CMake writes the transformation to its own
+internal file, and passes this internal file to Ninja's ``depfile`` variable.
+This transformation happens regardless of whether or not ``DEPFILE`` is
+relative, and regardless of whether or not :command:`add_custom_command` is
+called from a subdirectory.
+
+The ``OLD`` behavior for this policy is to pass the ``DEPFILE`` to Ninja
+unaltered. The ``NEW`` behavior for this policy is to transform the ``DEPFILE``
+after running the custom command. The status of ``CMP0116`` is recorded at the
+time of the custom command's creation, and you can have custom commands in the
+same directory with different values for ``CMP0116`` by setting the policy
+before each custom command.
+
+This policy was introduced in CMake version 3.20.  Unlike most policies,
+CMake version |release| does *not* warn by default when this policy is not set
+(unless ``DEPFILE`` is used in a subdirectory) and simply uses ``OLD``
+behavior.  See documentation of the
+:variable:`CMAKE_POLICY_WARNING_CMP0116 <CMAKE_POLICY_WARNING_CMP<NNNN>>`
+variable to control the warning.
diff --git a/share/cmake-3.22/Help/policy/CMP0117.rst b/share/cmake-3.22/Help/policy/CMP0117.rst
new file mode 100644
index 0000000..0c4dd30
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0117.rst
@@ -0,0 +1,43 @@
+CMP0117
+-------
+
+.. versionadded:: 3.20
+
+MSVC RTTI flag ``/GR`` is not added to
+:variable:`CMAKE_CXX_FLAGS <CMAKE_<LANG>_FLAGS>` by default.
+
+When using MSVC-like compilers in CMake 3.19 and below, the RTTI flag
+``/GR`` is added to :variable:`CMAKE_CXX_FLAGS <CMAKE_<LANG>_FLAGS>` by
+default.  This behavior is left from support for MSVC versions from Visual
+Studio 2003 and below that did not enable RTTI by default.  It is no longer
+necessary.  Furthermore, it is problematic for projects that want to change
+to ``/GR-`` programmatically.  In particular, it requires string editing of
+the :variable:`CMAKE_CXX_FLAGS <CMAKE_<LANG>_FLAGS>` variable with knowledge
+of the CMake builtin default so it can be replaced.
+
+CMake 3.20 and above prefer to leave out ``/GR`` from the value of
+:variable:`CMAKE_CXX_FLAGS <CMAKE_<LANG>_FLAGS>` by default.
+
+This policy provides compatibility with projects that have not been updated
+to expect the lack of the ``/GR`` flag.  The policy setting takes effect as
+of the first :command:`project` or :command:`enable_language` command that
+initializes :variable:`CMAKE_CXX_FLAGS <CMAKE_<LANG>_FLAGS>`.
+
+.. note::
+
+  Once the policy has taken effect at the top of a project for a given
+  language, that choice must be used throughout the tree for that language.
+  In projects that have nested projects in subdirectories, be sure to
+  convert everything together.
+
+The ``OLD`` behavior for this policy is to place the MSVC ``/GR`` flag in the
+default :variable:`CMAKE_CXX_FLAGS <CMAKE_<LANG>_FLAGS>` cache entry.  The
+``NEW`` behavior for this policy is to *not* place the MSVC ``/GR`` flag in
+the default cache entry.
+
+This policy was introduced in CMake version 3.20.  Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+Unlike many policies, CMake version |release| does *not* warn
+when this policy is not set and simply uses ``OLD`` behavior.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0118.rst b/share/cmake-3.22/Help/policy/CMP0118.rst
new file mode 100644
index 0000000..aa7e0f7
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0118.rst
@@ -0,0 +1,25 @@
+CMP0118
+-------
+
+.. versionadded:: 3.20
+
+The :prop_sf:`GENERATED` source file property is now visible in all directories.
+
+Whether or not a source file is generated is an all-or-nothing global
+property of the source.  Consequently, the associated ``GENERATED``
+property is now visible from any directory scope, not only from the scope
+for which it was set.
+
+Additionally, the ``GENERATED`` property may now be set only to boolean
+values, and may not be turned off once turned on.
+
+The ``OLD`` behavior of this policy is to only allow ``GENERATED`` to be
+visible from the directory scope for which it was set.  The ``NEW``
+behavior on the other hand allows it to be visible from any scope.
+
+This policy was introduced in CMake version 3.20.  Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+Unlike many policies, CMake version |release| does *not* warn
+when this policy is not set and simply uses ``OLD`` behavior with regard
+to visibility of the ``GENERATED`` property.  However, CMake does warn
+about setting the ``GENERATED`` property to a non-boolean value.
diff --git a/share/cmake-3.22/Help/policy/CMP0119.rst b/share/cmake-3.22/Help/policy/CMP0119.rst
new file mode 100644
index 0000000..61c8bdc
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0119.rst
@@ -0,0 +1,36 @@
+CMP0119
+-------
+
+.. versionadded:: 3.20
+
+:prop_sf:`LANGUAGE` source file property explicitly compiles as specified
+language.
+
+The :prop_sf:`LANGUAGE` source file property is documented to mean that the
+source file is written in the specified language.  In CMake 3.19 and below,
+setting this property causes CMake to compile the source file using the
+compiler for the specified language.  However, it only passes an explicit
+flag to tell the compiler to treat the source as the specified language
+for MSVC-like, XL, and Embarcadero compilers for the ``CXX`` language.
+CMake 3.20 and above prefer to also explicitly tell the compiler to use
+the specified language using a flag such as ``-x c`` on all compilers
+for which such flags are known.
+
+This policy provides compatibility for projects that have not been updated
+to expect this behavior.  For example, some projects were setting the
+``LANGUAGE`` property to ``C`` on assembly-language ``.S`` source files
+in order to compile them using the C compiler.  Such projects should be
+updated to use ``enable_language(ASM)``, for which CMake will often choose
+the C compiler as the assembler on relevant platforms anyway.
+
+The ``OLD`` behavior for this policy is to interpret the ``LANGUAGE <LANG>``
+property using its undocumented meaning to "use the ``<LANG>`` compiler".
+The ``NEW`` behavior for this policy is to interpret the ``LANGUAGE <LANG>``
+property using its documented meaning to "compile as a ``<LANG>`` source".
+
+This policy was introduced in CMake version 3.20.  Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+Unlike many policies, CMake version |release| does *not* warn
+when this policy is not set and simply uses ``OLD`` behavior.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0120.rst b/share/cmake-3.22/Help/policy/CMP0120.rst
new file mode 100644
index 0000000..9d2f6c9
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0120.rst
@@ -0,0 +1,47 @@
+CMP0120
+-------
+
+.. versionadded:: 3.20
+
+The :module:`WriteCompilerDetectionHeader` module is removed.
+
+CMake versions 3.1 through 3.19 provide this module to generate a
+C++ compatibility layer by re-using information from CMake's table of
+preprocessor checks for :manual:`cmake-compile-features(7)`.  However:
+
+* Those granular features have been superseded by meta-features for
+  :ref:`Requiring Language Standards` such as ``cxx_std_11``.  Therefore
+  no new granular feature checks will be added and projects will need to
+  use other means to conditionally use new C++ features.
+
+* The module exposes some of CMake's implementation details directly
+  to C++ translation units.
+
+* The module's approach effectively provides a header file with CMake,
+  thus tying the version of the header to the version of CMake.
+  Many projects found that the :module:`WriteCompilerDetectionHeader` was
+  best used by manually generating its header locally with a recent version
+  of CMake and then bundling it with the project source so that it could
+  be used with older CMake versions.
+
+For reasons including the above, CMake 3.20 and above prefer to not
+provide the :module:`WriteCompilerDetectionHeader` module.  This policy
+provides compatibility for projects that have not been ported away from
+it.  Projects using the module should be updated to stop using it.
+Alternatives include:
+
+* Bundle a copy of the generated header in the project's source.
+* Use a third-party alternative, such as the CC0-licensed `Hedley`_.
+* Drop support for compilers too old to provide the features natively.
+
+The ``OLD`` behavior of this policy is for inclusion of the deprecated
+:module:`WriteCompilerDetectionHeader` module to work.  The ``NEW``
+behavior is for inclusion of the module to fail as if it does not exist.
+
+This policy was introduced in CMake version 3.20.  CMake version |release|
+warns when the policy is not set and uses ``OLD`` behavior. Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+
+.. include:: DEPRECATED.txt
+
+.. _`Hedley`: https://nemequ.github.io/hedley/
diff --git a/share/cmake-3.22/Help/policy/CMP0121.rst b/share/cmake-3.22/Help/policy/CMP0121.rst
new file mode 100644
index 0000000..326e7d5
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0121.rst
@@ -0,0 +1,21 @@
+CMP0121
+-------
+
+.. versionadded:: 3.21
+
+The :command:`list` command now detects invalid indices.
+
+Prior to CMake version 3.21, the :command:`list` command's ``GET``,
+``INSERT``, ``SUBLIST``, and ``REMOVE_AT`` subcommands did not detect invalid
+index arguments.
+
+The ``OLD`` behavior of this policy is for invalid indices to be treated as
+their integer value (if any) at the start of the string. For example,
+``2good4you`` is a ``2`` and ``not_an_integer`` is a ``0``. The ``NEW``
+behavior is for invalid indices to trigger an error.
+
+This policy was introduced in CMake version 3.21.  CMake version |release|
+warns when the policy is not set and uses ``OLD`` behavior. Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0122.rst b/share/cmake-3.22/Help/policy/CMP0122.rst
new file mode 100644
index 0000000..1ff8c48
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0122.rst
@@ -0,0 +1,17 @@
+CMP0122
+-------
+
+.. versionadded:: 3.21
+
+:module:`UseSWIG` use library name conventions for ``CSharp`` language.
+
+Starting with CMake 3.21, :module:`UseSWIG` generates now a library using
+default naming conventions. This policy provides compatibility with projects
+that expect the legacy behavior.
+
+This policy was introduced in CMake version 3.21.  CMake version
+|release| warns when the policy is not set and uses ``OLD`` behavior.
+Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
+explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0123.rst b/share/cmake-3.22/Help/policy/CMP0123.rst
new file mode 100644
index 0000000..e09b5ec
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0123.rst
@@ -0,0 +1,32 @@
+CMP0123
+-------
+
+.. versionadded:: 3.21
+
+``ARMClang`` cpu/arch compile and link flags must be set explicitly.
+
+CMake 3.20 and lower automatically maps the :variable:`CMAKE_SYSTEM_PROCESSOR`
+variable and an undocumented ``CMAKE_SYSTEM_ARCH`` to compile and link options
+for ``ARMClang``.  For example, the ``-mcpu=cortex-m33`` flag is added when
+:variable:`CMAKE_SYSTEM_PROCESSOR` equals ``cortex-m33``.  CMake requires
+projects to set either variable or it raises a fatal error.  However, the
+project may need to additionally specify CPU features using e.g.
+``-mcpu=cortex-m33+nodsp``, conflicting with the ``-mcpu=cortex-m33`` added
+by CMake.  This results in either link errors or unusable binaries.
+
+CMake 3.21 and above prefer instead to not add any cpu/arch compile and link
+flags automatically.  Instead, projects must specify them explicitly.
+This policy provides compatibility for projects that have not been updated.
+
+The ``OLD`` behavior of this policy requires projects that use ``ARMClang``
+to set either :variable:`CMAKE_SYSTEM_PROCESSOR` or ``CMAKE_SYSTEM_ARCH``
+and it automatically adds a compile option ``-mcpu=`` or ``-march=`` and
+a link option ``--cpu=`` based on those variables.  The ``NEW`` behavior
+does not add compile or link options, and projects are responsible for
+setting correct options.
+
+This policy was introduced in CMake version 3.21.  CMake version |release|
+warns when the policy is not set and uses ``OLD`` behavior.  Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0124.rst b/share/cmake-3.22/Help/policy/CMP0124.rst
new file mode 100644
index 0000000..3935166
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0124.rst
@@ -0,0 +1,18 @@
+CMP0124
+-------
+
+.. versionadded:: 3.21
+
+When this policy is set to ``NEW``, the scope of loop variables defined by the
+:command:`foreach` command is restricted to the loop only.  They will be unset
+at the end of the loop.
+
+The ``OLD`` behavior for this policy still clears the loop variables at the end
+of the loop, but does not unset them.  This leaves them as defined, but empty.
+
+This policy was introduced in CMake version 3.21. Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+Unlike many policies, CMake version |release| does *not* warn when the policy
+is not set and simply uses ``OLD`` behavior.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0125.rst b/share/cmake-3.22/Help/policy/CMP0125.rst
new file mode 100644
index 0000000..0b1704e
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0125.rst
@@ -0,0 +1,42 @@
+CMP0125
+-------
+
+.. versionadded:: 3.21
+
+The :command:`find_file`, :command:`find_path`, :command:`find_library` and
+:command:`find_program` commands cache their result in the variable specified
+by their first argument.  Prior to CMake 3.21, if a cache variable of that
+name already existed before the call but the cache variable had no type, any
+non-cache variable of the same name would be discarded and the cache variable
+was always used (see also :policy:`CMP0126` for a different but similar
+behavior).  This contradicts the convention that a non-cache variable should
+take precedence over a cache variable of the same name.  Such a situation can
+arise if a user sets a cache variable on the command line without specifying
+a type, such as ``cmake -DMYVAR=blah ...`` instead of
+``cmake -DMYVAR:FILEPATH=blah``.
+
+Related to the above, if a cache variable of the specified name already exists
+and it *does* have a type, the various ``find_...()`` commands would return
+that value unchanged.  In particular, if it contained a relative path, it
+would not be converted to an absolute path in this situation.
+
+When policy ``CMP0125`` is set to ``OLD`` or is unset, the behavior is as
+described above.  When it is set to ``NEW``, the behavior is as follows:
+
+* If a non-cache variable of the specified name exists when the ``find_...()``
+  command is called, its value will be used regardless of whether a cache
+  variable of the same name already exists or not.  A cache variable will not
+  be created in this case if no such cache variable existed before.
+  If a cache variable of the specified name did already exist, the cache will
+  be updated to match the non-cache variable.
+
+* The various ``find...()`` commands will always provide an absolute path in
+  the result variable, except where a relative path provided by a cache or
+  non-cache variable cannot be resolved to an existing path.
+
+This policy was introduced in CMake version 3.21. Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+Unlike many policies, CMake version |release| does *not* warn when the policy
+is not set and simply uses ``OLD`` behavior.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0126.rst b/share/cmake-3.22/Help/policy/CMP0126.rst
new file mode 100644
index 0000000..1b69957
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0126.rst
@@ -0,0 +1,34 @@
+CMP0126
+-------
+
+.. versionadded:: 3.21
+
+When this policy is set to ``NEW``, the :command:`set(CACHE)` command does not
+remove any normal variable of the same name from the current scope.
+The ``OLD`` behavior removes any normal variable of the same name from the
+current scope in the following situations:
+
+* No cache variable of that name existed previously.
+
+* A cache variable of that name existed previously, but it had no type.
+  This can occur when the variable was set on the command line using a form
+  like ``cmake -DMYVAR=blah`` instead of ``cmake -DMYVAR:STRING=blah``.
+
+Note that the ``NEW`` behavior has an important difference to the similar
+``NEW`` behavior of policy :policy:`CMP0077`.  The :command:`set(CACHE)`
+command always sets the cache variable if it did not exist previously,
+regardless of the ``CMP0126`` policy setting.  The :command:`option` command
+will *not* set the cache variable if a non-cache variable of the same name
+already exists and :policy:`CMP0077` is set to ``NEW``.
+
+Policy ``CMP0126`` was introduced in CMake version 3.21. Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly
+within a project.  Use the :variable:`CMAKE_POLICY_DEFAULT_CMP0126
+<CMAKE_POLICY_DEFAULT_CMP\<NNNN\>>` variable to set the policy for
+a third-party project in a subdirectory without modifying it.
+Unlike many policies, CMake version |release| does *not* warn when the policy
+is not set and simply uses ``OLD`` behavior.  See documentation of the
+:variable:`CMAKE_POLICY_WARNING_CMP0126 <CMAKE_POLICY_WARNING_CMP<NNNN>>`
+variable to control the warning.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0127.rst b/share/cmake-3.22/Help/policy/CMP0127.rst
new file mode 100644
index 0000000..2106110
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0127.rst
@@ -0,0 +1,34 @@
+CMP0127
+-------
+
+.. versionadded:: 3.22
+
+:command:`cmake_dependent_option` supports full :ref:`Condition Syntax`.
+
+The ``<depends>`` parameter accepts a :ref:`semicolon-separated list <CMake
+Language Lists>` of conditions.  CMake 3.21 and lower evaluates each
+``condition`` as ``if(${condition})``, which does not properly handle
+conditions with nested paren groups.  CMake 3.22 and above instead prefer
+to evaluate each ``condition`` as ``if(<condition>)``, where ``<condition>``
+is re-parsed as if literally written in a call to :command:`if`.  This
+allows expressions like::
+
+  "A AND (B OR C)"
+
+but requires expressions like::
+
+  "FOO MATCHES (UPPER|lower)"
+
+to be re-written as::
+
+  "FOO MATCHES \"(UPPER|lower)\""
+
+Policy ``CMP0127`` provides compatibility for projects that have not
+been updated to expect the new behavior.
+
+This policy was introduced in CMake version 3.22.  CMake version
+|release| warns when the policy is not set and uses ``OLD`` behavior.
+Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
+explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.22/Help/policy/CMP0128.rst b/share/cmake-3.22/Help/policy/CMP0128.rst
new file mode 100644
index 0000000..604a146
--- /dev/null
+++ b/share/cmake-3.22/Help/policy/CMP0128.rst
@@ -0,0 +1,71 @@
+CMP0128
+-------
+
+.. versionadded:: 3.22
+
+When this policy is set to ``NEW``:
+
+* :prop_tgt:`<LANG>_EXTENSIONS` is initialized to
+  :variable:`CMAKE_<LANG>_EXTENSIONS` if set, otherwise falling back to
+  :variable:`CMAKE_<LANG>_EXTENSIONS_DEFAULT`.
+
+* Extensions are correctly enabled/disabled if :prop_tgt:`<LANG>_STANDARD` is
+  unset or satisfied by the default.
+
+* Standard mode-affecting flags aren't added unless necessary to achieve the
+  specified mode.
+
+The ``OLD`` behavior:
+
+* Initializes :prop_tgt:`<LANG>_EXTENSIONS` to
+  :variable:`CMAKE_<LANG>_EXTENSIONS` if set, otherwise falling back to ``ON``.
+
+* Always adds a flag if :prop_tgt:`<LANG>_STANDARD` is set and
+  :prop_tgt:`<LANG>_STANDARD_REQUIRED` is ``OFF``.
+
+* If :prop_tgt:`<LANG>_STANDARD` is unset:
+
+  * Doesn't disable extensions even if :prop_tgt:`<LANG>_EXTENSIONS` is
+    ``OFF``.
+
+  * Fails to enable extensions if :prop_tgt:`<LANG>_EXTENSIONS` is ``ON``
+    except for the ``IAR`` compiler.
+
+Code may need to be updated for the ``NEW`` behavior in the following cases:
+
+* If a standard mode flag previously overridden by CMake's and not used during
+  compiler detection now takes effect due to CMake no longer adding one as the
+  default detected is appropriate.
+
+  Such code should be converted to either:
+
+  * Use :prop_tgt:`<LANG>_STANDARD` and :prop_tgt:`<LANG>_EXTENSIONS` instead
+    of manually adding flags.
+
+  * Or ensure the manually-specified flags are used during compiler detection.
+
+* If extensions were disabled without :prop_tgt:`<LANG>_STANDARD` being set
+  CMake previously wouldn't actually disable extensions.
+
+  Such code should be updated to not disable extensions if they are required.
+
+* If extensions were enabled/disabled when :prop_tgt:`<LANG>_STANDARD` was
+  satisfied by the compiler's default CMake previously wouldn't actually
+  enable/disable extensions.
+
+  Such code should be updated to set the correct extensions mode.
+
+If compiler flags affecting the standard mode are used during compiler
+detection (for example in :manual:`a toolchain file <cmake-toolchains(7)>`
+using :variable:`CMAKE_<LANG>_FLAGS_INIT`) then they will affect the detected
+default :variable:`standard <CMAKE_<LANG>_STANDARD_DEFAULT>` and
+:variable:`extensions <CMAKE_<LANG>_EXTENSIONS_DEFAULT>`.
+
+Unlike many policies, CMake version |release| does *not* warn when the policy
+is not set and simply uses the ``OLD`` behavior. Use the
+:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
+See documentation of the
+:variable:`CMAKE_POLICY_WARNING_CMP0128 <CMAKE_POLICY_WARNING_CMP<NNNN>>`
+variable to control the warning.
+
+.. include:: DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/DEPRECATED.txt b/share/cmake-3.22/Help/policy/DEPRECATED.txt
similarity index 100%
rename from share/cmake-3.18/Help/policy/DEPRECATED.txt
rename to share/cmake-3.22/Help/policy/DEPRECATED.txt
diff --git a/share/cmake-3.18/Help/policy/DISALLOWED_COMMAND.txt b/share/cmake-3.22/Help/policy/DISALLOWED_COMMAND.txt
similarity index 100%
rename from share/cmake-3.18/Help/policy/DISALLOWED_COMMAND.txt
rename to share/cmake-3.22/Help/policy/DISALLOWED_COMMAND.txt
diff --git a/share/cmake-3.18/Help/prop_cache/ADVANCED.rst b/share/cmake-3.22/Help/prop_cache/ADVANCED.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_cache/ADVANCED.rst
rename to share/cmake-3.22/Help/prop_cache/ADVANCED.rst
diff --git a/share/cmake-3.18/Help/prop_cache/HELPSTRING.rst b/share/cmake-3.22/Help/prop_cache/HELPSTRING.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_cache/HELPSTRING.rst
rename to share/cmake-3.22/Help/prop_cache/HELPSTRING.rst
diff --git a/share/cmake-3.18/Help/prop_cache/MODIFIED.rst b/share/cmake-3.22/Help/prop_cache/MODIFIED.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_cache/MODIFIED.rst
rename to share/cmake-3.22/Help/prop_cache/MODIFIED.rst
diff --git a/share/cmake-3.18/Help/prop_cache/STRINGS.rst b/share/cmake-3.22/Help/prop_cache/STRINGS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_cache/STRINGS.rst
rename to share/cmake-3.22/Help/prop_cache/STRINGS.rst
diff --git a/share/cmake-3.18/Help/prop_cache/TYPE.rst b/share/cmake-3.22/Help/prop_cache/TYPE.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_cache/TYPE.rst
rename to share/cmake-3.22/Help/prop_cache/TYPE.rst
diff --git a/share/cmake-3.18/Help/prop_cache/VALUE.rst b/share/cmake-3.22/Help/prop_cache/VALUE.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_cache/VALUE.rst
rename to share/cmake-3.22/Help/prop_cache/VALUE.rst
diff --git a/share/cmake-3.22/Help/prop_dir/ADDITIONAL_CLEAN_FILES.rst b/share/cmake-3.22/Help/prop_dir/ADDITIONAL_CLEAN_FILES.rst
new file mode 100644
index 0000000..6097d14
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_dir/ADDITIONAL_CLEAN_FILES.rst
@@ -0,0 +1,23 @@
+ADDITIONAL_CLEAN_FILES
+----------------------
+
+.. versionadded:: 3.15
+
+A :ref:`;-list <CMake Language Lists>` of files or directories that will be
+removed as a part of the global ``clean`` target.  It is useful for
+specifying generated files or directories that are used by multiple targets
+or by CMake itself, or that are generated in ways which cannot be captured as
+outputs or byproducts of custom commands.
+
+If an additional clean file is specific to a single target only, then the
+:prop_tgt:`ADDITIONAL_CLEAN_FILES` target property would usually be a better
+choice than this directory property.
+
+Relative paths are allowed and are interpreted relative to the
+current binary directory.
+
+Contents of ``ADDITIONAL_CLEAN_FILES`` may use
+:manual:`generator expressions <cmake-generator-expressions(7)>`.
+
+This property only works for the :generator:`Ninja` and the Makefile
+generators.  It is ignored by other generators.
diff --git a/share/cmake-3.18/Help/prop_dir/ADDITIONAL_MAKE_CLEAN_FILES.rst b/share/cmake-3.22/Help/prop_dir/ADDITIONAL_MAKE_CLEAN_FILES.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_dir/ADDITIONAL_MAKE_CLEAN_FILES.rst
rename to share/cmake-3.22/Help/prop_dir/ADDITIONAL_MAKE_CLEAN_FILES.rst
diff --git a/share/cmake-3.22/Help/prop_dir/BINARY_DIR.rst b/share/cmake-3.22/Help/prop_dir/BINARY_DIR.rst
new file mode 100644
index 0000000..fcf9d17
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_dir/BINARY_DIR.rst
@@ -0,0 +1,7 @@
+BINARY_DIR
+----------
+
+.. versionadded:: 3.7
+
+This read-only directory property reports absolute path to the binary
+directory corresponding to the source on which it is read.
diff --git a/share/cmake-3.22/Help/prop_dir/BUILDSYSTEM_TARGETS.rst b/share/cmake-3.22/Help/prop_dir/BUILDSYSTEM_TARGETS.rst
new file mode 100644
index 0000000..c998488
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_dir/BUILDSYSTEM_TARGETS.rst
@@ -0,0 +1,15 @@
+BUILDSYSTEM_TARGETS
+-------------------
+
+.. versionadded:: 3.7
+
+This read-only directory property contains a
+:ref:`semicolon-separated list <CMake Language Lists>` of buildsystem targets added in the
+directory by calls to the :command:`add_library`, :command:`add_executable`,
+and :command:`add_custom_target` commands.  The list does not include any
+:ref:`Imported Targets` or :ref:`Alias Targets`, but does include
+:ref:`Interface Libraries`.  Each entry in the list is the logical name
+of a target, suitable to pass to the :command:`get_property` command
+``TARGET`` option.
+
+See also the :prop_dir:`IMPORTED_TARGETS` directory property.
diff --git a/share/cmake-3.18/Help/prop_dir/CACHE_VARIABLES.rst b/share/cmake-3.22/Help/prop_dir/CACHE_VARIABLES.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_dir/CACHE_VARIABLES.rst
rename to share/cmake-3.22/Help/prop_dir/CACHE_VARIABLES.rst
diff --git a/share/cmake-3.18/Help/prop_dir/CLEAN_NO_CUSTOM.rst b/share/cmake-3.22/Help/prop_dir/CLEAN_NO_CUSTOM.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_dir/CLEAN_NO_CUSTOM.rst
rename to share/cmake-3.22/Help/prop_dir/CLEAN_NO_CUSTOM.rst
diff --git a/share/cmake-3.18/Help/prop_dir/CMAKE_CONFIGURE_DEPENDS.rst b/share/cmake-3.22/Help/prop_dir/CMAKE_CONFIGURE_DEPENDS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_dir/CMAKE_CONFIGURE_DEPENDS.rst
rename to share/cmake-3.22/Help/prop_dir/CMAKE_CONFIGURE_DEPENDS.rst
diff --git a/share/cmake-3.18/Help/prop_dir/COMPILE_DEFINITIONS.rst b/share/cmake-3.22/Help/prop_dir/COMPILE_DEFINITIONS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_dir/COMPILE_DEFINITIONS.rst
rename to share/cmake-3.22/Help/prop_dir/COMPILE_DEFINITIONS.rst
diff --git a/share/cmake-3.18/Help/prop_dir/COMPILE_DEFINITIONS_CONFIG.rst b/share/cmake-3.22/Help/prop_dir/COMPILE_DEFINITIONS_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_dir/COMPILE_DEFINITIONS_CONFIG.rst
rename to share/cmake-3.22/Help/prop_dir/COMPILE_DEFINITIONS_CONFIG.rst
diff --git a/share/cmake-3.18/Help/prop_dir/COMPILE_OPTIONS.rst b/share/cmake-3.22/Help/prop_dir/COMPILE_OPTIONS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_dir/COMPILE_OPTIONS.rst
rename to share/cmake-3.22/Help/prop_dir/COMPILE_OPTIONS.rst
diff --git a/share/cmake-3.18/Help/prop_dir/DEFINITIONS.rst b/share/cmake-3.22/Help/prop_dir/DEFINITIONS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_dir/DEFINITIONS.rst
rename to share/cmake-3.22/Help/prop_dir/DEFINITIONS.rst
diff --git a/share/cmake-3.18/Help/prop_dir/EXCLUDE_FROM_ALL.rst b/share/cmake-3.22/Help/prop_dir/EXCLUDE_FROM_ALL.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_dir/EXCLUDE_FROM_ALL.rst
rename to share/cmake-3.22/Help/prop_dir/EXCLUDE_FROM_ALL.rst
diff --git a/share/cmake-3.18/Help/prop_dir/IMPLICIT_DEPENDS_INCLUDE_TRANSFORM.rst b/share/cmake-3.22/Help/prop_dir/IMPLICIT_DEPENDS_INCLUDE_TRANSFORM.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_dir/IMPLICIT_DEPENDS_INCLUDE_TRANSFORM.rst
rename to share/cmake-3.22/Help/prop_dir/IMPLICIT_DEPENDS_INCLUDE_TRANSFORM.rst
diff --git a/share/cmake-3.22/Help/prop_dir/IMPORTED_TARGETS.rst b/share/cmake-3.22/Help/prop_dir/IMPORTED_TARGETS.rst
new file mode 100644
index 0000000..fea8a93
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_dir/IMPORTED_TARGETS.rst
@@ -0,0 +1,14 @@
+IMPORTED_TARGETS
+----------------
+
+.. versionadded:: 3.21
+
+This read-only directory property contains a
+:ref:`semicolon-separated list <CMake Language Lists>` of
+:ref:`Imported Targets` added in the directory by calls to the
+:command:`add_library` and :command:`add_executable` commands.
+Each entry in the list is the logical name of a target, suitable
+to pass to the :command:`get_property` command ``TARGET`` option
+when called in the same directory.
+
+See also the :prop_dir:`BUILDSYSTEM_TARGETS` directory property.
diff --git a/share/cmake-3.18/Help/prop_dir/INCLUDE_DIRECTORIES.rst b/share/cmake-3.22/Help/prop_dir/INCLUDE_DIRECTORIES.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_dir/INCLUDE_DIRECTORIES.rst
rename to share/cmake-3.22/Help/prop_dir/INCLUDE_DIRECTORIES.rst
diff --git a/share/cmake-3.18/Help/prop_dir/INCLUDE_REGULAR_EXPRESSION.rst b/share/cmake-3.22/Help/prop_dir/INCLUDE_REGULAR_EXPRESSION.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_dir/INCLUDE_REGULAR_EXPRESSION.rst
rename to share/cmake-3.22/Help/prop_dir/INCLUDE_REGULAR_EXPRESSION.rst
diff --git a/share/cmake-3.18/Help/prop_dir/INTERPROCEDURAL_OPTIMIZATION.rst b/share/cmake-3.22/Help/prop_dir/INTERPROCEDURAL_OPTIMIZATION.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_dir/INTERPROCEDURAL_OPTIMIZATION.rst
rename to share/cmake-3.22/Help/prop_dir/INTERPROCEDURAL_OPTIMIZATION.rst
diff --git a/share/cmake-3.18/Help/prop_dir/INTERPROCEDURAL_OPTIMIZATION_CONFIG.rst b/share/cmake-3.22/Help/prop_dir/INTERPROCEDURAL_OPTIMIZATION_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_dir/INTERPROCEDURAL_OPTIMIZATION_CONFIG.rst
rename to share/cmake-3.22/Help/prop_dir/INTERPROCEDURAL_OPTIMIZATION_CONFIG.rst
diff --git a/share/cmake-3.22/Help/prop_dir/LABELS.rst b/share/cmake-3.22/Help/prop_dir/LABELS.rst
new file mode 100644
index 0000000..bf14368
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_dir/LABELS.rst
@@ -0,0 +1,15 @@
+LABELS
+------
+
+.. versionadded:: 3.10
+
+Specify a list of text labels associated with a directory and all of its
+subdirectories. This is equivalent to setting the :prop_tgt:`LABELS` target
+property and the :prop_test:`LABELS` test property on all targets and tests in
+the current directory and subdirectories. Note: Launchers must enabled to
+propagate labels to targets.
+
+The :variable:`CMAKE_DIRECTORY_LABELS` variable can be used to initialize this
+property.
+
+The list is reported in dashboard submissions.
diff --git a/share/cmake-3.18/Help/prop_dir/LINK_DIRECTORIES.rst b/share/cmake-3.22/Help/prop_dir/LINK_DIRECTORIES.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_dir/LINK_DIRECTORIES.rst
rename to share/cmake-3.22/Help/prop_dir/LINK_DIRECTORIES.rst
diff --git a/share/cmake-3.22/Help/prop_dir/LINK_OPTIONS.rst b/share/cmake-3.22/Help/prop_dir/LINK_OPTIONS.rst
new file mode 100644
index 0000000..3a5c72f
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_dir/LINK_OPTIONS.rst
@@ -0,0 +1,19 @@
+LINK_OPTIONS
+------------
+
+.. versionadded:: 3.13
+
+List of options to use for the link step of shared library, module
+and executable targets as well as the device link step.
+
+This property holds a :ref:`semicolon-separated list <CMake Language Lists>` of options
+given so far to the :command:`add_link_options` command.
+
+This property is used to initialize the :prop_tgt:`LINK_OPTIONS` target
+property when a target is created, which is used by the generators to set
+the options for the compiler.
+
+Contents of ``LINK_OPTIONS`` may use "generator expressions" with the
+syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)` manual
+for available expressions.  See the :manual:`cmake-buildsystem(7)` manual
+for more on defining buildsystem properties.
diff --git a/share/cmake-3.18/Help/prop_dir/LISTFILE_STACK.rst b/share/cmake-3.22/Help/prop_dir/LISTFILE_STACK.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_dir/LISTFILE_STACK.rst
rename to share/cmake-3.22/Help/prop_dir/LISTFILE_STACK.rst
diff --git a/share/cmake-3.18/Help/prop_dir/MACROS.rst b/share/cmake-3.22/Help/prop_dir/MACROS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_dir/MACROS.rst
rename to share/cmake-3.22/Help/prop_dir/MACROS.rst
diff --git a/share/cmake-3.18/Help/prop_dir/PARENT_DIRECTORY.rst b/share/cmake-3.22/Help/prop_dir/PARENT_DIRECTORY.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_dir/PARENT_DIRECTORY.rst
rename to share/cmake-3.22/Help/prop_dir/PARENT_DIRECTORY.rst
diff --git a/share/cmake-3.18/Help/prop_dir/RULE_LAUNCH_COMPILE.rst b/share/cmake-3.22/Help/prop_dir/RULE_LAUNCH_COMPILE.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_dir/RULE_LAUNCH_COMPILE.rst
rename to share/cmake-3.22/Help/prop_dir/RULE_LAUNCH_COMPILE.rst
diff --git a/share/cmake-3.18/Help/prop_dir/RULE_LAUNCH_CUSTOM.rst b/share/cmake-3.22/Help/prop_dir/RULE_LAUNCH_CUSTOM.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_dir/RULE_LAUNCH_CUSTOM.rst
rename to share/cmake-3.22/Help/prop_dir/RULE_LAUNCH_CUSTOM.rst
diff --git a/share/cmake-3.18/Help/prop_dir/RULE_LAUNCH_LINK.rst b/share/cmake-3.22/Help/prop_dir/RULE_LAUNCH_LINK.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_dir/RULE_LAUNCH_LINK.rst
rename to share/cmake-3.22/Help/prop_dir/RULE_LAUNCH_LINK.rst
diff --git a/share/cmake-3.22/Help/prop_dir/SOURCE_DIR.rst b/share/cmake-3.22/Help/prop_dir/SOURCE_DIR.rst
new file mode 100644
index 0000000..d73707d
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_dir/SOURCE_DIR.rst
@@ -0,0 +1,7 @@
+SOURCE_DIR
+----------
+
+.. versionadded:: 3.7
+
+This read-only directory property reports absolute path to the source
+directory on which it is read.
diff --git a/share/cmake-3.22/Help/prop_dir/SUBDIRECTORIES.rst b/share/cmake-3.22/Help/prop_dir/SUBDIRECTORIES.rst
new file mode 100644
index 0000000..71ea496
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_dir/SUBDIRECTORIES.rst
@@ -0,0 +1,17 @@
+SUBDIRECTORIES
+--------------
+
+.. versionadded:: 3.7
+
+This read-only directory property contains a
+:ref:`semicolon-separated list <CMake Language Lists>` of subdirectories processed so far by
+the :command:`add_subdirectory` or :command:`subdirs` commands.  Each entry is
+the absolute path to the source directory (containing the ``CMakeLists.txt``
+file).  This is suitable to pass to the :command:`get_property` command
+``DIRECTORY`` option.
+
+.. note::
+
+  The :command:`subdirs` command does not process its arguments until
+  after the calling directory is fully processed.  Therefore looking
+  up this property in the current directory will not see them.
diff --git a/share/cmake-3.22/Help/prop_dir/TESTS.rst b/share/cmake-3.22/Help/prop_dir/TESTS.rst
new file mode 100644
index 0000000..294be17
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_dir/TESTS.rst
@@ -0,0 +1,10 @@
+TESTS
+-----
+
+.. versionadded:: 3.12
+
+List of tests.
+
+This read-only property holds a
+:ref:`semicolon-separated list <CMake Language Lists>` of tests
+defined so far, in the current directory, by the :command:`add_test` command.
diff --git a/share/cmake-3.18/Help/prop_dir/TEST_INCLUDE_FILE.rst b/share/cmake-3.22/Help/prop_dir/TEST_INCLUDE_FILE.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_dir/TEST_INCLUDE_FILE.rst
rename to share/cmake-3.22/Help/prop_dir/TEST_INCLUDE_FILE.rst
diff --git a/share/cmake-3.22/Help/prop_dir/TEST_INCLUDE_FILES.rst b/share/cmake-3.22/Help/prop_dir/TEST_INCLUDE_FILES.rst
new file mode 100644
index 0000000..f9a66f4
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_dir/TEST_INCLUDE_FILES.rst
@@ -0,0 +1,9 @@
+TEST_INCLUDE_FILES
+------------------
+
+.. versionadded:: 3.10
+
+A list of cmake files that will be included when ctest is run.
+
+If you specify ``TEST_INCLUDE_FILES``, those files will be included and
+processed when ctest is run on the directory.
diff --git a/share/cmake-3.18/Help/prop_dir/VARIABLES.rst b/share/cmake-3.22/Help/prop_dir/VARIABLES.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_dir/VARIABLES.rst
rename to share/cmake-3.22/Help/prop_dir/VARIABLES.rst
diff --git a/share/cmake-3.18/Help/prop_dir/VS_GLOBAL_SECTION_POST_section.rst b/share/cmake-3.22/Help/prop_dir/VS_GLOBAL_SECTION_POST_section.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_dir/VS_GLOBAL_SECTION_POST_section.rst
rename to share/cmake-3.22/Help/prop_dir/VS_GLOBAL_SECTION_POST_section.rst
diff --git a/share/cmake-3.18/Help/prop_dir/VS_GLOBAL_SECTION_PRE_section.rst b/share/cmake-3.22/Help/prop_dir/VS_GLOBAL_SECTION_PRE_section.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_dir/VS_GLOBAL_SECTION_PRE_section.rst
rename to share/cmake-3.22/Help/prop_dir/VS_GLOBAL_SECTION_PRE_section.rst
diff --git a/share/cmake-3.22/Help/prop_dir/VS_STARTUP_PROJECT.rst b/share/cmake-3.22/Help/prop_dir/VS_STARTUP_PROJECT.rst
new file mode 100644
index 0000000..8a0c3c8
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_dir/VS_STARTUP_PROJECT.rst
@@ -0,0 +1,20 @@
+VS_STARTUP_PROJECT
+------------------
+
+.. versionadded:: 3.6
+
+Specify the default startup project in a Visual Studio solution.
+
+The :ref:`Visual Studio Generators` create a ``.sln`` file for each directory
+whose ``CMakeLists.txt`` file calls the :command:`project` command.  Set this
+property in the same directory as a :command:`project` command call (e.g. in
+the top-level ``CMakeLists.txt`` file) to specify the default startup project
+for the corresponding solution file.
+
+The property must be set to the name of an existing target.  This
+will cause that project to be listed first in the generated solution
+file causing Visual Studio to make it the startup project if the
+solution has never been opened before.
+
+If this property is not specified, then the ``ALL_BUILD`` project
+will be the default.
diff --git a/share/cmake-3.18/Help/prop_gbl/ALLOW_DUPLICATE_CUSTOM_TARGETS.rst b/share/cmake-3.22/Help/prop_gbl/ALLOW_DUPLICATE_CUSTOM_TARGETS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_gbl/ALLOW_DUPLICATE_CUSTOM_TARGETS.rst
rename to share/cmake-3.22/Help/prop_gbl/ALLOW_DUPLICATE_CUSTOM_TARGETS.rst
diff --git a/share/cmake-3.22/Help/prop_gbl/AUTOGEN_SOURCE_GROUP.rst b/share/cmake-3.22/Help/prop_gbl/AUTOGEN_SOURCE_GROUP.rst
new file mode 100644
index 0000000..07c732b
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_gbl/AUTOGEN_SOURCE_GROUP.rst
@@ -0,0 +1,18 @@
+AUTOGEN_SOURCE_GROUP
+--------------------
+
+.. versionadded:: 3.9
+
+Name of the  :command:`source_group` for :prop_tgt:`AUTOMOC`,
+:prop_tgt:`AUTORCC` and :prop_tgt:`AUTOUIC` generated files.
+
+Files generated by :prop_tgt:`AUTOMOC`, :prop_tgt:`AUTORCC` and
+:prop_tgt:`AUTOUIC` are not always known at configure time and therefore can't
+be passed to :command:`source_group`.
+:prop_gbl:`AUTOGEN_SOURCE_GROUP` can be used instead to generate or select
+a source group for :prop_tgt:`AUTOMOC`, :prop_tgt:`AUTORCC` and
+:prop_tgt:`AUTOUIC` generated files.
+
+For :prop_tgt:`AUTOMOC`, :prop_tgt:`AUTORCC` and :prop_tgt:`AUTOUIC` specific
+overrides see :prop_gbl:`AUTOMOC_SOURCE_GROUP`, :prop_gbl:`AUTORCC_SOURCE_GROUP`
+and :prop_gbl:`AUTOUIC_SOURCE_GROUP` respectively.
diff --git a/share/cmake-3.18/Help/prop_gbl/AUTOGEN_TARGETS_FOLDER.rst b/share/cmake-3.22/Help/prop_gbl/AUTOGEN_TARGETS_FOLDER.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_gbl/AUTOGEN_TARGETS_FOLDER.rst
rename to share/cmake-3.22/Help/prop_gbl/AUTOGEN_TARGETS_FOLDER.rst
diff --git a/share/cmake-3.22/Help/prop_gbl/AUTOMOC_SOURCE_GROUP.rst b/share/cmake-3.22/Help/prop_gbl/AUTOMOC_SOURCE_GROUP.rst
new file mode 100644
index 0000000..a266fde
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_gbl/AUTOMOC_SOURCE_GROUP.rst
@@ -0,0 +1,9 @@
+AUTOMOC_SOURCE_GROUP
+--------------------
+
+.. versionadded:: 3.9
+
+Name of the  :command:`source_group` for :prop_tgt:`AUTOMOC` generated files.
+
+When set this is used instead of :prop_gbl:`AUTOGEN_SOURCE_GROUP` for
+files generated by :prop_tgt:`AUTOMOC`.
diff --git a/share/cmake-3.18/Help/prop_gbl/AUTOMOC_TARGETS_FOLDER.rst b/share/cmake-3.22/Help/prop_gbl/AUTOMOC_TARGETS_FOLDER.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_gbl/AUTOMOC_TARGETS_FOLDER.rst
rename to share/cmake-3.22/Help/prop_gbl/AUTOMOC_TARGETS_FOLDER.rst
diff --git a/share/cmake-3.22/Help/prop_gbl/AUTORCC_SOURCE_GROUP.rst b/share/cmake-3.22/Help/prop_gbl/AUTORCC_SOURCE_GROUP.rst
new file mode 100644
index 0000000..54ebabb
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_gbl/AUTORCC_SOURCE_GROUP.rst
@@ -0,0 +1,9 @@
+AUTORCC_SOURCE_GROUP
+--------------------
+
+.. versionadded:: 3.9
+
+Name of the  :command:`source_group` for :prop_tgt:`AUTORCC` generated files.
+
+When set this is used instead of :prop_gbl:`AUTOGEN_SOURCE_GROUP` for
+files generated by :prop_tgt:`AUTORCC`.
diff --git a/share/cmake-3.22/Help/prop_gbl/AUTOUIC_SOURCE_GROUP.rst b/share/cmake-3.22/Help/prop_gbl/AUTOUIC_SOURCE_GROUP.rst
new file mode 100644
index 0000000..79ebfe0
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_gbl/AUTOUIC_SOURCE_GROUP.rst
@@ -0,0 +1,9 @@
+AUTOUIC_SOURCE_GROUP
+--------------------
+
+.. versionadded:: 3.21
+
+Name of the  :command:`source_group` for :prop_tgt:`AUTOUIC` generated files.
+
+When set this is used instead of :prop_gbl:`AUTOGEN_SOURCE_GROUP` for
+files generated by :prop_tgt:`AUTOUIC`.
diff --git a/share/cmake-3.22/Help/prop_gbl/CMAKE_CUDA_KNOWN_FEATURES.rst b/share/cmake-3.22/Help/prop_gbl/CMAKE_CUDA_KNOWN_FEATURES.rst
new file mode 100644
index 0000000..3a17973
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_gbl/CMAKE_CUDA_KNOWN_FEATURES.rst
@@ -0,0 +1,37 @@
+CMAKE_CUDA_KNOWN_FEATURES
+-------------------------
+
+.. versionadded:: 3.17
+
+List of CUDA features known to this version of CMake.
+
+The features listed in this global property may be known to be available to the
+CUDA compiler.  If the feature is available with the C++ compiler, it will
+be listed in the :variable:`CMAKE_CUDA_COMPILE_FEATURES` variable.
+
+The features listed here may be used with the :command:`target_compile_features`
+command.  See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
+
+
+The features known to this version of CMake are:
+
+``cuda_std_03``
+  Compiler mode is at least CUDA/C++ 03.
+
+``cuda_std_11``
+  Compiler mode is at least CUDA/C++ 11.
+
+``cuda_std_14``
+  Compiler mode is at least CUDA/C++ 14.
+
+``cuda_std_17``
+  Compiler mode is at least CUDA/C++ 17.
+
+``cuda_std_20``
+  Compiler mode is at least CUDA/C++ 20.
+
+``cuda_std_23``
+  .. versionadded:: 3.20
+
+  Compiler mode is at least CUDA/C++ 23.
diff --git a/share/cmake-3.22/Help/prop_gbl/CMAKE_CXX_KNOWN_FEATURES.rst b/share/cmake-3.22/Help/prop_gbl/CMAKE_CXX_KNOWN_FEATURES.rst
new file mode 100644
index 0000000..1a913fb
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_gbl/CMAKE_CXX_KNOWN_FEATURES.rst
@@ -0,0 +1,360 @@
+CMAKE_CXX_KNOWN_FEATURES
+------------------------
+
+.. versionadded:: 3.1
+
+List of C++ features known to this version of CMake.
+
+The features listed in this global property may be known to be available to the
+C++ compiler.  If the feature is available with the C++ compiler, it will
+be listed in the :variable:`CMAKE_CXX_COMPILE_FEATURES` variable.
+
+The features listed here may be used with the :command:`target_compile_features`
+command.  See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
+
+The features known to this version of CMake are listed below.
+
+High level meta features indicating C++ standard support
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.8
+
+The following meta features indicate general support for the associated
+language standard.  It reflects the language support claimed by the compiler,
+but it does not necessarily imply complete conformance to that standard.
+
+``cxx_std_98``
+  Compiler mode is at least C++ 98.
+
+``cxx_std_11``
+  Compiler mode is at least C++ 11.
+
+``cxx_std_14``
+  Compiler mode is at least C++ 14.
+
+``cxx_std_17``
+  Compiler mode is at least C++ 17.
+
+``cxx_std_20``
+  .. versionadded:: 3.12
+
+  Compiler mode is at least C++ 20.
+
+``cxx_std_23``
+  .. versionadded:: 3.20
+
+  Compiler mode is at least C++ 23.
+
+Low level individual compile features
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+For C++ 11 and C++ 14, compilers were sometimes slow to implement certain
+language features.  CMake provided some individual compile features to help
+projects determine whether specific features were available.  These individual
+features are now less relevant and projects should generally prefer to use the
+high level meta features instead.  Individual compile features are not provided
+for C++ 17 or later.
+
+See the :manual:`cmake-compile-features(7)` manual for further discussion of
+the use of individual compile features.
+
+Individual features from C++ 98
+"""""""""""""""""""""""""""""""
+
+``cxx_template_template_parameters``
+  Template template parameters, as defined in ``ISO/IEC 14882:1998``.
+
+
+Individual features from C++ 11
+"""""""""""""""""""""""""""""""
+
+``cxx_alias_templates``
+  Template aliases, as defined in N2258_.
+
+  .. _N2258: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf
+
+``cxx_alignas``
+  Alignment control ``alignas``, as defined in N2341_.
+
+  .. _N2341: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf
+
+``cxx_alignof``
+  Alignment control ``alignof``, as defined in N2341_.
+
+  .. _N2341: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf
+
+``cxx_attributes``
+  Generic attributes, as defined in N2761_.
+
+  .. _N2761: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf
+
+``cxx_auto_type``
+  Automatic type deduction, as defined in N1984_.
+
+  .. _N1984: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf
+
+``cxx_constexpr``
+  Constant expressions, as defined in N2235_.
+
+  .. _N2235: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf
+
+
+``cxx_decltype_incomplete_return_types``
+  Decltype on incomplete return types, as defined in N3276_.
+
+  .. _N3276 : http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3276.pdf
+
+``cxx_decltype``
+  Decltype, as defined in N2343_.
+
+  .. _N2343: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf
+
+``cxx_default_function_template_args``
+  Default template arguments for function templates, as defined in DR226_
+
+  .. _DR226: http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226
+
+``cxx_defaulted_functions``
+  Defaulted functions, as defined in N2346_.
+
+  .. _N2346: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm
+
+``cxx_defaulted_move_initializers``
+  Defaulted move initializers, as defined in N3053_.
+
+  .. _N3053: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html
+
+``cxx_delegating_constructors``
+  Delegating constructors, as defined in N1986_.
+
+  .. _N1986: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf
+
+``cxx_deleted_functions``
+  Deleted functions, as defined in N2346_.
+
+  .. _N2346: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm
+
+``cxx_enum_forward_declarations``
+  Enum forward declarations, as defined in N2764_.
+
+  .. _N2764: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf
+
+``cxx_explicit_conversions``
+  Explicit conversion operators, as defined in N2437_.
+
+  .. _N2437: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf
+
+``cxx_extended_friend_declarations``
+  Extended friend declarations, as defined in N1791_.
+
+  .. _N1791: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf
+
+``cxx_extern_templates``
+  Extern templates, as defined in N1987_.
+
+  .. _N1987: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm
+
+``cxx_final``
+  Override control ``final`` keyword, as defined in N2928_, N3206_ and N3272_.
+
+  .. _N2928: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm
+  .. _N3206: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm
+  .. _N3272: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm
+
+``cxx_func_identifier``
+  Predefined ``__func__`` identifier, as defined in N2340_.
+
+  .. _N2340: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm
+
+``cxx_generalized_initializers``
+  Initializer lists, as defined in N2672_.
+
+  .. _N2672: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm
+
+``cxx_inheriting_constructors``
+  Inheriting constructors, as defined in N2540_.
+
+  .. _N2540: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm
+
+``cxx_inline_namespaces``
+  Inline namespaces, as defined in N2535_.
+
+  .. _N2535: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm
+
+``cxx_lambdas``
+  Lambda functions, as defined in N2927_.
+
+  .. _N2927: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2927.pdf
+
+``cxx_local_type_template_args``
+  Local and unnamed types as template arguments, as defined in N2657_.
+
+  .. _N2657: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm
+
+``cxx_long_long_type``
+  ``long long`` type, as defined in N1811_.
+
+  .. _N1811: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf
+
+``cxx_noexcept``
+  Exception specifications, as defined in N3050_.
+
+  .. _N3050: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html
+
+``cxx_nonstatic_member_init``
+  Non-static data member initialization, as defined in N2756_.
+
+  .. _N2756: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2756.htm
+
+``cxx_nullptr``
+  Null pointer, as defined in N2431_.
+
+  .. _N2431: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf
+
+``cxx_override``
+  Override control ``override`` keyword, as defined in N2928_, N3206_
+  and N3272_.
+
+  .. _N2928: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm
+  .. _N3206: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm
+  .. _N3272: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm
+
+``cxx_range_for``
+  Range-based for, as defined in N2930_.
+
+  .. _N2930: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2930.html
+
+``cxx_raw_string_literals``
+  Raw string literals, as defined in N2442_.
+
+  .. _N2442: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm
+
+``cxx_reference_qualified_functions``
+  Reference qualified functions, as defined in N2439_.
+
+  .. _N2439: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm
+
+``cxx_right_angle_brackets``
+  Right angle bracket parsing, as defined in N1757_.
+
+  .. _N1757: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html
+
+``cxx_rvalue_references``
+  R-value references, as defined in N2118_.
+
+  .. _N2118: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html
+
+``cxx_sizeof_member``
+  Size of non-static data members, as defined in N2253_.
+
+  .. _N2253: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html
+
+``cxx_static_assert``
+  Static assert, as defined in N1720_.
+
+  .. _N1720: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html
+
+``cxx_strong_enums``
+  Strongly typed enums, as defined in N2347_.
+
+  .. _N2347: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf
+
+``cxx_thread_local``
+  Thread-local variables, as defined in N2659_.
+
+  .. _N2659: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm
+
+``cxx_trailing_return_types``
+  Automatic function return type, as defined in N2541_.
+
+  .. _N2541: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm
+
+``cxx_unicode_literals``
+  Unicode string literals, as defined in N2442_.
+
+  .. _N2442: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm
+
+``cxx_uniform_initialization``
+  Uniform initialization, as defined in N2640_.
+
+  .. _N2640: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2640.pdf
+
+``cxx_unrestricted_unions``
+  Unrestricted unions, as defined in N2544_.
+
+  .. _N2544: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf
+
+``cxx_user_literals``
+  User-defined literals, as defined in N2765_.
+
+  .. _N2765: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf
+
+``cxx_variadic_macros``
+  Variadic macros, as defined in N1653_.
+
+  .. _N1653: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm
+
+``cxx_variadic_templates``
+  Variadic templates, as defined in N2242_.
+
+  .. _N2242: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf
+
+
+Individual features from C++ 14
+"""""""""""""""""""""""""""""""
+
+``cxx_aggregate_default_initializers``
+  Aggregate default initializers, as defined in N3605_.
+
+  .. _N3605: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3605.html
+
+``cxx_attribute_deprecated``
+  ``[[deprecated]]`` attribute, as defined in N3760_.
+
+  .. _N3760: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3760.html
+
+``cxx_binary_literals``
+  Binary literals, as defined in N3472_.
+
+  .. _N3472: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3472.pdf
+
+``cxx_contextual_conversions``
+  Contextual conversions, as defined in N3323_.
+
+  .. _N3323: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3323.pdf
+
+``cxx_decltype_auto``
+  ``decltype(auto)`` semantics, as defined in N3638_.
+
+  .. _N3638: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3638.html
+
+``cxx_digit_separators``
+  Digit separators, as defined in N3781_.
+
+  .. _N3781: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3781.pdf
+
+``cxx_generic_lambdas``
+  Generic lambdas, as defined in N3649_.
+
+  .. _N3649: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3649.html
+
+``cxx_lambda_init_captures``
+  Initialized lambda captures, as defined in N3648_.
+
+  .. _N3648: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3648.html
+
+``cxx_relaxed_constexpr``
+  Relaxed constexpr, as defined in N3652_.
+
+  .. _N3652: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3652.html
+
+``cxx_return_type_deduction``
+  Return type deduction on normal functions, as defined in N3386_.
+
+  .. _N3386: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3386.html
+
+``cxx_variable_templates``
+  Variable templates, as defined in N3651_.
+
+  .. _N3651: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3651.pdf
diff --git a/share/cmake-3.22/Help/prop_gbl/CMAKE_C_KNOWN_FEATURES.rst b/share/cmake-3.22/Help/prop_gbl/CMAKE_C_KNOWN_FEATURES.rst
new file mode 100644
index 0000000..97da697
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_gbl/CMAKE_C_KNOWN_FEATURES.rst
@@ -0,0 +1,55 @@
+CMAKE_C_KNOWN_FEATURES
+----------------------
+
+.. versionadded:: 3.1
+
+List of C features known to this version of CMake.
+
+The features listed in this global property may be known to be available to the
+C compiler.  If the feature is available with the C compiler, it will
+be listed in the :variable:`CMAKE_C_COMPILE_FEATURES` variable.
+
+The features listed here may be used with the :command:`target_compile_features`
+command.  See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
+
+The features known to this version of CMake are listed below.
+
+High level meta features indicating C standard support
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.8
+
+``c_std_90``
+  Compiler mode is at least C 90.
+
+``c_std_99``
+  Compiler mode is at least C 99.
+
+``c_std_11``
+  Compiler mode is at least C 11.
+
+``c_std_17``
+  .. versionadded:: 3.21
+
+  Compiler mode is at least C 17.
+
+``c_std_23``
+  .. versionadded:: 3.21
+
+  Compiler mode is at least C 23.
+
+Low level individual compile features
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+``c_function_prototypes``
+  Function prototypes, as defined in ``ISO/IEC 9899:1990``.
+
+``c_restrict``
+  ``restrict`` keyword, as defined in ``ISO/IEC 9899:1999``.
+
+``c_static_assert``
+  Static assert, as defined in ``ISO/IEC 9899:2011``.
+
+``c_variadic_macros``
+  Variadic macros, as defined in ``ISO/IEC 9899:1999``.
diff --git a/share/cmake-3.22/Help/prop_gbl/CMAKE_ROLE.rst b/share/cmake-3.22/Help/prop_gbl/CMAKE_ROLE.rst
new file mode 100644
index 0000000..3f4492f
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_gbl/CMAKE_ROLE.rst
@@ -0,0 +1,22 @@
+CMAKE_ROLE
+----------
+
+.. versionadded:: 3.14
+
+Tells what mode the current running script is in. Could be one of several
+values:
+
+``PROJECT``
+  Running in project mode (processing a ``CMakeLists.txt`` file).
+
+``SCRIPT``
+  Running in ``-P`` script mode.
+
+``FIND_PACKAGE``
+  Running in ``--find-package`` mode.
+
+``CTEST``
+  Running in CTest script mode.
+
+``CPACK``
+  Running in CPack.
diff --git a/share/cmake-3.18/Help/prop_gbl/DEBUG_CONFIGURATIONS.rst b/share/cmake-3.22/Help/prop_gbl/DEBUG_CONFIGURATIONS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_gbl/DEBUG_CONFIGURATIONS.rst
rename to share/cmake-3.22/Help/prop_gbl/DEBUG_CONFIGURATIONS.rst
diff --git a/share/cmake-3.18/Help/prop_gbl/DISABLED_FEATURES.rst b/share/cmake-3.22/Help/prop_gbl/DISABLED_FEATURES.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_gbl/DISABLED_FEATURES.rst
rename to share/cmake-3.22/Help/prop_gbl/DISABLED_FEATURES.rst
diff --git a/share/cmake-3.22/Help/prop_gbl/ECLIPSE_EXTRA_CPROJECT_CONTENTS.rst b/share/cmake-3.22/Help/prop_gbl/ECLIPSE_EXTRA_CPROJECT_CONTENTS.rst
new file mode 100644
index 0000000..2f110a7
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_gbl/ECLIPSE_EXTRA_CPROJECT_CONTENTS.rst
@@ -0,0 +1,14 @@
+ECLIPSE_EXTRA_CPROJECT_CONTENTS
+-------------------------------
+
+.. versionadded:: 3.12
+
+Additional contents to be inserted into the generated Eclipse cproject file.
+
+The cproject file defines the CDT specific information. Some third party IDE's
+are based on Eclipse with the addition of other information specific to that IDE.
+Through this property, it is possible to add this additional contents to
+the generated project.
+It is expected to contain valid XML.
+
+Also see the :prop_gbl:`ECLIPSE_EXTRA_NATURES` property.
diff --git a/share/cmake-3.18/Help/prop_gbl/ECLIPSE_EXTRA_NATURES.rst b/share/cmake-3.22/Help/prop_gbl/ECLIPSE_EXTRA_NATURES.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_gbl/ECLIPSE_EXTRA_NATURES.rst
rename to share/cmake-3.22/Help/prop_gbl/ECLIPSE_EXTRA_NATURES.rst
diff --git a/share/cmake-3.18/Help/prop_gbl/ENABLED_FEATURES.rst b/share/cmake-3.22/Help/prop_gbl/ENABLED_FEATURES.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_gbl/ENABLED_FEATURES.rst
rename to share/cmake-3.22/Help/prop_gbl/ENABLED_FEATURES.rst
diff --git a/share/cmake-3.18/Help/prop_gbl/ENABLED_LANGUAGES.rst b/share/cmake-3.22/Help/prop_gbl/ENABLED_LANGUAGES.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_gbl/ENABLED_LANGUAGES.rst
rename to share/cmake-3.22/Help/prop_gbl/ENABLED_LANGUAGES.rst
diff --git a/share/cmake-3.22/Help/prop_gbl/FIND_LIBRARY_USE_LIB32_PATHS.rst b/share/cmake-3.22/Help/prop_gbl/FIND_LIBRARY_USE_LIB32_PATHS.rst
new file mode 100644
index 0000000..f6cad66
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_gbl/FIND_LIBRARY_USE_LIB32_PATHS.rst
@@ -0,0 +1,14 @@
+FIND_LIBRARY_USE_LIB32_PATHS
+----------------------------
+
+.. versionadded:: 3.7
+
+Whether the :command:`find_library` command should automatically search
+``lib32`` directories.
+
+``FIND_LIBRARY_USE_LIB32_PATHS`` is a boolean specifying whether the
+:command:`find_library` command should automatically search the ``lib32``
+variant of directories called ``lib`` in the search path when building 32-bit
+binaries.
+
+See also the :variable:`CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX` variable.
diff --git a/share/cmake-3.18/Help/prop_gbl/FIND_LIBRARY_USE_LIB64_PATHS.rst b/share/cmake-3.22/Help/prop_gbl/FIND_LIBRARY_USE_LIB64_PATHS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_gbl/FIND_LIBRARY_USE_LIB64_PATHS.rst
rename to share/cmake-3.22/Help/prop_gbl/FIND_LIBRARY_USE_LIB64_PATHS.rst
diff --git a/share/cmake-3.22/Help/prop_gbl/FIND_LIBRARY_USE_LIBX32_PATHS.rst b/share/cmake-3.22/Help/prop_gbl/FIND_LIBRARY_USE_LIBX32_PATHS.rst
new file mode 100644
index 0000000..851f859
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_gbl/FIND_LIBRARY_USE_LIBX32_PATHS.rst
@@ -0,0 +1,14 @@
+FIND_LIBRARY_USE_LIBX32_PATHS
+-----------------------------
+
+.. versionadded:: 3.9
+
+Whether the :command:`find_library` command should automatically search
+``libx32`` directories.
+
+``FIND_LIBRARY_USE_LIBX32_PATHS`` is a boolean specifying whether the
+:command:`find_library` command should automatically search the ``libx32``
+variant of directories called ``lib`` in the search path when building
+x32-abi binaries.
+
+See also the :variable:`CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX` variable.
diff --git a/share/cmake-3.18/Help/prop_gbl/FIND_LIBRARY_USE_OPENBSD_VERSIONING.rst b/share/cmake-3.22/Help/prop_gbl/FIND_LIBRARY_USE_OPENBSD_VERSIONING.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_gbl/FIND_LIBRARY_USE_OPENBSD_VERSIONING.rst
rename to share/cmake-3.22/Help/prop_gbl/FIND_LIBRARY_USE_OPENBSD_VERSIONING.rst
diff --git a/share/cmake-3.22/Help/prop_gbl/GENERATOR_IS_MULTI_CONFIG.rst b/share/cmake-3.22/Help/prop_gbl/GENERATOR_IS_MULTI_CONFIG.rst
new file mode 100644
index 0000000..761a1dd
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_gbl/GENERATOR_IS_MULTI_CONFIG.rst
@@ -0,0 +1,15 @@
+GENERATOR_IS_MULTI_CONFIG
+-------------------------
+
+.. versionadded:: 3.9
+
+Read-only property that is true on multi-configuration generators.
+
+True when using a multi-configuration generator such as:
+
+* :generator:`Ninja Multi-Config`
+* :ref:`Visual Studio Generators`
+* :generator:`Xcode`
+
+Multi-config generators use :variable:`CMAKE_CONFIGURATION_TYPES`
+as the set of configurations and ignore :variable:`CMAKE_BUILD_TYPE`.
diff --git a/share/cmake-3.18/Help/prop_gbl/GLOBAL_DEPENDS_DEBUG_MODE.rst b/share/cmake-3.22/Help/prop_gbl/GLOBAL_DEPENDS_DEBUG_MODE.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_gbl/GLOBAL_DEPENDS_DEBUG_MODE.rst
rename to share/cmake-3.22/Help/prop_gbl/GLOBAL_DEPENDS_DEBUG_MODE.rst
diff --git a/share/cmake-3.18/Help/prop_gbl/GLOBAL_DEPENDS_NO_CYCLES.rst b/share/cmake-3.22/Help/prop_gbl/GLOBAL_DEPENDS_NO_CYCLES.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_gbl/GLOBAL_DEPENDS_NO_CYCLES.rst
rename to share/cmake-3.22/Help/prop_gbl/GLOBAL_DEPENDS_NO_CYCLES.rst
diff --git a/share/cmake-3.18/Help/prop_gbl/IN_TRY_COMPILE.rst b/share/cmake-3.22/Help/prop_gbl/IN_TRY_COMPILE.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_gbl/IN_TRY_COMPILE.rst
rename to share/cmake-3.22/Help/prop_gbl/IN_TRY_COMPILE.rst
diff --git a/share/cmake-3.18/Help/prop_gbl/JOB_POOLS.rst b/share/cmake-3.22/Help/prop_gbl/JOB_POOLS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_gbl/JOB_POOLS.rst
rename to share/cmake-3.22/Help/prop_gbl/JOB_POOLS.rst
diff --git a/share/cmake-3.18/Help/prop_gbl/PACKAGES_FOUND.rst b/share/cmake-3.22/Help/prop_gbl/PACKAGES_FOUND.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_gbl/PACKAGES_FOUND.rst
rename to share/cmake-3.22/Help/prop_gbl/PACKAGES_FOUND.rst
diff --git a/share/cmake-3.18/Help/prop_gbl/PACKAGES_NOT_FOUND.rst b/share/cmake-3.22/Help/prop_gbl/PACKAGES_NOT_FOUND.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_gbl/PACKAGES_NOT_FOUND.rst
rename to share/cmake-3.22/Help/prop_gbl/PACKAGES_NOT_FOUND.rst
diff --git a/share/cmake-3.18/Help/prop_gbl/PREDEFINED_TARGETS_FOLDER.rst b/share/cmake-3.22/Help/prop_gbl/PREDEFINED_TARGETS_FOLDER.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_gbl/PREDEFINED_TARGETS_FOLDER.rst
rename to share/cmake-3.22/Help/prop_gbl/PREDEFINED_TARGETS_FOLDER.rst
diff --git a/share/cmake-3.18/Help/prop_gbl/REPORT_UNDEFINED_PROPERTIES.rst b/share/cmake-3.22/Help/prop_gbl/REPORT_UNDEFINED_PROPERTIES.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_gbl/REPORT_UNDEFINED_PROPERTIES.rst
rename to share/cmake-3.22/Help/prop_gbl/REPORT_UNDEFINED_PROPERTIES.rst
diff --git a/share/cmake-3.18/Help/prop_gbl/RULE_LAUNCH_COMPILE.rst b/share/cmake-3.22/Help/prop_gbl/RULE_LAUNCH_COMPILE.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_gbl/RULE_LAUNCH_COMPILE.rst
rename to share/cmake-3.22/Help/prop_gbl/RULE_LAUNCH_COMPILE.rst
diff --git a/share/cmake-3.18/Help/prop_gbl/RULE_LAUNCH_CUSTOM.rst b/share/cmake-3.22/Help/prop_gbl/RULE_LAUNCH_CUSTOM.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_gbl/RULE_LAUNCH_CUSTOM.rst
rename to share/cmake-3.22/Help/prop_gbl/RULE_LAUNCH_CUSTOM.rst
diff --git a/share/cmake-3.18/Help/prop_gbl/RULE_LAUNCH_LINK.rst b/share/cmake-3.22/Help/prop_gbl/RULE_LAUNCH_LINK.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_gbl/RULE_LAUNCH_LINK.rst
rename to share/cmake-3.22/Help/prop_gbl/RULE_LAUNCH_LINK.rst
diff --git a/share/cmake-3.18/Help/prop_gbl/RULE_MESSAGES.rst b/share/cmake-3.22/Help/prop_gbl/RULE_MESSAGES.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_gbl/RULE_MESSAGES.rst
rename to share/cmake-3.22/Help/prop_gbl/RULE_MESSAGES.rst
diff --git a/share/cmake-3.18/Help/prop_gbl/TARGET_ARCHIVES_MAY_BE_SHARED_LIBS.rst b/share/cmake-3.22/Help/prop_gbl/TARGET_ARCHIVES_MAY_BE_SHARED_LIBS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_gbl/TARGET_ARCHIVES_MAY_BE_SHARED_LIBS.rst
rename to share/cmake-3.22/Help/prop_gbl/TARGET_ARCHIVES_MAY_BE_SHARED_LIBS.rst
diff --git a/share/cmake-3.22/Help/prop_gbl/TARGET_MESSAGES.rst b/share/cmake-3.22/Help/prop_gbl/TARGET_MESSAGES.rst
new file mode 100644
index 0000000..bb91772
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_gbl/TARGET_MESSAGES.rst
@@ -0,0 +1,22 @@
+TARGET_MESSAGES
+---------------
+
+.. versionadded:: 3.4
+
+Specify whether to report the completion of each target.
+
+This property specifies whether :ref:`Makefile Generators` should
+add a progress message describing that each target has been completed.
+If the property is not set the default is ``ON``.  Set the property
+to ``OFF`` to disable target completion messages.
+
+This option is intended to reduce build output when little or no
+work needs to be done to bring the build tree up to date.
+
+If a ``CMAKE_TARGET_MESSAGES`` cache entry exists its value
+initializes the value of this property.
+
+Non-Makefile generators currently ignore this property.
+
+See the counterpart property :prop_gbl:`RULE_MESSAGES` to disable
+everything except for target completion messages.
diff --git a/share/cmake-3.18/Help/prop_gbl/TARGET_SUPPORTS_SHARED_LIBS.rst b/share/cmake-3.22/Help/prop_gbl/TARGET_SUPPORTS_SHARED_LIBS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_gbl/TARGET_SUPPORTS_SHARED_LIBS.rst
rename to share/cmake-3.22/Help/prop_gbl/TARGET_SUPPORTS_SHARED_LIBS.rst
diff --git a/share/cmake-3.18/Help/prop_gbl/USE_FOLDERS.rst b/share/cmake-3.22/Help/prop_gbl/USE_FOLDERS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_gbl/USE_FOLDERS.rst
rename to share/cmake-3.22/Help/prop_gbl/USE_FOLDERS.rst
diff --git a/share/cmake-3.22/Help/prop_gbl/XCODE_EMIT_EFFECTIVE_PLATFORM_NAME.rst b/share/cmake-3.22/Help/prop_gbl/XCODE_EMIT_EFFECTIVE_PLATFORM_NAME.rst
new file mode 100644
index 0000000..392b704
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_gbl/XCODE_EMIT_EFFECTIVE_PLATFORM_NAME.rst
@@ -0,0 +1,27 @@
+XCODE_EMIT_EFFECTIVE_PLATFORM_NAME
+----------------------------------
+
+.. versionadded:: 3.8
+
+Control emission of ``EFFECTIVE_PLATFORM_NAME`` by the :generator:`Xcode`
+generator.
+
+It is required for building the same target with multiple SDKs. A
+common use case is the parallel use of ``iphoneos`` and
+``iphonesimulator`` SDKs.
+
+Three different states possible that control when the :generator:`Xcode`
+generator emits the ``EFFECTIVE_PLATFORM_NAME`` variable:
+
+- If set to ``ON`` it will always be emitted
+- If set to ``OFF`` it will never be emitted
+- If unset (the default) it will only be emitted when the project was
+  configured for an embedded Xcode SDK like iOS, tvOS, watchOS or any
+  of the simulators.
+
+.. note::
+
+  When this behavior is enable for generated Xcode projects, the
+  ``EFFECTIVE_PLATFORM_NAME`` variable will leak into
+  :manual:`Generator expressions <cmake-generator-expressions(7)>`
+  like ``TARGET_FILE`` and will render those mostly unusable.
diff --git a/share/cmake-3.22/Help/prop_inst/CPACK_DESKTOP_SHORTCUTS.rst b/share/cmake-3.22/Help/prop_inst/CPACK_DESKTOP_SHORTCUTS.rst
new file mode 100644
index 0000000..55e9a20
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_inst/CPACK_DESKTOP_SHORTCUTS.rst
@@ -0,0 +1,9 @@
+CPACK_DESKTOP_SHORTCUTS
+-----------------------
+
+.. versionadded:: 3.3
+
+Species a list of shortcut names that should be created on the `Desktop`
+for this file.
+
+The property is currently only supported by the :cpack_gen:`CPack WIX Generator`.
diff --git a/share/cmake-3.22/Help/prop_inst/CPACK_NEVER_OVERWRITE.rst b/share/cmake-3.22/Help/prop_inst/CPACK_NEVER_OVERWRITE.rst
new file mode 100644
index 0000000..12eef9e
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_inst/CPACK_NEVER_OVERWRITE.rst
@@ -0,0 +1,8 @@
+CPACK_NEVER_OVERWRITE
+---------------------
+
+.. versionadded:: 3.1
+
+Request that this file not be overwritten on install or reinstall.
+
+The property is currently only supported by the :cpack_gen:`CPack WIX Generator`.
diff --git a/share/cmake-3.22/Help/prop_inst/CPACK_PERMANENT.rst b/share/cmake-3.22/Help/prop_inst/CPACK_PERMANENT.rst
new file mode 100644
index 0000000..e89c552
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_inst/CPACK_PERMANENT.rst
@@ -0,0 +1,8 @@
+CPACK_PERMANENT
+---------------
+
+.. versionadded:: 3.1
+
+Request that this file not be removed on uninstall.
+
+The property is currently only supported by the :cpack_gen:`CPack WIX Generator`.
diff --git a/share/cmake-3.22/Help/prop_inst/CPACK_STARTUP_SHORTCUTS.rst b/share/cmake-3.22/Help/prop_inst/CPACK_STARTUP_SHORTCUTS.rst
new file mode 100644
index 0000000..e896acd
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_inst/CPACK_STARTUP_SHORTCUTS.rst
@@ -0,0 +1,9 @@
+CPACK_STARTUP_SHORTCUTS
+-----------------------
+
+.. versionadded:: 3.3
+
+Species a list of shortcut names that should be created in the `Startup` folder
+for this file.
+
+The property is currently only supported by the :cpack_gen:`CPack WIX Generator`.
diff --git a/share/cmake-3.22/Help/prop_inst/CPACK_START_MENU_SHORTCUTS.rst b/share/cmake-3.22/Help/prop_inst/CPACK_START_MENU_SHORTCUTS.rst
new file mode 100644
index 0000000..fb8807f
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_inst/CPACK_START_MENU_SHORTCUTS.rst
@@ -0,0 +1,9 @@
+CPACK_START_MENU_SHORTCUTS
+--------------------------
+
+.. versionadded:: 3.3
+
+Species a list of shortcut names that should be created in the `Start Menu`
+for this file.
+
+The property is currently only supported by the :cpack_gen:`CPack WIX Generator`.
diff --git a/share/cmake-3.22/Help/prop_inst/CPACK_WIX_ACL.rst b/share/cmake-3.22/Help/prop_inst/CPACK_WIX_ACL.rst
new file mode 100644
index 0000000..8b4fb5c
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_inst/CPACK_WIX_ACL.rst
@@ -0,0 +1,23 @@
+CPACK_WIX_ACL
+-------------
+
+.. versionadded:: 3.1
+
+Specifies access permissions for files or directories
+installed by a WiX installer.
+
+The property can contain multiple list entries,
+each of which has to match the following format.
+
+::
+
+  <user>[@<domain>]=<permission>[,<permission>]
+
+``<user>`` and ``<domain>`` specify the windows user and domain for which the
+``<Permission>`` element should be generated.
+
+``<permission>`` is any of the YesNoType attributes listed here::
+
+ http://wixtoolset.org/documentation/manual/v3/xsd/wix/permission.html
+
+The property is currently only supported by the :cpack_gen:`CPack WIX Generator`.
diff --git a/share/cmake-3.18/Help/prop_sf/ABSTRACT.rst b/share/cmake-3.22/Help/prop_sf/ABSTRACT.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_sf/ABSTRACT.rst
rename to share/cmake-3.22/Help/prop_sf/ABSTRACT.rst
diff --git a/share/cmake-3.18/Help/prop_sf/AUTORCC_OPTIONS.rst b/share/cmake-3.22/Help/prop_sf/AUTORCC_OPTIONS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_sf/AUTORCC_OPTIONS.rst
rename to share/cmake-3.22/Help/prop_sf/AUTORCC_OPTIONS.rst
diff --git a/share/cmake-3.18/Help/prop_sf/AUTOUIC_OPTIONS.rst b/share/cmake-3.22/Help/prop_sf/AUTOUIC_OPTIONS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_sf/AUTOUIC_OPTIONS.rst
rename to share/cmake-3.22/Help/prop_sf/AUTOUIC_OPTIONS.rst
diff --git a/share/cmake-3.18/Help/prop_sf/COMPILE_DEFINITIONS.rst b/share/cmake-3.22/Help/prop_sf/COMPILE_DEFINITIONS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_sf/COMPILE_DEFINITIONS.rst
rename to share/cmake-3.22/Help/prop_sf/COMPILE_DEFINITIONS.rst
diff --git a/share/cmake-3.18/Help/prop_sf/COMPILE_DEFINITIONS_CONFIG.rst b/share/cmake-3.22/Help/prop_sf/COMPILE_DEFINITIONS_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_sf/COMPILE_DEFINITIONS_CONFIG.rst
rename to share/cmake-3.22/Help/prop_sf/COMPILE_DEFINITIONS_CONFIG.rst
diff --git a/share/cmake-3.22/Help/prop_sf/COMPILE_FLAGS.rst b/share/cmake-3.22/Help/prop_sf/COMPILE_FLAGS.rst
new file mode 100644
index 0000000..eefe7bf
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/COMPILE_FLAGS.rst
@@ -0,0 +1,22 @@
+COMPILE_FLAGS
+-------------
+
+Additional flags to be added when compiling this source file.
+
+The ``COMPILE_FLAGS`` property, managed as a string, sets additional compiler
+flags used that will be added to the list of compile flags when this source
+file builds.  The flags will be added after target-wide flags (except in
+some cases not supported by the :generator:`Visual Studio 9 2008` generator).
+
+Use :prop_sf:`COMPILE_DEFINITIONS` to pass additional preprocessor definitions.
+
+Contents of ``COMPILE_FLAGS`` may use "generator expressions"
+with the syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)`
+manual for available expressions.  However, :generator:`Xcode`
+does not support per-config per-source settings, so expressions
+that depend on the build configuration are not allowed with that
+generator.
+
+.. note::
+
+  This property has been superseded by the :prop_sf:`COMPILE_OPTIONS` property.
diff --git a/share/cmake-3.22/Help/prop_sf/COMPILE_OPTIONS.rst b/share/cmake-3.22/Help/prop_sf/COMPILE_OPTIONS.rst
new file mode 100644
index 0000000..84c543a
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/COMPILE_OPTIONS.rst
@@ -0,0 +1,35 @@
+COMPILE_OPTIONS
+---------------
+
+.. versionadded:: 3.11
+
+List of additional options to pass to the compiler.
+
+This property holds a :ref:`semicolon-separated list <CMake Language Lists>`
+of options and will be added to the list of compile flags when this source
+file builds.  The options will be added after target-wide options (except in
+some cases not supported by the :generator:`Visual Studio 9 2008` generator).
+
+Contents of ``COMPILE_OPTIONS`` may use "generator expressions" with the
+syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)` manual
+for available expressions.  However, :generator:`Xcode`
+does not support per-config per-source settings, so expressions
+that depend on the build configuration are not allowed with that
+generator.
+
+Usage example:
+
+.. code-block:: cmake
+
+  set_source_files_properties(foo.cpp PROPERTIES COMPILE_OPTIONS "-Wno-unused-parameter;-Wno-missing-field-initializer")
+
+Related properties:
+
+* Prefer this property over :prop_sf:`COMPILE_FLAGS`.
+* Use :prop_sf:`COMPILE_DEFINITIONS` to pass additional preprocessor definitions.
+* Use :prop_sf:`INCLUDE_DIRECTORIES` to pass additional include directories.
+
+Related commands:
+
+* :command:`add_compile_options` for directory-wide settings
+* :command:`target_compile_options` for target-specific settings
diff --git a/share/cmake-3.18/Help/prop_sf/EXTERNAL_OBJECT.rst b/share/cmake-3.22/Help/prop_sf/EXTERNAL_OBJECT.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_sf/EXTERNAL_OBJECT.rst
rename to share/cmake-3.22/Help/prop_sf/EXTERNAL_OBJECT.rst
diff --git a/share/cmake-3.18/Help/prop_sf/Fortran_FORMAT.rst b/share/cmake-3.22/Help/prop_sf/Fortran_FORMAT.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_sf/Fortran_FORMAT.rst
rename to share/cmake-3.22/Help/prop_sf/Fortran_FORMAT.rst
diff --git a/share/cmake-3.22/Help/prop_sf/Fortran_PREPROCESS.rst b/share/cmake-3.22/Help/prop_sf/Fortran_PREPROCESS.rst
new file mode 100644
index 0000000..548a97b
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/Fortran_PREPROCESS.rst
@@ -0,0 +1,19 @@
+Fortran_PREPROCESS
+------------------
+
+.. versionadded:: 3.18
+
+Control whether the Fortran source file should be unconditionally preprocessed.
+
+If unset or empty, rely on the compiler to determine whether the file
+should be preprocessed. If explicitly set to ``OFF`` then the file
+does not need to be preprocessed. If explicitly set to ``ON``, then
+the file does need to be preprocessed as part of the compilation step.
+
+When using the :generator:`Ninja` generator, all source files are
+first preprocessed in order to generate module dependency
+information. Setting this property to ``OFF`` will make ``Ninja``
+skip this step.
+
+Consider using the target-wide :prop_tgt:`Fortran_PREPROCESS` property
+if all source files in a target need to be preprocessed.
diff --git a/share/cmake-3.22/Help/prop_sf/GENERATED.rst b/share/cmake-3.22/Help/prop_sf/GENERATED.rst
new file mode 100644
index 0000000..216dfe8
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/GENERATED.rst
@@ -0,0 +1,48 @@
+GENERATED
+---------
+
+Is this source file generated as part of the build or CMake process.
+
+.. versionchanged:: 3.20
+  The GENERATED source file property is now visible in all directories.
+
+Tells the internal CMake engine that a source file is generated by an outside
+process such as another build step, or the execution of CMake itself.
+This information is then used to exempt the file from any existence or
+validity checks.
+
+Any file that is
+
+- created by the execution of commands such as
+  :command:`add_custom_command` and :command:`file(GENERATE)`
+- listed as one of the ``BYPRODUCTS`` of an :command:`add_custom_command`
+  or :command:`add_custom_target` command, or
+- created by a CMake ``AUTOGEN`` operation such as :prop_tgt:`AUTOMOC`,
+  :prop_tgt:`AUTORCC`, or :prop_tgt:`AUTOUIC`
+
+will be marked with the ``GENERATED`` property.
+
+When a generated file created as the ``OUTPUT`` of an
+:command:`add_custom_command` command is explicitly listed as a source file
+for any target in the same directory scope (which usually means the same
+``CMakeLists.txt`` file), CMake will automatically create a dependency to
+make sure the file is generated before building that target.
+
+The :ref:`Makefile Generators` will remove ``GENERATED`` files during
+``make clean``.
+
+Generated sources may be hidden in some IDE tools, while in others they might
+be shown. For the special case of sources generated by CMake's :prop_tgt:`AUTOMOC`,
+:prop_tgt:`AUTORCC` or :prop_tgt:`AUTOUIC` functionality, the
+:prop_gbl:`AUTOGEN_SOURCE_GROUP`, :prop_gbl:`AUTOMOC_SOURCE_GROUP`,
+:prop_gbl:`AUTORCC_SOURCE_GROUP` and :prop_gbl:`AUTOUIC_SOURCE_GROUP` target
+properties may influence where the generated sources are grouped in the project's
+file lists.
+
+.. note::
+
+  Starting with CMake 3.20 the ``GENERATED`` source file property can be set
+  and retrieved from any directory scope. It is an all-or-nothing property.
+  It also can no longer be removed or unset if it was set to ``TRUE``. Policy
+  :policy:`CMP0118` was introduced to allow supporting the ``OLD`` behavior
+  for some time.
diff --git a/share/cmake-3.18/Help/prop_sf/HEADER_FILE_ONLY.rst b/share/cmake-3.22/Help/prop_sf/HEADER_FILE_ONLY.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_sf/HEADER_FILE_ONLY.rst
rename to share/cmake-3.22/Help/prop_sf/HEADER_FILE_ONLY.rst
diff --git a/share/cmake-3.22/Help/prop_sf/INCLUDE_DIRECTORIES.rst b/share/cmake-3.22/Help/prop_sf/INCLUDE_DIRECTORIES.rst
new file mode 100644
index 0000000..89ffd15
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/INCLUDE_DIRECTORIES.rst
@@ -0,0 +1,20 @@
+INCLUDE_DIRECTORIES
+-------------------
+
+.. versionadded:: 3.11
+
+List of preprocessor include file search directories.
+
+This property holds a :ref:`semicolon-separated list <CMake Language Lists>` of paths
+and will be added to the list of include directories when this
+source file builds. These directories will take precedence over directories
+defined at target level except for :generator:`Xcode` generator due to technical
+limitations.
+
+Relative paths should not be added to this property directly.
+
+Contents of ``INCLUDE_DIRECTORIES`` may use "generator expressions" with
+the syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)` manual
+for available expressions.  However, :generator:`Xcode` does not support
+per-config per-source settings, so expressions that depend on the build
+configuration are not allowed with that generator.
diff --git a/share/cmake-3.18/Help/prop_sf/KEEP_EXTENSION.rst b/share/cmake-3.22/Help/prop_sf/KEEP_EXTENSION.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_sf/KEEP_EXTENSION.rst
rename to share/cmake-3.22/Help/prop_sf/KEEP_EXTENSION.rst
diff --git a/share/cmake-3.18/Help/prop_sf/LABELS.rst b/share/cmake-3.22/Help/prop_sf/LABELS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_sf/LABELS.rst
rename to share/cmake-3.22/Help/prop_sf/LABELS.rst
diff --git a/share/cmake-3.22/Help/prop_sf/LANGUAGE.rst b/share/cmake-3.22/Help/prop_sf/LANGUAGE.rst
new file mode 100644
index 0000000..a9b5638
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/LANGUAGE.rst
@@ -0,0 +1,17 @@
+LANGUAGE
+--------
+
+Specify the programming language in which a source file is written.
+
+A property that can be set to indicate what programming language the
+source file is.  If it is not set the language is determined based on
+the file extension.  Typical values are ``CXX`` (i.e.  C++), ``C``,
+``CSharp``, ``CUDA``, ``Fortran``, ``HIP``, ``ISPC``, and ``ASM``.  Setting
+this property for a file means this file will be compiled.  Do not set this
+for headers or files that should not be compiled.
+
+.. versionchanged:: 3.20
+  Setting this property causes the source file to be compiled as the
+  specified language, using explicit flags if possible.  Previously it
+  only caused the specified language's compiler to be used.
+  See policy :policy:`CMP0119`.
diff --git a/share/cmake-3.18/Help/prop_sf/LOCATION.rst b/share/cmake-3.22/Help/prop_sf/LOCATION.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_sf/LOCATION.rst
rename to share/cmake-3.22/Help/prop_sf/LOCATION.rst
diff --git a/share/cmake-3.18/Help/prop_sf/MACOSX_PACKAGE_LOCATION.rst b/share/cmake-3.22/Help/prop_sf/MACOSX_PACKAGE_LOCATION.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_sf/MACOSX_PACKAGE_LOCATION.rst
rename to share/cmake-3.22/Help/prop_sf/MACOSX_PACKAGE_LOCATION.rst
diff --git a/share/cmake-3.18/Help/prop_sf/OBJECT_DEPENDS.rst b/share/cmake-3.22/Help/prop_sf/OBJECT_DEPENDS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_sf/OBJECT_DEPENDS.rst
rename to share/cmake-3.22/Help/prop_sf/OBJECT_DEPENDS.rst
diff --git a/share/cmake-3.18/Help/prop_sf/OBJECT_OUTPUTS.rst b/share/cmake-3.22/Help/prop_sf/OBJECT_OUTPUTS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_sf/OBJECT_OUTPUTS.rst
rename to share/cmake-3.22/Help/prop_sf/OBJECT_OUTPUTS.rst
diff --git a/share/cmake-3.22/Help/prop_sf/SKIP_AUTOGEN.rst b/share/cmake-3.22/Help/prop_sf/SKIP_AUTOGEN.rst
new file mode 100644
index 0000000..2173f59
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/SKIP_AUTOGEN.rst
@@ -0,0 +1,19 @@
+SKIP_AUTOGEN
+------------
+
+.. versionadded:: 3.8
+
+Exclude the source file from :prop_tgt:`AUTOMOC`, :prop_tgt:`AUTOUIC` and
+:prop_tgt:`AUTORCC` processing (for Qt projects).
+
+For finer exclusion control see :prop_sf:`SKIP_AUTOMOC`,
+:prop_sf:`SKIP_AUTOUIC` and :prop_sf:`SKIP_AUTORCC`.
+
+EXAMPLE
+^^^^^^^
+
+.. code-block:: cmake
+
+  # ...
+  set_property(SOURCE file.h PROPERTY SKIP_AUTOGEN ON)
+  # ...
diff --git a/share/cmake-3.22/Help/prop_sf/SKIP_AUTOMOC.rst b/share/cmake-3.22/Help/prop_sf/SKIP_AUTOMOC.rst
new file mode 100644
index 0000000..e92cfe0
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/SKIP_AUTOMOC.rst
@@ -0,0 +1,17 @@
+SKIP_AUTOMOC
+------------
+
+.. versionadded:: 3.8
+
+Exclude the source file from :prop_tgt:`AUTOMOC` processing (for Qt projects).
+
+For broader exclusion control see :prop_sf:`SKIP_AUTOGEN`.
+
+EXAMPLE
+^^^^^^^
+
+.. code-block:: cmake
+
+  # ...
+  set_property(SOURCE file.h PROPERTY SKIP_AUTOMOC ON)
+  # ...
diff --git a/share/cmake-3.22/Help/prop_sf/SKIP_AUTORCC.rst b/share/cmake-3.22/Help/prop_sf/SKIP_AUTORCC.rst
new file mode 100644
index 0000000..2829c25
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/SKIP_AUTORCC.rst
@@ -0,0 +1,17 @@
+SKIP_AUTORCC
+------------
+
+.. versionadded:: 3.8
+
+Exclude the source file from :prop_tgt:`AUTORCC` processing (for Qt projects).
+
+For broader exclusion control see :prop_sf:`SKIP_AUTOGEN`.
+
+EXAMPLE
+^^^^^^^
+
+.. code-block:: cmake
+
+  # ...
+  set_property(SOURCE file.qrc PROPERTY SKIP_AUTORCC ON)
+  # ...
diff --git a/share/cmake-3.22/Help/prop_sf/SKIP_AUTOUIC.rst b/share/cmake-3.22/Help/prop_sf/SKIP_AUTOUIC.rst
new file mode 100644
index 0000000..ae9725a
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/SKIP_AUTOUIC.rst
@@ -0,0 +1,22 @@
+SKIP_AUTOUIC
+------------
+
+.. versionadded:: 3.8
+
+Exclude the source file from :prop_tgt:`AUTOUIC` processing (for Qt projects).
+
+:prop_sf:`SKIP_AUTOUIC` can be set on C++ header and source files and on
+``.ui`` files.
+
+For broader exclusion control see :prop_sf:`SKIP_AUTOGEN`.
+
+EXAMPLE
+^^^^^^^
+
+.. code-block:: cmake
+
+  # ...
+  set_property(SOURCE file.h PROPERTY SKIP_AUTOUIC ON)
+  set_property(SOURCE file.cpp PROPERTY SKIP_AUTOUIC ON)
+  set_property(SOURCE widget.ui PROPERTY SKIP_AUTOUIC ON)
+  # ...
diff --git a/share/cmake-3.22/Help/prop_sf/SKIP_PRECOMPILE_HEADERS.rst b/share/cmake-3.22/Help/prop_sf/SKIP_PRECOMPILE_HEADERS.rst
new file mode 100644
index 0000000..660de3f
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/SKIP_PRECOMPILE_HEADERS.rst
@@ -0,0 +1,15 @@
+SKIP_PRECOMPILE_HEADERS
+-----------------------
+
+.. versionadded:: 3.16
+
+Is this source file skipped by :prop_tgt:`PRECOMPILE_HEADERS` feature.
+
+This property helps with build problems that one would run into
+when using the :prop_tgt:`PRECOMPILE_HEADERS` feature.
+
+One example would be the usage of Objective-C (``*.m``) files, and
+Objective-C++ (``*.mm``) files, which lead to compilation failure
+because they are treated (in case of Ninja / Makefile generator)
+as C, and CXX respectively. The precompile headers are not
+compatible between languages.
diff --git a/share/cmake-3.22/Help/prop_sf/SKIP_UNITY_BUILD_INCLUSION.rst b/share/cmake-3.22/Help/prop_sf/SKIP_UNITY_BUILD_INCLUSION.rst
new file mode 100644
index 0000000..ae526ac
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/SKIP_UNITY_BUILD_INCLUSION.rst
@@ -0,0 +1,13 @@
+SKIP_UNITY_BUILD_INCLUSION
+--------------------------
+
+.. versionadded:: 3.16
+
+Setting this property to true ensures the source file will be skipped by
+unity builds when its associated target has its :prop_tgt:`UNITY_BUILD`
+property set to true.  The source file will instead be compiled on its own
+in the same way as it would with unity builds disabled.
+
+This property helps with "ODR (One definition rule)" problems where combining
+a particular source file with others might lead to build errors or other
+unintended side effects.
diff --git a/share/cmake-3.18/Help/prop_sf/SYMBOLIC.rst b/share/cmake-3.22/Help/prop_sf/SYMBOLIC.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_sf/SYMBOLIC.rst
rename to share/cmake-3.22/Help/prop_sf/SYMBOLIC.rst
diff --git a/share/cmake-3.22/Help/prop_sf/Swift_DEPENDENCIES_FILE.rst b/share/cmake-3.22/Help/prop_sf/Swift_DEPENDENCIES_FILE.rst
new file mode 100644
index 0000000..a90c7eb
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/Swift_DEPENDENCIES_FILE.rst
@@ -0,0 +1,7 @@
+Swift_DEPENDENCIES_FILE
+-----------------------
+
+.. versionadded:: 3.15
+
+This property sets the path for the Swift dependency file (swiftdeps) for the
+source.  If one is not specified, it will default to ``<OBJECT>.swiftdeps``.
diff --git a/share/cmake-3.22/Help/prop_sf/Swift_DIAGNOSTICS_FILE.rst b/share/cmake-3.22/Help/prop_sf/Swift_DIAGNOSTICS_FILE.rst
new file mode 100644
index 0000000..47d5ac3
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/Swift_DIAGNOSTICS_FILE.rst
@@ -0,0 +1,6 @@
+Swift_DIAGNOSTICS_FILE
+----------------------
+
+.. versionadded:: 3.15
+
+This property controls where the Swift diagnostics are serialized.
diff --git a/share/cmake-3.22/Help/prop_sf/UNITY_GROUP.rst b/share/cmake-3.22/Help/prop_sf/UNITY_GROUP.rst
new file mode 100644
index 0000000..9c18b70
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/UNITY_GROUP.rst
@@ -0,0 +1,7 @@
+UNITY_GROUP
+-----------
+
+.. versionadded:: 3.18
+
+This property controls which *bucket* the source will be part of when
+the :prop_tgt:`UNITY_BUILD_MODE` is set to ``GROUP``.
diff --git a/share/cmake-3.22/Help/prop_sf/VS_COPY_TO_OUT_DIR.rst b/share/cmake-3.22/Help/prop_sf/VS_COPY_TO_OUT_DIR.rst
new file mode 100644
index 0000000..ebc3061
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/VS_COPY_TO_OUT_DIR.rst
@@ -0,0 +1,8 @@
+VS_COPY_TO_OUT_DIR
+------------------
+
+.. versionadded:: 3.8
+
+Sets the ``<CopyToOutputDirectory>`` tag for a source file in a
+Visual Studio project file. Valid values are ``Never``, ``Always``
+and ``PreserveNewest``.
diff --git a/share/cmake-3.22/Help/prop_sf/VS_CSHARP_tagname.rst b/share/cmake-3.22/Help/prop_sf/VS_CSHARP_tagname.rst
new file mode 100644
index 0000000..75720f8
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/VS_CSHARP_tagname.rst
@@ -0,0 +1,22 @@
+VS_CSHARP_<tagname>
+-------------------
+
+.. versionadded:: 3.8
+
+Visual Studio and CSharp source-file-specific configuration.
+
+Tell the :manual:`Visual Studio generators <cmake-generators(7)>`
+to set the source file tag ``<tagname>``
+to a given value in the generated Visual Studio CSharp
+project. Ignored on other generators and languages. This property
+can be used to define dependencies between source files or set any
+other Visual Studio specific parameters.
+
+Example usage:
+
+.. code-block:: cmake
+
+  set_source_files_property(<filename>
+           PROPERTIES
+           VS_CSHARP_DependentUpon <other file>
+           VS_CSHARP_SubType "Form")
diff --git a/share/cmake-3.22/Help/prop_sf/VS_DEPLOYMENT_CONTENT.rst b/share/cmake-3.22/Help/prop_sf/VS_DEPLOYMENT_CONTENT.rst
new file mode 100644
index 0000000..ee49b27
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/VS_DEPLOYMENT_CONTENT.rst
@@ -0,0 +1,14 @@
+VS_DEPLOYMENT_CONTENT
+---------------------
+
+.. versionadded:: 3.1
+
+Mark a source file as content for deployment with a Windows Phone or
+Windows Store application when built with a
+:manual:`Visual Studio generators <cmake-generators(7)>`.
+The value must evaluate to either ``1`` or ``0`` and may use
+:manual:`generator expressions <cmake-generator-expressions(7)>`
+to make the choice based on the build configuration.
+The ``.vcxproj`` file entry for the source file will be
+marked either ``DeploymentContent`` or ``ExcludedFromBuild``
+for values ``1`` and ``0``, respectively.
diff --git a/share/cmake-3.22/Help/prop_sf/VS_DEPLOYMENT_LOCATION.rst b/share/cmake-3.22/Help/prop_sf/VS_DEPLOYMENT_LOCATION.rst
new file mode 100644
index 0000000..b170544
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/VS_DEPLOYMENT_LOCATION.rst
@@ -0,0 +1,11 @@
+VS_DEPLOYMENT_LOCATION
+----------------------
+
+.. versionadded:: 3.1
+
+Specifies the deployment location for a content source file with a Windows
+Phone or Windows Store application when built
+with a :manual:`Visual Studio generators <cmake-generators(7)>`.
+This property is only applicable when using :prop_sf:`VS_DEPLOYMENT_CONTENT`.
+The value represent the path relative to the app package and applies to all
+configurations.
diff --git a/share/cmake-3.22/Help/prop_sf/VS_INCLUDE_IN_VSIX.rst b/share/cmake-3.22/Help/prop_sf/VS_INCLUDE_IN_VSIX.rst
new file mode 100644
index 0000000..16c56bf
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/VS_INCLUDE_IN_VSIX.rst
@@ -0,0 +1,8 @@
+VS_INCLUDE_IN_VSIX
+------------------
+
+.. versionadded:: 3.8
+
+Boolean property to specify if the file should be included within a
+VSIX (Visual Studio Integration Extension) extension package.
+This is needed for development of Visual Studio extensions.
diff --git a/share/cmake-3.22/Help/prop_sf/VS_RESOURCE_GENERATOR.rst b/share/cmake-3.22/Help/prop_sf/VS_RESOURCE_GENERATOR.rst
new file mode 100644
index 0000000..c5bb4f6
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/VS_RESOURCE_GENERATOR.rst
@@ -0,0 +1,10 @@
+VS_RESOURCE_GENERATOR
+---------------------
+
+.. versionadded:: 3.8
+
+This property allows to specify the resource generator to be used
+on this file. It defaults to ``PublicResXFileCodeGenerator`` if
+not set.
+
+This property only applies to C# projects.
diff --git a/share/cmake-3.22/Help/prop_sf/VS_SETTINGS.rst b/share/cmake-3.22/Help/prop_sf/VS_SETTINGS.rst
new file mode 100644
index 0000000..871e36e
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/VS_SETTINGS.rst
@@ -0,0 +1,25 @@
+VS_SETTINGS
+-----------
+
+.. versionadded:: 3.18
+
+Set any item metadata on a file.
+
+.. versionadded:: 3.22
+
+  This property is honored for all source file types.
+  Previously it worked only for non-built files.
+
+Takes a list of ``Key=Value`` pairs. Tells the Visual Studio generator to set
+``Key`` to ``Value`` as item metadata on the file.
+
+For example:
+
+.. code-block:: cmake
+
+  set_property(SOURCE file.hlsl PROPERTY VS_SETTINGS "Key=Value" "Key2=Value2")
+
+will set ``Key`` to ``Value`` and ``Key2`` to ``Value2`` on the
+``file.hlsl`` item as metadata.
+
+:manual:`Generator expressions <cmake-generator-expressions(7)>` are supported.
diff --git a/share/cmake-3.22/Help/prop_sf/VS_SHADER_DISABLE_OPTIMIZATIONS.rst b/share/cmake-3.22/Help/prop_sf/VS_SHADER_DISABLE_OPTIMIZATIONS.rst
new file mode 100644
index 0000000..6fb6778
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/VS_SHADER_DISABLE_OPTIMIZATIONS.rst
@@ -0,0 +1,8 @@
+VS_SHADER_DISABLE_OPTIMIZATIONS
+-------------------------------
+
+.. versionadded:: 3.11
+
+Disable compiler optimizations for an ``.hlsl`` source file.  This adds the
+``-Od`` flag to the command line for the FxCompiler tool.  Specify the value
+``true`` for this property to disable compiler optimizations.
diff --git a/share/cmake-3.22/Help/prop_sf/VS_SHADER_ENABLE_DEBUG.rst b/share/cmake-3.22/Help/prop_sf/VS_SHADER_ENABLE_DEBUG.rst
new file mode 100644
index 0000000..9c8f9d7
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/VS_SHADER_ENABLE_DEBUG.rst
@@ -0,0 +1,8 @@
+VS_SHADER_ENABLE_DEBUG
+----------------------
+
+.. versionadded:: 3.11
+
+Enable debugging information for an ``.hlsl`` source file.  This adds the
+``-Zi`` flag to the command line for the FxCompiler tool.  Specify the value
+``true`` to generate debugging information for the compiled shader.
diff --git a/share/cmake-3.22/Help/prop_sf/VS_SHADER_ENTRYPOINT.rst b/share/cmake-3.22/Help/prop_sf/VS_SHADER_ENTRYPOINT.rst
new file mode 100644
index 0000000..4b311ba
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/VS_SHADER_ENTRYPOINT.rst
@@ -0,0 +1,7 @@
+VS_SHADER_ENTRYPOINT
+--------------------
+
+.. versionadded:: 3.1
+
+Specifies the name of the entry point for the shader of a ``.hlsl`` source
+file.
diff --git a/share/cmake-3.22/Help/prop_sf/VS_SHADER_FLAGS.rst b/share/cmake-3.22/Help/prop_sf/VS_SHADER_FLAGS.rst
new file mode 100644
index 0000000..07f8497
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/VS_SHADER_FLAGS.rst
@@ -0,0 +1,6 @@
+VS_SHADER_FLAGS
+---------------
+
+.. versionadded:: 3.2
+
+Set additional Visual Studio shader flags of a ``.hlsl`` source file.
diff --git a/share/cmake-3.22/Help/prop_sf/VS_SHADER_MODEL.rst b/share/cmake-3.22/Help/prop_sf/VS_SHADER_MODEL.rst
new file mode 100644
index 0000000..072df89
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/VS_SHADER_MODEL.rst
@@ -0,0 +1,7 @@
+VS_SHADER_MODEL
+---------------
+
+.. versionadded:: 3.1
+
+Specifies the shader model of a ``.hlsl`` source file. Some shader types can
+only be used with recent shader models
diff --git a/share/cmake-3.22/Help/prop_sf/VS_SHADER_OBJECT_FILE_NAME.rst b/share/cmake-3.22/Help/prop_sf/VS_SHADER_OBJECT_FILE_NAME.rst
new file mode 100644
index 0000000..3647a5e
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/VS_SHADER_OBJECT_FILE_NAME.rst
@@ -0,0 +1,8 @@
+VS_SHADER_OBJECT_FILE_NAME
+--------------------------
+
+.. versionadded:: 3.12
+
+Specifies a file name for the compiled shader object file for an ``.hlsl``
+source file.  This adds the ``-Fo`` flag to the command line for the FxCompiler
+tool.
diff --git a/share/cmake-3.22/Help/prop_sf/VS_SHADER_OUTPUT_HEADER_FILE.rst b/share/cmake-3.22/Help/prop_sf/VS_SHADER_OUTPUT_HEADER_FILE.rst
new file mode 100644
index 0000000..4113a16
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/VS_SHADER_OUTPUT_HEADER_FILE.rst
@@ -0,0 +1,7 @@
+VS_SHADER_OUTPUT_HEADER_FILE
+----------------------------
+
+.. versionadded:: 3.10
+
+Set filename for output header file containing object code of a ``.hlsl``
+source file.
diff --git a/share/cmake-3.22/Help/prop_sf/VS_SHADER_TYPE.rst b/share/cmake-3.22/Help/prop_sf/VS_SHADER_TYPE.rst
new file mode 100644
index 0000000..3fb7e60
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/VS_SHADER_TYPE.rst
@@ -0,0 +1,6 @@
+VS_SHADER_TYPE
+--------------
+
+.. versionadded:: 3.1
+
+Set the Visual Studio shader type of a ``.hlsl`` source file.
diff --git a/share/cmake-3.22/Help/prop_sf/VS_SHADER_VARIABLE_NAME.rst b/share/cmake-3.22/Help/prop_sf/VS_SHADER_VARIABLE_NAME.rst
new file mode 100644
index 0000000..3361b40
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/VS_SHADER_VARIABLE_NAME.rst
@@ -0,0 +1,7 @@
+VS_SHADER_VARIABLE_NAME
+-----------------------
+
+.. versionadded:: 3.10
+
+Set name of variable in header file containing object code of a ``.hlsl``
+source file.
diff --git a/share/cmake-3.22/Help/prop_sf/VS_TOOL_OVERRIDE.rst b/share/cmake-3.22/Help/prop_sf/VS_TOOL_OVERRIDE.rst
new file mode 100644
index 0000000..b2f4112
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/VS_TOOL_OVERRIDE.rst
@@ -0,0 +1,7 @@
+VS_TOOL_OVERRIDE
+----------------
+
+.. versionadded:: 3.7
+
+Override the default Visual Studio tool that will be applied to the source file
+with a new tool not based on the extension of the file.
diff --git a/share/cmake-3.22/Help/prop_sf/VS_XAML_TYPE.rst b/share/cmake-3.22/Help/prop_sf/VS_XAML_TYPE.rst
new file mode 100644
index 0000000..612b07b
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/VS_XAML_TYPE.rst
@@ -0,0 +1,9 @@
+VS_XAML_TYPE
+------------
+
+.. versionadded:: 3.3
+
+Mark a Extensible Application Markup Language (XAML) source file
+as a different type than the default ``Page``.
+The most common usage would be to set the default ``App.xaml`` file as
+``ApplicationDefinition``.
diff --git a/share/cmake-3.18/Help/prop_sf/WRAP_EXCLUDE.rst b/share/cmake-3.22/Help/prop_sf/WRAP_EXCLUDE.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_sf/WRAP_EXCLUDE.rst
rename to share/cmake-3.22/Help/prop_sf/WRAP_EXCLUDE.rst
diff --git a/share/cmake-3.22/Help/prop_sf/XCODE_EXPLICIT_FILE_TYPE.rst b/share/cmake-3.22/Help/prop_sf/XCODE_EXPLICIT_FILE_TYPE.rst
new file mode 100644
index 0000000..5a50d7d
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/XCODE_EXPLICIT_FILE_TYPE.rst
@@ -0,0 +1,10 @@
+XCODE_EXPLICIT_FILE_TYPE
+------------------------
+
+.. versionadded:: 3.1
+
+Set the :generator:`Xcode` ``explicitFileType`` attribute on its reference to a
+source file.  CMake computes a default based on file extension but
+can be told explicitly with this property.
+
+See also :prop_sf:`XCODE_LAST_KNOWN_FILE_TYPE`.
diff --git a/share/cmake-3.22/Help/prop_sf/XCODE_FILE_ATTRIBUTES.rst b/share/cmake-3.22/Help/prop_sf/XCODE_FILE_ATTRIBUTES.rst
new file mode 100644
index 0000000..ba51e00
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/XCODE_FILE_ATTRIBUTES.rst
@@ -0,0 +1,13 @@
+XCODE_FILE_ATTRIBUTES
+---------------------
+
+.. versionadded:: 3.7
+
+Add values to the :generator:`Xcode` ``ATTRIBUTES`` setting on its reference to a
+source file.  Among other things, this can be used to set the role on
+a ``.mig`` file::
+
+  set_source_files_properties(defs.mig
+      PROPERTIES
+          XCODE_FILE_ATTRIBUTES "Client;Server"
+  )
diff --git a/share/cmake-3.22/Help/prop_sf/XCODE_LAST_KNOWN_FILE_TYPE.rst b/share/cmake-3.22/Help/prop_sf/XCODE_LAST_KNOWN_FILE_TYPE.rst
new file mode 100644
index 0000000..0b84e31
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_sf/XCODE_LAST_KNOWN_FILE_TYPE.rst
@@ -0,0 +1,11 @@
+XCODE_LAST_KNOWN_FILE_TYPE
+--------------------------
+
+.. versionadded:: 3.1
+
+Set the :generator:`Xcode` ``lastKnownFileType`` attribute on its reference to
+a source file.  CMake computes a default based on file extension but
+can be told explicitly with this property.
+
+See also :prop_sf:`XCODE_EXPLICIT_FILE_TYPE`, which is preferred
+over this property if set.
diff --git a/share/cmake-3.18/Help/prop_test/ATTACHED_FILES.rst b/share/cmake-3.22/Help/prop_test/ATTACHED_FILES.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_test/ATTACHED_FILES.rst
rename to share/cmake-3.22/Help/prop_test/ATTACHED_FILES.rst
diff --git a/share/cmake-3.18/Help/prop_test/ATTACHED_FILES_ON_FAIL.rst b/share/cmake-3.22/Help/prop_test/ATTACHED_FILES_ON_FAIL.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_test/ATTACHED_FILES_ON_FAIL.rst
rename to share/cmake-3.22/Help/prop_test/ATTACHED_FILES_ON_FAIL.rst
diff --git a/share/cmake-3.18/Help/prop_test/COST.rst b/share/cmake-3.22/Help/prop_test/COST.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_test/COST.rst
rename to share/cmake-3.22/Help/prop_test/COST.rst
diff --git a/share/cmake-3.18/Help/prop_test/DEPENDS.rst b/share/cmake-3.22/Help/prop_test/DEPENDS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_test/DEPENDS.rst
rename to share/cmake-3.22/Help/prop_test/DEPENDS.rst
diff --git a/share/cmake-3.22/Help/prop_test/DISABLED.rst b/share/cmake-3.22/Help/prop_test/DISABLED.rst
new file mode 100644
index 0000000..cbf07a5
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_test/DISABLED.rst
@@ -0,0 +1,17 @@
+DISABLED
+--------
+
+.. versionadded:: 3.9
+
+If set to ``True``, the test will be skipped and its status will be 'Not Run'. A
+``DISABLED`` test will not be counted in the total number of tests and its
+completion status will be reported to CDash as ``Disabled``.
+
+A ``DISABLED`` test does not participate in test fixture dependency resolution.
+If a ``DISABLED`` test has fixture requirements defined in its
+:prop_test:`FIXTURES_REQUIRED` property, it will not cause setup or cleanup
+tests for those fixtures to be added to the test set.
+
+If a test with the :prop_test:`FIXTURES_SETUP` property set is ``DISABLED``,
+the fixture behavior will be as though that setup test was passing and any test
+case requiring that fixture will still run.
diff --git a/share/cmake-3.22/Help/prop_test/ENVIRONMENT.rst b/share/cmake-3.22/Help/prop_test/ENVIRONMENT.rst
new file mode 100644
index 0000000..43bcdbe
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_test/ENVIRONMENT.rst
@@ -0,0 +1,9 @@
+ENVIRONMENT
+-----------
+
+Specify environment variables that should be defined for running a test.
+
+If set to a list of environment variables and values of the form
+``MYVAR=value`` those environment variables will be defined while running
+the test.  The environment changes from this property do not affect other
+tests.
diff --git a/share/cmake-3.22/Help/prop_test/ENVIRONMENT_MODIFICATION.rst b/share/cmake-3.22/Help/prop_test/ENVIRONMENT_MODIFICATION.rst
new file mode 100644
index 0000000..1e17329
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_test/ENVIRONMENT_MODIFICATION.rst
@@ -0,0 +1,38 @@
+ENVIRONMENT_MODIFICATION
+------------------------
+
+.. versionadded:: 3.22
+
+Specify environment variables that should be modified for running a test. Note
+that the operations performed by this property are performed after the
+:prop_test:`ENVIRONMENT` property is already applied.
+
+If set to a list of environment variables and values of the form
+``MYVAR=OP:VALUE``, where ``MYVAR`` is the case-sensitive name of an
+environment variable to be modified. Entries are considered in the
+order specified in the property's value. The ``OP`` may be one of:
+
+  - ``reset``: Reset to the unmodified value, ignoring all modifications to
+    ``MYVAR`` prior to this entry. Note that this will reset the variable to
+    the value set by :prop_test:`ENVIRONMENT`, if it was set, and otherwise
+    to its state from the rest of the CTest execution.
+  - ``set``: Replaces the current value of ``MYVAR`` with ``VALUE``.
+  - ``unset``: Unsets the current value of ``MYVAR``.
+  - ``string_append``: Appends ``VALUE`` to the current value of ``MYVAR``.
+  - ``string_prepend``: Prepends ``VALUE`` to the current value of ``MYVAR``.
+  - ``path_list_append``: Appends ``VALUE`` to the current value of ``MYVAR``
+    using the host platform's path list separator (``;`` on Windows and ``:``
+    elsewhere).
+  - ``path_list_prepend``: Prepends ``VALUE`` to the current value of
+    ``MYVAR`` using the host platform's path list separator (``;`` on Windows
+    and ``:`` elsewhere).
+  - ``cmake_list_append``: Appends ``VALUE`` to the current value of ``MYVAR``
+    using ``;`` as the separator.
+  - ``cmake_list_prepend``: Prepends ``VALUE`` to the current value of
+    ``MYVAR`` using ``;`` as the separator.
+
+Unrecognized ``OP`` values will result in the test failing before it is
+executed. This is so that future operations may be added without changing
+valid behavior of existing tests.
+
+The environment changes from this property do not affect other tests.
diff --git a/share/cmake-3.22/Help/prop_test/FAIL_REGULAR_EXPRESSION.rst b/share/cmake-3.22/Help/prop_test/FAIL_REGULAR_EXPRESSION.rst
new file mode 100644
index 0000000..1ec4517
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_test/FAIL_REGULAR_EXPRESSION.rst
@@ -0,0 +1,19 @@
+FAIL_REGULAR_EXPRESSION
+-----------------------
+
+If the output matches this regular expression the test will fail,
+regardless of the process exit code.
+
+If set, if the output matches one of specified regular expressions,
+the test will fail.  Example:
+
+.. code-block:: cmake
+
+  set_tests_properties(mytest PROPERTIES
+    FAIL_REGULAR_EXPRESSION "[^a-z]Error;ERROR;Failed"
+  )
+
+``FAIL_REGULAR_EXPRESSION`` expects a list of regular expressions.
+
+See also the :prop_test:`PASS_REGULAR_EXPRESSION` and
+:prop_test:`SKIP_REGULAR_EXPRESSION` test properties.
diff --git a/share/cmake-3.22/Help/prop_test/FIXTURES_CLEANUP.rst b/share/cmake-3.22/Help/prop_test/FIXTURES_CLEANUP.rst
new file mode 100644
index 0000000..aa043da
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_test/FIXTURES_CLEANUP.rst
@@ -0,0 +1,49 @@
+FIXTURES_CLEANUP
+----------------
+
+.. versionadded:: 3.7
+
+Specifies a list of fixtures for which the test is to be treated as a cleanup
+test. These fixture names are distinct from test case names and are not
+required to have any similarity to the names of tests associated with them.
+
+Fixture cleanup tests are ordinary tests with all of the usual test
+functionality. Setting the ``FIXTURES_CLEANUP`` property for a test has two
+primary effects:
+
+- CTest will ensure the test executes after all other tests which list any of
+  the fixtures in its :prop_test:`FIXTURES_REQUIRED` property.
+
+- If CTest is asked to run only a subset of tests (e.g. using regular
+  expressions or the ``--rerun-failed`` option) and the cleanup test is not in
+  the set of tests to run, it will automatically be added if any tests in the
+  set require any fixture listed in ``FIXTURES_CLEANUP``.
+
+A cleanup test can have multiple fixtures listed in its ``FIXTURES_CLEANUP``
+property. It will execute only once for the whole CTest run, not once for each
+fixture. A fixture can also have more than one cleanup test defined. If there
+are multiple cleanup tests for a fixture, projects can control their order with
+the usual :prop_test:`DEPENDS` test property if necessary.
+
+A cleanup test is allowed to require other fixtures, but not any fixture listed
+in its ``FIXTURES_CLEANUP`` property. For example:
+
+.. code-block:: cmake
+
+  # Ok: Dependent fixture is different to cleanup
+  set_tests_properties(cleanupFoo PROPERTIES
+    FIXTURES_CLEANUP  Foo
+    FIXTURES_REQUIRED Bar
+  )
+
+  # Error: cannot require same fixture as cleanup
+  set_tests_properties(cleanupFoo PROPERTIES
+    FIXTURES_CLEANUP  Foo
+    FIXTURES_REQUIRED Foo
+  )
+
+Cleanup tests will execute even if setup or regular tests for that fixture fail
+or are skipped.
+
+See :prop_test:`FIXTURES_REQUIRED` for a more complete discussion of how to use
+test fixtures.
diff --git a/share/cmake-3.22/Help/prop_test/FIXTURES_REQUIRED.rst b/share/cmake-3.22/Help/prop_test/FIXTURES_REQUIRED.rst
new file mode 100644
index 0000000..f850830
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_test/FIXTURES_REQUIRED.rst
@@ -0,0 +1,98 @@
+FIXTURES_REQUIRED
+-----------------
+
+.. versionadded:: 3.7
+
+Specifies a list of fixtures the test requires. Fixture names are case
+sensitive and they are not required to have any similarity to test names.
+
+Fixtures are a way to attach setup and cleanup tasks to a set of tests. If a
+test requires a given fixture, then all tests marked as setup tasks for that
+fixture will be executed first (once for the whole set of tests, not once per
+test requiring the fixture). After all tests requiring a particular fixture
+have completed, CTest will ensure all tests marked as cleanup tasks for that
+fixture are then executed. Tests are marked as setup tasks with the
+:prop_test:`FIXTURES_SETUP` property and as cleanup tasks with the
+:prop_test:`FIXTURES_CLEANUP` property. If any of a fixture's setup tests fail,
+all tests listing that fixture in their ``FIXTURES_REQUIRED`` property will not
+be executed. The cleanup tests for the fixture will always be executed, even if
+some setup tests fail.
+
+When CTest is asked to execute only a subset of tests (e.g. by the use of
+regular expressions or when run with the ``--rerun-failed`` command line
+option), it will automatically add any setup or cleanup tests for fixtures
+required by any of the tests that are in the execution set. This behavior can
+be overridden with the ``-FS``, ``-FC`` and ``-FA`` command line options to
+:manual:`ctest(1)` if desired.
+
+Since setup and cleanup tasks are also tests, they can have an ordering
+specified by the :prop_test:`DEPENDS` test property just like any other tests.
+This can be exploited to implement setup or cleanup using multiple tests for a
+single fixture to modularise setup or cleanup logic.
+
+The concept of a fixture is different to that of a resource specified by
+:prop_test:`RESOURCE_LOCK`, but they may be used together. A fixture defines a
+set of tests which share setup and cleanup requirements, whereas a resource
+lock has the effect of ensuring a particular set of tests do not run in
+parallel. Some situations may need both, such as setting up a database,
+serializing test access to that database and deleting the database again at the
+end. For such cases, tests would populate both ``FIXTURES_REQUIRED`` and
+:prop_test:`RESOURCE_LOCK` to combine the two behaviors. Names used for
+:prop_test:`RESOURCE_LOCK` have no relationship with names of fixtures, so note
+that a resource lock does not imply a fixture and vice versa.
+
+Consider the following example which represents a database test scenario
+similar to that mentioned above:
+
+.. code-block:: cmake
+
+  add_test(NAME testsDone   COMMAND emailResults)
+  add_test(NAME fooOnly     COMMAND testFoo)
+  add_test(NAME dbOnly      COMMAND testDb)
+  add_test(NAME dbWithFoo   COMMAND testDbWithFoo)
+  add_test(NAME createDB    COMMAND initDB)
+  add_test(NAME setupUsers  COMMAND userCreation)
+  add_test(NAME cleanupDB   COMMAND deleteDB)
+  add_test(NAME cleanupFoo  COMMAND removeFoos)
+
+  set_tests_properties(setupUsers PROPERTIES DEPENDS createDB)
+
+  set_tests_properties(createDB   PROPERTIES FIXTURES_SETUP    DB)
+  set_tests_properties(setupUsers PROPERTIES FIXTURES_SETUP    DB)
+  set_tests_properties(cleanupDB  PROPERTIES FIXTURES_CLEANUP  DB)
+  set_tests_properties(cleanupFoo PROPERTIES FIXTURES_CLEANUP  Foo)
+  set_tests_properties(testsDone  PROPERTIES FIXTURES_CLEANUP  "DB;Foo")
+
+  set_tests_properties(fooOnly    PROPERTIES FIXTURES_REQUIRED Foo)
+  set_tests_properties(dbOnly     PROPERTIES FIXTURES_REQUIRED DB)
+  set_tests_properties(dbWithFoo  PROPERTIES FIXTURES_REQUIRED "DB;Foo")
+
+  set_tests_properties(dbOnly dbWithFoo createDB setupUsers cleanupDB
+                       PROPERTIES RESOURCE_LOCK DbAccess)
+
+Key points from this example:
+
+- Two fixtures are defined: ``DB`` and ``Foo``. Tests can require a single
+  fixture as ``fooOnly`` and ``dbOnly`` do, or they can depend on multiple
+  fixtures like ``dbWithFoo`` does.
+
+- A ``DEPENDS`` relationship is set up to ensure ``setupUsers`` happens after
+  ``createDB``, both of which are setup tests for the ``DB`` fixture and will
+  therefore be executed before the ``dbOnly`` and ``dbWithFoo`` tests
+  automatically.
+
+- No explicit ``DEPENDS`` relationships were needed to make the setup tests run
+  before or the cleanup tests run after the regular tests.
+
+- The ``Foo`` fixture has no setup tests defined, only a single cleanup test.
+
+- ``testsDone`` is a cleanup test for both the ``DB`` and ``Foo`` fixtures.
+  Therefore, it will only execute once regular tests for both fixtures have
+  finished (i.e. after ``fooOnly``, ``dbOnly`` and ``dbWithFoo``). No
+  ``DEPENDS`` relationship was specified for ``testsDone``, so it is free to
+  run before, after or concurrently with other cleanup tests for either
+  fixture.
+
+- The setup and cleanup tests never list the fixtures they are for in their own
+  ``FIXTURES_REQUIRED`` property, as that would result in a dependency on
+  themselves and be considered an error.
diff --git a/share/cmake-3.22/Help/prop_test/FIXTURES_SETUP.rst b/share/cmake-3.22/Help/prop_test/FIXTURES_SETUP.rst
new file mode 100644
index 0000000..04a09d8
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_test/FIXTURES_SETUP.rst
@@ -0,0 +1,50 @@
+FIXTURES_SETUP
+--------------
+
+.. versionadded:: 3.7
+
+Specifies a list of fixtures for which the test is to be treated as a setup
+test. These fixture names are distinct from test case names and are not
+required to have any similarity to the names of tests associated with them.
+
+Fixture setup tests are ordinary tests with all of the usual test
+functionality. Setting the ``FIXTURES_SETUP`` property for a test has two
+primary effects:
+
+- CTest will ensure the test executes before any other test which lists the
+  fixture name(s) in its :prop_test:`FIXTURES_REQUIRED` property.
+
+- If CTest is asked to run only a subset of tests (e.g. using regular
+  expressions or the ``--rerun-failed`` option) and the setup test is not in
+  the set of tests to run, it will automatically be added if any tests in the
+  set require any fixture listed in ``FIXTURES_SETUP``.
+
+A setup test can have multiple fixtures listed in its ``FIXTURES_SETUP``
+property. It will execute only once for the whole CTest run, not once for each
+fixture. A fixture can also have more than one setup test defined. If there are
+multiple setup tests for a fixture, projects can control their order with the
+usual :prop_test:`DEPENDS` test property if necessary.
+
+A setup test is allowed to require other fixtures, but not any fixture listed
+in its ``FIXTURES_SETUP`` property. For example:
+
+.. code-block:: cmake
+
+  # Ok: dependent fixture is different to setup
+  set_tests_properties(setupFoo PROPERTIES
+    FIXTURES_SETUP    Foo
+    FIXTURES_REQUIRED Bar
+  )
+
+  # Error: cannot require same fixture as setup
+  set_tests_properties(setupFoo PROPERTIES
+    FIXTURES_SETUP    Foo
+    FIXTURES_REQUIRED Foo
+  )
+
+If any of a fixture's setup tests fail, none of the tests listing that fixture
+in its :prop_test:`FIXTURES_REQUIRED` property will be run. Cleanup tests will,
+however, still be executed.
+
+See :prop_test:`FIXTURES_REQUIRED` for a more complete discussion of how to use
+test fixtures.
diff --git a/share/cmake-3.22/Help/prop_test/LABELS.rst b/share/cmake-3.22/Help/prop_test/LABELS.rst
new file mode 100644
index 0000000..a06f152
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_test/LABELS.rst
@@ -0,0 +1,10 @@
+LABELS
+------
+
+Specify a list of text labels associated with a test.  The labels are
+reported in both the ``ctest`` output summary and in dashboard submissions.
+They can also be used to filter the set of tests to be executed (see the
+``ctest -L`` and ``ctest -LE`` :ref:`CTest Options`).
+
+See :ref:`Additional Labels` for adding labels to a test dynamically during
+test execution.
diff --git a/share/cmake-3.18/Help/prop_test/MEASUREMENT.rst b/share/cmake-3.22/Help/prop_test/MEASUREMENT.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_test/MEASUREMENT.rst
rename to share/cmake-3.22/Help/prop_test/MEASUREMENT.rst
diff --git a/share/cmake-3.22/Help/prop_test/PASS_REGULAR_EXPRESSION.rst b/share/cmake-3.22/Help/prop_test/PASS_REGULAR_EXPRESSION.rst
new file mode 100644
index 0000000..96468c0
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_test/PASS_REGULAR_EXPRESSION.rst
@@ -0,0 +1,20 @@
+PASS_REGULAR_EXPRESSION
+-----------------------
+
+The output must match this regular expression for the test to pass.
+The process exit code is ignored.
+
+If set, the test output will be checked against the specified regular
+expressions and at least one of the regular expressions has to match,
+otherwise the test will fail.  Example:
+
+.. code-block:: cmake
+
+  set_tests_properties(mytest PROPERTIES
+    PASS_REGULAR_EXPRESSION "TestPassed;All ok"
+  )
+
+``PASS_REGULAR_EXPRESSION`` expects a list of regular expressions.
+
+See also the :prop_test:`FAIL_REGULAR_EXPRESSION` and
+:prop_test:`SKIP_REGULAR_EXPRESSION` test properties.
diff --git a/share/cmake-3.18/Help/prop_test/PROCESSORS.rst b/share/cmake-3.22/Help/prop_test/PROCESSORS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_test/PROCESSORS.rst
rename to share/cmake-3.22/Help/prop_test/PROCESSORS.rst
diff --git a/share/cmake-3.22/Help/prop_test/PROCESSOR_AFFINITY.rst b/share/cmake-3.22/Help/prop_test/PROCESSOR_AFFINITY.rst
new file mode 100644
index 0000000..f48a69c
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_test/PROCESSOR_AFFINITY.rst
@@ -0,0 +1,13 @@
+PROCESSOR_AFFINITY
+------------------
+
+.. versionadded:: 3.12
+
+Set to a true value to ask CTest to launch the test process with CPU affinity
+for a fixed set of processors.  If enabled and supported for the current
+platform, CTest will choose a set of processors to place in the CPU affinity
+mask when launching the test process.  The number of processors in the set is
+determined by the :prop_test:`PROCESSORS` test property or the number of
+processors available to CTest, whichever is smaller.  The set of processors
+chosen will be disjoint from the processors assigned to other concurrently
+running tests that also have the ``PROCESSOR_AFFINITY`` property enabled.
diff --git a/share/cmake-3.18/Help/prop_test/REQUIRED_FILES.rst b/share/cmake-3.22/Help/prop_test/REQUIRED_FILES.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_test/REQUIRED_FILES.rst
rename to share/cmake-3.22/Help/prop_test/REQUIRED_FILES.rst
diff --git a/share/cmake-3.22/Help/prop_test/RESOURCE_GROUPS.rst b/share/cmake-3.22/Help/prop_test/RESOURCE_GROUPS.rst
new file mode 100644
index 0000000..26c8fa2
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_test/RESOURCE_GROUPS.rst
@@ -0,0 +1,72 @@
+RESOURCE_GROUPS
+---------------
+
+.. versionadded:: 3.16
+
+Specify resources required by a test, grouped in a way that is meaningful to
+the test.  See :ref:`resource allocation <ctest-resource-allocation>`
+for more information on how this property integrates into the CTest resource
+allocation feature.
+
+The ``RESOURCE_GROUPS`` property is a :ref:`semicolon-separated list <CMake
+Language Lists>` of group descriptions. Each entry consists of an optional
+number of groups using the description followed by a series of resource
+requirements for those groups. These requirements (and the number of groups)
+are separated by commas. The resource requirements consist of the name of a
+resource type, followed by a colon, followed by an unsigned integer
+specifying the number of slots required on one resource of the given type.
+
+The ``RESOURCE_GROUPS`` property tells CTest what resources a test expects
+to use grouped in a way meaningful to the test.  The test itself must read
+the :ref:`environment variables <ctest-resource-environment-variables>` to
+determine which resources have been allocated to each group.  For example,
+each group may correspond to a process the test will spawn when executed.
+
+Consider the following example:
+
+.. code-block:: cmake
+
+  add_test(NAME MyTest COMMAND MyExe)
+  set_property(TEST MyTest PROPERTY RESOURCE_GROUPS
+    "2,gpus:2"
+    "gpus:4,crypto_chips:2")
+
+In this example, there are two group descriptions (implicitly separated by a
+semicolon.) The content of the first description is ``2,gpus:2``. This
+description specifies 2 groups, each of which requires 2 slots from a single
+GPU. The content of the second description is ``gpus:4,crypto_chips:2``. This
+description does not specify a group count, so a default of 1 is assumed.
+This single group requires 4 slots from a single GPU and 2 slots from a
+single cryptography chip. In total, 3 resource groups are specified for this
+test, each with its own unique requirements.
+
+Note that the number of slots following the resource type specifies slots from
+a *single* instance of the resource. If the resource group can tolerate
+receiving slots from different instances of the same resource, it can indicate
+this by splitting the specification into multiple requirements of one slot. For
+example:
+
+.. code-block:: cmake
+
+  add_test(NAME MyTest COMMAND MyExe)
+  set_property(TEST MyTest PROPERTY RESOURCE_GROUPS
+    "gpus:1,gpus:1,gpus:1,gpus:1")
+
+In this case, the single resource group indicates that it needs four GPU slots,
+all of which may come from separate GPUs (though they don't have to; CTest may
+still assign slots from the same GPU.)
+
+When CTest sets the :ref:`environment variables
+<ctest-resource-environment-variables>` for a test, it assigns a group number
+based on the group description, starting at 0 on the left and the number of
+groups minus 1 on the right. For example, in the example above, the two
+groups in the first description would have IDs of 0 and 1, and the single
+group in the second description would have an ID of 2.
+
+Both the ``RESOURCE_GROUPS`` and :prop_test:`RESOURCE_LOCK` properties serve
+similar purposes, but they are distinct and orthogonal. Resources specified by
+``RESOURCE_GROUPS`` do not affect :prop_test:`RESOURCE_LOCK`, and vice versa.
+Whereas :prop_test:`RESOURCE_LOCK` is a simpler property that is used for
+locking one global resource, ``RESOURCE_GROUPS`` is a more advanced property
+that allows multiple tests to simultaneously use multiple resources of the
+same type, specifying their requirements in a fine-grained manner.
diff --git a/share/cmake-3.18/Help/prop_test/RESOURCE_LOCK.rst b/share/cmake-3.22/Help/prop_test/RESOURCE_LOCK.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_test/RESOURCE_LOCK.rst
rename to share/cmake-3.22/Help/prop_test/RESOURCE_LOCK.rst
diff --git a/share/cmake-3.18/Help/prop_test/RUN_SERIAL.rst b/share/cmake-3.22/Help/prop_test/RUN_SERIAL.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_test/RUN_SERIAL.rst
rename to share/cmake-3.22/Help/prop_test/RUN_SERIAL.rst
diff --git a/share/cmake-3.22/Help/prop_test/SKIP_REGULAR_EXPRESSION.rst b/share/cmake-3.22/Help/prop_test/SKIP_REGULAR_EXPRESSION.rst
new file mode 100644
index 0000000..60038e4
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_test/SKIP_REGULAR_EXPRESSION.rst
@@ -0,0 +1,21 @@
+SKIP_REGULAR_EXPRESSION
+-----------------------
+
+.. versionadded:: 3.16
+
+If the output matches this regular expression the test will be marked as skipped.
+
+If set, if the output matches one of specified regular expressions,
+the test will be marked as skipped.  Example:
+
+.. code-block:: cmake
+
+  set_property(TEST mytest PROPERTY
+    SKIP_REGULAR_EXPRESSION "[^a-z]Skip" "SKIP" "Skipped"
+  )
+
+``SKIP_REGULAR_EXPRESSION`` expects a list of regular expressions.
+
+See also the :prop_test:`SKIP_RETURN_CODE`,
+:prop_test:`PASS_REGULAR_EXPRESSION`, and :prop_test:`FAIL_REGULAR_EXPRESSION`
+test properties.
diff --git a/share/cmake-3.18/Help/prop_test/SKIP_RETURN_CODE.rst b/share/cmake-3.22/Help/prop_test/SKIP_RETURN_CODE.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_test/SKIP_RETURN_CODE.rst
rename to share/cmake-3.22/Help/prop_test/SKIP_RETURN_CODE.rst
diff --git a/share/cmake-3.18/Help/prop_test/TIMEOUT.rst b/share/cmake-3.22/Help/prop_test/TIMEOUT.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_test/TIMEOUT.rst
rename to share/cmake-3.22/Help/prop_test/TIMEOUT.rst
diff --git a/share/cmake-3.22/Help/prop_test/TIMEOUT_AFTER_MATCH.rst b/share/cmake-3.22/Help/prop_test/TIMEOUT_AFTER_MATCH.rst
new file mode 100644
index 0000000..726dcab
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_test/TIMEOUT_AFTER_MATCH.rst
@@ -0,0 +1,41 @@
+TIMEOUT_AFTER_MATCH
+-------------------
+
+.. versionadded:: 3.6
+
+Change a test's timeout duration after a matching line is encountered
+in its output.
+
+Usage
+^^^^^
+
+.. code-block:: cmake
+
+ add_test(mytest ...)
+ set_property(TEST mytest PROPERTY TIMEOUT_AFTER_MATCH "${seconds}" "${regex}")
+
+Description
+^^^^^^^^^^^
+
+Allow a test ``seconds`` to complete after ``regex`` is encountered in
+its output.
+
+When the test outputs a line that matches ``regex`` its start time is
+reset to the current time and its timeout duration is changed to
+``seconds``.  Prior to this, the timeout duration is determined by the
+:prop_test:`TIMEOUT` property or the :variable:`CTEST_TEST_TIMEOUT`
+variable if either of these are set.  Because the test's start time is
+reset, its execution time will not include any time that was spent
+waiting for the matching output.
+
+:prop_test:`TIMEOUT_AFTER_MATCH` is useful for avoiding spurious
+timeouts when your test must wait for some system resource to become
+available before it can execute.  Set :prop_test:`TIMEOUT` to a longer
+duration that accounts for resource acquisition and use
+:prop_test:`TIMEOUT_AFTER_MATCH` to control how long the actual test
+is allowed to run.
+
+If the required resource can be controlled by CTest you should use
+:prop_test:`RESOURCE_LOCK` instead of :prop_test:`TIMEOUT_AFTER_MATCH`.
+This property should be used when only the test itself can determine
+when its required resources are available.
diff --git a/share/cmake-3.18/Help/prop_test/WILL_FAIL.rst b/share/cmake-3.22/Help/prop_test/WILL_FAIL.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_test/WILL_FAIL.rst
rename to share/cmake-3.22/Help/prop_test/WILL_FAIL.rst
diff --git a/share/cmake-3.18/Help/prop_test/WORKING_DIRECTORY.rst b/share/cmake-3.22/Help/prop_test/WORKING_DIRECTORY.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_test/WORKING_DIRECTORY.rst
rename to share/cmake-3.22/Help/prop_test/WORKING_DIRECTORY.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/ADDITIONAL_CLEAN_FILES.rst b/share/cmake-3.22/Help/prop_tgt/ADDITIONAL_CLEAN_FILES.rst
new file mode 100644
index 0000000..dc87d23
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/ADDITIONAL_CLEAN_FILES.rst
@@ -0,0 +1,25 @@
+ADDITIONAL_CLEAN_FILES
+----------------------
+
+.. versionadded:: 3.15
+
+A :ref:`;-list <CMake Language Lists>` of files or directories that will be
+removed as a part of the global ``clean`` target.  It can be used to specify
+files and directories that are generated as part of building the target or
+that are directly associated with the target in some way (e.g. created as a
+result of running the target).
+
+For custom targets, if such files can be captured as outputs or byproducts
+instead, then that should be preferred over adding them to this property.
+If an additional clean file is used by multiple targets or isn't
+target-specific, then the :prop_dir:`ADDITIONAL_CLEAN_FILES` directory
+property may be the more appropriate property to use.
+
+Relative paths are allowed and are interpreted relative to the
+current binary directory.
+
+Contents of ``ADDITIONAL_CLEAN_FILES`` may use
+:manual:`generator expressions <cmake-generator-expressions(7)>`.
+
+This property only works for the :generator:`Ninja` and the Makefile
+generators.  It is ignored by other generators.
diff --git a/share/cmake-3.22/Help/prop_tgt/AIX_EXPORT_ALL_SYMBOLS.rst b/share/cmake-3.22/Help/prop_tgt/AIX_EXPORT_ALL_SYMBOLS.rst
new file mode 100644
index 0000000..de98fdf
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/AIX_EXPORT_ALL_SYMBOLS.rst
@@ -0,0 +1,14 @@
+AIX_EXPORT_ALL_SYMBOLS
+----------------------
+
+.. versionadded:: 3.17
+
+On AIX, CMake automatically exports all symbols from shared libraries, and
+from executables with the :prop_tgt:`ENABLE_EXPORTS` target property set.
+Explicitly disable this boolean property to suppress the behavior and
+export no symbols by default.  In this case it is expected that the project
+will use other means to export some symbols.
+
+This property is initialized by the value of
+the :variable:`CMAKE_AIX_EXPORT_ALL_SYMBOLS` variable if it is set
+when a target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/ALIASED_TARGET.rst b/share/cmake-3.22/Help/prop_tgt/ALIASED_TARGET.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/ALIASED_TARGET.rst
rename to share/cmake-3.22/Help/prop_tgt/ALIASED_TARGET.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/ALIAS_GLOBAL.rst b/share/cmake-3.22/Help/prop_tgt/ALIAS_GLOBAL.rst
new file mode 100644
index 0000000..a8859c6
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/ALIAS_GLOBAL.rst
@@ -0,0 +1,19 @@
+ALIAS_GLOBAL
+------------
+
+.. versionadded:: 3.18
+
+Read-only property indicating of whether an :ref:`ALIAS target <Alias Targets>`
+is globally visible.
+
+The boolean value of this property is ``TRUE`` for aliases to
+:ref:`IMPORTED targets <Imported Targets>` created
+with the ``GLOBAL`` options to :command:`add_executable()` or
+:command:`add_library()`, ``FALSE`` otherwise. It is undefined for
+targets built within the project.
+
+.. note::
+
+  Promoting an :ref:`IMPORTED target <Imported Targets>` from ``LOCAL``
+  to ``GLOBAL`` scope by changing the value or :prop_tgt:`IMPORTED_GLOBAL`
+  target property do not change the scope of local aliases.
diff --git a/share/cmake-3.22/Help/prop_tgt/ANDROID_ANT_ADDITIONAL_OPTIONS.rst b/share/cmake-3.22/Help/prop_tgt/ANDROID_ANT_ADDITIONAL_OPTIONS.rst
new file mode 100644
index 0000000..eceb17d
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/ANDROID_ANT_ADDITIONAL_OPTIONS.rst
@@ -0,0 +1,10 @@
+ANDROID_ANT_ADDITIONAL_OPTIONS
+------------------------------
+
+.. versionadded:: 3.4
+
+Set the additional options for Android Ant build system. This is
+a string value containing all command line options for the Ant build.
+This property is initialized by the value of the
+:variable:`CMAKE_ANDROID_ANT_ADDITIONAL_OPTIONS` variable if it is
+set when a target is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/ANDROID_API.rst b/share/cmake-3.22/Help/prop_tgt/ANDROID_API.rst
new file mode 100644
index 0000000..7664f18
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/ANDROID_API.rst
@@ -0,0 +1,10 @@
+ANDROID_API
+-----------
+
+.. versionadded:: 3.1
+
+When :ref:`Cross Compiling for Android with NVIDIA Nsight Tegra Visual Studio
+Edition`, this property sets the Android target API version (e.g. ``15``).
+The version number must be a positive decimal integer.  This property is
+initialized by the value of the :variable:`CMAKE_ANDROID_API` variable if
+it is set when a target is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/ANDROID_API_MIN.rst b/share/cmake-3.22/Help/prop_tgt/ANDROID_API_MIN.rst
new file mode 100644
index 0000000..7ca2455
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/ANDROID_API_MIN.rst
@@ -0,0 +1,9 @@
+ANDROID_API_MIN
+---------------
+
+.. versionadded:: 3.2
+
+Set the Android MIN API version (e.g. ``9``).  The version number
+must be a positive decimal integer.  This property is initialized by
+the value of the :variable:`CMAKE_ANDROID_API_MIN` variable if it is set
+when a target is created.  Native code builds using this API version.
diff --git a/share/cmake-3.22/Help/prop_tgt/ANDROID_ARCH.rst b/share/cmake-3.22/Help/prop_tgt/ANDROID_ARCH.rst
new file mode 100644
index 0000000..94b76dd
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/ANDROID_ARCH.rst
@@ -0,0 +1,20 @@
+ANDROID_ARCH
+------------
+
+.. versionadded:: 3.4
+
+When :ref:`Cross Compiling for Android with NVIDIA Nsight Tegra Visual Studio
+Edition`, this property sets the Android target architecture.
+
+This is a string property that could be set to the one of
+the following values:
+
+* ``armv7-a``: "ARMv7-A (armv7-a)"
+* ``armv7-a-hard``: "ARMv7-A, hard-float ABI (armv7-a)"
+* ``arm64-v8a``: "ARMv8-A, 64bit (arm64-v8a)"
+* ``x86``: "x86 (x86)"
+* ``x86_64``: "x86_64 (x86_64)"
+
+This property is initialized by the value of the
+:variable:`CMAKE_ANDROID_ARCH` variable if it is set
+when a target is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/ANDROID_ASSETS_DIRECTORIES.rst b/share/cmake-3.22/Help/prop_tgt/ANDROID_ASSETS_DIRECTORIES.rst
new file mode 100644
index 0000000..b09a8b7
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/ANDROID_ASSETS_DIRECTORIES.rst
@@ -0,0 +1,11 @@
+ANDROID_ASSETS_DIRECTORIES
+--------------------------
+
+.. versionadded:: 3.4
+
+Set the Android assets directories to copy into the main assets
+folder before build. This a string property that contains the
+directory paths separated by semicolon.
+This property is initialized by the value of the
+:variable:`CMAKE_ANDROID_ASSETS_DIRECTORIES` variable if it is set when
+a target is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/ANDROID_GUI.rst b/share/cmake-3.22/Help/prop_tgt/ANDROID_GUI.rst
new file mode 100644
index 0000000..cc022db
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/ANDROID_GUI.rst
@@ -0,0 +1,17 @@
+ANDROID_GUI
+-----------
+
+.. versionadded:: 3.1
+
+When :ref:`Cross Compiling for Android with NVIDIA Nsight Tegra Visual Studio
+Edition`, this property specifies whether to build an executable as an
+application package on Android.
+
+When this property is set to true the executable when built for Android
+will be created as an application package.  This property is initialized
+by the value of the :variable:`CMAKE_ANDROID_GUI` variable if it is set
+when a target is created.
+
+Add the ``AndroidManifest.xml`` source file explicitly to the
+target :command:`add_executable` command invocation to specify the
+root directory of the application package source.
diff --git a/share/cmake-3.22/Help/prop_tgt/ANDROID_JAR_DEPENDENCIES.rst b/share/cmake-3.22/Help/prop_tgt/ANDROID_JAR_DEPENDENCIES.rst
new file mode 100644
index 0000000..9880daf
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/ANDROID_JAR_DEPENDENCIES.rst
@@ -0,0 +1,9 @@
+ANDROID_JAR_DEPENDENCIES
+------------------------
+
+.. versionadded:: 3.4
+
+Set the Android property that specifies JAR dependencies.
+This is a string value property. This property is initialized
+by the value of the :variable:`CMAKE_ANDROID_JAR_DEPENDENCIES`
+variable if it is set when a target is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/ANDROID_JAR_DIRECTORIES.rst b/share/cmake-3.22/Help/prop_tgt/ANDROID_JAR_DIRECTORIES.rst
new file mode 100644
index 0000000..6fef50b
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/ANDROID_JAR_DIRECTORIES.rst
@@ -0,0 +1,16 @@
+ANDROID_JAR_DIRECTORIES
+-----------------------
+
+.. versionadded:: 3.4
+
+Set the Android property that specifies directories to search for
+the JAR libraries.
+
+This a string property that contains the directory paths separated by
+semicolons. This property is initialized by the value of the
+:variable:`CMAKE_ANDROID_JAR_DIRECTORIES` variable if it is set when
+a target is created.
+
+Contents of ``ANDROID_JAR_DIRECTORIES`` may use "generator expressions"
+with the syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)`
+manual for available expressions.
diff --git a/share/cmake-3.22/Help/prop_tgt/ANDROID_JAVA_SOURCE_DIR.rst b/share/cmake-3.22/Help/prop_tgt/ANDROID_JAVA_SOURCE_DIR.rst
new file mode 100644
index 0000000..9ea9884
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/ANDROID_JAVA_SOURCE_DIR.rst
@@ -0,0 +1,10 @@
+ANDROID_JAVA_SOURCE_DIR
+-----------------------
+
+.. versionadded:: 3.4
+
+Set the Android property that defines the Java source code root directories.
+This a string property that contains the directory paths separated by semicolon.
+This property is initialized by the value of the
+:variable:`CMAKE_ANDROID_JAVA_SOURCE_DIR` variable if it is set
+when a target is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/ANDROID_NATIVE_LIB_DEPENDENCIES.rst b/share/cmake-3.22/Help/prop_tgt/ANDROID_NATIVE_LIB_DEPENDENCIES.rst
new file mode 100644
index 0000000..3aa741f
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/ANDROID_NATIVE_LIB_DEPENDENCIES.rst
@@ -0,0 +1,16 @@
+ANDROID_NATIVE_LIB_DEPENDENCIES
+-------------------------------
+
+.. versionadded:: 3.4
+
+Set the Android property that specifies the .so dependencies.
+This is a string property.
+
+This property is initialized by the value of the
+:variable:`CMAKE_ANDROID_NATIVE_LIB_DEPENDENCIES` variable if it is set
+when a target is created.
+
+Contents of ``ANDROID_NATIVE_LIB_DEPENDENCIES`` may use
+"generator expressions" with the syntax ``$<...>``. See the
+:manual:`cmake-generator-expressions(7)` manual for
+available expressions.
diff --git a/share/cmake-3.22/Help/prop_tgt/ANDROID_NATIVE_LIB_DIRECTORIES.rst b/share/cmake-3.22/Help/prop_tgt/ANDROID_NATIVE_LIB_DIRECTORIES.rst
new file mode 100644
index 0000000..98200d9
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/ANDROID_NATIVE_LIB_DIRECTORIES.rst
@@ -0,0 +1,18 @@
+ANDROID_NATIVE_LIB_DIRECTORIES
+------------------------------
+
+.. versionadded:: 3.4
+
+Set the Android property that specifies directories to search for the ``.so``
+libraries.
+
+This a string property that contains the directory paths separated
+by semicolons.
+
+This property is initialized by the value of the
+:variable:`CMAKE_ANDROID_NATIVE_LIB_DIRECTORIES` variable if it is set when a
+target is created.
+
+Contents of ``ANDROID_NATIVE_LIB_DIRECTORIES`` may use "generator expressions"
+with the syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)`
+manual for available expressions.
diff --git a/share/cmake-3.22/Help/prop_tgt/ANDROID_PROCESS_MAX.rst b/share/cmake-3.22/Help/prop_tgt/ANDROID_PROCESS_MAX.rst
new file mode 100644
index 0000000..0b6aba7
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/ANDROID_PROCESS_MAX.rst
@@ -0,0 +1,10 @@
+ANDROID_PROCESS_MAX
+-------------------
+
+.. versionadded:: 3.4
+
+Set the Android property that defines the maximum number of a
+parallel Android NDK compiler processes (e.g. ``4``).
+This property is initialized by the value of the
+:variable:`CMAKE_ANDROID_PROCESS_MAX` variable if it is set
+when a target is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/ANDROID_PROGUARD.rst b/share/cmake-3.22/Help/prop_tgt/ANDROID_PROGUARD.rst
new file mode 100644
index 0000000..b5ce166
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/ANDROID_PROGUARD.rst
@@ -0,0 +1,11 @@
+ANDROID_PROGUARD
+----------------
+
+.. versionadded:: 3.4
+
+When this property is set to true that enables the ProGuard tool to shrink,
+optimize, and obfuscate the code by removing unused code and renaming
+classes, fields, and methods with semantically obscure names.
+This property is initialized by the value of the
+:variable:`CMAKE_ANDROID_PROGUARD` variable if it is set
+when a target is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/ANDROID_PROGUARD_CONFIG_PATH.rst b/share/cmake-3.22/Help/prop_tgt/ANDROID_PROGUARD_CONFIG_PATH.rst
new file mode 100644
index 0000000..6ac59d8
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/ANDROID_PROGUARD_CONFIG_PATH.rst
@@ -0,0 +1,11 @@
+ANDROID_PROGUARD_CONFIG_PATH
+----------------------------
+
+.. versionadded:: 3.4
+
+Set the Android property that specifies the location of the ProGuard
+config file. Leave empty to use the default one.
+This a string property that contains the path to ProGuard config file.
+This property is initialized by the value of the
+:variable:`CMAKE_ANDROID_PROGUARD_CONFIG_PATH` variable if it is set
+when a target is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/ANDROID_SECURE_PROPS_PATH.rst b/share/cmake-3.22/Help/prop_tgt/ANDROID_SECURE_PROPS_PATH.rst
new file mode 100644
index 0000000..f2ffa2e
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/ANDROID_SECURE_PROPS_PATH.rst
@@ -0,0 +1,10 @@
+ANDROID_SECURE_PROPS_PATH
+-------------------------
+
+.. versionadded:: 3.4
+
+Set the Android property that states the location of the secure properties file.
+This is a string property that contains the file path.
+This property is initialized by the value of the
+:variable:`CMAKE_ANDROID_SECURE_PROPS_PATH` variable
+if it is set when a target is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/ANDROID_SKIP_ANT_STEP.rst b/share/cmake-3.22/Help/prop_tgt/ANDROID_SKIP_ANT_STEP.rst
new file mode 100644
index 0000000..1a54bce
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/ANDROID_SKIP_ANT_STEP.rst
@@ -0,0 +1,8 @@
+ANDROID_SKIP_ANT_STEP
+---------------------
+
+.. versionadded:: 3.4
+
+Set the Android property that defines whether or not to skip the Ant build step.
+This is a boolean property initialized by the value of the
+:variable:`CMAKE_ANDROID_SKIP_ANT_STEP` variable if it is set when a target is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/ANDROID_STL_TYPE.rst b/share/cmake-3.22/Help/prop_tgt/ANDROID_STL_TYPE.rst
new file mode 100644
index 0000000..c83712b
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/ANDROID_STL_TYPE.rst
@@ -0,0 +1,29 @@
+ANDROID_STL_TYPE
+----------------
+
+.. versionadded:: 3.4
+
+When :ref:`Cross Compiling for Android with NVIDIA Nsight Tegra Visual Studio
+Edition`, this property specifies the type of STL support for the project.
+This is a string property that could set to the one of the following values:
+
+``none``
+  No C++ Support
+``system``
+  Minimal C++ without STL
+``gabi++_static``
+  GAbi++ Static
+``gabi++_shared``
+  GAbi++ Shared
+``gnustl_static``
+  GNU libstdc++ Static
+``gnustl_shared``
+  GNU libstdc++ Shared
+``stlport_static``
+  STLport Static
+``stlport_shared``
+  STLport Shared
+
+This property is initialized by the value of the
+:variable:`CMAKE_ANDROID_STL_TYPE` variable if it is set when a target is
+created.
diff --git a/share/cmake-3.22/Help/prop_tgt/ARCHIVE_OUTPUT_DIRECTORY.rst b/share/cmake-3.22/Help/prop_tgt/ARCHIVE_OUTPUT_DIRECTORY.rst
new file mode 100644
index 0000000..677e06d
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/ARCHIVE_OUTPUT_DIRECTORY.rst
@@ -0,0 +1,9 @@
+ARCHIVE_OUTPUT_DIRECTORY
+------------------------
+
+.. |XXX| replace:: :ref:`ARCHIVE <Archive Output Artifacts>`
+.. |xxx| replace:: archive
+.. |CMAKE_XXX_OUTPUT_DIRECTORY| replace:: :variable:`CMAKE_ARCHIVE_OUTPUT_DIRECTORY`
+.. include:: XXX_OUTPUT_DIRECTORY.txt
+
+See also the :prop_tgt:`ARCHIVE_OUTPUT_DIRECTORY_<CONFIG>` target property.
diff --git a/share/cmake-3.18/Help/prop_tgt/ARCHIVE_OUTPUT_DIRECTORY_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/ARCHIVE_OUTPUT_DIRECTORY_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/ARCHIVE_OUTPUT_DIRECTORY_CONFIG.rst
rename to share/cmake-3.22/Help/prop_tgt/ARCHIVE_OUTPUT_DIRECTORY_CONFIG.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/ARCHIVE_OUTPUT_NAME.rst b/share/cmake-3.22/Help/prop_tgt/ARCHIVE_OUTPUT_NAME.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/ARCHIVE_OUTPUT_NAME.rst
rename to share/cmake-3.22/Help/prop_tgt/ARCHIVE_OUTPUT_NAME.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/ARCHIVE_OUTPUT_NAME_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/ARCHIVE_OUTPUT_NAME_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/ARCHIVE_OUTPUT_NAME_CONFIG.rst
rename to share/cmake-3.22/Help/prop_tgt/ARCHIVE_OUTPUT_NAME_CONFIG.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/AUTOGEN_BUILD_DIR.rst b/share/cmake-3.22/Help/prop_tgt/AUTOGEN_BUILD_DIR.rst
new file mode 100644
index 0000000..ff42ae8
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/AUTOGEN_BUILD_DIR.rst
@@ -0,0 +1,19 @@
+AUTOGEN_BUILD_DIR
+-----------------
+
+.. versionadded:: 3.9
+
+Directory where :prop_tgt:`AUTOMOC`, :prop_tgt:`AUTOUIC` and :prop_tgt:`AUTORCC`
+generate files for the target.
+
+The directory is created on demand and automatically added to the
+:prop_tgt:`ADDITIONAL_CLEAN_FILES` target property.
+
+When unset or empty the directory ``<dir>/<target-name>_autogen`` is used where
+``<dir>`` is :variable:`CMAKE_CURRENT_BINARY_DIR` and ``<target-name>``
+is :prop_tgt:`NAME`.
+
+By default :prop_tgt:`AUTOGEN_BUILD_DIR` is unset.
+
+See the :manual:`cmake-qt(7)` manual for more information on using CMake
+with Qt.
diff --git a/share/cmake-3.22/Help/prop_tgt/AUTOGEN_ORIGIN_DEPENDS.rst b/share/cmake-3.22/Help/prop_tgt/AUTOGEN_ORIGIN_DEPENDS.rst
new file mode 100644
index 0000000..563190a
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/AUTOGEN_ORIGIN_DEPENDS.rst
@@ -0,0 +1,40 @@
+AUTOGEN_ORIGIN_DEPENDS
+----------------------
+
+.. versionadded:: 3.14
+
+Switch for forwarding origin target dependencies to the corresponding
+``_autogen`` target.
+
+Targets which have their :prop_tgt:`AUTOMOC` or :prop_tgt:`AUTOUIC` property
+``ON`` have a corresponding ``_autogen`` target which generates
+``moc`` and ``uic`` files.  As this ``_autogen`` target is created at
+generate-time, it is not possible to define dependencies of it using
+e.g.  :command:`add_dependencies`.  Instead the
+:prop_tgt:`AUTOGEN_ORIGIN_DEPENDS` target property decides whether the origin
+target dependencies should be forwarded to the ``_autogen`` target or not.
+
+By default :prop_tgt:`AUTOGEN_ORIGIN_DEPENDS` is initialized from
+:variable:`CMAKE_AUTOGEN_ORIGIN_DEPENDS` which is ``ON`` by default.
+
+In total the dependencies of the ``_autogen`` target are composed from
+
+- forwarded origin target dependencies
+  (enabled by default via :prop_tgt:`AUTOGEN_ORIGIN_DEPENDS`)
+- additional user defined dependencies from :prop_tgt:`AUTOGEN_TARGET_DEPENDS`
+
+See the :manual:`cmake-qt(7)` manual for more information on using CMake
+with Qt.
+
+Note
+^^^^
+
+Disabling :prop_tgt:`AUTOGEN_ORIGIN_DEPENDS` is useful to avoid building of
+origin target dependencies when building the ``_autogen`` target only.
+This is especially interesting when a
+:variable:`global autogen target <CMAKE_GLOBAL_AUTOGEN_TARGET>` is enabled.
+
+When the ``_autogen`` target doesn't require all the origin target's
+dependencies, and :prop_tgt:`AUTOGEN_ORIGIN_DEPENDS` is disabled, it might be
+necessary to extend :prop_tgt:`AUTOGEN_TARGET_DEPENDS` to add missing
+dependencies.
diff --git a/share/cmake-3.22/Help/prop_tgt/AUTOGEN_PARALLEL.rst b/share/cmake-3.22/Help/prop_tgt/AUTOGEN_PARALLEL.rst
new file mode 100644
index 0000000..663b54e
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/AUTOGEN_PARALLEL.rst
@@ -0,0 +1,23 @@
+AUTOGEN_PARALLEL
+----------------
+
+.. versionadded:: 3.11
+
+Number of parallel ``moc`` or ``uic`` processes to start when using
+:prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`.
+
+The custom ``<origin>_autogen`` target starts a number of threads of which
+each one parses a source file and on demand starts a ``moc`` or ``uic``
+process.  ``AUTOGEN_PARALLEL`` controls how many parallel threads
+(and therefore ``moc`` or ``uic`` processes) are started.
+
+- An empty (or unset) value or the string ``AUTO`` sets the number of
+  threads/processes to the number of physical CPUs on the host system.
+- A positive non zero integer value sets the exact thread/process count.
+- Otherwise a single thread/process is started.
+
+By default ``AUTOGEN_PARALLEL`` is initialized from
+:variable:`CMAKE_AUTOGEN_PARALLEL`.
+
+See the :manual:`cmake-qt(7)` manual for more information on using CMake
+with Qt.
diff --git a/share/cmake-3.18/Help/prop_tgt/AUTOGEN_TARGET_DEPENDS.rst b/share/cmake-3.22/Help/prop_tgt/AUTOGEN_TARGET_DEPENDS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/AUTOGEN_TARGET_DEPENDS.rst
rename to share/cmake-3.22/Help/prop_tgt/AUTOGEN_TARGET_DEPENDS.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/AUTOMOC.rst b/share/cmake-3.22/Help/prop_tgt/AUTOMOC.rst
new file mode 100644
index 0000000..ed8b262
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/AUTOMOC.rst
@@ -0,0 +1,251 @@
+AUTOMOC
+-------
+
+Should the target be processed with auto-moc (for Qt projects).
+
+:prop_tgt:`AUTOMOC` is a boolean specifying whether CMake will handle the Qt
+``moc`` preprocessor automatically, i.e.  without having to use commands like
+:module:`QT4_WRAP_CPP() <FindQt4>`, ``QT5_WRAP_CPP()``, etc.
+Currently, Qt versions 4 to 6 are supported.
+
+This property is initialized by the value of the :variable:`CMAKE_AUTOMOC`
+variable if it is set when a target is created.
+
+When this property is set ``ON``, CMake will scan the header and
+source files at build time and invoke ``moc`` accordingly.
+
+
+Header file processing
+^^^^^^^^^^^^^^^^^^^^^^
+
+At configuration time, a list of header files that should be scanned by
+:prop_tgt:`AUTOMOC` is computed from the target's sources.
+
+- All header files in the target's sources are added to the scan list.
+- For all C++ source files ``<source_base>.<source_extension>`` in the
+  target's sources, CMake searches for
+
+  - a regular header with the same base name
+    (``<source_base>.<header_extention>``) and
+  - a private header with the same base name and a ``_p`` suffix
+    (``<source_base>_p.<header_extention>``)
+
+  and adds these to the scan list.
+
+At build time, CMake scans each unknown or modified header file from the
+list and searches for
+
+- a Qt macro from :prop_tgt:`AUTOMOC_MACRO_NAMES`,
+- additional file dependencies from the ``FILE`` argument of a
+  ``Q_PLUGIN_METADATA`` macro and
+- additional file dependencies detected by filters defined in
+  :prop_tgt:`AUTOMOC_DEPEND_FILTERS`.
+
+If a Qt macro is found, then the header will be compiled by the ``moc`` to the
+output file ``moc_<base_name>.cpp``.  The complete output file path is
+described in the section `Output file location`_.
+
+The header will be ``moc`` compiled again if a file from the additional file
+dependencies changes.
+
+Header ``moc`` output files ``moc_<base_name>.cpp`` can be included in source
+files.  In the section `Including header moc files in sources`_ there is more
+information on that topic.
+
+
+Source file processing
+^^^^^^^^^^^^^^^^^^^^^^
+
+At build time, CMake scans each unknown or modified C++ source file from the
+target's sources for
+
+- a Qt macro from :prop_tgt:`AUTOMOC_MACRO_NAMES`,
+- includes of header ``moc`` files
+  (see `Including header moc files in sources`_),
+- additional file dependencies from the ``FILE`` argument of a
+  ``Q_PLUGIN_METADATA`` macro and
+- additional file dependencies detected by filters defined in
+  :prop_tgt:`AUTOMOC_DEPEND_FILTERS`.
+
+If a Qt macro is found, then the C++ source file
+``<base>.<source_extension>`` is expected to as well contain an include
+statement
+
+.. code-block:: c++
+
+  #include <<base>.moc> // or
+  #include "<base>.moc"
+
+The source file then will be compiled by the ``moc`` to the output file
+``<base>.moc``.  A description of the complete output file path is in section
+`Output file location`_.
+
+The source will be ``moc`` compiled again if a file from the additional file
+dependencies changes.
+
+Including header moc files in sources
+"""""""""""""""""""""""""""""""""""""
+
+A source file can include the ``moc`` output file of a header
+``<header_base>.<header_extension>`` by using an include statement of
+the form
+
+.. code-block:: c++
+
+  #include <moc_<header_base>.cpp> // or
+  #include "moc_<header_base>.cpp"
+
+If the ``moc`` output file of a header is included by a source, it will
+be generated in a different location than if it was not included.  This is
+described in the section `Output file location`_.
+
+
+Output file location
+^^^^^^^^^^^^^^^^^^^^
+
+Included moc output files
+"""""""""""""""""""""""""
+
+``moc`` output files that are included by a source file will be generated in
+
+- ``<AUTOGEN_BUILD_DIR>/include``
+  for single configuration generators or in
+- ``<AUTOGEN_BUILD_DIR>/include_<CONFIG>``
+  for :prop_gbl:`multi configuration <GENERATOR_IS_MULTI_CONFIG>` generators.
+
+Where ``<AUTOGEN_BUILD_DIR>`` is the value of the target property
+:prop_tgt:`AUTOGEN_BUILD_DIR`.
+
+The include directory is automatically added to the target's
+:prop_tgt:`INCLUDE_DIRECTORIES`.
+
+Not included moc output files
+"""""""""""""""""""""""""""""
+
+``moc`` output files that are not included in a source file will be generated
+in
+
+- ``<AUTOGEN_BUILD_DIR>/<SOURCE_DIR_CHECKSUM>``
+  for single configuration generators or in,
+- ``<AUTOGEN_BUILD_DIR>/include_<CONFIG>/<SOURCE_DIR_CHECKSUM>``
+  for :prop_gbl:`multi configuration <GENERATOR_IS_MULTI_CONFIG>` generators.
+
+Where ``<SOURCE_DIR_CHECKSUM>`` is a checksum computed from the relative
+parent directory path of the ``moc`` input file.  This scheme allows to have
+``moc`` input files with the same name in different directories.
+
+All not included ``moc`` output files will be included automatically by the
+CMake generated file
+
+- ``<AUTOGEN_BUILD_DIR>/mocs_compilation.cpp``, or
+- ``<AUTOGEN_BUILD_DIR>/mocs_compilation_$<CONFIG>.cpp``,
+
+which is added to the target's sources.
+
+
+Qt version detection
+^^^^^^^^^^^^^^^^^^^^
+
+:prop_tgt:`AUTOMOC` enabled targets need to know the Qt major and minor
+version they're working with.  The major version usually is provided by the
+``INTERFACE_QT_MAJOR_VERSION`` property of the ``Qt[456]Core`` library,
+that the target links to.  To find the minor version, CMake builds a list of
+available Qt versions from
+
+- ``Qt6Core_VERSION_MAJOR`` and ``Qt6Core_VERSION_MINOR`` variables
+  (usually set by ``find_package(Qt6...)``)
+- ``Qt6Core_VERSION_MAJOR`` and ``Qt6Core_VERSION_MINOR`` directory properties
+- ``Qt5Core_VERSION_MAJOR`` and ``Qt5Core_VERSION_MINOR`` variables
+  (usually set by ``find_package(Qt5...)``)
+- ``Qt5Core_VERSION_MAJOR`` and ``Qt5Core_VERSION_MINOR`` directory properties
+- ``QT_VERSION_MAJOR`` and ``QT_VERSION_MINOR``  variables
+  (usually set by ``find_package(Qt4...)``)
+- ``QT_VERSION_MAJOR`` and ``QT_VERSION_MINOR``  directory properties
+
+in the context of the :command:`add_executable` or :command:`add_library` call.
+
+Assumed  ``INTERFACE_QT_MAJOR_VERSION`` is a valid number, the first
+entry in the list with a matching major version is taken.  If no matching major
+version was found, an error is generated.
+If  ``INTERFACE_QT_MAJOR_VERSION`` is not a valid number, the first
+entry in the list is taken.
+
+A ``find_package(Qt[456]...)`` call sets the ``QT/Qt[56]Core_VERSION_MAJOR/MINOR``
+variables.  If the call is in a different context than the
+:command:`add_executable` or :command:`add_library` call, e.g. in a function,
+then the version variables might not be available to the :prop_tgt:`AUTOMOC`
+enabled target.
+In that case the version variables can be forwarded from the
+``find_package(Qt[456]...)`` calling context to the :command:`add_executable`
+or :command:`add_library` calling context as directory properties.
+The following Qt5 example demonstrates the procedure.
+
+.. code-block:: cmake
+
+  function (add_qt5_client)
+    find_package(Qt5 REQUIRED QUIET COMPONENTS Core Widgets)
+    ...
+    set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
+      PROPERTY Qt5Core_VERSION_MAJOR "${Qt5Core_VERSION_MAJOR}")
+    set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
+      PROPERTY Qt5Core_VERSION_MINOR "${Qt5Core_VERSION_MAJOR}")
+    ...
+  endfunction ()
+  ...
+  add_qt5_client()
+  add_executable(myTarget main.cpp)
+  target_link_libraries(myTarget Qt5::QtWidgets)
+  set_property(TARGET myTarget PROPERTY AUTOMOC ON)
+
+
+Modifiers
+^^^^^^^^^
+
+:prop_tgt:`AUTOMOC_EXECUTABLE`:
+The ``moc`` executable will be detected automatically, but can be forced to
+a certain binary using this target property.
+
+:prop_tgt:`AUTOMOC_MOC_OPTIONS`:
+Additional command line options for ``moc`` can be set in this target property.
+
+:prop_tgt:`AUTOMOC_MACRO_NAMES`:
+This list of Qt macro names can be extended to search for additional macros in
+headers and sources.
+
+:prop_tgt:`AUTOMOC_DEPEND_FILTERS`:
+``moc`` dependency file names can be extracted from headers or sources by
+defining file name filters in this target property.
+
+:prop_tgt:`AUTOMOC_COMPILER_PREDEFINES`:
+Compiler pre definitions for ``moc`` are written to the ``moc_predefs.h`` file.
+The generation of this file can be enabled or disabled in this target property.
+
+:prop_sf:`SKIP_AUTOMOC`:
+Sources and headers can be excluded from :prop_tgt:`AUTOMOC` processing by
+setting this source file property.
+
+:prop_sf:`SKIP_AUTOGEN`:
+Source files can be excluded from :prop_tgt:`AUTOMOC`,
+:prop_tgt:`AUTOUIC` and :prop_tgt:`AUTORCC` processing by
+setting this source file property.
+
+:prop_gbl:`AUTOGEN_SOURCE_GROUP`:
+This global property can be used to group files generated by
+:prop_tgt:`AUTOMOC` or :prop_tgt:`AUTORCC` together in an IDE, e.g.  in MSVS.
+
+:prop_gbl:`AUTOGEN_TARGETS_FOLDER`:
+This global property can be used to group :prop_tgt:`AUTOMOC`,
+:prop_tgt:`AUTOUIC` and :prop_tgt:`AUTORCC` targets together in an IDE,
+e.g.  in MSVS.
+
+:variable:`CMAKE_GLOBAL_AUTOGEN_TARGET`:
+A global ``autogen`` target, that depends on all :prop_tgt:`AUTOMOC` or
+:prop_tgt:`AUTOUIC` generated ``<ORIGIN>_autogen`` targets in the project,
+will be generated when this variable is ``ON``.
+
+:prop_tgt:`AUTOGEN_PARALLEL`:
+This target property controls the number of ``moc`` or ``uic`` processes to
+start in parallel during builds.
+
+See the :manual:`cmake-qt(7)` manual for more information on using CMake
+with Qt.
diff --git a/share/cmake-3.22/Help/prop_tgt/AUTOMOC_COMPILER_PREDEFINES.rst b/share/cmake-3.22/Help/prop_tgt/AUTOMOC_COMPILER_PREDEFINES.rst
new file mode 100644
index 0000000..8998284
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/AUTOMOC_COMPILER_PREDEFINES.rst
@@ -0,0 +1,26 @@
+AUTOMOC_COMPILER_PREDEFINES
+---------------------------
+
+.. versionadded:: 3.10
+
+Boolean value used by :prop_tgt:`AUTOMOC` to determine if the
+compiler pre definitions file ``moc_predefs.h`` should be generated.
+
+CMake generates a ``moc_predefs.h`` file with compiler pre definitions
+from the output of the command defined in
+:variable:`CMAKE_CXX_COMPILER_PREDEFINES_COMMAND <CMAKE_<LANG>_COMPILER_PREDEFINES_COMMAND>`
+when
+
+- :prop_tgt:`AUTOMOC` is enabled,
+- :prop_tgt:`AUTOMOC_COMPILER_PREDEFINES` is enabled,
+- :variable:`CMAKE_CXX_COMPILER_PREDEFINES_COMMAND <CMAKE_<LANG>_COMPILER_PREDEFINES_COMMAND>` isn't empty and
+- the Qt version is greater or equal 5.8.
+
+The ``moc_predefs.h`` file, which is generated in :prop_tgt:`AUTOGEN_BUILD_DIR`,
+is passed to ``moc`` as the argument to the ``--include`` option.
+
+By default :prop_tgt:`AUTOMOC_COMPILER_PREDEFINES` is initialized from
+:variable:`CMAKE_AUTOMOC_COMPILER_PREDEFINES`, which is ON by default.
+
+See the :manual:`cmake-qt(7)` manual for more information on using CMake
+with Qt.
diff --git a/share/cmake-3.22/Help/prop_tgt/AUTOMOC_DEPEND_FILTERS.rst b/share/cmake-3.22/Help/prop_tgt/AUTOMOC_DEPEND_FILTERS.rst
new file mode 100644
index 0000000..1f31700
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/AUTOMOC_DEPEND_FILTERS.rst
@@ -0,0 +1,109 @@
+AUTOMOC_DEPEND_FILTERS
+----------------------
+
+.. versionadded:: 3.9
+
+Filter definitions used by :prop_tgt:`AUTOMOC` to extract file names from a
+source file that are registered as additional dependencies for the
+``moc`` file of the source file.
+
+Filters are defined as ``KEYWORD;REGULAR_EXPRESSION`` pairs. First the file
+content is searched for ``KEYWORD``. If it is found at least once, then file
+names are extracted by successively searching for ``REGULAR_EXPRESSION`` and
+taking the first match group.
+
+The file name found in the first match group is searched for
+
+- first in the vicinity of the source file
+- and afterwards in the target's :prop_tgt:`INCLUDE_DIRECTORIES`.
+
+If any of the extracted files changes, then the ``moc`` file for the source
+file gets rebuilt even when the source file itself doesn't change.
+
+If any of the extracted files is :prop_sf:`GENERATED` or if it is not in the
+target's sources, then it might be necessary to add it to the
+``_autogen`` target  dependencies.
+See :prop_tgt:`AUTOGEN_TARGET_DEPENDS` for reference.
+
+By default :prop_tgt:`AUTOMOC_DEPEND_FILTERS` is initialized from
+:variable:`CMAKE_AUTOMOC_DEPEND_FILTERS`, which is empty by default.
+
+From Qt 5.15.0 on this variable is ignored as moc is able to output the correct
+dependencies.
+
+See the :manual:`cmake-qt(7)` manual for more information on using CMake
+with Qt.
+
+
+Example 1
+^^^^^^^^^
+
+A header file ``my_class.hpp`` uses a custom macro ``JSON_FILE_MACRO`` which
+is defined in an other header ``macros.hpp``.
+We want the ``moc`` file of ``my_class.hpp`` to depend on the file name
+argument of ``JSON_FILE_MACRO``::
+
+  // my_class.hpp
+  class My_Class : public QObject
+  {
+    Q_OBJECT
+    JSON_FILE_MACRO ( "info.json" )
+  ...
+  };
+
+In ``CMakeLists.txt`` we add a filter to
+:variable:`CMAKE_AUTOMOC_DEPEND_FILTERS` like this::
+
+  list( APPEND CMAKE_AUTOMOC_DEPEND_FILTERS
+    "JSON_FILE_MACRO"
+    "[\n][ \t]*JSON_FILE_MACRO[ \t]*\\([ \t]*\"([^\"]+)\""
+  )
+
+We assume ``info.json`` is a plain (not :prop_sf:`GENERATED`) file that is
+listed in the target's source.  Therefore we do not need to add it to
+:prop_tgt:`AUTOGEN_TARGET_DEPENDS`.
+
+Example 2
+^^^^^^^^^
+
+In the target ``my_target`` a header file ``complex_class.hpp`` uses a
+custom macro ``JSON_BASED_CLASS`` which is defined in an other header
+``macros.hpp``::
+
+  // macros.hpp
+  ...
+  #define JSON_BASED_CLASS(name, json) \
+  class name : public QObject \
+  { \
+    Q_OBJECT \
+    Q_PLUGIN_METADATA(IID "demo" FILE json) \
+    name() {} \
+  };
+  ...
+
+::
+
+  // complex_class.hpp
+  #pragma once
+  JSON_BASED_CLASS(Complex_Class, "meta.json")
+  // end of file
+
+Since ``complex_class.hpp`` doesn't contain a ``Q_OBJECT`` macro it would be
+ignored by :prop_tgt:`AUTOMOC`.  We change this by adding ``JSON_BASED_CLASS``
+to :variable:`CMAKE_AUTOMOC_MACRO_NAMES`::
+
+  list(APPEND CMAKE_AUTOMOC_MACRO_NAMES "JSON_BASED_CLASS")
+
+We want the ``moc`` file of ``complex_class.hpp`` to depend on
+``meta.json``.  So we add a filter to
+:variable:`CMAKE_AUTOMOC_DEPEND_FILTERS`::
+
+  list(APPEND CMAKE_AUTOMOC_DEPEND_FILTERS
+    "JSON_BASED_CLASS"
+    "[\n^][ \t]*JSON_BASED_CLASS[ \t]*\\([^,]*,[ \t]*\"([^\"]+)\""
+  )
+
+Additionally we assume ``meta.json`` is :prop_sf:`GENERATED` which is
+why we have to add it to :prop_tgt:`AUTOGEN_TARGET_DEPENDS`::
+
+  set_property(TARGET my_target APPEND PROPERTY AUTOGEN_TARGET_DEPENDS "meta.json")
diff --git a/share/cmake-3.22/Help/prop_tgt/AUTOMOC_EXECUTABLE.rst b/share/cmake-3.22/Help/prop_tgt/AUTOMOC_EXECUTABLE.rst
new file mode 100644
index 0000000..f4b8396
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/AUTOMOC_EXECUTABLE.rst
@@ -0,0 +1,17 @@
+AUTOMOC_EXECUTABLE
+------------------
+
+.. versionadded:: 3.14
+
+:prop_tgt:`AUTOMOC_EXECUTABLE` is file path pointing to the ``moc``
+executable to use for :prop_tgt:`AUTOMOC` enabled files. Setting
+this property will make CMake skip the automatic detection of the
+``moc`` binary as well as the sanity-tests normally run to ensure
+that the binary is available and working as expected.
+
+Usually this property does not need to be set. Only consider this
+property if auto-detection of ``moc`` can not work -- e.g. because
+you are building the ``moc`` binary as part of your project.
+
+See the :manual:`cmake-qt(7)` manual for more information on using CMake
+with Qt.
diff --git a/share/cmake-3.22/Help/prop_tgt/AUTOMOC_MACRO_NAMES.rst b/share/cmake-3.22/Help/prop_tgt/AUTOMOC_MACRO_NAMES.rst
new file mode 100644
index 0000000..a53810d
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/AUTOMOC_MACRO_NAMES.rst
@@ -0,0 +1,34 @@
+AUTOMOC_MACRO_NAMES
+-------------------
+
+.. versionadded:: 3.10
+
+A :ref:`semicolon-separated list <CMake Language Lists>` list of macro names used by
+:prop_tgt:`AUTOMOC` to determine if a C++ file needs to be processed by ``moc``.
+
+This property is only used if the :prop_tgt:`AUTOMOC` property is ``ON``
+for this target.
+
+When running :prop_tgt:`AUTOMOC`, CMake searches for the strings listed in
+:prop_tgt:`AUTOMOC_MACRO_NAMES` in C++ source and header files.
+If any of the strings is found
+
+- as the first non space string on a new line or
+- as the first non space string after a ``{`` on a new line,
+
+then the file will be processed by ``moc``.
+
+By default :prop_tgt:`AUTOMOC_MACRO_NAMES` is initialized from
+:variable:`CMAKE_AUTOMOC_MACRO_NAMES`.
+
+See the :manual:`cmake-qt(7)` manual for more information on using CMake
+with Qt.
+
+Example
+^^^^^^^
+
+In this case the ``Q_OBJECT`` macro is hidden inside another macro
+called ``CUSTOM_MACRO``.  To let CMake know that source files that contain
+``CUSTOM_MACRO`` need to be ``moc`` processed, we call::
+
+  set_property(TARGET tgt APPEND PROPERTY AUTOMOC_MACRO_NAMES "CUSTOM_MACRO")
diff --git a/share/cmake-3.18/Help/prop_tgt/AUTOMOC_MOC_OPTIONS.rst b/share/cmake-3.22/Help/prop_tgt/AUTOMOC_MOC_OPTIONS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/AUTOMOC_MOC_OPTIONS.rst
rename to share/cmake-3.22/Help/prop_tgt/AUTOMOC_MOC_OPTIONS.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/AUTOMOC_PATH_PREFIX.rst b/share/cmake-3.22/Help/prop_tgt/AUTOMOC_PATH_PREFIX.rst
new file mode 100644
index 0000000..836d953
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/AUTOMOC_PATH_PREFIX.rst
@@ -0,0 +1,33 @@
+AUTOMOC_PATH_PREFIX
+-------------------
+
+.. versionadded:: 3.16
+
+When this property is ``ON``, CMake will generate the ``-p`` path prefix
+option for ``moc`` on :prop_tgt:`AUTOMOC` enabled Qt targets.
+
+To generate the path prefix, CMake tests if the header compiled by ``moc``
+is in any of the target
+:command:`include directories <target_include_directories>`.  If so, CMake will
+compute the relative path accordingly.  If the header is not in the
+:command:`include directories <target_include_directories>`, CMake will omit
+the ``-p`` path prefix option.  ``moc`` usually generates a
+relative include path in that case.
+
+:prop_tgt:`AUTOMOC_PATH_PREFIX` is initialized from the variable
+:variable:`CMAKE_AUTOMOC_PATH_PREFIX`, which is ``OFF`` by default.
+
+See the :manual:`cmake-qt(7)` manual for more information on using CMake
+with Qt.
+
+Reproducible builds
+^^^^^^^^^^^^^^^^^^^
+
+For reproducible builds it is recommended to keep headers that are ``moc``
+compiled in one of the target
+:command:`include directories <target_include_directories>` and set
+:prop_tgt:`AUTOMOC_PATH_PREFIX` to ``ON``.  This ensures that:
+
+- ``moc`` output files are identical on different build setups,
+- ``moc`` output files will compile correctly when the source and/or
+  build directory is a symbolic link.
diff --git a/share/cmake-3.22/Help/prop_tgt/AUTORCC.rst b/share/cmake-3.22/Help/prop_tgt/AUTORCC.rst
new file mode 100644
index 0000000..0a0c2a1
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/AUTORCC.rst
@@ -0,0 +1,62 @@
+AUTORCC
+-------
+
+Should the target be processed with auto-rcc (for Qt projects).
+
+:prop_tgt:`AUTORCC` is a boolean specifying whether CMake will handle
+the Qt ``rcc`` code generator automatically, i.e. without having to use
+commands like :module:`QT4_ADD_RESOURCES() <FindQt4>`, ``QT5_ADD_RESOURCES()``,
+etc.  Currently, Qt versions 4 to 6 are supported.
+
+When this property is ``ON``, CMake will handle ``.qrc`` files added
+as target sources at build time and invoke ``rcc`` accordingly.
+This property is initialized by the value of the :variable:`CMAKE_AUTORCC`
+variable if it is set when a target is created.
+
+By default :prop_tgt:`AUTORCC` is processed by a
+:command:`custom command <add_custom_command>`.
+If the ``.qrc`` file is :prop_sf:`GENERATED`, a
+:command:`custom target <add_custom_target>` is used instead.
+
+When there are multiple ``.qrc`` files with the same name, CMake will
+generate unspecified unique output file names for ``rcc``.  Therefore, if
+``Q_INIT_RESOURCE()`` or ``Q_CLEANUP_RESOURCE()`` need to be used, the
+``.qrc`` file name must be unique.
+
+
+Modifiers
+^^^^^^^^^
+
+:prop_tgt:`AUTORCC_EXECUTABLE`:
+The ``rcc`` executable will be detected automatically, but can be forced to
+a certain binary by setting this target property.
+
+:prop_tgt:`AUTORCC_OPTIONS`:
+Additional command line options for ``rcc`` can be set via this target
+property.  The corresponding :prop_sf:`AUTORCC_OPTIONS` source file property
+can be used to specify options to be applied only to a specific ``.qrc`` file.
+
+:prop_sf:`SKIP_AUTORCC`:
+``.qrc`` files can be excluded from :prop_tgt:`AUTORCC` processing by
+setting this source file property.
+
+:prop_sf:`SKIP_AUTOGEN`:
+Source files can be excluded from :prop_tgt:`AUTOMOC`,
+:prop_tgt:`AUTOUIC` and :prop_tgt:`AUTORCC` processing by
+setting this source file property.
+
+:prop_gbl:`AUTOGEN_SOURCE_GROUP`:
+This global property can be used to group files generated by
+:prop_tgt:`AUTOMOC` or :prop_tgt:`AUTORCC` together in an IDE, e.g.  in MSVS.
+
+:prop_gbl:`AUTOGEN_TARGETS_FOLDER`:
+This global property can be used to group :prop_tgt:`AUTOMOC`,
+:prop_tgt:`AUTOUIC` and :prop_tgt:`AUTORCC` targets together in an IDE,
+e.g.  in MSVS.
+
+:variable:`CMAKE_GLOBAL_AUTORCC_TARGET`:
+A global ``autorcc`` target that depends on all :prop_tgt:`AUTORCC` targets
+in the project will be generated when this variable is ``ON``.
+
+See the :manual:`cmake-qt(7)` manual for more information on using CMake
+with Qt.
diff --git a/share/cmake-3.22/Help/prop_tgt/AUTORCC_EXECUTABLE.rst b/share/cmake-3.22/Help/prop_tgt/AUTORCC_EXECUTABLE.rst
new file mode 100644
index 0000000..4f85fba
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/AUTORCC_EXECUTABLE.rst
@@ -0,0 +1,17 @@
+AUTORCC_EXECUTABLE
+------------------
+
+.. versionadded:: 3.14
+
+:prop_tgt:`AUTORCC_EXECUTABLE` is file path pointing to the ``rcc``
+executable to use for :prop_tgt:`AUTORCC` enabled files. Setting
+this property will make CMake skip the automatic detection of the
+``rcc`` binary as well as the sanity-tests normally run to ensure
+that the binary is available and working as expected.
+
+Usually this property does not need to be set. Only consider this
+property if auto-detection of ``rcc`` can not work -- e.g. because
+you are building the ``rcc`` binary as part of your project.
+
+See the :manual:`cmake-qt(7)` manual for more information on using CMake
+with Qt.
diff --git a/share/cmake-3.18/Help/prop_tgt/AUTORCC_OPTIONS.rst b/share/cmake-3.22/Help/prop_tgt/AUTORCC_OPTIONS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/AUTORCC_OPTIONS.rst
rename to share/cmake-3.22/Help/prop_tgt/AUTORCC_OPTIONS.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/AUTOUIC.rst b/share/cmake-3.22/Help/prop_tgt/AUTOUIC.rst
new file mode 100644
index 0000000..e0cea97
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/AUTOUIC.rst
@@ -0,0 +1,85 @@
+AUTOUIC
+-------
+
+Should the target be processed with auto-uic (for Qt projects).
+
+:prop_tgt:`AUTOUIC` is a boolean specifying whether CMake will handle
+the Qt ``uic`` code generator automatically, i.e. without having to use
+commands like :module:`QT4_WRAP_UI() <FindQt4>`, ``QT5_WRAP_UI()``, etc.
+Currently, Qt versions 4 to 6 are supported.
+
+This property is initialized by the value of the :variable:`CMAKE_AUTOUIC`
+variable if it is set when a target is created.
+
+When this property is ``ON``, CMake will scan the header and source files at
+build time and invoke ``uic`` accordingly.
+
+
+Header and source file processing
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+At build time, CMake scans each header and source file from the
+target's sources for include statements of the form
+
+.. code-block:: c++
+
+  #include "ui_<ui_base>.h"
+
+Once such an include statement is found in a file, CMake searches for the
+``uic`` input file ``<ui_base>.ui``
+
+- in the vicinity of the file and
+- in the :prop_tgt:`AUTOUIC_SEARCH_PATHS` of the target.
+
+If the ``<ui_base>.ui`` file was found, ``uic`` is called on it to generate
+``ui_<ui_base>.h`` in the directory
+
+- ``<AUTOGEN_BUILD_DIR>/include`` for single configuration generators or in
+- ``<AUTOGEN_BUILD_DIR>/include_<CONFIG>`` for
+  :prop_gbl:`multi configuration <GENERATOR_IS_MULTI_CONFIG>` generators.
+
+Where ``<AUTOGEN_BUILD_DIR>`` is the value of the target property
+:prop_tgt:`AUTOGEN_BUILD_DIR`.
+
+The include directory is automatically added to the target's
+:prop_tgt:`INCLUDE_DIRECTORIES`.
+
+
+Modifiers
+^^^^^^^^^
+
+:prop_tgt:`AUTOUIC_EXECUTABLE`:
+The ``uic`` executable will be detected automatically, but can be forced to
+a certain binary using this target property.
+
+:prop_tgt:`AUTOUIC_OPTIONS`:
+Additional command line options for ``uic`` can be set via this target
+property.  The corresponding :prop_sf:`AUTOUIC_OPTIONS` source file property
+can be used to specify options to be applied only to a specific
+``<base_name>.ui`` file.
+
+:prop_sf:`SKIP_AUTOUIC`:
+Source files can be excluded from :prop_tgt:`AUTOUIC` processing by setting
+this source file property.
+
+:prop_sf:`SKIP_AUTOGEN`:
+Source files can be excluded from :prop_tgt:`AUTOMOC`,
+:prop_tgt:`AUTOUIC` and :prop_tgt:`AUTORCC` processing by
+setting this source file property.
+
+:prop_gbl:`AUTOGEN_TARGETS_FOLDER`:
+This global property can be used to group :prop_tgt:`AUTOMOC`,
+:prop_tgt:`AUTOUIC` and :prop_tgt:`AUTORCC` targets together in an IDE,
+e.g.  in MSVS.
+
+:variable:`CMAKE_GLOBAL_AUTOGEN_TARGET`:
+A global ``autogen`` target, that depends on all :prop_tgt:`AUTOMOC` or
+:prop_tgt:`AUTOUIC` generated ``<ORIGIN>_autogen`` targets in the project,
+will be generated when this variable is ``ON``.
+
+:prop_tgt:`AUTOGEN_PARALLEL`:
+This target property controls the number of ``moc`` or ``uic`` processes to
+start in parallel during builds.
+
+See the :manual:`cmake-qt(7)` manual for more information on using CMake
+with Qt.
diff --git a/share/cmake-3.22/Help/prop_tgt/AUTOUIC_EXECUTABLE.rst b/share/cmake-3.22/Help/prop_tgt/AUTOUIC_EXECUTABLE.rst
new file mode 100644
index 0000000..5966326
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/AUTOUIC_EXECUTABLE.rst
@@ -0,0 +1,17 @@
+AUTOUIC_EXECUTABLE
+------------------
+
+.. versionadded:: 3.14
+
+:prop_tgt:`AUTOUIC_EXECUTABLE` is file path pointing to the ``uic``
+executable to use for :prop_tgt:`AUTOUIC` enabled files. Setting
+this property will make CMake skip the automatic detection of the
+``uic`` binary as well as the sanity-tests normally run to ensure
+that the binary is available and working as expected.
+
+Usually this property does not need to be set. Only consider this
+property if auto-detection of ``uic`` can not work -- e.g. because
+you are building the ``uic`` binary as part of your project.
+
+See the :manual:`cmake-qt(7)` manual for more information on using CMake
+with Qt.
diff --git a/share/cmake-3.18/Help/prop_tgt/AUTOUIC_OPTIONS.rst b/share/cmake-3.22/Help/prop_tgt/AUTOUIC_OPTIONS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/AUTOUIC_OPTIONS.rst
rename to share/cmake-3.22/Help/prop_tgt/AUTOUIC_OPTIONS.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/AUTOUIC_SEARCH_PATHS.rst b/share/cmake-3.22/Help/prop_tgt/AUTOUIC_SEARCH_PATHS.rst
new file mode 100644
index 0000000..87fea48
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/AUTOUIC_SEARCH_PATHS.rst
@@ -0,0 +1,14 @@
+AUTOUIC_SEARCH_PATHS
+--------------------
+
+.. versionadded:: 3.9
+
+Search path list used by :prop_tgt:`AUTOUIC` to find included
+``.ui`` files.
+
+This property is initialized by the value of the
+:variable:`CMAKE_AUTOUIC_SEARCH_PATHS` variable if it is set
+when a target is created. Otherwise it is empty.
+
+See the :manual:`cmake-qt(7)` manual for more information on using CMake
+with Qt.
diff --git a/share/cmake-3.22/Help/prop_tgt/BINARY_DIR.rst b/share/cmake-3.22/Help/prop_tgt/BINARY_DIR.rst
new file mode 100644
index 0000000..beab12c
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/BINARY_DIR.rst
@@ -0,0 +1,8 @@
+BINARY_DIR
+----------
+
+.. versionadded:: 3.4
+
+This read-only property reports the value of the
+:variable:`CMAKE_CURRENT_BINARY_DIR` variable in the directory in which
+the target was defined.
diff --git a/share/cmake-3.22/Help/prop_tgt/BUILD_RPATH.rst b/share/cmake-3.22/Help/prop_tgt/BUILD_RPATH.rst
new file mode 100644
index 0000000..1f917a5
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/BUILD_RPATH.rst
@@ -0,0 +1,15 @@
+BUILD_RPATH
+-----------
+
+.. versionadded:: 3.8
+
+A :ref:`semicolon-separated list <CMake Language Lists>` specifying runtime path (``RPATH``)
+entries to add to binaries linked in the build tree (for platforms that
+support it).  The entries will *not* be used for binaries in the install
+tree.  See also the :prop_tgt:`INSTALL_RPATH` target property.
+
+This property is initialized by the value of the variable
+:variable:`CMAKE_BUILD_RPATH` if it is set when a target is created.
+
+This property supports
+:manual:`generator expressions <cmake-generator-expressions(7)>`.
diff --git a/share/cmake-3.22/Help/prop_tgt/BUILD_RPATH_USE_ORIGIN.rst b/share/cmake-3.22/Help/prop_tgt/BUILD_RPATH_USE_ORIGIN.rst
new file mode 100644
index 0000000..2cdfa0d
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/BUILD_RPATH_USE_ORIGIN.rst
@@ -0,0 +1,26 @@
+BUILD_RPATH_USE_ORIGIN
+----------------------
+
+.. versionadded:: 3.14
+
+Whether to use relative paths for the build ``RPATH``.
+
+This property is initialized by the value of the variable
+:variable:`CMAKE_BUILD_RPATH_USE_ORIGIN`.
+
+On platforms that support runtime paths (``RPATH``) with the
+``$ORIGIN`` token, setting this property to ``TRUE`` enables relative
+paths in the build ``RPATH`` for executables and shared libraries that
+point to shared libraries in the same build tree.
+
+Normally the build ``RPATH`` of a binary contains absolute paths
+to the directory of each shared library it links to.  The ``RPATH``
+entries for directories contained within the build tree can be made
+relative to enable relocatable builds and to help achieve reproducible
+builds by omitting the build directory from the build environment.
+
+This property has no effect on platforms that do not support the
+``$ORIGIN`` token in ``RPATH``, or when the :variable:`CMAKE_SKIP_RPATH`
+variable is set. The runtime path set through the
+:prop_tgt:`BUILD_RPATH` target property is also unaffected by this
+property.
diff --git a/share/cmake-3.22/Help/prop_tgt/BUILD_WITH_INSTALL_NAME_DIR.rst b/share/cmake-3.22/Help/prop_tgt/BUILD_WITH_INSTALL_NAME_DIR.rst
new file mode 100644
index 0000000..073dce5
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/BUILD_WITH_INSTALL_NAME_DIR.rst
@@ -0,0 +1,15 @@
+BUILD_WITH_INSTALL_NAME_DIR
+---------------------------
+
+.. versionadded:: 3.9
+
+``BUILD_WITH_INSTALL_NAME_DIR`` is a boolean specifying whether the macOS
+``install_name`` of a target in the build tree uses the directory given by
+:prop_tgt:`INSTALL_NAME_DIR`.  This setting only applies to targets on macOS.
+
+This property is initialized by the value of the variable
+:variable:`CMAKE_BUILD_WITH_INSTALL_NAME_DIR` if it is set when a target is
+created.
+
+If this property is not set and policy :policy:`CMP0068` is not ``NEW``, the
+value of :prop_tgt:`BUILD_WITH_INSTALL_RPATH` is used in its place.
diff --git a/share/cmake-3.18/Help/prop_tgt/BUILD_WITH_INSTALL_RPATH.rst b/share/cmake-3.22/Help/prop_tgt/BUILD_WITH_INSTALL_RPATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/BUILD_WITH_INSTALL_RPATH.rst
rename to share/cmake-3.22/Help/prop_tgt/BUILD_WITH_INSTALL_RPATH.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/BUNDLE.rst b/share/cmake-3.22/Help/prop_tgt/BUNDLE.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/BUNDLE.rst
rename to share/cmake-3.22/Help/prop_tgt/BUNDLE.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/BUNDLE_EXTENSION.rst b/share/cmake-3.22/Help/prop_tgt/BUNDLE_EXTENSION.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/BUNDLE_EXTENSION.rst
rename to share/cmake-3.22/Help/prop_tgt/BUNDLE_EXTENSION.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/COMMON_LANGUAGE_RUNTIME.rst b/share/cmake-3.22/Help/prop_tgt/COMMON_LANGUAGE_RUNTIME.rst
new file mode 100644
index 0000000..adfa6f7
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/COMMON_LANGUAGE_RUNTIME.rst
@@ -0,0 +1,24 @@
+COMMON_LANGUAGE_RUNTIME
+-----------------------
+
+.. versionadded:: 3.12
+
+By setting this target property, the target is configured to build with
+``C++/CLI`` support.
+
+The Visual Studio generator defines the ``clr`` parameter depending on
+the value of ``COMMON_LANGUAGE_RUNTIME``:
+
+* property not set: native C++ (i.e. default)
+* property set but empty: mixed unmanaged/managed C++
+* property set to any non empty value: managed C++
+
+Supported values: ``""``, ``"pure"``, ``"safe"``
+
+This property is only evaluated :ref:`Visual Studio Generators` for
+VS 2010 and above.
+
+To be able to build managed C++ targets with VS 2017 and above the component
+``C++/CLI support`` must be installed, which may not be done by default.
+
+See also :prop_tgt:`IMPORTED_COMMON_LANGUAGE_RUNTIME`
diff --git a/share/cmake-3.18/Help/prop_tgt/COMPATIBLE_INTERFACE_BOOL.rst b/share/cmake-3.22/Help/prop_tgt/COMPATIBLE_INTERFACE_BOOL.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/COMPATIBLE_INTERFACE_BOOL.rst
rename to share/cmake-3.22/Help/prop_tgt/COMPATIBLE_INTERFACE_BOOL.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/COMPATIBLE_INTERFACE_NUMBER_MAX.rst b/share/cmake-3.22/Help/prop_tgt/COMPATIBLE_INTERFACE_NUMBER_MAX.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/COMPATIBLE_INTERFACE_NUMBER_MAX.rst
rename to share/cmake-3.22/Help/prop_tgt/COMPATIBLE_INTERFACE_NUMBER_MAX.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/COMPATIBLE_INTERFACE_NUMBER_MIN.rst b/share/cmake-3.22/Help/prop_tgt/COMPATIBLE_INTERFACE_NUMBER_MIN.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/COMPATIBLE_INTERFACE_NUMBER_MIN.rst
rename to share/cmake-3.22/Help/prop_tgt/COMPATIBLE_INTERFACE_NUMBER_MIN.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/COMPATIBLE_INTERFACE_STRING.rst b/share/cmake-3.22/Help/prop_tgt/COMPATIBLE_INTERFACE_STRING.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/COMPATIBLE_INTERFACE_STRING.rst
rename to share/cmake-3.22/Help/prop_tgt/COMPATIBLE_INTERFACE_STRING.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/COMPILE_DEFINITIONS.rst b/share/cmake-3.22/Help/prop_tgt/COMPILE_DEFINITIONS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/COMPILE_DEFINITIONS.rst
rename to share/cmake-3.22/Help/prop_tgt/COMPILE_DEFINITIONS.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/COMPILE_DEFINITIONS_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/COMPILE_DEFINITIONS_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/COMPILE_DEFINITIONS_CONFIG.rst
rename to share/cmake-3.22/Help/prop_tgt/COMPILE_DEFINITIONS_CONFIG.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/COMPILE_FEATURES.rst b/share/cmake-3.22/Help/prop_tgt/COMPILE_FEATURES.rst
new file mode 100644
index 0000000..9b937ed
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/COMPILE_FEATURES.rst
@@ -0,0 +1,15 @@
+COMPILE_FEATURES
+----------------
+
+.. versionadded:: 3.1
+
+Compiler features enabled for this target.
+
+The list of features in this property are a subset of the features listed
+in the :variable:`CMAKE_C_COMPILE_FEATURES`, :variable:`CMAKE_CUDA_COMPILE_FEATURES`, and
+:variable:`CMAKE_CXX_COMPILE_FEATURES` variables.
+
+Contents of ``COMPILE_FEATURES`` may use "generator expressions" with the
+syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)` manual for
+available expressions.  See the :manual:`cmake-compile-features(7)` manual
+for information on compile features and a list of supported compilers.
diff --git a/share/cmake-3.18/Help/prop_tgt/COMPILE_FLAGS.rst b/share/cmake-3.22/Help/prop_tgt/COMPILE_FLAGS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/COMPILE_FLAGS.rst
rename to share/cmake-3.22/Help/prop_tgt/COMPILE_FLAGS.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/COMPILE_OPTIONS.rst b/share/cmake-3.22/Help/prop_tgt/COMPILE_OPTIONS.rst
new file mode 100644
index 0000000..0fd6aac
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/COMPILE_OPTIONS.rst
@@ -0,0 +1,23 @@
+COMPILE_OPTIONS
+---------------
+
+List of options to pass to the compiler.
+
+This property holds a :ref:`semicolon-separated list <CMake Language Lists>`
+of options specified so far for its target.  Use the
+:command:`target_compile_options` command to append more options.
+The options will be added after after flags in the
+:variable:`CMAKE_<LANG>_FLAGS` and :variable:`CMAKE_<LANG>_FLAGS_<CONFIG>`
+variables, but before those propagated from dependencies by the
+:prop_tgt:`INTERFACE_COMPILE_OPTIONS` property.
+
+This property is initialized by the :prop_dir:`COMPILE_OPTIONS` directory
+property when a target is created, and is used by the generators to set
+the options for the compiler.
+
+Contents of ``COMPILE_OPTIONS`` may use "generator expressions" with the
+syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)` manual
+for available expressions.  See the :manual:`cmake-buildsystem(7)` manual
+for more on defining buildsystem properties.
+
+.. include:: ../command/OPTIONS_SHELL.txt
diff --git a/share/cmake-3.22/Help/prop_tgt/COMPILE_PDB_NAME.rst b/share/cmake-3.22/Help/prop_tgt/COMPILE_PDB_NAME.rst
new file mode 100644
index 0000000..b76afeb
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/COMPILE_PDB_NAME.rst
@@ -0,0 +1,13 @@
+COMPILE_PDB_NAME
+----------------
+
+.. versionadded:: 3.1
+
+Output name for the MS debug symbol ``.pdb`` file generated by the
+compiler while building source files.
+
+This property specifies the base name for the debug symbols file.
+If not set, the default is unspecified.
+
+.. |PDB_XXX| replace:: :prop_tgt:`PDB_NAME`
+.. include:: COMPILE_PDB_NOTE.txt
diff --git a/share/cmake-3.22/Help/prop_tgt/COMPILE_PDB_NAME_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/COMPILE_PDB_NAME_CONFIG.rst
new file mode 100644
index 0000000..4c9825d
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/COMPILE_PDB_NAME_CONFIG.rst
@@ -0,0 +1,12 @@
+COMPILE_PDB_NAME_<CONFIG>
+-------------------------
+
+.. versionadded:: 3.1
+
+Per-configuration output name for the MS debug symbol ``.pdb`` file
+generated by the compiler while building source files.
+
+This is the configuration-specific version of :prop_tgt:`COMPILE_PDB_NAME`.
+
+.. |PDB_XXX| replace:: :prop_tgt:`PDB_NAME_<CONFIG>`
+.. include:: COMPILE_PDB_NOTE.txt
diff --git a/share/cmake-3.18/Help/prop_tgt/COMPILE_PDB_NOTE.txt b/share/cmake-3.22/Help/prop_tgt/COMPILE_PDB_NOTE.txt
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/COMPILE_PDB_NOTE.txt
rename to share/cmake-3.22/Help/prop_tgt/COMPILE_PDB_NOTE.txt
diff --git a/share/cmake-3.22/Help/prop_tgt/COMPILE_PDB_OUTPUT_DIRECTORY.rst b/share/cmake-3.22/Help/prop_tgt/COMPILE_PDB_OUTPUT_DIRECTORY.rst
new file mode 100644
index 0000000..3f3df66
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/COMPILE_PDB_OUTPUT_DIRECTORY.rst
@@ -0,0 +1,15 @@
+COMPILE_PDB_OUTPUT_DIRECTORY
+----------------------------
+
+.. versionadded:: 3.1
+
+Output directory for the MS debug symbol ``.pdb`` file
+generated by the compiler while building source files.
+
+This property specifies the directory into which the MS debug symbols
+will be placed by the compiler.  This property is initialized by the
+value of the :variable:`CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY` variable
+if it is set when a target is created.
+
+.. |PDB_XXX| replace:: :prop_tgt:`PDB_OUTPUT_DIRECTORY`
+.. include:: COMPILE_PDB_NOTE.txt
diff --git a/share/cmake-3.22/Help/prop_tgt/COMPILE_PDB_OUTPUT_DIRECTORY_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/COMPILE_PDB_OUTPUT_DIRECTORY_CONFIG.rst
new file mode 100644
index 0000000..c25c2fc
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/COMPILE_PDB_OUTPUT_DIRECTORY_CONFIG.rst
@@ -0,0 +1,18 @@
+COMPILE_PDB_OUTPUT_DIRECTORY_<CONFIG>
+-------------------------------------
+
+.. versionadded:: 3.1
+
+Per-configuration output directory for the MS debug symbol ``.pdb`` file
+generated by the compiler while building source files.
+
+This is a per-configuration version of
+:prop_tgt:`COMPILE_PDB_OUTPUT_DIRECTORY`,
+but multi-configuration generators (Visual Studio, Xcode) do NOT append a
+per-configuration subdirectory to the specified directory.  This
+property is initialized by the value of the
+:variable:`CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY_<CONFIG>` variable
+if it is set when a target is created.
+
+.. |PDB_XXX| replace:: :prop_tgt:`PDB_OUTPUT_DIRECTORY_<CONFIG>`
+.. include:: COMPILE_PDB_NOTE.txt
diff --git a/share/cmake-3.18/Help/prop_tgt/CONFIG_OUTPUT_NAME.rst b/share/cmake-3.22/Help/prop_tgt/CONFIG_OUTPUT_NAME.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/CONFIG_OUTPUT_NAME.rst
rename to share/cmake-3.22/Help/prop_tgt/CONFIG_OUTPUT_NAME.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/CONFIG_POSTFIX.rst b/share/cmake-3.22/Help/prop_tgt/CONFIG_POSTFIX.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/CONFIG_POSTFIX.rst
rename to share/cmake-3.22/Help/prop_tgt/CONFIG_POSTFIX.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/CROSSCOMPILING_EMULATOR.rst b/share/cmake-3.22/Help/prop_tgt/CROSSCOMPILING_EMULATOR.rst
new file mode 100644
index 0000000..d7fb9b1
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/CROSSCOMPILING_EMULATOR.rst
@@ -0,0 +1,17 @@
+CROSSCOMPILING_EMULATOR
+-----------------------
+
+.. versionadded:: 3.3
+
+Use the given emulator to run executables created when crosscompiling.
+This command will be added as a prefix to :command:`add_test`,
+:command:`add_custom_command`, and :command:`add_custom_target` commands
+for built target system executables.
+
+If this property contains a :ref:`semicolon-separated list <CMake Language
+Lists>`, then the first value is the command and remaining values are its
+arguments.
+
+This property is initialized by the value of the
+:variable:`CMAKE_CROSSCOMPILING_EMULATOR` variable if it is set when a target
+is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/CUDA_ARCHITECTURES.rst b/share/cmake-3.22/Help/prop_tgt/CUDA_ARCHITECTURES.rst
new file mode 100644
index 0000000..a3191e8
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/CUDA_ARCHITECTURES.rst
@@ -0,0 +1,42 @@
+CUDA_ARCHITECTURES
+------------------
+
+.. versionadded:: 3.18
+
+List of architectures to generate device code for.
+
+An architecture can be suffixed by either ``-real`` or ``-virtual`` to specify
+the kind of architecture to generate code for.
+If no suffix is given then code is generated for both real and virtual
+architectures.
+
+A non-empty false value (e.g. ``OFF``) disables adding architectures.
+This is intended to support packagers and rare cases where full control
+over the passed flags is required.
+
+This property is initialized by the value of the :variable:`CMAKE_CUDA_ARCHITECTURES`
+variable if it is set when a target is created.
+
+The ``CUDA_ARCHITECTURES`` target property must be set to a non-empty value on targets
+that compile CUDA sources, or it is an error.  See policy :policy:`CMP0104`.
+
+Examples
+^^^^^^^^
+
+.. code-block:: cmake
+
+  set_target_properties(tgt PROPERTIES CUDA_ARCHITECTURES "35;50;72")
+
+Generates code for real and virtual architectures ``30``, ``50`` and ``72``.
+
+.. code-block:: cmake
+
+  set_property(TARGET tgt PROPERTY CUDA_ARCHITECTURES 70-real 72-virtual)
+
+Generates code for real architecture ``70`` and virtual architecture ``72``.
+
+.. code-block:: cmake
+
+  set_property(TARGET tgt PROPERTY CUDA_ARCHITECTURES OFF)
+
+CMake will not pass any architecture flags to the compiler.
diff --git a/share/cmake-3.22/Help/prop_tgt/CUDA_EXTENSIONS.rst b/share/cmake-3.22/Help/prop_tgt/CUDA_EXTENSIONS.rst
new file mode 100644
index 0000000..ab467ac
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/CUDA_EXTENSIONS.rst
@@ -0,0 +1,21 @@
+CUDA_EXTENSIONS
+---------------
+
+.. versionadded:: 3.8
+
+Boolean specifying whether compiler specific extensions are requested.
+
+This property specifies whether compiler specific extensions should be
+used.  For some compilers, this results in adding a flag such
+as ``-std=gnu++11`` instead of ``-std=c++11`` to the compile line.  This
+property is ``ON`` by default. The basic CUDA/C++ standard level is
+controlled by the :prop_tgt:`CUDA_STANDARD` target property.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
+
+This property is initialized by the value of
+the :variable:`CMAKE_CUDA_EXTENSIONS` variable if set when a target is created
+and otherwise by the value of
+:variable:`CMAKE_CUDA_EXTENSIONS_DEFAULT <CMAKE_<LANG>_EXTENSIONS_DEFAULT>`
+(see :policy:`CMP0128`).
diff --git a/share/cmake-3.22/Help/prop_tgt/CUDA_PTX_COMPILATION.rst b/share/cmake-3.22/Help/prop_tgt/CUDA_PTX_COMPILATION.rst
new file mode 100644
index 0000000..4e90afe
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/CUDA_PTX_COMPILATION.rst
@@ -0,0 +1,14 @@
+CUDA_PTX_COMPILATION
+--------------------
+
+.. versionadded:: 3.9
+
+Compile CUDA sources to ``.ptx`` files instead of ``.obj`` files
+within :ref:`Object Libraries`.
+
+For example:
+
+.. code-block:: cmake
+
+  add_library(myptx OBJECT a.cu b.cu)
+  set_property(TARGET myptx PROPERTY CUDA_PTX_COMPILATION ON)
diff --git a/share/cmake-3.22/Help/prop_tgt/CUDA_RESOLVE_DEVICE_SYMBOLS.rst b/share/cmake-3.22/Help/prop_tgt/CUDA_RESOLVE_DEVICE_SYMBOLS.rst
new file mode 100644
index 0000000..819ce3e
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/CUDA_RESOLVE_DEVICE_SYMBOLS.rst
@@ -0,0 +1,27 @@
+CUDA_RESOLVE_DEVICE_SYMBOLS
+---------------------------
+
+.. versionadded:: 3.9
+
+CUDA only: Enables device linking for the specific library target where
+required.
+
+If set, this will tell the required compilers to enable device linking
+on the library target. Device linking is an additional link step
+required by some CUDA compilers when :prop_tgt:`CUDA_SEPARABLE_COMPILATION` is
+enabled. Normally device linking is deferred until a shared library or
+executable is generated, allowing for multiple static libraries to resolve
+device symbols at the same time when they are used by a shared library or
+executable.
+
+By default static library targets have this property is disabled,
+while shared, module, and executable targets have this property enabled.
+
+Note that device linking is not supported for :ref:`Object Libraries`.
+
+
+For instance:
+
+.. code-block:: cmake
+
+  set_property(TARGET mystaticlib PROPERTY CUDA_RESOLVE_DEVICE_SYMBOLS ON)
diff --git a/share/cmake-3.18/Help/prop_tgt/CUDA_RUNTIME_LIBRARY-VALUES.txt b/share/cmake-3.22/Help/prop_tgt/CUDA_RUNTIME_LIBRARY-VALUES.txt
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/CUDA_RUNTIME_LIBRARY-VALUES.txt
rename to share/cmake-3.22/Help/prop_tgt/CUDA_RUNTIME_LIBRARY-VALUES.txt
diff --git a/share/cmake-3.22/Help/prop_tgt/CUDA_RUNTIME_LIBRARY.rst b/share/cmake-3.22/Help/prop_tgt/CUDA_RUNTIME_LIBRARY.rst
new file mode 100644
index 0000000..e937fc6
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/CUDA_RUNTIME_LIBRARY.rst
@@ -0,0 +1,23 @@
+CUDA_RUNTIME_LIBRARY
+--------------------
+
+.. versionadded:: 3.17
+
+Select the CUDA runtime library for use by compilers targeting the CUDA language.
+
+The allowed case insensitive values are:
+
+.. include:: CUDA_RUNTIME_LIBRARY-VALUES.txt
+
+Contents of ``CUDA_RUNTIME_LIBRARY`` may use
+:manual:`generator expressions <cmake-generator-expressions(7)>`.
+
+If that property is not set then CMake uses an appropriate default
+value based on the compiler to select the CUDA runtime library.
+
+.. note::
+
+  This property has effect only when the ``CUDA`` language is enabled. To
+  control the CUDA runtime linking when only using the CUDA SDK with the
+  ``C`` or ``C++`` language we recommend using the :module:`FindCUDAToolkit`
+  module.
diff --git a/share/cmake-3.22/Help/prop_tgt/CUDA_SEPARABLE_COMPILATION.rst b/share/cmake-3.22/Help/prop_tgt/CUDA_SEPARABLE_COMPILATION.rst
new file mode 100644
index 0000000..32222f9
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/CUDA_SEPARABLE_COMPILATION.rst
@@ -0,0 +1,19 @@
+CUDA_SEPARABLE_COMPILATION
+--------------------------
+
+.. versionadded:: 3.8
+
+CUDA only: Enables separate compilation of device code
+
+If set this will enable separable compilation for all CUDA files for
+the given target.
+
+For instance:
+
+.. code-block:: cmake
+
+  set_property(TARGET myexe PROPERTY CUDA_SEPARABLE_COMPILATION ON)
+
+This property is initialized by the value of the
+:variable:`CMAKE_CUDA_SEPARABLE_COMPILATION` variable if it is set when a
+target is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/CUDA_STANDARD.rst b/share/cmake-3.22/Help/prop_tgt/CUDA_STANDARD.rst
new file mode 100644
index 0000000..950ba12
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/CUDA_STANDARD.rst
@@ -0,0 +1,62 @@
+CUDA_STANDARD
+-------------
+
+.. versionadded:: 3.8
+
+The CUDA/C++ standard whose features are requested to build this target.
+
+This property specifies the CUDA/C++ standard whose features are requested
+to build this target.  For some compilers, this results in adding a
+flag such as ``-std=gnu++11`` to the compile line.
+
+Supported values are:
+
+``98``
+  CUDA C++98. Note that this maps to the same as ``03`` internally.
+
+``03``
+  CUDA C++03
+
+``11``
+  CUDA C++11
+
+``14``
+  CUDA C++14. While CMake 3.8 and later *recognize* ``14`` as a valid value,
+  CMake 3.9 was the first version to include support for any compiler.
+
+``17``
+  CUDA C++17. While CMake 3.8 and later *recognize* ``17`` as a valid value,
+  CMake 3.18 was the first version to include support for any compiler.
+
+``20``
+  .. versionadded:: 3.12
+
+  CUDA C++20. While CMake 3.12 and later *recognize* ``20`` as a valid value,
+  CMake 3.18 was the first version to include support for any compiler.
+
+``23``
+  .. versionadded:: 3.20
+
+  CUDA C++23
+
+If the value requested does not result in a compile flag being added for
+the compiler in use, a previous standard flag will be added instead.  This
+means that using:
+
+.. code-block:: cmake
+
+  set_property(TARGET tgt PROPERTY CUDA_STANDARD 11)
+
+with a compiler which does not support ``-std=gnu++11`` or an equivalent
+flag will not result in an error or warning, but will instead add the
+``-std=gnu++03`` flag if supported.  This "decay" behavior may be controlled
+with the :prop_tgt:`CUDA_STANDARD_REQUIRED` target property.
+Additionally, the :prop_tgt:`CUDA_EXTENSIONS` target property may be used to
+control whether compiler-specific extensions are enabled on a per-target basis.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
+
+This property is initialized by the value of
+the :variable:`CMAKE_CUDA_STANDARD` variable if it is set when a target
+is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/CUDA_STANDARD_REQUIRED.rst b/share/cmake-3.22/Help/prop_tgt/CUDA_STANDARD_REQUIRED.rst
new file mode 100644
index 0000000..c9301b5
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/CUDA_STANDARD_REQUIRED.rst
@@ -0,0 +1,20 @@
+CUDA_STANDARD_REQUIRED
+----------------------
+
+.. versionadded:: 3.8
+
+Boolean describing whether the value of :prop_tgt:`CUDA_STANDARD` is a requirement.
+
+If this property is set to ``ON``, then the value of the
+:prop_tgt:`CUDA_STANDARD` target property is treated as a requirement.  If this
+property is ``OFF`` or unset, the :prop_tgt:`CUDA_STANDARD` target property is
+treated as optional and may "decay" to a previous standard if the requested is
+not available.  For compilers that have no notion of a standard level, such as
+MSVC 1800 (Visual Studio 2013) and lower, this has no effect.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
+
+This property is initialized by the value of
+the :variable:`CMAKE_CUDA_STANDARD_REQUIRED` variable if it is set when a
+target is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/CXX_EXTENSIONS.rst b/share/cmake-3.22/Help/prop_tgt/CXX_EXTENSIONS.rst
new file mode 100644
index 0000000..9b52504
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/CXX_EXTENSIONS.rst
@@ -0,0 +1,21 @@
+CXX_EXTENSIONS
+--------------
+
+.. versionadded:: 3.1
+
+Boolean specifying whether compiler specific extensions are requested.
+
+This property specifies whether compiler specific extensions should be
+used.  For some compilers, this results in adding a flag such
+as ``-std=gnu++11`` instead of ``-std=c++11`` to the compile line.  This
+property is ``ON`` by default. The basic C++ standard level is
+controlled by the :prop_tgt:`CXX_STANDARD` target property.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
+
+This property is initialized by the value of
+the :variable:`CMAKE_CXX_EXTENSIONS` variable if set when a target is created
+and otherwise by the value of
+:variable:`CMAKE_CXX_EXTENSIONS_DEFAULT <CMAKE_<LANG>_EXTENSIONS_DEFAULT>` (see
+:policy:`CMP0128`).
diff --git a/share/cmake-3.22/Help/prop_tgt/CXX_STANDARD.rst b/share/cmake-3.22/Help/prop_tgt/CXX_STANDARD.rst
new file mode 100644
index 0000000..b10d201
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/CXX_STANDARD.rst
@@ -0,0 +1,60 @@
+CXX_STANDARD
+------------
+
+.. versionadded:: 3.1
+
+The C++ standard whose features are requested to build this target.
+
+This property specifies the C++ standard whose features are requested
+to build this target.  For some compilers, this results in adding a
+flag such as ``-std=gnu++11`` to the compile line.  For compilers that
+have no notion of a standard level, such as Microsoft Visual C++ before
+2015 Update 3, this has no effect.
+
+Supported values are:
+
+``98``
+  C++98
+
+``11``
+  C++11
+
+``14``
+  C++14
+
+``17``
+  .. versionadded:: 3.8
+
+  C++17
+
+``20``
+  .. versionadded:: 3.12
+
+  C++20
+
+``23``
+  .. versionadded:: 3.20
+
+  C++23
+
+If the value requested does not result in a compile flag being added for
+the compiler in use, a previous standard flag will be added instead.  This
+means that using:
+
+.. code-block:: cmake
+
+  set_property(TARGET tgt PROPERTY CXX_STANDARD 11)
+
+with a compiler which does not support ``-std=gnu++11`` or an equivalent
+flag will not result in an error or warning, but will instead add the
+``-std=gnu++98`` flag if supported.  This "decay" behavior may be controlled
+with the :prop_tgt:`CXX_STANDARD_REQUIRED` target property.
+Additionally, the :prop_tgt:`CXX_EXTENSIONS` target property may be used to
+control whether compiler-specific extensions are enabled on a per-target basis.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
+
+This property is initialized by the value of
+the :variable:`CMAKE_CXX_STANDARD` variable if it is set when a target
+is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/CXX_STANDARD_REQUIRED.rst b/share/cmake-3.22/Help/prop_tgt/CXX_STANDARD_REQUIRED.rst
new file mode 100644
index 0000000..8b17490
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/CXX_STANDARD_REQUIRED.rst
@@ -0,0 +1,20 @@
+CXX_STANDARD_REQUIRED
+---------------------
+
+.. versionadded:: 3.1
+
+Boolean describing whether the value of :prop_tgt:`CXX_STANDARD` is a requirement.
+
+If this property is set to ``ON``, then the value of the
+:prop_tgt:`CXX_STANDARD` target property is treated as a requirement.  If this
+property is ``OFF`` or unset, the :prop_tgt:`CXX_STANDARD` target property is
+treated as optional and may "decay" to a previous standard if the requested is
+not available.  For compilers that have no notion of a standard level, such as
+MSVC 1800 (Visual Studio 2013) and lower, this has no effect.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
+
+This property is initialized by the value of
+the :variable:`CMAKE_CXX_STANDARD_REQUIRED` variable if it is set when a
+target is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/C_EXTENSIONS.rst b/share/cmake-3.22/Help/prop_tgt/C_EXTENSIONS.rst
new file mode 100644
index 0000000..a53090c
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/C_EXTENSIONS.rst
@@ -0,0 +1,21 @@
+C_EXTENSIONS
+------------
+
+.. versionadded:: 3.1
+
+Boolean specifying whether compiler specific extensions are requested.
+
+This property specifies whether compiler specific extensions should be
+used.  For some compilers, this results in adding a flag such
+as ``-std=gnu11`` instead of ``-std=c11`` to the compile line.  This
+property is ``ON`` by default. The basic C standard level is
+controlled by the :prop_tgt:`C_STANDARD` target property.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
+
+This property is initialized by the value of
+the :variable:`CMAKE_C_EXTENSIONS` variable if set when a target is created and
+otherwise by the value of
+:variable:`CMAKE_C_EXTENSIONS_DEFAULT <CMAKE_<LANG>_EXTENSIONS_DEFAULT>` (see
+:policy:`CMP0128`).
diff --git a/share/cmake-3.22/Help/prop_tgt/C_STANDARD.rst b/share/cmake-3.22/Help/prop_tgt/C_STANDARD.rst
new file mode 100644
index 0000000..ecba2a8
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/C_STANDARD.rst
@@ -0,0 +1,55 @@
+C_STANDARD
+----------
+
+.. versionadded:: 3.1
+
+The C standard whose features are requested to build this target.
+
+This property specifies the C standard whose features are requested
+to build this target.  For some compilers, this results in adding a
+flag such as ``-std=gnu11`` to the compile line.  For compilers that
+have no notion of a C standard level, such as Microsoft Visual C++ before
+VS 16.7, this property has no effect.
+
+Supported values are:
+
+``90``
+  C89/C90
+
+``99``
+  C99
+
+``11``
+  C11
+
+``17``
+  .. versionadded:: 3.21
+
+  C17
+
+``23``
+  .. versionadded:: 3.21
+
+  C23
+
+If the value requested does not result in a compile flag being added for
+the compiler in use, a previous standard flag will be added instead.  This
+means that using:
+
+.. code-block:: cmake
+
+  set_property(TARGET tgt PROPERTY C_STANDARD 11)
+
+with a compiler which does not support ``-std=gnu11`` or an equivalent
+flag will not result in an error or warning, but will instead add the
+``-std=gnu99`` or ``-std=gnu90`` flag if supported.  This "decay" behavior may
+be controlled with the :prop_tgt:`C_STANDARD_REQUIRED` target property.
+Additionally, the :prop_tgt:`C_EXTENSIONS` target property may be used to
+control whether compiler-specific extensions are enabled on a per-target basis.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
+
+This property is initialized by the value of
+the :variable:`CMAKE_C_STANDARD` variable if it is set when a target
+is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/C_STANDARD_REQUIRED.rst b/share/cmake-3.22/Help/prop_tgt/C_STANDARD_REQUIRED.rst
new file mode 100644
index 0000000..8059e3a
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/C_STANDARD_REQUIRED.rst
@@ -0,0 +1,20 @@
+C_STANDARD_REQUIRED
+-------------------
+
+.. versionadded:: 3.1
+
+Boolean describing whether the value of :prop_tgt:`C_STANDARD` is a requirement.
+
+If this property is set to ``ON``, then the value of the
+:prop_tgt:`C_STANDARD` target property is treated as a requirement.  If this
+property is ``OFF`` or unset, the :prop_tgt:`C_STANDARD` target property is
+treated as optional and may "decay" to a previous standard if the requested is
+not available.  For compilers that have no notion of a C standard level, such
+as Microsoft Visual C++ before VS 16.7, this property has no effect.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
+
+This property is initialized by the value of
+the :variable:`CMAKE_C_STANDARD_REQUIRED` variable if it is set when a
+target is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/DEBUG_POSTFIX.rst b/share/cmake-3.22/Help/prop_tgt/DEBUG_POSTFIX.rst
new file mode 100644
index 0000000..eca7cb0
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/DEBUG_POSTFIX.rst
@@ -0,0 +1,7 @@
+DEBUG_POSTFIX
+-------------
+
+See target property :prop_tgt:`<CONFIG>_POSTFIX`.
+
+This property is a special case of the more-general :prop_tgt:`<CONFIG>_POSTFIX`
+property for the ``DEBUG`` configuration.
diff --git a/share/cmake-3.18/Help/prop_tgt/DEFINE_SYMBOL.rst b/share/cmake-3.22/Help/prop_tgt/DEFINE_SYMBOL.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/DEFINE_SYMBOL.rst
rename to share/cmake-3.22/Help/prop_tgt/DEFINE_SYMBOL.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/DEPLOYMENT_ADDITIONAL_FILES.rst b/share/cmake-3.22/Help/prop_tgt/DEPLOYMENT_ADDITIONAL_FILES.rst
new file mode 100644
index 0000000..f11fe7c
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/DEPLOYMENT_ADDITIONAL_FILES.rst
@@ -0,0 +1,20 @@
+DEPLOYMENT_ADDITIONAL_FILES
+---------------------------
+
+.. versionadded:: 3.13
+
+Set the WinCE project ``AdditionalFiles`` in ``DeploymentTool`` in ``.vcproj``
+files generated by the :generator:`Visual Studio 9 2008` generator.
+This is useful when you want to debug on remote WinCE device.
+Specify additional files that will be copied to the device.
+For example:
+
+.. code-block:: cmake
+
+  set_property(TARGET ${TARGET} PROPERTY
+    DEPLOYMENT_ADDITIONAL_FILES "english.lng|local_folder|remote_folder|0"
+    "german.lng|local_folder|remote_folder|0")
+
+produces::
+
+  <DeploymentTool AdditionalFiles="english.lng|local_folder|remote_folder|0;german.lng|local_folder|remote_folder|0" ... />
diff --git a/share/cmake-3.22/Help/prop_tgt/DEPLOYMENT_REMOTE_DIRECTORY.rst b/share/cmake-3.22/Help/prop_tgt/DEPLOYMENT_REMOTE_DIRECTORY.rst
new file mode 100644
index 0000000..0680238
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/DEPLOYMENT_REMOTE_DIRECTORY.rst
@@ -0,0 +1,20 @@
+DEPLOYMENT_REMOTE_DIRECTORY
+---------------------------
+
+.. versionadded:: 3.6
+
+Set the WinCE project ``RemoteDirectory`` in ``DeploymentTool`` and
+``RemoteExecutable`` in ``DebuggerTool`` in ``.vcproj`` files generated
+by the :generator:`Visual Studio 9 2008` generator.
+This is useful when you want to debug on remote WinCE device.
+For example:
+
+.. code-block:: cmake
+
+  set_property(TARGET ${TARGET} PROPERTY
+    DEPLOYMENT_REMOTE_DIRECTORY "\\FlashStorage")
+
+produces::
+
+  <DeploymentTool RemoteDirectory="\FlashStorage" ... />
+  <DebuggerTool RemoteExecutable="\FlashStorage\target_file" ... />
diff --git a/share/cmake-3.22/Help/prop_tgt/DEPRECATION.rst b/share/cmake-3.22/Help/prop_tgt/DEPRECATION.rst
new file mode 100644
index 0000000..45ca848
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/DEPRECATION.rst
@@ -0,0 +1,9 @@
+DEPRECATION
+-----------
+
+.. versionadded:: 3.17
+
+Deprecation message from imported target's developer.
+
+``DEPRECATION`` is the message regarding a deprecation status to be displayed
+to downstream users of a target.
diff --git a/share/cmake-3.22/Help/prop_tgt/DISABLE_PRECOMPILE_HEADERS.rst b/share/cmake-3.22/Help/prop_tgt/DISABLE_PRECOMPILE_HEADERS.rst
new file mode 100644
index 0000000..7b3826b
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/DISABLE_PRECOMPILE_HEADERS.rst
@@ -0,0 +1,10 @@
+DISABLE_PRECOMPILE_HEADERS
+--------------------------
+
+.. versionadded:: 3.16
+
+Disables the precompilation of header files specified by
+:prop_tgt:`PRECOMPILE_HEADERS` property.
+
+If the property is not set, CMake will use the value provided
+by :variable:`CMAKE_DISABLE_PRECOMPILE_HEADERS`.
diff --git a/share/cmake-3.22/Help/prop_tgt/DOTNET_TARGET_FRAMEWORK.rst b/share/cmake-3.22/Help/prop_tgt/DOTNET_TARGET_FRAMEWORK.rst
new file mode 100644
index 0000000..3ba4e25
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/DOTNET_TARGET_FRAMEWORK.rst
@@ -0,0 +1,15 @@
+DOTNET_TARGET_FRAMEWORK
+-----------------------
+
+.. versionadded:: 3.17
+
+Specify the .NET target framework.
+
+Used to specify the .NET target framework for C++/CLI and C#.  For
+example: ``netcoreapp2.1``.
+
+This property is only evaluated for :ref:`Visual Studio Generators`
+VS 2010 and above.
+
+Can be initialized for all targets using the variable
+:variable:`CMAKE_DOTNET_TARGET_FRAMEWORK`.
diff --git a/share/cmake-3.22/Help/prop_tgt/DOTNET_TARGET_FRAMEWORK_VERSION.rst b/share/cmake-3.22/Help/prop_tgt/DOTNET_TARGET_FRAMEWORK_VERSION.rst
new file mode 100644
index 0000000..fbd1aab
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/DOTNET_TARGET_FRAMEWORK_VERSION.rst
@@ -0,0 +1,17 @@
+DOTNET_TARGET_FRAMEWORK_VERSION
+-------------------------------
+
+.. versionadded:: 3.12
+
+Specify the .NET target framework version.
+
+Used to specify the .NET target framework version for C++/CLI and C#.
+For example: ``v4.5``.
+
+This property is only evaluated for :ref:`Visual Studio Generators`
+VS 2010 and above.
+
+To initialize this variable for all targets set
+:variable:`CMAKE_DOTNET_TARGET_FRAMEWORK` or
+:variable:`CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION`. If both are set,
+the latter is ignored.
diff --git a/share/cmake-3.18/Help/prop_tgt/ENABLE_EXPORTS.rst b/share/cmake-3.22/Help/prop_tgt/ENABLE_EXPORTS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/ENABLE_EXPORTS.rst
rename to share/cmake-3.22/Help/prop_tgt/ENABLE_EXPORTS.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/EXCLUDE_FROM_ALL.rst b/share/cmake-3.22/Help/prop_tgt/EXCLUDE_FROM_ALL.rst
new file mode 100644
index 0000000..f0200f3
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/EXCLUDE_FROM_ALL.rst
@@ -0,0 +1,28 @@
+EXCLUDE_FROM_ALL
+----------------
+
+Set this target property to a true (or false) value to exclude (or include)
+the target from the "all" target of the containing directory and its
+ancestors.  If excluded, running e.g. ``make`` in the containing directory
+or its ancestors will not build the target by default.
+
+If this target property is not set then the target will be included in
+the "all" target of the containing directory.  Furthermore, it will be
+included in the "all" target of its ancestor directories unless the
+:prop_dir:`EXCLUDE_FROM_ALL` directory property is set.
+
+With ``EXCLUDE_FROM_ALL`` set to false or not set at all, the target
+will be brought up to date as part of doing a ``make install`` or its
+equivalent for the CMake generator being used.
+
+If a target has ``EXCLUDE_FROM_ALL`` set to true, it may still be listed
+in an :command:`install(TARGETS)` command, but the user is responsible for
+ensuring that the target's build artifacts are not missing or outdated when
+an install is performed.
+
+This property may use "generator expressions" with the syntax ``$<...>``. See
+the :manual:`cmake-generator-expressions(7)` manual for available expressions.
+
+Only the "Ninja Multi-Config" generator supports a property value that varies by
+configuration.  For all other generators the value of this property must be the
+same for all configurations.
diff --git a/share/cmake-3.18/Help/prop_tgt/EXCLUDE_FROM_DEFAULT_BUILD.rst b/share/cmake-3.22/Help/prop_tgt/EXCLUDE_FROM_DEFAULT_BUILD.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/EXCLUDE_FROM_DEFAULT_BUILD.rst
rename to share/cmake-3.22/Help/prop_tgt/EXCLUDE_FROM_DEFAULT_BUILD.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/EXCLUDE_FROM_DEFAULT_BUILD_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/EXCLUDE_FROM_DEFAULT_BUILD_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/EXCLUDE_FROM_DEFAULT_BUILD_CONFIG.rst
rename to share/cmake-3.22/Help/prop_tgt/EXCLUDE_FROM_DEFAULT_BUILD_CONFIG.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/EXPORT_COMPILE_COMMANDS.rst b/share/cmake-3.22/Help/prop_tgt/EXPORT_COMPILE_COMMANDS.rst
new file mode 100644
index 0000000..0b1145c
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/EXPORT_COMPILE_COMMANDS.rst
@@ -0,0 +1,9 @@
+EXPORT_COMPILE_COMMANDS
+-----------------------
+
+.. versionadded:: 3.20
+
+Enable/Disable output of compile commands during generation for a target.
+
+This property is initialized by the value of the variable
+:variable:`CMAKE_EXPORT_COMPILE_COMMANDS` if it is set when a target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/EXPORT_NAME.rst b/share/cmake-3.22/Help/prop_tgt/EXPORT_NAME.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/EXPORT_NAME.rst
rename to share/cmake-3.22/Help/prop_tgt/EXPORT_NAME.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/EXPORT_PROPERTIES.rst b/share/cmake-3.22/Help/prop_tgt/EXPORT_PROPERTIES.rst
new file mode 100644
index 0000000..2d54f8b
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/EXPORT_PROPERTIES.rst
@@ -0,0 +1,24 @@
+EXPORT_PROPERTIES
+-----------------
+
+.. versionadded:: 3.12
+
+List additional properties to export for a target.
+
+This property contains a list of property names that should be exported by
+the :command:`install(EXPORT)` and :command:`export` commands.  By default
+only a limited number of properties are exported. This property can be used
+to additionally export other properties as well.
+
+Properties starting with ``INTERFACE_`` or ``IMPORTED_`` are not allowed as
+they are reserved for internal CMake use.
+
+Properties containing generator expressions are also not allowed.
+
+.. note::
+
+  Since CMake 3.19, :ref:`Interface Libraries` may have arbitrary
+  target properties.  If a project exports an interface library
+  with custom properties, the resulting package may not work with
+  dependents configured by older versions of CMake that reject the
+  custom properties.
diff --git a/share/cmake-3.18/Help/prop_tgt/EchoString.rst b/share/cmake-3.22/Help/prop_tgt/EchoString.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/EchoString.rst
rename to share/cmake-3.22/Help/prop_tgt/EchoString.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/FOLDER.rst b/share/cmake-3.22/Help/prop_tgt/FOLDER.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/FOLDER.rst
rename to share/cmake-3.22/Help/prop_tgt/FOLDER.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/FRAMEWORK.rst b/share/cmake-3.22/Help/prop_tgt/FRAMEWORK.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/FRAMEWORK.rst
rename to share/cmake-3.22/Help/prop_tgt/FRAMEWORK.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/FRAMEWORK_MULTI_CONFIG_POSTFIX_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/FRAMEWORK_MULTI_CONFIG_POSTFIX_CONFIG.rst
new file mode 100644
index 0000000..84d0c1e
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/FRAMEWORK_MULTI_CONFIG_POSTFIX_CONFIG.rst
@@ -0,0 +1,28 @@
+FRAMEWORK_MULTI_CONFIG_POSTFIX_<CONFIG>
+---------------------------------------
+
+.. versionadded:: 3.18
+
+Postfix to append to the framework file name for configuration ``<CONFIG>``,
+when using a multi-config generator (like Xcode and Ninja Multi-Config).
+
+When building with configuration ``<CONFIG>`` the value of this property
+is appended to the framework file name built on disk.
+
+For example, given a framework called ``my_fw``, a value of ``_debug``
+for the ``FRAMEWORK_MULTI_CONFIG_POSTFIX_DEBUG`` property, and
+``Debug;Release`` in :variable:`CMAKE_CONFIGURATION_TYPES`, the following
+relevant files would be created for the ``Debug`` and ``Release``
+configurations:
+
+- ``Release/my_fw.framework/my_fw``
+- ``Release/my_fw.framework/Versions/A/my_fw``
+- ``Debug/my_fw.framework/my_fw_debug``
+- ``Debug/my_fw.framework/Versions/A/my_fw_debug``
+
+For framework targets, this property is initialized by the value of the
+:variable:`CMAKE_FRAMEWORK_MULTI_CONFIG_POSTFIX_<CONFIG>` variable if it
+is set when a target is created.
+
+This property is ignored for non-framework targets, and when using single
+config generators.
diff --git a/share/cmake-3.22/Help/prop_tgt/FRAMEWORK_VERSION.rst b/share/cmake-3.22/Help/prop_tgt/FRAMEWORK_VERSION.rst
new file mode 100644
index 0000000..38b8137
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/FRAMEWORK_VERSION.rst
@@ -0,0 +1,10 @@
+FRAMEWORK_VERSION
+-----------------
+
+.. versionadded:: 3.4
+
+Version of a framework created using the :prop_tgt:`FRAMEWORK` target
+property (e.g. ``A``).
+
+This property only affects macOS, as iOS doesn't have versioned
+directory structure.
diff --git a/share/cmake-3.22/Help/prop_tgt/Fortran_BUILDING_INSTRINSIC_MODULES.rst b/share/cmake-3.22/Help/prop_tgt/Fortran_BUILDING_INSTRINSIC_MODULES.rst
new file mode 100644
index 0000000..3533ef9
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/Fortran_BUILDING_INSTRINSIC_MODULES.rst
@@ -0,0 +1,16 @@
+Fortran_BUILDING_INSTRINSIC_MODULES
+-----------------------------------
+
+.. versionadded:: 3.22
+
+Instructs the CMake Fortran preprocessor that the target is building
+Fortran intrinsics for building a Fortran compiler.
+
+This property is off by default and should be turned only on projects
+that build a Fortran compiler. It should not be turned on for projects
+that use a Fortran compiler.
+
+Turning this property on will correctly add dependencies for building
+Fortran intrinsic modules whereas turning the property off will ignore
+Fortran intrinsic modules in the dependency graph as they are supplied
+by the compiler itself.
diff --git a/share/cmake-3.18/Help/prop_tgt/Fortran_FORMAT.rst b/share/cmake-3.22/Help/prop_tgt/Fortran_FORMAT.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/Fortran_FORMAT.rst
rename to share/cmake-3.22/Help/prop_tgt/Fortran_FORMAT.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/Fortran_MODULE_DIRECTORY.rst b/share/cmake-3.22/Help/prop_tgt/Fortran_MODULE_DIRECTORY.rst
new file mode 100644
index 0000000..84029e4
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/Fortran_MODULE_DIRECTORY.rst
@@ -0,0 +1,25 @@
+Fortran_MODULE_DIRECTORY
+------------------------
+
+Specify output directory for Fortran modules provided by the target.
+
+If the target contains Fortran source files that provide modules and
+the compiler supports a module output directory this specifies the
+directory in which the modules will be placed.  When this property is
+not set the modules will be placed in the build directory
+corresponding to the target's source directory.  If the variable
+:variable:`CMAKE_Fortran_MODULE_DIRECTORY` is set when a target is created its
+value is used to initialize this property.
+
+When using one of the :ref:`Visual Studio Generators` with the Intel Fortran
+plugin installed in Visual Studio, a subdirectory named after the
+configuration will be appended to the path where modules are created.
+For example, if ``Fortran_MODULE_DIRECTORY`` is set to ``C:/some/path``,
+modules will end up in ``C:/some/path/Debug`` (or
+``C:/some/path/Release`` etc.) when an Intel Fortran ``.vfproj`` file is
+generated, and in ``C:/some/path`` when any other generator is used.
+
+Note that some compilers will automatically search the module output
+directory for modules USEd during compilation but others will not.  If
+your sources USE modules their location must be specified by
+:prop_tgt:`INCLUDE_DIRECTORIES` regardless of this property.
diff --git a/share/cmake-3.22/Help/prop_tgt/Fortran_PREPROCESS.rst b/share/cmake-3.22/Help/prop_tgt/Fortran_PREPROCESS.rst
new file mode 100644
index 0000000..e7e2fba
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/Fortran_PREPROCESS.rst
@@ -0,0 +1,25 @@
+Fortran_PREPROCESS
+------------------
+
+.. versionadded:: 3.18
+
+Control whether the Fortran source file should be unconditionally
+preprocessed.
+
+If unset or empty, rely on the compiler to determine whether the file
+should be preprocessed. If explicitly set to ``OFF`` then the file does not
+need to be preprocessed. If explicitly set to ``ON``, then the file does
+need to be preprocessed as part of the compilation step.
+
+When using the :generator:`Ninja` generator, all source files are
+first preprocessed in order to generate module dependency
+information. Setting this property to ``OFF`` will make ``Ninja``
+skip this step.
+
+Use the source-specific :prop_sf:`Fortran_PREPROCESS` property if a single
+file needs to be preprocessed. If the variable
+:variable:`CMAKE_Fortran_PREPROCESS` is set when a target is created its
+value is used to initialize this property.
+
+.. note:: For some compilers, ``NAG``, ``PGI`` and ``Solaris Studio``,
+          setting this to ``OFF`` will have no effect.
diff --git a/share/cmake-3.18/Help/prop_tgt/GENERATOR_FILE_NAME.rst b/share/cmake-3.22/Help/prop_tgt/GENERATOR_FILE_NAME.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/GENERATOR_FILE_NAME.rst
rename to share/cmake-3.22/Help/prop_tgt/GENERATOR_FILE_NAME.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/GHS_INTEGRITY_APP.rst b/share/cmake-3.22/Help/prop_tgt/GHS_INTEGRITY_APP.rst
new file mode 100644
index 0000000..cccd087
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/GHS_INTEGRITY_APP.rst
@@ -0,0 +1,12 @@
+GHS_INTEGRITY_APP
+-----------------
+
+.. versionadded:: 3.14
+
+``ON`` / ``OFF`` boolean to determine if an executable target should
+be treated as an `Integrity Application`.
+
+If no value is set and if a ``.int`` file is added as a source file to the
+executable target it will be treated as an `Integrity Application`.
+
+Supported on :generator:`Green Hills MULTI`.
diff --git a/share/cmake-3.22/Help/prop_tgt/GHS_NO_SOURCE_GROUP_FILE.rst b/share/cmake-3.22/Help/prop_tgt/GHS_NO_SOURCE_GROUP_FILE.rst
new file mode 100644
index 0000000..fe6b8e6
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/GHS_NO_SOURCE_GROUP_FILE.rst
@@ -0,0 +1,15 @@
+GHS_NO_SOURCE_GROUP_FILE
+------------------------
+
+.. versionadded:: 3.14
+
+``ON`` / ``OFF`` boolean to control if the project file for a target should
+be one single file or multiple files.
+
+The default behavior or when the property is ``OFF`` is to generate a project
+file for the target and then a sub-project file for each source group.
+
+When this property is ``ON`` or if :variable:`CMAKE_GHS_NO_SOURCE_GROUP_FILE`
+is ``ON`` then only a single project file is generated for the target.
+
+Supported on :generator:`Green Hills MULTI`.
diff --git a/share/cmake-3.18/Help/prop_tgt/GNUtoMS.rst b/share/cmake-3.22/Help/prop_tgt/GNUtoMS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/GNUtoMS.rst
rename to share/cmake-3.22/Help/prop_tgt/GNUtoMS.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/HAS_CXX.rst b/share/cmake-3.22/Help/prop_tgt/HAS_CXX.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/HAS_CXX.rst
rename to share/cmake-3.22/Help/prop_tgt/HAS_CXX.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/HIP_ARCHITECTURES.rst b/share/cmake-3.22/Help/prop_tgt/HIP_ARCHITECTURES.rst
new file mode 100644
index 0000000..06f956b
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/HIP_ARCHITECTURES.rst
@@ -0,0 +1,27 @@
+HIP_ARCHITECTURES
+-----------------
+
+.. versionadded:: 3.21
+
+List of AMD GPU architectures to generate device code for.
+
+A non-empty false value (e.g. ``OFF``) disables adding architectures.
+This is intended to support packagers and rare cases where full control
+over the passed flags is required.
+
+This property is initialized by the value of the :variable:`CMAKE_HIP_ARCHITECTURES`
+variable if it is set when a target is created.
+
+The HIP compilation model has two modes: whole and separable. Whole compilation
+generates device code at compile time. Separable compilation generates device
+code at link time. Therefore the ``HIP_ARCHITECTURES`` target property should
+be set on targets that compile or link with any HIP sources.
+
+Examples
+^^^^^^^^
+
+.. code-block:: cmake
+
+  set_property(TARGET tgt PROPERTY HIP_ARCHITECTURES gfx801 gfx900)
+
+Generates code for both ``gfx801`` and ``gfx900``.
diff --git a/share/cmake-3.22/Help/prop_tgt/HIP_EXTENSIONS.rst b/share/cmake-3.22/Help/prop_tgt/HIP_EXTENSIONS.rst
new file mode 100644
index 0000000..d1475c9
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/HIP_EXTENSIONS.rst
@@ -0,0 +1,21 @@
+HIP_EXTENSIONS
+--------------
+
+.. versionadded:: 3.21
+
+Boolean specifying whether compiler specific extensions are requested.
+
+This property specifies whether compiler specific extensions should be
+used.  For some compilers, this results in adding a flag such
+as ``-std=gnu++11`` instead of ``-std=c++11`` to the compile line.  This
+property is ``ON`` by default. The basic HIP/C++ standard level is
+controlled by the :prop_tgt:`HIP_STANDARD` target property.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
+
+This property is initialized by the value of
+the :variable:`CMAKE_HIP_EXTENSIONS` variable if set when a target is created
+and otherwise by the value of
+:variable:`CMAKE_HIP_EXTENSIONS_DEFAULT <CMAKE_<LANG>_EXTENSIONS_DEFAULT>` (see
+:policy:`CMP0128`).
diff --git a/share/cmake-3.22/Help/prop_tgt/HIP_STANDARD.rst b/share/cmake-3.22/Help/prop_tgt/HIP_STANDARD.rst
new file mode 100644
index 0000000..0c767c6
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/HIP_STANDARD.rst
@@ -0,0 +1,48 @@
+HIP_STANDARD
+------------
+
+.. versionadded:: 3.21
+
+The HIP/C++ standard requested to build this target.
+
+Supported values are:
+
+``98``
+  HIP C++98
+
+``11``
+  HIP C++11
+
+``14``
+  HIP C++14
+
+``17``
+  HIP C++17
+
+``20``
+  HIP C++20
+
+``23``
+  HIP C++23
+
+If the value requested does not result in a compile flag being added for
+the compiler in use, a previous standard flag will be added instead.  This
+means that using:
+
+.. code-block:: cmake
+
+  set_property(TARGET tgt PROPERTY HIP_STANDARD 11)
+
+with a compiler which does not support ``-std=gnu++11`` or an equivalent
+flag will not result in an error or warning, but will instead add the
+``-std=gnu++98`` flag if supported.  This "decay" behavior may be controlled
+with the :prop_tgt:`HIP_STANDARD_REQUIRED` target property.
+Additionally, the :prop_tgt:`HIP_EXTENSIONS` target property may be used to
+control whether compiler-specific extensions are enabled on a per-target basis.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
+
+This property is initialized by the value of
+the :variable:`CMAKE_HIP_STANDARD` variable if it is set when a target
+is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/HIP_STANDARD_REQUIRED.rst b/share/cmake-3.22/Help/prop_tgt/HIP_STANDARD_REQUIRED.rst
new file mode 100644
index 0000000..e56209a
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/HIP_STANDARD_REQUIRED.rst
@@ -0,0 +1,19 @@
+HIP_STANDARD_REQUIRED
+---------------------
+
+.. versionadded:: 3.21
+
+Boolean describing whether the value of :prop_tgt:`HIP_STANDARD` is a requirement.
+
+If this property is set to ``ON``, then the value of the
+:prop_tgt:`HIP_STANDARD` target property is treated as a requirement.  If this
+property is ``OFF`` or unset, the :prop_tgt:`HIP_STANDARD` target property is
+treated as optional and may "decay" to a previous standard if the requested is
+not available.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
+
+This property is initialized by the value of
+the :variable:`CMAKE_HIP_STANDARD_REQUIRED` variable if it is set when a
+target is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/IMPLICIT_DEPENDS_INCLUDE_TRANSFORM.rst b/share/cmake-3.22/Help/prop_tgt/IMPLICIT_DEPENDS_INCLUDE_TRANSFORM.rst
new file mode 100644
index 0000000..f7e366a
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/IMPLICIT_DEPENDS_INCLUDE_TRANSFORM.rst
@@ -0,0 +1,32 @@
+IMPLICIT_DEPENDS_INCLUDE_TRANSFORM
+----------------------------------
+
+Specify ``#include`` line transforms for dependencies in a target.
+
+This property specifies rules to transform macro-like ``#include`` lines
+during implicit dependency scanning of C and C++ source files.  The
+list of rules must be semicolon-separated with each entry of the form
+``A_MACRO(%)=value-with-%`` (the ``%`` must be literal).  During dependency
+scanning occurrences of ``A_MACRO(...)`` on ``#include`` lines will be
+replaced by the value given with the macro argument substituted for
+``%``.  For example, the entry
+
+::
+
+  MYDIR(%)=<mydir/%>
+
+will convert lines of the form
+
+::
+
+  #include MYDIR(myheader.h)
+
+to
+
+::
+
+  #include <mydir/myheader.h>
+
+allowing the dependency to be followed.
+
+This property applies to sources in the target on which it is set.
diff --git a/share/cmake-3.18/Help/prop_tgt/IMPORTED.rst b/share/cmake-3.22/Help/prop_tgt/IMPORTED.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/IMPORTED.rst
rename to share/cmake-3.22/Help/prop_tgt/IMPORTED.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/IMPORTED_COMMON_LANGUAGE_RUNTIME.rst b/share/cmake-3.22/Help/prop_tgt/IMPORTED_COMMON_LANGUAGE_RUNTIME.rst
new file mode 100644
index 0000000..8c20e07
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/IMPORTED_COMMON_LANGUAGE_RUNTIME.rst
@@ -0,0 +1,10 @@
+IMPORTED_COMMON_LANGUAGE_RUNTIME
+--------------------------------
+
+.. versionadded:: 3.12
+
+Property to define if the target uses ``C++/CLI``.
+
+Ignored for non-imported targets.
+
+See also the :prop_tgt:`COMMON_LANGUAGE_RUNTIME` target property.
diff --git a/share/cmake-3.18/Help/prop_tgt/IMPORTED_CONFIGURATIONS.rst b/share/cmake-3.22/Help/prop_tgt/IMPORTED_CONFIGURATIONS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/IMPORTED_CONFIGURATIONS.rst
rename to share/cmake-3.22/Help/prop_tgt/IMPORTED_CONFIGURATIONS.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/IMPORTED_GLOBAL.rst b/share/cmake-3.22/Help/prop_tgt/IMPORTED_GLOBAL.rst
new file mode 100644
index 0000000..176127f
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/IMPORTED_GLOBAL.rst
@@ -0,0 +1,32 @@
+IMPORTED_GLOBAL
+---------------
+
+.. versionadded:: 3.11
+
+Indication of whether an :ref:`IMPORTED target <Imported Targets>` is
+globally visible.
+
+The boolean value of this property is True for targets created with the
+``IMPORTED`` ``GLOBAL`` options to :command:`add_executable()` or
+:command:`add_library()`. It is always False for targets built within the
+project.
+
+For targets created with the ``IMPORTED`` option to
+:command:`add_executable()` or :command:`add_library()` but without the
+additional option ``GLOBAL`` this is False, too. However, setting this
+property for such a locally ``IMPORTED`` target to True promotes that
+target to global scope. This promotion can only be done in the same
+directory where that ``IMPORTED`` target was created in the first place.
+
+.. note::
+
+  Once an imported target has been made global, it cannot be changed back to
+  non-global. Therefore, if a project sets this property, it may only
+  provide a value of True. CMake will issue an error if the project tries to
+  set the property to a non-True value, even if the value was already False.
+
+.. note::
+
+  Local :ref:`ALIAS targets <Alias Targets>` created before promoting an
+  :ref:`IMPORTED target <Imported Targets>` from ``LOCAL`` to ``GLOBAL``, keep
+  their initial scope (see :prop_tgt:`ALIAS_GLOBAL` target property).
diff --git a/share/cmake-3.18/Help/prop_tgt/IMPORTED_IMPLIB.rst b/share/cmake-3.22/Help/prop_tgt/IMPORTED_IMPLIB.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/IMPORTED_IMPLIB.rst
rename to share/cmake-3.22/Help/prop_tgt/IMPORTED_IMPLIB.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/IMPORTED_IMPLIB_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/IMPORTED_IMPLIB_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/IMPORTED_IMPLIB_CONFIG.rst
rename to share/cmake-3.22/Help/prop_tgt/IMPORTED_IMPLIB_CONFIG.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/IMPORTED_LIBNAME.rst b/share/cmake-3.22/Help/prop_tgt/IMPORTED_LIBNAME.rst
new file mode 100644
index 0000000..7a83906
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/IMPORTED_LIBNAME.rst
@@ -0,0 +1,25 @@
+IMPORTED_LIBNAME
+----------------
+
+.. versionadded:: 3.8
+
+Specify the link library name for an :ref:`imported <Imported Targets>`
+:ref:`Interface Library <Interface Libraries>`.
+
+An interface library builds no library file itself but does specify
+usage requirements for its consumers.  The ``IMPORTED_LIBNAME``
+property may be set to specify a single library name to be placed
+on the link line in place of the interface library target name as
+a requirement for using the interface.
+
+This property is intended for use in naming libraries provided by
+a platform SDK for which the full path to a library file may not
+be known.  The value may be a plain library name such as ``foo``
+but may *not* be a path (e.g. ``/usr/lib/libfoo.so``) or a flag
+(e.g. ``-Wl,...``).  The name is never treated as a library target
+name even if it happens to name one.
+
+The ``IMPORTED_LIBNAME`` property is allowed only on
+:ref:`imported <Imported Targets>` :ref:`Interface Libraries`
+and is rejected on targets of other types (for which
+the :prop_tgt:`IMPORTED_LOCATION` target property may be used).
diff --git a/share/cmake-3.22/Help/prop_tgt/IMPORTED_LIBNAME_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/IMPORTED_LIBNAME_CONFIG.rst
new file mode 100644
index 0000000..df64769
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/IMPORTED_LIBNAME_CONFIG.rst
@@ -0,0 +1,9 @@
+IMPORTED_LIBNAME_<CONFIG>
+-------------------------
+
+.. versionadded:: 3.8
+
+<CONFIG>-specific version of :prop_tgt:`IMPORTED_LIBNAME` property.
+
+Configuration names correspond to those provided by the project from
+which the target is imported.
diff --git a/share/cmake-3.18/Help/prop_tgt/IMPORTED_LINK_DEPENDENT_LIBRARIES.rst b/share/cmake-3.22/Help/prop_tgt/IMPORTED_LINK_DEPENDENT_LIBRARIES.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/IMPORTED_LINK_DEPENDENT_LIBRARIES.rst
rename to share/cmake-3.22/Help/prop_tgt/IMPORTED_LINK_DEPENDENT_LIBRARIES.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/IMPORTED_LINK_DEPENDENT_LIBRARIES_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/IMPORTED_LINK_DEPENDENT_LIBRARIES_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/IMPORTED_LINK_DEPENDENT_LIBRARIES_CONFIG.rst
rename to share/cmake-3.22/Help/prop_tgt/IMPORTED_LINK_DEPENDENT_LIBRARIES_CONFIG.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/IMPORTED_LINK_INTERFACE_LANGUAGES.rst b/share/cmake-3.22/Help/prop_tgt/IMPORTED_LINK_INTERFACE_LANGUAGES.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/IMPORTED_LINK_INTERFACE_LANGUAGES.rst
rename to share/cmake-3.22/Help/prop_tgt/IMPORTED_LINK_INTERFACE_LANGUAGES.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/IMPORTED_LINK_INTERFACE_LANGUAGES_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/IMPORTED_LINK_INTERFACE_LANGUAGES_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/IMPORTED_LINK_INTERFACE_LANGUAGES_CONFIG.rst
rename to share/cmake-3.22/Help/prop_tgt/IMPORTED_LINK_INTERFACE_LANGUAGES_CONFIG.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/IMPORTED_LINK_INTERFACE_LIBRARIES.rst b/share/cmake-3.22/Help/prop_tgt/IMPORTED_LINK_INTERFACE_LIBRARIES.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/IMPORTED_LINK_INTERFACE_LIBRARIES.rst
rename to share/cmake-3.22/Help/prop_tgt/IMPORTED_LINK_INTERFACE_LIBRARIES.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/IMPORTED_LINK_INTERFACE_LIBRARIES_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/IMPORTED_LINK_INTERFACE_LIBRARIES_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/IMPORTED_LINK_INTERFACE_LIBRARIES_CONFIG.rst
rename to share/cmake-3.22/Help/prop_tgt/IMPORTED_LINK_INTERFACE_LIBRARIES_CONFIG.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/IMPORTED_LINK_INTERFACE_MULTIPLICITY.rst b/share/cmake-3.22/Help/prop_tgt/IMPORTED_LINK_INTERFACE_MULTIPLICITY.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/IMPORTED_LINK_INTERFACE_MULTIPLICITY.rst
rename to share/cmake-3.22/Help/prop_tgt/IMPORTED_LINK_INTERFACE_MULTIPLICITY.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/IMPORTED_LINK_INTERFACE_MULTIPLICITY_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/IMPORTED_LINK_INTERFACE_MULTIPLICITY_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/IMPORTED_LINK_INTERFACE_MULTIPLICITY_CONFIG.rst
rename to share/cmake-3.22/Help/prop_tgt/IMPORTED_LINK_INTERFACE_MULTIPLICITY_CONFIG.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/IMPORTED_LOCATION.rst b/share/cmake-3.22/Help/prop_tgt/IMPORTED_LOCATION.rst
new file mode 100644
index 0000000..ddd910a
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/IMPORTED_LOCATION.rst
@@ -0,0 +1,31 @@
+IMPORTED_LOCATION
+-----------------
+
+Full path to the main file on disk for an ``IMPORTED`` target.
+
+Set this to the location of an ``IMPORTED`` target file on disk.  For
+executables this is the location of the executable file.  For ``STATIC``
+libraries and modules this is the location of the library or module.
+For ``SHARED`` libraries on non-DLL platforms this is the location of the
+shared library.  For application bundles on macOS this is the location of
+the executable file inside ``Contents/MacOS`` within the bundle folder.
+For frameworks on macOS this is the location of the
+library file symlink just inside the framework folder.  For DLLs this
+is the location of the ``.dll`` part of the library.  For ``UNKNOWN``
+libraries this is the location of the file to be linked.  Ignored for
+non-imported targets.
+
+The ``IMPORTED_LOCATION`` target property may be overridden for a
+given configuration ``<CONFIG>`` by the configuration-specific
+:prop_tgt:`IMPORTED_LOCATION_<CONFIG>` target property.  Furthermore,
+the :prop_tgt:`MAP_IMPORTED_CONFIG_<CONFIG>` target property may be
+used to map between a project's configurations and those of an imported
+target.  If none of these is set then the name of any other configuration
+listed in the :prop_tgt:`IMPORTED_CONFIGURATIONS` target property may be
+selected and its :prop_tgt:`IMPORTED_LOCATION_<CONFIG>` value used.
+
+To get the location of an imported target read one of the :prop_tgt:`LOCATION`
+or ``LOCATION_<CONFIG>`` properties.
+
+For platforms with import libraries (e.g. Windows) see also
+:prop_tgt:`IMPORTED_IMPLIB`.
diff --git a/share/cmake-3.18/Help/prop_tgt/IMPORTED_LOCATION_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/IMPORTED_LOCATION_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/IMPORTED_LOCATION_CONFIG.rst
rename to share/cmake-3.22/Help/prop_tgt/IMPORTED_LOCATION_CONFIG.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/IMPORTED_NO_SONAME.rst b/share/cmake-3.22/Help/prop_tgt/IMPORTED_NO_SONAME.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/IMPORTED_NO_SONAME.rst
rename to share/cmake-3.22/Help/prop_tgt/IMPORTED_NO_SONAME.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/IMPORTED_NO_SONAME_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/IMPORTED_NO_SONAME_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/IMPORTED_NO_SONAME_CONFIG.rst
rename to share/cmake-3.22/Help/prop_tgt/IMPORTED_NO_SONAME_CONFIG.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/IMPORTED_OBJECTS.rst b/share/cmake-3.22/Help/prop_tgt/IMPORTED_OBJECTS.rst
new file mode 100644
index 0000000..d71c219
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/IMPORTED_OBJECTS.rst
@@ -0,0 +1,91 @@
+IMPORTED_OBJECTS
+----------------
+
+.. versionadded:: 3.9
+
+A :ref:`semicolon-separated list <CMake Language Lists>` of absolute paths
+to the object files on disk for an :ref:`imported <Imported targets>`
+:ref:`object library <object libraries>`.
+
+Ignored for non-imported targets.
+
+Projects may skip ``IMPORTED_OBJECTS`` if the configuration-specific
+property :prop_tgt:`IMPORTED_OBJECTS_<CONFIG>` is set instead, except in
+situations as noted in the section below.
+
+
+Xcode Generator Considerations
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.20
+
+For Apple platforms, a project may be built for more than one architecture.
+This is controlled by the :variable:`CMAKE_OSX_ARCHITECTURES` variable.
+For all but the :generator:`Xcode` generator, CMake invokes compilers once
+per source file and passes multiple ``-arch`` flags, leading to a single
+object file which will be a universal binary.  Such object files work well
+when listed in the ``IMPORTED_OBJECTS`` of a separate CMake build, even for
+the :generator:`Xcode` generator.  But producing such object files with the
+:generator:`Xcode` generator is more difficult, since it invokes the compiler
+once per architecture for each source file.  Unlike the other generators,
+it does not generate universal object file binaries.
+
+A further complication with the :generator:`Xcode` generator is that when
+targeting device platforms (iOS, tvOS or watchOS), the :generator:`Xcode`
+generator has the ability to use either the device or simulator SDK without
+needing CMake to be re-run.  The SDK can be selected at build time.
+But since some architectures can be supported by both the device and the
+simulator SDKs (e.g. ``arm64`` with Xcode 12 or later), not all combinations
+can be represented in a single universal binary.  The only solution in this
+case is to have multiple object files.
+
+``IMPORTED_OBJECTS`` doesn't support generator expressions, so every file
+it lists needs to be valid for every architecture and SDK.  If incorporating
+object files that are not universal binaries, the path and/or file name of
+each object file has to somehow encapsulate the different architectures and
+SDKs.  With the :generator:`Xcode` generator, Xcode variables of the form
+``$(...)`` can be used to represent these aspects and Xcode will substitute
+the appropriate values at build time.  CMake doesn't interpret these
+variables and embeds them unchanged in the Xcode project file.
+``$(CURRENT_ARCH)`` can be used to represent the architecture, while
+``$(EFFECTIVE_PLATFORM_NAME)`` can be used to differentiate between SDKs.
+
+The following shows one example of how these two variables can be used to
+refer to an object file whose location depends on both the SDK and the
+architecture:
+
+.. code-block:: cmake
+
+  add_library(someObjs OBJECT IMPORTED)
+
+  set_property(TARGET someObjs PROPERTY IMPORTED_OBJECTS
+    # Quotes are required because of the ()
+    "/path/to/somewhere/objects$(EFFECTIVE_PLATFORM_NAME)/$(CURRENT_ARCH)/func.o"
+  )
+
+  # Example paths:
+  #   /path/to/somewhere/objects-iphoneos/arm64/func.o
+  #   /path/to/somewhere/objects-iphonesimulator/x86_64/func.o
+
+In some cases, you may want to have configuration-specific object files
+as well.  The ``$(CONFIGURATION)`` Xcode variable is often used for this and
+can be used in conjunction with the others mentioned above:
+
+.. code-block:: cmake
+
+  add_library(someObjs OBJECT IMPORTED)
+  set_property(TARGET someObjs PROPERTY IMPORTED_OBJECTS
+    "/path/to/somewhere/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/$(CURRENT_ARCH)/func.o"
+  )
+
+  # Example paths:
+  #   /path/to/somewhere/Release-iphoneos/arm64/func.o
+  #   /path/to/somewhere/Debug-iphonesimulator/x86_64/func.o
+
+When any Xcode variable is used, CMake is not able to fully evaluate the
+path(s) at configure time.  One consequence of this is that the
+configuration-specific :prop_tgt:`IMPORTED_OBJECTS_<CONFIG>` properties cannot
+be used, since CMake cannot determine whether an object file exists at a
+particular ``<CONFIG>`` location.  The ``IMPORTED_OBJECTS`` property must be
+used for these situations and the configuration-specific aspects of the path
+should be handled by the ``$(CONFIGURATION)`` Xcode variable.
diff --git a/share/cmake-3.22/Help/prop_tgt/IMPORTED_OBJECTS_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/IMPORTED_OBJECTS_CONFIG.rst
new file mode 100644
index 0000000..238395a
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/IMPORTED_OBJECTS_CONFIG.rst
@@ -0,0 +1,20 @@
+IMPORTED_OBJECTS_<CONFIG>
+-------------------------
+
+.. versionadded:: 3.9
+
+``<CONFIG>``-specific version of :prop_tgt:`IMPORTED_OBJECTS` property.
+
+Configuration names correspond to those provided by the project from
+which the target is imported.
+
+
+Xcode Generator Considerations
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Do not use this ``<CONFIG>``-specific property if you need to use Xcode
+variables like ``$(CURRENT_ARCH)`` or ``$(EFFECTIVE_PLATFORM_NAME)`` in
+the value.  The ``<CONFIG>``-specific properties will be ignored in such
+cases because CMake cannot determine whether a file exists at the
+configuration-specific path at configuration time.  For such cases, use
+:prop_tgt:`IMPORTED_OBJECTS` instead.
diff --git a/share/cmake-3.18/Help/prop_tgt/IMPORTED_SONAME.rst b/share/cmake-3.22/Help/prop_tgt/IMPORTED_SONAME.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/IMPORTED_SONAME.rst
rename to share/cmake-3.22/Help/prop_tgt/IMPORTED_SONAME.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/IMPORTED_SONAME_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/IMPORTED_SONAME_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/IMPORTED_SONAME_CONFIG.rst
rename to share/cmake-3.22/Help/prop_tgt/IMPORTED_SONAME_CONFIG.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/IMPORT_PREFIX.rst b/share/cmake-3.22/Help/prop_tgt/IMPORT_PREFIX.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/IMPORT_PREFIX.rst
rename to share/cmake-3.22/Help/prop_tgt/IMPORT_PREFIX.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/IMPORT_SUFFIX.rst b/share/cmake-3.22/Help/prop_tgt/IMPORT_SUFFIX.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/IMPORT_SUFFIX.rst
rename to share/cmake-3.22/Help/prop_tgt/IMPORT_SUFFIX.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/INCLUDE_DIRECTORIES.rst b/share/cmake-3.22/Help/prop_tgt/INCLUDE_DIRECTORIES.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/INCLUDE_DIRECTORIES.rst
rename to share/cmake-3.22/Help/prop_tgt/INCLUDE_DIRECTORIES.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/INSTALL_NAME_DIR.rst b/share/cmake-3.22/Help/prop_tgt/INSTALL_NAME_DIR.rst
new file mode 100644
index 0000000..47a0037
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/INSTALL_NAME_DIR.rst
@@ -0,0 +1,18 @@
+INSTALL_NAME_DIR
+----------------
+
+Directory name for installed targets on Apple platforms.
+
+``INSTALL_NAME_DIR`` is a string specifying the directory portion of the
+"install_name" field of shared libraries on Apple platforms for
+installed targets.  When not set, the default directory used is determined
+by :prop_tgt:`MACOSX_RPATH`.  Policies :policy:`CMP0068` and :policy:`CMP0042`
+are also relevant.
+
+This property is initialized by the value of the variable
+:variable:`CMAKE_INSTALL_NAME_DIR` if it is set when a target is
+created.
+
+This property supports :manual:`generator expressions <cmake-generator-expressions(7)>`.
+In particular, the :genex:`$<INSTALL_PREFIX>` generator expression can be
+used to set the directory relative to the install-time prefix.
diff --git a/share/cmake-3.22/Help/prop_tgt/INSTALL_REMOVE_ENVIRONMENT_RPATH.rst b/share/cmake-3.22/Help/prop_tgt/INSTALL_REMOVE_ENVIRONMENT_RPATH.rst
new file mode 100644
index 0000000..f41e41c
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/INSTALL_REMOVE_ENVIRONMENT_RPATH.rst
@@ -0,0 +1,18 @@
+INSTALL_REMOVE_ENVIRONMENT_RPATH
+--------------------------------
+
+.. versionadded:: 3.16
+
+Controls whether toolchain-defined rpaths should be removed during installation.
+
+When a target is being installed, CMake may need to rewrite its rpath
+information.  This occurs when the install rpath (as specified by the
+:prop_tgt:`INSTALL_RPATH` target property) has different contents to the rpath
+that the target was built with.  Some toolchains insert their own rpath
+contents into the binary as part of the build.  By default, CMake will
+preserve those extra inserted contents in the install rpath.  For those
+scenarios where such toolchain-inserted entries need to be discarded during
+install, set the ``INSTALL_REMOVE_ENVIRONMENT_RPATH`` target property to true.
+
+This property is initialized by the value of
+:variable:`CMAKE_INSTALL_REMOVE_ENVIRONMENT_RPATH` when the target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/INSTALL_RPATH.rst b/share/cmake-3.22/Help/prop_tgt/INSTALL_RPATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/INSTALL_RPATH.rst
rename to share/cmake-3.22/Help/prop_tgt/INSTALL_RPATH.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/INSTALL_RPATH_USE_LINK_PATH.rst b/share/cmake-3.22/Help/prop_tgt/INSTALL_RPATH_USE_LINK_PATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/INSTALL_RPATH_USE_LINK_PATH.rst
rename to share/cmake-3.22/Help/prop_tgt/INSTALL_RPATH_USE_LINK_PATH.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/INTERFACE_AUTOUIC_OPTIONS.rst b/share/cmake-3.22/Help/prop_tgt/INTERFACE_AUTOUIC_OPTIONS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/INTERFACE_AUTOUIC_OPTIONS.rst
rename to share/cmake-3.22/Help/prop_tgt/INTERFACE_AUTOUIC_OPTIONS.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/INTERFACE_BUILD_PROPERTY.txt b/share/cmake-3.22/Help/prop_tgt/INTERFACE_BUILD_PROPERTY.txt
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/INTERFACE_BUILD_PROPERTY.txt
rename to share/cmake-3.22/Help/prop_tgt/INTERFACE_BUILD_PROPERTY.txt
diff --git a/share/cmake-3.18/Help/prop_tgt/INTERFACE_COMPILE_DEFINITIONS.rst b/share/cmake-3.22/Help/prop_tgt/INTERFACE_COMPILE_DEFINITIONS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/INTERFACE_COMPILE_DEFINITIONS.rst
rename to share/cmake-3.22/Help/prop_tgt/INTERFACE_COMPILE_DEFINITIONS.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/INTERFACE_COMPILE_FEATURES.rst b/share/cmake-3.22/Help/prop_tgt/INTERFACE_COMPILE_FEATURES.rst
new file mode 100644
index 0000000..0db3b0c
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/INTERFACE_COMPILE_FEATURES.rst
@@ -0,0 +1,14 @@
+INTERFACE_COMPILE_FEATURES
+--------------------------
+
+.. versionadded:: 3.1
+
+.. |property_name| replace:: compile features
+.. |command_name| replace:: :command:`target_compile_features`
+.. |PROPERTY_INTERFACE_NAME| replace:: ``INTERFACE_COMPILE_FEATURES``
+.. |PROPERTY_LINK| replace:: :prop_tgt:`COMPILE_FEATURES`
+.. |PROPERTY_GENEX| replace:: ``$<TARGET_PROPERTY:foo,INTERFACE_COMPILE_FEATURES>``
+.. include:: INTERFACE_BUILD_PROPERTY.txt
+
+See the :manual:`cmake-compile-features(7)` manual for information on compile
+features and a list of supported compilers.
diff --git a/share/cmake-3.18/Help/prop_tgt/INTERFACE_COMPILE_OPTIONS.rst b/share/cmake-3.22/Help/prop_tgt/INTERFACE_COMPILE_OPTIONS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/INTERFACE_COMPILE_OPTIONS.rst
rename to share/cmake-3.22/Help/prop_tgt/INTERFACE_COMPILE_OPTIONS.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/INTERFACE_INCLUDE_DIRECTORIES.rst b/share/cmake-3.22/Help/prop_tgt/INTERFACE_INCLUDE_DIRECTORIES.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/INTERFACE_INCLUDE_DIRECTORIES.rst
rename to share/cmake-3.22/Help/prop_tgt/INTERFACE_INCLUDE_DIRECTORIES.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/INTERFACE_LINK_DEPENDS.rst b/share/cmake-3.22/Help/prop_tgt/INTERFACE_LINK_DEPENDS.rst
new file mode 100644
index 0000000..9c8275d
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/INTERFACE_LINK_DEPENDS.rst
@@ -0,0 +1,34 @@
+INTERFACE_LINK_DEPENDS
+----------------------
+
+.. versionadded:: 3.13
+
+Additional public interface files on which a target binary depends for linking.
+
+This property is supported only by :generator:`Ninja` and
+:ref:`Makefile Generators`.
+It is intended to specify dependencies on "linker scripts" for
+custom Makefile link rules.
+
+When target dependencies are specified using :command:`target_link_libraries`,
+CMake will read this property from all target dependencies to determine the
+build properties of the consumer.
+
+Contents of ``INTERFACE_LINK_DEPENDS`` may use "generator expressions"
+with the syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)`
+manual for available expressions.  See the :manual:`cmake-buildsystem(7)`
+-manual for more on defining buildsystem properties.
+
+Link dependency files usage requirements commonly differ between the build-tree
+and the install-tree.  The ``BUILD_INTERFACE`` and ``INSTALL_INTERFACE``
+generator expressions can be used to describe separate usage requirements
+based on the usage location.  Relative paths are allowed within the
+``INSTALL_INTERFACE`` expression and are interpreted relative to the
+installation prefix.  For example:
+
+.. code-block:: cmake
+
+  set_property(TARGET mylib PROPERTY INTERFACE_LINK_DEPENDS
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/mylinkscript>
+    $<INSTALL_INTERFACE:mylinkscript>  # <prefix>/mylinkscript
+  )
diff --git a/share/cmake-3.22/Help/prop_tgt/INTERFACE_LINK_DIRECTORIES.rst b/share/cmake-3.22/Help/prop_tgt/INTERFACE_LINK_DIRECTORIES.rst
new file mode 100644
index 0000000..de1dabb
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/INTERFACE_LINK_DIRECTORIES.rst
@@ -0,0 +1,11 @@
+INTERFACE_LINK_DIRECTORIES
+--------------------------
+
+.. versionadded:: 3.13
+
+.. |property_name| replace:: link directories
+.. |command_name| replace:: :command:`target_link_directories`
+.. |PROPERTY_INTERFACE_NAME| replace:: ``INTERFACE_LINK_DIRECTORIES``
+.. |PROPERTY_LINK| replace:: :prop_tgt:`LINK_DIRECTORIES`
+.. |PROPERTY_GENEX| replace:: ``$<TARGET_PROPERTY:foo,INTERFACE_LINK_DIRECTORIES>``
+.. include:: INTERFACE_BUILD_PROPERTY.txt
diff --git a/share/cmake-3.18/Help/prop_tgt/INTERFACE_LINK_LIBRARIES.rst b/share/cmake-3.22/Help/prop_tgt/INTERFACE_LINK_LIBRARIES.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/INTERFACE_LINK_LIBRARIES.rst
rename to share/cmake-3.22/Help/prop_tgt/INTERFACE_LINK_LIBRARIES.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/INTERFACE_LINK_OPTIONS.rst b/share/cmake-3.22/Help/prop_tgt/INTERFACE_LINK_OPTIONS.rst
new file mode 100644
index 0000000..4245fe9
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/INTERFACE_LINK_OPTIONS.rst
@@ -0,0 +1,11 @@
+INTERFACE_LINK_OPTIONS
+----------------------
+
+.. versionadded:: 3.13
+
+.. |property_name| replace:: link options
+.. |command_name| replace:: :command:`target_link_options`
+.. |PROPERTY_INTERFACE_NAME| replace:: ``INTERFACE_LINK_OPTIONS``
+.. |PROPERTY_LINK| replace:: :prop_tgt:`LINK_OPTIONS`
+.. |PROPERTY_GENEX| replace:: ``$<TARGET_PROPERTY:foo,INTERFACE_LINK_OPTIONS>``
+.. include:: INTERFACE_BUILD_PROPERTY.txt
diff --git a/share/cmake-3.18/Help/prop_tgt/INTERFACE_POSITION_INDEPENDENT_CODE.rst b/share/cmake-3.22/Help/prop_tgt/INTERFACE_POSITION_INDEPENDENT_CODE.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/INTERFACE_POSITION_INDEPENDENT_CODE.rst
rename to share/cmake-3.22/Help/prop_tgt/INTERFACE_POSITION_INDEPENDENT_CODE.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/INTERFACE_PRECOMPILE_HEADERS.rst b/share/cmake-3.22/Help/prop_tgt/INTERFACE_PRECOMPILE_HEADERS.rst
new file mode 100644
index 0000000..2299264
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/INTERFACE_PRECOMPILE_HEADERS.rst
@@ -0,0 +1,18 @@
+INTERFACE_PRECOMPILE_HEADERS
+----------------------------
+
+.. versionadded:: 3.16
+
+List of interface header files to precompile into consuming targets.
+
+Targets may populate this property to publish the header files
+for consuming targets to precompile.  The :command:`target_precompile_headers`
+command populates this property with values given to the ``PUBLIC`` and
+``INTERFACE`` keywords.  Projects may also get and set the property directly.
+See the discussion in :command:`target_precompile_headers` for guidance on
+appropriate use of this property for installed or exported targets.
+
+Contents of ``INTERFACE_PRECOMPILE_HEADERS`` may use "generator expressions"
+with the syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)`
+manual for available expressions.  See the :manual:`cmake-buildsystem(7)`
+manual for more on defining buildsystem properties.
diff --git a/share/cmake-3.22/Help/prop_tgt/INTERFACE_SOURCES.rst b/share/cmake-3.22/Help/prop_tgt/INTERFACE_SOURCES.rst
new file mode 100644
index 0000000..759c482
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/INTERFACE_SOURCES.rst
@@ -0,0 +1,20 @@
+INTERFACE_SOURCES
+-----------------
+
+.. versionadded:: 3.1
+
+List of interface sources to compile into consuming targets.
+
+Targets may populate this property to publish the sources
+for consuming targets to compile.  The :command:`target_sources` command
+populates this property with values given to the ``PUBLIC`` and
+``INTERFACE`` keywords.  Projects may also get and set the property directly.
+
+When target dependencies are specified using :command:`target_link_libraries`,
+CMake will read this property from all target dependencies to determine the
+sources of the consumer.
+
+Contents of ``INTERFACE_SOURCES`` may use "generator expressions"
+with the syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)`
+manual for available expressions.  See the :manual:`cmake-buildsystem(7)`
+manual for more on defining buildsystem properties.
diff --git a/share/cmake-3.18/Help/prop_tgt/INTERFACE_SYSTEM_INCLUDE_DIRECTORIES.rst b/share/cmake-3.22/Help/prop_tgt/INTERFACE_SYSTEM_INCLUDE_DIRECTORIES.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/INTERFACE_SYSTEM_INCLUDE_DIRECTORIES.rst
rename to share/cmake-3.22/Help/prop_tgt/INTERFACE_SYSTEM_INCLUDE_DIRECTORIES.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/INTERPROCEDURAL_OPTIMIZATION.rst b/share/cmake-3.22/Help/prop_tgt/INTERPROCEDURAL_OPTIMIZATION.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/INTERPROCEDURAL_OPTIMIZATION.rst
rename to share/cmake-3.22/Help/prop_tgt/INTERPROCEDURAL_OPTIMIZATION.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/INTERPROCEDURAL_OPTIMIZATION_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/INTERPROCEDURAL_OPTIMIZATION_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/INTERPROCEDURAL_OPTIMIZATION_CONFIG.rst
rename to share/cmake-3.22/Help/prop_tgt/INTERPROCEDURAL_OPTIMIZATION_CONFIG.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/IOS_INSTALL_COMBINED.rst b/share/cmake-3.22/Help/prop_tgt/IOS_INSTALL_COMBINED.rst
new file mode 100644
index 0000000..92d60dc
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/IOS_INSTALL_COMBINED.rst
@@ -0,0 +1,19 @@
+IOS_INSTALL_COMBINED
+--------------------
+
+.. versionadded:: 3.5
+
+Build a combined (device and simulator) target when installing.
+
+When this property is set to set to false (which is the default) then it will
+either be built with the device SDK or the simulator SDK depending on the SDK
+set. But if this property is set to true then the target will at install time
+also be built for the corresponding SDK and combined into one library.
+
+.. note::
+
+  If a selected architecture is available for both: device SDK and simulator
+  SDK it will be built for the SDK selected by :variable:`CMAKE_OSX_SYSROOT`
+  and removed from the corresponding SDK.
+
+This feature requires at least Xcode version 6.
diff --git a/share/cmake-3.22/Help/prop_tgt/ISPC_HEADER_DIRECTORY.rst b/share/cmake-3.22/Help/prop_tgt/ISPC_HEADER_DIRECTORY.rst
new file mode 100644
index 0000000..2a3a8bc
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/ISPC_HEADER_DIRECTORY.rst
@@ -0,0 +1,13 @@
+ISPC_HEADER_DIRECTORY
+---------------------
+
+.. versionadded:: 3.19
+
+Specify relative output directory for ISPC headers provided by the target.
+
+If the target contains ISPC source files, this specifies the directory in which
+the generated headers will be placed. Relative paths are treated with respect to
+the value of :variable:`CMAKE_CURRENT_BINARY_DIR`. When this property is not set, the
+headers will be placed a generator defined build directory. If the variable
+:variable:`CMAKE_ISPC_HEADER_DIRECTORY` is set when a target is created
+its value is used to initialize this property.
diff --git a/share/cmake-3.22/Help/prop_tgt/ISPC_HEADER_SUFFIX.rst b/share/cmake-3.22/Help/prop_tgt/ISPC_HEADER_SUFFIX.rst
new file mode 100644
index 0000000..6397e55
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/ISPC_HEADER_SUFFIX.rst
@@ -0,0 +1,14 @@
+ISPC_HEADER_SUFFIX
+------------------
+
+.. versionadded:: 3.19.2
+
+Specify output suffix to be used for ISPC generated headers provided by the target.
+
+This property is initialized by the value of the :variable:`CMAKE_ISPC_HEADER_SUFFIX`
+variable if it is set when a target  is created.
+
+If the target contains ISPC source files, this specifies the header suffix to
+be used for the generated headers.
+
+The default value is ``_ispc.h``.
diff --git a/share/cmake-3.22/Help/prop_tgt/ISPC_INSTRUCTION_SETS.rst b/share/cmake-3.22/Help/prop_tgt/ISPC_INSTRUCTION_SETS.rst
new file mode 100644
index 0000000..cad116f
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/ISPC_INSTRUCTION_SETS.rst
@@ -0,0 +1,21 @@
+ISPC_INSTRUCTION_SETS
+---------------------
+
+.. versionadded:: 3.19
+
+List of instruction set architectures to generate code for.
+
+This property is initialized by the value of the :variable:`CMAKE_ISPC_INSTRUCTION_SETS`
+variable if it is set when a target is created.
+
+The ``ISPC_INSTRUCTION_SETS`` target property must be used when generating for multiple
+instruction sets so that CMake can track what object files will be generated.
+
+Examples
+^^^^^^^^
+
+.. code-block:: cmake
+
+  set_property(TARGET tgt PROPERTY ISPC_INSTRUCTION_SETS avx2-i32x4 avx512skx-i32x835)
+
+Generates code for avx2 and avx512skx target architectures.
diff --git a/share/cmake-3.18/Help/prop_tgt/JOB_POOL_COMPILE.rst b/share/cmake-3.22/Help/prop_tgt/JOB_POOL_COMPILE.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/JOB_POOL_COMPILE.rst
rename to share/cmake-3.22/Help/prop_tgt/JOB_POOL_COMPILE.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/JOB_POOL_LINK.rst b/share/cmake-3.22/Help/prop_tgt/JOB_POOL_LINK.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/JOB_POOL_LINK.rst
rename to share/cmake-3.22/Help/prop_tgt/JOB_POOL_LINK.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/JOB_POOL_PRECOMPILE_HEADER.rst b/share/cmake-3.22/Help/prop_tgt/JOB_POOL_PRECOMPILE_HEADER.rst
new file mode 100644
index 0000000..42cace0
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/JOB_POOL_PRECOMPILE_HEADER.rst
@@ -0,0 +1,23 @@
+JOB_POOL_PRECOMPILE_HEADER
+--------------------------
+
+.. versionadded:: 3.17
+
+Ninja only: Pool used for generating pre-compiled headers.
+
+The number of parallel compile processes could be limited by defining
+pools with the global :prop_gbl:`JOB_POOLS`
+property and then specifying here the pool name.
+
+For instance:
+
+.. code-block:: cmake
+
+  set_property(TARGET myexe PROPERTY JOB_POOL_PRECOMPILE_HEADER two_jobs)
+
+This property is initialized by the value of
+:variable:`CMAKE_JOB_POOL_PRECOMPILE_HEADER`.
+
+If neither :prop_tgt:`JOB_POOL_PRECOMPILE_HEADER` nor
+:variable:`CMAKE_JOB_POOL_PRECOMPILE_HEADER` are set then
+:prop_tgt:`JOB_POOL_COMPILE` will be used for this task.
diff --git a/share/cmake-3.18/Help/prop_tgt/LABELS.rst b/share/cmake-3.22/Help/prop_tgt/LABELS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/LABELS.rst
rename to share/cmake-3.22/Help/prop_tgt/LABELS.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/LANG_CLANG_TIDY.rst b/share/cmake-3.22/Help/prop_tgt/LANG_CLANG_TIDY.rst
new file mode 100644
index 0000000..af16d3c
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/LANG_CLANG_TIDY.rst
@@ -0,0 +1,15 @@
+<LANG>_CLANG_TIDY
+-----------------
+
+.. versionadded:: 3.6
+
+This property is implemented only when ``<LANG>`` is ``C``, ``CXX``, ``OBJC`` or ``OBJCXX``.
+
+Specify a :ref:`semicolon-separated list <CMake Language Lists>` containing a command
+line for the ``clang-tidy`` tool.  The :ref:`Makefile Generators`
+and the :generator:`Ninja` generator will run this tool along with the
+compiler and report a warning if the tool reports any problems.
+
+This property is initialized by the value of
+the :variable:`CMAKE_<LANG>_CLANG_TIDY` variable if it is set
+when a target is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/LANG_COMPILER_LAUNCHER.rst b/share/cmake-3.22/Help/prop_tgt/LANG_COMPILER_LAUNCHER.rst
new file mode 100644
index 0000000..cba8ac9
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/LANG_COMPILER_LAUNCHER.rst
@@ -0,0 +1,16 @@
+<LANG>_COMPILER_LAUNCHER
+------------------------
+
+.. versionadded:: 3.4
+
+This property is implemented only when ``<LANG>`` is ``C``, ``CXX``,
+``Fortran``, ``HIP``, ``ISPC``, ``OBJC``, ``OBJCXX``, or ``CUDA``.
+
+Specify a :ref:`semicolon-separated list <CMake Language Lists>` containing a command line
+for a compiler launching tool. The :ref:`Makefile Generators` and the
+:generator:`Ninja` generator will run this tool and pass the compiler and
+its arguments to the tool. Some example tools are distcc and ccache.
+
+This property is initialized by the value of
+the :variable:`CMAKE_<LANG>_COMPILER_LAUNCHER` variable if it is set
+when a target is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/LANG_CPPCHECK.rst b/share/cmake-3.22/Help/prop_tgt/LANG_CPPCHECK.rst
new file mode 100644
index 0000000..80acbc0
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/LANG_CPPCHECK.rst
@@ -0,0 +1,17 @@
+<LANG>_CPPCHECK
+---------------
+
+.. versionadded:: 3.10
+
+This property is supported only when ``<LANG>`` is ``C`` or ``CXX``.
+
+Specify a :ref:`semicolon-separated list <CMake Language Lists>` containing a command line
+for the ``cppcheck`` static analysis tool.  The :ref:`Makefile Generators`
+and the :generator:`Ninja` generator will run ``cppcheck`` along with the
+compiler and report any problems.  If the command-line specifies the
+exit code options to ``cppcheck`` then the build  will fail if the
+tool returns non-zero.
+
+This property is initialized by the value of the
+:variable:`CMAKE_<LANG>_CPPCHECK` variable if it is set when a target is
+created.
diff --git a/share/cmake-3.22/Help/prop_tgt/LANG_CPPLINT.rst b/share/cmake-3.22/Help/prop_tgt/LANG_CPPLINT.rst
new file mode 100644
index 0000000..be6db46
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/LANG_CPPLINT.rst
@@ -0,0 +1,15 @@
+<LANG>_CPPLINT
+--------------
+
+.. versionadded:: 3.8
+
+This property is supported only when ``<LANG>`` is ``C`` or ``CXX``.
+
+Specify a :ref:`semicolon-separated list <CMake Language Lists>` containing a command line
+for the ``cpplint`` style checker.  The :ref:`Makefile Generators` and the
+:generator:`Ninja` generator will run ``cpplint`` along with the compiler
+and report any problems.
+
+This property is initialized by the value of the
+:variable:`CMAKE_<LANG>_CPPLINT` variable if it is set when a target is
+created.
diff --git a/share/cmake-3.22/Help/prop_tgt/LANG_EXTENSIONS.rst b/share/cmake-3.22/Help/prop_tgt/LANG_EXTENSIONS.rst
new file mode 100644
index 0000000..afc2ad3
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/LANG_EXTENSIONS.rst
@@ -0,0 +1,24 @@
+<LANG>_EXTENSIONS
+-----------------
+
+The variations are:
+
+* :prop_tgt:`C_EXTENSIONS`
+* :prop_tgt:`CXX_EXTENSIONS`
+* :prop_tgt:`CUDA_EXTENSIONS`
+* :prop_tgt:`HIP_EXTENSIONS`
+* :prop_tgt:`OBJC_EXTENSIONS`
+* :prop_tgt:`OBJCXX_EXTENSIONS`
+
+These properties specify whether compiler-specific extensions are requested.
+
+These properties are initialized by the value of the
+:variable:`CMAKE_<LANG>_EXTENSIONS` variable if it is set when a target is
+created and otherwise by the value of
+:variable:`CMAKE_<LANG>_EXTENSIONS_DEFAULT` (see :policy:`CMP0128`).
+
+For supported CMake versions see the respective pages.
+To control language standard versions see :prop_tgt:`<LANG>_STANDARD`.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
diff --git a/share/cmake-3.22/Help/prop_tgt/LANG_INCLUDE_WHAT_YOU_USE.rst b/share/cmake-3.22/Help/prop_tgt/LANG_INCLUDE_WHAT_YOU_USE.rst
new file mode 100644
index 0000000..eebef56
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/LANG_INCLUDE_WHAT_YOU_USE.rst
@@ -0,0 +1,15 @@
+<LANG>_INCLUDE_WHAT_YOU_USE
+---------------------------
+
+.. versionadded:: 3.3
+
+This property is implemented only when ``<LANG>`` is ``C`` or ``CXX``.
+
+Specify a :ref:`semicolon-separated list <CMake Language Lists>` containing a command
+line for the ``include-what-you-use`` tool.  The :ref:`Makefile Generators`
+and the :generator:`Ninja` generator will run this tool along with the
+compiler and report a warning if the tool reports any problems.
+
+This property is initialized by the value of
+the :variable:`CMAKE_<LANG>_INCLUDE_WHAT_YOU_USE` variable if it is set
+when a target is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/LANG_LINKER_LAUNCHER.rst b/share/cmake-3.22/Help/prop_tgt/LANG_LINKER_LAUNCHER.rst
new file mode 100644
index 0000000..f6ca5ad
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/LANG_LINKER_LAUNCHER.rst
@@ -0,0 +1,16 @@
+<LANG>_LINKER_LAUNCHER
+----------------------
+
+.. versionadded:: 3.21
+
+This property is implemented only when ``<LANG>`` is ``C``, ``CXX``,
+``OBJC``, or ``OBJCXX``
+
+Specify a :ref:`semicolon-separated list <CMake Language Lists>` containing a
+command line for a linker launching tool. The :ref:`Makefile Generators` and the
+:generator:`Ninja` generator will run this tool and pass the linker and its
+arguments to the tool. This is useful for tools such as static analyzers.
+
+This property is initialized by the value of the
+:variable:`CMAKE_<LANG>_LINKER_LAUNCHER` variable if it is set when a target is
+created.
diff --git a/share/cmake-3.22/Help/prop_tgt/LANG_STANDARD.rst b/share/cmake-3.22/Help/prop_tgt/LANG_STANDARD.rst
new file mode 100644
index 0000000..bd377ec
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/LANG_STANDARD.rst
@@ -0,0 +1,26 @@
+<LANG>_STANDARD
+---------------
+
+The variations are:
+
+* :prop_tgt:`C_STANDARD`
+* :prop_tgt:`CXX_STANDARD`
+* :prop_tgt:`CUDA_STANDARD`
+* :prop_tgt:`HIP_STANDARD`
+* :prop_tgt:`OBJC_STANDARD`
+* :prop_tgt:`OBJCXX_STANDARD`
+
+These properties specify language standard versions which are requested. When a
+newer standard is specified than is supported by the compiler, then it will
+fallback to the latest supported standard. This "decay" behavior may be
+controlled with the :prop_tgt:`<LANG>_STANDARD_REQUIRED` target property.
+
+These properties are initialized by the value of the
+:variable:`CMAKE_<LANG>_STANDARD` variable if it is set when a target is
+created.
+
+For supported values and CMake versions see the respective pages.
+To control compiler-specific extensions see :prop_tgt:`<LANG>_EXTENSIONS`.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
diff --git a/share/cmake-3.22/Help/prop_tgt/LANG_STANDARD_REQUIRED.rst b/share/cmake-3.22/Help/prop_tgt/LANG_STANDARD_REQUIRED.rst
new file mode 100644
index 0000000..56ecef8
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/LANG_STANDARD_REQUIRED.rst
@@ -0,0 +1,26 @@
+<LANG>_STANDARD_REQUIRED
+------------------------
+
+The variations are:
+
+* :prop_tgt:`C_STANDARD_REQUIRED`
+* :prop_tgt:`CXX_STANDARD_REQUIRED`
+* :prop_tgt:`CUDA_STANDARD_REQUIRED`
+* :prop_tgt:`HIP_STANDARD_REQUIRED`
+* :prop_tgt:`OBJC_STANDARD_REQUIRED`
+* :prop_tgt:`OBJCXX_STANDARD_REQUIRED`
+
+These properties specify whether the value of :prop_tgt:`<LANG>_STANDARD` is a
+requirement. When ``OFF`` or unset, the :prop_tgt:`<LANG>_STANDARD` target
+property is treated as optional and may "decay" to a previous standard if the
+requested is not available.
+
+These properties are initialized by the value of the
+:variable:`CMAKE_<LANG>_STANDARD_REQUIRED` variable if it is set when a target
+is created.
+
+For supported CMake versions see the respective pages.
+To control language standard versions see :prop_tgt:`<LANG>_STANDARD`.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
diff --git a/share/cmake-3.18/Help/prop_tgt/LANG_VISIBILITY_PRESET.rst b/share/cmake-3.22/Help/prop_tgt/LANG_VISIBILITY_PRESET.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/LANG_VISIBILITY_PRESET.rst
rename to share/cmake-3.22/Help/prop_tgt/LANG_VISIBILITY_PRESET.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/LIBRARY_OUTPUT_DIRECTORY.rst b/share/cmake-3.22/Help/prop_tgt/LIBRARY_OUTPUT_DIRECTORY.rst
new file mode 100644
index 0000000..9fbe904
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/LIBRARY_OUTPUT_DIRECTORY.rst
@@ -0,0 +1,9 @@
+LIBRARY_OUTPUT_DIRECTORY
+------------------------
+
+.. |XXX| replace:: :ref:`LIBRARY <Library Output Artifacts>`
+.. |xxx| replace:: library
+.. |CMAKE_XXX_OUTPUT_DIRECTORY| replace:: :variable:`CMAKE_LIBRARY_OUTPUT_DIRECTORY`
+.. include:: XXX_OUTPUT_DIRECTORY.txt
+
+See also the :prop_tgt:`LIBRARY_OUTPUT_DIRECTORY_<CONFIG>` target property.
diff --git a/share/cmake-3.18/Help/prop_tgt/LIBRARY_OUTPUT_DIRECTORY_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/LIBRARY_OUTPUT_DIRECTORY_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/LIBRARY_OUTPUT_DIRECTORY_CONFIG.rst
rename to share/cmake-3.22/Help/prop_tgt/LIBRARY_OUTPUT_DIRECTORY_CONFIG.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/LIBRARY_OUTPUT_NAME.rst b/share/cmake-3.22/Help/prop_tgt/LIBRARY_OUTPUT_NAME.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/LIBRARY_OUTPUT_NAME.rst
rename to share/cmake-3.22/Help/prop_tgt/LIBRARY_OUTPUT_NAME.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/LIBRARY_OUTPUT_NAME_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/LIBRARY_OUTPUT_NAME_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/LIBRARY_OUTPUT_NAME_CONFIG.rst
rename to share/cmake-3.22/Help/prop_tgt/LIBRARY_OUTPUT_NAME_CONFIG.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/LINKER_LANGUAGE.rst b/share/cmake-3.22/Help/prop_tgt/LINKER_LANGUAGE.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/LINKER_LANGUAGE.rst
rename to share/cmake-3.22/Help/prop_tgt/LINKER_LANGUAGE.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/LINK_DEPENDS.rst b/share/cmake-3.22/Help/prop_tgt/LINK_DEPENDS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/LINK_DEPENDS.rst
rename to share/cmake-3.22/Help/prop_tgt/LINK_DEPENDS.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/LINK_DEPENDS_NO_SHARED.rst b/share/cmake-3.22/Help/prop_tgt/LINK_DEPENDS_NO_SHARED.rst
new file mode 100644
index 0000000..dc2dc9e
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/LINK_DEPENDS_NO_SHARED.rst
@@ -0,0 +1,15 @@
+LINK_DEPENDS_NO_SHARED
+----------------------
+
+Do not depend on linked shared library files.
+
+Set this property to true to tell CMake generators not to add
+file-level dependencies on the shared library files linked by this
+target.  Modification to the shared libraries will not be sufficient
+to re-link this target.  Logical target-level dependencies will not be
+affected so the linked shared libraries will still be brought up to
+date before this target is built.
+
+This property is initialized by the value of the
+:variable:`CMAKE_LINK_DEPENDS_NO_SHARED` variable if it is set when a
+target is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/LINK_DIRECTORIES.rst b/share/cmake-3.22/Help/prop_tgt/LINK_DIRECTORIES.rst
new file mode 100644
index 0000000..67be494
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/LINK_DIRECTORIES.rst
@@ -0,0 +1,20 @@
+LINK_DIRECTORIES
+----------------
+
+.. versionadded:: 3.13
+
+List of directories to use for the link step of shared library, module
+and executable targets.
+
+This property holds a :ref:`semicolon-separated list <CMake Language Lists>` of directories
+specified so far for its target.  Use the :command:`target_link_directories`
+command to append more search directories.
+
+This property is initialized by the :prop_dir:`LINK_DIRECTORIES` directory
+property when a target is created, and is used by the generators to set
+the search directories for the linker.
+
+Contents of ``LINK_DIRECTORIES`` may use "generator expressions" with the
+syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)` manual
+for available expressions.  See the :manual:`cmake-buildsystem(7)` manual
+for more on defining buildsystem properties.
diff --git a/share/cmake-3.18/Help/prop_tgt/LINK_FLAGS.rst b/share/cmake-3.22/Help/prop_tgt/LINK_FLAGS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/LINK_FLAGS.rst
rename to share/cmake-3.22/Help/prop_tgt/LINK_FLAGS.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/LINK_FLAGS_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/LINK_FLAGS_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/LINK_FLAGS_CONFIG.rst
rename to share/cmake-3.22/Help/prop_tgt/LINK_FLAGS_CONFIG.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/LINK_INTERFACE_LIBRARIES.rst b/share/cmake-3.22/Help/prop_tgt/LINK_INTERFACE_LIBRARIES.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/LINK_INTERFACE_LIBRARIES.rst
rename to share/cmake-3.22/Help/prop_tgt/LINK_INTERFACE_LIBRARIES.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/LINK_INTERFACE_LIBRARIES_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/LINK_INTERFACE_LIBRARIES_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/LINK_INTERFACE_LIBRARIES_CONFIG.rst
rename to share/cmake-3.22/Help/prop_tgt/LINK_INTERFACE_LIBRARIES_CONFIG.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/LINK_INTERFACE_MULTIPLICITY.rst b/share/cmake-3.22/Help/prop_tgt/LINK_INTERFACE_MULTIPLICITY.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/LINK_INTERFACE_MULTIPLICITY.rst
rename to share/cmake-3.22/Help/prop_tgt/LINK_INTERFACE_MULTIPLICITY.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/LINK_INTERFACE_MULTIPLICITY_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/LINK_INTERFACE_MULTIPLICITY_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/LINK_INTERFACE_MULTIPLICITY_CONFIG.rst
rename to share/cmake-3.22/Help/prop_tgt/LINK_INTERFACE_MULTIPLICITY_CONFIG.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/LINK_LIBRARIES.rst b/share/cmake-3.22/Help/prop_tgt/LINK_LIBRARIES.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/LINK_LIBRARIES.rst
rename to share/cmake-3.22/Help/prop_tgt/LINK_LIBRARIES.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/LINK_LIBRARIES_INDIRECTION.txt b/share/cmake-3.22/Help/prop_tgt/LINK_LIBRARIES_INDIRECTION.txt
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/LINK_LIBRARIES_INDIRECTION.txt
rename to share/cmake-3.22/Help/prop_tgt/LINK_LIBRARIES_INDIRECTION.txt
diff --git a/share/cmake-3.22/Help/prop_tgt/LINK_OPTIONS.rst b/share/cmake-3.22/Help/prop_tgt/LINK_OPTIONS.rst
new file mode 100644
index 0000000..27eadf9
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/LINK_OPTIONS.rst
@@ -0,0 +1,36 @@
+LINK_OPTIONS
+------------
+
+.. versionadded:: 3.13
+
+List of options to use for the link step of shared library, module
+and executable targets as well as the device link step. Targets that are static
+libraries need to use the :prop_tgt:`STATIC_LIBRARY_OPTIONS` target property.
+
+These options are used for both normal linking and device linking
+(see policy :policy:`CMP0105`). To control link options for normal and device
+link steps, ``$<HOST_LINK>`` and ``$<DEVICE_LINK>``
+:manual:`generator expressions <cmake-generator-expressions(7)>` can be used.
+
+This property holds a :ref:`semicolon-separated list <CMake Language Lists>` of
+options specified so far for its target.  Use the :command:`target_link_options`
+command to append more options.
+
+This property is initialized by the :prop_dir:`LINK_OPTIONS` directory
+property when a target is created, and is used by the generators to set
+the options for the compiler.
+
+Contents of ``LINK_OPTIONS`` may use "generator expressions" with the
+syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)` manual
+for available expressions.  See the :manual:`cmake-buildsystem(7)` manual
+for more on defining buildsystem properties.
+
+.. note::
+
+  This property must be used in preference to :prop_tgt:`LINK_FLAGS` property.
+
+.. include:: ../command/DEVICE_LINK_OPTIONS.txt
+
+.. include:: ../command/OPTIONS_SHELL.txt
+
+.. include:: ../command/LINK_OPTIONS_LINKER.txt
diff --git a/share/cmake-3.18/Help/prop_tgt/LINK_SEARCH_END_STATIC.rst b/share/cmake-3.22/Help/prop_tgt/LINK_SEARCH_END_STATIC.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/LINK_SEARCH_END_STATIC.rst
rename to share/cmake-3.22/Help/prop_tgt/LINK_SEARCH_END_STATIC.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/LINK_SEARCH_START_STATIC.rst b/share/cmake-3.22/Help/prop_tgt/LINK_SEARCH_START_STATIC.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/LINK_SEARCH_START_STATIC.rst
rename to share/cmake-3.22/Help/prop_tgt/LINK_SEARCH_START_STATIC.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/LINK_WHAT_YOU_USE.rst b/share/cmake-3.22/Help/prop_tgt/LINK_WHAT_YOU_USE.rst
new file mode 100644
index 0000000..d6de0d4
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/LINK_WHAT_YOU_USE.rst
@@ -0,0 +1,23 @@
+LINK_WHAT_YOU_USE
+-----------------
+
+.. versionadded:: 3.7
+
+This is a boolean option that, when set to ``TRUE``, will automatically run
+contents of variable :variable:`CMAKE_LINK_WHAT_YOU_USE_CHECK` on the target
+after it is linked. In addition, the linker flag specified by variable
+:variable:`CMAKE_<LANG>_LINK_WHAT_YOU_USE_FLAG`  will be passed to the target
+with the link command so that all libraries specified on the command line will
+be linked into the target. This will result in the link producing a list of
+libraries that provide no symbols used by this target but are being linked to
+it.
+
+.. note::
+
+  For now, it is only supported for ``ELF`` platforms and is only applicable to
+  executable and shared or module library targets. This property will be
+  ignored for any other targets and configurations.
+
+This property is initialized by the value of
+the :variable:`CMAKE_LINK_WHAT_YOU_USE` variable if it is set
+when a target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/LOCATION.rst b/share/cmake-3.22/Help/prop_tgt/LOCATION.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/LOCATION.rst
rename to share/cmake-3.22/Help/prop_tgt/LOCATION.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/LOCATION_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/LOCATION_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/LOCATION_CONFIG.rst
rename to share/cmake-3.22/Help/prop_tgt/LOCATION_CONFIG.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/MACHO_COMPATIBILITY_VERSION.rst b/share/cmake-3.22/Help/prop_tgt/MACHO_COMPATIBILITY_VERSION.rst
new file mode 100644
index 0000000..a24b255
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/MACHO_COMPATIBILITY_VERSION.rst
@@ -0,0 +1,27 @@
+MACHO_COMPATIBILITY_VERSION
+---------------------------
+
+.. versionadded:: 3.17
+
+What compatibility version number is this target for Mach-O binaries.
+
+For shared libraries on Mach-O systems (e.g. macOS, iOS)
+the ``MACHO_COMPATIBILITY_VERSION`` property corresponds to the
+*compatibility version* and :prop_tgt:`MACHO_CURRENT_VERSION` corresponds to
+the *current version*.  These are both embedded in the shared library binary
+and can be checked with the ``otool -L <binary>`` command.
+
+It should be noted that the :prop_tgt:`MACHO_CURRENT_VERSION` and
+``MACHO_COMPATIBILITY_VERSION`` properties do not affect the file
+names or version-related symlinks that CMake generates for the library.
+The :prop_tgt:`VERSION` and :prop_tgt:`SOVERSION` target properties still
+control the file and symlink names.  The ``install_name`` is also still
+controlled by :prop_tgt:`SOVERSION`.
+
+When :prop_tgt:`MACHO_CURRENT_VERSION` and ``MACHO_COMPATIBILITY_VERSION``
+are not given, :prop_tgt:`VERSION` and :prop_tgt:`SOVERSION` are used for
+the version details to be embedded in the binaries respectively.
+The :prop_tgt:`MACHO_CURRENT_VERSION` and ``MACHO_COMPATIBILITY_VERSION``
+properties only need to be given if the project needs to decouple the file
+and symlink naming from the version details embedded in the binaries
+(e.g. to match libtool conventions).
diff --git a/share/cmake-3.22/Help/prop_tgt/MACHO_CURRENT_VERSION.rst b/share/cmake-3.22/Help/prop_tgt/MACHO_CURRENT_VERSION.rst
new file mode 100644
index 0000000..530f79b
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/MACHO_CURRENT_VERSION.rst
@@ -0,0 +1,27 @@
+MACHO_CURRENT_VERSION
+---------------------
+
+.. versionadded:: 3.17
+
+What current version number is this target for Mach-O binaries.
+
+For shared libraries on Mach-O systems (e.g. macOS, iOS)
+the :prop_tgt:`MACHO_COMPATIBILITY_VERSION` property corresponds to the
+*compatibility version* and ``MACHO_CURRENT_VERSION`` corresponds to the
+*current version*.  These are both embedded in the shared library binary
+and can be checked with the ``otool -L <binary>`` command.
+
+It should be noted that the ``MACHO_CURRENT_VERSION`` and
+:prop_tgt:`MACHO_COMPATIBILITY_VERSION` properties do not affect the file
+names or version-related symlinks that CMake generates for the library.
+The :prop_tgt:`VERSION` and :prop_tgt:`SOVERSION` target properties still
+control the file and symlink names.  The ``install_name`` is also still
+controlled by :prop_tgt:`SOVERSION`.
+
+When ``MACHO_CURRENT_VERSION`` and :prop_tgt:`MACHO_COMPATIBILITY_VERSION`
+are not given, :prop_tgt:`VERSION` and :prop_tgt:`SOVERSION` are used for
+the version details to be embedded in the binaries respectively.
+The ``MACHO_CURRENT_VERSION`` and :prop_tgt:`MACHO_COMPATIBILITY_VERSION`
+properties only need to be given if the project needs to decouple the file
+and symlink naming from the version details embedded in the binaries
+(e.g. to match libtool conventions).
diff --git a/share/cmake-3.18/Help/prop_tgt/MACOSX_BUNDLE.rst b/share/cmake-3.22/Help/prop_tgt/MACOSX_BUNDLE.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/MACOSX_BUNDLE.rst
rename to share/cmake-3.22/Help/prop_tgt/MACOSX_BUNDLE.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/MACOSX_BUNDLE_INFO_PLIST.rst b/share/cmake-3.22/Help/prop_tgt/MACOSX_BUNDLE_INFO_PLIST.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/MACOSX_BUNDLE_INFO_PLIST.rst
rename to share/cmake-3.22/Help/prop_tgt/MACOSX_BUNDLE_INFO_PLIST.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/MACOSX_FRAMEWORK_INFO_PLIST.rst b/share/cmake-3.22/Help/prop_tgt/MACOSX_FRAMEWORK_INFO_PLIST.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/MACOSX_FRAMEWORK_INFO_PLIST.rst
rename to share/cmake-3.22/Help/prop_tgt/MACOSX_FRAMEWORK_INFO_PLIST.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/MACOSX_RPATH.rst b/share/cmake-3.22/Help/prop_tgt/MACOSX_RPATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/MACOSX_RPATH.rst
rename to share/cmake-3.22/Help/prop_tgt/MACOSX_RPATH.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/MANUALLY_ADDED_DEPENDENCIES.rst b/share/cmake-3.22/Help/prop_tgt/MANUALLY_ADDED_DEPENDENCIES.rst
new file mode 100644
index 0000000..72871b3
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/MANUALLY_ADDED_DEPENDENCIES.rst
@@ -0,0 +1,10 @@
+MANUALLY_ADDED_DEPENDENCIES
+---------------------------
+
+.. versionadded:: 3.8
+
+Get manually added dependencies to other top-level targets.
+
+This read-only property can be used to query all dependencies that
+were added for this target with the :command:`add_dependencies`
+command.
diff --git a/share/cmake-3.18/Help/prop_tgt/MAP_IMPORTED_CONFIG_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/MAP_IMPORTED_CONFIG_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/MAP_IMPORTED_CONFIG_CONFIG.rst
rename to share/cmake-3.22/Help/prop_tgt/MAP_IMPORTED_CONFIG_CONFIG.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/MSVC_RUNTIME_LIBRARY-VALUES.txt b/share/cmake-3.22/Help/prop_tgt/MSVC_RUNTIME_LIBRARY-VALUES.txt
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/MSVC_RUNTIME_LIBRARY-VALUES.txt
rename to share/cmake-3.22/Help/prop_tgt/MSVC_RUNTIME_LIBRARY-VALUES.txt
diff --git a/share/cmake-3.22/Help/prop_tgt/MSVC_RUNTIME_LIBRARY.rst b/share/cmake-3.22/Help/prop_tgt/MSVC_RUNTIME_LIBRARY.rst
new file mode 100644
index 0000000..9b978b2
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/MSVC_RUNTIME_LIBRARY.rst
@@ -0,0 +1,31 @@
+MSVC_RUNTIME_LIBRARY
+--------------------
+
+.. versionadded:: 3.15
+
+Select the MSVC runtime library for use by compilers targeting the MSVC ABI.
+
+The allowed values are:
+
+.. include:: MSVC_RUNTIME_LIBRARY-VALUES.txt
+
+Use :manual:`generator expressions <cmake-generator-expressions(7)>` to
+support per-configuration specification.  For example, the code:
+
+.. code-block:: cmake
+
+  add_executable(foo foo.c)
+  set_property(TARGET foo PROPERTY
+    MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
+
+selects for the target ``foo`` a multi-threaded statically-linked runtime
+library with or without debug information depending on the configuration.
+
+If this property is not set then CMake uses the default value
+``MultiThreaded$<$<CONFIG:Debug>:Debug>DLL`` to select a MSVC runtime library.
+
+.. note::
+
+  This property has effect only when policy :policy:`CMP0091` is set to ``NEW``
+  prior to the first :command:`project` or :command:`enable_language` command
+  that enables a language using a compiler targeting the MSVC ABI.
diff --git a/share/cmake-3.18/Help/prop_tgt/NAME.rst b/share/cmake-3.22/Help/prop_tgt/NAME.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/NAME.rst
rename to share/cmake-3.22/Help/prop_tgt/NAME.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/NO_SONAME.rst b/share/cmake-3.22/Help/prop_tgt/NO_SONAME.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/NO_SONAME.rst
rename to share/cmake-3.22/Help/prop_tgt/NO_SONAME.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/NO_SYSTEM_FROM_IMPORTED.rst b/share/cmake-3.22/Help/prop_tgt/NO_SYSTEM_FROM_IMPORTED.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/NO_SYSTEM_FROM_IMPORTED.rst
rename to share/cmake-3.22/Help/prop_tgt/NO_SYSTEM_FROM_IMPORTED.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/OBJCXX_EXTENSIONS.rst b/share/cmake-3.22/Help/prop_tgt/OBJCXX_EXTENSIONS.rst
new file mode 100644
index 0000000..2a15dec
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/OBJCXX_EXTENSIONS.rst
@@ -0,0 +1,24 @@
+OBJCXX_EXTENSIONS
+-----------------
+
+.. versionadded:: 3.16
+
+Boolean specifying whether compiler specific extensions are requested.
+
+This property specifies whether compiler specific extensions should be
+used.  For some compilers, this results in adding a flag such
+as ``-std=gnu++11`` instead of ``-std=c++11`` to the compile line.  This
+property is ``ON`` by default. The basic ObjC++ standard level is
+controlled by the :prop_tgt:`OBJCXX_STANDARD` target property.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
+
+If the property is not set, and the project has set the :prop_tgt:`CXX_EXTENSIONS`,
+the value of :prop_tgt:`CXX_EXTENSIONS` is set for :prop_tgt:`OBJCXX_EXTENSIONS`.
+
+This property is initialized by the value of
+the :variable:`CMAKE_OBJCXX_EXTENSIONS` variable if set when a target is
+created and otherwise by the value of
+:variable:`CMAKE_OBJCXX_EXTENSIONS_DEFAULT <CMAKE_<LANG>_EXTENSIONS_DEFAULT>`
+(see :policy:`CMP0128`).
diff --git a/share/cmake-3.22/Help/prop_tgt/OBJCXX_STANDARD.rst b/share/cmake-3.22/Help/prop_tgt/OBJCXX_STANDARD.rst
new file mode 100644
index 0000000..654e687
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/OBJCXX_STANDARD.rst
@@ -0,0 +1,57 @@
+OBJCXX_STANDARD
+---------------
+
+.. versionadded:: 3.16
+
+The ObjC++ standard whose features are requested to build this target.
+
+This property specifies the ObjC++ standard whose features are requested
+to build this target.  For some compilers, this results in adding a
+flag such as ``-std=gnu++11`` to the compile line.
+
+Supported values are:
+
+``98``
+  Objective C++98
+
+``11``
+  Objective C++11
+
+``14``
+  Objective C++14
+
+``17``
+  Objective C++17
+
+``20``
+  Objective C++20
+
+``23``
+  .. versionadded:: 3.20
+
+  Objective C++23
+
+If the value requested does not result in a compile flag being added for
+the compiler in use, a previous standard flag will be added instead.  This
+means that using:
+
+.. code-block:: cmake
+
+  set_property(TARGET tgt PROPERTY OBJCXX_STANDARD 11)
+
+with a compiler which does not support ``-std=gnu++11`` or an equivalent
+flag will not result in an error or warning, but will instead add the
+``-std=gnu++98`` flag if supported.  This "decay" behavior may be controlled
+with the :prop_tgt:`OBJCXX_STANDARD_REQUIRED` target property.
+Additionally, the :prop_tgt:`OBJCXX_EXTENSIONS` target property may be used to
+control whether compiler-specific extensions are enabled on a per-target basis.
+
+If the property is not set, and the project has set the :prop_tgt:`CXX_STANDARD`,
+the value of :prop_tgt:`CXX_STANDARD` is set for :prop_tgt:`OBJCXX_STANDARD`.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
+
+This property is initialized by the value of
+the :variable:`CMAKE_OBJCXX_STANDARD` variable if it is set when a target
+is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/OBJCXX_STANDARD_REQUIRED.rst b/share/cmake-3.22/Help/prop_tgt/OBJCXX_STANDARD_REQUIRED.rst
new file mode 100644
index 0000000..3cee740
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/OBJCXX_STANDARD_REQUIRED.rst
@@ -0,0 +1,22 @@
+OBJCXX_STANDARD_REQUIRED
+------------------------
+
+.. versionadded:: 3.16
+
+Boolean describing whether the value of :prop_tgt:`OBJCXX_STANDARD` is a requirement.
+
+If this property is set to ``ON``, then the value of the
+:prop_tgt:`OBJCXX_STANDARD` target property is treated as a requirement.  If this
+property is ``OFF`` or unset, the :prop_tgt:`OBJCXX_STANDARD` target property is
+treated as optional and may "decay" to a previous standard if the requested is
+not available.
+
+If the property is not set, and the project has set the :prop_tgt:`CXX_STANDARD_REQUIRED`,
+the value of :prop_tgt:`CXX_STANDARD_REQUIRED` is set for :prop_tgt:`OBJCXX_STANDARD_REQUIRED`.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
+
+This property is initialized by the value of
+the :variable:`CMAKE_OBJCXX_STANDARD_REQUIRED` variable if it is set when a
+target is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/OBJC_EXTENSIONS.rst b/share/cmake-3.22/Help/prop_tgt/OBJC_EXTENSIONS.rst
new file mode 100644
index 0000000..cd72e5f
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/OBJC_EXTENSIONS.rst
@@ -0,0 +1,24 @@
+OBJC_EXTENSIONS
+---------------
+
+.. versionadded:: 3.16
+
+Boolean specifying whether compiler specific extensions are requested.
+
+This property specifies whether compiler specific extensions should be
+used.  For some compilers, this results in adding a flag such
+as ``-std=gnu11`` instead of ``-std=c11`` to the compile line.  This
+property is ``ON`` by default. The basic OBJC standard level is
+controlled by the :prop_tgt:`OBJC_STANDARD` target property.
+
+If the property is not set, and the project has set the :prop_tgt:`C_EXTENSIONS`,
+the value of :prop_tgt:`C_EXTENSIONS` is set for :prop_tgt:`OBJC_EXTENSIONS`.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
+
+This property is initialized by the value of
+the :variable:`CMAKE_OBJC_EXTENSIONS` variable if set when a target is created
+and otherwise by the value of
+:variable:`CMAKE_OBJC_EXTENSIONS_DEFAULT <CMAKE_<LANG>_EXTENSIONS_DEFAULT>`
+(see :policy:`CMP0128`).
diff --git a/share/cmake-3.22/Help/prop_tgt/OBJC_STANDARD.rst b/share/cmake-3.22/Help/prop_tgt/OBJC_STANDARD.rst
new file mode 100644
index 0000000..2d27bcf
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/OBJC_STANDARD.rst
@@ -0,0 +1,46 @@
+OBJC_STANDARD
+-------------
+
+.. versionadded:: 3.16
+
+The OBJC standard whose features are requested to build this target.
+
+This property specifies the OBJC standard whose features are requested
+to build this target.  For some compilers, this results in adding a
+flag such as ``-std=gnu11`` to the compile line.
+
+Supported values are:
+
+``90``
+  Objective C89/C90
+
+``99``
+  Objective C99
+
+``11``
+  Objective C11
+
+If the value requested does not result in a compile flag being added for
+the compiler in use, a previous standard flag will be added instead.  This
+means that using:
+
+.. code-block:: cmake
+
+  set_property(TARGET tgt PROPERTY OBJC_STANDARD 11)
+
+with a compiler which does not support ``-std=gnu11`` or an equivalent
+flag will not result in an error or warning, but will instead add the
+``-std=gnu99`` or ``-std=gnu90`` flag if supported.  This "decay" behavior may
+be controlled with the :prop_tgt:`OBJC_STANDARD_REQUIRED` target property.
+Additionally, the :prop_tgt:`OBJC_EXTENSIONS` target property may be used to
+control whether compiler-specific extensions are enabled on a per-target basis.
+
+If the property is not set, and the project has set the :prop_tgt:`C_STANDARD`,
+the value of :prop_tgt:`C_STANDARD` is set for :prop_tgt:`OBJC_STANDARD`.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
+
+This property is initialized by the value of
+the :variable:`CMAKE_OBJC_STANDARD` variable if it is set when a target
+is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/OBJC_STANDARD_REQUIRED.rst b/share/cmake-3.22/Help/prop_tgt/OBJC_STANDARD_REQUIRED.rst
new file mode 100644
index 0000000..11547c8
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/OBJC_STANDARD_REQUIRED.rst
@@ -0,0 +1,22 @@
+OBJC_STANDARD_REQUIRED
+----------------------
+
+.. versionadded:: 3.16
+
+Boolean describing whether the value of :prop_tgt:`OBJC_STANDARD` is a requirement.
+
+If this property is set to ``ON``, then the value of the
+:prop_tgt:`OBJC_STANDARD` target property is treated as a requirement.  If this
+property is ``OFF`` or unset, the :prop_tgt:`OBJC_STANDARD` target property is
+treated as optional and may "decay" to a previous standard if the requested is
+not available.
+
+If the property is not set, and the project has set the :prop_tgt:`C_STANDARD_REQUIRED`,
+the value of :prop_tgt:`C_STANDARD_REQUIRED` is set for :prop_tgt:`OBJC_STANDARD_REQUIRED`.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
+
+This property is initialized by the value of
+the :variable:`CMAKE_OBJC_STANDARD_REQUIRED` variable if it is set when a
+target is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/OPTIMIZE_DEPENDENCIES.rst b/share/cmake-3.22/Help/prop_tgt/OPTIMIZE_DEPENDENCIES.rst
new file mode 100644
index 0000000..d17251f
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/OPTIMIZE_DEPENDENCIES.rst
@@ -0,0 +1,43 @@
+OPTIMIZE_DEPENDENCIES
+---------------------
+
+.. versionadded:: 3.19
+
+Activates dependency optimization of static and object libraries.
+
+When this property is set to true, some dependencies for a static or object
+library may be removed at generation time if they are not necessary to build
+the library, since static and object libraries don't actually link against
+anything.
+
+If a static or object library has dependency optimization enabled, it first
+discards all dependencies. Then, it looks through all of the direct and
+indirect dependencies that it initially had, and adds them back if they meet
+any of the following criteria:
+
+* The dependency was added to the library by :command:`add_dependencies`.
+* The dependency was added to the library through a source file in the library
+  generated by a custom command that uses the dependency.
+* The dependency has any ``PRE_BUILD``, ``PRE_LINK``, or ``POST_BUILD`` custom
+  commands associated with it.
+* The dependency contains any source files that were generated by a custom
+  command.
+* The dependency contains any languages which produce side effects that are
+  relevant to the library. Currently, all languages except C, C++, Objective-C,
+  Objective-C++, assembly, and CUDA are assumed to produce side effects.
+  However, side effects from one language are assumed not to be relevant to
+  another (for example, a Fortran library is assumed to not have any side
+  effects that are relevant for a Swift library.)
+
+As an example, assume you have a static Fortran library which depends on a
+static C library, which in turn depends on a static Fortran library. The
+top-level Fortran library has optimization enabled, but the middle C library
+does not. If you build the top Fortran library, the bottom Fortran library will
+also build, but not the middle C library, since the C library does not have any
+side effects that are relevant for the Fortran library. However, if you build
+the middle C library, the bottom Fortran library will also build, even though
+it does not have any side effects that are relevant to the C library, since the
+C library does not have optimization enabled.
+
+This property is initialized by the value of the
+:variable:`CMAKE_OPTIMIZE_DEPENDENCIES` variable when the target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/OSX_ARCHITECTURES.rst b/share/cmake-3.22/Help/prop_tgt/OSX_ARCHITECTURES.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/OSX_ARCHITECTURES.rst
rename to share/cmake-3.22/Help/prop_tgt/OSX_ARCHITECTURES.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/OSX_ARCHITECTURES_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/OSX_ARCHITECTURES_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/OSX_ARCHITECTURES_CONFIG.rst
rename to share/cmake-3.22/Help/prop_tgt/OSX_ARCHITECTURES_CONFIG.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/OUTPUT_NAME.rst b/share/cmake-3.22/Help/prop_tgt/OUTPUT_NAME.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/OUTPUT_NAME.rst
rename to share/cmake-3.22/Help/prop_tgt/OUTPUT_NAME.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/OUTPUT_NAME_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/OUTPUT_NAME_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/OUTPUT_NAME_CONFIG.rst
rename to share/cmake-3.22/Help/prop_tgt/OUTPUT_NAME_CONFIG.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/PCH_INSTANTIATE_TEMPLATES.rst b/share/cmake-3.22/Help/prop_tgt/PCH_INSTANTIATE_TEMPLATES.rst
new file mode 100644
index 0000000..7c1af2a
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/PCH_INSTANTIATE_TEMPLATES.rst
@@ -0,0 +1,13 @@
+PCH_INSTANTIATE_TEMPLATES
+-------------------------
+
+.. versionadded:: 3.19
+
+When this property is set to true, the precompiled header compiler options
+will contain a flag to instantiate templates during the generation of the PCH
+if supported. This can significantly improve compile times. Supported in Clang
+since version 11.
+
+This property is initialized by the value of the
+:variable:`CMAKE_PCH_INSTANTIATE_TEMPLATES` variable if it is set when a target
+is created.  If that variable is not set, the property defaults to ``ON``.
diff --git a/share/cmake-3.22/Help/prop_tgt/PCH_WARN_INVALID.rst b/share/cmake-3.22/Help/prop_tgt/PCH_WARN_INVALID.rst
new file mode 100644
index 0000000..2d5ec55
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/PCH_WARN_INVALID.rst
@@ -0,0 +1,12 @@
+PCH_WARN_INVALID
+----------------
+
+.. versionadded:: 3.18
+
+When this property is set to true, the precompile header compiler options
+will contain a compiler flag which should warn about invalid precompiled
+headers e.g. ``-Winvalid-pch`` for GNU compiler.
+
+This property is initialized by the value of the
+:variable:`CMAKE_PCH_WARN_INVALID` variable if it is set when a target is
+created.  If that variable is not set, the property defaults to ``ON``.
diff --git a/share/cmake-3.18/Help/prop_tgt/PDB_NAME.rst b/share/cmake-3.22/Help/prop_tgt/PDB_NAME.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/PDB_NAME.rst
rename to share/cmake-3.22/Help/prop_tgt/PDB_NAME.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/PDB_NAME_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/PDB_NAME_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/PDB_NAME_CONFIG.rst
rename to share/cmake-3.22/Help/prop_tgt/PDB_NAME_CONFIG.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/PDB_NOTE.txt b/share/cmake-3.22/Help/prop_tgt/PDB_NOTE.txt
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/PDB_NOTE.txt
rename to share/cmake-3.22/Help/prop_tgt/PDB_NOTE.txt
diff --git a/share/cmake-3.18/Help/prop_tgt/PDB_OUTPUT_DIRECTORY.rst b/share/cmake-3.22/Help/prop_tgt/PDB_OUTPUT_DIRECTORY.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/PDB_OUTPUT_DIRECTORY.rst
rename to share/cmake-3.22/Help/prop_tgt/PDB_OUTPUT_DIRECTORY.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/PDB_OUTPUT_DIRECTORY_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/PDB_OUTPUT_DIRECTORY_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/PDB_OUTPUT_DIRECTORY_CONFIG.rst
rename to share/cmake-3.22/Help/prop_tgt/PDB_OUTPUT_DIRECTORY_CONFIG.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/POSITION_INDEPENDENT_CODE.rst b/share/cmake-3.22/Help/prop_tgt/POSITION_INDEPENDENT_CODE.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/POSITION_INDEPENDENT_CODE.rst
rename to share/cmake-3.22/Help/prop_tgt/POSITION_INDEPENDENT_CODE.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/POST_INSTALL_SCRIPT.rst b/share/cmake-3.22/Help/prop_tgt/POST_INSTALL_SCRIPT.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/POST_INSTALL_SCRIPT.rst
rename to share/cmake-3.22/Help/prop_tgt/POST_INSTALL_SCRIPT.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/PRECOMPILE_HEADERS.rst b/share/cmake-3.22/Help/prop_tgt/PRECOMPILE_HEADERS.rst
new file mode 100644
index 0000000..af27947
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/PRECOMPILE_HEADERS.rst
@@ -0,0 +1,14 @@
+PRECOMPILE_HEADERS
+------------------
+
+.. versionadded:: 3.16
+
+List of header files to precompile.
+
+This property holds a :ref:`semicolon-separated list <CMake Language Lists>`
+of header files to precompile specified so far for its target.
+Use the :command:`target_precompile_headers` command to append more header
+files.
+
+This property supports
+:manual:`generator expressions <cmake-generator-expressions(7)>`.
diff --git a/share/cmake-3.22/Help/prop_tgt/PRECOMPILE_HEADERS_REUSE_FROM.rst b/share/cmake-3.22/Help/prop_tgt/PRECOMPILE_HEADERS_REUSE_FROM.rst
new file mode 100644
index 0000000..6f5635b
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/PRECOMPILE_HEADERS_REUSE_FROM.rst
@@ -0,0 +1,9 @@
+PRECOMPILE_HEADERS_REUSE_FROM
+-----------------------------
+
+.. versionadded:: 3.16
+
+Target from which to reuse the precompiled headers build artifact.
+
+See the second signature of :command:`target_precompile_headers` command
+for more detailed information.
diff --git a/share/cmake-3.18/Help/prop_tgt/PREFIX.rst b/share/cmake-3.22/Help/prop_tgt/PREFIX.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/PREFIX.rst
rename to share/cmake-3.22/Help/prop_tgt/PREFIX.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/PRE_INSTALL_SCRIPT.rst b/share/cmake-3.22/Help/prop_tgt/PRE_INSTALL_SCRIPT.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/PRE_INSTALL_SCRIPT.rst
rename to share/cmake-3.22/Help/prop_tgt/PRE_INSTALL_SCRIPT.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/PRIVATE_HEADER.rst b/share/cmake-3.22/Help/prop_tgt/PRIVATE_HEADER.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/PRIVATE_HEADER.rst
rename to share/cmake-3.22/Help/prop_tgt/PRIVATE_HEADER.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/PROJECT_LABEL.rst b/share/cmake-3.22/Help/prop_tgt/PROJECT_LABEL.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/PROJECT_LABEL.rst
rename to share/cmake-3.22/Help/prop_tgt/PROJECT_LABEL.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/PUBLIC_HEADER.rst b/share/cmake-3.22/Help/prop_tgt/PUBLIC_HEADER.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/PUBLIC_HEADER.rst
rename to share/cmake-3.22/Help/prop_tgt/PUBLIC_HEADER.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/RESOURCE.rst b/share/cmake-3.22/Help/prop_tgt/RESOURCE.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/RESOURCE.rst
rename to share/cmake-3.22/Help/prop_tgt/RESOURCE.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/RULE_LAUNCH_COMPILE.rst b/share/cmake-3.22/Help/prop_tgt/RULE_LAUNCH_COMPILE.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/RULE_LAUNCH_COMPILE.rst
rename to share/cmake-3.22/Help/prop_tgt/RULE_LAUNCH_COMPILE.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/RULE_LAUNCH_CUSTOM.rst b/share/cmake-3.22/Help/prop_tgt/RULE_LAUNCH_CUSTOM.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/RULE_LAUNCH_CUSTOM.rst
rename to share/cmake-3.22/Help/prop_tgt/RULE_LAUNCH_CUSTOM.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/RULE_LAUNCH_LINK.rst b/share/cmake-3.22/Help/prop_tgt/RULE_LAUNCH_LINK.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/RULE_LAUNCH_LINK.rst
rename to share/cmake-3.22/Help/prop_tgt/RULE_LAUNCH_LINK.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/RUNTIME_OUTPUT_DIRECTORY.rst b/share/cmake-3.22/Help/prop_tgt/RUNTIME_OUTPUT_DIRECTORY.rst
new file mode 100644
index 0000000..3c37546
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/RUNTIME_OUTPUT_DIRECTORY.rst
@@ -0,0 +1,9 @@
+RUNTIME_OUTPUT_DIRECTORY
+------------------------
+
+.. |XXX| replace:: :ref:`RUNTIME <Runtime Output Artifacts>`
+.. |xxx| replace:: runtime
+.. |CMAKE_XXX_OUTPUT_DIRECTORY| replace:: :variable:`CMAKE_RUNTIME_OUTPUT_DIRECTORY`
+.. include:: XXX_OUTPUT_DIRECTORY.txt
+
+See also the :prop_tgt:`RUNTIME_OUTPUT_DIRECTORY_<CONFIG>` target property.
diff --git a/share/cmake-3.18/Help/prop_tgt/RUNTIME_OUTPUT_DIRECTORY_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/RUNTIME_OUTPUT_DIRECTORY_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/RUNTIME_OUTPUT_DIRECTORY_CONFIG.rst
rename to share/cmake-3.22/Help/prop_tgt/RUNTIME_OUTPUT_DIRECTORY_CONFIG.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/RUNTIME_OUTPUT_NAME.rst b/share/cmake-3.22/Help/prop_tgt/RUNTIME_OUTPUT_NAME.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/RUNTIME_OUTPUT_NAME.rst
rename to share/cmake-3.22/Help/prop_tgt/RUNTIME_OUTPUT_NAME.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/RUNTIME_OUTPUT_NAME_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/RUNTIME_OUTPUT_NAME_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/RUNTIME_OUTPUT_NAME_CONFIG.rst
rename to share/cmake-3.22/Help/prop_tgt/RUNTIME_OUTPUT_NAME_CONFIG.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/SKIP_BUILD_RPATH.rst b/share/cmake-3.22/Help/prop_tgt/SKIP_BUILD_RPATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/SKIP_BUILD_RPATH.rst
rename to share/cmake-3.22/Help/prop_tgt/SKIP_BUILD_RPATH.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/SOURCES.rst b/share/cmake-3.22/Help/prop_tgt/SOURCES.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/SOURCES.rst
rename to share/cmake-3.22/Help/prop_tgt/SOURCES.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/SOURCE_DIR.rst b/share/cmake-3.22/Help/prop_tgt/SOURCE_DIR.rst
new file mode 100644
index 0000000..78ce220
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/SOURCE_DIR.rst
@@ -0,0 +1,8 @@
+SOURCE_DIR
+----------
+
+.. versionadded:: 3.4
+
+This read-only property reports the value of the
+:variable:`CMAKE_CURRENT_SOURCE_DIR` variable in the directory in which
+the target was defined.
diff --git a/share/cmake-3.18/Help/prop_tgt/SOVERSION.rst b/share/cmake-3.22/Help/prop_tgt/SOVERSION.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/SOVERSION.rst
rename to share/cmake-3.22/Help/prop_tgt/SOVERSION.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/STATIC_LIBRARY_FLAGS.rst b/share/cmake-3.22/Help/prop_tgt/STATIC_LIBRARY_FLAGS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/STATIC_LIBRARY_FLAGS.rst
rename to share/cmake-3.22/Help/prop_tgt/STATIC_LIBRARY_FLAGS.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/STATIC_LIBRARY_FLAGS_CONFIG.rst b/share/cmake-3.22/Help/prop_tgt/STATIC_LIBRARY_FLAGS_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/STATIC_LIBRARY_FLAGS_CONFIG.rst
rename to share/cmake-3.22/Help/prop_tgt/STATIC_LIBRARY_FLAGS_CONFIG.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/STATIC_LIBRARY_OPTIONS.rst b/share/cmake-3.22/Help/prop_tgt/STATIC_LIBRARY_OPTIONS.rst
new file mode 100644
index 0000000..f5d9437
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/STATIC_LIBRARY_OPTIONS.rst
@@ -0,0 +1,24 @@
+STATIC_LIBRARY_OPTIONS
+----------------------
+
+.. versionadded:: 3.13
+
+Archiver (or MSVC librarian) flags for a static library target.
+Targets that are shared libraries, modules, or executables need to use
+the :prop_tgt:`LINK_OPTIONS` target property.
+
+This property holds a :ref:`semicolon-separated list <CMake Language Lists>` of options
+specified so far for its target.  Use :command:`set_target_properties` or
+:command:`set_property` commands to set its content.
+
+Contents of ``STATIC_LIBRARY_OPTIONS`` may use "generator expressions" with the
+syntax ``$<...>``.  See the :manual:`cmake-generator-expressions(7)` manual
+for available expressions.  See the :manual:`cmake-buildsystem(7)` manual
+for more on defining buildsystem properties.
+
+.. note::
+
+  This property must be used in preference to :prop_tgt:`STATIC_LIBRARY_FLAGS`
+  property.
+
+.. include:: ../command/OPTIONS_SHELL.txt
diff --git a/share/cmake-3.18/Help/prop_tgt/SUFFIX.rst b/share/cmake-3.22/Help/prop_tgt/SUFFIX.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/SUFFIX.rst
rename to share/cmake-3.22/Help/prop_tgt/SUFFIX.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/Swift_DEPENDENCIES_FILE.rst b/share/cmake-3.22/Help/prop_tgt/Swift_DEPENDENCIES_FILE.rst
new file mode 100644
index 0000000..0f944b6
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/Swift_DEPENDENCIES_FILE.rst
@@ -0,0 +1,7 @@
+Swift_DEPENDENCIES_FILE
+-----------------------
+
+.. versionadded:: 3.15
+
+This property sets the path for the Swift dependency file (swiftdep) for the
+target.  If one is not specified, it will default to ``<TARGET>.swiftdeps``.
diff --git a/share/cmake-3.22/Help/prop_tgt/Swift_LANGUAGE_VERSION.rst b/share/cmake-3.22/Help/prop_tgt/Swift_LANGUAGE_VERSION.rst
new file mode 100644
index 0000000..afc6b31
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/Swift_LANGUAGE_VERSION.rst
@@ -0,0 +1,8 @@
+Swift_LANGUAGE_VERSION
+----------------------
+
+.. versionadded:: 3.16
+
+This property sets the language version for the Swift sources in the target.  If
+one is not specified, it will default to ``<CMAKE_Swift_LANGUAGE_VERSION>`` if
+specified, otherwise it is the latest version supported by the compiler.
diff --git a/share/cmake-3.22/Help/prop_tgt/Swift_MODULE_DIRECTORY.rst b/share/cmake-3.22/Help/prop_tgt/Swift_MODULE_DIRECTORY.rst
new file mode 100644
index 0000000..619377a
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/Swift_MODULE_DIRECTORY.rst
@@ -0,0 +1,12 @@
+Swift_MODULE_DIRECTORY
+----------------------
+
+.. versionadded:: 3.15
+
+Specify output directory for Swift modules provided by the target.
+
+If the target contains Swift source files, this specifies the directory in which
+the modules will be placed.  When this property is not set, the modules will be
+placed in the build directory corresponding to the target's source directory.
+If the variable :variable:`CMAKE_Swift_MODULE_DIRECTORY` is set when a target is
+created its value is used to initialize this property.
diff --git a/share/cmake-3.22/Help/prop_tgt/Swift_MODULE_NAME.rst b/share/cmake-3.22/Help/prop_tgt/Swift_MODULE_NAME.rst
new file mode 100644
index 0000000..d941b54
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/Swift_MODULE_NAME.rst
@@ -0,0 +1,7 @@
+Swift_MODULE_NAME
+-----------------
+
+.. versionadded:: 3.15
+
+This property specifies the name of the Swift module.  It is defaulted to the
+name of the target.
diff --git a/share/cmake-3.18/Help/prop_tgt/TYPE.rst b/share/cmake-3.22/Help/prop_tgt/TYPE.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/TYPE.rst
rename to share/cmake-3.22/Help/prop_tgt/TYPE.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/UNITY_BUILD.rst b/share/cmake-3.22/Help/prop_tgt/UNITY_BUILD.rst
new file mode 100644
index 0000000..f827a20
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/UNITY_BUILD.rst
@@ -0,0 +1,87 @@
+UNITY_BUILD
+-----------
+
+.. versionadded:: 3.16
+
+When this property is set to true, the target source files will be combined
+into batches for faster compilation.  This is done by creating a (set of)
+unity sources which ``#include`` the original sources, then compiling these
+unity sources instead of the originals.  This is known as a *Unity* or *Jumbo*
+build.
+
+CMake provides different algorithms for selecting which sources are grouped
+together into a *bucket*. Algorithm selection is decided by the
+:prop_tgt:`UNITY_BUILD_MODE` target property, which has the following acceptable
+values:
+
+* ``BATCH``
+  When in this mode CMake determines which files are grouped together.
+  The :prop_tgt:`UNITY_BUILD_BATCH_SIZE` property controls the upper limit on
+  how many sources can be combined per unity source file.
+
+* ``GROUP``
+  When in this mode each target explicitly specifies how to group
+  source files. Each source file that has the same
+  :prop_sf:`UNITY_GROUP` value will be grouped together. Any sources
+  that don't have this property will be compiled individually. The
+  :prop_tgt:`UNITY_BUILD_BATCH_SIZE` property is ignored when using
+  this mode.
+
+If no explicit :prop_tgt:`UNITY_BUILD_MODE` has been specified, CMake will
+default to ``BATCH``.
+
+Unity builds are not currently supported for all languages.  CMake version
+|release| supports combining ``C`` and ``CXX`` source files.  For targets that
+mix source files from more than one language, CMake will separate the languages
+such that each generated unity source file only contains sources for a single
+language.
+
+This property is initialized by the value of the :variable:`CMAKE_UNITY_BUILD`
+variable when a target is created.
+
+.. note::
+
+  Projects should not directly set the ``UNITY_BUILD`` property or its
+  associated :variable:`CMAKE_UNITY_BUILD` variable to true.  Depending
+  on the capabilities of the build machine and compiler used, it might or
+  might not be appropriate to enable unity builds.  Therefore, this feature
+  should be under developer control, which would normally be through the
+  developer choosing whether or not to set the :variable:`CMAKE_UNITY_BUILD`
+  variable on the :manual:`cmake(1)` command line or some other equivalent
+  method.  However, it IS recommended to set the ``UNITY_BUILD`` target
+  property to false if it is known that enabling unity builds for the
+  target can lead to problems.
+
+ODR (One definition rule) errors
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+When multiple source files are included into one source file, as is done
+for unity builds, it can potentially lead to ODR errors.  CMake provides
+a number of measures to help address such problems:
+
+* Any source file that has a non-empty :prop_sf:`COMPILE_OPTIONS`,
+  :prop_sf:`COMPILE_DEFINITIONS`, :prop_sf:`COMPILE_FLAGS`, or
+  :prop_sf:`INCLUDE_DIRECTORIES` source property will not be combined
+  into a unity source.
+
+* Projects can prevent an individual source file from being combined into
+  a unity source by setting its :prop_sf:`SKIP_UNITY_BUILD_INCLUSION`
+  source property to true.  This can be a more effective way to prevent
+  problems with specific files than disabling unity builds for an entire
+  target.
+
+* Projects can set :prop_tgt:`UNITY_BUILD_UNIQUE_ID` to cause a valid
+  C-identifier to be generated which is unique per file in a unity
+  build.  This can be used to avoid problems with anonymous namespaces
+  in unity builds.
+
+* The :prop_tgt:`UNITY_BUILD_CODE_BEFORE_INCLUDE` and
+  :prop_tgt:`UNITY_BUILD_CODE_AFTER_INCLUDE` target properties can be used
+  to inject code into the unity source files before and after every
+  ``#include`` statement.
+
+* The order of source files added to the target via commands like
+  :command:`add_library`, :command:`add_executable` or
+  :command:`target_sources` will be preserved in the generated unity source
+  files.  This can be used to manually enforce a specific grouping based on
+  the :prop_tgt:`UNITY_BUILD_BATCH_SIZE` target property.
diff --git a/share/cmake-3.22/Help/prop_tgt/UNITY_BUILD_BATCH_SIZE.rst b/share/cmake-3.22/Help/prop_tgt/UNITY_BUILD_BATCH_SIZE.rst
new file mode 100644
index 0000000..3886ec9
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/UNITY_BUILD_BATCH_SIZE.rst
@@ -0,0 +1,25 @@
+UNITY_BUILD_BATCH_SIZE
+----------------------
+
+.. versionadded:: 3.16
+
+Specifies the maximum number of source files that can be combined into any one
+unity source file when unity builds are enabled by the :prop_tgt:`UNITY_BUILD`
+target property.  The original source files will be distributed across as many
+unity source files as necessary to honor this limit.
+
+The initial value for this property is taken from the
+:variable:`CMAKE_UNITY_BUILD_BATCH_SIZE` variable when the target is created.
+If that variable has not been set, the initial value will be 8.
+
+The batch size needs to be selected carefully.  If set too high, the size of
+the combined source files could result in the compiler using excessive memory
+or hitting other similar limits.  In extreme cases, this can even result in
+build failure.  On the other hand, if the batch size is too low, there will be
+little gain in build performance.
+
+Although strongly discouraged, the batch size may be set to a value of 0 to
+combine all the sources for the target into a single unity file, regardless of
+how many sources are involved.  This runs the risk of creating an excessively
+large unity source file and negatively impacting the build performance, so
+a value of 0 is not generally recommended.
diff --git a/share/cmake-3.22/Help/prop_tgt/UNITY_BUILD_CODE_AFTER_INCLUDE.rst b/share/cmake-3.22/Help/prop_tgt/UNITY_BUILD_CODE_AFTER_INCLUDE.rst
new file mode 100644
index 0000000..ac2b19c
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/UNITY_BUILD_CODE_AFTER_INCLUDE.rst
@@ -0,0 +1,21 @@
+UNITY_BUILD_CODE_AFTER_INCLUDE
+------------------------------
+
+.. versionadded:: 3.16
+
+Code snippet which is included verbatim by the :prop_tgt:`UNITY_BUILD`
+feature just after every ``#include`` statement in the generated unity
+source files.  For example:
+
+.. code-block:: cmake
+
+  set(after [[
+  #if defined(NOMINMAX)
+  #undef NOMINMAX
+  #endif
+  ]])
+  set_target_properties(myTarget PROPERTIES
+    UNITY_BUILD_CODE_AFTER_INCLUDE "${after}"
+  )
+
+See also :prop_tgt:`UNITY_BUILD_CODE_BEFORE_INCLUDE`.
diff --git a/share/cmake-3.22/Help/prop_tgt/UNITY_BUILD_CODE_BEFORE_INCLUDE.rst b/share/cmake-3.22/Help/prop_tgt/UNITY_BUILD_CODE_BEFORE_INCLUDE.rst
new file mode 100644
index 0000000..6f0d56b
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/UNITY_BUILD_CODE_BEFORE_INCLUDE.rst
@@ -0,0 +1,21 @@
+UNITY_BUILD_CODE_BEFORE_INCLUDE
+-------------------------------
+
+.. versionadded:: 3.16
+
+Code snippet which is included verbatim by the :prop_tgt:`UNITY_BUILD`
+feature just before every ``#include`` statement in the generated unity
+source files.  For example:
+
+.. code-block:: cmake
+
+  set(before [[
+  #if !defined(NOMINMAX)
+  #define NOMINMAX
+  #endif
+  ]])
+  set_target_properties(myTarget PROPERTIES
+    UNITY_BUILD_CODE_BEFORE_INCLUDE "${before}"
+  )
+
+See also :prop_tgt:`UNITY_BUILD_CODE_AFTER_INCLUDE`.
diff --git a/share/cmake-3.22/Help/prop_tgt/UNITY_BUILD_MODE.rst b/share/cmake-3.22/Help/prop_tgt/UNITY_BUILD_MODE.rst
new file mode 100644
index 0000000..003451e
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/UNITY_BUILD_MODE.rst
@@ -0,0 +1,60 @@
+UNITY_BUILD_MODE
+----------------
+
+.. versionadded:: 3.18
+
+CMake provides different algorithms for selecting which sources are grouped
+together into a *bucket*. Selection is decided by this property,
+which has the following acceptable values:
+
+``BATCH``
+  When in this mode CMake determines which files are grouped together.
+  The :prop_tgt:`UNITY_BUILD_BATCH_SIZE` property controls the upper limit on
+  how many sources can be combined per unity source file.
+
+  Example usage:
+
+  .. code-block:: cmake
+
+    add_library(example_library
+                source1.cxx
+                source2.cxx
+                source3.cxx
+                source4.cxx)
+
+    set_target_properties(example_library PROPERTIES
+                          UNITY_BUILD_MODE BATCH
+                          UNITY_BUILD_BATCH_SIZE 2
+                          )
+
+``GROUP``
+  When in this mode each target explicitly specifies how to group
+  source files. Each source file that has the same
+  :prop_sf:`UNITY_GROUP` value will be grouped together. Any sources
+  that don't have this property will be compiled individually. The
+  :prop_tgt:`UNITY_BUILD_BATCH_SIZE` property is ignored when using
+  this mode.
+
+  Example usage:
+
+  .. code-block:: cmake
+
+    add_library(example_library
+                source1.cxx
+                source2.cxx
+                source3.cxx
+                source4.cxx)
+
+    set_target_properties(example_library PROPERTIES
+                          UNITY_BUILD_MODE GROUP
+                          )
+
+    set_source_files_properties(source1.cxx source2.cxx source3.cxx
+                                PROPERTIES UNITY_GROUP "bucket1"
+                                )
+    set_source_files_properties(source4.cxx
+                                PROPERTIES UNITY_GROUP "bucket2"
+                                )
+
+If no explicit :prop_tgt:`UNITY_BUILD_MODE` has been specified, CMake will
+default to ``BATCH``.
diff --git a/share/cmake-3.22/Help/prop_tgt/UNITY_BUILD_UNIQUE_ID.rst b/share/cmake-3.22/Help/prop_tgt/UNITY_BUILD_UNIQUE_ID.rst
new file mode 100644
index 0000000..d288dd3
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/UNITY_BUILD_UNIQUE_ID.rst
@@ -0,0 +1,55 @@
+UNITY_BUILD_UNIQUE_ID
+---------------------
+
+.. versionadded:: 3.20
+
+The name of a valid C-identifier which is set to a unique per-file
+value during unity builds.
+
+When this property is populated and when :prop_tgt:`UNITY_BUILD`
+is true, the property value is used to define a compiler definition
+of the specified name. The value of the defined symbol is unspecified,
+but it is unique per file path.
+
+Given:
+
+.. code-block:: cmake
+
+  set_target_properties(myTarget PROPERTIES
+    UNITY_BUILD "ON"
+    UNITY_BUILD_UNIQUE_ID "MY_UNITY_ID"
+  )
+
+the ``MY_UNITY_ID`` symbol is defined to a unique per-file value.
+
+One known use case for this identifier is to disambiguate the
+variables in an anonymous namespace in a limited scope.
+Anonymous namespaces present a problem for unity builds because
+they are used to ensure that certain variables and declarations
+are scoped to a translation unit which is approximated by a
+single source file.  When source files are combined in a unity
+build file, those variables in different files are combined in
+a single translation unit and the names clash.  This property can
+be used to avoid that with code like the following:
+
+.. code-block:: cpp
+
+  // Needed for when unity builds are disabled
+  #ifndef MY_UNITY_ID
+  #define MY_UNITY_ID
+  #endif
+
+  namespace { namespace MY_UNITY_ID {
+    // The name 'i' clashes (or could clash) with other
+    // variables in other anonymous namespaces
+    int i = 42;
+  }}
+
+  int use_var()
+  {
+    return MY_UNITY_ID::i;
+  }
+
+The pseudonymous namespace is used within a truly anonymous namespace.
+On many platforms, this maintains the invariant that the symbols within
+do not get external linkage when performing a unity build.
diff --git a/share/cmake-3.18/Help/prop_tgt/VERSION.rst b/share/cmake-3.22/Help/prop_tgt/VERSION.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/VERSION.rst
rename to share/cmake-3.22/Help/prop_tgt/VERSION.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/VISIBILITY_INLINES_HIDDEN.rst b/share/cmake-3.22/Help/prop_tgt/VISIBILITY_INLINES_HIDDEN.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/VISIBILITY_INLINES_HIDDEN.rst
rename to share/cmake-3.22/Help/prop_tgt/VISIBILITY_INLINES_HIDDEN.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/VS_CONFIGURATION_TYPE.rst b/share/cmake-3.22/Help/prop_tgt/VS_CONFIGURATION_TYPE.rst
new file mode 100644
index 0000000..4adffd4
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/VS_CONFIGURATION_TYPE.rst
@@ -0,0 +1,14 @@
+VS_CONFIGURATION_TYPE
+---------------------
+
+.. versionadded:: 3.6
+
+Visual Studio project configuration type.
+
+Sets the ``ConfigurationType`` attribute for a generated Visual Studio project.
+The property value may use
+:manual:`generator expressions <cmake-generator-expressions(7)>`.
+If this property is set, it overrides the default setting that is based on the
+target type (e.g. ``StaticLibrary``, ``Application``, ...).
+
+Supported on :ref:`Visual Studio Generators` for VS 2010 and higher.
diff --git a/share/cmake-3.22/Help/prop_tgt/VS_DEBUGGER_COMMAND.rst b/share/cmake-3.22/Help/prop_tgt/VS_DEBUGGER_COMMAND.rst
new file mode 100644
index 0000000..58476d6
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/VS_DEBUGGER_COMMAND.rst
@@ -0,0 +1,13 @@
+VS_DEBUGGER_COMMAND
+-------------------
+
+.. versionadded:: 3.12
+
+Sets the local debugger command for Visual Studio C++ targets.
+The property value may use
+:manual:`generator expressions <cmake-generator-expressions(7)>`.
+This is defined in ``<LocalDebuggerCommand>`` in the Visual Studio
+project file.
+
+This property only works for Visual Studio 2010 and above;
+it is ignored on other generators.
diff --git a/share/cmake-3.22/Help/prop_tgt/VS_DEBUGGER_COMMAND_ARGUMENTS.rst b/share/cmake-3.22/Help/prop_tgt/VS_DEBUGGER_COMMAND_ARGUMENTS.rst
new file mode 100644
index 0000000..6c26601
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/VS_DEBUGGER_COMMAND_ARGUMENTS.rst
@@ -0,0 +1,13 @@
+VS_DEBUGGER_COMMAND_ARGUMENTS
+-----------------------------
+
+.. versionadded:: 3.13
+
+Sets the local debugger command line arguments for Visual Studio C++ targets.
+The property value may use
+:manual:`generator expressions <cmake-generator-expressions(7)>`.
+This is defined in ``<LocalDebuggerCommandArguments>`` in the Visual Studio
+project file.
+
+This property only works for Visual Studio 2010 and above;
+it is ignored on other generators.
diff --git a/share/cmake-3.22/Help/prop_tgt/VS_DEBUGGER_ENVIRONMENT.rst b/share/cmake-3.22/Help/prop_tgt/VS_DEBUGGER_ENVIRONMENT.rst
new file mode 100644
index 0000000..2f59a82
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/VS_DEBUGGER_ENVIRONMENT.rst
@@ -0,0 +1,13 @@
+VS_DEBUGGER_ENVIRONMENT
+-----------------------
+
+.. versionadded:: 3.13
+
+Sets the local debugger environment for Visual Studio C++ targets.
+The property value may use
+:manual:`generator expressions <cmake-generator-expressions(7)>`.
+This is defined in ``<LocalDebuggerEnvironment>`` in the Visual Studio
+project file.
+
+This property only works for Visual Studio 2010 and above;
+it is ignored on other generators.
diff --git a/share/cmake-3.22/Help/prop_tgt/VS_DEBUGGER_WORKING_DIRECTORY.rst b/share/cmake-3.22/Help/prop_tgt/VS_DEBUGGER_WORKING_DIRECTORY.rst
new file mode 100644
index 0000000..c163abf
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/VS_DEBUGGER_WORKING_DIRECTORY.rst
@@ -0,0 +1,13 @@
+VS_DEBUGGER_WORKING_DIRECTORY
+-----------------------------
+
+.. versionadded:: 3.8
+
+Sets the local debugger working directory for Visual Studio C++ targets.
+The property value may use
+:manual:`generator expressions <cmake-generator-expressions(7)>`.
+This is defined in ``<LocalDebuggerWorkingDirectory>`` in the Visual Studio
+project file.
+
+This property only works for Visual Studio 2010 and above;
+it is ignored on other generators.
diff --git a/share/cmake-3.22/Help/prop_tgt/VS_DESKTOP_EXTENSIONS_VERSION.rst b/share/cmake-3.22/Help/prop_tgt/VS_DESKTOP_EXTENSIONS_VERSION.rst
new file mode 100644
index 0000000..5fd23e1
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/VS_DESKTOP_EXTENSIONS_VERSION.rst
@@ -0,0 +1,12 @@
+VS_DESKTOP_EXTENSIONS_VERSION
+-----------------------------
+
+.. versionadded:: 3.4
+
+Visual Studio Windows 10 Desktop Extensions Version
+
+Specifies the version of the Desktop Extensions that should be included in the
+target. For example ``10.0.10240.0``. If the value is not specified, the Desktop
+Extensions will not be included. To use the same version of the extensions as
+the Windows 10 SDK that is being used, you can use the
+:variable:`CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION` variable.
diff --git a/share/cmake-3.22/Help/prop_tgt/VS_DOTNET_DOCUMENTATION_FILE.rst b/share/cmake-3.22/Help/prop_tgt/VS_DOTNET_DOCUMENTATION_FILE.rst
new file mode 100644
index 0000000..a388256
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/VS_DOTNET_DOCUMENTATION_FILE.rst
@@ -0,0 +1,8 @@
+VS_DOTNET_DOCUMENTATION_FILE
+----------------------------
+
+.. versionadded:: 3.17
+
+Visual Studio managed project .NET documentation output
+
+Sets the target XML documentation file output.
diff --git a/share/cmake-3.22/Help/prop_tgt/VS_DOTNET_REFERENCEPROP_refname_TAG_tagname.rst b/share/cmake-3.22/Help/prop_tgt/VS_DOTNET_REFERENCEPROP_refname_TAG_tagname.rst
new file mode 100644
index 0000000..5b9caee
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/VS_DOTNET_REFERENCEPROP_refname_TAG_tagname.rst
@@ -0,0 +1,16 @@
+VS_DOTNET_REFERENCEPROP_<refname>_TAG_<tagname>
+-----------------------------------------------
+
+.. versionadded:: 3.10
+
+Defines an XML property ``<tagname>`` for a .NET reference
+``<refname>``.
+
+Reference properties can be set for .NET references which are
+defined by the target properties :prop_tgt:`VS_DOTNET_REFERENCES`,
+:prop_tgt:`VS_DOTNET_REFERENCE_<refname>`
+and also for project references to other C# targets which are
+established by :command:`target_link_libraries()`.
+
+This property is only applicable to C# targets and Visual Studio
+generators 2010 and later.
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_DOTNET_REFERENCES.rst b/share/cmake-3.22/Help/prop_tgt/VS_DOTNET_REFERENCES.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/VS_DOTNET_REFERENCES.rst
rename to share/cmake-3.22/Help/prop_tgt/VS_DOTNET_REFERENCES.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/VS_DOTNET_REFERENCES_COPY_LOCAL.rst b/share/cmake-3.22/Help/prop_tgt/VS_DOTNET_REFERENCES_COPY_LOCAL.rst
new file mode 100644
index 0000000..556fa8a
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/VS_DOTNET_REFERENCES_COPY_LOCAL.rst
@@ -0,0 +1,9 @@
+VS_DOTNET_REFERENCES_COPY_LOCAL
+-------------------------------
+
+.. versionadded:: 3.8
+
+Sets the **Copy Local** property for all .NET hint references in the target
+
+Boolean property to enable/disable copying of .NET hint references to
+output directory. The default is ``ON``.
diff --git a/share/cmake-3.22/Help/prop_tgt/VS_DOTNET_REFERENCE_refname.rst b/share/cmake-3.22/Help/prop_tgt/VS_DOTNET_REFERENCE_refname.rst
new file mode 100644
index 0000000..9c4d34a
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/VS_DOTNET_REFERENCE_refname.rst
@@ -0,0 +1,14 @@
+VS_DOTNET_REFERENCE_<refname>
+-----------------------------
+
+.. versionadded:: 3.8
+
+Visual Studio managed project .NET reference with name ``<refname>``
+and hint path.
+
+Adds one .NET reference to generated Visual Studio project. The
+reference will have the name ``<refname>`` and will point to the
+assembly given as value of the property.
+
+See also :prop_tgt:`VS_DOTNET_REFERENCES` and
+:prop_tgt:`VS_DOTNET_REFERENCES_COPY_LOCAL`
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_DOTNET_TARGET_FRAMEWORK_VERSION.rst b/share/cmake-3.22/Help/prop_tgt/VS_DOTNET_TARGET_FRAMEWORK_VERSION.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/VS_DOTNET_TARGET_FRAMEWORK_VERSION.rst
rename to share/cmake-3.22/Help/prop_tgt/VS_DOTNET_TARGET_FRAMEWORK_VERSION.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/VS_DPI_AWARE.rst b/share/cmake-3.22/Help/prop_tgt/VS_DPI_AWARE.rst
new file mode 100644
index 0000000..47ce1ce
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/VS_DPI_AWARE.rst
@@ -0,0 +1,16 @@
+VS_DPI_AWARE
+------------
+
+.. versionadded:: 3.16
+
+Set the Manifest Tool -> Input and Output -> DPI Awareness in the Visual Studio
+target project properties.
+
+Valid values are ``PerMonitor``, ``ON``, or ``OFF``.
+
+For example:
+
+.. code-block:: cmake
+
+  add_executable(myproject myproject.cpp)
+  set_property(TARGET myproject PROPERTY VS_DPI_AWARE "PerMonitor")
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_GLOBAL_KEYWORD.rst b/share/cmake-3.22/Help/prop_tgt/VS_GLOBAL_KEYWORD.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/VS_GLOBAL_KEYWORD.rst
rename to share/cmake-3.22/Help/prop_tgt/VS_GLOBAL_KEYWORD.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_GLOBAL_PROJECT_TYPES.rst b/share/cmake-3.22/Help/prop_tgt/VS_GLOBAL_PROJECT_TYPES.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/VS_GLOBAL_PROJECT_TYPES.rst
rename to share/cmake-3.22/Help/prop_tgt/VS_GLOBAL_PROJECT_TYPES.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_GLOBAL_ROOTNAMESPACE.rst b/share/cmake-3.22/Help/prop_tgt/VS_GLOBAL_ROOTNAMESPACE.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/VS_GLOBAL_ROOTNAMESPACE.rst
rename to share/cmake-3.22/Help/prop_tgt/VS_GLOBAL_ROOTNAMESPACE.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_GLOBAL_variable.rst b/share/cmake-3.22/Help/prop_tgt/VS_GLOBAL_variable.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/VS_GLOBAL_variable.rst
rename to share/cmake-3.22/Help/prop_tgt/VS_GLOBAL_variable.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/VS_IOT_EXTENSIONS_VERSION.rst b/share/cmake-3.22/Help/prop_tgt/VS_IOT_EXTENSIONS_VERSION.rst
new file mode 100644
index 0000000..ca6a3ca
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/VS_IOT_EXTENSIONS_VERSION.rst
@@ -0,0 +1,12 @@
+VS_IOT_EXTENSIONS_VERSION
+-------------------------
+
+.. versionadded:: 3.4
+
+Visual Studio Windows 10 IoT Extensions Version
+
+Specifies the version of the IoT Extensions that should be included in the
+target. For example ``10.0.10240.0``. If the value is not specified, the IoT
+Extensions will not be included. To use the same version of the extensions as
+the Windows 10 SDK that is being used, you can use the
+:variable:`CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION` variable.
diff --git a/share/cmake-3.22/Help/prop_tgt/VS_IOT_STARTUP_TASK.rst b/share/cmake-3.22/Help/prop_tgt/VS_IOT_STARTUP_TASK.rst
new file mode 100644
index 0000000..259055d
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/VS_IOT_STARTUP_TASK.rst
@@ -0,0 +1,8 @@
+VS_IOT_STARTUP_TASK
+-------------------
+
+.. versionadded:: 3.4
+
+Visual Studio Windows 10 IoT Continuous Background Task
+
+Specifies that the target should be compiled as a Continuous Background Task library.
diff --git a/share/cmake-3.22/Help/prop_tgt/VS_JUST_MY_CODE_DEBUGGING.rst b/share/cmake-3.22/Help/prop_tgt/VS_JUST_MY_CODE_DEBUGGING.rst
new file mode 100644
index 0000000..724bd2f
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/VS_JUST_MY_CODE_DEBUGGING.rst
@@ -0,0 +1,12 @@
+VS_JUST_MY_CODE_DEBUGGING
+-------------------------
+
+.. versionadded:: 3.15
+
+Enable Just My Code with Visual Studio debugger.
+
+Supported on :ref:`Visual Studio Generators` for VS 2010 and higher,
+:ref:`Makefile Generators` and the :generator:`Ninja` generators.
+
+This property is initialized by the :variable:`CMAKE_VS_JUST_MY_CODE_DEBUGGING`
+variable if it is set when a target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_KEYWORD.rst b/share/cmake-3.22/Help/prop_tgt/VS_KEYWORD.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/VS_KEYWORD.rst
rename to share/cmake-3.22/Help/prop_tgt/VS_KEYWORD.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/VS_MOBILE_EXTENSIONS_VERSION.rst b/share/cmake-3.22/Help/prop_tgt/VS_MOBILE_EXTENSIONS_VERSION.rst
new file mode 100644
index 0000000..b307e84
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/VS_MOBILE_EXTENSIONS_VERSION.rst
@@ -0,0 +1,12 @@
+VS_MOBILE_EXTENSIONS_VERSION
+----------------------------
+
+.. versionadded:: 3.4
+
+Visual Studio Windows 10 Mobile Extensions Version
+
+Specifies the version of the Mobile Extensions that should be included in the
+target. For example ``10.0.10240.0``. If the value is not specified, the Mobile
+Extensions will not be included. To use the same version of the extensions as
+the Windows 10 SDK that is being used, you can use the
+:variable:`CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION` variable.
diff --git a/share/cmake-3.22/Help/prop_tgt/VS_NO_SOLUTION_DEPLOY.rst b/share/cmake-3.22/Help/prop_tgt/VS_NO_SOLUTION_DEPLOY.rst
new file mode 100644
index 0000000..bf6ac10
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/VS_NO_SOLUTION_DEPLOY.rst
@@ -0,0 +1,48 @@
+VS_NO_SOLUTION_DEPLOY
+---------------------
+
+.. versionadded:: 3.15
+
+Specify that the target should not be marked for deployment to a Windows CE
+or Windows Phone device in the generated Visual Studio solution.
+
+Be default, all EXE and shared library (DLL) targets are marked to deploy to
+the target device in the generated Visual Studio solution.
+
+Generator expressions are supported.
+
+There are reasons one might want to exclude a target / generated project from
+deployment:
+
+- The library or executable may not be necessary in the primary deploy/debug
+  scenario, and excluding from deployment saves time in the
+  develop/download/debug cycle.
+- There may be insufficient space on the target device to accommodate all of
+  the build products.
+- Visual Studio 2013 requires a target device IP address be entered for each
+  target marked for deployment.  For large numbers of targets, this can be
+  tedious.
+  NOTE: Visual Studio *will* deploy all project dependencies of a project
+  tagged for deployment to the IP address configured for that project even
+  if those dependencies are not tagged for deployment.
+
+
+Example 1
+^^^^^^^^^
+
+This shows setting the variable for the target foo.
+
+.. code-block:: cmake
+
+  add_library(foo SHARED foo.cpp)
+  set_property(TARGET foo PROPERTY VS_NO_SOLUTION_DEPLOY ON)
+
+Example 2
+^^^^^^^^^
+
+This shows setting the variable for the Release configuration only.
+
+.. code-block:: cmake
+
+  add_library(foo SHARED foo.cpp)
+  set_property(TARGET foo PROPERTY VS_NO_SOLUTION_DEPLOY "$<CONFIG:Release>")
diff --git a/share/cmake-3.22/Help/prop_tgt/VS_PACKAGE_REFERENCES.rst b/share/cmake-3.22/Help/prop_tgt/VS_PACKAGE_REFERENCES.rst
new file mode 100644
index 0000000..ec17567
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/VS_PACKAGE_REFERENCES.rst
@@ -0,0 +1,15 @@
+VS_PACKAGE_REFERENCES
+---------------------
+
+.. versionadded:: 3.15
+
+Visual Studio package references for nuget.
+
+Adds one or more semicolon-delimited package references to a generated
+Visual Studio project. The version of the package will be
+underscore delimited. For example, ``boost_1.7.0;nunit_3.12.*``.
+
+.. code-block:: cmake
+
+  set_property(TARGET ${TARGET_NAME} PROPERTY
+    VS_PACKAGE_REFERENCES "boost_1.7.0")
diff --git a/share/cmake-3.22/Help/prop_tgt/VS_PLATFORM_TOOLSET.rst b/share/cmake-3.22/Help/prop_tgt/VS_PLATFORM_TOOLSET.rst
new file mode 100644
index 0000000..27a92d6
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/VS_PLATFORM_TOOLSET.rst
@@ -0,0 +1,12 @@
+VS_PLATFORM_TOOLSET
+-------------------
+
+.. versionadded:: 3.18
+
+Overrides the platform toolset used to build a target.
+
+Only supported when the compiler used by the given toolset is the
+same as the compiler used to build the whole source tree.
+
+This is especially useful to create driver projects with the toolsets
+"WindowsUserModeDriver10.0" or "WindowsKernelModeDriver10.0".
diff --git a/share/cmake-3.22/Help/prop_tgt/VS_PROJECT_IMPORT.rst b/share/cmake-3.22/Help/prop_tgt/VS_PROJECT_IMPORT.rst
new file mode 100644
index 0000000..f5e9698
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/VS_PROJECT_IMPORT.rst
@@ -0,0 +1,10 @@
+VS_PROJECT_IMPORT
+-----------------
+
+.. versionadded:: 3.15
+
+Visual Studio managed project imports
+
+Adds to a generated Visual Studio project one or more semicolon-delimited paths
+to .props files needed when building projects from some NuGet packages.
+For example, ``my_packages_path/MyPackage.1.0.0/build/MyPackage.props``.
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_SCC_AUXPATH.rst b/share/cmake-3.22/Help/prop_tgt/VS_SCC_AUXPATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/VS_SCC_AUXPATH.rst
rename to share/cmake-3.22/Help/prop_tgt/VS_SCC_AUXPATH.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_SCC_LOCALPATH.rst b/share/cmake-3.22/Help/prop_tgt/VS_SCC_LOCALPATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/VS_SCC_LOCALPATH.rst
rename to share/cmake-3.22/Help/prop_tgt/VS_SCC_LOCALPATH.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_SCC_PROJECTNAME.rst b/share/cmake-3.22/Help/prop_tgt/VS_SCC_PROJECTNAME.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/VS_SCC_PROJECTNAME.rst
rename to share/cmake-3.22/Help/prop_tgt/VS_SCC_PROJECTNAME.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_SCC_PROVIDER.rst b/share/cmake-3.22/Help/prop_tgt/VS_SCC_PROVIDER.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/VS_SCC_PROVIDER.rst
rename to share/cmake-3.22/Help/prop_tgt/VS_SCC_PROVIDER.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/VS_SDK_REFERENCES.rst b/share/cmake-3.22/Help/prop_tgt/VS_SDK_REFERENCES.rst
new file mode 100644
index 0000000..9a082e7
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/VS_SDK_REFERENCES.rst
@@ -0,0 +1,9 @@
+VS_SDK_REFERENCES
+-----------------
+
+.. versionadded:: 3.7
+
+Visual Studio project SDK references.
+Specify a :ref:`semicolon-separated list <CMake Language Lists>` of SDK references
+to be added to a generated Visual Studio project, e.g.
+``Microsoft.AdMediatorWindows81, Version=1.0``.
diff --git a/share/cmake-3.22/Help/prop_tgt/VS_SOLUTION_DEPLOY.rst b/share/cmake-3.22/Help/prop_tgt/VS_SOLUTION_DEPLOY.rst
new file mode 100644
index 0000000..e56f411
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/VS_SOLUTION_DEPLOY.rst
@@ -0,0 +1,29 @@
+VS_SOLUTION_DEPLOY
+------------------
+
+.. versionadded:: 3.18
+
+Specify that the target should be marked for deployment when not targeting
+Windows CE, Windows Phone or a Windows Store application.
+
+If the target platform doesn't support deployment, this property won't have
+any effect.
+
+:manual:`Generator expressions <cmake-generator-expressions(7)>` are supported.
+
+Examples
+^^^^^^^^
+
+Always deploy target ``foo``:
+
+.. code-block:: cmake
+
+  add_executable(foo SHARED foo.cpp)
+  set_property(TARGET foo PROPERTY VS_SOLUTION_DEPLOY ON)
+
+Deploy target ``foo`` for all configurations except ``Release``:
+
+.. code-block:: cmake
+
+  add_executable(foo SHARED foo.cpp)
+  set_property(TARGET foo PROPERTY VS_SOLUTION_DEPLOY "$<NOT:$<CONFIG:Release>>")
diff --git a/share/cmake-3.22/Help/prop_tgt/VS_SOURCE_SETTINGS_tool.rst b/share/cmake-3.22/Help/prop_tgt/VS_SOURCE_SETTINGS_tool.rst
new file mode 100644
index 0000000..b5a76fc
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/VS_SOURCE_SETTINGS_tool.rst
@@ -0,0 +1,21 @@
+VS_SOURCE_SETTINGS_<tool>
+-------------------------
+
+.. versionadded:: 3.18
+
+Set any item metadata on all non-built files that use <tool>.
+
+Takes a list of ``Key=Value`` pairs. Tells the Visual Studio generator
+to set ``Key`` to ``Value`` as item metadata on all non-built files
+that use ``<tool>``.
+
+For example:
+
+.. code-block:: cmake
+
+  set_property(TARGET main PROPERTY VS_SOURCE_SETTINGS_FXCompile "Key=Value" "Key2=Value2")
+
+will set ``Key`` to ``Value`` and ``Key2`` to ``Value2`` for all
+non-built files that use ``FXCompile``.
+
+:manual:`Generator expressions <cmake-generator-expressions(7)>` are supported.
diff --git a/share/cmake-3.22/Help/prop_tgt/VS_USER_PROPS.rst b/share/cmake-3.22/Help/prop_tgt/VS_USER_PROPS.rst
new file mode 100644
index 0000000..8f2a105
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/VS_USER_PROPS.rst
@@ -0,0 +1,14 @@
+VS_USER_PROPS
+-------------
+
+.. versionadded:: 3.8
+
+Sets the user props file to be included in the visual studio
+C++ project file. The standard path is
+``$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props``, which is
+in most cases the same as
+``%LOCALAPPDATA%\\Microsoft\\MSBuild\\v4.0\\Microsoft.Cpp.Win32.user.props``
+or ``%LOCALAPPDATA%\\Microsoft\\MSBuild\\v4.0\\Microsoft.Cpp.x64.user.props``.
+
+The ``*.user.props`` files can be used for Visual Studio wide
+configuration which is independent from cmake.
diff --git a/share/cmake-3.22/Help/prop_tgt/VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION.rst b/share/cmake-3.22/Help/prop_tgt/VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION.rst
new file mode 100644
index 0000000..50cf203
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION.rst
@@ -0,0 +1,12 @@
+VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION
+--------------------------------------
+
+.. versionadded:: 3.4
+
+Visual Studio Windows Target Platform Minimum Version
+
+For Windows 10. Specifies the minimum version of the OS that is being
+targeted. For example ``10.0.10240.0``. If the value is not specified, the
+value of :variable:`CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION` will be used on
+WindowsStore projects otherwise the target platform minimum version will not
+be specified for the project.
diff --git a/share/cmake-3.22/Help/prop_tgt/VS_WINRT_COMPONENT.rst b/share/cmake-3.22/Help/prop_tgt/VS_WINRT_COMPONENT.rst
new file mode 100644
index 0000000..8b4aaf7
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/VS_WINRT_COMPONENT.rst
@@ -0,0 +1,13 @@
+VS_WINRT_COMPONENT
+------------------
+
+.. versionadded:: 3.1
+
+Mark a target as a Windows Runtime component for the Visual Studio generator.
+Compile the target with ``C++/CX`` language extensions for Windows Runtime.
+For ``SHARED`` and ``MODULE`` libraries, this also defines the
+``_WINRT_DLL`` preprocessor macro.
+
+.. note::
+  Currently this is implemented only by Visual Studio generators.
+  Support may be added to other generators in the future.
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_WINRT_EXTENSIONS.rst b/share/cmake-3.22/Help/prop_tgt/VS_WINRT_EXTENSIONS.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/VS_WINRT_EXTENSIONS.rst
rename to share/cmake-3.22/Help/prop_tgt/VS_WINRT_EXTENSIONS.rst
diff --git a/share/cmake-3.18/Help/prop_tgt/VS_WINRT_REFERENCES.rst b/share/cmake-3.22/Help/prop_tgt/VS_WINRT_REFERENCES.rst
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/VS_WINRT_REFERENCES.rst
rename to share/cmake-3.22/Help/prop_tgt/VS_WINRT_REFERENCES.rst
diff --git a/share/cmake-3.22/Help/prop_tgt/WIN32_EXECUTABLE.rst b/share/cmake-3.22/Help/prop_tgt/WIN32_EXECUTABLE.rst
new file mode 100644
index 0000000..eac28ae
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/WIN32_EXECUTABLE.rst
@@ -0,0 +1,17 @@
+WIN32_EXECUTABLE
+----------------
+
+Build an executable with a WinMain entry point on windows.
+
+When this property is set to true the executable when linked on
+Windows will be created with a WinMain() entry point instead of just
+main().  This makes it a GUI executable instead of a console application.
+See the :variable:`CMAKE_MFC_FLAG` variable documentation to
+configure use of the Microsoft Foundation Classes (MFC) for WinMain
+executables.  This property is initialized by the value of the
+:variable:`CMAKE_WIN32_EXECUTABLE` variable if it is set when
+a target is created.
+
+This property supports
+:manual:`generator expressions <cmake-generator-expressions(7)>`, except if the
+target is managed (contains C# code.)
diff --git a/share/cmake-3.22/Help/prop_tgt/WINDOWS_EXPORT_ALL_SYMBOLS.rst b/share/cmake-3.22/Help/prop_tgt/WINDOWS_EXPORT_ALL_SYMBOLS.rst
new file mode 100644
index 0000000..00f32f6
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/WINDOWS_EXPORT_ALL_SYMBOLS.rst
@@ -0,0 +1,28 @@
+WINDOWS_EXPORT_ALL_SYMBOLS
+--------------------------
+
+.. versionadded:: 3.4
+
+This property is implemented only for MS-compatible tools on Windows.
+
+Enable this boolean property to automatically create a module definition
+(``.def``) file with all global symbols found in the input ``.obj`` files
+for a ``SHARED`` library (or executable with :prop_tgt:`ENABLE_EXPORTS`)
+on Windows.  The module definition file will be passed to the linker
+causing all symbols to be exported from the ``.dll``.
+For global *data* symbols, ``__declspec(dllimport)`` must still be used when
+compiling against the code in the ``.dll``.  All other function symbols will
+be automatically exported and imported by callers.  This simplifies porting
+projects to Windows by reducing the need for explicit ``dllexport`` markup,
+even in ``C++`` classes.
+
+When this property is enabled, zero or more ``.def`` files may also be
+specified as source files of the target.  The exports named by these files
+will be merged with those detected from the object files to generate a
+single module definition file to be passed to the linker.  This can be
+used to export symbols from a ``.dll`` that are not in any of its object
+files but are added by the linker from dependencies (e.g. ``msvcrt.lib``).
+
+This property is initialized by the value of
+the :variable:`CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS` variable if it is set
+when a target is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_ATTRIBUTE_an-attribute.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_ATTRIBUTE_an-attribute.rst
new file mode 100644
index 0000000..fbe7608
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_ATTRIBUTE_an-attribute.rst
@@ -0,0 +1,22 @@
+XCODE_ATTRIBUTE_<an-attribute>
+------------------------------
+
+Set Xcode target attributes directly.
+
+Tell the :generator:`Xcode` generator to set ``<an-attribute>`` to a given
+value in the generated Xcode project.  Ignored on other generators.
+
+This offers low-level control over the generated Xcode project file.
+It is meant as a last resort for specifying settings that CMake does
+not otherwise have a way to control.  Although this can override a
+setting CMake normally produces on its own, doing so bypasses CMake's
+model of the project and can break things.
+
+See the :variable:`CMAKE_XCODE_ATTRIBUTE_<an-attribute>` variable
+to set attributes on all targets in a directory tree.
+
+Contents of ``XCODE_ATTRIBUTE_<an-attribute>`` may use
+"generator expressions" with the syntax ``$<...>``.  See the
+:manual:`cmake-generator-expressions(7)` manual for available
+expressions.  See the :manual:`cmake-buildsystem(7)` manual
+for more on defining buildsystem properties.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY.rst
new file mode 100644
index 0000000..2a4d666
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY.rst
@@ -0,0 +1,13 @@
+XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY
+----------------------------------------
+
+.. versionadded:: 3.20
+
+Tell the :generator:`Xcode` generator to perform code signing for all the
+frameworks and libraries that are embedded using the
+:prop_tgt:`XCODE_EMBED_FRAMEWORKS <XCODE_EMBED_<type>>` property.
+
+.. versionadded:: 3.21
+
+This property was generalized to other types of embedded items.  See
+:prop_tgt:`XCODE_EMBED_<type>_CODE_SIGN_ON_COPY` for the more general form.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_EMBED_FRAMEWORKS_REMOVE_HEADERS_ON_COPY.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_EMBED_FRAMEWORKS_REMOVE_HEADERS_ON_COPY.rst
new file mode 100644
index 0000000..04daa85
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_EMBED_FRAMEWORKS_REMOVE_HEADERS_ON_COPY.rst
@@ -0,0 +1,14 @@
+XCODE_EMBED_FRAMEWORKS_REMOVE_HEADERS_ON_COPY
+---------------------------------------------
+
+.. versionadded:: 3.20
+
+Tell the :generator:`Xcode` generator to remove headers from all the
+frameworks that are embedded using the
+:prop_tgt:`XCODE_EMBED_FRAMEWORKS <XCODE_EMBED_<type>>` property.
+
+.. versionadded:: 3.21
+
+This property was generalized to other types of embedded items.  See
+:prop_tgt:`XCODE_EMBED_<type>_REMOVE_HEADERS_ON_COPY` for the more
+general form.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_EMBED_type.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_EMBED_type.rst
new file mode 100644
index 0000000..a1af56f
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_EMBED_type.rst
@@ -0,0 +1,24 @@
+XCODE_EMBED_<type>
+------------------
+
+.. versionadded:: 3.20
+
+Tell the :generator:`Xcode` generator to embed the specified list of items into
+the target bundle.  ``<type>`` specifies the embed build phase to use.
+See the Xcode documentation for the base location of each ``<type>``.
+
+The supported values for ``<type>`` are:
+
+``FRAMEWORKS``
+  The specified items will be added to the ``Embed Frameworks`` build phase.
+  The items can be CMake target names or paths to frameworks or libraries.
+
+``APP_EXTENSIONS``
+  .. versionadded:: 3.21
+
+  The specified items will be added to the ``Embed App Extensions`` build phase.
+  They must be CMake target names.
+
+See also :prop_tgt:`XCODE_EMBED_<type>_PATH`,
+:prop_tgt:`XCODE_EMBED_<type>_REMOVE_HEADERS_ON_COPY` and
+:prop_tgt:`XCODE_EMBED_<type>_CODE_SIGN_ON_COPY`.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_EMBED_type_CODE_SIGN_ON_COPY.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_EMBED_type_CODE_SIGN_ON_COPY.rst
new file mode 100644
index 0000000..7ec0385
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_EMBED_type_CODE_SIGN_ON_COPY.rst
@@ -0,0 +1,18 @@
+XCODE_EMBED_<type>_CODE_SIGN_ON_COPY
+------------------------------------
+
+.. versionadded:: 3.20
+
+Boolean property used only by the :generator:`Xcode` generator.  It specifies
+whether to perform code signing for the items that are embedded using the
+:prop_tgt:`XCODE_EMBED_<type>` property.
+
+The supported values for ``<type>`` are:
+
+``FRAMEWORKS``
+
+``APP_EXTENSIONS``
+  .. versionadded:: 3.21
+
+If a ``XCODE_EMBED_<type>_CODE_SIGN_ON_COPY`` property is not defined on the
+target, no code signing on copy will be performed for that ``<type>``.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_EMBED_type_PATH.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_EMBED_type_PATH.rst
new file mode 100644
index 0000000..a6f980d
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_EMBED_type_PATH.rst
@@ -0,0 +1,18 @@
+XCODE_EMBED_<type>_PATH
+-----------------------
+
+.. versionadded:: 3.20
+
+This property is used only by the :generator:`Xcode` generator.  When defined,
+it specifies the relative path to use when embedding the items specified by
+:prop_tgt:`XCODE_EMBED_<type>`.  The path is relative
+to the base location of the ``Embed XXX`` build phase associated with
+``<type>``.  See the Xcode documentation for the base location of each
+``<type>``.
+
+The supported values for ``<type>`` are:
+
+``FRAMEWORKS``
+
+``APP_EXTENSIONS``
+  .. versionadded:: 3.21
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_EMBED_type_REMOVE_HEADERS_ON_COPY.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_EMBED_type_REMOVE_HEADERS_ON_COPY.rst
new file mode 100644
index 0000000..75c8eae
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_EMBED_type_REMOVE_HEADERS_ON_COPY.rst
@@ -0,0 +1,20 @@
+XCODE_EMBED_<type>_REMOVE_HEADERS_ON_COPY
+-----------------------------------------
+
+.. versionadded:: 3.20
+
+Boolean property used only by the :generator:`Xcode` generator.  It specifies
+whether to remove headers from all the frameworks that are embedded using the
+:prop_tgt:`XCODE_EMBED_<type>` property.
+
+The supported values for ``<type>`` are:
+
+``FRAMEWORKS``
+  If the ``XCODE_EMBED_FRAMEWORKS_REMOVE_HEADERS_ON_COPY`` property is not
+  defined, headers will not be removed on copy by default.
+
+``APP_EXTENSIONS``
+  .. versionadded:: 3.21
+
+  If the ``XCODE_EMBED_APP_EXTENSIONS_REMOVE_HEADERS_ON_COPY`` property is not
+  defined, headers WILL be removed on copy by default.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_EXPLICIT_FILE_TYPE.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_EXPLICIT_FILE_TYPE.rst
new file mode 100644
index 0000000..e01a034
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_EXPLICIT_FILE_TYPE.rst
@@ -0,0 +1,10 @@
+XCODE_EXPLICIT_FILE_TYPE
+------------------------
+
+.. versionadded:: 3.8
+
+Set the Xcode ``explicitFileType`` attribute on its reference to a
+target.  CMake computes a default based on target type but
+can be told explicitly with this property.
+
+See also :prop_tgt:`XCODE_PRODUCT_TYPE`.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_GENERATE_SCHEME.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_GENERATE_SCHEME.rst
new file mode 100644
index 0000000..06a3cf9
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_GENERATE_SCHEME.rst
@@ -0,0 +1,43 @@
+XCODE_GENERATE_SCHEME
+---------------------
+
+.. versionadded:: 3.15
+
+If enabled, the :generator:`Xcode` generator will generate schema files.  These
+are useful to invoke analyze, archive, build-for-testing and test
+actions from the command line.
+
+This property is initialized by the value of the variable
+:variable:`CMAKE_XCODE_GENERATE_SCHEME` if it is set when a target
+is created.
+
+The following target properties overwrite the default of the
+corresponding settings on the "Diagnostic" tab for each schema file.
+Each of those is initialized by the respective ``CMAKE_`` variable
+at target creation time.
+
+- :prop_tgt:`XCODE_SCHEME_ADDRESS_SANITIZER`
+- :prop_tgt:`XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN`
+- :prop_tgt:`XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER`
+- :prop_tgt:`XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS`
+- :prop_tgt:`XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE`
+- :prop_tgt:`XCODE_SCHEME_GUARD_MALLOC`
+- :prop_tgt:`XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP`
+- :prop_tgt:`XCODE_SCHEME_MALLOC_GUARD_EDGES`
+- :prop_tgt:`XCODE_SCHEME_MALLOC_SCRIBBLE`
+- :prop_tgt:`XCODE_SCHEME_MALLOC_STACK`
+- :prop_tgt:`XCODE_SCHEME_THREAD_SANITIZER`
+- :prop_tgt:`XCODE_SCHEME_THREAD_SANITIZER_STOP`
+- :prop_tgt:`XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER`
+- :prop_tgt:`XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP`
+- :prop_tgt:`XCODE_SCHEME_ZOMBIE_OBJECTS`
+
+The following target properties will be applied on the
+"Info", "Arguments", and "Options" tab:
+
+- :prop_tgt:`XCODE_SCHEME_ARGUMENTS`
+- :prop_tgt:`XCODE_SCHEME_DEBUG_AS_ROOT`
+- :prop_tgt:`XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING`
+- :prop_tgt:`XCODE_SCHEME_ENVIRONMENT`
+- :prop_tgt:`XCODE_SCHEME_EXECUTABLE`
+- :prop_tgt:`XCODE_SCHEME_WORKING_DIRECTORY`
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_LINK_BUILD_PHASE_MODE.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_LINK_BUILD_PHASE_MODE.rst
new file mode 100644
index 0000000..836cc6b
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_LINK_BUILD_PHASE_MODE.rst
@@ -0,0 +1,55 @@
+XCODE_LINK_BUILD_PHASE_MODE
+---------------------------
+
+.. versionadded:: 3.19
+
+When using the :generator:`Xcode` generator, libraries to be linked will be
+specified in the Xcode project file using either the "Link Binary With
+Libraries" build phase or directly as linker flags.  The former allows Xcode
+to manage build paths, which may be necessary when creating Xcode archives
+because it may use different build paths to a regular build.
+
+This property controls usage of "Link Binary With Libraries" build phase for
+a target that is an app bundle, executable, shared library, shared framework
+or a module library.
+
+Possible values are:
+
+* ``NONE``
+  The libraries will be linked by specifying the linker flags directly.
+
+* ``BUILT_ONLY``
+  The "Link Binary With Libraries" build phase will be used to link to another
+  target under the following conditions:
+
+  - The target to be linked to is a regular non-imported, non-interface library
+    target.
+  - The output directory of the target being built has not been changed from
+    its default (see :prop_tgt:`RUNTIME_OUTPUT_DIRECTORY` and
+    :prop_tgt:`LIBRARY_OUTPUT_DIRECTORY`).
+
+* ``KNOWN_LOCATION``
+  The "Link Binary With Libraries" build phase will be used to link to another
+  target under the same conditions as with ``BUILT_ONLY`` and also:
+
+  - Imported library targets except those of type ``UNKNOWN``.
+  - Any non-target library specified directly with a path.
+
+For all other cases, the libraries will be linked by specifying the linker
+flags directly.
+
+.. warning::
+  Libraries linked using "Link Binary With Libraries" are linked after the
+  ones linked through regular linker flags.  This order should be taken into
+  account when different static libraries contain symbols with the same name,
+  as the former ones will take precedence over the latter.
+
+.. warning::
+  If two or more directories contain libraries with identical file names and
+  some libraries are linked from those directories, the library search path
+  lookup will end up linking libraries from the first directory.  This is a
+  known limitation of Xcode.
+
+This property is initialized by the value of the
+:variable:`CMAKE_XCODE_LINK_BUILD_PHASE_MODE` variable if it is set when a
+target is created.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_PRODUCT_TYPE.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_PRODUCT_TYPE.rst
new file mode 100644
index 0000000..17a9c3f
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_PRODUCT_TYPE.rst
@@ -0,0 +1,10 @@
+XCODE_PRODUCT_TYPE
+------------------
+
+.. versionadded:: 3.8
+
+Set the Xcode ``productType`` attribute on its reference to a
+target.  CMake computes a default based on target type but
+can be told explicitly with this property.
+
+See also :prop_tgt:`XCODE_EXPLICIT_FILE_TYPE`.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER.rst
new file mode 100644
index 0000000..c72ec06
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER.rst
@@ -0,0 +1,14 @@
+XCODE_SCHEME_ADDRESS_SANITIZER
+------------------------------
+
+.. versionadded:: 3.13
+
+Whether to enable ``Address Sanitizer`` in the Diagnostics
+section of the generated Xcode scheme.
+
+This property is initialized by the value of the variable
+:variable:`CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER` if it is set
+when a target is created.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN.rst
new file mode 100644
index 0000000..293b5d4
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN.rst
@@ -0,0 +1,14 @@
+XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN
+-----------------------------------------------
+
+.. versionadded:: 3.13
+
+Whether to enable ``Detect use of stack after return``
+in the Diagnostics section of the generated Xcode scheme.
+
+This property is initialized by the value of the variable
+:variable:`CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN`
+if it is set when a target is created.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_ARGUMENTS.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_ARGUMENTS.rst
new file mode 100644
index 0000000..2bfcb41
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_ARGUMENTS.rst
@@ -0,0 +1,12 @@
+XCODE_SCHEME_ARGUMENTS
+----------------------
+
+.. versionadded:: 3.13
+
+Specify command line arguments that should be added to the Arguments
+section of the generated Xcode scheme.
+
+If set to a list of arguments those will be added to the scheme.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_DEBUG_AS_ROOT.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_DEBUG_AS_ROOT.rst
new file mode 100644
index 0000000..2523deb
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_DEBUG_AS_ROOT.rst
@@ -0,0 +1,9 @@
+XCODE_SCHEME_DEBUG_AS_ROOT
+--------------------------
+
+.. versionadded:: 3.15
+
+Whether to debug the target as 'root'.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING.rst
new file mode 100644
index 0000000..bbcae35
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING.rst
@@ -0,0 +1,15 @@
+XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING
+--------------------------------------
+
+.. versionadded:: 3.16
+
+Whether to enable
+``Allow debugging when using document Versions Browser``
+in the Options section of the generated Xcode scheme.
+
+This property is initialized by the value of the variable
+:variable:`CMAKE_XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING`
+if it is set when a target is created.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER.rst
new file mode 100644
index 0000000..3d315a2
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER.rst
@@ -0,0 +1,14 @@
+XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER
+----------------------------------------
+
+.. versionadded:: 3.13
+
+Whether to disable the ``Main Thread Checker``
+in the Diagnostics section of the generated Xcode scheme.
+
+This property is initialized by the value of the variable
+:variable:`CMAKE_XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER`
+if it is set when a target is created.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS.rst
new file mode 100644
index 0000000..2ca20f7
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS.rst
@@ -0,0 +1,14 @@
+XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS
+----------------------------------
+
+.. versionadded:: 3.13
+
+Whether to enable ``Dynamic Library Loads``
+in the Diagnostics section of the generated Xcode scheme.
+
+This property is initialized by the value of the variable
+:variable:`CMAKE_XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS` if it is set
+when a target is created.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE.rst
new file mode 100644
index 0000000..278c9ef
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE.rst
@@ -0,0 +1,14 @@
+XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE
+-------------------------------------
+
+.. versionadded:: 3.13
+
+Whether to enable ``Dynamic Linker API usage``
+in the Diagnostics section of the generated Xcode scheme.
+
+This property is initialized by the value of the variable
+:variable:`CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE` if it is set
+when a target is created.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_ENVIRONMENT.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_ENVIRONMENT.rst
new file mode 100644
index 0000000..16542f8
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_ENVIRONMENT.rst
@@ -0,0 +1,14 @@
+XCODE_SCHEME_ENVIRONMENT
+------------------------
+
+.. versionadded:: 3.13
+
+Specify environment variables that should be added to the Arguments
+section of the generated Xcode scheme.
+
+If set to a list of environment variables and values of the form
+``MYVAR=value`` those environment variables will be added to the
+scheme.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_EXECUTABLE.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_EXECUTABLE.rst
new file mode 100644
index 0000000..b453f10
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_EXECUTABLE.rst
@@ -0,0 +1,11 @@
+XCODE_SCHEME_EXECUTABLE
+-----------------------
+
+.. versionadded:: 3.13
+
+Specify path to executable in the Info section of the generated
+Xcode scheme. If not set the schema generator will select the
+current target if it is actually executable.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_GUARD_MALLOC.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_GUARD_MALLOC.rst
new file mode 100644
index 0000000..4b242a2
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_GUARD_MALLOC.rst
@@ -0,0 +1,14 @@
+XCODE_SCHEME_GUARD_MALLOC
+------------------------------
+
+.. versionadded:: 3.13
+
+Whether to enable ``Guard Malloc``
+in the Diagnostics section of the generated Xcode scheme.
+
+This property is initialized by the value of the variable
+:variable:`CMAKE_XCODE_SCHEME_GUARD_MALLOC` if it is set
+when a target is created.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP.rst
new file mode 100644
index 0000000..2a813aa
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP.rst
@@ -0,0 +1,15 @@
+XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP
+-------------------------------------
+
+.. versionadded:: 3.13
+
+Whether to enable the ``Main Thread Checker`` option
+``Pause on issues``
+in the Diagnostics section of the generated Xcode scheme.
+
+This property is initialized by the value of the variable
+:variable:`CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP` if it is set
+when a target is created.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_MALLOC_GUARD_EDGES.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_MALLOC_GUARD_EDGES.rst
new file mode 100644
index 0000000..750da74
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_MALLOC_GUARD_EDGES.rst
@@ -0,0 +1,14 @@
+XCODE_SCHEME_MALLOC_GUARD_EDGES
+-------------------------------
+
+.. versionadded:: 3.13
+
+Whether to enable ``Malloc Guard Edges``
+in the Diagnostics section of the generated Xcode scheme.
+
+This property is initialized by the value of the variable
+:variable:`CMAKE_XCODE_SCHEME_MALLOC_GUARD_EDGES` if it is set
+when a target is created.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_MALLOC_SCRIBBLE.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_MALLOC_SCRIBBLE.rst
new file mode 100644
index 0000000..4ebd21b
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_MALLOC_SCRIBBLE.rst
@@ -0,0 +1,14 @@
+XCODE_SCHEME_MALLOC_SCRIBBLE
+------------------------------
+
+.. versionadded:: 3.13
+
+Whether to enable ``Malloc Scribble``
+in the Diagnostics section of the generated Xcode scheme.
+
+This property is initialized by the value of the variable
+:variable:`CMAKE_XCODE_SCHEME_MALLOC_SCRIBBLE` if it is set
+when a target is created.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_MALLOC_STACK.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_MALLOC_STACK.rst
new file mode 100644
index 0000000..5afe34e
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_MALLOC_STACK.rst
@@ -0,0 +1,14 @@
+XCODE_SCHEME_MALLOC_STACK
+-------------------------
+
+.. versionadded:: 3.13
+
+Whether to enable ``Malloc Stack`` in the Diagnostics
+section of the generated Xcode scheme.
+
+This property is initialized by the value of the variable
+:variable:`CMAKE_XCODE_SCHEME_MALLOC_STACK` if it is set
+when a target is created.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_THREAD_SANITIZER.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_THREAD_SANITIZER.rst
new file mode 100644
index 0000000..cc774c4
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_THREAD_SANITIZER.rst
@@ -0,0 +1,14 @@
+XCODE_SCHEME_THREAD_SANITIZER
+-----------------------------
+
+.. versionadded:: 3.13
+
+Whether to enable ``Thread Sanitizer`` in the Diagnostics
+section of the generated Xcode scheme.
+
+This property is initialized by the value of the variable
+:variable:`CMAKE_XCODE_SCHEME_THREAD_SANITIZER` if it is set
+when a target is created.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_THREAD_SANITIZER_STOP.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_THREAD_SANITIZER_STOP.rst
new file mode 100644
index 0000000..3bb2596
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_THREAD_SANITIZER_STOP.rst
@@ -0,0 +1,14 @@
+XCODE_SCHEME_THREAD_SANITIZER_STOP
+----------------------------------
+
+.. versionadded:: 3.13
+
+Whether to enable ``Thread Sanitizer - Pause on issues``
+in the Diagnostics section of the generated Xcode scheme.
+
+This property is initialized by the value of the variable
+:variable:`CMAKE_XCODE_SCHEME_THREAD_SANITIZER_STOP` if it is set
+when a target is created.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER.rst
new file mode 100644
index 0000000..1146130
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER.rst
@@ -0,0 +1,14 @@
+XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER
+------------------------------------------
+
+.. versionadded:: 3.13
+
+Whether to enable ``Undefined Behavior Sanitizer``
+in the Diagnostics section of the generated Xcode scheme.
+
+This property is initialized by the value of the variable
+:variable:`CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER`
+if it is set when a target is created.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP.rst
new file mode 100644
index 0000000..358f298
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP.rst
@@ -0,0 +1,15 @@
+XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP
+-----------------------------------------------
+
+.. versionadded:: 3.13
+
+Whether to enable ``Undefined Behavior Sanitizer`` option
+``Pause on issues``
+in the Diagnostics section of the generated Xcode scheme.
+
+This property is initialized by the value of the variable
+:variable:`CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP`
+if it is set when a target is created.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_WORKING_DIRECTORY.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_WORKING_DIRECTORY.rst
new file mode 100644
index 0000000..d8d56fc
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_WORKING_DIRECTORY.rst
@@ -0,0 +1,15 @@
+XCODE_SCHEME_WORKING_DIRECTORY
+------------------------------
+
+.. versionadded:: 3.17
+
+Specify the ``Working Directory`` of the *Run* and *Profile*
+actions in the generated Xcode scheme. In case the value contains
+generator expressions those are evaluated.
+
+This property is initialized by the value of the variable
+:variable:`CMAKE_XCODE_SCHEME_WORKING_DIRECTORY` if it is set
+when a target is created.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_ZOMBIE_OBJECTS.rst b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_ZOMBIE_OBJECTS.rst
new file mode 100644
index 0000000..6030109
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCODE_SCHEME_ZOMBIE_OBJECTS.rst
@@ -0,0 +1,14 @@
+XCODE_SCHEME_ZOMBIE_OBJECTS
+------------------------------
+
+.. versionadded:: 3.13
+
+Whether to enable ``Zombie Objects``
+in the Diagnostics section of the generated Xcode scheme.
+
+This property is initialized by the value of the variable
+:variable:`CMAKE_XCODE_SCHEME_ZOMBIE_OBJECTS` if it is set
+when a target is created.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/prop_tgt/XCTEST.rst b/share/cmake-3.22/Help/prop_tgt/XCTEST.rst
new file mode 100644
index 0000000..67e9a70
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XCTEST.rst
@@ -0,0 +1,15 @@
+XCTEST
+------
+
+.. versionadded:: 3.3
+
+This target is a XCTest CFBundle on the Mac.
+
+This property will usually get set via the :command:`xctest_add_bundle`
+macro in :module:`FindXCTest` module.
+
+If a module library target has this property set to true it will be
+built as a CFBundle when built on the Mac.  It will have the directory
+structure required for a CFBundle.
+
+This property depends on :prop_tgt:`BUNDLE` to be effective.
diff --git a/share/cmake-3.22/Help/prop_tgt/XXX_OUTPUT_DIRECTORY.txt b/share/cmake-3.22/Help/prop_tgt/XXX_OUTPUT_DIRECTORY.txt
new file mode 100644
index 0000000..d38a96e
--- /dev/null
+++ b/share/cmake-3.22/Help/prop_tgt/XXX_OUTPUT_DIRECTORY.txt
@@ -0,0 +1,12 @@
+Output directory in which to build |XXX| target files.
+
+This property specifies the directory into which |xxx| target files
+should be built.  The property value may use
+:manual:`generator expressions <cmake-generator-expressions(7)>`.
+Multi-configuration generators (:ref:`Visual Studio <Visual Studio Generators>`,
+:generator:`Xcode`, :generator:`Ninja Multi-Config`) append a
+per-configuration subdirectory to the specified directory unless a generator
+expression is used.
+
+This property is initialized by the value of the
+|CMAKE_XXX_OUTPUT_DIRECTORY| variable if it is set when a target is created.
diff --git a/share/cmake-3.18/Help/prop_tgt/XXX_OUTPUT_NAME.txt b/share/cmake-3.22/Help/prop_tgt/XXX_OUTPUT_NAME.txt
similarity index 100%
rename from share/cmake-3.18/Help/prop_tgt/XXX_OUTPUT_NAME.txt
rename to share/cmake-3.22/Help/prop_tgt/XXX_OUTPUT_NAME.txt
diff --git a/share/cmake-3.18/Help/release/3.0.rst b/share/cmake-3.22/Help/release/3.0.rst
similarity index 100%
rename from share/cmake-3.18/Help/release/3.0.rst
rename to share/cmake-3.22/Help/release/3.0.rst
diff --git a/share/cmake-3.22/Help/release/3.1.rst b/share/cmake-3.22/Help/release/3.1.rst
new file mode 100644
index 0000000..3f4712b
--- /dev/null
+++ b/share/cmake-3.22/Help/release/3.1.rst
@@ -0,0 +1,425 @@
+CMake 3.1 Release Notes
+***********************
+
+.. only:: html
+
+  .. contents::
+
+Changes made since CMake 3.0 include the following.
+
+Documentation Changes
+=====================
+
+* A new :manual:`cmake-compile-features(7)` manual was added.
+
+New Features
+============
+
+Generators
+----------
+
+* The :generator:`Visual Studio 14 2015` generator was added.
+
+Windows Phone and Windows Store
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+* Generators for Visual Studio 11 (2012) and above learned to generate
+  projects for Windows Phone and Windows Store.  One may set the
+  :variable:`CMAKE_SYSTEM_NAME` variable to ``WindowsPhone``
+  or ``WindowsStore`` on the :manual:`cmake(1)` command-line
+  or in a :variable:`CMAKE_TOOLCHAIN_FILE` to activate these platforms.
+  Also set :variable:`CMAKE_SYSTEM_VERSION` to ``8.0`` or ``8.1`` to
+  specify the version of Windows to be targeted.
+
+NVIDIA Nsight Tegra
+^^^^^^^^^^^^^^^^^^^
+
+* Generators for Visual Studio 10 (2010) and above learned to generate
+  projects for NVIDIA Nsight Tegra Visual Studio Edition.  One may set
+  the :variable:`CMAKE_SYSTEM_NAME` variable to ``Android`` on the
+  :manual:`cmake(1)` command-line or in a :variable:`CMAKE_TOOLCHAIN_FILE`
+  to activate this platform.
+
+Syntax
+------
+
+* The :manual:`cmake-language(7)` syntax for :ref:`Variable References` and
+  :ref:`Escape Sequences` was simplified in order to allow a much faster
+  implementation.  See policy :policy:`CMP0053`.
+
+* The :command:`if` command no longer automatically dereferences
+  variables named in quoted or bracket arguments.  See policy
+  :policy:`CMP0054`.
+
+Commands
+--------
+
+* The :command:`add_custom_command` command learned to interpret
+  :manual:`cmake-generator-expressions(7)` in arguments to ``DEPENDS``.
+
+* The :command:`export(PACKAGE)` command learned to check the
+  :variable:`CMAKE_EXPORT_NO_PACKAGE_REGISTRY` variable to skip
+  exporting the package.
+
+* The :command:`file(STRINGS)` command gained a new ``ENCODING``
+  option to enable extraction of ``UTF-8`` strings.
+
+* The :command:`find_package` command learned to check the
+  :variable:`CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY` and
+  :variable:`CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY`
+  variables to skip searching the package registries.
+
+* The :command:`get_property` command learned a new ``INSTALL`` scope
+  for properties.
+
+* The :command:`install` command learned a ``MESSAGE_NEVER`` option
+  to avoid output during installation.
+
+* The :command:`set_property` command learned a new ``INSTALL`` scope
+  for properties.
+
+* The :command:`string` command learned a new ``GENEX_STRIP`` subcommand
+  which removes
+  :manual:`generator expression <cmake-generator-expressions(7)>`.
+
+* The :command:`string` command learned a new ``UUID`` subcommand
+  to generate a universally unique identifier.
+
+* New :command:`target_compile_features` command allows populating the
+  :prop_tgt:`COMPILE_FEATURES` target property, just like any other
+  build variable.
+
+* The :command:`target_sources` command was added to add to the
+  :prop_tgt:`SOURCES` target property.
+
+Variables
+---------
+
+* The Visual Studio generators for versions 8 (2005) and above
+  learned to read the target platform name from a new
+  :variable:`CMAKE_GENERATOR_PLATFORM` variable when it is
+  not specified as part of the generator name.  The platform
+  name may be specified on the :manual:`cmake(1)` command line
+  with the ``-A`` option, e.g. ``-G "Visual Studio 12 2013" -A x64``.
+
+* The :variable:`CMAKE_GENERATOR_TOOLSET` variable may now be
+  initialized in a toolchain file specified by the
+  :variable:`CMAKE_TOOLCHAIN_FILE` variable.  This is useful
+  when cross-compiling with the Xcode or Visual Studio
+  generators.
+
+* The :variable:`CMAKE_INSTALL_MESSAGE` variable was introduced to
+  optionally reduce output installation.
+
+Properties
+----------
+
+* New :prop_tgt:`CXX_STANDARD` and :prop_tgt:`CXX_EXTENSIONS` target
+  properties may specify values which CMake uses to compute required
+  compile options such as ``-std=c++11`` or ``-std=gnu++11``. The
+  :variable:`CMAKE_CXX_STANDARD` and :variable:`CMAKE_CXX_EXTENSIONS`
+  variables may be set to initialize the target properties.
+
+* New :prop_tgt:`C_STANDARD` and :prop_tgt:`C_EXTENSIONS` target
+  properties may specify values which CMake uses to compute required
+  compile options such as ``-std=c11`` or ``-std=gnu11``. The
+  :variable:`CMAKE_C_STANDARD` and :variable:`CMAKE_C_EXTENSIONS`
+  variables may be set to initialize the target properties.
+
+* New :prop_tgt:`COMPILE_FEATURES` target property may contain a list
+  of features required to compile a target.  CMake uses this
+  information to ensure that the compiler in use is capable of building
+  the target, and to add any necessary compile flags to support language
+  features.
+
+* New :prop_tgt:`COMPILE_PDB_NAME` and
+  :prop_tgt:`COMPILE_PDB_OUTPUT_DIRECTORY` target properties
+  were introduced to specify the MSVC compiler program database
+  file location (``cl /Fd``).  This complements the existing
+  :prop_tgt:`PDB_NAME` and :prop_tgt:`PDB_OUTPUT_DIRECTORY`
+  target properties that specify the linker program database
+  file location (``link /pdb``).
+
+* The :prop_tgt:`INTERFACE_LINK_LIBRARIES` target property now supports
+  a ``$<LINK_ONLY:...>``
+  :manual:`generator expression <cmake-generator-expressions(7)>`.
+
+* A new :prop_tgt:`INTERFACE_SOURCES` target property was introduced. This is
+  consumed by dependent targets, which compile and link the listed sources.
+
+* The :prop_tgt:`SOURCES` target property now contains
+  :manual:`generator expression <cmake-generator-expressions(7)>`
+  such as ``TARGET_OBJECTS`` when read at configure time, if
+  policy :policy:`CMP0051` is ``NEW``.
+
+* The :prop_tgt:`SOURCES` target property now generally supports
+  :manual:`generator expression <cmake-generator-expressions(7)>`.  The
+  generator expressions may be used in the :command:`add_library` and
+  :command:`add_executable` commands.
+
+* It is now possible to write and append to the :prop_tgt:`SOURCES` target
+  property.  The :variable:`CMAKE_DEBUG_TARGET_PROPERTIES` variable may be
+  used to trace the origin of sources.
+
+* A :prop_sf:`VS_DEPLOYMENT_CONTENT` source file property was added
+  to tell the Visual Studio generators to mark content for deployment
+  in Windows Phone and Windows Store projects.
+
+* A :prop_sf:`VS_DEPLOYMENT_LOCATION` source file property was added
+  to tell the Visual Studio generators the relative location of content
+  marked for deployment in Windows Phone and Windows Store projects.
+
+* The :prop_tgt:`VS_WINRT_COMPONENT` target property was created to
+  tell Visual Studio generators to compile a shared library as a
+  Windows Runtime (WinRT) component.
+
+* The :generator:`Xcode` generator learned to check source
+  file properties  :prop_sf:`XCODE_EXPLICIT_FILE_TYPE` and
+  :prop_sf:`XCODE_LAST_KNOWN_FILE_TYPE` for a custom Xcode
+  file reference type.
+
+Modules
+-------
+
+* The :module:`BundleUtilities` module learned to resolve and replace
+  ``@rpath`` placeholders on OS X to correctly bundle applications
+  using them.
+
+* The :module:`CMakePackageConfigHelpers` module
+  :command:`configure_package_config_file` command learned a new
+  ``INSTALL_PREFIX`` option to generate package configuration files
+  meant for a prefix other than :variable:`CMAKE_INSTALL_PREFIX`.
+
+* The :module:`CheckFortranSourceCompiles` module was added to
+  provide a ``CHECK_Fortran_SOURCE_COMPILES`` macro.
+
+* The :module:`ExternalData` module learned to tolerate a ``DATA{}``
+  reference to a missing source file with a warning instead of
+  rejecting it with an error.  This helps developers write new
+  ``DATA{}`` references to test reference outputs that have not
+  yet been created.
+
+* The :module:`ExternalProject` module learned to support lzma-compressed
+  source tarballs with ``.7z``, ``.tar.xz``, and ``.txz`` extensions.
+
+* The :module:`ExternalProject` module ``ExternalProject_Add`` command
+  learned a new ``BUILD_ALWAYS`` option to cause the external project
+  build step to run every time the host project is built.
+
+* The :module:`ExternalProject` module ``ExternalProject_Add`` command
+  learned a new ``EXCLUDE_FROM_ALL`` option to cause the external
+  project target to have the :prop_tgt:`EXCLUDE_FROM_ALL` target
+  property set.
+
+* The :module:`ExternalProject` module ``ExternalProject_Add_Step`` command
+  learned a new ``EXCLUDE_FROM_MAIN`` option to cause the step to not be
+  a direct dependency of the main external project target.
+
+* The :module:`ExternalProject` module ``ExternalProject_Add`` command
+  learned a new ``DOWNLOAD_NO_PROGRESS`` option to disable progress
+  output while downloading the source tarball.
+
+* The :module:`FeatureSummary` module ``feature_summary`` API
+  learned to accept multiple values for the ``WHAT`` option and
+  combine them appropriately.
+
+* The :module:`FindCUDA` module learned to support ``fatbin`` and ``cubin``
+  modules.
+
+* The :module:`FindGTest` module ``gtest_add_tests`` macro learned
+  a new ``AUTO`` option to automatically read the :prop_tgt:`SOURCES`
+  target property of the test executable and scan the source files
+  for tests to be added.
+
+* The :module:`FindGLEW` module now provides imported targets.
+
+* The :module:`FindGLUT` module now provides imported targets.
+
+* The :module:`FindHg` module gained a new ``Hg_WC_INFO`` macro to
+  help run ``hg`` to extract information about a Mercurial work copy.
+
+* The :module:`FindOpenCL` module was introduced.
+
+* The :module:`FindOpenMP` module learned to support Fortran.
+
+* The :module:`FindPkgConfig` module learned to use the ``PKG_CONFIG``
+  environment variable value as the ``pkg-config`` executable, if set.
+
+* The :module:`FindXercesC` module was introduced.
+
+* The :module:`FindZLIB` module now provides imported targets.
+
+* The :module:`GenerateExportHeader` module ``generate_export_header``
+  function learned to allow use with :ref:`Object Libraries`.
+
+* The :module:`InstallRequiredSystemLibraries` module gained a new
+  ``CMAKE_INSTALL_OPENMP_LIBRARIES`` option to install MSVC OpenMP
+  runtime libraries.
+
+* The :module:`UseSWIG` module learned to detect the module name
+  from ``.i`` source files if possible to avoid the need to set
+  the ``SWIG_MODULE_NAME`` source file property explicitly.
+
+* The :module:`WriteCompilerDetectionHeader` module was added to allow
+  creation of a portable header file for compiler optional feature detection.
+
+Generator Expressions
+---------------------
+
+* New ``COMPILE_FEATURES``
+  :manual:`generator expression <cmake-generator-expressions(7)>` allows
+  setting build properties based on available compiler features.
+
+CTest
+-----
+
+* The :command:`ctest_coverage` command learned to read variable
+  ``CTEST_COVERAGE_EXTRA_FLAGS`` to set ``CoverageExtraFlags``.
+
+* The :command:`ctest_coverage` command learned to support
+  Intel coverage files with the ``codecov`` tool.
+
+* The :command:`ctest_memcheck` command learned to support sanitizer
+  modes, including ``AddressSanitizer``, ``MemorySanitizer``,
+  ``ThreadSanitizer``, and ``UndefinedBehaviorSanitizer``.
+  Options may be set using the new
+  :variable:`CTEST_MEMORYCHECK_SANITIZER_OPTIONS` variable.
+
+CPack
+-----
+
+* :manual:`cpack(1)` gained an ``IFW`` generator to package using
+  Qt Framework Installer tools.  See the :cpack_gen:`CPack IFW Generator`.
+
+* :manual:`cpack(1)` gained ``7Z`` and ``TXZ`` generators supporting
+  lzma-compressed archives.
+
+* The :cpack_gen:`CPack DEB Generator` learned a new
+  :variable:`CPACK_DEBIAN_COMPRESSION_TYPE` variable to set the
+  tarball compression type.
+
+* The :cpack_gen:`CPack WIX Generator` learned to support
+  a :prop_inst:`CPACK_WIX_ACL` installed file property to
+  specify an Access Control List.
+
+Other
+-----
+
+* The :manual:`cmake(1)` ``-E`` option learned a new ``env`` command.
+
+* The :manual:`cmake(1)` ``-E tar`` command learned to support
+  lzma-compressed files.
+
+* :ref:`Object Libraries` may now have extra sources that do not
+  compile to object files so long as they would not affect linking
+  of a normal library (e.g. ``.dat`` is okay but not ``.def``).
+
+* Visual Studio generators for VS 8 and later learned to support
+  the ``ASM_MASM`` language.
+
+* The Visual Studio generators learned to treat ``.hlsl`` source
+  files as High Level Shading Language sources (using ``FXCompile``
+  in ``.vcxproj`` files).  Source file properties
+  :prop_sf:`VS_SHADER_TYPE`, :prop_sf:`VS_SHADER_MODEL`, and
+  :prop_sf:`VS_SHADER_ENTRYPOINT` were added added to specify the
+  shader type, model, and entry point name.
+
+New Diagnostics
+===============
+
+* Policy :policy:`CMP0052` introduced to control directories in the
+  :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` of exported targets.
+
+Deprecated and Removed Features
+===============================
+
+* In CMake 3.0 the :command:`target_link_libraries` command
+  accidentally began allowing unquoted arguments to use
+  :manual:`generator expressions <cmake-generator-expressions(7)>`
+  containing a (``;`` separated) list within them.  For example::
+
+    set(libs B C)
+    target_link_libraries(A PUBLIC $<BUILD_INTERFACE:${libs}>)
+
+  This is equivalent to writing::
+
+    target_link_libraries(A PUBLIC $<BUILD_INTERFACE:B C>)
+
+  and was never intended to work.  It did not work in CMake 2.8.12.
+  Such generator expressions should be in quoted arguments::
+
+    set(libs B C)
+    target_link_libraries(A PUBLIC "$<BUILD_INTERFACE:${libs}>")
+
+  CMake 3.1 again requires the quotes for this to work correctly.
+
+* Prior to CMake 3.1 the Makefile generators did not escape ``#``
+  correctly inside make variable assignments used in generated
+  makefiles, causing them to be treated as comments.  This made
+  code like::
+
+    add_compile_options(-Wno-#pragma-messages)
+
+  not work in Makefile generators, but work in other generators.
+  Now it is escaped correctly, making the behavior consistent
+  across generators.  However, some projects may have tried to
+  workaround the original bug with code like::
+
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-\\#pragma-messages")
+
+  This added the needed escape for Makefile generators but also
+  caused other generators to pass ``-Wno-\#pragma-messages`` to
+  the shell, which would work only in POSIX shells.
+  Unfortunately the escaping fix could not be made in a compatible
+  way so this platform- and generator-specific workaround no
+  longer works.  Project code may test the :variable:`CMAKE_VERSION`
+  variable value to make the workaround version-specific too.
+
+* Callbacks established by the :command:`variable_watch` command will no
+  longer receive the ``ALLOWED_UNKNOWN_READ_ACCESS`` access type when
+  the undocumented ``CMAKE_ALLOW_UNKNOWN_VARIABLE_READ_ACCESS`` variable is
+  set.  Uninitialized variable accesses will always be reported as
+  ``UNKNOWN_READ_ACCESS``.
+
+* The :module:`CMakeDetermineVSServicePack` module now warns that
+  it is deprecated and should not longer be used.  Use the
+  :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable instead.
+
+* The :module:`FindITK` module has been removed altogether.
+  It was a thin-wrapper around ``find_package(ITK ... NO_MODULE)``.
+  This produces much clearer error messages when ITK is not found.
+
+* The :module:`FindVTK` module has been removed altogether.
+  It was a thin-wrapper around ``find_package(VTK ... NO_MODULE)``.
+  This produces much clearer error messages when VTK is not found.
+
+  The module also provided compatibility support for finding VTK 4.0.
+  This capability has been dropped.
+
+Other Changes
+=============
+
+* The :manual:`cmake-gui(1)` learned to capture output from child
+  processes started by the :command:`execute_process` command
+  and display it in the output window.
+
+* The :manual:`cmake-language(7)` internal implementation of generator
+  expression and list expansion parsers have been optimized and shows
+  non-trivial speedup on large projects.
+
+* The Makefile generators learned to use response files with GNU tools
+  on Windows to pass library directories and names to the linker.
+
+* When generating linker command-lines, CMake now avoids repeating
+  items corresponding to SHARED library targets.
+
+* Support for the Open Watcom compiler has been overhauled.
+  The :variable:`CMAKE_<LANG>_COMPILER_ID` is now ``OpenWatcom``,
+  and the :variable:`CMAKE_<LANG>_COMPILER_VERSION` now uses
+  the Open Watcom external version numbering.  The external
+  version numbers are lower than the internal version number
+  by 11.
+
+* The ``cmake-mode.el`` major Emacs editing mode no longer
+  treats ``_`` as part of words, making it more consistent
+  with other major modes.
diff --git a/share/cmake-3.18/Help/release/3.10.rst b/share/cmake-3.22/Help/release/3.10.rst
similarity index 100%
rename from share/cmake-3.18/Help/release/3.10.rst
rename to share/cmake-3.22/Help/release/3.10.rst
diff --git a/share/cmake-3.18/Help/release/3.11.rst b/share/cmake-3.22/Help/release/3.11.rst
similarity index 100%
rename from share/cmake-3.18/Help/release/3.11.rst
rename to share/cmake-3.22/Help/release/3.11.rst
diff --git a/share/cmake-3.18/Help/release/3.12.rst b/share/cmake-3.22/Help/release/3.12.rst
similarity index 100%
rename from share/cmake-3.18/Help/release/3.12.rst
rename to share/cmake-3.22/Help/release/3.12.rst
diff --git a/share/cmake-3.18/Help/release/3.13.rst b/share/cmake-3.22/Help/release/3.13.rst
similarity index 100%
rename from share/cmake-3.18/Help/release/3.13.rst
rename to share/cmake-3.22/Help/release/3.13.rst
diff --git a/share/cmake-3.18/Help/release/3.14.rst b/share/cmake-3.22/Help/release/3.14.rst
similarity index 100%
rename from share/cmake-3.18/Help/release/3.14.rst
rename to share/cmake-3.22/Help/release/3.14.rst
diff --git a/share/cmake-3.22/Help/release/3.15.rst b/share/cmake-3.22/Help/release/3.15.rst
new file mode 100644
index 0000000..6b1a800
--- /dev/null
+++ b/share/cmake-3.22/Help/release/3.15.rst
@@ -0,0 +1,396 @@
+CMake 3.15 Release Notes
+************************
+
+.. only:: html
+
+  .. contents::
+
+Changes made since CMake 3.14 include the following.
+
+New Features
+============
+
+Generators
+----------
+
+* The :generator:`Xcode` generator now supports per-target schemes.
+  See the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable and
+  :prop_tgt:`XCODE_GENERATE_SCHEME` target property.
+
+* The :generator:`Green Hills MULTI` generator has been updated:
+
+  * It now supports the :command:`add_custom_command` and
+    :command:`add_custom_target` commands.
+
+  * It is now available on Linux.
+
+Languages
+---------
+
+* Preliminary support for the ``Swift`` language was added to the
+  :generator:`Ninja` generator:
+
+  * Use the :envvar:`SWIFTC` environment variable to specify a compiler.
+
+  * The :prop_tgt:`Swift_DEPENDENCIES_FILE` target property and
+    :prop_sf:`Swift_DEPENDENCIES_FILE` source file property were added
+    to customize dependency files.
+
+  * The :prop_tgt:`Swift_MODULE_NAME` target property was added to
+    customize the Swift module name.
+
+  * The :prop_sf:`Swift_DIAGNOSTICS_FILE` source property was added to
+    indicate where to write the serialized Swift diagnostics.
+
+  The Swift support is experimental, not considered stable, and may change
+  in future releases of CMake.
+
+Compilers
+---------
+
+* The ``Clang`` compiler variant on Windows that targets the MSVC ABI
+  but has a GNU-like command line is now supported.
+
+* Support for the Clang-based ARM compiler was added with compiler id
+  ``ARMClang``.
+
+* Support was added for the IAR compiler architectures Renesas RX,
+  RL78, RH850 and Texas Instruments MSP430.
+
+* Support was added for the IAR compilers built for Linux (IAR BuildLx).
+
+Command-Line
+------------
+
+* The :envvar:`CMAKE_GENERATOR` environment variable was added
+  to specify a default generator to use when :manual:`cmake(1)` is
+  run without a ``-G`` option.  Additionally, environment variables
+  :envvar:`CMAKE_GENERATOR_PLATFORM`, :envvar:`CMAKE_GENERATOR_TOOLSET`,
+  and :envvar:`CMAKE_GENERATOR_INSTANCE` were created to configure
+  the generator.
+
+* The :manual:`cmake(1)` ``--build`` tool ``--target`` parameter gained support
+  for multiple targets, e.g. ``cmake --build . --target Library1 Library2``.
+  It now also has a short form ``-t`` alias, e.g.
+  ``cmake --build . -t Library1 Library2``.
+
+* The :manual:`cmake(1)` command gained a new ``--install`` option.
+  This may be used after building a project to run installation without
+  using the generated build system or the native build tool.
+
+* The :manual:`cmake(1)` command learned a new CLI option ``--loglevel``.
+
+* The :manual:`cmake(1)` ``-E remove_directory`` command-line tool learned
+  to support removing multiple directories.
+
+* The :manual:`cmake(1)` ``-E tar`` tool has been improved:
+
+  * It now continues adding files to an archive even if some of the files
+    are not readable.  This behavior is more consistent with the
+    classic ``tar`` tool.
+
+  * It now parses all flags, and if an invalid flag was provided, a
+    warning is issued.
+
+  * It now displays an error if no action flag was specified, along with a
+    list of possible actions: ``t`` (list), ``c`` (create) or ``x`` (extract).
+
+  * It now supports extracting (``-x``) or listing (``-t``) only specific
+    files or directories.
+
+  * It now supports Zstandard compression with a ``--zstd`` option.
+    Zstandard was designed to give a compression ratio comparable to that
+    of the DEFLATE (zip) algorithm, but faster, especially for decompression.
+
+Commands
+--------
+
+* The :command:`add_custom_command` and :command:`add_custom_target` commands
+  gained a new ``JOB_POOL`` option that works with the :generator:`Ninja`
+  generator to set the pool variable on the build statement.
+
+* The :command:`add_library` command ``ALIAS`` option learned to support
+  import libraries of the ``UNKNOWN`` type.
+
+* The :command:`cmake_parse_arguments` command gained an additional
+  ``<prefix>_KEYWORDS_MISSING_VALUES`` output variable to report
+  keyword arguments that were given by the caller with no values.
+
+* The :command:`execute_process` command gained a ``COMMAND_ECHO`` option
+  and supporting :variable:`CMAKE_EXECUTE_PROCESS_COMMAND_ECHO` variable
+  to enable echoing of the command-line string before execution.
+
+* The :command:`file(INSTALL)` command learned a new argument,
+  ``FOLLOW_SYMLINK_CHAIN``, which can be used to recursively resolve and
+  install symlinks.
+
+* :command:`list` learned new sub-commands:
+  ``PREPEND``, ``POP_FRONT`` and ``POP_BACK``.
+
+* The :command:`message` command learned new types:
+  ``NOTICE``, ``VERBOSE``, ``DEBUG`` and ``TRACE``.
+
+* The :command:`string` learned a new sub-command ``REPEAT``.
+
+Variables
+---------
+
+* The :variable:`CMAKE_CROSSCOMPILING_EMULATOR` variable and corresponding
+  :prop_tgt:`CROSSCOMPILING_EMULATOR` target property learned to support
+  arguments to the emulator.
+
+* The :variable:`CMAKE_FIND_PACKAGE_PREFER_CONFIG` variable was added to tell
+  :command:`find_package` calls to look for a package configuration
+  file first even if a find module is available.
+
+* The :variable:`CMAKE_FRAMEWORK` variable was added to initialize the
+  :prop_tgt:`FRAMEWORK` property on all targets.
+
+* The :variable:`CMAKE_VS_JUST_MY_CODE_DEBUGGING` variable and
+  :prop_tgt:`VS_JUST_MY_CODE_DEBUGGING` target property were added to
+  enable the Just My Code feature of the Visual Studio Debugger when
+  compiling with MSVC cl 19.05 and higher.
+
+* The :variable:`CMAKE_MSVC_RUNTIME_LIBRARY` variable and
+  :prop_tgt:`MSVC_RUNTIME_LIBRARY` target property were introduced to
+  select the runtime library used by compilers targeting the MSVC ABI.
+  See policy :policy:`CMP0091`.
+
+* The :variable:`CMAKE_PROJECT_INCLUDE` and
+  :variable:`CMAKE_PROJECT_INCLUDE_BEFORE` variables were added to allow
+  injection of custom code at the sites of :command:`project` calls
+  without knowing the project name a priori.
+
+Properties
+----------
+
+* The :prop_tgt:`ADDITIONAL_CLEAN_FILES` target property and
+  :prop_dir:`ADDITIONAL_CLEAN_FILES` directory property were added.
+  They allow to register additional files that should be removed during
+  the clean stage.
+
+* The :prop_tgt:`PUBLIC_HEADER` and :prop_tgt:`PRIVATE_HEADER` properties
+  may now be set on :ref:`Interface Libraries`. The headers specified by those
+  properties can be installed using the :command:`install(TARGETS)` command by
+  passing the ``PUBLIC_HEADER`` and ``PRIVATE_HEADER`` arguments respectively.
+
+* The :prop_tgt:`VS_PACKAGE_REFERENCES` target property was added to
+  tell :ref:`Visual Studio Generators` to add references to ``nuget``
+  packages.
+
+* The :prop_tgt:`VS_PROJECT_IMPORT` target property was added to allow
+  managed Visual Studio project files to import external ``.props`` files.
+
+* The :prop_tgt:`VS_NO_SOLUTION_DEPLOY` target property was added to
+  tell :ref:`Visual Studio Generators` whether to deploy an artifact
+  to the WinCE or Windows Phone target device.
+
+Modules
+-------
+
+* The :module:`FindBoost` module was reworked to expose a more consistent
+  user experience between its "Config" and "Module" modes and with other
+  find modules in general.
+
+  * A new imported target ``Boost::headers`` is now defined (same
+    as ``Boost::boost``).
+
+  * New output variables ``Boost_VERSION_MACRO``,
+    ``Boost_VERSION_MAJOR``, ``Boost_VERSION_MINOR``,
+    ``Boost_VERSION_PATCH``, and ``Boost_VERSION_COUNT``
+    were added.
+
+  * The ``QUIET`` argument passed to :command:`find_package` is no
+    longer ignored in config mode.  Note that the CMake package shipped with
+    Boost ``1.70.0`` ignores the ``QUIET`` argument passed to
+    :command:`find_package`.  This is fixed in the next Boost release.
+
+  * The input switch ``Boost_DETAILED_FAILURE_MSG`` was removed.
+
+  * ``Boost_VERSION`` now reports the version in ``x.y.z``
+    format in module mode.  See policy :policy:`CMP0093`.
+
+* The :module:`FindCups` module now provides imported targets.
+
+* The :module:`FindEnvModules` module was added to use Lua- and TCL-based
+  environment modules in :ref:`CTest Scripts <CTest Script>`.
+
+* The :module:`FindGLEW` module now provides an interface more consistent
+  with what upstream GLEW provides in its own CMake package files.
+
+* The :module:`FindPkgConfig` now populates :prop_tgt:`INTERFACE_LINK_OPTIONS`
+  property of imported targets with other (non-library) linker flags.
+
+* The :module:`FindPostgreSQL` module learned to find debug and release
+  variants separately.
+
+* Modules :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
+  gained additional lookup strategies and controls, and a new default.
+  See policy :policy:`CMP0094`.
+
+* Modules :module:`FindPython`, :module:`FindPython2` and :module:`FindPython3`
+  gain a new target (respectively ``Python::Module``, ``Python2::Module``
+  and ``Python3::Module``) which can be used to develop Python modules.
+
+* Modules :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
+  gain capability to control how virtual environments are handled.
+
+* The :module:`UseSWIG` module learned to manage alternate library names
+  by passing ``-interface <library_name>`` for ``python`` language or
+  ``-dllimport <library_name>`` for ``CSharp`` language to the ``SWIG``
+  compiler.
+
+Generator Expressions
+---------------------
+
+* The :manual:`generator expressions <cmake-generator-expressions(7)>`
+  ``C_COMPILER_ID``, ``CXX_COMPILER_ID``, ``CUDA_COMPILER_ID``,
+  ``Fortran_COMPILER_ID``, ``COMPILE_LANGUAGE``, ``COMPILE_LANG_AND_ID``, and
+  ``PLATFORM_ID`` learned to support matching one value from a comma-separated
+  list.
+
+* The ``$<CUDA_COMPILER_ID:...>`` and ``$<CUDA_COMPILER_VERSION:...>``
+  :manual:`generator expressions <cmake-generator-expressions(7)>` were added.
+
+* The ``$<COMPILE_LANG_AND_ID:...>`` generator expression was introduced to
+  allow specification of compile options for target files based on the
+  :variable:`CMAKE_<LANG>_COMPILER_ID` and :prop_sf:`LANGUAGE` of
+  each source file.
+
+* A ``$<FILTER:list,INCLUDE|EXCLUDE,regex>``
+  :manual:`generator expression <cmake-generator-expressions(7)>`
+  has been added.
+
+* A ``$<REMOVE_DUPLICATES:list>``
+  :manual:`generator expression <cmake-generator-expressions(7)>`
+  has been added.
+
+* The ``$<SHELL_PATH:...>`` :manual:`generator expression
+  <cmake-generator-expressions(7)>` gained support for a list of paths.
+
+* New ``$<TARGET_FILE*>`` :manual:`generator expressions
+  <cmake-generator-expressions(7)>` were added to retrieve the prefix, base
+  name, and suffix of the file names of various artifacts:
+
+  * ``$<TARGET_FILE_PREFIX:...>``
+  * ``$<TARGET_FILE_BASE_NAME:...>``
+  * ``$<TARGET_FILE_SUFFIX:...>``
+  * ``$<TARGET_LINKER_FILE_PREFIX:...>``
+  * ``$<TARGET_LINKER_FILE_BASE_NAME:...>``
+  * ``$<TARGET_LINKER_FILE_SUFFIX:...>``
+  * ``$<TARGET_PDB_FILE_BASE_NAME:...>``
+
+* The ``$<TARGET_OBJECTS:...>`` :manual:`generator expression
+  <cmake-generator-expressions(7)>` is now supported on ``SHARED``,
+  ``STATIC``, ``MODULE`` libraries and executables.
+
+CTest
+-----
+
+* The :command:`ctest_submit` command learned a new option: ``BUILD_ID``.
+  This can be used to store the ID assigned to this build by CDash to a
+  variable.
+
+* The :command:`ctest_update` command learned to honor a new variable:
+  :variable:`CTEST_UPDATE_VERSION_OVERRIDE`. This can be used to specify
+  the current version of your source tree rather than using the update
+  command to discover the current version that is checked out.
+
+CPack
+-----
+
+* The :cpack_gen:`CPack IFW Generator` gained a new
+  :variable:`CPACK_IFW_PACKAGE_STYLE_SHEET` variable to customize the
+  installer stylesheet.
+
+Deprecated and Removed Features
+===============================
+
+* The :manual:`cmake-server(7)` mode has been deprecated and will be
+  removed from a future version of CMake.  Please port clients to use
+  the :manual:`cmake-file-api(7)` instead.
+
+* The :prop_dir:`ADDITIONAL_MAKE_CLEAN_FILES` directory property is now
+  deprecated.  Use the :prop_dir:`ADDITIONAL_CLEAN_FILES` directory property
+  instead.
+
+* The variable :variable:`CMAKE_AUTOMOC_RELAXED_MODE` is considered
+  deprecated.  Support still exists but will be removed in future versions.
+
+* The :command:`export(PACKAGE)` command now does nothing unless
+  enabled via :variable:`CMAKE_EXPORT_PACKAGE_REGISTRY`.
+  See policy :policy:`CMP0090`.
+
+* The :generator:`Xcode` generator now requires at least Xcode 5.
+
+* An explicit deprecation diagnostic was added for policy ``CMP0066``
+  (``CMP0065`` and below were already deprecated).
+  The :manual:`cmake-policies(7)` manual explains that the OLD behaviors
+  of all policies are deprecated and that projects should port to the
+  NEW behaviors.
+
+Other Changes
+=============
+
+* If a feature specified by :command:`target_compile_features` is available
+  in the compiler's default standard level, CMake 3.14 and below incorrectly
+  added unnecessary ``-std=`` flags that could lower the standard level.
+  This bug has been fixed in CMake 3.15.  This behavior change may expose
+  bugs in existing projects that were relying on undocumented implementation
+  details.  Specifying compile features only ensures that the compiler runs
+  in a mode that has those features, not that any specific standard level is
+  used or explicit ``-std=`` flag passed.
+
+* CMake learned how to compile C++14 with the IBM AIX XL compiler
+  and the SunPro compiler and to compile C++20 with the AppleClang compiler.
+
+* With MSVC-like compilers the value of :variable:`CMAKE_<LANG>_FLAGS`
+  no longer contains warning flags like ``/W3`` by default.
+  See policy :policy:`CMP0092`.
+
+* IBM Clang-based XL compilers that define ``__ibmxl__`` now use the
+  compiler id ``XLClang`` instead of ``XL``.  See policy :policy:`CMP0089`.
+
+* The :command:`file(REMOVE)` and :command:`file(REMOVE_RECURSE)` commands
+  were changed to ignore empty arguments with a warning instead of treating
+  them as a relative path and removing the contents of the current directory.
+
+Updates
+=======
+
+Changes made since CMake 3.15.0 include the following.
+
+3.15.1
+------
+
+* In CMake 3.15.0 support for the GNU-like ``Clang`` compiler targeting the
+  MSVC ABI implemented :variable:`CMAKE_CXX_STANDARD` values 98 and 11 using
+  the corresponding ``-std=`` flags.  However, these modes do not work with
+  the MSVC standard library.  Therefore CMake 3.15.1 passes C++14 standard
+  flags even for C++98 and C++11.  This is consistent with MSVC itself which
+  always runs in a mode aware of C++14.
+
+* Preliminary Swift support added in 3.15.0 has been updated.
+
+3.15.2
+------
+
+* In CMake 3.15.0 and 3.15.1 the :variable:`CMAKE_FIND_PACKAGE_PREFER_CONFIG`
+  variable caused the :command:`find_package` command to fail on a missing
+  package even without the ``REQUIRED`` option.  This has been fixed.
+
+3.15.3
+------
+
+* ``CrayPrgEnv`` compiler wrapper support has been updated for the 19.06
+  release of the Cray Programming Environment for which the default linking
+  mode on XC Cray systems is now dynamic instead of static.
+
+3.15.4
+------
+
+* In CMake 3.15.0 through 3.15.3, the :prop_dir:`EXCLUDE_FROM_ALL`
+  directory property was regressed from pre-3.14 behavior and caused
+  targets within the directory to be excluded even from its own "all".
+  This has been fixed.
+  The bug also existed in 3.14.0 through 3.14.6 and is fixed in 3.14.7.
diff --git a/share/cmake-3.22/Help/release/3.16.rst b/share/cmake-3.22/Help/release/3.16.rst
new file mode 100644
index 0000000..28273a7
--- /dev/null
+++ b/share/cmake-3.22/Help/release/3.16.rst
@@ -0,0 +1,324 @@
+CMake 3.16 Release Notes
+************************
+
+.. only:: html
+
+  .. contents::
+
+Changes made since CMake 3.15 include the following.
+
+New Features
+============
+
+Languages
+---------
+
+* CMake learned to support the Objective C (``OBJC``) and Objective C++
+  (``OBJCXX``) languages.  They may be enabled via the :command:`project`
+  and :command:`enable_language` commands.  When ``OBJC`` or ``OBJCXX``
+  is enabled, source files with the ``.m`` or ``.mm``, respectively,
+  will be compiled as Objective C or C++.  Otherwise they will be treated
+  as plain C++ sources as they were before.
+
+Compilers
+---------
+
+* The ``Clang`` compiler is now supported on ``Solaris``.
+
+Platforms
+---------
+
+* On AIX, executables using the :prop_tgt:`ENABLE_EXPORTS` target property
+  now produce a linker import file with a ``.imp`` extension in addition
+  to the executable file.  Plugins (created via :command:`add_library` with
+  the ``MODULE`` option) that use :command:`target_link_libraries` to link
+  to the executable for its symbols are now linked using the import file.
+  The :command:`install(TARGETS)` command now installs the import file as
+  an ``ARCHIVE`` artifact.
+
+* On AIX, runtime linking is no longer enabled by default.  CMake provides
+  the linker enough information to resolve all symbols up front.
+  One may manually enable runtime linking for shared libraries and/or
+  loadable modules by adding ``-Wl,-G`` to their link flags
+  (e.g. in the :variable:`CMAKE_SHARED_LINKER_FLAGS` or
+  :variable:`CMAKE_MODULE_LINKER_FLAGS` variable).
+  One may manually enable runtime linking for executables by adding
+  ``-Wl,-brtl`` to their link flags (e.g. in the
+  :variable:`CMAKE_EXE_LINKER_FLAGS` variable).
+
+Command-Line
+------------
+
+* :manual:`cmake(1)` ``-E`` now supports ``true`` and ``false`` commands,
+  which do nothing while returning exit codes of 0 and 1, respectively.
+
+* :manual:`cmake(1)` gained a ``--trace-redirect=<file>`` command line
+  option that can be used to redirect ``--trace`` output to a file instead
+  of ``stderr``.
+
+* The :manual:`cmake(1)` ``--loglevel`` command line option has been
+  renamed to ``--log-level`` to make it consistent with the naming of other
+  command line options.  The ``--loglevel`` option is still supported to
+  preserve backward compatibility.
+
+Commands
+--------
+
+* The :command:`add_test` command learned the option ``COMMAND_EXPAND_LISTS``
+  which causes lists in the ``COMMAND`` argument to be expanded, including
+  lists created by generator expressions.
+
+* The :command:`file` command learned a new sub-command,
+  ``GET_RUNTIME_DEPENDENCIES``, which allows you to recursively get the list of
+  libraries linked by an executable or library. This sub-command is intended as
+  a replacement for :module:`GetPrerequisites`.
+
+* The :command:`find_file`, :command:`find_library`, :command:`find_path`,
+  :command:`find_package`, and :command:`find_program` commands have learned to
+  check the following variables to control the default behavior for groups of
+  search locations:
+
+  * :variable:`CMAKE_FIND_USE_PACKAGE_ROOT_PATH` - Controls the default
+    behavior of searching the :variable:`<PackageName>_ROOT` variables.
+
+  * :variable:`CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH` - Controls the default
+    behavior of searching the CMake-specific environment variables.
+
+  * :variable:`CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH` - Controls the default
+    behavior of searching the standard system environment variables.
+
+  * :variable:`CMAKE_FIND_USE_CMAKE_PATH` - Controls the default behavior of
+    searching the CMake-specific cache variables.
+
+  * :variable:`CMAKE_FIND_USE_CMAKE_SYSTEM_PATH` - Controls the default
+    behavior of searching the platform-specific CMake variables.
+
+* The :command:`find_package` command has learned to check the
+  :variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY` variable to control the default
+  behavior of searching the CMake user package registry and to check the
+  :variable:`CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY` variable to control
+  the default behavior of searching the CMake system package registry.
+
+* The :command:`message` command learned indentation control with the new
+  :variable:`CMAKE_MESSAGE_INDENT` variable.
+
+* The :command:`target_precompile_headers` command was added to specify
+  a list of headers to precompile for faster compilation times.
+
+Variables
+---------
+
+* The :variable:`CMAKE_CUDA_RESOLVE_DEVICE_SYMBOLS` variable has been
+  introduced to optionally initialize the
+  :prop_tgt:`CUDA_RESOLVE_DEVICE_SYMBOLS` target property.
+
+* The :variable:`CMAKE_ECLIPSE_RESOURCE_ENCODING` variable was added to
+  specify the resource encoding for the the :generator:`Eclipse CDT4` extra
+  generator.
+
+* The :variable:`CMAKE_UNITY_BUILD` variable was added to initialize the
+  :prop_tgt:`UNITY_BUILD` target property to tell generators to batch
+  include source files for faster compilation times.
+
+Properties
+----------
+
+* The :prop_tgt:`BUILD_RPATH` and :prop_tgt:`INSTALL_RPATH` target properties
+  now support :manual:`generator expressions <cmake-generator-expressions(7)>`.
+
+* The :prop_tgt:`INSTALL_REMOVE_ENVIRONMENT_RPATH` target property was
+  added to remove compiler-defined ``RPATH`` entries from a target.
+  This property is initialized by the
+  :variable:`CMAKE_INSTALL_REMOVE_ENVIRONMENT_RPATH` variable.
+
+* The :prop_tgt:`PRECOMPILE_HEADERS` target property was added to specify
+  a list of headers to precompile for faster compilation times.
+  Set it using the :command:`target_precompile_headers` command.
+
+* The :prop_tgt:`UNITY_BUILD` target property was added to tell
+  generators to batch include source files for faster compilation
+  times.
+
+* The :prop_tgt:`VS_CONFIGURATION_TYPE` target property now supports
+  :manual:`generator expressions <cmake-generator-expressions(7)>`.
+
+* The :prop_tgt:`VS_DPI_AWARE` target property was added to tell
+  :ref:`Visual Studio Generators` to set the ``EnableDpiAwareness``
+  property in ``.vcxproj`` files.
+
+* The :prop_tgt:`XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING` target property was
+  added to tell the :generator:`Xcode` generator to set the value of the
+  ``Allow debugging when using document Versions Browser`` schema option.
+
+Modules
+-------
+
+* The :module:`FindDoxygen` module :command:`doxygen_add_docs` command
+  gained a new ``USE_STAMP_FILE`` option.  When this option present,
+  the custom target created by the command will only re-run Doxygen if
+  any of the source files have changed since the last successful run.
+
+* The :module:`FindGnuTLS` module now provides an imported target.
+
+* The :module:`FindPackageHandleStandardArgs` module
+  :command:`find_package_handle_standard_args` command gained
+  a new ``REASON_FAILURE_MESSAGE`` option to specify a message
+  giving the reason for the failure.
+
+* The :module:`FindPkgConfig` module :command:`pkg_search_module` macro
+  now defines a ``<prefix>_MODULE_NAME`` result variable containing the
+  first matching module name.
+
+* The :module:`FindPython3` and :module:`FindPython` modules gained
+  options to control which ``ABIs`` will be searched.
+
+* The :module:`FindPython3`, :module:`FindPython2`, and :module:`FindPython`
+  modules now support direct specification of artifacts via cache entries.
+
+Autogen
+-------
+
+* When using :prop_tgt:`AUTOMOC`, the new :variable:`CMAKE_AUTOMOC_PATH_PREFIX`
+  variable or :prop_tgt:`AUTOMOC_PATH_PREFIX` target property may be enabled
+  to generate the ``-p`` path prefix
+  option for ``moc``.  This ensures that ``moc`` output files are identical
+  on different build setups (given, that the headers compiled by ``moc`` are
+  in an :command:`include directory <target_include_directories>`).
+  Also it ensures that ``moc`` output files will compile correctly when the
+  source and/or build directory is a symbolic link.
+
+CTest
+-----
+
+* :manual:`ctest(1)` now has the ability to schedule tests based on resource
+  requirements for each test. See :ref:`ctest-resource-allocation` for
+  details.
+
+* A new test property, :prop_test:`SKIP_REGULAR_EXPRESSION`, has been added.
+  This property is similar to :prop_test:`FAIL_REGULAR_EXPRESSION` and
+  :prop_test:`PASS_REGULAR_EXPRESSION`, but with the same meaning as
+  :prop_test:`SKIP_RETURN_CODE`. This is useful, for example, in cases where
+  the user has no control over the return code of the test. For example, in
+  Catch2, the return value is the number of assertion failed, therefore it is
+  impossible to use it for :prop_test:`SKIP_RETURN_CODE`.
+
+CPack
+-----
+
+* :manual:`cpack(1)` learned support for multiple configurations for ``-C``
+  option.
+
+* The :cpack_gen:`CPack DEB Generator` is now able to format generic text
+  (usually used as the description for multiple CPack generators) according
+  to the `Debian Policy Manual`_.  See the
+  :variable:`CPACK_PACKAGE_DESCRIPTION_FILE` and
+  :variable:`CPACK_DEBIAN_<COMPONENT>_DESCRIPTION` variables.
+
+* The :cpack_gen:`CPack Archive Generator` learned to generate ``.tar.zst``
+  packages with Zstandard compression.
+
+.. _`Debian Policy Manual`: https://www.debian.org/doc/debian-policy/ch-controlfields.html#description
+
+Deprecated and Removed Features
+===============================
+
+* An explicit deprecation diagnostic was added for policy ``CMP0067``
+  (``CMP0066`` and below were already deprecated).
+  The :manual:`cmake-policies(7)` manual explains that the OLD behaviors
+  of all policies are deprecated and that projects should port to the
+  NEW behaviors.
+
+* The :variable:`CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY` variable has been
+  deprecated.  Use the :variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY` variable
+  instead.
+
+* The :module:`GetPrerequisites` module has been deprecated, as it has been
+  superseded by :command:`file(GET_RUNTIME_DEPENDENCIES)`.
+
+* The ``CPACK_INSTALL_SCRIPT`` variable has been deprecated in favor of the
+  new, more accurately named :variable:`CPACK_INSTALL_SCRIPTS` variable.
+
+Other Changes
+=============
+
+* The :manual:`cmake(1)` ``-C <initial-cache>`` option now evaluates the
+  initial cache script with :variable:`CMAKE_SOURCE_DIR` and
+  :variable:`CMAKE_BINARY_DIR` set to the top-level source and build trees.
+
+* The :manual:`cmake(1)` ``-E remove_directory`` command-line tool,
+  when given the path to a symlink to a directory, now removes just
+  the symlink.  It no longer removes content of the linked directory.
+
+* The :manual:`ctest(1)`  ``--build-makeprogram`` command-line option now
+  specifies the make program used when configuring a project with the
+  :generator:`Ninja` generator or the :ref:`Makefile Generators`.
+
+* The :module:`ExternalProject` module :command:`ExternalProject_Add` command
+  has been updated so that ``GIT_SUBMODULES ""`` initializes no submodules.
+  See policy :policy:`CMP0097`.
+
+* The :module:`FindGTest` module has been updated to recognize
+  MSVC build trees generated by GTest 1.8.1.
+
+* The :command:`project` command no longer strips leading zeros in version
+  components.  See policy :policy:`CMP0096`.
+
+* The Qt Compressed Help file is now named ``CMake.qch``, which no longer
+  contains the release version in the file name.  When CMake is upgraded
+  in-place, the name and location of this file will remain constant.
+  Tools such as IDEs, help viewers, etc. should now be able to refer to this
+  file at a fixed location that remains valid across CMake upgrades.
+
+* ``RPATH`` entries are properly escaped in the generated CMake scripts
+  used for installation.  See policy :policy:`CMP0095`.
+
+* When using :variable:`CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS` on Windows the
+  auto-generated exports are now updated only when the object files
+  providing the symbols are updated.
+
+Updates
+=======
+
+Changes made since CMake 3.16.0 include the following.
+
+3.16.2
+------
+
+* CMake 3.16.0 and 3.16.1 processed ``.hh`` files with :prop_tgt:`AUTOMOC`.
+  This was a behavior change from CMake 3.15 and below that can break
+  existing projects, so it has been reverted as of 3.16.2.
+
+3.16.5
+------
+
+* The :module:`FindPython`, :module:`FindPython2`, and :module:`FindPython3`
+  modules no longer create cache entries for ``Python{,2,3}_LIBRARY_RELEASE``
+  and ``Python{,2,3}_LIBRARY_DEBUG``.  Those values are always computed from
+  other results and so should not be cached.  The entries were created by
+  CMake 3.16.0 through 3.16.4 but were always ``FORCE``-set and could not
+  be meaningfully edited by users.
+
+  Additionally, the modules no longer expose their internal ``_Python*``
+  cache entries publicly.  CMake 3.16.0 through 3.16.4 accidentally
+  made them visible as advanced cache entries.
+
+3.16.7
+------
+
+* Selection of the Objective C or C++ compiler now considers the
+  :envvar:`CC` or :envvar:`CXX` environment variable if the
+  :envvar:`OBJC` or :envvar:`OBJCXX` environment variable is not set.
+
+* The :module:`FindPkgConfig` module now extracts include directories
+  prefixed with ``-isystem`` into the ``*_INCLUDE_DIRS`` variables and
+  :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` target properties.
+  Previously they would be places in ``*_CFLAGS_OTHER`` variables and
+  :prop_tgt:`INTERFACE_COMPILE_OPTIONS` target properties.
+
+3.16.9
+------
+
+* The default value of :variable:`CMAKE_AUTOMOC_PATH_PREFIX` was changed to
+  ``OFF`` because this feature can break existing projects that have
+  identically named header files in different include directories.
+  This restores compatibility with behavior of CMake 3.15 and below.
diff --git a/share/cmake-3.22/Help/release/3.17.rst b/share/cmake-3.22/Help/release/3.17.rst
new file mode 100644
index 0000000..abd7463
--- /dev/null
+++ b/share/cmake-3.22/Help/release/3.17.rst
@@ -0,0 +1,357 @@
+CMake 3.17 Release Notes
+************************
+
+.. only:: html
+
+  .. contents::
+
+Changes made since CMake 3.16 include the following.
+
+New Features
+============
+
+Generators
+----------
+
+* :manual:`cmake(1)` gained a :generator:`Ninja Multi-Config` generator,
+  which is similar to the :generator:`Ninja` generator but can be used to build
+  multiple configurations at once.
+
+* :ref:`Visual Studio Generators` learned to support per-config sources.
+  Previously only :ref:`Command-Line Build Tool Generators` supported them.
+
+* :ref:`Visual Studio Generators` for VS 2010 and above now support
+  specifying the ``VCTargetsPath`` value for project files in
+  :variable:`CMAKE_GENERATOR_TOOLSET` setting.
+
+* :ref:`Visual Studio Generators` for VS 2010 and above learned to
+  support .NET Standard and .NET Core.  See the
+  :prop_tgt:`DOTNET_TARGET_FRAMEWORK` target property and
+  associated :variable:`CMAKE_DOTNET_TARGET_FRAMEWORK` variable.
+
+Languages
+---------
+
+* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
+  now offers meta-features for the CUDA language standard levels
+  (e.g. ``cuda_std_03``, ``cuda_std_14``).  See
+  :prop_gbl:`CMAKE_CUDA_KNOWN_FEATURES`.
+
+Compilers
+---------
+
+* The IBM XL Fortran compiler is now supported by the :generator:`Ninja`
+  generator.
+
+Command-Line
+------------
+
+* :manual:`cmake(1)` gained a ``--debug-find`` command-line option to
+  enable additional human-readable output on where ``find_*`` commands search.
+
+* :manual:`cmake(1)` gained a ``--trace-format`` command-line option that
+  can be used to set the ``--trace`` output format. Currently, the old
+  human readable and the new JSON format are supported. The new JSON format
+  is easier to parse automatically than the existing format.
+
+* :manual:`cmake(1)` gained a ``-E rm`` command-line tool that can be
+  used to remove directories and files.  This supersedes the existing
+  ``-E remove`` and ``-E remove_directory`` tools and has better semantics.
+
+Commands
+--------
+
+* The :command:`add_custom_command` command learned to interpret paths in
+  ``DEPENDS`` arguments that are specified relative to the current
+  binary directory.
+
+* The :command:`foreach` command learned a new ``ZIP_LISTS`` option to iterate
+  over multiple lists simultaneously.
+
+* The :command:`load_cache(READ_WITH_PREFIX)` command mode is now allowed
+  when using ``cmake -P`` to :ref:`Run a Script <Script Processing Mode>`.
+
+* The :command:`message` command learned to output context provided in
+  the :variable:`CMAKE_MESSAGE_CONTEXT` variable for log levels
+  ``NOTICE`` and below.  Enable this output with the new ``--log-context``
+  command-line option or :variable:`CMAKE_MESSAGE_CONTEXT_SHOW` variable.
+
+* The :command:`message` command gained new keywords ``CHECK_START``,
+  ``CHECK_PASS`` and ``CHECK_FAIL``.
+
+* The :command:`target_compile_options` command now honors the ``BEFORE``
+  keyword more consistently.  See policy :policy:`CMP0101`.
+
+Variables
+---------
+
+* A :variable:`CMAKE_CTEST_ARGUMENTS` variable was added to specify a list
+  of command-line arguments passed to CTest when running through the
+  ``test`` (or ``RUN_TESTS``) target of the generated build system.
+
+* The following variables are now defined inside a :command:`function`:
+
+  - :variable:`CMAKE_CURRENT_FUNCTION`
+  - :variable:`CMAKE_CURRENT_FUNCTION_LIST_DIR`
+  - :variable:`CMAKE_CURRENT_FUNCTION_LIST_FILE`
+  - :variable:`CMAKE_CURRENT_FUNCTION_LIST_LINE`
+
+* The :variable:`CMAKE_CUDA_RUNTIME_LIBRARY` variable and
+  :prop_tgt:`CUDA_RUNTIME_LIBRARY` target property were introduced to
+  select the CUDA runtime library used when linking targets that
+  use CUDA.
+
+* The :variable:`CMAKE_FIND_DEBUG_MODE` variable was introduced to
+  print extra ``find_*`` call information during the cmake run to standard
+  error. Output is designed for human consumption and not for parsing.
+
+* The :variable:`CMAKE_EXPORT_COMPILE_COMMANDS` variable now takes its
+  initial value from the :envvar:`CMAKE_EXPORT_COMPILE_COMMANDS` environment
+  variable if no explicit configuration is given.
+
+* The :variable:`CMAKE_<LANG>_COMPILER_LAUNCHER` variable, if not set
+  explicitly, now takes its initial value from the
+  :envvar:`CMAKE_<LANG>_COMPILER_LAUNCHER` environment variable.
+
+* The :variable:`CMAKE_MESSAGE_LOG_LEVEL` variable can now be used
+  to persist a log level between CMake runs, unlike the ``--log-level``
+  command line option which only applies to that particular run.
+
+* The :variable:`CMAKE_XCODE_SCHEME_ENVIRONMENT` variable was added
+  to initialize the :prop_tgt:`XCODE_SCHEME_ENVIRONMENT` target property.
+
+* The :variable:`CMAKE_XCODE_SCHEME_WORKING_DIRECTORY` variable and
+  associated :prop_tgt:`XCODE_SCHEME_WORKING_DIRECTORY` target property
+  were added to tell the :generator:`Xcode` generator to set the value of
+  the ``Custom Working Directory`` schema option.
+
+Properties
+----------
+
+* The :prop_tgt:`AIX_EXPORT_ALL_SYMBOLS` target property and associated
+  :variable:`CMAKE_AIX_EXPORT_ALL_SYMBOLS` variable were created to
+  optionally explicitly disable automatic export of symbols from shared
+  libraries on AIX.
+
+* The :prop_tgt:`DEPRECATION` target property was added to mark
+  a target as deprecated.  If a linked target is marked as
+  deprecated, a warning with the deprecation message is issued
+  at generate time.
+
+* The :prop_tgt:`INSTALL_NAME_DIR` target property now supports
+  :manual:`generator expressions <cmake-generator-expressions(7)>`.
+  In particular, the ``$<INSTALL_PREFIX>`` generator expression can
+  be used to set the directory relative to the install-time prefix.
+
+* Target properties :prop_tgt:`MACHO_COMPATIBILITY_VERSION` and
+  :prop_tgt:`MACHO_CURRENT_VERSION` were added to set the
+  ``compatibility_version`` and ``curent_version``, respectively,
+  for Mach-O binaries.  For backwards compatibility, if these properties
+  are not set, :prop_tgt:`SOVERSION` and :prop_tgt:`VERSION`
+  are used respectively as fallbacks.
+
+* The :prop_tgt:`VS_DOTNET_DOCUMENTATION_FILE` target property was added
+  to tell :ref:`Visual Studio Generators` to generate a ``DocumentationFile``
+  reference in ``.csproj`` files.
+
+Modules
+-------
+
+* The :module:`ExternalProject` module :command:`ExternalProject_Add`
+  command gained a ``GIT_SUBMODULES_RECURSE`` option to specify whether
+  Git submodules should be updated recursively.  The default is on to
+  preserve existing behavior.
+
+* The :module:`FindCUDAToolkit` module was added to find the
+  CUDA Toolkit without enabling CUDA as a language.
+
+* The :module:`FindCURL` module learned to find CURL using
+  the ``CURLConfig.cmake`` package configuration file generated by
+  CURL's cmake buildsystem.  It also gained a new ``CURL_NO_CURL_CMAKE``
+  option to disable this behavior.
+
+* The :module:`FindFLEX` module's ``FLEX_TARGET`` command now runs ``flex``
+  with :variable:`CMAKE_CURRENT_BINARY_DIR` as the working directory.
+  See policy :policy:`CMP0098`.
+
+* The :module:`FindLibArchive` module now provides an imported target
+  for libarchive.
+
+* The :module:`FindPython` module has learned to find Python components
+  in active virtual environments managed by ``conda``.
+
+* The :module:`FindPython3` and :module:`FindPython` modules gained,
+  respectively, variable ``Python3_SOABI`` and ``Python_SOABI`` giving
+  the standard extension suffix for modules. Moreover, commands
+  ``Python3_add_library()`` and ``Python_add_library()`` gained the option
+  ``WITH_SOABI`` to prefix the library suffix with the value of ``SOABI``.
+
+* The :module:`FindLibXml2` module now provides an imported target for the
+  ``xmllint`` executable.
+
+Autogen
+-------
+
+* :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC` learned to process headers
+  with a ``.hh`` extension.  See policy :policy:`CMP0100`.
+
+CTest
+-----
+
+* The :variable:`CTEST_CONFIGURATION_TYPE` variable is now set from the
+  command line when :manual:`ctest(1)` is invoked with ``-C <cfg>``.
+
+* The :manual:`ctest(1)` tool gained support for Dr. Memory to run
+  memcheck runs.
+
+* The :manual:`ctest(1)` tool gained a ``--no-tests=<[error|ignore]>`` option
+  to explicitly set and unify the behavior between direct invocation and
+  script mode if no tests were found.
+
+* The :manual:`ctest(1)` tool gained a ``--repeat <mode>:<n>`` option
+  to specify conditions in which to repeat tests.  This generalizes
+  the existing ``--repeat-until-fail <n>`` option to add modes for
+  ``until-pass`` and ``after-timeout``.
+
+* The :command:`ctest_test` command gained a ``REPEAT <mode>:<n>`` option
+  to specify conditions in which to repeat tests.
+
+CPack
+-----
+
+* The :cpack_gen:`CPack DragNDrop Generator` learned to use
+  the :variable:`CPACK_DMG_<component>_FILE_NAME` variable
+  to set a custom filename when packaging components into
+  their own DMGs.
+
+* The :cpack_gen:`CPack DragNDrop Generator` learned to handle
+  RTF formatted license files.  When :variable:`CPACK_DMG_SLA_DIR`
+  variable is set, ``<language>.license.rtf`` is considered, but
+  only as a fallback when the plaintext (``.txt``) file is not found
+  in order to maintain backwards compatibility.
+
+* The :cpack_gen:`CPack NSIS Generator` gained a new variable
+  :variable:`CPACK_NSIS_MUI_HEADERIMAGE` to set the header image.
+  To not break existing setups, it still defaults to
+  :variable:`CPACK_PACKAGE_ICON` if the new variable is not set.
+
+* The :cpack_gen:`CPack NSIS Generator` now supports
+  :variable:`CPACK_NSIS_UNINSTALL_NAME`.
+  This can be used to specify the name of the Uninstall program.
+
+* The :cpack_gen:`CPack NSIS Generator` now supports
+  :variable:`CPACK_NSIS_WELCOME_TITLE` and
+  :variable:`CPACK_NSIS_WELCOME_TITLE_3LINES`.
+  These can be used to specify the welcome page title and display it in 3 lines.
+
+* The :cpack_gen:`CPack NSIS Generator` now supports
+  :variable:`CPACK_NSIS_FINISH_TITLE` and
+  :variable:`CPACK_NSIS_FINISH_TITLE_3LINES`.
+  These can be used to specify the finish page title and display it in 3 lines.
+
+* The :cpack_gen:`CPack productbuild Generator` gained support for a
+  :variable:`CPACK_PRODUCTBUILD_BACKGROUND` variable to specify a background
+  image for the macOS installer.
+
+Other
+-----
+
+* :manual:`ccmake(1)` now displays cache values using colors
+  based on the entry type if the terminal supports color.
+
+* :manual:`ccmake(1)` now displays messages and a progress bar during
+  configure and generate.  It will keep the output displayed if any
+  errors or warnings occurred.
+
+Deprecated and Removed Features
+===============================
+
+* An explicit deprecation diagnostic was added for policy ``CMP0068``
+  and policy ``CMP0069`` (``CMP0067`` and below were already deprecated).
+  The :manual:`cmake-policies(7)` manual explains that the OLD behaviors
+  of all policies are deprecated and that projects should port to the
+  NEW behaviors.
+
+* The :cpack_gen:`CPack PackageMaker Generator` generator has been
+  deprecated because Xcode no longer distributes the PackageMaker tools.
+  The undocumented ``OSXX11`` generator has also been deprecated.
+
+* The :manual:`cmake(1)` command-line ``-E remove`` and ``-E remove_directory``
+  tools are deprecated in favor of the new ``-E rm`` tool.  The older tools
+  always returned 0 if a named path did not exist even without the force
+  option and cannot be fixed without breaking compatibility, and so have
+  been superseded.
+
+* The :cpack_gen:`CPack NSIS Generator` now requires NSIS 3.0 or later.
+
+Other Changes
+=============
+
+* The :manual:`file API <cmake-file-api(7)>` index file now emits a
+  ``multiConfig`` flag specifying whether or not the generator supports
+  multiple output configurations.
+
+* Target link properties :prop_tgt:`INTERFACE_LINK_OPTIONS`,
+  :prop_tgt:`INTERFACE_LINK_DIRECTORIES` and
+  :prop_tgt:`INTERFACE_LINK_DEPENDS` are now transitive over private
+  dependencies on static libraries.
+  See policy :policy:`CMP0099`.
+
+* When using MinGW tools, the :command:`find_library` command no longer
+  finds ``.dll`` files by default.  Instead, it expects ``.dll.a`` import
+  libraries to be available.
+
+* The :generator:`MinGW Makefiles` generator no longer issues an error if
+  ``sh.exe`` is present in the environment's ``PATH``.
+
+* The :generator:`Ninja` generator now prefers the first ninja build
+  tool to appear in the ``PATH`` no matter whether it is called
+  ``ninja-build``, ``ninja``, or ``samu``.  Previously the first
+  of those names to appear anywhere in the ``PATH`` would be preferred.
+
+* With SDCC the ``sdar`` tool is now preferred over ``sdcclib`` as librarian.
+  The latter was deprecated by SDCC 3.2.0 and removed in SDCC 3.8.6.
+
+* With SDCC the default flags no longer include any target-specific flags.
+  Previously the default flags were hard-coded for 8051.
+
+* The :variable:`CMAKE_VS_GLOBALS` variable value now applies during
+  compiler identification and in targets created by the
+  :command:`add_custom_target` command.
+
+* The :generator:`Xcode` generator no longer hard-codes ``-Wmost``,
+  ``-Wno-four-char-constants``, and ``-Wno-unknown-pragmas`` warning flags.
+
+Updates
+=======
+
+Changes made since CMake 3.17.0 include the following.
+
+3.17.1
+------
+
+* CMake 3.17.0 updated the :cpack_gen:`CPack NSIS Generator` with changes
+  that require NSIS 3.0 or later.  CMake 3.17.1 now enforces the use
+  of a sufficiently new version.
+
+3.17.3
+------
+
+* Selection of the Objective C or C++ compiler now considers the
+  :envvar:`CC` or :envvar:`CXX` environment variable if the
+  :envvar:`OBJC` or :envvar:`OBJCXX` environment variable is not set.
+
+* The :module:`FindPkgConfig` module now extracts include directories
+  prefixed with ``-isystem`` into the ``*_INCLUDE_DIRS`` variables and
+  :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` target properties.
+  Previously they would be places in ``*_CFLAGS_OTHER`` variables and
+  :prop_tgt:`INTERFACE_COMPILE_OPTIONS` target properties.
+
+3.17.5
+------
+
+* The default value of :variable:`CMAKE_AUTOMOC_PATH_PREFIX` was changed to
+  ``OFF`` because this feature can break existing projects that have
+  identically named header files in different include directories.
+  This restores compatibility with behavior of CMake 3.15 and below.
+  The default was also changed to ``OFF`` in 3.16.9.
diff --git a/share/cmake-3.22/Help/release/3.18.rst b/share/cmake-3.22/Help/release/3.18.rst
new file mode 100644
index 0000000..f97e4df
--- /dev/null
+++ b/share/cmake-3.22/Help/release/3.18.rst
@@ -0,0 +1,364 @@
+CMake 3.18 Release Notes
+************************
+
+.. only:: html
+
+  .. contents::
+
+Changes made since CMake 3.17 include the following.
+
+New Features
+============
+
+Languages
+---------
+
+* The ``CUDA`` language can now be compiled using Clang on non-Windows
+  platforms. Separable compilation is not yet supported on any platform.
+
+Command-Line
+------------
+
+* :manual:`cmake(1)` gained support for profiling of CMake scripts through
+  the parameters ``--profiling-output`` and ``--profiling-format``.
+
+* :manual:`cmake(1)` gained a ``cat`` command line
+  option that can be used to concatenate files and print them
+  on standard output.
+
+Commands
+--------
+
+* The :command:`add_library` and :command:`add_executable` commands
+  learned to create :ref:`Alias Targets` referencing non-``GLOBAL``
+  :ref:`Imported Targets`.
+
+* The :command:`cmake_language()` command was added for meta-operations on
+  scripted or built-in commands, starting with a mode to ``CALL`` other
+  commands, and ``EVAL CODE`` to inplace evaluate a CMake script.
+
+* The :command:`execute_process` command gained the ``ECHO_OUTPUT_VARIABLE``
+  and ``ECHO_ERROR_VARIABLE`` options.
+
+* The :command:`export` command now raise an error if used multiple times with
+  same ``FILE`` without ``APPEND``. See policy :policy:`CMP0103`.
+
+* The :command:`file` command gained the ``ARCHIVE_CREATE`` and
+  ``ARCHIVE_EXTRACT`` subcommands to expose the :manual:`cmake(1)` ``-E tar``
+  functionality to CMake scripting code.
+
+* The :command:`file(CONFIGURE)` subcommand was created in order to replicate
+  the :command:`configure_file` functionality without resorting to a
+  pre-existing file on disk as input. The content is instead passed as a
+  string.
+
+* The :command:`file(UPLOAD)` command gained ``TLS_VERIFY`` and ``TLS_CAINFO``
+  options to control server certificate verification.
+
+* The :command:`find_program`, :command:`find_library`, :command:`find_path`
+  and :command:`find_file` commands gained a new ``REQUIRED`` option that will
+  stop processing with an error message if nothing is found.
+
+* The :command:`get_property` command with ``SOURCE`` scope gained the
+  ``DIRECTORY`` and ``TARGET_DIRECTORY`` options to get a property
+  from the provided directory scope.
+
+* The :command:`get_source_file_property` command gained the ``DIRECTORY``
+  and ``TARGET_DIRECTORY`` options to get a property from the
+  provided directory scope.
+
+* The :command:`list` operation ``SORT`` gained the ``NATURAL`` sort
+  option to sort using natural order (see ``strverscmp(3)`` manual).
+
+* The :command:`set_property` command with the ``SOURCE`` scope gained the
+  ``DIRECTORY`` and ``TARGET_DIRECTORY`` options to set properties
+  in the provided directory scopes.
+
+* The :command:`set_source_files_properties` command gained the ``DIRECTORY``
+  and ``TARGET_DIRECTORY`` options to set properties in the provided
+  directory scopes.
+
+* The :command:`string` command learned a new ``HEX`` sub-command, which
+  converts strings into their hexadecimal representation.
+
+Variables
+---------
+
+* A :variable:`CMAKE_CUDA_ARCHITECTURES` variable was added to specify
+  CUDA output architectures.  Users are encouraged to use this instead of
+  specifying options manually, as this approach is compiler-agnostic.
+  The variable is initialized automatically when
+  :variable:`CMAKE_CUDA_COMPILER_ID <CMAKE_<LANG>_COMPILER_ID>` is ``NVIDIA``.
+  The variable is used to initialize the new :prop_tgt:`CUDA_ARCHITECTURES`
+  target property.  See policy :policy:`CMP0104`.
+
+* The :variable:`CMAKE_PCH_WARN_INVALID` variable was added to initialize the
+  :prop_tgt:`PCH_WARN_INVALID` target property to allow the removal of the
+  precompiled header invalid warning.
+
+Properties
+----------
+
+* The :prop_tgt:`CUDA_ARCHITECTURES` target property was added to specify
+  CUDA output architectures. Users are encouraged to use this instead of
+  specifying options manually, as this approach is compiler-agnostic.
+  The property is initialized by the new :variable:`CMAKE_CUDA_ARCHITECTURES`
+  variable.  See policy :policy:`CMP0104`.
+
+* The :prop_tgt:`Fortran_PREPROCESS` target property and
+  :prop_sf:`Fortran_PREPROCESS` source-file property were added to
+  control preprocessing of Fortran source files.
+
+* The :prop_tgt:`FRAMEWORK_MULTI_CONFIG_POSTFIX_<CONFIG>` target property
+  and associated :variable:`CMAKE_FRAMEWORK_MULTI_CONFIG_POSTFIX_<CONFIG>`
+  variable were created to allow adding a postfix to the name of a
+  framework file name when using a multi-config generator.
+
+* The :prop_sf:`OBJECT_OUTPUTS` source file property now supports
+  :manual:`generator expressions <cmake-generator-expressions(7)>`.
+
+* The :prop_tgt:`PCH_WARN_INVALID` target property was added to allow the
+  removal of the precompiled header invalid warning.
+
+* The :prop_tgt:`UNITY_BUILD_MODE` target property was added to tell
+  generators which algorithm to use for grouping included source
+  files.
+
+* The :prop_tgt:`VS_SOURCE_SETTINGS_<tool>` target property was added
+  to tell :ref:`Visual Studio Generators` for VS 2010 and above to add
+  metadata to non-built source files using ``<tool>``.
+
+* The :prop_sf:`VS_SETTINGS` source file property was added to tell
+  :ref:`Visual Studio Generators` for VS 2010 and above to add
+  metadata to a non-built source file.
+
+* The :prop_tgt:`VS_PLATFORM_TOOLSET` target property was added to tell
+  :ref:`Visual Studio Generators` for VS 2010 and above to override
+  the platform toolset.
+
+* The :prop_tgt:`VS_SOLUTION_DEPLOY` target property was added to tell
+  :ref:`Visual Studio Generators` for VS 2010 and above to mark a
+  target for deployment even when not building for Windows Phone/Store/CE.
+
+Modules
+-------
+
+* The :module:`CheckLinkerFlag` module has been added to provide a
+  facility to check validity of link flags.
+
+* The :module:`ExternalProject` module :command:`ExternalProject_Add` command
+  gained a new ``GIT_REMOTE_UPDATE_STRATEGY`` keyword.  This can be used to
+  specify how failed rebase operations during a git update should be handled.
+  The ``CMAKE_EP_GIT_REMOTE_UPDATE_STRATEGY`` variable was also added as a
+  global default and is honored by both the :module:`ExternalProject` and
+  :module:`FetchContent` modules.
+
+* The :module:`FetchContent` module :command:`FetchContent_Declare` command
+  now supports a ``SOURCE_SUBDIR`` option.  It can be used to direct
+  :command:`FetchContent_MakeAvailable` to look in a different location
+  for the ``CMakeLists.txt`` file.
+
+* The :module:`FindBLAS` module now provides an imported target.
+
+* The :module:`FindCUDAToolkit` module:
+
+  * gained the variable
+    ``CUDAToolkit_LIBRARY_ROOT``, which is the directory containing the
+    ``nvvm`` directory and ``version.txt``.
+
+  * uses toolkit and library root found during ``CUDA`` compiler detection.
+
+* The :module:`FindLAPACK` module now provides an imported target.
+
+* The :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
+  modules:
+
+  * gained the possibility to create per-artifact cache variables for
+    interactive editing in :manual:`cmake-gui(1)` and :manual:`ccmake(1)`.
+
+  * gained sub-components ``Development.Module`` and
+    ``Development.Embed`` under the ``Development`` component.
+
+  * gained the capability to specify which Python implementations to find,
+    including ``IronPython`` and ``PyPy``.
+
+* The :module:`FindRuby` module input and output variables were all renamed
+  from ``RUBY_`` to ``Ruby_`` for consistency with other find modules.
+  Input variables of the old case will be honored if provided, and output
+  variables of the old case are always provided.
+
+* The :module:`FindSWIG` module now accepts target languages as  ``COMPONENTS``
+  and ``OPTIONAL_COMPONENTS`` arguments to ``find_package``.
+
+* The :module:`GoogleTest` module :command:`gtest_discover_tests` command:
+
+  * gained a new ``DISCOVERY_MODE`` option to control when the test
+    discovery step is run.  It offers a new ``PRE_TEST`` setting to
+    run the discovery at test time instead of build time.  A new
+    ``CMAKE_GTEST_DISCOVER_TESTS_DISCOVERY_MODE`` variable can be used
+    to change the default globally.
+
+  * gained a new optional parameter ``XML_OUTPUT_DIR``. When set the
+    JUnit XML test results are stored in that directory.
+
+* The :module:`FindLibXslt` module now provides imported targets.
+
+* The :module:`UseSWIG` module now supports Fortran as a target language if
+  the ``SWIG_EXECUTABLE`` is SWIG-Fortran_.
+
+.. _`SWIG-Fortran`: https://github.com/swig-fortran/swig
+
+Generator Expressions
+---------------------
+
+* The ``$<DEVICE_LINK:...>`` and ``$<HOST_LINK:...>``
+  :manual:`generator expressions <cmake-generator-expressions(7)>` were added
+  to manage device and host link steps.
+
+* The ``$<LINK_LANGUAGE:...>`` and ``$<LINK_LANG_AND_ID:...>``
+  :manual:`generator expressions <cmake-generator-expressions(7)>` were added.
+
+CTest
+-----
+
+* :manual:`ctest(1)` gained a new :variable:`CTEST_RESOURCE_SPEC_FILE`
+  variable, which can be used to specify a
+  :ref:`resource specification file <ctest-resource-specification-file>`.
+
+* :manual:`ctest(1)` gained a ``--stop-on-failure`` option,
+  which can be used to stop running the tests once one has failed.
+
+* The :command:`ctest_test` command gained a ``STOP_ON_FAILURE`` option
+  which can be used to stop running the tests once one has failed.
+
+* The :module:`CTestCoverageCollectGCOV` module
+  :command:`ctest_coverage_collect_gcov` command gained a
+  ``TARBALL_COMPRESSION`` option to control compression of the
+  tarball of collected results.
+
+CPack
+-----
+
+* The :cpack_gen:`CPack Archive Generator`'s ``TXZ`` format learned the
+  :variable:`CPACK_ARCHIVE_THREADS` variable to enable parallel compression.
+  Requires support in the ``liblzma`` used by CMake.
+
+* The :cpack_gen:`CPack NSIS Generator` gained a new variable
+  :variable:`CPACK_NSIS_MANIFEST_DPI_AWARE` to declare that the
+  installer is DPI-aware.
+
+* The :cpack_gen:`CPack RPM Generator` gained
+  :variable:`CPACK_RPM_PRE_TRANS_SCRIPT_FILE` and
+  :variable:`CPACK_RPM_POST_TRANS_SCRIPT_FILE`
+  variables to specify pre- and post-transaction scripts.
+
+Other
+-----
+
+* :manual:`cmake-gui(1)` now populates its generator selection
+  widget default value from the :envvar:`CMAKE_GENERATOR` environment
+  variable.  Additionally, environment variables
+  :envvar:`CMAKE_GENERATOR_PLATFORM` and :envvar:`CMAKE_GENERATOR_TOOLSET`
+  are used to populate their respective widget defaults.
+
+* :manual:`ccmake(1)` learned to read a :envvar:`CCMAKE_COLORS`
+  environment variable to customize colors.
+
+* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
+  is now aware of the availability of C11 features in MSVC 19.27 and 19.28,
+  including support for the ``c_restrict``, ``c_static_assert`` features and
+  the ``-std:c11`` flag.
+
+Deprecated and Removed Features
+===============================
+
+* The :module:`Documentation` module has been deprecated via
+  :policy:`CMP0106`. This module was essentially VTK code that CMake should
+  not be shipping anymore.
+
+* An explicit deprecation diagnostic was added for policy ``CMP0070``
+  and policy ``CMP0071`` (``CMP0069`` and below were already deprecated).
+  The :manual:`cmake-policies(7)` manual explains that the OLD behaviors
+  of all policies are deprecated and that projects should port to the
+  NEW behaviors.
+
+Other Changes
+=============
+
+* On Windows, the :generator:`Ninja` and :generator:`Ninja Multi-Config`
+  generators, when a compiler is not explicitly specified, now select
+  the first compiler (of any name) found in directories listed by the
+  ``PATH`` environment variable.
+
+* The :prop_tgt:`LINK_OPTIONS` and :prop_tgt:`INTERFACE_LINK_OPTIONS` target
+  properties are now used for the device link step.
+  See policy :policy:`CMP0105`.
+
+* Creation of an ``ALIAS`` target overwriting an existing target now raises an
+  error. See policy :policy:`CMP0107`.
+
+* Linking a target to itself through an alias now raises an error.
+  See policy :policy:`CMP0108`.
+
+* The :module:`FindPackageHandleStandardArgs` module option ``REQUIRED_VARS``
+  is now optional if ``HANDLE_COMPONENTS`` is specified.
+
+* The :command:`source_group` command now also recognizes forward slashes
+  as subgroup delimiters, not just backslashes.
+
+* :manual:`ctest(1)` now logs environment variables that it sets for each test,
+  either due to the :prop_test:`ENVIRONMENT` property or the
+  :ref:`resource allocation <ctest-resource-allocation>` feature, and submits
+  this log to CDash. It does not log environment variables that were set
+  outside of CTest.
+
+* When building CMake itself from source and not using a system-provided
+  libcurl, HTTP/2 support is now enabled for commands supporting
+  network communication via ``http(s)``, such as :command:`file(DOWNLOAD)`,
+  :command:`file(UPLOAD)`, and :command:`ctest_submit`.
+  The precompiled binaries provided on ``cmake.org`` now support HTTP/2.
+
+* The :manual:`cmake-file-api(7)` "codemodel" version 2 ``version`` field has
+  been updated to 2.1.
+
+* The :manual:`cmake-file-api(7)` "codemodel" version 2 "target" object gained
+  a new ``precompileHeaders`` field in the ``compileGroups`` objects.
+
+Updates
+=======
+
+Changes made since CMake 3.18.0 include the following.
+
+3.18.1
+------
+
+* The :generator:`Xcode` generator, when :variable:`CMAKE_OSX_ARCHITECTURES`
+  is not defined, now selects ``$(NATIVE_ARCH_ACTUAL)`` as the default
+  architecture (the Xcode ``ARCHS`` setting).  This is needed for Xcode 12
+  to select the host's architecture, which older versions of Xcode did
+  by default.
+
+* In CMake 3.18.0 the :command:`add_test` command learned to support
+  special characters in test names.  This was accidentally left out of
+  its release notes.  Unfortunately the fix breaks existing projects
+  that were using manual quoting or escaping to work around the prior
+  limitation.  This fix has been reverted in 3.18.1, but may be
+  re-introduced in future versions of CMake with a policy for compatibility.
+
+3.18.2
+------
+
+* The default value of :variable:`CMAKE_AUTOMOC_PATH_PREFIX` was changed to
+  ``OFF`` because this feature can break existing projects that have
+  identically named header files in different include directories.
+  This restores compatibility with behavior of CMake 3.15 and below.
+  The default was also changed to ``OFF`` in 3.16.9 and 3.17.5.
+
+* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
+  was updated for MSVC 19.27 as mentioned above (``c_restrict``).
+
+3.18.3
+------
+
+* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
+  was updated for MSVC 19.28 as mentioned above (``c_static_assert``).
diff --git a/share/cmake-3.22/Help/release/3.19.rst b/share/cmake-3.22/Help/release/3.19.rst
new file mode 100644
index 0000000..49c6793
--- /dev/null
+++ b/share/cmake-3.22/Help/release/3.19.rst
@@ -0,0 +1,442 @@
+CMake 3.19 Release Notes
+************************
+
+.. only:: html
+
+  .. contents::
+
+Changes made since CMake 3.18 include the following.
+
+New Features
+============
+
+Presets
+-------
+
+* :manual:`cmake(1)` and :manual:`cmake-gui(1)` now recognize
+  ``CMakePresets.json`` and ``CMakeUserPresets.json`` files (see
+  :manual:`cmake-presets(7)`).
+
+Generators
+----------
+
+* The :generator:`Xcode` generator now uses the Xcode "new build system"
+  when generating for Xcode 12.0 or higher.
+  See the :variable:`CMAKE_XCODE_BUILD_SYSTEM` variable.
+  One may use ``-T buildsystem=1`` to switch to the legacy build system.
+
+* The :generator:`Xcode` generator gained support for linking libraries and
+  frameworks via the *Link Binaries With Libraries* build phase instead of
+  always by embedding linker flags directly.  This behavior is controlled by
+  a new :prop_tgt:`XCODE_LINK_BUILD_PHASE_MODE` target property, which is
+  initialized by a new :variable:`CMAKE_XCODE_LINK_BUILD_PHASE_MODE`
+  variable.
+
+* The :ref:`Visual Studio Generators` for VS 2015 and above gained support
+  for the Visual Studio Tools for Android.  One may now set
+  :variable:`CMAKE_SYSTEM_NAME` to ``Android`` to generate ``.vcxproj`` files
+  for the Android tools.
+
+Languages
+---------
+
+* CMake learned to support ``ISPC`` as a first-class language that can be
+  enabled via the :command:`project` and :command:`enable_language` commands.
+  ``ISPC`` is currently supported by the :ref:`Makefile Generators`
+  and the :generator:`Ninja` generator on Linux, macOS, and Windows
+  using the Intel ISPC compiler.
+
+* ``CUDA`` language support for Clang now includes:
+
+  - separable compilation (:prop_tgt:`CUDA_SEPARABLE_COMPILATION`), and
+  - finding scattered toolkit installations when cross-compiling.
+
+* ``CUDA`` language support now works on QNX.
+
+Platforms
+---------
+
+* Apple Silicon is now supported (since CMake 3.19.2):
+
+  * The :variable:`CMAKE_HOST_SYSTEM_PROCESSOR` is selected using ``uname -m``.
+    Since this may vary based on CMake's own architecture and that of
+    the invoking process tree, the :variable:`CMAKE_APPLE_SILICON_PROCESSOR`
+    variable or :envvar:`CMAKE_APPLE_SILICON_PROCESSOR` environment
+    variable may be set to specify a host architecture explicitly.
+
+  * If :variable:`CMAKE_OSX_ARCHITECTURES` is not set, CMake adds explicit
+    flags to tell the compiler to build for the
+    :variable:`CMAKE_HOST_SYSTEM_PROCESSOR` so the toolchain does not
+    have to guess based on the process tree's architecture.
+
+File-Based API
+--------------
+
+* The :manual:`cmake-file-api(7)` "codemodel" version 2 ``version`` field has
+  been updated to 2.2.
+
+* The :manual:`cmake-file-api(7)` "codemodel" version 2 "target" object
+  gained a new ``languageStandard`` field in the ``compileGroups`` objects.
+
+Command-Line
+------------
+
+* The :manual:`cmake(1)` command-line tool's ``--install`` mode gained a
+  ``--default-directory-permissions`` option.
+
+* :manual:`cmake(1)` gained a ``-E create_hardlink`` command-line tool
+  that can be used to create hardlinks between files.
+
+GUI
+---
+
+* The :manual:`CMake GUI <cmake-gui(1)>` now has an environment variable
+  editor.
+
+Commands
+--------
+
+* The :command:`add_test` command now (officially) supports whitespace and
+  other special characters in the name for the test it creates.
+  See policy :policy:`CMP0110`.
+
+* The :command:`cmake_language` command gained a ``DEFER`` mode to
+  schedule command calls to occur at the end of processing a directory.
+
+* The :command:`configure_file` command gained a ``NO_SOURCE_PERMISSIONS``
+  option to suppress copying the input file's permissions to the output file.
+
+* The :command:`execute_process` command gained a ``COMMAND_ERROR_IS_FATAL``
+  option to specify a fatal error.
+
+* The :command:`file(ARCHIVE_CREATE)` command gained a ``COMPRESSION_LEVEL``
+  option to specify the compression level.
+
+* The :command:`file(CHMOD)` and :command:`file(CHMOD_RECURSE)` subcommands
+  were added to set permissions of files and directories.
+
+* The :command:`file(DOWNLOAD)` command ``<file>`` argument is now
+  optional.  If it is not specified, the file is not saved.
+
+* The :command:`file(GENERATE)` command gained a new ``TARGET`` keyword to
+  support resolving target-dependent generator expressions.
+
+* The :command:`file` command gained a new ``REAL_PATH`` sub-command to
+  compute a path with symlinks resolved.
+
+* The :command:`find_package` command learned to handle a version range.
+
+* The :command:`separate_arguments` command gained a new ``PROGRAM`` option.
+  It allows the arguments to be treated as a program invocation and will
+  resolve the executable to a full path if it can be found.
+
+* The ``DIRECTORY`` option of the :command:`set_property`,
+  :command:`get_property`, and :command:`get_directory_property` commands
+  now accepts references to binary directory paths, such as the value of
+  :variable:`CMAKE_CURRENT_BINARY_DIR`.
+
+* The :command:`string` command gained a set of new ``JSON`` sub commands
+  that provide JSON parsing capabilities.
+
+Variables
+---------
+
+* The :variable:`CMAKE_CLANG_VFS_OVERLAY` variable was added to tell
+  Clang to use a VFS overlay to support the Windows SDK when
+  cross-compiling from hosts with case-sensitive filesystems.
+
+* The :variable:`CMAKE_MFC_FLAG` variable now supports generator expressions.
+
+* The :variable:`CMAKE_OPTIMIZE_DEPENDENCIES` variable was added to
+  initialize the new :prop_tgt:`OPTIMIZE_DEPENDENCIES` target property and
+  avoid unnecessarily building dependencies for a static library.
+
+* The :variable:`CMAKE_PCH_INSTANTIATE_TEMPLATES` variable was added to
+  initialize the new :prop_tgt:`PCH_INSTANTIATE_TEMPLATES` target property.
+
+* The :variable:`CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION_MAXIMUM` variable
+  was added to tell the :ref:`Visual Studio Generators` what maximum
+  version of the Windows SDK to choose.
+
+Properties
+----------
+
+* The :prop_tgt:`EXCLUDE_FROM_ALL` target property now supports
+  :manual:`generator expressions <cmake-generator-expressions(7)>`.
+
+* The :prop_tgt:`OPTIMIZE_DEPENDENCIES` target property was added to
+  avoid unnecessarily building dependencies for a static library.
+
+* The :prop_tgt:`PCH_INSTANTIATE_TEMPLATES` target property was added to enable
+  template instantiation in the precompiled header. This is enabled by default
+  and may significantly improve compile times. Currently only supported for
+  Clang (version 11 or later).
+
+* The :prop_tgt:`WIN32_EXECUTABLE` target property now supports
+  :manual:`generator expressions <cmake-generator-expressions(7)>`.
+
+Modules
+-------
+
+* The :module:`CheckCompilerFlag` module has been added to
+  generalize :module:`CheckCCompilerFlag` and
+  :module:`CheckCXXCompilerFlag` to more languages.
+  It also supports the ``CUDA`` and ``ISPC`` languages.
+
+* The :module:`CheckLinkerFlag` module now supports the ``CUDA`` language.
+
+* The :module:`CheckSourceCompiles` module has been added to
+  generalize :module:`CheckCSourceCompiles` and
+  :module:`CheckCXXSourceCompiles` to more languages.
+  It also supports the ``CUDA`` and ``ISPC`` languages.
+
+* The :module:`CheckSourceRuns` module has been added to
+  generalize :module:`CheckCSourceRuns` and
+  :module:`CheckCXXSourceRuns` to more languages.
+  It also supports the ``CUDA`` language.
+
+* The :module:`CMakePackageConfigHelpers` module gained support for version
+  ranges.
+
+* The :module:`FindCUDAToolkit` module gained support for finding CUDA
+  toolkits that do not contain ``nvcc``, as well as for finding scattered
+  toolkit installations when cross-compiling.
+
+* The :module:`FindPackageHandleStandardArgs` module learned to handle
+  version ranges. It also gained the ``find_package_check_version()`` command
+  to check the validity of a version against version-related arguments of
+  :command:`find_package` command.
+
+* The :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
+  modules gained the ability to handle a version range.
+
+* The :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
+  modules provide, respectively, the variable ``Python3_LINK_OPTIONS``,
+  ``Python2_LINK_OPTIONS`` and ``Python_LINK_OPTIONS`` for link options.
+
+* The :module:`FindSDL` module now provides:
+
+  * An imported target ``SDL::SDL``.
+
+  * Result variables ``SDL_LIBRARIES`` and ``SDL_INCLUDE_DIRS``.
+
+  * Version variables ``SDL_VERSION``, ``SDL_VERSION_MAJOR``,
+    ``SDL_VERSION_MINOR``, and ``SDL_VERSION_PATCH``.
+
+* The :module:`FindSWIG` module gained the ability to handle a version range.
+
+* The :module:`FindTIFF` module gained a ``CXX`` component to
+  find the ``tiffxx`` library containing C++ bindings.
+
+* The :module:`FindVulkan` module now provides a ``Vulkan::glslc`` imported
+  target and associated ``Vulkan_GLSLC_EXECUTABLE`` variable which contain
+  the path to the GLSL SPIR-V compiler.
+
+* The :module:`UseSWIG` module gained support for new source file properties
+  ``OUTPUT_DIR`` and ``OUTFILE_DIR`` to manage output directories on a
+  per-source basis.
+
+CTest
+-----
+
+* :manual:`ctest(1)` now supports the CUDA ``compute-sanitizer`` checker
+  (previously known as ``cuda-memcheck``) as the ``CTEST_MEMORYCHECK_COMMAND``.
+  The different tools (``memcheck``, ``racecheck``, ``synccheck`` and
+  ``initcheck``) supported by ``compute-sanitizer`` can be selected by
+  adding appropriate flags to the ``CTEST_MEMORYCHECK_COMMAND_OPTIONS``
+  variable.  The default flags are ``--tool memcheck --leak-check full``.
+
+CPack
+-----
+
+* CPack gained the :variable:`CPACK_PRE_BUILD_SCRIPTS`,
+  :variable:`CPACK_POST_BUILD_SCRIPTS`, and :variable:`CPACK_PACKAGE_FILES`
+  variables.
+
+* The :cpack_gen:`CPack External Generator` gained the
+  :variable:`CPACK_EXTERNAL_BUILT_PACKAGES` variable.
+
+* The :cpack_gen:`CPack WIX Generator` gained a
+  :variable:`CPACK_WIX_CUSTOM_XMLNS` option to specify custom XML namespaces.
+
+Other
+-----
+
+* :ref:`Interface Libraries` may now have source files added via
+  :command:`add_library` or :command:`target_sources`.  Those
+  with sources will be generated as part of the build system.
+
+Deprecated and Removed Features
+===============================
+
+* Compatibility with versions of CMake older than 2.8.12 is now deprecated
+  and will be removed from a future version.  Calls to
+  :command:`cmake_minimum_required` or :command:`cmake_policy` that set
+  the policy version to an older value now issue a deprecation diagnostic.
+
+* An explicit deprecation diagnostic was added for policy ``CMP0071``
+  (``CMP0071`` and below were already deprecated).
+  The :manual:`cmake-policies(7)` manual explains that the OLD behaviors
+  of all policies are deprecated and that projects should port to the
+  NEW behaviors.
+
+* macOS SDKs older than 10.5 are no longer supported.
+
+* :manual:`cmake-gui(1)` now requires Qt5.
+  Support for compiling with Qt4 has been removed.
+
+* The :manual:`cmake(1)` command-line option ``--warn-unused-vars`` has
+  been removed and is now silently ignored.  The option has not worked
+  correctly since CMake 3.3.
+
+Documentation
+=============
+
+The following guides have been added:
+
+* :guide:`IDE Integration Guide`
+* :guide:`Importing and Exporting Guide`
+
+Other Changes
+=============
+
+* Building for macOS will now use the latest SDK available on the system,
+  unless the user has explicitly chosen a SDK using
+  :variable:`CMAKE_OSX_SYSROOT`.  The deployment target or system macOS
+  version will not affect the choice of SDK.
+
+* The :variable:`CMAKE_<LANG>_COMPILER` variable may now be used to
+  store "mandatory" compiler flags like the :envvar:`CC` and other environment
+  variables.
+
+* The :variable:`CMAKE_<LANG>_FLAGS_INIT` variable will now be considered
+  during the compiler identification check if other sources like
+  :variable:`CMAKE_<LANG>_FLAGS` or :envvar:`CFLAGS` are not set.
+
+* The :command:`find_program` command now requires permission to execute
+  but not to read the file found.  See policy :policy:`CMP0109`.
+
+* An imported target missing its location property fails during generation
+  if the location is used.  See policy :policy:`CMP0111`.
+
+* The following target-based generator expressions that query for directory or
+  file name components no longer add a dependency on the evaluated target.
+  See policy :policy:`CMP0112`.
+
+  - ``TARGET_FILE_DIR``
+  - ``TARGET_LINKER_FILE_BASE_NAME``
+  - ``TARGET_LINKER_FILE_NAME``
+  - ``TARGET_LINKER_FILE_DIR``
+  - ``TARGET_SONAME_FILE_NAME``
+  - ``TARGET_SONAME_FILE_DIR``
+  - ``TARGET_PDB_FILE_NAME``
+  - ``TARGET_PDB_FILE_DIR``
+  - ``TARGET_BUNDLE_DIR``
+  - ``TARGET_BUNDLE_CONTENT_DIR``
+
+* :ref:`Makefile Generators` no longer repeat custom commands from target
+  dependencies.  See policy :policy:`CMP0113`.
+
+* The :module:`ExternalProject` module handling of step target dependencies
+  has been revised.  See policy :policy:`CMP0114`.
+
+* The :prop_tgt:`OSX_ARCHITECTURES` target property is now respected
+  for the ``ASM`` language.
+
+* If ``CUDA`` compiler detection fails with user-specified
+  :variable:`CMAKE_CUDA_ARCHITECTURES` or
+  :variable:`CMAKE_CUDA_HOST_COMPILER`, an error is raised.
+
+Updates
+=======
+
+Changes made since CMake 3.19.0 include the following.
+
+3.19.1
+------
+
+* CMake 3.19.0 compiles source files with the :prop_sf:`LANGUAGE`
+  property by passing an explicit language flag such as ``-x c``.
+  This is consistent with the property's documented meaning that
+  the source file is written in the specified language.  However,
+  it can break projects that were using the property only to
+  cause the specified language's compiler to be used.  This has
+  been reverted to restore behavior from CMake 3.18 and below.
+
+* CUDA 11.1 support for Clang.
+
+3.19.2
+------
+
+* The precompiled macOS binary provided on ``cmake.org`` is now a
+  universal binary with ``x86_64`` and ``arm64`` architectures.
+  It requires macOS 10.10 or newer.
+  The package file naming pattern has been changed from
+  ``cmake-$ver-Darwin-x86_64`` to ``cmake-$ver-macos-universal``.
+
+* Apple Silicon host architecture selection support was updated.
+  CMake 3.19.0 and 3.19.1 always chose ``arm64`` as the host architecture.
+  CMake 3.19.2 returns to using ``uname -m`` as CMake 3.18 and below did.
+  Since this may vary based on CMake's own architecture and that of
+  the invoking process tree, the :variable:`CMAKE_APPLE_SILICON_PROCESSOR`
+  variable or :envvar:`CMAKE_APPLE_SILICON_PROCESSOR` environment
+  variable may be set to specify a host architecture explicitly.
+
+* The :variable:`CMAKE_ISPC_HEADER_SUFFIX` variable and corresponding
+  :prop_tgt:`ISPC_HEADER_SUFFIX` target property were added to control
+  the header suffix used by ``ISPC`` compiler generated headers.
+
+3.19.3
+------
+
+* A precompiled Linux ``aarch64`` binary is now provided on ``cmake.org``.
+
+* Two precompiled macOS binaries are now provided on ``cmake.org``:
+
+  * The naming pattern ``cmake-$ver-macos-universal`` is a universal
+    binary with ``x86_64`` and ``arm64`` architectures.  It requires
+    macOS 10.13 or newer.
+
+  * The naming pattern ``cmake-$ver-macos10.10-universal`` is a universal
+    binary with ``x86_64`` and ``arm64`` architectures.  It requires
+    macOS 10.10 or newer.
+
+3.19.4
+------
+
+* The :variable:`CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION_MAXIMUM`
+  variable introduced in 3.19.0 previously worked only with the
+  :generator:`Visual Studio 14 2015` generator.  It has now been fixed to
+  work with :ref:`Visual Studio Generators` for later VS versions too.
+
+3.19.5
+------
+
+* When :prop_tgt:`IOS_INSTALL_COMBINED` is enabled and the :generator:`Xcode`
+  generator is used, it is now possible to initiate an install or package
+  creation by running ``cmake --install`` or ``cpack`` from the command line.
+  When using the Xcode new build system, these are the only supported methods
+  due to a limitation of Xcode.  Initiating these operations by building the
+  ``install`` or ``package`` targets in Xcode is only supported when using
+  the legacy build system.
+
+* The framework handling introduced in 3.19.0 as part of supporting Xcode's
+  *Link Binaries With Libraries* build phase broke the ability to switch
+  between device and simulator builds without reconfiguring.  That capability
+  has now been restored.
+
+3.19.6
+------
+
+* The :manual:`cmake-presets(7)` feature no longer allows comments in
+  ``CMakePresets.json`` or ``CMakeUserPresets.json`` files.
+  This was mistakenly allowed by the implementation in CMake 3.19.0 through
+  CMake 3.19.5, and was not documented.
+
+3.19.7
+------
+
+* With :ref:`Visual Studio Generators` for VS 2017 and higher, the
+  :variable:`CMAKE_GENERATOR_TOOLSET` field ``version=`` now accepts
+  three-component MSVC toolset versions such as ``14.28.29910``.
+  See the :variable:`CMAKE_VS_PLATFORM_TOOLSET_VERSION` variable.
diff --git a/share/cmake-3.18/Help/release/3.2.rst b/share/cmake-3.22/Help/release/3.2.rst
similarity index 100%
rename from share/cmake-3.18/Help/release/3.2.rst
rename to share/cmake-3.22/Help/release/3.2.rst
diff --git a/share/cmake-3.22/Help/release/3.20.rst b/share/cmake-3.22/Help/release/3.20.rst
new file mode 100644
index 0000000..42e95be
--- /dev/null
+++ b/share/cmake-3.22/Help/release/3.20.rst
@@ -0,0 +1,371 @@
+CMake 3.20 Release Notes
+************************
+
+.. only:: html
+
+  .. contents::
+
+Changes made since CMake 3.19 include the following.
+
+New Features
+============
+
+Presets
+-------
+
+* :manual:`cmake-presets(7)` gained support for build and test presets.
+
+Generators
+----------
+
+* :ref:`Makefile Generators`, for some toolchains, now use the compiler
+  to extract implicit dependencies while compiling source files.
+
+Languages
+---------
+
+* C++23 compiler modes may now be specified via the :prop_tgt:`CXX_STANDARD`,
+  :prop_tgt:`CUDA_STANDARD`, or :prop_tgt:`OBJCXX_STANDARD` target properties,
+  or via the :manual:`Compile Features <cmake-compile-features(7)>`
+  functionality's ``cxx_std_23`` meta-feature.
+
+* ``CUDA`` language support now works when ``nvcc`` is a symbolic link,
+  for example due to a ``ccache`` or ``colornvcc`` wrapper script.
+
+* The :envvar:`CUDAARCHS` environment variable was added for initializing
+  :variable:`CMAKE_CUDA_ARCHITECTURES`. Useful in cases where the compiler
+  default is unsuitable for the machine's GPU.
+
+Compilers
+---------
+
+* The NVIDIA HPC SDK compilers are now supported with compiler id ``NVHPC``.
+
+* The Intel oneAPI NextGen LLVM compilers are now supported with
+  compiler id ``IntelLLVM``:
+
+  * The ``icx``/``icpx`` C/C++ compilers on Linux, and the ``icx``
+    C/C++ compiler on Windows, are fully supported as of oneAPI 2021.1.
+
+  * The ``ifx`` Fortran compiler on Linux is supported as of oneAPI 2021.1.
+
+  * The ``ifx`` Fortran compiler on Windows is not yet supported.
+
+  The Intel oneAPI Classic compilers (``icc``, ``icpc``, and ``ifort``)
+  continue to be supported with compiler id ``Intel``.
+
+* Support was added for the IAR STM8 compiler.
+
+Platforms
+---------
+
+* CMake's support for :ref:`Cross Compiling for Android`
+  is now merged with the Android NDK's toolchain file.
+  They now have similar behavior, though some variable names differ.
+  User-facing changes include:
+
+  - ``find_*`` functions will search NDK ABI / API specific paths by default.
+
+  - The default :variable:`CMAKE_BUILD_TYPE` for Android is
+    now ``RelWithDebInfo``.
+
+  - The :variable:`CMAKE_ANDROID_NDK_VERSION` variable was added to
+    report the version of the NDK.
+
+File-Based API
+--------------
+
+* The :manual:`cmake-file-api(7)` gained a new "toolchains" object
+  kind that describes the compiler used for each enabled language.
+
+Commands
+--------
+
+* :command:`add_custom_command` and :command:`add_custom_target` now
+  support :manual:`generator expressions <cmake-generator-expressions(7)>`
+  in their ``OUTPUT`` and ``BYPRODUCTS`` options.
+
+  Their ``COMMAND``, ``WORKING_DIRECTORY``, and ``DEPENDS`` options gained
+  support for new generator expressions ``$<COMMAND_CONFIG:...>`` and
+  ``$<OUTPUT_CONFIG:...>`` that control cross-config handling when using
+  the :generator:`Ninja Multi-Config` generator.
+
+* The :command:`add_custom_command` command gained ``DEPFILE`` support on
+  :ref:`Makefile Generators`.
+
+* The :command:`add_library` command previously prohibited imported object
+  libraries when using potentially multi-architecture configurations.
+  This mostly affected the :generator:`Xcode` generator, e.g. when targeting
+  iOS or one of the other device platforms.  This restriction has now been
+  removed.
+
+* The :command:`cmake_path` command was added for operations on
+  filesystem paths.
+
+* The :command:`configure_file` command gained ``USE_SOURCE_PERMISSIONS``
+  and ``FILE_PERMISSIONS`` options to support copying of permissions of the
+  source file and using specified permissions respectively.
+
+* The :command:`file(GENERATE)` command gained a ``NEWLINE_STYLE`` option to
+  specify how newlines are handled for the generated file.
+
+* The :command:`file(GENERATE)` command gained ``NO_SOURCE_PERMISSIONS``,
+  ``USE_SOURCE_PERMISSIONS``, and ``FILE_PERMISSIONS`` options for controlling
+  the permissions of the generated file.
+
+* The :command:`install(FILES)` command ``RENAME`` option learned to
+  support :manual:`generator expressions <cmake-generator-expressions(7)>`.
+
+* The :command:`target_include_directories` command gained a new option
+  ``AFTER``.
+
+* The :command:`target_sources` command now supports targets created
+  by the :command:`add_custom_target` command.
+
+* The :command:`try_run` command gained a ``WORKING_DIRECTORY`` option to
+  set the working directory in which to run the compiled check executable.
+
+Variables
+---------
+
+* The :variable:`CMAKE_<LANG>_BYTE_ORDER` variable was added to provide the
+  target architecture byte order detected from the toolchain.
+
+* The :variable:`CMAKE_RUNTIME_OUTPUT_DIRECTORY`,
+  :variable:`CMAKE_LIBRARY_OUTPUT_DIRECTORY`, and
+  :variable:`CMAKE_ARCHIVE_OUTPUT_DIRECTORY` variables now support
+  target-dependent generator expressions.
+
+Properties
+----------
+
+* The :prop_tgt:`<LANG>_CLANG_TIDY` target property and the associated
+  :variable:`CMAKE_<LANG>_CLANG_TIDY` variable learned to support
+  the ``OBJC`` and ``OBJCXX`` languages.
+
+* The :prop_tgt:`EXPORT_COMPILE_COMMANDS` target property was added
+  for the associated :variable:`CMAKE_EXPORT_COMPILE_COMMANDS` variable
+  to allow for configuration of exporting compile commands per target.
+
+* The :prop_sf:`GENERATED` source-file property is now visible
+  from any directory scope, regardless of the scope in which it is set.
+  See policy :policy:`CMP0118`.
+
+* The :prop_tgt:`UNITY_BUILD_UNIQUE_ID` target property
+  was added to support generation of an identifier that is
+  unique per source file in unity builds.  It can help to
+  resolve duplicate symbol problems with anonymous namespaces.
+
+* The :prop_tgt:`WIN32_EXECUTABLE` target property now works with Clang
+  on Windows.
+
+* The :prop_tgt:`XCODE_EMBED_FRAMEWORKS <XCODE_EMBED_<type>>` target property
+  was added to tell the :generator:`Xcode` generator to embed frameworks.
+  Aspects of the embedding can be customized with the
+  :prop_tgt:`XCODE_EMBED_FRAMEWORKS_PATH <XCODE_EMBED_<type>>`,
+  :prop_tgt:`XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY`, and
+  :prop_tgt:`XCODE_EMBED_FRAMEWORKS_REMOVE_HEADERS_ON_COPY` target properties.
+
+Modules
+-------
+
+* The :module:`ExternalData` module :command:`ExternalData_Add_Target`
+  function gained a ``SHOW_PROGRESS <bool>`` option for controlling whether
+  or not to show progress output during the build.
+
+* The :module:`ExternalProject` module :command:`ExternalProject_Add` function
+  gained a ``CONFIGURE_HANDLED_BY_BUILD`` option.  This can be used to make
+  subsequent runs of the configure step be triggered by the build step when
+  an external project dependency rebuilds instead of always re-running the
+  configure step in such cases.
+
+* The :module:`FindBoost` module gained a ``Boost_NO_WARN_NEW_VERSIONS``
+  option to silence the warning about unknown dependencies for new
+  Boost versions.
+
+* The :module:`FindCUDAToolkit` module gained support for finding CUDA
+  toolkits when ``nvcc`` is a symbolic link,
+  for example due to a ``ccache`` or ``colornvcc`` wrapper script.
+
+* The :module:`FindGDAL` module has been improved to document and mark as
+  advanced its cache variables. There is a new ``FindGDAL_SKIP_GDAL_CONFIG``
+  variable which may be used to skip over the ``gdal-config``-based search.
+  Users may also set ``GDAL_ADDITIONAL_LIBRARY_VERSIONS`` to add additional
+  versions to the library name search strategy.
+
+* The :module:`FindIntl` module now provides an imported target.
+
+* The :module:`FindOpenSSL` module learned to support a version range.
+
+* The :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
+  modules gained options controlling how unversioned interpreter names are
+  searched.
+
+* The :module:`UseJava` module ``add_jar()`` command's
+  ``GENERATE_NATIVE_HEADERS`` feature gained options to export the
+  generated target.
+
+* The :module:`UseSWIG` module gained the capability, for
+  :ref:`Makefile <Makefile Generators>` and :ref:`Ninja <Ninja Generators>`
+  generators, to use the ``swig`` tool to generate implicit dependencies.
+
+Autogen
+-------
+
+* The :ref:`Qt AUTOMOC` feature now works with per-config sources.
+
+CTest
+-----
+
+* :manual:`ctest(1)` gained a ``--test-dir`` option to specify the directory
+  in which to look for tests.
+
+CPack
+-----
+
+* :module:`CPack` gained the :variable:`CPACK_THREADS` variable to
+  control the number of threads used for parallelized operations,
+  such as compressing the installer package.
+
+* The :cpack_gen:`CPack DEB Generator` learned a new
+  :variable:`CPACK_DEBIAN_PACKAGE_SHLIBDEPS_PRIVATE_DIRS`
+  variable to specify additional search directories for
+  resolving private library dependencies when using
+  ``dpkg-shlibdeps``.
+
+* The :cpack_gen:`CPack IFW Generator` gained a new
+  :variable:`CPACK_IFW_PACKAGE_WIZARD_SHOW_PAGE_LIST` variable to
+  control visibility of the widget listing installer pages on the left side
+  of the wizard. This feature available only since QtIFW 4.0.
+
+* The :cpack_gen:`CPack NSIS Generator` gained new
+  :variable:`CPACK_NSIS_BRANDING_TEXT` and
+  :variable:`CPACK_NSIS_BRANDING_TEXT_TRIM_POSITION` variables to change
+  the text at the bottom of the install window and change its trim position
+
+* The :cpack_gen:`CPack NSIS Generator` now correctly handles Unicode
+  characters.  If you want to have a :variable:`CPACK_RESOURCE_FILE_LICENSE`
+  with UTF-8 characters, it needs to be encoded in UTF-8 BOM.
+
+* The :cpack_gen:`CPack NuGet Generator` gained options:
+
+  - :variable:`CPACK_NUGET_PACKAGE_ICON` and
+    :variable:`CPACK_NUGET_<compName>_PACKAGE_ICON`
+    allow package icons to be specified by local files.
+  - :variable:`CPACK_NUGET_PACKAGE_LICENSE_EXPRESSION` and
+    :variable:`CPACK_NUGET_<compName>_PACKAGE_LICENSE_EXPRESSION` add
+    support for specifying licenses recognized by the
+    `Software Package Data Exchange`_ (SPDX).
+  - :variable:`CPACK_NUGET_PACKAGE_LICENSE_FILE_NAME` and
+    :variable:`CPACK_NUGET_<compName>_PACKAGE_LICENSE_FILE_NAME` allow
+    licenses to be specified by local files.
+  - :variable:`CPACK_NUGET_PACKAGE_LANGUAGE` and
+    :variable:`CPACK_NUGET_<compName>_PACKAGE_LANGUAGE` allow the locale
+    for a package to be specified, for example ``en_CA``.
+
+.. _Software Package Data Exchange: https://spdx.org/
+
+Deprecated and Removed Features
+===============================
+
+* The :manual:`cmake-server(7)` mode has been removed.
+  Clients should use the :manual:`cmake-file-api(7)` instead.
+
+* The :module:`WriteCompilerDetectionHeader` module has been deprecated
+  via policy :policy:`CMP0120`.  Projects should be ported away from it.
+
+* The :module:`TestBigEndian` module has been deprecated in favor
+  of the :variable:`CMAKE_<LANG>_BYTE_ORDER` variable.
+
+* The :module:`AddFileDependencies` module is deprecated.
+  Port projects to use :command:`set_property` directly.
+
+* The :cpack_gen:`CPack NuGet Generator` deprecated some variables to reflect
+  changes in the NuGet specification:
+
+  - :variable:`CPACK_NUGET_PACKAGE_ICONURL` and
+    :variable:`CPACK_NUGET_<compName>_PACKAGE_ICONURL` have been deprecated;
+    replace with a reference to a local icon file.
+  - :variable:`CPACK_NUGET_PACKAGE_LICENSEURL` and
+    :variable:`CPACK_NUGET_<compName>_PACKAGE_LICENSEURL` have been deprecated;
+    replace with a reference to the project's license file or SPDX
+    license expression.
+
+Other Changes
+=============
+
+* When running :manual:`cmake(1)` to :ref:`Generate a Project Buildsystem`,
+  unknown command-line arguments starting with a hyphen (``-``) are now
+  rejected with an error.  Previously they were silently ignored.
+
+* Source file extensions must now be explicit.
+  See policy :policy:`CMP0115` for details.
+
+* The :prop_sf:`LANGUAGE` source file property now forces compilation
+  as the specified language.  See policy :policy:`CMP0119`.
+
+* On AIX, installation of XCOFF executables and shared libraries
+  no longer requires relinking to change the runtime search path
+  from the build-tree RPATH to the install-tree RPATH.  CMake now
+  edits the XCOFF binaries directly during installation, as has
+  long been done on ELF platforms.
+
+* With MSVC-like compilers the value of
+  :variable:`CMAKE_CXX_FLAGS <CMAKE_<LANG>_FLAGS>` no longer contains
+  the ``/GR`` flag for runtime type information by default.
+  See policy :policy:`CMP0117`.
+
+* Ninja generators now transform the ``DEPFILE`` generated by an
+  :command:`add_custom_command`. See policy :policy:`CMP0116` for details.
+
+* The precompiled Linux binaries provided on
+  `cmake.org <https://cmake.org/download/>`_ have changed their naming pattern
+  to ``cmake-$ver-linux-$arch``, where ``$arch`` is either ``x86_64`` or
+  ``aarch64``.
+
+* The precompiled Windows binaries provided on
+  `cmake.org <https://cmake.org/download/>`_ have changed their naming pattern
+  to ``cmake-$ver-windows-$arch``, where ``$arch`` is either ``x86_64`` or
+  ``i386``.
+
+Updates
+=======
+
+Changes made since CMake 3.20.0 include the following.
+
+3.20.1
+------
+
+* The :module:`FindIntl` module in CMake 3.20.0 added checks
+  ``Intl_HAVE_GETTEXT_BUILTIN``, ``Intl_HAVE_DCGETTEXT_BUILTIN``,
+  and ``Intl_IS_BUILTIN``, but they were not implemented correctly.
+  These have been removed and replaced with a single ``Intl_IS_BUILT_IN``
+  check, whose name is consistent with the :module:`FindIconv` module.
+
+* The ``-rpath`` linker flag is now specified as supported on all Apple
+  platforms, not just macOS.  The ``install_name_dir`` used for
+  iOS, tvOS and watchOS should now default to ``@rpath`` instead of using
+  a full absolute path and failing at runtime when the library or framework
+  is embedded in an application bundle (see :prop_tgt:`XCODE_EMBED_<type>`).
+
+3.20.2
+------
+
+* The Intel Classic 2021 compiler version numbers are now detected correctly
+  as having major version 2021.  CMake 3.20.1 and below were not aware of a
+  change to the identification macro version scheme made by Intel starting
+  in version 2021, and detected the version as 20.2.
+
+* The Intel oneAPI Fortran compiler is now identified as ``IntelLLVM``.
+  The oneAPI 2021.1 Fortran compiler is missing an identification macro,
+  so CMake 3.20.1 and below identified it as ``Intel``.  CMake now has
+  a special case to recognize oneAPI 2021.1 Fortran as ``IntelLLVM``.
+  The oneAPI 2021.2 Fortran compiler defines the proper identification
+  macro and so is identified as ``IntelLLVM`` by all CMake 3.20 versions.
+
+3.20.3, 3.20.4, 3.20.5, 3.20.6
+------------------------------
+
+These versions made no changes to documented features or interfaces.
+Some implementation updates were made to support ecosystem changes
+and/or fix regressions.
diff --git a/share/cmake-3.22/Help/release/3.21.rst b/share/cmake-3.22/Help/release/3.21.rst
new file mode 100644
index 0000000..e1c6172
--- /dev/null
+++ b/share/cmake-3.22/Help/release/3.21.rst
@@ -0,0 +1,336 @@
+CMake 3.21 Release Notes
+************************
+
+.. only:: html
+
+  .. contents::
+
+Changes made since CMake 3.20 include the following.
+
+New Features
+============
+
+Presets
+-------
+
+* :manual:`cmake-presets(7)` gained support for specifying the install prefix
+  in a configure preset.
+
+* :manual:`cmake-presets(7)` gained support for conditional enabling of presets.
+
+* :manual:`cmake-presets(7)` gained support for a ``${hostSystemName}`` macro.
+
+* :manual:`cmake-presets(7)` gained support for omitting the ``generator`` and
+  ``binaryDir`` fields.
+
+Generators
+----------
+
+* The :generator:`Visual Studio 17 2022` generator was added.
+
+* The :ref:`Makefile Generators` and the :generator:`Ninja` generator
+  learned to add linker launcher tools along with the linker for ``C``,
+  ``CXX``, ``OBJC``, and ``OBJCXX`` languages.
+  See the :variable:`CMAKE_<LANG>_LINKER_LAUNCHER` variable
+  and :prop_tgt:`<LANG>_LINKER_LAUNCHER` target property for details.
+
+Languages
+---------
+
+* CMake learned to support ``HIP`` as a first-class language that can be
+  enabled via the :command:`project` and :command:`enable_language` commands.
+
+* :prop_tgt:`C_STANDARD`, :prop_tgt:`OBJC_STANDARD`, and the
+  :manual:`Compile Features <cmake-compile-features(7)>` functionality gained
+  support for C17 and C23.
+
+* Source file extensions ``.ixx`` and ``.cppm`` are now treated as C++.
+
+Command-Line
+------------
+
+* :manual:`cmake(1)` gained the ``--install-prefix <dir>``
+  command-line option to specify the location of the install prefix.
+
+* :manual:`cmake(1)` gained the ``--toolchain <path/to/file>``
+  command-line option to specify a toolchain file.
+
+* :manual:`cmake(1)` ``-E capabilities`` output, for some generators,
+  may now contain a ``supportedPlatforms`` field listing platforms
+  known to be supported in :variable:`CMAKE_GENERATOR_PLATFORM`.
+
+* Messages printed to a terminal now may be colored by message type.
+
+Compilers
+---------
+
+* The Fujitsu compiler is now supported using compiler id ``Fujitsu``
+  in traditional (``Trad``) mode, and compiler id ``FujitsuClang``
+  in ``Clang`` mode.
+
+Platforms
+---------
+
+* CMake now supports the MSYS runtime environment, much like CYGWIN.
+
+File-Based API
+--------------
+
+* The :manual:`cmake-file-api(7)` "codemodel" version 2 ``version`` field
+  has been updated to 2.3.
+
+* The :manual:`cmake-file-api(7)` "codemodel" version 2 gained a
+  new "directory" object containing directory-level information.
+  This includes a list of installers generated by the :command:`install`
+  command.
+
+Commands
+--------
+
+* The :command:`add_custom_command` command ``DEPFILE`` option:
+
+  * may now use
+    :manual:`generator expressions <cmake-generator-expressions(7)>`,
+
+  * is now supported by :ref:`Visual Studio Generators` for VS 2012
+    and above, and
+
+  * is now supported by the :generator:`Xcode` generator.
+
+* The :command:`add_custom_command(TARGET)` command
+  (for :ref:`Build Events <add_custom_command(TARGET)>`)
+  gained support for resolving target-dependent generator expressions.
+
+* The :command:`build_command` command gained a ``PARALLEL_LEVEL`` option.
+
+* The :command:`file(COPY_FILE)` command was added to copy a single file.
+
+* The :command:`file(GET_RUNTIME_DEPENDENCIES)` command gained new
+  ``POST_INCLUDE_FILES`` and ``POST_EXCLUDE_FILES`` arguments.
+
+* The :command:`file(REAL_PATH)` command gained the option ``EXPAND_TILDE`` to
+  replace any leading tilde with the path to the user's home directory.
+
+* The :command:`file(RENAME)` command learned to optionally capture
+  failure in a result variable.  It also gained a ``NO_REPLACE``
+  option to fail if the destination exists.
+
+* The :command:`install` command gained a new ``IMPORTED_RUNTIME_ARTIFACTS``
+  mode, which can be used to install the runtime artifacts of imported targets.
+
+* The :command:`install` command gained a new ``RUNTIME_DEPENDENCY_SET`` mode,
+  which can be used to install runtime dependencies using
+  :command:`file(GET_RUNTIME_DEPENDENCIES)`.
+
+* The :command:`install(TARGETS)` command gained new ``RUNTIME_DEPENDENCIES``
+  and ``RUNTIME_DEPENDENCY_SET`` arguments, which can be used to install
+  runtime dependencies using :command:`file(GET_RUNTIME_DEPENDENCIES)`.
+
+* The :command:`install(SCRIPT|CODE)` command
+  supports a new option ``ALL_COMPONENTS`` which allows
+  the corresponding code to run for every component of
+  a per component installation.
+
+* The :command:`project` command now sets variables
+  :variable:`PROJECT_IS_TOP_LEVEL` and :variable:`<PROJECT-NAME>_IS_TOP_LEVEL`
+  to indicate whether it was called in a top-level ``CMakeLists.txt`` file.
+
+Variables
+---------
+
+* The :envvar:`CMAKE_TOOLCHAIN_FILE` environment variable was added to
+  provide a default value for the :variable:`CMAKE_TOOLCHAIN_FILE` variable.
+
+Properties
+----------
+
+* The :prop_dir:`IMPORTED_TARGETS` directory property was added to
+  get a list of :ref:`Imported Targets` created in the current
+  directory.
+
+* The :prop_tgt:`XCODE_EMBED_APP_EXTENSIONS <XCODE_EMBED_<type>>` target property
+  was added to tell the :generator:`Xcode` generator to embed app extensions
+  such as iMessage sticker packs.
+  Aspects of the embedding can be customized with the
+  :prop_tgt:`XCODE_EMBED_APP_EXTENSIONS_PATH <XCODE_EMBED_<type>>`,
+  :prop_tgt:`XCODE_EMBED_APP_EXTENSIONS_CODE_SIGN_ON_COPY <XCODE_EMBED_<type>_CODE_SIGN_ON_COPY>` and
+  :prop_tgt:`XCODE_EMBED_APP_EXTENSIONS_REMOVE_HEADERS_ON_COPY <XCODE_EMBED_<type>_REMOVE_HEADERS_ON_COPY>`
+  properties.
+
+Modules
+-------
+
+* The :module:`FindBLAS` and :module:`FindLAPACK` modules learned to support
+  the serial ``Fujitsu_SSL2`` and parallel ``Fujitsu_SSL2BLAMP`` libraries.
+
+* The :module:`FindDevIL` module now provides imported targets.
+
+* The :module:`FindIconv` module now has version support.
+
+* The :module:`FindIntl` module now has version support.
+
+* The :module:`FindMPI` module learned to support ``Fujitsu`` and
+  ``FujitsuClang`` in both host and cross compiling modes.
+
+* The :module:`FindMsys` module was added to find MSYS installations.
+  Like :module:`FindCygwin`, it is used automatically by some other
+  find modules to locate UNIX-style tools on Windows.
+
+* The :module:`FindOpenMP` module learned to support ``Fujitsu`` and
+  ``FujitsuClang``.
+
+* The :module:`FindVulkan` module gained imported targets
+  ``Vulkan::Headers`` and ``Vulkan::glslangValidator``.
+
+* The :module:`UseJava` module command ``add_jar`` gained a ``RESOURCES``
+  option to allow explicit naming of resources with non-optional namespace.
+
+* The :module:`UseSWIG` module use now standard library naming conventions
+  for the ``CSharp`` language. See policy :policy:`CMP0122`.
+
+* The :module:`UseSWIG` module now supports using the ``swig`` tool to
+  generate implicit dependencies with the :generator:`Xcode` generator.
+
+Generator Expressions
+---------------------
+
+* A new :genex:`TARGET_RUNTIME_DLLS` generator expression was added.
+
+CTest
+-----
+
+* :manual:`ctest(1)` gained documentation for its ability to capture
+  :ref:`Additional Test Measurements`.
+
+* :manual:`ctest(1)` learned to recognize files attached to a test at run time.
+  Previously it was only possible to attach files to tests at configure time
+  by using the :prop_test:`ATTACHED_FILES` or
+  :prop_test:`ATTACHED_FILES_ON_FAIL` test properties.
+  See :ref:`Additional Test Measurements` for more information.
+
+* :manual:`ctest(1)` gained a ``--output-junit`` option to write test results
+  to a JUnit XML file.
+
+* The :command:`ctest_build` command gained a ``PARALLEL_LEVEL`` option.
+
+CPack
+-----
+
+* The :cpack_gen:`CPack DragNDrop Generator` gained option
+  :variable:`CPACK_DMG_FILESYSTEM` to control the ``.dmg`` filesystem.
+
+* The :cpack_gen:`CPack IFW Generator` now supports hyphens in names
+  given to :command:`cpack_ifw_configure_component` or
+  :command:`cpack_ifw_configure_component_group` as ``DEPENDS`` or
+  ``DEPENDENCIES`` arguments.  This requires QtIFW 3.1 or later.
+
+* The :cpack_gen:`CPack NSIS Generator` gained a new
+  :variable:`CPACK_NSIS_EXECUTABLE` variable to specify the ``makensis``
+  executable to use instead of the default one.
+
+* The :variable:`CPACK_CUSTOM_INSTALL_VARIABLES` variable was added to set
+  variables in ``cmake_install.cmake`` script invocations made by CPack.
+
+Deprecated and Removed Features
+===============================
+
+* Undocumented :variable:`CMAKE_SYSTEM_NAME` version-stripping behavior has
+  been removed entirely. If it is set by a ``-D`` flag or by a
+  :manual:`toolchain file <cmake-toolchains(7)>`, it is left unaltered,
+  even if it still contains a version number.
+  Similar :variable:`CMAKE_HOST_SYSTEM_NAME` version-stripping behavior,
+  also undocumented, has been moved earlier, before :command:`project` or
+  :command:`enable_language` is called.
+
+* ``ARMClang`` cpu/arch compile and link flags are no longer added
+  automatically based on the :variable:`CMAKE_SYSTEM_PROCESSOR`
+  variable or the undocumented ``CMAKE_SYSTEM_ARCH`` variable.
+  They must be specified explicitly.  See policy :policy:`CMP0123`.
+
+Other Changes
+=============
+
+* The :command:`find_file`, :command:`find_path`, :command:`find_program`,
+  and :command:`find_library` commands handle cache variables in the same way
+  regardless how they are defined. See policy :policy:`CMP0125` for details.
+
+* The :command:`find_file`, :command:`find_path`, :command:`find_program`,
+  and :command:`find_library` commands gained the option ``NO_CACHE`` to store
+  find result in normal variable.
+
+* The :command:`foreach` command now isolates loop variables in the loop scope.
+  See policy :policy:`CMP0124` for details.
+
+* The :command:`list` command's ``GET``, ``INSERT``, ``SUBLIST``, and
+  ``REMOVE_AT`` subcommands now error with invalid (i.e., non-integer) values
+  are given as any of their index arguments based on the setting of policy
+  :policy:`CMP0121`.
+
+* The :command:`set(CACHE)` command no longer removes a normal variable
+  of the same name, if any. See policy :policy:`CMP0126`.
+
+* :command:`target_link_libraries` calls referencing object libraries
+  via the :genex:`TARGET_OBJECTS` generator expression now place the
+  object files before all libraries on the link line, regardless of
+  their specified order.  See documentation on
+  :ref:`Linking Object Libraries via \$\<TARGET_OBJECTS\>` for details.
+
+* The :ref:`Ninja Generators` now pass source files and include directories
+  to the compiler using absolute paths.  This makes diagnostic messages and
+  debug symbols more consistent, and matches the :ref:`Makefile Generators`.
+
+* The :generator:`NMake Makefiles` generator now encodes the generated
+  makefiles as UTF-8 with a BOM when using ``nmake`` from VS 9 or above.
+
+* The :ref:`Visual Studio Generators` for VS 2010 and above now place
+  per-source preprocessor definitions after target-wide preprocssor
+  definitions.  This makes VS consistent with the :ref:`Ninja Generators`
+  and the :ref:`Makefile Generators`.
+
+* The precompiled binaries provided on
+  `cmake.org <https://cmake.org/download/>`_ now support
+  ``liblzma`` multi-threading.  See the :variable:`CPACK_THREADS` and
+  :variable:`CPACK_ARCHIVE_THREADS` variables.
+
+Updates
+=======
+
+Changes made since CMake 3.21.0 include the following.
+
+3.21.1
+------
+
+* The :generator:`Visual Studio 17 2022` generator is now based on
+  "Visual Studio 2022 Preview 2".  Previously it was based on "Preview 1.1".
+
+3.21.2
+------
+
+* ``CUDA`` targets with :prop_tgt:`CUDA_SEPARABLE_COMPILATION` enabled are now
+  correctly generated in non-root directories.
+
+* The :generator:`Visual Studio 17 2022` generator is now based on
+  "Visual Studio 2022 Preview 3.1".  Previously it was based on "Preview 2".
+
+3.21.3
+------
+
+* The :generator:`Visual Studio 17 2022` generator is now based on
+  "Visual Studio 2022 Preview 4".  Previously it was based on "Preview 3.1".
+
+* The AMD ROCm Platform ``hipcc`` compiler was identifed by CMake 3.21.0
+  through 3.21.2 as a distinct compiler with id ``ROCMClang``.  This has
+  been removed because it caused regressions.  Instead:
+
+  * ``hipcc`` may no longer be used as a ``HIP`` compiler because it
+    interferes with flags CMake needs to pass to Clang.  Use Clang directly.
+
+  * ``hipcc`` may once again be used as a ``CXX`` compiler, and is treated as
+    whatever compiler it selects underneath, as CMake 3.20 and below did.
+
+3.21.4
+------
+
+* The :generator:`Visual Studio 17 2022` generator is now based on the
+  "Visual Studio 2022" release candidates.  Previously it was based on
+  preview versions.
diff --git a/share/cmake-3.22/Help/release/3.22.rst b/share/cmake-3.22/Help/release/3.22.rst
new file mode 100644
index 0000000..fcb655d
--- /dev/null
+++ b/share/cmake-3.22/Help/release/3.22.rst
@@ -0,0 +1,144 @@
+CMake 3.22 Release Notes
+************************
+
+.. only:: html
+
+  .. contents::
+
+Changes made since CMake 3.21 include the following.
+
+New Features
+============
+
+Commands
+--------
+
+* The :command:`cmake_host_system_information` command can now query
+  `OS identification variables`_ from the :file:`/etc/os-release` file.
+
+* The :command:`string(TIMESTAMP)` command now supports the ``%V``
+  specifier for ISO 8601 week numbers.
+
+.. _`OS identification variables`: https://www.freedesktop.org/software/systemd/man/os-release.html
+
+Variables
+---------
+
+* The :envvar:`CMAKE_BUILD_TYPE` environment variable was added to
+  provide a default value for the :variable:`CMAKE_BUILD_TYPE` variable.
+
+* The :envvar:`CMAKE_CONFIGURATION_TYPES` environment variable was added to
+  provide a default value for the :variable:`CMAKE_CONFIGURATION_TYPES`
+  variable.
+
+* The :envvar:`CMAKE_INSTALL_MODE` environment variable was added to
+  tell :command:`install` rules (implemented by :command:`file(INSTALL)`)
+  to install symbolic links instead of copying of files.
+
+* The :variable:`CMAKE_<LANG>_LINK_WHAT_YOU_USE_FLAG` and
+  :variable:`CMAKE_LINK_WHAT_YOU_USE_CHECK` variables were added to
+  control the linker flag and check used by the
+  :prop_tgt:`LINK_WHAT_YOU_USE` target property.
+
+* The :variable:`CMAKE_REQUIRE_FIND_PACKAGE_<PackageName>` variable
+  was added to turn a non-REQUIRED :command:`find_package` call into
+  a REQUIRED one.
+
+Properties
+----------
+
+* The :prop_tgt:`<LANG>_EXTENSIONS` target property is now initialized to
+  :variable:`CMAKE_<LANG>_EXTENSIONS_DEFAULT`, detected from the compiler.
+  See :policy:`CMP0128`.
+
+* The :prop_sf:`VS_SETTINGS` source file property is now supported for
+  all source file types.  Previously it worked only for non-built sources.
+
+Modules
+-------
+
+* The :module:`CMakeDependentOption` module :command:`cmake_dependent_option`
+  macro now supports full :ref:`Condition Syntax`.
+  See policy :policy:`CMP0127`.
+
+* The :module:`FetchContent` module now passes through the
+  :variable:`CMAKE_TLS_VERIFY`, :variable:`CMAKE_TLS_CAINFO`,
+  :variable:`CMAKE_NETRC` and :variable:`CMAKE_NETRC_FILE` variables (when
+  defined) to the underlying :module:`ExternalProject` sub-build.
+  Previously, those variables were silently ignored by :module:`FetchContent`.
+
+* The :module:`FindBLAS` and :module:`FindLAPACK` modules gained
+  a ``BLA_SIZEOF_INTEGER`` option to find a BLAS/LAPACK whose ABI
+  uses a specific integer size.
+
+* The :module:`FindJasper` module now provides an imported target.
+
+* The :module:`FindMatlab` module now provides imported targets.
+
+* The :module:`FindPkgConfig` module gained a :variable:`PKG_CONFIG_ARGN`
+  variable to specify arguments to ``pkg-config`` calls.
+
+* The :module:`GoogleTest` module :command:`gtest_discover_tests`
+  function gained a ``TEST_FILTER`` option to filter tests using
+  ``--gtest_filter`` during test discovery.
+
+* The :module:`UseSWIG` module, for :ref:`Visual Studio Generators`,
+  can now use the ``swig`` tool to generate implicit dependencies.
+
+CTest
+-----
+
+* :manual:`ctest(1)` learned to recognize labels attached to a test at run time.
+  Previously it was only possible to attach labels to tests at configure time
+  by using the :prop_test:`LABELS` test property.
+  See :ref:`Additional Test Measurements` for more information.
+
+* :manual:`ctest(1)` learned to be able to modify the environment for a test
+  through the :prop_test:`ENVIRONMENT_MODIFICATION` property. This is allows
+  for updates to environment variables based on the environment present at
+  test time.
+
+* The :command:`ctest_memcheck` command now also generates a
+  :file:`DynamicAnalysis-Test.xml` file which may be used to submit test
+  results to CDash.
+
+CPack
+-----
+
+* The :cpack_gen:`CPack DEB Generator` gained the
+  option to set :variable:`CPACK_DEBIAN_COMPRESSION_TYPE` to ``zstd``,
+  which enables Zstandard compression for deb packages.
+
+* The :cpack_gen:`CPack NSIS Generator` gained a new
+  :variable:`CPACK_NSIS_IGNORE_LICENSE_PAGE` variable to suppress
+  the license page in the installer.
+
+* The :cpack_gen:`CPack RPM Generator` gained the
+  :variable:`CPACK_RPM_REQUIRES_EXCLUDE_FROM` option to avoid scanning
+  specific paths for dependencies.
+
+Deprecated and Removed Features
+===============================
+
+* The :generator:`Visual Studio 10 2010` generator is now deprecated
+  and will be removed in a future version of CMake.
+
+Other Changes
+=============
+
+* The :manual:`Compile Features <cmake-compile-features(7)>` functionality now
+  correctly disables or enables compiler extensions when no standard level is
+  specified and avoids unnecessarily adding language standard flags if the
+  requested settings match the compiler's defaults. See :policy:`CMP0128`.
+
+* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
+  now ignores features for languages that are not enabled.
+
+* The :ref:`Ninja Generators` now implement the ``edit_cache`` target
+  using :manual:`ccmake(1)` if available.
+
+* The :generator:`Ninja` and :generator:`NMake Makefiles` generators
+  now use the MSVC ``-external:I`` flag for system includes.
+  This became available as of VS 16.10 (toolchain version 14.29.30037).
+
+* The :cpack_gen:`CPack NSIS Generator` now requires NSIS 3.03 or later.
diff --git a/share/cmake-3.22/Help/release/3.3.rst b/share/cmake-3.22/Help/release/3.3.rst
new file mode 100644
index 0000000..44f4e19
--- /dev/null
+++ b/share/cmake-3.22/Help/release/3.3.rst
@@ -0,0 +1,287 @@
+CMake 3.3 Release Notes
+***********************
+
+.. only:: html
+
+  .. contents::
+
+Changes made since CMake 3.2 include the following.
+
+New Features
+============
+
+Generators
+----------
+
+* The :ref:`Makefile Generators` now add ``.DELETE_ON_ERROR`` to the
+  makefiles that contain the actual build rules for files on disk.
+  This tells GNU make to remove rule outputs when their recipe
+  modifies an output but fails.
+
+* The :ref:`Visual Studio Generators` learned to support ``.xaml``
+  source files and automatically associate them with corresponding
+  ``.h`` and ``.cpp`` sources.
+
+* A new experimental :generator:`Green Hills MULTI` generator was
+  added on Windows.  `Green Hills MULTI`_ is an IDE for embedded
+  real-time systems.
+
+.. _`Green Hills MULTI`: http://www.ghs.com/products/MULTI_IDE.html
+
+Commands
+--------
+
+* The :command:`add_dependencies` command learned to allow dependencies
+  to be added to :ref:`interface libraries <Interface Libraries>`.
+  Dependencies added to an interface library are followed transitively
+  in its place since the target itself does not build.
+
+* The :command:`execute_process` command learned to support specifying
+  the same file for ``OUTPUT_FILE`` and ``ERROR_FILE``.
+
+* The :command:`file(GLOB)` and :command:`file(GLOB_RECURSE)` commands
+  learned a new ``LIST_DIRECTORIES <bool>`` option to specify whether
+  the glob result should include directories.
+
+* The :command:`find_library`, :command:`find_path`, and :command:`find_file`
+  commands now search in installation prefixes derived from the ``PATH``
+  environment variable.
+
+* The :command:`if` command learned a new ``IN_LIST`` operator that
+  evaluates to true if a given element is contained in a named list.
+
+* The :command:`install(EXPORT)` and :command:`export()` commands
+  learned to export targets that populate the :prop_tgt:`INTERFACE_SOURCES`
+  target property.
+
+* The :command:`install(TARGETS)` command learned to support
+  generator expressions in the ``DESTINATION`` value.
+
+Variables
+---------
+
+* The version of some Fortran compilers is now detected and stored in the
+  :variable:`CMAKE_Fortran_COMPILER_VERSION <CMAKE_<LANG>_COMPILER_VERSION>`
+  variable.
+
+* The :ref:`Visual Studio Generators` learned a new
+  :variable:`CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD` option
+  to put the ``INSTALL`` target in the default build of a
+  solution (``.sln``) file.
+
+Properties
+----------
+
+* A :prop_tgt:`CROSSCOMPILING_EMULATOR` target property and supporting
+  :variable:`CMAKE_CROSSCOMPILING_EMULATOR` variable were introduced
+  to allow target platform binaries to run on the host during cross
+  compiling.
+
+* A :prop_tgt:`<LANG>_INCLUDE_WHAT_YOU_USE` target property and supporting
+  :variable:`CMAKE_<LANG>_INCLUDE_WHAT_YOU_USE` variable were introduced
+  to tell the :ref:`Makefile Generators` and the :generator:`Ninja` generator
+  to run ``include-what-you-use`` along with the compiler for ``C`` and
+  ``CXX`` languages.
+
+* The :prop_tgt:`<LANG>_VISIBILITY_PRESET` and
+  :prop_tgt:`VISIBILITY_INLINES_HIDDEN` target properties now
+  affect compilation in sources of all target types.  See
+  policy :policy:`CMP0063`.
+
+* The :prop_tgt:`XCODE_ATTRIBUTE_<an-attribute>` target property learned
+  to support generator expressions.
+
+Modules
+-------
+
+* The :module:`CheckFortranCompilerFlag` module was introduced
+  to check ``Fortran`` compiler flags, much like the
+  :module:`CheckCCompilerFlag` module already does for ``C``.
+
+* The :module:`ExternalData` module learned a new
+  :variable:`ExternalData_NO_SYMLINKS` option to disable use of
+  symbolic links to populate the real data files and use copies
+  instead.
+
+* The :module:`ExternalData` module learned a new ``RECURSE:``
+  option in ``DATA{}`` references specifying directories.
+  This allows an entire directory tree of associated files
+  to be matched.
+
+* The :module:`ExternalData` module learned a new URL template
+  placeholder ``%(algo:<key>)`` to allow custom mapping from
+  algorithm name to URL component through configuration of new
+  :variable:`ExternalData_URL_ALGO_<algo>_<key>` variables.
+  This allows more flexibility in remote URLs.
+
+* The :module:`ExternalProject` module learned to replace tokens
+  like ``<BINARY_DIR>`` in the ``BYPRODUCTS`` of each step.
+
+* The :module:`ExternalProject` module APIs learned to support
+  :manual:`generator expressions <cmake-generator-expressions(7)>`
+  when using ``LOG_*`` options and in CMake initial cache options.
+
+* The :module:`FindBoost` module now tracks the directories containing
+  libraries separately for RELEASE and DEBUG configurations.
+
+* The :module:`FindCUDA` module now defaults to using the static
+  CUDA runtime library if it is available.  A new
+  ``CUDA_USE_STATIC_CUDA_RUNTIME`` option is offered to control
+  this behavior.
+
+* The :module:`FindMatlab` module was completely rewritten.  It learned
+  about versions and components and to find Matlab in a more precise and
+  multiplatform way.  The module now offers APIs to create mex extensions,
+  documentation, and unit tests.
+
+* The :module:`FindPackageHandleStandardArgs` module
+  ``FIND_PACKAGE_HANDLE_STANDARD_ARGS`` function now
+  always populates both the ``<PackageName>_FOUND``
+  and ``<UPPERCASE_NAME>_FOUND`` variables (the latter
+  for backwards compatibility).  The ``FOUND_VAR``
+  option is now ignored except to enforce its allowed
+  values.
+
+* The :module:`InstallRequiredSystemLibraries` module learned a new
+  ``CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT`` option to specify the
+  installation component.
+
+Generator Expressions
+---------------------
+
+* A new ``COMPILE_LANGUAGE`` generator expression was introduced to
+  allow specification of compile options for target files based on the
+  :prop_sf:`LANGUAGE` of each source file.  Due to limitations of the
+  underlying native build tools, this feature has varying support across
+  generators.  See the :manual:`cmake-generator-expressions(7)` manual
+  for details.
+
+CTest
+-----
+
+* The :manual:`ctest(1)` tool learned a new ``--repeat-until-fail <n>``
+  option to help find sporadic test failures.
+
+* The :module:`CTestCoverageCollectGCOV` module learned to support
+  the same ``CTEST_CUSTOM_COVERAGE_EXCLUDE`` option as the
+  :command:`ctest_coverage` command.
+
+CPack
+-----
+
+* The :cpack_gen:`CPack IFW Generator` learned to support
+  Qt Framework Installer 2.0 tools.
+
+* The :cpack_gen:`CPack DEB Generator` learned a new
+  :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_SHLIBDEPS`
+  variable to specify per-component use of ``dpkg-shlibdeps``.
+
+* The :cpack_gen:`CPack DEB Generator` learned a new
+  :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS`
+  option to specify per-component dependencies.
+
+* The :cpack_gen:`CPack RPM Generator` learned to package symbolic links
+  more cleanly and now supports directory symlinks with recent
+  ``rpmbuild`` versions.
+
+* The :cpack_gen:`CPack RPM Generator` learned a new
+  :variable:`CPACK_RPM_ADDITIONAL_MAN_DIRS` variable to specify
+  directories containing man pages for the brp-compress RPM macro.
+
+* The :cpack_gen:`CPack RPM Generator` learned a new
+  :variable:`CPACK_RPM_<component>_PACKAGE_ARCHITECTURE` variable
+  to specify a component-specific package architecture.
+
+* The CPack WIX generator learned the new
+  :prop_inst:`CPACK_START_MENU_SHORTCUTS`,
+  :prop_inst:`CPACK_DESKTOP_SHORTCUTS` and
+  :prop_inst:`CPACK_STARTUP_SHORTCUTS` installed file properties which can
+  be used to install shortcuts in the Start Menu, on the Desktop and
+  in the Startup Folder respectively.
+
+Other
+-----
+
+* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
+  is now aware of features supported by GNU compilers on Windows, versions
+  4.4 through 5.0.
+
+* The :manual:`cmake(1)` ``-E tar`` command learned a new
+  ``--format<format>`` option to specify the archive format to
+  be written.
+
+* On OS X, CMake learned to create XCTest bundles to test Frameworks
+  and App Bundles within Xcode.  The :module:`FindXCTest` module
+  provides convenience functions to handle :prop_tgt:`XCTEST` bundles.
+
+Deprecated and Removed Features
+===============================
+
+* On OS X the :manual:`cmake-gui(1)` no longer has the
+  ``Install For Command Line Use`` menu item.  Instead there
+  is a ``How to Install For Command Line Use`` menu item
+  that shows an informational dialog box explaining how to
+  make the command line tools available.  For example::
+
+    /Applications/CMake.app/Contents/bin/cmake-gui --install
+
+* The :command:`ctest_build` and :command:`build_command` commands
+  no longer tell ``make`` tools to ignore errors with the ``-i`` option.
+  Previously this was done for :ref:`Makefile Generators` but not others.
+  See policy :policy:`CMP0061`.
+
+* The :generator:`Visual Studio 10 2010` generator no longer checks
+  for running VS IDEs with the project open or asks them to reload.
+  This was originally done for VS 10 because it had been done for
+  VS 7 through 9 to avoid prompting for every project in a solution.
+  Since VS >= 10 allow the whole solution to reload at once they
+  do not need CMake to help them.
+
+* The :generator:`Visual Studio 7` generator (.NET 2002) is now
+  deprecated and will be removed in a future version of CMake.
+
+* The :generator:`Visual Studio 6` generator is now deprecated
+  and will be removed in a future version of CMake.
+
+* The :command:`find_package` command no longer considers project
+  build trees recently configured in a :manual:`cmake-gui(1)`.
+  This was previously done only on Windows and is now never done.
+  The ``NO_CMAKE_BUILDS_PATH`` option is now ignored if given
+  and effectively always on.
+  Projects may populate the :ref:`User Package Registry` to aid
+  users building multiple dependent projects one after another.
+
+* The :command:`add_definitions()` command no longer causes a
+  :prop_dir:`DEFINITIONS` directory property to be populated. See policy
+  :policy:`CMP0059`.
+
+* With Visual Studio 7, 8, and 9 generators the value of the ``$(OutDir)``
+  placeholder no longer evaluates to the configuration name.  Projects
+  should use ``$(ConfigurationName)`` for that instead.
+
+* Using the output of :command:`export()` with the :command:`install(FILES)`
+  command is no longer allowed.  See policy :policy:`CMP0062` for details.
+
+Other Changes
+=============
+
+* The :generator:`Ninja` generator now requires that calls to the
+  :command:`add_custom_command` and :command:`add_custom_target`
+  commands use the ``BYPRODUCTS`` option to explicitly specify any
+  files generated by the custom commands that are not listed as
+  outputs (perhaps because their timestamps are allowed to be older
+  than the inputs).  See policy :policy:`CMP0058`.
+
+* Build-time progress output of :ref:`Makefile Generators` has been improved.
+  It no longer mixes progress and build rule messages during parallel builds.
+  The link rule messages now have progress and are displayed as bold green
+  instead of bold red (since red is often associated with an error message).
+
+* The :variable:`CMAKE_CFG_INTDIR` variable value for Visual Studio
+  7, 8, and 9 is now ``$(ConfigurationName)`` instead of ``$(OutDir)``.
+  This should have no effect on the intended use cases of the variable.
+
+* Linking to library files by a full path in an implicit linker search
+  directory (e.g. ``/usr/lib/libfoo.a``) no longer asks the linker to
+  search for the library (e.g. ``-lfoo``) and now links by full path.
+  See policy :policy:`CMP0060`.
diff --git a/share/cmake-3.18/Help/release/3.4.rst b/share/cmake-3.22/Help/release/3.4.rst
similarity index 100%
rename from share/cmake-3.18/Help/release/3.4.rst
rename to share/cmake-3.22/Help/release/3.4.rst
diff --git a/share/cmake-3.18/Help/release/3.5.rst b/share/cmake-3.22/Help/release/3.5.rst
similarity index 100%
rename from share/cmake-3.18/Help/release/3.5.rst
rename to share/cmake-3.22/Help/release/3.5.rst
diff --git a/share/cmake-3.22/Help/release/3.6.rst b/share/cmake-3.22/Help/release/3.6.rst
new file mode 100644
index 0000000..b798f0d
--- /dev/null
+++ b/share/cmake-3.22/Help/release/3.6.rst
@@ -0,0 +1,318 @@
+CMake 3.6 Release Notes
+***********************
+
+.. only:: html
+
+  .. contents::
+
+Changes made since CMake 3.5 include the following.
+
+New Features
+============
+
+Generators
+----------
+
+* The :generator:`Ninja` generator learned to produce phony targets
+  of the form ``sub/dir/all`` to drive the build of a subdirectory.
+  This is equivalent to ``cd sub/dir; make all`` with
+  :ref:`Makefile Generators`.
+
+* The :generator:`Ninja` generator now includes system header files in build
+  dependencies to ensure correct re-builds when system packages are updated.
+
+* The :generator:`Visual Studio 14 2015` generator learned to support the
+  Clang/C2 toolsets, e.g. with the ``-T v140_clang_3_7`` option.
+  This feature is experimental.
+
+Commands
+--------
+
+* The :command:`add_custom_command` and :command:`add_custom_target` commands
+  learned how to use the :prop_tgt:`CROSSCOMPILING_EMULATOR` executable
+  target property.
+
+* The :command:`install` command learned a new ``EXCLUDE_FROM_ALL`` option
+  to leave installation rules out of the default installation.
+
+* The :command:`list` command gained a ``FILTER`` sub-command to filter
+  list elements by regular expression.
+
+* The :command:`string(TIMESTAMP)` and :command:`file(TIMESTAMP)`
+  commands gained support for the ``%s`` placeholder.  This is
+  the number of seconds since the UNIX Epoch.
+
+Variables
+---------
+
+* A :variable:`CMAKE_DEPENDS_IN_PROJECT_ONLY` variable was introduced
+  to tell :ref:`Makefile Generators` to limit dependency scanning only
+  to files in the project source and build trees.
+
+* A new :variable:`CMAKE_HOST_SOLARIS` variable was introduced to
+  indicate when CMake is running on an Oracle Solaris host.
+
+* A :variable:`CMAKE_<LANG>_STANDARD_INCLUDE_DIRECTORIES` variable was
+  added for use by toolchain files to specify system include directories
+  to be appended to all compiler command lines.
+
+* The :variable:`CMAKE_<LANG>_STANDARD_LIBRARIES` variable is now documented.
+  It is intended for use by toolchain files to specify system libraries to be
+  added to all linker command lines.
+
+* A :variable:`CMAKE_NINJA_OUTPUT_PATH_PREFIX` variable was introduced
+  to tell the :generator:`Ninja` generator to configure the generated
+  ``build.ninja`` file for use as a ``subninja``.
+
+* A :variable:`CMAKE_TRY_COMPILE_PLATFORM_VARIABLES` variable was
+  added for use by toolchain files to specify platform-specific
+  variables that must be propagated by the :command:`try_compile`
+  command into test projects.
+
+* A :variable:`CMAKE_TRY_COMPILE_TARGET_TYPE` variable was added
+  to optionally tell the :command:`try_compile` command to build
+  a static library instead of an executable.  This is useful for
+  cross-compiling toolchains that cannot link binaries without
+  custom flags or scripts.
+
+Properties
+----------
+
+* A :prop_tgt:`DEPLOYMENT_REMOTE_DIRECTORY` target property was introduced
+  to tell the :generator:`Visual Studio 9 2008` and
+  :generator:`Visual Studio 8 2005` generators to generate the "remote
+  directory" for WinCE project deployment and debugger settings.
+
+* A :prop_tgt:`<LANG>_CLANG_TIDY` target property and supporting
+  :variable:`CMAKE_<LANG>_CLANG_TIDY` variable were introduced to tell the
+  :ref:`Makefile Generators` and the :generator:`Ninja` generator to run
+  ``clang-tidy`` along with the compiler for ``C`` and ``CXX`` languages.
+
+* A :prop_test:`TIMEOUT_AFTER_MATCH` test property was introduced to
+  optionally tell CTest to enforce a secondary timeout after matching
+  certain output from a test.
+
+* A :prop_tgt:`VS_CONFIGURATION_TYPE` target property was introduced
+  to specify a custom project file type for :ref:`Visual Studio Generators`
+  supporting VS 2010 and above.
+
+* A :prop_dir:`VS_STARTUP_PROJECT` directory property was introduced
+  to specify for :ref:`Visual Studio Generators` the default startup
+  project for generated solutions (``.sln`` files).
+
+Modules
+-------
+
+* The :module:`CMakePushCheckState` module now pushes/pops/resets the variable
+  ``CMAKE_EXTRA_INCLUDE_FILE`` used in :module:`CheckTypeSize`.
+
+* The :module:`ExternalProject` module leared the ``GIT_SHALLOW 1``
+  option to perform a shallow clone of a Git repository.
+
+* The :module:`ExternalProject` module learned to initialize Git submodules
+  recursively and also to initialize new submodules on updates.  Use the
+  ``GIT_SUBMODULES`` option to restrict which submodules are initialized and
+  updated.
+
+* The :module:`ExternalProject` module leared the ``DOWNLOAD_NO_EXTRACT 1``
+  argument to skip extracting the file that is downloaded (e.g., for
+  self-extracting shell installers or ``.msi`` files).
+
+* The :module:`ExternalProject` module now uses ``TLS_VERIFY`` when fetching
+  from git repositories.
+
+* The :module:`FindBLAS` and :module:`FindLAPACK` modules learned to
+  support `OpenBLAS <http://www.openblas.net>`__.
+
+* The :module:`FindCUDA` module learned to find the ``cublas_device`` library.
+
+* The :module:`FindGTest` module ``gtest_add_tests`` function now causes
+  CMake to automatically re-run when test sources change so that they
+  can be re-scanned.
+
+* The :module:`FindLTTngUST` module was introduced to find the LTTng-UST
+  library.
+
+* The :module:`FindPkgConfig` module learned to optionally create imported
+  targets for the libraries it has found.
+
+* The :module:`FindProtobuf` module learned to provide a ``Protobuf_VERSION``
+  variable and check the version number requested in a :command:`find_package`
+  call.
+
+* The :module:`InstallRequiredSystemLibraries` module learned a new
+  ``CMAKE_INSTALL_UCRT_LIBRARIES`` option to enable app-local deployment
+  of the Windows Universal CRT libraries with Visual Studio 2015.
+
+Platforms
+---------
+
+* The Clang compiler is now supported on CYGWIN.
+
+* Support was added for the Bruce C Compiler with compiler id ``Bruce``.
+
+CTest
+-----
+
+* The :command:`ctest_update` command now looks at the
+  :variable:`CTEST_GIT_INIT_SUBMODULES` variable to determine whether
+  submodules should be updated or not before updating.
+
+* The :command:`ctest_update` command will now synchronize submodules on an
+  update. Updates which add submodules or change a submodule's URL will now be
+  pulled properly.
+
+CPack
+-----
+
+* The :cpack_gen:`CPack DEB Generator` learned how to handle ``$ORIGIN``
+  in ``CMAKE_INSTALL_RPATH`` when :variable:`CPACK_DEBIAN_PACKAGE_SHLIBDEPS`
+  is used for dependency auto detection.
+
+* The :cpack_gen:`CPack DEB Generator` learned how to generate
+  ``DEBIAN/shlibs`` control file when package contains shared libraries.
+
+* The :cpack_gen:`CPack DEB Generator` learned how to generate
+  ``DEBIAN/postinst`` and ``DEBIAN/postrm`` files if the package installs
+  libraries in ldconfig-controlled locations (e.g. ``/lib/``, ``/usr/lib/``).
+
+* The :cpack_gen:`CPack DEB Generator` learned how to generate dependencies
+  between Debian packages if multi-component setup is used and
+  :variable:`CPACK_COMPONENT_<compName>_DEPENDS` variables are set.
+  For backward compatibility this feature is disabled by default.
+  See :variable:`CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS`.
+
+* The :cpack_gen:`CPack DEB Generator` learned how to set custom package
+  file names including how to generate properly-named Debian packages::
+
+    <PackageName>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb
+
+  For backward compatibility this feature is disabled by default. See
+  :variable:`CPACK_DEBIAN_FILE_NAME` and
+  :variable:`CPACK_DEBIAN_<COMPONENT>_FILE_NAME`.
+
+* The :cpack_gen:`CPack DEB Generator` learned how to set the package
+  release number (``DebianRevisionNumber`` in package file name when
+  used in combination with ``DEB-DEFAULT`` value set by
+  :variable:`CPACK_DEBIAN_FILE_NAME`).
+  See :variable:`CPACK_DEBIAN_PACKAGE_RELEASE`.
+
+* The :cpack_gen:`CPack DEB Generator` learned how to set the package
+  architecture per-component.
+  See :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_ARCHITECTURE`.
+
+* The :cpack_gen:`CPack DragNDrop Generator` learned a new option to skip the
+  ``/Applications`` symlink.
+  See the :variable:`CPACK_DMG_DISABLE_APPLICATIONS_SYMLINK` variable.
+
+* The :module:`CPackIFW` module gained a new
+  :command:`cpack_ifw_update_repository` command to update a QtIFW-specific
+  repository from a remote repository.
+
+* The :cpack_gen:`CPack RPM Generator` learned how to set RPM ``dist`` tag
+  as part of RPM ``Release:`` tag when enabled (mandatory on some Linux
+  distributions for e.g. on Fedora).
+  See :variable:`CPACK_RPM_PACKAGE_RELEASE_DIST`.
+
+* The :cpack_gen:`CPack RPM Generator` learned how to set default values
+  for owning user/group and file/directory permissions of package content.
+  See :variable:`CPACK_RPM_DEFAULT_USER`, :variable:`CPACK_RPM_DEFAULT_GROUP`,
+  :variable:`CPACK_RPM_DEFAULT_FILE_PERMISSIONS`,
+  :variable:`CPACK_RPM_DEFAULT_DIR_PERMISSIONS` and their per component
+  counterparts.
+
+* The :cpack_gen:`CPack RPM Generator` learned how to set user defined
+  package file names, how to specify that rpmbuild should decide on file
+  name format as well as handling of multiple rpm packages generated by a
+  single user defined spec file.
+  See :variable:`CPACK_RPM_PACKAGE_NAME` and
+  :variable:`CPACK_RPM_<component>_PACKAGE_NAME`.
+
+* The :cpack_gen:`CPack RPM Generator` learned how to correctly handle symlinks
+  that are pointing outside generated packages.
+
+Other
+-----
+
+* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
+  is now aware of features supported by Intel C++ compilers versions 12.1
+  through 16.0 on UNIX platforms.
+
+Deprecated and Removed Features
+===============================
+
+* The :module:`CMakeForceCompiler` module and its macros are now deprecated.
+  See module documentation for an explanation.
+
+* The :command:`find_library`, :command:`find_path`, and :command:`find_file`
+  commands no longer search in installation prefixes derived from the ``PATH``
+  environment variable on non-Windows platforms.  This behavior was added in
+  CMake 3.3 to support Windows hosts but has proven problematic on UNIX hosts.
+  Users that keep some ``<prefix>/bin`` directories in the ``PATH`` just for
+  their tools do not necessarily want any supporting ``<prefix>/lib``
+  directories searched.  One may set the ``CMAKE_PREFIX_PATH`` environment
+  variable with a :ref:`semicolon-separated list <CMake Language Lists>` of prefixes that are
+  to be searched.
+
+* The :generator:`Visual Studio 7 .NET 2003` generator is now
+  deprecated and will be removed in a future version of CMake.
+
+* The :generator:`Visual Studio 7` generator (for VS .NET 2002) has been
+  removed.  It had been deprecated since CMake 3.3.
+
+* The :generator:`Visual Studio 6` generator has been removed.
+  It had been deprecated since CMake 3.3.
+
+Other Changes
+=============
+
+* The precompiled OS X binary provided on ``cmake.org`` now requires
+  OS X 10.7 or newer.
+
+* On Linux and FreeBSD platforms, when building CMake itself from source and
+  not using a system-provided libcurl, OpenSSL is now used by default if it is
+  found on the system.  This enables SSL/TLS support for commands supporting
+  network communication via ``https``, such as :command:`file(DOWNLOAD)`,
+  :command:`file(UPLOAD)`, and :command:`ctest_submit`.
+
+* The :manual:`cmake(1)` ``--build`` command-line tool now rejects multiple
+  ``--target`` options with an error instead of silently ignoring all but the
+  last one.
+
+* :prop_tgt:`AUTOMOC` now diagnoses name collisions when multiple source
+  files in different directories use ``#include <moc_foo.cpp>`` with the
+  same name (because the generated ``moc_foo.cpp`` files would collide).
+
+* The :module:`FindBISON` module ``BISON_TARGET`` macro now supports
+  special characters by passing the ``VERBATIM`` option to internal
+  :command:`add_custom_command` calls.  This may break clients that
+  added escaping manually to work around the bug.
+
+* The :module:`FindFLEX` module ``FLEX_TARGET`` macro now supports
+  special characters by passing the ``VERBATIM`` option to internal
+  :command:`add_custom_command` calls.  This may break clients that
+  added escaping manually to work around the bug.
+
+* The :module:`FindProtobuf` module input and output variables were all renamed
+  from ``PROTOBUF_`` to ``Protobuf_`` for consistency with other find modules.
+  Input variables of the old case will be honored if provided, and output
+  variables of the old case are always provided.
+
+* The :cpack_gen:`CPack RPM Generator` now supports upper cased component
+  names in per component CPackRPM specific variables.
+  E.g. component named ``foo`` now expects component specific
+  variable to be ``CPACK_RPM_FOO_PACKAGE_NAME`` while before
+  it expected ``CPACK_RPM_foo_PACKAGE_NAME``.
+  Upper cased component name part in variables is compatible
+  with convention used for other CPack variables.
+  For back compatibility old format of variables is still valid
+  and preferred if both versions of variable are set, but the
+  preferred future use is upper cased component names in variables.
+  New variables that will be added to CPackRPM in later versions
+  will only support upper cased component variable format.
+
+* The CPack NSIS generator's configuration file template was fixed to
+  quote the path to the uninstaller tool used by the
+  :variable:`CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL` option.
+  This avoids depending on an insecure Windows feature to run an
+  uninstaller tool with a space in the path.
diff --git a/share/cmake-3.18/Help/release/3.7.rst b/share/cmake-3.22/Help/release/3.7.rst
similarity index 100%
rename from share/cmake-3.18/Help/release/3.7.rst
rename to share/cmake-3.22/Help/release/3.7.rst
diff --git a/share/cmake-3.18/Help/release/3.8.rst b/share/cmake-3.22/Help/release/3.8.rst
similarity index 100%
rename from share/cmake-3.18/Help/release/3.8.rst
rename to share/cmake-3.22/Help/release/3.8.rst
diff --git a/share/cmake-3.18/Help/release/3.9.rst b/share/cmake-3.22/Help/release/3.9.rst
similarity index 100%
rename from share/cmake-3.18/Help/release/3.9.rst
rename to share/cmake-3.22/Help/release/3.9.rst
diff --git a/share/cmake-3.18/Help/release/dev.txt b/share/cmake-3.22/Help/release/dev.txt
similarity index 100%
rename from share/cmake-3.18/Help/release/dev.txt
rename to share/cmake-3.22/Help/release/dev.txt
diff --git a/share/cmake-3.22/Help/release/index.rst b/share/cmake-3.22/Help/release/index.rst
new file mode 100644
index 0000000..3d2ed43
--- /dev/null
+++ b/share/cmake-3.22/Help/release/index.rst
@@ -0,0 +1,38 @@
+:orphan:
+
+CMake Release Notes
+*******************
+
+..
+  This file should include the adjacent "dev.txt" file
+  in development versions but not in release versions.
+
+Releases
+========
+
+.. toctree::
+   :maxdepth: 1
+
+   3.22 <3.22>
+   3.21 <3.21>
+   3.20 <3.20>
+   3.19 <3.19>
+   3.18 <3.18>
+   3.17 <3.17>
+   3.16 <3.16>
+   3.15 <3.15>
+   3.14 <3.14>
+   3.13 <3.13>
+   3.12 <3.12>
+   3.11 <3.11>
+   3.10 <3.10>
+   3.9 <3.9>
+   3.8 <3.8>
+   3.7 <3.7>
+   3.6 <3.6>
+   3.5 <3.5>
+   3.4 <3.4>
+   3.3 <3.3>
+   3.2 <3.2>
+   3.1 <3.1>
+   3.0 <3.0>
diff --git a/share/cmake-3.22/Help/variable/ANDROID.rst b/share/cmake-3.22/Help/variable/ANDROID.rst
new file mode 100644
index 0000000..68dccf2
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/ANDROID.rst
@@ -0,0 +1,7 @@
+ANDROID
+-------
+
+.. versionadded:: 3.7
+
+Set to ``1`` when the target system (:variable:`CMAKE_SYSTEM_NAME`) is
+``Android``.
diff --git a/share/cmake-3.18/Help/variable/APPLE.rst b/share/cmake-3.22/Help/variable/APPLE.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/APPLE.rst
rename to share/cmake-3.22/Help/variable/APPLE.rst
diff --git a/share/cmake-3.18/Help/variable/BORLAND.rst b/share/cmake-3.22/Help/variable/BORLAND.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/BORLAND.rst
rename to share/cmake-3.22/Help/variable/BORLAND.rst
diff --git a/share/cmake-3.18/Help/variable/BUILD_SHARED_LIBS.rst b/share/cmake-3.22/Help/variable/BUILD_SHARED_LIBS.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/BUILD_SHARED_LIBS.rst
rename to share/cmake-3.22/Help/variable/BUILD_SHARED_LIBS.rst
diff --git a/share/cmake-3.22/Help/variable/CACHE.rst b/share/cmake-3.22/Help/variable/CACHE.rst
new file mode 100644
index 0000000..d5489c8
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CACHE.rst
@@ -0,0 +1,20 @@
+CACHE
+-----
+
+.. versionadded:: 3.13
+
+Operator to read cache variables.
+
+Use the syntax ``$CACHE{VAR}`` to read cache entry ``VAR``.
+See the :ref:`cmake-language(7) variables <CMake Language Variables>`
+documentation for more complete documentation of the interaction of
+normal variables and cache entries.
+
+When evaluating :ref:`Variable References` of the form ``${VAR}``,
+CMake first searches for a normal variable with that name, and if not
+found CMake will search for a cache entry with that name.
+The ``$CACHE{VAR}`` syntax can be used to do direct cache lookup and
+ignore any existing normal variable.
+
+See the :command:`set` and :command:`unset` commands to see how to
+write or remove cache variables.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ABSOLUTE_DESTINATION_FILES.rst b/share/cmake-3.22/Help/variable/CMAKE_ABSOLUTE_DESTINATION_FILES.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_ABSOLUTE_DESTINATION_FILES.rst
rename to share/cmake-3.22/Help/variable/CMAKE_ABSOLUTE_DESTINATION_FILES.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_AIX_EXPORT_ALL_SYMBOLS.rst b/share/cmake-3.22/Help/variable/CMAKE_AIX_EXPORT_ALL_SYMBOLS.rst
new file mode 100644
index 0000000..699fe0f
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_AIX_EXPORT_ALL_SYMBOLS.rst
@@ -0,0 +1,8 @@
+CMAKE_AIX_EXPORT_ALL_SYMBOLS
+----------------------------
+
+.. versionadded:: 3.17
+
+Default value for :prop_tgt:`AIX_EXPORT_ALL_SYMBOLS` target property.
+This variable is used to initialize the property on each target as it is
+created.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ANDROID_ANT_ADDITIONAL_OPTIONS.rst b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_ANT_ADDITIONAL_OPTIONS.rst
new file mode 100644
index 0000000..2d6b4b9
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_ANT_ADDITIONAL_OPTIONS.rst
@@ -0,0 +1,7 @@
+CMAKE_ANDROID_ANT_ADDITIONAL_OPTIONS
+------------------------------------
+
+.. versionadded:: 3.4
+
+Default value for the :prop_tgt:`ANDROID_ANT_ADDITIONAL_OPTIONS` target property.
+See that target property for additional information.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ANDROID_API.rst b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_API.rst
new file mode 100644
index 0000000..4388bf2
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_API.rst
@@ -0,0 +1,13 @@
+CMAKE_ANDROID_API
+-----------------
+
+.. versionadded:: 3.1
+
+When :ref:`Cross Compiling for Android with NVIDIA Nsight Tegra Visual Studio
+Edition`, this variable may be set to specify the default value for the
+:prop_tgt:`ANDROID_API` target property.  See that target property for
+additional information.
+
+Otherwise, when :ref:`Cross Compiling for Android`, this variable provides
+the Android API version number targeted.  This will be the same value as
+the :variable:`CMAKE_SYSTEM_VERSION` variable for ``Android`` platforms.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ANDROID_API_MIN.rst b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_API_MIN.rst
new file mode 100644
index 0000000..a0d2ab4
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_API_MIN.rst
@@ -0,0 +1,7 @@
+CMAKE_ANDROID_API_MIN
+---------------------
+
+.. versionadded:: 3.2
+
+Default value for the :prop_tgt:`ANDROID_API_MIN` target property.
+See that target property for additional information.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ANDROID_ARCH.rst b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_ARCH.rst
new file mode 100644
index 0000000..9f12742
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_ARCH.rst
@@ -0,0 +1,21 @@
+CMAKE_ANDROID_ARCH
+------------------
+
+.. versionadded:: 3.4
+
+When :ref:`Cross Compiling for Android with NVIDIA Nsight Tegra Visual Studio
+Edition`, this variable may be set to specify the default value for the
+:prop_tgt:`ANDROID_ARCH` target property.  See that target property for
+additional information.
+
+Otherwise, when :ref:`Cross Compiling for Android`, this variable provides
+the name of the Android architecture corresponding to the value of the
+:variable:`CMAKE_ANDROID_ARCH_ABI` variable.  The architecture name
+may be one of:
+
+* ``arm``
+* ``arm64``
+* ``mips``
+* ``mips64``
+* ``x86``
+* ``x86_64``
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ANDROID_ARCH_ABI.rst b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_ARCH_ABI.rst
new file mode 100644
index 0000000..5a2e3ec
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_ARCH_ABI.rst
@@ -0,0 +1,19 @@
+CMAKE_ANDROID_ARCH_ABI
+----------------------
+
+.. versionadded:: 3.7
+
+When :ref:`Cross Compiling for Android`, this variable specifies the
+target architecture and ABI to be used.  Valid values are:
+
+* ``arm64-v8a``
+* ``armeabi-v7a``
+* ``armeabi-v6``
+* ``armeabi``
+* ``mips``
+* ``mips64``
+* ``x86``
+* ``x86_64``
+
+See also the :variable:`CMAKE_ANDROID_ARM_MODE` and
+:variable:`CMAKE_ANDROID_ARM_NEON` variables.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ANDROID_ARM_MODE.rst b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_ARM_MODE.rst
new file mode 100644
index 0000000..973ff7e
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_ARM_MODE.rst
@@ -0,0 +1,9 @@
+CMAKE_ANDROID_ARM_MODE
+----------------------
+
+.. versionadded:: 3.7
+
+When :ref:`Cross Compiling for Android` and :variable:`CMAKE_ANDROID_ARCH_ABI`
+is set to one of the ``armeabi`` architectures, set ``CMAKE_ANDROID_ARM_MODE``
+to ``ON`` to target 32-bit ARM processors (``-marm``).  Otherwise, the
+default is to target the 16-bit Thumb processors (``-mthumb``).
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ANDROID_ARM_NEON.rst b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_ARM_NEON.rst
new file mode 100644
index 0000000..6b9cf08
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_ARM_NEON.rst
@@ -0,0 +1,8 @@
+CMAKE_ANDROID_ARM_NEON
+----------------------
+
+.. versionadded:: 3.7
+
+When :ref:`Cross Compiling for Android` and :variable:`CMAKE_ANDROID_ARCH_ABI`
+is set to ``armeabi-v7a`` set ``CMAKE_ANDROID_ARM_NEON`` to ``ON`` to target
+ARM NEON devices.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ANDROID_ASSETS_DIRECTORIES.rst b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_ASSETS_DIRECTORIES.rst
new file mode 100644
index 0000000..3de2be4
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_ASSETS_DIRECTORIES.rst
@@ -0,0 +1,7 @@
+CMAKE_ANDROID_ASSETS_DIRECTORIES
+--------------------------------
+
+.. versionadded:: 3.4
+
+Default value for the :prop_tgt:`ANDROID_ASSETS_DIRECTORIES` target property.
+See that target property for additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_EXCEPTIONS.rst b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_EXCEPTIONS.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_ANDROID_EXCEPTIONS.rst
rename to share/cmake-3.22/Help/variable/CMAKE_ANDROID_EXCEPTIONS.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ANDROID_GUI.rst b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_GUI.rst
new file mode 100644
index 0000000..821bbee
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_GUI.rst
@@ -0,0 +1,7 @@
+CMAKE_ANDROID_GUI
+-----------------
+
+.. versionadded:: 3.1
+
+Default value for the :prop_tgt:`ANDROID_GUI` target property of
+executables.  See that target property for additional information.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ANDROID_JAR_DEPENDENCIES.rst b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_JAR_DEPENDENCIES.rst
new file mode 100644
index 0000000..80ab842
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_JAR_DEPENDENCIES.rst
@@ -0,0 +1,7 @@
+CMAKE_ANDROID_JAR_DEPENDENCIES
+------------------------------
+
+.. versionadded:: 3.4
+
+Default value for the :prop_tgt:`ANDROID_JAR_DEPENDENCIES` target property.
+See that target property for additional information.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ANDROID_JAR_DIRECTORIES.rst b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_JAR_DIRECTORIES.rst
new file mode 100644
index 0000000..4d148d8
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_JAR_DIRECTORIES.rst
@@ -0,0 +1,7 @@
+CMAKE_ANDROID_JAR_DIRECTORIES
+-----------------------------
+
+.. versionadded:: 3.4
+
+Default value for the :prop_tgt:`ANDROID_JAR_DIRECTORIES` target property.
+See that target property for additional information.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ANDROID_JAVA_SOURCE_DIR.rst b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_JAVA_SOURCE_DIR.rst
new file mode 100644
index 0000000..021baa0
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_JAVA_SOURCE_DIR.rst
@@ -0,0 +1,7 @@
+CMAKE_ANDROID_JAVA_SOURCE_DIR
+-----------------------------
+
+.. versionadded:: 3.4
+
+Default value for the :prop_tgt:`ANDROID_JAVA_SOURCE_DIR` target property.
+See that target property for additional information.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ANDROID_NATIVE_LIB_DEPENDENCIES.rst b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_NATIVE_LIB_DEPENDENCIES.rst
new file mode 100644
index 0000000..41d4cc3
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_NATIVE_LIB_DEPENDENCIES.rst
@@ -0,0 +1,7 @@
+CMAKE_ANDROID_NATIVE_LIB_DEPENDENCIES
+-------------------------------------
+
+.. versionadded:: 3.4
+
+Default value for the :prop_tgt:`ANDROID_NATIVE_LIB_DEPENDENCIES` target
+property.  See that target property for additional information.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ANDROID_NATIVE_LIB_DIRECTORIES.rst b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_NATIVE_LIB_DIRECTORIES.rst
new file mode 100644
index 0000000..e87547d
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_NATIVE_LIB_DIRECTORIES.rst
@@ -0,0 +1,7 @@
+CMAKE_ANDROID_NATIVE_LIB_DIRECTORIES
+------------------------------------
+
+.. versionadded:: 3.4
+
+Default value for the :prop_tgt:`ANDROID_NATIVE_LIB_DIRECTORIES` target
+property.  See that target property for additional information.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ANDROID_NDK.rst b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_NDK.rst
new file mode 100644
index 0000000..72ac99e
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_NDK.rst
@@ -0,0 +1,9 @@
+CMAKE_ANDROID_NDK
+-----------------
+
+.. versionadded:: 3.7
+
+When :ref:`Cross Compiling for Android with the NDK`, this variable holds
+the absolute path to the root directory of the NDK.  The directory must
+contain a ``platforms`` subdirectory holding the ``android-<api>``
+directories.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ANDROID_NDK_DEPRECATED_HEADERS.rst b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_NDK_DEPRECATED_HEADERS.rst
new file mode 100644
index 0000000..40a5c1a
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_NDK_DEPRECATED_HEADERS.rst
@@ -0,0 +1,11 @@
+CMAKE_ANDROID_NDK_DEPRECATED_HEADERS
+------------------------------------
+
+.. versionadded:: 3.9
+
+When :ref:`Cross Compiling for Android with the NDK`, this variable
+may be set to specify whether to use the deprecated per-api-level
+headers instead of the unified headers.
+
+If not specified, the default will be *false* if using a NDK version
+that provides the unified headers and *true* otherwise.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG.rst b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG.rst
new file mode 100644
index 0000000..9d61fa4
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG.rst
@@ -0,0 +1,8 @@
+CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG
+------------------------------------
+
+.. versionadded:: 3.7.1
+
+When :ref:`Cross Compiling for Android with the NDK`, this variable
+provides the NDK's "host tag" used to construct the path to prebuilt
+toolchains that run on the host.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION.rst b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION.rst
new file mode 100644
index 0000000..15fe18f
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION.rst
@@ -0,0 +1,22 @@
+CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION
+-----------------------------------
+
+.. versionadded:: 3.7
+
+When :ref:`Cross Compiling for Android with the NDK`, this variable
+may be set to specify the version of the toolchain to be used
+as the compiler.
+
+On NDK r19 or above, this variable must be unset or set to ``clang``.
+
+On NDK r18 or below, this variable must be set to one of these forms:
+
+* ``<major>.<minor>``: GCC of specified version
+* ``clang<major>.<minor>``: Clang of specified version
+* ``clang``: Clang of most recent available version
+
+A toolchain of the requested version will be selected automatically to
+match the ABI named in the :variable:`CMAKE_ANDROID_ARCH_ABI` variable.
+
+If not specified, the default will be a value that selects the latest
+available GCC toolchain.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ANDROID_NDK_VERSION.rst b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_NDK_VERSION.rst
new file mode 100644
index 0000000..5428d52
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_NDK_VERSION.rst
@@ -0,0 +1,8 @@
+CMAKE_ANDROID_NDK_VERSION
+-------------------------
+
+.. versionadded:: 3.20
+
+When :ref:`Cross Compiling for Android with the NDK` and using an
+Android NDK version 11 or higher, this variable is provided by
+CMake to report the NDK version number.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ANDROID_PROCESS_MAX.rst b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_PROCESS_MAX.rst
new file mode 100644
index 0000000..be241c2
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_PROCESS_MAX.rst
@@ -0,0 +1,7 @@
+CMAKE_ANDROID_PROCESS_MAX
+-------------------------
+
+.. versionadded:: 3.4
+
+Default value for the :prop_tgt:`ANDROID_PROCESS_MAX` target property.
+See that target property for additional information.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ANDROID_PROGUARD.rst b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_PROGUARD.rst
new file mode 100644
index 0000000..bb001d3
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_PROGUARD.rst
@@ -0,0 +1,7 @@
+CMAKE_ANDROID_PROGUARD
+----------------------
+
+.. versionadded:: 3.4
+
+Default value for the :prop_tgt:`ANDROID_PROGUARD` target property.
+See that target property for additional information.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ANDROID_PROGUARD_CONFIG_PATH.rst b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_PROGUARD_CONFIG_PATH.rst
new file mode 100644
index 0000000..6fd4067
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_PROGUARD_CONFIG_PATH.rst
@@ -0,0 +1,7 @@
+CMAKE_ANDROID_PROGUARD_CONFIG_PATH
+----------------------------------
+
+.. versionadded:: 3.4
+
+Default value for the :prop_tgt:`ANDROID_PROGUARD_CONFIG_PATH` target property.
+See that target property for additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ANDROID_RTTI.rst b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_RTTI.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_ANDROID_RTTI.rst
rename to share/cmake-3.22/Help/variable/CMAKE_ANDROID_RTTI.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ANDROID_SECURE_PROPS_PATH.rst b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_SECURE_PROPS_PATH.rst
new file mode 100644
index 0000000..9f5743e
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_SECURE_PROPS_PATH.rst
@@ -0,0 +1,7 @@
+CMAKE_ANDROID_SECURE_PROPS_PATH
+-------------------------------
+
+.. versionadded:: 3.4
+
+Default value for the :prop_tgt:`ANDROID_SECURE_PROPS_PATH` target property.
+See that target property for additional information.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ANDROID_SKIP_ANT_STEP.rst b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_SKIP_ANT_STEP.rst
new file mode 100644
index 0000000..588769b
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_SKIP_ANT_STEP.rst
@@ -0,0 +1,7 @@
+CMAKE_ANDROID_SKIP_ANT_STEP
+---------------------------
+
+.. versionadded:: 3.4
+
+Default value for the :prop_tgt:`ANDROID_SKIP_ANT_STEP` target property.
+See that target property for additional information.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ANDROID_STANDALONE_TOOLCHAIN.rst b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_STANDALONE_TOOLCHAIN.rst
new file mode 100644
index 0000000..3ca89f5
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_STANDALONE_TOOLCHAIN.rst
@@ -0,0 +1,8 @@
+CMAKE_ANDROID_STANDALONE_TOOLCHAIN
+----------------------------------
+
+.. versionadded:: 3.7
+
+When :ref:`Cross Compiling for Android with a Standalone Toolchain`, this
+variable holds the absolute path to the root directory of the toolchain.
+The specified directory must contain a ``sysroot`` subdirectory.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ANDROID_STL_TYPE.rst b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_STL_TYPE.rst
new file mode 100644
index 0000000..3778181
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ANDROID_STL_TYPE.rst
@@ -0,0 +1,39 @@
+CMAKE_ANDROID_STL_TYPE
+----------------------
+
+.. versionadded:: 3.4
+
+When :ref:`Cross Compiling for Android with NVIDIA Nsight Tegra Visual Studio
+Edition`, this variable may be set to specify the default value for the
+:prop_tgt:`ANDROID_STL_TYPE` target property.  See that target property
+for additional information.
+
+When :ref:`Cross Compiling for Android with the NDK`, this variable may be
+set to specify the STL variant to be used.  The value may be one of:
+
+``none``
+  No C++ Support
+``system``
+  Minimal C++ without STL
+``gabi++_static``
+  GAbi++ Static
+``gabi++_shared``
+  GAbi++ Shared
+``gnustl_static``
+  GNU libstdc++ Static
+``gnustl_shared``
+  GNU libstdc++ Shared
+``c++_static``
+  LLVM libc++ Static
+``c++_shared``
+  LLVM libc++ Shared
+``stlport_static``
+  STLport Static
+``stlport_shared``
+  STLport Shared
+
+The default value is ``gnustl_static`` on NDK versions that provide it
+and otherwise ``c++_static``.  Note that this default differs from
+the native NDK build system because CMake may be used to build projects for
+Android that are not natively implemented for it and use the C++ standard
+library.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_APPBUNDLE_PATH.rst b/share/cmake-3.22/Help/variable/CMAKE_APPBUNDLE_PATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_APPBUNDLE_PATH.rst
rename to share/cmake-3.22/Help/variable/CMAKE_APPBUNDLE_PATH.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_APPLE_SILICON_PROCESSOR.rst b/share/cmake-3.22/Help/variable/CMAKE_APPLE_SILICON_PROCESSOR.rst
new file mode 100644
index 0000000..0d5ccd1
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_APPLE_SILICON_PROCESSOR.rst
@@ -0,0 +1,14 @@
+CMAKE_APPLE_SILICON_PROCESSOR
+-----------------------------
+
+.. versionadded:: 3.19.2
+
+On Apple Silicon hosts running macOS, set this variable to tell
+CMake what architecture to use for :variable:`CMAKE_HOST_SYSTEM_PROCESSOR`.
+The value must be either ``arm64`` or ``x86_64``.
+
+The value of this variable should never be modified by project code.
+It is meant to be set as a cache entry provided by the user,
+e.g. via ``-DCMAKE_APPLE_SILICON_PROCESSOR=...``.
+
+See also the :envvar:`CMAKE_APPLE_SILICON_PROCESSOR` environment variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_AR.rst b/share/cmake-3.22/Help/variable/CMAKE_AR.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_AR.rst
rename to share/cmake-3.22/Help/variable/CMAKE_AR.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ARCHIVE_OUTPUT_DIRECTORY.rst b/share/cmake-3.22/Help/variable/CMAKE_ARCHIVE_OUTPUT_DIRECTORY.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_ARCHIVE_OUTPUT_DIRECTORY.rst
rename to share/cmake-3.22/Help/variable/CMAKE_ARCHIVE_OUTPUT_DIRECTORY.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ARCHIVE_OUTPUT_DIRECTORY_CONFIG.rst b/share/cmake-3.22/Help/variable/CMAKE_ARCHIVE_OUTPUT_DIRECTORY_CONFIG.rst
new file mode 100644
index 0000000..d8bd82c
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ARCHIVE_OUTPUT_DIRECTORY_CONFIG.rst
@@ -0,0 +1,11 @@
+CMAKE_ARCHIVE_OUTPUT_DIRECTORY_<CONFIG>
+---------------------------------------
+
+.. versionadded:: 3.3
+
+Where to put all the :ref:`ARCHIVE <Archive Output Artifacts>`
+target files when built for a specific configuration.
+
+This variable is used to initialize the
+:prop_tgt:`ARCHIVE_OUTPUT_DIRECTORY_<CONFIG>` property on all the targets.
+See that target property for additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ARGC.rst b/share/cmake-3.22/Help/variable/CMAKE_ARGC.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_ARGC.rst
rename to share/cmake-3.22/Help/variable/CMAKE_ARGC.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ARGV0.rst b/share/cmake-3.22/Help/variable/CMAKE_ARGV0.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_ARGV0.rst
rename to share/cmake-3.22/Help/variable/CMAKE_ARGV0.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_AUTOGEN_ORIGIN_DEPENDS.rst b/share/cmake-3.22/Help/variable/CMAKE_AUTOGEN_ORIGIN_DEPENDS.rst
new file mode 100644
index 0000000..c24e462
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_AUTOGEN_ORIGIN_DEPENDS.rst
@@ -0,0 +1,13 @@
+CMAKE_AUTOGEN_ORIGIN_DEPENDS
+----------------------------
+
+.. versionadded:: 3.14
+
+Switch for forwarding origin target dependencies to the corresponding
+``_autogen`` targets.
+
+This variable is used to initialize the :prop_tgt:`AUTOGEN_ORIGIN_DEPENDS`
+property on all the targets.  See that target property for additional
+information.
+
+By default :variable:`CMAKE_AUTOGEN_ORIGIN_DEPENDS` is ``ON``.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_AUTOGEN_PARALLEL.rst b/share/cmake-3.22/Help/variable/CMAKE_AUTOGEN_PARALLEL.rst
new file mode 100644
index 0000000..2ada012
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_AUTOGEN_PARALLEL.rst
@@ -0,0 +1,12 @@
+CMAKE_AUTOGEN_PARALLEL
+----------------------
+
+.. versionadded:: 3.11
+
+Number of parallel ``moc`` or ``uic`` processes to start when using
+:prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`.
+
+This variable is used to initialize the :prop_tgt:`AUTOGEN_PARALLEL` property
+on all the targets.  See that target property for additional information.
+
+By default :variable:`CMAKE_AUTOGEN_PARALLEL` is unset.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_AUTOGEN_VERBOSE.rst b/share/cmake-3.22/Help/variable/CMAKE_AUTOGEN_VERBOSE.rst
new file mode 100644
index 0000000..f77ed6a
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_AUTOGEN_VERBOSE.rst
@@ -0,0 +1,15 @@
+CMAKE_AUTOGEN_VERBOSE
+---------------------
+
+.. versionadded:: 3.13
+
+Sets the verbosity of :prop_tgt:`AUTOMOC`, :prop_tgt:`AUTOUIC` and
+:prop_tgt:`AUTORCC`.  A positive integer value or a true boolean value
+lets the ``AUTO*`` generators output additional processing information.
+
+Setting :variable:`CMAKE_AUTOGEN_VERBOSE` has the same effect
+as setting the ``VERBOSE`` environment variable during
+generation (e.g. by calling ``make VERBOSE=1``).
+The extra verbosity is limited to the ``AUTO*`` generators though.
+
+By default :variable:`CMAKE_AUTOGEN_VERBOSE` is unset.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_AUTOMOC.rst b/share/cmake-3.22/Help/variable/CMAKE_AUTOMOC.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_AUTOMOC.rst
rename to share/cmake-3.22/Help/variable/CMAKE_AUTOMOC.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_AUTOMOC_COMPILER_PREDEFINES.rst b/share/cmake-3.22/Help/variable/CMAKE_AUTOMOC_COMPILER_PREDEFINES.rst
new file mode 100644
index 0000000..f1b03a0
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_AUTOMOC_COMPILER_PREDEFINES.rst
@@ -0,0 +1,10 @@
+CMAKE_AUTOMOC_COMPILER_PREDEFINES
+---------------------------------
+
+.. versionadded:: 3.10
+
+This variable is used to initialize the :prop_tgt:`AUTOMOC_COMPILER_PREDEFINES`
+property on all the targets. See that target property for additional
+information.
+
+By default it is ON.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_AUTOMOC_DEPEND_FILTERS.rst b/share/cmake-3.22/Help/variable/CMAKE_AUTOMOC_DEPEND_FILTERS.rst
new file mode 100644
index 0000000..2c1551a
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_AUTOMOC_DEPEND_FILTERS.rst
@@ -0,0 +1,14 @@
+CMAKE_AUTOMOC_DEPEND_FILTERS
+----------------------------
+
+.. versionadded:: 3.9
+
+Filter definitions used by :variable:`CMAKE_AUTOMOC`
+to extract file names from source code as additional dependencies
+for the ``moc`` file.
+
+This variable is used to initialize the :prop_tgt:`AUTOMOC_DEPEND_FILTERS`
+property on all the targets. See that target property for additional
+information.
+
+By default it is empty.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_AUTOMOC_MACRO_NAMES.rst b/share/cmake-3.22/Help/variable/CMAKE_AUTOMOC_MACRO_NAMES.rst
new file mode 100644
index 0000000..1153cb2
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_AUTOMOC_MACRO_NAMES.rst
@@ -0,0 +1,22 @@
+CMAKE_AUTOMOC_MACRO_NAMES
+----------------------------
+
+.. versionadded:: 3.10
+
+:ref:`Semicolon-separated list <CMake Language Lists>` list of macro names used by
+:variable:`CMAKE_AUTOMOC` to determine if a C++ file needs to be
+processed by ``moc``.
+
+This variable is used to initialize the :prop_tgt:`AUTOMOC_MACRO_NAMES`
+property on all the targets. See that target property for additional
+information.
+
+The default value is ``Q_OBJECT;Q_GADGET;Q_NAMESPACE;Q_NAMESPACE_EXPORT``.
+
+Example
+^^^^^^^
+Let CMake know that source files that contain ``CUSTOM_MACRO`` must be ``moc``
+processed as well::
+
+  set(CMAKE_AUTOMOC ON)
+  list(APPEND CMAKE_AUTOMOC_MACRO_NAMES "CUSTOM_MACRO")
diff --git a/share/cmake-3.18/Help/variable/CMAKE_AUTOMOC_MOC_OPTIONS.rst b/share/cmake-3.22/Help/variable/CMAKE_AUTOMOC_MOC_OPTIONS.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_AUTOMOC_MOC_OPTIONS.rst
rename to share/cmake-3.22/Help/variable/CMAKE_AUTOMOC_MOC_OPTIONS.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_AUTOMOC_PATH_PREFIX.rst b/share/cmake-3.22/Help/variable/CMAKE_AUTOMOC_PATH_PREFIX.rst
new file mode 100644
index 0000000..42f48b4
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_AUTOMOC_PATH_PREFIX.rst
@@ -0,0 +1,13 @@
+CMAKE_AUTOMOC_PATH_PREFIX
+-------------------------
+
+.. versionadded:: 3.16
+
+Whether to generate the ``-p`` path prefix option for ``moc`` on
+:prop_tgt:`AUTOMOC` enabled Qt targets.
+
+This variable is used to initialize the :prop_tgt:`AUTOMOC_PATH_PREFIX`
+property on all the targets.  See that target property for additional
+information.
+
+The default value is ``OFF``.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_AUTOMOC_RELAXED_MODE.rst b/share/cmake-3.22/Help/variable/CMAKE_AUTOMOC_RELAXED_MODE.rst
new file mode 100644
index 0000000..0b0b114
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_AUTOMOC_RELAXED_MODE.rst
@@ -0,0 +1,15 @@
+CMAKE_AUTOMOC_RELAXED_MODE
+--------------------------
+
+.. deprecated:: 3.15
+
+Switch between strict and relaxed automoc mode.
+
+By default, :prop_tgt:`AUTOMOC` behaves exactly as described in the
+documentation of the :prop_tgt:`AUTOMOC` target property.  When set to
+``TRUE``, it accepts more input and tries to find the correct input file for
+``moc`` even if it differs from the documented behavior.  In this mode it
+e.g.  also checks whether a header file is intended to be processed by moc
+when a ``"foo.moc"`` file has been included.
+
+Relaxed mode has to be enabled for KDE4 compatibility.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_AUTORCC.rst b/share/cmake-3.22/Help/variable/CMAKE_AUTORCC.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_AUTORCC.rst
rename to share/cmake-3.22/Help/variable/CMAKE_AUTORCC.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_AUTORCC_OPTIONS.rst b/share/cmake-3.22/Help/variable/CMAKE_AUTORCC_OPTIONS.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_AUTORCC_OPTIONS.rst
rename to share/cmake-3.22/Help/variable/CMAKE_AUTORCC_OPTIONS.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_AUTOUIC.rst b/share/cmake-3.22/Help/variable/CMAKE_AUTOUIC.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_AUTOUIC.rst
rename to share/cmake-3.22/Help/variable/CMAKE_AUTOUIC.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_AUTOUIC_OPTIONS.rst b/share/cmake-3.22/Help/variable/CMAKE_AUTOUIC_OPTIONS.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_AUTOUIC_OPTIONS.rst
rename to share/cmake-3.22/Help/variable/CMAKE_AUTOUIC_OPTIONS.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_AUTOUIC_SEARCH_PATHS.rst b/share/cmake-3.22/Help/variable/CMAKE_AUTOUIC_SEARCH_PATHS.rst
new file mode 100644
index 0000000..0262368
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_AUTOUIC_SEARCH_PATHS.rst
@@ -0,0 +1,13 @@
+CMAKE_AUTOUIC_SEARCH_PATHS
+--------------------------
+
+.. versionadded:: 3.9
+
+Search path list used by :variable:`CMAKE_AUTOUIC` to find included
+``.ui`` files.
+
+This variable is used to initialize the :prop_tgt:`AUTOUIC_SEARCH_PATHS`
+property on all the targets. See that target property for additional
+information.
+
+By default it is empty.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_BACKWARDS_COMPATIBILITY.rst b/share/cmake-3.22/Help/variable/CMAKE_BACKWARDS_COMPATIBILITY.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_BACKWARDS_COMPATIBILITY.rst
rename to share/cmake-3.22/Help/variable/CMAKE_BACKWARDS_COMPATIBILITY.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_BINARY_DIR.rst b/share/cmake-3.22/Help/variable/CMAKE_BINARY_DIR.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_BINARY_DIR.rst
rename to share/cmake-3.22/Help/variable/CMAKE_BINARY_DIR.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_BUILD_RPATH.rst b/share/cmake-3.22/Help/variable/CMAKE_BUILD_RPATH.rst
new file mode 100644
index 0000000..7a8ace7
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_BUILD_RPATH.rst
@@ -0,0 +1,12 @@
+CMAKE_BUILD_RPATH
+-----------------
+
+.. versionadded:: 3.8
+
+:ref:`Semicolon-separated list <CMake Language Lists>` specifying runtime path (``RPATH``)
+entries to add to binaries linked in the build tree (for platforms that
+support it).  The entries will *not* be used for binaries in the install
+tree.  See also the :variable:`CMAKE_INSTALL_RPATH` variable.
+
+This is used to initialize the :prop_tgt:`BUILD_RPATH` target property
+for all targets.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_BUILD_RPATH_USE_ORIGIN.rst b/share/cmake-3.22/Help/variable/CMAKE_BUILD_RPATH_USE_ORIGIN.rst
new file mode 100644
index 0000000..ecd9278
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_BUILD_RPATH_USE_ORIGIN.rst
@@ -0,0 +1,9 @@
+CMAKE_BUILD_RPATH_USE_ORIGIN
+----------------------------
+
+.. versionadded:: 3.14
+
+Whether to use relative paths for the build ``RPATH``.
+
+This is used to initialize the :prop_tgt:`BUILD_RPATH_USE_ORIGIN` target
+property for all targets, see that property for more details.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_BUILD_TOOL.rst b/share/cmake-3.22/Help/variable/CMAKE_BUILD_TOOL.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_BUILD_TOOL.rst
rename to share/cmake-3.22/Help/variable/CMAKE_BUILD_TOOL.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_BUILD_TYPE.rst b/share/cmake-3.22/Help/variable/CMAKE_BUILD_TYPE.rst
new file mode 100644
index 0000000..bb95436
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_BUILD_TYPE.rst
@@ -0,0 +1,21 @@
+CMAKE_BUILD_TYPE
+----------------
+
+Specifies the build type on single-configuration generators (e.g.
+:ref:`Makefile Generators` or :generator:`Ninja`).  Typical values include
+``Debug``, ``Release``, ``RelWithDebInfo`` and ``MinSizeRel``, but custom
+build types can also be defined.
+
+This variable is initialized by the first :command:`project` or
+:command:`enable_language` command called in a project when a new build
+tree is first created.  If the :envvar:`CMAKE_BUILD_TYPE` environment
+variable is set, its value is used.  Otherwise, a toolchain-specific
+default is chosen when a language is enabled.  The default value is often
+an empty string, but this is usually not desirable and one of the other
+standard build types is usually more appropriate.
+
+Depending on the situation, the value of this variable may be treated
+case-sensitively or case-insensitively.  See :ref:`Build Configurations`
+for discussion of this and other related topics.
+
+For multi-config generators, see :variable:`CMAKE_CONFIGURATION_TYPES`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_BUILD_WITH_INSTALL_NAME_DIR.rst b/share/cmake-3.22/Help/variable/CMAKE_BUILD_WITH_INSTALL_NAME_DIR.rst
new file mode 100644
index 0000000..5ba775c
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_BUILD_WITH_INSTALL_NAME_DIR.rst
@@ -0,0 +1,9 @@
+CMAKE_BUILD_WITH_INSTALL_NAME_DIR
+---------------------------------
+
+.. versionadded:: 3.9
+
+Whether to use :prop_tgt:`INSTALL_NAME_DIR` on targets in the build tree.
+
+This variable is used to initialize the :prop_tgt:`BUILD_WITH_INSTALL_NAME_DIR`
+property on all targets.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_BUILD_WITH_INSTALL_RPATH.rst b/share/cmake-3.22/Help/variable/CMAKE_BUILD_WITH_INSTALL_RPATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_BUILD_WITH_INSTALL_RPATH.rst
rename to share/cmake-3.22/Help/variable/CMAKE_BUILD_WITH_INSTALL_RPATH.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CACHEFILE_DIR.rst b/share/cmake-3.22/Help/variable/CMAKE_CACHEFILE_DIR.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_CACHEFILE_DIR.rst
rename to share/cmake-3.22/Help/variable/CMAKE_CACHEFILE_DIR.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CACHE_MAJOR_VERSION.rst b/share/cmake-3.22/Help/variable/CMAKE_CACHE_MAJOR_VERSION.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_CACHE_MAJOR_VERSION.rst
rename to share/cmake-3.22/Help/variable/CMAKE_CACHE_MAJOR_VERSION.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CACHE_MINOR_VERSION.rst b/share/cmake-3.22/Help/variable/CMAKE_CACHE_MINOR_VERSION.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_CACHE_MINOR_VERSION.rst
rename to share/cmake-3.22/Help/variable/CMAKE_CACHE_MINOR_VERSION.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CACHE_PATCH_VERSION.rst b/share/cmake-3.22/Help/variable/CMAKE_CACHE_PATCH_VERSION.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_CACHE_PATCH_VERSION.rst
rename to share/cmake-3.22/Help/variable/CMAKE_CACHE_PATCH_VERSION.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_CFG_INTDIR.rst b/share/cmake-3.22/Help/variable/CMAKE_CFG_INTDIR.rst
new file mode 100644
index 0000000..43668ea
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_CFG_INTDIR.rst
@@ -0,0 +1,53 @@
+CMAKE_CFG_INTDIR
+----------------
+
+.. deprecated:: 3.21
+
+  This variable has poor support on :generator:`Ninja Multi-Config`, and
+  predates the existence of the :genex:`$<CONFIG>` generator expression. Use
+  ``$<CONFIG>`` instead.
+
+Build-time reference to per-configuration output subdirectory.
+
+For native build systems supporting multiple configurations in the
+build tree (such as :ref:`Visual Studio Generators` and :generator:`Xcode`),
+the value is a reference to a build-time variable specifying the name
+of the per-configuration output subdirectory.  On :ref:`Makefile Generators`
+this evaluates to `.` because there is only one configuration in a build tree.
+Example values:
+
+::
+
+  $(ConfigurationName) = Visual Studio 9
+  $(Configuration)     = Visual Studio 10
+  $(CONFIGURATION)     = Xcode
+  .                    = Make-based tools
+  .                    = Ninja
+  ${CONFIGURATION}     = Ninja Multi-Config
+
+Since these values are evaluated by the native build system, this
+variable is suitable only for use in command lines that will be
+evaluated at build time.  Example of intended usage:
+
+::
+
+  add_executable(mytool mytool.c)
+  add_custom_command(
+    OUTPUT out.txt
+    COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/mytool
+            ${CMAKE_CURRENT_SOURCE_DIR}/in.txt out.txt
+    DEPENDS mytool in.txt
+    )
+  add_custom_target(drive ALL DEPENDS out.txt)
+
+Note that ``CMAKE_CFG_INTDIR`` is no longer necessary for this purpose but
+has been left for compatibility with existing projects.  Instead
+:command:`add_custom_command` recognizes executable target names in its
+``COMMAND`` option, so
+``${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/mytool`` can be replaced
+by just ``mytool``.
+
+This variable is read-only.  Setting it is undefined behavior.  In
+multi-configuration build systems the value of this variable is passed
+as the value of preprocessor symbol ``CMAKE_INTDIR`` to the compilation
+of all source files.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_CLANG_VFS_OVERLAY.rst b/share/cmake-3.22/Help/variable/CMAKE_CLANG_VFS_OVERLAY.rst
new file mode 100644
index 0000000..56ac328
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_CLANG_VFS_OVERLAY.rst
@@ -0,0 +1,9 @@
+CMAKE_CLANG_VFS_OVERLAY
+-----------------------
+
+.. versionadded:: 3.19
+
+When cross compiling for windows with clang-cl, this variable can be an
+absolute path pointing to a clang virtual file system yaml file, which
+will enable clang-cl to resolve windows header names on a case sensitive
+file system.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CL_64.rst b/share/cmake-3.22/Help/variable/CMAKE_CL_64.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_CL_64.rst
rename to share/cmake-3.22/Help/variable/CMAKE_CL_64.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_CODEBLOCKS_COMPILER_ID.rst b/share/cmake-3.22/Help/variable/CMAKE_CODEBLOCKS_COMPILER_ID.rst
new file mode 100644
index 0000000..0b2b0a0
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_CODEBLOCKS_COMPILER_ID.rst
@@ -0,0 +1,15 @@
+CMAKE_CODEBLOCKS_COMPILER_ID
+----------------------------
+
+.. versionadded:: 3.11
+
+Change the compiler id in the generated CodeBlocks project files.
+
+CodeBlocks uses its own compiler id string which differs from
+:variable:`CMAKE_<LANG>_COMPILER_ID`.  If this variable is left empty,
+CMake tries to recognize the CodeBlocks compiler id automatically.
+Otherwise the specified string is used in the CodeBlocks project file.
+See the CodeBlocks documentation for valid compiler id strings.
+
+Other IDEs like QtCreator that also use the CodeBlocks generator may ignore
+this setting.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_CODEBLOCKS_EXCLUDE_EXTERNAL_FILES.rst b/share/cmake-3.22/Help/variable/CMAKE_CODEBLOCKS_EXCLUDE_EXTERNAL_FILES.rst
new file mode 100644
index 0000000..dbb8606
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_CODEBLOCKS_EXCLUDE_EXTERNAL_FILES.rst
@@ -0,0 +1,9 @@
+CMAKE_CODEBLOCKS_EXCLUDE_EXTERNAL_FILES
+---------------------------------------
+
+.. versionadded:: 3.10
+
+Change the way the CodeBlocks generator creates project files.
+
+If this variable evaluates to ``ON`` the generator excludes from
+the project file any files that are located outside the project root.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_CODELITE_USE_TARGETS.rst b/share/cmake-3.22/Help/variable/CMAKE_CODELITE_USE_TARGETS.rst
new file mode 100644
index 0000000..21af5f7
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_CODELITE_USE_TARGETS.rst
@@ -0,0 +1,10 @@
+CMAKE_CODELITE_USE_TARGETS
+--------------------------
+
+.. versionadded:: 3.7
+
+Change the way the CodeLite generator creates projectfiles.
+
+If this variable evaluates to ``ON`` at the end of the top-level
+``CMakeLists.txt`` file, the generator creates projectfiles based on targets
+rather than projects.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_COLOR_MAKEFILE.rst b/share/cmake-3.22/Help/variable/CMAKE_COLOR_MAKEFILE.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_COLOR_MAKEFILE.rst
rename to share/cmake-3.22/Help/variable/CMAKE_COLOR_MAKEFILE.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_COMMAND.rst b/share/cmake-3.22/Help/variable/CMAKE_COMMAND.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_COMMAND.rst
rename to share/cmake-3.22/Help/variable/CMAKE_COMMAND.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_COMPILER_2005.rst b/share/cmake-3.22/Help/variable/CMAKE_COMPILER_2005.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_COMPILER_2005.rst
rename to share/cmake-3.22/Help/variable/CMAKE_COMPILER_2005.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_COMPILER_IS_GNUCC.rst b/share/cmake-3.22/Help/variable/CMAKE_COMPILER_IS_GNUCC.rst
new file mode 100644
index 0000000..91cf848
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_COMPILER_IS_GNUCC.rst
@@ -0,0 +1,7 @@
+CMAKE_COMPILER_IS_GNUCC
+-----------------------
+
+.. versionadded:: 3.7
+
+True if the ``C`` compiler is GNU.
+Use :variable:`CMAKE_C_COMPILER_ID <CMAKE_<LANG>_COMPILER_ID>` instead.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_COMPILER_IS_GNUCXX.rst b/share/cmake-3.22/Help/variable/CMAKE_COMPILER_IS_GNUCXX.rst
new file mode 100644
index 0000000..e67718a
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_COMPILER_IS_GNUCXX.rst
@@ -0,0 +1,7 @@
+CMAKE_COMPILER_IS_GNUCXX
+------------------------
+
+.. versionadded:: 3.7
+
+True if the C++ (``CXX``) compiler is GNU.
+Use :variable:`CMAKE_CXX_COMPILER_ID <CMAKE_<LANG>_COMPILER_ID>` instead.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_COMPILER_IS_GNUG77.rst b/share/cmake-3.22/Help/variable/CMAKE_COMPILER_IS_GNUG77.rst
new file mode 100644
index 0000000..f69c01a
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_COMPILER_IS_GNUG77.rst
@@ -0,0 +1,7 @@
+CMAKE_COMPILER_IS_GNUG77
+------------------------
+
+.. versionadded:: 3.7
+
+True if the ``Fortran`` compiler is GNU.
+Use :variable:`CMAKE_Fortran_COMPILER_ID <CMAKE_<LANG>_COMPILER_ID>` instead.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY.rst b/share/cmake-3.22/Help/variable/CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY.rst
new file mode 100644
index 0000000..11f52c7
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY.rst
@@ -0,0 +1,10 @@
+CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY
+----------------------------------
+
+.. versionadded:: 3.1
+
+Output directory for MS debug symbol ``.pdb`` files
+generated by the compiler while building source files.
+
+This variable is used to initialize the
+:prop_tgt:`COMPILE_PDB_OUTPUT_DIRECTORY` property on all the targets.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY_CONFIG.rst b/share/cmake-3.22/Help/variable/CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY_CONFIG.rst
new file mode 100644
index 0000000..99d0bdc
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY_CONFIG.rst
@@ -0,0 +1,13 @@
+CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY_<CONFIG>
+-------------------------------------------
+
+.. versionadded:: 3.1
+
+Per-configuration output directory for MS debug symbol ``.pdb`` files
+generated by the compiler while building source files.
+
+This is a per-configuration version of
+:variable:`CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY`.
+This variable is used to initialize the
+:prop_tgt:`COMPILE_PDB_OUTPUT_DIRECTORY_<CONFIG>`
+property on all the targets.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_CONFIGURATION_TYPES.rst b/share/cmake-3.22/Help/variable/CMAKE_CONFIGURATION_TYPES.rst
new file mode 100644
index 0000000..75ff8a1
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_CONFIGURATION_TYPES.rst
@@ -0,0 +1,20 @@
+CMAKE_CONFIGURATION_TYPES
+-------------------------
+
+Specifies the available build types (configurations) on multi-config
+generators (e.g. :ref:`Visual Studio <Visual Studio Generators>`,
+:generator:`Xcode`, or :generator:`Ninja Multi-Config`).  Typical values
+include ``Debug``, ``Release``, ``RelWithDebInfo`` and ``MinSizeRel``,
+but custom build types can also be defined.
+
+This variable is initialized by the first :command:`project` or
+:command:`enable_language` command called in a project when a new build
+tree is first created.  If the :envvar:`CMAKE_CONFIGURATION_TYPES`
+environment variable is set, its value is used.  Otherwise, the default
+value is generator-specific.
+
+Depending on the situation, the values in this variable may be treated
+case-sensitively or case-insensitively.  See :ref:`Build Configurations`
+for discussion of this and other related topics.
+
+For single-config generators, see :variable:`CMAKE_BUILD_TYPE`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CONFIG_POSTFIX.rst b/share/cmake-3.22/Help/variable/CMAKE_CONFIG_POSTFIX.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_CONFIG_POSTFIX.rst
rename to share/cmake-3.22/Help/variable/CMAKE_CONFIG_POSTFIX.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_CPACK_COMMAND.rst b/share/cmake-3.22/Help/variable/CMAKE_CPACK_COMMAND.rst
new file mode 100644
index 0000000..3a81d68
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_CPACK_COMMAND.rst
@@ -0,0 +1,10 @@
+CMAKE_CPACK_COMMAND
+-------------------
+
+.. versionadded:: 3.13
+
+Full path to :manual:`cpack(1)` command installed with CMake.
+
+This is the full path to the CPack executable :manual:`cpack(1)` which is
+useful from custom commands that want to use the :manual:`cmake(1)` ``-E``
+option for portable system commands.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CROSSCOMPILING.rst b/share/cmake-3.22/Help/variable/CMAKE_CROSSCOMPILING.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_CROSSCOMPILING.rst
rename to share/cmake-3.22/Help/variable/CMAKE_CROSSCOMPILING.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_CROSSCOMPILING_EMULATOR.rst b/share/cmake-3.22/Help/variable/CMAKE_CROSSCOMPILING_EMULATOR.rst
new file mode 100644
index 0000000..815da00
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_CROSSCOMPILING_EMULATOR.rst
@@ -0,0 +1,18 @@
+CMAKE_CROSSCOMPILING_EMULATOR
+-----------------------------
+
+.. versionadded:: 3.3
+
+This variable is only used when :variable:`CMAKE_CROSSCOMPILING` is on. It
+should point to a command on the host system that can run executable built
+for the target system.
+
+If this variable contains a :ref:`semicolon-separated list <CMake Language
+Lists>`, then the first value is the command and remaining values are its
+arguments.
+
+The command will be used to run :command:`try_run` generated executables,
+which avoids manual population of the ``TryRunResults.cmake`` file.
+
+It is also used as the default value for the
+:prop_tgt:`CROSSCOMPILING_EMULATOR` target property of executables.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_CROSS_CONFIGS.rst b/share/cmake-3.22/Help/variable/CMAKE_CROSS_CONFIGS.rst
new file mode 100644
index 0000000..be921d6
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_CROSS_CONFIGS.rst
@@ -0,0 +1,17 @@
+CMAKE_CROSS_CONFIGS
+-------------------
+
+.. versionadded:: 3.17
+
+Specifies a :ref:`semicolon-separated list <CMake Language Lists>` of
+configurations available from all ``build-<Config>.ninja`` files in the
+:generator:`Ninja Multi-Config` generator.  This variable activates
+cross-config mode. Targets from each config specified in this variable can be
+built from any ``build-<Config>.ninja`` file. Custom commands will use the
+configuration native to ``build-<Config>.ninja``. If it is set to ``all``, all
+configurations from :variable:`CMAKE_CONFIGURATION_TYPES` are cross-configs. If
+it is not specified, or empty, each ``build-<Config>.ninja`` file will only
+contain build rules for its own configuration.
+
+The value of this variable must be a subset of
+:variable:`CMAKE_CONFIGURATION_TYPES`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_CTEST_ARGUMENTS.rst b/share/cmake-3.22/Help/variable/CMAKE_CTEST_ARGUMENTS.rst
new file mode 100644
index 0000000..4dfc8fe
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_CTEST_ARGUMENTS.rst
@@ -0,0 +1,8 @@
+CMAKE_CTEST_ARGUMENTS
+---------------------
+
+.. versionadded:: 3.17
+
+Set this to a :ref:`semicolon-separated list <CMake Language Lists>` of
+command-line arguments to pass to :manual:`ctest(1)` when running tests
+through the ``test`` (or ``RUN_TESTS``) target of the generated build system.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CTEST_COMMAND.rst b/share/cmake-3.22/Help/variable/CMAKE_CTEST_COMMAND.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_CTEST_COMMAND.rst
rename to share/cmake-3.22/Help/variable/CMAKE_CTEST_COMMAND.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_CUDA_ARCHITECTURES.rst b/share/cmake-3.22/Help/variable/CMAKE_CUDA_ARCHITECTURES.rst
new file mode 100644
index 0000000..d885516
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_CUDA_ARCHITECTURES.rst
@@ -0,0 +1,35 @@
+CMAKE_CUDA_ARCHITECTURES
+------------------------
+
+.. versionadded:: 3.18
+
+Default value for :prop_tgt:`CUDA_ARCHITECTURES` property of targets.
+
+Initialized by the :envvar:`CUDAARCHS` environment variable if set.
+Otherwise as follows depending on :variable:`CMAKE_CUDA_COMPILER_ID <CMAKE_<LANG>_COMPILER_ID>`:
+
+- For ``Clang``: the oldest architecture that works.
+
+- For ``NVIDIA``: the default architecture chosen by the compiler.
+  See policy :policy:`CMP0104`.
+
+Users are encouraged to override this, as the default varies across compilers
+and compiler versions.
+
+This variable is used to initialize the :prop_tgt:`CUDA_ARCHITECTURES` property
+on all targets. See the target property for additional information.
+
+Examples
+^^^^^^^^
+
+.. code-block:: cmake
+
+  cmake_minimum_required(VERSION)
+
+  if(NOT DEFINED CMAKE_CUDA_ARCHITECTURES)
+    set(CMAKE_CUDA_ARCHITECTURES 75)
+  endif()
+
+  project(example LANGUAGES CUDA)
+
+``CMAKE_CUDA_ARCHITECTURES`` will default to ``75`` unless overridden by the user.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_CUDA_COMPILE_FEATURES.rst b/share/cmake-3.22/Help/variable/CMAKE_CUDA_COMPILE_FEATURES.rst
new file mode 100644
index 0000000..c1c270c
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_CUDA_COMPILE_FEATURES.rst
@@ -0,0 +1,13 @@
+CMAKE_CUDA_COMPILE_FEATURES
+---------------------------
+
+.. versionadded:: 3.17
+
+List of features known to the CUDA compiler
+
+These features are known to be available for use with the CUDA compiler. This
+list is a subset of the features listed in the
+:prop_gbl:`CMAKE_CUDA_KNOWN_FEATURES` global property.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_CUDA_EXTENSIONS.rst b/share/cmake-3.22/Help/variable/CMAKE_CUDA_EXTENSIONS.rst
new file mode 100644
index 0000000..12749ce
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_CUDA_EXTENSIONS.rst
@@ -0,0 +1,10 @@
+CMAKE_CUDA_EXTENSIONS
+---------------------
+
+.. versionadded:: 3.8
+
+Default value for :prop_tgt:`CUDA_EXTENSIONS` target property if set when a
+target is created.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_CUDA_HOST_COMPILER.rst b/share/cmake-3.22/Help/variable/CMAKE_CUDA_HOST_COMPILER.rst
new file mode 100644
index 0000000..9817b1a
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_CUDA_HOST_COMPILER.rst
@@ -0,0 +1,29 @@
+CMAKE_CUDA_HOST_COMPILER
+------------------------
+
+.. versionadded:: 3.10
+
+When :variable:`CMAKE_CUDA_COMPILER_ID <CMAKE_<LANG>_COMPILER_ID>` is
+``NVIDIA``, ``CMAKE_CUDA_HOST_COMPILER`` selects the compiler executable to use
+when compiling host code for ``CUDA`` language files.
+This maps to the ``nvcc -ccbin`` option.
+
+The ``CMAKE_CUDA_HOST_COMPILER`` variable may be set explicitly before CUDA is
+first enabled by a :command:`project` or :command:`enable_language` command.
+This can be done via ``-DCMAKE_CUDA_HOST_COMPILER=...`` on the command line
+or in a :ref:`toolchain file <Cross Compiling Toolchain>`.  Or, one may set
+the :envvar:`CUDAHOSTCXX` environment variable to provide a default value.
+
+Once the CUDA language is enabled, the ``CMAKE_CUDA_HOST_COMPILER`` variable
+is read-only and changes to it are undefined behavior.
+
+.. note::
+
+  Since ``CMAKE_CUDA_HOST_COMPILER`` is meaningful only when the
+  :variable:`CMAKE_CUDA_COMPILER_ID <CMAKE_<LANG>_COMPILER_ID>` is ``NVIDIA``,
+  it does not make sense to set ``CMAKE_CUDA_HOST_COMPILER`` without also
+  setting ``CMAKE_CUDA_COMPILER`` to NVCC.
+
+.. note::
+
+  Ignored when using :ref:`Visual Studio Generators`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_CUDA_RESOLVE_DEVICE_SYMBOLS.rst b/share/cmake-3.22/Help/variable/CMAKE_CUDA_RESOLVE_DEVICE_SYMBOLS.rst
new file mode 100644
index 0000000..474baee
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_CUDA_RESOLVE_DEVICE_SYMBOLS.rst
@@ -0,0 +1,8 @@
+CMAKE_CUDA_RESOLVE_DEVICE_SYMBOLS
+---------------------------------
+
+.. versionadded:: 3.16
+
+Default value for :prop_tgt:`CUDA_RESOLVE_DEVICE_SYMBOLS` target
+property. This variable is used to initialize the property on each target as
+it is created.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_CUDA_RUNTIME_LIBRARY.rst b/share/cmake-3.22/Help/variable/CMAKE_CUDA_RUNTIME_LIBRARY.rst
new file mode 100644
index 0000000..69b9d93
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_CUDA_RUNTIME_LIBRARY.rst
@@ -0,0 +1,27 @@
+CMAKE_CUDA_RUNTIME_LIBRARY
+--------------------------
+
+.. versionadded:: 3.17
+
+Select the CUDA runtime library for use when compiling and linking CUDA.
+This variable is used to initialize the :prop_tgt:`CUDA_RUNTIME_LIBRARY`
+property on all targets as they are created.
+
+The allowed case insensitive values are:
+
+.. include:: ../prop_tgt/CUDA_RUNTIME_LIBRARY-VALUES.txt
+
+Contents of ``CMAKE_CUDA_RUNTIME_LIBRARY`` may use
+:manual:`generator expressions <cmake-generator-expressions(7)>`.
+
+If this variable is not set then the :prop_tgt:`CUDA_RUNTIME_LIBRARY` target
+property will not be set automatically.  If that property is not set then
+CMake uses an appropriate default value based on the compiler to select the
+CUDA runtime library.
+
+.. note::
+
+  This property has effect only when the ``CUDA`` language is enabled. To
+  control the CUDA runtime linking when only using the CUDA SDK with the
+  ``C`` or ``C++`` language we recommend using the :module:`FindCUDAToolkit`
+  module.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_CUDA_SEPARABLE_COMPILATION.rst b/share/cmake-3.22/Help/variable/CMAKE_CUDA_SEPARABLE_COMPILATION.rst
new file mode 100644
index 0000000..3dbaef9
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_CUDA_SEPARABLE_COMPILATION.rst
@@ -0,0 +1,8 @@
+CMAKE_CUDA_SEPARABLE_COMPILATION
+--------------------------------
+
+.. versionadded:: 3.11
+
+Default value for :prop_tgt:`CUDA_SEPARABLE_COMPILATION` target property.
+This variable is used to initialize the property on each target as it is
+created.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_CUDA_STANDARD.rst b/share/cmake-3.22/Help/variable/CMAKE_CUDA_STANDARD.rst
new file mode 100644
index 0000000..ee9395a
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_CUDA_STANDARD.rst
@@ -0,0 +1,10 @@
+CMAKE_CUDA_STANDARD
+-------------------
+
+.. versionadded:: 3.8
+
+Default value for :prop_tgt:`CUDA_STANDARD` target property if set when a
+target is created.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_CUDA_STANDARD_REQUIRED.rst b/share/cmake-3.22/Help/variable/CMAKE_CUDA_STANDARD_REQUIRED.rst
new file mode 100644
index 0000000..0c85a04
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_CUDA_STANDARD_REQUIRED.rst
@@ -0,0 +1,10 @@
+CMAKE_CUDA_STANDARD_REQUIRED
+----------------------------
+
+.. versionadded:: 3.8
+
+Default value for :prop_tgt:`CUDA_STANDARD_REQUIRED` target property if set
+when a target is created.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES.rst b/share/cmake-3.22/Help/variable/CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES.rst
new file mode 100644
index 0000000..e586dab
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES.rst
@@ -0,0 +1,9 @@
+CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES
+--------------------------------------
+
+.. versionadded:: 3.8
+
+When the ``CUDA`` language has been enabled, this provides a
+:ref:`semicolon-separated list <CMake Language Lists>` of include directories provided
+by the CUDA Toolkit.  The value may be useful for C++ source files
+to include CUDA headers.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CURRENT_BINARY_DIR.rst b/share/cmake-3.22/Help/variable/CMAKE_CURRENT_BINARY_DIR.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_CURRENT_BINARY_DIR.rst
rename to share/cmake-3.22/Help/variable/CMAKE_CURRENT_BINARY_DIR.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_CURRENT_FUNCTION.rst b/share/cmake-3.22/Help/variable/CMAKE_CURRENT_FUNCTION.rst
new file mode 100644
index 0000000..5d1a4e9
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_CURRENT_FUNCTION.rst
@@ -0,0 +1,12 @@
+CMAKE_CURRENT_FUNCTION
+----------------------
+
+.. versionadded:: 3.17
+
+When executing code inside a :command:`function`, this variable
+contains the name of the current function.  It can be useful for
+diagnostic or debug messages.
+
+See also :variable:`CMAKE_CURRENT_FUNCTION_LIST_DIR`,
+:variable:`CMAKE_CURRENT_FUNCTION_LIST_FILE` and
+:variable:`CMAKE_CURRENT_FUNCTION_LIST_LINE`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_CURRENT_FUNCTION_LIST_DIR.rst b/share/cmake-3.22/Help/variable/CMAKE_CURRENT_FUNCTION_LIST_DIR.rst
new file mode 100644
index 0000000..f8f553d
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_CURRENT_FUNCTION_LIST_DIR.rst
@@ -0,0 +1,43 @@
+CMAKE_CURRENT_FUNCTION_LIST_DIR
+-------------------------------
+
+.. versionadded:: 3.17
+
+When executing code inside a :command:`function`, this variable
+contains the full directory of the listfile that defined the current function.
+
+It is quite common practice in CMake for modules to use some additional files,
+such as templates to be copied in after substituting CMake variables.
+In such cases, a function needs to know where to locate those files in a way
+that doesn't depend on where the function is called.  Without
+``CMAKE_CURRENT_FUNCTION_LIST_DIR``, the code to do that would typically use
+the following pattern:
+
+.. code-block:: cmake
+
+  set(_THIS_MODULE_BASE_DIR "${CMAKE_CURRENT_LIST_DIR}")
+
+  function(foo)
+    configure_file(
+      "${_THIS_MODULE_BASE_DIR}/some.template.in"
+      some.output
+    )
+  endfunction()
+
+Using ``CMAKE_CURRENT_FUNCTION_LIST_DIR`` inside the function instead
+eliminates the need for the extra variable which would otherwise be visible
+outside the function's scope.
+The above example can be written in the more concise and more robust form:
+
+.. code-block:: cmake
+
+  function(foo)
+    configure_file(
+      "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/some.template.in"
+      some.output
+    )
+  endfunction()
+
+See also :variable:`CMAKE_CURRENT_FUNCTION`,
+:variable:`CMAKE_CURRENT_FUNCTION_LIST_FILE` and
+:variable:`CMAKE_CURRENT_FUNCTION_LIST_LINE`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_CURRENT_FUNCTION_LIST_FILE.rst b/share/cmake-3.22/Help/variable/CMAKE_CURRENT_FUNCTION_LIST_FILE.rst
new file mode 100644
index 0000000..437dfec
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_CURRENT_FUNCTION_LIST_FILE.rst
@@ -0,0 +1,11 @@
+CMAKE_CURRENT_FUNCTION_LIST_FILE
+--------------------------------
+
+.. versionadded:: 3.17
+
+When executing code inside a :command:`function`, this variable
+contains the full path to the listfile that defined the current function.
+
+See also :variable:`CMAKE_CURRENT_FUNCTION`,
+:variable:`CMAKE_CURRENT_FUNCTION_LIST_DIR` and
+:variable:`CMAKE_CURRENT_FUNCTION_LIST_LINE`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_CURRENT_FUNCTION_LIST_LINE.rst b/share/cmake-3.22/Help/variable/CMAKE_CURRENT_FUNCTION_LIST_LINE.rst
new file mode 100644
index 0000000..2fc7012
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_CURRENT_FUNCTION_LIST_LINE.rst
@@ -0,0 +1,12 @@
+CMAKE_CURRENT_FUNCTION_LIST_LINE
+--------------------------------
+
+.. versionadded:: 3.17
+
+When executing code inside a :command:`function`, this variable
+contains the line number in the listfile where the current function
+was defined.
+
+See also :variable:`CMAKE_CURRENT_FUNCTION`,
+:variable:`CMAKE_CURRENT_FUNCTION_LIST_DIR` and
+:variable:`CMAKE_CURRENT_FUNCTION_LIST_FILE`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CURRENT_LIST_DIR.rst b/share/cmake-3.22/Help/variable/CMAKE_CURRENT_LIST_DIR.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_CURRENT_LIST_DIR.rst
rename to share/cmake-3.22/Help/variable/CMAKE_CURRENT_LIST_DIR.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CURRENT_LIST_FILE.rst b/share/cmake-3.22/Help/variable/CMAKE_CURRENT_LIST_FILE.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_CURRENT_LIST_FILE.rst
rename to share/cmake-3.22/Help/variable/CMAKE_CURRENT_LIST_FILE.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_CURRENT_LIST_LINE.rst b/share/cmake-3.22/Help/variable/CMAKE_CURRENT_LIST_LINE.rst
new file mode 100644
index 0000000..7f839c2
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_CURRENT_LIST_LINE.rst
@@ -0,0 +1,11 @@
+CMAKE_CURRENT_LIST_LINE
+-----------------------
+
+The line number of the current file being processed.
+
+This is the line number of the file currently being processed by
+cmake.
+
+If CMake is currently processing deferred calls scheduled by
+the :command:`cmake_language(DEFER)` command, this variable
+evaluates to ``DEFERRED`` instead of a specific line number.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_CURRENT_SOURCE_DIR.rst b/share/cmake-3.22/Help/variable/CMAKE_CURRENT_SOURCE_DIR.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_CURRENT_SOURCE_DIR.rst
rename to share/cmake-3.22/Help/variable/CMAKE_CURRENT_SOURCE_DIR.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_CXX_COMPILE_FEATURES.rst b/share/cmake-3.22/Help/variable/CMAKE_CXX_COMPILE_FEATURES.rst
new file mode 100644
index 0000000..8fcfbae
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_CXX_COMPILE_FEATURES.rst
@@ -0,0 +1,13 @@
+CMAKE_CXX_COMPILE_FEATURES
+--------------------------
+
+.. versionadded:: 3.1
+
+List of features known to the C++ compiler
+
+These features are known to be available for use with the C++ compiler. This
+list is a subset of the features listed in the
+:prop_gbl:`CMAKE_CXX_KNOWN_FEATURES` global property.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_CXX_EXTENSIONS.rst b/share/cmake-3.22/Help/variable/CMAKE_CXX_EXTENSIONS.rst
new file mode 100644
index 0000000..017f503
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_CXX_EXTENSIONS.rst
@@ -0,0 +1,10 @@
+CMAKE_CXX_EXTENSIONS
+--------------------
+
+.. versionadded:: 3.1
+
+Default value for :prop_tgt:`CXX_EXTENSIONS` target property if set when a
+target is created.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_CXX_STANDARD.rst b/share/cmake-3.22/Help/variable/CMAKE_CXX_STANDARD.rst
new file mode 100644
index 0000000..33eb89e
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_CXX_STANDARD.rst
@@ -0,0 +1,10 @@
+CMAKE_CXX_STANDARD
+------------------
+
+.. versionadded:: 3.1
+
+Default value for :prop_tgt:`CXX_STANDARD` target property if set when a target
+is created.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_CXX_STANDARD_REQUIRED.rst b/share/cmake-3.22/Help/variable/CMAKE_CXX_STANDARD_REQUIRED.rst
new file mode 100644
index 0000000..1c6c0cc
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_CXX_STANDARD_REQUIRED.rst
@@ -0,0 +1,10 @@
+CMAKE_CXX_STANDARD_REQUIRED
+---------------------------
+
+.. versionadded:: 3.1
+
+Default value for :prop_tgt:`CXX_STANDARD_REQUIRED` target property if set when
+a target is created.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_C_COMPILE_FEATURES.rst b/share/cmake-3.22/Help/variable/CMAKE_C_COMPILE_FEATURES.rst
new file mode 100644
index 0000000..2b306a3
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_C_COMPILE_FEATURES.rst
@@ -0,0 +1,13 @@
+CMAKE_C_COMPILE_FEATURES
+------------------------
+
+.. versionadded:: 3.1
+
+List of features known to the C compiler
+
+These features are known to be available for use with the C compiler. This
+list is a subset of the features listed in the
+:prop_gbl:`CMAKE_C_KNOWN_FEATURES` global property.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_C_EXTENSIONS.rst b/share/cmake-3.22/Help/variable/CMAKE_C_EXTENSIONS.rst
new file mode 100644
index 0000000..6680521
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_C_EXTENSIONS.rst
@@ -0,0 +1,10 @@
+CMAKE_C_EXTENSIONS
+------------------
+
+.. versionadded:: 3.1
+
+Default value for :prop_tgt:`C_EXTENSIONS` target property if set when a target
+is created.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_C_STANDARD.rst b/share/cmake-3.22/Help/variable/CMAKE_C_STANDARD.rst
new file mode 100644
index 0000000..ec1e513
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_C_STANDARD.rst
@@ -0,0 +1,10 @@
+CMAKE_C_STANDARD
+----------------
+
+.. versionadded:: 3.1
+
+Default value for :prop_tgt:`C_STANDARD` target property if set when a target
+is created.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_C_STANDARD_REQUIRED.rst b/share/cmake-3.22/Help/variable/CMAKE_C_STANDARD_REQUIRED.rst
new file mode 100644
index 0000000..2bd9d51
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_C_STANDARD_REQUIRED.rst
@@ -0,0 +1,10 @@
+CMAKE_C_STANDARD_REQUIRED
+-------------------------
+
+.. versionadded:: 3.1
+
+Default value for :prop_tgt:`C_STANDARD_REQUIRED` target property if set when
+a target is created.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_DEBUG_POSTFIX.rst b/share/cmake-3.22/Help/variable/CMAKE_DEBUG_POSTFIX.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_DEBUG_POSTFIX.rst
rename to share/cmake-3.22/Help/variable/CMAKE_DEBUG_POSTFIX.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_DEBUG_TARGET_PROPERTIES.rst b/share/cmake-3.22/Help/variable/CMAKE_DEBUG_TARGET_PROPERTIES.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_DEBUG_TARGET_PROPERTIES.rst
rename to share/cmake-3.22/Help/variable/CMAKE_DEBUG_TARGET_PROPERTIES.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_DEFAULT_BUILD_TYPE.rst b/share/cmake-3.22/Help/variable/CMAKE_DEFAULT_BUILD_TYPE.rst
new file mode 100644
index 0000000..cadbf3a
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_DEFAULT_BUILD_TYPE.rst
@@ -0,0 +1,14 @@
+CMAKE_DEFAULT_BUILD_TYPE
+------------------------
+
+.. versionadded:: 3.17
+
+Specifies the configuration to use by default in a ``build.ninja`` file in the
+:generator:`Ninja Multi-Config` generator. If this variable is specified,
+``build.ninja`` uses build rules from ``build-<Config>.ninja`` by default. All
+custom commands are executed with this configuration. If the variable is not
+specified, the first item from :variable:`CMAKE_CONFIGURATION_TYPES` is used
+instead.
+
+The value of this variable must be one of the items from
+:variable:`CMAKE_CONFIGURATION_TYPES`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_DEFAULT_CONFIGS.rst b/share/cmake-3.22/Help/variable/CMAKE_DEFAULT_CONFIGS.rst
new file mode 100644
index 0000000..65a5f0d
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_DEFAULT_CONFIGS.rst
@@ -0,0 +1,21 @@
+CMAKE_DEFAULT_CONFIGS
+---------------------
+
+.. versionadded:: 3.17
+
+Specifies a :ref:`semicolon-separated list <CMake Language Lists>` of configurations
+to build for a target in ``build.ninja`` if no ``:<Config>`` suffix is specified in
+the :generator:`Ninja Multi-Config` generator. If it is set to ``all``, all
+configurations from :variable:`CMAKE_CROSS_CONFIGS` are used. If it is not
+specified, it defaults to :variable:`CMAKE_DEFAULT_BUILD_TYPE`.
+
+For example, if you set :variable:`CMAKE_DEFAULT_BUILD_TYPE` to ``Release``,
+but set :variable:`CMAKE_DEFAULT_CONFIGS` to ``Debug`` or ``all``, all
+``<target>`` aliases in ``build.ninja`` will resolve to ``<target>:Debug`` or
+``<target>:all``, but custom commands will still use the ``Release``
+configuration.
+
+The value of this variable must be a subset of :variable:`CMAKE_CROSS_CONFIGS`
+or be the same as :variable:`CMAKE_DEFAULT_BUILD_TYPE`. It must not be
+specified if :variable:`CMAKE_DEFAULT_BUILD_TYPE` or
+:variable:`CMAKE_CROSS_CONFIGS` is not used.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_DEPENDS_IN_PROJECT_ONLY.rst b/share/cmake-3.22/Help/variable/CMAKE_DEPENDS_IN_PROJECT_ONLY.rst
new file mode 100644
index 0000000..bfe9402
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_DEPENDS_IN_PROJECT_ONLY.rst
@@ -0,0 +1,12 @@
+CMAKE_DEPENDS_IN_PROJECT_ONLY
+-----------------------------
+
+.. versionadded:: 3.6
+
+When set to ``TRUE`` in a directory, the build system produced by the
+:ref:`Makefile Generators` is set up to only consider dependencies on source
+files that appear either in the source or in the binary directories.  Changes
+to source files outside of these directories will not cause rebuilds.
+
+This should be used carefully in cases where some source files are picked up
+through external headers during the build.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_DEPENDS_USE_COMPILER.rst b/share/cmake-3.22/Help/variable/CMAKE_DEPENDS_USE_COMPILER.rst
new file mode 100644
index 0000000..bdad59e
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_DEPENDS_USE_COMPILER.rst
@@ -0,0 +1,9 @@
+CMAKE_DEPENDS_USE_COMPILER
+--------------------------
+
+.. versionadded:: 3.20
+
+For the :ref:`Makefile Generators`, source dependencies are now, for a
+selection of compilers, generated by the compiler itself. By defining this
+variable with value ``FALSE``, you can restore the legacy behavior (i.e. using
+``CMake`` for dependencies discovery).
diff --git a/share/cmake-3.22/Help/variable/CMAKE_DIRECTORY_LABELS.rst b/share/cmake-3.22/Help/variable/CMAKE_DIRECTORY_LABELS.rst
new file mode 100644
index 0000000..81d6dd1
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_DIRECTORY_LABELS.rst
@@ -0,0 +1,8 @@
+CMAKE_DIRECTORY_LABELS
+-----------------------
+
+.. versionadded:: 3.10
+
+Specify labels for the current directory.
+
+This is used to initialize the :prop_dir:`LABELS` directory property.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_DISABLE_FIND_PACKAGE_PackageName.rst b/share/cmake-3.22/Help/variable/CMAKE_DISABLE_FIND_PACKAGE_PackageName.rst
new file mode 100644
index 0000000..f77e939
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_DISABLE_FIND_PACKAGE_PackageName.rst
@@ -0,0 +1,18 @@
+CMAKE_DISABLE_FIND_PACKAGE_<PackageName>
+----------------------------------------
+
+Variable for disabling :command:`find_package` calls.
+
+Every non-``REQUIRED`` :command:`find_package` call in a project can be
+disabled by setting the variable
+``CMAKE_DISABLE_FIND_PACKAGE_<PackageName>`` to ``TRUE``.
+This can be used to build a project without an optional package,
+although that package is installed.
+
+This switch should be used during the initial CMake run.  Otherwise if
+the package has already been found in a previous CMake run, the
+variables which have been stored in the cache will still be there.  In
+that case it is recommended to remove the cache variables for this
+package from the cache using the cache editor or :manual:`cmake(1)` ``-U``
+
+See also the :variable:`CMAKE_REQUIRE_FIND_PACKAGE_<PackageName>` variable.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_DISABLE_PRECOMPILE_HEADERS.rst b/share/cmake-3.22/Help/variable/CMAKE_DISABLE_PRECOMPILE_HEADERS.rst
new file mode 100644
index 0000000..cf52776
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_DISABLE_PRECOMPILE_HEADERS.rst
@@ -0,0 +1,8 @@
+CMAKE_DISABLE_PRECOMPILE_HEADERS
+--------------------------------
+
+.. versionadded:: 3.16
+
+Default value for :prop_tgt:`DISABLE_PRECOMPILE_HEADERS` of targets.
+
+By default ``CMAKE_DISABLE_PRECOMPILE_HEADERS`` is ``OFF``.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_DL_LIBS.rst b/share/cmake-3.22/Help/variable/CMAKE_DL_LIBS.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_DL_LIBS.rst
rename to share/cmake-3.22/Help/variable/CMAKE_DL_LIBS.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_DOTNET_TARGET_FRAMEWORK.rst b/share/cmake-3.22/Help/variable/CMAKE_DOTNET_TARGET_FRAMEWORK.rst
new file mode 100644
index 0000000..29249d6
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_DOTNET_TARGET_FRAMEWORK.rst
@@ -0,0 +1,18 @@
+CMAKE_DOTNET_TARGET_FRAMEWORK
+-----------------------------
+
+.. versionadded:: 3.17
+
+Default value for :prop_tgt:`DOTNET_TARGET_FRAMEWORK` property	of
+targets.
+
+This variable is used to initialize the
+:prop_tgt:`DOTNET_TARGET_FRAMEWORK` property on all targets. See that
+target property for additional information.
+
+Setting ``CMAKE_DOTNET_TARGET_FRAMEWORK`` may be necessary
+when working with ``C#`` and newer .NET framework versions to
+avoid referencing errors with the ``ALL_BUILD`` CMake target.
+
+This variable is only evaluated for :ref:`Visual Studio Generators`
+VS 2010 and above.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION.rst b/share/cmake-3.22/Help/variable/CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION.rst
new file mode 100644
index 0000000..fc3c360
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION.rst
@@ -0,0 +1,22 @@
+CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION
+-------------------------------------
+
+.. versionadded:: 3.12
+
+Default value for :prop_tgt:`DOTNET_TARGET_FRAMEWORK_VERSION`
+property of targets.
+
+This variable is used to initialize the
+:prop_tgt:`DOTNET_TARGET_FRAMEWORK_VERSION` property on all
+targets. See that target property for additional information. When set,
+:variable:`CMAKE_DOTNET_TARGET_FRAMEWORK` takes precednece over this
+variable. See that variable or the associated target property
+:prop_tgt:`DOTNET_TARGET_FRAMEWORK` for additional information.
+
+
+Setting ``CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION`` may be necessary
+when working with ``C#`` and newer .NET framework versions to
+avoid referencing errors with the ``ALL_BUILD`` CMake target.
+
+This variable is only evaluated for :ref:`Visual Studio Generators`
+VS 2010 and above.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ECLIPSE_GENERATE_LINKED_RESOURCES.rst b/share/cmake-3.22/Help/variable/CMAKE_ECLIPSE_GENERATE_LINKED_RESOURCES.rst
new file mode 100644
index 0000000..548c563
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ECLIPSE_GENERATE_LINKED_RESOURCES.rst
@@ -0,0 +1,12 @@
+CMAKE_ECLIPSE_GENERATE_LINKED_RESOURCES
+---------------------------------------
+
+.. versionadded:: 3.6
+
+This cache variable is used by the Eclipse project generator.  See
+:manual:`cmake-generators(7)`.
+
+The Eclipse project generator generates so-called linked resources
+e.g. to the subproject root dirs in the source tree or to the source files
+of targets.
+This can be disabled by setting this variable to FALSE.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT.rst b/share/cmake-3.22/Help/variable/CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT.rst
new file mode 100644
index 0000000..fc28ebb
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT.rst
@@ -0,0 +1,13 @@
+CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT
+-------------------------------------
+
+.. versionadded:: 3.6
+
+This cache variable is used by the Eclipse project generator.  See
+:manual:`cmake-generators(7)`.
+
+If this variable is set to TRUE, the Eclipse project generator will generate
+an Eclipse project in :variable:`CMAKE_SOURCE_DIR` . This project can then
+be used in Eclipse e.g. for the version control functionality.
+:variable:`CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT` defaults to FALSE; so
+nothing is written into the source directory.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ECLIPSE_MAKE_ARGUMENTS.rst b/share/cmake-3.22/Help/variable/CMAKE_ECLIPSE_MAKE_ARGUMENTS.rst
new file mode 100644
index 0000000..90e36f5
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ECLIPSE_MAKE_ARGUMENTS.rst
@@ -0,0 +1,11 @@
+CMAKE_ECLIPSE_MAKE_ARGUMENTS
+----------------------------
+
+.. versionadded:: 3.6
+
+This cache variable is used by the Eclipse project generator.  See
+:manual:`cmake-generators(7)`.
+
+This variable holds arguments which are used when Eclipse invokes the make
+tool. By default it is initialized to hold flags to enable parallel builds
+(using -j typically).
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ECLIPSE_RESOURCE_ENCODING.rst b/share/cmake-3.22/Help/variable/CMAKE_ECLIPSE_RESOURCE_ENCODING.rst
new file mode 100644
index 0000000..492acd8
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ECLIPSE_RESOURCE_ENCODING.rst
@@ -0,0 +1,8 @@
+CMAKE_ECLIPSE_RESOURCE_ENCODING
+-------------------------------
+
+.. versionadded:: 3.16
+
+This cache variable tells the :generator:`Eclipse CDT4` project generator
+to set the resource encoding to the given value in generated project files.
+If no value is given, no encoding will be set.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ECLIPSE_VERSION.rst b/share/cmake-3.22/Help/variable/CMAKE_ECLIPSE_VERSION.rst
new file mode 100644
index 0000000..db65d89
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ECLIPSE_VERSION.rst
@@ -0,0 +1,12 @@
+CMAKE_ECLIPSE_VERSION
+---------------------
+
+.. versionadded:: 3.6
+
+This cache variable is used by the Eclipse project generator.  See
+:manual:`cmake-generators(7)`.
+
+When using the Eclipse project generator, CMake tries to find the Eclipse
+executable and detect the version of it. Depending on the version it finds,
+some features are enabled or disabled. If CMake doesn't find
+Eclipse, it assumes the oldest supported version, Eclipse Callisto (3.2).
diff --git a/share/cmake-3.18/Help/variable/CMAKE_EDIT_COMMAND.rst b/share/cmake-3.22/Help/variable/CMAKE_EDIT_COMMAND.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_EDIT_COMMAND.rst
rename to share/cmake-3.22/Help/variable/CMAKE_EDIT_COMMAND.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ENABLE_EXPORTS.rst b/share/cmake-3.22/Help/variable/CMAKE_ENABLE_EXPORTS.rst
new file mode 100644
index 0000000..9f43de3
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ENABLE_EXPORTS.rst
@@ -0,0 +1,10 @@
+CMAKE_ENABLE_EXPORTS
+--------------------
+
+.. versionadded:: 3.4
+
+Specify whether executables export symbols for loadable modules.
+
+This variable is used to initialize the :prop_tgt:`ENABLE_EXPORTS` target
+property for executable targets when they are created by calls to the
+:command:`add_executable` command.  See the property documentation for details.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ERROR_DEPRECATED.rst b/share/cmake-3.22/Help/variable/CMAKE_ERROR_DEPRECATED.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_ERROR_DEPRECATED.rst
rename to share/cmake-3.22/Help/variable/CMAKE_ERROR_DEPRECATED.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION.rst b/share/cmake-3.22/Help/variable/CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION.rst
rename to share/cmake-3.22/Help/variable/CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_EXECUTABLE_SUFFIX.rst b/share/cmake-3.22/Help/variable/CMAKE_EXECUTABLE_SUFFIX.rst
new file mode 100644
index 0000000..bc4b9df
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_EXECUTABLE_SUFFIX.rst
@@ -0,0 +1,10 @@
+CMAKE_EXECUTABLE_SUFFIX
+-----------------------
+
+The suffix for executables on this platform.
+
+The suffix to use for the end of an executable filename if any, ``.exe``
+on Windows.
+
+:variable:`CMAKE_EXECUTABLE_SUFFIX_<LANG>` overrides this for
+language ``<LANG>``.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_EXECUTABLE_SUFFIX_LANG.rst b/share/cmake-3.22/Help/variable/CMAKE_EXECUTABLE_SUFFIX_LANG.rst
new file mode 100644
index 0000000..a68150e
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_EXECUTABLE_SUFFIX_LANG.rst
@@ -0,0 +1,7 @@
+CMAKE_EXECUTABLE_SUFFIX_<LANG>
+------------------------------
+
+The suffix to use for the end of an executable filename of ``<LANG>``
+compiler target architecture, if any.
+
+It overrides :variable:`CMAKE_EXECUTABLE_SUFFIX` for language ``<LANG>``.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_EXECUTE_PROCESS_COMMAND_ECHO.rst b/share/cmake-3.22/Help/variable/CMAKE_EXECUTE_PROCESS_COMMAND_ECHO.rst
new file mode 100644
index 0000000..90a16c3
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_EXECUTE_PROCESS_COMMAND_ECHO.rst
@@ -0,0 +1,8 @@
+CMAKE_EXECUTE_PROCESS_COMMAND_ECHO
+----------------------------------
+
+.. versionadded:: 3.15
+
+If this variable is set to ``STDERR``, ``STDOUT`` or ``NONE`` then commands
+in :command:`execute_process` calls will be printed to either stderr or
+stdout or not at all.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_EXE_LINKER_FLAGS.rst b/share/cmake-3.22/Help/variable/CMAKE_EXE_LINKER_FLAGS.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_EXE_LINKER_FLAGS.rst
rename to share/cmake-3.22/Help/variable/CMAKE_EXE_LINKER_FLAGS.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_EXE_LINKER_FLAGS_CONFIG.rst b/share/cmake-3.22/Help/variable/CMAKE_EXE_LINKER_FLAGS_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_EXE_LINKER_FLAGS_CONFIG.rst
rename to share/cmake-3.22/Help/variable/CMAKE_EXE_LINKER_FLAGS_CONFIG.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_EXE_LINKER_FLAGS_CONFIG_INIT.rst b/share/cmake-3.22/Help/variable/CMAKE_EXE_LINKER_FLAGS_CONFIG_INIT.rst
new file mode 100644
index 0000000..4d2718a
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_EXE_LINKER_FLAGS_CONFIG_INIT.rst
@@ -0,0 +1,12 @@
+CMAKE_EXE_LINKER_FLAGS_<CONFIG>_INIT
+------------------------------------
+
+.. versionadded:: 3.7
+
+Value used to initialize the :variable:`CMAKE_EXE_LINKER_FLAGS_<CONFIG>`
+cache entry the first time a build tree is configured.
+This variable is meant to be set by a :variable:`toolchain file
+<CMAKE_TOOLCHAIN_FILE>`.  CMake may prepend or append content to
+the value based on the environment and target platform.
+
+See also :variable:`CMAKE_EXE_LINKER_FLAGS_INIT`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_EXE_LINKER_FLAGS_INIT.rst b/share/cmake-3.22/Help/variable/CMAKE_EXE_LINKER_FLAGS_INIT.rst
new file mode 100644
index 0000000..6e3927c
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_EXE_LINKER_FLAGS_INIT.rst
@@ -0,0 +1,13 @@
+CMAKE_EXE_LINKER_FLAGS_INIT
+---------------------------
+
+.. versionadded:: 3.7
+
+Value used to initialize the :variable:`CMAKE_EXE_LINKER_FLAGS`
+cache entry the first time a build tree is configured.
+This variable is meant to be set by a :variable:`toolchain file
+<CMAKE_TOOLCHAIN_FILE>`.  CMake may prepend or append content to
+the value based on the environment and target platform.
+
+See also the configuration-specific variable
+:variable:`CMAKE_EXE_LINKER_FLAGS_<CONFIG>_INIT`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_EXPORT_COMPILE_COMMANDS.rst b/share/cmake-3.22/Help/variable/CMAKE_EXPORT_COMPILE_COMMANDS.rst
new file mode 100644
index 0000000..53a19dc
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_EXPORT_COMPILE_COMMANDS.rst
@@ -0,0 +1,40 @@
+CMAKE_EXPORT_COMPILE_COMMANDS
+-----------------------------
+
+.. versionadded:: 3.5
+
+Enable/Disable output of compile commands during generation.
+
+If enabled, generates a ``compile_commands.json`` file containing the exact
+compiler calls for all translation units of the project in machine-readable
+form.  The format of the JSON file looks like:
+
+.. code-block:: javascript
+
+  [
+    {
+      "directory": "/home/user/development/project",
+      "command": "/usr/bin/c++ ... -c ../foo/foo.cc",
+      "file": "../foo/foo.cc"
+    },
+
+    ...
+
+    {
+      "directory": "/home/user/development/project",
+      "command": "/usr/bin/c++ ... -c ../foo/bar.cc",
+      "file": "../foo/bar.cc"
+    }
+  ]
+
+This is initialized by the :envvar:`CMAKE_EXPORT_COMPILE_COMMANDS` environment
+variable, and initializes the :prop_tgt:`EXPORT_COMPILE_COMMANDS` target
+property for all targets.
+
+.. note::
+  This option is implemented only by :ref:`Makefile Generators`
+  and the :generator:`Ninja`.  It is ignored on other generators.
+
+  This option currently does not work well in combination with
+  the :prop_tgt:`UNITY_BUILD` target property or the
+  :variable:`CMAKE_UNITY_BUILD` variable.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_EXPORT_NO_PACKAGE_REGISTRY.rst b/share/cmake-3.22/Help/variable/CMAKE_EXPORT_NO_PACKAGE_REGISTRY.rst
new file mode 100644
index 0000000..5772490
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_EXPORT_NO_PACKAGE_REGISTRY.rst
@@ -0,0 +1,18 @@
+CMAKE_EXPORT_NO_PACKAGE_REGISTRY
+--------------------------------
+
+.. versionadded:: 3.1
+
+Disable the :command:`export(PACKAGE)` command when :policy:`CMP0090`
+is not set to ``NEW``.
+
+In some cases, for example for packaging and for system wide
+installations, it is not desirable to write the user package registry.
+If the ``CMAKE_EXPORT_NO_PACKAGE_REGISTRY`` variable is enabled,
+the :command:`export(PACKAGE)` command will do nothing.
+
+If :policy:`CMP0090` is set to ``NEW`` this variable does nothing, and the
+:variable:`CMAKE_EXPORT_PACKAGE_REGISTRY` variable controls the behavior
+instead.
+
+See also :ref:`Disabling the Package Registry`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_EXPORT_PACKAGE_REGISTRY.rst b/share/cmake-3.22/Help/variable/CMAKE_EXPORT_PACKAGE_REGISTRY.rst
new file mode 100644
index 0000000..663639b
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_EXPORT_PACKAGE_REGISTRY.rst
@@ -0,0 +1,17 @@
+CMAKE_EXPORT_PACKAGE_REGISTRY
+-----------------------------
+
+.. versionadded:: 3.15
+
+Enables the :command:`export(PACKAGE)` command when :policy:`CMP0090`
+is set to ``NEW``.
+
+The :command:`export(PACKAGE)` command does nothing by default.  In some cases
+it is desirable to write to the user package registry, so the
+``CMAKE_EXPORT_PACKAGE_REGISTRY`` variable may be set to enable it.
+
+If :policy:`CMP0090` is *not* set to ``NEW`` this variable does nothing, and
+the :variable:`CMAKE_EXPORT_NO_PACKAGE_REGISTRY` variable controls the behavior
+instead.
+
+See also :ref:`Disabling the Package Registry`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_EXTRA_GENERATOR.rst b/share/cmake-3.22/Help/variable/CMAKE_EXTRA_GENERATOR.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_EXTRA_GENERATOR.rst
rename to share/cmake-3.22/Help/variable/CMAKE_EXTRA_GENERATOR.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES.rst b/share/cmake-3.22/Help/variable/CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES.rst
rename to share/cmake-3.22/Help/variable/CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_FIND_APPBUNDLE.rst b/share/cmake-3.22/Help/variable/CMAKE_FIND_APPBUNDLE.rst
new file mode 100644
index 0000000..17563f3
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_FIND_APPBUNDLE.rst
@@ -0,0 +1,24 @@
+CMAKE_FIND_APPBUNDLE
+--------------------
+
+.. versionadded:: 3.4
+
+This variable affects how ``find_*`` commands choose between
+macOS Application Bundles and unix-style package components.
+
+On Darwin or systems supporting macOS Application Bundles, the
+``CMAKE_FIND_APPBUNDLE`` variable can be set to empty or
+one of the following:
+
+``FIRST``
+  Try to find application bundles before standard programs.
+  This is the default on Darwin.
+
+``LAST``
+  Try to find application bundles after standard programs.
+
+``ONLY``
+  Only try to find application bundles.
+
+``NEVER``
+  Never try to find application bundles.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_FIND_DEBUG_MODE.rst b/share/cmake-3.22/Help/variable/CMAKE_FIND_DEBUG_MODE.rst
new file mode 100644
index 0000000..8f2a82f
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_FIND_DEBUG_MODE.rst
@@ -0,0 +1,25 @@
+CMAKE_FIND_DEBUG_MODE
+---------------------
+
+.. versionadded:: 3.17
+
+Print extra find call information for the following commands to standard
+error:
+
+* :command:`find_program`
+* :command:`find_library`
+* :command:`find_file`
+* :command:`find_path`
+* :command:`find_package`
+
+Output is designed for human consumption and not for parsing.
+Enabling this variable is equivalent to using :manual:`cmake <cmake(1)>` ``--debug-find``
+with the added ability to enable debugging for a subset of find calls.
+
+.. code-block:: cmake
+
+  set(CMAKE_FIND_DEBUG_MODE TRUE)
+  find_program(...)
+  set(CMAKE_FIND_DEBUG_MODE FALSE)
+
+Default is unset.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_FIND_FRAMEWORK.rst b/share/cmake-3.22/Help/variable/CMAKE_FIND_FRAMEWORK.rst
new file mode 100644
index 0000000..3b62cda
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_FIND_FRAMEWORK.rst
@@ -0,0 +1,24 @@
+CMAKE_FIND_FRAMEWORK
+--------------------
+
+.. versionadded:: 3.4
+
+This variable affects how ``find_*`` commands choose between
+macOS Frameworks and unix-style package components.
+
+On Darwin or systems supporting macOS Frameworks, the
+``CMAKE_FIND_FRAMEWORK`` variable can be set to empty or
+one of the following:
+
+``FIRST``
+  Try to find frameworks before standard libraries or headers.
+  This is the default on Darwin.
+
+``LAST``
+  Try to find frameworks after standard libraries or headers.
+
+``ONLY``
+  Only try to find frameworks.
+
+``NEVER``
+  Never try to find frameworks.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX.rst b/share/cmake-3.22/Help/variable/CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX.rst
new file mode 100644
index 0000000..ca2ad7f
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX.rst
@@ -0,0 +1,14 @@
+CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX
+------------------------------------
+
+.. versionadded:: 3.9
+
+Specify a ``<suffix>`` to tell the :command:`find_library` command to
+search in a ``lib<suffix>`` directory before each ``lib`` directory that
+would normally be searched.
+
+This overrides the behavior of related global properties:
+
+* :prop_gbl:`FIND_LIBRARY_USE_LIB32_PATHS`
+* :prop_gbl:`FIND_LIBRARY_USE_LIB64_PATHS`
+* :prop_gbl:`FIND_LIBRARY_USE_LIBX32_PATHS`
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FIND_LIBRARY_PREFIXES.rst b/share/cmake-3.22/Help/variable/CMAKE_FIND_LIBRARY_PREFIXES.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_FIND_LIBRARY_PREFIXES.rst
rename to share/cmake-3.22/Help/variable/CMAKE_FIND_LIBRARY_PREFIXES.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_FIND_LIBRARY_SUFFIXES.rst b/share/cmake-3.22/Help/variable/CMAKE_FIND_LIBRARY_SUFFIXES.rst
new file mode 100644
index 0000000..c2c2609
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_FIND_LIBRARY_SUFFIXES.rst
@@ -0,0 +1,12 @@
+CMAKE_FIND_LIBRARY_SUFFIXES
+---------------------------
+
+Suffixes to append when looking for libraries.
+
+This specifies what suffixes to add to library names when the
+:command:`find_library` command looks for libraries.  On Windows systems this
+is typically ``.lib`` and, depending on the compiler, ``.dll.a``, ``.a``
+(e.g. GCC and Clang), so when it tries to find the ``foo`` library, it will
+look for ``[<prefix>]foo.lib`` and/or ``[<prefix>]foo[.dll].a``, depending on
+the compiler used and the ``<prefix>`` specified in the
+:variable:`CMAKE_FIND_LIBRARY_PREFIXES`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FIND_NO_INSTALL_PREFIX.rst b/share/cmake-3.22/Help/variable/CMAKE_FIND_NO_INSTALL_PREFIX.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_FIND_NO_INSTALL_PREFIX.rst
rename to share/cmake-3.22/Help/variable/CMAKE_FIND_NO_INSTALL_PREFIX.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_FIND_PACKAGE_NAME.rst b/share/cmake-3.22/Help/variable/CMAKE_FIND_PACKAGE_NAME.rst
new file mode 100644
index 0000000..fc1fd43
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_FIND_PACKAGE_NAME.rst
@@ -0,0 +1,8 @@
+CMAKE_FIND_PACKAGE_NAME
+-----------------------
+
+.. versionadded:: 3.1.1
+
+Defined by the :command:`find_package` command while loading
+a find module to record the caller-specified package name.
+See command documentation for details.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY.rst b/share/cmake-3.22/Help/variable/CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY.rst
new file mode 100644
index 0000000..8d86a94
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY.rst
@@ -0,0 +1,26 @@
+CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY
+--------------------------------------
+
+.. versionadded:: 3.1
+
+.. deprecated:: 3.16
+
+  Use the :variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY` variable instead.
+
+By default this variable is not set. If neither
+:variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY` nor
+``CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY`` is set, then
+:command:`find_package()` will use the :ref:`User Package Registry`
+unless the ``NO_CMAKE_PACKAGE_REGISTRY`` option is provided.
+
+``CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY`` is ignored if
+:variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY` is set.
+
+In some cases, for example to locate only system wide installations, it
+is not desirable to use the :ref:`User Package Registry` when searching
+for packages. If the :variable:`CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY`
+variable is ``TRUE``, all the :command:`find_package` commands will skip
+the :ref:`User Package Registry` as if they were called with the
+``NO_CMAKE_PACKAGE_REGISTRY`` argument.
+
+See also :ref:`Disabling the Package Registry`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY.rst b/share/cmake-3.22/Help/variable/CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY.rst
new file mode 100644
index 0000000..cc67f08
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY.rst
@@ -0,0 +1,26 @@
+CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY
+---------------------------------------------
+
+.. versionadded:: 3.1
+
+.. deprecated:: 3.16
+
+  Use the :variable:`CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY` variable instead.
+
+By default this variable is not set. If neither
+:variable:`CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY` nor
+``CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY`` is set, then
+:command:`find_package()` will use the :ref:`System Package Registry`
+unless the ``NO_CMAKE_SYSTEM_PACKAGE_REGISTRY`` option is provided.
+
+``CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY`` is ignored if
+:variable:`CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY` is set.
+
+In some cases, it is not desirable to use the
+:ref:`System Package Registry` when searching for packages. If the
+:variable:`CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY` variable is
+``TRUE``, all the :command:`find_package` commands will skip
+the :ref:`System Package Registry` as if they were called with the
+``NO_CMAKE_SYSTEM_PACKAGE_REGISTRY`` argument.
+
+See also :ref:`Disabling the Package Registry`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_FIND_PACKAGE_PREFER_CONFIG.rst b/share/cmake-3.22/Help/variable/CMAKE_FIND_PACKAGE_PREFER_CONFIG.rst
new file mode 100644
index 0000000..ba81529
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_FIND_PACKAGE_PREFER_CONFIG.rst
@@ -0,0 +1,29 @@
+CMAKE_FIND_PACKAGE_PREFER_CONFIG
+---------------------------------
+
+.. versionadded:: 3.15
+
+Tell :command:`find_package` to try "Config" mode before "Module" mode if no
+mode was specified.
+
+The command :command:`find_package` operates without an explicit mode when
+the reduced signature is used without the ``MODULE`` option. In this case,
+by default, CMake first tries Module mode by searching for a
+``Find<pkg>.cmake`` module.  If it fails, CMake then searches for the package
+using Config mode.
+
+Set ``CMAKE_FIND_PACKAGE_PREFER_CONFIG`` to ``TRUE`` to tell
+:command:`find_package` to first search using Config mode before falling back
+to Module mode.
+
+This variable may be useful when a developer has compiled a custom version of
+a common library and wishes to link it to a dependent project.  If this
+variable is set to ``TRUE``, it would prevent a dependent project's call
+to :command:`find_package` from selecting the default library located by the
+system's ``Find<pkg>.cmake`` module before finding the developer's custom
+built library.
+
+Once this variable is set, it is the responsibility of the exported
+``<pkg>Config.cmake`` files to provide the same result variables as the
+``Find<pkg>.cmake`` modules so that dependent projects can use them
+interchangeably.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS.rst b/share/cmake-3.22/Help/variable/CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS.rst
new file mode 100644
index 0000000..86d75e7
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS.rst
@@ -0,0 +1,12 @@
+CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS
+-----------------------------------
+
+.. versionadded:: 3.14
+
+Set to ``TRUE`` to tell :command:`find_package` calls to resolve symbolic
+links in the value of ``<PackageName>_DIR``.
+
+This is helpful in use cases where the package search path points at a
+proxy directory in which symlinks to the real package locations appear.
+This is not enabled by default because there are also common use cases
+in which the symlinks should be preserved.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_FIND_PACKAGE_SORT_DIRECTION.rst b/share/cmake-3.22/Help/variable/CMAKE_FIND_PACKAGE_SORT_DIRECTION.rst
new file mode 100644
index 0000000..98c2a8f
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_FIND_PACKAGE_SORT_DIRECTION.rst
@@ -0,0 +1,18 @@
+CMAKE_FIND_PACKAGE_SORT_DIRECTION
+---------------------------------
+
+.. versionadded:: 3.7
+
+The sorting direction used by :variable:`CMAKE_FIND_PACKAGE_SORT_ORDER`.
+It can assume one of the following values:
+
+``DEC``
+  Default.  Ordering is done in descending mode.
+  The highest folder found will be tested first.
+
+``ASC``
+  Ordering is done in ascending mode.
+  The lowest folder found will be tested first.
+
+If :variable:`CMAKE_FIND_PACKAGE_SORT_ORDER` is not set or is set to ``NONE``
+this variable has no effect.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_FIND_PACKAGE_SORT_ORDER.rst b/share/cmake-3.22/Help/variable/CMAKE_FIND_PACKAGE_SORT_ORDER.rst
new file mode 100644
index 0000000..1725ba1
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_FIND_PACKAGE_SORT_ORDER.rst
@@ -0,0 +1,38 @@
+CMAKE_FIND_PACKAGE_SORT_ORDER
+-----------------------------
+
+.. versionadded:: 3.7
+
+The default order for sorting packages found using :command:`find_package`.
+It can assume one of the following values:
+
+``NONE``
+  Default.  No attempt is done to sort packages.
+  The first valid package found will be selected.
+
+``NAME``
+  Sort packages lexicographically before selecting one.
+
+``NATURAL``
+  Sort packages using natural order (see ``strverscmp(3)`` manual),
+  i.e. such that contiguous digits are compared as whole numbers.
+
+Natural sorting can be employed to return the highest version when multiple
+versions of the same library are found by :command:`find_package`.  For
+example suppose that the following libraries have been found:
+
+* libX-1.1.0
+* libX-1.2.9
+* libX-1.2.10
+
+By setting ``NATURAL`` order we can select the one with the highest
+version number ``libX-1.2.10``.
+
+.. code-block:: cmake
+
+  set(CMAKE_FIND_PACKAGE_SORT_ORDER NATURAL)
+  find_package(libX CONFIG)
+
+The sort direction can be controlled using the
+:variable:`CMAKE_FIND_PACKAGE_SORT_DIRECTION` variable
+(by default decrescent, e.g. lib-B will be tested before lib-A).
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FIND_PACKAGE_WARN_NO_MODULE.rst b/share/cmake-3.22/Help/variable/CMAKE_FIND_PACKAGE_WARN_NO_MODULE.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_FIND_PACKAGE_WARN_NO_MODULE.rst
rename to share/cmake-3.22/Help/variable/CMAKE_FIND_PACKAGE_WARN_NO_MODULE.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FIND_ROOT_PATH.rst b/share/cmake-3.22/Help/variable/CMAKE_FIND_ROOT_PATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_FIND_ROOT_PATH.rst
rename to share/cmake-3.22/Help/variable/CMAKE_FIND_ROOT_PATH.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FIND_ROOT_PATH_MODE_INCLUDE.rst b/share/cmake-3.22/Help/variable/CMAKE_FIND_ROOT_PATH_MODE_INCLUDE.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_FIND_ROOT_PATH_MODE_INCLUDE.rst
rename to share/cmake-3.22/Help/variable/CMAKE_FIND_ROOT_PATH_MODE_INCLUDE.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FIND_ROOT_PATH_MODE_LIBRARY.rst b/share/cmake-3.22/Help/variable/CMAKE_FIND_ROOT_PATH_MODE_LIBRARY.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_FIND_ROOT_PATH_MODE_LIBRARY.rst
rename to share/cmake-3.22/Help/variable/CMAKE_FIND_ROOT_PATH_MODE_LIBRARY.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FIND_ROOT_PATH_MODE_PACKAGE.rst b/share/cmake-3.22/Help/variable/CMAKE_FIND_ROOT_PATH_MODE_PACKAGE.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_FIND_ROOT_PATH_MODE_PACKAGE.rst
rename to share/cmake-3.22/Help/variable/CMAKE_FIND_ROOT_PATH_MODE_PACKAGE.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FIND_ROOT_PATH_MODE_PROGRAM.rst b/share/cmake-3.22/Help/variable/CMAKE_FIND_ROOT_PATH_MODE_PROGRAM.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_FIND_ROOT_PATH_MODE_PROGRAM.rst
rename to share/cmake-3.22/Help/variable/CMAKE_FIND_ROOT_PATH_MODE_PROGRAM.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FIND_ROOT_PATH_MODE_XXX.txt b/share/cmake-3.22/Help/variable/CMAKE_FIND_ROOT_PATH_MODE_XXX.txt
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_FIND_ROOT_PATH_MODE_XXX.txt
rename to share/cmake-3.22/Help/variable/CMAKE_FIND_ROOT_PATH_MODE_XXX.txt
diff --git a/share/cmake-3.22/Help/variable/CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH.rst b/share/cmake-3.22/Help/variable/CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH.rst
new file mode 100644
index 0000000..de1bad7
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH.rst
@@ -0,0 +1,26 @@
+CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH
+-------------------------------------
+
+.. versionadded:: 3.16
+
+Controls the default behavior of the following commands for whether or not to
+search paths provided by cmake-specific environment variables:
+
+* :command:`find_program`
+* :command:`find_library`
+* :command:`find_file`
+* :command:`find_path`
+* :command:`find_package`
+
+This is useful in cross-compiling environments.
+
+By default this variable is not set, which is equivalent to it having
+a value of ``TRUE``.  Explicit options given to the above commands
+take precedence over this variable.
+
+See also the :variable:`CMAKE_FIND_USE_CMAKE_PATH`,
+:variable:`CMAKE_FIND_USE_CMAKE_SYSTEM_PATH`,
+:variable:`CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH`,
+:variable:`CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY`,
+:variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY`,
+and :variable:`CMAKE_FIND_USE_PACKAGE_ROOT_PATH` variables.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_FIND_USE_CMAKE_PATH.rst b/share/cmake-3.22/Help/variable/CMAKE_FIND_USE_CMAKE_PATH.rst
new file mode 100644
index 0000000..47ce3a3
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_FIND_USE_CMAKE_PATH.rst
@@ -0,0 +1,26 @@
+CMAKE_FIND_USE_CMAKE_PATH
+-------------------------
+
+.. versionadded:: 3.16
+
+Controls the default behavior of the following commands for whether or not to
+search paths provided by cmake-specific cache variables:
+
+* :command:`find_program`
+* :command:`find_library`
+* :command:`find_file`
+* :command:`find_path`
+* :command:`find_package`
+
+This is useful in cross-compiling environments.
+
+By default this variable is not set, which is equivalent to it having
+a value of ``TRUE``.  Explicit options given to the above commands
+take precedence over this variable.
+
+See also the :variable:`CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH`,
+:variable:`CMAKE_FIND_USE_CMAKE_SYSTEM_PATH`,
+:variable:`CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH`,
+:variable:`CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY`,
+:variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY`,
+and :variable:`CMAKE_FIND_USE_PACKAGE_ROOT_PATH` variables.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_FIND_USE_CMAKE_SYSTEM_PATH.rst b/share/cmake-3.22/Help/variable/CMAKE_FIND_USE_CMAKE_SYSTEM_PATH.rst
new file mode 100644
index 0000000..2fd00df
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_FIND_USE_CMAKE_SYSTEM_PATH.rst
@@ -0,0 +1,26 @@
+CMAKE_FIND_USE_CMAKE_SYSTEM_PATH
+--------------------------------
+
+.. versionadded:: 3.16
+
+Controls the default behavior of the following commands for whether or not to
+search paths provided by platform-specific cmake variables:
+
+* :command:`find_program`
+* :command:`find_library`
+* :command:`find_file`
+* :command:`find_path`
+* :command:`find_package`
+
+This is useful in cross-compiling environments.
+
+By default this variable is not set, which is equivalent to it having
+a value of ``TRUE``.  Explicit options given to the above commands
+take precedence over this variable.
+
+See also the :variable:`CMAKE_FIND_USE_CMAKE_PATH`,
+:variable:`CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH`,
+:variable:`CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH`,
+:variable:`CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY`,
+:variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY`,
+and :variable:`CMAKE_FIND_USE_PACKAGE_ROOT_PATH` variables.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_FIND_USE_PACKAGE_REGISTRY.rst b/share/cmake-3.22/Help/variable/CMAKE_FIND_USE_PACKAGE_REGISTRY.rst
new file mode 100644
index 0000000..3127206
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_FIND_USE_PACKAGE_REGISTRY.rst
@@ -0,0 +1,32 @@
+CMAKE_FIND_USE_PACKAGE_REGISTRY
+-------------------------------
+
+.. versionadded:: 3.16
+
+Controls the default behavior of the :command:`find_package` command for
+whether or not to search paths provided by the :ref:`User Package Registry`.
+
+By default this variable is not set and the behavior will fall back
+to that determined by the deprecated
+:variable:`CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY` variable.  If that is
+also not set, then :command:`find_package` will use the
+:ref:`User Package Registry` unless the ``NO_CMAKE_PACKAGE_REGISTRY`` option
+is provided.
+
+This variable takes precedence over
+:variable:`CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY` when both are set.
+
+In some cases, for example to locate only system wide installations, it
+is not desirable to use the :ref:`User Package Registry` when searching
+for packages.  If the :variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY`
+variable is ``FALSE``, all the :command:`find_package` commands will skip
+the :ref:`User Package Registry` as if they were called with the
+``NO_CMAKE_PACKAGE_REGISTRY`` argument.
+
+See also :ref:`Disabling the Package Registry` and the
+:variable:`CMAKE_FIND_USE_CMAKE_PATH`,
+:variable:`CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH`,
+:variable:`CMAKE_FIND_USE_CMAKE_SYSTEM_PATH`,
+:variable:`CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH`,
+:variable:`CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY`,
+and :variable:`CMAKE_FIND_USE_PACKAGE_ROOT_PATH` variables.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_FIND_USE_PACKAGE_ROOT_PATH.rst b/share/cmake-3.22/Help/variable/CMAKE_FIND_USE_PACKAGE_ROOT_PATH.rst
new file mode 100644
index 0000000..64e5c6d
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_FIND_USE_PACKAGE_ROOT_PATH.rst
@@ -0,0 +1,24 @@
+CMAKE_FIND_USE_PACKAGE_ROOT_PATH
+--------------------------------
+
+.. versionadded:: 3.16
+
+Controls the default behavior of the following commands for whether or not to
+search paths provided by :variable:`<PackageName>_ROOT` variables:
+
+* :command:`find_program`
+* :command:`find_library`
+* :command:`find_file`
+* :command:`find_path`
+* :command:`find_package`
+
+By default this variable is not set, which is equivalent to it having
+a value of ``TRUE``.  Explicit options given to the above commands
+take precedence over this variable.
+
+See also the :variable:`CMAKE_FIND_USE_CMAKE_PATH`,
+:variable:`CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH`,
+:variable:`CMAKE_FIND_USE_CMAKE_SYSTEM_PATH`,
+:variable:`CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH`,
+:variable:`CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY`,
+and :variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY` variables.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH.rst b/share/cmake-3.22/Help/variable/CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH.rst
new file mode 100644
index 0000000..a0a86e4
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH.rst
@@ -0,0 +1,26 @@
+CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH
+--------------------------------------
+
+.. versionadded:: 3.16
+
+Controls the default behavior of the following commands for whether or not to
+search paths provided by standard system environment variables:
+
+* :command:`find_program`
+* :command:`find_library`
+* :command:`find_file`
+* :command:`find_path`
+* :command:`find_package`
+
+This is useful in cross-compiling environments.
+
+By default this variable is not set, which is equivalent to it having
+a value of ``TRUE``.  Explicit options given to the above commands
+take precedence over this variable.
+
+See also the :variable:`CMAKE_FIND_USE_CMAKE_PATH`,
+:variable:`CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH`,
+:variable:`CMAKE_FIND_USE_CMAKE_SYSTEM_PATH`,
+:variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY`,
+:variable:`CMAKE_FIND_USE_PACKAGE_ROOT_PATH`,
+and :variable:`CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY` variables.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY.rst b/share/cmake-3.22/Help/variable/CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY.rst
new file mode 100644
index 0000000..504b7e8
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY.rst
@@ -0,0 +1,33 @@
+CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY
+--------------------------------------
+
+.. versionadded:: 3.16
+
+Controls searching the :ref:`System Package Registry` by the
+:command:`find_package` command.
+
+By default this variable is not set and the behavior will fall back
+to that determined by the deprecated
+:variable:`CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY` variable.
+If that is also not set, then :command:`find_package()` will use the
+:ref:`System Package Registry` unless the ``NO_CMAKE_SYSTEM_PACKAGE_REGISTRY``
+option is provided.
+
+This variable takes precedence over
+:variable:`CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY` when both are set.
+
+In some cases, for example to locate only user specific installations, it
+is not desirable to use the :ref:`System Package Registry` when searching
+for packages. If the ``CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY``
+variable is ``FALSE``, all the :command:`find_package` commands will skip
+the :ref:`System Package Registry` as if they were called with the
+``NO_CMAKE_SYSTEM_PACKAGE_REGISTRY`` argument.
+
+See also :ref:`Disabling the Package Registry`.
+
+See also the :variable:`CMAKE_FIND_USE_CMAKE_PATH`,
+:variable:`CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH`,
+:variable:`CMAKE_FIND_USE_CMAKE_SYSTEM_PATH`,
+:variable:`CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH`,
+:variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY`,
+and :variable:`CMAKE_FIND_USE_PACKAGE_ROOT_PATH` variables.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_FOLDER.rst b/share/cmake-3.22/Help/variable/CMAKE_FOLDER.rst
new file mode 100644
index 0000000..37f137c
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_FOLDER.rst
@@ -0,0 +1,9 @@
+CMAKE_FOLDER
+------------
+
+.. versionadded:: 3.12
+
+Set the folder name. Use to organize targets in an IDE.
+
+This variable is used to initialize the :prop_tgt:`FOLDER` property on all the
+targets.  See that target property for additional information.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_FRAMEWORK.rst b/share/cmake-3.22/Help/variable/CMAKE_FRAMEWORK.rst
new file mode 100644
index 0000000..37385bf
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_FRAMEWORK.rst
@@ -0,0 +1,9 @@
+CMAKE_FRAMEWORK
+---------------
+
+.. versionadded:: 3.15
+
+Default value for :prop_tgt:`FRAMEWORK` of targets.
+
+This variable is used to initialize the :prop_tgt:`FRAMEWORK` property on
+all the targets.  See that target property for additional information.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_FRAMEWORK_MULTI_CONFIG_POSTFIX_CONFIG.rst b/share/cmake-3.22/Help/variable/CMAKE_FRAMEWORK_MULTI_CONFIG_POSTFIX_CONFIG.rst
new file mode 100644
index 0000000..47fb66e
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_FRAMEWORK_MULTI_CONFIG_POSTFIX_CONFIG.rst
@@ -0,0 +1,10 @@
+CMAKE_FRAMEWORK_MULTI_CONFIG_POSTFIX_<CONFIG>
+---------------------------------------------
+
+.. versionadded:: 3.18
+
+Default framework filename postfix under configuration ``<CONFIG>`` when
+using a multi-config generator.
+
+When a framework target is created its :prop_tgt:`FRAMEWORK_MULTI_CONFIG_POSTFIX_<CONFIG>`
+target property is initialized with the value of this variable if it is set.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_FRAMEWORK_PATH.rst b/share/cmake-3.22/Help/variable/CMAKE_FRAMEWORK_PATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_FRAMEWORK_PATH.rst
rename to share/cmake-3.22/Help/variable/CMAKE_FRAMEWORK_PATH.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_Fortran_FORMAT.rst b/share/cmake-3.22/Help/variable/CMAKE_Fortran_FORMAT.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_Fortran_FORMAT.rst
rename to share/cmake-3.22/Help/variable/CMAKE_Fortran_FORMAT.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_Fortran_MODDIR_DEFAULT.rst b/share/cmake-3.22/Help/variable/CMAKE_Fortran_MODDIR_DEFAULT.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_Fortran_MODDIR_DEFAULT.rst
rename to share/cmake-3.22/Help/variable/CMAKE_Fortran_MODDIR_DEFAULT.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_Fortran_MODDIR_FLAG.rst b/share/cmake-3.22/Help/variable/CMAKE_Fortran_MODDIR_FLAG.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_Fortran_MODDIR_FLAG.rst
rename to share/cmake-3.22/Help/variable/CMAKE_Fortran_MODDIR_FLAG.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_Fortran_MODOUT_FLAG.rst b/share/cmake-3.22/Help/variable/CMAKE_Fortran_MODOUT_FLAG.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_Fortran_MODOUT_FLAG.rst
rename to share/cmake-3.22/Help/variable/CMAKE_Fortran_MODOUT_FLAG.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_Fortran_MODULE_DIRECTORY.rst b/share/cmake-3.22/Help/variable/CMAKE_Fortran_MODULE_DIRECTORY.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_Fortran_MODULE_DIRECTORY.rst
rename to share/cmake-3.22/Help/variable/CMAKE_Fortran_MODULE_DIRECTORY.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_Fortran_PREPROCESS.rst b/share/cmake-3.22/Help/variable/CMAKE_Fortran_PREPROCESS.rst
new file mode 100644
index 0000000..7d405f3
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_Fortran_PREPROCESS.rst
@@ -0,0 +1,10 @@
+CMAKE_Fortran_PREPROCESS
+------------------------
+
+.. versionadded:: 3.18
+
+Default value for :prop_tgt:`Fortran_PREPROCESS` of targets.
+
+This variable is used to initialize the :prop_tgt:`Fortran_PREPROCESS`
+property on all the targets.  See that target property for additional
+information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_GENERATOR.rst b/share/cmake-3.22/Help/variable/CMAKE_GENERATOR.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_GENERATOR.rst
rename to share/cmake-3.22/Help/variable/CMAKE_GENERATOR.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_GENERATOR_INSTANCE.rst b/share/cmake-3.22/Help/variable/CMAKE_GENERATOR_INSTANCE.rst
new file mode 100644
index 0000000..5858d7a
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_GENERATOR_INSTANCE.rst
@@ -0,0 +1,27 @@
+CMAKE_GENERATOR_INSTANCE
+------------------------
+
+.. versionadded:: 3.11
+
+Generator-specific instance specification provided by user.
+
+Some CMake generators support selection of an instance of the native build
+system when multiple instances are available.  If the user specifies an
+instance (e.g. by setting this cache entry or via the
+:envvar:`CMAKE_GENERATOR_INSTANCE` environment variable), or after a default
+instance is chosen when a build tree is first configured, the value will be
+available in this variable.
+
+The value of this variable should never be modified by project code.
+A toolchain file specified by the :variable:`CMAKE_TOOLCHAIN_FILE`
+variable may initialize ``CMAKE_GENERATOR_INSTANCE`` as a cache entry.
+Once a given build tree has been initialized with a particular value
+for this variable, changing the value has undefined behavior.
+
+Instance specification is supported only on specific generators:
+
+* For the :generator:`Visual Studio 15 2017` generator (and above)
+  this specifies the absolute path to the VS installation directory
+  of the selected VS instance.
+
+See native build system documentation for allowed instance values.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_GENERATOR_PLATFORM.rst b/share/cmake-3.22/Help/variable/CMAKE_GENERATOR_PLATFORM.rst
new file mode 100644
index 0000000..b17d83a
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_GENERATOR_PLATFORM.rst
@@ -0,0 +1,33 @@
+CMAKE_GENERATOR_PLATFORM
+------------------------
+
+.. versionadded:: 3.1
+
+Generator-specific target platform specification provided by user.
+
+Some CMake generators support a target platform name to be given
+to the native build system to choose a compiler toolchain.
+If the user specifies a platform name (e.g. via the :manual:`cmake(1)` ``-A``
+option or via the :envvar:`CMAKE_GENERATOR_PLATFORM` environment variable)
+the value will be available in this variable.
+
+The value of this variable should never be modified by project code.
+A toolchain file specified by the :variable:`CMAKE_TOOLCHAIN_FILE`
+variable may initialize ``CMAKE_GENERATOR_PLATFORM``.  Once a given
+build tree has been initialized with a particular value for this
+variable, changing the value has undefined behavior.
+
+Platform specification is supported only on specific generators:
+
+* For :ref:`Visual Studio Generators` with VS 2005 and above this
+  specifies the target architecture.
+
+* For :generator:`Green Hills MULTI` this specifies the target architecture.
+
+See native build system documentation for allowed platform names.
+
+Visual Studio Platform Selection
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+On :ref:`Visual Studio Generators` the selected platform name
+is provided in the :variable:`CMAKE_VS_PLATFORM_NAME` variable.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_GENERATOR_TOOLSET.rst b/share/cmake-3.22/Help/variable/CMAKE_GENERATOR_TOOLSET.rst
new file mode 100644
index 0000000..45f2d32
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_GENERATOR_TOOLSET.rst
@@ -0,0 +1,89 @@
+CMAKE_GENERATOR_TOOLSET
+-----------------------
+
+Native build system toolset specification provided by user.
+
+Some CMake generators support a toolset specification to tell the
+native build system how to choose a compiler.  If the user specifies
+a toolset (e.g. via the :manual:`cmake(1)` ``-T`` option or via
+the :envvar:`CMAKE_GENERATOR_TOOLSET` environment variable) the value
+will be available in this variable.
+
+The value of this variable should never be modified by project code.
+A toolchain file specified by the :variable:`CMAKE_TOOLCHAIN_FILE`
+variable may initialize ``CMAKE_GENERATOR_TOOLSET``.  Once a given
+build tree has been initialized with a particular value for this
+variable, changing the value has undefined behavior.
+
+Toolset specification is supported only on specific generators:
+
+* :ref:`Visual Studio Generators` for VS 2010 and above
+* The :generator:`Xcode` generator for Xcode 3.0 and above
+* The :generator:`Green Hills MULTI` generator
+
+See native build system documentation for allowed toolset names.
+
+Visual Studio Toolset Selection
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The :ref:`Visual Studio Generators` support toolset specification
+using one of these forms:
+
+* ``toolset``
+* ``toolset[,key=value]*``
+* ``key=value[,key=value]*``
+
+The ``toolset`` specifies the toolset name.  The selected toolset name
+is provided in the :variable:`CMAKE_VS_PLATFORM_TOOLSET` variable.
+
+The ``key=value`` pairs form a comma-separated list of options to
+specify generator-specific details of the toolset selection.
+Supported pairs are:
+
+``cuda=<version>|<path>``
+  Specify the CUDA toolkit version to use or the path to a
+  standalone CUDA toolkit directory.  Supported by VS 2010
+  and above. The version can only be used with the CUDA
+  toolkit VS integration globally installed.
+  See the :variable:`CMAKE_VS_PLATFORM_TOOLSET_CUDA` and
+  :variable:`CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR` variables.
+
+``host=<arch>``
+  Specify the host tools architecture as ``x64`` or ``x86``.
+  Supported by VS 2013 and above.
+  See the :variable:`CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE`
+  variable.
+
+``version=<version>``
+  Specify the toolset version to use.  Supported by VS 2017
+  and above with the specified toolset installed.
+  See the :variable:`CMAKE_VS_PLATFORM_TOOLSET_VERSION` variable.
+
+``VCTargetsPath=<path>``
+  Specify an alternative ``VCTargetsPath`` value for Visual Studio
+  project files.  This allows use of VS platform extension configuration
+  files (``.props`` and ``.targets``) that are not installed with VS.
+
+Visual Studio Toolset Customization
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+**These are unstable interfaces with no compatibility guarantees**
+because they hook into undocumented internal CMake implementation details.
+Institutions may use these to internally maintain support for non-public
+Visual Studio platforms and toolsets, but must accept responsibility to
+make updates as changes are made to CMake.
+
+Additional ``key=value`` pairs are available:
+
+``customFlagTableDir=<path>``
+  .. versionadded:: 3.21
+
+  Specify the absolute path to a directory from which to load custom
+  flag tables stored as JSON documents with file names of the form
+  ``<platform>_<toolset>_<tool>.json`` or ``<platform>_<tool>.json``,
+  where ``<platform>`` is the :variable:`CMAKE_VS_PLATFORM_NAME`,
+  ``<toolset>`` is the :variable:`CMAKE_VS_PLATFORM_TOOLSET`,
+  and ``<tool>`` is the tool for which the flag table is meant.
+  **This naming pattern is an internal CMake implementation detail.**
+  The ``<tool>`` names are undocumented.  The format of the ``.json``
+  flag table files is undocumented.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_GHS_NO_SOURCE_GROUP_FILE.rst b/share/cmake-3.22/Help/variable/CMAKE_GHS_NO_SOURCE_GROUP_FILE.rst
new file mode 100644
index 0000000..0e8ae5e
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_GHS_NO_SOURCE_GROUP_FILE.rst
@@ -0,0 +1,8 @@
+CMAKE_GHS_NO_SOURCE_GROUP_FILE
+------------------------------
+
+.. versionadded:: 3.14
+
+``ON`` / ``OFF`` boolean to control if the project file for a target should
+be one single file or multiple files.  Refer to
+:prop_tgt:`GHS_NO_SOURCE_GROUP_FILE` for further details.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_GLOBAL_AUTOGEN_TARGET.rst b/share/cmake-3.22/Help/variable/CMAKE_GLOBAL_AUTOGEN_TARGET.rst
new file mode 100644
index 0000000..96e9907
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_GLOBAL_AUTOGEN_TARGET.rst
@@ -0,0 +1,28 @@
+CMAKE_GLOBAL_AUTOGEN_TARGET
+---------------------------
+
+.. versionadded:: 3.14
+
+Switch to enable generation of a global ``autogen`` target.
+
+When :variable:`CMAKE_GLOBAL_AUTOGEN_TARGET` is enabled, a custom target
+``autogen`` is generated.  This target depends on all :prop_tgt:`AUTOMOC` and
+:prop_tgt:`AUTOUIC` generated ``<ORIGIN>_autogen`` targets in the project.
+By building the global ``autogen`` target, all :prop_tgt:`AUTOMOC` and
+:prop_tgt:`AUTOUIC` files in the project will be generated.
+
+The name of the global ``autogen`` target can be changed by setting
+:variable:`CMAKE_GLOBAL_AUTOGEN_TARGET_NAME`.
+
+By default :variable:`CMAKE_GLOBAL_AUTOGEN_TARGET` is unset.
+
+See the :manual:`cmake-qt(7)` manual for more information on using CMake
+with Qt.
+
+Note
+^^^^
+
+``<ORIGIN>_autogen`` targets by default inherit their origin target's
+dependencies.  This might result in unintended dependency target
+builds when only ``<ORIGIN>_autogen`` targets are built.  A solution is to
+disable :prop_tgt:`AUTOGEN_ORIGIN_DEPENDS` on the respective origin targets.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_GLOBAL_AUTOGEN_TARGET_NAME.rst b/share/cmake-3.22/Help/variable/CMAKE_GLOBAL_AUTOGEN_TARGET_NAME.rst
new file mode 100644
index 0000000..4af4bc3
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_GLOBAL_AUTOGEN_TARGET_NAME.rst
@@ -0,0 +1,15 @@
+CMAKE_GLOBAL_AUTOGEN_TARGET_NAME
+--------------------------------
+
+.. versionadded:: 3.14
+
+Change the name of the global ``autogen`` target.
+
+When :variable:`CMAKE_GLOBAL_AUTOGEN_TARGET` is enabled, a global custom target
+named ``autogen`` is created.  :variable:`CMAKE_GLOBAL_AUTOGEN_TARGET_NAME`
+allows to set a different name for that target.
+
+By default :variable:`CMAKE_GLOBAL_AUTOGEN_TARGET_NAME` is unset.
+
+See the :manual:`cmake-qt(7)` manual for more information on using CMake
+with Qt.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_GLOBAL_AUTORCC_TARGET.rst b/share/cmake-3.22/Help/variable/CMAKE_GLOBAL_AUTORCC_TARGET.rst
new file mode 100644
index 0000000..efea5be
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_GLOBAL_AUTORCC_TARGET.rst
@@ -0,0 +1,20 @@
+CMAKE_GLOBAL_AUTORCC_TARGET
+---------------------------
+
+.. versionadded:: 3.14
+
+Switch to enable generation of a global ``autorcc`` target.
+
+When :variable:`CMAKE_GLOBAL_AUTORCC_TARGET` is enabled, a custom target
+``autorcc`` is generated. This target depends on all :prop_tgt:`AUTORCC`
+generated ``<ORIGIN>_arcc_<QRC>`` targets in the project.
+By building the global ``autorcc`` target, all :prop_tgt:`AUTORCC`
+files in the project will be generated.
+
+The name of the global ``autorcc`` target can be changed by setting
+:variable:`CMAKE_GLOBAL_AUTORCC_TARGET_NAME`.
+
+By default :variable:`CMAKE_GLOBAL_AUTORCC_TARGET` is unset.
+
+See the :manual:`cmake-qt(7)` manual for more information on using CMake
+with Qt.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_GLOBAL_AUTORCC_TARGET_NAME.rst b/share/cmake-3.22/Help/variable/CMAKE_GLOBAL_AUTORCC_TARGET_NAME.rst
new file mode 100644
index 0000000..4d2e313
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_GLOBAL_AUTORCC_TARGET_NAME.rst
@@ -0,0 +1,15 @@
+CMAKE_GLOBAL_AUTORCC_TARGET_NAME
+--------------------------------
+
+.. versionadded:: 3.14
+
+Change the name of the global ``autorcc`` target.
+
+When :variable:`CMAKE_GLOBAL_AUTORCC_TARGET` is enabled, a global custom target
+named ``autorcc`` is created.  :variable:`CMAKE_GLOBAL_AUTORCC_TARGET_NAME`
+allows to set a different name for that target.
+
+By default :variable:`CMAKE_GLOBAL_AUTOGEN_TARGET_NAME` is unset.
+
+See the :manual:`cmake-qt(7)` manual for more information on using CMake
+with Qt.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_GNUtoMS.rst b/share/cmake-3.22/Help/variable/CMAKE_GNUtoMS.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_GNUtoMS.rst
rename to share/cmake-3.22/Help/variable/CMAKE_GNUtoMS.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_HIP_ARCHITECTURES.rst b/share/cmake-3.22/Help/variable/CMAKE_HIP_ARCHITECTURES.rst
new file mode 100644
index 0000000..bcc6b35
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_HIP_ARCHITECTURES.rst
@@ -0,0 +1,12 @@
+CMAKE_HIP_ARCHITECTURES
+-----------------------
+
+.. versionadded:: 3.21
+
+Default value for :prop_tgt:`HIP_ARCHITECTURES` property of targets.
+
+This is initialized to the architectures reported by ``rocm_agent_enumerator``,
+if available, and otherwise to the default chosen by the compiler.
+
+This variable is used to initialize the :prop_tgt:`HIP_ARCHITECTURES` property
+on all targets. See the target property for additional information.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_HIP_EXTENSIONS.rst b/share/cmake-3.22/Help/variable/CMAKE_HIP_EXTENSIONS.rst
new file mode 100644
index 0000000..13987dc
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_HIP_EXTENSIONS.rst
@@ -0,0 +1,10 @@
+CMAKE_HIP_EXTENSIONS
+--------------------
+
+.. versionadded:: 3.21
+
+Default value for :prop_tgt:`HIP_EXTENSIONS` target property if set when a
+target is created.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_HIP_STANDARD.rst b/share/cmake-3.22/Help/variable/CMAKE_HIP_STANDARD.rst
new file mode 100644
index 0000000..5f15145
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_HIP_STANDARD.rst
@@ -0,0 +1,10 @@
+CMAKE_HIP_STANDARD
+------------------
+
+.. versionadded:: 3.21
+
+Default value for :prop_tgt:`HIP_STANDARD` target property if set when a target
+is created.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_HIP_STANDARD_REQUIRED.rst b/share/cmake-3.22/Help/variable/CMAKE_HIP_STANDARD_REQUIRED.rst
new file mode 100644
index 0000000..5d35e4e
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_HIP_STANDARD_REQUIRED.rst
@@ -0,0 +1,10 @@
+CMAKE_HIP_STANDARD_REQUIRED
+---------------------------
+
+.. versionadded:: 3.21
+
+Default value for :prop_tgt:`HIP_STANDARD_REQUIRED` target property if set when
+a target is created.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_HOME_DIRECTORY.rst b/share/cmake-3.22/Help/variable/CMAKE_HOME_DIRECTORY.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_HOME_DIRECTORY.rst
rename to share/cmake-3.22/Help/variable/CMAKE_HOME_DIRECTORY.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_HOST_APPLE.rst b/share/cmake-3.22/Help/variable/CMAKE_HOST_APPLE.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_HOST_APPLE.rst
rename to share/cmake-3.22/Help/variable/CMAKE_HOST_APPLE.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_HOST_SOLARIS.rst b/share/cmake-3.22/Help/variable/CMAKE_HOST_SOLARIS.rst
new file mode 100644
index 0000000..7054acd
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_HOST_SOLARIS.rst
@@ -0,0 +1,8 @@
+CMAKE_HOST_SOLARIS
+------------------
+
+.. versionadded:: 3.6
+
+``True`` for Oracle Solaris operating systems.
+
+Set to ``true`` when the host system is Oracle Solaris.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_HOST_SYSTEM.rst b/share/cmake-3.22/Help/variable/CMAKE_HOST_SYSTEM.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_HOST_SYSTEM.rst
rename to share/cmake-3.22/Help/variable/CMAKE_HOST_SYSTEM.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_HOST_SYSTEM_NAME.rst b/share/cmake-3.22/Help/variable/CMAKE_HOST_SYSTEM_NAME.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_HOST_SYSTEM_NAME.rst
rename to share/cmake-3.22/Help/variable/CMAKE_HOST_SYSTEM_NAME.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_HOST_SYSTEM_PROCESSOR.rst b/share/cmake-3.22/Help/variable/CMAKE_HOST_SYSTEM_PROCESSOR.rst
new file mode 100644
index 0000000..c305779
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_HOST_SYSTEM_PROCESSOR.rst
@@ -0,0 +1,42 @@
+CMAKE_HOST_SYSTEM_PROCESSOR
+---------------------------
+
+The name of the CPU CMake is running on.
+
+Windows Platforms
+^^^^^^^^^^^^^^^^^
+
+On Windows, this variable is set to the value of the environment variable
+``PROCESSOR_ARCHITECTURE``.
+
+Unix Platforms
+^^^^^^^^^^^^^^
+
+On systems that support ``uname``, this variable is set to the output of:
+
+- ``uname -m`` on GNU, Linux, Cygwin, Android, or
+- ``arch`` on OpenBSD, or
+- on other systems,
+
+  * ``uname -p`` if its exit code is nonzero, or
+  * ``uname -m`` otherwise.
+
+macOS Platforms
+^^^^^^^^^^^^^^^
+
+The value of ``uname -m`` is used by default.
+
+On Apple Silicon hosts, the architecture printed by ``uname -m`` may vary
+based on CMake's own architecture and that of the invoking process tree.
+
+.. versionadded:: 3.19.2
+
+  On Apple Silicon hosts:
+
+  * The :variable:`CMAKE_APPLE_SILICON_PROCESSOR` variable or
+    the :envvar:`CMAKE_APPLE_SILICON_PROCESSOR` environment variable
+    may be set to specify the host architecture explicitly.
+
+  * If :variable:`CMAKE_OSX_ARCHITECTURES` is not set, CMake adds explicit
+    flags to tell the compiler to build for the host architecture so the
+    toolchain does not have to guess based on the process tree's architecture.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_HOST_SYSTEM_VERSION.rst b/share/cmake-3.22/Help/variable/CMAKE_HOST_SYSTEM_VERSION.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_HOST_SYSTEM_VERSION.rst
rename to share/cmake-3.22/Help/variable/CMAKE_HOST_SYSTEM_VERSION.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_HOST_UNIX.rst b/share/cmake-3.22/Help/variable/CMAKE_HOST_UNIX.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_HOST_UNIX.rst
rename to share/cmake-3.22/Help/variable/CMAKE_HOST_UNIX.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_HOST_WIN32.rst b/share/cmake-3.22/Help/variable/CMAKE_HOST_WIN32.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_HOST_WIN32.rst
rename to share/cmake-3.22/Help/variable/CMAKE_HOST_WIN32.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_IGNORE_PATH.rst b/share/cmake-3.22/Help/variable/CMAKE_IGNORE_PATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_IGNORE_PATH.rst
rename to share/cmake-3.22/Help/variable/CMAKE_IGNORE_PATH.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_IMPORT_LIBRARY_PREFIX.rst b/share/cmake-3.22/Help/variable/CMAKE_IMPORT_LIBRARY_PREFIX.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_IMPORT_LIBRARY_PREFIX.rst
rename to share/cmake-3.22/Help/variable/CMAKE_IMPORT_LIBRARY_PREFIX.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_IMPORT_LIBRARY_SUFFIX.rst b/share/cmake-3.22/Help/variable/CMAKE_IMPORT_LIBRARY_SUFFIX.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_IMPORT_LIBRARY_SUFFIX.rst
rename to share/cmake-3.22/Help/variable/CMAKE_IMPORT_LIBRARY_SUFFIX.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_INCLUDE_CURRENT_DIR.rst b/share/cmake-3.22/Help/variable/CMAKE_INCLUDE_CURRENT_DIR.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_INCLUDE_CURRENT_DIR.rst
rename to share/cmake-3.22/Help/variable/CMAKE_INCLUDE_CURRENT_DIR.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE.rst b/share/cmake-3.22/Help/variable/CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE.rst
rename to share/cmake-3.22/Help/variable/CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_INCLUDE_DIRECTORIES_BEFORE.rst b/share/cmake-3.22/Help/variable/CMAKE_INCLUDE_DIRECTORIES_BEFORE.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_INCLUDE_DIRECTORIES_BEFORE.rst
rename to share/cmake-3.22/Help/variable/CMAKE_INCLUDE_DIRECTORIES_BEFORE.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE.rst b/share/cmake-3.22/Help/variable/CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE.rst
rename to share/cmake-3.22/Help/variable/CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_INCLUDE_PATH.rst b/share/cmake-3.22/Help/variable/CMAKE_INCLUDE_PATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_INCLUDE_PATH.rst
rename to share/cmake-3.22/Help/variable/CMAKE_INCLUDE_PATH.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_INSTALL_DEFAULT_COMPONENT_NAME.rst b/share/cmake-3.22/Help/variable/CMAKE_INSTALL_DEFAULT_COMPONENT_NAME.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_INSTALL_DEFAULT_COMPONENT_NAME.rst
rename to share/cmake-3.22/Help/variable/CMAKE_INSTALL_DEFAULT_COMPONENT_NAME.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS.rst b/share/cmake-3.22/Help/variable/CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS.rst
new file mode 100644
index 0000000..aad99e4
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS.rst
@@ -0,0 +1,31 @@
+CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS
+-------------------------------------------
+
+.. versionadded:: 3.11
+
+Default permissions for directories created implicitly during installation
+of files by :command:`install` and :command:`file(INSTALL)`.
+
+If ``make install`` is invoked and directories are implicitly created they
+get permissions set by :variable:`CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS`
+variable or platform specific default permissions if the variable is not set.
+
+Implicitly created directories are created if they are not explicitly installed
+by :command:`install` command but are needed to install a file on a certain
+path. Example of such locations are directories created due to the setting of
+:variable:`CMAKE_INSTALL_PREFIX`.
+
+Expected content of the :variable:`CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS`
+variable is a list of permissions that can be used by :command:`install` command
+`PERMISSIONS` section.
+
+Example usage:
+
+::
+
+ set(CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS
+      OWNER_READ
+      OWNER_WRITE
+      OWNER_EXECUTE
+      GROUP_READ
+    )
diff --git a/share/cmake-3.22/Help/variable/CMAKE_INSTALL_MESSAGE.rst b/share/cmake-3.22/Help/variable/CMAKE_INSTALL_MESSAGE.rst
new file mode 100644
index 0000000..4f39cfe
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_INSTALL_MESSAGE.rst
@@ -0,0 +1,32 @@
+CMAKE_INSTALL_MESSAGE
+---------------------
+
+.. versionadded:: 3.1
+
+Specify verbosity of installation script code generated by the
+:command:`install` command (using the :command:`file(INSTALL)` command).
+For paths that are newly installed or updated, installation
+may print lines like::
+
+  -- Installing: /some/destination/path
+
+For paths that are already up to date, installation may print
+lines like::
+
+  -- Up-to-date: /some/destination/path
+
+The ``CMAKE_INSTALL_MESSAGE`` variable may be set to control
+which messages are printed:
+
+``ALWAYS``
+  Print both ``Installing`` and ``Up-to-date`` messages.
+
+``LAZY``
+  Print ``Installing`` but not ``Up-to-date`` messages.
+
+``NEVER``
+  Print neither ``Installing`` nor ``Up-to-date`` messages.
+
+Other values have undefined behavior and may not be diagnosed.
+
+If this variable is not set, the default behavior is ``ALWAYS``.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_INSTALL_NAME_DIR.rst b/share/cmake-3.22/Help/variable/CMAKE_INSTALL_NAME_DIR.rst
new file mode 100644
index 0000000..b07d44f
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_INSTALL_NAME_DIR.rst
@@ -0,0 +1,8 @@
+CMAKE_INSTALL_NAME_DIR
+----------------------
+
+Directory name for installed targets on Apple platforms.
+
+``CMAKE_INSTALL_NAME_DIR`` is used to initialize the
+:prop_tgt:`INSTALL_NAME_DIR` property on all targets.  See that target
+property for more information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_INSTALL_PREFIX.rst b/share/cmake-3.22/Help/variable/CMAKE_INSTALL_PREFIX.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_INSTALL_PREFIX.rst
rename to share/cmake-3.22/Help/variable/CMAKE_INSTALL_PREFIX.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT.rst b/share/cmake-3.22/Help/variable/CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT.rst
new file mode 100644
index 0000000..93cc319
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT.rst
@@ -0,0 +1,16 @@
+CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT
+-------------------------------------------
+
+.. versionadded:: 3.7.1
+
+CMake sets this variable to a ``TRUE`` value when the
+:variable:`CMAKE_INSTALL_PREFIX` has just been initialized to
+its default value, typically on the first run of CMake within
+a new build tree.  This can be used by project code to change
+the default without overriding a user-provided value:
+
+.. code-block:: cmake
+
+  if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
+    set(CMAKE_INSTALL_PREFIX "/my/default" CACHE PATH "..." FORCE)
+  endif()
diff --git a/share/cmake-3.22/Help/variable/CMAKE_INSTALL_REMOVE_ENVIRONMENT_RPATH.rst b/share/cmake-3.22/Help/variable/CMAKE_INSTALL_REMOVE_ENVIRONMENT_RPATH.rst
new file mode 100644
index 0000000..c86e433
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_INSTALL_REMOVE_ENVIRONMENT_RPATH.rst
@@ -0,0 +1,11 @@
+CMAKE_INSTALL_REMOVE_ENVIRONMENT_RPATH
+--------------------------------------
+
+.. versionadded:: 3.16
+
+Sets the default for whether toolchain-defined rpaths should be removed during
+installation.
+
+``CMAKE_INSTALL_REMOVE_ENVIRONMENT_RPATH`` is a boolean that provides the
+default value for the :prop_tgt:`INSTALL_REMOVE_ENVIRONMENT_RPATH` property
+of all subsequently created targets.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_INSTALL_RPATH.rst b/share/cmake-3.22/Help/variable/CMAKE_INSTALL_RPATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_INSTALL_RPATH.rst
rename to share/cmake-3.22/Help/variable/CMAKE_INSTALL_RPATH.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_INSTALL_RPATH_USE_LINK_PATH.rst b/share/cmake-3.22/Help/variable/CMAKE_INSTALL_RPATH_USE_LINK_PATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_INSTALL_RPATH_USE_LINK_PATH.rst
rename to share/cmake-3.22/Help/variable/CMAKE_INSTALL_RPATH_USE_LINK_PATH.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_INTERNAL_PLATFORM_ABI.rst b/share/cmake-3.22/Help/variable/CMAKE_INTERNAL_PLATFORM_ABI.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_INTERNAL_PLATFORM_ABI.rst
rename to share/cmake-3.22/Help/variable/CMAKE_INTERNAL_PLATFORM_ABI.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_INTERPROCEDURAL_OPTIMIZATION.rst b/share/cmake-3.22/Help/variable/CMAKE_INTERPROCEDURAL_OPTIMIZATION.rst
new file mode 100644
index 0000000..cf7da76
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_INTERPROCEDURAL_OPTIMIZATION.rst
@@ -0,0 +1,10 @@
+CMAKE_INTERPROCEDURAL_OPTIMIZATION
+----------------------------------
+
+.. versionadded:: 3.9
+
+Default value for :prop_tgt:`INTERPROCEDURAL_OPTIMIZATION` of targets.
+
+This variable is used to initialize the :prop_tgt:`INTERPROCEDURAL_OPTIMIZATION`
+property on all the targets.  See that target property for additional
+information.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_INTERPROCEDURAL_OPTIMIZATION_CONFIG.rst b/share/cmake-3.22/Help/variable/CMAKE_INTERPROCEDURAL_OPTIMIZATION_CONFIG.rst
new file mode 100644
index 0000000..5b3ee77
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_INTERPROCEDURAL_OPTIMIZATION_CONFIG.rst
@@ -0,0 +1,10 @@
+CMAKE_INTERPROCEDURAL_OPTIMIZATION_<CONFIG>
+-------------------------------------------
+
+.. versionadded:: 3.9
+
+Default value for :prop_tgt:`INTERPROCEDURAL_OPTIMIZATION_<CONFIG>` of targets.
+
+This variable is used to initialize the :prop_tgt:`INTERPROCEDURAL_OPTIMIZATION_<CONFIG>`
+property on all the targets.  See that target property for additional
+information.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_IOS_INSTALL_COMBINED.rst b/share/cmake-3.22/Help/variable/CMAKE_IOS_INSTALL_COMBINED.rst
new file mode 100644
index 0000000..cd7fd8d
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_IOS_INSTALL_COMBINED.rst
@@ -0,0 +1,10 @@
+CMAKE_IOS_INSTALL_COMBINED
+--------------------------
+
+.. versionadded:: 3.5
+
+Default value for :prop_tgt:`IOS_INSTALL_COMBINED` of targets.
+
+This variable is used to initialize the :prop_tgt:`IOS_INSTALL_COMBINED`
+property on all the targets.  See that target property for additional
+information.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ISPC_HEADER_DIRECTORY.rst b/share/cmake-3.22/Help/variable/CMAKE_ISPC_HEADER_DIRECTORY.rst
new file mode 100644
index 0000000..a7c9cf6
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ISPC_HEADER_DIRECTORY.rst
@@ -0,0 +1,10 @@
+CMAKE_ISPC_HEADER_DIRECTORY
+----------------------------
+
+.. versionadded:: 3.19
+
+ISPC generated header output directory.
+
+This variable is used to initialize the :prop_tgt:`ISPC_HEADER_DIRECTORY`
+property on all the targets.  See the target property for additional
+information.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ISPC_HEADER_SUFFIX.rst b/share/cmake-3.22/Help/variable/CMAKE_ISPC_HEADER_SUFFIX.rst
new file mode 100644
index 0000000..c9fb709
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ISPC_HEADER_SUFFIX.rst
@@ -0,0 +1,10 @@
+CMAKE_ISPC_HEADER_SUFFIX
+------------------------
+
+.. versionadded:: 3.19.2
+
+Output suffix to be used for ISPC generated headers.
+
+This variable is used to initialize the :prop_tgt:`ISPC_HEADER_SUFFIX`
+property on all the targets.  See the target property for additional
+information.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_ISPC_INSTRUCTION_SETS.rst b/share/cmake-3.22/Help/variable/CMAKE_ISPC_INSTRUCTION_SETS.rst
new file mode 100644
index 0000000..8a6005e
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_ISPC_INSTRUCTION_SETS.rst
@@ -0,0 +1,9 @@
+CMAKE_ISPC_INSTRUCTION_SETS
+---------------------------
+
+.. versionadded:: 3.19
+
+Default value for :prop_tgt:`ISPC_INSTRUCTION_SETS` property of targets.
+
+This variable is used to initialize the :prop_tgt:`ISPC_INSTRUCTION_SETS` property
+on all targets. See the target property for additional information.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_JOB_POOLS.rst b/share/cmake-3.22/Help/variable/CMAKE_JOB_POOLS.rst
new file mode 100644
index 0000000..43d3c84
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_JOB_POOLS.rst
@@ -0,0 +1,8 @@
+CMAKE_JOB_POOLS
+---------------
+
+.. versionadded:: 3.11
+
+If the :prop_gbl:`JOB_POOLS` global property is not set, the value
+of this variable is used in its place.  See :prop_gbl:`JOB_POOLS`
+for additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_JOB_POOL_COMPILE.rst b/share/cmake-3.22/Help/variable/CMAKE_JOB_POOL_COMPILE.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_JOB_POOL_COMPILE.rst
rename to share/cmake-3.22/Help/variable/CMAKE_JOB_POOL_COMPILE.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_JOB_POOL_LINK.rst b/share/cmake-3.22/Help/variable/CMAKE_JOB_POOL_LINK.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_JOB_POOL_LINK.rst
rename to share/cmake-3.22/Help/variable/CMAKE_JOB_POOL_LINK.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_JOB_POOL_PRECOMPILE_HEADER.rst b/share/cmake-3.22/Help/variable/CMAKE_JOB_POOL_PRECOMPILE_HEADER.rst
new file mode 100644
index 0000000..1a6f66a
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_JOB_POOL_PRECOMPILE_HEADER.rst
@@ -0,0 +1,8 @@
+CMAKE_JOB_POOL_PRECOMPILE_HEADER
+--------------------------------
+
+.. versionadded:: 3.17
+
+This variable is used to initialize the :prop_tgt:`JOB_POOL_PRECOMPILE_HEADER`
+property on all the targets. See :prop_tgt:`JOB_POOL_PRECOMPILE_HEADER`
+for additional information.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_ANDROID_TOOLCHAIN_MACHINE.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_ANDROID_TOOLCHAIN_MACHINE.rst
new file mode 100644
index 0000000..f539277
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_ANDROID_TOOLCHAIN_MACHINE.rst
@@ -0,0 +1,11 @@
+CMAKE_<LANG>_ANDROID_TOOLCHAIN_MACHINE
+--------------------------------------
+
+.. versionadded:: 3.7.1
+
+When :ref:`Cross Compiling for Android` this variable contains the
+toolchain binutils machine name (e.g. ``gcc -dumpmachine``).  The
+binutils typically have a ``<machine>-`` prefix on their name.
+
+See also :variable:`CMAKE_<LANG>_ANDROID_TOOLCHAIN_PREFIX`
+and :variable:`CMAKE_<LANG>_ANDROID_TOOLCHAIN_SUFFIX`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_ANDROID_TOOLCHAIN_PREFIX.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_ANDROID_TOOLCHAIN_PREFIX.rst
new file mode 100644
index 0000000..ff072ca
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_ANDROID_TOOLCHAIN_PREFIX.rst
@@ -0,0 +1,14 @@
+CMAKE_<LANG>_ANDROID_TOOLCHAIN_PREFIX
+-------------------------------------
+
+.. versionadded:: 3.7
+
+When :ref:`Cross Compiling for Android` this variable contains the absolute
+path prefixing the toolchain GNU compiler and its binutils.
+
+See also :variable:`CMAKE_<LANG>_ANDROID_TOOLCHAIN_SUFFIX`
+and :variable:`CMAKE_<LANG>_ANDROID_TOOLCHAIN_MACHINE`.
+
+For example, the path to the linker is::
+
+  ${CMAKE_CXX_ANDROID_TOOLCHAIN_PREFIX}ld${CMAKE_CXX_ANDROID_TOOLCHAIN_SUFFIX}
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_ANDROID_TOOLCHAIN_SUFFIX.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_ANDROID_TOOLCHAIN_SUFFIX.rst
new file mode 100644
index 0000000..d595280
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_ANDROID_TOOLCHAIN_SUFFIX.rst
@@ -0,0 +1,10 @@
+CMAKE_<LANG>_ANDROID_TOOLCHAIN_SUFFIX
+-------------------------------------
+
+.. versionadded:: 3.7
+
+When :ref:`Cross Compiling for Android` this variable contains the
+host platform suffix of the toolchain GNU compiler and its binutils.
+
+See also :variable:`CMAKE_<LANG>_ANDROID_TOOLCHAIN_PREFIX`
+and :variable:`CMAKE_<LANG>_ANDROID_TOOLCHAIN_MACHINE`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_ARCHIVE_APPEND.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_ARCHIVE_APPEND.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LANG_ARCHIVE_APPEND.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LANG_ARCHIVE_APPEND.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_ARCHIVE_CREATE.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_ARCHIVE_CREATE.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LANG_ARCHIVE_CREATE.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LANG_ARCHIVE_CREATE.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_ARCHIVE_FINISH.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_ARCHIVE_FINISH.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LANG_ARCHIVE_FINISH.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LANG_ARCHIVE_FINISH.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_BYTE_ORDER.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_BYTE_ORDER.rst
new file mode 100644
index 0000000..78f0ae6
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_BYTE_ORDER.rst
@@ -0,0 +1,20 @@
+CMAKE_<LANG>_BYTE_ORDER
+-----------------------
+
+.. versionadded:: 3.20
+
+Byte order of ``<LANG>`` compiler target architecture, if known.
+If defined and not empty, the value is one of:
+
+``BIG_ENDIAN``
+  The target architecture is Big Endian.
+
+``LITTLE_ENDIAN``
+  The target architecture is Little Endian.
+
+This is defined for languages ``C``, ``CXX``, ``OBJC``, ``OBJCXX``,
+and ``CUDA``.
+
+If :variable:`CMAKE_OSX_ARCHITECTURES` specifies multiple architectures, the
+value of ``CMAKE_<LANG>_BYTE_ORDER`` is non-empty only if all architectures
+share the same byte order.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_CLANG_TIDY.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_CLANG_TIDY.rst
new file mode 100644
index 0000000..32e27b0
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_CLANG_TIDY.rst
@@ -0,0 +1,15 @@
+CMAKE_<LANG>_CLANG_TIDY
+-----------------------
+
+.. versionadded:: 3.6
+
+Default value for :prop_tgt:`<LANG>_CLANG_TIDY` target property
+when ``<LANG>`` is ``C``, ``CXX``, ``OBJC`` or ``OBJCXX``.
+
+This variable is used to initialize the property on each target as it is
+created.  For example:
+
+.. code-block:: cmake
+
+  set(CMAKE_CXX_CLANG_TIDY clang-tidy -checks=-*,readability-*)
+  add_executable(foo foo.cxx)
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER.rst
new file mode 100644
index 0000000..e694b33
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER.rst
@@ -0,0 +1,32 @@
+CMAKE_<LANG>_COMPILER
+---------------------
+
+The full path to the compiler for ``LANG``.
+
+This is the command that will be used as the ``<LANG>`` compiler.  Once
+set, you can not change this variable.
+
+Usage
+^^^^^
+
+This variable can be set by the user during the first time a build tree is configured.
+
+If a non-full path value is supplied then CMake will resolve the full path of
+the compiler.
+
+The variable could be set in a user supplied toolchain file or via `-D` on the command line.
+
+.. note::
+  Options that are required to make the compiler work correctly can be included
+  as items in a list; they can not be changed.
+
+.. code-block:: cmake
+
+  #set within user supplied toolchain file
+  set(CMAKE_C_COMPILER /full/path/to/qcc --arg1 --arg2)
+
+or
+
+.. code-block:: console
+
+  $ cmake ... -DCMAKE_C_COMPILER='qcc;--arg1;--arg2'
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_ABI.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_ABI.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_ABI.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_ABI.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_AR.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_AR.rst
new file mode 100644
index 0000000..74f2758
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_AR.rst
@@ -0,0 +1,9 @@
+CMAKE_<LANG>_COMPILER_AR
+------------------------
+
+.. versionadded:: 3.9
+
+A wrapper around ``ar`` adding the appropriate ``--plugin`` option for the
+compiler.
+
+See also :variable:`CMAKE_AR`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst
new file mode 100644
index 0000000..8057566
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst
@@ -0,0 +1,10 @@
+CMAKE_<LANG>_COMPILER_ARCHITECTURE_ID
+-------------------------------------
+
+.. versionadded:: 3.10
+
+An internal variable subject to change.
+
+This is used to identify the variant of a compiler based on its target
+architecture.  For some compilers this is needed to determine the correct
+usage.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_EXTERNAL_TOOLCHAIN.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_EXTERNAL_TOOLCHAIN.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_EXTERNAL_TOOLCHAIN.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_EXTERNAL_TOOLCHAIN.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_FRONTEND_VARIANT.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_FRONTEND_VARIANT.rst
new file mode 100644
index 0000000..128b1fb
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_FRONTEND_VARIANT.rst
@@ -0,0 +1,18 @@
+CMAKE_<LANG>_COMPILER_FRONTEND_VARIANT
+--------------------------------------
+
+.. versionadded:: 3.14
+
+Identification string of the compiler frontend variant.
+
+Some compilers have multiple, different frontends for accepting command
+line options.  (For example ``Clang`` originally only had a frontend
+compatible with the ``GNU`` compiler but since its port to Windows
+(``Clang-Cl``) it now also supports a frontend compatible with ``MSVC``.)
+When CMake detects such a compiler it sets this
+variable to what would have been the :variable:`CMAKE_<LANG>_COMPILER_ID` for
+the compiler whose frontend it resembles.
+
+.. note::
+  In other words, this variable describes what command line options
+  and language extensions the compiler frontend expects.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_ID.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_ID.rst
new file mode 100644
index 0000000..0abedde
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_ID.rst
@@ -0,0 +1,45 @@
+CMAKE_<LANG>_COMPILER_ID
+------------------------
+
+Compiler identification string.
+
+A short string unique to the compiler vendor.  Possible values
+include:
+
+::
+
+  Absoft = Absoft Fortran (absoft.com)
+  ADSP = Analog VisualDSP++ (analog.com)
+  AppleClang = Apple Clang (apple.com)
+  ARMCC = ARM Compiler (arm.com)
+  ARMClang = ARM Compiler based on Clang (arm.com)
+  Bruce = Bruce C Compiler
+  CCur = Concurrent Fortran (ccur.com)
+  Clang = LLVM Clang (clang.llvm.org)
+  Cray = Cray Compiler (cray.com)
+  Embarcadero, Borland = Embarcadero (embarcadero.com)
+  Flang = Flang LLVM Fortran Compiler
+  Fujitsu = Fujitsu HPC compiler (Trad mode)
+  FujitsuClang = Fujitsu HPC compiler (Clang mode)
+  G95 = G95 Fortran (g95.org)
+  GNU = GNU Compiler Collection (gcc.gnu.org)
+  GHS = Green Hills Software (www.ghs.com)
+  HP = Hewlett-Packard Compiler (hp.com)
+  IAR = IAR Systems (iar.com)
+  Intel = Intel Compiler (intel.com)
+  IntelLLVM = Intel LLVM-Based Compiler (intel.com)
+  MSVC = Microsoft Visual Studio (microsoft.com)
+  NVHPC = NVIDIA HPC SDK Compiler (nvidia.com)
+  NVIDIA = NVIDIA CUDA Compiler (nvidia.com)
+  OpenWatcom = Open Watcom (openwatcom.org)
+  PGI = The Portland Group (pgroup.com)
+  PathScale = PathScale (pathscale.com)
+  SDCC = Small Device C Compiler (sdcc.sourceforge.net)
+  SunPro = Oracle Solaris Studio (oracle.com)
+  TI = Texas Instruments (ti.com)
+  TinyCC = Tiny C Compiler (tinycc.org)
+  XL, VisualAge, zOS = IBM XL (ibm.com)
+  XLClang = IBM Clang-based XL (ibm.com)
+
+This variable is not guaranteed to be defined for all compilers or
+languages.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_LAUNCHER.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_LAUNCHER.rst
new file mode 100644
index 0000000..f16e594
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_LAUNCHER.rst
@@ -0,0 +1,12 @@
+CMAKE_<LANG>_COMPILER_LAUNCHER
+------------------------------
+
+.. versionadded:: 3.4
+
+Default value for :prop_tgt:`<LANG>_COMPILER_LAUNCHER` target property.
+This variable is used to initialize the property on each target as it is
+created.  This is done only when ``<LANG>`` is ``C``, ``CXX``, ``Fortran``,
+``HIP``, ``ISPC``, ``OBJC``, ``OBJCXX``, or ``CUDA``.
+
+This variable is initialized to the :envvar:`CMAKE_<LANG>_COMPILER_LAUNCHER`
+environment variable if it is set.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_LOADED.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_LOADED.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_LOADED.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_LOADED.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_PREDEFINES_COMMAND.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_PREDEFINES_COMMAND.rst
new file mode 100644
index 0000000..935329a
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_PREDEFINES_COMMAND.rst
@@ -0,0 +1,10 @@
+CMAKE_<LANG>_COMPILER_PREDEFINES_COMMAND
+----------------------------------------
+
+.. versionadded:: 3.10
+
+Command that outputs the compiler pre definitions.
+
+See :prop_tgt:`AUTOMOC` which uses
+:variable:`CMAKE_CXX_COMPILER_PREDEFINES_COMMAND <CMAKE_<LANG>_COMPILER_PREDEFINES_COMMAND>`
+to generate the :prop_tgt:`AUTOMOC_COMPILER_PREDEFINES`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_RANLIB.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_RANLIB.rst
new file mode 100644
index 0000000..1d10b55
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_RANLIB.rst
@@ -0,0 +1,9 @@
+CMAKE_<LANG>_COMPILER_RANLIB
+----------------------------
+
+.. versionadded:: 3.9
+
+A wrapper around ``ranlib`` adding the appropriate ``--plugin`` option for the
+compiler.
+
+See also :variable:`CMAKE_RANLIB`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_TARGET.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_TARGET.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_TARGET.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_TARGET.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_VERSION.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_VERSION.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILER_VERSION.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_VERSION.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_VERSION_INTERNAL.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_VERSION_INTERNAL.rst
new file mode 100644
index 0000000..596a989
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILER_VERSION_INTERNAL.rst
@@ -0,0 +1,10 @@
+CMAKE_<LANG>_COMPILER_VERSION_INTERNAL
+--------------------------------------
+
+.. versionadded:: 3.10
+
+An internal variable subject to change.
+
+This is used to identify the variant of a compiler based on an internal
+version number.  For some compilers this is needed to determine the
+correct usage.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILE_OBJECT.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILE_OBJECT.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LANG_COMPILE_OBJECT.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LANG_COMPILE_OBJECT.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_CPPCHECK.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_CPPCHECK.rst
new file mode 100644
index 0000000..5ae5faf
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_CPPCHECK.rst
@@ -0,0 +1,8 @@
+CMAKE_<LANG>_CPPCHECK
+---------------------
+
+.. versionadded:: 3.10
+
+Default value for :prop_tgt:`<LANG>_CPPCHECK` target property. This variable
+is used to initialize the property on each target as it is created.  This
+is done only when ``<LANG>`` is ``C`` or ``CXX``.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_CPPLINT.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_CPPLINT.rst
new file mode 100644
index 0000000..ab7b0fc
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_CPPLINT.rst
@@ -0,0 +1,8 @@
+CMAKE_<LANG>_CPPLINT
+--------------------
+
+.. versionadded:: 3.8
+
+Default value for :prop_tgt:`<LANG>_CPPLINT` target property. This variable
+is used to initialize the property on each target as it is created.  This
+is done only when ``<LANG>`` is ``C`` or ``CXX``.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_CREATE_SHARED_LIBRARY.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_CREATE_SHARED_LIBRARY.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LANG_CREATE_SHARED_LIBRARY.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LANG_CREATE_SHARED_LIBRARY.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_CREATE_SHARED_MODULE.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_CREATE_SHARED_MODULE.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LANG_CREATE_SHARED_MODULE.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LANG_CREATE_SHARED_MODULE.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_CREATE_STATIC_LIBRARY.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_CREATE_STATIC_LIBRARY.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LANG_CREATE_STATIC_LIBRARY.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LANG_CREATE_STATIC_LIBRARY.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_EXTENSIONS.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_EXTENSIONS.rst
new file mode 100644
index 0000000..3a32002
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_EXTENSIONS.rst
@@ -0,0 +1,20 @@
+CMAKE_<LANG>_EXTENSIONS
+-----------------------
+
+The variations are:
+
+* :variable:`CMAKE_C_EXTENSIONS`
+* :variable:`CMAKE_CXX_EXTENSIONS`
+* :variable:`CMAKE_CUDA_EXTENSIONS`
+* :variable:`CMAKE_HIP_EXTENSIONS`
+* :variable:`CMAKE_OBJC_EXTENSIONS`
+* :variable:`CMAKE_OBJCXX_EXTENSIONS`
+
+Default values for :prop_tgt:`<LANG>_EXTENSIONS` target properties if set when
+a target is created.  For the compiler's default setting see
+:variable:`CMAKE_<LANG>_EXTENSIONS_DEFAULT`.
+
+For supported CMake versions see the respective pages.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_EXTENSIONS_DEFAULT.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_EXTENSIONS_DEFAULT.rst
new file mode 100644
index 0000000..a66453a
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_EXTENSIONS_DEFAULT.rst
@@ -0,0 +1,10 @@
+CMAKE_<LANG>_EXTENSIONS_DEFAULT
+-------------------------------
+
+.. versionadded:: 3.22
+
+Compiler's default extensions mode. Used as the default for the
+:prop_tgt:`<LANG>_EXTENSIONS` target property when
+:variable:`CMAKE_<LANG>_EXTENSIONS` is not set (see :policy:`CMP0128`).
+
+This variable is read-only.  Modifying it is undefined behavior.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS.rst
new file mode 100644
index 0000000..2784397
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS.rst
@@ -0,0 +1,25 @@
+CMAKE_<LANG>_FLAGS
+------------------
+
+Flags for all build types.
+
+``<LANG>`` flags used regardless of the value of :variable:`CMAKE_BUILD_TYPE`.
+
+This is initialized for each language from environment variables:
+
+* ``CMAKE_C_FLAGS``:
+  Initialized by the :envvar:`CFLAGS` environment variable.
+* ``CMAKE_CXX_FLAGS``:
+  Initialized by the :envvar:`CXXFLAGS` environment variable.
+* ``CMAKE_CUDA_FLAGS``:
+  Initialized by the :envvar:`CUDAFLAGS` environment variable.
+* ``CMAKE_Fortran_FLAGS``:
+  Initialized by the :envvar:`FFLAGS` environment variable.
+
+This value is a command-line string fragment. Therefore, multiple options
+should be separated by spaces, and options with spaces should be quoted.
+
+The flags in this variable will be passed to the compiler before those
+in the per-configuration :variable:`CMAKE_<LANG>_FLAGS_<CONFIG>` variant,
+and before flags added by the :command:`add_compile_options` or
+:command:`target_compile_options` commands.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS_CONFIG.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS_CONFIG.rst
new file mode 100644
index 0000000..f0900fd
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS_CONFIG.rst
@@ -0,0 +1,9 @@
+CMAKE_<LANG>_FLAGS_<CONFIG>
+---------------------------
+
+Flags for language ``<LANG>`` when building for the ``<CONFIG>`` configuration.
+
+The flags in this variable will be passed to the compiler after those
+in the :variable:`CMAKE_<LANG>_FLAGS` variable, but before flags added
+by the :command:`add_compile_options` or :command:`target_compile_options`
+commands.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS_CONFIG_INIT.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS_CONFIG_INIT.rst
new file mode 100644
index 0000000..17669a2
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS_CONFIG_INIT.rst
@@ -0,0 +1,12 @@
+CMAKE_<LANG>_FLAGS_<CONFIG>_INIT
+--------------------------------
+
+.. versionadded:: 3.11
+
+Value used to initialize the :variable:`CMAKE_<LANG>_FLAGS_<CONFIG>` cache
+entry the first time a build tree is configured for language ``<LANG>``.
+This variable is meant to be set by a :variable:`toolchain file
+<CMAKE_TOOLCHAIN_FILE>`.  CMake may prepend or append content to
+the value based on the environment and target platform.
+
+See also :variable:`CMAKE_<LANG>_FLAGS_INIT`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS_DEBUG.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS_DEBUG.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS_DEBUG.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS_DEBUG.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS_DEBUG_INIT.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS_DEBUG_INIT.rst
new file mode 100644
index 0000000..49c9e99
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS_DEBUG_INIT.rst
@@ -0,0 +1,7 @@
+CMAKE_<LANG>_FLAGS_DEBUG_INIT
+-----------------------------
+
+.. versionadded:: 3.7
+
+This variable is the ``Debug`` variant of the
+:variable:`CMAKE_<LANG>_FLAGS_<CONFIG>_INIT` variable.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS_INIT.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS_INIT.rst
new file mode 100644
index 0000000..ca13a29
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS_INIT.rst
@@ -0,0 +1,19 @@
+CMAKE_<LANG>_FLAGS_INIT
+-----------------------
+
+.. versionadded:: 3.7
+
+Value used to initialize the :variable:`CMAKE_<LANG>_FLAGS` cache entry
+the first time a build tree is configured for language ``<LANG>``.
+This variable is meant to be set by a :variable:`toolchain file
+<CMAKE_TOOLCHAIN_FILE>`.  CMake may prepend or append content to
+the value based on the environment and target platform.  For example,
+the contents of a ``xxxFLAGS`` environment variable will be prepended,
+where ``xxx`` will be language-specific but not necessarily the same as
+``<LANG>`` (e.g. :envvar:`CXXFLAGS` for ``CXX``, :envvar:`FFLAGS` for
+``Fortran``, and so on).
+This value is a command-line string fragment. Therefore, multiple options
+should be separated by spaces, and options with spaces should be quoted.
+
+See also the configuration-specific
+:variable:`CMAKE_<LANG>_FLAGS_<CONFIG>_INIT` variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS_MINSIZEREL.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS_MINSIZEREL.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS_MINSIZEREL.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS_MINSIZEREL.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS_MINSIZEREL_INIT.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS_MINSIZEREL_INIT.rst
new file mode 100644
index 0000000..3600909
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS_MINSIZEREL_INIT.rst
@@ -0,0 +1,7 @@
+CMAKE_<LANG>_FLAGS_MINSIZEREL_INIT
+----------------------------------
+
+.. versionadded:: 3.7
+
+This variable is the ``MinSizeRel`` variant of the
+:variable:`CMAKE_<LANG>_FLAGS_<CONFIG>_INIT` variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS_RELEASE.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS_RELEASE.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS_RELEASE.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS_RELEASE.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS_RELEASE_INIT.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS_RELEASE_INIT.rst
new file mode 100644
index 0000000..e889852
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS_RELEASE_INIT.rst
@@ -0,0 +1,7 @@
+CMAKE_<LANG>_FLAGS_RELEASE_INIT
+-------------------------------
+
+.. versionadded:: 3.7
+
+This variable is the ``Release`` variant of the
+:variable:`CMAKE_<LANG>_FLAGS_<CONFIG>_INIT` variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS_RELWITHDEBINFO.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS_RELWITHDEBINFO.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LANG_FLAGS_RELWITHDEBINFO.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS_RELWITHDEBINFO.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS_RELWITHDEBINFO_INIT.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS_RELWITHDEBINFO_INIT.rst
new file mode 100644
index 0000000..b42caee
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_FLAGS_RELWITHDEBINFO_INIT.rst
@@ -0,0 +1,7 @@
+CMAKE_<LANG>_FLAGS_RELWITHDEBINFO_INIT
+--------------------------------------
+
+.. versionadded:: 3.7
+
+This variable is the ``RelWithDebInfo`` variant of the
+:variable:`CMAKE_<LANG>_FLAGS_<CONFIG>_INIT` variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_IGNORE_EXTENSIONS.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_IGNORE_EXTENSIONS.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LANG_IGNORE_EXTENSIONS.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LANG_IGNORE_EXTENSIONS.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_IMPLICIT_INCLUDE_DIRECTORIES.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_IMPLICIT_INCLUDE_DIRECTORIES.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LANG_IMPLICIT_INCLUDE_DIRECTORIES.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LANG_IMPLICIT_INCLUDE_DIRECTORIES.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_IMPLICIT_LINK_DIRECTORIES.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_IMPLICIT_LINK_DIRECTORIES.rst
new file mode 100644
index 0000000..081c4da
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_IMPLICIT_LINK_DIRECTORIES.rst
@@ -0,0 +1,34 @@
+CMAKE_<LANG>_IMPLICIT_LINK_DIRECTORIES
+--------------------------------------
+
+Implicit linker search path detected for language ``<LANG>``.
+
+Compilers typically pass directories containing language runtime
+libraries and default library search paths when they invoke a linker.
+These paths are implicit linker search directories for the compiler's
+language.  For each language enabled by the :command:`project` or
+:command:`enable_language` command, CMake automatically detects these
+directories and reports the results in this variable.
+
+When linking to a static library, CMake adds the implicit link directories
+from this variable for each language used in the static library (except
+the language whose compiler is used to drive linking).  In the case of an
+imported static library, the :prop_tgt:`IMPORTED_LINK_INTERFACE_LANGUAGES`
+target property lists the languages whose implicit link information is
+needed.  If any of the languages is not enabled, its value for the
+``CMAKE_<LANG>_IMPLICIT_LINK_DIRECTORIES`` variable may instead be provided
+by the project.  Or, a :variable:`toolchain file <CMAKE_TOOLCHAIN_FILE>`
+may set the variable to a value known for the specified toolchain.  It will
+either be overridden when the language is enabled, or used as a fallback.
+
+Some toolchains read implicit directories from an environment variable such as
+``LIBRARY_PATH``.  If using such an environment variable, keep its value
+consistent when operating in a given build tree because CMake saves the value
+detected when first creating a build tree.
+
+If policy :policy:`CMP0060` is not set to ``NEW``, then when a library in one
+of these directories is given by full path to :command:`target_link_libraries`
+CMake will generate the ``-l<name>`` form on link lines for historical
+purposes.
+
+See also the :variable:`CMAKE_<LANG>_IMPLICIT_LINK_LIBRARIES` variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LANG_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LANG_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_IMPLICIT_LINK_LIBRARIES.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_IMPLICIT_LINK_LIBRARIES.rst
new file mode 100644
index 0000000..0c25489
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_IMPLICIT_LINK_LIBRARIES.rst
@@ -0,0 +1,24 @@
+CMAKE_<LANG>_IMPLICIT_LINK_LIBRARIES
+------------------------------------
+
+Implicit link libraries and flags detected for language ``<LANG>``.
+
+Compilers typically pass language runtime library names and other
+flags when they invoke a linker.  These flags are implicit link
+options for the compiler's language.  For each language enabled
+by the :command:`project` or :command:`enable_language` command,
+CMake automatically detects these libraries and flags and reports
+the results in this variable.
+
+When linking to a static library, CMake adds the implicit link libraries and
+flags from this variable for each language used in the static library (except
+the language whose compiler is used to drive linking).  In the case of an
+imported static library, the :prop_tgt:`IMPORTED_LINK_INTERFACE_LANGUAGES`
+target property lists the languages whose implicit link information is
+needed.  If any of the languages is not enabled, its value for the
+``CMAKE_<LANG>_IMPLICIT_LINK_LIBRARIES`` variable may instead be provided
+by the project.  Or, a :variable:`toolchain file <CMAKE_TOOLCHAIN_FILE>`
+may set the variable to a value known for the specified toolchain.  It will
+either be overridden when the language is enabled, or used as a fallback.
+
+See also the :variable:`CMAKE_<LANG>_IMPLICIT_LINK_DIRECTORIES` variable.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_INCLUDE_WHAT_YOU_USE.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_INCLUDE_WHAT_YOU_USE.rst
new file mode 100644
index 0000000..be6c210
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_INCLUDE_WHAT_YOU_USE.rst
@@ -0,0 +1,8 @@
+CMAKE_<LANG>_INCLUDE_WHAT_YOU_USE
+---------------------------------
+
+.. versionadded:: 3.3
+
+Default value for :prop_tgt:`<LANG>_INCLUDE_WHAT_YOU_USE` target property.
+This variable is used to initialize the property on each target as it is
+created.  This is done only when ``<LANG>`` is ``C`` or ``CXX``.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_LIBRARY_ARCHITECTURE.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_LIBRARY_ARCHITECTURE.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LANG_LIBRARY_ARCHITECTURE.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LANG_LIBRARY_ARCHITECTURE.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_LINKER_LAUNCHER.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_LINKER_LAUNCHER.rst
new file mode 100644
index 0000000..b76b939
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_LINKER_LAUNCHER.rst
@@ -0,0 +1,11 @@
+CMAKE_<LANG>_LINKER_LAUNCHER
+----------------------------
+
+.. versionadded:: 3.21
+
+Default value for :prop_tgt:`<LANG>_LINKER_LAUNCHER` target property. This
+variable is used to initialize the property on each target as it is created.
+This is done only when ``<LANG>`` is ``C``, ``CXX``, ``OBJC``, or ``OBJCXX``.
+
+This variable is initialized to the :envvar:`CMAKE_<LANG>_LINKER_LAUNCHER`
+environment variable if it is set.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_LINKER_PREFERENCE.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_LINKER_PREFERENCE.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LANG_LINKER_PREFERENCE.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LANG_LINKER_PREFERENCE.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_LINKER_PREFERENCE_PROPAGATES.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_LINKER_PREFERENCE_PROPAGATES.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LANG_LINKER_PREFERENCE_PROPAGATES.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LANG_LINKER_PREFERENCE_PROPAGATES.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_LINKER_WRAPPER_FLAG.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_LINKER_WRAPPER_FLAG.rst
new file mode 100644
index 0000000..471c351
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_LINKER_WRAPPER_FLAG.rst
@@ -0,0 +1,41 @@
+CMAKE_<LANG>_LINKER_WRAPPER_FLAG
+--------------------------------
+
+.. versionadded:: 3.13
+
+Defines the syntax of compiler driver option to pass options to the linker
+tool. It will be used to translate the ``LINKER:`` prefix in the link options
+(see :command:`add_link_options` and :command:`target_link_options`).
+
+This variable holds a :ref:`semicolon-separated list <CMake Language Lists>` of tokens.
+If a space (i.e. " ") is specified as last token, flag and ``LINKER:``
+arguments will be specified as separate arguments to the compiler driver.
+The :variable:`CMAKE_<LANG>_LINKER_WRAPPER_FLAG_SEP` variable can be specified
+to manage concatenation of arguments.
+
+For example, for ``Clang`` we have:
+
+.. code-block:: cmake
+
+  set (CMAKE_C_LINKER_WRAPPER_FLAG "-Xlinker" " ")
+
+Specifying ``"LINKER:-z,defs"`` will be transformed in
+``-Xlinker -z -Xlinker defs``.
+
+For ``GNU GCC``:
+
+.. code-block:: cmake
+
+  set (CMAKE_C_LINKER_WRAPPER_FLAG "-Wl,")
+  set (CMAKE_C_LINKER_WRAPPER_FLAG_SEP ",")
+
+Specifying ``"LINKER:-z,defs"`` will be transformed in ``-Wl,-z,defs``.
+
+And for ``SunPro``:
+
+.. code-block:: cmake
+
+  set (CMAKE_C_LINKER_WRAPPER_FLAG "-Qoption" "ld" " ")
+  set (CMAKE_C_LINKER_WRAPPER_FLAG_SEP ",")
+
+Specifying ``"LINKER:-z,defs"`` will be transformed in ``-Qoption ld -z,defs``.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_LINKER_WRAPPER_FLAG_SEP.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_LINKER_WRAPPER_FLAG_SEP.rst
new file mode 100644
index 0000000..a3895af
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_LINKER_WRAPPER_FLAG_SEP.rst
@@ -0,0 +1,11 @@
+CMAKE_<LANG>_LINKER_WRAPPER_FLAG_SEP
+------------------------------------
+
+.. versionadded:: 3.13
+
+This variable is used with :variable:`CMAKE_<LANG>_LINKER_WRAPPER_FLAG`
+variable to format ``LINKER:`` prefix in the link options
+(see :command:`add_link_options` and :command:`target_link_options`).
+
+When specified, arguments of the ``LINKER:`` prefix will be concatenated using
+this value as separator.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_LINK_EXECUTABLE.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_LINK_EXECUTABLE.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LANG_LINK_EXECUTABLE.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LANG_LINK_EXECUTABLE.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_LINK_LIBRARY_FILE_FLAG.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_LINK_LIBRARY_FILE_FLAG.rst
new file mode 100644
index 0000000..23ece88
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_LINK_LIBRARY_FILE_FLAG.rst
@@ -0,0 +1,10 @@
+CMAKE_<LANG>_LINK_LIBRARY_FILE_FLAG
+-----------------------------------
+
+.. versionadded:: 3.16
+
+Language-specific flag to be used to link a library specified by
+a path to its file.
+
+The flag will be used before a library file path is given to the
+linker.  This is needed only on very few platforms.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_LINK_LIBRARY_FLAG.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_LINK_LIBRARY_FLAG.rst
new file mode 100644
index 0000000..0f528db
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_LINK_LIBRARY_FLAG.rst
@@ -0,0 +1,9 @@
+CMAKE_<LANG>_LINK_LIBRARY_FLAG
+------------------------------
+
+.. versionadded:: 3.16
+
+Flag to be used to link a library into a shared library or executable.
+
+This flag will be used to specify a library to link to a shared library or an
+executable for the specific language.  On most compilers this is ``-l``.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_LINK_LIBRARY_SUFFIX.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_LINK_LIBRARY_SUFFIX.rst
new file mode 100644
index 0000000..359e29f
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_LINK_LIBRARY_SUFFIX.rst
@@ -0,0 +1,8 @@
+CMAKE_<LANG>_LINK_LIBRARY_SUFFIX
+--------------------------------
+
+.. versionadded:: 3.16
+
+Language-specific suffix for libraries that you link to.
+
+The suffix to use for the end of a library filename, ``.lib`` on Windows.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_LINK_WHAT_YOU_USE_FLAG.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_LINK_WHAT_YOU_USE_FLAG.rst
new file mode 100644
index 0000000..5004530
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_LINK_WHAT_YOU_USE_FLAG.rst
@@ -0,0 +1,9 @@
+CMAKE_<LANG>_LINK_WHAT_YOU_USE_FLAG
+-----------------------------------
+
+.. versionadded:: 3.22
+
+Linker flag to be used to configure linker so that all specified libraries on
+the command line will be linked into the target.
+
+See also variable :variable:`CMAKE_LINK_WHAT_YOU_USE_CHECK`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_OUTPUT_EXTENSION.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_OUTPUT_EXTENSION.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LANG_OUTPUT_EXTENSION.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LANG_OUTPUT_EXTENSION.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_PLATFORM_ID.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_PLATFORM_ID.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LANG_PLATFORM_ID.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LANG_PLATFORM_ID.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_SIMULATE_ID.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_SIMULATE_ID.rst
new file mode 100644
index 0000000..3226352
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_SIMULATE_ID.rst
@@ -0,0 +1,13 @@
+CMAKE_<LANG>_SIMULATE_ID
+------------------------
+
+Identification string of the "simulated" compiler.
+
+Some compilers simulate other compilers to serve as drop-in
+replacements.  When CMake detects such a compiler it sets this
+variable to what would have been the :variable:`CMAKE_<LANG>_COMPILER_ID` for
+the simulated compiler.
+
+.. note::
+  In other words, this variable describes the ABI compatibility
+  of the generated code.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_SIMULATE_VERSION.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_SIMULATE_VERSION.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LANG_SIMULATE_VERSION.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LANG_SIMULATE_VERSION.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_SIZEOF_DATA_PTR.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_SIZEOF_DATA_PTR.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LANG_SIZEOF_DATA_PTR.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LANG_SIZEOF_DATA_PTR.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_SOURCE_FILE_EXTENSIONS.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_SOURCE_FILE_EXTENSIONS.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LANG_SOURCE_FILE_EXTENSIONS.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LANG_SOURCE_FILE_EXTENSIONS.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_STANDARD.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_STANDARD.rst
new file mode 100644
index 0000000..0c41e19
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_STANDARD.rst
@@ -0,0 +1,19 @@
+CMAKE_<LANG>_STANDARD
+---------------------
+
+The variations are:
+
+* :variable:`CMAKE_C_STANDARD`
+* :variable:`CMAKE_CXX_STANDARD`
+* :variable:`CMAKE_CUDA_STANDARD`
+* :variable:`CMAKE_HIP_STANDARD`
+* :variable:`CMAKE_OBJC_STANDARD`
+* :variable:`CMAKE_OBJCXX_STANDARD`
+
+Default values for :prop_tgt:`<LANG>_STANDARD` target properties if set when a
+target is created.
+
+For supported CMake versions see the respective pages.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_STANDARD_DEFAULT.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_STANDARD_DEFAULT.rst
new file mode 100644
index 0000000..eb63d20
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_STANDARD_DEFAULT.rst
@@ -0,0 +1,7 @@
+CMAKE_<LANG>_STANDARD_DEFAULT
+-----------------------------
+
+.. versionadded:: 3.9
+
+The compiler's default standard for the language ``<LANG>``. Empty if the
+compiler has no conception of standard levels.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_STANDARD_INCLUDE_DIRECTORIES.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_STANDARD_INCLUDE_DIRECTORIES.rst
new file mode 100644
index 0000000..24aca8b
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_STANDARD_INCLUDE_DIRECTORIES.rst
@@ -0,0 +1,16 @@
+CMAKE_<LANG>_STANDARD_INCLUDE_DIRECTORIES
+-----------------------------------------
+
+.. versionadded:: 3.6
+
+Include directories to be used for every source file compiled with
+the ``<LANG>`` compiler.  This is meant for specification of system
+include directories needed by the language for the current platform.
+The directories always appear at the end of the include path passed
+to the compiler.
+
+This variable should not be set by project code.  It is meant to be set by
+CMake's platform information modules for the current toolchain, or by a
+toolchain file when used with :variable:`CMAKE_TOOLCHAIN_FILE`.
+
+See also :variable:`CMAKE_<LANG>_STANDARD_LIBRARIES`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_STANDARD_LIBRARIES.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_STANDARD_LIBRARIES.rst
new file mode 100644
index 0000000..d5f3351
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_STANDARD_LIBRARIES.rst
@@ -0,0 +1,14 @@
+CMAKE_<LANG>_STANDARD_LIBRARIES
+-------------------------------
+
+.. versionadded:: 3.6
+
+Libraries linked into every executable and shared library linked
+for language ``<LANG>``.  This is meant for specification of system
+libraries needed by the language for the current platform.
+
+This variable should not be set by project code.  It is meant to be set by
+CMake's platform information modules for the current toolchain, or by a
+toolchain file when used with :variable:`CMAKE_TOOLCHAIN_FILE`.
+
+See also :variable:`CMAKE_<LANG>_STANDARD_INCLUDE_DIRECTORIES`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LANG_STANDARD_REQUIRED.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_STANDARD_REQUIRED.rst
new file mode 100644
index 0000000..d7fa9b6
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LANG_STANDARD_REQUIRED.rst
@@ -0,0 +1,19 @@
+CMAKE_<LANG>_STANDARD_REQUIRED
+------------------------------
+
+The variations are:
+
+* :variable:`CMAKE_C_STANDARD_REQUIRED`
+* :variable:`CMAKE_CXX_STANDARD_REQUIRED`
+* :variable:`CMAKE_CUDA_STANDARD_REQUIRED`
+* :variable:`CMAKE_HIP_STANDARD_REQUIRED`
+* :variable:`CMAKE_OBJC_STANDARD_REQUIRED`
+* :variable:`CMAKE_OBJCXX_STANDARD_REQUIRED`
+
+Default values for :prop_tgt:`<LANG>_STANDARD_REQUIRED` target properties if
+set when a target is created.
+
+For supported CMake versions see the respective pages.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LANG_VISIBILITY_PRESET.rst b/share/cmake-3.22/Help/variable/CMAKE_LANG_VISIBILITY_PRESET.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LANG_VISIBILITY_PRESET.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LANG_VISIBILITY_PRESET.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LIBRARY_ARCHITECTURE.rst b/share/cmake-3.22/Help/variable/CMAKE_LIBRARY_ARCHITECTURE.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LIBRARY_ARCHITECTURE.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LIBRARY_ARCHITECTURE.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LIBRARY_ARCHITECTURE_REGEX.rst b/share/cmake-3.22/Help/variable/CMAKE_LIBRARY_ARCHITECTURE_REGEX.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LIBRARY_ARCHITECTURE_REGEX.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LIBRARY_ARCHITECTURE_REGEX.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LIBRARY_OUTPUT_DIRECTORY.rst b/share/cmake-3.22/Help/variable/CMAKE_LIBRARY_OUTPUT_DIRECTORY.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LIBRARY_OUTPUT_DIRECTORY.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LIBRARY_OUTPUT_DIRECTORY.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LIBRARY_OUTPUT_DIRECTORY_CONFIG.rst b/share/cmake-3.22/Help/variable/CMAKE_LIBRARY_OUTPUT_DIRECTORY_CONFIG.rst
new file mode 100644
index 0000000..08f95c4
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LIBRARY_OUTPUT_DIRECTORY_CONFIG.rst
@@ -0,0 +1,11 @@
+CMAKE_LIBRARY_OUTPUT_DIRECTORY_<CONFIG>
+---------------------------------------
+
+.. versionadded:: 3.3
+
+Where to put all the :ref:`LIBRARY <Library Output Artifacts>`
+target files when built for a specific configuration.
+
+This variable is used to initialize the
+:prop_tgt:`LIBRARY_OUTPUT_DIRECTORY_<CONFIG>` property on all the targets.
+See that target property for additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LIBRARY_PATH.rst b/share/cmake-3.22/Help/variable/CMAKE_LIBRARY_PATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LIBRARY_PATH.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LIBRARY_PATH.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LIBRARY_PATH_FLAG.rst b/share/cmake-3.22/Help/variable/CMAKE_LIBRARY_PATH_FLAG.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LIBRARY_PATH_FLAG.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LIBRARY_PATH_FLAG.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LINK_DEF_FILE_FLAG.rst b/share/cmake-3.22/Help/variable/CMAKE_LINK_DEF_FILE_FLAG.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LINK_DEF_FILE_FLAG.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LINK_DEF_FILE_FLAG.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LINK_DEPENDS_NO_SHARED.rst b/share/cmake-3.22/Help/variable/CMAKE_LINK_DEPENDS_NO_SHARED.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LINK_DEPENDS_NO_SHARED.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LINK_DEPENDS_NO_SHARED.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LINK_DIRECTORIES_BEFORE.rst b/share/cmake-3.22/Help/variable/CMAKE_LINK_DIRECTORIES_BEFORE.rst
new file mode 100644
index 0000000..f120866
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LINK_DIRECTORIES_BEFORE.rst
@@ -0,0 +1,11 @@
+CMAKE_LINK_DIRECTORIES_BEFORE
+-----------------------------
+
+.. versionadded:: 3.13
+
+Whether to append or prepend directories by default in
+:command:`link_directories`.
+
+This variable affects the default behavior of the :command:`link_directories`
+command.  Setting this variable to ``ON`` is equivalent to using the ``BEFORE``
+option in all uses of that command.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LINK_INTERFACE_LIBRARIES.rst b/share/cmake-3.22/Help/variable/CMAKE_LINK_INTERFACE_LIBRARIES.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LINK_INTERFACE_LIBRARIES.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LINK_INTERFACE_LIBRARIES.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LINK_LIBRARY_FILE_FLAG.rst b/share/cmake-3.22/Help/variable/CMAKE_LINK_LIBRARY_FILE_FLAG.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LINK_LIBRARY_FILE_FLAG.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LINK_LIBRARY_FILE_FLAG.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LINK_LIBRARY_FLAG.rst b/share/cmake-3.22/Help/variable/CMAKE_LINK_LIBRARY_FLAG.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LINK_LIBRARY_FLAG.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LINK_LIBRARY_FLAG.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_LINK_LIBRARY_SUFFIX.rst b/share/cmake-3.22/Help/variable/CMAKE_LINK_LIBRARY_SUFFIX.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_LINK_LIBRARY_SUFFIX.rst
rename to share/cmake-3.22/Help/variable/CMAKE_LINK_LIBRARY_SUFFIX.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LINK_SEARCH_END_STATIC.rst b/share/cmake-3.22/Help/variable/CMAKE_LINK_SEARCH_END_STATIC.rst
new file mode 100644
index 0000000..e86f639
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LINK_SEARCH_END_STATIC.rst
@@ -0,0 +1,21 @@
+CMAKE_LINK_SEARCH_END_STATIC
+----------------------------
+
+.. versionadded:: 3.4
+
+End a link line such that static system libraries are used.
+
+Some linkers support switches such as ``-Bstatic`` and ``-Bdynamic`` to
+determine whether to use static or shared libraries for ``-lXXX`` options.
+CMake uses these options to set the link type for libraries whose full
+paths are not known or (in some cases) are in implicit link
+directories for the platform.  By default CMake adds an option at the
+end of the library list (if necessary) to set the linker search type
+back to its starting type.  This property switches the final linker
+search type to ``-Bstatic`` regardless of how it started.
+
+This variable is used to initialize the target property
+:prop_tgt:`LINK_SEARCH_END_STATIC` for all targets. If set, its
+value is also used by the :command:`try_compile` command.
+
+See also :variable:`CMAKE_LINK_SEARCH_START_STATIC`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LINK_SEARCH_START_STATIC.rst b/share/cmake-3.22/Help/variable/CMAKE_LINK_SEARCH_START_STATIC.rst
new file mode 100644
index 0000000..ab1837c
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LINK_SEARCH_START_STATIC.rst
@@ -0,0 +1,22 @@
+CMAKE_LINK_SEARCH_START_STATIC
+------------------------------
+
+.. versionadded:: 3.4
+
+Assume the linker looks for static libraries by default.
+
+Some linkers support switches such as ``-Bstatic`` and ``-Bdynamic`` to
+determine whether to use static or shared libraries for ``-lXXX`` options.
+CMake uses these options to set the link type for libraries whose full
+paths are not known or (in some cases) are in implicit link
+directories for the platform.  By default the linker search type is
+assumed to be ``-Bdynamic`` at the beginning of the library list.  This
+property switches the assumption to ``-Bstatic``.  It is intended for use
+when linking an executable statically (e.g.  with the GNU ``-static``
+option).
+
+This variable is used to initialize the target property
+:prop_tgt:`LINK_SEARCH_START_STATIC` for all targets.  If set, its
+value is also used by the :command:`try_compile` command.
+
+See also :variable:`CMAKE_LINK_SEARCH_END_STATIC`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LINK_WHAT_YOU_USE.rst b/share/cmake-3.22/Help/variable/CMAKE_LINK_WHAT_YOU_USE.rst
new file mode 100644
index 0000000..bca4519
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LINK_WHAT_YOU_USE.rst
@@ -0,0 +1,8 @@
+CMAKE_LINK_WHAT_YOU_USE
+-----------------------
+
+.. versionadded:: 3.7
+
+Default value for :prop_tgt:`LINK_WHAT_YOU_USE` target property.
+This variable is used to initialize the property on each target as it is
+created.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_LINK_WHAT_YOU_USE_CHECK.rst b/share/cmake-3.22/Help/variable/CMAKE_LINK_WHAT_YOU_USE_CHECK.rst
new file mode 100644
index 0000000..e626641
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_LINK_WHAT_YOU_USE_CHECK.rst
@@ -0,0 +1,10 @@
+CMAKE_LINK_WHAT_YOU_USE_CHECK
+-----------------------------
+
+.. versionadded:: 3.22
+
+Defines the command executed after the link step to check libraries usage.
+This check is currently only defined on ``ELF`` platforms with value
+``ldd -u -r``.
+
+See also :variable:`CMAKE_<LANG>_LINK_WHAT_YOU_USE_FLAG` variables.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_MACOSX_BUNDLE.rst b/share/cmake-3.22/Help/variable/CMAKE_MACOSX_BUNDLE.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_MACOSX_BUNDLE.rst
rename to share/cmake-3.22/Help/variable/CMAKE_MACOSX_BUNDLE.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_MACOSX_RPATH.rst b/share/cmake-3.22/Help/variable/CMAKE_MACOSX_RPATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_MACOSX_RPATH.rst
rename to share/cmake-3.22/Help/variable/CMAKE_MACOSX_RPATH.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_MAJOR_VERSION.rst b/share/cmake-3.22/Help/variable/CMAKE_MAJOR_VERSION.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_MAJOR_VERSION.rst
rename to share/cmake-3.22/Help/variable/CMAKE_MAJOR_VERSION.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_MAKE_PROGRAM.rst b/share/cmake-3.22/Help/variable/CMAKE_MAKE_PROGRAM.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_MAKE_PROGRAM.rst
rename to share/cmake-3.22/Help/variable/CMAKE_MAKE_PROGRAM.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_MAP_IMPORTED_CONFIG_CONFIG.rst b/share/cmake-3.22/Help/variable/CMAKE_MAP_IMPORTED_CONFIG_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_MAP_IMPORTED_CONFIG_CONFIG.rst
rename to share/cmake-3.22/Help/variable/CMAKE_MAP_IMPORTED_CONFIG_CONFIG.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_MATCH_COUNT.rst b/share/cmake-3.22/Help/variable/CMAKE_MATCH_COUNT.rst
new file mode 100644
index 0000000..deeec8b
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_MATCH_COUNT.rst
@@ -0,0 +1,11 @@
+CMAKE_MATCH_COUNT
+-----------------
+
+.. versionadded:: 3.2
+
+The number of matches with the last regular expression.
+
+When a regular expression match is used, CMake fills in
+:variable:`CMAKE_MATCH_<n>` variables with the match contents.
+The ``CMAKE_MATCH_COUNT`` variable holds the number of match
+expressions when these are filled.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_MATCH_n.rst b/share/cmake-3.22/Help/variable/CMAKE_MATCH_n.rst
new file mode 100644
index 0000000..a92788e
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_MATCH_n.rst
@@ -0,0 +1,12 @@
+CMAKE_MATCH_<n>
+---------------
+
+.. versionadded:: 3.9
+
+Capture group ``<n>`` matched by the last regular expression, for groups
+0 through 9.  Group 0 is the entire match.  Groups 1 through 9 are the
+subexpressions captured by ``()`` syntax.
+
+When a regular expression match is used, CMake fills in ``CMAKE_MATCH_<n>``
+variables with the match contents.  The :variable:`CMAKE_MATCH_COUNT`
+variable holds the number of match expressions when these are filled.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_MAXIMUM_RECURSION_DEPTH.rst b/share/cmake-3.22/Help/variable/CMAKE_MAXIMUM_RECURSION_DEPTH.rst
new file mode 100644
index 0000000..59c60d3
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_MAXIMUM_RECURSION_DEPTH.rst
@@ -0,0 +1,35 @@
+CMAKE_MAXIMUM_RECURSION_DEPTH
+-----------------------------
+
+.. versionadded:: 3.14
+
+Maximum recursion depth for CMake scripts. It is intended to be set on the
+command line with ``-DCMAKE_MAXIMUM_RECURSION_DEPTH=<x>``, or within
+``CMakeLists.txt`` by projects that require a large recursion depth. Projects
+that set this variable should provide the user with a way to override it. For
+example:
+
+.. code-block:: cmake
+
+  # About to perform deeply recursive actions
+  if(NOT CMAKE_MAXIMUM_RECURSION_DEPTH)
+    set(CMAKE_MAXIMUM_RECURSION_DEPTH 2000)
+  endif()
+
+If it is not set, or is set to a non-integer value, a sensible default limit is
+used. If the recursion limit is reached, the script terminates immediately with
+a fatal error.
+
+Calling any of the following commands increases the recursion depth:
+
+* :command:`include`
+* :command:`find_package`
+* :command:`add_subdirectory`
+* :command:`try_compile`
+* :command:`ctest_read_custom_files`
+* :command:`ctest_run_script` (unless ``NEW_PROCESS`` is specified)
+* User-defined :command:`function`'s and :command:`macro`'s (note that
+  :command:`function` and :command:`macro` themselves don't increase recursion
+  depth)
+* Reading or writing variables that are being watched by a
+  :command:`variable_watch`
diff --git a/share/cmake-3.22/Help/variable/CMAKE_MESSAGE_CONTEXT.rst b/share/cmake-3.22/Help/variable/CMAKE_MESSAGE_CONTEXT.rst
new file mode 100644
index 0000000..41ace43
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_MESSAGE_CONTEXT.rst
@@ -0,0 +1,64 @@
+CMAKE_MESSAGE_CONTEXT
+---------------------
+
+.. versionadded:: 3.17
+
+When enabled by the :manual:`cmake <cmake(1)>` ``--log-context`` command line
+option or the :variable:`CMAKE_MESSAGE_CONTEXT_SHOW` variable, the
+:command:`message` command converts the ``CMAKE_MESSAGE_CONTEXT`` list into a
+dot-separated string surrounded by square brackets and prepends it to each line
+for messages of log levels ``NOTICE`` and below.
+
+For logging contexts to work effectively, projects should generally
+``APPEND`` and ``POP_BACK`` an item to the current value of
+``CMAKE_MESSAGE_CONTEXT`` rather than replace it.
+Projects should not assume the message context at the top of the source tree
+is empty, as there are scenarios where the context might have already been set
+(e.g. hierarchical projects).
+
+.. warning::
+
+  Valid context names are restricted to anything that could be used
+  as a CMake variable name.  All names that begin with an underscore
+  or the string ``cmake_`` are also reserved for use by CMake and
+  should not be used by projects.
+
+Example:
+
+.. code-block:: cmake
+
+  function(bar)
+    list(APPEND CMAKE_MESSAGE_CONTEXT "bar")
+    message(VERBOSE "bar VERBOSE message")
+  endfunction()
+
+  function(baz)
+    list(APPEND CMAKE_MESSAGE_CONTEXT "baz")
+    message(DEBUG "baz DEBUG message")
+  endfunction()
+
+  function(foo)
+    list(APPEND CMAKE_MESSAGE_CONTEXT "foo")
+    bar()
+    message(TRACE "foo TRACE message")
+    baz()
+  endfunction()
+
+  list(APPEND CMAKE_MESSAGE_CONTEXT "top")
+
+  message(VERBOSE "Before `foo`")
+  foo()
+  message(VERBOSE "After `foo`")
+
+  list(POP_BACK CMAKE_MESSAGE_CONTEXT)
+
+
+Which results in the following output:
+
+.. code-block:: none
+
+  -- [top] Before `foo`
+  -- [top.foo.bar] bar VERBOSE message
+  -- [top.foo] foo TRACE message
+  -- [top.foo.baz] baz DEBUG message
+  -- [top] After `foo`
diff --git a/share/cmake-3.22/Help/variable/CMAKE_MESSAGE_CONTEXT_SHOW.rst b/share/cmake-3.22/Help/variable/CMAKE_MESSAGE_CONTEXT_SHOW.rst
new file mode 100644
index 0000000..382e9ff
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_MESSAGE_CONTEXT_SHOW.rst
@@ -0,0 +1,17 @@
+CMAKE_MESSAGE_CONTEXT_SHOW
+--------------------------
+
+.. versionadded:: 3.17
+
+Setting this variable to true enables showing a context with each line
+logged by the :command:`message` command (see :variable:`CMAKE_MESSAGE_CONTEXT`
+for how the context itself is specified).
+
+This variable is an alternative to providing the ``--log-context`` option
+on the :manual:`cmake <cmake(1)>` command line.  Whereas the command line
+option will apply only to that one CMake run, setting
+``CMAKE_MESSAGE_CONTEXT_SHOW`` to true as a cache variable will ensure that
+subsequent CMake runs will continue to show the message context.
+
+Projects should not set ``CMAKE_MESSAGE_CONTEXT_SHOW``.  It is intended for
+users so that they may control whether or not to include context with messages.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_MESSAGE_INDENT.rst b/share/cmake-3.22/Help/variable/CMAKE_MESSAGE_INDENT.rst
new file mode 100644
index 0000000..c6263d2
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_MESSAGE_INDENT.rst
@@ -0,0 +1,34 @@
+CMAKE_MESSAGE_INDENT
+--------------------
+
+.. versionadded:: 3.16
+
+The :command:`message` command joins the strings from this list and for
+log levels of ``NOTICE`` and below, it prepends the resultant string to
+each line of the message.
+
+Example:
+
+.. code-block:: cmake
+
+  list(APPEND listVar one two three)
+
+  message(VERBOSE [[Collected items in the "listVar":]])
+  list(APPEND CMAKE_MESSAGE_INDENT "  ")
+
+  foreach(item IN LISTS listVar)
+    message(VERBOSE ${item})
+  endforeach()
+
+  list(POP_BACK CMAKE_MESSAGE_INDENT)
+  message(VERBOSE "No more indent")
+
+Which results in the following output:
+
+.. code-block:: none
+
+  -- Collected items in the "listVar":
+  --   one
+  --   two
+  --   three
+  -- No more indent
diff --git a/share/cmake-3.22/Help/variable/CMAKE_MESSAGE_LOG_LEVEL.rst b/share/cmake-3.22/Help/variable/CMAKE_MESSAGE_LOG_LEVEL.rst
new file mode 100644
index 0000000..3b45d1d
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_MESSAGE_LOG_LEVEL.rst
@@ -0,0 +1,17 @@
+CMAKE_MESSAGE_LOG_LEVEL
+-----------------------
+
+.. versionadded:: 3.17
+
+When set, this variable specifies the logging level used by the
+:command:`message` command.  Valid values are the same as those for the
+``--log-level`` command line option of the :manual:`cmake(1)` program.
+If this variable is set and the ``--log-level`` command line option is
+given, the command line option takes precedence.
+
+The main advantage to using this variable is to make a log level persist
+between CMake runs.  Setting it as a cache variable will ensure that
+subsequent CMake runs will continue to use the chosen log level.
+
+Projects should not set this variable, it is intended for users so that
+they may control the log level according to their own needs.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_MFC_FLAG.rst b/share/cmake-3.22/Help/variable/CMAKE_MFC_FLAG.rst
new file mode 100644
index 0000000..118e9c6
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_MFC_FLAG.rst
@@ -0,0 +1,20 @@
+CMAKE_MFC_FLAG
+--------------
+
+Use the MFC library for an executable or dll.
+
+Enables the use of the Microsoft Foundation Classes (MFC).
+It should be set to ``1`` for the static MFC library, and
+``2`` for the shared MFC library.  This is used in Visual Studio
+project files.
+
+Usage example:
+
+.. code-block:: cmake
+
+  add_definitions(-D_AFXDLL)
+  set(CMAKE_MFC_FLAG 2)
+  add_executable(CMakeSetup WIN32 ${SRCS})
+
+Contents of ``CMAKE_MFC_FLAG`` may use
+:manual:`generator expressions <cmake-generator-expressions(7)>`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_MINIMUM_REQUIRED_VERSION.rst b/share/cmake-3.22/Help/variable/CMAKE_MINIMUM_REQUIRED_VERSION.rst
new file mode 100644
index 0000000..8d6b533
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_MINIMUM_REQUIRED_VERSION.rst
@@ -0,0 +1,6 @@
+CMAKE_MINIMUM_REQUIRED_VERSION
+------------------------------
+
+The ``<min>`` version of CMake given to the most recent call to the
+:command:`cmake_minimum_required(VERSION)` command in the current
+variable scope or any parent variable scope.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_MINOR_VERSION.rst b/share/cmake-3.22/Help/variable/CMAKE_MINOR_VERSION.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_MINOR_VERSION.rst
rename to share/cmake-3.22/Help/variable/CMAKE_MINOR_VERSION.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_MODULE_LINKER_FLAGS.rst b/share/cmake-3.22/Help/variable/CMAKE_MODULE_LINKER_FLAGS.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_MODULE_LINKER_FLAGS.rst
rename to share/cmake-3.22/Help/variable/CMAKE_MODULE_LINKER_FLAGS.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_MODULE_LINKER_FLAGS_CONFIG.rst b/share/cmake-3.22/Help/variable/CMAKE_MODULE_LINKER_FLAGS_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_MODULE_LINKER_FLAGS_CONFIG.rst
rename to share/cmake-3.22/Help/variable/CMAKE_MODULE_LINKER_FLAGS_CONFIG.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_MODULE_LINKER_FLAGS_CONFIG_INIT.rst b/share/cmake-3.22/Help/variable/CMAKE_MODULE_LINKER_FLAGS_CONFIG_INIT.rst
new file mode 100644
index 0000000..e8a6401
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_MODULE_LINKER_FLAGS_CONFIG_INIT.rst
@@ -0,0 +1,12 @@
+CMAKE_MODULE_LINKER_FLAGS_<CONFIG>_INIT
+---------------------------------------
+
+.. versionadded:: 3.7
+
+Value used to initialize the :variable:`CMAKE_MODULE_LINKER_FLAGS_<CONFIG>`
+cache entry the first time a build tree is configured.
+This variable is meant to be set by a :variable:`toolchain file
+<CMAKE_TOOLCHAIN_FILE>`.  CMake may prepend or append content to
+the value based on the environment and target platform.
+
+See also :variable:`CMAKE_MODULE_LINKER_FLAGS_INIT`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_MODULE_LINKER_FLAGS_INIT.rst b/share/cmake-3.22/Help/variable/CMAKE_MODULE_LINKER_FLAGS_INIT.rst
new file mode 100644
index 0000000..d59e9bf
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_MODULE_LINKER_FLAGS_INIT.rst
@@ -0,0 +1,13 @@
+CMAKE_MODULE_LINKER_FLAGS_INIT
+------------------------------
+
+.. versionadded:: 3.7
+
+Value used to initialize the :variable:`CMAKE_MODULE_LINKER_FLAGS`
+cache entry the first time a build tree is configured.
+This variable is meant to be set by a :variable:`toolchain file
+<CMAKE_TOOLCHAIN_FILE>`.  CMake may prepend or append content to
+the value based on the environment and target platform.
+
+See also the configuration-specific variable
+:variable:`CMAKE_MODULE_LINKER_FLAGS_<CONFIG>_INIT`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_MODULE_PATH.rst b/share/cmake-3.22/Help/variable/CMAKE_MODULE_PATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_MODULE_PATH.rst
rename to share/cmake-3.22/Help/variable/CMAKE_MODULE_PATH.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_MSVCIDE_RUN_PATH.rst b/share/cmake-3.22/Help/variable/CMAKE_MSVCIDE_RUN_PATH.rst
new file mode 100644
index 0000000..721ceaa
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_MSVCIDE_RUN_PATH.rst
@@ -0,0 +1,12 @@
+CMAKE_MSVCIDE_RUN_PATH
+----------------------
+
+.. versionadded:: 3.10
+
+Extra PATH locations that should be used when executing
+:command:`add_custom_command` or :command:`add_custom_target` when using the
+:generator:`Visual Studio 9 2008` (or above) generator. This allows
+for running commands and using dll's that the IDE environment is not aware of.
+
+If not set explicitly the value is initialized by the ``CMAKE_MSVCIDE_RUN_PATH``
+environment variable, if set, and otherwise left empty.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_MSVC_RUNTIME_LIBRARY.rst b/share/cmake-3.22/Help/variable/CMAKE_MSVC_RUNTIME_LIBRARY.rst
new file mode 100644
index 0000000..14806e6
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_MSVC_RUNTIME_LIBRARY.rst
@@ -0,0 +1,34 @@
+CMAKE_MSVC_RUNTIME_LIBRARY
+--------------------------
+
+.. versionadded:: 3.15
+
+Select the MSVC runtime library for use by compilers targeting the MSVC ABI.
+This variable is used to initialize the :prop_tgt:`MSVC_RUNTIME_LIBRARY`
+property on all targets as they are created.  It is also propagated by
+calls to the :command:`try_compile` command into the test project.
+
+The allowed values are:
+
+.. include:: ../prop_tgt/MSVC_RUNTIME_LIBRARY-VALUES.txt
+
+Use :manual:`generator expressions <cmake-generator-expressions(7)>` to
+support per-configuration specification.  For example, the code:
+
+.. code-block:: cmake
+
+  set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
+
+selects for all following targets a multi-threaded statically-linked runtime
+library with or without debug information depending on the configuration.
+
+If this variable is not set then the :prop_tgt:`MSVC_RUNTIME_LIBRARY` target
+property will not be set automatically.  If that property is not set then
+CMake uses the default value ``MultiThreaded$<$<CONFIG:Debug>:Debug>DLL``
+to select a MSVC runtime library.
+
+.. note::
+
+  This variable has effect only when policy :policy:`CMP0091` is set to ``NEW``
+  prior to the first :command:`project` or :command:`enable_language` command
+  that enables a language using a compiler targeting the MSVC ABI.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_NETRC.rst b/share/cmake-3.22/Help/variable/CMAKE_NETRC.rst
new file mode 100644
index 0000000..bddfca5
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_NETRC.rst
@@ -0,0 +1,13 @@
+CMAKE_NETRC
+-----------
+
+.. versionadded:: 3.11
+
+This variable is used to initialize the ``NETRC`` option for the
+:command:`file(DOWNLOAD)` and :command:`file(UPLOAD)` commands.
+See those commands for additional information.
+
+This variable is also used by the :module:`ExternalProject` and
+:module:`FetchContent` modules for internal calls to :command:`file(DOWNLOAD)`.
+
+The local option takes precedence over this variable.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_NETRC_FILE.rst b/share/cmake-3.22/Help/variable/CMAKE_NETRC_FILE.rst
new file mode 100644
index 0000000..af98170
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_NETRC_FILE.rst
@@ -0,0 +1,13 @@
+CMAKE_NETRC_FILE
+----------------
+
+.. versionadded:: 3.11
+
+This variable is used to initialize the ``NETRC_FILE`` option for the
+:command:`file(DOWNLOAD)` and :command:`file(UPLOAD)` commands.
+See those commands for additional information.
+
+This variable is also used by the :module:`ExternalProject` and
+:module:`FetchContent` modules for internal calls to :command:`file(DOWNLOAD)`.
+
+The local option takes precedence over this variable.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_NINJA_OUTPUT_PATH_PREFIX.rst b/share/cmake-3.22/Help/variable/CMAKE_NINJA_OUTPUT_PATH_PREFIX.rst
new file mode 100644
index 0000000..a8c4035
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_NINJA_OUTPUT_PATH_PREFIX.rst
@@ -0,0 +1,29 @@
+CMAKE_NINJA_OUTPUT_PATH_PREFIX
+------------------------------
+
+.. versionadded:: 3.6
+
+Set output files path prefix for the :generator:`Ninja` generator.
+
+Every output files listed in the generated ``build.ninja`` will be
+prefixed by the contents of this variable (a trailing slash is
+appended if missing).  This is useful when the generated ninja file is
+meant to be embedded as a ``subninja`` file into a *super* ninja
+project.  For example, a ninja build file generated with a command
+like::
+
+  cd top-build-dir/sub &&
+  cmake -G Ninja -DCMAKE_NINJA_OUTPUT_PATH_PREFIX=sub/ path/to/source
+
+can be embedded in ``top-build-dir/build.ninja`` with a directive like
+this::
+
+  subninja sub/build.ninja
+
+The ``auto-regeneration`` rule in ``top-build-dir/build.ninja`` must have an
+order-only dependency on ``sub/build.ninja``.
+
+.. note::
+  When ``CMAKE_NINJA_OUTPUT_PATH_PREFIX`` is set, the project generated
+  by CMake cannot be used as a standalone project.  No default targets
+  are specified.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_NOT_USING_CONFIG_FLAGS.rst b/share/cmake-3.22/Help/variable/CMAKE_NOT_USING_CONFIG_FLAGS.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_NOT_USING_CONFIG_FLAGS.rst
rename to share/cmake-3.22/Help/variable/CMAKE_NOT_USING_CONFIG_FLAGS.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_NO_BUILTIN_CHRPATH.rst b/share/cmake-3.22/Help/variable/CMAKE_NO_BUILTIN_CHRPATH.rst
new file mode 100644
index 0000000..b9b045e
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_NO_BUILTIN_CHRPATH.rst
@@ -0,0 +1,17 @@
+CMAKE_NO_BUILTIN_CHRPATH
+------------------------
+
+Do not use the builtin binary editor to fix runtime library search
+paths on installation.
+
+When an ELF or XCOFF binary needs to have a different runtime library
+search path after installation than it does in the build tree, CMake uses
+a builtin editor to change the runtime search path in the installed copy.
+If this variable is set to true then CMake will relink the binary before
+installation instead of using its builtin editor.
+
+.. versionadded:: 3.20
+
+  This variable also applies to XCOFF binaries' LIBPATH.  Prior to the
+  addition of the XCOFF editor in CMake 3.20, this variable applied only
+  to ELF binaries' RPATH/RUNPATH.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_NO_SYSTEM_FROM_IMPORTED.rst b/share/cmake-3.22/Help/variable/CMAKE_NO_SYSTEM_FROM_IMPORTED.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_NO_SYSTEM_FROM_IMPORTED.rst
rename to share/cmake-3.22/Help/variable/CMAKE_NO_SYSTEM_FROM_IMPORTED.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_OBJCXX_EXTENSIONS.rst b/share/cmake-3.22/Help/variable/CMAKE_OBJCXX_EXTENSIONS.rst
new file mode 100644
index 0000000..46736aa
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_OBJCXX_EXTENSIONS.rst
@@ -0,0 +1,10 @@
+CMAKE_OBJCXX_EXTENSIONS
+-----------------------
+
+.. versionadded:: 3.16
+
+Default value for :prop_tgt:`OBJCXX_EXTENSIONS` target property if set when a
+target is created.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_OBJCXX_STANDARD.rst b/share/cmake-3.22/Help/variable/CMAKE_OBJCXX_STANDARD.rst
new file mode 100644
index 0000000..0913382
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_OBJCXX_STANDARD.rst
@@ -0,0 +1,10 @@
+CMAKE_OBJCXX_STANDARD
+---------------------
+
+.. versionadded:: 3.16
+
+Default value for :prop_tgt:`OBJCXX_STANDARD` target property if set when a
+target is created.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_OBJCXX_STANDARD_REQUIRED.rst b/share/cmake-3.22/Help/variable/CMAKE_OBJCXX_STANDARD_REQUIRED.rst
new file mode 100644
index 0000000..9afc4ea
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_OBJCXX_STANDARD_REQUIRED.rst
@@ -0,0 +1,10 @@
+CMAKE_OBJCXX_STANDARD_REQUIRED
+------------------------------
+
+.. versionadded:: 3.16
+
+Default value for :prop_tgt:`OBJCXX_STANDARD_REQUIRED` target property if set
+when a target is created.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_OBJC_EXTENSIONS.rst b/share/cmake-3.22/Help/variable/CMAKE_OBJC_EXTENSIONS.rst
new file mode 100644
index 0000000..9df11f1
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_OBJC_EXTENSIONS.rst
@@ -0,0 +1,10 @@
+CMAKE_OBJC_EXTENSIONS
+---------------------
+
+.. versionadded:: 3.16
+
+Default value for :prop_tgt:`OBJC_EXTENSIONS` target property if set when a
+target is created.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_OBJC_STANDARD.rst b/share/cmake-3.22/Help/variable/CMAKE_OBJC_STANDARD.rst
new file mode 100644
index 0000000..0b9b63f
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_OBJC_STANDARD.rst
@@ -0,0 +1,10 @@
+CMAKE_OBJC_STANDARD
+-------------------
+
+.. versionadded:: 3.16
+
+Default value for :prop_tgt:`OBJC_STANDARD` target property if set when a
+target is created.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_OBJC_STANDARD_REQUIRED.rst b/share/cmake-3.22/Help/variable/CMAKE_OBJC_STANDARD_REQUIRED.rst
new file mode 100644
index 0000000..c74db55
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_OBJC_STANDARD_REQUIRED.rst
@@ -0,0 +1,10 @@
+CMAKE_OBJC_STANDARD_REQUIRED
+----------------------------
+
+.. versionadded:: 3.16
+
+Default value for :prop_tgt:`OBJC_STANDARD_REQUIRED` target property if set
+when a target is created.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features and a list of supported compilers.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_OBJECT_PATH_MAX.rst b/share/cmake-3.22/Help/variable/CMAKE_OBJECT_PATH_MAX.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_OBJECT_PATH_MAX.rst
rename to share/cmake-3.22/Help/variable/CMAKE_OBJECT_PATH_MAX.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_OPTIMIZE_DEPENDENCIES.rst b/share/cmake-3.22/Help/variable/CMAKE_OPTIMIZE_DEPENDENCIES.rst
new file mode 100644
index 0000000..0ffb902
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_OPTIMIZE_DEPENDENCIES.rst
@@ -0,0 +1,6 @@
+CMAKE_OPTIMIZE_DEPENDENCIES
+---------------------------
+
+.. versionadded:: 3.19
+
+Initializes the :prop_tgt:`OPTIMIZE_DEPENDENCIES` target property.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_OSX_ARCHITECTURES.rst b/share/cmake-3.22/Help/variable/CMAKE_OSX_ARCHITECTURES.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_OSX_ARCHITECTURES.rst
rename to share/cmake-3.22/Help/variable/CMAKE_OSX_ARCHITECTURES.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_OSX_DEPLOYMENT_TARGET.rst b/share/cmake-3.22/Help/variable/CMAKE_OSX_DEPLOYMENT_TARGET.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_OSX_DEPLOYMENT_TARGET.rst
rename to share/cmake-3.22/Help/variable/CMAKE_OSX_DEPLOYMENT_TARGET.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_OSX_SYSROOT.rst b/share/cmake-3.22/Help/variable/CMAKE_OSX_SYSROOT.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_OSX_SYSROOT.rst
rename to share/cmake-3.22/Help/variable/CMAKE_OSX_SYSROOT.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_OSX_VARIABLE.txt b/share/cmake-3.22/Help/variable/CMAKE_OSX_VARIABLE.txt
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_OSX_VARIABLE.txt
rename to share/cmake-3.22/Help/variable/CMAKE_OSX_VARIABLE.txt
diff --git a/share/cmake-3.18/Help/variable/CMAKE_PARENT_LIST_FILE.rst b/share/cmake-3.22/Help/variable/CMAKE_PARENT_LIST_FILE.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_PARENT_LIST_FILE.rst
rename to share/cmake-3.22/Help/variable/CMAKE_PARENT_LIST_FILE.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_PATCH_VERSION.rst b/share/cmake-3.22/Help/variable/CMAKE_PATCH_VERSION.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_PATCH_VERSION.rst
rename to share/cmake-3.22/Help/variable/CMAKE_PATCH_VERSION.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_PCH_INSTANTIATE_TEMPLATES.rst b/share/cmake-3.22/Help/variable/CMAKE_PCH_INSTANTIATE_TEMPLATES.rst
new file mode 100644
index 0000000..9867f17
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_PCH_INSTANTIATE_TEMPLATES.rst
@@ -0,0 +1,7 @@
+CMAKE_PCH_INSTANTIATE_TEMPLATES
+-------------------------------
+
+.. versionadded:: 3.19
+
+This variable is used to initialize the :prop_tgt:`PCH_INSTANTIATE_TEMPLATES`
+property of targets when they are created.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_PCH_WARN_INVALID.rst b/share/cmake-3.22/Help/variable/CMAKE_PCH_WARN_INVALID.rst
new file mode 100644
index 0000000..457a428
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_PCH_WARN_INVALID.rst
@@ -0,0 +1,7 @@
+CMAKE_PCH_WARN_INVALID
+----------------------
+
+.. versionadded:: 3.18
+
+This variable is used to initialize the :prop_tgt:`PCH_WARN_INVALID`
+property of targets when they are created.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_PDB_OUTPUT_DIRECTORY.rst b/share/cmake-3.22/Help/variable/CMAKE_PDB_OUTPUT_DIRECTORY.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_PDB_OUTPUT_DIRECTORY.rst
rename to share/cmake-3.22/Help/variable/CMAKE_PDB_OUTPUT_DIRECTORY.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_PDB_OUTPUT_DIRECTORY_CONFIG.rst b/share/cmake-3.22/Help/variable/CMAKE_PDB_OUTPUT_DIRECTORY_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_PDB_OUTPUT_DIRECTORY_CONFIG.rst
rename to share/cmake-3.22/Help/variable/CMAKE_PDB_OUTPUT_DIRECTORY_CONFIG.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_POLICY_DEFAULT_CMPNNNN.rst b/share/cmake-3.22/Help/variable/CMAKE_POLICY_DEFAULT_CMPNNNN.rst
new file mode 100644
index 0000000..d643fb8
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_POLICY_DEFAULT_CMPNNNN.rst
@@ -0,0 +1,24 @@
+CMAKE_POLICY_DEFAULT_CMP<NNNN>
+------------------------------
+
+Default for CMake Policy ``CMP<NNNN>`` when it is otherwise left unset.
+
+Commands :command:`cmake_minimum_required(VERSION)` and
+:command:`cmake_policy(VERSION)` by default leave policies introduced after
+the given version unset.  Set ``CMAKE_POLICY_DEFAULT_CMP<NNNN>`` to ``OLD``
+or ``NEW`` to specify the default for policy ``CMP<NNNN>``, where ``<NNNN>``
+is the policy number.
+
+This variable should not be set by a project in CMake code as a way to
+set its own policies; use :command:`cmake_policy(SET)` instead.  This
+variable is meant to externally set policies for which a project has
+not itself been updated:
+
+* Users running CMake may set this variable in the cache
+  (e.g. ``-DCMAKE_POLICY_DEFAULT_CMP<NNNN>=<OLD|NEW>``).  Set it to ``OLD``
+  to quiet a policy warning while using old behavior or to ``NEW`` to
+  try building the project with new behavior.
+
+* Projects may set this variable before a call to :command:`add_subdirectory`
+  that adds a third-party project in order to set its policies without
+  modifying third-party code.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_POLICY_WARNING_CMPNNNN.rst b/share/cmake-3.22/Help/variable/CMAKE_POLICY_WARNING_CMPNNNN.rst
new file mode 100644
index 0000000..0231668
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_POLICY_WARNING_CMPNNNN.rst
@@ -0,0 +1,42 @@
+CMAKE_POLICY_WARNING_CMP<NNNN>
+------------------------------
+
+Explicitly enable or disable the warning when CMake Policy ``CMP<NNNN>``
+has not been set explicitly by :command:`cmake_policy` or implicitly
+by :command:`cmake_minimum_required`. This is meaningful
+only for the policies that do not warn by default:
+
+* ``CMAKE_POLICY_WARNING_CMP0025`` controls the warning for
+  policy :policy:`CMP0025`.
+* ``CMAKE_POLICY_WARNING_CMP0047`` controls the warning for
+  policy :policy:`CMP0047`.
+* ``CMAKE_POLICY_WARNING_CMP0056`` controls the warning for
+  policy :policy:`CMP0056`.
+* ``CMAKE_POLICY_WARNING_CMP0060`` controls the warning for
+  policy :policy:`CMP0060`.
+* ``CMAKE_POLICY_WARNING_CMP0065`` controls the warning for
+  policy :policy:`CMP0065`.
+* ``CMAKE_POLICY_WARNING_CMP0066`` controls the warning for
+  policy :policy:`CMP0066`.
+* ``CMAKE_POLICY_WARNING_CMP0067`` controls the warning for
+  policy :policy:`CMP0067`.
+* ``CMAKE_POLICY_WARNING_CMP0082`` controls the warning for
+  policy :policy:`CMP0082`.
+* ``CMAKE_POLICY_WARNING_CMP0089`` controls the warning for
+  policy :policy:`CMP0089`.
+* ``CMAKE_POLICY_WARNING_CMP0102`` controls the warning for
+  policy :policy:`CMP0102`.
+* ``CMAKE_POLICY_WARNING_CMP0112`` controls the warning for
+  policy :policy:`CMP0112`.
+* ``CMAKE_POLICY_WARNING_CMP0116`` controls the warning for
+  policy :policy:`CMP0116`.
+* ``CMAKE_POLICY_WARNING_CMP0126`` controls the warning for
+  policy :policy:`CMP0126`.
+* ``CMAKE_POLICY_WARNING_CMP0128`` controls the warning for
+  policy :policy:`CMP0128`.
+
+This variable should not be set by a project in CMake code.  Project
+developers running CMake may set this variable in their cache to
+enable the warning (e.g. ``-DCMAKE_POLICY_WARNING_CMP<NNNN>=ON``).
+Alternatively, running :manual:`cmake(1)` with the ``--debug-output``,
+``--trace``, or ``--trace-expand`` option will also enable the warning.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_POSITION_INDEPENDENT_CODE.rst b/share/cmake-3.22/Help/variable/CMAKE_POSITION_INDEPENDENT_CODE.rst
new file mode 100644
index 0000000..b010317
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_POSITION_INDEPENDENT_CODE.rst
@@ -0,0 +1,9 @@
+CMAKE_POSITION_INDEPENDENT_CODE
+-------------------------------
+
+Default value for :prop_tgt:`POSITION_INDEPENDENT_CODE` of targets.
+
+This variable is used to initialize the
+:prop_tgt:`POSITION_INDEPENDENT_CODE` property on all the targets.
+See that target property for additional information.  If set, its
+value is also used by the :command:`try_compile` command.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_PREFIX_PATH.rst b/share/cmake-3.22/Help/variable/CMAKE_PREFIX_PATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_PREFIX_PATH.rst
rename to share/cmake-3.22/Help/variable/CMAKE_PREFIX_PATH.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_PROGRAM_PATH.rst b/share/cmake-3.22/Help/variable/CMAKE_PROGRAM_PATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_PROGRAM_PATH.rst
rename to share/cmake-3.22/Help/variable/CMAKE_PROGRAM_PATH.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_PROJECT_DESCRIPTION.rst b/share/cmake-3.22/Help/variable/CMAKE_PROJECT_DESCRIPTION.rst
new file mode 100644
index 0000000..95cbe40
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_PROJECT_DESCRIPTION.rst
@@ -0,0 +1,37 @@
+CMAKE_PROJECT_DESCRIPTION
+-------------------------
+
+.. versionadded:: 3.9
+
+The description of the top level project.
+
+This variable holds the description of the project as specified in the top
+level CMakeLists.txt file by a :command:`project` command.  In the event that
+the top level CMakeLists.txt contains multiple :command:`project` calls,
+the most recently called one from that top level CMakeLists.txt will determine
+the value that ``CMAKE_PROJECT_DESCRIPTION`` contains.  For example, consider
+the following top level CMakeLists.txt:
+
+.. code-block:: cmake
+
+  cmake_minimum_required(VERSION 3.0)
+  project(First DESCRIPTION "I am First")
+  project(Second DESCRIPTION "I am Second")
+  add_subdirectory(sub)
+  project(Third DESCRIPTION "I am Third")
+
+And ``sub/CMakeLists.txt`` with the following contents:
+
+.. code-block:: cmake
+
+  project(SubProj DESCRIPTION "I am SubProj")
+  message("CMAKE_PROJECT_DESCRIPTION = ${CMAKE_PROJECT_DESCRIPTION}")
+
+The most recently seen :command:`project` command from the top level
+CMakeLists.txt would be ``project(Second ...)``, so this will print::
+
+  CMAKE_PROJECT_DESCRIPTION = I am Second
+
+To obtain the description from the most recent call to :command:`project` in
+the current directory scope or above, see the :variable:`PROJECT_DESCRIPTION`
+variable.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_PROJECT_HOMEPAGE_URL.rst b/share/cmake-3.22/Help/variable/CMAKE_PROJECT_HOMEPAGE_URL.rst
new file mode 100644
index 0000000..4c5debe
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_PROJECT_HOMEPAGE_URL.rst
@@ -0,0 +1,37 @@
+CMAKE_PROJECT_HOMEPAGE_URL
+--------------------------
+
+.. versionadded:: 3.12
+
+The homepage URL of the top level project.
+
+This variable holds the homepage URL of the project as specified in the top
+level CMakeLists.txt file by a :command:`project` command.  In the event that
+the top level CMakeLists.txt contains multiple :command:`project` calls,
+the most recently called one from that top level CMakeLists.txt will determine
+the value that ``CMAKE_PROJECT_HOMEPAGE_URL`` contains.  For example, consider
+the following top level CMakeLists.txt:
+
+.. code-block:: cmake
+
+  cmake_minimum_required(VERSION 3.0)
+  project(First HOMEPAGE_URL "http://first.example.com")
+  project(Second HOMEPAGE_URL "http://second.example.com")
+  add_subdirectory(sub)
+  project(Third HOMEPAGE_URL "http://third.example.com")
+
+And ``sub/CMakeLists.txt`` with the following contents:
+
+.. code-block:: cmake
+
+  project(SubProj HOMEPAGE_URL "http://subproj.example.com")
+  message("CMAKE_PROJECT_HOMEPAGE_URL = ${CMAKE_PROJECT_HOMEPAGE_URL}")
+
+The most recently seen :command:`project` command from the top level
+CMakeLists.txt would be ``project(Second ...)``, so this will print::
+
+  CMAKE_PROJECT_HOMEPAGE_URL = http://second.example.com
+
+To obtain the homepage URL from the most recent call to :command:`project` in
+the current directory scope or above, see the :variable:`PROJECT_HOMEPAGE_URL`
+variable.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_PROJECT_INCLUDE.rst b/share/cmake-3.22/Help/variable/CMAKE_PROJECT_INCLUDE.rst
new file mode 100644
index 0000000..41d9e5d
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_PROJECT_INCLUDE.rst
@@ -0,0 +1,12 @@
+CMAKE_PROJECT_INCLUDE
+---------------------
+
+.. versionadded:: 3.15
+
+A CMake language file or module to be included as the last step of all
+:command:`project` command calls.  This is intended for injecting custom code
+into project builds without modifying their source.
+
+See also the :variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE`,
+:variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE_BEFORE` and
+:variable:`CMAKE_PROJECT_INCLUDE_BEFORE` variables.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_PROJECT_INCLUDE_BEFORE.rst b/share/cmake-3.22/Help/variable/CMAKE_PROJECT_INCLUDE_BEFORE.rst
new file mode 100644
index 0000000..c2fd0f8
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_PROJECT_INCLUDE_BEFORE.rst
@@ -0,0 +1,12 @@
+CMAKE_PROJECT_INCLUDE_BEFORE
+----------------------------
+
+.. versionadded:: 3.15
+
+A CMake language file or module to be included as the first step of all
+:command:`project` command calls.  This is intended for injecting custom code
+into project builds without modifying their source.
+
+See also the :variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE`,
+:variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE_BEFORE` and
+:variable:`CMAKE_PROJECT_INCLUDE` variables.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_PROJECT_NAME.rst b/share/cmake-3.22/Help/variable/CMAKE_PROJECT_NAME.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_PROJECT_NAME.rst
rename to share/cmake-3.22/Help/variable/CMAKE_PROJECT_NAME.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_PROJECT_PROJECT-NAME_INCLUDE.rst b/share/cmake-3.22/Help/variable/CMAKE_PROJECT_PROJECT-NAME_INCLUDE.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_PROJECT_PROJECT-NAME_INCLUDE.rst
rename to share/cmake-3.22/Help/variable/CMAKE_PROJECT_PROJECT-NAME_INCLUDE.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_PROJECT_PROJECT-NAME_INCLUDE_BEFORE.rst b/share/cmake-3.22/Help/variable/CMAKE_PROJECT_PROJECT-NAME_INCLUDE_BEFORE.rst
new file mode 100644
index 0000000..39abb12
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_PROJECT_PROJECT-NAME_INCLUDE_BEFORE.rst
@@ -0,0 +1,13 @@
+CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE_BEFORE
+-------------------------------------------
+
+.. versionadded:: 3.17
+
+A CMake language file or module to be included as the first step of any
+:command:`project` command calls that specify ``<PROJECT-NAME>`` as the project
+name.  This is intended for injecting custom code into project builds without
+modifying their source.
+
+See also the :variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE`,
+:variable:`CMAKE_PROJECT_INCLUDE` and
+:variable:`CMAKE_PROJECT_INCLUDE_BEFORE` variables.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_PROJECT_VERSION.rst b/share/cmake-3.22/Help/variable/CMAKE_PROJECT_VERSION.rst
new file mode 100644
index 0000000..450c136
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_PROJECT_VERSION.rst
@@ -0,0 +1,37 @@
+CMAKE_PROJECT_VERSION
+---------------------
+
+.. versionadded:: 3.12
+
+The version of the top level project.
+
+This variable holds the version of the project as specified in the top
+level CMakeLists.txt file by a :command:`project` command.  In the event that
+the top level CMakeLists.txt contains multiple :command:`project` calls,
+the most recently called one from that top level CMakeLists.txt will determine
+the value that ``CMAKE_PROJECT_VERSION`` contains.  For example, consider
+the following top level CMakeLists.txt:
+
+.. code-block:: cmake
+
+  cmake_minimum_required(VERSION 3.0)
+  project(First VERSION 1.2.3)
+  project(Second VERSION 3.4.5)
+  add_subdirectory(sub)
+  project(Third VERSION 6.7.8)
+
+And ``sub/CMakeLists.txt`` with the following contents:
+
+.. code-block:: cmake
+
+  project(SubProj VERSION 1)
+  message("CMAKE_PROJECT_VERSION = ${CMAKE_PROJECT_VERSION}")
+
+The most recently seen :command:`project` command from the top level
+CMakeLists.txt would be ``project(Second ...)``, so this will print::
+
+  CMAKE_PROJECT_VERSION = 3.4.5
+
+To obtain the version from the most recent call to :command:`project` in
+the current directory scope or above, see the :variable:`PROJECT_VERSION`
+variable.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_PROJECT_VERSION_MAJOR.rst b/share/cmake-3.22/Help/variable/CMAKE_PROJECT_VERSION_MAJOR.rst
new file mode 100644
index 0000000..c7511e7
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_PROJECT_VERSION_MAJOR.rst
@@ -0,0 +1,11 @@
+CMAKE_PROJECT_VERSION_MAJOR
+---------------------------
+
+.. versionadded:: 3.12
+
+The major version of the top level project.
+
+This variable holds the major version of the project as specified in the top
+level CMakeLists.txt file by a :command:`project` command. Please see
+:variable:`CMAKE_PROJECT_VERSION` documentation for the behavior when
+multiple :command:`project` commands are used in the sources.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_PROJECT_VERSION_MINOR.rst b/share/cmake-3.22/Help/variable/CMAKE_PROJECT_VERSION_MINOR.rst
new file mode 100644
index 0000000..dd91dcf
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_PROJECT_VERSION_MINOR.rst
@@ -0,0 +1,11 @@
+CMAKE_PROJECT_VERSION_MINOR
+---------------------------
+
+.. versionadded:: 3.12
+
+The minor version of the top level project.
+
+This variable holds the minor version of the project as specified in the top
+level CMakeLists.txt file by a :command:`project` command. Please see
+:variable:`CMAKE_PROJECT_VERSION` documentation for the behavior when
+multiple :command:`project` commands are used in the sources.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_PROJECT_VERSION_PATCH.rst b/share/cmake-3.22/Help/variable/CMAKE_PROJECT_VERSION_PATCH.rst
new file mode 100644
index 0000000..61fd1f3
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_PROJECT_VERSION_PATCH.rst
@@ -0,0 +1,11 @@
+CMAKE_PROJECT_VERSION_PATCH
+---------------------------
+
+.. versionadded:: 3.12
+
+The patch version of the top level project.
+
+This variable holds the patch version of the project as specified in the top
+level CMakeLists.txt file by a :command:`project` command. Please see
+:variable:`CMAKE_PROJECT_VERSION` documentation for the behavior when
+multiple :command:`project` commands are used in the sources.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_PROJECT_VERSION_TWEAK.rst b/share/cmake-3.22/Help/variable/CMAKE_PROJECT_VERSION_TWEAK.rst
new file mode 100644
index 0000000..0deae8b
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_PROJECT_VERSION_TWEAK.rst
@@ -0,0 +1,11 @@
+CMAKE_PROJECT_VERSION_TWEAK
+---------------------------
+
+.. versionadded:: 3.12
+
+The tweak version of the top level project.
+
+This variable holds the tweak version of the project as specified in the top
+level CMakeLists.txt file by a :command:`project` command. Please see
+:variable:`CMAKE_PROJECT_VERSION` documentation for the behavior when
+multiple :command:`project` commands are used in the sources.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_RANLIB.rst b/share/cmake-3.22/Help/variable/CMAKE_RANLIB.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_RANLIB.rst
rename to share/cmake-3.22/Help/variable/CMAKE_RANLIB.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_REQUIRE_FIND_PACKAGE_PackageName.rst b/share/cmake-3.22/Help/variable/CMAKE_REQUIRE_FIND_PACKAGE_PackageName.rst
new file mode 100644
index 0000000..893f1ae
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_REQUIRE_FIND_PACKAGE_PackageName.rst
@@ -0,0 +1,14 @@
+CMAKE_REQUIRE_FIND_PACKAGE_<PackageName>
+----------------------------------------
+
+.. versionadded:: 3.22
+
+Variable for making :command:`find_package` call ``REQUIRED``.
+
+Every non-``REQUIRED`` :command:`find_package` call in a project can be
+turned into ``REQUIRED`` by setting the variable
+``CMAKE_REQUIRE_FIND_PACKAGE_<PackageName>`` to ``TRUE``.
+This can be used to assert assumptions about build environment and to
+ensure the build will fail early if they do not hold.
+
+See also the :variable:`CMAKE_DISABLE_FIND_PACKAGE_<PackageName>` variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_ROOT.rst b/share/cmake-3.22/Help/variable/CMAKE_ROOT.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_ROOT.rst
rename to share/cmake-3.22/Help/variable/CMAKE_ROOT.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_RULE_MESSAGES.rst b/share/cmake-3.22/Help/variable/CMAKE_RULE_MESSAGES.rst
new file mode 100644
index 0000000..39be2e9
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_RULE_MESSAGES.rst
@@ -0,0 +1,10 @@
+CMAKE_RULE_MESSAGES
+-------------------
+
+.. versionadded:: 3.13
+
+Specify whether to report a message for each make rule.
+
+If set in the cache it is used to initialize the value of the :prop_gbl:`RULE_MESSAGES` property.
+Users may disable the option in their local build tree to disable granular messages
+and report only as each target completes in Makefile builds.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_RUNTIME_OUTPUT_DIRECTORY.rst b/share/cmake-3.22/Help/variable/CMAKE_RUNTIME_OUTPUT_DIRECTORY.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_RUNTIME_OUTPUT_DIRECTORY.rst
rename to share/cmake-3.22/Help/variable/CMAKE_RUNTIME_OUTPUT_DIRECTORY.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_RUNTIME_OUTPUT_DIRECTORY_CONFIG.rst b/share/cmake-3.22/Help/variable/CMAKE_RUNTIME_OUTPUT_DIRECTORY_CONFIG.rst
new file mode 100644
index 0000000..c9c55c5
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_RUNTIME_OUTPUT_DIRECTORY_CONFIG.rst
@@ -0,0 +1,11 @@
+CMAKE_RUNTIME_OUTPUT_DIRECTORY_<CONFIG>
+---------------------------------------
+
+.. versionadded:: 3.3
+
+Where to put all the :ref:`RUNTIME <Runtime Output Artifacts>`
+target files when built for a specific configuration.
+
+This variable is used to initialize the
+:prop_tgt:`RUNTIME_OUTPUT_DIRECTORY_<CONFIG>` property on all the targets.
+See that target property for additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SCRIPT_MODE_FILE.rst b/share/cmake-3.22/Help/variable/CMAKE_SCRIPT_MODE_FILE.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_SCRIPT_MODE_FILE.rst
rename to share/cmake-3.22/Help/variable/CMAKE_SCRIPT_MODE_FILE.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SHARED_LIBRARY_PREFIX.rst b/share/cmake-3.22/Help/variable/CMAKE_SHARED_LIBRARY_PREFIX.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_SHARED_LIBRARY_PREFIX.rst
rename to share/cmake-3.22/Help/variable/CMAKE_SHARED_LIBRARY_PREFIX.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SHARED_LIBRARY_SUFFIX.rst b/share/cmake-3.22/Help/variable/CMAKE_SHARED_LIBRARY_SUFFIX.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_SHARED_LIBRARY_SUFFIX.rst
rename to share/cmake-3.22/Help/variable/CMAKE_SHARED_LIBRARY_SUFFIX.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SHARED_LINKER_FLAGS.rst b/share/cmake-3.22/Help/variable/CMAKE_SHARED_LINKER_FLAGS.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_SHARED_LINKER_FLAGS.rst
rename to share/cmake-3.22/Help/variable/CMAKE_SHARED_LINKER_FLAGS.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SHARED_LINKER_FLAGS_CONFIG.rst b/share/cmake-3.22/Help/variable/CMAKE_SHARED_LINKER_FLAGS_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_SHARED_LINKER_FLAGS_CONFIG.rst
rename to share/cmake-3.22/Help/variable/CMAKE_SHARED_LINKER_FLAGS_CONFIG.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_SHARED_LINKER_FLAGS_CONFIG_INIT.rst b/share/cmake-3.22/Help/variable/CMAKE_SHARED_LINKER_FLAGS_CONFIG_INIT.rst
new file mode 100644
index 0000000..7f3dec7
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_SHARED_LINKER_FLAGS_CONFIG_INIT.rst
@@ -0,0 +1,12 @@
+CMAKE_SHARED_LINKER_FLAGS_<CONFIG>_INIT
+---------------------------------------
+
+.. versionadded:: 3.7
+
+Value used to initialize the :variable:`CMAKE_SHARED_LINKER_FLAGS_<CONFIG>`
+cache entry the first time a build tree is configured.
+This variable is meant to be set by a :variable:`toolchain file
+<CMAKE_TOOLCHAIN_FILE>`.  CMake may prepend or append content to
+the value based on the environment and target platform.
+
+See also :variable:`CMAKE_SHARED_LINKER_FLAGS_INIT`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_SHARED_LINKER_FLAGS_INIT.rst b/share/cmake-3.22/Help/variable/CMAKE_SHARED_LINKER_FLAGS_INIT.rst
new file mode 100644
index 0000000..6d51afe
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_SHARED_LINKER_FLAGS_INIT.rst
@@ -0,0 +1,13 @@
+CMAKE_SHARED_LINKER_FLAGS_INIT
+------------------------------
+
+.. versionadded:: 3.7
+
+Value used to initialize the :variable:`CMAKE_SHARED_LINKER_FLAGS`
+cache entry the first time a build tree is configured.
+This variable is meant to be set by a :variable:`toolchain file
+<CMAKE_TOOLCHAIN_FILE>`.  CMake may prepend or append content to
+the value based on the environment and target platform.
+
+See also the configuration-specific variable
+:variable:`CMAKE_SHARED_LINKER_FLAGS_<CONFIG>_INIT`.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SHARED_MODULE_PREFIX.rst b/share/cmake-3.22/Help/variable/CMAKE_SHARED_MODULE_PREFIX.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_SHARED_MODULE_PREFIX.rst
rename to share/cmake-3.22/Help/variable/CMAKE_SHARED_MODULE_PREFIX.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SHARED_MODULE_SUFFIX.rst b/share/cmake-3.22/Help/variable/CMAKE_SHARED_MODULE_SUFFIX.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_SHARED_MODULE_SUFFIX.rst
rename to share/cmake-3.22/Help/variable/CMAKE_SHARED_MODULE_SUFFIX.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SIZEOF_VOID_P.rst b/share/cmake-3.22/Help/variable/CMAKE_SIZEOF_VOID_P.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_SIZEOF_VOID_P.rst
rename to share/cmake-3.22/Help/variable/CMAKE_SIZEOF_VOID_P.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SKIP_BUILD_RPATH.rst b/share/cmake-3.22/Help/variable/CMAKE_SKIP_BUILD_RPATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_SKIP_BUILD_RPATH.rst
rename to share/cmake-3.22/Help/variable/CMAKE_SKIP_BUILD_RPATH.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SKIP_INSTALL_ALL_DEPENDENCY.rst b/share/cmake-3.22/Help/variable/CMAKE_SKIP_INSTALL_ALL_DEPENDENCY.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_SKIP_INSTALL_ALL_DEPENDENCY.rst
rename to share/cmake-3.22/Help/variable/CMAKE_SKIP_INSTALL_ALL_DEPENDENCY.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SKIP_INSTALL_RPATH.rst b/share/cmake-3.22/Help/variable/CMAKE_SKIP_INSTALL_RPATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_SKIP_INSTALL_RPATH.rst
rename to share/cmake-3.22/Help/variable/CMAKE_SKIP_INSTALL_RPATH.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SKIP_INSTALL_RULES.rst b/share/cmake-3.22/Help/variable/CMAKE_SKIP_INSTALL_RULES.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_SKIP_INSTALL_RULES.rst
rename to share/cmake-3.22/Help/variable/CMAKE_SKIP_INSTALL_RULES.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SKIP_RPATH.rst b/share/cmake-3.22/Help/variable/CMAKE_SKIP_RPATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_SKIP_RPATH.rst
rename to share/cmake-3.22/Help/variable/CMAKE_SKIP_RPATH.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SOURCE_DIR.rst b/share/cmake-3.22/Help/variable/CMAKE_SOURCE_DIR.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_SOURCE_DIR.rst
rename to share/cmake-3.22/Help/variable/CMAKE_SOURCE_DIR.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_STAGING_PREFIX.rst b/share/cmake-3.22/Help/variable/CMAKE_STAGING_PREFIX.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_STAGING_PREFIX.rst
rename to share/cmake-3.22/Help/variable/CMAKE_STAGING_PREFIX.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_STATIC_LIBRARY_PREFIX.rst b/share/cmake-3.22/Help/variable/CMAKE_STATIC_LIBRARY_PREFIX.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_STATIC_LIBRARY_PREFIX.rst
rename to share/cmake-3.22/Help/variable/CMAKE_STATIC_LIBRARY_PREFIX.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_STATIC_LIBRARY_SUFFIX.rst b/share/cmake-3.22/Help/variable/CMAKE_STATIC_LIBRARY_SUFFIX.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_STATIC_LIBRARY_SUFFIX.rst
rename to share/cmake-3.22/Help/variable/CMAKE_STATIC_LIBRARY_SUFFIX.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_STATIC_LINKER_FLAGS.rst b/share/cmake-3.22/Help/variable/CMAKE_STATIC_LINKER_FLAGS.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_STATIC_LINKER_FLAGS.rst
rename to share/cmake-3.22/Help/variable/CMAKE_STATIC_LINKER_FLAGS.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_STATIC_LINKER_FLAGS_CONFIG.rst b/share/cmake-3.22/Help/variable/CMAKE_STATIC_LINKER_FLAGS_CONFIG.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_STATIC_LINKER_FLAGS_CONFIG.rst
rename to share/cmake-3.22/Help/variable/CMAKE_STATIC_LINKER_FLAGS_CONFIG.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_STATIC_LINKER_FLAGS_CONFIG_INIT.rst b/share/cmake-3.22/Help/variable/CMAKE_STATIC_LINKER_FLAGS_CONFIG_INIT.rst
new file mode 100644
index 0000000..5e65ef2
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_STATIC_LINKER_FLAGS_CONFIG_INIT.rst
@@ -0,0 +1,12 @@
+CMAKE_STATIC_LINKER_FLAGS_<CONFIG>_INIT
+---------------------------------------
+
+.. versionadded:: 3.7
+
+Value used to initialize the :variable:`CMAKE_STATIC_LINKER_FLAGS_<CONFIG>`
+cache entry the first time a build tree is configured.
+This variable is meant to be set by a :variable:`toolchain file
+<CMAKE_TOOLCHAIN_FILE>`.  CMake may prepend or append content to
+the value based on the environment and target platform.
+
+See also :variable:`CMAKE_STATIC_LINKER_FLAGS_INIT`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_STATIC_LINKER_FLAGS_INIT.rst b/share/cmake-3.22/Help/variable/CMAKE_STATIC_LINKER_FLAGS_INIT.rst
new file mode 100644
index 0000000..cbf681c
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_STATIC_LINKER_FLAGS_INIT.rst
@@ -0,0 +1,13 @@
+CMAKE_STATIC_LINKER_FLAGS_INIT
+------------------------------
+
+.. versionadded:: 3.7
+
+Value used to initialize the :variable:`CMAKE_STATIC_LINKER_FLAGS`
+cache entry the first time a build tree is configured.
+This variable is meant to be set by a :variable:`toolchain file
+<CMAKE_TOOLCHAIN_FILE>`.  CMake may prepend or append content to
+the value based on the environment and target platform.
+
+See also the configuration-specific variable
+:variable:`CMAKE_STATIC_LINKER_FLAGS_<CONFIG>_INIT`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_SUBLIME_TEXT_2_ENV_SETTINGS.rst b/share/cmake-3.22/Help/variable/CMAKE_SUBLIME_TEXT_2_ENV_SETTINGS.rst
new file mode 100644
index 0000000..5c1c8d1
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_SUBLIME_TEXT_2_ENV_SETTINGS.rst
@@ -0,0 +1,27 @@
+CMAKE_SUBLIME_TEXT_2_ENV_SETTINGS
+---------------------------------
+
+.. versionadded:: 3.8
+
+This variable contains a list of env vars as a list of tokens with the
+syntax ``var=value``.
+
+Example:
+
+.. code-block:: cmake
+
+  set(CMAKE_SUBLIME_TEXT_2_ENV_SETTINGS
+     "FOO=FOO1\;FOO2\;FOON"
+     "BAR=BAR1\;BAR2\;BARN"
+     "BAZ=BAZ1\;BAZ2\;BAZN"
+     "FOOBAR=FOOBAR1\;FOOBAR2\;FOOBARN"
+     "VALID="
+     )
+
+In case of malformed variables CMake will fail:
+
+.. code-block:: cmake
+
+  set(CMAKE_SUBLIME_TEXT_2_ENV_SETTINGS
+      "THIS_IS_NOT_VALID"
+      )
diff --git a/share/cmake-3.22/Help/variable/CMAKE_SUBLIME_TEXT_2_EXCLUDE_BUILD_TREE.rst b/share/cmake-3.22/Help/variable/CMAKE_SUBLIME_TEXT_2_EXCLUDE_BUILD_TREE.rst
new file mode 100644
index 0000000..28b0dbd
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_SUBLIME_TEXT_2_EXCLUDE_BUILD_TREE.rst
@@ -0,0 +1,9 @@
+CMAKE_SUBLIME_TEXT_2_EXCLUDE_BUILD_TREE
+---------------------------------------
+
+.. versionadded:: 3.8
+
+If this variable evaluates to ``ON`` at the end of the top-level
+``CMakeLists.txt`` file, the :generator:`Sublime Text 2` extra generator
+excludes the build tree from the ``.sublime-project`` if it is inside the
+source tree.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_SUPPRESS_REGENERATION.rst b/share/cmake-3.22/Help/variable/CMAKE_SUPPRESS_REGENERATION.rst
new file mode 100644
index 0000000..48490ff
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_SUPPRESS_REGENERATION.rst
@@ -0,0 +1,13 @@
+CMAKE_SUPPRESS_REGENERATION
+---------------------------
+
+.. versionadded:: 3.12
+
+If ``CMAKE_SUPPRESS_REGENERATION`` is ``OFF``, which is default, then CMake
+adds a special target on which all other targets depend that checks the build
+system and optionally re-runs CMake to regenerate the build system when
+the target specification source changes.
+
+If this variable evaluates to ``ON`` at the end of the top-level
+``CMakeLists.txt`` file, CMake will not add the regeneration target to the
+build system or perform any build system checks.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SYSROOT.rst b/share/cmake-3.22/Help/variable/CMAKE_SYSROOT.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_SYSROOT.rst
rename to share/cmake-3.22/Help/variable/CMAKE_SYSROOT.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_SYSROOT_COMPILE.rst b/share/cmake-3.22/Help/variable/CMAKE_SYSROOT_COMPILE.rst
new file mode 100644
index 0000000..4aea48e
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_SYSROOT_COMPILE.rst
@@ -0,0 +1,11 @@
+CMAKE_SYSROOT_COMPILE
+---------------------
+
+.. versionadded:: 3.9
+
+Path to pass to the compiler in the ``--sysroot`` flag when compiling source
+files.  This is the same as :variable:`CMAKE_SYSROOT` but is used only for
+compiling sources and not linking.
+
+This variable may only be set in a toolchain file specified by
+the :variable:`CMAKE_TOOLCHAIN_FILE` variable.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_SYSROOT_LINK.rst b/share/cmake-3.22/Help/variable/CMAKE_SYSROOT_LINK.rst
new file mode 100644
index 0000000..9749b7b
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_SYSROOT_LINK.rst
@@ -0,0 +1,11 @@
+CMAKE_SYSROOT_LINK
+------------------
+
+.. versionadded:: 3.9
+
+Path to pass to the compiler in the ``--sysroot`` flag when linking.  This is
+the same as :variable:`CMAKE_SYSROOT` but is used only for linking and not
+compiling sources.
+
+This variable may only be set in a toolchain file specified by
+the :variable:`CMAKE_TOOLCHAIN_FILE` variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SYSTEM.rst b/share/cmake-3.22/Help/variable/CMAKE_SYSTEM.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_SYSTEM.rst
rename to share/cmake-3.22/Help/variable/CMAKE_SYSTEM.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_SYSTEM_APPBUNDLE_PATH.rst b/share/cmake-3.22/Help/variable/CMAKE_SYSTEM_APPBUNDLE_PATH.rst
new file mode 100644
index 0000000..06a99a8
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_SYSTEM_APPBUNDLE_PATH.rst
@@ -0,0 +1,9 @@
+CMAKE_SYSTEM_APPBUNDLE_PATH
+---------------------------
+
+.. versionadded:: 3.4
+
+Search path for macOS application bundles used by the :command:`find_program`,
+and :command:`find_package` commands.  By default it contains the standard
+directories for the current system.  It is *not* intended to be modified by
+the project, use :variable:`CMAKE_APPBUNDLE_PATH` for this.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_SYSTEM_FRAMEWORK_PATH.rst b/share/cmake-3.22/Help/variable/CMAKE_SYSTEM_FRAMEWORK_PATH.rst
new file mode 100644
index 0000000..1a402c1
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_SYSTEM_FRAMEWORK_PATH.rst
@@ -0,0 +1,10 @@
+CMAKE_SYSTEM_FRAMEWORK_PATH
+---------------------------
+
+.. versionadded:: 3.4
+
+Search path for macOS frameworks used by the :command:`find_library`,
+:command:`find_package`, :command:`find_path`, and :command:`find_file`
+commands.  By default it contains the standard directories for the
+current system.  It is *not* intended to be modified by the project,
+use :variable:`CMAKE_FRAMEWORK_PATH` for this.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SYSTEM_IGNORE_PATH.rst b/share/cmake-3.22/Help/variable/CMAKE_SYSTEM_IGNORE_PATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_SYSTEM_IGNORE_PATH.rst
rename to share/cmake-3.22/Help/variable/CMAKE_SYSTEM_IGNORE_PATH.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SYSTEM_INCLUDE_PATH.rst b/share/cmake-3.22/Help/variable/CMAKE_SYSTEM_INCLUDE_PATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_SYSTEM_INCLUDE_PATH.rst
rename to share/cmake-3.22/Help/variable/CMAKE_SYSTEM_INCLUDE_PATH.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SYSTEM_LIBRARY_PATH.rst b/share/cmake-3.22/Help/variable/CMAKE_SYSTEM_LIBRARY_PATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_SYSTEM_LIBRARY_PATH.rst
rename to share/cmake-3.22/Help/variable/CMAKE_SYSTEM_LIBRARY_PATH.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SYSTEM_NAME.rst b/share/cmake-3.22/Help/variable/CMAKE_SYSTEM_NAME.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_SYSTEM_NAME.rst
rename to share/cmake-3.22/Help/variable/CMAKE_SYSTEM_NAME.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SYSTEM_PREFIX_PATH.rst b/share/cmake-3.22/Help/variable/CMAKE_SYSTEM_PREFIX_PATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_SYSTEM_PREFIX_PATH.rst
rename to share/cmake-3.22/Help/variable/CMAKE_SYSTEM_PREFIX_PATH.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_SYSTEM_PROCESSOR.rst b/share/cmake-3.22/Help/variable/CMAKE_SYSTEM_PROCESSOR.rst
new file mode 100644
index 0000000..ce16215
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_SYSTEM_PROCESSOR.rst
@@ -0,0 +1,13 @@
+CMAKE_SYSTEM_PROCESSOR
+----------------------
+
+When not cross-compiling, this variable has the same value as the
+:variable:`CMAKE_HOST_SYSTEM_PROCESSOR` variable.  In many cases,
+this will correspond to the target architecture for the build, but
+this is not guaranteed.  (E.g. on Windows, the host may be ``AMD64``
+even when using a MSVC ``cl`` compiler with a 32-bit target.)
+
+When cross-compiling, a :variable:`CMAKE_TOOLCHAIN_FILE` should set
+the ``CMAKE_SYSTEM_PROCESSOR`` variable to match target architecture
+that it specifies (via :variable:`CMAKE_<LANG>_COMPILER` and perhaps
+:variable:`CMAKE_<LANG>_COMPILER_TARGET`).
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SYSTEM_PROGRAM_PATH.rst b/share/cmake-3.22/Help/variable/CMAKE_SYSTEM_PROGRAM_PATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_SYSTEM_PROGRAM_PATH.rst
rename to share/cmake-3.22/Help/variable/CMAKE_SYSTEM_PROGRAM_PATH.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_SYSTEM_VERSION.rst b/share/cmake-3.22/Help/variable/CMAKE_SYSTEM_VERSION.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_SYSTEM_VERSION.rst
rename to share/cmake-3.22/Help/variable/CMAKE_SYSTEM_VERSION.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_Swift_LANGUAGE_VERSION.rst b/share/cmake-3.22/Help/variable/CMAKE_Swift_LANGUAGE_VERSION.rst
new file mode 100644
index 0000000..fce6fa7
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_Swift_LANGUAGE_VERSION.rst
@@ -0,0 +1,11 @@
+CMAKE_Swift_LANGUAGE_VERSION
+----------------------------
+
+.. versionadded:: 3.7
+
+Set to the Swift language version number.  If not set, the oldest legacy
+version known to be available in the host Xcode version is assumed:
+
+* Swift ``4.0`` for Xcode 10.2 and above.
+* Swift ``3.0`` for Xcode 8.3 and above.
+* Swift ``2.3`` for Xcode 8.2 and below.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_Swift_MODULE_DIRECTORY.rst b/share/cmake-3.22/Help/variable/CMAKE_Swift_MODULE_DIRECTORY.rst
new file mode 100644
index 0000000..6036c04
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_Swift_MODULE_DIRECTORY.rst
@@ -0,0 +1,10 @@
+CMAKE_Swift_MODULE_DIRECTORY
+----------------------------
+
+.. versionadded:: 3.15
+
+Swift module output directory.
+
+This variable is used to initialize the :prop_tgt:`Swift_MODULE_DIRECTORY`
+property on all the targets.  See the target property for additional
+information.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_Swift_NUM_THREADS.rst b/share/cmake-3.22/Help/variable/CMAKE_Swift_NUM_THREADS.rst
new file mode 100644
index 0000000..e1dafb0
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_Swift_NUM_THREADS.rst
@@ -0,0 +1,10 @@
+CMAKE_Swift_NUM_THREADS
+-----------------------
+
+.. versionadded:: 3.15.1
+
+Number of threads for parallel compilation for Swift targets.
+
+This variable controls the number of parallel jobs that the swift driver creates
+for building targets.  If not specified, it will default to the number of
+logical CPUs on the host.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_TLS_CAINFO.rst b/share/cmake-3.22/Help/variable/CMAKE_TLS_CAINFO.rst
new file mode 100644
index 0000000..07f6366
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_TLS_CAINFO.rst
@@ -0,0 +1,9 @@
+CMAKE_TLS_CAINFO
+----------------
+
+Specify the default value for the :command:`file(DOWNLOAD)` and
+:command:`file(UPLOAD)` commands' ``TLS_CAINFO`` options.
+It is unset by default.
+
+This variable is also used by the :module:`ExternalProject` and
+:module:`FetchContent` modules for internal calls to :command:`file(DOWNLOAD)`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_TLS_VERIFY.rst b/share/cmake-3.22/Help/variable/CMAKE_TLS_VERIFY.rst
new file mode 100644
index 0000000..b22f1ce
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_TLS_VERIFY.rst
@@ -0,0 +1,17 @@
+CMAKE_TLS_VERIFY
+----------------
+
+Specify the default value for the :command:`file(DOWNLOAD)` and
+:command:`file(UPLOAD)` commands' ``TLS_VERIFY`` options.
+If not set, the default is *off*.
+
+This variable is also used by the :module:`ExternalProject` and
+:module:`FetchContent` modules for internal calls to :command:`file(DOWNLOAD)`.
+
+TLS verification can help provide confidence that one is connecting
+to the desired server.  When downloading known content, one should
+also use file hashes to verify it.
+
+.. code-block:: cmake
+
+  set(CMAKE_TLS_VERIFY TRUE)
diff --git a/share/cmake-3.22/Help/variable/CMAKE_TOOLCHAIN_FILE.rst b/share/cmake-3.22/Help/variable/CMAKE_TOOLCHAIN_FILE.rst
new file mode 100644
index 0000000..ff8d59a
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_TOOLCHAIN_FILE.rst
@@ -0,0 +1,15 @@
+CMAKE_TOOLCHAIN_FILE
+--------------------
+
+Path to toolchain file supplied to :manual:`cmake(1)`.
+
+This variable is specified on the command line when cross-compiling with CMake.
+It is the path to a file which is read early in the CMake run and which
+specifies locations for compilers and toolchain utilities, and other target
+platform and compiler related information.
+
+Relative paths are allowed and are interpreted first as relative to the
+build directory, and if not found, relative to the source directory.
+
+This is initialized by the :envvar:`CMAKE_TOOLCHAIN_FILE` environment
+variable if it is set when a new build tree is first created.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_TRY_COMPILE_CONFIGURATION.rst b/share/cmake-3.22/Help/variable/CMAKE_TRY_COMPILE_CONFIGURATION.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_TRY_COMPILE_CONFIGURATION.rst
rename to share/cmake-3.22/Help/variable/CMAKE_TRY_COMPILE_CONFIGURATION.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_TRY_COMPILE_PLATFORM_VARIABLES.rst b/share/cmake-3.22/Help/variable/CMAKE_TRY_COMPILE_PLATFORM_VARIABLES.rst
new file mode 100644
index 0000000..d178513
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_TRY_COMPILE_PLATFORM_VARIABLES.rst
@@ -0,0 +1,28 @@
+CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
+------------------------------------
+
+.. versionadded:: 3.6
+
+List of variables that the :command:`try_compile` command source file signature
+must propagate into the test project in order to target the same platform as
+the host project.
+
+This variable should not be set by project code.  It is meant to be set by
+CMake's platform information modules for the current toolchain, or by a
+toolchain file when used with :variable:`CMAKE_TOOLCHAIN_FILE`.
+
+Variables meaningful to CMake, such as :variable:`CMAKE_<LANG>_FLAGS`, are
+propagated automatically.  The ``CMAKE_TRY_COMPILE_PLATFORM_VARIABLES``
+variable may be set to pass custom variables meaningful to a toolchain file.
+For example, a toolchain file may contain:
+
+.. code-block:: cmake
+
+  set(CMAKE_SYSTEM_NAME ...)
+  set(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES MY_CUSTOM_VARIABLE)
+  # ... use MY_CUSTOM_VARIABLE ...
+
+If a user passes ``-DMY_CUSTOM_VARIABLE=SomeValue`` to CMake then this
+setting will be made visible to the toolchain file both for the main
+project and for test projects generated by the :command:`try_compile`
+command source file signature.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_TRY_COMPILE_TARGET_TYPE.rst b/share/cmake-3.22/Help/variable/CMAKE_TRY_COMPILE_TARGET_TYPE.rst
new file mode 100644
index 0000000..b60539f
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_TRY_COMPILE_TARGET_TYPE.rst
@@ -0,0 +1,17 @@
+CMAKE_TRY_COMPILE_TARGET_TYPE
+-----------------------------
+
+.. versionadded:: 3.6
+
+Type of target generated for :command:`try_compile` calls using the
+source file signature.  Valid values are:
+
+``EXECUTABLE``
+  Use :command:`add_executable` to name the source file in the
+  generated project.  This is the default if no value is given.
+
+``STATIC_LIBRARY``
+  Use :command:`add_library` with the ``STATIC`` option to name the
+  source file in the generated project.  This avoids running the
+  linker and is intended for use with cross-compiling toolchains
+  that cannot link without custom flags or linker scripts.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_TWEAK_VERSION.rst b/share/cmake-3.22/Help/variable/CMAKE_TWEAK_VERSION.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_TWEAK_VERSION.rst
rename to share/cmake-3.22/Help/variable/CMAKE_TWEAK_VERSION.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_UNITY_BUILD.rst b/share/cmake-3.22/Help/variable/CMAKE_UNITY_BUILD.rst
new file mode 100644
index 0000000..54a781a
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_UNITY_BUILD.rst
@@ -0,0 +1,22 @@
+CMAKE_UNITY_BUILD
+-----------------
+
+.. versionadded:: 3.16
+
+This variable is used to initialize the :prop_tgt:`UNITY_BUILD`
+property of targets when they are created.  Setting it to true
+enables batch compilation of multiple sources within each target.
+This feature is known as a *Unity* or *Jumbo* build.
+
+Projects should not set this variable, it is intended as a developer
+control to be set on the :manual:`cmake(1)` command line or other
+equivalent methods.  The developer must have the ability to enable or
+disable unity builds according to the capabilities of their own machine
+and compiler.
+
+By default, this variable is not set, which will result in unity builds
+being disabled.
+
+.. note::
+  This option currently does not work well in combination with
+  the :variable:`CMAKE_EXPORT_COMPILE_COMMANDS` variable.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_UNITY_BUILD_BATCH_SIZE.rst b/share/cmake-3.22/Help/variable/CMAKE_UNITY_BUILD_BATCH_SIZE.rst
new file mode 100644
index 0000000..7733fe8
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_UNITY_BUILD_BATCH_SIZE.rst
@@ -0,0 +1,9 @@
+CMAKE_UNITY_BUILD_BATCH_SIZE
+----------------------------
+
+.. versionadded:: 3.16
+
+This variable is used to initialize the :prop_tgt:`UNITY_BUILD_BATCH_SIZE`
+property of targets when they are created.  It specifies the default upper
+limit on the number of source files that may be combined in any one unity
+source file when unity builds are enabled for a target.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_UNITY_BUILD_UNIQUE_ID.rst b/share/cmake-3.22/Help/variable/CMAKE_UNITY_BUILD_UNIQUE_ID.rst
new file mode 100644
index 0000000..64ef18a
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_UNITY_BUILD_UNIQUE_ID.rst
@@ -0,0 +1,8 @@
+CMAKE_UNITY_BUILD_UNIQUE_ID
+---------------------------
+
+.. versionadded:: 3.20
+
+This variable is used to initialize the :prop_tgt:`UNITY_BUILD_UNIQUE_ID`
+property of targets when they are created.  It specifies the name of the
+unique identifier generated per file in a unity build.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_USER_MAKE_RULES_OVERRIDE.rst b/share/cmake-3.22/Help/variable/CMAKE_USER_MAKE_RULES_OVERRIDE.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_USER_MAKE_RULES_OVERRIDE.rst
rename to share/cmake-3.22/Help/variable/CMAKE_USER_MAKE_RULES_OVERRIDE.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_USER_MAKE_RULES_OVERRIDE_LANG.rst b/share/cmake-3.22/Help/variable/CMAKE_USER_MAKE_RULES_OVERRIDE_LANG.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_USER_MAKE_RULES_OVERRIDE_LANG.rst
rename to share/cmake-3.22/Help/variable/CMAKE_USER_MAKE_RULES_OVERRIDE_LANG.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_USE_RELATIVE_PATHS.rst b/share/cmake-3.22/Help/variable/CMAKE_USE_RELATIVE_PATHS.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_USE_RELATIVE_PATHS.rst
rename to share/cmake-3.22/Help/variable/CMAKE_USE_RELATIVE_PATHS.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_VERBOSE_MAKEFILE.rst b/share/cmake-3.22/Help/variable/CMAKE_VERBOSE_MAKEFILE.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_VERBOSE_MAKEFILE.rst
rename to share/cmake-3.22/Help/variable/CMAKE_VERBOSE_MAKEFILE.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_VERSION.rst b/share/cmake-3.22/Help/variable/CMAKE_VERSION.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_VERSION.rst
rename to share/cmake-3.22/Help/variable/CMAKE_VERSION.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_VISIBILITY_INLINES_HIDDEN.rst b/share/cmake-3.22/Help/variable/CMAKE_VISIBILITY_INLINES_HIDDEN.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_VISIBILITY_INLINES_HIDDEN.rst
rename to share/cmake-3.22/Help/variable/CMAKE_VISIBILITY_INLINES_HIDDEN.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_VS_DEVENV_COMMAND.rst b/share/cmake-3.22/Help/variable/CMAKE_VS_DEVENV_COMMAND.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_VS_DEVENV_COMMAND.rst
rename to share/cmake-3.22/Help/variable/CMAKE_VS_DEVENV_COMMAND.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_VS_GLOBALS.rst b/share/cmake-3.22/Help/variable/CMAKE_VS_GLOBALS.rst
new file mode 100644
index 0000000..d4514fe
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_VS_GLOBALS.rst
@@ -0,0 +1,23 @@
+CMAKE_VS_GLOBALS
+----------------
+
+.. versionadded:: 3.13
+
+List of ``Key=Value`` records to be set per target as target properties
+:prop_tgt:`VS_GLOBAL_<variable>` with ``variable=Key`` and value ``Value``.
+
+For example:
+
+.. code-block:: cmake
+
+  set(CMAKE_VS_GLOBALS
+    "DefaultLanguage=en-US"
+    "MinimumVisualStudioVersion=14.0"
+    )
+
+will set properties ``VS_GLOBAL_DefaultLanguage`` to ``en-US`` and
+``VS_GLOBAL_MinimumVisualStudioVersion`` to ``14.0`` for all targets
+(except for ``INTERFACE`` libraries).
+
+This variable is meant to be set by a
+:variable:`toolchain file <CMAKE_TOOLCHAIN_FILE>`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD.rst b/share/cmake-3.22/Help/variable/CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD.rst
new file mode 100644
index 0000000..ace94e4
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD.rst
@@ -0,0 +1,10 @@
+CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD
+-----------------------------------------
+
+.. versionadded:: 3.3
+
+Include ``INSTALL`` target to default build.
+
+In Visual Studio solution, by default the ``INSTALL`` target will not be part
+of the default build. Setting this variable will enable the ``INSTALL`` target
+to be part of the default build.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_VS_INCLUDE_PACKAGE_TO_DEFAULT_BUILD.rst b/share/cmake-3.22/Help/variable/CMAKE_VS_INCLUDE_PACKAGE_TO_DEFAULT_BUILD.rst
new file mode 100644
index 0000000..ab4d0fa
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_VS_INCLUDE_PACKAGE_TO_DEFAULT_BUILD.rst
@@ -0,0 +1,10 @@
+CMAKE_VS_INCLUDE_PACKAGE_TO_DEFAULT_BUILD
+-----------------------------------------
+
+.. versionadded:: 3.8
+
+Include ``PACKAGE`` target to default build.
+
+In Visual Studio solution, by default the ``PACKAGE`` target will not be part
+of the default build. Setting this variable will enable the ``PACKAGE`` target
+to be part of the default build.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_VS_INTEL_Fortran_PROJECT_VERSION.rst b/share/cmake-3.22/Help/variable/CMAKE_VS_INTEL_Fortran_PROJECT_VERSION.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_VS_INTEL_Fortran_PROJECT_VERSION.rst
rename to share/cmake-3.22/Help/variable/CMAKE_VS_INTEL_Fortran_PROJECT_VERSION.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_VS_JUST_MY_CODE_DEBUGGING.rst b/share/cmake-3.22/Help/variable/CMAKE_VS_JUST_MY_CODE_DEBUGGING.rst
new file mode 100644
index 0000000..0a02a32
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_VS_JUST_MY_CODE_DEBUGGING.rst
@@ -0,0 +1,10 @@
+CMAKE_VS_JUST_MY_CODE_DEBUGGING
+-------------------------------
+
+.. versionadded:: 3.15
+
+Enable Just My Code with Visual Studio debugger.
+
+This variable is used to initialize the :prop_tgt:`VS_JUST_MY_CODE_DEBUGGING`
+property on all targets when they are created.  See that target property for
+additional information.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_VS_MSBUILD_COMMAND.rst b/share/cmake-3.22/Help/variable/CMAKE_VS_MSBUILD_COMMAND.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_VS_MSBUILD_COMMAND.rst
rename to share/cmake-3.22/Help/variable/CMAKE_VS_MSBUILD_COMMAND.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_VS_NsightTegra_VERSION.rst b/share/cmake-3.22/Help/variable/CMAKE_VS_NsightTegra_VERSION.rst
new file mode 100644
index 0000000..2982b39
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_VS_NsightTegra_VERSION.rst
@@ -0,0 +1,9 @@
+CMAKE_VS_NsightTegra_VERSION
+----------------------------
+
+.. versionadded:: 3.1
+
+When using a Visual Studio generator with the
+:variable:`CMAKE_SYSTEM_NAME` variable set to ``Android``,
+this variable contains the version number of the
+installed NVIDIA Nsight Tegra Visual Studio Edition.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_VS_PLATFORM_NAME.rst b/share/cmake-3.22/Help/variable/CMAKE_VS_PLATFORM_NAME.rst
new file mode 100644
index 0000000..7d08add
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_VS_PLATFORM_NAME.rst
@@ -0,0 +1,12 @@
+CMAKE_VS_PLATFORM_NAME
+----------------------
+
+.. versionadded:: 3.1
+
+Visual Studio target platform name used by the current generator.
+
+VS 8 and above allow project files to specify a target platform.
+CMake provides the name of the chosen platform in this variable.
+See the :variable:`CMAKE_GENERATOR_PLATFORM` variable for details.
+
+See also the :variable:`CMAKE_VS_PLATFORM_NAME_DEFAULT` variable.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_VS_PLATFORM_NAME_DEFAULT.rst b/share/cmake-3.22/Help/variable/CMAKE_VS_PLATFORM_NAME_DEFAULT.rst
new file mode 100644
index 0000000..6440174
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_VS_PLATFORM_NAME_DEFAULT.rst
@@ -0,0 +1,11 @@
+CMAKE_VS_PLATFORM_NAME_DEFAULT
+------------------------------
+
+.. versionadded:: 3.14.3
+
+Default for the Visual Studio target platform name for the current generator
+without considering the value of the :variable:`CMAKE_GENERATOR_PLATFORM`
+variable.  For :ref:`Visual Studio Generators` for VS 2017 and below this is
+always ``Win32``.  For VS 2019 and above this is based on the host platform.
+
+See also the :variable:`CMAKE_VS_PLATFORM_NAME` variable.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_VS_PLATFORM_TOOLSET.rst b/share/cmake-3.22/Help/variable/CMAKE_VS_PLATFORM_TOOLSET.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_VS_PLATFORM_TOOLSET.rst
rename to share/cmake-3.22/Help/variable/CMAKE_VS_PLATFORM_TOOLSET.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_VS_PLATFORM_TOOLSET_CUDA.rst b/share/cmake-3.22/Help/variable/CMAKE_VS_PLATFORM_TOOLSET_CUDA.rst
new file mode 100644
index 0000000..e66378d
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_VS_PLATFORM_TOOLSET_CUDA.rst
@@ -0,0 +1,16 @@
+CMAKE_VS_PLATFORM_TOOLSET_CUDA
+------------------------------
+
+.. versionadded:: 3.9
+
+NVIDIA CUDA Toolkit version whose Visual Studio toolset to use.
+
+The :ref:`Visual Studio Generators` for VS 2010 and above support using
+a CUDA toolset provided by a CUDA Toolkit.  The toolset version number
+may be specified by a field in :variable:`CMAKE_GENERATOR_TOOLSET` of
+the form ``cuda=8.0``. Or it is automatically detected if a path to
+a standalone CUDA directory is specified in the form ``cuda=C:\path\to\cuda``.
+If none is specified CMake will choose a default version.
+CMake provides the selected CUDA toolset version in this variable.
+The value may be empty if no CUDA Toolkit with Visual Studio integration
+is installed.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR.rst b/share/cmake-3.22/Help/variable/CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR.rst
new file mode 100644
index 0000000..a19e7e1
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR.rst
@@ -0,0 +1,17 @@
+CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR
+-----------------------------------------
+
+.. versionadded:: 3.16
+
+Path to standalone NVIDIA CUDA Toolkit (eg. extracted from installer).
+
+The :ref:`Visual Studio Generators` for VS 2010 and above support using
+a standalone (non-installed) NVIDIA CUDA toolkit.  The path
+may be specified by a field in :variable:`CMAKE_GENERATOR_TOOLSET` of
+the form ``cuda=C:\path\to\cuda``.  The given directory must at least
+contain the nvcc compiler in path ``.\bin`` and must provide Visual Studio
+integration files in path ``.\extras\visual_studio_integration\
+MSBuildExtensions\``. One can create a standalone CUDA toolkit directory by
+either opening a installer with 7zip or copying the files that are extracted
+by the running installer. The value may be empty if no path to a standalone
+CUDA Toolkit was specified.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE.rst b/share/cmake-3.22/Help/variable/CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE.rst
new file mode 100644
index 0000000..84d7212
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE.rst
@@ -0,0 +1,12 @@
+CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE
+-------------------------------------------
+
+.. versionadded:: 3.8
+
+Visual Studio preferred tool architecture.
+
+The :ref:`Visual Studio Generators` for VS 2013 and above support using
+either the 32-bit or 64-bit host toolchains by specifying a ``host=x86``
+or ``host=x64`` value in the :variable:`CMAKE_GENERATOR_TOOLSET` option.
+CMake provides the selected toolchain architecture preference in this
+variable (``x86``, ``x64``, or empty).
diff --git a/share/cmake-3.22/Help/variable/CMAKE_VS_PLATFORM_TOOLSET_VERSION.rst b/share/cmake-3.22/Help/variable/CMAKE_VS_PLATFORM_TOOLSET_VERSION.rst
new file mode 100644
index 0000000..c4369ee
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_VS_PLATFORM_TOOLSET_VERSION.rst
@@ -0,0 +1,33 @@
+CMAKE_VS_PLATFORM_TOOLSET_VERSION
+---------------------------------
+
+.. versionadded:: 3.12
+
+Visual Studio Platform Toolset version.
+
+The :ref:`Visual Studio Generators` for VS 2017 and above allow to
+select minor versions of the same toolset. The toolset version number
+may be specified by a field in :variable:`CMAKE_GENERATOR_TOOLSET` of
+the form ``version=14.11``. If none is specified CMake will choose a default
+toolset. The value may be empty if no minor version was selected and the
+default is used.
+
+If the value is not empty, it is the version number that MSBuild uses in
+its ``Microsoft.VCToolsVersion.*.props`` file names.
+
+.. versionadded:: 3.19.7
+
+   VS 16.9's toolset may also be specified as ``14.28.16.9`` because
+   VS 16.10 uses the file name ``Microsoft.VCToolsVersion.14.28.16.9.props``.
+
+Three-Component MSVC Toolset Versions
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.19.7
+
+The ``version=`` field may be given a three-component toolset version
+such as ``14.28.29910``, and CMake will convert it to the name used by
+MSBuild ``Microsoft.VCToolsVersion.*.props`` files.  This is useful
+to distinguish between VS 16.8's ``14.28.29333`` toolset and VS 16.9's
+``14.28.29910`` toolset.  It also matches ``vcvarsall``'s ``-vcvars_ver=``
+behavior.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_VS_SDK_EXCLUDE_DIRECTORIES.rst b/share/cmake-3.22/Help/variable/CMAKE_VS_SDK_EXCLUDE_DIRECTORIES.rst
new file mode 100644
index 0000000..969f328
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_VS_SDK_EXCLUDE_DIRECTORIES.rst
@@ -0,0 +1,6 @@
+CMAKE_VS_SDK_EXCLUDE_DIRECTORIES
+--------------------------------
+
+.. versionadded:: 3.12
+
+This variable allows to override Visual Studio default Exclude Directories.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_VS_SDK_EXECUTABLE_DIRECTORIES.rst b/share/cmake-3.22/Help/variable/CMAKE_VS_SDK_EXECUTABLE_DIRECTORIES.rst
new file mode 100644
index 0000000..7455e10
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_VS_SDK_EXECUTABLE_DIRECTORIES.rst
@@ -0,0 +1,6 @@
+CMAKE_VS_SDK_EXECUTABLE_DIRECTORIES
+-----------------------------------
+
+.. versionadded:: 3.12
+
+This variable allows to override Visual Studio default Executable Directories.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_VS_SDK_INCLUDE_DIRECTORIES.rst b/share/cmake-3.22/Help/variable/CMAKE_VS_SDK_INCLUDE_DIRECTORIES.rst
new file mode 100644
index 0000000..3f27aea
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_VS_SDK_INCLUDE_DIRECTORIES.rst
@@ -0,0 +1,6 @@
+CMAKE_VS_SDK_INCLUDE_DIRECTORIES
+--------------------------------
+
+.. versionadded:: 3.12
+
+This variable allows to override Visual Studio default Include Directories.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_VS_SDK_LIBRARY_DIRECTORIES.rst b/share/cmake-3.22/Help/variable/CMAKE_VS_SDK_LIBRARY_DIRECTORIES.rst
new file mode 100644
index 0000000..35e45a3
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_VS_SDK_LIBRARY_DIRECTORIES.rst
@@ -0,0 +1,6 @@
+CMAKE_VS_SDK_LIBRARY_DIRECTORIES
+--------------------------------
+
+.. versionadded:: 3.12
+
+This variable allows to override Visual Studio default Library Directories.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_VS_SDK_LIBRARY_WINRT_DIRECTORIES.rst b/share/cmake-3.22/Help/variable/CMAKE_VS_SDK_LIBRARY_WINRT_DIRECTORIES.rst
new file mode 100644
index 0000000..24b90b6
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_VS_SDK_LIBRARY_WINRT_DIRECTORIES.rst
@@ -0,0 +1,7 @@
+CMAKE_VS_SDK_LIBRARY_WINRT_DIRECTORIES
+--------------------------------------
+
+.. versionadded:: 3.12
+
+This variable allows to override Visual Studio default Library WinRT
+Directories.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_VS_SDK_REFERENCE_DIRECTORIES.rst b/share/cmake-3.22/Help/variable/CMAKE_VS_SDK_REFERENCE_DIRECTORIES.rst
new file mode 100644
index 0000000..00382fe
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_VS_SDK_REFERENCE_DIRECTORIES.rst
@@ -0,0 +1,6 @@
+CMAKE_VS_SDK_REFERENCE_DIRECTORIES
+----------------------------------
+
+.. versionadded:: 3.12
+
+This variable allows to override Visual Studio default Reference Directories.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_VS_SDK_SOURCE_DIRECTORIES.rst b/share/cmake-3.22/Help/variable/CMAKE_VS_SDK_SOURCE_DIRECTORIES.rst
new file mode 100644
index 0000000..b98c999
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_VS_SDK_SOURCE_DIRECTORIES.rst
@@ -0,0 +1,6 @@
+CMAKE_VS_SDK_SOURCE_DIRECTORIES
+-------------------------------
+
+.. versionadded:: 3.12
+
+This variable allows to override Visual Studio default Source Directories.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_VS_TARGET_FRAMEWORK_IDENTIFIER.rst b/share/cmake-3.22/Help/variable/CMAKE_VS_TARGET_FRAMEWORK_IDENTIFIER.rst
new file mode 100644
index 0000000..5ad5897
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_VS_TARGET_FRAMEWORK_IDENTIFIER.rst
@@ -0,0 +1,13 @@
+CMAKE_VS_TARGET_FRAMEWORK_IDENTIFIER
+------------------------------------
+
+.. versionadded:: 3.22
+
+Visual Studio target framework identifier.
+
+In some cases, the :ref:`Visual Studio Generators` may use an explicit value
+for the MSBuild ``TargetFrameworkIdentifier`` setting in ``.csproj`` files.
+CMake provides the chosen value in this variable.
+
+See also :variable:`CMAKE_VS_TARGET_FRAMEWORK_VERSION` and
+:variable:`CMAKE_VS_TARGET_FRAMEWORK_TARGETS_VERSION`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_VS_TARGET_FRAMEWORK_TARGETS_VERSION.rst b/share/cmake-3.22/Help/variable/CMAKE_VS_TARGET_FRAMEWORK_TARGETS_VERSION.rst
new file mode 100644
index 0000000..8dcb3a7
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_VS_TARGET_FRAMEWORK_TARGETS_VERSION.rst
@@ -0,0 +1,13 @@
+CMAKE_VS_TARGET_FRAMEWORK_TARGETS_VERSION
+-----------------------------------------
+
+.. versionadded:: 3.22
+
+Visual Studio target framework targets version.
+
+In some cases, the :ref:`Visual Studio Generators` may use an explicit value
+for the MSBuild ``TargetFrameworkTargetsVersion`` setting in ``.csproj`` files.
+CMake provides the chosen value in this variable.
+
+See also :variable:`CMAKE_VS_TARGET_FRAMEWORK_VERSION` and
+:variable:`CMAKE_VS_TARGET_FRAMEWORK_IDENTIFIER`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_VS_TARGET_FRAMEWORK_VERSION.rst b/share/cmake-3.22/Help/variable/CMAKE_VS_TARGET_FRAMEWORK_VERSION.rst
new file mode 100644
index 0000000..5489f79
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_VS_TARGET_FRAMEWORK_VERSION.rst
@@ -0,0 +1,17 @@
+CMAKE_VS_TARGET_FRAMEWORK_VERSION
+---------------------------------
+
+.. versionadded:: 3.22
+
+Visual Studio target framework version.
+
+In some cases, the :ref:`Visual Studio Generators` may use an explicit value
+for the MSBuild ``TargetFrameworkVersion`` setting in ``.csproj`` files.
+CMake provides the chosen value in this variable.
+
+See the :variable:`CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION` variable
+and :prop_tgt:`DOTNET_TARGET_FRAMEWORK_VERSION` target property to
+specify custom ``TargetFrameworkVersion`` values for project targets.
+
+See also :variable:`CMAKE_VS_TARGET_FRAMEWORK_IDENTIFIER` and
+:variable:`CMAKE_VS_TARGET_FRAMEWORK_TARGETS_VERSION`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION.rst b/share/cmake-3.22/Help/variable/CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION.rst
new file mode 100644
index 0000000..eb71049
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION.rst
@@ -0,0 +1,21 @@
+CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION
+----------------------------------------
+
+.. versionadded:: 3.4
+
+Visual Studio Windows Target Platform Version.
+
+When targeting Windows 10 and above Visual Studio 2015 and above support
+specification of a target Windows version to select a corresponding SDK.
+The :variable:`CMAKE_SYSTEM_VERSION` variable may be set to specify a
+version.  Otherwise CMake computes a default version based on the Windows
+SDK versions available.  The chosen Windows target version number is provided
+in ``CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION``.  If no Windows 10 SDK
+is available this value will be empty.
+
+One may set a ``CMAKE_WINDOWS_KITS_10_DIR`` *environment variable*
+to an absolute path to tell CMake to look for Windows 10 SDKs in
+a custom location.  The specified directory is expected to contain
+``Include/10.0.*`` directories.
+
+See also :variable:`CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION_MAXIMUM`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION_MAXIMUM.rst b/share/cmake-3.22/Help/variable/CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION_MAXIMUM.rst
new file mode 100644
index 0000000..d9f136c
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION_MAXIMUM.rst
@@ -0,0 +1,14 @@
+CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION_MAXIMUM
+------------------------------------------------
+
+.. versionadded:: 3.19
+
+Override the :ref:`Windows 10 SDK Maximum Version for VS 2015` and beyond.
+
+The :variable:`CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION_MAXIMUM` variable may
+be set to a false value (e.g. ``OFF``, ``FALSE``, or ``0``) or the SDK version
+to use as the maximum (e.g. ``10.0.14393.0``).  If unset, the default depends
+on which version of Visual Studio is targeted by the current generator.
+
+This can be used in conjunction with :variable:`CMAKE_SYSTEM_VERSION`, which
+CMake uses to select :variable:`CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION`.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_VS_WINRT_BY_DEFAULT.rst b/share/cmake-3.22/Help/variable/CMAKE_VS_WINRT_BY_DEFAULT.rst
new file mode 100644
index 0000000..9ded85f
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_VS_WINRT_BY_DEFAULT.rst
@@ -0,0 +1,20 @@
+CMAKE_VS_WINRT_BY_DEFAULT
+-------------------------
+
+.. versionadded:: 3.13
+
+Inform :ref:`Visual Studio Generators` for VS 2010 and above that the
+target platform enables WinRT compilation by default and it needs to
+be explicitly disabled if ``/ZW`` or :prop_tgt:`VS_WINRT_COMPONENT` is
+omitted (as opposed to enabling it when either of those options is
+present)
+
+This makes cmake configuration consistent in terms of WinRT among
+platforms - if you did not enable the WinRT compilation explicitly, it
+will be disabled (by either not enabling it or explicitly disabling it)
+
+Note: WinRT compilation is always explicitly disabled for C language
+source files, even if it is expliclty enabled for a project
+
+This variable is meant to be set by a
+:variable:`toolchain file <CMAKE_TOOLCHAIN_FILE>` for such platforms.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_WARN_DEPRECATED.rst b/share/cmake-3.22/Help/variable/CMAKE_WARN_DEPRECATED.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_WARN_DEPRECATED.rst
rename to share/cmake-3.22/Help/variable/CMAKE_WARN_DEPRECATED.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION.rst b/share/cmake-3.22/Help/variable/CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION.rst
rename to share/cmake-3.22/Help/variable/CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION.rst
diff --git a/share/cmake-3.18/Help/variable/CMAKE_WIN32_EXECUTABLE.rst b/share/cmake-3.22/Help/variable/CMAKE_WIN32_EXECUTABLE.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_WIN32_EXECUTABLE.rst
rename to share/cmake-3.22/Help/variable/CMAKE_WIN32_EXECUTABLE.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS.rst b/share/cmake-3.22/Help/variable/CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS.rst
new file mode 100644
index 0000000..7b01185
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS.rst
@@ -0,0 +1,8 @@
+CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS
+--------------------------------
+
+.. versionadded:: 3.4
+
+Default value for :prop_tgt:`WINDOWS_EXPORT_ALL_SYMBOLS` target property.
+This variable is used to initialize the property on each target as it is
+created.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_XCODE_ATTRIBUTE_an-attribute.rst b/share/cmake-3.22/Help/variable/CMAKE_XCODE_ATTRIBUTE_an-attribute.rst
new file mode 100644
index 0000000..ffa0a4c
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_XCODE_ATTRIBUTE_an-attribute.rst
@@ -0,0 +1,24 @@
+CMAKE_XCODE_ATTRIBUTE_<an-attribute>
+------------------------------------
+
+.. versionadded:: 3.1
+
+Set Xcode target attributes directly.
+
+Tell the :generator:`Xcode` generator to set ``<an-attribute>`` to a given
+value in the generated Xcode project.  Ignored on other generators.
+
+This offers low-level control over the generated Xcode project file.
+It is meant as a last resort for specifying settings that CMake does
+not otherwise have a way to control.  Although this can override a
+setting CMake normally produces on its own, doing so bypasses CMake's
+model of the project and can break things.
+
+See the :prop_tgt:`XCODE_ATTRIBUTE_<an-attribute>` target property
+to set attributes on a specific target.
+
+Contents of ``CMAKE_XCODE_ATTRIBUTE_<an-attribute>`` may use
+"generator expressions" with the syntax ``$<...>``.  See the
+:manual:`cmake-generator-expressions(7)` manual for available
+expressions.  See the :manual:`cmake-buildsystem(7)` manual
+for more on defining buildsystem properties.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_XCODE_BUILD_SYSTEM.rst b/share/cmake-3.22/Help/variable/CMAKE_XCODE_BUILD_SYSTEM.rst
new file mode 100644
index 0000000..d153061
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_XCODE_BUILD_SYSTEM.rst
@@ -0,0 +1,24 @@
+CMAKE_XCODE_BUILD_SYSTEM
+------------------------
+
+.. versionadded:: 3.19
+
+Xcode build system selection.
+
+The :generator:`Xcode` generator defines this variable to indicate which
+variant of the Xcode build system will be used.  The value is the
+version of Xcode in which the corresponding build system first became
+mature enough for use by CMake.  The possible values are:
+
+``1``
+  The original Xcode build system.
+  This is the default when using Xcode 11.x or below.
+
+``12``
+  The Xcode "new build system" introduced by Xcode 10.
+  It became mature enough for use by CMake in Xcode 12.
+  This is the default when using Xcode 12.x or above.
+
+The ``CMAKE_XCODE_BUILD_SYSTEM`` variable is informational and should not
+be modified by project code.  See the :ref:`Xcode Build System Selection`
+documentation section to select the Xcode build system.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_XCODE_GENERATE_SCHEME.rst b/share/cmake-3.22/Help/variable/CMAKE_XCODE_GENERATE_SCHEME.rst
new file mode 100644
index 0000000..40070e1
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_XCODE_GENERATE_SCHEME.rst
@@ -0,0 +1,12 @@
+CMAKE_XCODE_GENERATE_SCHEME
+---------------------------
+
+.. versionadded:: 3.9
+
+If enabled, the :generator:`Xcode` generator will generate schema files.  These
+are useful to invoke analyze, archive, build-for-testing and test
+actions from the command line.
+
+This variable initializes the
+:prop_tgt:`XCODE_GENERATE_SCHEME`
+target property on all targets.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY.rst b/share/cmake-3.22/Help/variable/CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY.rst
new file mode 100644
index 0000000..38d043c
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY.rst
@@ -0,0 +1,11 @@
+CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY
+-------------------------------------------
+
+.. versionadded:: 3.11
+
+If enabled, the :generator:`Xcode` generator will generate only a
+single Xcode project file for the topmost :command:`project()` command
+instead of generating one for every ``project()`` command.
+
+This could be useful to speed up the CMake generation step for
+large projects and to work-around a bug in the ``ZERO_CHECK`` logic.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_XCODE_LINK_BUILD_PHASE_MODE.rst b/share/cmake-3.22/Help/variable/CMAKE_XCODE_LINK_BUILD_PHASE_MODE.rst
new file mode 100644
index 0000000..17189c0
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_XCODE_LINK_BUILD_PHASE_MODE.rst
@@ -0,0 +1,9 @@
+CMAKE_XCODE_LINK_BUILD_PHASE_MODE
+---------------------------------
+
+.. versionadded:: 3.19
+
+This variable is used to initialize the
+:prop_tgt:`XCODE_LINK_BUILD_PHASE_MODE` property on targets.
+It affects the methods that the :generator:`Xcode` generator uses to link
+different kinds of libraries.  Its default value is ``NONE``.
diff --git a/share/cmake-3.18/Help/variable/CMAKE_XCODE_PLATFORM_TOOLSET.rst b/share/cmake-3.22/Help/variable/CMAKE_XCODE_PLATFORM_TOOLSET.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CMAKE_XCODE_PLATFORM_TOOLSET.rst
rename to share/cmake-3.22/Help/variable/CMAKE_XCODE_PLATFORM_TOOLSET.rst
diff --git a/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER.rst b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER.rst
new file mode 100644
index 0000000..b3fa93b
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER.rst
@@ -0,0 +1,14 @@
+CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER
+------------------------------------
+
+.. versionadded:: 3.13
+
+Whether to enable ``Address Sanitizer`` in the Diagnostics
+section of the generated Xcode scheme.
+
+This variable initializes the
+:prop_tgt:`XCODE_SCHEME_ADDRESS_SANITIZER`
+property on all targets.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN.rst b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN.rst
new file mode 100644
index 0000000..1a0a17a
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN.rst
@@ -0,0 +1,14 @@
+CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN
+-----------------------------------------------------
+
+.. versionadded:: 3.13
+
+Whether to enable ``Detect use of stack after return``
+in the Diagnostics section of the generated Xcode scheme.
+
+This variable initializes the
+:prop_tgt:`XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN`
+property on all targets.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING.rst b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING.rst
new file mode 100644
index 0000000..917fc7f
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING.rst
@@ -0,0 +1,15 @@
+CMAKE_XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING
+--------------------------------------------
+
+.. versionadded:: 3.16
+
+Whether to enable
+``Allow debugging when using document Versions Browser``
+in the Options section of the generated Xcode scheme.
+
+This variable initializes the
+:prop_tgt:`XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING`
+property on all targets.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER.rst b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER.rst
new file mode 100644
index 0000000..b604598
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER.rst
@@ -0,0 +1,14 @@
+CMAKE_XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER
+----------------------------------------------
+
+.. versionadded:: 3.13
+
+Whether to disable the ``Main Thread Checker``
+in the Diagnostics section of the generated Xcode scheme.
+
+This variable initializes the
+:prop_tgt:`XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER`
+property on all targets.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS.rst b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS.rst
new file mode 100644
index 0000000..070ddfc
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS.rst
@@ -0,0 +1,14 @@
+CMAKE_XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS
+----------------------------------------
+
+.. versionadded:: 3.13
+
+Whether to enable ``Dynamic Library Loads``
+in the Diagnostics section of the generated Xcode scheme.
+
+This variable initializes the
+:prop_tgt:`XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS`
+property on all targets.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE.rst b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE.rst
new file mode 100644
index 0000000..4291816
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE.rst
@@ -0,0 +1,14 @@
+CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE
+-------------------------------------------
+
+.. versionadded:: 3.13
+
+Whether to enable ``Dynamic Linker API usage``
+in the Diagnostics section of the generated Xcode scheme.
+
+This variable initializes the
+:prop_tgt:`XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE`
+property on all targets.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_ENVIRONMENT.rst b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_ENVIRONMENT.rst
new file mode 100644
index 0000000..62b698d
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_ENVIRONMENT.rst
@@ -0,0 +1,17 @@
+CMAKE_XCODE_SCHEME_ENVIRONMENT
+------------------------------
+
+.. versionadded:: 3.17
+
+Specify environment variables that should be added to the Arguments
+section of the generated Xcode scheme.
+
+If set to a list of environment variables and values of the form
+``MYVAR=value`` those environment variables will be added to the
+scheme.
+
+This variable initializes the :prop_tgt:`XCODE_SCHEME_ENVIRONMENT`
+property on all targets.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_GUARD_MALLOC.rst b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_GUARD_MALLOC.rst
new file mode 100644
index 0000000..48b481e
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_GUARD_MALLOC.rst
@@ -0,0 +1,14 @@
+CMAKE_XCODE_SCHEME_GUARD_MALLOC
+-------------------------------
+
+.. versionadded:: 3.13
+
+Whether to enable ``Guard Malloc``
+in the Diagnostics section of the generated Xcode scheme.
+
+This variable initializes the
+:prop_tgt:`XCODE_SCHEME_GUARD_MALLOC`
+property on all targets.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP.rst b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP.rst
new file mode 100644
index 0000000..ef8ed9b
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP.rst
@@ -0,0 +1,15 @@
+CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP
+-------------------------------------------
+
+.. versionadded:: 3.13
+
+Whether to enable the ``Main Thread Checker`` option
+``Pause on issues``
+in the Diagnostics section of the generated Xcode scheme.
+
+This variable initializes the
+:prop_tgt:`XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP`
+property on all targets.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_GUARD_EDGES.rst b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_GUARD_EDGES.rst
new file mode 100644
index 0000000..d4ae9eb
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_GUARD_EDGES.rst
@@ -0,0 +1,14 @@
+CMAKE_XCODE_SCHEME_MALLOC_GUARD_EDGES
+-------------------------------------
+
+.. versionadded:: 3.13
+
+Whether to enable ``Malloc Guard Edges``
+in the Diagnostics section of the generated Xcode scheme.
+
+This variable initializes the
+:prop_tgt:`XCODE_SCHEME_MALLOC_GUARD_EDGES`
+property on all targets.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_SCRIBBLE.rst b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_SCRIBBLE.rst
new file mode 100644
index 0000000..e28f6a1
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_SCRIBBLE.rst
@@ -0,0 +1,14 @@
+CMAKE_XCODE_SCHEME_MALLOC_SCRIBBLE
+----------------------------------
+
+.. versionadded:: 3.13
+
+Whether to enable ``Malloc Scribble``
+in the Diagnostics section of the generated Xcode scheme.
+
+This variable initializes the
+:prop_tgt:`XCODE_SCHEME_MALLOC_SCRIBBLE`
+property on all targets.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_STACK.rst b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_STACK.rst
new file mode 100644
index 0000000..59fcfd3
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_STACK.rst
@@ -0,0 +1,14 @@
+CMAKE_XCODE_SCHEME_MALLOC_STACK
+-------------------------------
+
+.. versionadded:: 3.13
+
+Whether to enable ``Malloc Stack`` in the Diagnostics
+section of the generated Xcode scheme.
+
+This variable initializes the
+:prop_tgt:`XCODE_SCHEME_MALLOC_STACK`
+property on all targets.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_THREAD_SANITIZER.rst b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_THREAD_SANITIZER.rst
new file mode 100644
index 0000000..511eb04
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_THREAD_SANITIZER.rst
@@ -0,0 +1,14 @@
+CMAKE_XCODE_SCHEME_THREAD_SANITIZER
+-----------------------------------
+
+.. versionadded:: 3.13
+
+Whether to enable ``Thread Sanitizer`` in the Diagnostics
+section of the generated Xcode scheme.
+
+This variable initializes the
+:prop_tgt:`XCODE_SCHEME_THREAD_SANITIZER`
+property on all targets.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_THREAD_SANITIZER_STOP.rst b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_THREAD_SANITIZER_STOP.rst
new file mode 100644
index 0000000..6f3b8ce
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_THREAD_SANITIZER_STOP.rst
@@ -0,0 +1,14 @@
+CMAKE_XCODE_SCHEME_THREAD_SANITIZER_STOP
+----------------------------------------
+
+.. versionadded:: 3.13
+
+Whether to enable ``Thread Sanitizer - Pause on issues``
+in the Diagnostics section of the generated Xcode scheme.
+
+This variable initializes the
+:prop_tgt:`XCODE_SCHEME_THREAD_SANITIZER_STOP`
+property on all targets.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER.rst b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER.rst
new file mode 100644
index 0000000..46d3ccf
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER.rst
@@ -0,0 +1,14 @@
+CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER
+------------------------------------------------
+
+.. versionadded:: 3.13
+
+Whether to enable ``Undefined Behavior Sanitizer``
+in the Diagnostics section of the generated Xcode scheme.
+
+This variable initializes the
+:prop_tgt:`XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER`
+property on all targets.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP.rst b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP.rst
new file mode 100644
index 0000000..8fa5ece
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP.rst
@@ -0,0 +1,15 @@
+CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP
+-----------------------------------------------------
+
+.. versionadded:: 3.13
+
+Whether to enable ``Undefined Behavior Sanitizer`` option
+``Pause on issues``
+in the Diagnostics section of the generated Xcode scheme.
+
+This variable initializes the
+:prop_tgt:`XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP`
+property on all targets.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_WORKING_DIRECTORY.rst b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_WORKING_DIRECTORY.rst
new file mode 100644
index 0000000..4221e48
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_WORKING_DIRECTORY.rst
@@ -0,0 +1,14 @@
+CMAKE_XCODE_SCHEME_WORKING_DIRECTORY
+------------------------------------
+
+.. versionadded:: 3.17
+
+Specify the ``Working Directory`` of the *Run* and *Profile*
+actions in the generated Xcode scheme.
+
+This variable initializes the
+:prop_tgt:`XCODE_SCHEME_WORKING_DIRECTORY`
+property on all targets.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_ZOMBIE_OBJECTS.rst b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_ZOMBIE_OBJECTS.rst
new file mode 100644
index 0000000..fd9488e
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CMAKE_XCODE_SCHEME_ZOMBIE_OBJECTS.rst
@@ -0,0 +1,14 @@
+CMAKE_XCODE_SCHEME_ZOMBIE_OBJECTS
+---------------------------------
+
+.. versionadded:: 3.13
+
+Whether to enable ``Zombie Objects``
+in the Diagnostics section of the generated Xcode scheme.
+
+This variable initializes the
+:prop_tgt:`XCODE_SCHEME_ZOMBIE_OBJECTS`
+property on all targets.
+
+Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property
+documentation to see all Xcode schema related properties.
diff --git a/share/cmake-3.18/Help/variable/CPACK_ABSOLUTE_DESTINATION_FILES.rst b/share/cmake-3.22/Help/variable/CPACK_ABSOLUTE_DESTINATION_FILES.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CPACK_ABSOLUTE_DESTINATION_FILES.rst
rename to share/cmake-3.22/Help/variable/CPACK_ABSOLUTE_DESTINATION_FILES.rst
diff --git a/share/cmake-3.18/Help/variable/CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY.rst b/share/cmake-3.22/Help/variable/CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY.rst
rename to share/cmake-3.22/Help/variable/CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY.rst
diff --git a/share/cmake-3.22/Help/variable/CPACK_CUSTOM_INSTALL_VARIABLES.rst b/share/cmake-3.22/Help/variable/CPACK_CUSTOM_INSTALL_VARIABLES.rst
new file mode 100644
index 0000000..1c070b8
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CPACK_CUSTOM_INSTALL_VARIABLES.rst
@@ -0,0 +1,44 @@
+CPACK_CUSTOM_INSTALL_VARIABLES
+------------------------------
+
+.. versionadded:: 3.21
+
+CPack variables (set via e.g. ``cpack -D``, ``CPackConfig.cmake`` or
+:variable:`CPACK_PROJECT_CONFIG_FILE` scripts) are not directly visible in
+installation scripts.  Instead, one can pass a list of ``varName=value``
+pairs in the ``CPACK_CUSTOM_INSTALL_VARIABLES`` variable.  At install time,
+each list item will result in a variable of the specified name (``varName``)
+being set to the given ``value``.  The ``=`` can be omitted for an empty
+``value``.
+
+``CPACK_CUSTOM_INSTALL_VARIABLES`` allows the packaging installation to be
+influenced by the user or driving script at CPack runtime without having to
+regenerate the install scripts.
+
+Example
+"""""""
+
+.. code-block:: cmake
+
+  install(FILES large.txt DESTINATION data)
+
+  install(CODE [[
+    if(ENABLE_COMPRESSION)
+      # "run-compressor" is a fictional tool that produces
+      # large.txt.xz from large.txt and then removes the input file
+      execute_process(COMMAND run-compressor $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/large.txt)
+    endif()
+  ]])
+
+With the above example snippet, :manual:`cpack <cpack(1)>` will by default
+run the installation script with ``ENABLE_COMPRESSION`` unset, resulting in
+a package containing the uncompressed ``large.txt``.  This can be overridden
+when invoking :manual:`cpack <cpack(1)>` like so:
+
+.. code-block:: shell
+
+  cpack -D "CPACK_CUSTOM_INSTALL_VARIABLES=ENABLE_COMPRESSION=TRUE"
+
+The installation script will then run with ``ENABLE_COMPRESSION`` set to
+``TRUE``, resulting in a package containing the compressed ``large.txt.xz``
+instead.
diff --git a/share/cmake-3.18/Help/variable/CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION.rst b/share/cmake-3.22/Help/variable/CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION.rst
rename to share/cmake-3.22/Help/variable/CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION.rst
diff --git a/share/cmake-3.18/Help/variable/CPACK_INCLUDE_TOPLEVEL_DIRECTORY.rst b/share/cmake-3.22/Help/variable/CPACK_INCLUDE_TOPLEVEL_DIRECTORY.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CPACK_INCLUDE_TOPLEVEL_DIRECTORY.rst
rename to share/cmake-3.22/Help/variable/CPACK_INCLUDE_TOPLEVEL_DIRECTORY.rst
diff --git a/share/cmake-3.22/Help/variable/CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS.rst b/share/cmake-3.22/Help/variable/CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS.rst
new file mode 100644
index 0000000..01fb189
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS.rst
@@ -0,0 +1,13 @@
+CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS
+-------------------------------------------
+
+.. versionadded:: 3.11
+
+Default permissions for implicitly created directories during packaging.
+
+This variable serves the same purpose during packaging as the
+:variable:`CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS` variable
+serves during installation (e.g. ``make install``).
+
+If `include(CPack)` is used then by default this variable is set to the content
+of :variable:`CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS`.
diff --git a/share/cmake-3.18/Help/variable/CPACK_PACKAGING_INSTALL_PREFIX.rst b/share/cmake-3.22/Help/variable/CPACK_PACKAGING_INSTALL_PREFIX.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CPACK_PACKAGING_INSTALL_PREFIX.rst
rename to share/cmake-3.22/Help/variable/CPACK_PACKAGING_INSTALL_PREFIX.rst
diff --git a/share/cmake-3.18/Help/variable/CPACK_SET_DESTDIR.rst b/share/cmake-3.22/Help/variable/CPACK_SET_DESTDIR.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CPACK_SET_DESTDIR.rst
rename to share/cmake-3.22/Help/variable/CPACK_SET_DESTDIR.rst
diff --git a/share/cmake-3.18/Help/variable/CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION.rst b/share/cmake-3.22/Help/variable/CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION.rst
rename to share/cmake-3.22/Help/variable/CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION.rst
diff --git a/share/cmake-3.22/Help/variable/CTEST_BINARY_DIRECTORY.rst b/share/cmake-3.22/Help/variable/CTEST_BINARY_DIRECTORY.rst
new file mode 100644
index 0000000..8413e37
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_BINARY_DIRECTORY.rst
@@ -0,0 +1,7 @@
+CTEST_BINARY_DIRECTORY
+----------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``BuildDirectory`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_BUILD_COMMAND.rst b/share/cmake-3.22/Help/variable/CTEST_BUILD_COMMAND.rst
new file mode 100644
index 0000000..31c44e2
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_BUILD_COMMAND.rst
@@ -0,0 +1,7 @@
+CTEST_BUILD_COMMAND
+-------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``MakeCommand`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_BUILD_NAME.rst b/share/cmake-3.22/Help/variable/CTEST_BUILD_NAME.rst
new file mode 100644
index 0000000..3d08397
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_BUILD_NAME.rst
@@ -0,0 +1,7 @@
+CTEST_BUILD_NAME
+----------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``BuildName`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_BZR_COMMAND.rst b/share/cmake-3.22/Help/variable/CTEST_BZR_COMMAND.rst
new file mode 100644
index 0000000..0c05d1a
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_BZR_COMMAND.rst
@@ -0,0 +1,7 @@
+CTEST_BZR_COMMAND
+-----------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``BZRCommand`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_BZR_UPDATE_OPTIONS.rst b/share/cmake-3.22/Help/variable/CTEST_BZR_UPDATE_OPTIONS.rst
new file mode 100644
index 0000000..4dd5e5b
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_BZR_UPDATE_OPTIONS.rst
@@ -0,0 +1,7 @@
+CTEST_BZR_UPDATE_OPTIONS
+------------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``BZRUpdateOptions`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_CHANGE_ID.rst b/share/cmake-3.22/Help/variable/CTEST_CHANGE_ID.rst
new file mode 100644
index 0000000..a6d15f7
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_CHANGE_ID.rst
@@ -0,0 +1,11 @@
+CTEST_CHANGE_ID
+---------------
+
+.. versionadded:: 3.4
+
+Specify the CTest ``ChangeId`` setting
+in a :manual:`ctest(1)` dashboard client script.
+
+This setting allows CTest to pass arbitrary information about this
+build up to CDash.  One use of this feature is to allow CDash to
+post comments on your pull request if anything goes wrong with your build.
diff --git a/share/cmake-3.22/Help/variable/CTEST_CHECKOUT_COMMAND.rst b/share/cmake-3.22/Help/variable/CTEST_CHECKOUT_COMMAND.rst
new file mode 100644
index 0000000..852c28e
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_CHECKOUT_COMMAND.rst
@@ -0,0 +1,7 @@
+CTEST_CHECKOUT_COMMAND
+----------------------
+
+.. versionadded:: 3.1
+
+Tell the :command:`ctest_start` command how to checkout or initialize
+the source directory in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_CONFIGURATION_TYPE.rst b/share/cmake-3.22/Help/variable/CTEST_CONFIGURATION_TYPE.rst
new file mode 100644
index 0000000..392845e
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_CONFIGURATION_TYPE.rst
@@ -0,0 +1,10 @@
+CTEST_CONFIGURATION_TYPE
+------------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``DefaultCTestConfigurationType`` setting
+in a :manual:`ctest(1)` dashboard client script.
+
+If the configuration type is set via ``-C <cfg>`` from the command line
+then this variable is populated accordingly.
diff --git a/share/cmake-3.22/Help/variable/CTEST_CONFIGURE_COMMAND.rst b/share/cmake-3.22/Help/variable/CTEST_CONFIGURE_COMMAND.rst
new file mode 100644
index 0000000..992ef47
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_CONFIGURE_COMMAND.rst
@@ -0,0 +1,7 @@
+CTEST_CONFIGURE_COMMAND
+-----------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``ConfigureCommand`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_COVERAGE_COMMAND.rst b/share/cmake-3.22/Help/variable/CTEST_COVERAGE_COMMAND.rst
new file mode 100644
index 0000000..f5425cb
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_COVERAGE_COMMAND.rst
@@ -0,0 +1,62 @@
+CTEST_COVERAGE_COMMAND
+----------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``CoverageCommand`` setting
+in a :manual:`ctest(1)` dashboard client script.
+
+Cobertura
+'''''''''
+
+Using `Cobertura`_ as the coverage generation within your multi-module
+Java project can generate a series of XML files.
+
+The Cobertura Coverage parser expects to read the coverage data from a
+single XML file which contains the coverage data for all modules.
+Cobertura has a program with the ability to merge given ``cobertura.ser`` files
+and then another program to generate a combined XML file from the previous
+merged file.  For command line testing, this can be done by hand prior to
+CTest looking for the coverage files. For script builds,
+set the ``CTEST_COVERAGE_COMMAND`` variable to point to a file which will
+perform these same steps, such as a ``.sh`` or ``.bat`` file.
+
+.. code-block:: cmake
+
+  set(CTEST_COVERAGE_COMMAND .../run-coverage-and-consolidate.sh)
+
+where the ``run-coverage-and-consolidate.sh`` script is perhaps created by
+the :command:`configure_file` command and might contain the following code:
+
+.. code-block:: bash
+
+  #!/usr/bin/env bash
+  CoberturaFiles="$(find "/path/to/source" -name "cobertura.ser")"
+  SourceDirs="$(find "/path/to/source" -name "java" -type d)"
+  cobertura-merge --datafile coberturamerge.ser $CoberturaFiles
+  cobertura-report --datafile coberturamerge.ser --destination . \
+                   --format xml $SourceDirs
+
+The script uses ``find`` to capture the paths to all of the ``cobertura.ser``
+files found below the project's source directory.  It keeps the list of files
+and supplies it as an argument to the ``cobertura-merge`` program. The
+``--datafile`` argument signifies where the result of the merge will be kept.
+
+The combined ``coberturamerge.ser`` file is then used to generate the XML report
+using the ``cobertura-report`` program.  The call to the cobertura-report
+program requires some named arguments.
+
+``--datafila``
+  path to the merged ``.ser`` file
+
+``--destination``
+  path to put the output files(s)
+
+``--format``
+  file format to write output in: xml or html
+
+The rest of the supplied arguments consist of the full paths to the
+``/src/main/java`` directories of each module within the source tree. These
+directories are needed and should not be forgotten.
+
+.. _`Cobertura`: http://cobertura.github.io/cobertura/
diff --git a/share/cmake-3.22/Help/variable/CTEST_COVERAGE_EXTRA_FLAGS.rst b/share/cmake-3.22/Help/variable/CTEST_COVERAGE_EXTRA_FLAGS.rst
new file mode 100644
index 0000000..39d9b5d
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_COVERAGE_EXTRA_FLAGS.rst
@@ -0,0 +1,7 @@
+CTEST_COVERAGE_EXTRA_FLAGS
+--------------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``CoverageExtraFlags`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_CURL_OPTIONS.rst b/share/cmake-3.22/Help/variable/CTEST_CURL_OPTIONS.rst
new file mode 100644
index 0000000..14af4e4
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_CURL_OPTIONS.rst
@@ -0,0 +1,7 @@
+CTEST_CURL_OPTIONS
+------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``CurlOptions`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CTEST_CUSTOM_COVERAGE_EXCLUDE.rst b/share/cmake-3.22/Help/variable/CTEST_CUSTOM_COVERAGE_EXCLUDE.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CTEST_CUSTOM_COVERAGE_EXCLUDE.rst
rename to share/cmake-3.22/Help/variable/CTEST_CUSTOM_COVERAGE_EXCLUDE.rst
diff --git a/share/cmake-3.18/Help/variable/CTEST_CUSTOM_ERROR_EXCEPTION.rst b/share/cmake-3.22/Help/variable/CTEST_CUSTOM_ERROR_EXCEPTION.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CTEST_CUSTOM_ERROR_EXCEPTION.rst
rename to share/cmake-3.22/Help/variable/CTEST_CUSTOM_ERROR_EXCEPTION.rst
diff --git a/share/cmake-3.18/Help/variable/CTEST_CUSTOM_ERROR_MATCH.rst b/share/cmake-3.22/Help/variable/CTEST_CUSTOM_ERROR_MATCH.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CTEST_CUSTOM_ERROR_MATCH.rst
rename to share/cmake-3.22/Help/variable/CTEST_CUSTOM_ERROR_MATCH.rst
diff --git a/share/cmake-3.18/Help/variable/CTEST_CUSTOM_ERROR_POST_CONTEXT.rst b/share/cmake-3.22/Help/variable/CTEST_CUSTOM_ERROR_POST_CONTEXT.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CTEST_CUSTOM_ERROR_POST_CONTEXT.rst
rename to share/cmake-3.22/Help/variable/CTEST_CUSTOM_ERROR_POST_CONTEXT.rst
diff --git a/share/cmake-3.18/Help/variable/CTEST_CUSTOM_ERROR_PRE_CONTEXT.rst b/share/cmake-3.22/Help/variable/CTEST_CUSTOM_ERROR_PRE_CONTEXT.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CTEST_CUSTOM_ERROR_PRE_CONTEXT.rst
rename to share/cmake-3.22/Help/variable/CTEST_CUSTOM_ERROR_PRE_CONTEXT.rst
diff --git a/share/cmake-3.22/Help/variable/CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE.rst b/share/cmake-3.22/Help/variable/CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE.rst
new file mode 100644
index 0000000..7e7d431
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE.rst
@@ -0,0 +1,14 @@
+CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE
+--------------------------------------------
+
+When saving a failing test's output, this is the maximum size, in bytes, that
+will be collected by the :command:`ctest_test` command. Defaults to 307200
+(300 KiB).
+
+If a test's output contains the literal string "CTEST_FULL_OUTPUT",
+the output will not be truncated and may exceed the maximum size.
+
+.. include:: CTEST_CUSTOM_XXX.txt
+
+For controlling the output collection of passing tests, see
+:variable:`CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE`.
diff --git a/share/cmake-3.18/Help/variable/CTEST_CUSTOM_MAXIMUM_NUMBER_OF_ERRORS.rst b/share/cmake-3.22/Help/variable/CTEST_CUSTOM_MAXIMUM_NUMBER_OF_ERRORS.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CTEST_CUSTOM_MAXIMUM_NUMBER_OF_ERRORS.rst
rename to share/cmake-3.22/Help/variable/CTEST_CUSTOM_MAXIMUM_NUMBER_OF_ERRORS.rst
diff --git a/share/cmake-3.18/Help/variable/CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS.rst b/share/cmake-3.22/Help/variable/CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS.rst
rename to share/cmake-3.22/Help/variable/CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS.rst
diff --git a/share/cmake-3.22/Help/variable/CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE.rst b/share/cmake-3.22/Help/variable/CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE.rst
new file mode 100644
index 0000000..64367f9
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE.rst
@@ -0,0 +1,14 @@
+CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE
+--------------------------------------------
+
+When saving a passing test's output, this is the maximum size, in bytes, that
+will be collected by the :command:`ctest_test` command. Defaults to 1024
+(1 KiB).
+
+If a test's output contains the literal string "CTEST_FULL_OUTPUT",
+the output will not be truncated and may exceed the maximum size.
+
+.. include:: CTEST_CUSTOM_XXX.txt
+
+For controlling the output collection of failing tests, see
+:variable:`CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE`.
diff --git a/share/cmake-3.18/Help/variable/CTEST_CUSTOM_MEMCHECK_IGNORE.rst b/share/cmake-3.22/Help/variable/CTEST_CUSTOM_MEMCHECK_IGNORE.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CTEST_CUSTOM_MEMCHECK_IGNORE.rst
rename to share/cmake-3.22/Help/variable/CTEST_CUSTOM_MEMCHECK_IGNORE.rst
diff --git a/share/cmake-3.18/Help/variable/CTEST_CUSTOM_POST_MEMCHECK.rst b/share/cmake-3.22/Help/variable/CTEST_CUSTOM_POST_MEMCHECK.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CTEST_CUSTOM_POST_MEMCHECK.rst
rename to share/cmake-3.22/Help/variable/CTEST_CUSTOM_POST_MEMCHECK.rst
diff --git a/share/cmake-3.18/Help/variable/CTEST_CUSTOM_POST_TEST.rst b/share/cmake-3.22/Help/variable/CTEST_CUSTOM_POST_TEST.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CTEST_CUSTOM_POST_TEST.rst
rename to share/cmake-3.22/Help/variable/CTEST_CUSTOM_POST_TEST.rst
diff --git a/share/cmake-3.18/Help/variable/CTEST_CUSTOM_PRE_MEMCHECK.rst b/share/cmake-3.22/Help/variable/CTEST_CUSTOM_PRE_MEMCHECK.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CTEST_CUSTOM_PRE_MEMCHECK.rst
rename to share/cmake-3.22/Help/variable/CTEST_CUSTOM_PRE_MEMCHECK.rst
diff --git a/share/cmake-3.18/Help/variable/CTEST_CUSTOM_PRE_TEST.rst b/share/cmake-3.22/Help/variable/CTEST_CUSTOM_PRE_TEST.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CTEST_CUSTOM_PRE_TEST.rst
rename to share/cmake-3.22/Help/variable/CTEST_CUSTOM_PRE_TEST.rst
diff --git a/share/cmake-3.18/Help/variable/CTEST_CUSTOM_TESTS_IGNORE.rst b/share/cmake-3.22/Help/variable/CTEST_CUSTOM_TESTS_IGNORE.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CTEST_CUSTOM_TESTS_IGNORE.rst
rename to share/cmake-3.22/Help/variable/CTEST_CUSTOM_TESTS_IGNORE.rst
diff --git a/share/cmake-3.18/Help/variable/CTEST_CUSTOM_WARNING_EXCEPTION.rst b/share/cmake-3.22/Help/variable/CTEST_CUSTOM_WARNING_EXCEPTION.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CTEST_CUSTOM_WARNING_EXCEPTION.rst
rename to share/cmake-3.22/Help/variable/CTEST_CUSTOM_WARNING_EXCEPTION.rst
diff --git a/share/cmake-3.18/Help/variable/CTEST_CUSTOM_WARNING_MATCH.rst b/share/cmake-3.22/Help/variable/CTEST_CUSTOM_WARNING_MATCH.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CTEST_CUSTOM_WARNING_MATCH.rst
rename to share/cmake-3.22/Help/variable/CTEST_CUSTOM_WARNING_MATCH.rst
diff --git a/share/cmake-3.18/Help/variable/CTEST_CUSTOM_XXX.txt b/share/cmake-3.22/Help/variable/CTEST_CUSTOM_XXX.txt
similarity index 100%
rename from share/cmake-3.18/Help/variable/CTEST_CUSTOM_XXX.txt
rename to share/cmake-3.22/Help/variable/CTEST_CUSTOM_XXX.txt
diff --git a/share/cmake-3.22/Help/variable/CTEST_CVS_CHECKOUT.rst b/share/cmake-3.22/Help/variable/CTEST_CVS_CHECKOUT.rst
new file mode 100644
index 0000000..32cf9eb
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_CVS_CHECKOUT.rst
@@ -0,0 +1,6 @@
+CTEST_CVS_CHECKOUT
+------------------
+
+.. versionadded:: 3.1
+
+Deprecated.  Use :variable:`CTEST_CHECKOUT_COMMAND` instead.
diff --git a/share/cmake-3.22/Help/variable/CTEST_CVS_COMMAND.rst b/share/cmake-3.22/Help/variable/CTEST_CVS_COMMAND.rst
new file mode 100644
index 0000000..7932070
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_CVS_COMMAND.rst
@@ -0,0 +1,7 @@
+CTEST_CVS_COMMAND
+-----------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``CVSCommand`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_CVS_UPDATE_OPTIONS.rst b/share/cmake-3.22/Help/variable/CTEST_CVS_UPDATE_OPTIONS.rst
new file mode 100644
index 0000000..359e708
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_CVS_UPDATE_OPTIONS.rst
@@ -0,0 +1,7 @@
+CTEST_CVS_UPDATE_OPTIONS
+------------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``CVSUpdateOptions`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_DROP_LOCATION.rst b/share/cmake-3.22/Help/variable/CTEST_DROP_LOCATION.rst
new file mode 100644
index 0000000..f66793b
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_DROP_LOCATION.rst
@@ -0,0 +1,7 @@
+CTEST_DROP_LOCATION
+-------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``DropLocation`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_DROP_METHOD.rst b/share/cmake-3.22/Help/variable/CTEST_DROP_METHOD.rst
new file mode 100644
index 0000000..3a84658
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_DROP_METHOD.rst
@@ -0,0 +1,7 @@
+CTEST_DROP_METHOD
+-----------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``DropMethod`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_DROP_SITE.rst b/share/cmake-3.22/Help/variable/CTEST_DROP_SITE.rst
new file mode 100644
index 0000000..9c871e3
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_DROP_SITE.rst
@@ -0,0 +1,7 @@
+CTEST_DROP_SITE
+---------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``DropSite`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_DROP_SITE_CDASH.rst b/share/cmake-3.22/Help/variable/CTEST_DROP_SITE_CDASH.rst
new file mode 100644
index 0000000..dcdb286
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_DROP_SITE_CDASH.rst
@@ -0,0 +1,7 @@
+CTEST_DROP_SITE_CDASH
+---------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``IsCDash`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_DROP_SITE_PASSWORD.rst b/share/cmake-3.22/Help/variable/CTEST_DROP_SITE_PASSWORD.rst
new file mode 100644
index 0000000..8259651
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_DROP_SITE_PASSWORD.rst
@@ -0,0 +1,7 @@
+CTEST_DROP_SITE_PASSWORD
+------------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``DropSitePassword`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_DROP_SITE_USER.rst b/share/cmake-3.22/Help/variable/CTEST_DROP_SITE_USER.rst
new file mode 100644
index 0000000..8d2e3a3
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_DROP_SITE_USER.rst
@@ -0,0 +1,7 @@
+CTEST_DROP_SITE_USER
+--------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``DropSiteUser`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_EXTRA_COVERAGE_GLOB.rst b/share/cmake-3.22/Help/variable/CTEST_EXTRA_COVERAGE_GLOB.rst
new file mode 100644
index 0000000..1d7e8d4
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_EXTRA_COVERAGE_GLOB.rst
@@ -0,0 +1,9 @@
+CTEST_EXTRA_COVERAGE_GLOB
+-------------------------
+
+.. versionadded:: 3.4
+
+A list of regular expressions which will be used to find files which should be
+covered by the :command:`ctest_coverage` command.
+
+.. include:: CTEST_CUSTOM_XXX.txt
diff --git a/share/cmake-3.22/Help/variable/CTEST_GIT_COMMAND.rst b/share/cmake-3.22/Help/variable/CTEST_GIT_COMMAND.rst
new file mode 100644
index 0000000..eb9b440
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_GIT_COMMAND.rst
@@ -0,0 +1,7 @@
+CTEST_GIT_COMMAND
+-----------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``GITCommand`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_GIT_INIT_SUBMODULES.rst b/share/cmake-3.22/Help/variable/CTEST_GIT_INIT_SUBMODULES.rst
new file mode 100644
index 0000000..529bfc7
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_GIT_INIT_SUBMODULES.rst
@@ -0,0 +1,7 @@
+CTEST_GIT_INIT_SUBMODULES
+-------------------------
+
+.. versionadded:: 3.6
+
+Specify the CTest ``GITInitSubmodules`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_GIT_UPDATE_CUSTOM.rst b/share/cmake-3.22/Help/variable/CTEST_GIT_UPDATE_CUSTOM.rst
new file mode 100644
index 0000000..82a8a6a
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_GIT_UPDATE_CUSTOM.rst
@@ -0,0 +1,7 @@
+CTEST_GIT_UPDATE_CUSTOM
+-----------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``GITUpdateCustom`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_GIT_UPDATE_OPTIONS.rst b/share/cmake-3.22/Help/variable/CTEST_GIT_UPDATE_OPTIONS.rst
new file mode 100644
index 0000000..1568239
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_GIT_UPDATE_OPTIONS.rst
@@ -0,0 +1,7 @@
+CTEST_GIT_UPDATE_OPTIONS
+------------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``GITUpdateOptions`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_HG_COMMAND.rst b/share/cmake-3.22/Help/variable/CTEST_HG_COMMAND.rst
new file mode 100644
index 0000000..3372fe4
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_HG_COMMAND.rst
@@ -0,0 +1,7 @@
+CTEST_HG_COMMAND
+----------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``HGCommand`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_HG_UPDATE_OPTIONS.rst b/share/cmake-3.22/Help/variable/CTEST_HG_UPDATE_OPTIONS.rst
new file mode 100644
index 0000000..85c6b03
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_HG_UPDATE_OPTIONS.rst
@@ -0,0 +1,7 @@
+CTEST_HG_UPDATE_OPTIONS
+-----------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``HGUpdateOptions`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_LABELS_FOR_SUBPROJECTS.rst b/share/cmake-3.22/Help/variable/CTEST_LABELS_FOR_SUBPROJECTS.rst
new file mode 100644
index 0000000..dd6d125
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_LABELS_FOR_SUBPROJECTS.rst
@@ -0,0 +1,7 @@
+CTEST_LABELS_FOR_SUBPROJECTS
+----------------------------
+
+.. versionadded:: 3.10
+
+Specify the CTest ``LabelsForSubprojects`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_MEMORYCHECK_COMMAND.rst b/share/cmake-3.22/Help/variable/CTEST_MEMORYCHECK_COMMAND.rst
new file mode 100644
index 0000000..25f1bd9
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_MEMORYCHECK_COMMAND.rst
@@ -0,0 +1,7 @@
+CTEST_MEMORYCHECK_COMMAND
+-------------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``MemoryCheckCommand`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_MEMORYCHECK_COMMAND_OPTIONS.rst b/share/cmake-3.22/Help/variable/CTEST_MEMORYCHECK_COMMAND_OPTIONS.rst
new file mode 100644
index 0000000..51830d5
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_MEMORYCHECK_COMMAND_OPTIONS.rst
@@ -0,0 +1,7 @@
+CTEST_MEMORYCHECK_COMMAND_OPTIONS
+---------------------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``MemoryCheckCommandOptions`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_MEMORYCHECK_SANITIZER_OPTIONS.rst b/share/cmake-3.22/Help/variable/CTEST_MEMORYCHECK_SANITIZER_OPTIONS.rst
new file mode 100644
index 0000000..b6fee2e
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_MEMORYCHECK_SANITIZER_OPTIONS.rst
@@ -0,0 +1,12 @@
+CTEST_MEMORYCHECK_SANITIZER_OPTIONS
+-----------------------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``MemoryCheckSanitizerOptions`` setting
+in a :manual:`ctest(1)` dashboard client script.
+
+CTest prepends correct sanitizer options ``*_OPTIONS``
+environment variable to executed command. CTests adds
+its own ``log_path`` to sanitizer options, don't provide your
+own ``log_path``.
diff --git a/share/cmake-3.22/Help/variable/CTEST_MEMORYCHECK_SUPPRESSIONS_FILE.rst b/share/cmake-3.22/Help/variable/CTEST_MEMORYCHECK_SUPPRESSIONS_FILE.rst
new file mode 100644
index 0000000..a61a3ef
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_MEMORYCHECK_SUPPRESSIONS_FILE.rst
@@ -0,0 +1,7 @@
+CTEST_MEMORYCHECK_SUPPRESSIONS_FILE
+-----------------------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``MemoryCheckSuppressionFile`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_MEMORYCHECK_TYPE.rst b/share/cmake-3.22/Help/variable/CTEST_MEMORYCHECK_TYPE.rst
new file mode 100644
index 0000000..80353a4
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_MEMORYCHECK_TYPE.rst
@@ -0,0 +1,10 @@
+CTEST_MEMORYCHECK_TYPE
+----------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``MemoryCheckType`` setting
+in a :manual:`ctest(1)` dashboard client script.
+Valid values are ``Valgrind``, ``Purify``, ``BoundsChecker``, ``DrMemory``,
+``CudaSanitizer``, ``ThreadSanitizer``, ``AddressSanitizer``, ``LeakSanitizer``,
+``MemorySanitizer`` and ``UndefinedBehaviorSanitizer``.
diff --git a/share/cmake-3.22/Help/variable/CTEST_NIGHTLY_START_TIME.rst b/share/cmake-3.22/Help/variable/CTEST_NIGHTLY_START_TIME.rst
new file mode 100644
index 0000000..2d707d5
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_NIGHTLY_START_TIME.rst
@@ -0,0 +1,11 @@
+CTEST_NIGHTLY_START_TIME
+------------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``NightlyStartTime`` setting in a :manual:`ctest(1)`
+dashboard client script.
+
+Note that this variable must always be set for a nightly build in a
+dashboard script. It is needed so that nightly builds can be properly grouped
+together in CDash.
diff --git a/share/cmake-3.22/Help/variable/CTEST_P4_CLIENT.rst b/share/cmake-3.22/Help/variable/CTEST_P4_CLIENT.rst
new file mode 100644
index 0000000..0778c5b
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_P4_CLIENT.rst
@@ -0,0 +1,7 @@
+CTEST_P4_CLIENT
+---------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``P4Client`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_P4_COMMAND.rst b/share/cmake-3.22/Help/variable/CTEST_P4_COMMAND.rst
new file mode 100644
index 0000000..5cc2a81
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_P4_COMMAND.rst
@@ -0,0 +1,7 @@
+CTEST_P4_COMMAND
+----------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``P4Command`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_P4_OPTIONS.rst b/share/cmake-3.22/Help/variable/CTEST_P4_OPTIONS.rst
new file mode 100644
index 0000000..01b6534
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_P4_OPTIONS.rst
@@ -0,0 +1,7 @@
+CTEST_P4_OPTIONS
+----------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``P4Options`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_P4_UPDATE_OPTIONS.rst b/share/cmake-3.22/Help/variable/CTEST_P4_UPDATE_OPTIONS.rst
new file mode 100644
index 0000000..365aa3f
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_P4_UPDATE_OPTIONS.rst
@@ -0,0 +1,7 @@
+CTEST_P4_UPDATE_OPTIONS
+-----------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``P4UpdateOptions`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_RESOURCE_SPEC_FILE.rst b/share/cmake-3.22/Help/variable/CTEST_RESOURCE_SPEC_FILE.rst
new file mode 100644
index 0000000..8e9bf01
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_RESOURCE_SPEC_FILE.rst
@@ -0,0 +1,12 @@
+CTEST_RESOURCE_SPEC_FILE
+------------------------
+
+.. versionadded:: 3.18
+
+Specify the CTest ``ResourceSpecFile`` setting in a :manual:`ctest(1)`
+dashboard client script.
+
+This can also be used to specify the resource spec file from a CMake build. If
+no ``RESOURCE_SPEC_FILE`` is passed to :command:`ctest_test`, and
+``CTEST_RESOURCE_SPEC_FILE`` is not specified in the dashboard script, the
+value of this variable from the build is used.
diff --git a/share/cmake-3.22/Help/variable/CTEST_RUN_CURRENT_SCRIPT.rst b/share/cmake-3.22/Help/variable/CTEST_RUN_CURRENT_SCRIPT.rst
new file mode 100644
index 0000000..32c85ad
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_RUN_CURRENT_SCRIPT.rst
@@ -0,0 +1,7 @@
+CTEST_RUN_CURRENT_SCRIPT
+------------------------
+
+.. versionadded:: 3.11
+
+Setting this to 0 prevents :manual:`ctest(1)` from being run again when it
+reaches the end of a script run by calling ``ctest -S``.
diff --git a/share/cmake-3.22/Help/variable/CTEST_SCP_COMMAND.rst b/share/cmake-3.22/Help/variable/CTEST_SCP_COMMAND.rst
new file mode 100644
index 0000000..155b058
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_SCP_COMMAND.rst
@@ -0,0 +1,6 @@
+CTEST_SCP_COMMAND
+-----------------
+
+.. versionadded:: 3.1
+
+Legacy option.  Not used.
diff --git a/share/cmake-3.22/Help/variable/CTEST_SCRIPT_DIRECTORY.rst b/share/cmake-3.22/Help/variable/CTEST_SCRIPT_DIRECTORY.rst
new file mode 100644
index 0000000..77d4e58
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_SCRIPT_DIRECTORY.rst
@@ -0,0 +1,5 @@
+CTEST_SCRIPT_DIRECTORY
+----------------------
+
+The directory containing the top-level CTest script.
+The concept is similar to :variable:`CMAKE_SOURCE_DIR`.
diff --git a/share/cmake-3.22/Help/variable/CTEST_SITE.rst b/share/cmake-3.22/Help/variable/CTEST_SITE.rst
new file mode 100644
index 0000000..526e6ed
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_SITE.rst
@@ -0,0 +1,7 @@
+CTEST_SITE
+----------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``Site`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_SOURCE_DIRECTORY.rst b/share/cmake-3.22/Help/variable/CTEST_SOURCE_DIRECTORY.rst
new file mode 100644
index 0000000..4c6ac54
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_SOURCE_DIRECTORY.rst
@@ -0,0 +1,7 @@
+CTEST_SOURCE_DIRECTORY
+----------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``SourceDirectory`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_SUBMIT_URL.rst b/share/cmake-3.22/Help/variable/CTEST_SUBMIT_URL.rst
new file mode 100644
index 0000000..b6e7f68
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_SUBMIT_URL.rst
@@ -0,0 +1,7 @@
+CTEST_SUBMIT_URL
+----------------
+
+.. versionadded:: 3.14
+
+Specify the CTest ``SubmitURL`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_SVN_COMMAND.rst b/share/cmake-3.22/Help/variable/CTEST_SVN_COMMAND.rst
new file mode 100644
index 0000000..e97acd0
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_SVN_COMMAND.rst
@@ -0,0 +1,7 @@
+CTEST_SVN_COMMAND
+-----------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``SVNCommand`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_SVN_OPTIONS.rst b/share/cmake-3.22/Help/variable/CTEST_SVN_OPTIONS.rst
new file mode 100644
index 0000000..5326e20
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_SVN_OPTIONS.rst
@@ -0,0 +1,7 @@
+CTEST_SVN_OPTIONS
+-----------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``SVNOptions`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_SVN_UPDATE_OPTIONS.rst b/share/cmake-3.22/Help/variable/CTEST_SVN_UPDATE_OPTIONS.rst
new file mode 100644
index 0000000..24e0bbf
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_SVN_UPDATE_OPTIONS.rst
@@ -0,0 +1,7 @@
+CTEST_SVN_UPDATE_OPTIONS
+------------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``SVNUpdateOptions`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_TEST_LOAD.rst b/share/cmake-3.22/Help/variable/CTEST_TEST_LOAD.rst
new file mode 100644
index 0000000..b6a9d62
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_TEST_LOAD.rst
@@ -0,0 +1,9 @@
+CTEST_TEST_LOAD
+---------------
+
+.. versionadded:: 3.4
+
+Specify the ``TestLoad`` setting in the :ref:`CTest Test Step`
+of a :manual:`ctest(1)` dashboard client script.  This sets the
+default value for the ``TEST_LOAD`` option of the :command:`ctest_test`
+command.
diff --git a/share/cmake-3.22/Help/variable/CTEST_TEST_TIMEOUT.rst b/share/cmake-3.22/Help/variable/CTEST_TEST_TIMEOUT.rst
new file mode 100644
index 0000000..61d9191
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_TEST_TIMEOUT.rst
@@ -0,0 +1,7 @@
+CTEST_TEST_TIMEOUT
+------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``TimeOut`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_TRIGGER_SITE.rst b/share/cmake-3.22/Help/variable/CTEST_TRIGGER_SITE.rst
new file mode 100644
index 0000000..6abb852
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_TRIGGER_SITE.rst
@@ -0,0 +1,6 @@
+CTEST_TRIGGER_SITE
+------------------
+
+.. versionadded:: 3.1
+
+Legacy option.  Not used.
diff --git a/share/cmake-3.22/Help/variable/CTEST_UPDATE_COMMAND.rst b/share/cmake-3.22/Help/variable/CTEST_UPDATE_COMMAND.rst
new file mode 100644
index 0000000..c4ed645
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_UPDATE_COMMAND.rst
@@ -0,0 +1,7 @@
+CTEST_UPDATE_COMMAND
+--------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``UpdateCommand`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_UPDATE_OPTIONS.rst b/share/cmake-3.22/Help/variable/CTEST_UPDATE_OPTIONS.rst
new file mode 100644
index 0000000..96c4b6c
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_UPDATE_OPTIONS.rst
@@ -0,0 +1,7 @@
+CTEST_UPDATE_OPTIONS
+--------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``UpdateOptions`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_UPDATE_VERSION_ONLY.rst b/share/cmake-3.22/Help/variable/CTEST_UPDATE_VERSION_ONLY.rst
new file mode 100644
index 0000000..f7c863c
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_UPDATE_VERSION_ONLY.rst
@@ -0,0 +1,7 @@
+CTEST_UPDATE_VERSION_ONLY
+-------------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest :ref:`UpdateVersionOnly <UpdateVersionOnly>` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_UPDATE_VERSION_OVERRIDE.rst b/share/cmake-3.22/Help/variable/CTEST_UPDATE_VERSION_OVERRIDE.rst
new file mode 100644
index 0000000..87918cb
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_UPDATE_VERSION_OVERRIDE.rst
@@ -0,0 +1,7 @@
+CTEST_UPDATE_VERSION_OVERRIDE
+-----------------------------
+
+.. versionadded:: 3.15
+
+Specify the CTest :ref:`UpdateVersionOverride <UpdateVersionOverride>` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.22/Help/variable/CTEST_USE_LAUNCHERS.rst b/share/cmake-3.22/Help/variable/CTEST_USE_LAUNCHERS.rst
new file mode 100644
index 0000000..728cdc5
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/CTEST_USE_LAUNCHERS.rst
@@ -0,0 +1,7 @@
+CTEST_USE_LAUNCHERS
+-------------------
+
+.. versionadded:: 3.1
+
+Specify the CTest ``UseLaunchers`` setting
+in a :manual:`ctest(1)` dashboard client script.
diff --git a/share/cmake-3.18/Help/variable/CYGWIN.rst b/share/cmake-3.22/Help/variable/CYGWIN.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/CYGWIN.rst
rename to share/cmake-3.22/Help/variable/CYGWIN.rst
diff --git a/share/cmake-3.18/Help/variable/ENV.rst b/share/cmake-3.22/Help/variable/ENV.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/ENV.rst
rename to share/cmake-3.22/Help/variable/ENV.rst
diff --git a/share/cmake-3.22/Help/variable/EXECUTABLE_OUTPUT_PATH.rst b/share/cmake-3.22/Help/variable/EXECUTABLE_OUTPUT_PATH.rst
new file mode 100644
index 0000000..245b9eb
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/EXECUTABLE_OUTPUT_PATH.rst
@@ -0,0 +1,8 @@
+EXECUTABLE_OUTPUT_PATH
+----------------------
+
+Old executable location variable.
+
+The target property :prop_tgt:`RUNTIME_OUTPUT_DIRECTORY` supersedes this
+variable for a target if it is set.  Executable targets are otherwise placed in
+this directory.
diff --git a/share/cmake-3.22/Help/variable/GHS-MULTI.rst b/share/cmake-3.22/Help/variable/GHS-MULTI.rst
new file mode 100644
index 0000000..bb139af
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/GHS-MULTI.rst
@@ -0,0 +1,6 @@
+GHS-MULTI
+---------
+
+.. versionadded:: 3.3
+
+``True`` when using :generator:`Green Hills MULTI` generator.
diff --git a/share/cmake-3.22/Help/variable/IOS.rst b/share/cmake-3.22/Help/variable/IOS.rst
new file mode 100644
index 0000000..b27be55
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/IOS.rst
@@ -0,0 +1,6 @@
+IOS
+---
+
+.. versionadded:: 3.14
+
+Set to ``1`` when the target system (:variable:`CMAKE_SYSTEM_NAME`) is ``iOS``.
diff --git a/share/cmake-3.18/Help/variable/LIBRARY_OUTPUT_PATH.rst b/share/cmake-3.22/Help/variable/LIBRARY_OUTPUT_PATH.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/LIBRARY_OUTPUT_PATH.rst
rename to share/cmake-3.22/Help/variable/LIBRARY_OUTPUT_PATH.rst
diff --git a/share/cmake-3.22/Help/variable/MINGW.rst b/share/cmake-3.22/Help/variable/MINGW.rst
new file mode 100644
index 0000000..27c56ea
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/MINGW.rst
@@ -0,0 +1,8 @@
+MINGW
+-----
+
+.. versionadded:: 3.2
+
+``True`` when using MinGW
+
+Set to ``true`` when the compiler is some version of MinGW.
diff --git a/share/cmake-3.22/Help/variable/MSVC.rst b/share/cmake-3.22/Help/variable/MSVC.rst
new file mode 100644
index 0000000..a2dbc2e
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/MSVC.rst
@@ -0,0 +1,7 @@
+MSVC
+----
+
+Set to ``true`` when the compiler is some version of Microsoft Visual C++
+or another compiler simulating the Visual C++ ``cl`` command-line syntax.
+
+See also the :variable:`MSVC_VERSION` variable.
diff --git a/share/cmake-3.18/Help/variable/MSVC10.rst b/share/cmake-3.22/Help/variable/MSVC10.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/MSVC10.rst
rename to share/cmake-3.22/Help/variable/MSVC10.rst
diff --git a/share/cmake-3.18/Help/variable/MSVC11.rst b/share/cmake-3.22/Help/variable/MSVC11.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/MSVC11.rst
rename to share/cmake-3.22/Help/variable/MSVC11.rst
diff --git a/share/cmake-3.18/Help/variable/MSVC12.rst b/share/cmake-3.22/Help/variable/MSVC12.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/MSVC12.rst
rename to share/cmake-3.22/Help/variable/MSVC12.rst
diff --git a/share/cmake-3.22/Help/variable/MSVC14.rst b/share/cmake-3.22/Help/variable/MSVC14.rst
new file mode 100644
index 0000000..1eb5183
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/MSVC14.rst
@@ -0,0 +1,9 @@
+MSVC14
+------
+
+.. versionadded:: 3.1
+
+Discouraged.  Use the :variable:`MSVC_VERSION` variable instead.
+
+``True`` when using the Microsoft Visual Studio ``v140`` or ``v141``
+toolset (``cl`` version 19) or another compiler that simulates it.
diff --git a/share/cmake-3.18/Help/variable/MSVC60.rst b/share/cmake-3.22/Help/variable/MSVC60.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/MSVC60.rst
rename to share/cmake-3.22/Help/variable/MSVC60.rst
diff --git a/share/cmake-3.18/Help/variable/MSVC70.rst b/share/cmake-3.22/Help/variable/MSVC70.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/MSVC70.rst
rename to share/cmake-3.22/Help/variable/MSVC70.rst
diff --git a/share/cmake-3.18/Help/variable/MSVC71.rst b/share/cmake-3.22/Help/variable/MSVC71.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/MSVC71.rst
rename to share/cmake-3.22/Help/variable/MSVC71.rst
diff --git a/share/cmake-3.18/Help/variable/MSVC80.rst b/share/cmake-3.22/Help/variable/MSVC80.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/MSVC80.rst
rename to share/cmake-3.22/Help/variable/MSVC80.rst
diff --git a/share/cmake-3.18/Help/variable/MSVC90.rst b/share/cmake-3.22/Help/variable/MSVC90.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/MSVC90.rst
rename to share/cmake-3.22/Help/variable/MSVC90.rst
diff --git a/share/cmake-3.22/Help/variable/MSVC_IDE.rst b/share/cmake-3.22/Help/variable/MSVC_IDE.rst
new file mode 100644
index 0000000..18e9983
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/MSVC_IDE.rst
@@ -0,0 +1,14 @@
+MSVC_IDE
+--------
+
+``True`` when using the Microsoft Visual C++ IDE.
+
+Set to ``true`` when the target platform is the Microsoft Visual C++ IDE, as
+opposed to the command line compiler.
+
+.. note::
+
+  This variable is only available after compiler detection has been performed,
+  so it is not available to toolchain files or before the first
+  :command:`project` or :command:`enable_language` call which uses an
+  MSVC-like compiler.
diff --git a/share/cmake-3.22/Help/variable/MSVC_TOOLSET_VERSION.rst b/share/cmake-3.22/Help/variable/MSVC_TOOLSET_VERSION.rst
new file mode 100644
index 0000000..c642a9f
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/MSVC_TOOLSET_VERSION.rst
@@ -0,0 +1,24 @@
+MSVC_TOOLSET_VERSION
+--------------------
+
+.. versionadded:: 3.12
+
+The toolset version of Microsoft Visual C/C++ being used if any.
+If MSVC-like is being used, this variable is set based on the version
+of the compiler as given by the :variable:`MSVC_VERSION` variable.
+
+Known toolset version numbers are::
+
+  80        = VS 2005 (8.0)
+  90        = VS 2008 (9.0)
+  100       = VS 2010 (10.0)
+  110       = VS 2012 (11.0)
+  120       = VS 2013 (12.0)
+  140       = VS 2015 (14.0)
+  141       = VS 2017 (15.0)
+  142       = VS 2019 (16.0)
+
+Compiler versions newer than those known to CMake will be reported
+as the latest known toolset version.
+
+See also the :variable:`MSVC_VERSION` variable.
diff --git a/share/cmake-3.22/Help/variable/MSVC_VERSION.rst b/share/cmake-3.22/Help/variable/MSVC_VERSION.rst
new file mode 100644
index 0000000..cbb3a3c
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/MSVC_VERSION.rst
@@ -0,0 +1,25 @@
+MSVC_VERSION
+------------
+
+The version of Microsoft Visual C/C++ being used if any.
+If a compiler simulating Visual C++ is being used, this variable is set
+to the toolset version simulated as given by the ``_MSC_VER``
+preprocessor definition.
+
+Known version numbers are::
+
+  1200      = VS  6.0
+  1300      = VS  7.0
+  1310      = VS  7.1
+  1400      = VS  8.0 (v80 toolset)
+  1500      = VS  9.0 (v90 toolset)
+  1600      = VS 10.0 (v100 toolset)
+  1700      = VS 11.0 (v110 toolset)
+  1800      = VS 12.0 (v120 toolset)
+  1900      = VS 14.0 (v140 toolset)
+  1910-1919 = VS 15.0 (v141 toolset)
+  1920-1929 = VS 16.0 (v142 toolset)
+  1930-1939 = VS 17.0 (v143 toolset)
+
+See also the  :variable:`CMAKE_<LANG>_COMPILER_VERSION` and
+:variable:`MSVC_TOOLSET_VERSION` variable.
diff --git a/share/cmake-3.22/Help/variable/MSYS.rst b/share/cmake-3.22/Help/variable/MSYS.rst
new file mode 100644
index 0000000..6be7681
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/MSYS.rst
@@ -0,0 +1,6 @@
+MSYS
+----
+
+.. versionadded:: 3.14
+
+``True`` when using the :generator:`MSYS Makefiles` generator.
diff --git a/share/cmake-3.18/Help/variable/PROJECT-NAME_BINARY_DIR.rst b/share/cmake-3.22/Help/variable/PROJECT-NAME_BINARY_DIR.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/PROJECT-NAME_BINARY_DIR.rst
rename to share/cmake-3.22/Help/variable/PROJECT-NAME_BINARY_DIR.rst
diff --git a/share/cmake-3.22/Help/variable/PROJECT-NAME_DESCRIPTION.rst b/share/cmake-3.22/Help/variable/PROJECT-NAME_DESCRIPTION.rst
new file mode 100644
index 0000000..f372f5c
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/PROJECT-NAME_DESCRIPTION.rst
@@ -0,0 +1,7 @@
+<PROJECT-NAME>_DESCRIPTION
+--------------------------
+
+.. versionadded:: 3.12
+
+Value given to the ``DESCRIPTION`` option of the most recent call to the
+:command:`project` command with project name ``<PROJECT-NAME>``, if any.
diff --git a/share/cmake-3.22/Help/variable/PROJECT-NAME_HOMEPAGE_URL.rst b/share/cmake-3.22/Help/variable/PROJECT-NAME_HOMEPAGE_URL.rst
new file mode 100644
index 0000000..4800b13
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/PROJECT-NAME_HOMEPAGE_URL.rst
@@ -0,0 +1,7 @@
+<PROJECT-NAME>_HOMEPAGE_URL
+---------------------------
+
+.. versionadded:: 3.12
+
+Value given to the ``HOMEPAGE_URL`` option of the most recent call to the
+:command:`project` command with project name ``<PROJECT-NAME>``, if any.
diff --git a/share/cmake-3.22/Help/variable/PROJECT-NAME_IS_TOP_LEVEL.rst b/share/cmake-3.22/Help/variable/PROJECT-NAME_IS_TOP_LEVEL.rst
new file mode 100644
index 0000000..6718ecf
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/PROJECT-NAME_IS_TOP_LEVEL.rst
@@ -0,0 +1,21 @@
+<PROJECT-NAME>_IS_TOP_LEVEL
+---------------------------
+
+.. versionadded:: 3.21
+
+A boolean variable indicating whether the named project was called in a top
+level ``CMakeLists.txt`` file.
+
+To obtain the value from the most recent call to :command:`project` in
+the current directory scope or above, see the
+:variable:`PROJECT_IS_TOP_LEVEL` variable.
+
+The variable value will be true in:
+
+* the top-level directory of the project
+* the top-level directory of an external project added by :module:`ExternalProject`
+
+The variable value will be false in:
+
+* a directory added by :command:`add_subdirectory`
+* a directory added by :module:`FetchContent`
diff --git a/share/cmake-3.18/Help/variable/PROJECT-NAME_SOURCE_DIR.rst b/share/cmake-3.22/Help/variable/PROJECT-NAME_SOURCE_DIR.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/PROJECT-NAME_SOURCE_DIR.rst
rename to share/cmake-3.22/Help/variable/PROJECT-NAME_SOURCE_DIR.rst
diff --git a/share/cmake-3.18/Help/variable/PROJECT-NAME_VERSION.rst b/share/cmake-3.22/Help/variable/PROJECT-NAME_VERSION.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/PROJECT-NAME_VERSION.rst
rename to share/cmake-3.22/Help/variable/PROJECT-NAME_VERSION.rst
diff --git a/share/cmake-3.18/Help/variable/PROJECT-NAME_VERSION_MAJOR.rst b/share/cmake-3.22/Help/variable/PROJECT-NAME_VERSION_MAJOR.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/PROJECT-NAME_VERSION_MAJOR.rst
rename to share/cmake-3.22/Help/variable/PROJECT-NAME_VERSION_MAJOR.rst
diff --git a/share/cmake-3.18/Help/variable/PROJECT-NAME_VERSION_MINOR.rst b/share/cmake-3.22/Help/variable/PROJECT-NAME_VERSION_MINOR.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/PROJECT-NAME_VERSION_MINOR.rst
rename to share/cmake-3.22/Help/variable/PROJECT-NAME_VERSION_MINOR.rst
diff --git a/share/cmake-3.18/Help/variable/PROJECT-NAME_VERSION_PATCH.rst b/share/cmake-3.22/Help/variable/PROJECT-NAME_VERSION_PATCH.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/PROJECT-NAME_VERSION_PATCH.rst
rename to share/cmake-3.22/Help/variable/PROJECT-NAME_VERSION_PATCH.rst
diff --git a/share/cmake-3.18/Help/variable/PROJECT-NAME_VERSION_TWEAK.rst b/share/cmake-3.22/Help/variable/PROJECT-NAME_VERSION_TWEAK.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/PROJECT-NAME_VERSION_TWEAK.rst
rename to share/cmake-3.22/Help/variable/PROJECT-NAME_VERSION_TWEAK.rst
diff --git a/share/cmake-3.18/Help/variable/PROJECT_BINARY_DIR.rst b/share/cmake-3.22/Help/variable/PROJECT_BINARY_DIR.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/PROJECT_BINARY_DIR.rst
rename to share/cmake-3.22/Help/variable/PROJECT_BINARY_DIR.rst
diff --git a/share/cmake-3.22/Help/variable/PROJECT_DESCRIPTION.rst b/share/cmake-3.22/Help/variable/PROJECT_DESCRIPTION.rst
new file mode 100644
index 0000000..1fefcdc
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/PROJECT_DESCRIPTION.rst
@@ -0,0 +1,11 @@
+PROJECT_DESCRIPTION
+-------------------
+
+.. versionadded:: 3.9
+
+Short project description given to the project command.
+
+This is the description given to the most recently called :command:`project`
+command in the current directory scope or above.  To obtain the description
+of the top level project, see the :variable:`CMAKE_PROJECT_DESCRIPTION`
+variable.
diff --git a/share/cmake-3.22/Help/variable/PROJECT_HOMEPAGE_URL.rst b/share/cmake-3.22/Help/variable/PROJECT_HOMEPAGE_URL.rst
new file mode 100644
index 0000000..0d2c937
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/PROJECT_HOMEPAGE_URL.rst
@@ -0,0 +1,11 @@
+PROJECT_HOMEPAGE_URL
+--------------------
+
+.. versionadded:: 3.12
+
+The homepage URL of the project.
+
+This is the homepage URL given to the most recently called :command:`project`
+command in the current directory scope or above.  To obtain the homepage URL
+of the top level project, see the :variable:`CMAKE_PROJECT_HOMEPAGE_URL`
+variable.
diff --git a/share/cmake-3.22/Help/variable/PROJECT_IS_TOP_LEVEL.rst b/share/cmake-3.22/Help/variable/PROJECT_IS_TOP_LEVEL.rst
new file mode 100644
index 0000000..7e40704
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/PROJECT_IS_TOP_LEVEL.rst
@@ -0,0 +1,32 @@
+PROJECT_IS_TOP_LEVEL
+--------------------
+
+.. versionadded:: 3.21
+
+A boolean variable indicating whether the most recently called
+:command:`project` command in the current scope or above was in the top
+level ``CMakeLists.txt`` file.
+
+Some modules should only be included as part of the top level
+``CMakeLists.txt`` file to not cause unintended side effects in the build
+tree, and this variable can be used to conditionally execute such code. For
+example, consider the :module:`CTest` module, which creates targets and
+options:
+
+.. code-block:: cmake
+
+  project(MyProject)
+  ...
+  if(PROJECT_IS_TOP_LEVEL)
+    include(CTest)
+  endif()
+
+The variable value will be true in:
+
+* the top-level directory of the project
+* the top-level directory of an external project added by :module:`ExternalProject`
+
+The variable value will be false in:
+
+* a directory added by :command:`add_subdirectory`
+* a directory added by :module:`FetchContent`
diff --git a/share/cmake-3.18/Help/variable/PROJECT_NAME.rst b/share/cmake-3.22/Help/variable/PROJECT_NAME.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/PROJECT_NAME.rst
rename to share/cmake-3.22/Help/variable/PROJECT_NAME.rst
diff --git a/share/cmake-3.18/Help/variable/PROJECT_SOURCE_DIR.rst b/share/cmake-3.22/Help/variable/PROJECT_SOURCE_DIR.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/PROJECT_SOURCE_DIR.rst
rename to share/cmake-3.22/Help/variable/PROJECT_SOURCE_DIR.rst
diff --git a/share/cmake-3.18/Help/variable/PROJECT_VERSION.rst b/share/cmake-3.22/Help/variable/PROJECT_VERSION.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/PROJECT_VERSION.rst
rename to share/cmake-3.22/Help/variable/PROJECT_VERSION.rst
diff --git a/share/cmake-3.18/Help/variable/PROJECT_VERSION_MAJOR.rst b/share/cmake-3.22/Help/variable/PROJECT_VERSION_MAJOR.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/PROJECT_VERSION_MAJOR.rst
rename to share/cmake-3.22/Help/variable/PROJECT_VERSION_MAJOR.rst
diff --git a/share/cmake-3.18/Help/variable/PROJECT_VERSION_MINOR.rst b/share/cmake-3.22/Help/variable/PROJECT_VERSION_MINOR.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/PROJECT_VERSION_MINOR.rst
rename to share/cmake-3.22/Help/variable/PROJECT_VERSION_MINOR.rst
diff --git a/share/cmake-3.18/Help/variable/PROJECT_VERSION_PATCH.rst b/share/cmake-3.22/Help/variable/PROJECT_VERSION_PATCH.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/PROJECT_VERSION_PATCH.rst
rename to share/cmake-3.22/Help/variable/PROJECT_VERSION_PATCH.rst
diff --git a/share/cmake-3.18/Help/variable/PROJECT_VERSION_TWEAK.rst b/share/cmake-3.22/Help/variable/PROJECT_VERSION_TWEAK.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/PROJECT_VERSION_TWEAK.rst
rename to share/cmake-3.22/Help/variable/PROJECT_VERSION_TWEAK.rst
diff --git a/share/cmake-3.22/Help/variable/PackageName_ROOT.rst b/share/cmake-3.22/Help/variable/PackageName_ROOT.rst
new file mode 100644
index 0000000..98ba20e
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/PackageName_ROOT.rst
@@ -0,0 +1,16 @@
+<PackageName>_ROOT
+------------------
+
+.. versionadded:: 3.12
+
+Calls to :command:`find_package(<PackageName>)` will search in prefixes
+specified by the ``<PackageName>_ROOT`` CMake variable, where
+``<PackageName>`` is the name given to the :command:`find_package` call
+and ``_ROOT`` is literal.  For example, ``find_package(Foo)`` will search
+prefixes specified in the ``Foo_ROOT`` CMake variable (if set).
+See policy :policy:`CMP0074`.
+
+This variable may hold a single prefix or a
+:ref:`semicolon-separated list <CMake Language Lists>` of multiple prefixes.
+
+See also the :envvar:`<PackageName>_ROOT` environment variable.
diff --git a/share/cmake-3.18/Help/variable/UNIX.rst b/share/cmake-3.22/Help/variable/UNIX.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/UNIX.rst
rename to share/cmake-3.22/Help/variable/UNIX.rst
diff --git a/share/cmake-3.18/Help/variable/WIN32.rst b/share/cmake-3.22/Help/variable/WIN32.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/WIN32.rst
rename to share/cmake-3.22/Help/variable/WIN32.rst
diff --git a/share/cmake-3.22/Help/variable/WINCE.rst b/share/cmake-3.22/Help/variable/WINCE.rst
new file mode 100644
index 0000000..4dca297
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/WINCE.rst
@@ -0,0 +1,7 @@
+WINCE
+-----
+
+.. versionadded:: 3.1
+
+True when the :variable:`CMAKE_SYSTEM_NAME` variable is set
+to ``WindowsCE``.
diff --git a/share/cmake-3.22/Help/variable/WINDOWS_PHONE.rst b/share/cmake-3.22/Help/variable/WINDOWS_PHONE.rst
new file mode 100644
index 0000000..bf7099d
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/WINDOWS_PHONE.rst
@@ -0,0 +1,7 @@
+WINDOWS_PHONE
+-------------
+
+.. versionadded:: 3.1
+
+True when the :variable:`CMAKE_SYSTEM_NAME` variable is set
+to ``WindowsPhone``.
diff --git a/share/cmake-3.22/Help/variable/WINDOWS_STORE.rst b/share/cmake-3.22/Help/variable/WINDOWS_STORE.rst
new file mode 100644
index 0000000..13831c2
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/WINDOWS_STORE.rst
@@ -0,0 +1,7 @@
+WINDOWS_STORE
+-------------
+
+.. versionadded:: 3.1
+
+True when the :variable:`CMAKE_SYSTEM_NAME` variable is set
+to ``WindowsStore``.
diff --git a/share/cmake-3.22/Help/variable/XCODE.rst b/share/cmake-3.22/Help/variable/XCODE.rst
new file mode 100644
index 0000000..167ca86
--- /dev/null
+++ b/share/cmake-3.22/Help/variable/XCODE.rst
@@ -0,0 +1,6 @@
+XCODE
+-----
+
+.. versionadded:: 3.7
+
+``True`` when using :generator:`Xcode` generator.
diff --git a/share/cmake-3.18/Help/variable/XCODE_VERSION.rst b/share/cmake-3.22/Help/variable/XCODE_VERSION.rst
similarity index 100%
rename from share/cmake-3.18/Help/variable/XCODE_VERSION.rst
rename to share/cmake-3.22/Help/variable/XCODE_VERSION.rst
diff --git a/share/cmake-3.22/Modules/AddFileDependencies.cmake b/share/cmake-3.22/Modules/AddFileDependencies.cmake
new file mode 100644
index 0000000..13b2600
--- /dev/null
+++ b/share/cmake-3.22/Modules/AddFileDependencies.cmake
@@ -0,0 +1,33 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+AddFileDependencies
+-------------------
+
+.. deprecated:: 3.20
+
+Add dependencies to a source file.
+
+.. code-block:: cmake
+
+  add_file_dependencies(<source> <files>...)
+
+Adds the given ``<files>`` to the dependencies of file ``<source>``.
+
+Do not use this command in new code.  It is just a wrapper around:
+
+.. code-block:: cmake
+
+  set_property(SOURCE <source> APPEND PROPERTY OBJECT_DEPENDS <files>...)
+
+Instead use the :command:`set_property` command to append to the
+:prop_sf:`OBJECT_DEPENDS` source file property directly.
+
+#]=======================================================================]
+
+function(add_file_dependencies _file)
+
+  set_property(SOURCE "${_file}" APPEND PROPERTY OBJECT_DEPENDS "${ARGN}")
+
+endfunction()
diff --git a/share/cmake-3.22/Modules/AndroidTestUtilities.cmake b/share/cmake-3.22/Modules/AndroidTestUtilities.cmake
new file mode 100644
index 0000000..ddccf58
--- /dev/null
+++ b/share/cmake-3.22/Modules/AndroidTestUtilities.cmake
@@ -0,0 +1,164 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[======================================================================[.rst:
+AndroidTestUtilities
+------------------------
+
+.. versionadded:: 3.7
+
+Create a test that automatically loads specified data onto an Android device.
+
+Introduction
+^^^^^^^^^^^^
+
+Use this module to push data needed for testing an Android device behavior
+onto a connected Android device. The module will accept files and libraries as
+well as separate destinations for each. It will create a test that loads the
+files into a device object store and link to them from the specified
+destination. The files are only uploaded if they are not already in the object
+store.
+
+For example:
+
+.. code-block:: cmake
+
+  include(AndroidTestUtilities)
+  android_add_test_data(
+    example_setup_test
+    FILES <files>...
+    LIBS <libs>...
+    DEVICE_TEST_DIR "/data/local/tests/example"
+    DEVICE_OBJECT_STORE "/sdcard/.ExternalData/SHA"
+    )
+
+
+At build time a test named "example_setup_test" will be created.  Run this test
+on the command line with :manual:`ctest(1)` to load the data onto the Android
+device.
+
+Module Functions
+^^^^^^^^^^^^^^^^
+
+.. command:: android_add_test_data
+
+  .. code-block:: cmake
+
+    android_add_test_data(<test-name>
+      [FILES <files>...] [FILES_DEST <device-dir>]
+      [LIBS <libs>...]   [LIBS_DEST <device-dir>]
+      [DEVICE_OBJECT_STORE <device-dir>]
+      [DEVICE_TEST_DIR <device-dir>]
+      [NO_LINK_REGEX <strings>...]
+      )
+
+  The ``android_add_test_data`` function is used to copy files and libraries
+  needed to run project-specific tests. On the host operating system, this is
+  done at build time. For on-device testing, the files are loaded onto the
+  device by the manufactured test at run time.
+
+  This function accepts the following named parameters:
+
+  ``FILES <files>...``
+    zero or more files needed for testing
+  ``LIBS <libs>...``
+    zero or more libraries needed for testing
+  ``FILES_DEST <device-dir>``
+    absolute path where the data files are expected to be
+  ``LIBS_DEST <device-dir>``
+    absolute path where the libraries are expected to be
+  ``DEVICE_OBJECT_STORE <device-dir>``
+    absolute path to the location where the data is stored on-device
+  ``DEVICE_TEST_DIR <device-dir>``
+    absolute path to the root directory of the on-device test location
+  ``NO_LINK_REGEX <strings>...``
+    list of regex strings matching the names of files that should be
+    copied from the object store to the testing directory
+#]======================================================================]
+
+include(${CMAKE_CURRENT_LIST_DIR}/ExternalData.cmake)
+
+# The parameters to this function should be set to the list of directories,
+# files, and libraries that need to be installed prior to testing.
+function(android_add_test_data test_name)
+  # As the names suggest, oneValueArgs lists the arguments that specify a
+  # single value, while multiValueArgs can contain one or more values.
+  set(keywordArgs)
+  set(oneValueArgs FILES_DEST LIBS_DEST DEVICE_OBJECT_STORE DEVICE_TEST_DIR)
+  set(multiValueArgs FILES LIBS NO_LINK_REGEX)
+
+  # For example, if you called this function with FILES </path/to/file>
+  # then this path would be stored in the variable AST_FILES.
+  # The AST prefix stands for the name of this function (android_add_test_data).
+  cmake_parse_arguments(AST "${keywordArgs}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+  if(NOT AST_DEVICE_TEST_DIR)
+    message(FATAL_ERROR "-- You must specify the location of the on device test directory.")
+  endif()
+  if(NOT AST_DEVICE_OBJECT_STORE)
+    message(FATAL_ERROR "-- You must specify the location of the on device object store.")
+  endif()
+  if(${AST_DEVICE_TEST_DIR} STREQUAL "/")
+    message(FATAL_ERROR "-- The device test directory cannot be '/'")
+  endif()
+
+  # Copy all test data files into the binary directory, where tests are run.
+  # ExternalData will handle fetching DATA{...} references.
+  string(REPLACE "|" ";" hash_algs "${_ExternalData_REGEX_EXT}")
+  # Convert ExternalData placeholder file names to DATA{} syntax.
+  foreach(alg ${hash_algs})
+    string(REGEX REPLACE "([^ ;]+)\\.${alg}" "DATA{\\1}" AST_FILES "${AST_FILES}")
+  endforeach()
+
+  set(DATA_TARGET_NAME "${test_name}")
+  string(FIND "${AST_FILES}" "DATA{" data_files_found)
+  if(${data_files_found} GREATER "-1")
+    # Use ExternalData if any DATA{} files were found.
+    ExternalData_Expand_Arguments(
+      ${DATA_TARGET_NAME}
+      extern_data_output
+      ${AST_FILES})
+    ExternalData_Add_Target(${DATA_TARGET_NAME})
+  else()
+    add_custom_target(${DATA_TARGET_NAME} ALL)
+    set(extern_data_output ${AST_FILES})
+  endif()
+
+  # For regular files on Linux, just copy them directly.
+  foreach(path ${AST_FILES})
+    foreach(output ${extern_data_output})
+      if(${output} STREQUAL ${path})
+        # Check if a destination was specified.  If not, we copy by default
+        # into this project's binary directory, preserving its relative path.
+        if(AST_${VAR}_DEST)
+          set(DEST ${CMAKE_BINARY_DIR}/${parent_dir}/${AST_${VAR}_DEST})
+        else()
+          get_filename_component(parent_dir ${path} DIRECTORY)
+          set(DEST "${CMAKE_BINARY_DIR}/${parent_dir}")
+        endif()
+        get_filename_component(extern_data_source ${output} REALPATH)
+        get_filename_component(extern_data_basename ${output} NAME)
+        add_custom_command(
+          TARGET ${DATA_TARGET_NAME} POST_BUILD
+          DEPENDS ${extern_data_source}
+          COMMAND ${CMAKE_COMMAND} -E copy_if_different ${extern_data_source} ${DEST}/${extern_data_basename}
+        )
+      endif()
+    endforeach()
+  endforeach()
+
+  if(ANDROID)
+    string(REGEX REPLACE "DATA{([^ ;]+)}" "\\1"  processed_FILES "${AST_FILES}")
+    add_test(
+      NAME ${test_name}
+      COMMAND ${CMAKE_COMMAND}
+      "-Darg_files_dest=${AST_FILES_DEST}"
+      "-Darg_libs_dest=${AST_LIBS_DEST}"
+      "-Darg_dev_test_dir=${AST_DEVICE_TEST_DIR}"
+      "-Darg_dev_obj_store=${AST_DEVICE_OBJECT_STORE}"
+      "-Darg_no_link_regex=${AST_NO_LINK_REGEX}"
+      "-Darg_files=${processed_FILES}"
+      "-Darg_libs=${AST_LIBS}"
+      "-Darg_src_dir=${CMAKE_CURRENT_SOURCE_DIR}"
+      -P ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/AndroidTestUtilities/PushToAndroidDevice.cmake)
+  endif()
+endfunction()
diff --git a/share/cmake-3.18/Modules/AndroidTestUtilities/PushToAndroidDevice.cmake b/share/cmake-3.22/Modules/AndroidTestUtilities/PushToAndroidDevice.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/AndroidTestUtilities/PushToAndroidDevice.cmake
rename to share/cmake-3.22/Modules/AndroidTestUtilities/PushToAndroidDevice.cmake
diff --git a/share/cmake-3.22/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in b/share/cmake-3.22/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in
new file mode 100644
index 0000000..46b8b2a
--- /dev/null
+++ b/share/cmake-3.22/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in
@@ -0,0 +1,48 @@
+# This is a basic version file for the Config-mode of find_package().
+# It is used by write_basic_package_version_file() as input file for configure_file()
+# to create a version-file which can be installed along a config.cmake file.
+#
+# The created file sets PACKAGE_VERSION_EXACT if the current version string and
+# the requested version string are exactly the same and it sets
+# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version.
+# The variable CVF_VERSION must be set before calling configure_file().
+
+set(PACKAGE_VERSION "@CVF_VERSION@")
+
+if (PACKAGE_FIND_VERSION_RANGE)
+  # Package version must be in the requested version range
+  if ((PACKAGE_FIND_VERSION_RANGE_MIN STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MIN)
+      OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_GREATER PACKAGE_FIND_VERSION_MAX)
+        OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_GREATER_EQUAL PACKAGE_FIND_VERSION_MAX)))
+    set(PACKAGE_VERSION_COMPATIBLE FALSE)
+  else()
+    set(PACKAGE_VERSION_COMPATIBLE TRUE)
+  endif()
+else()
+  if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
+    set(PACKAGE_VERSION_COMPATIBLE FALSE)
+  else()
+    set(PACKAGE_VERSION_COMPATIBLE TRUE)
+    if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
+      set(PACKAGE_VERSION_EXACT TRUE)
+    endif()
+  endif()
+endif()
+
+
+# if the installed project requested no architecture check, don't perform the check
+if("@CVF_ARCH_INDEPENDENT@")
+  return()
+endif()
+
+# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
+if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "@CMAKE_SIZEOF_VOID_P@" STREQUAL "")
+  return()
+endif()
+
+# check that the installed version has the same 32/64bit-ness as the one which is currently searching:
+if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "@CMAKE_SIZEOF_VOID_P@")
+  math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8")
+  set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
+  set(PACKAGE_VERSION_UNSUITABLE TRUE)
+endif()
diff --git a/share/cmake-3.22/Modules/BasicConfigVersion-ExactVersion.cmake.in b/share/cmake-3.22/Modules/BasicConfigVersion-ExactVersion.cmake.in
new file mode 100644
index 0000000..c8d2695
--- /dev/null
+++ b/share/cmake-3.22/Modules/BasicConfigVersion-ExactVersion.cmake.in
@@ -0,0 +1,88 @@
+# This is a basic version file for the Config-mode of find_package().
+# It is used by write_basic_package_version_file() as input file for configure_file()
+# to create a version-file which can be installed along a config.cmake file.
+#
+# The created file sets PACKAGE_VERSION_EXACT if the current version string and
+# the requested version string are exactly the same and it sets
+# PACKAGE_VERSION_COMPATIBLE if the current version is equal to the requested version.
+# The tweak version component is ignored.
+# The variable CVF_VERSION must be set before calling configure_file().
+
+
+if (PACKAGE_FIND_VERSION_RANGE)
+  message(AUTHOR_WARNING
+    "`find_package()` specify a version range but the version strategy "
+    "(ExactVersion) of the module `${PACKAGE_FIND_NAME}` is incompatible "
+    "with this request. Only the lower endpoint of the range will be used.")
+endif()
+
+set(PACKAGE_VERSION "@CVF_VERSION@")
+
+if("@CVF_VERSION@" MATCHES "^([0-9]+)\\.([0-9]+)\\.([0-9]+)") # strip the tweak version
+  set(CVF_VERSION_MAJOR "${CMAKE_MATCH_1}")
+  set(CVF_VERSION_MINOR "${CMAKE_MATCH_2}")
+  set(CVF_VERSION_PATCH "${CMAKE_MATCH_3}")
+
+  if(NOT CVF_VERSION_MAJOR VERSION_EQUAL 0)
+    string(REGEX REPLACE "^0+" "" CVF_VERSION_MAJOR "${CVF_VERSION_MAJOR}")
+  endif()
+  if(NOT CVF_VERSION_MINOR VERSION_EQUAL 0)
+    string(REGEX REPLACE "^0+" "" CVF_VERSION_MINOR "${CVF_VERSION_MINOR}")
+  endif()
+  if(NOT CVF_VERSION_PATCH VERSION_EQUAL 0)
+    string(REGEX REPLACE "^0+" "" CVF_VERSION_PATCH "${CVF_VERSION_PATCH}")
+  endif()
+
+  set(CVF_VERSION_NO_TWEAK "${CVF_VERSION_MAJOR}.${CVF_VERSION_MINOR}.${CVF_VERSION_PATCH}")
+else()
+  set(CVF_VERSION_NO_TWEAK "@CVF_VERSION@")
+endif()
+
+if(PACKAGE_FIND_VERSION MATCHES "^([0-9]+)\\.([0-9]+)\\.([0-9]+)") # strip the tweak version
+  set(REQUESTED_VERSION_MAJOR "${CMAKE_MATCH_1}")
+  set(REQUESTED_VERSION_MINOR "${CMAKE_MATCH_2}")
+  set(REQUESTED_VERSION_PATCH "${CMAKE_MATCH_3}")
+
+  if(NOT REQUESTED_VERSION_MAJOR VERSION_EQUAL 0)
+    string(REGEX REPLACE "^0+" "" REQUESTED_VERSION_MAJOR "${REQUESTED_VERSION_MAJOR}")
+  endif()
+  if(NOT REQUESTED_VERSION_MINOR VERSION_EQUAL 0)
+    string(REGEX REPLACE "^0+" "" REQUESTED_VERSION_MINOR "${REQUESTED_VERSION_MINOR}")
+  endif()
+  if(NOT REQUESTED_VERSION_PATCH VERSION_EQUAL 0)
+    string(REGEX REPLACE "^0+" "" REQUESTED_VERSION_PATCH "${REQUESTED_VERSION_PATCH}")
+  endif()
+
+  set(REQUESTED_VERSION_NO_TWEAK
+      "${REQUESTED_VERSION_MAJOR}.${REQUESTED_VERSION_MINOR}.${REQUESTED_VERSION_PATCH}")
+else()
+  set(REQUESTED_VERSION_NO_TWEAK "${PACKAGE_FIND_VERSION}")
+endif()
+
+if(REQUESTED_VERSION_NO_TWEAK STREQUAL CVF_VERSION_NO_TWEAK)
+  set(PACKAGE_VERSION_COMPATIBLE TRUE)
+else()
+  set(PACKAGE_VERSION_COMPATIBLE FALSE)
+endif()
+
+if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
+  set(PACKAGE_VERSION_EXACT TRUE)
+endif()
+
+
+# if the installed project requested no architecture check, don't perform the check
+if("@CVF_ARCH_INDEPENDENT@")
+  return()
+endif()
+
+# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
+if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "@CMAKE_SIZEOF_VOID_P@" STREQUAL "")
+  return()
+endif()
+
+# check that the installed version has the same 32/64bit-ness as the one which is currently searching:
+if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "@CMAKE_SIZEOF_VOID_P@")
+  math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8")
+  set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
+  set(PACKAGE_VERSION_UNSUITABLE TRUE)
+endif()
diff --git a/share/cmake-3.22/Modules/BasicConfigVersion-SameMajorVersion.cmake.in b/share/cmake-3.22/Modules/BasicConfigVersion-SameMajorVersion.cmake.in
new file mode 100644
index 0000000..cf73f60
--- /dev/null
+++ b/share/cmake-3.22/Modules/BasicConfigVersion-SameMajorVersion.cmake.in
@@ -0,0 +1,70 @@
+# This is a basic version file for the Config-mode of find_package().
+# It is used by write_basic_package_version_file() as input file for configure_file()
+# to create a version-file which can be installed along a config.cmake file.
+#
+# The created file sets PACKAGE_VERSION_EXACT if the current version string and
+# the requested version string are exactly the same and it sets
+# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version,
+# but only if the requested major version is the same as the current one.
+# The variable CVF_VERSION must be set before calling configure_file().
+
+
+set(PACKAGE_VERSION "@CVF_VERSION@")
+
+if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
+  set(PACKAGE_VERSION_COMPATIBLE FALSE)
+else()
+
+  if("@CVF_VERSION@" MATCHES "^([0-9]+)\\.")
+    set(CVF_VERSION_MAJOR "${CMAKE_MATCH_1}")
+    if(NOT CVF_VERSION_MAJOR VERSION_EQUAL 0)
+      string(REGEX REPLACE "^0+" "" CVF_VERSION_MAJOR "${CVF_VERSION_MAJOR}")
+    endif()
+  else()
+    set(CVF_VERSION_MAJOR "@CVF_VERSION@")
+  endif()
+
+  if(PACKAGE_FIND_VERSION_RANGE)
+    # both endpoints of the range must have the expected major version
+    math (EXPR CVF_VERSION_MAJOR_NEXT "${CVF_VERSION_MAJOR} + 1")
+    if (NOT PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR
+        OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND NOT PACKAGE_FIND_VERSION_MAX_MAJOR STREQUAL CVF_VERSION_MAJOR)
+          OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND NOT PACKAGE_FIND_VERSION_MAX VERSION_LESS_EQUAL CVF_VERSION_MAJOR_NEXT)))
+      set(PACKAGE_VERSION_COMPATIBLE FALSE)
+    elseif(PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR
+        AND ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS_EQUAL PACKAGE_FIND_VERSION_MAX)
+        OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MAX)))
+      set(PACKAGE_VERSION_COMPATIBLE TRUE)
+    else()
+      set(PACKAGE_VERSION_COMPATIBLE FALSE)
+    endif()
+  else()
+    if(PACKAGE_FIND_VERSION_MAJOR STREQUAL CVF_VERSION_MAJOR)
+      set(PACKAGE_VERSION_COMPATIBLE TRUE)
+    else()
+      set(PACKAGE_VERSION_COMPATIBLE FALSE)
+    endif()
+
+    if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
+      set(PACKAGE_VERSION_EXACT TRUE)
+    endif()
+  endif()
+endif()
+
+
+# if the installed project requested no architecture check, don't perform the check
+if("@CVF_ARCH_INDEPENDENT@")
+  return()
+endif()
+
+# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
+if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "@CMAKE_SIZEOF_VOID_P@" STREQUAL "")
+  return()
+endif()
+
+# check that the installed version has the same 32/64bit-ness as the one which is currently searching:
+if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "@CMAKE_SIZEOF_VOID_P@")
+  math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8")
+  set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
+  set(PACKAGE_VERSION_UNSUITABLE TRUE)
+endif()
diff --git a/share/cmake-3.22/Modules/BasicConfigVersion-SameMinorVersion.cmake.in b/share/cmake-3.22/Modules/BasicConfigVersion-SameMinorVersion.cmake.in
new file mode 100644
index 0000000..ef21df6
--- /dev/null
+++ b/share/cmake-3.22/Modules/BasicConfigVersion-SameMinorVersion.cmake.in
@@ -0,0 +1,90 @@
+# This is a basic version file for the Config-mode of find_package().
+# It is used by write_basic_package_version_file() as input file for configure_file()
+# to create a version-file which can be installed along a config.cmake file.
+#
+# The created file sets PACKAGE_VERSION_EXACT if the current version string and
+# the requested version string are exactly the same and it sets
+# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version,
+# but only if the requested major and minor versions are the same as the current
+# one.
+# The variable CVF_VERSION must be set before calling configure_file().
+
+
+set(PACKAGE_VERSION "@CVF_VERSION@")
+
+if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
+  set(PACKAGE_VERSION_COMPATIBLE FALSE)
+else()
+
+  if("@CVF_VERSION@" MATCHES "^([0-9]+)\\.([0-9]+)")
+    set(CVF_VERSION_MAJOR "${CMAKE_MATCH_1}")
+    set(CVF_VERSION_MINOR "${CMAKE_MATCH_2}")
+
+    if(NOT CVF_VERSION_MAJOR VERSION_EQUAL 0)
+      string(REGEX REPLACE "^0+" "" CVF_VERSION_MAJOR "${CVF_VERSION_MAJOR}")
+    endif()
+    if(NOT CVF_VERSION_MINOR VERSION_EQUAL 0)
+      string(REGEX REPLACE "^0+" "" CVF_VERSION_MINOR "${CVF_VERSION_MINOR}")
+    endif()
+  else()
+    set(CVF_VERSION_MAJOR "@CVF_VERSION@")
+    set(CVF_VERSION_MINOR "")
+  endif()
+
+  if(PACKAGE_FIND_VERSION_RANGE)
+    # both endpoints of the range must have the expected major and minor versions
+    math (EXPR CVF_VERSION_MINOR_NEXT "${CVF_VERSION_MINOR} + 1")
+    if (NOT (PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR
+          AND PACKAGE_FIND_VERSION_MIN_MINOR STREQUAL CVF_VERSION_MINOR)
+        OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE"
+            AND NOT (PACKAGE_FIND_VERSION_MAX_MAJOR STREQUAL CVF_VERSION_MAJOR
+              AND PACKAGE_FIND_VERSION_MAX_MINOR STREQUAL CVF_VERSION_MINOR))
+          OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE"
+            AND NOT PACKAGE_FIND_VERSION_MAX VERSION_LESS_EQUAL ${CVF_VERSION_MAJOR}.${CVF_VERSION_MINOR_NEXT})))
+      set(PACKAGE_VERSION_COMPATIBLE FALSE)
+    elseif(PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR
+        AND PACKAGE_FIND_VERSION_MIN_MINOR STREQUAL CVF_VERSION_MINOR
+        AND ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS_EQUAL PACKAGE_FIND_VERSION_MAX)
+        OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MAX)))
+      set(PACKAGE_VERSION_COMPATIBLE TRUE)
+    else()
+      set(PACKAGE_VERSION_COMPATIBLE FALSE)
+    endif()
+  else()
+    if(NOT PACKAGE_FIND_VERSION_MAJOR VERSION_EQUAL 0)
+      string(REGEX REPLACE "^0+" "" PACKAGE_FIND_VERSION_MAJOR "${PACKAGE_FIND_VERSION_MAJOR}")
+    endif()
+    if(NOT PACKAGE_FIND_VERSION_MINOR VERSION_EQUAL 0)
+      string(REGEX REPLACE "^0+" "" PACKAGE_FIND_VERSION_MINOR "${PACKAGE_FIND_VERSION_MINOR}")
+    endif()
+
+    if((PACKAGE_FIND_VERSION_MAJOR STREQUAL CVF_VERSION_MAJOR) AND
+        (PACKAGE_FIND_VERSION_MINOR STREQUAL CVF_VERSION_MINOR))
+      set(PACKAGE_VERSION_COMPATIBLE TRUE)
+    else()
+      set(PACKAGE_VERSION_COMPATIBLE FALSE)
+    endif()
+
+    if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
+      set(PACKAGE_VERSION_EXACT TRUE)
+    endif()
+  endif()
+endif()
+
+
+# if the installed project requested no architecture check, don't perform the check
+if("@CVF_ARCH_INDEPENDENT@")
+  return()
+endif()
+
+# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
+if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "@CMAKE_SIZEOF_VOID_P@" STREQUAL "")
+  return()
+endif()
+
+# check that the installed version has the same 32/64bit-ness as the one which is currently searching:
+if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "@CMAKE_SIZEOF_VOID_P@")
+  math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8")
+  set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
+  set(PACKAGE_VERSION_UNSUITABLE TRUE)
+endif()
diff --git a/share/cmake-3.22/Modules/BundleUtilities.cmake b/share/cmake-3.22/Modules/BundleUtilities.cmake
new file mode 100644
index 0000000..0beff04
--- /dev/null
+++ b/share/cmake-3.22/Modules/BundleUtilities.cmake
@@ -0,0 +1,1132 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+BundleUtilities
+---------------
+
+Functions to help assemble a standalone bundle application.
+
+A collection of CMake utility functions useful for dealing with ``.app``
+bundles on the Mac and bundle-like directories on any OS.
+
+The following functions are provided by this module:
+
+.. code-block:: cmake
+
+   fixup_bundle
+   copy_and_fixup_bundle
+   verify_app
+   get_bundle_main_executable
+   get_dotapp_dir
+   get_bundle_and_executable
+   get_bundle_all_executables
+   get_item_key
+   get_item_rpaths
+   clear_bundle_keys
+   set_bundle_key_values
+   get_bundle_keys
+   copy_resolved_item_into_bundle
+   copy_resolved_framework_into_bundle
+   fixup_bundle_item
+   verify_bundle_prerequisites
+   verify_bundle_symlinks
+
+Requires CMake 2.6 or greater because it uses function, break and
+``PARENT_SCOPE``.  Also depends on ``GetPrerequisites.cmake``.
+
+DO NOT USE THESE FUNCTIONS AT CONFIGURE TIME (from ``CMakeLists.txt``)!
+Instead, invoke them from an :command:`install(CODE)` or
+:command:`install(SCRIPT)` rule.
+
+.. code-block:: cmake
+
+  fixup_bundle(<app> <libs> <dirs>)
+
+Fix up ``<app>`` bundle in-place and make it standalone, such that it can be
+drag-n-drop copied to another machine and run on that machine as long
+as all of the system libraries are compatible.
+
+If you pass plugins to ``fixup_bundle`` as the libs parameter, you should
+install them or copy them into the bundle before calling ``fixup_bundle``.
+The ``<libs>`` parameter is a list of libraries that must be fixed up, but
+that cannot be determined by ``otool`` output analysis  (i.e. ``plugins``).
+
+Gather all the keys for all the executables and libraries in a bundle,
+and then, for each key, copy each prerequisite into the bundle.  Then
+fix each one up according to its own list of prerequisites.
+
+Then clear all the keys and call ``verify_app`` on the final bundle to
+ensure that it is truly standalone.
+
+.. versionadded:: 3.6
+  As an optional parameter (``IGNORE_ITEM``) a list of file names can be passed,
+  which are then ignored
+  (e.g. ``IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe"``).
+
+.. code-block:: cmake
+
+  copy_and_fixup_bundle(<src> <dst> <libs> <dirs>)
+
+Makes a copy of the bundle ``<src>`` at location ``<dst>`` and then fixes up
+the new copied bundle in-place at ``<dst>``.
+
+.. code-block:: cmake
+
+  verify_app(<app>)
+
+Verifies that an application ``<app>`` appears valid based on running
+analysis tools on it.  Calls :command:`message(FATAL_ERROR)` if the application
+is not verified.
+
+.. versionadded:: 3.6
+  As an optional parameter (``IGNORE_ITEM``) a list of file names can be passed,
+  which are then ignored
+  (e.g. ``IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe"``)
+
+.. code-block:: cmake
+
+  get_bundle_main_executable(<bundle> <result_var>)
+
+The result will be the full path name of the bundle's main executable
+file or an ``error:`` prefixed string if it could not be determined.
+
+.. code-block:: cmake
+
+  get_dotapp_dir(<exe> <dotapp_dir_var>)
+
+Returns the nearest parent dir whose name ends with ``.app`` given the
+full path to an executable.  If there is no such parent dir, then
+simply return the dir containing the executable.
+
+The returned directory may or may not exist.
+
+.. code-block:: cmake
+
+  get_bundle_and_executable(<app> <bundle_var> <executable_var> <valid_var>)
+
+Takes either a ``.app`` directory name or the name of an executable
+nested inside a ``.app`` directory and returns the path to the ``.app``
+directory in ``<bundle_var>`` and the path to its main executable in
+``<executable_var>``.
+
+.. code-block:: cmake
+
+  get_bundle_all_executables(<bundle> <exes_var>)
+
+Scans ``<bundle>`` bundle recursively for all ``<exes_var>`` executable
+files and accumulates them into a variable.
+
+.. code-block:: cmake
+
+  get_item_key(<item> <key_var>)
+
+Given ``<item>`` file name, generate ``<key_var>`` key that should be unique
+considering the set of libraries that need copying or fixing up to
+make a bundle standalone.  This is essentially the file name including
+extension with ``.`` replaced by ``_``
+
+This key is used as a prefix for CMake variables so that we can
+associate a set of variables with a given item based on its key.
+
+.. code-block:: cmake
+
+  clear_bundle_keys(<keys_var>)
+
+Loop over the ``<keys_var>`` list of keys, clearing all the variables
+associated with each key.  After the loop, clear the list of keys itself.
+
+Caller of ``get_bundle_keys`` should call ``clear_bundle_keys`` when done with
+list of keys.
+
+.. code-block:: cmake
+
+  set_bundle_key_values(<keys_var> <context> <item> <exepath> <dirs>
+                        <copyflag> [<rpaths>])
+
+Add ``<keys_var>`` key to the list (if necessary) for the given item.
+If added, also set all the variables associated with that key.
+
+.. code-block:: cmake
+
+  get_bundle_keys(<app> <libs> <dirs> <keys_var>)
+
+Loop over all the executable and library files within ``<app>`` bundle (and
+given as extra ``<libs>``) and accumulate a list of keys representing
+them.  Set values associated with each key such that we can loop over
+all of them and copy prerequisite libs into the bundle and then do
+appropriate ``install_name_tool`` fixups.
+
+.. versionadded:: 3.6
+  As an optional parameter (``IGNORE_ITEM``) a list of file names can be passed,
+  which are then ignored
+  (e.g. ``IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe"``)
+
+.. code-block:: cmake
+
+  copy_resolved_item_into_bundle(<resolved_item> <resolved_embedded_item>)
+
+Copy a resolved item into the bundle if necessary.
+Copy is not necessary, if the ``<resolved_item>`` is "the same as" the
+``<resolved_embedded_item>``.
+
+.. code-block:: cmake
+
+  copy_resolved_framework_into_bundle(<resolved_item> <resolved_embedded_item>)
+
+Copy a resolved framework into the bundle if necessary.
+Copy is not necessary, if the ``<resolved_item>`` is "the same as" the
+``<resolved_embedded_item>``.
+
+By default, ``BU_COPY_FULL_FRAMEWORK_CONTENTS`` is not set.  If you want
+full frameworks embedded in your bundles, set
+``BU_COPY_FULL_FRAMEWORK_CONTENTS`` to ``ON`` before calling fixup_bundle.  By
+default, ``COPY_RESOLVED_FRAMEWORK_INTO_BUNDLE`` copies the framework
+dylib itself plus the framework ``Resources`` directory.
+
+.. code-block:: cmake
+
+  fixup_bundle_item(<resolved_embedded_item> <exepath> <dirs>)
+
+Get the direct/non-system prerequisites of the ``<resolved_embedded_item>``.
+For each prerequisite, change the way it is referenced to the value of
+the ``_EMBEDDED_ITEM`` keyed variable for that prerequisite.  (Most likely
+changing to an ``@executable_path`` style reference.)
+
+This function requires that the ``<resolved_embedded_item>`` be ``inside``
+the bundle already.  In other words, if you pass plugins to ``fixup_bundle``
+as the libs parameter, you should install them or copy them into the
+bundle before calling ``fixup_bundle``.  The ``libs`` parameter is a list of
+libraries that must be fixed up, but that cannot be determined by
+otool output analysis.  (i.e., ``plugins``)
+
+Also, change the id of the item being fixed up to its own
+``_EMBEDDED_ITEM`` value.
+
+Accumulate changes in a local variable and make *one* call to
+``install_name_tool`` at the end of the function with all the changes at
+once.
+
+If the ``BU_CHMOD_BUNDLE_ITEMS`` variable is set then bundle items will be
+marked writable before ``install_name_tool`` tries to change them.
+
+.. code-block:: cmake
+
+  verify_bundle_prerequisites(<bundle> <result_var> <info_var>)
+
+Verifies that the sum of all prerequisites of all files inside the
+bundle are contained within the bundle or are ``system`` libraries,
+presumed to exist everywhere.
+
+.. versionadded:: 3.6
+  As an optional parameter (``IGNORE_ITEM``) a list of file names can be passed,
+  which are then ignored
+  (e.g. ``IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe"``)
+
+.. code-block:: cmake
+
+  verify_bundle_symlinks(<bundle> <result_var> <info_var>)
+
+Verifies that any symlinks found in the ``<bundle>`` bundle point to other files
+that are already also in the bundle...  Anything that points to an
+external file causes this function to fail the verification.
+#]=======================================================================]
+
+function(_warn_cmp0080)
+  cmake_policy(GET_WARNING CMP0080 _cmp0080_warning)
+  message(AUTHOR_WARNING "${_cmp0080_warning}\n")
+endfunction()
+
+# Do not include this module at configure time!
+if(DEFINED CMAKE_GENERATOR)
+  cmake_policy(GET CMP0080 _BundleUtilities_CMP0080)
+  if(_BundleUtilities_CMP0080 STREQUAL "NEW")
+    message(FATAL_ERROR "BundleUtilities cannot be included at configure time!")
+  elseif(NOT _BundleUtilities_CMP0080 STREQUAL "OLD" AND NOT _CMP0080_SUPPRESS_WARNING)
+    _warn_cmp0080()
+  endif()
+endif()
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0057 NEW) # if IN_LIST
+
+# The functions defined in this file depend on the get_prerequisites function
+# (and possibly others) found in:
+#
+include("${CMAKE_CURRENT_LIST_DIR}/GetPrerequisites.cmake")
+
+
+function(get_bundle_main_executable bundle result_var)
+  set(result "error: '${bundle}/Contents/Info.plist' file does not exist")
+
+  if(EXISTS "${bundle}/Contents/Info.plist")
+    set(result "error: no CFBundleExecutable in '${bundle}/Contents/Info.plist' file")
+    set(line_is_main_executable 0)
+    set(bundle_executable "")
+
+    # Read Info.plist as a list of lines:
+    #
+    set(eol_char "E")
+    file(READ "${bundle}/Contents/Info.plist" info_plist)
+    string(REPLACE ";" "\\;" info_plist "${info_plist}")
+    string(REPLACE "\n" "${eol_char};" info_plist "${info_plist}")
+    string(REPLACE "\r" "${eol_char};" info_plist "${info_plist}")
+
+    # Scan the lines for "<key>CFBundleExecutable</key>" - the line after that
+    # is the name of the main executable.
+    #
+    foreach(line ${info_plist})
+      if(line_is_main_executable)
+        string(REGEX REPLACE "^.*<string>(.*)</string>.*$" "\\1" bundle_executable "${line}")
+        break()
+      endif()
+
+      if(line MATCHES "<key>CFBundleExecutable</key>")
+        set(line_is_main_executable 1)
+      endif()
+    endforeach()
+
+    if(NOT bundle_executable STREQUAL "")
+      if(EXISTS "${bundle}/Contents/MacOS/${bundle_executable}")
+        set(result "${bundle}/Contents/MacOS/${bundle_executable}")
+      else()
+
+        # Ultimate goal:
+        # If not in "Contents/MacOS" then scan the bundle for matching files. If
+        # there is only one executable file that matches, then use it, otherwise
+        # it's an error...
+        #
+        #file(GLOB_RECURSE file_list "${bundle}/${bundle_executable}")
+
+        # But for now, pragmatically, it's an error. Expect the main executable
+        # for the bundle to be in Contents/MacOS, it's an error if it's not:
+        #
+        set(result "error: '${bundle}/Contents/MacOS/${bundle_executable}' does not exist")
+      endif()
+    endif()
+  else()
+    #
+    # More inclusive technique... (This one would work on Windows and Linux
+    # too, if a developer followed the typical Mac bundle naming convention...)
+    #
+    # If there is no Info.plist file, try to find an executable with the same
+    # base name as the .app directory:
+    #
+  endif()
+
+  set(${result_var} "${result}" PARENT_SCOPE)
+endfunction()
+
+
+function(get_dotapp_dir exe dotapp_dir_var)
+  set(s "${exe}")
+
+  if(s MATCHES "/.*\\.app/")
+    # If there is a ".app" parent directory,
+    # ascend until we hit it:
+    #   (typical of a Mac bundle executable)
+    #
+    set(done 0)
+    while(NOT ${done})
+      get_filename_component(snamewe "${s}" NAME_WE)
+      get_filename_component(sname "${s}" NAME)
+      get_filename_component(sdir "${s}" PATH)
+      set(s "${sdir}")
+      if(sname MATCHES "\\.app$")
+        set(done 1)
+        set(dotapp_dir "${sdir}/${sname}")
+      endif()
+    endwhile()
+  else()
+    # Otherwise use a directory containing the exe
+    #   (typical of a non-bundle executable on Mac, Windows or Linux)
+    #
+    is_file_executable("${s}" is_executable)
+    if(is_executable)
+      get_filename_component(sdir "${s}" PATH)
+      set(dotapp_dir "${sdir}")
+    else()
+      set(dotapp_dir "${s}")
+    endif()
+  endif()
+
+
+  set(${dotapp_dir_var} "${dotapp_dir}" PARENT_SCOPE)
+endfunction()
+
+
+function(get_bundle_and_executable app bundle_var executable_var valid_var)
+  set(valid 0)
+
+  if(EXISTS "${app}")
+    # Is it a directory ending in .app?
+    if(IS_DIRECTORY "${app}")
+      if(app MATCHES "\\.app$")
+        get_bundle_main_executable("${app}" executable)
+        if(EXISTS "${app}" AND EXISTS "${executable}")
+          set(${bundle_var} "${app}" PARENT_SCOPE)
+          set(${executable_var} "${executable}" PARENT_SCOPE)
+          set(valid 1)
+          #message(STATUS "info: handled .app directory case...")
+        else()
+          message(STATUS "warning: *NOT* handled - .app directory case...")
+        endif()
+      else()
+        message(STATUS "warning: *NOT* handled - directory but not .app case...")
+      endif()
+    else()
+      # Is it an executable file?
+      is_file_executable("${app}" is_executable)
+      if(is_executable)
+        get_dotapp_dir("${app}" dotapp_dir)
+        if(EXISTS "${dotapp_dir}")
+          set(${bundle_var} "${dotapp_dir}" PARENT_SCOPE)
+          set(${executable_var} "${app}" PARENT_SCOPE)
+          set(valid 1)
+          #message(STATUS "info: handled executable file in .app dir case...")
+        else()
+          get_filename_component(app_dir "${app}" PATH)
+          set(${bundle_var} "${app_dir}" PARENT_SCOPE)
+          set(${executable_var} "${app}" PARENT_SCOPE)
+          set(valid 1)
+          #message(STATUS "info: handled executable file in any dir case...")
+        endif()
+      else()
+        message(STATUS "warning: *NOT* handled - not .app dir, not executable file...")
+      endif()
+    endif()
+  else()
+    message(STATUS "warning: *NOT* handled - directory/file does not exist...")
+  endif()
+
+  if(NOT valid)
+    set(${bundle_var} "error: not a bundle" PARENT_SCOPE)
+    set(${executable_var} "error: not a bundle" PARENT_SCOPE)
+  endif()
+
+  set(${valid_var} ${valid} PARENT_SCOPE)
+endfunction()
+
+
+function(get_bundle_all_executables bundle exes_var)
+  set(exes "")
+
+  if(UNIX)
+    find_program(find_cmd "find")
+    mark_as_advanced(find_cmd)
+  endif()
+
+  # find command is much quicker than checking every file one by one on Unix
+  # which can take long time for large bundles, and since anyway we expect
+  # executable to have execute flag set we can narrow the list much quicker.
+  if(find_cmd)
+    execute_process(COMMAND "${find_cmd}" "${bundle}"
+      -type f \( -perm -0100 -o -perm -0010 -o -perm -0001 \)
+      OUTPUT_VARIABLE file_list
+      OUTPUT_STRIP_TRAILING_WHITESPACE
+      )
+    string(REPLACE "\n" ";" file_list "${file_list}")
+  else()
+    file(GLOB_RECURSE file_list "${bundle}/*")
+  endif()
+
+  foreach(f ${file_list})
+    is_file_executable("${f}" is_executable)
+    if(is_executable)
+      set(exes ${exes} "${f}")
+    endif()
+  endforeach()
+
+  set(${exes_var} "${exes}" PARENT_SCOPE)
+endfunction()
+
+
+function(get_item_rpaths item rpaths_var)
+  if(APPLE)
+    find_program(otool_cmd "otool")
+    mark_as_advanced(otool_cmd)
+  endif()
+
+  if(otool_cmd)
+    execute_process(
+      COMMAND "${otool_cmd}" -l "${item}"
+      OUTPUT_VARIABLE load_cmds_ov
+      RESULT_VARIABLE otool_rv
+      ERROR_VARIABLE otool_ev
+      )
+    if(NOT otool_rv STREQUAL "0")
+      message(FATAL_ERROR "otool -l failed: ${otool_rv}\n${otool_ev}")
+    endif()
+    string(REGEX REPLACE "[^\n]+cmd LC_RPATH\n[^\n]+\n[^\n]+path ([^\n]+) \\(offset[^\n]+\n" "rpath \\1\n" load_cmds_ov "${load_cmds_ov}")
+    string(REGEX MATCHALL "rpath [^\n]+" load_cmds_ov "${load_cmds_ov}")
+    string(REGEX REPLACE "rpath " "" load_cmds_ov "${load_cmds_ov}")
+    if(load_cmds_ov)
+      foreach(rpath ${load_cmds_ov})
+        gp_append_unique(${rpaths_var} "${rpath}")
+      endforeach()
+    endif()
+  endif()
+
+  if(UNIX AND NOT APPLE)
+    file(READ_ELF ${item} RPATH rpath_var RUNPATH runpath_var CAPTURE_ERROR error_var)
+    get_filename_component(item_dir ${item} DIRECTORY)
+    foreach(rpath ${rpath_var} ${runpath_var})
+      # Substitute $ORIGIN with the exepath and add to the found rpaths
+      string(REPLACE "$ORIGIN" "${item_dir}" rpath "${rpath}")
+      gp_append_unique(${rpaths_var} "${rpath}")
+    endforeach()
+  endif()
+
+  set(${rpaths_var} ${${rpaths_var}} PARENT_SCOPE)
+endfunction()
+
+
+function(get_item_key item key_var)
+  get_filename_component(item_name "${item}" NAME)
+  if(WIN32)
+    string(TOLOWER "${item_name}" item_name)
+  endif()
+  string(REPLACE "." "_" ${key_var} "${item_name}")
+  set(${key_var} ${${key_var}} PARENT_SCOPE)
+endfunction()
+
+
+function(clear_bundle_keys keys_var)
+  foreach(key ${${keys_var}})
+    set(${key}_ITEM PARENT_SCOPE)
+    set(${key}_RESOLVED_ITEM PARENT_SCOPE)
+    set(${key}_DEFAULT_EMBEDDED_PATH PARENT_SCOPE)
+    set(${key}_EMBEDDED_ITEM PARENT_SCOPE)
+    set(${key}_RESOLVED_EMBEDDED_ITEM PARENT_SCOPE)
+    set(${key}_COPYFLAG PARENT_SCOPE)
+    set(${key}_RPATHS PARENT_SCOPE)
+  endforeach()
+  set(${keys_var} PARENT_SCOPE)
+endfunction()
+
+
+function(set_bundle_key_values keys_var context item exepath dirs copyflag)
+  if(ARGC GREATER 6)
+    set(rpaths "${ARGV6}")
+  else()
+    set(rpaths "")
+  endif()
+  get_filename_component(item_name "${item}" NAME)
+
+  get_item_key("${item}" key)
+
+  list(LENGTH ${keys_var} length_before)
+  gp_append_unique(${keys_var} "${key}")
+  list(LENGTH ${keys_var} length_after)
+
+  if(NOT length_before EQUAL length_after)
+    gp_resolve_item("${context}" "${item}" "${exepath}" "${dirs}" resolved_item "${rpaths}")
+
+    gp_item_default_embedded_path("${item}" default_embedded_path)
+
+    get_item_rpaths("${resolved_item}" item_rpaths)
+
+    if((NOT item MATCHES "\\.dylib$") AND (item MATCHES "[^/]+\\.framework/"))
+      # For frameworks, construct the name under the embedded path from the
+      # opening "${item_name}.framework/" to the closing "/${item_name}":
+      #
+      string(REGEX REPLACE "^.*(${item_name}.framework/.*/?${item_name}).*$" "${default_embedded_path}/\\1" embedded_item "${item}")
+    else()
+      # For other items, just use the same name as the original, but in the
+      # embedded path:
+      #
+      set(embedded_item "${default_embedded_path}/${item_name}")
+    endif()
+
+    # Replace @executable_path and resolve ".." references:
+    #
+    string(REPLACE "@executable_path" "${exepath}" resolved_embedded_item "${embedded_item}")
+    get_filename_component(resolved_embedded_item "${resolved_embedded_item}" ABSOLUTE)
+
+    # *But* -- if we are not copying, then force resolved_embedded_item to be
+    # the same as resolved_item. In the case of multiple executables in the
+    # original bundle, using the default_embedded_path results in looking for
+    # the resolved executable next to the main bundle executable. This is here
+    # so that exes in the other sibling directories (like "bin") get fixed up
+    # properly...
+    #
+    if(NOT copyflag)
+      set(resolved_embedded_item "${resolved_item}")
+    endif()
+
+    set(${keys_var} ${${keys_var}} PARENT_SCOPE)
+    set(${key}_ITEM "${item}" PARENT_SCOPE)
+    set(${key}_RESOLVED_ITEM "${resolved_item}" PARENT_SCOPE)
+    set(${key}_DEFAULT_EMBEDDED_PATH "${default_embedded_path}" PARENT_SCOPE)
+    set(${key}_EMBEDDED_ITEM "${embedded_item}" PARENT_SCOPE)
+    set(${key}_RESOLVED_EMBEDDED_ITEM "${resolved_embedded_item}" PARENT_SCOPE)
+    set(${key}_COPYFLAG "${copyflag}" PARENT_SCOPE)
+    set(${key}_RPATHS "${item_rpaths}" PARENT_SCOPE)
+    set(${key}_RDEP_RPATHS "${rpaths}" PARENT_SCOPE)
+  else()
+    #message("warning: item key '${key}' already in the list, subsequent references assumed identical to first")
+  endif()
+endfunction()
+
+
+function(get_bundle_keys app libs dirs keys_var)
+  set(${keys_var} PARENT_SCOPE)
+
+  set(options)
+  set(oneValueArgs)
+  set(multiValueArgs IGNORE_ITEM)
+  cmake_parse_arguments(CFG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
+
+  get_bundle_and_executable("${app}" bundle executable valid)
+  if(valid)
+    # Always use the exepath of the main bundle executable for @executable_path
+    # replacements:
+    #
+    get_filename_component(exepath "${executable}" PATH)
+
+    # But do fixups on all executables in the bundle:
+    #
+    get_bundle_all_executables("${bundle}" exes)
+
+    # Set keys for main executable first:
+    #
+    set_bundle_key_values(${keys_var} "${executable}" "${executable}" "${exepath}" "${dirs}" 0)
+
+    # Get rpaths specified by main executable:
+    #
+    get_item_key("${executable}" executable_key)
+    set(main_rpaths "${${executable_key}_RPATHS}")
+
+    # For each extra lib, accumulate a key as well and then also accumulate
+    # any of its prerequisites. (Extra libs are typically dynamically loaded
+    # plugins: libraries that are prerequisites for full runtime functionality
+    # but that do not show up in otool -L output...)
+    #
+    foreach(lib ${libs})
+      set_bundle_key_values(${keys_var} "${lib}" "${lib}" "${exepath}" "${dirs}" 0 "${main_rpaths}")
+
+      set(prereqs "")
+      get_filename_component(prereq_filename ${lib} NAME)
+
+      if(NOT prereq_filename IN_LIST CFG_IGNORE_ITEM)
+        get_prerequisites("${lib}" prereqs 1 1 "${exepath}" "${dirs}" "${main_rpaths}")
+        foreach(pr ${prereqs})
+          set_bundle_key_values(${keys_var} "${lib}" "${pr}" "${exepath}" "${dirs}" 1 "${main_rpaths}")
+        endforeach()
+      else()
+        message(STATUS "Ignoring file: ${prereq_filename}")
+      endif()
+    endforeach()
+
+    # For each executable found in the bundle, accumulate keys as we go.
+    # The list of keys should be complete when all prerequisites of all
+    # binaries in the bundle have been analyzed.
+    #
+    foreach(exe ${exes})
+      # Main executable is scanned first above:
+      #
+      if(NOT exe STREQUAL executable)
+        # Add the exe itself to the keys:
+        #
+        set_bundle_key_values(${keys_var} "${exe}" "${exe}" "${exepath}" "${dirs}" 0 "${main_rpaths}")
+
+        # Get rpaths specified by executable:
+        #
+        get_item_key("${exe}" exe_key)
+        set(exe_rpaths "${main_rpaths}" "${${exe_key}_RPATHS}")
+      else()
+        set(exe_rpaths "${main_rpaths}")
+      endif()
+
+      # Add each prerequisite to the keys:
+      #
+      set(prereqs "")
+      get_filename_component(prereq_filename ${exe} NAME)
+
+      if(NOT prereq_filename IN_LIST CFG_IGNORE_ITEM)
+        get_prerequisites("${exe}" prereqs 1 1 "${exepath}" "${dirs}" "${exe_rpaths}")
+        foreach(pr ${prereqs})
+          set_bundle_key_values(${keys_var} "${exe}" "${pr}" "${exepath}" "${dirs}" 1 "${exe_rpaths}")
+        endforeach()
+      else()
+        message(STATUS "Ignoring file: ${prereq_filename}")
+      endif()
+    endforeach()
+
+    # preserve library symlink structure
+    foreach(key ${${keys_var}})
+      if("${${key}_COPYFLAG}" STREQUAL "1")
+        if(IS_SYMLINK "${${key}_RESOLVED_ITEM}")
+          get_filename_component(target "${${key}_RESOLVED_ITEM}" REALPATH)
+          set_bundle_key_values(${keys_var} "${exe}" "${target}" "${exepath}" "${dirs}" 1 "${exe_rpaths}")
+          get_item_key("${target}" targetkey)
+
+          if(WIN32)
+            # ignore case on Windows
+            string(TOLOWER "${${key}_RESOLVED_ITEM}" resolved_item_compare)
+            string(TOLOWER "${${targetkey}_RESOLVED_EMBEDDED_ITEM}" resolved_embedded_item_compare)
+          else()
+            set(resolved_item_compare "${${key}_RESOLVED_ITEM}")
+            set(resolved_embedded_item_compare "${${targetkey}_RESOLVED_EMBEDDED_ITEM}")
+          endif()
+          get_filename_component(resolved_item_compare "${resolved_item_compare}" NAME)
+          get_filename_component(resolved_embedded_item_compare "${resolved_embedded_item_compare}" NAME)
+
+          if(NOT resolved_item_compare STREQUAL resolved_embedded_item_compare)
+            set(${key}_COPYFLAG "2")
+            set(${key}_RESOLVED_ITEM "${${targetkey}_RESOLVED_EMBEDDED_ITEM}")
+          endif()
+
+        endif()
+      endif()
+    endforeach()
+    # Propagate values to caller's scope:
+    #
+    set(${keys_var} ${${keys_var}} PARENT_SCOPE)
+    foreach(key ${${keys_var}})
+      set(${key}_ITEM "${${key}_ITEM}" PARENT_SCOPE)
+      set(${key}_RESOLVED_ITEM "${${key}_RESOLVED_ITEM}" PARENT_SCOPE)
+      set(${key}_DEFAULT_EMBEDDED_PATH "${${key}_DEFAULT_EMBEDDED_PATH}" PARENT_SCOPE)
+      set(${key}_EMBEDDED_ITEM "${${key}_EMBEDDED_ITEM}" PARENT_SCOPE)
+      set(${key}_RESOLVED_EMBEDDED_ITEM "${${key}_RESOLVED_EMBEDDED_ITEM}" PARENT_SCOPE)
+      set(${key}_COPYFLAG "${${key}_COPYFLAG}" PARENT_SCOPE)
+      set(${key}_RPATHS "${${key}_RPATHS}" PARENT_SCOPE)
+      set(${key}_RDEP_RPATHS "${${key}_RDEP_RPATHS}" PARENT_SCOPE)
+    endforeach()
+  endif()
+endfunction()
+
+function(link_resolved_item_into_bundle resolved_item resolved_embedded_item)
+  if(WIN32)
+    # ignore case on Windows
+    string(TOLOWER "${resolved_item}" resolved_item_compare)
+    string(TOLOWER "${resolved_embedded_item}" resolved_embedded_item_compare)
+  else()
+    set(resolved_item_compare "${resolved_item}")
+    set(resolved_embedded_item_compare "${resolved_embedded_item}")
+  endif()
+
+  if(resolved_item_compare STREQUAL resolved_embedded_item_compare)
+    message(STATUS "warning: resolved_item == resolved_embedded_item - not linking...")
+  else()
+    get_filename_component(target_dir "${resolved_embedded_item}" DIRECTORY)
+    file(RELATIVE_PATH symlink_target "${target_dir}" "${resolved_item}")
+    if (NOT EXISTS "${target_dir}")
+      file(MAKE_DIRECTORY "${target_dir}")
+    endif()
+    execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "${symlink_target}" "${resolved_embedded_item}")
+  endif()
+endfunction()
+
+function(copy_resolved_item_into_bundle resolved_item resolved_embedded_item)
+  if(WIN32)
+    # ignore case on Windows
+    string(TOLOWER "${resolved_item}" resolved_item_compare)
+    string(TOLOWER "${resolved_embedded_item}" resolved_embedded_item_compare)
+  else()
+    set(resolved_item_compare "${resolved_item}")
+    set(resolved_embedded_item_compare "${resolved_embedded_item}")
+  endif()
+
+  if(resolved_item_compare STREQUAL resolved_embedded_item_compare)
+    message(STATUS "warning: resolved_item == resolved_embedded_item - not copying...")
+  else()
+    #message(STATUS "copying COMMAND ${CMAKE_COMMAND} -E copy ${resolved_item} ${resolved_embedded_item}")
+    execute_process(COMMAND ${CMAKE_COMMAND} -E copy "${resolved_item}" "${resolved_embedded_item}")
+    if(UNIX AND NOT APPLE)
+      file(RPATH_REMOVE FILE "${resolved_embedded_item}")
+    endif()
+  endif()
+
+endfunction()
+
+
+function(copy_resolved_framework_into_bundle resolved_item resolved_embedded_item)
+  if(WIN32)
+    # ignore case on Windows
+    string(TOLOWER "${resolved_item}" resolved_item_compare)
+    string(TOLOWER "${resolved_embedded_item}" resolved_embedded_item_compare)
+  else()
+    set(resolved_item_compare "${resolved_item}")
+    set(resolved_embedded_item_compare "${resolved_embedded_item}")
+  endif()
+
+  if(resolved_item_compare STREQUAL resolved_embedded_item_compare)
+    message(STATUS "warning: resolved_item == resolved_embedded_item - not copying...")
+  else()
+    if(BU_COPY_FULL_FRAMEWORK_CONTENTS)
+      # Full Framework (everything):
+      get_filename_component(resolved_dir "${resolved_item}" PATH)
+      get_filename_component(resolved_dir "${resolved_dir}/../.." ABSOLUTE)
+      get_filename_component(resolved_embedded_dir "${resolved_embedded_item}" PATH)
+      get_filename_component(resolved_embedded_dir "${resolved_embedded_dir}/../.." ABSOLUTE)
+      #message(STATUS "copying COMMAND ${CMAKE_COMMAND} -E copy_directory '${resolved_dir}' '${resolved_embedded_dir}'")
+      execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory "${resolved_dir}" "${resolved_embedded_dir}")
+    else()
+      # Framework lib itself:
+      #message(STATUS "copying COMMAND ${CMAKE_COMMAND} -E copy ${resolved_item} ${resolved_embedded_item}")
+      execute_process(COMMAND ${CMAKE_COMMAND} -E copy "${resolved_item}" "${resolved_embedded_item}")
+
+      # Plus Resources, if they exist:
+      string(REGEX REPLACE "^(.*)/[^/]+$" "\\1/Resources" resolved_resources "${resolved_item}")
+      string(REGEX REPLACE "^(.*)/[^/]+$" "\\1/Resources" resolved_embedded_resources "${resolved_embedded_item}")
+      if(EXISTS "${resolved_resources}")
+        #message(STATUS "copying COMMAND ${CMAKE_COMMAND} -E copy_directory '${resolved_resources}' '${resolved_embedded_resources}'")
+        execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory "${resolved_resources}" "${resolved_embedded_resources}")
+      endif()
+
+      # Some frameworks e.g. Qt put Info.plist in wrong place, so when it is
+      # missing in resources, copy it from other well known incorrect locations:
+      if(NOT EXISTS "${resolved_resources}/Info.plist")
+        # Check for Contents/Info.plist in framework root (older Qt SDK):
+        string(REGEX REPLACE "^(.*)/[^/]+/[^/]+/[^/]+$" "\\1/Contents/Info.plist" resolved_info_plist "${resolved_item}")
+        string(REGEX REPLACE "^(.*)/[^/]+$" "\\1/Resources/Info.plist" resolved_embedded_info_plist "${resolved_embedded_item}")
+        if(EXISTS "${resolved_info_plist}")
+          #message(STATUS "copying COMMAND ${CMAKE_COMMAND} -E copy_directory '${resolved_info_plist}' '${resolved_embedded_info_plist}'")
+          execute_process(COMMAND ${CMAKE_COMMAND} -E copy "${resolved_info_plist}" "${resolved_embedded_info_plist}")
+        endif()
+      endif()
+
+      # Check if framework is versioned and fix it layout
+      string(REGEX REPLACE "^.*/([^/]+)/[^/]+$" "\\1" resolved_embedded_version "${resolved_embedded_item}")
+      string(REGEX REPLACE "^(.*)/[^/]+/[^/]+$" "\\1" resolved_embedded_versions "${resolved_embedded_item}")
+      string(REGEX REPLACE "^.*/([^/]+)/[^/]+/[^/]+$" "\\1" resolved_embedded_versions_basename "${resolved_embedded_item}")
+      if(resolved_embedded_versions_basename STREQUAL "Versions")
+        # Ensure Current symlink points to the framework version
+        if(NOT EXISTS "${resolved_embedded_versions}/Current")
+          execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "${resolved_embedded_version}" "${resolved_embedded_versions}/Current")
+        endif()
+        # Restore symlinks in framework root pointing to current framework
+        # binary and resources:
+        string(REGEX REPLACE "^(.*)/[^/]+/[^/]+/[^/]+$" "\\1" resolved_embedded_root "${resolved_embedded_item}")
+        string(REGEX REPLACE "^.*/([^/]+)$" "\\1" resolved_embedded_item_basename "${resolved_embedded_item}")
+        if(NOT EXISTS "${resolved_embedded_root}/${resolved_embedded_item_basename}")
+          execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "Versions/Current/${resolved_embedded_item_basename}" "${resolved_embedded_root}/${resolved_embedded_item_basename}")
+        endif()
+        if(NOT EXISTS "${resolved_embedded_root}/Resources")
+          execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "Versions/Current/Resources" "${resolved_embedded_root}/Resources")
+        endif()
+      endif()
+    endif()
+    if(UNIX AND NOT APPLE)
+      file(RPATH_REMOVE FILE "${resolved_embedded_item}")
+    endif()
+  endif()
+
+endfunction()
+
+
+function(fixup_bundle_item resolved_embedded_item exepath dirs)
+  # This item's key is "ikey":
+  #
+  get_item_key("${resolved_embedded_item}" ikey)
+
+  # Ensure the item is "inside the .app bundle" -- it should not be fixed up if
+  # it is not in the .app bundle... Otherwise, we'll modify files in the build
+  # tree, or in other varied locations around the file system, with our call to
+  # install_name_tool. Make sure that doesn't happen here:
+  #
+  get_dotapp_dir("${exepath}" exe_dotapp_dir)
+  string(LENGTH "${exe_dotapp_dir}/" exe_dotapp_dir_length)
+  string(LENGTH "${resolved_embedded_item}" resolved_embedded_item_length)
+  set(path_too_short 0)
+  set(is_embedded 0)
+  if(resolved_embedded_item_length LESS exe_dotapp_dir_length)
+    set(path_too_short 1)
+  endif()
+  if(NOT path_too_short)
+    string(SUBSTRING "${resolved_embedded_item}" 0 ${exe_dotapp_dir_length} item_substring)
+    if("${exe_dotapp_dir}/" STREQUAL item_substring)
+      set(is_embedded 1)
+    endif()
+  endif()
+  if(NOT is_embedded)
+    message("  exe_dotapp_dir/='${exe_dotapp_dir}/'")
+    message("  item_substring='${item_substring}'")
+    message("  resolved_embedded_item='${resolved_embedded_item}'")
+    message("")
+    message("Install or copy the item into the bundle before calling fixup_bundle.")
+    message("Or maybe there's a typo or incorrect path in one of the args to fixup_bundle?")
+    message("")
+    message(FATAL_ERROR "cannot fixup an item that is not in the bundle...")
+  endif()
+
+  set(rpaths "${${ikey}_RPATHS}" "${${ikey}_RDEP_RPATHS}")
+
+  set(prereqs "")
+  get_prerequisites("${resolved_embedded_item}" prereqs 1 0 "${exepath}" "${dirs}" "${rpaths}")
+
+  set(changes "")
+
+  foreach(pr ${prereqs})
+    # Each referenced item's key is "rkey" in the loop:
+    #
+    get_item_key("${pr}" rkey)
+
+    if(NOT "${${rkey}_EMBEDDED_ITEM}" STREQUAL "")
+      set(changes ${changes} "-change" "${pr}" "${${rkey}_EMBEDDED_ITEM}")
+    else()
+      message("warning: unexpected reference to '${pr}'")
+    endif()
+  endforeach()
+
+  if(BU_CHMOD_BUNDLE_ITEMS)
+    execute_process(COMMAND chmod u+w "${resolved_embedded_item}")
+  endif()
+
+  # CMAKE_INSTALL_NAME_TOOL may not be set if executed in script mode
+  # Duplicated from CMakeFindBinUtils.cmake
+  find_program(CMAKE_INSTALL_NAME_TOOL NAMES install_name_tool HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
+
+  # Only if install_name_tool supports -delete_rpath:
+  #
+  execute_process(COMMAND ${CMAKE_INSTALL_NAME_TOOL}
+    OUTPUT_VARIABLE install_name_tool_usage
+    ERROR_VARIABLE  install_name_tool_usage
+    )
+  if(install_name_tool_usage MATCHES ".*-delete_rpath.*")
+    foreach(rpath ${${ikey}_RPATHS})
+      set(changes ${changes} -delete_rpath "${rpath}")
+    endforeach()
+  endif()
+
+  if(${ikey}_EMBEDDED_ITEM)
+    set(changes ${changes} -id "${${ikey}_EMBEDDED_ITEM}")
+  endif()
+
+  # Change this item's id and all of its references in one call
+  # to install_name_tool:
+  #
+  if(changes)
+    # Check for a script by extension (.bat,.sh,...) or if the file starts with "#!" (shebang)
+    file(READ ${resolved_embedded_item} file_contents LIMIT 5)
+    if(NOT "${resolved_embedded_item}" MATCHES "\\.(bat|c?sh|bash|ksh|cmd)$" AND
+       NOT file_contents MATCHES "^#!")
+      set(cmd ${CMAKE_INSTALL_NAME_TOOL} ${changes} "${resolved_embedded_item}")
+      execute_process(COMMAND ${cmd} RESULT_VARIABLE install_name_tool_result)
+      if(NOT install_name_tool_result EQUAL 0)
+        string(REPLACE ";" "' '" msg "'${cmd}'")
+        message(FATAL_ERROR "Command failed:\n ${msg}")
+      endif()
+    endif()
+  endif()
+endfunction()
+
+
+function(fixup_bundle app libs dirs)
+  message(STATUS "fixup_bundle")
+  message(STATUS "  app='${app}'")
+  message(STATUS "  libs='${libs}'")
+  message(STATUS "  dirs='${dirs}'")
+
+  set(options)
+  set(oneValueArgs)
+  set(multiValueArgs IGNORE_ITEM)
+  cmake_parse_arguments(CFG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
+
+  message(STATUS "  ignoreItems='${CFG_IGNORE_ITEM}'")
+
+  get_bundle_and_executable("${app}" bundle executable valid)
+  if(valid)
+    get_filename_component(exepath "${executable}" PATH)
+
+    message(STATUS "fixup_bundle: preparing...")
+    get_bundle_keys("${app}" "${libs}" "${dirs}" keys IGNORE_ITEM "${CFG_IGNORE_ITEM}")
+
+    message(STATUS "fixup_bundle: copying...")
+    list(LENGTH keys n)
+    math(EXPR n ${n}*2)
+
+    set(i 0)
+    foreach(key ${keys})
+      math(EXPR i ${i}+1)
+      if("${${key}_COPYFLAG}" STREQUAL "2")
+        message(STATUS "${i}/${n}: linking '${${key}_RESOLVED_ITEM}' -> '${${key}_RESOLVED_EMBEDDED_ITEM}'")
+      elseif(${${key}_COPYFLAG})
+        message(STATUS "${i}/${n}: copying '${${key}_RESOLVED_ITEM}'")
+      else()
+        message(STATUS "${i}/${n}: *NOT* copying '${${key}_RESOLVED_ITEM}'")
+      endif()
+
+      set(show_status 0)
+      if(show_status)
+        message(STATUS "key='${key}'")
+        message(STATUS "item='${${key}_ITEM}'")
+        message(STATUS "resolved_item='${${key}_RESOLVED_ITEM}'")
+        message(STATUS "default_embedded_path='${${key}_DEFAULT_EMBEDDED_PATH}'")
+        message(STATUS "embedded_item='${${key}_EMBEDDED_ITEM}'")
+        message(STATUS "resolved_embedded_item='${${key}_RESOLVED_EMBEDDED_ITEM}'")
+        message(STATUS "copyflag='${${key}_COPYFLAG}'")
+        message(STATUS "")
+      endif()
+
+      if("${${key}_COPYFLAG}" STREQUAL "2")
+        link_resolved_item_into_bundle("${${key}_RESOLVED_ITEM}"
+          "${${key}_RESOLVED_EMBEDDED_ITEM}")
+      elseif(${${key}_COPYFLAG})
+        set(item "${${key}_ITEM}")
+        if(item MATCHES "[^/]+\\.framework/")
+          copy_resolved_framework_into_bundle("${${key}_RESOLVED_ITEM}"
+            "${${key}_RESOLVED_EMBEDDED_ITEM}")
+        else()
+          copy_resolved_item_into_bundle("${${key}_RESOLVED_ITEM}"
+            "${${key}_RESOLVED_EMBEDDED_ITEM}")
+        endif()
+      endif()
+    endforeach()
+
+    message(STATUS "fixup_bundle: fixing...")
+    foreach(key ${keys})
+      math(EXPR i ${i}+1)
+      if(APPLE)
+        message(STATUS "${i}/${n}: fixing up '${${key}_RESOLVED_EMBEDDED_ITEM}'")
+        if(NOT "${${key}_COPYFLAG}" STREQUAL "2")
+          fixup_bundle_item("${${key}_RESOLVED_EMBEDDED_ITEM}" "${exepath}" "${dirs}")
+        endif()
+      else()
+        message(STATUS "${i}/${n}: fix-up not required on this platform '${${key}_RESOLVED_EMBEDDED_ITEM}'")
+      endif()
+    endforeach()
+
+    message(STATUS "fixup_bundle: cleaning up...")
+    clear_bundle_keys(keys)
+
+    message(STATUS "fixup_bundle: verifying...")
+    verify_app("${app}" IGNORE_ITEM "${CFG_IGNORE_ITEM}")
+  else()
+    message(SEND_ERROR "error: fixup_bundle: not a valid bundle")
+  endif()
+
+  message(STATUS "fixup_bundle: done")
+endfunction()
+
+
+function(copy_and_fixup_bundle src dst libs dirs)
+  execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory "${src}" "${dst}")
+  fixup_bundle("${dst}" "${libs}" "${dirs}")
+endfunction()
+
+
+function(verify_bundle_prerequisites bundle result_var info_var)
+  set(result 1)
+  set(info "")
+  set(count 0)
+
+  set(options)
+  set(oneValueArgs)
+  set(multiValueArgs IGNORE_ITEM)
+  cmake_parse_arguments(CFG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
+
+  get_bundle_main_executable("${bundle}" main_bundle_exe)
+
+  get_bundle_all_executables("${bundle}" file_list)
+  foreach(f ${file_list})
+      get_filename_component(exepath "${f}" PATH)
+      math(EXPR count "${count} + 1")
+
+      message(STATUS "executable file ${count}: ${f}")
+
+      set(prereqs "")
+      get_filename_component(prereq_filename ${f} NAME)
+
+      if(NOT prereq_filename IN_LIST CFG_IGNORE_ITEM)
+        get_item_rpaths(${f} _main_exe_rpaths)
+        get_prerequisites("${f}" prereqs 1 1 "${exepath}" "${_main_exe_rpaths}")
+
+        # On the Mac,
+        # "embedded" and "system" prerequisites are fine... anything else means
+        # the bundle's prerequisites are not verified (i.e., the bundle is not
+        # really "standalone")
+        #
+        # On Windows (and others? Linux/Unix/...?)
+        # "local" and "system" prereqs are fine...
+        #
+
+        set(external_prereqs "")
+
+        foreach(p ${prereqs})
+          set(p_type "")
+          gp_file_type("${f}" "${p}" p_type)
+
+          if(APPLE)
+            if(NOT p_type STREQUAL "embedded" AND NOT p_type STREQUAL "system")
+              set(external_prereqs ${external_prereqs} "${p}")
+            endif()
+          else()
+            if(NOT p_type STREQUAL "local" AND NOT p_type STREQUAL "system")
+              set(external_prereqs ${external_prereqs} "${p}")
+            endif()
+          endif()
+        endforeach()
+
+        if(external_prereqs)
+          # Found non-system/somehow-unacceptable prerequisites:
+          set(result 0)
+          set(info ${info} "external prerequisites found:\nf='${f}'\nexternal_prereqs='${external_prereqs}'\n")
+        endif()
+      else()
+        message(STATUS "Ignoring file: ${prereq_filename}")
+      endif()
+  endforeach()
+
+  if(result)
+    set(info "Verified ${count} executable files in '${bundle}'")
+  endif()
+
+  set(${result_var} "${result}" PARENT_SCOPE)
+  set(${info_var} "${info}" PARENT_SCOPE)
+endfunction()
+
+
+function(verify_bundle_symlinks bundle result_var info_var)
+  set(result 1)
+  set(info "")
+  set(count 0)
+
+  # TODO: implement this function for real...
+  # Right now, it is just a stub that verifies unconditionally...
+
+  set(${result_var} "${result}" PARENT_SCOPE)
+  set(${info_var} "${info}" PARENT_SCOPE)
+endfunction()
+
+
+function(verify_app app)
+  set(verified 0)
+  set(info "")
+
+  set(options)
+  set(oneValueArgs)
+  set(multiValueArgs IGNORE_ITEM)
+  cmake_parse_arguments(CFG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
+
+  get_bundle_and_executable("${app}" bundle executable valid)
+
+  message(STATUS "===========================================================================")
+  message(STATUS "Analyzing app='${app}'")
+  message(STATUS "bundle='${bundle}'")
+  message(STATUS "executable='${executable}'")
+  message(STATUS "valid='${valid}'")
+
+  # Verify that the bundle does not have any "external" prerequisites:
+  #
+  verify_bundle_prerequisites("${bundle}" verified info IGNORE_ITEM "${CFG_IGNORE_ITEM}")
+  message(STATUS "verified='${verified}'")
+  message(STATUS "info='${info}'")
+  message(STATUS "")
+
+  if(verified)
+    # Verify that the bundle does not have any symlinks to external files:
+    #
+    verify_bundle_symlinks("${bundle}" verified info)
+    message(STATUS "verified='${verified}'")
+    message(STATUS "info='${info}'")
+    message(STATUS "")
+  endif()
+
+  if(NOT verified)
+    message(FATAL_ERROR "error: verify_app failed")
+  endif()
+endfunction()
+
+cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/CMake.cmake b/share/cmake-3.22/Modules/CMake.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMake.cmake
rename to share/cmake-3.22/Modules/CMake.cmake
diff --git a/share/cmake-3.18/Modules/CMakeASM-ATTInformation.cmake b/share/cmake-3.22/Modules/CMakeASM-ATTInformation.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeASM-ATTInformation.cmake
rename to share/cmake-3.22/Modules/CMakeASM-ATTInformation.cmake
diff --git a/share/cmake-3.18/Modules/CMakeASMCompiler.cmake.in b/share/cmake-3.22/Modules/CMakeASMCompiler.cmake.in
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeASMCompiler.cmake.in
rename to share/cmake-3.22/Modules/CMakeASMCompiler.cmake.in
diff --git a/share/cmake-3.22/Modules/CMakeASMInformation.cmake b/share/cmake-3.22/Modules/CMakeASMInformation.cmake
new file mode 100644
index 0000000..2dc1585
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeASMInformation.cmake
@@ -0,0 +1,100 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+if(UNIX)
+  set(CMAKE_ASM${ASM_DIALECT}_OUTPUT_EXTENSION .o)
+else()
+  set(CMAKE_ASM${ASM_DIALECT}_OUTPUT_EXTENSION .obj)
+endif()
+
+set(CMAKE_INCLUDE_FLAG_ASM${ASM_DIALECT} "-I")       # -I
+set(CMAKE_BASE_NAME)
+get_filename_component(CMAKE_BASE_NAME "${CMAKE_ASM${ASM_DIALECT}_COMPILER}" NAME_WE)
+
+if("${CMAKE_BASE_NAME}" STREQUAL "as")
+  set(CMAKE_BASE_NAME gas)
+endif()
+
+# Load compiler-specific information.
+set(_INCLUDED_FILE "")
+if(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID)
+  include(Compiler/${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}-ASM${ASM_DIALECT} OPTIONAL  RESULT_VARIABLE _INCLUDED_FILE)
+endif()
+if(NOT _INCLUDED_FILE)
+  if("ASM${ASM_DIALECT}" STREQUAL "ASM")
+    message(STATUS "Warning: Did not find file Compiler/${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}-ASM${ASM_DIALECT}")
+  endif()
+  include(Platform/${CMAKE_BASE_NAME} OPTIONAL)
+endif()
+
+if(CMAKE_SYSTEM_PROCESSOR)
+  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}-ASM${ASM_DIALECT}-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL  RESULT_VARIABLE _INCLUDED_FILE)
+  if(NOT _INCLUDED_FILE)
+    include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_BASE_NAME}-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL)
+  endif()
+endif()
+
+include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}-ASM${ASM_DIALECT} OPTIONAL  RESULT_VARIABLE _INCLUDED_FILE)
+if(NOT _INCLUDED_FILE)
+  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_BASE_NAME} OPTIONAL)
+endif()
+
+# This should be included before the _INIT variables are
+# used to initialize the cache.  Since the rule variables
+# have if blocks on them, users can still define them here.
+# But, it should still be after the platform file so changes can
+# be made to those values.
+
+if(CMAKE_USER_MAKE_RULES_OVERRIDE)
+  # Save the full path of the file so try_compile can use it.
+  include(${CMAKE_USER_MAKE_RULES_OVERRIDE} RESULT_VARIABLE _override)
+  set(CMAKE_USER_MAKE_RULES_OVERRIDE "${_override}")
+endif()
+
+if(CMAKE_USER_MAKE_RULES_OVERRIDE_ASM)
+  # Save the full path of the file so try_compile can use it.
+  include(${CMAKE_USER_MAKE_RULES_OVERRIDE_ASM} RESULT_VARIABLE _override)
+  set(CMAKE_USER_MAKE_RULES_OVERRIDE_ASM "${_override}")
+endif()
+
+# Set default assembler file extensions:
+if(NOT CMAKE_ASM${ASM_DIALECT}_SOURCE_FILE_EXTENSIONS)
+  set(CMAKE_ASM${ASM_DIALECT}_SOURCE_FILE_EXTENSIONS s;S;asm)
+endif()
+
+
+# Support for CMAKE_ASM${ASM_DIALECT}_FLAGS_INIT and friends:
+set(CMAKE_ASM${ASM_DIALECT}_FLAGS_INIT "$ENV{ASM${ASM_DIALECT}FLAGS} ${CMAKE_ASM${ASM_DIALECT}_FLAGS_INIT}")
+
+cmake_initialize_per_config_variable(CMAKE_ASM${ASM_DIALECT}_FLAGS "Flags used by the ASM${ASM_DIALECT} compiler")
+
+if(NOT CMAKE_ASM${ASM_DIALECT}_COMPILE_OBJECT)
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILE_OBJECT "<CMAKE_ASM${ASM_DIALECT}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>")
+endif()
+
+if(NOT CMAKE_ASM${ASM_DIALECT}_CREATE_STATIC_LIBRARY)
+  set(CMAKE_ASM${ASM_DIALECT}_CREATE_STATIC_LIBRARY
+      "<CMAKE_AR> cr <TARGET> <LINK_FLAGS> <OBJECTS> "
+      "<CMAKE_RANLIB> <TARGET>")
+endif()
+
+if(NOT CMAKE_ASM${ASM_DIALECT}_LINK_EXECUTABLE)
+  set(CMAKE_ASM${ASM_DIALECT}_LINK_EXECUTABLE
+    "<CMAKE_ASM${ASM_DIALECT}_COMPILER> <FLAGS> <CMAKE_ASM${ASM_DIALECT}_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
+endif()
+
+if(NOT CMAKE_EXECUTABLE_RUNTIME_ASM${ASM_DIALECT}_FLAG)
+  set(CMAKE_EXECUTABLE_RUNTIME_ASM${ASM_DIALECT}_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_ASM${ASM_DIALECT}_FLAG})
+endif()
+
+if(NOT CMAKE_EXECUTABLE_RUNTIME_ASM${ASM_DIALECT}_FLAG_SEP)
+  set(CMAKE_EXECUTABLE_RUNTIME_ASM${ASM_DIALECT}_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_ASM${ASM_DIALECT}_FLAG_SEP})
+endif()
+
+if(NOT CMAKE_EXECUTABLE_RPATH_LINK_ASM${ASM_DIALECT}_FLAG)
+  set(CMAKE_EXECUTABLE_RPATH_LINK_ASM${ASM_DIALECT}_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_ASM${ASM_DIALECT}_FLAG})
+endif()
+
+
+set(CMAKE_ASM${ASM_DIALECT}_INFOMATION_LOADED 1)
diff --git a/share/cmake-3.22/Modules/CMakeASM_MASMInformation.cmake b/share/cmake-3.22/Modules/CMakeASM_MASMInformation.cmake
new file mode 100644
index 0000000..656b75e
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeASM_MASMInformation.cmake
@@ -0,0 +1,20 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# support for the MS assembler, masm and masm64
+
+set(ASM_DIALECT "_MASM")
+
+set(CMAKE_ASM${ASM_DIALECT}_SOURCE_FILE_EXTENSIONS asm)
+
+set(CMAKE_ASM${ASM_DIALECT}_COMPILE_OBJECT "<CMAKE_ASM${ASM_DIALECT}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -c -Fo <OBJECT> <SOURCE>")
+
+# The ASM_MASM compiler id for this compiler is "MSVC", so fill out the runtime library table.
+set(CMAKE_ASM${ASM_DIALECT}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreaded         "")
+set(CMAKE_ASM${ASM_DIALECT}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDLL      "")
+set(CMAKE_ASM${ASM_DIALECT}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebug    "")
+set(CMAKE_ASM${ASM_DIALECT}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebugDLL "")
+
+include(CMakeASMInformation)
+set(ASM_DIALECT)
diff --git a/share/cmake-3.22/Modules/CMakeASM_NASMInformation.cmake b/share/cmake-3.22/Modules/CMakeASM_NASMInformation.cmake
new file mode 100644
index 0000000..a72575b
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeASM_NASMInformation.cmake
@@ -0,0 +1,55 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# support for the nasm assembler
+
+set(CMAKE_ASM_NASM_SOURCE_FILE_EXTENSIONS nasm asm)
+
+if(NOT CMAKE_ASM_NASM_OBJECT_FORMAT)
+  if(WIN32)
+    if(DEFINED CMAKE_C_SIZEOF_DATA_PTR AND CMAKE_C_SIZEOF_DATA_PTR EQUAL 8)
+      set(CMAKE_ASM_NASM_OBJECT_FORMAT win64)
+    elseif(DEFINED CMAKE_CXX_SIZEOF_DATA_PTR AND CMAKE_CXX_SIZEOF_DATA_PTR EQUAL 8)
+      set(CMAKE_ASM_NASM_OBJECT_FORMAT win64)
+    else()
+      set(CMAKE_ASM_NASM_OBJECT_FORMAT win32)
+    endif()
+  elseif(APPLE)
+    if(DEFINED CMAKE_C_SIZEOF_DATA_PTR AND CMAKE_C_SIZEOF_DATA_PTR EQUAL 8)
+      set(CMAKE_ASM_NASM_OBJECT_FORMAT macho64)
+    elseif(DEFINED CMAKE_CXX_SIZEOF_DATA_PTR AND CMAKE_CXX_SIZEOF_DATA_PTR EQUAL 8)
+      set(CMAKE_ASM_NASM_OBJECT_FORMAT macho64)
+    else()
+      set(CMAKE_ASM_NASM_OBJECT_FORMAT macho)
+    endif()
+  else()
+    if(DEFINED CMAKE_C_SIZEOF_DATA_PTR AND CMAKE_C_SIZEOF_DATA_PTR EQUAL 8)
+      set(CMAKE_ASM_NASM_OBJECT_FORMAT elf64)
+    elseif(DEFINED CMAKE_CXX_SIZEOF_DATA_PTR AND CMAKE_CXX_SIZEOF_DATA_PTR EQUAL 8)
+      set(CMAKE_ASM_NASM_OBJECT_FORMAT elf64)
+    else()
+      set(CMAKE_ASM_NASM_OBJECT_FORMAT elf)
+    endif()
+  endif()
+endif()
+
+if(NOT CMAKE_ASM_NASM_COMPILE_OBJECT)
+  set(CMAKE_ASM_NASM_COMPILE_OBJECT "<CMAKE_ASM_NASM_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -f ${CMAKE_ASM_NASM_OBJECT_FORMAT} -o <OBJECT> <SOURCE>")
+endif()
+
+if(CMAKE_ASM_NASM_COMPILER_ID STREQUAL "NASM")
+  set(CMAKE_DEPFILE_FLAGS_ASM_NASM "-MD <DEP_FILE> -MT <DEP_TARGET>")
+
+  if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+      AND CMAKE_GENERATOR MATCHES "Makefiles|WMake")
+    # dependencies are computed by the compiler itself
+    set(CMAKE_ASM_NASM_DEPFILE_FORMAT gcc)
+    set(CMAKE_ASM_NASM_DEPENDS_USE_COMPILER TRUE)
+  endif()
+endif()
+
+# Load the generic ASMInformation file:
+set(ASM_DIALECT "_NASM")
+include(CMakeASMInformation)
+set(ASM_DIALECT)
diff --git a/share/cmake-3.18/Modules/CMakeAddFortranSubdirectory.cmake b/share/cmake-3.22/Modules/CMakeAddFortranSubdirectory.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeAddFortranSubdirectory.cmake
rename to share/cmake-3.22/Modules/CMakeAddFortranSubdirectory.cmake
diff --git a/share/cmake-3.18/Modules/CMakeAddFortranSubdirectory/build_mingw.cmake.in b/share/cmake-3.22/Modules/CMakeAddFortranSubdirectory/build_mingw.cmake.in
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeAddFortranSubdirectory/build_mingw.cmake.in
rename to share/cmake-3.22/Modules/CMakeAddFortranSubdirectory/build_mingw.cmake.in
diff --git a/share/cmake-3.18/Modules/CMakeAddFortranSubdirectory/config_mingw.cmake.in b/share/cmake-3.22/Modules/CMakeAddFortranSubdirectory/config_mingw.cmake.in
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeAddFortranSubdirectory/config_mingw.cmake.in
rename to share/cmake-3.22/Modules/CMakeAddFortranSubdirectory/config_mingw.cmake.in
diff --git a/share/cmake-3.18/Modules/CMakeAddNewLanguage.txt b/share/cmake-3.22/Modules/CMakeAddNewLanguage.txt
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeAddNewLanguage.txt
rename to share/cmake-3.22/Modules/CMakeAddNewLanguage.txt
diff --git a/share/cmake-3.18/Modules/CMakeBackwardCompatibilityC.cmake b/share/cmake-3.22/Modules/CMakeBackwardCompatibilityC.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeBackwardCompatibilityC.cmake
rename to share/cmake-3.22/Modules/CMakeBackwardCompatibilityC.cmake
diff --git a/share/cmake-3.18/Modules/CMakeBackwardCompatibilityCXX.cmake b/share/cmake-3.22/Modules/CMakeBackwardCompatibilityCXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeBackwardCompatibilityCXX.cmake
rename to share/cmake-3.22/Modules/CMakeBackwardCompatibilityCXX.cmake
diff --git a/share/cmake-3.18/Modules/CMakeBorlandFindMake.cmake b/share/cmake-3.22/Modules/CMakeBorlandFindMake.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeBorlandFindMake.cmake
rename to share/cmake-3.22/Modules/CMakeBorlandFindMake.cmake
diff --git a/share/cmake-3.18/Modules/CMakeBuildSettings.cmake.in b/share/cmake-3.22/Modules/CMakeBuildSettings.cmake.in
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeBuildSettings.cmake.in
rename to share/cmake-3.22/Modules/CMakeBuildSettings.cmake.in
diff --git a/share/cmake-3.22/Modules/CMakeCCompiler.cmake.in b/share/cmake-3.22/Modules/CMakeCCompiler.cmake.in
new file mode 100644
index 0000000..2b24ff2
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeCCompiler.cmake.in
@@ -0,0 +1,72 @@
+set(CMAKE_C_COMPILER "@CMAKE_C_COMPILER@")
+set(CMAKE_C_COMPILER_ARG1 "@CMAKE_C_COMPILER_ARG1@")
+set(CMAKE_C_COMPILER_ID "@CMAKE_C_COMPILER_ID@")
+set(CMAKE_C_COMPILER_VERSION "@CMAKE_C_COMPILER_VERSION@")
+set(CMAKE_C_COMPILER_VERSION_INTERNAL "@CMAKE_C_COMPILER_VERSION_INTERNAL@")
+set(CMAKE_C_COMPILER_WRAPPER "@CMAKE_C_COMPILER_WRAPPER@")
+set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "@CMAKE_C_STANDARD_COMPUTED_DEFAULT@")
+set(CMAKE_C_EXTENSIONS_COMPUTED_DEFAULT "@CMAKE_C_EXTENSIONS_COMPUTED_DEFAULT@")
+set(CMAKE_C_COMPILE_FEATURES "@CMAKE_C_COMPILE_FEATURES@")
+set(CMAKE_C90_COMPILE_FEATURES "@CMAKE_C90_COMPILE_FEATURES@")
+set(CMAKE_C99_COMPILE_FEATURES "@CMAKE_C99_COMPILE_FEATURES@")
+set(CMAKE_C11_COMPILE_FEATURES "@CMAKE_C11_COMPILE_FEATURES@")
+set(CMAKE_C17_COMPILE_FEATURES "@CMAKE_C17_COMPILE_FEATURES@")
+set(CMAKE_C23_COMPILE_FEATURES "@CMAKE_C23_COMPILE_FEATURES@")
+
+set(CMAKE_C_PLATFORM_ID "@CMAKE_C_PLATFORM_ID@")
+set(CMAKE_C_SIMULATE_ID "@CMAKE_C_SIMULATE_ID@")
+set(CMAKE_C_COMPILER_FRONTEND_VARIANT "@CMAKE_C_COMPILER_FRONTEND_VARIANT@")
+set(CMAKE_C_SIMULATE_VERSION "@CMAKE_C_SIMULATE_VERSION@")
+@_SET_CMAKE_C_COMPILER_ARCHITECTURE_ID@
+@_SET_CMAKE_C_COMPILER_SYSROOT@
+@SET_MSVC_C_ARCHITECTURE_ID@
+@SET_CMAKE_XCODE_ARCHS@
+set(CMAKE_AR "@CMAKE_AR@")
+set(CMAKE_C_COMPILER_AR "@CMAKE_C_COMPILER_AR@")
+set(CMAKE_RANLIB "@CMAKE_RANLIB@")
+set(CMAKE_C_COMPILER_RANLIB "@CMAKE_C_COMPILER_RANLIB@")
+set(CMAKE_LINKER "@CMAKE_LINKER@")
+set(CMAKE_MT "@CMAKE_MT@")
+set(CMAKE_COMPILER_IS_GNUCC @CMAKE_COMPILER_IS_GNUCC@)
+set(CMAKE_C_COMPILER_LOADED 1)
+set(CMAKE_C_COMPILER_WORKS @CMAKE_C_COMPILER_WORKS@)
+set(CMAKE_C_ABI_COMPILED @CMAKE_C_ABI_COMPILED@)
+
+set(CMAKE_C_COMPILER_ENV_VAR "CC")
+
+set(CMAKE_C_COMPILER_ID_RUN 1)
+set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m)
+set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC)
+set(CMAKE_C_LINKER_PREFERENCE 10)
+
+# Save compiler ABI information.
+set(CMAKE_C_SIZEOF_DATA_PTR "@CMAKE_C_SIZEOF_DATA_PTR@")
+set(CMAKE_C_COMPILER_ABI "@CMAKE_C_COMPILER_ABI@")
+set(CMAKE_C_BYTE_ORDER "@CMAKE_C_BYTE_ORDER@")
+set(CMAKE_C_LIBRARY_ARCHITECTURE "@CMAKE_C_LIBRARY_ARCHITECTURE@")
+
+if(CMAKE_C_SIZEOF_DATA_PTR)
+  set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}")
+endif()
+
+if(CMAKE_C_COMPILER_ABI)
+  set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}")
+endif()
+
+if(CMAKE_C_LIBRARY_ARCHITECTURE)
+  set(CMAKE_LIBRARY_ARCHITECTURE "@CMAKE_C_LIBRARY_ARCHITECTURE@")
+endif()
+
+set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "@CMAKE_C_CL_SHOWINCLUDES_PREFIX@")
+if(CMAKE_C_CL_SHOWINCLUDES_PREFIX)
+  set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}")
+endif()
+
+@CMAKE_C_COMPILER_CUSTOM_CODE@
+@CMAKE_C_SYSROOT_FLAG_CODE@
+@CMAKE_C_OSX_DEPLOYMENT_TARGET_FLAG_CODE@
+
+set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "@CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES@")
+set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "@CMAKE_C_IMPLICIT_LINK_LIBRARIES@")
+set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "@CMAKE_C_IMPLICIT_LINK_DIRECTORIES@")
+set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "@CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES@")
diff --git a/share/cmake-3.22/Modules/CMakeCCompilerABI.c b/share/cmake-3.22/Modules/CMakeCCompilerABI.c
new file mode 100644
index 0000000..f0ee21a
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeCCompilerABI.c
@@ -0,0 +1,27 @@
+#ifdef __cplusplus
+#  error "A C++ compiler has been selected for C."
+#endif
+
+#ifdef __CLASSIC_C__
+#  define const
+#endif
+
+#include "CMakeCompilerABI.h"
+
+#ifdef __CLASSIC_C__
+int main(argc, argv) int argc;
+char* argv[];
+#else
+int main(int argc, char* argv[])
+#endif
+{
+  int require = 0;
+  require += info_sizeof_dptr[argc];
+  require += info_byte_order_big_endian[argc];
+  require += info_byte_order_little_endian[argc];
+#if defined(ABI_ID)
+  require += info_abi[argc];
+#endif
+  (void)argv;
+  return require;
+}
diff --git a/share/cmake-3.22/Modules/CMakeCCompilerId.c.in b/share/cmake-3.22/Modules/CMakeCCompilerId.c.in
new file mode 100644
index 0000000..30ad982
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeCCompilerId.c.in
@@ -0,0 +1,108 @@
+#ifdef __cplusplus
+# error "A C++ compiler has been selected for C."
+#endif
+
+#if defined(__18CXX)
+# define ID_VOID_MAIN
+#endif
+#if defined(__CLASSIC_C__)
+/* cv-qualifiers did not exist in K&R C */
+# define const
+# define volatile
+#endif
+
+#if !defined(__has_include)
+/* If the compiler does not have __has_include, pretend the answer is
+   always no.  */
+#  define __has_include(x) 0
+#endif
+
+@CMAKE_C_COMPILER_ID_CONTENT@
+
+/* Construct the string literal in pieces to prevent the source from
+   getting matched.  Store it in a pointer rather than an array
+   because some compilers will just produce instructions to fill the
+   array rather than assigning a pointer to a static array.  */
+char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
+#ifdef SIMULATE_ID
+char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
+#endif
+
+#ifdef __QNXNTO__
+char const* qnxnto = "INFO" ":" "qnxnto[]";
+#endif
+
+#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
+char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
+#endif
+
+@CMAKE_C_COMPILER_ID_PLATFORM_CONTENT@
+@CMAKE_C_COMPILER_ID_ERROR_FOR_TEST@
+
+#if !defined(__STDC__) && !defined(__clang__)
+# if defined(_MSC_VER) || defined(__ibmxl__) || defined(__IBMC__)
+#  define C_VERSION "90"
+# else
+#  define C_VERSION
+# endif
+#elif __STDC_VERSION__ > 201710L
+# define C_VERSION "23"
+#elif __STDC_VERSION__ >= 201710L
+# define C_VERSION "17"
+#elif __STDC_VERSION__ >= 201000L
+# define C_VERSION "11"
+#elif __STDC_VERSION__ >= 199901L
+# define C_VERSION "99"
+#else
+# define C_VERSION "90"
+#endif
+const char* info_language_standard_default =
+  "INFO" ":" "standard_default[" C_VERSION "]";
+
+const char* info_language_extensions_default = "INFO" ":" "extensions_default["
+/* !defined(_MSC_VER) to exclude Clang's MSVC compatibility mode. */
+#if (defined(__clang__) || defined(__GNUC__) ||                               \
+     defined(__TI_COMPILER_VERSION__)) &&                                     \
+  !defined(__STRICT_ANSI__) && !defined(_MSC_VER)
+  "ON"
+#else
+  "OFF"
+#endif
+"]";
+
+/*--------------------------------------------------------------------------*/
+
+#ifdef ID_VOID_MAIN
+void main() {}
+#else
+# if defined(__CLASSIC_C__)
+int main(argc, argv) int argc; char *argv[];
+# else
+int main(int argc, char* argv[])
+# endif
+{
+  int require = 0;
+  require += info_compiler[argc];
+  require += info_platform[argc];
+  require += info_arch[argc];
+#ifdef COMPILER_VERSION_MAJOR
+  require += info_version[argc];
+#endif
+#ifdef COMPILER_VERSION_INTERNAL
+  require += info_version_internal[argc];
+#endif
+#ifdef SIMULATE_ID
+  require += info_simulate[argc];
+#endif
+#ifdef SIMULATE_VERSION_MAJOR
+  require += info_simulate_version[argc];
+#endif
+#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
+  require += info_cray[argc];
+#endif
+  require += info_language_standard_default[argc];
+  require += info_language_extensions_default[argc];
+  (void)argv;
+  return require;
+}
+#endif
diff --git a/share/cmake-3.22/Modules/CMakeCInformation.cmake b/share/cmake-3.22/Modules/CMakeCInformation.cmake
new file mode 100644
index 0000000..665f309
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeCInformation.cmake
@@ -0,0 +1,206 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# This file sets the basic flags for the C language in CMake.
+# It also loads the available platform file for the system-compiler
+# if it exists.
+# It also loads a system - compiler - processor (or target hardware)
+# specific file, which is mainly useful for crosscompiling and embedded systems.
+
+include(CMakeLanguageInformation)
+
+# some compilers use different extensions (e.g. sdcc uses .rel)
+# so set the extension here first so it can be overridden by the compiler specific file
+if(UNIX)
+  set(CMAKE_C_OUTPUT_EXTENSION .o)
+else()
+  set(CMAKE_C_OUTPUT_EXTENSION .obj)
+endif()
+
+set(_INCLUDED_FILE 0)
+
+# Load compiler-specific information.
+if(CMAKE_C_COMPILER_ID)
+  include(Compiler/${CMAKE_C_COMPILER_ID}-C OPTIONAL)
+endif()
+
+set(CMAKE_BASE_NAME)
+get_filename_component(CMAKE_BASE_NAME "${CMAKE_C_COMPILER}" NAME_WE)
+if(CMAKE_COMPILER_IS_GNUCC)
+  set(CMAKE_BASE_NAME gcc)
+endif()
+
+
+# load a hardware specific file, mostly useful for embedded compilers
+if(CMAKE_SYSTEM_PROCESSOR)
+  if(CMAKE_C_COMPILER_ID)
+    include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_C_COMPILER_ID}-C-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL RESULT_VARIABLE _INCLUDED_FILE)
+  endif()
+  if (NOT _INCLUDED_FILE)
+    include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_BASE_NAME}-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL)
+  endif ()
+endif()
+
+
+# load the system- and compiler specific files
+if(CMAKE_C_COMPILER_ID)
+  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_C_COMPILER_ID}-C
+    OPTIONAL RESULT_VARIABLE _INCLUDED_FILE)
+endif()
+if (NOT _INCLUDED_FILE)
+  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_BASE_NAME}
+    OPTIONAL RESULT_VARIABLE _INCLUDED_FILE)
+endif ()
+
+# load any compiler-wrapper specific information
+if (CMAKE_C_COMPILER_WRAPPER)
+  __cmake_include_compiler_wrapper(C)
+endif ()
+
+# We specify the compiler information in the system file for some
+# platforms, but this language may not have been enabled when the file
+# was first included.  Include it again to get the language info.
+# Remove this when all compiler info is removed from system files.
+if (NOT _INCLUDED_FILE)
+  include(Platform/${CMAKE_SYSTEM_NAME} OPTIONAL)
+endif ()
+
+if(CMAKE_C_SIZEOF_DATA_PTR)
+  foreach(f ${CMAKE_C_ABI_FILES})
+    include(${f})
+  endforeach()
+  unset(CMAKE_C_ABI_FILES)
+endif()
+
+# This should be included before the _INIT variables are
+# used to initialize the cache.  Since the rule variables
+# have if blocks on them, users can still define them here.
+# But, it should still be after the platform file so changes can
+# be made to those values.
+
+if(CMAKE_USER_MAKE_RULES_OVERRIDE)
+  # Save the full path of the file so try_compile can use it.
+  include(${CMAKE_USER_MAKE_RULES_OVERRIDE} RESULT_VARIABLE _override)
+  set(CMAKE_USER_MAKE_RULES_OVERRIDE "${_override}")
+endif()
+
+if(CMAKE_USER_MAKE_RULES_OVERRIDE_C)
+  # Save the full path of the file so try_compile can use it.
+  include(${CMAKE_USER_MAKE_RULES_OVERRIDE_C} RESULT_VARIABLE _override)
+  set(CMAKE_USER_MAKE_RULES_OVERRIDE_C "${_override}")
+endif()
+
+if(CMAKE_EXECUTABLE_FORMAT STREQUAL "ELF")
+  if(NOT DEFINED CMAKE_C_LINK_WHAT_YOU_USE_FLAG)
+    set(CMAKE_C_LINK_WHAT_YOU_USE_FLAG "LINKER:--no-as-needed")
+  endif()
+  if(NOT DEFINED CMAKE_LINK_WHAT_YOU_USE_CHECK)
+    set(CMAKE_LINK_WHAT_YOU_USE_CHECK ldd -u -r)
+  endif()
+endif()
+
+# for most systems a module is the same as a shared library
+# so unless the variable CMAKE_MODULE_EXISTS is set just
+# copy the values from the LIBRARY variables
+if(NOT CMAKE_MODULE_EXISTS)
+  set(CMAKE_SHARED_MODULE_C_FLAGS ${CMAKE_SHARED_LIBRARY_C_FLAGS})
+  set(CMAKE_SHARED_MODULE_CREATE_C_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS})
+endif()
+
+set(CMAKE_C_FLAGS_INIT "$ENV{CFLAGS} ${CMAKE_C_FLAGS_INIT}")
+
+cmake_initialize_per_config_variable(CMAKE_C_FLAGS "Flags used by the C compiler")
+
+if(CMAKE_C_STANDARD_LIBRARIES_INIT)
+  set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES_INIT}"
+    CACHE STRING "Libraries linked by default with all C applications.")
+  mark_as_advanced(CMAKE_C_STANDARD_LIBRARIES)
+endif()
+
+if(NOT CMAKE_C_COMPILER_LAUNCHER AND DEFINED ENV{CMAKE_C_COMPILER_LAUNCHER})
+  set(CMAKE_C_COMPILER_LAUNCHER "$ENV{CMAKE_C_COMPILER_LAUNCHER}"
+    CACHE STRING "Compiler launcher for C.")
+endif()
+
+if(NOT CMAKE_C_LINKER_LAUNCHER AND DEFINED ENV{CMAKE_C_LINKER_LAUNCHER})
+  set(CMAKE_C_LINKER_LAUNCHER "$ENV{CMAKE_C_LINKER_LAUNCHER}"
+    CACHE STRING "Linker launcher for C.")
+endif()
+
+include(CMakeCommonLanguageInclude)
+
+# now define the following rule variables
+
+# CMAKE_C_CREATE_SHARED_LIBRARY
+# CMAKE_C_CREATE_SHARED_MODULE
+# CMAKE_C_COMPILE_OBJECT
+# CMAKE_C_LINK_EXECUTABLE
+
+# variables supplied by the generator at use time
+# <TARGET>
+# <TARGET_BASE> the target without the suffix
+# <OBJECTS>
+# <OBJECT>
+# <LINK_LIBRARIES>
+# <FLAGS>
+# <LINK_FLAGS>
+
+# C compiler information
+# <CMAKE_C_COMPILER>
+# <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS>
+# <CMAKE_SHARED_MODULE_CREATE_C_FLAGS>
+# <CMAKE_C_LINK_FLAGS>
+
+# Static library tools
+# <CMAKE_AR>
+# <CMAKE_RANLIB>
+
+
+# create a C shared library
+if(NOT CMAKE_C_CREATE_SHARED_LIBRARY)
+  set(CMAKE_C_CREATE_SHARED_LIBRARY
+      "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_C_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
+endif()
+
+# create a C shared module just copy the shared library rule
+if(NOT CMAKE_C_CREATE_SHARED_MODULE)
+  set(CMAKE_C_CREATE_SHARED_MODULE ${CMAKE_C_CREATE_SHARED_LIBRARY})
+endif()
+
+# Create a static archive incrementally for large object file counts.
+# If CMAKE_C_CREATE_STATIC_LIBRARY is set it will override these.
+if(NOT DEFINED CMAKE_C_ARCHIVE_CREATE)
+  set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> qc <TARGET> <LINK_FLAGS> <OBJECTS>")
+endif()
+if(NOT DEFINED CMAKE_C_ARCHIVE_APPEND)
+  set(CMAKE_C_ARCHIVE_APPEND "<CMAKE_AR> q <TARGET> <LINK_FLAGS> <OBJECTS>")
+endif()
+if(NOT DEFINED CMAKE_C_ARCHIVE_FINISH)
+  set(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> <TARGET>")
+endif()
+
+# compile a C file into an object file
+if(NOT CMAKE_C_COMPILE_OBJECT)
+  set(CMAKE_C_COMPILE_OBJECT
+    "<CMAKE_C_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>")
+endif()
+
+if(NOT CMAKE_C_LINK_EXECUTABLE)
+  set(CMAKE_C_LINK_EXECUTABLE
+    "<CMAKE_C_COMPILER> <FLAGS> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
+endif()
+
+if(NOT CMAKE_EXECUTABLE_RUNTIME_C_FLAG)
+  set(CMAKE_EXECUTABLE_RUNTIME_C_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG})
+endif()
+
+if(NOT CMAKE_EXECUTABLE_RUNTIME_C_FLAG_SEP)
+  set(CMAKE_EXECUTABLE_RUNTIME_C_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP})
+endif()
+
+if(NOT CMAKE_EXECUTABLE_RPATH_LINK_C_FLAG)
+  set(CMAKE_EXECUTABLE_RPATH_LINK_C_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG})
+endif()
+
+set(CMAKE_C_INFORMATION_LOADED 1)
diff --git a/share/cmake-3.18/Modules/CMakeCSharpCompiler.cmake.in b/share/cmake-3.22/Modules/CMakeCSharpCompiler.cmake.in
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeCSharpCompiler.cmake.in
rename to share/cmake-3.22/Modules/CMakeCSharpCompiler.cmake.in
diff --git a/share/cmake-3.22/Modules/CMakeCSharpCompilerId.cs.in b/share/cmake-3.22/Modules/CMakeCSharpCompilerId.cs.in
new file mode 100644
index 0000000..b43ec04
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeCSharpCompilerId.cs.in
@@ -0,0 +1,71 @@
+using System;
+
+namespace CSharp
+{
+    public class CSharpApp
+    {
+        const string InfoCompiler = "INFO:compiler[Microsoft "
+#if PlatformToolsetv100
+        + "Visual Studio"
+#elif PlatformToolsetv110
+        + "Visual Studio"
+#elif PlatformToolsetv120
+        + "Visual Studio"
+#elif PlatformToolsetv140
+        + "Visual Studio"
+#elif PlatformToolsetv141
+        + "Visual Studio"
+#elif PlatformToolsetv142
+        + "Visual Studio"
+#elif PlatformToolsetv143
+        + "Visual Studio"
+#else
+        + "unknown"
+#endif
+        + "]";
+
+        const string InfoPlatform = "INFO:platform[Windows]";
+
+        const string InfoArchitecture = "INFO:arch["
+#if Platformx64
+        + "x64"
+#elif Platformx86
+        + "x86"
+#elif PlatformxWin32
+        + "Win32]"
+#else
+        + "unknown"
+#endif
+        + "]";
+
+        const string InfoCompilerVersion = "INFO:compiler_version["
+#if PlatformToolsetv100
+        + "2010"
+#elif PlatformToolsetv110
+        + "2012"
+#elif PlatformToolsetv120
+        + "2013"
+#elif PlatformToolsetv140
+        + "2015"
+#elif PlatformToolsetv141
+        + "2017"
+#elif PlatformToolsetv142
+        + "2019"
+#elif PlatformToolsetv143
+        + "2022"
+#else
+        + "9999"
+#endif
+        + "]";
+
+        static void Main(string[] args)
+        {
+            // we have to print the lines to make sure
+            // the compiler does not optimize them away ...
+            System.Console.WriteLine(InfoCompiler);
+            System.Console.WriteLine(InfoPlatform);
+            System.Console.WriteLine(InfoArchitecture);
+            System.Console.WriteLine(InfoCompilerVersion);
+        }
+    }
+}
diff --git a/share/cmake-3.18/Modules/CMakeCSharpInformation.cmake b/share/cmake-3.22/Modules/CMakeCSharpInformation.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeCSharpInformation.cmake
rename to share/cmake-3.22/Modules/CMakeCSharpInformation.cmake
diff --git a/share/cmake-3.22/Modules/CMakeCUDACompiler.cmake.in b/share/cmake-3.22/Modules/CMakeCUDACompiler.cmake.in
new file mode 100644
index 0000000..2f3e9a8
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeCUDACompiler.cmake.in
@@ -0,0 +1,70 @@
+set(CMAKE_CUDA_COMPILER "@CMAKE_CUDA_COMPILER@")
+set(CMAKE_CUDA_HOST_COMPILER "@CMAKE_CUDA_HOST_COMPILER@")
+set(CMAKE_CUDA_HOST_LINK_LAUNCHER "@CMAKE_CUDA_HOST_LINK_LAUNCHER@")
+set(CMAKE_CUDA_COMPILER_ID "@CMAKE_CUDA_COMPILER_ID@")
+set(CMAKE_CUDA_COMPILER_VERSION "@CMAKE_CUDA_COMPILER_VERSION@")
+set(CMAKE_CUDA_DEVICE_LINKER "@CMAKE_CUDA_DEVICE_LINKER@")
+set(CMAKE_CUDA_FATBINARY "@CMAKE_CUDA_FATBINARY@")
+set(CMAKE_CUDA_STANDARD_COMPUTED_DEFAULT "@CMAKE_CUDA_STANDARD_COMPUTED_DEFAULT@")
+set(CMAKE_CUDA_EXTENSIONS_COMPUTED_DEFAULT "@CMAKE_CUDA_EXTENSIONS_COMPUTED_DEFAULT@")
+set(CMAKE_CUDA_COMPILE_FEATURES "@CMAKE_CUDA_COMPILE_FEATURES@")
+set(CMAKE_CUDA03_COMPILE_FEATURES "@CMAKE_CUDA03_COMPILE_FEATURES@")
+set(CMAKE_CUDA11_COMPILE_FEATURES "@CMAKE_CUDA11_COMPILE_FEATURES@")
+set(CMAKE_CUDA14_COMPILE_FEATURES "@CMAKE_CUDA14_COMPILE_FEATURES@")
+set(CMAKE_CUDA17_COMPILE_FEATURES "@CMAKE_CUDA17_COMPILE_FEATURES@")
+set(CMAKE_CUDA20_COMPILE_FEATURES "@CMAKE_CUDA20_COMPILE_FEATURES@")
+set(CMAKE_CUDA23_COMPILE_FEATURES "@CMAKE_CUDA23_COMPILE_FEATURES@")
+
+set(CMAKE_CUDA_PLATFORM_ID "@CMAKE_CUDA_PLATFORM_ID@")
+set(CMAKE_CUDA_SIMULATE_ID "@CMAKE_CUDA_SIMULATE_ID@")
+set(CMAKE_CUDA_COMPILER_FRONTEND_VARIANT "@CMAKE_CUDA_COMPILER_FRONTEND_VARIANT@")
+set(CMAKE_CUDA_SIMULATE_VERSION "@CMAKE_CUDA_SIMULATE_VERSION@")
+@SET_MSVC_CUDA_ARCHITECTURE_ID@
+@_SET_CMAKE_CUDA_COMPILER_SYSROOT@
+
+set(CMAKE_CUDA_COMPILER_ENV_VAR "CUDACXX")
+set(CMAKE_CUDA_HOST_COMPILER_ENV_VAR "CUDAHOSTCXX")
+
+set(CMAKE_CUDA_COMPILER_LOADED 1)
+set(CMAKE_CUDA_COMPILER_ID_RUN 1)
+set(CMAKE_CUDA_SOURCE_FILE_EXTENSIONS cu)
+set(CMAKE_CUDA_LINKER_PREFERENCE 15)
+set(CMAKE_CUDA_LINKER_PREFERENCE_PROPAGATES 1)
+
+set(CMAKE_CUDA_SIZEOF_DATA_PTR "@CMAKE_CUDA_SIZEOF_DATA_PTR@")
+set(CMAKE_CUDA_COMPILER_ABI "@CMAKE_CUDA_COMPILER_ABI@")
+set(CMAKE_CUDA_BYTE_ORDER "@CMAKE_CUDA_BYTE_ORDER@")
+set(CMAKE_CUDA_LIBRARY_ARCHITECTURE "@CMAKE_CUDA_LIBRARY_ARCHITECTURE@")
+
+if(CMAKE_CUDA_SIZEOF_DATA_PTR)
+  set(CMAKE_SIZEOF_VOID_P "${CMAKE_CUDA_SIZEOF_DATA_PTR}")
+endif()
+
+if(CMAKE_CUDA_COMPILER_ABI)
+  set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CUDA_COMPILER_ABI}")
+endif()
+
+if(CMAKE_CUDA_LIBRARY_ARCHITECTURE)
+  set(CMAKE_LIBRARY_ARCHITECTURE "@CMAKE_CUDA_LIBRARY_ARCHITECTURE@")
+endif()
+
+set(CMAKE_CUDA_COMPILER_TOOLKIT_ROOT "@CMAKE_CUDA_COMPILER_TOOLKIT_ROOT@")
+set(CMAKE_CUDA_COMPILER_TOOLKIT_LIBRARY_ROOT "@CMAKE_CUDA_COMPILER_TOOLKIT_LIBRARY_ROOT@")
+set(CMAKE_CUDA_COMPILER_LIBRARY_ROOT "@CMAKE_CUDA_COMPILER_LIBRARY_ROOT@")
+
+set(CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES "@CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES@")
+
+set(CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES "@CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES@")
+set(CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES "@CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES@")
+set(CMAKE_CUDA_HOST_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "@CMAKE_CUDA_HOST_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES@")
+
+set(CMAKE_CUDA_IMPLICIT_INCLUDE_DIRECTORIES "@CMAKE_CUDA_IMPLICIT_INCLUDE_DIRECTORIES@")
+set(CMAKE_CUDA_IMPLICIT_LINK_LIBRARIES "@CMAKE_CUDA_IMPLICIT_LINK_LIBRARIES@")
+set(CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES "@CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES@")
+set(CMAKE_CUDA_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "@CMAKE_CUDA_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES@")
+
+@_SET_CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT@
+
+set(CMAKE_LINKER "@CMAKE_LINKER@")
+set(CMAKE_AR "@CMAKE_AR@")
+set(CMAKE_MT "@CMAKE_MT@")
diff --git a/share/cmake-3.22/Modules/CMakeCUDACompilerABI.cu b/share/cmake-3.22/Modules/CMakeCUDACompilerABI.cu
new file mode 100644
index 0000000..449a079
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeCUDACompilerABI.cu
@@ -0,0 +1,18 @@
+#ifndef __CUDACC__
+#  error "A C or C++ compiler has been selected for CUDA"
+#endif
+
+#include "CMakeCompilerABI.h"
+
+int main(int argc, char* argv[])
+{
+  int require = 0;
+  require += info_sizeof_dptr[argc];
+  require += info_byte_order_big_endian[argc];
+  require += info_byte_order_little_endian[argc];
+#if defined(ABI_ID)
+  require += info_abi[argc];
+#endif
+  (void)argv;
+  return require;
+}
diff --git a/share/cmake-3.22/Modules/CMakeCUDACompilerId.cu.in b/share/cmake-3.22/Modules/CMakeCUDACompilerId.cu.in
new file mode 100644
index 0000000..becb9b4
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeCUDACompilerId.cu.in
@@ -0,0 +1,65 @@
+#ifndef __CUDACC__
+# error "A C or C++ compiler has been selected for CUDA"
+#endif
+
+@CMAKE_CUDA_COMPILER_ID_CONTENT@
+
+/* Construct the string literal in pieces to prevent the source from
+   getting matched.  Store it in a pointer rather than an array
+   because some compilers will just produce instructions to fill the
+   array rather than assigning a pointer to a static array.  */
+char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
+#ifdef SIMULATE_ID
+char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
+#endif
+
+@CMAKE_CUDA_COMPILER_ID_PLATFORM_CONTENT@
+@CMAKE_CUDA_COMPILER_ID_ERROR_FOR_TEST@
+
+const char* info_language_standard_default = "INFO" ":" "standard_default["
+#if __cplusplus > 202002L
+  "23"
+#elif __cplusplus > 201703L
+  "20"
+#elif __cplusplus >= 201703L
+  "17"
+#elif __cplusplus >= 201402L
+  "14"
+#elif __cplusplus >= 201103L
+  "11"
+#else
+  "03"
+#endif
+"]";
+
+const char* info_language_extensions_default = "INFO" ":" "extensions_default["
+/* !defined(_MSC_VER) to exclude Clang's MSVC compatibility mode. */
+#if (defined(__clang__) || defined(__GNUC__)) && !defined(__STRICT_ANSI__) && \
+  !defined(_MSC_VER)
+  "ON"
+#else
+  "OFF"
+#endif
+"]";
+
+/*--------------------------------------------------------------------------*/
+
+int main(int argc, char* argv[])
+{
+  int require = 0;
+  require += info_compiler[argc];
+  require += info_platform[argc];
+#ifdef COMPILER_VERSION_MAJOR
+  require += info_version[argc];
+#endif
+#ifdef SIMULATE_ID
+  require += info_simulate[argc];
+#endif
+#ifdef SIMULATE_VERSION_MAJOR
+  require += info_simulate_version[argc];
+#endif
+  require += info_language_standard_default[argc];
+  require += info_language_extensions_default[argc];
+  (void)argv;
+  return require;
+}
diff --git a/share/cmake-3.22/Modules/CMakeCUDAInformation.cmake b/share/cmake-3.22/Modules/CMakeCUDAInformation.cmake
new file mode 100644
index 0000000..e9cfed6
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeCUDAInformation.cmake
@@ -0,0 +1,219 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+if(UNIX)
+  set(CMAKE_CUDA_OUTPUT_EXTENSION .o)
+else()
+  set(CMAKE_CUDA_OUTPUT_EXTENSION .obj)
+endif()
+set(CMAKE_INCLUDE_FLAG_CUDA "-I")
+
+# Set implicit links early so compiler-specific modules can use them.
+set(__IMPLICIT_LINKS)
+foreach(dir ${CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES})
+  string(APPEND __IMPLICIT_LINKS " -L\"${dir}\"")
+endforeach()
+foreach(lib ${CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES})
+  if(${lib} MATCHES "/")
+    string(APPEND __IMPLICIT_LINKS " \"${lib}\"")
+  else()
+    string(APPEND __IMPLICIT_LINKS " -l${lib}")
+  endif()
+endforeach()
+
+# Load compiler-specific information.
+if(CMAKE_CUDA_COMPILER_ID)
+  include(Compiler/${CMAKE_CUDA_COMPILER_ID}-CUDA OPTIONAL)
+endif()
+
+# load the system- and compiler specific files
+if(CMAKE_CUDA_COMPILER_ID)
+  # load a hardware specific file, mostly useful for embedded compilers
+  if(CMAKE_SYSTEM_PROCESSOR)
+    include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_CUDA_COMPILER_ID}-CUDA-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL)
+  endif()
+  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_CUDA_COMPILER_ID}-CUDA OPTIONAL)
+endif()
+
+
+# This should be included before the _INIT variables are
+# used to initialize the cache.  Since the rule variables
+# have if blocks on them, users can still define them here.
+# But, it should still be after the platform file so changes can
+# be made to those values.
+
+if(CMAKE_USER_MAKE_RULES_OVERRIDE)
+  # Save the full path of the file so try_compile can use it.
+  include(${CMAKE_USER_MAKE_RULES_OVERRIDE} RESULT_VARIABLE _override)
+  set(CMAKE_USER_MAKE_RULES_OVERRIDE "${_override}")
+endif()
+
+if(CMAKE_USER_MAKE_RULES_OVERRIDE_CUDA)
+  # Save the full path of the file so try_compile can use it.
+  include(${CMAKE_USER_MAKE_RULES_OVERRIDE_CUDA} RESULT_VARIABLE _override)
+  set(CMAKE_USER_MAKE_RULES_OVERRIDE_CUDA "${_override}")
+endif()
+
+
+if(NOT CMAKE_SHARED_LIBRARY_RUNTIME_CUDA_FLAG)
+  set(CMAKE_SHARED_LIBRARY_RUNTIME_CUDA_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG})
+endif()
+
+if(NOT CMAKE_SHARED_LIBRARY_RUNTIME_CUDA_FLAG_SEP)
+  set(CMAKE_SHARED_LIBRARY_RUNTIME_CUDA_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP})
+endif()
+
+if(NOT CMAKE_SHARED_LIBRARY_RPATH_LINK_CUDA_FLAG)
+  set(CMAKE_SHARED_LIBRARY_RPATH_LINK_CUDA_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG})
+endif()
+
+if(NOT DEFINED CMAKE_EXE_EXPORTS_CUDA_FLAG)
+  set(CMAKE_EXE_EXPORTS_CUDA_FLAG ${CMAKE_EXE_EXPORTS_C_FLAG})
+endif()
+
+if(NOT DEFINED CMAKE_SHARED_LIBRARY_SONAME_CUDA_FLAG)
+  set(CMAKE_SHARED_LIBRARY_SONAME_CUDA_FLAG ${CMAKE_SHARED_LIBRARY_SONAME_C_FLAG})
+endif()
+
+if(NOT CMAKE_EXECUTABLE_RUNTIME_CUDA_FLAG)
+  set(CMAKE_EXECUTABLE_RUNTIME_CUDA_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_CUDA_FLAG})
+endif()
+
+if(NOT CMAKE_EXECUTABLE_RUNTIME_CUDA_FLAG_SEP)
+  set(CMAKE_EXECUTABLE_RUNTIME_CUDA_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_CUDA_FLAG_SEP})
+endif()
+
+if(NOT CMAKE_EXECUTABLE_RPATH_LINK_CUDA_FLAG)
+  set(CMAKE_EXECUTABLE_RPATH_LINK_CUDA_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_CUDA_FLAG})
+endif()
+
+if(NOT DEFINED CMAKE_SHARED_LIBRARY_LINK_CUDA_WITH_RUNTIME_PATH)
+  set(CMAKE_SHARED_LIBRARY_LINK_CUDA_WITH_RUNTIME_PATH ${CMAKE_SHARED_LIBRARY_LINK_C_WITH_RUNTIME_PATH})
+endif()
+
+
+# for most systems a module is the same as a shared library
+# so unless the variable CMAKE_MODULE_EXISTS is set just
+# copy the values from the LIBRARY variables
+if(NOT CMAKE_MODULE_EXISTS)
+  set(CMAKE_SHARED_MODULE_CUDA_FLAGS ${CMAKE_SHARED_LIBRARY_CUDA_FLAGS})
+  set(CMAKE_SHARED_MODULE_CREATE_CUDA_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_CUDA_FLAGS})
+endif()
+
+if(CMAKE_EXECUTABLE_FORMAT STREQUAL "ELF")
+  if(NOT DEFINED CMAKE_CUDA_LINK_WHAT_YOU_USE_FLAG)
+    set(CMAKE_CUDA_LINK_WHAT_YOU_USE_FLAG "LINKER:--no-as-needed")
+  endif()
+  if(NOT DEFINED CMAKE_LINK_WHAT_YOU_USE_CHECK)
+    set(CMAKE_LINK_WHAT_YOU_USE_CHECK ldd -u -r)
+  endif()
+endif()
+
+# add the flags to the cache based
+# on the initial values computed in the platform/*.cmake files
+# use _INIT variables so that this only happens the first time
+# and you can set these flags in the cmake cache
+set(CMAKE_CUDA_FLAGS_INIT "$ENV{CUDAFLAGS} ${CMAKE_CUDA_FLAGS_INIT}")
+
+cmake_initialize_per_config_variable(CMAKE_CUDA_FLAGS "Flags used by the CUDA compiler")
+
+if(CMAKE_CUDA_STANDARD_LIBRARIES_INIT)
+  set(CMAKE_CUDA_STANDARD_LIBRARIES "${CMAKE_CUDA_STANDARD_LIBRARIES_INIT}"
+    CACHE STRING "Libraries linked by default with all CUDA applications.")
+  mark_as_advanced(CMAKE_CUDA_STANDARD_LIBRARIES)
+endif()
+
+if(NOT CMAKE_CUDA_COMPILER_LAUNCHER AND DEFINED ENV{CMAKE_CUDA_COMPILER_LAUNCHER})
+  set(CMAKE_CUDA_COMPILER_LAUNCHER "$ENV{CMAKE_CUDA_COMPILER_LAUNCHER}"
+    CACHE STRING "Compiler launcher for CUDA.")
+endif()
+
+include(CMakeCommonLanguageInclude)
+
+# now define the following rules:
+# CMAKE_CUDA_CREATE_SHARED_LIBRARY
+# CMAKE_CUDA_CREATE_SHARED_MODULE
+# CMAKE_CUDA_COMPILE_WHOLE_COMPILATION
+# CMAKE_CUDA_COMPILE_PTX_COMPILATION
+# CMAKE_CUDA_COMPILE_SEPARABLE_COMPILATION
+# CMAKE_CUDA_LINK_EXECUTABLE
+
+# create a shared library
+if(NOT CMAKE_CUDA_CREATE_SHARED_LIBRARY)
+  set(CMAKE_CUDA_CREATE_SHARED_LIBRARY
+      "<CMAKE_CUDA_HOST_LINK_LAUNCHER> <CMAKE_SHARED_LIBRARY_CUDA_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CUDA_FLAGS> <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>${__IMPLICIT_LINKS}")
+endif()
+
+# create a shared module copy the shared library rule by default
+if(NOT CMAKE_CUDA_CREATE_SHARED_MODULE)
+  set(CMAKE_CUDA_CREATE_SHARED_MODULE ${CMAKE_CUDA_CREATE_SHARED_LIBRARY})
+endif()
+
+# Create a static archive incrementally for large object file counts.
+if(NOT DEFINED CMAKE_CUDA_ARCHIVE_CREATE)
+  set(CMAKE_CUDA_ARCHIVE_CREATE "<CMAKE_AR> qc <TARGET> <LINK_FLAGS> <OBJECTS>")
+endif()
+if(NOT DEFINED CMAKE_CUDA_ARCHIVE_APPEND)
+  set(CMAKE_CUDA_ARCHIVE_APPEND "<CMAKE_AR> q <TARGET> <LINK_FLAGS> <OBJECTS>")
+endif()
+if(NOT DEFINED CMAKE_CUDA_ARCHIVE_FINISH)
+  set(CMAKE_CUDA_ARCHIVE_FINISH "<CMAKE_RANLIB> <TARGET>")
+endif()
+
+#Specify how to compile when ptx has been requested
+if(NOT CMAKE_CUDA_COMPILE_PTX_COMPILATION)
+  set(CMAKE_CUDA_COMPILE_PTX_COMPILATION
+    "<CMAKE_CUDA_COMPILER> ${_CMAKE_CUDA_EXTRA_FLAGS} <DEFINES> <INCLUDES> <FLAGS> ${_CMAKE_COMPILE_AS_CUDA_FLAG} ${_CMAKE_CUDA_PTX_FLAG} <SOURCE> -o <OBJECT>")
+endif()
+
+#Specify how to compile when separable compilation has been requested
+if(NOT CMAKE_CUDA_COMPILE_SEPARABLE_COMPILATION)
+  set(CMAKE_CUDA_COMPILE_SEPARABLE_COMPILATION
+    "<CMAKE_CUDA_COMPILER> ${_CMAKE_CUDA_EXTRA_FLAGS} <DEFINES> <INCLUDES> <FLAGS> ${_CMAKE_COMPILE_AS_CUDA_FLAG} ${_CMAKE_CUDA_DEVICE_CODE} <SOURCE> -o <OBJECT>")
+endif()
+
+#Specify how to compile when whole compilation has been requested
+if(NOT CMAKE_CUDA_COMPILE_WHOLE_COMPILATION)
+  set(CMAKE_CUDA_COMPILE_WHOLE_COMPILATION
+    "<CMAKE_CUDA_COMPILER> ${_CMAKE_CUDA_EXTRA_FLAGS} <DEFINES> <INCLUDES> <FLAGS> ${_CMAKE_COMPILE_AS_CUDA_FLAG} -c <SOURCE> -o <OBJECT>")
+endif()
+
+# compile a cu file into an executable
+if(NOT CMAKE_CUDA_LINK_EXECUTABLE)
+  set(CMAKE_CUDA_LINK_EXECUTABLE
+    "<CMAKE_CUDA_HOST_LINK_LAUNCHER> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>${__IMPLICIT_LINKS}")
+endif()
+
+# Add implicit host link directories that contain device libraries
+# to the device link line.
+set(__IMPLICIT_DLINK_DIRS ${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES})
+if(__IMPLICIT_DLINK_DIRS)
+  list(REMOVE_ITEM __IMPLICIT_DLINK_DIRS ${CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES})
+endif()
+set(__IMPLICIT_DLINK_FLAGS)
+foreach(dir ${__IMPLICIT_DLINK_DIRS})
+  if(EXISTS "${dir}/libcurand_static.a")
+    string(APPEND __IMPLICIT_DLINK_FLAGS " -L\"${dir}\"")
+  endif()
+endforeach()
+unset(__IMPLICIT_DLINK_DIRS)
+
+
+#These are used when linking relocatable (dc) cuda code
+if(NOT CMAKE_CUDA_DEVICE_LINK_LIBRARY)
+  set(CMAKE_CUDA_DEVICE_LINK_LIBRARY
+    "<CMAKE_CUDA_COMPILER> ${_CMAKE_CUDA_EXTRA_FLAGS} <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> ${CMAKE_CUDA_COMPILE_OPTIONS_PIC} ${_CMAKE_CUDA_EXTRA_DEVICE_LINK_FLAGS} -shared -dlink <OBJECTS> -o <TARGET> <LINK_LIBRARIES>${__IMPLICIT_DLINK_FLAGS}")
+endif()
+if(NOT CMAKE_CUDA_DEVICE_LINK_EXECUTABLE)
+  set(CMAKE_CUDA_DEVICE_LINK_EXECUTABLE
+    "<CMAKE_CUDA_COMPILER> ${_CMAKE_CUDA_EXTRA_FLAGS} <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> ${CMAKE_CUDA_COMPILE_OPTIONS_PIC} ${_CMAKE_CUDA_EXTRA_DEVICE_LINK_FLAGS} -shared -dlink <OBJECTS> -o <TARGET> <LINK_LIBRARIES>${__IMPLICIT_DLINK_FLAGS}")
+endif()
+
+# Used when device linking is handled by CMake.
+if(NOT CMAKE_CUDA_DEVICE_LINK_COMPILE)
+  set(CMAKE_CUDA_DEVICE_LINK_COMPILE "<CMAKE_CUDA_COMPILER> ${_CMAKE_CUDA_EXTRA_FLAGS} <FLAGS> -D__CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__ -D__NV_EXTRA_INITIALIZATION=\"\" -D__NV_EXTRA_FINALIZATION=\"\" -DREGISTERLINKBINARYFILE=\\\"<REGISTER_FILE>\\\" -DFATBINFILE=\\\"<FATBINARY>\\\" ${_CMAKE_COMPILE_AS_CUDA_FLAG} -c \"${CMAKE_CUDA_COMPILER_TOOLKIT_LIBRARY_ROOT}/bin/crt/link.stub\" -o <OBJECT>")
+endif()
+
+unset(__IMPLICIT_DLINK_FLAGS)
+
+set(CMAKE_CUDA_INFORMATION_LOADED 1)
diff --git a/share/cmake-3.22/Modules/CMakeCXXCompiler.cmake.in b/share/cmake-3.22/Modules/CMakeCXXCompiler.cmake.in
new file mode 100644
index 0000000..534e960
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeCXXCompiler.cmake.in
@@ -0,0 +1,83 @@
+set(CMAKE_CXX_COMPILER "@CMAKE_CXX_COMPILER@")
+set(CMAKE_CXX_COMPILER_ARG1 "@CMAKE_CXX_COMPILER_ARG1@")
+set(CMAKE_CXX_COMPILER_ID "@CMAKE_CXX_COMPILER_ID@")
+set(CMAKE_CXX_COMPILER_VERSION "@CMAKE_CXX_COMPILER_VERSION@")
+set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "@CMAKE_CXX_COMPILER_VERSION_INTERNAL@")
+set(CMAKE_CXX_COMPILER_WRAPPER "@CMAKE_CXX_COMPILER_WRAPPER@")
+set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "@CMAKE_CXX_STANDARD_COMPUTED_DEFAULT@")
+set(CMAKE_CXX_EXTENSIONS_COMPUTED_DEFAULT "@CMAKE_CXX_EXTENSIONS_COMPUTED_DEFAULT@")
+set(CMAKE_CXX_COMPILE_FEATURES "@CMAKE_CXX_COMPILE_FEATURES@")
+set(CMAKE_CXX98_COMPILE_FEATURES "@CMAKE_CXX98_COMPILE_FEATURES@")
+set(CMAKE_CXX11_COMPILE_FEATURES "@CMAKE_CXX11_COMPILE_FEATURES@")
+set(CMAKE_CXX14_COMPILE_FEATURES "@CMAKE_CXX14_COMPILE_FEATURES@")
+set(CMAKE_CXX17_COMPILE_FEATURES "@CMAKE_CXX17_COMPILE_FEATURES@")
+set(CMAKE_CXX20_COMPILE_FEATURES "@CMAKE_CXX20_COMPILE_FEATURES@")
+set(CMAKE_CXX23_COMPILE_FEATURES "@CMAKE_CXX23_COMPILE_FEATURES@")
+
+set(CMAKE_CXX_PLATFORM_ID "@CMAKE_CXX_PLATFORM_ID@")
+set(CMAKE_CXX_SIMULATE_ID "@CMAKE_CXX_SIMULATE_ID@")
+set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "@CMAKE_CXX_COMPILER_FRONTEND_VARIANT@")
+set(CMAKE_CXX_SIMULATE_VERSION "@CMAKE_CXX_SIMULATE_VERSION@")
+@_SET_CMAKE_CXX_COMPILER_ARCHITECTURE_ID@
+@_SET_CMAKE_CXX_COMPILER_SYSROOT@
+@SET_MSVC_CXX_ARCHITECTURE_ID@
+@SET_CMAKE_XCODE_ARCHS@
+set(CMAKE_AR "@CMAKE_AR@")
+set(CMAKE_CXX_COMPILER_AR "@CMAKE_CXX_COMPILER_AR@")
+set(CMAKE_RANLIB "@CMAKE_RANLIB@")
+set(CMAKE_CXX_COMPILER_RANLIB "@CMAKE_CXX_COMPILER_RANLIB@")
+set(CMAKE_LINKER "@CMAKE_LINKER@")
+set(CMAKE_MT "@CMAKE_MT@")
+set(CMAKE_COMPILER_IS_GNUCXX @CMAKE_COMPILER_IS_GNUCXX@)
+set(CMAKE_CXX_COMPILER_LOADED 1)
+set(CMAKE_CXX_COMPILER_WORKS @CMAKE_CXX_COMPILER_WORKS@)
+set(CMAKE_CXX_ABI_COMPILED @CMAKE_CXX_ABI_COMPILED@)
+
+set(CMAKE_CXX_COMPILER_ENV_VAR "CXX")
+
+set(CMAKE_CXX_COMPILER_ID_RUN 1)
+set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;mpp;CPP;ixx;cppm)
+set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC)
+
+foreach (lang C OBJC OBJCXX)
+  if (CMAKE_${lang}_COMPILER_ID_RUN)
+    foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS)
+      list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension})
+    endforeach()
+  endif()
+endforeach()
+
+set(CMAKE_CXX_LINKER_PREFERENCE 30)
+set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1)
+
+# Save compiler ABI information.
+set(CMAKE_CXX_SIZEOF_DATA_PTR "@CMAKE_CXX_SIZEOF_DATA_PTR@")
+set(CMAKE_CXX_COMPILER_ABI "@CMAKE_CXX_COMPILER_ABI@")
+set(CMAKE_CXX_BYTE_ORDER "@CMAKE_CXX_BYTE_ORDER@")
+set(CMAKE_CXX_LIBRARY_ARCHITECTURE "@CMAKE_CXX_LIBRARY_ARCHITECTURE@")
+
+if(CMAKE_CXX_SIZEOF_DATA_PTR)
+  set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}")
+endif()
+
+if(CMAKE_CXX_COMPILER_ABI)
+  set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}")
+endif()
+
+if(CMAKE_CXX_LIBRARY_ARCHITECTURE)
+  set(CMAKE_LIBRARY_ARCHITECTURE "@CMAKE_CXX_LIBRARY_ARCHITECTURE@")
+endif()
+
+set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "@CMAKE_CXX_CL_SHOWINCLUDES_PREFIX@")
+if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX)
+  set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}")
+endif()
+
+@CMAKE_CXX_COMPILER_CUSTOM_CODE@
+@CMAKE_CXX_SYSROOT_FLAG_CODE@
+@CMAKE_CXX_OSX_DEPLOYMENT_TARGET_FLAG_CODE@
+
+set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "@CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES@")
+set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "@CMAKE_CXX_IMPLICIT_LINK_LIBRARIES@")
+set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "@CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES@")
+set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "@CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES@")
diff --git a/share/cmake-3.22/Modules/CMakeCXXCompilerABI.cpp b/share/cmake-3.22/Modules/CMakeCXXCompilerABI.cpp
new file mode 100644
index 0000000..036b96e
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeCXXCompilerABI.cpp
@@ -0,0 +1,18 @@
+#ifndef __cplusplus
+#  error "A C compiler has been selected for C++."
+#endif
+
+#include "CMakeCompilerABI.h"
+
+int main(int argc, char* argv[])
+{
+  int require = 0;
+  require += info_sizeof_dptr[argc];
+  require += info_byte_order_big_endian[argc];
+  require += info_byte_order_little_endian[argc];
+#if defined(ABI_ID)
+  require += info_abi[argc];
+#endif
+  (void)argv;
+  return require;
+}
diff --git a/share/cmake-3.22/Modules/CMakeCXXCompilerId.cpp.in b/share/cmake-3.22/Modules/CMakeCXXCompilerId.cpp.in
new file mode 100644
index 0000000..e7a5487
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeCXXCompilerId.cpp.in
@@ -0,0 +1,105 @@
+/* This source file must have a .cpp extension so that all C++ compilers
+   recognize the extension without flags.  Borland does not know .cxx for
+   example.  */
+#ifndef __cplusplus
+# error "A C compiler has been selected for C++."
+#endif
+
+#if !defined(__has_include)
+/* If the compiler does not have __has_include, pretend the answer is
+   always no.  */
+#  define __has_include(x) 0
+#endif
+
+@CMAKE_CXX_COMPILER_ID_CONTENT@
+
+/* Construct the string literal in pieces to prevent the source from
+   getting matched.  Store it in a pointer rather than an array
+   because some compilers will just produce instructions to fill the
+   array rather than assigning a pointer to a static array.  */
+char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
+#ifdef SIMULATE_ID
+char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
+#endif
+
+#ifdef __QNXNTO__
+char const* qnxnto = "INFO" ":" "qnxnto[]";
+#endif
+
+#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
+char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
+#endif
+
+@CMAKE_CXX_COMPILER_ID_PLATFORM_CONTENT@
+@CMAKE_CXX_COMPILER_ID_ERROR_FOR_TEST@
+
+#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L
+#  if defined(__INTEL_CXX11_MODE__)
+#    if defined(__cpp_aggregate_nsdmi)
+#      define CXX_STD 201402L
+#    else
+#      define CXX_STD 201103L
+#    endif
+#  else
+#    define CXX_STD 199711L
+#  endif
+#elif defined(_MSC_VER) && defined(_MSVC_LANG)
+#  define CXX_STD _MSVC_LANG
+#else
+#  define CXX_STD __cplusplus
+#endif
+
+const char* info_language_standard_default = "INFO" ":" "standard_default["
+#if CXX_STD > 202002L
+  "23"
+#elif CXX_STD > 201703L
+  "20"
+#elif CXX_STD >= 201703L
+  "17"
+#elif CXX_STD >= 201402L
+  "14"
+#elif CXX_STD >= 201103L
+  "11"
+#else
+  "98"
+#endif
+"]";
+
+const char* info_language_extensions_default = "INFO" ":" "extensions_default["
+/* !defined(_MSC_VER) to exclude Clang's MSVC compatibility mode. */
+#if (defined(__clang__) || defined(__GNUC__) ||                               \
+     defined(__TI_COMPILER_VERSION__)) &&                                     \
+  !defined(__STRICT_ANSI__) && !defined(_MSC_VER)
+  "ON"
+#else
+  "OFF"
+#endif
+"]";
+
+/*--------------------------------------------------------------------------*/
+
+int main(int argc, char* argv[])
+{
+  int require = 0;
+  require += info_compiler[argc];
+  require += info_platform[argc];
+#ifdef COMPILER_VERSION_MAJOR
+  require += info_version[argc];
+#endif
+#ifdef COMPILER_VERSION_INTERNAL
+  require += info_version_internal[argc];
+#endif
+#ifdef SIMULATE_ID
+  require += info_simulate[argc];
+#endif
+#ifdef SIMULATE_VERSION_MAJOR
+  require += info_simulate_version[argc];
+#endif
+#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
+  require += info_cray[argc];
+#endif
+  require += info_language_standard_default[argc];
+  require += info_language_extensions_default[argc];
+  (void)argv;
+  return require;
+}
diff --git a/share/cmake-3.22/Modules/CMakeCXXInformation.cmake b/share/cmake-3.22/Modules/CMakeCXXInformation.cmake
new file mode 100644
index 0000000..53abf37
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeCXXInformation.cmake
@@ -0,0 +1,296 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# This file sets the basic flags for the C++ language in CMake.
+# It also loads the available platform file for the system-compiler
+# if it exists.
+# It also loads a system - compiler - processor (or target hardware)
+# specific file, which is mainly useful for crosscompiling and embedded systems.
+
+include(CMakeLanguageInformation)
+
+# some compilers use different extensions (e.g. sdcc uses .rel)
+# so set the extension here first so it can be overridden by the compiler specific file
+if(UNIX)
+  set(CMAKE_CXX_OUTPUT_EXTENSION .o)
+else()
+  set(CMAKE_CXX_OUTPUT_EXTENSION .obj)
+endif()
+
+set(_INCLUDED_FILE 0)
+
+# Load compiler-specific information.
+if(CMAKE_CXX_COMPILER_ID)
+  include(Compiler/${CMAKE_CXX_COMPILER_ID}-CXX OPTIONAL)
+endif()
+
+set(CMAKE_BASE_NAME)
+get_filename_component(CMAKE_BASE_NAME "${CMAKE_CXX_COMPILER}" NAME_WE)
+# since the gnu compiler has several names force g++
+if(CMAKE_COMPILER_IS_GNUCXX)
+  set(CMAKE_BASE_NAME g++)
+endif()
+
+
+# load a hardware specific file, mostly useful for embedded compilers
+if(CMAKE_SYSTEM_PROCESSOR)
+  if(CMAKE_CXX_COMPILER_ID)
+    include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_CXX_COMPILER_ID}-CXX-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL RESULT_VARIABLE _INCLUDED_FILE)
+  endif()
+  if (NOT _INCLUDED_FILE)
+    include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_BASE_NAME}-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL)
+  endif ()
+endif()
+
+# load the system- and compiler specific files
+if(CMAKE_CXX_COMPILER_ID)
+  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_CXX_COMPILER_ID}-CXX OPTIONAL RESULT_VARIABLE _INCLUDED_FILE)
+endif()
+if (NOT _INCLUDED_FILE)
+  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_BASE_NAME} OPTIONAL
+          RESULT_VARIABLE _INCLUDED_FILE)
+endif ()
+
+# load any compiler-wrapper specific information
+if (CMAKE_CXX_COMPILER_WRAPPER)
+  __cmake_include_compiler_wrapper(CXX)
+endif ()
+
+# We specify the compiler information in the system file for some
+# platforms, but this language may not have been enabled when the file
+# was first included.  Include it again to get the language info.
+# Remove this when all compiler info is removed from system files.
+if (NOT _INCLUDED_FILE)
+  include(Platform/${CMAKE_SYSTEM_NAME} OPTIONAL)
+endif ()
+
+if(CMAKE_CXX_SIZEOF_DATA_PTR)
+  foreach(f ${CMAKE_CXX_ABI_FILES})
+    include(${f})
+  endforeach()
+  unset(CMAKE_CXX_ABI_FILES)
+endif()
+
+# This should be included before the _INIT variables are
+# used to initialize the cache.  Since the rule variables
+# have if blocks on them, users can still define them here.
+# But, it should still be after the platform file so changes can
+# be made to those values.
+
+if(CMAKE_USER_MAKE_RULES_OVERRIDE)
+  # Save the full path of the file so try_compile can use it.
+  include(${CMAKE_USER_MAKE_RULES_OVERRIDE} RESULT_VARIABLE _override)
+  set(CMAKE_USER_MAKE_RULES_OVERRIDE "${_override}")
+endif()
+
+if(CMAKE_USER_MAKE_RULES_OVERRIDE_CXX)
+  # Save the full path of the file so try_compile can use it.
+  include(${CMAKE_USER_MAKE_RULES_OVERRIDE_CXX} RESULT_VARIABLE _override)
+  set(CMAKE_USER_MAKE_RULES_OVERRIDE_CXX "${_override}")
+endif()
+
+
+# Create a set of shared library variable specific to C++
+# For 90% of the systems, these are the same flags as the C versions
+# so if these are not set just copy the flags from the c version
+if(NOT CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS)
+  set(CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS})
+endif()
+
+if(NOT CMAKE_CXX_COMPILE_OPTIONS_PIC)
+  set(CMAKE_CXX_COMPILE_OPTIONS_PIC ${CMAKE_C_COMPILE_OPTIONS_PIC})
+endif()
+
+if(NOT CMAKE_CXX_COMPILE_OPTIONS_PIE)
+  set(CMAKE_CXX_COMPILE_OPTIONS_PIE ${CMAKE_C_COMPILE_OPTIONS_PIE})
+endif()
+if(NOT CMAKE_CXX_LINK_OPTIONS_PIE)
+  set(CMAKE_CXX_LINK_OPTIONS_PIE ${CMAKE_C_LINK_OPTIONS_PIE})
+endif()
+if(NOT CMAKE_CXX_LINK_OPTIONS_NO_PIE)
+  set(CMAKE_CXX_LINK_OPTIONS_NO_PIE ${CMAKE_C_LINK_OPTIONS_NO_PIE})
+endif()
+
+if(NOT CMAKE_CXX_COMPILE_OPTIONS_DLL)
+  set(CMAKE_CXX_COMPILE_OPTIONS_DLL ${CMAKE_C_COMPILE_OPTIONS_DLL})
+endif()
+
+if(NOT CMAKE_SHARED_LIBRARY_CXX_FLAGS)
+  set(CMAKE_SHARED_LIBRARY_CXX_FLAGS ${CMAKE_SHARED_LIBRARY_C_FLAGS})
+endif()
+
+if(NOT DEFINED CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS)
+  set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS ${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS})
+endif()
+
+if(NOT CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG)
+  set(CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG})
+endif()
+
+if(NOT CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG_SEP)
+  set(CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP})
+endif()
+
+if(NOT CMAKE_SHARED_LIBRARY_RPATH_LINK_CXX_FLAG)
+  set(CMAKE_SHARED_LIBRARY_RPATH_LINK_CXX_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG})
+endif()
+
+if(NOT DEFINED CMAKE_EXE_EXPORTS_CXX_FLAG)
+  set(CMAKE_EXE_EXPORTS_CXX_FLAG ${CMAKE_EXE_EXPORTS_C_FLAG})
+endif()
+
+if(NOT DEFINED CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG)
+  set(CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG ${CMAKE_SHARED_LIBRARY_SONAME_C_FLAG})
+endif()
+
+if(NOT CMAKE_EXECUTABLE_RUNTIME_CXX_FLAG)
+  set(CMAKE_EXECUTABLE_RUNTIME_CXX_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG})
+endif()
+
+if(NOT CMAKE_EXECUTABLE_RUNTIME_CXX_FLAG_SEP)
+  set(CMAKE_EXECUTABLE_RUNTIME_CXX_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG_SEP})
+endif()
+
+if(NOT CMAKE_EXECUTABLE_RPATH_LINK_CXX_FLAG)
+  set(CMAKE_EXECUTABLE_RPATH_LINK_CXX_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_CXX_FLAG})
+endif()
+
+if(NOT DEFINED CMAKE_SHARED_LIBRARY_LINK_CXX_WITH_RUNTIME_PATH)
+  set(CMAKE_SHARED_LIBRARY_LINK_CXX_WITH_RUNTIME_PATH ${CMAKE_SHARED_LIBRARY_LINK_C_WITH_RUNTIME_PATH})
+endif()
+
+if(NOT CMAKE_INCLUDE_FLAG_CXX)
+  set(CMAKE_INCLUDE_FLAG_CXX ${CMAKE_INCLUDE_FLAG_C})
+endif()
+
+# for most systems a module is the same as a shared library
+# so unless the variable CMAKE_MODULE_EXISTS is set just
+# copy the values from the LIBRARY variables
+if(NOT CMAKE_MODULE_EXISTS)
+  set(CMAKE_SHARED_MODULE_CXX_FLAGS ${CMAKE_SHARED_LIBRARY_CXX_FLAGS})
+  set(CMAKE_SHARED_MODULE_CREATE_CXX_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS})
+endif()
+
+# repeat for modules
+if(NOT CMAKE_SHARED_MODULE_CREATE_CXX_FLAGS)
+  set(CMAKE_SHARED_MODULE_CREATE_CXX_FLAGS ${CMAKE_SHARED_MODULE_CREATE_C_FLAGS})
+endif()
+
+if(NOT CMAKE_SHARED_MODULE_CXX_FLAGS)
+  set(CMAKE_SHARED_MODULE_CXX_FLAGS ${CMAKE_SHARED_MODULE_C_FLAGS})
+endif()
+
+# Initialize CXX link type selection flags from C versions.
+foreach(type SHARED_LIBRARY SHARED_MODULE EXE)
+  if(NOT CMAKE_${type}_LINK_STATIC_CXX_FLAGS)
+    set(CMAKE_${type}_LINK_STATIC_CXX_FLAGS
+      ${CMAKE_${type}_LINK_STATIC_C_FLAGS})
+  endif()
+  if(NOT CMAKE_${type}_LINK_DYNAMIC_CXX_FLAGS)
+    set(CMAKE_${type}_LINK_DYNAMIC_CXX_FLAGS
+      ${CMAKE_${type}_LINK_DYNAMIC_C_FLAGS})
+  endif()
+endforeach()
+
+if(CMAKE_EXECUTABLE_FORMAT STREQUAL "ELF")
+  if(NOT DEFINED CMAKE_CXX_LINK_WHAT_YOU_USE_FLAG)
+    set(CMAKE_CXX_LINK_WHAT_YOU_USE_FLAG "LINKER:--no-as-needed")
+  endif()
+  if(NOT DEFINED CMAKE_LINK_WHAT_YOU_USE_CHECK)
+    set(CMAKE_LINK_WHAT_YOU_USE_CHECK ldd -u -r)
+  endif()
+endif()
+
+# add the flags to the cache based
+# on the initial values computed in the platform/*.cmake files
+# use _INIT variables so that this only happens the first time
+# and you can set these flags in the cmake cache
+set(CMAKE_CXX_FLAGS_INIT "$ENV{CXXFLAGS} ${CMAKE_CXX_FLAGS_INIT}")
+
+cmake_initialize_per_config_variable(CMAKE_CXX_FLAGS "Flags used by the CXX compiler")
+
+if(CMAKE_CXX_STANDARD_LIBRARIES_INIT)
+  set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES_INIT}"
+    CACHE STRING "Libraries linked by default with all C++ applications.")
+  mark_as_advanced(CMAKE_CXX_STANDARD_LIBRARIES)
+endif()
+
+if(NOT CMAKE_CXX_COMPILER_LAUNCHER AND DEFINED ENV{CMAKE_CXX_COMPILER_LAUNCHER})
+  set(CMAKE_CXX_COMPILER_LAUNCHER "$ENV{CMAKE_CXX_COMPILER_LAUNCHER}"
+    CACHE STRING "Compiler launcher for CXX.")
+endif()
+
+if(NOT CMAKE_CXX_LINKER_LAUNCHER AND DEFINED ENV{CMAKE_CXX_LINKER_LAUNCHER})
+  set(CMAKE_CXX_LINKER_LAUNCHER "$ENV{CMAKE_CXX_LINKER_LAUNCHER}"
+    CACHE STRING "Linker launcher for CXX.")
+endif()
+
+include(CMakeCommonLanguageInclude)
+
+# now define the following rules:
+# CMAKE_CXX_CREATE_SHARED_LIBRARY
+# CMAKE_CXX_CREATE_SHARED_MODULE
+# CMAKE_CXX_COMPILE_OBJECT
+# CMAKE_CXX_LINK_EXECUTABLE
+
+# variables supplied by the generator at use time
+# <TARGET>
+# <TARGET_BASE> the target without the suffix
+# <OBJECTS>
+# <OBJECT>
+# <LINK_LIBRARIES>
+# <FLAGS>
+# <LINK_FLAGS>
+
+# CXX compiler information
+# <CMAKE_CXX_COMPILER>
+# <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS>
+# <CMAKE_CXX_SHARED_MODULE_CREATE_FLAGS>
+# <CMAKE_CXX_LINK_FLAGS>
+
+# Static library tools
+# <CMAKE_AR>
+# <CMAKE_RANLIB>
+
+
+# create a shared C++ library
+if(NOT CMAKE_CXX_CREATE_SHARED_LIBRARY)
+  set(CMAKE_CXX_CREATE_SHARED_LIBRARY
+      "<CMAKE_CXX_COMPILER> <CMAKE_SHARED_LIBRARY_CXX_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
+endif()
+
+# create a c++ shared module copy the shared library rule by default
+if(NOT CMAKE_CXX_CREATE_SHARED_MODULE)
+  set(CMAKE_CXX_CREATE_SHARED_MODULE ${CMAKE_CXX_CREATE_SHARED_LIBRARY})
+endif()
+
+
+# Create a static archive incrementally for large object file counts.
+# If CMAKE_CXX_CREATE_STATIC_LIBRARY is set it will override these.
+if(NOT DEFINED CMAKE_CXX_ARCHIVE_CREATE)
+  set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> qc <TARGET> <LINK_FLAGS> <OBJECTS>")
+endif()
+if(NOT DEFINED CMAKE_CXX_ARCHIVE_APPEND)
+  set(CMAKE_CXX_ARCHIVE_APPEND "<CMAKE_AR> q <TARGET> <LINK_FLAGS> <OBJECTS>")
+endif()
+if(NOT DEFINED CMAKE_CXX_ARCHIVE_FINISH)
+  set(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> <TARGET>")
+endif()
+
+# compile a C++ file into an object file
+if(NOT CMAKE_CXX_COMPILE_OBJECT)
+  set(CMAKE_CXX_COMPILE_OBJECT
+    "<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>")
+endif()
+
+if(NOT CMAKE_CXX_LINK_EXECUTABLE)
+  set(CMAKE_CXX_LINK_EXECUTABLE
+    "<CMAKE_CXX_COMPILER> <FLAGS> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
+endif()
+
+mark_as_advanced(
+CMAKE_VERBOSE_MAKEFILE
+)
+
+set(CMAKE_CXX_INFORMATION_LOADED 1)
diff --git a/share/cmake-3.22/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake b/share/cmake-3.22/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake
new file mode 100644
index 0000000..bda1d71
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake
@@ -0,0 +1,37 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# Do NOT include this module directly into any of your code. It is meant as
+# a library for Check*CompilerFlag.cmake modules. It's content may change in
+# any way between releases.
+
+macro (CHECK_COMPILER_FLAG_COMMON_PATTERNS _VAR)
+  set(${_VAR}
+    FAIL_REGEX "[Uu]nrecogni[sz]ed .*option"               # GNU, NAG, Fujitsu
+    FAIL_REGEX "switch .* is no longer supported"          # GNU
+    FAIL_REGEX "unknown .*option"                          # Clang
+    FAIL_REGEX "optimization flag .* not supported"        # Clang
+    FAIL_REGEX "unknown argument ignored"                  # Clang (cl)
+    FAIL_REGEX "ignoring unknown option"                   # MSVC, Intel
+    FAIL_REGEX "warning D9002"                             # MSVC, any lang
+    FAIL_REGEX "option.*not supported"                     # Intel
+    FAIL_REGEX "invalid argument .*option"                 # Intel
+    FAIL_REGEX "ignoring option .*argument required"       # Intel
+    FAIL_REGEX "ignoring option .*argument is of wrong type" # Intel
+    FAIL_REGEX "[Uu]nknown option"                         # HP
+    FAIL_REGEX "[Ww]arning: [Oo]ption"                     # SunPro
+    FAIL_REGEX "command option .* is not recognized"       # XL
+    FAIL_REGEX "command option .* contains an incorrect subargument" # XL
+    FAIL_REGEX "Option .* is not recognized.  Option will be ignored." # XL
+    FAIL_REGEX "not supported in this configuration. ignored"       # AIX
+    FAIL_REGEX "File with unknown suffix passed to linker" # PGI
+    FAIL_REGEX "[Uu]nknown switch"                         # PGI
+    FAIL_REGEX "WARNING: unknown flag:"                    # Open64
+    FAIL_REGEX "Incorrect command line option:"            # Borland
+    FAIL_REGEX "Warning: illegal option"                   # SunStudio 12
+    FAIL_REGEX "[Ww]arning: Invalid suboption"             # Fujitsu
+    FAIL_REGEX "An invalid option .* appears on the command line" # Cray
+    FAIL_REGEX "WARNING: invalid compiler option"          # TI armcl
+  )
+endmacro ()
diff --git a/share/cmake-3.18/Modules/CMakeCommonLanguageInclude.cmake b/share/cmake-3.22/Modules/CMakeCommonLanguageInclude.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeCommonLanguageInclude.cmake
rename to share/cmake-3.22/Modules/CMakeCommonLanguageInclude.cmake
diff --git a/share/cmake-3.22/Modules/CMakeCompilerABI.h b/share/cmake-3.22/Modules/CMakeCompilerABI.h
new file mode 100644
index 0000000..c5ce4dd
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeCompilerABI.h
@@ -0,0 +1,45 @@
+
+/* Size of a pointer-to-data in bytes.  */
+#define SIZEOF_DPTR (sizeof(void*))
+const char info_sizeof_dptr[] = {
+  /* clang-format off */
+  'I', 'N', 'F', 'O', ':', 's', 'i', 'z', 'e', 'o', 'f', '_', 'd', 'p', 't',
+  'r', '[', ('0' + ((SIZEOF_DPTR / 10) % 10)), ('0' + (SIZEOF_DPTR % 10)), ']',
+  '\0'
+  /* clang-format on */
+};
+
+/* Byte order.  Only one of these will have bytes in the right order.  */
+static unsigned short const info_byte_order_big_endian[] = {
+  /* INFO:byte_order string for BIG_ENDIAN */
+  0x494E, 0x464F, 0x3A62, 0x7974, 0x655F, 0x6F72, 0x6465, 0x725B,
+  0x4249, 0x475F, 0x454E, 0x4449, 0x414E, 0x5D00, 0x0000
+};
+static unsigned short const info_byte_order_little_endian[] = {
+  /* INFO:byte_order string for LITTLE_ENDIAN */
+  0x4E49, 0x4F46, 0x623A, 0x7479, 0x5F65, 0x726F, 0x6564, 0x5B72,
+  0x494C, 0x5454, 0x454C, 0x455F, 0x444E, 0x4149, 0x5D4E, 0x0000
+};
+
+/* Application Binary Interface.  */
+
+/* Check for (some) ARM ABIs.
+ * See e.g. http://wiki.debian.org/ArmEabiPort for some information on this. */
+#if defined(__GNU__) && defined(__ELF__) && defined(__ARM_EABI__)
+#  define ABI_ID "ELF ARMEABI"
+#elif defined(__GNU__) && defined(__ELF__) && defined(__ARMEB__)
+#  define ABI_ID "ELF ARM"
+#elif defined(__GNU__) && defined(__ELF__) && defined(__ARMEL__)
+#  define ABI_ID "ELF ARM"
+
+#elif defined(__linux__) && defined(__ELF__) && defined(__amd64__) &&         \
+  defined(__ILP32__)
+#  define ABI_ID "ELF X32"
+
+#elif defined(__ELF__)
+#  define ABI_ID "ELF"
+#endif
+
+#if defined(ABI_ID)
+static char const info_abi[] = "INFO:abi[" ABI_ID "]";
+#endif
diff --git a/share/cmake-3.22/Modules/CMakeCompilerIdDetection.cmake b/share/cmake-3.22/Modules/CMakeCompilerIdDetection.cmake
new file mode 100644
index 0000000..e6b3ee3
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeCompilerIdDetection.cmake
@@ -0,0 +1,157 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+function(_readFile file)
+  include(${file})
+  get_filename_component(name ${file} NAME_WE)
+  string(REGEX REPLACE "-.*" "" CompilerId ${name})
+  set(_compiler_id_version_compute_${CompilerId} ${_compiler_id_version_compute} PARENT_SCOPE)
+  set(_compiler_id_simulate_${CompilerId} ${_compiler_id_simulate} PARENT_SCOPE)
+  set(_compiler_id_pp_test_${CompilerId} ${_compiler_id_pp_test} PARENT_SCOPE)
+endfunction()
+
+function(compiler_id_detection outvar lang)
+
+  if (NOT "x${lang}" STREQUAL "xFortran" AND NOT "x${lang}" STREQUAL "xCSharp"
+      AND NOT "x${lang}" STREQUAL "xISPC")
+    file(GLOB lang_files
+      "${CMAKE_ROOT}/Modules/Compiler/*-DetermineCompiler.cmake")
+    set(nonlang CXX)
+    if ("x${lang}" STREQUAL "xCXX")
+      set(nonlang C)
+    endif()
+
+    file(GLOB nonlang_files
+      "${CMAKE_ROOT}/Modules/Compiler/*-${nonlang}-DetermineCompiler.cmake")
+    list(REMOVE_ITEM lang_files ${nonlang_files})
+  endif()
+
+  set(files ${lang_files})
+  if (files)
+    foreach(file ${files})
+      _readFile(${file})
+    endforeach()
+
+    set(options ID_STRING VERSION_STRINGS ID_DEFINE PLATFORM_DEFAULT_COMPILER)
+    set(oneValueArgs PREFIX)
+    cmake_parse_arguments(CID "${options}" "${oneValueArgs}" "${multiValueArgs}"  ${ARGN})
+    if (CID_UNPARSED_ARGUMENTS)
+      message(FATAL_ERROR "Unrecognized arguments: \"${CID_UNPARSED_ARGUMENTS}\"")
+    endif()
+
+    # Order is relevant here. For example, compilers which pretend to be
+    # GCC must appear before the actual GCC.
+    if ("x${lang}" STREQUAL "xCXX")
+      list(APPEND ordered_compilers
+        Comeau
+      )
+    endif()
+    list(APPEND ordered_compilers
+      Intel
+      IntelLLVM
+      PathScale
+      Embarcadero
+      Borland
+      Watcom
+      OpenWatcom
+      SunPro
+      HP
+      Compaq
+      zOS
+      XLClang
+      XL
+      VisualAge
+      NVHPC
+      PGI
+      Cray
+      TI
+      FujitsuClang
+      Fujitsu
+      GHS
+    )
+    if ("x${lang}" STREQUAL "xC")
+      list(APPEND ordered_compilers
+        TinyCC
+        Bruce
+      )
+    endif()
+    list(APPEND ordered_compilers
+      SCO
+      ARMCC
+      AppleClang
+      ARMClang
+    )
+    list(APPEND ordered_compilers
+      Clang
+      GNU
+      MSVC
+      ADSP
+      IAR
+    )
+    if ("x${lang}" STREQUAL "xC")
+      list(APPEND ordered_compilers
+        SDCC
+      )
+    endif()
+
+    if("x${lang}" STREQUAL "xCUDA")
+      set(ordered_compilers NVIDIA Clang)
+    endif()
+
+    if(CID_ID_DEFINE)
+      foreach(Id ${ordered_compilers})
+        string(APPEND CMAKE_${lang}_COMPILER_ID_CONTENT "# define ${CID_PREFIX}COMPILER_IS_${Id} 0\n")
+      endforeach()
+      # Hard-code definitions for compilers that are no longer supported.
+      string(APPEND CMAKE_${lang}_COMPILER_ID_CONTENT "# define ${CID_PREFIX}COMPILER_IS_MIPSpro 0\n")
+    endif()
+
+    set(pp_if "#if")
+    if (CID_VERSION_STRINGS)
+      string(APPEND CMAKE_${lang}_COMPILER_ID_CONTENT "\n/* Version number components: V=Version, R=Revision, P=Patch
+   Version date components:   YYYY=Year, MM=Month,   DD=Day  */\n")
+    endif()
+
+    foreach(Id ${ordered_compilers})
+      if (NOT _compiler_id_pp_test_${Id})
+        message(FATAL_ERROR "No preprocessor test for \"${Id}\"")
+      endif()
+      set(id_content "${pp_if} ${_compiler_id_pp_test_${Id}}\n")
+      if (CID_ID_STRING)
+        set(PREFIX ${CID_PREFIX})
+        string(CONFIGURE "${_compiler_id_simulate_${Id}}" SIMULATE_BLOCK @ONLY)
+        string(APPEND id_content "# define ${CID_PREFIX}COMPILER_ID \"${Id}\"${SIMULATE_BLOCK}")
+      endif()
+      if (CID_ID_DEFINE)
+        string(APPEND id_content "# undef ${CID_PREFIX}COMPILER_IS_${Id}\n")
+        string(APPEND id_content "# define ${CID_PREFIX}COMPILER_IS_${Id} 1\n")
+      endif()
+      if (CID_VERSION_STRINGS)
+        set(PREFIX ${CID_PREFIX})
+        set(MACRO_DEC DEC)
+        set(MACRO_HEX HEX)
+        string(CONFIGURE "${_compiler_id_version_compute_${Id}}" VERSION_BLOCK @ONLY)
+        string(APPEND id_content "${VERSION_BLOCK}\n")
+      endif()
+      string(APPEND CMAKE_${lang}_COMPILER_ID_CONTENT "\n${id_content}")
+      set(pp_if "#elif")
+    endforeach()
+
+    if (CID_PLATFORM_DEFAULT_COMPILER)
+      set(platform_compiler_detection "
+/* These compilers are either not known or too old to define an
+  identification macro.  Try to identify the platform and guess that
+  it is the native compiler.  */
+#elif defined(__hpux) || defined(__hpua)
+# define ${CID_PREFIX}COMPILER_ID \"HP\"
+
+#else /* unknown compiler */
+# define ${CID_PREFIX}COMPILER_ID \"\"")
+    endif()
+
+    string(APPEND CMAKE_${lang}_COMPILER_ID_CONTENT "\n${platform_compiler_detection}\n#endif")
+  endif()
+
+  set(${outvar} ${CMAKE_${lang}_COMPILER_ID_CONTENT} PARENT_SCOPE)
+endfunction()
diff --git a/share/cmake-3.18/Modules/CMakeConfigurableFile.in b/share/cmake-3.22/Modules/CMakeConfigurableFile.in
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeConfigurableFile.in
rename to share/cmake-3.22/Modules/CMakeConfigurableFile.in
diff --git a/share/cmake-3.22/Modules/CMakeDependentOption.cmake b/share/cmake-3.22/Modules/CMakeDependentOption.cmake
new file mode 100644
index 0000000..b7c478f
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeDependentOption.cmake
@@ -0,0 +1,87 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CMakeDependentOption
+--------------------
+
+Macro to provide an option dependent on other options.
+
+This macro presents an option to the user only if a set of other
+conditions are true.
+
+.. command:: cmake_dependent_option
+
+  .. code-block:: cmake
+
+    cmake_dependent_option(<option> "<help_text>" <value> <depends> <force>)
+
+  Makes ``<option>`` available to the user if ``<depends>`` is true. When
+  ``<option>`` is available, the given ``<help_text>`` and initial ``<value>``
+  are used. If the ``<depends>`` condition is not true, ``<option>`` will not be
+  presented and will always have the value given by ``<force>``. Any value set by
+  the user is preserved for when the option is presented again. In case ``<depends>``
+  is a :ref:`semicolon-separated list <CMake Language Lists>`, all elements must
+  be true in order to initialize ``<option>`` with ``<value>``.
+
+Example invocation:
+
+.. code-block:: cmake
+
+  cmake_dependent_option(USE_FOO "Use Foo" ON "USE_BAR;NOT USE_ZOT" OFF)
+
+If ``USE_BAR`` is true and ``USE_ZOT`` is false, this provides an option called
+``USE_FOO`` that defaults to ON. Otherwise, it sets ``USE_FOO`` to OFF and
+hides the option from the user. If the status of ``USE_BAR`` or ``USE_ZOT``
+ever changes, any value for the ``USE_FOO`` option is saved so that when the
+option is re-enabled it retains its old value.
+
+.. versionadded:: 3.22
+
+  Full :ref:`Condition Syntax` is now supported.  See policy :policy:`CMP0127`.
+
+#]=======================================================================]
+
+macro(CMAKE_DEPENDENT_OPTION option doc default depends force)
+  cmake_policy(GET CMP0127 _CDO_CMP0127
+    PARENT_SCOPE # undocumented, do not use outside of CMake
+    )
+  if(${option}_ISSET MATCHES "^${option}_ISSET$")
+    set(${option}_AVAILABLE 1)
+    if("x${_CDO_CMP0127}x" STREQUAL "xNEWx")
+      foreach(d ${depends})
+        cmake_language(EVAL CODE "
+          if (${d})
+          else()
+            set(${option}_AVAILABLE 0)
+          endif()"
+        )
+      endforeach()
+    else()
+      foreach(d ${depends})
+        string(REGEX REPLACE " +" ";" CMAKE_DEPENDENT_OPTION_DEP "${d}")
+        if(${CMAKE_DEPENDENT_OPTION_DEP})
+        else()
+          set(${option}_AVAILABLE 0)
+        endif()
+      endforeach()
+    endif()
+    if(${option}_AVAILABLE)
+      option(${option} "${doc}" "${default}")
+      set(${option} "${${option}}" CACHE BOOL "${doc}" FORCE)
+    else()
+      if(${option} MATCHES "^${option}$")
+      else()
+        set(${option} "${${option}}" CACHE INTERNAL "${doc}")
+      endif()
+      set(${option} ${force})
+    endif()
+  else()
+    set(${option} "${${option}_ISSET}")
+  endif()
+  if("x${_CDO_CMP0127}x" STREQUAL "xx" AND "x${depends}x" MATCHES "[^A-Za-z0-9_; ]")
+    cmake_policy(GET_WARNING CMP0127 _CDO_CMP0127_WARNING)
+    message(AUTHOR_WARNING "${_CDO_CMP0127_WARNING}")
+  endif()
+  unset(_CDO_CMP0127)
+endmacro()
diff --git a/share/cmake-3.18/Modules/CMakeDetermineASM-ATTCompiler.cmake b/share/cmake-3.22/Modules/CMakeDetermineASM-ATTCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeDetermineASM-ATTCompiler.cmake
rename to share/cmake-3.22/Modules/CMakeDetermineASM-ATTCompiler.cmake
diff --git a/share/cmake-3.22/Modules/CMakeDetermineASMCompiler.cmake b/share/cmake-3.22/Modules/CMakeDetermineASMCompiler.cmake
new file mode 100644
index 0000000..a1814b7
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeDetermineASMCompiler.cmake
@@ -0,0 +1,274 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# determine the compiler to use for ASM programs
+
+include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake)
+
+if(NOT CMAKE_ASM${ASM_DIALECT}_COMPILER)
+  # prefer the environment variable ASM
+  if(NOT $ENV{ASM${ASM_DIALECT}} STREQUAL "")
+    get_filename_component(CMAKE_ASM${ASM_DIALECT}_COMPILER_INIT $ENV{ASM${ASM_DIALECT}} PROGRAM PROGRAM_ARGS CMAKE_ASM${ASM_DIALECT}_FLAGS_ENV_INIT)
+    if(CMAKE_ASM${ASM_DIALECT}_FLAGS_ENV_INIT)
+      set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ARG1 "${CMAKE_ASM${ASM_DIALECT}_FLAGS_ENV_INIT}" CACHE STRING "Arguments to ASM${ASM_DIALECT} compiler")
+    endif()
+    if(NOT EXISTS ${CMAKE_ASM${ASM_DIALECT}_COMPILER_INIT})
+      message(FATAL_ERROR "Could not find compiler set in environment variable ASM${ASM_DIALECT}:\n$ENV{ASM${ASM_DIALECT}}.")
+    endif()
+  endif()
+
+  # finally list compilers to try
+  if("ASM${ASM_DIALECT}" STREQUAL "ASM") # the generic assembler support
+    if(NOT CMAKE_ASM_COMPILER_INIT)
+      if(CMAKE_C_COMPILER)
+        set(CMAKE_ASM${ASM_DIALECT}_COMPILER_LIST ${CMAKE_C_COMPILER})
+      elseif(CMAKE_CXX_COMPILER)
+        set(CMAKE_ASM${ASM_DIALECT}_COMPILER_LIST ${CMAKE_CXX_COMPILER})
+      else()
+        # List all default C and CXX compilers
+        set(CMAKE_ASM${ASM_DIALECT}_COMPILER_LIST
+             ${_CMAKE_TOOLCHAIN_PREFIX}cc  ${_CMAKE_TOOLCHAIN_PREFIX}gcc cl bcc xlc
+          CC ${_CMAKE_TOOLCHAIN_PREFIX}c++ ${_CMAKE_TOOLCHAIN_PREFIX}g++ aCC cl bcc xlC)
+      endif()
+    endif()
+  else() # some specific assembler "dialect"
+    if(NOT CMAKE_ASM${ASM_DIALECT}_COMPILER_INIT  AND NOT CMAKE_ASM${ASM_DIALECT}_COMPILER_LIST)
+      message(FATAL_ERROR "CMAKE_ASM${ASM_DIALECT}_COMPILER_INIT or CMAKE_ASM${ASM_DIALECT}_COMPILER_LIST must be preset !")
+    endif()
+  endif()
+
+  # Find the compiler.
+  _cmake_find_compiler(ASM${ASM_DIALECT})
+
+else()
+  _cmake_find_compiler_path(ASM${ASM_DIALECT})
+endif()
+mark_as_advanced(CMAKE_ASM${ASM_DIALECT}_COMPILER)
+
+if (NOT _CMAKE_TOOLCHAIN_LOCATION)
+  get_filename_component(_CMAKE_TOOLCHAIN_LOCATION "${CMAKE_ASM${ASM_DIALECT}_COMPILER}" PATH)
+endif ()
+
+
+if(NOT CMAKE_ASM${ASM_DIALECT}_COMPILER_ID)
+
+  # Table of per-vendor compiler id flags with expected output.
+  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS GNU )
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_GNU "--version")
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_GNU "(GNU assembler)|(GCC)|(Free Software Foundation)")
+
+  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS Clang )
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_Clang "--version")
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_Clang "(clang version)")
+
+  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS AppleClang )
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_AppleClang "--version")
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_AppleClang "(Apple LLVM version)")
+
+  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS ARMClang )
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_ARMClang "--version")
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_ARMClang "armclang")
+
+  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS HP )
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_HP "-V")
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_HP "HP C")
+
+  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS Intel )
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_Intel "--version")
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_Intel "(ICC)")
+
+  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS IntelLLVM )
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_IntelLLVM "--version")
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_IntelLLVM "(Intel[^\n]+oneAPI)")
+
+  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS SunPro )
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_SunPro "-V")
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_SunPro "Sun C")
+
+  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS XL )
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_XL "-qversion")
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_XL "XL C")
+
+  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS MSVC )
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_MSVC "-?")
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_MSVC "Microsoft")
+
+  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS TI )
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_TI "-h")
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_TI "Texas Instruments")
+
+  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS IAR)
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_IAR )
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_IAR "IAR Assembler")
+
+  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS ARMCC)
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_ARMCC )
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_ARMCC "(ARM Compiler)|(ARM Assembler)")
+
+  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS NASM)
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_NASM "-v")
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_NASM "(NASM version)")
+
+  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS YASM)
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_YASM "--version")
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_YASM "(yasm)")
+
+  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS ADSP)
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_ADSP "-version")
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_ADSP "Analog Devices")
+
+  list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS QCC)
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_QCC "-V")
+  set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_QCC "gcc_nto")
+
+  include(CMakeDetermineCompilerId)
+  set(userflags)
+  CMAKE_DETERMINE_COMPILER_ID_VENDOR(ASM${ASM_DIALECT} "${userflags}")
+  set(_variant "")
+  if("x${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}" STREQUAL "xIAR")
+    # primary necessary to detect architecture, so the right archiver and linker can be picked
+    # eg. "IAR Assembler V8.10.1.12857/W32 for ARM" or "IAR Assembler V4.11.1.4666 for Renesas RX"
+    # Cut out identification first, newline handling is a pain
+    string(REGEX MATCH "IAR Assembler[^\r\n]*" _compileid "${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_OUTPUT}")
+    if("${_compileid}" MATCHES "V([0-9]+\\.[0-9]+\\.[0-9]+)")
+      set(CMAKE_ASM${ASM_DIALECT}_COMPILER_VERSION ${CMAKE_MATCH_1})
+    endif()
+    string(REGEX MATCHALL "([A-Za-z0-9-]+)" _all_compileid_matches "${_compileid}")
+    if(_all_compileid_matches)
+      list(GET _all_compileid_matches "-1" CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID)
+    endif()
+  elseif("x${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}" STREQUAL "xClang")
+    # Test whether an MSVC-like command-line option works.
+    execute_process(COMMAND ${CMAKE_ASM${ASM_DIALECT}_COMPILER} -?
+      OUTPUT_VARIABLE _clang_output
+      ERROR_VARIABLE _clang_output
+      RESULT_VARIABLE _clang_result)
+      if(_clang_result EQUAL 0)
+        set(CMAKE_ASM${ASM_DIALECT}_COMPILER_FRONTEND_VARIANT "MSVC")
+        set(CMAKE_ASM${ASM_DIALECT}_SIMULATE_ID MSVC)
+      else()
+        set(CMAKE_ASM${ASM_DIALECT}_COMPILER_FRONTEND_VARIANT "GNU")
+      endif()
+      set(_variant " with ${CMAKE_ASM${ASM_DIALECT}_COMPILER_FRONTEND_VARIANT}-like command-line")
+  endif()
+
+  _cmake_find_compiler_sysroot(ASM${ASM_DIALECT})
+
+  unset(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_OUTPUT)
+  unset(_all_compileid_matches)
+  unset(_compileid)
+  unset(_clang_result)
+  unset(_clang_output)
+endif()
+
+if(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID)
+  if(CMAKE_ASM${ASM_DIALECT}_COMPILER_VERSION)
+    set(_version " ${CMAKE_ASM${ASM_DIALECT}_COMPILER_VERSION}")
+  else()
+    set(_version "")
+  endif()
+  if(CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID AND "x${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}" STREQUAL "xIAR")
+    set(_archid " ${CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID}")
+  else()
+    set(_archid "")
+  endif()
+  message(STATUS "The ASM${ASM_DIALECT} compiler identification is ${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}${_archid}${_version}${_variant}")
+  unset(_archid)
+  unset(_version)
+  unset(_variant)
+else()
+  message(STATUS "The ASM${ASM_DIALECT} compiler identification is unknown")
+endif()
+
+# If we have a gas/as cross compiler, they have usually some prefix, like
+# e.g. powerpc-linux-gas, arm-elf-gas or i586-mingw32msvc-gas , optionally
+# with a 3-component version number at the end
+# The other tools of the toolchain usually have the same prefix
+# NAME_WE cannot be used since then this test will fail for names like
+# "arm-unknown-nto-qnx6.3.0-gas.exe", where BASENAME would be
+# "arm-unknown-nto-qnx6" instead of the correct "arm-unknown-nto-qnx6.3.0-"
+if (NOT _CMAKE_TOOLCHAIN_PREFIX)
+  get_filename_component(COMPILER_BASENAME "${CMAKE_ASM${ASM_DIALECT}_COMPILER}" NAME)
+  if (COMPILER_BASENAME MATCHES "^(.+-)g?as(-[0-9]+\\.[0-9]+\\.[0-9]+)?(\\.exe)?$")
+    set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
+  endif ()
+endif ()
+
+# Now try the C compiler regexp:
+if (NOT _CMAKE_TOOLCHAIN_PREFIX)
+  if (COMPILER_BASENAME MATCHES "^(.+-)g?cc(-[0-9]+\\.[0-9]+\\.[0-9]+)?(\\.exe)?$")
+    set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
+  endif ()
+endif ()
+
+# Finally try the CXX compiler regexp:
+if (NOT _CMAKE_TOOLCHAIN_PREFIX)
+  if (COMPILER_BASENAME MATCHES "^(.+-)[gc]\\+\\+(-[0-9]+\\.[0-9]+\\.[0-9]+)?(\\.exe)?$")
+    set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
+  endif ()
+endif ()
+
+
+set(_CMAKE_PROCESSING_LANGUAGE "ASM")
+include(CMakeFindBinUtils)
+include(Compiler/${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}-FindBinUtils OPTIONAL)
+unset(_CMAKE_PROCESSING_LANGUAGE)
+
+set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ENV_VAR "ASM${ASM_DIALECT}")
+
+if(CMAKE_ASM${ASM_DIALECT}_COMPILER)
+  message(STATUS "Found assembler: ${CMAKE_ASM${ASM_DIALECT}_COMPILER}")
+else()
+  message(STATUS "Didn't find assembler")
+endif()
+
+foreach(_var
+    COMPILER
+    COMPILER_ID
+    COMPILER_ARG1
+    COMPILER_ENV_VAR
+    COMPILER_AR
+    COMPILER_RANLIB
+    COMPILER_VERSION
+    )
+  set(_CMAKE_ASM_${_var} "${CMAKE_ASM${ASM_DIALECT}_${_var}}")
+endforeach()
+
+if(CMAKE_ASM${ASM_DIALECT}_COMPILER_SYSROOT)
+  string(CONCAT _SET_CMAKE_ASM_COMPILER_SYSROOT
+    "set(CMAKE_ASM${ASM_DIALECT}_COMPILER_SYSROOT \"${CMAKE_ASM${ASM_DIALECT}_COMPILER_SYSROOT}\")\n"
+    "set(CMAKE_COMPILER_SYSROOT \"${CMAKE_ASM${ASM_DIALECT}_COMPILER_SYSROOT}\")")
+else()
+  set(_SET_CMAKE_ASM_COMPILER_SYSROOT "")
+endif()
+
+if(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_MATCH)
+  set(_SET_CMAKE_ASM_COMPILER_ID_VENDOR_MATCH
+    "set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_MATCH [==[${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_MATCH}]==])")
+else()
+  set(_SET_CMAKE_ASM_COMPILER_ID_VENDOR_MATCH "")
+endif()
+
+if(CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID)
+  set(_SET_CMAKE_ASM_COMPILER_ARCHITECTURE_ID
+    "set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID ${CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID})")
+else()
+  set(_SET_CMAKE_ASM_COMPILER_ARCHITECTURE_ID "")
+endif()
+
+# configure variables set in this file for fast reload later on
+configure_file(${CMAKE_ROOT}/Modules/CMakeASMCompiler.cmake.in
+  ${CMAKE_PLATFORM_INFO_DIR}/CMakeASM${ASM_DIALECT}Compiler.cmake @ONLY)
+
+foreach(_var
+    COMPILER
+    COMPILER_ID
+    COMPILER_ARG1
+    COMPILER_ENV_VAR
+    COMPILER_AR
+    COMPILER_RANLIB
+    COMPILER_VERSION
+    )
+  unset(_CMAKE_ASM_${_var})
+endforeach()
diff --git a/share/cmake-3.18/Modules/CMakeDetermineASM_MASMCompiler.cmake b/share/cmake-3.22/Modules/CMakeDetermineASM_MASMCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeDetermineASM_MASMCompiler.cmake
rename to share/cmake-3.22/Modules/CMakeDetermineASM_MASMCompiler.cmake
diff --git a/share/cmake-3.18/Modules/CMakeDetermineASM_NASMCompiler.cmake b/share/cmake-3.22/Modules/CMakeDetermineASM_NASMCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeDetermineASM_NASMCompiler.cmake
rename to share/cmake-3.22/Modules/CMakeDetermineASM_NASMCompiler.cmake
diff --git a/share/cmake-3.22/Modules/CMakeDetermineCCompiler.cmake b/share/cmake-3.22/Modules/CMakeDetermineCCompiler.cmake
new file mode 100644
index 0000000..15eab0f
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeDetermineCCompiler.cmake
@@ -0,0 +1,230 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# determine the compiler to use for C programs
+# NOTE, a generator may set CMAKE_C_COMPILER before
+# loading this file to force a compiler.
+# use environment variable CC first if defined by user, next use
+# the cmake variable CMAKE_GENERATOR_CC which can be defined by a generator
+# as a default compiler
+# If the internal cmake variable _CMAKE_TOOLCHAIN_PREFIX is set, this is used
+# as prefix for the tools (e.g. arm-elf-gcc, arm-elf-ar etc.). This works
+# currently with the GNU crosscompilers.
+#
+# Sets the following variables:
+#   CMAKE_C_COMPILER
+#   CMAKE_AR
+#   CMAKE_RANLIB
+#   CMAKE_COMPILER_IS_GNUCC
+#
+# If not already set before, it also sets
+#   _CMAKE_TOOLCHAIN_PREFIX
+
+include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake)
+
+# Load system-specific compiler preferences for this language.
+include(Platform/${CMAKE_SYSTEM_NAME}-Determine-C OPTIONAL)
+include(Platform/${CMAKE_SYSTEM_NAME}-C OPTIONAL)
+if(NOT CMAKE_C_COMPILER_NAMES)
+  set(CMAKE_C_COMPILER_NAMES cc)
+endif()
+
+if(${CMAKE_GENERATOR} MATCHES "Visual Studio")
+elseif("${CMAKE_GENERATOR}" MATCHES "Green Hills MULTI")
+elseif("${CMAKE_GENERATOR}" MATCHES "Xcode")
+  set(CMAKE_C_COMPILER_XCODE_TYPE sourcecode.c.c)
+  _cmake_find_compiler_path(C)
+else()
+  if(NOT CMAKE_C_COMPILER)
+    set(CMAKE_C_COMPILER_INIT NOTFOUND)
+
+    # prefer the environment variable CC
+    if(NOT $ENV{CC} STREQUAL "")
+      get_filename_component(CMAKE_C_COMPILER_INIT $ENV{CC} PROGRAM PROGRAM_ARGS CMAKE_C_FLAGS_ENV_INIT)
+      if(CMAKE_C_FLAGS_ENV_INIT)
+        set(CMAKE_C_COMPILER_ARG1 "${CMAKE_C_FLAGS_ENV_INIT}" CACHE STRING "Arguments to C compiler")
+      endif()
+      if(NOT EXISTS ${CMAKE_C_COMPILER_INIT})
+        message(FATAL_ERROR "Could not find compiler set in environment variable CC:\n$ENV{CC}.")
+      endif()
+    endif()
+
+    # next try prefer the compiler specified by the generator
+    if(CMAKE_GENERATOR_CC)
+      if(NOT CMAKE_C_COMPILER_INIT)
+        set(CMAKE_C_COMPILER_INIT ${CMAKE_GENERATOR_CC})
+      endif()
+    endif()
+
+    # finally list compilers to try
+    if(NOT CMAKE_C_COMPILER_INIT)
+      set(CMAKE_C_COMPILER_LIST ${_CMAKE_TOOLCHAIN_PREFIX}cc ${_CMAKE_TOOLCHAIN_PREFIX}gcc cl bcc xlc icx clang)
+    endif()
+
+    _cmake_find_compiler(C)
+
+  else()
+    _cmake_find_compiler_path(C)
+  endif()
+  mark_as_advanced(CMAKE_C_COMPILER)
+
+  # Each entry in this list is a set of extra flags to try
+  # adding to the compile line to see if it helps produce
+  # a valid identification file.
+  set(CMAKE_C_COMPILER_ID_TEST_FLAGS_FIRST)
+  set(CMAKE_C_COMPILER_ID_TEST_FLAGS
+    # Try compiling to an object file only.
+    "-c"
+
+    # Try enabling ANSI mode on HP.
+    "-Aa"
+
+    # Try compiling K&R-compatible code (needed by Bruce C Compiler).
+    "-D__CLASSIC_C__"
+
+    # ARMClang need target options
+    "--target=arm-arm-none-eabi -mcpu=cortex-m3"
+
+    # MSVC needs at least one include directory for __has_include to function,
+    # but custom toolchains may run MSVC with no INCLUDE env var and no -I flags.
+    # Also avoid linking so this works with no LIB env var.
+    "-c -I__does_not_exist__"
+    )
+endif()
+if(CMAKE_C_COMPILER_TARGET)
+  set(CMAKE_C_COMPILER_ID_TEST_FLAGS_FIRST "-c --target=${CMAKE_C_COMPILER_TARGET}")
+endif()
+# Build a small source file to identify the compiler.
+if(NOT CMAKE_C_COMPILER_ID_RUN)
+  set(CMAKE_C_COMPILER_ID_RUN 1)
+
+  # Try to identify the compiler.
+  set(CMAKE_C_COMPILER_ID)
+  set(CMAKE_C_PLATFORM_ID)
+  file(READ ${CMAKE_ROOT}/Modules/CMakePlatformId.h.in
+    CMAKE_C_COMPILER_ID_PLATFORM_CONTENT)
+
+  # The IAR compiler produces weird output.
+  # See https://gitlab.kitware.com/cmake/cmake/-/issues/10176#note_153591
+  list(APPEND CMAKE_C_COMPILER_ID_VENDORS IAR)
+  set(CMAKE_C_COMPILER_ID_VENDOR_FLAGS_IAR )
+  set(CMAKE_C_COMPILER_ID_VENDOR_REGEX_IAR "IAR .+ Compiler")
+
+  # Match the link line from xcodebuild output of the form
+  #  Ld ...
+  #      ...
+  #      /path/to/cc ...CompilerIdC/...
+  # to extract the compiler front-end for the language.
+  set(CMAKE_C_COMPILER_ID_TOOL_MATCH_REGEX "\nLd[^\n]*(\n[ \t]+[^\n]*)*\n[ \t]+([^ \t\r\n]+)[^\r\n]*-o[^\r\n]*CompilerIdC/(\\./)?(CompilerIdC.(framework|xctest|build/[^ \t\r\n]+)/)?CompilerIdC[ \t\n\\\"]")
+  set(CMAKE_C_COMPILER_ID_TOOL_MATCH_INDEX 2)
+
+  include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerId.cmake)
+  CMAKE_DETERMINE_COMPILER_ID(C CFLAGS CMakeCCompilerId.c)
+
+  _cmake_find_compiler_sysroot(C)
+
+  # Set old compiler and platform id variables.
+  if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
+    set(CMAKE_COMPILER_IS_GNUCC 1)
+  endif()
+else()
+  if(NOT DEFINED CMAKE_C_COMPILER_FRONTEND_VARIANT)
+    # Some toolchain files set our internal CMAKE_C_COMPILER_ID_RUN
+    # variable but are not aware of CMAKE_C_COMPILER_FRONTEND_VARIANT.
+    # They pre-date our support for the GNU-like variant targeting the
+    # MSVC ABI so we do not consider that here.
+    if(CMAKE_C_COMPILER_ID STREQUAL "Clang"
+      OR "x${CMAKE_C_COMPILER_ID}" STREQUAL "xIntelLLVM")
+      if("x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC")
+        set(CMAKE_C_COMPILER_FRONTEND_VARIANT "MSVC")
+      else()
+        set(CMAKE_C_COMPILER_FRONTEND_VARIANT "GNU")
+      endif()
+    else()
+      set(CMAKE_C_COMPILER_FRONTEND_VARIANT "")
+    endif()
+  endif()
+endif()
+
+if (NOT _CMAKE_TOOLCHAIN_LOCATION)
+  get_filename_component(_CMAKE_TOOLCHAIN_LOCATION "${CMAKE_C_COMPILER}" PATH)
+endif ()
+
+# If we have a gcc cross compiler, they have usually some prefix, like
+# e.g. powerpc-linux-gcc, arm-elf-gcc or i586-mingw32msvc-gcc, optionally
+# with a 3-component version number at the end (e.g. arm-eabi-gcc-4.5.2).
+# The other tools of the toolchain usually have the same prefix
+# NAME_WE cannot be used since then this test will fail for names like
+# "arm-unknown-nto-qnx6.3.0-gcc.exe", where BASENAME would be
+# "arm-unknown-nto-qnx6" instead of the correct "arm-unknown-nto-qnx6.3.0-"
+if (NOT _CMAKE_TOOLCHAIN_PREFIX)
+
+  if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang|QCC")
+    get_filename_component(COMPILER_BASENAME "${CMAKE_C_COMPILER}" NAME)
+    if (COMPILER_BASENAME MATCHES "^(.+-)?(clang|g?cc)(-cl)?(-[0-9]+(\\.[0-9]+)*)?(-[^.]+)?(\\.exe)?$")
+      set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
+      set(_CMAKE_TOOLCHAIN_SUFFIX ${CMAKE_MATCH_4})
+      set(_CMAKE_COMPILER_SUFFIX ${CMAKE_MATCH_6})
+    elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
+      if(CMAKE_C_COMPILER_TARGET)
+        set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_C_COMPILER_TARGET}-)
+      endif()
+    elseif(COMPILER_BASENAME MATCHES "qcc(\\.exe)?$")
+      if(CMAKE_C_COMPILER_TARGET MATCHES "gcc_nto([a-z0-9]+_[0-9]+|[^_le]+)(le)?")
+        set(_CMAKE_TOOLCHAIN_PREFIX nto${CMAKE_MATCH_1}-)
+      endif()
+    endif ()
+
+    # if "llvm-" is part of the prefix, remove it, since llvm doesn't have its own binutils
+    # but uses the regular ar, objcopy, etc. (instead of llvm-objcopy etc.)
+    if ("${_CMAKE_TOOLCHAIN_PREFIX}" MATCHES "(.+-)?llvm-$")
+      set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
+    endif ()
+  elseif(CMAKE_C_COMPILER_ID MATCHES "TI")
+    # TI compilers are named e.g. cl6x, cl470 or armcl.exe
+    get_filename_component(COMPILER_BASENAME "${CMAKE_C_COMPILER}" NAME)
+    if (COMPILER_BASENAME MATCHES "^(.+)?cl([^.]+)?(\\.exe)?$")
+      set(_CMAKE_TOOLCHAIN_PREFIX "${CMAKE_MATCH_1}")
+      set(_CMAKE_TOOLCHAIN_SUFFIX "${CMAKE_MATCH_2}")
+    endif ()
+  endif()
+
+endif ()
+
+set(_CMAKE_PROCESSING_LANGUAGE "C")
+include(CMakeFindBinUtils)
+include(Compiler/${CMAKE_C_COMPILER_ID}-FindBinUtils OPTIONAL)
+unset(_CMAKE_PROCESSING_LANGUAGE)
+
+if(CMAKE_C_COMPILER_SYSROOT)
+  string(CONCAT _SET_CMAKE_C_COMPILER_SYSROOT
+    "set(CMAKE_C_COMPILER_SYSROOT \"${CMAKE_C_COMPILER_SYSROOT}\")\n"
+    "set(CMAKE_COMPILER_SYSROOT \"${CMAKE_C_COMPILER_SYSROOT}\")")
+else()
+  set(_SET_CMAKE_C_COMPILER_SYSROOT "")
+endif()
+
+if(CMAKE_C_COMPILER_ARCHITECTURE_ID)
+  set(_SET_CMAKE_C_COMPILER_ARCHITECTURE_ID
+    "set(CMAKE_C_COMPILER_ARCHITECTURE_ID ${CMAKE_C_COMPILER_ARCHITECTURE_ID})")
+else()
+  set(_SET_CMAKE_C_COMPILER_ARCHITECTURE_ID "")
+endif()
+
+if(MSVC_C_ARCHITECTURE_ID)
+  set(SET_MSVC_C_ARCHITECTURE_ID
+    "set(MSVC_C_ARCHITECTURE_ID ${MSVC_C_ARCHITECTURE_ID})")
+endif()
+
+if(CMAKE_C_XCODE_ARCHS)
+  set(SET_CMAKE_XCODE_ARCHS
+    "set(CMAKE_XCODE_ARCHS \"${CMAKE_C_XCODE_ARCHS}\")")
+endif()
+
+# configure variables set in this file for fast reload later on
+configure_file(${CMAKE_ROOT}/Modules/CMakeCCompiler.cmake.in
+  ${CMAKE_PLATFORM_INFO_DIR}/CMakeCCompiler.cmake
+  @ONLY
+  )
+set(CMAKE_C_COMPILER_ENV_VAR "CC")
diff --git a/share/cmake-3.18/Modules/CMakeDetermineCSharpCompiler.cmake b/share/cmake-3.22/Modules/CMakeDetermineCSharpCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeDetermineCSharpCompiler.cmake
rename to share/cmake-3.22/Modules/CMakeDetermineCSharpCompiler.cmake
diff --git a/share/cmake-3.22/Modules/CMakeDetermineCUDACompiler.cmake b/share/cmake-3.22/Modules/CMakeDetermineCUDACompiler.cmake
new file mode 100644
index 0000000..d06315e
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeDetermineCUDACompiler.cmake
@@ -0,0 +1,634 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake)
+include(${CMAKE_ROOT}/Modules/CMakeParseImplicitLinkInfo.cmake)
+
+if( NOT ( ("${CMAKE_GENERATOR}" MATCHES "Make") OR
+          ("${CMAKE_GENERATOR}" MATCHES "Ninja") OR
+          ("${CMAKE_GENERATOR}" MATCHES "Visual Studio (1|[9][0-9])") ) )
+  message(FATAL_ERROR "CUDA language not currently supported by \"${CMAKE_GENERATOR}\" generator")
+endif()
+
+if(${CMAKE_GENERATOR} MATCHES "Visual Studio")
+  if(DEFINED ENV{CUDAHOSTCXX} OR DEFINED CMAKE_CUDA_HOST_COMPILER)
+    message(WARNING "Visual Studio does not support specifying CUDAHOSTCXX or CMAKE_CUDA_HOST_COMPILER. Using the C++ compiler provided by Visual Studio.")
+  endif()
+else()
+  if(NOT CMAKE_CUDA_COMPILER)
+    set(CMAKE_CUDA_COMPILER_INIT NOTFOUND)
+
+      # prefer the environment variable CUDACXX
+      if(NOT $ENV{CUDACXX} STREQUAL "")
+        get_filename_component(CMAKE_CUDA_COMPILER_INIT $ENV{CUDACXX} PROGRAM PROGRAM_ARGS CMAKE_CUDA_FLAGS_ENV_INIT)
+        if(CMAKE_CUDA_FLAGS_ENV_INIT)
+          set(CMAKE_CUDA_COMPILER_ARG1 "${CMAKE_CUDA_FLAGS_ENV_INIT}" CACHE STRING "Arguments to CXX compiler")
+        endif()
+        if(NOT EXISTS ${CMAKE_CUDA_COMPILER_INIT})
+          message(FATAL_ERROR "Could not find compiler set in environment variable CUDACXX:\n$ENV{CUDACXX}.\n${CMAKE_CUDA_COMPILER_INIT}")
+        endif()
+      endif()
+
+    # finally list compilers to try
+    if(NOT CMAKE_CUDA_COMPILER_INIT)
+      set(CMAKE_CUDA_COMPILER_LIST nvcc)
+    endif()
+
+    set(_CMAKE_CUDA_COMPILER_PATHS "$ENV{CUDA_PATH}/bin")
+    _cmake_find_compiler(CUDA)
+    unset(_CMAKE_CUDA_COMPILER_PATHS)
+  else()
+    _cmake_find_compiler_path(CUDA)
+  endif()
+
+  mark_as_advanced(CMAKE_CUDA_COMPILER)
+
+  #Allow the user to specify a host compiler except for Visual Studio
+  if(NOT $ENV{CUDAHOSTCXX} STREQUAL "")
+    get_filename_component(CMAKE_CUDA_HOST_COMPILER $ENV{CUDAHOSTCXX} PROGRAM)
+    if(NOT EXISTS ${CMAKE_CUDA_HOST_COMPILER})
+      message(FATAL_ERROR "Could not find compiler set in environment variable CUDAHOSTCXX:\n$ENV{CUDAHOSTCXX}.\n${CMAKE_CUDA_HOST_COMPILER}")
+    endif()
+  endif()
+endif()
+
+if(NOT "$ENV{CUDAARCHS}" STREQUAL "")
+  set(CMAKE_CUDA_ARCHITECTURES "$ENV{CUDAARCHS}" CACHE STRING "CUDA architectures")
+endif()
+
+# Build a small source file to identify the compiler.
+if(NOT CMAKE_CUDA_COMPILER_ID_RUN)
+  set(CMAKE_CUDA_COMPILER_ID_RUN 1)
+
+  include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerId.cmake)
+
+  if(${CMAKE_GENERATOR} MATCHES "Visual Studio")
+    # We will not know CMAKE_CUDA_COMPILER until the main compiler id step
+    # below extracts it, but we do know that the compiler id will be NVIDIA.
+    set(CMAKE_CUDA_COMPILER_ID "NVIDIA")
+  else()
+    # We determine the vendor to help with find the toolkit and use the right flags for detection right away.
+    # The main compiler identification is still needed below to extract other information.
+    list(APPEND CMAKE_CUDA_COMPILER_ID_VENDORS NVIDIA Clang)
+    set(CMAKE_CUDA_COMPILER_ID_VENDOR_REGEX_NVIDIA "nvcc: NVIDIA \\(R\\) Cuda compiler driver")
+    set(CMAKE_CUDA_COMPILER_ID_VENDOR_REGEX_Clang "(clang version)")
+    CMAKE_DETERMINE_COMPILER_ID_VENDOR(CUDA "--version")
+
+    if(CMAKE_CUDA_COMPILER_ID STREQUAL "Clang" AND WIN32)
+      message(FATAL_ERROR "Clang with CUDA is not yet supported on Windows. See CMake issue #20776.")
+    endif()
+
+    # Find the CUDA toolkit. We store the CMAKE_CUDA_COMPILER_TOOLKIT_ROOT and CMAKE_CUDA_COMPILER_LIBRARY_ROOT
+    # in CMakeCUDACompiler.cmake, so FindCUDAToolkit can avoid searching on future runs and the toolkit stays the same.
+    # This is very similar to FindCUDAToolkit, but somewhat simplified since we can issue fatal errors
+    # if we fail to find things we need and we don't need to account for searching the libraries.
+
+    # For NVCC we can easily deduce the SDK binary directory from the compiler path.
+    if(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA")
+      set(_CUDA_NVCC_EXECUTABLE "${CMAKE_CUDA_COMPILER}")
+    else()
+      # Search using CUDAToolkit_ROOT and then CUDA_PATH for equivalence with FindCUDAToolkit.
+      # In FindCUDAToolkit CUDAToolkit_ROOT is searched automatically due to being in a find_package().
+      # First we search candidate non-default paths to give them priority.
+      find_program(_CUDA_NVCC_EXECUTABLE
+        NAMES nvcc nvcc.exe
+        PATHS ${CUDAToolkit_ROOT}
+        ENV CUDAToolkit_ROOT
+        ENV CUDA_PATH
+        PATH_SUFFIXES bin
+        NO_DEFAULT_PATH
+      )
+
+      # If we didn't find NVCC, then try the default paths.
+      find_program(_CUDA_NVCC_EXECUTABLE
+        NAMES nvcc nvcc.exe
+        PATH_SUFFIXES bin
+      )
+
+      # If the user specified CUDAToolkit_ROOT but nvcc could not be found, this is an error.
+      if(NOT _CUDA_NVCC_EXECUTABLE AND (DEFINED CUDAToolkit_ROOT OR DEFINED ENV{CUDAToolkit_ROOT}))
+        set(fail_base "Could not find nvcc executable in path specified by")
+
+        if(DEFINED CUDAToolkit_ROOT)
+          message(FATAL_ERROR "${fail_base} CUDAToolkit_ROOT=${CUDAToolkit_ROOT}")
+        elseif(DEFINED ENV{CUDAToolkit_ROOT})
+          message(FATAL_ERROR "${fail_base} environment variable CUDAToolkit_ROOT=$ENV{CUDAToolkit_ROOT}")
+        endif()
+      endif()
+
+      # CUDAToolkit_ROOT cmake/env variable not specified, try platform defaults.
+      #
+      # - Linux: /usr/local/cuda-X.Y
+      # - macOS: /Developer/NVIDIA/CUDA-X.Y
+      # - Windows: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vX.Y
+      #
+      # We will also search the default symlink location /usr/local/cuda first since
+      # if CUDAToolkit_ROOT is not specified, it is assumed that the symlinked
+      # directory is the desired location.
+      if(NOT _CUDA_NVCC_EXECUTABLE)
+        if(UNIX)
+          if(NOT APPLE)
+            set(platform_base "/usr/local/cuda-")
+          else()
+            set(platform_base "/Developer/NVIDIA/CUDA-")
+          endif()
+        else()
+          set(platform_base "C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v")
+        endif()
+
+        # Build out a descending list of possible cuda installations, e.g.
+        file(GLOB possible_paths "${platform_base}*")
+        # Iterate the glob results and create a descending list.
+        set(versions)
+        foreach(p ${possible_paths})
+          # Extract version number from end of string
+          string(REGEX MATCH "[0-9][0-9]?\\.[0-9]$" p_version ${p})
+          if(IS_DIRECTORY ${p} AND p_version)
+            list(APPEND versions ${p_version})
+          endif()
+        endforeach()
+
+        # Sort numerically in descending order, so we try the newest versions first.
+        list(SORT versions COMPARE NATURAL ORDER DESCENDING)
+
+        # With a descending list of versions, populate possible paths to search.
+        set(search_paths)
+        foreach(v ${versions})
+          list(APPEND search_paths "${platform_base}${v}")
+        endforeach()
+
+        # Force the global default /usr/local/cuda to the front on Unix.
+        if(UNIX)
+          list(INSERT search_paths 0 "/usr/local/cuda")
+        endif()
+
+        # Now search for nvcc again using the platform default search paths.
+        find_program(_CUDA_NVCC_EXECUTABLE
+          NAMES nvcc nvcc.exe
+          PATHS ${search_paths}
+          PATH_SUFFIXES bin
+        )
+
+        # We are done with these variables now, cleanup.
+        unset(platform_base)
+        unset(possible_paths)
+        unset(versions)
+        unset(search_paths)
+
+        if(NOT _CUDA_NVCC_EXECUTABLE)
+          message(FATAL_ERROR "Failed to find nvcc.\nCompiler ${CMAKE_CUDA_COMPILER_ID} requires the CUDA toolkit. Please set the CUDAToolkit_ROOT variable.")
+        endif()
+      endif()
+    endif()
+
+    # Given that NVCC can be provided by multiple different sources (NVIDIA HPC SDK, CUDA Toolkit, distro)
+    # each of which has a different layout, we need to extract the CUDA toolkit root from the compiler
+    # itself, allowing us to support numerous different scattered toolkit layouts
+    execute_process(COMMAND ${_CUDA_NVCC_EXECUTABLE} "-v" "__cmake_determine_cuda"
+      OUTPUT_VARIABLE _CUDA_NVCC_OUT ERROR_VARIABLE _CUDA_NVCC_OUT)
+    if(_CUDA_NVCC_OUT MATCHES "\\#\\$ TOP=([^\r\n]*)")
+      get_filename_component(CMAKE_CUDA_COMPILER_TOOLKIT_ROOT "${CMAKE_MATCH_1}" ABSOLUTE)
+    else()
+      get_filename_component(CMAKE_CUDA_COMPILER_TOOLKIT_ROOT "${_CUDA_NVCC_EXECUTABLE}" DIRECTORY)
+      get_filename_component(CMAKE_CUDA_COMPILER_TOOLKIT_ROOT "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}" DIRECTORY)
+    endif()
+
+    if(_CUDA_NVCC_OUT MATCHES "\\#\\$ NVVMIR_LIBRARY_DIR=([^\r\n]*)")
+      get_filename_component(_CUDA_NVVMIR_LIBRARY_DIR "${CMAKE_MATCH_1}" ABSOLUTE)
+
+      #We require the path to end in `/nvvm/libdevice'
+      if(_CUDA_NVVMIR_LIBRARY_DIR MATCHES "nvvm/libdevice$")
+        get_filename_component(_CUDA_NVVMIR_LIBRARY_DIR "${_CUDA_NVVMIR_LIBRARY_DIR}/../.." ABSOLUTE)
+        set(CMAKE_CUDA_COMPILER_LIBRARY_ROOT_FROM_NVVMIR_LIBRARY_DIR "${_CUDA_NVVMIR_LIBRARY_DIR}")
+      endif()
+
+      unset(_CUDA_NVVMIR_LIBRARY_DIR)
+      unset(_cuda_nvvmir_dir_name)
+    endif()
+    unset(_CUDA_NVCC_OUT)
+
+    set(CMAKE_CUDA_DEVICE_LINKER "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}/bin/nvlink${CMAKE_EXECUTABLE_SUFFIX}")
+    set(CMAKE_CUDA_FATBINARY "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}/bin/fatbinary${CMAKE_EXECUTABLE_SUFFIX}")
+
+    # In a non-scattered installation the following are equivalent to CMAKE_CUDA_COMPILER_TOOLKIT_ROOT.
+    # We first check for a non-scattered installation to prefer it over a scattered installation.
+
+    # CMAKE_CUDA_COMPILER_LIBRARY_ROOT contains the device library.
+    if(DEFINED CMAKE_CUDA_COMPILER_LIBRARY_ROOT_FROM_NVVMIR_LIBRARY_DIR)
+      set(CMAKE_CUDA_COMPILER_LIBRARY_ROOT "${CMAKE_CUDA_COMPILER_LIBRARY_ROOT_FROM_NVVMIR_LIBRARY_DIR}")
+    elseif(EXISTS "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}/nvvm/libdevice")
+      set(CMAKE_CUDA_COMPILER_LIBRARY_ROOT "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}")
+    elseif(CMAKE_SYSROOT_LINK AND EXISTS "${CMAKE_SYSROOT_LINK}/usr/lib/cuda/nvvm/libdevice")
+      set(CMAKE_CUDA_COMPILER_LIBRARY_ROOT "${CMAKE_SYSROOT_LINK}/usr/lib/cuda")
+    elseif(EXISTS "${CMAKE_SYSROOT}/usr/lib/cuda/nvvm/libdevice")
+      set(CMAKE_CUDA_COMPILER_LIBRARY_ROOT "${CMAKE_SYSROOT}/usr/lib/cuda")
+    else()
+      message(FATAL_ERROR "Couldn't find CUDA library root.")
+    endif()
+    unset(CMAKE_CUDA_COMPILER_LIBRARY_ROOT_FROM_NVVMIR_LIBRARY_DIR)
+
+    # CMAKE_CUDA_COMPILER_TOOLKIT_LIBRARY_ROOT contains the linking stubs necessary for device linking and other low-level library files.
+    if(CMAKE_SYSROOT_LINK AND EXISTS "${CMAKE_SYSROOT_LINK}/usr/lib/nvidia-cuda-toolkit/bin/crt/link.stub")
+      set(CMAKE_CUDA_COMPILER_TOOLKIT_LIBRARY_ROOT "${CMAKE_SYSROOT_LINK}/usr/lib/nvidia-cuda-toolkit")
+    elseif(EXISTS "${CMAKE_SYSROOT}/usr/lib/nvidia-cuda-toolkit/bin/crt/link.stub")
+      set(CMAKE_CUDA_COMPILER_TOOLKIT_LIBRARY_ROOT "${CMAKE_SYSROOT}/usr/lib/nvidia-cuda-toolkit")
+    else()
+      set(CMAKE_CUDA_COMPILER_TOOLKIT_LIBRARY_ROOT "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}")
+    endif()
+  endif()
+
+  set(CMAKE_CUDA_COMPILER_ID_FLAGS_ALWAYS "-v")
+
+  if(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA")
+    set(nvcc_test_flags "--keep --keep-dir tmp")
+    if(CMAKE_CUDA_HOST_COMPILER)
+      string(APPEND nvcc_test_flags " -ccbin=\"${CMAKE_CUDA_HOST_COMPILER}\"")
+
+      # If the user has specified a host compiler we should fail instead of trying without.
+      # Succeeding detection without may result in confusing errors later on, see #21076.
+      set(CMAKE_CUDA_COMPILER_ID_REQUIRE_SUCCESS ON)
+    endif()
+  elseif(CMAKE_CUDA_COMPILER_ID STREQUAL "Clang")
+    set(clang_test_flags "--cuda-path=\"${CMAKE_CUDA_COMPILER_LIBRARY_ROOT}\"")
+    if(CMAKE_CROSSCOMPILING)
+      # Need to pass the host target and include directories if we're crosscompiling.
+      string(APPEND clang_test_flags " --sysroot=\"${CMAKE_SYSROOT}\" --target=${CMAKE_CUDA_COMPILER_TARGET}")
+    endif()
+  endif()
+
+  # Append user-specified architectures.
+  if(CMAKE_CUDA_ARCHITECTURES)
+    foreach(arch ${CMAKE_CUDA_ARCHITECTURES})
+      # Strip specifiers as PTX vs binary doesn't matter.
+      string(REGEX MATCH "[0-9]+" arch_name "${arch}")
+      string(APPEND clang_test_flags " --cuda-gpu-arch=sm_${arch_name}")
+      string(APPEND nvcc_test_flags " -gencode=arch=compute_${arch_name},code=sm_${arch_name}")
+      list(APPEND tested_architectures "${arch_name}")
+    endforeach()
+
+    # If the user has specified architectures we'll want to fail during compiler detection if they don't work.
+    set(CMAKE_CUDA_COMPILER_ID_REQUIRE_SUCCESS ON)
+  endif()
+
+  if(CMAKE_CUDA_COMPILER_ID STREQUAL "Clang")
+    if(NOT CMAKE_CUDA_ARCHITECTURES)
+      # Clang doesn't automatically select an architecture supported by the SDK.
+      # Try in reverse order of deprecation with the most recent at front (i.e. the most likely to work for new setups).
+      foreach(arch "20" "30" "52")
+        list(APPEND CMAKE_CUDA_COMPILER_ID_TEST_FLAGS_FIRST "${clang_test_flags} --cuda-gpu-arch=sm_${arch}")
+      endforeach()
+    endif()
+
+    # If the user specified CMAKE_CUDA_ARCHITECTURES this will include all the architecture flags.
+    # Otherwise this won't include any architecture flags and we'll fallback to Clang's defaults.
+    list(APPEND CMAKE_CUDA_COMPILER_ID_TEST_FLAGS_FIRST "${clang_test_flags}")
+  elseif(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA")
+    list(APPEND CMAKE_CUDA_COMPILER_ID_TEST_FLAGS_FIRST "${nvcc_test_flags}")
+  endif()
+
+  # We perform compiler identification for a second time to extract implicit linking info and host compiler for NVCC.
+  # We also use it to verify that CMAKE_CUDA_ARCHITECTURES and additionally on Clang that CUDA toolkit path works.
+  # The latter could be done during compiler testing in the future to avoid doing this for Clang.
+  # We need to unset the compiler ID otherwise CMAKE_DETERMINE_COMPILER_ID() doesn't work.
+  set(CMAKE_CUDA_COMPILER_ID)
+  set(CMAKE_CUDA_PLATFORM_ID)
+  file(READ ${CMAKE_ROOT}/Modules/CMakePlatformId.h.in
+    CMAKE_CUDA_COMPILER_ID_PLATFORM_CONTENT)
+
+  CMAKE_DETERMINE_COMPILER_ID(CUDA CUDAFLAGS CMakeCUDACompilerId.cu)
+
+  if(${CMAKE_GENERATOR} MATCHES "Visual Studio")
+    # Now that we have the path to nvcc, we can compute the toolkit root.
+    get_filename_component(CMAKE_CUDA_COMPILER_TOOLKIT_ROOT "${CMAKE_CUDA_COMPILER}" DIRECTORY)
+    get_filename_component(CMAKE_CUDA_COMPILER_TOOLKIT_ROOT "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}" DIRECTORY)
+    set(CMAKE_CUDA_COMPILER_LIBRARY_ROOT "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}")
+  endif()
+
+  _cmake_find_compiler_sysroot(CUDA)
+endif()
+
+set(_CMAKE_PROCESSING_LANGUAGE "CUDA")
+include(CMakeFindBinUtils)
+include(Compiler/${CMAKE_CUDA_COMPILER_ID}-FindBinUtils OPTIONAL)
+unset(_CMAKE_PROCESSING_LANGUAGE)
+
+if(MSVC_CUDA_ARCHITECTURE_ID)
+  set(SET_MSVC_CUDA_ARCHITECTURE_ID
+    "set(MSVC_CUDA_ARCHITECTURE_ID ${MSVC_CUDA_ARCHITECTURE_ID})")
+endif()
+
+if(${CMAKE_GENERATOR} MATCHES "Visual Studio")
+  set(CMAKE_CUDA_HOST_LINK_LAUNCHER "${CMAKE_LINKER}")
+  set(CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES "")
+  set(CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES "")
+  set(CMAKE_CUDA_HOST_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "")
+
+  # We do not currently detect CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES but we
+  # do need to detect CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT from the compiler by
+  # looking at which cudart library exists in the implicit link libraries passed
+  # to the host linker.
+  if(CMAKE_CUDA_COMPILER_PRODUCED_OUTPUT MATCHES "link\\.exe [^\n]*cudart_static\\.lib")
+    set(CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT "STATIC")
+  elseif(CMAKE_CUDA_COMPILER_PRODUCED_OUTPUT MATCHES "link\\.exe [^\n]*cudart\\.lib")
+    set(CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT "SHARED")
+  else()
+    set(CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT "NONE")
+  endif()
+  set(_SET_CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT
+    "set(CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT \"${CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT}\")")
+elseif(CMAKE_CUDA_COMPILER_ID STREQUAL "Clang")
+  if(NOT CMAKE_CUDA_ARCHITECTURES)
+    # Find the architecture that we successfully compiled using and set it as the default.
+    string(REGEX MATCH "-target-cpu sm_([0-9]+)" dont_care "${CMAKE_CUDA_COMPILER_PRODUCED_OUTPUT}")
+    set(detected_architecture "${CMAKE_MATCH_1}")
+  else()
+    string(REGEX MATCHALL "-target-cpu sm_([0-9]+)" target_cpus "${CMAKE_CUDA_COMPILER_PRODUCED_OUTPUT}")
+
+    foreach(cpu ${target_cpus})
+      string(REGEX MATCH "-target-cpu sm_([0-9]+)" dont_care "${cpu}")
+      list(APPEND architectures "${CMAKE_MATCH_1}")
+    endforeach()
+  endif()
+
+  # Find target directory when crosscompiling.
+  if(CMAKE_CROSSCOMPILING)
+    if(CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7-a")
+      # Support for NVPACK
+      set(_CUDA_TARGET_NAME "armv7-linux-androideabi")
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
+      set(_CUDA_TARGET_NAME "armv7-linux-gnueabihf")
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
+      if(ANDROID_ARCH_NAME STREQUAL "arm64")
+        set(_CUDA_TARGET_NAME "aarch64-linux-androideabi")
+      else()
+        set(_CUDA_TARGET_NAME "aarch64-linux")
+      endif()
+    elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
+      set(_CUDA_TARGET_NAME "x86_64-linux")
+    endif()
+
+    if(EXISTS "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}/targets/${_CUDA_TARGET_NAME}")
+      set(_CUDA_TARGET_DIR "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}/targets/${_CUDA_TARGET_NAME}")
+    endif()
+  endif()
+
+  # If not already set we can simply use the toolkit root or it's a scattered installation.
+  if(NOT _CUDA_TARGET_DIR)
+    set(_CUDA_TARGET_DIR "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}")
+  endif()
+
+  # We can't use find_library() yet at this point, so try a few guesses.
+  if(EXISTS "${_CUDA_TARGET_DIR}/lib64")
+    set(_CUDA_LIBRARY_DIR "${_CUDA_TARGET_DIR}/lib64")
+  elseif(EXISTS "${_CUDA_TARGET_DIR}/lib/x64")
+    set(_CUDA_LIBRARY_DIR "${_CUDA_TARGET_DIR}/lib/x64")
+  elseif(EXISTS "${_CUDA_TARGET_DIR}/lib")
+    set(_CUDA_LIBRARY_DIR "${_CUDA_TARGET_DIR}/lib")
+  else()
+    message(FATAL_ERROR "Unable to find _CUDA_LIBRARY_DIR based on _CUDA_TARGET_DIR=${_CUDA_TARGET_DIR}")
+  endif()
+
+  # _CUDA_TARGET_DIR always points to the directory containing the include directory.
+  # On a scattered installation /usr, on a non-scattered something like /usr/local/cuda or /usr/local/cuda-10.2/targets/aarch64-linux.
+  if(EXISTS "${_CUDA_TARGET_DIR}/include/cuda_runtime.h")
+    set(_CUDA_INCLUDE_DIR "${_CUDA_TARGET_DIR}/include")
+  else()
+    message(FATAL_ERROR "Unable to find cuda_runtime.h in \"${_CUDA_TARGET_DIR}/include\" for _CUDA_INCLUDE_DIR.")
+  endif()
+
+  # Clang does not add any CUDA SDK libraries or directories when invoking the host linker.
+  # Add the CUDA toolkit library directory ourselves so that linking works.
+  # The CUDA runtime libraries are handled elsewhere by CMAKE_CUDA_RUNTIME_LIBRARY.
+  set(CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES "${_CUDA_INCLUDE_DIR}")
+  set(CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES "${_CUDA_LIBRARY_DIR}")
+  set(CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES "")
+  set(CMAKE_CUDA_HOST_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "")
+elseif(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA")
+  set(_nvcc_log "")
+  string(REPLACE "\r" "" _nvcc_output_orig "${CMAKE_CUDA_COMPILER_PRODUCED_OUTPUT}")
+  if(_nvcc_output_orig MATCHES "#\\\$ +PATH= *([^\n]*)\n")
+    set(_nvcc_path "${CMAKE_MATCH_1}")
+    string(APPEND _nvcc_log "  found 'PATH=' string: [${_nvcc_path}]\n")
+    string(REPLACE ":" ";" _nvcc_path "${_nvcc_path}")
+  else()
+    set(_nvcc_path "")
+    string(REPLACE "\n" "\n    " _nvcc_output_log "\n${_nvcc_output_orig}")
+    string(APPEND _nvcc_log "  no 'PATH=' string found in nvcc output:${_nvcc_output_log}\n")
+  endif()
+  if(_nvcc_output_orig MATCHES "#\\\$ +LIBRARIES= *([^\n]*)\n")
+    set(_nvcc_libraries "${CMAKE_MATCH_1}")
+    string(APPEND _nvcc_log "  found 'LIBRARIES=' string: [${_nvcc_libraries}]\n")
+  else()
+    set(_nvcc_libraries "")
+    string(REPLACE "\n" "\n    " _nvcc_output_log "\n${_nvcc_output_orig}")
+    string(APPEND _nvcc_log "  no 'LIBRARIES=' string found in nvcc output:${_nvcc_output_log}\n")
+  endif()
+
+  set(_nvcc_link_line "")
+  if(_nvcc_libraries)
+    # Remove variable assignments.
+    string(REGEX REPLACE "#\\\$ *[^= ]+=[^\n]*\n" "" _nvcc_output "${_nvcc_output_orig}")
+    # Encode [] characters that break list expansion.
+    string(REPLACE "[" "{==={" _nvcc_output "${_nvcc_output}")
+    string(REPLACE "]" "}===}" _nvcc_output "${_nvcc_output}")
+    # Split lines.
+    string(REGEX REPLACE "\n+(#\\\$ )?" ";" _nvcc_output "${_nvcc_output}")
+    foreach(line IN LISTS _nvcc_output)
+      set(_nvcc_output_line "${line}")
+      string(REPLACE "{==={" "[" _nvcc_output_line "${_nvcc_output_line}")
+      string(REPLACE "}===}" "]" _nvcc_output_line "${_nvcc_output_line}")
+      string(APPEND _nvcc_log "  considering line: [${_nvcc_output_line}]\n")
+      if("${_nvcc_output_line}" MATCHES "^ *nvlink")
+        string(APPEND _nvcc_log "    ignoring nvlink line\n")
+      elseif(_nvcc_libraries)
+        if("${_nvcc_output_line}" MATCHES "(@\"?((tmp/)?a\\.exe\\.res)\"?)")
+          set(_nvcc_link_res_arg "${CMAKE_MATCH_1}")
+          set(_nvcc_link_res_file "${CMAKE_MATCH_2}")
+          set(_nvcc_link_res "${CMAKE_PLATFORM_INFO_DIR}/CompilerIdCUDA/${_nvcc_link_res_file}")
+          if(EXISTS "${_nvcc_link_res}")
+            file(READ "${_nvcc_link_res}" _nvcc_link_res_content)
+            string(REPLACE "${_nvcc_link_res_arg}" "${_nvcc_link_res_content}" _nvcc_output_line "${_nvcc_output_line}")
+          endif()
+        endif()
+        string(FIND "${_nvcc_output_line}" "${_nvcc_libraries}" _nvcc_libraries_pos)
+        if(NOT _nvcc_libraries_pos EQUAL -1)
+          set(_nvcc_link_line "${_nvcc_output_line}")
+          string(APPEND _nvcc_log "    extracted link line: [${_nvcc_link_line}]\n")
+        endif()
+      endif()
+    endforeach()
+  endif()
+
+  if(_nvcc_link_line)
+    if("x${CMAKE_CUDA_SIMULATE_ID}" STREQUAL "xMSVC")
+      set(CMAKE_CUDA_HOST_LINK_LAUNCHER "${CMAKE_LINKER}")
+    else()
+      #extract the compiler that is being used for linking
+      separate_arguments(_nvcc_link_line_args UNIX_COMMAND "${_nvcc_link_line}")
+      list(GET _nvcc_link_line_args 0 _nvcc_host_link_launcher)
+      if(IS_ABSOLUTE "${_nvcc_host_link_launcher}")
+        string(APPEND _nvcc_log "  extracted link launcher absolute path: [${_nvcc_host_link_launcher}]\n")
+        set(CMAKE_CUDA_HOST_LINK_LAUNCHER "${_nvcc_host_link_launcher}")
+      else()
+        string(APPEND _nvcc_log "  extracted link launcher name: [${_nvcc_host_link_launcher}]\n")
+        find_program(_nvcc_find_host_link_launcher
+          NAMES ${_nvcc_host_link_launcher}
+          PATHS ${_nvcc_path} NO_DEFAULT_PATH)
+        find_program(_nvcc_find_host_link_launcher
+          NAMES ${_nvcc_host_link_launcher})
+        if(_nvcc_find_host_link_launcher)
+          string(APPEND _nvcc_log "  found link launcher absolute path: [${_nvcc_find_host_link_launcher}]\n")
+          set(CMAKE_CUDA_HOST_LINK_LAUNCHER "${_nvcc_find_host_link_launcher}")
+        else()
+          string(APPEND _nvcc_log "  could not find link launcher absolute path\n")
+          set(CMAKE_CUDA_HOST_LINK_LAUNCHER "${_nvcc_host_link_launcher}")
+        endif()
+        unset(_nvcc_find_host_link_launcher CACHE)
+      endif()
+    endif()
+
+    #prefix the line with cuda-fake-ld so that implicit link info believes it is
+    #a link line
+    set(_nvcc_link_line "cuda-fake-ld ${_nvcc_link_line}")
+    CMAKE_PARSE_IMPLICIT_LINK_INFO("${_nvcc_link_line}"
+                                   CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES
+                                   CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES
+                                   CMAKE_CUDA_HOST_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES
+                                   log
+                                   "${CMAKE_CUDA_IMPLICIT_OBJECT_REGEX}")
+
+    # Detect CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT from the compiler by looking at which
+    # cudart library exists in the implicit link libraries passed to the host linker.
+    # This is required when a project sets the cuda runtime library as part of the
+    # initial flags.
+    if(";${CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES};" MATCHES [[;cudart_static(\.lib)?;]])
+      set(CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT "STATIC")
+    elseif(";${CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES};" MATCHES [[;cudart(\.lib)?;]])
+      set(CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT "SHARED")
+    else()
+      set(CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT "NONE")
+    endif()
+    set(_SET_CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT
+      "set(CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT \"${CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT}\")")
+
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+      "Parsed CUDA nvcc implicit link information from above output:\n${_nvcc_log}\n${log}\n\n")
+  else()
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+      "Failed to parse CUDA nvcc implicit link information:\n${_nvcc_log}\n\n")
+    message(FATAL_ERROR "Failed to extract nvcc implicit link line.")
+  endif()
+endif()
+
+# CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES is detected above as the list of
+# libraries that the CUDA compiler implicitly passes to the host linker.
+# CMake invokes the host linker directly and so needs to pass these libraries.
+# We filter out those that should not be passed unconditionally both here
+# and from CMAKE_CUDA_IMPLICIT_LINK_LIBRARIES in CMakeTestCUDACompiler.
+set(CMAKE_CUDA_IMPLICIT_LINK_LIBRARIES_EXCLUDE
+  # The CUDA runtime libraries are controlled by CMAKE_CUDA_RUNTIME_LIBRARY.
+  cudart        cudart.lib
+  cudart_static cudart_static.lib
+  cudadevrt     cudadevrt.lib
+
+  # Dependencies of the CUDA static runtime library on Linux hosts.
+  rt
+  pthread
+  dl
+  )
+list(REMOVE_ITEM CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES ${CMAKE_CUDA_IMPLICIT_LINK_LIBRARIES_EXCLUDE})
+
+if(CMAKE_CUDA_COMPILER_SYSROOT)
+  string(CONCAT _SET_CMAKE_CUDA_COMPILER_SYSROOT
+    "set(CMAKE_CUDA_COMPILER_SYSROOT \"${CMAKE_CUDA_COMPILER_SYSROOT}\")\n"
+    "set(CMAKE_COMPILER_SYSROOT \"${CMAKE_CUDA_COMPILER_SYSROOT}\")")
+else()
+  set(_SET_CMAKE_CUDA_COMPILER_SYSROOT "")
+endif()
+
+# Determine CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES
+if(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA")
+  set(CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES)
+  string(REPLACE "\r" "" _nvcc_output_orig "${CMAKE_CUDA_COMPILER_PRODUCED_OUTPUT}")
+  if(_nvcc_output_orig MATCHES "#\\\$ +INCLUDES= *([^\n]*)\n")
+    set(_nvcc_includes "${CMAKE_MATCH_1}")
+    string(APPEND _nvcc_log "  found 'INCLUDES=' string: [${_nvcc_includes}]\n")
+  else()
+    set(_nvcc_includes "")
+    string(REPLACE "\n" "\n    " _nvcc_output_log "\n${_nvcc_output_orig}")
+    string(APPEND _nvcc_log "  no 'INCLUDES=' string found in nvcc output:${_nvcc_output_log}\n")
+  endif()
+  if(_nvcc_includes)
+    # across all operating system each include directory is prefixed with -I
+    separate_arguments(_nvcc_output NATIVE_COMMAND "${_nvcc_includes}")
+    foreach(line IN LISTS _nvcc_output)
+      string(REGEX REPLACE "^-I" "" line "${line}")
+      get_filename_component(line "${line}" ABSOLUTE)
+      list(APPEND CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES "${line}")
+    endforeach()
+
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+      "Parsed CUDA nvcc include information from above output:\n${_nvcc_log}\n${log}\n\n")
+  else()
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+      "Failed to detect CUDA nvcc include information:\n${_nvcc_log}\n\n")
+  endif()
+
+  # Parse default CUDA architecture.
+  cmake_policy(GET CMP0104 _CUDA_CMP0104)
+  if(NOT CMAKE_CUDA_ARCHITECTURES AND _CUDA_CMP0104 STREQUAL "NEW")
+    string(REGEX MATCH "arch[ =]compute_([0-9]+)" dont_care "${CMAKE_CUDA_COMPILER_PRODUCED_OUTPUT}")
+    set(detected_architecture "${CMAKE_MATCH_1}")
+  elseif(CMAKE_CUDA_ARCHITECTURES)
+    string(REGEX MATCHALL "-arch compute_([0-9]+)" target_cpus "${CMAKE_CUDA_COMPILER_PRODUCED_OUTPUT}")
+
+    foreach(cpu ${target_cpus})
+      string(REGEX MATCH "-arch compute_([0-9]+)" dont_care "${cpu}")
+      list(APPEND architectures "${CMAKE_MATCH_1}")
+    endforeach()
+  endif()
+endif()
+
+# If the user didn't set the architectures, then set them to a default.
+# If the user did, then make sure those architectures worked.
+if(DEFINED detected_architecture AND "${CMAKE_CUDA_ARCHITECTURES}" STREQUAL "")
+  set(CMAKE_CUDA_ARCHITECTURES "${detected_architecture}" CACHE STRING "CUDA architectures")
+
+  if(NOT CMAKE_CUDA_ARCHITECTURES)
+    message(FATAL_ERROR "Failed to find a working CUDA architecture.")
+  endif()
+elseif(architectures)
+  # Sort since order mustn't matter.
+  list(SORT architectures)
+  list(SORT tested_architectures)
+
+  # We don't distinguish real/virtual architectures during testing.
+  # For "70-real;70-virtual" we detect "70" as working and tested_architectures is "70;70".
+  # Thus we need to remove duplicates before checking if they're equal.
+  list(REMOVE_DUPLICATES tested_architectures)
+
+  if(NOT "${architectures}" STREQUAL "${tested_architectures}")
+    message(FATAL_ERROR
+      "The CMAKE_CUDA_ARCHITECTURES:\n"
+      "  ${CMAKE_CUDA_ARCHITECTURES}\n"
+      "do not all work with this compiler.  Try:\n"
+      "  ${architectures}\n"
+      "instead.")
+  endif()
+endif()
+
+# configure all variables set in this file
+configure_file(${CMAKE_ROOT}/Modules/CMakeCUDACompiler.cmake.in
+  ${CMAKE_PLATFORM_INFO_DIR}/CMakeCUDACompiler.cmake
+  @ONLY
+)
+
+# Don't leak variables unnecessarily to user code.
+unset(_CUDA_INCLUDE_DIR CACHE)
+unset(_CUDA_NVCC_EXECUTABLE CACHE)
+unset(_CUDA_LIBRARY_DIR)
+unset(_CUDA_TARGET_DIR)
+unset(_CUDA_TARGET_NAME)
+
+set(CMAKE_CUDA_COMPILER_ENV_VAR "CUDACXX")
+set(CMAKE_CUDA_HOST_COMPILER_ENV_VAR "CUDAHOSTCXX")
diff --git a/share/cmake-3.22/Modules/CMakeDetermineCXXCompiler.cmake b/share/cmake-3.22/Modules/CMakeDetermineCXXCompiler.cmake
new file mode 100644
index 0000000..72dc8d3
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeDetermineCXXCompiler.cmake
@@ -0,0 +1,231 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# determine the compiler to use for C++ programs
+# NOTE, a generator may set CMAKE_CXX_COMPILER before
+# loading this file to force a compiler.
+# use environment variable CXX first if defined by user, next use
+# the cmake variable CMAKE_GENERATOR_CXX which can be defined by a generator
+# as a default compiler
+# If the internal cmake variable _CMAKE_TOOLCHAIN_PREFIX is set, this is used
+# as prefix for the tools (e.g. arm-elf-g++, arm-elf-ar etc.)
+#
+# Sets the following variables:
+#   CMAKE_CXX_COMPILER
+#   CMAKE_COMPILER_IS_GNUCXX
+#   CMAKE_AR
+#   CMAKE_RANLIB
+#
+# If not already set before, it also sets
+#   _CMAKE_TOOLCHAIN_PREFIX
+
+include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake)
+
+# Load system-specific compiler preferences for this language.
+include(Platform/${CMAKE_SYSTEM_NAME}-Determine-CXX OPTIONAL)
+include(Platform/${CMAKE_SYSTEM_NAME}-CXX OPTIONAL)
+if(NOT CMAKE_CXX_COMPILER_NAMES)
+  set(CMAKE_CXX_COMPILER_NAMES CC)
+endif()
+
+if(${CMAKE_GENERATOR} MATCHES "Visual Studio")
+elseif("${CMAKE_GENERATOR}" MATCHES "Green Hills MULTI")
+elseif("${CMAKE_GENERATOR}" MATCHES "Xcode")
+  set(CMAKE_CXX_COMPILER_XCODE_TYPE sourcecode.cpp.cpp)
+  _cmake_find_compiler_path(CXX)
+else()
+  if(NOT CMAKE_CXX_COMPILER)
+    set(CMAKE_CXX_COMPILER_INIT NOTFOUND)
+
+    # prefer the environment variable CXX
+    if(NOT $ENV{CXX} STREQUAL "")
+      get_filename_component(CMAKE_CXX_COMPILER_INIT $ENV{CXX} PROGRAM PROGRAM_ARGS CMAKE_CXX_FLAGS_ENV_INIT)
+      if(CMAKE_CXX_FLAGS_ENV_INIT)
+        set(CMAKE_CXX_COMPILER_ARG1 "${CMAKE_CXX_FLAGS_ENV_INIT}" CACHE STRING "Arguments to CXX compiler")
+      endif()
+      if(NOT EXISTS ${CMAKE_CXX_COMPILER_INIT})
+        message(FATAL_ERROR "Could not find compiler set in environment variable CXX:\n$ENV{CXX}.\n${CMAKE_CXX_COMPILER_INIT}")
+      endif()
+    endif()
+
+    # next prefer the generator specified compiler
+    if(CMAKE_GENERATOR_CXX)
+      if(NOT CMAKE_CXX_COMPILER_INIT)
+        set(CMAKE_CXX_COMPILER_INIT ${CMAKE_GENERATOR_CXX})
+      endif()
+    endif()
+
+    # finally list compilers to try
+    if(NOT CMAKE_CXX_COMPILER_INIT)
+      set(CMAKE_CXX_COMPILER_LIST CC ${_CMAKE_TOOLCHAIN_PREFIX}c++ ${_CMAKE_TOOLCHAIN_PREFIX}g++ aCC cl bcc xlC icpx icx clang++)
+    endif()
+
+    _cmake_find_compiler(CXX)
+  else()
+    _cmake_find_compiler_path(CXX)
+  endif()
+  mark_as_advanced(CMAKE_CXX_COMPILER)
+
+  # Each entry in this list is a set of extra flags to try
+  # adding to the compile line to see if it helps produce
+  # a valid identification file.
+  set(CMAKE_CXX_COMPILER_ID_TEST_FLAGS_FIRST)
+  set(CMAKE_CXX_COMPILER_ID_TEST_FLAGS
+    # Try compiling to an object file only.
+    "-c"
+    # IAR does not detect language automatically
+    "--c++"
+    "--ec++"
+
+    # ARMClang need target options
+    "--target=arm-arm-none-eabi -mcpu=cortex-m3"
+
+    # MSVC needs at least one include directory for __has_include to function,
+    # but custom toolchains may run MSVC with no INCLUDE env var and no -I flags.
+    # Also avoid linking so this works with no LIB env var.
+    "-c -I__does_not_exist__"
+    )
+endif()
+
+if(CMAKE_CXX_COMPILER_TARGET)
+  set(CMAKE_CXX_COMPILER_ID_TEST_FLAGS_FIRST "-c --target=${CMAKE_CXX_COMPILER_TARGET}")
+endif()
+
+# Build a small source file to identify the compiler.
+if(NOT CMAKE_CXX_COMPILER_ID_RUN)
+  set(CMAKE_CXX_COMPILER_ID_RUN 1)
+
+  # Try to identify the compiler.
+  set(CMAKE_CXX_COMPILER_ID)
+  set(CMAKE_CXX_PLATFORM_ID)
+  file(READ ${CMAKE_ROOT}/Modules/CMakePlatformId.h.in
+    CMAKE_CXX_COMPILER_ID_PLATFORM_CONTENT)
+
+  # The IAR compiler produces weird output.
+  # See https://gitlab.kitware.com/cmake/cmake/-/issues/10176#note_153591
+  list(APPEND CMAKE_CXX_COMPILER_ID_VENDORS IAR)
+  set(CMAKE_CXX_COMPILER_ID_VENDOR_FLAGS_IAR )
+  set(CMAKE_CXX_COMPILER_ID_VENDOR_REGEX_IAR "IAR .+ Compiler")
+
+  # Match the link line from xcodebuild output of the form
+  #  Ld ...
+  #      ...
+  #      /path/to/cc ...CompilerIdCXX/...
+  # to extract the compiler front-end for the language.
+  set(CMAKE_CXX_COMPILER_ID_TOOL_MATCH_REGEX "\nLd[^\n]*(\n[ \t]+[^\n]*)*\n[ \t]+([^ \t\r\n]+)[^\r\n]*-o[^\r\n]*CompilerIdCXX/(\\./)?(CompilerIdCXX.(framework|xctest|build/[^ \t\r\n]+)/)?CompilerIdCXX[ \t\n\\\"]")
+  set(CMAKE_CXX_COMPILER_ID_TOOL_MATCH_INDEX 2)
+
+  include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerId.cmake)
+  CMAKE_DETERMINE_COMPILER_ID(CXX CXXFLAGS CMakeCXXCompilerId.cpp)
+
+  _cmake_find_compiler_sysroot(CXX)
+
+  # Set old compiler and platform id variables.
+  if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
+    set(CMAKE_COMPILER_IS_GNUCXX 1)
+  endif()
+else()
+  if(NOT DEFINED CMAKE_CXX_COMPILER_FRONTEND_VARIANT)
+    # Some toolchain files set our internal CMAKE_CXX_COMPILER_ID_RUN
+    # variable but are not aware of CMAKE_CXX_COMPILER_FRONTEND_VARIANT.
+    # They pre-date our support for the GNU-like variant targeting the
+    # MSVC ABI so we do not consider that here.
+    if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang"
+      OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xIntelLLVM")
+      if("x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
+        set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "MSVC")
+      else()
+        set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "GNU")
+      endif()
+    else()
+      set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "")
+    endif()
+  endif()
+endif()
+
+if (NOT _CMAKE_TOOLCHAIN_LOCATION)
+  get_filename_component(_CMAKE_TOOLCHAIN_LOCATION "${CMAKE_CXX_COMPILER}" PATH)
+endif ()
+
+# if we have a g++ cross compiler, they have usually some prefix, like
+# e.g. powerpc-linux-g++, arm-elf-g++ or i586-mingw32msvc-g++ , optionally
+# with a 3-component version number at the end (e.g. arm-eabi-gcc-4.5.2).
+# The other tools of the toolchain usually have the same prefix
+# NAME_WE cannot be used since then this test will fail for names like
+# "arm-unknown-nto-qnx6.3.0-gcc.exe", where BASENAME would be
+# "arm-unknown-nto-qnx6" instead of the correct "arm-unknown-nto-qnx6.3.0-"
+
+
+if (NOT _CMAKE_TOOLCHAIN_PREFIX)
+
+  if("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU|Clang|QCC")
+    get_filename_component(COMPILER_BASENAME "${CMAKE_CXX_COMPILER}" NAME)
+    if (COMPILER_BASENAME MATCHES "^(.+-)?(clang\\+\\+|[gc]\\+\\+|clang-cl)(-[0-9]+(\\.[0-9]+)*)?(-[^.]+)?(\\.exe)?$")
+      set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
+      set(_CMAKE_TOOLCHAIN_SUFFIX ${CMAKE_MATCH_3})
+      set(_CMAKE_COMPILER_SUFFIX ${CMAKE_MATCH_5})
+    elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
+      if(CMAKE_CXX_COMPILER_TARGET)
+        set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_CXX_COMPILER_TARGET}-)
+      endif()
+    elseif(COMPILER_BASENAME MATCHES "QCC(\\.exe)?$")
+      if(CMAKE_CXX_COMPILER_TARGET MATCHES "gcc_nto([a-z0-9]+_[0-9]+|[^_le]+)(le)")
+        set(_CMAKE_TOOLCHAIN_PREFIX nto${CMAKE_MATCH_1}-)
+      endif()
+    endif ()
+
+    # if "llvm-" is part of the prefix, remove it, since llvm doesn't have its own binutils
+    # but uses the regular ar, objcopy, etc. (instead of llvm-objcopy etc.)
+    if ("${_CMAKE_TOOLCHAIN_PREFIX}" MATCHES "(.+-)?llvm-$")
+      set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
+    endif ()
+  elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "TI")
+    # TI compilers are named e.g. cl6x, cl470 or armcl.exe
+    get_filename_component(COMPILER_BASENAME "${CMAKE_CXX_COMPILER}" NAME)
+    if (COMPILER_BASENAME MATCHES "^(.+)?cl([^.]+)?(\\.exe)?$")
+      set(_CMAKE_TOOLCHAIN_PREFIX "${CMAKE_MATCH_1}")
+      set(_CMAKE_TOOLCHAIN_SUFFIX "${CMAKE_MATCH_2}")
+    endif ()
+
+  endif()
+
+endif ()
+
+set(_CMAKE_PROCESSING_LANGUAGE "CXX")
+include(CMakeFindBinUtils)
+include(Compiler/${CMAKE_CXX_COMPILER_ID}-FindBinUtils OPTIONAL)
+unset(_CMAKE_PROCESSING_LANGUAGE)
+
+if(CMAKE_CXX_COMPILER_SYSROOT)
+  string(CONCAT _SET_CMAKE_CXX_COMPILER_SYSROOT
+    "set(CMAKE_CXX_COMPILER_SYSROOT \"${CMAKE_CXX_COMPILER_SYSROOT}\")\n"
+    "set(CMAKE_COMPILER_SYSROOT \"${CMAKE_CXX_COMPILER_SYSROOT}\")")
+else()
+  set(_SET_CMAKE_CXX_COMPILER_SYSROOT "")
+endif()
+
+if(CMAKE_CXX_COMPILER_ARCHITECTURE_ID)
+  set(_SET_CMAKE_CXX_COMPILER_ARCHITECTURE_ID
+    "set(CMAKE_CXX_COMPILER_ARCHITECTURE_ID ${CMAKE_CXX_COMPILER_ARCHITECTURE_ID})")
+else()
+  set(_SET_CMAKE_CXX_COMPILER_ARCHITECTURE_ID "")
+endif()
+
+if(MSVC_CXX_ARCHITECTURE_ID)
+  set(SET_MSVC_CXX_ARCHITECTURE_ID
+    "set(MSVC_CXX_ARCHITECTURE_ID ${MSVC_CXX_ARCHITECTURE_ID})")
+endif()
+
+if(CMAKE_CXX_XCODE_ARCHS)
+  set(SET_CMAKE_XCODE_ARCHS
+    "set(CMAKE_XCODE_ARCHS \"${CMAKE_CXX_XCODE_ARCHS}\")")
+endif()
+
+# configure all variables set in this file
+configure_file(${CMAKE_ROOT}/Modules/CMakeCXXCompiler.cmake.in
+  ${CMAKE_PLATFORM_INFO_DIR}/CMakeCXXCompiler.cmake
+  @ONLY
+  )
+
+set(CMAKE_CXX_COMPILER_ENV_VAR "CXX")
diff --git a/share/cmake-3.22/Modules/CMakeDetermineCompileFeatures.cmake b/share/cmake-3.22/Modules/CMakeDetermineCompileFeatures.cmake
new file mode 100644
index 0000000..a08e597
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeDetermineCompileFeatures.cmake
@@ -0,0 +1,227 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+function(cmake_determine_compile_features lang)
+
+  if("x${lang}" STREQUAL "xC" AND COMMAND cmake_record_c_compile_features)
+    message(CHECK_START "Detecting ${lang} compile features")
+
+    set(CMAKE_C90_COMPILE_FEATURES)
+    set(CMAKE_C99_COMPILE_FEATURES)
+    set(CMAKE_C11_COMPILE_FEATURES)
+    set(CMAKE_C17_COMPILE_FEATURES)
+    set(CMAKE_C23_COMPILE_FEATURES)
+
+    include("${CMAKE_ROOT}/Modules/Internal/FeatureTesting.cmake")
+
+    cmake_record_c_compile_features()
+
+    if(NOT _result EQUAL 0)
+      message(CHECK_FAIL "failed")
+      return()
+    endif()
+
+    if (CMAKE_C17_COMPILE_FEATURES AND CMAKE_C23_COMPILE_FEATURES)
+      list(REMOVE_ITEM CMAKE_C23_COMPILE_FEATURES ${CMAKE_C17_COMPILE_FEATURES})
+    endif()
+    if (CMAKE_C11_COMPILE_FEATURES AND CMAKE_C17_COMPILE_FEATURES)
+      list(REMOVE_ITEM CMAKE_C17_COMPILE_FEATURES ${CMAKE_C11_COMPILE_FEATURES})
+    endif()
+    if (CMAKE_C99_COMPILE_FEATURES AND CMAKE_C11_COMPILE_FEATURES)
+      list(REMOVE_ITEM CMAKE_C11_COMPILE_FEATURES ${CMAKE_C99_COMPILE_FEATURES})
+    endif()
+    if (CMAKE_C90_COMPILE_FEATURES AND CMAKE_C99_COMPILE_FEATURES)
+      list(REMOVE_ITEM CMAKE_C99_COMPILE_FEATURES ${CMAKE_C90_COMPILE_FEATURES})
+    endif()
+
+    if(NOT CMAKE_C_COMPILE_FEATURES)
+      set(CMAKE_C_COMPILE_FEATURES
+        ${CMAKE_C90_COMPILE_FEATURES}
+        ${CMAKE_C99_COMPILE_FEATURES}
+        ${CMAKE_C11_COMPILE_FEATURES}
+        ${CMAKE_C17_COMPILE_FEATURES}
+        ${CMAKE_C23_COMPILE_FEATURES}
+      )
+    endif()
+
+    set(CMAKE_C_COMPILE_FEATURES ${CMAKE_C_COMPILE_FEATURES} PARENT_SCOPE)
+    set(CMAKE_C90_COMPILE_FEATURES ${CMAKE_C90_COMPILE_FEATURES} PARENT_SCOPE)
+    set(CMAKE_C99_COMPILE_FEATURES ${CMAKE_C99_COMPILE_FEATURES} PARENT_SCOPE)
+    set(CMAKE_C11_COMPILE_FEATURES ${CMAKE_C11_COMPILE_FEATURES} PARENT_SCOPE)
+    set(CMAKE_C17_COMPILE_FEATURES ${CMAKE_C17_COMPILE_FEATURES} PARENT_SCOPE)
+    set(CMAKE_C23_COMPILE_FEATURES ${CMAKE_C23_COMPILE_FEATURES} PARENT_SCOPE)
+
+    message(CHECK_PASS "done")
+
+  elseif("x${lang}" STREQUAL "xCXX" AND COMMAND cmake_record_cxx_compile_features)
+    message(CHECK_START "Detecting ${lang} compile features")
+
+    set(CMAKE_CXX98_COMPILE_FEATURES)
+    set(CMAKE_CXX11_COMPILE_FEATURES)
+    set(CMAKE_CXX14_COMPILE_FEATURES)
+    set(CMAKE_CXX17_COMPILE_FEATURES)
+    set(CMAKE_CXX20_COMPILE_FEATURES)
+    set(CMAKE_CXX23_COMPILE_FEATURES)
+
+    include("${CMAKE_ROOT}/Modules/Internal/FeatureTesting.cmake")
+
+    cmake_record_cxx_compile_features()
+
+    if(NOT _result EQUAL 0)
+      message(CHECK_FAIL "failed")
+      return()
+    endif()
+
+    if (CMAKE_CXX20_COMPILE_FEATURES AND CMAKE_CXX23_COMPILE_FEATURES)
+      list(REMOVE_ITEM CMAKE_CXX23_COMPILE_FEATURES ${CMAKE_CXX20_COMPILE_FEATURES})
+    endif()
+    if (CMAKE_CXX17_COMPILE_FEATURES AND CMAKE_CXX20_COMPILE_FEATURES)
+      list(REMOVE_ITEM CMAKE_CXX20_COMPILE_FEATURES ${CMAKE_CXX17_COMPILE_FEATURES})
+    endif()
+    if (CMAKE_CXX14_COMPILE_FEATURES AND CMAKE_CXX17_COMPILE_FEATURES)
+      list(REMOVE_ITEM CMAKE_CXX17_COMPILE_FEATURES ${CMAKE_CXX14_COMPILE_FEATURES})
+    endif()
+    if (CMAKE_CXX11_COMPILE_FEATURES AND CMAKE_CXX14_COMPILE_FEATURES)
+      list(REMOVE_ITEM CMAKE_CXX14_COMPILE_FEATURES ${CMAKE_CXX11_COMPILE_FEATURES})
+    endif()
+    if (CMAKE_CXX98_COMPILE_FEATURES AND CMAKE_CXX11_COMPILE_FEATURES)
+      list(REMOVE_ITEM CMAKE_CXX11_COMPILE_FEATURES ${CMAKE_CXX98_COMPILE_FEATURES})
+    endif()
+
+    if(NOT CMAKE_CXX_COMPILE_FEATURES)
+      set(CMAKE_CXX_COMPILE_FEATURES
+        ${CMAKE_CXX98_COMPILE_FEATURES}
+        ${CMAKE_CXX11_COMPILE_FEATURES}
+        ${CMAKE_CXX14_COMPILE_FEATURES}
+        ${CMAKE_CXX17_COMPILE_FEATURES}
+        ${CMAKE_CXX20_COMPILE_FEATURES}
+        ${CMAKE_CXX23_COMPILE_FEATURES}
+      )
+    endif()
+
+    set(CMAKE_CXX_COMPILE_FEATURES ${CMAKE_CXX_COMPILE_FEATURES} PARENT_SCOPE)
+    set(CMAKE_CXX98_COMPILE_FEATURES ${CMAKE_CXX98_COMPILE_FEATURES} PARENT_SCOPE)
+    set(CMAKE_CXX11_COMPILE_FEATURES ${CMAKE_CXX11_COMPILE_FEATURES} PARENT_SCOPE)
+    set(CMAKE_CXX14_COMPILE_FEATURES ${CMAKE_CXX14_COMPILE_FEATURES} PARENT_SCOPE)
+    set(CMAKE_CXX17_COMPILE_FEATURES ${CMAKE_CXX17_COMPILE_FEATURES} PARENT_SCOPE)
+    set(CMAKE_CXX20_COMPILE_FEATURES ${CMAKE_CXX20_COMPILE_FEATURES} PARENT_SCOPE)
+    set(CMAKE_CXX23_COMPILE_FEATURES ${CMAKE_CXX23_COMPILE_FEATURES} PARENT_SCOPE)
+
+    message(CHECK_PASS "done")
+
+  elseif("x${lang}" STREQUAL "xCUDA" AND COMMAND cmake_record_cuda_compile_features)
+    message(CHECK_START "Detecting ${lang} compile features")
+
+    set(CMAKE_CUDA03_COMPILE_FEATURES)
+    set(CMAKE_CUDA11_COMPILE_FEATURES)
+    set(CMAKE_CUDA14_COMPILE_FEATURES)
+    set(CMAKE_CUDA17_COMPILE_FEATURES)
+    set(CMAKE_CUDA20_COMPILE_FEATURES)
+    set(CMAKE_CUDA23_COMPILE_FEATURES)
+
+    include("${CMAKE_ROOT}/Modules/Internal/FeatureTesting.cmake")
+
+    cmake_record_cuda_compile_features()
+
+    if(NOT _result EQUAL 0)
+      message(CHECK_FAIL "failed")
+      return()
+    endif()
+
+    if (CMAKE_CUDA20_COMPILE_FEATURES AND CMAKE_CUDA23_COMPILE_FEATURES)
+      list(REMOVE_ITEM CMAKE_CUDA23_COMPILE_FEATURES ${CMAKE_CUDA20_COMPILE_FEATURES})
+    endif()
+    if (CMAKE_CUDA17_COMPILE_FEATURES AND CMAKE_CUDA20_COMPILE_FEATURES)
+      list(REMOVE_ITEM CMAKE_CUDA20_COMPILE_FEATURES ${CMAKE_CUDA17_COMPILE_FEATURES})
+    endif()
+    if (CMAKE_CUDA14_COMPILE_FEATURES AND CMAKE_CUDA17_COMPILE_FEATURES)
+      list(REMOVE_ITEM CMAKE_CUDA17_COMPILE_FEATURES ${CMAKE_CUDA14_COMPILE_FEATURES})
+    endif()
+    if (CMAKE_CUDA11_COMPILE_FEATURES AND CMAKE_CUDA14_COMPILE_FEATURES)
+      list(REMOVE_ITEM CMAKE_CUDA14_COMPILE_FEATURES ${CMAKE_CUDA11_COMPILE_FEATURES})
+    endif()
+    if (CMAKE_CUDA03_COMPILE_FEATURES AND CMAKE_CUDA11_COMPILE_FEATURES)
+      list(REMOVE_ITEM CMAKE_CUDA11_COMPILE_FEATURES ${CMAKE_CUDA03_COMPILE_FEATURES})
+    endif()
+
+    if(NOT CMAKE_CUDA_COMPILE_FEATURES)
+      set(CMAKE_CUDA_COMPILE_FEATURES
+        ${CMAKE_CUDA03_COMPILE_FEATURES}
+        ${CMAKE_CUDA11_COMPILE_FEATURES}
+        ${CMAKE_CUDA14_COMPILE_FEATURES}
+        ${CMAKE_CUDA17_COMPILE_FEATURES}
+        ${CMAKE_CUDA20_COMPILE_FEATURES}
+        ${CMAKE_CUDA23_COMPILE_FEATURES}
+      )
+    endif()
+
+    set(CMAKE_CUDA_COMPILE_FEATURES ${CMAKE_CUDA_COMPILE_FEATURES} PARENT_SCOPE)
+    set(CMAKE_CUDA03_COMPILE_FEATURES ${CMAKE_CUDA03_COMPILE_FEATURES} PARENT_SCOPE)
+    set(CMAKE_CUDA11_COMPILE_FEATURES ${CMAKE_CUDA11_COMPILE_FEATURES} PARENT_SCOPE)
+    set(CMAKE_CUDA14_COMPILE_FEATURES ${CMAKE_CUDA14_COMPILE_FEATURES} PARENT_SCOPE)
+    set(CMAKE_CUDA17_COMPILE_FEATURES ${CMAKE_CUDA17_COMPILE_FEATURES} PARENT_SCOPE)
+    set(CMAKE_CUDA20_COMPILE_FEATURES ${CMAKE_CUDA20_COMPILE_FEATURES} PARENT_SCOPE)
+    set(CMAKE_CUDA23_COMPILE_FEATURES ${CMAKE_CUDA23_COMPILE_FEATURES} PARENT_SCOPE)
+
+    message(CHECK_PASS "done")
+
+  elseif(lang STREQUAL HIP AND COMMAND cmake_record_hip_compile_features)
+    message(CHECK_START "Detecting ${lang} compile features")
+
+    set(CMAKE_HIP98_COMPILE_FEATURES)
+    set(CMAKE_HIP11_COMPILE_FEATURES)
+    set(CMAKE_HIP14_COMPILE_FEATURES)
+    set(CMAKE_HIP17_COMPILE_FEATURES)
+    set(CMAKE_HIP20_COMPILE_FEATURES)
+    set(CMAKE_HIP23_COMPILE_FEATURES)
+
+    include("${CMAKE_ROOT}/Modules/Internal/FeatureTesting.cmake")
+
+    cmake_record_hip_compile_features()
+
+    if(NOT _result EQUAL 0)
+      message(CHECK_FAIL "failed")
+      return()
+    endif()
+
+    if (CMAKE_HIP20_COMPILE_FEATURES AND CMAKE_HIP23_COMPILE_FEATURES)
+      list(REMOVE_ITEM CMAKE_HIP23_COMPILE_FEATURES ${CMAKE_HIP20_COMPILE_FEATURES})
+    endif()
+    if (CMAKE_HIP17_COMPILE_FEATURES AND CMAKE_HIP20_COMPILE_FEATURES)
+      list(REMOVE_ITEM CMAKE_HIP20_COMPILE_FEATURES ${CMAKE_HIP17_COMPILE_FEATURES})
+    endif()
+    if (CMAKE_HIP14_COMPILE_FEATURES AND CMAKE_HIP17_COMPILE_FEATURES)
+      list(REMOVE_ITEM CMAKE_HIP17_COMPILE_FEATURES ${CMAKE_HIP14_COMPILE_FEATURES})
+    endif()
+    if (CMAKE_HIP11_COMPILE_FEATURES AND CMAKE_HIP14_COMPILE_FEATURES)
+      list(REMOVE_ITEM CMAKE_HIP14_COMPILE_FEATURES ${CMAKE_HIP11_COMPILE_FEATURES})
+    endif()
+    if (CMAKE_HIP98_COMPILE_FEATURES AND CMAKE_HIP11_COMPILE_FEATURES)
+      list(REMOVE_ITEM CMAKE_HIP11_COMPILE_FEATURES ${CMAKE_HIP98_COMPILE_FEATURES})
+    endif()
+
+    if(NOT CMAKE_HIP_COMPILE_FEATURES)
+      set(CMAKE_HIP_COMPILE_FEATURES
+        ${CMAKE_HIP98_COMPILE_FEATURES}
+        ${CMAKE_HIP11_COMPILE_FEATURES}
+        ${CMAKE_HIP14_COMPILE_FEATURES}
+        ${CMAKE_HIP17_COMPILE_FEATURES}
+        ${CMAKE_HIP20_COMPILE_FEATURES}
+        ${CMAKE_HIP23_COMPILE_FEATURES}
+      )
+    endif()
+
+    set(CMAKE_HIP_COMPILE_FEATURES ${CMAKE_HIP_COMPILE_FEATURES} PARENT_SCOPE)
+    set(CMAKE_HIP98_COMPILE_FEATURES ${CMAKE_HIP98_COMPILE_FEATURES} PARENT_SCOPE)
+    set(CMAKE_HIP11_COMPILE_FEATURES ${CMAKE_HIP11_COMPILE_FEATURES} PARENT_SCOPE)
+    set(CMAKE_HIP14_COMPILE_FEATURES ${CMAKE_HIP14_COMPILE_FEATURES} PARENT_SCOPE)
+    set(CMAKE_HIP17_COMPILE_FEATURES ${CMAKE_HIP17_COMPILE_FEATURES} PARENT_SCOPE)
+    set(CMAKE_HIP20_COMPILE_FEATURES ${CMAKE_HIP20_COMPILE_FEATURES} PARENT_SCOPE)
+    set(CMAKE_HIP23_COMPILE_FEATURES ${CMAKE_HIP23_COMPILE_FEATURES} PARENT_SCOPE)
+
+    message(CHECK_PASS "done")
+
+  endif()
+
+endfunction()
diff --git a/share/cmake-3.22/Modules/CMakeDetermineCompiler.cmake b/share/cmake-3.22/Modules/CMakeDetermineCompiler.cmake
new file mode 100644
index 0000000..c967ab7
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeDetermineCompiler.cmake
@@ -0,0 +1,166 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+macro(_cmake_find_compiler lang)
+  # Use already-enabled languages for reference.
+  get_property(_languages GLOBAL PROPERTY ENABLED_LANGUAGES)
+  list(REMOVE_ITEM _languages "${lang}")
+
+  if(CMAKE_${lang}_COMPILER_INIT)
+    # Search only for the specified compiler.
+    set(CMAKE_${lang}_COMPILER_LIST "${CMAKE_${lang}_COMPILER_INIT}")
+  else()
+    # Re-order the compiler list with preferred vendors first.
+    set(_${lang}_COMPILER_LIST "${CMAKE_${lang}_COMPILER_LIST}")
+    set(CMAKE_${lang}_COMPILER_LIST "")
+    # Prefer vendors of compilers from reference languages.
+    foreach(l ${_languages})
+      list(APPEND CMAKE_${lang}_COMPILER_LIST
+        ${_${lang}_COMPILER_NAMES_${CMAKE_${l}_COMPILER_ID}})
+    endforeach()
+    # Prefer vendors based on the platform.
+    list(APPEND CMAKE_${lang}_COMPILER_LIST ${CMAKE_${lang}_COMPILER_NAMES})
+    # Append the rest of the list and remove duplicates.
+    list(APPEND CMAKE_${lang}_COMPILER_LIST ${_${lang}_COMPILER_LIST})
+    unset(_${lang}_COMPILER_LIST)
+    list(REMOVE_DUPLICATES CMAKE_${lang}_COMPILER_LIST)
+    if(CMAKE_${lang}_COMPILER_EXCLUDE)
+      list(REMOVE_ITEM CMAKE_${lang}_COMPILER_LIST
+        ${CMAKE_${lang}_COMPILER_EXCLUDE})
+    endif()
+  endif()
+
+  # Look for directories containing compilers of reference languages.
+  set(_${lang}_COMPILER_HINTS "${CMAKE_${lang}_COMPILER_HINTS}")
+  foreach(l ${_languages})
+    if(CMAKE_${l}_COMPILER AND IS_ABSOLUTE "${CMAKE_${l}_COMPILER}")
+      get_filename_component(_hint "${CMAKE_${l}_COMPILER}" PATH)
+      if(IS_DIRECTORY "${_hint}")
+        list(APPEND _${lang}_COMPILER_HINTS "${_hint}")
+      endif()
+      unset(_hint)
+    endif()
+  endforeach()
+
+  # Find the compiler.
+  if(_${lang}_COMPILER_HINTS)
+    # Prefer directories containing compilers of reference languages.
+    list(REMOVE_DUPLICATES _${lang}_COMPILER_HINTS)
+    find_program(CMAKE_${lang}_COMPILER
+      NAMES ${CMAKE_${lang}_COMPILER_LIST}
+      PATHS ${_${lang}_COMPILER_HINTS}
+      NO_DEFAULT_PATH
+      DOC "${lang} compiler")
+  endif()
+  if(CMAKE_HOST_WIN32 AND CMAKE_GENERATOR MATCHES "Ninja")
+    # On Windows command-line builds, the Makefile generators each imply
+    # a preferred compiler tool.  The Ninja generator does not imply a
+    # compiler tool, so use the compiler that occurs first in PATH.
+    find_program(CMAKE_${lang}_COMPILER
+      NAMES ${CMAKE_${lang}_COMPILER_LIST}
+      NAMES_PER_DIR
+      DOC "${lang} compiler"
+      NO_PACKAGE_ROOT_PATH
+      NO_CMAKE_PATH
+      NO_CMAKE_ENVIRONMENT_PATH
+      NO_CMAKE_SYSTEM_PATH
+      )
+  endif()
+  find_program(CMAKE_${lang}_COMPILER NAMES ${CMAKE_${lang}_COMPILER_LIST} DOC "${lang} compiler")
+  if(_CMAKE_${lang}_COMPILER_PATHS)
+    # As a last fall-back, search in language-specific paths
+    find_program(CMAKE_${lang}_COMPILER
+      NAMES ${CMAKE_${lang}_COMPILER_LIST}
+      NAMES_PER_DIR
+      PATHS ${_CMAKE_${lang}_COMPILER_PATHS}
+      DOC "${lang} compiler"
+      NO_DEFAULT_PATH
+      )
+  endif()
+  if(CMAKE_${lang}_COMPILER_INIT AND NOT CMAKE_${lang}_COMPILER)
+    set_property(CACHE CMAKE_${lang}_COMPILER PROPERTY VALUE "${CMAKE_${lang}_COMPILER_INIT}")
+  endif()
+  unset(_${lang}_COMPILER_HINTS)
+  unset(_languages)
+
+  # Look for a make tool provided by Xcode
+  if(CMAKE_HOST_APPLE)
+    macro(_query_xcrun compiler_name result_var_keyword result_var)
+      if(NOT "x${result_var_keyword}" STREQUAL "xRESULT_VAR")
+        message(FATAL_ERROR "Bad arguments to macro")
+      endif()
+      execute_process(COMMAND xcrun --find ${compiler_name}
+        OUTPUT_VARIABLE _xcrun_out OUTPUT_STRIP_TRAILING_WHITESPACE
+        ERROR_VARIABLE _xcrun_err)
+      set("${result_var}" "${_xcrun_out}")
+    endmacro()
+
+    set(xcrun_result)
+    if (CMAKE_${lang}_COMPILER MATCHES "^/usr/bin/(.+)$")
+      _query_xcrun("${CMAKE_MATCH_1}" RESULT_VAR xcrun_result)
+    elseif (CMAKE_${lang}_COMPILER STREQUAL "CMAKE_${lang}_COMPILER-NOTFOUND")
+      foreach(comp ${CMAKE_${lang}_COMPILER_LIST})
+        _query_xcrun("${comp}" RESULT_VAR xcrun_result)
+        if(xcrun_result)
+          break()
+        endif()
+      endforeach()
+    endif()
+    if (xcrun_result)
+      set_property(CACHE CMAKE_${lang}_COMPILER PROPERTY VALUE "${xcrun_result}")
+    endif()
+  endif()
+endmacro()
+
+macro(_cmake_find_compiler_path lang)
+  if(CMAKE_${lang}_COMPILER)
+    # we only get here if CMAKE_${lang}_COMPILER was specified using -D or a pre-made CMakeCache.txt
+    # (e.g. via ctest) or set in CMAKE_TOOLCHAIN_FILE
+    # if CMAKE_${lang}_COMPILER is a list, use the first item as
+    # CMAKE_${lang}_COMPILER and the rest as CMAKE_${lang}_COMPILER_ARG1
+    set(CMAKE_${lang}_COMPILER_ARG1 "${CMAKE_${lang}_COMPILER}")
+    list(POP_FRONT CMAKE_${lang}_COMPILER_ARG1 CMAKE_${lang}_COMPILER)
+    list(JOIN CMAKE_${lang}_COMPILER_ARG1 " " CMAKE_${lang}_COMPILER_ARG1)
+
+    # find the compiler in the PATH if necessary
+    # if compiler (and arguments) comes from cache then synchronize cache with updated CMAKE_<LANG>_COMPILER
+    get_filename_component(_CMAKE_USER_${lang}_COMPILER_PATH "${CMAKE_${lang}_COMPILER}" PATH)
+    if(NOT _CMAKE_USER_${lang}_COMPILER_PATH)
+      find_program(CMAKE_${lang}_COMPILER_WITH_PATH NAMES ${CMAKE_${lang}_COMPILER})
+      if(CMAKE_${lang}_COMPILER_WITH_PATH)
+        set(CMAKE_${lang}_COMPILER ${CMAKE_${lang}_COMPILER_WITH_PATH})
+        get_property(_CMAKE_${lang}_COMPILER_CACHED CACHE CMAKE_${lang}_COMPILER PROPERTY TYPE)
+        if(_CMAKE_${lang}_COMPILER_CACHED)
+          set(CMAKE_${lang}_COMPILER "${CMAKE_${lang}_COMPILER}" CACHE STRING "${lang} compiler" FORCE)
+        endif()
+        unset(_CMAKE_${lang}_COMPILER_CACHED)
+      endif()
+      unset(CMAKE_${lang}_COMPILER_WITH_PATH CACHE)
+    elseif (EXISTS ${CMAKE_${lang}_COMPILER})
+      get_property(_CMAKE_${lang}_COMPILER_CACHED CACHE CMAKE_${lang}_COMPILER PROPERTY TYPE)
+      if(_CMAKE_${lang}_COMPILER_CACHED)
+        set(CMAKE_${lang}_COMPILER "${CMAKE_${lang}_COMPILER}" CACHE STRING "${lang} compiler" FORCE)
+      endif()
+      unset(_CMAKE_${lang}_COMPILER_CACHED)
+    endif()
+  endif()
+endmacro()
+
+function(_cmake_find_compiler_sysroot lang)
+  if(CMAKE_${lang}_COMPILER_ID STREQUAL "GNU")
+    execute_process(COMMAND "${CMAKE_${lang}_COMPILER}" -print-sysroot
+      OUTPUT_STRIP_TRAILING_WHITESPACE
+      OUTPUT_VARIABLE _cmake_sysroot_run_out
+      ERROR_VARIABLE _cmake_sysroot_run_err)
+
+    if(_cmake_sysroot_run_out AND NOT _cmake_sysroot_run_err
+        AND NOT _cmake_sysroot_run_out STREQUAL "/"
+        AND IS_DIRECTORY "${_cmake_sysroot_run_out}/usr")
+      file(TO_CMAKE_PATH "${_cmake_sysroot_run_out}/usr" _cmake_sysroot_run_out_usr)
+      set(CMAKE_${lang}_COMPILER_SYSROOT "${_cmake_sysroot_run_out_usr}" PARENT_SCOPE)
+    else()
+      set(CMAKE_${lang}_COMPILER_SYSROOT "" PARENT_SCOPE)
+    endif()
+  endif()
+endfunction()
diff --git a/share/cmake-3.22/Modules/CMakeDetermineCompilerABI.cmake b/share/cmake-3.22/Modules/CMakeDetermineCompilerABI.cmake
new file mode 100644
index 0000000..8191d81
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeDetermineCompilerABI.cmake
@@ -0,0 +1,192 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# Function to compile a source file to identify the compiler ABI.
+# This is used internally by CMake and should not be included by user
+# code.
+
+include(${CMAKE_ROOT}/Modules/CMakeParseImplicitIncludeInfo.cmake)
+include(${CMAKE_ROOT}/Modules/CMakeParseImplicitLinkInfo.cmake)
+include(${CMAKE_ROOT}/Modules/CMakeParseLibraryArchitecture.cmake)
+include(CMakeTestCompilerCommon)
+
+function(CMAKE_DETERMINE_COMPILER_ABI lang src)
+  if(NOT DEFINED CMAKE_${lang}_ABI_COMPILED)
+    message(CHECK_START "Detecting ${lang} compiler ABI info")
+
+    # Compile the ABI identification source.
+    set(BIN "${CMAKE_PLATFORM_INFO_DIR}/CMakeDetermineCompilerABI_${lang}.bin")
+    set(CMAKE_FLAGS )
+    set(COMPILE_DEFINITIONS )
+    if(DEFINED CMAKE_${lang}_VERBOSE_FLAG)
+      set(CMAKE_FLAGS "-DEXE_LINKER_FLAGS=${CMAKE_${lang}_VERBOSE_FLAG}")
+      set(COMPILE_DEFINITIONS "${CMAKE_${lang}_VERBOSE_FLAG}")
+    endif()
+    if(DEFINED CMAKE_${lang}_VERBOSE_COMPILE_FLAG)
+      set(COMPILE_DEFINITIONS "${CMAKE_${lang}_VERBOSE_COMPILE_FLAG}")
+    endif()
+    if(NOT "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xMSVC")
+      # Avoid adding our own platform standard libraries for compilers
+      # from which we might detect implicit link libraries.
+      list(APPEND CMAKE_FLAGS "-DCMAKE_${lang}_STANDARD_LIBRARIES=")
+    endif()
+    __TestCompiler_setTryCompileTargetType()
+
+    # Avoid failing ABI detection on warnings.
+    string(REGEX REPLACE "(^| )-Werror([= ][^ ]*)?( |$)" " " CMAKE_${lang}_FLAGS "${CMAKE_${lang}_FLAGS}")
+
+    # Save the current LC_ALL, LC_MESSAGES, and LANG environment variables
+    # and set them to "C" that way GCC's "search starts here" text is in
+    # English and we can grok it.
+    set(_orig_lc_all      $ENV{LC_ALL})
+    set(_orig_lc_messages $ENV{LC_MESSAGES})
+    set(_orig_lang        $ENV{LANG})
+    set(ENV{LC_ALL}      C)
+    set(ENV{LC_MESSAGES} C)
+    set(ENV{LANG}        C)
+
+    try_compile(CMAKE_${lang}_ABI_COMPILED
+      ${CMAKE_BINARY_DIR} ${src}
+      CMAKE_FLAGS ${CMAKE_FLAGS}
+                  # Ignore unused flags when we are just determining the ABI.
+                  "--no-warn-unused-cli"
+      COMPILE_DEFINITIONS ${COMPILE_DEFINITIONS}
+      OUTPUT_VARIABLE OUTPUT
+      COPY_FILE "${BIN}"
+      COPY_FILE_ERROR _copy_error
+      __CMAKE_INTERNAL ABI
+      )
+
+    # Restore original LC_ALL, LC_MESSAGES, and LANG
+    set(ENV{LC_ALL}      ${_orig_lc_all})
+    set(ENV{LC_MESSAGES} ${_orig_lc_messages})
+    set(ENV{LANG}        ${_orig_lang})
+
+    # Move result from cache to normal variable.
+    set(CMAKE_${lang}_ABI_COMPILED ${CMAKE_${lang}_ABI_COMPILED})
+    unset(CMAKE_${lang}_ABI_COMPILED CACHE)
+    if(CMAKE_${lang}_ABI_COMPILED AND _copy_error)
+      set(CMAKE_${lang}_ABI_COMPILED 0)
+    endif()
+    set(CMAKE_${lang}_ABI_COMPILED ${CMAKE_${lang}_ABI_COMPILED} PARENT_SCOPE)
+
+    # Load the resulting information strings.
+    if(CMAKE_${lang}_ABI_COMPILED)
+      message(CHECK_PASS "done")
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+        "Detecting ${lang} compiler ABI info compiled with the following output:\n${OUTPUT}\n\n")
+      file(STRINGS "${BIN}" ABI_STRINGS LIMIT_COUNT 32 REGEX "INFO:[A-Za-z0-9_]+\\[[^]]*\\]")
+      set(ABI_SIZEOF_DPTR "NOTFOUND")
+      set(ABI_BYTE_ORDER "NOTFOUND")
+      set(ABI_NAME "NOTFOUND")
+      foreach(info ${ABI_STRINGS})
+        if("${info}" MATCHES "INFO:sizeof_dptr\\[0*([^]]*)\\]" AND NOT ABI_SIZEOF_DPTR)
+          set(ABI_SIZEOF_DPTR "${CMAKE_MATCH_1}")
+        endif()
+        if("${info}" MATCHES "INFO:byte_order\\[(BIG_ENDIAN|LITTLE_ENDIAN)\\]")
+          set(byte_order "${CMAKE_MATCH_1}")
+          if(ABI_BYTE_ORDER STREQUAL "NOTFOUND")
+            # Tentatively use the value because this is the first occurrence.
+            set(ABI_BYTE_ORDER "${byte_order}")
+          elseif(NOT ABI_BYTE_ORDER STREQUAL "${byte_order}")
+            # Drop value because multiple occurrences do not match.
+            set(ABI_BYTE_ORDER "")
+          endif()
+        endif()
+        if("${info}" MATCHES "INFO:abi\\[([^]]*)\\]" AND NOT ABI_NAME)
+          set(ABI_NAME "${CMAKE_MATCH_1}")
+        endif()
+      endforeach()
+
+      if(ABI_SIZEOF_DPTR)
+        set(CMAKE_${lang}_SIZEOF_DATA_PTR "${ABI_SIZEOF_DPTR}" PARENT_SCOPE)
+      elseif(CMAKE_${lang}_SIZEOF_DATA_PTR_DEFAULT)
+        set(CMAKE_${lang}_SIZEOF_DATA_PTR "${CMAKE_${lang}_SIZEOF_DATA_PTR_DEFAULT}" PARENT_SCOPE)
+      endif()
+
+      if(ABI_BYTE_ORDER)
+        set(CMAKE_${lang}_BYTE_ORDER "${ABI_BYTE_ORDER}" PARENT_SCOPE)
+      endif()
+
+      if(ABI_NAME)
+        set(CMAKE_${lang}_COMPILER_ABI "${ABI_NAME}" PARENT_SCOPE)
+      endif()
+
+      # Parse implicit include directory for this language, if available.
+      if(CMAKE_${lang}_VERBOSE_FLAG)
+        set (implicit_incdirs "")
+        cmake_parse_implicit_include_info("${OUTPUT}" "${lang}"
+          implicit_incdirs log rv)
+        file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+          "Parsed ${lang} implicit include dir info from above output: rv=${rv}\n${log}\n\n")
+        if("${rv}" STREQUAL "done")
+          # Entries that we have been told to explicitly pass as standard include
+          # directories will not be implicitly added by the compiler.
+          if(CMAKE_${lang}_STANDARD_INCLUDE_DIRECTORIES)
+            list(REMOVE_ITEM implicit_incdirs ${CMAKE_${lang}_STANDARD_INCLUDE_DIRECTORIES})
+          endif()
+
+          # We parsed implicit include directories, so override the default initializer.
+          set(_CMAKE_${lang}_IMPLICIT_INCLUDE_DIRECTORIES_INIT "${implicit_incdirs}")
+        endif()
+      endif()
+      set(CMAKE_${lang}_IMPLICIT_INCLUDE_DIRECTORIES "${_CMAKE_${lang}_IMPLICIT_INCLUDE_DIRECTORIES_INIT}" PARENT_SCOPE)
+
+      # Parse implicit linker information for this language, if available.
+      set(implicit_dirs "")
+      set(implicit_objs "")
+      set(implicit_libs "")
+      set(implicit_fwks "")
+      if(CMAKE_${lang}_VERBOSE_FLAG)
+        CMAKE_PARSE_IMPLICIT_LINK_INFO("${OUTPUT}" implicit_libs implicit_dirs implicit_fwks log
+          "${CMAKE_${lang}_IMPLICIT_OBJECT_REGEX}"
+          COMPUTE_IMPLICIT_OBJECTS implicit_objs)
+        file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+          "Parsed ${lang} implicit link information from above output:\n${log}\n\n")
+      endif()
+      # for VS IDE Intel Fortran we have to figure out the
+      # implicit link path for the fortran run time using
+      # a try-compile
+      if("${lang}" MATCHES "Fortran"
+          AND "${CMAKE_GENERATOR}" MATCHES "Visual Studio")
+        message(CHECK_START "Determine Intel Fortran Compiler Implicit Link Path")
+        # Build a sample project which reports symbols.
+        try_compile(IFORT_LIB_PATH_COMPILED
+          ${CMAKE_BINARY_DIR}/CMakeFiles/IntelVSImplicitPath
+          ${CMAKE_ROOT}/Modules/IntelVSImplicitPath
+          IntelFortranImplicit
+          CMAKE_FLAGS
+          "-DCMAKE_Fortran_FLAGS:STRING=${CMAKE_Fortran_FLAGS}"
+          OUTPUT_VARIABLE _output)
+        file(WRITE
+          "${CMAKE_BINARY_DIR}/CMakeFiles/IntelVSImplicitPath/output.txt"
+          "${_output}")
+        include(${CMAKE_BINARY_DIR}/CMakeFiles/IntelVSImplicitPath/output.cmake OPTIONAL)
+        message(CHECK_PASS "done")
+      endif()
+
+      # Implicit link libraries cannot be used explicitly for multiple
+      # OS X architectures, so we skip it.
+      if(DEFINED CMAKE_OSX_ARCHITECTURES)
+        if("${CMAKE_OSX_ARCHITECTURES}" MATCHES ";")
+          set(implicit_libs "")
+        endif()
+      endif()
+
+      set(CMAKE_${lang}_IMPLICIT_LINK_LIBRARIES "${implicit_libs}" PARENT_SCOPE)
+      set(CMAKE_${lang}_IMPLICIT_LINK_DIRECTORIES "${implicit_dirs}" PARENT_SCOPE)
+      set(CMAKE_${lang}_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "${implicit_fwks}" PARENT_SCOPE)
+
+      cmake_parse_library_architecture(${lang} "${implicit_dirs}" "${implicit_objs}" architecture_flag)
+      if(architecture_flag)
+        set(CMAKE_${lang}_LIBRARY_ARCHITECTURE "${architecture_flag}" PARENT_SCOPE)
+      endif()
+
+    else()
+      message(CHECK_FAIL "failed")
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+        "Detecting ${lang} compiler ABI info failed to compile with the following output:\n${OUTPUT}\n${_copy_error}\n\n")
+    endif()
+  endif()
+endfunction()
diff --git a/share/cmake-3.22/Modules/CMakeDetermineCompilerId.cmake b/share/cmake-3.22/Modules/CMakeDetermineCompilerId.cmake
new file mode 100644
index 0000000..c62cb7d
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeDetermineCompilerId.cmake
@@ -0,0 +1,1111 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+macro(__determine_compiler_id_test testflags_var userflags_var)
+  separate_arguments(testflags UNIX_COMMAND "${${testflags_var}}")
+  CMAKE_DETERMINE_COMPILER_ID_BUILD("${lang}" "${testflags}" "${${userflags_var}}" "${src}")
+  CMAKE_DETERMINE_COMPILER_ID_MATCH_VENDOR("${lang}" "${COMPILER_${lang}_PRODUCED_OUTPUT}")
+
+  if(NOT CMAKE_${lang}_COMPILER_ID)
+    foreach(file ${COMPILER_${lang}_PRODUCED_FILES})
+      CMAKE_DETERMINE_COMPILER_ID_CHECK("${lang}" "${CMAKE_${lang}_COMPILER_ID_DIR}/${file}" "${src}")
+    endforeach()
+  endif()
+endmacro()
+
+# Function to compile a source file to identify the compiler.  This is
+# used internally by CMake and should not be included by user code.
+# If successful, sets CMAKE_<lang>_COMPILER_ID and CMAKE_<lang>_PLATFORM_ID
+
+function(CMAKE_DETERMINE_COMPILER_ID lang flagvar src)
+  # Make sure the compiler arguments are clean.
+  string(STRIP "${CMAKE_${lang}_COMPILER_ARG1}" CMAKE_${lang}_COMPILER_ID_ARG1)
+  string(REGEX REPLACE " +" ";" CMAKE_${lang}_COMPILER_ID_ARG1 "${CMAKE_${lang}_COMPILER_ID_ARG1}")
+
+  # Make sure user-specified compiler flags are used.
+  if(CMAKE_${lang}_FLAGS)
+    set(CMAKE_${lang}_COMPILER_ID_FLAGS ${CMAKE_${lang}_FLAGS})
+  elseif(DEFINED ENV{${flagvar}})
+    set(CMAKE_${lang}_COMPILER_ID_FLAGS $ENV{${flagvar}})
+  else(CMAKE_${lang}_FLAGS_INIT)
+    set(CMAKE_${lang}_COMPILER_ID_FLAGS ${CMAKE_${lang}_FLAGS_INIT})
+  endif()
+  string(REPLACE " " ";" CMAKE_${lang}_COMPILER_ID_FLAGS_LIST "${CMAKE_${lang}_COMPILER_ID_FLAGS}")
+
+  # Compute the directory in which to run the test.
+  set(CMAKE_${lang}_COMPILER_ID_DIR ${CMAKE_PLATFORM_INFO_DIR}/CompilerId${lang})
+
+  # If we REQUIRE_SUCCESS, i.e. TEST_FLAGS_FIRST has the correct flags, we still need to
+  # try two combinations: with COMPILER_ID_FLAGS (from user) and without (see issue #21869).
+  if(CMAKE_${lang}_COMPILER_ID_REQUIRE_SUCCESS)
+    # If there COMPILER_ID_FLAGS is empty we can error for the first invocation.
+    if("${CMAKE_${lang}_COMPILER_ID_FLAGS_LIST}" STREQUAL "")
+      set(__compiler_id_require_success TRUE)
+    endif()
+
+    foreach(userflags "${CMAKE_${lang}_COMPILER_ID_FLAGS_LIST}" "")
+      set(testflags "${CMAKE_${lang}_COMPILER_ID_TEST_FLAGS_FIRST}")
+      __determine_compiler_id_test(testflags userflags)
+      if(CMAKE_${lang}_COMPILER_ID)
+        break()
+      endif()
+      set(__compiler_id_require_success TRUE)
+    endforeach()
+  else()
+    # Try building with no extra flags and then try each set
+    # of helper flags.  Stop when the compiler is identified.
+    foreach(userflags "${CMAKE_${lang}_COMPILER_ID_FLAGS_LIST}" "")
+      foreach(testflags ${CMAKE_${lang}_COMPILER_ID_TEST_FLAGS_FIRST} "" ${CMAKE_${lang}_COMPILER_ID_TEST_FLAGS})
+        __determine_compiler_id_test(testflags userflags)
+        if(CMAKE_${lang}_COMPILER_ID)
+          break()
+        endif()
+      endforeach()
+      if(CMAKE_${lang}_COMPILER_ID)
+        break()
+      endif()
+    endforeach()
+  endif()
+
+  # Check if compiler id detection gave us the compiler tool.
+  if(CMAKE_${lang}_COMPILER_ID_TOOL)
+    set(CMAKE_${lang}_COMPILER "${CMAKE_${lang}_COMPILER_ID_TOOL}")
+    set(CMAKE_${lang}_COMPILER "${CMAKE_${lang}_COMPILER_ID_TOOL}" PARENT_SCOPE)
+  elseif(NOT CMAKE_${lang}_COMPILER)
+    set(CMAKE_${lang}_COMPILER "CMAKE_${lang}_COMPILER-NOTFOUND" PARENT_SCOPE)
+  endif()
+
+  # If the compiler is still unknown, try to query its vendor.
+  if(CMAKE_${lang}_COMPILER AND NOT CMAKE_${lang}_COMPILER_ID)
+    foreach(userflags "${CMAKE_${lang}_COMPILER_ID_FLAGS_LIST}" "")
+      CMAKE_DETERMINE_COMPILER_ID_VENDOR(${lang} "${userflags}")
+    endforeach()
+  endif()
+
+  # If the compiler is still unknown, fallback to GHS
+  if(NOT CMAKE_${lang}_COMPILER_ID  AND "${CMAKE_GENERATOR}" MATCHES "Green Hills MULTI")
+    set(CMAKE_${lang}_COMPILER_ID GHS)
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+        "The ${lang} compiler identification is falling back to GHS.\n\n")
+  endif()
+
+  # CUDA < 7.5 is missing version macros
+  if(lang STREQUAL "CUDA"
+     AND CMAKE_${lang}_COMPILER_ID STREQUAL "NVIDIA"
+     AND NOT CMAKE_${lang}_COMPILER_VERSION)
+    execute_process(
+      COMMAND "${CMAKE_${lang}_COMPILER}"
+      --version
+      OUTPUT_VARIABLE output ERROR_VARIABLE output
+      RESULT_VARIABLE result
+      TIMEOUT 10
+    )
+    if(output MATCHES [=[ V([0-9]+)\.([0-9]+)\.([0-9]+)]=])
+      set(CMAKE_${lang}_COMPILER_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}")
+    endif()
+  endif()
+
+  # For Swift we need to explicitly query the version.
+  if(lang STREQUAL "Swift"
+     AND CMAKE_${lang}_COMPILER
+     AND NOT CMAKE_${lang}_COMPILER_VERSION)
+    execute_process(
+      COMMAND "${CMAKE_${lang}_COMPILER}"
+      -version
+      OUTPUT_VARIABLE output ERROR_VARIABLE output
+      RESULT_VARIABLE result
+      TIMEOUT 10
+    )
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+      "Running the ${lang} compiler: \"${CMAKE_${lang}_COMPILER}\" -version\n"
+      "${output}\n"
+      )
+
+    if(output MATCHES [[Swift version ([0-9]+\.[0-9]+(\.[0-9]+)?)]])
+      set(CMAKE_${lang}_COMPILER_VERSION "${CMAKE_MATCH_1}")
+      if(NOT CMAKE_${lang}_COMPILER_ID)
+        set(CMAKE_Swift_COMPILER_ID "Apple")
+      endif()
+    endif()
+  endif()
+
+  # For ISPC we need to explicitly query the version.
+  if(lang STREQUAL "ISPC"
+     AND CMAKE_${lang}_COMPILER
+     AND NOT CMAKE_${lang}_COMPILER_VERSION)
+    execute_process(
+      COMMAND "${CMAKE_${lang}_COMPILER}"
+      --version
+      OUTPUT_VARIABLE output ERROR_VARIABLE output
+      RESULT_VARIABLE result
+      TIMEOUT 10
+    )
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+      "Running the ${lang} compiler: \"${CMAKE_${lang}_COMPILER}\" -version\n"
+      "${output}\n"
+      )
+
+    if(output MATCHES [[ISPC\), ([0-9]+\.[0-9]+(\.[0-9]+)?)]])
+      set(CMAKE_${lang}_COMPILER_VERSION "${CMAKE_MATCH_1}")
+    endif()
+  endif()
+
+  if (COMPILER_QNXNTO AND CMAKE_${lang}_COMPILER_ID STREQUAL "GNU")
+    execute_process(
+      COMMAND "${CMAKE_${lang}_COMPILER}"
+      -V
+      OUTPUT_VARIABLE output ERROR_VARIABLE output
+      RESULT_VARIABLE result
+      TIMEOUT 10
+      )
+    if (output MATCHES "targets available")
+      set(CMAKE_${lang}_COMPILER_ID QCC)
+      # http://community.qnx.com/sf/discussion/do/listPosts/projects.community/discussion.qnx_momentics_community_support.topc3555?_pagenum=2
+      # The qcc driver does not itself have a version.
+    endif()
+  endif()
+
+  # The Fujitsu compiler does not always convey version information through
+  # preprocessor symbols so we extract through command line info
+  if (CMAKE_${lang}_COMPILER_ID STREQUAL "Fujitsu")
+    if(NOT CMAKE_${lang}_COMPILER_VERSION)
+      execute_process(
+        COMMAND "${CMAKE_${lang}_COMPILER}" -V
+        OUTPUT_VARIABLE output
+        ERROR_VARIABLE output
+        RESULT_VARIABLE result
+        TIMEOUT 10
+      )
+      if (result EQUAL 0)
+        if (output MATCHES [[Fujitsu [^ ]* Compiler ([0-9]+\.[0-9]+\.[0-9]+)]])
+          set(CMAKE_${lang}_COMPILER_VERSION "${CMAKE_MATCH_1}")
+        endif()
+      endif()
+    endif()
+  endif()
+
+  # if the format is unknown after all files have been checked, put "Unknown" in the cache
+  if(NOT CMAKE_EXECUTABLE_FORMAT)
+    set(CMAKE_EXECUTABLE_FORMAT "Unknown" CACHE INTERNAL "Executable file format")
+  endif()
+
+  if((CMAKE_GENERATOR MATCHES "^Ninja"
+        OR ((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+          AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"))
+      AND MSVC_${lang}_ARCHITECTURE_ID)
+    foreach(userflags "${CMAKE_${lang}_COMPILER_ID_FLAGS_LIST}" "")
+      CMAKE_DETERMINE_MSVC_SHOWINCLUDES_PREFIX(${lang} "${userflags}")
+    endforeach()
+  else()
+    set(CMAKE_${lang}_CL_SHOWINCLUDES_PREFIX "")
+  endif()
+
+  set(_variant "")
+  if("x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xClang"
+    OR "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xIntelLLVM")
+    if("x${CMAKE_${lang}_SIMULATE_ID}" STREQUAL "xMSVC")
+      if(CMAKE_GENERATOR MATCHES "Visual Studio")
+        set(CMAKE_${lang}_COMPILER_FRONTEND_VARIANT "MSVC")
+      else()
+        # Test whether an MSVC-like command-line option works.
+        execute_process(COMMAND "${CMAKE_${lang}_COMPILER}" -?
+          RESULT_VARIABLE _clang_result
+          OUTPUT_VARIABLE _clang_stdout
+          ERROR_VARIABLE _clang_stderr)
+        if(_clang_result EQUAL 0)
+          set(CMAKE_${lang}_COMPILER_FRONTEND_VARIANT "MSVC")
+        else()
+          set(CMAKE_${lang}_COMPILER_FRONTEND_VARIANT "GNU")
+        endif()
+      endif()
+      set(_variant " with ${CMAKE_${lang}_COMPILER_FRONTEND_VARIANT}-like command-line")
+    else()
+      set(CMAKE_${lang}_COMPILER_FRONTEND_VARIANT "GNU")
+    endif()
+  elseif("x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xFujitsuClang")
+    set(CMAKE_${lang}_COMPILER_FRONTEND_VARIANT "GNU")
+  else()
+    set(CMAKE_${lang}_COMPILER_FRONTEND_VARIANT "")
+  endif()
+
+  # Display the final identification result.
+  if(CMAKE_${lang}_COMPILER_ID)
+    if(CMAKE_${lang}_COMPILER_VERSION)
+      set(_version " ${CMAKE_${lang}_COMPILER_VERSION}")
+    else()
+      set(_version "")
+    endif()
+    if(CMAKE_${lang}_COMPILER_ARCHITECTURE_ID AND "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xIAR")
+      set(_archid " ${CMAKE_${lang}_COMPILER_ARCHITECTURE_ID}")
+    else()
+      set(_archid "")
+    endif()
+    message(STATUS "The ${lang} compiler identification is "
+      "${CMAKE_${lang}_COMPILER_ID}${_archid}${_version}${_variant}")
+    unset(_archid)
+    unset(_version)
+    unset(_variant)
+  else()
+    message(STATUS "The ${lang} compiler identification is unknown")
+  endif()
+
+  if(lang STREQUAL "Fortran" AND CMAKE_${lang}_COMPILER_ID STREQUAL "XL")
+    set(CMAKE_${lang}_XL_CPP "${CMAKE_${lang}_COMPILER_ID_CPP}" PARENT_SCOPE)
+  endif()
+
+  set(CMAKE_${lang}_COMPILER_ID "${CMAKE_${lang}_COMPILER_ID}" PARENT_SCOPE)
+  set(CMAKE_${lang}_PLATFORM_ID "${CMAKE_${lang}_PLATFORM_ID}" PARENT_SCOPE)
+  set(CMAKE_${lang}_COMPILER_ARCHITECTURE_ID "${CMAKE_${lang}_COMPILER_ARCHITECTURE_ID}" PARENT_SCOPE)
+  set(MSVC_${lang}_ARCHITECTURE_ID "${MSVC_${lang}_ARCHITECTURE_ID}"
+    PARENT_SCOPE)
+  set(CMAKE_${lang}_XCODE_ARCHS "${CMAKE_${lang}_XCODE_ARCHS}" PARENT_SCOPE)
+  set(CMAKE_${lang}_CL_SHOWINCLUDES_PREFIX "${CMAKE_${lang}_CL_SHOWINCLUDES_PREFIX}" PARENT_SCOPE)
+  set(CMAKE_${lang}_COMPILER_FRONTEND_VARIANT "${CMAKE_${lang}_COMPILER_FRONTEND_VARIANT}" PARENT_SCOPE)
+  set(CMAKE_${lang}_COMPILER_VERSION "${CMAKE_${lang}_COMPILER_VERSION}" PARENT_SCOPE)
+  set(CMAKE_${lang}_COMPILER_VERSION_INTERNAL "${CMAKE_${lang}_COMPILER_VERSION_INTERNAL}" PARENT_SCOPE)
+  set(CMAKE_${lang}_COMPILER_WRAPPER "${CMAKE_${lang}_COMPILER_WRAPPER}" PARENT_SCOPE)
+  set(CMAKE_${lang}_SIMULATE_ID "${CMAKE_${lang}_SIMULATE_ID}" PARENT_SCOPE)
+  set(CMAKE_${lang}_SIMULATE_VERSION "${CMAKE_${lang}_SIMULATE_VERSION}" PARENT_SCOPE)
+  set(CMAKE_${lang}_STANDARD_COMPUTED_DEFAULT "${CMAKE_${lang}_STANDARD_COMPUTED_DEFAULT}" PARENT_SCOPE)
+  set(CMAKE_${lang}_EXTENSIONS_COMPUTED_DEFAULT "${CMAKE_${lang}_EXTENSIONS_COMPUTED_DEFAULT}" PARENT_SCOPE)
+  set(CMAKE_${lang}_COMPILER_PRODUCED_OUTPUT "${COMPILER_${lang}_PRODUCED_OUTPUT}" PARENT_SCOPE)
+  set(CMAKE_${lang}_COMPILER_PRODUCED_FILES "${COMPILER_${lang}_PRODUCED_FILES}" PARENT_SCOPE)
+endfunction()
+
+include(CMakeCompilerIdDetection)
+
+#-----------------------------------------------------------------------------
+# Function to write the compiler id source file.
+function(CMAKE_DETERMINE_COMPILER_ID_WRITE lang src)
+  find_file(src_in ${src}.in PATHS ${CMAKE_ROOT}/Modules ${CMAKE_MODULE_PATH} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
+  file(READ ${src_in} ID_CONTENT_IN)
+
+  compiler_id_detection(CMAKE_${lang}_COMPILER_ID_CONTENT ${lang}
+    ID_STRING
+    VERSION_STRINGS
+    PLATFORM_DEFAULT_COMPILER
+  )
+
+  unset(src_in CACHE)
+  string(CONFIGURE "${ID_CONTENT_IN}" ID_CONTENT_OUT @ONLY)
+  file(WRITE ${CMAKE_${lang}_COMPILER_ID_DIR}/${src} "${ID_CONTENT_OUT}")
+endfunction()
+
+#-----------------------------------------------------------------------------
+# Function to build the compiler id source file and look for output
+# files.
+function(CMAKE_DETERMINE_COMPILER_ID_BUILD lang testflags userflags src)
+  # Create a clean working directory.
+  file(REMOVE_RECURSE ${CMAKE_${lang}_COMPILER_ID_DIR})
+  file(MAKE_DIRECTORY ${CMAKE_${lang}_COMPILER_ID_DIR})
+  file(MAKE_DIRECTORY ${CMAKE_${lang}_COMPILER_ID_DIR}/tmp)
+  CMAKE_DETERMINE_COMPILER_ID_WRITE("${lang}" "${src}")
+
+  # Construct a description of this test case.
+  set(COMPILER_DESCRIPTION
+    "Compiler: ${CMAKE_${lang}_COMPILER} ${CMAKE_${lang}_COMPILER_ID_ARG1}
+Build flags: ${userflags}
+Id flags: ${testflags} ${CMAKE_${lang}_COMPILER_ID_FLAGS_ALWAYS}
+")
+
+  # Compile the compiler identification source.
+  if("${CMAKE_GENERATOR}" MATCHES "Visual Studio ([0-9]+)")
+    set(vs_version ${CMAKE_MATCH_1})
+    set(id_platform ${CMAKE_VS_PLATFORM_NAME})
+    set(id_lang "${lang}")
+    set(id_PostBuildEvent_Command "")
+    if(CMAKE_VS_PLATFORM_TOOLSET MATCHES "^[Ll][Ll][Vv][Mm](_v[0-9]+(_xp)?)?$")
+      set(id_cl_var "ClangClExecutable")
+    elseif(CMAKE_VS_PLATFORM_TOOLSET MATCHES "^[Cc][Ll][Aa][Nn][Gg]([Cc][Ll]$|_[0-9])")
+      set(id_cl "$(CLToolExe)")
+    elseif(CMAKE_VS_PLATFORM_TOOLSET MATCHES "v[0-9]+_clang_.*")
+      set(id_cl clang.exe)
+    # Executable names have been chosen according documentation
+    # URL: (https://software.intel.com/content/www/us/en/develop/documentation/get-started-with-dpcpp-compiler/top.html#top_GUID-A9B4C91D-97AC-450D-9742-9D895BC8AEE1)
+    elseif(CMAKE_VS_PLATFORM_TOOLSET MATCHES "Intel")
+      if(CMAKE_VS_PLATFORM_TOOLSET MATCHES "DPC\\+\\+ Compiler")
+        set(id_cl dpcpp.exe)
+      elseif(CMAKE_VS_PLATFORM_TOOLSET MATCHES "C\\+\\+ Compiler 2021")
+        set(id_cl icx.exe)
+      elseif(CMAKE_VS_PLATFORM_TOOLSET MATCHES "C\\+\\+ Compiler")
+        set(id_cl icl.exe)
+      endif()
+    else()
+      set(id_cl cl.exe)
+    endif()
+    if(CMAKE_VS_PLATFORM_NAME STREQUAL "Tegra-Android")
+      set(v NsightTegra)
+      set(ext vcxproj)
+      if(lang STREQUAL CXX)
+        set(id_gcc g++)
+        set(id_clang clang++)
+      else()
+        set(id_gcc gcc)
+        set(id_clang clang)
+      endif()
+    elseif(lang STREQUAL Fortran)
+      set(v Intel)
+      set(ext vfproj)
+      set(id_cl ifort.exe)
+    elseif(lang STREQUAL CSharp)
+      set(v 10)
+      set(ext csproj)
+      set(id_cl csc.exe)
+    elseif(NOT "${vs_version}" VERSION_LESS 10)
+      set(v 10)
+      set(ext vcxproj)
+    else()
+      set(id_version ${vs_version}.00)
+      set(v 7)
+      set(ext vcproj)
+    endif()
+    if(CMAKE_VS_PLATFORM_TOOLSET)
+      if(CMAKE_VS_PLATFORM_NAME STREQUAL "Tegra-Android")
+        set(id_toolset "<NdkToolchainVersion>${CMAKE_VS_PLATFORM_TOOLSET}</NdkToolchainVersion>")
+      else()
+        set(id_toolset "<PlatformToolset>${CMAKE_VS_PLATFORM_TOOLSET}</PlatformToolset>")
+        if(CMAKE_VS_PLATFORM_TOOLSET_VERSION)
+          set(id_sep "\\")
+          if(CMAKE_VS_PLATFORM_TOOLSET_VERSION VERSION_GREATER_EQUAL "14.20")
+            if(EXISTS "${CMAKE_GENERATOR_INSTANCE}/VC/Auxiliary/Build.${CMAKE_VS_PLATFORM_TOOLSET_VERSION}/Microsoft.VCToolsVersion.${CMAKE_VS_PLATFORM_TOOLSET_VERSION}.props")
+              set(id_sep ".")
+            endif()
+          endif()
+          set(id_toolset_version_props "<Import Project=\"${CMAKE_GENERATOR_INSTANCE}\\VC\\Auxiliary\\Build${id_sep}${CMAKE_VS_PLATFORM_TOOLSET_VERSION}\\Microsoft.VCToolsVersion.${CMAKE_VS_PLATFORM_TOOLSET_VERSION}.props\" />")
+          unset(id_sep)
+        endif()
+      endif()
+    else()
+      set(id_toolset "")
+      set(id_toolset_version_props "")
+    endif()
+    if(CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE)
+      set(id_PreferredToolArchitecture "<PreferredToolArchitecture>${CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE}</PreferredToolArchitecture>")
+    else()
+      set(id_PreferredToolArchitecture "")
+    endif()
+    if(CMAKE_SYSTEM_NAME STREQUAL "WindowsPhone")
+      set(id_keyword "Win32Proj")
+      set(id_system "<ApplicationType>Windows Phone</ApplicationType>")
+    elseif(CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
+      set(id_keyword "Win32Proj")
+      set(id_system "<ApplicationType>Windows Store</ApplicationType>")
+    elseif(CMAKE_SYSTEM_NAME STREQUAL "Android")
+      set(id_keyword "Android")
+      set(id_system "<ApplicationType>Android</ApplicationType>")
+    else()
+      set(id_keyword "Win32Proj")
+      set(id_system "")
+    endif()
+    if(id_keyword STREQUAL "Android")
+      if(CMAKE_GENERATOR MATCHES "Visual Studio 14")
+        set(id_system_version "<ApplicationTypeRevision>2.0</ApplicationTypeRevision>")
+      elseif(CMAKE_GENERATOR MATCHES "Visual Studio 1[56]")
+        set(id_system_version "<ApplicationTypeRevision>3.0</ApplicationTypeRevision>")
+      else()
+        set(id_system_version "")
+      endif()
+    elseif(id_system AND CMAKE_SYSTEM_VERSION MATCHES "^([0-9]+\\.[0-9]+)")
+      set(id_system_version "<ApplicationTypeRevision>${CMAKE_MATCH_1}</ApplicationTypeRevision>")
+    else()
+      set(id_system_version "")
+    endif()
+    if(id_keyword STREQUAL "Android")
+      set(id_config_type "DynamicLibrary")
+    else()
+      set(id_config_type "Application")
+    endif()
+    if(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION)
+      set(id_WindowsTargetPlatformVersion "<WindowsTargetPlatformVersion>${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}</WindowsTargetPlatformVersion>")
+    endif()
+    if(CMAKE_VS_PLATFORM_TOOLSET_VCTARGETS_CUSTOM_DIR)
+      set(id_ToolsetVCTargetsDir "<VCTargetsPath>${CMAKE_VS_PLATFORM_TOOLSET_VCTARGETS_CUSTOM_DIR}</VCTargetsPath>")
+    endif()
+    if(CMAKE_VS_TARGET_FRAMEWORK_VERSION)
+      set(id_TargetFrameworkVersion "<TargetFrameworkVersion>${CMAKE_VS_TARGET_FRAMEWORK_VERSION}</TargetFrameworkVersion>")
+    endif()
+    if(CMAKE_VS_TARGET_FRAMEWORK_IDENTIFIER)
+      set(id_TargetFrameworkIdentifier "<TargetFrameworkIdentifier>${CMAKE_VS_TARGET_FRAMEWORK_IDENTIFIER}</TargetFrameworkIdentifier>")
+    endif()
+    if(CMAKE_VS_TARGET_FRAMEWORK_TARGETS_VERSION)
+      set(id_TargetFrameworkTargetsVersion "<TargetFrameworkTargetsVersion>${CMAKE_VS_TARGET_FRAMEWORK_TARGETS_VERSION}</TargetFrameworkTargetsVersion>")
+    endif()
+    set(id_CustomGlobals "")
+    foreach(pair IN LISTS CMAKE_VS_GLOBALS)
+      if("${pair}" MATCHES "([^=]+)=(.*)$")
+        string(APPEND id_CustomGlobals "<${CMAKE_MATCH_1}>${CMAKE_MATCH_2}</${CMAKE_MATCH_1}>\n    ")
+      endif()
+    endforeach()
+    if(id_keyword STREQUAL "Android")
+      set(id_WindowsSDKDesktopARMSupport "")
+    elseif(id_platform STREQUAL "ARM64")
+      set(id_WindowsSDKDesktopARMSupport "<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>")
+    elseif(id_platform STREQUAL "ARM")
+      set(id_WindowsSDKDesktopARMSupport "<WindowsSDKDesktopARMSupport>true</WindowsSDKDesktopARMSupport>")
+    else()
+      set(id_WindowsSDKDesktopARMSupport "")
+    endif()
+    if(CMAKE_VS_WINCE_VERSION)
+      set(id_entrypoint "mainACRTStartup")
+      if("${vs_version}" VERSION_LESS 9)
+        set(id_subsystem 9)
+      else()
+        set(id_subsystem 8)
+      endif()
+    else()
+      set(id_subsystem 1)
+    endif()
+    set(id_dir ${CMAKE_${lang}_COMPILER_ID_DIR})
+    set(id_src "${src}")
+    set(id_compile "ClCompile")
+    if(id_cl_var)
+      set(id_PostBuildEvent_Command "echo CMAKE_${lang}_COMPILER=$(${id_cl_var})")
+    else()
+      set(id_PostBuildEvent_Command "for %%i in (${id_cl}) do %40echo CMAKE_${lang}_COMPILER=%%~$PATH:i")
+    endif()
+    set(id_Import_props "")
+    set(id_Import_targets "")
+    set(id_ItemDefinitionGroup_entry "")
+    set(id_Link_AdditionalDependencies "")
+    if(lang STREQUAL CUDA)
+      if(NOT CMAKE_VS_PLATFORM_TOOLSET_CUDA)
+        message(FATAL_ERROR "No CUDA toolset found.")
+      endif()
+      set(cuda_tools "CUDA ${CMAKE_VS_PLATFORM_TOOLSET_CUDA}")
+      set(id_compile "CudaCompile")
+      if(CMAKE_VS_PLATFORM_NAME STREQUAL x64)
+        set(cuda_target "<TargetMachinePlatform>64</TargetMachinePlatform>")
+      endif()
+      foreach(arch ${CMAKE_CUDA_ARCHITECTURES})
+        string(REGEX MATCH "[0-9]+" arch_name "${arch}")
+        string(APPEND cuda_codegen "compute_${arch_name},sm_${arch_name};")
+      endforeach()
+      set(id_ItemDefinitionGroup_entry "<CudaCompile>${cuda_target}<AdditionalOptions>%(AdditionalOptions)-v</AdditionalOptions><CodeGeneration>${cuda_codegen}</CodeGeneration></CudaCompile>")
+      set(id_PostBuildEvent_Command [[echo CMAKE_CUDA_COMPILER=$(CudaToolkitBinDir)\nvcc.exe]])
+      if(CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR)
+        # check for legacy cuda custom toolkit folder structure
+        if(EXISTS ${CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR}nvcc)
+            set(id_CudaToolkitCustomDir "<CudaToolkitCustomDir>${CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR}nvcc</CudaToolkitCustomDir>")
+        else()
+            set(id_CudaToolkitCustomDir "<CudaToolkitCustomDir>${CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR}</CudaToolkitCustomDir>")
+        endif()
+        if(EXISTS ${CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR}CUDAVisualStudioIntegration)
+            string(CONCAT id_Import_props "<Import Project=\"${CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR}CUDAVisualStudioIntegration\\extras\\visual_studio_integration\\MSBuildExtensions\\${cuda_tools}.props\" />")
+            string(CONCAT id_Import_targets "<Import Project=\"${CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR}CUDAVisualStudioIntegration\\extras\\visual_studio_integration\\MSBuildExtensions\\${cuda_tools}.targets\" />")
+        else()
+            string(CONCAT id_Import_props "<Import Project=\"${CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR}\\extras\\visual_studio_integration\\MSBuildExtensions\\${cuda_tools}.props\" />")
+            string(CONCAT id_Import_targets "<Import Project=\"${CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR}\\extras\\visual_studio_integration\\MSBuildExtensions\\${cuda_tools}.targets\" />")
+        endif()
+      else()
+        string(CONCAT id_Import_props [[<Import Project="$(VCTargetsPath)\BuildCustomizations\]] "${cuda_tools}" [[.props" />]])
+        string(CONCAT id_Import_targets [[<Import Project="$(VCTargetsPath)\BuildCustomizations\]] "${cuda_tools}" [[.targets" />]])
+      endif()
+      if(CMAKE_CUDA_FLAGS MATCHES "(^| )-cudart +shared( |$)")
+        set(id_Link_AdditionalDependencies "<AdditionalDependencies>cudart.lib</AdditionalDependencies>")
+      else()
+        set(id_Link_AdditionalDependencies "<AdditionalDependencies>cudart_static.lib</AdditionalDependencies>")
+      endif()
+    endif()
+    configure_file(${CMAKE_ROOT}/Modules/CompilerId/VS-${v}.${ext}.in
+      ${id_dir}/CompilerId${lang}.${ext} @ONLY)
+    if(CMAKE_VS_MSBUILD_COMMAND AND NOT lang STREQUAL "Fortran")
+      set(command "${CMAKE_VS_MSBUILD_COMMAND}" "CompilerId${lang}.${ext}"
+        "/p:Configuration=Debug" "/p:Platform=${id_platform}" "/p:VisualStudioVersion=${vs_version}.0"
+        )
+    elseif(CMAKE_VS_DEVENV_COMMAND)
+      set(command "${CMAKE_VS_DEVENV_COMMAND}" "CompilerId${lang}.${ext}" "/build" "Debug")
+    else()
+      set(command "")
+    endif()
+    if(command)
+      execute_process(
+        COMMAND ${command}
+        WORKING_DIRECTORY ${CMAKE_${lang}_COMPILER_ID_DIR}
+        OUTPUT_VARIABLE CMAKE_${lang}_COMPILER_ID_OUTPUT
+        ERROR_VARIABLE CMAKE_${lang}_COMPILER_ID_OUTPUT
+        RESULT_VARIABLE CMAKE_${lang}_COMPILER_ID_RESULT
+        )
+    else()
+      set(CMAKE_${lang}_COMPILER_ID_RESULT 1)
+      set(CMAKE_${lang}_COMPILER_ID_OUTPUT "VS environment not known to support ${lang}")
+    endif()
+    # Match the compiler location line printed out.
+    if("${CMAKE_${lang}_COMPILER_ID_OUTPUT}" MATCHES "CMAKE_${lang}_COMPILER=([^%\r\n]+)[\r\n]")
+      # Strip VS diagnostic output from the end of the line.
+      string(REGEX REPLACE " \\(TaskId:[0-9]*\\)$" "" _comp "${CMAKE_MATCH_1}")
+      if(EXISTS "${_comp}")
+        file(TO_CMAKE_PATH "${_comp}" _comp)
+        set(CMAKE_${lang}_COMPILER_ID_TOOL "${_comp}" PARENT_SCOPE)
+      endif()
+    endif()
+  elseif("${CMAKE_GENERATOR}" MATCHES "Xcode")
+    set(id_lang "${lang}")
+    set(id_type ${CMAKE_${lang}_COMPILER_XCODE_TYPE})
+    set(id_dir ${CMAKE_${lang}_COMPILER_ID_DIR})
+    set(id_src "${src}")
+    if(CMAKE_XCODE_PLATFORM_TOOLSET)
+      set(id_toolset "GCC_VERSION = ${CMAKE_XCODE_PLATFORM_TOOLSET};")
+    else()
+      set(id_toolset "")
+    endif()
+    set(id_lang_version "")
+    if("x${lang}" STREQUAL "xSwift")
+      if(CMAKE_Swift_LANGUAGE_VERSION)
+        set(id_lang_version "SWIFT_VERSION = ${CMAKE_Swift_LANGUAGE_VERSION};")
+      elseif(XCODE_VERSION VERSION_GREATER_EQUAL 10.2)
+        set(id_lang_version "SWIFT_VERSION = 4.0;")
+      elseif(XCODE_VERSION VERSION_GREATER_EQUAL 8.3)
+        set(id_lang_version "SWIFT_VERSION = 3.0;")
+      else()
+        set(id_lang_version "SWIFT_VERSION = 2.3;")
+      endif()
+    elseif("x${lang}" STREQUAL "xC" OR "x${lang}" STREQUAL "xOBJC")
+      if(CMAKE_${lang}_COMPILER_ID_FLAGS MATCHES "(^| )(-std=[^ ]+)( |$)")
+        set(id_lang_version "OTHER_CFLAGS = \"${CMAKE_MATCH_2}\";")
+      endif()
+    elseif("x${lang}" STREQUAL "xCXX" OR "x${lang}" STREQUAL "xOBJCXX")
+      if(CMAKE_${lang}_COMPILER_ID_FLAGS MATCHES "(^| )(-std=[^ ]+)( |$)")
+        set(id_lang_version "OTHER_CPLUSPLUSFLAGS = \"${CMAKE_MATCH_2}\";")
+      endif()
+    endif()
+    if(CMAKE_OSX_DEPLOYMENT_TARGET)
+      set(id_deployment_target
+        "MACOSX_DEPLOYMENT_TARGET = \"${CMAKE_OSX_DEPLOYMENT_TARGET}\";")
+    else()
+      set(id_deployment_target "")
+    endif()
+    set(id_product_type "com.apple.product-type.tool")
+    if(CMAKE_OSX_SYSROOT)
+      set(id_sdkroot "SDKROOT = \"${CMAKE_OSX_SYSROOT}\";")
+      if(CMAKE_OSX_SYSROOT MATCHES "(^|/)[Ii][Pp][Hh][Oo][Nn][Ee]" OR
+        CMAKE_OSX_SYSROOT MATCHES "(^|/)[Aa][Pp][Pp][Ll][Ee][Tt][Vv]")
+        set(id_product_type "com.apple.product-type.bundle.unit-test")
+      elseif(CMAKE_OSX_SYSROOT MATCHES "(^|/)[Ww][Aa][Tt][Cc][Hh]")
+        set(id_product_type "com.apple.product-type.framework")
+      endif()
+    else()
+      set(id_sdkroot "")
+    endif()
+    set(id_clang_cxx_library "")
+    set(stdlib_regex "(^| )(-stdlib=)([^ ]+)( |$)")
+    string(REGEX MATCHALL "${stdlib_regex}" all_stdlib_matches "${CMAKE_CXX_FLAGS}")
+    if(all_stdlib_matches)
+      list(GET all_stdlib_matches "-1" last_stdlib_match)
+      if(last_stdlib_match MATCHES "${stdlib_regex}")
+        set(id_clang_cxx_library "CLANG_CXX_LIBRARY = \"${CMAKE_MATCH_3}\";")
+      endif()
+    endif()
+    if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND CMAKE_OSX_SYSROOT MATCHES "^$|[Mm][Aa][Cc][Oo][Ss]")
+      # When targeting macOS, use only the host architecture.
+      if (_CMAKE_APPLE_ARCHS_DEFAULT)
+        set(id_archs "ARCHS = \"${_CMAKE_APPLE_ARCHS_DEFAULT}\";")
+        set(id_arch_active "ONLY_ACTIVE_ARCH = NO;")
+      else()
+        set(id_archs [[ARCHS = "$(NATIVE_ARCH_ACTUAL)";]])
+        set(id_arch_active "ONLY_ACTIVE_ARCH = YES;")
+      endif()
+    else()
+      set(id_archs "")
+      set(id_arch_active "ONLY_ACTIVE_ARCH = YES;")
+    endif()
+    configure_file(${CMAKE_ROOT}/Modules/CompilerId/Xcode-3.pbxproj.in
+      ${id_dir}/CompilerId${lang}.xcodeproj/project.pbxproj @ONLY)
+    unset(_ENV_MACOSX_DEPLOYMENT_TARGET)
+    if(DEFINED ENV{MACOSX_DEPLOYMENT_TARGET})
+      set(_ENV_MACOSX_DEPLOYMENT_TARGET "$ENV{MACOSX_DEPLOYMENT_TARGET}")
+      set(ENV{MACOSX_DEPLOYMENT_TARGET} "")
+    endif()
+    execute_process(COMMAND xcodebuild
+      WORKING_DIRECTORY ${CMAKE_${lang}_COMPILER_ID_DIR}
+      OUTPUT_VARIABLE CMAKE_${lang}_COMPILER_ID_OUTPUT
+      ERROR_VARIABLE CMAKE_${lang}_COMPILER_ID_OUTPUT
+      RESULT_VARIABLE CMAKE_${lang}_COMPILER_ID_RESULT
+      )
+    if(DEFINED _ENV_MACOSX_DEPLOYMENT_TARGET)
+      set(ENV{MACOSX_DEPLOYMENT_TARGET} "${_ENV_MACOSX_DEPLOYMENT_TARGET}")
+    endif()
+
+    if(DEFINED CMAKE_${lang}_COMPILER_ID_TOOL_MATCH_REGEX)
+      if("${CMAKE_${lang}_COMPILER_ID_OUTPUT}" MATCHES "${CMAKE_${lang}_COMPILER_ID_TOOL_MATCH_REGEX}")
+        set(_comp "${CMAKE_MATCH_${CMAKE_${lang}_COMPILER_ID_TOOL_MATCH_INDEX}}")
+        if(EXISTS "${_comp}")
+          set(CMAKE_${lang}_COMPILER_ID_TOOL "${_comp}" PARENT_SCOPE)
+        endif()
+      endif()
+    endif()
+    if("${CMAKE_${lang}_COMPILER_ID_OUTPUT}" MATCHES "ARCHS=([^%\r\n]+)[\r\n]")
+      set(CMAKE_${lang}_XCODE_ARCHS "${CMAKE_MATCH_1}")
+      separate_arguments(CMAKE_${lang}_XCODE_ARCHS)
+      set(CMAKE_${lang}_XCODE_ARCHS "${CMAKE_${lang}_XCODE_ARCHS}" PARENT_SCOPE)
+    endif()
+  elseif("${CMAKE_GENERATOR}" MATCHES "Green Hills MULTI")
+    set(id_dir ${CMAKE_${lang}_COMPILER_ID_DIR})
+    set(id_src "${src}")
+    if (GHS_PRIMARY_TARGET)
+      set(ghs_primary_target "${GHS_PRIMARY_TARGET}")
+    else()
+      set(ghs_primary_target "${CMAKE_GENERATOR_PLATFORM}_${GHS_TARGET_PLATFORM}.tgt")
+    endif()
+    if ("${GHS_TARGET_PLATFORM}" MATCHES "integrity")
+        set(bsp_name "macro GHS_BSP=${GHS_BSP_NAME}")
+        set(os_dir "macro GHS_OS=${GHS_OS_DIR}")
+    endif()
+    set(command "${CMAKE_MAKE_PROGRAM}" "-commands" "-top" "GHS_default.gpj")
+    configure_file(${CMAKE_ROOT}/Modules/CompilerId/GHS_default.gpj.in
+      ${id_dir}/GHS_default.gpj @ONLY)
+    configure_file(${CMAKE_ROOT}/Modules/CompilerId/GHS_lib.gpj.in
+      ${id_dir}/GHS_lib.gpj @ONLY)
+    execute_process(COMMAND ${command}
+      WORKING_DIRECTORY ${id_dir}
+      OUTPUT_VARIABLE CMAKE_${lang}_COMPILER_ID_OUTPUT
+      ERROR_VARIABLE CMAKE_${lang}_COMPILER_ID_OUTPUT
+      RESULT_VARIABLE CMAKE_${lang}_COMPILER_ID_RESULT
+      )
+    # Match the compiler location line printed out.
+    set(ghs_toolpath "${CMAKE_MAKE_PROGRAM}")
+    if(CMAKE_HOST_UNIX)
+      string(REPLACE "/gbuild" "/" ghs_toolpath ${ghs_toolpath})
+    else()
+      string(REPLACE "/gbuild.exe" "/" ghs_toolpath ${ghs_toolpath})
+      string(REPLACE / "\\\\" ghs_toolpath ${ghs_toolpath})
+    endif()
+    if("${CMAKE_${lang}_COMPILER_ID_OUTPUT}" MATCHES "(${ghs_toolpath}[^ ]*)")
+      if(CMAKE_HOST_UNIX)
+        set(_comp "${CMAKE_MATCH_1}")
+      else()
+        set(_comp "${CMAKE_MATCH_1}.exe")
+      endif()
+      if(EXISTS "${_comp}")
+        file(TO_CMAKE_PATH "${_comp}" _comp)
+        set(CMAKE_${lang}_COMPILER_ID_TOOL "${_comp}" PARENT_SCOPE)
+      endif()
+    endif()
+  else()
+    execute_process(
+      COMMAND "${CMAKE_${lang}_COMPILER}"
+              ${CMAKE_${lang}_COMPILER_ID_ARG1}
+              ${userflags}
+              ${testflags}
+              ${CMAKE_${lang}_COMPILER_ID_FLAGS_ALWAYS}
+              "${src}"
+      WORKING_DIRECTORY ${CMAKE_${lang}_COMPILER_ID_DIR}
+      OUTPUT_VARIABLE CMAKE_${lang}_COMPILER_ID_OUTPUT
+      ERROR_VARIABLE CMAKE_${lang}_COMPILER_ID_OUTPUT
+      RESULT_VARIABLE CMAKE_${lang}_COMPILER_ID_RESULT
+      )
+    if("${CMAKE_${lang}_COMPILER_ID_OUTPUT}" MATCHES "exec: [^\n]*\\((/[^,\n]*/cpp),CMakeFortranCompilerId.F")
+      set(_cpp "${CMAKE_MATCH_1}")
+      if(EXISTS "${_cpp}")
+        set(CMAKE_${lang}_COMPILER_ID_CPP "${_cpp}" PARENT_SCOPE)
+      endif()
+    endif()
+  endif()
+
+  # Check the result of compilation.
+  if(CMAKE_${lang}_COMPILER_ID_RESULT
+     # Intel Fortran warns and ignores preprocessor lines without /fpp
+     OR CMAKE_${lang}_COMPILER_ID_OUTPUT MATCHES "warning #5117: Bad # preprocessor line"
+     )
+    # Compilation failed.
+    set(MSG
+      "Compiling the ${lang} compiler identification source file \"${src}\" failed.
+${COMPILER_DESCRIPTION}
+The output was:
+${CMAKE_${lang}_COMPILER_ID_RESULT}
+${CMAKE_${lang}_COMPILER_ID_OUTPUT}
+
+")
+    # Log the output unless we recognize it as a known-bad case.
+    if(NOT CMAKE_${lang}_COMPILER_ID_OUTPUT MATCHES "warning #5117: Bad # preprocessor line")
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log "${MSG}")
+    endif()
+
+    # Some languages may know the correct/desired set of flags and want to fail right away if they don't work.
+    # This is currently only used by CUDA.
+    if(__compiler_id_require_success)
+      message(FATAL_ERROR "${MSG}")
+    endif()
+
+    # No output files should be inspected.
+    set(COMPILER_${lang}_PRODUCED_FILES)
+    set(COMPILER_${lang}_PRODUCED_OUTPUT)
+  else()
+    # Compilation succeeded.
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+      "Compiling the ${lang} compiler identification source file \"${src}\" succeeded.
+${COMPILER_DESCRIPTION}
+The output was:
+${CMAKE_${lang}_COMPILER_ID_RESULT}
+${CMAKE_${lang}_COMPILER_ID_OUTPUT}
+
+")
+
+    # Find the executable produced by the compiler, try all files in the
+    # binary dir.
+    string(REGEX REPLACE "([][])" "[\\1]" _glob_id_dir "${CMAKE_${lang}_COMPILER_ID_DIR}")
+    file(GLOB files
+      RELATIVE ${CMAKE_${lang}_COMPILER_ID_DIR}
+
+      # normal case
+      ${_glob_id_dir}/*
+
+      # com.apple.package-type.bundle.unit-test
+      ${_glob_id_dir}/*.xctest/*
+
+      # com.apple.product-type.framework
+      ${_glob_id_dir}/*.framework/*
+      )
+    list(REMOVE_ITEM files "${src}")
+    set(COMPILER_${lang}_PRODUCED_FILES "")
+    foreach(file ${files})
+      if(NOT IS_DIRECTORY ${CMAKE_${lang}_COMPILER_ID_DIR}/${file})
+        list(APPEND COMPILER_${lang}_PRODUCED_FILES ${file})
+        file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+          "Compilation of the ${lang} compiler identification source \""
+          "${src}\" produced \"${file}\"\n\n")
+      endif()
+    endforeach()
+
+    if(NOT COMPILER_${lang}_PRODUCED_FILES)
+      # No executable was found.
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+        "Compilation of the ${lang} compiler identification source \""
+        "${src}\" did not produce an executable in \""
+        "${CMAKE_${lang}_COMPILER_ID_DIR}\".\n\n")
+    endif()
+
+    set(COMPILER_${lang}_PRODUCED_OUTPUT "${CMAKE_${lang}_COMPILER_ID_OUTPUT}")
+  endif()
+
+  # Return the files produced by the compilation.
+  set(COMPILER_${lang}_PRODUCED_FILES "${COMPILER_${lang}_PRODUCED_FILES}" PARENT_SCOPE)
+  set(COMPILER_${lang}_PRODUCED_OUTPUT "${COMPILER_${lang}_PRODUCED_OUTPUT}" PARENT_SCOPE)
+
+endfunction()
+
+#-----------------------------------------------------------------------------
+# Function to extract the compiler id from compiler output.
+function(CMAKE_DETERMINE_COMPILER_ID_MATCH_VENDOR lang output)
+  foreach(vendor ${CMAKE_${lang}_COMPILER_ID_MATCH_VENDORS})
+    if(output MATCHES "${CMAKE_${lang}_COMPILER_ID_MATCH_VENDOR_REGEX_${vendor}}")
+      set(CMAKE_${lang}_COMPILER_ID "${vendor}")
+    endif()
+  endforeach()
+  set(CMAKE_${lang}_COMPILER_ID "${CMAKE_${lang}_COMPILER_ID}" PARENT_SCOPE)
+endfunction()
+
+#-----------------------------------------------------------------------------
+# Function to extract the compiler id from an executable.
+function(CMAKE_DETERMINE_COMPILER_ID_CHECK lang file)
+  # Look for a compiler id if not yet known.
+  if(NOT CMAKE_${lang}_COMPILER_ID)
+    # Read the compiler identification string from the executable file.
+    set(COMPILER_ID)
+    set(COMPILER_VERSION)
+    set(COMPILER_VERSION_MAJOR 0)
+    set(COMPILER_VERSION_MINOR 0)
+    set(COMPILER_VERSION_PATCH 0)
+    set(COMPILER_VERSION_TWEAK 0)
+    set(COMPILER_VERSION_INTERNAL "")
+    set(HAVE_COMPILER_VERSION_MAJOR 0)
+    set(HAVE_COMPILER_VERSION_MINOR 0)
+    set(HAVE_COMPILER_VERSION_PATCH 0)
+    set(HAVE_COMPILER_VERSION_TWEAK 0)
+    set(COMPILER_WRAPPER)
+    set(DIGIT_VALUE_1 1)
+    set(DIGIT_VALUE_2 10)
+    set(DIGIT_VALUE_3 100)
+    set(DIGIT_VALUE_4 1000)
+    set(DIGIT_VALUE_5 10000)
+    set(DIGIT_VALUE_6 100000)
+    set(DIGIT_VALUE_7 1000000)
+    set(DIGIT_VALUE_8 10000000)
+    set(PLATFORM_ID)
+    set(ARCHITECTURE_ID)
+    set(SIMULATE_ID)
+    set(SIMULATE_VERSION)
+    foreach(encoding "" "ENCODING;UTF-16LE" "ENCODING;UTF-16BE")
+      file(STRINGS "${file}" CMAKE_${lang}_COMPILER_ID_STRINGS
+        LIMIT_COUNT 38 ${encoding}
+        REGEX ".?I.?N.?F.?O.?:.?[A-Za-z0-9_]+\\[[^]]*\\]")
+      if(NOT CMAKE_${lang}_COMPILER_ID_STRINGS STREQUAL "")
+        break()
+      endif()
+    endforeach()
+
+    # With the IAR Compiler, some strings are found twice, first time as incomplete
+    # list like "?<Constant "INFO:compiler[IAR]">".  Remove the incomplete copies.
+    list(FILTER CMAKE_${lang}_COMPILER_ID_STRINGS EXCLUDE REGEX "\\?<Constant \\\"")
+
+    # The IAR-AVR compiler uses a binary format that places a '6'
+    # character (0x34) before each character in the string.  Strip
+    # out these characters without removing any legitimate characters.
+    if(CMAKE_${lang}_COMPILER_ID_STRINGS MATCHES "(.)I.N.F.O.:.")
+      string(REGEX REPLACE "${CMAKE_MATCH_1}([^;])" "\\1"
+        CMAKE_${lang}_COMPILER_ID_STRINGS "${CMAKE_${lang}_COMPILER_ID_STRINGS}")
+    endif()
+
+    # Remove arbitrary text that may appear before or after each INFO string.
+    string(REGEX MATCHALL "INFO:[A-Za-z0-9_]+\\[([^]\"]*)\\]"
+      CMAKE_${lang}_COMPILER_ID_STRINGS "${CMAKE_${lang}_COMPILER_ID_STRINGS}")
+
+    # In C# binaries, some strings are found more than once.
+    list(REMOVE_DUPLICATES CMAKE_${lang}_COMPILER_ID_STRINGS)
+
+    set(COMPILER_ID_TWICE)
+    foreach(info ${CMAKE_${lang}_COMPILER_ID_STRINGS})
+      if("${info}" MATCHES "INFO:compiler\\[([^]\"]*)\\]")
+        if(COMPILER_ID)
+          set(COMPILER_ID_TWICE 1)
+        endif()
+        set(COMPILER_ID "${CMAKE_MATCH_1}")
+      endif()
+      if("${info}" MATCHES "INFO:platform\\[([^]\"]*)\\]")
+        set(PLATFORM_ID "${CMAKE_MATCH_1}")
+      endif()
+      if("${info}" MATCHES "INFO:arch\\[([^]\"]*)\\]")
+        set(ARCHITECTURE_ID "${CMAKE_MATCH_1}")
+      endif()
+      if("${info}" MATCHES "INFO:compiler_version\\[([^]\"]*)\\]")
+        string(REGEX REPLACE "^0+([0-9]+)" "\\1" COMPILER_VERSION "${CMAKE_MATCH_1}")
+        string(REGEX REPLACE "\\.0+([0-9])" ".\\1" COMPILER_VERSION "${COMPILER_VERSION}")
+      endif()
+      if("${info}" MATCHES "INFO:compiler_version_internal\\[([^]\"]*)\\]")
+        set(COMPILER_VERSION_INTERNAL "${CMAKE_MATCH_1}")
+        string(REGEX REPLACE "^0+([0-9]+)" "\\1" COMPILER_VERSION_INTERNAL "${COMPILER_VERSION_INTERNAL}")
+        string(REGEX REPLACE "\\.0+([0-9]+)" ".\\1" COMPILER_VERSION_INTERNAL "${COMPILER_VERSION_INTERNAL}")
+        string(STRIP "${COMPILER_VERSION_INTERNAL}" COMPILER_VERSION_INTERNAL)
+      endif()
+      foreach(comp MAJOR MINOR PATCH TWEAK)
+        foreach(digit 1 2 3 4 5 6 7 8 9)
+          if("${info}" MATCHES "INFO:compiler_version_${comp}_digit_${digit}\\[([0-9])\\]")
+            set(value ${CMAKE_MATCH_1})
+            math(EXPR COMPILER_VERSION_${comp} "${COMPILER_VERSION_${comp}} + ${value} * ${DIGIT_VALUE_${digit}}")
+            set(HAVE_COMPILER_VERSION_${comp} 1)
+          endif()
+        endforeach()
+      endforeach()
+      if("${info}" MATCHES "INFO:compiler_wrapper\\[([^]\"]*)\\]")
+        set(COMPILER_WRAPPER "${CMAKE_MATCH_1}")
+      endif()
+      if("${info}" MATCHES "INFO:simulate\\[([^]\"]*)\\]")
+        set(SIMULATE_ID "${CMAKE_MATCH_1}")
+      endif()
+      if("${info}" MATCHES "INFO:simulate_version\\[([^]\"]*)\\]")
+        string(REGEX REPLACE "^0+([0-9])" "\\1" SIMULATE_VERSION "${CMAKE_MATCH_1}")
+        string(REGEX REPLACE "\\.0+([0-9])" ".\\1" SIMULATE_VERSION "${SIMULATE_VERSION}")
+      endif()
+      if("${info}" MATCHES "INFO:qnxnto\\[\\]")
+        set(COMPILER_QNXNTO 1)
+      endif()
+      if("${info}" MATCHES "INFO:standard_default\\[([^]\"]*)\\]")
+        set(CMAKE_${lang}_STANDARD_COMPUTED_DEFAULT "${CMAKE_MATCH_1}")
+      endif()
+      if("${info}" MATCHES "INFO:extensions_default\\[([^]\"]*)\\]")
+        set(CMAKE_${lang}_EXTENSIONS_COMPUTED_DEFAULT "${CMAKE_MATCH_1}")
+      endif()
+    endforeach()
+
+    # Construct compiler version from components if needed.
+    if(NOT DEFINED COMPILER_VERSION AND HAVE_COMPILER_VERSION_MAJOR)
+      set(COMPILER_VERSION "${COMPILER_VERSION_MAJOR}")
+      if(HAVE_COMPILER_VERSION_MINOR)
+        string(APPEND COMPILER_VERSION ".${COMPILER_VERSION_MINOR}")
+        if(HAVE_COMPILER_VERSION_PATCH)
+          string(APPEND COMPILER_VERSION ".${COMPILER_VERSION_PATCH}")
+          if(HAVE_COMPILER_VERSION_TWEAK)
+            string(APPEND COMPILER_VERSION ".${COMPILER_VERSION_TWEAK}")
+          endif()
+        endif()
+      endif()
+    endif()
+
+    # Detect the exact architecture from the PE header.
+    if(WIN32)
+      # The offset to the PE signature is stored at 0x3c.
+      file(READ ${file} peoffsethex LIMIT 1 OFFSET 60 HEX)
+      if(NOT peoffsethex STREQUAL "")
+        string(SUBSTRING "${peoffsethex}" 0 1 peoffsethex1)
+        string(SUBSTRING "${peoffsethex}" 1 1 peoffsethex2)
+        set(peoffsetexpression "${peoffsethex1} * 16 + ${peoffsethex2}")
+        string(REPLACE "a" "10" peoffsetexpression "${peoffsetexpression}")
+        string(REPLACE "b" "11" peoffsetexpression "${peoffsetexpression}")
+        string(REPLACE "c" "12" peoffsetexpression "${peoffsetexpression}")
+        string(REPLACE "d" "13" peoffsetexpression "${peoffsetexpression}")
+        string(REPLACE "e" "14" peoffsetexpression "${peoffsetexpression}")
+        string(REPLACE "f" "15" peoffsetexpression "${peoffsetexpression}")
+        math(EXPR peoffset "${peoffsetexpression}")
+
+        file(READ ${file} peheader LIMIT 6 OFFSET ${peoffset} HEX)
+        if(peheader STREQUAL "50450000a201")
+          set(ARCHITECTURE_ID "SH3")
+        elseif(peheader STREQUAL "50450000a301")
+          set(ARCHITECTURE_ID "SH3DSP")
+        elseif(peheader STREQUAL "50450000a601")
+          set(ARCHITECTURE_ID "SH4")
+        elseif(peheader STREQUAL "50450000a801")
+          set(ARCHITECTURE_ID "SH5")
+        endif()
+      endif()
+    endif()
+
+    # Check if a valid compiler and platform were found.
+    if(COMPILER_ID AND NOT COMPILER_ID_TWICE)
+      set(CMAKE_${lang}_COMPILER_ID "${COMPILER_ID}")
+      set(CMAKE_${lang}_PLATFORM_ID "${PLATFORM_ID}")
+      set(CMAKE_${lang}_COMPILER_ARCHITECTURE_ID "${ARCHITECTURE_ID}")
+      set(MSVC_${lang}_ARCHITECTURE_ID "${ARCHITECTURE_ID}")
+      set(CMAKE_${lang}_COMPILER_VERSION "${COMPILER_VERSION}")
+      set(CMAKE_${lang}_COMPILER_VERSION_INTERNAL "${COMPILER_VERSION_INTERNAL}")
+      set(CMAKE_${lang}_SIMULATE_ID "${SIMULATE_ID}")
+      set(CMAKE_${lang}_SIMULATE_VERSION "${SIMULATE_VERSION}")
+    endif()
+
+    # Check the compiler identification string.
+    if(CMAKE_${lang}_COMPILER_ID)
+      # The compiler identification was found.
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+        "The ${lang} compiler identification is ${CMAKE_${lang}_COMPILER_ID}, found in \""
+        "${file}\"\n\n")
+    else()
+      # The compiler identification could not be found.
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+        "The ${lang} compiler identification could not be found in \""
+        "${file}\"\n\n")
+    endif()
+  endif()
+
+  # try to figure out the executable format: ELF, COFF, Mach-O
+  if(NOT CMAKE_EXECUTABLE_FORMAT)
+    file(READ ${file} CMAKE_EXECUTABLE_MAGIC LIMIT 4 HEX)
+
+    # ELF files start with 0x7f"ELF"
+    if("${CMAKE_EXECUTABLE_MAGIC}" STREQUAL "7f454c46")
+      set(CMAKE_EXECUTABLE_FORMAT "ELF" CACHE INTERNAL "Executable file format")
+    endif()
+
+#    # COFF (.exe) files start with "MZ"
+#    if("${CMAKE_EXECUTABLE_MAGIC}" MATCHES "4d5a....")
+#      set(CMAKE_EXECUTABLE_FORMAT "COFF" CACHE INTERNAL "Executable file format")
+#    endif()
+#
+    # Mach-O files start with MH_MAGIC or MH_CIGAM
+    if("${CMAKE_EXECUTABLE_MAGIC}" MATCHES "feedface|cefaedfe|feedfacf|cffaedfe")
+      set(CMAKE_EXECUTABLE_FORMAT "MACHO" CACHE INTERNAL "Executable file format")
+    endif()
+
+    # XCOFF files start with 0x01 followed by 0xDF (32-bit) or 0xF7 (64-bit).
+    if("${CMAKE_EXECUTABLE_MAGIC}" MATCHES "^01(df|f7)")
+      set(CMAKE_EXECUTABLE_FORMAT "XCOFF" CACHE INTERNAL "Executable file format")
+    endif()
+
+  endif()
+  # Return the information extracted.
+  set(CMAKE_${lang}_COMPILER_ID "${CMAKE_${lang}_COMPILER_ID}" PARENT_SCOPE)
+  set(CMAKE_${lang}_PLATFORM_ID "${CMAKE_${lang}_PLATFORM_ID}" PARENT_SCOPE)
+  set(CMAKE_${lang}_COMPILER_ARCHITECTURE_ID "${CMAKE_${lang}_COMPILER_ARCHITECTURE_ID}" PARENT_SCOPE)
+  set(MSVC_${lang}_ARCHITECTURE_ID "${MSVC_${lang}_ARCHITECTURE_ID}"
+    PARENT_SCOPE)
+  set(CMAKE_${lang}_COMPILER_VERSION "${CMAKE_${lang}_COMPILER_VERSION}" PARENT_SCOPE)
+  set(CMAKE_${lang}_COMPILER_VERSION_INTERNAL "${CMAKE_${lang}_COMPILER_VERSION_INTERNAL}" PARENT_SCOPE)
+  set(CMAKE_${lang}_COMPILER_WRAPPER "${COMPILER_WRAPPER}" PARENT_SCOPE)
+  set(CMAKE_${lang}_SIMULATE_ID "${CMAKE_${lang}_SIMULATE_ID}" PARENT_SCOPE)
+  set(CMAKE_${lang}_SIMULATE_VERSION "${CMAKE_${lang}_SIMULATE_VERSION}" PARENT_SCOPE)
+  set(COMPILER_QNXNTO "${COMPILER_QNXNTO}" PARENT_SCOPE)
+  set(CMAKE_${lang}_STANDARD_COMPUTED_DEFAULT "${CMAKE_${lang}_STANDARD_COMPUTED_DEFAULT}" PARENT_SCOPE)
+  set(CMAKE_${lang}_EXTENSIONS_COMPUTED_DEFAULT "${CMAKE_${lang}_EXTENSIONS_COMPUTED_DEFAULT}" PARENT_SCOPE)
+endfunction()
+
+#-----------------------------------------------------------------------------
+# Function to query the compiler vendor.
+# This uses a table with entries of the form
+#   list(APPEND CMAKE_${lang}_COMPILER_ID_VENDORS ${vendor})
+#   set(CMAKE_${lang}_COMPILER_ID_VENDOR_FLAGS_${vendor} -some-vendor-flag)
+#   set(CMAKE_${lang}_COMPILER_ID_VENDOR_REGEX_${vendor} "Some Vendor Output")
+# We try running the compiler with the flag for each vendor and
+# matching its regular expression in the output.
+function(CMAKE_DETERMINE_COMPILER_ID_VENDOR lang userflags)
+
+  if(NOT CMAKE_${lang}_COMPILER_ID_DIR)
+    # We get here when this function is called not from within CMAKE_DETERMINE_COMPILER_ID()
+    # This is done e.g. for detecting the compiler ID for assemblers.
+    # Compute the directory in which to run the test and Create a clean working directory.
+    set(CMAKE_${lang}_COMPILER_ID_DIR ${CMAKE_PLATFORM_INFO_DIR}/CompilerId${lang})
+    file(REMOVE_RECURSE ${CMAKE_${lang}_COMPILER_ID_DIR})
+    file(MAKE_DIRECTORY ${CMAKE_${lang}_COMPILER_ID_DIR})
+  endif()
+
+  # Save the current LC_ALL, LC_MESSAGES, and LANG environment variables
+  # and set them to "C" so we get the expected output to match.
+  set(_orig_lc_all      $ENV{LC_ALL})
+  set(_orig_lc_messages $ENV{LC_MESSAGES})
+  set(_orig_lang        $ENV{LANG})
+  set(ENV{LC_ALL}      C)
+  set(ENV{LC_MESSAGES} C)
+  set(ENV{LANG}        C)
+
+  foreach(vendor ${CMAKE_${lang}_COMPILER_ID_VENDORS})
+    set(flags ${CMAKE_${lang}_COMPILER_ID_VENDOR_FLAGS_${vendor}})
+    set(regex ${CMAKE_${lang}_COMPILER_ID_VENDOR_REGEX_${vendor}})
+    execute_process(
+      COMMAND "${CMAKE_${lang}_COMPILER}"
+      ${CMAKE_${lang}_COMPILER_ID_ARG1}
+      ${userflags}
+      ${flags}
+      WORKING_DIRECTORY ${CMAKE_${lang}_COMPILER_ID_DIR}
+      OUTPUT_VARIABLE output ERROR_VARIABLE output
+      RESULT_VARIABLE result
+      TIMEOUT 10
+      )
+
+    if("${output}" MATCHES "${regex}")
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+        "Checking whether the ${lang} compiler is ${vendor} using \"${flags}\" "
+        "matched \"${regex}\":\n${output}")
+      set(CMAKE_${lang}_COMPILER_ID "${vendor}" PARENT_SCOPE)
+      set(CMAKE_${lang}_COMPILER_ID_OUTPUT "${output}" PARENT_SCOPE)
+      set(CMAKE_${lang}_COMPILER_ID_VENDOR_MATCH "${CMAKE_MATCH_1}" PARENT_SCOPE)
+      break()
+    else()
+      if("${result}" MATCHES  "timeout")
+        file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+          "Checking whether the ${lang} compiler is ${vendor} using \"${flags}\" "
+          "terminated after 10 s due to timeout.")
+      else()
+        file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+          "Checking whether the ${lang} compiler is ${vendor} using \"${flags}\" "
+          "did not match \"${regex}\":\n${output}")
+       endif()
+    endif()
+  endforeach()
+
+  # Restore original LC_ALL, LC_MESSAGES, and LANG
+  set(ENV{LC_ALL}      ${_orig_lc_all})
+  set(ENV{LC_MESSAGES} ${_orig_lc_messages})
+  set(ENV{LANG}        ${_orig_lang})
+endfunction()
+
+function(CMAKE_DETERMINE_MSVC_SHOWINCLUDES_PREFIX lang userflags)
+  # Run this MSVC-compatible compiler to detect what the /showIncludes
+  # option displays.  We can use a C source even with the C++ compiler
+  # because MSVC-compatible compilers handle both and show the same output.
+  set(showdir ${CMAKE_BINARY_DIR}/CMakeFiles/ShowIncludes)
+  file(WRITE ${showdir}/foo.h "\n")
+  file(WRITE ${showdir}/main.c "#include \"foo.h\" \nint main(){}\n")
+  execute_process(
+    COMMAND "${CMAKE_${lang}_COMPILER}"
+            ${CMAKE_${lang}_COMPILER_ID_ARG1}
+            ${userflags}
+            /nologo /showIncludes /c main.c
+    WORKING_DIRECTORY ${showdir}
+    OUTPUT_VARIABLE out
+    ERROR_VARIABLE err
+    RESULT_VARIABLE res
+    ENCODING AUTO # cl prints in current code page
+    )
+  if(res EQUAL 0 AND "${out}" MATCHES "(^|\n)([^:\n]*:[^:\n]*:[ \t]*)")
+    set(CMAKE_${lang}_CL_SHOWINCLUDES_PREFIX "${CMAKE_MATCH_2}" PARENT_SCOPE)
+  else()
+    set(CMAKE_${lang}_CL_SHOWINCLUDES_PREFIX "" PARENT_SCOPE)
+  endif()
+endfunction()
diff --git a/share/cmake-3.22/Modules/CMakeDetermineFortranCompiler.cmake b/share/cmake-3.22/Modules/CMakeDetermineFortranCompiler.cmake
new file mode 100644
index 0000000..6a8984b
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeDetermineFortranCompiler.cmake
@@ -0,0 +1,302 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# determine the compiler to use for Fortran programs
+# NOTE, a generator may set CMAKE_Fortran_COMPILER before
+# loading this file to force a compiler.
+# use environment variable FC first if defined by user, next use
+# the cmake variable CMAKE_GENERATOR_FC which can be defined by a generator
+# as a default compiler
+
+include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake)
+include(Platform/${CMAKE_SYSTEM_NAME}-Determine-Fortran OPTIONAL)
+include(Platform/${CMAKE_SYSTEM_NAME}-Fortran OPTIONAL)
+if(NOT CMAKE_Fortran_COMPILER_NAMES)
+  set(CMAKE_Fortran_COMPILER_NAMES f95)
+endif()
+
+if(${CMAKE_GENERATOR} MATCHES "Visual Studio")
+elseif("${CMAKE_GENERATOR}" MATCHES "Xcode")
+  set(CMAKE_Fortran_COMPILER_XCODE_TYPE sourcecode.fortran.f90)
+  _cmake_find_compiler_path(Fortran)
+else()
+  if(NOT CMAKE_Fortran_COMPILER)
+    # prefer the environment variable CC
+    if(NOT $ENV{FC} STREQUAL "")
+      get_filename_component(CMAKE_Fortran_COMPILER_INIT $ENV{FC} PROGRAM PROGRAM_ARGS CMAKE_Fortran_FLAGS_ENV_INIT)
+      if(CMAKE_Fortran_FLAGS_ENV_INIT)
+        set(CMAKE_Fortran_COMPILER_ARG1 "${CMAKE_Fortran_FLAGS_ENV_INIT}" CACHE STRING "Arguments to Fortran compiler")
+      endif()
+      if(EXISTS ${CMAKE_Fortran_COMPILER_INIT})
+      else()
+        message(FATAL_ERROR "Could not find compiler set in environment variable FC:\n$ENV{FC}.")
+      endif()
+    endif()
+
+    # next try prefer the compiler specified by the generator
+    if(CMAKE_GENERATOR_FC)
+      if(NOT CMAKE_Fortran_COMPILER_INIT)
+        set(CMAKE_Fortran_COMPILER_INIT ${CMAKE_GENERATOR_FC})
+      endif()
+    endif()
+
+    # finally list compilers to try
+    if(NOT CMAKE_Fortran_COMPILER_INIT)
+      # Known compilers:
+      #  f77/f90/f95: generic compiler names
+      #  ftn: Cray fortran compiler wrapper
+      #  g77: GNU Fortran 77 compiler
+      #  gfortran: putative GNU Fortran 95+ compiler (in progress)
+      #  fort77: native F77 compiler under HP-UX (and some older Crays)
+      #  frt: Fujitsu F77 compiler
+      #  pathf90/pathf95/pathf2003: PathScale Fortran compiler
+      #  pgf77/pgf90/pgf95/pgfortran: Portland Group F77/F90/F95 compilers
+      #  flang: Flang Fortran compiler
+      #  xlf/xlf90/xlf95: IBM (AIX) F77/F90/F95 compilers
+      #  lf95: Lahey-Fujitsu F95 compiler
+      #  fl32: Microsoft Fortran 77 "PowerStation" compiler
+      #  af77: Apogee F77 compiler for Intergraph hardware running CLIX
+      #  epcf90: "Edinburgh Portable Compiler" F90
+      #  fort: Compaq (now HP) Fortran 90/95 compiler for Tru64 and Linux/Alpha
+      #  ifx: Intel Fortran LLVM-based compiler
+      #  ifort: Intel Classic Fortran compiler
+      #  ifc: Intel Fortran 95 compiler for Linux/x86
+      #  efc: Intel Fortran 95 compiler for IA64
+      #  nagfor: NAG Fortran compiler
+      #
+      #  The order is 95 or newer compilers first, then 90,
+      #  then 77 or older compilers, gnu is always last in the group,
+      #  so if you paid for a compiler it is picked by default.
+      if(CMAKE_HOST_WIN32)
+        set(CMAKE_Fortran_COMPILER_LIST
+          ifort ifx pgf95 pgfortran lf95 fort
+          flang gfortran gfortran-4 g95 f90 pgf90
+          pgf77 g77 f77 nag
+          )
+      else()
+        set(CMAKE_Fortran_COMPILER_LIST
+          ftn
+          ifort ifc ifx efc pgf95 pgfortran lf95 xlf95 fort
+          flang gfortran gfortran-4 g95 f90 pgf90
+          frt pgf77 xlf g77 f77 nag
+          )
+      endif()
+
+      # Vendor-specific compiler names.
+      set(_Fortran_COMPILER_NAMES_GNU       gfortran gfortran-4 g95 g77)
+      set(_Fortran_COMPILER_NAMES_Intel     ifort ifc efc ifx)
+      set(_Fortran_COMPILER_NAMES_Absoft    af95 af90 af77)
+      set(_Fortran_COMPILER_NAMES_PGI       pgf95 pgfortran pgf90 pgf77)
+      set(_Fortran_COMPILER_NAMES_Flang     flang)
+      set(_Fortran_COMPILER_NAMES_PathScale pathf2003 pathf95 pathf90)
+      set(_Fortran_COMPILER_NAMES_XL        xlf)
+      set(_Fortran_COMPILER_NAMES_VisualAge xlf95 xlf90 xlf)
+      set(_Fortran_COMPILER_NAMES_NAG       nagfor)
+    endif()
+
+    _cmake_find_compiler(Fortran)
+
+  else()
+    _cmake_find_compiler_path(Fortran)
+  endif()
+  mark_as_advanced(CMAKE_Fortran_COMPILER)
+
+  # Each entry in this list is a set of extra flags to try
+  # adding to the compile line to see if it helps produce
+  # a valid identification executable.
+  set(CMAKE_Fortran_COMPILER_ID_TEST_FLAGS_FIRST
+    # Get verbose output to help distinguish compilers.
+    "-v"
+    )
+  set(CMAKE_Fortran_COMPILER_ID_TEST_FLAGS
+    # Try compiling to an object file only.
+    "-c"
+
+    # Intel on windows does not preprocess by default.
+    "-fpp"
+    )
+endif()
+
+# Build a small source file to identify the compiler.
+if(NOT CMAKE_Fortran_COMPILER_ID_RUN)
+  set(CMAKE_Fortran_COMPILER_ID_RUN 1)
+
+  # Table of per-vendor compiler output regular expressions.
+  list(APPEND CMAKE_Fortran_COMPILER_ID_MATCH_VENDORS CCur)
+  set(CMAKE_Fortran_COMPILER_ID_MATCH_VENDOR_REGEX_CCur "Concurrent Fortran [0-9]+ Compiler")
+
+  # Table of per-vendor compiler id flags with expected output.
+  list(APPEND CMAKE_Fortran_COMPILER_ID_VENDORS Compaq)
+  set(CMAKE_Fortran_COMPILER_ID_VENDOR_FLAGS_Compaq "-what")
+  set(CMAKE_Fortran_COMPILER_ID_VENDOR_REGEX_Compaq "Compaq Visual Fortran")
+  list(APPEND CMAKE_Fortran_COMPILER_ID_VENDORS NAG) # Numerical Algorithms Group
+  set(CMAKE_Fortran_COMPILER_ID_VENDOR_FLAGS_NAG "-V")
+  set(CMAKE_Fortran_COMPILER_ID_VENDOR_REGEX_NAG "NAG Fortran Compiler")
+
+  # Match the link line from xcodebuild output of the form
+  #  Ld ...
+  #      ...
+  #      /path/to/cc ...CompilerIdFortran/...
+  # to extract the compiler front-end for the language.
+  set(CMAKE_Fortran_COMPILER_ID_TOOL_MATCH_REGEX "\nLd[^\n]*(\n[ \t]+[^\n]*)*\n[ \t]+([^ \t\r\n]+)[^\r\n]*-o[^\r\n]*CompilerIdFortran/(\\./)?(CompilerIdFortran.xctest/)?CompilerIdFortran[ \t\n\\\"]")
+  set(CMAKE_Fortran_COMPILER_ID_TOOL_MATCH_INDEX 2)
+
+  set(_version_info "")
+  foreach(m MAJOR MINOR PATCH TWEAK)
+    set(_COMP "_${m}")
+    string(APPEND _version_info "
+#if defined(COMPILER_VERSION${_COMP})")
+    foreach(d 1 2 3 4 5 6 7 8)
+      string(APPEND _version_info "
+# undef DEC
+# undef HEX
+# define DEC(n) DEC_${d}(n)
+# define HEX(n) HEX_${d}(n)
+# if COMPILER_VERSION${_COMP} == 0
+        PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[0]'
+# elif COMPILER_VERSION${_COMP} == 1
+        PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[1]'
+# elif COMPILER_VERSION${_COMP} == 2
+        PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[2]'
+# elif COMPILER_VERSION${_COMP} == 3
+        PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[3]'
+# elif COMPILER_VERSION${_COMP} == 4
+        PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[4]'
+# elif COMPILER_VERSION${_COMP} == 5
+        PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[5]'
+# elif COMPILER_VERSION${_COMP} == 6
+        PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[6]'
+# elif COMPILER_VERSION${_COMP} == 7
+        PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[7]'
+# elif COMPILER_VERSION${_COMP} == 8
+        PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[8]'
+# elif COMPILER_VERSION${_COMP} == 9
+        PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[9]'
+# endif
+")
+    endforeach()
+    string(APPEND _version_info "
+#endif")
+  endforeach()
+  set(CMAKE_Fortran_COMPILER_ID_VERSION_INFO "${_version_info}")
+  unset(_version_info)
+  unset(_COMP)
+
+  # Try to identify the compiler.
+  set(CMAKE_Fortran_COMPILER_ID)
+  include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerId.cmake)
+  CMAKE_DETERMINE_COMPILER_ID(Fortran FFLAGS CMakeFortranCompilerId.F)
+
+  _cmake_find_compiler_sysroot(Fortran)
+
+  # Fall back to old is-GNU test.
+  if(NOT CMAKE_Fortran_COMPILER_ID)
+    execute_process(COMMAND ${CMAKE_Fortran_COMPILER} ${CMAKE_Fortran_COMPILER_ID_FLAGS_LIST} -E "${CMAKE_ROOT}/Modules/CMakeTestGNU.c"
+      OUTPUT_VARIABLE CMAKE_COMPILER_OUTPUT RESULT_VARIABLE CMAKE_COMPILER_RETURN)
+    if(NOT CMAKE_COMPILER_RETURN)
+      if(CMAKE_COMPILER_OUTPUT MATCHES "THIS_IS_GNU")
+        set(CMAKE_Fortran_COMPILER_ID "GNU")
+        file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+          "Determining if the Fortran compiler is GNU succeeded with "
+          "the following output:\n${CMAKE_COMPILER_OUTPUT}\n\n")
+      else()
+        file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+          "Determining if the Fortran compiler is GNU failed with "
+          "the following output:\n${CMAKE_COMPILER_OUTPUT}\n\n")
+      endif()
+      if(NOT CMAKE_Fortran_PLATFORM_ID)
+        if(CMAKE_COMPILER_OUTPUT MATCHES "THIS_IS_MINGW")
+          set(CMAKE_Fortran_PLATFORM_ID "MinGW")
+        endif()
+        if(CMAKE_COMPILER_OUTPUT MATCHES "THIS_IS_CYGWIN")
+          set(CMAKE_Fortran_PLATFORM_ID "Cygwin")
+        endif()
+      endif()
+    endif()
+  endif()
+
+  # Fall back for GNU MINGW, which is not always detected correctly
+  # (__MINGW32__ is defined for the C language, but perhaps not for Fortran!)
+  if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU" AND NOT CMAKE_Fortran_PLATFORM_ID)
+    execute_process(COMMAND ${CMAKE_Fortran_COMPILER} ${CMAKE_Fortran_COMPILER_ID_FLAGS_LIST} -E "${CMAKE_ROOT}/Modules/CMakeTestGNU.c"
+      OUTPUT_VARIABLE CMAKE_COMPILER_OUTPUT RESULT_VARIABLE CMAKE_COMPILER_RETURN)
+    if(NOT CMAKE_COMPILER_RETURN)
+      if(CMAKE_COMPILER_OUTPUT MATCHES "THIS_IS_MINGW")
+        set(CMAKE_Fortran_PLATFORM_ID "MinGW")
+      endif()
+      if(CMAKE_COMPILER_OUTPUT MATCHES "THIS_IS_CYGWIN")
+        set(CMAKE_Fortran_PLATFORM_ID "Cygwin")
+      endif()
+    endif()
+  endif()
+
+  # Set old compiler and platform id variables.
+  if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
+    set(CMAKE_COMPILER_IS_GNUG77 1)
+  endif()
+endif()
+
+if (NOT _CMAKE_TOOLCHAIN_LOCATION)
+  get_filename_component(_CMAKE_TOOLCHAIN_LOCATION "${CMAKE_Fortran_COMPILER}" PATH)
+endif ()
+
+# if we have a fortran cross compiler, they have usually some prefix, like
+# e.g. powerpc-linux-gfortran, arm-elf-gfortran or i586-mingw32msvc-gfortran , optionally
+# with a 3-component version number at the end (e.g. arm-eabi-gcc-4.5.2).
+# The other tools of the toolchain usually have the same prefix
+# NAME_WE cannot be used since then this test will fail for names like
+# "arm-unknown-nto-qnx6.3.0-gcc.exe", where BASENAME would be
+# "arm-unknown-nto-qnx6" instead of the correct "arm-unknown-nto-qnx6.3.0-"
+if (NOT _CMAKE_TOOLCHAIN_PREFIX)
+
+  if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
+    get_filename_component(COMPILER_BASENAME "${CMAKE_Fortran_COMPILER}" NAME)
+    if (COMPILER_BASENAME MATCHES "^(.+-)g?fortran(-[0-9]+\\.[0-9]+\\.[0-9]+)?(\\.exe)?$")
+      set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
+    endif ()
+
+    # if "llvm-" is part of the prefix, remove it, since llvm doesn't have its own binutils
+    # but uses the regular ar, objcopy, etc. (instead of llvm-objcopy etc.)
+    if ("${_CMAKE_TOOLCHAIN_PREFIX}" MATCHES "(.+-)?llvm-$")
+      set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
+    endif ()
+  endif()
+
+endif ()
+
+set(_CMAKE_PROCESSING_LANGUAGE "Fortran")
+include(CMakeFindBinUtils)
+include(Compiler/${CMAKE_Fortran_COMPILER_ID}-FindBinUtils OPTIONAL)
+unset(_CMAKE_PROCESSING_LANGUAGE)
+
+if(CMAKE_Fortran_XL_CPP)
+  set(_SET_CMAKE_Fortran_XL_CPP
+    "set(CMAKE_Fortran_XL_CPP \"${CMAKE_Fortran_XL_CPP}\")")
+endif()
+
+if(CMAKE_Fortran_COMPILER_SYSROOT)
+  string(CONCAT _SET_CMAKE_Fortran_COMPILER_SYSROOT
+    "set(CMAKE_Fortran_COMPILER_SYSROOT \"${CMAKE_Fortran_COMPILER_SYSROOT}\")\n"
+    "set(CMAKE_COMPILER_SYSROOT \"${CMAKE_Fortran_COMPILER_SYSROOT}\")")
+else()
+  set(_SET_CMAKE_Fortran_COMPILER_SYSROOT "")
+endif()
+
+if(CMAKE_Fortran_COMPILER_ARCHITECTURE_ID)
+  set(_SET_CMAKE_Fortran_COMPILER_ARCHITECTURE_ID
+    "set(CMAKE_Fortran_COMPILER_ARCHITECTURE_ID ${CMAKE_Fortran_COMPILER_ARCHITECTURE_ID})")
+else()
+  set(_SET_CMAKE_Fortran_COMPILER_ARCHITECTURE_ID "")
+endif()
+
+if(MSVC_Fortran_ARCHITECTURE_ID)
+  set(SET_MSVC_Fortran_ARCHITECTURE_ID
+    "set(MSVC_Fortran_ARCHITECTURE_ID ${MSVC_Fortran_ARCHITECTURE_ID})")
+endif()
+# configure variables set in this file for fast reload later on
+configure_file(${CMAKE_ROOT}/Modules/CMakeFortranCompiler.cmake.in
+  ${CMAKE_PLATFORM_INFO_DIR}/CMakeFortranCompiler.cmake
+  @ONLY
+  )
+set(CMAKE_Fortran_COMPILER_ENV_VAR "FC")
diff --git a/share/cmake-3.22/Modules/CMakeDetermineHIPCompiler.cmake b/share/cmake-3.22/Modules/CMakeDetermineHIPCompiler.cmake
new file mode 100644
index 0000000..7b7d7a3
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeDetermineHIPCompiler.cmake
@@ -0,0 +1,188 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake)
+include(${CMAKE_ROOT}/Modules/CMakeParseImplicitLinkInfo.cmake)
+
+if( NOT ( ("${CMAKE_GENERATOR}" MATCHES "Make") OR
+          ("${CMAKE_GENERATOR}" MATCHES "Ninja") ) )
+  message(FATAL_ERROR "HIP language not currently supported by \"${CMAKE_GENERATOR}\" generator")
+endif()
+
+
+if(NOT CMAKE_HIP_COMPILER)
+  set(CMAKE_HIP_COMPILER_INIT NOTFOUND)
+
+  # prefer the environment variable HIPCXX
+  if(NOT $ENV{HIPCXX} STREQUAL "")
+    if("$ENV{HIPCXX}" MATCHES "hipcc")
+      message(FATAL_ERROR
+        "The HIPCXX environment variable is set to the hipcc wrapper:\n"
+        " $ENV{HIPCXX}\n"
+        "This is not supported.  Use Clang directly, or let CMake pick a default."
+        )
+    endif()
+    get_filename_component(CMAKE_HIP_COMPILER_INIT $ENV{HIPCXX} PROGRAM PROGRAM_ARGS CMAKE_HIP_FLAGS_ENV_INIT)
+    if(CMAKE_HIP_FLAGS_ENV_INIT)
+      set(CMAKE_HIP_COMPILER_ARG1 "${CMAKE_HIP_FLAGS_ENV_INIT}" CACHE STRING "Arguments to CXX compiler")
+    endif()
+    if(NOT EXISTS ${CMAKE_HIP_COMPILER_INIT})
+      message(FATAL_ERROR "Could not find compiler set in environment variable HIPCXX:\n$ENV{HIPCXX}.\n${CMAKE_HIP_COMPILER_INIT}")
+    endif()
+  endif()
+
+  # finally list compilers to try
+  if(NOT CMAKE_HIP_COMPILER_INIT)
+    set(CMAKE_HIP_COMPILER_LIST clang++)
+
+    # Look for the Clang coming with ROCm to support HIP.
+    execute_process(COMMAND hipconfig --hipclangpath
+      OUTPUT_VARIABLE _CMAKE_HIPCONFIG_CLANGPATH
+      RESULT_VARIABLE _CMAKE_HIPCONFIG_RESULT
+    )
+    if(_CMAKE_HIPCONFIG_RESULT EQUAL 0 AND EXISTS "${_CMAKE_HIPCONFIG_CLANGPATH}")
+      set(CMAKE_HIP_COMPILER_HINTS "${_CMAKE_HIPCONFIG_CLANGPATH}")
+    endif()
+  endif()
+
+  _cmake_find_compiler(HIP)
+elseif(CMAKE_HIP_COMPILER MATCHES "hipcc")
+  message(FATAL_ERROR
+    "CMAKE_HIP_COMPILER is set to the hipcc wrapper:\n"
+    " ${CMAKE_HIP_COMPILER}\n"
+    "This is not supported.  Use Clang directly, or let CMake pick a default."
+    )
+else()
+  _cmake_find_compiler_path(HIP)
+endif()
+
+mark_as_advanced(CMAKE_HIP_COMPILER)
+
+# Build a small source file to identify the compiler.
+if(NOT CMAKE_HIP_COMPILER_ID_RUN)
+  set(CMAKE_HIP_COMPILER_ID_RUN 1)
+
+  # Try to identify the compiler.
+  set(CMAKE_HIP_COMPILER_ID)
+  set(CMAKE_HIP_PLATFORM_ID)
+  file(READ ${CMAKE_ROOT}/Modules/CMakePlatformId.h.in
+    CMAKE_HIP_COMPILER_ID_PLATFORM_CONTENT)
+
+  list(APPEND CMAKE_HIP_COMPILER_ID_TEST_FLAGS_FIRST "-v")
+
+  include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerId.cmake)
+  CMAKE_DETERMINE_COMPILER_ID(HIP HIPFLAGS CMakeHIPCompilerId.hip)
+
+  _cmake_find_compiler_sysroot(HIP)
+endif()
+
+if(NOT CMAKE_HIP_COMPILER_ROCM_ROOT AND CMAKE_HIP_COMPILER_ID STREQUAL "Clang")
+   execute_process(COMMAND "${CMAKE_HIP_COMPILER}" -v -print-targets
+    OUTPUT_STRIP_TRAILING_WHITESPACE
+    RESULT_VARIABLE _CMAKE_HIP_COMPILER_RESULT
+    OUTPUT_VARIABLE _CMAKE_HIP_COMPILER_STDOUT
+    ERROR_VARIABLE _CMAKE_HIP_COMPILER_STDERR
+    )
+
+  if(_CMAKE_HIP_COMPILER_RESULT EQUAL 0 AND _CMAKE_HIP_COMPILER_STDERR MATCHES "Found HIP installation: *([^,]*)[,\n]")
+    set(CMAKE_HIP_COMPILER_ROCM_ROOT "${CMAKE_MATCH_1}")
+  endif()
+endif()
+if(NOT CMAKE_HIP_COMPILER_ROCM_ROOT)
+  execute_process(
+    COMMAND hipconfig --rocmpath
+    OUTPUT_VARIABLE _CMAKE_HIPCONFIG_ROCMPATH
+    RESULT_VARIABLE _CMAKE_HIPCONFIG_RESULT
+    )
+  if(_CMAKE_HIPCONFIG_RESULT EQUAL 0 AND EXISTS "${_CMAKE_HIPCONFIG_ROCMPATH}")
+    set(CMAKE_HIP_COMPILER_ROCM_ROOT "${_CMAKE_HIPCONFIG_ROCMPATH}")
+  endif()
+endif()
+if(NOT CMAKE_HIP_COMPILER_ROCM_ROOT)
+  message(FATAL_ERROR "Failed to find ROCm root directory.")
+endif()
+if(NOT EXISTS "${CMAKE_HIP_COMPILER_ROCM_ROOT}/lib/cmake/hip-lang/hip-lang-config.cmake")
+  message(FATAL_ERROR
+    "The ROCm root directory:\n"
+    " ${CMAKE_HIP_COMPILER_ROCM_ROOT}\n"
+    "does not contain the HIP runtime CMake package, expected at:\n"
+    " ${CMAKE_HIP_COMPILER_ROCM_ROOT}/lib/cmake/hip-lang/hip-lang-config.cmake\n"
+    )
+endif()
+
+if (NOT _CMAKE_TOOLCHAIN_LOCATION)
+  get_filename_component(_CMAKE_TOOLCHAIN_LOCATION "${CMAKE_HIP_COMPILER}" PATH)
+endif ()
+
+set(_CMAKE_PROCESSING_LANGUAGE "HIP")
+include(CMakeFindBinUtils)
+include(Compiler/${CMAKE_HIP_COMPILER_ID}-FindBinUtils OPTIONAL)
+unset(_CMAKE_PROCESSING_LANGUAGE)
+
+if(CMAKE_HIP_COMPILER_SYSROOT)
+  string(CONCAT _SET_CMAKE_HIP_COMPILER_SYSROOT
+    "set(CMAKE_HIP_COMPILER_SYSROOT \"${CMAKE_HIP_COMPILER_SYSROOT}\")\n"
+    "set(CMAKE_COMPILER_SYSROOT \"${CMAKE_HIP_COMPILER_SYSROOT}\")")
+else()
+  set(_SET_CMAKE_HIP_COMPILER_SYSROOT "")
+endif()
+
+if(CMAKE_HIP_COMPILER_ARCHITECTURE_ID)
+  set(_SET_CMAKE_HIP_COMPILER_ARCHITECTURE_ID
+    "set(CMAKE_HIP_COMPILER_ARCHITECTURE_ID ${CMAKE_HIP_COMPILER_ARCHITECTURE_ID})")
+else()
+  set(_SET_CMAKE_HIP_COMPILER_ARCHITECTURE_ID "")
+endif()
+
+if(MSVC_HIP_ARCHITECTURE_ID)
+  set(SET_MSVC_HIP_ARCHITECTURE_ID
+    "set(MSVC_HIP_ARCHITECTURE_ID ${MSVC_HIP_ARCHITECTURE_ID})")
+endif()
+
+if(NOT DEFINED CMAKE_HIP_ARCHITECTURES)
+  # Use 'rocm_agent_enumerator' to get the current GPU architecture.
+  set(_CMAKE_HIP_ARCHITECTURES)
+  find_program(_CMAKE_HIP_ROCM_AGENT_ENUMERATOR
+    NAMES rocm_agent_enumerator
+    HINTS "${CMAKE_HIP_COMPILER_ROCM_ROOT}/bin"
+    NO_CACHE)
+  if(_CMAKE_HIP_ROCM_AGENT_ENUMERATOR)
+    execute_process(COMMAND "${_CMAKE_HIP_ROCM_AGENT_ENUMERATOR}" -t GPU
+      RESULT_VARIABLE _CMAKE_ROCM_AGENT_ENUMERATOR_RESULT
+      OUTPUT_VARIABLE _CMAKE_ROCM_AGENT_ENUMERATOR_STDOUT
+      ERROR_VARIABLE  _CMAKE_ROCM_AGENT_ENUMERATOR_STDERR
+    )
+    if(_CMAKE_ROCM_AGENT_ENUMERATOR_RESULT EQUAL 0)
+      separate_arguments(_hip_archs NATIVE_COMMAND "${_CMAKE_ROCM_AGENT_ENUMERATOR_STDOUT}")
+      foreach(_hip_arch ${_hip_archs})
+        if(_hip_arch STREQUAL "gfx000")
+          continue()
+        endif()
+        string(FIND ${_hip_arch} ":" pos)
+        if(NOT pos STREQUAL "-1")
+          string(SUBSTRING ${_hip_arch} 0 ${pos} _hip_arch)
+        endif()
+        list(APPEND _CMAKE_HIP_ARCHITECTURES "${_hip_arch}")
+      endforeach()
+    endif()
+    unset(_CMAKE_ROCM_AGENT_ENUMERATOR_RESULT)
+    unset(_CMAKE_ROCM_AGENT_ENUMERATOR_STDOUT)
+    unset(_CMAKE_ROCM_AGENT_ENUMERATOR_STDERR)
+  endif()
+  unset(_CMAKE_HIP_ROCM_AGENT_ENUMERATOR)
+  if(_CMAKE_HIP_ARCHITECTURES)
+    set(CMAKE_HIP_ARCHITECTURES "${_CMAKE_HIP_ARCHITECTURES}" CACHE STRING "HIP architectures")
+  elseif(CMAKE_HIP_COMPILER_PRODUCED_OUTPUT MATCHES " -target-cpu ([a-z0-9]+) ")
+    set(CMAKE_HIP_ARCHITECTURES "${CMAKE_MATCH_1}" CACHE STRING "HIP architectures")
+  else()
+    message(FATAL_ERROR "Failed to find a default HIP architecture.")
+  endif()
+  unset(_CMAKE_HIP_ARCHITECTURES)
+endif()
+
+# configure variables set in this file for fast reload later on
+configure_file(${CMAKE_ROOT}/Modules/CMakeHIPCompiler.cmake.in
+  ${CMAKE_PLATFORM_INFO_DIR}/CMakeHIPCompiler.cmake
+  @ONLY
+  )
+set(CMAKE_HIP_COMPILER_ENV_VAR "HIPCXX")
diff --git a/share/cmake-3.22/Modules/CMakeDetermineISPCCompiler.cmake b/share/cmake-3.22/Modules/CMakeDetermineISPCCompiler.cmake
new file mode 100644
index 0000000..ff2bf20
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeDetermineISPCCompiler.cmake
@@ -0,0 +1,96 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# determine the compiler to use for ISPC programs
+
+include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake)
+
+if( NOT (("${CMAKE_GENERATOR}" MATCHES "Make") OR ("${CMAKE_GENERATOR}" MATCHES "Ninja")) )
+  message(FATAL_ERROR "ISPC language not currently supported by \"${CMAKE_GENERATOR}\" generator")
+endif()
+
+# Load system-specific compiler preferences for this language.
+include(Platform/${CMAKE_SYSTEM_NAME}-Determine-ISPC OPTIONAL)
+include(Platform/${CMAKE_SYSTEM_NAME}-ISPC OPTIONAL)
+if(NOT CMAKE_ISPC_COMPILER_NAMES)
+  set(CMAKE_ISPC_COMPILER_NAMES ispc)
+endif()
+
+
+if(NOT CMAKE_ISPC_COMPILER)
+
+  set(CMAKE_ISPC_COMPILER_INIT NOTFOUND)
+
+  # prefer the environment variable CC
+  if(NOT $ENV{ISPC} STREQUAL "")
+    get_filename_component(CMAKE_ISPC_COMPILER_INIT $ENV{ISPC} PROGRAM PROGRAM_ARGS CMAKE_ISPC_FLAGS_ENV_INIT)
+    if(CMAKE_ISPC_FLAGS_ENV_INIT)
+      set(CMAKE_ISPC_COMPILER_ARG1 "${CMAKE_ISPC_FLAGS_ENV_INIT}" CACHE STRING "First argument to ISPC compiler")
+    endif()
+    if(NOT EXISTS ${CMAKE_ISPC_COMPILER_INIT})
+      message(FATAL_ERROR "Could not find compiler set in environment variable ISPC:\n$ENV{ISPC}.")
+    endif()
+  endif()
+
+  # next try prefer the compiler specified by the generator
+  if(CMAKE_GENERATOR_ISPC)
+    if(NOT CMAKE_ISPC_COMPILER_INIT)
+      set(CMAKE_ISPC_COMPILER_INIT ${CMAKE_GENERATOR_ISPC})
+    endif()
+  endif()
+
+  # finally list compilers to try
+  if(NOT CMAKE_ISPC_COMPILER_INIT)
+    set(CMAKE_ISPC_COMPILER_LIST ${_CMAKE_TOOLCHAIN_PREFIX}ispc ispc)
+  endif()
+
+  # Find the compiler.
+  _cmake_find_compiler(ISPC)
+
+else()
+  _cmake_find_compiler_path(ISPC)
+endif()
+mark_as_advanced(CMAKE_ISPC_COMPILER)
+
+if(NOT CMAKE_ISPC_COMPILER_ID_RUN)
+set(CMAKE_ISPC_COMPILER_ID_RUN 1)
+
+  # Try to identify the compiler.
+  set(CMAKE_ISPC_COMPILER_ID)
+  set(CMAKE_ISPC_PLATFORM_ID)
+
+
+  set(CMAKE_ISPC_COMPILER_ID_TEST_FLAGS_FIRST
+  # setup logic to make sure ISPC outputs a file
+  "-o cmake_ispc_output"
+  )
+
+  include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerId.cmake)
+  CMAKE_DETERMINE_COMPILER_ID(ISPC ISPCFLAGS CMakeISPCCompilerId.ispc)
+
+  _cmake_find_compiler_sysroot(ISPC)
+endif()
+
+if (NOT _CMAKE_TOOLCHAIN_LOCATION)
+  get_filename_component(_CMAKE_TOOLCHAIN_LOCATION "${CMAKE_ISPC_COMPILER}" PATH)
+endif ()
+
+set(_CMAKE_PROCESSING_LANGUAGE "ISPC")
+include(CMakeFindBinUtils)
+include(Compiler/${CMAKE_ISPC_COMPILER_ID}-FindBinUtils OPTIONAL)
+unset(_CMAKE_PROCESSING_LANGUAGE)
+
+if(CMAKE_ISPC_COMPILER_ID_VENDOR_MATCH)
+  set(_SET_CMAKE_ISPC_COMPILER_ID_VENDOR_MATCH
+    "set(CMAKE_ISPC_COMPILER_ID_VENDOR_MATCH [==[${CMAKE_ISPC_COMPILER_ID_VENDOR_MATCH}]==])")
+else()
+  set(_SET_CMAKE_ISPC_COMPILER_ID_VENDOR_MATCH "")
+endif()
+
+
+# configure variables set in this file for fast reload later on
+configure_file(${CMAKE_ROOT}/Modules/CMakeISPCCompiler.cmake.in
+  ${CMAKE_PLATFORM_INFO_DIR}/CMakeISPCCompiler.cmake @ONLY)
+
+set(CMAKE_ISPC_COMPILER_ENV_VAR "ISPC")
diff --git a/share/cmake-3.22/Modules/CMakeDetermineJavaCompiler.cmake b/share/cmake-3.22/Modules/CMakeDetermineJavaCompiler.cmake
new file mode 100644
index 0000000..db456c0
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeDetermineJavaCompiler.cmake
@@ -0,0 +1,94 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# determine the compiler to use for Java programs
+# NOTE, a generator may set CMAKE_Java_COMPILER before
+# loading this file to force a compiler.
+
+if(NOT CMAKE_Java_COMPILER)
+  # prefer the environment variable CC
+  if(NOT $ENV{JAVA_COMPILER} STREQUAL "")
+    get_filename_component(CMAKE_Java_COMPILER_INIT $ENV{JAVA_COMPILER} PROGRAM PROGRAM_ARGS CMAKE_Java_FLAGS_ENV_INIT)
+    if(CMAKE_Java_FLAGS_ENV_INIT)
+      set(CMAKE_Java_COMPILER_ARG1 "${CMAKE_Java_FLAGS_ENV_INIT}" CACHE STRING "Arguments to Java compiler")
+    endif()
+    if(NOT EXISTS ${CMAKE_Java_COMPILER_INIT})
+      message(SEND_ERROR "Could not find compiler set in environment variable JAVA_COMPILER:\n$ENV{JAVA_COMPILER}.")
+    endif()
+  endif()
+
+  if(NOT $ENV{JAVA_RUNTIME} STREQUAL "")
+    get_filename_component(CMAKE_Java_RUNTIME_INIT $ENV{JAVA_RUNTIME} PROGRAM PROGRAM_ARGS CMAKE_Java_FLAGS_ENV_INIT)
+    if(NOT EXISTS ${CMAKE_Java_RUNTIME_INIT})
+      message(SEND_ERROR "Could not find compiler set in environment variable JAVA_RUNTIME:\n$ENV{JAVA_RUNTIME}.")
+    endif()
+  endif()
+
+  if(NOT $ENV{JAVA_ARCHIVE} STREQUAL "")
+    get_filename_component(CMAKE_Java_ARCHIVE_INIT $ENV{JAVA_ARCHIVE} PROGRAM PROGRAM_ARGS CMAKE_Java_FLAGS_ENV_INIT)
+    if(NOT EXISTS ${CMAKE_Java_ARCHIVE_INIT})
+      message(SEND_ERROR "Could not find compiler set in environment variable JAVA_ARCHIVE:\n$ENV{JAVA_ARCHIVE}.")
+    endif()
+  endif()
+
+  set(Java_BIN_PATH
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\2.0;JavaHome]/bin"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.9;JavaHome]/bin"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.8;JavaHome]/bin"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.7;JavaHome]/bin"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.6;JavaHome]/bin"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.5;JavaHome]/bin"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.4;JavaHome]/bin"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.3;JavaHome]/bin"
+    $ENV{JAVA_HOME}/bin
+    /usr/bin
+    /usr/lib/java/bin
+    /usr/share/java/bin
+    /usr/local/bin
+    /usr/local/java/bin
+    /usr/local/java/share/bin
+    /usr/java/j2sdk1.4.2_04
+    /usr/lib/j2sdk1.4-sun/bin
+    /usr/java/j2sdk1.4.2_09/bin
+    /usr/lib/j2sdk1.5-sun/bin
+    /opt/sun-jdk-1.5.0.04/bin
+    /usr/local/jdk-1.7.0/bin
+    /usr/local/jdk-1.6.0/bin
+    )
+  # if no compiler has been specified yet, then look for one
+  if(CMAKE_Java_COMPILER_INIT)
+    set(CMAKE_Java_COMPILER ${CMAKE_Java_COMPILER_INIT} CACHE PATH "Java Compiler")
+  else()
+    find_program(CMAKE_Java_COMPILER
+      NAMES javac
+      PATHS ${Java_BIN_PATH}
+    )
+  endif()
+
+  # if no runtime has been specified yet, then look for one
+  if(CMAKE_Java_RUNTIME_INIT)
+    set(CMAKE_Java_RUNTIME ${CMAKE_Java_RUNTIME_INIT} CACHE PATH "Java Compiler")
+  else()
+    find_program(CMAKE_Java_RUNTIME
+      NAMES java
+      PATHS ${Java_BIN_PATH}
+    )
+  endif()
+
+  # if no archive has been specified yet, then look for one
+  if(CMAKE_Java_ARCHIVE_INIT)
+    set(CMAKE_Java_ARCHIVE ${CMAKE_Java_ARCHIVE_INIT} CACHE PATH "Java Compiler")
+  else()
+    find_program(CMAKE_Java_ARCHIVE
+      NAMES jar
+      PATHS ${Java_BIN_PATH}
+    )
+  endif()
+endif()
+mark_as_advanced(CMAKE_Java_COMPILER)
+
+# configure variables set in this file for fast reload later on
+configure_file(${CMAKE_ROOT}/Modules/CMakeJavaCompiler.cmake.in
+  ${CMAKE_PLATFORM_INFO_DIR}/CMakeJavaCompiler.cmake @ONLY)
+set(CMAKE_Java_COMPILER_ENV_VAR "JAVA_COMPILER")
diff --git a/share/cmake-3.22/Modules/CMakeDetermineOBJCCompiler.cmake b/share/cmake-3.22/Modules/CMakeDetermineOBJCCompiler.cmake
new file mode 100644
index 0000000..4b84c8a
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeDetermineOBJCCompiler.cmake
@@ -0,0 +1,189 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# determine the compiler to use for Objective-C programs
+# NOTE, a generator may set CMAKE_OBJC_COMPILER before
+# loading this file to force a compiler.
+# use environment variable OBJC first if defined by user, next use
+# the cmake variable CMAKE_GENERATOR_OBJC which can be defined by a generator
+# as a default compiler
+#
+# Sets the following variables:
+#   CMAKE_OBJC_COMPILER
+#   CMAKE_AR
+#   CMAKE_RANLIB
+#   CMAKE_COMPILER_IS_GNUOBJC
+#   CMAKE_COMPILER_IS_CLANGOBJC
+#
+# If not already set before, it also sets
+#   _CMAKE_TOOLCHAIN_PREFIX
+
+include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake)
+
+# Load system-specific compiler preferences for this language.
+include(Platform/${CMAKE_SYSTEM_NAME}-Determine-OBJC OPTIONAL)
+include(Platform/${CMAKE_SYSTEM_NAME}-OBJC OPTIONAL)
+if(NOT CMAKE_OBJC_COMPILER_NAMES)
+  set(CMAKE_OBJC_COMPILER_NAMES clang)
+endif()
+
+if("${CMAKE_GENERATOR}" MATCHES "Xcode")
+  set(CMAKE_OBJC_COMPILER_XCODE_TYPE sourcecode.c.objc)
+else()
+  if(NOT CMAKE_OBJC_COMPILER)
+    set(CMAKE_OBJC_COMPILER_INIT NOTFOUND)
+
+    # prefer the environment variable OBJC or CC
+    foreach(var OBJC CC)
+      if($ENV{${var}} MATCHES ".+")
+        get_filename_component(CMAKE_OBJC_COMPILER_INIT $ENV{${var}} PROGRAM PROGRAM_ARGS CMAKE_OBJC_FLAGS_ENV_INIT)
+        if(CMAKE_OBJC_FLAGS_ENV_INIT)
+          set(CMAKE_OBJC_COMPILER_ARG1 "${CMAKE_OBJC_FLAGS_ENV_INIT}" CACHE STRING "Arguments to Objective-C compiler")
+        endif()
+        if(NOT EXISTS ${CMAKE_OBJC_COMPILER_INIT})
+          message(FATAL_ERROR "Could not find compiler set in environment variable ${var}:\n  $ENV{${var}}")
+        endif()
+        break()
+      endif()
+    endforeach()
+
+    # next try prefer the compiler specified by the generator
+    if(CMAKE_GENERATOR_OBJC)
+      if(NOT CMAKE_OBJC_COMPILER_INIT)
+        set(CMAKE_OBJC_COMPILER_INIT ${CMAKE_GENERATOR_OBJC})
+      endif()
+    endif()
+
+    # finally list compilers to try
+    if(NOT CMAKE_OBJC_COMPILER_INIT)
+      set(CMAKE_OBJC_COMPILER_LIST ${_CMAKE_TOOLCHAIN_PREFIX}cc ${_CMAKE_TOOLCHAIN_PREFIX}gcc clang)
+    endif()
+
+    _cmake_find_compiler(OBJC)
+
+  else()
+    # we only get here if CMAKE_OBJC_COMPILER was specified using -D or a pre-made CMakeCache.txt
+    # (e.g. via ctest) or set in CMAKE_TOOLCHAIN_FILE
+    # if CMAKE_OBJC_COMPILER is a list, use the first item as
+    # CMAKE_OBJC_COMPILER and the rest as CMAKE_OBJC_COMPILER_ARG1
+    set(CMAKE_OBJC_COMPILER_ARG1 "${CMAKE_OBJC_COMPILER}")
+    list(POP_FRONT CMAKE_OBJC_COMPILER_ARG1 CMAKE_OBJC_COMPILER)
+    list(JOIN CMAKE_OBJC_COMPILER_ARG1 " " CMAKE_OBJC_COMPILER_ARG1)
+
+    # if a compiler was specified by the user but without path,
+    # now try to find it with the full path
+    # if it is found, force it into the cache,
+    # if not, don't overwrite the setting (which was given by the user) with "NOTFOUND"
+    # if the C compiler already had a path, reuse it for searching the CXX compiler
+    get_filename_component(_CMAKE_USER_OBJC_COMPILER_PATH "${CMAKE_OBJC_COMPILER}" PATH)
+    if(NOT _CMAKE_USER_OBJC_COMPILER_PATH)
+      find_program(CMAKE_OBJC_COMPILER_WITH_PATH NAMES ${CMAKE_OBJC_COMPILER})
+      if(CMAKE_OBJC_COMPILER_WITH_PATH)
+        set(CMAKE_OBJC_COMPILER ${CMAKE_OBJC_COMPILER_WITH_PATH} CACHE STRING "Objective-C compiler" FORCE)
+      endif()
+      unset(CMAKE_OBJC_COMPILER_WITH_PATH CACHE)
+    endif()
+  endif()
+  mark_as_advanced(CMAKE_OBJC_COMPILER)
+
+  # Each entry in this list is a set of extra flags to try
+  # adding to the compile line to see if it helps produce
+  # a valid identification file.
+  set(CMAKE_OBJC_COMPILER_ID_TEST_FLAGS_FIRST)
+  set(CMAKE_OBJC_COMPILER_ID_TEST_FLAGS
+    # Try compiling to an object file only.
+    "-c"
+
+    )
+endif()
+
+# Build a small source file to identify the compiler.
+if(NOT CMAKE_OBJC_COMPILER_ID_RUN)
+  set(CMAKE_OBJC_COMPILER_ID_RUN 1)
+
+  # Try to identify the compiler.
+  set(CMAKE_OBJC_COMPILER_ID)
+  file(READ ${CMAKE_ROOT}/Modules/CMakePlatformId.h.in
+    CMAKE_OBJC_COMPILER_ID_PLATFORM_CONTENT)
+
+  # Match the link line from xcodebuild output of the form
+  #  Ld ...
+  #      ...
+  #      /path/to/cc ...CompilerIdOBJC/...
+  # to extract the compiler front-end for the language.
+  set(CMAKE_OBJC_COMPILER_ID_TOOL_MATCH_REGEX "\nLd[^\n]*(\n[ \t]+[^\n]*)*\n[ \t]+([^ \t\r\n]+)[^\r\n]*-o[^\r\n]*CompilerIdOBJC/(\\./)?(CompilerIdOBJC.(framework|xctest|build/[^ \t\r\n]+)/)?CompilerIdOBJC[ \t\n\\\"]")
+  set(CMAKE_OBJC_COMPILER_ID_TOOL_MATCH_INDEX 2)
+
+  include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerId.cmake)
+  CMAKE_DETERMINE_COMPILER_ID(OBJC OBJCCFLAGS CMakeOBJCCompilerId.m)
+
+  # Set old compiler and platform id variables.
+  if(CMAKE_OBJC_COMPILER_ID STREQUAL "GNU")
+    set(CMAKE_COMPILER_IS_GNUOBJC 1)
+  endif()
+  if(CMAKE_OBJC_COMPILER_ID STREQUAL "Clang")
+    set(CMAKE_COMPILER_IS_CLANGOBJC 1)
+  endif()
+endif()
+
+if (NOT _CMAKE_TOOLCHAIN_LOCATION)
+  get_filename_component(_CMAKE_TOOLCHAIN_LOCATION "${CMAKE_OBJC_COMPILER}" PATH)
+endif ()
+
+# If we have a gcc cross compiler, they have usually some prefix, like
+# e.g. powerpc-linux-gcc, arm-elf-gcc or i586-mingw32msvc-gcc, optionally
+# with a 3-component version number at the end (e.g. arm-eabi-gcc-4.5.2).
+# The other tools of the toolchain usually have the same prefix
+# NAME_WE cannot be used since then this test will fail for names like
+# "arm-unknown-nto-qnx6.3.0-gcc.exe", where BASENAME would be
+# "arm-unknown-nto-qnx6" instead of the correct "arm-unknown-nto-qnx6.3.0-"
+if (CMAKE_CROSSCOMPILING  AND NOT _CMAKE_TOOLCHAIN_PREFIX)
+
+  if(CMAKE_OBJC_COMPILER_ID MATCHES "GNU|Clang|QCC")
+    get_filename_component(COMPILER_BASENAME "${CMAKE_OBJC_COMPILER}" NAME)
+    if (COMPILER_BASENAME MATCHES "^(.+-)(clang|g?cc)(-[0-9]+(\\.[0-9]+)*)?(-[^.]+)?(\\.exe)?$")
+      set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
+      set(_CMAKE_COMPILER_SUFFIX ${CMAKE_MATCH_5})
+    elseif(CMAKE_OBJC_COMPILER_ID MATCHES "Clang")
+      if(CMAKE_OBJC_COMPILER_TARGET)
+        set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_OBJC_COMPILER_TARGET}-)
+      endif()
+    elseif(COMPILER_BASENAME MATCHES "qcc(\\.exe)?$")
+      if(CMAKE_OBJC_COMPILER_TARGET MATCHES "gcc_nto([a-z0-9]+_[0-9]+|[^_le]+)(le)?")
+        set(_CMAKE_TOOLCHAIN_PREFIX nto${CMAKE_MATCH_1}-)
+      endif()
+    endif ()
+
+    # if "llvm-" is part of the prefix, remove it, since llvm doesn't have its own binutils
+    # but uses the regular ar, objcopy, etc. (instead of llvm-objcopy etc.)
+    if ("${_CMAKE_TOOLCHAIN_PREFIX}" MATCHES "(.+-)?llvm-$")
+      set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
+    endif ()
+  endif()
+
+endif ()
+
+set(_CMAKE_PROCESSING_LANGUAGE "OBJC")
+include(CMakeFindBinUtils)
+include(Compiler/${CMAKE_OBJC_COMPILER_ID}-FindBinUtils OPTIONAL)
+unset(_CMAKE_PROCESSING_LANGUAGE)
+
+if(CMAKE_OBJC_COMPILER_ARCHITECTURE_ID)
+  set(_SET_CMAKE_OBJC_COMPILER_ARCHITECTURE_ID
+    "set(CMAKE_OBJC_COMPILER_ARCHITECTURE_ID ${CMAKE_OBJC_COMPILER_ARCHITECTURE_ID})")
+else()
+  set(_SET_CMAKE_OBJC_COMPILER_ARCHITECTURE_ID "")
+endif()
+
+if(CMAKE_OBJC_XCODE_ARCHS)
+  set(SET_CMAKE_XCODE_ARCHS
+    "set(CMAKE_XCODE_ARCHS \"${CMAKE_OBJC_XCODE_ARCHS}\")")
+endif()
+
+# configure variables set in this file for fast reload later on
+configure_file(${CMAKE_ROOT}/Modules/CMakeOBJCCompiler.cmake.in
+  ${CMAKE_PLATFORM_INFO_DIR}/CMakeOBJCCompiler.cmake
+  @ONLY
+  )
+set(CMAKE_OBJC_COMPILER_ENV_VAR "OBJC")
diff --git a/share/cmake-3.22/Modules/CMakeDetermineOBJCXXCompiler.cmake b/share/cmake-3.22/Modules/CMakeDetermineOBJCXXCompiler.cmake
new file mode 100644
index 0000000..7403847
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeDetermineOBJCXXCompiler.cmake
@@ -0,0 +1,197 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# determine the compiler to use for Objective-C++ programs
+# NOTE, a generator may set CMAKE_OBJCXX_COMPILER before
+# loading this file to force a compiler.
+# use environment variable OBJCXX first if defined by user, next use
+# the cmake variable CMAKE_GENERATOR_OBJCXX which can be defined by a generator
+# as a default compiler
+# If the internal cmake variable _CMAKE_TOOLCHAIN_PREFIX is set, this is used
+# as prefix for the tools (e.g. arm-elf-g++, arm-elf-ar etc.)
+#
+# Sets the following variables:
+#   CMAKE_OBJCXX_COMPILER
+#   CMAKE_COMPILER_IS_GNUOBJCXX
+#   CMAKE_COMPILER_IS_CLANGOBJCXX
+#   CMAKE_AR
+#   CMAKE_RANLIB
+#
+# If not already set before, it also sets
+#   _CMAKE_TOOLCHAIN_PREFIX
+
+include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake)
+
+# Load system-specific compiler preferences for this language.
+include(Platform/${CMAKE_SYSTEM_NAME}-Determine-OBJCXX OPTIONAL)
+include(Platform/${CMAKE_SYSTEM_NAME}-OBJCXX OPTIONAL)
+if(NOT CMAKE_OBJCXX_COMPILER_NAMES)
+  set(CMAKE_OBJCXX_COMPILER_NAMES clang++)
+endif()
+
+if("${CMAKE_GENERATOR}" MATCHES "Xcode")
+  set(CMAKE_OBJCXX_COMPILER_XCODE_TYPE sourcecode.cpp.objcpp)
+else()
+  if(NOT CMAKE_OBJCXX_COMPILER)
+    set(CMAKE_OBJCXX_COMPILER_INIT NOTFOUND)
+
+    # prefer the environment variable OBJCXX or CXX
+    foreach(var OBJCXX CXX)
+      if($ENV{${var}} MATCHES ".+")
+        get_filename_component(CMAKE_OBJCXX_COMPILER_INIT $ENV{${var}} PROGRAM PROGRAM_ARGS CMAKE_OBJCXX_FLAGS_ENV_INIT)
+        if(CMAKE_OBJCXX_FLAGS_ENV_INIT)
+          set(CMAKE_OBJCXX_COMPILER_ARG1 "${CMAKE_OBJCXX_FLAGS_ENV_INIT}" CACHE STRING "Arguments to Objective-C++ compiler")
+        endif()
+        if(NOT EXISTS ${CMAKE_OBJCXX_COMPILER_INIT})
+          message(FATAL_ERROR "Could not find compiler set in environment variable ${var}:\n  $ENV{${var}}")
+        endif()
+        break()
+      endif()
+    endforeach()
+
+    # next prefer the generator specified compiler
+    if(CMAKE_GENERATOR_OBJCXX)
+      if(NOT CMAKE_OBJCXX_COMPILER_INIT)
+        set(CMAKE_OBJCXX_COMPILER_INIT ${CMAKE_GENERATOR_OBJCXX})
+      endif()
+    endif()
+
+    # finally list compilers to try
+    if(NOT CMAKE_OBJCXX_COMPILER_INIT)
+      set(CMAKE_OBJCXX_COMPILER_LIST ${_CMAKE_TOOLCHAIN_PREFIX}c++ ${_CMAKE_TOOLCHAIN_PREFIX}g++ clang++)
+    endif()
+
+    _cmake_find_compiler(OBJCXX)
+
+  else()
+    # we only get here if CMAKE_OBJCXX_COMPILER was specified using -D or a pre-made CMakeCache.txt
+    # (e.g. via ctest) or set in CMAKE_TOOLCHAIN_FILE
+    # if CMAKE_OBJCXX_COMPILER is a list, use the first item as
+    # CMAKE_OBJCXX_COMPILER and the rest as CMAKE_OBJCXX_COMPILER_ARG1
+    set(CMAKE_OBJCXX_COMPILER_ARG1 "${CMAKE_OBJCXX_COMPILER}")
+    list(POP_FRONT CMAKE_OBJCXX_COMPILER_ARG1 CMAKE_OBJCXX_COMPILER)
+    list(JOIN CMAKE_OBJCXX_COMPILER_ARG1 " " CMAKE_OBJCXX_COMPILER_ARG1)
+
+    # if a compiler was specified by the user but without path,
+    # now try to find it with the full path
+    # if it is found, force it into the cache,
+    # if not, don't overwrite the setting (which was given by the user) with "NOTFOUND"
+    # if the C compiler already had a path, reuse it for searching the CXX compiler
+    get_filename_component(_CMAKE_USER_OBJCXX_COMPILER_PATH "${CMAKE_OBJCXX_COMPILER}" PATH)
+    if(NOT _CMAKE_USER_OBJCXX_COMPILER_PATH)
+      find_program(CMAKE_OBJCXX_COMPILER_WITH_PATH NAMES ${CMAKE_OBJCXX_COMPILER})
+      if(CMAKE_OBJCXX_COMPILER_WITH_PATH)
+        set(CMAKE_OBJCXX_COMPILER ${CMAKE_OBJCXX_COMPILER_WITH_PATH} CACHE STRING "Objective-C++ compiler" FORCE)
+      endif()
+      unset(CMAKE_OBJCXX_COMPILER_WITH_PATH CACHE)
+    endif()
+
+  endif()
+  mark_as_advanced(CMAKE_OBJCXX_COMPILER)
+
+  # Each entry in this list is a set of extra flags to try
+  # adding to the compile line to see if it helps produce
+  # a valid identification file.
+  set(CMAKE_OBJCXX_COMPILER_ID_TEST_FLAGS_FIRST)
+  set(CMAKE_OBJCXX_COMPILER_ID_TEST_FLAGS
+    # Try compiling to an object file only.
+    "-c"
+
+    # ARMClang need target options
+    "--target=arm-arm-none-eabi -mcpu=cortex-m3"
+    )
+endif()
+
+# Build a small source file to identify the compiler.
+if(NOT CMAKE_OBJCXX_COMPILER_ID_RUN)
+  set(CMAKE_OBJCXX_COMPILER_ID_RUN 1)
+
+  # Try to identify the compiler.
+  set(CMAKE_OBJCXX_COMPILER_ID)
+  file(READ ${CMAKE_ROOT}/Modules/CMakePlatformId.h.in
+    CMAKE_OBJCXX_COMPILER_ID_PLATFORM_CONTENT)
+
+  # Match the link line from xcodebuild output of the form
+  #  Ld ...
+  #      ...
+  #      /path/to/cc ...CompilerIdOBJCXX/...
+  # to extract the compiler front-end for the language.
+  set(CMAKE_OBJCXX_COMPILER_ID_TOOL_MATCH_REGEX "\nLd[^\n]*(\n[ \t]+[^\n]*)*\n[ \t]+([^ \t\r\n]+)[^\r\n]*-o[^\r\n]*CompilerIdOBJCXX/(\\./)?(CompilerIdOBJCXX.(framework|xctest|build/[^ \t\r\n]+)/)?CompilerIdOBJCXX[ \t\n\\\"]")
+  set(CMAKE_OBJCXX_COMPILER_ID_TOOL_MATCH_INDEX 2)
+
+  include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerId.cmake)
+  CMAKE_DETERMINE_COMPILER_ID(OBJCXX OBJCXXFLAGS CMakeOBJCXXCompilerId.mm)
+
+  # Set old compiler and platform id variables.
+  if(CMAKE_OBJCXX_COMPILER_ID MATCHES "GNU")
+    set(CMAKE_COMPILER_IS_GNUOBJCXX 1)
+  endif()
+  if(CMAKE_OBJCXX_COMPILER_ID MATCHES "Clang")
+    set(CMAKE_COMPILER_IS_CLANGOBJCXX 1)
+  endif()
+endif()
+
+if (NOT _CMAKE_TOOLCHAIN_LOCATION)
+  get_filename_component(_CMAKE_TOOLCHAIN_LOCATION "${CMAKE_OBJCXX_COMPILER}" PATH)
+endif ()
+
+# if we have a g++ cross compiler, they have usually some prefix, like
+# e.g. powerpc-linux-g++, arm-elf-g++ or i586-mingw32msvc-g++ , optionally
+# with a 3-component version number at the end (e.g. arm-eabi-gcc-4.5.2).
+# The other tools of the toolchain usually have the same prefix
+# NAME_WE cannot be used since then this test will fail for names like
+# "arm-unknown-nto-qnx6.3.0-gcc.exe", where BASENAME would be
+# "arm-unknown-nto-qnx6" instead of the correct "arm-unknown-nto-qnx6.3.0-"
+
+
+if (NOT _CMAKE_TOOLCHAIN_PREFIX)
+
+  if("${CMAKE_OBJCXX_COMPILER_ID}" MATCHES "GNU|Clang|QCC")
+    get_filename_component(COMPILER_BASENAME "${CMAKE_OBJCXX_COMPILER}" NAME)
+    if (COMPILER_BASENAME MATCHES "^(.+-)(clan)?[gc]\\+\\+(-[0-9]+(\\.[0-9]+)*)?(-[^.]+)?(\\.exe)?$")
+      set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
+      set(_CMAKE_COMPILER_SUFFIX ${CMAKE_MATCH_5})
+    elseif("${CMAKE_OBJCXX_COMPILER_ID}" MATCHES "Clang")
+      if(CMAKE_OBJCXX_COMPILER_TARGET)
+        set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_OBJCXX_COMPILER_TARGET}-)
+      endif()
+    elseif(COMPILER_BASENAME MATCHES "QCC(\\.exe)?$")
+      if(CMAKE_OBJCXX_COMPILER_TARGET MATCHES "gcc_nto([a-z0-9]+_[0-9]+|[^_le]+)(le)")
+        set(_CMAKE_TOOLCHAIN_PREFIX nto${CMAKE_MATCH_1}-)
+      endif()
+    endif ()
+
+    # if "llvm-" is part of the prefix, remove it, since llvm doesn't have its own binutils
+    # but uses the regular ar, objcopy, etc. (instead of llvm-objcopy etc.)
+    if ("${_CMAKE_TOOLCHAIN_PREFIX}" MATCHES "(.+-)?llvm-$")
+      set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
+    endif ()
+  endif()
+
+endif ()
+
+set(_CMAKE_PROCESSING_LANGUAGE "OBJCXX")
+include(CMakeFindBinUtils)
+include(Compiler/${CMAKE_OBJCXX_COMPILER_ID}-FindBinUtils OPTIONAL)
+unset(_CMAKE_PROCESSING_LANGUAGE)
+
+if(CMAKE_OBJCXX_COMPILER_ARCHITECTURE_ID)
+  set(_SET_CMAKE_OBJCXX_COMPILER_ARCHITECTURE_ID
+    "set(CMAKE_OBJCXX_COMPILER_ARCHITECTURE_ID ${CMAKE_OBJCXX_COMPILER_ARCHITECTURE_ID})")
+else()
+  set(_SET_CMAKE_OBJCXX_COMPILER_ARCHITECTURE_ID "")
+endif()
+
+if(CMAKE_OBJCXX_XCODE_ARCHS)
+  set(SET_CMAKE_XCODE_ARCHS
+    "set(CMAKE_XCODE_ARCHS \"${CMAKE_OBJCXX_XCODE_ARCHS}\")")
+endif()
+
+# configure all variables set in this file
+configure_file(${CMAKE_ROOT}/Modules/CMakeOBJCXXCompiler.cmake.in
+  ${CMAKE_PLATFORM_INFO_DIR}/CMakeOBJCXXCompiler.cmake
+  @ONLY
+  )
+
+set(CMAKE_OBJCXX_COMPILER_ENV_VAR "OBJCXX")
diff --git a/share/cmake-3.22/Modules/CMakeDetermineRCCompiler.cmake b/share/cmake-3.22/Modules/CMakeDetermineRCCompiler.cmake
new file mode 100644
index 0000000..f8d55a5
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeDetermineRCCompiler.cmake
@@ -0,0 +1,57 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# determine the compiler to use for RC programs
+# NOTE, a generator may set CMAKE_RC_COMPILER before
+# loading this file to force a compiler.
+# use environment variable RC first if defined by user, next use
+# the cmake variable CMAKE_GENERATOR_RC which can be defined by a generator
+# as a default compiler
+if(NOT CMAKE_RC_COMPILER)
+  # prefer the environment variable RC
+  if(NOT $ENV{RC} STREQUAL "")
+    get_filename_component(CMAKE_RC_COMPILER_INIT $ENV{RC} PROGRAM PROGRAM_ARGS CMAKE_RC_FLAGS_ENV_INIT)
+    if(CMAKE_RC_FLAGS_ENV_INIT)
+      set(CMAKE_RC_COMPILER_ARG1 "${CMAKE_RC_FLAGS_ENV_INIT}" CACHE STRING "Arguments to RC compiler")
+    endif()
+    if(EXISTS ${CMAKE_RC_COMPILER_INIT})
+    else()
+      message(FATAL_ERROR "Could not find compiler set in environment variable RC:\n$ENV{RC}.")
+    endif()
+  endif()
+
+  # next try prefer the compiler specified by the generator
+  if(CMAKE_GENERATOR_RC)
+    if(NOT CMAKE_RC_COMPILER_INIT)
+      set(CMAKE_RC_COMPILER_INIT ${CMAKE_GENERATOR_RC})
+    endif()
+  endif()
+
+  # finally list compilers to try
+  if(CMAKE_RC_COMPILER_INIT)
+    set(CMAKE_RC_COMPILER_LIST ${CMAKE_RC_COMPILER_INIT})
+  else()
+    set(CMAKE_RC_COMPILER_LIST rc)
+  endif()
+
+  # Find the compiler.
+  find_program(CMAKE_RC_COMPILER NAMES ${CMAKE_RC_COMPILER_LIST} DOC "RC compiler")
+  if(CMAKE_RC_COMPILER_INIT AND NOT CMAKE_RC_COMPILER)
+    set(CMAKE_RC_COMPILER "${CMAKE_RC_COMPILER_INIT}" CACHE FILEPATH "RC compiler" FORCE)
+  endif()
+endif()
+
+mark_as_advanced(CMAKE_RC_COMPILER)
+
+get_filename_component(_CMAKE_RC_COMPILER_NAME_WE ${CMAKE_RC_COMPILER} NAME_WE)
+if(_CMAKE_RC_COMPILER_NAME_WE STREQUAL "windres")
+  set(CMAKE_RC_OUTPUT_EXTENSION .obj)
+else()
+  set(CMAKE_RC_OUTPUT_EXTENSION .res)
+endif()
+
+# configure variables set in this file for fast reload later on
+configure_file(${CMAKE_ROOT}/Modules/CMakeRCCompiler.cmake.in
+               ${CMAKE_PLATFORM_INFO_DIR}/CMakeRCCompiler.cmake)
+set(CMAKE_RC_COMPILER_ENV_VAR "RC")
diff --git a/share/cmake-3.22/Modules/CMakeDetermineSwiftCompiler.cmake b/share/cmake-3.22/Modules/CMakeDetermineSwiftCompiler.cmake
new file mode 100644
index 0000000..aaad560
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeDetermineSwiftCompiler.cmake
@@ -0,0 +1,78 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake)
+
+# Local system-specific compiler preferences for this language.
+include(Platform/${CMAKE_SYSTEM_NAME}-Determine-Swift OPTIONAL)
+include(Platform/${CMAKE_SYSTEM_NAME}-Swift OPTIONAL)
+if(NOT CMAKE_Swift_COMPILER_NAMES)
+  set(CMAKE_Swift_COMPILER_NAMES swiftc)
+endif()
+
+if("${CMAKE_GENERATOR}" STREQUAL "Xcode")
+  if(XCODE_VERSION VERSION_LESS 6.1)
+    message(FATAL_ERROR "Swift language not supported by Xcode ${XCODE_VERSION}")
+  endif()
+  set(CMAKE_Swift_COMPILER_XCODE_TYPE sourcecode.swift)
+  _cmake_find_compiler_path(Swift)
+elseif("${CMAKE_GENERATOR}" MATCHES "^Ninja")
+  if(CMAKE_Swift_COMPILER)
+    _cmake_find_compiler_path(Swift)
+  else()
+    set(CMAKE_Swift_COMPILER_INIT NOTFOUND)
+
+    if(NOT $ENV{SWIFTC} STREQUAL "")
+      get_filename_component(CMAKE_Swift_COMPILER_INIT $ENV{SWIFTC} PROGRAM
+        PROGRAM_ARGS CMAKE_Swift_FLAGS_ENV_INIT)
+      if(CMAKE_Swift_FLAGS_ENV_INIT)
+        set(CMAKE_Swift_COMPILER_ARG1 "${CMAKE_Swift_FLAGS_ENV_INIT}" CACHE
+          STRING "Arguments to the Swift compiler")
+      endif()
+      if(NOT EXISTS ${CMAKE_Swift_COMPILER_INIT})
+        message(FATAL_ERROR "Could not find compiler set in environment variable SWIFTC\n$ENV{SWIFTC}.\n${CMAKE_Swift_COMPILER_INIT}")
+      endif()
+    endif()
+
+    if(NOT CMAKE_Swift_COMPILER_INIT)
+      set(CMAKE_Swift_COMPILER_LIST swiftc ${_CMAKE_TOOLCHAIN_PREFIX}swiftc)
+    endif()
+
+    _cmake_find_compiler(Swift)
+  endif()
+  mark_as_advanced(CMAKE_Swift_COMPILER)
+else()
+  message(FATAL_ERROR "Swift language not supported by \"${CMAKE_GENERATOR}\" generator")
+endif()
+
+# Build a small source file to identify the compiler.
+if(NOT CMAKE_Swift_COMPILER_ID_RUN)
+  set(CMAKE_Swift_COMPILER_ID_RUN 1)
+
+  if("${CMAKE_GENERATOR}" STREQUAL "Xcode")
+    list(APPEND CMAKE_Swift_COMPILER_ID_MATCH_VENDORS Apple)
+    set(CMAKE_Swift_COMPILER_ID_MATCH_VENDOR_REGEX_Apple "com.apple.xcode.tools.swift.compiler")
+
+    set(CMAKE_Swift_COMPILER_ID_TOOL_MATCH_REGEX "\nCompileSwift[^\n]*(\n[ \t]+[^\n]*)*\n[ \t]+([^ \t\r\n]+)[^\r\n]* -c[^\r\n]*CompilerIdSwift/CompilerId/main.swift")
+    set(CMAKE_Swift_COMPILER_ID_TOOL_MATCH_INDEX 2)
+  endif()
+
+  # Try to identify the compiler.
+  set(CMAKE_Swift_COMPILER_ID)
+  include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerId.cmake)
+  CMAKE_DETERMINE_COMPILER_ID(Swift "" CompilerId/main.swift)
+endif()
+
+if (NOT _CMAKE_TOOLCHAIN_LOCATION)
+  get_filename_component(_CMAKE_TOOLCHAIN_LOCATION "${CMAKE_Swift_COMPILER}" PATH)
+endif ()
+
+set(_CMAKE_PROCESSING_LANGUAGE "Swift")
+include(CMakeFindBinUtils)
+unset(_CMAKE_PROCESSING_LANGUAGE)
+
+# configure variables set in this file for fast reload later on
+configure_file(${CMAKE_ROOT}/Modules/CMakeSwiftCompiler.cmake.in
+               ${CMAKE_PLATFORM_INFO_DIR}/CMakeSwiftCompiler.cmake @ONLY)
+
+set(CMAKE_Swift_COMPILER_ENV_VAR "SWIFTC")
diff --git a/share/cmake-3.22/Modules/CMakeDetermineSystem.cmake b/share/cmake-3.22/Modules/CMakeDetermineSystem.cmake
new file mode 100644
index 0000000..8c7af06
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeDetermineSystem.cmake
@@ -0,0 +1,197 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# This module is used by the Makefile generator to determine the following variables:
+# CMAKE_SYSTEM_NAME - on unix this is uname -s, for windows it is Windows
+# CMAKE_SYSTEM_VERSION - on unix this is uname -r, for windows it is empty
+# CMAKE_SYSTEM - ${CMAKE_SYSTEM}-${CMAKE_SYSTEM_VERSION}, for windows: ${CMAKE_SYSTEM}
+#
+#  Expected uname -s output:
+#
+# AIX                           AIX
+# BSD/OS                        BSD/OS
+# FreeBSD                       FreeBSD
+# HP-UX                         HP-UX
+# Linux                         Linux
+# GNU/kFreeBSD                  GNU/kFreeBSD
+# NetBSD                        NetBSD
+# OpenBSD                       OpenBSD
+# OFS/1 (Digital Unix)          OSF1
+# SCO OpenServer 5              SCO_SV
+# SCO UnixWare 7                UnixWare
+# SCO UnixWare (pre release 7)  UNIX_SV
+# SCO XENIX                     Xenix
+# Solaris                       SunOS
+# SunOS                         SunOS
+# Tru64                         Tru64
+# Ultrix                        ULTRIX
+# cygwin                        CYGWIN_NT-5.1
+# MSYS                          MSYS_NT-6.1
+# MacOSX                        Darwin
+
+
+# find out on which system cmake runs
+if(CMAKE_HOST_UNIX)
+  find_program(CMAKE_UNAME uname /bin /usr/bin /usr/local/bin )
+  if(CMAKE_UNAME)
+    if(CMAKE_HOST_SYSTEM_NAME STREQUAL "AIX")
+      exec_program(${CMAKE_UNAME} ARGS -v OUTPUT_VARIABLE _CMAKE_HOST_SYSTEM_MAJOR_VERSION)
+      exec_program(${CMAKE_UNAME} ARGS -r OUTPUT_VARIABLE _CMAKE_HOST_SYSTEM_MINOR_VERSION)
+      set(CMAKE_HOST_SYSTEM_VERSION "${_CMAKE_HOST_SYSTEM_MAJOR_VERSION}.${_CMAKE_HOST_SYSTEM_MINOR_VERSION}")
+      unset(_CMAKE_HOST_SYSTEM_MAJOR_VERSION)
+      unset(_CMAKE_HOST_SYSTEM_MINOR_VERSION)
+    else()
+      exec_program(${CMAKE_UNAME} ARGS -r OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_VERSION)
+    endif()
+    if(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|CYGWIN.*|MSYS.*|^GNU$|Android")
+      exec_program(${CMAKE_UNAME} ARGS -m OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_PROCESSOR
+        RETURN_VALUE val)
+    elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin")
+      # If we are running on Apple Silicon, honor CMAKE_APPLE_SILICON_PROCESSOR.
+      if(DEFINED CMAKE_APPLE_SILICON_PROCESSOR)
+        set(_CMAKE_APPLE_SILICON_PROCESSOR "${CMAKE_APPLE_SILICON_PROCESSOR}")
+      elseif(DEFINED ENV{CMAKE_APPLE_SILICON_PROCESSOR})
+        set(_CMAKE_APPLE_SILICON_PROCESSOR "$ENV{CMAKE_APPLE_SILICON_PROCESSOR}")
+      else()
+        set(_CMAKE_APPLE_SILICON_PROCESSOR "")
+      endif()
+      if(_CMAKE_APPLE_SILICON_PROCESSOR)
+        if(";${_CMAKE_APPLE_SILICON_PROCESSOR};" MATCHES "^;(arm64|x86_64);$")
+          execute_process(COMMAND sysctl -q hw.optional.arm64
+            OUTPUT_VARIABLE _sysctl_stdout
+            ERROR_VARIABLE _sysctl_stderr
+            RESULT_VARIABLE _sysctl_result
+            )
+          if(NOT _sysctl_result EQUAL 0 OR NOT _sysctl_stdout MATCHES "hw.optional.arm64: 1")
+            set(_CMAKE_APPLE_SILICON_PROCESSOR "")
+          endif()
+          unset(_sysctl_result)
+          unset(_sysctl_stderr)
+          unset(_sysctl_stdout)
+        endif()
+      endif()
+      if(_CMAKE_APPLE_SILICON_PROCESSOR)
+        set(CMAKE_HOST_SYSTEM_PROCESSOR "${_CMAKE_APPLE_SILICON_PROCESSOR}")
+      else()
+        exec_program(${CMAKE_UNAME} ARGS -m OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_PROCESSOR
+          RETURN_VALUE val)
+      endif()
+      unset(_CMAKE_APPLE_SILICON_PROCESSOR)
+      if(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "Power Macintosh")
+        # OS X ppc 'uname -m' may report 'Power Macintosh' instead of 'powerpc'
+        set(CMAKE_HOST_SYSTEM_PROCESSOR "powerpc")
+      endif()
+    elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "OpenBSD")
+      exec_program(arch ARGS -s OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_PROCESSOR
+        RETURN_VALUE val)
+    else()
+      exec_program(${CMAKE_UNAME} ARGS -p OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_PROCESSOR
+        RETURN_VALUE val)
+      if("${val}" GREATER 0)
+        exec_program(${CMAKE_UNAME} ARGS -m OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_PROCESSOR
+          RETURN_VALUE val)
+      endif()
+    endif()
+    # check the return of the last uname -m or -p
+    if("${val}" GREATER 0)
+        set(CMAKE_HOST_SYSTEM_PROCESSOR "unknown")
+    endif()
+    set(CMAKE_UNAME ${CMAKE_UNAME} CACHE INTERNAL "uname command")
+    # processor may have double quote in the name, and that needs to be removed
+    string(REPLACE "\"" "" CMAKE_HOST_SYSTEM_PROCESSOR "${CMAKE_HOST_SYSTEM_PROCESSOR}")
+    string(REPLACE "/" "_" CMAKE_HOST_SYSTEM_PROCESSOR "${CMAKE_HOST_SYSTEM_PROCESSOR}")
+  endif()
+else()
+  if(CMAKE_HOST_WIN32)
+    if (DEFINED ENV{PROCESSOR_ARCHITEW6432})
+      set (CMAKE_HOST_SYSTEM_PROCESSOR "$ENV{PROCESSOR_ARCHITEW6432}")
+    else()
+      set (CMAKE_HOST_SYSTEM_PROCESSOR "$ENV{PROCESSOR_ARCHITECTURE}")
+    endif()
+  endif()
+endif()
+
+# if a toolchain file is used, the user wants to cross compile.
+# in this case read the toolchain file and keep the CMAKE_HOST_SYSTEM_*
+# variables around so they can be used in CMakeLists.txt.
+# In all other cases, the host and target platform are the same.
+if(CMAKE_TOOLCHAIN_FILE)
+  # at first try to load it as path relative to the directory from which cmake has been run
+  include("${CMAKE_BINARY_DIR}/${CMAKE_TOOLCHAIN_FILE}" OPTIONAL RESULT_VARIABLE _INCLUDED_TOOLCHAIN_FILE)
+  if(NOT _INCLUDED_TOOLCHAIN_FILE)
+     # if the file isn't found there, check the default locations
+     include("${CMAKE_TOOLCHAIN_FILE}" OPTIONAL RESULT_VARIABLE _INCLUDED_TOOLCHAIN_FILE)
+  endif()
+
+  if(_INCLUDED_TOOLCHAIN_FILE)
+    set(CMAKE_TOOLCHAIN_FILE "${_INCLUDED_TOOLCHAIN_FILE}" CACHE FILEPATH "The CMake toolchain file" FORCE)
+  else()
+    message(FATAL_ERROR "Could not find toolchain file: ${CMAKE_TOOLCHAIN_FILE}")
+    set(CMAKE_TOOLCHAIN_FILE "NOTFOUND" CACHE FILEPATH "The CMake toolchain file" FORCE)
+  endif()
+endif()
+
+
+# if CMAKE_SYSTEM_NAME is here already set, either it comes from a toolchain file
+# or it was set via -DCMAKE_SYSTEM_NAME=...
+# if that's the case, assume we are crosscompiling
+if(CMAKE_SYSTEM_NAME)
+  if(NOT DEFINED CMAKE_CROSSCOMPILING)
+    set(CMAKE_CROSSCOMPILING TRUE)
+  endif()
+  set(PRESET_CMAKE_SYSTEM_NAME TRUE)
+elseif(CMAKE_VS_WINCE_VERSION)
+  set(CMAKE_SYSTEM_NAME      "WindowsCE")
+  set(CMAKE_SYSTEM_VERSION   "${CMAKE_VS_WINCE_VERSION}")
+  set(CMAKE_SYSTEM_PROCESSOR "${MSVC_C_ARCHITECTURE_ID}")
+  set(CMAKE_CROSSCOMPILING TRUE)
+  set(PRESET_CMAKE_SYSTEM_NAME TRUE)
+else()
+  set(CMAKE_SYSTEM_NAME      "${CMAKE_HOST_SYSTEM_NAME}")
+  if(NOT DEFINED CMAKE_SYSTEM_VERSION)
+    set(CMAKE_SYSTEM_VERSION "${CMAKE_HOST_SYSTEM_VERSION}")
+  endif()
+  set(CMAKE_SYSTEM_PROCESSOR "${CMAKE_HOST_SYSTEM_PROCESSOR}")
+  set(CMAKE_CROSSCOMPILING FALSE)
+  set(PRESET_CMAKE_SYSTEM_NAME FALSE)
+endif()
+
+include(Platform/${CMAKE_SYSTEM_NAME}-Determine OPTIONAL)
+
+set(CMAKE_SYSTEM ${CMAKE_SYSTEM_NAME})
+if(CMAKE_SYSTEM_VERSION)
+  string(APPEND CMAKE_SYSTEM -${CMAKE_SYSTEM_VERSION})
+endif()
+set(CMAKE_HOST_SYSTEM ${CMAKE_HOST_SYSTEM_NAME})
+if(CMAKE_HOST_SYSTEM_VERSION)
+  string(APPEND CMAKE_HOST_SYSTEM -${CMAKE_HOST_SYSTEM_VERSION})
+endif()
+
+# this file is also executed from cpack, then we don't need to generate these files
+# in this case there is no CMAKE_BINARY_DIR
+if(CMAKE_BINARY_DIR)
+  # write entry to the log file
+  if(PRESET_CMAKE_SYSTEM_NAME)
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+                "The target system is: ${CMAKE_SYSTEM_NAME} - ${CMAKE_SYSTEM_VERSION} - ${CMAKE_SYSTEM_PROCESSOR}\n")
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+                "The host system is: ${CMAKE_HOST_SYSTEM_NAME} - ${CMAKE_HOST_SYSTEM_VERSION} - ${CMAKE_HOST_SYSTEM_PROCESSOR}\n")
+  else()
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+                "The system is: ${CMAKE_SYSTEM_NAME} - ${CMAKE_SYSTEM_VERSION} - ${CMAKE_SYSTEM_PROCESSOR}\n")
+  endif()
+
+  # if a toolchain file is used, it needs to be included in the configured file,
+  # so settings done there are also available if they don't go in the cache and in try_compile()
+  set(INCLUDE_CMAKE_TOOLCHAIN_FILE_IF_REQUIRED)
+  if(CMAKE_TOOLCHAIN_FILE)
+    set(INCLUDE_CMAKE_TOOLCHAIN_FILE_IF_REQUIRED "include(\"${CMAKE_TOOLCHAIN_FILE}\")")
+  endif()
+
+  # configure variables set in this file for fast reload, the template file is defined at the top of this file
+  configure_file(${CMAKE_ROOT}/Modules/CMakeSystem.cmake.in
+                ${CMAKE_PLATFORM_INFO_DIR}/CMakeSystem.cmake
+                @ONLY)
+
+endif()
diff --git a/share/cmake-3.18/Modules/CMakeDetermineVSServicePack.cmake b/share/cmake-3.22/Modules/CMakeDetermineVSServicePack.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeDetermineVSServicePack.cmake
rename to share/cmake-3.22/Modules/CMakeDetermineVSServicePack.cmake
diff --git a/share/cmake-3.18/Modules/CMakeExpandImportedTargets.cmake b/share/cmake-3.22/Modules/CMakeExpandImportedTargets.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeExpandImportedTargets.cmake
rename to share/cmake-3.22/Modules/CMakeExpandImportedTargets.cmake
diff --git a/share/cmake-3.18/Modules/CMakeExportBuildSettings.cmake b/share/cmake-3.22/Modules/CMakeExportBuildSettings.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeExportBuildSettings.cmake
rename to share/cmake-3.22/Modules/CMakeExportBuildSettings.cmake
diff --git a/share/cmake-3.22/Modules/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake b/share/cmake-3.22/Modules/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake
new file mode 100644
index 0000000..f90301b
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake
@@ -0,0 +1,114 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# This file is included by CMakeFindEclipseCDT4.cmake and CMakeFindCodeBlocks.cmake
+
+# The Eclipse and the CodeBlocks generators need to know the standard include path
+# so that they can find the headers at runtime and parsing etc. works better
+# This is done here by actually running gcc with the options so it prints its
+# system include directories, which are parsed then and stored in the cache.
+macro(_DETERMINE_GCC_SYSTEM_INCLUDE_DIRS _lang _resultIncludeDirs _resultDefines)
+  set(${_resultIncludeDirs})
+  set(_gccOutput)
+  file(WRITE "${CMAKE_BINARY_DIR}/CMakeFiles/dummy" "\n" )
+
+  if (${_lang} STREQUAL "c++")
+    set(_compilerExecutable "${CMAKE_CXX_COMPILER}")
+    set(_arg1 "${CMAKE_CXX_COMPILER_ARG1}")
+
+    if (CMAKE_CXX_FLAGS MATCHES "(-stdlib=[^ ]+)")
+      set(_stdlib "${CMAKE_MATCH_1}")
+    endif ()
+    if (CMAKE_CXX_FLAGS MATCHES "(-std=[^ ]+)")
+      set(_stdver "${CMAKE_MATCH_1}")
+    endif ()
+  else ()
+    set(_compilerExecutable "${CMAKE_C_COMPILER}")
+    set(_arg1 "${CMAKE_C_COMPILER_ARG1}")
+  endif ()
+  separate_arguments(_arg1 NATIVE_COMMAND "${_arg1}")
+  execute_process(COMMAND ${_compilerExecutable} ${_arg1} ${_stdver} ${_stdlib} -v -E -x ${_lang} -dD dummy
+                  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles
+                  ERROR_VARIABLE _gccOutput
+                  OUTPUT_VARIABLE _gccStdout )
+  file(REMOVE "${CMAKE_BINARY_DIR}/CMakeFiles/dummy")
+
+  # First find the system include dirs:
+  if( "${_gccOutput}" MATCHES "> search starts here[^\n]+\n *(.+ *\n) *End of (search) list" )
+
+    # split the output into lines and then remove leading and trailing spaces from each of them:
+    string(REGEX MATCHALL "[^\n]+\n" _includeLines "${CMAKE_MATCH_1}")
+    foreach(nextLine ${_includeLines})
+      # on OSX, gcc says things like this:  "/System/Library/Frameworks (framework directory)", strip the last part
+      string(REGEX REPLACE "\\(framework directory\\)" "" nextLineNoFramework "${nextLine}")
+      # strip spaces at the beginning and the end
+      string(STRIP "${nextLineNoFramework}" _includePath)
+      list(APPEND ${_resultIncludeDirs} "${_includePath}")
+    endforeach()
+
+  endif()
+
+
+  # now find the builtin macros:
+  string(REGEX MATCHALL "#define[^\n]+\n" _defineLines "${_gccStdout}")
+# A few example lines which the regexp below has to match properly:
+#  #define   MAX(a,b) ((a) > (b) ? (a) : (b))
+#  #define __fastcall __attribute__((__fastcall__))
+#  #define   FOO (23)
+#  #define __UINTMAX_TYPE__ long long unsigned int
+#  #define __UINTMAX_TYPE__ long long unsigned int
+#  #define __i386__  1
+
+  foreach(nextLine ${_defineLines})
+    string(REGEX MATCH "^#define +([A-Za-z_][A-Za-z0-9_]*)(\\([^\\)]+\\))? +(.+) *$" _dummy "${nextLine}")
+    set(_name "${CMAKE_MATCH_1}${CMAKE_MATCH_2}")
+    string(STRIP "${CMAKE_MATCH_3}" _value)
+    #message(STATUS "m1: -${CMAKE_MATCH_1}- m2: -${CMAKE_MATCH_2}- m3: -${CMAKE_MATCH_3}-")
+
+    list(APPEND ${_resultDefines} "${_name}")
+    if ("${_value}" STREQUAL "")
+      list(APPEND ${_resultDefines} " ")
+    else()
+      list(APPEND ${_resultDefines} "${_value}")
+    endif()
+  endforeach()
+
+endmacro()
+
+# Save the current LC_ALL, LC_MESSAGES, and LANG environment variables and set them
+# to "C" that way GCC's "search starts here" text is in English and we can grok it.
+set(_orig_lc_all      $ENV{LC_ALL})
+set(_orig_lc_messages $ENV{LC_MESSAGES})
+set(_orig_lang        $ENV{LANG})
+
+set(ENV{LC_ALL}      C)
+set(ENV{LC_MESSAGES} C)
+set(ENV{LANG}        C)
+
+# Now check for C, works for gcc and Intel compiler at least
+if (NOT CMAKE_EXTRA_GENERATOR_C_SYSTEM_INCLUDE_DIRS)
+  if (CMAKE_C_COMPILER_ID MATCHES GNU  OR  CMAKE_C_COMPILER_ID MATCHES "Intel"  OR  CMAKE_C_COMPILER_ID MATCHES Clang)
+    _DETERMINE_GCC_SYSTEM_INCLUDE_DIRS(c _dirs _defines)
+    set(CMAKE_EXTRA_GENERATOR_C_SYSTEM_INCLUDE_DIRS "${_dirs}" CACHE INTERNAL "C compiler system include directories")
+    set(CMAKE_EXTRA_GENERATOR_C_SYSTEM_DEFINED_MACROS "${_defines}" CACHE INTERNAL "C compiler system defined macros")
+  elseif ("${CMAKE_C_COMPILER_ID}" MATCHES MSVC)
+    set(CMAKE_EXTRA_GENERATOR_C_SYSTEM_INCLUDE_DIRS "$ENV{INCLUDE}" CACHE INTERNAL "C compiler system include directories")
+  endif ()
+endif ()
+
+# And now the same for C++
+if (NOT CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_INCLUDE_DIRS)
+  if ("${CMAKE_CXX_COMPILER_ID}" MATCHES GNU  OR  "${CMAKE_CXX_COMPILER_ID}" MATCHES "Intel"  OR  "${CMAKE_CXX_COMPILER_ID}" MATCHES Clang)
+    _DETERMINE_GCC_SYSTEM_INCLUDE_DIRS(c++ _dirs _defines)
+    set(CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_INCLUDE_DIRS "${_dirs}" CACHE INTERNAL "CXX compiler system include directories")
+    set(CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_DEFINED_MACROS "${_defines}" CACHE INTERNAL "CXX compiler system defined macros")
+  elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES MSVC)
+    set(CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_INCLUDE_DIRS "$ENV{INCLUDE}" CACHE INTERNAL "CXX compiler system include directories")
+  endif ()
+endif ()
+
+# Restore original LC_ALL, LC_MESSAGES, and LANG
+set(ENV{LC_ALL}      ${_orig_lc_all})
+set(ENV{LC_MESSAGES} ${_orig_lc_messages})
+set(ENV{LANG}        ${_orig_lang})
diff --git a/share/cmake-3.22/Modules/CMakeFindBinUtils.cmake b/share/cmake-3.22/Modules/CMakeFindBinUtils.cmake
new file mode 100644
index 0000000..6c81754
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeFindBinUtils.cmake
@@ -0,0 +1,250 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# search for additional tools required for C/C++ (and other languages ?)
+#
+# If the internal cmake variable _CMAKE_TOOLCHAIN_PREFIX is set, this is used
+# as prefix for the tools (e.g. arm-elf-gcc etc.)
+# If the cmake variable _CMAKE_TOOLCHAIN_LOCATION is set, the compiler is
+# searched only there. The other tools are at first searched there, then
+# also in the default locations.
+#
+# Sets the following variables:
+#   CMAKE_AR
+#   CMAKE_RANLIB
+#   CMAKE_LINKER
+#   CMAKE_MT
+#   CMAKE_STRIP
+#   CMAKE_INSTALL_NAME_TOOL
+
+# on UNIX, cygwin and mingw
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0057 NEW) # if IN_LIST
+
+# Resolve full path of CMAKE_TOOL from user-defined name and SEARCH_PATH.
+function(__resolve_tool_path CMAKE_TOOL SEARCH_PATH DOCSTRING)
+
+  if(${CMAKE_TOOL})
+    # We only get here if CMAKE_TOOL was
+    # specified using -D or a pre-made CMakeCache.txt (e.g. via ctest)
+    # or set in CMAKE_TOOLCHAIN_FILE.
+
+    get_filename_component(_CMAKE_USER_TOOL_PATH "${${CMAKE_TOOL}}" DIRECTORY)
+    # Is CMAKE_TOOL a user-defined name instead of a full path?
+    if(NOT _CMAKE_USER_TOOL_PATH)
+
+      # Find CMAKE_TOOL in the SEARCH_PATH directory by user-defined name.
+      find_program(_CMAKE_TOOL_WITH_PATH NAMES ${${CMAKE_TOOL}} HINTS ${SEARCH_PATH} NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH)
+      if(_CMAKE_TOOL_WITH_PATH)
+
+        # Overwrite CMAKE_TOOL with full path found in SEARCH_PATH.
+        set(${CMAKE_TOOL} ${_CMAKE_TOOL_WITH_PATH} PARENT_SCOPE)
+
+        get_property(_CMAKE_TOOL_CACHED CACHE ${CMAKE_TOOL} PROPERTY TYPE)
+        # If CMAKE_TOOL is present in the CMake Cache, then overwrit it as well.
+        if(_CMAKE_TOOL_CACHED)
+          set(${CMAKE_TOOL} "${_CMAKE_TOOL_WITH_PATH}" CACHE STRING ${DOCSTRING} FORCE)
+        endif()
+
+      endif()
+      unset(_CMAKE_TOOL_WITH_PATH CACHE)
+
+    endif()
+
+  endif()
+
+endfunction()
+
+__resolve_tool_path(CMAKE_LINKER "${_CMAKE_TOOLCHAIN_LOCATION}" "Default Linker")
+__resolve_tool_path(CMAKE_MT     "${_CMAKE_TOOLCHAIN_LOCATION}" "Default Manifest Tool")
+
+set(_CMAKE_TOOL_VARS "")
+
+# if it's the MS C/CXX compiler, search for link
+if(("x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_SIMULATE_ID}" STREQUAL "xMSVC" AND
+   ("x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_FRONTEND_VARIANT}" STREQUAL "xMSVC"
+    OR NOT "x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" STREQUAL "xClang"))
+   OR "x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" STREQUAL "xMSVC"
+   OR (CMAKE_HOST_WIN32 AND "x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" STREQUAL "xPGI")
+   OR (CMAKE_HOST_WIN32 AND "x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" STREQUAL "xNVIDIA")
+   OR (CMAKE_HOST_WIN32 AND "x${_CMAKE_PROCESSING_LANGUAGE}" STREQUAL "xISPC")
+   OR (CMAKE_GENERATOR MATCHES "Visual Studio"
+       AND NOT CMAKE_VS_PLATFORM_NAME STREQUAL "Tegra-Android"))
+
+  # Start with the canonical names.
+  set(_CMAKE_LINKER_NAMES "link")
+  set(_CMAKE_AR_NAMES "lib")
+  set(_CMAKE_MT_NAMES "mt")
+
+  # Prepend toolchain-specific names.
+  if("x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" STREQUAL "xClang")
+    set(_CMAKE_NM_NAMES "llvm-nm" "nm")
+    list(PREPEND _CMAKE_AR_NAMES "llvm-lib")
+    list(PREPEND _CMAKE_MT_NAMES "llvm-mt")
+    list(PREPEND _CMAKE_LINKER_NAMES "lld-link")
+    list(APPEND _CMAKE_TOOL_VARS NM)
+  elseif("x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" STREQUAL "xIntel")
+    list(PREPEND _CMAKE_AR_NAMES "xilib")
+    list(PREPEND _CMAKE_LINKER_NAMES "xilink")
+  endif()
+
+  list(APPEND _CMAKE_TOOL_VARS LINKER MT AR)
+
+elseif("x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" MATCHES "^x(Open)?Watcom$")
+  set(_CMAKE_LINKER_NAMES "wlink")
+  set(_CMAKE_AR_NAMES "wlib")
+  list(APPEND _CMAKE_TOOL_VARS LINKER AR)
+
+elseif("x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" MATCHES "^xIAR$")
+  # Small helper declaring an IAR tool (e.g. linker) to avoid repeating the same idiom every time
+  macro(__append_IAR_tool TOOL_VAR NAME)
+    set(_CMAKE_${TOOL_VAR}_NAMES "${NAME}" "${NAME}.exe")
+    list(APPEND _CMAKE_TOOL_VARS ${TOOL_VAR})
+  endmacro()
+
+  # Resolve hint path from an IAR compiler
+  function(__resolve_IAR_hints COMPILER RESULT)
+    get_filename_component(_CMAKE_IAR_HINT "${COMPILER}" REALPATH)
+    get_filename_component(_CMAKE_IAR_HINT "${_CMAKE_IAR_HINT}" DIRECTORY)
+    list(APPEND _IAR_HINTS "${_CMAKE_IAR_HINT}")
+
+    get_filename_component(_CMAKE_IAR_HINT "${COMPILER}" DIRECTORY)
+    list(APPEND _IAR_HINTS "${_CMAKE_IAR_HINT}")
+
+    set(${RESULT} "${_IAR_HINTS}" PARENT_SCOPE)
+  endfunction()
+
+  __resolve_IAR_hints("${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER}" _CMAKE_TOOLCHAIN_LOCATION)
+  set(_CMAKE_IAR_ITOOLS "ARM" "RX" "RH850" "RL78" "RISCV" "RISC-V" "STM8")
+  set(_CMAKE_IAR_XTOOLS "AVR" "MSP430" "V850" "8051")
+
+  if("${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ARCHITECTURE_ID}" IN_LIST _CMAKE_IAR_ITOOLS)
+    string(TOLOWER "${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ARCHITECTURE_ID}" _CMAKE_IAR_LOWER_ARCHITECTURE_ID)
+
+    __append_IAR_tool(AR "iarchive")
+    __append_IAR_tool(LINKER "ilink${_CMAKE_IAR_LOWER_ARCHITECTURE_ID}")
+
+    __append_IAR_tool(IAR_ELFDUMP "ielfdump${_CMAKE_IAR_LOWER_ARCHITECTURE_ID}")
+    __append_IAR_tool(IAR_ELFTOOL "ielftool")
+    __append_IAR_tool(IAR_OBJMANIP "iobjmanip")
+    __append_IAR_tool(IAR_SYMEXPORT "isymexport")
+
+    unset(_CMAKE_IAR_LOWER_ARCHITECTURE_ID)
+
+  elseif("${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ARCHITECTURE_ID}" IN_LIST _CMAKE_IAR_XTOOLS)
+    __append_IAR_tool(AR "xar")
+    __append_IAR_tool(LINKER "xlink")
+
+  else()
+    message(FATAL_ERROR "Failed to find linker and librarian for ${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID} on ${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ARCHITECTURE_ID}.")
+  endif()
+
+  unset(_CMAKE_IAR_ITOOLS)
+  unset(_CMAKE_IAR_XTOOLS)
+
+# in all other cases search for ar, ranlib, etc.
+else()
+  if(CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN)
+    set(_CMAKE_TOOLCHAIN_LOCATION ${_CMAKE_TOOLCHAIN_LOCATION} ${CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN}/bin)
+  endif()
+  if(CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN)
+    set(_CMAKE_TOOLCHAIN_LOCATION ${_CMAKE_TOOLCHAIN_LOCATION} ${CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN}/bin)
+  endif()
+
+  # Start with the canonical names.
+  set(_CMAKE_AR_NAMES "ar")
+  set(_CMAKE_RANLIB_NAMES "ranlib")
+  set(_CMAKE_STRIP_NAMES "strip")
+  set(_CMAKE_LINKER_NAMES "ld")
+  set(_CMAKE_NM_NAMES "nm")
+  set(_CMAKE_OBJDUMP_NAMES "objdump")
+  set(_CMAKE_OBJCOPY_NAMES "objcopy")
+  set(_CMAKE_READELF_NAMES "readelf")
+  set(_CMAKE_DLLTOOL_NAMES "dlltool")
+  set(_CMAKE_ADDR2LINE_NAMES "addr2line")
+
+  # Prepend toolchain-specific names.
+  if("${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" STREQUAL Clang)
+    if("x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_SIMULATE_ID}" STREQUAL "xMSVC")
+      list(PREPEND _CMAKE_LINKER_NAMES "lld-link")
+    else()
+      list(PREPEND _CMAKE_LINKER_NAMES "ld.lld")
+    endif()
+    list(PREPEND _CMAKE_AR_NAMES "llvm-ar")
+    list(PREPEND _CMAKE_RANLIB_NAMES "llvm-ranlib")
+    if("${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_VERSION}" VERSION_GREATER_EQUAL 11)
+      # llvm-strip versions prior to 11 require additional flags we do not yet add.
+      list(PREPEND _CMAKE_STRIP_NAMES "llvm-strip")
+    endif()
+    list(PREPEND _CMAKE_NM_NAMES "llvm-nm")
+    if("${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_VERSION}" VERSION_GREATER_EQUAL 9)
+      # llvm-objdump versions prior to 9 did not support everything we need.
+      list(PREPEND _CMAKE_OBJDUMP_NAMES "llvm-objdump")
+    endif()
+    list(PREPEND _CMAKE_OBJCOPY_NAMES "llvm-objcopy")
+    list(PREPEND _CMAKE_READELF_NAMES "llvm-readelf")
+    list(PREPEND _CMAKE_DLLTOOL_NAMES "llvm-dlltool")
+    list(PREPEND _CMAKE_ADDR2LINE_NAMES "llvm-addr2line")
+  elseif("${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" STREQUAL ARMClang)
+    list(PREPEND _CMAKE_AR_NAMES "armar")
+    list(PREPEND _CMAKE_LINKER_NAMES "armlink")
+  endif()
+
+  list(APPEND _CMAKE_TOOL_VARS AR RANLIB STRIP LINKER NM OBJDUMP OBJCOPY READELF DLLTOOL ADDR2LINE)
+endif()
+
+foreach(_CMAKE_TOOL IN LISTS _CMAKE_TOOL_VARS)
+  # Build the final list of prefixed/suffixed names.
+  set(_CMAKE_${_CMAKE_TOOL}_FIND_NAMES "")
+  foreach(_CMAKE_TOOL_NAME IN LISTS _CMAKE_${_CMAKE_TOOL}_NAMES)
+    list(APPEND _CMAKE_${_CMAKE_TOOL}_FIND_NAMES
+      ${_CMAKE_TOOLCHAIN_PREFIX}${_CMAKE_TOOL_NAME}${_CMAKE_TOOLCHAIN_SUFFIX}
+      ${_CMAKE_TOOLCHAIN_PREFIX}${_CMAKE_TOOL_NAME}
+      ${_CMAKE_TOOL_NAME}${_CMAKE_TOOLCHAIN_SUFFIX}
+      ${_CMAKE_TOOL_NAME}
+      )
+  endforeach()
+  list(REMOVE_DUPLICATES _CMAKE_${_CMAKE_TOOL}_FIND_NAMES)
+
+  find_program(CMAKE_${_CMAKE_TOOL} NAMES ${_CMAKE_${_CMAKE_TOOL}_FIND_NAMES} HINTS ${_CMAKE_TOOLCHAIN_LOCATION} NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH)
+  unset(_CMAKE_${_CMAKE_TOOL}_FIND_NAMES)
+endforeach()
+
+if(NOT CMAKE_RANLIB)
+    set(CMAKE_RANLIB : CACHE INTERNAL "noop for ranlib")
+endif()
+
+
+if(CMAKE_PLATFORM_HAS_INSTALLNAME)
+  find_program(CMAKE_INSTALL_NAME_TOOL NAMES ${_CMAKE_TOOLCHAIN_PREFIX}install_name_tool HINTS ${_CMAKE_TOOLCHAIN_LOCATION} NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH)
+
+  if(NOT CMAKE_INSTALL_NAME_TOOL)
+    message(FATAL_ERROR "Could not find install_name_tool, please check your installation.")
+  endif()
+
+  list(APPEND _CMAKE_TOOL_VARS INSTALL_NAME_TOOL)
+endif()
+
+# Mark any tool cache entries as advanced.
+foreach(_CMAKE_TOOL IN LISTS _CMAKE_TOOL_VARS)
+  get_property(_CMAKE_TOOL_CACHED CACHE CMAKE_${_CMAKE_TOOL} PROPERTY TYPE)
+  if(_CMAKE_TOOL_CACHED)
+    mark_as_advanced(CMAKE_${_CMAKE_TOOL})
+  endif()
+  unset(_CMAKE_${_CMAKE_TOOL}_NAMES)
+endforeach()
+unset(_CMAKE_TOOL_VARS)
+unset(_CMAKE_TOOL_CACHED)
+unset(_CMAKE_TOOL_NAME)
+unset(_CMAKE_TOOL)
+
+if("x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" MATCHES "^xIAR$")
+  # Set for backwards compatibility
+  set(CMAKE_IAR_ARCHIVE "${CMAKE_AR}" CACHE FILEPATH "The IAR archiver")
+  set(CMAKE_IAR_LINKER "${CMAKE_LINKER}" CACHE FILEPATH "The IAR ILINK linker")
+  mark_as_advanced(CMAKE_IAR_LINKER CMAKE_IAR_AR)
+endif()
+
+cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/CMakeFindCodeBlocks.cmake b/share/cmake-3.22/Modules/CMakeFindCodeBlocks.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeFindCodeBlocks.cmake
rename to share/cmake-3.22/Modules/CMakeFindCodeBlocks.cmake
diff --git a/share/cmake-3.18/Modules/CMakeFindDependencyMacro.cmake b/share/cmake-3.22/Modules/CMakeFindDependencyMacro.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeFindDependencyMacro.cmake
rename to share/cmake-3.22/Modules/CMakeFindDependencyMacro.cmake
diff --git a/share/cmake-3.18/Modules/CMakeFindEclipseCDT4.cmake b/share/cmake-3.22/Modules/CMakeFindEclipseCDT4.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeFindEclipseCDT4.cmake
rename to share/cmake-3.22/Modules/CMakeFindEclipseCDT4.cmake
diff --git a/share/cmake-3.18/Modules/CMakeFindFrameworks.cmake b/share/cmake-3.22/Modules/CMakeFindFrameworks.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeFindFrameworks.cmake
rename to share/cmake-3.22/Modules/CMakeFindFrameworks.cmake
diff --git a/share/cmake-3.18/Modules/CMakeFindJavaCommon.cmake b/share/cmake-3.22/Modules/CMakeFindJavaCommon.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeFindJavaCommon.cmake
rename to share/cmake-3.22/Modules/CMakeFindJavaCommon.cmake
diff --git a/share/cmake-3.18/Modules/CMakeFindKate.cmake b/share/cmake-3.22/Modules/CMakeFindKate.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeFindKate.cmake
rename to share/cmake-3.22/Modules/CMakeFindKate.cmake
diff --git a/share/cmake-3.22/Modules/CMakeFindPackageMode.cmake b/share/cmake-3.22/Modules/CMakeFindPackageMode.cmake
new file mode 100644
index 0000000..726e2a2
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeFindPackageMode.cmake
@@ -0,0 +1,204 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CMakeFindPackageMode
+--------------------
+
+
+
+This file is executed by cmake when invoked with --find-package.  It
+expects that the following variables are set using -D:
+
+``NAME``
+  name of the package
+``COMPILER_ID``
+  the CMake compiler ID for which the result is,
+  i.e. GNU/Intel/Clang/MSVC, etc.
+``LANGUAGE``
+  language for which the result will be used,
+  i.e. C/CXX/Fortran/ASM
+``MODE``
+  ``EXIST``
+    only check for existence of the given package
+  ``COMPILE``
+    print the flags needed for compiling an object file which uses
+    the given package
+  ``LINK``
+    print the flags needed for linking when using the given package
+``QUIET``
+  if TRUE, don't print anything
+#]=======================================================================]
+
+if(NOT NAME)
+  message(FATAL_ERROR "Name of the package to be searched not specified. Set the CMake variable NAME, e.g. -DNAME=JPEG .")
+endif()
+
+if(NOT COMPILER_ID)
+  message(FATAL_ERROR "COMPILER_ID argument not specified. In doubt, use GNU.")
+endif()
+
+if(NOT LANGUAGE)
+  message(FATAL_ERROR "LANGUAGE argument not specified. Use C, CXX or Fortran.")
+endif()
+
+if(NOT MODE)
+  message(FATAL_ERROR "MODE argument not specified. Use either EXIST, COMPILE or LINK.")
+endif()
+
+# require the current version. If we don't do this, Platforms/CYGWIN.cmake complains because
+# it doesn't know whether it should set WIN32 or not:
+cmake_minimum_required(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} )
+
+macro(ENABLE_LANGUAGE)
+  # disable the enable_language() command, otherwise --find-package breaks on Windows.
+  # On Windows, enable_language(RC) is called in the platform files unconditionally.
+  # But in --find-package mode, we don't want (and can't) enable any language.
+endmacro()
+
+set(CMAKE_PLATFORM_INFO_DIR ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY})
+
+include(CMakeDetermineSystem)
+
+# short-cut some tests on Darwin, see Darwin-GNU.cmake:
+if("${CMAKE_SYSTEM_NAME}" MATCHES Darwin  AND  "${COMPILER_ID}" MATCHES GNU)
+  set(CMAKE_${LANGUAGE}_SYSROOT_FLAG "")
+  set(CMAKE_${LANGUAGE}_OSX_DEPLOYMENT_TARGET_FLAG "")
+endif()
+
+include(CMakeSystemSpecificInitialize)
+
+# Also load the system specific file, which sets up e.g. the search paths.
+# This makes the FIND_XXX() calls work much better
+include(CMakeSystemSpecificInformation)
+
+if(UNIX)
+
+  # try to guess whether we have a 64bit system, if it has not been set
+  # from the outside
+  if(NOT CMAKE_SIZEOF_VOID_P)
+    set(CMAKE_SIZEOF_VOID_P 4)
+    if(EXISTS ${CMAKE_SYSROOT}/usr/lib64)
+      set(CMAKE_SIZEOF_VOID_P 8)
+    else()
+      # use the file utility to check whether itself is 64 bit:
+      find_program(FILE_EXECUTABLE file)
+      if(FILE_EXECUTABLE)
+        get_filename_component(FILE_ABSPATH "${FILE_EXECUTABLE}" ABSOLUTE)
+        execute_process(COMMAND "${FILE_ABSPATH}" "${FILE_ABSPATH}" OUTPUT_VARIABLE fileOutput ERROR_QUIET)
+        if("${fileOutput}" MATCHES "64-bit")
+          set(CMAKE_SIZEOF_VOID_P 8)
+        endif()
+      endif()
+    endif()
+  endif()
+
+  # guess Debian multiarch if it has not been set:
+  if(EXISTS /etc/debian_version)
+    if(NOT CMAKE_${LANGUAGE}_LIBRARY_ARCHITECTURE )
+      file(GLOB filesInLib RELATIVE /lib /lib/*-linux-gnu* )
+      foreach(file ${filesInLib})
+        if("${file}" MATCHES "${CMAKE_LIBRARY_ARCHITECTURE_REGEX}")
+          set(CMAKE_${LANGUAGE}_LIBRARY_ARCHITECTURE ${file})
+          break()
+        endif()
+      endforeach()
+    endif()
+    if(NOT CMAKE_LIBRARY_ARCHITECTURE)
+      set(CMAKE_LIBRARY_ARCHITECTURE ${CMAKE_${LANGUAGE}_LIBRARY_ARCHITECTURE})
+    endif()
+  endif()
+
+endif()
+
+set(CMAKE_${LANGUAGE}_COMPILER "dummy")
+set(CMAKE_${LANGUAGE}_COMPILER_ID "${COMPILER_ID}")
+include(CMake${LANGUAGE}Information)
+
+
+function(set_compile_flags_var _packageName)
+  string(TOUPPER "${_packageName}" PACKAGE_NAME)
+  # Check the following variables:
+  # FOO_INCLUDE_DIRS
+  # Foo_INCLUDE_DIRS
+  # FOO_INCLUDES
+  # Foo_INCLUDES
+  # FOO_INCLUDE_DIR
+  # Foo_INCLUDE_DIR
+  set(includes)
+  if(DEFINED ${_packageName}_INCLUDE_DIRS)
+    set(includes ${_packageName}_INCLUDE_DIRS)
+  elseif(DEFINED ${PACKAGE_NAME}_INCLUDE_DIRS)
+    set(includes ${PACKAGE_NAME}_INCLUDE_DIRS)
+  elseif(DEFINED ${_packageName}_INCLUDES)
+    set(includes ${_packageName}_INCLUDES)
+  elseif(DEFINED ${PACKAGE_NAME}_INCLUDES)
+    set(includes ${PACKAGE_NAME}_INCLUDES)
+  elseif(DEFINED ${_packageName}_INCLUDE_DIR)
+    set(includes ${_packageName}_INCLUDE_DIR)
+  elseif(DEFINED ${PACKAGE_NAME}_INCLUDE_DIR)
+    set(includes ${PACKAGE_NAME}_INCLUDE_DIR)
+  endif()
+
+  set(PACKAGE_INCLUDE_DIRS "${${includes}}" PARENT_SCOPE)
+
+  # Check the following variables:
+  # FOO_DEFINITIONS
+  # Foo_DEFINITIONS
+  set(definitions)
+  if(DEFINED ${_packageName}_DEFINITIONS)
+    set(definitions ${_packageName}_DEFINITIONS)
+  elseif(DEFINED ${PACKAGE_NAME}_DEFINITIONS)
+    set(definitions ${PACKAGE_NAME}_DEFINITIONS)
+  endif()
+
+  set(PACKAGE_DEFINITIONS  "${${definitions}}" )
+
+endfunction()
+
+
+function(set_link_flags_var _packageName)
+  string(TOUPPER "${_packageName}" PACKAGE_NAME)
+  # Check the following variables:
+  # FOO_LIBRARIES
+  # Foo_LIBRARIES
+  # FOO_LIBS
+  # Foo_LIBS
+  set(libs)
+  if(DEFINED ${_packageName}_LIBRARIES)
+    set(libs ${_packageName}_LIBRARIES)
+  elseif(DEFINED ${PACKAGE_NAME}_LIBRARIES)
+    set(libs ${PACKAGE_NAME}_LIBRARIES)
+  elseif(DEFINED ${_packageName}_LIBS)
+    set(libs ${_packageName}_LIBS)
+  elseif(DEFINED ${PACKAGE_NAME}_LIBS)
+    set(libs ${PACKAGE_NAME}_LIBS)
+  endif()
+
+  set(PACKAGE_LIBRARIES "${${libs}}" PARENT_SCOPE )
+
+endfunction()
+
+
+find_package("${NAME}" QUIET)
+
+set(PACKAGE_FOUND FALSE)
+
+string(TOUPPER "${NAME}" UPPERCASE_NAME)
+
+if(${NAME}_FOUND  OR  ${UPPERCASE_NAME}_FOUND)
+  set(PACKAGE_FOUND TRUE)
+
+  if("${MODE}" STREQUAL "EXIST")
+    # do nothing
+  elseif("${MODE}" STREQUAL "COMPILE")
+    set_compile_flags_var(${NAME})
+  elseif("${MODE}" STREQUAL "LINK")
+    set_link_flags_var(${NAME})
+  else()
+    message(FATAL_ERROR "Invalid mode argument ${MODE} given.")
+  endif()
+
+endif()
+
+set(PACKAGE_QUIET ${SILENT} )
diff --git a/share/cmake-3.18/Modules/CMakeFindSublimeText2.cmake b/share/cmake-3.22/Modules/CMakeFindSublimeText2.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeFindSublimeText2.cmake
rename to share/cmake-3.22/Modules/CMakeFindSublimeText2.cmake
diff --git a/share/cmake-3.18/Modules/CMakeFindWMake.cmake b/share/cmake-3.22/Modules/CMakeFindWMake.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeFindWMake.cmake
rename to share/cmake-3.22/Modules/CMakeFindWMake.cmake
diff --git a/share/cmake-3.18/Modules/CMakeFindXCode.cmake b/share/cmake-3.22/Modules/CMakeFindXCode.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeFindXCode.cmake
rename to share/cmake-3.22/Modules/CMakeFindXCode.cmake
diff --git a/share/cmake-3.18/Modules/CMakeForceCompiler.cmake b/share/cmake-3.22/Modules/CMakeForceCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeForceCompiler.cmake
rename to share/cmake-3.22/Modules/CMakeForceCompiler.cmake
diff --git a/share/cmake-3.22/Modules/CMakeFortranCompiler.cmake.in b/share/cmake-3.22/Modules/CMakeFortranCompiler.cmake.in
new file mode 100644
index 0000000..97f891e
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeFortranCompiler.cmake.in
@@ -0,0 +1,61 @@
+set(CMAKE_Fortran_COMPILER "@CMAKE_Fortran_COMPILER@")
+set(CMAKE_Fortran_COMPILER_ARG1 "@CMAKE_Fortran_COMPILER_ARG1@")
+set(CMAKE_Fortran_COMPILER_ID "@CMAKE_Fortran_COMPILER_ID@")
+set(CMAKE_Fortran_COMPILER_VERSION "@CMAKE_Fortran_COMPILER_VERSION@")
+set(CMAKE_Fortran_COMPILER_WRAPPER "@CMAKE_Fortran_COMPILER_WRAPPER@")
+set(CMAKE_Fortran_PLATFORM_ID "@CMAKE_Fortran_PLATFORM_ID@")
+set(CMAKE_Fortran_SIMULATE_ID "@CMAKE_Fortran_SIMULATE_ID@")
+set(CMAKE_Fortran_COMPILER_FRONTEND_VARIANT "@CMAKE_Fortran_COMPILER_FRONTEND_VARIANT@")
+set(CMAKE_Fortran_SIMULATE_VERSION "@CMAKE_Fortran_SIMULATE_VERSION@")
+@_SET_CMAKE_Fortran_XL_CPP@
+@_SET_CMAKE_Fortran_COMPILER_ARCHITECTURE_ID@
+@_SET_CMAKE_Fortran_COMPILER_SYSROOT@
+@SET_MSVC_Fortran_ARCHITECTURE_ID@
+set(CMAKE_AR "@CMAKE_AR@")
+set(CMAKE_Fortran_COMPILER_AR "@CMAKE_Fortran_COMPILER_AR@")
+set(CMAKE_RANLIB "@CMAKE_RANLIB@")
+set(CMAKE_Fortran_COMPILER_RANLIB "@CMAKE_Fortran_COMPILER_RANLIB@")
+set(CMAKE_COMPILER_IS_GNUG77 @CMAKE_COMPILER_IS_GNUG77@)
+set(CMAKE_Fortran_COMPILER_LOADED 1)
+set(CMAKE_Fortran_COMPILER_WORKS @CMAKE_Fortran_COMPILER_WORKS@)
+set(CMAKE_Fortran_ABI_COMPILED @CMAKE_Fortran_ABI_COMPILED@)
+
+set(CMAKE_Fortran_COMPILER_ENV_VAR "FC")
+
+set(CMAKE_Fortran_COMPILER_SUPPORTS_F90 @CMAKE_Fortran_COMPILER_SUPPORTS_F90@)
+
+set(CMAKE_Fortran_COMPILER_ID_RUN 1)
+set(CMAKE_Fortran_SOURCE_FILE_EXTENSIONS f;F;fpp;FPP;f77;F77;f90;F90;for;For;FOR;f95;F95)
+set(CMAKE_Fortran_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC)
+set(CMAKE_Fortran_LINKER_PREFERENCE 20)
+if(UNIX)
+  set(CMAKE_Fortran_OUTPUT_EXTENSION .o)
+else()
+  set(CMAKE_Fortran_OUTPUT_EXTENSION .obj)
+endif()
+
+# Save compiler ABI information.
+set(CMAKE_Fortran_SIZEOF_DATA_PTR "@CMAKE_Fortran_SIZEOF_DATA_PTR@")
+set(CMAKE_Fortran_COMPILER_ABI "@CMAKE_Fortran_COMPILER_ABI@")
+set(CMAKE_Fortran_LIBRARY_ARCHITECTURE "@CMAKE_Fortran_LIBRARY_ARCHITECTURE@")
+
+if(CMAKE_Fortran_SIZEOF_DATA_PTR AND NOT CMAKE_SIZEOF_VOID_P)
+  set(CMAKE_SIZEOF_VOID_P "${CMAKE_Fortran_SIZEOF_DATA_PTR}")
+endif()
+
+if(CMAKE_Fortran_COMPILER_ABI)
+  set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_Fortran_COMPILER_ABI}")
+endif()
+
+if(CMAKE_Fortran_LIBRARY_ARCHITECTURE)
+  set(CMAKE_LIBRARY_ARCHITECTURE "@CMAKE_Fortran_LIBRARY_ARCHITECTURE@")
+endif()
+
+@CMAKE_Fortran_COMPILER_CUSTOM_CODE@
+@CMAKE_Fortran_SYSROOT_FLAG_CODE@
+@CMAKE_Fortran_OSX_DEPLOYMENT_TARGET_FLAG_CODE@
+
+set(CMAKE_Fortran_IMPLICIT_INCLUDE_DIRECTORIES "@CMAKE_Fortran_IMPLICIT_INCLUDE_DIRECTORIES@")
+set(CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES "@CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES@")
+set(CMAKE_Fortran_IMPLICIT_LINK_DIRECTORIES "@CMAKE_Fortran_IMPLICIT_LINK_DIRECTORIES@")
+set(CMAKE_Fortran_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "@CMAKE_Fortran_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES@")
diff --git a/share/cmake-3.18/Modules/CMakeFortranCompilerABI.F b/share/cmake-3.22/Modules/CMakeFortranCompilerABI.F
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeFortranCompilerABI.F
rename to share/cmake-3.22/Modules/CMakeFortranCompilerABI.F
diff --git a/share/cmake-3.22/Modules/CMakeFortranCompilerABI.F90 b/share/cmake-3.22/Modules/CMakeFortranCompilerABI.F90
new file mode 100644
index 0000000..4a17153
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeFortranCompilerABI.F90
@@ -0,0 +1,48 @@
+program CMakeFortranCompilerABI
+
+implicit none
+
+integer :: i(1) = 0
+where (i==0) i=1
+if (any(i/=1)) stop 1
+! showing Fortran 90 syntax is OK
+
+#if 0
+! Address Size
+#endif
+#if defined(_LP64)
+PRINT *, 'INFO:sizeof_dptr[8]'
+#elif defined(_M_IA64)
+PRINT *, 'INFO:sizeof_dptr[8]'
+#elif defined(_M_X64)
+PRINT *, 'INFO:sizeof_dptr[8]'
+#elif defined(_M_AMD64)
+PRINT *, 'INFO:sizeof_dptr[8]'
+#elif defined(__x86_64__)
+PRINT *, 'INFO:sizeof_dptr[8]'
+
+#elif defined(_ILP32)
+PRINT *, 'INFO:sizeof_dptr[4]'
+#elif defined(_M_IX86)
+PRINT *, 'INFO:sizeof_dptr[4]'
+#elif defined(__i386__)
+PRINT *, 'INFO:sizeof_dptr[4]'
+
+#elif defined(__SIZEOF_POINTER__) && __SIZEOF_POINTER__ == 8
+PRINT *, 'INFO:sizeof_dptr[8]'
+#elif defined(__SIZEOF_POINTER__) && __SIZEOF_POINTER__ == 4
+PRINT *, 'INFO:sizeof_dptr[4]'
+#elif defined(__SIZEOF_SIZE_T__) && __SIZEOF_SIZE_T__ == 8
+PRINT *, 'INFO:sizeof_dptr[8]'
+#elif defined(__SIZEOF_SIZE_T__) && __SIZEOF_SIZE_T__ == 4
+PRINT *, 'INFO:sizeof_dptr[4]'
+#endif
+
+#if 0
+! Application Binary Interface
+#endif
+#if defined(__ELF__)
+PRINT *, 'INFO:abi[ELF]'
+#endif
+PRINT *, 'ABI Detection'
+end program
diff --git a/share/cmake-3.22/Modules/CMakeFortranCompilerId.F.in b/share/cmake-3.22/Modules/CMakeFortranCompilerId.F.in
new file mode 100644
index 0000000..d0e0e46
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeFortranCompilerId.F.in
@@ -0,0 +1,260 @@
+      PROGRAM CMakeFortranCompilerId
+#if 0
+! Identify the compiler
+#endif
+#if defined(_MSC_VER)
+       PRINT *, 'INFO:simulate[MSVC]'
+# if _MSC_VER >= 1900
+       PRINT *, 'INFO:simulate_version[019.00]'
+# elif _MSC_VER >= 1800
+       PRINT *, 'INFO:simulate_version[018.00]'
+# elif _MSC_VER >= 1700
+       PRINT *, 'INFO:simulate_version[017.00]'
+# elif _MSC_VER >= 1600
+       PRINT *, 'INFO:simulate_version[016.00]'
+# elif _MSC_VER >= 1500
+       PRINT *, 'INFO:simulate_version[015.00]'
+# elif _MSC_VER >= 1400
+       PRINT *, 'INFO:simulate_version[014.00]'
+# elif _MSC_VER >= 1310
+       PRINT *, 'INFO:simulate_version[013.01]'
+# else
+       PRINT *, 'INFO:simulate_version[013.00]'
+# endif
+#endif
+#if defined(__INTEL_LLVM_COMPILER)
+        PRINT *, 'INFO:compiler[IntelLLVM]'
+! __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and
+! later.  Look for 6 digit vs. 8 digit version number to decide encoding.
+! VVVV is no smaller than the current year when a version is released.
+# if __INTEL_LLVM_COMPILER < 1000000
+#  define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100)
+#  define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10)
+#  define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER    % 10)
+# else
+#  define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000)
+#  define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100)
+#  define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER     % 100)
+# endif
+#elif defined(__INTEL_COMPILER) && __INTEL_COMPILER == 201900
+        PRINT *, 'INFO:compiler[IntelLLVM]'
+! ifx 2021.1 forgot to define __INTEL_LLVM_COMPILER.
+! Instead it defines __INTEL_COMPILER == 201900.
+# define COMPILER_VERSION_MAJOR DEC(2021)
+# define COMPILER_VERSION_MINOR DEC(1)
+# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
+# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
+#elif defined(__INTEL_COMPILER) || defined(__ICC)
+        PRINT *, 'INFO:compiler[Intel]'
+! __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later.
+# if __INTEL_COMPILER < 2021
+#  define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)
+#  define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)
+#  if defined(__INTEL_COMPILER_UPDATE)
+#   define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
+#  else
+#   define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER   % 10)
+#  endif
+# else
+#  define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER)
+#  define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE)
+!  The third version component from --version is an update index,
+!  but no macro is provided for it.
+#  define COMPILER_VERSION_PATCH DEC(0)
+# endif
+# if defined(__INTEL_COMPILER_BUILD_DATE)
+#  define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
+# endif
+#elif defined(__SUNPRO_F95)
+        PRINT *, 'INFO:compiler[SunPro]'
+# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_F95>>8)
+# define COMPILER_VERSION_MINOR HEX(__SUNPRO_F95>>4 & 0xF)
+# define COMPILER_VERSION_PATCH HEX(__SUNPRO_F95    & 0xF)
+#elif defined(__SUNPRO_F90)
+        PRINT *, 'INFO:compiler[SunPro]'
+# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_F90>>8)
+# define COMPILER_VERSION_MINOR HEX(__SUNPRO_F90>>4 & 0xF)
+# define COMPILER_VERSION_PATCH HEX(__SUNPRO_F90    & 0xF)
+#elif defined(_CRAYFTN)
+        PRINT *, 'INFO:compiler[Cray]'
+# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
+# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
+# if defined(_RELEASE_PATCHLEVEL)
+#  define COMPILER_VERSION_PATCH DEC(_RELEASE_PATCHLEVEL)
+# endif
+#elif defined(__G95__)
+        PRINT *, 'INFO:compiler[G95]'
+# define COMPILER_VERSION_MAJOR DEC(__G95__)
+# define COMPILER_VERSION_MINOR DEC(__G95_MINOR__)
+#elif defined(__PATHSCALE__)
+        PRINT *, 'INFO:compiler[PathScale]'
+# define COMPILER_VERSION_MAJOR DEC(__PATHCC__)
+# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)
+# if defined(__PATHCC_PATCHLEVEL__)
+#  define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)
+# endif
+#elif defined(__ABSOFT__)
+        PRINT *, 'INFO:compiler[Absoft]'
+#elif defined(__GNUC__)
+        PRINT *, 'INFO:compiler[GNU]'
+# define COMPILER_VERSION_MAJOR DEC(__GNUC__)
+# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
+# if defined(__GNUC_PATCHLEVEL__)
+#  define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
+# endif
+#elif defined(__IBMC__)
+# if defined(__COMPILER_VER__)
+        PRINT *, 'INFO:compiler[zOS]'
+# elif __IBMC__ >= 800
+        PRINT *, 'INFO:compiler[XL]'
+#  define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
+#  define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
+#  define COMPILER_VERSION_PATCH DEC(__IBMC__    % 10)
+# else
+        PRINT *, 'INFO:compiler[VisualAge]'
+#  define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
+#  define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
+#  define COMPILER_VERSION_PATCH DEC(__IBMC__    % 10)
+# endif
+#elif defined(__NVCOMPILER) || defined(__NVCOMPILER_LLVM__)
+        PRINT *, 'INFO:compiler[NVHPC]'
+# if defined(__NVCOMPILER_MAJOR__)
+#  define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__)
+# else
+#  define COMPILER_VERSION_MAJOR DEC(__PGIC__)
+# endif
+# if defined(__NVCOMPILER_MINOR__)
+#  define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__)
+# else
+#  define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
+# endif
+# if defined(__NVCOMPILER_PATCHLEVEL__)
+#  define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__)
+# elif defined(__PGIC_PATCHLEVEL__)
+#  define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
+# endif
+#elif defined(__PGI)
+        PRINT *, 'INFO:compiler[PGI]'
+# define COMPILER_VERSION_MAJOR DEC(__PGIC__)
+# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
+# if defined(__PGIC_PATCHLEVEL__)
+#  define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
+# endif
+#elif defined(__FLANG)
+        PRINT *, 'INFO:compiler[Flang]'
+# define COMPILER_VERSION_MAJOR DEC(__FLANG_MAJOR__)
+# define COMPILER_VERSION_MINOR DEC(__FLANG_MINOR__)
+# if defined(__FLANG_PATCHLEVEL__)
+#  define COMPILER_VERSION_PATCH DEC(__FLANG_PATCHLEVEL__)
+# endif
+#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
+        PRINT *, 'INFO:compiler[VisualAge]'
+#elif defined(__hpux) || defined(__hpux__)
+        PRINT *, 'INFO:compiler[HP]'
+#elif defined(NAGFOR)
+        PRINT *, 'INFO:compiler[NAG]'
+#define COMPILER_VERSION_MAJOR DEC(__NAG_COMPILER_RELEASE/10)
+#define COMPILER_VERSION_MINOR DEC(__NAG_COMPILER_RELEASE % 10)
+#define COMPILER_VERSION_PATCH DEC(__NAG_COMPILER_BUILD)
+#elif defined(__FUJITSU)
+        PRINT *, 'INFO:compiler[Fujitsu]'
+# if defined(__FRT_major__)
+#   define COMPILER_VERSION_MAJOR DEC(__FRT_major__)
+#   define COMPILER_VERSION_MINOR DEC(__FRT_minor__)
+#   define COMPILER_VERSION_PATCH DEC(__FRT_patchlevel__)
+# elif defined(__FRT_version__)
+        PRINT *, 'INFO:compiler_version['//__FRT_version__//']'
+# endif
+#else
+        PRINT *, 'INFO:compiler[]'
+#endif
+#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
+        PRINT *, 'INFO:compiler_wrapper[CrayPrgEnv]'
+#endif
+
+#if 0
+! Identify the platform
+#endif
+#if defined(__linux) || defined(__linux__) || defined(linux)
+        PRINT *, 'INFO:platform[Linux]'
+#elif defined(__CYGWIN__)
+        PRINT *, 'INFO:platform[Cygwin]'
+#elif defined(__MINGW32__)
+        PRINT *, 'INFO:platform[MinGW]'
+#elif defined(__APPLE__)
+        PRINT *, 'INFO:platform[Darwin]'
+#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
+        PRINT *, 'INFO:platform[Windows]'
+#elif defined(__FreeBSD__) || defined(__FreeBSD)
+        PRINT *, 'INFO:platform[FreeBSD]'
+#elif defined(__NetBSD__) || defined(__NetBSD)
+        PRINT *, 'INFO:platform[NetBSD]'
+#elif defined(__OpenBSD__) || defined(__OPENBSD)
+        PRINT *, 'INFO:platform[OpenBSD]'
+#elif defined(__sun) || defined(sun)
+        PRINT *, 'INFO:platform[SunOS]'
+#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
+        PRINT *, 'INFO:platform[AIX]'
+#elif defined(__hpux) || defined(__hpux__)
+        PRINT *, 'INFO:platform[HP-UX]'
+#elif defined(__HAIKU__)
+        PRINT *, 'INFO:platform[Haiku]'
+#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
+        PRINT *, 'INFO:platform[BeOS]'
+#elif defined(__QNX__) || defined(__QNXNTO__)
+        PRINT *, 'INFO:platform[QNX]'
+#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
+        PRINT *, 'INFO:platform[Tru64]'
+#elif defined(__riscos) || defined(__riscos__)
+        PRINT *, 'INFO:platform[RISCos]'
+#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
+        PRINT *, 'INFO:platform[SINIX]'
+#elif defined(__UNIX_SV__)
+        PRINT *, 'INFO:platform[UNIX_SV]'
+#elif defined(__bsdos__)
+        PRINT *, 'INFO:platform[BSDOS]'
+#elif defined(_MPRAS) || defined(MPRAS)
+        PRINT *, 'INFO:platform[MP-RAS]'
+#elif defined(__osf) || defined(__osf__)
+        PRINT *, 'INFO:platform[OSF1]'
+#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
+        PRINT *, 'INFO:platform[SCO_SV]'
+#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
+        PRINT *, 'INFO:platform[ULTRIX]'
+#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
+        PRINT *, 'INFO:platform[Xenix]'
+#else
+        PRINT *, 'INFO:platform[]'
+#endif
+#if defined(_WIN32) && (defined(__INTEL_COMPILER) || defined(__ICC))
+# if defined(_M_IA64)
+        PRINT *, 'INFO:arch[IA64]'
+# elif defined(_M_X64) || defined(_M_AMD64)
+        PRINT *, 'INFO:arch[x64]'
+# elif defined(_M_IX86)
+        PRINT *, 'INFO:arch[X86]'
+# endif
+#endif
+
+#if 0
+! Encode compiler version digits
+#endif
+#define DEC_8(n) (((n) / 10000000) % 10)
+#define DEC_7(n) (((n) / 1000000)  % 10)
+#define DEC_6(n) (((n) / 100000)   % 10)
+#define DEC_5(n) (((n) / 10000)    % 10)
+#define DEC_4(n) (((n) / 1000)     % 10)
+#define DEC_3(n) (((n) / 100)      % 10)
+#define DEC_2(n) (((n) / 10)       % 10)
+#define DEC_1(n) (((n)    )        % 10)
+#define HEX_8(n) ((n)>>28 & 0xF)
+#define HEX_7(n) ((n)>>24 & 0xF)
+#define HEX_6(n) ((n)>>20 & 0xF)
+#define HEX_5(n) ((n)>>16 & 0xF)
+#define HEX_4(n) ((n)>>12 & 0xF)
+#define HEX_3(n) ((n)>>8  & 0xF)
+#define HEX_2(n) ((n)>>4  & 0xF)
+#define HEX_1(n) ((n)     & 0xF)
+@CMAKE_Fortran_COMPILER_ID_VERSION_INFO@
+
+      END
diff --git a/share/cmake-3.22/Modules/CMakeFortranInformation.cmake b/share/cmake-3.22/Modules/CMakeFortranInformation.cmake
new file mode 100644
index 0000000..0f71c6f
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeFortranInformation.cmake
@@ -0,0 +1,231 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+include(CMakeLanguageInformation)
+
+# This file sets the basic flags for the Fortran language in CMake.
+# It also loads the available platform file for the system-compiler
+# if it exists.
+
+set(_INCLUDED_FILE 0)
+
+# Load compiler-specific information.
+if(CMAKE_Fortran_COMPILER_ID)
+  include(Compiler/${CMAKE_Fortran_COMPILER_ID}-Fortran OPTIONAL)
+endif()
+
+set(CMAKE_BASE_NAME)
+get_filename_component(CMAKE_BASE_NAME "${CMAKE_Fortran_COMPILER}" NAME_WE)
+# since the gnu compiler has several names force g++
+if(CMAKE_COMPILER_IS_GNUG77)
+  set(CMAKE_BASE_NAME g77)
+endif()
+if(CMAKE_Fortran_COMPILER_ID)
+  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_Fortran_COMPILER_ID}-Fortran OPTIONAL RESULT_VARIABLE _INCLUDED_FILE)
+endif()
+if (NOT _INCLUDED_FILE)
+  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_BASE_NAME} OPTIONAL
+          RESULT_VARIABLE _INCLUDED_FILE)
+endif ()
+
+# load any compiler-wrapper specific information
+if (CMAKE_Fortran_COMPILER_WRAPPER)
+  __cmake_include_compiler_wrapper(Fortran)
+endif ()
+
+# We specify the compiler information in the system file for some
+# platforms, but this language may not have been enabled when the file
+# was first included.  Include it again to get the language info.
+# Remove this when all compiler info is removed from system files.
+if (NOT _INCLUDED_FILE)
+  include(Platform/${CMAKE_SYSTEM_NAME} OPTIONAL)
+endif ()
+
+if(CMAKE_Fortran_SIZEOF_DATA_PTR)
+  foreach(f ${CMAKE_Fortran_ABI_FILES})
+    include(${f})
+  endforeach()
+  unset(CMAKE_Fortran_ABI_FILES)
+endif()
+
+# This should be included before the _INIT variables are
+# used to initialize the cache.  Since the rule variables
+# have if blocks on them, users can still define them here.
+# But, it should still be after the platform file so changes can
+# be made to those values.
+
+if(CMAKE_USER_MAKE_RULES_OVERRIDE)
+  # Save the full path of the file so try_compile can use it.
+  include(${CMAKE_USER_MAKE_RULES_OVERRIDE} RESULT_VARIABLE _override)
+  set(CMAKE_USER_MAKE_RULES_OVERRIDE "${_override}")
+endif()
+
+if(CMAKE_USER_MAKE_RULES_OVERRIDE_Fortran)
+  # Save the full path of the file so try_compile can use it.
+  include(${CMAKE_USER_MAKE_RULES_OVERRIDE_Fortran} RESULT_VARIABLE _override)
+  set(CMAKE_USER_MAKE_RULES_OVERRIDE_Fortran "${_override}")
+endif()
+
+if(NOT CMAKE_Fortran_COMPILE_OPTIONS_PIC)
+  set(CMAKE_Fortran_COMPILE_OPTIONS_PIC ${CMAKE_C_COMPILE_OPTIONS_PIC})
+endif()
+
+if(NOT CMAKE_Fortran_COMPILE_OPTIONS_PIE)
+  set(CMAKE_Fortran_COMPILE_OPTIONS_PIE ${CMAKE_C_COMPILE_OPTIONS_PIE})
+endif()
+if(NOT CMAKE_Fortran_LINK_OPTIONS_PIE)
+  set(CMAKE_Fortran_LINK_OPTIONS_PIE ${CMAKE_C_LINK_OPTIONS_PIE})
+endif()
+if(NOT CMAKE_Fortran_LINK_OPTIONS_NO_PIE)
+  set(CMAKE_Fortran_LINK_OPTIONS_NO_PIE ${CMAKE_C_LINK_OPTIONS_NO_PIE})
+endif()
+
+if(NOT CMAKE_Fortran_COMPILE_OPTIONS_DLL)
+  set(CMAKE_Fortran_COMPILE_OPTIONS_DLL ${CMAKE_C_COMPILE_OPTIONS_DLL})
+endif()
+
+# Create a set of shared library variable specific to Fortran
+# For 90% of the systems, these are the same flags as the C versions
+# so if these are not set just copy the flags from the c version
+if(NOT DEFINED CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS)
+  set(CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS})
+endif()
+
+if(NOT DEFINED CMAKE_SHARED_LIBRARY_Fortran_FLAGS)
+  set(CMAKE_SHARED_LIBRARY_Fortran_FLAGS ${CMAKE_SHARED_LIBRARY_C_FLAGS})
+endif()
+
+if(NOT DEFINED CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS)
+  set(CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS ${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS})
+endif()
+
+if(NOT DEFINED CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG)
+  set(CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG})
+endif()
+
+if(NOT DEFINED CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG_SEP)
+  set(CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP})
+endif()
+
+if(NOT DEFINED CMAKE_SHARED_LIBRARY_RPATH_LINK_Fortran_FLAG)
+  set(CMAKE_SHARED_LIBRARY_RPATH_LINK_Fortran_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG})
+endif()
+
+if(NOT DEFINED CMAKE_EXE_EXPORTS_Fortran_FLAG)
+  set(CMAKE_EXE_EXPORTS_Fortran_FLAG ${CMAKE_EXE_EXPORTS_C_FLAG})
+endif()
+
+if(NOT DEFINED CMAKE_SHARED_LIBRARY_SONAME_Fortran_FLAG)
+  set(CMAKE_SHARED_LIBRARY_SONAME_Fortran_FLAG ${CMAKE_SHARED_LIBRARY_SONAME_C_FLAG})
+endif()
+
+# for most systems a module is the same as a shared library
+# so unless the variable CMAKE_MODULE_EXISTS is set just
+# copy the values from the LIBRARY variables
+if(NOT CMAKE_MODULE_EXISTS)
+  set(CMAKE_SHARED_MODULE_Fortran_FLAGS ${CMAKE_SHARED_LIBRARY_Fortran_FLAGS})
+  set(CMAKE_SHARED_MODULE_CREATE_Fortran_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS})
+endif()
+
+# repeat for modules
+if(NOT DEFINED CMAKE_SHARED_MODULE_CREATE_Fortran_FLAGS)
+  set(CMAKE_SHARED_MODULE_CREATE_Fortran_FLAGS ${CMAKE_SHARED_MODULE_CREATE_C_FLAGS})
+endif()
+
+if(NOT DEFINED CMAKE_SHARED_MODULE_Fortran_FLAGS)
+  set(CMAKE_SHARED_MODULE_Fortran_FLAGS ${CMAKE_SHARED_MODULE_C_FLAGS})
+endif()
+
+if(NOT DEFINED CMAKE_EXECUTABLE_RUNTIME_Fortran_FLAG)
+  set(CMAKE_EXECUTABLE_RUNTIME_Fortran_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG})
+endif()
+
+if(NOT DEFINED CMAKE_EXECUTABLE_RUNTIME_Fortran_FLAG_SEP)
+  set(CMAKE_EXECUTABLE_RUNTIME_Fortran_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG_SEP})
+endif()
+
+if(NOT DEFINED CMAKE_EXECUTABLE_RPATH_LINK_Fortran_FLAG)
+  set(CMAKE_EXECUTABLE_RPATH_LINK_Fortran_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_Fortran_FLAG})
+endif()
+
+if(NOT DEFINED CMAKE_SHARED_LIBRARY_LINK_Fortran_WITH_RUNTIME_PATH)
+  set(CMAKE_SHARED_LIBRARY_LINK_Fortran_WITH_RUNTIME_PATH ${CMAKE_SHARED_LIBRARY_LINK_C_WITH_RUNTIME_PATH})
+endif()
+
+if(NOT CMAKE_INCLUDE_FLAG_Fortran)
+  set(CMAKE_INCLUDE_FLAG_Fortran ${CMAKE_INCLUDE_FLAG_C})
+endif()
+
+if(CMAKE_EXECUTABLE_FORMAT STREQUAL "ELF")
+  if(NOT DEFINED CMAKE_Fortran_LINK_WHAT_YOU_USE_FLAG)
+    set(CMAKE_Fortran_LINK_WHAT_YOU_USE_FLAG "LINKER:--no-as-needed")
+  endif()
+  if(NOT DEFINED CMAKE_LINK_WHAT_YOU_USE_CHECK)
+    set(CMAKE_LINK_WHAT_YOU_USE_CHECK ldd -u -r)
+  endif()
+endif()
+
+set(CMAKE_VERBOSE_MAKEFILE FALSE CACHE BOOL "If this value is on, makefiles will be generated without the .SILENT directive, and all commands will be echoed to the console during the make.  This is useful for debugging only. With Visual Studio IDE projects all commands are done without /nologo.")
+
+set(CMAKE_Fortran_FLAGS_INIT "$ENV{FFLAGS} ${CMAKE_Fortran_FLAGS_INIT}")
+
+cmake_initialize_per_config_variable(CMAKE_Fortran_FLAGS "Flags used by the Fortran compiler")
+
+if(NOT CMAKE_Fortran_COMPILER_LAUNCHER AND DEFINED ENV{CMAKE_Fortran_COMPILER_LAUNCHER})
+  set(CMAKE_Fortran_COMPILER_LAUNCHER "$ENV{CMAKE_Fortran_COMPILER_LAUNCHER}"
+    CACHE STRING "Compiler launcher for Fortran.")
+endif()
+
+include(CMakeCommonLanguageInclude)
+
+# now define the following rule variables
+# CMAKE_Fortran_CREATE_SHARED_LIBRARY
+# CMAKE_Fortran_CREATE_SHARED_MODULE
+# CMAKE_Fortran_COMPILE_OBJECT
+# CMAKE_Fortran_LINK_EXECUTABLE
+
+# create a Fortran shared library
+if(NOT CMAKE_Fortran_CREATE_SHARED_LIBRARY)
+  set(CMAKE_Fortran_CREATE_SHARED_LIBRARY
+      "<CMAKE_Fortran_COMPILER> <CMAKE_SHARED_LIBRARY_Fortran_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS> <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
+endif()
+
+# create a Fortran shared module just copy the shared library rule
+if(NOT CMAKE_Fortran_CREATE_SHARED_MODULE)
+  set(CMAKE_Fortran_CREATE_SHARED_MODULE ${CMAKE_Fortran_CREATE_SHARED_LIBRARY})
+endif()
+
+# Create a static archive incrementally for large object file counts.
+# If CMAKE_Fortran_CREATE_STATIC_LIBRARY is set it will override these.
+if(NOT DEFINED CMAKE_Fortran_ARCHIVE_CREATE)
+  set(CMAKE_Fortran_ARCHIVE_CREATE "<CMAKE_AR> qc <TARGET> <LINK_FLAGS> <OBJECTS>")
+endif()
+if(NOT DEFINED CMAKE_Fortran_ARCHIVE_APPEND)
+  set(CMAKE_Fortran_ARCHIVE_APPEND "<CMAKE_AR> q <TARGET> <LINK_FLAGS> <OBJECTS>")
+endif()
+if(NOT DEFINED CMAKE_Fortran_ARCHIVE_FINISH)
+  set(CMAKE_Fortran_ARCHIVE_FINISH "<CMAKE_RANLIB> <TARGET>")
+endif()
+
+# compile a Fortran file into an object file
+# (put -o after -c to workaround bug in at least one mpif77 wrapper)
+if(NOT CMAKE_Fortran_COMPILE_OBJECT)
+  set(CMAKE_Fortran_COMPILE_OBJECT
+    "<CMAKE_Fortran_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -c <SOURCE> -o <OBJECT>")
+endif()
+
+# link a fortran program
+if(NOT CMAKE_Fortran_LINK_EXECUTABLE)
+  set(CMAKE_Fortran_LINK_EXECUTABLE
+    "<CMAKE_Fortran_COMPILER> <CMAKE_Fortran_LINK_FLAGS> <LINK_FLAGS> <FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
+endif()
+
+if(CMAKE_Fortran_STANDARD_LIBRARIES_INIT)
+  set(CMAKE_Fortran_STANDARD_LIBRARIES "${CMAKE_Fortran_STANDARD_LIBRARIES_INIT}"
+    CACHE STRING "Libraries linked by default with all Fortran applications.")
+  mark_as_advanced(CMAKE_Fortran_STANDARD_LIBRARIES)
+endif()
+
+# set this variable so we can avoid loading this more than once.
+set(CMAKE_Fortran_INFORMATION_LOADED 1)
diff --git a/share/cmake-3.22/Modules/CMakeGenericSystem.cmake b/share/cmake-3.22/Modules/CMakeGenericSystem.cmake
new file mode 100644
index 0000000..649b6f7
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeGenericSystem.cmake
@@ -0,0 +1,187 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+include(CMakeInitializeConfigs)
+
+set(CMAKE_SHARED_LIBRARY_C_FLAGS "")            # -pic
+set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared")       # -shared
+set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")         # +s, flag for exe link to use shared lib
+set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "")       # -rpath
+set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP "")   # : or empty
+set(CMAKE_INCLUDE_FLAG_C "-I")       # -I
+set(CMAKE_LIBRARY_PATH_FLAG "-L")
+set(CMAKE_LIBRARY_PATH_TERMINATOR "")  # for the Digital Mars D compiler the link paths have to be terminated with a "/"
+set(CMAKE_LINK_LIBRARY_FLAG "-l")
+
+set(CMAKE_LINK_LIBRARY_SUFFIX "")
+set(CMAKE_STATIC_LIBRARY_PREFIX "lib")
+set(CMAKE_STATIC_LIBRARY_SUFFIX ".a")
+set(CMAKE_SHARED_LIBRARY_PREFIX "lib")          # lib
+set(CMAKE_SHARED_LIBRARY_SUFFIX ".so")          # .so
+set(CMAKE_EXECUTABLE_SUFFIX "")          # .exe
+set(CMAKE_DL_LIBS "dl")
+
+set(CMAKE_FIND_LIBRARY_PREFIXES "lib")
+set(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".a")
+
+set(CMAKE_AUTOGEN_ORIGIN_DEPENDS ON)
+set(CMAKE_AUTOMOC_COMPILER_PREDEFINES ON)
+if(NOT DEFINED CMAKE_AUTOMOC_PATH_PREFIX)
+  set(CMAKE_AUTOMOC_PATH_PREFIX OFF)
+endif()
+set(CMAKE_AUTOMOC_MACRO_NAMES "Q_OBJECT" "Q_GADGET" "Q_NAMESPACE" "Q_NAMESPACE_EXPORT")
+
+# basically all general purpose OSs support shared libs
+set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE)
+
+set (CMAKE_SKIP_RPATH "NO" CACHE BOOL
+     "If set, runtime paths are not added when using shared libraries.")
+set (CMAKE_SKIP_INSTALL_RPATH "NO" CACHE BOOL
+     "If set, runtime paths are not added when installing shared libraries, but are added when building.")
+
+set(CMAKE_VERBOSE_MAKEFILE FALSE CACHE BOOL "If this value is on, makefiles will be generated without the .SILENT directive, and all commands will be echoed to the console during the make.  This is useful for debugging only. With Visual Studio IDE projects all commands are done without /nologo.")
+
+if(CMAKE_GENERATOR MATCHES "Make")
+  set(CMAKE_COLOR_MAKEFILE ON CACHE BOOL
+    "Enable/Disable color output during build."
+    )
+  mark_as_advanced(CMAKE_COLOR_MAKEFILE)
+  if(DEFINED CMAKE_RULE_MESSAGES)
+    set_property(GLOBAL PROPERTY RULE_MESSAGES ${CMAKE_RULE_MESSAGES})
+  endif()
+  if(DEFINED CMAKE_TARGET_MESSAGES)
+    set_property(GLOBAL PROPERTY TARGET_MESSAGES ${CMAKE_TARGET_MESSAGES})
+  endif()
+endif()
+
+if(NOT DEFINED CMAKE_EXPORT_COMPILE_COMMANDS AND CMAKE_GENERATOR MATCHES "Ninja|Unix Makefiles")
+  set(CMAKE_EXPORT_COMPILE_COMMANDS "$ENV{CMAKE_EXPORT_COMPILE_COMMANDS}"
+    CACHE BOOL "Enable/Disable output of compile commands during generation."
+    )
+  mark_as_advanced(CMAKE_EXPORT_COMPILE_COMMANDS)
+endif()
+
+# GetDefaultWindowsPrefixBase
+#
+# Compute the base directory for CMAKE_INSTALL_PREFIX based on:
+#  - is this 32-bit or 64-bit Windows
+#  - is this 32-bit or 64-bit CMake running
+#  - what architecture targets will be built
+#
+function(GetDefaultWindowsPrefixBase var)
+
+  # Try to guess what architecture targets will end up being built as,
+  # even if CMAKE_SIZEOF_VOID_P is not computed yet... We need to know
+  # the architecture of the targets being built to choose the right
+  # default value for CMAKE_INSTALL_PREFIX.
+  #
+  if("${CMAKE_GENERATOR}" MATCHES "(Win64|IA64)")
+    set(arch_hint "x64")
+  elseif("${CMAKE_GENERATOR_PLATFORM}" MATCHES "x64")
+    set(arch_hint "x64")
+  elseif("${CMAKE_GENERATOR_PLATFORM}" MATCHES "ARM64")
+    set(arch_hint "ARM64")
+  elseif("${CMAKE_GENERATOR}" MATCHES "ARM")
+    set(arch_hint "ARM")
+  elseif("${CMAKE_GENERATOR_PLATFORM}" MATCHES "ARM")
+    set(arch_hint "ARM")
+  elseif("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
+    set(arch_hint "x64")
+  elseif("$ENV{LIB}" MATCHES "(amd64|ia64)")
+    set(arch_hint "x64")
+  endif()
+
+  if(NOT arch_hint)
+    set(arch_hint "x86")
+  endif()
+
+  # default env in a 64-bit app on Win64:
+  # ProgramFiles=C:\Program Files
+  # ProgramFiles(x86)=C:\Program Files (x86)
+  # ProgramW6432=C:\Program Files
+  #
+  # default env in a 32-bit app on Win64:
+  # ProgramFiles=C:\Program Files (x86)
+  # ProgramFiles(x86)=C:\Program Files (x86)
+  # ProgramW6432=C:\Program Files
+  #
+  # default env in a 32-bit app on Win32:
+  # ProgramFiles=C:\Program Files
+  # ProgramFiles(x86) NOT DEFINED
+  # ProgramW6432 NOT DEFINED
+
+  # By default, use the ProgramFiles env var as the base value of
+  # CMAKE_INSTALL_PREFIX:
+  #
+  set(_PREFIX_ENV_VAR "ProgramFiles")
+
+  if ("$ENV{ProgramW6432}" STREQUAL "")
+    # running on 32-bit Windows
+    # must be a 32-bit CMake, too...
+    #message("guess: this is a 32-bit CMake running on 32-bit Windows")
+  else()
+    # running on 64-bit Windows
+    if ("$ENV{ProgramW6432}" STREQUAL "$ENV{ProgramFiles}")
+      # 64-bit CMake
+      #message("guess: this is a 64-bit CMake running on 64-bit Windows")
+      if(NOT "${arch_hint}" STREQUAL "x64")
+      # building 32-bit targets
+        set(_PREFIX_ENV_VAR "ProgramFiles(x86)")
+      endif()
+    else()
+      # 32-bit CMake
+      #message("guess: this is a 32-bit CMake running on 64-bit Windows")
+      if("${arch_hint}" STREQUAL "x64")
+      # building 64-bit targets
+        set(_PREFIX_ENV_VAR "ProgramW6432")
+      endif()
+    endif()
+  endif()
+
+  #if("${arch_hint}" STREQUAL "x64")
+  #  message("guess: you are building a 64-bit app")
+  #else()
+  #  message("guess: you are building a 32-bit app")
+  #endif()
+
+  if(NOT "$ENV{${_PREFIX_ENV_VAR}}" STREQUAL "")
+    file(TO_CMAKE_PATH "$ENV{${_PREFIX_ENV_VAR}}" _base)
+  elseif(NOT "$ENV{SystemDrive}" STREQUAL "")
+    set(_base "$ENV{SystemDrive}/Program Files")
+  else()
+    set(_base "C:/Program Files")
+  endif()
+
+  set(${var} "${_base}" PARENT_SCOPE)
+endfunction()
+
+
+# Set a variable to indicate whether the value of CMAKE_INSTALL_PREFIX
+# was initialized by the block below.  This is useful for user
+# projects to change the default prefix while still allowing the
+# command line to override it.
+if(NOT DEFINED CMAKE_INSTALL_PREFIX)
+  set(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT 1)
+endif()
+
+# Choose a default install prefix for this platform.
+if(CMAKE_HOST_UNIX)
+  set(CMAKE_INSTALL_PREFIX "/usr/local"
+    CACHE PATH "Install path prefix, prepended onto install directories.")
+else()
+  GetDefaultWindowsPrefixBase(CMAKE_GENERIC_PROGRAM_FILES)
+  set(CMAKE_INSTALL_PREFIX
+    "${CMAKE_GENERIC_PROGRAM_FILES}/${PROJECT_NAME}"
+    CACHE PATH "Install path prefix, prepended onto install directories.")
+  set(CMAKE_GENERIC_PROGRAM_FILES)
+endif()
+
+# Set a variable which will be used as component name in install() commands
+# where no COMPONENT has been given:
+set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "Unspecified")
+
+mark_as_advanced(
+  CMAKE_SKIP_RPATH
+  CMAKE_SKIP_INSTALL_RPATH
+  CMAKE_VERBOSE_MAKEFILE
+)
diff --git a/share/cmake-3.22/Modules/CMakeGraphVizOptions.cmake b/share/cmake-3.22/Modules/CMakeGraphVizOptions.cmake
new file mode 100644
index 0000000..7086722
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeGraphVizOptions.cmake
@@ -0,0 +1,150 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CMakeGraphVizOptions
+--------------------
+
+The builtin Graphviz support of CMake.
+
+Generating Graphviz files
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+CMake can generate `Graphviz <https://www.graphviz.org/>`_ files showing the
+dependencies between the targets in a project, as well as external libraries
+which are linked against.
+
+When running CMake with the ``--graphviz=foo.dot`` option, it produces:
+
+* a ``foo.dot`` file, showing all dependencies in the project
+* a ``foo.dot.<target>`` file for each target, showing on which other targets
+  it depends
+* a ``foo.dot.<target>.dependers`` file for each target, showing which other
+  targets depend on it
+
+Those .dot files can be converted to images using the *dot* command from the
+Graphviz package:
+
+.. code-block:: shell
+
+  dot -Tpng -o foo.png foo.dot
+
+.. versionadded:: 3.10
+  The different dependency types ``PUBLIC``, ``INTERFACE`` and ``PRIVATE``
+  are represented as solid, dashed and dotted edges.
+
+Variables specific to the Graphviz support
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The resulting graphs can be huge.  The look and content of the generated graphs
+can be controlled using the file ``CMakeGraphVizOptions.cmake``.  This file is
+first searched in :variable:`CMAKE_BINARY_DIR`, and then in
+:variable:`CMAKE_SOURCE_DIR`.  If found, the variables set in it are used to
+adjust options for the generated Graphviz files.
+
+.. variable:: GRAPHVIZ_GRAPH_NAME
+
+ The graph name.
+
+ * Mandatory: NO
+ * Default: value of :variable:`CMAKE_PROJECT_NAME`
+
+.. variable:: GRAPHVIZ_GRAPH_HEADER
+
+ The header written at the top of the Graphviz files.
+
+ * Mandatory: NO
+ * Default: "node [ fontsize = "12" ];"
+
+.. variable:: GRAPHVIZ_NODE_PREFIX
+
+ The prefix for each node in the Graphviz files.
+
+ * Mandatory: NO
+ * Default: "node"
+
+.. variable:: GRAPHVIZ_EXECUTABLES
+
+ Set to FALSE to exclude executables from the generated graphs.
+
+ * Mandatory: NO
+ * Default: TRUE
+
+.. variable:: GRAPHVIZ_STATIC_LIBS
+
+ Set to FALSE to exclude static libraries from the generated graphs.
+
+ * Mandatory: NO
+ * Default: TRUE
+
+.. variable:: GRAPHVIZ_SHARED_LIBS
+
+ Set to FALSE to exclude shared libraries from the generated graphs.
+
+ * Mandatory: NO
+ * Default: TRUE
+
+.. variable:: GRAPHVIZ_MODULE_LIBS
+
+ Set to FALSE to exclude module libraries from the generated graphs.
+
+ * Mandatory: NO
+ * Default: TRUE
+
+.. variable:: GRAPHVIZ_INTERFACE_LIBS
+
+ Set to FALSE to exclude interface libraries from the generated graphs.
+
+ * Mandatory: NO
+ * Default: TRUE
+
+.. variable:: GRAPHVIZ_OBJECT_LIBS
+
+ Set to FALSE to exclude object libraries from the generated graphs.
+
+ * Mandatory: NO
+ * Default: TRUE
+
+.. variable:: GRAPHVIZ_UNKNOWN_LIBS
+
+ Set to FALSE to exclude unknown libraries from the generated graphs.
+
+ * Mandatory: NO
+ * Default: TRUE
+
+.. variable:: GRAPHVIZ_EXTERNAL_LIBS
+
+ Set to FALSE to exclude external libraries from the generated graphs.
+
+ * Mandatory: NO
+ * Default: TRUE
+
+.. variable:: GRAPHVIZ_CUSTOM_TARGETS
+
+ Set to TRUE to include custom targets in the generated graphs.
+
+ * Mandatory: NO
+ * Default: FALSE
+
+.. variable:: GRAPHVIZ_IGNORE_TARGETS
+
+ A list of regular expressions for names of targets to exclude from the
+ generated graphs.
+
+ * Mandatory: NO
+ * Default: empty
+
+.. variable:: GRAPHVIZ_GENERATE_PER_TARGET
+
+ Set to FALSE to not generate per-target graphs ``foo.dot.<target>``.
+
+ * Mandatory: NO
+ * Default: TRUE
+
+.. variable:: GRAPHVIZ_GENERATE_DEPENDERS
+
+ Set to FALSE to not generate depender graphs ``foo.dot.<target>.dependers``.
+
+ * Mandatory: NO
+ * Default: TRUE
+#]=======================================================================]
diff --git a/share/cmake-3.22/Modules/CMakeHIPCompiler.cmake.in b/share/cmake-3.22/Modules/CMakeHIPCompiler.cmake.in
new file mode 100644
index 0000000..ce4e2cf
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeHIPCompiler.cmake.in
@@ -0,0 +1,60 @@
+set(CMAKE_HIP_COMPILER "@CMAKE_HIP_COMPILER@")
+set(CMAKE_HIP_COMPILER_ID "@CMAKE_HIP_COMPILER_ID@")
+set(CMAKE_HIP_COMPILER_VERSION "@CMAKE_HIP_COMPILER_VERSION@")
+set(CMAKE_HIP_STANDARD_COMPUTED_DEFAULT "@CMAKE_HIP_STANDARD_COMPUTED_DEFAULT@")
+set(CMAKE_HIP_EXTENSIONS_COMPUTED_DEFAULT "@CMAKE_HIP_EXTENSIONS_COMPUTED_DEFAULT@")
+set(CMAKE_HIP_COMPILE_FEATURES "@CMAKE_HIP_COMPILE_FEATURES@")
+set(CMAKE_HIP98_COMPILE_FEATURES "@CMAKE_HIP03_COMPILE_FEATURES@")
+set(CMAKE_HIP11_COMPILE_FEATURES "@CMAKE_HIP11_COMPILE_FEATURES@")
+set(CMAKE_HIP14_COMPILE_FEATURES "@CMAKE_HIP14_COMPILE_FEATURES@")
+set(CMAKE_HIP17_COMPILE_FEATURES "@CMAKE_HIP17_COMPILE_FEATURES@")
+set(CMAKE_HIP20_COMPILE_FEATURES "@CMAKE_HIP20_COMPILE_FEATURES@")
+set(CMAKE_HIP23_COMPILE_FEATURES "@CMAKE_HIP23_COMPILE_FEATURES@")
+
+set(CMAKE_HIP_PLATFORM_ID "@CMAKE_HIP_PLATFORM_ID@")
+set(CMAKE_HIP_SIMULATE_ID "@CMAKE_HIP_SIMULATE_ID@")
+set(CMAKE_HIP_COMPILER_FRONTEND_VARIANT "@CMAKE_HIP_COMPILER_FRONTEND_VARIANT@")
+set(CMAKE_HIP_SIMULATE_VERSION "@CMAKE_HIP_SIMULATE_VERSION@")
+@SET_MSVC_HIP_ARCHITECTURE_ID@
+@_SET_CMAKE_HIP_COMPILER_SYSROOT@
+set(CMAKE_HIP_COMPILER_ROCM_ROOT "@CMAKE_HIP_COMPILER_ROCM_ROOT@")
+
+set(CMAKE_HIP_COMPILER_ENV_VAR "HIPCXX")
+
+set(CMAKE_HIP_COMPILER_LOADED 1)
+set(CMAKE_HIP_COMPILER_ID_RUN 1)
+set(CMAKE_HIP_SOURCE_FILE_EXTENSIONS hip)
+set(CMAKE_HIP_LINKER_PREFERENCE 90)
+set(CMAKE_HIP_LINKER_PREFERENCE_PROPAGATES 1)
+
+set(CMAKE_HIP_SIZEOF_DATA_PTR "@CMAKE_HIP_SIZEOF_DATA_PTR@")
+set(CMAKE_HIP_COMPILER_ABI "@CMAKE_HIP_COMPILER_ABI@")
+set(CMAKE_HIP_LIBRARY_ARCHITECTURE "@CMAKE_HIP_LIBRARY_ARCHITECTURE@")
+
+if(CMAKE_HIP_SIZEOF_DATA_PTR)
+  set(CMAKE_SIZEOF_VOID_P "${CMAKE_HIP_SIZEOF_DATA_PTR}")
+endif()
+
+if(CMAKE_HIP_COMPILER_ABI)
+  set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_HIP_COMPILER_ABI}")
+endif()
+
+if(CMAKE_HIP_LIBRARY_ARCHITECTURE)
+  set(CMAKE_LIBRARY_ARCHITECTURE "@CMAKE_HIP_LIBRARY_ARCHITECTURE@")
+endif()
+
+set(CMAKE_HIP_TOOLKIT_INCLUDE_DIRECTORIES "@CMAKE_HIP_TOOLKIT_INCLUDE_DIRECTORIES@")
+
+set(CMAKE_HIP_IMPLICIT_INCLUDE_DIRECTORIES "@CMAKE_HIP_IMPLICIT_INCLUDE_DIRECTORIES@")
+set(CMAKE_HIP_IMPLICIT_LINK_LIBRARIES "@CMAKE_HIP_IMPLICIT_LINK_LIBRARIES@")
+set(CMAKE_HIP_IMPLICIT_LINK_DIRECTORIES "@CMAKE_HIP_IMPLICIT_LINK_DIRECTORIES@")
+set(CMAKE_HIP_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "@CMAKE_HIP_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES@")
+
+set(CMAKE_HIP_RUNTIME_LIBRARY_DEFAULT "SHARED")
+
+set(CMAKE_AR "@CMAKE_AR@")
+set(CMAKE_HIP_COMPILER_AR "@CMAKE_HIP_COMPILER_AR@")
+set(CMAKE_RANLIB "@CMAKE_RANLIB@")
+set(CMAKE_HIP_COMPILER_RANLIB "@CMAKE_HIP_COMPILER_RANLIB@")
+set(CMAKE_LINKER "@CMAKE_LINKER@")
+set(CMAKE_MT "@CMAKE_MT@")
diff --git a/share/cmake-3.22/Modules/CMakeHIPCompilerABI.hip b/share/cmake-3.22/Modules/CMakeHIPCompilerABI.hip
new file mode 100644
index 0000000..6c912bd
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeHIPCompilerABI.hip
@@ -0,0 +1,16 @@
+#ifndef __HIP__
+#  error "A C or C++ compiler has been selected for HIP"
+#endif
+
+#include "CMakeCompilerABI.h"
+
+int main(int argc, char* argv[])
+{
+  int require = 0;
+  require += info_sizeof_dptr[argc];
+#if defined(ABI_ID)
+  require += info_abi[argc];
+#endif
+  (void)argv;
+  return require;
+}
diff --git a/share/cmake-3.22/Modules/CMakeHIPCompilerId.hip.in b/share/cmake-3.22/Modules/CMakeHIPCompilerId.hip.in
new file mode 100644
index 0000000..3c4a1d4
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeHIPCompilerId.hip.in
@@ -0,0 +1,63 @@
+#ifndef __HIP__
+# error "A C or C++ compiler has been selected for HIP"
+#endif
+
+@CMAKE_HIP_COMPILER_ID_CONTENT@
+
+/* Construct the string literal in pieces to prevent the source from
+   getting matched.  Store it in a pointer rather than an array
+   because some compilers will just produce instructions to fill the
+   array rather than assigning a pointer to a static array.  */
+char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
+#ifdef SIMULATE_ID
+char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
+#endif
+
+@CMAKE_HIP_COMPILER_ID_PLATFORM_CONTENT@
+@CMAKE_HIP_COMPILER_ID_ERROR_FOR_TEST@
+
+const char* info_language_standard_default = "INFO" ":" "standard_default["
+#if __cplusplus > 202002L
+  "23"
+#elif __cplusplus > 201703L
+  "20"
+#elif __cplusplus >= 201703L
+  "17"
+#elif __cplusplus >= 201402L
+  "14"
+#elif __cplusplus >= 201103L
+  "11"
+#else
+  "98"
+#endif
+"]";
+
+const char* info_language_extensions_default = "INFO" ":" "extensions_default["
+#if (defined(__clang__) || defined(__GNUC__)) && !defined(__STRICT_ANSI__)
+  "ON"
+#else
+  "OFF"
+#endif
+"]";
+
+/*--------------------------------------------------------------------------*/
+
+int main(int argc, char* argv[])
+{
+  int require = 0;
+  require += info_compiler[argc];
+  require += info_platform[argc];
+#ifdef COMPILER_VERSION_MAJOR
+  require += info_version[argc];
+#endif
+#ifdef SIMULATE_ID
+  require += info_simulate[argc];
+#endif
+#ifdef SIMULATE_VERSION_MAJOR
+  require += info_simulate_version[argc];
+#endif
+  require += info_language_standard_default[argc];
+  require += info_language_extensions_default[argc];
+  (void)argv;
+  return require;
+}
diff --git a/share/cmake-3.22/Modules/CMakeHIPInformation.cmake b/share/cmake-3.22/Modules/CMakeHIPInformation.cmake
new file mode 100644
index 0000000..4c57677
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeHIPInformation.cmake
@@ -0,0 +1,151 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+if(UNIX)
+  set(CMAKE_HIP_OUTPUT_EXTENSION .o)
+else()
+  set(CMAKE_HIP_OUTPUT_EXTENSION .obj)
+endif()
+set(CMAKE_INCLUDE_FLAG_HIP "-I")
+
+# Load compiler-specific information.
+if(CMAKE_HIP_COMPILER_ID)
+  include(Compiler/${CMAKE_HIP_COMPILER_ID}-HIP OPTIONAL)
+endif()
+
+# load the system- and compiler specific files
+if(CMAKE_HIP_COMPILER_ID)
+  # load a hardware specific file, mostly useful for embedded compilers
+  if(CMAKE_SYSTEM_PROCESSOR)
+    include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_HIP_COMPILER_ID}-HIP-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL)
+  endif()
+  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_HIP_COMPILER_ID}-HIP OPTIONAL)
+endif()
+
+
+if(NOT CMAKE_SHARED_LIBRARY_RUNTIME_HIP_FLAG)
+  set(CMAKE_SHARED_LIBRARY_RUNTIME_HIP_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG})
+endif()
+
+if(NOT CMAKE_SHARED_LIBRARY_RUNTIME_HIP_FLAG_SEP)
+  set(CMAKE_SHARED_LIBRARY_RUNTIME_HIP_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP})
+endif()
+
+if(NOT CMAKE_SHARED_LIBRARY_RPATH_LINK_HIP_FLAG)
+  set(CMAKE_SHARED_LIBRARY_RPATH_LINK_HIP_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG})
+endif()
+
+if(NOT DEFINED CMAKE_EXE_EXPORTS_HIP_FLAG)
+  set(CMAKE_EXE_EXPORTS_HIP_FLAG ${CMAKE_EXE_EXPORTS_C_FLAG})
+endif()
+
+if(NOT DEFINED CMAKE_SHARED_LIBRARY_SONAME_HIP_FLAG)
+  set(CMAKE_SHARED_LIBRARY_SONAME_HIP_FLAG ${CMAKE_SHARED_LIBRARY_SONAME_C_FLAG})
+endif()
+
+if(NOT CMAKE_EXECUTABLE_RUNTIME_HIP_FLAG)
+  set(CMAKE_EXECUTABLE_RUNTIME_HIP_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_HIP_FLAG})
+endif()
+
+if(NOT CMAKE_EXECUTABLE_RUNTIME_HIP_FLAG_SEP)
+  set(CMAKE_EXECUTABLE_RUNTIME_HIP_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_HIP_FLAG_SEP})
+endif()
+
+if(NOT CMAKE_EXECUTABLE_RPATH_LINK_HIP_FLAG)
+  set(CMAKE_EXECUTABLE_RPATH_LINK_HIP_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_HIP_FLAG})
+endif()
+
+if(NOT DEFINED CMAKE_SHARED_LIBRARY_LINK_HIP_WITH_RUNTIME_PATH)
+  set(CMAKE_SHARED_LIBRARY_LINK_HIP_WITH_RUNTIME_PATH ${CMAKE_SHARED_LIBRARY_LINK_C_WITH_RUNTIME_PATH})
+endif()
+
+
+# for most systems a module is the same as a shared library
+# so unless the variable CMAKE_MODULE_EXISTS is set just
+# copy the values from the LIBRARY variables
+if(NOT CMAKE_MODULE_EXISTS)
+  set(CMAKE_SHARED_MODULE_HIP_FLAGS ${CMAKE_SHARED_LIBRARY_HIP_FLAGS})
+  set(CMAKE_SHARED_MODULE_CREATE_HIP_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_HIP_FLAGS})
+endif()
+
+if(CMAKE_EXECUTABLE_FORMAT STREQUAL "ELF")
+  if(NOT DEFINED CMAKE_HIP_LINK_WHAT_YOU_USE_FLAG)
+    set(CMAKE_HIP_LINK_WHAT_YOU_USE_FLAG "LINKER:--no-as-needed")
+  endif()
+  if(NOT DEFINED CMAKE_LINK_WHAT_YOU_USE_CHECK)
+    set(CMAKE_LINK_WHAT_YOU_USE_CHECK ldd -u -r)
+  endif()
+endif()
+
+# add the flags to the cache based
+# on the initial values computed in the platform/*.cmake files
+# use _INIT variables so that this only happens the first time
+# and you can set these flags in the cmake cache
+set(CMAKE_HIP_FLAGS_INIT "$ENV{HIPFLAGS} ${CMAKE_HIP_FLAGS_INIT}")
+
+cmake_initialize_per_config_variable(CMAKE_HIP_FLAGS "Flags used by the HIP compiler")
+
+if(CMAKE_HIP_STANDARD_LIBRARIES_INIT)
+  set(CMAKE_HIP_STANDARD_LIBRARIES "${CMAKE_HIP_STANDARD_LIBRARIES_INIT}"
+    CACHE STRING "Libraries linked by default with all HIP applications.")
+  mark_as_advanced(CMAKE_HIP_STANDARD_LIBRARIES)
+endif()
+
+if(NOT CMAKE_HIP_COMPILER_LAUNCHER AND DEFINED ENV{CMAKE_HIP_COMPILER_LAUNCHER})
+  set(CMAKE_HIP_COMPILER_LAUNCHER "$ENV{CMAKE_HIP_COMPILER_LAUNCHER}"
+    CACHE STRING "Compiler launcher for HIP.")
+endif()
+
+include(CMakeCommonLanguageInclude)
+
+# now define the following rules:
+# CMAKE_HIP_CREATE_SHARED_LIBRARY
+# CMAKE_HIP_CREATE_SHARED_MODULE
+# CMAKE_HIP_COMPILE_OBJECT
+# CMAKE_HIP_LINK_EXECUTABLE
+
+# create a shared library
+if(NOT CMAKE_HIP_CREATE_SHARED_LIBRARY)
+  set(CMAKE_HIP_CREATE_SHARED_LIBRARY
+      "<CMAKE_HIP_COMPILER> <CMAKE_SHARED_LIBRARY_HIP_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_HIP_FLAGS> <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
+endif()
+
+# create a shared module copy the shared library rule by default
+if(NOT CMAKE_HIP_CREATE_SHARED_MODULE)
+  set(CMAKE_HIP_CREATE_SHARED_MODULE ${CMAKE_HIP_CREATE_SHARED_LIBRARY})
+endif()
+
+# Create a static archive incrementally for large object file counts.
+if(NOT DEFINED CMAKE_HIP_ARCHIVE_CREATE)
+  set(CMAKE_HIP_ARCHIVE_CREATE "<CMAKE_AR> qc <TARGET> <LINK_FLAGS> <OBJECTS>")
+endif()
+if(NOT DEFINED CMAKE_HIP_ARCHIVE_APPEND)
+  set(CMAKE_HIP_ARCHIVE_APPEND "<CMAKE_AR> q <TARGET> <LINK_FLAGS> <OBJECTS>")
+endif()
+if(NOT DEFINED CMAKE_HIP_ARCHIVE_FINISH)
+  set(CMAKE_HIP_ARCHIVE_FINISH "<CMAKE_RANLIB> <TARGET>")
+endif()
+
+# compile a HIP file into an object file
+if(NOT CMAKE_HIP_COMPILE_OBJECT)
+  set(CMAKE_HIP_COMPILE_OBJECT
+    "<CMAKE_HIP_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> ${_CMAKE_COMPILE_AS_HIP_FLAG} -c <SOURCE>")
+endif()
+
+# compile a cu file into an executable
+if(NOT CMAKE_HIP_LINK_EXECUTABLE)
+  set(CMAKE_HIP_LINK_EXECUTABLE
+    "<CMAKE_HIP_COMPILER> <FLAGS> <CMAKE_HIP_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
+endif()
+
+set(CMAKE_HIP_INFORMATION_LOADED 1)
+
+# Load the file and find the relevant HIP runtime.
+if(NOT DEFINED _CMAKE_HIP_DEVICE_RUNTIME_TARGET)
+  set(hip-lang_DIR "${CMAKE_HIP_COMPILER_ROCM_ROOT}/lib/cmake/hip-lang")
+  find_package(hip-lang CONFIG QUIET NO_DEFAULT_PATH)
+endif()
+if(DEFINED _CMAKE_HIP_DEVICE_RUNTIME_TARGET)
+  list(APPEND CMAKE_HIP_RUNTIME_LIBRARIES_STATIC ${_CMAKE_HIP_DEVICE_RUNTIME_TARGET})
+  list(APPEND CMAKE_HIP_RUNTIME_LIBRARIES_SHARED ${_CMAKE_HIP_DEVICE_RUNTIME_TARGET})
+endif()
diff --git a/share/cmake-3.22/Modules/CMakeIOSInstallCombined.cmake b/share/cmake-3.22/Modules/CMakeIOSInstallCombined.cmake
new file mode 100644
index 0000000..b022217
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeIOSInstallCombined.cmake
@@ -0,0 +1,329 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0057 NEW) # if IN_LIST
+cmake_policy(SET CMP0054 NEW)
+
+# Function to print messages of this module
+function(_ios_install_combined_message)
+  message(STATUS "[iOS combined] " ${ARGN})
+endfunction()
+
+# Get build settings for the current target/config/SDK by running
+# `xcodebuild -sdk ... -showBuildSettings` and parsing it's output
+function(_ios_install_combined_get_build_setting sdk variable resultvar)
+  if("${sdk}" STREQUAL "")
+    message(FATAL_ERROR "`sdk` is empty")
+  endif()
+
+  if("${variable}" STREQUAL "")
+    message(FATAL_ERROR "`variable` is empty")
+  endif()
+
+  if("${resultvar}" STREQUAL "")
+    message(FATAL_ERROR "`resultvar` is empty")
+  endif()
+
+  set(
+      cmd
+      xcodebuild -showBuildSettings
+      -sdk "${sdk}"
+      -target "${CURRENT_TARGET}"
+      -config "${CURRENT_CONFIG}"
+  )
+
+  execute_process(
+      COMMAND ${cmd}
+      WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
+      RESULT_VARIABLE result
+      OUTPUT_VARIABLE output
+  )
+
+  if(NOT result EQUAL 0)
+    message(FATAL_ERROR "Command failed (${result}): ${cmd}")
+  endif()
+
+  if(NOT output MATCHES " ${variable} = ([^\n]*)")
+    if("${variable}" STREQUAL "VALID_ARCHS")
+      # VALID_ARCHS may be unset by user for given SDK
+      # (e.g. for build without simulator).
+      set("${resultvar}" "" PARENT_SCOPE)
+      return()
+    else()
+      message(FATAL_ERROR "${variable} not found.")
+    endif()
+  endif()
+
+  set("${resultvar}" "${CMAKE_MATCH_1}" PARENT_SCOPE)
+endfunction()
+
+# Get architectures of given SDK (iphonesimulator/iphoneos)
+function(_ios_install_combined_get_valid_archs sdk resultvar)
+  cmake_policy(PUSH)
+  cmake_policy(SET CMP0007 NEW)
+
+  if("${resultvar}" STREQUAL "")
+    message(FATAL_ERROR "`resultvar` is empty")
+  endif()
+
+  _ios_install_combined_get_build_setting("${sdk}" "VALID_ARCHS" valid_archs)
+
+  separate_arguments(valid_archs)
+  list(REMOVE_ITEM valid_archs "") # remove empty elements
+  list(REMOVE_DUPLICATES valid_archs)
+
+  string(REPLACE ";" " " printable "${valid_archs}")
+  _ios_install_combined_message("Architectures (${sdk}): ${printable}")
+
+  set("${resultvar}" "${valid_archs}" PARENT_SCOPE)
+
+  cmake_policy(POP)
+endfunction()
+
+# Make both arch lists a disjoint set by preferring the current SDK
+# (starting with Xcode 12 arm64 is available as device and simulator arch on iOS)
+function(_ios_install_combined_prune_common_archs corr_sdk corr_archs_var this_archs_var)
+  list(REMOVE_ITEM ${corr_archs_var} ${${this_archs_var}})
+
+  string(REPLACE ";" " " printable "${${corr_archs_var}}")
+  _ios_install_combined_message("Architectures (${corr_sdk}) after pruning: ${printable}")
+
+  set("${corr_archs_var}" "${${corr_archs_var}}" PARENT_SCOPE)
+endfunction()
+
+# Final target can contain more architectures that specified by SDK. This
+# function will run 'lipo -info' and parse output. Result will be returned
+# as a CMake list.
+function(_ios_install_combined_get_real_archs filename resultvar)
+  set(cmd "${_lipo_path}" -info "${filename}")
+  execute_process(
+      COMMAND ${cmd}
+      RESULT_VARIABLE result
+      OUTPUT_VARIABLE output
+      ERROR_VARIABLE output
+      OUTPUT_STRIP_TRAILING_WHITESPACE
+      ERROR_STRIP_TRAILING_WHITESPACE
+  )
+  if(NOT result EQUAL 0)
+    message(
+        FATAL_ERROR "Command failed (${result}): ${cmd}\n\nOutput:\n${output}"
+    )
+  endif()
+
+  if(NOT output MATCHES "(Architectures in the fat file: [^\n]+ are|Non-fat file: [^\n]+ is architecture): ([^\n]*)")
+    message(FATAL_ERROR "Could not detect architecture from: ${output}")
+  endif()
+
+  separate_arguments(CMAKE_MATCH_2)
+  set(${resultvar} ${CMAKE_MATCH_2} PARENT_SCOPE)
+endfunction()
+
+# Run build command for the given SDK
+function(_ios_install_combined_build sdk)
+  if("${sdk}" STREQUAL "")
+    message(FATAL_ERROR "`sdk` is empty")
+  endif()
+
+  _ios_install_combined_message("Build `${CURRENT_TARGET}` for `${sdk}`")
+
+  execute_process(
+      COMMAND
+      "${CMAKE_COMMAND}"
+      --build
+      .
+      --target "${CURRENT_TARGET}"
+      --config ${CURRENT_CONFIG}
+      --
+      -sdk "${sdk}"
+      WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
+      RESULT_VARIABLE result
+  )
+
+  if(NOT result EQUAL 0)
+    message(FATAL_ERROR "Build failed")
+  endif()
+endfunction()
+
+# Remove given architecture from file. This step needed only in rare cases
+# when target was built in "unusual" way. Emit warning message.
+function(_ios_install_combined_remove_arch lib arch)
+  _ios_install_combined_message(
+    "Warning! Unexpected architecture `${arch}` detected and will be removed "
+    "from file `${lib}`")
+  set(cmd "${_lipo_path}" -remove ${arch} -output ${lib} ${lib})
+  execute_process(
+      COMMAND ${cmd}
+      RESULT_VARIABLE result
+      OUTPUT_VARIABLE output
+      ERROR_VARIABLE output
+      OUTPUT_STRIP_TRAILING_WHITESPACE
+      ERROR_STRIP_TRAILING_WHITESPACE
+  )
+  if(NOT result EQUAL 0)
+    message(
+        FATAL_ERROR "Command failed (${result}): ${cmd}\n\nOutput:\n${output}"
+    )
+  endif()
+endfunction()
+
+# Check that 'lib' contains only 'archs' architectures (remove others).
+function(_ios_install_combined_keep_archs lib archs)
+  _ios_install_combined_get_real_archs("${lib}" real_archs)
+  set(archs_to_remove ${real_archs})
+  list(REMOVE_ITEM archs_to_remove ${archs})
+  foreach(x ${archs_to_remove})
+    _ios_install_combined_remove_arch("${lib}" "${x}")
+  endforeach()
+endfunction()
+
+function(_ios_install_combined_detect_associated_sdk corr_sdk_var)
+  if("${PLATFORM_NAME}" STREQUAL "")
+    message(FATAL_ERROR "PLATFORM_NAME should not be empty")
+  endif()
+
+  set(all_platforms "$ENV{SUPPORTED_PLATFORMS}")
+  if("${SUPPORTED_PLATFORMS}" STREQUAL "")
+    _ios_install_combined_get_build_setting(
+      ${PLATFORM_NAME} SUPPORTED_PLATFORMS all_platforms)
+    if("${all_platforms}" STREQUAL "")
+      message(FATAL_ERROR
+        "SUPPORTED_PLATFORMS not set as an environment variable nor "
+        "able to be determined from project")
+    endif()
+  endif()
+
+  separate_arguments(all_platforms)
+  if(NOT PLATFORM_NAME IN_LIST all_platforms)
+    message(FATAL_ERROR "`${PLATFORM_NAME}` not found in `${all_platforms}`")
+  endif()
+
+  list(REMOVE_ITEM all_platforms "" "${PLATFORM_NAME}")
+  list(LENGTH all_platforms all_platforms_length)
+  if(NOT all_platforms_length EQUAL 1)
+    message(FATAL_ERROR "Expected one element: ${all_platforms}")
+  endif()
+
+  set(${corr_sdk_var} "${all_platforms}" PARENT_SCOPE)
+endfunction()
+
+# Create combined binary for the given target.
+#
+# Preconditions:
+#  * Target already installed at ${destination}
+#    for the ${PLATFORM_NAME} platform
+#
+# This function will:
+#  * Run build for the lacking platform, i.e. opposite to the ${PLATFORM_NAME}
+#  * Fuse both libraries by running lipo
+function(ios_install_combined target destination)
+  if("${target}" STREQUAL "")
+    message(FATAL_ERROR "`target` is empty")
+  endif()
+
+  if("${destination}" STREQUAL "")
+    message(FATAL_ERROR "`destination` is empty")
+  endif()
+
+  if(NOT IS_ABSOLUTE "${destination}")
+    message(FATAL_ERROR "`destination` is not absolute: ${destination}")
+  endif()
+
+  if(IS_DIRECTORY "${destination}" OR IS_SYMLINK "${destination}")
+    message(FATAL_ERROR "`destination` is no regular file: ${destination}")
+  endif()
+
+  if("${CMAKE_BINARY_DIR}" STREQUAL "")
+    message(FATAL_ERROR "`CMAKE_BINARY_DIR` is empty")
+  endif()
+
+  if(NOT IS_DIRECTORY "${CMAKE_BINARY_DIR}")
+    message(FATAL_ERROR "Is not a directory: ${CMAKE_BINARY_DIR}")
+  endif()
+
+  if("${CMAKE_INSTALL_CONFIG_NAME}" STREQUAL "")
+    message(FATAL_ERROR "CMAKE_INSTALL_CONFIG_NAME is empty")
+  endif()
+
+  set(cmd xcrun -f lipo)
+
+  # Do not merge OUTPUT_VARIABLE and ERROR_VARIABLE since latter may contain
+  # some diagnostic information even for the successful run.
+  execute_process(
+      COMMAND ${cmd}
+      RESULT_VARIABLE result
+      OUTPUT_VARIABLE output
+      ERROR_VARIABLE error_output
+      OUTPUT_STRIP_TRAILING_WHITESPACE
+      ERROR_STRIP_TRAILING_WHITESPACE
+  )
+  if(NOT result EQUAL 0)
+    message(
+        FATAL_ERROR "Command failed (${result}): ${cmd}\n\nOutput:\n${output}\nOutput(error):\n${error_output}"
+    )
+  endif()
+  set(_lipo_path ${output})
+  list(LENGTH _lipo_path len)
+  if(NOT len EQUAL 1)
+    message(FATAL_ERROR "Unexpected xcrun output: ${_lipo_path}")
+  endif()
+  if(NOT EXISTS "${_lipo_path}")
+    message(FATAL_ERROR "File not found: ${_lipo_path}")
+  endif()
+
+  set(CURRENT_CONFIG "${CMAKE_INSTALL_CONFIG_NAME}")
+  set(CURRENT_TARGET "${target}")
+
+  _ios_install_combined_message("Target: ${CURRENT_TARGET}")
+  _ios_install_combined_message("Config: ${CURRENT_CONFIG}")
+  _ios_install_combined_message("Destination: ${destination}")
+
+  # Get SDKs
+  _ios_install_combined_detect_associated_sdk(corr_sdk)
+
+  # Get architectures of the target
+  _ios_install_combined_get_valid_archs("${PLATFORM_NAME}" this_valid_archs)
+  _ios_install_combined_get_valid_archs("${corr_sdk}" corr_valid_archs)
+  _ios_install_combined_prune_common_archs("${corr_sdk}" corr_valid_archs this_valid_archs)
+
+  # Return if there are no valid architectures for the SDK.
+  # (note that library already installed)
+  if("${corr_valid_archs}" STREQUAL "")
+    _ios_install_combined_message(
+        "No architectures detected for `${corr_sdk}` (skip)"
+    )
+    return()
+  endif()
+
+  # Trigger build of corresponding target
+  _ios_install_combined_build("${corr_sdk}")
+
+  # Get location of the library in build directory
+  _ios_install_combined_get_build_setting(
+    "${corr_sdk}" "CONFIGURATION_BUILD_DIR" corr_build_dir)
+  _ios_install_combined_get_build_setting(
+    "${corr_sdk}" "EXECUTABLE_PATH" corr_executable_path)
+  set(corr "${corr_build_dir}/${corr_executable_path}")
+
+  _ios_install_combined_keep_archs("${corr}" "${corr_valid_archs}")
+  _ios_install_combined_keep_archs("${destination}" "${this_valid_archs}")
+
+  _ios_install_combined_message("Current: ${destination}")
+  _ios_install_combined_message("Corresponding: ${corr}")
+
+  set(cmd "${_lipo_path}" -create ${corr} ${destination} -output ${destination})
+
+  execute_process(
+      COMMAND ${cmd}
+      WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+      RESULT_VARIABLE result
+  )
+
+  if(NOT result EQUAL 0)
+    message(FATAL_ERROR "Command failed: ${cmd}")
+  endif()
+
+  _ios_install_combined_message("Install done: ${destination}")
+endfunction()
+
+cmake_policy(POP)
diff --git a/share/cmake-3.22/Modules/CMakeISPCCompiler.cmake.in b/share/cmake-3.22/Modules/CMakeISPCCompiler.cmake.in
new file mode 100644
index 0000000..28c31cc
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeISPCCompiler.cmake.in
@@ -0,0 +1,30 @@
+set(CMAKE_ISPC_COMPILER "@CMAKE_ISPC_COMPILER@")
+set(CMAKE_ISPC_COMPILER_ARG1 "@CMAKE_ISPC_COMPILER_ARG1@")
+set(CMAKE_ISPC_COMPILER_ID "@CMAKE_ISPC_COMPILER_ID@")
+set(CMAKE_ISPC_COMPILER_VERSION "@CMAKE_ISPC_COMPILER_VERSION@")
+set(CMAKE_ISPC_COMPILER_VERSION_INTERNAL "@CMAKE_ISPC_COMPILER_VERSION_INTERNAL@")
+
+set(CMAKE_ISPC_PLATFORM_ID "@CMAKE_ISPC_PLATFORM_ID@")
+set(CMAKE_ISPC_SIMULATE_ID "@CMAKE_ISPC_SIMULATE_ID@")
+set(CMAKE_ISPC_COMPILER_FRONTEND_VARIANT "@CMAKE_ISPC_COMPILER_FRONTEND_VARIANT@")
+set(CMAKE_ISPC_SIMULATE_VERSION "@CMAKE_ISPC_SIMULATE_VERSION@")
+
+set(CMAKE_AR "@CMAKE_AR@")
+set(CMAKE_ISPC_COMPILER_AR "@CMAKE_ISPC_COMPILER_AR@")
+set(CMAKE_RANLIB "@CMAKE_RANLIB@")
+set(CMAKE_ISPC_COMPILER_RANLIB "@CMAKE_ISPC_COMPILER_RANLIB@")
+
+set(CMAKE_ISPC_COMPILER_LOADED 1)
+set(CMAKE_ISPC_COMPILER_WORKS @CMAKE_ISPC_COMPILER_WORKS@)
+set(CMAKE_ISPC_ABI_COMPILED @CMAKE_ISPC_ABI_COMPILED@)
+
+set(CMAKE_ISPC_COMPILER_ENV_VAR "ISPC")
+
+set(CMAKE_ISPC_COMPILER_ID_RUN 1)
+set(CMAKE_ISPC_SOURCE_FILE_EXTENSIONS ispc)
+set(CMAKE_ISPC_IGNORE_EXTENSIONS o;O)
+
+set(CMAKE_ISPC_LINKER_PREFERENCE 0)
+set(CMAKE_ISPC_LINKER_PREFERENCE_PROPAGATES 0)
+
+@CMAKE_ISPC_COMPILER_CUSTOM_CODE@
diff --git a/share/cmake-3.22/Modules/CMakeISPCCompilerABI.ispc b/share/cmake-3.22/Modules/CMakeISPCCompilerABI.ispc
new file mode 100644
index 0000000..e23abce
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeISPCCompilerABI.ispc
@@ -0,0 +1,20 @@
+
+export void ispcCompilerABI() {
+
+#if defined(__GNU__) && defined(__ELF__) && defined(__ARM_EABI__)
+  print("INFO:abi[ELF ARMEABI]");
+  static char const info_abi[] =
+#elif defined(__GNU__) && defined(__ELF__) && defined(__ARMEB__)
+  print("INFO:abi[ELF ARM]");
+#elif defined(__GNU__) && defined(__ELF__) && defined(__ARMEL__)
+  print("INFO:abi[ELF ARM]");
+
+#elif defined(__linux__) && defined(__ELF__) && defined(__amd64__) &&         \
+  defined(__ILP32__)
+print("INFO:abi[ELF X32]");
+
+#elif defined(__ELF__)
+print("INFO:abi[ELF]");
+#endif
+
+}
diff --git a/share/cmake-3.22/Modules/CMakeISPCCompilerId.ispc.in b/share/cmake-3.22/Modules/CMakeISPCCompilerId.ispc.in
new file mode 100644
index 0000000..03380f3
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeISPCCompilerId.ispc.in
@@ -0,0 +1,62 @@
+
+export void ispcCompilerId() {
+
+// Identify the compiler
+#if defined(ISPC)
+  print("INFO:compiler[Intel]");
+#endif
+
+// Identify the platform
+#if defined(__linux) || defined(__linux__) || defined(linux)
+  print("INFO:platform[Linux]");
+#elif defined(__CYGWIN__)
+  print("INFO:platform[Cygwin]");
+#elif defined(__MINGW32__)
+  print("INFO:platform[MinGW]");
+#elif defined(__APPLE__)
+  print("INFO:platform[Darwin]");
+#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
+  print("INFO:platform[Windows]");
+#elif defined(__FreeBSD__) || defined(__FreeBSD)
+  print("INFO:platform[FreeBSD]");
+#elif defined(__NetBSD__) || defined(__NetBSD)
+  print("INFO:platform[NetBSD]");
+#elif defined(__OpenBSD__) || defined(__OPENBSD)
+  print("INFO:platform[OpenBSD]");
+#elif defined(__sun) || defined(sun)
+  print("INFO:platform[SunOS]");
+#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
+  print("INFO:platform[AIX]");
+#elif defined(__hpux) || defined(__hpux__)
+  print("INFO:platform[HP-UX]");
+#elif defined(__HAIKU__)
+  print("INFO:platform[Haiku]");
+#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
+  print("INFO:platform[BeOS]");
+#elif defined(__QNX__) || defined(__QNXNTO__)
+  print("INFO:platform[QNX]");
+#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
+  print("INFO:platform[Tru64]");
+#elif defined(__riscos) || defined(__riscos__)
+  print("INFO:platform[RISCos]");
+#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
+  print("INFO:platform[SINIX]");
+#elif defined(__UNIX_SV__)
+  print("INFO:platform[UNIX_SV]");
+#elif defined(__bsdos__)
+  print("INFO:platform[BSDOS]");
+#elif defined(_MPRAS) || defined(MPRAS)
+  print("INFO:platform[MP-RAS]");
+#elif defined(__osf) || defined(__osf__)
+  print("INFO:platform[OSF1]");
+#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
+  print("INFO:platform[SCO_SV]");
+#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
+  print("INFO:platform[ULTRIX]");
+#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
+  print("INFO:platform[Xenix]");
+#else
+  print("INFO:platform[]");
+#endif
+
+}
diff --git a/share/cmake-3.22/Modules/CMakeISPCInformation.cmake b/share/cmake-3.22/Modules/CMakeISPCInformation.cmake
new file mode 100644
index 0000000..5acb682
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeISPCInformation.cmake
@@ -0,0 +1,65 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+if(UNIX)
+  set(CMAKE_ISPC_OUTPUT_EXTENSION .o)
+else()
+  set(CMAKE_ISPC_OUTPUT_EXTENSION .obj)
+endif()
+set(CMAKE_INCLUDE_FLAG_ISPC "-I")
+
+# Load compiler-specific information.
+if(CMAKE_ISPC_COMPILER_ID)
+  include(Compiler/${CMAKE_ISPC_COMPILER_ID}-ISPC OPTIONAL)
+endif()
+
+# load the system- and compiler specific files
+if(CMAKE_ISPC_COMPILER_ID)
+  # load a hardware specific file, mostly useful for embedded compilers
+  if(CMAKE_SYSTEM_PROCESSOR)
+    include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_ISPC_COMPILER_ID}-ISPC-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL)
+  endif()
+  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_ISPC_COMPILER_ID}-ISPC OPTIONAL)
+endif()
+
+# add the flags to the cache based
+# on the initial values computed in the platform/*.cmake files
+# use _INIT variables so that this only happens the first time
+# and you can set these flags in the cmake cache
+set(CMAKE_ISPC_FLAGS_INIT "$ENV{ISPCFLAGS} ${CMAKE_ISPC_FLAGS_INIT}")
+
+cmake_initialize_per_config_variable(CMAKE_ISPC_FLAGS "Flags used by the ISPC compiler")
+
+if(CMAKE_ISPC_STANDARD_LIBRARIES_INIT)
+  set(CMAKE_ISPC_STANDARD_LIBRARIES "${CMAKE_ISPC_STANDARD_LIBRARIES_INIT}"
+    CACHE STRING "Libraries linked by default with all ISPC applications.")
+  mark_as_advanced(CMAKE_ISPC_STANDARD_LIBRARIES)
+endif()
+
+if(NOT CMAKE_ISPC_COMPILER_LAUNCHER AND DEFINED ENV{CMAKE_ISPC_COMPILER_LAUNCHER})
+  set(CMAKE_ISPC_COMPILER_LAUNCHER "$ENV{CMAKE_ISPC_COMPILER_LAUNCHER}"
+    CACHE STRING "Compiler launcher for ISPC.")
+endif()
+
+include(CMakeCommonLanguageInclude)
+
+# now define the following rules:
+# CMAKE_ISPC_COMPILE_OBJECT
+
+# Create a static archive incrementally for large object file counts.
+if(NOT DEFINED CMAKE_ISPC_ARCHIVE_CREATE)
+  set(CMAKE_ISPC_ARCHIVE_CREATE "<CMAKE_AR> qc <TARGET> <LINK_FLAGS> <OBJECTS>")
+endif()
+if(NOT DEFINED CMAKE_ISPC_ARCHIVE_APPEND)
+  set(CMAKE_ISPC_ARCHIVE_APPEND "<CMAKE_AR> q <TARGET> <LINK_FLAGS> <OBJECTS>")
+endif()
+if(NOT DEFINED CMAKE_ISPC_ARCHIVE_FINISH)
+  set(CMAKE_ISPC_ARCHIVE_FINISH "<CMAKE_RANLIB> <TARGET>")
+endif()
+
+if(NOT CMAKE_ISPC_COMPILE_OBJECT)
+  set(CMAKE_ISPC_COMPILE_OBJECT
+    "<CMAKE_ISPC_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> --emit-obj <SOURCE> -h <ISPC_HEADER>")
+endif()
+
+set(CMAKE_ISPC_INFORMATION_LOADED 1)
diff --git a/share/cmake-3.18/Modules/CMakeImportBuildSettings.cmake b/share/cmake-3.22/Modules/CMakeImportBuildSettings.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeImportBuildSettings.cmake
rename to share/cmake-3.22/Modules/CMakeImportBuildSettings.cmake
diff --git a/share/cmake-3.18/Modules/CMakeInitializeConfigs.cmake b/share/cmake-3.22/Modules/CMakeInitializeConfigs.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeInitializeConfigs.cmake
rename to share/cmake-3.22/Modules/CMakeInitializeConfigs.cmake
diff --git a/share/cmake-3.18/Modules/CMakeJOMFindMake.cmake b/share/cmake-3.22/Modules/CMakeJOMFindMake.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeJOMFindMake.cmake
rename to share/cmake-3.22/Modules/CMakeJOMFindMake.cmake
diff --git a/share/cmake-3.18/Modules/CMakeJavaCompiler.cmake.in b/share/cmake-3.22/Modules/CMakeJavaCompiler.cmake.in
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeJavaCompiler.cmake.in
rename to share/cmake-3.22/Modules/CMakeJavaCompiler.cmake.in
diff --git a/share/cmake-3.18/Modules/CMakeJavaInformation.cmake b/share/cmake-3.22/Modules/CMakeJavaInformation.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeJavaInformation.cmake
rename to share/cmake-3.22/Modules/CMakeJavaInformation.cmake
diff --git a/share/cmake-3.18/Modules/CMakeLanguageInformation.cmake b/share/cmake-3.22/Modules/CMakeLanguageInformation.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeLanguageInformation.cmake
rename to share/cmake-3.22/Modules/CMakeLanguageInformation.cmake
diff --git a/share/cmake-3.18/Modules/CMakeMSYSFindMake.cmake b/share/cmake-3.22/Modules/CMakeMSYSFindMake.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeMSYSFindMake.cmake
rename to share/cmake-3.22/Modules/CMakeMSYSFindMake.cmake
diff --git a/share/cmake-3.18/Modules/CMakeMinGWFindMake.cmake b/share/cmake-3.22/Modules/CMakeMinGWFindMake.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeMinGWFindMake.cmake
rename to share/cmake-3.22/Modules/CMakeMinGWFindMake.cmake
diff --git a/share/cmake-3.18/Modules/CMakeNMakeFindMake.cmake b/share/cmake-3.22/Modules/CMakeNMakeFindMake.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeNMakeFindMake.cmake
rename to share/cmake-3.22/Modules/CMakeNMakeFindMake.cmake
diff --git a/share/cmake-3.18/Modules/CMakeNinjaFindMake.cmake b/share/cmake-3.22/Modules/CMakeNinjaFindMake.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeNinjaFindMake.cmake
rename to share/cmake-3.22/Modules/CMakeNinjaFindMake.cmake
diff --git a/share/cmake-3.22/Modules/CMakeOBJCCompiler.cmake.in b/share/cmake-3.22/Modules/CMakeOBJCCompiler.cmake.in
new file mode 100644
index 0000000..36f6ec1
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeOBJCCompiler.cmake.in
@@ -0,0 +1,73 @@
+set(CMAKE_OBJC_COMPILER "@CMAKE_OBJC_COMPILER@")
+set(CMAKE_OBJC_COMPILER_ARG1 "@CMAKE_OBJC_COMPILER_ARG1@")
+set(CMAKE_OBJC_COMPILER_ID "@CMAKE_OBJC_COMPILER_ID@")
+set(CMAKE_OBJC_COMPILER_VERSION "@CMAKE_OBJC_COMPILER_VERSION@")
+set(CMAKE_OBJC_COMPILER_VERSION_INTERNAL "@CMAKE_OBJC_COMPILER_VERSION_INTERNAL@")
+set(CMAKE_OBJC_COMPILER_WRAPPER "@CMAKE_OBJC_COMPILER_WRAPPER@")
+set(CMAKE_OBJC_STANDARD_COMPUTED_DEFAULT "@CMAKE_OBJC_STANDARD_COMPUTED_DEFAULT@")
+set(CMAKE_OBJC_EXTENSIONS_COMPUTED_DEFAULT "@CMAKE_OBJC_EXTENSIONS_COMPUTED_DEFAULT@")
+set(CMAKE_OBJC_COMPILE_FEATURES "@CMAKE_OBJC_COMPILE_FEATURES@")
+set(CMAKE_OBJC90_COMPILE_FEATURES "@CMAKE_OBJC90_COMPILE_FEATURES@")
+set(CMAKE_OBJC99_COMPILE_FEATURES "@CMAKE_OBJC99_COMPILE_FEATURES@")
+set(CMAKE_OBJC11_COMPILE_FEATURES "@CMAKE_OBJC11_COMPILE_FEATURES@")
+set(CMAKE_OBJC17_COMPILE_FEATURES "@CMAKE_OBJC17_COMPILE_FEATURES@")
+set(CMAKE_OBJC23_COMPILE_FEATURES "@CMAKE_OBJC23_COMPILE_FEATURES@")
+
+set(CMAKE_OBJC_PLATFORM_ID "@CMAKE_OBJC_PLATFORM_ID@")
+set(CMAKE_OBJC_SIMULATE_ID "@CMAKE_OBJC_SIMULATE_ID@")
+set(CMAKE_OBJC_COMPILER_FRONTEND_VARIANT "@CMAKE_OBJC_COMPILER_FRONTEND_VARIANT@")
+set(CMAKE_OBJC_SIMULATE_VERSION "@CMAKE_OBJC_SIMULATE_VERSION@")
+@_SET_CMAKE_OBJC_COMPILER_ARCHITECTURE_ID@
+@SET_CMAKE_XCODE_ARCHS@
+set(CMAKE_AR "@CMAKE_AR@")
+set(CMAKE_OBJC_COMPILER_AR "@CMAKE_OBJC_COMPILER_AR@")
+set(CMAKE_RANLIB "@CMAKE_RANLIB@")
+set(CMAKE_OBJC_COMPILER_RANLIB "@CMAKE_OBJC_COMPILER_RANLIB@")
+set(CMAKE_LINKER "@CMAKE_LINKER@")
+set(CMAKE_MT "@CMAKE_MT@")
+set(CMAKE_COMPILER_IS_GNUOBJC @CMAKE_COMPILER_IS_GNUOBJC@)
+set(CMAKE_OBJC_COMPILER_LOADED 1)
+set(CMAKE_OBJC_COMPILER_WORKS @CMAKE_OBJC_COMPILER_WORKS@)
+set(CMAKE_OBJC_ABI_COMPILED @CMAKE_OBJC_ABI_COMPILED@)
+
+set(CMAKE_OBJC_COMPILER_ENV_VAR "OBJC")
+
+set(CMAKE_OBJC_COMPILER_ID_RUN 1)
+set(CMAKE_OBJC_SOURCE_FILE_EXTENSIONS m)
+set(CMAKE_OBJC_IGNORE_EXTENSIONS h;H;o;O)
+set(CMAKE_OBJC_LINKER_PREFERENCE 5)
+
+foreach (lang C CXX OBJCXX)
+  foreach(extension IN LISTS CMAKE_OBJC_SOURCE_FILE_EXTENSIONS)
+    if (CMAKE_${lang}_COMPILER_ID_RUN)
+      list(REMOVE_ITEM CMAKE_${lang}_SOURCE_FILE_EXTENSIONS ${extension})
+    endif()
+  endforeach()
+endforeach()
+
+# Save compiler ABI information.
+set(CMAKE_OBJC_SIZEOF_DATA_PTR "@CMAKE_OBJC_SIZEOF_DATA_PTR@")
+set(CMAKE_OBJC_COMPILER_ABI "@CMAKE_OBJC_COMPILER_ABI@")
+set(CMAKE_OBJC_BYTE_ORDER "@CMAKE_OBJC_BYTE_ORDER@")
+set(CMAKE_OBJC_LIBRARY_ARCHITECTURE "@CMAKE_OBJC_LIBRARY_ARCHITECTURE@")
+
+if(CMAKE_OBJC_SIZEOF_DATA_PTR)
+  set(CMAKE_SIZEOF_VOID_P "${CMAKE_OBJC_SIZEOF_DATA_PTR}")
+endif()
+
+if(CMAKE_OBJC_COMPILER_ABI)
+  set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_OBJC_COMPILER_ABI}")
+endif()
+
+if(CMAKE_OBJC_LIBRARY_ARCHITECTURE)
+  set(CMAKE_LIBRARY_ARCHITECTURE "@CMAKE_OBJC_LIBRARY_ARCHITECTURE@")
+endif()
+
+@CMAKE_OBJC_COMPILER_CUSTOM_CODE@
+@CMAKE_OBJC_SYSROOT_FLAG_CODE@
+@CMAKE_OBJC_OSX_DEPLOYMENT_TARGET_FLAG_CODE@
+
+set(CMAKE_OBJC_IMPLICIT_INCLUDE_DIRECTORIES "@CMAKE_OBJC_IMPLICIT_INCLUDE_DIRECTORIES@")
+set(CMAKE_OBJC_IMPLICIT_LINK_LIBRARIES "@CMAKE_OBJC_IMPLICIT_LINK_LIBRARIES@")
+set(CMAKE_OBJC_IMPLICIT_LINK_DIRECTORIES "@CMAKE_OBJC_IMPLICIT_LINK_DIRECTORIES@")
+set(CMAKE_OBJC_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "@CMAKE_OBJC_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES@")
diff --git a/share/cmake-3.22/Modules/CMakeOBJCCompilerABI.m b/share/cmake-3.22/Modules/CMakeOBJCCompilerABI.m
new file mode 100644
index 0000000..0726cd3
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeOBJCCompilerABI.m
@@ -0,0 +1,22 @@
+#ifdef __cplusplus
+# error "A C++ compiler has been selected for Objective-C."
+#endif
+
+/*--------------------------------------------------------------------------*/
+
+#include "CMakeCompilerABI.h"
+
+/*--------------------------------------------------------------------------*/
+
+int main(int argc, char *argv[])
+{
+  int require = 0;
+  require += info_sizeof_dptr[argc];
+  require += info_byte_order_big_endian[argc];
+  require += info_byte_order_little_endian[argc];
+#if defined(ABI_ID)
+  require += info_abi[argc];
+#endif
+  (void)argv;
+  return require;
+}
diff --git a/share/cmake-3.22/Modules/CMakeOBJCCompilerId.m.in b/share/cmake-3.22/Modules/CMakeOBJCCompilerId.m.in
new file mode 100644
index 0000000..89bfe02
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeOBJCCompilerId.m.in
@@ -0,0 +1,76 @@
+#ifdef __cplusplus
+# error "An Objective-C++ compiler has been selected for Objective-C."
+#endif
+
+@CMAKE_OBJC_COMPILER_ID_CONTENT@
+
+/* Construct the string literal in pieces to prevent the source from
+   getting matched.  Store it in a pointer rather than an array
+   because some compilers will just produce instructions to fill the
+   array rather than assigning a pointer to a static array.  */
+char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
+#ifdef SIMULATE_ID
+char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
+#endif
+
+#ifdef __QNXNTO__
+char const* qnxnto = "INFO" ":" "qnxnto[]";
+#endif
+
+@CMAKE_OBJC_COMPILER_ID_PLATFORM_CONTENT@
+@CMAKE_OBJC_COMPILER_ID_ERROR_FOR_TEST@
+
+#if !defined(__STDC__)
+# if (defined(_MSC_VER) && !defined(__clang__)) \
+  || (defined(__ibmxl__) || defined(__IBMC__))
+#  define C_VERSION "90"
+# else
+#  define C_VERSION
+# endif
+#elif __STDC_VERSION__ > 201710L
+# define C_VERSION "23"
+#elif __STDC_VERSION__ >= 201710L
+# define C_VERSION "17"
+#elif __STDC_VERSION__ >= 201000L
+# define C_VERSION "11"
+#elif __STDC_VERSION__ >= 199901L
+# define C_VERSION "99"
+#else
+# define C_VERSION "90"
+#endif
+const char* info_language_standard_default =
+  "INFO" ":" "standard_default[" C_VERSION "]";
+
+const char* info_language_extensions_default = "INFO" ":" "extensions_default["
+#if (defined(__clang__) || defined(__GNUC__)) && !defined(__STRICT_ANSI__)
+  "ON"
+#else
+  "OFF"
+#endif
+"]";
+
+/*--------------------------------------------------------------------------*/
+
+int main(int argc, char* argv[])
+{
+  int require = 0;
+  require += info_compiler[argc];
+  require += info_platform[argc];
+  require += info_arch[argc];
+#ifdef COMPILER_VERSION_MAJOR
+  require += info_version[argc];
+#endif
+#ifdef COMPILER_VERSION_INTERNAL
+  require += info_version_internal[argc];
+#endif
+#ifdef SIMULATE_ID
+  require += info_simulate[argc];
+#endif
+#ifdef SIMULATE_VERSION_MAJOR
+  require += info_simulate_version[argc];
+#endif
+  require += info_language_standard_default[argc];
+  require += info_language_extensions_default[argc];
+  (void)argv;
+  return require;
+}
diff --git a/share/cmake-3.22/Modules/CMakeOBJCInformation.cmake b/share/cmake-3.22/Modules/CMakeOBJCInformation.cmake
new file mode 100644
index 0000000..4c697da
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeOBJCInformation.cmake
@@ -0,0 +1,207 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# This file sets the basic flags for the Objective-C language in CMake.
+# It also loads the available platform file for the system-compiler
+# if it exists.
+# It also loads a system - compiler - processor (or target hardware)
+# specific file, which is mainly useful for crosscompiling and embedded systems.
+
+include(CMakeLanguageInformation)
+
+# some compilers use different extensions (e.g. sdcc uses .rel)
+# so set the extension here first so it can be overridden by the compiler specific file
+set(CMAKE_OBJC_OUTPUT_EXTENSION .o)
+
+if(NOT CMAKE_INCLUDE_FLAG_OBJC)
+  set(CMAKE_INCLUDE_FLAG_OBJC ${CMAKE_INCLUDE_FLAG_C})
+endif()
+
+set(_INCLUDED_FILE 0)
+
+# Load compiler-specific information.
+if(CMAKE_OBJC_COMPILER_ID)
+  include(Compiler/${CMAKE_OBJC_COMPILER_ID}-OBJC OPTIONAL)
+endif()
+
+set(CMAKE_BASE_NAME)
+get_filename_component(CMAKE_BASE_NAME "${CMAKE_OBJC_COMPILER}" NAME_WE)
+if(CMAKE_COMPILER_IS_GNUOBJC)
+  set(CMAKE_BASE_NAME gcc)
+endif()
+
+
+# load a hardware specific file, mostly useful for embedded compilers
+if(CMAKE_SYSTEM_PROCESSOR)
+  if(CMAKE_OBJC_COMPILER_ID)
+    include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_OBJC_COMPILER_ID}-OBJC-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL RESULT_VARIABLE _INCLUDED_FILE)
+  endif()
+  if (NOT _INCLUDED_FILE)
+    include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_BASE_NAME}-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL)
+  endif ()
+endif()
+
+
+# load the system- and compiler specific files
+if(CMAKE_OBJC_COMPILER_ID)
+  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_OBJC_COMPILER_ID}-OBJC
+    OPTIONAL RESULT_VARIABLE _INCLUDED_FILE)
+endif()
+if (NOT _INCLUDED_FILE)
+  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_BASE_NAME}
+    OPTIONAL RESULT_VARIABLE _INCLUDED_FILE)
+endif ()
+
+# load any compiler-wrapper specific information
+if (CMAKE_OBJC_COMPILER_WRAPPER)
+  __cmake_include_compiler_wrapper(OBJC)
+endif ()
+
+# We specify the compiler information in the system file for some
+# platforms, but this language may not have been enabled when the file
+# was first included.  Include it again to get the language info.
+# Remove this when all compiler info is removed from system files.
+if (NOT _INCLUDED_FILE)
+  include(Platform/${CMAKE_SYSTEM_NAME} OPTIONAL)
+endif ()
+
+if(CMAKE_OBJC_SIZEOF_DATA_PTR)
+  foreach(f ${CMAKE_OBJC_ABI_FILES})
+    include(${f})
+  endforeach()
+  unset(CMAKE_OBJC_ABI_FILES)
+endif()
+
+# This should be included before the _INIT variables are
+# used to initialize the cache.  Since the rule variables
+# have if blocks on them, users can still define them here.
+# But, it should still be after the platform file so changes can
+# be made to those values.
+
+if(CMAKE_USER_MAKE_RULES_OVERRIDE)
+  # Save the full path of the file so try_compile can use it.
+  include(${CMAKE_USER_MAKE_RULES_OVERRIDE} RESULT_VARIABLE _override)
+  set(CMAKE_USER_MAKE_RULES_OVERRIDE "${_override}")
+endif()
+
+if(CMAKE_USER_MAKE_RULES_OVERRIDE_OBJC)
+  # Save the full path of the file so try_compile can use it.
+  include(${CMAKE_USER_MAKE_RULES_OVERRIDE_OBJC} RESULT_VARIABLE _override)
+  set(CMAKE_USER_MAKE_RULES_OVERRIDE_OBJC "${_override}")
+endif()
+
+if(CMAKE_EXECUTABLE_FORMAT STREQUAL "ELF")
+  if(NOT DEFINED CMAKE_OBJC_LINK_WHAT_YOU_USE_FLAG)
+    set(CMAKE_OBJC_LINK_WHAT_YOU_USE_FLAG "LINKER:--no-as-needed")
+  endif()
+  if(NOT DEFINED CMAKE_LINK_WHAT_YOU_USE_CHECK)
+    set(CMAKE_LINK_WHAT_YOU_USE_CHECK ldd -u -r)
+  endif()
+endif()
+
+
+# for most systems a module is the same as a shared library
+# so unless the variable CMAKE_MODULE_EXISTS is set just
+# copy the values from the LIBRARY variables
+if(NOT CMAKE_MODULE_EXISTS)
+  set(CMAKE_SHARED_MODULE_OBJC_FLAGS ${CMAKE_SHARED_LIBRARY_OBJC_FLAGS})
+  set(CMAKE_SHARED_MODULE_CREATE_OBJC_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_OBJC_FLAGS})
+endif()
+
+set(CMAKE_OBJC_FLAGS_INIT "$ENV{OBJCFLAGS} ${CMAKE_OBJC_FLAGS_INIT}")
+
+cmake_initialize_per_config_variable(CMAKE_OBJC_FLAGS "Flags used by the Objective-C compiler")
+
+if(CMAKE_OBJC_STANDARD_LIBRARIES_INIT)
+  set(CMAKE_OBJC_STANDARD_LIBRARIES "${CMAKE_OBJC_STANDARD_LIBRARIES_INIT}"
+    CACHE STRING "Libraries linked by default with all Objective-C applications.")
+  mark_as_advanced(CMAKE_OBJC_STANDARD_LIBRARIES)
+endif()
+
+if(NOT CMAKE_OBJC_COMPILER_LAUNCHER AND DEFINED ENV{CMAKE_OBJC_COMPILER_LAUNCHER})
+  set(CMAKE_OBJC_COMPILER_LAUNCHER "$ENV{CMAKE_OBJC_COMPILER_LAUNCHER}"
+    CACHE STRING "Compiler launcher for OBJC.")
+endif()
+
+if(NOT CMAKE_OBJC_LINKER_LAUNCHER AND DEFINED ENV{CMAKE_OBJC_LINKER_LAUNCHER})
+  set(CMAKE_OBJC_LINKER_LAUNCHER "$ENV{CMAKE_OBJC_LINKER_LAUNCHER}"
+    CACHE STRING "Linker launcher for OBJC.")
+endif()
+
+include(CMakeCommonLanguageInclude)
+
+# now define the following rule variables
+
+# CMAKE_OBJC_CREATE_SHARED_LIBRARY
+# CMAKE_OBJC_CREATE_SHARED_MODULE
+# CMAKE_OBJC_COMPILE_OBJECT
+# CMAKE_OBJC_LINK_EXECUTABLE
+
+# variables supplied by the generator at use time
+# <TARGET>
+# <TARGET_BASE> the target without the suffix
+# <OBJECTS>
+# <OBJECT>
+# <LINK_LIBRARIES>
+# <FLAGS>
+# <LINK_FLAGS>
+
+# Objective-C compiler information
+# <CMAKE_OBJC_COMPILER>
+# <CMAKE_SHARED_LIBRARY_CREATE_OBJC_FLAGS>
+# <CMAKE_SHARED_MODULE_CREATE_OBJC_FLAGS>
+# <CMAKE_OBJC_LINK_FLAGS>
+
+# Static library tools
+# <CMAKE_AR>
+# <CMAKE_RANLIB>
+
+
+# create an Objective-C shared library
+if(NOT CMAKE_OBJC_CREATE_SHARED_LIBRARY)
+  set(CMAKE_OBJC_CREATE_SHARED_LIBRARY
+      "<CMAKE_OBJC_COMPILER> <CMAKE_SHARED_LIBRARY_OBJC_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_OBJC_FLAGS> <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
+endif()
+
+# create an Objective-C shared module just copy the shared library rule
+if(NOT CMAKE_OBJC_CREATE_SHARED_MODULE)
+  set(CMAKE_OBJC_CREATE_SHARED_MODULE ${CMAKE_OBJC_CREATE_SHARED_LIBRARY})
+endif()
+
+# Create an static archive incrementally for large object file counts.
+# If CMAKE_OBJC_CREATE_STATIC_LIBRARY is set it will override these.
+if(NOT DEFINED CMAKE_OBJC_ARCHIVE_CREATE)
+  set(CMAKE_OBJC_ARCHIVE_CREATE "<CMAKE_AR> qc <TARGET> <LINK_FLAGS> <OBJECTS>")
+endif()
+if(NOT DEFINED CMAKE_OBJC_ARCHIVE_APPEND)
+  set(CMAKE_OBJC_ARCHIVE_APPEND "<CMAKE_AR> q <TARGET> <LINK_FLAGS> <OBJECTS>")
+endif()
+if(NOT DEFINED CMAKE_OBJC_ARCHIVE_FINISH)
+  set(CMAKE_OBJC_ARCHIVE_FINISH "<CMAKE_RANLIB> <TARGET>")
+endif()
+
+# compile an Objective-C file into an object file
+if(NOT CMAKE_OBJC_COMPILE_OBJECT)
+  set(CMAKE_OBJC_COMPILE_OBJECT
+    "<CMAKE_OBJC_COMPILER> <DEFINES> <INCLUDES> -x objective-c <FLAGS> -o <OBJECT> -c <SOURCE>")
+endif()
+
+if(NOT CMAKE_OBJC_LINK_EXECUTABLE)
+  set(CMAKE_OBJC_LINK_EXECUTABLE
+    "<CMAKE_OBJC_COMPILER> <FLAGS> <CMAKE_OBJC_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
+endif()
+
+if(NOT CMAKE_EXECUTABLE_RUNTIME_OBJC_FLAG)
+  set(CMAKE_EXECUTABLE_RUNTIME_OBJC_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_OBJC_FLAG})
+endif()
+
+if(NOT CMAKE_EXECUTABLE_RUNTIME_OBJC_FLAG_SEP)
+  set(CMAKE_EXECUTABLE_RUNTIME_OBJC_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_OBJC_FLAG_SEP})
+endif()
+
+if(NOT CMAKE_EXECUTABLE_RPATH_LINK_OBJC_FLAG)
+  set(CMAKE_EXECUTABLE_RPATH_LINK_OBJC_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_OBJC_FLAG})
+endif()
+
+set(CMAKE_OBJC_INFORMATION_LOADED 1)
diff --git a/share/cmake-3.22/Modules/CMakeOBJCXXCompiler.cmake.in b/share/cmake-3.22/Modules/CMakeOBJCXXCompiler.cmake.in
new file mode 100644
index 0000000..4f27100
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeOBJCXXCompiler.cmake.in
@@ -0,0 +1,82 @@
+set(CMAKE_OBJCXX_COMPILER "@CMAKE_OBJCXX_COMPILER@")
+set(CMAKE_OBJCXX_COMPILER_ARG1 "@CMAKE_OBJCXX_COMPILER_ARG1@")
+set(CMAKE_OBJCXX_COMPILER_ID "@CMAKE_OBJCXX_COMPILER_ID@")
+set(CMAKE_OBJCXX_COMPILER_VERSION "@CMAKE_OBJCXX_COMPILER_VERSION@")
+set(CMAKE_OBJCXX_COMPILER_VERSION_INTERNAL "@CMAKE_OBJCXX_COMPILER_VERSION_INTERNAL@")
+set(CMAKE_OBJCXX_COMPILER_WRAPPER "@CMAKE_OBJCXX_COMPILER_WRAPPER@")
+set(CMAKE_OBJCXX_STANDARD_COMPUTED_DEFAULT "@CMAKE_OBJCXX_STANDARD_COMPUTED_DEFAULT@")
+set(CMAKE_OBJCXX_EXTENSIONS_COMPUTED_DEFAULT "@CMAKE_OBJCXX_EXTENSIONS_COMPUTED_DEFAULT@")
+set(CMAKE_OBJCXX_COMPILE_FEATURES "@CMAKE_OBJCXX_COMPILE_FEATURES@")
+set(CMAKE_OBJCXX98_COMPILE_FEATURES "@CMAKE_OBJCXX98_COMPILE_FEATURES@")
+set(CMAKE_OBJCXX11_COMPILE_FEATURES "@CMAKE_OBJCXX11_COMPILE_FEATURES@")
+set(CMAKE_OBJCXX14_COMPILE_FEATURES "@CMAKE_OBJCXX14_COMPILE_FEATURES@")
+set(CMAKE_OBJCXX17_COMPILE_FEATURES "@CMAKE_OBJCXX17_COMPILE_FEATURES@")
+set(CMAKE_OBJCXX20_COMPILE_FEATURES "@CMAKE_OBJCXX20_COMPILE_FEATURES@")
+set(CMAKE_OBJCXX23_COMPILE_FEATURES "@CMAKE_OBJCXX23_COMPILE_FEATURES@")
+
+set(CMAKE_OBJCXX_PLATFORM_ID "@CMAKE_OBJCXX_PLATFORM_ID@")
+set(CMAKE_OBJCXX_SIMULATE_ID "@CMAKE_OBJCXX_SIMULATE_ID@")
+set(CMAKE_OBJCXX_COMPILER_FRONTEND_VARIANT "@CMAKE_OBJCXX_COMPILER_FRONTEND_VARIANT@")
+set(CMAKE_OBJCXX_SIMULATE_VERSION "@CMAKE_OBJCXX_SIMULATE_VERSION@")
+@_SET_CMAKE_OBJCXX_COMPILER_ARCHITECTURE_ID@
+@SET_CMAKE_XCODE_ARCHS@
+set(CMAKE_AR "@CMAKE_AR@")
+set(CMAKE_OBJCXX_COMPILER_AR "@CMAKE_OBJCXX_COMPILER_AR@")
+set(CMAKE_RANLIB "@CMAKE_RANLIB@")
+set(CMAKE_OBJCXX_COMPILER_RANLIB "@CMAKE_OBJCXX_COMPILER_RANLIB@")
+set(CMAKE_LINKER "@CMAKE_LINKER@")
+set(CMAKE_MT "@CMAKE_MT@")
+set(CMAKE_COMPILER_IS_GNUOBJCXX @CMAKE_COMPILER_IS_GNUOBJCXX@)
+set(CMAKE_OBJCXX_COMPILER_LOADED 1)
+set(CMAKE_OBJCXX_COMPILER_WORKS @CMAKE_OBJCXX_COMPILER_WORKS@)
+set(CMAKE_OBJCXX_ABI_COMPILED @CMAKE_OBJCXX_ABI_COMPILED@)
+
+set(CMAKE_OBJCXX_COMPILER_ENV_VAR "OBJCXX")
+
+set(CMAKE_OBJCXX_COMPILER_ID_RUN 1)
+set(CMAKE_OBJCXX_SOURCE_FILE_EXTENSIONS M;m;mm)
+set(CMAKE_OBJCXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O)
+
+if (CMAKE_OBJC_COMPILER_ID_RUN)
+  foreach(extension IN LISTS CMAKE_OBJC_SOURCE_FILE_EXTENSIONS)
+    list(REMOVE_ITEM CMAKE_OBJCXX_SOURCE_FILE_EXTENSIONS ${extension})
+  endforeach()
+endif()
+
+foreach (lang C CXX OBJC)
+  foreach(extension IN LISTS CMAKE_OBJCXX_SOURCE_FILE_EXTENSIONS)
+    if (CMAKE_${lang}_COMPILER_ID_RUN)
+      list(REMOVE_ITEM CMAKE_${lang}_SOURCE_FILE_EXTENSIONS ${extension})
+    endif()
+  endforeach()
+endforeach()
+
+set(CMAKE_OBJCXX_LINKER_PREFERENCE 25)
+set(CMAKE_OBJCXX_LINKER_PREFERENCE_PROPAGATES 1)
+
+# Save compiler ABI information.
+set(CMAKE_OBJCXX_SIZEOF_DATA_PTR "@CMAKE_OBJCXX_SIZEOF_DATA_PTR@")
+set(CMAKE_OBJCXX_COMPILER_ABI "@CMAKE_OBJCXX_COMPILER_ABI@")
+set(CMAKE_OBJCXX_BYTE_ORDER "@CMAKE_OBJCXX_BYTE_ORDER@")
+set(CMAKE_OBJCXX_LIBRARY_ARCHITECTURE "@CMAKE_OBJCXX_LIBRARY_ARCHITECTURE@")
+
+if(CMAKE_OBJCXX_SIZEOF_DATA_PTR)
+  set(CMAKE_SIZEOF_VOID_P "${CMAKE_OBJCXX_SIZEOF_DATA_PTR}")
+endif()
+
+if(CMAKE_OBJCXX_COMPILER_ABI)
+  set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_OBJCXX_COMPILER_ABI}")
+endif()
+
+if(CMAKE_OBJCXX_LIBRARY_ARCHITECTURE)
+  set(CMAKE_LIBRARY_ARCHITECTURE "@CMAKE_OBJCXX_LIBRARY_ARCHITECTURE@")
+endif()
+
+@CMAKE_OBJCXX_COMPILER_CUSTOM_CODE@
+@CMAKE_OBJCXX_SYSROOT_FLAG_CODE@
+@CMAKE_OBJCXX_OSX_DEPLOYMENT_TARGET_FLAG_CODE@
+
+set(CMAKE_OBJCXX_IMPLICIT_INCLUDE_DIRECTORIES "@CMAKE_OBJCXX_IMPLICIT_INCLUDE_DIRECTORIES@")
+set(CMAKE_OBJCXX_IMPLICIT_LINK_LIBRARIES "@CMAKE_OBJCXX_IMPLICIT_LINK_LIBRARIES@")
+set(CMAKE_OBJCXX_IMPLICIT_LINK_DIRECTORIES "@CMAKE_OBJCXX_IMPLICIT_LINK_DIRECTORIES@")
+set(CMAKE_OBJCXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "@CMAKE_OBJCXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES@")
diff --git a/share/cmake-3.22/Modules/CMakeOBJCXXCompilerABI.mm b/share/cmake-3.22/Modules/CMakeOBJCXXCompilerABI.mm
new file mode 100644
index 0000000..7b9fefc
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeOBJCXXCompilerABI.mm
@@ -0,0 +1,22 @@
+#ifndef __cplusplus
+# error "A C compiler has been selected for Objective-C++."
+#endif
+
+/*--------------------------------------------------------------------------*/
+
+#include "CMakeCompilerABI.h"
+
+/*--------------------------------------------------------------------------*/
+
+int main(int argc, char *argv[])
+{
+  int require = 0;
+  require += info_sizeof_dptr[argc];
+  require += info_byte_order_big_endian[argc];
+  require += info_byte_order_little_endian[argc];
+#if defined(ABI_ID)
+  require += info_abi[argc];
+#endif
+  (void)argv;
+  return require;
+}
diff --git a/share/cmake-3.22/Modules/CMakeOBJCXXCompilerId.mm.in b/share/cmake-3.22/Modules/CMakeOBJCXXCompilerId.mm.in
new file mode 100644
index 0000000..2145b40
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeOBJCXXCompilerId.mm.in
@@ -0,0 +1,79 @@
+/* This source file must have a .cpp extension so that all C++ compilers
+   recognize the extension without flags.  Borland does not know .cxx for
+   example.  */
+#ifndef __cplusplus
+# error "An Objective-C compiler has been selected for Objective-C++."
+#endif
+
+@CMAKE_OBJCXX_COMPILER_ID_CONTENT@
+
+/* Construct the string literal in pieces to prevent the source from
+   getting matched.  Store it in a pointer rather than an array
+   because some compilers will just produce instructions to fill the
+   array rather than assigning a pointer to a static array.  */
+char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
+#ifdef SIMULATE_ID
+char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
+#endif
+
+#ifdef __QNXNTO__
+char const* qnxnto = "INFO" ":" "qnxnto[]";
+#endif
+
+@CMAKE_OBJCXX_COMPILER_ID_PLATFORM_CONTENT@
+@CMAKE_OBJCXX_COMPILER_ID_ERROR_FOR_TEST@
+
+#if defined(_MSC_VER) && defined(_MSVC_LANG)
+#define CXX_STD _MSVC_LANG
+#else
+#define CXX_STD __cplusplus
+#endif
+
+const char* info_language_standard_default = "INFO" ":" "standard_default["
+#if CXX_STD > 202002L
+  "23"
+#elfif CXX_STD > 201703L
+  "20"
+#elif CXX_STD >= 201703L
+  "17"
+#elif CXX_STD >= 201402L
+  "14"
+#elif CXX_STD >= 201103L
+  "11"
+#else
+  "98"
+#endif
+"]";
+
+const char* info_language_extensions_default = "INFO" ":" "extensions_default["
+#if (defined(__clang__) || defined(__GNUC__)) && !defined(__STRICT_ANSI__)
+  "ON"
+#else
+  "OFF"
+#endif
+"]";
+
+/*--------------------------------------------------------------------------*/
+
+int main(int argc, char* argv[])
+{
+  int require = 0;
+  require += info_compiler[argc];
+  require += info_platform[argc];
+#ifdef COMPILER_VERSION_MAJOR
+  require += info_version[argc];
+#endif
+#ifdef COMPILER_VERSION_INTERNAL
+  require += info_version_internal[argc];
+#endif
+#ifdef SIMULATE_ID
+  require += info_simulate[argc];
+#endif
+#ifdef SIMULATE_VERSION_MAJOR
+  require += info_simulate_version[argc];
+#endif
+  require += info_language_standard_default[argc];
+  require += info_language_extensions_default[argc];
+  (void)argv;
+  return require;
+}
diff --git a/share/cmake-3.22/Modules/CMakeOBJCXXInformation.cmake b/share/cmake-3.22/Modules/CMakeOBJCXXInformation.cmake
new file mode 100644
index 0000000..a6d824f
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeOBJCXXInformation.cmake
@@ -0,0 +1,292 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# This file sets the basic flags for the Objective-C++ language in CMake.
+# It also loads the available platform file for the system-compiler
+# if it exists.
+# It also loads a system - compiler - processor (or target hardware)
+# specific file, which is mainly useful for crosscompiling and embedded systems.
+
+include(CMakeLanguageInformation)
+
+# some compilers use different extensions (e.g. sdcc uses .rel)
+# so set the extension here first so it can be overridden by the compiler specific file
+set(CMAKE_OBJCXX_OUTPUT_EXTENSION .o)
+
+set(_INCLUDED_FILE 0)
+
+# Load compiler-specific information.
+if(CMAKE_OBJCXX_COMPILER_ID)
+  include(Compiler/${CMAKE_OBJCXX_COMPILER_ID}-OBJCXX OPTIONAL)
+endif()
+
+set(CMAKE_BASE_NAME)
+get_filename_component(CMAKE_BASE_NAME "${CMAKE_OBJCXX_COMPILER}" NAME_WE)
+# since the gnu compiler has several names force g++
+if(CMAKE_COMPILER_IS_GNUOBJCXX)
+  set(CMAKE_BASE_NAME g++)
+endif()
+
+
+# load a hardware specific file, mostly useful for embedded compilers
+if(CMAKE_SYSTEM_PROCESSOR)
+  if(CMAKE_OBJCXX_COMPILER_ID)
+    include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_OBJCXX_COMPILER_ID}-OBJCXX-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL RESULT_VARIABLE _INCLUDED_FILE)
+  endif()
+  if (NOT _INCLUDED_FILE)
+    include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_BASE_NAME}-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL)
+  endif ()
+endif()
+
+# load the system- and compiler specific files
+if(CMAKE_OBJCXX_COMPILER_ID)
+  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_OBJCXX_COMPILER_ID}-OBJCXX OPTIONAL RESULT_VARIABLE _INCLUDED_FILE)
+endif()
+if (NOT _INCLUDED_FILE)
+  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_BASE_NAME} OPTIONAL
+          RESULT_VARIABLE _INCLUDED_FILE)
+endif ()
+
+# load any compiler-wrapper specific information
+if (CMAKE_OBJCXX_COMPILER_WRAPPER)
+  __cmake_include_compiler_wrapper(OBJCXX)
+endif ()
+
+# We specify the compiler information in the system file for some
+# platforms, but this language may not have been enabled when the file
+# was first included.  Include it again to get the language info.
+# Remove this when all compiler info is removed from system files.
+if (NOT _INCLUDED_FILE)
+  include(Platform/${CMAKE_SYSTEM_NAME} OPTIONAL)
+endif ()
+
+if(CMAKE_OBJCXX_SIZEOF_DATA_PTR)
+  foreach(f ${CMAKE_OBJCXX_ABI_FILES})
+    include(${f})
+  endforeach()
+  unset(CMAKE_OBJCXX_ABI_FILES)
+endif()
+
+# This should be included before the _INIT variables are
+# used to initialize the cache.  Since the rule variables
+# have if blocks on them, users can still define them here.
+# But, it should still be after the platform file so changes can
+# be made to those values.
+
+if(CMAKE_USER_MAKE_RULES_OVERRIDE)
+  # Save the full path of the file so try_compile can use it.
+  include(${CMAKE_USER_MAKE_RULES_OVERRIDE} RESULT_VARIABLE _override)
+  set(CMAKE_USER_MAKE_RULES_OVERRIDE "${_override}")
+endif()
+
+if(CMAKE_USER_MAKE_RULES_OVERRIDE_OBJCXX)
+  # Save the full path of the file so try_compile can use it.
+  include(${CMAKE_USER_MAKE_RULES_OVERRIDE_OBJCXX} RESULT_VARIABLE _override)
+  set(CMAKE_USER_MAKE_RULES_OVERRIDE_OBJCXX "${_override}")
+endif()
+
+
+# Create a set of shared library variable specific to Objective-C++
+# For 90% of the systems, these are the same flags as the Objective-C versions
+# so if these are not set just copy the flags from the Objective-C version
+if(NOT CMAKE_SHARED_LIBRARY_CREATE_OBJCXX_FLAGS)
+  set(CMAKE_SHARED_LIBRARY_CREATE_OBJCXX_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_OBJC_FLAGS})
+endif()
+
+if(NOT CMAKE_OBJCXX_COMPILE_OPTIONS_PIC)
+  set(CMAKE_OBJCXX_COMPILE_OPTIONS_PIC ${CMAKE_OBJC_COMPILE_OPTIONS_PIC})
+endif()
+
+if(NOT CMAKE_OBJCXX_COMPILE_OPTIONS_PIE)
+  set(CMAKE_OBJCXX_COMPILE_OPTIONS_PIE ${CMAKE_OBJC_COMPILE_OPTIONS_PIE})
+endif()
+if(NOT CMAKE_OBJCXX_LINK_OPTIONS_PIE)
+  set(CMAKE_OBJCXX_LINK_OPTIONS_PIE ${CMAKE_OBJC_LINK_OPTIONS_PIE})
+endif()
+if(NOT CMAKE_OBJCXX_LINK_OPTIONS_NO_PIE)
+  set(CMAKE_OBJCXX_LINK_OPTIONS_NO_PIE ${CMAKE_OBJC_LINK_OPTIONS_NO_PIE})
+endif()
+
+if(NOT CMAKE_OBJCXX_COMPILE_OPTIONS_DLL)
+  set(CMAKE_OBJCXX_COMPILE_OPTIONS_DLL ${CMAKE_OBJC_COMPILE_OPTIONS_DLL})
+endif()
+
+if(NOT CMAKE_SHARED_LIBRARY_OBJCXX_FLAGS)
+  set(CMAKE_SHARED_LIBRARY_OBJCXX_FLAGS ${CMAKE_SHARED_LIBRARY_OBJC_FLAGS})
+endif()
+
+if(NOT DEFINED CMAKE_SHARED_LIBRARY_LINK_OBJCXX_FLAGS)
+  set(CMAKE_SHARED_LIBRARY_LINK_OBJCXX_FLAGS ${CMAKE_SHARED_LIBRARY_LINK_OBJC_FLAGS})
+endif()
+
+if(NOT CMAKE_SHARED_LIBRARY_RUNTIME_OBJCXX_FLAG)
+  set(CMAKE_SHARED_LIBRARY_RUNTIME_OBJCXX_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_OBJC_FLAG})
+endif()
+
+if(NOT CMAKE_SHARED_LIBRARY_RUNTIME_OBJCXX_FLAG_SEP)
+  set(CMAKE_SHARED_LIBRARY_RUNTIME_OBJCXX_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_OBJC_FLAG_SEP})
+endif()
+
+if(NOT CMAKE_SHARED_LIBRARY_RPATH_LINK_OBJCXX_FLAG)
+  set(CMAKE_SHARED_LIBRARY_RPATH_LINK_OBJCXX_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_OBJC_FLAG})
+endif()
+
+if(NOT DEFINED CMAKE_EXE_EXPORTS_OBJCXX_FLAG)
+  set(CMAKE_EXE_EXPORTS_OBJCXX_FLAG ${CMAKE_EXE_EXPORTS_OBJC_FLAG})
+endif()
+
+if(NOT DEFINED CMAKE_SHARED_LIBRARY_SONAME_OBJCXX_FLAG)
+  set(CMAKE_SHARED_LIBRARY_SONAME_OBJCXX_FLAG ${CMAKE_SHARED_LIBRARY_SONAME_OBJC_FLAG})
+endif()
+
+if(NOT CMAKE_EXECUTABLE_RUNTIME_OBJCXX_FLAG)
+  set(CMAKE_EXECUTABLE_RUNTIME_OBJCXX_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_OBJCXX_FLAG})
+endif()
+
+if(NOT CMAKE_EXECUTABLE_RUNTIME_OBJCXX_FLAG_SEP)
+  set(CMAKE_EXECUTABLE_RUNTIME_OBJCXX_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_OBJCXX_FLAG_SEP})
+endif()
+
+if(NOT CMAKE_EXECUTABLE_RPATH_LINK_OBJCXX_FLAG)
+  set(CMAKE_EXECUTABLE_RPATH_LINK_OBJCXX_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_OBJCXX_FLAG})
+endif()
+
+if(NOT DEFINED CMAKE_SHARED_LIBRARY_LINK_OBJCXX_WITH_RUNTIME_PATH)
+  set(CMAKE_SHARED_LIBRARY_LINK_OBJCXX_WITH_RUNTIME_PATH ${CMAKE_SHARED_LIBRARY_LINK_OBJC_WITH_RUNTIME_PATH})
+endif()
+
+if(NOT CMAKE_INCLUDE_FLAG_OBJCXX)
+  set(CMAKE_INCLUDE_FLAG_OBJCXX ${CMAKE_INCLUDE_FLAG_C})
+endif()
+
+# for most systems a module is the same as a shared library
+# so unless the variable CMAKE_MODULE_EXISTS is set just
+# copy the values from the LIBRARY variables
+if(NOT CMAKE_MODULE_EXISTS)
+  set(CMAKE_SHARED_MODULE_OBJCXX_FLAGS ${CMAKE_SHARED_LIBRARY_OBJCXX_FLAGS})
+  set(CMAKE_SHARED_MODULE_CREATE_OBJCXX_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_OBJCXX_FLAGS})
+endif()
+
+# repeat for modules
+if(NOT CMAKE_SHARED_MODULE_CREATE_OBJCXX_FLAGS)
+  set(CMAKE_SHARED_MODULE_CREATE_OBJCXX_FLAGS ${CMAKE_SHARED_MODULE_CREATE_OBJC_FLAGS})
+endif()
+
+if(NOT CMAKE_SHARED_MODULE_OBJCXX_FLAGS)
+  set(CMAKE_SHARED_MODULE_OBJCXX_FLAGS ${CMAKE_SHARED_MODULE_OBJC_FLAGS})
+endif()
+
+# Initialize OBJCXX link type selection flags from OBJC versions.
+foreach(type SHARED_LIBRARY SHARED_MODULE EXE)
+  if(NOT CMAKE_${type}_LINK_STATIC_OBJCXX_FLAGS)
+    set(CMAKE_${type}_LINK_STATIC_OBJCXX_FLAGS
+      ${CMAKE_${type}_LINK_STATIC_OBJC_FLAGS})
+  endif()
+  if(NOT CMAKE_${type}_LINK_DYNAMIC_OBJCXX_FLAGS)
+    set(CMAKE_${type}_LINK_DYNAMIC_OBJCXX_FLAGS
+      ${CMAKE_${type}_LINK_DYNAMIC_OBJC_FLAGS})
+  endif()
+endforeach()
+
+if(CMAKE_EXECUTABLE_FORMAT STREQUAL "ELF")
+  if(NOT DEFINED CMAKE_OBJCXX_LINK_WHAT_YOU_USE_FLAG)
+    set(CMAKE_OBJCXX_LINK_WHAT_YOU_USE_FLAG "LINKER:--no-as-needed")
+  endif()
+  if(NOT DEFINED CMAKE_LINK_WHAT_YOU_USE_CHECK)
+    set(CMAKE_LINK_WHAT_YOU_USE_CHECK ldd -u -r)
+  endif()
+endif()
+
+# add the flags to the cache based
+# on the initial values computed in the platform/*.cmake files
+# use _INIT variables so that this only happens the first time
+# and you can set these flags in the cmake cache
+set(CMAKE_OBJCXX_FLAGS_INIT "$ENV{OBJCXXFLAGS} ${CMAKE_OBJCXX_FLAGS_INIT}")
+
+cmake_initialize_per_config_variable(CMAKE_OBJCXX_FLAGS "Flags used by the Objective-C++ compiler")
+
+if(CMAKE_OBJCXX_STANDARD_LIBRARIES_INIT)
+  set(CMAKE_OBJCXX_STANDARD_LIBRARIES "${CMAKE_OBJCXX_STANDARD_LIBRARIES_INIT}"
+    CACHE STRING "Libraries linked by default with all Objective-C++ applications.")
+  mark_as_advanced(CMAKE_OBJCXX_STANDARD_LIBRARIES)
+endif()
+
+if(NOT CMAKE_OBJCXX_COMPILER_LAUNCHER AND DEFINED ENV{CMAKE_OBJCXX_COMPILER_LAUNCHER})
+  set(CMAKE_OBJCXX_COMPILER_LAUNCHER "$ENV{CMAKE_OBJCXX_COMPILER_LAUNCHER}"
+    CACHE STRING "Compiler launcher for OBJCXX.")
+endif()
+
+if(NOT CMAKE_OBJCXX_LINKER_LAUNCHER AND DEFINED ENV{CMAKE_OBJCXX_LINKER_LAUNCHER})
+  set(CMAKE_OBJCXX_LINKER_LAUNCHER "$ENV{CMAKE_OBJCXX_LINKER_LAUNCHER}"
+    CACHE STRING "Linker launcher for OBJCXX.")
+endif()
+
+include(CMakeCommonLanguageInclude)
+
+# now define the following rules:
+# CMAKE_OBJCXX_CREATE_SHARED_LIBRARY
+# CMAKE_OBJCXX_CREATE_SHARED_MODULE
+# CMAKE_OBJCXX_COMPILE_OBJECT
+# CMAKE_OBJCXX_LINK_EXECUTABLE
+
+# variables supplied by the generator at use time
+# <TARGET>
+# <TARGET_BASE> the target without the suffix
+# <OBJECTS>
+# <OBJECT>
+# <LINK_LIBRARIES>
+# <FLAGS>
+# <LINK_FLAGS>
+
+# Objective-C++ compiler information
+# <CMAKE_OBJCXX_COMPILER>
+# <CMAKE_SHARED_LIBRARY_CREATE_OBJCXX_FLAGS>
+# <CMAKE_OBJCXX_SHARED_MODULE_CREATE_FLAGS>
+# <CMAKE_OBJCXX_LINK_FLAGS>
+
+# Static library tools
+# <CMAKE_AR>
+# <CMAKE_RANLIB>
+
+
+# create a shared Objective-C++ library
+if(NOT CMAKE_OBJCXX_CREATE_SHARED_LIBRARY)
+  set(CMAKE_OBJCXX_CREATE_SHARED_LIBRARY
+      "<CMAKE_OBJCXX_COMPILER> <CMAKE_SHARED_LIBRARY_OBJCXX_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_OBJCXX_FLAGS> <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
+endif()
+
+# create an Objective-C++ shared module copy the shared library rule by default
+if(NOT CMAKE_OBJCXX_CREATE_SHARED_MODULE)
+  set(CMAKE_OBJCXX_CREATE_SHARED_MODULE ${CMAKE_OBJCXX_CREATE_SHARED_LIBRARY})
+endif()
+
+
+# Create a static archive incrementally for large object file counts.
+# If CMAKE_OBJCXX_CREATE_STATIC_LIBRARY is set it will override these.
+if(NOT DEFINED CMAKE_OBJCXX_ARCHIVE_CREATE)
+  set(CMAKE_OBJCXX_ARCHIVE_CREATE "<CMAKE_AR> qc <TARGET> <LINK_FLAGS> <OBJECTS>")
+endif()
+if(NOT DEFINED CMAKE_OBJCXX_ARCHIVE_APPEND)
+  set(CMAKE_OBJCXX_ARCHIVE_APPEND "<CMAKE_AR> q <TARGET> <LINK_FLAGS> <OBJECTS>")
+endif()
+if(NOT DEFINED CMAKE_OBJCXX_ARCHIVE_FINISH)
+  set(CMAKE_OBJCXX_ARCHIVE_FINISH "<CMAKE_RANLIB> <TARGET>")
+endif()
+
+# compile an Objective-C++ file into an object file
+if(NOT CMAKE_OBJCXX_COMPILE_OBJECT)
+  set(CMAKE_OBJCXX_COMPILE_OBJECT
+    "<CMAKE_OBJCXX_COMPILER> <DEFINES> <INCLUDES> -x objective-c++ <FLAGS> -o <OBJECT> -c <SOURCE>")
+endif()
+
+if(NOT CMAKE_OBJCXX_LINK_EXECUTABLE)
+  set(CMAKE_OBJCXX_LINK_EXECUTABLE
+    "<CMAKE_OBJCXX_COMPILER> <FLAGS> <CMAKE_OBJCXX_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
+endif()
+
+mark_as_advanced(
+CMAKE_VERBOSE_MAKEFILE
+)
+
+set(CMAKE_OBJCXX_INFORMATION_LOADED 1)
diff --git a/share/cmake-3.22/Modules/CMakePackageConfigHelpers.cmake b/share/cmake-3.22/Modules/CMakePackageConfigHelpers.cmake
new file mode 100644
index 0000000..5813956
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakePackageConfigHelpers.cmake
@@ -0,0 +1,344 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CMakePackageConfigHelpers
+-------------------------
+
+Helpers functions for creating config files that can be included by other
+projects to find and use a package.
+
+Adds the :command:`configure_package_config_file()` and
+:command:`write_basic_package_version_file()` commands.
+
+Generating a Package Configuration File
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. command:: configure_package_config_file
+
+ Create a config file for a project::
+
+   configure_package_config_file(<input> <output>
+     INSTALL_DESTINATION <path>
+     [PATH_VARS <var1> <var2> ... <varN>]
+     [NO_SET_AND_CHECK_MACRO]
+     [NO_CHECK_REQUIRED_COMPONENTS_MACRO]
+     [INSTALL_PREFIX <path>]
+     )
+
+``configure_package_config_file()`` should be used instead of the plain
+:command:`configure_file()` command when creating the ``<PackageName>Config.cmake``
+or ``<PackageName>-config.cmake`` file for installing a project or library.
+It helps making the resulting package relocatable by avoiding hardcoded paths
+in the installed ``Config.cmake`` file.
+
+In a ``FooConfig.cmake`` file there may be code like this to make the install
+destinations know to the using project:
+
+.. code-block:: cmake
+
+   set(FOO_INCLUDE_DIR   "@CMAKE_INSTALL_FULL_INCLUDEDIR@" )
+   set(FOO_DATA_DIR   "@CMAKE_INSTALL_PREFIX@/@RELATIVE_DATA_INSTALL_DIR@" )
+   set(FOO_ICONS_DIR   "@CMAKE_INSTALL_PREFIX@/share/icons" )
+   #...logic to determine installedPrefix from the own location...
+   set(FOO_CONFIG_DIR  "${installedPrefix}/@CONFIG_INSTALL_DIR@" )
+
+All 4 options shown above are not sufficient, since the first 3 hardcode the
+absolute directory locations, and the 4th case works only if the logic to
+determine the ``installedPrefix`` is correct, and if ``CONFIG_INSTALL_DIR``
+contains a relative path, which in general cannot be guaranteed.  This has the
+effect that the resulting ``FooConfig.cmake`` file would work poorly under
+Windows and OSX, where users are used to choose the install location of a
+binary package at install time, independent from how
+:variable:`CMAKE_INSTALL_PREFIX` was set at build/cmake time.
+
+Using ``configure_package_config_file`` helps.  If used correctly, it makes
+the resulting ``FooConfig.cmake`` file relocatable.  Usage:
+
+1. write a ``FooConfig.cmake.in`` file as you are used to
+2. insert a line containing only the string ``@PACKAGE_INIT@``
+3. instead of ``set(FOO_DIR "@SOME_INSTALL_DIR@")``, use
+   ``set(FOO_DIR "@PACKAGE_SOME_INSTALL_DIR@")`` (this must be after the
+   ``@PACKAGE_INIT@`` line)
+4. instead of using the normal :command:`configure_file()`, use
+   ``configure_package_config_file()``
+
+
+
+The ``<input>`` and ``<output>`` arguments are the input and output file, the
+same way as in :command:`configure_file()`.
+
+The ``<path>`` given to ``INSTALL_DESTINATION`` must be the destination where
+the ``FooConfig.cmake`` file will be installed to.  This path can either be
+absolute, or relative to the ``INSTALL_PREFIX`` path.
+
+The variables ``<var1>`` to ``<varN>`` given as ``PATH_VARS`` are the
+variables which contain install destinations.  For each of them the macro will
+create a helper variable ``PACKAGE_<var...>``.  These helper variables must be
+used in the ``FooConfig.cmake.in`` file for setting the installed location.
+They are calculated by ``configure_package_config_file`` so that they are
+always relative to the installed location of the package.  This works both for
+relative and also for absolute locations.  For absolute locations it works
+only if the absolute location is a subdirectory of ``INSTALL_PREFIX``.
+
+.. versionadded:: 3.1
+  If the ``INSTALL_PREFIX`` argument is passed, this is used as base path to
+  calculate all the relative paths.  The ``<path>`` argument must be an absolute
+  path.  If this argument is not passed, the :variable:`CMAKE_INSTALL_PREFIX`
+  variable will be used instead.  The default value is good when generating a
+  FooConfig.cmake file to use your package from the install tree.  When
+  generating a FooConfig.cmake file to use your package from the build tree this
+  option should be used.
+
+By default ``configure_package_config_file`` also generates two helper macros,
+``set_and_check()`` and ``check_required_components()`` into the
+``FooConfig.cmake`` file.
+
+``set_and_check()`` should be used instead of the normal ``set()`` command for
+setting directories and file locations.  Additionally to setting the variable
+it also checks that the referenced file or directory actually exists and fails
+with a ``FATAL_ERROR`` otherwise.  This makes sure that the created
+``FooConfig.cmake`` file does not contain wrong references.
+When using the ``NO_SET_AND_CHECK_MACRO``, this macro is not generated
+into the ``FooConfig.cmake`` file.
+
+``check_required_components(<PackageName>)`` should be called at the end of
+the ``FooConfig.cmake`` file. This macro checks whether all requested,
+non-optional components have been found, and if this is not the case, sets
+the ``Foo_FOUND`` variable to ``FALSE``, so that the package is considered to
+be not found.  It does that by testing the ``Foo_<Component>_FOUND``
+variables for all requested required components.  This macro should be
+called even if the package doesn't provide any components to make sure
+users are not specifying components erroneously.  When using the
+``NO_CHECK_REQUIRED_COMPONENTS_MACRO`` option, this macro is not generated
+into the ``FooConfig.cmake`` file.
+
+For an example see below the documentation for
+:command:`write_basic_package_version_file()`.
+
+Generating a Package Version File
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. command:: write_basic_package_version_file
+
+ Create a version file for a project::
+
+   write_basic_package_version_file(<filename>
+     [VERSION <major.minor.patch>]
+     COMPATIBILITY <AnyNewerVersion|SameMajorVersion|SameMinorVersion|ExactVersion>
+     [ARCH_INDEPENDENT] )
+
+
+Writes a file for use as ``<PackageName>ConfigVersion.cmake`` file to
+``<filename>``.  See the documentation of :command:`find_package()` for
+details on this.
+
+``<filename>`` is the output filename, it should be in the build tree.
+``<major.minor.patch>`` is the version number of the project to be installed.
+
+If no ``VERSION`` is given, the :variable:`PROJECT_VERSION` variable is used.
+If this hasn't been set, it errors out.
+
+The ``COMPATIBILITY`` mode ``AnyNewerVersion`` means that the installed
+package version will be considered compatible if it is newer or exactly the
+same as the requested version.  This mode should be used for packages which
+are fully backward compatible, also across major versions.
+If ``SameMajorVersion`` is used instead, then the behavior differs from
+``AnyNewerVersion`` in that the major version number must be the same as
+requested, e.g.  version 2.0 will not be considered compatible if 1.0 is
+requested.  This mode should be used for packages which guarantee backward
+compatibility within the same major version.
+If ``SameMinorVersion`` is used, the behavior is the same as
+``SameMajorVersion``, but both major and minor version must be the same as
+requested, e.g version 0.2 will not be compatible if 0.1 is requested.
+If ``ExactVersion`` is used, then the package is only considered compatible if
+the requested version matches exactly its own version number (not considering
+the tweak version).  For example, version 1.2.3 of a package is only
+considered compatible to requested version 1.2.3.  This mode is for packages
+without compatibility guarantees.
+If your project has more elaborated version matching rules, you will need to
+write your own custom ``ConfigVersion.cmake`` file instead of using this
+macro.
+
+.. versionadded:: 3.11
+  The ``SameMinorVersion`` compatibility mode.
+
+.. versionadded:: 3.14
+  If ``ARCH_INDEPENDENT`` is given, the installed package version will be
+  considered compatible even if it was built for a different architecture than
+  the requested architecture.  Otherwise, an architecture check will be performed,
+  and the package will be considered compatible only if the architecture matches
+  exactly.  For example, if the package is built for a 32-bit architecture, the
+  package is only considered compatible if it is used on a 32-bit architecture,
+  unless ``ARCH_INDEPENDENT`` is given, in which case the package is considered
+  compatible on any architecture.
+
+.. note:: ``ARCH_INDEPENDENT`` is intended for header-only libraries or similar
+  packages with no binaries.
+
+.. versionadded:: 3.19
+  ``COMPATIBILITY_MODE`` ``AnyNewerVersion``, ``SameMajorVersion`` and
+  ``SameMinorVersion`` handle the version range if any is specified
+  (see :command:`find_package` command for the details).
+  ``ExactVersion`` mode is incompatible with version ranges and will display an
+  author warning if one is specified.
+
+Internally, this macro executes :command:`configure_file()` to create the
+resulting version file.  Depending on the ``COMPATIBILITY``, the corresponding
+``BasicConfigVersion-<COMPATIBILITY>.cmake.in`` file is used.
+Please note that these files are internal to CMake and you should not call
+:command:`configure_file()` on them yourself, but they can be used as starting
+point to create more sophisticted custom ``ConfigVersion.cmake`` files.
+
+Example Generating Package Files
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Example using both :command:`configure_package_config_file` and
+``write_basic_package_version_file()``:
+
+``CMakeLists.txt``:
+
+.. code-block:: cmake
+
+   set(INCLUDE_INSTALL_DIR include/ ... CACHE )
+   set(LIB_INSTALL_DIR lib/ ... CACHE )
+   set(SYSCONFIG_INSTALL_DIR etc/foo/ ... CACHE )
+   #...
+   include(CMakePackageConfigHelpers)
+   configure_package_config_file(FooConfig.cmake.in
+     ${CMAKE_CURRENT_BINARY_DIR}/FooConfig.cmake
+     INSTALL_DESTINATION ${LIB_INSTALL_DIR}/Foo/cmake
+     PATH_VARS INCLUDE_INSTALL_DIR SYSCONFIG_INSTALL_DIR)
+   write_basic_package_version_file(
+     ${CMAKE_CURRENT_BINARY_DIR}/FooConfigVersion.cmake
+     VERSION 1.2.3
+     COMPATIBILITY SameMajorVersion )
+   install(FILES ${CMAKE_CURRENT_BINARY_DIR}/FooConfig.cmake
+                 ${CMAKE_CURRENT_BINARY_DIR}/FooConfigVersion.cmake
+           DESTINATION ${LIB_INSTALL_DIR}/Foo/cmake )
+
+``FooConfig.cmake.in``:
+
+::
+
+   set(FOO_VERSION x.y.z)
+   ...
+   @PACKAGE_INIT@
+   ...
+   set_and_check(FOO_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@")
+   set_and_check(FOO_SYSCONFIG_DIR "@PACKAGE_SYSCONFIG_INSTALL_DIR@")
+
+   check_required_components(Foo)
+#]=======================================================================]
+
+include(WriteBasicConfigVersionFile)
+
+macro(WRITE_BASIC_PACKAGE_VERSION_FILE)
+  write_basic_config_version_file(${ARGN})
+endmacro()
+
+function(CONFIGURE_PACKAGE_CONFIG_FILE _inputFile _outputFile)
+  set(options NO_SET_AND_CHECK_MACRO NO_CHECK_REQUIRED_COMPONENTS_MACRO)
+  set(oneValueArgs INSTALL_DESTINATION INSTALL_PREFIX)
+  set(multiValueArgs PATH_VARS )
+
+  cmake_parse_arguments(CCF "${options}" "${oneValueArgs}" "${multiValueArgs}"  ${ARGN})
+
+  if(CCF_UNPARSED_ARGUMENTS)
+    message(FATAL_ERROR "Unknown keywords given to CONFIGURE_PACKAGE_CONFIG_FILE(): \"${CCF_UNPARSED_ARGUMENTS}\"")
+  endif()
+
+  if(NOT CCF_INSTALL_DESTINATION)
+    message(FATAL_ERROR "No INSTALL_DESTINATION given to CONFIGURE_PACKAGE_CONFIG_FILE()")
+  endif()
+
+  if(DEFINED CCF_INSTALL_PREFIX)
+    if(IS_ABSOLUTE "${CCF_INSTALL_PREFIX}")
+      set(installPrefix "${CCF_INSTALL_PREFIX}")
+    else()
+      message(FATAL_ERROR "INSTALL_PREFIX must be an absolute path")
+    endif()
+  elseif(IS_ABSOLUTE "${CMAKE_INSTALL_PREFIX}")
+    set(installPrefix "${CMAKE_INSTALL_PREFIX}")
+  else()
+    get_filename_component(installPrefix "${CMAKE_INSTALL_PREFIX}" ABSOLUTE)
+  endif()
+
+  if(IS_ABSOLUTE "${CCF_INSTALL_DESTINATION}")
+    set(absInstallDir "${CCF_INSTALL_DESTINATION}")
+  else()
+    set(absInstallDir "${installPrefix}/${CCF_INSTALL_DESTINATION}")
+  endif()
+
+  file(RELATIVE_PATH PACKAGE_RELATIVE_PATH "${absInstallDir}" "${installPrefix}" )
+
+  foreach(var ${CCF_PATH_VARS})
+    if(NOT DEFINED ${var})
+      message(FATAL_ERROR "Variable ${var} does not exist")
+    else()
+      if(IS_ABSOLUTE "${${var}}")
+        string(REPLACE "${installPrefix}" "\${PACKAGE_PREFIX_DIR}"
+                        PACKAGE_${var} "${${var}}")
+      else()
+        set(PACKAGE_${var} "\${PACKAGE_PREFIX_DIR}/${${var}}")
+      endif()
+    endif()
+  endforeach()
+
+  get_filename_component(inputFileName "${_inputFile}" NAME)
+
+  set(PACKAGE_INIT "
+####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() #######
+####### Any changes to this file will be overwritten by the next CMake run ####
+####### The input file was ${inputFileName}                            ########
+
+get_filename_component(PACKAGE_PREFIX_DIR \"\${CMAKE_CURRENT_LIST_DIR}/${PACKAGE_RELATIVE_PATH}\" ABSOLUTE)
+")
+
+  if("${absInstallDir}" MATCHES "^(/usr)?/lib(64)?/.+")
+    # Handle "/usr move" symlinks created by some Linux distros.
+    string(APPEND PACKAGE_INIT "
+# Use original install prefix when loaded through a \"/usr move\"
+# cross-prefix symbolic link such as /lib -> /usr/lib.
+get_filename_component(_realCurr \"\${CMAKE_CURRENT_LIST_DIR}\" REALPATH)
+get_filename_component(_realOrig \"${absInstallDir}\" REALPATH)
+if(_realCurr STREQUAL _realOrig)
+  set(PACKAGE_PREFIX_DIR \"${installPrefix}\")
+endif()
+unset(_realOrig)
+unset(_realCurr)
+")
+  endif()
+
+  if(NOT CCF_NO_SET_AND_CHECK_MACRO)
+    string(APPEND PACKAGE_INIT "
+macro(set_and_check _var _file)
+  set(\${_var} \"\${_file}\")
+  if(NOT EXISTS \"\${_file}\")
+    message(FATAL_ERROR \"File or directory \${_file} referenced by variable \${_var} does not exist !\")
+  endif()
+endmacro()
+")
+  endif()
+
+
+  if(NOT CCF_NO_CHECK_REQUIRED_COMPONENTS_MACRO)
+    string(APPEND PACKAGE_INIT "
+macro(check_required_components _NAME)
+  foreach(comp \${\${_NAME}_FIND_COMPONENTS})
+    if(NOT \${_NAME}_\${comp}_FOUND)
+      if(\${_NAME}_FIND_REQUIRED_\${comp})
+        set(\${_NAME}_FOUND FALSE)
+      endif()
+    endif()
+  endforeach()
+endmacro()
+")
+  endif()
+
+  string(APPEND PACKAGE_INIT "
+####################################################################################")
+
+  configure_file("${_inputFile}" "${_outputFile}" @ONLY)
+
+endfunction()
diff --git a/share/cmake-3.18/Modules/CMakeParseArguments.cmake b/share/cmake-3.22/Modules/CMakeParseArguments.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeParseArguments.cmake
rename to share/cmake-3.22/Modules/CMakeParseArguments.cmake
diff --git a/share/cmake-3.22/Modules/CMakeParseImplicitIncludeInfo.cmake b/share/cmake-3.22/Modules/CMakeParseImplicitIncludeInfo.cmake
new file mode 100644
index 0000000..5c0eda2
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeParseImplicitIncludeInfo.cmake
@@ -0,0 +1,262 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+# This is used internally by CMake and should not be included by user code.
+
+# helper function that parses implicit include dirs from a single line
+# for compilers that report them that way.  on success we return the
+# list of dirs in id_var and set state_var to the 'done' state.
+function(cmake_parse_implicit_include_line line lang id_var log_var state_var)
+  # clear variables we append to (avoids possible pollution from parent scopes)
+  unset(rv)
+  set(log "")
+
+  # Cray compiler (from cray wrapper, via PrgEnv-cray)
+  if(CMAKE_${lang}_COMPILER_ID STREQUAL "Cray" AND
+     line MATCHES "^/" AND line MATCHES "/ccfe |/ftnfe " AND
+     line MATCHES " -isystem| -I")
+    string(REGEX MATCHALL " (-I ?|-isystem )(\"[^\"]+\"|[^ \"]+)" incs "${line}")
+    foreach(inc IN LISTS incs)
+      string(REGEX REPLACE " (-I ?|-isystem )(\"[^\"]+\"|[^ \"]+)" "\\2" idir "${inc}")
+      list(APPEND rv "${idir}")
+    endforeach()
+    if(rv)
+      string(APPEND log "  got implicit includes via cray ccfe parser!\n")
+    else()
+      string(APPEND log "  warning: cray ccfe parse failed!\n")
+    endif()
+  endif()
+
+  # PGI compiler
+  if(CMAKE_${lang}_COMPILER_ID STREQUAL "PGI")
+    # pgc++ verbose output differs
+    if((lang STREQUAL "C" OR lang STREQUAL "Fortran") AND
+        line MATCHES "^/" AND
+        line MATCHES "/pgc |/pgf901 |/pgftnc " AND
+        line MATCHES " -cmdline ")
+      # cmdline has unparsed cmdline, remove it
+      string(REGEX REPLACE "-cmdline .*" "" line "${line}")
+      if("${line}" MATCHES " -nostdinc ")
+        set(rv "")    # defined, but empty
+      else()
+        string(REGEX MATCHALL " -stdinc ([^ ]*)" incs "${line}")
+        foreach(inc IN LISTS incs)
+          string(REGEX REPLACE " -stdinc ([^ ]*)" "\\1" idir "${inc}")
+          string(REPLACE ":" ";" idir "${idir}")
+          list(APPEND rv ${idir})
+        endforeach()
+      endif()
+      if(DEFINED rv)
+        string(APPEND log "  got implicit includes via PGI C/F parser!\n")
+      else()
+        string(APPEND log "  warning: PGI C/F parse failed!\n")
+      endif()
+    elseif(lang STREQUAL "CXX" AND line MATCHES "^/" AND
+           line MATCHES "/pggpp1 " AND line MATCHES " -I")
+      # oddly, -Mnostdinc does not get rid of system -I's, at least in
+      # PGI 18.10.1 ...
+      string(REGEX MATCHALL " (-I ?)([^ ]*)" incs "${line}")
+      foreach(inc IN LISTS incs)
+        string(REGEX REPLACE " (-I ?)([^ ]*)" "\\2" idir "${inc}")
+        if(NOT idir STREQUAL "-")   # filter out "-I-"
+          list(APPEND rv "${idir}")
+        endif()
+      endforeach()
+      if(DEFINED rv)
+        string(APPEND log "  got implicit includes via PGI CXX parser!\n")
+      else()
+        string(APPEND log "  warning: PGI CXX parse failed!\n")
+      endif()
+    endif()
+  endif()
+
+  # SunPro compiler
+  if(CMAKE_${lang}_COMPILER_ID STREQUAL "SunPro" AND
+     (line MATCHES "-D__SUNPRO_C" OR line MATCHES "-D__SUNPRO_F"))
+    string(REGEX MATCHALL " (-I ?)([^ ]*)" incs "${line}")
+    foreach(inc IN LISTS incs)
+      string(REGEX REPLACE " (-I ?)([^ ]*)" "\\2" idir "${inc}")
+      if(NOT "${idir}" STREQUAL "-xbuiltin")
+        list(APPEND rv "${idir}")
+      endif()
+    endforeach()
+    if(rv)
+      if (lang STREQUAL "C" OR lang STREQUAL "CXX")
+        # /usr/include appears to be hardwired in
+        list(APPEND rv "/usr/include")
+      endif()
+      string(APPEND log "  got implicit includes via sunpro parser!\n")
+    else()
+      string(APPEND log "  warning: sunpro parse failed!\n")
+    endif()
+  endif()
+
+  # XL compiler
+  if((CMAKE_${lang}_COMPILER_ID STREQUAL "XL"
+      OR CMAKE_${lang}_COMPILER_ID STREQUAL "XLClang")
+     AND line MATCHES "^/"
+     AND ( (lang STREQUAL "Fortran" AND
+            line MATCHES "/xl[fF]entry " AND
+            line MATCHES "OSVAR\\([^ ]+\\)")
+           OR
+            ( (lang STREQUAL "C" OR lang STREQUAL "CXX") AND
+            line MATCHES "/xl[cC]2?entry " AND
+            line MATCHES " -qosvar=")
+         )  )
+    # -qnostdinc cancels other stdinc flags, even if present
+    string(FIND "${line}" " -qnostdinc" nostd)
+    if(NOT nostd EQUAL -1)
+      set(rv "")    # defined but empty
+      string(APPEND log "  got implicit includes via XL parser (nostdinc)\n")
+    else()
+      if(lang STREQUAL "CXX")
+        string(REGEX MATCHALL " -qcpp_stdinc=([^ ]*)" std "${line}")
+        string(REGEX MATCHALL " -qgcc_cpp_stdinc=([^ ]*)" gcc_std "${line}")
+      else()
+        string(REGEX MATCHALL " -qc_stdinc=([^ ]*)" std "${line}")
+        string(REGEX MATCHALL " -qgcc_c_stdinc=([^ ]*)" gcc_std "${line}")
+      endif()
+      set(xlstd ${std} ${gcc_std})
+      foreach(inc IN LISTS xlstd)
+        string(REGEX REPLACE " -q(cpp|gcc_cpp|c|gcc_c)_stdinc=([^ ]*)" "\\2"
+               ipath "${inc}")
+        string(REPLACE ":" ";" ipath "${ipath}")
+        list(APPEND rv ${ipath})
+      endforeach()
+    endif()
+    # user can add -I flags via CMAKE_{C,CXX}_FLAGS, look for that too
+    string(REGEX MATCHALL " (-I ?)([^ ]*)" incs "${line}")
+    unset(urv)
+    foreach(inc IN LISTS incs)
+      string(REGEX REPLACE " (-I ?)([^ ]*)" "\\2" idir "${inc}")
+      list(APPEND urv "${idir}")
+    endforeach()
+    if(urv)
+      if ("${rv}" STREQUAL "")
+        set(rv ${urv})
+      else()
+        list(APPEND rv ${urv})
+      endif()
+    endif()
+
+    if(DEFINED rv)
+      string(APPEND log "  got implicit includes via XL parser!\n")
+    else()
+      string(APPEND log "  warning: XL parse failed!\n")
+    endif()
+  endif()
+
+  # Fujitsu compiler
+  if(CMAKE_${lang}_COMPILER_ID STREQUAL "Fujitsu" AND
+     line MATCHES "/ccpcom")
+    string(REGEX MATCHALL " (-I *|--sys_include=|--preinclude +)(\"[^\"]+\"|[^ \"]+)" incs "${line}")
+    foreach(inc IN LISTS incs)
+      string(REGEX REPLACE " (-I *|--sys_include=|--preinclude +)(\"[^\"]+\"|[^ \"]+)" "\\2" idir "${inc}")
+      list(APPEND rv "${idir}")
+    endforeach()
+    if(rv)
+      string(APPEND log "  got implicit includes via fujitsu ccpcom parser!\n")
+    else()
+      string(APPEND log "  warning: fujitsu ccpcom parse failed!\n")
+    endif()
+  endif()
+
+  if(log)
+    set(${log_var} "${log}" PARENT_SCOPE)
+  else()
+    unset(${log_var} PARENT_SCOPE)
+  endif()
+  if(DEFINED rv)
+    set(${id_var} "${rv}" PARENT_SCOPE)
+    set(${state_var} "done" PARENT_SCOPE)
+  endif()
+endfunction()
+
+# top-level function to parse implicit include directory information
+# from verbose compiler output. sets state_var in parent to 'done' on success.
+function(cmake_parse_implicit_include_info text lang dir_var log_var state_var)
+  set(state start)    # values: start, loading, done
+
+  # clear variables we append to (avoids possible pollution from parent scopes)
+  set(implicit_dirs_tmp)
+  set(log "")
+
+  # go through each line of output...
+  string(REGEX REPLACE "\r*\n" ";" output_lines "${text}")
+  foreach(line IN LISTS output_lines)
+    if(state STREQUAL start)
+      string(FIND "${line}" "#include \"...\" search starts here:" rv)
+      if(rv GREATER -1)
+        set(state loading)
+        set(preload 1)      # looking for include <...> now
+        string(APPEND log "  found start of include info\n")
+      else()
+        cmake_parse_implicit_include_line("${line}" "${lang}" implicit_dirs_tmp
+                                          linelog state)
+        if(linelog)
+          string(APPEND log ${linelog})
+        endif()
+        if(state STREQUAL done)
+          break()
+        endif()
+      endif()
+    elseif(state STREQUAL loading)
+      string(FIND "${line}" "End of search list." rv)
+      if(rv GREATER -1)
+        set(state done)
+        string(APPEND log "  end of search list found\n")
+        break()
+      endif()
+      if(preload)
+        string(FIND "${line}" "#include <...> search starts here:" rv)
+        if(rv GREATER -1)
+          set(preload 0)
+          string(APPEND log "  found start of implicit include info\n")
+        endif()
+        continue()
+      endif()
+      if("${line}" MATCHES "^ ")
+        string(SUBSTRING "${line}" 1 -1 line)  # remove leading space
+      endif()
+      if ("${line}" MATCHES " \\(framework directory\\)$")
+        continue() # frameworks are handled elsewhere, ignore them here
+      endif()
+      string(REPLACE "\\" "/" path "${line}")
+      list(APPEND implicit_dirs_tmp "${path}")
+      string(APPEND log "    add: [${path}]\n")
+    endif()
+  endforeach()
+
+  set(implicit_dirs "")
+  foreach(d IN LISTS implicit_dirs_tmp)
+    if(IS_ABSOLUTE "${d}")
+      get_filename_component(dir "${d}" ABSOLUTE)
+      list(APPEND implicit_dirs "${dir}")
+      string(APPEND log "  collapse include dir [${d}] ==> [${dir}]\n")
+    elseif("${d}" MATCHES [[^\.\.[\/]\.\.[\/](.*)$]])
+      # This relative path is deep enough to get out of the CMakeFiles/CMakeTmp
+      # directory where the ABI check is done.  Assume that the compiler has
+      # computed this path adaptively based on the current working directory
+      # such that the effective result is absolute.
+      get_filename_component(dir "${CMAKE_BINARY_DIR}/${CMAKE_MATCH_1}" ABSOLUTE)
+      list(APPEND implicit_dirs "${dir}")
+      string(APPEND log "  collapse relative include dir [${d}] ==> [${dir}]\n")
+    else()
+      string(APPEND log "  skipping relative include dir [${d}]\n")
+    endif()
+  endforeach()
+  list(REMOVE_DUPLICATES implicit_dirs)
+
+  # Log results.
+  if(state STREQUAL done)
+    string(APPEND log "  implicit include dirs: [${implicit_dirs}]\n")
+  else()
+    string(APPEND log "  warn: unable to parse implicit include dirs!\n")
+  endif()
+
+  # Return results.
+  set(${dir_var} "${implicit_dirs}" PARENT_SCOPE)
+  set(${log_var} "${log}" PARENT_SCOPE)
+  set(${state_var} "${state}" PARENT_SCOPE)
+
+endfunction()
diff --git a/share/cmake-3.22/Modules/CMakeParseImplicitLinkInfo.cmake b/share/cmake-3.22/Modules/CMakeParseImplicitLinkInfo.cmake
new file mode 100644
index 0000000..a61f71b
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeParseImplicitLinkInfo.cmake
@@ -0,0 +1,271 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0053 NEW)
+cmake_policy(SET CMP0054 NEW)
+
+# Function to parse implicit linker options.
+#
+# This is used internally by CMake and should not be included by user
+# code.
+#
+# Note: this function is leaked/exposed by FindOpenMP and therefore needs
+# to have a stable API so projects that copied `FindOpenMP` for backwards
+# compatibility don't break.
+#
+function(CMAKE_PARSE_IMPLICIT_LINK_INFO text lib_var dir_var fwk_var log_var obj_regex)
+  set(implicit_libs_tmp "")
+  set(implicit_objs_tmp "")
+  set(implicit_dirs_tmp)
+  set(implicit_fwks_tmp)
+  set(log "")
+
+  set(keywordArgs)
+  set(oneValueArgs COMPUTE_IMPLICIT_OBJECTS)
+  set(multiValueArgs )
+  cmake_parse_arguments(EXTRA_PARSE "${keywordArgs}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+  # Parse implicit linker arguments.
+  set(linker "CMAKE_LINKER-NOTFOUND")
+  if(CMAKE_LINKER)
+    get_filename_component(linker ${CMAKE_LINKER} NAME)
+    string(REGEX REPLACE "([][+.*?()^$])" "\\\\\\1" linker "${linker}")
+  endif()
+  set(startfile "CMAKE_LINK_STARTFILE-NOTFOUND")
+  if(CMAKE_LINK_STARTFILE)
+    set(startfile "${CMAKE_LINK_STARTFILE}")
+  endif()
+  # Construct a regex to match linker lines.  It must match both the
+  # whole line and just the command (argv[0]).
+  set(linker_regex "^( *|.*[/\\])(${linker}|${startfile}|([^/\\]+-)?ld|collect2)[^/\\]*( |$)")
+  set(linker_exclude_regex "collect2 version |^[A-Za-z0-9_]+=|/ldfe ")
+  string(APPEND log "  link line regex: [${linker_regex}]\n")
+  string(REGEX REPLACE "\r?\n" ";" output_lines "${text}")
+  foreach(line IN LISTS output_lines)
+    set(cmd)
+    if("${line}" MATCHES "${linker_regex}" AND
+        NOT "${line}" MATCHES "${linker_exclude_regex}")
+      if(XCODE)
+        # Xcode unconditionally adds a path under the project build tree and
+        # on older versions it is not reported with proper quotes.  Remove it.
+        string(REGEX REPLACE "([][+.*()^])" "\\\\\\1" _dir_regex "${CMAKE_BINARY_DIR}")
+        string(REGEX REPLACE " -[FL]${_dir_regex}/([^ ]| [^-])+( |$)" " " xline "${line}")
+        if(NOT "x${xline}" STREQUAL "x${line}")
+          string(APPEND log "  reduced line: [${line}]\n            to: [${xline}]\n")
+          set(line "${xline}")
+        endif()
+      endif()
+      separate_arguments(args NATIVE_COMMAND "${line}")
+      list(GET args 0 cmd)
+    else()
+      #check to see if the link line is comma-separated instead of space separated
+      string(REGEX REPLACE "," " " line "${line}")
+      if("${line}" MATCHES "${linker_regex}" AND
+        NOT "${line}" MATCHES "${linker_exclude_regex}")
+        separate_arguments(args NATIVE_COMMAND "${line}")
+        list(GET args 0 cmd)
+        if("${cmd}" MATCHES "exec:")
+          # ibm xl sometimes has 'exec: ' in-front of the linker
+          list(GET args 1 cmd)
+        endif()
+      endif()
+    endif()
+    set(is_msvc 0)
+    set(search_static 0)
+    if("${cmd}" MATCHES "${linker_regex}")
+      string(APPEND log "  link line: [${line}]\n")
+      string(REGEX REPLACE ";-([LYz]);" ";-\\1" args "${args}")
+      set(skip_value_of "")
+      foreach(arg IN LISTS args)
+        if(skip_value_of)
+          string(APPEND log "    arg [${arg}] ==> skip value of ${skip_value_of}\n")
+          set(skip_value_of "")
+        elseif("${arg}" MATCHES "^-L(.:)?[/\\]")
+          # Unix search path.
+          string(REGEX REPLACE "^-L" "" dir "${arg}")
+          list(APPEND implicit_dirs_tmp ${dir})
+          string(APPEND log "    arg [${arg}] ==> dir [${dir}]\n")
+        elseif("${arg}" MATCHES "^[-/](LIBPATH|libpath):(.+)")
+          # MSVC search path.
+          set(dir "${CMAKE_MATCH_2}")
+          list(APPEND implicit_dirs_tmp ${dir})
+          string(APPEND log "    arg [${arg}] ==> dir [${dir}]\n")
+        elseif(is_msvc AND "${arg}" STREQUAL "-link")
+          string(APPEND log "    arg [${arg}] ==> ignore MSVC cl option\n")
+        elseif(is_msvc AND "${arg}" MATCHES "^(.*\\.[Ll][Ii][Bb])$")
+          set(lib "${CMAKE_MATCH_1}")
+          list(APPEND implicit_libs_tmp ${lib})
+          string(APPEND log "    arg [${arg}] ==> lib [${lib}]\n")
+        elseif("${arg}" STREQUAL "-lto_library")
+          # ld argument "-lto_library <path>"
+          set(skip_value_of "${arg}")
+          string(APPEND log "    arg [${arg}] ==> ignore, skip following value\n")
+        elseif("${arg}" MATCHES "^-l([^:].*)$")
+          # Unix library.
+          set(lib "${CMAKE_MATCH_1}")
+          if(search_static AND lib MATCHES "^(gfortran|stdc\\+\\+)$")
+            # Search for the static library later, once all link dirs are known.
+            set(lib "SEARCH_STATIC:${lib}")
+          endif()
+          list(APPEND implicit_libs_tmp ${lib})
+          string(APPEND log "    arg [${arg}] ==> lib [${lib}]\n")
+        elseif("${arg}" MATCHES "^(.:)?[/\\].*\\.a$")
+          # Unix library full path.
+          list(APPEND implicit_libs_tmp ${arg})
+          string(APPEND log "    arg [${arg}] ==> lib [${arg}]\n")
+        elseif("${arg}" MATCHES "^[-/](DEFAULTLIB|defaultlib):(.+)")
+          # Windows library.
+          set(lib "${CMAKE_MATCH_2}")
+          list(APPEND implicit_libs_tmp ${lib})
+          string(APPEND log "    arg [${arg}] ==> lib [${lib}]\n")
+        elseif("${arg}" MATCHES "^(.:)?[/\\].*\\.o$")
+          if(EXTRA_PARSE_COMPUTE_IMPLICIT_OBJECTS)
+            list(APPEND implicit_objs_tmp ${arg})
+            string(APPEND log "    arg [${arg}] ==> obj [${arg}]\n")
+          endif()
+          if(obj_regex AND "${arg}" MATCHES "${obj_regex}")
+            # Object file full path.
+            list(APPEND implicit_libs_tmp ${arg})
+          endif()
+        elseif("${arg}" MATCHES "^-Y(P,)?[^0-9]")
+          # Sun search path ([^0-9] avoids conflict with Mac -Y<num>).
+          string(REGEX REPLACE "^-Y(P,)?" "" dirs "${arg}")
+          string(REPLACE ":" ";" dirs "${dirs}")
+          list(APPEND implicit_dirs_tmp ${dirs})
+          string(APPEND log "    arg [${arg}] ==> dirs [${dirs}]\n")
+        elseif("${arg}" STREQUAL "-Bstatic")
+          set(search_static 1)
+          string(APPEND log "    arg [${arg}] ==> search static\n" )
+        elseif("${arg}" STREQUAL "-Bdynamic")
+          set(search_static 0)
+          string(APPEND log "    arg [${arg}] ==> search dynamic\n" )
+        elseif("${arg}" MATCHES "^-l:")
+          # HP named library.
+          list(APPEND implicit_libs_tmp ${arg})
+          string(APPEND log "    arg [${arg}] ==> lib [${arg}]\n")
+        elseif("${arg}" MATCHES "^-z(all|default|weak)extract")
+          # Link editor option.
+          list(APPEND implicit_libs_tmp ${arg})
+          string(APPEND log "    arg [${arg}] ==> opt [${arg}]\n")
+        elseif("${arg}" STREQUAL "cl.exe")
+          string(APPEND log "    arg [${arg}] ==> recognize MSVC cl\n")
+          set(is_msvc 1)
+        else()
+          string(APPEND log "    arg [${arg}] ==> ignore\n")
+        endif()
+      endforeach()
+      break()
+    elseif("${line}" MATCHES "LPATH(=| is:? *)(.*)$")
+      string(APPEND log "  LPATH line: [${line}]\n")
+      # HP search path.
+      string(REPLACE ":" ";" paths "${CMAKE_MATCH_2}")
+      list(APPEND implicit_dirs_tmp ${paths})
+      string(APPEND log "    dirs [${paths}]\n")
+    else()
+      string(APPEND log "  ignore line: [${line}]\n")
+    endif()
+  endforeach()
+
+  # Look for library search paths reported by linker.
+  if("${output_lines}" MATCHES ";Library search paths:((;\t[^;]+)+)")
+    string(REPLACE ";\t" ";" implicit_dirs_match "${CMAKE_MATCH_1}")
+    string(APPEND log "  Library search paths: [${implicit_dirs_match}]\n")
+    list(APPEND implicit_dirs_tmp ${implicit_dirs_match})
+  endif()
+  if("${output_lines}" MATCHES ";Framework search paths:((;\t[^;]+)+)")
+    string(REPLACE ";\t" ";" implicit_fwks_match "${CMAKE_MATCH_1}")
+    string(APPEND log "  Framework search paths: [${implicit_fwks_match}]\n")
+    list(APPEND implicit_fwks_tmp ${implicit_fwks_match})
+  endif()
+
+  # Cleanup list of libraries and flags.
+  # We remove items that are not language-specific.
+  set(implicit_libs "")
+  foreach(lib IN LISTS implicit_libs_tmp)
+    if("x${lib}" MATCHES "^xSEARCH_STATIC:(.*)")
+      set(search_static 1)
+      set(lib "${CMAKE_MATCH_1}")
+    else()
+      set(search_static 0)
+    endif()
+    if("x${lib}" MATCHES "^x(crt.*\\.o|gcc_eh.*|.*libgcc_eh.*|System.*|.*libclang_rt.*|msvcrt.*|libvcruntime.*|libucrt.*|libcmt.*)$")
+      string(APPEND log "  remove lib [${lib}]\n")
+    elseif(search_static)
+      # This library appears after a -Bstatic flag.  Due to ordering
+      # and filtering for mixed-language link lines, we do not preserve
+      # the -Bstatic flag itself.  Instead, use an absolute path.
+      # Search using a temporary variable with a distinct name
+      # so that our test suite does not depend on disk content.
+      find_library("CMAKE_${lang}_IMPLICIT_LINK_LIBRARY_${lib}" NO_CACHE NAMES "lib${lib}.a" NO_DEFAULT_PATH PATHS ${implicit_dirs_tmp})
+      set(_lib_static "${CMAKE_${lang}_IMPLICIT_LINK_LIBRARY_${lib}}")
+      if(_lib_static)
+        string(APPEND log "  search lib [SEARCH_STATIC:${lib}] ==> [${_lib_static}]\n")
+        list(APPEND implicit_libs "${_lib_static}")
+      else()
+        string(APPEND log "  search lib [SEARCH_STATIC:${lib}] ==> [${lib}]\n")
+        list(APPEND implicit_libs "${lib}")
+      endif()
+    elseif(IS_ABSOLUTE "${lib}")
+      get_filename_component(abs "${lib}" ABSOLUTE)
+      if(NOT "x${lib}" STREQUAL "x${abs}")
+        string(APPEND log "  collapse lib [${lib}] ==> [${abs}]\n")
+      endif()
+      list(APPEND implicit_libs "${abs}")
+    else()
+      list(APPEND implicit_libs "${lib}")
+    endif()
+  endforeach()
+
+  if(EXTRA_PARSE_COMPUTE_IMPLICIT_OBJECTS)
+    set(implicit_objs "")
+    foreach(obj IN LISTS implicit_objs_tmp)
+      if(IS_ABSOLUTE "${obj}")
+        get_filename_component(abs "${obj}" ABSOLUTE)
+        if(NOT "x${obj}" STREQUAL "x${abs}")
+          string(APPEND log "  collapse obj [${obj}] ==> [${abs}]\n")
+        endif()
+        list(APPEND implicit_objs "${abs}")
+      else()
+        list(APPEND implicit_objs "${obj}")
+      endif()
+    endforeach()
+  endif()
+
+  # Cleanup list of library and framework directories.
+  set(desc_dirs "library")
+  set(desc_fwks "framework")
+  foreach(t dirs fwks)
+    set(implicit_${t} "")
+    foreach(d IN LISTS implicit_${t}_tmp)
+      get_filename_component(dir "${d}" ABSOLUTE)
+      string(FIND "${dir}" "${CMAKE_FILES_DIRECTORY}/" pos)
+      if(NOT pos LESS 0)
+        set(msg ", skipping non-system directory")
+      else()
+        set(msg "")
+        list(APPEND implicit_${t} "${dir}")
+      endif()
+      string(APPEND log "  collapse ${desc_${t}} dir [${d}] ==> [${dir}]${msg}\n")
+    endforeach()
+    list(REMOVE_DUPLICATES implicit_${t})
+  endforeach()
+
+  # Log results.
+  string(APPEND log "  implicit libs: [${implicit_libs}]\n")
+  string(APPEND log "  implicit objs: [${implicit_objs}]\n")
+  string(APPEND log "  implicit dirs: [${implicit_dirs}]\n")
+  string(APPEND log "  implicit fwks: [${implicit_fwks}]\n")
+
+  # Return results.
+  set(${lib_var} "${implicit_libs}" PARENT_SCOPE)
+  set(${dir_var} "${implicit_dirs}" PARENT_SCOPE)
+  set(${fwk_var} "${implicit_fwks}" PARENT_SCOPE)
+  set(${log_var} "${log}" PARENT_SCOPE)
+
+  if(EXTRA_PARSE_COMPUTE_IMPLICIT_OBJECTS)
+    set(${EXTRA_PARSE_COMPUTE_IMPLICIT_OBJECTS} "${implicit_objs}" PARENT_SCOPE)
+  endif()
+endfunction()
+
+cmake_policy(POP)
diff --git a/share/cmake-3.22/Modules/CMakeParseLibraryArchitecture.cmake b/share/cmake-3.22/Modules/CMakeParseLibraryArchitecture.cmake
new file mode 100644
index 0000000..f7a4b29
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeParseLibraryArchitecture.cmake
@@ -0,0 +1,54 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0053 NEW)
+cmake_policy(SET CMP0054 NEW)
+
+# Function parse implicit linker options.
+# This is used internally by CMake and should not be included by user
+# code.
+
+function(cmake_parse_library_architecture lang implicit_dirs implicit_objs output_var)
+  unset(library_arch)
+  # Detect library architecture directory name.
+  if(CMAKE_LIBRARY_ARCHITECTURE_REGEX)
+    foreach(dir IN LISTS implicit_dirs)
+      if("${dir}" MATCHES "/lib/${CMAKE_LIBRARY_ARCHITECTURE_REGEX}$")
+        get_filename_component(arch "${dir}" NAME)
+        set(library_arch "${arch}")
+        break()
+      endif()
+    endforeach()
+
+    foreach(obj IN LISTS implicit_objs)
+      get_filename_component(dir "${obj}" DIRECTORY)
+      if("${dir}" MATCHES "(/usr)?/lib/${CMAKE_LIBRARY_ARCHITECTURE_REGEX}$")
+        get_filename_component(arch "${dir}" NAME)
+        set(library_arch "${arch}")
+        break()
+      endif()
+    endforeach()
+  endif()
+
+  if(CMAKE_CXX_COMPILER_ID STREQUAL QCC)
+    foreach(dir ${implicit_dirs})
+      if (dir MATCHES "/lib$")
+        get_filename_component(assumedArchDir "${dir}" DIRECTORY)
+        get_filename_component(archParentDir "${assumedArchDir}" DIRECTORY)
+        if (archParentDir STREQUAL CMAKE_SYSROOT)
+          get_filename_component(archDirName "${assumedArchDir}" NAME)
+          set(library_arch "${archDirName}")
+          break()
+        endif()
+      endif()
+    endforeach()
+  endif()
+
+  # Return results.
+  if(library_arch)
+    set(${output_var} "${library_arch}" PARENT_SCOPE)
+  endif()
+endfunction()
+
+cmake_policy(POP)
diff --git a/share/cmake-3.22/Modules/CMakePlatformId.h.in b/share/cmake-3.22/Modules/CMakePlatformId.h.in
new file mode 100644
index 0000000..59195f8
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakePlatformId.h.in
@@ -0,0 +1,318 @@
+#define STRINGIFY_HELPER(X) #X
+#define STRINGIFY(X) STRINGIFY_HELPER(X)
+
+/* Identify known platforms by name.  */
+#if defined(__linux) || defined(__linux__) || defined(linux)
+# define PLATFORM_ID "Linux"
+
+#elif defined(__MSYS__)
+# define PLATFORM_ID "MSYS"
+
+#elif defined(__CYGWIN__)
+# define PLATFORM_ID "Cygwin"
+
+#elif defined(__MINGW32__)
+# define PLATFORM_ID "MinGW"
+
+#elif defined(__APPLE__)
+# define PLATFORM_ID "Darwin"
+
+#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
+# define PLATFORM_ID "Windows"
+
+#elif defined(__FreeBSD__) || defined(__FreeBSD)
+# define PLATFORM_ID "FreeBSD"
+
+#elif defined(__NetBSD__) || defined(__NetBSD)
+# define PLATFORM_ID "NetBSD"
+
+#elif defined(__OpenBSD__) || defined(__OPENBSD)
+# define PLATFORM_ID "OpenBSD"
+
+#elif defined(__sun) || defined(sun)
+# define PLATFORM_ID "SunOS"
+
+#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
+# define PLATFORM_ID "AIX"
+
+#elif defined(__hpux) || defined(__hpux__)
+# define PLATFORM_ID "HP-UX"
+
+#elif defined(__HAIKU__)
+# define PLATFORM_ID "Haiku"
+
+#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
+# define PLATFORM_ID "BeOS"
+
+#elif defined(__QNX__) || defined(__QNXNTO__)
+# define PLATFORM_ID "QNX"
+
+#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
+# define PLATFORM_ID "Tru64"
+
+#elif defined(__riscos) || defined(__riscos__)
+# define PLATFORM_ID "RISCos"
+
+#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
+# define PLATFORM_ID "SINIX"
+
+#elif defined(__UNIX_SV__)
+# define PLATFORM_ID "UNIX_SV"
+
+#elif defined(__bsdos__)
+# define PLATFORM_ID "BSDOS"
+
+#elif defined(_MPRAS) || defined(MPRAS)
+# define PLATFORM_ID "MP-RAS"
+
+#elif defined(__osf) || defined(__osf__)
+# define PLATFORM_ID "OSF1"
+
+#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
+# define PLATFORM_ID "SCO_SV"
+
+#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
+# define PLATFORM_ID "ULTRIX"
+
+#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
+# define PLATFORM_ID "Xenix"
+
+#elif defined(__WATCOMC__)
+# if defined(__LINUX__)
+#  define PLATFORM_ID "Linux"
+
+# elif defined(__DOS__)
+#  define PLATFORM_ID "DOS"
+
+# elif defined(__OS2__)
+#  define PLATFORM_ID "OS2"
+
+# elif defined(__WINDOWS__)
+#  define PLATFORM_ID "Windows3x"
+
+# elif defined(__VXWORKS__)
+#  define PLATFORM_ID "VxWorks"
+
+# else /* unknown platform */
+#  define PLATFORM_ID
+# endif
+
+#elif defined(__INTEGRITY)
+# if defined(INT_178B)
+#  define PLATFORM_ID "Integrity178"
+
+# else /* regular Integrity */
+#  define PLATFORM_ID "Integrity"
+# endif
+
+#else /* unknown platform */
+# define PLATFORM_ID
+
+#endif
+
+/* For windows compilers MSVC and Intel we can determine
+   the architecture of the compiler being used.  This is because
+   the compilers do not have flags that can change the architecture,
+   but rather depend on which compiler is being used
+*/
+#if defined(_WIN32) && defined(_MSC_VER)
+# if defined(_M_IA64)
+#  define ARCHITECTURE_ID "IA64"
+
+# elif defined(_M_ARM64EC)
+#  define ARCHITECTURE_ID "ARM64EC"
+
+# elif defined(_M_X64) || defined(_M_AMD64)
+#  define ARCHITECTURE_ID "x64"
+
+# elif defined(_M_IX86)
+#  define ARCHITECTURE_ID "X86"
+
+# elif defined(_M_ARM64)
+#  define ARCHITECTURE_ID "ARM64"
+
+# elif defined(_M_ARM)
+#  if _M_ARM == 4
+#   define ARCHITECTURE_ID "ARMV4I"
+#  elif _M_ARM == 5
+#   define ARCHITECTURE_ID "ARMV5I"
+#  else
+#   define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
+#  endif
+
+# elif defined(_M_MIPS)
+#  define ARCHITECTURE_ID "MIPS"
+
+# elif defined(_M_SH)
+#  define ARCHITECTURE_ID "SHx"
+
+# else /* unknown architecture */
+#  define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__WATCOMC__)
+# if defined(_M_I86)
+#  define ARCHITECTURE_ID "I86"
+
+# elif defined(_M_IX86)
+#  define ARCHITECTURE_ID "X86"
+
+# else /* unknown architecture */
+#  define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
+# if defined(__ICCARM__)
+#  define ARCHITECTURE_ID "ARM"
+
+# elif defined(__ICCRX__)
+#  define ARCHITECTURE_ID "RX"
+
+# elif defined(__ICCRH850__)
+#  define ARCHITECTURE_ID "RH850"
+
+# elif defined(__ICCRL78__)
+#  define ARCHITECTURE_ID "RL78"
+
+# elif defined(__ICCRISCV__)
+#  define ARCHITECTURE_ID "RISCV"
+
+# elif defined(__ICCAVR__)
+#  define ARCHITECTURE_ID "AVR"
+
+# elif defined(__ICC430__)
+#  define ARCHITECTURE_ID "MSP430"
+
+# elif defined(__ICCV850__)
+#  define ARCHITECTURE_ID "V850"
+
+# elif defined(__ICC8051__)
+#  define ARCHITECTURE_ID "8051"
+
+# elif defined(__ICCSTM8__)
+#  define ARCHITECTURE_ID "STM8"
+
+# else /* unknown architecture */
+#  define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__ghs__)
+# if defined(__PPC64__)
+#  define ARCHITECTURE_ID "PPC64"
+
+# elif defined(__ppc__)
+#  define ARCHITECTURE_ID "PPC"
+
+# elif defined(__ARM__)
+#  define ARCHITECTURE_ID "ARM"
+
+# elif defined(__x86_64__)
+#  define ARCHITECTURE_ID "x64"
+
+# elif defined(__i386__)
+#  define ARCHITECTURE_ID "X86"
+
+# else /* unknown architecture */
+#  define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__TI_COMPILER_VERSION__)
+# if defined(__TI_ARM__)
+#  define ARCHITECTURE_ID "ARM"
+
+# elif defined(__MSP430__)
+#  define ARCHITECTURE_ID "MSP430"
+
+# elif defined(__TMS320C28XX__)
+#  define ARCHITECTURE_ID "TMS320C28x"
+
+# elif defined(__TMS320C6X__) || defined(_TMS320C6X)
+#  define ARCHITECTURE_ID "TMS320C6x"
+
+# else /* unknown architecture */
+#  define ARCHITECTURE_ID ""
+# endif
+
+#else
+#  define ARCHITECTURE_ID
+#endif
+
+/* Convert integer to decimal digit literals.  */
+#define DEC(n)                   \
+  ('0' + (((n) / 10000000)%10)), \
+  ('0' + (((n) / 1000000)%10)),  \
+  ('0' + (((n) / 100000)%10)),   \
+  ('0' + (((n) / 10000)%10)),    \
+  ('0' + (((n) / 1000)%10)),     \
+  ('0' + (((n) / 100)%10)),      \
+  ('0' + (((n) / 10)%10)),       \
+  ('0' +  ((n) % 10))
+
+/* Convert integer to hex digit literals.  */
+#define HEX(n)             \
+  ('0' + ((n)>>28 & 0xF)), \
+  ('0' + ((n)>>24 & 0xF)), \
+  ('0' + ((n)>>20 & 0xF)), \
+  ('0' + ((n)>>16 & 0xF)), \
+  ('0' + ((n)>>12 & 0xF)), \
+  ('0' + ((n)>>8  & 0xF)), \
+  ('0' + ((n)>>4  & 0xF)), \
+  ('0' + ((n)     & 0xF))
+
+/* Construct a string literal encoding the version number. */
+#ifdef COMPILER_VERSION
+char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]";
+
+/* Construct a string literal encoding the version number components. */
+#elif defined(COMPILER_VERSION_MAJOR)
+char const info_version[] = {
+  'I', 'N', 'F', 'O', ':',
+  'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
+  COMPILER_VERSION_MAJOR,
+# ifdef COMPILER_VERSION_MINOR
+  '.', COMPILER_VERSION_MINOR,
+#  ifdef COMPILER_VERSION_PATCH
+   '.', COMPILER_VERSION_PATCH,
+#   ifdef COMPILER_VERSION_TWEAK
+    '.', COMPILER_VERSION_TWEAK,
+#   endif
+#  endif
+# endif
+  ']','\0'};
+#endif
+
+/* Construct a string literal encoding the internal version number. */
+#ifdef COMPILER_VERSION_INTERNAL
+char const info_version_internal[] = {
+  'I', 'N', 'F', 'O', ':',
+  'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',
+  'i','n','t','e','r','n','a','l','[',
+  COMPILER_VERSION_INTERNAL,']','\0'};
+#elif defined(COMPILER_VERSION_INTERNAL_STR)
+char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]";
+#endif
+
+/* Construct a string literal encoding the version number components. */
+#ifdef SIMULATE_VERSION_MAJOR
+char const info_simulate_version[] = {
+  'I', 'N', 'F', 'O', ':',
+  's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
+  SIMULATE_VERSION_MAJOR,
+# ifdef SIMULATE_VERSION_MINOR
+  '.', SIMULATE_VERSION_MINOR,
+#  ifdef SIMULATE_VERSION_PATCH
+   '.', SIMULATE_VERSION_PATCH,
+#   ifdef SIMULATE_VERSION_TWEAK
+    '.', SIMULATE_VERSION_TWEAK,
+#   endif
+#  endif
+# endif
+  ']','\0'};
+#endif
+
+/* Construct the string literal in pieces to prevent the source from
+   getting matched.  Store it in a pointer rather than an array
+   because some compilers will just produce instructions to fill the
+   array rather than assigning a pointer to a static array.  */
+char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
+char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
diff --git a/share/cmake-3.22/Modules/CMakePrintHelpers.cmake b/share/cmake-3.22/Modules/CMakePrintHelpers.cmake
new file mode 100644
index 0000000..8c25a73
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakePrintHelpers.cmake
@@ -0,0 +1,150 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CMakePrintHelpers
+-----------------
+
+Convenience functions for printing properties and variables, useful
+e.g. for debugging.
+
+::
+
+  cmake_print_properties([TARGETS target1 ..  targetN]
+                        [SOURCES source1 .. sourceN]
+                        [DIRECTORIES dir1 .. dirN]
+                        [TESTS test1 .. testN]
+                        [CACHE_ENTRIES entry1 .. entryN]
+                        PROPERTIES prop1 .. propN )
+
+This function prints the values of the properties of the given targets,
+source files, directories, tests or cache entries.  Exactly one of the
+scope keywords must be used.  Example::
+
+  cmake_print_properties(TARGETS foo bar PROPERTIES
+                         LOCATION INTERFACE_INCLUDE_DIRECTORIES)
+
+This will print the LOCATION and INTERFACE_INCLUDE_DIRECTORIES properties for
+both targets foo and bar.
+
+::
+
+  cmake_print_variables(var1 var2 ..  varN)
+
+This function will print the name of each variable followed by its value.
+Example::
+
+  cmake_print_variables(CMAKE_C_COMPILER CMAKE_MAJOR_VERSION DOES_NOT_EXIST)
+
+Gives::
+
+  -- CMAKE_C_COMPILER="/usr/bin/gcc" ; CMAKE_MAJOR_VERSION="2" ; DOES_NOT_EXIST=""
+#]=======================================================================]
+
+function(cmake_print_variables)
+  set(msg "")
+  foreach(var ${ARGN})
+    if(msg)
+      string(APPEND msg " ; ")
+    endif()
+    string(APPEND msg "${var}=\"${${var}}\"")
+  endforeach()
+  message(STATUS "${msg}")
+endfunction()
+
+
+function(cmake_print_properties)
+  set(options )
+  set(oneValueArgs )
+  set(multiValueArgs TARGETS SOURCES TESTS DIRECTORIES CACHE_ENTRIES PROPERTIES )
+
+  cmake_parse_arguments(CPP "${options}" "${oneValueArgs}" "${multiValueArgs}"  ${ARGN})
+
+  if(CPP_UNPARSED_ARGUMENTS)
+    message(FATAL_ERROR "Unknown keywords given to cmake_print_properties(): \"${CPP_UNPARSED_ARGUMENTS}\"")
+    return()
+  endif()
+
+  if(NOT CPP_PROPERTIES)
+    message(FATAL_ERROR "Required argument PROPERTIES missing in cmake_print_properties() call")
+    return()
+  endif()
+
+  set(mode)
+  set(items)
+  set(keyword)
+
+  if(CPP_TARGETS)
+    set(items ${CPP_TARGETS})
+    set(mode ${mode} TARGETS)
+    set(keyword TARGET)
+  endif()
+
+  if(CPP_SOURCES)
+    set(items ${CPP_SOURCES})
+    set(mode ${mode} SOURCES)
+    set(keyword SOURCE)
+  endif()
+
+  if(CPP_TESTS)
+    set(items ${CPP_TESTS})
+    set(mode ${mode} TESTS)
+    set(keyword TEST)
+  endif()
+
+  if(CPP_DIRECTORIES)
+    set(items ${CPP_DIRECTORIES})
+    set(mode ${mode} DIRECTORIES)
+    set(keyword DIRECTORY)
+  endif()
+
+  if(CPP_CACHE_ENTRIES)
+    set(items ${CPP_CACHE_ENTRIES})
+    set(mode ${mode} CACHE_ENTRIES)
+    # This is a workaround for the fact that passing `CACHE` as an argument to
+    # set() causes a cache variable to be set.
+    set(keyword "")
+    string(APPEND keyword CACHE)
+  endif()
+
+  if(NOT mode)
+    message(FATAL_ERROR "Mode keyword missing in cmake_print_properties() call, must be one of TARGETS SOURCES TESTS DIRECTORIES CACHE_ENTRIES PROPERTIES")
+    return()
+  endif()
+
+  list(LENGTH mode modeLength)
+  if("${modeLength}" GREATER 1)
+    message(FATAL_ERROR "Multiple mode keyword used in cmake_print_properties() call, it must be exactly one of TARGETS SOURCES TESTS DIRECTORIES CACHE_ENTRIES PROPERTIES")
+    return()
+  endif()
+
+  set(msg "\n")
+  foreach(item ${items})
+
+    set(itemExists TRUE)
+    if(keyword STREQUAL "TARGET")
+      if(NOT TARGET ${item})
+      set(itemExists FALSE)
+      string(APPEND msg "\n No such TARGET \"${item}\" !\n\n")
+      endif()
+    endif()
+
+    if (itemExists)
+      string(APPEND msg " Properties for ${keyword} ${item}:\n")
+      foreach(prop ${CPP_PROPERTIES})
+
+        get_property(propertySet ${keyword} ${item} PROPERTY "${prop}" SET)
+
+        if(propertySet)
+          get_property(property ${keyword} ${item} PROPERTY "${prop}")
+          string(APPEND msg "   ${item}.${prop} = \"${property}\"\n")
+        else()
+          string(APPEND msg "   ${item}.${prop} = <NOTFOUND>\n")
+        endif()
+      endforeach()
+    endif()
+
+  endforeach()
+  message(STATUS "${msg}")
+
+endfunction()
diff --git a/share/cmake-3.18/Modules/CMakePrintSystemInformation.cmake b/share/cmake-3.22/Modules/CMakePrintSystemInformation.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakePrintSystemInformation.cmake
rename to share/cmake-3.22/Modules/CMakePrintSystemInformation.cmake
diff --git a/share/cmake-3.18/Modules/CMakePushCheckState.cmake b/share/cmake-3.22/Modules/CMakePushCheckState.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakePushCheckState.cmake
rename to share/cmake-3.22/Modules/CMakePushCheckState.cmake
diff --git a/share/cmake-3.18/Modules/CMakeRCCompiler.cmake.in b/share/cmake-3.22/Modules/CMakeRCCompiler.cmake.in
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeRCCompiler.cmake.in
rename to share/cmake-3.22/Modules/CMakeRCCompiler.cmake.in
diff --git a/share/cmake-3.18/Modules/CMakeRCInformation.cmake b/share/cmake-3.22/Modules/CMakeRCInformation.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeRCInformation.cmake
rename to share/cmake-3.22/Modules/CMakeRCInformation.cmake
diff --git a/share/cmake-3.18/Modules/CMakeSwiftCompiler.cmake.in b/share/cmake-3.22/Modules/CMakeSwiftCompiler.cmake.in
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeSwiftCompiler.cmake.in
rename to share/cmake-3.22/Modules/CMakeSwiftCompiler.cmake.in
diff --git a/share/cmake-3.22/Modules/CMakeSwiftInformation.cmake b/share/cmake-3.22/Modules/CMakeSwiftInformation.cmake
new file mode 100644
index 0000000..ecad1d5
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeSwiftInformation.cmake
@@ -0,0 +1,112 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+if(UNIX)
+  set(CMAKE_Swift_OUTPUT_EXTENSION .o)
+else()
+  set(CMAKE_Swift_OUTPUT_EXTENSION .obj)
+endif()
+
+# Load compiler-specific information.
+if(CMAKE_Swift_COMPILER_ID)
+  include(Compiler/${CMAKE_Swift_COMPILER_ID}-Swift OPTIONAL)
+
+  if(CMAKE_SYSTEM_PROCESSOR)
+    include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_Swift_COMPILER_ID}-Swift-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL)
+  endif()
+  include(Platform/${CMAKE_EFFECTIVE_SYSTEM_NAME}-${CMAKE_Swift_COMPILER_ID}-Swift OPTIONAL)
+endif()
+
+set(CMAKE_EXE_EXPORTS_Swift_FLAG "-emit-module -emit-module-path <SWIFT_MODULE> ${CMAKE_Swift_IMPLIB_LINKER_FLAGS}")
+
+set(CMAKE_INCLUDE_FLAG_Swift "-I ")
+if(CMAKE_SYSTEM_NAME STREQUAL Darwin)
+  set(CMAKE_SHARED_LIBRARY_SONAME_Swift_FLAG "-Xlinker -install_name -Xlinker ")
+elseif(NOT CMAKE_SYSTEM_NAME STREQUAL Windows)
+  set(CMAKE_SHARED_LIBRARY_SONAME_Swift_FLAG "-Xlinker -soname -Xlinker ")
+endif()
+
+if(NOT CMAKE_SYSTEM_NAME STREQUAL Windows)
+  set(CMAKE_EXECUTABLE_RUNTIME_Swift_FLAG "-Xlinker -rpath -Xlinker ")
+  set(CMAKE_SHARED_LIBRARY_RUNTIME_Swift_FLAG "-Xlinker -rpath -Xlinker ")
+  if(CMAKE_SYSTEM_NAME STREQUAL Darwin)
+    set(CMAKE_EXECUTABLE_RUNTIME_Swift_FLAG_SEP "")
+    set(CMAKE_SHARED_LIBRARY_RUNTIME_Swift_FLAG_SEP "")
+  else()
+    set(CMAKE_EXECUTABLE_RUNTIME_Swift_FLAG_SEP ":")
+    set(CMAKE_SHARED_LIBRARY_RUNTIME_Swift_FLAG_SEP ":")
+  endif()
+endif()
+
+set(CMAKE_Swift_COMPILE_OPTIONS_TARGET "-target ")
+set(CMAKE_Swift_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN "-tools-directory ")
+# NOTE(compnerd) the `-sdk` support is not yet ready in the compiler; when that
+# is fully working, we should be able to enable this.
+# set(CMAKE_Swift_COMPILE_OPTIONS_SYSROOT "-sdk ")
+# NOTE(compnerd) do not setup `-frontend` as we use the compiler as the driver
+# during the link phase and use that to drive the compilation
+set(CMAKE_Swift_COMPILER_ARG1 "")
+set(CMAKE_Swift_DEFINE_FLAG -D)
+set(CMAKE_Swift_FRAMEWORK_SEARCH_FLAG "-F ")
+set(CMAKE_Swift_LIBRARY_PATH_FLAG "-L ")
+set(CMAKE_Swift_LIBRARY_PATH_TERMINATOR "")
+set(CMAKE_Swift_LINK_LIBRARY_FLAG "-l")
+set(CMAKE_Swift_LINKER_WRAPPER_FLAG "-Xlinker" " ")
+set(CMAKE_Swift_RESPONSE_FILE_LINK_FLAG @)
+
+set(CMAKE_Swift_LINKER_PREFERENCE 50)
+set(CMAKE_Swift_LINKER_PREFERENCE_PROPAGATES 1)
+
+# NOTE(compnerd) use the short form for convenience and ease of search.  They
+# are treated equivalent to their long form names as well as custom Swift
+# specific names.
+set(CMAKE_Swift_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreaded -libc MT)
+set(CMAKE_Swift_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDLL -libc MD)
+set(CMAKE_Swift_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebug -libc MTd)
+set(CMAKE_Swift_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebugDLL -libc MDd)
+
+set(CMAKE_Swift_FLAGS_DEBUG_INIT "-g")
+set(CMAKE_Swift_FLAGS_RELEASE_INIT "-O")
+set(CMAKE_Swift_FLAGS_RELWITHDEBINFO_INIT "-O -g")
+set(CMAKE_Swift_FLAGS_MINSIZEREL_INIT "-Osize")
+
+if(CMAKE_EXECUTABLE_FORMAT STREQUAL "ELF")
+  if(NOT DEFINED CMAKE_Swift_LINK_WHAT_YOU_USE_FLAG)
+    set(CMAKE_Swift_LINK_WHAT_YOU_USE_FLAG "LINKER:--no-as-needed")
+  endif()
+  if(NOT DEFINED CMAKE_LINK_WHAT_YOU_USE_CHECK)
+    set(CMAKE_LINK_WHAT_YOU_USE_CHECK ldd -u -r)
+  endif()
+endif()
+
+cmake_initialize_per_config_variable(CMAKE_Swift_FLAGS "Swift Compiler Flags")
+
+# NOTE(compnerd) we do not have an object compile rule since we build the objects as part of the link step
+if(NOT CMAKE_Swift_COMPILE_OBJECT)
+  set(CMAKE_Swift_COMPILE_OBJECT ":")
+endif()
+
+if(NOT CMAKE_Swift_NUM_THREADS MATCHES "^[0-9]+$")
+  cmake_host_system_information(RESULT CMAKE_Swift_NUM_THREADS QUERY NUMBER_OF_LOGICAL_CORES)
+endif()
+
+if(NOT CMAKE_Swift_CREATE_SHARED_LIBRARY)
+  set(CMAKE_Swift_CREATE_SHARED_LIBRARY "<CMAKE_Swift_COMPILER> -output-file-map <SWIFT_OUTPUT_FILE_MAP> -incremental -j ${CMAKE_Swift_NUM_THREADS} -emit-library -o <TARGET> -module-name <SWIFT_MODULE_NAME> -module-link-name <SWIFT_LIBRARY_NAME> -emit-module -emit-module-path <SWIFT_MODULE> -emit-dependencies <DEFINES> <FLAGS> <INCLUDES> <SWIFT_SOURCES> <LINK_FLAGS> <SONAME_FLAG> <TARGET_INSTALLNAME_DIR><TARGET_SONAME> ${CMAKE_Swift_IMPLIB_LINKER_FLAGS} <LINK_LIBRARIES>")
+endif()
+
+if(NOT CMAKE_Swift_CREATE_SHARED_MODULE)
+  set(CMAKE_Swift_CREATE_SHARED_MODULE ${CMAKE_Swift_CREATE_SHARED_LIBRARY})
+endif()
+
+if(NOT CMAKE_Swift_LINK_EXECUTABLE)
+  set(CMAKE_Swift_LINK_EXECUTABLE "<CMAKE_Swift_COMPILER> -output-file-map <SWIFT_OUTPUT_FILE_MAP> -incremental -j ${CMAKE_Swift_NUM_THREADS} -emit-executable -o <TARGET> -emit-dependencies <DEFINES> <FLAGS> <INCLUDES> <SWIFT_SOURCES> <LINK_FLAGS> <LINK_LIBRARIES>")
+endif()
+
+if(NOT CMAKE_Swift_CREATE_STATIC_LIBRARY)
+  set(CMAKE_Swift_CREATE_STATIC_LIBRARY "<CMAKE_Swift_COMPILER> -output-file-map <SWIFT_OUTPUT_FILE_MAP> -incremental -j ${CMAKE_Swift_NUM_THREADS} -emit-library -static -o <TARGET> -module-name <SWIFT_MODULE_NAME> -module-link-name <SWIFT_LIBRARY_NAME> -emit-module -emit-module-path <SWIFT_MODULE> -emit-dependencies <DEFINES> <FLAGS> <INCLUDES> <SWIFT_SOURCES> <LINK_FLAGS> <LINK_LIBRARIES>")
+
+  set(CMAKE_Swift_ARCHIVE_CREATE "<CMAKE_AR> crs <TARGET> <OBJECTS>")
+  set(CMAKE_Swift_ARCHIVE_FINISH "")
+endif()
+
+set(CMAKE_Swift_INFORMATION_LOADED 1)
diff --git a/share/cmake-3.18/Modules/CMakeSystem.cmake.in b/share/cmake-3.22/Modules/CMakeSystem.cmake.in
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeSystem.cmake.in
rename to share/cmake-3.22/Modules/CMakeSystem.cmake.in
diff --git a/share/cmake-3.22/Modules/CMakeSystemSpecificInformation.cmake b/share/cmake-3.22/Modules/CMakeSystemSpecificInformation.cmake
new file mode 100644
index 0000000..0ded568
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeSystemSpecificInformation.cmake
@@ -0,0 +1,59 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# This file is included by cmGlobalGenerator::EnableLanguage.
+# It is included after the compiler has been determined, so
+# we know things like the compiler name and if the compiler is gnu.
+
+# before cmake 2.6 these variables were set in cmMakefile.cxx. This is still
+# done to keep scripts and custom language and compiler modules working.
+# But they are reset here and set again in the platform files for the target
+# platform, so they can be used for testing the target platform instead
+# of testing the host platform.
+set(APPLE  )
+set(UNIX   )
+set(CYGWIN )
+set(MSYS )
+set(WIN32  )
+
+
+# include Generic system information
+include(CMakeGenericSystem)
+
+# 2. now include SystemName.cmake file to set the system specific information
+set(CMAKE_SYSTEM_INFO_FILE Platform/${CMAKE_SYSTEM_NAME})
+
+include(${CMAKE_SYSTEM_INFO_FILE} OPTIONAL RESULT_VARIABLE _INCLUDED_SYSTEM_INFO_FILE)
+
+if(NOT _INCLUDED_SYSTEM_INFO_FILE)
+  message("System is unknown to cmake, create:\n${CMAKE_SYSTEM_INFO_FILE}"
+          " to use this system, please post your config file on "
+          "discourse.cmake.org so it can be added to cmake")
+  if(EXISTS ${CMAKE_BINARY_DIR}/CMakeCache.txt)
+    configure_file(${CMAKE_BINARY_DIR}/CMakeCache.txt
+                   ${CMAKE_BINARY_DIR}/CopyOfCMakeCache.txt COPYONLY)
+    message("Your CMakeCache.txt file was copied to CopyOfCMakeCache.txt. "
+            "Please post that file on discourse.cmake.org.")
+  endif()
+endif()
+
+# optionally include a file which can do extra-generator specific things, e.g.
+# CMakeFindEclipseCDT4.cmake asks gcc for the system include dirs for the Eclipse CDT4 generator
+if(CMAKE_EXTRA_GENERATOR)
+  string(REPLACE " " "" _CMAKE_EXTRA_GENERATOR_NO_SPACES ${CMAKE_EXTRA_GENERATOR} )
+  include("CMakeFind${_CMAKE_EXTRA_GENERATOR_NO_SPACES}" OPTIONAL)
+endif()
+
+
+# for most systems a module is the same as a shared library
+# so unless the variable CMAKE_MODULE_EXISTS is set just
+# copy the values from the LIBRARY variables
+# this has to be done after the system information has been loaded
+if(NOT CMAKE_MODULE_EXISTS)
+  set(CMAKE_SHARED_MODULE_PREFIX "${CMAKE_SHARED_LIBRARY_PREFIX}")
+  set(CMAKE_SHARED_MODULE_SUFFIX "${CMAKE_SHARED_LIBRARY_SUFFIX}")
+endif()
+
+
+set(CMAKE_SYSTEM_SPECIFIC_INFORMATION_LOADED 1)
diff --git a/share/cmake-3.18/Modules/CMakeSystemSpecificInitialize.cmake b/share/cmake-3.22/Modules/CMakeSystemSpecificInitialize.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeSystemSpecificInitialize.cmake
rename to share/cmake-3.22/Modules/CMakeSystemSpecificInitialize.cmake
diff --git a/share/cmake-3.18/Modules/CMakeTestASM-ATTCompiler.cmake b/share/cmake-3.22/Modules/CMakeTestASM-ATTCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeTestASM-ATTCompiler.cmake
rename to share/cmake-3.22/Modules/CMakeTestASM-ATTCompiler.cmake
diff --git a/share/cmake-3.18/Modules/CMakeTestASMCompiler.cmake b/share/cmake-3.22/Modules/CMakeTestASMCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeTestASMCompiler.cmake
rename to share/cmake-3.22/Modules/CMakeTestASMCompiler.cmake
diff --git a/share/cmake-3.18/Modules/CMakeTestASM_MASMCompiler.cmake b/share/cmake-3.22/Modules/CMakeTestASM_MASMCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeTestASM_MASMCompiler.cmake
rename to share/cmake-3.22/Modules/CMakeTestASM_MASMCompiler.cmake
diff --git a/share/cmake-3.18/Modules/CMakeTestASM_NASMCompiler.cmake b/share/cmake-3.22/Modules/CMakeTestASM_NASMCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeTestASM_NASMCompiler.cmake
rename to share/cmake-3.22/Modules/CMakeTestASM_NASMCompiler.cmake
diff --git a/share/cmake-3.22/Modules/CMakeTestCCompiler.cmake b/share/cmake-3.22/Modules/CMakeTestCCompiler.cmake
new file mode 100644
index 0000000..ae5aa27
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeTestCCompiler.cmake
@@ -0,0 +1,101 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+if(CMAKE_C_COMPILER_FORCED)
+  # The compiler configuration was forced by the user.
+  # Assume the user has configured all compiler information.
+  set(CMAKE_C_COMPILER_WORKS TRUE)
+  return()
+endif()
+
+include(CMakeTestCompilerCommon)
+
+# work around enforced code signing and / or missing executable target type
+set(__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE ${CMAKE_TRY_COMPILE_TARGET_TYPE})
+if(_CMAKE_FEATURE_DETECTION_TARGET_TYPE)
+  set(CMAKE_TRY_COMPILE_TARGET_TYPE ${_CMAKE_FEATURE_DETECTION_TARGET_TYPE})
+endif()
+
+# Remove any cached result from an older CMake version.
+# We now store this in CMakeCCompiler.cmake.
+unset(CMAKE_C_COMPILER_WORKS CACHE)
+
+# Try to identify the ABI and configure it into CMakeCCompiler.cmake
+include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerABI.cmake)
+CMAKE_DETERMINE_COMPILER_ABI(C ${CMAKE_ROOT}/Modules/CMakeCCompilerABI.c)
+if(CMAKE_C_ABI_COMPILED)
+  # The compiler worked so skip dedicated test below.
+  set(CMAKE_C_COMPILER_WORKS TRUE)
+  message(STATUS "Check for working C compiler: ${CMAKE_C_COMPILER} - skipped")
+endif()
+
+# This file is used by EnableLanguage in cmGlobalGenerator to
+# determine that that selected C compiler can actually compile
+# and link the most basic of programs.   If not, a fatal error
+# is set and cmake stops processing commands and will not generate
+# any makefiles or projects.
+if(NOT CMAKE_C_COMPILER_WORKS)
+  PrintTestCompilerStatus("C")
+  __TestCompiler_setTryCompileTargetType()
+  file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testCCompiler.c
+    "#ifdef __cplusplus\n"
+    "# error \"The CMAKE_C_COMPILER is set to a C++ compiler\"\n"
+    "#endif\n"
+    "#if defined(__CLASSIC_C__)\n"
+    "int main(argc, argv)\n"
+    "  int argc;\n"
+    "  char* argv[];\n"
+    "#else\n"
+    "int main(int argc, char* argv[])\n"
+    "#endif\n"
+    "{ (void)argv; return argc-1;}\n")
+  # Clear result from normal variable.
+  unset(CMAKE_C_COMPILER_WORKS)
+  # Puts test result in cache variable.
+  try_compile(CMAKE_C_COMPILER_WORKS ${CMAKE_BINARY_DIR}
+    ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testCCompiler.c
+    OUTPUT_VARIABLE __CMAKE_C_COMPILER_OUTPUT)
+  # Move result from cache to normal variable.
+  set(CMAKE_C_COMPILER_WORKS ${CMAKE_C_COMPILER_WORKS})
+  unset(CMAKE_C_COMPILER_WORKS CACHE)
+  __TestCompiler_restoreTryCompileTargetType()
+  if(NOT CMAKE_C_COMPILER_WORKS)
+    PrintTestCompilerResult(CHECK_FAIL "broken")
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+      "Determining if the C compiler works failed with "
+      "the following output:\n${__CMAKE_C_COMPILER_OUTPUT}\n\n")
+    string(REPLACE "\n" "\n  " _output "${__CMAKE_C_COMPILER_OUTPUT}")
+    message(FATAL_ERROR "The C compiler\n  \"${CMAKE_C_COMPILER}\"\n"
+      "is not able to compile a simple test program.\nIt fails "
+      "with the following output:\n  ${_output}\n\n"
+      "CMake will not be able to correctly generate this project.")
+  endif()
+  PrintTestCompilerResult(CHECK_PASS "works")
+  file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+    "Determining if the C compiler works passed with "
+    "the following output:\n${__CMAKE_C_COMPILER_OUTPUT}\n\n")
+endif()
+
+# Try to identify the compiler features
+include(${CMAKE_ROOT}/Modules/CMakeDetermineCompileFeatures.cmake)
+CMAKE_DETERMINE_COMPILE_FEATURES(C)
+
+# Re-configure to save learned information.
+configure_file(
+  ${CMAKE_ROOT}/Modules/CMakeCCompiler.cmake.in
+  ${CMAKE_PLATFORM_INFO_DIR}/CMakeCCompiler.cmake
+  @ONLY
+  )
+include(${CMAKE_PLATFORM_INFO_DIR}/CMakeCCompiler.cmake)
+
+if(CMAKE_C_SIZEOF_DATA_PTR)
+  foreach(f ${CMAKE_C_ABI_FILES})
+    include(${f})
+  endforeach()
+  unset(CMAKE_C_ABI_FILES)
+endif()
+
+set(CMAKE_TRY_COMPILE_TARGET_TYPE ${__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE})
+unset(__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE)
+unset(__CMAKE_C_COMPILER_OUTPUT)
diff --git a/share/cmake-3.22/Modules/CMakeTestCSharpCompiler.cmake b/share/cmake-3.22/Modules/CMakeTestCSharpCompiler.cmake
new file mode 100644
index 0000000..adea250
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeTestCSharpCompiler.cmake
@@ -0,0 +1,70 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+if(CMAKE_CSharp_COMPILER_FORCED)
+  # The compiler configuration was forced by the user.
+  # Assume the user has configured all compiler information.
+  set(CMAKE_CSharp_COMPILER_WORKS TRUE)
+  return()
+endif()
+
+include(CMakeTestCompilerCommon)
+
+unset(CMAKE_CSharp_COMPILER_WORKS CACHE)
+
+set(test_compile_file "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testCSharpCompiler.cs")
+
+# This file is used by EnableLanguage in cmGlobalGenerator to
+# determine that the selected C# compiler can actually compile
+# and link the most basic of programs. If not, a fatal error
+# is set and cmake stops processing commands and will not generate
+# any makefiles or projects.
+if(NOT CMAKE_CSharp_COMPILER_WORKS)
+  # Don't call PrintTestCompilerStatus() because the "C#" we want to pass
+  # as the LANG doesn't match with the variable name "CMAKE_CSharp_COMPILER"
+  message(CHECK_START "Check for working C# compiler: ${CMAKE_CSharp_COMPILER}")
+  file(WRITE "${test_compile_file}"
+    "namespace Test {"
+    "   public class CSharp {"
+    "       static void Main(string[] args) {}"
+    "   }"
+    "}"
+    )
+  # Clear result from normal variable.
+  unset(CMAKE_CSharp_COMPILER_WORKS)
+  # Puts test result in cache variable.
+  try_compile(CMAKE_CSharp_COMPILER_WORKS ${CMAKE_BINARY_DIR} "${test_compile_file}"
+    OUTPUT_VARIABLE __CMAKE_CSharp_COMPILER_OUTPUT
+    )
+  # Move result from cache to normal variable.
+  set(CMAKE_CSharp_COMPILER_WORKS ${CMAKE_CSharp_COMPILER_WORKS})
+  unset(CMAKE_CSharp_COMPILER_WORKS CACHE)
+  set(CSharp_TEST_WAS_RUN 1)
+endif()
+
+if(NOT CMAKE_CSharp_COMPILER_WORKS)
+  PrintTestCompilerResult(CHECK_FAIL "broken")
+  file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+    "Determining if the C# compiler works failed with "
+    "the following output:\n${__CMAKE_CSharp_COMPILER_OUTPUT}\n\n")
+  string(REPLACE "\n" "\n  " _output "${__CMAKE_CSharp_COMPILER_OUTPUT}")
+  message(FATAL_ERROR "The C# compiler\n  \"${CMAKE_CSharp_COMPILER}\"\n"
+    "is not able to compile a simple test program.\nIt fails "
+    "with the following output:\n  ${_output}\n\n"
+    "CMake will not be able to correctly generate this project.")
+else()
+  if(CSharp_TEST_WAS_RUN)
+    PrintTestCompilerResult(CHECK_PASS "works")
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+      "Determining if the C# compiler works passed with "
+      "the following output:\n${__CMAKE_CSharp_COMPILER_OUTPUT}\n\n")
+  endif()
+
+  # Re-configure to save learned information.
+  configure_file(
+    ${CMAKE_ROOT}/Modules/CMakeCSharpCompiler.cmake.in
+    ${CMAKE_PLATFORM_INFO_DIR}/CMakeCSharpCompiler.cmake
+    @ONLY
+    )
+  include(${CMAKE_PLATFORM_INFO_DIR}/CMakeCSharpCompiler.cmake)
+endif()
diff --git a/share/cmake-3.22/Modules/CMakeTestCUDACompiler.cmake b/share/cmake-3.22/Modules/CMakeTestCUDACompiler.cmake
new file mode 100644
index 0000000..25a3653
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeTestCUDACompiler.cmake
@@ -0,0 +1,102 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+if(CMAKE_CUDA_COMPILER_FORCED)
+  # The compiler configuration was forced by the user.
+  # Assume the user has configured all compiler information.
+  set(CMAKE_CUDA_COMPILER_WORKS TRUE)
+  return()
+endif()
+
+include(CMakeTestCompilerCommon)
+
+# Remove any cached result from an older CMake version.
+# We now store this in CMakeCUDACompiler.cmake.
+unset(CMAKE_CUDA_COMPILER_WORKS CACHE)
+
+# Try to identify the ABI and configure it into CMakeCUDACompiler.cmake
+include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerABI.cmake)
+CMAKE_DETERMINE_COMPILER_ABI(CUDA ${CMAKE_ROOT}/Modules/CMakeCUDACompilerABI.cu)
+if(CMAKE_CUDA_ABI_COMPILED)
+  # The compiler worked so skip dedicated test below.
+  set(CMAKE_CUDA_COMPILER_WORKS TRUE)
+  message(STATUS "Check for working CUDA compiler: ${CMAKE_CUDA_COMPILER} - skipped")
+endif()
+
+# This file is used by EnableLanguage in cmGlobalGenerator to
+# determine that the selected cuda compiler can actually compile
+# and link the most basic of programs.   If not, a fatal error
+# is set and cmake stops processing commands and will not generate
+# any makefiles or projects.
+if(NOT CMAKE_CUDA_COMPILER_WORKS)
+  PrintTestCompilerStatus("CUDA")
+  file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/main.cu
+    "#ifndef __CUDACC__\n"
+    "# error \"The CMAKE_CUDA_COMPILER is set to an invalid CUDA compiler\"\n"
+    "#endif\n"
+    "int main(){return 0;}\n")
+
+  # Clear result from normal variable.
+  unset(CMAKE_CUDA_COMPILER_WORKS)
+
+  # Puts test result in cache variable.
+  try_compile(CMAKE_CUDA_COMPILER_WORKS ${CMAKE_BINARY_DIR}
+    ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/main.cu
+    OUTPUT_VARIABLE __CMAKE_CUDA_COMPILER_OUTPUT)
+
+  # Move result from cache to normal variable.
+  set(CMAKE_CUDA_COMPILER_WORKS ${CMAKE_CUDA_COMPILER_WORKS})
+  unset(CMAKE_CUDA_COMPILER_WORKS CACHE)
+  if(NOT CMAKE_CUDA_COMPILER_WORKS)
+    PrintTestCompilerResult(CHECK_FAIL "broken")
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+      "Determining if the CUDA compiler works failed with "
+      "the following output:\n${__CMAKE_CUDA_COMPILER_OUTPUT}\n\n")
+    string(REPLACE "\n" "\n  " _output "${__CMAKE_CUDA_COMPILER_OUTPUT}")
+    message(FATAL_ERROR "The CUDA compiler\n  \"${CMAKE_CUDA_COMPILER}\"\n"
+      "is not able to compile a simple test program.\nIt fails "
+      "with the following output:\n  ${_output}\n\n"
+      "CMake will not be able to correctly generate this project.")
+  endif()
+  PrintTestCompilerResult(CHECK_PASS "works")
+  file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+    "Determining if the CUDA compiler works passed with "
+    "the following output:\n${__CMAKE_CUDA_COMPILER_OUTPUT}\n\n")
+endif()
+
+# Try to identify the compiler features
+include(${CMAKE_ROOT}/Modules/CMakeDetermineCompileFeatures.cmake)
+CMAKE_DETERMINE_COMPILE_FEATURES(CUDA)
+
+if("x${CMAKE_CUDA_SIMULATE_ID}" STREQUAL "xMSVC")
+  set(CMAKE_CUDA_IMPLICIT_LINK_LIBRARIES "${CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES}")
+  set(CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES "${CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES}")
+endif()
+
+# Filter out implicit link libraries that should not be passed unconditionally.
+# See CMAKE_CUDA_IMPLICIT_LINK_LIBRARIES_EXCLUDE in CMakeDetermineCUDACompiler.
+list(REMOVE_ITEM CMAKE_CUDA_IMPLICIT_LINK_LIBRARIES ${CMAKE_CUDA_IMPLICIT_LINK_LIBRARIES_EXCLUDE})
+
+if(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA")
+  # Remove the CUDA Toolkit include directories from the set of
+  # implicit system include directories.
+  # This resolves the issue that NVCC doesn't specify these
+  # includes as SYSTEM includes when compiling device code, and sometimes
+  # they contain headers that generate warnings, so let users mark them
+  # as SYSTEM explicitly
+  if(CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES)
+    list(REMOVE_ITEM CMAKE_CUDA_IMPLICIT_INCLUDE_DIRECTORIES
+      ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES}
+      )
+  endif()
+endif()
+
+# Re-configure to save learned information.
+configure_file(
+  ${CMAKE_ROOT}/Modules/CMakeCUDACompiler.cmake.in
+  ${CMAKE_PLATFORM_INFO_DIR}/CMakeCUDACompiler.cmake
+  @ONLY
+  )
+include(${CMAKE_PLATFORM_INFO_DIR}/CMakeCUDACompiler.cmake)
+
+unset(__CMAKE_CUDA_COMPILER_OUTPUT)
diff --git a/share/cmake-3.22/Modules/CMakeTestCXXCompiler.cmake b/share/cmake-3.22/Modules/CMakeTestCXXCompiler.cmake
new file mode 100644
index 0000000..bbe3533
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeTestCXXCompiler.cmake
@@ -0,0 +1,94 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+if(CMAKE_CXX_COMPILER_FORCED)
+  # The compiler configuration was forced by the user.
+  # Assume the user has configured all compiler information.
+  set(CMAKE_CXX_COMPILER_WORKS TRUE)
+  return()
+endif()
+
+include(CMakeTestCompilerCommon)
+
+# work around enforced code signing and / or missing executable target type
+set(__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE ${CMAKE_TRY_COMPILE_TARGET_TYPE})
+if(_CMAKE_FEATURE_DETECTION_TARGET_TYPE)
+  set(CMAKE_TRY_COMPILE_TARGET_TYPE ${_CMAKE_FEATURE_DETECTION_TARGET_TYPE})
+endif()
+
+# Remove any cached result from an older CMake version.
+# We now store this in CMakeCXXCompiler.cmake.
+unset(CMAKE_CXX_COMPILER_WORKS CACHE)
+
+# Try to identify the ABI and configure it into CMakeCXXCompiler.cmake
+include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerABI.cmake)
+CMAKE_DETERMINE_COMPILER_ABI(CXX ${CMAKE_ROOT}/Modules/CMakeCXXCompilerABI.cpp)
+if(CMAKE_CXX_ABI_COMPILED)
+  # The compiler worked so skip dedicated test below.
+  set(CMAKE_CXX_COMPILER_WORKS TRUE)
+  message(STATUS "Check for working CXX compiler: ${CMAKE_CXX_COMPILER} - skipped")
+endif()
+
+# This file is used by EnableLanguage in cmGlobalGenerator to
+# determine that the selected C++ compiler can actually compile
+# and link the most basic of programs.   If not, a fatal error
+# is set and cmake stops processing commands and will not generate
+# any makefiles or projects.
+if(NOT CMAKE_CXX_COMPILER_WORKS)
+  PrintTestCompilerStatus("CXX")
+  __TestCompiler_setTryCompileTargetType()
+  file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testCXXCompiler.cxx
+    "#ifndef __cplusplus\n"
+    "# error \"The CMAKE_CXX_COMPILER is set to a C compiler\"\n"
+    "#endif\n"
+    "int main(){return 0;}\n")
+  # Clear result from normal variable.
+  unset(CMAKE_CXX_COMPILER_WORKS)
+  # Puts test result in cache variable.
+  try_compile(CMAKE_CXX_COMPILER_WORKS ${CMAKE_BINARY_DIR}
+    ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testCXXCompiler.cxx
+    OUTPUT_VARIABLE __CMAKE_CXX_COMPILER_OUTPUT)
+  # Move result from cache to normal variable.
+  set(CMAKE_CXX_COMPILER_WORKS ${CMAKE_CXX_COMPILER_WORKS})
+  unset(CMAKE_CXX_COMPILER_WORKS CACHE)
+  __TestCompiler_restoreTryCompileTargetType()
+  if(NOT CMAKE_CXX_COMPILER_WORKS)
+    PrintTestCompilerResult(CHECK_FAIL "broken")
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+      "Determining if the CXX compiler works failed with "
+      "the following output:\n${__CMAKE_CXX_COMPILER_OUTPUT}\n\n")
+    string(REPLACE "\n" "\n  " _output "${__CMAKE_CXX_COMPILER_OUTPUT}")
+    message(FATAL_ERROR "The C++ compiler\n  \"${CMAKE_CXX_COMPILER}\"\n"
+      "is not able to compile a simple test program.\nIt fails "
+      "with the following output:\n  ${_output}\n\n"
+      "CMake will not be able to correctly generate this project.")
+  endif()
+  PrintTestCompilerResult(CHECK_PASS "works")
+  file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+    "Determining if the CXX compiler works passed with "
+    "the following output:\n${__CMAKE_CXX_COMPILER_OUTPUT}\n\n")
+endif()
+
+# Try to identify the compiler features
+include(${CMAKE_ROOT}/Modules/CMakeDetermineCompileFeatures.cmake)
+CMAKE_DETERMINE_COMPILE_FEATURES(CXX)
+
+# Re-configure to save learned information.
+configure_file(
+  ${CMAKE_ROOT}/Modules/CMakeCXXCompiler.cmake.in
+  ${CMAKE_PLATFORM_INFO_DIR}/CMakeCXXCompiler.cmake
+  @ONLY
+  )
+include(${CMAKE_PLATFORM_INFO_DIR}/CMakeCXXCompiler.cmake)
+
+if(CMAKE_CXX_SIZEOF_DATA_PTR)
+  foreach(f ${CMAKE_CXX_ABI_FILES})
+    include(${f})
+  endforeach()
+  unset(CMAKE_CXX_ABI_FILES)
+endif()
+
+set(CMAKE_TRY_COMPILE_TARGET_TYPE ${__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE})
+unset(__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE)
+unset(__CMAKE_CXX_COMPILER_OUTPUT)
diff --git a/share/cmake-3.18/Modules/CMakeTestCompilerCommon.cmake b/share/cmake-3.22/Modules/CMakeTestCompilerCommon.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeTestCompilerCommon.cmake
rename to share/cmake-3.22/Modules/CMakeTestCompilerCommon.cmake
diff --git a/share/cmake-3.22/Modules/CMakeTestFortranCompiler.cmake b/share/cmake-3.22/Modules/CMakeTestFortranCompiler.cmake
new file mode 100644
index 0000000..579f83f
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeTestFortranCompiler.cmake
@@ -0,0 +1,112 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+if(CMAKE_Fortran_COMPILER_FORCED)
+  # The compiler configuration was forced by the user.
+  # Assume the user has configured all compiler information.
+  set(CMAKE_Fortran_COMPILER_WORKS TRUE)
+  return()
+endif()
+
+include(CMakeTestCompilerCommon)
+
+# Remove any cached result from an older CMake version.
+# We now store this in CMakeFortranCompiler.cmake.
+unset(CMAKE_Fortran_COMPILER_WORKS CACHE)
+
+# Try to identify the ABI and configure it into CMakeFortranCompiler.cmake
+include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerABI.cmake)
+CMAKE_DETERMINE_COMPILER_ABI(Fortran ${CMAKE_ROOT}/Modules/CMakeFortranCompilerABI.F90)
+if(CMAKE_Fortran_ABI_COMPILED)
+  # The compiler worked so skip dedicated test below.
+  set(CMAKE_Fortran_COMPILER_WORKS TRUE)
+  set(CMAKE_Fortran_COMPILER_SUPPORTS_F90 1)
+  message(STATUS "Check for working Fortran compiler: ${CMAKE_Fortran_COMPILER} - skipped")
+else()
+  cmake_determine_compiler_abi(Fortran ${CMAKE_ROOT}/Modules/CMakeFortranCompilerABI.F)
+  if(CMAKE_Fortran_ABI_COMPILED)
+    set(CMAKE_Fortran_COMPILER_WORKS TRUE)
+    message(STATUS "Check for working Fortran 77 compiler: ${CMAKE_Fortran_COMPILER} - skipped")
+  endif()
+endif()
+
+# This file is used by EnableLanguage in cmGlobalGenerator to
+# determine that the selected Fortran compiler can actually compile
+# and link the most basic of programs.   If not, a fatal error
+# is set and cmake stops processing commands and will not generate
+# any makefiles or projects.
+if(NOT CMAKE_Fortran_COMPILER_WORKS)
+  PrintTestCompilerStatus("Fortran")
+  file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompiler.f "
+        PROGRAM TESTFortran
+        PRINT *, 'Hello'
+        END
+  ")
+  # Clear result from normal variable.
+  unset(CMAKE_Fortran_COMPILER_WORKS)
+  # Puts test result in cache variable.
+  try_compile(CMAKE_Fortran_COMPILER_WORKS ${CMAKE_BINARY_DIR}
+    ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompiler.f
+    OUTPUT_VARIABLE OUTPUT)
+  # Move result from cache to normal variable.
+  set(CMAKE_Fortran_COMPILER_WORKS ${CMAKE_Fortran_COMPILER_WORKS})
+  unset(CMAKE_Fortran_COMPILER_WORKS CACHE)
+  if(NOT CMAKE_Fortran_COMPILER_WORKS)
+    PrintTestCompilerResult(CHECK_FAIL "broken")
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+      "Determining if the Fortran compiler works failed with "
+      "the following output:\n${OUTPUT}\n\n")
+    string(REPLACE "\n" "\n  " _output "${OUTPUT}")
+    message(FATAL_ERROR "The Fortran compiler\n  \"${CMAKE_Fortran_COMPILER}\"\n"
+      "is not able to compile a simple test program.\nIt fails "
+      "with the following output:\n  ${_output}\n\n"
+      "CMake will not be able to correctly generate this project.")
+  endif()
+  PrintTestCompilerResult(CHECK_PASS "works")
+  file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+    "Determining if the Fortran compiler works passed with "
+    "the following output:\n${OUTPUT}\n\n")
+endif()
+
+# Test for Fortran 90 support by using an f90-specific construct.
+if(NOT DEFINED CMAKE_Fortran_COMPILER_SUPPORTS_F90)
+  message(CHECK_START "Checking whether ${CMAKE_Fortran_COMPILER} supports Fortran 90")
+  file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompilerF90.f90 "
+    PROGRAM TESTFortran90
+    integer stop ; stop = 1 ; do while ( stop .eq. 0 ) ; end do
+    END PROGRAM TESTFortran90
+")
+  try_compile(CMAKE_Fortran_COMPILER_SUPPORTS_F90 ${CMAKE_BINARY_DIR}
+    ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompilerF90.f90
+    OUTPUT_VARIABLE OUTPUT)
+  if(CMAKE_Fortran_COMPILER_SUPPORTS_F90)
+    message(CHECK_PASS "yes")
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+      "Determining if the Fortran compiler supports Fortran 90 passed with "
+      "the following output:\n${OUTPUT}\n\n")
+    set(CMAKE_Fortran_COMPILER_SUPPORTS_F90 1)
+  else()
+    message(CHECK_FAIL "no")
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+      "Determining if the Fortran compiler supports Fortran 90 failed with "
+      "the following output:\n${OUTPUT}\n\n")
+    set(CMAKE_Fortran_COMPILER_SUPPORTS_F90 0)
+  endif()
+  unset(CMAKE_Fortran_COMPILER_SUPPORTS_F90 CACHE)
+endif()
+
+# Re-configure to save learned information.
+configure_file(
+  ${CMAKE_ROOT}/Modules/CMakeFortranCompiler.cmake.in
+  ${CMAKE_PLATFORM_INFO_DIR}/CMakeFortranCompiler.cmake
+  @ONLY
+  )
+include(${CMAKE_PLATFORM_INFO_DIR}/CMakeFortranCompiler.cmake)
+
+if(CMAKE_Fortran_SIZEOF_DATA_PTR)
+  foreach(f ${CMAKE_Fortran_ABI_FILES})
+    include(${f})
+  endforeach()
+  unset(CMAKE_Fortran_ABI_FILES)
+endif()
diff --git a/share/cmake-3.22/Modules/CMakeTestGNU.c b/share/cmake-3.22/Modules/CMakeTestGNU.c
new file mode 100644
index 0000000..7dcafde
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeTestGNU.c
@@ -0,0 +1,10 @@
+#if defined(__GNUC__) &&                                                      \
+  !(defined(__INTEL_COMPILER) || defined(__INTEL_LLVM_COMPILER))
+void THIS_IS_GNU();
+#endif
+#ifdef __MINGW32__
+void THIS_IS_MINGW();
+#endif
+#ifdef __CYGWIN__
+void THIS_IS_CYGWIN();
+#endif
diff --git a/share/cmake-3.22/Modules/CMakeTestHIPCompiler.cmake b/share/cmake-3.22/Modules/CMakeTestHIPCompiler.cmake
new file mode 100644
index 0000000..ecbfa7f
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeTestHIPCompiler.cmake
@@ -0,0 +1,101 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+if(CMAKE_HIP_COMPILER_FORCED)
+  # The compiler configuration was forced by the user.
+  # Assume the user has configured all compiler information.
+  set(CMAKE_HIP_COMPILER_WORKS TRUE)
+  return()
+endif()
+
+set(__CMAKE_HIP_FLAGS "${CMAKE_HIP_FLAGS}")
+string(APPEND CMAKE_HIP_FLAGS " --cuda-host-only")
+
+include(CMakeTestCompilerCommon)
+
+# work around enforced code signing and / or missing executable target type
+set(__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE ${CMAKE_TRY_COMPILE_TARGET_TYPE})
+if(_CMAKE_FEATURE_DETECTION_TARGET_TYPE)
+  set(CMAKE_TRY_COMPILE_TARGET_TYPE ${_CMAKE_FEATURE_DETECTION_TARGET_TYPE})
+endif()
+
+# Remove any cached result from an older CMake version.
+# We now store this in CMakeHIPCompiler.cmake.
+unset(CMAKE_HIP_COMPILER_WORKS CACHE)
+
+# Try to identify the ABI and configure it into CMakeHIPCompiler.cmake
+include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerABI.cmake)
+CMAKE_DETERMINE_COMPILER_ABI(HIP ${CMAKE_ROOT}/Modules/CMakeHIPCompilerABI.hip)
+if(CMAKE_HIP_ABI_COMPILED)
+  # The compiler worked so skip dedicated test below.
+  set(CMAKE_HIP_COMPILER_WORKS TRUE)
+  message(STATUS "Check for working HIP compiler: ${CMAKE_HIP_COMPILER} - skipped")
+endif()
+
+# This file is used by EnableLanguage in cmGlobalGenerator to
+# determine that the selected C++ compiler can actually compile
+# and link the most basic of programs.   If not, a fatal error
+# is set and cmake stops processing commands and will not generate
+# any makefiles or projects.
+if(NOT CMAKE_HIP_COMPILER_WORKS)
+  PrintTestCompilerStatus("HIP")
+  __TestCompiler_setTryCompileTargetType()
+  file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testHIPCompiler.hip
+    "#ifndef __HIP__\n"
+    "# error \"The CMAKE_HIP_COMPILER is set to a C/CXX compiler\"\n"
+    "#endif\n"
+    "int main(){return 0;}\n")
+  # Clear result from normal variable.
+  unset(CMAKE_HIP_COMPILER_WORKS)
+  # Puts test result in cache variable.
+  try_compile(CMAKE_HIP_COMPILER_WORKS ${CMAKE_BINARY_DIR}
+    ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testHIPCompiler.hip
+    OUTPUT_VARIABLE __CMAKE_HIP_COMPILER_OUTPUT)
+  # Move result from cache to normal variable.
+  set(CMAKE_HIP_COMPILER_WORKS ${CMAKE_HIP_COMPILER_WORKS})
+  unset(CMAKE_HIP_COMPILER_WORKS CACHE)
+  __TestCompiler_restoreTryCompileTargetType()
+  if(NOT CMAKE_HIP_COMPILER_WORKS)
+    PrintTestCompilerResult(CHECK_FAIL "broken")
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+      "Determining if the HIP compiler works failed with "
+      "the following output:\n${__CMAKE_HIP_COMPILER_OUTPUT}\n\n")
+    string(REPLACE "\n" "\n  " _output "${__CMAKE_HIP_COMPILER_OUTPUT}")
+    message(FATAL_ERROR "The HIP compiler\n  \"${CMAKE_HIP_COMPILER}\"\n"
+      "is not able to compile a simple test program.\nIt fails "
+      "with the following output:\n  ${_output}\n\n"
+      "CMake will not be able to correctly generate this project.")
+  endif()
+  PrintTestCompilerResult(CHECK_PASS "works")
+  file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+    "Determining if the HIP compiler works passed with "
+    "the following output:\n${__CMAKE_HIP_COMPILER_OUTPUT}\n\n")
+endif()
+
+set(CMAKE_HIP_FLAGS "${__CMAKE_HIP_FLAGS}")
+unset(__CMAKE_HIP_FLAGS)
+
+
+# Try to identify the compiler features
+include(${CMAKE_ROOT}/Modules/CMakeDetermineCompileFeatures.cmake)
+CMAKE_DETERMINE_COMPILE_FEATURES(HIP)
+
+# Re-configure to save learned information.
+configure_file(
+  ${CMAKE_ROOT}/Modules/CMakeHIPCompiler.cmake.in
+  ${CMAKE_PLATFORM_INFO_DIR}/CMakeHIPCompiler.cmake
+  @ONLY
+  )
+include(${CMAKE_PLATFORM_INFO_DIR}/CMakeHIPCompiler.cmake)
+
+if(CMAKE_HIP_SIZEOF_DATA_PTR)
+  foreach(f ${CMAKE_HIP_ABI_FILES})
+    include(${f})
+  endforeach()
+  unset(CMAKE_HIP_ABI_FILES)
+endif()
+
+set(CMAKE_TRY_COMPILE_TARGET_TYPE ${__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE})
+unset(__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE)
+unset(__CMAKE_HIP_COMPILER_OUTPUT)
diff --git a/share/cmake-3.22/Modules/CMakeTestISPCCompiler.cmake b/share/cmake-3.22/Modules/CMakeTestISPCCompiler.cmake
new file mode 100644
index 0000000..6b16393
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeTestISPCCompiler.cmake
@@ -0,0 +1,43 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+
+if(CMAKE_ISPC_COMPILER_FORCED)
+  # The compiler configuration was forced by the user.
+  # Assume the user has configured all compiler information.
+  set(CMAKE_ISPC_COMPILER_WORKS TRUE)
+  return()
+endif()
+
+include(CMakeTestCompilerCommon)
+
+# Make sure we try to compile as a STATIC_LIBRARY
+set(__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE ${CMAKE_TRY_COMPILE_TARGET_TYPE})
+set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
+
+# # Try to identify the ABI and configure it into CMakeISPCCompiler.cmake
+include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerABI.cmake)
+CMAKE_DETERMINE_COMPILER_ABI(ISPC ${CMAKE_ROOT}/Modules/CMakeISPCCompilerABI.ispc)
+if(CMAKE_ISPC_ABI_COMPILED)
+#   # The compiler worked so skip dedicated test below.
+  set(CMAKE_ISPC_COMPILER_WORKS TRUE)
+  message(STATUS "Check for working ISPC compiler: ${CMAKE_ISPC_COMPILER} - skipped")
+endif()
+
+# Re-configure to save learned information.
+configure_file(
+  ${CMAKE_ROOT}/Modules/CMakeISPCCompiler.cmake.in
+  ${CMAKE_PLATFORM_INFO_DIR}/CMakeISPCCompiler.cmake
+  @ONLY
+  )
+include(${CMAKE_PLATFORM_INFO_DIR}/CMakeISPCCompiler.cmake)
+
+if(CMAKE_ISPC_SIZEOF_DATA_PTR)
+  foreach(f ${CMAKE_ISPC_ABI_FILES})
+    include(${f})
+  endforeach()
+  unset(CMAKE_ISPC_ABI_FILES)
+endif()
+
+set(CMAKE_TRY_COMPILE_TARGET_TYPE ${__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE})
diff --git a/share/cmake-3.18/Modules/CMakeTestJavaCompiler.cmake b/share/cmake-3.22/Modules/CMakeTestJavaCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeTestJavaCompiler.cmake
rename to share/cmake-3.22/Modules/CMakeTestJavaCompiler.cmake
diff --git a/share/cmake-3.22/Modules/CMakeTestOBJCCompiler.cmake b/share/cmake-3.22/Modules/CMakeTestOBJCCompiler.cmake
new file mode 100644
index 0000000..20d1f8b
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeTestOBJCCompiler.cmake
@@ -0,0 +1,98 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+if(CMAKE_OBJC_COMPILER_FORCED)
+  # The compiler configuration was forced by the user.
+  # Assume the user has configured all compiler information.
+  set(CMAKE_OBJC_COMPILER_WORKS TRUE)
+  return()
+endif()
+
+include(CMakeTestCompilerCommon)
+
+# work around enforced code signing and / or missing executable target type
+set(__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE ${CMAKE_TRY_COMPILE_TARGET_TYPE})
+if(_CMAKE_FEATURE_DETECTION_TARGET_TYPE)
+  set(CMAKE_TRY_COMPILE_TARGET_TYPE ${_CMAKE_FEATURE_DETECTION_TARGET_TYPE})
+endif()
+
+# Remove any cached result from an older CMake version.
+# We now store this in CMakeCCompiler.cmake.
+unset(CMAKE_OBJC_COMPILER_WORKS CACHE)
+
+# Try to identify the ABI and configure it into CMakeOBJCCompiler.cmake
+include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerABI.cmake)
+CMAKE_DETERMINE_COMPILER_ABI(OBJC ${CMAKE_ROOT}/Modules/CMakeOBJCCompilerABI.m)
+if(CMAKE_OBJC_ABI_COMPILED)
+  # The compiler worked so skip dedicated test below.
+  set(CMAKE_OBJC_COMPILER_WORKS TRUE)
+  message(STATUS "Check for working OBJC compiler: ${CMAKE_OBJC_COMPILER} - skipped")
+endif()
+
+# This file is used by EnableLanguage in cmGlobalGenerator to
+# determine that that selected Objective-C compiler can actually compile
+# and link the most basic of programs.   If not, a fatal error
+# is set and cmake stops processing commands and will not generate
+# any makefiles or projects.
+if(NOT CMAKE_OBJC_COMPILER_WORKS)
+  PrintTestCompilerStatus("OBJC")
+  __TestCompiler_setTryCompileTargetType()
+  file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testOBJCCompiler.m
+    "#ifdef __cplusplus\n"
+    "# error \"The CMAKE_OBJC_COMPILER is set to a C++ compiler\"\n"
+    "#endif\n"
+    "#ifndef __OBJC__\n"
+    "# error \"The CMAKE_OBJC_COMPILER is not an Objective-C compiler\"\n"
+    "#endif\n"
+    "int main(int argc, char* argv[])\n"
+    "{ (void)argv; return argc-1;}\n")
+  # Clear result from normal variable.
+  unset(CMAKE_OBJC_COMPILER_WORKS)
+  # Puts test result in cache variable.
+  try_compile(CMAKE_OBJC_COMPILER_WORKS ${CMAKE_BINARY_DIR}
+    ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testOBJCCompiler.m
+    OUTPUT_VARIABLE __CMAKE_OBJC_COMPILER_OUTPUT)
+  # Move result from cache to normal variable.
+  set(CMAKE_OBJC_COMPILER_WORKS ${CMAKE_OBJC_COMPILER_WORKS})
+  unset(CMAKE_OBJC_COMPILER_WORKS CACHE)
+  __TestCompiler_restoreTryCompileTargetType()
+  if(NOT CMAKE_OBJC_COMPILER_WORKS)
+    PrintTestCompilerResult(CHECK_FAIL "broken")
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+      "Determining if the Objective-C compiler works failed with "
+      "the following output:\n${__CMAKE_OBJC_COMPILER_OUTPUT}\n\n")
+    string(REPLACE "\n" "\n  " _output "${__CMAKE_OBJC_COMPILER_OUTPUT}")
+    message(FATAL_ERROR "The Objective-C compiler\n  \"${CMAKE_OBJC_COMPILER}\"\n"
+      "is not able to compile a simple test program.\nIt fails "
+      "with the following output:\n  ${_output}\n\n"
+      "CMake will not be able to correctly generate this project.")
+  endif()
+  PrintTestCompilerResult(CHECK_PASS "works")
+  file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+    "Determining if the Objective-C compiler works passed with "
+    "the following output:\n${__CMAKE_OBJC_COMPILER_OUTPUT}\n\n")
+endif()
+
+# Try to identify the compiler features
+include(${CMAKE_ROOT}/Modules/CMakeDetermineCompileFeatures.cmake)
+CMAKE_DETERMINE_COMPILE_FEATURES(OBJC)
+
+# Re-configure to save learned information.
+configure_file(
+  ${CMAKE_ROOT}/Modules/CMakeOBJCCompiler.cmake.in
+  ${CMAKE_PLATFORM_INFO_DIR}/CMakeOBJCCompiler.cmake
+  @ONLY
+  )
+include(${CMAKE_PLATFORM_INFO_DIR}/CMakeOBJCCompiler.cmake)
+
+if(CMAKE_OBJC_SIZEOF_DATA_PTR)
+  foreach(f ${CMAKE_OBJC_ABI_FILES})
+    include(${f})
+  endforeach()
+  unset(CMAKE_OBJC_ABI_FILES)
+endif()
+
+set(CMAKE_TRY_COMPILE_TARGET_TYPE ${__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE})
+unset(__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE)
+unset(__CMAKE_OBJC_COMPILER_OUTPUT)
diff --git a/share/cmake-3.22/Modules/CMakeTestOBJCXXCompiler.cmake b/share/cmake-3.22/Modules/CMakeTestOBJCXXCompiler.cmake
new file mode 100644
index 0000000..4f7185f
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeTestOBJCXXCompiler.cmake
@@ -0,0 +1,97 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+if(CMAKE_OBJCXX_COMPILER_FORCED)
+  # The compiler configuration was forced by the user.
+  # Assume the user has configured all compiler information.
+  set(CMAKE_OBJCXX_COMPILER_WORKS TRUE)
+  return()
+endif()
+
+include(CMakeTestCompilerCommon)
+
+# work around enforced code signing and / or missing executable target type
+set(__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE ${CMAKE_TRY_COMPILE_TARGET_TYPE})
+if(_CMAKE_FEATURE_DETECTION_TARGET_TYPE)
+  set(CMAKE_TRY_COMPILE_TARGET_TYPE ${_CMAKE_FEATURE_DETECTION_TARGET_TYPE})
+endif()
+
+# Remove any cached result from an older CMake version.
+# We now store this in CMakeOBJCXXCompiler.cmake.
+unset(CMAKE_OBJCXX_COMPILER_WORKS CACHE)
+
+# Try to identify the ABI and configure it into CMakeOBJCXXCompiler.cmake
+include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerABI.cmake)
+CMAKE_DETERMINE_COMPILER_ABI(OBJCXX ${CMAKE_ROOT}/Modules/CMakeOBJCXXCompilerABI.mm)
+if(CMAKE_OBJCXX_ABI_COMPILED)
+  # The compiler worked so skip dedicated test below.
+  set(CMAKE_OBJCXX_COMPILER_WORKS TRUE)
+  message(STATUS "Check for working OBJCXX compiler: ${CMAKE_OBJCXX_COMPILER} - skipped")
+endif()
+
+# This file is used by EnableLanguage in cmGlobalGenerator to
+# determine that the selected Objective-C++ compiler can actually compile
+# and link the most basic of programs.   If not, a fatal error
+# is set and cmake stops processing commands and will not generate
+# any makefiles or projects.
+if(NOT CMAKE_OBJCXX_COMPILER_WORKS)
+  PrintTestCompilerStatus("OBJCXX")
+  __TestCompiler_setTryCompileTargetType()
+  file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testOBJCXXCompiler.mm
+    "#ifndef __cplusplus\n"
+    "# error \"The CMAKE_OBJCXX_COMPILER is set to a C compiler\"\n"
+    "#endif\n"
+    "#ifndef __OBJC__\n"
+    "# error \"The CMAKE_OBJCXX_COMPILER is not an Objective-C++ compiler\"\n"
+    "#endif\n"
+    "int main(){return 0;}\n")
+  # Clear result from normal variable.
+  unset(CMAKE_OBJCXX_COMPILER_WORKS)
+  # Puts test result in cache variable.
+  try_compile(CMAKE_OBJCXX_COMPILER_WORKS ${CMAKE_BINARY_DIR}
+    ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testOBJCXXCompiler.mm
+    OUTPUT_VARIABLE __CMAKE_OBJCXX_COMPILER_OUTPUT)
+  # Move result from cache to normal variable.
+  set(CMAKE_OBJCXX_COMPILER_WORKS ${CMAKE_OBJCXX_COMPILER_WORKS})
+  unset(CMAKE_OBJCXX_COMPILER_WORKS CACHE)
+  __TestCompiler_restoreTryCompileTargetType()
+  if(NOT CMAKE_OBJCXX_COMPILER_WORKS)
+    PrintTestCompilerResult(CHECK_FAIL "broken")
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+      "Determining if the Objective-C++ compiler works failed with "
+      "the following output:\n${__CMAKE_OBJCXX_COMPILER_OUTPUT}\n\n")
+    string(REPLACE "\n" "\n  " _output "${__CMAKE_OBJCXX_COMPILER_OUTPUT}")
+    message(FATAL_ERROR "The Objective-C++ compiler\n  \"${CMAKE_OBJCXX_COMPILER}\"\n"
+      "is not able to compile a simple test program.\nIt fails "
+      "with the following output:\n  ${_output}\n\n"
+      "CMake will not be able to correctly generate this project.")
+  endif()
+  PrintTestCompilerResult(CHECK_PASS "works")
+  file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+    "Determining if the Objective-C++ compiler works passed with "
+    "the following output:\n${__CMAKE_OBJCXX_COMPILER_OUTPUT}\n\n")
+endif()
+
+# Try to identify the compiler features
+include(${CMAKE_ROOT}/Modules/CMakeDetermineCompileFeatures.cmake)
+CMAKE_DETERMINE_COMPILE_FEATURES(OBJCXX)
+
+# Re-configure to save learned information.
+configure_file(
+  ${CMAKE_ROOT}/Modules/CMakeOBJCXXCompiler.cmake.in
+  ${CMAKE_PLATFORM_INFO_DIR}/CMakeOBJCXXCompiler.cmake
+  @ONLY
+  )
+include(${CMAKE_PLATFORM_INFO_DIR}/CMakeOBJCXXCompiler.cmake)
+
+if(CMAKE_OBJCXX_SIZEOF_DATA_PTR)
+  foreach(f ${CMAKE_OBJCXX_ABI_FILES})
+    include(${f})
+  endforeach()
+  unset(CMAKE_OBJCXX_ABI_FILES)
+endif()
+
+set(CMAKE_TRY_COMPILE_TARGET_TYPE ${__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE})
+unset(__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE)
+unset(__CMAKE_OBJCXX_COMPILER_OUTPUT)
diff --git a/share/cmake-3.18/Modules/CMakeTestRCCompiler.cmake b/share/cmake-3.22/Modules/CMakeTestRCCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeTestRCCompiler.cmake
rename to share/cmake-3.22/Modules/CMakeTestRCCompiler.cmake
diff --git a/share/cmake-3.22/Modules/CMakeTestSwiftCompiler.cmake b/share/cmake-3.22/Modules/CMakeTestSwiftCompiler.cmake
new file mode 100644
index 0000000..2f2546f
--- /dev/null
+++ b/share/cmake-3.22/Modules/CMakeTestSwiftCompiler.cmake
@@ -0,0 +1,67 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+if(CMAKE_Swift_COMPILER_FORCED)
+  # The compiler configuration was forced by the user.
+  # Assume the user has configured all compiler information.
+  set(CMAKE_Swift_COMPILER_WORKS TRUE)
+  return()
+endif()
+
+include(CMakeTestCompilerCommon)
+
+# Remove any cached result from an older CMake version.
+# We now store this in CMakeSwiftCompiler.cmake.
+unset(CMAKE_Swift_COMPILER_WORKS CACHE)
+
+# This file is used by EnableLanguage in cmGlobalGenerator to
+# determine that the selected C++ compiler can actually compile
+# and link the most basic of programs.   If not, a fatal error
+# is set and cmake stops processing commands and will not generate
+# any makefiles or projects.
+if(NOT CMAKE_Swift_COMPILER_WORKS)
+  PrintTestCompilerStatus("Swift")
+  file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/main.swift
+    "print(\"CMake\")\n")
+  # Clear result from normal variable.
+  unset(CMAKE_Swift_COMPILER_WORKS)
+  # Puts test result in cache variable.
+  try_compile(CMAKE_Swift_COMPILER_WORKS ${CMAKE_BINARY_DIR}
+    ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/main.swift
+    OUTPUT_VARIABLE __CMAKE_Swift_COMPILER_OUTPUT)
+  # Move result from cache to normal variable.
+  set(CMAKE_Swift_COMPILER_WORKS ${CMAKE_Swift_COMPILER_WORKS})
+  unset(CMAKE_Swift_COMPILER_WORKS CACHE)
+  set(Swift_TEST_WAS_RUN 1)
+endif()
+
+if(NOT CMAKE_Swift_COMPILER_WORKS)
+  PrintTestCompilerResult(CHECK_FAIL "broken")
+  file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+    "Determining if the Swift compiler works failed with "
+    "the following output:\n${__CMAKE_Swift_COMPILER_OUTPUT}\n\n")
+  string(REPLACE "\n" "\n  " _output "${__CMAKE_Swift_COMPILER_OUTPUT}")
+  message(FATAL_ERROR "The Swift compiler\n  \"${CMAKE_Swift_COMPILER}\"\n"
+    "is not able to compile a simple test program.\nIt fails "
+    "with the following output:\n  ${_output}\n\n"
+    "CMake will not be able to correctly generate this project.")
+else()
+  if(Swift_TEST_WAS_RUN)
+    PrintTestCompilerResult(CHECK_PASS "works")
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+      "Determining if the Swift compiler works passed with "
+      "the following output:\n${__CMAKE_Swift_COMPILER_OUTPUT}\n\n")
+  endif()
+
+  # Unlike C and CXX we do not yet detect any information about the Swift ABI.
+  # However, one of the steps done for C and CXX as part of that detection is
+  # to initialize the implicit include directories.  That is relevant here.
+  set(CMAKE_Swift_IMPLICIT_INCLUDE_DIRECTORIES "${_CMAKE_Swift_IMPLICIT_INCLUDE_DIRECTORIES_INIT}")
+
+  # Re-configure to save learned information.
+  configure_file(${CMAKE_ROOT}/Modules/CMakeSwiftCompiler.cmake.in
+                 ${CMAKE_PLATFORM_INFO_DIR}/CMakeSwiftCompiler.cmake @ONLY)
+  include(${CMAKE_PLATFORM_INFO_DIR}/CMakeSwiftCompiler.cmake)
+endif()
+
+unset(__CMAKE_Swift_COMPILER_OUTPUT)
diff --git a/share/cmake-3.18/Modules/CMakeUnixFindMake.cmake b/share/cmake-3.22/Modules/CMakeUnixFindMake.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeUnixFindMake.cmake
rename to share/cmake-3.22/Modules/CMakeUnixFindMake.cmake
diff --git a/share/cmake-3.18/Modules/CMakeVerifyManifest.cmake b/share/cmake-3.22/Modules/CMakeVerifyManifest.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CMakeVerifyManifest.cmake
rename to share/cmake-3.22/Modules/CMakeVerifyManifest.cmake
diff --git a/share/cmake-3.22/Modules/CPack.cmake b/share/cmake-3.22/Modules/CPack.cmake
new file mode 100644
index 0000000..373a707
--- /dev/null
+++ b/share/cmake-3.22/Modules/CPack.cmake
@@ -0,0 +1,884 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CPack
+-----
+
+Configure generators for binary installers and source packages.
+
+Introduction
+^^^^^^^^^^^^
+
+The CPack module generates the configuration files ``CPackConfig.cmake``
+and ``CPackSourceConfig.cmake``. They are intended for use in a subsequent
+run of  the :manual:`cpack <cpack(1)>` program where they steer the generation
+of installers or/and source packages.
+
+Depending on the CMake generator, the CPack module may also add two new build
+targets, ``package`` and ``package_source``. See the `packaging targets`_
+section below for details.
+
+The generated binary installers will contain all files that have been installed
+via CMake's :command:`install` command (and the deprecated commands
+:command:`install_files`, :command:`install_programs`, and
+:command:`install_targets`). Note that the ``DESTINATION`` option of the
+:command:`install` command must be a relative path; otherwise installed files
+are ignored by CPack.
+
+Certain kinds of binary installers can be configured such that users can select
+individual application components to install.  See the :module:`CPackComponent`
+module for further details.
+
+Source packages (configured through ``CPackSourceConfig.cmake`` and generated
+by the :cpack_gen:`CPack Archive Generator`) will contain all source files in
+the project directory except those specified in
+:variable:`CPACK_SOURCE_IGNORE_FILES`.
+
+CPack Generators
+^^^^^^^^^^^^^^^^
+
+The :variable:`CPACK_GENERATOR` variable has different meanings in different
+contexts.  In a ``CMakeLists.txt`` file, :variable:`CPACK_GENERATOR` is a
+*list of generators*: and when :manual:`cpack <cpack(1)>` is run with no other
+arguments, it will iterate over that list and produce one package for each
+generator.  In a :variable:`CPACK_PROJECT_CONFIG_FILE`,
+:variable:`CPACK_GENERATOR` is a *string naming a single generator*.  If you
+need per-cpack-generator logic to control *other* cpack settings, then you
+need a :variable:`CPACK_PROJECT_CONFIG_FILE`.
+If set, the :variable:`CPACK_PROJECT_CONFIG_FILE` is included automatically
+on a per-generator basis.  It only need contain overrides.
+
+Here's how it works:
+
+* :manual:`cpack <cpack(1)>` runs
+* it includes ``CPackConfig.cmake``
+* it iterates over the generators given by the ``-G`` command line option,
+  or if no such option was specified, over the list of generators given by
+  the :variable:`CPACK_GENERATOR` variable set in the ``CPackConfig.cmake``
+  input file.
+* foreach generator, it then
+
+  - sets :variable:`CPACK_GENERATOR` to the one currently being iterated
+  - includes the :variable:`CPACK_PROJECT_CONFIG_FILE`
+  - produces the package for that generator
+
+This is the key: For each generator listed in :variable:`CPACK_GENERATOR` in
+``CPackConfig.cmake``, cpack will *reset* :variable:`CPACK_GENERATOR`
+internally to *the one currently being used* and then include the
+:variable:`CPACK_PROJECT_CONFIG_FILE`.
+
+For a list of available generators, see :manual:`cpack-generators(7)`.
+
+.. _`packaging targets`:
+
+Targets package and package_source
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+If CMake is run with the Makefile, Ninja, or Xcode generator, then
+``include(CPack)`` generates a target ``package``. This makes it possible
+to build a binary installer from CMake, Make, or Ninja: Instead of ``cpack``,
+one may call ``cmake --build . --target package`` or ``make package`` or
+``ninja package``. The VS generator creates an uppercase target ``PACKAGE``.
+
+If CMake is run with the Makefile or Ninja generator, then ``include(CPack)``
+also generates a target ``package_source``. To build a source package,
+instead of ``cpack -G TGZ --config CPackSourceConfig.cmake`` one may call
+``cmake --build . --target package_source``, ``make package_source``,
+or ``ninja package_source``.
+
+
+Variables common to all CPack Generators
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Before including this CPack module in your ``CMakeLists.txt`` file, there
+are a variety of variables that can be set to customize the resulting
+installers.  The most commonly-used variables are:
+
+.. variable:: CPACK_PACKAGE_NAME
+
+  The name of the package (or application).  If not specified, it defaults to
+  the project name.
+
+.. variable:: CPACK_PACKAGE_VENDOR
+
+  The name of the package vendor. (e.g., "Kitware").  The default is "Humanity".
+
+.. variable:: CPACK_PACKAGE_DIRECTORY
+
+  The directory in which CPack is doing its packaging.  If it is not set
+  then this will default (internally) to the build dir.  This variable may
+  be defined in a CPack config file or from the :manual:`cpack <cpack(1)>`
+  command line option ``-B``.  If set, the command line option overrides the
+  value found in the config file.
+
+.. variable:: CPACK_PACKAGE_VERSION_MAJOR
+
+  Package major version.  This variable will always be set, but its default
+  value depends on whether or not version details were given to the
+  :command:`project` command in the top level CMakeLists.txt file.  If version
+  details were given, the default value will be
+  :variable:`CMAKE_PROJECT_VERSION_MAJOR`.  If no version details were given,
+  a default version of 0.1.1 will be assumed, leading to
+  ``CPACK_PACKAGE_VERSION_MAJOR`` having a default value of 0.
+
+.. variable:: CPACK_PACKAGE_VERSION_MINOR
+
+  Package minor version.  The default value is determined based on whether or
+  not version details were given to the :command:`project` command in the top
+  level CMakeLists.txt file.  If version details were given, the default
+  value will be :variable:`CMAKE_PROJECT_VERSION_MINOR`, but if no minor
+  version component was specified then ``CPACK_PACKAGE_VERSION_MINOR`` will be
+  left unset.  If no project version was given at all, a default version of
+  0.1.1 will be assumed, leading to ``CPACK_PACKAGE_VERSION_MINOR`` having a
+  default value of 1.
+
+.. variable:: CPACK_PACKAGE_VERSION_PATCH
+
+  Package patch version.  The default value is determined based on whether or
+  not version details were given to the :command:`project` command in the top
+  level CMakeLists.txt file.  If version details were given, the default
+  value will be :variable:`CMAKE_PROJECT_VERSION_PATCH`, but if no patch
+  version component was specified then ``CPACK_PACKAGE_VERSION_PATCH`` will be
+  left unset.  If no project version was given at all, a default version of
+  0.1.1 will be assumed, leading to ``CPACK_PACKAGE_VERSION_PATCH`` having a
+  default value of 1.
+
+.. variable:: CPACK_PACKAGE_DESCRIPTION
+
+  A description of the project, used in places such as the introduction
+  screen of CPack-generated Windows installers.  If not set, the value of
+  this variable is populated from the file named by
+  :variable:`CPACK_PACKAGE_DESCRIPTION_FILE`.
+
+.. variable:: CPACK_PACKAGE_DESCRIPTION_FILE
+
+  A text file used to describe the project when
+  :variable:`CPACK_PACKAGE_DESCRIPTION` is not explicitly set.  The default
+  value for ``CPACK_PACKAGE_DESCRIPTION_FILE`` points to a built-in template
+  file ``Templates/CPack.GenericDescription.txt``.
+
+.. variable:: CPACK_PACKAGE_DESCRIPTION_SUMMARY
+
+  Short description of the project (only a few words).  If the
+  :variable:`CMAKE_PROJECT_DESCRIPTION` variable is set, it is used as the
+  default value, otherwise the default will be a string generated by CMake
+  based on :variable:`CMAKE_PROJECT_NAME`.
+
+.. variable:: CPACK_PACKAGE_HOMEPAGE_URL
+
+  Project homepage URL.  The default value is taken from the
+  :variable:`CMAKE_PROJECT_HOMEPAGE_URL` variable, which is set by the top
+  level :command:`project` command, or else the default will be empty if no
+  URL was provided to :command:`project`.
+
+.. variable:: CPACK_PACKAGE_FILE_NAME
+
+  The name of the package file to generate, not including the
+  extension.  For example, ``cmake-2.6.1-Linux-i686``.  The default value
+  is::
+
+    ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_SYSTEM_NAME}
+
+.. variable:: CPACK_PACKAGE_INSTALL_DIRECTORY
+
+  Installation directory on the target system. This may be used by some
+  CPack generators like NSIS to create an installation directory e.g.,
+  "CMake 2.5" below the installation prefix.  All installed elements will be
+  put inside this directory.
+
+.. variable:: CPACK_PACKAGE_ICON
+
+  A branding image that will be displayed inside the installer (used by GUI
+  installers).
+
+.. variable:: CPACK_PACKAGE_CHECKSUM
+
+  .. versionadded:: 3.7
+
+  An algorithm that will be used to generate an additional file with the
+  checksum of the package.  The output file name will be::
+
+    ${CPACK_PACKAGE_FILE_NAME}.${CPACK_PACKAGE_CHECKSUM}
+
+  Supported algorithms are those listed by the
+  :ref:`string(\<HASH\>) <Supported Hash Algorithms>` command.
+
+.. variable:: CPACK_PROJECT_CONFIG_FILE
+
+  CPack-time project CPack configuration file.  This file is included at cpack
+  time, once per generator after CPack has set :variable:`CPACK_GENERATOR`
+  to the actual generator being used.  It allows per-generator setting of
+  ``CPACK_*`` variables at cpack time.
+
+.. variable:: CPACK_RESOURCE_FILE_LICENSE
+
+  License to be embedded in the installer.  It will typically be displayed
+  to the user by the produced installer (often with an explicit "Accept"
+  button, for graphical installers) prior to installation.  This license
+  file is NOT added to the installed files but is used by some CPack generators
+  like NSIS.  If you want to install a license file (may be the same as this
+  one) along with your project, you must add an appropriate CMake
+  :command:`install` command in your ``CMakeLists.txt``.
+
+.. variable:: CPACK_RESOURCE_FILE_README
+
+  ReadMe file to be embedded in the installer.  It typically describes in
+  some detail the purpose of the project during the installation.  Not all
+  CPack generators use this file.
+
+.. variable:: CPACK_RESOURCE_FILE_WELCOME
+
+  Welcome file to be embedded in the installer.  It welcomes users to this
+  installer.  Typically used in the graphical installers on Windows and Mac
+  OS X.
+
+.. variable:: CPACK_MONOLITHIC_INSTALL
+
+  Disables the component-based installation mechanism.  When set, the
+  component specification is ignored and all installed items are put in a
+  single "MONOLITHIC" package.  Some CPack generators do monolithic
+  packaging by default and may be asked to do component packaging by
+  setting ``CPACK_<GENNAME>_COMPONENT_INSTALL`` to ``TRUE``.
+
+.. variable:: CPACK_GENERATOR
+
+  List of CPack generators to use.  If not specified, CPack will create a
+  set of options following the naming pattern
+  :variable:`CPACK_BINARY_<GENNAME>` (e.g. ``CPACK_BINARY_NSIS``) allowing
+  the user to enable/disable individual generators.  If the ``-G`` option is
+  given on the :manual:`cpack <cpack(1)>` command line, it will override this
+  variable and any ``CPACK_BINARY_<GENNAME>`` options.
+
+.. variable:: CPACK_OUTPUT_CONFIG_FILE
+
+  The name of the CPack binary configuration file.  This file is the CPack
+  configuration generated by the CPack module for binary installers.
+  Defaults to ``CPackConfig.cmake``.
+
+.. variable:: CPACK_PACKAGE_EXECUTABLES
+
+  Lists each of the executables and associated text label to be used to
+  create Start Menu shortcuts.  For example, setting this to the list
+  ``ccmake;CMake`` will create a shortcut named "CMake" that will execute the
+  installed executable ``ccmake``.  Not all CPack generators use it (at least
+  NSIS, WIX and OSXX11 do).
+
+.. variable:: CPACK_STRIP_FILES
+
+  List of files to be stripped.  Starting with CMake 2.6.0,
+  ``CPACK_STRIP_FILES`` will be a boolean variable which enables
+  stripping of all files (a list of files evaluates to ``TRUE`` in CMake,
+  so this change is compatible).
+
+.. variable:: CPACK_VERBATIM_VARIABLES
+
+  .. versionadded:: 3.4
+
+  If set to ``TRUE``, values of variables prefixed with ``CPACK_`` will be
+  escaped before being written to the configuration files, so that the cpack
+  program receives them exactly as they were specified.  If not, characters
+  like quotes and backslashes can cause parsing errors or alter the value
+  received by the cpack program.  Defaults to ``FALSE`` for backwards
+  compatibility.
+
+.. variable:: CPACK_THREADS
+
+  .. versionadded:: 3.20
+
+  Number of threads to use when performing parallelized operations, such
+  as compressing the installer package.
+
+  Some compression methods used by CPack generators such as Debian or Archive
+  may take advantage of multiple CPU cores to speed up compression.
+  ``CPACK_THREADS`` can be set to specify how many threads will be
+  used for compression.
+
+  A positive integer can be used to specify an exact desired thread count.
+
+  When given a negative integer CPack will use the absolute value
+  as the upper limit but may choose a lower value based on
+  the available hardware concurrency.
+
+  Given 0 CPack will try to use all available CPU cores.
+
+  By default ``CPACK_THREADS`` is set to ``1``.
+
+  Currently only ``xz`` compression *may* take advantage of multiple cores.
+  Other compression methods ignore this value and use only one thread.
+
+  .. versionadded:: 3.21
+
+    Official CMake binaries available on ``cmake.org`` now ship
+    with a ``liblzma`` that supports parallel compression.
+    Older versions did not.
+
+Variables for Source Package Generators
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The following CPack variables are specific to source packages, and
+will not affect binary packages:
+
+.. variable:: CPACK_SOURCE_PACKAGE_FILE_NAME
+
+  The name of the source package.  For example ``cmake-2.6.1``.
+
+.. variable:: CPACK_SOURCE_STRIP_FILES
+
+  List of files in the source tree that will be stripped.  Starting with
+  CMake 2.6.0, ``CPACK_SOURCE_STRIP_FILES`` will be a boolean
+  variable which enables stripping of all files (a list of files evaluates
+  to ``TRUE`` in CMake, so this change is compatible).
+
+.. variable:: CPACK_SOURCE_GENERATOR
+
+  List of generators used for the source packages.  As with
+  :variable:`CPACK_GENERATOR`, if this is not specified then CPack will
+  create a set of options (e.g. ``CPACK_SOURCE_ZIP``) allowing
+  users to select which packages will be generated.
+
+.. variable:: CPACK_SOURCE_OUTPUT_CONFIG_FILE
+
+  The name of the CPack source configuration file.  This file is the CPack
+  configuration generated by the CPack module for source installers.
+  Defaults to ``CPackSourceConfig.cmake``.
+
+.. variable:: CPACK_SOURCE_IGNORE_FILES
+
+  Pattern of files in the source tree that won't be packaged when building
+  a source package.  This is a list of regular expression patterns (that
+  must be properly escaped), e.g.,
+  ``/CVS/;/\\.svn/;\\.swp$;\\.#;/#;.*~;cscope.*``
+
+Variables for Advanced Use
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The following variables are for advanced uses of CPack:
+
+.. variable:: CPACK_CMAKE_GENERATOR
+
+  What CMake generator should be used if the project is a CMake
+  project.  Defaults to the value of :variable:`CMAKE_GENERATOR`.  Few users
+  will want to change this setting.
+
+.. variable:: CPACK_INSTALL_CMAKE_PROJECTS
+
+  List of four values that specify what project to install.  The four values
+  are: Build directory, Project Name, Project Component, Directory.  If
+  omitted, CPack will build an installer that installs everything.
+
+.. variable:: CPACK_SYSTEM_NAME
+
+  System name, defaults to the value of :variable:`CMAKE_SYSTEM_NAME`,
+  except on Windows where it will be ``win32`` or ``win64``.
+
+.. variable:: CPACK_PACKAGE_VERSION
+
+  Package full version, used internally.  By default, this is built from
+  :variable:`CPACK_PACKAGE_VERSION_MAJOR`,
+  :variable:`CPACK_PACKAGE_VERSION_MINOR`, and
+  :variable:`CPACK_PACKAGE_VERSION_PATCH`.
+
+.. variable:: CPACK_TOPLEVEL_TAG
+
+  Directory for the installed files.
+
+.. variable:: CPACK_INSTALL_COMMANDS
+
+  Extra commands to install components.  The environment variable
+  ``CMAKE_INSTALL_PREFIX`` is set to the temporary install directory
+  during execution.
+
+.. variable:: CPACK_INSTALL_SCRIPTS
+
+  .. versionadded:: 3.16
+
+  Extra CMake scripts executed by CPack during its local staging
+  installation.  They are executed before installing the files to be packaged.
+  The scripts are not called by a standalone install (e.g.: ``make install``).
+  For every script, the following variables will be set:
+  :variable:`CMAKE_CURRENT_SOURCE_DIR`, :variable:`CMAKE_CURRENT_BINARY_DIR`
+  and :variable:`CMAKE_INSTALL_PREFIX` (which is set to the staging install
+  directory).  The singular form ``CMAKE_INSTALL_SCRIPT`` is supported as
+  an alternative variable for historical reasons, but its value is ignored if
+  ``CMAKE_INSTALL_SCRIPTS`` is set and a warning will be issued.
+
+  See also :variable:`CPACK_PRE_BUILD_SCRIPTS` and
+  :variable:`CPACK_POST_BUILD_SCRIPTS` which can be used to specify scripts
+  to be executed later in the packaging process.
+
+.. variable:: CPACK_PRE_BUILD_SCRIPTS
+
+  .. versionadded:: 3.19
+
+  List of CMake scripts to execute after CPack has installed the files to
+  be packaged into a staging directory and before producing the package(s)
+  from those files. See also :variable:`CPACK_INSTALL_SCRIPTS` and
+  :variable:`CPACK_POST_BUILD_SCRIPTS`.
+
+.. variable:: CPACK_POST_BUILD_SCRIPTS
+
+  .. versionadded:: 3.19
+
+  List of CMake scripts to execute after CPack has produced the resultant
+  packages and before copying them back to the build directory.
+  See also :variable:`CPACK_INSTALL_SCRIPTS`,
+  :variable:`CPACK_PRE_BUILD_SCRIPTS` and :variable:`CPACK_PACKAGE_FILES`.
+
+.. variable:: CPACK_PACKAGE_FILES
+
+  .. versionadded:: 3.19
+
+  List of package files created in the staging directory, with each file
+  provided as a full absolute path.  This variable is populated by CPack
+  just before invoking the post-build scripts listed in
+  :variable:`CPACK_POST_BUILD_SCRIPTS`.  It is the preferred way for the
+  post-build scripts to know the set of package files to operate on.
+  Projects should not try to set this variable themselves.
+
+.. variable:: CPACK_INSTALLED_DIRECTORIES
+
+  Extra directories to install.
+
+.. variable:: CPACK_PACKAGE_INSTALL_REGISTRY_KEY
+
+  Registry key used when installing this project.  This is only used by
+  installers for Windows.  The default value is based on the installation
+  directory.
+
+.. variable:: CPACK_CREATE_DESKTOP_LINKS
+
+  List of desktop links to create.  Each desktop link requires a
+  corresponding start menu shortcut as created by
+  :variable:`CPACK_PACKAGE_EXECUTABLES`.
+
+.. variable:: CPACK_BINARY_<GENNAME>
+
+  CPack generated options for binary generators.  The ``CPack.cmake`` module
+  generates (when :variable:`CPACK_GENERATOR` is not set) a set of CMake
+  options (see CMake :command:`option` command) which may then be used to
+  select the CPack generator(s) to be used when building the ``package``
+  target or when running :manual:`cpack <cpack(1)>` without the ``-G`` option.
+
+#]=======================================================================]
+
+# Define this var in order to avoid (or warn) concerning multiple inclusion
+if(CPack_CMake_INCLUDED)
+  message(WARNING "CPack.cmake has already been included!!")
+else()
+  set(CPack_CMake_INCLUDED 1)
+endif()
+
+# Pick a configuration file
+set(cpack_input_file "${CMAKE_ROOT}/Templates/CPackConfig.cmake.in")
+if(EXISTS "${CMAKE_SOURCE_DIR}/CPackConfig.cmake.in")
+  set(cpack_input_file "${CMAKE_SOURCE_DIR}/CPackConfig.cmake.in")
+endif()
+set(cpack_source_input_file "${CMAKE_ROOT}/Templates/CPackConfig.cmake.in")
+if(EXISTS "${CMAKE_SOURCE_DIR}/CPackSourceConfig.cmake.in")
+  set(cpack_source_input_file "${CMAKE_SOURCE_DIR}/CPackSourceConfig.cmake.in")
+endif()
+
+# Backward compatibility
+# Include CPackComponent macros if it has not already been included before.
+include(CPackComponent)
+
+# Macro for setting values if a user did not overwrite them
+# Mangles CMake-special characters. Only kept for backwards compatibility.
+macro(cpack_set_if_not_set name value)
+  message(DEPRECATION "cpack_set_if_not_set is obsolete; do not use.")
+  _cpack_set_default("${name}" "${value}")
+endmacro()
+
+# cpack_encode_variables - Function to encode variables for the configuration file
+# find any variable that starts with CPACK and create a variable
+# _CPACK_OTHER_VARIABLES_ that contains SET commands for
+# each cpack variable.  _CPACK_OTHER_VARIABLES_ is then
+# used as an @ replacement in configure_file for the CPackConfig.
+function(cpack_encode_variables)
+  set(commands "")
+  get_cmake_property(res VARIABLES)
+  foreach(var ${res})
+    if(var MATCHES "^CPACK")
+      if(CPACK_VERBATIM_VARIABLES)
+        _cpack_escape_for_cmake(value "${${var}}")
+      else()
+        set(value "${${var}}")
+      endif()
+
+      string(APPEND commands "\nset(${var} \"${value}\")")
+    endif()
+  endforeach()
+
+  set(_CPACK_OTHER_VARIABLES_ "${commands}" PARENT_SCOPE)
+endfunction()
+
+# Internal use functions
+function(_cpack_set_default name value)
+  if(NOT DEFINED "${name}")
+    set("${name}" "${value}" PARENT_SCOPE)
+  endif()
+endfunction()
+
+function(_cpack_escape_for_cmake var value)
+  string(REGEX REPLACE "([\\\$\"])" "\\\\\\1" escaped "${value}")
+  set("${var}" "${escaped}" PARENT_SCOPE)
+endfunction()
+
+# Set the package name
+_cpack_set_default(CPACK_PACKAGE_NAME "${CMAKE_PROJECT_NAME}")
+
+# Set the package version
+if(CMAKE_PROJECT_VERSION_MAJOR GREATER_EQUAL 0)
+  _cpack_set_default(CPACK_PACKAGE_VERSION_MAJOR "${CMAKE_PROJECT_VERSION_MAJOR}")
+  if(CMAKE_PROJECT_VERSION_MINOR GREATER_EQUAL 0)
+    _cpack_set_default(CPACK_PACKAGE_VERSION_MINOR "${CMAKE_PROJECT_VERSION_MINOR}")
+    if(CMAKE_PROJECT_VERSION_PATCH GREATER_EQUAL 0)
+      _cpack_set_default(CPACK_PACKAGE_VERSION_PATCH "${CMAKE_PROJECT_VERSION_PATCH}")
+    endif()
+  endif()
+else()
+  _cpack_set_default(CPACK_PACKAGE_VERSION_MAJOR "0")
+  _cpack_set_default(CPACK_PACKAGE_VERSION_MINOR "1")
+  _cpack_set_default(CPACK_PACKAGE_VERSION_PATCH "1")
+endif()
+if(NOT DEFINED CPACK_PACKAGE_VERSION)
+  set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}")
+  if(CPACK_PACKAGE_VERSION_MINOR GREATER_EQUAL 0)
+    string(APPEND CPACK_PACKAGE_VERSION ".${CPACK_PACKAGE_VERSION_MINOR}")
+    if(CPACK_PACKAGE_VERSION_PATCH GREATER_EQUAL 0)
+      string(APPEND CPACK_PACKAGE_VERSION ".${CPACK_PACKAGE_VERSION_PATCH}")
+    endif()
+  endif()
+endif()
+
+_cpack_set_default(CPACK_PACKAGE_VENDOR "Humanity")
+set(CPACK_DEFAULT_PACKAGE_DESCRIPTION_SUMMARY "${CMAKE_PROJECT_NAME} built using CMake")
+if(CMAKE_PROJECT_DESCRIPTION)
+  _cpack_set_default(CPACK_PACKAGE_DESCRIPTION_SUMMARY
+    "${CMAKE_PROJECT_DESCRIPTION}")
+else()
+  _cpack_set_default(CPACK_PACKAGE_DESCRIPTION_SUMMARY
+    "${CPACK_DEFAULT_PACKAGE_DESCRIPTION_SUMMARY}")
+endif()
+if(CMAKE_PROJECT_HOMEPAGE_URL)
+  _cpack_set_default(CPACK_PACKAGE_HOMEPAGE_URL
+    "${CMAKE_PROJECT_HOMEPAGE_URL}")
+endif()
+
+set(CPACK_DEFAULT_PACKAGE_DESCRIPTION_FILE
+  "${CMAKE_ROOT}/Templates/CPack.GenericDescription.txt")
+_cpack_set_default(CPACK_PACKAGE_DESCRIPTION_FILE
+  "${CPACK_DEFAULT_PACKAGE_DESCRIPTION_FILE}")
+_cpack_set_default(CPACK_RESOURCE_FILE_LICENSE
+  "${CMAKE_ROOT}/Templates/CPack.GenericLicense.txt")
+_cpack_set_default(CPACK_RESOURCE_FILE_README
+  "${CMAKE_ROOT}/Templates/CPack.GenericDescription.txt")
+_cpack_set_default(CPACK_RESOURCE_FILE_WELCOME
+  "${CMAKE_ROOT}/Templates/CPack.GenericWelcome.txt")
+
+_cpack_set_default(CPACK_MODULE_PATH "${CMAKE_MODULE_PATH}")
+
+# Set default directory creation permissions mode
+if(CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS)
+  _cpack_set_default(CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS
+    "${CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS}")
+endif()
+
+if(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL)
+  set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON)
+endif()
+
+if(CPACK_NSIS_MODIFY_PATH)
+  set(CPACK_NSIS_MODIFY_PATH ON)
+endif()
+
+set(__cpack_system_name ${CMAKE_SYSTEM_NAME})
+if(__cpack_system_name MATCHES "Windows")
+  if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+    set(__cpack_system_name win64)
+  else()
+    set(__cpack_system_name win32)
+  endif()
+endif()
+_cpack_set_default(CPACK_SYSTEM_NAME "${__cpack_system_name}")
+
+# Root dir: default value should be the string literal "$PROGRAMFILES"
+# for backwards compatibility. Projects may set this value to anything.
+# When creating 64 bit binaries we set the default value to "$PROGRAMFILES64"
+if("x${__cpack_system_name}" STREQUAL "xwin64")
+  set(__cpack_root_default "$PROGRAMFILES64")
+else()
+  set(__cpack_root_default "$PROGRAMFILES")
+endif()
+_cpack_set_default(CPACK_NSIS_INSTALL_ROOT "${__cpack_root_default}")
+
+# <project>-<major>.<minor>.<patch>-<release>-<platform>.<pkgtype>
+_cpack_set_default(CPACK_PACKAGE_FILE_NAME
+  "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_SYSTEM_NAME}")
+_cpack_set_default(CPACK_PACKAGE_INSTALL_DIRECTORY
+  "${CPACK_PACKAGE_NAME} ${CPACK_PACKAGE_VERSION}")
+_cpack_set_default(CPACK_PACKAGE_INSTALL_REGISTRY_KEY
+  "${CPACK_PACKAGE_INSTALL_DIRECTORY}")
+_cpack_set_default(CPACK_PACKAGE_DEFAULT_LOCATION "/")
+_cpack_set_default(CPACK_PACKAGE_RELOCATABLE "true")
+
+# always force to exactly "true" or "false" for CPack.Info.plist.in:
+if(CPACK_PACKAGE_RELOCATABLE)
+  set(CPACK_PACKAGE_RELOCATABLE "true")
+else()
+  set(CPACK_PACKAGE_RELOCATABLE "false")
+endif()
+
+macro(cpack_check_file_exists file description)
+  if(NOT EXISTS "${file}")
+    message(SEND_ERROR "CPack ${description} file: \"${file}\" could not be found.")
+  endif()
+endmacro()
+
+cpack_check_file_exists("${CPACK_PACKAGE_DESCRIPTION_FILE}" "package description")
+cpack_check_file_exists("${CPACK_RESOURCE_FILE_LICENSE}"    "license resource")
+cpack_check_file_exists("${CPACK_RESOURCE_FILE_README}"     "readme resource")
+cpack_check_file_exists("${CPACK_RESOURCE_FILE_WELCOME}"    "welcome resource")
+
+macro(cpack_optional_append _list _cond _item)
+  if(${_cond})
+    set(${_list} ${${_list}} ${_item})
+  endif()
+endmacro()
+
+# Provide options to choose generators we might check here if the required
+# tools for the generators exist and set the defaults according to the
+# results.
+if(NOT CPACK_GENERATOR)
+  if(UNIX)
+    if(CYGWIN)
+      option(CPACK_BINARY_CYGWIN "Enable to build Cygwin binary packages" ON)
+    else()
+      if(APPLE)
+        option(CPACK_BINARY_BUNDLE       "Enable to build OSX bundles"      OFF)
+        option(CPACK_BINARY_DRAGNDROP    "Enable to build OSX Drag And Drop package" OFF)
+        option(CPACK_BINARY_OSXX11       "Enable to build OSX X11 packages (deprecated)" OFF)
+        option(CPACK_BINARY_PACKAGEMAKER "Enable to build PackageMaker packages (deprecated)" OFF)
+        option(CPACK_BINARY_PRODUCTBUILD "Enable to build productbuild packages" OFF)
+        mark_as_advanced(
+          CPACK_BINARY_BUNDLE
+          CPACK_BINARY_DRAGNDROP
+          CPACK_BINARY_OSXX11
+          CPACK_BINARY_PACKAGEMAKER
+          CPACK_BINARY_PRODUCTBUILD
+          )
+      else()
+        option(CPACK_BINARY_TZ  "Enable to build TZ packages"     ON)
+        mark_as_advanced(CPACK_BINARY_TZ)
+      endif()
+      option(CPACK_BINARY_DEB  "Enable to build Debian packages"  OFF)
+      option(CPACK_BINARY_FREEBSD  "Enable to build FreeBSD packages"  OFF)
+      option(CPACK_BINARY_NSIS "Enable to build NSIS packages"    OFF)
+      option(CPACK_BINARY_RPM  "Enable to build RPM packages"     OFF)
+      option(CPACK_BINARY_STGZ "Enable to build STGZ packages"    ON)
+      option(CPACK_BINARY_TBZ2 "Enable to build TBZ2 packages"    OFF)
+      option(CPACK_BINARY_TGZ  "Enable to build TGZ packages"     ON)
+      option(CPACK_BINARY_TXZ  "Enable to build TXZ packages"     OFF)
+      mark_as_advanced(
+        CPACK_BINARY_DEB
+        CPACK_BINARY_FREEBSD
+        CPACK_BINARY_NSIS
+        CPACK_BINARY_RPM
+        CPACK_BINARY_STGZ
+        CPACK_BINARY_TBZ2
+        CPACK_BINARY_TGZ
+        CPACK_BINARY_TXZ
+        )
+    endif()
+  else()
+    option(CPACK_BINARY_7Z    "Enable to build 7-Zip packages" OFF)
+    option(CPACK_BINARY_NSIS  "Enable to build NSIS packages" ON)
+    option(CPACK_BINARY_NUGET "Enable to build NuGet packages" OFF)
+    option(CPACK_BINARY_WIX   "Enable to build WiX packages" OFF)
+    option(CPACK_BINARY_ZIP   "Enable to build ZIP packages" OFF)
+    mark_as_advanced(
+      CPACK_BINARY_7Z
+      CPACK_BINARY_NSIS
+      CPACK_BINARY_NUGET
+      CPACK_BINARY_WIX
+      CPACK_BINARY_ZIP
+      )
+  endif()
+  option(CPACK_BINARY_IFW "Enable to build IFW packages" OFF)
+  mark_as_advanced(CPACK_BINARY_IFW)
+
+  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_7Z           7Z)
+  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_BUNDLE       Bundle)
+  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_CYGWIN       CygwinBinary)
+  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_DEB          DEB)
+  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_DRAGNDROP    DragNDrop)
+  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_FREEBSD      FREEBSD)
+  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_IFW          IFW)
+  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_NSIS         NSIS)
+  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_NUGET        NuGet)
+  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_OSXX11       OSXX11)
+  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_PACKAGEMAKER PackageMaker)
+  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_PRODUCTBUILD productbuild)
+  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_RPM          RPM)
+  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_STGZ         STGZ)
+  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_TBZ2         TBZ2)
+  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_TGZ          TGZ)
+  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_TXZ          TXZ)
+  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_TZ           TZ)
+  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_WIX          WIX)
+  cpack_optional_append(CPACK_GENERATOR  CPACK_BINARY_ZIP          ZIP)
+
+endif()
+
+# Provide options to choose source generators
+if(NOT CPACK_SOURCE_GENERATOR)
+  if(UNIX)
+    if(CYGWIN)
+      option(CPACK_SOURCE_CYGWIN "Enable to build Cygwin source packages" ON)
+      mark_as_advanced(CPACK_SOURCE_CYGWIN)
+    else()
+      option(CPACK_SOURCE_RPM  "Enable to build RPM source packages"  OFF)
+      option(CPACK_SOURCE_TBZ2 "Enable to build TBZ2 source packages" ON)
+      option(CPACK_SOURCE_TGZ  "Enable to build TGZ source packages"  ON)
+      option(CPACK_SOURCE_TXZ  "Enable to build TXZ source packages"  ON)
+      option(CPACK_SOURCE_TZ   "Enable to build TZ source packages"   ON)
+      option(CPACK_SOURCE_ZIP  "Enable to build ZIP source packages"  OFF)
+      mark_as_advanced(
+        CPACK_SOURCE_RPM
+        CPACK_SOURCE_TBZ2
+        CPACK_SOURCE_TGZ
+        CPACK_SOURCE_TXZ
+        CPACK_SOURCE_TZ
+        CPACK_SOURCE_ZIP
+        )
+    endif()
+  else()
+    option(CPACK_SOURCE_7Z  "Enable to build 7-Zip source packages" ON)
+    option(CPACK_SOURCE_ZIP "Enable to build ZIP source packages" ON)
+    mark_as_advanced(
+      CPACK_SOURCE_7Z
+      CPACK_SOURCE_ZIP
+      )
+  endif()
+
+  cpack_optional_append(CPACK_SOURCE_GENERATOR  CPACK_SOURCE_7Z      7Z)
+  cpack_optional_append(CPACK_SOURCE_GENERATOR  CPACK_SOURCE_CYGWIN  CygwinSource)
+  cpack_optional_append(CPACK_SOURCE_GENERATOR  CPACK_SOURCE_RPM     RPM)
+  cpack_optional_append(CPACK_SOURCE_GENERATOR  CPACK_SOURCE_TBZ2    TBZ2)
+  cpack_optional_append(CPACK_SOURCE_GENERATOR  CPACK_SOURCE_TGZ     TGZ)
+  cpack_optional_append(CPACK_SOURCE_GENERATOR  CPACK_SOURCE_TXZ     TXZ)
+  cpack_optional_append(CPACK_SOURCE_GENERATOR  CPACK_SOURCE_TZ      TZ)
+  cpack_optional_append(CPACK_SOURCE_GENERATOR  CPACK_SOURCE_ZIP     ZIP)
+endif()
+
+# Set some other variables
+_cpack_set_default(CPACK_INSTALL_CMAKE_PROJECTS
+  "${CMAKE_BINARY_DIR};${CMAKE_PROJECT_NAME};ALL;/")
+_cpack_set_default(CPACK_CMAKE_GENERATOR "${CMAKE_GENERATOR}")
+_cpack_set_default(CPACK_TOPLEVEL_TAG "${CPACK_SYSTEM_NAME}")
+_cpack_set_default(CPACK_THREADS 1)
+# if the user has set CPACK_NSIS_DISPLAY_NAME remember it
+if(DEFINED CPACK_NSIS_DISPLAY_NAME)
+  set(CPACK_NSIS_DISPLAY_NAME_SET TRUE)
+endif()
+# if the user has set CPACK_NSIS_DISPLAY
+# explicitly, then use that as the default
+# value of CPACK_NSIS_PACKAGE_NAME  instead
+# of CPACK_PACKAGE_INSTALL_DIRECTORY
+_cpack_set_default(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY}")
+# Specify the name of the Uninstall file in NSIS
+_cpack_set_default(CPACK_NSIS_UNINSTALL_NAME "Uninstall")
+
+if(CPACK_NSIS_DISPLAY_NAME_SET)
+  _cpack_set_default(CPACK_NSIS_PACKAGE_NAME "${CPACK_NSIS_DISPLAY_NAME}")
+else()
+  _cpack_set_default(CPACK_NSIS_PACKAGE_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY}")
+endif()
+
+_cpack_set_default(CPACK_OUTPUT_CONFIG_FILE
+  "${CMAKE_BINARY_DIR}/CPackConfig.cmake")
+
+_cpack_set_default(CPACK_SOURCE_OUTPUT_CONFIG_FILE
+  "${CMAKE_BINARY_DIR}/CPackSourceConfig.cmake")
+
+_cpack_set_default(CPACK_SET_DESTDIR OFF)
+_cpack_set_default(CPACK_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
+
+_cpack_set_default(CPACK_NSIS_INSTALLER_ICON_CODE "")
+_cpack_set_default(CPACK_NSIS_INSTALLER_MUI_ICON_CODE "")
+
+# WiX specific variables
+_cpack_set_default(CPACK_WIX_SIZEOF_VOID_P "${CMAKE_SIZEOF_VOID_P}")
+
+# set sysroot so SDK tools can be used
+if(CMAKE_OSX_SYSROOT)
+  _cpack_set_default(CPACK_OSX_SYSROOT "${_CMAKE_OSX_SYSROOT_PATH}")
+endif()
+
+_cpack_set_default(CPACK_BUILD_SOURCE_DIRS "${CMAKE_SOURCE_DIR};${CMAKE_BINARY_DIR}")
+
+if(DEFINED CPACK_COMPONENTS_ALL)
+  if(CPACK_MONOLITHIC_INSTALL)
+    message("CPack warning: both CPACK_COMPONENTS_ALL and CPACK_MONOLITHIC_INSTALL have been set.\nDefaulting to a monolithic installation.")
+    set(CPACK_COMPONENTS_ALL)
+  else()
+    # The user has provided the set of components to be installed as
+    # part of a component-based installation; trust her.
+    set(CPACK_COMPONENTS_ALL_SET_BY_USER TRUE)
+  endif()
+else()
+  # If the user has not specifically requested a monolithic installer
+  # but has specified components in various "install" commands, tell
+  # CPack about those components.
+  if(NOT CPACK_MONOLITHIC_INSTALL)
+    get_cmake_property(CPACK_COMPONENTS_ALL COMPONENTS)
+    list(LENGTH CPACK_COMPONENTS_ALL CPACK_COMPONENTS_LEN)
+    if(CPACK_COMPONENTS_LEN EQUAL 1)
+      # Only one component: this is not a component-based installation
+      # (at least, it isn't a component-based installation, but may
+      # become one later if the user uses the cpack_add_* commands).
+      set(CPACK_COMPONENTS_ALL)
+    endif()
+    set(CPACK_COMPONENTS_LEN)
+  endif()
+endif()
+
+# CMake always generates a component named "Unspecified", which is
+# used to install everything that doesn't have an explicitly-provided
+# component. Since these files should always be installed, we'll make
+# them hidden and required.
+set(CPACK_COMPONENT_UNSPECIFIED_HIDDEN TRUE)
+set(CPACK_COMPONENT_UNSPECIFIED_REQUIRED TRUE)
+
+cpack_encode_variables()
+configure_file("${cpack_input_file}" "${CPACK_OUTPUT_CONFIG_FILE}" @ONLY)
+
+# Generate source file
+_cpack_set_default(CPACK_SOURCE_INSTALLED_DIRECTORIES
+  "${CMAKE_SOURCE_DIR};/")
+_cpack_set_default(CPACK_SOURCE_TOPLEVEL_TAG "${CPACK_SYSTEM_NAME}-Source")
+_cpack_set_default(CPACK_SOURCE_PACKAGE_FILE_NAME
+  "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Source")
+
+set(__cpack_source_ignore_files_default
+  "/CVS/;/\\.svn/;/\\.bzr/;/\\.hg/;/\\.git/;\\.swp$;\\.#;/#")
+if(NOT CPACK_VERBATIM_VARIABLES)
+  _cpack_escape_for_cmake(__cpack_source_ignore_files_default
+    "${__cpack_source_ignore_files_default}")
+endif()
+_cpack_set_default(CPACK_SOURCE_IGNORE_FILES "${__cpack_source_ignore_files_default}")
+
+set(CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_SOURCE_INSTALL_CMAKE_PROJECTS}")
+set(CPACK_INSTALLED_DIRECTORIES "${CPACK_SOURCE_INSTALLED_DIRECTORIES}")
+set(CPACK_GENERATOR "${CPACK_SOURCE_GENERATOR}")
+set(CPACK_TOPLEVEL_TAG "${CPACK_SOURCE_TOPLEVEL_TAG}")
+set(CPACK_PACKAGE_FILE_NAME "${CPACK_SOURCE_PACKAGE_FILE_NAME}")
+set(CPACK_IGNORE_FILES "${CPACK_SOURCE_IGNORE_FILES}")
+set(CPACK_STRIP_FILES "${CPACK_SOURCE_STRIP_FILES}")
+
+set(CPACK_RPM_PACKAGE_SOURCES "ON")
+
+cpack_encode_variables()
+configure_file("${cpack_source_input_file}"
+  "${CPACK_SOURCE_OUTPUT_CONFIG_FILE}" @ONLY)
diff --git a/share/cmake-3.18/Modules/CPackComponent.cmake b/share/cmake-3.22/Modules/CPackComponent.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CPackComponent.cmake
rename to share/cmake-3.22/Modules/CPackComponent.cmake
diff --git a/share/cmake-3.22/Modules/CPackIFW.cmake b/share/cmake-3.22/Modules/CPackIFW.cmake
new file mode 100644
index 0000000..85108db
--- /dev/null
+++ b/share/cmake-3.22/Modules/CPackIFW.cmake
@@ -0,0 +1,832 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CPackIFW
+--------
+
+.. versionadded:: 3.1
+
+This module looks for the location of the command-line utilities supplied with the
+`Qt Installer Framework <http://doc.qt.io/qtinstallerframework/index.html>`_
+(QtIFW).
+
+The module also defines several commands to control the behavior of the
+:cpack_gen:`CPack IFW Generator`.
+
+Commands
+^^^^^^^^
+
+The module defines the following commands:
+
+.. command:: cpack_ifw_configure_component
+
+  Sets the arguments specific to the CPack IFW generator.
+
+  ::
+
+    cpack_ifw_configure_component(<compname> [COMMON] [ESSENTIAL] [VIRTUAL]
+                        [FORCED_INSTALLATION] [REQUIRES_ADMIN_RIGHTS]
+                        [NAME <name>]
+                        [DISPLAY_NAME <display_name>] # Note: Internationalization supported
+                        [DESCRIPTION <description>] # Note: Internationalization supported
+                        [UPDATE_TEXT <update_text>]
+                        [VERSION <version>]
+                        [RELEASE_DATE <release_date>]
+                        [SCRIPT <script>]
+                        [PRIORITY|SORTING_PRIORITY <sorting_priority>] # Note: PRIORITY is deprecated
+                        [DEPENDS|DEPENDENCIES <com_id> ...]
+                        [AUTO_DEPEND_ON <comp_id> ...]
+                        [LICENSES <display_name> <file_path> ...]
+                        [DEFAULT <value>]
+                        [USER_INTERFACES <file_path> <file_path> ...]
+                        [TRANSLATIONS <file_path> <file_path> ...]
+                        [REPLACES <comp_id> ...]
+                        [CHECKABLE <value>])
+
+  This command should be called after :command:`cpack_add_component` command.
+
+  ``COMMON``
+    if set, then the component will be packaged and installed as part
+    of a group to which it belongs.
+
+  ``ESSENTIAL``
+    .. versionadded:: 3.6
+
+    if set, then the package manager stays disabled until that
+    component is updated.
+
+  ``VIRTUAL``
+    .. versionadded:: 3.8
+
+    if set, then the component will be hidden from the installer.
+    It is a equivalent of the ``HIDDEN`` option from the
+    :command:`cpack_add_component` command.
+
+  ``FORCED_INSTALLATION``
+    .. versionadded:: 3.8
+
+    if set, then the component must always be installed.
+    It is a equivalent of the ``REQUIRED`` option from the
+    :command:`cpack_add_component` command.
+
+  ``REQUIRES_ADMIN_RIGHTS``
+    .. versionadded:: 3.8
+
+    set it if the component needs to be installed with elevated permissions.
+
+  ``NAME``
+    is used to create domain-like identification for this component.
+    By default used origin component name.
+
+  ``DISPLAY_NAME``
+    .. versionadded:: 3.8
+
+    set to rewrite original name configured by
+    :command:`cpack_add_component` command.
+
+  ``DESCRIPTION``
+    .. versionadded:: 3.8
+
+    set to rewrite original description configured by
+    :command:`cpack_add_component` command.
+
+  ``UPDATE_TEXT``
+    .. versionadded:: 3.8
+
+    will be added to the component description if this is an update to
+    the component.
+
+  ``VERSION``
+    is version of component.
+    By default used :variable:`CPACK_PACKAGE_VERSION`.
+
+  ``RELEASE_DATE``
+    .. versionadded:: 3.8
+
+    keep empty to auto generate.
+
+  ``SCRIPT``
+    is a relative or absolute path to operations script
+    for this component.
+
+  ``SORTING_PRIORITY``
+    .. versionadded:: 3.8
+
+    is priority of the component in the tree.
+
+  ``PRIORITY``
+    .. deprecated:: 3.8
+      Old name for ``SORTING_PRIORITY``.
+
+  ``DEPENDS``, ``DEPENDENCIES``
+    .. versionadded:: 3.8
+
+    list of dependency component or component group identifiers in
+    QtIFW style.
+
+    .. versionadded:: 3.21
+
+    Component or group names listed as dependencies may contain hyphens.
+    This requires QtIFW 3.1 or later.
+
+  ``AUTO_DEPEND_ON``
+    .. versionadded:: 3.8
+
+    list of identifiers of component or component group in QtIFW style
+    that this component has an automatic dependency on.
+
+  ``LICENSES``
+    pair of <display_name> and <file_path> of license text for this
+    component. You can specify more then one license.
+
+  ``DEFAULT``
+    .. versionadded:: 3.8
+
+    Possible values are: TRUE, FALSE, and SCRIPT.
+    Set to FALSE to disable the component in the installer or to SCRIPT
+    to resolved during runtime (don't forget add the file of the script
+    as a value of the ``SCRIPT`` option).
+
+  ``USER_INTERFACES``
+    .. versionadded:: 3.7
+
+    is a list of <file_path> ('.ui' files) representing pages to load.
+
+  ``TRANSLATIONS``
+    .. versionadded:: 3.8
+
+    is a list of <file_path> ('.qm' files) representing translations to load.
+
+  ``REPLACES``
+    .. versionadded:: 3.10
+
+    list of identifiers of component or component group to replace.
+
+  ``CHECKABLE``
+    .. versionadded:: 3.10
+
+    Possible values are: TRUE, FALSE.
+    Set to FALSE if you want to hide the checkbox for an item.
+    This is useful when only a few subcomponents should be selected
+    instead of all.
+
+
+.. command:: cpack_ifw_configure_component_group
+
+  Sets the arguments specific to the CPack IFW generator.
+
+  ::
+
+    cpack_ifw_configure_component_group(<groupname> [VIRTUAL]
+                        [FORCED_INSTALLATION] [REQUIRES_ADMIN_RIGHTS]
+                        [NAME <name>]
+                        [DISPLAY_NAME <display_name>] # Note: Internationalization supported
+                        [DESCRIPTION <description>] # Note: Internationalization supported
+                        [UPDATE_TEXT <update_text>]
+                        [VERSION <version>]
+                        [RELEASE_DATE <release_date>]
+                        [SCRIPT <script>]
+                        [PRIORITY|SORTING_PRIORITY <sorting_priority>] # Note: PRIORITY is deprecated
+                        [DEPENDS|DEPENDENCIES <com_id> ...]
+                        [AUTO_DEPEND_ON <comp_id> ...]
+                        [LICENSES <display_name> <file_path> ...]
+                        [DEFAULT <value>]
+                        [USER_INTERFACES <file_path> <file_path> ...]
+                        [TRANSLATIONS <file_path> <file_path> ...]
+                        [REPLACES <comp_id> ...]
+                        [CHECKABLE <value>])
+
+  This command should be called after :command:`cpack_add_component_group`
+  command.
+
+  ``VIRTUAL``
+    .. versionadded:: 3.8
+
+    if set, then the group will be hidden from the installer.
+    Note that setting this on a root component does not work.
+
+  ``FORCED_INSTALLATION``
+    .. versionadded:: 3.8
+
+    if set, then the group must always be installed.
+
+  ``REQUIRES_ADMIN_RIGHTS``
+    .. versionadded:: 3.8
+
+    set it if the component group needs to be installed with elevated
+    permissions.
+
+  ``NAME``
+    is used to create domain-like identification for this component group.
+    By default used origin component group name.
+
+  ``DISPLAY_NAME``
+    .. versionadded:: 3.8
+
+    set to rewrite original name configured by
+    :command:`cpack_add_component_group` command.
+
+  ``DESCRIPTION``
+    .. versionadded:: 3.8
+
+    set to rewrite original description configured by
+    :command:`cpack_add_component_group` command.
+
+  ``UPDATE_TEXT``
+    .. versionadded:: 3.8
+
+    will be added to the component group description if this is an update to
+    the component group.
+
+  ``VERSION``
+    is version of component group.
+    By default used :variable:`CPACK_PACKAGE_VERSION`.
+
+  ``RELEASE_DATE``
+    .. versionadded:: 3.8
+
+    keep empty to auto generate.
+
+  ``SCRIPT``
+    is a relative or absolute path to operations script
+    for this component group.
+
+  ``SORTING_PRIORITY``
+    is priority of the component group in the tree.
+
+  ``PRIORITY``
+    .. deprecated:: 3.8
+      Old name for ``SORTING_PRIORITY``.
+
+  ``DEPENDS``, ``DEPENDENCIES``
+    .. versionadded:: 3.8
+
+    list of dependency component or component group identifiers in
+    QtIFW style.
+
+    .. versionadded:: 3.21
+
+    Component or group names listed as dependencies may contain hyphens.
+    This requires QtIFW 3.1 or later.
+
+  ``AUTO_DEPEND_ON``
+    .. versionadded:: 3.8
+
+    list of identifiers of component or component group in QtIFW style
+    that this component group has an automatic dependency on.
+
+  ``LICENSES``
+    pair of <display_name> and <file_path> of license text for this
+    component group. You can specify more then one license.
+
+  ``DEFAULT``
+    .. versionadded:: 3.8
+
+    Possible values are: TRUE, FALSE, and SCRIPT.
+    Set to TRUE to preselect the group in the installer
+    (this takes effect only on groups that have no visible child components)
+    or to SCRIPT to resolved during runtime (don't forget add the file of
+    the script as a value of the ``SCRIPT`` option).
+
+  ``USER_INTERFACES``
+    .. versionadded:: 3.7
+
+    is a list of <file_path> ('.ui' files) representing pages to load.
+
+  ``TRANSLATIONS``
+    .. versionadded:: 3.8
+
+    is a list of <file_path> ('.qm' files) representing translations to load.
+
+  ``REPLACES``
+    .. versionadded:: 3.10
+
+    list of identifiers of component or component group to replace.
+
+  ``CHECKABLE``
+    .. versionadded:: 3.10
+
+    Possible values are: TRUE, FALSE.
+    Set to FALSE if you want to hide the checkbox for an item.
+    This is useful when only a few subcomponents should be selected
+    instead of all.
+
+
+.. command:: cpack_ifw_add_repository
+
+  Add QtIFW specific remote repository to binary installer.
+
+  ::
+
+    cpack_ifw_add_repository(<reponame> [DISABLED]
+                        URL <url>
+                        [USERNAME <username>]
+                        [PASSWORD <password>]
+                        [DISPLAY_NAME <display_name>])
+
+  This command will also add the <reponame> repository
+  to a variable :variable:`CPACK_IFW_REPOSITORIES_ALL`.
+
+  ``DISABLED``
+    if set, then the repository will be disabled by default.
+
+  ``URL``
+    is points to a list of available components.
+
+  ``USERNAME``
+    is used as user on a protected repository.
+
+  ``PASSWORD``
+    is password to use on a protected repository.
+
+  ``DISPLAY_NAME``
+    is string to display instead of the URL.
+
+
+.. command:: cpack_ifw_update_repository
+
+  .. versionadded:: 3.6
+
+  Update QtIFW specific repository from remote repository.
+
+  ::
+
+    cpack_ifw_update_repository(<reponame>
+                        [[ADD|REMOVE] URL <url>]|
+                         [REPLACE OLD_URL <old_url> NEW_URL <new_url>]]
+                        [USERNAME <username>]
+                        [PASSWORD <password>]
+                        [DISPLAY_NAME <display_name>])
+
+  This command will also add the <reponame> repository
+  to a variable :variable:`CPACK_IFW_REPOSITORIES_ALL`.
+
+  ``URL``
+    is points to a list of available components.
+
+  ``OLD_URL``
+    is points to a list that will replaced.
+
+  ``NEW_URL``
+    is points to a list that will replace to.
+
+  ``USERNAME``
+    is used as user on a protected repository.
+
+  ``PASSWORD``
+    is password to use on a protected repository.
+
+  ``DISPLAY_NAME``
+    is string to display instead of the URL.
+
+
+.. command:: cpack_ifw_add_package_resources
+
+  .. versionadded:: 3.7
+
+  Add additional resources in the installer binary.
+
+  ::
+
+    cpack_ifw_add_package_resources(<file_path> <file_path> ...)
+
+  This command will also add the specified files
+  to a variable :variable:`CPACK_IFW_PACKAGE_RESOURCES`.
+
+#]=======================================================================]
+
+# TODO:
+# All of the internal implementation CMake modules for other CPack generators
+# have been moved into the Internal/CPack directory. This one has not, because
+# it contains user-facing macros which would be lost if it were moved. At some
+# point, this module should be split into user-facing macros (which would live
+# in this module) and internal implementation details (which would live in
+# Internal/CPack/CPackIFW.cmake).
+
+#=============================================================================
+# Search Qt Installer Framework tools
+#=============================================================================
+
+# Default path
+
+foreach(_CPACK_IFW_PATH_VAR "CPACK_IFW_ROOT" "QTIFWDIR" "QTDIR")
+  if(DEFINED ${_CPACK_IFW_PATH_VAR}
+    AND NOT "${${_CPACK_IFW_PATH_VAR}}" STREQUAL "")
+    list(APPEND _CPACK_IFW_PATHS "${${_CPACK_IFW_PATH_VAR}}")
+  endif()
+  if(NOT "$ENV{${_CPACK_IFW_PATH_VAR}}" STREQUAL "")
+    list(APPEND _CPACK_IFW_PATHS "$ENV{${_CPACK_IFW_PATH_VAR}}")
+  endif()
+endforeach()
+if(WIN32)
+  list(APPEND _CPACK_IFW_PATHS
+    "$ENV{HOMEDRIVE}/Qt"
+    "C:/Qt")
+else()
+  list(APPEND _CPACK_IFW_PATHS
+    "$ENV{HOME}/Qt"
+    "/opt/Qt")
+endif()
+list(REMOVE_DUPLICATES _CPACK_IFW_PATHS)
+
+set(_CPACK_IFW_PREFIXES
+  # QtSDK
+  "Tools/QtInstallerFramework/"
+  # Second branch
+  "QtIFW"
+  # First branch
+  "QtIFW-")
+
+set(_CPACK_IFW_VERSIONS
+  "4.2"
+  "4.1"
+  "4.0"
+  "3.2"
+  "3.2.0"
+  "3.1"
+  "3.1.0"
+  "3.0"
+  "3.0.0"
+  "2.3"
+  "2.3.0"
+  "2.2"
+  "2.2.0"
+  "2.1"
+  "2.1.0"
+  "2.0"
+  "2.0.5"
+  "2.0.3"
+  "2.0.2"
+  "2.0.1"
+  "2.0.0"
+  "1.6"
+  "1.6.0"
+  "1.5"
+  "1.5.0"
+  "1.4"
+  "1.4.0"
+  "1.3"
+  "1.3.0")
+
+set(_CPACK_IFW_SUFFIXES "bin")
+foreach(_CPACK_IFW_PREFIX ${_CPACK_IFW_PREFIXES})
+  foreach(_CPACK_IFW_VERSION ${_CPACK_IFW_VERSIONS})
+    list(APPEND
+      _CPACK_IFW_SUFFIXES "${_CPACK_IFW_PREFIX}${_CPACK_IFW_VERSION}/bin")
+  endforeach()
+endforeach()
+
+# Look for 'binarycreator'
+
+find_program(CPACK_IFW_BINARYCREATOR_EXECUTABLE
+  NAMES binarycreator
+  PATHS ${_CPACK_IFW_PATHS}
+  PATH_SUFFIXES ${_CPACK_IFW_SUFFIXES}
+  DOC "QtIFW binarycreator command line client")
+
+mark_as_advanced(CPACK_IFW_BINARYCREATOR_EXECUTABLE)
+
+# Look for 'repogen'
+
+find_program(CPACK_IFW_REPOGEN_EXECUTABLE
+  NAMES repogen
+  PATHS ${_CPACK_IFW_PATHS}
+  PATH_SUFFIXES ${_CPACK_IFW_SUFFIXES}
+  DOC "QtIFW repogen command line client"
+  )
+mark_as_advanced(CPACK_IFW_REPOGEN_EXECUTABLE)
+
+# Look for 'installerbase'
+
+find_program(CPACK_IFW_INSTALLERBASE_EXECUTABLE
+  NAMES installerbase
+  PATHS ${_CPACK_IFW_PATHS}
+  PATH_SUFFIXES ${_CPACK_IFW_SUFFIXES}
+  DOC "QtIFW installer executable base"
+  )
+mark_as_advanced(CPACK_IFW_INSTALLERBASE_EXECUTABLE)
+
+# Look for 'devtool' (appeared in the second branch)
+
+find_program(CPACK_IFW_DEVTOOL_EXECUTABLE
+  NAMES devtool
+  PATHS ${_CPACK_IFW_PATHS}
+  PATH_SUFFIXES ${_CPACK_IFW_SUFFIXES}
+  DOC "QtIFW devtool command line client"
+  )
+mark_as_advanced(CPACK_IFW_DEVTOOL_EXECUTABLE)
+
+# Look for 'archivegen'
+
+find_program(CPACK_IFW_ARCHIVEGEN_EXECUTABLE
+  NAMES archivegen
+  PATHS ${_CPACK_IFW_PATHS}
+  PATH_SUFFIXES ${_CPACK_IFW_SUFFIXES}
+  DOC "QtIFW archivegen command line client"
+  )
+mark_as_advanced(CPACK_IFW_ARCHIVEGEN_EXECUTABLE)
+
+#
+## Next code is included only once
+#
+
+if(NOT CPackIFW_CMake_INCLUDED)
+set(CPackIFW_CMake_INCLUDED 1)
+
+#=============================================================================
+# Framework version
+#=============================================================================
+
+set(CPACK_IFW_FRAMEWORK_VERSION_FORCED ""
+  CACHE STRING "The forced version of used QtIFW tools")
+mark_as_advanced(CPACK_IFW_FRAMEWORK_VERSION_FORCED)
+set(CPACK_IFW_FRAMEWORK_VERSION_TIMEOUT 1
+  CACHE STRING "The timeout to return QtIFW framework version string from \"installerbase\" executable")
+mark_as_advanced(CPACK_IFW_FRAMEWORK_VERSION_TIMEOUT)
+if(CPACK_IFW_INSTALLERBASE_EXECUTABLE AND NOT CPACK_IFW_FRAMEWORK_VERSION_FORCED)
+  set(CPACK_IFW_FRAMEWORK_VERSION)
+  # Invoke version from "installerbase" executable
+  foreach(_ifw_version_argument --version --framework-version)
+    if(NOT CPACK_IFW_FRAMEWORK_VERSION)
+      execute_process(COMMAND
+        "${CPACK_IFW_INSTALLERBASE_EXECUTABLE}" ${_ifw_version_argument}
+        TIMEOUT ${CPACK_IFW_FRAMEWORK_VERSION_TIMEOUT}
+        RESULT_VARIABLE CPACK_IFW_FRAMEWORK_VERSION_RESULT
+        OUTPUT_VARIABLE CPACK_IFW_FRAMEWORK_VERSION_OUTPUT
+        OUTPUT_STRIP_TRAILING_WHITESPACE
+        ENCODING UTF8)
+      if(NOT CPACK_IFW_FRAMEWORK_VERSION_RESULT AND CPACK_IFW_FRAMEWORK_VERSION_OUTPUT)
+        string(REGEX MATCH "[0-9]+(\\.[0-9]+)*"
+          CPACK_IFW_FRAMEWORK_VERSION "${CPACK_IFW_FRAMEWORK_VERSION_OUTPUT}")
+        if(CPACK_IFW_FRAMEWORK_VERSION)
+          if("${_ifw_version_argument}" STREQUAL "--framework-version")
+            set(CPACK_IFW_FRAMEWORK_VERSION_SOURCE "INSTALLERBASE_FRAMEWORK_VERSION")
+          elseif("${_ifw_version_argument}" STREQUAL "--version")
+            set(CPACK_IFW_FRAMEWORK_VERSION_SOURCE "INSTALLERBASE_FRAMEWORK_VERSION")
+          endif()
+        endif()
+      endif()
+    endif()
+  endforeach()
+  # Finally try to get version from executable path
+  if(NOT CPACK_IFW_FRAMEWORK_VERSION)
+    string(REGEX MATCH "[0-9]+(\\.[0-9]+)*"
+      CPACK_IFW_FRAMEWORK_VERSION "${CPACK_IFW_INSTALLERBASE_EXECUTABLE}")
+    if(CPACK_IFW_FRAMEWORK_VERSION)
+      set(CPACK_IFW_FRAMEWORK_VERSION_SOURCE "INSTALLERBASE_PATH")
+    endif()
+  endif()
+elseif(CPACK_IFW_FRAMEWORK_VERSION_FORCED)
+  set(CPACK_IFW_FRAMEWORK_VERSION ${CPACK_IFW_FRAMEWORK_VERSION_FORCED})
+  set(CPACK_IFW_FRAMEWORK_VERSION_SOURCE "FORCED")
+endif()
+if(CPACK_IFW_VERBOSE)
+  if(CPACK_IFW_FRAMEWORK_VERSION AND CPACK_IFW_FRAMEWORK_VERSION_FORCED)
+    message(STATUS "Found QtIFW ${CPACK_IFW_FRAMEWORK_VERSION} (forced) version")
+  elseif(CPACK_IFW_FRAMEWORK_VERSION)
+    message(STATUS "Found QtIFW ${CPACK_IFW_FRAMEWORK_VERSION} version")
+  endif()
+endif()
+if(CPACK_IFW_INSTALLERBASE_EXECUTABLE AND NOT CPACK_IFW_FRAMEWORK_VERSION)
+  message(WARNING "Could not detect QtIFW tools version. Set used version to variable \"CPACK_IFW_FRAMEWORK_VERSION_FORCED\" manually.")
+endif()
+
+#=============================================================================
+# Macro definition
+#=============================================================================
+
+# Macro definition based on CPackComponent
+
+if(NOT CPackComponent_CMake_INCLUDED)
+    include(CPackComponent)
+endif()
+
+# Resolve full filename for script file
+macro(_cpack_ifw_resolve_script _variable)
+  set(_ifw_script_macro ${_variable})
+  set(_ifw_script_file ${${_ifw_script_macro}})
+  if(DEFINED ${_ifw_script_macro})
+    get_filename_component(${_ifw_script_macro} ${_ifw_script_file} ABSOLUTE)
+    set(_ifw_script_file ${${_ifw_script_macro}})
+    if(NOT EXISTS ${_ifw_script_file})
+      message(WARNING "CPack IFW: script file \"${_ifw_script_file}\" does not exist")
+      set(${_ifw_script_macro})
+    endif()
+  endif()
+endmacro()
+
+# Resolve full path to license file
+macro(_cpack_ifw_resolve_lisenses _variable)
+  if(${_variable})
+    set(_ifw_license_file FALSE)
+    set(_ifw_licenses_fix)
+    foreach(_ifw_licenses_arg ${${_variable}})
+      if(_ifw_license_file)
+        get_filename_component(_ifw_licenses_arg "${_ifw_licenses_arg}" ABSOLUTE)
+        set(_ifw_license_file FALSE)
+      else()
+        set(_ifw_license_file TRUE)
+      endif()
+      list(APPEND _ifw_licenses_fix "${_ifw_licenses_arg}")
+    endforeach(_ifw_licenses_arg)
+    set(${_variable} "${_ifw_licenses_fix}")
+  endif()
+endmacro()
+
+# Resolve full path to a list of provided files
+macro(_cpack_ifw_resolve_file_list _variable)
+  if(${_variable})
+    set(_ifw_list_fix)
+    foreach(_ifw_file_arg ${${_variable}})
+      get_filename_component(_ifw_file_arg "${_ifw_file_arg}" ABSOLUTE)
+      if(EXISTS ${_ifw_file_arg})
+        list(APPEND _ifw_list_fix "${_ifw_file_arg}")
+      else()
+        message(WARNING "CPack IFW: page file \"${_ifw_file_arg}\" does not exist. Skipping")
+      endif()
+    endforeach(_ifw_file_arg)
+    set(${_variable} "${_ifw_list_fix}")
+  endif()
+endmacro()
+
+# Macro for configure component
+macro(cpack_ifw_configure_component compname)
+
+  string(TOUPPER ${compname} _CPACK_IFWCOMP_UNAME)
+
+  set(_IFW_OPT COMMON ESSENTIAL VIRTUAL FORCED_INSTALLATION REQUIRES_ADMIN_RIGHTS)
+  set(_IFW_ARGS NAME VERSION RELEASE_DATE SCRIPT PRIORITY SORTING_PRIORITY UPDATE_TEXT DEFAULT CHECKABLE)
+  set(_IFW_MULTI_ARGS DISPLAY_NAME DESCRIPTION DEPENDS DEPENDENCIES AUTO_DEPEND_ON LICENSES USER_INTERFACES TRANSLATIONS REPLACES)
+  cmake_parse_arguments(CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME} "${_IFW_OPT}" "${_IFW_ARGS}" "${_IFW_MULTI_ARGS}" ${ARGN})
+
+  _cpack_ifw_resolve_script(CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME}_SCRIPT)
+  _cpack_ifw_resolve_lisenses(CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME}_LICENSES)
+  _cpack_ifw_resolve_file_list(CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME}_USER_INTERFACES)
+  _cpack_ifw_resolve_file_list(CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME}_TRANSLATIONS)
+
+  set(_CPACK_IFWCOMP_STR "\n# Configuration for IFW component \"${compname}\"\n")
+
+  foreach(_IFW_ARG_NAME ${_IFW_OPT})
+  cpack_append_option_set_command(
+    CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME}_${_IFW_ARG_NAME}
+    _CPACK_IFWCOMP_STR)
+  endforeach()
+
+  foreach(_IFW_ARG_NAME ${_IFW_ARGS})
+  cpack_append_string_variable_set_command(
+    CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME}_${_IFW_ARG_NAME}
+    _CPACK_IFWCOMP_STR)
+  endforeach()
+
+  foreach(_IFW_ARG_NAME ${_IFW_MULTI_ARGS})
+  cpack_append_list_variable_set_command(
+    CPACK_IFW_COMPONENT_${_CPACK_IFWCOMP_UNAME}_${_IFW_ARG_NAME}
+    _CPACK_IFWCOMP_STR)
+  endforeach()
+
+  if(CPack_CMake_INCLUDED)
+    file(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" "${_CPACK_IFWCOMP_STR}")
+  endif()
+
+endmacro()
+
+# Macro for configure group
+macro(cpack_ifw_configure_component_group grpname)
+
+  string(TOUPPER ${grpname} _CPACK_IFWGRP_UNAME)
+
+  set(_IFW_OPT VIRTUAL FORCED_INSTALLATION REQUIRES_ADMIN_RIGHTS)
+  set(_IFW_ARGS NAME VERSION RELEASE_DATE SCRIPT PRIORITY SORTING_PRIORITY UPDATE_TEXT DEFAULT CHECKABLE)
+  set(_IFW_MULTI_ARGS DISPLAY_NAME DESCRIPTION DEPENDS DEPENDENCIES AUTO_DEPEND_ON LICENSES USER_INTERFACES TRANSLATIONS REPLACES)
+  cmake_parse_arguments(CPACK_IFW_COMPONENT_GROUP_${_CPACK_IFWGRP_UNAME} "${_IFW_OPT}" "${_IFW_ARGS}" "${_IFW_MULTI_ARGS}" ${ARGN})
+
+  _cpack_ifw_resolve_script(CPACK_IFW_COMPONENT_GROUP_${_CPACK_IFWGRP_UNAME}_SCRIPT)
+  _cpack_ifw_resolve_lisenses(CPACK_IFW_COMPONENT_GROUP_${_CPACK_IFWGRP_UNAME}_LICENSES)
+  _cpack_ifw_resolve_file_list(CPACK_IFW_COMPONENT_GROUP_${_CPACK_IFWGRP_UNAME}_USER_INTERFACES)
+  _cpack_ifw_resolve_file_list(CPACK_IFW_COMPONENT_GROUP_${_CPACK_IFWGRP_UNAME}_TRANSLATIONS)
+
+  set(_CPACK_IFWGRP_STR "\n# Configuration for IFW component group \"${grpname}\"\n")
+
+  foreach(_IFW_ARG_NAME ${_IFW_OPT})
+  cpack_append_option_set_command(
+    CPACK_IFW_COMPONENT_GROUP_${_CPACK_IFWGRP_UNAME}_${_IFW_ARG_NAME}
+    _CPACK_IFWGRP_STR)
+  endforeach()
+
+  foreach(_IFW_ARG_NAME ${_IFW_ARGS})
+  cpack_append_string_variable_set_command(
+    CPACK_IFW_COMPONENT_GROUP_${_CPACK_IFWGRP_UNAME}_${_IFW_ARG_NAME}
+    _CPACK_IFWGRP_STR)
+  endforeach()
+
+  foreach(_IFW_ARG_NAME ${_IFW_MULTI_ARGS})
+  cpack_append_list_variable_set_command(
+    CPACK_IFW_COMPONENT_GROUP_${_CPACK_IFWGRP_UNAME}_${_IFW_ARG_NAME}
+    _CPACK_IFWGRP_STR)
+  endforeach()
+
+  if(CPack_CMake_INCLUDED)
+    file(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" "${_CPACK_IFWGRP_STR}")
+  endif()
+endmacro()
+
+# Macro for adding repository
+macro(cpack_ifw_add_repository reponame)
+
+  string(TOUPPER ${reponame} _CPACK_IFWREPO_UNAME)
+
+  set(_IFW_OPT DISABLED)
+  set(_IFW_ARGS URL USERNAME PASSWORD DISPLAY_NAME)
+  set(_IFW_MULTI_ARGS)
+  cmake_parse_arguments(CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME} "${_IFW_OPT}" "${_IFW_ARGS}" "${_IFW_MULTI_ARGS}" ${ARGN})
+
+  set(_CPACK_IFWREPO_STR "\n# Configuration for IFW repository \"${reponame}\"\n")
+
+  foreach(_IFW_ARG_NAME ${_IFW_OPT})
+  cpack_append_option_set_command(
+    CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME}_${_IFW_ARG_NAME}
+    _CPACK_IFWREPO_STR)
+  endforeach()
+
+  foreach(_IFW_ARG_NAME ${_IFW_ARGS})
+  cpack_append_string_variable_set_command(
+    CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME}_${_IFW_ARG_NAME}
+    _CPACK_IFWREPO_STR)
+  endforeach()
+
+  foreach(_IFW_ARG_NAME ${_IFW_MULTI_ARGS})
+  cpack_append_variable_set_command(
+    CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME}_${_IFW_ARG_NAME}
+    _CPACK_IFWREPO_STR)
+  endforeach()
+
+  list(APPEND CPACK_IFW_REPOSITORIES_ALL ${reponame})
+  string(APPEND _CPACK_IFWREPO_STR "list(APPEND CPACK_IFW_REPOSITORIES_ALL ${reponame})\n")
+
+  if(CPack_CMake_INCLUDED)
+    file(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" "${_CPACK_IFWREPO_STR}")
+  endif()
+
+endmacro()
+
+# Macro for updating repository
+macro(cpack_ifw_update_repository reponame)
+
+  string(TOUPPER ${reponame} _CPACK_IFWREPO_UNAME)
+
+  set(_IFW_OPT ADD REMOVE REPLACE DISABLED)
+  set(_IFW_ARGS URL OLD_URL NEW_URL USERNAME PASSWORD DISPLAY_NAME)
+  set(_IFW_MULTI_ARGS)
+  cmake_parse_arguments(CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME} "${_IFW_OPT}" "${_IFW_ARGS}" "${_IFW_MULTI_ARGS}" ${ARGN})
+
+  set(_CPACK_IFWREPO_STR "\n# Configuration for IFW repository \"${reponame}\" update\n")
+
+  foreach(_IFW_ARG_NAME ${_IFW_OPT})
+  cpack_append_option_set_command(
+    CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME}_${_IFW_ARG_NAME}
+    _CPACK_IFWREPO_STR)
+  endforeach()
+
+  foreach(_IFW_ARG_NAME ${_IFW_ARGS})
+  cpack_append_string_variable_set_command(
+    CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME}_${_IFW_ARG_NAME}
+    _CPACK_IFWREPO_STR)
+  endforeach()
+
+  foreach(_IFW_ARG_NAME ${_IFW_MULTI_ARGS})
+  cpack_append_variable_set_command(
+    CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME}_${_IFW_ARG_NAME}
+    _CPACK_IFWREPO_STR)
+  endforeach()
+
+  if(CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME}_ADD
+    OR CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME}_REMOVE
+    OR CPACK_IFW_REPOSITORY_${_CPACK_IFWREPO_UNAME}_REPLACE)
+    list(APPEND CPACK_IFW_REPOSITORIES_ALL ${reponame})
+    string(APPEND _CPACK_IFWREPO_STR "list(APPEND CPACK_IFW_REPOSITORIES_ALL ${reponame})\n")
+  else()
+    set(_CPACK_IFWREPO_STR)
+  endif()
+
+  if(CPack_CMake_INCLUDED AND _CPACK_IFWREPO_STR)
+    file(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" "${_CPACK_IFWREPO_STR}")
+  endif()
+
+endmacro()
+
+# Macro for adding resources
+macro(cpack_ifw_add_package_resources)
+  set(_CPACK_IFW_PACKAGE_RESOURCES ${ARGV})
+  _cpack_ifw_resolve_file_list(_CPACK_IFW_PACKAGE_RESOURCES)
+  list(APPEND CPACK_IFW_PACKAGE_RESOURCES ${_CPACK_IFW_PACKAGE_RESOURCES})
+  set(_CPACK_IFWQRC_STR "list(APPEND CPACK_IFW_PACKAGE_RESOURCES \"${_CPACK_IFW_PACKAGE_RESOURCES}\")\n")
+  if(CPack_CMake_INCLUDED)
+    file(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" "${_CPACK_IFWQRC_STR}")
+  endif()
+endmacro()
+
+# Resolve package control script
+_cpack_ifw_resolve_script(CPACK_IFW_PACKAGE_CONTROL_SCRIPT)
+
+endif() # NOT CPackIFW_CMake_INCLUDED
diff --git a/share/cmake-3.22/Modules/CPackIFWConfigureFile.cmake b/share/cmake-3.22/Modules/CPackIFWConfigureFile.cmake
new file mode 100644
index 0000000..296b13f
--- /dev/null
+++ b/share/cmake-3.22/Modules/CPackIFWConfigureFile.cmake
@@ -0,0 +1,68 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CPackIFWConfigureFile
+---------------------
+
+.. versionadded:: 3.8
+
+The module defines :command:`configure_file` similar command to
+configure file templates prepared in QtIFW/SDK/Creator style.
+
+
+Commands
+^^^^^^^^
+
+The module defines the following commands:
+
+.. command:: cpack_ifw_configure_file
+
+  Copy a file to another location and modify its contents.
+
+  ::
+
+    cpack_ifw_configure_file(<input> <output>)
+
+  Copies an ``<input>`` file to an ``<output>`` file and substitutes variable
+  values referenced as ``%{VAR}`` or ``%VAR%`` in the input file content.
+  Each variable reference will be replaced with the current value of the
+  variable, or the empty string if the variable is not defined.
+
+#]=======================================================================]
+
+# NOTE: This file used to himself packaging via CPack IFW generator and
+# should be compatible with minimal CMake version defined in
+# ../CMakeLists.txt file.
+
+if(NOT DEFINED CPackIFWConfigureFile_CMake_INCLUDED)
+set(CPackIFWConfigureFile_CMake_INCLUDED 1)
+
+macro(cpack_ifw_configure_file INPUT OUTPUT)
+  file(READ "${INPUT}" _tmp)
+  foreach(_tmp_regex "%{([^%}]+)}" "%([^%]+)%")
+    string(REGEX MATCHALL "${_tmp_regex}" _tmp_vars "${_tmp}")
+    while(_tmp_vars)
+      foreach(_tmp_var ${_tmp_vars})
+        string(REGEX REPLACE "${_tmp_regex}" "\\1"
+          _tmp_var_name "${_tmp_var}")
+        if(DEFINED ${_tmp_var_name})
+          set(_tmp_var_value "${${_tmp_var_name}}")
+        elseif(NOT "$ENV{${_tmp_var_name}}" STREQUAL "")
+          set(_tmp_var_value "$ENV{${_tmp_var_name}}")
+        else()
+          set(_tmp_var_value "")
+        endif()
+        string(REPLACE "${_tmp_var}" "${_tmp_var_value}" _tmp "${_tmp}")
+      endforeach()
+      string(REGEX MATCHALL "${_tmp_regex}" _tmp_vars "${_tmp}")
+    endwhile()
+  endforeach()
+  if(IS_ABSOLUTE "${OUTPUT}")
+    file(WRITE "${OUTPUT}" "${_tmp}")
+  else()
+    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT}" "${_tmp}")
+  endif()
+endmacro()
+
+endif() # NOT DEFINED CPackIFWConfigureFile_CMake_INCLUDED
diff --git a/share/cmake-3.22/Modules/CSharpUtilities.cmake b/share/cmake-3.22/Modules/CSharpUtilities.cmake
new file mode 100644
index 0000000..dedb146
--- /dev/null
+++ b/share/cmake-3.22/Modules/CSharpUtilities.cmake
@@ -0,0 +1,313 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CSharpUtilities
+---------------
+
+.. versionadded:: 3.8
+
+Functions to make configuration of CSharp/.NET targets easier.
+
+A collection of CMake utility functions useful for dealing with CSharp
+targets for Visual Studio generators from version 2010 and later.
+
+The following functions are provided by this module:
+
+**Main functions**
+
+- :command:`csharp_set_windows_forms_properties`
+- :command:`csharp_set_designer_cs_properties`
+- :command:`csharp_set_xaml_cs_properties`
+
+**Helper functions**
+
+- :command:`csharp_get_filename_keys`
+- :command:`csharp_get_filename_key_base`
+- :command:`csharp_get_dependentupon_name`
+
+Main functions provided by the module
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. command:: csharp_set_windows_forms_properties
+
+  Sets source file properties for use of Windows Forms. Use this, if your CSharp
+  target uses Windows Forms::
+
+    csharp_set_windows_forms_properties([<file1> [<file2> [...]]])
+
+  ``<fileN>``
+    List of all source files which are relevant for setting the
+    :prop_sf:`VS_CSHARP_<tagname>` properties (including ``.cs``, ``.resx`` and
+    ``.Designer.cs`` extensions).
+
+  In the list of all given files for all files ending with ``.Designer.cs`` and
+  ``.resx`` is searched.  For every *designer* or *resource* file a file with the
+  same base name but only ``.cs`` as extension is searched.  If this is found, the
+  :prop_sf:`VS_CSHARP_<tagname>` properties are set as follows:
+
+  for the **.cs** file:
+   - VS_CSHARP_SubType "Form"
+
+  for the **.Designer.cs** file (if it exists):
+   - VS_CSHARP_DependentUpon <cs-filename>
+   - VS_CSHARP_DesignTime "" (delete tag if previously defined)
+   - VS_CSHARP_AutoGen ""(delete tag if previously defined)
+
+  for the **.resx** file (if it exists):
+   - VS_RESOURCE_GENERATOR "" (delete tag if previously defined)
+   - VS_CSHARP_DependentUpon <cs-filename>
+   - VS_CSHARP_SubType "Designer"
+
+.. command:: csharp_set_designer_cs_properties
+
+  Sets source file properties of ``.Designer.cs`` files depending on
+  sibling filenames. Use this, if your CSharp target does **not**
+  use Windows Forms (for Windows Forms use
+  :command:`csharp_set_designer_cs_properties` instead)::
+
+    csharp_set_designer_cs_properties([<file1> [<file2> [...]]])
+
+  ``<fileN>``
+    List of all source files which are relevant for setting the
+    :prop_sf:`VS_CSHARP_<tagname>` properties (including ``.cs``,
+    ``.resx``, ``.settings`` and ``.Designer.cs`` extensions).
+
+  In the list of all given files for all files ending with
+  ``.Designer.cs`` is searched. For every *designer* file all files
+  with the same base name but different extensions are searched. If
+  a match is found, the source file properties of the *designer* file
+  are set depending on the extension of the matched file:
+
+  if match is **.resx** file:
+   - VS_CSHARP_AutoGen "True"
+   - VS_CSHARP_DesignTime "True"
+   - VS_CSHARP_DependentUpon <resx-filename>
+
+  if match is **.cs** file:
+   - VS_CSHARP_DependentUpon <cs-filename>
+
+  if match is **.settings** file:
+   - VS_CSHARP_AutoGen "True"
+   - VS_CSHARP_DesignTimeSharedInput "True"
+   - VS_CSHARP_DependentUpon <settings-filename>
+
+.. note::
+
+    Because the source file properties of the ``.Designer.cs`` file are set according
+    to the found matches and every match sets the **VS_CSHARP_DependentUpon**
+    property, there should only be one match for each ``Designer.cs`` file.
+
+.. command:: csharp_set_xaml_cs_properties
+
+  Sets source file properties for use of Windows Presentation Foundation (WPF) and
+  XAML. Use this, if your CSharp target uses WPF/XAML::
+
+    csharp_set_xaml_cs_properties([<file1> [<file2> [...]]])
+
+  ``<fileN>``
+    List of all source files which are relevant for setting the
+    :prop_sf:`VS_CSHARP_<tagname>` properties (including ``.cs``,
+    ``.xaml``, and ``.xaml.cs`` extensions).
+
+  In the list of all given files for all files ending with
+  ``.xaml.cs`` is searched. For every *xaml-cs* file, a file
+  with the same base name but extension ``.xaml`` is searched.
+  If a match is found, the source file properties of the ``.xaml.cs``
+  file are set:
+
+   - VS_CSHARP_DependentUpon <xaml-filename>
+
+Helper functions which are used by the above ones
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. command:: csharp_get_filename_keys
+
+  Helper function which computes a list of key values to identify
+  source files independently of relative/absolute paths given in cmake
+  and eliminates case sensitivity::
+
+    csharp_get_filename_keys(OUT [<file1> [<file2> [...]]])
+
+  ``OUT``
+    Name of the variable in which the list of keys is stored
+
+  ``<fileN>``
+    filename(s) as given to to CSharp target using :command:`add_library`
+    or :command:`add_executable`
+
+  In some way the function applies a canonicalization to the source names.
+  This is necessary to find file matches if the files have been added to
+  the target with different directory prefixes:
+
+  .. code-block:: cmake
+
+    add_library(lib
+      myfile.cs
+      ${CMAKE_CURRENT_SOURCE_DIR}/myfile.Designer.cs)
+
+    set_source_files_properties(myfile.Designer.cs PROPERTIES
+      VS_CSHARP_DependentUpon myfile.cs)
+
+    # this will fail, because in cmake
+    #  - ${CMAKE_CURRENT_SOURCE_DIR}/myfile.Designer.cs
+    #  - myfile.Designer.cs
+    # are not the same source file. The source file property is not set.
+
+.. command:: csharp_get_filename_key_base
+
+  Returns the full filepath and name **without** extension of a key.
+  KEY is expected to be a key from csharp_get_filename_keys. In BASE
+  the value of KEY without the file extension is returned::
+
+    csharp_get_filename_key_base(BASE KEY)
+
+  ``BASE``
+    Name of the variable with the computed "base" of ``KEY``.
+
+  ``KEY``
+    The key of which the base will be computed. Expected to be a
+    upper case full filename.
+
+.. command:: csharp_get_dependentupon_name
+
+  Computes a string which can be used as value for the source file property
+  :prop_sf:`VS_CSHARP_<tagname>` with *target* being ``DependentUpon``::
+
+    csharp_get_dependentupon_name(NAME FILE)
+
+  ``NAME``
+    Name of the variable with the result value
+
+  ``FILE``
+    Filename to convert to ``<DependentUpon>`` value
+
+  Actually this is only the filename without any path given at the moment.
+
+#]=======================================================================]
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0057 NEW) # if IN_LIST
+
+function(csharp_get_filename_keys OUT)
+  set(${OUT} "")
+  foreach(f ${ARGN})
+    get_filename_component(f ${f} REALPATH)
+    string(TOUPPER ${f} f)
+    list(APPEND ${OUT} ${f})
+  endforeach()
+  set(${OUT} "${${OUT}}" PARENT_SCOPE)
+endfunction()
+
+function(csharp_get_filename_key_base base key)
+  get_filename_component(dir ${key} DIRECTORY)
+  get_filename_component(fil ${key} NAME_WE)
+  set(${base} "${dir}/${fil}" PARENT_SCOPE)
+endfunction()
+
+function(csharp_get_dependentupon_name out in)
+  get_filename_component(${out} ${in} NAME)
+  set(${out} ${${out}} PARENT_SCOPE)
+endfunction()
+
+function(csharp_set_windows_forms_properties)
+  csharp_get_filename_keys(fileKeys ${ARGN})
+  foreach(key ${fileKeys})
+    get_filename_component(ext ${key} EXT)
+    if(${ext} STREQUAL ".DESIGNER.CS" OR
+       ${ext} STREQUAL ".RESX")
+      csharp_get_filename_key_base(NAME_BASE ${key})
+      list(FIND fileKeys "${NAME_BASE}.CS" FILE_INDEX)
+      if(NOT ${FILE_INDEX} EQUAL -1)
+        list(GET ARGN ${FILE_INDEX} FILE_NAME)
+        # set properties of main form file
+        set_source_files_properties("${FILE_NAME}"
+          PROPERTIES
+          VS_CSHARP_SubType "Form")
+        csharp_get_dependentupon_name(LINK "${FILE_NAME}")
+        # set properties of designer file (if found)
+        list(FIND fileKeys "${NAME_BASE}.DESIGNER.CS" FILE_INDEX)
+        if(NOT ${FILE_INDEX} EQUAL -1)
+          list(GET ARGN ${FILE_INDEX} FILE_NAME)
+          set_source_files_properties("${FILE_NAME}"
+            PROPERTIES
+            VS_CSHARP_DependentUpon "${LINK}"
+            VS_CSHARP_DesignTime ""
+            VS_CSHARP_AutoGen "")
+        endif()
+        # set properties of corresponding resource file (if found)
+        list(FIND fileKeys "${NAME_BASE}.RESX" FILE_INDEX)
+        if(NOT ${FILE_INDEX} EQUAL -1)
+          list(GET ARGN ${FILE_INDEX} FILE_NAME)
+          set_source_files_properties("${FILE_NAME}"
+            PROPERTIES
+            VS_RESOURCE_GENERATOR ""
+            VS_CSHARP_DependentUpon "${LINK}"
+            VS_CSHARP_SubType "Designer")
+        endif()
+      endif()
+    endif()
+  endforeach()
+endfunction()
+
+function(csharp_set_designer_cs_properties)
+  csharp_get_filename_keys(fileKeys ${ARGN})
+  set(INDEX -1)
+  foreach(key ${fileKeys})
+    math(EXPR INDEX "${INDEX}+1")
+    list(GET ARGN ${INDEX} source)
+    get_filename_component(ext ${key} EXT)
+    if(${ext} STREQUAL ".DESIGNER.CS")
+      csharp_get_filename_key_base(NAME_BASE ${key})
+      if("${NAME_BASE}.RESX" IN_LIST fileKeys)
+        list(FIND fileKeys "${NAME_BASE}.RESX" FILE_INDEX)
+        list(GET ARGN ${FILE_INDEX} FILE_NAME)
+        csharp_get_dependentupon_name(LINK "${FILE_NAME}")
+        set_source_files_properties("${source}"
+          PROPERTIES
+          VS_CSHARP_AutoGen "True"
+          VS_CSHARP_DesignTime "True"
+          VS_CSHARP_DependentUpon "${LINK}")
+      elseif("${NAME_BASE}.CS" IN_LIST fileKeys)
+        list(FIND fileKeys "${NAME_BASE}.CS" FILE_INDEX)
+        list(GET ARGN ${FILE_INDEX} FILE_NAME)
+        csharp_get_dependentupon_name(LINK "${FILE_NAME}")
+        set_source_files_properties("${source}"
+          PROPERTIES
+          VS_CSHARP_DependentUpon "${LINK}")
+      elseif("${NAME_BASE}.SETTINGS" IN_LIST fileKeys)
+        list(FIND fileKeys "${NAME_BASE}.SETTINGS" FILE_INDEX)
+        list(GET ARGN ${FILE_INDEX} FILE_NAME)
+        csharp_get_dependentupon_name(LINK "${FILE_NAME}")
+        set_source_files_properties("${source}"
+          PROPERTIES
+          VS_CSHARP_AutoGen "True"
+          VS_CSHARP_DesignTimeSharedInput "True"
+          VS_CSHARP_DependentUpon "${LINK}")
+      endif()
+    endif()
+  endforeach()
+endfunction()
+
+function(csharp_set_xaml_cs_properties)
+  csharp_get_filename_keys(fileKeys ${ARGN})
+  set(INDEX -1)
+  foreach(key ${fileKeys})
+    math(EXPR INDEX "${INDEX}+1")
+    list(GET ARGN ${INDEX} source)
+    get_filename_component(ext ${key} EXT)
+    if(${ext} STREQUAL ".XAML.CS")
+      csharp_get_filename_key_base(NAME_BASE ${key})
+      if("${NAME_BASE}.XAML" IN_LIST fileKeys)
+        list(FIND fileKeys "${NAME_BASE}.XAML" FILE_INDEX)
+        list(GET ARGN ${FILE_INDEX} FILE_NAME)
+        csharp_get_dependentupon_name(LINK "${FILE_NAME}")
+        set_source_files_properties("${source}"
+          PROPERTIES
+          VS_CSHARP_DependentUpon "${LINK}")
+      endif()
+    endif()
+  endforeach()
+endfunction()
+
+cmake_policy(POP)
diff --git a/share/cmake-3.22/Modules/CTest.cmake b/share/cmake-3.22/Modules/CTest.cmake
new file mode 100644
index 0000000..8f8ebb4
--- /dev/null
+++ b/share/cmake-3.22/Modules/CTest.cmake
@@ -0,0 +1,267 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CTest
+-----
+
+Configure a project for testing with CTest/CDash
+
+Include this module in the top CMakeLists.txt file of a project to
+enable testing with CTest and dashboard submissions to CDash::
+
+  project(MyProject)
+  ...
+  include(CTest)
+
+The module automatically creates a ``BUILD_TESTING`` option that selects
+whether to enable testing support (``ON`` by default).  After including
+the module, use code like::
+
+  if(BUILD_TESTING)
+    # ... CMake code to create tests ...
+  endif()
+
+to creating tests when testing is enabled.
+
+To enable submissions to a CDash server, create a ``CTestConfig.cmake``
+file at the top of the project with content such as::
+
+  set(CTEST_NIGHTLY_START_TIME "01:00:00 UTC")
+  set(CTEST_SUBMIT_URL "http://my.cdash.org/submit.php?project=MyProject")
+
+(the CDash server can provide the file to a project administrator who
+configures ``MyProject``).  Settings in the config file are shared by
+both this ``CTest`` module and the :manual:`ctest(1)` command-line
+:ref:`Dashboard Client` mode (``ctest -S``).
+
+While building a project for submission to CDash, CTest scans the
+build output for errors and warnings and reports them with surrounding
+context from the build log.  This generic approach works for all build
+tools, but does not give details about the command invocation that
+produced a given problem.  One may get more detailed reports by setting
+the :variable:`CTEST_USE_LAUNCHERS` variable::
+
+  set(CTEST_USE_LAUNCHERS 1)
+
+in the ``CTestConfig.cmake`` file.
+#]=======================================================================]
+
+option(BUILD_TESTING "Build the testing tree." ON)
+
+# function to turn generator name into a version string
+# like vs9 or vs10
+function(GET_VS_VERSION_STRING generator var)
+  string(REGEX REPLACE "Visual Studio ([0-9][0-9]?)($|.*)" "\\1"
+    NUMBER "${generator}")
+    set(ver_string "vs${NUMBER}")
+  set(${var} ${ver_string} PARENT_SCOPE)
+endfunction()
+
+include(CTestUseLaunchers)
+
+if(BUILD_TESTING)
+  # Setup some auxiliary macros
+  macro(SET_IF_NOT_SET var val)
+    if(NOT DEFINED "${var}")
+      set("${var}" "${val}")
+    endif()
+  endmacro()
+
+  macro(SET_IF_SET var val)
+    if(NOT "${val}" STREQUAL "")
+      set("${var}" "${val}")
+    endif()
+  endmacro()
+
+  macro(SET_IF_SET_AND_NOT_SET var val)
+    if(NOT "${val}" STREQUAL "")
+      SET_IF_NOT_SET("${var}" "${val}")
+    endif()
+  endmacro()
+
+  # Make sure testing is enabled
+  enable_testing()
+
+  if(EXISTS "${PROJECT_SOURCE_DIR}/CTestConfig.cmake")
+    include("${PROJECT_SOURCE_DIR}/CTestConfig.cmake")
+    SET_IF_SET_AND_NOT_SET(NIGHTLY_START_TIME "${CTEST_NIGHTLY_START_TIME}")
+    SET_IF_SET_AND_NOT_SET(SUBMIT_URL "${CTEST_SUBMIT_URL}")
+    SET_IF_SET_AND_NOT_SET(DROP_METHOD "${CTEST_DROP_METHOD}")
+    SET_IF_SET_AND_NOT_SET(DROP_SITE "${CTEST_DROP_SITE}")
+    SET_IF_SET_AND_NOT_SET(DROP_SITE_USER "${CTEST_DROP_SITE_USER}")
+    SET_IF_SET_AND_NOT_SET(DROP_SITE_PASSWORD "${CTEST_DROP_SITE_PASWORD}")
+    SET_IF_SET_AND_NOT_SET(DROP_SITE_MODE "${CTEST_DROP_SITE_MODE}")
+    SET_IF_SET_AND_NOT_SET(DROP_LOCATION "${CTEST_DROP_LOCATION}")
+    SET_IF_SET_AND_NOT_SET(TRIGGER_SITE "${CTEST_TRIGGER_SITE}")
+    SET_IF_SET_AND_NOT_SET(UPDATE_TYPE "${CTEST_UPDATE_TYPE}")
+  endif()
+
+  # the project can have a DartConfig.cmake file
+  if(EXISTS "${PROJECT_SOURCE_DIR}/DartConfig.cmake")
+    include("${PROJECT_SOURCE_DIR}/DartConfig.cmake")
+  else()
+    # Dashboard is opened for submissions for a 24 hour period starting at
+    # the specified NIGHTLY_START_TIME. Time is specified in 24 hour format.
+    SET_IF_NOT_SET (NIGHTLY_START_TIME "00:00:00 EDT")
+    SET_IF_NOT_SET(DROP_METHOD "http")
+    SET_IF_NOT_SET (COMPRESS_SUBMISSION ON)
+  endif()
+  SET_IF_NOT_SET (NIGHTLY_START_TIME "00:00:00 EDT")
+
+  if(NOT SUBMIT_URL)
+    set(SUBMIT_URL "${DROP_METHOD}://")
+    if(DROP_SITE_USER)
+      string(APPEND SUBMIT_URL "${DROP_SITE_USER}")
+      if(DROP_SITE_PASSWORD)
+        string(APPEND SUBMIT_URL ":${DROP_SITE_PASSWORD}")
+      endif()
+      string(APPEND SUBMIT_URL "@")
+    endif()
+    string(APPEND SUBMIT_URL "${DROP_SITE}${DROP_LOCATION}")
+  endif()
+
+  if(NOT UPDATE_TYPE)
+    if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/CVS")
+      set(UPDATE_TYPE cvs)
+    elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.svn")
+      set(UPDATE_TYPE svn)
+    elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.bzr")
+      set(UPDATE_TYPE bzr)
+    elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.hg")
+      set(UPDATE_TYPE hg)
+    elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git")
+      set(UPDATE_TYPE git)
+    endif()
+  endif()
+
+  string(TOLOWER "${UPDATE_TYPE}" _update_type)
+  if("${_update_type}" STREQUAL "cvs")
+    find_program(CVSCOMMAND cvs )
+    set(CVS_UPDATE_OPTIONS "-d -A -P" CACHE STRING
+      "Options passed to the cvs update command.")
+    set(UPDATE_COMMAND "${CVSCOMMAND}")
+    set(UPDATE_OPTIONS "${CVS_UPDATE_OPTIONS}")
+  elseif("${_update_type}" STREQUAL "svn")
+    find_program(SVNCOMMAND svn)
+    set(UPDATE_COMMAND "${SVNCOMMAND}")
+    set(UPDATE_OPTIONS "${SVN_UPDATE_OPTIONS}")
+  elseif("${_update_type}" STREQUAL "bzr")
+    find_program(BZRCOMMAND bzr)
+    set(UPDATE_COMMAND "${BZRCOMMAND}")
+    set(UPDATE_OPTIONS "${BZR_UPDATE_OPTIONS}")
+  elseif("${_update_type}" STREQUAL "hg")
+    find_program(HGCOMMAND hg)
+    set(UPDATE_COMMAND "${HGCOMMAND}")
+    set(UPDATE_OPTIONS "${HG_UPDATE_OPTIONS}")
+  elseif("${_update_type}" STREQUAL "git")
+    find_program(GITCOMMAND git)
+    set(UPDATE_COMMAND "${GITCOMMAND}")
+    set(UPDATE_OPTIONS "${GIT_UPDATE_OPTIONS}")
+  elseif("${_update_type}" STREQUAL "p4")
+    find_program(P4COMMAND p4)
+    set(UPDATE_COMMAND "${P4COMMAND}")
+    set(UPDATE_OPTIONS "${P4_UPDATE_OPTIONS}")
+  endif()
+
+  set(DART_TESTING_TIMEOUT 1500 CACHE STRING
+    "Maximum time allowed before CTest will kill the test.")
+
+  set(CTEST_SUBMIT_RETRY_DELAY 5 CACHE STRING
+    "How long to wait between timed-out CTest submissions.")
+  set(CTEST_SUBMIT_RETRY_COUNT 3 CACHE STRING
+    "How many times to retry timed-out CTest submissions.")
+
+  find_program(MEMORYCHECK_COMMAND
+    NAMES purify valgrind boundscheck drmemory cuda-memcheck compute-sanitizer
+    PATHS
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Rational Software\\Purify\\Setup;InstallFolder]"
+    DOC "Path to the memory checking command, used for memory error detection."
+    )
+  set(MEMORYCHECK_SUPPRESSIONS_FILE "" CACHE FILEPATH
+    "File that contains suppressions for the memory checker")
+  find_program(COVERAGE_COMMAND gcov DOC
+    "Path to the coverage program that CTest uses for performing coverage inspection"
+    )
+  set(COVERAGE_EXTRA_FLAGS "-l" CACHE STRING
+    "Extra command line flags to pass to the coverage tool")
+
+  # set the site name
+  if(COMMAND cmake_host_system_information)
+    cmake_host_system_information(RESULT _ctest_hostname QUERY HOSTNAME)
+    set(SITE "${_ctest_hostname}" CACHE STRING "Name of the computer/site where compile is being run")
+    unset(_ctest_hostname)
+  else()
+    # This code path is needed for CMake itself during bootstrap.
+    site_name(SITE)
+  endif()
+  # set the build name
+  if(NOT BUILDNAME)
+    set(DART_COMPILER "${CMAKE_CXX_COMPILER}")
+    if(NOT DART_COMPILER)
+      set(DART_COMPILER "${CMAKE_C_COMPILER}")
+    endif()
+    if(NOT DART_COMPILER)
+      set(DART_COMPILER "unknown")
+    endif()
+    if(WIN32)
+      set(DART_NAME_COMPONENT "NAME_WE")
+    else()
+      set(DART_NAME_COMPONENT "NAME")
+    endif()
+    if(NOT BUILD_NAME_SYSTEM_NAME)
+      set(BUILD_NAME_SYSTEM_NAME "${CMAKE_SYSTEM_NAME}")
+    endif()
+    if(WIN32)
+      set(BUILD_NAME_SYSTEM_NAME "Win32")
+    endif()
+    if(UNIX OR BORLAND)
+      get_filename_component(DART_COMPILER_NAME
+        "${DART_COMPILER}" ${DART_NAME_COMPONENT})
+    else()
+      get_filename_component(DART_COMPILER_NAME
+        "${CMAKE_MAKE_PROGRAM}" ${DART_NAME_COMPONENT})
+    endif()
+    if(DART_COMPILER_NAME MATCHES "devenv")
+      GET_VS_VERSION_STRING("${CMAKE_GENERATOR}" DART_COMPILER_NAME)
+    endif()
+    set(BUILDNAME "${BUILD_NAME_SYSTEM_NAME}-${DART_COMPILER_NAME}")
+  endif()
+
+  # the build command
+  build_command(MAKECOMMAND_DEFAULT_VALUE
+    CONFIGURATION "\${CTEST_CONFIGURATION_TYPE}")
+  set(MAKECOMMAND ${MAKECOMMAND_DEFAULT_VALUE}
+    CACHE STRING "Command to build the project")
+
+  # the default build configuration the ctest build handler will use
+  # if there is no -C arg given to ctest:
+  set(DEFAULT_CTEST_CONFIGURATION_TYPE "$ENV{CMAKE_CONFIG_TYPE}")
+  if(DEFAULT_CTEST_CONFIGURATION_TYPE STREQUAL "")
+    set(DEFAULT_CTEST_CONFIGURATION_TYPE "Release")
+  endif()
+
+  mark_as_advanced(
+    BZRCOMMAND
+    COVERAGE_COMMAND
+    COVERAGE_EXTRA_FLAGS
+    CTEST_SUBMIT_RETRY_DELAY
+    CTEST_SUBMIT_RETRY_COUNT
+    CVSCOMMAND
+    CVS_UPDATE_OPTIONS
+    DART_TESTING_TIMEOUT
+    GITCOMMAND
+    P4COMMAND
+    HGCOMMAND
+    MAKECOMMAND
+    MEMORYCHECK_COMMAND
+    MEMORYCHECK_SUPPRESSIONS_FILE
+    SITE
+    SVNCOMMAND
+    )
+  if(NOT RUN_FROM_DART)
+    set(RUN_FROM_CTEST_OR_DART 1)
+    include(CTestTargets)
+    set(RUN_FROM_CTEST_OR_DART)
+  endif()
+endif()
diff --git a/share/cmake-3.22/Modules/CTestCoverageCollectGCOV.cmake b/share/cmake-3.22/Modules/CTestCoverageCollectGCOV.cmake
new file mode 100644
index 0000000..a6fa3a4
--- /dev/null
+++ b/share/cmake-3.22/Modules/CTestCoverageCollectGCOV.cmake
@@ -0,0 +1,352 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CTestCoverageCollectGCOV
+------------------------
+
+.. versionadded:: 3.2
+
+This module provides the ``ctest_coverage_collect_gcov`` function.
+
+This function runs gcov on all .gcda files found in the binary tree
+and packages the resulting .gcov files into a tar file.
+This tarball also contains the following:
+
+* *data.json* defines the source and build directories for use by CDash.
+* *Labels.json* indicates any :prop_sf:`LABELS` that have been set on the
+  source files.
+* The *uncovered* directory holds any uncovered files found by
+  :variable:`CTEST_EXTRA_COVERAGE_GLOB`.
+
+After generating this tar file, it can be sent to CDash for display with the
+:command:`ctest_submit(CDASH_UPLOAD)` command.
+
+.. command:: ctest_coverage_collect_gcov
+
+  ::
+
+    ctest_coverage_collect_gcov(TARBALL <tarfile>
+      [SOURCE <source_dir>][BUILD <build_dir>]
+      [GCOV_COMMAND <gcov_command>]
+      [GCOV_OPTIONS <options>...]
+      )
+
+  Run gcov and package a tar file for CDash.  The options are:
+
+  ``TARBALL <tarfile>``
+    Specify the location of the ``.tar`` file to be created for later
+    upload to CDash.  Relative paths will be interpreted with respect
+    to the top-level build directory.
+
+  ``TARBALL_COMPRESSION <option>``
+    .. versionadded:: 3.18
+
+    Specify a compression algorithm for the
+    ``TARBALL`` data file.  Using this option reduces the size of the data file
+    before it is submitted to CDash.  ``<option>`` must be one of ``GZIP``,
+    ``BZIP2``, ``XZ``, ``ZSTD``, ``FROM_EXT``, or an expression that CMake
+    evaluates as ``FALSE``. The default value is ``BZIP2``.
+
+    If ``FROM_EXT`` is specified, the resulting file will be compressed based on
+    the file extension of the ``<tarfile>`` (i.e. ``.tar.gz`` will use ``GZIP``
+    compression). File extensions that will produce compressed output include
+    ``.tar.gz``, ``.tgz``, ``.tar.bzip2``, ``.tbz``, ``.tar.xz``, and ``.txz``.
+
+  ``SOURCE <source_dir>``
+    Specify the top-level source directory for the build.
+    Default is the value of :variable:`CTEST_SOURCE_DIRECTORY`.
+
+  ``BUILD <build_dir>``
+    Specify the top-level build directory for the build.
+    Default is the value of :variable:`CTEST_BINARY_DIRECTORY`.
+
+  ``GCOV_COMMAND <gcov_command>``
+    Specify the full path to the ``gcov`` command on the machine.
+    Default is the value of :variable:`CTEST_COVERAGE_COMMAND`.
+
+  ``GCOV_OPTIONS <options>...``
+    Specify options to be passed to gcov.  The ``gcov`` command
+    is run as ``gcov <options>... -o <gcov-dir> <file>.gcda``.
+    If not specified, the default option is just ``-b -x``.
+
+  ``GLOB``
+    .. versionadded:: 3.6
+
+    Recursively search for .gcda files in build_dir rather than
+    determining search locations by reading TargetDirectories.txt.
+
+  ``DELETE``
+    .. versionadded:: 3.6
+
+    Delete coverage files after they've been packaged into the .tar.
+
+  ``QUIET``
+    Suppress non-error messages that otherwise would have been
+    printed out by this function.
+
+  .. versionadded:: 3.3
+    Added support for the :variable:`CTEST_CUSTOM_COVERAGE_EXCLUDE` variable.
+
+#]=======================================================================]
+
+function(ctest_coverage_collect_gcov)
+  set(options QUIET GLOB DELETE)
+  set(oneValueArgs TARBALL SOURCE BUILD GCOV_COMMAND TARBALL_COMPRESSION)
+  set(multiValueArgs GCOV_OPTIONS)
+  cmake_parse_arguments(GCOV  "${options}" "${oneValueArgs}"
+    "${multiValueArgs}" "" ${ARGN} )
+  if(NOT DEFINED GCOV_TARBALL)
+    message(FATAL_ERROR
+      "TARBALL must be specified. for ctest_coverage_collect_gcov")
+  endif()
+  if(NOT DEFINED GCOV_SOURCE)
+    set(source_dir "${CTEST_SOURCE_DIRECTORY}")
+  else()
+    set(source_dir "${GCOV_SOURCE}")
+  endif()
+  if(NOT DEFINED GCOV_BUILD)
+    set(binary_dir "${CTEST_BINARY_DIRECTORY}")
+  else()
+    set(binary_dir "${GCOV_BUILD}")
+  endif()
+  if(NOT DEFINED GCOV_GCOV_COMMAND)
+    set(gcov_command "${CTEST_COVERAGE_COMMAND}")
+  else()
+    set(gcov_command "${GCOV_GCOV_COMMAND}")
+  endif()
+  if(NOT DEFINED GCOV_TARBALL_COMPRESSION)
+    set(GCOV_TARBALL_COMPRESSION "BZIP2")
+  elseif( GCOV_TARBALL_COMPRESSION AND
+      NOT GCOV_TARBALL_COMPRESSION MATCHES "^(GZIP|BZIP2|XZ|ZSTD|FROM_EXT)$")
+    message(FATAL_ERROR "TARBALL_COMPRESSION must be one of OFF, GZIP, "
+      "BZIP2, XZ, ZSTD, or FROM_EXT for ctest_coverage_collect_gcov")
+  endif()
+  # run gcov on each gcda file in the binary tree
+  set(gcda_files)
+  set(label_files)
+  if (GCOV_GLOB)
+      file(GLOB_RECURSE gfiles "${binary_dir}/*.gcda")
+      list(LENGTH gfiles len)
+      # if we have gcda files then also grab the labels file for that target
+      if(${len} GREATER 0)
+        file(GLOB_RECURSE lfiles RELATIVE ${binary_dir} "${binary_dir}/Labels.json")
+        list(APPEND gcda_files ${gfiles})
+        list(APPEND label_files ${lfiles})
+      endif()
+  else()
+    # look for gcda files in the target directories
+    # this will be faster and only look where the files will be
+    file(STRINGS "${binary_dir}/CMakeFiles/TargetDirectories.txt" target_dirs
+         ENCODING UTF-8)
+    foreach(target_dir ${target_dirs})
+      file(GLOB_RECURSE gfiles "${target_dir}/*.gcda")
+      list(LENGTH gfiles len)
+      # if we have gcda files then also grab the labels file for that target
+      if(${len} GREATER 0)
+        file(GLOB_RECURSE lfiles RELATIVE ${binary_dir}
+          "${target_dir}/Labels.json")
+        list(APPEND gcda_files ${gfiles})
+        list(APPEND label_files ${lfiles})
+      endif()
+    endforeach()
+  endif()
+  # return early if no coverage files were found
+  list(LENGTH gcda_files len)
+  if(len EQUAL 0)
+    if (NOT GCOV_QUIET)
+      message("ctest_coverage_collect_gcov: No .gcda files found, "
+        "ignoring coverage request.")
+    endif()
+    return()
+  endif()
+  # setup the dir for the coverage files
+  set(coverage_dir "${binary_dir}/Testing/CoverageInfo")
+  file(MAKE_DIRECTORY  "${coverage_dir}")
+  # run gcov, this will produce the .gcov files in the current
+  # working directory
+  if(NOT DEFINED GCOV_GCOV_OPTIONS)
+    set(GCOV_GCOV_OPTIONS -b -x)
+  endif()
+  if (GCOV_QUIET)
+    set(coverage_out_opts
+      OUTPUT_QUIET
+      ERROR_QUIET
+      )
+  else()
+    set(coverage_out_opts
+      OUTPUT_FILE "${coverage_dir}/gcov.log"
+      ERROR_FILE  "${coverage_dir}/gcov.log"
+      )
+  endif()
+  execute_process(COMMAND
+    ${gcov_command} ${GCOV_GCOV_OPTIONS} ${gcda_files}
+    RESULT_VARIABLE res
+    WORKING_DIRECTORY ${coverage_dir}
+    ${coverage_out_opts}
+    )
+
+  if (GCOV_DELETE)
+    file(REMOVE ${gcda_files})
+  endif()
+
+  if(NOT "${res}" EQUAL 0)
+    if (NOT GCOV_QUIET)
+      message(STATUS "Error running gcov: ${res}, see\n  ${coverage_dir}/gcov.log")
+    endif()
+  endif()
+  # create json file with project information
+  file(WRITE ${coverage_dir}/data.json
+    "{
+    \"Source\": \"${source_dir}\",
+    \"Binary\": \"${binary_dir}\"
+}")
+  # collect the gcov files
+  set(unfiltered_gcov_files)
+  file(GLOB_RECURSE unfiltered_gcov_files RELATIVE ${binary_dir} "${coverage_dir}/*.gcov")
+
+  # if CTEST_EXTRA_COVERAGE_GLOB was specified we search for files
+  # that might be uncovered
+  if (DEFINED CTEST_EXTRA_COVERAGE_GLOB)
+    set(uncovered_files)
+    foreach(search_entry IN LISTS CTEST_EXTRA_COVERAGE_GLOB)
+      if(NOT GCOV_QUIET)
+        message("Add coverage glob: ${search_entry}")
+      endif()
+      file(GLOB_RECURSE matching_files "${source_dir}/${search_entry}")
+      if (matching_files)
+        list(APPEND uncovered_files "${matching_files}")
+      endif()
+    endforeach()
+  endif()
+
+  set(gcov_files)
+  foreach(gcov_file ${unfiltered_gcov_files})
+    file(STRINGS ${binary_dir}/${gcov_file} first_line LIMIT_COUNT 1 ENCODING UTF-8)
+
+    set(is_excluded false)
+    if(first_line MATCHES "^        -:    0:Source:(.*)$")
+      set(source_file ${CMAKE_MATCH_1})
+    elseif(NOT GCOV_QUIET)
+      message(STATUS "Could not determine source file corresponding to: ${gcov_file}")
+    endif()
+
+    foreach(exclude_entry IN LISTS CTEST_CUSTOM_COVERAGE_EXCLUDE)
+      if(source_file MATCHES "${exclude_entry}")
+        set(is_excluded true)
+
+        if(NOT GCOV_QUIET)
+          message("Excluding coverage for: ${source_file} which matches ${exclude_entry}")
+        endif()
+
+        break()
+      endif()
+    endforeach()
+
+    get_filename_component(resolved_source_file "${source_file}" ABSOLUTE)
+    foreach(uncovered_file IN LISTS uncovered_files)
+      get_filename_component(resolved_uncovered_file "${uncovered_file}" ABSOLUTE)
+      if (resolved_uncovered_file STREQUAL resolved_source_file)
+        list(REMOVE_ITEM uncovered_files "${uncovered_file}")
+      endif()
+    endforeach()
+
+    if(NOT is_excluded)
+      list(APPEND gcov_files ${gcov_file})
+    endif()
+  endforeach()
+
+  foreach (uncovered_file ${uncovered_files})
+    # Check if this uncovered file should be excluded.
+    set(is_excluded false)
+    foreach(exclude_entry IN LISTS CTEST_CUSTOM_COVERAGE_EXCLUDE)
+      if(uncovered_file MATCHES "${exclude_entry}")
+        set(is_excluded true)
+        if(NOT GCOV_QUIET)
+          message("Excluding coverage for: ${uncovered_file} which matches ${exclude_entry}")
+        endif()
+        break()
+      endif()
+    endforeach()
+    if(is_excluded)
+      continue()
+    endif()
+
+    # Copy from source to binary dir, preserving any intermediate subdirectories.
+    get_filename_component(filename "${uncovered_file}" NAME)
+    get_filename_component(relative_path "${uncovered_file}" DIRECTORY)
+    string(REPLACE "${source_dir}" "" relative_path "${relative_path}")
+    if (relative_path)
+      # Strip leading slash.
+      string(SUBSTRING "${relative_path}" 1 -1 relative_path)
+    endif()
+    file(COPY ${uncovered_file} DESTINATION ${binary_dir}/uncovered/${relative_path})
+    if(relative_path)
+      list(APPEND uncovered_files_for_tar uncovered/${relative_path}/${filename})
+    else()
+      list(APPEND uncovered_files_for_tar uncovered/${filename})
+    endif()
+  endforeach()
+
+  # tar up the coverage info with the same date so that the md5
+  # sum will be the same for the tar file independent of file time
+  # stamps
+  string(REPLACE ";" "\n" gcov_files "${gcov_files}")
+  string(REPLACE ";" "\n" label_files "${label_files}")
+  string(REPLACE ";" "\n" uncovered_files_for_tar "${uncovered_files_for_tar}")
+  file(WRITE "${coverage_dir}/coverage_file_list.txt"
+    "${gcov_files}
+${coverage_dir}/data.json
+${label_files}
+${uncovered_files_for_tar}
+")
+
+  # Prepare tar command line arguments
+
+  set(tar_opts "")
+  # Select data compression mode
+  if( GCOV_TARBALL_COMPRESSION STREQUAL "FROM_EXT")
+    if( GCOV_TARBALL MATCHES [[\.(tgz|tar.gz)$]] )
+      string(APPEND tar_opts "z")
+    elseif( GCOV_TARBALL MATCHES [[\.(txz|tar.xz)$]] )
+      string(APPEND tar_opts "J")
+    elseif( GCOV_TARBALL MATCHES [[\.(tbz|tar.bz)$]] )
+      string(APPEND tar_opts "j")
+    endif()
+  elseif(GCOV_TARBALL_COMPRESSION STREQUAL "GZIP")
+    string(APPEND tar_opts "z")
+  elseif(GCOV_TARBALL_COMPRESSION STREQUAL "XZ")
+    string(APPEND tar_opts "J")
+  elseif(GCOV_TARBALL_COMPRESSION STREQUAL "BZIP2")
+    string(APPEND tar_opts "j")
+  elseif(GCOV_TARBALL_COMPRESSION STREQUAL "ZSTD")
+    set(zstd_tar_opt "--zstd")
+  endif()
+  # Verbosity options
+  if(NOT GCOV_QUIET AND NOT tar_opts MATCHES v)
+    string(APPEND tar_opts "v")
+  endif()
+  # Prepend option 'c' specifying 'create'
+  string(PREPEND tar_opts "c")
+  # Append option 'f' so that the next argument is the filename
+  string(APPEND tar_opts "f")
+
+  execute_process(COMMAND
+    ${CMAKE_COMMAND} -E tar ${tar_opts} ${GCOV_TARBALL} ${zstd_tar_opt}
+    "--mtime=1970-01-01 0:0:0 UTC"
+    "--format=gnutar"
+    --files-from=${coverage_dir}/coverage_file_list.txt
+    WORKING_DIRECTORY ${binary_dir})
+
+  if (GCOV_DELETE)
+    foreach(gcov_file ${unfiltered_gcov_files})
+      file(REMOVE ${binary_dir}/${gcov_file})
+    endforeach()
+    file(REMOVE ${coverage_dir}/coverage_file_list.txt)
+    file(REMOVE ${coverage_dir}/data.json)
+    if (EXISTS ${binary_dir}/uncovered)
+      file(REMOVE ${binary_dir}/uncovered)
+    endif()
+  endif()
+
+endfunction()
diff --git a/share/cmake-3.18/Modules/CTestScriptMode.cmake b/share/cmake-3.22/Modules/CTestScriptMode.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CTestScriptMode.cmake
rename to share/cmake-3.22/Modules/CTestScriptMode.cmake
diff --git a/share/cmake-3.18/Modules/CTestTargets.cmake b/share/cmake-3.22/Modules/CTestTargets.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CTestTargets.cmake
rename to share/cmake-3.22/Modules/CTestTargets.cmake
diff --git a/share/cmake-3.22/Modules/CTestUseLaunchers.cmake b/share/cmake-3.22/Modules/CTestUseLaunchers.cmake
new file mode 100644
index 0000000..23a206b
--- /dev/null
+++ b/share/cmake-3.22/Modules/CTestUseLaunchers.cmake
@@ -0,0 +1,73 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CTestUseLaunchers
+-----------------
+
+Set the RULE_LAUNCH_* global properties when CTEST_USE_LAUNCHERS is on.
+
+CTestUseLaunchers is automatically included when you include(CTest).
+However, it is split out into its own module file so projects can use
+the CTEST_USE_LAUNCHERS functionality independently.
+
+To use launchers, set CTEST_USE_LAUNCHERS to ON in a ctest -S
+dashboard script, and then also set it in the cache of the configured
+project.  Both cmake and ctest need to know the value of it for the
+launchers to work properly.  CMake needs to know in order to generate
+proper build rules, and ctest, in order to produce the proper error
+and warning analysis.
+
+For convenience, you may set the ENV variable
+CTEST_USE_LAUNCHERS_DEFAULT in your ctest -S script, too.  Then, as
+long as your CMakeLists uses include(CTest) or
+include(CTestUseLaunchers), it will use the value of the ENV variable
+to initialize a CTEST_USE_LAUNCHERS cache variable.  This cache
+variable initialization only occurs if CTEST_USE_LAUNCHERS is not
+already defined.
+
+.. versionadded:: 3.8
+  If CTEST_USE_LAUNCHERS is on in a ctest -S script
+  the ctest_configure command will add -DCTEST_USE_LAUNCHERS:BOOL=TRUE
+  to the cmake command used to configure the project.
+#]=======================================================================]
+
+if(NOT DEFINED CTEST_USE_LAUNCHERS AND DEFINED ENV{CTEST_USE_LAUNCHERS_DEFAULT})
+  set(CTEST_USE_LAUNCHERS "$ENV{CTEST_USE_LAUNCHERS_DEFAULT}"
+    CACHE INTERNAL "CTEST_USE_LAUNCHERS initial value from ENV")
+endif()
+
+if(NOT "${CMAKE_GENERATOR}" MATCHES "Make|Ninja")
+  set(CTEST_USE_LAUNCHERS 0)
+endif()
+
+if(CTEST_USE_LAUNCHERS)
+  set(__launch_common_options
+    "--target-name <TARGET_NAME> --build-dir <CMAKE_CURRENT_BINARY_DIR>")
+
+  set(__launch_compile_options
+    "${__launch_common_options} --output <OBJECT> --source <SOURCE> --language <LANGUAGE>")
+
+  set(__launch_link_options
+    "${__launch_common_options} --output <TARGET> --target-type <TARGET_TYPE> --language <LANGUAGE>")
+
+  set(__launch_custom_options
+    "${__launch_common_options} --output <OUTPUT>")
+
+  if("${CMAKE_GENERATOR}" MATCHES "Ninja")
+    string(APPEND __launch_compile_options " --filter-prefix <CMAKE_CL_SHOWINCLUDES_PREFIX>")
+  endif()
+
+  set(CTEST_LAUNCH_COMPILE
+    "\"${CMAKE_CTEST_COMMAND}\" --launch ${__launch_compile_options} --")
+
+  set(CTEST_LAUNCH_LINK
+    "\"${CMAKE_CTEST_COMMAND}\" --launch ${__launch_link_options} --")
+
+  set(CTEST_LAUNCH_CUSTOM
+    "\"${CMAKE_CTEST_COMMAND}\" --launch ${__launch_custom_options} --")
+
+  set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CTEST_LAUNCH_COMPILE}")
+  set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${CTEST_LAUNCH_LINK}")
+  set_property(GLOBAL PROPERTY RULE_LAUNCH_CUSTOM "${CTEST_LAUNCH_CUSTOM}")
+endif()
diff --git a/share/cmake-3.22/Modules/CheckCCompilerFlag.cmake b/share/cmake-3.22/Modules/CheckCCompilerFlag.cmake
new file mode 100644
index 0000000..335b437
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckCCompilerFlag.cmake
@@ -0,0 +1,41 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckCCompilerFlag
+------------------
+
+Check whether the C compiler supports a given flag.
+
+.. command:: check_c_compiler_flag
+
+  .. code-block:: cmake
+
+    check_c_compiler_flag(<flag> <var>)
+
+  Check that the ``<flag>`` is accepted by the compiler without
+  a diagnostic.  Stores the result in an internal cache entry
+  named ``<var>``.
+
+This command temporarily sets the ``CMAKE_REQUIRED_DEFINITIONS`` variable
+and calls the ``check_c_source_compiles`` macro from the
+:module:`CheckCSourceCompiles` module.  See documentation of that
+module for a listing of variables that can otherwise modify the build.
+
+A positive result from this check indicates only that the compiler did not
+issue a diagnostic message when given the flag.  Whether the flag has any
+effect or even a specific one is beyond the scope of this module.
+
+.. note::
+  Since the :command:`try_compile` command forwards flags from variables
+  like :variable:`CMAKE_C_FLAGS <CMAKE_<LANG>_FLAGS>`, unknown flags
+  in such variables may cause a false negative for this check.
+#]=======================================================================]
+
+include_guard(GLOBAL)
+include(CheckCSourceCompiles)
+include(Internal/CheckCompilerFlag)
+
+macro (CHECK_C_COMPILER_FLAG _FLAG _RESULT)
+  cmake_check_compiler_flag(C "${_FLAG}" ${_RESULT})
+endmacro ()
diff --git a/share/cmake-3.22/Modules/CheckCSourceCompiles.cmake b/share/cmake-3.22/Modules/CheckCSourceCompiles.cmake
new file mode 100644
index 0000000..b24da49
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckCSourceCompiles.cmake
@@ -0,0 +1,77 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckCSourceCompiles
+--------------------
+
+Check if given C source compiles and links into an executable.
+
+.. command:: check_c_source_compiles
+
+  .. code-block:: cmake
+
+    check_c_source_compiles(<code> <resultVar>
+                            [FAIL_REGEX <regex1> [<regex2>...]])
+
+  Check that the source supplied in ``<code>`` can be compiled as a C source
+  file and linked as an executable (so it must contain at least a ``main()``
+  function). The result will be stored in the internal cache variable specified
+  by ``<resultVar>``, with a boolean true value for success and boolean false
+  for failure. If ``FAIL_REGEX`` is provided, then failure is determined by
+  checking if anything in the output matches any of the specified regular
+  expressions.
+
+  The underlying check is performed by the :command:`try_compile` command. The
+  compile and link commands can be influenced by setting any of the following
+  variables prior to calling ``check_c_source_compiles()``:
+
+  ``CMAKE_REQUIRED_FLAGS``
+    Additional flags to pass to the compiler. Note that the contents of
+    :variable:`CMAKE_C_FLAGS <CMAKE_<LANG>_FLAGS>` and its associated
+    configuration-specific variable are automatically added to the compiler
+    command before the contents of ``CMAKE_REQUIRED_FLAGS``.
+
+  ``CMAKE_REQUIRED_DEFINITIONS``
+    A :ref:`;-list <CMake Language Lists>` of compiler definitions of the form
+    ``-DFOO`` or ``-DFOO=bar``. A definition for the name specified by
+    ``<resultVar>`` will also be added automatically.
+
+  ``CMAKE_REQUIRED_INCLUDES``
+    A :ref:`;-list <CMake Language Lists>` of header search paths to pass to
+    the compiler. These will be the only header search paths used by
+    ``try_compile()``, i.e. the contents of the :prop_dir:`INCLUDE_DIRECTORIES`
+    directory property will be ignored.
+
+  ``CMAKE_REQUIRED_LINK_OPTIONS``
+    .. versionadded:: 3.14
+
+    A :ref:`;-list <CMake Language Lists>` of options to add to the link
+    command (see :command:`try_compile` for further details).
+
+  ``CMAKE_REQUIRED_LIBRARIES``
+    A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
+    command. These can be the name of system libraries or they can be
+    :ref:`Imported Targets <Imported Targets>` (see :command:`try_compile` for
+    further details).
+
+  ``CMAKE_REQUIRED_QUIET``
+    .. versionadded:: 3.1
+
+    If this variable evaluates to a boolean true value, all status messages
+    associated with the check will be suppressed.
+
+  The check is only performed once, with the result cached in the variable
+  named by ``<resultVar>``. Every subsequent CMake run will re-use this cached
+  value rather than performing the check again, even if the ``<code>`` changes.
+  In order to force the check to be re-evaluated, the variable named by
+  ``<resultVar>`` must be manually removed from the cache.
+
+#]=======================================================================]
+
+include_guard(GLOBAL)
+include(Internal/CheckSourceCompiles)
+
+macro(CHECK_C_SOURCE_COMPILES SOURCE VAR)
+  cmake_check_source_compiles(C "${SOURCE}" ${VAR} ${ARGN})
+endmacro()
diff --git a/share/cmake-3.22/Modules/CheckCSourceRuns.cmake b/share/cmake-3.22/Modules/CheckCSourceRuns.cmake
new file mode 100644
index 0000000..a6081ff
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckCSourceRuns.cmake
@@ -0,0 +1,78 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckCSourceRuns
+----------------
+
+Check if given C source compiles and links into an executable and can
+subsequently be run.
+
+.. command:: check_c_source_runs
+
+  .. code-block:: cmake
+
+    check_c_source_runs(<code> <resultVar>)
+
+  Check that the source supplied in ``<code>`` can be compiled as a C source
+  file, linked as an executable and then run. The ``<code>`` must contain at
+  least a ``main()`` function. If the ``<code>`` could be built and run
+  successfully, the internal cache variable specified by ``<resultVar>`` will
+  be set to 1, otherwise it will be set to an value that evaluates to boolean
+  false (e.g. an empty string or an error message).
+
+  The underlying check is performed by the :command:`try_run` command. The
+  compile and link commands can be influenced by setting any of the following
+  variables prior to calling ``check_c_source_runs()``:
+
+  ``CMAKE_REQUIRED_FLAGS``
+    Additional flags to pass to the compiler. Note that the contents of
+    :variable:`CMAKE_C_FLAGS <CMAKE_<LANG>_FLAGS>` and its associated
+    configuration-specific variable are automatically added to the compiler
+    command before the contents of ``CMAKE_REQUIRED_FLAGS``.
+
+  ``CMAKE_REQUIRED_DEFINITIONS``
+    A :ref:`;-list <CMake Language Lists>` of compiler definitions of the form
+    ``-DFOO`` or ``-DFOO=bar``. A definition for the name specified by
+    ``<resultVar>`` will also be added automatically.
+
+  ``CMAKE_REQUIRED_INCLUDES``
+    A :ref:`;-list <CMake Language Lists>` of header search paths to pass to
+    the compiler. These will be the only header search paths used by
+    ``try_run()``, i.e. the contents of the :prop_dir:`INCLUDE_DIRECTORIES`
+    directory property will be ignored.
+
+  ``CMAKE_REQUIRED_LINK_OPTIONS``
+    .. versionadded:: 3.14
+
+    A :ref:`;-list <CMake Language Lists>` of options to add to the link
+    command (see :command:`try_run` for further details).
+
+  ``CMAKE_REQUIRED_LIBRARIES``
+    A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
+    command. These can be the name of system libraries or they can be
+    :ref:`Imported Targets <Imported Targets>` (see :command:`try_run` for
+    further details).
+
+  ``CMAKE_REQUIRED_QUIET``
+    .. versionadded:: 3.1
+
+    If this variable evaluates to a boolean true value, all status messages
+    associated with the check will be suppressed.
+
+  The check is only performed once, with the result cached in the variable
+  named by ``<resultVar>``. Every subsequent CMake run will re-use this cached
+  value rather than performing the check again, even if the ``<code>`` changes.
+  In order to force the check to be re-evaluated, the variable named by
+  ``<resultVar>`` must be manually removed from the cache.
+
+#]=======================================================================]
+
+include_guard(GLOBAL)
+include(Internal/CheckSourceRuns)
+
+macro(CHECK_C_SOURCE_RUNS SOURCE VAR)
+  set(_CheckSourceRuns_old_signature 1)
+  cmake_check_source_runs(C "${SOURCE}" ${VAR} ${ARGN})
+  unset(_CheckSourceRuns_old_signature)
+endmacro()
diff --git a/share/cmake-3.22/Modules/CheckCXXCompilerFlag.cmake b/share/cmake-3.22/Modules/CheckCXXCompilerFlag.cmake
new file mode 100644
index 0000000..3bc3463
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckCXXCompilerFlag.cmake
@@ -0,0 +1,41 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckCXXCompilerFlag
+------------------------
+
+Check whether the CXX compiler supports a given flag.
+
+.. command:: check_cxx_compiler_flag
+
+  .. code-block:: cmake
+
+    check_cxx_compiler_flag(<flag> <var>)
+
+  Check that the ``<flag>`` is accepted by the compiler without
+  a diagnostic.  Stores the result in an internal cache entry
+  named ``<var>``.
+
+This command temporarily sets the ``CMAKE_REQUIRED_DEFINITIONS`` variable
+and calls the ``check_cxx_source_compiles`` macro from the
+:module:`CheckCXXSourceCompiles` module.  See documentation of that
+module for a listing of variables that can otherwise modify the build.
+
+A positive result from this check indicates only that the compiler did not
+issue a diagnostic message when given the flag.  Whether the flag has any
+effect or even a specific one is beyond the scope of this module.
+
+.. note::
+  Since the :command:`try_compile` command forwards flags from variables
+  like :variable:`CMAKE_CXX_FLAGS <CMAKE_<LANG>_FLAGS>`, unknown flags
+  in such variables may cause a false negative for this check.
+#]=======================================================================]
+
+include_guard(GLOBAL)
+include(CheckCXXSourceCompiles)
+include(Internal/CheckCompilerFlag)
+
+macro (CHECK_CXX_COMPILER_FLAG _FLAG _RESULT)
+  cmake_check_compiler_flag(CXX "${_FLAG}" ${_RESULT})
+endmacro ()
diff --git a/share/cmake-3.22/Modules/CheckCXXSourceCompiles.cmake b/share/cmake-3.22/Modules/CheckCXXSourceCompiles.cmake
new file mode 100644
index 0000000..502bfa7
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckCXXSourceCompiles.cmake
@@ -0,0 +1,77 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckCXXSourceCompiles
+----------------------
+
+Check if given C++ source compiles and links into an executable.
+
+.. command:: check_cxx_source_compiles
+
+  .. code-block:: cmake
+
+    check_cxx_source_compiles(<code> <resultVar>
+                              [FAIL_REGEX <regex1> [<regex2>...]])
+
+  Check that the source supplied in ``<code>`` can be compiled as a C++ source
+  file and linked as an executable (so it must contain at least a ``main()``
+  function). The result will be stored in the internal cache variable specified
+  by ``<resultVar>``, with a boolean true value for success and boolean false
+  for failure. If ``FAIL_REGEX`` is provided, then failure is determined by
+  checking if anything in the output matches any of the specified regular
+  expressions.
+
+  The underlying check is performed by the :command:`try_compile` command. The
+  compile and link commands can be influenced by setting any of the following
+  variables prior to calling ``check_cxx_source_compiles()``:
+
+  ``CMAKE_REQUIRED_FLAGS``
+    Additional flags to pass to the compiler. Note that the contents of
+    :variable:`CMAKE_CXX_FLAGS <CMAKE_<LANG>_FLAGS>` and its associated
+    configuration-specific variable are automatically added to the compiler
+    command before the contents of ``CMAKE_REQUIRED_FLAGS``.
+
+  ``CMAKE_REQUIRED_DEFINITIONS``
+    A :ref:`;-list <CMake Language Lists>` of compiler definitions of the form
+    ``-DFOO`` or ``-DFOO=bar``. A definition for the name specified by
+    ``<resultVar>`` will also be added automatically.
+
+  ``CMAKE_REQUIRED_INCLUDES``
+    A :ref:`;-list <CMake Language Lists>` of header search paths to pass to
+    the compiler. These will be the only header search paths used by
+    ``try_compile()``, i.e. the contents of the :prop_dir:`INCLUDE_DIRECTORIES`
+    directory property will be ignored.
+
+  ``CMAKE_REQUIRED_LINK_OPTIONS``
+    .. versionadded:: 3.14
+
+    A :ref:`;-list <CMake Language Lists>` of options to add to the link
+    command (see :command:`try_compile` for further details).
+
+  ``CMAKE_REQUIRED_LIBRARIES``
+    A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
+    command. These can be the name of system libraries or they can be
+    :ref:`Imported Targets <Imported Targets>` (see :command:`try_compile` for
+    further details).
+
+  ``CMAKE_REQUIRED_QUIET``
+    .. versionadded:: 3.1
+
+    If this variable evaluates to a boolean true value, all status messages
+    associated with the check will be suppressed.
+
+  The check is only performed once, with the result cached in the variable
+  named by ``<resultVar>``. Every subsequent CMake run will re-use this cached
+  value rather than performing the check again, even if the ``<code>`` changes.
+  In order to force the check to be re-evaluated, the variable named by
+  ``<resultVar>`` must be manually removed from the cache.
+
+#]=======================================================================]
+
+include_guard(GLOBAL)
+include(Internal/CheckSourceCompiles)
+
+macro(CHECK_CXX_SOURCE_COMPILES SOURCE VAR)
+  cmake_check_source_compiles(CXX "${SOURCE}" ${VAR} ${ARGN})
+endmacro()
diff --git a/share/cmake-3.22/Modules/CheckCXXSourceRuns.cmake b/share/cmake-3.22/Modules/CheckCXXSourceRuns.cmake
new file mode 100644
index 0000000..af03453
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckCXXSourceRuns.cmake
@@ -0,0 +1,78 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckCXXSourceRuns
+------------------
+
+Check if given C++ source compiles and links into an executable and can
+subsequently be run.
+
+.. command:: check_cxx_source_runs
+
+  .. code-block:: cmake
+
+    check_cxx_source_runs(<code> <resultVar>)
+
+  Check that the source supplied in ``<code>`` can be compiled as a C++ source
+  file, linked as an executable and then run. The ``<code>`` must contain at
+  least a ``main()`` function. If the ``<code>`` could be built and run
+  successfully, the internal cache variable specified by ``<resultVar>`` will
+  be set to 1, otherwise it will be set to an value that evaluates to boolean
+  false (e.g. an empty string or an error message).
+
+  The underlying check is performed by the :command:`try_run` command. The
+  compile and link commands can be influenced by setting any of the following
+  variables prior to calling ``check_cxx_source_runs()``:
+
+  ``CMAKE_REQUIRED_FLAGS``
+    Additional flags to pass to the compiler. Note that the contents of
+    :variable:`CMAKE_CXX_FLAGS <CMAKE_<LANG>_FLAGS>` and its associated
+    configuration-specific variable are automatically added to the compiler
+    command before the contents of ``CMAKE_REQUIRED_FLAGS``.
+
+  ``CMAKE_REQUIRED_DEFINITIONS``
+    A :ref:`;-list <CMake Language Lists>` of compiler definitions of the form
+    ``-DFOO`` or ``-DFOO=bar``. A definition for the name specified by
+    ``<resultVar>`` will also be added automatically.
+
+  ``CMAKE_REQUIRED_INCLUDES``
+    A :ref:`;-list <CMake Language Lists>` of header search paths to pass to
+    the compiler. These will be the only header search paths used by
+    ``try_run()``, i.e. the contents of the :prop_dir:`INCLUDE_DIRECTORIES`
+    directory property will be ignored.
+
+  ``CMAKE_REQUIRED_LINK_OPTIONS``
+    .. versionadded:: 3.14
+
+    A :ref:`;-list <CMake Language Lists>` of options to add to the link
+    command (see :command:`try_run` for further details).
+
+  ``CMAKE_REQUIRED_LIBRARIES``
+    A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
+    command. These can be the name of system libraries or they can be
+    :ref:`Imported Targets <Imported Targets>` (see :command:`try_run` for
+    further details).
+
+  ``CMAKE_REQUIRED_QUIET``
+    .. versionadded:: 3.1
+
+    If this variable evaluates to a boolean true value, all status messages
+    associated with the check will be suppressed.
+
+  The check is only performed once, with the result cached in the variable
+  named by ``<resultVar>``. Every subsequent CMake run will re-use this cached
+  value rather than performing the check again, even if the ``<code>`` changes.
+  In order to force the check to be re-evaluated, the variable named by
+  ``<resultVar>`` must be manually removed from the cache.
+
+#]=======================================================================]
+
+include_guard(GLOBAL)
+include(Internal/CheckSourceRuns)
+
+macro(CHECK_CXX_SOURCE_RUNS SOURCE VAR)
+  set(_CheckSourceRuns_old_signature 1)
+  cmake_check_source_runs(CXX "${SOURCE}" ${VAR} ${ARGN})
+  unset(_CheckSourceRuns_old_signature)
+endmacro()
diff --git a/share/cmake-3.22/Modules/CheckCXXSymbolExists.cmake b/share/cmake-3.22/Modules/CheckCXXSymbolExists.cmake
new file mode 100644
index 0000000..7b13c3a
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckCXXSymbolExists.cmake
@@ -0,0 +1,78 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckCXXSymbolExists
+--------------------
+
+Check if a symbol exists as a function, variable, or macro in ``C++``.
+
+.. command:: check_cxx_symbol_exists
+
+  .. code-block:: cmake
+
+    check_cxx_symbol_exists(<symbol> <files> <variable>)
+
+  Check that the ``<symbol>`` is available after including given header
+  ``<files>`` and store the result in a ``<variable>``.  Specify the list of
+  files in one argument as a semicolon-separated list.
+  ``check_cxx_symbol_exists()`` can be used to check for symbols as seen by
+  the C++ compiler, as opposed to :command:`check_symbol_exists`, which always
+  uses the ``C`` compiler.
+
+  If the header files define the symbol as a macro it is considered
+  available and assumed to work.  If the header files declare the symbol
+  as a function or variable then the symbol must also be available for
+  linking.  If the symbol is a type, enum value, or C++ template it will
+  not be recognized: consider using the :module:`CheckTypeSize`
+  or :module:`CheckSourceCompiles` module instead.
+
+.. note::
+
+  This command is unreliable when ``<symbol>`` is (potentially) an overloaded
+  function. Since there is no reliable way to predict whether a given function
+  in the system environment may be defined as an overloaded function or may be
+  an overloaded function on other systems or will become so in the future, it
+  is generally advised to use the :module:`CheckCXXSourceCompiles` module for
+  checking any function symbol (unless somehow you surely know the checked
+  function is not overloaded on other systems or will not be so in the
+  future).
+
+The following variables may be set before calling this macro to modify
+the way the check is run:
+
+``CMAKE_REQUIRED_FLAGS``
+  string of compile command line flags.
+``CMAKE_REQUIRED_DEFINITIONS``
+  a :ref:`;-list <CMake Language Lists>` of macros to define (-DFOO=bar).
+``CMAKE_REQUIRED_INCLUDES``
+  a :ref:`;-list <CMake Language Lists>` of header search paths to pass to
+  the compiler.
+``CMAKE_REQUIRED_LINK_OPTIONS``
+  .. versionadded:: 3.14
+    a :ref:`;-list <CMake Language Lists>` of options to add to the link command.
+``CMAKE_REQUIRED_LIBRARIES``
+  a :ref:`;-list <CMake Language Lists>` of libraries to add to the link
+  command. See policy :policy:`CMP0075`.
+``CMAKE_REQUIRED_QUIET``
+  .. versionadded:: 3.1
+    execute quietly without messages.
+
+For example:
+
+.. code-block:: cmake
+
+  include(CheckCXXSymbolExists)
+
+  # Check for macro SEEK_SET
+  check_cxx_symbol_exists(SEEK_SET "cstdio" HAVE_SEEK_SET)
+  # Check for function std::fopen
+  check_cxx_symbol_exists(std::fopen "cstdio" HAVE_STD_FOPEN)
+#]=======================================================================]
+
+include_guard(GLOBAL)
+include(CheckSymbolExists)
+
+macro(CHECK_CXX_SYMBOL_EXISTS SYMBOL FILES VARIABLE)
+  __CHECK_SYMBOL_EXISTS_IMPL("${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckSymbolExists.cxx" "${SYMBOL}" "${FILES}" "${VARIABLE}" )
+endmacro()
diff --git a/share/cmake-3.22/Modules/CheckCompilerFlag.cmake b/share/cmake-3.22/Modules/CheckCompilerFlag.cmake
new file mode 100644
index 0000000..77c07b9
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckCompilerFlag.cmake
@@ -0,0 +1,41 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckCompilerFlag
+---------------------
+
+.. versionadded:: 3.19
+
+Check whether the compiler supports a given flag.
+
+.. command:: check_compiler_flag
+
+  .. code-block:: cmake
+
+    check_compiler_flag(<lang> <flag> <var>)
+
+Check that the ``<flag>`` is accepted by the compiler without a diagnostic.
+Stores the result in an internal cache entry named ``<var>``.
+
+This command temporarily sets the ``CMAKE_REQUIRED_DEFINITIONS`` variable
+and calls the ``check_source_compiles(<LANG>)`` function from the
+:module:`CheckSourceCompiles` module.  See documentation of that
+module for a listing of variables that can otherwise modify the build.
+
+A positive result from this check indicates only that the compiler did not
+issue a diagnostic message when given the flag.  Whether the flag has any
+effect or even a specific one is beyond the scope of this module.
+
+.. note::
+  Since the :command:`try_compile` command forwards flags from variables
+  like :variable:`CMAKE_<LANG>_FLAGS <CMAKE_<LANG>_FLAGS>`, unknown flags
+  in such variables may cause a false negative for this check.
+#]=======================================================================]
+
+include_guard(GLOBAL)
+include(Internal/CheckCompilerFlag)
+
+function(CHECK_COMPILER_FLAG _lang _flag _var)
+  cmake_check_compiler_flag(${_lang} "${_flag}" ${_var})
+endfunction()
diff --git a/share/cmake-3.18/Modules/CheckForPthreads.c b/share/cmake-3.22/Modules/CheckForPthreads.c
similarity index 100%
rename from share/cmake-3.18/Modules/CheckForPthreads.c
rename to share/cmake-3.22/Modules/CheckForPthreads.c
diff --git a/share/cmake-3.22/Modules/CheckFortranCompilerFlag.cmake b/share/cmake-3.22/Modules/CheckFortranCompilerFlag.cmake
new file mode 100644
index 0000000..5b1cd02
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckFortranCompilerFlag.cmake
@@ -0,0 +1,43 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckFortranCompilerFlag
+------------------------
+
+.. versionadded:: 3.3
+
+Check whether the Fortran compiler supports a given flag.
+
+.. command:: check_fortran_compiler_flag
+
+  .. code-block:: cmake
+
+    check_fortran_compiler_flag(<flag> <var>)
+
+  Check that the ``<flag>`` is accepted by the compiler without
+  a diagnostic.  Stores the result in an internal cache entry
+  named ``<var>``.
+
+This command temporarily sets the ``CMAKE_REQUIRED_DEFINITIONS`` variable
+and calls the ``check_fortran_source_compiles`` macro from the
+:module:`CheckFortranSourceCompiles` module.  See documentation of that
+module for a listing of variables that can otherwise modify the build.
+
+A positive result from this check indicates only that the compiler did not
+issue a diagnostic message when given the flag.  Whether the flag has any
+effect or even a specific one is beyond the scope of this module.
+
+.. note::
+  Since the :command:`try_compile` command forwards flags from variables
+  like :variable:`CMAKE_Fortran_FLAGS <CMAKE_<LANG>_FLAGS>`, unknown flags
+  in such variables may cause a false negative for this check.
+#]=======================================================================]
+
+include_guard(GLOBAL)
+include(CheckFortranSourceCompiles)
+include(Internal/CheckCompilerFlag)
+
+macro (CHECK_FORTRAN_COMPILER_FLAG _FLAG _RESULT)
+  cmake_check_compiler_flag(Fortran "${_FLAG}" ${_RESULT})
+endmacro ()
diff --git a/share/cmake-3.22/Modules/CheckFortranFunctionExists.cmake b/share/cmake-3.22/Modules/CheckFortranFunctionExists.cmake
new file mode 100644
index 0000000..8f1ca9d
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckFortranFunctionExists.cmake
@@ -0,0 +1,91 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckFortranFunctionExists
+--------------------------
+
+Check if a Fortran function exists.
+
+.. command:: CHECK_FORTRAN_FUNCTION_EXISTS
+
+  .. code-block:: cmake
+
+    CHECK_FORTRAN_FUNCTION_EXISTS(<function> <result>)
+
+  where
+
+  ``<function>``
+    the name of the Fortran function
+  ``<result>``
+    variable to store the result; will be created as an internal cache variable.
+
+.. note::
+
+  This command does not detect functions in Fortran modules. In general it is
+  recommended to use :module:`CheckSourceCompiles` instead to determine if a
+  Fortran function or subroutine is available.
+
+The following variables may be set before calling this macro to modify
+the way the check is run:
+
+``CMAKE_REQUIRED_LINK_OPTIONS``
+  .. versionadded:: 3.14
+    A :ref:`;-list <CMake Language Lists>` of options to add to the link
+    command (see :command:`try_compile` for further details).
+
+``CMAKE_REQUIRED_LIBRARIES``
+  A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
+  command. These can be the name of system libraries or they can be
+  :ref:`Imported Targets <Imported Targets>` (see :command:`try_compile` for
+  further details).
+#]=======================================================================]
+
+include_guard(GLOBAL)
+
+macro(CHECK_FORTRAN_FUNCTION_EXISTS FUNCTION VARIABLE)
+  if(NOT DEFINED ${VARIABLE})
+    message(CHECK_START "Looking for Fortran ${FUNCTION}")
+    if(CMAKE_REQUIRED_LINK_OPTIONS)
+      set(CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS
+        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
+    else()
+      set(CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS)
+    endif()
+    if(CMAKE_REQUIRED_LIBRARIES)
+      set(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES
+        LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
+    else()
+      set(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES)
+    endif()
+    file(WRITE
+    ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompiler.f
+    "
+      program TESTFortran
+      external ${FUNCTION}
+      call ${FUNCTION}()
+      end program TESTFortran
+    "
+    )
+    try_compile(${VARIABLE}
+      ${CMAKE_BINARY_DIR}
+      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompiler.f
+      ${CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS}
+      ${CHECK_FUNCTION_EXISTS_ADD_LIBRARIES}
+      OUTPUT_VARIABLE OUTPUT
+    )
+    if(${VARIABLE})
+      set(${VARIABLE} 1 CACHE INTERNAL "Have Fortran function ${FUNCTION}")
+      message(CHECK_PASS "found")
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+        "Determining if the Fortran ${FUNCTION} exists passed with the following output:\n"
+        "${OUTPUT}\n\n")
+    else()
+      message(CHECK_FAIL "not found")
+      set(${VARIABLE} "" CACHE INTERNAL "Have Fortran function ${FUNCTION}")
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+        "Determining if the Fortran ${FUNCTION} exists failed with the following output:\n"
+        "${OUTPUT}\n\n")
+    endif()
+  endif()
+endmacro()
diff --git a/share/cmake-3.22/Modules/CheckFortranSourceCompiles.cmake b/share/cmake-3.22/Modules/CheckFortranSourceCompiles.cmake
new file mode 100644
index 0000000..e134329
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckFortranSourceCompiles.cmake
@@ -0,0 +1,98 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckFortranSourceCompiles
+--------------------------
+
+.. versionadded:: 3.1
+
+Check if given Fortran source compiles and links into an executable.
+
+.. command:: check_fortran_source_compiles
+
+  .. code-block:: cmake
+
+    check_fortran_source_compiles(<code> <resultVar>
+        [FAIL_REGEX <regex>...]
+        [SRC_EXT <extension>]
+    )
+
+  Checks that the source supplied in ``<code>`` can be compiled as a Fortran
+  source file and linked as an executable. The ``<code>`` must be a Fortran program
+  containing at least an ``end`` statement--for example:
+
+  .. code-block:: cmake
+
+    check_fortran_source_compiles("character :: b; error stop b; end" F2018ESTOPOK SRC_EXT F90)
+
+  This command can help avoid costly build processes when a compiler lacks support
+  for a necessary feature, or a particular vendor library is not compatible with
+  the Fortran compiler version being used. This generate-time check may advise the
+  user of such before the main build process. See also the
+  :command:`check_fortran_source_runs` command to actually run the compiled code.
+
+  The result will be stored in the internal cache
+  variable ``<resultVar>``, with a boolean true value for success and boolean
+  false for failure.
+
+  If ``FAIL_REGEX`` is provided, then failure is determined by checking
+  if anything in the output matches any of the specified regular expressions.
+
+  By default, the test source file will be given a ``.F`` file extension. The
+  ``SRC_EXT`` option can be used to override this with ``.<extension>`` instead--
+  ``.F90`` is a typical choice.
+
+  The underlying check is performed by the :command:`try_compile` command. The
+  compile and link commands can be influenced by setting any of the following
+  variables prior to calling ``check_fortran_source_compiles()``:
+
+  ``CMAKE_REQUIRED_FLAGS``
+    Additional flags to pass to the compiler. Note that the contents of
+    :variable:`CMAKE_Fortran_FLAGS <CMAKE_<LANG>_FLAGS>` and its associated
+    configuration-specific variable are automatically added to the compiler
+    command before the contents of ``CMAKE_REQUIRED_FLAGS``.
+
+  ``CMAKE_REQUIRED_DEFINITIONS``
+    A :ref:`;-list <CMake Language Lists>` of compiler definitions of the form
+    ``-DFOO`` or ``-DFOO=bar``. A definition for the name specified by
+    ``<resultVar>`` will also be added automatically.
+
+  ``CMAKE_REQUIRED_INCLUDES``
+    A :ref:`;-list <CMake Language Lists>` of header search paths to pass to
+    the compiler. These will be the only header search paths used by
+    ``try_compile()``, i.e. the contents of the :prop_dir:`INCLUDE_DIRECTORIES`
+    directory property will be ignored.
+
+  ``CMAKE_REQUIRED_LINK_OPTIONS``
+    .. versionadded:: 3.14
+
+    A :ref:`;-list <CMake Language Lists>` of options to add to the link
+    command (see :command:`try_compile` for further details).
+
+  ``CMAKE_REQUIRED_LIBRARIES``
+    A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
+    command. These can be the name of system libraries or they can be
+    :ref:`Imported Targets <Imported Targets>` (see :command:`try_compile` for
+    further details).
+
+  ``CMAKE_REQUIRED_QUIET``
+    If this variable evaluates to a boolean true value, all status messages
+    associated with the check will be suppressed.
+
+  The check is only performed once, with the result cached in the variable
+  named by ``<resultVar>``. Every subsequent CMake run will re-use this cached
+  value rather than performing the check again, even if the ``<code>`` changes.
+  In order to force the check to be re-evaluated, the variable named by
+  ``<resultVar>`` must be manually removed from the cache.
+
+#]=======================================================================]
+
+include_guard(GLOBAL)
+include(Internal/CheckSourceCompiles)
+
+macro(CHECK_Fortran_SOURCE_COMPILES SOURCE VAR)
+  # Pass the SRC_EXT we used by default historically.
+  # A user-provided SRC_EXT argument in ARGN will override ours.
+  cmake_check_source_compiles(Fortran "${SOURCE}" ${VAR} SRC_EXT "F" ${ARGN})
+endmacro()
diff --git a/share/cmake-3.22/Modules/CheckFortranSourceRuns.cmake b/share/cmake-3.22/Modules/CheckFortranSourceRuns.cmake
new file mode 100644
index 0000000..28f713f
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckFortranSourceRuns.cmake
@@ -0,0 +1,92 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckFortranSourceRuns
+----------------------
+
+.. versionadded:: 3.14
+
+Check if given Fortran source compiles and links into an executable and can
+subsequently be run.
+
+.. command:: check_fortran_source_runs
+
+  .. code-block:: cmake
+
+    check_fortran_source_runs(<code> <resultVar>
+        [SRC_EXT <extension>])
+
+  Check that the source supplied in ``<code>`` can be compiled as a Fortran source
+  file, linked as an executable and then run. The ``<code>`` must be a Fortran program
+  containing at least an ``end`` statement--for example:
+
+  .. code-block:: cmake
+
+    check_fortran_source_runs("real :: x[*]; call co_sum(x); end" F2018coarrayOK)
+
+  This command can help avoid costly build processes when a compiler lacks support
+  for a necessary feature, or a particular vendor library is not compatible with
+  the Fortran compiler version being used. Some of these failures only occur at runtime
+  instead of linktime, and a trivial runtime example can catch the issue before the
+  main build process.
+
+  If the ``<code>`` could be built and run
+  successfully, the internal cache variable specified by ``<resultVar>`` will
+  be set to 1, otherwise it will be set to an value that evaluates to boolean
+  false (e.g. an empty string or an error message).
+
+  By default, the test source file will be given a ``.F90`` file extension. The
+  ``SRC_EXT`` option can be used to override this with ``.<extension>`` instead.
+
+  The underlying check is performed by the :command:`try_run` command. The
+  compile and link commands can be influenced by setting any of the following
+  variables prior to calling ``check_fortran_source_runs()``:
+
+  ``CMAKE_REQUIRED_FLAGS``
+    Additional flags to pass to the compiler. Note that the contents of
+    :variable:`CMAKE_Fortran_FLAGS <CMAKE_<LANG>_FLAGS>` and its associated
+    configuration-specific variable are automatically added to the compiler
+    command before the contents of ``CMAKE_REQUIRED_FLAGS``.
+
+  ``CMAKE_REQUIRED_DEFINITIONS``
+    A :ref:`;-list <CMake Language Lists>` of compiler definitions of the form
+    ``-DFOO`` or ``-DFOO=bar``. A definition for the name specified by
+    ``<resultVar>`` will also be added automatically.
+
+  ``CMAKE_REQUIRED_INCLUDES``
+    A :ref:`;-list <CMake Language Lists>` of header search paths to pass to
+    the compiler. These will be the only header search paths used by
+    ``try_run()``, i.e. the contents of the :prop_dir:`INCLUDE_DIRECTORIES`
+    directory property will be ignored.
+
+  ``CMAKE_REQUIRED_LINK_OPTIONS``
+    A :ref:`;-list <CMake Language Lists>` of options to add to the link
+    command (see :command:`try_run` for further details).
+
+  ``CMAKE_REQUIRED_LIBRARIES``
+    A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
+    command. These can be the name of system libraries or they can be
+    :ref:`Imported Targets <Imported Targets>` (see :command:`try_run` for
+    further details).
+
+  ``CMAKE_REQUIRED_QUIET``
+    If this variable evaluates to a boolean true value, all status messages
+    associated with the check will be suppressed.
+
+  The check is only performed once, with the result cached in the variable
+  named by ``<resultVar>``. Every subsequent CMake run will re-use this cached
+  value rather than performing the check again, even if the ``<code>`` changes.
+  In order to force the check to be re-evaluated, the variable named by
+  ``<resultVar>`` must be manually removed from the cache.
+
+#]=======================================================================]
+
+include_guard(GLOBAL)
+include(Internal/CheckSourceRuns)
+
+macro(CHECK_Fortran_SOURCE_RUNS SOURCE VAR)
+  # Pass the SRC_EXT we used by default historically.
+  # A user-provided SRC_EXT argument in ARGN will override ours.
+  cmake_check_source_runs(Fortran "${SOURCE}" ${VAR} SRC_EXT "F90" ${ARGN})
+endmacro()
diff --git a/share/cmake-3.18/Modules/CheckFunctionExists.c b/share/cmake-3.22/Modules/CheckFunctionExists.c
similarity index 100%
rename from share/cmake-3.18/Modules/CheckFunctionExists.c
rename to share/cmake-3.22/Modules/CheckFunctionExists.c
diff --git a/share/cmake-3.22/Modules/CheckFunctionExists.cmake b/share/cmake-3.22/Modules/CheckFunctionExists.cmake
new file mode 100644
index 0000000..9efa132
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckFunctionExists.cmake
@@ -0,0 +1,121 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckFunctionExists
+-------------------
+
+Check if a C function can be linked
+
+.. command:: check_function_exists
+
+  .. code-block:: cmake
+
+    check_function_exists(<function> <variable>)
+
+  Checks that the ``<function>`` is provided by libraries on the system and store
+  the result in a ``<variable>``, which will be created as an internal
+  cache variable.
+
+The following variables may be set before calling this macro to modify the
+way the check is run:
+
+``CMAKE_REQUIRED_FLAGS``
+  string of compile command line flags.
+``CMAKE_REQUIRED_DEFINITIONS``
+  a :ref:`;-list <CMake Language Lists>` of macros to define (-DFOO=bar).
+``CMAKE_REQUIRED_INCLUDES``
+  a :ref:`;-list <CMake Language Lists>` of header search paths to pass to
+  the compiler.
+``CMAKE_REQUIRED_LINK_OPTIONS``
+  .. versionadded:: 3.14
+    a :ref:`;-list <CMake Language Lists>` of options to add to the link command.
+``CMAKE_REQUIRED_LIBRARIES``
+  a :ref:`;-list <CMake Language Lists>` of libraries to add to the link
+  command. See policy :policy:`CMP0075`.
+``CMAKE_REQUIRED_QUIET``
+  .. versionadded:: 3.1
+    execute quietly without messages.
+
+.. note::
+
+  Prefer using :Module:`CheckSymbolExists` instead of this module,
+  for the following reasons:
+
+  * ``check_function_exists()`` can't detect functions that are inlined
+    in headers or specified as a macro.
+
+  * ``check_function_exists()`` can't detect anything in the 32-bit
+    versions of the Win32 API, because of a mismatch in calling conventions.
+
+  * ``check_function_exists()`` only verifies linking, it does not verify
+    that the function is declared in system headers.
+#]=======================================================================]
+
+include_guard(GLOBAL)
+
+macro(CHECK_FUNCTION_EXISTS FUNCTION VARIABLE)
+  if(NOT DEFINED "${VARIABLE}" OR "x${${VARIABLE}}" STREQUAL "x${VARIABLE}")
+    set(MACRO_CHECK_FUNCTION_DEFINITIONS
+      "-DCHECK_FUNCTION_EXISTS=${FUNCTION} ${CMAKE_REQUIRED_FLAGS}")
+    if(NOT CMAKE_REQUIRED_QUIET)
+      message(CHECK_START "Looking for ${FUNCTION}")
+    endif()
+    if(CMAKE_REQUIRED_LINK_OPTIONS)
+      set(CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS
+        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
+    else()
+      set(CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS)
+    endif()
+    if(CMAKE_REQUIRED_LIBRARIES)
+      set(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES
+        LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
+    else()
+      set(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES)
+    endif()
+    if(CMAKE_REQUIRED_INCLUDES)
+      set(CHECK_FUNCTION_EXISTS_ADD_INCLUDES
+        "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
+    else()
+      set(CHECK_FUNCTION_EXISTS_ADD_INCLUDES)
+    endif()
+
+    if(CMAKE_C_COMPILER_LOADED)
+      set(_cfe_source ${CMAKE_ROOT}/Modules/CheckFunctionExists.c)
+    elseif(CMAKE_CXX_COMPILER_LOADED)
+      set(_cfe_source ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CheckFunctionExists/CheckFunctionExists.cxx)
+      configure_file(${CMAKE_ROOT}/Modules/CheckFunctionExists.c "${_cfe_source}" COPYONLY)
+    else()
+      message(FATAL_ERROR "CHECK_FUNCTION_EXISTS needs either C or CXX language enabled")
+    endif()
+
+    try_compile(${VARIABLE}
+      ${CMAKE_BINARY_DIR}
+      ${_cfe_source}
+      COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+      ${CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS}
+      ${CHECK_FUNCTION_EXISTS_ADD_LIBRARIES}
+      CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
+      "${CHECK_FUNCTION_EXISTS_ADD_INCLUDES}"
+      OUTPUT_VARIABLE OUTPUT)
+    unset(_cfe_source)
+
+    if(${VARIABLE})
+      set(${VARIABLE} 1 CACHE INTERNAL "Have function ${FUNCTION}")
+      if(NOT CMAKE_REQUIRED_QUIET)
+        message(CHECK_PASS "found")
+      endif()
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+        "Determining if the function ${FUNCTION} exists passed with the following output:\n"
+        "${OUTPUT}\n\n")
+    else()
+      if(NOT CMAKE_REQUIRED_QUIET)
+        message(CHECK_FAIL "not found")
+      endif()
+      set(${VARIABLE} "" CACHE INTERNAL "Have function ${FUNCTION}")
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+        "Determining if the function ${FUNCTION} exists failed with the following output:\n"
+        "${OUTPUT}\n\n")
+    endif()
+  endif()
+endmacro()
diff --git a/share/cmake-3.22/Modules/CheckIPOSupported.cmake b/share/cmake-3.22/Modules/CheckIPOSupported.cmake
new file mode 100644
index 0000000..0bc3c92
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckIPOSupported.cmake
@@ -0,0 +1,244 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckIPOSupported
+-----------------
+
+.. versionadded:: 3.9
+
+Check whether the compiler supports an interprocedural optimization (IPO/LTO).
+Use this before enabling the :prop_tgt:`INTERPROCEDURAL_OPTIMIZATION` target
+property.
+
+.. command:: check_ipo_supported
+
+  ::
+
+    check_ipo_supported([RESULT <result>] [OUTPUT <output>]
+                        [LANGUAGES <lang>...])
+
+  Options are:
+
+  ``RESULT <result>``
+    Set ``<result>`` variable to ``YES`` if IPO is supported by the
+    compiler and ``NO`` otherwise.  If this option is not given then
+    the command will issue a fatal error if IPO is not supported.
+  ``OUTPUT <output>``
+    Set ``<output>`` variable with details about any error.
+  ``LANGUAGES <lang>...``
+    Specify languages whose compilers to check.
+    Languages ``C``, ``CXX``, and ``Fortran`` are supported.
+
+It makes no sense to use this module when :policy:`CMP0069` is set to ``OLD`` so
+module will return error in this case. See policy :policy:`CMP0069` for details.
+
+.. versionadded:: 3.13
+  Add support for Visual Studio generators.
+
+Examples
+^^^^^^^^
+
+.. code-block:: cmake
+
+  check_ipo_supported() # fatal error if IPO is not supported
+  set_property(TARGET foo PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
+
+.. code-block:: cmake
+
+  # Optional IPO. Do not use IPO if it's not supported by compiler.
+  check_ipo_supported(RESULT result OUTPUT output)
+  if(result)
+    set_property(TARGET foo PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
+  else()
+    message(WARNING "IPO is not supported: ${output}")
+  endif()
+
+#]=======================================================================]
+
+# X_RESULT - name of the final result variable
+# X_OUTPUT - name of the variable with information about error
+macro(_ipo_not_supported output)
+  if(NOT X_RESULT)
+    message(FATAL_ERROR "IPO is not supported (${output}).")
+  endif()
+
+  set("${X_RESULT}" NO PARENT_SCOPE)
+  if(X_OUTPUT)
+    set("${X_OUTPUT}" "${output}" PARENT_SCOPE)
+  endif()
+endmacro()
+
+# Run IPO/LTO test
+macro(_ipo_run_language_check language)
+  set(testdir "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/_CMakeLTOTest-${language}")
+
+  file(REMOVE_RECURSE "${testdir}")
+  file(MAKE_DIRECTORY "${testdir}")
+
+  set(bindir "${testdir}/bin")
+  set(srcdir "${testdir}/src")
+
+  file(MAKE_DIRECTORY "${bindir}")
+  file(MAKE_DIRECTORY "${srcdir}")
+
+  set(TRY_COMPILE_PROJECT_NAME "lto-test")
+
+  set(try_compile_src "${CMAKE_ROOT}/Modules/CheckIPOSupported")
+
+  # Use:
+  # * TRY_COMPILE_PROJECT_NAME
+  # * CMAKE_VERSION
+  configure_file(
+      "${try_compile_src}/CMakeLists-${language}.txt.in"
+      "${srcdir}/CMakeLists.txt"
+      @ONLY
+  )
+
+  string(COMPARE EQUAL "${language}" "C" is_c)
+  string(COMPARE EQUAL "${language}" "CXX" is_cxx)
+  string(COMPARE EQUAL "${language}" "Fortran" is_fortran)
+
+  if(is_c)
+    set(copy_sources foo.c main.c)
+  elseif(is_cxx)
+    set(copy_sources foo.cpp main.cpp)
+  elseif(is_fortran)
+    set(copy_sources foo.f main.f)
+  else()
+    message(FATAL_ERROR "Language not supported")
+  endif()
+
+  foreach(x ${copy_sources})
+    configure_file(
+        "${try_compile_src}/${x}"
+        "${srcdir}/${x}"
+        COPYONLY
+    )
+  endforeach()
+
+  try_compile(
+      _IPO_LANGUAGE_CHECK_RESULT
+      "${bindir}"
+      "${srcdir}"
+      "${TRY_COMPILE_PROJECT_NAME}"
+      CMAKE_FLAGS
+      "-DCMAKE_VERBOSE_MAKEFILE=ON"
+      "-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON"
+      OUTPUT_VARIABLE output
+  )
+  set(_IPO_LANGUAGE_CHECK_RESULT "${_IPO_LANGUAGE_CHECK_RESULT}")
+  unset(_IPO_LANGUAGE_CHECK_RESULT CACHE)
+
+  if(NOT _IPO_LANGUAGE_CHECK_RESULT)
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+      "${language} compiler IPO check failed with the following output:\n"
+      "${output}\n")
+    _ipo_not_supported("check failed to compile")
+    if(X_OUTPUT)
+      set("${X_OUTPUT}" "${output}" PARENT_SCOPE)
+    endif()
+    return()
+  endif()
+endmacro()
+
+function(check_ipo_supported)
+  cmake_policy(GET CMP0069 x)
+
+  string(COMPARE EQUAL "${x}" "" not_set)
+  if(not_set)
+    message(FATAL_ERROR "Policy CMP0069 is not set")
+  endif()
+
+  string(COMPARE EQUAL "${x}" "OLD" is_old)
+  if(is_old)
+    message(FATAL_ERROR "Policy CMP0069 set to OLD")
+  endif()
+
+  set(optional)
+  set(one RESULT OUTPUT)
+  set(multiple LANGUAGES)
+
+  # Introduce:
+  # * X_RESULT
+  # * X_OUTPUT
+  # * X_LANGUAGES
+  cmake_parse_arguments(X "${optional}" "${one}" "${multiple}" "${ARGV}")
+
+  string(COMPARE NOTEQUAL "${X_UNPARSED_ARGUMENTS}" "" has_unparsed)
+  if(has_unparsed)
+    message(FATAL_ERROR "Unparsed arguments: ${X_UNPARSED_ARGUMENTS}")
+  endif()
+
+  string(COMPARE EQUAL "${X_LANGUAGES}" "" no_languages)
+  if(no_languages)
+    # User did not set any languages, use defaults
+    get_property(enabled_languages GLOBAL PROPERTY ENABLED_LANGUAGES)
+    string(COMPARE EQUAL "${enabled_languages}" "" no_languages)
+    if(no_languages)
+      _ipo_not_supported(
+          "no languages found in ENABLED_LANGUAGES global property"
+      )
+      return()
+    endif()
+
+    set(languages "")
+    list(FIND enabled_languages "CXX" result)
+    if(NOT result EQUAL -1)
+      list(APPEND languages "CXX")
+    endif()
+
+    list(FIND enabled_languages "C" result)
+    if(NOT result EQUAL -1)
+      list(APPEND languages "C")
+    endif()
+
+    list(FIND enabled_languages "Fortran" result)
+    if(NOT result EQUAL -1)
+      list(APPEND languages "Fortran")
+    endif()
+
+    string(COMPARE EQUAL "${languages}" "" no_languages)
+    if(no_languages)
+      _ipo_not_supported(
+          "no C/CXX/Fortran languages found in ENABLED_LANGUAGES global property"
+      )
+      return()
+    endif()
+  else()
+    set(languages "${X_LANGUAGES}")
+
+    set(unsupported_languages "${languages}")
+    list(REMOVE_ITEM unsupported_languages "C" "CXX" "Fortran")
+    string(COMPARE NOTEQUAL "${unsupported_languages}" "" has_unsupported)
+    if(has_unsupported)
+      _ipo_not_supported(
+          "language(s) '${unsupported_languages}' not supported"
+      )
+      return()
+    endif()
+  endif()
+
+  foreach(lang ${languages})
+    if(NOT _CMAKE_${lang}_IPO_SUPPORTED_BY_CMAKE)
+      _ipo_not_supported("CMake doesn't support IPO for current ${lang} compiler")
+      return()
+    endif()
+
+    if(NOT _CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER)
+      _ipo_not_supported("${lang} compiler doesn't support IPO")
+      return()
+    endif()
+  endforeach()
+
+  if(CMAKE_GENERATOR MATCHES "^Visual Studio 9 ")
+    _ipo_not_supported("CMake doesn't support IPO for current generator")
+    return()
+  endif()
+
+  foreach(x ${languages})
+    _ipo_run_language_check(${x})
+  endforeach()
+
+  set("${X_RESULT}" YES PARENT_SCOPE)
+endfunction()
diff --git a/share/cmake-3.18/Modules/CheckIPOSupported/CMakeLists-C.txt.in b/share/cmake-3.22/Modules/CheckIPOSupported/CMakeLists-C.txt.in
similarity index 100%
rename from share/cmake-3.18/Modules/CheckIPOSupported/CMakeLists-C.txt.in
rename to share/cmake-3.22/Modules/CheckIPOSupported/CMakeLists-C.txt.in
diff --git a/share/cmake-3.18/Modules/CheckIPOSupported/CMakeLists-CXX.txt.in b/share/cmake-3.22/Modules/CheckIPOSupported/CMakeLists-CXX.txt.in
similarity index 100%
rename from share/cmake-3.18/Modules/CheckIPOSupported/CMakeLists-CXX.txt.in
rename to share/cmake-3.22/Modules/CheckIPOSupported/CMakeLists-CXX.txt.in
diff --git a/share/cmake-3.18/Modules/CheckIPOSupported/CMakeLists-Fortran.txt.in b/share/cmake-3.22/Modules/CheckIPOSupported/CMakeLists-Fortran.txt.in
similarity index 100%
rename from share/cmake-3.18/Modules/CheckIPOSupported/CMakeLists-Fortran.txt.in
rename to share/cmake-3.22/Modules/CheckIPOSupported/CMakeLists-Fortran.txt.in
diff --git a/share/cmake-3.18/Modules/CheckIPOSupported/foo.c b/share/cmake-3.22/Modules/CheckIPOSupported/foo.c
similarity index 100%
rename from share/cmake-3.18/Modules/CheckIPOSupported/foo.c
rename to share/cmake-3.22/Modules/CheckIPOSupported/foo.c
diff --git a/share/cmake-3.18/Modules/CheckIPOSupported/foo.cpp b/share/cmake-3.22/Modules/CheckIPOSupported/foo.cpp
similarity index 100%
rename from share/cmake-3.18/Modules/CheckIPOSupported/foo.cpp
rename to share/cmake-3.22/Modules/CheckIPOSupported/foo.cpp
diff --git a/share/cmake-3.18/Modules/CheckIPOSupported/foo.f b/share/cmake-3.22/Modules/CheckIPOSupported/foo.f
similarity index 100%
rename from share/cmake-3.18/Modules/CheckIPOSupported/foo.f
rename to share/cmake-3.22/Modules/CheckIPOSupported/foo.f
diff --git a/share/cmake-3.18/Modules/CheckIPOSupported/main.c b/share/cmake-3.22/Modules/CheckIPOSupported/main.c
similarity index 100%
rename from share/cmake-3.18/Modules/CheckIPOSupported/main.c
rename to share/cmake-3.22/Modules/CheckIPOSupported/main.c
diff --git a/share/cmake-3.18/Modules/CheckIPOSupported/main.cpp b/share/cmake-3.22/Modules/CheckIPOSupported/main.cpp
similarity index 100%
rename from share/cmake-3.18/Modules/CheckIPOSupported/main.cpp
rename to share/cmake-3.22/Modules/CheckIPOSupported/main.cpp
diff --git a/share/cmake-3.18/Modules/CheckIPOSupported/main.f b/share/cmake-3.22/Modules/CheckIPOSupported/main.f
similarity index 100%
rename from share/cmake-3.18/Modules/CheckIPOSupported/main.f
rename to share/cmake-3.22/Modules/CheckIPOSupported/main.f
diff --git a/share/cmake-3.18/Modules/CheckIncludeFile.c.in b/share/cmake-3.22/Modules/CheckIncludeFile.c.in
similarity index 100%
rename from share/cmake-3.18/Modules/CheckIncludeFile.c.in
rename to share/cmake-3.22/Modules/CheckIncludeFile.c.in
diff --git a/share/cmake-3.22/Modules/CheckIncludeFile.cmake b/share/cmake-3.22/Modules/CheckIncludeFile.cmake
new file mode 100644
index 0000000..71ddde7
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckIncludeFile.cmake
@@ -0,0 +1,132 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckIncludeFile
+----------------
+
+Provides a macro to check if a header file can be included in ``C``.
+
+.. command:: CHECK_INCLUDE_FILE
+
+  .. code-block:: cmake
+
+    CHECK_INCLUDE_FILE(<include> <variable> [<flags>])
+
+  Check if the given ``<include>`` file may be included in a ``C``
+  source file and store the result in an internal cache entry named
+  ``<variable>``.  The optional third argument may be used to add
+  compilation flags to the check (or use ``CMAKE_REQUIRED_FLAGS`` below).
+
+The following variables may be set before calling this macro to modify
+the way the check is run:
+
+``CMAKE_REQUIRED_FLAGS``
+  string of compile command line flags.
+``CMAKE_REQUIRED_DEFINITIONS``
+  a :ref:`;-list <CMake Language Lists>` of macros to define (-DFOO=bar).
+``CMAKE_REQUIRED_INCLUDES``
+  a :ref:`;-list <CMake Language Lists>` of header search paths to pass to
+  the compiler.
+``CMAKE_REQUIRED_LINK_OPTIONS``
+  .. versionadded:: 3.14
+    a :ref:`;-list <CMake Language Lists>` of options to add to the link command.
+``CMAKE_REQUIRED_LIBRARIES``
+  a :ref:`;-list <CMake Language Lists>` of libraries to add to the link
+  command. See policy :policy:`CMP0075`.
+``CMAKE_REQUIRED_QUIET``
+  .. versionadded:: 3.1
+    execute quietly without messages.
+
+See the :module:`CheckIncludeFiles` module to check for multiple headers
+at once.  See the :module:`CheckIncludeFileCXX` module to check for headers
+using the ``CXX`` language.
+#]=======================================================================]
+
+include_guard(GLOBAL)
+
+macro(CHECK_INCLUDE_FILE INCLUDE VARIABLE)
+  if(NOT DEFINED "${VARIABLE}")
+    if(CMAKE_REQUIRED_INCLUDES)
+      set(CHECK_INCLUDE_FILE_C_INCLUDE_DIRS "-DINCLUDE_DIRECTORIES=${CMAKE_REQUIRED_INCLUDES}")
+    else()
+      set(CHECK_INCLUDE_FILE_C_INCLUDE_DIRS)
+    endif()
+    set(MACRO_CHECK_INCLUDE_FILE_FLAGS ${CMAKE_REQUIRED_FLAGS})
+    set(CHECK_INCLUDE_FILE_VAR ${INCLUDE})
+    configure_file(${CMAKE_ROOT}/Modules/CheckIncludeFile.c.in
+      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckIncludeFile.c)
+    if(NOT CMAKE_REQUIRED_QUIET)
+      message(CHECK_START "Looking for ${INCLUDE}")
+    endif()
+    if(${ARGC} EQUAL 3)
+      set(CMAKE_C_FLAGS_SAVE ${CMAKE_C_FLAGS})
+      string(APPEND CMAKE_C_FLAGS " ${ARGV2}")
+    endif()
+
+    set(_CIF_LINK_OPTIONS)
+    if(CMAKE_REQUIRED_LINK_OPTIONS)
+      set(_CIF_LINK_OPTIONS LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
+    endif()
+
+    set(_CIF_LINK_LIBRARIES "")
+    if(CMAKE_REQUIRED_LIBRARIES)
+      cmake_policy(GET CMP0075 _CIF_CMP0075
+        PARENT_SCOPE # undocumented, do not use outside of CMake
+        )
+      if("x${_CIF_CMP0075}x" STREQUAL "xNEWx")
+        set(_CIF_LINK_LIBRARIES LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
+      elseif("x${_CIF_CMP0075}x" STREQUAL "xOLDx")
+      elseif(NOT _CIF_CMP0075_WARNED)
+        set(_CIF_CMP0075_WARNED 1)
+        message(AUTHOR_WARNING
+          "Policy CMP0075 is not set: Include file check macros honor CMAKE_REQUIRED_LIBRARIES.  "
+          "Run \"cmake --help-policy CMP0075\" for policy details.  "
+          "Use the cmake_policy command to set the policy and suppress this warning."
+          "\n"
+          "CMAKE_REQUIRED_LIBRARIES is set to:\n"
+          "  ${CMAKE_REQUIRED_LIBRARIES}\n"
+          "For compatibility with CMake 3.11 and below this check is ignoring it."
+          )
+      endif()
+      unset(_CIF_CMP0075)
+    endif()
+
+    try_compile(${VARIABLE}
+      ${CMAKE_BINARY_DIR}
+      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckIncludeFile.c
+      COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+      ${_CIF_LINK_OPTIONS}
+      ${_CIF_LINK_LIBRARIES}
+      CMAKE_FLAGS
+      -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILE_FLAGS}
+      "${CHECK_INCLUDE_FILE_C_INCLUDE_DIRS}"
+      OUTPUT_VARIABLE OUTPUT)
+    unset(_CIF_LINK_OPTIONS)
+    unset(_CIF_LINK_LIBRARIES)
+
+    if(${ARGC} EQUAL 3)
+      set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS_SAVE})
+    endif()
+
+    if(${VARIABLE})
+      if(NOT CMAKE_REQUIRED_QUIET)
+        message(CHECK_PASS "found")
+      endif()
+      set(${VARIABLE} 1 CACHE INTERNAL "Have include ${INCLUDE}")
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+        "Determining if the include file ${INCLUDE} "
+        "exists passed with the following output:\n"
+        "${OUTPUT}\n\n")
+    else()
+      if(NOT CMAKE_REQUIRED_QUIET)
+        message(CHECK_FAIL "not found")
+      endif()
+      set(${VARIABLE} "" CACHE INTERNAL "Have include ${INCLUDE}")
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+        "Determining if the include file ${INCLUDE} "
+        "exists failed with the following output:\n"
+        "${OUTPUT}\n\n")
+    endif()
+  endif()
+endmacro()
diff --git a/share/cmake-3.18/Modules/CheckIncludeFile.cxx.in b/share/cmake-3.22/Modules/CheckIncludeFile.cxx.in
similarity index 100%
rename from share/cmake-3.18/Modules/CheckIncludeFile.cxx.in
rename to share/cmake-3.22/Modules/CheckIncludeFile.cxx.in
diff --git a/share/cmake-3.22/Modules/CheckIncludeFileCXX.cmake b/share/cmake-3.22/Modules/CheckIncludeFileCXX.cmake
new file mode 100644
index 0000000..953224e
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckIncludeFileCXX.cmake
@@ -0,0 +1,131 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckIncludeFileCXX
+-------------------
+
+Provides a macro to check if a header file can be included in ``CXX``.
+
+.. command:: CHECK_INCLUDE_FILE_CXX
+
+  .. code-block:: cmake
+
+    CHECK_INCLUDE_FILE_CXX(<include> <variable> [<flags>])
+
+  Check if the given ``<include>`` file may be included in a ``CXX``
+  source file and store the result in an internal cache entry named
+  ``<variable>``.  The optional third argument may be used to add
+  compilation flags to the check (or use ``CMAKE_REQUIRED_FLAGS`` below).
+
+The following variables may be set before calling this macro to modify
+the way the check is run:
+
+``CMAKE_REQUIRED_FLAGS``
+  string of compile command line flags.
+``CMAKE_REQUIRED_DEFINITIONS``
+  a :ref:`;-list <CMake Language Lists>` of macros to define (-DFOO=bar).
+``CMAKE_REQUIRED_INCLUDES``
+  a :ref:`;-list <CMake Language Lists>` of header search paths to pass to
+  the compiler.
+``CMAKE_REQUIRED_LINK_OPTIONS``
+  .. versionadded:: 3.14
+    a :ref:`;-list <CMake Language Lists>` of options to add to the link command.
+``CMAKE_REQUIRED_LIBRARIES``
+  a :ref:`;-list <CMake Language Lists>` of libraries to add to the link
+  command. See policy :policy:`CMP0075`.
+``CMAKE_REQUIRED_QUIET``
+  .. versionadded:: 3.1
+    execute quietly without messages.
+
+See modules :module:`CheckIncludeFile` and :module:`CheckIncludeFiles`
+to check for one or more ``C`` headers.
+#]=======================================================================]
+
+include_guard(GLOBAL)
+
+macro(CHECK_INCLUDE_FILE_CXX INCLUDE VARIABLE)
+  if(NOT DEFINED "${VARIABLE}" OR "x${${VARIABLE}}" STREQUAL "x${VARIABLE}")
+    if(CMAKE_REQUIRED_INCLUDES)
+      set(CHECK_INCLUDE_FILE_CXX_INCLUDE_DIRS "-DINCLUDE_DIRECTORIES=${CMAKE_REQUIRED_INCLUDES}")
+    else()
+      set(CHECK_INCLUDE_FILE_CXX_INCLUDE_DIRS)
+    endif()
+    set(MACRO_CHECK_INCLUDE_FILE_FLAGS ${CMAKE_REQUIRED_FLAGS})
+    set(CHECK_INCLUDE_FILE_VAR ${INCLUDE})
+    configure_file(${CMAKE_ROOT}/Modules/CheckIncludeFile.cxx.in
+      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckIncludeFile.cxx)
+    if(NOT CMAKE_REQUIRED_QUIET)
+      message(CHECK_START "Looking for C++ include ${INCLUDE}")
+    endif()
+    if(${ARGC} EQUAL 3)
+      set(CMAKE_CXX_FLAGS_SAVE ${CMAKE_CXX_FLAGS})
+      string(APPEND CMAKE_CXX_FLAGS " ${ARGV2}")
+    endif()
+
+    set(_CIF_LINK_OPTIONS)
+    if(CMAKE_REQUIRED_LINK_OPTIONS)
+      set(_CIF_LINK_OPTIONS LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
+    endif()
+
+    set(_CIF_LINK_LIBRARIES "")
+    if(CMAKE_REQUIRED_LIBRARIES)
+      cmake_policy(GET CMP0075 _CIF_CMP0075
+        PARENT_SCOPE # undocumented, do not use outside of CMake
+        )
+      if("x${_CIF_CMP0075}x" STREQUAL "xNEWx")
+        set(_CIF_LINK_LIBRARIES LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
+      elseif("x${_CIF_CMP0075}x" STREQUAL "xOLDx")
+      elseif(NOT _CIF_CMP0075_WARNED)
+        set(_CIF_CMP0075_WARNED 1)
+        message(AUTHOR_WARNING
+          "Policy CMP0075 is not set: Include file check macros honor CMAKE_REQUIRED_LIBRARIES.  "
+          "Run \"cmake --help-policy CMP0075\" for policy details.  "
+          "Use the cmake_policy command to set the policy and suppress this warning."
+          "\n"
+          "CMAKE_REQUIRED_LIBRARIES is set to:\n"
+          "  ${CMAKE_REQUIRED_LIBRARIES}\n"
+          "For compatibility with CMake 3.11 and below this check is ignoring it."
+          )
+      endif()
+      unset(_CIF_CMP0075)
+    endif()
+
+    try_compile(${VARIABLE}
+      ${CMAKE_BINARY_DIR}
+      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckIncludeFile.cxx
+      COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+      ${_CIF_LINK_OPTIONS}
+      ${_CIF_LINK_LIBRARIES}
+      CMAKE_FLAGS
+      -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILE_FLAGS}
+      "${CHECK_INCLUDE_FILE_CXX_INCLUDE_DIRS}"
+      OUTPUT_VARIABLE OUTPUT)
+    unset(_CIF_LINK_OPTIONS)
+    unset(_CIF_LINK_LIBRARIES)
+
+    if(${ARGC} EQUAL 3)
+      set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS_SAVE})
+    endif()
+
+    if(${VARIABLE})
+      if(NOT CMAKE_REQUIRED_QUIET)
+        message(CHECK_PASS "found")
+      endif()
+      set(${VARIABLE} 1 CACHE INTERNAL "Have include ${INCLUDE}")
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+        "Determining if the include file ${INCLUDE} "
+        "exists passed with the following output:\n"
+        "${OUTPUT}\n\n")
+    else()
+      if(NOT CMAKE_REQUIRED_QUIET)
+        message(CHECK_FAIL "not found")
+      endif()
+      set(${VARIABLE} "" CACHE INTERNAL "Have include ${INCLUDE}")
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+        "Determining if the include file ${INCLUDE} "
+        "exists failed with the following output:\n"
+        "${OUTPUT}\n\n")
+    endif()
+  endif()
+endmacro()
diff --git a/share/cmake-3.22/Modules/CheckIncludeFiles.cmake b/share/cmake-3.22/Modules/CheckIncludeFiles.cmake
new file mode 100644
index 0000000..1800ca8
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckIncludeFiles.cmake
@@ -0,0 +1,170 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckIncludeFiles
+-----------------
+
+Provides a macro to check if a list of one or more header files can
+be included together.
+
+.. command:: CHECK_INCLUDE_FILES
+
+  .. code-block:: cmake
+
+    CHECK_INCLUDE_FILES("<includes>" <variable> [LANGUAGE <language>])
+
+  Check if the given ``<includes>`` list may be included together
+  in a source file and store the result in an internal cache
+  entry named ``<variable>``.  Specify the ``<includes>`` argument
+  as a :ref:`;-list <CMake Language Lists>` of header file names.
+
+  If ``LANGUAGE`` is set, the specified compiler will be used to perform the
+  check. Acceptable values are ``C`` and ``CXX``. If not set, the C compiler
+  will be used if enabled. If the C compiler is not enabled, the C++
+  compiler will be used if enabled.
+
+The following variables may be set before calling this macro to modify
+the way the check is run:
+
+``CMAKE_REQUIRED_FLAGS``
+  string of compile command line flags.
+``CMAKE_REQUIRED_DEFINITIONS``
+  a :ref:`;-list <CMake Language Lists>` of macros to define (-DFOO=bar).
+``CMAKE_REQUIRED_INCLUDES``
+  a :ref:`;-list <CMake Language Lists>` of header search paths to pass to
+  the compiler.
+``CMAKE_REQUIRED_LINK_OPTIONS``
+  .. versionadded:: 3.14
+    a :ref:`;-list <CMake Language Lists>` of options to add to the link command.
+``CMAKE_REQUIRED_LIBRARIES``
+  a :ref:`;-list <CMake Language Lists>` of libraries to add to the link
+  command. See policy :policy:`CMP0075`.
+``CMAKE_REQUIRED_QUIET``
+  .. versionadded:: 3.1
+    execute quietly without messages.
+
+See modules :module:`CheckIncludeFile` and :module:`CheckIncludeFileCXX`
+to check for a single header file in ``C`` or ``CXX`` languages.
+#]=======================================================================]
+
+include_guard(GLOBAL)
+
+macro(CHECK_INCLUDE_FILES INCLUDE VARIABLE)
+  if(NOT DEFINED "${VARIABLE}")
+    set(CMAKE_CONFIGURABLE_FILE_CONTENT "/* */\n")
+
+    if("x${ARGN}" STREQUAL "x")
+       if(CMAKE_C_COMPILER_LOADED)
+         set(_lang C)
+       elseif(CMAKE_CXX_COMPILER_LOADED)
+         set(_lang CXX)
+       else()
+         message(FATAL_ERROR "CHECK_INCLUDE_FILES needs either C or CXX language enabled.\n")
+       endif()
+    elseif("x${ARGN}" MATCHES "^xLANGUAGE;([a-zA-Z]+)$")
+      set(_lang "${CMAKE_MATCH_1}")
+    elseif("x${ARGN}" MATCHES "^xLANGUAGE$")
+      message(FATAL_ERROR "No languages listed for LANGUAGE option.\nSupported languages: C, CXX.\n")
+    else()
+      message(FATAL_ERROR "Unknown arguments:\n  ${ARGN}\n")
+    endif()
+
+    if(_lang STREQUAL "C")
+      set(src ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CheckIncludeFiles/${VARIABLE}.c)
+    elseif(_lang STREQUAL "CXX")
+      set(src ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CheckIncludeFiles/${VARIABLE}.cpp)
+    else()
+      message(FATAL_ERROR "Unknown language:\n  ${_lang}\nSupported languages: C, CXX.\n")
+    endif()
+
+    if(CMAKE_REQUIRED_INCLUDES)
+      set(CHECK_INCLUDE_FILES_INCLUDE_DIRS "-DINCLUDE_DIRECTORIES=${CMAKE_REQUIRED_INCLUDES}")
+    else()
+      set(CHECK_INCLUDE_FILES_INCLUDE_DIRS)
+    endif()
+    set(CHECK_INCLUDE_FILES_CONTENT "/* */\n")
+    set(MACRO_CHECK_INCLUDE_FILES_FLAGS ${CMAKE_REQUIRED_FLAGS})
+    foreach(FILE ${INCLUDE})
+      string(APPEND CMAKE_CONFIGURABLE_FILE_CONTENT
+        "#include <${FILE}>\n")
+    endforeach()
+    string(APPEND CMAKE_CONFIGURABLE_FILE_CONTENT
+      "\n\nint main(void){return 0;}\n")
+    configure_file("${CMAKE_ROOT}/Modules/CMakeConfigurableFile.in"
+      "${src}" @ONLY)
+
+    set(_INCLUDE ${INCLUDE}) # remove empty elements
+    if("${_INCLUDE}" MATCHES "^([^;]+);.+;([^;]+)$")
+      list(LENGTH _INCLUDE _INCLUDE_LEN)
+      set(_description "${_INCLUDE_LEN} include files ${CMAKE_MATCH_1}, ..., ${CMAKE_MATCH_2}")
+    elseif("${_INCLUDE}" MATCHES "^([^;]+);([^;]+)$")
+      set(_description "include files ${CMAKE_MATCH_1}, ${CMAKE_MATCH_2}")
+    else()
+      set(_description "include file ${_INCLUDE}")
+    endif()
+
+    set(_CIF_LINK_OPTIONS)
+    if(CMAKE_REQUIRED_LINK_OPTIONS)
+      set(_CIF_LINK_OPTIONS LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
+    endif()
+
+    set(_CIF_LINK_LIBRARIES "")
+    if(CMAKE_REQUIRED_LIBRARIES)
+      cmake_policy(GET CMP0075 _CIF_CMP0075
+        PARENT_SCOPE # undocumented, do not use outside of CMake
+        )
+      if("x${_CIF_CMP0075}x" STREQUAL "xNEWx")
+        set(_CIF_LINK_LIBRARIES LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
+      elseif("x${_CIF_CMP0075}x" STREQUAL "xOLDx")
+      elseif(NOT _CIF_CMP0075_WARNED)
+        set(_CIF_CMP0075_WARNED 1)
+        message(AUTHOR_WARNING
+          "Policy CMP0075 is not set: Include file check macros honor CMAKE_REQUIRED_LIBRARIES.  "
+          "Run \"cmake --help-policy CMP0075\" for policy details.  "
+          "Use the cmake_policy command to set the policy and suppress this warning."
+          "\n"
+          "CMAKE_REQUIRED_LIBRARIES is set to:\n"
+          "  ${CMAKE_REQUIRED_LIBRARIES}\n"
+          "For compatibility with CMake 3.11 and below this check is ignoring it."
+          )
+      endif()
+      unset(_CIF_CMP0075)
+    endif()
+
+    if(NOT CMAKE_REQUIRED_QUIET)
+      message(CHECK_START "Looking for ${_description}")
+    endif()
+    try_compile(${VARIABLE}
+      ${CMAKE_BINARY_DIR}
+      ${src}
+      COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+      ${_CIF_LINK_OPTIONS}
+      ${_CIF_LINK_LIBRARIES}
+      CMAKE_FLAGS
+      -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILES_FLAGS}
+      "${CHECK_INCLUDE_FILES_INCLUDE_DIRS}"
+      OUTPUT_VARIABLE OUTPUT)
+    unset(_CIF_LINK_OPTIONS)
+    unset(_CIF_LINK_LIBRARIES)
+    if(${VARIABLE})
+      if(NOT CMAKE_REQUIRED_QUIET)
+        message(CHECK_PASS "found")
+      endif()
+      set(${VARIABLE} 1 CACHE INTERNAL "Have include ${INCLUDE}")
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+        "Determining if files ${INCLUDE} "
+        "exist passed with the following output:\n"
+        "${OUTPUT}\n\n")
+    else()
+      if(NOT CMAKE_REQUIRED_QUIET)
+        message(CHECK_FAIL "not found")
+      endif()
+      set(${VARIABLE} "" CACHE INTERNAL "Have includes ${INCLUDE}")
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+        "Determining if files ${INCLUDE} "
+        "exist failed with the following output:\n"
+        "${OUTPUT}\nSource:\n${CMAKE_CONFIGURABLE_FILE_CONTENT}\n")
+    endif()
+  endif()
+endmacro()
diff --git a/share/cmake-3.22/Modules/CheckLanguage.cmake b/share/cmake-3.22/Modules/CheckLanguage.cmake
new file mode 100644
index 0000000..52f707c
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckLanguage.cmake
@@ -0,0 +1,117 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckLanguage
+-------------
+
+Check if a language can be enabled
+
+Usage:
+
+::
+
+  check_language(<lang>)
+
+where ``<lang>`` is a language that may be passed to :command:`enable_language`
+such as ``Fortran``.  If :variable:`CMAKE_<LANG>_COMPILER` is already defined
+the check does nothing.  Otherwise it tries enabling the language in a
+test project.  The result is cached in :variable:`CMAKE_<LANG>_COMPILER`
+as the compiler that was found, or ``NOTFOUND`` if the language cannot be
+enabled. For CUDA which can have an explicit host compiler, the cache
+:variable:`CMAKE_CUDA_HOST_COMPILER` variable will be set if it was required
+for compilation (and cleared if it was not).
+
+Example:
+
+::
+
+  check_language(Fortran)
+  if(CMAKE_Fortran_COMPILER)
+    enable_language(Fortran)
+  else()
+    message(STATUS "No Fortran support")
+  endif()
+#]=======================================================================]
+
+include_guard(GLOBAL)
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0126 NEW)
+
+macro(check_language lang)
+  if(NOT DEFINED CMAKE_${lang}_COMPILER)
+    set(_desc "Looking for a ${lang} compiler")
+    message(CHECK_START "${_desc}")
+    file(REMOVE_RECURSE ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang})
+
+    set(extra_compiler_variables)
+    if(${lang} STREQUAL CUDA AND NOT CMAKE_GENERATOR MATCHES "Visual Studio")
+      set(extra_compiler_variables "set(CMAKE_CUDA_HOST_COMPILER \\\"\${CMAKE_CUDA_HOST_COMPILER}\\\")")
+    endif()
+
+    set(_cl_content
+      "cmake_minimum_required(VERSION ${CMAKE_VERSION})
+project(Check${lang} ${lang})
+file(WRITE \"\${CMAKE_CURRENT_BINARY_DIR}/result.cmake\"
+  \"set(CMAKE_${lang}_COMPILER \\\"\${CMAKE_${lang}_COMPILER}\\\")\\n\"
+  \"${extra_compiler_variables}\\n\"
+  )"
+    )
+
+    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang}/CMakeLists.txt"
+      "${_cl_content}")
+    if(CMAKE_GENERATOR_INSTANCE)
+      set(_D_CMAKE_GENERATOR_INSTANCE "-DCMAKE_GENERATOR_INSTANCE:INTERNAL=${CMAKE_GENERATOR_INSTANCE}")
+    else()
+      set(_D_CMAKE_GENERATOR_INSTANCE "")
+    endif()
+    if(CMAKE_GENERATOR MATCHES "^(Xcode$|Green Hills MULTI$|Visual Studio)")
+      set(_D_CMAKE_MAKE_PROGRAM "")
+    else()
+      set(_D_CMAKE_MAKE_PROGRAM "-DCMAKE_MAKE_PROGRAM:FILEPATH=${CMAKE_MAKE_PROGRAM}")
+    endif()
+    if(CMAKE_TOOLCHAIN_FILE)
+      set(_D_CMAKE_TOOLCHAIN_FILE "-DCMAKE_TOOLCHAIN_FILE:FILEPATH=${CMAKE_TOOLCHAIN_FILE}")
+    else()
+      set(_D_CMAKE_TOOLCHAIN_FILE "")
+    endif()
+    execute_process(
+      WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang}
+      COMMAND ${CMAKE_COMMAND} . -G ${CMAKE_GENERATOR}
+                                 -A "${CMAKE_GENERATOR_PLATFORM}"
+                                 -T "${CMAKE_GENERATOR_TOOLSET}"
+                                 ${_D_CMAKE_GENERATOR_INSTANCE}
+                                 ${_D_CMAKE_MAKE_PROGRAM}
+                                 ${_D_CMAKE_TOOLCHAIN_FILE}
+      OUTPUT_VARIABLE _cl_output
+      ERROR_VARIABLE _cl_output
+      RESULT_VARIABLE _cl_result
+      )
+    include(${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang}/result.cmake OPTIONAL)
+    if(CMAKE_${lang}_COMPILER AND "${_cl_result}" STREQUAL "0")
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+        "${_desc} passed with the following output:\n"
+        "${_cl_output}\n")
+      set(_CHECK_COMPILER_STATUS CHECK_PASS)
+    else()
+      set(CMAKE_${lang}_COMPILER NOTFOUND)
+      set(_CHECK_COMPILER_STATUS CHECK_FAIL)
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+        "${_desc} failed with the following output:\n"
+        "${_cl_output}\n")
+    endif()
+    message(${_CHECK_COMPILER_STATUS} "${CMAKE_${lang}_COMPILER}")
+    set(CMAKE_${lang}_COMPILER "${CMAKE_${lang}_COMPILER}" CACHE FILEPATH "${lang} compiler")
+    mark_as_advanced(CMAKE_${lang}_COMPILER)
+
+    if(CMAKE_${lang}_HOST_COMPILER)
+      message(STATUS "Looking for a ${lang} host compiler - ${CMAKE_${lang}_HOST_COMPILER}")
+      set(CMAKE_${lang}_HOST_COMPILER "${CMAKE_${lang}_HOST_COMPILER}" CACHE FILEPATH "${lang} host compiler")
+      mark_as_advanced(CMAKE_${lang}_HOST_COMPILER)
+    endif()
+
+  endif()
+endmacro()
+
+cmake_policy(POP)
diff --git a/share/cmake-3.22/Modules/CheckLibraryExists.cmake b/share/cmake-3.22/Modules/CheckLibraryExists.cmake
new file mode 100644
index 0000000..804e0cb
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckLibraryExists.cmake
@@ -0,0 +1,104 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckLibraryExists
+------------------
+
+Check if the function exists.
+
+.. command:: CHECK_LIBRARY_EXISTS
+
+  .. code-block:: cmake
+
+    CHECK_LIBRARY_EXISTS(LIBRARY FUNCTION LOCATION VARIABLE)
+
+  ::
+
+    LIBRARY  - the name of the library you are looking for
+    FUNCTION - the name of the function
+    LOCATION - location where the library should be found
+    VARIABLE - variable to store the result
+               Will be created as an internal cache variable.
+
+
+
+The following variables may be set before calling this macro to modify
+the way the check is run:
+
+``CMAKE_REQUIRED_FLAGS``
+  string of compile command line flags.
+``CMAKE_REQUIRED_DEFINITIONS``
+  list of macros to define (-DFOO=bar).
+``CMAKE_REQUIRED_LINK_OPTIONS``
+  .. versionadded:: 3.14
+    list of options to pass to link command.
+``CMAKE_REQUIRED_LIBRARIES``
+  list of libraries to link.
+``CMAKE_REQUIRED_QUIET``
+  .. versionadded:: 3.1
+    execute quietly without messages.
+#]=======================================================================]
+
+include_guard(GLOBAL)
+
+macro(CHECK_LIBRARY_EXISTS LIBRARY FUNCTION LOCATION VARIABLE)
+  if(NOT DEFINED "${VARIABLE}")
+    set(MACRO_CHECK_LIBRARY_EXISTS_DEFINITION
+      "-DCHECK_FUNCTION_EXISTS=${FUNCTION} ${CMAKE_REQUIRED_FLAGS}")
+    if(NOT CMAKE_REQUIRED_QUIET)
+      message(CHECK_START "Looking for ${FUNCTION} in ${LIBRARY}")
+    endif()
+    set(CHECK_LIBRARY_EXISTS_LINK_OPTIONS)
+    if(CMAKE_REQUIRED_LINK_OPTIONS)
+      set(CHECK_LIBRARY_EXISTS_LINK_OPTIONS
+        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
+    endif()
+    set(CHECK_LIBRARY_EXISTS_LIBRARIES ${LIBRARY})
+    if(CMAKE_REQUIRED_LIBRARIES)
+      set(CHECK_LIBRARY_EXISTS_LIBRARIES
+        ${CHECK_LIBRARY_EXISTS_LIBRARIES} ${CMAKE_REQUIRED_LIBRARIES})
+    endif()
+
+    if(CMAKE_C_COMPILER_LOADED)
+      set(_cle_source ${CMAKE_ROOT}/Modules/CheckFunctionExists.c)
+    elseif(CMAKE_CXX_COMPILER_LOADED)
+      set(_cle_source ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CheckLibraryExists/CheckFunctionExists.cxx)
+      configure_file(${CMAKE_ROOT}/Modules/CheckFunctionExists.c "${_cle_source}" COPYONLY)
+    else()
+      message(FATAL_ERROR "CHECK_FUNCTION_EXISTS needs either C or CXX language enabled")
+    endif()
+
+    try_compile(${VARIABLE}
+      ${CMAKE_BINARY_DIR}
+      ${_cle_source}
+      COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+      ${CHECK_LIBRARY_EXISTS_LINK_OPTIONS}
+      LINK_LIBRARIES ${CHECK_LIBRARY_EXISTS_LIBRARIES}
+      CMAKE_FLAGS
+      -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_LIBRARY_EXISTS_DEFINITION}
+      -DLINK_DIRECTORIES:STRING=${LOCATION}
+      OUTPUT_VARIABLE OUTPUT)
+    unset(_cle_source)
+
+    if(${VARIABLE})
+      if(NOT CMAKE_REQUIRED_QUIET)
+        message(CHECK_PASS "found")
+      endif()
+      set(${VARIABLE} 1 CACHE INTERNAL "Have library ${LIBRARY}")
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+        "Determining if the function ${FUNCTION} exists in the ${LIBRARY} "
+        "passed with the following output:\n"
+        "${OUTPUT}\n\n")
+    else()
+      if(NOT CMAKE_REQUIRED_QUIET)
+        message(CHECK_FAIL "not found")
+      endif()
+      set(${VARIABLE} "" CACHE INTERNAL "Have library ${LIBRARY}")
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+        "Determining if the function ${FUNCTION} exists in the ${LIBRARY} "
+        "failed with the following output:\n"
+        "${OUTPUT}\n\n")
+    endif()
+  endif()
+endmacro()
diff --git a/share/cmake-3.18/Modules/CheckLibraryExists.lists.in b/share/cmake-3.22/Modules/CheckLibraryExists.lists.in
similarity index 100%
rename from share/cmake-3.18/Modules/CheckLibraryExists.lists.in
rename to share/cmake-3.22/Modules/CheckLibraryExists.lists.in
diff --git a/share/cmake-3.22/Modules/CheckLinkerFlag.cmake b/share/cmake-3.22/Modules/CheckLinkerFlag.cmake
new file mode 100644
index 0000000..e85e43e
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckLinkerFlag.cmake
@@ -0,0 +1,90 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckLinkerFlag
+---------------
+
+.. versionadded:: 3.18
+
+Check whether the compiler supports a given link flag.
+
+.. command:: check_linker_flag
+
+  .. code-block:: cmake
+
+    check_linker_flag(<lang> <flag> <var>)
+
+Check that the link ``<flag>`` is accepted by the ``<lang>`` compiler without
+a diagnostic.  Stores the result in an internal cache entry named ``<var>``.
+
+This command temporarily sets the ``CMAKE_REQUIRED_LINK_OPTIONS`` variable
+and calls the :command:`check_source_compiles` command from the
+:module:`CheckSourceCompiles` module.  See that module's documentation
+for a listing of variables that can otherwise modify the build.
+
+The underlying implementation relies on the :prop_tgt:`LINK_OPTIONS` property
+to check the specified flag. The ``LINKER:`` prefix, as described in the
+:command:`target_link_options` command, can be used as well.
+
+A positive result from this check indicates only that the compiler did not
+issue a diagnostic message when given the link flag.  Whether the flag has any
+effect or even a specific one is beyond the scope of this module.
+
+.. note::
+  Since the :command:`try_compile` command forwards flags from variables
+  like :variable:`CMAKE_<LANG>_FLAGS`, unknown flags in such variables may
+  cause a false negative for this check.
+#]=======================================================================]
+
+include_guard(GLOBAL)
+
+include(CMakeCheckCompilerFlagCommonPatterns)
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0054 NEW) # if() quoted variables not dereferenced
+cmake_policy(SET CMP0057 NEW) # if() supports IN_LIST
+
+function(CHECK_LINKER_FLAG _lang _flag _var)
+  get_property (_supported_languages GLOBAL PROPERTY ENABLED_LANGUAGES)
+  if (NOT _lang IN_LIST _supported_languages)
+    message (SEND_ERROR "check_linker_flag: ${_lang}: unknown language.")
+    return()
+  endif()
+
+  include (CheckSourceCompiles)
+
+  set(CMAKE_REQUIRED_LINK_OPTIONS "${_flag}")
+
+  # Normalize locale during test compilation.
+  set(_locale_vars LC_ALL LC_MESSAGES LANG)
+  foreach(v IN LISTS _locale_vars)
+    set(_locale_vars_saved_${v} "$ENV{${v}}")
+    set(ENV{${v}} C)
+  endforeach()
+
+  if (_lang MATCHES "^(C|CXX)$")
+    set (_source "int main() { return 0; }")
+  elseif (_lang STREQUAL "Fortran")
+    set (_source "       program test\n       stop\n       end program")
+  elseif (_lang MATCHES "CUDA")
+    set (_source "__host__ int main() { return 0; }")
+  elseif (_lang MATCHES "HIP")
+    set (_source "__host__ int main() { return 0; }")
+  elseif (_lang MATCHES "^(OBJC|OBJCXX)$")
+    set (_source "#ifndef __OBJC__\n#  error \"Not an Objective-C++ compiler\"\n#endif\nint main(void) { return 0; }")
+  else()
+    message (SEND_ERROR "check_linker_flag: ${_lang}: unsupported language.")
+    return()
+  endif()
+  check_compiler_flag_common_patterns(_common_patterns)
+
+  check_source_compiles(${_lang} "${_source}" ${_var} ${_common_patterns})
+
+  foreach(v IN LISTS _locale_vars)
+    set(ENV{${v}} ${_locale_vars_saved_${v}})
+  endforeach()
+  set(${_var} "${${_var}}" PARENT_SCOPE)
+endfunction()
+
+cmake_policy(POP)
diff --git a/share/cmake-3.22/Modules/CheckOBJCCompilerFlag.cmake b/share/cmake-3.22/Modules/CheckOBJCCompilerFlag.cmake
new file mode 100644
index 0000000..d8d8741
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckOBJCCompilerFlag.cmake
@@ -0,0 +1,43 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckOBJCCompilerFlag
+---------------------
+
+.. versionadded:: 3.16
+
+Check whether the Objective-C compiler supports a given flag.
+
+.. command:: check_objc_compiler_flag
+
+  .. code-block:: cmake
+
+    check_objc_compiler_flag(<flag> <var>)
+
+  Check that the ``<flag>`` is accepted by the compiler without
+  a diagnostic.  Stores the result in an internal cache entry
+  named ``<var>``.
+
+This command temporarily sets the ``CMAKE_REQUIRED_DEFINITIONS`` variable
+and calls the ``check_objc_source_compiles`` macro from the
+:module:`CheckOBJCSourceCompiles` module.  See documentation of that
+module for a listing of variables that can otherwise modify the build.
+
+A positive result from this check indicates only that the compiler did not
+issue a diagnostic message when given the flag.  Whether the flag has any
+effect or even a specific one is beyond the scope of this module.
+
+.. note::
+  Since the :command:`try_compile` command forwards flags from variables
+  like :variable:`CMAKE_OBJC_FLAGS <CMAKE_<LANG>_FLAGS>`, unknown flags
+  in such variables may cause a false negative for this check.
+#]=======================================================================]
+
+include_guard(GLOBAL)
+include(CheckOBJCSourceCompiles)
+include(Internal/CheckCompilerFlag)
+
+macro (CHECK_OBJC_COMPILER_FLAG _FLAG _RESULT)
+  cmake_check_compiler_flag(OBJC "${_FLAG}" ${_RESULT})
+endmacro ()
diff --git a/share/cmake-3.22/Modules/CheckOBJCSourceCompiles.cmake b/share/cmake-3.22/Modules/CheckOBJCSourceCompiles.cmake
new file mode 100644
index 0000000..c268ef9
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckOBJCSourceCompiles.cmake
@@ -0,0 +1,75 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckOBJCSourceCompiles
+-----------------------
+
+.. versionadded:: 3.16
+
+Check if given Objective-C source compiles and links into an executable.
+
+.. command:: check_objc_source_compiles
+
+  .. code-block:: cmake
+
+    check_objc_source_compiles(<code> <resultVar>
+                               [FAIL_REGEX <regex1> [<regex2>...]])
+
+  Check that the source supplied in ``<code>`` can be compiled as a Objectie-C source
+  file and linked as an executable (so it must contain at least a ``main()``
+  function). The result will be stored in the internal cache variable specified
+  by ``<resultVar>``, with a boolean true value for success and boolean false
+  for failure. If ``FAIL_REGEX`` is provided, then failure is determined by
+  checking if anything in the output matches any of the specified regular
+  expressions.
+
+  The underlying check is performed by the :command:`try_compile` command. The
+  compile and link commands can be influenced by setting any of the following
+  variables prior to calling ``check_objc_source_compiles()``:
+
+  ``CMAKE_REQUIRED_FLAGS``
+    Additional flags to pass to the compiler. Note that the contents of
+    :variable:`CMAKE_OBJC_FLAGS <CMAKE_<LANG>_FLAGS>` and its associated
+    configuration-specific variable are automatically added to the compiler
+    command before the contents of ``CMAKE_REQUIRED_FLAGS``.
+
+  ``CMAKE_REQUIRED_DEFINITIONS``
+    A :ref:`;-list <CMake Language Lists>` of compiler definitions of the form
+    ``-DFOO`` or ``-DFOO=bar``. A definition for the name specified by
+    ``<resultVar>`` will also be added automatically.
+
+  ``CMAKE_REQUIRED_INCLUDES``
+    A :ref:`;-list <CMake Language Lists>` of header search paths to pass to
+    the compiler. These will be the only header search paths used by
+    ``try_compile()``, i.e. the contents of the :prop_dir:`INCLUDE_DIRECTORIES`
+    directory property will be ignored.
+
+  ``CMAKE_REQUIRED_LINK_OPTIONS``
+    A :ref:`;-list <CMake Language Lists>` of options to add to the link
+    command (see :command:`try_compile` for further details).
+
+  ``CMAKE_REQUIRED_LIBRARIES``
+    A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
+    command. These can be the name of system libraries or they can be
+    :ref:`Imported Targets <Imported Targets>` (see :command:`try_compile` for
+    further details).
+
+  ``CMAKE_REQUIRED_QUIET``
+    If this variable evaluates to a boolean true value, all status messages
+    associated with the check will be suppressed.
+
+  The check is only performed once, with the result cached in the variable
+  named by ``<resultVar>``. Every subsequent CMake run will re-use this cached
+  value rather than performing the check again, even if the ``<code>`` changes.
+  In order to force the check to be re-evaluated, the variable named by
+  ``<resultVar>`` must be manually removed from the cache.
+
+#]=======================================================================]
+
+include_guard(GLOBAL)
+include(Internal/CheckSourceCompiles)
+
+macro(CHECK_OBJC_SOURCE_COMPILES SOURCE VAR)
+  cmake_check_source_compiles(OBJC "${SOURCE}" ${VAR} ${ARGN})
+endmacro()
diff --git a/share/cmake-3.22/Modules/CheckOBJCSourceRuns.cmake b/share/cmake-3.22/Modules/CheckOBJCSourceRuns.cmake
new file mode 100644
index 0000000..dd03309
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckOBJCSourceRuns.cmake
@@ -0,0 +1,76 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckOBJCSourceRuns
+-------------------
+
+.. versionadded:: 3.16
+
+Check if given Objective-C source compiles and links into an executable and can
+subsequently be run.
+
+.. command:: check_objc_source_runs
+
+  .. code-block:: cmake
+
+    check_objc_source_runs(<code> <resultVar>)
+
+  Check that the source supplied in ``<code>`` can be compiled as a Objective-C source
+  file, linked as an executable and then run. The ``<code>`` must contain at
+  least a ``main()`` function. If the ``<code>`` could be built and run
+  successfully, the internal cache variable specified by ``<resultVar>`` will
+  be set to 1, otherwise it will be set to an value that evaluates to boolean
+  false (e.g. an empty string or an error message).
+
+  The underlying check is performed by the :command:`try_run` command. The
+  compile and link commands can be influenced by setting any of the following
+  variables prior to calling ``check_objc_source_runs()``:
+
+  ``CMAKE_REQUIRED_FLAGS``
+    Additional flags to pass to the compiler. Note that the contents of
+    :variable:`CMAKE_OBJC_FLAGS <CMAKE_<LANG>_FLAGS>` and its associated
+    configuration-specific variable are automatically added to the compiler
+    command before the contents of ``CMAKE_REQUIRED_FLAGS``.
+
+  ``CMAKE_REQUIRED_DEFINITIONS``
+    A :ref:`;-list <CMake Language Lists>` of compiler definitions of the form
+    ``-DFOO`` or ``-DFOO=bar``. A definition for the name specified by
+    ``<resultVar>`` will also be added automatically.
+
+  ``CMAKE_REQUIRED_INCLUDES``
+    A :ref:`;-list <CMake Language Lists>` of header search paths to pass to
+    the compiler. These will be the only header search paths used by
+    ``try_run()``, i.e. the contents of the :prop_dir:`INCLUDE_DIRECTORIES`
+    directory property will be ignored.
+
+  ``CMAKE_REQUIRED_LINK_OPTIONS``
+    A :ref:`;-list <CMake Language Lists>` of options to add to the link
+    command (see :command:`try_run` for further details).
+
+  ``CMAKE_REQUIRED_LIBRARIES``
+    A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
+    command. These can be the name of system libraries or they can be
+    :ref:`Imported Targets <Imported Targets>` (see :command:`try_run` for
+    further details).
+
+  ``CMAKE_REQUIRED_QUIET``
+    If this variable evaluates to a boolean true value, all status messages
+    associated with the check will be suppressed.
+
+  The check is only performed once, with the result cached in the variable
+  named by ``<resultVar>``. Every subsequent CMake run will re-use this cached
+  value rather than performing the check again, even if the ``<code>`` changes.
+  In order to force the check to be re-evaluated, the variable named by
+  ``<resultVar>`` must be manually removed from the cache.
+
+#]=======================================================================]
+
+include_guard(GLOBAL)
+include(Internal/CheckSourceRuns)
+
+macro(CHECK_OBJC_SOURCE_RUNS SOURCE VAR)
+  set(_CheckSourceRuns_old_signature 1)
+  cmake_check_source_runs(OBJC "${SOURCE}" ${VAR} ${ARGN})
+  unset(_CheckSourceRuns_old_signature)
+endmacro()
diff --git a/share/cmake-3.22/Modules/CheckOBJCXXCompilerFlag.cmake b/share/cmake-3.22/Modules/CheckOBJCXXCompilerFlag.cmake
new file mode 100644
index 0000000..3f3f8fe
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckOBJCXXCompilerFlag.cmake
@@ -0,0 +1,43 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckOBJCXXCompilerFlag
+-----------------------
+
+.. versionadded:: 3.16
+
+Check whether the Objective-C++ compiler supports a given flag.
+
+.. command:: check_objcxx_compiler_flag
+
+  .. code-block:: cmake
+
+    check_objcxx_compiler_flag(<flag> <var>)
+
+  Check that the ``<flag>`` is accepted by the compiler without
+  a diagnostic.  Stores the result in an internal cache entry
+  named ``<var>``.
+
+This command temporarily sets the ``CMAKE_REQUIRED_DEFINITIONS`` variable
+and calls the ``check_objcxx_source_compiles`` macro from the
+:module:`CheckOBJCXXSourceCompiles` module.  See documentation of that
+module for a listing of variables that can otherwise modify the build.
+
+A positive result from this check indicates only that the compiler did not
+issue a diagnostic message when given the flag.  Whether the flag has any
+effect or even a specific one is beyond the scope of this module.
+
+.. note::
+  Since the :command:`try_compile` command forwards flags from variables
+  like :variable:`CMAKE_OBJCXX_FLAGS <CMAKE_<LANG>_FLAGS>`, unknown flags
+  in such variables may cause a false negative for this check.
+#]=======================================================================]
+
+include_guard(GLOBAL)
+include(CheckOBJCXXSourceCompiles)
+include(Internal/CheckCompilerFlag)
+
+macro (CHECK_OBJCXX_COMPILER_FLAG _FLAG _RESULT)
+  cmake_check_compiler_flag(OBJCXX "${_FLAG}" ${_RESULT})
+endmacro ()
diff --git a/share/cmake-3.22/Modules/CheckOBJCXXSourceCompiles.cmake b/share/cmake-3.22/Modules/CheckOBJCXXSourceCompiles.cmake
new file mode 100644
index 0000000..1186934
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckOBJCXXSourceCompiles.cmake
@@ -0,0 +1,75 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckOBJCXXSourceCompiles
+-------------------------
+
+.. versionadded:: 3.16
+
+Check if given Objective-C++ source compiles and links into an executable.
+
+.. command:: check_objcxx_source_compiles
+
+  .. code-block:: cmake
+
+    check_objcxx_source_compiles(<code> <resultVar>
+                                 [FAIL_REGEX <regex1> [<regex2>...]])
+
+  Check that the source supplied in ``<code>`` can be compiled as a Objective-C++ source
+  file and linked as an executable (so it must contain at least a ``main()``
+  function). The result will be stored in the internal cache variable specified
+  by ``<resultVar>``, with a boolean true value for success and boolean false
+  for failure. If ``FAIL_REGEX`` is provided, then failure is determined by
+  checking if anything in the output matches any of the specified regular
+  expressions.
+
+  The underlying check is performed by the :command:`try_compile` command. The
+  compile and link commands can be influenced by setting any of the following
+  variables prior to calling ``check_objcxx_source_compiles()``:
+
+  ``CMAKE_REQUIRED_FLAGS``
+    Additional flags to pass to the compiler. Note that the contents of
+    :variable:`CMAKE_OBJCXX_FLAGS <CMAKE_<LANG>_FLAGS>` and its associated
+    configuration-specific variable are automatically added to the compiler
+    command before the contents of ``CMAKE_REQUIRED_FLAGS``.
+
+  ``CMAKE_REQUIRED_DEFINITIONS``
+    A :ref:`;-list <CMake Language Lists>` of compiler definitions of the form
+    ``-DFOO`` or ``-DFOO=bar``. A definition for the name specified by
+    ``<resultVar>`` will also be added automatically.
+
+  ``CMAKE_REQUIRED_INCLUDES``
+    A :ref:`;-list <CMake Language Lists>` of header search paths to pass to
+    the compiler. These will be the only header search paths used by
+    ``try_compile()``, i.e. the contents of the :prop_dir:`INCLUDE_DIRECTORIES`
+    directory property will be ignored.
+
+  ``CMAKE_REQUIRED_LINK_OPTIONS``
+    A :ref:`;-list <CMake Language Lists>` of options to add to the link
+    command (see :command:`try_compile` for further details).
+
+  ``CMAKE_REQUIRED_LIBRARIES``
+    A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
+    command. These can be the name of system libraries or they can be
+    :ref:`Imported Targets <Imported Targets>` (see :command:`try_compile` for
+    further details).
+
+  ``CMAKE_REQUIRED_QUIET``
+    If this variable evaluates to a boolean true value, all status messages
+    associated with the check will be suppressed.
+
+  The check is only performed once, with the result cached in the variable
+  named by ``<resultVar>``. Every subsequent CMake run will re-use this cached
+  value rather than performing the check again, even if the ``<code>`` changes.
+  In order to force the check to be re-evaluated, the variable named by
+  ``<resultVar>`` must be manually removed from the cache.
+
+#]=======================================================================]
+
+include_guard(GLOBAL)
+include(Internal/CheckSourceCompiles)
+
+macro(CHECK_OBJCXX_SOURCE_COMPILES SOURCE VAR)
+  cmake_check_source_compiles(OBJCXX "${SOURCE}" ${VAR} ${ARGN})
+endmacro()
diff --git a/share/cmake-3.22/Modules/CheckOBJCXXSourceRuns.cmake b/share/cmake-3.22/Modules/CheckOBJCXXSourceRuns.cmake
new file mode 100644
index 0000000..05a5e4c
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckOBJCXXSourceRuns.cmake
@@ -0,0 +1,76 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckOBJCXXSourceRuns
+---------------------
+
+.. versionadded:: 3.16
+
+Check if given Objective-C++ source compiles and links into an executable and can
+subsequently be run.
+
+.. command:: check_objcxx_source_runs
+
+  .. code-block:: cmake
+
+    check_objcxx_source_runs(<code> <resultVar>)
+
+  Check that the source supplied in ``<code>`` can be compiled as a Objective-C++ source
+  file, linked as an executable and then run. The ``<code>`` must contain at
+  least a ``main()`` function. If the ``<code>`` could be built and run
+  successfully, the internal cache variable specified by ``<resultVar>`` will
+  be set to 1, otherwise it will be set to an value that evaluates to boolean
+  false (e.g. an empty string or an error message).
+
+  The underlying check is performed by the :command:`try_run` command. The
+  compile and link commands can be influenced by setting any of the following
+  variables prior to calling ``check_objcxx_source_runs()``:
+
+  ``CMAKE_REQUIRED_FLAGS``
+    Additional flags to pass to the compiler. Note that the contents of
+    :variable:`CMAKE_OBJCXX_FLAGS <CMAKE_<LANG>_FLAGS>` and its associated
+    configuration-specific variable are automatically added to the compiler
+    command before the contents of ``CMAKE_REQUIRED_FLAGS``.
+
+  ``CMAKE_REQUIRED_DEFINITIONS``
+    A :ref:`;-list <CMake Language Lists>` of compiler definitions of the form
+    ``-DFOO`` or ``-DFOO=bar``. A definition for the name specified by
+    ``<resultVar>`` will also be added automatically.
+
+  ``CMAKE_REQUIRED_INCLUDES``
+    A :ref:`;-list <CMake Language Lists>` of header search paths to pass to
+    the compiler. These will be the only header search paths used by
+    ``try_run()``, i.e. the contents of the :prop_dir:`INCLUDE_DIRECTORIES`
+    directory property will be ignored.
+
+  ``CMAKE_REQUIRED_LINK_OPTIONS``
+    A :ref:`;-list <CMake Language Lists>` of options to add to the link
+    command (see :command:`try_run` for further details).
+
+  ``CMAKE_REQUIRED_LIBRARIES``
+    A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
+    command. These can be the name of system libraries or they can be
+    :ref:`Imported Targets <Imported Targets>` (see :command:`try_run` for
+    further details).
+
+  ``CMAKE_REQUIRED_QUIET``
+    If this variable evaluates to a boolean true value, all status messages
+    associated with the check will be suppressed.
+
+  The check is only performed once, with the result cached in the variable
+  named by ``<resultVar>``. Every subsequent CMake run will re-use this cached
+  value rather than performing the check again, even if the ``<code>`` changes.
+  In order to force the check to be re-evaluated, the variable named by
+  ``<resultVar>`` must be manually removed from the cache.
+
+#]=======================================================================]
+
+include_guard(GLOBAL)
+include(Internal/CheckSourceRuns)
+
+macro(CHECK_OBJCXX_SOURCE_RUNS SOURCE VAR)
+  set(_CheckSourceRuns_old_signature 1)
+  cmake_check_source_runs(OBJCXX "${SOURCE}" ${VAR} ${ARGN})
+  unset(_CheckSourceRuns_old_signature)
+endmacro()
diff --git a/share/cmake-3.22/Modules/CheckPIESupported.cmake b/share/cmake-3.22/Modules/CheckPIESupported.cmake
new file mode 100644
index 0000000..fb87822
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckPIESupported.cmake
@@ -0,0 +1,138 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckPIESupported
+-----------------
+
+.. versionadded:: 3.14
+
+Check whether the linker supports Position Independent Code (PIE) or No
+Position Independent Code (NO_PIE) for executables.
+Use this to ensure that the :prop_tgt:`POSITION_INDEPENDENT_CODE` target
+property for executables will be honored at link time.
+
+.. command:: check_pie_supported
+
+  ::
+
+    check_pie_supported([OUTPUT_VARIABLE <output>]
+                        [LANGUAGES <lang>...])
+
+  Options are:
+
+  ``OUTPUT_VARIABLE <output>``
+    Set ``<output>`` variable with details about any error.
+  ``LANGUAGES <lang>...``
+    Check the linkers used for each of the specified languages.
+    Supported languages are ``C``, ``CXX``, and ``Fortran``.
+
+It makes no sense to use this module when :policy:`CMP0083` is set to ``OLD``,
+so the command will return an error in this case.  See policy :policy:`CMP0083`
+for details.
+
+Variables
+^^^^^^^^^
+
+For each language checked, two boolean cache variables are defined.
+
+ ``CMAKE_<lang>_LINK_PIE_SUPPORTED``
+   Set to ``YES`` if ``PIE`` is supported by the linker and ``NO`` otherwise.
+ ``CMAKE_<lang>_LINK_NO_PIE_SUPPORTED``
+   Set to ``YES`` if ``NO_PIE`` is supported by the linker and ``NO`` otherwise.
+
+Examples
+^^^^^^^^
+
+.. code-block:: cmake
+
+  check_pie_supported()
+  set_property(TARGET foo PROPERTY POSITION_INDEPENDENT_CODE TRUE)
+
+.. code-block:: cmake
+
+  # Retrieve any error message.
+  check_pie_supported(OUTPUT_VARIABLE output LANGUAGES C)
+  set_property(TARGET foo PROPERTY POSITION_INDEPENDENT_CODE TRUE)
+  if(NOT CMAKE_C_LINK_PIE_SUPPORTED)
+    message(WARNING "PIE is not supported at link time: ${output}.\n"
+                    "PIE link options will not be passed to linker.")
+  endif()
+
+#]=======================================================================]
+
+
+include (Internal/CMakeTryCompilerOrLinkerFlag)
+
+function (check_pie_supported)
+  cmake_policy(GET CMP0083 cmp0083)
+
+  if (NOT cmp0083)
+    message(FATAL_ERROR "check_pie_supported: Policy CMP0083 is not set")
+  endif()
+
+  if(cmp0083 STREQUAL "OLD")
+    message(FATAL_ERROR "check_pie_supported: Policy CMP0083 set to OLD")
+  endif()
+
+  set(optional)
+  set(one OUTPUT_VARIABLE)
+  set(multiple LANGUAGES)
+
+  cmake_parse_arguments(CHECK_PIE "${optional}" "${one}" "${multiple}" "${ARGN}")
+  if(CHECK_PIE_UNPARSED_ARGUMENTS)
+    message(FATAL_ERROR "check_pie_supported: Unparsed arguments: ${CHECK_PIE_UNPARSED_ARGUMENTS}")
+  endif()
+
+  if (CHECK_PIE_LANGUAGES)
+    set (unsupported_languages "${CHECK_PIE_LANGUAGES}")
+    list (REMOVE_ITEM unsupported_languages "C" "CXX" "Fortran")
+    if(unsupported_languages)
+      message(FATAL_ERROR "check_pie_supported: language(s) '${unsupported_languages}' not supported")
+    endif()
+  else()
+    # User did not set any languages, use defaults
+    get_property (enabled_languages GLOBAL PROPERTY ENABLED_LANGUAGES)
+    if (NOT enabled_languages)
+      return()
+    endif()
+
+    list (FILTER enabled_languages INCLUDE REGEX "^(C|CXX|Fortran)$")
+    if (NOT enabled_languages)
+      return()
+    endif()
+
+    set (CHECK_PIE_LANGUAGES ${enabled_languages})
+  endif()
+
+  set (outputs)
+
+  foreach(lang IN LISTS CHECK_PIE_LANGUAGES)
+    if(_CMAKE_${lang}_PIE_MAY_BE_SUPPORTED_BY_LINKER)
+      cmake_try_compiler_or_linker_flag(${lang}
+                                "${CMAKE_${lang}_LINK_OPTIONS_PIE}"
+                                CMAKE_${lang}_LINK_PIE_SUPPORTED
+                                OUTPUT_VARIABLE output)
+      if (NOT CMAKE_${lang}_LINK_PIE_SUPPORTED)
+        string (APPEND outputs "PIE (${lang}): ${output}\n")
+      endif()
+
+      cmake_try_compiler_or_linker_flag(${lang}
+                                "${CMAKE_${lang}_LINK_OPTIONS_NO_PIE}"
+                                CMAKE_${lang}_LINK_NO_PIE_SUPPORTED
+                                OUTPUT_VARIABLE output)
+      if (NOT CMAKE_${lang}_LINK_NO_PIE_SUPPORTED)
+        string (APPEND outputs "NO_PIE (${lang}): ${output}\n")
+      endif()
+    else()
+      # no support at link time. Set cache variables to NO
+      set(CMAKE_${lang}_LINK_PIE_SUPPORTED NO CACHE INTERNAL "PIE (${lang})")
+      set(CMAKE_${lang}_LINK_NO_PIE_SUPPORTED NO CACHE INTERNAL "NO_PIE (${lang})")
+      string (APPEND outputs "PIE and NO_PIE are not supported by linker for ${lang}")
+    endif()
+  endforeach()
+
+  if (CHECK_PIE_OUTPUT_VARIABLE)
+    set (${CHECK_PIE_OUTPUT_VARIABLE} "${outputs}" PARENT_SCOPE)
+  endif()
+endfunction()
diff --git a/share/cmake-3.18/Modules/CheckPrototypeDefinition.c.in b/share/cmake-3.22/Modules/CheckPrototypeDefinition.c.in
similarity index 100%
rename from share/cmake-3.18/Modules/CheckPrototypeDefinition.c.in
rename to share/cmake-3.22/Modules/CheckPrototypeDefinition.c.in
diff --git a/share/cmake-3.22/Modules/CheckPrototypeDefinition.cmake b/share/cmake-3.22/Modules/CheckPrototypeDefinition.cmake
new file mode 100644
index 0000000..d29c5e8
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckPrototypeDefinition.cmake
@@ -0,0 +1,131 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckPrototypeDefinition
+------------------------
+
+Check if the prototype we expect is correct.
+
+.. command:: check_prototype_definition
+
+  .. code-block:: cmake
+
+    check_prototype_definition(FUNCTION PROTOTYPE RETURN HEADER VARIABLE)
+
+  ::
+
+    FUNCTION - The name of the function (used to check if prototype exists)
+    PROTOTYPE- The prototype to check.
+    RETURN - The return value of the function.
+    HEADER - The header files required.
+    VARIABLE - The variable to store the result.
+               Will be created as an internal cache variable.
+
+  Example:
+
+  .. code-block:: cmake
+
+    check_prototype_definition(getpwent_r
+     "struct passwd *getpwent_r(struct passwd *src, char *buf, int buflen)"
+     "NULL"
+     "unistd.h;pwd.h"
+     SOLARIS_GETPWENT_R)
+
+The following variables may be set before calling this function to modify
+the way the check is run:
+
+``CMAKE_REQUIRED_FLAGS``
+  string of compile command line flags.
+``CMAKE_REQUIRED_DEFINITIONS``
+  list of macros to define (-DFOO=bar).
+``CMAKE_REQUIRED_INCLUDES``
+  list of include directories.
+``CMAKE_REQUIRED_LINK_OPTIONS``
+  .. versionadded:: 3.14
+    list of options to pass to link command.
+``CMAKE_REQUIRED_LIBRARIES``
+  list of libraries to link.
+``CMAKE_REQUIRED_QUIET``
+  .. versionadded:: 3.1
+    execute quietly without messages.
+#]=======================================================================]
+
+#
+
+get_filename_component(__check_proto_def_dir "${CMAKE_CURRENT_LIST_FILE}" PATH)
+
+include_guard(GLOBAL)
+
+function(check_prototype_definition _FUNCTION _PROTOTYPE _RETURN _HEADER _VARIABLE)
+
+  if (NOT DEFINED ${_VARIABLE})
+    if(NOT CMAKE_REQUIRED_QUIET)
+      message(CHECK_START "Checking prototype ${_FUNCTION} for ${_VARIABLE}")
+    endif()
+    set(CHECK_PROTOTYPE_DEFINITION_CONTENT "/* */\n")
+
+    set(CHECK_PROTOTYPE_DEFINITION_FLAGS ${CMAKE_REQUIRED_FLAGS})
+    if (CMAKE_REQUIRED_LINK_OPTIONS)
+      set(CHECK_PROTOTYPE_DEFINITION_LINK_OPTIONS
+        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
+    else()
+      set(CHECK_PROTOTYPE_DEFINITION_LINK_OPTIONS)
+    endif()
+    if (CMAKE_REQUIRED_LIBRARIES)
+      set(CHECK_PROTOTYPE_DEFINITION_LIBS
+        LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
+    else()
+      set(CHECK_PROTOTYPE_DEFINITION_LIBS)
+    endif()
+    if (CMAKE_REQUIRED_INCLUDES)
+      set(CMAKE_SYMBOL_EXISTS_INCLUDES
+        "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
+    else()
+      set(CMAKE_SYMBOL_EXISTS_INCLUDES)
+    endif()
+
+    foreach(_FILE ${_HEADER})
+      string(APPEND CHECK_PROTOTYPE_DEFINITION_HEADER
+        "#include <${_FILE}>\n")
+    endforeach()
+
+    set(CHECK_PROTOTYPE_DEFINITION_SYMBOL ${_FUNCTION})
+    set(CHECK_PROTOTYPE_DEFINITION_PROTO ${_PROTOTYPE})
+    set(CHECK_PROTOTYPE_DEFINITION_RETURN ${_RETURN})
+
+    configure_file("${__check_proto_def_dir}/CheckPrototypeDefinition.c.in"
+      "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckPrototypeDefinition.c" @ONLY)
+
+    file(READ ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckPrototypeDefinition.c _SOURCE)
+
+    try_compile(${_VARIABLE}
+      ${CMAKE_BINARY_DIR}
+      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckPrototypeDefinition.c
+      COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+      ${CHECK_PROTOTYPE_DEFINITION_LINK_OPTIONS}
+      ${CHECK_PROTOTYPE_DEFINITION_LIBS}
+      CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CHECK_PROTOTYPE_DEFINITION_FLAGS}
+      "${CMAKE_SYMBOL_EXISTS_INCLUDES}"
+      OUTPUT_VARIABLE OUTPUT)
+
+    if (${_VARIABLE})
+      set(${_VARIABLE} 1 CACHE INTERNAL "Have correct prototype for ${_FUNCTION}")
+      if(NOT CMAKE_REQUIRED_QUIET)
+        message(CHECK_PASS "True")
+      endif()
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+        "Determining if the prototype ${_FUNCTION} exists for ${_VARIABLE} passed with the following output:\n"
+        "${OUTPUT}\n\n")
+    else ()
+      if(NOT CMAKE_REQUIRED_QUIET)
+        message(CHECK_FAIL "False")
+      endif()
+      set(${_VARIABLE} 0 CACHE INTERNAL "Have correct prototype for ${_FUNCTION}")
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+        "Determining if the prototype ${_FUNCTION} exists for ${_VARIABLE} failed with the following output:\n"
+        "${OUTPUT}\n\n${_SOURCE}\n\n")
+    endif ()
+  endif()
+
+endfunction()
diff --git a/share/cmake-3.18/Modules/CheckSizeOf.cmake b/share/cmake-3.22/Modules/CheckSizeOf.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/CheckSizeOf.cmake
rename to share/cmake-3.22/Modules/CheckSizeOf.cmake
diff --git a/share/cmake-3.22/Modules/CheckSourceCompiles.cmake b/share/cmake-3.22/Modules/CheckSourceCompiles.cmake
new file mode 100644
index 0000000..ad74c3c
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckSourceCompiles.cmake
@@ -0,0 +1,82 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+#[=======================================================================[.rst:
+CheckSourceCompiles
+----------------------
+
+.. versionadded:: 3.19
+
+Check if given source compiles and links into an executable.
+
+.. command:: check_source_compiles
+
+  .. code-block:: cmake
+
+    check_source_compiles(<lang> <code> <resultVar>
+                          [FAIL_REGEX <regex1> [<regex2>...]]
+                          [SRC_EXT <extension>])
+
+  Check that the source supplied in ``<code>`` can be compiled as a source
+  file for the requested language and linked as an executable (so it must
+  contain at least a ``main()`` function). The result will be stored in the
+  internal cache variable specified by ``<resultVar>``, with a boolean true
+  value for success and boolean false for failure. If ``FAIL_REGEX`` is
+  provided, then failure is determined by checking if anything in the output
+  matches any of the specified regular expressions.
+
+  By default, the test source file will be given a file extension that matches
+  the requested language. The ``SRC_EXT`` option can be used to override this
+  with ``.<extension>`` instead.
+
+  The underlying check is performed by the :command:`try_compile` command. The
+  compile and link commands can be influenced by setting any of the following
+  variables prior to calling ``check_source_compiles()``:
+
+  ``CMAKE_REQUIRED_FLAGS``
+    Additional flags to pass to the compiler. Note that the contents of
+    :variable:`CMAKE_<LANG>_FLAGS <CMAKE_<LANG>_FLAGS>` and its associated
+    configuration-specific variable are automatically added to the compiler
+    command before the contents of ``CMAKE_REQUIRED_FLAGS``.
+
+  ``CMAKE_REQUIRED_DEFINITIONS``
+    A :ref:`;-list <CMake Language Lists>` of compiler definitions of the form
+    ``-DFOO`` or ``-DFOO=bar``. A definition for the name specified by
+    ``<resultVar>`` will also be added automatically.
+
+  ``CMAKE_REQUIRED_INCLUDES``
+    A :ref:`;-list <CMake Language Lists>` of header search paths to pass to
+    the compiler. These will be the only header search paths used by
+    ``try_compile()``, i.e. the contents of the :prop_dir:`INCLUDE_DIRECTORIES`
+    directory property will be ignored.
+
+  ``CMAKE_REQUIRED_LINK_OPTIONS``
+    A :ref:`;-list <CMake Language Lists>` of options to add to the link
+    command (see :command:`try_compile` for further details).
+
+  ``CMAKE_REQUIRED_LIBRARIES``
+    A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
+    command. These can be the name of system libraries or they can be
+    :ref:`Imported Targets <Imported Targets>` (see :command:`try_compile` for
+    further details).
+
+  ``CMAKE_REQUIRED_QUIET``
+    If this variable evaluates to a boolean true value, all status messages
+    associated with the check will be suppressed.
+
+  The check is only performed once, with the result cached in the variable
+  named by ``<resultVar>``. Every subsequent CMake run will re-use this cached
+  value rather than performing the check again, even if the ``<code>`` changes.
+  In order to force the check to be re-evaluated, the variable named by
+  ``<resultVar>`` must be manually removed from the cache.
+
+#]=======================================================================]
+
+
+include_guard(GLOBAL)
+include(Internal/CheckSourceCompiles)
+
+function(CHECK_SOURCE_COMPILES _lang _source _var)
+  cmake_check_source_compiles(${_lang} "${_source}" ${_var} ${ARGN})
+endfunction()
diff --git a/share/cmake-3.22/Modules/CheckSourceRuns.cmake b/share/cmake-3.22/Modules/CheckSourceRuns.cmake
new file mode 100644
index 0000000..8f1cf01
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckSourceRuns.cmake
@@ -0,0 +1,80 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+#[=======================================================================[.rst:
+CheckSourceRuns
+-------------------
+
+.. versionadded:: 3.19
+
+Check if given source compiles and links into an executable and can
+subsequently be run.
+
+.. command:: check_source_runs
+
+  .. code-block:: cmake
+
+    check_source_runs(<lang> <code> <resultVar>
+                      [SRC_EXT <extension>])
+
+  Check that the source supplied in ``<code>`` can be compiled as a source
+  file for the requested language, linked as an executable and then run.
+  The ``<code>`` must contain at least a ``main()`` function. If the ``<code>``
+  could be built and run successfully, the internal cache variable specified by
+  ``<resultVar>`` will be set to 1, otherwise it will be set to an value that
+  evaluates to boolean false (e.g. an empty string or an error message).
+
+  By default, the test source file will be given a file extension that matches
+  the requested language. The ``SRC_EXT`` option can be used to override this
+  with ``.<extension>`` instead.
+
+  The underlying check is performed by the :command:`try_run` command. The
+  compile and link commands can be influenced by setting any of the following
+  variables prior to calling ``check_objc_source_runs()``:
+
+  ``CMAKE_REQUIRED_FLAGS``
+    Additional flags to pass to the compiler. Note that the contents of
+    :variable:`CMAKE_OBJC_FLAGS <CMAKE_<LANG>_FLAGS>` and its associated
+    configuration-specific variable are automatically added to the compiler
+    command before the contents of ``CMAKE_REQUIRED_FLAGS``.
+
+  ``CMAKE_REQUIRED_DEFINITIONS``
+    A :ref:`;-list <CMake Language Lists>` of compiler definitions of the form
+    ``-DFOO`` or ``-DFOO=bar``. A definition for the name specified by
+    ``<resultVar>`` will also be added automatically.
+
+  ``CMAKE_REQUIRED_INCLUDES``
+    A :ref:`;-list <CMake Language Lists>` of header search paths to pass to
+    the compiler. These will be the only header search paths used by
+    ``try_run()``, i.e. the contents of the :prop_dir:`INCLUDE_DIRECTORIES`
+    directory property will be ignored.
+
+  ``CMAKE_REQUIRED_LINK_OPTIONS``
+    A :ref:`;-list <CMake Language Lists>` of options to add to the link
+    command (see :command:`try_run` for further details).
+
+  ``CMAKE_REQUIRED_LIBRARIES``
+    A :ref:`;-list <CMake Language Lists>` of libraries to add to the link
+    command. These can be the name of system libraries or they can be
+    :ref:`Imported Targets <Imported Targets>` (see :command:`try_run` for
+    further details).
+
+  ``CMAKE_REQUIRED_QUIET``
+    If this variable evaluates to a boolean true value, all status messages
+    associated with the check will be suppressed.
+
+  The check is only performed once, with the result cached in the variable
+  named by ``<resultVar>``. Every subsequent CMake run will re-use this cached
+  value rather than performing the check again, even if the ``<code>`` changes.
+  In order to force the check to be re-evaluated, the variable named by
+  ``<resultVar>`` must be manually removed from the cache.
+
+#]=======================================================================]
+
+include_guard(GLOBAL)
+include(Internal/CheckSourceRuns)
+
+function(CHECK_SOURCE_RUNS _lang _source _var)
+  cmake_check_source_runs(${_lang} "${_source}" ${_var} ${ARGN})
+endfunction()
diff --git a/share/cmake-3.22/Modules/CheckStructHasMember.cmake b/share/cmake-3.22/Modules/CheckStructHasMember.cmake
new file mode 100644
index 0000000..8217c84
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckStructHasMember.cmake
@@ -0,0 +1,87 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckStructHasMember
+--------------------
+
+Check if the given struct or class has the specified member variable
+
+.. command:: CHECK_STRUCT_HAS_MEMBER
+
+  .. code-block:: cmake
+
+    CHECK_STRUCT_HAS_MEMBER(<struct> <member> <header> <variable>
+                            [LANGUAGE <language>])
+
+  ::
+
+    <struct> - the name of the struct or class you are interested in
+    <member> - the member which existence you want to check
+    <header> - the header(s) where the prototype should be declared
+    <variable> - variable to store the result
+    <language> - the compiler to use (C or CXX)
+
+
+The following variables may be set before calling this macro to modify
+the way the check is run:
+
+``CMAKE_REQUIRED_FLAGS``
+  string of compile command line flags.
+``CMAKE_REQUIRED_DEFINITIONS``
+  list of macros to define (-DFOO=bar).
+``CMAKE_REQUIRED_INCLUDES``
+  list of include directories.
+``CMAKE_REQUIRED_LINK_OPTIONS``
+  .. versionadded:: 3.14
+    list of options to pass to link command.
+``CMAKE_REQUIRED_LIBRARIES``
+  list of libraries to link.
+``CMAKE_REQUIRED_QUIET``
+  .. versionadded:: 3.1
+    execute quietly without messages.
+
+
+Example:
+
+.. code-block:: cmake
+
+  CHECK_STRUCT_HAS_MEMBER("struct timeval" tv_sec sys/select.h
+                          HAVE_TIMEVAL_TV_SEC LANGUAGE C)
+#]=======================================================================]
+
+include_guard(GLOBAL)
+include(CheckCSourceCompiles)
+include(CheckCXXSourceCompiles)
+
+macro (CHECK_STRUCT_HAS_MEMBER _STRUCT _MEMBER _HEADER _RESULT)
+  set(_INCLUDE_FILES)
+  foreach (it ${_HEADER})
+    string(APPEND _INCLUDE_FILES "#include <${it}>\n")
+  endforeach ()
+
+  if("x${ARGN}" STREQUAL "x")
+    set(_lang C)
+  elseif("x${ARGN}" MATCHES "^xLANGUAGE;([a-zA-Z]+)$")
+    set(_lang "${CMAKE_MATCH_1}")
+  else()
+    message(FATAL_ERROR "Unknown arguments:\n  ${ARGN}\n")
+  endif()
+
+  set(_CHECK_STRUCT_MEMBER_SOURCE_CODE "
+${_INCLUDE_FILES}
+int main()
+{
+  (void)sizeof(((${_STRUCT} *)0)->${_MEMBER});
+  return 0;
+}
+")
+
+  if("${_lang}" STREQUAL "C")
+    CHECK_C_SOURCE_COMPILES("${_CHECK_STRUCT_MEMBER_SOURCE_CODE}" ${_RESULT})
+  elseif("${_lang}" STREQUAL "CXX")
+    CHECK_CXX_SOURCE_COMPILES("${_CHECK_STRUCT_MEMBER_SOURCE_CODE}" ${_RESULT})
+  else()
+    message(FATAL_ERROR "Unknown language:\n  ${_lang}\nSupported languages: C, CXX.\n")
+  endif()
+endmacro ()
diff --git a/share/cmake-3.22/Modules/CheckSymbolExists.cmake b/share/cmake-3.22/Modules/CheckSymbolExists.cmake
new file mode 100644
index 0000000..48ee3c4
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckSymbolExists.cmake
@@ -0,0 +1,168 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckSymbolExists
+-----------------
+
+Provides a macro to check if a symbol exists as a function, variable,
+or macro in ``C``.
+
+.. command:: check_symbol_exists
+
+  .. code-block:: cmake
+
+    check_symbol_exists(<symbol> <files> <variable>)
+
+  Check that the ``<symbol>`` is available after including given header
+  ``<files>`` and store the result in a ``<variable>``.  Specify the list
+  of files in one argument as a semicolon-separated list.
+  ``<variable>`` will be created as an internal cache variable.
+
+If the header files define the symbol as a macro it is considered
+available and assumed to work.  If the header files declare the symbol
+as a function or variable then the symbol must also be available for
+linking (so intrinsics may not be detected).
+If the symbol is a type, enum value, or intrinsic it will not be recognized
+(consider using :module:`CheckTypeSize` or :module:`CheckSourceCompiles`).
+If the check needs to be done in C++, consider using
+:module:`CheckCXXSymbolExists` instead.
+
+The following variables may be set before calling this macro to modify
+the way the check is run:
+
+``CMAKE_REQUIRED_FLAGS``
+  string of compile command line flags.
+``CMAKE_REQUIRED_DEFINITIONS``
+  a :ref:`;-list <CMake Language Lists>` of macros to define (-DFOO=bar).
+``CMAKE_REQUIRED_INCLUDES``
+  a :ref:`;-list <CMake Language Lists>` of header search paths to pass to
+  the compiler.
+``CMAKE_REQUIRED_LINK_OPTIONS``
+  .. versionadded:: 3.14
+    a :ref:`;-list <CMake Language Lists>` of options to add to the link command.
+``CMAKE_REQUIRED_LIBRARIES``
+  a :ref:`;-list <CMake Language Lists>` of libraries to add to the link
+  command. See policy :policy:`CMP0075`.
+``CMAKE_REQUIRED_QUIET``
+  .. versionadded:: 3.1
+    execute quietly without messages.
+
+For example:
+
+.. code-block:: cmake
+
+  include(CheckSymbolExists)
+
+  # Check for macro SEEK_SET
+  check_symbol_exists(SEEK_SET "stdio.h" HAVE_SEEK_SET)
+  # Check for function fopen
+  check_symbol_exists(fopen "stdio.h" HAVE_FOPEN)
+#]=======================================================================]
+
+include_guard(GLOBAL)
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0054 NEW) # if() quoted variables not dereferenced
+
+macro(CHECK_SYMBOL_EXISTS SYMBOL FILES VARIABLE)
+  if(CMAKE_C_COMPILER_LOADED)
+    __CHECK_SYMBOL_EXISTS_IMPL("${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckSymbolExists.c" "${SYMBOL}" "${FILES}" "${VARIABLE}" )
+  elseif(CMAKE_CXX_COMPILER_LOADED)
+    __CHECK_SYMBOL_EXISTS_IMPL("${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckSymbolExists.cxx" "${SYMBOL}" "${FILES}" "${VARIABLE}" )
+  else()
+    message(FATAL_ERROR "CHECK_SYMBOL_EXISTS needs either C or CXX language enabled")
+  endif()
+endmacro()
+
+macro(__CHECK_SYMBOL_EXISTS_IMPL SOURCEFILE SYMBOL FILES VARIABLE)
+  if(NOT DEFINED "${VARIABLE}" OR "x${${VARIABLE}}" STREQUAL "x${VARIABLE}")
+    set(CMAKE_CONFIGURABLE_FILE_CONTENT "/* */\n")
+    set(MACRO_CHECK_SYMBOL_EXISTS_FLAGS ${CMAKE_REQUIRED_FLAGS})
+    if(CMAKE_REQUIRED_LINK_OPTIONS)
+      set(CHECK_SYMBOL_EXISTS_LINK_OPTIONS
+        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
+    else()
+      set(CHECK_SYMBOL_EXISTS_LINK_OPTIONS)
+    endif()
+    if(CMAKE_REQUIRED_LIBRARIES)
+      set(CHECK_SYMBOL_EXISTS_LIBS
+        LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
+    else()
+      set(CHECK_SYMBOL_EXISTS_LIBS)
+    endif()
+    if(CMAKE_REQUIRED_INCLUDES)
+      set(CMAKE_SYMBOL_EXISTS_INCLUDES
+        "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
+    else()
+      set(CMAKE_SYMBOL_EXISTS_INCLUDES)
+    endif()
+    foreach(FILE ${FILES})
+      string(APPEND CMAKE_CONFIGURABLE_FILE_CONTENT
+        "#include <${FILE}>\n")
+    endforeach()
+    string(APPEND CMAKE_CONFIGURABLE_FILE_CONTENT "
+int main(int argc, char** argv)
+{
+  (void)argv;")
+    set(_CSE_CHECK_NON_MACRO "return ((int*)(&${SYMBOL}))[argc];")
+    if("${SYMBOL}" MATCHES "^[a-zA-Z_][a-zA-Z0-9_]*$")
+      # The SYMBOL has a legal macro name.  Test whether it exists as a macro.
+      string(APPEND CMAKE_CONFIGURABLE_FILE_CONTENT "
+#ifndef ${SYMBOL}
+  ${_CSE_CHECK_NON_MACRO}
+#else
+  (void)argc;
+  return 0;
+#endif")
+    else()
+      # The SYMBOL cannot be a macro (e.g., a template function).
+      string(APPEND CMAKE_CONFIGURABLE_FILE_CONTENT "
+  ${_CSE_CHECK_NON_MACRO}")
+    endif()
+    string(APPEND CMAKE_CONFIGURABLE_FILE_CONTENT "
+}")
+    unset(_CSE_CHECK_NON_MACRO)
+
+    configure_file("${CMAKE_ROOT}/Modules/CMakeConfigurableFile.in"
+      "${SOURCEFILE}" @ONLY)
+
+    if(NOT CMAKE_REQUIRED_QUIET)
+      message(CHECK_START "Looking for ${SYMBOL}")
+    endif()
+    try_compile(${VARIABLE}
+      ${CMAKE_BINARY_DIR}
+      "${SOURCEFILE}"
+      COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+      ${CHECK_SYMBOL_EXISTS_LINK_OPTIONS}
+      ${CHECK_SYMBOL_EXISTS_LIBS}
+      CMAKE_FLAGS
+      -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_SYMBOL_EXISTS_FLAGS}
+      "${CMAKE_SYMBOL_EXISTS_INCLUDES}"
+      OUTPUT_VARIABLE OUTPUT)
+    if(${VARIABLE})
+      if(NOT CMAKE_REQUIRED_QUIET)
+        message(CHECK_PASS "found")
+      endif()
+      set(${VARIABLE} 1 CACHE INTERNAL "Have symbol ${SYMBOL}")
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+        "Determining if the ${SYMBOL} "
+        "exist passed with the following output:\n"
+        "${OUTPUT}\nFile ${SOURCEFILE}:\n"
+        "${CMAKE_CONFIGURABLE_FILE_CONTENT}\n")
+    else()
+      if(NOT CMAKE_REQUIRED_QUIET)
+        message(CHECK_FAIL "not found")
+      endif()
+      set(${VARIABLE} "" CACHE INTERNAL "Have symbol ${SYMBOL}")
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+        "Determining if the ${SYMBOL} "
+        "exist failed with the following output:\n"
+        "${OUTPUT}\nFile ${SOURCEFILE}:\n"
+        "${CMAKE_CONFIGURABLE_FILE_CONTENT}\n")
+    endif()
+    unset(CMAKE_CONFIGURABLE_FILE_CONTENT)
+  endif()
+endmacro()
+
+cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/CheckTypeSize.c.in b/share/cmake-3.22/Modules/CheckTypeSize.c.in
similarity index 100%
rename from share/cmake-3.18/Modules/CheckTypeSize.c.in
rename to share/cmake-3.22/Modules/CheckTypeSize.c.in
diff --git a/share/cmake-3.22/Modules/CheckTypeSize.cmake b/share/cmake-3.22/Modules/CheckTypeSize.cmake
new file mode 100644
index 0000000..69f68f9
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckTypeSize.cmake
@@ -0,0 +1,294 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckTypeSize
+-------------
+
+Check sizeof a type
+
+.. command:: CHECK_TYPE_SIZE
+
+  .. code-block:: cmake
+
+    CHECK_TYPE_SIZE(TYPE VARIABLE [BUILTIN_TYPES_ONLY]
+                                  [LANGUAGE <language>])
+
+  Check if the type exists and determine its size.  On return,
+  ``HAVE_${VARIABLE}`` holds the existence of the type, and ``${VARIABLE}``
+  holds one of the following:
+
+  ::
+
+     <size> = type has non-zero size <size>
+     "0"    = type has arch-dependent size (see below)
+     ""     = type does not exist
+
+  Both ``HAVE_${VARIABLE}`` and ``${VARIABLE}`` will be created as internal
+  cache variables.
+
+  Furthermore, the variable ``${VARIABLE}_CODE`` holds C preprocessor code
+  to define the macro ``${VARIABLE}`` to the size of the type, or leave
+  the macro undefined if the type does not exist.
+
+  The variable ``${VARIABLE}`` may be ``0`` when
+  :variable:`CMAKE_OSX_ARCHITECTURES` has multiple architectures for building
+  OS X universal binaries.  This indicates that the type size varies across
+  architectures.  In this case ``${VARIABLE}_CODE`` contains C preprocessor
+  tests mapping from each architecture macro to the corresponding type size.
+  The list of architecture macros is stored in ``${VARIABLE}_KEYS``, and the
+  value for each key is stored in ``${VARIABLE}-${KEY}``.
+
+  If the ``BUILTIN_TYPES_ONLY`` option is not given, the macro checks for
+  headers ``<sys/types.h>``, ``<stdint.h>``, and ``<stddef.h>``, and saves
+  results in ``HAVE_SYS_TYPES_H``, ``HAVE_STDINT_H``, and ``HAVE_STDDEF_H``.
+  The type size check automatically includes the available headers, thus
+  supporting checks of types defined in the headers.
+
+  If ``LANGUAGE`` is set, the specified compiler will be used to perform the
+  check. Acceptable values are ``C`` and ``CXX``.
+
+Despite the name of the macro you may use it to check the size of more
+complex expressions, too.  To check e.g.  for the size of a struct
+member you can do something like this:
+
+.. code-block:: cmake
+
+  check_type_size("((struct something*)0)->member" SIZEOF_MEMBER)
+
+
+The following variables may be set before calling this macro to modify
+the way the check is run:
+
+``CMAKE_REQUIRED_FLAGS``
+  string of compile command line flags.
+``CMAKE_REQUIRED_DEFINITIONS``
+  list of macros to define (-DFOO=bar).
+``CMAKE_REQUIRED_INCLUDES``
+  list of include directories.
+``CMAKE_REQUIRED_LINK_OPTIONS``
+  .. versionadded:: 3.14
+    list of options to pass to link command.
+``CMAKE_REQUIRED_LIBRARIES``
+  list of libraries to link.
+``CMAKE_REQUIRED_QUIET``
+  .. versionadded:: 3.1
+    execute quietly without messages.
+``CMAKE_EXTRA_INCLUDE_FILES``
+  list of extra headers to include.
+#]=======================================================================]
+
+include(CheckIncludeFile)
+include(CheckIncludeFileCXX)
+
+get_filename_component(__check_type_size_dir "${CMAKE_CURRENT_LIST_FILE}" PATH)
+
+include_guard(GLOBAL)
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0054 NEW)
+
+#-----------------------------------------------------------------------------
+# Helper function.  DO NOT CALL DIRECTLY.
+function(__check_type_size_impl type var map builtin language)
+  if(NOT CMAKE_REQUIRED_QUIET)
+    message(CHECK_START "Check size of ${type}")
+  endif()
+
+  # Perform language check
+  if(language STREQUAL "C")
+    set(src ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CheckTypeSize/${var}.c)
+  elseif(language STREQUAL "CXX")
+    set(src ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CheckTypeSize/${var}.cpp)
+  else()
+    message(FATAL_ERROR "Unknown language:\n  ${language}\nSupported languages: C, CXX.\n")
+  endif()
+
+  # Include header files.
+  set(headers)
+  if(builtin)
+    if(language STREQUAL "CXX" AND type MATCHES "^std::")
+      if(HAVE_SYS_TYPES_H)
+        string(APPEND headers "#include <sys/types.h>\n")
+      endif()
+      if(HAVE_CSTDINT)
+        string(APPEND headers "#include <cstdint>\n")
+      endif()
+      if(HAVE_CSTDDEF)
+        string(APPEND headers "#include <cstddef>\n")
+      endif()
+    else()
+      if(HAVE_SYS_TYPES_H)
+        string(APPEND headers "#include <sys/types.h>\n")
+      endif()
+      if(HAVE_STDINT_H)
+        string(APPEND headers "#include <stdint.h>\n")
+      endif()
+      if(HAVE_STDDEF_H)
+        string(APPEND headers "#include <stddef.h>\n")
+      endif()
+    endif()
+  endif()
+  foreach(h ${CMAKE_EXTRA_INCLUDE_FILES})
+    string(APPEND headers "#include \"${h}\"\n")
+  endforeach()
+
+  # Perform the check.
+  set(bin ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CheckTypeSize/${var}.bin)
+  configure_file(${__check_type_size_dir}/CheckTypeSize.c.in ${src} @ONLY)
+  try_compile(HAVE_${var} ${CMAKE_BINARY_DIR} ${src}
+    COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+    LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS}
+    LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}
+    CMAKE_FLAGS
+      "-DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS}"
+      "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}"
+    OUTPUT_VARIABLE output
+    COPY_FILE ${bin}
+    )
+
+  if(HAVE_${var})
+    # The check compiled.  Load information from the binary.
+    file(STRINGS ${bin} strings LIMIT_COUNT 10 REGEX "INFO:size")
+
+    # Parse the information strings.
+    set(regex_size ".*INFO:size\\[0*([^]]*)\\].*")
+    set(regex_key " key\\[([^]]*)\\]")
+    set(keys)
+    set(code)
+    set(mismatch)
+    set(first 1)
+    foreach(info ${strings})
+      if("${info}" MATCHES "${regex_size}")
+        # Get the type size.
+        set(size "${CMAKE_MATCH_1}")
+        if(first)
+          set(${var} ${size})
+        elseif(NOT "${size}" STREQUAL "${${var}}")
+          set(mismatch 1)
+        endif()
+        set(first 0)
+
+        # Get the architecture map key.
+        string(REGEX MATCH   "${regex_key}"       key "${info}")
+        string(REGEX REPLACE "${regex_key}" "\\1" key "${key}")
+        if(key)
+          string(APPEND code "\nset(${var}-${key} \"${size}\")")
+          list(APPEND keys ${key})
+        endif()
+      endif()
+    endforeach()
+
+    # Update the architecture-to-size map.
+    if(mismatch AND keys)
+      configure_file(${__check_type_size_dir}/CheckTypeSizeMap.cmake.in ${map} @ONLY)
+      set(${var} 0)
+    else()
+      file(REMOVE ${map})
+    endif()
+
+    if(mismatch AND NOT keys)
+      message(SEND_ERROR "CHECK_TYPE_SIZE found different results, consider setting CMAKE_OSX_ARCHITECTURES or CMAKE_TRY_COMPILE_OSX_ARCHITECTURES to one or no architecture !")
+    endif()
+
+    if(NOT CMAKE_REQUIRED_QUIET)
+      message(CHECK_PASS "done")
+    endif()
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+      "Determining size of ${type} passed with the following output:\n${output}\n\n")
+    set(${var} "${${var}}" CACHE INTERNAL "CHECK_TYPE_SIZE: sizeof(${type})")
+  else()
+    # The check failed to compile.
+    if(NOT CMAKE_REQUIRED_QUIET)
+      message(CHECK_FAIL "failed")
+    endif()
+    file(READ ${src} content)
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+      "Determining size of ${type} failed with the following output:\n${output}\n${src}:\n${content}\n\n")
+    set(${var} "" CACHE INTERNAL "CHECK_TYPE_SIZE: ${type} unknown")
+    file(REMOVE ${map})
+  endif()
+endfunction()
+
+#-----------------------------------------------------------------------------
+macro(CHECK_TYPE_SIZE TYPE VARIABLE)
+  # parse arguments
+  unset(doing)
+  foreach(arg ${ARGN})
+    if("x${arg}" STREQUAL "xBUILTIN_TYPES_ONLY")
+      set(_CHECK_TYPE_SIZE_${arg} 1)
+      unset(doing)
+    elseif("x${arg}" STREQUAL "xLANGUAGE") # change to MATCHES for more keys
+      set(doing "${arg}")
+      set(_CHECK_TYPE_SIZE_${doing} "")
+    elseif("x${doing}" STREQUAL "xLANGUAGE")
+      set(_CHECK_TYPE_SIZE_${doing} "${arg}")
+      unset(doing)
+    else()
+      message(FATAL_ERROR "Unknown argument:\n  ${arg}\n")
+    endif()
+  endforeach()
+  if("x${doing}" MATCHES "^x(LANGUAGE)$")
+    message(FATAL_ERROR "Missing argument:\n  ${doing} arguments requires a value\n")
+  endif()
+  if(DEFINED _CHECK_TYPE_SIZE_LANGUAGE)
+    if(NOT "x${_CHECK_TYPE_SIZE_LANGUAGE}" MATCHES "^x(C|CXX)$")
+      message(FATAL_ERROR "Unknown language:\n  ${_CHECK_TYPE_SIZE_LANGUAGE}.\nSupported languages: C, CXX.\n")
+    endif()
+    set(_language ${_CHECK_TYPE_SIZE_LANGUAGE})
+  else()
+    set(_language C)
+  endif()
+
+  # Optionally check for standard headers.
+  if(_CHECK_TYPE_SIZE_BUILTIN_TYPES_ONLY)
+    set(_builtin 0)
+  else()
+    set(_builtin 1)
+    if(_language STREQUAL "C")
+      check_include_file(sys/types.h HAVE_SYS_TYPES_H)
+      check_include_file(stdint.h HAVE_STDINT_H)
+      check_include_file(stddef.h HAVE_STDDEF_H)
+    elseif(_language STREQUAL "CXX")
+      check_include_file_cxx(sys/types.h HAVE_SYS_TYPES_H)
+      if("${TYPE}" MATCHES "^std::")
+        check_include_file_cxx(cstdint HAVE_CSTDINT)
+        check_include_file_cxx(cstddef HAVE_CSTDDEF)
+      else()
+        check_include_file_cxx(stdint.h HAVE_STDINT_H)
+        check_include_file_cxx(stddef.h HAVE_STDDEF_H)
+      endif()
+    endif()
+  endif()
+  unset(_CHECK_TYPE_SIZE_BUILTIN_TYPES_ONLY)
+  unset(_CHECK_TYPE_SIZE_LANGUAGE)
+
+  # Compute or load the size or size map.
+  set(${VARIABLE}_KEYS)
+  set(_map_file ${CMAKE_BINARY_DIR}/${CMAKE_FILES_DIRECTORY}/CheckTypeSize/${VARIABLE}.cmake)
+  if(NOT DEFINED HAVE_${VARIABLE})
+    __check_type_size_impl(${TYPE} ${VARIABLE} ${_map_file} ${_builtin} ${_language})
+  endif()
+  include(${_map_file} OPTIONAL)
+  set(_map_file)
+  set(_builtin)
+
+  # Create preprocessor code.
+  if(${VARIABLE}_KEYS)
+    set(${VARIABLE}_CODE)
+    set(_if if)
+    foreach(key ${${VARIABLE}_KEYS})
+      string(APPEND ${VARIABLE}_CODE "#${_if} defined(${key})\n# define ${VARIABLE} ${${VARIABLE}-${key}}\n")
+      set(_if elif)
+    endforeach()
+    string(APPEND ${VARIABLE}_CODE "#else\n# error ${VARIABLE} unknown\n#endif")
+    set(_if)
+  elseif(${VARIABLE})
+    set(${VARIABLE}_CODE "#define ${VARIABLE} ${${VARIABLE}}")
+  else()
+    set(${VARIABLE}_CODE "/* #undef ${VARIABLE} */")
+  endif()
+endmacro()
+
+#-----------------------------------------------------------------------------
+cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/CheckTypeSizeMap.cmake.in b/share/cmake-3.22/Modules/CheckTypeSizeMap.cmake.in
similarity index 100%
rename from share/cmake-3.18/Modules/CheckTypeSizeMap.cmake.in
rename to share/cmake-3.22/Modules/CheckTypeSizeMap.cmake.in
diff --git a/share/cmake-3.18/Modules/CheckVariableExists.c b/share/cmake-3.22/Modules/CheckVariableExists.c
similarity index 100%
rename from share/cmake-3.18/Modules/CheckVariableExists.c
rename to share/cmake-3.22/Modules/CheckVariableExists.c
diff --git a/share/cmake-3.22/Modules/CheckVariableExists.cmake b/share/cmake-3.22/Modules/CheckVariableExists.cmake
new file mode 100644
index 0000000..7420124
--- /dev/null
+++ b/share/cmake-3.22/Modules/CheckVariableExists.cmake
@@ -0,0 +1,90 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+CheckVariableExists
+-------------------
+
+Check if the variable exists.
+
+.. command:: CHECK_VARIABLE_EXISTS
+
+  .. code-block:: cmake
+
+    CHECK_VARIABLE_EXISTS(VAR VARIABLE)
+
+
+  ::
+
+    VAR      - the name of the variable
+    VARIABLE - variable to store the result
+               Will be created as an internal cache variable.
+
+
+  This macro is only for ``C`` variables.
+
+The following variables may be set before calling this macro to modify
+the way the check is run:
+
+``CMAKE_REQUIRED_FLAGS``
+  string of compile command line flags.
+``CMAKE_REQUIRED_DEFINITIONS``
+  list of macros to define (-DFOO=bar).
+``CMAKE_REQUIRED_LINK_OPTIONS``
+  .. versionadded:: 3.14
+    list of options to pass to link command.
+``CMAKE_REQUIRED_LIBRARIES``
+  list of libraries to link.
+``CMAKE_REQUIRED_QUIET``
+  .. versionadded:: 3.1
+    execute quietly without messages.
+#]=======================================================================]
+
+include_guard(GLOBAL)
+
+macro(CHECK_VARIABLE_EXISTS VAR VARIABLE)
+  if(NOT DEFINED "${VARIABLE}")
+    set(MACRO_CHECK_VARIABLE_DEFINITIONS
+      "-DCHECK_VARIABLE_EXISTS=${VAR} ${CMAKE_REQUIRED_FLAGS}")
+    if(NOT CMAKE_REQUIRED_QUIET)
+      message(CHECK_START "Looking for ${VAR}")
+    endif()
+    if(CMAKE_REQUIRED_LINK_OPTIONS)
+      set(CHECK_VARIABLE_EXISTS_ADD_LINK_OPTIONS
+        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
+    else()
+      set(CHECK_VARIABLE_EXISTS_ADD_LINK_OPTIONS)
+    endif()
+    if(CMAKE_REQUIRED_LIBRARIES)
+      set(CHECK_VARIABLE_EXISTS_ADD_LIBRARIES
+        LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
+    else()
+      set(CHECK_VARIABLE_EXISTS_ADD_LIBRARIES)
+    endif()
+    try_compile(${VARIABLE}
+      ${CMAKE_BINARY_DIR}
+      ${CMAKE_ROOT}/Modules/CheckVariableExists.c
+      COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+      ${CHECK_VARIABLE_EXISTS_ADD_LINK_OPTIONS}
+      ${CHECK_VARIABLE_EXISTS_ADD_LIBRARIES}
+      CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_VARIABLE_DEFINITIONS}
+      OUTPUT_VARIABLE OUTPUT)
+    if(${VARIABLE})
+      set(${VARIABLE} 1 CACHE INTERNAL "Have variable ${VAR}")
+      if(NOT CMAKE_REQUIRED_QUIET)
+        message(CHECK_PASS "found")
+      endif()
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+        "Determining if the variable ${VAR} exists passed with the following output:\n"
+        "${OUTPUT}\n\n")
+    else()
+      set(${VARIABLE} "" CACHE INTERNAL "Have variable ${VAR}")
+      if(NOT CMAKE_REQUIRED_QUIET)
+        message(CHECK_FAIL "not found")
+      endif()
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+        "Determining if the variable ${VAR} exists failed with the following output:\n"
+        "${OUTPUT}\n\n")
+    endif()
+  endif()
+endmacro()
diff --git a/share/cmake-3.18/Modules/Compiler/ADSP-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/ADSP-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/ADSP-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/ADSP-DetermineCompiler.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/ARMCC-ASM.cmake b/share/cmake-3.22/Modules/Compiler/ARMCC-ASM.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/ARMCC-ASM.cmake
rename to share/cmake-3.22/Modules/Compiler/ARMCC-ASM.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/ARMCC-C.cmake b/share/cmake-3.22/Modules/Compiler/ARMCC-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/ARMCC-C.cmake
rename to share/cmake-3.22/Modules/Compiler/ARMCC-C.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/ARMCC-CXX.cmake b/share/cmake-3.22/Modules/Compiler/ARMCC-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/ARMCC-CXX.cmake
rename to share/cmake-3.22/Modules/Compiler/ARMCC-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/ARMCC-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/ARMCC-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/ARMCC-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/ARMCC-DetermineCompiler.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/ARMCC.cmake b/share/cmake-3.22/Modules/Compiler/ARMCC.cmake
new file mode 100644
index 0000000..f4f1854
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/ARMCC.cmake
@@ -0,0 +1,39 @@
+if(_ARMCC_CMAKE_LOADED)
+  return()
+endif()
+set(_ARMCC_CMAKE_LOADED TRUE)
+
+# See ARM Compiler documentation at:
+# http://infocenter.arm.com/help/topic/com.arm.doc.set.swdev/index.html
+
+get_filename_component(_CMAKE_C_TOOLCHAIN_LOCATION "${CMAKE_C_COMPILER}" PATH)
+get_filename_component(_CMAKE_CXX_TOOLCHAIN_LOCATION "${CMAKE_CXX_COMPILER}" PATH)
+
+set(CMAKE_EXECUTABLE_SUFFIX ".elf")
+
+find_program(CMAKE_ARMCC_LINKER armlink HINTS "${_CMAKE_C_TOOLCHAIN_LOCATION}" "${_CMAKE_CXX_TOOLCHAIN_LOCATION}" )
+find_program(CMAKE_ARMCC_AR     armar   HINTS "${_CMAKE_C_TOOLCHAIN_LOCATION}" "${_CMAKE_CXX_TOOLCHAIN_LOCATION}" )
+
+set(CMAKE_LINKER "${CMAKE_ARMCC_LINKER}" CACHE FILEPATH "The ARMCC linker" FORCE)
+mark_as_advanced(CMAKE_ARMCC_LINKER)
+set(CMAKE_AR "${CMAKE_ARMCC_AR}" CACHE FILEPATH "The ARMCC archiver" FORCE)
+mark_as_advanced(CMAKE_ARMCC_AR)
+
+macro(__compiler_armcc lang)
+  string(APPEND CMAKE_${lang}_FLAGS_INIT " ")
+  string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -g")
+  string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -Ospace -DNDEBUG")
+  string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -Otime -DNDEBUG")
+  string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -O2 -g")
+
+  set(CMAKE_${lang}_OUTPUT_EXTENSION ".o")
+  set(CMAKE_${lang}_OUTPUT_EXTENSION_REPLACE 1)
+  set(CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG "--via=")
+
+  set(CMAKE_${lang}_LINK_EXECUTABLE      "<CMAKE_LINKER> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES> <OBJECTS> -o <TARGET> --list <TARGET_BASE>.map")
+  set(CMAKE_${lang}_CREATE_STATIC_LIBRARY  "<CMAKE_AR> --create -cr <TARGET> <LINK_FLAGS> <OBJECTS>")
+
+  set(CMAKE_DEPFILE_FLAGS_${lang} "--depend=<DEP_FILE> --depend_single_line --no_depend_system_headers")
+
+  set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Xlinker" " ")
+endmacro()
diff --git a/share/cmake-3.22/Modules/Compiler/ARMClang-ASM.cmake b/share/cmake-3.22/Modules/Compiler/ARMClang-ASM.cmake
new file mode 100644
index 0000000..6a299be
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/ARMClang-ASM.cmake
@@ -0,0 +1,9 @@
+include(Compiler/ARMClang)
+
+set(CMAKE_ASM_OUTPUT_EXTENSION ".o")
+set(CMAKE_ASM_OUTPUT_EXTENSION_REPLACE 1)
+
+set(CMAKE_ASM_COMPILE_OBJECT       "<CMAKE_ASM_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -c -o <OBJECT> <SOURCE>")
+set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS S;s;asm;msa)
+
+__compiler_armclang(ASM)
diff --git a/share/cmake-3.18/Modules/Compiler/ARMClang-C-FeatureTests.cmake b/share/cmake-3.22/Modules/Compiler/ARMClang-C-FeatureTests.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/ARMClang-C-FeatureTests.cmake
rename to share/cmake-3.22/Modules/Compiler/ARMClang-C-FeatureTests.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/ARMClang-C.cmake b/share/cmake-3.22/Modules/Compiler/ARMClang-C.cmake
new file mode 100644
index 0000000..01c4cea
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/ARMClang-C.cmake
@@ -0,0 +1,23 @@
+include(Compiler/Clang-C)
+include(Compiler/ARMClang)
+__compiler_armclang(C)
+
+if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+    AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
+    AND CMAKE_DEPFILE_FLAGS_C)
+  # dependencies are computed by the compiler itself
+  set(CMAKE_C_DEPFILE_FORMAT gcc)
+  set(CMAKE_C_DEPENDS_USE_COMPILER TRUE)
+endif()
+
+set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c90")
+set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=gnu90")
+set(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT ON)
+
+set(CMAKE_C99_STANDARD_COMPILE_OPTION "-std=c99")
+set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-std=gnu99")
+set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
+
+set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
+set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
+set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
diff --git a/share/cmake-3.18/Modules/Compiler/ARMClang-CXX-FeatureTests.cmake b/share/cmake-3.22/Modules/Compiler/ARMClang-CXX-FeatureTests.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/ARMClang-CXX-FeatureTests.cmake
rename to share/cmake-3.22/Modules/Compiler/ARMClang-CXX-FeatureTests.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/ARMClang-CXX.cmake b/share/cmake-3.22/Modules/Compiler/ARMClang-CXX.cmake
new file mode 100644
index 0000000..045b783
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/ARMClang-CXX.cmake
@@ -0,0 +1,11 @@
+include(Compiler/Clang-CXX)
+include(Compiler/ARMClang)
+__compiler_armclang(CXX)
+
+if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+    AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
+    AND CMAKE_DEPFILE_FLAGS_CXX)
+  # dependencies are computed by the compiler itself
+  set(CMAKE_CXX_DEPFILE_FORMAT gcc)
+  set(CMAKE_CXX_DEPENDS_USE_COMPILER TRUE)
+endif()
diff --git a/share/cmake-3.18/Modules/Compiler/ARMClang-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/ARMClang-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/ARMClang-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/ARMClang-DetermineCompiler.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/ARMClang.cmake b/share/cmake-3.22/Modules/Compiler/ARMClang.cmake
new file mode 100644
index 0000000..c839220
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/ARMClang.cmake
@@ -0,0 +1,146 @@
+if(_ARMClang_CMAKE_LOADED)
+  return()
+endif()
+
+# This file requires CMAKE_LINKER and CMAKE_AR set by CMakeFindBinUtils.cmake.
+if(NOT (DEFINED CMAKE_LINKER AND DEFINED CMAKE_AR))
+  return()
+endif()
+
+set(_ARMClang_CMAKE_LOADED TRUE)
+
+# Save the CMP0123 setting in a variable used both below and by try_compile.
+cmake_policy(GET CMP0123 CMAKE_ARMClang_CMP0123)
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0057 NEW) # if IN_LIST
+
+set(CMAKE_EXECUTABLE_SUFFIX ".elf")
+
+if (CMAKE_LINKER MATCHES "armlink")
+  set(__CMAKE_ARMClang_USING_armlink TRUE)
+  set(CMAKE_LIBRARY_PATH_FLAG "--userlibpath=")
+else()
+  set(__CMAKE_ARMClang_USING_armlink FALSE)
+endif()
+
+# get compiler supported cpu list
+function(__armclang_set_processor_list lang out_var)
+  execute_process(COMMAND "${CMAKE_${lang}_COMPILER}" --target=${CMAKE_${lang}_COMPILER_TARGET} -mcpu=list
+    OUTPUT_VARIABLE processor_list
+    ERROR_VARIABLE processor_list)
+  string(REGEX MATCHALL "-mcpu=([^ \n]*)" processor_list "${processor_list}")
+  string(REGEX REPLACE "-mcpu=" "" processor_list "${processor_list}")
+  set(${out_var} "${processor_list}" PARENT_SCOPE)
+endfunction()
+
+# check processor is in list
+function(__armclang_check_processor processor list out_var)
+  string(TOLOWER "${processor}" processor)
+  if(processor IN_LIST list)
+    set(${out_var} TRUE PARENT_SCOPE)
+  else()
+    set(${out_var} FALSE PARENT_SCOPE)
+  endif()
+endfunction()
+
+# get compiler supported arch list
+function(__armclang_set_arch_list lang out_var)
+  execute_process(COMMAND "${CMAKE_${lang}_COMPILER}" --target=${CMAKE_${lang}_COMPILER_TARGET} -march=list
+    OUTPUT_VARIABLE arch_list
+    ERROR_VARIABLE arch_list)
+  string(REGEX MATCHALL "-march=([^ \n]*)" arch_list "${arch_list}")
+  string(REGEX REPLACE "-march=" "" arch_list "${arch_list}")
+  set(${out_var} "${arch_list}" PARENT_SCOPE)
+endfunction()
+
+# get linker supported cpu list
+function(__armlink_set_cpu_list lang out_var)
+  if(__CMAKE_ARMClang_USING_armlink)
+    set(__linker_wrapper_flags "")
+  else()
+    set(__linker_wrapper_flags --target=${CMAKE_${lang}_COMPILER_TARGET} -Xlinker)
+  endif()
+
+  execute_process(COMMAND "${CMAKE_LINKER}" ${__linker_wrapper_flags} --cpu=list
+    OUTPUT_VARIABLE cpu_list
+    ERROR_VARIABLE cpu_list)
+  string(REGEX MATCHALL "--cpu=([^ \n]*)" cpu_list "${cpu_list}")
+  string(REGEX REPLACE "--cpu=" "" cpu_list "${cpu_list}")
+  set(${out_var} "${cpu_list}" PARENT_SCOPE)
+endfunction()
+
+macro(__compiler_armclang lang)
+  if(NOT CMAKE_${lang}_COMPILER_TARGET)
+    set(CMAKE_${lang}_COMPILER_TARGET arm-arm-none-eabi)
+  endif()
+  if(NOT CMAKE_${lang}_COMPILER_PROCESSOR_LIST)
+    __armclang_set_processor_list(${lang} CMAKE_${lang}_COMPILER_PROCESSOR_LIST)
+  endif()
+  if(NOT CMAKE_${lang}_COMPILER_ARCH_LIST)
+    __armclang_set_arch_list(${lang} CMAKE_${lang}_COMPILER_ARCH_LIST)
+  endif()
+
+  # CMAKE_SYSTEM_PROCESSOR and CMAKE_SYSTEM_ARCH are not sufficient because they provide no
+  # information of additional CPU features needed in `-mcpu=<name>[+[no]<feature>+...]`.
+  # The automatic setting of compile and link options is deprecated and projects should specify their own.
+  cmake_policy(GET CMP0123 policy_CMP0123)
+  if(NOT "x${CMAKE_ARMClang_CMP0123}x" STREQUAL "xNEWx")
+    if(NOT "x${CMAKE_ARMClang_CMP0123}x" STREQUAL "xOLDx")
+      cmake_policy(GET_WARNING CMP0123 _cmp0123_warning)
+      message(AUTHOR_WARNING
+        "${_cmp0123_warning}\n"
+        "For compatibility, CMake will automatically add cpu/arch flags based "
+        "on the CMAKE_SYSTEM_PROCESSOR and/or CMAKE_SYSTEM_ARCH variables."
+        )
+    endif()
+
+    if(NOT CMAKE_SYSTEM_PROCESSOR AND NOT CMAKE_SYSTEM_ARCH)
+      message(FATAL_ERROR "  CMAKE_SYSTEM_PROCESSOR or CMAKE_SYSTEM_ARCH must be set for ARMClang\n"
+        "  Supported processor: ${CMAKE_${lang}_COMPILER_PROCESSOR_LIST}\n"
+        "  Supported Architecture: ${CMAKE_${lang}_COMPILER_ARCH_LIST}")
+    else()
+      __armclang_check_processor("${CMAKE_SYSTEM_ARCH}" "${CMAKE_${lang}_COMPILER_ARCH_LIST}" _CMAKE_${lang}_CHECK_ARCH_RESULT)
+      if( _CMAKE_${lang}_CHECK_ARCH_RESULT)
+        string(APPEND CMAKE_${lang}_FLAGS_INIT " -march=${CMAKE_SYSTEM_ARCH}")
+        set(__march_flag_set TRUE)
+      endif()
+      __armclang_check_processor("${CMAKE_SYSTEM_PROCESSOR}" "${CMAKE_${lang}_COMPILER_PROCESSOR_LIST}" _CMAKE_${lang}_CHECK_PROCESSOR_RESULT)
+      if(_CMAKE_${lang}_CHECK_PROCESSOR_RESULT)
+        string(APPEND CMAKE_${lang}_FLAGS_INIT " -mcpu=${CMAKE_SYSTEM_PROCESSOR}")
+        set(__mcpu_flag_set TRUE)
+      endif()
+      if(NOT __march_flag_set AND NOT __mcpu_flag_set)
+        message(FATAL_ERROR "At least one of the variables CMAKE_SYSTEM_PROCESSOR or CMAKE_SYSTEM_ARCH must be set for ARMClang\n"
+                            "Supported processor: ${CMAKE_${lang}_COMPILER_PROCESSOR_LIST}\n"
+                            "  Supported Architecture: ${CMAKE_${lang}_COMPILER_ARCH_LIST}")
+      endif()
+      unset(_CMAKE_${lang}_CHECK_PROCESSOR_RESULT)
+      unset(_CMAKE_${lang}_CHECK_ARCH_RESULT)
+    endif()
+
+    #check if CMAKE_SYSTEM_PROCESSOR belongs to supported cpu list for armlink
+    __armlink_set_cpu_list( ${lang} CMAKE_LINKER_CPU_LIST)
+    list(TRANSFORM CMAKE_LINKER_CPU_LIST TOLOWER)
+    __armclang_check_processor("${CMAKE_SYSTEM_PROCESSOR}" "${CMAKE_LINKER_CPU_LIST}" _CMAKE_CHECK_LINK_CPU_RESULT)
+    if(_CMAKE_CHECK_LINK_CPU_RESULT)
+      string(APPEND CMAKE_${lang}_LINK_FLAGS " --cpu=${CMAKE_SYSTEM_PROCESSOR}")
+    endif()
+
+  endif()
+
+  if(__CMAKE_ARMClang_USING_armlink)
+    unset(CMAKE_${lang}_LINKER_WRAPPER_FLAG)
+    set(__CMAKE_ARMClang_USING_armlink_WRAPPER "")
+  else()
+    set(__CMAKE_ARMClang_USING_armlink_WRAPPER "-Xlinker")
+  endif()
+  set(CMAKE_${lang}_LINK_EXECUTABLE "<CMAKE_LINKER> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES> <OBJECTS> -o <TARGET> ${__CMAKE_ARMClang_USING_armlink_WRAPPER} --list=<TARGET_BASE>.map")
+  set(CMAKE_${lang}_CREATE_STATIC_LIBRARY  "<CMAKE_AR> --create -cr <TARGET> <LINK_FLAGS> <OBJECTS>")
+  set(CMAKE_${lang}_ARCHIVE_CREATE         "<CMAKE_AR> --create -cr <TARGET> <LINK_FLAGS> <OBJECTS>")
+  set(CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG "${__CMAKE_ARMClang_USING_armlink_WRAPPER} --via=")
+  set(CMAKE_${lang}_OUTPUT_EXTENSION ".o")
+  set(CMAKE_${lang}_OUTPUT_EXTENSION_REPLACE 1)
+endmacro()
+
+cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/Compiler/Absoft-Fortran.cmake b/share/cmake-3.22/Modules/Compiler/Absoft-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/Absoft-Fortran.cmake
rename to share/cmake-3.22/Modules/Compiler/Absoft-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/AppleClang-ASM.cmake b/share/cmake-3.22/Modules/Compiler/AppleClang-ASM.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/AppleClang-ASM.cmake
rename to share/cmake-3.22/Modules/Compiler/AppleClang-ASM.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/AppleClang-C-FeatureTests.cmake b/share/cmake-3.22/Modules/Compiler/AppleClang-C-FeatureTests.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/AppleClang-C-FeatureTests.cmake
rename to share/cmake-3.22/Modules/Compiler/AppleClang-C-FeatureTests.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/AppleClang-C.cmake b/share/cmake-3.22/Modules/Compiler/AppleClang-C.cmake
new file mode 100644
index 0000000..d711b6e
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/AppleClang-C.cmake
@@ -0,0 +1,41 @@
+include(Compiler/Clang)
+__compiler_clang(C)
+
+
+if(NOT "x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC")
+  if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+      AND CMAKE_GENERATOR MATCHES "Makefiles"
+      AND CMAKE_DEPFILE_FLAGS_C)
+    # dependencies are computed by the compiler itself
+    set(CMAKE_C_DEPFILE_FORMAT gcc)
+    set(CMAKE_C_DEPENDS_USE_COMPILER TRUE)
+  endif()
+endif()
+
+set(CMAKE_C_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -x c)
+
+if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.0)
+  set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c90")
+  set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=gnu90")
+  set(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT ON)
+
+  set(CMAKE_C99_STANDARD_COMPILE_OPTION "-std=c99")
+  set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-std=gnu99")
+  set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
+
+  set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
+  set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
+  set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
+endif()
+
+if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 11.0)
+  set(CMAKE_C17_STANDARD_COMPILE_OPTION "-std=c17")
+  set(CMAKE_C17_EXTENSION_COMPILE_OPTION "-std=gnu17")
+endif()
+
+if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 11.0.3)
+  set(CMAKE_C23_STANDARD_COMPILE_OPTION "-std=c2x")
+  set(CMAKE_C23_EXTENSION_COMPILE_OPTION "-std=gnu2x")
+endif()
+
+__compiler_check_default_language_standard(C 4.0 99 9.1 11 12.0.5 17)
diff --git a/share/cmake-3.18/Modules/Compiler/AppleClang-CXX-FeatureTests.cmake b/share/cmake-3.22/Modules/Compiler/AppleClang-CXX-FeatureTests.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/AppleClang-CXX-FeatureTests.cmake
rename to share/cmake-3.22/Modules/Compiler/AppleClang-CXX-FeatureTests.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/AppleClang-CXX.cmake b/share/cmake-3.22/Modules/Compiler/AppleClang-CXX.cmake
new file mode 100644
index 0000000..28be1df
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/AppleClang-CXX.cmake
@@ -0,0 +1,55 @@
+include(Compiler/Clang)
+__compiler_clang(CXX)
+
+set(CMAKE_CXX_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -x c++)
+
+if(NOT "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
+  if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+      AND CMAKE_GENERATOR MATCHES "Makefiles"
+      AND CMAKE_DEPFILE_FLAGS_CXX)
+    # dependencies are computed by the compiler itself
+    set(CMAKE_CXX_DEPFILE_FORMAT gcc)
+    set(CMAKE_CXX_DEPENDS_USE_COMPILER TRUE)
+  endif()
+
+  set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden")
+endif()
+
+if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.0)
+  set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "-std=c++98")
+  set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "-std=gnu++98")
+  set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
+
+  set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++11")
+  set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++11")
+endif()
+
+if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 6.1)
+  set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++14")
+  set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++14")
+  set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
+elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.1)
+  # AppleClang 5.0 knows this flag, but does not set a __cplusplus macro greater than 201103L
+  set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++1y")
+  set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++1y")
+  set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
+endif()
+
+if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10.0)
+  set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++17")
+  set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++17")
+elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 6.1)
+  set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++1z")
+  set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++1z")
+endif()
+
+if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0)
+    set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
+endif()
+
+if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10.0)
+  set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std=c++2a")
+  set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std=gnu++2a")
+endif()
+
+__compiler_check_default_language_standard(CXX 4.0 98)
diff --git a/share/cmake-3.18/Modules/Compiler/AppleClang-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/AppleClang-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/AppleClang-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/AppleClang-DetermineCompiler.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/AppleClang-OBJC.cmake b/share/cmake-3.22/Modules/Compiler/AppleClang-OBJC.cmake
new file mode 100644
index 0000000..f40c396
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/AppleClang-OBJC.cmake
@@ -0,0 +1,40 @@
+include(Compiler/Clang-OBJC)
+
+if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+    AND CMAKE_GENERATOR MATCHES "Makefiles"
+    AND CMAKE_DEPFILE_FLAGS_OBJC)
+  # dependencies are computed by the compiler itself
+  set(CMAKE_OBJC_DEPFILE_FORMAT gcc)
+  set(CMAKE_OBJC_DEPENDS_USE_COMPILER TRUE)
+endif()
+
+
+if(NOT CMAKE_OBJC_COMPILER_VERSION VERSION_LESS 4.0)
+  set(CMAKE_OBJC90_STANDARD_COMPILE_OPTION "-std=c90")
+  set(CMAKE_OBJC90_EXTENSION_COMPILE_OPTION "-std=gnu90")
+  set(CMAKE_OBJC90_STANDARD__HAS_FULL_SUPPORT ON)
+
+  set(CMAKE_OBJC99_STANDARD_COMPILE_OPTION "-std=c99")
+  set(CMAKE_OBJC99_EXTENSION_COMPILE_OPTION "-std=gnu99")
+  set(CMAKE_OBJC99_STANDARD__HAS_FULL_SUPPORT ON)
+
+  set(CMAKE_OBJC11_STANDARD_COMPILE_OPTION "-std=c11")
+  set(CMAKE_OBJC11_EXTENSION_COMPILE_OPTION "-std=gnu11")
+  set(CMAKE_OBJC11_STANDARD__HAS_FULL_SUPPORT ON)
+endif()
+
+# AppleClang 10.0 was the oldest compiler available to test C17 support
+if(NOT CMAKE_OBJC_COMPILER_VERSION VERSION_LESS 10.0)
+  set(CMAKE_OBJC17_STANDARD_COMPILE_OPTION "-std=c17")
+  set(CMAKE_OBJC17_EXTENSION_COMPILE_OPTION "-std=gnu17")
+  set(CMAKE_OBJC17_STANDARD__HAS_FULL_SUPPORT ON)
+endif()
+
+if(NOT CMAKE_OBJC_COMPILER_VERSION VERSION_LESS 11.0)
+  set(CMAKE_OBJC23_STANDARD_COMPILE_OPTION "-std=c2x")
+  set(CMAKE_OBJC23_EXTENSION_COMPILE_OPTION "-std=gnu2x")
+  set(CMAKE_OBJC23_STANDARD__HAS_FULL_SUPPORT ON)
+endif()
+
+# AppleClang 10.0 was the oldest compiler available to test default C11 support
+__compiler_check_default_language_standard(OBJC 4.0 99 10.0 11)
diff --git a/share/cmake-3.22/Modules/Compiler/AppleClang-OBJCXX.cmake b/share/cmake-3.22/Modules/Compiler/AppleClang-OBJCXX.cmake
new file mode 100644
index 0000000..172a343
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/AppleClang-OBJCXX.cmake
@@ -0,0 +1,52 @@
+include(Compiler/Clang-OBJCXX)
+
+
+if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+    AND CMAKE_GENERATOR MATCHES "Makefiles"
+    AND CMAKE_DEPFILE_FLAGS_OBJCXX)
+  # dependencies are computed by the compiler itself
+  set(CMAKE_OBJCXX_DEPFILE_FORMAT gcc)
+  set(CMAKE_OBJCXX_DEPENDS_USE_COMPILER TRUE)
+endif()
+
+
+set(CMAKE_OBJCXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden")
+
+if(NOT CMAKE_OBJCXX_COMPILER_VERSION VERSION_LESS 4.0)
+  set(CMAKE_OBJCXX98_STANDARD_COMPILE_OPTION "-std=c++98")
+  set(CMAKE_OBJCXX98_EXTENSION_COMPILE_OPTION "-std=gnu++98")
+  set(CMAKE_OBJCXX98_STANDARD__HAS_FULL_SUPPORT ON)
+
+  set(CMAKE_OBJCXX11_STANDARD_COMPILE_OPTION "-std=c++11")
+  set(CMAKE_OBJCXX11_EXTENSION_COMPILE_OPTION "-std=gnu++11")
+endif()
+
+if(NOT CMAKE_OBJCXX_COMPILER_VERSION VERSION_LESS 6.1)
+  set(CMAKE_OBJCXX14_STANDARD_COMPILE_OPTION "-std=c++14")
+  set(CMAKE_OBJCXX14_EXTENSION_COMPILE_OPTION "-std=gnu++14")
+  set(CMAKE_OBJCXX14_STANDARD__HAS_FULL_SUPPORT ON)
+elseif(NOT CMAKE_OBJCXX_COMPILER_VERSION VERSION_LESS 5.1)
+  # AppleClang 5.0 knows this flag, but does not set a __cplusplus macro greater than 201103L
+  set(CMAKE_OBJCXX14_STANDARD_COMPILE_OPTION "-std=c++1y")
+  set(CMAKE_OBJCXX14_EXTENSION_COMPILE_OPTION "-std=gnu++1y")
+  set(CMAKE_OBJCXX14_STANDARD__HAS_FULL_SUPPORT ON)
+endif()
+
+if (NOT CMAKE_OBJCXX_COMPILER_VERSION VERSION_LESS 10.0)
+  set(CMAKE_OBJCXX17_STANDARD_COMPILE_OPTION "-std=c++17")
+  set(CMAKE_OBJCXX17_EXTENSION_COMPILE_OPTION "-std=gnu++17")
+elseif (NOT CMAKE_OBJCXX_COMPILER_VERSION VERSION_LESS 6.1)
+  set(CMAKE_OBJCXX17_STANDARD_COMPILE_OPTION "-std=c++1z")
+  set(CMAKE_OBJCXX17_EXTENSION_COMPILE_OPTION "-std=gnu++1z")
+endif()
+
+if (NOT CMAKE_OBJCXX_COMPILER_VERSION VERSION_LESS 8.0)
+    set(CMAKE_OBJCXX11_STANDARD__HAS_FULL_SUPPORT ON)
+endif()
+
+if (NOT CMAKE_OBJCXX_COMPILER_VERSION VERSION_LESS 10.0)
+  set(CMAKE_OBJCXX20_STANDARD_COMPILE_OPTION "-std=c++2a")
+  set(CMAKE_OBJCXX20_EXTENSION_COMPILE_OPTION "-std=gnu++2a")
+endif()
+
+__compiler_check_default_language_standard(OBJCXX 4.0 98)
diff --git a/share/cmake-3.18/Modules/Compiler/Borland-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/Borland-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/Borland-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/Borland-DetermineCompiler.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/Bruce-C-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/Bruce-C-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/Bruce-C-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/Bruce-C-DetermineCompiler.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/Bruce-C.cmake b/share/cmake-3.22/Modules/Compiler/Bruce-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/Bruce-C.cmake
rename to share/cmake-3.22/Modules/Compiler/Bruce-C.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/CCur-Fortran.cmake b/share/cmake-3.22/Modules/Compiler/CCur-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/CCur-Fortran.cmake
rename to share/cmake-3.22/Modules/Compiler/CCur-Fortran.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/CMakeCommonCompilerMacros.cmake b/share/cmake-3.22/Modules/Compiler/CMakeCommonCompilerMacros.cmake
new file mode 100644
index 0000000..2f220d4
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/CMakeCommonCompilerMacros.cmake
@@ -0,0 +1,194 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+# This module is shared by multiple languages and compilers; use include guard
+if (__COMPILER_CMAKE_COMMON_COMPILER_MACROS)
+  return()
+endif ()
+set(__COMPILER_CMAKE_COMMON_COMPILER_MACROS 1)
+
+
+# Check that a compiler's language standard is properly detected
+# Parameters:
+#   lang   - Language to check
+#   stdver1 - Minimum version to set a given default for
+#   std1    - Default to use for compiler ver >= stdver1
+#   stdverN - Minimum version to set a given default for
+#   stdN    - Default to use for compiler ver >= stdverN
+#
+#   The order of stdverN stdN pairs passed as arguments is expected to be in
+#   monotonically increasing version order.
+#
+# Note:
+#   This macro can be called with multiple version / std pairs to convey that
+#   newer compiler versions may use a newer standard default.
+#
+# Example:
+#   To specify that compiler version 6.1 and newer defaults to C++11 while
+#   4.8 <= ver < 6.1 default to C++98, you would call:
+#
+# __compiler_check_default_language_standard(CXX 4.8 98 6.1 11)
+#
+macro(__compiler_check_default_language_standard lang stdver1 std1)
+  set(__std_ver_pairs "${stdver1};${std1};${ARGN}")
+  string(REGEX REPLACE " *; *" " " __std_ver_pairs "${__std_ver_pairs}")
+  string(REGEX MATCHALL "[^ ]+ [^ ]+" __std_ver_pairs "${__std_ver_pairs}")
+
+  # If the compiler version is below the threshold of even having CMake
+  # support for language standards, then don't bother.
+  if (CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL "${stdver1}")
+    if (NOT CMAKE_${lang}_COMPILER_FORCED)
+      if (NOT CMAKE_${lang}_STANDARD_COMPUTED_DEFAULT OR NOT DEFINED CMAKE_${lang}_EXTENSIONS_COMPUTED_DEFAULT)
+        message(FATAL_ERROR "CMAKE_${lang}_STANDARD_COMPUTED_DEFAULT and CMAKE_${lang}_EXTENSIONS_COMPUTED_DEFAULT should be set for ${CMAKE_${lang}_COMPILER_ID} (${CMAKE_${lang}_COMPILER}) version ${CMAKE_${lang}_COMPILER_VERSION}")
+      endif ()
+      set(CMAKE_${lang}_STANDARD_DEFAULT ${CMAKE_${lang}_STANDARD_COMPUTED_DEFAULT})
+      set(CMAKE_${lang}_EXTENSIONS_DEFAULT ${CMAKE_${lang}_EXTENSIONS_COMPUTED_DEFAULT})
+    else ()
+      list(REVERSE __std_ver_pairs)
+      foreach (__std_ver_pair IN LISTS __std_ver_pairs)
+        string(REGEX MATCH "([^ ]+) (.+)" __std_ver_pair "${__std_ver_pair}")
+        set(__stdver ${CMAKE_MATCH_1})
+        set(__std ${CMAKE_MATCH_2})
+        # Compiler id was forced so just guess the defaults.
+        if (CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL __stdver)
+          if(NOT DEFINED CMAKE_${lang}_EXTENSIONS_DEFAULT)
+            # Currently known compilers default to enabling extensions.
+            set(CMAKE_${lang}_EXTENSIONS_DEFAULT ON)
+          endif()
+          if(NOT DEFINED CMAKE_${lang}_STANDARD_DEFAULT)
+            set(CMAKE_${lang}_STANDARD_DEFAULT ${__std})
+          endif()
+        endif ()
+        unset(__std)
+        unset(__stdver)
+      endforeach ()
+    endif ()
+  endif ()
+  unset(__std_ver_pairs)
+endmacro()
+
+# Define to allow compile features to be automatically determined
+macro(cmake_record_c_compile_features)
+  set(_result 0)
+  if(_result EQUAL 0 AND DEFINED CMAKE_C23_STANDARD_COMPILE_OPTION)
+    _has_compiler_features_c(23)
+  endif()
+  if(_result EQUAL 0 AND DEFINED CMAKE_C17_STANDARD_COMPILE_OPTION)
+    _has_compiler_features_c(17)
+  endif()
+  if(_result EQUAL 0 AND DEFINED CMAKE_C11_STANDARD_COMPILE_OPTION)
+    if(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT)
+      _has_compiler_features_c(11)
+    else()
+      _record_compiler_features_c(11)
+    endif()
+    unset(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT)
+  endif()
+  if(_result EQUAL 0 AND DEFINED CMAKE_C99_STANDARD_COMPILE_OPTION)
+    if(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT)
+      _has_compiler_features_c(99)
+    else()
+      _record_compiler_features_c(99)
+    endif()
+    unset(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT)
+  endif()
+  if(_result EQUAL 0 AND DEFINED CMAKE_C90_STANDARD_COMPILE_OPTION)
+    if(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT)
+      _has_compiler_features_c(90)
+    else()
+      _record_compiler_features_c(90)
+    endif()
+    unset(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT)
+  endif()
+endmacro()
+
+# Define to allow compile features to be automatically determined
+macro(cmake_record_cxx_compile_features)
+  set(_result 0)
+  if(_result EQUAL 0 AND DEFINED CMAKE_CXX23_STANDARD_COMPILE_OPTION)
+    _has_compiler_features_cxx(23)
+  endif()
+  if(_result EQUAL 0 AND DEFINED CMAKE_CXX20_STANDARD_COMPILE_OPTION)
+    _has_compiler_features_cxx(20)
+  endif()
+  if(_result EQUAL 0 AND DEFINED CMAKE_CXX17_STANDARD_COMPILE_OPTION)
+    _has_compiler_features_cxx(17)
+  endif()
+  if(_result EQUAL 0 AND DEFINED CMAKE_CXX14_STANDARD_COMPILE_OPTION)
+    if(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT)
+      _has_compiler_features_cxx(14)
+    else()
+      _record_compiler_features_cxx(14)
+    endif()
+    unset(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT)
+  endif()
+  if(_result EQUAL 0 AND DEFINED CMAKE_CXX11_STANDARD_COMPILE_OPTION)
+    if(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT)
+      _has_compiler_features_cxx(11)
+    else()
+      _record_compiler_features_cxx(11)
+    endif()
+    unset(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT)
+  endif()
+  if(_result EQUAL 0 AND DEFINED CMAKE_CXX98_STANDARD_COMPILE_OPTION)
+    if(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT)
+      _has_compiler_features_cxx(98)
+    else()
+      _record_compiler_features_cxx(98)
+    endif()
+    unset(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT)
+  endif()
+endmacro()
+
+macro(cmake_record_cuda_compile_features)
+  set(_result 0)
+  if(_result EQUAL 0 AND DEFINED CMAKE_CUDA23_STANDARD_COMPILE_OPTION)
+    _has_compiler_features_cuda(23)
+  endif()
+  if(_result EQUAL 0 AND DEFINED CMAKE_CUDA20_STANDARD_COMPILE_OPTION)
+    _has_compiler_features_cuda(20)
+  endif()
+  if(_result EQUAL 0 AND DEFINED CMAKE_CUDA17_STANDARD_COMPILE_OPTION)
+    _has_compiler_features_cuda(17)
+  endif()
+  if(_result EQUAL 0 AND DEFINED CMAKE_CUDA14_STANDARD_COMPILE_OPTION)
+    if(CMAKE_CUDA14_STANDARD__HAS_FULL_SUPPORT)
+      _has_compiler_features_cuda(14)
+    else()
+      _record_compiler_features_cuda(14)
+    endif()
+    unset(CMAKE_CUDA14_STANDARD__HAS_FULL_SUPPORT)
+  endif()
+  if(_result EQUAL 0 AND DEFINED CMAKE_CUDA11_STANDARD_COMPILE_OPTION)
+    if(CMAKE_CUDA11_STANDARD__HAS_FULL_SUPPORT)
+      _has_compiler_features_cuda(11)
+    else()
+      _record_compiler_features_cuda(11)
+    endif()
+    unset(CMAKE_CUDA11_STANDARD__HAS_FULL_SUPPORT)
+  endif()
+  if(_result EQUAL 0 AND DEFINED CMAKE_CUDA03_STANDARD_COMPILE_OPTION)
+    if(CMAKE_CUDA03_STANDARD__HAS_FULL_SUPPORT)
+      _has_compiler_features_cuda(03)
+    else()
+      _record_compiler_features_cuda(03)
+    endif()
+    unset(CMAKE_CUDA03_STANDARD__HAS_FULL_SUPPORT)
+  endif()
+endmacro()
+
+macro(cmake_record_hip_compile_features)
+  set(_result 0)
+  if(_result EQUAL 0 AND DEFINED CMAKE_HIP23_STANDARD_COMPILE_OPTION)
+    _has_compiler_features_hip(23)
+  endif()
+  if(_result EQUAL 0 AND DEFINED CMAKE_HIP20_STANDARD_COMPILE_OPTION)
+    _has_compiler_features_hip(20)
+  endif()
+  if(_result EQUAL 0 AND DEFINED CMAKE_HIP17_STANDARD_COMPILE_OPTION)
+    _has_compiler_features_hip(17)
+  endif()
+  _has_compiler_features_hip(14)
+  _has_compiler_features_hip(11)
+  _has_compiler_features_hip(98)
+endmacro()
diff --git a/share/cmake-3.18/Modules/Compiler/Clang-ASM.cmake b/share/cmake-3.22/Modules/Compiler/Clang-ASM.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/Clang-ASM.cmake
rename to share/cmake-3.22/Modules/Compiler/Clang-ASM.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/Clang-C-FeatureTests.cmake b/share/cmake-3.22/Modules/Compiler/Clang-C-FeatureTests.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/Clang-C-FeatureTests.cmake
rename to share/cmake-3.22/Modules/Compiler/Clang-C-FeatureTests.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/Clang-C.cmake b/share/cmake-3.22/Modules/Compiler/Clang-C.cmake
new file mode 100644
index 0000000..1b765ad
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/Clang-C.cmake
@@ -0,0 +1,85 @@
+include(Compiler/Clang)
+__compiler_clang(C)
+
+cmake_policy(GET CMP0025 appleClangPolicy)
+if(APPLE AND NOT appleClangPolicy STREQUAL NEW)
+  return()
+endif()
+
+if("x${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "xMSVC")
+  set(CMAKE_C_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -TC)
+  set(CMAKE_C_CLANG_TIDY_DRIVER_MODE "cl")
+  set(CMAKE_C_INCLUDE_WHAT_YOU_USE_DRIVER_MODE "cl")
+  if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+      AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
+      AND CMAKE_DEPFILE_FLAGS_C)
+    set(CMAKE_C_DEPENDS_USE_COMPILER TRUE)
+  endif()
+elseif("x${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "xGNU")
+  set(CMAKE_C_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -x c)
+  if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+      AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
+      AND CMAKE_DEPFILE_FLAGS_C)
+    # dependencies are computed by the compiler itself
+    set(CMAKE_C_DEPFILE_FORMAT gcc)
+    set(CMAKE_C_DEPENDS_USE_COMPILER TRUE)
+  endif()
+endif()
+
+if("x${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "xGNU")
+  if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 2.1)
+    set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c90")
+    set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=gnu90")
+
+    set(CMAKE_C99_STANDARD_COMPILE_OPTION "-std=c99")
+    set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-std=gnu99")
+  endif()
+
+  if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 3.1)
+    set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
+    set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
+  elseif(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 3.0)
+    set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c1x")
+    set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu1x")
+  endif()
+
+  if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 6.0)
+    set(CMAKE_C17_STANDARD_COMPILE_OPTION "-std=c17")
+    set(CMAKE_C17_EXTENSION_COMPILE_OPTION "-std=gnu17")
+  endif()
+
+  if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 9.0)
+    set(CMAKE_C23_STANDARD_COMPILE_OPTION "-std=c2x")
+    set(CMAKE_C23_EXTENSION_COMPILE_OPTION "-std=gnu2x")
+  endif()
+else()
+  set(CMAKE_C90_STANDARD_COMPILE_OPTION "")
+  set(CMAKE_C90_EXTENSION_COMPILE_OPTION "")
+  set(CMAKE_C99_STANDARD_COMPILE_OPTION "")
+  set(CMAKE_C99_EXTENSION_COMPILE_OPTION "")
+
+  if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 13.0)
+    set(CMAKE_C11_STANDARD_COMPILE_OPTION "/std:c11")
+    set(CMAKE_C11_EXTENSION_COMPILE_OPTION "/std:c11")
+
+    set(CMAKE_C17_STANDARD_COMPILE_OPTION "/std:c17")
+    set(CMAKE_C17_EXTENSION_COMPILE_OPTION "/std:c17")
+  else()
+    set(CMAKE_C11_STANDARD_COMPILE_OPTION "")
+    set(CMAKE_C11_EXTENSION_COMPILE_OPTION "")
+
+    set(CMAKE_C17_STANDARD_COMPILE_OPTION "")
+    set(CMAKE_C17_EXTENSION_COMPILE_OPTION "")
+  endif()
+endif()
+
+if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 2.1)
+  set(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT ON)
+  set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
+endif()
+
+if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 3.0)
+  set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
+endif()
+
+__compiler_check_default_language_standard(C 2.1 99 3.5.2 11 11.0 17)
diff --git a/share/cmake-3.22/Modules/Compiler/Clang-CUDA.cmake b/share/cmake-3.22/Modules/Compiler/Clang-CUDA.cmake
new file mode 100644
index 0000000..0223081
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/Clang-CUDA.cmake
@@ -0,0 +1,35 @@
+include(Compiler/Clang)
+__compiler_clang(CUDA)
+
+# Set explicitly, because __compiler_clang() doesn't set this if we're simulating MSVC.
+set(CMAKE_DEPFILE_FLAGS_CUDA "-MD -MT <DEP_TARGET> -MF <DEP_FILE>")
+if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+    AND CMAKE_GENERATOR MATCHES "Makefiles|WMake")
+  # dependencies are computed by the compiler itself
+  set(CMAKE_CUDA_DEPFILE_FORMAT gcc)
+  set(CMAKE_CUDA_DEPENDS_USE_COMPILER TRUE)
+endif()
+
+# C++03 isn't supported for CXX, but is for CUDA, so we need to set these manually.
+# Do this before __compiler_clang_cxx_standards() since that adds the feature.
+set(CMAKE_CUDA03_STANDARD_COMPILE_OPTION "-std=c++03")
+set(CMAKE_CUDA03_EXTENSION_COMPILE_OPTION "-std=gnu++03")
+__compiler_clang_cxx_standards(CUDA)
+
+set(CMAKE_CUDA_COMPILER_HAS_DEVICE_LINK_PHASE TRUE)
+set(_CMAKE_COMPILE_AS_CUDA_FLAG "-x cuda")
+set(_CMAKE_CUDA_PTX_FLAG "--cuda-device-only -S")
+set(_CMAKE_CUDA_DEVICE_CODE "-fgpu-rdc -c")
+
+# RulePlaceholderExpander expands crosscompile variables like sysroot and target only for CMAKE_<LANG>_COMPILER. Override the default.
+set(CMAKE_CUDA_LINK_EXECUTABLE "<CMAKE_CUDA_COMPILER> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>${__IMPLICIT_LINKS}")
+set(CMAKE_CUDA_CREATE_SHARED_LIBRARY "<CMAKE_CUDA_COMPILER> <CMAKE_SHARED_LIBRARY_CUDA_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CUDA_FLAGS> <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>${__IMPLICIT_LINKS}")
+
+set(CMAKE_CUDA_RUNTIME_LIBRARY_DEFAULT "STATIC")
+set(CMAKE_CUDA_RUNTIME_LIBRARY_LINK_OPTIONS_STATIC "cudadevrt;cudart_static")
+set(CMAKE_CUDA_RUNTIME_LIBRARY_LINK_OPTIONS_SHARED "cudadevrt;cudart")
+set(CMAKE_CUDA_RUNTIME_LIBRARY_LINK_OPTIONS_NONE   "")
+
+if(UNIX)
+  list(APPEND CMAKE_CUDA_RUNTIME_LIBRARY_LINK_OPTIONS_STATIC "rt" "pthread" "dl")
+endif()
diff --git a/share/cmake-3.18/Modules/Compiler/Clang-CXX-FeatureTests.cmake b/share/cmake-3.22/Modules/Compiler/Clang-CXX-FeatureTests.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/Clang-CXX-FeatureTests.cmake
rename to share/cmake-3.22/Modules/Compiler/Clang-CXX-FeatureTests.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/Clang-CXX-TestableFeatures.cmake b/share/cmake-3.22/Modules/Compiler/Clang-CXX-TestableFeatures.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/Clang-CXX-TestableFeatures.cmake
rename to share/cmake-3.22/Modules/Compiler/Clang-CXX-TestableFeatures.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/Clang-CXX.cmake b/share/cmake-3.22/Modules/Compiler/Clang-CXX.cmake
new file mode 100644
index 0000000..84b05d7
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/Clang-CXX.cmake
@@ -0,0 +1,31 @@
+include(Compiler/Clang)
+__compiler_clang(CXX)
+__compiler_clang_cxx_standards(CXX)
+
+if("x${CMAKE_CXX_COMPILER_FRONTEND_VARIANT}" STREQUAL "xGNU")
+  if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+      AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
+      AND CMAKE_DEPFILE_FLAGS_CXX)
+    # dependencies are computed by the compiler itself
+    set(CMAKE_CXX_DEPFILE_FORMAT gcc)
+    set(CMAKE_CXX_DEPENDS_USE_COMPILER TRUE)
+  endif()
+
+  set(CMAKE_CXX_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -x c++)
+  set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden")
+endif()
+
+cmake_policy(GET CMP0025 appleClangPolicy)
+if(APPLE AND NOT appleClangPolicy STREQUAL NEW)
+  return()
+endif()
+
+if("x${CMAKE_CXX_COMPILER_FRONTEND_VARIANT}" STREQUAL "xMSVC")
+  set(CMAKE_CXX_CLANG_TIDY_DRIVER_MODE "cl")
+  set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE_DRIVER_MODE "cl")
+  if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+      AND CMAKE_GENERATOR MATCHES "Makefiles"
+      AND CMAKE_DEPFILE_FLAGS_CXX)
+    set(CMAKE_CXX_DEPENDS_USE_COMPILER TRUE)
+  endif()
+endif()
diff --git a/share/cmake-3.18/Modules/Compiler/Clang-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/Clang-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/Clang-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/Clang-DetermineCompiler.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/Clang-DetermineCompilerInternal.cmake b/share/cmake-3.22/Modules/Compiler/Clang-DetermineCompilerInternal.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/Clang-DetermineCompilerInternal.cmake
rename to share/cmake-3.22/Modules/Compiler/Clang-DetermineCompilerInternal.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/Clang-FindBinUtils.cmake b/share/cmake-3.22/Modules/Compiler/Clang-FindBinUtils.cmake
new file mode 100644
index 0000000..125ae78
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/Clang-FindBinUtils.cmake
@@ -0,0 +1,45 @@
+if(NOT DEFINED _CMAKE_PROCESSING_LANGUAGE OR _CMAKE_PROCESSING_LANGUAGE STREQUAL "")
+  message(FATAL_ERROR "Internal error: _CMAKE_PROCESSING_LANGUAGE is not set")
+endif()
+
+# Ubuntu:
+# * /usr/bin/llvm-ar-9
+# * /usr/bin/llvm-ranlib-9
+string(REGEX MATCH "^([0-9]+)" __version_x
+    "${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_VERSION}")
+
+# Debian:
+# * /usr/bin/llvm-ar-4.0
+# * /usr/bin/llvm-ranlib-4.0
+string(REGEX MATCH "^([0-9]+\\.[0-9]+)" __version_x_y
+    "${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_VERSION}")
+
+# Try to find tools in the same directory as Clang itself
+get_filename_component(__clang_hint_1 "${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER}" REALPATH)
+get_filename_component(__clang_hint_1 "${__clang_hint_1}" DIRECTORY)
+
+get_filename_component(__clang_hint_2 "${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER}" DIRECTORY)
+
+set(__clang_hints ${__clang_hint_1} ${__clang_hint_2})
+
+# http://manpages.ubuntu.com/manpages/precise/en/man1/llvm-ar.1.html
+find_program(CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_AR NAMES
+    "${_CMAKE_TOOLCHAIN_PREFIX}llvm-ar-${__version_x_y}"
+    "${_CMAKE_TOOLCHAIN_PREFIX}llvm-ar-${__version_x}"
+    "${_CMAKE_TOOLCHAIN_PREFIX}llvm-ar"
+    HINTS ${__clang_hints}
+    NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH
+    DOC "LLVM archiver"
+)
+mark_as_advanced(CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_AR)
+
+# http://manpages.ubuntu.com/manpages/precise/en/man1/llvm-ranlib.1.html
+find_program(CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_RANLIB NAMES
+    "${_CMAKE_TOOLCHAIN_PREFIX}llvm-ranlib-${__version_x_y}"
+    "${_CMAKE_TOOLCHAIN_PREFIX}llvm-ranlib-${__version_x}"
+    "${_CMAKE_TOOLCHAIN_PREFIX}llvm-ranlib"
+    HINTS ${__clang_hints}
+    NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH
+    DOC "Generate index for LLVM archive"
+)
+mark_as_advanced(CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_RANLIB)
diff --git a/share/cmake-3.22/Modules/Compiler/Clang-HIP.cmake b/share/cmake-3.22/Modules/Compiler/Clang-HIP.cmake
new file mode 100644
index 0000000..4dbe2e8
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/Clang-HIP.cmake
@@ -0,0 +1,20 @@
+include(Compiler/Clang)
+__compiler_clang(HIP)
+__compiler_clang_cxx_standards(HIP)
+
+set(_CMAKE_COMPILE_AS_HIP_FLAG "-x hip")
+set(_CMAKE_HIP_RDC_FLAG "-fgpu-rdc")
+
+if(NOT "x${CMAKE_HIP_SIMULATE_ID}" STREQUAL "xMSVC")
+  set(CMAKE_HIP_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden")
+
+  string(APPEND CMAKE_HIP_FLAGS_DEBUG_INIT " -O")
+endif()
+
+set(CMAKE_HIP_RUNTIME_LIBRARY_DEFAULT "SHARED")
+set(CMAKE_HIP_RUNTIME_LIBRARY_LINK_OPTIONS_STATIC  "")
+set(CMAKE_HIP_RUNTIME_LIBRARY_LINK_OPTIONS_SHARED  "")
+
+# Populated by CMakeHIPInformation.cmake
+set(CMAKE_HIP_RUNTIME_LIBRARIES_STATIC "")
+set(CMAKE_HIP_RUNTIME_LIBRARIES_SHARED "")
diff --git a/share/cmake-3.22/Modules/Compiler/Clang-OBJC.cmake b/share/cmake-3.22/Modules/Compiler/Clang-OBJC.cmake
new file mode 100644
index 0000000..7a83b77
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/Clang-OBJC.cmake
@@ -0,0 +1,39 @@
+include(Compiler/Clang)
+__compiler_clang(OBJC)
+
+if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+    AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
+    AND CMAKE_DEPFILE_FLAGS_OBJC)
+  # dependencies are computed by the compiler itself
+  set(CMAKE_OBJC_DEPFILE_FORMAT gcc)
+  set(CMAKE_OBJC_DEPENDS_USE_COMPILER TRUE)
+endif()
+
+
+if(NOT CMAKE_OBJC_COMPILER_VERSION VERSION_LESS 3.4)
+  set(CMAKE_OBJC90_STANDARD_COMPILE_OPTION "-std=c90")
+  set(CMAKE_OBJC90_EXTENSION_COMPILE_OPTION "-std=gnu90")
+  set(CMAKE_OBJC90_STANDARD__HAS_FULL_SUPPORT ON)
+
+  set(CMAKE_OBJC99_STANDARD_COMPILE_OPTION "-std=c99")
+  set(CMAKE_OBJC99_EXTENSION_COMPILE_OPTION "-std=gnu99")
+  set(CMAKE_OBJC99_STANDARD__HAS_FULL_SUPPORT ON)
+
+  set(CMAKE_OBJC11_STANDARD_COMPILE_OPTION "-std=c11")
+  set(CMAKE_OBJC11_EXTENSION_COMPILE_OPTION "-std=gnu11")
+  set(CMAKE_OBJC11_STANDARD__HAS_FULL_SUPPORT ON)
+endif()
+
+if(NOT CMAKE_OBJC_COMPILER_VERSION VERSION_LESS 6.0)
+  set(CMAKE_OBJC17_STANDARD_COMPILE_OPTION "-std=c17")
+  set(CMAKE_OBJC17_EXTENSION_COMPILE_OPTION "-std=gnu17")
+  set(CMAKE_OBJC17_STANDARD__HAS_FULL_SUPPORT ON)
+endif()
+
+if(NOT CMAKE_OBJC_COMPILER_VERSION VERSION_LESS 9.0)
+  set(CMAKE_OBJC23_STANDARD_COMPILE_OPTION "-std=c2x")
+  set(CMAKE_OBJC23_EXTENSION_COMPILE_OPTION "-std=gnu2x")
+  set(CMAKE_OBJC23_STANDARD__HAS_FULL_SUPPORT ON)
+endif()
+
+__compiler_check_default_language_standard(OBJC 3.4 99 3.6 11)
diff --git a/share/cmake-3.22/Modules/Compiler/Clang-OBJCXX.cmake b/share/cmake-3.22/Modules/Compiler/Clang-OBJCXX.cmake
new file mode 100644
index 0000000..9bdff66
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/Clang-OBJCXX.cmake
@@ -0,0 +1,11 @@
+include(Compiler/Clang)
+__compiler_clang(OBJCXX)
+__compiler_clang_cxx_standards(OBJCXX)
+
+if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+    AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
+    AND CMAKE_DEPFILE_FLAGS_OBJCXX)
+  # dependencies are computed by the compiler itself
+  set(CMAKE_OBJCXX_DEPFILE_FORMAT gcc)
+  set(CMAKE_OBJCXX_DEPENDS_USE_COMPILER TRUE)
+endif()
diff --git a/share/cmake-3.22/Modules/Compiler/Clang.cmake b/share/cmake-3.22/Modules/Compiler/Clang.cmake
new file mode 100644
index 0000000..f885eb0
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/Clang.cmake
@@ -0,0 +1,256 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# This module is shared by multiple languages; use include blocker.
+if(__COMPILER_CLANG)
+  return()
+endif()
+set(__COMPILER_CLANG 1)
+
+include(Compiler/CMakeCommonCompilerMacros)
+
+set(__pch_header_C "c-header")
+set(__pch_header_CXX "c++-header")
+set(__pch_header_OBJC "objective-c-header")
+set(__pch_header_OBJCXX "objective-c++-header")
+
+if("x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC"
+    OR "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC"
+    OR "x${CMAKE_Fortran_SIMULATE_ID}" STREQUAL "xMSVC")
+  macro(__compiler_clang lang)
+  endmacro()
+else()
+  include(Compiler/GNU)
+
+  macro(__compiler_clang lang)
+    __compiler_gnu(${lang})
+    set(CMAKE_${lang}_COMPILE_OPTIONS_PIE "-fPIE")
+    # Link options for PIE are already set in 'Compiler/GNU.cmake'
+    # but clang may require alternate syntax on some platforms
+    if (APPLE)
+      set(CMAKE_${lang}_LINK_OPTIONS_PIE ${CMAKE_${lang}_COMPILE_OPTIONS_PIE} -Xlinker -pie)
+      set(CMAKE_${lang}_LINK_OPTIONS_NO_PIE -Xlinker -no_pie)
+    endif()
+    set(CMAKE_INCLUDE_SYSTEM_FLAG_${lang} "-isystem ")
+    set(CMAKE_${lang}_COMPILE_OPTIONS_VISIBILITY "-fvisibility=")
+    if(CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.4.0)
+      set(CMAKE_${lang}_COMPILE_OPTIONS_TARGET "-target ")
+      set(CMAKE_${lang}_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN "-gcc-toolchain ")
+    else()
+      set(CMAKE_${lang}_COMPILE_OPTIONS_TARGET "--target=")
+      set(CMAKE_${lang}_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN "--gcc-toolchain=")
+    endif()
+    set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Xlinker" " ")
+    set(CMAKE_${lang}_LINKER_WRAPPER_FLAG_SEP)
+
+    if(CMAKE_${lang}_COMPILER_TARGET)
+      if(CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.4.0)
+        list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "-target" "${CMAKE_${lang}_COMPILER_TARGET}")
+      else()
+        list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "--target=${CMAKE_${lang}_COMPILER_TARGET}")
+      endif()
+    endif()
+
+    set(_CMAKE_${lang}_IPO_SUPPORTED_BY_CMAKE YES)
+    set(_CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER YES)
+
+    string(COMPARE EQUAL "${CMAKE_${lang}_COMPILER_ID}" "AppleClang" __is_apple_clang)
+    string(COMPARE EQUAL "${CMAKE_${lang}_COMPILER_ID}" "FujitsuClang" __is_fujitsu_clang)
+
+    # '-flto=thin' available since Clang 3.9 and Xcode 8
+    # * http://clang.llvm.org/docs/ThinLTO.html#clang-llvm
+    # * https://trac.macports.org/wiki/XcodeVersionInfo
+    set(_CMAKE_LTO_THIN TRUE)
+    if(__is_apple_clang)
+      if(CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 8.0)
+        set(_CMAKE_LTO_THIN FALSE)
+      endif()
+    elseif(__is_fujitsu_clang)
+      set(_CMAKE_LTO_THIN FALSE)
+    else()
+      if(CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.9)
+        set(_CMAKE_LTO_THIN FALSE)
+      endif()
+    endif()
+
+    if(_CMAKE_LTO_THIN)
+      set(CMAKE_${lang}_COMPILE_OPTIONS_IPO "-flto=thin")
+    else()
+      set(CMAKE_${lang}_COMPILE_OPTIONS_IPO "-flto")
+    endif()
+
+    if(ANDROID AND NOT CMAKE_ANDROID_NDK_VERSION VERSION_GREATER_EQUAL "22")
+      # https://github.com/android-ndk/ndk/issues/242
+      set(CMAKE_${lang}_LINK_OPTIONS_IPO "-fuse-ld=gold")
+    endif()
+
+    if(ANDROID OR __is_apple_clang)
+      set(__ar "${CMAKE_AR}")
+      set(__ranlib "${CMAKE_RANLIB}")
+    else()
+      set(__ar "${CMAKE_${lang}_COMPILER_AR}")
+      set(__ranlib "${CMAKE_${lang}_COMPILER_RANLIB}")
+    endif()
+
+    set(CMAKE_${lang}_ARCHIVE_CREATE_IPO
+      "\"${__ar}\" cr <TARGET> <LINK_FLAGS> <OBJECTS>"
+    )
+
+    set(CMAKE_${lang}_ARCHIVE_APPEND_IPO
+      "\"${__ar}\" r <TARGET> <LINK_FLAGS> <OBJECTS>"
+    )
+
+    set(CMAKE_${lang}_ARCHIVE_FINISH_IPO
+      "\"${__ranlib}\" <TARGET>"
+    )
+
+    set(CMAKE_PCH_EXTENSION .pch)
+    if (NOT CMAKE_GENERATOR MATCHES "Xcode")
+      set(CMAKE_PCH_PROLOGUE "#pragma clang system_header")
+    endif()
+    if(CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 11.0.0 AND NOT __is_apple_clang)
+      set(CMAKE_${lang}_COMPILE_OPTIONS_INSTANTIATE_TEMPLATES_PCH -fpch-instantiate-templates)
+    endif()
+    set(CMAKE_${lang}_COMPILE_OPTIONS_USE_PCH -Xclang -include-pch -Xclang <PCH_FILE> -Xclang -include -Xclang <PCH_HEADER>)
+    set(CMAKE_${lang}_COMPILE_OPTIONS_CREATE_PCH -Xclang -emit-pch -Xclang -include -Xclang <PCH_HEADER> -x ${__pch_header_${lang}})
+  endmacro()
+endif()
+
+macro(__compiler_clang_cxx_standards lang)
+  if("x${CMAKE_${lang}_COMPILER_FRONTEND_VARIANT}" STREQUAL "xGNU")
+    if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 2.1)
+      set(CMAKE_${lang}98_STANDARD_COMPILE_OPTION "-std=c++98")
+      set(CMAKE_${lang}98_EXTENSION_COMPILE_OPTION "-std=gnu++98")
+    endif()
+
+    if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.1)
+      set(CMAKE_${lang}98_STANDARD__HAS_FULL_SUPPORT ON)
+      set(CMAKE_${lang}11_STANDARD_COMPILE_OPTION "-std=c++11")
+      set(CMAKE_${lang}11_EXTENSION_COMPILE_OPTION "-std=gnu++11")
+      set(CMAKE_${lang}11_STANDARD__HAS_FULL_SUPPORT ON)
+    elseif(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 2.1)
+      set(CMAKE_${lang}11_STANDARD_COMPILE_OPTION "-std=c++0x")
+      set(CMAKE_${lang}11_EXTENSION_COMPILE_OPTION "-std=gnu++0x")
+    endif()
+
+    if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.5)
+      set(CMAKE_${lang}14_STANDARD_COMPILE_OPTION "-std=c++14")
+      set(CMAKE_${lang}14_EXTENSION_COMPILE_OPTION "-std=gnu++14")
+      set(CMAKE_${lang}14_STANDARD__HAS_FULL_SUPPORT ON)
+    elseif(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.4)
+      set(CMAKE_${lang}14_STANDARD_COMPILE_OPTION "-std=c++1y")
+      set(CMAKE_${lang}14_EXTENSION_COMPILE_OPTION "-std=gnu++1y")
+      set(CMAKE_${lang}14_STANDARD__HAS_FULL_SUPPORT ON)
+    endif()
+
+    set(_clang_version_std17 5.0)
+    if(CMAKE_SYSTEM_NAME STREQUAL "Android")
+      set(_clang_version_std17 6.0)
+    endif()
+
+    if (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS "${_clang_version_std17}")
+      set(CMAKE_${lang}17_STANDARD_COMPILE_OPTION "-std=c++17")
+      set(CMAKE_${lang}17_EXTENSION_COMPILE_OPTION "-std=gnu++17")
+    elseif (NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.5)
+      set(CMAKE_${lang}17_STANDARD_COMPILE_OPTION "-std=c++1z")
+      set(CMAKE_${lang}17_EXTENSION_COMPILE_OPTION "-std=gnu++1z")
+    endif()
+
+    if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 11.0)
+      set(CMAKE_${lang}20_STANDARD_COMPILE_OPTION "-std=c++20")
+      set(CMAKE_${lang}20_EXTENSION_COMPILE_OPTION "-std=gnu++20")
+    elseif(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS "${_clang_version_std17}")
+      set(CMAKE_${lang}20_STANDARD_COMPILE_OPTION "-std=c++2a")
+      set(CMAKE_${lang}20_EXTENSION_COMPILE_OPTION "-std=gnu++2a")
+    endif()
+
+    unset(_clang_version_std17)
+
+    if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 12.0)
+      set(CMAKE_${lang}23_STANDARD_COMPILE_OPTION "-std=c++2b")
+      set(CMAKE_${lang}23_EXTENSION_COMPILE_OPTION "-std=gnu++2b")
+    endif()
+
+    if("x${CMAKE_${lang}_SIMULATE_ID}" STREQUAL "xMSVC")
+      # The MSVC standard library requires C++14, and MSVC itself has no
+      # notion of operating in a mode not aware of at least that standard.
+      set(CMAKE_${lang}98_STANDARD_COMPILE_OPTION "-std=c++14")
+      set(CMAKE_${lang}98_EXTENSION_COMPILE_OPTION "-std=gnu++14")
+      set(CMAKE_${lang}11_STANDARD_COMPILE_OPTION "-std=c++14")
+      set(CMAKE_${lang}11_EXTENSION_COMPILE_OPTION "-std=gnu++14")
+
+      # This clang++ is missing some features because of MSVC compatibility.
+      unset(CMAKE_${lang}11_STANDARD__HAS_FULL_SUPPORT)
+      unset(CMAKE_${lang}14_STANDARD__HAS_FULL_SUPPORT)
+    endif()
+
+    __compiler_check_default_language_standard(${lang} 2.1 98)
+  elseif(CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 3.9
+      AND CMAKE_${lang}_SIMULATE_VERSION VERSION_GREATER_EQUAL 19.0)
+    # This version of clang-cl and the MSVC version it simulates have
+    # support for -std: flags.
+    set(CMAKE_${lang}98_STANDARD_COMPILE_OPTION "")
+    set(CMAKE_${lang}98_EXTENSION_COMPILE_OPTION "")
+    set(CMAKE_${lang}98_STANDARD__HAS_FULL_SUPPORT ON)
+    set(CMAKE_${lang}11_STANDARD_COMPILE_OPTION "")
+    set(CMAKE_${lang}11_EXTENSION_COMPILE_OPTION "")
+    set(CMAKE_${lang}14_STANDARD_COMPILE_OPTION "-std:c++14")
+    set(CMAKE_${lang}14_EXTENSION_COMPILE_OPTION "-std:c++14")
+
+    if(CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 6.0)
+      set(CMAKE_${lang}17_STANDARD_COMPILE_OPTION "-std:c++17")
+      set(CMAKE_${lang}17_EXTENSION_COMPILE_OPTION "-std:c++17")
+    else()
+      set(CMAKE_${lang}17_STANDARD_COMPILE_OPTION "-std:c++latest")
+      set(CMAKE_${lang}17_EXTENSION_COMPILE_OPTION "-std:c++latest")
+    endif()
+
+    if(CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 13.0)
+      set(CMAKE_${lang}23_STANDARD_COMPILE_OPTION "-std:c++latest")
+      set(CMAKE_${lang}23_EXTENSION_COMPILE_OPTION "-std:c++latest")
+      set(CMAKE_${lang}20_STANDARD_COMPILE_OPTION "-std:c++20")
+      set(CMAKE_${lang}20_EXTENSION_COMPILE_OPTION "-std:c++20")
+    elseif(CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 6.0)
+      set(CMAKE_${lang}20_STANDARD_COMPILE_OPTION "-std:c++latest")
+      set(CMAKE_${lang}20_EXTENSION_COMPILE_OPTION "-std:c++latest")
+    endif()
+
+    __compiler_check_default_language_standard(${lang} 3.9 14)
+  else()
+    # This version of clang-cl, or the MSVC version it simulates, does not have
+    # language standards.  Set these options as empty strings so the feature
+    # test infrastructure can at least check to see if they are defined.
+    set(CMAKE_${lang}98_STANDARD_COMPILE_OPTION "")
+    set(CMAKE_${lang}98_EXTENSION_COMPILE_OPTION "")
+    set(CMAKE_${lang}11_STANDARD_COMPILE_OPTION "")
+    set(CMAKE_${lang}11_EXTENSION_COMPILE_OPTION "")
+    set(CMAKE_${lang}14_STANDARD_COMPILE_OPTION "")
+    set(CMAKE_${lang}14_EXTENSION_COMPILE_OPTION "")
+    set(CMAKE_${lang}17_STANDARD_COMPILE_OPTION "")
+    set(CMAKE_${lang}17_EXTENSION_COMPILE_OPTION "")
+    set(CMAKE_${lang}20_STANDARD_COMPILE_OPTION "")
+    set(CMAKE_${lang}20_EXTENSION_COMPILE_OPTION "")
+    set(CMAKE_${lang}23_STANDARD_COMPILE_OPTION "")
+    set(CMAKE_${lang}23_EXTENSION_COMPILE_OPTION "")
+
+    # There is no meaningful default for this
+    set(CMAKE_${lang}_STANDARD_DEFAULT "")
+
+    # There are no compiler modes so we only need to test features once.
+    # Override the default macro for this special case.  Pretend that
+    # all language standards are available so that at least compilation
+    # can be attempted.
+    macro(cmake_record_${lang}_compile_features)
+      list(APPEND CMAKE_${lang}_COMPILE_FEATURES
+        cxx_std_98
+        cxx_std_11
+        cxx_std_14
+        cxx_std_17
+        cxx_std_20
+        cxx_std_23
+        )
+      _record_compiler_features(${lang} "" CMAKE_${lang}_COMPILE_FEATURES)
+    endmacro()
+  endif()
+endmacro()
diff --git a/share/cmake-3.18/Modules/Compiler/Comeau-CXX-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/Comeau-CXX-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/Comeau-CXX-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/Comeau-CXX-DetermineCompiler.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/Compaq-C-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/Compaq-C-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/Compaq-C-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/Compaq-C-DetermineCompiler.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/Cray-C.cmake b/share/cmake-3.22/Modules/Compiler/Cray-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/Cray-C.cmake
rename to share/cmake-3.22/Modules/Compiler/Cray-C.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/Cray-CXX.cmake b/share/cmake-3.22/Modules/Compiler/Cray-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/Cray-CXX.cmake
rename to share/cmake-3.22/Modules/Compiler/Cray-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/Cray-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/Cray-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/Cray-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/Cray-DetermineCompiler.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/Cray-Fortran.cmake b/share/cmake-3.22/Modules/Compiler/Cray-Fortran.cmake
new file mode 100644
index 0000000..0d5e1c7
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/Cray-Fortran.cmake
@@ -0,0 +1,25 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+include(Compiler/Cray)
+__compiler_cray(Fortran)
+
+set(CMAKE_Fortran_SUBMODULE_SEP "")
+set(CMAKE_Fortran_SUBMODULE_EXT ".mod")
+set(CMAKE_Fortran_MODOUT_FLAG -em)
+set(CMAKE_Fortran_MODDIR_FLAG -J)
+set(CMAKE_Fortran_MODDIR_DEFAULT .)
+set(CMAKE_Fortran_FORMAT_FIXED_FLAG "-f fixed")
+set(CMAKE_Fortran_FORMAT_FREE_FLAG "-f free")
+
+if (NOT CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 8.5)
+  set(CMAKE_Fortran_COMPILE_OPTIONS_PREPROCESS_ON "-eT")
+  set(CMAKE_Fortran_COMPILE_OPTIONS_PREPROCESS_OFF "-dT")
+else()
+  set(CMAKE_Fortran_COMPILE_OPTIONS_PREPROCESS_ON "-eZ")
+  set(CMAKE_Fortran_COMPILE_OPTIONS_PREPROCESS_OFF "-dZ")
+endif()
+
+if (NOT CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 11.0)
+  set(CMAKE_Fortran_PREPROCESS_SOURCE "<CMAKE_Fortran_COMPILER> -o <PREPROCESSED_SOURCE> <DEFINES> <INCLUDES> <FLAGS> -eP <SOURCE>")
+endif()
diff --git a/share/cmake-3.18/Modules/Compiler/Cray.cmake b/share/cmake-3.22/Modules/Compiler/Cray.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/Cray.cmake
rename to share/cmake-3.22/Modules/Compiler/Cray.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/CrayPrgEnv-C.cmake b/share/cmake-3.22/Modules/Compiler/CrayPrgEnv-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/CrayPrgEnv-C.cmake
rename to share/cmake-3.22/Modules/Compiler/CrayPrgEnv-C.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/CrayPrgEnv-CXX.cmake b/share/cmake-3.22/Modules/Compiler/CrayPrgEnv-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/CrayPrgEnv-CXX.cmake
rename to share/cmake-3.22/Modules/Compiler/CrayPrgEnv-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/CrayPrgEnv-Fortran.cmake b/share/cmake-3.22/Modules/Compiler/CrayPrgEnv-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/CrayPrgEnv-Fortran.cmake
rename to share/cmake-3.22/Modules/Compiler/CrayPrgEnv-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/CrayPrgEnv.cmake b/share/cmake-3.22/Modules/Compiler/CrayPrgEnv.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/CrayPrgEnv.cmake
rename to share/cmake-3.22/Modules/Compiler/CrayPrgEnv.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/Embarcadero-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/Embarcadero-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/Embarcadero-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/Embarcadero-DetermineCompiler.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/Flang-FindBinUtils.cmake b/share/cmake-3.22/Modules/Compiler/Flang-FindBinUtils.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/Flang-FindBinUtils.cmake
rename to share/cmake-3.22/Modules/Compiler/Flang-FindBinUtils.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/Flang-Fortran.cmake b/share/cmake-3.22/Modules/Compiler/Flang-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/Flang-Fortran.cmake
rename to share/cmake-3.22/Modules/Compiler/Flang-Fortran.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/Fujitsu-C.cmake b/share/cmake-3.22/Modules/Compiler/Fujitsu-C.cmake
new file mode 100644
index 0000000..dd31e43
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/Fujitsu-C.cmake
@@ -0,0 +1,20 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+include(Compiler/Fujitsu)
+__compiler_fujitsu(C)
+
+if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 4)
+  set(CMAKE_C90_STANDARD_COMPILE_OPTION  -std=c89)
+  set(CMAKE_C90_EXTENSION_COMPILE_OPTION -std=gnu89)
+  set(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT ON)
+
+  set(CMAKE_C99_STANDARD_COMPILE_OPTION  -std=c99)
+  set(CMAKE_C99_EXTENSION_COMPILE_OPTION -std=gnu99)
+  set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
+
+  set(CMAKE_C11_STANDARD_COMPILE_OPTION  -std=c11)
+  set(CMAKE_C11_EXTENSION_COMPILE_OPTION -std=gnu11)
+  set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
+endif()
+
+__compiler_check_default_language_standard(C 4 11)
diff --git a/share/cmake-3.22/Modules/Compiler/Fujitsu-CXX.cmake b/share/cmake-3.22/Modules/Compiler/Fujitsu-CXX.cmake
new file mode 100644
index 0000000..0f42196
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/Fujitsu-CXX.cmake
@@ -0,0 +1,47 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+include(Compiler/Fujitsu)
+__compiler_fujitsu(CXX)
+
+#set(CMAKE_PCH_EXTENSION .pch)
+#set(CMAKE_PCH_EPILOGUE "#pragma hdrstop")
+#set(CMAKE_CXX_COMPILE_OPTIONS_USE_PCH --no_pch_messages -include <PCH_HEADER> --use_pch <PCH_FILE>)
+#set(CMAKE_CXX_COMPILE_OPTIONS_CREATE_PCH --no_pch_messages -include <PCH_HEADER> --create_pch <PCH_FILE>)
+
+# The Fujitsu compiler offers both a 98 and 03 mode.  These two are
+# essentially interchangeable as 03 simply provides clarity to some 98
+# ambiguyity.
+#
+# Re: Stroustrup's C++ FAQ:
+#   What is the difference between C++98 and C++03?
+#     From a programmer's view there is none. The C++03 revision of the
+#     standard was a bug fix release for implementers to ensure greater
+#     consistency and portability. In particular, tutorial and reference
+#     material describing C++98 and C++03 can be used interchangeably by all
+#     except compiler writers and standards gurus.
+#
+# Since CMake doesn't actually have an 03 mode and they're effectively
+# interchangeable then we're just going to explicitly use 03 mode in the
+# compiler when 98 is requested.
+
+# The version matching is messy here.  The std support seems to be related to
+# the compiler tweak version derived from the patch id in the version string.
+
+if(CMAKE_CXX_COMPILER_VERSION GREATER_EQUAL 4)
+  set(CMAKE_CXX98_STANDARD_COMPILE_OPTION  -std=c++03)
+  set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION -std=gnu++03)
+  set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
+
+  set(CMAKE_CXX11_STANDARD_COMPILE_OPTION  -std=c++11)
+  set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION -std=gnu++11)
+  set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
+
+  set(CMAKE_CXX14_STANDARD_COMPILE_OPTION  -std=c++14)
+  set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION -std=gnu++14)
+  set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
+
+  set(CMAKE_CXX17_STANDARD_COMPILE_OPTION  -std=c++17)
+  set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION -std=gnu++17)
+endif()
+
+__compiler_check_default_language_standard(CXX 4 14)
diff --git a/share/cmake-3.22/Modules/Compiler/Fujitsu-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/Fujitsu-DetermineCompiler.cmake
new file mode 100644
index 0000000..8534916
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/Fujitsu-DetermineCompiler.cmake
@@ -0,0 +1,17 @@
+
+set(_compiler_id_pp_test "defined(__FUJITSU)")
+
+set(_compiler_id_version_compute "
+# if defined(__FCC_version__)
+#   define @PREFIX@COMPILER_VERSION __FCC_version__
+# elif defined(__FCC_major__)
+#   define @PREFIX@COMPILER_VERSION_MAJOR @MACRO_DEC@(__FCC_major__)
+#   define @PREFIX@COMPILER_VERSION_MINOR @MACRO_DEC@(__FCC_minor__)
+#   define @PREFIX@COMPILER_VERSION_PATCH @MACRO_DEC@(__FCC_patchlevel__)
+# endif
+# if defined(__fcc_version)
+#   define @PREFIX@COMPILER_VERSION_INTERNAL @MACRO_DEC@(__fcc_version)
+# elif defined(__FCC_VERSION)
+#   define @PREFIX@COMPILER_VERSION_INTERNAL @MACRO_DEC@(__FCC_VERSION)
+# endif
+")
diff --git a/share/cmake-3.22/Modules/Compiler/Fujitsu-Fortran.cmake b/share/cmake-3.22/Modules/Compiler/Fujitsu-Fortran.cmake
new file mode 100644
index 0000000..face2d6
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/Fujitsu-Fortran.cmake
@@ -0,0 +1,16 @@
+include(Compiler/Fujitsu)
+__compiler_fujitsu(Fortran)
+
+set(CMAKE_Fortran_SUBMODULE_SEP ".")
+set(CMAKE_Fortran_SUBMODULE_EXT ".smod")
+
+set(CMAKE_Fortran_PREPROCESS_SOURCE
+  "<CMAKE_Fortran_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -Cpp -P <SOURCE> -o <PREPROCESSED_SOURCE>")
+set(CMAKE_Fortran_COMPILE_OPTIONS_PREPROCESS_ON "-Cpp")
+
+set(CMAKE_Fortran_FORMAT_FIXED_FLAG "-Fixed")
+set(CMAKE_Fortran_FORMAT_FREE_FLAG "-Free")
+
+string(APPEND CMAKE_Fortran_FLAGS_DEBUG_INIT "")
+
+set(CMAKE_Fortran_MODDIR_FLAG "-M ")
diff --git a/share/cmake-3.22/Modules/Compiler/Fujitsu.cmake b/share/cmake-3.22/Modules/Compiler/Fujitsu.cmake
new file mode 100644
index 0000000..78495cb
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/Fujitsu.cmake
@@ -0,0 +1,43 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+# This module is shared by multiple languages; use include blocker.
+if(__COMPILER_FUJITSU)
+  return()
+endif()
+set(__COMPILER_FUJITSU 1)
+
+include(Compiler/CMakeCommonCompilerMacros)
+
+macro(__compiler_fujitsu lang)
+  set(CMAKE_${lang}_VERBOSE_FLAG "-###")
+
+  # Initial configuration flags
+  string(APPEND CMAKE_${lang}_FLAGS_INIT " ")
+  string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -g -O0")
+  string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -O3 -DNDEBUG")
+  string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -O2 -g -DNDEBUG")
+
+  # PIC flags
+  set(CMAKE_${lang}_COMPILE_OPTIONS_PIC "-fPIC")
+  set(CMAKE_${lang}_COMPILE_OPTIONS_PIE "-fPIE")
+
+  # Passing link options to the compiler
+  set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Wl,")
+  set(CMAKE_${lang}_LINKER_WRAPPER_FLAG_SEP ",")
+
+  # IPO flag
+  set(_CMAKE_${lang}_IPO_SUPPORTED_BY_CMAKE YES)
+  if ("${lang}" STREQUAL "Fortran")
+    # Supported by Fortran compiler only
+    set(_CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER YES)
+    set(CMAKE_${lang}_COMPILE_OPTIONS_IPO "-Klto")
+  else()
+    set(_CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER NO)
+  endif()
+
+  # How to actually call the compiler
+  set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE
+  "<CMAKE_${lang}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E $<$<COMPILE_LANGUAGE:Fortran>:-Cpp> <SOURCE> > <PREPROCESSED_SOURCE>")
+  set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE "<CMAKE_${lang}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>")
+endmacro()
diff --git a/share/cmake-3.22/Modules/Compiler/FujitsuClang-C.cmake b/share/cmake-3.22/Modules/Compiler/FujitsuClang-C.cmake
new file mode 100644
index 0000000..f700d2d
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/FujitsuClang-C.cmake
@@ -0,0 +1,6 @@
+include(Compiler/FujitsuClang)
+
+set(_fjclang_ver "${CMAKE_C_COMPILER_VERSION_INTERNAL}")
+set(CMAKE_C_COMPILER_VERSION "${CMAKE_C_COMPILER_VERSION_INTERNAL}")
+include(Compiler/Clang-C)
+set(CMAKE_C_COMPILER_VERSION "${_fjclang_ver}")
diff --git a/share/cmake-3.22/Modules/Compiler/FujitsuClang-CXX.cmake b/share/cmake-3.22/Modules/Compiler/FujitsuClang-CXX.cmake
new file mode 100644
index 0000000..c8790cd
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/FujitsuClang-CXX.cmake
@@ -0,0 +1,6 @@
+include(Compiler/FujitsuClang)
+
+set(_fjclang_ver "${CMAKE_CXX_COMPILER_VERSION_INTERNAL}")
+set(CMAKE_CXX_COMPILER_VERSION "${CMAKE_CXX_COMPILER_VERSION_INTERNAL}")
+include(Compiler/Clang-CXX)
+set(CMAKE_CXX_COMPILER_VERSION "${_fjclang_ver}")
diff --git a/share/cmake-3.22/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake
new file mode 100644
index 0000000..f6719b1
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake
@@ -0,0 +1,9 @@
+
+set(_compiler_id_pp_test "defined(__CLANG_FUJITSU)")
+
+set(_compiler_id_version_compute "
+# define @PREFIX@COMPILER_VERSION_MAJOR @MACRO_DEC@(__FCC_major__)
+# define @PREFIX@COMPILER_VERSION_MINOR @MACRO_DEC@(__FCC_minor__)
+# define @PREFIX@COMPILER_VERSION_PATCH @MACRO_DEC@(__FCC_patchlevel__)
+# define @PREFIX@COMPILER_VERSION_INTERNAL_STR __clang_version__
+")
diff --git a/share/cmake-3.22/Modules/Compiler/FujitsuClang-FindBinUtils.cmake b/share/cmake-3.22/Modules/Compiler/FujitsuClang-FindBinUtils.cmake
new file mode 100644
index 0000000..4a6401d
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/FujitsuClang-FindBinUtils.cmake
@@ -0,0 +1,6 @@
+if(NOT DEFINED _CMAKE_PROCESSING_LANGUAGE OR _CMAKE_PROCESSING_LANGUAGE STREQUAL "")
+  message(FATAL_ERROR "Internal error: _CMAKE_PROCESSING_LANGUAGE is not set")
+endif()
+
+set(CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_AR ar)
+set(CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_RANLIB ranlib)
diff --git a/share/cmake-3.22/Modules/Compiler/FujitsuClang.cmake b/share/cmake-3.22/Modules/Compiler/FujitsuClang.cmake
new file mode 100644
index 0000000..a848248
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/FujitsuClang.cmake
@@ -0,0 +1,11 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# This module is shared by multiple languages; use include blocker.
+if(__COMPILER_FUJITSUCLANG)
+  return()
+endif()
+set(__COMPILER_FUJITSUCLANG 1)
+
+include(Compiler/Clang)
diff --git a/share/cmake-3.18/Modules/Compiler/G95-Fortran.cmake b/share/cmake-3.22/Modules/Compiler/G95-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/G95-Fortran.cmake
rename to share/cmake-3.22/Modules/Compiler/G95-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/GHS-C.cmake b/share/cmake-3.22/Modules/Compiler/GHS-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/GHS-C.cmake
rename to share/cmake-3.22/Modules/Compiler/GHS-C.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/GHS-CXX.cmake b/share/cmake-3.22/Modules/Compiler/GHS-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/GHS-CXX.cmake
rename to share/cmake-3.22/Modules/Compiler/GHS-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/GHS-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/GHS-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/GHS-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/GHS-DetermineCompiler.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/GHS.cmake b/share/cmake-3.22/Modules/Compiler/GHS.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/GHS.cmake
rename to share/cmake-3.22/Modules/Compiler/GHS.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/GNU-ASM.cmake b/share/cmake-3.22/Modules/Compiler/GNU-ASM.cmake
new file mode 100644
index 0000000..a935416
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/GNU-ASM.cmake
@@ -0,0 +1,13 @@
+# This file is loaded when gcc/g++ is used for assembler files (the "ASM" cmake language)
+include(Compiler/GNU)
+
+set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s;S;asm)
+
+__compiler_gnu(ASM)
+
+if(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_MATCH STREQUAL "GNU assembler")
+  set(CMAKE_DEPFILE_FLAGS_ASM${ASM_DIALECT} "--MD <DEP_FILE>")
+  set(CMAKE_ASM${ASM_DIALECT}_LINK_EXECUTABLE
+    "<CMAKE_LINKER> <FLAGS> <CMAKE_ASM${ASM_DIALECT}_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
+  set(CMAKE_ASM_DEFINE_FLAG "--defsym ")
+endif()
diff --git a/share/cmake-3.18/Modules/Compiler/GNU-C-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/GNU-C-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/GNU-C-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/GNU-C-DetermineCompiler.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/GNU-C-FeatureTests.cmake b/share/cmake-3.22/Modules/Compiler/GNU-C-FeatureTests.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/GNU-C-FeatureTests.cmake
rename to share/cmake-3.22/Modules/Compiler/GNU-C-FeatureTests.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/GNU-C.cmake b/share/cmake-3.22/Modules/Compiler/GNU-C.cmake
new file mode 100644
index 0000000..03e8d2b
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/GNU-C.cmake
@@ -0,0 +1,49 @@
+include(Compiler/GNU)
+__compiler_gnu(C)
+
+
+if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+    AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
+    AND CMAKE_DEPFILE_FLAGS_C)
+  # dependencies are computed by the compiler itself
+  set(CMAKE_C_DEPFILE_FORMAT gcc)
+  set(CMAKE_C_DEPENDS_USE_COMPILER TRUE)
+endif()
+
+set(CMAKE_C_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -x c)
+
+if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.5)
+  set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c90")
+  set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=gnu90")
+elseif (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.4)
+  set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c89")
+  set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=gnu89")
+endif()
+
+if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.4)
+  set(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT ON)
+  set(CMAKE_C99_STANDARD_COMPILE_OPTION "-std=c99")
+  set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-std=gnu99")
+  set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
+endif()
+
+if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.7)
+  set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
+  set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
+  set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
+elseif (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.6)
+  set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c1x")
+  set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu1x")
+endif()
+
+if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 8.1)
+  set(CMAKE_C17_STANDARD_COMPILE_OPTION "-std=c17")
+  set(CMAKE_C17_EXTENSION_COMPILE_OPTION "-std=gnu17")
+endif()
+
+if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 9.1)
+  set(CMAKE_C23_STANDARD_COMPILE_OPTION "-std=c2x")
+  set(CMAKE_C23_EXTENSION_COMPILE_OPTION "-std=gnu2x")
+endif()
+
+__compiler_check_default_language_standard(C 3.4 90 5.0 11 8.1 17)
diff --git a/share/cmake-3.18/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/GNU-CXX-FeatureTests.cmake b/share/cmake-3.22/Modules/Compiler/GNU-CXX-FeatureTests.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/GNU-CXX-FeatureTests.cmake
rename to share/cmake-3.22/Modules/Compiler/GNU-CXX-FeatureTests.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/GNU-CXX.cmake b/share/cmake-3.22/Modules/Compiler/GNU-CXX.cmake
new file mode 100644
index 0000000..b35f254
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/GNU-CXX.cmake
@@ -0,0 +1,74 @@
+include(Compiler/GNU)
+__compiler_gnu(CXX)
+
+
+if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+    AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
+    AND CMAKE_DEPFILE_FLAGS_CXX)
+  # dependencies are computed by the compiler itself
+  set(CMAKE_CXX_DEPFILE_FORMAT gcc)
+  set(CMAKE_CXX_DEPENDS_USE_COMPILER TRUE)
+endif()
+
+set(CMAKE_CXX_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -x c++)
+
+if (WIN32)
+  if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.6)
+    set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fno-keep-inline-dllexport")
+  endif()
+else()
+  if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.0)
+    set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden")
+  endif()
+endif()
+
+if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.4)
+  set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "-std=c++98")
+  set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "-std=gnu++98")
+endif()
+
+if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.7)
+  set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
+  set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++11")
+  set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++11")
+elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.4)
+  # 4.3 supports 0x variants
+  set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++0x")
+  set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++0x")
+endif()
+
+if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8.1)
+  set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
+endif()
+
+if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9)
+  set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++14")
+  set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++14")
+elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
+  set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++1y")
+  set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++1y")
+endif()
+
+if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0)
+  set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
+endif()
+
+if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0)
+  set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++17")
+  set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++17")
+elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.1)
+  set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++1z")
+  set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++1z")
+endif()
+
+if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 11.1)
+  set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std=c++20")
+  set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std=gnu++20")
+  set(CMAKE_CXX23_STANDARD_COMPILE_OPTION "-std=c++23")
+  set(CMAKE_CXX23_EXTENSION_COMPILE_OPTION "-std=gnu++23")
+elseif(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0)
+  set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std=c++2a")
+  set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std=gnu++2a")
+endif()
+
+__compiler_check_default_language_standard(CXX 3.4 98 6.0 14 11.1 17)
diff --git a/share/cmake-3.22/Modules/Compiler/GNU-FindBinUtils.cmake b/share/cmake-3.22/Modules/Compiler/GNU-FindBinUtils.cmake
new file mode 100644
index 0000000..4dcdd53
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/GNU-FindBinUtils.cmake
@@ -0,0 +1,37 @@
+if(NOT DEFINED _CMAKE_PROCESSING_LANGUAGE OR _CMAKE_PROCESSING_LANGUAGE STREQUAL "")
+  message(FATAL_ERROR "Internal error: _CMAKE_PROCESSING_LANGUAGE is not set")
+endif()
+
+# Ubuntu 16.04:
+# * /usr/bin/gcc-ar-5
+# * /usr/bin/gcc-ranlib-5
+string(REGEX MATCH "^([0-9]+)" __version_x
+    "${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_VERSION}")
+
+string(REGEX MATCH "^([0-9]+\\.[0-9]+)" __version_x_y
+    "${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_VERSION}")
+
+# Try to find tools in the same directory as GCC itself
+get_filename_component(__gcc_hints "${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER}" DIRECTORY)
+
+# http://manpages.ubuntu.com/manpages/wily/en/man1/gcc-ar.1.html
+find_program(CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_AR NAMES
+    "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ar-${__version_x_y}"
+    "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ar-${__version_x}"
+    "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ar${_CMAKE_COMPILER_SUFFIX}"
+    HINTS ${__gcc_hints}
+    NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH
+    DOC "A wrapper around 'ar' adding the appropriate '--plugin' option for the GCC compiler"
+)
+mark_as_advanced(CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_AR)
+
+# http://manpages.ubuntu.com/manpages/wily/en/man1/gcc-ranlib.1.html
+find_program(CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_RANLIB NAMES
+    "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ranlib-${__version_x_y}"
+    "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ranlib-${__version_x}"
+    "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ranlib${_CMAKE_COMPILER_SUFFIX}"
+    HINTS ${__gcc_hints}
+    NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH
+    DOC "A wrapper around 'ranlib' adding the appropriate '--plugin' option for the GCC compiler"
+)
+mark_as_advanced(CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_RANLIB)
diff --git a/share/cmake-3.18/Modules/Compiler/GNU-Fortran.cmake b/share/cmake-3.22/Modules/Compiler/GNU-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/GNU-Fortran.cmake
rename to share/cmake-3.22/Modules/Compiler/GNU-Fortran.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/GNU-OBJC.cmake b/share/cmake-3.22/Modules/Compiler/GNU-OBJC.cmake
new file mode 100644
index 0000000..7eeed83
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/GNU-OBJC.cmake
@@ -0,0 +1,11 @@
+include(Compiler/GNU)
+__compiler_gnu(OBJC)
+
+
+if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+    AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
+    AND CMAKE_DEPFILE_FLAGS_OBJC)
+  # dependencies are computed by the compiler itself
+  set(CMAKE_OBJC_DEPFILE_FORMAT gcc)
+  set(CMAKE_OBJC_DEPENDS_USE_COMPILER TRUE)
+endif()
diff --git a/share/cmake-3.22/Modules/Compiler/GNU-OBJCXX.cmake b/share/cmake-3.22/Modules/Compiler/GNU-OBJCXX.cmake
new file mode 100644
index 0000000..1047b5d
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/GNU-OBJCXX.cmake
@@ -0,0 +1,19 @@
+include(Compiler/GNU)
+__compiler_gnu(OBJCXX)
+
+if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+    AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
+    AND CMAKE_DEPFILE_FLAGS_OBJCXX)
+  # dependencies are computed by the compiler itself
+  set(CMAKE_OBJCXX_DEPFILE_FORMAT gcc)
+  set(CMAKE_OBJCXX_DEPENDS_USE_COMPILER TRUE)
+endif()
+
+
+if(NOT CMAKE_OBJCXX_COMPILER_VERSION VERSION_LESS 4.2)
+  set(CMAKE_OBJCXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden")
+endif()
+
+if(NOT CMAKE_OBJCXX_LINK_FLAGS)
+  set(CMAKE_OBCXX_LINK_FLAGS "-lstdc++")
+endif()
diff --git a/share/cmake-3.22/Modules/Compiler/GNU.cmake b/share/cmake-3.22/Modules/Compiler/GNU.cmake
new file mode 100644
index 0000000..928e726
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/GNU.cmake
@@ -0,0 +1,122 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# This module is shared by multiple languages; use include blocker.
+if(__COMPILER_GNU)
+  return()
+endif()
+set(__COMPILER_GNU 1)
+
+include(Compiler/CMakeCommonCompilerMacros)
+
+set(__pch_header_C "c-header")
+set(__pch_header_CXX "c++-header")
+set(__pch_header_OBJC "objective-c-header")
+set(__pch_header_OBJCXX "objective-c++-header")
+
+macro(__compiler_gnu lang)
+  # Feature flags.
+  set(CMAKE_${lang}_VERBOSE_FLAG "-v")
+  set(CMAKE_${lang}_COMPILE_OPTIONS_PIC "-fPIC")
+  set (_CMAKE_${lang}_PIE_MAY_BE_SUPPORTED_BY_LINKER NO)
+  if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.4)
+    set(CMAKE_${lang}_COMPILE_OPTIONS_PIE "-fPIE")
+    # Support of PIE at link stage depends on various elements : platform, compiler, linker
+    # so to activate it, module CheckPIESupported must be used.
+    set (_CMAKE_${lang}_PIE_MAY_BE_SUPPORTED_BY_LINKER YES)
+    set(CMAKE_${lang}_LINK_OPTIONS_PIE ${CMAKE_${lang}_COMPILE_OPTIONS_PIE} "-pie")
+    set(CMAKE_${lang}_LINK_OPTIONS_NO_PIE "-no-pie")
+  endif()
+  if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4.0)
+    set(CMAKE_${lang}_COMPILE_OPTIONS_VISIBILITY "-fvisibility=")
+  endif()
+  set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "-fPIC")
+  set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-shared")
+  set(CMAKE_${lang}_COMPILE_OPTIONS_SYSROOT "--sysroot=")
+
+  set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Wl,")
+  set(CMAKE_${lang}_LINKER_WRAPPER_FLAG_SEP ",")
+
+  # Older versions of gcc (< 4.5) contain a bug causing them to report a missing
+  # header file as a warning if depfiles are enabled, causing check_header_file
+  # tests to always succeed.  Work around this by disabling dependency tracking
+  # in try_compile mode.
+  get_property(_IN_TC GLOBAL PROPERTY IN_TRY_COMPILE)
+  if(CMAKE_${lang}_COMPILER_ID STREQUAL "GNU" AND _IN_TC AND NOT CMAKE_FORCE_DEPFILES)
+  else()
+    # distcc does not transform -o to -MT when invoking the preprocessor
+    # internally, as it ought to.  Work around this bug by setting -MT here
+    # even though it isn't strictly necessary.
+    set(CMAKE_DEPFILE_FLAGS_${lang} "-MD -MT <DEP_TARGET> -MF <DEP_FILE>")
+  endif()
+
+  # Initial configuration flags.
+  string(APPEND CMAKE_${lang}_FLAGS_INIT " ")
+  string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -g")
+  string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -Os -DNDEBUG")
+  string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -O3 -DNDEBUG")
+  string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -O2 -g -DNDEBUG")
+  set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE "<CMAKE_${lang}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
+  set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE "<CMAKE_${lang}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>")
+  if(NOT APPLE OR NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4) # work around #4462
+    set(CMAKE_INCLUDE_SYSTEM_FLAG_${lang} "-isystem ")
+  endif()
+
+  set(_CMAKE_${lang}_IPO_SUPPORTED_BY_CMAKE YES)
+  set(_CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER NO)
+
+  # '-flto' introduced since GCC 4.5:
+  # * https://gcc.gnu.org/onlinedocs/gcc-4.4.7/gcc/Option-Summary.html (no)
+  # * https://gcc.gnu.org/onlinedocs/gcc-4.5.4/gcc/Option-Summary.html (yes)
+  if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4.5)
+    set(_CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER YES)
+    set(__lto_flags -flto)
+
+    if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4.7)
+      # '-ffat-lto-objects' introduced since GCC 4.7:
+      # * https://gcc.gnu.org/onlinedocs/gcc-4.6.4/gcc/Option-Summary.html (no)
+      # * https://gcc.gnu.org/onlinedocs/gcc-4.7.4/gcc/Option-Summary.html (yes)
+      list(APPEND __lto_flags -fno-fat-lto-objects)
+    endif()
+
+    set(CMAKE_${lang}_COMPILE_OPTIONS_IPO ${__lto_flags})
+
+    # Need to use version of 'ar'/'ranlib' with plugin support.
+    # Quote from [documentation][1]:
+    #
+    #   To create static libraries suitable for LTO,
+    #   use gcc-ar and gcc-ranlib instead of ar and ranlib
+    #
+    # [1]: https://gcc.gnu.org/onlinedocs/gcc-4.9.4/gcc/Optimize-Options.html
+    set(CMAKE_${lang}_ARCHIVE_CREATE_IPO
+      "\"${CMAKE_${lang}_COMPILER_AR}\" cr <TARGET> <LINK_FLAGS> <OBJECTS>"
+    )
+
+    set(CMAKE_${lang}_ARCHIVE_APPEND_IPO
+      "\"${CMAKE_${lang}_COMPILER_AR}\" r <TARGET> <LINK_FLAGS> <OBJECTS>"
+    )
+
+    set(CMAKE_${lang}_ARCHIVE_FINISH_IPO
+      "\"${CMAKE_${lang}_COMPILER_RANLIB}\" <TARGET>"
+    )
+  endif()
+
+  set(CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "${CMAKE_${lang}_COMPILER}")
+  if(CMAKE_${lang}_COMPILER_ARG1)
+    separate_arguments(_COMPILER_ARGS NATIVE_COMMAND "${CMAKE_${lang}_COMPILER_ARG1}")
+    list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND ${_COMPILER_ARGS})
+    unset(_COMPILER_ARGS)
+  endif()
+  list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "-dM" "-E" "-c" "${CMAKE_ROOT}/Modules/CMakeCXXCompilerABI.cpp")
+
+  if(NOT "x${lang}" STREQUAL "xFortran")
+    set(CMAKE_PCH_EXTENSION .gch)
+    if (NOT CMAKE_GENERATOR MATCHES "Xcode")
+      set(CMAKE_PCH_PROLOGUE "#pragma GCC system_header")
+    endif()
+    set(CMAKE_${lang}_COMPILE_OPTIONS_INVALID_PCH -Winvalid-pch)
+    set(CMAKE_${lang}_COMPILE_OPTIONS_USE_PCH -include <PCH_HEADER>)
+    set(CMAKE_${lang}_COMPILE_OPTIONS_CREATE_PCH -x ${__pch_header_${lang}} -include <PCH_HEADER>)
+  endif()
+endmacro()
diff --git a/share/cmake-3.18/Modules/Compiler/HP-ASM.cmake b/share/cmake-3.22/Modules/Compiler/HP-ASM.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/HP-ASM.cmake
rename to share/cmake-3.22/Modules/Compiler/HP-ASM.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/HP-C-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/HP-C-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/HP-C-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/HP-C-DetermineCompiler.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/HP-C.cmake b/share/cmake-3.22/Modules/Compiler/HP-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/HP-C.cmake
rename to share/cmake-3.22/Modules/Compiler/HP-C.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/HP-CXX-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/HP-CXX-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/HP-CXX-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/HP-CXX-DetermineCompiler.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/HP-CXX.cmake b/share/cmake-3.22/Modules/Compiler/HP-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/HP-CXX.cmake
rename to share/cmake-3.22/Modules/Compiler/HP-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/HP-Fortran.cmake b/share/cmake-3.22/Modules/Compiler/HP-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/HP-Fortran.cmake
rename to share/cmake-3.22/Modules/Compiler/HP-Fortran.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/IAR-ASM.cmake b/share/cmake-3.22/Modules/Compiler/IAR-ASM.cmake
new file mode 100644
index 0000000..bae0fbd
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/IAR-ASM.cmake
@@ -0,0 +1,45 @@
+# This file is processed when the IAR Assembler is used
+
+include(Compiler/IAR)
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0057 NEW) # if IN_LIST
+
+set(_CMAKE_IAR_ITOOLS "ARM" "RH850"  "RL78" "RX" "RISC-V" "STM8")
+set(_CMAKE_IAR_XTOOLS "AVR" "MSP430" "V850" "8051")
+
+set(_CMAKE_IAR_ASM_SILENT   "RH850"  "RL78" "RX" "RISC-V" "STM8")
+if("${CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID}" IN_LIST _CMAKE_IAR_ASM_SILENT)
+  set(_CMAKE_IAR_SILENCER_FLAG " --silent")
+else()
+  set(_CMAKE_IAR_SILENCER_FLAG " -S")
+endif()
+
+string(APPEND CMAKE_ASM_FLAGS_INIT " ")
+string(APPEND CMAKE_ASM_FLAGS_DEBUG_INIT " -r")
+string(APPEND CMAKE_ASM_FLAGS_MINSIZEREL_INIT " -DNDEBUG")
+string(APPEND CMAKE_ASM_FLAGS_RELEASE_INIT " -DNDEBUG")
+string(APPEND CMAKE_ASM_FLAGS_RELWITHDEBINFO_INIT " -r -DNDEBUG")
+
+set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> ${_CMAKE_IAR_SILENCER_FLAG} <SOURCE> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT>")
+
+if("${CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID}" IN_LIST _CMAKE_IAR_ITOOLS)
+  __compiler_iar_ilink(ASM)
+  set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s;asm;msa;S)
+
+elseif("${CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID}" IN_LIST _CMAKE_IAR_XTOOLS)
+  __compiler_iar_xlink(ASM)
+  # AVR=s90, MSP430=s43, V850=s85, 8051=s51
+  set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s90;s43;s85;s51;asm;msa)
+
+else()
+  message(FATAL_ERROR "CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID not detected. This should be automatic.")
+
+endif()
+
+unset(_CMAKE_IAR_ITOOLS)
+unset(_CMAKE_IAR_XTOOLS)
+unset(_CMAKE_IAR_ASM_SILENT)
+unset(_CMAKE_IAR_SILENCER_FLAG)
+
+cmake_policy(POP)
diff --git a/share/cmake-3.22/Modules/Compiler/IAR-C.cmake b/share/cmake-3.22/Modules/Compiler/IAR-C.cmake
new file mode 100644
index 0000000..0ef1a2a
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/IAR-C.cmake
@@ -0,0 +1,86 @@
+# This file is processed when the IAR C Compiler is used
+#
+# C Language Specification support
+#  - Newer versions of the IAR C Compiler require the --c89 flag to build a file under the C90 standard.
+#  - Earlier versions of the compiler had C90 by default, not requiring the backward-compatibility flag.
+#
+# The IAR Language Extensions
+#  - The IAR Language Extensions can be enabled by -e flag
+#
+include(Compiler/IAR)
+include(Compiler/CMakeCommonCompilerMacros)
+
+if(NOT DEFINED CMAKE_C_COMPILER_VERSION)
+  message(FATAL_ERROR "CMAKE_C_COMPILER_VERSION not detected.  This should be automatic.")
+endif()
+
+# Unused after CMP0128
+set(CMAKE_C_EXTENSION_COMPILE_OPTION -e)
+
+if(CMAKE_C_COMPILER_VERSION_INTERNAL VERSION_GREATER 7)
+  set(CMAKE_C90_STANDARD_COMPILE_OPTION --c89)
+  set(CMAKE_C90_EXTENSION_COMPILE_OPTION --c89 -e)
+else()
+  set(CMAKE_C90_STANDARD_COMPILE_OPTION "")
+  set(CMAKE_C90_EXTENSION_COMPILE_OPTION -e)
+endif()
+
+set(CMAKE_C${CMAKE_C_STANDARD_COMPUTED_DEFAULT}_STANDARD_COMPILE_OPTION "")
+set(CMAKE_C${CMAKE_C_STANDARD_COMPUTED_DEFAULT}_EXTENSION_COMPILE_OPTION -e)
+
+# Architecture specific
+if("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "ARM")
+  if (CMAKE_C_COMPILER_VERSION VERSION_LESS 5)
+    # IAR C Compiler for Arm prior version 5.xx uses XLINK. Support in CMake is not implemented.
+    message(FATAL_ERROR "IAR C Compiler for Arm version ${CMAKE_C_COMPILER_VERSION} not supported by CMake.")
+  endif()
+  __compiler_iar_ilink(C)
+  __compiler_check_default_language_standard(C 5.10 90 6.10 99 8.10 11 8.40 17)
+
+elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "RX")
+  __compiler_iar_ilink(C)
+  __compiler_check_default_language_standard(C 1.10 90 2.10 99 4.10 11 4.20 17)
+
+elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "RH850")
+  __compiler_iar_ilink(C)
+  __compiler_check_default_language_standard(C 1.10 90 1.10 99 2.10 11 2.21 17)
+
+elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "RL78")
+  if(CMAKE_C_COMPILER_VERSION VERSION_LESS 2)
+    # IAR C Compiler for RL78 prior version 2.xx uses XLINK. Support in CMake is not implemented.
+    message(FATAL_ERROR "IAR C Compiler for RL78 version ${CMAKE_C_COMPILER_VERSION} not supported by CMake.")
+  endif()
+  __compiler_iar_ilink(C)
+  __compiler_check_default_language_standard(C 2.10 90 2.10 99 4.10 11 4.20 17)
+
+elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "RISCV")
+  __compiler_iar_ilink(C)
+  __compiler_check_default_language_standard(C 1.10 90 1.10 99 1.10 11 1.21 17)
+
+elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "AVR")
+  __compiler_iar_xlink(C)
+  __compiler_check_default_language_standard(C 7.10 99)
+  set(CMAKE_C_OUTPUT_EXTENSION ".r90")
+
+elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "MSP430")
+  __compiler_iar_xlink(C)
+  __compiler_check_default_language_standard(C 1.10 90 5.10 99)
+  set(CMAKE_C_OUTPUT_EXTENSION ".r43")
+
+elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "V850")
+  __compiler_iar_xlink(C)
+  __compiler_check_default_language_standard(C 1.10 90 4.10 99)
+  set(CMAKE_C_OUTPUT_EXTENSION ".r85")
+
+elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "8051")
+  __compiler_iar_xlink(C)
+  __compiler_check_default_language_standard(C 6.10 90 8.10 99)
+  set(CMAKE_C_OUTPUT_EXTENSION ".r51")
+
+elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "STM8")
+  __compiler_iar_ilink(C)
+  __compiler_check_default_language_standard(C 3.11 90 3.11 99)
+
+else()
+  message(FATAL_ERROR "CMAKE_C_COMPILER_ARCHITECTURE_ID not detected. This should be automatic.")
+endif()
diff --git a/share/cmake-3.22/Modules/Compiler/IAR-CXX.cmake b/share/cmake-3.22/Modules/Compiler/IAR-CXX.cmake
new file mode 100644
index 0000000..a3f1dbc
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/IAR-CXX.cmake
@@ -0,0 +1,89 @@
+# This file is processed when the IAR C++ Compiler is used
+#
+# C++ Language Specification support
+#  - Newer versions of the IAR C++ Compiler require the --c++ flag to build a C++ file.
+#    Earlier versions for non-ARM architectures provided Embedded C++, enabled with the --eec++ flag.
+#
+# The IAR Language Extensions
+#  - The IAR Language Extensions can be enabled by -e flag
+#
+include(Compiler/IAR)
+include(Compiler/CMakeCommonCompilerMacros)
+
+if(NOT DEFINED CMAKE_CXX_COMPILER_VERSION)
+  message(FATAL_ERROR "CMAKE_CXX_COMPILER_VERSION not detected. This should be automatic.")
+endif()
+
+# Whenever needed, override this default behavior using CMAKE_IAR_CXX_FLAG in your toolchain file.
+if(NOT CMAKE_IAR_CXX_FLAG)
+  set(_CMAKE_IAR_MODERNCXX_LIST 14 17)
+  if(${CMAKE_CXX_STANDARD_COMPUTED_DEFAULT} IN_LIST _CMAKE_IAR_MODERNCXX_LIST OR
+     ("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "ARM" AND ${CMAKE_CXX_STANDARD_COMPUTED_DEFAULT} EQUAL 98))
+    string(PREPEND CMAKE_CXX_FLAGS "--c++ ")
+  else()
+    string(PREPEND CMAKE_CXX_FLAGS "--eec++ ")
+  endif()
+  unset(_CMAKE_IAR_MODERNCXX_LIST)
+endif()
+
+set(CMAKE_CXX_STANDARD_COMPILE_OPTION "")
+set(CMAKE_CXX_EXTENSION_COMPILE_OPTION -e) # Unused after CMP0128
+
+set(CMAKE_CXX${CMAKE_CXX_STANDARD_COMPUTED_DEFAULT}_STANDARD_COMPILE_OPTION "")
+set(CMAKE_CXX${CMAKE_CXX_STANDARD_COMPUTED_DEFAULT}_EXTENSION_COMPILE_OPTION -e)
+
+# Architecture specific
+if("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "ARM")
+  if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5)
+    # IAR C++ Compiler for Arm prior version 5.xx uses XLINK. Support in CMake is not implemented.
+    message(FATAL_ERROR "IAR C++ Compiler for Arm version ${CMAKE_CXX_COMPILER_VERSION} not supported by CMake.")
+  endif()
+  __compiler_iar_ilink(CXX)
+  __compiler_check_default_language_standard(CXX 5.10 98 8.10 14 8.40 17)
+
+elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "RX")
+  __compiler_iar_ilink(CXX)
+  __compiler_check_default_language_standard(CXX 2.10 98 4.10 14 4.20 17)
+
+elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "RH850")
+  __compiler_iar_ilink(CXX)
+  __compiler_check_default_language_standard(CXX 1.10 98 2.10 14 2.21 17)
+
+elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "RL78")
+  if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 2)
+    # # IAR C++ Compiler for RL78 prior version 2.xx uses XLINK. Support in CMake is not implemented.
+    message(FATAL_ERROR "IAR C++ Compiler for RL78 version ${CMAKE_CXX_COMPILER_VERSION} not supported by CMake.")
+  endif()
+  __compiler_iar_ilink(CXX)
+  __compiler_check_default_language_standard(CXX 2.10 98 4.10 14 4.20 17)
+
+elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "RISCV")
+  __compiler_iar_ilink(CXX)
+  __compiler_check_default_language_standard(CXX 1.10 98 1.10 14 1.21 17)
+
+elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "AVR")
+  __compiler_iar_xlink(CXX)
+  __compiler_check_default_language_standard(CXX 7.10 98)
+
+elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "MSP430")
+  __compiler_iar_xlink(CXX)
+  __compiler_check_default_language_standard(CXX 5.10 98)
+  set(CMAKE_CXX_OUTPUT_EXTENSION ".r43")
+
+elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "V850")
+  __compiler_iar_xlink(CXX)
+  __compiler_check_default_language_standard(CXX 1.10 98)
+  set(CMAKE_C_OUTPUT_EXTENSION ".r85")
+
+elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "8051")
+  __compiler_iar_xlink(CXX)
+  __compiler_check_default_language_standard(CXX 6.10 98)
+  set(CMAKE_C_OUTPUT_EXTENSION ".r51")
+
+elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "STM8")
+  __compiler_iar_ilink(CXX)
+  __compiler_check_default_language_standard(CXX 3.11 98)
+
+else()
+  message(FATAL_ERROR "CMAKE_CXX_COMPILER_ARCHITECTURE_ID not detected. This should be automatic." )
+endif()
diff --git a/share/cmake-3.22/Modules/Compiler/IAR-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/IAR-DetermineCompiler.cmake
new file mode 100644
index 0000000..b03fd1f
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/IAR-DetermineCompiler.cmake
@@ -0,0 +1,37 @@
+# IAR C/C++ Compiler (https://www.iar.com)
+# CPU <arch> supported in CMake: 8051, Arm, AVR, MSP430, RH850, RISC-V, RL78, RX and V850
+#
+# IAR C/C++ Compiler for <arch> internal integer symbols used in CMake:
+#
+# __IAR_SYSTEMS_ICC__
+#           Provides the compiler internal platform version
+# __ICC<arch>__
+#           Provides 1 for the current <arch> in use
+# __VER__
+#           Provides the current version in use
+#            The semantic version of the compiler is architecture-dependent
+#            When <arch> is ARM:
+#               CMAKE_<LANG>_COMPILER_VERSION_MAJOR = (__VER__ / 1E6)
+#               CMAKE_<LANG>_COMPILER_VERSION_MINOR = (__VER__ / 1E3) % 1E3
+#               CMAKE_<LANG>_COMPILER_VERSION_PATCH = (__VER__ % 1E3)
+#            When <arch> is non-ARM:
+#               CMAKE_<LANG>_COMPILER_VERSION_MAJOR = (__VER__ / 1E2)
+#               CMAKE_<LANG>_COMPILER_VERSION_MINOR = (__VER__ - ((__VER__/ 1E2) * 1E2))
+#               CMAKE_<LANG>_COMPILER_VERSION_PATCH = (__SUBVERSION__)
+# __SUBVERSION__
+#           Provides the version's patch level for non-ARM <arch>
+#
+set(_compiler_id_pp_test "defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)")
+
+set(_compiler_id_version_compute "
+# if defined(__VER__) && defined(__ICCARM__)
+#  define @PREFIX@COMPILER_VERSION_MAJOR @MACRO_DEC@((__VER__) / 1000000)
+#  define @PREFIX@COMPILER_VERSION_MINOR @MACRO_DEC@(((__VER__) / 1000) % 1000)
+#  define @PREFIX@COMPILER_VERSION_PATCH @MACRO_DEC@((__VER__) % 1000)
+#  define @PREFIX@COMPILER_VERSION_INTERNAL @MACRO_DEC@(__IAR_SYSTEMS_ICC__)
+# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__))
+#  define @PREFIX@COMPILER_VERSION_MAJOR @MACRO_DEC@((__VER__) / 100)
+#  define @PREFIX@COMPILER_VERSION_MINOR @MACRO_DEC@((__VER__) - (((__VER__) / 100)*100))
+#  define @PREFIX@COMPILER_VERSION_PATCH @MACRO_DEC@(__SUBVERSION__)
+#  define @PREFIX@COMPILER_VERSION_INTERNAL @MACRO_DEC@(__IAR_SYSTEMS_ICC__)
+# endif")
diff --git a/share/cmake-3.22/Modules/Compiler/IAR.cmake b/share/cmake-3.22/Modules/Compiler/IAR.cmake
new file mode 100644
index 0000000..53456f5
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/IAR.cmake
@@ -0,0 +1,61 @@
+# This file is processed when the IAR C/C++ Compiler is used
+#
+# CPU <arch> supported in CMake: 8051, Arm, AVR, MSP430, RH850, RISC-V, RL78, RX and V850
+#
+# The compiler user documentation is architecture-dependent
+# and it can found with the product installation under <arch>/doc/{EW,BX}<arch>_DevelopmentGuide.ENU.pdf
+#
+#
+include_guard()
+
+macro(__compiler_iar_ilink lang)
+  set(CMAKE_EXECUTABLE_SUFFIX ".elf")
+  set(CMAKE_${lang}_OUTPUT_EXTENSION ".o")
+  if (${lang} STREQUAL "C" OR ${lang} STREQUAL "CXX")
+    set(CMAKE_${lang}_COMPILE_OBJECT             "<CMAKE_${lang}_COMPILER> ${CMAKE_IAR_${lang}_FLAG} --silent <SOURCE> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT>")
+    set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE "<CMAKE_${lang}_COMPILER> ${CMAKE_IAR_${lang}_FLAG} --silent <SOURCE> <DEFINES> <INCLUDES> <FLAGS> --preprocess=cnl <PREPROCESSED_SOURCE>")
+    set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE     "<CMAKE_${lang}_COMPILER> ${CMAKE_IAR_${lang}_FLAG} --silent <SOURCE> <DEFINES> <INCLUDES> <FLAGS> -lAH <ASSEMBLY_SOURCE> -o <OBJECT>.dummy")
+
+    set(CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG "-f ")
+    set(CMAKE_DEPFILE_FLAGS_${lang} "--dependencies=ns <DEP_FILE>")
+
+    string(APPEND CMAKE_${lang}_FLAGS_INIT " ")
+    string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -r")
+    string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -Ohz -DNDEBUG")
+    string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -Oh -DNDEBUG")
+    string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -Oh -r -DNDEBUG")
+  endif()
+
+  set(CMAKE_${lang}_LINK_EXECUTABLE "<CMAKE_LINKER> --silent <OBJECTS> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES> -o <TARGET>")
+  set(CMAKE_${lang}_CREATE_STATIC_LIBRARY "<CMAKE_AR> <TARGET> --create <LINK_FLAGS> <OBJECTS>")
+  set(CMAKE_${lang}_ARCHIVE_CREATE "<CMAKE_AR> <TARGET> --create <LINK_FLAGS> <OBJECTS>")
+  set(CMAKE_${lang}_ARCHIVE_APPEND "<CMAKE_AR> <TARGET> --replace <LINK_FLAGS> <OBJECTS>")
+  set(CMAKE_${lang}_ARCHIVE_FINISH "")
+endmacro()
+
+macro(__compiler_iar_xlink lang)
+  set(CMAKE_EXECUTABLE_SUFFIX ".bin")
+  if (${lang} STREQUAL "C" OR ${lang} STREQUAL "CXX")
+
+    set(CMAKE_${lang}_COMPILE_OBJECT             "<CMAKE_${lang}_COMPILER> ${CMAKE_IAR_${lang}_FLAG} --silent <SOURCE> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT>")
+    set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE "<CMAKE_${lang}_COMPILER> ${CMAKE_IAR_${lang}_FLAG} --silent <SOURCE> <DEFINES> <INCLUDES> <FLAGS> --preprocess=cnl <PREPROCESSED_SOURCE>")
+    set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE     "<CMAKE_${lang}_COMPILER> ${CMAKE_IAR_${lang}_FLAG} --silent <SOURCE> <DEFINES> <INCLUDES> <FLAGS> -lAH <ASSEMBLY_SOURCE> -o <OBJECT>.dummy")
+
+    set(CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG "-f ")
+    set(CMAKE_DEPFILE_FLAGS_${lang} "--dependencies=ns <DEP_FILE>")
+
+    string(APPEND CMAKE_${lang}_FLAGS_INIT " ")
+    string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -r")
+    string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -Ohz -DNDEBUG")
+    string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -Oh -DNDEBUG")
+    string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -Oh -r -DNDEBUG")
+  endif()
+
+  set(CMAKE_${lang}_LINK_EXECUTABLE "<CMAKE_LINKER> -S <OBJECTS> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES> -o <TARGET>")
+  set(CMAKE_${lang}_CREATE_STATIC_LIBRARY "<CMAKE_AR> <TARGET> <LINK_FLAGS> <OBJECTS>")
+  set(CMAKE_${lang}_ARCHIVE_CREATE "<CMAKE_AR> <TARGET> <LINK_FLAGS> <OBJECTS>")
+  set(CMAKE_${lang}_ARCHIVE_APPEND "")
+  set(CMAKE_${lang}_ARCHIVE_FINISH "")
+
+  set(CMAKE_LIBRARY_PATH_FLAG "-I")
+endmacro()
diff --git a/share/cmake-3.18/Modules/Compiler/IBMCPP-C-DetermineVersionInternal.cmake b/share/cmake-3.22/Modules/Compiler/IBMCPP-C-DetermineVersionInternal.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/IBMCPP-C-DetermineVersionInternal.cmake
rename to share/cmake-3.22/Modules/Compiler/IBMCPP-C-DetermineVersionInternal.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake b/share/cmake-3.22/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake
rename to share/cmake-3.22/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/Intel-ASM.cmake b/share/cmake-3.22/Modules/Compiler/Intel-ASM.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/Intel-ASM.cmake
rename to share/cmake-3.22/Modules/Compiler/Intel-ASM.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/Intel-C-FeatureTests.cmake b/share/cmake-3.22/Modules/Compiler/Intel-C-FeatureTests.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/Intel-C-FeatureTests.cmake
rename to share/cmake-3.22/Modules/Compiler/Intel-C-FeatureTests.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/Intel-C.cmake b/share/cmake-3.22/Modules/Compiler/Intel-C.cmake
new file mode 100644
index 0000000..9884b58
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/Intel-C.cmake
@@ -0,0 +1,61 @@
+include(Compiler/Intel)
+__compiler_intel(C)
+
+string(APPEND CMAKE_C_FLAGS_MINSIZEREL_INIT " -DNDEBUG")
+string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " -DNDEBUG")
+string(APPEND CMAKE_C_FLAGS_RELWITHDEBINFO_INIT " -DNDEBUG")
+
+set(CMAKE_DEPFILE_FLAGS_C "-MD -MT <DEP_TARGET> -MF <DEP_FILE>")
+if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+    AND CMAKE_GENERATOR MATCHES "Makefiles|WMake")
+  # dependencies are computed by the compiler itself
+  set(CMAKE_C_DEPFILE_FORMAT gcc)
+  set(CMAKE_C_DEPENDS_USE_COMPILER TRUE)
+endif()
+
+if("x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC")
+
+  set(CMAKE_C_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -TC)
+  set(CMAKE_C_CLANG_TIDY_DRIVER_MODE "cl")
+  set(CMAKE_C_INCLUDE_WHAT_YOU_USE_DRIVER_MODE "cl")
+
+  if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 16.0.0)
+    set(CMAKE_C11_STANDARD_COMPILE_OPTION "-Qstd=c11")
+    set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-Qstd=c11")
+    set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
+  endif()
+
+  if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 12.0)
+    set(CMAKE_C90_STANDARD_COMPILE_OPTION "-Qstd=c89")
+    set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-Qstd=c89")
+    set(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT ON)
+    set(CMAKE_C99_STANDARD_COMPILE_OPTION "-Qstd=c99")
+    set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-Qstd=c99")
+    set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
+  endif()
+
+else()
+
+  set(CMAKE_C_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -x c)
+
+  if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 15.0.0)
+    set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
+    set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
+    set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
+  endif()
+
+  if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 12.0)
+    set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c89")
+    set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=gnu89")
+    set(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT ON)
+    set(CMAKE_C99_STANDARD_COMPILE_OPTION "-std=c99")
+    set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-std=gnu99")
+    set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
+  endif()
+
+endif()
+
+__compiler_check_default_language_standard(C 12.0 90 15.0.0 11)
+
+set(CMAKE_C_CREATE_PREPROCESSED_SOURCE "<CMAKE_C_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
+set(CMAKE_C_CREATE_ASSEMBLY_SOURCE "<CMAKE_C_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>")
diff --git a/share/cmake-3.18/Modules/Compiler/Intel-CXX-FeatureTests.cmake b/share/cmake-3.22/Modules/Compiler/Intel-CXX-FeatureTests.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/Intel-CXX-FeatureTests.cmake
rename to share/cmake-3.22/Modules/Compiler/Intel-CXX-FeatureTests.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/Intel-CXX.cmake b/share/cmake-3.22/Modules/Compiler/Intel-CXX.cmake
new file mode 100644
index 0000000..7c9cca9
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/Intel-CXX.cmake
@@ -0,0 +1,105 @@
+include(Compiler/Intel)
+__compiler_intel(CXX)
+
+string(APPEND CMAKE_CXX_FLAGS_MINSIZEREL_INIT " -DNDEBUG")
+string(APPEND CMAKE_CXX_FLAGS_RELEASE_INIT " -DNDEBUG")
+string(APPEND CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT " -DNDEBUG")
+
+set(CMAKE_DEPFILE_FLAGS_CXX "-MD -MT <DEP_TARGET> -MF <DEP_FILE>")
+if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+    AND CMAKE_GENERATOR MATCHES "Makefiles|WMake")
+  # dependencies are computed by the compiler itself
+  set(CMAKE_CXX_DEPFILE_FORMAT gcc)
+  set(CMAKE_CXX_DEPENDS_USE_COMPILER TRUE)
+endif()
+
+if("x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
+
+  set(CMAKE_CXX_CLANG_TIDY_DRIVER_MODE "cl")
+  set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE_DRIVER_MODE "cl")
+
+  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.0.0)
+    set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-Qstd=c++20")
+    set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-Qstd=c++20")
+  endif()
+
+  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 18.0.0)
+    set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-Qstd=c++17")
+    set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-Qstd=c++17")
+  endif()
+
+  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16.0)
+    set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-Qstd=c++14")
+    set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-Qstd=c++14")
+  endif()
+
+  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13.0)
+    set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-Qstd=c++11")
+    set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-Qstd=c++11")
+  elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.1)
+    set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-Qstd=c++0x")
+    set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-Qstd=c++0x")
+  endif()
+
+  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.1)
+    set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "")
+    set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "")
+    set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
+  endif()
+
+else()
+
+  set(CMAKE_CXX_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -x c++)
+
+  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.0.0)
+    set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std=c++20")
+    set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std=gnu++20")
+  endif()
+
+  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 18.0.0)
+    set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++17")
+    set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++17")
+  endif()
+
+  if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 17.0)
+    set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
+  endif()
+
+  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0.2)
+    set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++14")
+  elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0.0)
+    set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++1y")
+  endif()
+
+  # Intel 15.0.2 accepts c++14 instead of c++1y, but not gnu++14
+  # instead of gnu++1y.  Intel 17.0.0 accepts gnu++14 too.
+  if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 17.0)
+    set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++14")
+  elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0.0)
+    set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++1y")
+  endif()
+
+  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0)
+    set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
+  endif()
+
+  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13.0)
+    set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++11")
+    set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++11")
+  elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.1)
+    set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++0x")
+    set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++0x")
+  endif()
+
+  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.1)
+    set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "-std=c++98")
+    set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "-std=gnu++98")
+    set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
+  endif()
+
+endif()
+
+__compiler_check_default_language_standard(CXX 12.1 98)
+
+set(CMAKE_CXX_CREATE_PREPROCESSED_SOURCE "<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
+set(CMAKE_CXX_CREATE_ASSEMBLY_SOURCE "<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>")
diff --git a/share/cmake-3.22/Modules/Compiler/Intel-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/Intel-DetermineCompiler.cmake
new file mode 100644
index 0000000..3c1fde2
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/Intel-DetermineCompiler.cmake
@@ -0,0 +1,49 @@
+
+set(_compiler_id_pp_test "defined(__INTEL_COMPILER) || defined(__ICC)")
+
+set(_compiler_id_version_compute "
+  /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later,
+     except that a few beta releases use the old format with V=2021.  */
+# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111
+#  define @PREFIX@COMPILER_VERSION_MAJOR @MACRO_DEC@(__INTEL_COMPILER/100)
+#  define @PREFIX@COMPILER_VERSION_MINOR @MACRO_DEC@(__INTEL_COMPILER/10 % 10)
+#  if defined(__INTEL_COMPILER_UPDATE)
+#   define @PREFIX@COMPILER_VERSION_PATCH @MACRO_DEC@(__INTEL_COMPILER_UPDATE)
+#  else
+#   define @PREFIX@COMPILER_VERSION_PATCH @MACRO_DEC@(__INTEL_COMPILER   % 10)
+#  endif
+# else
+#  define @PREFIX@COMPILER_VERSION_MAJOR @MACRO_DEC@(__INTEL_COMPILER)
+#  define @PREFIX@COMPILER_VERSION_MINOR @MACRO_DEC@(__INTEL_COMPILER_UPDATE)
+   /* The third version component from --version is an update index,
+      but no macro is provided for it.  */
+#  define @PREFIX@COMPILER_VERSION_PATCH @MACRO_DEC@(0)
+# endif
+# if defined(__INTEL_COMPILER_BUILD_DATE)
+   /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */
+#  define @PREFIX@COMPILER_VERSION_TWEAK @MACRO_DEC@(__INTEL_COMPILER_BUILD_DATE)
+# endif
+# if defined(_MSC_VER)
+   /* _MSC_VER = VVRR */
+#  define @PREFIX@SIMULATE_VERSION_MAJOR @MACRO_DEC@(_MSC_VER / 100)
+#  define @PREFIX@SIMULATE_VERSION_MINOR @MACRO_DEC@(_MSC_VER % 100)
+# endif
+# if defined(__GNUC__)
+#  define @PREFIX@SIMULATE_VERSION_MAJOR @MACRO_DEC@(__GNUC__)
+# elif defined(__GNUG__)
+#  define @PREFIX@SIMULATE_VERSION_MAJOR @MACRO_DEC@(__GNUG__)
+# endif
+# if defined(__GNUC_MINOR__)
+#  define @PREFIX@SIMULATE_VERSION_MINOR @MACRO_DEC@(__GNUC_MINOR__)
+# endif
+# if defined(__GNUC_PATCHLEVEL__)
+#  define @PREFIX@SIMULATE_VERSION_PATCH @MACRO_DEC@(__GNUC_PATCHLEVEL__)
+# endif")
+
+set(_compiler_id_simulate "
+# if defined(_MSC_VER)
+#  define @PREFIX@SIMULATE_ID \"MSVC\"
+# endif
+# if defined(__GNUC__)
+#  define @PREFIX@SIMULATE_ID \"GNU\"
+# endif")
diff --git a/share/cmake-3.22/Modules/Compiler/Intel-Fortran.cmake b/share/cmake-3.22/Modules/Compiler/Intel-Fortran.cmake
new file mode 100644
index 0000000..9fb6d46
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/Intel-Fortran.cmake
@@ -0,0 +1,27 @@
+include(Compiler/Intel)
+__compiler_intel(Fortran)
+
+set(CMAKE_Fortran_SUBMODULE_SEP "@")
+set(CMAKE_Fortran_SUBMODULE_EXT ".smod")
+
+set(CMAKE_Fortran_MODDIR_FLAG "-module ")
+set(CMAKE_Fortran_FORMAT_FIXED_FLAG "-fixed")
+set(CMAKE_Fortran_FORMAT_FREE_FLAG "-free")
+
+set(CMAKE_Fortran_COMPILE_WITH_DEFINES 1)
+
+set(CMAKE_Fortran_CREATE_PREPROCESSED_SOURCE "<CMAKE_Fortran_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
+set(CMAKE_Fortran_CREATE_ASSEMBLY_SOURCE "<CMAKE_Fortran_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>")
+
+if(CMAKE_HOST_WIN32)
+  # MSVC-like
+  set(CMAKE_Fortran_PREPROCESS_SOURCE
+    "<CMAKE_Fortran_COMPILER> -fpp <DEFINES> <INCLUDES> <FLAGS> -P <SOURCE> -Fi<PREPROCESSED_SOURCE>")
+else()
+  # GNU-like
+  set(CMAKE_Fortran_PREPROCESS_SOURCE
+    "<CMAKE_Fortran_COMPILER> -fpp <DEFINES> <INCLUDES> <FLAGS> -P <SOURCE> -o <PREPROCESSED_SOURCE>")
+endif()
+
+set(CMAKE_Fortran_COMPILE_OPTIONS_PREPROCESS_ON "-fpp")
+set(CMAKE_Fortran_COMPILE_OPTIONS_PREPROCESS_OFF "-nofpp")
diff --git a/share/cmake-3.22/Modules/Compiler/Intel-ISPC.cmake b/share/cmake-3.22/Modules/Compiler/Intel-ISPC.cmake
new file mode 100644
index 0000000..be64cf7
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/Intel-ISPC.cmake
@@ -0,0 +1,26 @@
+include(Compiler/CMakeCommonCompilerMacros)
+
+# Not aware of any verbose flag for ISPC
+#set(CMAKE_ISPC_VERBOSE_FLAG )
+
+set(CMAKE_DEPFILE_FLAGS_ISPC "-M -MT <DEP_TARGET> -MF <DEP_FILE>")
+if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+    AND CMAKE_GENERATOR MATCHES "Makefiles|WMake")
+  # dependencies are computed by the compiler itself
+  set(CMAKE_ISPC_DEPFILE_FORMAT gcc)
+  set(CMAKE_ISPC_DEPENDS_USE_COMPILER TRUE)
+endif()
+
+string(APPEND CMAKE_ISPC_FLAGS_INIT " ")
+string(APPEND CMAKE_ISPC_FLAGS_DEBUG_INIT "-O0 -g")
+string(APPEND CMAKE_ISPC_FLAGS_RELEASE_INIT " -O3 -DNDEBUG")
+string(APPEND CMAKE_ISPC_FLAGS_MINSIZEREL_INIT " -O1 -DNDEBUG")
+string(APPEND CMAKE_ISPC_FLAGS_RELWITHDEBINFO_INIT " -O2 -g -DNDEBUG")
+
+set(CMAKE_ISPC_COMPILE_OPTIONS_PIE --pic)
+set(CMAKE_ISPC_COMPILE_OPTIONS_PIC --pic)
+
+set(CMAKE_ISPC_RESPONSE_FILE_FLAG "@")
+set(CMAKE_ISPC_USE_RESPONSE_FILE_FOR_INCLUDES 1)
+set(CMAKE_ISPC_USE_RESPONSE_FILE_FOR_LIBRARIES 1)
+set(CMAKE_ISPC_USE_RESPONSE_FILE_FOR_OBJECTS 1)
diff --git a/share/cmake-3.18/Modules/Compiler/Intel.cmake b/share/cmake-3.22/Modules/Compiler/Intel.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/Intel.cmake
rename to share/cmake-3.22/Modules/Compiler/Intel.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/IntelLLVM-ASM.cmake b/share/cmake-3.22/Modules/Compiler/IntelLLVM-ASM.cmake
new file mode 100644
index 0000000..c258a0a
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/IntelLLVM-ASM.cmake
@@ -0,0 +1,12 @@
+include(Compiler/IntelLLVM)
+__compiler_intel_llvm(ASM)
+
+string(APPEND CMAKE_ASM_FLAGS_MINSIZEREL_INIT " -DNDEBUG")
+string(APPEND CMAKE_ASM_FLAGS_RELEASE_INIT " -DNDEBUG")
+string(APPEND CMAKE_ASM_FLAGS_RELWITHDEBINFO_INIT " -DNDEBUG")
+
+if(UNIX)
+  set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s;S)
+else()
+  set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS asm)
+endif()
diff --git a/share/cmake-3.22/Modules/Compiler/IntelLLVM-C.cmake b/share/cmake-3.22/Modules/Compiler/IntelLLVM-C.cmake
new file mode 100644
index 0000000..d7346f6
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/IntelLLVM-C.cmake
@@ -0,0 +1,59 @@
+include(Compiler/IntelLLVM)
+__compiler_intel_llvm(C)
+
+if("x${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "xMSVC")
+  set(CMAKE_C_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -TC)
+  set(CMAKE_C_CLANG_TIDY_DRIVER_MODE "cl")
+  set(CMAKE_C_INCLUDE_WHAT_YOU_USE_DRIVER_MODE "cl")
+  if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+      AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
+      AND CMAKE_DEPFILE_FLAGS_C)
+    set(CMAKE_C_DEPENDS_USE_COMPILER TRUE)
+  endif()
+else()
+  set(CMAKE_C_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -x c)
+  if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+      AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
+      AND CMAKE_DEPFILE_FLAGS_C)
+    # dependencies are computed by the compiler itself
+    set(CMAKE_C_DEPFILE_FORMAT gcc)
+    set(CMAKE_C_DEPENDS_USE_COMPILER TRUE)
+  endif()
+
+  string(APPEND CMAKE_C_FLAGS_MINSIZEREL_INIT " -DNDEBUG")
+  string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " -DNDEBUG")
+  string(APPEND CMAKE_C_FLAGS_RELWITHDEBINFO_INIT " -DNDEBUG")
+endif()
+
+set(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT ON)
+set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
+set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
+
+if(NOT "x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC")
+  set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c90")
+  set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=gnu90")
+
+  set(CMAKE_C99_STANDARD_COMPILE_OPTION "-std=c99")
+  set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-std=gnu99")
+
+  set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
+  set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
+
+  set(CMAKE_C17_STANDARD_COMPILE_OPTION "-std=c17")
+  set(CMAKE_C17_EXTENSION_COMPILE_OPTION "-std=gnu17")
+else()
+  # clang-cl doesn't have any of these
+  set(CMAKE_C90_STANDARD_COMPILE_OPTION "")
+  set(CMAKE_C90_EXTENSION_COMPILE_OPTION "")
+
+  set(CMAKE_C99_STANDARD_COMPILE_OPTION "")
+  set(CMAKE_C99_EXTENSION_COMPILE_OPTION "")
+
+  set(CMAKE_C11_STANDARD_COMPILE_OPTION "")
+  set(CMAKE_C11_EXTENSION_COMPILE_OPTION "")
+
+  set(CMAKE_C17_STANDARD_COMPILE_OPTION "")
+  set(CMAKE_C17_EXTENSION_COMPILE_OPTION "")
+endif()
+
+__compiler_check_default_language_standard(C 2020 17)
diff --git a/share/cmake-3.22/Modules/Compiler/IntelLLVM-CXX.cmake b/share/cmake-3.22/Modules/Compiler/IntelLLVM-CXX.cmake
new file mode 100644
index 0000000..cae1f11
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/IntelLLVM-CXX.cmake
@@ -0,0 +1,66 @@
+include(Compiler/IntelLLVM)
+__compiler_intel_llvm(CXX)
+
+if("x${CMAKE_CXX_COMPILER_FRONTEND_VARIANT}" STREQUAL "xMSVC")
+  set(CMAKE_CXX_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -TP)
+  set(CMAKE_CXX_CLANG_TIDY_DRIVER_MODE "cl")
+  set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE_DRIVER_MODE "cl")
+  if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+      AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
+      AND CMAKE_DEPFILE_FLAGS_CXX)
+    set(CMAKE_CXX_DEPENDS_USE_COMPILER TRUE)
+  endif()
+else()
+  set(CMAKE_CXX_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -x c++)
+  if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+      AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
+      AND CMAKE_DEPFILE_FLAGS_CXX)
+    # dependencies are computed by the compiler itself
+    set(CMAKE_CXX_DEPFILE_FORMAT gcc)
+    set(CMAKE_CXX_DEPENDS_USE_COMPILER TRUE)
+  endif()
+
+  set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden")
+
+  string(APPEND CMAKE_CXX_FLAGS_MINSIZEREL_INIT " -DNDEBUG")
+  string(APPEND CMAKE_CXX_FLAGS_RELEASE_INIT " -DNDEBUG")
+  string(APPEND CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT " -DNDEBUG")
+endif()
+
+set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
+set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
+set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
+
+if(NOT "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
+  set(CMAKE_CXX98_STANDARD_COMPILE_OPTION  "-std=c++98")
+  set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "-std=gnu++98")
+
+  set(CMAKE_CXX11_STANDARD_COMPILE_OPTION  "-std=c++11")
+  set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++11")
+
+  set(CMAKE_CXX14_STANDARD_COMPILE_OPTION  "-std=c++14")
+  set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++14")
+
+  set(CMAKE_CXX17_STANDARD_COMPILE_OPTION  "-std=c++17")
+  set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++17")
+
+  set(CMAKE_CXX20_STANDARD_COMPILE_OPTION  "-std=c++20")
+  set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std=gnu++20")
+else()
+  set(CMAKE_CXX98_STANDARD_COMPILE_OPTION  "")
+  set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "")
+
+  set(CMAKE_CXX11_STANDARD_COMPILE_OPTION  "-Qstd=c++11")
+  set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-Qstd=c++11")
+
+  set(CMAKE_CXX14_STANDARD_COMPILE_OPTION  "-Qstd=c++14")
+  set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-Qstd=c++14")
+
+  set(CMAKE_CXX17_STANDARD_COMPILE_OPTION  "-Qstd=c++17")
+  set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-Qstd=c++17")
+
+  set(CMAKE_CXX20_STANDARD_COMPILE_OPTION  "-Qstd=c++20")
+  set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-Qstd=c++20")
+endif()
+
+__compiler_check_default_language_standard(CXX 2020 14)
diff --git a/share/cmake-3.22/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake
new file mode 100644
index 0000000..917a364
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake
@@ -0,0 +1,41 @@
+
+set(_compiler_id_pp_test "(defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER)")
+
+set(_compiler_id_version_compute "
+/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and
+ * later.  Look for 6 digit vs. 8 digit version number to decide encoding.
+ * VVVV is no smaller than the current year when a version is released.
+ */
+#if __INTEL_LLVM_COMPILER < 1000000L
+# define @PREFIX@COMPILER_VERSION_MAJOR @MACRO_DEC@(__INTEL_LLVM_COMPILER/100)
+# define @PREFIX@COMPILER_VERSION_MINOR @MACRO_DEC@(__INTEL_LLVM_COMPILER/10 % 10)
+# define @PREFIX@COMPILER_VERSION_PATCH @MACRO_DEC@(__INTEL_LLVM_COMPILER    % 10)
+#else
+# define @PREFIX@COMPILER_VERSION_MAJOR @MACRO_DEC@(__INTEL_LLVM_COMPILER/10000)
+# define @PREFIX@COMPILER_VERSION_MINOR @MACRO_DEC@(__INTEL_LLVM_COMPILER/100 % 100)
+# define @PREFIX@COMPILER_VERSION_PATCH @MACRO_DEC@(__INTEL_LLVM_COMPILER     % 100)
+#endif
+#if defined(_MSC_VER)
+  /* _MSC_VER = VVRR */
+# define @PREFIX@SIMULATE_VERSION_MAJOR @MACRO_DEC@(_MSC_VER / 100)
+# define @PREFIX@SIMULATE_VERSION_MINOR @MACRO_DEC@(_MSC_VER % 100)
+#endif
+#if defined(__GNUC__)
+# define @PREFIX@SIMULATE_VERSION_MAJOR @MACRO_DEC@(__GNUC__)
+#elif defined(__GNUG__)
+# define @PREFIX@SIMULATE_VERSION_MAJOR @MACRO_DEC@(__GNUG__)
+#endif
+#if defined(__GNUC_MINOR__)
+# define @PREFIX@SIMULATE_VERSION_MINOR @MACRO_DEC@(__GNUC_MINOR__)
+#endif
+#if defined(__GNUC_PATCHLEVEL__)
+# define @PREFIX@SIMULATE_VERSION_PATCH @MACRO_DEC@(__GNUC_PATCHLEVEL__)
+#endif")
+
+set(_compiler_id_simulate "
+#if defined(_MSC_VER)
+# define @PREFIX@SIMULATE_ID \"MSVC\"
+#endif
+#if defined(__GNUC__)
+# define @PREFIX@SIMULATE_ID \"GNU\"
+#endif")
diff --git a/share/cmake-3.22/Modules/Compiler/IntelLLVM-Fortran.cmake b/share/cmake-3.22/Modules/Compiler/IntelLLVM-Fortran.cmake
new file mode 100644
index 0000000..710803f
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/IntelLLVM-Fortran.cmake
@@ -0,0 +1,27 @@
+include(Compiler/IntelLLVM)
+__compiler_intel_llvm(Fortran)
+
+set(CMAKE_Fortran_SUBMODULE_SEP "@")
+set(CMAKE_Fortran_SUBMODULE_EXT ".smod")
+
+set(CMAKE_Fortran_MODDIR_FLAG "-module ")
+set(CMAKE_Fortran_FORMAT_FIXED_FLAG "-fixed")
+set(CMAKE_Fortran_FORMAT_FREE_FLAG "-free")
+
+set(CMAKE_Fortran_COMPILE_WITH_DEFINES 1)
+
+set(CMAKE_Fortran_CREATE_PREPROCESSED_SOURCE "<CMAKE_Fortran_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
+set(CMAKE_Fortran_CREATE_ASSEMBLY_SOURCE "<CMAKE_Fortran_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>")
+
+if(CMAKE_HOST_WIN32)
+  # MSVC-like
+  set(CMAKE_Fortran_PREPROCESS_SOURCE
+    "<CMAKE_Fortran_COMPILER> -fpp <DEFINES> <INCLUDES> <FLAGS> -P <SOURCE> -Fi<PREPROCESSED_SOURCE>")
+else()
+  # GNU-like
+  set(CMAKE_Fortran_PREPROCESS_SOURCE
+    "<CMAKE_Fortran_COMPILER> -fpp <DEFINES> <INCLUDES> <FLAGS> -P <SOURCE> -o <PREPROCESSED_SOURCE>")
+endif()
+
+set(CMAKE_Fortran_COMPILE_OPTIONS_PREPROCESS_ON "-fpp")
+set(CMAKE_Fortran_COMPILE_OPTIONS_PREPROCESS_OFF "-nofpp")
diff --git a/share/cmake-3.22/Modules/Compiler/IntelLLVM.cmake b/share/cmake-3.22/Modules/Compiler/IntelLLVM.cmake
new file mode 100644
index 0000000..14b7ad8
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/IntelLLVM.cmake
@@ -0,0 +1,92 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# This module is shared by multiple languages; use include blocker.
+if(__COMPILER_LLVM_INTEL)
+  return()
+endif()
+set(__COMPILER_LLVM_INTEL 1)
+
+include(Compiler/CMakeCommonCompilerMacros)
+
+set(__pch_header_C "c-header")
+set(__pch_header_CXX "c++-header")
+set(__pch_header_OBJC "objective-c-header")
+set(__pch_header_OBJCXX "objective-c++-header")
+
+if(CMAKE_HOST_WIN32)
+  # MSVC-like
+  macro(__compiler_intel_llvm lang)
+    if(NOT "x${lang}" STREQUAL "xFortran")
+      set(CMAKE_${lang}_COMPILE_OPTIONS_INVALID_PCH -Winvalid-pch)
+    endif()
+  endmacro()
+else()
+  # GNU-like
+  macro(__compiler_intel_llvm lang)
+    set(CMAKE_${lang}_VERBOSE_FLAG "-v")
+
+    string(APPEND CMAKE_${lang}_FLAGS_INIT " ")
+    string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -g")
+    string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -Os")
+    string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -O3")
+    string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -O2 -g")
+
+    set(_CMAKE_${lang}_PIE_MAY_BE_SUPPORTED_BY_LINKER YES)
+    set(CMAKE_${lang}_COMPILE_OPTIONS_PIC "-fPIC")
+    set(CMAKE_${lang}_COMPILE_OPTIONS_PIE "-fPIE")
+    set(CMAKE_${lang}_LINK_OPTIONS_PIE ${CMAKE_${lang}_COMPILE_OPTIONS_PIE} "-pie")
+    set(CMAKE_${lang}_LINK_OPTIONS_NO_PIE "-no-pie")
+
+    set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "-fPIC")
+    set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-shared")
+
+    set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Wl,")
+    set(CMAKE_${lang}_LINKER_WRAPPER_FLAG_SEP ",")
+
+    # distcc does not transform -o to -MT when invoking the preprocessor
+    # internally, as it ought to.  Work around this bug by setting -MT here
+    # even though it isn't strictly necessary.
+    set(CMAKE_DEPFILE_FLAGS_${lang} "-MD -MT <DEP_TARGET> -MF <DEP_FILE>")
+
+    set(CMAKE_INCLUDE_SYSTEM_FLAG_${lang} "-isystem ")
+    set(CMAKE_${lang}_COMPILE_OPTIONS_VISIBILITY "-fvisibility=")
+    set(CMAKE_${lang}_COMPILE_OPTIONS_TARGET "--target=")
+    set(CMAKE_${lang}_COMPILE_OPTIONS_SYSROOT "--sysroot=")
+    set(CMAKE_${lang}_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN "--gcc-toolchain=")
+    set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Xlinker" " ")
+    set(CMAKE_${lang}_LINKER_WRAPPER_FLAG_SEP)
+
+    set(_CMAKE_${lang}_IPO_SUPPORTED_BY_CMAKE YES)
+    set(_CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER YES)
+    set(CMAKE_${lang}_COMPILE_OPTIONS_IPO "-flto=thin")
+    set(CMAKE_${lang}_ARCHIVE_CREATE_IPO "\"${CMAKE_${lang}_COMPILER_AR}\" cr <TARGET> <LINK_FLAGS> <OBJECTS>")
+    set(CMAKE_${lang}_ARCHIVE_APPEND_IPO "\"${CMAKE_${lang}_COMPILER_AR}\" r <TARGET> <LINK_FLAGS> <OBJECTS>")
+    set(CMAKE_${lang}_ARCHIVE_FINISH_IPO "\"${CMAKE_${lang}_COMPILER_RANLIB}\" <TARGET>")
+
+    set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE "<CMAKE_${lang}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
+    set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE "<CMAKE_${lang}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>")
+
+    set(CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "${CMAKE_${lang}_COMPILER}")
+    if(CMAKE_${lang}_COMPILER_ARG1)
+      separate_arguments(_COMPILER_ARGS NATIVE_COMMAND "${CMAKE_${lang}_COMPILER_ARG1}")
+      list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND ${_COMPILER_ARGS})
+      unset(_COMPILER_ARGS)
+    endif()
+    list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "-dM" "-E" "-c" "${CMAKE_ROOT}/Modules/CMakeCXXCompilerABI.cpp")
+    if(CMAKE_${lang}_COMPILER_TARGET)
+      list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "--target=${CMAKE_${lang}_COMPILER_TARGET}")
+    endif()
+
+    if(NOT "x${lang}" STREQUAL "xFortran")
+      # Precompile Headers
+      set(CMAKE_PCH_EXTENSION .pch)
+      set(CMAKE_PCH_PROLOGUE "#pragma clang system_header")
+      set(CMAKE_${lang}_COMPILE_OPTIONS_INSTANTIATE_TEMPLATES_PCH -fpch-instantiate-templates)
+      set(CMAKE_${lang}_COMPILE_OPTIONS_INVALID_PCH -Winvalid-pch)
+      set(CMAKE_${lang}_COMPILE_OPTIONS_USE_PCH -Xclang -include-pch -Xclang <PCH_FILE> -Xclang -include -Xclang <PCH_HEADER>)
+      set(CMAKE_${lang}_COMPILE_OPTIONS_CREATE_PCH -Xclang -emit-pch -Xclang -include -Xclang <PCH_HEADER> -x ${__pch_header_${lang}})
+    endif()
+  endmacro()
+endif()
diff --git a/share/cmake-3.18/Modules/Compiler/MSVC-ASM.cmake b/share/cmake-3.22/Modules/Compiler/MSVC-ASM.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/MSVC-ASM.cmake
rename to share/cmake-3.22/Modules/Compiler/MSVC-ASM.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/MSVC-C-FeatureTests.cmake b/share/cmake-3.22/Modules/Compiler/MSVC-C-FeatureTests.cmake
new file mode 100644
index 0000000..4024c12
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/MSVC-C-FeatureTests.cmake
@@ -0,0 +1,7 @@
+set(_cmake_oldestSupported "_MSC_VER >= 1600")
+
+set(_cmake_feature_test_c_restrict "_MSC_VER >= 1927")
+set(_cmake_feature_test_c_static_assert "_MSC_VER >= 1928")
+
+set(_cmake_feature_test_c_variadic_macros "${_cmake_oldestSupported}")
+set(_cmake_feature_test_c_function_prototypes "${_cmake_oldestSupported}")
diff --git a/share/cmake-3.22/Modules/Compiler/MSVC-C.cmake b/share/cmake-3.22/Modules/Compiler/MSVC-C.cmake
new file mode 100644
index 0000000..a53df46
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/MSVC-C.cmake
@@ -0,0 +1,82 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+include(Compiler/CMakeCommonCompilerMacros)
+
+if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 19.27)
+  set(CMAKE_C90_STANDARD_COMPILE_OPTION "")
+  set(CMAKE_C90_EXTENSION_COMPILE_OPTION "")
+  set(CMAKE_C99_STANDARD_COMPILE_OPTION "")
+  set(CMAKE_C99_EXTENSION_COMPILE_OPTION "")
+  set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std:c11")
+  set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std:c11")
+
+  if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 19.28)
+    set(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT ON)
+    set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
+    set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
+    set(CMAKE_C17_STANDARD_COMPILE_OPTION "-std:c17")
+    set(CMAKE_C17_EXTENSION_COMPILE_OPTION "-std:c17")
+  else()
+    # Special case for 19.27 (VS 16.7): C11 has partial support.
+    macro(cmake_record_c_compile_features)
+      _has_compiler_features_c(90)
+      _has_compiler_features_c(99)
+      list(APPEND CMAKE_C11_COMPILE_FEATURES c_std_11)
+      set(_result 0) # expected by cmake_determine_compile_features
+    endmacro()
+  endif()
+
+  __compiler_check_default_language_standard(C 19.27 99)
+else()
+  # MSVC has no specific options to set C language standards, but set them as
+  # empty strings anyways so the feature test infrastructure can at least check
+  # to see if they are defined.
+  set(CMAKE_C90_STANDARD_COMPILE_OPTION "")
+  set(CMAKE_C90_EXTENSION_COMPILE_OPTION "")
+  set(CMAKE_C99_STANDARD_COMPILE_OPTION "")
+  set(CMAKE_C99_EXTENSION_COMPILE_OPTION "")
+  set(CMAKE_C11_STANDARD_COMPILE_OPTION "")
+  set(CMAKE_C11_EXTENSION_COMPILE_OPTION "")
+
+  # There is no meaningful default for this
+  set(CMAKE_C_STANDARD_DEFAULT "")
+
+  # There are no C compiler modes so we hard-code the known compiler supported
+  # features. Override the default macro for this special case.  Pretend that
+  # all language standards are available so that at least compilation
+  # can be attempted.
+  macro(cmake_record_c_compile_features)
+    list(APPEND CMAKE_C_COMPILE_FEATURES
+      c_std_90
+      c_std_99
+      c_std_11
+      c_std_17
+      c_std_23
+      c_function_prototypes
+      )
+    list(APPEND CMAKE_C90_COMPILE_FEATURES c_std_90 c_function_prototypes)
+    list(APPEND CMAKE_C99_COMPILE_FEATURES c_std_99)
+    list(APPEND CMAKE_C11_COMPILE_FEATURES c_std_11)
+    if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 14.0)
+      list(APPEND CMAKE_C_COMPILE_FEATURES c_variadic_macros)
+      list(APPEND CMAKE_C99_COMPILE_FEATURES c_variadic_macros)
+    endif()
+    set(_result 0) # expected by cmake_determine_compile_features
+  endmacro()
+endif()
+
+set(CMAKE_C_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -TC)
+set(CMAKE_C_CLANG_TIDY_DRIVER_MODE "cl")
+set(CMAKE_C_INCLUDE_WHAT_YOU_USE_DRIVER_MODE "cl")
+
+# /JMC "Just My Code" is only supported by MSVC 19.05 onward.
+if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 19.05)
+  set(CMAKE_C_COMPILE_OPTIONS_JMC "-JMC")
+endif()
+
+# The `/external:I` flag was made non-experimental in 19.29.30036.3.
+if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 19.29.30036.3)
+  set(CMAKE_INCLUDE_SYSTEM_FLAG_C "-external:I ")
+  set(_CMAKE_INCLUDE_SYSTEM_FLAG_C_WARNING "-external:W0 ")
+endif ()
diff --git a/share/cmake-3.18/Modules/Compiler/MSVC-CXX-FeatureTests.cmake b/share/cmake-3.22/Modules/Compiler/MSVC-CXX-FeatureTests.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/MSVC-CXX-FeatureTests.cmake
rename to share/cmake-3.22/Modules/Compiler/MSVC-CXX-FeatureTests.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/MSVC-CXX.cmake b/share/cmake-3.22/Modules/Compiler/MSVC-CXX.cmake
new file mode 100644
index 0000000..bcaec69
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/MSVC-CXX.cmake
@@ -0,0 +1,89 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+include(Compiler/CMakeCommonCompilerMacros)
+
+set(CMAKE_CXX_CLANG_TIDY_DRIVER_MODE "cl")
+set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE_DRIVER_MODE "cl")
+
+if ((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.0.24215.1 AND
+     CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.10) OR
+   CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.10.25017)
+
+  # VS 2015 Update 3 and above support language standard level flags,
+  # with the default and minimum level being C++14.
+  set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "")
+  set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "")
+  set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
+  set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "")
+  set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "")
+  set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std:c++14")
+  set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std:c++14")
+
+  if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.11.25505)
+    set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
+    set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
+    set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std:c++17")
+    set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std:c++17")
+  else()
+    set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std:c++latest")
+    set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std:c++latest")
+  endif()
+
+  if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.29.30129)
+    set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std:c++20")
+    set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std:c++20")
+    set(CMAKE_CXX23_STANDARD_COMPILE_OPTION "-std:c++latest")
+    set(CMAKE_CXX23_EXTENSION_COMPILE_OPTION "-std:c++latest")
+  elseif(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.12.25835)
+    set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std:c++latest")
+    set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std:c++latest")
+  endif()
+
+  __compiler_check_default_language_standard(CXX 19.0 14)
+
+elseif (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 16.0)
+  # MSVC has no specific options to set language standards, but set them as
+  # empty strings anyways so the feature test infrastructure can at least check
+  # to see if they are defined.
+  set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "")
+  set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "")
+  set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "")
+  set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "")
+  set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "")
+  set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "")
+  set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "")
+  set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "")
+  set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "")
+  set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "")
+
+  # There is no meaningful default for this
+  set(CMAKE_CXX_STANDARD_DEFAULT "")
+
+  # There are no compiler modes so we only need to test features once.
+  # Override the default macro for this special case.  Pretend that
+  # all language standards are available so that at least compilation
+  # can be attempted.
+  macro(cmake_record_cxx_compile_features)
+    list(APPEND CMAKE_CXX_COMPILE_FEATURES
+      cxx_std_98
+      cxx_std_11
+      cxx_std_14
+      cxx_std_17
+      cxx_std_20
+      cxx_std_23
+      )
+    _record_compiler_features(CXX "" CMAKE_CXX_COMPILE_FEATURES)
+  endmacro()
+endif()
+
+# /JMC "Just My Code" is only supported by MSVC 19.05 onward.
+if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.05)
+  set(CMAKE_CXX_COMPILE_OPTIONS_JMC "-JMC")
+endif()
+
+# The `/external:I` flag was made non-experimental in 19.29.30036.3.
+if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.29.30036.3)
+  set(CMAKE_INCLUDE_SYSTEM_FLAG_CXX "-external:I ")
+  set(_CMAKE_INCLUDE_SYSTEM_FLAG_CXX_WARNING "-external:W0 ")
+endif ()
diff --git a/share/cmake-3.18/Modules/Compiler/MSVC-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/MSVC-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/MSVC-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/MSVC-DetermineCompiler.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/NAG-Fortran.cmake b/share/cmake-3.22/Modules/Compiler/NAG-Fortran.cmake
new file mode 100644
index 0000000..a65fd2c
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/NAG-Fortran.cmake
@@ -0,0 +1,41 @@
+# Help CMAKE_PARSE_IMPLICIT_LINK_INFO detect NAG Fortran object files.
+if(NOT CMAKE_Fortran_COMPILER_WORKS AND NOT CMAKE_Fortran_COMPILER_FORCED)
+  message(CHECK_START "Detecting NAG Fortran directory")
+  # Run with -dryrun to see sample "link" line.
+  execute_process(
+    COMMAND ${CMAKE_Fortran_COMPILER} dummy.o -dryrun
+    OUTPUT_VARIABLE _dryrun
+    ERROR_VARIABLE _dryrun
+    )
+  # Match an object file.
+  string(REGEX MATCH "/[^ ]*/[^ /][^ /]*\\.o" _nag_obj "${_dryrun}")
+  if(_nag_obj)
+    # Parse object directory and convert to a regex.
+    string(REGEX REPLACE "/[^/]*$" "" _nag_dir "${_nag_obj}")
+    string(REGEX REPLACE "([][+.*()^])" "\\\\\\1" _nag_regex "${_nag_dir}")
+    set(CMAKE_Fortran_IMPLICIT_OBJECT_REGEX "^${_nag_regex}/")
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+      "Detecting NAG Fortran directory with -dryrun found\n"
+      "  object: ${_nag_obj}\n"
+      "  directory: ${_nag_dir}\n"
+      "  regex: ${CMAKE_Fortran_IMPLICIT_OBJECT_REGEX}\n"
+      "from output:\n${_dryrun}\n\n")
+    message(CHECK_PASS "${_nag_dir}")
+  else()
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+      "Detecting NAG Fortran directory with -dryrun failed:\n${_dryrun}\n\n")
+    message(CHECK_FAIL "failed")
+  endif()
+endif()
+
+set(CMAKE_Fortran_SUBMODULE_SEP ".")
+set(CMAKE_Fortran_SUBMODULE_EXT ".sub")
+set(CMAKE_Fortran_MODDIR_FLAG "-mdir ")
+set(CMAKE_Fortran_MODDIR_INCLUDE_FLAG "-I") # -mdir does not affect search path
+set(CMAKE_SHARED_LIBRARY_Fortran_FLAGS "-PIC")
+set(CMAKE_Fortran_FORMAT_FIXED_FLAG "-fixed")
+set(CMAKE_Fortran_FORMAT_FREE_FLAG "-free")
+set(CMAKE_Fortran_COMPILE_OPTIONS_PIC "-PIC")
+set(CMAKE_Fortran_COMPILE_OPTIONS_PIE "-PIC")
+set(CMAKE_Fortran_RESPONSE_FILE_LINK_FLAG "-Wl,@")
+set(CMAKE_Fortran_COMPILE_OPTIONS_PREPROCESS_ON "-fpp")
diff --git a/share/cmake-3.22/Modules/Compiler/NVHPC-C.cmake b/share/cmake-3.22/Modules/Compiler/NVHPC-C.cmake
new file mode 100644
index 0000000..9295abd
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/NVHPC-C.cmake
@@ -0,0 +1,23 @@
+include(Compiler/PGI-C)
+include(Compiler/NVHPC)
+
+# Needed so that we support `LANGUAGE` property correctly
+set(CMAKE_C_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -x c)
+
+if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 20.11)
+  set(CMAKE_C17_STANDARD_COMPILE_OPTION  -std=c17)
+  set(CMAKE_C17_EXTENSION_COMPILE_OPTION -std=gnu17)
+endif()
+
+if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 21.07)
+  set(CMAKE_DEPFILE_FLAGS_C "-MD -MT <DEP_TARGET> -MF <DEP_FILE>")
+  set(CMAKE_C_DEPFILE_FORMAT gcc)
+  set(CMAKE_C_DEPENDS_USE_COMPILER TRUE)
+else()
+  # Before NVHPC 21.07 the `-MD` flag implicitly
+  # implies `-E` and therefore compilation and dependency generation
+  # can't occur in the same invocation
+  set(CMAKE_C_DEPENDS_EXTRA_COMMANDS "<CMAKE_C_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -x c -M <SOURCE> -MT <OBJECT> -MD<DEP_FILE>")
+endif()
+
+__compiler_nvhpc(C)
diff --git a/share/cmake-3.22/Modules/Compiler/NVHPC-CXX.cmake b/share/cmake-3.22/Modules/Compiler/NVHPC-CXX.cmake
new file mode 100644
index 0000000..59ba7bf
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/NVHPC-CXX.cmake
@@ -0,0 +1,22 @@
+include(Compiler/PGI-CXX)
+include(Compiler/NVHPC)
+
+# Needed so that we support `LANGUAGE` property correctly
+set(CMAKE_CXX_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -x c++)
+
+if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 20.11)
+  set(CMAKE_CXX20_STANDARD_COMPILE_OPTION  -std=c++20)
+  set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION -std=gnu++20)
+endif()
+
+if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 21.07)
+  set(CMAKE_DEPFILE_FLAGS_CXX "-MD -MT <DEP_TARGET> -MF <DEP_FILE>")
+  set(CMAKE_CXX_DEPFILE_FORMAT gcc)
+  set(CMAKE_CXX_DEPENDS_USE_COMPILER TRUE)
+else()
+  # Before NVHPC 21.07 the `-MD` flag implicitly
+  # implies `-E` and therefore compilation and dependency generation
+  # can't occur in the same invocation
+  set(CMAKE_CXX_DEPENDS_EXTRA_COMMANDS "<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -x c++ -M <SOURCE> -MT <OBJECT> -MD<DEP_FILE>")
+endif()
+__compiler_nvhpc(CXX)
diff --git a/share/cmake-3.22/Modules/Compiler/NVHPC-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/NVHPC-DetermineCompiler.cmake
new file mode 100644
index 0000000..45b69e1
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/NVHPC-DetermineCompiler.cmake
@@ -0,0 +1,9 @@
+
+set(_compiler_id_pp_test "defined(__NVCOMPILER)")
+
+set(_compiler_id_version_compute "
+# define @PREFIX@COMPILER_VERSION_MAJOR @MACRO_DEC@(__NVCOMPILER_MAJOR__)
+# define @PREFIX@COMPILER_VERSION_MINOR @MACRO_DEC@(__NVCOMPILER_MINOR__)
+# if defined(__NVCOMPILER_PATCHLEVEL__)
+#  define @PREFIX@COMPILER_VERSION_PATCH @MACRO_DEC@(__NVCOMPILER_PATCHLEVEL__)
+# endif")
diff --git a/share/cmake-3.22/Modules/Compiler/NVHPC-Fortran.cmake b/share/cmake-3.22/Modules/Compiler/NVHPC-Fortran.cmake
new file mode 100644
index 0000000..59755b3
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/NVHPC-Fortran.cmake
@@ -0,0 +1,3 @@
+include(Compiler/PGI-Fortran)
+include(Compiler/NVHPC)
+__compiler_nvhpc(Fortran)
diff --git a/share/cmake-3.22/Modules/Compiler/NVHPC.cmake b/share/cmake-3.22/Modules/Compiler/NVHPC.cmake
new file mode 100644
index 0000000..b51bb43
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/NVHPC.cmake
@@ -0,0 +1,16 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# This module is shared by multiple languages; use include blocker.
+if(__COMPILER_NVHPC)
+  return()
+endif()
+set(__COMPILER_NVHPC 1)
+
+include(Compiler/PGI)
+
+macro(__compiler_nvhpc lang)
+  # Logic specific to NVHPC.
+  set(CMAKE_INCLUDE_SYSTEM_FLAG_${lang} "-isystem ")
+endmacro()
diff --git a/share/cmake-3.22/Modules/Compiler/NVIDIA-CUDA.cmake b/share/cmake-3.22/Modules/Compiler/NVIDIA-CUDA.cmake
new file mode 100644
index 0000000..c2fe42d
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/NVIDIA-CUDA.cmake
@@ -0,0 +1,140 @@
+include(Compiler/CMakeCommonCompilerMacros)
+
+set(CMAKE_CUDA_COMPILER_HAS_DEVICE_LINK_PHASE True)
+set(CMAKE_CUDA_VERBOSE_FLAG "-v")
+set(CMAKE_CUDA_VERBOSE_COMPILE_FLAG "-Xcompiler=-v")
+
+set(_CMAKE_COMPILE_AS_CUDA_FLAG "-x cu")
+set(_CMAKE_CUDA_PTX_FLAG "-ptx")
+set(_CMAKE_CUDA_DEVICE_CODE "-dc")
+
+if (CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL 10.2.89)
+  # The -forward-unknown-to-host-compiler flag was only
+  # added to nvcc in 10.2 so before that we had no good
+  # way to invoke the CUDA compiler and propagate unknown
+  # flags such as -pthread to the host compiler
+  set(_CMAKE_CUDA_EXTRA_FLAGS "-forward-unknown-to-host-compiler")
+else()
+  set(_CMAKE_CUDA_EXTRA_FLAGS "")
+endif()
+
+if(CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL "8.0.0")
+  set(_CMAKE_CUDA_EXTRA_DEVICE_LINK_FLAGS "-Wno-deprecated-gpu-targets")
+else()
+  set(_CMAKE_CUDA_EXTRA_DEVICE_LINK_FLAGS "")
+endif()
+
+if(CMAKE_CUDA_HOST_COMPILER AND NOT CMAKE_GENERATOR MATCHES "Visual Studio")
+  string(APPEND _CMAKE_CUDA_EXTRA_FLAGS " -ccbin=<CMAKE_CUDA_HOST_COMPILER>")
+endif()
+
+if (CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL 10.2.89)
+  # The -MD flag was only added to nvcc in 10.2 so
+  # before that we had to invoke the compiler twice
+  # to get header dependency information
+  set(CMAKE_DEPFILE_FLAGS_CUDA "-MD -MT <DEP_TARGET> -MF <DEP_FILE>")
+else()
+  set(CMAKE_CUDA_DEPENDS_EXTRA_COMMANDS "<CMAKE_CUDA_COMPILER> ${_CMAKE_CUDA_EXTRA_FLAGS} <DEFINES> <INCLUDES> <FLAGS> ${_CMAKE_COMPILE_AS_CUDA_FLAG} -M <SOURCE> -MT <OBJECT> -o <DEP_FILE>")
+endif()
+set(CMAKE_CUDA_DEPFILE_FORMAT gcc)
+if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+    AND CMAKE_GENERATOR MATCHES "Makefiles|WMake")
+  set(CMAKE_CUDA_DEPENDS_USE_COMPILER TRUE)
+endif()
+
+if(NOT "x${CMAKE_CUDA_SIMULATE_ID}" STREQUAL "xMSVC")
+  set(CMAKE_CUDA_COMPILE_OPTIONS_PIE -Xcompiler=-fPIE)
+  set(CMAKE_CUDA_COMPILE_OPTIONS_PIC -Xcompiler=-fPIC)
+  set(CMAKE_CUDA_COMPILE_OPTIONS_VISIBILITY -Xcompiler=-fvisibility=)
+  # CMAKE_SHARED_LIBRARY_CUDA_FLAGS is sent to the host linker so we
+  # don't need to forward it through nvcc.
+  set(CMAKE_SHARED_LIBRARY_CUDA_FLAGS -fPIC)
+  string(APPEND CMAKE_CUDA_FLAGS_INIT " ")
+  string(APPEND CMAKE_CUDA_FLAGS_DEBUG_INIT " -g")
+  string(APPEND CMAKE_CUDA_FLAGS_RELEASE_INIT " -O3 -DNDEBUG")
+  string(APPEND CMAKE_CUDA_FLAGS_MINSIZEREL_INIT " -O1 -DNDEBUG")
+  string(APPEND CMAKE_CUDA_FLAGS_RELWITHDEBINFO_INIT " -O2 -g -DNDEBUG")
+endif()
+set(CMAKE_SHARED_LIBRARY_CREATE_CUDA_FLAGS -shared)
+set(CMAKE_INCLUDE_SYSTEM_FLAG_CUDA -isystem=)
+
+if (CMAKE_CUDA_SIMULATE_ID STREQUAL "GNU")
+  set(CMAKE_CUDA_LINKER_WRAPPER_FLAG "-Wl,")
+  set(CMAKE_CUDA_LINKER_WRAPPER_FLAG_SEP ",")
+elseif(CMAKE_CUDA_SIMULATE_ID STREQUAL "Clang")
+  set(CMAKE_CUDA_LINKER_WRAPPER_FLAG "-Xlinker" " ")
+  set(CMAKE_CUDA_LINKER_WRAPPER_FLAG_SEP)
+endif()
+
+set(CMAKE_CUDA_DEVICE_COMPILER_WRAPPER_FLAG "-Xcompiler=")
+set(CMAKE_CUDA_DEVICE_COMPILER_WRAPPER_FLAG_SEP ",")
+set(CMAKE_CUDA_DEVICE_LINKER_WRAPPER_FLAG "-Xlinker=")
+set(CMAKE_CUDA_DEVICE_LINKER_WRAPPER_FLAG_SEP ",")
+
+set(CMAKE_CUDA_RUNTIME_LIBRARY_LINK_OPTIONS_STATIC  "cudadevrt;cudart_static")
+set(CMAKE_CUDA_RUNTIME_LIBRARY_LINK_OPTIONS_SHARED  "cudadevrt;cudart")
+set(CMAKE_CUDA_RUNTIME_LIBRARY_LINK_OPTIONS_NONE    "")
+
+if(UNIX AND NOT (CMAKE_SYSTEM_NAME STREQUAL "QNX"))
+  list(APPEND CMAKE_CUDA_RUNTIME_LIBRARY_LINK_OPTIONS_STATIC "rt" "pthread" "dl")
+endif()
+
+if("x${CMAKE_CUDA_SIMULATE_ID}" STREQUAL "xMSVC")
+  # MSVC requires c++14 as the minimum level
+  set(CMAKE_CUDA03_STANDARD_COMPILE_OPTION "")
+  set(CMAKE_CUDA03_EXTENSION_COMPILE_OPTION "")
+
+  # MSVC requires c++14 as the minimum level
+  set(CMAKE_CUDA11_STANDARD_COMPILE_OPTION "")
+  set(CMAKE_CUDA11_EXTENSION_COMPILE_OPTION "")
+
+  if (NOT CMAKE_CUDA_COMPILER_VERSION VERSION_LESS 9.0)
+    if(CMAKE_CUDA_SIMULATE_VERSION VERSION_GREATER_EQUAL 19.10.25017)
+      set(CMAKE_CUDA14_STANDARD_COMPILE_OPTION "-std=c++14")
+      set(CMAKE_CUDA14_EXTENSION_COMPILE_OPTION "-std=c++14")
+    else()
+      set(CMAKE_CUDA14_STANDARD_COMPILE_OPTION "")
+      set(CMAKE_CUDA14_EXTENSION_COMPILE_OPTION "")
+    endif()
+  endif()
+
+  if (NOT CMAKE_CUDA_COMPILER_VERSION VERSION_LESS 11.0)
+    if(CMAKE_CUDA_SIMULATE_VERSION VERSION_GREATER_EQUAL 19.11.25505)
+      set(CMAKE_CUDA17_STANDARD_COMPILE_OPTION "-std=c++17")
+      set(CMAKE_CUDA17_EXTENSION_COMPILE_OPTION "-std=c++17")
+    endif()
+  endif()
+
+else()
+  set(CMAKE_CUDA03_STANDARD_COMPILE_OPTION "")
+  set(CMAKE_CUDA03_EXTENSION_COMPILE_OPTION "")
+
+  set(CMAKE_CUDA11_STANDARD_COMPILE_OPTION "-std=c++11")
+  set(CMAKE_CUDA11_EXTENSION_COMPILE_OPTION "-std=c++11")
+
+  if (NOT CMAKE_CUDA_COMPILER_VERSION VERSION_LESS 9.0)
+    set(CMAKE_CUDA03_STANDARD_COMPILE_OPTION "-std=c++03")
+    set(CMAKE_CUDA03_EXTENSION_COMPILE_OPTION "-std=c++03")
+    set(CMAKE_CUDA14_STANDARD_COMPILE_OPTION "-std=c++14")
+    set(CMAKE_CUDA14_EXTENSION_COMPILE_OPTION "-std=c++14")
+  endif()
+
+  if (NOT CMAKE_CUDA_COMPILER_VERSION VERSION_LESS 11.0)
+    set(CMAKE_CUDA17_STANDARD_COMPILE_OPTION "-std=c++17")
+    set(CMAKE_CUDA17_EXTENSION_COMPILE_OPTION "-std=c++17")
+  endif()
+
+endif()
+
+# FIXME: investigate use of --options-file.
+# Tell Makefile generator that nvcc does not support @<rspfile> syntax.
+set(CMAKE_CUDA_USE_RESPONSE_FILE_FOR_INCLUDES 0)
+set(CMAKE_CUDA_USE_RESPONSE_FILE_FOR_LIBRARIES 0)
+set(CMAKE_CUDA_USE_RESPONSE_FILE_FOR_OBJECTS 0)
+
+if (CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL "9.0")
+  set(CMAKE_CUDA_RESPONSE_FILE_DEVICE_LINK_FLAG "--options-file ")
+  set(CMAKE_CUDA_RESPONSE_FILE_FLAG "--options-file ")
+endif()
+
+__compiler_check_default_language_standard(CUDA 6.0 03)
diff --git a/share/cmake-3.18/Modules/Compiler/NVIDIA-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/NVIDIA-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/NVIDIA-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/NVIDIA-DetermineCompiler.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/OpenWatcom-C.cmake b/share/cmake-3.22/Modules/Compiler/OpenWatcom-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/OpenWatcom-C.cmake
rename to share/cmake-3.22/Modules/Compiler/OpenWatcom-C.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/OpenWatcom-CXX.cmake b/share/cmake-3.22/Modules/Compiler/OpenWatcom-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/OpenWatcom-CXX.cmake
rename to share/cmake-3.22/Modules/Compiler/OpenWatcom-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/OpenWatcom.cmake b/share/cmake-3.22/Modules/Compiler/OpenWatcom.cmake
new file mode 100644
index 0000000..8cfe683
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/OpenWatcom.cmake
@@ -0,0 +1,119 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+# This module is shared by multiple languages; use include blocker.
+include_guard()
+
+set(CMAKE_LIBRARY_PATH_FLAG "libpath ")
+set(CMAKE_LINK_LIBRARY_FLAG "library ")
+set(CMAKE_LINK_LIBRARY_FILE_FLAG "library ")
+set(CMAKE_LINK_OBJECT_FILE_FLAG "file ")
+
+if(CMAKE_VERBOSE_MAKEFILE)
+  set(CMAKE_WCL_QUIET)
+  set(CMAKE_WLINK_QUIET)
+  set(CMAKE_LIB_QUIET)
+else()
+  set(CMAKE_WCL_QUIET "-zq")
+  set(CMAKE_WLINK_QUIET "option quiet")
+  set(CMAKE_LIB_QUIET "-q")
+endif()
+
+foreach(type CREATE_SHARED_LIBRARY CREATE_SHARED_MODULE LINK_EXECUTABLE)
+  set(CMAKE_C_${type}_USE_WATCOM_QUOTE 1)
+  set(CMAKE_CXX_${type}_USE_WATCOM_QUOTE 1)
+endforeach()
+
+foreach(type SHARED MODULE EXE)
+  # linker map file creation directives
+  string(APPEND CMAKE_${type}_LINKER_FLAGS_INIT " opt map")
+  # linker debug directives
+  string(APPEND CMAKE_${type}_LINKER_FLAGS_DEBUG_INIT " debug all")
+  string(APPEND CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO_INIT " debug all")
+endforeach()
+
+foreach(lang C CXX)
+  # warning level
+  string(APPEND CMAKE_${lang}_FLAGS_INIT " -w3")
+  # debug options
+  string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -d2")
+  string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -s -os -d0 -dNDEBUG")
+  string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -s -ot -d0 -dNDEBUG")
+  string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -s -ot -d1 -dNDEBUG")
+endforeach()
+
+# C create import library
+set(CMAKE_C_CREATE_IMPORT_LIBRARY
+  "<CMAKE_AR> -c -q -n -b <TARGET_IMPLIB> +<TARGET_QUOTED>")
+# C++ create import library
+set(CMAKE_CXX_CREATE_IMPORT_LIBRARY ${CMAKE_C_CREATE_IMPORT_LIBRARY})
+
+# C link a object files into an executable file
+set(CMAKE_C_LINK_EXECUTABLE
+  "<CMAKE_LINKER> ${CMAKE_WLINK_QUIET} name <TARGET> <LINK_FLAGS> file {<OBJECTS>} <LINK_LIBRARIES>")
+# C++ link a object files into an executable file
+set(CMAKE_CXX_LINK_EXECUTABLE ${CMAKE_C_LINK_EXECUTABLE})
+
+# C compile a file into an object file
+set(CMAKE_C_COMPILE_OBJECT
+  "<CMAKE_C_COMPILER> ${CMAKE_WCL_QUIET} -d+ <DEFINES> <INCLUDES> <FLAGS> -fo<OBJECT> -c -cc <SOURCE>")
+# C++ compile a file into an object file
+set(CMAKE_CXX_COMPILE_OBJECT
+  "<CMAKE_CXX_COMPILER> ${CMAKE_WCL_QUIET} -d+ <DEFINES> <INCLUDES> <FLAGS> -fo<OBJECT> -c -cc++ <SOURCE>")
+
+# C preprocess a source file
+set(CMAKE_C_CREATE_PREPROCESSED_SOURCE
+  "<CMAKE_C_COMPILER> ${CMAKE_WCL_QUIET} -d+ <DEFINES> <INCLUDES> <FLAGS> -fo<PREPROCESSED_SOURCE> -pl -cc <SOURCE>")
+# C++ preprocess a source file
+set(CMAKE_CXX_CREATE_PREPROCESSED_SOURCE
+  "<CMAKE_CXX_COMPILER> ${CMAKE_WCL_QUIET} -d+ <DEFINES> <INCLUDES> <FLAGS> -fo<PREPROCESSED_SOURCE> -pl -cc++ <SOURCE>")
+
+# C create a shared library
+set(CMAKE_C_CREATE_SHARED_LIBRARY
+  "<CMAKE_LINKER> ${CMAKE_WLINK_QUIET} name <TARGET> <LINK_FLAGS> option implib=<TARGET_IMPLIB> file {<OBJECTS>} <LINK_LIBRARIES>")
+# C++ create a shared library
+set(CMAKE_CXX_CREATE_SHARED_LIBRARY ${CMAKE_C_CREATE_SHARED_LIBRARY})
+
+# C create a shared module
+set(CMAKE_C_CREATE_SHARED_MODULE
+  "<CMAKE_LINKER> ${CMAKE_WLINK_QUIET} name <TARGET> <LINK_FLAGS> file {<OBJECTS>} <LINK_LIBRARIES>")
+# C++ create a shared module
+set(CMAKE_CXX_CREATE_SHARED_MODULE ${CMAKE_C_CREATE_SHARED_MODULE})
+
+# C create a static library
+set(CMAKE_C_CREATE_STATIC_LIBRARY
+  "<CMAKE_AR> ${CMAKE_LIB_QUIET} -c -n -b <TARGET_QUOTED> <LINK_FLAGS> <OBJECTS> ")
+# C++ create a static library
+set(CMAKE_CXX_CREATE_STATIC_LIBRARY ${CMAKE_C_CREATE_STATIC_LIBRARY})
+
+
+# old CMake internally used OpenWatcom version macros
+# for backward compatibility
+if(NOT _CMAKE_WATCOM_VERSION)
+  set(_CMAKE_WATCOM_VERSION 1)
+  if(CMAKE_C_COMPILER_VERSION)
+    set(_compiler_version ${CMAKE_C_COMPILER_VERSION})
+    set(_compiler_id ${CMAKE_C_COMPILER_ID})
+  else()
+    set(_compiler_version ${CMAKE_CXX_COMPILER_VERSION})
+    set(_compiler_id ${CMAKE_CXX_COMPILER_ID})
+  endif()
+  set(WATCOM16)
+  set(WATCOM17)
+  set(WATCOM18)
+  set(WATCOM19)
+  if("${_compiler_id}" STREQUAL "OpenWatcom")
+    if("${_compiler_version}" VERSION_LESS 1.7)
+      set(WATCOM16 1)
+    endif()
+    if("${_compiler_version}" VERSION_EQUAL 1.7)
+      set(WATCOM17 1)
+    endif()
+    if("${_compiler_version}" VERSION_EQUAL 1.8)
+      set(WATCOM18 1)
+    endif()
+    if("${_compiler_version}" VERSION_EQUAL 1.9)
+      set(WATCOM19 1)
+    endif()
+  endif()
+endif()
diff --git a/share/cmake-3.18/Modules/Compiler/PGI-C.cmake b/share/cmake-3.22/Modules/Compiler/PGI-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/PGI-C.cmake
rename to share/cmake-3.22/Modules/Compiler/PGI-C.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/PGI-CXX.cmake b/share/cmake-3.22/Modules/Compiler/PGI-CXX.cmake
new file mode 100644
index 0000000..1279c19
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/PGI-CXX.cmake
@@ -0,0 +1,28 @@
+include(Compiler/PGI)
+__compiler_pgi(CXX)
+string(APPEND CMAKE_CXX_FLAGS_MINSIZEREL_INIT " -DNDEBUG")
+string(APPEND CMAKE_CXX_FLAGS_RELEASE_INIT " -DNDEBUG")
+
+if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 12.10)
+  set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "")
+  set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION --gnu_extensions)
+  set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
+  if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13.10)
+    set(CMAKE_CXX98_STANDARD_COMPILE_OPTION --c++03)
+    set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION --c++03 --gnu_extensions)
+    set(CMAKE_CXX11_STANDARD_COMPILE_OPTION  --c++11)
+    set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION --c++11 --gnu_extensions)
+    set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
+    if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 15.7)
+      set(CMAKE_CXX14_STANDARD_COMPILE_OPTION  --c++14)
+      set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION --c++14 --gnu_extensions)
+      set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
+      if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 17.1)
+        set(CMAKE_CXX17_STANDARD_COMPILE_OPTION  --c++17)
+        set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION --c++17 --gnu_extensions)
+      endif()
+    endif()
+  endif()
+endif()
+
+__compiler_check_default_language_standard(CXX 12.10 98)
diff --git a/share/cmake-3.18/Modules/Compiler/PGI-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/PGI-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/PGI-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/PGI-DetermineCompiler.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/PGI-Fortran.cmake b/share/cmake-3.22/Modules/Compiler/PGI-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/PGI-Fortran.cmake
rename to share/cmake-3.22/Modules/Compiler/PGI-Fortran.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/PGI.cmake b/share/cmake-3.22/Modules/Compiler/PGI.cmake
new file mode 100644
index 0000000..d111be9
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/PGI.cmake
@@ -0,0 +1,42 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# This module is shared by multiple languages; use include blocker.
+if(__COMPILER_PGI)
+  return()
+endif()
+set(__COMPILER_PGI 1)
+
+include(Compiler/CMakeCommonCompilerMacros)
+
+macro(__compiler_pgi lang)
+  # Feature flags.
+  set(CMAKE_${lang}_VERBOSE_FLAG "-v")
+
+  # Initial configuration flags.
+  string(APPEND CMAKE_${lang}_FLAGS_INIT " ")
+  string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -g -O0")
+  string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -O2 -s")
+  string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -fast -O3")
+  string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -O2 -gopt")
+
+  if(CMAKE_HOST_WIN32)
+    string(APPEND CMAKE_${lang}_FLAGS_INIT " -Bdynamic")
+  endif()
+
+  set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Wl,")
+  set(CMAKE_${lang}_LINKER_WRAPPER_FLAG_SEP ",")
+
+  set(_CMAKE_${lang}_IPO_SUPPORTED_BY_CMAKE YES)
+  if(NOT CMAKE_SYSTEM_PROCESSOR STREQUAL ppc64le AND (NOT CMAKE_HOST_WIN32 OR CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 16.3))
+    set(_CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER YES)
+    set(CMAKE_${lang}_COMPILE_OPTIONS_IPO "-Mipa=fast,inline")
+  else()
+    set(_CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER NO)
+  endif()
+
+  # Preprocessing and assembly rules.
+  set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE "<CMAKE_${lang}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
+  set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE "<CMAKE_${lang}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>")
+endmacro()
diff --git a/share/cmake-3.18/Modules/Compiler/PathScale-C.cmake b/share/cmake-3.22/Modules/Compiler/PathScale-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/PathScale-C.cmake
rename to share/cmake-3.22/Modules/Compiler/PathScale-C.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/PathScale-CXX.cmake b/share/cmake-3.22/Modules/Compiler/PathScale-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/PathScale-CXX.cmake
rename to share/cmake-3.22/Modules/Compiler/PathScale-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/PathScale-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/PathScale-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/PathScale-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/PathScale-DetermineCompiler.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/PathScale-Fortran.cmake b/share/cmake-3.22/Modules/Compiler/PathScale-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/PathScale-Fortran.cmake
rename to share/cmake-3.22/Modules/Compiler/PathScale-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/PathScale.cmake b/share/cmake-3.22/Modules/Compiler/PathScale.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/PathScale.cmake
rename to share/cmake-3.22/Modules/Compiler/PathScale.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/QCC-ASM.cmake b/share/cmake-3.22/Modules/Compiler/QCC-ASM.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/QCC-ASM.cmake
rename to share/cmake-3.22/Modules/Compiler/QCC-ASM.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/QCC-C-FeatureTests.cmake b/share/cmake-3.22/Modules/Compiler/QCC-C-FeatureTests.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/QCC-C-FeatureTests.cmake
rename to share/cmake-3.22/Modules/Compiler/QCC-C-FeatureTests.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/QCC-C.cmake b/share/cmake-3.22/Modules/Compiler/QCC-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/QCC-C.cmake
rename to share/cmake-3.22/Modules/Compiler/QCC-C.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/QCC-CXX-FeatureTests.cmake b/share/cmake-3.22/Modules/Compiler/QCC-CXX-FeatureTests.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/QCC-CXX-FeatureTests.cmake
rename to share/cmake-3.22/Modules/Compiler/QCC-CXX-FeatureTests.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/QCC-CXX.cmake b/share/cmake-3.22/Modules/Compiler/QCC-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/QCC-CXX.cmake
rename to share/cmake-3.22/Modules/Compiler/QCC-CXX.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/QCC.cmake b/share/cmake-3.22/Modules/Compiler/QCC.cmake
new file mode 100644
index 0000000..7fbfd10
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/QCC.cmake
@@ -0,0 +1,37 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+include(Compiler/GNU)
+
+macro(__compiler_qcc lang)
+  __compiler_gnu(${lang})
+
+  # http://www.qnx.com/developers/docs/6.4.0/neutrino/utilities/q/qcc.html#examples
+  set(CMAKE_${lang}_COMPILE_OPTIONS_TARGET "-V")
+
+  set(CMAKE_PREFIX_LIBRARY_ARCHITECTURE "ON")
+
+  set(CMAKE_${lang}_COMPILE_OPTIONS_SYSROOT "-Wc,-isysroot,")
+  set(CMAKE_INCLUDE_SYSTEM_FLAG_${lang} "-Wp,-isystem,")
+  set(CMAKE_DEPFILE_FLAGS_${lang} "-Wp,-MD,<DEP_FILE> -Wp,-MT,<DEP_TARGET> -Wp,-MF,<DEP_FILE>")
+
+  set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Wl,")
+  set(CMAKE_${lang}_LINKER_WRAPPER_FLAG_SEP ",")
+
+  set(_CMAKE_${lang}_IPO_SUPPORTED_BY_CMAKE NO)
+  set(_CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER NO)
+
+  set(CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "${CMAKE_${lang}_COMPILER}")
+  if(CMAKE_${lang}_COMPILER_ARG1)
+    separate_arguments(_COMPILER_ARGS NATIVE_COMMAND "${CMAKE_${lang}_COMPILER_ARG1}")
+    list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND ${_COMPILER_ARGS})
+    unset(_COMPILER_ARGS)
+  endif()
+  list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "-Wp,-dM" "-E" "-c" "${CMAKE_ROOT}/Modules/CMakeCXXCompilerABI.cpp")
+
+  unset(CMAKE_${lang}_COMPILE_OPTIONS_IPO)
+  unset(CMAKE_${lang}_ARCHIVE_CREATE_IPO)
+  unset(CMAKE_${lang}_ARCHIVE_APPEND_IPO)
+  unset(CMAKE_${lang}_ARCHIVE_FINISH_IPO)
+endmacro()
diff --git a/share/cmake-3.18/Modules/Compiler/SCO-C.cmake b/share/cmake-3.22/Modules/Compiler/SCO-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/SCO-C.cmake
rename to share/cmake-3.22/Modules/Compiler/SCO-C.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/SCO-CXX.cmake b/share/cmake-3.22/Modules/Compiler/SCO-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/SCO-CXX.cmake
rename to share/cmake-3.22/Modules/Compiler/SCO-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/SCO-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/SCO-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/SCO-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/SCO-DetermineCompiler.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/SCO.cmake b/share/cmake-3.22/Modules/Compiler/SCO.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/SCO.cmake
rename to share/cmake-3.22/Modules/Compiler/SCO.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/SDCC-C-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/SDCC-C-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/SDCC-C-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/SDCC-C-DetermineCompiler.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/SunPro-ASM.cmake b/share/cmake-3.22/Modules/Compiler/SunPro-ASM.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/SunPro-ASM.cmake
rename to share/cmake-3.22/Modules/Compiler/SunPro-ASM.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/SunPro-C-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/SunPro-C-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/SunPro-C-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/SunPro-C-DetermineCompiler.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/SunPro-C-FeatureTests.cmake b/share/cmake-3.22/Modules/Compiler/SunPro-C-FeatureTests.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/SunPro-C-FeatureTests.cmake
rename to share/cmake-3.22/Modules/Compiler/SunPro-C-FeatureTests.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/SunPro-C.cmake b/share/cmake-3.22/Modules/Compiler/SunPro-C.cmake
new file mode 100644
index 0000000..c98656f
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/SunPro-C.cmake
@@ -0,0 +1,59 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+include(Compiler/SunPro)
+
+set(CMAKE_C_VERBOSE_FLAG "-#")
+
+set(CMAKE_C_COMPILE_OPTIONS_PIC -KPIC)
+set(CMAKE_C_COMPILE_OPTIONS_PIE "")
+set(_CMAKE_C_PIE_MAY_BE_SUPPORTED_BY_LINKER NO)
+set(CMAKE_C_LINK_OPTIONS_PIE "")
+set(CMAKE_C_LINK_OPTIONS_NO_PIE "")
+set(CMAKE_SHARED_LIBRARY_C_FLAGS "-KPIC")
+set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-G")
+set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-R")
+set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP ":")
+set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-h")
+
+string(APPEND CMAKE_C_FLAGS_INIT " ")
+string(APPEND CMAKE_C_FLAGS_DEBUG_INIT " -g")
+string(APPEND CMAKE_C_FLAGS_MINSIZEREL_INIT " -xO2 -xspace -DNDEBUG")
+string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " -xO3 -DNDEBUG")
+string(APPEND CMAKE_C_FLAGS_RELWITHDEBINFO_INIT " -g -xO2 -DNDEBUG")
+
+set(CMAKE_DEPFILE_FLAGS_C "-xMD -xMF <DEP_FILE>")
+
+# Initialize C link type selection flags.  These flags are used when
+# building a shared library, shared module, or executable that links
+# to other libraries to select whether to use the static or shared
+# versions of the libraries.
+foreach(type SHARED_LIBRARY SHARED_MODULE EXE)
+  set(CMAKE_${type}_LINK_STATIC_C_FLAGS "-Bstatic")
+  set(CMAKE_${type}_LINK_DYNAMIC_C_FLAGS "-Bdynamic")
+endforeach()
+
+set(CMAKE_C_LINKER_WRAPPER_FLAG "-Qoption" "ld" " ")
+set(CMAKE_C_LINKER_WRAPPER_FLAG_SEP ",")
+
+if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 5.13)
+  set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c89")
+  set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=c89")
+  set(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT ON)
+  set(CMAKE_C99_STANDARD_COMPILE_OPTION "-std=c99")
+  set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-std=c99")
+  set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
+  set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
+  set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=c11")
+  set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
+elseif (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 5.11)
+  set(CMAKE_C90_STANDARD_COMPILE_OPTION "")
+  set(CMAKE_C90_EXTENSION_COMPILE_OPTION "")
+  set(CMAKE_C99_STANDARD_COMPILE_OPTION "-xc99")
+  set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-xc99")
+endif()
+
+__compiler_check_default_language_standard(C 5.11 90 5.14 11)
+
+set(CMAKE_C_CREATE_PREPROCESSED_SOURCE "<CMAKE_C_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
+set(CMAKE_C_CREATE_ASSEMBLY_SOURCE "<CMAKE_C_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>")
diff --git a/share/cmake-3.18/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/SunPro-CXX-FeatureTests.cmake b/share/cmake-3.22/Modules/Compiler/SunPro-CXX-FeatureTests.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/SunPro-CXX-FeatureTests.cmake
rename to share/cmake-3.22/Modules/Compiler/SunPro-CXX-FeatureTests.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/SunPro-CXX.cmake b/share/cmake-3.22/Modules/Compiler/SunPro-CXX.cmake
new file mode 100644
index 0000000..aa8a9c5
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/SunPro-CXX.cmake
@@ -0,0 +1,66 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+include(Compiler/SunPro)
+
+set(CMAKE_CXX_VERBOSE_FLAG "-v")
+
+set(CMAKE_CXX_COMPILE_OPTIONS_PIC -KPIC)
+set(CMAKE_CXX_COMPILE_OPTIONS_PIE "")
+set(_CMAKE_CXX_PIE_MAY_BE_SUPPORTED_BY_LINKER NO)
+set(CMAKE_CXX_LINK_OPTIONS_PIE "")
+set(CMAKE_CXX_LINK_OPTIONS_NO_PIE "")
+set(CMAKE_SHARED_LIBRARY_CXX_FLAGS "-KPIC")
+set(CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS "-G")
+set(CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG "-R")
+set(CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG_SEP ":")
+set(CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG "-h")
+
+string(APPEND CMAKE_CXX_FLAGS_INIT " ")
+string(APPEND CMAKE_CXX_FLAGS_DEBUG_INIT " -g")
+string(APPEND CMAKE_CXX_FLAGS_MINSIZEREL_INIT " -xO2 -xspace -DNDEBUG")
+string(APPEND CMAKE_CXX_FLAGS_RELEASE_INIT " -xO3 -DNDEBUG")
+string(APPEND CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT " -g -xO2 -DNDEBUG")
+
+set(CMAKE_DEPFILE_FLAGS_CXX "-xMD -xMF <DEP_FILE>")
+
+# Initialize C link type selection flags.  These flags are used when
+# building a shared library, shared module, or executable that links
+# to other libraries to select whether to use the static or shared
+# versions of the libraries.
+foreach(type SHARED_LIBRARY SHARED_MODULE EXE)
+  set(CMAKE_${type}_LINK_STATIC_CXX_FLAGS "-Bstatic")
+  set(CMAKE_${type}_LINK_DYNAMIC_CXX_FLAGS "-Bdynamic")
+endforeach()
+
+set(CMAKE_CXX_LINKER_WRAPPER_FLAG "-Qoption" "ld" " ")
+set(CMAKE_CXX_LINKER_WRAPPER_FLAG_SEP ",")
+
+set(CMAKE_CXX_CREATE_PREPROCESSED_SOURCE "<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
+set(CMAKE_CXX_CREATE_ASSEMBLY_SOURCE "<CMAKE_CXX_COMPILER> <INCLUDES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>")
+
+# Create archives with "CC -xar" in case user adds "-instances=extern"
+# so that template instantiations are available to archive members.
+set(CMAKE_CXX_CREATE_STATIC_LIBRARY
+  "<CMAKE_CXX_COMPILER> -xar -o <TARGET> <OBJECTS> "
+  "<CMAKE_RANLIB> <TARGET> ")
+
+if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.13)
+  set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "-std=c++03")
+  set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "-std=c++03")
+  set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
+  set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++11")
+  set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=c++11")
+  set(CMAKE_CXX_LINK_WITH_STANDARD_COMPILE_OPTION 1)
+
+  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.14)
+    set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++14")
+    set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=c++14")
+  endif()
+else()
+  set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "-library=stlport4")
+  set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "-library=stlport4")
+  set(CMAKE_CXX_LINK_WITH_STANDARD_COMPILE_OPTION 1)
+endif()
+
+__compiler_check_default_language_standard(CXX 1 98)
diff --git a/share/cmake-3.18/Modules/Compiler/SunPro-Fortran.cmake b/share/cmake-3.22/Modules/Compiler/SunPro-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/SunPro-Fortran.cmake
rename to share/cmake-3.22/Modules/Compiler/SunPro-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/SunPro.cmake b/share/cmake-3.22/Modules/Compiler/SunPro.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/SunPro.cmake
rename to share/cmake-3.22/Modules/Compiler/SunPro.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/TI-ASM.cmake b/share/cmake-3.22/Modules/Compiler/TI-ASM.cmake
new file mode 100644
index 0000000..01965d2
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/TI-ASM.cmake
@@ -0,0 +1,4 @@
+include(Compiler/TI)
+__compiler_ti(ASM)
+
+set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS asm;s;abs)
diff --git a/share/cmake-3.22/Modules/Compiler/TI-C.cmake b/share/cmake-3.22/Modules/Compiler/TI-C.cmake
new file mode 100644
index 0000000..bd88989
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/TI-C.cmake
@@ -0,0 +1,67 @@
+include(Compiler/TI)
+__compiler_ti(C)
+
+# Architecture specific
+# C99 versions: https://processors.wiki.ti.com/index.php/C99_Support_in_TI_Compilers
+
+if("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "ARM")
+  set(__COMPILER_TI_C99_VERSION_ARM 5.2)
+  set(__COMPILER_TI_C11_VERSION_ARM 18.12)
+
+elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "MSP430")
+  set(__COMPILER_TI_C99_VERSION_MSP430 4.3)
+  set(__COMPILER_TI_C11_VERSION_MSP430 18.12)
+
+elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "TMS320C28x")
+  set(__COMPILER_TI_C99_VERSION_TMS320C28x 6.3)
+  set(__COMPILER_TI_C11_VERSION_TMS320C28x 18.9)
+
+elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "TMS320C6x")
+  set(__COMPILER_TI_C99_VERSION_TMS320C6x 7.5)
+
+else()
+  # architecture not handled
+  return()
+
+endif()
+
+
+if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "${__COMPILER_TI_C99_VERSION_${CMAKE_C_COMPILER_ARCHITECTURE_ID}}")
+
+  set(CMAKE_C90_STANDARD_COMPILE_OPTION "--c89" "--strict_ansi")
+  set(CMAKE_C90_EXTENSION_COMPILE_OPTION "--c89" "--relaxed_ansi")
+
+  set(CMAKE_C99_STANDARD_COMPILE_OPTION "--c99" "--strict_ansi")
+  set(CMAKE_C99_EXTENSION_COMPILE_OPTION "--c99" "--relaxed_ansi")
+
+  if(DEFINED __COMPILER_TI_C11_VERSION_${CMAKE_C_COMPILER_ARCHITECTURE_ID} AND
+     CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "${__COMPILER_TI_C11_VERSION_${CMAKE_C_COMPILER_ARCHITECTURE_ID}}")
+
+    set(CMAKE_C11_STANDARD_COMPILE_OPTION "--c11" "--strict_ansi")
+    set(CMAKE_C11_EXTENSION_COMPILE_OPTION "--c11" "--relaxed_ansi")
+
+  endif()
+
+else()
+
+  set(CMAKE_C90_STANDARD_COMPILE_OPTION "--strict_ansi")
+  set(CMAKE_C90_EXTENSION_COMPILE_OPTION "--relaxed_ansi")
+
+endif()
+
+
+# Architecture specific
+
+if("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "ARM")
+  __compiler_check_default_language_standard(C 2.0 90)
+
+elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "MSP430")
+  __compiler_check_default_language_standard(C 3.0 90)
+
+elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "TMS320C28x")
+  __compiler_check_default_language_standard(C 4.1 90)
+
+elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "TMS320C6x")
+  __compiler_check_default_language_standard(C 4.45 90)
+
+endif()
diff --git a/share/cmake-3.22/Modules/Compiler/TI-CXX.cmake b/share/cmake-3.22/Modules/Compiler/TI-CXX.cmake
new file mode 100644
index 0000000..4b6efcd
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/TI-CXX.cmake
@@ -0,0 +1,71 @@
+include(Compiler/TI)
+__compiler_ti(CXX)
+
+# Architecture specific
+
+if("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "ARM")
+  set(__COMPILER_TI_CXX03_VERSION 5.2)
+  set(__COMPILER_TI_CXX14_VERSION 18.1)
+
+elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "MSP430")
+  set(__COMPILER_TI_CXX03_VERSION 4.4)
+  set(__COMPILER_TI_CXX14_VERSION 18.1)
+
+elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "TMS320C28x")
+  set(__COMPILER_TI_CXX03_VERSION 16.9)
+
+elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "TMS320C6x")
+  set(__COMPILER_TI_CXX03_VERSION 8.1)
+  set(__COMPILER_TI_CXX14_VERSION 8.3)
+
+else()
+  # architecture not handled
+  return()
+
+endif()
+
+
+if(DEFINED __COMPILER_TI_CXX14_VERSION AND
+   CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "${__COMPILER_TI_CXX14_VERSION}")
+
+  # C++03 is not supported anymore
+  set(CMAKE_CXX98_STANDARD_COMPILE_OPTION  "--strict_ansi")
+  set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "--relaxed_ansi")
+
+  # C++11 was never supported
+  set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "--strict_ansi")
+  set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "--relaxed_ansi")
+
+  set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "--c++14" "--strict_ansi")
+  set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "--c++14" "--relaxed_ansi")
+
+
+elseif(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "${__COMPILER_TI_CXX03_VERSION}")
+
+  set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "--c++03" "--strict_ansi")
+  set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "--c++03" "--relaxed_ansi")
+
+else()
+
+  set(CMAKE_CXX98_STANDARD_COMPILE_OPTION  "--strict_ansi")
+  set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "--relaxed_ansi")
+
+endif()
+
+
+# Architecture specific
+# CXX98 versions: https://processors.wiki.ti.com/index.php/C%2B%2B_Support_in_TI_Compilers
+
+if("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "ARM")
+  __compiler_check_default_language_standard(CXX 4.5 98 ${__COMPILER_TI_CXX14_VERSION} 14)
+
+elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "MSP430")
+  __compiler_check_default_language_standard(CXX 3.0 98 ${__COMPILER_TI_CXX14_VERSION} 14)
+
+elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "TMS320C28x")
+  __compiler_check_default_language_standard(CXX 5.1 98)
+
+elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "TMS320C6x")
+  __compiler_check_default_language_standard(CXX 6.1 98 ${__COMPILER_TI_CXX14_VERSION} 14)
+
+endif()
diff --git a/share/cmake-3.18/Modules/Compiler/TI-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/TI-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/TI-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/TI-DetermineCompiler.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/TI.cmake b/share/cmake-3.22/Modules/Compiler/TI.cmake
new file mode 100644
index 0000000..0f9ded3
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/TI.cmake
@@ -0,0 +1,40 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# This module is shared by multiple languages; use include blocker.
+if(__COMPILER_TI)
+  return()
+endif()
+set(__COMPILER_TI 1)
+
+include(Compiler/CMakeCommonCompilerMacros)
+
+set(__COMPILER_TI_SOURCE_FLAG_C   "--c_file")
+set(__COMPILER_TI_SOURCE_FLAG_CXX "--cpp_file")
+set(__COMPILER_TI_SOURCE_FLAG_ASM "--asm_file")
+
+macro(__compiler_ti lang)
+  set(CMAKE_${lang}_RESPONSE_FILE_FLAG "--cmd_file=")
+  # Using --cmd_file flag is not possible after the --run_linker flag.
+  # By using a whitespace only the filename is used without flag.
+  # That file is interpreted as linker command file which may contain files to link.
+  set(CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG " ")
+
+  set(CMAKE_INCLUDE_FLAG_${lang} "--include_path=")
+  set(CMAKE_DEPFILE_FLAGS_${lang} "--preproc_with_compile --preproc_dependency=<DEP_FILE>")
+
+  set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE "<CMAKE_${lang}_COMPILER> --preproc_only ${__COMPILER_TI_SOURCE_FLAG_${lang}}=<SOURCE> <DEFINES> <INCLUDES> <FLAGS> --output_file=<PREPROCESSED_SOURCE>")
+  set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE     "<CMAKE_${lang}_COMPILER> --compile_only --skip_assembler ${__COMPILER_TI_SOURCE_FLAG_${lang}}=<SOURCE> <DEFINES> <INCLUDES> <FLAGS> --output_file=<ASSEMBLY_SOURCE>")
+
+  set(CMAKE_${lang}_COMPILE_OBJECT  "<CMAKE_${lang}_COMPILER> --compile_only ${__COMPILER_TI_SOURCE_FLAG_${lang}}=<SOURCE> <DEFINES> <INCLUDES> <FLAGS> --output_file=<OBJECT>")
+
+  set(CMAKE_${lang}_ARCHIVE_CREATE "<CMAKE_AR> qr <TARGET> <OBJECTS>")
+  set(CMAKE_${lang}_ARCHIVE_APPEND "<CMAKE_AR> qa <TARGET> <OBJECTS>")
+  set(CMAKE_${lang}_ARCHIVE_FINISH "")
+
+  set(CMAKE_${lang}_LINK_EXECUTABLE "<CMAKE_${lang}_COMPILER> <FLAGS> --run_linker --output_file=<TARGET> --map_file=<TARGET_NAME>.map <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> <LINK_LIBRARIES>")
+endmacro()
+
+set(CMAKE_LIBRARY_PATH_FLAG "--search_path=")
+set(CMAKE_LINK_LIBRARY_FLAG "--library=")
diff --git a/share/cmake-3.18/Modules/Compiler/TinyCC-C-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/TinyCC-C-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/TinyCC-C-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/TinyCC-C-DetermineCompiler.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/TinyCC-C.cmake b/share/cmake-3.22/Modules/Compiler/TinyCC-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/TinyCC-C.cmake
rename to share/cmake-3.22/Modules/Compiler/TinyCC-C.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/VisualAge-C-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/VisualAge-C-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/VisualAge-C-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/VisualAge-C-DetermineCompiler.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/VisualAge-C.cmake b/share/cmake-3.22/Modules/Compiler/VisualAge-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/VisualAge-C.cmake
rename to share/cmake-3.22/Modules/Compiler/VisualAge-C.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/VisualAge-CXX.cmake b/share/cmake-3.22/Modules/Compiler/VisualAge-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/VisualAge-CXX.cmake
rename to share/cmake-3.22/Modules/Compiler/VisualAge-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/VisualAge-Fortran.cmake b/share/cmake-3.22/Modules/Compiler/VisualAge-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/VisualAge-Fortran.cmake
rename to share/cmake-3.22/Modules/Compiler/VisualAge-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/Watcom-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/Watcom-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/Watcom-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/Watcom-DetermineCompiler.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/XL-ASM.cmake b/share/cmake-3.22/Modules/Compiler/XL-ASM.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/XL-ASM.cmake
rename to share/cmake-3.22/Modules/Compiler/XL-ASM.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/XL-C-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/XL-C-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/XL-C-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/XL-C-DetermineCompiler.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/XL-C.cmake b/share/cmake-3.22/Modules/Compiler/XL-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/XL-C.cmake
rename to share/cmake-3.22/Modules/Compiler/XL-C.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/XL-CXX-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/XL-CXX-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/XL-CXX-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/XL-CXX-DetermineCompiler.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/XL-CXX.cmake b/share/cmake-3.22/Modules/Compiler/XL-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/XL-CXX.cmake
rename to share/cmake-3.22/Modules/Compiler/XL-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/XL-Fortran.cmake b/share/cmake-3.22/Modules/Compiler/XL-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/XL-Fortran.cmake
rename to share/cmake-3.22/Modules/Compiler/XL-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/XL-Fortran/cpp b/share/cmake-3.22/Modules/Compiler/XL-Fortran/cpp
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/XL-Fortran/cpp
rename to share/cmake-3.22/Modules/Compiler/XL-Fortran/cpp
diff --git a/share/cmake-3.22/Modules/Compiler/XL.cmake b/share/cmake-3.22/Modules/Compiler/XL.cmake
new file mode 100644
index 0000000..8b9d4a9
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/XL.cmake
@@ -0,0 +1,34 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# This module is shared by multiple languages; use include blocker.
+if(__COMPILER_XL)
+  return()
+endif()
+set(__COMPILER_XL 1)
+
+include(Compiler/CMakeCommonCompilerMacros)
+
+macro(__compiler_xl lang)
+  # Feature flags.
+  set(CMAKE_${lang}_VERBOSE_FLAG "-V")
+  set(CMAKE_${lang}_COMPILE_OPTIONS_PIC "-qpic")
+  set(CMAKE_${lang}_COMPILE_OPTIONS_PIE "-qpic")
+  set(CMAKE_${lang}_RESPONSE_FILE_FLAG "-qoptfile=")
+  set(CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG "-qoptfile=")
+
+  set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-qmkshrobj")
+
+  set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Wl,")
+  set(CMAKE_${lang}_LINKER_WRAPPER_FLAG_SEP ",")
+
+  string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -g")
+  string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -O")
+  string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -O")
+  string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -g")
+  set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE "<CMAKE_${lang}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
+  set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE     "<CMAKE_${lang}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>")
+
+  set(CMAKE_DEPFILE_FLAGS_${lang} "-MF <DEP_FILE> -qmakedep=gcc")
+endmacro()
diff --git a/share/cmake-3.18/Modules/Compiler/XLClang-C-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/XLClang-C-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/XLClang-C-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/XLClang-C-DetermineCompiler.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/XLClang-C.cmake b/share/cmake-3.22/Modules/Compiler/XLClang-C.cmake
new file mode 100644
index 0000000..1668a4d
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/XLClang-C.cmake
@@ -0,0 +1,22 @@
+include(Compiler/XLClang)
+__compiler_xlclang(C)
+
+set(CMAKE_C_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -x c)
+
+if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 13.1.1)
+  set(CMAKE_C90_STANDARD_COMPILE_OPTION  "-std=c89")
+  set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=gnu89")
+  set(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT ON)
+  set(CMAKE_C99_STANDARD_COMPILE_OPTION  "-std=c99")
+  set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-std=gnu99")
+  set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON)
+  set(CMAKE_C11_STANDARD_COMPILE_OPTION  "-qlanglvl=extc1x")
+  set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-qlanglvl=extc1x")
+  if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 13.1.2)
+    set(CMAKE_C11_STANDARD_COMPILE_OPTION  "-std=c11")
+    set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
+    set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON)
+  endif ()
+endif()
+
+__compiler_check_default_language_standard(C 13.1.1 99)
diff --git a/share/cmake-3.18/Modules/Compiler/XLClang-CXX-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/XLClang-CXX-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/XLClang-CXX-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/XLClang-CXX-DetermineCompiler.cmake
diff --git a/share/cmake-3.22/Modules/Compiler/XLClang-CXX.cmake b/share/cmake-3.22/Modules/Compiler/XLClang-CXX.cmake
new file mode 100644
index 0000000..02638c7
--- /dev/null
+++ b/share/cmake-3.22/Modules/Compiler/XLClang-CXX.cmake
@@ -0,0 +1,29 @@
+include(Compiler/XLClang)
+__compiler_xlclang(CXX)
+
+set(CMAKE_CXX_COMPILE_OPTIONS_EXPLICIT_LANGUAGE -x c++)
+
+if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13.1.1)
+  set(CMAKE_CXX98_STANDARD_COMPILE_OPTION  "")
+  set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "")
+  set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
+  set(CMAKE_CXX11_STANDARD_COMPILE_OPTION  "-qlanglvl=extended0x")
+  set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-qlanglvl=extended0x")
+  set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
+  if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13.1.2)
+    set(CMAKE_CXX11_STANDARD_COMPILE_OPTION  "-std=c++11")
+    set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++11")
+    set(CMAKE_CXX14_STANDARD_COMPILE_OPTION  "-std=c++1y")
+    set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++1y")
+    set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
+  endif ()
+  if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 16.1.0)
+    set(CMAKE_CXX14_STANDARD_COMPILE_OPTION  "-std=c++14")
+    set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++14")
+  endif()
+endif()
+
+__compiler_check_default_language_standard(CXX 13.1.1 98)
+
+set(CMAKE_CXX_COMPILE_OBJECT
+  "<CMAKE_CXX_COMPILER> -x c++ <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>")
diff --git a/share/cmake-3.18/Modules/Compiler/XLClang.cmake b/share/cmake-3.22/Modules/Compiler/XLClang.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/XLClang.cmake
rename to share/cmake-3.22/Modules/Compiler/XLClang.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/zOS-C-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/zOS-C-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/zOS-C-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/zOS-C-DetermineCompiler.cmake
diff --git a/share/cmake-3.18/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake b/share/cmake-3.22/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake
rename to share/cmake-3.22/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake
diff --git a/share/cmake-3.18/Modules/CompilerId/GHS_default.gpj.in b/share/cmake-3.22/Modules/CompilerId/GHS_default.gpj.in
similarity index 100%
rename from share/cmake-3.18/Modules/CompilerId/GHS_default.gpj.in
rename to share/cmake-3.22/Modules/CompilerId/GHS_default.gpj.in
diff --git a/share/cmake-3.18/Modules/CompilerId/GHS_lib.gpj.in b/share/cmake-3.22/Modules/CompilerId/GHS_lib.gpj.in
similarity index 100%
rename from share/cmake-3.18/Modules/CompilerId/GHS_lib.gpj.in
rename to share/cmake-3.22/Modules/CompilerId/GHS_lib.gpj.in
diff --git a/share/cmake-3.22/Modules/CompilerId/VS-10.csproj.in b/share/cmake-3.22/Modules/CompilerId/VS-10.csproj.in
new file mode 100644
index 0000000..fba74ff
--- /dev/null
+++ b/share/cmake-3.22/Modules/CompilerId/VS-10.csproj.in
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{CAE07175-D007-4FC3-BFE8-47B392814159}</ProjectGuid>
+    <RootNamespace>CompilerId@id_lang@</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+    @id_system@
+    @id_system_version@
+    @id_TargetFrameworkVersion@
+    @id_TargetFrameworkIdentifier@
+    @id_TargetFrameworkTargetsVersion@
+    @id_WindowsTargetPlatformVersion@
+    @id_WindowsSDKDesktopARMSupport@
+  </PropertyGroup>
+  <PropertyGroup>
+    @id_PreferredToolArchitecture@
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|@id_platform@'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    @id_toolset@
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <!-- ============================================================ -->
+  <!-- ==                set preprocessor definitions            == -->
+  <!-- ============================================================ -->
+  <PropertyGroup>
+    <DefineConstants></DefineConstants>
+    <UnknownValue>Unknown</UnknownValue>
+  </PropertyGroup>
+  <!-- Platform -->
+  <PropertyGroup Condition="'$(Platform)'!=''">
+    <DefineConstants>$(DefineConstants);Platform$(Platform)</DefineConstants>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Platform)'==''">
+    <DefineConstants>$(DefineConstants);Platform$(UnknownValue)</DefineConstants>
+  </PropertyGroup>
+  <!-- PlatformToolset -->
+  <PropertyGroup Condition="'$(PlatformToolset)'!=''">
+    <DefineConstants>$(DefineConstants);PlatformToolset$(PlatformToolset)</DefineConstants>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(PlatformToolset)'==''">
+    <DefineConstants>$(DefineConstants);PlatformToolset$(UnknownValue)</DefineConstants>
+  </PropertyGroup>
+  <!-- ============================================================ -->
+  <PropertyGroup>
+    <OutputPath Condition="'$(Configuration)|$(Platform)'=='Debug|@id_platform@'">.\</OutputPath>
+  </PropertyGroup>
+  <ItemGroup>
+    <Compile Include="@id_src@" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>if not "$(RoslynTargetsPath)"=="" if exist "$(RoslynTargetsPath)\@id_cl@" set _CSC=$(RoslynTargetsPath)
+if exist "$(MSBuildToolsPath)\@id_cl@" set _CSC=$(MSBuildToolsPath)
+if "%_CSC%"=="" exit -1
+%40echo CMAKE_@id_lang@_COMPILER=%_CSC%\@id_cl@</PostBuildEvent>
+  </PropertyGroup>
+</Project>
diff --git a/share/cmake-3.22/Modules/CompilerId/VS-10.vcxproj.in b/share/cmake-3.22/Modules/CompilerId/VS-10.vcxproj.in
new file mode 100644
index 0000000..3598fc7
--- /dev/null
+++ b/share/cmake-3.22/Modules/CompilerId/VS-10.vcxproj.in
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|@id_platform@">
+      <Configuration>Debug</Configuration>
+      <Platform>@id_platform@</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{CAE07175-D007-4FC3-BFE8-47B392814159}</ProjectGuid>
+    <RootNamespace>CompilerId@id_lang@</RootNamespace>
+    <Keyword>@id_keyword@</Keyword>
+    @id_system@
+    @id_system_version@
+    @id_WindowsTargetPlatformVersion@
+    @id_WindowsSDKDesktopARMSupport@
+    @id_CudaToolkitCustomDir@
+    @id_ToolsetVCTargetsDir@
+    @id_CustomGlobals@
+  </PropertyGroup>
+  @id_toolset_version_props@
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup>
+    @id_PreferredToolArchitecture@
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|@id_platform@'" Label="Configuration">
+    <ConfigurationType>@id_config_type@</ConfigurationType>
+    @id_toolset@
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+    @id_Import_props@
+  </ImportGroup>
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|@id_platform@'">.\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|@id_platform@'">$(Configuration)\</IntDir>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|@id_platform@'">false</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|@id_platform@'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>TurnOffAllWarnings</WarningLevel>
+      <DebugInformationFormat>
+      </DebugInformationFormat>
+    </ClCompile>
+    @id_ItemDefinitionGroup_entry@
+    <Link>
+      <GenerateDebugInformation>false</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      @id_Link_AdditionalDependencies@
+    </Link>
+    <PostBuildEvent>
+      <Command>@id_PostBuildEvent_Command@</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <@id_compile@ Include="@id_src@" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+    @id_Import_targets@
+  </ImportGroup>
+</Project>
diff --git a/share/cmake-3.18/Modules/CompilerId/VS-7.vcproj.in b/share/cmake-3.22/Modules/CompilerId/VS-7.vcproj.in
similarity index 100%
rename from share/cmake-3.18/Modules/CompilerId/VS-7.vcproj.in
rename to share/cmake-3.22/Modules/CompilerId/VS-7.vcproj.in
diff --git a/share/cmake-3.18/Modules/CompilerId/VS-Intel.vfproj.in b/share/cmake-3.22/Modules/CompilerId/VS-Intel.vfproj.in
similarity index 100%
rename from share/cmake-3.18/Modules/CompilerId/VS-Intel.vfproj.in
rename to share/cmake-3.22/Modules/CompilerId/VS-Intel.vfproj.in
diff --git a/share/cmake-3.18/Modules/CompilerId/VS-NsightTegra.vcxproj.in b/share/cmake-3.22/Modules/CompilerId/VS-NsightTegra.vcxproj.in
similarity index 100%
rename from share/cmake-3.18/Modules/CompilerId/VS-NsightTegra.vcxproj.in
rename to share/cmake-3.22/Modules/CompilerId/VS-NsightTegra.vcxproj.in
diff --git a/share/cmake-3.22/Modules/CompilerId/Xcode-3.pbxproj.in b/share/cmake-3.22/Modules/CompilerId/Xcode-3.pbxproj.in
new file mode 100644
index 0000000..aab357a
--- /dev/null
+++ b/share/cmake-3.22/Modules/CompilerId/Xcode-3.pbxproj.in
@@ -0,0 +1,114 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 45;
+	objects = {
+
+		2C18F0B615DC1E0300593670 = {isa = PBXBuildFile; fileRef = 2C18F0B415DC1DC700593670; };
+		2C18F0B415DC1DC700593670 = {isa = PBXFileReference; fileEncoding = 4; explicitFileType = @id_type@; path = @id_src@; sourceTree = "<group>"; };
+		08FB7794FE84155DC02AAC07 = {
+			isa = PBXGroup;
+			children = (
+				2C18F0B415DC1DC700593670,
+			);
+			name = CompilerId@id_lang@;
+			sourceTree = "<group>";
+		};
+		8DD76FA90486AB0100D96B5E = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 1DEB928508733DD80010E9CD;
+			buildPhases = (
+				2C18F0B515DC1DCE00593670,
+				2C8FEB8E15DC1A1A00E56A5D,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = CompilerId@id_lang@;
+			productName = CompilerId@id_lang@;
+			productType = "@id_product_type@";
+		};
+		08FB7793FE84155DC02AAC07 = {
+			isa = PBXProject;
+			buildConfigurationList = 1DEB928908733DD80010E9CD;
+			compatibilityVersion = "Xcode 3.1";
+			developmentRegion = English;
+			hasScannedForEncodings = 1;
+			knownRegions = (
+				en,
+			);
+			mainGroup = 08FB7794FE84155DC02AAC07;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				8DD76FA90486AB0100D96B5E,
+			);
+		};
+		2C8FEB8E15DC1A1A00E56A5D = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "echo \"GCC_VERSION=$GCC_VERSION\" ; echo \"ARCHS=$ARCHS\"";
+			showEnvVarsInLog = 0;
+		};
+		2C18F0B515DC1DCE00593670 = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				2C18F0B615DC1E0300593670,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		1DEB928608733DD80010E9CD = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				CODE_SIGN_IDENTITY = "";
+				PRODUCT_NAME = CompilerId@id_lang@;
+			};
+			name = Debug;
+		};
+		1DEB928A08733DD80010E9CD = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				CODE_SIGNING_REQUIRED = NO;
+				CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)";
+				SYMROOT = .;
+				@id_archs@
+				@id_arch_active@
+				@id_toolset@
+				@id_lang_version@
+				@id_clang_cxx_library@
+				@id_deployment_target@
+				@id_sdkroot@
+			};
+			name = Debug;
+		};
+		1DEB928508733DD80010E9CD = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				1DEB928608733DD80010E9CD,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Debug;
+		};
+		1DEB928908733DD80010E9CD = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				1DEB928A08733DD80010E9CD,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Debug;
+		};
+	};
+	rootObject = 08FB7793FE84155DC02AAC07;
+}
diff --git a/share/cmake-3.18/Modules/CompilerId/main.swift.in b/share/cmake-3.22/Modules/CompilerId/main.swift.in
similarity index 100%
rename from share/cmake-3.18/Modules/CompilerId/main.swift.in
rename to share/cmake-3.22/Modules/CompilerId/main.swift.in
diff --git a/share/cmake-3.18/Modules/Dart.cmake b/share/cmake-3.22/Modules/Dart.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Dart.cmake
rename to share/cmake-3.22/Modules/Dart.cmake
diff --git a/share/cmake-3.22/Modules/DartConfiguration.tcl.in b/share/cmake-3.22/Modules/DartConfiguration.tcl.in
new file mode 100644
index 0000000..e5b1e5d
--- /dev/null
+++ b/share/cmake-3.22/Modules/DartConfiguration.tcl.in
@@ -0,0 +1,105 @@
+# This file is configured by CMake automatically as DartConfiguration.tcl
+# If you choose not to use CMake, this file may be hand configured, by
+# filling in the required variables.
+
+
+# Configuration directories and files
+SourceDirectory: @PROJECT_SOURCE_DIR@
+BuildDirectory: @PROJECT_BINARY_DIR@
+
+# Where to place the cost data store
+CostDataFile: @CTEST_COST_DATA_FILE@
+
+# Site is something like machine.domain, i.e. pragmatic.crd
+Site: @SITE@
+
+# Build name is osname-revision-compiler, i.e. Linux-2.4.2-2smp-c++
+BuildName: @BUILDNAME@
+
+# Subprojects
+LabelsForSubprojects: @CTEST_LABELS_FOR_SUBPROJECTS@
+
+# Submission information
+SubmitURL: @SUBMIT_URL@
+
+# Dashboard start time
+NightlyStartTime: @NIGHTLY_START_TIME@
+
+# Commands for the build/test/submit cycle
+ConfigureCommand: "@CMAKE_COMMAND@" "@PROJECT_SOURCE_DIR@"
+MakeCommand: @MAKECOMMAND@
+DefaultCTestConfigurationType: @DEFAULT_CTEST_CONFIGURATION_TYPE@
+
+# version control
+UpdateVersionOnly: @CTEST_UPDATE_VERSION_ONLY@
+
+# CVS options
+# Default is "-d -P -A"
+CVSCommand: @CVSCOMMAND@
+CVSUpdateOptions: @CVS_UPDATE_OPTIONS@
+
+# Subversion options
+SVNCommand: @SVNCOMMAND@
+SVNOptions: @CTEST_SVN_OPTIONS@
+SVNUpdateOptions: @SVN_UPDATE_OPTIONS@
+
+# Git options
+GITCommand: @GITCOMMAND@
+GITInitSubmodules: @CTEST_GIT_INIT_SUBMODULES@
+GITUpdateOptions: @GIT_UPDATE_OPTIONS@
+GITUpdateCustom: @CTEST_GIT_UPDATE_CUSTOM@
+
+# Perforce options
+P4Command: @P4COMMAND@
+P4Client: @CTEST_P4_CLIENT@
+P4Options: @CTEST_P4_OPTIONS@
+P4UpdateOptions: @CTEST_P4_UPDATE_OPTIONS@
+P4UpdateCustom: @CTEST_P4_UPDATE_CUSTOM@
+
+# Generic update command
+UpdateCommand: @UPDATE_COMMAND@
+UpdateOptions: @UPDATE_OPTIONS@
+UpdateType: @UPDATE_TYPE@
+
+# Compiler info
+Compiler: @CMAKE_CXX_COMPILER@
+CompilerVersion: @CMAKE_CXX_COMPILER_VERSION@
+
+# Dynamic analysis (MemCheck)
+PurifyCommand: @PURIFYCOMMAND@
+ValgrindCommand: @VALGRIND_COMMAND@
+ValgrindCommandOptions: @VALGRIND_COMMAND_OPTIONS@
+DrMemoryCommand: @DRMEMORY_COMMAND@
+DrMemoryCommandOptions: @DRMEMORY_COMMAND_OPTIONS@
+CudaSanitizerCommand: @CUDA_SANITIZER_COMMAND@
+CudaSanitizerCommandOptions: @CUDA_SANITIZER_COMMAND_OPTIONS@
+MemoryCheckType: @MEMORYCHECK_TYPE@
+MemoryCheckSanitizerOptions: @MEMORYCHECK_SANITIZER_OPTIONS@
+MemoryCheckCommand: @MEMORYCHECK_COMMAND@
+MemoryCheckCommandOptions: @MEMORYCHECK_COMMAND_OPTIONS@
+MemoryCheckSuppressionFile: @MEMORYCHECK_SUPPRESSIONS_FILE@
+
+# Coverage
+CoverageCommand: @COVERAGE_COMMAND@
+CoverageExtraFlags: @COVERAGE_EXTRA_FLAGS@
+
+# Testing options
+# TimeOut is the amount of time in seconds to wait for processes
+# to complete during testing.  After TimeOut seconds, the
+# process will be summarily terminated.
+# Currently set to 25 minutes
+TimeOut: @DART_TESTING_TIMEOUT@
+
+# During parallel testing CTest will not start a new test if doing
+# so would cause the system load to exceed this value.
+TestLoad: @CTEST_TEST_LOAD@
+
+UseLaunchers: @CTEST_USE_LAUNCHERS@
+CurlOptions: @CTEST_CURL_OPTIONS@
+# warning, if you add new options here that have to do with submit,
+# you have to update cmCTestSubmitCommand.cxx
+
+# For CTest submissions that timeout, these options
+# specify behavior for retrying the submission
+CTestSubmitRetryDelay: @CTEST_SUBMIT_RETRY_DELAY@
+CTestSubmitRetryCount: @CTEST_SUBMIT_RETRY_COUNT@
diff --git a/share/cmake-3.18/Modules/DeployQt4.cmake b/share/cmake-3.22/Modules/DeployQt4.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/DeployQt4.cmake
rename to share/cmake-3.22/Modules/DeployQt4.cmake
diff --git a/share/cmake-3.22/Modules/Documentation.cmake b/share/cmake-3.22/Modules/Documentation.cmake
new file mode 100644
index 0000000..2430f85
--- /dev/null
+++ b/share/cmake-3.22/Modules/Documentation.cmake
@@ -0,0 +1,77 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+Documentation
+-------------
+
+.. deprecated:: 3.18
+  This module does nothing, unless policy :policy:`CMP0106` is set to ``OLD``.
+
+This module provides support for the VTK documentation framework.  It
+relies on several tools (Doxygen, Perl, etc).
+#]=======================================================================]
+
+cmake_policy(GET CMP0106 _Documentation_policy)
+
+if (_Documentation_policy STREQUAL "NEW")
+  message(FATAL_ERROR
+    "Documentation.cmake is VTK-specific code and should not be used in "
+    "non-VTK projects. This logic in this module is best shipped with the "
+    "project using it rather than with CMake. This is now an error according "
+    "to policy CMP0106.")
+else ()
+
+if (_Documentation_policy STREQUAL "")
+  # Ignore the warning if the project is detected as VTK itself.
+  if (NOT CMAKE_PROJECT_NAME STREQUAL "VTK" AND
+      NOT PROJECT_NAME STREQUAL "VTK")
+    cmake_policy(GET_WARNING CMP0106 _Documentation_policy_warning)
+    message(AUTHOR_WARNING
+      "${_Documentation_policy_warning}\n"
+      "Documentation.cmake is VTK-specific code and should not be used in "
+      "non-VTK projects. This logic in this module is best shipped with the "
+      "project using it rather than with CMake.")
+  endif ()
+  unset(_Documentation_policy_warning)
+endif ()
+
+#
+# Build the documentation ?
+#
+option(BUILD_DOCUMENTATION "Build the documentation (Doxygen)." OFF)
+mark_as_advanced(BUILD_DOCUMENTATION)
+
+if (BUILD_DOCUMENTATION)
+
+  #
+  # Check for the tools
+  #
+  find_package(UnixCommands)
+  find_package(Doxygen)
+  find_package(Gnuplot)
+  find_package(HTMLHelp)
+  find_package(Perl)
+  find_package(Wget)
+
+  option(DOCUMENTATION_HTML_HELP
+    "Build the HTML Help file (CHM)." OFF)
+
+  option(DOCUMENTATION_HTML_TARZ
+    "Build a compressed tar archive of the HTML doc." OFF)
+
+  mark_as_advanced(
+    DOCUMENTATION_HTML_HELP
+    DOCUMENTATION_HTML_TARZ
+    )
+
+  #
+  # The documentation process is controlled by a batch file.
+  # We will probably need bash to create the custom target
+  #
+
+endif ()
+
+endif ()
+
+unset(_Documentation_policy)
diff --git a/share/cmake-3.18/Modules/DummyCXXFile.cxx b/share/cmake-3.22/Modules/DummyCXXFile.cxx
similarity index 100%
rename from share/cmake-3.18/Modules/DummyCXXFile.cxx
rename to share/cmake-3.22/Modules/DummyCXXFile.cxx
diff --git a/share/cmake-3.22/Modules/ExternalData.cmake b/share/cmake-3.22/Modules/ExternalData.cmake
new file mode 100644
index 0000000..189374b
--- /dev/null
+++ b/share/cmake-3.22/Modules/ExternalData.cmake
@@ -0,0 +1,1212 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+ExternalData
+------------
+
+.. only:: html
+
+   .. contents::
+
+Manage data files stored outside source tree
+
+Introduction
+^^^^^^^^^^^^
+
+Use this module to unambiguously reference data files stored outside
+the source tree and fetch them at build time from arbitrary local and
+remote content-addressed locations.  Functions provided by this module
+recognize arguments with the syntax ``DATA{<name>}`` as references to
+external data, replace them with full paths to local copies of those
+data, and create build rules to fetch and update the local copies.
+
+For example:
+
+.. code-block:: cmake
+
+ include(ExternalData)
+ set(ExternalData_URL_TEMPLATES "file:///local/%(algo)/%(hash)"
+                                "file:////host/share/%(algo)/%(hash)"
+                                "http://data.org/%(algo)/%(hash)")
+ ExternalData_Add_Test(MyData
+   NAME MyTest
+   COMMAND MyExe DATA{MyInput.png}
+   )
+ ExternalData_Add_Target(MyData)
+
+When test ``MyTest`` runs the ``DATA{MyInput.png}`` argument will be
+replaced by the full path to a real instance of the data file
+``MyInput.png`` on disk.  If the source tree contains a content link
+such as ``MyInput.png.md5`` then the ``MyData`` target creates a real
+``MyInput.png`` in the build tree.
+
+Module Functions
+^^^^^^^^^^^^^^^^
+
+.. command:: ExternalData_Expand_Arguments
+
+  The ``ExternalData_Expand_Arguments`` function evaluates ``DATA{}``
+  references in its arguments and constructs a new list of arguments::
+
+    ExternalData_Expand_Arguments(
+      <target>   # Name of data management target
+      <outVar>   # Output variable
+      [args...]  # Input arguments, DATA{} allowed
+      )
+
+  It replaces each ``DATA{}`` reference in an argument with the full path of
+  a real data file on disk that will exist after the ``<target>`` builds.
+
+.. command:: ExternalData_Add_Test
+
+  The ``ExternalData_Add_Test`` function wraps around the CMake
+  :command:`add_test` command but supports ``DATA{}`` references in
+  its arguments::
+
+    ExternalData_Add_Test(
+      <target>   # Name of data management target
+      ...        # Arguments of add_test(), DATA{} allowed
+      )
+
+  It passes its arguments through ``ExternalData_Expand_Arguments`` and then
+  invokes the :command:`add_test` command using the results.
+
+.. command:: ExternalData_Add_Target
+
+  The ``ExternalData_Add_Target`` function creates a custom target to
+  manage local instances of data files stored externally::
+
+    ExternalData_Add_Target(
+      <target>                  # Name of data management target
+      [SHOW_PROGRESS <ON|OFF>]  # Show progress during the download
+      )
+
+  It creates custom commands in the target as necessary to make data
+  files available for each ``DATA{}`` reference previously evaluated by
+  other functions provided by this module.
+  Data files may be fetched from one of the URL templates specified in
+  the ``ExternalData_URL_TEMPLATES`` variable, or may be found locally
+  in one of the paths specified in the ``ExternalData_OBJECT_STORES``
+  variable.
+
+  .. versionadded:: 3.20
+    The ``SHOW_PROGRESS`` argument may be passed to suppress progress information
+    during the download of objects. If not provided, it defaults to ``OFF`` for
+    :generator:`Ninja` and :generator:`Ninja Multi-Config` generators and ``ON``
+    otherwise.
+
+  Typically only one target is needed to manage all external data within
+  a project.  Call this function once at the end of configuration after
+  all data references have been processed.
+
+Module Variables
+^^^^^^^^^^^^^^^^
+
+The following variables configure behavior.  They should be set before
+calling any of the functions provided by this module.
+
+.. variable:: ExternalData_BINARY_ROOT
+
+  The ``ExternalData_BINARY_ROOT`` variable may be set to the directory to
+  hold the real data files named by expanded ``DATA{}`` references.  The
+  default is ``CMAKE_BINARY_DIR``.  The directory layout will mirror that of
+  content links under ``ExternalData_SOURCE_ROOT``.
+
+.. variable:: ExternalData_CUSTOM_SCRIPT_<key>
+
+  .. versionadded:: 3.2
+
+  Specify a full path to a ``.cmake`` custom fetch script identified by
+  ``<key>`` in entries of the ``ExternalData_URL_TEMPLATES`` list.
+  See `Custom Fetch Scripts`_.
+
+.. variable:: ExternalData_LINK_CONTENT
+
+  The ``ExternalData_LINK_CONTENT`` variable may be set to the name of a
+  supported hash algorithm to enable automatic conversion of real data
+  files referenced by the ``DATA{}`` syntax into content links.  For each
+  such ``<file>`` a content link named ``<file><ext>`` is created.  The
+  original file is renamed to the form ``.ExternalData_<algo>_<hash>`` to
+  stage it for future transmission to one of the locations in the list
+  of URL templates (by means outside the scope of this module).  The
+  data fetch rule created for the content link will use the staged
+  object if it cannot be found using any URL template.
+
+.. variable:: ExternalData_NO_SYMLINKS
+
+  .. versionadded:: 3.3
+
+  The real data files named by expanded ``DATA{}`` references may be made
+  available under ``ExternalData_BINARY_ROOT`` using symbolic links on
+  some platforms.  The ``ExternalData_NO_SYMLINKS`` variable may be set
+  to disable use of symbolic links and enable use of copies instead.
+
+.. variable:: ExternalData_OBJECT_STORES
+
+  The ``ExternalData_OBJECT_STORES`` variable may be set to a list of local
+  directories that store objects using the layout ``<dir>/%(algo)/%(hash)``.
+  These directories will be searched first for a needed object.  If the
+  object is not available in any store then it will be fetched remotely
+  using the URL templates and added to the first local store listed.  If
+  no stores are specified the default is a location inside the build
+  tree.
+
+.. variable:: ExternalData_SERIES_PARSE
+              ExternalData_SERIES_PARSE_PREFIX
+              ExternalData_SERIES_PARSE_NUMBER
+              ExternalData_SERIES_PARSE_SUFFIX
+              ExternalData_SERIES_MATCH
+
+  See `Referencing File Series`_.
+
+.. variable:: ExternalData_SOURCE_ROOT
+
+  The ``ExternalData_SOURCE_ROOT`` variable may be set to the highest source
+  directory containing any path named by a ``DATA{}`` reference.  The
+  default is ``CMAKE_SOURCE_DIR``.  ``ExternalData_SOURCE_ROOT`` and
+  ``CMAKE_SOURCE_DIR`` must refer to directories within a single source
+  distribution (e.g.  they come together in one tarball).
+
+.. variable:: ExternalData_TIMEOUT_ABSOLUTE
+
+  The ``ExternalData_TIMEOUT_ABSOLUTE`` variable sets the download
+  absolute timeout, in seconds, with a default of ``300`` seconds.
+  Set to ``0`` to disable enforcement.
+
+.. variable:: ExternalData_TIMEOUT_INACTIVITY
+
+  The ``ExternalData_TIMEOUT_INACTIVITY`` variable sets the download
+  inactivity timeout, in seconds, with a default of ``60`` seconds.
+  Set to ``0`` to disable enforcement.
+
+.. variable:: ExternalData_URL_ALGO_<algo>_<key>
+
+  .. versionadded:: 3.3
+
+  Specify a custom URL component to be substituted for URL template
+  placeholders of the form ``%(algo:<key>)``, where ``<key>`` is a
+  valid C identifier, when fetching an object referenced via hash
+  algorithm ``<algo>``.  If not defined, the default URL component
+  is just ``<algo>`` for any ``<key>``.
+
+.. variable:: ExternalData_URL_TEMPLATES
+
+  The ``ExternalData_URL_TEMPLATES`` may be set to provide a list
+  of URL templates using the placeholders ``%(algo)`` and ``%(hash)``
+  in each template.  Data fetch rules try each URL template in order
+  by substituting the hash algorithm name for ``%(algo)`` and the hash
+  value for ``%(hash)``.  Alternatively one may use ``%(algo:<key>)``
+  with ``ExternalData_URL_ALGO_<algo>_<key>`` variables to gain more
+  flexibility in remote URLs.
+
+Referencing Files
+^^^^^^^^^^^^^^^^^
+
+Referencing Single Files
+""""""""""""""""""""""""
+
+The ``DATA{}`` syntax is literal and the ``<name>`` is a full or relative path
+within the source tree.  The source tree must contain either a real
+data file at ``<name>`` or a "content link" at ``<name><ext>`` containing a
+hash of the real file using a hash algorithm corresponding to ``<ext>``.
+For example, the argument ``DATA{img.png}`` may be satisfied by either a
+real ``img.png`` file in the current source directory or a ``img.png.md5``
+file containing its MD5 sum.
+
+.. versionadded:: 3.8
+  Multiple content links of the same name with different hash algorithms
+  are supported (e.g. ``img.png.sha256`` and ``img.png.sha1``) so long as
+  they all correspond to the same real file.  This allows objects to be
+  fetched from sources indexed by different hash algorithms.
+
+Referencing File Series
+"""""""""""""""""""""""
+
+The ``DATA{}`` syntax can be told to fetch a file series using the form
+``DATA{<name>,:}``, where the ``:`` is literal.  If the source tree
+contains a group of files or content links named like a series then a
+reference to one member adds rules to fetch all of them.  Although all
+members of a series are fetched, only the file originally named by the
+``DATA{}`` argument is substituted for it.  The default configuration
+recognizes file series names ending with ``#.ext``, ``_#.ext``, ``.#.ext``,
+or ``-#.ext`` where ``#`` is a sequence of decimal digits and ``.ext`` is
+any single extension.  Configure it with a regex that parses ``<number>``
+and ``<suffix>`` parts from the end of ``<name>``::
+
+ ExternalData_SERIES_PARSE = regex of the form (<number>)(<suffix>)$
+
+For more complicated cases set::
+
+ ExternalData_SERIES_PARSE = regex with at least two () groups
+ ExternalData_SERIES_PARSE_PREFIX = <prefix> regex group number, if any
+ ExternalData_SERIES_PARSE_NUMBER = <number> regex group number
+ ExternalData_SERIES_PARSE_SUFFIX = <suffix> regex group number
+
+Configure series number matching with a regex that matches the
+``<number>`` part of series members named ``<prefix><number><suffix>``::
+
+ ExternalData_SERIES_MATCH = regex matching <number> in all series members
+
+Note that the ``<suffix>`` of a series does not include a hash-algorithm
+extension.
+
+Referencing Associated Files
+""""""""""""""""""""""""""""
+
+The ``DATA{}`` syntax can alternatively match files associated with the
+named file and contained in the same directory.  Associated files may
+be specified by options using the syntax
+``DATA{<name>,<opt1>,<opt2>,...}``.  Each option may specify one file by
+name or specify a regular expression to match file names using the
+syntax ``REGEX:<regex>``.  For example, the arguments::
+
+ DATA{MyData/MyInput.mhd,MyInput.img}                   # File pair
+ DATA{MyData/MyFrames00.png,REGEX:MyFrames[0-9]+\\.png} # Series
+
+will pass ``MyInput.mha`` and ``MyFrames00.png`` on the command line but
+ensure that the associated files are present next to them.
+
+Referencing Directories
+"""""""""""""""""""""""
+
+The ``DATA{}`` syntax may reference a directory using a trailing slash and
+a list of associated files.  The form ``DATA{<name>/,<opt1>,<opt2>,...}``
+adds rules to fetch any files in the directory that match one of the
+associated file options.  For example, the argument
+``DATA{MyDataDir/,REGEX:.*}`` will pass the full path to a ``MyDataDir``
+directory on the command line and ensure that the directory contains
+files corresponding to every file or content link in the ``MyDataDir``
+source directory.
+
+.. versionadded:: 3.3
+  In order to match associated files in subdirectories,
+  specify a ``RECURSE:`` option, e.g. ``DATA{MyDataDir/,RECURSE:,REGEX:.*}``.
+
+Hash Algorithms
+^^^^^^^^^^^^^^^
+
+The following hash algorithms are supported::
+
+ %(algo)     <ext>     Description
+ -------     -----     -----------
+ MD5         .md5      Message-Digest Algorithm 5, RFC 1321
+ SHA1        .sha1     US Secure Hash Algorithm 1, RFC 3174
+ SHA224      .sha224   US Secure Hash Algorithms, RFC 4634
+ SHA256      .sha256   US Secure Hash Algorithms, RFC 4634
+ SHA384      .sha384   US Secure Hash Algorithms, RFC 4634
+ SHA512      .sha512   US Secure Hash Algorithms, RFC 4634
+ SHA3_224    .sha3-224 Keccak SHA-3
+ SHA3_256    .sha3-256 Keccak SHA-3
+ SHA3_384    .sha3-384 Keccak SHA-3
+ SHA3_512    .sha3-512 Keccak SHA-3
+
+.. versionadded:: 3.8
+  Added the ``SHA3_*`` hash algorithms.
+
+Note that the hashes are used only for unique data identification and
+download verification.
+
+.. _`ExternalData Custom Fetch Scripts`:
+
+Custom Fetch Scripts
+^^^^^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.2
+
+When a data file must be fetched from one of the URL templates
+specified in the ``ExternalData_URL_TEMPLATES`` variable, it is
+normally downloaded using the :command:`file(DOWNLOAD)` command.
+One may specify usage of a custom fetch script by using a URL
+template of the form ``ExternalDataCustomScript://<key>/<loc>``.
+The ``<key>`` must be a C identifier, and the ``<loc>`` must
+contain the ``%(algo)`` and ``%(hash)`` placeholders.
+A variable corresponding to the key, ``ExternalData_CUSTOM_SCRIPT_<key>``,
+must be set to the full path to a ``.cmake`` script file.  The script
+will be included to perform the actual fetch, and provided with
+the following variables:
+
+.. variable:: ExternalData_CUSTOM_LOCATION
+
+  When a custom fetch script is loaded, this variable is set to the
+  location part of the URL, which will contain the substituted hash
+  algorithm name and content hash value.
+
+.. variable:: ExternalData_CUSTOM_FILE
+
+  When a custom fetch script is loaded, this variable is set to the
+  full path to a file in which the script must store the fetched
+  content.  The name of the file is unspecified and should not be
+  interpreted in any way.
+
+The custom fetch script is expected to store fetched content in the
+file or set a variable:
+
+.. variable:: ExternalData_CUSTOM_ERROR
+
+  When a custom fetch script fails to fetch the requested content,
+  it must set this variable to a short one-line message describing
+  the reason for failure.
+
+#]=======================================================================]
+
+function(ExternalData_add_test target)
+  # Expand all arguments as a single string to preserve escaped semicolons.
+  ExternalData_expand_arguments("${target}" testArgs "${ARGN}")
+  add_test(${testArgs})
+endfunction()
+
+function(ExternalData_add_target target)
+  if(NOT ExternalData_URL_TEMPLATES AND NOT ExternalData_OBJECT_STORES)
+    message(FATAL_ERROR
+      "Neither ExternalData_URL_TEMPLATES nor ExternalData_OBJECT_STORES is set!")
+  endif()
+  if(NOT ExternalData_OBJECT_STORES)
+    set(ExternalData_OBJECT_STORES ${CMAKE_BINARY_DIR}/ExternalData/Objects)
+  endif()
+  set(_ExternalData_CONFIG_CODE "")
+
+  cmake_parse_arguments(PARSE_ARGV 1 _ExternalData_add_target
+    ""
+    "SHOW_PROGRESS"
+    "")
+  if (_ExternalData_add_target_UNPARSED_ARGUMENTS)
+    message(AUTHOR_WARNING
+      "Ignoring unrecognized arguments passed to ExternalData_add_target: "
+      "`${_ExternalData_add_target_UNPARSED_ARGUMENTS}`")
+  endif ()
+
+  # Turn `SHOW_PROGRESS` into a boolean
+  if (NOT DEFINED _ExternalData_add_target_SHOW_PROGRESS)
+    # The default setting
+    if (CMAKE_GENERATOR MATCHES "Ninja")
+      set(_ExternalData_add_target_SHOW_PROGRESS OFF)
+    else ()
+      set(_ExternalData_add_target_SHOW_PROGRESS ON)
+    endif ()
+  elseif (_ExternalData_add_target_SHOW_PROGRESS)
+    set(_ExternalData_add_target_SHOW_PROGRESS ON)
+  else ()
+    set(_ExternalData_add_target_SHOW_PROGRESS OFF)
+  endif ()
+
+  # Store custom script configuration.
+  foreach(url_template IN LISTS ExternalData_URL_TEMPLATES)
+    if("${url_template}" MATCHES "^ExternalDataCustomScript://([^/]*)/(.*)$")
+      set(key "${CMAKE_MATCH_1}")
+      if(key MATCHES "^[A-Za-z_][A-Za-z0-9_]*$")
+        if(ExternalData_CUSTOM_SCRIPT_${key})
+          if(IS_ABSOLUTE "${ExternalData_CUSTOM_SCRIPT_${key}}")
+            string(CONCAT _ExternalData_CONFIG_CODE "${_ExternalData_CONFIG_CODE}\n"
+              "set(ExternalData_CUSTOM_SCRIPT_${key} \"${ExternalData_CUSTOM_SCRIPT_${key}}\")")
+          else()
+            message(FATAL_ERROR
+              "No ExternalData_CUSTOM_SCRIPT_${key} is not set to a full path:\n"
+              " ${ExternalData_CUSTOM_SCRIPT_${key}}")
+          endif()
+        else()
+          message(FATAL_ERROR
+            "No ExternalData_CUSTOM_SCRIPT_${key} is set for URL template:\n"
+            " ${url_template}")
+        endif()
+      else()
+        message(FATAL_ERROR
+          "Bad ExternalDataCustomScript key '${key}' in URL template:\n"
+          " ${url_template}\n"
+          "The key must be a valid C identifier.")
+      endif()
+    endif()
+
+    # Store custom algorithm name to URL component maps.
+    if("${url_template}" MATCHES "%\\(algo:([^)]*)\\)")
+      set(key "${CMAKE_MATCH_1}")
+      if(key MATCHES "^[A-Za-z_][A-Za-z0-9_]*$")
+        string(REPLACE "|" ";" _algos "${_ExternalData_REGEX_ALGO}")
+        foreach(algo ${_algos})
+          if(DEFINED ExternalData_URL_ALGO_${algo}_${key})
+            string(CONCAT _ExternalData_CONFIG_CODE "${_ExternalData_CONFIG_CODE}\n"
+              "set(ExternalData_URL_ALGO_${algo}_${key} \"${ExternalData_URL_ALGO_${algo}_${key}}\")")
+          endif()
+        endforeach()
+      else()
+        message(FATAL_ERROR
+          "Bad %(algo:${key}) in URL template:\n"
+          " ${url_template}\n"
+          "The transform name must be a valid C identifier.")
+      endif()
+    endif()
+  endforeach()
+
+  # Store configuration for use by build-time script.
+  set(config ${CMAKE_CURRENT_BINARY_DIR}/${target}_config.cmake)
+  configure_file(${_ExternalData_SELF_DIR}/ExternalData_config.cmake.in ${config} @ONLY)
+
+  set(files "")
+
+  # Set a "_ExternalData_FILE_${file}" variable for each output file to avoid
+  # duplicate entries within this target.  Set a directory property of the same
+  # name to avoid repeating custom commands with the same output in this directory.
+  # Repeating custom commands with the same output across directories or across
+  # targets in the same directory may be a race, but this is likely okay because
+  # we use atomic replacement of output files.
+  #
+  # Use local data first to prefer real files over content links.
+
+  # Custom commands to copy or link local data.
+  get_property(data_local GLOBAL PROPERTY _ExternalData_${target}_LOCAL)
+  foreach(entry IN LISTS data_local)
+    string(REPLACE "|" ";" tuple "${entry}")
+    list(GET tuple 0 file)
+    list(GET tuple 1 name)
+    if(NOT DEFINED "_ExternalData_FILE_${file}")
+      set("_ExternalData_FILE_${file}" 1)
+      get_property(added DIRECTORY PROPERTY "_ExternalData_FILE_${file}")
+      if(NOT added)
+        set_property(DIRECTORY PROPERTY "_ExternalData_FILE_${file}" 1)
+        add_custom_command(
+          COMMENT "Generating ${file}"
+          OUTPUT "${file}"
+          COMMAND ${CMAKE_COMMAND} -Drelative_top=${CMAKE_BINARY_DIR}
+                                   -Dfile=${file} -Dname=${name}
+                                   -DExternalData_ACTION=local
+                                   -DExternalData_SHOW_PROGRESS=${_ExternalData_add_target_SHOW_PROGRESS}
+                                   -DExternalData_CONFIG=${config}
+                                   -P ${_ExternalData_SELF}
+          MAIN_DEPENDENCY "${name}"
+          )
+      endif()
+      list(APPEND files "${file}")
+    endif()
+  endforeach()
+
+  # Custom commands to fetch remote data.
+  get_property(data_fetch GLOBAL PROPERTY _ExternalData_${target}_FETCH)
+  foreach(entry IN LISTS data_fetch)
+    string(REPLACE "|" ";" tuple "${entry}")
+    list(GET tuple 0 file)
+    list(GET tuple 1 name)
+    list(GET tuple 2 exts)
+    string(REPLACE "+" ";" exts_list "${exts}")
+    list(GET exts_list 0 first_ext)
+    set(stamp "-hash-stamp")
+    if(NOT DEFINED "_ExternalData_FILE_${file}")
+      set("_ExternalData_FILE_${file}" 1)
+      get_property(added DIRECTORY PROPERTY "_ExternalData_FILE_${file}")
+      if(NOT added)
+        set_property(DIRECTORY PROPERTY "_ExternalData_FILE_${file}" 1)
+        add_custom_command(
+          # Users care about the data file, so hide the hash/timestamp file.
+          COMMENT "Generating ${file}"
+          # The hash/timestamp file is the output from the build perspective.
+          # List the real file as a second output in case it is a broken link.
+          # The files must be listed in this order so CMake can hide from the
+          # make tool that a symlink target may not be newer than the input.
+          OUTPUT "${file}${stamp}" "${file}"
+          # Run the data fetch/update script.
+          COMMAND ${CMAKE_COMMAND} -Drelative_top=${CMAKE_BINARY_DIR}
+                                   -Dfile=${file} -Dname=${name} -Dexts=${exts}
+                                   -DExternalData_ACTION=fetch
+                                   -DExternalData_SHOW_PROGRESS=${_ExternalData_add_target_SHOW_PROGRESS}
+                                   -DExternalData_CONFIG=${config}
+                                   -P ${_ExternalData_SELF}
+          # Update whenever the object hash changes.
+          MAIN_DEPENDENCY "${name}${first_ext}"
+          )
+      endif()
+      list(APPEND files "${file}${stamp}")
+    endif()
+  endforeach()
+
+  # Custom target to drive all update commands.
+  add_custom_target(${target} ALL DEPENDS ${files})
+endfunction()
+
+function(ExternalData_expand_arguments target outArgsVar)
+  # Replace DATA{} references with real arguments.
+  set(data_regex "DATA{([^;{}\r\n]*)}")
+  set(other_regex "([^D]|D[^A]|DA[^T]|DAT[^A]|DATA[^{])+|.")
+  set(outArgs "")
+  # This list expansion un-escapes semicolons in list element values so we
+  # must re-escape them below anywhere a new list expansion will occur.
+  foreach(arg IN LISTS ARGN)
+    if("x${arg}" MATCHES "${data_regex}")
+      # Re-escape in-value semicolons before expansion in foreach below.
+      string(REPLACE ";" "\\;" tmp "${arg}")
+      # Split argument into DATA{}-pieces and other pieces.
+      string(REGEX MATCHALL "${data_regex}|${other_regex}" pieces "${tmp}")
+      # Compose output argument with DATA{}-pieces replaced.
+      set(outArg "")
+      foreach(piece IN LISTS pieces)
+        if("x${piece}" MATCHES "^x${data_regex}$")
+          # Replace this DATA{}-piece with a file path.
+          _ExternalData_arg("${target}" "${piece}" "${CMAKE_MATCH_1}" file)
+          string(APPEND outArg "${file}")
+        else()
+          # No replacement needed for this piece.
+          string(APPEND outArg "${piece}")
+        endif()
+      endforeach()
+    else()
+      # No replacements needed in this argument.
+      set(outArg "${arg}")
+    endif()
+    # Re-escape in-value semicolons in resulting list.
+    string(REPLACE ";" "\\;" outArg "${outArg}")
+    list(APPEND outArgs "${outArg}")
+  endforeach()
+  set("${outArgsVar}" "${outArgs}" PARENT_SCOPE)
+endfunction()
+
+#-----------------------------------------------------------------------------
+# Private helper interface
+
+set(_ExternalData_REGEX_ALGO "MD5|SHA1|SHA224|SHA256|SHA384|SHA512|SHA3_224|SHA3_256|SHA3_384|SHA3_512")
+set(_ExternalData_REGEX_EXT "md5|sha1|sha224|sha256|sha384|sha512|sha3-224|sha3-256|sha3-384|sha3-512")
+set(_ExternalData_SELF "${CMAKE_CURRENT_LIST_FILE}")
+get_filename_component(_ExternalData_SELF_DIR "${_ExternalData_SELF}" PATH)
+
+function(_ExternalData_compute_hash var_hash algo file)
+  if("${algo}" MATCHES "^${_ExternalData_REGEX_ALGO}$")
+    file("${algo}" "${file}" hash)
+    set("${var_hash}" "${hash}" PARENT_SCOPE)
+  else()
+    message(FATAL_ERROR "Hash algorithm ${algo} unimplemented.")
+  endif()
+endfunction()
+
+function(_ExternalData_random var)
+  string(RANDOM LENGTH 6 random)
+  set("${var}" "${random}" PARENT_SCOPE)
+endfunction()
+
+function(_ExternalData_exact_regex regex_var string)
+  string(REGEX REPLACE "([][+.*()^])" "\\\\\\1" regex "${string}")
+  set("${regex_var}" "${regex}" PARENT_SCOPE)
+endfunction()
+
+function(_ExternalData_atomic_write file content)
+  _ExternalData_random(random)
+  set(tmp "${file}.tmp${random}")
+  file(WRITE "${tmp}" "${content}")
+  file(RENAME "${tmp}" "${file}")
+endfunction()
+
+function(_ExternalData_link_content name var_ext)
+  if("${ExternalData_LINK_CONTENT}" MATCHES "^(${_ExternalData_REGEX_ALGO})$")
+    set(algo "${ExternalData_LINK_CONTENT}")
+  else()
+    message(FATAL_ERROR
+      "Unknown hash algorithm specified by ExternalData_LINK_CONTENT:\n"
+      "  ${ExternalData_LINK_CONTENT}")
+  endif()
+  _ExternalData_compute_hash(hash "${algo}" "${name}")
+  get_filename_component(dir "${name}" PATH)
+  set(staged "${dir}/.ExternalData_${algo}_${hash}")
+  string(TOLOWER ".${algo}" ext)
+  _ExternalData_atomic_write("${name}${ext}" "${hash}\n")
+  file(RENAME "${name}" "${staged}")
+  set("${var_ext}" "${ext}" PARENT_SCOPE)
+
+  file(RELATIVE_PATH relname "${ExternalData_SOURCE_ROOT}" "${name}${ext}")
+  message(STATUS "Linked ${relname} to ExternalData ${algo}/${hash}")
+endfunction()
+
+function(_ExternalData_arg target arg options var_file)
+  # Separate data path from the options.
+  string(REPLACE "," ";" options "${options}")
+  list(GET options 0 data)
+  list(REMOVE_AT options 0)
+
+  # Interpret trailing slashes as directories.
+  set(data_is_directory 0)
+  if("x${data}" MATCHES "^x(.*)([/\\])$")
+    set(data_is_directory 1)
+    set(data "${CMAKE_MATCH_1}")
+  endif()
+
+  # Convert to full path.
+  if(IS_ABSOLUTE "${data}")
+    set(absdata "${data}")
+  else()
+    set(absdata "${CMAKE_CURRENT_SOURCE_DIR}/${data}")
+  endif()
+  get_filename_component(absdata "${absdata}" ABSOLUTE)
+
+  # Convert to relative path under the source tree.
+  if(NOT ExternalData_SOURCE_ROOT)
+    set(ExternalData_SOURCE_ROOT "${CMAKE_SOURCE_DIR}")
+  endif()
+  set(top_src "${ExternalData_SOURCE_ROOT}")
+  file(RELATIVE_PATH reldata "${top_src}" "${absdata}")
+  if(IS_ABSOLUTE "${reldata}" OR "${reldata}" MATCHES "^\\.\\./")
+    message(FATAL_ERROR "Data file referenced by argument\n"
+      "  ${arg}\n"
+      "does not lie under the top-level source directory\n"
+      "  ${top_src}\n")
+  endif()
+  if(data_is_directory AND NOT IS_DIRECTORY "${top_src}/${reldata}")
+    message(FATAL_ERROR "Data directory referenced by argument\n"
+      "  ${arg}\n"
+      "corresponds to source tree path\n"
+      "  ${reldata}\n"
+      "that does not exist as a directory!")
+  endif()
+  if(NOT ExternalData_BINARY_ROOT)
+    set(ExternalData_BINARY_ROOT "${CMAKE_BINARY_DIR}")
+  endif()
+  set(top_bin "${ExternalData_BINARY_ROOT}")
+
+  # Handle in-source builds gracefully.
+  if("${top_src}" STREQUAL "${top_bin}")
+    if(ExternalData_LINK_CONTENT)
+      message(WARNING "ExternalData_LINK_CONTENT cannot be used in-source")
+      set(ExternalData_LINK_CONTENT 0)
+    endif()
+    set(top_same 1)
+  endif()
+
+  set(external "") # Entries external to the source tree.
+  set(internal "") # Entries internal to the source tree.
+  set(have_original ${data_is_directory})
+  set(have_original_as_dir 0)
+
+  # Process options.
+  set(series_option "")
+  set(recurse_option "")
+  set(associated_files "")
+  set(associated_regex "")
+  foreach(opt ${options})
+    # Regular expression to match associated files.
+    if("x${opt}" MATCHES "^xREGEX:([^:/]+)$")
+      list(APPEND associated_regex "${CMAKE_MATCH_1}")
+    elseif(opt STREQUAL ":")
+      # Activate series matching.
+      set(series_option "${opt}")
+    elseif(opt STREQUAL "RECURSE:")
+      # Activate recursive matching in directories.
+      set(recurse_option "${opt}")
+    elseif("x${opt}" MATCHES "^[^][:/*?]+$")
+      # Specific associated file.
+      list(APPEND associated_files "${opt}")
+    else()
+      message(FATAL_ERROR "Unknown option \"${opt}\" in argument\n"
+        "  ${arg}\n")
+    endif()
+  endforeach()
+
+  if(series_option)
+    if(data_is_directory)
+      message(FATAL_ERROR "Series option \"${series_option}\" not allowed with directories.")
+    endif()
+    if(associated_files OR associated_regex)
+      message(FATAL_ERROR "Series option \"${series_option}\" not allowed with associated files.")
+    endif()
+    if(recurse_option)
+      message(FATAL_ERROR "Recurse option \"${recurse_option}\" allowed only with directories.")
+    endif()
+    # Load a whole file series.
+    _ExternalData_arg_series()
+  elseif(data_is_directory)
+    if(associated_files OR associated_regex)
+      # Load listed/matching associated files in the directory.
+      _ExternalData_arg_associated()
+    else()
+      message(FATAL_ERROR "Data directory referenced by argument\n"
+        "  ${arg}\n"
+        "must list associated files.")
+    endif()
+  else()
+    if(recurse_option)
+      message(FATAL_ERROR "Recurse option \"${recurse_option}\" allowed only with directories.")
+    endif()
+    # Load the named data file.
+    _ExternalData_arg_single()
+    if(associated_files OR associated_regex)
+      # Load listed/matching associated files.
+      _ExternalData_arg_associated()
+    endif()
+  endif()
+
+  if(NOT have_original)
+    if(have_original_as_dir)
+      set(msg_kind FATAL_ERROR)
+      set(msg "that is directory instead of a file!")
+    else()
+      set(msg_kind AUTHOR_WARNING)
+      set(msg "that does not exist as a file (with or without an extension)!")
+    endif()
+    message(${msg_kind} "Data file referenced by argument\n"
+      "  ${arg}\n"
+      "corresponds to source tree path\n"
+      "  ${reldata}\n"
+      "${msg}")
+  endif()
+
+  if(external)
+    # Make the series available in the build tree.
+    set_property(GLOBAL APPEND PROPERTY
+      _ExternalData_${target}_FETCH "${external}")
+    set_property(GLOBAL APPEND PROPERTY
+      _ExternalData_${target}_LOCAL "${internal}")
+    set("${var_file}" "${top_bin}/${reldata}" PARENT_SCOPE)
+  else()
+    # The whole series is in the source tree.
+    set("${var_file}" "${top_src}/${reldata}" PARENT_SCOPE)
+  endif()
+endfunction()
+
+macro(_ExternalData_arg_associated)
+  # Associated files lie in the same directory.
+  if(data_is_directory)
+    set(reldir "${reldata}")
+  else()
+    get_filename_component(reldir "${reldata}" PATH)
+  endif()
+  if(reldir)
+    string(APPEND reldir "/")
+  endif()
+  _ExternalData_exact_regex(reldir_regex "${reldir}")
+  if(recurse_option)
+    set(glob GLOB_RECURSE)
+    string(APPEND reldir_regex "(.+/)?")
+  else()
+    set(glob GLOB)
+  endif()
+
+  # Find files named explicitly.
+  foreach(file ${associated_files})
+    _ExternalData_exact_regex(file_regex "${file}")
+    _ExternalData_arg_find_files(${glob} "${reldir}${file}"
+      "${reldir_regex}${file_regex}")
+  endforeach()
+
+  # Find files matching the given regular expressions.
+  set(all "")
+  set(sep "")
+  foreach(regex ${associated_regex})
+    string(APPEND all "${sep}${reldir_regex}${regex}")
+    set(sep "|")
+  endforeach()
+  _ExternalData_arg_find_files(${glob} "${reldir}" "${all}")
+endmacro()
+
+macro(_ExternalData_arg_single)
+  # Match only the named data by itself.
+  _ExternalData_exact_regex(data_regex "${reldata}")
+  _ExternalData_arg_find_files(GLOB "${reldata}" "${data_regex}")
+endmacro()
+
+macro(_ExternalData_arg_series)
+  # Configure series parsing and matching.
+  set(series_parse_prefix "")
+  set(series_parse_number "\\1")
+  set(series_parse_suffix "\\2")
+  if(ExternalData_SERIES_PARSE)
+    if(ExternalData_SERIES_PARSE_NUMBER AND ExternalData_SERIES_PARSE_SUFFIX)
+      if(ExternalData_SERIES_PARSE_PREFIX)
+        set(series_parse_prefix "\\${ExternalData_SERIES_PARSE_PREFIX}")
+      endif()
+      set(series_parse_number "\\${ExternalData_SERIES_PARSE_NUMBER}")
+      set(series_parse_suffix "\\${ExternalData_SERIES_PARSE_SUFFIX}")
+    elseif(NOT "x${ExternalData_SERIES_PARSE}" MATCHES "^x\\([^()]*\\)\\([^()]*\\)\\$$")
+      message(FATAL_ERROR
+        "ExternalData_SERIES_PARSE is set to\n"
+        "  ${ExternalData_SERIES_PARSE}\n"
+        "which is not of the form\n"
+        "  (<number>)(<suffix>)$\n"
+        "Fix the regular expression or set variables\n"
+        "  ExternalData_SERIES_PARSE_PREFIX = <prefix> regex group number, if any\n"
+        "  ExternalData_SERIES_PARSE_NUMBER = <number> regex group number\n"
+        "  ExternalData_SERIES_PARSE_SUFFIX = <suffix> regex group number\n"
+        )
+    endif()
+    set(series_parse "${ExternalData_SERIES_PARSE}")
+  else()
+    set(series_parse "([0-9]*)(\\.[^./]*)$")
+  endif()
+  if(ExternalData_SERIES_MATCH)
+    set(series_match "${ExternalData_SERIES_MATCH}")
+  else()
+    set(series_match "[_.-]?[0-9]*")
+  endif()
+
+  # Parse the base, number, and extension components of the series.
+  string(REGEX REPLACE "${series_parse}" "${series_parse_prefix};${series_parse_number};${series_parse_suffix}" tuple "${reldata}")
+  list(LENGTH tuple len)
+  if(NOT "${len}" EQUAL 3)
+    message(FATAL_ERROR "Data file referenced by argument\n"
+      "  ${arg}\n"
+      "corresponds to path\n"
+      "  ${reldata}\n"
+      "that does not match regular expression\n"
+      "  ${series_parse}")
+  endif()
+  list(GET tuple 0 relbase)
+  list(GET tuple 2 ext)
+
+  # Glob files that might match the series.
+  # Then match base, number, and extension.
+  _ExternalData_exact_regex(series_base "${relbase}")
+  _ExternalData_exact_regex(series_ext "${ext}")
+  _ExternalData_arg_find_files(GLOB "${relbase}*${ext}"
+    "${series_base}${series_match}${series_ext}")
+endmacro()
+
+function(_ExternalData_arg_find_files glob pattern regex)
+  cmake_policy(PUSH)
+  cmake_policy(SET CMP0009 NEW)
+  file(${glob} globbed RELATIVE "${top_src}" "${top_src}/${pattern}*")
+  cmake_policy(POP)
+  set(externals_count -1)
+  foreach(entry IN LISTS globbed)
+    if("x${entry}" MATCHES "^x(.*)(\\.(${_ExternalData_REGEX_EXT}))$")
+      set(relname "${CMAKE_MATCH_1}")
+      set(alg "${CMAKE_MATCH_2}")
+    else()
+      set(relname "${entry}")
+      set(alg "")
+    endif()
+    if("x${relname}" MATCHES "^x${regex}$" # matches
+        AND NOT "x${relname}" MATCHES "(^x|/)\\.ExternalData_" # not staged obj
+        )
+      if(IS_DIRECTORY "${top_src}/${entry}")
+        if("${relname}" STREQUAL "${reldata}")
+          set(have_original_as_dir 1)
+        endif()
+      else()
+        set(name "${top_src}/${relname}")
+        set(file "${top_bin}/${relname}")
+        if(alg)
+          if(NOT "${external_${externals_count}_file_name}" STREQUAL "${file}|${name}")
+            math(EXPR externals_count "${externals_count} + 1")
+            set(external_${externals_count}_file_name "${file}|${name}")
+          endif()
+          list(APPEND external_${externals_count}_algs "${alg}")
+        elseif(ExternalData_LINK_CONTENT)
+          _ExternalData_link_content("${name}" alg)
+          list(APPEND external "${file}|${name}|${alg}")
+        elseif(NOT top_same)
+          list(APPEND internal "${file}|${name}")
+        endif()
+        if("${relname}" STREQUAL "${reldata}")
+          set(have_original 1)
+        endif()
+      endif()
+    endif()
+  endforeach()
+  if(${externals_count} GREATER -1)
+    foreach(ii RANGE ${externals_count})
+      string(REPLACE ";" "+" algs_delim "${external_${ii}_algs}")
+      list(APPEND external "${external_${ii}_file_name}|${algs_delim}")
+      unset(external_${ii}_algs)
+      unset(external_${ii}_file_name)
+    endforeach()
+  endif()
+  set(external "${external}" PARENT_SCOPE)
+  set(internal "${internal}" PARENT_SCOPE)
+  set(have_original "${have_original}" PARENT_SCOPE)
+  set(have_original_as_dir "${have_original_as_dir}" PARENT_SCOPE)
+endfunction()
+
+#-----------------------------------------------------------------------------
+# Private script mode interface
+
+if(CMAKE_GENERATOR OR NOT ExternalData_ACTION)
+  return()
+endif()
+
+if(ExternalData_CONFIG)
+  include(${ExternalData_CONFIG})
+endif()
+if(NOT ExternalData_URL_TEMPLATES AND NOT ExternalData_OBJECT_STORES)
+  message(FATAL_ERROR
+    "Neither ExternalData_URL_TEMPLATES nor ExternalData_OBJECT_STORES is set!")
+endif()
+
+function(_ExternalData_link_or_copy src dst)
+  # Create a temporary file first.
+  get_filename_component(dst_dir "${dst}" PATH)
+  file(MAKE_DIRECTORY "${dst_dir}")
+  _ExternalData_random(random)
+  set(tmp "${dst}.tmp${random}")
+  if(UNIX AND NOT ExternalData_NO_SYMLINKS)
+    # Create a symbolic link.
+    set(tgt "${src}")
+    if(relative_top)
+      # Use relative path if files are close enough.
+      file(RELATIVE_PATH relsrc "${relative_top}" "${src}")
+      file(RELATIVE_PATH relfile "${relative_top}" "${dst}")
+      if(NOT IS_ABSOLUTE "${relsrc}" AND NOT "${relsrc}" MATCHES "^\\.\\./" AND
+          NOT IS_ABSOLUTE "${reldst}" AND NOT "${reldst}" MATCHES "^\\.\\./")
+        file(RELATIVE_PATH tgt "${dst_dir}" "${src}")
+      endif()
+    endif()
+    # Create link (falling back to copying if there's a problem).
+    file(CREATE_LINK "${tgt}" "${tmp}" RESULT result COPY_ON_ERROR SYMBOLIC)
+  else()
+    # Create a copy.
+    file(COPY_FILE "${src}" "${tmp}" RESULT result)
+  endif()
+  if(result)
+    file(REMOVE "${tmp}")
+    message(FATAL_ERROR "Failed to create:\n  \"${tmp}\"\nfrom:\n  \"${obj}\"\nwith error:\n  ${result}")
+  endif()
+
+  # Atomically create/replace the real destination.
+  file(RENAME "${tmp}" "${dst}")
+endfunction()
+
+function(_ExternalData_download_file url file err_var msg_var)
+  set(retry 3)
+  while(retry)
+    math(EXPR retry "${retry} - 1")
+    if(ExternalData_TIMEOUT_INACTIVITY)
+      set(inactivity_timeout INACTIVITY_TIMEOUT ${ExternalData_TIMEOUT_INACTIVITY})
+    elseif(NOT "${ExternalData_TIMEOUT_INACTIVITY}" EQUAL 0)
+      set(inactivity_timeout INACTIVITY_TIMEOUT 60)
+    else()
+      set(inactivity_timeout "")
+    endif()
+    if(ExternalData_TIMEOUT_ABSOLUTE)
+      set(absolute_timeout TIMEOUT ${ExternalData_TIMEOUT_ABSOLUTE})
+    elseif(NOT "${ExternalData_TIMEOUT_ABSOLUTE}" EQUAL 0)
+      set(absolute_timeout TIMEOUT 300)
+    else()
+      set(absolute_timeout "")
+    endif()
+    set(show_progress_args)
+    if (ExternalData_SHOW_PROGRESS)
+      list(APPEND show_progress_args SHOW_PROGRESS)
+    endif ()
+    file(DOWNLOAD "${url}" "${file}" STATUS status LOG log ${inactivity_timeout} ${absolute_timeout} ${show_progress_args})
+    list(GET status 0 err)
+    list(GET status 1 msg)
+    if(err)
+      if("${msg}" MATCHES "HTTP response code said error" AND
+          "${log}" MATCHES "error: 503")
+        set(msg "temporarily unavailable")
+      endif()
+    elseif("${log}" MATCHES "\nHTTP[^\n]* 503")
+      set(err TRUE)
+      set(msg "temporarily unavailable")
+    endif()
+    if(NOT err OR NOT "${msg}" MATCHES "partial|timeout|temporarily")
+      break()
+    elseif(retry)
+      message(STATUS "[download terminated: ${msg}, retries left: ${retry}]")
+    endif()
+  endwhile()
+  set("${err_var}" "${err}" PARENT_SCOPE)
+  set("${msg_var}" "${msg}" PARENT_SCOPE)
+endfunction()
+
+function(_ExternalData_custom_fetch key loc file err_var msg_var)
+  if(NOT ExternalData_CUSTOM_SCRIPT_${key})
+    set(err 1)
+    set(msg "No ExternalData_CUSTOM_SCRIPT_${key} set!")
+  elseif(NOT EXISTS "${ExternalData_CUSTOM_SCRIPT_${key}}")
+    set(err 1)
+    set(msg "No '${ExternalData_CUSTOM_SCRIPT_${key}}' exists!")
+  else()
+    set(ExternalData_CUSTOM_LOCATION "${loc}")
+    set(ExternalData_CUSTOM_FILE "${file}")
+    unset(ExternalData_CUSTOM_ERROR)
+    include("${ExternalData_CUSTOM_SCRIPT_${key}}")
+    if(DEFINED ExternalData_CUSTOM_ERROR)
+      set(err 1)
+      set(msg "${ExternalData_CUSTOM_ERROR}")
+    else()
+      set(err 0)
+      set(msg "no error")
+    endif()
+  endif()
+  set("${err_var}" "${err}" PARENT_SCOPE)
+  set("${msg_var}" "${msg}" PARENT_SCOPE)
+endfunction()
+
+function(_ExternalData_get_from_object_store hash algo var_obj var_success)
+  # Search all object stores for an existing object.
+  foreach(dir ${ExternalData_OBJECT_STORES})
+    set(obj "${dir}/${algo}/${hash}")
+    if(EXISTS "${obj}")
+      message(STATUS "Found object: \"${obj}\"")
+      set("${var_obj}" "${obj}" PARENT_SCOPE)
+      set("${var_success}" 1 PARENT_SCOPE)
+      return()
+    endif()
+  endforeach()
+endfunction()
+
+function(_ExternalData_download_object name hash algo var_obj var_success var_errorMsg)
+  # Search all object stores for an existing object.
+  set(success 1)
+  foreach(dir ${ExternalData_OBJECT_STORES})
+    set(obj "${dir}/${algo}/${hash}")
+    if(EXISTS "${obj}")
+      message(STATUS "Found object: \"${obj}\"")
+      set("${var_obj}" "${obj}" PARENT_SCOPE)
+      set("${var_success}" "${success}" PARENT_SCOPE)
+      return()
+    endif()
+  endforeach()
+
+  # Download object to the first store.
+  list(GET ExternalData_OBJECT_STORES 0 store)
+  set(obj "${store}/${algo}/${hash}")
+
+  _ExternalData_random(random)
+  set(tmp "${obj}.tmp${random}")
+  set(found 0)
+  set(tried "")
+  foreach(url_template IN LISTS ExternalData_URL_TEMPLATES)
+    string(REPLACE "%(hash)" "${hash}" url_tmp "${url_template}")
+    string(REPLACE "%(algo)" "${algo}" url "${url_tmp}")
+    if(url MATCHES "^(.*)%\\(algo:([A-Za-z_][A-Za-z0-9_]*)\\)(.*)$")
+      set(lhs "${CMAKE_MATCH_1}")
+      set(key "${CMAKE_MATCH_2}")
+      set(rhs "${CMAKE_MATCH_3}")
+      if(DEFINED ExternalData_URL_ALGO_${algo}_${key})
+        set(url "${lhs}${ExternalData_URL_ALGO_${algo}_${key}}${rhs}")
+      else()
+        set(url "${lhs}${algo}${rhs}")
+      endif()
+    endif()
+    string(REGEX REPLACE "((https?|ftp)://)([^@]+@)?(.*)" "\\1\\4" secured_url "${url}")
+    message(STATUS "Fetching \"${secured_url}\"")
+    if(url MATCHES "^ExternalDataCustomScript://([A-Za-z_][A-Za-z0-9_]*)/(.*)$")
+      _ExternalData_custom_fetch("${CMAKE_MATCH_1}" "${CMAKE_MATCH_2}" "${tmp}" err errMsg)
+    else()
+      _ExternalData_download_file("${url}" "${tmp}" err errMsg)
+    endif()
+    string(APPEND tried "\n  ${url}")
+    if(err)
+      string(APPEND tried " (${errMsg})")
+    else()
+      # Verify downloaded object.
+      _ExternalData_compute_hash(dl_hash "${algo}" "${tmp}")
+      if("${dl_hash}" STREQUAL "${hash}")
+        set(found 1)
+        break()
+      else()
+        string(APPEND tried " (wrong hash ${algo}=${dl_hash})")
+        if("$ENV{ExternalData_DEBUG_DOWNLOAD}" MATCHES ".")
+          file(RENAME "${tmp}" "${store}/${algo}/${dl_hash}")
+        endif()
+      endif()
+    endif()
+    file(REMOVE "${tmp}")
+  endforeach()
+
+  get_filename_component(dir "${name}" PATH)
+  set(staged "${dir}/.ExternalData_${algo}_${hash}")
+
+  set(success 1)
+  if(found)
+    # Atomically create the object.  If we lose a race with another process,
+    # do not replace it.  Content-addressing ensures it has what we expect.
+    file(RENAME "${tmp}" "${obj}" NO_REPLACE RESULT result)
+    if (result STREQUAL "NO_REPLACE")
+      file(REMOVE "${tmp}")
+    elseif (result)
+      message(FATAL_ERROR "Failed to rename:\n  \"${tmp}\"\nto:\n  \"${obj}\"\nwith error:\n  ${result}")
+    endif()
+    message(STATUS "Downloaded object: \"${obj}\"")
+  elseif(EXISTS "${staged}")
+    set(obj "${staged}")
+    message(STATUS "Staged object: \"${obj}\"")
+  else()
+    if(NOT tried)
+      set(tried "\n  (No ExternalData_URL_TEMPLATES given)")
+    endif()
+    set(success 0)
+    set("${var_errorMsg}" "Object ${algo}=${hash} not found at:${tried}" PARENT_SCOPE)
+  endif()
+
+  set("${var_obj}" "${obj}" PARENT_SCOPE)
+  set("${var_success}" "${success}" PARENT_SCOPE)
+endfunction()
+
+if("${ExternalData_ACTION}" STREQUAL "fetch")
+  foreach(v ExternalData_OBJECT_STORES file name exts)
+    if(NOT DEFINED "${v}")
+      message(FATAL_ERROR "No \"-D${v}=\" value provided!")
+    endif()
+  endforeach()
+
+  string(REPLACE "+" ";" exts_list "${exts}")
+  set(succeeded 0)
+  set(errorMsg "")
+  set(hash_list )
+  set(algo_list )
+  set(hash )
+  set(algo )
+  foreach(ext ${exts_list})
+    file(READ "${name}${ext}" hash)
+    string(STRIP "${hash}" hash)
+
+    if("${ext}" MATCHES "^\\.(${_ExternalData_REGEX_EXT})$")
+      string(TOUPPER "${CMAKE_MATCH_1}" algo)
+      string(REPLACE "-" "_" algo "${algo}")
+    else()
+      message(FATAL_ERROR "Unknown hash algorithm extension \"${ext}\"")
+    endif()
+
+    list(APPEND hash_list ${hash})
+    list(APPEND algo_list ${algo})
+  endforeach()
+
+  list(LENGTH exts_list num_extensions)
+  math(EXPR exts_range "${num_extensions} - 1")
+  foreach(ii RANGE 0 ${exts_range})
+    list(GET hash_list ${ii} hash)
+    list(GET algo_list ${ii} algo)
+    _ExternalData_get_from_object_store("${hash}" "${algo}" obj succeeded)
+    if(succeeded)
+      break()
+    endif()
+  endforeach()
+  if(NOT succeeded)
+    foreach(ii RANGE 0 ${exts_range})
+      list(GET hash_list ${ii} hash)
+      list(GET algo_list ${ii} algo)
+      _ExternalData_download_object("${name}" "${hash}" "${algo}"
+        obj succeeded algoErrorMsg)
+      string(APPEND errorMsg "\n${algoErrorMsg}")
+      if(succeeded)
+        break()
+      endif()
+    endforeach()
+  endif()
+  if(NOT succeeded)
+    message(FATAL_ERROR "${errorMsg}")
+  endif()
+  # Check if file already corresponds to the object.
+  set(stamp "-hash-stamp")
+  set(file_up_to_date 0)
+  if(EXISTS "${file}" AND EXISTS "${file}${stamp}")
+    file(READ "${file}${stamp}" f_hash)
+    string(STRIP "${f_hash}" f_hash)
+    if("${f_hash}" STREQUAL "${hash}")
+      set(file_up_to_date 1)
+    endif()
+  endif()
+
+  if(file_up_to_date)
+    # Touch the file to convince the build system it is up to date.
+    file(TOUCH "${file}")
+  else()
+    _ExternalData_link_or_copy("${obj}" "${file}")
+  endif()
+
+  # Atomically update the hash/timestamp file to record the object referenced.
+  _ExternalData_atomic_write("${file}${stamp}" "${hash}\n")
+elseif("${ExternalData_ACTION}" STREQUAL "local")
+  foreach(v file name)
+    if(NOT DEFINED "${v}")
+      message(FATAL_ERROR "No \"-D${v}=\" value provided!")
+    endif()
+  endforeach()
+  _ExternalData_link_or_copy("${name}" "${file}")
+else()
+  message(FATAL_ERROR "Unknown ExternalData_ACTION=[${ExternalData_ACTION}]")
+endif()
diff --git a/share/cmake-3.18/Modules/ExternalData_config.cmake.in b/share/cmake-3.22/Modules/ExternalData_config.cmake.in
similarity index 100%
rename from share/cmake-3.18/Modules/ExternalData_config.cmake.in
rename to share/cmake-3.22/Modules/ExternalData_config.cmake.in
diff --git a/share/cmake-3.22/Modules/ExternalProject-download.cmake.in b/share/cmake-3.22/Modules/ExternalProject-download.cmake.in
new file mode 100644
index 0000000..ff8c659
--- /dev/null
+++ b/share/cmake-3.22/Modules/ExternalProject-download.cmake.in
@@ -0,0 +1,173 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+cmake_minimum_required(VERSION 3.5)
+
+function(check_file_hash has_hash hash_is_good)
+  if("${has_hash}" STREQUAL "")
+    message(FATAL_ERROR "has_hash Can't be empty")
+  endif()
+
+  if("${hash_is_good}" STREQUAL "")
+    message(FATAL_ERROR "hash_is_good Can't be empty")
+  endif()
+
+  if("@ALGO@" STREQUAL "")
+    # No check
+    set("${has_hash}" FALSE PARENT_SCOPE)
+    set("${hash_is_good}" FALSE PARENT_SCOPE)
+    return()
+  endif()
+
+  set("${has_hash}" TRUE PARENT_SCOPE)
+
+  message(STATUS "verifying file...
+       file='@LOCAL@'")
+
+  file("@ALGO@" "@LOCAL@" actual_value)
+
+  if(NOT "${actual_value}" STREQUAL "@EXPECT_VALUE@")
+    set("${hash_is_good}" FALSE PARENT_SCOPE)
+    message(STATUS "@ALGO@ hash of
+    @LOCAL@
+  does not match expected value
+    expected: '@EXPECT_VALUE@'
+      actual: '${actual_value}'")
+  else()
+    set("${hash_is_good}" TRUE PARENT_SCOPE)
+  endif()
+endfunction()
+
+function(sleep_before_download attempt)
+  if(attempt EQUAL 0)
+    return()
+  endif()
+
+  if(attempt EQUAL 1)
+    message(STATUS "Retrying...")
+    return()
+  endif()
+
+  set(sleep_seconds 0)
+
+  if(attempt EQUAL 2)
+    set(sleep_seconds 5)
+  elseif(attempt EQUAL 3)
+    set(sleep_seconds 5)
+  elseif(attempt EQUAL 4)
+    set(sleep_seconds 15)
+  elseif(attempt EQUAL 5)
+    set(sleep_seconds 60)
+  elseif(attempt EQUAL 6)
+    set(sleep_seconds 90)
+  elseif(attempt EQUAL 7)
+    set(sleep_seconds 300)
+  else()
+    set(sleep_seconds 1200)
+  endif()
+
+  message(STATUS "Retry after ${sleep_seconds} seconds (attempt #${attempt}) ...")
+
+  execute_process(COMMAND "${CMAKE_COMMAND}" -E sleep "${sleep_seconds}")
+endfunction()
+
+if("@LOCAL@" STREQUAL "")
+  message(FATAL_ERROR "LOCAL can't be empty")
+endif()
+
+if("@REMOTE@" STREQUAL "")
+  message(FATAL_ERROR "REMOTE can't be empty")
+endif()
+
+if(EXISTS "@LOCAL@")
+  check_file_hash(has_hash hash_is_good)
+  if(has_hash)
+    if(hash_is_good)
+      message(STATUS "File already exists and hash match (skip download):
+  file='@LOCAL@'
+  @ALGO@='@EXPECT_VALUE@'"
+      )
+      return()
+    else()
+      message(STATUS "File already exists but hash mismatch. Removing...")
+      file(REMOVE "@LOCAL@")
+    endif()
+  else()
+    message(STATUS "File already exists but no hash specified (use URL_HASH):
+  file='@LOCAL@'
+Old file will be removed and new file downloaded from URL."
+    )
+    file(REMOVE "@LOCAL@")
+  endif()
+endif()
+
+set(retry_number 5)
+
+message(STATUS "Downloading...
+   dst='@LOCAL@'
+   timeout='@TIMEOUT_MSG@'
+   inactivity timeout='@INACTIVITY_TIMEOUT_MSG@'"
+)
+set(download_retry_codes 7 6 8 15)
+set(skip_url_list)
+set(status_code)
+foreach(i RANGE ${retry_number})
+  if(status_code IN_LIST download_retry_codes)
+    sleep_before_download(${i})
+  endif()
+  foreach(url @REMOTE@)
+    if(NOT url IN_LIST skip_url_list)
+      message(STATUS "Using src='${url}'")
+
+      @TLS_VERIFY_CODE@
+      @TLS_CAINFO_CODE@
+      @NETRC_CODE@
+      @NETRC_FILE_CODE@
+
+      file(
+        DOWNLOAD
+        "${url}" "@LOCAL@"
+        @SHOW_PROGRESS@
+        @TIMEOUT_ARGS@
+        @INACTIVITY_TIMEOUT_ARGS@
+        STATUS status
+        LOG log
+        @USERPWD_ARGS@
+        @HTTP_HEADERS_ARGS@
+        )
+
+      list(GET status 0 status_code)
+      list(GET status 1 status_string)
+
+      if(status_code EQUAL 0)
+        check_file_hash(has_hash hash_is_good)
+        if(has_hash AND NOT hash_is_good)
+          message(STATUS "Hash mismatch, removing...")
+          file(REMOVE "@LOCAL@")
+        else()
+          message(STATUS "Downloading... done")
+          return()
+        endif()
+      else()
+        string(APPEND logFailedURLs "error: downloading '${url}' failed
+        status_code: ${status_code}
+        status_string: ${status_string}
+        log:
+        --- LOG BEGIN ---
+        ${log}
+        --- LOG END ---
+        "
+        )
+      if(NOT status_code IN_LIST download_retry_codes)
+        list(APPEND skip_url_list "${url}")
+        break()
+      endif()
+    endif()
+  endif()
+  endforeach()
+endforeach()
+
+message(FATAL_ERROR "Each download failed!
+  ${logFailedURLs}
+  "
+)
diff --git a/share/cmake-3.22/Modules/ExternalProject-gitupdate.cmake.in b/share/cmake-3.22/Modules/ExternalProject-gitupdate.cmake.in
new file mode 100644
index 0000000..0de2372
--- /dev/null
+++ b/share/cmake-3.22/Modules/ExternalProject-gitupdate.cmake.in
@@ -0,0 +1,277 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+cmake_minimum_required(VERSION 3.5)
+
+function(get_hash_for_ref ref out_var err_var)
+  execute_process(
+    COMMAND "@git_EXECUTABLE@" rev-parse "${ref}^0"
+    WORKING_DIRECTORY "@work_dir@"
+    RESULT_VARIABLE error_code
+    OUTPUT_VARIABLE ref_hash
+    ERROR_VARIABLE error_msg
+    OUTPUT_STRIP_TRAILING_WHITESPACE
+  )
+  if(error_code)
+    set(${out_var} "" PARENT_SCOPE)
+  else()
+    set(${out_var} "${ref_hash}" PARENT_SCOPE)
+  endif()
+  set(${err_var} "${error_msg}" PARENT_SCOPE)
+endfunction()
+
+get_hash_for_ref(HEAD head_sha error_msg)
+if(head_sha STREQUAL "")
+  message(FATAL_ERROR "Failed to get the hash for HEAD:\n${error_msg}")
+endif()
+
+
+execute_process(
+  COMMAND "@git_EXECUTABLE@" show-ref "@git_tag@"
+  WORKING_DIRECTORY "@work_dir@"
+  OUTPUT_VARIABLE show_ref_output
+)
+if(show_ref_output MATCHES "^[a-z0-9]+[ \\t]+refs/remotes/")
+  # Given a full remote/branch-name and we know about it already. Since
+  # branches can move around, we always have to fetch.
+  set(fetch_required YES)
+  set(checkout_name "@git_tag@")
+
+elseif(show_ref_output MATCHES "^[a-z0-9]+[ \\t]+refs/tags/")
+  # Given a tag name that we already know about. We don't know if the tag we
+  # have matches the remote though (tags can move), so we should fetch.
+  set(fetch_required YES)
+  set(checkout_name "@git_tag@")
+
+  # Special case to preserve backward compatibility: if we are already at the
+  # same commit as the tag we hold locally, don't do a fetch and assume the tag
+  # hasn't moved on the remote.
+  # FIXME: We should provide an option to always fetch for this case
+  get_hash_for_ref("@git_tag@" tag_sha error_msg)
+  if(tag_sha STREQUAL head_sha)
+    message(VERBOSE "Already at requested tag: ${tag_sha}")
+    return()
+  endif()
+
+elseif(show_ref_output MATCHES "^[a-z0-9]+[ \\t]+refs/heads/")
+  # Given a branch name without any remote and we already have a branch by that
+  # name. We might already have that branch checked out or it might be a
+  # different branch. It isn't safe to use a bare branch name without the
+  # remote, so do a fetch and replace the ref with one that includes the remote.
+  set(fetch_required YES)
+  set(checkout_name "@git_remote_name@/@git_tag@")
+
+else()
+  get_hash_for_ref("@git_tag@" tag_sha error_msg)
+  if(tag_sha STREQUAL head_sha)
+    # Have the right commit checked out already
+    message(VERBOSE "Already at requested ref: ${tag_sha}")
+    return()
+
+  elseif(tag_sha STREQUAL "")
+    # We don't know about this ref yet, so we have no choice but to fetch.
+    # We deliberately swallow any error message at the default log level
+    # because it can be confusing for users to see a failed git command.
+    # That failure is being handled here, so it isn't an error.
+    set(fetch_required YES)
+    set(checkout_name "@git_tag@")
+    if(NOT error_msg STREQUAL "")
+      message(VERBOSE "${error_msg}")
+    endif()
+
+  else()
+    # We have the commit, so we know we were asked to find a commit hash
+    # (otherwise it would have been handled further above), but we don't
+    # have that commit checked out yet
+    set(fetch_required NO)
+    set(checkout_name "@git_tag@")
+    if(NOT error_msg STREQUAL "")
+      message(WARNING "${error_msg}")
+    endif()
+
+  endif()
+endif()
+
+if(fetch_required)
+  message(VERBOSE "Fetching latest from the remote @git_remote_name@")
+  execute_process(
+    COMMAND "@git_EXECUTABLE@" fetch --tags --force "@git_remote_name@"
+    WORKING_DIRECTORY "@work_dir@"
+    COMMAND_ERROR_IS_FATAL ANY
+  )
+endif()
+
+set(git_update_strategy "@git_update_strategy@")
+if(git_update_strategy STREQUAL "")
+  # Backward compatibility requires REBASE as the default behavior
+  set(git_update_strategy REBASE)
+endif()
+
+if(git_update_strategy MATCHES "^REBASE(_CHECKOUT)?$")
+  # Asked to potentially try to rebase first, maybe with fallback to checkout.
+  # We can't if we aren't already on a branch and we shouldn't if that local
+  # branch isn't tracking the one we want to checkout.
+  execute_process(
+    COMMAND "@git_EXECUTABLE@" symbolic-ref -q HEAD
+    WORKING_DIRECTORY "@work_dir@"
+    OUTPUT_VARIABLE current_branch
+    OUTPUT_STRIP_TRAILING_WHITESPACE
+    # Don't test for an error. If this isn't a branch, we get a non-zero error
+    # code but empty output.
+  )
+
+  if(current_branch STREQUAL "")
+    # Not on a branch, checkout is the only sensible option since any rebase
+    # would always fail (and backward compatibility requires us to checkout in
+    # this situation)
+    set(git_update_strategy CHECKOUT)
+
+  else()
+    execute_process(
+      COMMAND "@git_EXECUTABLE@" for-each-ref "--format='%(upstream:short)'" "${current_branch}"
+      WORKING_DIRECTORY "@work_dir@"
+      OUTPUT_VARIABLE upstream_branch
+      OUTPUT_STRIP_TRAILING_WHITESPACE
+      COMMAND_ERROR_IS_FATAL ANY  # There is no error if no upstream is set
+    )
+    if(NOT upstream_branch STREQUAL checkout_name)
+      # Not safe to rebase when asked to checkout a different branch to the one
+      # we are tracking. If we did rebase, we could end up with arbitrary
+      # commits added to the ref we were asked to checkout if the current local
+      # branch happens to be able to rebase onto the target branch. There would
+      # be no error message and the user wouldn't know this was occurring.
+      set(git_update_strategy CHECKOUT)
+    endif()
+
+  endif()
+elseif(NOT git_update_strategy STREQUAL "CHECKOUT")
+  message(FATAL_ERROR "Unsupported git update strategy: ${git_update_strategy}")
+endif()
+
+
+# Check if stash is needed
+execute_process(
+  COMMAND "@git_EXECUTABLE@" status --porcelain
+  WORKING_DIRECTORY "@work_dir@"
+  RESULT_VARIABLE error_code
+  OUTPUT_VARIABLE repo_status
+)
+if(error_code)
+  message(FATAL_ERROR "Failed to get the status")
+endif()
+string(LENGTH "${repo_status}" need_stash)
+
+# If not in clean state, stash changes in order to be able to perform a
+# rebase or checkout without losing those changes permanently
+if(need_stash)
+  execute_process(
+    COMMAND "@git_EXECUTABLE@" stash save @git_stash_save_options@
+    WORKING_DIRECTORY "@work_dir@"
+    COMMAND_ERROR_IS_FATAL ANY
+  )
+endif()
+
+if(git_update_strategy STREQUAL "CHECKOUT")
+  execute_process(
+    COMMAND "@git_EXECUTABLE@" checkout "${checkout_name}"
+    WORKING_DIRECTORY "@work_dir@"
+    COMMAND_ERROR_IS_FATAL ANY
+  )
+else()
+  execute_process(
+    COMMAND "@git_EXECUTABLE@" rebase "${checkout_name}"
+    WORKING_DIRECTORY "@work_dir@"
+    RESULT_VARIABLE error_code
+    OUTPUT_VARIABLE rebase_output
+    ERROR_VARIABLE  rebase_output
+  )
+  if(error_code)
+    # Rebase failed, undo the rebase attempt before continuing
+    execute_process(
+      COMMAND "@git_EXECUTABLE@" rebase --abort
+      WORKING_DIRECTORY "@work_dir@"
+    )
+
+    if(NOT git_update_strategy STREQUAL "REBASE_CHECKOUT")
+      # Not allowed to do a checkout as a fallback, so cannot proceed
+      if(need_stash)
+        execute_process(
+          COMMAND "@git_EXECUTABLE@" stash pop --index --quiet
+          WORKING_DIRECTORY "@work_dir@"
+          )
+      endif()
+      message(FATAL_ERROR "\nFailed to rebase in: '@work_dir@'."
+                          "\nOutput from the attempted rebase follows:"
+                          "\n${rebase_output}"
+                          "\n\nYou will have to resolve the conflicts manually")
+    endif()
+
+    # Fall back to checkout. We create an annotated tag so that the user
+    # can manually inspect the situation and revert if required.
+    # We can't log the failed rebase output because MSVC sees it and
+    # intervenes, causing the build to fail even though it completes.
+    # Write it to a file instead.
+    string(TIMESTAMP tag_timestamp "%Y%m%dT%H%M%S" UTC)
+    set(tag_name _cmake_ExternalProject_moved_from_here_${tag_timestamp}Z)
+    set(error_log_file ${CMAKE_CURRENT_LIST_DIR}/rebase_error_${tag_timestamp}Z.log)
+    file(WRITE ${error_log_file} "${rebase_output}")
+    message(WARNING "Rebase failed, output has been saved to ${error_log_file}"
+                    "\nFalling back to checkout, previous commit tagged as ${tag_name}")
+    execute_process(
+      COMMAND "@git_EXECUTABLE@" tag -a
+              -m "ExternalProject attempting to move from here to ${checkout_name}"
+              ${tag_name}
+      WORKING_DIRECTORY "@work_dir@"
+      COMMAND_ERROR_IS_FATAL ANY
+    )
+
+    execute_process(
+      COMMAND "@git_EXECUTABLE@" checkout "${checkout_name}"
+      WORKING_DIRECTORY "@work_dir@"
+      COMMAND_ERROR_IS_FATAL ANY
+    )
+  endif()
+endif()
+
+if(need_stash)
+  # Put back the stashed changes
+  execute_process(
+    COMMAND "@git_EXECUTABLE@" stash pop --index --quiet
+    WORKING_DIRECTORY "@work_dir@"
+    RESULT_VARIABLE error_code
+    )
+  if(error_code)
+    # Stash pop --index failed: Try again dropping the index
+    execute_process(
+      COMMAND "@git_EXECUTABLE@" reset --hard --quiet
+      WORKING_DIRECTORY "@work_dir@"
+    )
+    execute_process(
+      COMMAND "@git_EXECUTABLE@" stash pop --quiet
+      WORKING_DIRECTORY "@work_dir@"
+      RESULT_VARIABLE error_code
+    )
+    if(error_code)
+      # Stash pop failed: Restore previous state.
+      execute_process(
+        COMMAND "@git_EXECUTABLE@" reset --hard --quiet ${head_sha}
+        WORKING_DIRECTORY "@work_dir@"
+      )
+      execute_process(
+        COMMAND "@git_EXECUTABLE@" stash pop --index --quiet
+        WORKING_DIRECTORY "@work_dir@"
+      )
+      message(FATAL_ERROR "\nFailed to unstash changes in: '@work_dir@'."
+                          "\nYou will have to resolve the conflicts manually")
+    endif()
+  endif()
+endif()
+
+set(init_submodules "@init_submodules@")
+if(init_submodules)
+  execute_process(
+    COMMAND "@git_EXECUTABLE@" submodule update @git_submodules_recurse@ --init @git_submodules@
+    WORKING_DIRECTORY "@work_dir@"
+    COMMAND_ERROR_IS_FATAL ANY
+  )
+endif()
diff --git a/share/cmake-3.18/Modules/ExternalProject-verify.cmake.in b/share/cmake-3.22/Modules/ExternalProject-verify.cmake.in
similarity index 100%
rename from share/cmake-3.18/Modules/ExternalProject-verify.cmake.in
rename to share/cmake-3.22/Modules/ExternalProject-verify.cmake.in
diff --git a/share/cmake-3.22/Modules/ExternalProject.cmake b/share/cmake-3.22/Modules/ExternalProject.cmake
new file mode 100644
index 0000000..4004ea4
--- /dev/null
+++ b/share/cmake-3.22/Modules/ExternalProject.cmake
@@ -0,0 +1,3729 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+include_guard(GLOBAL)
+
+#[=======================================================================[.rst:
+ExternalProject
+---------------
+
+.. only:: html
+
+   .. contents::
+
+Commands
+^^^^^^^^
+
+External Project Definition
+"""""""""""""""""""""""""""
+
+.. command:: ExternalProject_Add
+
+  The ``ExternalProject_Add()`` function creates a custom target to drive
+  download, update/patch, configure, build, install and test steps of an
+  external project:
+
+  .. code-block:: cmake
+
+    ExternalProject_Add(<name> [<option>...])
+
+  The individual steps within the process can be driven independently if
+  required (e.g. for CDash submission) and extra custom steps can be defined,
+  along with the ability to control the step dependencies. The directory
+  structure used for the management of the external project can also be
+  customized. The function supports a large number of options which can be used
+  to tailor the external project behavior.
+
+  **Directory Options:**
+    Most of the time, the default directory layout is sufficient. It is largely
+    an implementation detail that the main project usually doesn't need to
+    change. In some circumstances, however, control over the directory layout
+    can be useful or necessary. The directory options are potentially more
+    useful from the point of view that the main build can use the
+    :command:`ExternalProject_Get_Property` command to retrieve their values,
+    thereby allowing the main project to refer to build artifacts of the
+    external project.
+
+    ``PREFIX <dir>``
+      Root directory for the external project. Unless otherwise noted below,
+      all other directories associated with the external project will be
+      created under here.
+
+    ``TMP_DIR <dir>``
+      Directory in which to store temporary files.
+
+    ``STAMP_DIR <dir>``
+      Directory in which to store the timestamps of each step. Log files from
+      individual steps are also created in here unless overridden by LOG_DIR
+      (see *Logging Options* below).
+
+    ``LOG_DIR <dir>``
+      .. versionadded:: 3.14
+
+      Directory in which to store the logs of each step.
+
+    ``DOWNLOAD_DIR <dir>``
+      Directory in which to store downloaded files before unpacking them. This
+      directory is only used by the URL download method, all other download
+      methods use ``SOURCE_DIR`` directly instead.
+
+    ``SOURCE_DIR <dir>``
+      Source directory into which downloaded contents will be unpacked, or for
+      non-URL download methods, the directory in which the repository should be
+      checked out, cloned, etc. If no download method is specified, this must
+      point to an existing directory where the external project has already
+      been unpacked or cloned/checked out.
+
+      .. note::
+         If a download method is specified, any existing contents of the source
+         directory may be deleted. Only the URL download method checks whether
+         this directory is either missing or empty before initiating the
+         download, stopping with an error if it is not empty. All other
+         download methods silently discard any previous contents of the source
+         directory.
+
+    ``BINARY_DIR <dir>``
+      Specify the build directory location. This option is ignored if
+      ``BUILD_IN_SOURCE`` is enabled.
+
+    ``INSTALL_DIR <dir>``
+      Installation prefix to be placed in the ``<INSTALL_DIR>`` placeholder.
+      This does not actually configure the external project to install to
+      the given prefix. That must be done by passing appropriate arguments
+      to the external project configuration step, e.g. using ``<INSTALL_DIR>``.
+
+    If any of the above ``..._DIR`` options are not specified, their defaults
+    are computed as follows. If the ``PREFIX`` option is given or the
+    ``EP_PREFIX`` directory property is set, then an external project is built
+    and installed under the specified prefix::
+
+      TMP_DIR      = <prefix>/tmp
+      STAMP_DIR    = <prefix>/src/<name>-stamp
+      DOWNLOAD_DIR = <prefix>/src
+      SOURCE_DIR   = <prefix>/src/<name>
+      BINARY_DIR   = <prefix>/src/<name>-build
+      INSTALL_DIR  = <prefix>
+      LOG_DIR      = <STAMP_DIR>
+
+    Otherwise, if the ``EP_BASE`` directory property is set then components
+    of an external project are stored under the specified base::
+
+      TMP_DIR      = <base>/tmp/<name>
+      STAMP_DIR    = <base>/Stamp/<name>
+      DOWNLOAD_DIR = <base>/Download/<name>
+      SOURCE_DIR   = <base>/Source/<name>
+      BINARY_DIR   = <base>/Build/<name>
+      INSTALL_DIR  = <base>/Install/<name>
+      LOG_DIR      = <STAMP_DIR>
+
+    If no ``PREFIX``, ``EP_PREFIX``, or ``EP_BASE`` is specified, then the
+    default is to set ``PREFIX`` to ``<name>-prefix``. Relative paths are
+    interpreted with respect to :variable:`CMAKE_CURRENT_BINARY_DIR` at the
+    point where ``ExternalProject_Add()`` is called.
+
+  **Download Step Options:**
+    A download method can be omitted if the ``SOURCE_DIR`` option is used to
+    point to an existing non-empty directory. Otherwise, one of the download
+    methods below must be specified (multiple download methods should not be
+    given) or a custom ``DOWNLOAD_COMMAND`` provided.
+
+    ``DOWNLOAD_COMMAND <cmd>...``
+      Overrides the command used for the download step
+      (:manual:`generator expressions <cmake-generator-expressions(7)>` are
+      supported). If this option is specified, all other download options will
+      be ignored. Providing an empty string for ``<cmd>`` effectively disables
+      the download step.
+
+    *URL Download*
+      ``URL <url1> [<url2>...]``
+        List of paths and/or URL(s) of the external project's source. When more
+        than one URL is given, they are tried in turn until one succeeds. A URL
+        may be an ordinary path in the local file system (in which case it
+        must be the only URL provided) or any downloadable URL supported by the
+        :command:`file(DOWNLOAD)` command. A local filesystem path may refer to
+        either an existing directory or to an archive file, whereas a URL is
+        expected to point to a file which can be treated as an archive. When an
+        archive is used, it will be unpacked automatically unless the
+        ``DOWNLOAD_NO_EXTRACT`` option is set to prevent it. The archive type
+        is determined by inspecting the actual content rather than using logic
+        based on the file extension.
+
+        .. versionchanged:: 3.7
+          Multiple URLs are allowed.
+
+      ``URL_HASH <algo>=<hashValue>``
+        Hash of the archive file to be downloaded. The argument should be of
+        the form ``<algo>=<hashValue>`` where ``algo`` can be any of the hashing
+        algorithms supported by the :command:`file()` command. Specifying this
+        option is strongly recommended for URL downloads, as it ensures the
+        integrity of the downloaded content. It is also used as a check for a
+        previously downloaded file, allowing connection to the remote location
+        to be avoided altogether if the local directory already has a file from
+        an earlier download that matches the specified hash.
+
+      ``URL_MD5 <md5>``
+        Equivalent to ``URL_HASH MD5=<md5>``.
+
+      ``DOWNLOAD_NAME <fname>``
+        File name to use for the downloaded file. If not given, the end of the
+        URL is used to determine the file name. This option is rarely needed,
+        the default name is generally suitable and is not normally used outside
+        of code internal to the ``ExternalProject`` module.
+
+      ``DOWNLOAD_NO_EXTRACT <bool>``
+        .. versionadded:: 3.6
+
+        Allows the extraction part of the download step to be disabled by
+        passing a boolean true value for this option. If this option is not
+        given, the downloaded contents will be unpacked automatically if
+        required. If extraction has been disabled, the full path to the
+        downloaded file is available as ``<DOWNLOADED_FILE>`` in subsequent
+        steps or as the property ``DOWNLOADED_FILE`` with the
+        :command:`ExternalProject_Get_Property` command.
+
+      ``DOWNLOAD_NO_PROGRESS <bool>``
+        Can be used to disable logging the download progress. If this option is
+        not given, download progress messages will be logged.
+
+      ``TIMEOUT <seconds>``
+        Maximum time allowed for file download operations.
+
+      ``INACTIVITY_TIMEOUT <seconds>``
+        .. versionadded:: 3.19
+
+        Terminate the operation after a period of inactivity.
+
+      ``HTTP_USERNAME <username>``
+        .. versionadded:: 3.7
+
+        Username for the download operation if authentication is required.
+
+      ``HTTP_PASSWORD <password>``
+        .. versionadded:: 3.7
+
+        Password for the download operation if authentication is required.
+
+      ``HTTP_HEADER <header1> [<header2>...]``
+        .. versionadded:: 3.7
+
+        Provides an arbitrary list of HTTP headers for the download operation.
+        This can be useful for accessing content in systems like AWS, etc.
+
+      ``TLS_VERIFY <bool>``
+        Specifies whether certificate verification should be performed for
+        https URLs. If this option is not provided, the default behavior is
+        determined by the :variable:`CMAKE_TLS_VERIFY` variable (see
+        :command:`file(DOWNLOAD)`). If that is also not set, certificate
+        verification will not be performed. In situations where ``URL_HASH``
+        cannot be provided, this option can be an alternative verification
+        measure.
+
+        .. versionchanged:: 3.6
+          This option also applies to ``git clone`` invocations.
+
+      ``TLS_CAINFO <file>``
+        Specify a custom certificate authority file to use if ``TLS_VERIFY``
+        is enabled. If this option is not specified, the value of the
+        :variable:`CMAKE_TLS_CAINFO` variable will be used instead (see
+        :command:`file(DOWNLOAD)`)
+
+      ``NETRC <level>``
+        .. versionadded:: 3.11
+
+        Specify whether the ``.netrc`` file is to be used for operation.
+        If this option is not specified, the value of the :variable:`CMAKE_NETRC`
+        variable will be used instead (see :command:`file(DOWNLOAD)`)
+        Valid levels are:
+
+        ``IGNORED``
+          The ``.netrc`` file is ignored.
+          This is the default.
+        ``OPTIONAL``
+          The ``.netrc`` file is optional, and information in the URL
+          is preferred.  The file will be scanned to find which ever
+          information is not specified in the URL.
+        ``REQUIRED``
+          The ``.netrc`` file is required, and information in the URL
+          is ignored.
+
+      ``NETRC_FILE <file>``
+        .. versionadded:: 3.11
+
+        Specify an alternative ``.netrc`` file to the one in your home directory
+        if the ``NETRC`` level is ``OPTIONAL`` or ``REQUIRED``. If this option
+        is not specified, the value of the :variable:`CMAKE_NETRC_FILE` variable
+        will be used instead (see :command:`file(DOWNLOAD)`)
+
+      .. versionadded:: 3.1
+        Added support for `tbz2`, `.tar.xz`, `.txz`, and `.7z` extensions.
+
+    *Git*
+      NOTE: A git version of 1.6.5 or later is required if this download method
+      is used.
+
+      ``GIT_REPOSITORY <url>``
+        URL of the git repository. Any URL understood by the ``git`` command
+        may be used.
+
+      ``GIT_TAG <tag>``
+        Git branch name, tag or commit hash. Note that branch names and tags
+        should generally be specified as remote names (i.e. ``origin/myBranch``
+        rather than simply ``myBranch``). This ensures that if the remote end
+        has its tag moved or branch rebased or history rewritten, the local
+        clone will still be updated correctly. In general, however, specifying
+        a commit hash should be preferred for a number of reasons:
+
+        - If the local clone already has the commit corresponding to the hash,
+          no ``git fetch`` needs to be performed to check for changes each time
+          CMake is re-run. This can result in a significant speed up if many
+          external projects are being used.
+        - Using a specific git hash ensures that the main project's own history
+          is fully traceable to a specific point in the external project's
+          evolution. If a branch or tag name is used instead, then checking out
+          a specific commit of the main project doesn't necessarily pin the
+          whole build to a specific point in the life of the external project.
+          The lack of such deterministic behavior makes the main project lose
+          traceability and repeatability.
+
+        If ``GIT_SHALLOW`` is enabled then ``GIT_TAG`` works only with
+        branch names and tags.  A commit hash is not allowed.
+
+      ``GIT_REMOTE_NAME <name>``
+        The optional name of the remote. If this option is not specified, it
+        defaults to ``origin``.
+
+      ``GIT_SUBMODULES <module>...``
+        Specific git submodules that should also be updated. If this option is
+        not provided, all git submodules will be updated.
+
+        .. versionchanged:: 3.16
+          When :policy:`CMP0097` is set to ``NEW``, if this value is set
+          to an empty string then no submodules are initialized or updated.
+
+      ``GIT_SUBMODULES_RECURSE <bool>``
+        .. versionadded:: 3.17
+
+        Specify whether git submodules (if any) should update recursively by
+        passing the ``--recursive`` flag to ``git submodule update``.
+        If not specified, the default is on.
+
+      ``GIT_SHALLOW <bool>``
+        .. versionadded:: 3.6
+
+        When this option is enabled, the ``git clone`` operation will be given
+        the ``--depth 1`` option. This performs a shallow clone, which avoids
+        downloading the whole history and instead retrieves just the commit
+        denoted by the ``GIT_TAG`` option.
+
+      ``GIT_PROGRESS <bool>``
+        .. versionadded:: 3.8
+
+        When enabled, this option instructs the ``git clone`` operation to
+        report its progress by passing it the ``--progress`` option. Without
+        this option, the clone step for large projects may appear to make the
+        build stall, since nothing will be logged until the clone operation
+        finishes. While this option can be used to provide progress to prevent
+        the appearance of the build having stalled, it may also make the build
+        overly noisy if lots of external projects are used.
+
+      ``GIT_CONFIG <option1> [<option2>...]``
+        .. versionadded:: 3.8
+
+        Specify a list of config options to pass to ``git clone``. Each option
+        listed will be transformed into its own ``--config <option>`` on the
+        ``git clone`` command line, with each option required to be in the
+        form ``key=value``.
+
+      ``GIT_REMOTE_UPDATE_STRATEGY <strategy>``
+        .. versionadded:: 3.18
+
+        When ``GIT_TAG`` refers to a remote branch, this option can be used to
+        specify how the update step behaves.  The ``<strategy>`` must be one of
+        the following:
+
+        ``CHECKOUT``
+          Ignore the local branch and always checkout the branch specified by
+          ``GIT_TAG``.
+
+        ``REBASE``
+          Try to rebase the current branch to the one specified by ``GIT_TAG``.
+          If there are local uncommitted changes, they will be stashed first
+          and popped again after rebasing.  If rebasing or popping stashed
+          changes fail, abort the rebase and halt with an error.
+          When ``GIT_REMOTE_UPDATE_STRATEGY`` is not present, this is the
+          default strategy unless the default has been overridden with
+          ``CMAKE_EP_GIT_REMOTE_UPDATE_STRATEGY`` (see below).
+
+        ``REBASE_CHECKOUT``
+          Same as ``REBASE`` except if the rebase fails, an annotated tag will
+          be created at the original ``HEAD`` position from before the rebase
+          and then checkout ``GIT_TAG`` just like the ``CHECKOUT`` strategy.
+          The message stored on the annotated tag will give information about
+          what was attempted and the tag name will include a timestamp so that
+          each failed run will add a new tag.  This strategy ensures no changes
+          will be lost, but updates should always succeed if ``GIT_TAG`` refers
+          to a valid ref unless there are uncommitted changes that cannot be
+          popped successfully.
+
+        The variable ``CMAKE_EP_GIT_REMOTE_UPDATE_STRATEGY`` can be set to
+        override the default strategy.  This variable should not be set by a
+        project, it is intended for the user to set.  It is primarily intended
+        for use in continuous integration scripts to ensure that when history
+        is rewritten on a remote branch, the build doesn't end up with unintended
+        changes or failed builds resulting from conflicts during rebase operations.
+
+    *Subversion*
+      ``SVN_REPOSITORY <url>``
+        URL of the Subversion repository.
+
+      ``SVN_REVISION -r<rev>``
+        Revision to checkout from the Subversion repository.
+
+      ``SVN_USERNAME <username>``
+        Username for the Subversion checkout and update.
+
+      ``SVN_PASSWORD <password>``
+        Password for the Subversion checkout and update.
+
+      ``SVN_TRUST_CERT <bool>``
+        Specifies whether to trust the Subversion server site certificate. If
+        enabled, the ``--trust-server-cert`` option is passed to the ``svn``
+        checkout and update commands.
+
+    *Mercurial*
+      ``HG_REPOSITORY <url>``
+        URL of the mercurial repository.
+
+      ``HG_TAG <tag>``
+        Mercurial branch name, tag or commit id.
+
+    *CVS*
+      ``CVS_REPOSITORY <cvsroot>``
+        CVSROOT of the CVS repository.
+
+      ``CVS_MODULE <mod>``
+        Module to checkout from the CVS repository.
+
+      ``CVS_TAG <tag>``
+        Tag to checkout from the CVS repository.
+
+  **Update/Patch Step Options:**
+    Whenever CMake is re-run, by default the external project's sources will be
+    updated if the download method supports updates (e.g. a git repository
+    would be checked if the ``GIT_TAG`` does not refer to a specific commit).
+
+    ``UPDATE_COMMAND <cmd>...``
+      Overrides the download method's update step with a custom command.
+      The command may use
+      :manual:`generator expressions <cmake-generator-expressions(7)>`.
+
+    ``UPDATE_DISCONNECTED <bool>``
+      .. versionadded:: 3.2
+
+      When enabled, this option causes the update step to be skipped. It does
+      not, however, prevent the download step. The update step can still be
+      added as a step target (see :command:`ExternalProject_Add_StepTargets`)
+      and called manually. This is useful if you want to allow developers to
+      build the project when disconnected from the network (the network may
+      still be needed for the download step though).
+
+      When this option is present, it is generally advisable to make the value
+      a cache variable under the developer's control rather than hard-coding
+      it. If this option is not present, the default value is taken from the
+      ``EP_UPDATE_DISCONNECTED`` directory property. If that is also not
+      defined, updates are performed as normal. The ``EP_UPDATE_DISCONNECTED``
+      directory property is intended as a convenience for controlling the
+      ``UPDATE_DISCONNECTED`` behavior for an entire section of a project's
+      directory hierarchy and may be a more convenient method of giving
+      developers control over whether or not to perform updates (assuming the
+      project also provides a cache variable or some other convenient method
+      for setting the directory property).
+
+      This may cause a step target to be created automatically for the
+      ``download`` step.  See policy :policy:`CMP0114`.
+
+    ``PATCH_COMMAND <cmd>...``
+      Specifies a custom command to patch the sources after an update. By
+      default, no patch command is defined. Note that it can be quite difficult
+      to define an appropriate patch command that performs robustly, especially
+      for download methods such as git where changing the ``GIT_TAG`` will not
+      discard changes from a previous patch, but the patch command will be
+      called again after updating to the new tag.
+
+  **Configure Step Options:**
+    The configure step is run after the download and update steps. By default,
+    the external project is assumed to be a CMake project, but this can be
+    overridden if required.
+
+    ``CONFIGURE_COMMAND <cmd>...``
+      The default configure command runs CMake with a few options based on
+      the main project.  The options added are typically only those needed to
+      use the same generator as the main project, but the ``CMAKE_GENERATOR``
+      option can be given to override this.  The project is responsible for
+      adding any toolchain details, flags or other settings it wants to
+      re-use from the main project or otherwise specify (see ``CMAKE_ARGS``,
+      ``CMAKE_CACHE_ARGS`` and ``CMAKE_CACHE_DEFAULT_ARGS`` below).
+
+      For non-CMake external projects, the ``CONFIGURE_COMMAND`` option must
+      be used to override the default configure command
+      (:manual:`generator expressions <cmake-generator-expressions(7)>` are
+      supported). For projects that require no configure step, specify this
+      option with an empty string as the command to execute.
+
+    ``CMAKE_COMMAND /.../cmake``
+      Specify an alternative cmake executable for the configure step (use an
+      absolute path). This is generally not recommended, since it is
+      usually desirable to use the same CMake version throughout the whole
+      build. This option is ignored if a custom configure command has been
+      specified with ``CONFIGURE_COMMAND``.
+
+    ``CMAKE_GENERATOR <gen>``
+      Override the CMake generator used for the configure step. Without this
+      option, the same generator as the main build will be used. This option is
+      ignored if a custom configure command has been specified with the
+      ``CONFIGURE_COMMAND`` option.
+
+    ``CMAKE_GENERATOR_PLATFORM <platform>``
+      .. versionadded:: 3.1
+
+      Pass a generator-specific platform name to the CMake command (see
+      :variable:`CMAKE_GENERATOR_PLATFORM`). It is an error to provide this
+      option without the ``CMAKE_GENERATOR`` option.
+
+    ``CMAKE_GENERATOR_TOOLSET <toolset>``
+      Pass a generator-specific toolset name to the CMake command (see
+      :variable:`CMAKE_GENERATOR_TOOLSET`). It is an error to provide this
+      option without the ``CMAKE_GENERATOR`` option.
+
+    ``CMAKE_GENERATOR_INSTANCE <instance>``
+      .. versionadded:: 3.11
+
+      Pass a generator-specific instance selection to the CMake command (see
+      :variable:`CMAKE_GENERATOR_INSTANCE`). It is an error to provide this
+      option without the ``CMAKE_GENERATOR`` option.
+
+    ``CMAKE_ARGS <arg>...``
+      The specified arguments are passed to the ``cmake`` command line. They
+      can be any argument the ``cmake`` command understands, not just cache
+      values defined by ``-D...`` arguments (see also
+      :manual:`CMake Options <cmake(1)>`).
+
+      .. versionadded:: 3.3
+        Arguments may use :manual:`generator expressions <cmake-generator-expressions(7)>`.
+
+    ``CMAKE_CACHE_ARGS <arg>...``
+      This is an alternate way of specifying cache variables where command line
+      length issues may become a problem. The arguments are expected to be in
+      the form ``-Dvar:STRING=value``, which are then transformed into
+      CMake :command:`set` commands with the ``FORCE`` option used. These
+      ``set()`` commands are written to a pre-load script which is then applied
+      using the :manual:`cmake -C <cmake(1)>` command line option.
+
+      .. versionadded:: 3.3
+        Arguments may use :manual:`generator expressions <cmake-generator-expressions(7)>`.
+
+    ``CMAKE_CACHE_DEFAULT_ARGS <arg>...``
+      .. versionadded:: 3.2
+
+      This is the same as the ``CMAKE_CACHE_ARGS`` option except the ``set()``
+      commands do not include the ``FORCE`` keyword. This means the values act
+      as initial defaults only and will not override any variables already set
+      from a previous run. Use this option with care, as it can lead to
+      different behavior depending on whether the build starts from a fresh
+      build directory or re-uses previous build contents.
+
+      .. versionadded:: 3.15
+        If the CMake generator is the ``Green Hills MULTI`` and not overridden then
+        the original project's settings for the GHS toolset and target system
+        customization cache variables are propagated into the external project.
+
+    ``SOURCE_SUBDIR <dir>``
+      .. versionadded:: 3.7
+
+      When no ``CONFIGURE_COMMAND`` option is specified, the configure step
+      assumes the external project has a ``CMakeLists.txt`` file at the top of
+      its source tree (i.e. in ``SOURCE_DIR``). The ``SOURCE_SUBDIR`` option
+      can be used to point to an alternative directory within the source tree
+      to use as the top of the CMake source tree instead. This must be a
+      relative path and it will be interpreted as being relative to
+      ``SOURCE_DIR``.
+
+      .. versionadded:: 3.14
+        When ``BUILD_IN_SOURCE`` option is enabled, the ``BUILD_COMMAND``
+        is used to point to an alternative directory within the source tree.
+
+    ``CONFIGURE_HANDLED_BY_BUILD <bool>``
+      .. versionadded:: 3.20
+
+      Enabling this option relaxes the dependencies of the configure step on
+      other external projects to order-only. This means the configure step will
+      be executed after its external project dependencies are built but it will
+      not be marked dirty when one of its external project dependencies is
+      rebuilt. This option can be enabled when the build step is smart enough
+      to figure out if the configure step needs to be rerun. CMake and Meson are
+      examples of build systems whose build step is smart enough to know if the
+      configure step needs to be rerun.
+
+  **Build Step Options:**
+    If the configure step assumed the external project uses CMake as its build
+    system, the build step will also. Otherwise, the build step will assume a
+    Makefile-based build and simply run ``make`` with no arguments as the
+    default build step. This can be overridden with custom build commands if
+    required.
+
+    If both the main project and the external project use make as their build
+    tool, the build step of the external project is invoked as a recursive
+    make using ``$(MAKE)``.  This will communicate some build tool settings
+    from the main project to the external project.  If either the main project
+    or external project is not using make, no build tool settings will be
+    passed to the external project other than those established by the
+    configure step (i.e. running ``ninja -v`` in the main project will not
+    pass ``-v`` to the external project's build step, even if it also uses
+    ``ninja`` as its build tool).
+
+    ``BUILD_COMMAND <cmd>...``
+      Overrides the default build command
+      (:manual:`generator expressions <cmake-generator-expressions(7)>` are
+      supported). If this option is not given, the default build command will
+      be chosen to integrate with the main build in the most appropriate way
+      (e.g. using recursive ``make`` for Makefile generators or
+      ``cmake --build`` if the project uses a CMake build). This option can be
+      specified with an empty string as the command to make the build step do
+      nothing.
+
+    ``BUILD_IN_SOURCE <bool>``
+      When this option is enabled, the build will be done directly within the
+      external project's source tree. This should generally be avoided, the use
+      of a separate build directory is usually preferred, but it can be useful
+      when the external project assumes an in-source build. The ``BINARY_DIR``
+      option should not be specified if building in-source.
+
+    ``BUILD_ALWAYS <bool>``
+      Enabling this option forces the build step to always be run. This can be
+      the easiest way to robustly ensure that the external project's own build
+      dependencies are evaluated rather than relying on the default
+      success timestamp-based method. This option is not normally needed unless
+      developers are expected to modify something the external project's build
+      depends on in a way that is not detectable via the step target
+      dependencies (e.g. ``SOURCE_DIR`` is used without a download method and
+      developers might modify the sources in ``SOURCE_DIR``).
+
+    ``BUILD_BYPRODUCTS <file>...``
+      .. versionadded:: 3.2
+
+      Specifies files that will be generated by the build command but which
+      might or might not have their modification time updated by subsequent
+      builds. These ultimately get passed through as ``BYPRODUCTS`` to the
+      build step's own underlying call to :command:`add_custom_command`.
+
+  **Install Step Options:**
+    If the configure step assumed the external project uses CMake as its build
+    system, the install step will also. Otherwise, the install step will assume
+    a Makefile-based build and simply run ``make install`` as the default build
+    step. This can be overridden with custom install commands if required.
+
+    ``INSTALL_COMMAND <cmd>...``
+      The external project's own install step is invoked as part of the main
+      project's *build*. It is done after the external project's build step
+      and may be before or after the external project's test step (see the
+      ``TEST_BEFORE_INSTALL`` option below). The external project's install
+      rules are not part of the main project's install rules, so if anything
+      from the external project should be installed as part of the main build,
+      these need to be specified in the main build as additional
+      :command:`install` commands. The default install step builds the
+      ``install`` target of the external project, but this can be overridden
+      with a custom command using this option
+      (:manual:`generator expressions <cmake-generator-expressions(7)>` are
+      supported). Passing an empty string as the ``<cmd>`` makes the install
+      step do nothing.
+
+    .. note::
+      If the :envvar:`CMAKE_INSTALL_MODE` environment variable is set when the
+      main project is built, it will only have an effect if the following
+      conditions are met:
+
+      * The main project's configure step assumed the external project uses
+        CMake as its build system.
+      * The external project's install command actually runs. Note that due
+        to the way ``ExternalProject`` may use timestamps internally, if
+        nothing the install step depends on needs to be re-executed, the
+        install command might also not need to run.
+
+      Note also that ``ExternalProject`` does not check whether the
+      :envvar:`CMAKE_INSTALL_MODE` environment variable changes from one run
+      to another.
+
+  **Test Step Options:**
+    The test step is only defined if at least one of the following ``TEST_...``
+    options are provided.
+
+    ``TEST_COMMAND <cmd>...``
+      Overrides the default test command
+      (:manual:`generator expressions <cmake-generator-expressions(7)>` are
+      supported). If this option is not given, the default behavior of the test
+      step is to build the external project's own ``test`` target. This option
+      can be specified with ``<cmd>`` as an empty string, which allows the test
+      step to still be defined, but it will do nothing. Do not specify any of
+      the other ``TEST_...`` options if providing an empty string as the test
+      command, but prefer to omit all ``TEST_...`` options altogether if the
+      test step target is not needed.
+
+    ``TEST_BEFORE_INSTALL <bool>``
+      When this option is enabled, the test step will be executed before the
+      install step. The default behavior is for the test step to run after the
+      install step.
+
+    ``TEST_AFTER_INSTALL <bool>``
+      This option is mainly useful as a way to indicate that the test step is
+      desired but all default behavior is sufficient. Specifying this option
+      with a boolean true value ensures the test step is defined and that it
+      comes after the install step. If both ``TEST_BEFORE_INSTALL`` and
+      ``TEST_AFTER_INSTALL`` are enabled, the latter is silently ignored.
+
+    ``TEST_EXCLUDE_FROM_MAIN <bool>``
+      .. versionadded:: 3.2
+
+      If enabled, the main build's default ALL target will not depend on the
+      test step. This can be a useful way of ensuring the test step is defined
+      but only gets invoked when manually requested.
+      This may cause a step target to be created automatically for either
+      the ``install`` or ``build`` step.  See policy :policy:`CMP0114`.
+
+  **Output Logging Options:**
+    Each of the following ``LOG_...`` options can be used to wrap the relevant
+    step in a script to capture its output to files. The log files will be
+    created in ``LOG_DIR`` if supplied or otherwise the ``STAMP_DIR``
+    directory with step-specific file names.
+
+    ``LOG_DOWNLOAD <bool>``
+      When enabled, the output of the download step is logged to files.
+
+    ``LOG_UPDATE <bool>``
+      When enabled, the output of the update step is logged to files.
+
+    ``LOG_PATCH <bool>``
+      .. versionadded:: 3.14
+
+      When enabled, the output of the patch step is logged to files.
+
+    ``LOG_CONFIGURE <bool>``
+      When enabled, the output of the configure step is logged to files.
+
+    ``LOG_BUILD <bool>``
+      When enabled, the output of the build step is logged to files.
+
+    ``LOG_INSTALL <bool>``
+      When enabled, the output of the install step is logged to files.
+
+    ``LOG_TEST <bool>``
+      When enabled, the output of the test step is logged to files.
+
+    ``LOG_MERGED_STDOUTERR <bool>``
+      .. versionadded:: 3.14
+
+      When enabled, stdout and stderr will be merged for any step whose
+      output is being logged to files.
+
+    ``LOG_OUTPUT_ON_FAILURE <bool>``
+      .. versionadded:: 3.14
+
+      This option only has an effect if at least one of the other ``LOG_<step>``
+      options is enabled.  If an error occurs for a step which has logging to
+      file enabled, that step's output will be printed to the console if
+      ``LOG_OUTPUT_ON_FAILURE`` is set to true.  For cases where a large amount
+      of output is recorded, just the end of that output may be printed to the
+      console.
+
+  **Terminal Access Options:**
+    .. versionadded:: 3.4
+
+    Steps can be given direct access to the terminal in some cases. Giving a
+    step access to the terminal may allow it to receive terminal input if
+    required, such as for authentication details not provided by other options.
+    With the :generator:`Ninja` generator, these options place the steps in the
+    ``console`` :prop_gbl:`job pool <JOB_POOLS>`. Each step can be given access
+    to the terminal individually via the following options:
+
+    ``USES_TERMINAL_DOWNLOAD <bool>``
+      Give the download step access to the terminal.
+
+    ``USES_TERMINAL_UPDATE <bool>``
+      Give the update step access to the terminal.
+
+    ``USES_TERMINAL_CONFIGURE <bool>``
+      Give the configure step access to the terminal.
+
+    ``USES_TERMINAL_BUILD <bool>``
+      Give the build step access to the terminal.
+
+    ``USES_TERMINAL_INSTALL <bool>``
+      Give the install step access to the terminal.
+
+    ``USES_TERMINAL_TEST <bool>``
+      Give the test step access to the terminal.
+
+  **Target Options:**
+    ``DEPENDS <targets>...``
+      Specify other targets on which the external project depends. The other
+      targets will be brought up to date before any of the external project's
+      steps are executed. Because the external project uses additional custom
+      targets internally for each step, the ``DEPENDS`` option is the most
+      convenient way to ensure all of those steps depend on the other targets.
+      Simply doing
+      :command:`add_dependencies(\<name\> \<targets\>) <add_dependencies>` will
+      not make any of the steps dependent on ``<targets>``.
+
+    ``EXCLUDE_FROM_ALL <bool>``
+      When enabled, this option excludes the external project from the default
+      ALL target of the main build.
+
+    ``STEP_TARGETS <step-target>...``
+      Generate custom targets for the specified steps. This is required if the
+      steps need to be triggered manually or if they need to be used as
+      dependencies of other targets. If this option is not specified, the
+      default value is taken from the ``EP_STEP_TARGETS`` directory property.
+      See :command:`ExternalProject_Add_StepTargets` below for further
+      discussion of the effects of this option.
+
+    ``INDEPENDENT_STEP_TARGETS <step-target>...``
+      .. deprecated:: 3.19
+        This is allowed only if policy :policy:`CMP0114` is not set to ``NEW``.
+
+      Generates custom targets for the specified steps and prevent these targets
+      from having the usual dependencies applied to them. If this option is not
+      specified, the default value is taken from the
+      ``EP_INDEPENDENT_STEP_TARGETS`` directory property. This option is mostly
+      useful for allowing individual steps to be driven independently, such as
+      for a CDash setup where each step should be initiated and reported
+      individually rather than as one whole build. See
+      :command:`ExternalProject_Add_StepTargets` below for further discussion
+      of the effects of this option.
+
+  **Miscellaneous Options:**
+    ``LIST_SEPARATOR <sep>``
+      For any of the various ``..._COMMAND`` options, replace ``;`` with
+      ``<sep>`` in the specified command lines. This can be useful where list
+      variables may be given in commands where they should end up as
+      space-separated arguments (``<sep>`` would be a single space character
+      string in this case).
+
+    ``COMMAND <cmd>...``
+      Any of the other ``..._COMMAND`` options can have additional commands
+      appended to them by following them with as many ``COMMAND ...`` options
+      as needed
+      (:manual:`generator expressions <cmake-generator-expressions(7)>` are
+      supported). For example:
+
+      .. code-block:: cmake
+
+        ExternalProject_Add(example
+          ... # Download options, etc.
+          BUILD_COMMAND ${CMAKE_COMMAND} -E echo "Starting $<CONFIG> build"
+          COMMAND       ${CMAKE_COMMAND} --build <BINARY_DIR> --config $<CONFIG>
+          COMMAND       ${CMAKE_COMMAND} -E echo "$<CONFIG> build complete"
+        )
+
+  It should also be noted that each build step is created via a call to
+  :command:`ExternalProject_Add_Step`. See that command's documentation for the
+  automatic substitutions that are supported for some options.
+
+Obtaining Project Properties
+""""""""""""""""""""""""""""
+
+.. command:: ExternalProject_Get_Property
+
+  The ``ExternalProject_Get_Property()`` function retrieves external project
+  target properties:
+
+  .. code-block:: cmake
+
+    ExternalProject_Get_Property(<name> <prop1> [<prop2>...])
+
+  The function stores property values in variables of the same name. Property
+  names correspond to the keyword argument names of ``ExternalProject_Add()``.
+  For example, the source directory might be retrieved like so:
+
+  .. code-block:: cmake
+
+    ExternalProject_Get_property(myExtProj SOURCE_DIR)
+    message("Source dir of myExtProj = ${SOURCE_DIR}")
+
+Explicit Step Management
+""""""""""""""""""""""""
+
+The ``ExternalProject_Add()`` function on its own is often sufficient for
+incorporating an external project into the main build. Certain scenarios
+require additional work to implement desired behavior, such as adding in a
+custom step or making steps available as manually triggerable targets. The
+``ExternalProject_Add_Step()``, ``ExternalProject_Add_StepTargets()`` and
+``ExternalProject_Add_StepDependencies`` functions provide the lower level
+control needed to implement such step-level capabilities.
+
+.. command:: ExternalProject_Add_Step
+
+  The ``ExternalProject_Add_Step()`` function specifies an additional custom
+  step for an external project defined by an earlier call to
+  :command:`ExternalProject_Add`:
+
+  .. code-block:: cmake
+
+    ExternalProject_Add_Step(<name> <step> [<option>...])
+
+  ``<name>`` is the same as the name passed to the original call to
+  :command:`ExternalProject_Add`. The specified ``<step>`` must not be one of
+  the pre-defined steps (``mkdir``, ``download``, ``update``,
+  ``patch``, ``configure``, ``build``, ``install`` or ``test``). The supported
+  options are:
+
+  ``COMMAND <cmd>...``
+    The command line to be executed by this custom step
+    (:manual:`generator expressions <cmake-generator-expressions(7)>` are
+    supported). This option can be repeated multiple times to specify multiple
+    commands to be executed in order.
+
+  ``COMMENT "<text>..."``
+    Text to be printed when the custom step executes.
+
+  ``DEPENDEES <step>...``
+    Other steps (custom or pre-defined) on which this step depends.
+
+  ``DEPENDERS <step>...``
+    Other steps (custom or pre-defined) that depend on this new custom step.
+
+  ``DEPENDS <file>...``
+    Files on which this custom step depends.
+
+  ``INDEPENDENT <bool>``
+    .. versionadded:: 3.19
+
+    Specifies whether this step is independent of the external dependencies
+    specified by the :command:`ExternalProject_Add`'s ``DEPENDS`` option.
+    The default is ``FALSE``.  Steps marked as independent may depend only
+    on other steps marked independent.  See policy :policy:`CMP0114`.
+
+    Note that this use of the term "independent" refers only to independence
+    from external targets specified by the ``DEPENDS`` option and is
+    orthogonal to a step's dependencies on other steps.
+
+    If a step target is created for an independent step by the
+    :command:`ExternalProject_Add` ``STEP_TARGETS`` option or by the
+    :command:`ExternalProject_Add_StepTargets` function, it will not depend
+    on the external targets, but may depend on targets for other steps.
+
+  ``BYPRODUCTS <file>...``
+    .. versionadded:: 3.2
+
+    Files that will be generated by this custom step but which might or might
+    not have their modification time updated by subsequent builds. This list of
+    files will ultimately be passed through as the ``BYPRODUCTS`` option to the
+    :command:`add_custom_command` used to implement the custom step internally.
+
+  ``ALWAYS <bool>``
+    When enabled, this option specifies that the custom step should always be
+    run (i.e. that it is always considered out of date).
+
+  ``EXCLUDE_FROM_MAIN <bool>``
+    When enabled, this option specifies that the external project's main target
+    does not depend on the custom step.
+    This may cause step targets to be created automatically for the steps on
+    which this step depends.  See policy :policy:`CMP0114`.
+
+  ``WORKING_DIRECTORY <dir>``
+    Specifies the working directory to set before running the custom step's
+    command. If this option is not specified, the directory will be the value
+    of the :variable:`CMAKE_CURRENT_BINARY_DIR` at the point where
+    ``ExternalProject_Add_Step()`` was called.
+
+  ``LOG <bool>``
+    If set, this causes the output from the custom step to be captured to files
+    in the external project's ``LOG_DIR`` if supplied or ``STAMP_DIR``.
+
+  ``USES_TERMINAL <bool>``
+    If enabled, this gives the custom step direct access to the terminal if
+    possible.
+
+  The command line, comment, working directory and byproducts of every
+  standard and custom step are processed to replace the tokens
+  ``<SOURCE_DIR>``, ``<SOURCE_SUBDIR>``, ``<BINARY_DIR>``, ``<INSTALL_DIR>``
+  ``<TMP_DIR>``, ``<DOWNLOAD_DIR>`` and ``<DOWNLOADED_FILE>`` with their
+  corresponding property values defined in the original call to
+  :command:`ExternalProject_Add`.
+
+  .. versionadded:: 3.3
+    Token replacement is extended to byproducts.
+
+  .. versionadded:: 3.11
+    The ``<DOWNLOAD_DIR>`` substitution token.
+
+.. command:: ExternalProject_Add_StepTargets
+
+  The ``ExternalProject_Add_StepTargets()`` function generates targets for the
+  steps listed. The name of each created target will be of the form
+  ``<name>-<step>``:
+
+  .. code-block:: cmake
+
+    ExternalProject_Add_StepTargets(<name> <step1> [<step2>...])
+
+  Creating a target for a step allows it to be used as a dependency of another
+  target or to be triggered manually. Having targets for specific steps also
+  allows them to be driven independently of each other by specifying targets on
+  build command lines. For example, you may be submitting to a sub-project
+  based dashboard where you want to drive the configure portion of the build,
+  then submit to the dashboard, followed by the build portion, followed
+  by tests. If you invoke a custom target that depends on a step halfway
+  through the step dependency chain, then all the previous steps will also run
+  to ensure everything is up to date.
+
+  Internally, :command:`ExternalProject_Add` calls
+  :command:`ExternalProject_Add_Step` to create each step. If any
+  ``STEP_TARGETS`` were specified, then ``ExternalProject_Add_StepTargets()``
+  will also be called after :command:`ExternalProject_Add_Step`.  Even if a
+  step is not mentioned in the ``STEP_TARGETS`` option,
+  ``ExternalProject_Add_StepTargets()`` can still be called later to manually
+  define a target for the step.
+
+  The ``STEP_TARGETS`` option for :command:`ExternalProject_Add` is generally
+  the easiest way to ensure targets are created for specific steps of interest.
+  For custom steps, ``ExternalProject_Add_StepTargets()`` must be called
+  explicitly if a target should also be created for that custom step.
+  An alternative to these two options is to populate the ``EP_STEP_TARGETS``
+  directory property.  It acts as a default for the step target options and
+  can save having to repeatedly specify the same set of step targets when
+  multiple external projects are being defined.
+
+  .. versionadded:: 3.19
+    If :policy:`CMP0114` is set to ``NEW``, step targets are fully responsible
+    for holding the custom commands implementing their steps.  The primary target
+    created by ``ExternalProject_Add`` depends on the step targets, and the
+    step targets depend on each other.  The target-level dependencies match
+    the file-level dependencies used by the custom commands for each step.
+    The targets for steps created with :command:`ExternalProject_Add_Step`'s
+    ``INDEPENDENT`` option do not depend on the external targets specified
+    by :command:`ExternalProject_Add`'s ``DEPENDS`` option.  The predefined
+    steps ``mkdir``, ``download``, ``update``, and ``patch`` are independent.
+
+  If :policy:`CMP0114` is not ``NEW``, the following deprecated behavior
+  is available:
+
+  * A deprecated ``NO_DEPENDS`` option may be specified immediately after the
+    ``<name>`` and before the first step.
+    If the ``NO_DEPENDS`` option is specified, the step target will not depend on
+    the dependencies of the external project (i.e. on any dependencies of the
+    ``<name>`` custom target created by :command:`ExternalProject_Add`). This is
+    usually safe for the ``download``, ``update`` and ``patch`` steps, since they
+    do not typically require that the dependencies are updated and built. Using
+    ``NO_DEPENDS`` for any of the other pre-defined steps, however, may break
+    parallel builds. Only use ``NO_DEPENDS`` where it is certain that the named
+    steps genuinely do not have dependencies. For custom steps, consider whether
+    or not the custom commands require the dependencies to be configured, built
+    and installed.
+
+  * The ``INDEPENDENT_STEP_TARGETS`` option for :command:`ExternalProject_Add`,
+    or the ``EP_INDEPENDENT_STEP_TARGETS`` directory property, tells the
+    function to call ``ExternalProject_Add_StepTargets()`` internally
+    using the ``NO_DEPENDS`` option for the specified steps.
+
+.. command:: ExternalProject_Add_StepDependencies
+
+  .. versionadded:: 3.2
+
+  The ``ExternalProject_Add_StepDependencies()`` function can be used to add
+  dependencies to a step. The dependencies added must be targets CMake already
+  knows about (these can be ordinary executable or library targets, custom
+  targets or even step targets of another external project):
+
+  .. code-block:: cmake
+
+    ExternalProject_Add_StepDependencies(<name> <step> <target1> [<target2>...])
+
+  This function takes care to set both target and file level dependencies and
+  will ensure that parallel builds will not break. It should be used instead of
+  :command:`add_dependencies` whenever adding a dependency for some of the step
+  targets generated by the ``ExternalProject`` module.
+
+Examples
+^^^^^^^^
+
+The following example shows how to download and build a hypothetical project
+called *FooBar* from github:
+
+.. code-block:: cmake
+
+  include(ExternalProject)
+  ExternalProject_Add(foobar
+    GIT_REPOSITORY    git@github.com:FooCo/FooBar.git
+    GIT_TAG           origin/release/1.2.3
+  )
+
+For the sake of the example, also define a second hypothetical external project
+called *SecretSauce*, which is downloaded from a web server. Two URLs are given
+to take advantage of a faster internal network if available, with a fallback to
+a slower external server. The project is a typical ``Makefile`` project with no
+configure step, so some of the default commands are overridden. The build is
+only required to build the *sauce* target:
+
+.. code-block:: cmake
+
+  find_program(MAKE_EXE NAMES gmake nmake make)
+  ExternalProject_Add(secretsauce
+    URL               http://intranet.somecompany.com/artifacts/sauce-2.7.tgz
+                      https://www.somecompany.com/downloads/sauce-2.7.zip
+    URL_HASH          MD5=d41d8cd98f00b204e9800998ecf8427e
+    CONFIGURE_COMMAND ""
+    BUILD_COMMAND     ${MAKE_EXE} sauce
+  )
+
+Suppose the build step of ``secretsauce`` requires that ``foobar`` must already
+be built. This could be enforced like so:
+
+.. code-block:: cmake
+
+  ExternalProject_Add_StepDependencies(secretsauce build foobar)
+
+Another alternative would be to create a custom target for ``foobar``'s build
+step and make ``secretsauce`` depend on that rather than the whole ``foobar``
+project. This would mean ``foobar`` only needs to be built, it doesn't need to
+run its install or test steps before ``secretsauce`` can be built. The
+dependency can also be defined along with the ``secretsauce`` project:
+
+.. code-block:: cmake
+
+  ExternalProject_Add_StepTargets(foobar build)
+  ExternalProject_Add(secretsauce
+    URL               http://intranet.somecompany.com/artifacts/sauce-2.7.tgz
+                      https://www.somecompany.com/downloads/sauce-2.7.zip
+    URL_HASH          MD5=d41d8cd98f00b204e9800998ecf8427e
+    CONFIGURE_COMMAND ""
+    BUILD_COMMAND     ${MAKE_EXE} sauce
+    DEPENDS           foobar-build
+  )
+
+Instead of calling :command:`ExternalProject_Add_StepTargets`, the target could
+be defined along with the ``foobar`` project itself:
+
+.. code-block:: cmake
+
+  ExternalProject_Add(foobar
+    GIT_REPOSITORY git@github.com:FooCo/FooBar.git
+    GIT_TAG        origin/release/1.2.3
+    STEP_TARGETS   build
+  )
+
+If many external projects should have the same set of step targets, setting a
+directory property may be more convenient. The ``build`` step target could be
+created automatically by setting the ``EP_STEP_TARGETS`` directory property
+before creating the external projects with :command:`ExternalProject_Add`:
+
+.. code-block:: cmake
+
+  set_property(DIRECTORY PROPERTY EP_STEP_TARGETS build)
+
+Lastly, suppose that ``secretsauce`` provides a script called ``makedoc`` which
+can be used to generate its own documentation. Further suppose that the script
+expects the output directory to be provided as the only parameter and that it
+should be run from the ``secretsauce`` source directory. A custom step and a
+custom target to trigger the script can be defined like so:
+
+.. code-block:: cmake
+
+  ExternalProject_Add_Step(secretsauce docs
+    COMMAND           <SOURCE_DIR>/makedoc <BINARY_DIR>
+    WORKING_DIRECTORY <SOURCE_DIR>
+    COMMENT           "Building secretsauce docs"
+    ALWAYS            TRUE
+    EXCLUDE_FROM_MAIN TRUE
+  )
+  ExternalProject_Add_StepTargets(secretsauce docs)
+
+The custom step could then be triggered from the main build like so::
+
+  cmake --build . --target secretsauce-docs
+
+#]=======================================================================]
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0054 NEW) # if() quoted variables not dereferenced
+cmake_policy(SET CMP0057 NEW) # if() supports IN_LIST
+
+macro(_ep_get_hash_algos out_var)
+  set(${out_var}
+    MD5
+    SHA1
+    SHA224
+    SHA256
+    SHA384
+    SHA512
+    SHA3_224
+    SHA3_256
+    SHA3_384
+    SHA3_512
+  )
+endmacro()
+
+macro(_ep_get_hash_regex out_var)
+  _ep_get_hash_algos(${out_var})
+  list(JOIN ${out_var} "|" ${out_var})
+  set(${out_var} "^(${${out_var}})=([0-9A-Fa-f]+)$")
+endmacro()
+
+function(_ep_parse_arguments f keywords name ns args)
+  # Transfer the arguments to this function into target properties for the
+  # new custom target we just added so that we can set up all the build steps
+  # correctly based on target properties.
+  #
+  # Because some keywords can be repeated, we can't use cmake_parse_arguments().
+  # Instead, we loop through ARGN and consider the namespace starting with an
+  # upper-case letter followed by at least two more upper-case letters,
+  # numbers or underscores to be keywords.
+
+  set(key)
+
+  foreach(arg IN LISTS args)
+    set(is_value 1)
+
+    if(arg MATCHES "^[A-Z][A-Z0-9_][A-Z0-9_]+$" AND
+        NOT (("x${arg}x" STREQUAL "x${key}x") AND ("x${key}x" STREQUAL "xCOMMANDx")) AND
+        NOT arg MATCHES "^(TRUE|FALSE)$")
+      if(arg IN_LIST keywords)
+        set(is_value 0)
+      endif()
+    endif()
+
+    if(is_value)
+      if(key)
+        # Value
+        if(NOT arg STREQUAL "")
+          set_property(TARGET ${name} APPEND PROPERTY ${ns}${key} "${arg}")
+        else()
+          get_property(have_key TARGET ${name} PROPERTY ${ns}${key} SET)
+          if(have_key)
+            get_property(value TARGET ${name} PROPERTY ${ns}${key})
+            set_property(TARGET ${name} PROPERTY ${ns}${key} "${value};${arg}")
+          else()
+            set_property(TARGET ${name} PROPERTY ${ns}${key} "${arg}")
+          endif()
+        endif()
+      else()
+        # Missing Keyword
+        message(AUTHOR_WARNING "value '${arg}' with no previous keyword in ${f}")
+      endif()
+    else()
+      set(key "${arg}")
+    endif()
+  endforeach()
+endfunction()
+
+
+define_property(DIRECTORY PROPERTY "EP_BASE" INHERITED
+  BRIEF_DOCS "Base directory for External Project storage."
+  FULL_DOCS
+  "See documentation of the ExternalProject_Add() function in the "
+  "ExternalProject module."
+  )
+
+define_property(DIRECTORY PROPERTY "EP_PREFIX" INHERITED
+  BRIEF_DOCS "Top prefix for External Project storage."
+  FULL_DOCS
+  "See documentation of the ExternalProject_Add() function in the "
+  "ExternalProject module."
+  )
+
+define_property(DIRECTORY PROPERTY "EP_STEP_TARGETS" INHERITED
+  BRIEF_DOCS
+  "List of ExternalProject steps that automatically get corresponding targets"
+  FULL_DOCS
+  "These targets will be dependent on the main target dependencies. "
+  "See documentation of the ExternalProject_Add_StepTargets() function in the "
+  "ExternalProject module."
+  )
+
+define_property(DIRECTORY PROPERTY "EP_INDEPENDENT_STEP_TARGETS" INHERITED
+  BRIEF_DOCS
+  "List of ExternalProject steps that automatically get corresponding targets"
+  FULL_DOCS
+  "These targets will not be dependent on the main target dependencies. "
+  "See documentation of the ExternalProject_Add_StepTargets() function in the "
+  "ExternalProject module."
+  )
+
+define_property(DIRECTORY PROPERTY "EP_UPDATE_DISCONNECTED" INHERITED
+  BRIEF_DOCS "Never update automatically from the remote repo."
+  FULL_DOCS
+  "See documentation of the ExternalProject_Add() function in the "
+  "ExternalProject module."
+  )
+
+function(_ep_write_gitclone_script script_filename source_dir git_EXECUTABLE git_repository git_tag git_remote_name init_submodules git_submodules_recurse git_submodules git_shallow git_progress git_config src_name work_dir gitclone_infofile gitclone_stampfile tls_verify)
+  if(NOT GIT_VERSION_STRING VERSION_LESS 1.8.5)
+    # Use `git checkout <tree-ish> --` to avoid ambiguity with a local path.
+    set(git_checkout_explicit-- "--")
+  else()
+    # Use `git checkout <branch>` even though this risks ambiguity with a
+    # local path.  Unfortunately we cannot use `git checkout <tree-ish> --`
+    # because that will not search for remote branch names, a common use case.
+    set(git_checkout_explicit-- "")
+  endif()
+  if("${git_tag}" STREQUAL "")
+    message(FATAL_ERROR "Tag for git checkout should not be empty.")
+  endif()
+
+  if(GIT_VERSION_STRING VERSION_LESS 2.20 OR 2.21 VERSION_LESS_EQUAL GIT_VERSION_STRING)
+    set(git_clone_options "--no-checkout")
+  else()
+    set(git_clone_options)
+  endif()
+  if(git_shallow)
+    if(NOT GIT_VERSION_STRING VERSION_LESS 1.7.10)
+      list(APPEND git_clone_options "--depth 1 --no-single-branch")
+    else()
+      list(APPEND git_clone_options "--depth 1")
+    endif()
+  endif()
+  if(git_progress)
+    list(APPEND git_clone_options --progress)
+  endif()
+  foreach(config IN LISTS git_config)
+    list(APPEND git_clone_options --config \"${config}\")
+  endforeach()
+  if(NOT ${git_remote_name} STREQUAL "origin")
+    list(APPEND git_clone_options --origin \"${git_remote_name}\")
+  endif()
+
+  string (REPLACE ";" " " git_clone_options "${git_clone_options}")
+
+  set(git_options)
+  # disable cert checking if explicitly told not to do it
+  if(NOT "x${tls_verify}" STREQUAL "x" AND NOT tls_verify)
+    set(git_options
+      -c http.sslVerify=false)
+  endif()
+  string (REPLACE ";" " " git_options "${git_options}")
+
+  file(WRITE ${script_filename}
+"
+if(NOT \"${gitclone_infofile}\" IS_NEWER_THAN \"${gitclone_stampfile}\")
+  message(STATUS \"Avoiding repeated git clone, stamp file is up to date: '${gitclone_stampfile}'\")
+  return()
+endif()
+
+execute_process(
+  COMMAND \${CMAKE_COMMAND} -E rm -rf \"${source_dir}\"
+  RESULT_VARIABLE error_code
+  )
+if(error_code)
+  message(FATAL_ERROR \"Failed to remove directory: '${source_dir}'\")
+endif()
+
+# try the clone 3 times in case there is an odd git clone issue
+set(error_code 1)
+set(number_of_tries 0)
+while(error_code AND number_of_tries LESS 3)
+  execute_process(
+    COMMAND \"${git_EXECUTABLE}\" ${git_options} clone ${git_clone_options} \"${git_repository}\" \"${src_name}\"
+    WORKING_DIRECTORY \"${work_dir}\"
+    RESULT_VARIABLE error_code
+    )
+  math(EXPR number_of_tries \"\${number_of_tries} + 1\")
+endwhile()
+if(number_of_tries GREATER 1)
+  message(STATUS \"Had to git clone more than once:
+          \${number_of_tries} times.\")
+endif()
+if(error_code)
+  message(FATAL_ERROR \"Failed to clone repository: '${git_repository}'\")
+endif()
+
+execute_process(
+  COMMAND \"${git_EXECUTABLE}\" ${git_options} checkout ${git_tag} ${git_checkout_explicit--}
+  WORKING_DIRECTORY \"${work_dir}/${src_name}\"
+  RESULT_VARIABLE error_code
+  )
+if(error_code)
+  message(FATAL_ERROR \"Failed to checkout tag: '${git_tag}'\")
+endif()
+
+set(init_submodules ${init_submodules})
+if(init_submodules)
+  execute_process(
+    COMMAND \"${git_EXECUTABLE}\" ${git_options} submodule update ${git_submodules_recurse} --init ${git_submodules}
+    WORKING_DIRECTORY \"${work_dir}/${src_name}\"
+    RESULT_VARIABLE error_code
+    )
+endif()
+if(error_code)
+  message(FATAL_ERROR \"Failed to update submodules in: '${work_dir}/${src_name}'\")
+endif()
+
+# Complete success, update the script-last-run stamp file:
+#
+execute_process(
+  COMMAND \${CMAKE_COMMAND} -E copy
+    \"${gitclone_infofile}\"
+    \"${gitclone_stampfile}\"
+  RESULT_VARIABLE error_code
+  )
+if(error_code)
+  message(FATAL_ERROR \"Failed to copy script-last-run stamp file: '${gitclone_stampfile}'\")
+endif()
+
+"
+)
+
+endfunction()
+
+function(_ep_write_hgclone_script script_filename source_dir hg_EXECUTABLE hg_repository hg_tag src_name work_dir hgclone_infofile hgclone_stampfile)
+  if("${hg_tag}" STREQUAL "")
+    message(FATAL_ERROR "Tag for hg checkout should not be empty.")
+  endif()
+  file(WRITE ${script_filename}
+"
+if(NOT \"${hgclone_infofile}\" IS_NEWER_THAN \"${hgclone_stampfile}\")
+  message(STATUS \"Avoiding repeated hg clone, stamp file is up to date: '${hgclone_stampfile}'\")
+  return()
+endif()
+
+execute_process(
+  COMMAND \${CMAKE_COMMAND} -E rm -rf \"${source_dir}\"
+  RESULT_VARIABLE error_code
+  )
+if(error_code)
+  message(FATAL_ERROR \"Failed to remove directory: '${source_dir}'\")
+endif()
+
+execute_process(
+  COMMAND \"${hg_EXECUTABLE}\" clone -U \"${hg_repository}\" \"${src_name}\"
+  WORKING_DIRECTORY \"${work_dir}\"
+  RESULT_VARIABLE error_code
+  )
+if(error_code)
+  message(FATAL_ERROR \"Failed to clone repository: '${hg_repository}'\")
+endif()
+
+execute_process(
+  COMMAND \"${hg_EXECUTABLE}\" update ${hg_tag}
+  WORKING_DIRECTORY \"${work_dir}/${src_name}\"
+  RESULT_VARIABLE error_code
+  )
+if(error_code)
+  message(FATAL_ERROR \"Failed to checkout tag: '${hg_tag}'\")
+endif()
+
+# Complete success, update the script-last-run stamp file:
+#
+execute_process(
+  COMMAND \${CMAKE_COMMAND} -E copy
+    \"${hgclone_infofile}\"
+    \"${hgclone_stampfile}\"
+  RESULT_VARIABLE error_code
+  )
+if(error_code)
+  message(FATAL_ERROR \"Failed to copy script-last-run stamp file: '${hgclone_stampfile}'\")
+endif()
+
+"
+)
+
+endfunction()
+
+
+function(_ep_write_gitupdate_script script_filename git_EXECUTABLE git_tag git_remote_name init_submodules git_submodules_recurse git_submodules git_repository work_dir git_update_strategy)
+  if("${git_tag}" STREQUAL "")
+    message(FATAL_ERROR "Tag for git checkout should not be empty.")
+  endif()
+  set(git_stash_save_options --quiet)
+  if(GIT_VERSION_STRING VERSION_GREATER_EQUAL 1.7.7)
+    # This avoids stashing files covered by .gitignore
+    list(APPEND git_stash_save_options --include-untracked)
+  elseif(GIT_VERSION_STRING VERSION_GREATER_EQUAL 1.7.6)
+    # Untracked files, but also ignored files, so potentially slower
+    list(APPEND git_stash_save_options --all)
+  endif()
+
+  configure_file(
+      "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/ExternalProject-gitupdate.cmake.in"
+      "${script_filename}"
+      @ONLY
+  )
+endfunction()
+
+function(_ep_write_downloadfile_script script_filename REMOTE LOCAL timeout inactivity_timeout no_progress hash tls_verify tls_cainfo userpwd http_headers netrc netrc_file)
+  if(timeout)
+    set(TIMEOUT_ARGS TIMEOUT ${timeout})
+    set(TIMEOUT_MSG "${timeout} seconds")
+  else()
+    set(TIMEOUT_ARGS "# no TIMEOUT")
+    set(TIMEOUT_MSG "none")
+  endif()
+  if(inactivity_timeout)
+    set(INACTIVITY_TIMEOUT_ARGS INACTIVITY_TIMEOUT ${inactivity_timeout})
+    set(INACTIVITY_TIMEOUT_MSG "${inactivity_timeout} seconds")
+  else()
+    set(INACTIVITY_TIMEOUT_ARGS "# no INACTIVITY_TIMEOUT")
+    set(INACTIVITY_TIMEOUT_MSG "none")
+  endif()
+
+
+  if(no_progress)
+    set(SHOW_PROGRESS "")
+  else()
+    set(SHOW_PROGRESS "SHOW_PROGRESS")
+  endif()
+
+  _ep_get_hash_regex(_ep_hash_regex)
+  if("${hash}" MATCHES "${_ep_hash_regex}")
+    set(ALGO "${CMAKE_MATCH_1}")
+    string(TOLOWER "${CMAKE_MATCH_2}" EXPECT_VALUE)
+  else()
+    set(ALGO "")
+    set(EXPECT_VALUE "")
+  endif()
+
+  set(TLS_VERIFY_CODE "")
+  set(TLS_CAINFO_CODE "")
+  set(NETRC_CODE "")
+  set(NETRC_FILE_CODE "")
+
+  # check for curl globals in the project
+  if(DEFINED CMAKE_TLS_VERIFY)
+    set(TLS_VERIFY_CODE "set(CMAKE_TLS_VERIFY ${CMAKE_TLS_VERIFY})")
+  endif()
+  if(DEFINED CMAKE_TLS_CAINFO)
+    set(TLS_CAINFO_CODE "set(CMAKE_TLS_CAINFO \"${CMAKE_TLS_CAINFO}\")")
+  endif()
+  if(DEFINED CMAKE_NETRC)
+    set(NETRC_CODE "set(CMAKE_NETRC \"${CMAKE_NETRC}\")")
+  endif()
+  if(DEFINED CMAKE_NETRC_FILE)
+    set(NETRC_FILE_CODE "set(CMAKE_NETRC_FILE \"${CMAKE_NETRC_FILE}\")")
+  endif()
+
+  # now check for curl locals so that the local values
+  # will override the globals
+
+  # check for tls_verify argument
+  string(LENGTH "${tls_verify}" tls_verify_len)
+  if(tls_verify_len GREATER 0)
+    set(TLS_VERIFY_CODE "set(CMAKE_TLS_VERIFY ${tls_verify})")
+  endif()
+  # check for tls_cainfo argument
+  string(LENGTH "${tls_cainfo}" tls_cainfo_len)
+  if(tls_cainfo_len GREATER 0)
+    set(TLS_CAINFO_CODE "set(CMAKE_TLS_CAINFO \"${tls_cainfo}\")")
+  endif()
+  # check for netrc argument
+  string(LENGTH "${netrc}" netrc_len)
+  if(netrc_len GREATER 0)
+    set(NETRC_CODE "set(CMAKE_NETRC \"${netrc}\")")
+  endif()
+  # check for netrc_file argument
+  string(LENGTH "${netrc_file}" netrc_file_len)
+  if(netrc_file_len GREATER 0)
+    set(NETRC_FILE_CODE "set(CMAKE_NETRC_FILE \"${netrc_file}\")")
+  endif()
+
+  if(userpwd STREQUAL ":")
+    set(USERPWD_ARGS)
+  else()
+    set(USERPWD_ARGS USERPWD "${userpwd}")
+  endif()
+
+  set(HTTP_HEADERS_ARGS "")
+  if(NOT http_headers STREQUAL "")
+    foreach(header ${http_headers})
+      set(
+          HTTP_HEADERS_ARGS
+          "HTTPHEADER \"${header}\"\n        ${HTTP_HEADERS_ARGS}"
+      )
+    endforeach()
+  endif()
+
+  # Used variables:
+  # * TLS_VERIFY_CODE
+  # * TLS_CAINFO_CODE
+  # * ALGO
+  # * EXPECT_VALUE
+  # * REMOTE
+  # * LOCAL
+  # * SHOW_PROGRESS
+  # * TIMEOUT_ARGS
+  # * TIMEOUT_MSG
+  # * USERPWD_ARGS
+  # * HTTP_HEADERS_ARGS
+  configure_file(
+      "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/ExternalProject-download.cmake.in"
+      "${script_filename}"
+      @ONLY
+  )
+endfunction()
+
+function(_ep_write_verifyfile_script script_filename LOCAL hash)
+  _ep_get_hash_regex(_ep_hash_regex)
+  if("${hash}" MATCHES "${_ep_hash_regex}")
+    set(ALGO "${CMAKE_MATCH_1}")
+    string(TOLOWER "${CMAKE_MATCH_2}" EXPECT_VALUE)
+  else()
+    set(ALGO "")
+    set(EXPECT_VALUE "")
+  endif()
+
+  # Used variables:
+  # * ALGO
+  # * EXPECT_VALUE
+  # * LOCAL
+  configure_file(
+      "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/ExternalProject-verify.cmake.in"
+      "${script_filename}"
+      @ONLY
+  )
+endfunction()
+
+
+function(_ep_write_extractfile_script script_filename name filename directory)
+  set(args "")
+
+  if(filename MATCHES "(\\.|=)(7z|tar\\.bz2|tar\\.gz|tar\\.xz|tbz2|tgz|txz|zip)$")
+    set(args xfz)
+  endif()
+
+  if(filename MATCHES "(\\.|=)tar$")
+    set(args xf)
+  endif()
+
+  if(args STREQUAL "")
+    message(SEND_ERROR "error: do not know how to extract '${filename}' -- known types are .7z, .tar, .tar.bz2, .tar.gz, .tar.xz, .tbz2, .tgz, .txz and .zip")
+    return()
+  endif()
+
+  file(WRITE ${script_filename}
+"# Make file names absolute:
+#
+get_filename_component(filename \"${filename}\" ABSOLUTE)
+get_filename_component(directory \"${directory}\" ABSOLUTE)
+
+message(STATUS \"extracting...
+     src='\${filename}'
+     dst='\${directory}'\")
+
+if(NOT EXISTS \"\${filename}\")
+  message(FATAL_ERROR \"error: file to extract does not exist: '\${filename}'\")
+endif()
+
+# Prepare a space for extracting:
+#
+set(i 1234)
+while(EXISTS \"\${directory}/../ex-${name}\${i}\")
+  math(EXPR i \"\${i} + 1\")
+endwhile()
+set(ut_dir \"\${directory}/../ex-${name}\${i}\")
+file(MAKE_DIRECTORY \"\${ut_dir}\")
+
+# Extract it:
+#
+message(STATUS \"extracting... [tar ${args}]\")
+execute_process(COMMAND \${CMAKE_COMMAND} -E tar ${args} \${filename}
+  WORKING_DIRECTORY \${ut_dir}
+  RESULT_VARIABLE rv)
+
+if(NOT rv EQUAL 0)
+  message(STATUS \"extracting... [error clean up]\")
+  file(REMOVE_RECURSE \"\${ut_dir}\")
+  message(FATAL_ERROR \"error: extract of '\${filename}' failed\")
+endif()
+
+# Analyze what came out of the tar file:
+#
+message(STATUS \"extracting... [analysis]\")
+file(GLOB contents \"\${ut_dir}/*\")
+list(REMOVE_ITEM contents \"\${ut_dir}/.DS_Store\")
+list(LENGTH contents n)
+if(NOT n EQUAL 1 OR NOT IS_DIRECTORY \"\${contents}\")
+  set(contents \"\${ut_dir}\")
+endif()
+
+# Move \"the one\" directory to the final directory:
+#
+message(STATUS \"extracting... [rename]\")
+file(REMOVE_RECURSE \${directory})
+get_filename_component(contents \${contents} ABSOLUTE)
+file(RENAME \${contents} \${directory})
+
+# Clean up:
+#
+message(STATUS \"extracting... [clean up]\")
+file(REMOVE_RECURSE \"\${ut_dir}\")
+
+message(STATUS \"extracting... done\")
+"
+)
+
+endfunction()
+
+
+function(_ep_set_directories name)
+  get_property(prefix TARGET ${name} PROPERTY _EP_PREFIX)
+  if(NOT prefix)
+    get_property(prefix DIRECTORY PROPERTY EP_PREFIX)
+    if(NOT prefix)
+      get_property(base DIRECTORY PROPERTY EP_BASE)
+      if(NOT base)
+        set(prefix "${name}-prefix")
+      endif()
+    endif()
+  endif()
+  if(prefix)
+    set(tmp_default "${prefix}/tmp")
+    set(download_default "${prefix}/src")
+    set(source_default "${prefix}/src/${name}")
+    set(binary_default "${prefix}/src/${name}-build")
+    set(stamp_default "${prefix}/src/${name}-stamp")
+    set(install_default "${prefix}")
+  else()
+    set(tmp_default "${base}/tmp/${name}")
+    set(download_default "${base}/Download/${name}")
+    set(source_default "${base}/Source/${name}")
+    set(binary_default "${base}/Build/${name}")
+    set(stamp_default "${base}/Stamp/${name}")
+    set(install_default "${base}/Install/${name}")
+  endif()
+  get_property(build_in_source TARGET ${name} PROPERTY _EP_BUILD_IN_SOURCE)
+  if(build_in_source)
+    get_property(have_binary_dir TARGET ${name} PROPERTY _EP_BINARY_DIR SET)
+    if(have_binary_dir)
+      message(FATAL_ERROR
+        "External project ${name} has both BINARY_DIR and BUILD_IN_SOURCE!")
+    endif()
+  endif()
+  set(top "${CMAKE_CURRENT_BINARY_DIR}")
+
+  # Apply defaults and convert to absolute paths.
+  set(places stamp download source binary install tmp)
+  foreach(var ${places})
+    string(TOUPPER "${var}" VAR)
+    get_property(${var}_dir TARGET ${name} PROPERTY _EP_${VAR}_DIR)
+    if(NOT ${var}_dir)
+      set(${var}_dir "${${var}_default}")
+    endif()
+    if(NOT IS_ABSOLUTE "${${var}_dir}")
+      get_filename_component(${var}_dir "${top}/${${var}_dir}" ABSOLUTE)
+    endif()
+    set_property(TARGET ${name} PROPERTY _EP_${VAR}_DIR "${${var}_dir}")
+  endforeach()
+
+  # Special case for default log directory based on stamp directory.
+  get_property(log_dir TARGET ${name} PROPERTY _EP_LOG_DIR)
+  if(NOT log_dir)
+    get_property(log_dir TARGET ${name} PROPERTY _EP_STAMP_DIR)
+  endif()
+  if(NOT IS_ABSOLUTE "${log_dir}")
+    get_filename_component(log_dir "${top}/${log_dir}" ABSOLUTE)
+  endif()
+  set_property(TARGET ${name} PROPERTY _EP_LOG_DIR "${log_dir}")
+
+  get_property(source_subdir TARGET ${name} PROPERTY _EP_SOURCE_SUBDIR)
+  if(NOT source_subdir)
+    set_property(TARGET ${name} PROPERTY _EP_SOURCE_SUBDIR "")
+  elseif(IS_ABSOLUTE "${source_subdir}")
+    message(FATAL_ERROR
+      "External project ${name} has non-relative SOURCE_SUBDIR!")
+  else()
+    # Prefix with a slash so that when appended to the source directory, it
+    # behaves as expected.
+    set_property(TARGET ${name} PROPERTY _EP_SOURCE_SUBDIR "/${source_subdir}")
+  endif()
+  if(build_in_source)
+    get_property(source_dir TARGET ${name} PROPERTY _EP_SOURCE_DIR)
+    if(source_subdir)
+      set_property(TARGET ${name} PROPERTY _EP_BINARY_DIR "${source_dir}/${source_subdir}")
+    else()
+      set_property(TARGET ${name} PROPERTY _EP_BINARY_DIR "${source_dir}")
+    endif()
+  endif()
+
+  # Make the directories at CMake configure time *and* add a custom command
+  # to make them at build time. They need to exist at makefile generation
+  # time for Borland make and wmake so that CMake may generate makefiles
+  # with "cd C:\short\paths\with\no\spaces" commands in them.
+  #
+  # Additionally, the add_custom_command is still used in case somebody
+  # removes one of the necessary directories and tries to rebuild without
+  # re-running cmake.
+  foreach(var ${places})
+    string(TOUPPER "${var}" VAR)
+    get_property(dir TARGET ${name} PROPERTY _EP_${VAR}_DIR)
+    file(MAKE_DIRECTORY "${dir}")
+    if(NOT EXISTS "${dir}")
+      message(FATAL_ERROR "dir '${dir}' does not exist after file(MAKE_DIRECTORY)")
+    endif()
+  endforeach()
+endfunction()
+
+
+# IMPORTANT: this MUST be a macro and not a function because of the
+# in-place replacements that occur in each ${var}
+#
+macro(_ep_replace_location_tags target_name)
+  set(vars ${ARGN})
+  foreach(var ${vars})
+    if(${var})
+      foreach(dir SOURCE_DIR SOURCE_SUBDIR BINARY_DIR INSTALL_DIR TMP_DIR DOWNLOAD_DIR DOWNLOADED_FILE LOG_DIR)
+        get_property(val TARGET ${target_name} PROPERTY _EP_${dir})
+        string(REPLACE "<${dir}>" "${val}" ${var} "${${var}}")
+      endforeach()
+    endif()
+  endforeach()
+endmacro()
+
+
+function(_ep_command_line_to_initial_cache var args force)
+  set(script_initial_cache "")
+  set(regex "^([^:]+):([^=]+)=(.*)$")
+  set(setArg "")
+  set(forceArg "")
+  if(force)
+    set(forceArg "FORCE")
+  endif()
+  foreach(line ${args})
+    if("${line}" MATCHES "^-D(.*)")
+      set(line "${CMAKE_MATCH_1}")
+      if(NOT "${setArg}" STREQUAL "")
+        # This is required to build up lists in variables, or complete an entry
+        string(APPEND setArg "${accumulator}\" CACHE ${type} \"Initial cache\" ${forceArg})")
+        string(APPEND script_initial_cache "\n${setArg}")
+        set(accumulator "")
+        set(setArg "")
+      endif()
+      if("${line}" MATCHES "${regex}")
+        set(name "${CMAKE_MATCH_1}")
+        set(type "${CMAKE_MATCH_2}")
+        set(value "${CMAKE_MATCH_3}")
+        set(setArg "set(${name} \"${value}")
+      else()
+        message(WARNING "Line '${line}' does not match regex. Ignoring.")
+      endif()
+    else()
+      # Assume this is a list to append to the last var
+      string(APPEND accumulator ";${line}")
+    endif()
+  endforeach()
+  # Catch the final line of the args
+  if(NOT "${setArg}" STREQUAL "")
+    string(APPEND setArg "${accumulator}\" CACHE ${type} \"Initial cache\" ${forceArg})")
+    string(APPEND script_initial_cache "\n${setArg}")
+  endif()
+  set(${var} ${script_initial_cache} PARENT_SCOPE)
+endfunction()
+
+
+function(_ep_write_initial_cache target_name script_filename script_initial_cache)
+  # Write out values into an initial cache, that will be passed to CMake with -C
+  # Replace location tags.
+  _ep_replace_location_tags(${target_name} script_initial_cache)
+  _ep_replace_location_tags(${target_name} script_filename)
+  # Replace list separators.
+  get_property(sep TARGET ${target_name} PROPERTY _EP_LIST_SEPARATOR)
+  if(sep AND script_initial_cache)
+    string(REPLACE "${sep}" ";" script_initial_cache "${script_initial_cache}")
+  endif()
+  # Write out the initial cache file to the location specified.
+  file(GENERATE OUTPUT "${script_filename}" CONTENT "${script_initial_cache}")
+endfunction()
+
+
+function(ExternalProject_Get_Property name)
+  foreach(var ${ARGN})
+    string(TOUPPER "${var}" VAR)
+    get_property(is_set TARGET ${name} PROPERTY _EP_${VAR} SET)
+    if(NOT is_set)
+      message(FATAL_ERROR "External project \"${name}\" has no ${var}")
+    endif()
+    get_property(${var} TARGET ${name} PROPERTY _EP_${VAR})
+    set(${var} "${${var}}" PARENT_SCOPE)
+  endforeach()
+endfunction()
+
+
+function(_ep_get_configure_command_id name cfg_cmd_id_var)
+  get_target_property(cmd ${name} _EP_CONFIGURE_COMMAND)
+
+  if(cmd STREQUAL "")
+    # Explicit empty string means no configure step for this project
+    set(${cfg_cmd_id_var} "none" PARENT_SCOPE)
+  else()
+    if(NOT cmd)
+      # Default is "use cmake":
+      set(${cfg_cmd_id_var} "cmake" PARENT_SCOPE)
+    else()
+      # Otherwise we have to analyze the value:
+      if(cmd MATCHES "^[^;]*/configure")
+        set(${cfg_cmd_id_var} "configure" PARENT_SCOPE)
+      elseif(cmd MATCHES "^[^;]*/cmake" AND NOT cmd MATCHES ";-[PE];")
+        set(${cfg_cmd_id_var} "cmake" PARENT_SCOPE)
+      elseif(cmd MATCHES "config")
+        set(${cfg_cmd_id_var} "configure" PARENT_SCOPE)
+      else()
+        set(${cfg_cmd_id_var} "unknown:${cmd}" PARENT_SCOPE)
+      endif()
+    endif()
+  endif()
+endfunction()
+
+
+function(_ep_get_build_command name step cmd_var)
+  set(cmd "")
+  set(args)
+  _ep_get_configure_command_id(${name} cfg_cmd_id)
+  if(cfg_cmd_id STREQUAL "cmake")
+    # CMake project.  Select build command based on generator.
+    get_target_property(cmake_generator ${name} _EP_CMAKE_GENERATOR)
+    if("${CMAKE_GENERATOR}" MATCHES "Make" AND
+       ("${cmake_generator}" MATCHES "Make" OR NOT cmake_generator))
+      # The project uses the same Makefile generator.  Use recursive make.
+      set(cmd "$(MAKE)")
+      if(step STREQUAL "INSTALL")
+        set(args install)
+      endif()
+      if("x${step}x" STREQUAL "xTESTx")
+        set(args test)
+      endif()
+    else()
+      # Drive the project with "cmake --build".
+      get_target_property(cmake_command ${name} _EP_CMAKE_COMMAND)
+      if(cmake_command)
+        set(cmd "${cmake_command}")
+      else()
+        set(cmd "${CMAKE_COMMAND}")
+      endif()
+      set(args --build ".")
+      get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
+      if(_isMultiConfig)
+        if (CMAKE_CFG_INTDIR AND
+            NOT CMAKE_CFG_INTDIR STREQUAL "." AND
+            NOT CMAKE_CFG_INTDIR MATCHES "\\$")
+          # CMake 3.4 and below used the CMAKE_CFG_INTDIR placeholder value
+          # provided by multi-configuration generators.  Some projects were
+          # taking advantage of that undocumented implementation detail to
+          # specify a specific configuration here.  They should use
+          # BUILD_COMMAND to change the default command instead, but for
+          # compatibility honor the value.
+          set(config ${CMAKE_CFG_INTDIR})
+          message(AUTHOR_WARNING "CMAKE_CFG_INTDIR should not be set by project code.\n"
+            "To get a non-default build command, use the BUILD_COMMAND option.")
+        else()
+          set(config $<CONFIG>)
+        endif()
+        list(APPEND args --config ${config})
+      endif()
+      if(step STREQUAL "INSTALL")
+        list(APPEND args --target install)
+      endif()
+      # But for "TEST" drive the project with corresponding "ctest".
+      if("x${step}x" STREQUAL "xTESTx")
+        string(REGEX REPLACE "^(.*/)cmake([^/]*)$" "\\1ctest\\2" cmd "${cmd}")
+        set(args "")
+        if(_isMultiConfig)
+          list(APPEND args -C ${config})
+        endif()
+      endif()
+    endif()
+  else()
+    # Non-CMake project.  Guess "make" and "make install" and "make test".
+    if("${CMAKE_GENERATOR}" MATCHES "Makefiles")
+      # Try to get the parallel arguments
+      set(cmd "$(MAKE)")
+    else()
+      set(cmd "make")
+    endif()
+    if(step STREQUAL "INSTALL")
+      set(args install)
+    endif()
+    if("x${step}x" STREQUAL "xTESTx")
+      set(args test)
+    endif()
+  endif()
+
+  # Use user-specified arguments instead of default arguments, if any.
+  get_property(have_args TARGET ${name} PROPERTY _EP_${step}_ARGS SET)
+  if(have_args)
+    get_target_property(args ${name} _EP_${step}_ARGS)
+  endif()
+
+  if(NOT "${args}" STREQUAL "")
+    # args could have empty items, so we must quote it to prevent them
+    # from being silently removed
+    list(APPEND cmd "${args}")
+  endif()
+  set(${cmd_var} "${cmd}" PARENT_SCOPE)
+endfunction()
+
+function(_ep_write_log_script name step cmd_var)
+  ExternalProject_Get_Property(${name} log_dir)
+  ExternalProject_Get_Property(${name} stamp_dir)
+  set(command "${${cmd_var}}")
+
+  set(make "")
+  set(code_cygpath_make "")
+  if(command MATCHES "^\\$\\(MAKE\\)")
+    # GNU make recognizes the string "$(MAKE)" as recursive make, so
+    # ensure that it appears directly in the makefile.
+    string(REGEX REPLACE "^\\$\\(MAKE\\)" "\${make}" command "${command}")
+    set(make "-Dmake=$(MAKE)")
+
+    if(WIN32 AND NOT CYGWIN)
+      set(code_cygpath_make "
+if(\${make} MATCHES \"^/\")
+  execute_process(
+    COMMAND cygpath -w \${make}
+    OUTPUT_VARIABLE cygpath_make
+    ERROR_VARIABLE cygpath_make
+    RESULT_VARIABLE cygpath_error
+    OUTPUT_STRIP_TRAILING_WHITESPACE
+  )
+  if(NOT cygpath_error)
+    set(make \${cygpath_make})
+  endif()
+endif()
+")
+    endif()
+  endif()
+
+  set(config "")
+  if("${CMAKE_CFG_INTDIR}" MATCHES "^\\$")
+    string(REPLACE "${CMAKE_CFG_INTDIR}" "\${config}" command "${command}")
+    set(config "-Dconfig=${CMAKE_CFG_INTDIR}")
+  endif()
+
+  # Wrap multiple 'COMMAND' lines up into a second-level wrapper
+  # script so all output can be sent to one log file.
+  if(command MATCHES "(^|;)COMMAND;")
+    set(code_execute_process "
+${code_cygpath_make}
+execute_process(COMMAND \${command} RESULT_VARIABLE result)
+if(result)
+  set(msg \"Command failed (\${result}):\\n\")
+  foreach(arg IN LISTS command)
+    set(msg \"\${msg} '\${arg}'\")
+  endforeach()
+  message(FATAL_ERROR \"\${msg}\")
+endif()
+")
+    set(code "")
+    set(cmd "")
+    set(sep "")
+    foreach(arg IN LISTS command)
+      if("x${arg}" STREQUAL "xCOMMAND")
+        if(NOT "x${cmd}" STREQUAL "x")
+          string(APPEND code "set(command \"${cmd}\")${code_execute_process}")
+        endif()
+        set(cmd "")
+        set(sep "")
+      else()
+        string(APPEND cmd "${sep}${arg}")
+        set(sep ";")
+      endif()
+    endforeach()
+    string(APPEND code "set(command \"${cmd}\")${code_execute_process}")
+    file(GENERATE OUTPUT "${stamp_dir}/${name}-${step}-$<CONFIG>-impl.cmake" CONTENT "${code}")
+    set(command ${CMAKE_COMMAND} "-Dmake=\${make}" "-Dconfig=\${config}" -P ${stamp_dir}/${name}-${step}-$<CONFIG>-impl.cmake)
+  endif()
+
+  # Wrap the command in a script to log output to files.
+  set(script ${stamp_dir}/${name}-${step}-$<CONFIG>.cmake)
+  set(logbase ${log_dir}/${name}-${step})
+  get_property(log_merged TARGET ${name} PROPERTY _EP_LOG_MERGED_STDOUTERR)
+  get_property(log_output_on_failure TARGET ${name} PROPERTY _EP_LOG_OUTPUT_ON_FAILURE)
+  if (log_merged)
+    set(stdout_log "${logbase}.log")
+    set(stderr_log "${logbase}.log")
+  else()
+    set(stdout_log "${logbase}-out.log")
+    set(stderr_log "${logbase}-err.log")
+  endif()
+  set(code "
+cmake_minimum_required(VERSION 3.15)
+${code_cygpath_make}
+set(command \"${command}\")
+set(log_merged \"${log_merged}\")
+set(log_output_on_failure \"${log_output_on_failure}\")
+set(stdout_log \"${stdout_log}\")
+set(stderr_log \"${stderr_log}\")
+execute_process(
+  COMMAND \${command}
+  RESULT_VARIABLE result
+  OUTPUT_FILE \"\${stdout_log}\"
+  ERROR_FILE \"\${stderr_log}\"
+  )
+macro(read_up_to_max_size log_file output_var)
+  file(SIZE \${log_file} determined_size)
+  set(max_size 10240)
+  if (determined_size GREATER max_size)
+    math(EXPR seek_position \"\${determined_size} - \${max_size}\")
+    file(READ \${log_file} \${output_var} OFFSET \${seek_position})
+    set(\${output_var} \"...skipping to end...\\n\${\${output_var}}\")
+  else()
+    file(READ \${log_file} \${output_var})
+  endif()
+endmacro()
+if(result)
+  set(msg \"Command failed: \${result}\\n\")
+  foreach(arg IN LISTS command)
+    set(msg \"\${msg} '\${arg}'\")
+  endforeach()
+  if (\${log_merged})
+    set(msg \"\${msg}\\nSee also\\n  \${stderr_log}\")
+  else()
+    set(msg \"\${msg}\\nSee also\\n  ${logbase}-*.log\")
+  endif()
+  if (\${log_output_on_failure})
+    message(SEND_ERROR \"\${msg}\")
+    if (\${log_merged})
+      read_up_to_max_size(\"\${stderr_log}\" error_log_contents)
+      message(STATUS \"Log output is:\\n\${error_log_contents}\")
+    else()
+      read_up_to_max_size(\"\${stdout_log}\" out_log_contents)
+      read_up_to_max_size(\"\${stderr_log}\" err_log_contents)
+      message(STATUS \"stdout output is:\\n\${out_log_contents}\")
+      message(STATUS \"stderr output is:\\n\${err_log_contents}\")
+    endif()
+    message(FATAL_ERROR \"Stopping after outputting logs.\")
+  else()
+    message(FATAL_ERROR \"\${msg}\")
+  endif()
+else()
+  if(NOT \"${CMAKE_GENERATOR}\" MATCHES \"Ninja\")
+    set(msg \"${name} ${step} command succeeded.  See also ${logbase}-*.log\")
+    message(STATUS \"\${msg}\")
+  endif()
+endif()
+")
+  file(GENERATE OUTPUT "${script}" CONTENT "${code}")
+  set(command ${CMAKE_COMMAND} ${make} ${config} -P ${script})
+  set(${cmd_var} "${command}" PARENT_SCOPE)
+endfunction()
+
+# This module used to use "/${CMAKE_CFG_INTDIR}" directly and produced
+# makefiles with "/./" in paths for custom command dependencies. Which
+# resulted in problems with parallel make -j invocations.
+#
+# This function was added so that the suffix (search below for ${cfgdir}) is
+# only set to "/${CMAKE_CFG_INTDIR}" when ${CMAKE_CFG_INTDIR} is not going to
+# be "." (multi-configuration build systems like Visual Studio and Xcode...)
+#
+function(_ep_get_configuration_subdir_suffix suffix_var)
+  set(suffix "")
+  get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
+  if(_isMultiConfig)
+    set(suffix "/${CMAKE_CFG_INTDIR}")
+  endif()
+  set(${suffix_var} "${suffix}" PARENT_SCOPE)
+endfunction()
+
+
+function(_ep_get_step_stampfile name step stampfile_var)
+  ExternalProject_Get_Property(${name} stamp_dir)
+
+  _ep_get_configuration_subdir_suffix(cfgdir)
+  set(stampfile "${stamp_dir}${cfgdir}/${name}-${step}")
+
+  set(${stampfile_var} "${stampfile}" PARENT_SCOPE)
+endfunction()
+
+
+function(_ep_get_complete_stampfile name stampfile_var)
+  set(cmf_dir ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles)
+  _ep_get_configuration_subdir_suffix(cfgdir)
+  set(stampfile "${cmf_dir}${cfgdir}/${name}-complete")
+
+  set(${stampfile_var} ${stampfile} PARENT_SCOPE)
+endfunction()
+
+
+function(_ep_step_add_target name step no_deps)
+  if(TARGET ${name}-${step})
+    return()
+  endif()
+  get_property(cmp0114 TARGET ${name} PROPERTY _EP_CMP0114)
+  _ep_get_step_stampfile(${name} ${step} stamp_file)
+  cmake_policy(PUSH)
+  if(cmp0114 STREQUAL "NEW")
+    # To implement CMP0114 NEW behavior with Makefile generators,
+    # we need CMP0113 NEW behavior.
+    cmake_policy(SET CMP0113 NEW)
+  endif()
+  add_custom_target(${name}-${step}
+    DEPENDS ${stamp_file})
+  cmake_policy(POP)
+  set_property(TARGET ${name}-${step} PROPERTY _EP_IS_EXTERNAL_PROJECT_STEP 1)
+  set_property(TARGET ${name}-${step} PROPERTY LABELS ${name})
+  set_property(TARGET ${name}-${step} PROPERTY FOLDER "ExternalProjectTargets/${name}")
+
+  if(cmp0114 STREQUAL "NEW")
+    # Add target-level dependencies for the step.
+    get_property(exclude_from_main TARGET ${name} PROPERTY _EP_${step}_EXCLUDE_FROM_MAIN)
+    if(NOT exclude_from_main)
+      add_dependencies(${name} ${name}-${step})
+    endif()
+    _ep_step_add_target_dependencies(${name} ${step} ${step})
+    _ep_step_add_target_dependents(${name} ${step} ${step})
+
+    get_property(independent TARGET ${name} PROPERTY _EP_${step}_INDEPENDENT)
+  else()
+    if(no_deps AND "${step}" MATCHES "^(configure|build|install|test)$")
+      message(AUTHOR_WARNING "Using NO_DEPENDS for \"${step}\" step  might break parallel builds")
+    endif()
+    set(independent ${no_deps})
+  endif()
+
+  # Depend on other external projects (target-level).
+  if(NOT independent)
+    get_property(deps TARGET ${name} PROPERTY _EP_DEPENDS)
+    foreach(arg IN LISTS deps)
+      add_dependencies(${name}-${step} ${arg})
+    endforeach()
+  endif()
+endfunction()
+
+
+function(_ep_step_add_target_dependencies name step node)
+  get_property(dependees TARGET ${name} PROPERTY _EP_${node}_INTERNAL_DEPENDEES)
+  list(REMOVE_DUPLICATES dependees)
+  foreach(dependee IN LISTS dependees)
+    get_property(exclude_from_main TARGET ${name} PROPERTY _EP_${step}_EXCLUDE_FROM_MAIN)
+    get_property(dependee_dependers TARGET ${name} PROPERTY _EP_${dependee}_INTERNAL_DEPENDERS)
+    if(exclude_from_main OR dependee_dependers MATCHES ";")
+      # The step on which our step target depends itself has
+      # dependents in multiple targes.  It needs a step target too
+      # so that there is a unique place for its custom command.
+      _ep_step_add_target("${name}" "${dependee}" "FALSE")
+    endif()
+
+    if(TARGET ${name}-${dependee})
+      add_dependencies(${name}-${step} ${name}-${dependee})
+    else()
+      _ep_step_add_target_dependencies(${name} ${step} ${dependee})
+    endif()
+  endforeach()
+endfunction()
+
+
+function(_ep_step_add_target_dependents name step node)
+  get_property(dependers TARGET ${name} PROPERTY _EP_${node}_INTERNAL_DEPENDERS)
+  list(REMOVE_DUPLICATES dependers)
+  foreach(depender IN LISTS dependers)
+    if(TARGET ${name}-${depender})
+      add_dependencies(${name}-${depender} ${name}-${step})
+    else()
+      _ep_step_add_target_dependents(${name} ${step} ${depender})
+    endif()
+  endforeach()
+endfunction()
+
+
+function(ExternalProject_Add_StepTargets name)
+  get_property(cmp0114 TARGET ${name} PROPERTY _EP_CMP0114)
+  set(steps ${ARGN})
+  if(ARGC GREATER 1 AND "${ARGV1}" STREQUAL "NO_DEPENDS")
+    set(no_deps 1)
+    list(REMOVE_AT steps 0)
+  else()
+    set(no_deps 0)
+  endif()
+  if(cmp0114 STREQUAL "NEW")
+    if(no_deps)
+      message(FATAL_ERROR
+        "The 'NO_DEPENDS' option is no longer allowed.  "
+        "It has been superseded by the per-step 'INDEPENDENT' option.  "
+        "See policy CMP0114."
+        )
+    endif()
+  elseif(cmp0114 STREQUAL "")
+    cmake_policy(GET_WARNING CMP0114 _cmp0114_warning)
+    string(APPEND _cmp0114_warning "\n"
+      "ExternalProject target '${name}' would depend on the targets for "
+      "step(s) '${steps}' under policy CMP0114, but this is being left out "
+      "for compatibility since the policy is not set."
+      )
+    if(no_deps)
+      string(APPEND _cmp0114_warning
+        "  Also, the NO_DEPENDS option is deprecated in favor of policy CMP0114."
+        )
+    endif()
+    message(AUTHOR_WARNING "${_cmp0114_warning}")
+  endif()
+  foreach(step ${steps})
+    _ep_step_add_target("${name}" "${step}" "${no_deps}")
+  endforeach()
+endfunction()
+
+
+function(ExternalProject_Add_Step name step)
+  get_property(cmp0114 TARGET ${name} PROPERTY _EP_CMP0114)
+  _ep_get_complete_stampfile(${name} complete_stamp_file)
+  _ep_get_step_stampfile(${name} ${step} stamp_file)
+
+  set(keywords
+    COMMAND
+    COMMENT
+    DEPENDEES
+    DEPENDERS
+    DEPENDS
+    INDEPENDENT
+    BYPRODUCTS
+    ALWAYS
+    EXCLUDE_FROM_MAIN
+    WORKING_DIRECTORY
+    LOG
+    USES_TERMINAL
+  )
+  _ep_parse_arguments(ExternalProject_Add_Step "${keywords}"
+                      ${name} _EP_${step}_ "${ARGN}")
+
+  get_property(independent TARGET ${name} PROPERTY _EP_${step}_INDEPENDENT)
+  if(independent STREQUAL "")
+    set(independent FALSE)
+    set_property(TARGET ${name} PROPERTY _EP_${step}_INDEPENDENT "${independent}")
+  endif()
+
+  get_property(exclude_from_main TARGET ${name} PROPERTY _EP_${step}_EXCLUDE_FROM_MAIN)
+  if(NOT exclude_from_main)
+    add_custom_command(APPEND
+      OUTPUT ${complete_stamp_file}
+      DEPENDS ${stamp_file}
+      )
+  endif()
+
+  # Steps depending on this step.
+  get_property(dependers TARGET ${name} PROPERTY _EP_${step}_DEPENDERS)
+  set_property(TARGET ${name} APPEND PROPERTY _EP_${step}_INTERNAL_DEPENDERS ${dependers})
+  foreach(depender IN LISTS dependers)
+    set_property(TARGET ${name} APPEND PROPERTY _EP_${depender}_INTERNAL_DEPENDEES ${step})
+    _ep_get_step_stampfile(${name} ${depender} depender_stamp_file)
+    add_custom_command(APPEND
+      OUTPUT ${depender_stamp_file}
+      DEPENDS ${stamp_file}
+      )
+    if(cmp0114 STREQUAL "NEW" AND NOT independent)
+      get_property(dep_independent TARGET ${name} PROPERTY _EP_${depender}_INDEPENDENT)
+      if(dep_independent)
+        message(FATAL_ERROR "ExternalProject '${name}' step '${depender}' is marked INDEPENDENT "
+          "but depends on step '${step}' that is not marked INDEPENDENT.")
+      endif()
+    endif()
+  endforeach()
+
+  # Dependencies on files.
+  get_property(depends TARGET ${name} PROPERTY _EP_${step}_DEPENDS)
+
+  # Byproducts of the step.
+  get_property(byproducts TARGET ${name} PROPERTY _EP_${step}_BYPRODUCTS)
+
+  # Dependencies on steps.
+  get_property(dependees TARGET ${name} PROPERTY _EP_${step}_DEPENDEES)
+  set_property(TARGET ${name} APPEND PROPERTY _EP_${step}_INTERNAL_DEPENDEES ${dependees})
+  foreach(dependee IN LISTS dependees)
+    set_property(TARGET ${name} APPEND PROPERTY _EP_${dependee}_INTERNAL_DEPENDERS ${step})
+    _ep_get_step_stampfile(${name} ${dependee} dependee_stamp_file)
+    list(APPEND depends ${dependee_stamp_file})
+    if(cmp0114 STREQUAL "NEW" AND independent)
+      get_property(dep_independent TARGET ${name} PROPERTY _EP_${dependee}_INDEPENDENT)
+      if(NOT dep_independent)
+        message(FATAL_ERROR "ExternalProject '${name}' step '${step}' is marked INDEPENDENT "
+          "but depends on step '${dependee}' that is not marked INDEPENDENT.")
+      endif()
+    endif()
+  endforeach()
+
+  # The command to run.
+  get_property(command TARGET ${name} PROPERTY _EP_${step}_COMMAND)
+  if(command)
+    set(comment "Performing ${step} step for '${name}'")
+  else()
+    set(comment "No ${step} step for '${name}'")
+  endif()
+  get_property(work_dir TARGET ${name} PROPERTY _EP_${step}_WORKING_DIRECTORY)
+
+  # Replace list separators.
+  get_property(sep TARGET ${name} PROPERTY _EP_LIST_SEPARATOR)
+  if(sep AND command)
+    string(REPLACE "${sep}" "\\;" command "${command}")
+  endif()
+
+  # Replace location tags.
+  _ep_replace_location_tags(${name} comment command work_dir byproducts)
+
+  # Custom comment?
+  get_property(comment_set TARGET ${name} PROPERTY _EP_${step}_COMMENT SET)
+  if(comment_set)
+    get_property(comment TARGET ${name} PROPERTY _EP_${step}_COMMENT)
+  endif()
+
+  # Uses terminal?
+  get_property(uses_terminal TARGET ${name} PROPERTY _EP_${step}_USES_TERMINAL)
+  if(uses_terminal)
+    set(uses_terminal USES_TERMINAL)
+  else()
+    set(uses_terminal "")
+  endif()
+
+  # Run every time?
+  get_property(always TARGET ${name} PROPERTY _EP_${step}_ALWAYS)
+  if(always)
+    set_property(SOURCE ${stamp_file} PROPERTY SYMBOLIC 1)
+    set(touch)
+    # Remove any existing stamp in case the option changed in an existing tree.
+    get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
+    if(_isMultiConfig)
+      foreach(cfg ${CMAKE_CONFIGURATION_TYPES})
+        string(REPLACE "/${CMAKE_CFG_INTDIR}" "/${cfg}" stamp_file_config "${stamp_file}")
+        file(REMOVE ${stamp_file_config})
+      endforeach()
+    else()
+      file(REMOVE ${stamp_file})
+    endif()
+  else()
+    set(touch ${CMAKE_COMMAND} -E touch ${stamp_file})
+  endif()
+
+  # Wrap with log script?
+  get_property(log TARGET ${name} PROPERTY _EP_${step}_LOG)
+  if(command AND log)
+    _ep_write_log_script(${name} ${step} command)
+  endif()
+
+  if("${command}" STREQUAL "")
+    # Some generators (i.e. Xcode) will not generate a file level target
+    # if no command is set, and therefore the dependencies on this
+    # target will be broken.
+    # The empty command is replaced by an echo command here in order to
+    # avoid this issue.
+    set(command ${CMAKE_COMMAND} -E echo_append)
+  endif()
+
+  set(__cmdQuoted)
+  foreach(__item IN LISTS command)
+    string(APPEND __cmdQuoted " [==[${__item}]==]")
+  endforeach()
+  cmake_language(EVAL CODE "
+    add_custom_command(
+      OUTPUT \${stamp_file}
+      BYPRODUCTS \${byproducts}
+      COMMENT \${comment}
+      COMMAND ${__cmdQuoted}
+      COMMAND \${touch}
+      DEPENDS \${depends}
+      WORKING_DIRECTORY \${work_dir}
+      VERBATIM
+      ${uses_terminal}
+    )"
+  )
+  set_property(TARGET ${name} APPEND PROPERTY _EP_STEPS ${step})
+
+  # Add custom "step target"?
+  get_property(step_targets TARGET ${name} PROPERTY _EP_STEP_TARGETS)
+  if(NOT step_targets)
+    get_property(step_targets DIRECTORY PROPERTY EP_STEP_TARGETS)
+  endif()
+  foreach(st ${step_targets})
+    if("${st}" STREQUAL "${step}")
+      _ep_step_add_target("${name}" "${step}" "FALSE")
+      break()
+    endif()
+  endforeach()
+
+  get_property(independent_step_targets TARGET ${name} PROPERTY _EP_INDEPENDENT_STEP_TARGETS)
+  if(NOT independent_step_targets)
+    get_property(independent_step_targets DIRECTORY PROPERTY EP_INDEPENDENT_STEP_TARGETS)
+  endif()
+  if(cmp0114 STREQUAL "NEW")
+    if(independent_step_targets)
+      message(FATAL_ERROR
+        "ExternalProject '${name}' option 'INDEPENDENT_STEP_TARGETS' is set to\n"
+        "  ${independent_step_targets}\n"
+        "but the option is no longer allowed.  "
+        "It has been superseded by the per-step 'INDEPENDENT' option.  "
+        "See policy CMP0114."
+        )
+    endif()
+  else()
+    if(independent_step_targets AND cmp0114 STREQUAL "")
+      get_property(warned TARGET ${name} PROPERTY _EP_CMP0114_WARNED_INDEPENDENT_STEP_TARGETS)
+      if(NOT warned)
+        set_property(TARGET ${name} PROPERTY _EP_CMP0114_WARNED_INDEPENDENT_STEP_TARGETS 1)
+        cmake_policy(GET_WARNING CMP0114 _cmp0114_warning)
+        string(APPEND _cmp0114_warning "\n"
+          "ExternalProject '${name}' option INDEPENDENT_STEP_TARGETS is set to\n"
+          "  ${independent_step_targets}\n"
+          "but the option is deprecated in favor of policy CMP0114."
+          )
+        message(AUTHOR_WARNING "${_cmp0114_warning}")
+      endif()
+    endif()
+    foreach(st ${independent_step_targets})
+      if("${st}" STREQUAL "${step}")
+        _ep_step_add_target("${name}" "${step}" "TRUE")
+        break()
+      endif()
+    endforeach()
+  endif()
+endfunction()
+
+
+function(ExternalProject_Add_StepDependencies name step)
+  set(dependencies ${ARGN})
+
+  # Sanity checks on "name" and "step".
+  if(NOT TARGET ${name})
+    message(FATAL_ERROR "Cannot find target \"${name}\". Perhaps it has not yet been created using ExternalProject_Add.")
+  endif()
+
+  get_property(type TARGET ${name} PROPERTY TYPE)
+  if(NOT type STREQUAL "UTILITY")
+    message(FATAL_ERROR "Target \"${name}\" was not generated by ExternalProject_Add.")
+  endif()
+
+  get_property(is_ep TARGET ${name} PROPERTY _EP_IS_EXTERNAL_PROJECT)
+  if(NOT is_ep)
+    message(FATAL_ERROR "Target \"${name}\" was not generated by ExternalProject_Add.")
+  endif()
+
+  get_property(steps TARGET ${name} PROPERTY _EP_STEPS)
+  list(FIND steps ${step} is_step)
+  if(is_step LESS 0)
+    message(FATAL_ERROR "External project \"${name}\" does not have a step \"${step}\".")
+  endif()
+
+  if(TARGET ${name}-${step})
+    get_property(type TARGET ${name}-${step} PROPERTY TYPE)
+    if(NOT type STREQUAL "UTILITY")
+      message(FATAL_ERROR "Target \"${name}-${step}\" was not generated by ExternalProject_Add_StepTargets.")
+    endif()
+    get_property(is_ep_step TARGET ${name}-${step} PROPERTY _EP_IS_EXTERNAL_PROJECT_STEP)
+    if(NOT is_ep_step)
+      message(FATAL_ERROR "Target \"${name}-${step}\" was not generated by ExternalProject_Add_StepTargets.")
+    endif()
+  endif()
+
+  # Always add file-level dependency, but add target-level dependency
+  # only if the target exists for that step.
+  _ep_get_step_stampfile(${name} ${step} stamp_file)
+  foreach(dep ${dependencies})
+    add_custom_command(APPEND
+      OUTPUT ${stamp_file}
+      DEPENDS ${dep})
+    if(TARGET ${name}-${step})
+      foreach(dep ${dependencies})
+        add_dependencies(${name}-${step} ${dep})
+      endforeach()
+    endif()
+  endforeach()
+
+endfunction()
+
+
+function(_ep_add_mkdir_command name)
+  ExternalProject_Get_Property(${name}
+    source_dir binary_dir install_dir stamp_dir download_dir tmp_dir log_dir)
+
+  _ep_get_configuration_subdir_suffix(cfgdir)
+
+  ExternalProject_Add_Step(${name} mkdir
+    INDEPENDENT TRUE
+    COMMENT "Creating directories for '${name}'"
+    COMMAND ${CMAKE_COMMAND} -E make_directory ${source_dir}
+    COMMAND ${CMAKE_COMMAND} -E make_directory ${binary_dir}
+    COMMAND ${CMAKE_COMMAND} -E make_directory ${install_dir}
+    COMMAND ${CMAKE_COMMAND} -E make_directory ${tmp_dir}
+    COMMAND ${CMAKE_COMMAND} -E make_directory ${stamp_dir}${cfgdir}
+    COMMAND ${CMAKE_COMMAND} -E make_directory ${download_dir}
+    COMMAND ${CMAKE_COMMAND} -E make_directory ${log_dir}
+    )
+endfunction()
+
+
+function(_ep_is_dir_empty dir empty_var)
+  file(GLOB gr "${dir}/*")
+  if("${gr}" STREQUAL "")
+    set(${empty_var} 1 PARENT_SCOPE)
+  else()
+    set(${empty_var} 0 PARENT_SCOPE)
+  endif()
+endfunction()
+
+function(_ep_get_git_submodules_recurse git_submodules_recurse)
+  # Checks for GIT_SUBMODULES_RECURSE property
+  # Default is ON, which sets git_submodules_recurse output variable to "--recursive"
+  # Otherwise, the output variable is set to an empty value ""
+  get_property(git_submodules_recurse_set TARGET ${name} PROPERTY _EP_GIT_SUBMODULES_RECURSE SET)
+  if(NOT git_submodules_recurse_set)
+    set(recurseFlag "--recursive")
+  else()
+    get_property(git_submodules_recurse_value TARGET ${name} PROPERTY _EP_GIT_SUBMODULES_RECURSE)
+    if(git_submodules_recurse_value)
+      set(recurseFlag "--recursive")
+    else()
+      set(recurseFlag "")
+    endif()
+  endif()
+  set(${git_submodules_recurse} "${recurseFlag}" PARENT_SCOPE)
+
+  # The git submodule update '--recursive' flag requires git >= v1.6.5
+  if(recurseFlag AND GIT_VERSION_STRING VERSION_LESS 1.6.5)
+    message(FATAL_ERROR "error: git version 1.6.5 or later required for --recursive flag with 'git submodule ...': GIT_VERSION_STRING='${GIT_VERSION_STRING}'")
+  endif()
+endfunction()
+
+
+function(_ep_add_download_command name)
+  ExternalProject_Get_Property(${name} source_dir stamp_dir download_dir tmp_dir)
+
+  get_property(cmd_set TARGET ${name} PROPERTY _EP_DOWNLOAD_COMMAND SET)
+  get_property(cmd TARGET ${name} PROPERTY _EP_DOWNLOAD_COMMAND)
+  get_property(cvs_repository TARGET ${name} PROPERTY _EP_CVS_REPOSITORY)
+  get_property(svn_repository TARGET ${name} PROPERTY _EP_SVN_REPOSITORY)
+  get_property(git_repository TARGET ${name} PROPERTY _EP_GIT_REPOSITORY)
+  get_property(hg_repository  TARGET ${name} PROPERTY _EP_HG_REPOSITORY )
+  get_property(url TARGET ${name} PROPERTY _EP_URL)
+  get_property(fname TARGET ${name} PROPERTY _EP_DOWNLOAD_NAME)
+
+  # TODO: Perhaps file:// should be copied to download dir before extraction.
+  string(REGEX REPLACE "file://" "" url "${url}")
+
+  set(depends)
+  set(comment)
+  set(work_dir)
+
+  if(cmd_set)
+    set(work_dir ${download_dir})
+  elseif(cvs_repository)
+    find_package(CVS QUIET)
+    if(NOT CVS_EXECUTABLE)
+      message(FATAL_ERROR "error: could not find cvs for checkout of ${name}")
+    endif()
+
+    get_target_property(cvs_module ${name} _EP_CVS_MODULE)
+    if(NOT cvs_module)
+      message(FATAL_ERROR "error: no CVS_MODULE")
+    endif()
+
+    get_property(cvs_tag TARGET ${name} PROPERTY _EP_CVS_TAG)
+
+    set(repository ${cvs_repository})
+    set(module ${cvs_module})
+    set(tag ${cvs_tag})
+    configure_file(
+      "${CMAKE_ROOT}/Modules/RepositoryInfo.txt.in"
+      "${stamp_dir}/${name}-cvsinfo.txt"
+      @ONLY
+      )
+
+    get_filename_component(src_name "${source_dir}" NAME)
+    get_filename_component(work_dir "${source_dir}" PATH)
+    set(comment "Performing download step (CVS checkout) for '${name}'")
+    set(cmd ${CVS_EXECUTABLE} -d ${cvs_repository} -q co ${cvs_tag} -d ${src_name} ${cvs_module})
+    list(APPEND depends ${stamp_dir}/${name}-cvsinfo.txt)
+  elseif(svn_repository)
+    find_package(Subversion QUIET)
+    if(NOT Subversion_SVN_EXECUTABLE)
+      message(FATAL_ERROR "error: could not find svn for checkout of ${name}")
+    endif()
+
+    get_property(svn_revision TARGET ${name} PROPERTY _EP_SVN_REVISION)
+    get_property(svn_username TARGET ${name} PROPERTY _EP_SVN_USERNAME)
+    get_property(svn_password TARGET ${name} PROPERTY _EP_SVN_PASSWORD)
+    get_property(svn_trust_cert TARGET ${name} PROPERTY _EP_SVN_TRUST_CERT)
+
+    set(repository "${svn_repository} user=${svn_username} password=${svn_password}")
+    set(module)
+    set(tag ${svn_revision})
+    configure_file(
+      "${CMAKE_ROOT}/Modules/RepositoryInfo.txt.in"
+      "${stamp_dir}/${name}-svninfo.txt"
+      @ONLY
+      )
+
+    get_filename_component(src_name "${source_dir}" NAME)
+    get_filename_component(work_dir "${source_dir}" PATH)
+    set(comment "Performing download step (SVN checkout) for '${name}'")
+    set(svn_user_pw_args "")
+    if(DEFINED svn_username)
+      set(svn_user_pw_args ${svn_user_pw_args} "--username=${svn_username}")
+    endif()
+    if(DEFINED svn_password)
+      set(svn_user_pw_args ${svn_user_pw_args} "--password=${svn_password}")
+    endif()
+    if(svn_trust_cert)
+      set(svn_trust_cert_args --trust-server-cert)
+    endif()
+    set(cmd ${Subversion_SVN_EXECUTABLE} co ${svn_repository} ${svn_revision}
+      --non-interactive ${svn_trust_cert_args} ${svn_user_pw_args} ${src_name})
+    list(APPEND depends ${stamp_dir}/${name}-svninfo.txt)
+  elseif(git_repository)
+    # FetchContent gives us these directly, so don't try to recompute them
+    if(NOT GIT_EXECUTABLE OR NOT GIT_VERSION_STRING)
+      unset(CMAKE_MODULE_PATH) # Use CMake builtin find module
+      find_package(Git QUIET)
+      if(NOT GIT_EXECUTABLE)
+        message(FATAL_ERROR "error: could not find git for clone of ${name}")
+      endif()
+    endif()
+
+    _ep_get_git_submodules_recurse(git_submodules_recurse)
+
+    get_property(git_tag TARGET ${name} PROPERTY _EP_GIT_TAG)
+    if(NOT git_tag)
+      set(git_tag "master")
+    endif()
+
+    set(git_init_submodules TRUE)
+    get_property(git_submodules_set TARGET ${name} PROPERTY _EP_GIT_SUBMODULES SET)
+    if(git_submodules_set)
+      get_property(git_submodules TARGET ${name} PROPERTY _EP_GIT_SUBMODULES)
+      if(git_submodules  STREQUAL "" AND _EP_CMP0097 STREQUAL "NEW")
+        set(git_init_submodules FALSE)
+      endif()
+    endif()
+
+    get_property(git_remote_name TARGET ${name} PROPERTY _EP_GIT_REMOTE_NAME)
+    if(NOT git_remote_name)
+      set(git_remote_name "origin")
+    endif()
+
+    get_property(tls_verify TARGET ${name} PROPERTY _EP_TLS_VERIFY)
+    if("x${tls_verify}" STREQUAL "x" AND DEFINED CMAKE_TLS_VERIFY)
+      set(tls_verify "${CMAKE_TLS_VERIFY}")
+    endif()
+    get_property(git_shallow TARGET ${name} PROPERTY _EP_GIT_SHALLOW)
+    get_property(git_progress TARGET ${name} PROPERTY _EP_GIT_PROGRESS)
+    get_property(git_config TARGET ${name} PROPERTY _EP_GIT_CONFIG)
+
+    # If git supports it, make checkouts quiet when checking out a git hash.
+    # This avoids the very noisy detached head message.
+    if(GIT_VERSION_STRING VERSION_GREATER_EQUAL 1.7.7)
+      list(PREPEND git_config advice.detachedHead=false)
+    endif()
+
+    # For the download step, and the git clone operation, only the repository
+    # should be recorded in a configured RepositoryInfo file. If the repo
+    # changes, the clone script should be run again. But if only the tag
+    # changes, avoid running the clone script again. Let the 'always' running
+    # update step checkout the new tag.
+    #
+    set(repository ${git_repository})
+    set(module)
+    set(tag ${git_remote_name})
+    configure_file(
+      "${CMAKE_ROOT}/Modules/RepositoryInfo.txt.in"
+      "${stamp_dir}/${name}-gitinfo.txt"
+      @ONLY
+      )
+
+    get_filename_component(src_name "${source_dir}" NAME)
+    get_filename_component(work_dir "${source_dir}" PATH)
+
+    # Since git clone doesn't succeed if the non-empty source_dir exists,
+    # create a cmake script to invoke as download command.
+    # The script will delete the source directory and then call git clone.
+    #
+    _ep_write_gitclone_script(${tmp_dir}/${name}-gitclone.cmake ${source_dir}
+      ${GIT_EXECUTABLE} ${git_repository} ${git_tag} ${git_remote_name} ${git_init_submodules} "${git_submodules_recurse}" "${git_submodules}" "${git_shallow}" "${git_progress}" "${git_config}" ${src_name} ${work_dir}
+      ${stamp_dir}/${name}-gitinfo.txt ${stamp_dir}/${name}-gitclone-lastrun.txt "${tls_verify}"
+      )
+    set(comment "Performing download step (git clone) for '${name}'")
+    set(cmd ${CMAKE_COMMAND} -P ${tmp_dir}/${name}-gitclone.cmake)
+    list(APPEND depends ${stamp_dir}/${name}-gitinfo.txt)
+  elseif(hg_repository)
+    find_package(Hg QUIET)
+    if(NOT HG_EXECUTABLE)
+      message(FATAL_ERROR "error: could not find hg for clone of ${name}")
+    endif()
+
+    get_property(hg_tag TARGET ${name} PROPERTY _EP_HG_TAG)
+    if(NOT hg_tag)
+      set(hg_tag "tip")
+    endif()
+
+    # For the download step, and the hg clone operation, only the repository
+    # should be recorded in a configured RepositoryInfo file. If the repo
+    # changes, the clone script should be run again. But if only the tag
+    # changes, avoid running the clone script again. Let the 'always' running
+    # update step checkout the new tag.
+    #
+    set(repository ${hg_repository})
+    set(module)
+    set(tag)
+    configure_file(
+      "${CMAKE_ROOT}/Modules/RepositoryInfo.txt.in"
+      "${stamp_dir}/${name}-hginfo.txt"
+      @ONLY
+      )
+
+    get_filename_component(src_name "${source_dir}" NAME)
+    get_filename_component(work_dir "${source_dir}" PATH)
+
+    # Since hg clone doesn't succeed if the non-empty source_dir exists,
+    # create a cmake script to invoke as download command.
+    # The script will delete the source directory and then call hg clone.
+    #
+    _ep_write_hgclone_script(${tmp_dir}/${name}-hgclone.cmake ${source_dir}
+      ${HG_EXECUTABLE} ${hg_repository} ${hg_tag} ${src_name} ${work_dir}
+      ${stamp_dir}/${name}-hginfo.txt ${stamp_dir}/${name}-hgclone-lastrun.txt
+      )
+    set(comment "Performing download step (hg clone) for '${name}'")
+    set(cmd ${CMAKE_COMMAND} -P ${tmp_dir}/${name}-hgclone.cmake)
+    list(APPEND depends ${stamp_dir}/${name}-hginfo.txt)
+  elseif(url)
+    get_filename_component(work_dir "${source_dir}" PATH)
+    get_property(hash TARGET ${name} PROPERTY _EP_URL_HASH)
+    _ep_get_hash_regex(_ep_hash_regex)
+    if(hash AND NOT "${hash}" MATCHES "${_ep_hash_regex}")
+      _ep_get_hash_algos(_ep_hash_algos)
+      list(JOIN _ep_hash_algos "|" _ep_hash_algos)
+      message(FATAL_ERROR "URL_HASH is set to\n  ${hash}\n"
+        "but must be ALGO=value where ALGO is\n  ${_ep_hash_algos}\n"
+        "and value is a hex string.")
+    endif()
+    get_property(md5 TARGET ${name} PROPERTY _EP_URL_MD5)
+    if(md5 AND NOT "MD5=${md5}" MATCHES "${_ep_hash_regex}")
+      message(FATAL_ERROR "URL_MD5 is set to\n  ${md5}\nbut must be a hex string.")
+    endif()
+    if(md5 AND NOT hash)
+      set(hash "MD5=${md5}")
+    endif()
+    set(repository "external project URL")
+    set(module "${url}")
+    set(tag "${hash}")
+    configure_file(
+      "${CMAKE_ROOT}/Modules/RepositoryInfo.txt.in"
+      "${stamp_dir}/${name}-urlinfo.txt"
+      @ONLY
+      )
+    list(APPEND depends ${stamp_dir}/${name}-urlinfo.txt)
+
+    list(LENGTH url url_list_length)
+    if(NOT "${url_list_length}" STREQUAL "1")
+      foreach(entry ${url})
+        if(NOT "${entry}" MATCHES "^[a-z]+://")
+          message(FATAL_ERROR "At least one entry of URL is a path (invalid in a list)")
+        endif()
+      endforeach()
+      if("x${fname}" STREQUAL "x")
+        list(GET url 0 fname)
+      endif()
+    endif()
+
+    if(IS_DIRECTORY "${url}")
+      get_filename_component(abs_dir "${url}" ABSOLUTE)
+      set(comment "Performing download step (DIR copy) for '${name}'")
+      set(cmd   ${CMAKE_COMMAND} -E rm -rf ${source_dir}
+        COMMAND ${CMAKE_COMMAND} -E copy_directory ${abs_dir} ${source_dir})
+    else()
+      get_property(no_extract TARGET "${name}" PROPERTY _EP_DOWNLOAD_NO_EXTRACT)
+      if("${url}" MATCHES "^[a-z]+://")
+        # TODO: Should download and extraction be different steps?
+        if("x${fname}" STREQUAL "x")
+          set(fname "${url}")
+        endif()
+        if("${fname}" MATCHES [[([^/\?#]+(\.|=)(7z|tar|tar\.bz2|tar\.gz|tar\.xz|tbz2|tgz|txz|zip))([/?#].*)?$]])
+          set(fname "${CMAKE_MATCH_1}")
+        elseif(no_extract)
+          get_filename_component(fname "${fname}" NAME)
+        else()
+          # Fall back to a default file name.  The actual file name does not
+          # matter because it is used only internally and our extraction tool
+          # inspects the file content directly.  If it turns out the wrong URL
+          # was given that will be revealed during the build which is an easier
+          # place for users to diagnose than an error here anyway.
+          set(fname "archive.tar")
+        endif()
+        string(REPLACE ";" "-" fname "${fname}")
+        set(file ${download_dir}/${fname})
+        get_property(timeout TARGET ${name} PROPERTY _EP_TIMEOUT)
+        get_property(inactivity_timeout TARGET ${name} PROPERTY _EP_INACTIVITY_TIMEOUT)
+        get_property(no_progress TARGET ${name} PROPERTY _EP_DOWNLOAD_NO_PROGRESS)
+        get_property(tls_verify TARGET ${name} PROPERTY _EP_TLS_VERIFY)
+        get_property(tls_cainfo TARGET ${name} PROPERTY _EP_TLS_CAINFO)
+        get_property(netrc TARGET ${name} PROPERTY _EP_NETRC)
+        get_property(netrc_file TARGET ${name} PROPERTY _EP_NETRC_FILE)
+        get_property(http_username TARGET ${name} PROPERTY _EP_HTTP_USERNAME)
+        get_property(http_password TARGET ${name} PROPERTY _EP_HTTP_PASSWORD)
+        get_property(http_headers TARGET ${name} PROPERTY _EP_HTTP_HEADER)
+        set(download_script "${stamp_dir}/download-${name}.cmake")
+        _ep_write_downloadfile_script("${download_script}" "${url}" "${file}" "${timeout}" "${inactivity_timeout}" "${no_progress}" "${hash}" "${tls_verify}" "${tls_cainfo}" "${http_username}:${http_password}" "${http_headers}" "${netrc}" "${netrc_file}")
+        set(cmd ${CMAKE_COMMAND} -P "${download_script}"
+          COMMAND)
+        if (no_extract)
+          set(steps "download and verify")
+        else ()
+          set(steps "download, verify and extract")
+        endif ()
+        set(comment "Performing download step (${steps}) for '${name}'")
+        file(WRITE "${stamp_dir}/verify-${name}.cmake" "") # already verified by 'download_script'
+      else()
+        set(file "${url}")
+        if (no_extract)
+          set(steps "verify")
+        else ()
+          set(steps "verify and extract")
+        endif ()
+        set(comment "Performing download step (${steps}) for '${name}'")
+        _ep_write_verifyfile_script("${stamp_dir}/verify-${name}.cmake" "${file}" "${hash}")
+      endif()
+      list(APPEND cmd ${CMAKE_COMMAND} -P ${stamp_dir}/verify-${name}.cmake)
+      if (NOT no_extract)
+        _ep_write_extractfile_script("${stamp_dir}/extract-${name}.cmake" "${name}" "${file}" "${source_dir}")
+        list(APPEND cmd COMMAND ${CMAKE_COMMAND} -P ${stamp_dir}/extract-${name}.cmake)
+      else ()
+        set_property(TARGET ${name} PROPERTY _EP_DOWNLOADED_FILE ${file})
+      endif ()
+    endif()
+  else()
+    _ep_is_dir_empty("${source_dir}" empty)
+    if(${empty})
+      message(SEND_ERROR
+        "No download info given for '${name}' and its source directory:\n"
+        " ${source_dir}\n"
+        "is not an existing non-empty directory.  Please specify one of:\n"
+        " * SOURCE_DIR with an existing non-empty directory\n"
+        " * DOWNLOAD_COMMAND\n"
+        " * URL\n"
+        " * GIT_REPOSITORY\n"
+        " * SVN_REPOSITORY\n"
+        " * HG_REPOSITORY\n"
+        " * CVS_REPOSITORY and CVS_MODULE"
+        )
+    endif()
+  endif()
+
+  get_property(log TARGET ${name} PROPERTY _EP_LOG_DOWNLOAD)
+  if(log)
+    set(log LOG 1)
+  else()
+    set(log "")
+  endif()
+
+  get_property(uses_terminal TARGET ${name} PROPERTY
+    _EP_USES_TERMINAL_DOWNLOAD)
+  if(uses_terminal)
+    set(uses_terminal USES_TERMINAL 1)
+  else()
+    set(uses_terminal "")
+  endif()
+
+  set(__cmdQuoted)
+  foreach(__item IN LISTS cmd)
+    string(APPEND __cmdQuoted " [==[${__item}]==]")
+  endforeach()
+  cmake_language(EVAL CODE "
+    ExternalProject_Add_Step(\${name} download
+      INDEPENDENT TRUE
+      COMMENT \${comment}
+      COMMAND ${__cmdQuoted}
+      WORKING_DIRECTORY \${work_dir}
+      DEPENDS \${depends}
+      DEPENDEES mkdir
+      ${log}
+      ${uses_terminal}
+      )"
+  )
+endfunction()
+
+function(_ep_get_update_disconnected var name)
+  get_property(update_disconnected_set TARGET ${name} PROPERTY _EP_UPDATE_DISCONNECTED SET)
+  if(update_disconnected_set)
+    get_property(update_disconnected TARGET ${name} PROPERTY _EP_UPDATE_DISCONNECTED)
+  else()
+    get_property(update_disconnected DIRECTORY PROPERTY EP_UPDATE_DISCONNECTED)
+  endif()
+  set(${var} "${update_disconnected}" PARENT_SCOPE)
+endfunction()
+
+function(_ep_add_update_command name)
+  ExternalProject_Get_Property(${name} source_dir tmp_dir)
+
+  get_property(cmd_set TARGET ${name} PROPERTY _EP_UPDATE_COMMAND SET)
+  get_property(cmd TARGET ${name} PROPERTY _EP_UPDATE_COMMAND)
+  get_property(cvs_repository TARGET ${name} PROPERTY _EP_CVS_REPOSITORY)
+  get_property(svn_repository TARGET ${name} PROPERTY _EP_SVN_REPOSITORY)
+  get_property(git_repository TARGET ${name} PROPERTY _EP_GIT_REPOSITORY)
+  get_property(hg_repository  TARGET ${name} PROPERTY _EP_HG_REPOSITORY )
+
+  _ep_get_update_disconnected(update_disconnected ${name})
+
+  set(work_dir)
+  set(comment)
+  set(always)
+
+  if(cmd_set)
+    set(work_dir ${source_dir})
+    if(NOT "x${cmd}" STREQUAL "x")
+      set(always 1)
+    endif()
+  elseif(cvs_repository)
+    if(NOT CVS_EXECUTABLE)
+      message(FATAL_ERROR "error: could not find cvs for update of ${name}")
+    endif()
+    set(work_dir ${source_dir})
+    set(comment "Performing update step (CVS update) for '${name}'")
+    get_property(cvs_tag TARGET ${name} PROPERTY _EP_CVS_TAG)
+    set(cmd ${CVS_EXECUTABLE} -d ${cvs_repository} -q up -dP ${cvs_tag})
+    set(always 1)
+  elseif(svn_repository)
+    if(NOT Subversion_SVN_EXECUTABLE)
+      message(FATAL_ERROR "error: could not find svn for update of ${name}")
+    endif()
+    set(work_dir ${source_dir})
+    set(comment "Performing update step (SVN update) for '${name}'")
+    get_property(svn_revision TARGET ${name} PROPERTY _EP_SVN_REVISION)
+    get_property(svn_username TARGET ${name} PROPERTY _EP_SVN_USERNAME)
+    get_property(svn_password TARGET ${name} PROPERTY _EP_SVN_PASSWORD)
+    get_property(svn_trust_cert TARGET ${name} PROPERTY _EP_SVN_TRUST_CERT)
+    set(svn_user_pw_args "")
+    if(DEFINED svn_username)
+      set(svn_user_pw_args ${svn_user_pw_args} "--username=${svn_username}")
+    endif()
+    if(DEFINED svn_password)
+      set(svn_user_pw_args ${svn_user_pw_args} "--password=${svn_password}")
+    endif()
+    if(svn_trust_cert)
+      set(svn_trust_cert_args --trust-server-cert)
+    endif()
+    set(cmd ${Subversion_SVN_EXECUTABLE} up ${svn_revision}
+      --non-interactive ${svn_trust_cert_args} ${svn_user_pw_args})
+    set(always 1)
+  elseif(git_repository)
+    # FetchContent gives us these directly, so don't try to recompute them
+    if(NOT GIT_EXECUTABLE OR NOT GIT_VERSION_STRING)
+      unset(CMAKE_MODULE_PATH) # Use CMake builtin find module
+      find_package(Git QUIET)
+      if(NOT GIT_EXECUTABLE)
+        message(FATAL_ERROR "error: could not find git for fetch of ${name}")
+      endif()
+    endif()
+    set(work_dir ${source_dir})
+    set(comment "Performing update step for '${name}'")
+    get_property(git_tag TARGET ${name} PROPERTY _EP_GIT_TAG)
+    if(NOT git_tag)
+      set(git_tag "master")
+    endif()
+    get_property(git_remote_name TARGET ${name} PROPERTY _EP_GIT_REMOTE_NAME)
+    if(NOT git_remote_name)
+      set(git_remote_name "origin")
+    endif()
+
+    set(git_init_submodules TRUE)
+    get_property(git_submodules_set TARGET ${name} PROPERTY _EP_GIT_SUBMODULES SET)
+    if(git_submodules_set)
+      get_property(git_submodules TARGET ${name} PROPERTY _EP_GIT_SUBMODULES)
+      if(git_submodules  STREQUAL "" AND _EP_CMP0097 STREQUAL "NEW")
+        set(git_init_submodules FALSE)
+      endif()
+    endif()
+
+    get_property(git_update_strategy TARGET ${name} PROPERTY _EP_GIT_REMOTE_UPDATE_STRATEGY)
+    if(NOT git_update_strategy)
+      set(git_update_strategy "${CMAKE_EP_GIT_REMOTE_UPDATE_STRATEGY}")
+    endif()
+    if(NOT git_update_strategy)
+      set(git_update_strategy REBASE)
+    endif()
+    set(strategies CHECKOUT REBASE REBASE_CHECKOUT)
+    if(NOT git_update_strategy IN_LIST strategies)
+      message(FATAL_ERROR "'${git_update_strategy}' is not one of the supported strategies: ${strategies}")
+    endif()
+
+    _ep_get_git_submodules_recurse(git_submodules_recurse)
+
+    _ep_write_gitupdate_script(${tmp_dir}/${name}-gitupdate.cmake
+      ${GIT_EXECUTABLE} ${git_tag} ${git_remote_name} ${git_init_submodules} "${git_submodules_recurse}" "${git_submodules}" ${git_repository} ${work_dir} ${git_update_strategy}
+      )
+    set(cmd ${CMAKE_COMMAND} -P ${tmp_dir}/${name}-gitupdate.cmake)
+    set(always 1)
+  elseif(hg_repository)
+    if(NOT HG_EXECUTABLE)
+      message(FATAL_ERROR "error: could not find hg for pull of ${name}")
+    endif()
+    set(work_dir ${source_dir})
+    set(comment "Performing update step (hg pull) for '${name}'")
+    get_property(hg_tag TARGET ${name} PROPERTY _EP_HG_TAG)
+    if(NOT hg_tag)
+      set(hg_tag "tip")
+    endif()
+    if("${HG_VERSION_STRING}" STREQUAL "2.1")
+      message(WARNING "Mercurial 2.1 does not distinguish an empty pull from a failed pull:
+ http://mercurial.selenic.com/wiki/UpgradeNotes#A2.1.1:_revert_pull_return_code_change.2C_compile_issue_on_OS_X
+ http://thread.gmane.org/gmane.comp.version-control.mercurial.devel/47656
+Update to Mercurial >= 2.1.1.
+")
+    endif()
+    set(cmd ${HG_EXECUTABLE} pull
+      COMMAND ${HG_EXECUTABLE} update ${hg_tag}
+      )
+    set(always 1)
+  endif()
+
+  get_property(log TARGET ${name} PROPERTY _EP_LOG_UPDATE)
+  if(log)
+    set(log LOG 1)
+  else()
+    set(log "")
+  endif()
+
+  get_property(uses_terminal TARGET ${name} PROPERTY
+    _EP_USES_TERMINAL_UPDATE)
+  if(uses_terminal)
+    set(uses_terminal USES_TERMINAL 1)
+  else()
+    set(uses_terminal "")
+  endif()
+
+  set(__cmdQuoted)
+  foreach(__item IN LISTS cmd)
+    string(APPEND __cmdQuoted " [==[${__item}]==]")
+  endforeach()
+  cmake_language(EVAL CODE "
+    ExternalProject_Add_Step(${name} update
+      INDEPENDENT TRUE
+      COMMENT \${comment}
+      COMMAND ${__cmdQuoted}
+      ALWAYS \${always}
+      EXCLUDE_FROM_MAIN \${update_disconnected}
+      WORKING_DIRECTORY \${work_dir}
+      DEPENDEES download
+      ${log}
+      ${uses_terminal}
+      )"
+  )
+
+endfunction()
+
+
+function(_ep_add_patch_command name)
+  ExternalProject_Get_Property(${name} source_dir)
+
+  get_property(cmd_set TARGET ${name} PROPERTY _EP_PATCH_COMMAND SET)
+  get_property(cmd TARGET ${name} PROPERTY _EP_PATCH_COMMAND)
+
+  set(work_dir)
+
+  if(cmd_set)
+    set(work_dir ${source_dir})
+  endif()
+
+  get_property(log TARGET ${name} PROPERTY _EP_LOG_PATCH)
+  if(log)
+    set(log LOG 1)
+  else()
+    set(log "")
+  endif()
+
+  _ep_get_update_disconnected(update_disconnected ${name})
+  if(update_disconnected)
+    set(patch_dep download)
+  else()
+    set(patch_dep update)
+  endif()
+
+  set(__cmdQuoted)
+  foreach(__item IN LISTS cmd)
+    string(APPEND __cmdQuoted " [==[${__item}]==]")
+  endforeach()
+  cmake_language(EVAL CODE "
+    ExternalProject_Add_Step(${name} patch
+      INDEPENDENT TRUE
+      COMMAND ${__cmdQuoted}
+      WORKING_DIRECTORY \${work_dir}
+      DEPENDEES \${patch_dep}
+      ${log}
+      )"
+  )
+endfunction()
+
+function(_ep_get_file_deps var name)
+  set(file_deps)
+
+  get_property(deps TARGET ${name} PROPERTY _EP_DEPENDS)
+  foreach(dep IN LISTS deps)
+    get_property(dep_type TARGET ${dep} PROPERTY TYPE)
+    if(dep_type STREQUAL "UTILITY")
+      get_property(is_ep TARGET ${dep} PROPERTY _EP_IS_EXTERNAL_PROJECT)
+      if(is_ep)
+        _ep_get_step_stampfile(${dep} "done" done_stamp_file)
+        list(APPEND file_deps ${done_stamp_file})
+      endif()
+    endif()
+  endforeach()
+
+  set("${var}" "${file_deps}" PARENT_SCOPE)
+endfunction()
+
+function(_ep_extract_configure_command var name)
+  get_property(cmd_set TARGET ${name} PROPERTY _EP_CONFIGURE_COMMAND SET)
+  if(cmd_set)
+    get_property(cmd TARGET ${name} PROPERTY _EP_CONFIGURE_COMMAND)
+  else()
+    get_target_property(cmake_command ${name} _EP_CMAKE_COMMAND)
+    if(cmake_command)
+      set(cmd "${cmake_command}")
+    else()
+      set(cmd "${CMAKE_COMMAND}")
+    endif()
+
+    get_property(cmake_args TARGET ${name} PROPERTY _EP_CMAKE_ARGS)
+    list(APPEND cmd ${cmake_args})
+
+    # If there are any CMAKE_CACHE_ARGS or CMAKE_CACHE_DEFAULT_ARGS,
+    # write an initial cache and use it
+    get_property(cmake_cache_args TARGET ${name} PROPERTY _EP_CMAKE_CACHE_ARGS)
+    get_property(cmake_cache_default_args TARGET ${name} PROPERTY _EP_CMAKE_CACHE_DEFAULT_ARGS)
+
+    set(has_cmake_cache_args 0)
+    if(NOT "${cmake_cache_args}" STREQUAL "")
+      set(has_cmake_cache_args 1)
+    endif()
+
+    set(has_cmake_cache_default_args 0)
+    if(NOT "${cmake_cache_default_args}" STREQUAL "")
+      set(has_cmake_cache_default_args 1)
+    endif()
+
+    get_target_property(cmake_generator ${name} _EP_CMAKE_GENERATOR)
+    get_target_property(cmake_generator_instance ${name} _EP_CMAKE_GENERATOR_INSTANCE)
+    get_target_property(cmake_generator_platform ${name} _EP_CMAKE_GENERATOR_PLATFORM)
+    get_target_property(cmake_generator_toolset ${name} _EP_CMAKE_GENERATOR_TOOLSET)
+    if(cmake_generator)
+      list(APPEND cmd "-G${cmake_generator}")
+      if(cmake_generator_platform)
+        list(APPEND cmd "-A${cmake_generator_platform}")
+      endif()
+      if(cmake_generator_toolset)
+        list(APPEND cmd "-T${cmake_generator_toolset}")
+      endif()
+      if(cmake_generator_instance)
+        list(APPEND cmd "-DCMAKE_GENERATOR_INSTANCE:INTERNAL=${cmake_generator_instance}")
+      endif()
+    else()
+      if(CMAKE_EXTRA_GENERATOR)
+        list(APPEND cmd "-G${CMAKE_EXTRA_GENERATOR} - ${CMAKE_GENERATOR}")
+      else()
+        list(APPEND cmd "-G${CMAKE_GENERATOR}")
+        if("${CMAKE_GENERATOR}" MATCHES "Green Hills MULTI")
+          set(has_cmake_cache_default_args 1)
+          set(cmake_cache_default_args ${cmake_cache_default_args}
+            "-DGHS_TARGET_PLATFORM:STRING=${GHS_TARGET_PLATFORM}"
+            "-DGHS_PRIMARY_TARGET:STRING=${GHS_PRIMARY_TARGET}"
+            "-DGHS_TOOLSET_ROOT:STRING=${GHS_TOOLSET_ROOT}"
+            "-DGHS_OS_ROOT:STRING=${GHS_OS_ROOT}"
+            "-DGHS_OS_DIR:STRING=${GHS_OS_DIR}"
+            "-DGHS_BSP_NAME:STRING=${GHS_BSP_NAME}")
+        endif()
+      endif()
+      if(cmake_generator_platform)
+        message(FATAL_ERROR "Option CMAKE_GENERATOR_PLATFORM not allowed without CMAKE_GENERATOR.")
+      endif()
+      if(CMAKE_GENERATOR_PLATFORM)
+        list(APPEND cmd "-A${CMAKE_GENERATOR_PLATFORM}")
+      endif()
+      if(cmake_generator_toolset)
+        message(FATAL_ERROR "Option CMAKE_GENERATOR_TOOLSET not allowed without CMAKE_GENERATOR.")
+      endif()
+      if(CMAKE_GENERATOR_TOOLSET)
+        list(APPEND cmd "-T${CMAKE_GENERATOR_TOOLSET}")
+      endif()
+      if(cmake_generator_instance)
+        message(FATAL_ERROR "Option CMAKE_GENERATOR_INSTANCE not allowed without CMAKE_GENERATOR.")
+      endif()
+      if(CMAKE_GENERATOR_INSTANCE)
+        list(APPEND cmd "-DCMAKE_GENERATOR_INSTANCE:INTERNAL=${CMAKE_GENERATOR_INSTANCE}")
+      endif()
+    endif()
+
+    if(has_cmake_cache_args OR has_cmake_cache_default_args)
+      set(_ep_cache_args_script "<TMP_DIR>/${name}-cache-$<CONFIG>.cmake")
+      if(has_cmake_cache_args)
+        _ep_command_line_to_initial_cache(script_initial_cache_force "${cmake_cache_args}" 1)
+      endif()
+      if(has_cmake_cache_default_args)
+        _ep_command_line_to_initial_cache(script_initial_cache_default "${cmake_cache_default_args}" 0)
+      endif()
+      _ep_write_initial_cache(${name} "${_ep_cache_args_script}" "${script_initial_cache_force}${script_initial_cache_default}")
+      list(APPEND cmd "-C${_ep_cache_args_script}")
+      _ep_replace_location_tags(${name} _ep_cache_args_script)
+      set(_ep_cache_args_script
+        "${_ep_cache_args_script}"
+        PARENT_SCOPE)
+    endif()
+
+    list(APPEND cmd "<SOURCE_DIR><SOURCE_SUBDIR>")
+  endif()
+
+  set("${var}" "${cmd}" PARENT_SCOPE)
+endfunction()
+
+# TODO: Make sure external projects use the proper compiler
+function(_ep_add_configure_command name)
+  ExternalProject_Get_Property(${name} binary_dir tmp_dir)
+
+  set(file_deps)
+  get_property(configure_handled_by_build TARGET ${name}
+               PROPERTY _EP_CONFIGURE_HANDLED_BY_BUILD)
+  if(NOT configure_handled_by_build)
+    # Depend on other external projects (file-level)
+    _ep_get_file_deps(file_deps ${name})
+  endif()
+
+  _ep_extract_configure_command(cmd ${name})
+
+  # If anything about the configure command changes, (command itself, cmake
+  # used, cmake args or cmake generator) then re-run the configure step.
+  # Fixes issue https://gitlab.kitware.com/cmake/cmake/-/issues/10258
+  #
+  if(NOT EXISTS ${tmp_dir}/${name}-cfgcmd.txt.in)
+    file(WRITE ${tmp_dir}/${name}-cfgcmd.txt.in "cmd='\@cmd\@'\n")
+  endif()
+  configure_file(${tmp_dir}/${name}-cfgcmd.txt.in ${tmp_dir}/${name}-cfgcmd.txt)
+  list(APPEND file_deps ${tmp_dir}/${name}-cfgcmd.txt)
+  list(APPEND file_deps ${_ep_cache_args_script})
+
+  get_property(log TARGET ${name} PROPERTY _EP_LOG_CONFIGURE)
+  if(log)
+    set(log LOG 1)
+  else()
+    set(log "")
+  endif()
+
+  get_property(uses_terminal TARGET ${name} PROPERTY
+    _EP_USES_TERMINAL_CONFIGURE)
+  if(uses_terminal)
+    set(uses_terminal USES_TERMINAL 1)
+  else()
+    set(uses_terminal "")
+  endif()
+
+  set(__cmdQuoted)
+  foreach(__item IN LISTS cmd)
+    string(APPEND __cmdQuoted " [==[${__item}]==]")
+  endforeach()
+  cmake_language(EVAL CODE "
+    ExternalProject_Add_Step(${name} configure
+      INDEPENDENT FALSE
+      COMMAND ${__cmdQuoted}
+      WORKING_DIRECTORY \${binary_dir}
+      DEPENDEES patch
+      DEPENDS \${file_deps}
+      ${log}
+      ${uses_terminal}
+      )"
+  )
+endfunction()
+
+
+function(_ep_add_build_command name)
+  ExternalProject_Get_Property(${name} binary_dir)
+
+  set(file_deps)
+  get_property(configure_handled_by_build TARGET ${name}
+               PROPERTY _EP_CONFIGURE_HANDLED_BY_BUILD)
+  if(configure_handled_by_build)
+    # Depend on other external projects (file-level)
+    _ep_get_file_deps(file_deps ${name})
+  endif()
+
+  get_property(cmd_set TARGET ${name} PROPERTY _EP_BUILD_COMMAND SET)
+  if(cmd_set)
+    get_property(cmd TARGET ${name} PROPERTY _EP_BUILD_COMMAND)
+  else()
+    _ep_get_build_command(${name} BUILD cmd)
+  endif()
+
+  get_property(log TARGET ${name} PROPERTY _EP_LOG_BUILD)
+  if(log)
+    set(log LOG 1)
+  else()
+    set(log "")
+  endif()
+
+  get_property(uses_terminal TARGET ${name} PROPERTY
+    _EP_USES_TERMINAL_BUILD)
+  if(uses_terminal)
+    set(uses_terminal USES_TERMINAL 1)
+  else()
+    set(uses_terminal "")
+  endif()
+
+  get_property(build_always TARGET ${name} PROPERTY _EP_BUILD_ALWAYS)
+  if(build_always)
+    set(always 1)
+  else()
+    set(always 0)
+  endif()
+
+  get_property(build_byproducts TARGET ${name} PROPERTY _EP_BUILD_BYPRODUCTS)
+
+  set(__cmdQuoted)
+  foreach(__item IN LISTS cmd)
+    string(APPEND __cmdQuoted " [==[${__item}]==]")
+  endforeach()
+  cmake_language(EVAL CODE "
+    ExternalProject_Add_Step(${name} build
+      INDEPENDENT FALSE
+      COMMAND ${__cmdQuoted}
+      BYPRODUCTS \${build_byproducts}
+      WORKING_DIRECTORY \${binary_dir}
+      DEPENDEES configure
+      DEPENDS \${file_deps}
+      ALWAYS \${always}
+      ${log}
+      ${uses_terminal}
+      )"
+  )
+endfunction()
+
+
+function(_ep_add_install_command name)
+  ExternalProject_Get_Property(${name} binary_dir)
+
+  get_property(cmd_set TARGET ${name} PROPERTY _EP_INSTALL_COMMAND SET)
+  if(cmd_set)
+    get_property(cmd TARGET ${name} PROPERTY _EP_INSTALL_COMMAND)
+  else()
+    _ep_get_build_command(${name} INSTALL cmd)
+  endif()
+
+  get_property(log TARGET ${name} PROPERTY _EP_LOG_INSTALL)
+  if(log)
+    set(log LOG 1)
+  else()
+    set(log "")
+  endif()
+
+  get_property(uses_terminal TARGET ${name} PROPERTY
+    _EP_USES_TERMINAL_INSTALL)
+  if(uses_terminal)
+    set(uses_terminal USES_TERMINAL 1)
+  else()
+    set(uses_terminal "")
+  endif()
+
+  set(__cmdQuoted)
+  foreach(__item IN LISTS cmd)
+    string(APPEND __cmdQuoted " [==[${__item}]==]")
+  endforeach()
+  cmake_language(EVAL CODE "
+    ExternalProject_Add_Step(${name} install
+      INDEPENDENT FALSE
+      COMMAND ${__cmdQuoted}
+      WORKING_DIRECTORY \${binary_dir}
+      DEPENDEES build
+      ${log}
+      ${uses_terminal}
+      )"
+  )
+endfunction()
+
+
+function(_ep_add_test_command name)
+  ExternalProject_Get_Property(${name} binary_dir)
+
+  get_property(before TARGET ${name} PROPERTY _EP_TEST_BEFORE_INSTALL)
+  get_property(after TARGET ${name} PROPERTY _EP_TEST_AFTER_INSTALL)
+  get_property(exclude TARGET ${name} PROPERTY _EP_TEST_EXCLUDE_FROM_MAIN)
+  get_property(cmd_set TARGET ${name} PROPERTY _EP_TEST_COMMAND SET)
+
+  # Only actually add the test step if one of the test related properties is
+  # explicitly set. (i.e. the test step is omitted unless requested...)
+  #
+  if(cmd_set OR before OR after OR exclude)
+    if(cmd_set)
+      get_property(cmd TARGET ${name} PROPERTY _EP_TEST_COMMAND)
+    else()
+      _ep_get_build_command(${name} TEST cmd)
+    endif()
+
+    if(before)
+      set(dependees_args DEPENDEES build)
+    else()
+      set(dependees_args DEPENDEES install)
+    endif()
+
+    if(exclude)
+      set(dependers_args "")
+      set(exclude_args EXCLUDE_FROM_MAIN 1)
+    else()
+      if(before)
+        set(dependers_args DEPENDERS install)
+      else()
+        set(dependers_args "")
+      endif()
+      set(exclude_args "")
+    endif()
+
+    get_property(log TARGET ${name} PROPERTY _EP_LOG_TEST)
+    if(log)
+      set(log LOG 1)
+    else()
+      set(log "")
+    endif()
+
+    get_property(uses_terminal TARGET ${name} PROPERTY
+      _EP_USES_TERMINAL_TEST)
+    if(uses_terminal)
+      set(uses_terminal USES_TERMINAL 1)
+    else()
+      set(uses_terminal "")
+    endif()
+
+    set(__cmdQuoted)
+    foreach(__item IN LISTS cmd)
+      string(APPEND __cmdQuoted " [==[${__item}]==]")
+    endforeach()
+    cmake_language(EVAL CODE "
+      ExternalProject_Add_Step(${name} test
+        INDEPENDENT FALSE
+        COMMAND ${__cmdQuoted}
+        WORKING_DIRECTORY \${binary_dir}
+        ${dependees_args}
+        ${dependers_args}
+        ${exclude_args}
+        ${log}
+        ${uses_terminal}
+        )"
+    )
+  endif()
+endfunction()
+
+
+function(ExternalProject_Add name)
+  cmake_policy(GET CMP0097 _EP_CMP0097
+    PARENT_SCOPE # undocumented, do not use outside of CMake
+    )
+  cmake_policy(GET CMP0114 cmp0114
+    PARENT_SCOPE # undocumented, do not use outside of CMake
+    )
+  if(CMAKE_XCODE_BUILD_SYSTEM VERSION_GREATER_EQUAL 12 AND NOT cmp0114 STREQUAL "NEW")
+    message(AUTHOR_WARNING
+      "Policy CMP0114 is not set to NEW.  "
+      "In order to support the Xcode \"new build system\", "
+      "this project must be updated to set policy CMP0114 to NEW."
+      "\n"
+      "Since CMake is generating for the Xcode \"new build system\", "
+      "ExternalProject_Add will use policy CMP0114's NEW behavior anyway, "
+      "but the generated build system may not match what the project intends."
+      )
+    set(cmp0114 "NEW")
+  endif()
+
+  _ep_get_configuration_subdir_suffix(cfgdir)
+
+  # Add a custom target for the external project.
+  set(cmf_dir ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles)
+  _ep_get_complete_stampfile(${name} complete_stamp_file)
+
+  cmake_policy(PUSH)
+  if(cmp0114 STREQUAL "NEW")
+    # To implement CMP0114 NEW behavior with Makefile generators,
+    # we need CMP0113 NEW behavior.
+    cmake_policy(SET CMP0113 NEW)
+  endif()
+  # The "ALL" option to add_custom_target just tells it to not set the
+  # EXCLUDE_FROM_ALL target property. Later, if the EXCLUDE_FROM_ALL
+  # argument was passed, we explicitly set it for the target.
+  add_custom_target(${name} ALL DEPENDS ${complete_stamp_file})
+  cmake_policy(POP)
+  set_property(TARGET ${name} PROPERTY _EP_IS_EXTERNAL_PROJECT 1)
+  set_property(TARGET ${name} PROPERTY LABELS ${name})
+  set_property(TARGET ${name} PROPERTY FOLDER "ExternalProjectTargets/${name}")
+
+  set_property(TARGET ${name} PROPERTY _EP_CMP0114 "${cmp0114}")
+
+  set(keywords
+    #
+    # Directory options
+    #
+    PREFIX
+    TMP_DIR
+    STAMP_DIR
+    LOG_DIR
+    DOWNLOAD_DIR
+    SOURCE_DIR
+    BINARY_DIR
+    INSTALL_DIR
+    #
+    # Download step options
+    #
+    DOWNLOAD_COMMAND
+    #
+    URL
+    URL_HASH
+    URL_MD5
+    DOWNLOAD_NAME
+    DOWNLOAD_NO_EXTRACT
+    DOWNLOAD_NO_PROGRESS
+    TIMEOUT
+    INACTIVITY_TIMEOUT
+    HTTP_USERNAME
+    HTTP_PASSWORD
+    HTTP_HEADER
+    TLS_VERIFY     # Also used for git clone operations
+    TLS_CAINFO
+    NETRC
+    NETRC_FILE
+    #
+    GIT_REPOSITORY
+    GIT_TAG
+    GIT_REMOTE_NAME
+    GIT_SUBMODULES
+    GIT_SUBMODULES_RECURSE
+    GIT_SHALLOW
+    GIT_PROGRESS
+    GIT_CONFIG
+    GIT_REMOTE_UPDATE_STRATEGY
+    #
+    SVN_REPOSITORY
+    SVN_REVISION
+    SVN_USERNAME
+    SVN_PASSWORD
+    SVN_TRUST_CERT
+    #
+    HG_REPOSITORY
+    HG_TAG
+    #
+    CVS_REPOSITORY
+    CVS_MODULE
+    CVS_TAG
+    #
+    # Update step options
+    #
+    UPDATE_COMMAND
+    UPDATE_DISCONNECTED
+    #
+    # Patch step options
+    #
+    PATCH_COMMAND
+    #
+    # Configure step options
+    #
+    CONFIGURE_COMMAND
+    CMAKE_COMMAND
+    CMAKE_GENERATOR
+    CMAKE_GENERATOR_PLATFORM
+    CMAKE_GENERATOR_TOOLSET
+    CMAKE_GENERATOR_INSTANCE
+    CMAKE_ARGS
+    CMAKE_CACHE_ARGS
+    CMAKE_CACHE_DEFAULT_ARGS
+    SOURCE_SUBDIR
+    CONFIGURE_HANDLED_BY_BUILD
+    #
+    # Build step options
+    #
+    BUILD_COMMAND
+    BUILD_IN_SOURCE
+    BUILD_ALWAYS
+    BUILD_BYPRODUCTS
+    #
+    # Install step options
+    #
+    INSTALL_COMMAND
+    #
+    # Test step options
+    #
+    TEST_COMMAND
+    TEST_BEFORE_INSTALL
+    TEST_AFTER_INSTALL
+    TEST_EXCLUDE_FROM_MAIN
+    #
+    # Logging options
+    #
+    LOG_DOWNLOAD
+    LOG_UPDATE
+    LOG_PATCH
+    LOG_CONFIGURE
+    LOG_BUILD
+    LOG_INSTALL
+    LOG_TEST
+    LOG_MERGED_STDOUTERR
+    LOG_OUTPUT_ON_FAILURE
+    #
+    # Terminal access options
+    #
+    USES_TERMINAL_DOWNLOAD
+    USES_TERMINAL_UPDATE
+    USES_TERMINAL_CONFIGURE
+    USES_TERMINAL_BUILD
+    USES_TERMINAL_INSTALL
+    USES_TERMINAL_TEST
+    #
+    # Target options
+    #
+    DEPENDS
+    EXCLUDE_FROM_ALL
+    STEP_TARGETS
+    INDEPENDENT_STEP_TARGETS
+    #
+    # Miscellaneous options
+    #
+    LIST_SEPARATOR
+  )
+  _ep_parse_arguments(ExternalProject_Add "${keywords}" ${name} _EP_ "${ARGN}")
+  _ep_set_directories(${name})
+  _ep_get_step_stampfile(${name} "done" done_stamp_file)
+  _ep_get_step_stampfile(${name} "install" install_stamp_file)
+
+  # Set the EXCLUDE_FROM_ALL target property if required.
+  get_property(exclude_from_all TARGET ${name} PROPERTY _EP_EXCLUDE_FROM_ALL)
+  if(exclude_from_all)
+    set_property(TARGET ${name} PROPERTY EXCLUDE_FROM_ALL TRUE)
+  endif()
+
+  # The 'complete' step depends on all other steps and creates a
+  # 'done' mark.  A dependent external project's 'configure' step
+  # depends on the 'done' mark so that it rebuilds when this project
+  # rebuilds.  It is important that 'done' is not the output of any
+  # custom command so that CMake does not propagate build rules to
+  # other external project targets, which may cause problems during
+  # parallel builds.  However, the Ninja generator needs to see the entire
+  # dependency graph, and can cope with custom commands belonging to
+  # multiple targets, so we add the 'done' mark as an output for Ninja only.
+  set(complete_outputs ${complete_stamp_file})
+  if(${CMAKE_GENERATOR} MATCHES "Ninja")
+    set(complete_outputs ${complete_outputs} ${done_stamp_file})
+  endif()
+
+  add_custom_command(
+    OUTPUT ${complete_outputs}
+    COMMENT "Completed '${name}'"
+    COMMAND ${CMAKE_COMMAND} -E make_directory ${cmf_dir}${cfgdir}
+    COMMAND ${CMAKE_COMMAND} -E touch ${complete_stamp_file}
+    COMMAND ${CMAKE_COMMAND} -E touch ${done_stamp_file}
+    DEPENDS ${install_stamp_file}
+    VERBATIM
+    )
+
+
+  # Depend on other external projects (target-level).
+  get_property(deps TARGET ${name} PROPERTY _EP_DEPENDS)
+  foreach(arg IN LISTS deps)
+    add_dependencies(${name} ${arg})
+  endforeach()
+
+  # Set up custom build steps based on the target properties.
+  # Each step depends on the previous one.
+  #
+  # The target depends on the output of the final step.
+  # (Already set up above in the DEPENDS of the add_custom_target command.)
+  #
+  _ep_add_mkdir_command(${name})
+  _ep_add_download_command(${name})
+  _ep_add_update_command(${name})
+  _ep_add_patch_command(${name})
+  _ep_add_configure_command(${name})
+  _ep_add_build_command(${name})
+  _ep_add_install_command(${name})
+
+  # Test is special in that it might depend on build, or it might depend
+  # on install.
+  #
+  _ep_add_test_command(${name})
+endfunction()
+
+cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/FLTKCompatibility.cmake b/share/cmake-3.22/Modules/FLTKCompatibility.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FLTKCompatibility.cmake
rename to share/cmake-3.22/Modules/FLTKCompatibility.cmake
diff --git a/share/cmake-3.22/Modules/FeatureSummary.cmake b/share/cmake-3.22/Modules/FeatureSummary.cmake
new file mode 100644
index 0000000..77c66d1
--- /dev/null
+++ b/share/cmake-3.22/Modules/FeatureSummary.cmake
@@ -0,0 +1,749 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FeatureSummary
+--------------
+
+Functions for generating a summary of enabled/disabled features.
+
+These functions can be used to generate a summary of enabled and disabled
+packages and/or feature for a build tree such as::
+
+    -- The following OPTIONAL packages have been found:
+    LibXml2 (required version >= 2.4), XML processing lib, <http://xmlsoft.org>
+       * Enables HTML-import in MyWordProcessor
+       * Enables odt-export in MyWordProcessor
+    PNG, A PNG image library., <http://www.libpng.org/pub/png/>
+       * Enables saving screenshots
+    -- The following OPTIONAL packages have not been found:
+    Lua51, The Lua scripting language., <http://www.lua.org>
+       * Enables macros in MyWordProcessor
+    Foo, Foo provides cool stuff.
+
+Global Properties
+^^^^^^^^^^^^^^^^^
+
+.. variable:: FeatureSummary_PKG_TYPES
+
+The global property :variable:`FeatureSummary_PKG_TYPES` defines the type of
+packages used by `FeatureSummary`.
+
+The order in this list is important, the first package type in the list is the
+least important, the last is the most important. the of a package can only be
+changed to higher types.
+
+The default package types are , ``RUNTIME``, ``OPTIONAL``, ``RECOMMENDED`` and
+``REQUIRED``, and their importance is
+``RUNTIME < OPTIONAL < RECOMMENDED < REQUIRED``.
+
+
+.. variable:: FeatureSummary_REQUIRED_PKG_TYPES
+
+The global property :variable:`FeatureSummary_REQUIRED_PKG_TYPES` defines which
+package types are required.
+
+If one or more package in this categories has not been found, CMake will abort
+when calling :command:`feature_summary` with the
+'FATAL_ON_MISSING_REQUIRED_PACKAGES' option enabled.
+
+The default value for this global property is ``REQUIRED``.
+
+
+.. variable:: FeatureSummary_DEFAULT_PKG_TYPE
+
+The global property :variable:`FeatureSummary_DEFAULT_PKG_TYPE` defines which
+package type is the default one.
+When calling :command:`feature_summary`, if the user did not set the package type
+explicitly, the package will be assigned to this category.
+
+This value must be one of the types defined in the
+:variable:`FeatureSummary_PKG_TYPES` global property unless the package type
+is set for all the packages.
+
+The default value for this global property is ``OPTIONAL``.
+
+
+.. variable:: FeatureSummary_<TYPE>_DESCRIPTION
+
+.. versionadded:: 3.9
+
+The global property :variable:`FeatureSummary_<TYPE>_DESCRIPTION` can be defined
+for each type to replace the type name with the specified string whenever the
+package type is used in an output string.
+
+If not set, the string "``<TYPE>`` packages" is used.
+
+
+#]=======================================================================]
+
+get_property(_fsPkgTypeIsSet GLOBAL PROPERTY FeatureSummary_PKG_TYPES SET)
+if(NOT _fsPkgTypeIsSet)
+  set_property(GLOBAL PROPERTY FeatureSummary_PKG_TYPES RUNTIME OPTIONAL RECOMMENDED REQUIRED)
+endif()
+
+get_property(_fsReqPkgTypesIsSet GLOBAL PROPERTY FeatureSummary_REQUIRED_PKG_TYPES SET)
+if(NOT _fsReqPkgTypesIsSet)
+  set_property(GLOBAL PROPERTY FeatureSummary_REQUIRED_PKG_TYPES REQUIRED)
+endif()
+
+get_property(_fsDefaultPkgTypeIsSet GLOBAL PROPERTY FeatureSummary_DEFAULT_PKG_TYPE SET)
+if(NOT _fsDefaultPkgTypeIsSet)
+  set_property(GLOBAL PROPERTY FeatureSummary_DEFAULT_PKG_TYPE OPTIONAL)
+endif()
+
+#[=======================================================================[.rst:
+
+Functions
+^^^^^^^^^
+
+#]=======================================================================]
+
+function(_FS_GET_FEATURE_SUMMARY _property _var _includeQuiet)
+
+  get_property(_fsPkgTypes GLOBAL PROPERTY FeatureSummary_PKG_TYPES)
+  get_property(_fsDefaultPkgType GLOBAL PROPERTY FeatureSummary_DEFAULT_PKG_TYPE)
+
+  set(_type "ANY")
+  foreach(_fsPkgType ${_fsPkgTypes})
+    if("${_property}" MATCHES "${_fsPkgType}_PACKAGES_(NOT_)?FOUND")
+      set(_type "${_fsPkgType}")
+      break()
+    endif()
+  endforeach()
+
+  if("${_property}" MATCHES "PACKAGES_FOUND")
+    set(_property "PACKAGES_FOUND")
+  elseif("${_property}" MATCHES "PACKAGES_NOT_FOUND")
+    set(_property "PACKAGES_NOT_FOUND")
+  endif()
+
+
+  set(_currentFeatureText "")
+  get_property(_EnabledFeatures  GLOBAL PROPERTY ${_property})
+  if(_EnabledFeatures)
+    list(REMOVE_DUPLICATES _EnabledFeatures)
+  endif(_EnabledFeatures)
+
+  foreach(_currentFeature ${_EnabledFeatures})
+
+    # does this package belong to the type we currently want to list ?
+    get_property(_currentType  GLOBAL PROPERTY _CMAKE_${_currentFeature}_TYPE)
+    if(NOT _currentType)
+      list(FIND _fsPkgTypes "${_fsDefaultPkgType}" _defaultInPkgTypes)
+      if("${_defaultInPkgTypes}" STREQUAL "-1")
+        string(REGEX REPLACE ";([^;]+)$" " and \\1" _fsPkgTypes_msg "${_fsPkgTypes}")
+        string(REPLACE ";" ", " _fsPkgTypes_msg "${_fsPkgTypes_msg}")
+        message(FATAL_ERROR "Bad package property type ${_fsDefaultPkgType} used in global property FeatureSummary_DEFAULT_PKG_TYPE. "
+                            "Valid types are ${_fsPkgTypes_msg}. "
+                            "Either update FeatureSummary_DEFAULT_PKG_TYPE or add ${_fsDefaultPkgType} to the FeatureSummary_PKG_TYPES global property.")
+      endif()
+      set(_currentType ${_fsDefaultPkgType})
+    endif()
+
+    if("${_type}" STREQUAL ANY  OR  "${_type}" STREQUAL "${_currentType}")
+      # check whether the current feature/package should be in the output depending on whether it was QUIET or not
+      set(includeThisOne TRUE)
+      set(_required FALSE)
+      # skip QUIET packages, except if they are REQUIRED or INCLUDE_QUIET_PACKAGES has been set
+      get_property(_fsReqPkgTypes GLOBAL PROPERTY FeatureSummary_REQUIRED_PKG_TYPES)
+      foreach(_fsReqPkgType ${_fsReqPkgTypes})
+        if("${_currentType}" STREQUAL "${_fsReqPkgType}")
+          set(_required TRUE)
+          break()
+        endif()
+      endforeach()
+      if(NOT _required AND NOT _includeQuiet)
+        get_property(_isQuiet  GLOBAL PROPERTY _CMAKE_${_currentFeature}_QUIET)
+        if(_isQuiet)
+          set(includeThisOne FALSE)
+        endif()
+      endif()
+      get_property(_isTransitiveDepend
+        GLOBAL PROPERTY _CMAKE_${_currentFeature}_TRANSITIVE_DEPENDENCY
+      )
+      if(_isTransitiveDepend)
+        set(includeThisOne FALSE)
+      endif()
+
+      if(includeThisOne)
+
+        string(APPEND _currentFeatureText "\n * ${_currentFeature}")
+        get_property(_info  GLOBAL PROPERTY _CMAKE_${_currentFeature}_REQUIRED_VERSION)
+        if(_info)
+          string(APPEND _currentFeatureText " (required version ${_info})")
+        endif()
+        get_property(_info  GLOBAL PROPERTY _CMAKE_${_currentFeature}_DESCRIPTION)
+        if(_info)
+          string(APPEND _currentFeatureText ", ${_info}")
+        endif()
+        get_property(_info  GLOBAL PROPERTY _CMAKE_${_currentFeature}_URL)
+        if(_info)
+          string(APPEND _currentFeatureText ", <${_info}>")
+        endif()
+
+        get_property(_info  GLOBAL PROPERTY _CMAKE_${_currentFeature}_PURPOSE)
+        foreach(_purpose ${_info})
+          string(APPEND _currentFeatureText "\n   ${_purpose}")
+        endforeach()
+
+      endif()
+
+    endif()
+
+  endforeach()
+  set(${_var} "${_currentFeatureText}" PARENT_SCOPE)
+endfunction()
+
+
+#[=======================================================================[.rst:
+.. command:: feature_summary
+
+  ::
+
+    feature_summary( [FILENAME <file>]
+                     [APPEND]
+                     [VAR <variable_name>]
+                     [INCLUDE_QUIET_PACKAGES]
+                     [FATAL_ON_MISSING_REQUIRED_PACKAGES]
+                     [DESCRIPTION "<description>" | DEFAULT_DESCRIPTION]
+                     [QUIET_ON_EMPTY]
+                     WHAT (ALL
+                          | PACKAGES_FOUND | PACKAGES_NOT_FOUND
+                          | <TYPE>_PACKAGES_FOUND | <TYPE>_PACKAGES_NOT_FOUND
+                          | ENABLED_FEATURES | DISABLED_FEATURES)
+                   )
+
+  The ``feature_summary()`` macro can be used to print information about
+  enabled or disabled packages or features of a project.  By default,
+  only the names of the features/packages will be printed and their
+  required version when one was specified.  Use ``set_package_properties()``
+  to add more useful information, like e.g.  a download URL for the
+  respective package or their purpose in the project.
+
+  The ``WHAT`` option is the only mandatory option.  Here you specify what
+  information will be printed:
+
+  ``ALL``
+   print everything
+  ``ENABLED_FEATURES``
+   the list of all features which are enabled
+  ``DISABLED_FEATURES``
+   the list of all features which are disabled
+  ``PACKAGES_FOUND``
+   the list of all packages which have been found
+  ``PACKAGES_NOT_FOUND``
+   the list of all packages which have not been found
+
+  For each package type ``<TYPE>`` defined by the
+  :variable:`FeatureSummary_PKG_TYPES` global property, the following
+  information can also be used:
+
+  ``<TYPE>_PACKAGES_FOUND``
+   only those packages which have been found which have the type <TYPE>
+  ``<TYPE>_PACKAGES_NOT_FOUND``
+   only those packages which have not been found which have the type <TYPE>
+
+  .. versionchanged:: 3.1
+    With the exception of the ``ALL`` value, these values can be combined
+    in order to customize the output. For example:
+
+    .. code-block:: cmake
+
+      feature_summary(WHAT ENABLED_FEATURES DISABLED_FEATURES)
+
+  If a ``FILENAME`` is given, the information is printed into this file.  If
+  ``APPEND`` is used, it is appended to this file, otherwise the file is
+  overwritten if it already existed.  If the VAR option is used, the
+  information is "printed" into the specified variable.  If ``FILENAME`` is
+  not used, the information is printed to the terminal.  Using the
+  ``DESCRIPTION`` option a description or headline can be set which will be
+  printed above the actual content.  If only one type of
+  package was requested, no title is printed, unless it is explicitly set using
+  either ``DESCRIPTION`` to use a custom string, or ``DEFAULT_DESCRIPTION`` to
+  use a default title for the requested type.
+  If ``INCLUDE_QUIET_PACKAGES`` is given, packages which have been searched with
+  ``find_package(... QUIET)`` will also be listed. By default they are skipped.
+  If ``FATAL_ON_MISSING_REQUIRED_PACKAGES`` is given, CMake will abort if a
+  package which is marked as one of the package types listed in the
+  :variable:`FeatureSummary_REQUIRED_PKG_TYPES` global property has not been
+  found.
+  The default value for the :variable:`FeatureSummary_REQUIRED_PKG_TYPES` global
+  property is ``REQUIRED``.
+
+  .. versionadded:: 3.9
+    The ``DEFAULT_DESCRIPTION`` option.
+
+  The :variable:`FeatureSummary_DEFAULT_PKG_TYPE` global property can be
+  modified to change the default package type assigned when not explicitly
+  assigned by the user.
+
+  .. versionadded:: 3.8
+    If the ``QUIET_ON_EMPTY`` option is used, if only one type of package was
+    requested, and no packages belonging to that category were found, then no
+    output (including the ``DESCRIPTION``) is printed or added to the ``VAR``
+    variable.
+
+  Example 1, append everything to a file:
+
+  .. code-block:: cmake
+
+   include(FeatureSummary)
+   feature_summary(WHAT ALL
+                   FILENAME ${CMAKE_BINARY_DIR}/all.log APPEND)
+
+  Example 2, print the enabled features into the variable
+  enabledFeaturesText, including QUIET packages:
+
+  .. code-block:: cmake
+
+   include(FeatureSummary)
+   feature_summary(WHAT ENABLED_FEATURES
+                   INCLUDE_QUIET_PACKAGES
+                   DESCRIPTION "Enabled Features:"
+                   VAR enabledFeaturesText)
+   message(STATUS "${enabledFeaturesText}")
+
+  Example 3, change default package types and print only the categories that
+  are not empty:
+
+  .. code-block:: cmake
+
+   include(FeatureSummary)
+   set_property(GLOBAL APPEND PROPERTY FeatureSummary_PKG_TYPES BUILD)
+   find_package(FOO)
+   set_package_properties(FOO PROPERTIES TYPE BUILD)
+   feature_summary(WHAT BUILD_PACKAGES_FOUND
+                   Description "Build tools found:"
+                   QUIET_ON_EMPTY)
+   feature_summary(WHAT BUILD_PACKAGES_NOT_FOUND
+                   Description "Build tools not found:"
+                   QUIET_ON_EMPTY)
+
+#]=======================================================================]
+
+function(FEATURE_SUMMARY)
+# CMAKE_PARSE_ARGUMENTS(<prefix> <options> <one_value_keywords> <multi_value_keywords> args...)
+  set(options APPEND
+              INCLUDE_QUIET_PACKAGES
+              FATAL_ON_MISSING_REQUIRED_PACKAGES
+              QUIET_ON_EMPTY
+              DEFAULT_DESCRIPTION)
+  set(oneValueArgs FILENAME
+                   VAR
+                   DESCRIPTION)
+  set(multiValueArgs WHAT)
+
+  CMAKE_PARSE_ARGUMENTS(_FS "${options}" "${oneValueArgs}" "${multiValueArgs}"  ${_FIRST_ARG} ${ARGN})
+
+  if(_FS_UNPARSED_ARGUMENTS)
+    message(FATAL_ERROR "Unknown keywords given to FEATURE_SUMMARY(): \"${_FS_UNPARSED_ARGUMENTS}\"")
+  endif()
+
+  if(NOT _FS_WHAT)
+    message(FATAL_ERROR "The call to FEATURE_SUMMARY() doesn't set the required WHAT argument.")
+  endif()
+
+  if(_FS_DEFAULT_DESCRIPTION AND DEFINED _FS_DESCRIPTION)
+    message(WARNING "DEFAULT_DESCRIPTION option discarded since DESCRIPTION is set.")
+    set(_FS_DEFAULT_DESCRIPTION 0)
+  endif()
+
+  set(validWhatParts "ENABLED_FEATURES"
+                     "DISABLED_FEATURES"
+                     "PACKAGES_FOUND"
+                     "PACKAGES_NOT_FOUND")
+
+  get_property(_fsPkgTypes GLOBAL PROPERTY FeatureSummary_PKG_TYPES)
+  get_property(_fsReqPkgTypes GLOBAL PROPERTY FeatureSummary_REQUIRED_PKG_TYPES)
+  foreach(_fsPkgType ${_fsPkgTypes})
+    list(APPEND validWhatParts "${_fsPkgType}_PACKAGES_FOUND"
+                               "${_fsPkgType}_PACKAGES_NOT_FOUND")
+  endforeach()
+
+  set(title_ENABLED_FEATURES               "The following features have been enabled:")
+  set(title_DISABLED_FEATURES              "The following features have been disabled:")
+  set(title_PACKAGES_FOUND                 "The following packages have been found:")
+  set(title_PACKAGES_NOT_FOUND             "The following packages have not been found:")
+  foreach(_fsPkgType ${_fsPkgTypes})
+    set(_fsPkgTypeDescription "${_fsPkgType} packages")
+    get_property(_fsPkgTypeDescriptionIsSet GLOBAL PROPERTY FeatureSummary_${_fsPkgType}_DESCRIPTION SET)
+    if(_fsPkgTypeDescriptionIsSet)
+      get_property(_fsPkgTypeDescription GLOBAL PROPERTY FeatureSummary_${_fsPkgType}_DESCRIPTION )
+    endif()
+    set(title_${_fsPkgType}_PACKAGES_FOUND     "The following ${_fsPkgTypeDescription} have been found:")
+    set(title_${_fsPkgType}_PACKAGES_NOT_FOUND "The following ${_fsPkgTypeDescription} have not been found:")
+  endforeach()
+
+  list(FIND validWhatParts "${_FS_WHAT}" indexInList)
+  if(NOT "${indexInList}" STREQUAL "-1")
+    _FS_GET_FEATURE_SUMMARY( ${_FS_WHAT} _featureSummary ${_FS_INCLUDE_QUIET_PACKAGES} )
+    if(_featureSummary OR NOT _FS_QUIET_ON_EMPTY)
+      if(_FS_DEFAULT_DESCRIPTION)
+        set(_fullText "${title_${_FS_WHAT}}\n${_featureSummary}\n")
+      else()
+        set(_fullText "${_FS_DESCRIPTION}${_featureSummary}\n")
+      endif()
+    endif()
+
+    if(_featureSummary)
+      foreach(_fsReqPkgType ${_fsReqPkgTypes})
+        if("${_FS_WHAT}" STREQUAL "${_fsReqPkgType}_PACKAGES_NOT_FOUND")
+          set(requiredPackagesNotFound TRUE)
+          break()
+        endif()
+      endforeach()
+    endif()
+
+  else()
+    if("${_FS_WHAT}" STREQUAL "ALL")
+
+      set(allWhatParts "ENABLED_FEATURES")
+      foreach(_fsPkgType ${_fsPkgTypes})
+        list(APPEND allWhatParts "${_fsPkgType}_PACKAGES_FOUND")
+      endforeach()
+      list(APPEND allWhatParts "DISABLED_FEATURES")
+      foreach(_fsPkgType ${_fsPkgTypes})
+        list(APPEND allWhatParts "${_fsPkgType}_PACKAGES_NOT_FOUND")
+      endforeach()
+    else()
+      set(allWhatParts)
+      foreach(part ${_FS_WHAT})
+        list(FIND validWhatParts "${part}" indexInList)
+        if(NOT "${indexInList}" STREQUAL "-1")
+          list(APPEND allWhatParts "${part}")
+        else()
+          if("${part}" STREQUAL "ALL")
+            message(FATAL_ERROR "The WHAT argument of FEATURE_SUMMARY() contains ALL, which cannot be combined with other values.")
+          else()
+            message(FATAL_ERROR "The WHAT argument of FEATURE_SUMMARY() contains ${part}, which is not a valid value.")
+          endif()
+        endif()
+      endforeach()
+    endif()
+
+    set(_fullText "${_FS_DESCRIPTION}")
+    foreach(part ${allWhatParts})
+      set(_tmp)
+      _FS_GET_FEATURE_SUMMARY( ${part} _tmp ${_FS_INCLUDE_QUIET_PACKAGES})
+      if(_tmp)
+        if(_fullText)
+          string(APPEND _fullText "\n-- ")
+        endif()
+        string(APPEND _fullText "${title_${part}}\n${_tmp}\n")
+        foreach(_fsReqPkgType ${_fsReqPkgTypes})
+          if("${part}" STREQUAL "${_fsReqPkgType}_PACKAGES_NOT_FOUND")
+            set(requiredPackagesNotFound TRUE)
+            break()
+          endif()
+        endforeach()
+      endif()
+    endforeach()
+  endif()
+
+  if(_fullText OR NOT _FS_QUIET_ON_EMPTY)
+    if(_FS_FILENAME)
+      if(_FS_APPEND)
+        file(APPEND "${_FS_FILENAME}" "${_fullText}")
+      else()
+        file(WRITE  "${_FS_FILENAME}" "${_fullText}")
+      endif()
+
+    else()
+      if(NOT _FS_VAR)
+        message(STATUS "${_fullText}")
+      endif()
+    endif()
+
+    if(_FS_VAR)
+      set(${_FS_VAR} "${_fullText}" PARENT_SCOPE)
+    endif()
+  endif()
+
+  if(requiredPackagesNotFound  AND  _FS_FATAL_ON_MISSING_REQUIRED_PACKAGES)
+    message(FATAL_ERROR "feature_summary() Error: REQUIRED package(s) are missing, aborting CMake run.")
+  endif()
+
+endfunction()
+
+#[=======================================================================[.rst:
+.. command:: set_package_properties
+
+  ::
+
+    set_package_properties(<name> PROPERTIES
+                           [ URL <url> ]
+                           [ DESCRIPTION <description> ]
+                           [ TYPE (RUNTIME|OPTIONAL|RECOMMENDED|REQUIRED) ]
+                           [ PURPOSE <purpose> ]
+                          )
+
+  Use this macro to set up information about the named package, which
+  can then be displayed via FEATURE_SUMMARY().  This can be done either
+  directly in the Find-module or in the project which uses the module
+  after the find_package() call.  The features for which information can
+  be set are added automatically by the find_package() command.
+
+  ``URL <url>``
+    This should be the homepage of the package, or something similar.
+    Ideally this is set already directly in the Find-module.
+
+  ``DESCRIPTION <description>``
+    A short description what that package is, at most one sentence.
+    Ideally this is set already directly in the Find-module.
+
+  ``TYPE <type>``
+    What type of dependency has the using project on that package.
+    Default is ``OPTIONAL``.  In this case it is a package which can be used
+    by the project when available at buildtime, but it also work without.
+    ``RECOMMENDED`` is similar to ``OPTIONAL``, i.e.  the project will build if
+    the package is not present, but the functionality of the resulting
+    binaries will be severely limited.  If a ``REQUIRED`` package is not
+    available at buildtime, the project may not even build.  This can be
+    combined with the ``FATAL_ON_MISSING_REQUIRED_PACKAGES`` argument for
+    ``feature_summary()``.  Last, a ``RUNTIME`` package is a package which is
+    actually not used at all during the build, but which is required for
+    actually running the resulting binaries.  So if such a package is
+    missing, the project can still be built, but it may not work later on.
+    If ``set_package_properties()`` is called multiple times for the same
+    package with different TYPEs, the ``TYPE`` is only changed to higher
+    TYPEs (``RUNTIME < OPTIONAL < RECOMMENDED < REQUIRED``), lower TYPEs are
+    ignored.  The ``TYPE`` property is project-specific, so it cannot be set
+    by the Find-module, but must be set in the project.
+    Type accepted can be changed by setting the
+    :variable:`FeatureSummary_PKG_TYPES` global property.
+
+  ``PURPOSE <purpose>``
+    This describes which features this package enables in the
+    project, i.e.  it tells the user what functionality he gets in the
+    resulting binaries.  If set_package_properties() is called multiple
+    times for a package, all PURPOSE properties are appended to a list of
+    purposes of the package in the project.  As the TYPE property, also
+    the PURPOSE property is project-specific, so it cannot be set by the
+    Find-module, but must be set in the project.
+
+  Example for setting the info for a package:
+
+  .. code-block:: cmake
+
+    find_package(LibXml2)
+    set_package_properties(LibXml2 PROPERTIES
+                           DESCRIPTION "A XML processing library."
+                           URL "http://xmlsoft.org/")
+    # or
+    set_package_properties(LibXml2 PROPERTIES
+                           TYPE RECOMMENDED
+                           PURPOSE "Enables HTML-import in MyWordProcessor")
+    # or
+    set_package_properties(LibXml2 PROPERTIES
+                           TYPE OPTIONAL
+                           PURPOSE "Enables odt-export in MyWordProcessor")
+
+    find_package(DBUS)
+    set_package_properties(DBUS PROPERTIES
+      TYPE RUNTIME
+      PURPOSE "Necessary to disable the screensaver during a presentation")
+#]=======================================================================]
+function(SET_PACKAGE_PROPERTIES _name _props)
+  if(NOT "${_props}" STREQUAL "PROPERTIES")
+    message(FATAL_ERROR "PROPERTIES keyword is missing in SET_PACKAGE_PROPERTIES() call.")
+  endif()
+
+  set(options ) # none
+  set(oneValueArgs DESCRIPTION URL TYPE PURPOSE )
+  set(multiValueArgs ) # none
+
+  CMAKE_PARSE_ARGUMENTS(_SPP "${options}" "${oneValueArgs}" "${multiValueArgs}"  ${ARGN})
+
+  if(_SPP_UNPARSED_ARGUMENTS)
+    message(FATAL_ERROR "Unknown keywords given to SET_PACKAGE_PROPERTIES(): \"${_SPP_UNPARSED_ARGUMENTS}\"")
+  endif()
+
+  if(_SPP_DESCRIPTION)
+    get_property(_info  GLOBAL PROPERTY _CMAKE_${_name}_DESCRIPTION)
+    if(_info AND NOT "${_info}" STREQUAL "${_SPP_DESCRIPTION}")
+      message(STATUS "Warning: Property DESCRIPTION for package ${_name} already set to \"${_info}\", overriding it with \"${_SPP_DESCRIPTION}\"")
+    endif()
+
+    set_property(GLOBAL PROPERTY _CMAKE_${_name}_DESCRIPTION "${_SPP_DESCRIPTION}" )
+  endif()
+
+
+  if(_SPP_URL)
+    get_property(_info  GLOBAL PROPERTY _CMAKE_${_name}_URL)
+    if(_info AND NOT "${_info}" STREQUAL "${_SPP_URL}")
+      message(STATUS "Warning: Property URL already set to \"${_info}\", overriding it with \"${_SPP_URL}\"")
+    endif()
+
+    set_property(GLOBAL PROPERTY _CMAKE_${_name}_URL "${_SPP_URL}" )
+  endif()
+
+
+  # handle the PURPOSE: use APPEND, since there can be multiple purposes for one package inside a project
+  if(_SPP_PURPOSE)
+    set_property(GLOBAL APPEND PROPERTY _CMAKE_${_name}_PURPOSE "${_SPP_PURPOSE}" )
+  endif()
+
+  get_property(_fsPkgTypes GLOBAL PROPERTY FeatureSummary_PKG_TYPES)
+  get_property(_fsDefaultPkgType GLOBAL PROPERTY FeatureSummary_DEFAULT_PKG_TYPE)
+
+  # handle the TYPE
+  if(DEFINED _SPP_TYPE)
+    # Supported types are listed in FeatureSummary_PKG_TYPES according to their priority
+    get_property(_fsPkgTypes GLOBAL PROPERTY FeatureSummary_PKG_TYPES)
+    list(FIND _fsPkgTypes ${_SPP_TYPE} _typeIndexInList)
+    if("${_typeIndexInList}" STREQUAL "-1" )
+      string(REGEX REPLACE ";([^;]+)$" " and \\1" _fsPkgTypes_msg "${_fsPkgTypes}")
+      string(REPLACE ";" ", " _fsPkgTypes_msg "${_fsPkgTypes_msg}")
+      message(FATAL_ERROR "Bad package property type ${_SPP_TYPE} used in SET_PACKAGE_PROPERTIES(). "
+                          "Valid types are ${_fsPkgTypes_msg}." )
+    endif()
+
+    get_property(_previousType  GLOBAL PROPERTY _CMAKE_${_name}_TYPE)
+    list(FIND _fsPkgTypes "${_previousType}" _prevTypeIndexInList)
+
+    # make sure a previously set TYPE is not overridden with a lower new TYPE:
+    if("${_typeIndexInList}" GREATER "${_prevTypeIndexInList}")
+      set_property(GLOBAL PROPERTY _CMAKE_${_name}_TYPE "${_SPP_TYPE}" )
+    endif()
+  endif()
+
+endfunction()
+
+#[=======================================================================[.rst:
+.. command:: add_feature_info
+
+  ::
+
+    add_feature_info(<name> <enabled> <description>)
+
+  Use this macro to add information about a feature with the given ``<name>``.
+  ``<enabled>`` contains whether this feature is enabled or not. It can be a
+  variable or a list of conditions.
+  ``<description>`` is a text describing the feature.  The information can
+  be displayed using ``feature_summary()`` for ``ENABLED_FEATURES`` and
+  ``DISABLED_FEATURES`` respectively.
+
+  .. versionchanged:: 3.8
+    ``<enabled>`` can be a list of conditions.
+
+  Example for setting the info for a feature:
+
+  .. code-block:: cmake
+
+     option(WITH_FOO "Help for foo" ON)
+     add_feature_info(Foo WITH_FOO "The Foo feature provides very cool stuff.")
+#]=======================================================================]
+function(ADD_FEATURE_INFO _name _depends _desc)
+  set(_enabled 1)
+  foreach(_d ${_depends})
+    string(REGEX REPLACE " +" ";" _d "${_d}")
+    if(${_d})
+    else()
+      set(_enabled 0)
+      break()
+    endif()
+  endforeach()
+  if (${_enabled})
+    set_property(GLOBAL APPEND PROPERTY ENABLED_FEATURES "${_name}")
+  else ()
+    set_property(GLOBAL APPEND PROPERTY DISABLED_FEATURES "${_name}")
+  endif ()
+
+  set_property(GLOBAL PROPERTY _CMAKE_${_name}_DESCRIPTION "${_desc}" )
+endfunction()
+
+
+# The stuff below is only kept for compatibility
+
+#[=======================================================================[.rst:
+Legacy Macros
+^^^^^^^^^^^^^
+
+The following macros are provided for compatibility with previous
+CMake versions:
+
+.. command:: set_package_info
+
+  ::
+
+    set_package_info(<name> <description> [ <url> [<purpose>] ])
+
+  Use this macro to set up information about the named package, which
+  can then be displayed via ``feature_summary()``.  This can be done either
+  directly in the Find-module or in the project which uses the module
+  after the :command:`find_package` call.  The features for which information
+  can be set are added automatically by the ``find_package()`` command.
+#]=======================================================================]
+function(SET_PACKAGE_INFO _name _desc)
+  message(DEPRECATION "SET_PACKAGE_INFO is deprecated. Use SET_PACKAGE_PROPERTIES instead.")
+  unset(_url)
+  unset(_purpose)
+  if(ARGC GREATER 2)
+    set(_url "${ARGV2}")
+  endif()
+  if(ARGC GREATER 3)
+    set(_purpose "${ARGV3}")
+  endif()
+  set_property(GLOBAL PROPERTY _CMAKE_${_name}_DESCRIPTION "${_desc}" )
+  if(NOT _url STREQUAL "")
+    set_property(GLOBAL PROPERTY _CMAKE_${_name}_URL "${_url}" )
+  endif()
+  if(NOT _purpose STREQUAL "")
+    set_property(GLOBAL APPEND PROPERTY _CMAKE_${_name}_PURPOSE "${_purpose}" )
+  endif()
+endfunction()
+
+#[=======================================================================[.rst:
+.. command:: set_feature_info
+
+  ::
+
+    set_feature_info(<name> <description> [<url>])
+
+  Does the same as::
+
+    set_package_info(<name> <description> <url>)
+#]=======================================================================]
+function(SET_FEATURE_INFO)
+  message(DEPRECATION "SET_FEATURE_INFO is deprecated. Use ADD_FEATURE_INFO instead.")
+  SET_PACKAGE_INFO(${ARGN})
+endfunction()
+
+#[=======================================================================[.rst:
+.. command:: print_enabled_features
+
+  ::
+
+    print_enabled_features()
+
+  Does the same as
+
+  .. code-block:: cmake
+
+    feature_summary(WHAT ENABLED_FEATURES DESCRIPTION "Enabled features:")
+#]=======================================================================]
+function(PRINT_ENABLED_FEATURES)
+  message(DEPRECATION "PRINT_ENABLED_FEATURES is deprecated. Use
+    feature_summary(WHAT ENABLED_FEATURES DESCRIPTION \"Enabled features:\")")
+  FEATURE_SUMMARY(WHAT ENABLED_FEATURES  DESCRIPTION "Enabled features:")
+endfunction()
+
+#[=======================================================================[.rst:
+.. command:: print_disabled_features
+
+  ::
+
+    print_disabled_features()
+
+  Does the same as
+
+  .. code-block:: cmake
+
+    feature_summary(WHAT DISABLED_FEATURES DESCRIPTION "Disabled features:")
+#]=======================================================================]
+function(PRINT_DISABLED_FEATURES)
+  message(DEPRECATION "PRINT_DISABLED_FEATURES is deprecated. Use
+    feature_summary(WHAT DISABLED_FEATURES DESCRIPTION \"Disabled features:\")")
+  FEATURE_SUMMARY(WHAT DISABLED_FEATURES  DESCRIPTION "Disabled features:")
+endfunction()
diff --git a/share/cmake-3.22/Modules/FetchContent.cmake b/share/cmake-3.22/Modules/FetchContent.cmake
new file mode 100644
index 0000000..be75689
--- /dev/null
+++ b/share/cmake-3.22/Modules/FetchContent.cmake
@@ -0,0 +1,1294 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FetchContent
+------------------
+
+.. versionadded:: 3.11
+
+.. only:: html
+
+  .. contents::
+
+Overview
+^^^^^^^^
+
+This module enables populating content at configure time via any method
+supported by the :module:`ExternalProject` module.  Whereas
+:command:`ExternalProject_Add` downloads at build time, the
+``FetchContent`` module makes content available immediately, allowing the
+configure step to use the content in commands like :command:`add_subdirectory`,
+:command:`include` or :command:`file` operations.
+
+Content population details should be defined separately from the command that
+performs the actual population.  This separation ensures that all the
+dependency details are defined before anything might try to use them to
+populate content.  This is particularly important in more complex project
+hierarchies where dependencies may be shared between multiple projects.
+
+The following shows a typical example of declaring content details for some
+dependencies and then ensuring they are populated with a separate call:
+
+.. code-block:: cmake
+
+  FetchContent_Declare(
+    googletest
+    GIT_REPOSITORY https://github.com/google/googletest.git
+    GIT_TAG        703bd9caab50b139428cea1aaff9974ebee5742e # release-1.10.0
+  )
+  FetchContent_Declare(
+    myCompanyIcons
+    URL      https://intranet.mycompany.com/assets/iconset_1.12.tar.gz
+    URL_HASH MD5=5588a7b18261c20068beabfb4f530b87
+  )
+
+  FetchContent_MakeAvailable(googletest secret_sauce)
+
+The :command:`FetchContent_MakeAvailable` command ensures the named
+dependencies have been populated, either by an earlier call or by populating
+them itself.  When performing the population, it will also add them to the
+main build, if possible, so that the main build can use the populated
+projects' targets, etc.  See the command's documentation for how these steps
+are performed.
+
+When using a hierarchical project arrangement, projects at higher levels in
+the hierarchy are able to override the declared details of content specified
+anywhere lower in the project hierarchy.  The first details to be declared
+for a given dependency take precedence, regardless of where in the project
+hierarchy that occurs.  Similarly, the first call that tries to populate a
+dependency "wins", with subsequent populations reusing the result of the
+first instead of repeating the population again.
+See the :ref:`Examples <fetch-content-examples>` which demonstrate
+this scenario.
+
+In some cases, the main project may need to have more precise control over
+the population, or it may be required to explicitly define the population
+steps in a way that cannot be captured by the declared details alone.
+For such situations, the lower level :command:`FetchContent_GetProperties` and
+:command:`FetchContent_Populate` commands can be used.  These lack the richer
+features provided by :command:`FetchContent_MakeAvailable` though, so their
+direct use should be considered a last resort.  The typical pattern of such
+custom steps looks like this:
+
+.. code-block:: cmake
+
+  # NOTE: Where possible, prefer to use FetchContent_MakeAvailable()
+  #       instead of custom logic like this
+
+  # Check if population has already been performed
+  FetchContent_GetProperties(depname)
+  if(NOT depname_POPULATED)
+    # Fetch the content using previously declared details
+    FetchContent_Populate(depname)
+
+    # Set custom variables, policies, etc.
+    # ...
+
+    # Bring the populated content into the build
+    add_subdirectory(${depname_SOURCE_DIR} ${depname_BINARY_DIR})
+  endif()
+
+The ``FetchContent`` module also supports defining and populating
+content in a single call, with no check for whether the content has been
+populated elsewhere already.  This should not be done in projects, but may
+be appropriate for populating content in CMake's script mode.
+See :command:`FetchContent_Populate` for details.
+
+Commands
+^^^^^^^^
+
+.. command:: FetchContent_Declare
+
+  .. code-block:: cmake
+
+    FetchContent_Declare(<name> <contentOptions>...)
+
+  The ``FetchContent_Declare()`` function records the options that describe
+  how to populate the specified content.  If such details have already
+  been recorded earlier in this project (regardless of where in the project
+  hierarchy), this and all later calls for the same content ``<name>`` are
+  ignored.  This "first to record, wins" approach is what allows hierarchical
+  projects to have parent projects override content details of child projects.
+
+  The content ``<name>`` can be any string without spaces, but good practice
+  would be to use only letters, numbers and underscores.  The name will be
+  treated case-insensitively and it should be obvious for the content it
+  represents, often being the name of the child project or the value given
+  to its top level :command:`project` command (if it is a CMake project).
+  For well-known public projects, the name should generally be the official
+  name of the project.  Choosing an unusual name makes it unlikely that other
+  projects needing that same content will use the same name, leading to
+  the content being populated multiple times.
+
+  The ``<contentOptions>`` can be any of the download, update or patch options
+  that the :command:`ExternalProject_Add` command understands.  The configure,
+  build, install and test steps are explicitly disabled and therefore options
+  related to them will be ignored.  The ``SOURCE_SUBDIR`` option is an
+  exception, see :command:`FetchContent_MakeAvailable` for details on how that
+  affects behavior.
+
+  In most cases, ``<contentOptions>`` will just be a couple of options defining
+  the download method and method-specific details like a commit tag or archive
+  hash.  For example:
+
+  .. code-block:: cmake
+
+    FetchContent_Declare(
+      googletest
+      GIT_REPOSITORY https://github.com/google/googletest.git
+      GIT_TAG        703bd9caab50b139428cea1aaff9974ebee5742e # release-1.10.0
+    )
+
+    FetchContent_Declare(
+      myCompanyIcons
+      URL      https://intranet.mycompany.com/assets/iconset_1.12.tar.gz
+      URL_HASH MD5=5588a7b18261c20068beabfb4f530b87
+    )
+
+    FetchContent_Declare(
+      myCompanyCertificates
+      SVN_REPOSITORY svn+ssh://svn.mycompany.com/srv/svn/trunk/certs
+      SVN_REVISION   -r12345
+    )
+
+  Where contents are being fetched from a remote location and you do not
+  control that server, it is advisable to use a hash for ``GIT_TAG`` rather
+  than a branch or tag name.  A commit hash is more secure and helps to
+  confirm that the downloaded contents are what you expected.
+
+  .. versionchanged:: 3.14
+    Commands for the download, update or patch steps can access the terminal.
+    This may be needed for things like password prompts or real-time display
+    of command progress.
+
+  .. versionadded:: 3.22
+    The :variable:`CMAKE_TLS_VERIFY`, :variable:`CMAKE_TLS_CAINFO`,
+    :variable:`CMAKE_NETRC` and :variable:`CMAKE_NETRC_FILE` variables now
+    provide the defaults for their corresponding content options, just like
+    they do for :command:`ExternalProject_Add`. Previously, these variables
+    were ignored by the ``FetchContent`` module.
+
+.. command:: FetchContent_MakeAvailable
+
+  .. versionadded:: 3.14
+
+  .. code-block:: cmake
+
+    FetchContent_MakeAvailable(<name1> [<name2>...])
+
+  This command ensures that each of the named dependencies are populated and
+  potentially added to the build by the time it returns.  It iterates over
+  the list, and for each dependency, the following logic is applied:
+
+  * If the dependency has already been populated earlier in this run, set
+    the ``<lowercaseName>_POPULATED``, ``<lowercaseName>_SOURCE_DIR`` and
+    ``<lowercaseName>_BINARY_DIR`` variables in the same way as a call to
+    :command:`FetchContent_GetProperties`, then skip the remaining steps
+    below and move on to the next dependency in the list.
+
+  * Call :command:`FetchContent_Populate` to populate the dependency using
+    the details recorded by an earlier call to :command:`FetchContent_Declare`.
+    Halt with a fatal error if no such details have been recorded.
+    :variable:`FETCHCONTENT_SOURCE_DIR_<uppercaseName>` can be used to override
+    the declared details and use content provided at the specified location
+    instead.
+
+  * If the top directory of the populated content contains a ``CMakeLists.txt``
+    file, call :command:`add_subdirectory` to add it to the main build.
+    It is not an error for there to be no ``CMakeLists.txt`` file, which
+    allows the command to be used for dependencies that make downloaded
+    content available at a known location, but which do not need or support
+    being added directly to the build.
+
+    .. versionadded:: 3.18
+      The ``SOURCE_SUBDIR`` option can be given in the declared details to
+      look somewhere below the top directory instead (i.e. the same way that
+      ``SOURCE_SUBDIR`` is used by the :command:`ExternalProject_Add`
+      command).  The path provided with ``SOURCE_SUBDIR`` must be relative
+      and will be treated as relative to the top directory.  It can also
+      point to a directory that does not contain a ``CMakeLists.txt`` file
+      or even to a directory that doesn't exist.  This can be used to avoid
+      adding a project that contains a ``CMakeLists.txt`` file in its top
+      directory.
+
+  Projects should aim to declare the details of all dependencies they might
+  use before they call ``FetchContent_MakeAvailable()`` for any of them.
+  This ensures that if any of the dependencies are also sub-dependencies of
+  one or more of the others, the main project still controls the details
+  that will be used (because it will declare them first before the
+  dependencies get a chance to).  In the following code samples, assume that
+  the ``uses_other`` dependency also uses ``FetchContent`` to add the ``other``
+  dependency internally:
+
+  .. code-block:: cmake
+
+    # WRONG: Should declare all details first
+    FetchContent_Declare(uses_other ...)
+    FetchContent_MakeAvailable(uses_other)
+
+    FetchContent_Declare(other ...)    # Will be ignored, uses_other beat us to it
+    FetchContent_MakeAvailable(other)  # Would use details declared by uses_other
+
+  .. code-block:: cmake
+
+    # CORRECT: All details declared first, so they will take priority
+    FetchContent_Declare(uses_other ...)
+    FetchContent_Declare(other ...)
+    FetchContent_MakeAvailable(uses_other other)
+
+.. command:: FetchContent_Populate
+
+  .. note::
+    Where possible, prefer to use :command:`FetchContent_MakeAvailable`
+    instead of implementing population manually with this command.
+
+  .. code-block:: cmake
+
+    FetchContent_Populate(<name>)
+
+  In most cases, the only argument given to ``FetchContent_Populate()`` is the
+  ``<name>``.  When used this way, the command assumes the content details have
+  been recorded by an earlier call to :command:`FetchContent_Declare`.  The
+  details are stored in a global property, so they are unaffected by things
+  like variable or directory scope.  Therefore, it doesn't matter where in the
+  project the details were previously declared, as long as they have been
+  declared before the call to ``FetchContent_Populate()``.  Those saved details
+  are then used to construct a call to :command:`ExternalProject_Add` in a
+  private sub-build to perform the content population immediately.  The
+  implementation of ``ExternalProject_Add()`` ensures that if the content has
+  already been populated in a previous CMake run, that content will be reused
+  rather than repopulating them again.  For the common case where population
+  involves downloading content, the cost of the download is only paid once.
+
+  An internal global property records when a particular content population
+  request has been processed.  If ``FetchContent_Populate()`` is called more
+  than once for the same content name within a configure run, the second call
+  will halt with an error.  Projects can and should check whether content
+  population has already been processed with the
+  :command:`FetchContent_GetProperties` command before calling
+  ``FetchContent_Populate()``.
+
+  ``FetchContent_Populate()`` will set three variables in the scope of the
+  caller:
+
+  ``<lowercaseName>_POPULATED``
+    This will always be set to ``TRUE`` by the call.
+
+  ``<lowercaseName>_SOURCE_DIR``
+    The location where the populated content can be found upon return.
+
+  ``<lowercaseName>_BINARY_DIR``
+    A directory intended for use as a corresponding build directory.
+
+  The main use case for the ``<lowercaseName>_SOURCE_DIR`` and
+  ``<lowercaseName>_BINARY_DIR`` variables is to call
+  :command:`add_subdirectory` immediately after population:
+
+  .. code-block:: cmake
+
+    FetchContent_Populate(FooBar)
+    add_subdirectory(${foobar_SOURCE_DIR} ${foobar_BINARY_DIR})
+
+  The values of the three variables can also be retrieved from anywhere in the
+  project hierarchy using the :command:`FetchContent_GetProperties` command.
+
+  The ``FetchContent_Populate()`` command also supports a syntax allowing the
+  content details to be specified directly rather than using any saved
+  details.  This is more low-level and use of this form is generally to be
+  avoided in favor of using saved content details as outlined above.
+  Nevertheless, in certain situations it can be useful to invoke the content
+  population as an isolated operation (typically as part of implementing some
+  other higher level feature or when using CMake in script mode):
+
+  .. code-block:: cmake
+
+    FetchContent_Populate(
+      <name>
+      [QUIET]
+      [SUBBUILD_DIR <subBuildDir>]
+      [SOURCE_DIR <srcDir>]
+      [BINARY_DIR <binDir>]
+      ...
+    )
+
+  This form has a number of key differences to that where only ``<name>`` is
+  provided:
+
+  - All required population details are assumed to have been provided directly
+    in the call to ``FetchContent_Populate()``. Any saved details for
+    ``<name>`` are ignored.
+  - No check is made for whether content for ``<name>`` has already been
+    populated.
+  - No global property is set to record that the population has occurred.
+  - No global properties record the source or binary directories used for the
+    populated content.
+  - The ``FETCHCONTENT_FULLY_DISCONNECTED`` and
+    ``FETCHCONTENT_UPDATES_DISCONNECTED`` cache variables are ignored.
+
+  The ``<lowercaseName>_SOURCE_DIR`` and ``<lowercaseName>_BINARY_DIR``
+  variables are still returned to the caller, but since these locations are
+  not stored as global properties when this form is used, they are only
+  available to the calling scope and below rather than the entire project
+  hierarchy.  No ``<lowercaseName>_POPULATED`` variable is set in the caller's
+  scope with this form.
+
+  The supported options for ``FetchContent_Populate()`` are the same as those
+  for :command:`FetchContent_Declare()`.  Those few options shown just
+  above are either specific to ``FetchContent_Populate()`` or their behavior is
+  slightly modified from how :command:`ExternalProject_Add` treats them:
+
+  ``QUIET``
+    The ``QUIET`` option can be given to hide the output associated with
+    populating the specified content.  If the population fails, the output will
+    be shown regardless of whether this option was given or not so that the
+    cause of the failure can be diagnosed.  The global ``FETCHCONTENT_QUIET``
+    cache variable has no effect on ``FetchContent_Populate()`` calls where the
+    content details are provided directly.
+
+  ``SUBBUILD_DIR``
+    The ``SUBBUILD_DIR`` argument can be provided to change the location of the
+    sub-build created to perform the population.  The default value is
+    ``${CMAKE_CURRENT_BINARY_DIR}/<lowercaseName>-subbuild`` and it would be
+    unusual to need to override this default.  If a relative path is specified,
+    it will be interpreted as relative to :variable:`CMAKE_CURRENT_BINARY_DIR`.
+    This option should not be confused with the ``SOURCE_SUBDIR`` option which
+    only affects the :command:`FetchContent_MakeAvailable` command.
+
+  ``SOURCE_DIR``, ``BINARY_DIR``
+    The ``SOURCE_DIR`` and ``BINARY_DIR`` arguments are supported by
+    :command:`ExternalProject_Add`, but different default values are used by
+    ``FetchContent_Populate()``.  ``SOURCE_DIR`` defaults to
+    ``${CMAKE_CURRENT_BINARY_DIR}/<lowercaseName>-src`` and ``BINARY_DIR``
+    defaults to ``${CMAKE_CURRENT_BINARY_DIR}/<lowercaseName>-build``.
+    If a relative path is specified, it will be interpreted as relative to
+    :variable:`CMAKE_CURRENT_BINARY_DIR`.
+
+  In addition to the above explicit options, any other unrecognized options are
+  passed through unmodified to :command:`ExternalProject_Add` to perform the
+  download, patch and update steps.  The following options are explicitly
+  prohibited (they are disabled by the ``FetchContent_Populate()`` command):
+
+  - ``CONFIGURE_COMMAND``
+  - ``BUILD_COMMAND``
+  - ``INSTALL_COMMAND``
+  - ``TEST_COMMAND``
+
+  If using ``FetchContent_Populate()`` within CMake's script mode, be aware
+  that the implementation sets up a sub-build which therefore requires a CMake
+  generator and build tool to be available. If these cannot be found by
+  default, then the :variable:`CMAKE_GENERATOR` and/or
+  :variable:`CMAKE_MAKE_PROGRAM` variables will need to be set appropriately
+  on the command line invoking the script.
+
+  .. versionadded:: 3.18
+    Added support for the ``DOWNLOAD_NO_EXTRACT`` option.
+
+.. command:: FetchContent_GetProperties
+
+  When using saved content details, a call to
+  :command:`FetchContent_MakeAvailable` or :command:`FetchContent_Populate`
+  records information in global properties which can be queried at any time.
+  This information includes the source and binary directories associated with
+  the content and also whether or not the content population has been processed
+  during the current configure run.
+
+  .. code-block:: cmake
+
+    FetchContent_GetProperties(
+      <name>
+      [SOURCE_DIR <srcDirVar>]
+      [BINARY_DIR <binDirVar>]
+      [POPULATED <doneVar>]
+    )
+
+  The ``SOURCE_DIR``, ``BINARY_DIR`` and ``POPULATED`` options can be used to
+  specify which properties should be retrieved.  Each option accepts a value
+  which is the name of the variable in which to store that property.  Most of
+  the time though, only ``<name>`` is given, in which case the call will then
+  set the same variables as a call to
+  :command:`FetchContent_MakeAvailable(name) <FetchContent_MakeAvailable>` or
+  :command:`FetchContent_Populate(name) <FetchContent_Populate>`.
+
+  This command is rarely needed when using
+  :command:`FetchContent_MakeAvailable`.  It is more commonly used as part of
+  implementing the following pattern with :command:`FetchContent_Populate`,
+  which ensures that the relevant variables will always be defined regardless
+  of whether or not the population has been performed elsewhere in the project
+  already:
+
+  .. code-block:: cmake
+
+    # Check if population has already been performed
+    FetchContent_GetProperties(depname)
+    if(NOT depname_POPULATED)
+      # Fetch the content using previously declared details
+      FetchContent_Populate(depname)
+
+      # Set custom variables, policies, etc.
+      # ...
+
+      # Bring the populated content into the build
+      add_subdirectory(${depname_SOURCE_DIR} ${depname_BINARY_DIR})
+    endif()
+
+Variables
+^^^^^^^^^
+
+A number of cache variables can influence the behavior where details from a
+:command:`FetchContent_Declare` call are used to populate content.
+The variables are all intended for the developer to customize behavior and
+should not normally be set by the project.
+
+.. variable:: FETCHCONTENT_BASE_DIR
+
+  In most cases, the saved details do not specify any options relating to the
+  directories to use for the internal sub-build, final source and build areas.
+  It is generally best to leave these decisions up to the ``FetchContent``
+  module to handle on the project's behalf.  The ``FETCHCONTENT_BASE_DIR``
+  cache variable controls the point under which all content population
+  directories are collected, but in most cases, developers would not need to
+  change this.  The default location is ``${CMAKE_BINARY_DIR}/_deps``, but if
+  developers change this value, they should aim to keep the path short and
+  just below the top level of the build tree to avoid running into path
+  length problems on Windows.
+
+.. variable:: FETCHCONTENT_QUIET
+
+  The logging output during population can be quite verbose, making the
+  configure stage quite noisy.  This cache option (``ON`` by default) hides
+  all population output unless an error is encountered.  If experiencing
+  problems with hung downloads, temporarily switching this option off may
+  help diagnose which content population is causing the issue.
+
+.. variable:: FETCHCONTENT_FULLY_DISCONNECTED
+
+  When this option is enabled, no attempt is made to download or update
+  any content.  It is assumed that all content has already been populated in
+  a previous run or the source directories have been pointed at existing
+  contents the developer has provided manually (using options described
+  further below).  When the developer knows that no changes have been made to
+  any content details, turning this option ``ON`` can significantly speed up
+  the configure stage.  It is ``OFF`` by default.
+
+.. variable:: FETCHCONTENT_UPDATES_DISCONNECTED
+
+  This is a less severe download/update control compared to
+  :variable:`FETCHCONTENT_FULLY_DISCONNECTED`.  Instead of bypassing all
+  download and update logic, ``FETCHCONTENT_UPDATES_DISCONNECTED`` only
+  disables the update stage.  Therefore, if content has not been downloaded
+  previously, it will still be downloaded when this option is enabled.
+  This can speed up the configure stage, but not as much as
+  :variable:`FETCHCONTENT_FULLY_DISCONNECTED`.  It is ``OFF`` by default.
+
+In addition to the above cache variables, the following cache variables are
+also defined for each content name:
+
+.. variable:: FETCHCONTENT_SOURCE_DIR_<uppercaseName>
+
+  If this is set, no download or update steps are performed for the specified
+  content and the ``<lowercaseName>_SOURCE_DIR`` variable returned to the
+  caller is pointed at this location.  This gives developers a way to have a
+  separate checkout of the content that they can modify freely without
+  interference from the build.  The build simply uses that existing source,
+  but it still defines ``<lowercaseName>_BINARY_DIR`` to point inside its own
+  build area.  Developers are strongly encouraged to use this mechanism rather
+  than editing the sources populated in the default location, as changes to
+  sources in the default location can be lost when content population details
+  are changed by the project.
+
+.. variable:: FETCHCONTENT_UPDATES_DISCONNECTED_<uppercaseName>
+
+  This is the per-content equivalent of
+  :variable:`FETCHCONTENT_UPDATES_DISCONNECTED`.  If the global option or
+  this option is ``ON``, then updates will be disabled for the named content.
+  Disabling updates for individual content can be useful for content whose
+  details rarely change, while still leaving other frequently changing content
+  with updates enabled.
+
+.. _`fetch-content-examples`:
+
+Examples
+^^^^^^^^
+
+This first fairly straightforward example ensures that some popular testing
+frameworks are available to the main build:
+
+.. code-block:: cmake
+
+  include(FetchContent)
+  FetchContent_Declare(
+    googletest
+    GIT_REPOSITORY https://github.com/google/googletest.git
+    GIT_TAG        703bd9caab50b139428cea1aaff9974ebee5742e # release-1.10.0
+  )
+  FetchContent_Declare(
+    Catch2
+    GIT_REPOSITORY https://github.com/catchorg/Catch2.git
+    GIT_TAG        de6fe184a9ac1a06895cdd1c9b437f0a0bdf14ad # v2.13.4
+  )
+
+  # After the following call, the CMake targets defined by googletest and
+  # Catch2 will be available to the rest of the build
+  FetchContent_MakeAvailable(googletest Catch2)
+
+If the sub-project's ``CMakeLists.txt`` file is not at the top level of its
+source tree, the ``SOURCE_SUBDIR`` option can be used to tell ``FetchContent``
+where to find it.  The following example shows how to use that option and
+it also sets a variable which is meaningful to the subproject before pulling
+it into the main build:
+
+.. code-block:: cmake
+
+  include(FetchContent)
+  FetchContent_Declare(
+    protobuf
+    GIT_REPOSITORY https://github.com/protocolbuffers/protobuf.git
+    GIT_TAG        ae50d9b9902526efd6c7a1907d09739f959c6297 # v3.15.0
+    SOURCE_SUBDIR  cmake
+  )
+  set(protobuf_BUILD_TESTS OFF)
+  FetchContent_MakeAvailable(protobuf)
+
+In more complex project hierarchies, the dependency relationships can be more
+complicated.  Consider a hierarchy where ``projA`` is the top level project and
+it depends directly on projects ``projB`` and ``projC``.  Both ``projB`` and
+``projC`` can be built standalone and they also both depend on another project
+``projD``.  ``projB`` additionally depends on ``projE``.  This example assumes
+that all five projects are available on a company git server.  The
+``CMakeLists.txt`` of each project might have sections like the following:
+
+*projA*:
+
+.. code-block:: cmake
+
+  include(FetchContent)
+  FetchContent_Declare(
+    projB
+    GIT_REPOSITORY git@mycompany.com:git/projB.git
+    GIT_TAG        4a89dc7e24ff212a7b5167bef7ab079d
+  )
+  FetchContent_Declare(
+    projC
+    GIT_REPOSITORY git@mycompany.com:git/projC.git
+    GIT_TAG        4ad4016bd1d8d5412d135cf8ceea1bb9
+  )
+  FetchContent_Declare(
+    projD
+    GIT_REPOSITORY git@mycompany.com:git/projD.git
+    GIT_TAG        origin/integrationBranch
+  )
+  FetchContent_Declare(
+    projE
+    GIT_REPOSITORY git@mycompany.com:git/projE.git
+    GIT_TAG        v2.3-rc1
+  )
+
+  # Order is important, see notes in the discussion further below
+  FetchContent_MakeAvailable(projD projB projC)
+
+*projB*:
+
+.. code-block:: cmake
+
+  include(FetchContent)
+  FetchContent_Declare(
+    projD
+    GIT_REPOSITORY git@mycompany.com:git/projD.git
+    GIT_TAG        20b415f9034bbd2a2e8216e9a5c9e632
+  )
+  FetchContent_Declare(
+    projE
+    GIT_REPOSITORY git@mycompany.com:git/projE.git
+    GIT_TAG        68e20f674a48be38d60e129f600faf7d
+  )
+
+  FetchContent_MakeAvailable(projD projE)
+
+*projC*:
+
+.. code-block:: cmake
+
+  include(FetchContent)
+  FetchContent_Declare(
+    projD
+    GIT_REPOSITORY git@mycompany.com:git/projD.git
+    GIT_TAG        7d9a17ad2c962aa13e2fbb8043fb6b8a
+  )
+
+  # This particular version of projD requires workarounds
+  FetchContent_GetProperties(projD)
+  if(NOT projd_POPULATED)
+    FetchContent_Populate(projD)
+
+    # Copy an additional/replacement file into the populated source
+    file(COPY someFile.c DESTINATION ${projd_SOURCE_DIR}/src)
+
+    add_subdirectory(${projd_SOURCE_DIR} ${projd_BINARY_DIR})
+  endif()
+
+A few key points should be noted in the above:
+
+- ``projB`` and ``projC`` define different content details for ``projD``,
+  but ``projA`` also defines a set of content details for ``projD``.
+  Because ``projA`` will define them first, the details from ``projB`` and
+  ``projC`` will not be used.  The override details defined by ``projA``
+  are not required to match either of those from ``projB`` or ``projC``, but
+  it is up to the higher level project to ensure that the details it does
+  define still make sense for the child projects.
+- In the ``projA`` call to :command:`FetchContent_MakeAvailable`, ``projD``
+  is listed ahead of ``projB`` and ``projC`` to ensure that ``projA`` is in
+  control of how ``projD`` is populated.
+- While ``projA`` defines content details for ``projE``, it does not need
+  to explicitly call ``FetchContent_MakeAvailable(projE)`` or
+  ``FetchContent_Populate(projD)`` itself.  Instead, it leaves that to the
+  child ``projB``.  For higher level projects, it is often enough to just
+  define the override content details and leave the actual population to the
+  child projects.  This saves repeating the same thing at each level of the
+  project hierarchy unnecessarily.
+
+
+Projects don't always need to add the populated content to the build.
+Sometimes the project just wants to make the downloaded content available at
+a predictable location.  The next example ensures that a set of standard
+company toolchain files (and potentially even the toolchain binaries
+themselves) is available early enough to be used for that same build.
+
+.. code-block:: cmake
+
+  cmake_minimum_required(VERSION 3.14)
+
+  include(FetchContent)
+  FetchContent_Declare(
+    mycom_toolchains
+    URL  https://intranet.mycompany.com//toolchains_1.3.2.tar.gz
+  )
+  FetchContent_MakeAvailable(mycom_toolchains)
+
+  project(CrossCompileExample)
+
+The project could be configured to use one of the downloaded toolchains like
+so:
+
+.. code-block:: shell
+
+  cmake -DCMAKE_TOOLCHAIN_FILE=_deps/mycom_toolchains-src/toolchain_arm.cmake /path/to/src
+
+When CMake processes the ``CMakeLists.txt`` file, it will download and unpack
+the tarball into ``_deps/mycompany_toolchains-src`` relative to the build
+directory.  The :variable:`CMAKE_TOOLCHAIN_FILE` variable is not used until
+the :command:`project` command is reached, at which point CMake looks for the
+named toolchain file relative to the build directory.  Because the tarball has
+already been downloaded and unpacked by then, the toolchain file will be in
+place, even the very first time that ``cmake`` is run in the build directory.
+
+Lastly, the following example demonstrates how one might download and unpack a
+firmware tarball using CMake's :manual:`script mode <cmake(1)>`.  The call to
+:command:`FetchContent_Populate` specifies all the content details and the
+unpacked firmware will be placed in a ``firmware`` directory below the
+current working directory.
+
+*getFirmware.cmake*:
+
+.. code-block:: cmake
+
+  # NOTE: Intended to be run in script mode with cmake -P
+  include(FetchContent)
+  FetchContent_Populate(
+    firmware
+    URL        https://mycompany.com/assets/firmware-1.23-arm.tar.gz
+    URL_HASH   MD5=68247684da89b608d466253762b0ff11
+    SOURCE_DIR firmware
+  )
+
+#]=======================================================================]
+
+#=======================================================================
+# Recording and retrieving content details for later population
+#=======================================================================
+
+# Internal use, projects must not call this directly. It is
+# intended for use by FetchContent_Declare() only.
+#
+# Sets a content-specific global property (not meant for use
+# outside of functions defined here in this file) which can later
+# be retrieved using __FetchContent_getSavedDetails() with just the
+# same content name. If there is already a value stored in the
+# property, it is left unchanged and this call has no effect.
+# This allows parent projects to define the content details,
+# overriding anything a child project may try to set (properties
+# are not cached between runs, so the first thing to set it in a
+# build will be in control).
+function(__FetchContent_declareDetails contentName)
+
+  string(TOLOWER ${contentName} contentNameLower)
+  set(propertyName "_FetchContent_${contentNameLower}_savedDetails")
+  get_property(alreadyDefined GLOBAL PROPERTY ${propertyName} DEFINED)
+  if(NOT alreadyDefined)
+    define_property(GLOBAL PROPERTY ${propertyName}
+      BRIEF_DOCS "Internal implementation detail of FetchContent_Populate()"
+      FULL_DOCS  "Details used by FetchContent_Populate() for ${contentName}"
+    )
+    set(__cmdArgs)
+    foreach(__item IN LISTS ARGN)
+      string(APPEND __cmdArgs " [==[${__item}]==]")
+    endforeach()
+    cmake_language(EVAL CODE
+      "set_property(GLOBAL PROPERTY ${propertyName} ${__cmdArgs})")
+  endif()
+
+endfunction()
+
+
+# Internal use, projects must not call this directly. It is
+# intended for use by the FetchContent_Declare() function.
+#
+# Retrieves details saved for the specified content in an
+# earlier call to __FetchContent_declareDetails().
+function(__FetchContent_getSavedDetails contentName outVar)
+
+  string(TOLOWER ${contentName} contentNameLower)
+  set(propertyName "_FetchContent_${contentNameLower}_savedDetails")
+  get_property(alreadyDefined GLOBAL PROPERTY ${propertyName} DEFINED)
+  if(NOT alreadyDefined)
+    message(FATAL_ERROR "No content details recorded for ${contentName}")
+  endif()
+  get_property(propertyValue GLOBAL PROPERTY ${propertyName})
+  set(${outVar} "${propertyValue}" PARENT_SCOPE)
+
+endfunction()
+
+
+# Saves population details of the content, sets defaults for the
+# SOURCE_DIR and BUILD_DIR.
+function(FetchContent_Declare contentName)
+
+  set(options "")
+  set(oneValueArgs SVN_REPOSITORY)
+  set(multiValueArgs "")
+
+  cmake_parse_arguments(PARSE_ARGV 1 ARG
+    "${options}" "${oneValueArgs}" "${multiValueArgs}")
+
+  unset(srcDirSuffix)
+  unset(svnRepoArgs)
+  if(ARG_SVN_REPOSITORY)
+    # Add a hash of the svn repository URL to the source dir. This works
+    # around the problem where if the URL changes, the download would
+    # fail because it tries to checkout/update rather than switch the
+    # old URL to the new one. We limit the hash to the first 7 characters
+    # so that the source path doesn't get overly long (which can be a
+    # problem on windows due to path length limits).
+    string(SHA1 urlSHA ${ARG_SVN_REPOSITORY})
+    string(SUBSTRING ${urlSHA} 0 7 urlSHA)
+    set(srcDirSuffix "-${urlSHA}")
+    set(svnRepoArgs  SVN_REPOSITORY ${ARG_SVN_REPOSITORY})
+  endif()
+
+  string(TOLOWER ${contentName} contentNameLower)
+
+  set(__argsQuoted)
+  foreach(__item IN LISTS ARG_UNPARSED_ARGUMENTS)
+    string(APPEND __argsQuoted " [==[${__item}]==]")
+  endforeach()
+  cmake_language(EVAL CODE "
+    __FetchContent_declareDetails(
+      ${contentNameLower}
+      SOURCE_DIR \"${FETCHCONTENT_BASE_DIR}/${contentNameLower}-src${srcDirSuffix}\"
+      BINARY_DIR \"${FETCHCONTENT_BASE_DIR}/${contentNameLower}-build\"
+      \${svnRepoArgs}
+      # List these last so they can override things we set above
+      ${__argsQuoted}
+    )"
+  )
+
+endfunction()
+
+
+#=======================================================================
+# Set/get whether the specified content has been populated yet.
+# The setter also records the source and binary dirs used.
+#=======================================================================
+
+# Internal use, projects must not call this directly. It is
+# intended for use by the FetchContent_Populate() function to
+# record when FetchContent_Populate() is called for a particular
+# content name.
+function(__FetchContent_setPopulated contentName sourceDir binaryDir)
+
+  string(TOLOWER ${contentName} contentNameLower)
+  set(prefix "_FetchContent_${contentNameLower}")
+
+  set(propertyName "${prefix}_sourceDir")
+  define_property(GLOBAL PROPERTY ${propertyName}
+    BRIEF_DOCS "Internal implementation detail of FetchContent_Populate()"
+    FULL_DOCS  "Details used by FetchContent_Populate() for ${contentName}"
+  )
+  set_property(GLOBAL PROPERTY ${propertyName} ${sourceDir})
+
+  set(propertyName "${prefix}_binaryDir")
+  define_property(GLOBAL PROPERTY ${propertyName}
+    BRIEF_DOCS "Internal implementation detail of FetchContent_Populate()"
+    FULL_DOCS  "Details used by FetchContent_Populate() for ${contentName}"
+  )
+  set_property(GLOBAL PROPERTY ${propertyName} ${binaryDir})
+
+  set(propertyName "${prefix}_populated")
+  define_property(GLOBAL PROPERTY ${propertyName}
+    BRIEF_DOCS "Internal implementation detail of FetchContent_Populate()"
+    FULL_DOCS  "Details used by FetchContent_Populate() for ${contentName}"
+  )
+  set_property(GLOBAL PROPERTY ${propertyName} True)
+
+endfunction()
+
+
+# Set variables in the calling scope for any of the retrievable
+# properties. If no specific properties are requested, variables
+# will be set for all retrievable properties.
+#
+# This function is intended to also be used by projects as the canonical
+# way to detect whether they should call FetchContent_Populate()
+# and pull the populated source into the build with add_subdirectory(),
+# if they are using the populated content in that way.
+function(FetchContent_GetProperties contentName)
+
+  string(TOLOWER ${contentName} contentNameLower)
+
+  set(options "")
+  set(oneValueArgs SOURCE_DIR BINARY_DIR POPULATED)
+  set(multiValueArgs "")
+
+  cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+  if(NOT ARG_SOURCE_DIR AND
+     NOT ARG_BINARY_DIR AND
+     NOT ARG_POPULATED)
+    # No specific properties requested, provide them all
+    set(ARG_SOURCE_DIR ${contentNameLower}_SOURCE_DIR)
+    set(ARG_BINARY_DIR ${contentNameLower}_BINARY_DIR)
+    set(ARG_POPULATED  ${contentNameLower}_POPULATED)
+  endif()
+
+  set(prefix "_FetchContent_${contentNameLower}")
+
+  if(ARG_SOURCE_DIR)
+    set(propertyName "${prefix}_sourceDir")
+    get_property(value GLOBAL PROPERTY ${propertyName})
+    if(value)
+      set(${ARG_SOURCE_DIR} ${value} PARENT_SCOPE)
+    endif()
+  endif()
+
+  if(ARG_BINARY_DIR)
+    set(propertyName "${prefix}_binaryDir")
+    get_property(value GLOBAL PROPERTY ${propertyName})
+    if(value)
+      set(${ARG_BINARY_DIR} ${value} PARENT_SCOPE)
+    endif()
+  endif()
+
+  if(ARG_POPULATED)
+    set(propertyName "${prefix}_populated")
+    get_property(value GLOBAL PROPERTY ${propertyName} DEFINED)
+    set(${ARG_POPULATED} ${value} PARENT_SCOPE)
+  endif()
+
+endfunction()
+
+
+#=======================================================================
+# Performing the population
+#=======================================================================
+
+# The value of contentName will always have been lowercased by the caller.
+# All other arguments are assumed to be options that are understood by
+# ExternalProject_Add(), except for QUIET and SUBBUILD_DIR.
+function(__FetchContent_directPopulate contentName)
+
+  set(options
+      QUIET
+  )
+  set(oneValueArgs
+      SUBBUILD_DIR
+      SOURCE_DIR
+      BINARY_DIR
+      # We need special processing if DOWNLOAD_NO_EXTRACT is true
+      DOWNLOAD_NO_EXTRACT
+      # Prevent the following from being passed through
+      CONFIGURE_COMMAND
+      BUILD_COMMAND
+      INSTALL_COMMAND
+      TEST_COMMAND
+      # We force both of these to be ON since we are always executing serially
+      # and we want all steps to have access to the terminal in case they
+      # need input from the command line (e.g. ask for a private key password)
+      # or they want to provide timely progress. We silently absorb and
+      # discard these if they are set by the caller.
+      USES_TERMINAL_DOWNLOAD
+      USES_TERMINAL_UPDATE
+  )
+  set(multiValueArgs "")
+
+  cmake_parse_arguments(PARSE_ARGV 1 ARG
+    "${options}" "${oneValueArgs}" "${multiValueArgs}")
+
+  if(NOT ARG_SUBBUILD_DIR)
+    message(FATAL_ERROR "Internal error: SUBBUILD_DIR not set")
+  elseif(NOT IS_ABSOLUTE "${ARG_SUBBUILD_DIR}")
+    set(ARG_SUBBUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/${ARG_SUBBUILD_DIR}")
+  endif()
+
+  if(NOT ARG_SOURCE_DIR)
+    message(FATAL_ERROR "Internal error: SOURCE_DIR not set")
+  elseif(NOT IS_ABSOLUTE "${ARG_SOURCE_DIR}")
+    set(ARG_SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/${ARG_SOURCE_DIR}")
+  endif()
+
+  if(NOT ARG_BINARY_DIR)
+    message(FATAL_ERROR "Internal error: BINARY_DIR not set")
+  elseif(NOT IS_ABSOLUTE "${ARG_BINARY_DIR}")
+    set(ARG_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/${ARG_BINARY_DIR}")
+  endif()
+
+  # Ensure the caller can know where to find the source and build directories
+  # with some convenient variables. Doing this here ensures the caller sees
+  # the correct result in the case where the default values are overridden by
+  # the content details set by the project.
+  set(${contentName}_SOURCE_DIR "${ARG_SOURCE_DIR}" PARENT_SCOPE)
+  set(${contentName}_BINARY_DIR "${ARG_BINARY_DIR}" PARENT_SCOPE)
+
+  # The unparsed arguments may contain spaces, so build up ARG_EXTRA
+  # in such a way that it correctly substitutes into the generated
+  # CMakeLists.txt file with each argument quoted.
+  unset(ARG_EXTRA)
+  foreach(arg IN LISTS ARG_UNPARSED_ARGUMENTS)
+    set(ARG_EXTRA "${ARG_EXTRA} \"${arg}\"")
+  endforeach()
+
+  if(ARG_DOWNLOAD_NO_EXTRACT)
+    set(ARG_EXTRA "${ARG_EXTRA} DOWNLOAD_NO_EXTRACT YES")
+    set(__FETCHCONTENT_COPY_FILE
+"
+ExternalProject_Get_Property(${contentName}-populate DOWNLOADED_FILE)
+get_filename_component(dlFileName \"\${DOWNLOADED_FILE}\" NAME)
+
+ExternalProject_Add_Step(${contentName}-populate copyfile
+  COMMAND    \"${CMAKE_COMMAND}\" -E copy_if_different
+             \"<DOWNLOADED_FILE>\" \"${ARG_SOURCE_DIR}\"
+  DEPENDEES  patch
+  DEPENDERS  configure
+  BYPRODUCTS \"${ARG_SOURCE_DIR}/\${dlFileName}\"
+  COMMENT    \"Copying file to SOURCE_DIR\"
+)
+")
+  else()
+    unset(__FETCHCONTENT_COPY_FILE)
+  endif()
+
+  # Hide output if requested, but save it to a variable in case there's an
+  # error so we can show the output upon failure. When not quiet, don't
+  # capture the output to a variable because the user may want to see the
+  # output as it happens (e.g. progress during long downloads). Combine both
+  # stdout and stderr in the one capture variable so the output stays in order.
+  if (ARG_QUIET)
+    set(outputOptions
+        OUTPUT_VARIABLE capturedOutput
+        ERROR_VARIABLE  capturedOutput
+    )
+  else()
+    set(capturedOutput)
+    set(outputOptions)
+    message(STATUS "Populating ${contentName}")
+  endif()
+
+  if(CMAKE_GENERATOR)
+    set(subCMakeOpts "-G${CMAKE_GENERATOR}")
+    if(CMAKE_GENERATOR_PLATFORM)
+      list(APPEND subCMakeOpts "-A${CMAKE_GENERATOR_PLATFORM}")
+    endif()
+    if(CMAKE_GENERATOR_TOOLSET)
+      list(APPEND subCMakeOpts "-T${CMAKE_GENERATOR_TOOLSET}")
+    endif()
+
+    if(CMAKE_MAKE_PROGRAM)
+      list(APPEND subCMakeOpts "-DCMAKE_MAKE_PROGRAM:FILEPATH=${CMAKE_MAKE_PROGRAM}")
+    endif()
+
+  else()
+    # Likely we've been invoked via CMake's script mode where no
+    # generator is set (and hence CMAKE_MAKE_PROGRAM could not be
+    # trusted even if provided). We will have to rely on being
+    # able to find the default generator and build tool.
+    unset(subCMakeOpts)
+  endif()
+
+  set(__FETCHCONTENT_CACHED_INFO "")
+  set(__passthrough_vars
+    CMAKE_EP_GIT_REMOTE_UPDATE_STRATEGY
+    CMAKE_TLS_VERIFY
+    CMAKE_TLS_CAINFO
+    CMAKE_NETRC
+    CMAKE_NETRC_FILE
+  )
+  foreach(var IN LISTS __passthrough_vars)
+    if(DEFINED ${var})
+      # Embed directly in the generated CMakeLists.txt file to avoid making
+      # the cmake command line excessively long. It also makes debugging and
+      # testing easier.
+      string(APPEND __FETCHCONTENT_CACHED_INFO "set(${var} [==[${${var}}]==])\n")
+    endif()
+  endforeach()
+
+  # Avoid using if(... IN_LIST ...) so we don't have to alter policy settings
+  list(FIND ARG_UNPARSED_ARGUMENTS GIT_REPOSITORY indexResult)
+  if(indexResult GREATER_EQUAL 0)
+    find_package(Git QUIET)
+    string(APPEND __FETCHCONTENT_CACHED_INFO "
+# Pass through things we've already detected in the main project to avoid
+# paying the cost of redetecting them again in ExternalProject_Add()
+set(GIT_EXECUTABLE [==[${GIT_EXECUTABLE}]==])
+set(GIT_VERSION_STRING [==[${GIT_VERSION_STRING}]==])
+set_property(GLOBAL PROPERTY _CMAKE_FindGit_GIT_EXECUTABLE_VERSION
+  [==[${GIT_EXECUTABLE};${GIT_VERSION_STRING}]==]
+)
+")
+  endif()
+
+  # Create and build a separate CMake project to carry out the population.
+  # If we've already previously done these steps, they will not cause
+  # anything to be updated, so extra rebuilds of the project won't occur.
+  # Make sure to pass through CMAKE_MAKE_PROGRAM in case the main project
+  # has this set to something not findable on the PATH.
+  configure_file("${CMAKE_CURRENT_FUNCTION_LIST_DIR}/FetchContent/CMakeLists.cmake.in"
+                 "${ARG_SUBBUILD_DIR}/CMakeLists.txt")
+  execute_process(
+    COMMAND ${CMAKE_COMMAND} ${subCMakeOpts} .
+    RESULT_VARIABLE result
+    ${outputOptions}
+    WORKING_DIRECTORY "${ARG_SUBBUILD_DIR}"
+  )
+  if(result)
+    if(capturedOutput)
+      message("${capturedOutput}")
+    endif()
+    message(FATAL_ERROR "CMake step for ${contentName} failed: ${result}")
+  endif()
+  execute_process(
+    COMMAND ${CMAKE_COMMAND} --build .
+    RESULT_VARIABLE result
+    ${outputOptions}
+    WORKING_DIRECTORY "${ARG_SUBBUILD_DIR}"
+  )
+  if(result)
+    if(capturedOutput)
+      message("${capturedOutput}")
+    endif()
+    message(FATAL_ERROR "Build step for ${contentName} failed: ${result}")
+  endif()
+
+endfunction()
+
+
+option(FETCHCONTENT_FULLY_DISCONNECTED   "Disables all attempts to download or update content and assumes source dirs already exist")
+option(FETCHCONTENT_UPDATES_DISCONNECTED "Enables UPDATE_DISCONNECTED behavior for all content population")
+option(FETCHCONTENT_QUIET                "Enables QUIET option for all content population" ON)
+set(FETCHCONTENT_BASE_DIR "${CMAKE_BINARY_DIR}/_deps" CACHE PATH "Directory under which to collect all populated content")
+
+# Populate the specified content using details stored from
+# an earlier call to FetchContent_Declare().
+function(FetchContent_Populate contentName)
+
+  if(NOT contentName)
+    message(FATAL_ERROR "Empty contentName not allowed for FetchContent_Populate()")
+  endif()
+
+  string(TOLOWER ${contentName} contentNameLower)
+
+  if(ARGN)
+    # This is the direct population form with details fully specified
+    # as part of the call, so we already have everything we need
+    __FetchContent_directPopulate(
+      ${contentNameLower}
+      SUBBUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/${contentNameLower}-subbuild"
+      SOURCE_DIR   "${CMAKE_CURRENT_BINARY_DIR}/${contentNameLower}-src"
+      BINARY_DIR   "${CMAKE_CURRENT_BINARY_DIR}/${contentNameLower}-build"
+      ${ARGN}  # Could override any of the above ..._DIR variables
+    )
+
+    # Pass source and binary dir variables back to the caller
+    set(${contentNameLower}_SOURCE_DIR "${${contentNameLower}_SOURCE_DIR}" PARENT_SCOPE)
+    set(${contentNameLower}_BINARY_DIR "${${contentNameLower}_BINARY_DIR}" PARENT_SCOPE)
+
+    # Don't set global properties, or record that we did this population, since
+    # this was a direct call outside of the normal declared details form.
+    # We only want to save values in the global properties for content that
+    # honors the hierarchical details mechanism so that projects are not
+    # robbed of the ability to override details set in nested projects.
+    return()
+  endif()
+
+  # No details provided, so assume they were saved from an earlier call
+  # to FetchContent_Declare(). Do a check that we haven't already
+  # populated this content before in case the caller forgot to check.
+  FetchContent_GetProperties(${contentName})
+  if(${contentNameLower}_POPULATED)
+    message(FATAL_ERROR "Content ${contentName} already populated in ${${contentNameLower}_SOURCE_DIR}")
+  endif()
+
+  __FetchContent_getSavedDetails(${contentName} contentDetails)
+  if("${contentDetails}" STREQUAL "")
+    message(FATAL_ERROR "No details have been set for content: ${contentName}")
+  endif()
+
+  string(TOUPPER ${contentName} contentNameUpper)
+  set(FETCHCONTENT_SOURCE_DIR_${contentNameUpper}
+      "${FETCHCONTENT_SOURCE_DIR_${contentNameUpper}}"
+      CACHE PATH "When not empty, overrides where to find pre-populated content for ${contentName}")
+
+  if(FETCHCONTENT_SOURCE_DIR_${contentNameUpper})
+    # The source directory has been explicitly provided in the cache,
+    # so no population is required. The build directory may still be specified
+    # by the declared details though.
+
+    if(NOT IS_ABSOLUTE "${FETCHCONTENT_SOURCE_DIR_${contentNameUpper}}")
+      # Don't check this directory because we don't know what location it is
+      # expected to be relative to. We can't make this a hard error for backward
+      # compatibility reasons.
+      message(WARNING "Relative source directory specified. This is not safe, "
+        "as it depends on the calling directory scope.\n"
+        "  FETCHCONTENT_SOURCE_DIR_${contentNameUpper} --> ${FETCHCONTENT_SOURCE_DIR_${contentNameUpper}}")
+    elseif(NOT EXISTS "${FETCHCONTENT_SOURCE_DIR_${contentNameUpper}}")
+      message(FATAL_ERROR "Manually specified source directory is missing:\n"
+        "  FETCHCONTENT_SOURCE_DIR_${contentNameUpper} --> ${FETCHCONTENT_SOURCE_DIR_${contentNameUpper}}")
+    endif()
+
+    set(${contentNameLower}_SOURCE_DIR "${FETCHCONTENT_SOURCE_DIR_${contentNameUpper}}")
+
+    cmake_parse_arguments(savedDetails "" "BINARY_DIR" "" ${contentDetails})
+
+    if(savedDetails_BINARY_DIR)
+      set(${contentNameLower}_BINARY_DIR ${savedDetails_BINARY_DIR})
+    else()
+      set(${contentNameLower}_BINARY_DIR "${FETCHCONTENT_BASE_DIR}/${contentNameLower}-build")
+    endif()
+
+  elseif(FETCHCONTENT_FULLY_DISCONNECTED)
+    # Bypass population and assume source is already there from a previous run.
+    # Declared details may override the default source or build directories.
+
+    cmake_parse_arguments(savedDetails "" "SOURCE_DIR;BINARY_DIR" "" ${contentDetails})
+
+    if(savedDetails_SOURCE_DIR)
+      set(${contentNameLower}_SOURCE_DIR ${savedDetails_SOURCE_DIR})
+    else()
+      set(${contentNameLower}_SOURCE_DIR "${FETCHCONTENT_BASE_DIR}/${contentNameLower}-src")
+    endif()
+
+    if(savedDetails_BINARY_DIR)
+      set(${contentNameLower}_BINARY_DIR ${savedDetails_BINARY_DIR})
+    else()
+      set(${contentNameLower}_BINARY_DIR "${FETCHCONTENT_BASE_DIR}/${contentNameLower}-build")
+    endif()
+
+  else()
+    # Support both a global "disconnect all updates" and a per-content
+    # update test (either one being set disables updates for this content).
+    option(FETCHCONTENT_UPDATES_DISCONNECTED_${contentNameUpper}
+           "Enables UPDATE_DISCONNECTED behavior just for population of ${contentName}")
+    if(FETCHCONTENT_UPDATES_DISCONNECTED OR
+       FETCHCONTENT_UPDATES_DISCONNECTED_${contentNameUpper})
+      set(disconnectUpdates True)
+    else()
+      set(disconnectUpdates False)
+    endif()
+
+    if(FETCHCONTENT_QUIET)
+      set(quietFlag QUIET)
+    else()
+      unset(quietFlag)
+    endif()
+
+    set(__detailsQuoted)
+    foreach(__item IN LISTS contentDetails)
+      string(APPEND __detailsQuoted " [==[${__item}]==]")
+    endforeach()
+    cmake_language(EVAL CODE "
+      __FetchContent_directPopulate(
+        ${contentNameLower}
+        ${quietFlag}
+        UPDATE_DISCONNECTED ${disconnectUpdates}
+        SUBBUILD_DIR \"${FETCHCONTENT_BASE_DIR}/${contentNameLower}-subbuild\"
+        SOURCE_DIR   \"${FETCHCONTENT_BASE_DIR}/${contentNameLower}-src\"
+        BINARY_DIR   \"${FETCHCONTENT_BASE_DIR}/${contentNameLower}-build\"
+        # Put the saved details last so they can override any of the
+        # the options we set above (this can include SOURCE_DIR or
+        # BUILD_DIR)
+        ${__detailsQuoted}
+      )"
+    )
+  endif()
+
+  __FetchContent_setPopulated(
+    ${contentName}
+    ${${contentNameLower}_SOURCE_DIR}
+    ${${contentNameLower}_BINARY_DIR}
+  )
+
+  # Pass variables back to the caller. The variables passed back here
+  # must match what FetchContent_GetProperties() sets when it is called
+  # with just the content name.
+  set(${contentNameLower}_SOURCE_DIR "${${contentNameLower}_SOURCE_DIR}" PARENT_SCOPE)
+  set(${contentNameLower}_BINARY_DIR "${${contentNameLower}_BINARY_DIR}" PARENT_SCOPE)
+  set(${contentNameLower}_POPULATED  True PARENT_SCOPE)
+
+endfunction()
+
+# Arguments are assumed to be the names of dependencies that have been
+# declared previously and should be populated. It is not an error if
+# any of them have already been populated (they will just be skipped in
+# that case). The command is implemented as a macro so that the variables
+# defined by the FetchContent_GetProperties() and FetchContent_Populate()
+# calls will be available to the caller.
+macro(FetchContent_MakeAvailable)
+
+  foreach(__cmake_contentName IN ITEMS ${ARGV})
+    string(TOLOWER ${__cmake_contentName} __cmake_contentNameLower)
+    FetchContent_GetProperties(${__cmake_contentName})
+    if(NOT ${__cmake_contentNameLower}_POPULATED)
+      FetchContent_Populate(${__cmake_contentName})
+
+      # Only try to call add_subdirectory() if the populated content
+      # can be treated that way. Protecting the call with the check
+      # allows this function to be used for projects that just want
+      # to ensure the content exists, such as to provide content at
+      # a known location. We check the saved details for an optional
+      # SOURCE_SUBDIR which can be used in the same way as its meaning
+      # for ExternalProject. It won't matter if it was passed through
+      # to the ExternalProject sub-build, since it would have been
+      # ignored there.
+      set(__cmake_srcdir "${${__cmake_contentNameLower}_SOURCE_DIR}")
+      __FetchContent_getSavedDetails(${__cmake_contentName} __cmake_contentDetails)
+      if("${__cmake_contentDetails}" STREQUAL "")
+        message(FATAL_ERROR "No details have been set for content: ${__cmake_contentName}")
+      endif()
+      cmake_parse_arguments(__cmake_arg "" "SOURCE_SUBDIR" "" ${__cmake_contentDetails})
+      if(NOT "${__cmake_arg_SOURCE_SUBDIR}" STREQUAL "")
+        string(APPEND __cmake_srcdir "/${__cmake_arg_SOURCE_SUBDIR}")
+      endif()
+
+      if(EXISTS ${__cmake_srcdir}/CMakeLists.txt)
+        add_subdirectory(${__cmake_srcdir} ${${__cmake_contentNameLower}_BINARY_DIR})
+      endif()
+
+      unset(__cmake_srcdir)
+    endif()
+  endforeach()
+
+  # clear local variables to prevent leaking into the caller's scope
+  unset(__cmake_contentName)
+  unset(__cmake_contentNameLower)
+  unset(__cmake_contentDetails)
+  unset(__cmake_arg_SOURCE_SUBDIR)
+
+endmacro()
diff --git a/share/cmake-3.22/Modules/FetchContent/CMakeLists.cmake.in b/share/cmake-3.22/Modules/FetchContent/CMakeLists.cmake.in
new file mode 100644
index 0000000..5ebb12f
--- /dev/null
+++ b/share/cmake-3.22/Modules/FetchContent/CMakeLists.cmake.in
@@ -0,0 +1,27 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+cmake_minimum_required(VERSION ${CMAKE_VERSION})
+
+# We name the project and the target for the ExternalProject_Add() call
+# to something that will highlight to the user what we are working on if
+# something goes wrong and an error message is produced.
+
+project(${contentName}-populate NONE)
+
+@__FETCHCONTENT_CACHED_INFO@
+
+include(ExternalProject)
+ExternalProject_Add(${contentName}-populate
+                    ${ARG_EXTRA}
+                    SOURCE_DIR          "${ARG_SOURCE_DIR}"
+                    BINARY_DIR          "${ARG_BINARY_DIR}"
+                    CONFIGURE_COMMAND   ""
+                    BUILD_COMMAND       ""
+                    INSTALL_COMMAND     ""
+                    TEST_COMMAND        ""
+                    USES_TERMINAL_DOWNLOAD  YES
+                    USES_TERMINAL_UPDATE    YES
+)
+
+@__FETCHCONTENT_COPY_FILE@
diff --git a/share/cmake-3.22/Modules/FindALSA.cmake b/share/cmake-3.22/Modules/FindALSA.cmake
new file mode 100644
index 0000000..627866a
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindALSA.cmake
@@ -0,0 +1,76 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindALSA
+--------
+
+Find Advanced Linux Sound Architecture (ALSA)
+
+Find the alsa libraries (``asound``)
+
+IMPORTED Targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.12
+
+This module defines :prop_tgt:`IMPORTED` target ``ALSA::ALSA``, if
+ALSA has been found.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This module defines the following variables:
+
+``ALSA_FOUND``
+  True if ALSA_INCLUDE_DIR & ALSA_LIBRARY are found
+
+``ALSA_LIBRARIES``
+  List of libraries when using ALSA.
+
+``ALSA_INCLUDE_DIRS``
+  Where to find the ALSA headers.
+
+Cache variables
+^^^^^^^^^^^^^^^
+
+The following cache variables may also be set:
+
+``ALSA_INCLUDE_DIR``
+  the ALSA include directory
+
+``ALSA_LIBRARY``
+  the absolute path of the asound library
+#]=======================================================================]
+
+find_path(ALSA_INCLUDE_DIR NAMES alsa/asoundlib.h
+          DOC "The ALSA (asound) include directory"
+)
+
+find_library(ALSA_LIBRARY NAMES asound
+          DOC "The ALSA (asound) library"
+)
+
+if(ALSA_INCLUDE_DIR AND EXISTS "${ALSA_INCLUDE_DIR}/alsa/version.h")
+  file(STRINGS "${ALSA_INCLUDE_DIR}/alsa/version.h" alsa_version_str REGEX "^#define[\t ]+SND_LIB_VERSION_STR[\t ]+\".*\"")
+
+  string(REGEX REPLACE "^.*SND_LIB_VERSION_STR[\t ]+\"([^\"]*)\".*$" "\\1" ALSA_VERSION_STRING "${alsa_version_str}")
+  unset(alsa_version_str)
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(ALSA
+                                  REQUIRED_VARS ALSA_LIBRARY ALSA_INCLUDE_DIR
+                                  VERSION_VAR ALSA_VERSION_STRING)
+
+if(ALSA_FOUND)
+  set( ALSA_LIBRARIES ${ALSA_LIBRARY} )
+  set( ALSA_INCLUDE_DIRS ${ALSA_INCLUDE_DIR} )
+  if(NOT TARGET ALSA::ALSA)
+    add_library(ALSA::ALSA UNKNOWN IMPORTED)
+    set_target_properties(ALSA::ALSA PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${ALSA_INCLUDE_DIRS}")
+    set_property(TARGET ALSA::ALSA APPEND PROPERTY IMPORTED_LOCATION "${ALSA_LIBRARY}")
+  endif()
+endif()
+
+mark_as_advanced(ALSA_INCLUDE_DIR ALSA_LIBRARY)
diff --git a/share/cmake-3.18/Modules/FindASPELL.cmake b/share/cmake-3.22/Modules/FindASPELL.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindASPELL.cmake
rename to share/cmake-3.22/Modules/FindASPELL.cmake
diff --git a/share/cmake-3.18/Modules/FindAVIFile.cmake b/share/cmake-3.22/Modules/FindAVIFile.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindAVIFile.cmake
rename to share/cmake-3.22/Modules/FindAVIFile.cmake
diff --git a/share/cmake-3.22/Modules/FindArmadillo.cmake b/share/cmake-3.22/Modules/FindArmadillo.cmake
new file mode 100644
index 0000000..f959356
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindArmadillo.cmake
@@ -0,0 +1,135 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindArmadillo
+-------------
+
+Find the Armadillo C++ library.
+Armadillo is a library for linear algebra & scientific computing.
+
+.. versionadded:: 3.18
+  Support for linking wrapped libraries directly (``ARMA_DONT_USE_WRAPPER``).
+
+Using Armadillo:
+
+::
+
+  find_package(Armadillo REQUIRED)
+  include_directories(${ARMADILLO_INCLUDE_DIRS})
+  add_executable(foo foo.cc)
+  target_link_libraries(foo ${ARMADILLO_LIBRARIES})
+
+This module sets the following variables:
+
+::
+
+  ARMADILLO_FOUND - set to true if the library is found
+  ARMADILLO_INCLUDE_DIRS - list of required include directories
+  ARMADILLO_LIBRARIES - list of libraries to be linked
+  ARMADILLO_VERSION_MAJOR - major version number
+  ARMADILLO_VERSION_MINOR - minor version number
+  ARMADILLO_VERSION_PATCH - patch version number
+  ARMADILLO_VERSION_STRING - version number as a string (ex: "1.0.4")
+  ARMADILLO_VERSION_NAME - name of the version (ex: "Antipodean Antileech")
+#]=======================================================================]
+
+find_path(ARMADILLO_INCLUDE_DIR
+  NAMES armadillo
+  PATHS "$ENV{ProgramFiles}/Armadillo/include"
+  )
+mark_as_advanced(ARMADILLO_INCLUDE_DIR)
+
+if(ARMADILLO_INCLUDE_DIR)
+  # ------------------------------------------------------------------------
+  #  Extract version information from <armadillo>
+  # ------------------------------------------------------------------------
+
+  # WARNING: Early releases of Armadillo didn't have the arma_version.hpp file.
+  # (e.g. v.0.9.8-1 in ubuntu maverick packages (2001-03-15))
+  # If the file is missing, set all values to 0
+  set(ARMADILLO_VERSION_MAJOR 0)
+  set(ARMADILLO_VERSION_MINOR 0)
+  set(ARMADILLO_VERSION_PATCH 0)
+  set(ARMADILLO_VERSION_NAME "EARLY RELEASE")
+
+  if(EXISTS "${ARMADILLO_INCLUDE_DIR}/armadillo_bits/arma_version.hpp")
+
+    # Read and parse armdillo version header file for version number
+    file(STRINGS "${ARMADILLO_INCLUDE_DIR}/armadillo_bits/arma_version.hpp" _ARMA_HEADER_CONTENTS REGEX "#define ARMA_VERSION_[A-Z]+ ")
+    string(REGEX REPLACE ".*#define ARMA_VERSION_MAJOR ([0-9]+).*" "\\1" ARMADILLO_VERSION_MAJOR "${_ARMA_HEADER_CONTENTS}")
+    string(REGEX REPLACE ".*#define ARMA_VERSION_MINOR ([0-9]+).*" "\\1" ARMADILLO_VERSION_MINOR "${_ARMA_HEADER_CONTENTS}")
+    string(REGEX REPLACE ".*#define ARMA_VERSION_PATCH ([0-9]+).*" "\\1" ARMADILLO_VERSION_PATCH "${_ARMA_HEADER_CONTENTS}")
+
+    # WARNING: The number of spaces before the version name is not one.
+    string(REGEX REPLACE ".*#define ARMA_VERSION_NAME\ +\"([0-9a-zA-Z\ _-]+)\".*" "\\1" ARMADILLO_VERSION_NAME "${_ARMA_HEADER_CONTENTS}")
+
+  endif()
+
+  set(ARMADILLO_VERSION_STRING "${ARMADILLO_VERSION_MAJOR}.${ARMADILLO_VERSION_MINOR}.${ARMADILLO_VERSION_PATCH}")
+endif ()
+
+if(EXISTS "${ARMADILLO_INCLUDE_DIR}/armadillo_bits/config.hpp")
+  file(STRINGS "${ARMADILLO_INCLUDE_DIR}/armadillo_bits/config.hpp" _ARMA_CONFIG_CONTENTS REGEX "^#define ARMA_USE_[A-Z]+")
+  string(REGEX MATCH "ARMA_USE_WRAPPER" _ARMA_USE_WRAPPER "${_ARMA_CONFIG_CONTENTS}")
+  string(REGEX MATCH "ARMA_USE_LAPACK" _ARMA_USE_LAPACK "${_ARMA_CONFIG_CONTENTS}")
+  string(REGEX MATCH "ARMA_USE_BLAS" _ARMA_USE_BLAS "${_ARMA_CONFIG_CONTENTS}")
+  string(REGEX MATCH "ARMA_USE_ARPACK" _ARMA_USE_ARPACK "${_ARMA_CONFIG_CONTENTS}")
+  string(REGEX MATCH "ARMA_USE_HDF5" _ARMA_USE_HDF5 "${_ARMA_CONFIG_CONTENTS}")
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+
+# If _ARMA_USE_WRAPPER is set, then we just link to armadillo, but if it's not then we need support libraries instead
+set(_ARMA_SUPPORT_LIBRARIES)
+
+if(_ARMA_USE_WRAPPER)
+  # Link to the armadillo wrapper library.
+  find_library(ARMADILLO_LIBRARY
+    NAMES armadillo
+    NAMES_PER_DIR
+    PATHS
+      "$ENV{ProgramFiles}/Armadillo/lib"
+      "$ENV{ProgramFiles}/Armadillo/lib64"
+      "$ENV{ProgramFiles}/Armadillo"
+    )
+  mark_as_advanced(ARMADILLO_LIBRARY)
+  set(_ARMA_REQUIRED_VARS ARMADILLO_LIBRARY)
+else()
+  # Link directly to individual components.
+  set(ARMADILLO_LIBRARY "")
+  foreach(pkg
+      LAPACK
+      BLAS
+      ARPACK
+      HDF5
+      )
+    if(_ARMA_USE_${pkg})
+      find_package(${pkg} QUIET)
+      list(APPEND _ARMA_REQUIRED_VARS "${pkg}_FOUND")
+      if(${pkg}_FOUND)
+        list(APPEND _ARMA_SUPPORT_LIBRARIES ${${pkg}_LIBRARIES})
+      endif()
+    endif()
+  endforeach()
+endif()
+
+find_package_handle_standard_args(Armadillo
+  REQUIRED_VARS ARMADILLO_INCLUDE_DIR ${_ARMA_REQUIRED_VARS}
+  VERSION_VAR ARMADILLO_VERSION_STRING)
+
+if (ARMADILLO_FOUND)
+  set(ARMADILLO_INCLUDE_DIRS ${ARMADILLO_INCLUDE_DIR})
+  set(ARMADILLO_LIBRARIES ${ARMADILLO_LIBRARY} ${_ARMA_SUPPORT_LIBRARIES})
+endif ()
+
+# Clean up internal variables
+unset(_ARMA_REQUIRED_VARS)
+unset(_ARMA_SUPPORT_LIBRARIES)
+unset(_ARMA_USE_WRAPPER)
+unset(_ARMA_USE_LAPACK)
+unset(_ARMA_USE_BLAS)
+unset(_ARMA_USE_ARPACK)
+unset(_ARMA_USE_HDF5)
+unset(_ARMA_CONFIG_CONTENTS)
+unset(_ARMA_HEADER_CONTENTS)
diff --git a/share/cmake-3.22/Modules/FindBISON.cmake b/share/cmake-3.22/Modules/FindBISON.cmake
new file mode 100644
index 0000000..3515bf0
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindBISON.cmake
@@ -0,0 +1,307 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindBISON
+---------
+
+Find ``bison`` executable and provide a macro to generate custom build rules.
+
+The module defines the following variables:
+
+``BISON_EXECUTABLE``
+  path to the ``bison`` program
+
+``BISON_VERSION``
+  version of ``bison``
+
+``BISON_FOUND``
+  "True" if the program was found
+
+The minimum required version of ``bison`` can be specified using the
+standard CMake syntax, e.g.  :command:`find_package(BISON 2.1.3)`.
+
+If ``bison`` is found, the module defines the macro::
+
+  BISON_TARGET(<Name> <YaccInput> <CodeOutput>
+               [COMPILE_FLAGS <flags>]
+               [DEFINES_FILE <file>]
+               [VERBOSE [<file>]]
+               [REPORT_FILE <file>]
+               )
+
+which will create a custom rule to generate a parser.  ``<YaccInput>`` is
+the path to a yacc file.  ``<CodeOutput>`` is the name of the source file
+generated by bison.  A header file is also be generated, and contains
+the token list.
+
+.. versionchanged:: 3.14
+  When :policy:`CMP0088` is set to ``NEW``, ``bison`` runs in the
+  :variable:`CMAKE_CURRENT_BINARY_DIR` directory.
+
+The options are:
+
+``COMPILE_FLAGS <flags>``
+  Specify flags to be added to the ``bison`` command line.
+
+``DEFINES_FILE <file>``
+  .. versionadded:: 3.4
+
+  Specify a non-default header ``<file>`` to be generated by ``bison``.
+
+``VERBOSE [<file>]``
+  Tell ``bison`` to write a report file of the grammar and parser.
+
+  .. deprecated:: 3.7
+    If ``<file>`` is given, it specifies path the report file is copied to.
+    ``[<file>]`` is left for backward compatibility of this module.
+    Use ``VERBOSE REPORT_FILE <file>``.
+
+``REPORT_FILE <file>``
+  .. versionadded:: 3.7
+
+  Specify a non-default report ``<file>``, if generated.
+
+The macro defines the following variables:
+
+``BISON_<Name>_DEFINED``
+  ``True`` is the macro ran successfully
+
+``BISON_<Name>_INPUT``
+  The input source file, an alias for <YaccInput>
+
+``BISON_<Name>_OUTPUT_SOURCE``
+  The source file generated by bison
+
+``BISON_<Name>_OUTPUT_HEADER``
+  The header file generated by bison
+
+``BISON_<Name>_OUTPUTS``
+  All files generated by bison including the source, the header and the report
+
+``BISON_<Name>_COMPILE_FLAGS``
+  Options used in the ``bison`` command line
+
+Example usage:
+
+.. code-block:: cmake
+
+  find_package(BISON)
+  BISON_TARGET(MyParser parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser.cpp
+               DEFINES_FILE ${CMAKE_CURRENT_BINARY_DIR}/parser.h)
+  add_executable(Foo main.cpp ${BISON_MyParser_OUTPUTS})
+#]=======================================================================]
+
+find_program(BISON_EXECUTABLE NAMES bison win-bison win_bison DOC "path to the bison executable")
+mark_as_advanced(BISON_EXECUTABLE)
+
+if(BISON_EXECUTABLE)
+  # the bison commands should be executed with the C locale, otherwise
+  # the message (which are parsed) may be translated
+  set(_Bison_SAVED_LC_ALL "$ENV{LC_ALL}")
+  set(ENV{LC_ALL} C)
+
+  execute_process(COMMAND ${BISON_EXECUTABLE} --version
+    OUTPUT_VARIABLE BISON_version_output
+    ERROR_VARIABLE BISON_version_error
+    RESULT_VARIABLE BISON_version_result
+    OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+  set(ENV{LC_ALL} ${_Bison_SAVED_LC_ALL})
+
+  if(NOT ${BISON_version_result} EQUAL 0)
+    message(SEND_ERROR "Command \"${BISON_EXECUTABLE} --version\" failed with output:\n${BISON_version_error}")
+  else()
+    # Bison++
+    if("${BISON_version_output}" MATCHES "^bison\\+\\+ Version ([^,]+)")
+      set(BISON_VERSION "${CMAKE_MATCH_1}")
+    # GNU Bison
+    elseif("${BISON_version_output}" MATCHES "^bison \\(GNU Bison\\) ([^\n]+)\n")
+      set(BISON_VERSION "${CMAKE_MATCH_1}")
+    elseif("${BISON_version_output}" MATCHES "^GNU Bison (version )?([^\n]+)")
+      set(BISON_VERSION "${CMAKE_MATCH_2}")
+    endif()
+  endif()
+
+  # internal macro
+  # sets BISON_TARGET_cmdopt
+  macro(BISON_TARGET_option_extraopts Options)
+    set(BISON_TARGET_cmdopt "")
+    set(BISON_TARGET_extraopts "${Options}")
+    separate_arguments(BISON_TARGET_extraopts)
+    list(APPEND BISON_TARGET_cmdopt ${BISON_TARGET_extraopts})
+  endmacro()
+
+  # internal macro
+  # sets BISON_TARGET_output_header and BISON_TARGET_cmdopt
+  macro(BISON_TARGET_option_defines BisonOutput Header)
+    if("${Header}" STREQUAL "")
+      # default header path generated by bison (see option -d)
+      string(REGEX REPLACE "^(.*)(\\.[^.]*)$" "\\2" _fileext "${BisonOutput}")
+      string(REPLACE "c" "h" _fileext ${_fileext})
+      string(REGEX REPLACE "^(.*)(\\.[^.]*)$" "\\1${_fileext}"
+          BISON_TARGET_output_header "${BisonOutput}")
+      list(APPEND BISON_TARGET_cmdopt "-d")
+    else()
+      set(BISON_TARGET_output_header "${Header}")
+      list(APPEND BISON_TARGET_cmdopt "--defines=${BISON_TARGET_output_header}")
+    endif()
+  endmacro()
+
+  # internal macro
+  # sets BISON_TARGET_verbose_file and BISON_TARGET_cmdopt
+  macro(BISON_TARGET_option_report_file BisonOutput ReportFile)
+    if("${ReportFile}" STREQUAL "")
+      get_filename_component(BISON_TARGET_output_path "${BisonOutput}" PATH)
+      get_filename_component(BISON_TARGET_output_name "${BisonOutput}" NAME_WE)
+      set(BISON_TARGET_verbose_file
+        "${BISON_TARGET_output_path}/${BISON_TARGET_output_name}.output")
+    else()
+      set(BISON_TARGET_verbose_file "${ReportFile}")
+      list(APPEND BISON_TARGET_cmdopt "--report-file=${BISON_TARGET_verbose_file}")
+    endif()
+    if(NOT IS_ABSOLUTE "${BISON_TARGET_verbose_file}")
+      cmake_policy(GET CMP0088 _BISON_CMP0088
+        PARENT_SCOPE # undocumented, do not use outside of CMake
+        )
+      if("x${_BISON_CMP0088}x" STREQUAL "xNEWx")
+        set(BISON_TARGET_verbose_file "${CMAKE_CURRENT_BINARY_DIR}/${BISON_TARGET_verbose_file}")
+      else()
+        set(BISON_TARGET_verbose_file "${CMAKE_CURRENT_SOURCE_DIR}/${BISON_TARGET_verbose_file}")
+      endif()
+      unset(_BISON_CMP0088)
+    endif()
+  endmacro()
+
+  # internal macro
+  # adds a custom command and sets
+  #   BISON_TARGET_cmdopt, BISON_TARGET_extraoutputs
+  macro(BISON_TARGET_option_verbose Name BisonOutput filename)
+    cmake_policy(GET CMP0088 _BISON_CMP0088
+        PARENT_SCOPE # undocumented, do not use outside of CMake
+        )
+    set(_BISON_WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+    if("x${_BISON_CMP0088}x" STREQUAL "xNEWx")
+      set(_BISON_WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+    endif()
+    unset(_BISON_CMP0088)
+
+    list(APPEND BISON_TARGET_cmdopt "--verbose")
+    list(APPEND BISON_TARGET_outputs
+      "${BISON_TARGET_verbose_file}")
+    if (NOT "${filename}" STREQUAL "")
+      if(IS_ABSOLUTE "${filename}")
+        set(BISON_TARGET_verbose_extra_file "${filename}")
+      else()
+        set(BISON_TARGET_verbose_extra_file "${_BISON_WORKING_DIRECTORY}/${filename}")
+      endif()
+
+      add_custom_command(OUTPUT ${BISON_TARGET_verbose_extra_file}
+        COMMAND ${CMAKE_COMMAND} -E copy
+        "${BISON_TARGET_verbose_file}"
+        "${filename}"
+        VERBATIM
+        DEPENDS
+        "${BISON_TARGET_verbose_file}"
+        COMMENT "[BISON][${Name}] Copying bison verbose table to ${filename}"
+        WORKING_DIRECTORY ${_BISON_WORKING_DIRECTORY})
+      list(APPEND BISON_TARGET_extraoutputs
+        "${BISON_TARGET_verbose_extra_file}")
+      unset(BISON_TARGET_verbose_extra_file)
+      unset(_BISON_WORKING_DIRECTORY)
+    endif()
+  endmacro()
+
+  #============================================================
+  # BISON_TARGET (public macro)
+  #============================================================
+  #
+  macro(BISON_TARGET Name BisonInput BisonOutput)
+    set(BISON_TARGET_outputs "${BisonOutput}")
+    set(BISON_TARGET_extraoutputs "")
+
+    # Parsing parameters
+    set(BISON_TARGET_PARAM_OPTIONS
+      )
+    set(BISON_TARGET_PARAM_ONE_VALUE_KEYWORDS
+      COMPILE_FLAGS
+      DEFINES_FILE
+      REPORT_FILE
+      )
+    set(BISON_TARGET_PARAM_MULTI_VALUE_KEYWORDS
+      VERBOSE
+      )
+    cmake_parse_arguments(
+        BISON_TARGET_ARG
+        "${BISON_TARGET_PARAM_OPTIONS}"
+        "${BISON_TARGET_PARAM_ONE_VALUE_KEYWORDS}"
+        "${BISON_TARGET_PARAM_MULTI_VALUE_KEYWORDS}"
+        ${ARGN}
+    )
+
+    if(NOT "${BISON_TARGET_ARG_UNPARSED_ARGUMENTS}" STREQUAL "")
+      message(SEND_ERROR "Usage")
+    elseif("${BISON_TARGET_ARG_VERBOSE}" MATCHES ";")
+      # [VERBOSE [<file>] hack: <file> is non-multi value by usage
+      message(SEND_ERROR "Usage")
+    else()
+
+      BISON_TARGET_option_extraopts("${BISON_TARGET_ARG_COMPILE_FLAGS}")
+      BISON_TARGET_option_defines("${BisonOutput}" "${BISON_TARGET_ARG_DEFINES_FILE}")
+      BISON_TARGET_option_report_file("${BisonOutput}" "${BISON_TARGET_ARG_REPORT_FILE}")
+      if(NOT "${BISON_TARGET_ARG_VERBOSE}" STREQUAL "")
+        BISON_TARGET_option_verbose(${Name} ${BisonOutput} "${BISON_TARGET_ARG_VERBOSE}")
+      else()
+        # [VERBOSE [<file>]] is used with no argument or is not used
+        set(BISON_TARGET_args "${ARGN}")
+        list(FIND BISON_TARGET_args "VERBOSE" BISON_TARGET_args_indexof_verbose)
+        if(${BISON_TARGET_args_indexof_verbose} GREATER -1)
+          # VERBOSE is used without <file>
+          BISON_TARGET_option_verbose(${Name} ${BisonOutput} "")
+        endif()
+      endif()
+
+      list(APPEND BISON_TARGET_outputs "${BISON_TARGET_output_header}")
+
+      cmake_policy(GET CMP0088 _BISON_CMP0088
+        PARENT_SCOPE # undocumented, do not use outside of CMake
+        )
+      set(_BISON_WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+      set(_BisonInput "${BisonInput}")
+      if("x${_BISON_CMP0088}x" STREQUAL "xNEWx")
+        set(_BISON_WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+        if(NOT IS_ABSOLUTE "${_BisonInput}")
+          set(_BisonInput "${CMAKE_CURRENT_SOURCE_DIR}/${_BisonInput}")
+        endif()
+      endif()
+      unset(_BISON_CMP0088)
+
+      add_custom_command(OUTPUT ${BISON_TARGET_outputs}
+        COMMAND ${BISON_EXECUTABLE} ${BISON_TARGET_cmdopt} -o ${BisonOutput} ${_BisonInput}
+        VERBATIM
+        DEPENDS ${_BisonInput}
+        COMMENT "[BISON][${Name}] Building parser with bison ${BISON_VERSION}"
+        WORKING_DIRECTORY ${_BISON_WORKING_DIRECTORY})
+
+      unset(_BISON_WORKING_DIRECTORY)
+
+      # define target variables
+      set(BISON_${Name}_DEFINED TRUE)
+      set(BISON_${Name}_INPUT ${_BisonInput})
+      set(BISON_${Name}_OUTPUTS ${BISON_TARGET_outputs} ${BISON_TARGET_extraoutputs})
+      set(BISON_${Name}_COMPILE_FLAGS ${BISON_TARGET_cmdopt})
+      set(BISON_${Name}_OUTPUT_SOURCE "${BisonOutput}")
+      set(BISON_${Name}_OUTPUT_HEADER "${BISON_TARGET_output_header}")
+
+      unset(_BisonInput)
+
+    endif()
+  endmacro()
+  #
+  #============================================================
+
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(BISON REQUIRED_VARS  BISON_EXECUTABLE
+                                        VERSION_VAR BISON_VERSION)
diff --git a/share/cmake-3.22/Modules/FindBLAS.cmake b/share/cmake-3.22/Modules/FindBLAS.cmake
new file mode 100644
index 0000000..308138f
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindBLAS.cmake
@@ -0,0 +1,1343 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindBLAS
+--------
+
+Find Basic Linear Algebra Subprograms (BLAS) library
+
+This module finds an installed Fortran library that implements the
+`BLAS linear-algebra interface`_.
+
+At least one of the ``C``, ``CXX``, or ``Fortran`` languages must be enabled.
+
+.. _`BLAS linear-algebra interface`: http://www.netlib.org/blas/
+
+Input Variables
+^^^^^^^^^^^^^^^
+
+The following variables may be set to influence this module's behavior:
+
+``BLA_STATIC``
+  if ``ON`` use static linkage
+
+``BLA_VENDOR``
+  Set to one of the :ref:`BLAS/LAPACK Vendors` to search for BLAS only
+  from the specified vendor.  If not set, all vendors are considered.
+
+``BLA_F95``
+  if ``ON`` tries to find the BLAS95 interfaces
+
+``BLA_PREFER_PKGCONFIG``
+  .. versionadded:: 3.11
+
+  if set ``pkg-config`` will be used to search for a BLAS library first
+  and if one is found that is preferred
+
+``BLA_SIZEOF_INTEGER``
+  .. versionadded:: 3.22
+
+  Specify the BLAS/LAPACK library integer size:
+
+  ``4``
+    Search for a BLAS/LAPACK with 32-bit integer interfaces.
+  ``8``
+    Search for a BLAS/LAPACK with 64-bit integer interfaces.
+  ``ANY``
+    Search for any BLAS/LAPACK.
+    Most likely, a BLAS/LAPACK with 32-bit integer interfaces will be found.
+
+Imported targets
+^^^^^^^^^^^^^^^^
+
+This module defines the following :prop_tgt:`IMPORTED` targets:
+
+``BLAS::BLAS``
+  .. versionadded:: 3.18
+
+  The libraries to use for BLAS, if found.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This module defines the following variables:
+
+``BLAS_FOUND``
+  library implementing the BLAS interface is found
+``BLAS_LINKER_FLAGS``
+  uncached list of required linker flags (excluding ``-l`` and ``-L``).
+``BLAS_LIBRARIES``
+  uncached list of libraries (using full path name) to link against
+  to use BLAS (may be empty if compiler implicitly links BLAS)
+``BLAS95_LIBRARIES``
+  uncached list of libraries (using full path name) to link against
+  to use BLAS95 interface
+``BLAS95_FOUND``
+  library implementing the BLAS95 interface is found
+
+.. _`BLAS/LAPACK Vendors`:
+
+BLAS/LAPACK Vendors
+^^^^^^^^^^^^^^^^^^^
+
+``Generic``
+  Generic reference implementation
+
+``ACML``, ``ACML_MP``, ``ACML_GPU``
+  AMD Core Math Library
+
+``Apple``, ``NAS``
+  Apple BLAS (Accelerate), and Apple NAS (vecLib)
+
+``Arm``, ``Arm_mp``, ``Arm_ilp64``, ``Arm_ilp64_mp``
+  .. versionadded:: 3.18
+
+  Arm Performance Libraries
+
+``ATLAS``
+  Automatically Tuned Linear Algebra Software
+
+``CXML``, ``DXML``
+  Compaq/Digital Extended Math Library
+
+``EML``, ``EML_mt``
+  .. versionadded:: 3.20
+
+  Elbrus Math Library
+
+``FLAME``
+  .. versionadded:: 3.11
+
+  BLIS Framework
+
+``FlexiBLAS``
+  .. versionadded:: 3.19
+
+``Fujitsu_SSL2``, ``Fujitsu_SSL2BLAMP``, ``Fujitsu_SSL2SVE``, ``Fujitsu_SSL2BLAMPSVE``
+  .. versionadded:: 3.20
+
+  Fujitsu SSL2 serial and parallel blas/lapack with SVE instructions
+
+``Goto``
+  GotoBLAS
+
+``IBMESSL``, ``IBMESSL_SMP``
+
+  IBM Engineering and Scientific Subroutine Library
+
+``Intel``
+  Intel MKL 32 bit and 64 bit obsolete versions
+
+``Intel10_32``
+  Intel MKL v10 32 bit, threaded code
+
+``Intel10_64lp``
+  Intel MKL v10+ 64 bit, threaded code, lp64 model
+
+``Intel10_64lp_seq``
+  Intel MKL v10+ 64 bit, sequential code, lp64 model
+
+``Intel10_64ilp``
+  .. versionadded:: 3.13
+
+  Intel MKL v10+ 64 bit, threaded code, ilp64 model
+
+``Intel10_64ilp_seq``
+  .. versionadded:: 3.13
+
+  Intel MKL v10+ 64 bit, sequential code, ilp64 model
+
+``Intel10_64_dyn``
+  .. versionadded:: 3.17
+
+  Intel MKL v10+ 64 bit, single dynamic library
+
+``NVHPC``
+  .. versionadded:: 3.21
+
+  NVIDIA HPC SDK
+
+``OpenBLAS``
+  .. versionadded:: 3.6
+
+``PhiPACK``
+  Portable High Performance ANSI C (PHiPAC)
+
+``SCSL``, ``SCSL_mp``
+  Scientific Computing Software Library
+
+``SGIMATH``
+  SGI Scientific Mathematical Library
+
+``SunPerf``
+  Sun Performance Library
+
+.. _`Intel MKL`:
+
+Intel MKL
+^^^^^^^^^
+
+To use the Intel MKL implementation of BLAS, a project must enable at least
+one of the ``C`` or ``CXX`` languages.  Set ``BLA_VENDOR`` to an Intel MKL
+variant either on the command-line as ``-DBLA_VENDOR=Intel10_64lp`` or in
+project code:
+
+.. code-block:: cmake
+
+  set(BLA_VENDOR Intel10_64lp)
+  find_package(BLAS)
+
+In order to build a project using Intel MKL, and end user must first
+establish an Intel MKL environment:
+
+Intel oneAPI
+  Source the full Intel environment script:
+
+  .. code-block:: shell
+
+    . /opt/intel/oneapi/setvars.sh
+
+  Or, source the MKL component environment script:
+
+  .. code-block:: shell
+
+    . /opt/intel/oneapi/mkl/latest/env/vars.sh
+
+Intel Classic
+  Source the full Intel environment script:
+
+  .. code-block:: shell
+
+    . /opt/intel/bin/compilervars.sh intel64
+
+  Or, source the MKL component environment script:
+
+  .. code-block:: shell
+
+    . /opt/intel/mkl/bin/mklvars.sh intel64
+
+The above environment scripts set the ``MKLROOT`` environment variable
+to the top of the MKL installation.  They also add the location of the
+runtime libraries to the dynamic library loader environment variable for
+your platform (e.g. ``LD_LIBRARY_PATH``).  This is necessary for programs
+linked against MKL to run.
+
+.. note::
+
+  As of Intel oneAPI 2021.2, loading only the MKL component does not
+  make all of its dependencies available.  In particular, the ``iomp5``
+  library must be available separately, or provided by also loading
+  the compiler component environment:
+
+  .. code-block:: shell
+
+    . /opt/intel/oneapi/compiler/latest/env/vars.sh
+
+#]=======================================================================]
+
+# The approach follows that of the ``autoconf`` macro file, ``acx_blas.m4``
+# (distributed at http://ac-archive.sourceforge.net/ac-archive/acx_blas.html).
+
+# Check the language being used
+if(NOT (CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED OR CMAKE_Fortran_COMPILER_LOADED))
+  if(BLAS_FIND_REQUIRED)
+    message(FATAL_ERROR "FindBLAS requires Fortran, C, or C++ to be enabled.")
+  else()
+    message(STATUS "Looking for BLAS... - NOT found (Unsupported languages)")
+    return()
+  endif()
+endif()
+
+function(_add_blas_target)
+  if(BLAS_FOUND AND NOT TARGET BLAS::BLAS)
+    add_library(BLAS::BLAS INTERFACE IMPORTED)
+    if(BLAS_LIBRARIES)
+      set_target_properties(BLAS::BLAS PROPERTIES
+        INTERFACE_LINK_LIBRARIES "${BLAS_LIBRARIES}"
+      )
+    endif()
+    if(BLAS_LINKER_FLAGS)
+      set_target_properties(BLAS::BLAS PROPERTIES
+        INTERFACE_LINK_OPTIONS "${BLAS_LINKER_FLAGS}"
+      )
+    endif()
+  endif()
+endfunction()
+
+if(CMAKE_Fortran_COMPILER_LOADED)
+  include(${CMAKE_CURRENT_LIST_DIR}/CheckFortranFunctionExists.cmake)
+else()
+  include(${CMAKE_CURRENT_LIST_DIR}/CheckFunctionExists.cmake)
+endif()
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+
+if(BLA_PREFER_PKGCONFIG)
+  find_package(PkgConfig)
+  pkg_check_modules(PKGC_BLAS blas)
+  if(PKGC_BLAS_FOUND)
+    set(BLAS_FOUND ${PKGC_BLAS_FOUND})
+    set(BLAS_LIBRARIES "${PKGC_BLAS_LINK_LIBRARIES}")
+    _add_blas_target()
+    return()
+  endif()
+endif()
+
+# TODO: move this stuff to a separate module
+
+function(CHECK_BLAS_LIBRARIES LIBRARIES _prefix _name _flags _list _deps _addlibdir _subdirs)
+  # This function checks for the existence of the combination of libraries
+  # given by _list.  If the combination is found, this checks whether can link
+  # against that library combination using the name of a routine given by _name
+  # using the linker flags given by _flags.  If the combination of libraries is
+  # found and passes the link test, ${LIBRARIES} is set to the list of complete
+  # library paths that have been found.  Otherwise, ${LIBRARIES} is set to FALSE.
+
+  set(_libraries_work TRUE)
+  set(_libraries)
+  set(_combined_name)
+
+  if(BLA_STATIC)
+    if(WIN32)
+      set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES})
+    else()
+      set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
+    endif()
+  else()
+    if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+      # for ubuntu's libblas3gf and liblapack3gf packages
+      set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES} .so.3gf)
+    endif()
+  endif()
+
+  set(_extaddlibdir "${_addlibdir}")
+  if(WIN32)
+    list(APPEND _extaddlibdir ENV LIB)
+  elseif(APPLE)
+    list(APPEND _extaddlibdir ENV DYLD_LIBRARY_PATH)
+  else()
+    list(APPEND _extaddlibdir ENV LD_LIBRARY_PATH)
+  endif()
+  list(APPEND _extaddlibdir "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
+
+  foreach(_library ${_list})
+    if(_library MATCHES "^-")
+      # Respect linker flags as-is (required by MKL)
+      list(APPEND _libraries "${_library}")
+    else()
+      string(REGEX REPLACE "[^A-Za-z0-9]" "_" _lib_var "${_library}")
+      string(APPEND _combined_name "_${_lib_var}")
+      if(NOT "${_deps}" STREQUAL "")
+        string(APPEND _combined_name "_deps")
+      endif()
+      if(_libraries_work)
+        find_library(${_prefix}_${_lib_var}_LIBRARY
+          NAMES ${_library}
+          NAMES_PER_DIR
+          PATHS ${_extaddlibdir}
+          PATH_SUFFIXES ${_subdirs}
+        )
+        mark_as_advanced(${_prefix}_${_lib_var}_LIBRARY)
+        list(APPEND _libraries ${${_prefix}_${_lib_var}_LIBRARY})
+        set(_libraries_work ${${_prefix}_${_lib_var}_LIBRARY})
+      endif()
+    endif()
+  endforeach()
+
+  foreach(_flag ${_flags})
+    string(REGEX REPLACE "[^A-Za-z0-9]" "_" _flag_var "${_flag}")
+    string(APPEND _combined_name "_${_flag_var}")
+  endforeach()
+  if(_libraries_work)
+    # Test this combination of libraries.
+    set(CMAKE_REQUIRED_LIBRARIES ${_flags} ${_libraries} ${_deps})
+    set(CMAKE_REQUIRED_QUIET ${BLAS_FIND_QUIETLY})
+    if(CMAKE_Fortran_COMPILER_LOADED)
+      check_fortran_function_exists("${_name}" ${_prefix}${_combined_name}_WORKS)
+    else()
+      check_function_exists("${_name}_" ${_prefix}${_combined_name}_WORKS)
+    endif()
+    set(CMAKE_REQUIRED_LIBRARIES)
+    set(_libraries_work ${${_prefix}${_combined_name}_WORKS})
+  endif()
+
+  if(_libraries_work)
+    if("${_list}" STREQUAL "")
+      set(_libraries "${LIBRARIES}-PLACEHOLDER-FOR-EMPTY-LIBRARIES")
+    else()
+      list(APPEND _libraries ${_deps})
+    endif()
+  else()
+    set(_libraries FALSE)
+  endif()
+  set(${LIBRARIES} "${_libraries}" PARENT_SCOPE)
+endfunction()
+
+set(BLAS_LINKER_FLAGS)
+set(BLAS_LIBRARIES)
+set(BLAS95_LIBRARIES)
+set(_blas_fphsa_req_var BLAS_LIBRARIES)
+if(NOT $ENV{BLA_VENDOR} STREQUAL "")
+  set(BLA_VENDOR $ENV{BLA_VENDOR})
+else()
+  if(NOT BLA_VENDOR)
+    set(BLA_VENDOR "All")
+  endif()
+endif()
+
+if(NOT BLA_SIZEOF_INTEGER)
+  # in the reality we do not know which API of BLAS/LAPACK is masked in library
+  set(_blas_sizeof_integer "ANY")
+elseif((BLA_SIZEOF_INTEGER STREQUAL "ANY") OR
+       (BLA_SIZEOF_INTEGER STREQUAL "4") OR
+       (BLA_SIZEOF_INTEGER STREQUAL "8"))
+  set(_blas_sizeof_integer ${BLA_SIZEOF_INTEGER})
+else()
+  message(FATAL_ERROR "BLA_SIZEOF_INTEGER can have only <no value>, ANY, 4, or 8 values")
+endif()
+
+# Implicitly linked BLAS libraries?
+if(BLA_VENDOR STREQUAL "All")
+  if(NOT BLAS_LIBRARIES)
+    check_blas_libraries(
+      BLAS_LIBRARIES
+      BLAS
+      sgemm
+      ""
+      ""
+      ""
+      ""
+      ""
+      )
+  endif()
+  if(BLAS_WORKS)
+    # Give a more helpful "found" message
+    set(BLAS_WORKS "implicitly linked")
+    set(_blas_fphsa_req_var BLAS_WORKS)
+  endif()
+endif()
+
+# BLAS in the Intel MKL 10+ library?
+if(BLA_VENDOR MATCHES "Intel" OR BLA_VENDOR STREQUAL "All")
+  if(NOT BLAS_LIBRARIES)
+    if(CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED)
+      # System-specific settings
+      if(WIN32)
+        if(BLA_STATIC)
+          set(BLAS_mkl_DLL_SUFFIX "")
+        else()
+          set(BLAS_mkl_DLL_SUFFIX "_dll")
+        endif()
+      else()
+        if(BLA_STATIC)
+          set(BLAS_mkl_START_GROUP "-Wl,--start-group")
+          set(BLAS_mkl_END_GROUP "-Wl,--end-group")
+        else()
+          set(BLAS_mkl_START_GROUP "")
+          set(BLAS_mkl_END_GROUP "")
+        endif()
+        # Switch to GNU Fortran support layer if needed (but not on Apple, where MKL does not provide it)
+        if(CMAKE_Fortran_COMPILER_LOADED AND CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" AND NOT APPLE)
+            set(BLAS_mkl_INTFACE "gf")
+            set(BLAS_mkl_THREADING "gnu")
+            set(BLAS_mkl_OMP "gomp")
+        else()
+            set(BLAS_mkl_INTFACE "intel")
+            set(BLAS_mkl_THREADING "intel")
+            set(BLAS_mkl_OMP "iomp5")
+        endif()
+        set(BLAS_mkl_LM "-lm")
+        set(BLAS_mkl_LDL "-ldl")
+      endif()
+
+      if(BLAS_FIND_QUIETLY OR NOT BLAS_FIND_REQUIRED)
+        find_package(Threads)
+      else()
+        find_package(Threads REQUIRED)
+      endif()
+
+      if(_blas_sizeof_integer EQUAL 8)
+        set(BLAS_mkl_ILP_MODE "ilp64")
+      elseif(_blas_sizeof_integer EQUAL 4)
+        set(BLAS_mkl_ILP_MODE "lp64")
+      else()
+        if(BLA_VENDOR MATCHES "_64ilp")
+          set(BLAS_mkl_ILP_MODE "ilp64")
+        else()
+          set(BLAS_mkl_ILP_MODE "lp64")
+        endif()
+      endif()
+
+      set(BLAS_SEARCH_LIBS "")
+
+      if(BLA_F95)
+        set(BLAS_mkl_SEARCH_SYMBOL "sgemm_f95")
+        set(_BLAS_LIBRARIES BLAS95_LIBRARIES)
+        if(WIN32)
+          # Find the main file (32-bit or 64-bit)
+          set(BLAS_SEARCH_LIBS_WIN_MAIN "")
+          if(BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All")
+            list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN
+              "mkl_blas95${BLAS_mkl_DLL_SUFFIX} mkl_intel_c${BLAS_mkl_DLL_SUFFIX}")
+          endif()
+
+          if(BLA_VENDOR MATCHES "^Intel10_64i?lp" OR BLA_VENDOR STREQUAL "All")
+            list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN
+              "mkl_blas95_${BLAS_mkl_ILP_MODE}${BLAS_mkl_DLL_SUFFIX} mkl_intel_${BLAS_mkl_ILP_MODE}${BLAS_mkl_DLL_SUFFIX}")
+          endif()
+
+          # Add threading/sequential libs
+          set(BLAS_SEARCH_LIBS_WIN_THREAD "")
+          if(BLA_VENDOR MATCHES "^Intel10_64i?lp$" OR BLA_VENDOR STREQUAL "All")
+            # old version
+            list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
+              "libguide40 mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}")
+            # mkl >= 10.3
+            list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
+              "libiomp5md mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}")
+          endif()
+          if(BLA_VENDOR MATCHES "^Intel10_64i?lp_seq$" OR BLA_VENDOR STREQUAL "All")
+            list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
+              "mkl_sequential${BLAS_mkl_DLL_SUFFIX}")
+          endif()
+
+          # Cartesian product of the above
+          foreach(MAIN ${BLAS_SEARCH_LIBS_WIN_MAIN})
+            foreach(THREAD ${BLAS_SEARCH_LIBS_WIN_THREAD})
+              list(APPEND BLAS_SEARCH_LIBS
+                "${MAIN} ${THREAD} mkl_core${BLAS_mkl_DLL_SUFFIX}")
+            endforeach()
+          endforeach()
+        else()
+          if(BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All")
+            # old version
+            list(APPEND BLAS_SEARCH_LIBS
+              "mkl_blas95 mkl_${BLAS_mkl_INTFACE} mkl_${BLAS_mkl_THREADING}_thread mkl_core guide")
+
+            # mkl >= 10.3
+            list(APPEND BLAS_SEARCH_LIBS
+              "${BLAS_mkl_START_GROUP} mkl_blas95 mkl_${BLAS_mkl_INTFACE} mkl_${BLAS_mkl_THREADING}_thread mkl_core ${BLAS_mkl_END_GROUP} ${BLAS_mkl_OMP}")
+          endif()
+          if(BLA_VENDOR MATCHES "^Intel10_64i?lp$" OR BLA_VENDOR STREQUAL "All")
+            # old version
+            list(APPEND BLAS_SEARCH_LIBS
+              "mkl_blas95 mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_THREADING}_thread mkl_core guide")
+
+            # mkl >= 10.3
+            list(APPEND BLAS_SEARCH_LIBS
+              "${BLAS_mkl_START_GROUP} mkl_blas95_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_THREADING}_thread mkl_core ${BLAS_mkl_END_GROUP} ${BLAS_mkl_OMP}")
+          endif()
+          if(BLA_VENDOR MATCHES "^Intel10_64i?lp_seq$" OR BLA_VENDOR STREQUAL "All")
+            list(APPEND BLAS_SEARCH_LIBS
+              "${BLAS_mkl_START_GROUP} mkl_blas95_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_sequential mkl_core ${BLAS_mkl_END_GROUP}")
+          endif()
+        endif()
+      else()
+        set(BLAS_mkl_SEARCH_SYMBOL sgemm)
+        set(_BLAS_LIBRARIES BLAS_LIBRARIES)
+        if(WIN32)
+          # Find the main file (32-bit or 64-bit)
+          set(BLAS_SEARCH_LIBS_WIN_MAIN "")
+          if(BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All")
+            list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN
+              "mkl_intel_c${BLAS_mkl_DLL_SUFFIX}")
+          endif()
+          if(BLA_VENDOR MATCHES "^Intel10_64i?lp" OR BLA_VENDOR STREQUAL "All")
+            list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN
+              "mkl_intel_${BLAS_mkl_ILP_MODE}${BLAS_mkl_DLL_SUFFIX}")
+          endif()
+
+          # Add threading/sequential libs
+          set(BLAS_SEARCH_LIBS_WIN_THREAD "")
+          if(BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All")
+            list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
+              "libiomp5md mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}")
+          endif()
+          if(BLA_VENDOR MATCHES "^Intel10_64i?lp$" OR BLA_VENDOR STREQUAL "All")
+            # old version
+            list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
+              "libguide40 mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}")
+            # mkl >= 10.3
+            list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
+              "libiomp5md mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}")
+          endif()
+          if(BLA_VENDOR MATCHES "^Intel10_64i?lp_seq$" OR BLA_VENDOR STREQUAL "All")
+            list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
+              "mkl_sequential${BLAS_mkl_DLL_SUFFIX}")
+          endif()
+
+          # Cartesian product of the above
+          foreach(MAIN ${BLAS_SEARCH_LIBS_WIN_MAIN})
+            foreach(THREAD ${BLAS_SEARCH_LIBS_WIN_THREAD})
+              list(APPEND BLAS_SEARCH_LIBS
+                "${MAIN} ${THREAD} mkl_core${BLAS_mkl_DLL_SUFFIX}")
+            endforeach()
+          endforeach()
+        else()
+          if(BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All")
+            # old version
+            list(APPEND BLAS_SEARCH_LIBS
+              "mkl_${BLAS_mkl_INTFACE} mkl_${BLAS_mkl_THREADING}_thread mkl_core guide")
+
+            # mkl >= 10.3
+            list(APPEND BLAS_SEARCH_LIBS
+              "${BLAS_mkl_START_GROUP} mkl_${BLAS_mkl_INTFACE} mkl_${BLAS_mkl_THREADING}_thread mkl_core ${BLAS_mkl_END_GROUP} ${BLAS_mkl_OMP}")
+          endif()
+          if(BLA_VENDOR MATCHES "^Intel10_64i?lp$" OR BLA_VENDOR STREQUAL "All")
+            # old version
+            list(APPEND BLAS_SEARCH_LIBS
+              "mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_THREADING}_thread mkl_core guide")
+
+            # mkl >= 10.3
+            list(APPEND BLAS_SEARCH_LIBS
+              "${BLAS_mkl_START_GROUP} mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_THREADING}_thread mkl_core ${BLAS_mkl_END_GROUP} ${BLAS_mkl_OMP}")
+          endif()
+          if(BLA_VENDOR MATCHES "^Intel10_64i?lp_seq$" OR BLA_VENDOR STREQUAL "All")
+            list(APPEND BLAS_SEARCH_LIBS
+              "${BLAS_mkl_START_GROUP} mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_sequential mkl_core ${BLAS_mkl_END_GROUP}")
+          endif()
+
+          #older versions of intel mkl libs
+          if(BLA_VENDOR STREQUAL "Intel" OR BLA_VENDOR STREQUAL "All")
+            list(APPEND BLAS_SEARCH_LIBS
+              "mkl")
+            list(APPEND BLAS_SEARCH_LIBS
+              "mkl_ia32")
+            list(APPEND BLAS_SEARCH_LIBS
+              "mkl_em64t")
+          endif()
+        endif()
+      endif()
+
+      if(BLA_VENDOR MATCHES "^Intel10_64_dyn$" OR BLA_VENDOR STREQUAL "All")
+        # mkl >= 10.3 with single dynamic library
+        list(APPEND BLAS_SEARCH_LIBS
+          "mkl_rt")
+      endif()
+
+      # MKL uses a multitude of partially platform-specific subdirectories:
+      if(BLA_VENDOR STREQUAL "Intel10_32")
+        set(BLAS_mkl_ARCH_NAME "ia32")
+      else()
+        set(BLAS_mkl_ARCH_NAME "intel64")
+      endif()
+      if(WIN32)
+        set(BLAS_mkl_OS_NAME "win")
+      elseif(APPLE)
+        set(BLAS_mkl_OS_NAME "mac")
+      else()
+        set(BLAS_mkl_OS_NAME "lin")
+      endif()
+      if(DEFINED ENV{MKLROOT})
+        file(TO_CMAKE_PATH "$ENV{MKLROOT}" BLAS_mkl_MKLROOT)
+        # If MKLROOT points to the subdirectory 'mkl', use the parent directory instead
+        # so we can better detect other relevant libraries in 'compiler' or 'tbb':
+        get_filename_component(BLAS_mkl_MKLROOT_LAST_DIR "${BLAS_mkl_MKLROOT}" NAME)
+        if(BLAS_mkl_MKLROOT_LAST_DIR STREQUAL "mkl")
+            get_filename_component(BLAS_mkl_MKLROOT "${BLAS_mkl_MKLROOT}" DIRECTORY)
+        endif()
+      endif()
+      set(BLAS_mkl_LIB_PATH_SUFFIXES
+          "compiler/lib" "compiler/lib/${BLAS_mkl_ARCH_NAME}_${BLAS_mkl_OS_NAME}"
+          "compiler/lib/${BLAS_mkl_ARCH_NAME}"
+          "mkl/lib" "mkl/lib/${BLAS_mkl_ARCH_NAME}_${BLAS_mkl_OS_NAME}"
+          "mkl/lib/${BLAS_mkl_ARCH_NAME}"
+          "lib" "lib/${BLAS_mkl_ARCH_NAME}_${BLAS_mkl_OS_NAME}"
+          "lib/${BLAS_mkl_ARCH_NAME}"
+          )
+
+      foreach(_search ${BLAS_SEARCH_LIBS})
+        string(REPLACE " " ";" _search ${_search})
+        if(NOT ${_BLAS_LIBRARIES})
+          check_blas_libraries(
+            ${_BLAS_LIBRARIES}
+            BLAS
+            ${BLAS_mkl_SEARCH_SYMBOL}
+            ""
+            "${_search}"
+            "${CMAKE_THREAD_LIBS_INIT};${BLAS_mkl_LM};${BLAS_mkl_LDL}"
+            "${BLAS_mkl_MKLROOT}"
+            "${BLAS_mkl_LIB_PATH_SUFFIXES}"
+            )
+        endif()
+      endforeach()
+
+      unset(_search)
+      unset(BLAS_mkl_ILP_MODE)
+      unset(BLAS_mkl_INTFACE)
+      unset(BLAS_mkl_THREADING)
+      unset(BLAS_mkl_OMP)
+      unset(BLAS_mkl_DLL_SUFFIX)
+      unset(BLAS_mkl_LM)
+      unset(BLAS_mkl_LDL)
+      unset(BLAS_mkl_MKLROOT)
+      unset(BLAS_mkl_MKLROOT_LAST_DIR)
+      unset(BLAS_mkl_ARCH_NAME)
+      unset(BLAS_mkl_OS_NAME)
+      unset(BLAS_mkl_LIB_PATH_SUFFIXES)
+    endif()
+  endif()
+endif()
+
+if(BLA_F95)
+  find_package_handle_standard_args(BLAS REQUIRED_VARS BLAS95_LIBRARIES)
+  set(BLAS95_FOUND ${BLAS_FOUND})
+  if(BLAS_FOUND)
+    set(BLAS_LIBRARIES "${BLAS95_LIBRARIES}")
+  endif()
+endif()
+
+# gotoblas? (http://www.tacc.utexas.edu/tacc-projects/gotoblas2)
+if(BLA_VENDOR STREQUAL "Goto" OR BLA_VENDOR STREQUAL "All")
+  if(NOT BLAS_LIBRARIES)
+    check_blas_libraries(
+      BLAS_LIBRARIES
+      BLAS
+      sgemm
+      ""
+      "goto2"
+      ""
+      ""
+      ""
+      )
+  endif()
+endif()
+
+# FlexiBLAS? (http://www.mpi-magdeburg.mpg.de/mpcsc/software/FlexiBLAS/)
+if(BLA_VENDOR STREQUAL "FlexiBLAS" OR BLA_VENDOR STREQUAL "All")
+  set(_blas_flexiblas_lib "flexiblas")
+
+  if(_blas_sizeof_integer EQUAL 8)
+    string(APPEND _blas_flexiblas_lib "64")
+  endif()
+
+  if(NOT BLAS_LIBRARIES)
+    check_blas_libraries(
+      BLAS_LIBRARIES
+      BLAS
+      sgemm
+      ""
+      "${_blas_flexiblas_lib}"
+      ""
+      ""
+      ""
+      )
+  endif()
+
+  unset(_blas_flexiblas_lib)
+endif()
+
+# OpenBLAS? (http://www.openblas.net)
+if(BLA_VENDOR STREQUAL "OpenBLAS" OR BLA_VENDOR STREQUAL "All")
+  set(_blas_openblas_lib "openblas")
+
+  if(_blas_sizeof_integer EQUAL 8)
+    string(APPEND _blas_openblas_lib "64")
+  endif()
+
+  if(NOT BLAS_LIBRARIES)
+    check_blas_libraries(
+      BLAS_LIBRARIES
+      BLAS
+      sgemm
+      ""
+      "${_blas_openblas_lib}"
+      ""
+      ""
+      ""
+      )
+  endif()
+  if(NOT BLAS_LIBRARIES AND (CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED))
+    if(BLAS_FIND_QUIETLY OR NOT BLAS_FIND_REQUIRED)
+      find_package(Threads)
+    else()
+      find_package(Threads REQUIRED)
+    endif()
+    set(_threadlibs "${CMAKE_THREAD_LIBS_INIT}")
+    if(BLA_STATIC)
+      if (CMAKE_C_COMPILER_LOADED)
+        find_package(OpenMP COMPONENTS C)
+        list(PREPEND _threadlibs "${OpenMP_C_LIBRARIES}")
+      elseif(CMAKE_CXX_COMPILER_LOADED)
+        find_package(OpenMP COMPONENTS CXX)
+        list(PREPEND _threadlibs "${OpenMP_CXX_LIBRARIES}")
+      endif()
+    endif()
+    check_blas_libraries(
+      BLAS_LIBRARIES
+      BLAS
+      sgemm
+      ""
+      "${_blas_openblas_lib}"
+      "${_threadlibs}"
+      ""
+      ""
+      )
+    unset(_threadlibs)
+  endif()
+
+  unset(_blas_openblas_lib)
+endif()
+
+# ArmPL blas library? (https://developer.arm.com/tools-and-software/server-and-hpc/compile/arm-compiler-for-linux/arm-performance-libraries)
+if(BLA_VENDOR MATCHES "Arm" OR BLA_VENDOR STREQUAL "All")
+
+   # Check for 64bit Integer support
+  if(_blas_sizeof_integer EQUAL 8)
+    set(_blas_armpl_lib "armpl_ilp64")
+  elseif(_blas_sizeof_integer EQUAL 4)
+    set(_blas_armpl_lib "armpl_lp64")
+  else()
+    if(BLA_VENDOR MATCHES "_ilp64")
+      set(_blas_armpl_lib "armpl_ilp64")
+    else()
+      set(_blas_armpl_lib "armpl_lp64")
+    endif()
+  endif()
+
+   # Check for OpenMP support, VIA BLA_VENDOR of Arm_mp or Arm_ipl64_mp
+   if(BLA_VENDOR MATCHES "_mp")
+     string(APPEND _blas_armpl_lib "_mp")
+   endif()
+
+   if(NOT BLAS_LIBRARIES)
+     check_blas_libraries(
+       BLAS_LIBRARIES
+       BLAS
+       sgemm
+       ""
+       "${_blas_armpl_lib}"
+       ""
+       ""
+       ""
+       )
+  endif()
+  unset(_blas_armpl_lib)
+endif()
+
+# FLAME's blis library? (https://github.com/flame/blis)
+if(BLA_VENDOR STREQUAL "FLAME" OR BLA_VENDOR STREQUAL "All")
+  set(_blas_flame_lib "blis")
+
+  if(_blas_sizeof_integer EQUAL 8)
+    string(APPEND _blas_flame_lib "64")
+  endif()
+
+  if(NOT BLAS_LIBRARIES)
+    check_blas_libraries(
+      BLAS_LIBRARIES
+      BLAS
+      sgemm
+      ""
+      "${_blas_flame_lib}"
+      ""
+      ""
+      ""
+      )
+  endif()
+
+  unset(_blas_flame_lib)
+endif()
+
+# BLAS in the ATLAS library? (http://math-atlas.sourceforge.net/)
+if(BLA_VENDOR STREQUAL "ATLAS" OR BLA_VENDOR STREQUAL "All")
+  if(NOT BLAS_LIBRARIES)
+    check_blas_libraries(
+      BLAS_LIBRARIES
+      BLAS
+      dgemm
+      ""
+      "blas;f77blas;atlas"
+      ""
+      ""
+      ""
+      )
+  endif()
+endif()
+
+# BLAS in PhiPACK libraries? (requires generic BLAS lib, too)
+if(BLA_VENDOR STREQUAL "PhiPACK" OR BLA_VENDOR STREQUAL "All")
+  if(NOT BLAS_LIBRARIES)
+    check_blas_libraries(
+      BLAS_LIBRARIES
+      BLAS
+      sgemm
+      ""
+      "sgemm;dgemm;blas"
+      ""
+      ""
+      ""
+      )
+  endif()
+endif()
+
+# BLAS in Alpha CXML library?
+if(BLA_VENDOR STREQUAL "CXML" OR BLA_VENDOR STREQUAL "All")
+  if(_blas_sizeof_integer EQUAL 8)
+    if(BLA_VENDOR STREQUAL "CXML")
+      message(FATAL_ERROR "CXML does not support Int64 type")
+    endif()
+  else()
+    if(NOT BLAS_LIBRARIES)
+      check_blas_libraries(
+        BLAS_LIBRARIES
+        BLAS
+        sgemm
+        ""
+        "cxml"
+        ""
+        ""
+        ""
+        )
+    endif()
+  endif()
+endif()
+
+# BLAS in Alpha DXML library? (now called CXML, see above)
+if(BLA_VENDOR STREQUAL "DXML" OR BLA_VENDOR STREQUAL "All")
+  if(_blas_sizeof_integer EQUAL 8)
+    if(BLA_VENDOR STREQUAL "DXML")
+      message(FATAL_ERROR "DXML does not support Int64 type")
+    endif()
+  else()
+    if(NOT BLAS_LIBRARIES)
+      check_blas_libraries(
+        BLAS_LIBRARIES
+        BLAS
+        sgemm
+        ""
+        "dxml"
+        ""
+        ""
+        ""
+        )
+    endif()
+  endif()
+endif()
+
+# BLAS in Sun Performance library?
+if(BLA_VENDOR STREQUAL "SunPerf" OR BLA_VENDOR STREQUAL "All")
+  if(NOT BLAS_LIBRARIES)
+    check_blas_libraries(
+      BLAS_LIBRARIES
+      BLAS
+      sgemm
+      "-xlic_lib=sunperf"
+      "sunperf;sunmath"
+      ""
+      ""
+      ""
+      )
+    if(BLAS_LIBRARIES)
+      set(BLAS_LINKER_FLAGS "-xlic_lib=sunperf")
+    endif()
+  endif()
+endif()
+
+# BLAS in SCSL library?  (SGI/Cray Scientific Library)
+if(BLA_VENDOR MATCHES "SCSL" OR BLA_VENDOR STREQUAL "All")
+  set(_blas_scsl_lib "scs")
+
+  if(_blas_sizeof_integer EQUAL 8)
+    string(APPEND _blas_scsl_lib "_i8")
+  endif()
+  if(BLA_VENDOR MATCHES "_mp")
+    string(APPEND _blas_scsl_lib "_mp")
+  endif()
+
+  if(NOT BLAS_LIBRARIES)
+    check_blas_libraries(
+      BLAS_LIBRARIES
+      BLAS
+      sgemm
+      ""
+      "${_blas_scsl_lib}"
+      ""
+      ""
+      ""
+      )
+  endif()
+
+  unset(_blas_scsl_lib)
+endif()
+
+# BLAS in SGIMATH library?
+if(BLA_VENDOR STREQUAL "SGIMATH" OR BLA_VENDOR STREQUAL "All")
+  if(NOT BLAS_LIBRARIES)
+    check_blas_libraries(
+      BLAS_LIBRARIES
+      BLAS
+      sgemm
+      ""
+      "complib.sgimath"
+      ""
+      ""
+      ""
+      )
+  endif()
+endif()
+
+# BLAS in IBM ESSL library?
+if(BLA_VENDOR MATCHES "IBMESSL" OR BLA_VENDOR STREQUAL "All")
+  set(_blas_essl_lib "essl")
+
+  if(BLA_VENDOR MATCHES "_SMP")
+    string(APPEND _blas_essl_lib "smp")
+  endif()
+  if(_blas_sizeof_integer EQUAL 8)
+    string(APPEND _blas_essl_lib "6464")
+  endif()
+
+  if(NOT BLAS_LIBRARIES)
+    check_blas_libraries(
+      BLAS_LIBRARIES
+      BLAS
+      sgemm
+      ""
+      "${_blas_essl_lib}"
+      ""
+      ""
+      ""
+      )
+  endif()
+
+  unset(_blas_essl_lib)
+endif()
+
+# BLAS in acml library?
+if(BLA_VENDOR MATCHES "ACML" OR BLA_VENDOR STREQUAL "All")
+  if(((BLA_VENDOR STREQUAL "ACML") AND (NOT BLAS_ACML_LIB_DIRS)) OR
+    ((BLA_VENDOR STREQUAL "ACML_MP") AND (NOT BLAS_ACML_MP_LIB_DIRS)) OR
+    ((BLA_VENDOR STREQUAL "ACML_GPU") AND (NOT BLAS_ACML_GPU_LIB_DIRS))
+    )
+  # try to find acml in "standard" paths
+  if(WIN32)
+    file(GLOB _ACML_ROOT "C:/AMD/acml*/ACML-EULA.txt")
+  else()
+    file(GLOB _ACML_ROOT "/opt/acml*/ACML-EULA.txt")
+  endif()
+  if(WIN32)
+    file(GLOB _ACML_GPU_ROOT "C:/AMD/acml*/GPGPUexamples")
+  else()
+    file(GLOB _ACML_GPU_ROOT "/opt/acml*/GPGPUexamples")
+  endif()
+  list(GET _ACML_ROOT 0 _ACML_ROOT)
+  list(GET _ACML_GPU_ROOT 0 _ACML_GPU_ROOT)
+  if(_ACML_ROOT)
+    get_filename_component(_ACML_ROOT ${_ACML_ROOT} PATH)
+    if(_blas_sizeof_integer EQUAL 8)
+      set(_ACML_PATH_SUFFIX "_int64")
+    else()
+      set(_ACML_PATH_SUFFIX "")
+    endif()
+    if(CMAKE_Fortran_COMPILER_ID STREQUAL "Intel")
+      set(_ACML_COMPILER32 "ifort32")
+      set(_ACML_COMPILER64 "ifort64")
+    elseif(CMAKE_Fortran_COMPILER_ID STREQUAL "IntelLLVM")
+      # 32-bit not supported
+      set(_ACML_COMPILER64 "ifx")
+    elseif(CMAKE_Fortran_COMPILER_ID STREQUAL "SunPro")
+      set(_ACML_COMPILER32 "sun32")
+      set(_ACML_COMPILER64 "sun64")
+    elseif(CMAKE_Fortran_COMPILER_ID STREQUAL "PGI")
+      set(_ACML_COMPILER32 "pgi32")
+      if(WIN32)
+        set(_ACML_COMPILER64 "win64")
+      else()
+        set(_ACML_COMPILER64 "pgi64")
+      endif()
+    elseif(CMAKE_Fortran_COMPILER_ID STREQUAL "Open64")
+      # 32 bit builds not supported on Open64 but for code simplicity
+      # We'll just use the same directory twice
+      set(_ACML_COMPILER32 "open64_64")
+      set(_ACML_COMPILER64 "open64_64")
+    elseif(CMAKE_Fortran_COMPILER_ID STREQUAL "NAG")
+      set(_ACML_COMPILER32 "nag32")
+      set(_ACML_COMPILER64 "nag64")
+    else()
+      set(_ACML_COMPILER32 "gfortran32")
+      set(_ACML_COMPILER64 "gfortran64")
+    endif()
+
+    if(BLA_VENDOR STREQUAL "ACML_MP")
+      set(_ACML_MP_LIB_DIRS
+        "${_ACML_ROOT}/${_ACML_COMPILER32}_mp${_ACML_PATH_SUFFIX}/lib"
+        "${_ACML_ROOT}/${_ACML_COMPILER64}_mp${_ACML_PATH_SUFFIX}/lib")
+    else()
+      set(_ACML_LIB_DIRS
+        "${_ACML_ROOT}/${_ACML_COMPILER32}${_ACML_PATH_SUFFIX}/lib"
+        "${_ACML_ROOT}/${_ACML_COMPILER64}${_ACML_PATH_SUFFIX}/lib")
+    endif()
+  endif()
+elseif(BLAS_${BLA_VENDOR}_LIB_DIRS)
+  set(_${BLA_VENDOR}_LIB_DIRS ${BLAS_${BLA_VENDOR}_LIB_DIRS})
+endif()
+
+if(BLA_VENDOR STREQUAL "ACML_MP")
+  foreach(BLAS_ACML_MP_LIB_DIRS ${_ACML_MP_LIB_DIRS})
+    check_blas_libraries(
+      BLAS_LIBRARIES
+      BLAS
+      sgemm
+      "" "acml_mp;acml_mv" "" ${BLAS_ACML_MP_LIB_DIRS} ""
+      )
+    if(BLAS_LIBRARIES)
+      break()
+    endif()
+  endforeach()
+elseif(BLA_VENDOR STREQUAL "ACML_GPU")
+  foreach(BLAS_ACML_GPU_LIB_DIRS ${_ACML_GPU_LIB_DIRS})
+    check_blas_libraries(
+      BLAS_LIBRARIES
+      BLAS
+      sgemm
+      "" "acml;acml_mv;CALBLAS" "" ${BLAS_ACML_GPU_LIB_DIRS} ""
+      )
+    if(BLAS_LIBRARIES)
+      break()
+    endif()
+  endforeach()
+else()
+  foreach(BLAS_ACML_LIB_DIRS ${_ACML_LIB_DIRS})
+    check_blas_libraries(
+      BLAS_LIBRARIES
+      BLAS
+      sgemm
+      "" "acml;acml_mv" "" ${BLAS_ACML_LIB_DIRS} ""
+      )
+    if(BLAS_LIBRARIES)
+      break()
+    endif()
+  endforeach()
+endif()
+
+# Either acml or acml_mp should be in LD_LIBRARY_PATH but not both
+if(NOT BLAS_LIBRARIES)
+  check_blas_libraries(
+    BLAS_LIBRARIES
+    BLAS
+    sgemm
+    ""
+    "acml;acml_mv"
+    ""
+    ""
+    ""
+    )
+endif()
+if(NOT BLAS_LIBRARIES)
+  check_blas_libraries(
+    BLAS_LIBRARIES
+    BLAS
+    sgemm
+    ""
+    "acml_mp;acml_mv"
+    ""
+    ""
+    ""
+    )
+endif()
+if(NOT BLAS_LIBRARIES)
+  check_blas_libraries(
+    BLAS_LIBRARIES
+    BLAS
+    sgemm
+    ""
+    "acml;acml_mv;CALBLAS"
+    ""
+    ""
+    ""
+    )
+endif()
+endif() # ACML
+
+# Apple BLAS library?
+if(BLA_VENDOR STREQUAL "Apple" OR BLA_VENDOR STREQUAL "All")
+  if(_blas_sizeof_integer EQUAL 8)
+    if(BLA_VENDOR STREQUAL "Apple")
+      message(FATAL_ERROR "Accelerate Framework does not support Int64 type")
+    endif()
+  else()
+    if(NOT BLAS_LIBRARIES)
+      check_blas_libraries(
+        BLAS_LIBRARIES
+        BLAS
+        dgemm
+        ""
+        "Accelerate"
+        ""
+        ""
+        ""
+        )
+    endif()
+  endif()
+endif()
+
+# Apple NAS (vecLib) library?
+if(BLA_VENDOR STREQUAL "NAS" OR BLA_VENDOR STREQUAL "All")
+  if(_blas_sizeof_integer EQUAL 8)
+    if(BLA_VENDOR STREQUAL "NAS")
+      message(FATAL_ERROR "Accelerate Framework does not support Int64 type")
+    endif()
+  else()
+    if(NOT BLAS_LIBRARIES)
+      check_blas_libraries(
+        BLAS_LIBRARIES
+        BLAS
+        dgemm
+        ""
+        "vecLib"
+        ""
+        ""
+        ""
+        )
+    endif()
+  endif()
+endif()
+
+# Elbrus Math Library?
+if(BLA_VENDOR MATCHES "EML" OR BLA_VENDOR STREQUAL "All")
+
+  set(_blas_eml_lib "eml")
+
+  if(_blas_sizeof_integer EQUAL 8)
+    string(APPEND _blas_eml_lib "_ilp64")
+  endif()
+  # Check for OpenMP support, VIA BLA_VENDOR of eml_mt
+  if(BLA_VENDOR MATCHES "_mt")
+    string(APPEND _blas_eml_lib "_mt")
+  endif()
+
+  if(NOT BLAS_LIBRARIES)
+    check_blas_libraries(
+      BLAS_LIBRARIES
+      BLAS
+      sgemm
+      ""
+      "${_blas_eml_lib}"
+      ""
+      ""
+      ""
+      )
+  endif()
+  unset(_blas_eml_lib)
+endif()
+
+# Fujitsu SSL2 Library?
+if(NOT BLAS_LIBRARIES
+    AND (BLA_VENDOR MATCHES "^Fujitsu_SSL2" OR BLA_VENDOR STREQUAL "All"))
+  set(_blas_fjlapack_lib "fjlapack")
+  set(_blas_fjlapack_flags "-Kopenmp")
+
+  if(BLA_VENDOR MATCHES "BLAMP")
+    string(APPEND _blas_fjlapack_lib "ex")
+  endif()
+  if(BLA_VENDOR MATCHES "SVE")
+    string(APPEND _blas_fjlapack_lib "sve")
+  endif()
+  if(_blas_sizeof_integer EQUAL 8)
+    string(APPEND _blas_fjlapack_lib "_ilp64")
+  endif()
+
+  if(NOT BLAS_LIBRARIES)
+    check_blas_libraries(
+      BLAS_LIBRARIES
+      BLAS
+      sgemm
+      "${_blas_fjlapack_flags}"
+      "${_blas_fjlapack_lib}"
+      ""
+      ""
+      ""
+      )
+    if(BLAS_LIBRARIES)
+      set(BLAS_LINKER_FLAGS ${_blas_fjlapack_flags})
+    endif()
+  endif()
+
+  unset(_blas_fjlapack_flags)
+  unset(_blas_fjlapack_lib)
+endif()
+
+# BLAS in nVidia HPC SDK? (https://developer.nvidia.com/hpc-sdk)
+if(BLA_VENDOR STREQUAL "NVHPC" OR BLA_VENDOR STREQUAL "All")
+  set(_blas_nvhpc_lib "blas")
+
+  if(_blas_sizeof_integer EQUAL 8)
+    string(APPEND _blas_nvhpc_lib "_ilp64")
+  elseif(_blas_sizeof_integer EQUAL 4)
+    string(APPEND _blas_nvhpc_lib "_lp64")
+  endif()
+
+  if(NOT BLAS_LIBRARIES)
+    check_blas_libraries(
+      BLAS_LIBRARIES
+      BLAS
+      sgemm
+      ""
+      "${_blas_nvhpc_lib}"
+      ""
+      ""
+      ""
+      )
+  endif()
+
+  # an additional check for NVHPC 2020
+  # which does not have differentiation
+  # between lp64 and ilp64 modes
+  if(NOT BLAS_LIBRARIES AND NOT _blas_sizeof_integer EQUAL 8)
+    set(_blas_nvhpc_lib "blas")
+
+    check_blas_libraries(
+      BLAS_LIBRARIES
+      BLAS
+      sgemm
+      ""
+      "${_blas_nvhpc_lib}"
+      ""
+      ""
+      ""
+      )
+  endif()
+
+  unset(_blas_nvhpc_lib)
+endif()
+
+# Generic BLAS library?
+if(BLA_VENDOR STREQUAL "Generic" OR
+   BLA_VENDOR STREQUAL "All")
+  set(_blas_generic_lib "blas")
+
+  if(_blas_sizeof_integer EQUAL 8)
+    string(APPEND _blas_generic_lib "64")
+  endif()
+
+  if(NOT BLAS_LIBRARIES)
+    check_blas_libraries(
+      BLAS_LIBRARIES
+      BLAS
+      sgemm
+      ""
+      "${_blas_generic_lib}"
+      ""
+      ""
+      ""
+      )
+  endif()
+
+  unset(_blas_generic_lib)
+endif()
+
+# On compilers that implicitly link BLAS (i.e. CrayPrgEnv) we used a
+# placeholder for empty BLAS_LIBRARIES to get through our logic above.
+if(BLAS_LIBRARIES STREQUAL "BLAS_LIBRARIES-PLACEHOLDER-FOR-EMPTY-LIBRARIES")
+  set(BLAS_LIBRARIES "")
+endif()
+
+if(NOT BLA_F95)
+  find_package_handle_standard_args(BLAS REQUIRED_VARS ${_blas_fphsa_req_var})
+endif()
+
+_add_blas_target()
+unset(_blas_fphsa_req_var)
+unset(_blas_sizeof_integer)
+unset(_BLAS_LIBRARIES)
diff --git a/share/cmake-3.22/Modules/FindBZip2.cmake b/share/cmake-3.22/Modules/FindBZip2.cmake
new file mode 100644
index 0000000..355c4bb
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindBZip2.cmake
@@ -0,0 +1,107 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindBZip2
+---------
+
+Try to find BZip2
+
+IMPORTED Targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.12
+
+This module defines :prop_tgt:`IMPORTED` target ``BZip2::BZip2``, if
+BZip2 has been found.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This module defines the following variables:
+
+``BZIP2_FOUND``
+  system has BZip2
+``BZIP2_INCLUDE_DIRS``
+  .. versionadded:: 3.12
+    the BZip2 include directories
+``BZIP2_LIBRARIES``
+  Link these to use BZip2
+``BZIP2_NEED_PREFIX``
+  this is set if the functions are prefixed with ``BZ2_``
+``BZIP2_VERSION_STRING``
+  the version of BZip2 found
+
+Cache variables
+^^^^^^^^^^^^^^^
+
+The following cache variables may also be set:
+
+``BZIP2_INCLUDE_DIR``
+  the BZip2 include directory
+#]=======================================================================]
+
+set(_BZIP2_PATHS PATHS
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\Bzip2;InstallPath]"
+  )
+
+find_path(BZIP2_INCLUDE_DIR bzlib.h ${_BZIP2_PATHS} PATH_SUFFIXES include)
+
+if (NOT BZIP2_LIBRARIES)
+    find_library(BZIP2_LIBRARY_RELEASE NAMES bz2 bzip2 libbz2 libbzip2 NAMES_PER_DIR ${_BZIP2_PATHS} PATH_SUFFIXES lib)
+    find_library(BZIP2_LIBRARY_DEBUG NAMES bz2d bzip2d libbz2d libbzip2d NAMES_PER_DIR ${_BZIP2_PATHS} PATH_SUFFIXES lib)
+
+    include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
+    SELECT_LIBRARY_CONFIGURATIONS(BZIP2)
+else ()
+    file(TO_CMAKE_PATH "${BZIP2_LIBRARIES}" BZIP2_LIBRARIES)
+endif ()
+
+if (BZIP2_INCLUDE_DIR AND EXISTS "${BZIP2_INCLUDE_DIR}/bzlib.h")
+    file(STRINGS "${BZIP2_INCLUDE_DIR}/bzlib.h" BZLIB_H REGEX "bzip2/libbzip2 version [0-9]+\\.[^ ]+ of [0-9]+ ")
+    string(REGEX REPLACE ".* bzip2/libbzip2 version ([0-9]+\\.[^ ]+) of [0-9]+ .*" "\\1" BZIP2_VERSION_STRING "${BZLIB_H}")
+endif ()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(BZip2
+                                  REQUIRED_VARS BZIP2_LIBRARIES BZIP2_INCLUDE_DIR
+                                  VERSION_VAR BZIP2_VERSION_STRING)
+
+if (BZIP2_FOUND)
+  set(BZIP2_INCLUDE_DIRS ${BZIP2_INCLUDE_DIR})
+  include(${CMAKE_CURRENT_LIST_DIR}/CheckSymbolExists.cmake)
+  include(${CMAKE_CURRENT_LIST_DIR}/CMakePushCheckState.cmake)
+  cmake_push_check_state()
+  set(CMAKE_REQUIRED_QUIET ${BZip2_FIND_QUIETLY})
+  set(CMAKE_REQUIRED_INCLUDES ${BZIP2_INCLUDE_DIR})
+  set(CMAKE_REQUIRED_LIBRARIES ${BZIP2_LIBRARIES})
+  CHECK_SYMBOL_EXISTS(BZ2_bzCompressInit "bzlib.h" BZIP2_NEED_PREFIX)
+  cmake_pop_check_state()
+
+  if(NOT TARGET BZip2::BZip2)
+    add_library(BZip2::BZip2 UNKNOWN IMPORTED)
+    set_target_properties(BZip2::BZip2 PROPERTIES
+      INTERFACE_INCLUDE_DIRECTORIES "${BZIP2_INCLUDE_DIRS}")
+
+    if(BZIP2_LIBRARY_RELEASE)
+      set_property(TARGET BZip2::BZip2 APPEND PROPERTY
+        IMPORTED_CONFIGURATIONS RELEASE)
+      set_target_properties(BZip2::BZip2 PROPERTIES
+        IMPORTED_LOCATION_RELEASE "${BZIP2_LIBRARY_RELEASE}")
+    endif()
+
+    if(BZIP2_LIBRARY_DEBUG)
+      set_property(TARGET BZip2::BZip2 APPEND PROPERTY
+        IMPORTED_CONFIGURATIONS DEBUG)
+      set_target_properties(BZip2::BZip2 PROPERTIES
+        IMPORTED_LOCATION_DEBUG "${BZIP2_LIBRARY_DEBUG}")
+    endif()
+
+    if(NOT BZIP2_LIBRARY_RELEASE AND NOT BZIP2_LIBRARY_DEBUG)
+      set_property(TARGET BZip2::BZip2 APPEND PROPERTY
+        IMPORTED_LOCATION "${BZIP2_LIBRARY}")
+    endif()
+  endif()
+endif ()
+
+mark_as_advanced(BZIP2_INCLUDE_DIR)
diff --git a/share/cmake-3.18/Modules/FindBacktrace.cmake b/share/cmake-3.22/Modules/FindBacktrace.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindBacktrace.cmake
rename to share/cmake-3.22/Modules/FindBacktrace.cmake
diff --git a/share/cmake-3.22/Modules/FindBoost.cmake b/share/cmake-3.22/Modules/FindBoost.cmake
new file mode 100644
index 0000000..38faca2
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindBoost.cmake
@@ -0,0 +1,2573 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindBoost
+---------
+
+Find Boost include dirs and libraries
+
+Use this module by invoking :command:`find_package` with the form:
+
+.. code-block:: cmake
+
+  find_package(Boost
+    [version] [EXACT]      # Minimum or EXACT version e.g. 1.67.0
+    [REQUIRED]             # Fail with error if Boost is not found
+    [COMPONENTS <libs>...] # Boost libraries by their canonical name
+                           # e.g. "date_time" for "libboost_date_time"
+    [OPTIONAL_COMPONENTS <libs>...]
+                           # Optional Boost libraries by their canonical name)
+    )                      # e.g. "date_time" for "libboost_date_time"
+
+This module finds headers and requested component libraries OR a CMake
+package configuration file provided by a "Boost CMake" build.  For the
+latter case skip to the :ref:`Boost CMake` section below.
+
+.. versionadded:: 3.7
+  ``bzip2`` and ``zlib`` components (Windows only).
+
+.. versionadded:: 3.11
+  The ``OPTIONAL_COMPONENTS`` option.
+
+.. versionadded:: 3.13
+  ``stacktrace_*`` components.
+
+.. versionadded:: 3.19
+  ``bzip2`` and ``zlib`` components on all platforms.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This module defines the following variables:
+
+``Boost_FOUND``
+  True if headers and requested libraries were found.
+
+``Boost_INCLUDE_DIRS``
+  Boost include directories.
+
+``Boost_LIBRARY_DIRS``
+  Link directories for Boost libraries.
+
+``Boost_LIBRARIES``
+  Boost component libraries to be linked.
+
+``Boost_<COMPONENT>_FOUND``
+  True if component ``<COMPONENT>`` was found (``<COMPONENT>`` name is upper-case).
+
+``Boost_<COMPONENT>_LIBRARY``
+  Libraries to link for component ``<COMPONENT>`` (may include
+  :command:`target_link_libraries` debug/optimized keywords).
+
+``Boost_VERSION_MACRO``
+  ``BOOST_VERSION`` value from ``boost/version.hpp``.
+
+``Boost_VERSION_STRING``
+  Boost version number in ``X.Y.Z`` format.
+
+``Boost_VERSION``
+  Boost version number in ``X.Y.Z`` format (same as ``Boost_VERSION_STRING``).
+
+  .. versionchanged:: 3.15
+    In previous CMake versions, this variable used the raw version string
+    from the Boost header (same as ``Boost_VERSION_MACRO``).
+    See policy :policy:`CMP0093`.
+
+``Boost_LIB_VERSION``
+  Version string appended to library filenames.
+
+``Boost_VERSION_MAJOR``, ``Boost_MAJOR_VERSION``
+  Boost major version number (``X`` in ``X.Y.Z``).
+
+``Boost_VERSION_MINOR``, ``Boost_MINOR_VERSION``
+  Boost minor version number (``Y`` in ``X.Y.Z``).
+
+``Boost_VERSION_PATCH``, ``Boost_SUBMINOR_VERSION``
+  Boost subminor version number (``Z`` in ``X.Y.Z``).
+
+``Boost_VERSION_COUNT``
+  Amount of version components (3).
+
+``Boost_LIB_DIAGNOSTIC_DEFINITIONS`` (Windows-specific)
+  Pass to :command:`add_definitions` to have diagnostic
+  information about Boost's automatic linking
+  displayed during compilation
+
+.. versionadded:: 3.15
+  The ``Boost_VERSION_<PART>`` variables.
+
+Cache variables
+^^^^^^^^^^^^^^^
+
+Search results are saved persistently in CMake cache entries:
+
+``Boost_INCLUDE_DIR``
+  Directory containing Boost headers.
+
+``Boost_LIBRARY_DIR_RELEASE``
+  Directory containing release Boost libraries.
+
+``Boost_LIBRARY_DIR_DEBUG``
+  Directory containing debug Boost libraries.
+
+``Boost_<COMPONENT>_LIBRARY_DEBUG``
+  Component ``<COMPONENT>`` library debug variant.
+
+``Boost_<COMPONENT>_LIBRARY_RELEASE``
+  Component ``<COMPONENT>`` library release variant.
+
+.. versionadded:: 3.3
+  Per-configuration variables ``Boost_LIBRARY_DIR_RELEASE`` and
+  ``Boost_LIBRARY_DIR_DEBUG``.
+
+Hints
+^^^^^
+
+This module reads hints about search locations from variables:
+
+``BOOST_ROOT``, ``BOOSTROOT``
+  Preferred installation prefix.
+
+``BOOST_INCLUDEDIR``
+  Preferred include directory e.g. ``<prefix>/include``.
+
+``BOOST_LIBRARYDIR``
+  Preferred library directory e.g. ``<prefix>/lib``.
+
+``Boost_NO_SYSTEM_PATHS``
+  Set to ``ON`` to disable searching in locations not
+  specified by these hint variables. Default is ``OFF``.
+
+``Boost_ADDITIONAL_VERSIONS``
+  List of Boost versions not known to this module.
+  (Boost install locations may contain the version).
+
+Users may set these hints or results as ``CACHE`` entries.  Projects
+should not read these entries directly but instead use the above
+result variables.  Note that some hint names start in upper-case
+``BOOST``.  One may specify these as environment variables if they are
+not specified as CMake variables or cache entries.
+
+This module first searches for the Boost header files using the above
+hint variables (excluding ``BOOST_LIBRARYDIR``) and saves the result in
+``Boost_INCLUDE_DIR``.  Then it searches for requested component libraries
+using the above hints (excluding ``BOOST_INCLUDEDIR`` and
+``Boost_ADDITIONAL_VERSIONS``), "lib" directories near ``Boost_INCLUDE_DIR``,
+and the library name configuration settings below.  It saves the
+library directories in ``Boost_LIBRARY_DIR_DEBUG`` and
+``Boost_LIBRARY_DIR_RELEASE`` and individual library
+locations in ``Boost_<COMPONENT>_LIBRARY_DEBUG`` and ``Boost_<COMPONENT>_LIBRARY_RELEASE``.
+When one changes settings used by previous searches in the same build
+tree (excluding environment variables) this module discards previous
+search results affected by the changes and searches again.
+
+Imported Targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.5
+
+This module defines the following :prop_tgt:`IMPORTED` targets:
+
+``Boost::boost``
+  Target for header-only dependencies. (Boost include directory).
+
+``Boost::headers``
+  .. versionadded:: 3.15
+    Alias for ``Boost::boost``.
+
+``Boost::<component>``
+  Target for specific component dependency (shared or static library);
+  ``<component>`` name is lower-case.
+
+``Boost::diagnostic_definitions``
+  Interface target to enable diagnostic information about Boost's automatic
+  linking during compilation (adds ``-DBOOST_LIB_DIAGNOSTIC``).
+
+``Boost::disable_autolinking``
+  Interface target to disable automatic linking with MSVC
+  (adds ``-DBOOST_ALL_NO_LIB``).
+
+``Boost::dynamic_linking``
+  Interface target to enable dynamic linking with MSVC
+  (adds ``-DBOOST_ALL_DYN_LINK``).
+
+Implicit dependencies such as ``Boost::filesystem`` requiring
+``Boost::system`` will be automatically detected and satisfied, even
+if system is not specified when using :command:`find_package` and if
+``Boost::system`` is not added to :command:`target_link_libraries`.  If using
+``Boost::thread``, then ``Threads::Threads`` will also be added automatically.
+
+It is important to note that the imported targets behave differently
+than variables created by this module: multiple calls to
+:command:`find_package(Boost)` in the same directory or sub-directories with
+different options (e.g. static or shared) will not override the
+values of the targets created by the first call.
+
+Other Variables
+^^^^^^^^^^^^^^^
+
+Boost libraries come in many variants encoded in their file name.
+Users or projects may tell this module which variant to find by
+setting variables:
+
+``Boost_USE_DEBUG_LIBS``
+  .. versionadded:: 3.10
+
+  Set to ``ON`` or ``OFF`` to specify whether to search and use the debug
+  libraries.  Default is ``ON``.
+
+``Boost_USE_RELEASE_LIBS``
+  .. versionadded:: 3.10
+
+  Set to ``ON`` or ``OFF`` to specify whether to search and use the release
+  libraries.  Default is ``ON``.
+
+``Boost_USE_MULTITHREADED``
+  Set to OFF to use the non-multithreaded libraries ("mt" tag). Default is
+  ``ON``.
+
+``Boost_USE_STATIC_LIBS``
+  Set to ON to force the use of the static libraries.  Default is ``OFF``.
+
+``Boost_USE_STATIC_RUNTIME``
+  Set to ``ON`` or ``OFF`` to specify whether to use libraries linked
+  statically to the C++ runtime ("s" tag).  Default is platform dependent.
+
+``Boost_USE_DEBUG_RUNTIME``
+  Set to ``ON`` or ``OFF`` to specify whether to use libraries linked to the
+  MS debug C++ runtime ("g" tag).  Default is ``ON``.
+
+``Boost_USE_DEBUG_PYTHON``
+  Set to ``ON`` to use libraries compiled with a debug Python build ("y"
+  tag).  Default is ``OFF``.
+
+``Boost_USE_STLPORT``
+  Set to ``ON`` to use libraries compiled with STLPort ("p" tag). Default is
+  ``OFF``.
+
+``Boost_USE_STLPORT_DEPRECATED_NATIVE_IOSTREAMS``
+  Set to ON to use libraries compiled with STLPort deprecated "native
+  iostreams" ("n" tag).  Default is ``OFF``.
+
+``Boost_COMPILER``
+  Set to the compiler-specific library suffix (e.g. ``-gcc43``).  Default is
+  auto-computed for the C++ compiler in use.
+
+  .. versionchanged:: 3.9
+    A list may be used if multiple compatible suffixes should be tested for,
+    in decreasing order of preference.
+
+``Boost_LIB_PREFIX``
+  .. versionadded:: 3.18
+
+  Set to the platform-specific library name prefix (e.g. ``lib``) used by
+  Boost static libs.  This is needed only on platforms where CMake does not
+  know the prefix by default.
+
+``Boost_ARCHITECTURE``
+  .. versionadded:: 3.13
+
+  Set to the architecture-specific library suffix (e.g. ``-x64``).
+  Default is auto-computed for the C++ compiler in use.
+
+``Boost_THREADAPI``
+  Suffix for ``thread`` component library name, such as ``pthread`` or
+  ``win32``.  Names with and without this suffix will both be tried.
+
+``Boost_NAMESPACE``
+  Alternate namespace used to build boost with e.g. if set to ``myboost``,
+  will search for ``myboost_thread`` instead of ``boost_thread``.
+
+Other variables one may set to control this module are:
+
+``Boost_DEBUG``
+  Set to ``ON`` to enable debug output from ``FindBoost``.
+  Please enable this before filing any bug report.
+
+``Boost_REALPATH``
+  Set to ``ON`` to resolve symlinks for discovered libraries to assist with
+  packaging.  For example, the "system" component library may be resolved to
+  ``/usr/lib/libboost_system.so.1.67.0`` instead of
+  ``/usr/lib/libboost_system.so``.  This does not affect linking and should
+  not be enabled unless the user needs this information.
+
+``Boost_LIBRARY_DIR``
+  Default value for ``Boost_LIBRARY_DIR_RELEASE`` and
+  ``Boost_LIBRARY_DIR_DEBUG``.
+
+``Boost_NO_WARN_NEW_VERSIONS``
+  .. versionadded:: 3.20
+
+  Set to ``ON`` to suppress the warning about unknown dependencies for new
+  Boost versions.
+
+On Visual Studio and Borland compilers Boost headers request automatic
+linking to corresponding libraries.  This requires matching libraries
+to be linked explicitly or available in the link library search path.
+In this case setting ``Boost_USE_STATIC_LIBS`` to ``OFF`` may not achieve
+dynamic linking.  Boost automatic linking typically requests static
+libraries with a few exceptions (such as ``Boost.Python``).  Use:
+
+.. code-block:: cmake
+
+  add_definitions(${Boost_LIB_DIAGNOSTIC_DEFINITIONS})
+
+to ask Boost to report information about automatic linking requests.
+
+Examples
+^^^^^^^^
+
+Find Boost headers only:
+
+.. code-block:: cmake
+
+  find_package(Boost 1.36.0)
+  if(Boost_FOUND)
+    include_directories(${Boost_INCLUDE_DIRS})
+    add_executable(foo foo.cc)
+  endif()
+
+Find Boost libraries and use imported targets:
+
+.. code-block:: cmake
+
+  find_package(Boost 1.56 REQUIRED COMPONENTS
+               date_time filesystem iostreams)
+  add_executable(foo foo.cc)
+  target_link_libraries(foo Boost::date_time Boost::filesystem
+                            Boost::iostreams)
+
+Find Boost Python 3.6 libraries and use imported targets:
+
+.. code-block:: cmake
+
+  find_package(Boost 1.67 REQUIRED COMPONENTS
+               python36 numpy36)
+  add_executable(foo foo.cc)
+  target_link_libraries(foo Boost::python36 Boost::numpy36)
+
+Find Boost headers and some *static* (release only) libraries:
+
+.. code-block:: cmake
+
+  set(Boost_USE_STATIC_LIBS        ON)  # only find static libs
+  set(Boost_USE_DEBUG_LIBS        OFF)  # ignore debug libs and
+  set(Boost_USE_RELEASE_LIBS       ON)  # only find release libs
+  set(Boost_USE_MULTITHREADED      ON)
+  set(Boost_USE_STATIC_RUNTIME    OFF)
+  find_package(Boost 1.66.0 COMPONENTS date_time filesystem system ...)
+  if(Boost_FOUND)
+    include_directories(${Boost_INCLUDE_DIRS})
+    add_executable(foo foo.cc)
+    target_link_libraries(foo ${Boost_LIBRARIES})
+  endif()
+
+.. _`Boost CMake`:
+
+Boost CMake
+^^^^^^^^^^^
+
+If Boost was built using the boost-cmake project or from Boost 1.70.0 on
+it provides a package configuration file for use with find_package's config mode.
+This module looks for the package configuration file called
+``BoostConfig.cmake`` or ``boost-config.cmake`` and stores the result in
+``CACHE`` entry ``Boost_DIR``.  If found, the package configuration file is loaded
+and this module returns with no further action.  See documentation of
+the Boost CMake package configuration for details on what it provides.
+
+Set ``Boost_NO_BOOST_CMAKE`` to ``ON``, to disable the search for boost-cmake.
+#]=======================================================================]
+
+# The FPHSA helper provides standard way of reporting final search results to
+# the user including the version and component checks.
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+
+# Save project's policies
+cmake_policy(PUSH)
+cmake_policy(SET CMP0057 NEW) # if IN_LIST
+cmake_policy(SET CMP0102 NEW) # if mark_as_advanced(non_cache_var)
+
+function(_boost_get_existing_target component target_var)
+  set(names "${component}")
+  if(component MATCHES "^([a-z_]*)(python|numpy)([1-9])\\.?([0-9])?$")
+    # handle pythonXY and numpyXY versioned components and also python X.Y, mpi_python etc.
+    list(APPEND names
+      "${CMAKE_MATCH_1}${CMAKE_MATCH_2}" # python
+      "${CMAKE_MATCH_1}${CMAKE_MATCH_2}${CMAKE_MATCH_3}" # pythonX
+      "${CMAKE_MATCH_1}${CMAKE_MATCH_2}${CMAKE_MATCH_3}${CMAKE_MATCH_4}" #pythonXY
+    )
+  endif()
+  # https://github.com/boost-cmake/boost-cmake uses boost::file_system etc.
+  # So handle similar constructions of target names
+  string(TOLOWER "${component}" lower_component)
+  list(APPEND names "${lower_component}")
+  foreach(prefix Boost boost)
+    foreach(name IN LISTS names)
+      if(TARGET "${prefix}::${name}")
+        # The target may be an INTERFACE library that wraps around a single other
+        # target for compatibility.  Unwrap this layer so we can extract real info.
+        if("${name}" MATCHES "^(python|numpy|mpi_python)([1-9])([0-9])$")
+          set(name_nv "${CMAKE_MATCH_1}")
+          if(TARGET "${prefix}::${name_nv}")
+            get_property(type TARGET "${prefix}::${name}" PROPERTY TYPE)
+            if(type STREQUAL "INTERFACE_LIBRARY")
+              get_property(lib TARGET "${prefix}::${name}" PROPERTY INTERFACE_LINK_LIBRARIES)
+              if("${lib}" STREQUAL "${prefix}::${name_nv}")
+                set(${target_var} "${prefix}::${name_nv}" PARENT_SCOPE)
+                return()
+              endif()
+            endif()
+          endif()
+        endif()
+        set(${target_var} "${prefix}::${name}" PARENT_SCOPE)
+        return()
+      endif()
+    endforeach()
+  endforeach()
+  set(${target_var} "" PARENT_SCOPE)
+endfunction()
+
+function(_boost_get_canonical_target_name component target_var)
+  string(TOLOWER "${component}" component)
+  if(component MATCHES "^([a-z_]*)(python|numpy)([1-9])\\.?([0-9])?$")
+    # handle pythonXY and numpyXY versioned components and also python X.Y, mpi_python etc.
+    set(${target_var} "Boost::${CMAKE_MATCH_1}${CMAKE_MATCH_2}" PARENT_SCOPE)
+  else()
+    set(${target_var} "Boost::${component}" PARENT_SCOPE)
+  endif()
+endfunction()
+
+macro(_boost_set_in_parent_scope name value)
+  # Set a variable in parent scope and make it visible in current scope
+  set(${name} "${value}" PARENT_SCOPE)
+  set(${name} "${value}")
+endmacro()
+
+macro(_boost_set_if_unset name value)
+  if(NOT ${name})
+    _boost_set_in_parent_scope(${name} "${value}")
+  endif()
+endmacro()
+
+macro(_boost_set_cache_if_unset name value)
+  if(NOT ${name})
+    set(${name} "${value}" CACHE STRING "" FORCE)
+  endif()
+endmacro()
+
+macro(_boost_append_include_dir target)
+  get_target_property(inc "${target}" INTERFACE_INCLUDE_DIRECTORIES)
+  if(inc)
+    list(APPEND include_dirs "${inc}")
+  endif()
+endmacro()
+
+function(_boost_set_legacy_variables_from_config)
+  # Set legacy variables for compatibility if not set
+  set(include_dirs "")
+  set(library_dirs "")
+  set(libraries "")
+  # Header targets Boost::headers or Boost::boost
+  foreach(comp headers boost)
+    _boost_get_existing_target(${comp} target)
+    if(target)
+      _boost_append_include_dir("${target}")
+    endif()
+  endforeach()
+  # Library targets
+  foreach(comp IN LISTS Boost_FIND_COMPONENTS)
+    string(TOUPPER ${comp} uppercomp)
+    # Overwrite if set
+    _boost_set_in_parent_scope(Boost_${uppercomp}_FOUND "${Boost_${comp}_FOUND}")
+    if(Boost_${comp}_FOUND)
+      _boost_get_existing_target(${comp} target)
+      if(NOT target)
+        if(Boost_DEBUG OR Boost_VERBOSE)
+          message(WARNING "Could not find imported target for required component '${comp}'. Legacy variables for this component might be missing. Refer to the documentation of your Boost installation for help on variables to use.")
+        endif()
+        continue()
+      endif()
+      _boost_append_include_dir("${target}")
+      _boost_set_if_unset(Boost_${uppercomp}_LIBRARY "${target}")
+      _boost_set_if_unset(Boost_${uppercomp}_LIBRARIES "${target}") # Very old legacy variable
+      list(APPEND libraries "${target}")
+      get_property(type TARGET "${target}" PROPERTY TYPE)
+      if(NOT type STREQUAL "INTERFACE_LIBRARY")
+        foreach(cfg RELEASE DEBUG)
+          get_target_property(lib ${target} IMPORTED_LOCATION_${cfg})
+          if(lib)
+            get_filename_component(lib_dir "${lib}" DIRECTORY)
+            list(APPEND library_dirs ${lib_dir})
+            _boost_set_cache_if_unset(Boost_${uppercomp}_LIBRARY_${cfg} "${lib}")
+          endif()
+        endforeach()
+      elseif(Boost_DEBUG OR Boost_VERBOSE)
+        # For projects using only the Boost::* targets this warning can be safely ignored.
+        message(WARNING "Imported target '${target}' for required component '${comp}' has no artifact. Legacy variables for this component might be missing. Refer to the documentation of your Boost installation for help on variables to use.")
+      endif()
+      _boost_get_canonical_target_name("${comp}" canonical_target)
+      if(NOT TARGET "${canonical_target}")
+        add_library("${canonical_target}" INTERFACE IMPORTED)
+        target_link_libraries("${canonical_target}" INTERFACE "${target}")
+      endif()
+    endif()
+  endforeach()
+  list(REMOVE_DUPLICATES include_dirs)
+  list(REMOVE_DUPLICATES library_dirs)
+  _boost_set_if_unset(Boost_INCLUDE_DIRS "${include_dirs}")
+  _boost_set_if_unset(Boost_LIBRARY_DIRS "${library_dirs}")
+  _boost_set_if_unset(Boost_LIBRARIES "${libraries}")
+  _boost_set_if_unset(Boost_VERSION_STRING "${Boost_VERSION_MAJOR}.${Boost_VERSION_MINOR}.${Boost_VERSION_PATCH}")
+  find_path(Boost_INCLUDE_DIR
+    NAMES boost/version.hpp boost/config.hpp
+    HINTS ${Boost_INCLUDE_DIRS}
+    NO_DEFAULT_PATH
+  )
+  if(NOT Boost_VERSION_MACRO OR NOT Boost_LIB_VERSION)
+    set(version_file ${Boost_INCLUDE_DIR}/boost/version.hpp)
+    if(EXISTS "${version_file}")
+      file(STRINGS "${version_file}" contents REGEX "#define BOOST_(LIB_)?VERSION ")
+      if(contents MATCHES "#define BOOST_VERSION ([0-9]+)")
+        _boost_set_if_unset(Boost_VERSION_MACRO "${CMAKE_MATCH_1}")
+      endif()
+      if(contents MATCHES "#define BOOST_LIB_VERSION \"([0-9_]+)\"")
+        _boost_set_if_unset(Boost_LIB_VERSION "${CMAKE_MATCH_1}")
+      endif()
+    endif()
+  endif()
+  _boost_set_if_unset(Boost_MAJOR_VERSION ${Boost_VERSION_MAJOR})
+  _boost_set_if_unset(Boost_MINOR_VERSION ${Boost_VERSION_MINOR})
+  _boost_set_if_unset(Boost_SUBMINOR_VERSION ${Boost_VERSION_PATCH})
+  if(WIN32)
+    _boost_set_if_unset(Boost_LIB_DIAGNOSTIC_DEFINITIONS "-DBOOST_LIB_DIAGNOSTIC")
+  endif()
+  if(NOT TARGET Boost::headers)
+    add_library(Boost::headers INTERFACE IMPORTED)
+    target_include_directories(Boost::headers INTERFACE ${Boost_INCLUDE_DIRS})
+  endif()
+  # Legacy targets w/o functionality as all handled by defined targets
+  foreach(lib diagnostic_definitions disable_autolinking dynamic_linking)
+    if(NOT TARGET Boost::${lib})
+      add_library(Boost::${lib} INTERFACE IMPORTED)
+    endif()
+  endforeach()
+  if(NOT TARGET Boost::boost)
+    add_library(Boost::boost INTERFACE IMPORTED)
+    target_link_libraries(Boost::boost INTERFACE Boost::headers)
+  endif()
+endfunction()
+
+#-------------------------------------------------------------------------------
+# Before we go searching, check whether a boost cmake package is available, unless
+# the user specifically asked NOT to search for one.
+#
+# If Boost_DIR is set, this behaves as any find_package call would. If not,
+# it looks at BOOST_ROOT and BOOSTROOT to find Boost.
+#
+if (NOT Boost_NO_BOOST_CMAKE)
+  # If Boost_DIR is not set, look for BOOSTROOT and BOOST_ROOT as alternatives,
+  # since these are more conventional for Boost.
+  if ("$ENV{Boost_DIR}" STREQUAL "")
+    if (NOT "$ENV{BOOST_ROOT}" STREQUAL "")
+      set(ENV{Boost_DIR} $ENV{BOOST_ROOT})
+    elseif (NOT "$ENV{BOOSTROOT}" STREQUAL "")
+      set(ENV{Boost_DIR} $ENV{BOOSTROOT})
+    endif()
+  endif()
+
+  set(_boost_FIND_PACKAGE_ARGS "")
+  if(Boost_NO_SYSTEM_PATHS)
+    list(APPEND _boost_FIND_PACKAGE_ARGS NO_CMAKE_SYSTEM_PATH NO_SYSTEM_ENVIRONMENT_PATH)
+  endif()
+
+  # Do the same find_package call but look specifically for the CMake version.
+  # Note that args are passed in the Boost_FIND_xxxxx variables, so there is no
+  # need to delegate them to this find_package call.
+  if(BOOST_ROOT AND NOT Boost_ROOT)
+    # Honor BOOST_ROOT by setting Boost_ROOT with CMP0074 NEW behavior.
+    cmake_policy(PUSH)
+    cmake_policy(SET CMP0074 NEW)
+    set(Boost_ROOT "${BOOST_ROOT}")
+    set(_Boost_ROOT_FOR_CONFIG 1)
+  endif()
+  find_package(Boost QUIET NO_MODULE ${_boost_FIND_PACKAGE_ARGS})
+  if(_Boost_ROOT_FOR_CONFIG)
+    unset(_Boost_ROOT_FOR_CONFIG)
+    unset(Boost_ROOT)
+    cmake_policy(POP)
+  endif()
+  if (DEFINED Boost_DIR)
+    mark_as_advanced(Boost_DIR)
+  endif ()
+
+  # If we found a boost cmake package, then we're done. Print out what we found.
+  # Otherwise let the rest of the module try to find it.
+  if(Boost_FOUND)
+    # Convert component found variables to standard variables if required
+    # Necessary for legacy boost-cmake and 1.70 builtin BoostConfig
+    if(Boost_FIND_COMPONENTS)
+      # Ignore the meta-component "ALL", introduced by Boost 1.73
+      list(REMOVE_ITEM Boost_FIND_COMPONENTS "ALL")
+
+      foreach(_comp IN LISTS Boost_FIND_COMPONENTS)
+        if(DEFINED Boost_${_comp}_FOUND)
+          continue()
+        endif()
+        string(TOUPPER ${_comp} _uppercomp)
+        if(DEFINED Boost${_comp}_FOUND) # legacy boost-cmake project
+          set(Boost_${_comp}_FOUND ${Boost${_comp}_FOUND})
+        elseif(DEFINED Boost_${_uppercomp}_FOUND) # Boost 1.70
+          set(Boost_${_comp}_FOUND ${Boost_${_uppercomp}_FOUND})
+        endif()
+      endforeach()
+    endif()
+
+    find_package_handle_standard_args(Boost HANDLE_COMPONENTS CONFIG_MODE)
+    _boost_set_legacy_variables_from_config()
+
+    # Restore project's policies
+    cmake_policy(POP)
+    return()
+  endif()
+endif()
+
+
+#-------------------------------------------------------------------------------
+#  FindBoost functions & macros
+#
+
+#
+# Print debug text if Boost_DEBUG is set.
+# Call example:
+# _Boost_DEBUG_PRINT("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "debug message")
+#
+function(_Boost_DEBUG_PRINT file line text)
+  if(Boost_DEBUG)
+    message(STATUS "[ ${file}:${line} ] ${text}")
+  endif()
+endfunction()
+
+#
+# _Boost_DEBUG_PRINT_VAR(file line variable_name [ENVIRONMENT]
+#                        [SOURCE "short explanation of origin of var value"])
+#
+#   ENVIRONMENT - look up environment variable instead of CMake variable
+#
+# Print variable name and its value if Boost_DEBUG is set.
+# Call example:
+# _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" BOOST_ROOT)
+#
+function(_Boost_DEBUG_PRINT_VAR file line name)
+  if(Boost_DEBUG)
+    cmake_parse_arguments(_args "ENVIRONMENT" "SOURCE" "" ${ARGN})
+
+    unset(source)
+    if(_args_SOURCE)
+      set(source " (${_args_SOURCE})")
+    endif()
+
+    if(_args_ENVIRONMENT)
+      if(DEFINED ENV{${name}})
+        set(value "\"$ENV{${name}}\"")
+      else()
+        set(value "<unset>")
+      endif()
+      set(_name "ENV{${name}}")
+    else()
+      if(DEFINED "${name}")
+        set(value "\"${${name}}\"")
+      else()
+        set(value "<unset>")
+      endif()
+      set(_name "${name}")
+    endif()
+
+    _Boost_DEBUG_PRINT("${file}" "${line}" "${_name} = ${value}${source}")
+  endif()
+endfunction()
+
+############################################
+#
+# Check the existence of the libraries.
+#
+############################################
+# This macro was taken directly from the FindQt4.cmake file that is included
+# with the CMake distribution. This is NOT my work. All work was done by the
+# original authors of the FindQt4.cmake file. Only minor modifications were
+# made to remove references to Qt and make this file more generally applicable
+# And ELSE/ENDIF pairs were removed for readability.
+#########################################################################
+
+macro(_Boost_ADJUST_LIB_VARS basename)
+  if(Boost_INCLUDE_DIR )
+    if(Boost_${basename}_LIBRARY_DEBUG AND Boost_${basename}_LIBRARY_RELEASE)
+      # if the generator is multi-config or if CMAKE_BUILD_TYPE is set for
+      # single-config generators, set optimized and debug libraries
+      get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
+      if(_isMultiConfig OR CMAKE_BUILD_TYPE)
+        set(Boost_${basename}_LIBRARY optimized ${Boost_${basename}_LIBRARY_RELEASE} debug ${Boost_${basename}_LIBRARY_DEBUG})
+      else()
+        # For single-config generators where CMAKE_BUILD_TYPE has no value,
+        # just use the release libraries
+        set(Boost_${basename}_LIBRARY ${Boost_${basename}_LIBRARY_RELEASE} )
+      endif()
+      # FIXME: This probably should be set for both cases
+      set(Boost_${basename}_LIBRARIES optimized ${Boost_${basename}_LIBRARY_RELEASE} debug ${Boost_${basename}_LIBRARY_DEBUG})
+    endif()
+
+    # if only the release version was found, set the debug variable also to the release version
+    if(Boost_${basename}_LIBRARY_RELEASE AND NOT Boost_${basename}_LIBRARY_DEBUG)
+      set(Boost_${basename}_LIBRARY_DEBUG ${Boost_${basename}_LIBRARY_RELEASE})
+      set(Boost_${basename}_LIBRARY       ${Boost_${basename}_LIBRARY_RELEASE})
+      set(Boost_${basename}_LIBRARIES     ${Boost_${basename}_LIBRARY_RELEASE})
+    endif()
+
+    # if only the debug version was found, set the release variable also to the debug version
+    if(Boost_${basename}_LIBRARY_DEBUG AND NOT Boost_${basename}_LIBRARY_RELEASE)
+      set(Boost_${basename}_LIBRARY_RELEASE ${Boost_${basename}_LIBRARY_DEBUG})
+      set(Boost_${basename}_LIBRARY         ${Boost_${basename}_LIBRARY_DEBUG})
+      set(Boost_${basename}_LIBRARIES       ${Boost_${basename}_LIBRARY_DEBUG})
+    endif()
+
+    # If the debug & release library ends up being the same, omit the keywords
+    if("${Boost_${basename}_LIBRARY_RELEASE}" STREQUAL "${Boost_${basename}_LIBRARY_DEBUG}")
+      set(Boost_${basename}_LIBRARY   ${Boost_${basename}_LIBRARY_RELEASE} )
+      set(Boost_${basename}_LIBRARIES ${Boost_${basename}_LIBRARY_RELEASE} )
+    endif()
+
+    if(Boost_${basename}_LIBRARY AND Boost_${basename}_HEADER)
+      set(Boost_${basename}_FOUND ON)
+      if("x${basename}" STREQUAL "xTHREAD" AND NOT TARGET Threads::Threads)
+        string(APPEND Boost_ERROR_REASON_THREAD " (missing dependency: Threads)")
+        set(Boost_THREAD_FOUND OFF)
+      endif()
+    endif()
+
+  endif()
+  # Make variables changeable to the advanced user
+  mark_as_advanced(
+      Boost_${basename}_LIBRARY_RELEASE
+      Boost_${basename}_LIBRARY_DEBUG
+  )
+endmacro()
+
+# Detect changes in used variables.
+# Compares the current variable value with the last one.
+# In short form:
+# v != v_LAST                      -> CHANGED = 1
+# v is defined, v_LAST not         -> CHANGED = 1
+# v is not defined, but v_LAST is  -> CHANGED = 1
+# otherwise                        -> CHANGED = 0
+# CHANGED is returned in variable named ${changed_var}
+macro(_Boost_CHANGE_DETECT changed_var)
+  set(${changed_var} 0)
+  foreach(v ${ARGN})
+    if(DEFINED _Boost_COMPONENTS_SEARCHED)
+      if(${v})
+        if(_${v}_LAST)
+          string(COMPARE NOTEQUAL "${${v}}" "${_${v}_LAST}" _${v}_CHANGED)
+        else()
+          set(_${v}_CHANGED 1)
+        endif()
+      elseif(_${v}_LAST)
+        set(_${v}_CHANGED 1)
+      endif()
+      if(_${v}_CHANGED)
+        set(${changed_var} 1)
+      endif()
+    else()
+      set(_${v}_CHANGED 0)
+    endif()
+  endforeach()
+endmacro()
+
+#
+# Find the given library (var).
+# Use 'build_type' to support different lib paths for RELEASE or DEBUG builds
+#
+macro(_Boost_FIND_LIBRARY var build_type)
+
+  find_library(${var} ${ARGN})
+
+  if(${var})
+    # If this is the first library found then save Boost_LIBRARY_DIR_[RELEASE,DEBUG].
+    if(NOT Boost_LIBRARY_DIR_${build_type})
+      get_filename_component(_dir "${${var}}" PATH)
+      set(Boost_LIBRARY_DIR_${build_type} "${_dir}" CACHE PATH "Boost library directory ${build_type}" FORCE)
+    endif()
+  elseif(_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT)
+    # Try component-specific hints but do not save Boost_LIBRARY_DIR_[RELEASE,DEBUG].
+    find_library(${var} HINTS ${_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT} ${ARGN})
+  endif()
+
+  # If Boost_LIBRARY_DIR_[RELEASE,DEBUG] is known then search only there.
+  if(Boost_LIBRARY_DIR_${build_type})
+    set(_boost_LIBRARY_SEARCH_DIRS_${build_type} ${Boost_LIBRARY_DIR_${build_type}} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
+    _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
+                           "Boost_LIBRARY_DIR_${build_type}")
+    _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
+                           "_boost_LIBRARY_SEARCH_DIRS_${build_type}")
+  endif()
+endmacro()
+
+#-------------------------------------------------------------------------------
+
+# Convert CMAKE_CXX_COMPILER_VERSION to boost compiler suffix version.
+function(_Boost_COMPILER_DUMPVERSION _OUTPUT_VERSION _OUTPUT_VERSION_MAJOR _OUTPUT_VERSION_MINOR)
+  string(REGEX REPLACE "([0-9]+)\\.([0-9]+)(\\.[0-9]+)?" "\\1"
+    _boost_COMPILER_VERSION_MAJOR "${CMAKE_CXX_COMPILER_VERSION}")
+  string(REGEX REPLACE "([0-9]+)\\.([0-9]+)(\\.[0-9]+)?" "\\2"
+    _boost_COMPILER_VERSION_MINOR "${CMAKE_CXX_COMPILER_VERSION}")
+
+  set(_boost_COMPILER_VERSION "${_boost_COMPILER_VERSION_MAJOR}${_boost_COMPILER_VERSION_MINOR}")
+
+  set(${_OUTPUT_VERSION} ${_boost_COMPILER_VERSION} PARENT_SCOPE)
+  set(${_OUTPUT_VERSION_MAJOR} ${_boost_COMPILER_VERSION_MAJOR} PARENT_SCOPE)
+  set(${_OUTPUT_VERSION_MINOR} ${_boost_COMPILER_VERSION_MINOR} PARENT_SCOPE)
+endfunction()
+
+#
+# Take a list of libraries with "thread" in it
+# and prepend duplicates with "thread_${Boost_THREADAPI}"
+# at the front of the list
+#
+function(_Boost_PREPEND_LIST_WITH_THREADAPI _output)
+  set(_orig_libnames ${ARGN})
+  string(REPLACE "thread" "thread_${Boost_THREADAPI}" _threadapi_libnames "${_orig_libnames}")
+  set(${_output} ${_threadapi_libnames} ${_orig_libnames} PARENT_SCOPE)
+endfunction()
+
+#
+# If a library is found, replace its cache entry with its REALPATH
+#
+function(_Boost_SWAP_WITH_REALPATH _library _docstring)
+  if(${_library})
+    get_filename_component(_boost_filepathreal ${${_library}} REALPATH)
+    unset(${_library} CACHE)
+    set(${_library} ${_boost_filepathreal} CACHE FILEPATH "${_docstring}")
+  endif()
+endfunction()
+
+function(_Boost_CHECK_SPELLING _var)
+  if(${_var})
+    string(TOUPPER ${_var} _var_UC)
+    message(FATAL_ERROR "ERROR: ${_var} is not the correct spelling.  The proper spelling is ${_var_UC}.")
+  endif()
+endfunction()
+
+# Guesses Boost's compiler prefix used in built library names
+# Returns the guess by setting the variable pointed to by _ret
+function(_Boost_GUESS_COMPILER_PREFIX _ret)
+  if("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xIntel"
+      OR "x${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "xIntelLLVM")
+    if(WIN32)
+      set (_boost_COMPILER "-iw")
+    else()
+      set (_boost_COMPILER "-il")
+    endif()
+  elseif (GHSMULTI)
+    set(_boost_COMPILER "-ghs")
+  elseif("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC" OR "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
+    if(MSVC_TOOLSET_VERSION GREATER_EQUAL 150)
+      # Not yet known.
+      set(_boost_COMPILER "")
+    elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 140)
+      # MSVC toolset 14.x versions are forward compatible.
+      set(_boost_COMPILER "")
+      foreach(v 9 8 7 6 5 4 3 2 1 0)
+        if(MSVC_TOOLSET_VERSION GREATER_EQUAL 14${v})
+          list(APPEND _boost_COMPILER "-vc14${v}")
+        endif()
+      endforeach()
+    elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 80)
+      set(_boost_COMPILER "-vc${MSVC_TOOLSET_VERSION}")
+    elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13.10)
+      set(_boost_COMPILER "-vc71")
+    elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13) # Good luck!
+      set(_boost_COMPILER "-vc7") # yes, this is correct
+    else() # VS 6.0 Good luck!
+      set(_boost_COMPILER "-vc6") # yes, this is correct
+    endif()
+
+    if("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xClang")
+      string(REPLACE "." ";" VERSION_LIST "${CMAKE_CXX_COMPILER_VERSION}")
+      list(GET VERSION_LIST 0 CLANG_VERSION_MAJOR)
+      set(_boost_COMPILER "-clangw${CLANG_VERSION_MAJOR};${_boost_COMPILER}")
+    endif()
+  elseif (BORLAND)
+    set(_boost_COMPILER "-bcb")
+  elseif(CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
+    set(_boost_COMPILER "-sw")
+  elseif(CMAKE_CXX_COMPILER_ID STREQUAL "XL")
+    set(_boost_COMPILER "-xlc")
+  elseif (MINGW)
+    if(Boost_VERSION_STRING VERSION_LESS 1.34)
+        set(_boost_COMPILER "-mgw") # no GCC version encoding prior to 1.34
+    else()
+      _Boost_COMPILER_DUMPVERSION(_boost_COMPILER_VERSION _boost_COMPILER_VERSION_MAJOR _boost_COMPILER_VERSION_MINOR)
+      if(Boost_VERSION_STRING VERSION_GREATER_EQUAL 1.73 AND _boost_COMPILER_VERSION_MAJOR VERSION_GREATER_EQUAL 5)
+        set(_boost_COMPILER "-mgw${_boost_COMPILER_VERSION_MAJOR}")
+      else()
+        set(_boost_COMPILER "-mgw${_boost_COMPILER_VERSION}")
+      endif()
+    endif()
+  elseif (UNIX)
+    _Boost_COMPILER_DUMPVERSION(_boost_COMPILER_VERSION _boost_COMPILER_VERSION_MAJOR _boost_COMPILER_VERSION_MINOR)
+    if(NOT Boost_VERSION_STRING VERSION_LESS 1.69.0)
+      # From GCC 5 and clang 4, versioning changes and minor becomes patch.
+      # For those compilers, patch is exclude from compiler tag in Boost 1.69+ library naming.
+      if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND _boost_COMPILER_VERSION_MAJOR VERSION_GREATER 4)
+        set(_boost_COMPILER_VERSION "${_boost_COMPILER_VERSION_MAJOR}")
+      elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND _boost_COMPILER_VERSION_MAJOR VERSION_GREATER 3)
+        set(_boost_COMPILER_VERSION "${_boost_COMPILER_VERSION_MAJOR}")
+      endif()
+    endif()
+
+    if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
+      if(Boost_VERSION_STRING VERSION_LESS 1.34)
+        set(_boost_COMPILER "-gcc") # no GCC version encoding prior to 1.34
+      else()
+        # Determine which version of GCC we have.
+        if(APPLE)
+          if(Boost_VERSION_STRING VERSION_LESS 1.36.0)
+            # In Boost <= 1.35.0, there is no mangled compiler name for
+            # the macOS/Darwin version of GCC.
+            set(_boost_COMPILER "")
+          else()
+            # In Boost 1.36.0 and newer, the mangled compiler name used
+            # on macOS/Darwin is "xgcc".
+            set(_boost_COMPILER "-xgcc${_boost_COMPILER_VERSION}")
+          endif()
+        else()
+          set(_boost_COMPILER "-gcc${_boost_COMPILER_VERSION}")
+        endif()
+      endif()
+    elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+      # TODO: Find out any Boost version constraints vs clang support.
+      set(_boost_COMPILER "-clang${_boost_COMPILER_VERSION}")
+    endif()
+  else()
+    set(_boost_COMPILER "")
+  endif()
+  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
+                         "_boost_COMPILER" SOURCE "guessed")
+  set(${_ret} ${_boost_COMPILER} PARENT_SCOPE)
+endfunction()
+
+#
+# Get component dependencies.  Requires the dependencies to have been
+# defined for the Boost release version.
+#
+# component - the component to check
+# _ret - list of library dependencies
+#
+function(_Boost_COMPONENT_DEPENDENCIES component _ret)
+  # Note: to add a new Boost release, run
+  #
+  #   % cmake -DBOOST_DIR=/path/to/boost/source -P Utilities/Scripts/BoostScanDeps.cmake
+  #
+  # The output may be added in a new block below.  If it's the same as
+  # the previous release, simply update the version range of the block
+  # for the previous release.  Also check if any new components have
+  # been added, and add any new components to
+  # _Boost_COMPONENT_HEADERS.
+  #
+  # This information was originally generated by running
+  # BoostScanDeps.cmake against every boost release to date supported
+  # by FindBoost:
+  #
+  #   % for version in /path/to/boost/sources/*
+  #     do
+  #       cmake -DBOOST_DIR=$version -P Utilities/Scripts/BoostScanDeps.cmake
+  #     done
+  #
+  # The output was then updated by search and replace with these regexes:
+  #
+  # - Strip message(STATUS) prefix dashes
+  #   s;^-- ;;
+  # - Indent
+  #   s;^set(;    set(;;
+  # - Add conditionals
+  #   s;Scanning /path/to/boost/sources/boost_\(.*\)_\(.*\)_\(.*);  elseif(NOT Boost_VERSION_STRING VERSION_LESS \1\.\2\.\3 AND Boost_VERSION_STRING VERSION_LESS xxxx);
+  #
+  # This results in the logic seen below, but will require the xxxx
+  # replacing with the following Boost release version (or the next
+  # minor version to be released, e.g. 1.59 was the latest at the time
+  # of writing, making 1.60 the next. Identical consecutive releases
+  # were then merged together by updating the end range of the first
+  # block and removing the following redundant blocks.
+  #
+  # Running the script against all historical releases should be
+  # required only if the BoostScanDeps.cmake script logic is changed.
+  # The addition of a new release should only require it to be run
+  # against the new release.
+
+  # Handle Python version suffixes
+  if(component MATCHES "^(python|mpi_python|numpy)([0-9][0-9]?|[0-9]\\.[0-9])\$")
+    set(component "${CMAKE_MATCH_1}")
+    set(component_python_version "${CMAKE_MATCH_2}")
+  endif()
+
+  set(_Boost_IMPORTED_TARGETS TRUE)
+  if(Boost_VERSION_STRING)
+    if(Boost_VERSION_STRING VERSION_LESS 1.33.0)
+      message(WARNING "Imported targets and dependency information not available for Boost version ${Boost_VERSION_STRING} (all versions older than 1.33)")
+      set(_Boost_IMPORTED_TARGETS FALSE)
+    elseif(Boost_VERSION_STRING VERSION_LESS 1.35.0)
+      set(_Boost_IOSTREAMS_DEPENDENCIES regex thread)
+      set(_Boost_REGEX_DEPENDENCIES thread)
+      set(_Boost_WAVE_DEPENDENCIES filesystem thread)
+      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+    elseif(Boost_VERSION_STRING VERSION_LESS 1.36.0)
+      set(_Boost_FILESYSTEM_DEPENDENCIES system)
+      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
+      set(_Boost_MPI_DEPENDENCIES serialization)
+      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
+      set(_Boost_WAVE_DEPENDENCIES filesystem system thread)
+      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+    elseif(Boost_VERSION_STRING VERSION_LESS 1.38.0)
+      set(_Boost_FILESYSTEM_DEPENDENCIES system)
+      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
+      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l)
+      set(_Boost_MPI_DEPENDENCIES serialization)
+      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
+      set(_Boost_WAVE_DEPENDENCIES filesystem system thread)
+      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+    elseif(Boost_VERSION_STRING VERSION_LESS 1.43.0)
+      set(_Boost_FILESYSTEM_DEPENDENCIES system)
+      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
+      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l)
+      set(_Boost_MPI_DEPENDENCIES serialization)
+      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
+      set(_Boost_THREAD_DEPENDENCIES date_time)
+      set(_Boost_WAVE_DEPENDENCIES filesystem system thread date_time)
+      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+    elseif(Boost_VERSION_STRING VERSION_LESS 1.44.0)
+      set(_Boost_FILESYSTEM_DEPENDENCIES system)
+      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
+      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l random)
+      set(_Boost_MPI_DEPENDENCIES serialization)
+      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
+      set(_Boost_THREAD_DEPENDENCIES date_time)
+      set(_Boost_WAVE_DEPENDENCIES filesystem system thread date_time)
+      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+    elseif(Boost_VERSION_STRING VERSION_LESS 1.45.0)
+      set(_Boost_FILESYSTEM_DEPENDENCIES system)
+      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
+      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l random serialization)
+      set(_Boost_MPI_DEPENDENCIES serialization)
+      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
+      set(_Boost_THREAD_DEPENDENCIES date_time)
+      set(_Boost_WAVE_DEPENDENCIES serialization filesystem system thread date_time)
+      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+    elseif(Boost_VERSION_STRING VERSION_LESS 1.47.0)
+      set(_Boost_FILESYSTEM_DEPENDENCIES system)
+      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
+      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l random)
+      set(_Boost_MPI_DEPENDENCIES serialization)
+      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
+      set(_Boost_THREAD_DEPENDENCIES date_time)
+      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread date_time)
+      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+    elseif(Boost_VERSION_STRING VERSION_LESS 1.48.0)
+      set(_Boost_CHRONO_DEPENDENCIES system)
+      set(_Boost_FILESYSTEM_DEPENDENCIES system)
+      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
+      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l random)
+      set(_Boost_MPI_DEPENDENCIES serialization)
+      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
+      set(_Boost_THREAD_DEPENDENCIES date_time)
+      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread date_time)
+      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+    elseif(Boost_VERSION_STRING VERSION_LESS 1.50.0)
+      set(_Boost_CHRONO_DEPENDENCIES system)
+      set(_Boost_FILESYSTEM_DEPENDENCIES system)
+      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
+      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l random)
+      set(_Boost_MPI_DEPENDENCIES serialization)
+      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
+      set(_Boost_THREAD_DEPENDENCIES date_time)
+      set(_Boost_TIMER_DEPENDENCIES chrono system)
+      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread date_time)
+      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+    elseif(Boost_VERSION_STRING VERSION_LESS 1.53.0)
+      set(_Boost_CHRONO_DEPENDENCIES system)
+      set(_Boost_FILESYSTEM_DEPENDENCIES system)
+      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
+      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l regex random)
+      set(_Boost_MPI_DEPENDENCIES serialization)
+      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
+      set(_Boost_THREAD_DEPENDENCIES chrono system date_time)
+      set(_Boost_TIMER_DEPENDENCIES chrono system)
+      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time)
+      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+    elseif(Boost_VERSION_STRING VERSION_LESS 1.54.0)
+      set(_Boost_ATOMIC_DEPENDENCIES thread chrono system date_time)
+      set(_Boost_CHRONO_DEPENDENCIES system)
+      set(_Boost_FILESYSTEM_DEPENDENCIES system)
+      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
+      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l regex random)
+      set(_Boost_MPI_DEPENDENCIES serialization)
+      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
+      set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
+      set(_Boost_TIMER_DEPENDENCIES chrono system)
+      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time)
+      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+    elseif(Boost_VERSION_STRING VERSION_LESS 1.55.0)
+      set(_Boost_ATOMIC_DEPENDENCIES thread chrono system date_time)
+      set(_Boost_CHRONO_DEPENDENCIES system)
+      set(_Boost_FILESYSTEM_DEPENDENCIES system)
+      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
+      set(_Boost_LOG_DEPENDENCIES log_setup date_time system filesystem thread regex chrono)
+      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l regex random)
+      set(_Boost_MPI_DEPENDENCIES serialization)
+      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
+      set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
+      set(_Boost_TIMER_DEPENDENCIES chrono system)
+      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
+      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+    elseif(Boost_VERSION_STRING VERSION_LESS 1.56.0)
+      set(_Boost_CHRONO_DEPENDENCIES system)
+      set(_Boost_COROUTINE_DEPENDENCIES context system)
+      set(_Boost_FILESYSTEM_DEPENDENCIES system)
+      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
+      set(_Boost_LOG_DEPENDENCIES log_setup date_time system filesystem thread regex chrono)
+      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l regex random)
+      set(_Boost_MPI_DEPENDENCIES serialization)
+      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
+      set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
+      set(_Boost_TIMER_DEPENDENCIES chrono system)
+      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
+      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+    elseif(Boost_VERSION_STRING VERSION_LESS 1.59.0)
+      set(_Boost_CHRONO_DEPENDENCIES system)
+      set(_Boost_COROUTINE_DEPENDENCIES context system)
+      set(_Boost_FILESYSTEM_DEPENDENCIES system)
+      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
+      set(_Boost_LOG_DEPENDENCIES log_setup date_time system filesystem thread regex chrono)
+      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
+      set(_Boost_MPI_DEPENDENCIES serialization)
+      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
+      set(_Boost_RANDOM_DEPENDENCIES system)
+      set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
+      set(_Boost_TIMER_DEPENDENCIES chrono system)
+      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
+      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+    elseif(Boost_VERSION_STRING VERSION_LESS 1.60.0)
+      set(_Boost_CHRONO_DEPENDENCIES system)
+      set(_Boost_COROUTINE_DEPENDENCIES context system)
+      set(_Boost_FILESYSTEM_DEPENDENCIES system)
+      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
+      set(_Boost_LOG_DEPENDENCIES log_setup date_time system filesystem thread regex chrono atomic)
+      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
+      set(_Boost_MPI_DEPENDENCIES serialization)
+      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
+      set(_Boost_RANDOM_DEPENDENCIES system)
+      set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
+      set(_Boost_TIMER_DEPENDENCIES chrono system)
+      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
+      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+    elseif(Boost_VERSION_STRING VERSION_LESS 1.61.0)
+      set(_Boost_CHRONO_DEPENDENCIES system)
+      set(_Boost_COROUTINE_DEPENDENCIES context system)
+      set(_Boost_FILESYSTEM_DEPENDENCIES system)
+      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
+      set(_Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic)
+      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
+      set(_Boost_MPI_DEPENDENCIES serialization)
+      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
+      set(_Boost_RANDOM_DEPENDENCIES system)
+      set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
+      set(_Boost_TIMER_DEPENDENCIES chrono system)
+      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
+      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+    elseif(Boost_VERSION_STRING VERSION_LESS 1.62.0)
+      set(_Boost_CHRONO_DEPENDENCIES system)
+      set(_Boost_CONTEXT_DEPENDENCIES thread chrono system date_time)
+      set(_Boost_COROUTINE_DEPENDENCIES context system)
+      set(_Boost_FILESYSTEM_DEPENDENCIES system)
+      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
+      set(_Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic)
+      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
+      set(_Boost_MPI_DEPENDENCIES serialization)
+      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
+      set(_Boost_RANDOM_DEPENDENCIES system)
+      set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
+      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
+      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+    elseif(Boost_VERSION_STRING VERSION_LESS 1.63.0)
+      set(_Boost_CHRONO_DEPENDENCIES system)
+      set(_Boost_CONTEXT_DEPENDENCIES thread chrono system date_time)
+      set(_Boost_COROUTINE_DEPENDENCIES context system)
+      set(_Boost_FIBER_DEPENDENCIES context thread chrono system date_time)
+      set(_Boost_FILESYSTEM_DEPENDENCIES system)
+      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
+      set(_Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic)
+      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
+      set(_Boost_MPI_DEPENDENCIES serialization)
+      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
+      set(_Boost_RANDOM_DEPENDENCIES system)
+      set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
+      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
+      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+    elseif(Boost_VERSION_STRING VERSION_LESS 1.65.0)
+      set(_Boost_CHRONO_DEPENDENCIES system)
+      set(_Boost_CONTEXT_DEPENDENCIES thread chrono system date_time)
+      set(_Boost_COROUTINE_DEPENDENCIES context system)
+      set(_Boost_COROUTINE2_DEPENDENCIES context fiber thread chrono system date_time)
+      set(_Boost_FIBER_DEPENDENCIES context thread chrono system date_time)
+      set(_Boost_FILESYSTEM_DEPENDENCIES system)
+      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
+      set(_Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic)
+      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
+      set(_Boost_MPI_DEPENDENCIES serialization)
+      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
+      set(_Boost_RANDOM_DEPENDENCIES system)
+      set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
+      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
+      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+    elseif(Boost_VERSION_STRING VERSION_LESS 1.67.0)
+      set(_Boost_CHRONO_DEPENDENCIES system)
+      set(_Boost_CONTEXT_DEPENDENCIES thread chrono system date_time)
+      set(_Boost_COROUTINE_DEPENDENCIES context system)
+      set(_Boost_FIBER_DEPENDENCIES context thread chrono system date_time)
+      set(_Boost_FILESYSTEM_DEPENDENCIES system)
+      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
+      set(_Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic)
+      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
+      set(_Boost_MPI_DEPENDENCIES serialization)
+      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
+      set(_Boost_NUMPY_DEPENDENCIES python${component_python_version})
+      set(_Boost_RANDOM_DEPENDENCIES system)
+      set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
+      set(_Boost_TIMER_DEPENDENCIES chrono system)
+      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
+      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+    elseif(Boost_VERSION_STRING VERSION_LESS 1.68.0)
+      set(_Boost_CHRONO_DEPENDENCIES system)
+      set(_Boost_CONTEXT_DEPENDENCIES thread chrono system date_time)
+      set(_Boost_COROUTINE_DEPENDENCIES context system)
+      set(_Boost_FIBER_DEPENDENCIES context thread chrono system date_time)
+      set(_Boost_FILESYSTEM_DEPENDENCIES system)
+      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
+      set(_Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic)
+      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
+      set(_Boost_MPI_DEPENDENCIES serialization)
+      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
+      set(_Boost_NUMPY_DEPENDENCIES python${component_python_version})
+      set(_Boost_RANDOM_DEPENDENCIES system)
+      set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
+      set(_Boost_TIMER_DEPENDENCIES chrono system)
+      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
+      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+    elseif(Boost_VERSION_STRING VERSION_LESS 1.69.0)
+      set(_Boost_CHRONO_DEPENDENCIES system)
+      set(_Boost_CONTEXT_DEPENDENCIES thread chrono system date_time)
+      set(_Boost_CONTRACT_DEPENDENCIES thread chrono system date_time)
+      set(_Boost_COROUTINE_DEPENDENCIES context system)
+      set(_Boost_FIBER_DEPENDENCIES context thread chrono system date_time)
+      set(_Boost_FILESYSTEM_DEPENDENCIES system)
+      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
+      set(_Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic)
+      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
+      set(_Boost_MPI_DEPENDENCIES serialization)
+      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
+      set(_Boost_NUMPY_DEPENDENCIES python${component_python_version})
+      set(_Boost_RANDOM_DEPENDENCIES system)
+      set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic)
+      set(_Boost_TIMER_DEPENDENCIES chrono system)
+      set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic)
+      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+    elseif(Boost_VERSION_STRING VERSION_LESS 1.70.0)
+      set(_Boost_CONTRACT_DEPENDENCIES thread chrono date_time)
+      set(_Boost_COROUTINE_DEPENDENCIES context)
+      set(_Boost_FIBER_DEPENDENCIES context)
+      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
+      set(_Boost_LOG_DEPENDENCIES date_time log_setup filesystem thread regex chrono atomic)
+      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
+      set(_Boost_MPI_DEPENDENCIES serialization)
+      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
+      set(_Boost_NUMPY_DEPENDENCIES python${component_python_version})
+      set(_Boost_THREAD_DEPENDENCIES chrono date_time atomic)
+      set(_Boost_TIMER_DEPENDENCIES chrono system)
+      set(_Boost_WAVE_DEPENDENCIES filesystem serialization thread chrono date_time atomic)
+      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+    elseif(Boost_VERSION_STRING VERSION_LESS 1.72.0)
+      set(_Boost_CONTRACT_DEPENDENCIES thread chrono date_time)
+      set(_Boost_COROUTINE_DEPENDENCIES context)
+      set(_Boost_FIBER_DEPENDENCIES context)
+      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
+      set(_Boost_LOG_DEPENDENCIES date_time log_setup filesystem thread regex chrono atomic)
+      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
+      set(_Boost_MPI_DEPENDENCIES serialization)
+      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
+      set(_Boost_NUMPY_DEPENDENCIES python${component_python_version})
+      set(_Boost_THREAD_DEPENDENCIES chrono date_time atomic)
+      set(_Boost_TIMER_DEPENDENCIES chrono)
+      set(_Boost_WAVE_DEPENDENCIES filesystem serialization thread chrono date_time atomic)
+      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+    elseif(Boost_VERSION_STRING VERSION_LESS 1.73.0)
+      set(_Boost_CONTRACT_DEPENDENCIES thread chrono date_time)
+      set(_Boost_COROUTINE_DEPENDENCIES context)
+      set(_Boost_FIBER_DEPENDENCIES context)
+      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
+      set(_Boost_LOG_DEPENDENCIES date_time log_setup filesystem thread regex chrono atomic)
+      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l chrono atomic)
+      set(_Boost_MPI_DEPENDENCIES serialization)
+      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
+      set(_Boost_NUMPY_DEPENDENCIES python${component_python_version})
+      set(_Boost_THREAD_DEPENDENCIES chrono date_time atomic)
+      set(_Boost_TIMER_DEPENDENCIES chrono)
+      set(_Boost_WAVE_DEPENDENCIES filesystem serialization thread chrono date_time atomic)
+      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+    elseif(Boost_VERSION_STRING VERSION_LESS 1.75.0)
+      set(_Boost_CONTRACT_DEPENDENCIES thread chrono date_time)
+      set(_Boost_COROUTINE_DEPENDENCIES context)
+      set(_Boost_FIBER_DEPENDENCIES context)
+      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
+      set(_Boost_LOG_DEPENDENCIES date_time log_setup filesystem thread regex chrono atomic)
+      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
+      set(_Boost_MPI_DEPENDENCIES serialization)
+      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
+      set(_Boost_NUMPY_DEPENDENCIES python${component_python_version})
+      set(_Boost_THREAD_DEPENDENCIES chrono date_time atomic)
+      set(_Boost_TIMER_DEPENDENCIES chrono)
+      set(_Boost_WAVE_DEPENDENCIES filesystem serialization thread chrono date_time atomic)
+      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+    elseif(Boost_VERSION_STRING VERSION_LESS 1.77.0)
+      set(_Boost_CONTRACT_DEPENDENCIES thread chrono date_time)
+      set(_Boost_COROUTINE_DEPENDENCIES context)
+      set(_Boost_FIBER_DEPENDENCIES context)
+      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
+      set(_Boost_JSON_DEPENDENCIES container)
+      set(_Boost_LOG_DEPENDENCIES date_time log_setup filesystem thread regex chrono atomic)
+      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic)
+      set(_Boost_MPI_DEPENDENCIES serialization)
+      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
+      set(_Boost_NUMPY_DEPENDENCIES python${component_python_version})
+      set(_Boost_THREAD_DEPENDENCIES chrono date_time atomic)
+      set(_Boost_TIMER_DEPENDENCIES chrono)
+      set(_Boost_WAVE_DEPENDENCIES filesystem serialization thread chrono date_time atomic)
+      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+    else()
+      set(_Boost_CONTRACT_DEPENDENCIES thread chrono)
+      set(_Boost_COROUTINE_DEPENDENCIES context)
+      set(_Boost_FIBER_DEPENDENCIES context)
+      set(_Boost_IOSTREAMS_DEPENDENCIES regex)
+      set(_Boost_JSON_DEPENDENCIES container)
+      set(_Boost_LOG_DEPENDENCIES date_time log_setup filesystem thread regex chrono atomic)
+      set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l)
+      set(_Boost_MPI_DEPENDENCIES serialization)
+      set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization)
+      set(_Boost_NUMPY_DEPENDENCIES python${component_python_version})
+      set(_Boost_THREAD_DEPENDENCIES chrono atomic)
+      set(_Boost_TIMER_DEPENDENCIES chrono)
+      set(_Boost_WAVE_DEPENDENCIES filesystem serialization thread chrono atomic)
+      set(_Boost_WSERIALIZATION_DEPENDENCIES serialization)
+      if(Boost_VERSION_STRING VERSION_GREATER_EQUAL 1.78.0 AND NOT Boost_NO_WARN_NEW_VERSIONS)
+        message(WARNING "New Boost version may have incorrect or missing dependencies and imported targets")
+      endif()
+    endif()
+  endif()
+
+  string(TOUPPER ${component} uppercomponent)
+  set(${_ret} ${_Boost_${uppercomponent}_DEPENDENCIES} PARENT_SCOPE)
+  set(_Boost_IMPORTED_TARGETS ${_Boost_IMPORTED_TARGETS} PARENT_SCOPE)
+
+  string(REGEX REPLACE ";" " " _boost_DEPS_STRING "${_Boost_${uppercomponent}_DEPENDENCIES}")
+  if (NOT _boost_DEPS_STRING)
+    set(_boost_DEPS_STRING "(none)")
+  endif()
+  # message(STATUS "Dependencies for Boost::${component}: ${_boost_DEPS_STRING}")
+endfunction()
+
+#
+# Get component headers.  This is the primary header (or headers) for
+# a given component, and is used to check that the headers are present
+# as well as the library itself as an extra sanity check of the build
+# environment.
+#
+# component - the component to check
+# _hdrs
+#
+function(_Boost_COMPONENT_HEADERS component _hdrs)
+  # Handle Python version suffixes
+  if(component MATCHES "^(python|mpi_python|numpy)([0-9][0-9]?|[0-9]\\.[0-9])\$")
+    set(component "${CMAKE_MATCH_1}")
+    set(component_python_version "${CMAKE_MATCH_2}")
+  endif()
+
+  # Note: new boost components will require adding here.  The header
+  # must be present in all versions of Boost providing a library.
+  set(_Boost_ATOMIC_HEADERS              "boost/atomic.hpp")
+  set(_Boost_CHRONO_HEADERS              "boost/chrono.hpp")
+  set(_Boost_CONTAINER_HEADERS           "boost/container/container_fwd.hpp")
+  set(_Boost_CONTRACT_HEADERS            "boost/contract.hpp")
+  if(Boost_VERSION_STRING VERSION_LESS 1.61.0)
+    set(_Boost_CONTEXT_HEADERS           "boost/context/all.hpp")
+  else()
+    set(_Boost_CONTEXT_HEADERS           "boost/context/detail/fcontext.hpp")
+  endif()
+  set(_Boost_COROUTINE_HEADERS           "boost/coroutine/all.hpp")
+  set(_Boost_DATE_TIME_HEADERS           "boost/date_time/date.hpp")
+  set(_Boost_EXCEPTION_HEADERS           "boost/exception/exception.hpp")
+  set(_Boost_FIBER_HEADERS               "boost/fiber/all.hpp")
+  set(_Boost_FILESYSTEM_HEADERS          "boost/filesystem/path.hpp")
+  set(_Boost_GRAPH_HEADERS               "boost/graph/adjacency_list.hpp")
+  set(_Boost_GRAPH_PARALLEL_HEADERS      "boost/graph/adjacency_list.hpp")
+  set(_Boost_IOSTREAMS_HEADERS           "boost/iostreams/stream.hpp")
+  set(_Boost_LOCALE_HEADERS              "boost/locale.hpp")
+  set(_Boost_LOG_HEADERS                 "boost/log/core.hpp")
+  set(_Boost_LOG_SETUP_HEADERS           "boost/log/detail/setup_config.hpp")
+  set(_Boost_JSON_HEADERS                "boost/json.hpp")
+  set(_Boost_MATH_HEADERS                "boost/math_fwd.hpp")
+  set(_Boost_MATH_C99_HEADERS            "boost/math/tr1.hpp")
+  set(_Boost_MATH_C99F_HEADERS           "boost/math/tr1.hpp")
+  set(_Boost_MATH_C99L_HEADERS           "boost/math/tr1.hpp")
+  set(_Boost_MATH_TR1_HEADERS            "boost/math/tr1.hpp")
+  set(_Boost_MATH_TR1F_HEADERS           "boost/math/tr1.hpp")
+  set(_Boost_MATH_TR1L_HEADERS           "boost/math/tr1.hpp")
+  set(_Boost_MPI_HEADERS                 "boost/mpi.hpp")
+  set(_Boost_MPI_PYTHON_HEADERS          "boost/mpi/python/config.hpp")
+  set(_Boost_NUMPY_HEADERS               "boost/python/numpy.hpp")
+  set(_Boost_NOWIDE_HEADERS              "boost/nowide/cstdlib.hpp")
+  set(_Boost_PRG_EXEC_MONITOR_HEADERS    "boost/test/prg_exec_monitor.hpp")
+  set(_Boost_PROGRAM_OPTIONS_HEADERS     "boost/program_options.hpp")
+  set(_Boost_PYTHON_HEADERS              "boost/python.hpp")
+  set(_Boost_RANDOM_HEADERS              "boost/random.hpp")
+  set(_Boost_REGEX_HEADERS               "boost/regex.hpp")
+  set(_Boost_SERIALIZATION_HEADERS       "boost/serialization/serialization.hpp")
+  set(_Boost_SIGNALS_HEADERS             "boost/signals.hpp")
+  set(_Boost_STACKTRACE_ADDR2LINE_HEADERS "boost/stacktrace.hpp")
+  set(_Boost_STACKTRACE_BACKTRACE_HEADERS "boost/stacktrace.hpp")
+  set(_Boost_STACKTRACE_BASIC_HEADERS    "boost/stacktrace.hpp")
+  set(_Boost_STACKTRACE_NOOP_HEADERS     "boost/stacktrace.hpp")
+  set(_Boost_STACKTRACE_WINDBG_CACHED_HEADERS "boost/stacktrace.hpp")
+  set(_Boost_STACKTRACE_WINDBG_HEADERS   "boost/stacktrace.hpp")
+  set(_Boost_SYSTEM_HEADERS              "boost/system/config.hpp")
+  set(_Boost_TEST_EXEC_MONITOR_HEADERS   "boost/test/test_exec_monitor.hpp")
+  set(_Boost_THREAD_HEADERS              "boost/thread.hpp")
+  set(_Boost_TIMER_HEADERS               "boost/timer.hpp")
+  set(_Boost_TYPE_ERASURE_HEADERS        "boost/type_erasure/config.hpp")
+  set(_Boost_UNIT_TEST_FRAMEWORK_HEADERS "boost/test/framework.hpp")
+  set(_Boost_WAVE_HEADERS                "boost/wave.hpp")
+  set(_Boost_WSERIALIZATION_HEADERS      "boost/archive/text_wiarchive.hpp")
+  set(_Boost_BZIP2_HEADERS               "boost/iostreams/filter/bzip2.hpp")
+  set(_Boost_ZLIB_HEADERS                "boost/iostreams/filter/zlib.hpp")
+
+  string(TOUPPER ${component} uppercomponent)
+  set(${_hdrs} ${_Boost_${uppercomponent}_HEADERS} PARENT_SCOPE)
+
+  string(REGEX REPLACE ";" " " _boost_HDRS_STRING "${_Boost_${uppercomponent}_HEADERS}")
+  if (NOT _boost_HDRS_STRING)
+    set(_boost_HDRS_STRING "(none)")
+  endif()
+  # message(STATUS "Headers for Boost::${component}: ${_boost_HDRS_STRING}")
+endfunction()
+
+#
+# Determine if any missing dependencies require adding to the component list.
+#
+# Sets _Boost_${COMPONENT}_DEPENDENCIES for each required component,
+# plus _Boost_IMPORTED_TARGETS (TRUE if imported targets should be
+# defined; FALSE if dependency information is unavailable).
+#
+# componentvar - the component list variable name
+# extravar - the indirect dependency list variable name
+#
+#
+function(_Boost_MISSING_DEPENDENCIES componentvar extravar)
+  # _boost_unprocessed_components - list of components requiring processing
+  # _boost_processed_components - components already processed (or currently being processed)
+  # _boost_new_components - new components discovered for future processing
+  #
+  list(APPEND _boost_unprocessed_components ${${componentvar}})
+
+  while(_boost_unprocessed_components)
+    list(APPEND _boost_processed_components ${_boost_unprocessed_components})
+    foreach(component ${_boost_unprocessed_components})
+      string(TOUPPER ${component} uppercomponent)
+      set(${_ret} ${_Boost_${uppercomponent}_DEPENDENCIES} PARENT_SCOPE)
+      _Boost_COMPONENT_DEPENDENCIES("${component}" _Boost_${uppercomponent}_DEPENDENCIES)
+      set(_Boost_${uppercomponent}_DEPENDENCIES ${_Boost_${uppercomponent}_DEPENDENCIES} PARENT_SCOPE)
+      set(_Boost_IMPORTED_TARGETS ${_Boost_IMPORTED_TARGETS} PARENT_SCOPE)
+      foreach(componentdep ${_Boost_${uppercomponent}_DEPENDENCIES})
+        if (NOT ("${componentdep}" IN_LIST _boost_processed_components OR "${componentdep}" IN_LIST _boost_new_components))
+          list(APPEND _boost_new_components ${componentdep})
+        endif()
+      endforeach()
+    endforeach()
+    set(_boost_unprocessed_components ${_boost_new_components})
+    unset(_boost_new_components)
+  endwhile()
+  set(_boost_extra_components ${_boost_processed_components})
+  if(_boost_extra_components AND ${componentvar})
+    list(REMOVE_ITEM _boost_extra_components ${${componentvar}})
+  endif()
+  set(${componentvar} ${_boost_processed_components} PARENT_SCOPE)
+  set(${extravar} ${_boost_extra_components} PARENT_SCOPE)
+endfunction()
+
+#
+# Some boost libraries may require particular set of compler features.
+# The very first one was `boost::fiber` introduced in Boost 1.62.
+# One can check required compiler features of it in
+# - `${Boost_ROOT}/libs/fiber/build/Jamfile.v2`;
+# - `${Boost_ROOT}/libs/context/build/Jamfile.v2`.
+#
+# TODO (Re)Check compiler features on (every?) release ???
+# One may use the following command to get the files to check:
+#
+#   $ find . -name Jamfile.v2 | grep build | xargs grep -l cxx1
+#
+function(_Boost_COMPILER_FEATURES component _ret)
+  # Boost >= 1.62
+  if(NOT Boost_VERSION_STRING VERSION_LESS 1.62.0)
+    set(_Boost_FIBER_COMPILER_FEATURES
+        cxx_alias_templates
+        cxx_auto_type
+        cxx_constexpr
+        cxx_defaulted_functions
+        cxx_final
+        cxx_lambdas
+        cxx_noexcept
+        cxx_nullptr
+        cxx_rvalue_references
+        cxx_thread_local
+        cxx_variadic_templates
+    )
+    # Compiler feature for `context` same as for `fiber`.
+    set(_Boost_CONTEXT_COMPILER_FEATURES ${_Boost_FIBER_COMPILER_FEATURES})
+  endif()
+
+  # Boost Contract library available in >= 1.67
+  if(NOT Boost_VERSION_STRING VERSION_LESS 1.67.0)
+    # From `libs/contract/build/boost_contract_build.jam`
+    set(_Boost_CONTRACT_COMPILER_FEATURES
+        cxx_lambdas
+        cxx_variadic_templates
+    )
+  endif()
+
+  string(TOUPPER ${component} uppercomponent)
+  set(${_ret} ${_Boost_${uppercomponent}_COMPILER_FEATURES} PARENT_SCOPE)
+endfunction()
+
+#
+# Update library search directory hint variable with paths used by prebuilt boost binaries.
+#
+# Prebuilt windows binaries (https://sourceforge.net/projects/boost/files/boost-binaries/)
+# have library directories named using MSVC compiler version and architecture.
+# This function would append corresponding directories if MSVC is a current compiler,
+# so having `BOOST_ROOT` would be enough to specify to find everything.
+#
+function(_Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS componentlibvar basedir)
+  if("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC")
+    if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+      set(_arch_suffix 64)
+    else()
+      set(_arch_suffix 32)
+    endif()
+    if(MSVC_TOOLSET_VERSION GREATER_EQUAL 150)
+      # Not yet known.
+    elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 140)
+      # MSVC toolset 14.x versions are forward compatible.
+      foreach(v 9 8 7 6 5 4 3 2 1 0)
+        if(MSVC_TOOLSET_VERSION GREATER_EQUAL 14${v})
+          list(APPEND ${componentlibvar} ${basedir}/lib${_arch_suffix}-msvc-14.${v})
+        endif()
+      endforeach()
+    elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 80)
+      math(EXPR _toolset_major_version "${MSVC_TOOLSET_VERSION} / 10")
+      list(APPEND ${componentlibvar} ${basedir}/lib${_arch_suffix}-msvc-${_toolset_major_version}.0)
+    endif()
+    set(${componentlibvar} ${${componentlibvar}} PARENT_SCOPE)
+  endif()
+endfunction()
+
+#
+# End functions/macros
+#
+#-------------------------------------------------------------------------------
+
+#-------------------------------------------------------------------------------
+# main.
+#-------------------------------------------------------------------------------
+
+
+# If the user sets Boost_LIBRARY_DIR, use it as the default for both
+# configurations.
+if(NOT Boost_LIBRARY_DIR_RELEASE AND Boost_LIBRARY_DIR)
+  set(Boost_LIBRARY_DIR_RELEASE "${Boost_LIBRARY_DIR}")
+endif()
+if(NOT Boost_LIBRARY_DIR_DEBUG AND Boost_LIBRARY_DIR)
+  set(Boost_LIBRARY_DIR_DEBUG   "${Boost_LIBRARY_DIR}")
+endif()
+
+if(NOT DEFINED Boost_USE_DEBUG_LIBS)
+  set(Boost_USE_DEBUG_LIBS TRUE)
+endif()
+if(NOT DEFINED Boost_USE_RELEASE_LIBS)
+  set(Boost_USE_RELEASE_LIBS TRUE)
+endif()
+if(NOT DEFINED Boost_USE_MULTITHREADED)
+  set(Boost_USE_MULTITHREADED TRUE)
+endif()
+if(NOT DEFINED Boost_USE_DEBUG_RUNTIME)
+  set(Boost_USE_DEBUG_RUNTIME TRUE)
+endif()
+
+# Check the version of Boost against the requested version.
+if(Boost_FIND_VERSION AND NOT Boost_FIND_VERSION_MINOR)
+  message(SEND_ERROR "When requesting a specific version of Boost, you must provide at least the major and minor version numbers, e.g., 1.34")
+endif()
+
+if(Boost_FIND_VERSION_EXACT)
+  # The version may appear in a directory with or without the patch
+  # level, even when the patch level is non-zero.
+  set(_boost_TEST_VERSIONS
+    "${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}.${Boost_FIND_VERSION_PATCH}"
+    "${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}")
+else()
+  # The user has not requested an exact version.  Among known
+  # versions, find those that are acceptable to the user request.
+  #
+  # Note: When adding a new Boost release, also update the dependency
+  # information in _Boost_COMPONENT_DEPENDENCIES and
+  # _Boost_COMPONENT_HEADERS.  See the instructions at the top of
+  # _Boost_COMPONENT_DEPENDENCIES.
+  set(_Boost_KNOWN_VERSIONS ${Boost_ADDITIONAL_VERSIONS}
+    "1.77.0" "1.77" "1.76.0" "1.76" "1.75.0" "1.75" "1.74.0" "1.74"
+    "1.73.0" "1.73" "1.72.0" "1.72" "1.71.0" "1.71" "1.70.0" "1.70" "1.69.0" "1.69"
+    "1.68.0" "1.68" "1.67.0" "1.67" "1.66.0" "1.66" "1.65.1" "1.65.0" "1.65"
+    "1.64.0" "1.64" "1.63.0" "1.63" "1.62.0" "1.62" "1.61.0" "1.61" "1.60.0" "1.60"
+    "1.59.0" "1.59" "1.58.0" "1.58" "1.57.0" "1.57" "1.56.0" "1.56" "1.55.0" "1.55"
+    "1.54.0" "1.54" "1.53.0" "1.53" "1.52.0" "1.52" "1.51.0" "1.51"
+    "1.50.0" "1.50" "1.49.0" "1.49" "1.48.0" "1.48" "1.47.0" "1.47" "1.46.1"
+    "1.46.0" "1.46" "1.45.0" "1.45" "1.44.0" "1.44" "1.43.0" "1.43" "1.42.0" "1.42"
+    "1.41.0" "1.41" "1.40.0" "1.40" "1.39.0" "1.39" "1.38.0" "1.38" "1.37.0" "1.37"
+    "1.36.1" "1.36.0" "1.36" "1.35.1" "1.35.0" "1.35" "1.34.1" "1.34.0"
+    "1.34" "1.33.1" "1.33.0" "1.33")
+
+  set(_boost_TEST_VERSIONS)
+  if(Boost_FIND_VERSION)
+    set(_Boost_FIND_VERSION_SHORT "${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}")
+    # Select acceptable versions.
+    foreach(version ${_Boost_KNOWN_VERSIONS})
+      if(NOT "${version}" VERSION_LESS "${Boost_FIND_VERSION}")
+        # This version is high enough.
+        list(APPEND _boost_TEST_VERSIONS "${version}")
+      elseif("${version}.99" VERSION_EQUAL "${_Boost_FIND_VERSION_SHORT}.99")
+        # This version is a short-form for the requested version with
+        # the patch level dropped.
+        list(APPEND _boost_TEST_VERSIONS "${version}")
+      endif()
+    endforeach()
+  else()
+    # Any version is acceptable.
+    set(_boost_TEST_VERSIONS "${_Boost_KNOWN_VERSIONS}")
+  endif()
+endif()
+
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_TEST_VERSIONS")
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_USE_MULTITHREADED")
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_USE_STATIC_LIBS")
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_USE_STATIC_RUNTIME")
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_ADDITIONAL_VERSIONS")
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_NO_SYSTEM_PATHS")
+
+cmake_policy(GET CMP0074 _Boost_CMP0074)
+if(NOT "x${_Boost_CMP0074}x" STREQUAL "xNEWx")
+  _Boost_CHECK_SPELLING(Boost_ROOT)
+endif()
+unset(_Boost_CMP0074)
+_Boost_CHECK_SPELLING(Boost_LIBRARYDIR)
+_Boost_CHECK_SPELLING(Boost_INCLUDEDIR)
+
+# Collect environment variable inputs as hints.  Do not consider changes.
+foreach(v BOOSTROOT BOOST_ROOT BOOST_INCLUDEDIR BOOST_LIBRARYDIR)
+  set(_env $ENV{${v}})
+  if(_env)
+    file(TO_CMAKE_PATH "${_env}" _ENV_${v})
+  else()
+    set(_ENV_${v} "")
+  endif()
+endforeach()
+if(NOT _ENV_BOOST_ROOT AND _ENV_BOOSTROOT)
+  set(_ENV_BOOST_ROOT "${_ENV_BOOSTROOT}")
+endif()
+
+# Collect inputs and cached results.  Detect changes since the last run.
+if(NOT BOOST_ROOT AND BOOSTROOT)
+  set(BOOST_ROOT "${BOOSTROOT}")
+endif()
+set(_Boost_VARS_DIR
+  BOOST_ROOT
+  Boost_NO_SYSTEM_PATHS
+  )
+
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "BOOST_ROOT")
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "BOOST_ROOT" ENVIRONMENT)
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "BOOST_INCLUDEDIR")
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "BOOST_INCLUDEDIR" ENVIRONMENT)
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "BOOST_LIBRARYDIR")
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "BOOST_LIBRARYDIR" ENVIRONMENT)
+
+# ------------------------------------------------------------------------
+#  Search for Boost include DIR
+# ------------------------------------------------------------------------
+
+set(_Boost_VARS_INC BOOST_INCLUDEDIR Boost_INCLUDE_DIR Boost_ADDITIONAL_VERSIONS)
+_Boost_CHANGE_DETECT(_Boost_CHANGE_INCDIR ${_Boost_VARS_DIR} ${_Boost_VARS_INC})
+# Clear Boost_INCLUDE_DIR if it did not change but other input affecting the
+# location did.  We will find a new one based on the new inputs.
+if(_Boost_CHANGE_INCDIR AND NOT _Boost_INCLUDE_DIR_CHANGED)
+  unset(Boost_INCLUDE_DIR CACHE)
+endif()
+
+if(NOT Boost_INCLUDE_DIR)
+  set(_boost_INCLUDE_SEARCH_DIRS "")
+  if(BOOST_INCLUDEDIR)
+    list(APPEND _boost_INCLUDE_SEARCH_DIRS ${BOOST_INCLUDEDIR})
+  elseif(_ENV_BOOST_INCLUDEDIR)
+    list(APPEND _boost_INCLUDE_SEARCH_DIRS ${_ENV_BOOST_INCLUDEDIR})
+  endif()
+
+  if( BOOST_ROOT )
+    list(APPEND _boost_INCLUDE_SEARCH_DIRS ${BOOST_ROOT}/include ${BOOST_ROOT})
+  elseif( _ENV_BOOST_ROOT )
+    list(APPEND _boost_INCLUDE_SEARCH_DIRS ${_ENV_BOOST_ROOT}/include ${_ENV_BOOST_ROOT})
+  endif()
+
+  if( Boost_NO_SYSTEM_PATHS)
+    list(APPEND _boost_INCLUDE_SEARCH_DIRS NO_CMAKE_SYSTEM_PATH NO_SYSTEM_ENVIRONMENT_PATH)
+  else()
+    if("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC")
+      foreach(ver ${_boost_TEST_VERSIONS})
+        string(REPLACE "." "_" ver "${ver}")
+        list(APPEND _boost_INCLUDE_SEARCH_DIRS PATHS "C:/local/boost_${ver}")
+      endforeach()
+    endif()
+    list(APPEND _boost_INCLUDE_SEARCH_DIRS PATHS
+      C:/boost/include
+      C:/boost
+      /sw/local/include
+      )
+  endif()
+
+  # Try to find Boost by stepping backwards through the Boost versions
+  # we know about.
+  # Build a list of path suffixes for each version.
+  set(_boost_PATH_SUFFIXES)
+  foreach(_boost_VER ${_boost_TEST_VERSIONS})
+    # Add in a path suffix, based on the required version, ideally
+    # we could read this from version.hpp, but for that to work we'd
+    # need to know the include dir already
+    set(_boost_BOOSTIFIED_VERSION)
+
+    # Transform 1.35 => 1_35 and 1.36.0 => 1_36_0
+    if(_boost_VER MATCHES "([0-9]+)\\.([0-9]+)\\.([0-9]+)")
+        set(_boost_BOOSTIFIED_VERSION
+          "${CMAKE_MATCH_1}_${CMAKE_MATCH_2}_${CMAKE_MATCH_3}")
+    elseif(_boost_VER MATCHES "([0-9]+)\\.([0-9]+)")
+        set(_boost_BOOSTIFIED_VERSION
+          "${CMAKE_MATCH_1}_${CMAKE_MATCH_2}")
+    endif()
+
+    list(APPEND _boost_PATH_SUFFIXES
+      "boost-${_boost_BOOSTIFIED_VERSION}"
+      "boost_${_boost_BOOSTIFIED_VERSION}"
+      "boost/boost-${_boost_BOOSTIFIED_VERSION}"
+      "boost/boost_${_boost_BOOSTIFIED_VERSION}"
+      )
+
+  endforeach()
+
+  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_INCLUDE_SEARCH_DIRS")
+  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_PATH_SUFFIXES")
+
+  # Look for a standard boost header file.
+  find_path(Boost_INCLUDE_DIR
+    NAMES         boost/config.hpp
+    HINTS         ${_boost_INCLUDE_SEARCH_DIRS}
+    PATH_SUFFIXES ${_boost_PATH_SUFFIXES}
+    )
+endif()
+
+# ------------------------------------------------------------------------
+#  Extract version information from version.hpp
+# ------------------------------------------------------------------------
+
+if(Boost_INCLUDE_DIR)
+  _Boost_DEBUG_PRINT("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
+                     "location of version.hpp: ${Boost_INCLUDE_DIR}/boost/version.hpp")
+
+  # Extract Boost_VERSION_MACRO and Boost_LIB_VERSION from version.hpp
+  set(Boost_VERSION_MACRO 0)
+  set(Boost_LIB_VERSION "")
+  file(STRINGS "${Boost_INCLUDE_DIR}/boost/version.hpp" _boost_VERSION_HPP_CONTENTS REGEX "#define BOOST_(LIB_)?VERSION ")
+  if("${_boost_VERSION_HPP_CONTENTS}" MATCHES "#define BOOST_VERSION ([0-9]+)")
+    set(Boost_VERSION_MACRO "${CMAKE_MATCH_1}")
+  endif()
+  if("${_boost_VERSION_HPP_CONTENTS}" MATCHES "#define BOOST_LIB_VERSION \"([0-9_]+)\"")
+    set(Boost_LIB_VERSION "${CMAKE_MATCH_1}")
+  endif()
+  unset(_boost_VERSION_HPP_CONTENTS)
+
+  # Calculate version components
+  math(EXPR Boost_VERSION_MAJOR "${Boost_VERSION_MACRO} / 100000")
+  math(EXPR Boost_VERSION_MINOR "${Boost_VERSION_MACRO} / 100 % 1000")
+  math(EXPR Boost_VERSION_PATCH "${Boost_VERSION_MACRO} % 100")
+  set(Boost_VERSION_COUNT 3)
+
+  # Define alias variables for backwards compat.
+  set(Boost_MAJOR_VERSION ${Boost_VERSION_MAJOR})
+  set(Boost_MINOR_VERSION ${Boost_VERSION_MINOR})
+  set(Boost_SUBMINOR_VERSION ${Boost_VERSION_PATCH})
+
+  # Define Boost version in x.y.z format
+  set(Boost_VERSION_STRING "${Boost_VERSION_MAJOR}.${Boost_VERSION_MINOR}.${Boost_VERSION_PATCH}")
+
+  # Define final Boost_VERSION
+  cmake_policy(GET CMP0093 _Boost_CMP0093
+    PARENT_SCOPE # undocumented, do not use outside of CMake
+  )
+  if("x${_Boost_CMP0093}x" STREQUAL "xNEWx")
+    set(Boost_VERSION ${Boost_VERSION_STRING})
+  else()
+    set(Boost_VERSION ${Boost_VERSION_MACRO})
+  endif()
+  unset(_Boost_CMP0093)
+
+  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_VERSION")
+  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_VERSION_STRING")
+  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_VERSION_MACRO")
+  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_VERSION_MAJOR")
+  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_VERSION_MINOR")
+  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_VERSION_PATCH")
+  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_VERSION_COUNT")
+endif()
+
+# ------------------------------------------------------------------------
+#  Prefix initialization
+# ------------------------------------------------------------------------
+
+if ( NOT DEFINED Boost_LIB_PREFIX )
+  # Boost's static libraries use a "lib" prefix on DLL platforms
+  # to distinguish them from the DLL import libraries.
+  if (Boost_USE_STATIC_LIBS AND (
+      (WIN32 AND NOT CYGWIN)
+      OR GHSMULTI
+      ))
+    set(Boost_LIB_PREFIX "lib")
+  else()
+    set(Boost_LIB_PREFIX "")
+  endif()
+endif()
+
+if ( NOT Boost_NAMESPACE )
+  set(Boost_NAMESPACE "boost")
+endif()
+
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_LIB_PREFIX")
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "Boost_NAMESPACE")
+
+# ------------------------------------------------------------------------
+#  Suffix initialization and compiler suffix detection.
+# ------------------------------------------------------------------------
+
+set(_Boost_VARS_NAME
+  Boost_NAMESPACE
+  Boost_COMPILER
+  Boost_THREADAPI
+  Boost_USE_DEBUG_PYTHON
+  Boost_USE_MULTITHREADED
+  Boost_USE_STATIC_LIBS
+  Boost_USE_STATIC_RUNTIME
+  Boost_USE_STLPORT
+  Boost_USE_STLPORT_DEPRECATED_NATIVE_IOSTREAMS
+  )
+_Boost_CHANGE_DETECT(_Boost_CHANGE_LIBNAME ${_Boost_VARS_NAME})
+
+# Setting some more suffixes for the library
+if (Boost_COMPILER)
+  set(_boost_COMPILER ${Boost_COMPILER})
+  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
+                         "_boost_COMPILER" SOURCE "user-specified via Boost_COMPILER")
+else()
+  # Attempt to guess the compiler suffix
+  # NOTE: this is not perfect yet, if you experience any issues
+  # please report them and use the Boost_COMPILER variable
+  # to work around the problems.
+  _Boost_GUESS_COMPILER_PREFIX(_boost_COMPILER)
+endif()
+
+set (_boost_MULTITHREADED "-mt")
+if( NOT Boost_USE_MULTITHREADED )
+  set (_boost_MULTITHREADED "")
+endif()
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_MULTITHREADED")
+
+#======================
+# Systematically build up the Boost ABI tag for the 'tagged' and 'versioned' layouts
+# http://boost.org/doc/libs/1_66_0/more/getting_started/windows.html#library-naming
+# http://boost.org/doc/libs/1_66_0/boost/config/auto_link.hpp
+# http://boost.org/doc/libs/1_66_0/tools/build/src/tools/common.jam
+# http://boost.org/doc/libs/1_66_0/boostcpp.jam
+set( _boost_RELEASE_ABI_TAG "-")
+set( _boost_DEBUG_ABI_TAG   "-")
+# Key       Use this library when:
+#  s        linking statically to the C++ standard library and
+#           compiler runtime support libraries.
+if(Boost_USE_STATIC_RUNTIME)
+  set( _boost_RELEASE_ABI_TAG "${_boost_RELEASE_ABI_TAG}s")
+  set( _boost_DEBUG_ABI_TAG   "${_boost_DEBUG_ABI_TAG}s")
+endif()
+#  g        using debug versions of the standard and runtime
+#           support libraries
+if(WIN32 AND Boost_USE_DEBUG_RUNTIME)
+  if("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC"
+          OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xClang"
+          OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xIntel"
+          OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xIntelLLVM")
+    string(APPEND _boost_DEBUG_ABI_TAG "g")
+  endif()
+endif()
+#  y        using special debug build of python
+if(Boost_USE_DEBUG_PYTHON)
+  string(APPEND _boost_DEBUG_ABI_TAG "y")
+endif()
+#  d        using a debug version of your code
+string(APPEND _boost_DEBUG_ABI_TAG "d")
+#  p        using the STLport standard library rather than the
+#           default one supplied with your compiler
+if(Boost_USE_STLPORT)
+  string(APPEND _boost_RELEASE_ABI_TAG "p")
+  string(APPEND _boost_DEBUG_ABI_TAG "p")
+endif()
+#  n        using the STLport deprecated "native iostreams" feature
+#           removed from the documentation in 1.43.0 but still present in
+#           boost/config/auto_link.hpp
+if(Boost_USE_STLPORT_DEPRECATED_NATIVE_IOSTREAMS)
+  string(APPEND _boost_RELEASE_ABI_TAG "n")
+  string(APPEND _boost_DEBUG_ABI_TAG "n")
+endif()
+
+#  -x86     Architecture and address model tag
+#           First character is the architecture, then word-size, either 32 or 64
+#           Only used in 'versioned' layout, added in Boost 1.66.0
+if(DEFINED Boost_ARCHITECTURE)
+  set(_boost_ARCHITECTURE_TAG "${Boost_ARCHITECTURE}")
+  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
+                         "_boost_ARCHITECTURE_TAG" SOURCE "user-specified via Boost_ARCHITECTURE")
+else()
+  set(_boost_ARCHITECTURE_TAG "")
+  # {CMAKE_CXX_COMPILER_ARCHITECTURE_ID} is not currently set for all compilers
+  if(NOT "x${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "x" AND NOT Boost_VERSION_STRING VERSION_LESS 1.66.0)
+    string(APPEND _boost_ARCHITECTURE_TAG "-")
+    # This needs to be kept in-sync with the section of CMakePlatformId.h.in
+    # inside 'defined(_WIN32) && defined(_MSC_VER)'
+    if(CMAKE_CXX_COMPILER_ARCHITECTURE_ID STREQUAL "IA64")
+      string(APPEND _boost_ARCHITECTURE_TAG "i")
+    elseif(CMAKE_CXX_COMPILER_ARCHITECTURE_ID STREQUAL "X86"
+              OR CMAKE_CXX_COMPILER_ARCHITECTURE_ID STREQUAL "x64")
+      string(APPEND _boost_ARCHITECTURE_TAG "x")
+    elseif(CMAKE_CXX_COMPILER_ARCHITECTURE_ID MATCHES "^ARM")
+      string(APPEND _boost_ARCHITECTURE_TAG "a")
+    elseif(CMAKE_CXX_COMPILER_ARCHITECTURE_ID STREQUAL "MIPS")
+      string(APPEND _boost_ARCHITECTURE_TAG "m")
+    endif()
+
+    if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+      string(APPEND _boost_ARCHITECTURE_TAG "64")
+    else()
+      string(APPEND _boost_ARCHITECTURE_TAG "32")
+    endif()
+  endif()
+  _Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
+                         "_boost_ARCHITECTURE_TAG" SOURCE "detected")
+endif()
+
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_RELEASE_ABI_TAG")
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_DEBUG_ABI_TAG")
+
+# ------------------------------------------------------------------------
+#  Begin finding boost libraries
+# ------------------------------------------------------------------------
+
+set(_Boost_VARS_LIB "")
+foreach(c DEBUG RELEASE)
+  set(_Boost_VARS_LIB_${c} BOOST_LIBRARYDIR Boost_LIBRARY_DIR_${c})
+  list(APPEND _Boost_VARS_LIB ${_Boost_VARS_LIB_${c}})
+  _Boost_CHANGE_DETECT(_Boost_CHANGE_LIBDIR_${c} ${_Boost_VARS_DIR} ${_Boost_VARS_LIB_${c}} Boost_INCLUDE_DIR)
+  # Clear Boost_LIBRARY_DIR_${c} if it did not change but other input affecting the
+  # location did.  We will find a new one based on the new inputs.
+  if(_Boost_CHANGE_LIBDIR_${c} AND NOT _Boost_LIBRARY_DIR_${c}_CHANGED)
+    unset(Boost_LIBRARY_DIR_${c} CACHE)
+  endif()
+
+  # If Boost_LIBRARY_DIR_[RELEASE,DEBUG] is set, prefer its value.
+  if(Boost_LIBRARY_DIR_${c})
+    set(_boost_LIBRARY_SEARCH_DIRS_${c} ${Boost_LIBRARY_DIR_${c}} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
+  else()
+    set(_boost_LIBRARY_SEARCH_DIRS_${c} "")
+    if(BOOST_LIBRARYDIR)
+      list(APPEND _boost_LIBRARY_SEARCH_DIRS_${c} ${BOOST_LIBRARYDIR})
+    elseif(_ENV_BOOST_LIBRARYDIR)
+      list(APPEND _boost_LIBRARY_SEARCH_DIRS_${c} ${_ENV_BOOST_LIBRARYDIR})
+    endif()
+
+    if(BOOST_ROOT)
+      list(APPEND _boost_LIBRARY_SEARCH_DIRS_${c} ${BOOST_ROOT}/lib ${BOOST_ROOT}/stage/lib)
+      _Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS(_boost_LIBRARY_SEARCH_DIRS_${c} "${BOOST_ROOT}")
+    elseif(_ENV_BOOST_ROOT)
+      list(APPEND _boost_LIBRARY_SEARCH_DIRS_${c} ${_ENV_BOOST_ROOT}/lib ${_ENV_BOOST_ROOT}/stage/lib)
+      _Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS(_boost_LIBRARY_SEARCH_DIRS_${c} "${_ENV_BOOST_ROOT}")
+    endif()
+
+    list(APPEND _boost_LIBRARY_SEARCH_DIRS_${c}
+      ${Boost_INCLUDE_DIR}/lib
+      ${Boost_INCLUDE_DIR}/../lib
+      ${Boost_INCLUDE_DIR}/stage/lib
+      )
+    _Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS(_boost_LIBRARY_SEARCH_DIRS_${c} "${Boost_INCLUDE_DIR}/..")
+    _Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS(_boost_LIBRARY_SEARCH_DIRS_${c} "${Boost_INCLUDE_DIR}")
+    if( Boost_NO_SYSTEM_PATHS )
+      list(APPEND _boost_LIBRARY_SEARCH_DIRS_${c} NO_CMAKE_SYSTEM_PATH NO_SYSTEM_ENVIRONMENT_PATH)
+    else()
+      foreach(ver ${_boost_TEST_VERSIONS})
+        string(REPLACE "." "_" ver "${ver}")
+        _Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS(_boost_LIBRARY_SEARCH_DIRS_${c} "C:/local/boost_${ver}")
+      endforeach()
+      _Boost_UPDATE_WINDOWS_LIBRARY_SEARCH_DIRS_WITH_PREBUILT_PATHS(_boost_LIBRARY_SEARCH_DIRS_${c} "C:/boost")
+      list(APPEND _boost_LIBRARY_SEARCH_DIRS_${c} PATHS
+        C:/boost/lib
+        C:/boost
+        /sw/local/lib
+        )
+    endif()
+  endif()
+endforeach()
+
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_LIBRARY_SEARCH_DIRS_RELEASE")
+_Boost_DEBUG_PRINT_VAR("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}" "_boost_LIBRARY_SEARCH_DIRS_DEBUG")
+
+# Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES
+if( Boost_USE_STATIC_LIBS )
+  set( _boost_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
+  if(WIN32)
+    list(INSERT CMAKE_FIND_LIBRARY_SUFFIXES 0 .lib .a)
+  else()
+    set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
+  endif()
+endif()
+
+# We want to use the tag inline below without risking double dashes
+if(_boost_RELEASE_ABI_TAG)
+  if(${_boost_RELEASE_ABI_TAG} STREQUAL "-")
+    set(_boost_RELEASE_ABI_TAG "")
+  endif()
+endif()
+if(_boost_DEBUG_ABI_TAG)
+  if(${_boost_DEBUG_ABI_TAG} STREQUAL "-")
+    set(_boost_DEBUG_ABI_TAG "")
+  endif()
+endif()
+
+# The previous behavior of FindBoost when Boost_USE_STATIC_LIBS was enabled
+# on WIN32 was to:
+#  1. Search for static libs compiled against a SHARED C++ standard runtime library (use if found)
+#  2. Search for static libs compiled against a STATIC C++ standard runtime library (use if found)
+# We maintain this behavior since changing it could break people's builds.
+# To disable the ambiguous behavior, the user need only
+# set Boost_USE_STATIC_RUNTIME either ON or OFF.
+set(_boost_STATIC_RUNTIME_WORKAROUND false)
+if(WIN32 AND Boost_USE_STATIC_LIBS)
+  if(NOT DEFINED Boost_USE_STATIC_RUNTIME)
+    set(_boost_STATIC_RUNTIME_WORKAROUND TRUE)
+  endif()
+endif()
+
+# On versions < 1.35, remove the System library from the considered list
+# since it wasn't added until 1.35.
+if(Boost_VERSION_STRING AND Boost_FIND_COMPONENTS)
+  if(Boost_VERSION_STRING VERSION_LESS 1.35.0)
+    list(REMOVE_ITEM Boost_FIND_COMPONENTS system)
+  endif()
+endif()
+
+# Additional components may be required via component dependencies.
+# Add any missing components to the list.
+_Boost_MISSING_DEPENDENCIES(Boost_FIND_COMPONENTS _Boost_EXTRA_FIND_COMPONENTS)
+
+# If thread is required, get the thread libs as a dependency
+if("thread" IN_LIST Boost_FIND_COMPONENTS)
+  if(Boost_FIND_QUIETLY)
+    set(_Boost_find_quiet QUIET)
+  else()
+    set(_Boost_find_quiet "")
+  endif()
+  find_package(Threads ${_Boost_find_quiet})
+  unset(_Boost_find_quiet)
+endif()
+
+# If the user changed any of our control inputs flush previous results.
+if(_Boost_CHANGE_LIBDIR_DEBUG OR _Boost_CHANGE_LIBDIR_RELEASE OR _Boost_CHANGE_LIBNAME)
+  foreach(COMPONENT ${_Boost_COMPONENTS_SEARCHED})
+    string(TOUPPER ${COMPONENT} UPPERCOMPONENT)
+    foreach(c DEBUG RELEASE)
+      set(_var Boost_${UPPERCOMPONENT}_LIBRARY_${c})
+      unset(${_var} CACHE)
+      set(${_var} "${_var}-NOTFOUND")
+    endforeach()
+  endforeach()
+  set(_Boost_COMPONENTS_SEARCHED "")
+endif()
+
+foreach(COMPONENT ${Boost_FIND_COMPONENTS})
+  string(TOUPPER ${COMPONENT} UPPERCOMPONENT)
+
+  set( _boost_docstring_release "Boost ${COMPONENT} library (release)")
+  set( _boost_docstring_debug   "Boost ${COMPONENT} library (debug)")
+
+  # Compute component-specific hints.
+  set(_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT "")
+  if(${COMPONENT} STREQUAL "mpi" OR ${COMPONENT} STREQUAL "mpi_python" OR
+     ${COMPONENT} STREQUAL "graph_parallel")
+    foreach(lib ${MPI_CXX_LIBRARIES} ${MPI_C_LIBRARIES})
+      if(IS_ABSOLUTE "${lib}")
+        get_filename_component(libdir "${lib}" PATH)
+        string(REPLACE "\\" "/" libdir "${libdir}")
+        list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT ${libdir})
+      endif()
+    endforeach()
+  endif()
+
+  # Handle Python version suffixes
+  unset(COMPONENT_PYTHON_VERSION_MAJOR)
+  unset(COMPONENT_PYTHON_VERSION_MINOR)
+  if(${COMPONENT} MATCHES "^(python|mpi_python|numpy)([0-9])\$")
+    set(COMPONENT_UNVERSIONED "${CMAKE_MATCH_1}")
+    set(COMPONENT_PYTHON_VERSION_MAJOR "${CMAKE_MATCH_2}")
+  elseif(${COMPONENT} MATCHES "^(python|mpi_python|numpy)([0-9])\\.?([0-9])\$")
+    set(COMPONENT_UNVERSIONED "${CMAKE_MATCH_1}")
+    set(COMPONENT_PYTHON_VERSION_MAJOR "${CMAKE_MATCH_2}")
+    set(COMPONENT_PYTHON_VERSION_MINOR "${CMAKE_MATCH_3}")
+  endif()
+
+  unset(_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME)
+  if (COMPONENT_PYTHON_VERSION_MINOR)
+    # Boost >= 1.67
+    list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}${COMPONENT_PYTHON_VERSION_MAJOR}${COMPONENT_PYTHON_VERSION_MINOR}")
+    # Debian/Ubuntu (Some versions omit the 2 and/or 3 from the suffix)
+    list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}${COMPONENT_PYTHON_VERSION_MAJOR}-py${COMPONENT_PYTHON_VERSION_MAJOR}${COMPONENT_PYTHON_VERSION_MINOR}")
+    list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}-py${COMPONENT_PYTHON_VERSION_MAJOR}${COMPONENT_PYTHON_VERSION_MINOR}")
+    # Gentoo
+    list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}-${COMPONENT_PYTHON_VERSION_MAJOR}.${COMPONENT_PYTHON_VERSION_MINOR}")
+    # RPMs
+    list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}-${COMPONENT_PYTHON_VERSION_MAJOR}${COMPONENT_PYTHON_VERSION_MINOR}")
+  endif()
+  if (COMPONENT_PYTHON_VERSION_MAJOR AND NOT COMPONENT_PYTHON_VERSION_MINOR)
+    # Boost < 1.67
+    list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME "${COMPONENT_UNVERSIONED}${COMPONENT_PYTHON_VERSION_MAJOR}")
+  endif()
+
+  # Consolidate and report component-specific hints.
+  if(_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME)
+    list(REMOVE_DUPLICATES _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME)
+    _Boost_DEBUG_PRINT("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
+      "Component-specific library search names for ${COMPONENT_NAME}: ${_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME}")
+  endif()
+  if(_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT)
+    list(REMOVE_DUPLICATES _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT)
+    _Boost_DEBUG_PRINT("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
+      "Component-specific library search paths for ${COMPONENT}: ${_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT}")
+  endif()
+
+  #
+  # Find headers
+  #
+  _Boost_COMPONENT_HEADERS("${COMPONENT}" Boost_${UPPERCOMPONENT}_HEADER_NAME)
+  # Look for a standard boost header file.
+  if(Boost_${UPPERCOMPONENT}_HEADER_NAME)
+    if(EXISTS "${Boost_INCLUDE_DIR}/${Boost_${UPPERCOMPONENT}_HEADER_NAME}")
+      set(Boost_${UPPERCOMPONENT}_HEADER ON)
+    else()
+      set(Boost_${UPPERCOMPONENT}_HEADER OFF)
+    endif()
+  else()
+    set(Boost_${UPPERCOMPONENT}_HEADER ON)
+    message(WARNING "No header defined for ${COMPONENT}; skipping header check "
+                    "(note: header-only libraries have no designated component)")
+  endif()
+
+  #
+  # Find RELEASE libraries
+  #
+  unset(_boost_RELEASE_NAMES)
+  foreach(component IN LISTS _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME COMPONENT)
+    foreach(compiler IN LISTS _boost_COMPILER)
+      list(APPEND _boost_RELEASE_NAMES
+        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
+        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}${_boost_ARCHITECTURE_TAG}
+        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG} )
+    endforeach()
+    list(APPEND _boost_RELEASE_NAMES
+      ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
+      ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}${_boost_ARCHITECTURE_TAG}
+      ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}
+      ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}
+      ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component} )
+    if(_boost_STATIC_RUNTIME_WORKAROUND)
+      set(_boost_RELEASE_STATIC_ABI_TAG "-s${_boost_RELEASE_ABI_TAG}")
+      foreach(compiler IN LISTS _boost_COMPILER)
+        list(APPEND _boost_RELEASE_NAMES
+          ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
+          ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG}${_boost_ARCHITECTURE_TAG}
+          ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG} )
+      endforeach()
+      list(APPEND _boost_RELEASE_NAMES
+        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
+        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG}${_boost_ARCHITECTURE_TAG}
+        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG} )
+    endif()
+  endforeach()
+  if(Boost_THREADAPI AND ${COMPONENT} STREQUAL "thread")
+    _Boost_PREPEND_LIST_WITH_THREADAPI(_boost_RELEASE_NAMES ${_boost_RELEASE_NAMES})
+  endif()
+  _Boost_DEBUG_PRINT("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
+                     "Searching for ${UPPERCOMPONENT}_LIBRARY_RELEASE: ${_boost_RELEASE_NAMES}")
+
+  # if Boost_LIBRARY_DIR_RELEASE is not defined,
+  # but Boost_LIBRARY_DIR_DEBUG is, look there first for RELEASE libs
+  if(NOT Boost_LIBRARY_DIR_RELEASE AND Boost_LIBRARY_DIR_DEBUG)
+    list(INSERT _boost_LIBRARY_SEARCH_DIRS_RELEASE 0 ${Boost_LIBRARY_DIR_DEBUG})
+  endif()
+
+  # Avoid passing backslashes to _Boost_FIND_LIBRARY due to macro re-parsing.
+  string(REPLACE "\\" "/" _boost_LIBRARY_SEARCH_DIRS_tmp "${_boost_LIBRARY_SEARCH_DIRS_RELEASE}")
+
+  if(Boost_USE_RELEASE_LIBS)
+    _Boost_FIND_LIBRARY(Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE RELEASE
+      NAMES ${_boost_RELEASE_NAMES}
+      HINTS ${_boost_LIBRARY_SEARCH_DIRS_tmp}
+      NAMES_PER_DIR
+      DOC "${_boost_docstring_release}"
+      )
+  endif()
+
+  #
+  # Find DEBUG libraries
+  #
+  unset(_boost_DEBUG_NAMES)
+  foreach(component IN LISTS _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT_NAME COMPONENT)
+    foreach(compiler IN LISTS _boost_COMPILER)
+      list(APPEND _boost_DEBUG_NAMES
+        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
+        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}${_boost_ARCHITECTURE_TAG}
+        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG} )
+    endforeach()
+    list(APPEND _boost_DEBUG_NAMES
+      ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
+      ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}${_boost_ARCHITECTURE_TAG}
+      ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}
+      ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}
+      ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component} )
+    if(_boost_STATIC_RUNTIME_WORKAROUND)
+      set(_boost_DEBUG_STATIC_ABI_TAG "-s${_boost_DEBUG_ABI_TAG}")
+      foreach(compiler IN LISTS _boost_COMPILER)
+        list(APPEND _boost_DEBUG_NAMES
+          ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
+          ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG}${_boost_ARCHITECTURE_TAG}
+          ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG} )
+      endforeach()
+      list(APPEND _boost_DEBUG_NAMES
+        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
+        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG}${_boost_ARCHITECTURE_TAG}
+        ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG} )
+    endif()
+  endforeach()
+  if(Boost_THREADAPI AND ${COMPONENT} STREQUAL "thread")
+     _Boost_PREPEND_LIST_WITH_THREADAPI(_boost_DEBUG_NAMES ${_boost_DEBUG_NAMES})
+  endif()
+  _Boost_DEBUG_PRINT("${CMAKE_CURRENT_LIST_FILE}" "${CMAKE_CURRENT_LIST_LINE}"
+                     "Searching for ${UPPERCOMPONENT}_LIBRARY_DEBUG: ${_boost_DEBUG_NAMES}")
+
+  # if Boost_LIBRARY_DIR_DEBUG is not defined,
+  # but Boost_LIBRARY_DIR_RELEASE is, look there first for DEBUG libs
+  if(NOT Boost_LIBRARY_DIR_DEBUG AND Boost_LIBRARY_DIR_RELEASE)
+    list(INSERT _boost_LIBRARY_SEARCH_DIRS_DEBUG 0 ${Boost_LIBRARY_DIR_RELEASE})
+  endif()
+
+  # Avoid passing backslashes to _Boost_FIND_LIBRARY due to macro re-parsing.
+  string(REPLACE "\\" "/" _boost_LIBRARY_SEARCH_DIRS_tmp "${_boost_LIBRARY_SEARCH_DIRS_DEBUG}")
+
+  if(Boost_USE_DEBUG_LIBS)
+    _Boost_FIND_LIBRARY(Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG DEBUG
+      NAMES ${_boost_DEBUG_NAMES}
+      HINTS ${_boost_LIBRARY_SEARCH_DIRS_tmp}
+      NAMES_PER_DIR
+      DOC "${_boost_docstring_debug}"
+      )
+  endif ()
+
+  if(Boost_REALPATH)
+    _Boost_SWAP_WITH_REALPATH(Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE "${_boost_docstring_release}")
+    _Boost_SWAP_WITH_REALPATH(Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG   "${_boost_docstring_debug}"  )
+  endif()
+
+  _Boost_ADJUST_LIB_VARS(${UPPERCOMPONENT})
+
+  # Check if component requires some compiler features
+  _Boost_COMPILER_FEATURES(${COMPONENT} _Boost_${UPPERCOMPONENT}_COMPILER_FEATURES)
+
+endforeach()
+
+# Restore the original find library ordering
+if( Boost_USE_STATIC_LIBS )
+  set(CMAKE_FIND_LIBRARY_SUFFIXES ${_boost_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
+endif()
+
+# ------------------------------------------------------------------------
+#  End finding boost libraries
+# ------------------------------------------------------------------------
+
+set(Boost_INCLUDE_DIRS ${Boost_INCLUDE_DIR})
+set(Boost_LIBRARY_DIRS)
+if(Boost_LIBRARY_DIR_RELEASE)
+  list(APPEND Boost_LIBRARY_DIRS ${Boost_LIBRARY_DIR_RELEASE})
+endif()
+if(Boost_LIBRARY_DIR_DEBUG)
+  list(APPEND Boost_LIBRARY_DIRS ${Boost_LIBRARY_DIR_DEBUG})
+endif()
+if(Boost_LIBRARY_DIRS)
+  list(REMOVE_DUPLICATES Boost_LIBRARY_DIRS)
+endif()
+
+# ------------------------------------------------------------------------
+#  Call FPHSA helper, see https://cmake.org/cmake/help/latest/module/FindPackageHandleStandardArgs.html
+# ------------------------------------------------------------------------
+
+# Define aliases as needed by the component handler in the FPHSA helper below
+foreach(_comp IN LISTS Boost_FIND_COMPONENTS)
+  string(TOUPPER ${_comp} _uppercomp)
+  if(DEFINED Boost_${_uppercomp}_FOUND)
+    set(Boost_${_comp}_FOUND ${Boost_${_uppercomp}_FOUND})
+  endif()
+endforeach()
+
+find_package_handle_standard_args(Boost
+  REQUIRED_VARS Boost_INCLUDE_DIR
+  VERSION_VAR Boost_VERSION_STRING
+  HANDLE_COMPONENTS)
+
+if(Boost_FOUND)
+  if( NOT Boost_LIBRARY_DIRS )
+    # Compatibility Code for backwards compatibility with CMake
+    # 2.4's FindBoost module.
+
+    # Look for the boost library path.
+    # Note that the user may not have installed any libraries
+    # so it is quite possible the Boost_LIBRARY_DIRS may not exist.
+    set(_boost_LIB_DIR ${Boost_INCLUDE_DIR})
+
+    if("${_boost_LIB_DIR}" MATCHES "boost-[0-9]+")
+      get_filename_component(_boost_LIB_DIR ${_boost_LIB_DIR} PATH)
+    endif()
+
+    if("${_boost_LIB_DIR}" MATCHES "/include$")
+      # Strip off the trailing "/include" in the path.
+      get_filename_component(_boost_LIB_DIR ${_boost_LIB_DIR} PATH)
+    endif()
+
+    if(EXISTS "${_boost_LIB_DIR}/lib")
+      string(APPEND _boost_LIB_DIR /lib)
+    elseif(EXISTS "${_boost_LIB_DIR}/stage/lib")
+      string(APPEND _boost_LIB_DIR "/stage/lib")
+    else()
+      set(_boost_LIB_DIR "")
+    endif()
+
+    if(_boost_LIB_DIR AND EXISTS "${_boost_LIB_DIR}")
+      set(Boost_LIBRARY_DIRS ${_boost_LIB_DIR})
+    endif()
+
+  endif()
+else()
+  # Boost headers were not found so no components were found.
+  foreach(COMPONENT ${Boost_FIND_COMPONENTS})
+    string(TOUPPER ${COMPONENT} UPPERCOMPONENT)
+    set(Boost_${UPPERCOMPONENT}_FOUND 0)
+  endforeach()
+endif()
+
+# ------------------------------------------------------------------------
+#  Add imported targets
+# ------------------------------------------------------------------------
+
+if(Boost_FOUND)
+  # The builtin CMake package in Boost 1.70+ introduces a new name
+  # for the header-only lib, let's provide the same UI in module mode
+  if(NOT TARGET Boost::headers)
+    add_library(Boost::headers INTERFACE IMPORTED)
+    if(Boost_INCLUDE_DIRS)
+      set_target_properties(Boost::headers PROPERTIES
+        INTERFACE_INCLUDE_DIRECTORIES "${Boost_INCLUDE_DIRS}")
+    endif()
+  endif()
+
+  # Define the old target name for header-only libraries for backwards
+  # compat.
+  if(NOT TARGET Boost::boost)
+    add_library(Boost::boost INTERFACE IMPORTED)
+    set_target_properties(Boost::boost
+      PROPERTIES INTERFACE_LINK_LIBRARIES Boost::headers)
+  endif()
+
+  foreach(COMPONENT ${Boost_FIND_COMPONENTS})
+    if(_Boost_IMPORTED_TARGETS AND NOT TARGET Boost::${COMPONENT})
+      string(TOUPPER ${COMPONENT} UPPERCOMPONENT)
+      if(Boost_${UPPERCOMPONENT}_FOUND)
+        if(Boost_USE_STATIC_LIBS)
+          add_library(Boost::${COMPONENT} STATIC IMPORTED)
+        else()
+          # Even if Boost_USE_STATIC_LIBS is OFF, we might have static
+          # libraries as a result.
+          add_library(Boost::${COMPONENT} UNKNOWN IMPORTED)
+        endif()
+        if(Boost_INCLUDE_DIRS)
+          set_target_properties(Boost::${COMPONENT} PROPERTIES
+            INTERFACE_INCLUDE_DIRECTORIES "${Boost_INCLUDE_DIRS}")
+        endif()
+        if(EXISTS "${Boost_${UPPERCOMPONENT}_LIBRARY}")
+          set_target_properties(Boost::${COMPONENT} PROPERTIES
+            IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
+            IMPORTED_LOCATION "${Boost_${UPPERCOMPONENT}_LIBRARY}")
+        endif()
+        if(EXISTS "${Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE}")
+          set_property(TARGET Boost::${COMPONENT} APPEND PROPERTY
+            IMPORTED_CONFIGURATIONS RELEASE)
+          set_target_properties(Boost::${COMPONENT} PROPERTIES
+            IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
+            IMPORTED_LOCATION_RELEASE "${Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE}")
+        endif()
+        if(EXISTS "${Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG}")
+          set_property(TARGET Boost::${COMPONENT} APPEND PROPERTY
+            IMPORTED_CONFIGURATIONS DEBUG)
+          set_target_properties(Boost::${COMPONENT} PROPERTIES
+            IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX"
+            IMPORTED_LOCATION_DEBUG "${Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG}")
+        endif()
+        if(_Boost_${UPPERCOMPONENT}_DEPENDENCIES)
+          unset(_Boost_${UPPERCOMPONENT}_TARGET_DEPENDENCIES)
+          foreach(dep ${_Boost_${UPPERCOMPONENT}_DEPENDENCIES})
+            list(APPEND _Boost_${UPPERCOMPONENT}_TARGET_DEPENDENCIES Boost::${dep})
+          endforeach()
+          if(COMPONENT STREQUAL "thread")
+            list(APPEND _Boost_${UPPERCOMPONENT}_TARGET_DEPENDENCIES Threads::Threads)
+          endif()
+          set_target_properties(Boost::${COMPONENT} PROPERTIES
+            INTERFACE_LINK_LIBRARIES "${_Boost_${UPPERCOMPONENT}_TARGET_DEPENDENCIES}")
+        endif()
+        if(_Boost_${UPPERCOMPONENT}_COMPILER_FEATURES)
+          set_target_properties(Boost::${COMPONENT} PROPERTIES
+            INTERFACE_COMPILE_FEATURES "${_Boost_${UPPERCOMPONENT}_COMPILER_FEATURES}")
+        endif()
+      endif()
+    endif()
+  endforeach()
+
+  # Supply Boost_LIB_DIAGNOSTIC_DEFINITIONS as a convenience target. It
+  # will only contain any interface definitions on WIN32, but is created
+  # on all platforms to keep end user code free from platform dependent
+  # code.  Also provide convenience targets to disable autolinking and
+  # enable dynamic linking.
+  if(NOT TARGET Boost::diagnostic_definitions)
+    add_library(Boost::diagnostic_definitions INTERFACE IMPORTED)
+    add_library(Boost::disable_autolinking INTERFACE IMPORTED)
+    add_library(Boost::dynamic_linking INTERFACE IMPORTED)
+    set_target_properties(Boost::dynamic_linking PROPERTIES
+      INTERFACE_COMPILE_DEFINITIONS "BOOST_ALL_DYN_LINK")
+  endif()
+  if(WIN32)
+    # In windows, automatic linking is performed, so you do not have
+    # to specify the libraries.  If you are linking to a dynamic
+    # runtime, then you can choose to link to either a static or a
+    # dynamic Boost library, the default is to do a static link.  You
+    # can alter this for a specific library "whatever" by defining
+    # BOOST_WHATEVER_DYN_LINK to force Boost library "whatever" to be
+    # linked dynamically.  Alternatively you can force all Boost
+    # libraries to dynamic link by defining BOOST_ALL_DYN_LINK.
+
+    # This feature can be disabled for Boost library "whatever" by
+    # defining BOOST_WHATEVER_NO_LIB, or for all of Boost by defining
+    # BOOST_ALL_NO_LIB.
+
+    # If you want to observe which libraries are being linked against
+    # then defining BOOST_LIB_DIAGNOSTIC will cause the auto-linking
+    # code to emit a #pragma message each time a library is selected
+    # for linking.
+    set(Boost_LIB_DIAGNOSTIC_DEFINITIONS "-DBOOST_LIB_DIAGNOSTIC")
+    set_target_properties(Boost::diagnostic_definitions PROPERTIES
+      INTERFACE_COMPILE_DEFINITIONS "BOOST_LIB_DIAGNOSTIC")
+    set_target_properties(Boost::disable_autolinking PROPERTIES
+      INTERFACE_COMPILE_DEFINITIONS "BOOST_ALL_NO_LIB")
+  endif()
+endif()
+
+# ------------------------------------------------------------------------
+#  Finalize
+# ------------------------------------------------------------------------
+
+# Report Boost_LIBRARIES
+set(Boost_LIBRARIES "")
+foreach(_comp IN LISTS Boost_FIND_COMPONENTS)
+  string(TOUPPER ${_comp} _uppercomp)
+  if(Boost_${_uppercomp}_FOUND)
+    list(APPEND Boost_LIBRARIES ${Boost_${_uppercomp}_LIBRARY})
+    if(_comp STREQUAL "thread")
+      list(APPEND Boost_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
+    endif()
+  endif()
+endforeach()
+
+# Configure display of cache entries in GUI.
+foreach(v BOOSTROOT BOOST_ROOT ${_Boost_VARS_INC} ${_Boost_VARS_LIB})
+  get_property(_type CACHE ${v} PROPERTY TYPE)
+  if(_type)
+    set_property(CACHE ${v} PROPERTY ADVANCED 1)
+    if("x${_type}" STREQUAL "xUNINITIALIZED")
+      if("x${v}" STREQUAL "xBoost_ADDITIONAL_VERSIONS")
+        set_property(CACHE ${v} PROPERTY TYPE STRING)
+      else()
+        set_property(CACHE ${v} PROPERTY TYPE PATH)
+      endif()
+    endif()
+  endif()
+endforeach()
+
+# Record last used values of input variables so we can
+# detect on the next run if the user changed them.
+foreach(v
+    ${_Boost_VARS_INC} ${_Boost_VARS_LIB}
+    ${_Boost_VARS_DIR} ${_Boost_VARS_NAME}
+    )
+  if(DEFINED ${v})
+    set(_${v}_LAST "${${v}}" CACHE INTERNAL "Last used ${v} value.")
+  else()
+    unset(_${v}_LAST CACHE)
+  endif()
+endforeach()
+
+# Maintain a persistent list of components requested anywhere since
+# the last flush.
+set(_Boost_COMPONENTS_SEARCHED "${_Boost_COMPONENTS_SEARCHED}")
+list(APPEND _Boost_COMPONENTS_SEARCHED ${Boost_FIND_COMPONENTS})
+list(REMOVE_DUPLICATES _Boost_COMPONENTS_SEARCHED)
+list(SORT _Boost_COMPONENTS_SEARCHED)
+set(_Boost_COMPONENTS_SEARCHED "${_Boost_COMPONENTS_SEARCHED}"
+  CACHE INTERNAL "Components requested for this build tree.")
+
+# Restore project's policies
+cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/FindBullet.cmake b/share/cmake-3.22/Modules/FindBullet.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindBullet.cmake
rename to share/cmake-3.22/Modules/FindBullet.cmake
diff --git a/share/cmake-3.18/Modules/FindCABLE.cmake b/share/cmake-3.22/Modules/FindCABLE.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindCABLE.cmake
rename to share/cmake-3.22/Modules/FindCABLE.cmake
diff --git a/share/cmake-3.22/Modules/FindCUDA.cmake b/share/cmake-3.22/Modules/FindCUDA.cmake
new file mode 100644
index 0000000..dd795f4
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindCUDA.cmake
@@ -0,0 +1,2172 @@
+#[=======================================================================[.rst:
+FindCUDA
+--------
+
+.. warning:: *Deprecated since version 3.10.*
+
+It is no longer necessary to use this module or call ``find_package(CUDA)``
+for compiling CUDA code. Instead, list ``CUDA`` among the languages named
+in the top-level call to the :command:`project` command, or call the
+:command:`enable_language` command with ``CUDA``.
+Then one can add CUDA (``.cu``) sources directly to targets similar to other
+languages.
+
+.. versionadded:: 3.17
+  To find and use the CUDA toolkit libraries manually, use the
+  :module:`FindCUDAToolkit` module instead.  It works regardless of the
+  ``CUDA`` language being enabled.
+
+Documentation of Deprecated Usage
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Tools for building CUDA C files: libraries and build dependencies.
+
+This script locates the NVIDIA CUDA C tools.  It should work on Linux,
+Windows, and macOS and should be reasonably up to date with CUDA C
+releases.
+
+.. versionadded:: 3.19
+  QNX support.
+
+This script makes use of the standard :command:`find_package` arguments of
+``<VERSION>``, ``REQUIRED`` and ``QUIET``.  ``CUDA_FOUND`` will report if an
+acceptable version of CUDA was found.
+
+The script will prompt the user to specify ``CUDA_TOOLKIT_ROOT_DIR`` if
+the prefix cannot be determined by the location of nvcc in the system
+path and ``REQUIRED`` is specified to :command:`find_package`.  To use
+a different installed version of the toolkit set the environment variable
+``CUDA_BIN_PATH`` before running cmake (e.g.
+``CUDA_BIN_PATH=/usr/local/cuda1.0`` instead of the default
+``/usr/local/cuda``) or set ``CUDA_TOOLKIT_ROOT_DIR`` after configuring.  If
+you change the value of ``CUDA_TOOLKIT_ROOT_DIR``, various components that
+depend on the path will be relocated.
+
+It might be necessary to set ``CUDA_TOOLKIT_ROOT_DIR`` manually on certain
+platforms, or to use a CUDA runtime not installed in the default
+location.  In newer versions of the toolkit the CUDA library is
+included with the graphics driver -- be sure that the driver version
+matches what is needed by the CUDA runtime version.
+
+Input Variables
+"""""""""""""""
+
+The following variables affect the behavior of the macros in the
+script (in alphabetical order).  Note that any of these flags can be
+changed multiple times in the same directory before calling
+``cuda_add_executable()``, ``cuda_add_library()``, ``cuda_compile()``,
+``cuda_compile_ptx()``, ``cuda_compile_fatbin()``, ``cuda_compile_cubin()``
+or ``cuda_wrap_srcs()``:
+
+``CUDA_64_BIT_DEVICE_CODE`` (Default: host bit size)
+  Set to ``ON`` to compile for 64 bit device code, OFF for 32 bit device code.
+  Note that making this different from the host code when generating object
+  or C files from CUDA code just won't work, because size_t gets defined by
+  nvcc in the generated source.  If you compile to PTX and then load the
+  file yourself, you can mix bit sizes between device and host.
+
+``CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE`` (Default: ``ON``)
+  Set to ``ON`` if you want the custom build rule to be attached to the source
+  file in Visual Studio.  Turn OFF if you add the same cuda file to multiple
+  targets.
+
+  This allows the user to build the target from the CUDA file; however, bad
+  things can happen if the CUDA source file is added to multiple targets.
+  When performing parallel builds it is possible for the custom build
+  command to be run more than once and in parallel causing cryptic build
+  errors.  VS runs the rules for every source file in the target, and a
+  source can have only one rule no matter how many projects it is added to.
+  When the rule is run from multiple targets race conditions can occur on
+  the generated file.  Eventually everything will get built, but if the user
+  is unaware of this behavior, there may be confusion.  It would be nice if
+  this script could detect the reuse of source files across multiple targets
+  and turn the option off for the user, but no good solution could be found.
+
+``CUDA_BUILD_CUBIN`` (Default: ``OFF``)
+  Set to ``ON`` to enable and extra compilation pass with the ``-cubin`` option in
+  Device mode. The output is parsed and register, shared memory usage is
+  printed during build.
+
+``CUDA_BUILD_EMULATION`` (Default: ``OFF`` for device mode)
+  Set to ``ON`` for Emulation mode. ``-D_DEVICEEMU`` is defined for CUDA C files
+  when ``CUDA_BUILD_EMULATION`` is ``TRUE``.
+
+``CUDA_LINK_LIBRARIES_KEYWORD`` (Default: ``""``)
+  .. versionadded:: 3.9
+
+  The ``<PRIVATE|PUBLIC|INTERFACE>`` keyword to use for internal
+  :command:`target_link_libraries` calls. The default is to use no keyword which
+  uses the old "plain" form of :command:`target_link_libraries`. Note that is matters
+  because whatever is used inside the ``FindCUDA`` module must also be used
+  outside - the two forms of :command:`target_link_libraries` cannot be mixed.
+
+``CUDA_GENERATED_OUTPUT_DIR`` (Default: :variable:`CMAKE_CURRENT_BINARY_DIR`)
+  Set to the path you wish to have the generated files placed.  If it is
+  blank output files will be placed in :variable:`CMAKE_CURRENT_BINARY_DIR`.
+  Intermediate files will always be placed in
+  ``CMAKE_CURRENT_BINARY_DIR/CMakeFiles``.
+
+``CUDA_HOST_COMPILATION_CPP`` (Default: ``ON``)
+  Set to ``OFF`` for C compilation of host code.
+
+``CUDA_HOST_COMPILER`` (Default: ``CMAKE_C_COMPILER``)
+  Set the host compiler to be used by nvcc.  Ignored if ``-ccbin`` or
+  ``--compiler-bindir`` is already present in the ``CUDA_NVCC_FLAGS`` or
+  ``CUDA_NVCC_FLAGS_<CONFIG>`` variables.  For Visual Studio targets,
+  the host compiler is constructed with one or more visual studio macros
+  such as ``$(VCInstallDir)``, that expands out to the path when
+  the command is run from within VS.
+
+  .. versionadded:: 3.13
+    If the :envvar:`CUDAHOSTCXX` environment variable is set it will
+    be used as the default.
+
+``CUDA_NVCC_FLAGS``, ``CUDA_NVCC_FLAGS_<CONFIG>``
+  Additional NVCC command line arguments.  NOTE: multiple arguments must be
+  semi-colon delimited (e.g. ``--compiler-options;-Wall``)
+
+  .. versionadded:: 3.6
+    Contents of these variables may use
+    :manual:`generator expressions <cmake-generator-expressions(7)>`.
+
+``CUDA_PROPAGATE_HOST_FLAGS`` (Default: ``ON``)
+  Set to ``ON`` to propagate :variable:`CMAKE_{C,CXX}_FLAGS <CMAKE_<LANG>_FLAGS>` and their configuration
+  dependent counterparts (e.g. ``CMAKE_C_FLAGS_DEBUG``) automatically to the
+  host compiler through nvcc's ``-Xcompiler`` flag.  This helps make the
+  generated host code match the rest of the system better.  Sometimes
+  certain flags give nvcc problems, and this will help you turn the flag
+  propagation off.  This does not affect the flags supplied directly to nvcc
+  via ``CUDA_NVCC_FLAGS`` or through the ``OPTION`` flags specified through
+  ``cuda_add_library()``, ``cuda_add_executable()``, or ``cuda_wrap_srcs()``.  Flags used for
+  shared library compilation are not affected by this flag.
+
+``CUDA_SEPARABLE_COMPILATION`` (Default: ``OFF``)
+  If set this will enable separable compilation for all CUDA runtime object
+  files.  If used outside of ``cuda_add_executable()`` and ``cuda_add_library()``
+  (e.g. calling ``cuda_wrap_srcs()`` directly),
+  ``cuda_compute_separable_compilation_object_file_name()`` and
+  ``cuda_link_separable_compilation_objects()`` should be called.
+
+``CUDA_SOURCE_PROPERTY_FORMAT``
+  .. versionadded:: 3.3
+
+  If this source file property is set, it can override the format specified
+  to ``cuda_wrap_srcs()`` (``OBJ``, ``PTX``, ``CUBIN``, or ``FATBIN``).  If an input source file
+  is not a ``.cu`` file, setting this file will cause it to be treated as a ``.cu``
+  file. See documentation for set_source_files_properties on how to set
+  this property.
+
+``CUDA_USE_STATIC_CUDA_RUNTIME`` (Default: ``ON``)
+  .. versionadded:: 3.3
+
+  When enabled the static version of the CUDA runtime library will be used
+  in ``CUDA_LIBRARIES``.  If the version of CUDA configured doesn't support
+  this option, then it will be silently disabled.
+
+``CUDA_VERBOSE_BUILD`` (Default: ``OFF``)
+  Set to ``ON`` to see all the commands used when building the CUDA file.  When
+  using a Makefile generator the value defaults to ``VERBOSE`` (run
+  ``make VERBOSE=1`` to see output), although setting ``CUDA_VERBOSE_BUILD`` to ``ON`` will
+  always print the output.
+
+Commands
+""""""""
+
+The script creates the following functions and macros (in alphabetical order):
+
+.. code-block:: cmake
+
+  cuda_add_cufft_to_target(<cuda_target>)
+
+Adds the cufft library to the target (can be any target).  Handles whether
+you are in emulation mode or not.
+
+.. code-block:: cmake
+
+  cuda_add_cublas_to_target(<cuda_target>)
+
+Adds the cublas library to the target (can be any target).  Handles
+whether you are in emulation mode or not.
+
+.. code-block:: cmake
+
+  cuda_add_executable(<cuda_target> <file>...
+                      [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] [OPTIONS ...])
+
+Creates an executable ``<cuda_target>`` which is made up of the files
+specified.  All of the non CUDA C files are compiled using the standard
+build rules specified by CMake and the CUDA files are compiled to object
+files using nvcc and the host compiler.  In addition ``CUDA_INCLUDE_DIRS`` is
+added automatically to :command:`include_directories`.  Some standard CMake target
+calls can be used on the target after calling this macro
+(e.g. :command:`set_target_properties` and :command:`target_link_libraries`), but setting
+properties that adjust compilation flags will not affect code compiled by
+nvcc.  Such flags should be modified before calling ``cuda_add_executable()``,
+``cuda_add_library()`` or ``cuda_wrap_srcs()``.
+
+.. code-block:: cmake
+
+  cuda_add_library(<cuda_target> <file>...
+                   [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] [OPTIONS ...])
+
+Same as ``cuda_add_executable()`` except that a library is created.
+
+.. code-block:: cmake
+
+  cuda_build_clean_target()
+
+Creates a convenience target that deletes all the dependency files
+generated.  You should make clean after running this target to ensure the
+dependency files get regenerated.
+
+.. code-block:: cmake
+
+  cuda_compile(<generated_files> <file>... [STATIC | SHARED | MODULE]
+               [OPTIONS ...])
+
+Returns a list of generated files from the input source files to be used
+with :command:`add_library` or :command:`add_executable`.
+
+.. code-block:: cmake
+
+  cuda_compile_ptx(<generated_files> <file>... [OPTIONS ...])
+
+Returns a list of ``PTX`` files generated from the input source files.
+
+.. code-block:: cmake
+
+  cuda_compile_fatbin(<generated_files> <file>... [OPTIONS ...])
+
+.. versionadded:: 3.1
+
+Returns a list of ``FATBIN`` files generated from the input source files.
+
+.. code-block:: cmake
+
+  cuda_compile_cubin(<generated_files> <file>... [OPTIONS ...])
+
+.. versionadded:: 3.1
+
+Returns a list of ``CUBIN`` files generated from the input source files.
+
+.. code-block:: cmake
+
+  cuda_compute_separable_compilation_object_file_name(<output_file_var>
+                                                      <cuda_target>
+                                                      <object_files>)
+
+Compute the name of the intermediate link file used for separable
+compilation.  This file name is typically passed into
+``CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS``.  output_file_var is produced
+based on cuda_target the list of objects files that need separable
+compilation as specified by ``<object_files>``.  If the ``<object_files>`` list is
+empty, then ``<output_file_var>`` will be empty.  This function is called
+automatically for ``cuda_add_library()`` and ``cuda_add_executable()``.  Note that
+this is a function and not a macro.
+
+.. code-block:: cmake
+
+  cuda_include_directories(path0 path1 ...)
+
+Sets the directories that should be passed to nvcc
+(e.g. ``nvcc -Ipath0 -Ipath1 ...``). These paths usually contain other ``.cu``
+files.
+
+.. code-block:: cmake
+
+  cuda_link_separable_compilation_objects(<output_file_var> <cuda_target>
+                                          <nvcc_flags> <object_files>)
+
+Generates the link object required by separable compilation from the given
+object files.  This is called automatically for ``cuda_add_executable()`` and
+``cuda_add_library()``, but can be called manually when using ``cuda_wrap_srcs()``
+directly.  When called from ``cuda_add_library()`` or ``cuda_add_executable()`` the
+``<nvcc_flags>`` passed in are the same as the flags passed in via the ``OPTIONS``
+argument.  The only nvcc flag added automatically is the bitness flag as
+specified by ``CUDA_64_BIT_DEVICE_CODE``.  Note that this is a function
+instead of a macro.
+
+.. code-block:: cmake
+
+  cuda_select_nvcc_arch_flags(<out_variable> [<target_CUDA_architecture> ...])
+
+Selects GPU arch flags for nvcc based on ``target_CUDA_architecture``.
+
+Values for ``target_CUDA_architecture``:
+
+* ``Auto``: detects local machine GPU compute arch at runtime.
+* ``Common`` and ``All``: cover common and entire subsets of architectures.
+* ``<name>``: one of ``Fermi``, ``Kepler``, ``Maxwell``, ``Kepler+Tegra``, ``Kepler+Tesla``, ``Maxwell+Tegra``, ``Pascal``.
+* ``<ver>``, ``<ver>(<ver>)``, ``<ver>+PTX``, where ``<ver>`` is one of
+  ``2.0``, ``2.1``, ``3.0``, ``3.2``, ``3.5``, ``3.7``, ``5.0``, ``5.2``, ``5.3``, ``6.0``, ``6.2``.
+
+Returns list of flags to be added to ``CUDA_NVCC_FLAGS`` in ``<out_variable>``.
+Additionally, sets ``<out_variable>_readable`` to the resulting numeric list.
+
+Example::
+
+  cuda_select_nvcc_arch_flags(ARCH_FLAGS 3.0 3.5+PTX 5.2(5.0) Maxwell)
+  list(APPEND CUDA_NVCC_FLAGS ${ARCH_FLAGS})
+
+More info on CUDA architectures: https://en.wikipedia.org/wiki/CUDA.
+Note that this is a function instead of a macro.
+
+.. code-block:: cmake
+
+  cuda_wrap_srcs(<cuda_target> <format> <generated_files> <file>...
+                 [STATIC | SHARED | MODULE] [OPTIONS ...])
+
+This is where all the magic happens.  ``cuda_add_executable()``,
+``cuda_add_library()``, ``cuda_compile()``, and ``cuda_compile_ptx()`` all call this
+function under the hood.
+
+Given the list of files ``<file>...`` this macro generates
+custom commands that generate either PTX or linkable objects (use ``PTX`` or
+``OBJ`` for the ``<format>`` argument to switch).  Files that don't end with ``.cu``
+or have the ``HEADER_FILE_ONLY`` property are ignored.
+
+The arguments passed in after ``OPTIONS`` are extra command line options to
+give to nvcc.  You can also specify per configuration options by
+specifying the name of the configuration followed by the options.  General
+options must precede configuration specific options.  Not all
+configurations need to be specified, only the ones provided will be used.
+For example:
+
+.. code-block:: cmake
+
+  cuda_add_executable(...
+    OPTIONS -DFLAG=2 "-DFLAG_OTHER=space in flag"
+    DEBUG -g
+    RELEASE --use_fast_math
+    RELWITHDEBINFO --use_fast_math;-g
+    MINSIZEREL --use_fast_math)
+
+For certain configurations (namely VS generating object files with
+``CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE`` set to ``ON``), no generated file will
+be produced for the given cuda file.  This is because when you add the
+cuda file to Visual Studio it knows that this file produces an object file
+and will link in the resulting object file automatically.
+
+This script will also generate a separate cmake script that is used at
+build time to invoke nvcc.  This is for several reasons:
+
+* nvcc can return negative numbers as return values which confuses
+  Visual Studio into thinking that the command succeeded.  The script now
+  checks the error codes and produces errors when there was a problem.
+
+* nvcc has been known to not delete incomplete results when it
+  encounters problems.  This confuses build systems into thinking the
+  target was generated when in fact an unusable file exists.  The script
+  now deletes the output files if there was an error.
+
+* By putting all the options that affect the build into a file and then
+  make the build rule dependent on the file, the output files will be
+  regenerated when the options change.
+
+This script also looks at optional arguments ``STATIC``, ``SHARED``, or ``MODULE`` to
+determine when to target the object compilation for a shared library.
+:variable:`BUILD_SHARED_LIBS` is ignored in ``cuda_wrap_srcs()``, but it is respected in
+``cuda_add_library()``.  On some systems special flags are added for building
+objects intended for shared libraries.  A preprocessor macro,
+``<target_name>_EXPORTS`` is defined when a shared library compilation is
+detected.
+
+Flags passed into add_definitions with ``-D`` or ``/D`` are passed along to nvcc.
+
+Result Variables
+""""""""""""""""
+
+The script defines the following variables:
+
+``CUDA_VERSION_MAJOR``
+  The major version of cuda as reported by nvcc.
+
+``CUDA_VERSION_MINOR``
+  The minor version.
+
+``CUDA_VERSION``, ``CUDA_VERSION_STRING``
+  Full version in the ``X.Y`` format.
+
+``CUDA_HAS_FP16``
+  .. versionadded:: 3.6
+    Whether a short float (``float16``, ``fp16``) is supported.
+
+``CUDA_TOOLKIT_ROOT_DIR``
+  Path to the CUDA Toolkit (defined if not set).
+
+``CUDA_SDK_ROOT_DIR``
+  Path to the CUDA SDK.  Use this to find files in the SDK.  This script will
+  not directly support finding specific libraries or headers, as that isn't
+  supported by NVIDIA.  If you want to change libraries when the path changes
+  see the ``FindCUDA.cmake`` script for an example of how to clear these
+  variables.  There are also examples of how to use the ``CUDA_SDK_ROOT_DIR``
+  to locate headers or libraries, if you so choose (at your own risk).
+
+``CUDA_INCLUDE_DIRS``
+  Include directory for cuda headers.  Added automatically
+  for ``cuda_add_executable()`` and ``cuda_add_library()``.
+
+``CUDA_LIBRARIES``
+  Cuda RT library.
+
+``CUDA_CUFFT_LIBRARIES``
+  Device or emulation library for the Cuda FFT implementation (alternative to
+  ``cuda_add_cufft_to_target()`` macro)
+
+``CUDA_CUBLAS_LIBRARIES``
+  Device or emulation library for the Cuda BLAS implementation (alternative to
+  ``cuda_add_cublas_to_target()`` macro).
+
+``CUDA_cudart_static_LIBRARY``
+  Statically linkable cuda runtime library.
+  Only available for CUDA version 5.5+.
+
+``CUDA_cudadevrt_LIBRARY``
+  .. versionadded:: 3.7
+    Device runtime library.  Required for separable compilation.
+
+``CUDA_cupti_LIBRARY``
+  CUDA Profiling Tools Interface library.
+  Only available for CUDA version 4.0+.
+
+``CUDA_curand_LIBRARY``
+  CUDA Random Number Generation library.
+  Only available for CUDA version 3.2+.
+
+``CUDA_cusolver_LIBRARY``
+  .. versionadded:: 3.2
+    CUDA Direct Solver library.
+    Only available for CUDA version 7.0+.
+
+``CUDA_cusparse_LIBRARY``
+  CUDA Sparse Matrix library.
+  Only available for CUDA version 3.2+.
+
+``CUDA_npp_LIBRARY``
+  NVIDIA Performance Primitives lib.
+  Only available for CUDA version 4.0+.
+
+``CUDA_nppc_LIBRARY``
+  NVIDIA Performance Primitives lib (core).
+  Only available for CUDA version 5.5+.
+
+``CUDA_nppi_LIBRARY``
+  NVIDIA Performance Primitives lib (image processing).
+  Only available for CUDA version 5.5 - 8.0.
+
+``CUDA_nppial_LIBRARY``
+  NVIDIA Performance Primitives lib (image processing).
+  Only available for CUDA version 9.0.
+
+``CUDA_nppicc_LIBRARY``
+  NVIDIA Performance Primitives lib (image processing).
+  Only available for CUDA version 9.0.
+
+``CUDA_nppicom_LIBRARY``
+  NVIDIA Performance Primitives lib (image processing).
+  Only available for CUDA version 9.0 - 10.2.
+  Replaced by nvjpeg.
+
+``CUDA_nppidei_LIBRARY``
+  NVIDIA Performance Primitives lib (image processing).
+  Only available for CUDA version 9.0.
+
+``CUDA_nppif_LIBRARY``
+  NVIDIA Performance Primitives lib (image processing).
+  Only available for CUDA version 9.0.
+
+``CUDA_nppig_LIBRARY``
+  NVIDIA Performance Primitives lib (image processing).
+  Only available for CUDA version 9.0.
+
+``CUDA_nppim_LIBRARY``
+  NVIDIA Performance Primitives lib (image processing).
+  Only available for CUDA version 9.0.
+
+``CUDA_nppist_LIBRARY``
+  NVIDIA Performance Primitives lib (image processing).
+  Only available for CUDA version 9.0.
+
+``CUDA_nppisu_LIBRARY``
+  NVIDIA Performance Primitives lib (image processing).
+  Only available for CUDA version 9.0.
+
+``CUDA_nppitc_LIBRARY``
+  NVIDIA Performance Primitives lib (image processing).
+  Only available for CUDA version 9.0.
+
+``CUDA_npps_LIBRARY``
+  NVIDIA Performance Primitives lib (signal processing).
+  Only available for CUDA version 5.5+.
+
+``CUDA_nvcuvenc_LIBRARY``
+  CUDA Video Encoder library.
+  Only available for CUDA version 3.2+.
+  Windows only.
+
+``CUDA_nvcuvid_LIBRARY``
+  CUDA Video Decoder library.
+  Only available for CUDA version 3.2+.
+  Windows only.
+
+``CUDA_nvToolsExt_LIBRARY``
+  .. versionadded:: 3.16
+    NVIDA CUDA Tools Extension library.
+    Available for CUDA version 5+.
+
+``CUDA_OpenCL_LIBRARY``
+  .. versionadded:: 3.16
+    NVIDA CUDA OpenCL library.
+    Available for CUDA version 5+.
+
+#]=======================================================================]
+
+#   James Bigler, NVIDIA Corp (nvidia.com - jbigler)
+#   Abe Stephens, SCI Institute -- http://www.sci.utah.edu/~abe/FindCuda.html
+#
+#   Copyright (c) 2008 - 2009 NVIDIA Corporation.  All rights reserved.
+#
+#   Copyright (c) 2007-2009
+#   Scientific Computing and Imaging Institute, University of Utah
+#
+#   This code is licensed under the MIT License.  See the FindCUDA.cmake script
+#   for the text of the license.
+
+# The MIT License
+#
+# License for the specific language governing rights and limitations under
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+# DEALINGS IN THE SOFTWARE.
+#
+###############################################################################
+
+# FindCUDA.cmake
+
+# This macro helps us find the location of helper files we will need the full path to
+macro(CUDA_FIND_HELPER_FILE _name _extension)
+  set(_full_name "${_name}.${_extension}")
+  # CMAKE_CURRENT_LIST_FILE contains the full path to the file currently being
+  # processed.  Using this variable, we can pull out the current path, and
+  # provide a way to get access to the other files we need local to here.
+  get_filename_component(CMAKE_CURRENT_LIST_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
+  set(CUDA_${_name} "${CMAKE_CURRENT_LIST_DIR}/FindCUDA/${_full_name}")
+  if(NOT EXISTS "${CUDA_${_name}}")
+    set(error_message "${_full_name} not found in ${CMAKE_CURRENT_LIST_DIR}/FindCUDA")
+    if(CUDA_FIND_REQUIRED)
+      message(FATAL_ERROR "${error_message}")
+    else()
+      if(NOT CUDA_FIND_QUIETLY)
+        message(STATUS "${error_message}")
+      endif()
+    endif()
+  endif()
+  # Set this variable as internal, so the user isn't bugged with it.
+  set(CUDA_${_name} ${CUDA_${_name}} CACHE INTERNAL "Location of ${_full_name}" FORCE)
+endmacro()
+
+#####################################################################
+## CUDA_INCLUDE_NVCC_DEPENDENCIES
+##
+
+# So we want to try and include the dependency file if it exists.  If
+# it doesn't exist then we need to create an empty one, so we can
+# include it.
+
+# If it does exist, then we need to check to see if all the files it
+# depends on exist.  If they don't then we should clear the dependency
+# file and regenerate it later.  This covers the case where a header
+# file has disappeared or moved.
+
+macro(CUDA_INCLUDE_NVCC_DEPENDENCIES dependency_file)
+  set(CUDA_NVCC_DEPEND)
+  set(CUDA_NVCC_DEPEND_REGENERATE FALSE)
+
+
+  # Include the dependency file.  Create it first if it doesn't exist .  The
+  # INCLUDE puts a dependency that will force CMake to rerun and bring in the
+  # new info when it changes.  DO NOT REMOVE THIS (as I did and spent a few
+  # hours figuring out why it didn't work.
+  if(NOT EXISTS ${dependency_file})
+    file(WRITE ${dependency_file} "#FindCUDA.cmake generated file.  Do not edit.\n")
+  endif()
+  # Always include this file to force CMake to run again next
+  # invocation and rebuild the dependencies.
+  #message("including dependency_file = ${dependency_file}")
+  include(${dependency_file})
+
+  # Now we need to verify the existence of all the included files
+  # here.  If they aren't there we need to just blank this variable and
+  # make the file regenerate again.
+#   if(DEFINED CUDA_NVCC_DEPEND)
+#     message("CUDA_NVCC_DEPEND set")
+#   else()
+#     message("CUDA_NVCC_DEPEND NOT set")
+#   endif()
+  if(CUDA_NVCC_DEPEND)
+    #message("CUDA_NVCC_DEPEND found")
+    foreach(f ${CUDA_NVCC_DEPEND})
+      # message("searching for ${f}")
+      if(NOT EXISTS ${f})
+        #message("file ${f} not found")
+        set(CUDA_NVCC_DEPEND_REGENERATE TRUE)
+      endif()
+    endforeach()
+  else()
+    #message("CUDA_NVCC_DEPEND false")
+    # No dependencies, so regenerate the file.
+    set(CUDA_NVCC_DEPEND_REGENERATE TRUE)
+  endif()
+
+  #message("CUDA_NVCC_DEPEND_REGENERATE = ${CUDA_NVCC_DEPEND_REGENERATE}")
+  # No incoming dependencies, so we need to generate them.  Make the
+  # output depend on the dependency file itself, which should cause the
+  # rule to re-run.
+  if(CUDA_NVCC_DEPEND_REGENERATE)
+    set(CUDA_NVCC_DEPEND ${dependency_file})
+    #message("Generating an empty dependency_file: ${dependency_file}")
+    file(WRITE ${dependency_file} "#FindCUDA.cmake generated file.  Do not edit.\n")
+  endif()
+
+endmacro()
+
+###############################################################################
+###############################################################################
+# Setup variables' defaults
+###############################################################################
+###############################################################################
+
+# Allow the user to specify if the device code is supposed to be 32 or 64 bit.
+if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+  set(CUDA_64_BIT_DEVICE_CODE_DEFAULT ON)
+else()
+  set(CUDA_64_BIT_DEVICE_CODE_DEFAULT OFF)
+endif()
+option(CUDA_64_BIT_DEVICE_CODE "Compile device code in 64 bit mode" ${CUDA_64_BIT_DEVICE_CODE_DEFAULT})
+
+# Attach the build rule to the source file in VS.  This option
+option(CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE "Attach the build rule to the CUDA source file.  Enable only when the CUDA source file is added to at most one target." ON)
+
+# Prints out extra information about the cuda file during compilation
+option(CUDA_BUILD_CUBIN "Generate and parse .cubin files in Device mode." OFF)
+
+# Set whether we are using emulation or device mode.
+option(CUDA_BUILD_EMULATION "Build in Emulation mode" OFF)
+
+# Where to put the generated output.
+set(CUDA_GENERATED_OUTPUT_DIR "" CACHE PATH "Directory to put all the output files.  If blank it will default to the CMAKE_CURRENT_BINARY_DIR")
+
+# Parse HOST_COMPILATION mode.
+option(CUDA_HOST_COMPILATION_CPP "Generated file extension" ON)
+
+# Extra user settable flags
+cmake_initialize_per_config_variable(CUDA_NVCC_FLAGS "Semi-colon delimit multiple arguments.")
+
+if(DEFINED ENV{CUDAHOSTCXX})
+  set(CUDA_HOST_COMPILER "$ENV{CUDAHOSTCXX}" CACHE FILEPATH "Host side compiler used by NVCC")
+elseif(CMAKE_GENERATOR MATCHES "Visual Studio")
+  set(_CUDA_MSVC_HOST_COMPILER "$(VCInstallDir)Tools/MSVC/$(VCToolsVersion)/bin/Host$(Platform)/$(PlatformTarget)")
+  if(MSVC_VERSION LESS 1910)
+    set(_CUDA_MSVC_HOST_COMPILER "$(VCInstallDir)bin")
+  endif()
+
+  set(CUDA_HOST_COMPILER "${_CUDA_MSVC_HOST_COMPILER}" CACHE FILEPATH "Host side compiler used by NVCC")
+
+else()
+  if(APPLE
+      AND "${CMAKE_C_COMPILER_ID}" MATCHES "Clang"
+      AND "${CMAKE_C_COMPILER}" MATCHES "/cc$")
+    # Using cc which is symlink to clang may let NVCC think it is GCC and issue
+    # unhandled -dumpspecs option to clang. Also in case neither
+    # CMAKE_C_COMPILER is defined (project does not use C language) nor
+    # CUDA_HOST_COMPILER is specified manually we should skip -ccbin and let
+    # nvcc use its own default C compiler.
+    # Only care about this on APPLE with clang to avoid
+    # following symlinks to things like ccache
+    if(DEFINED CMAKE_C_COMPILER AND NOT DEFINED CUDA_HOST_COMPILER)
+      get_filename_component(c_compiler_realpath "${CMAKE_C_COMPILER}" REALPATH)
+      # if the real path does not end up being clang then
+      # go back to using CMAKE_C_COMPILER
+      if(NOT "${c_compiler_realpath}" MATCHES "/clang$")
+        set(c_compiler_realpath "${CMAKE_C_COMPILER}")
+      endif()
+    else()
+      set(c_compiler_realpath "")
+    endif()
+    set(CUDA_HOST_COMPILER "${c_compiler_realpath}" CACHE FILEPATH "Host side compiler used by NVCC")
+  elseif(MSVC AND "${CMAKE_C_COMPILER}" MATCHES "clcache|sccache")
+    # NVCC does not think it will work if it is passed clcache.exe or sccache.exe
+    # as the host compiler, which means that builds with CC=cl.exe won't work.
+    # Best to just feed it whatever the actual cl.exe is as the host compiler.
+    set(CUDA_HOST_COMPILER "cl.exe" CACHE FILEPATH "Host side compiler used by NVCC")
+  else()
+    set(CUDA_HOST_COMPILER "${CMAKE_C_COMPILER}"
+      CACHE FILEPATH "Host side compiler used by NVCC")
+  endif()
+endif()
+
+# Propagate the host flags to the host compiler via -Xcompiler
+option(CUDA_PROPAGATE_HOST_FLAGS "Propagate C/CXX_FLAGS and friends to the host compiler via -Xcompile" ON)
+
+# Enable CUDA_SEPARABLE_COMPILATION
+option(CUDA_SEPARABLE_COMPILATION "Compile CUDA objects with separable compilation enabled.  Requires CUDA 5.0+" OFF)
+
+# Specifies whether the commands used when compiling the .cu file will be printed out.
+option(CUDA_VERBOSE_BUILD "Print out the commands run while compiling the CUDA source file.  With the Makefile generator this defaults to VERBOSE variable specified on the command line, but can be forced on with this option." OFF)
+
+mark_as_advanced(
+  CUDA_64_BIT_DEVICE_CODE
+  CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE
+  CUDA_GENERATED_OUTPUT_DIR
+  CUDA_HOST_COMPILATION_CPP
+  CUDA_NVCC_FLAGS
+  CUDA_PROPAGATE_HOST_FLAGS
+  CUDA_BUILD_CUBIN
+  CUDA_BUILD_EMULATION
+  CUDA_VERBOSE_BUILD
+  CUDA_SEPARABLE_COMPILATION
+  )
+
+# Single config generators like Makefiles or Ninja don't usually have
+# CMAKE_CONFIGURATION_TYPES defined (but note that it can be defined if set by
+# projects or developers). Even CMAKE_BUILD_TYPE might not be defined for
+# single config generators (and should not be defined for multi-config
+# generators). To ensure we get a complete superset of all possible
+# configurations, we combine CMAKE_CONFIGURATION_TYPES, CMAKE_BUILD_TYPE and
+# all of the standard configurations, then weed out duplicates with
+# list(REMOVE_DUPLICATES). Looping over the unique set then ensures we have
+# each configuration-specific set of nvcc flags defined and marked as advanced.
+set(CUDA_configuration_types ${CMAKE_CONFIGURATION_TYPES} ${CMAKE_BUILD_TYPE} Debug MinSizeRel Release RelWithDebInfo)
+list(REMOVE_DUPLICATES CUDA_configuration_types)
+
+###############################################################################
+###############################################################################
+# Locate CUDA, Set Build Type, etc.
+###############################################################################
+###############################################################################
+
+macro(cuda_unset_include_and_libraries)
+  unset(CUDA_TOOLKIT_INCLUDE CACHE)
+  unset(CUDA_CUDART_LIBRARY CACHE)
+  unset(CUDA_CUDA_LIBRARY CACHE)
+  # Make sure you run this before you unset CUDA_VERSION.
+  if(CUDA_VERSION VERSION_EQUAL "3.0")
+    # This only existed in the 3.0 version of the CUDA toolkit
+    unset(CUDA_CUDARTEMU_LIBRARY CACHE)
+  endif()
+  unset(CUDA_cudart_static_LIBRARY CACHE)
+  unset(CUDA_cudadevrt_LIBRARY CACHE)
+  unset(CUDA_cublas_LIBRARY CACHE)
+  unset(CUDA_cublas_device_LIBRARY CACHE)
+  unset(CUDA_cublasemu_LIBRARY CACHE)
+  unset(CUDA_cufft_LIBRARY CACHE)
+  unset(CUDA_cufftemu_LIBRARY CACHE)
+  unset(CUDA_cupti_LIBRARY CACHE)
+  unset(CUDA_curand_LIBRARY CACHE)
+  unset(CUDA_cusolver_LIBRARY CACHE)
+  unset(CUDA_cusparse_LIBRARY CACHE)
+  unset(CUDA_npp_LIBRARY CACHE)
+  unset(CUDA_nppc_LIBRARY CACHE)
+  unset(CUDA_nppi_LIBRARY CACHE)
+  unset(CUDA_npps_LIBRARY CACHE)
+  unset(CUDA_nvcuvenc_LIBRARY CACHE)
+  unset(CUDA_nvcuvid_LIBRARY CACHE)
+  unset(CUDA_nvToolsExt_LIBRARY CACHE)
+  unset(CUDA_OpenCL_LIBRARY CACHE)
+  unset(CUDA_GPU_DETECT_OUTPUT CACHE)
+endmacro()
+
+# Check to see if the CUDA_TOOLKIT_ROOT_DIR and CUDA_SDK_ROOT_DIR have changed,
+# if they have then clear the cache variables, so that will be detected again.
+if(NOT "${CUDA_TOOLKIT_ROOT_DIR}" STREQUAL "${CUDA_TOOLKIT_ROOT_DIR_INTERNAL}")
+  unset(CUDA_TOOLKIT_TARGET_DIR CACHE)
+  unset(CUDA_NVCC_EXECUTABLE CACHE)
+  cuda_unset_include_and_libraries()
+  unset(CUDA_VERSION CACHE)
+endif()
+
+if(NOT "${CUDA_TOOLKIT_TARGET_DIR}" STREQUAL "${CUDA_TOOLKIT_TARGET_DIR_INTERNAL}")
+  cuda_unset_include_and_libraries()
+endif()
+
+#
+#  End of unset()
+#
+
+#
+#  Start looking for things
+#
+
+# Search for the cuda distribution.
+if(NOT CUDA_TOOLKIT_ROOT_DIR AND NOT CMAKE_CROSSCOMPILING)
+  # Search in the CUDA_BIN_PATH first.
+  find_program(CUDA_TOOLKIT_ROOT_DIR_NVCC
+    NAMES nvcc nvcc.exe
+    PATHS
+      ENV CUDA_TOOLKIT_ROOT
+      ENV CUDA_PATH
+      ENV CUDA_BIN_PATH
+    PATH_SUFFIXES bin bin64
+    DOC "Toolkit location."
+    NO_DEFAULT_PATH
+    )
+
+  # Now search default paths
+  find_program(CUDA_TOOLKIT_ROOT_DIR_NVCC
+    NAMES nvcc nvcc.exe
+    PATHS /opt/cuda/bin
+    PATH_SUFFIXES cuda/bin
+    DOC "Toolkit location."
+    )
+
+  if (CUDA_TOOLKIT_ROOT_DIR_NVCC)
+    # Given that NVCC can be provided by multiple different sources (NVIDIA HPC SDK, CUDA Toolkit, distro)
+    # each of which has a different layout, we need to extract the CUDA toolkit root from the compiler
+    # itself, allowing us to support numerous different scattered toolkit layouts
+    execute_process(COMMAND ${CUDA_TOOLKIT_ROOT_DIR_NVCC} "-v" "__cmake_determine_cuda"
+      OUTPUT_VARIABLE _CUDA_NVCC_OUT ERROR_VARIABLE _CUDA_NVCC_OUT)
+    if(_CUDA_NVCC_OUT MATCHES "\\#\\$ TOP=([^\r\n]*)")
+      get_filename_component(CUDA_TOOLKIT_ROOT_DIR "${CMAKE_MATCH_1}" ABSOLUTE CACHE)
+    else()
+      get_filename_component(CUDA_TOOLKIT_ROOT_DIR "${CUDA_TOOLKIT_ROOT_DIR_NVCC}" DIRECTORY)
+      get_filename_component(CUDA_TOOLKIT_ROOT_DIR "${CUDA_TOOLKIT_ROOT_DIR}" DIRECTORY CACHE)
+    endif()
+    unset(_CUDA_NVCC_OUT)
+
+    string(REGEX REPLACE "[/\\\\]?bin[64]*[/\\\\]?$" "" CUDA_TOOLKIT_ROOT_DIR ${CUDA_TOOLKIT_ROOT_DIR})
+    # We need to force this back into the cache.
+    set(CUDA_TOOLKIT_ROOT_DIR ${CUDA_TOOLKIT_ROOT_DIR} CACHE PATH "Toolkit location." FORCE)
+    set(CUDA_TOOLKIT_TARGET_DIR ${CUDA_TOOLKIT_ROOT_DIR})
+  endif()
+  unset(CUDA_TOOLKIT_ROOT_DIR_NVCC CACHE)
+
+  if (NOT EXISTS ${CUDA_TOOLKIT_ROOT_DIR})
+    if(CUDA_FIND_REQUIRED)
+      message(FATAL_ERROR "Specify CUDA_TOOLKIT_ROOT_DIR")
+    elseif(NOT CUDA_FIND_QUIETLY)
+      message("CUDA_TOOLKIT_ROOT_DIR not found or specified")
+    endif()
+  endif ()
+endif ()
+
+if(CMAKE_CROSSCOMPILING)
+  SET (CUDA_TOOLKIT_ROOT $ENV{CUDA_TOOLKIT_ROOT})
+  if(CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7-a")
+    # Support for NVPACK
+    set (CUDA_TOOLKIT_TARGET_NAME "armv7-linux-androideabi")
+  elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
+    # Support for arm cross compilation
+    set(CUDA_TOOLKIT_TARGET_NAME "armv7-linux-gnueabihf")
+  elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
+    # Support for aarch64 cross compilation
+    if (ANDROID_ARCH_NAME STREQUAL "arm64")
+      set(CUDA_TOOLKIT_TARGET_NAME "aarch64-linux-androideabi")
+    elseif (CMAKE_SYSTEM_NAME STREQUAL "QNX")
+      set(CUDA_TOOLKIT_TARGET_NAME "aarch64-qnx")
+    else()
+      set(CUDA_TOOLKIT_TARGET_NAME "aarch64-linux")
+    endif (ANDROID_ARCH_NAME STREQUAL "arm64")
+  endif()
+
+  if (EXISTS "${CUDA_TOOLKIT_ROOT}/targets/${CUDA_TOOLKIT_TARGET_NAME}")
+    set(CUDA_TOOLKIT_TARGET_DIR "${CUDA_TOOLKIT_ROOT}/targets/${CUDA_TOOLKIT_TARGET_NAME}" CACHE PATH "CUDA Toolkit target location.")
+    SET (CUDA_TOOLKIT_ROOT_DIR ${CUDA_TOOLKIT_ROOT})
+    mark_as_advanced(CUDA_TOOLKIT_TARGET_DIR)
+  endif()
+
+  # add known CUDA targetr root path to the set of directories we search for programs, libraries and headers
+  set( CMAKE_FIND_ROOT_PATH "${CUDA_TOOLKIT_TARGET_DIR};${CMAKE_FIND_ROOT_PATH}")
+  macro( cuda_find_host_program )
+    if (COMMAND find_host_program)
+      find_host_program( ${ARGN} )
+    else()
+      find_program( ${ARGN} )
+    endif()
+  endmacro()
+else()
+  # for non-cross-compile, find_host_program == find_program and CUDA_TOOLKIT_TARGET_DIR == CUDA_TOOLKIT_ROOT_DIR
+  macro( cuda_find_host_program )
+    find_program( ${ARGN} )
+  endmacro()
+  SET (CUDA_TOOLKIT_TARGET_DIR ${CUDA_TOOLKIT_ROOT_DIR})
+endif()
+
+
+# CUDA_NVCC_EXECUTABLE
+if(DEFINED ENV{CUDA_NVCC_EXECUTABLE})
+  set(CUDA_NVCC_EXECUTABLE "$ENV{CUDA_NVCC_EXECUTABLE}" CACHE FILEPATH "The CUDA compiler")
+else()
+  cuda_find_host_program(CUDA_NVCC_EXECUTABLE
+    NAMES nvcc
+    PATHS "${CUDA_TOOLKIT_ROOT_DIR}"
+    ENV CUDA_PATH
+    ENV CUDA_BIN_PATH
+    PATH_SUFFIXES bin bin64
+    NO_DEFAULT_PATH
+    )
+  # Search default search paths, after we search our own set of paths.
+  cuda_find_host_program(CUDA_NVCC_EXECUTABLE nvcc)
+endif()
+mark_as_advanced(CUDA_NVCC_EXECUTABLE)
+
+if(CUDA_NVCC_EXECUTABLE AND NOT CUDA_VERSION)
+  # Compute the version.
+  execute_process (COMMAND ${CUDA_NVCC_EXECUTABLE} "--version" OUTPUT_VARIABLE NVCC_OUT)
+  string(REGEX REPLACE ".*release ([0-9]+)\\.([0-9]+).*" "\\1" CUDA_VERSION_MAJOR ${NVCC_OUT})
+  string(REGEX REPLACE ".*release ([0-9]+)\\.([0-9]+).*" "\\2" CUDA_VERSION_MINOR ${NVCC_OUT})
+  set(CUDA_VERSION "${CUDA_VERSION_MAJOR}.${CUDA_VERSION_MINOR}" CACHE STRING "Version of CUDA as computed from nvcc.")
+  mark_as_advanced(CUDA_VERSION)
+else()
+  # Need to set these based off of the cached value
+  string(REGEX REPLACE "([0-9]+)\\.([0-9]+).*" "\\1" CUDA_VERSION_MAJOR "${CUDA_VERSION}")
+  string(REGEX REPLACE "([0-9]+)\\.([0-9]+).*" "\\2" CUDA_VERSION_MINOR "${CUDA_VERSION}")
+endif()
+
+
+# Always set this convenience variable
+set(CUDA_VERSION_STRING "${CUDA_VERSION}")
+
+# CUDA_TOOLKIT_INCLUDE
+find_path(CUDA_TOOLKIT_INCLUDE
+  device_functions.h # Header included in toolkit
+  PATHS ${CUDA_TOOLKIT_TARGET_DIR}
+  ENV CUDA_PATH
+  ENV CUDA_INC_PATH
+  PATH_SUFFIXES include
+  NO_DEFAULT_PATH
+  )
+# Search default search paths, after we search our own set of paths.
+find_path(CUDA_TOOLKIT_INCLUDE device_functions.h)
+mark_as_advanced(CUDA_TOOLKIT_INCLUDE)
+
+if (CUDA_VERSION VERSION_GREATER "7.0" OR EXISTS "${CUDA_TOOLKIT_INCLUDE}/cuda_fp16.h")
+  set(CUDA_HAS_FP16 TRUE)
+else()
+  set(CUDA_HAS_FP16 FALSE)
+endif()
+
+# Set the user list of include dir to nothing to initialize it.
+set (CUDA_NVCC_INCLUDE_DIRS_USER "")
+set (CUDA_INCLUDE_DIRS ${CUDA_TOOLKIT_INCLUDE})
+
+macro(cuda_find_library_local_first_with_path_ext _var _names _doc _path_ext )
+  if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+    # CUDA 3.2+ on Windows moved the library directories, so we need the new
+    # and old paths.
+    set(_cuda_64bit_lib_dir "${_path_ext}lib/x64" "${_path_ext}lib64" "${_path_ext}libx64" )
+  endif()
+  # CUDA 3.2+ on Windows moved the library directories, so we need to new
+  # (lib/Win32) and the old path (lib).
+  find_library(${_var}
+    NAMES ${_names}
+    PATHS "${CUDA_TOOLKIT_TARGET_DIR}"
+    ENV CUDA_PATH
+    ENV CUDA_LIB_PATH
+    PATH_SUFFIXES ${_cuda_64bit_lib_dir} "${_path_ext}lib/Win32" "${_path_ext}lib" "${_path_ext}libWin32"
+    DOC ${_doc}
+    NO_DEFAULT_PATH
+    )
+  if (NOT CMAKE_CROSSCOMPILING)
+    # Search default search paths, after we search our own set of paths.
+    find_library(${_var}
+      NAMES ${_names}
+      PATHS "/usr/lib/nvidia-current"
+      DOC ${_doc}
+      )
+  endif()
+endmacro()
+
+macro(cuda_find_library_local_first _var _names _doc)
+  cuda_find_library_local_first_with_path_ext( "${_var}" "${_names}" "${_doc}" "" )
+endmacro()
+
+macro(find_library_local_first _var _names _doc )
+  cuda_find_library_local_first( "${_var}" "${_names}" "${_doc}" "" )
+endmacro()
+
+
+# CUDA_LIBRARIES
+cuda_find_library_local_first(CUDA_CUDART_LIBRARY cudart "\"cudart\" library")
+if(CUDA_VERSION VERSION_EQUAL "3.0")
+  # The cudartemu library only existed for the 3.0 version of CUDA.
+  cuda_find_library_local_first(CUDA_CUDARTEMU_LIBRARY cudartemu "\"cudartemu\" library")
+  mark_as_advanced(
+    CUDA_CUDARTEMU_LIBRARY
+    )
+endif()
+
+if(NOT CUDA_VERSION VERSION_LESS "5.5")
+  cuda_find_library_local_first(CUDA_cudart_static_LIBRARY cudart_static "static CUDA runtime library")
+  mark_as_advanced(CUDA_cudart_static_LIBRARY)
+endif()
+
+
+if(CUDA_cudart_static_LIBRARY)
+  # If static cudart available, use it by default, but provide a user-visible option to disable it.
+  option(CUDA_USE_STATIC_CUDA_RUNTIME "Use the static version of the CUDA runtime library if available" ON)
+else()
+  # If not available, silently disable the option.
+  set(CUDA_USE_STATIC_CUDA_RUNTIME OFF CACHE INTERNAL "")
+endif()
+
+if(CUDA_USE_STATIC_CUDA_RUNTIME)
+  set(CUDA_CUDART_LIBRARY_VAR CUDA_cudart_static_LIBRARY)
+else()
+  set(CUDA_CUDART_LIBRARY_VAR CUDA_CUDART_LIBRARY)
+endif()
+
+if(NOT CUDA_VERSION VERSION_LESS "5.0")
+  cuda_find_library_local_first(CUDA_cudadevrt_LIBRARY cudadevrt "\"cudadevrt\" library")
+  mark_as_advanced(CUDA_cudadevrt_LIBRARY)
+endif()
+
+if(CUDA_USE_STATIC_CUDA_RUNTIME)
+  if(UNIX)
+    # Check for the dependent libraries.
+
+    # Many of the FindXYZ CMake comes with makes use of try_compile with int main(){return 0;}
+    # as the source file.  Unfortunately this causes a warning with -Wstrict-prototypes and
+    # -Werror causes the try_compile to fail.  We will just temporarily disable other flags
+    # when doing the find_package command here.
+    set(_cuda_cmake_c_flags ${CMAKE_C_FLAGS})
+    set(CMAKE_C_FLAGS "-fPIC")
+    find_package(Threads REQUIRED)
+    set(CMAKE_C_FLAGS ${_cuda_cmake_c_flags})
+
+    if(NOT APPLE AND NOT (CMAKE_SYSTEM_NAME STREQUAL "QNX"))
+      #On Linux, you must link against librt when using the static cuda runtime.
+      find_library(CUDA_rt_LIBRARY rt)
+      if (NOT CUDA_rt_LIBRARY)
+        message(WARNING "Expecting to find librt for libcudart_static, but didn't find it.")
+      endif()
+    endif()
+  endif()
+endif()
+
+# CUPTI library showed up in cuda toolkit 4.0
+if(NOT CUDA_VERSION VERSION_LESS "4.0")
+  cuda_find_library_local_first_with_path_ext(CUDA_cupti_LIBRARY cupti "\"cupti\" library" "extras/CUPTI/")
+  mark_as_advanced(CUDA_cupti_LIBRARY)
+endif()
+
+# Set the CUDA_LIBRARIES variable.  This is the set of stuff to link against if you are
+# using the CUDA runtime.  For the dynamic version of the runtime, most of the
+# dependencies are brough in, but for the static version there are additional libraries
+# and linker commands needed.
+# Initialize to empty
+set(CUDA_LIBRARIES)
+
+# If we are using emulation mode and we found the cudartemu library then use
+# that one instead of cudart.
+if(CUDA_BUILD_EMULATION AND CUDA_CUDARTEMU_LIBRARY)
+  list(APPEND CUDA_LIBRARIES ${CUDA_CUDARTEMU_LIBRARY})
+elseif(CUDA_USE_STATIC_CUDA_RUNTIME AND CUDA_cudart_static_LIBRARY)
+  list(APPEND CUDA_LIBRARIES ${CUDA_cudart_static_LIBRARY})
+  if (TARGET Threads::Threads)
+    list(APPEND CUDA_LIBRARIES Threads::Threads)
+  endif()
+  list(APPEND CUDA_LIBRARIES ${CMAKE_DL_LIBS})
+  if (CUDA_rt_LIBRARY)
+    list(APPEND CUDA_LIBRARIES ${CUDA_rt_LIBRARY})
+  endif()
+  if(APPLE)
+    # We need to add the default path to the driver (libcuda.dylib) as an rpath, so that
+    # the static cuda runtime can find it at runtime.
+    list(APPEND CUDA_LIBRARIES -Wl,-rpath,/usr/local/cuda/lib)
+  endif()
+else()
+  list(APPEND CUDA_LIBRARIES ${CUDA_CUDART_LIBRARY})
+endif()
+
+# 1.1 toolkit on linux doesn't appear to have a separate library on
+# some platforms.
+cuda_find_library_local_first(CUDA_CUDA_LIBRARY cuda "\"cuda\" library (older versions only).")
+
+mark_as_advanced(
+  CUDA_CUDA_LIBRARY
+  CUDA_CUDART_LIBRARY
+  )
+
+#######################
+# Look for some of the toolkit helper libraries
+macro(FIND_CUDA_HELPER_LIBS _name)
+  cuda_find_library_local_first(CUDA_${_name}_LIBRARY ${_name} "\"${_name}\" library")
+  mark_as_advanced(CUDA_${_name}_LIBRARY)
+endmacro()
+
+#######################
+# Disable emulation for v3.1 onward
+if(CUDA_VERSION VERSION_GREATER "3.0")
+  if(CUDA_BUILD_EMULATION)
+    message(FATAL_ERROR "CUDA_BUILD_EMULATION is not supported in version 3.1 and onwards.  You must disable it to proceed.  You have version ${CUDA_VERSION}.")
+  endif()
+endif()
+
+# Search for additional CUDA toolkit libraries.
+if(CUDA_VERSION VERSION_LESS "3.1")
+  # Emulation libraries aren't available in version 3.1 onward.
+  find_cuda_helper_libs(cufftemu)
+  find_cuda_helper_libs(cublasemu)
+endif()
+find_cuda_helper_libs(cufft)
+find_cuda_helper_libs(cublas)
+if(NOT CUDA_VERSION VERSION_LESS "3.2")
+  # cusparse showed up in version 3.2
+  find_cuda_helper_libs(cusparse)
+  find_cuda_helper_libs(curand)
+  if (WIN32)
+    find_cuda_helper_libs(nvcuvenc)
+    find_cuda_helper_libs(nvcuvid)
+  endif()
+endif()
+if(CUDA_VERSION VERSION_GREATER "5.0" AND CUDA_VERSION VERSION_LESS "9.2")
+  # In CUDA 9.2 cublas_device was deprecated
+  find_cuda_helper_libs(cublas_device)
+endif()
+
+if(NOT CUDA_VERSION VERSION_LESS "5.0")
+  find_cuda_helper_libs(nvToolsExt)
+  find_cuda_helper_libs(OpenCL)
+endif()
+
+if(NOT CUDA_VERSION VERSION_LESS "9.0")
+  # In CUDA 9.0 NPP was nppi was removed
+  find_cuda_helper_libs(nppc)
+  find_cuda_helper_libs(nppial)
+  find_cuda_helper_libs(nppicc)
+  if(CUDA_VERSION VERSION_LESS "11.0")
+    find_cuda_helper_libs(nppicom)
+  endif()
+  find_cuda_helper_libs(nppidei)
+  find_cuda_helper_libs(nppif)
+  find_cuda_helper_libs(nppig)
+  find_cuda_helper_libs(nppim)
+  find_cuda_helper_libs(nppist)
+  find_cuda_helper_libs(nppisu)
+  find_cuda_helper_libs(nppitc)
+  find_cuda_helper_libs(npps)
+  set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppial_LIBRARY};${CUDA_nppicc_LIBRARY};${CUDA_nppicom_LIBRARY};${CUDA_nppidei_LIBRARY};${CUDA_nppif_LIBRARY};${CUDA_nppig_LIBRARY};${CUDA_nppim_LIBRARY};${CUDA_nppist_LIBRARY};${CUDA_nppisu_LIBRARY};${CUDA_nppitc_LIBRARY};${CUDA_npps_LIBRARY}")
+elseif(CUDA_VERSION VERSION_GREATER "5.0")
+  # In CUDA 5.5 NPP was split into 3 separate libraries.
+  find_cuda_helper_libs(nppc)
+  find_cuda_helper_libs(nppi)
+  find_cuda_helper_libs(npps)
+  set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppi_LIBRARY};${CUDA_npps_LIBRARY}")
+elseif(NOT CUDA_VERSION VERSION_LESS "4.0")
+  find_cuda_helper_libs(npp)
+endif()
+if(NOT CUDA_VERSION VERSION_LESS "7.0")
+  # cusolver showed up in version 7.0
+  find_cuda_helper_libs(cusolver)
+endif()
+
+if (CUDA_BUILD_EMULATION)
+  set(CUDA_CUFFT_LIBRARIES ${CUDA_cufftemu_LIBRARY})
+  set(CUDA_CUBLAS_LIBRARIES ${CUDA_cublasemu_LIBRARY})
+else()
+  set(CUDA_CUFFT_LIBRARIES ${CUDA_cufft_LIBRARY})
+  set(CUDA_CUBLAS_LIBRARIES ${CUDA_cublas_LIBRARY} ${CUDA_cublas_device_LIBRARY})
+endif()
+
+########################
+# Look for the SDK stuff.  As of CUDA 3.0 NVSDKCUDA_ROOT has been replaced with
+# NVSDKCOMPUTE_ROOT with the old CUDA C contents moved into the C subdirectory
+find_path(CUDA_SDK_ROOT_DIR common/inc/cutil.h
+ HINTS
+  "$ENV{NVSDKCOMPUTE_ROOT}/C"
+  ENV NVSDKCUDA_ROOT
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\NVIDIA Corporation\\Installed Products\\NVIDIA SDK 10\\Compute;InstallDir]"
+ PATHS
+  "/Developer/GPU\ Computing/C"
+  )
+
+# Keep the CUDA_SDK_ROOT_DIR first in order to be able to override the
+# environment variables.
+set(CUDA_SDK_SEARCH_PATH
+  "${CUDA_SDK_ROOT_DIR}"
+  "${CUDA_TOOLKIT_ROOT_DIR}/local/NVSDK0.2"
+  "${CUDA_TOOLKIT_ROOT_DIR}/NVSDK0.2"
+  "${CUDA_TOOLKIT_ROOT_DIR}/NV_CUDA_SDK"
+  "$ENV{HOME}/NVIDIA_CUDA_SDK"
+  "$ENV{HOME}/NVIDIA_CUDA_SDK_MACOSX"
+  "/Developer/CUDA"
+  )
+
+# Example of how to find an include file from the CUDA_SDK_ROOT_DIR
+
+# find_path(CUDA_CUT_INCLUDE_DIR
+#   cutil.h
+#   PATHS ${CUDA_SDK_SEARCH_PATH}
+#   PATH_SUFFIXES "common/inc"
+#   DOC "Location of cutil.h"
+#   NO_DEFAULT_PATH
+#   )
+# # Now search system paths
+# find_path(CUDA_CUT_INCLUDE_DIR cutil.h DOC "Location of cutil.h")
+
+# mark_as_advanced(CUDA_CUT_INCLUDE_DIR)
+
+
+# Example of how to find a library in the CUDA_SDK_ROOT_DIR
+
+# # cutil library is called cutil64 for 64 bit builds on windows.  We don't want
+# # to get these confused, so we are setting the name based on the word size of
+# # the build.
+
+# if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+#   set(cuda_cutil_name cutil64)
+# else()
+#   set(cuda_cutil_name cutil32)
+# endif()
+
+# find_library(CUDA_CUT_LIBRARY
+#   NAMES cutil ${cuda_cutil_name}
+#   PATHS ${CUDA_SDK_SEARCH_PATH}
+#   # The new version of the sdk shows up in common/lib, but the old one is in lib
+#   PATH_SUFFIXES "common/lib" "lib"
+#   DOC "Location of cutil library"
+#   NO_DEFAULT_PATH
+#   )
+# # Now search system paths
+# find_library(CUDA_CUT_LIBRARY NAMES cutil ${cuda_cutil_name} DOC "Location of cutil library")
+# mark_as_advanced(CUDA_CUT_LIBRARY)
+# set(CUDA_CUT_LIBRARIES ${CUDA_CUT_LIBRARY})
+
+
+
+#############################
+# Check for required components
+set(CUDA_FOUND TRUE)
+
+set(CUDA_TOOLKIT_ROOT_DIR_INTERNAL "${CUDA_TOOLKIT_ROOT_DIR}" CACHE INTERNAL
+  "This is the value of the last time CUDA_TOOLKIT_ROOT_DIR was set successfully." FORCE)
+set(CUDA_TOOLKIT_TARGET_DIR_INTERNAL "${CUDA_TOOLKIT_TARGET_DIR}" CACHE INTERNAL
+  "This is the value of the last time CUDA_TOOLKIT_TARGET_DIR was set successfully." FORCE)
+set(CUDA_SDK_ROOT_DIR_INTERNAL "${CUDA_SDK_ROOT_DIR}" CACHE INTERNAL
+  "This is the value of the last time CUDA_SDK_ROOT_DIR was set successfully." FORCE)
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+
+find_package_handle_standard_args(CUDA
+  REQUIRED_VARS
+    CUDA_TOOLKIT_ROOT_DIR
+    CUDA_NVCC_EXECUTABLE
+    CUDA_INCLUDE_DIRS
+    ${CUDA_CUDART_LIBRARY_VAR}
+  VERSION_VAR
+    CUDA_VERSION
+  )
+
+
+
+###############################################################################
+###############################################################################
+# Macros
+###############################################################################
+###############################################################################
+
+###############################################################################
+# Add include directories to pass to the nvcc command.
+macro(CUDA_INCLUDE_DIRECTORIES)
+  foreach(dir ${ARGN})
+    list(APPEND CUDA_NVCC_INCLUDE_DIRS_USER ${dir})
+  endforeach()
+endmacro()
+
+
+##############################################################################
+cuda_find_helper_file(parse_cubin cmake)
+cuda_find_helper_file(make2cmake cmake)
+cuda_find_helper_file(run_nvcc cmake)
+include("${CMAKE_CURRENT_LIST_DIR}/FindCUDA/select_compute_arch.cmake")
+
+##############################################################################
+# Separate the OPTIONS out from the sources
+#
+macro(CUDA_GET_SOURCES_AND_OPTIONS _sources _cmake_options _options)
+  set( ${_sources} )
+  set( ${_cmake_options} )
+  set( ${_options} )
+  set( _found_options FALSE )
+  foreach(arg ${ARGN})
+    if("x${arg}" STREQUAL "xOPTIONS")
+      set( _found_options TRUE )
+    elseif(
+        "x${arg}" STREQUAL "xWIN32" OR
+        "x${arg}" STREQUAL "xMACOSX_BUNDLE" OR
+        "x${arg}" STREQUAL "xEXCLUDE_FROM_ALL" OR
+        "x${arg}" STREQUAL "xSTATIC" OR
+        "x${arg}" STREQUAL "xSHARED" OR
+        "x${arg}" STREQUAL "xMODULE"
+        )
+      list(APPEND ${_cmake_options} ${arg})
+    else()
+      if ( _found_options )
+        list(APPEND ${_options} ${arg})
+      else()
+        # Assume this is a file
+        list(APPEND ${_sources} ${arg})
+      endif()
+    endif()
+  endforeach()
+endmacro()
+
+##############################################################################
+# Parse the OPTIONS from ARGN and set the variables prefixed by _option_prefix
+#
+macro(CUDA_PARSE_NVCC_OPTIONS _option_prefix)
+  set( _found_config )
+  foreach(arg ${ARGN})
+    # Determine if we are dealing with a perconfiguration flag
+    foreach(config ${CUDA_configuration_types})
+      string(TOUPPER ${config} config_upper)
+      if (arg STREQUAL "${config_upper}")
+        set( _found_config _${arg})
+        # Set arg to nothing to keep it from being processed further
+        set( arg )
+      endif()
+    endforeach()
+
+    if ( arg )
+      list(APPEND ${_option_prefix}${_found_config} "${arg}")
+    endif()
+  endforeach()
+endmacro()
+
+##############################################################################
+# Helper to add the include directory for CUDA only once
+function(CUDA_ADD_CUDA_INCLUDE_ONCE)
+  get_directory_property(_include_directories INCLUDE_DIRECTORIES)
+  set(_add TRUE)
+  if(_include_directories)
+    foreach(dir ${_include_directories})
+      if("${dir}" STREQUAL "${CUDA_INCLUDE_DIRS}")
+        set(_add FALSE)
+      endif()
+    endforeach()
+  endif()
+  if(_add)
+    include_directories(${CUDA_INCLUDE_DIRS})
+  endif()
+endfunction()
+
+function(CUDA_BUILD_SHARED_LIBRARY shared_flag)
+  set(cmake_args ${ARGN})
+  # If SHARED, MODULE, or STATIC aren't already in the list of arguments, then
+  # add SHARED or STATIC based on the value of BUILD_SHARED_LIBS.
+  list(FIND cmake_args SHARED _cuda_found_SHARED)
+  list(FIND cmake_args MODULE _cuda_found_MODULE)
+  list(FIND cmake_args STATIC _cuda_found_STATIC)
+  if( _cuda_found_SHARED GREATER -1 OR
+      _cuda_found_MODULE GREATER -1 OR
+      _cuda_found_STATIC GREATER -1)
+    set(_cuda_build_shared_libs)
+  else()
+    if (BUILD_SHARED_LIBS)
+      set(_cuda_build_shared_libs SHARED)
+    else()
+      set(_cuda_build_shared_libs STATIC)
+    endif()
+  endif()
+  set(${shared_flag} ${_cuda_build_shared_libs} PARENT_SCOPE)
+endfunction()
+
+##############################################################################
+# Helper to avoid clashes of files with the same basename but different paths.
+# This doesn't attempt to do exactly what CMake internals do, which is to only
+# add this path when there is a conflict, since by the time a second collision
+# in names is detected it's already too late to fix the first one.  For
+# consistency sake the relative path will be added to all files.
+function(CUDA_COMPUTE_BUILD_PATH path build_path)
+  #message("CUDA_COMPUTE_BUILD_PATH([${path}] ${build_path})")
+  # Only deal with CMake style paths from here on out
+  file(TO_CMAKE_PATH "${path}" bpath)
+  if (IS_ABSOLUTE "${bpath}")
+    # Absolute paths are generally unnessary, especially if something like
+    # file(GLOB_RECURSE) is used to pick up the files.
+
+    string(FIND "${bpath}" "${CMAKE_CURRENT_BINARY_DIR}" _binary_dir_pos)
+    if (_binary_dir_pos EQUAL 0)
+      file(RELATIVE_PATH bpath "${CMAKE_CURRENT_BINARY_DIR}" "${bpath}")
+    else()
+      file(RELATIVE_PATH bpath "${CMAKE_CURRENT_SOURCE_DIR}" "${bpath}")
+    endif()
+  endif()
+
+  # This recipe is from cmLocalGenerator::CreateSafeUniqueObjectFileName in the
+  # CMake source.
+
+  # Remove leading /
+  string(REGEX REPLACE "^[/]+" "" bpath "${bpath}")
+  # Avoid absolute paths by removing ':'
+  string(REPLACE ":" "_" bpath "${bpath}")
+  # Avoid relative paths that go up the tree
+  string(REPLACE "../" "__/" bpath "${bpath}")
+  # Avoid spaces
+  string(REPLACE " " "_" bpath "${bpath}")
+
+  # Strip off the filename.  I wait until here to do it, since removin the
+  # basename can make a path that looked like path/../basename turn into
+  # path/.. (notice the trailing slash).
+  get_filename_component(bpath "${bpath}" PATH)
+
+  set(${build_path} "${bpath}" PARENT_SCOPE)
+  #message("${build_path} = ${bpath}")
+endfunction()
+
+##############################################################################
+# This helper macro populates the following variables and setups up custom
+# commands and targets to invoke the nvcc compiler to generate C or PTX source
+# dependent upon the format parameter.  The compiler is invoked once with -M
+# to generate a dependency file and a second time with -cuda or -ptx to generate
+# a .cpp or .ptx file.
+# INPUT:
+#   cuda_target         - Target name
+#   format              - PTX, CUBIN, FATBIN or OBJ
+#   FILE1 .. FILEN      - The remaining arguments are the sources to be wrapped.
+#   OPTIONS             - Extra options to NVCC
+# OUTPUT:
+#   generated_files     - List of generated files
+##############################################################################
+##############################################################################
+
+macro(CUDA_WRAP_SRCS cuda_target format generated_files)
+
+  # Put optional arguments in list.
+  set(_argn_list "${ARGN}")
+  # If one of the given optional arguments is "PHONY", make a note of it, then
+  # remove it from the list.
+  list(FIND _argn_list "PHONY" _phony_idx)
+  if("${_phony_idx}" GREATER "-1")
+    set(_target_is_phony true)
+    list(REMOVE_AT _argn_list ${_phony_idx})
+  else()
+    set(_target_is_phony false)
+  endif()
+
+  # If CMake doesn't support separable compilation, complain
+  if(CUDA_SEPARABLE_COMPILATION AND CMAKE_VERSION VERSION_LESS "2.8.10.1")
+    message(SEND_ERROR "CUDA_SEPARABLE_COMPILATION isn't supported for CMake versions less than 2.8.10.1")
+  endif()
+
+  # Set up all the command line flags here, so that they can be overridden on a per target basis.
+
+  set(nvcc_flags "")
+
+  # Emulation if the card isn't present.
+  if (CUDA_BUILD_EMULATION)
+    # Emulation.
+    set(nvcc_flags ${nvcc_flags} --device-emulation -D_DEVICEEMU -g)
+  else()
+    # Device mode.  No flags necessary.
+  endif()
+
+  if(CUDA_HOST_COMPILATION_CPP)
+    set(CUDA_C_OR_CXX CXX)
+  else()
+    if(CUDA_VERSION VERSION_LESS "3.0")
+      set(nvcc_flags ${nvcc_flags} --host-compilation C)
+    else()
+      message(WARNING "--host-compilation flag is deprecated in CUDA version >= 3.0.  Removing --host-compilation C flag" )
+    endif()
+    set(CUDA_C_OR_CXX C)
+  endif()
+
+  set(generated_extension ${CMAKE_${CUDA_C_OR_CXX}_OUTPUT_EXTENSION})
+
+  if(CUDA_64_BIT_DEVICE_CODE)
+    set(nvcc_flags ${nvcc_flags} -m64)
+  else()
+    set(nvcc_flags ${nvcc_flags} -m32)
+  endif()
+
+  if(CUDA_TARGET_CPU_ARCH)
+    set(nvcc_flags ${nvcc_flags} "--target-cpu-architecture=${CUDA_TARGET_CPU_ARCH}")
+  endif()
+
+  # This needs to be passed in at this stage, because VS needs to fill out the
+  # various macros from within VS.  Note that CCBIN is only used if
+  # -ccbin or --compiler-bindir isn't used and CUDA_HOST_COMPILER matches
+  # _CUDA_MSVC_HOST_COMPILER
+  if(CMAKE_GENERATOR MATCHES "Visual Studio")
+    set(ccbin_flags -D "\"CCBIN:PATH=${_CUDA_MSVC_HOST_COMPILER}\"" )
+  else()
+    set(ccbin_flags)
+  endif()
+
+  # Figure out which configure we will use and pass that in as an argument to
+  # the script.  We need to defer the decision until compilation time, because
+  # for VS projects we won't know if we are making a debug or release build
+  # until build time.
+  if(CMAKE_GENERATOR MATCHES "Visual Studio")
+    set( CUDA_build_configuration "$(ConfigurationName)" )
+  else()
+    set( CUDA_build_configuration "${CMAKE_BUILD_TYPE}")
+  endif()
+
+  # Initialize our list of includes with the user ones followed by the CUDA system ones.
+  set(CUDA_NVCC_INCLUDE_DIRS ${CUDA_NVCC_INCLUDE_DIRS_USER} "${CUDA_INCLUDE_DIRS}")
+  if(_target_is_phony)
+    # If the passed in target name isn't a real target (i.e., this is from a call to one of the
+    # cuda_compile_* functions), need to query directory properties to get include directories
+    # and compile definitions.
+    get_directory_property(_dir_include_dirs INCLUDE_DIRECTORIES)
+    get_directory_property(_dir_compile_defs COMPILE_DEFINITIONS)
+
+    list(APPEND CUDA_NVCC_INCLUDE_DIRS "${_dir_include_dirs}")
+    set(CUDA_NVCC_COMPILE_DEFINITIONS "${_dir_compile_defs}")
+  else()
+    # Append the include directories for this target via generator expression, which is
+    # expanded by the FILE(GENERATE) call below.  This generator expression captures all
+    # include dirs set by the user, whether via directory properties or target properties
+    list(APPEND CUDA_NVCC_INCLUDE_DIRS "$<TARGET_PROPERTY:${cuda_target},INCLUDE_DIRECTORIES>")
+
+    # Do the same thing with compile definitions
+    set(CUDA_NVCC_COMPILE_DEFINITIONS "$<TARGET_PROPERTY:${cuda_target},COMPILE_DEFINITIONS>")
+  endif()
+
+
+  # Reset these variables
+  set(CUDA_WRAP_OPTION_NVCC_FLAGS)
+  foreach(config ${CUDA_configuration_types})
+    string(TOUPPER ${config} config_upper)
+    set(CUDA_WRAP_OPTION_NVCC_FLAGS_${config_upper})
+  endforeach()
+
+  CUDA_GET_SOURCES_AND_OPTIONS(_cuda_wrap_sources _cuda_wrap_cmake_options _cuda_wrap_options ${_argn_list})
+  CUDA_PARSE_NVCC_OPTIONS(CUDA_WRAP_OPTION_NVCC_FLAGS ${_cuda_wrap_options})
+
+  # Figure out if we are building a shared library.  BUILD_SHARED_LIBS is
+  # respected in CUDA_ADD_LIBRARY.
+  set(_cuda_build_shared_libs FALSE)
+  # SHARED, MODULE
+  list(FIND _cuda_wrap_cmake_options SHARED _cuda_found_SHARED)
+  list(FIND _cuda_wrap_cmake_options MODULE _cuda_found_MODULE)
+  if(_cuda_found_SHARED GREATER -1 OR _cuda_found_MODULE GREATER -1)
+    set(_cuda_build_shared_libs TRUE)
+  endif()
+  # STATIC
+  list(FIND _cuda_wrap_cmake_options STATIC _cuda_found_STATIC)
+  if(_cuda_found_STATIC GREATER -1)
+    set(_cuda_build_shared_libs FALSE)
+  endif()
+
+  # CUDA_HOST_FLAGS
+  if(_cuda_build_shared_libs)
+    # If we are setting up code for a shared library, then we need to add extra flags for
+    # compiling objects for shared libraries.
+    set(CUDA_HOST_SHARED_FLAGS ${CMAKE_SHARED_LIBRARY_${CUDA_C_OR_CXX}_FLAGS})
+  else()
+    set(CUDA_HOST_SHARED_FLAGS)
+  endif()
+  # Only add the CMAKE_{C,CXX}_FLAGS if we are propagating host flags.  We
+  # always need to set the SHARED_FLAGS, though.
+  if(CUDA_PROPAGATE_HOST_FLAGS)
+    set(_cuda_host_flags "set(CMAKE_HOST_FLAGS ${CMAKE_${CUDA_C_OR_CXX}_FLAGS} ${CUDA_HOST_SHARED_FLAGS})")
+  else()
+    set(_cuda_host_flags "set(CMAKE_HOST_FLAGS ${CUDA_HOST_SHARED_FLAGS})")
+  endif()
+
+  set(_cuda_nvcc_flags_config "# Build specific configuration flags")
+  # Loop over all the configuration types to generate appropriate flags for run_nvcc.cmake
+  foreach(config ${CUDA_configuration_types})
+    string(TOUPPER ${config} config_upper)
+    # CMAKE_FLAGS are strings and not lists.  By not putting quotes around CMAKE_FLAGS
+    # we convert the strings to lists (like we want).
+
+    if(CUDA_PROPAGATE_HOST_FLAGS)
+      # nvcc chokes on -g3 in versions previous to 3.0, so replace it with -g
+      set(_cuda_fix_g3 FALSE)
+
+      if(CMAKE_COMPILER_IS_GNUCC)
+        if (CUDA_VERSION VERSION_LESS  "3.0" OR
+            CUDA_VERSION VERSION_EQUAL "4.1" OR
+            CUDA_VERSION VERSION_EQUAL "4.2"
+            )
+          set(_cuda_fix_g3 TRUE)
+        endif()
+      endif()
+      if(_cuda_fix_g3)
+        string(REPLACE "-g3" "-g" _cuda_C_FLAGS "${CMAKE_${CUDA_C_OR_CXX}_FLAGS_${config_upper}}")
+      else()
+        set(_cuda_C_FLAGS "${CMAKE_${CUDA_C_OR_CXX}_FLAGS_${config_upper}}")
+      endif()
+
+      string(APPEND _cuda_host_flags "\nset(CMAKE_HOST_FLAGS_${config_upper} ${_cuda_C_FLAGS})")
+    endif()
+
+    # Note that if we ever want CUDA_NVCC_FLAGS_<CONFIG> to be string (instead of a list
+    # like it is currently), we can remove the quotes around the
+    # ${CUDA_NVCC_FLAGS_${config_upper}} variable like the CMAKE_HOST_FLAGS_<CONFIG> variable.
+    string(APPEND _cuda_nvcc_flags_config "\nset(CUDA_NVCC_FLAGS_${config_upper} ${CUDA_NVCC_FLAGS_${config_upper}} ;; ${CUDA_WRAP_OPTION_NVCC_FLAGS_${config_upper}})")
+  endforeach()
+
+  # Process the C++11 flag.  If the host sets the flag, we need to add it to nvcc and
+  # remove it from the host. This is because -Xcompile -std=c++ will choke nvcc (it uses
+  # the C preprocessor).  In order to get this to work correctly, we need to use nvcc's
+  # specific c++11 flag.
+  if( "${_cuda_host_flags}" MATCHES "-std=c\\+\\+11")
+    # Add the c++11 flag to nvcc if it isn't already present.  Note that we only look at
+    # the main flag instead of the configuration specific flags.
+    if( NOT "${CUDA_NVCC_FLAGS}" MATCHES "-std=c\\+\\+11" )
+      list(APPEND nvcc_flags --std c++11)
+    endif()
+    string(REGEX REPLACE "[-]+std=c\\+\\+11" "" _cuda_host_flags "${_cuda_host_flags}")
+  endif()
+
+  if(_cuda_build_shared_libs)
+    list(APPEND nvcc_flags "-D${cuda_target}_EXPORTS")
+  endif()
+
+  # Reset the output variable
+  set(_cuda_wrap_generated_files "")
+
+  # Iterate over the macro arguments and create custom
+  # commands for all the .cu files.
+  foreach(file ${_argn_list})
+    # Ignore any file marked as a HEADER_FILE_ONLY
+    get_source_file_property(_is_header ${file} HEADER_FILE_ONLY)
+    # Allow per source file overrides of the format.  Also allows compiling non-.cu files.
+    get_source_file_property(_cuda_source_format ${file} CUDA_SOURCE_PROPERTY_FORMAT)
+    if((${file} MATCHES "\\.cu$" OR _cuda_source_format) AND NOT _is_header)
+
+      if(NOT _cuda_source_format)
+        set(_cuda_source_format ${format})
+      endif()
+      # If file isn't a .cu file, we need to tell nvcc to treat it as such.
+      if(NOT ${file} MATCHES "\\.cu$")
+        set(cuda_language_flag -x=cu)
+      else()
+        set(cuda_language_flag)
+      endif()
+
+      if( ${_cuda_source_format} MATCHES "OBJ")
+        set( cuda_compile_to_external_module OFF )
+      else()
+        set( cuda_compile_to_external_module ON )
+        if( ${_cuda_source_format} MATCHES "PTX" )
+          set( cuda_compile_to_external_module_type "ptx" )
+        elseif( ${_cuda_source_format} MATCHES "CUBIN")
+          set( cuda_compile_to_external_module_type "cubin" )
+        elseif( ${_cuda_source_format} MATCHES "FATBIN")
+          set( cuda_compile_to_external_module_type "fatbin" )
+        else()
+          message( FATAL_ERROR "Invalid format flag passed to CUDA_WRAP_SRCS or set with CUDA_SOURCE_PROPERTY_FORMAT file property for file '${file}': '${_cuda_source_format}'.  Use OBJ, PTX, CUBIN or FATBIN.")
+        endif()
+      endif()
+
+      if(cuda_compile_to_external_module)
+        # Don't use any of the host compilation flags for PTX targets.
+        set(CUDA_HOST_FLAGS)
+        set(CUDA_NVCC_FLAGS_CONFIG)
+      else()
+        set(CUDA_HOST_FLAGS ${_cuda_host_flags})
+        set(CUDA_NVCC_FLAGS_CONFIG ${_cuda_nvcc_flags_config})
+      endif()
+
+      # Determine output directory
+      cuda_compute_build_path("${file}" cuda_build_path)
+      set(cuda_compile_intermediate_directory "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${cuda_target}.dir/${cuda_build_path}")
+      if(CUDA_GENERATED_OUTPUT_DIR)
+        set(cuda_compile_output_dir "${CUDA_GENERATED_OUTPUT_DIR}")
+      else()
+        if ( cuda_compile_to_external_module )
+          set(cuda_compile_output_dir "${CMAKE_CURRENT_BINARY_DIR}")
+        else()
+          set(cuda_compile_output_dir "${cuda_compile_intermediate_directory}")
+        endif()
+      endif()
+
+      # Add a custom target to generate a c or ptx file. ######################
+
+      get_filename_component( basename ${file} NAME )
+      if( cuda_compile_to_external_module )
+        set(generated_file_path "${cuda_compile_output_dir}")
+        set(generated_file_basename "${cuda_target}_generated_${basename}.${cuda_compile_to_external_module_type}")
+        set(format_flag "-${cuda_compile_to_external_module_type}")
+        file(MAKE_DIRECTORY "${cuda_compile_output_dir}")
+      else()
+        set(generated_file_path "${cuda_compile_output_dir}/${CMAKE_CFG_INTDIR}")
+        set(generated_file_basename "${cuda_target}_generated_${basename}${generated_extension}")
+        if(CUDA_SEPARABLE_COMPILATION)
+          set(format_flag "-dc")
+        else()
+          set(format_flag "-c")
+        endif()
+      endif()
+
+      # Set all of our file names.  Make sure that whatever filenames that have
+      # generated_file_path in them get passed in through as a command line
+      # argument, so that the ${CMAKE_CFG_INTDIR} gets expanded at run time
+      # instead of configure time.
+      set(generated_file "${generated_file_path}/${generated_file_basename}")
+      set(cmake_dependency_file "${cuda_compile_intermediate_directory}/${generated_file_basename}.depend")
+      set(NVCC_generated_dependency_file "${cuda_compile_intermediate_directory}/${generated_file_basename}.NVCC-depend")
+      set(generated_cubin_file "${generated_file_path}/${generated_file_basename}.cubin.txt")
+      set(custom_target_script_pregen "${cuda_compile_intermediate_directory}/${generated_file_basename}.cmake.pre-gen")
+      set(custom_target_script "${cuda_compile_intermediate_directory}/${generated_file_basename}$<$<BOOL:$<CONFIG>>:.$<CONFIG>>.cmake")
+
+      # Setup properties for obj files:
+      if( NOT cuda_compile_to_external_module )
+        set_source_files_properties("${generated_file}"
+          PROPERTIES
+          EXTERNAL_OBJECT true # This is an object file not to be compiled, but only be linked.
+          )
+      endif()
+
+      # Don't add CMAKE_CURRENT_SOURCE_DIR if the path is already an absolute path.
+      get_filename_component(file_path "${file}" PATH)
+      if(IS_ABSOLUTE "${file_path}")
+        set(source_file "${file}")
+      else()
+        set(source_file "${CMAKE_CURRENT_SOURCE_DIR}/${file}")
+      endif()
+
+      if( NOT cuda_compile_to_external_module AND CUDA_SEPARABLE_COMPILATION)
+        list(APPEND ${cuda_target}_SEPARABLE_COMPILATION_OBJECTS "${generated_file}")
+      endif()
+
+      # Bring in the dependencies.  Creates a variable CUDA_NVCC_DEPEND #######
+      cuda_include_nvcc_dependencies(${cmake_dependency_file})
+
+      # Convenience string for output #########################################
+      if(CUDA_BUILD_EMULATION)
+        set(cuda_build_type "Emulation")
+      else()
+        set(cuda_build_type "Device")
+      endif()
+
+      # Build the NVCC made dependency file ###################################
+      set(build_cubin OFF)
+      if ( NOT CUDA_BUILD_EMULATION AND CUDA_BUILD_CUBIN )
+         if ( NOT cuda_compile_to_external_module )
+           set ( build_cubin ON )
+         endif()
+      endif()
+
+      # Configure the build script
+      configure_file("${CUDA_run_nvcc}" "${custom_target_script_pregen}" @ONLY)
+      file(GENERATE
+        OUTPUT "${custom_target_script}"
+        INPUT "${custom_target_script_pregen}"
+        )
+
+      # So if a user specifies the same cuda file as input more than once, you
+      # can have bad things happen with dependencies.  Here we check an option
+      # to see if this is the behavior they want.
+      if(CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE)
+        set(main_dep MAIN_DEPENDENCY ${source_file})
+      else()
+        set(main_dep DEPENDS ${source_file})
+      endif()
+
+      if(CUDA_VERBOSE_BUILD)
+        set(verbose_output ON)
+      elseif(CMAKE_GENERATOR MATCHES "Makefiles")
+        set(verbose_output "$(VERBOSE)")
+      else()
+        set(verbose_output OFF)
+      endif()
+
+      # Create up the comment string
+      file(RELATIVE_PATH generated_file_relative_path "${CMAKE_BINARY_DIR}" "${generated_file}")
+      if(cuda_compile_to_external_module)
+        set(cuda_build_comment_string "Building NVCC ${cuda_compile_to_external_module_type} file ${generated_file_relative_path}")
+      else()
+        set(cuda_build_comment_string "Building NVCC (${cuda_build_type}) object ${generated_file_relative_path}")
+      endif()
+
+      set(_verbatim VERBATIM)
+      if(ccbin_flags MATCHES "\\$\\(VCInstallDir\\)")
+        set(_verbatim "")
+      endif()
+
+      # Build the generated file and dependency file ##########################
+      add_custom_command(
+        OUTPUT ${generated_file}
+        # These output files depend on the source_file and the contents of cmake_dependency_file
+        ${main_dep}
+        DEPENDS ${CUDA_NVCC_DEPEND}
+        DEPENDS ${custom_target_script}
+        # Make sure the output directory exists before trying to write to it.
+        COMMAND ${CMAKE_COMMAND} -E make_directory "${generated_file_path}"
+        COMMAND ${CMAKE_COMMAND} ARGS
+          -D verbose:BOOL=${verbose_output}
+          ${ccbin_flags}
+          -D build_configuration:STRING=${CUDA_build_configuration}
+          -D "generated_file:STRING=${generated_file}"
+          -D "generated_cubin_file:STRING=${generated_cubin_file}"
+          -P "${custom_target_script}"
+        WORKING_DIRECTORY "${cuda_compile_intermediate_directory}"
+        COMMENT "${cuda_build_comment_string}"
+        ${_verbatim}
+        )
+
+      # Make sure the build system knows the file is generated.
+      set_source_files_properties(${generated_file} PROPERTIES GENERATED TRUE)
+
+      list(APPEND _cuda_wrap_generated_files ${generated_file})
+
+      # Add the other files that we want cmake to clean on a cleanup ##########
+      list(APPEND CUDA_ADDITIONAL_CLEAN_FILES "${cmake_dependency_file}")
+      list(REMOVE_DUPLICATES CUDA_ADDITIONAL_CLEAN_FILES)
+      set(CUDA_ADDITIONAL_CLEAN_FILES ${CUDA_ADDITIONAL_CLEAN_FILES} CACHE INTERNAL "List of intermediate files that are part of the cuda dependency scanning.")
+
+    endif()
+  endforeach()
+
+  # Set the return parameter
+  set(${generated_files} ${_cuda_wrap_generated_files})
+endmacro()
+
+function(_cuda_get_important_host_flags important_flags flag_string)
+  if(CMAKE_GENERATOR MATCHES "Visual Studio")
+    string(REGEX MATCHALL "/M[DT][d]?" flags "${flag_string}")
+    list(APPEND ${important_flags} ${flags})
+  else()
+    string(REGEX MATCHALL "-fPIC" flags "${flag_string}")
+    list(APPEND ${important_flags} ${flags})
+  endif()
+  set(${important_flags} ${${important_flags}} PARENT_SCOPE)
+endfunction()
+
+###############################################################################
+###############################################################################
+# Separable Compilation Link
+###############################################################################
+###############################################################################
+
+# Compute the filename to be used by CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS
+function(CUDA_COMPUTE_SEPARABLE_COMPILATION_OBJECT_FILE_NAME output_file_var cuda_target object_files)
+  if (object_files)
+    set(generated_extension ${CMAKE_${CUDA_C_OR_CXX}_OUTPUT_EXTENSION})
+    set(output_file "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${cuda_target}.dir/${CMAKE_CFG_INTDIR}/${cuda_target}_intermediate_link${generated_extension}")
+  else()
+    set(output_file)
+  endif()
+
+  set(${output_file_var} "${output_file}" PARENT_SCOPE)
+endfunction()
+
+# Setup the build rule for the separable compilation intermediate link file.
+function(CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS output_file cuda_target options object_files)
+  if (object_files)
+
+    set_source_files_properties("${output_file}"
+      PROPERTIES
+      EXTERNAL_OBJECT TRUE # This is an object file not to be compiled, but only
+                           # be linked.
+      GENERATED TRUE       # This file is generated during the build
+      )
+
+    # For now we are ignoring all the configuration specific flags.
+    set(nvcc_flags)
+    CUDA_PARSE_NVCC_OPTIONS(nvcc_flags ${options})
+    if(CUDA_64_BIT_DEVICE_CODE)
+      list(APPEND nvcc_flags -m64)
+    else()
+      list(APPEND nvcc_flags -m32)
+    endif()
+    # If -ccbin, --compiler-bindir has been specified, don't do anything.  Otherwise add it here.
+    list( FIND nvcc_flags "-ccbin" ccbin_found0 )
+    list( FIND nvcc_flags "--compiler-bindir" ccbin_found1 )
+    if( ccbin_found0 LESS 0 AND ccbin_found1 LESS 0 AND CUDA_HOST_COMPILER )
+      # Match VERBATIM check below.
+      if(CUDA_HOST_COMPILER MATCHES "\\$\\(VCInstallDir\\)")
+        list(APPEND nvcc_flags -ccbin "\"${CUDA_HOST_COMPILER}\"")
+      else()
+        list(APPEND nvcc_flags -ccbin "${CUDA_HOST_COMPILER}")
+      endif()
+    endif()
+
+    # Create a list of flags specified by CUDA_NVCC_FLAGS_${CONFIG} and CMAKE_${CUDA_C_OR_CXX}_FLAGS*
+    set(config_specific_flags)
+    set(flags)
+    foreach(config ${CUDA_configuration_types})
+      string(TOUPPER ${config} config_upper)
+      # Add config specific flags
+      foreach(f ${CUDA_NVCC_FLAGS_${config_upper}})
+        list(APPEND config_specific_flags $<$<CONFIG:${config}>:${f}>)
+      endforeach()
+      set(important_host_flags)
+      _cuda_get_important_host_flags(important_host_flags "${CMAKE_${CUDA_C_OR_CXX}_FLAGS_${config_upper}}")
+      foreach(f ${important_host_flags})
+        list(APPEND flags $<$<CONFIG:${config}>:-Xcompiler> $<$<CONFIG:${config}>:${f}>)
+      endforeach()
+    endforeach()
+    # Add CMAKE_${CUDA_C_OR_CXX}_FLAGS
+    set(important_host_flags)
+    _cuda_get_important_host_flags(important_host_flags "${CMAKE_${CUDA_C_OR_CXX}_FLAGS}")
+    foreach(f ${important_host_flags})
+      list(APPEND flags -Xcompiler ${f})
+    endforeach()
+
+    # Add our general CUDA_NVCC_FLAGS with the configuration specifig flags
+    set(nvcc_flags ${CUDA_NVCC_FLAGS} ${config_specific_flags} ${nvcc_flags})
+
+    file(RELATIVE_PATH output_file_relative_path "${CMAKE_BINARY_DIR}" "${output_file}")
+
+    # Some generators don't handle the multiple levels of custom command
+    # dependencies correctly (obj1 depends on file1, obj2 depends on obj1), so
+    # we work around that issue by compiling the intermediate link object as a
+    # pre-link custom command in that situation.
+    set(do_obj_build_rule TRUE)
+    if (MSVC_VERSION GREATER 1599 AND MSVC_VERSION LESS 1800)
+      # VS 2010 and 2012 have this problem.
+      set(do_obj_build_rule FALSE)
+    endif()
+
+    set(_verbatim VERBATIM)
+    if(nvcc_flags MATCHES "\\$\\(VCInstallDir\\)")
+      set(_verbatim "")
+    endif()
+
+    if (do_obj_build_rule)
+      add_custom_command(
+        OUTPUT ${output_file}
+        DEPENDS ${object_files}
+        COMMAND ${CUDA_NVCC_EXECUTABLE} ${nvcc_flags} -dlink ${object_files} -o ${output_file}
+        ${flags}
+        COMMENT "Building NVCC intermediate link file ${output_file_relative_path}"
+        COMMAND_EXPAND_LISTS
+        ${_verbatim}
+        )
+    else()
+      get_filename_component(output_file_dir "${output_file}" DIRECTORY)
+      add_custom_command(
+        TARGET ${cuda_target}
+        PRE_LINK
+        COMMAND ${CMAKE_COMMAND} -E echo "Building NVCC intermediate link file ${output_file_relative_path}"
+        COMMAND ${CMAKE_COMMAND} -E make_directory "${output_file_dir}"
+        COMMAND ${CUDA_NVCC_EXECUTABLE} ${nvcc_flags} ${flags} -dlink ${object_files} -o "${output_file}"
+        COMMAND_EXPAND_LISTS
+        ${_verbatim}
+        )
+    endif()
+ endif()
+endfunction()
+
+###############################################################################
+###############################################################################
+# ADD LIBRARY
+###############################################################################
+###############################################################################
+macro(CUDA_ADD_LIBRARY cuda_target)
+
+  CUDA_ADD_CUDA_INCLUDE_ONCE()
+
+  # Separate the sources from the options
+  CUDA_GET_SOURCES_AND_OPTIONS(_sources _cmake_options _options ${ARGN})
+  CUDA_BUILD_SHARED_LIBRARY(_cuda_shared_flag ${ARGN})
+  # Create custom commands and targets for each file.
+  CUDA_WRAP_SRCS( ${cuda_target} OBJ _generated_files ${_sources}
+    ${_cmake_options} ${_cuda_shared_flag}
+    OPTIONS ${_options} )
+
+  # Compute the file name of the intermedate link file used for separable
+  # compilation.
+  CUDA_COMPUTE_SEPARABLE_COMPILATION_OBJECT_FILE_NAME(link_file ${cuda_target} "${${cuda_target}_SEPARABLE_COMPILATION_OBJECTS}")
+
+  # Add the library.
+  add_library(${cuda_target} ${_cmake_options}
+    ${_generated_files}
+    ${_sources}
+    ${link_file}
+    )
+
+  # Add a link phase for the separable compilation if it has been enabled.  If
+  # it has been enabled then the ${cuda_target}_SEPARABLE_COMPILATION_OBJECTS
+  # variable will have been defined.
+  CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS("${link_file}" ${cuda_target} "${_options}" "${${cuda_target}_SEPARABLE_COMPILATION_OBJECTS}")
+
+  target_link_libraries(${cuda_target} ${CUDA_LINK_LIBRARIES_KEYWORD}
+    ${CUDA_LIBRARIES}
+    )
+
+  if(CUDA_SEPARABLE_COMPILATION)
+    target_link_libraries(${cuda_target} ${CUDA_LINK_LIBRARIES_KEYWORD}
+      ${CUDA_cudadevrt_LIBRARY}
+      )
+  endif()
+
+  # We need to set the linker language based on what the expected generated file
+  # would be. CUDA_C_OR_CXX is computed based on CUDA_HOST_COMPILATION_CPP.
+  set_target_properties(${cuda_target}
+    PROPERTIES
+    LINKER_LANGUAGE ${CUDA_C_OR_CXX}
+    )
+
+endmacro()
+
+
+###############################################################################
+###############################################################################
+# ADD EXECUTABLE
+###############################################################################
+###############################################################################
+macro(CUDA_ADD_EXECUTABLE cuda_target)
+
+  CUDA_ADD_CUDA_INCLUDE_ONCE()
+
+  # Separate the sources from the options
+  CUDA_GET_SOURCES_AND_OPTIONS(_sources _cmake_options _options ${ARGN})
+  # Create custom commands and targets for each file.
+  CUDA_WRAP_SRCS( ${cuda_target} OBJ _generated_files ${_sources} OPTIONS ${_options} )
+
+  # Compute the file name of the intermedate link file used for separable
+  # compilation.
+  CUDA_COMPUTE_SEPARABLE_COMPILATION_OBJECT_FILE_NAME(link_file ${cuda_target} "${${cuda_target}_SEPARABLE_COMPILATION_OBJECTS}")
+
+  # Add the library.
+  add_executable(${cuda_target} ${_cmake_options}
+    ${_generated_files}
+    ${_sources}
+    ${link_file}
+    )
+
+  # Add a link phase for the separable compilation if it has been enabled.  If
+  # it has been enabled then the ${cuda_target}_SEPARABLE_COMPILATION_OBJECTS
+  # variable will have been defined.
+  CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS("${link_file}" ${cuda_target} "${_options}" "${${cuda_target}_SEPARABLE_COMPILATION_OBJECTS}")
+
+  target_link_libraries(${cuda_target} ${CUDA_LINK_LIBRARIES_KEYWORD}
+    ${CUDA_LIBRARIES}
+    )
+
+  # We need to set the linker language based on what the expected generated file
+  # would be. CUDA_C_OR_CXX is computed based on CUDA_HOST_COMPILATION_CPP.
+  set_target_properties(${cuda_target}
+    PROPERTIES
+    LINKER_LANGUAGE ${CUDA_C_OR_CXX}
+    )
+
+endmacro()
+
+
+###############################################################################
+###############################################################################
+# (Internal) helper for manually added cuda source files with specific targets
+###############################################################################
+###############################################################################
+macro(cuda_compile_base cuda_target format generated_files)
+  # Update a counter in this directory, to keep phony target names unique.
+  set(_cuda_target "${cuda_target}")
+  get_property(_counter DIRECTORY PROPERTY _cuda_internal_phony_counter)
+  if(_counter)
+    math(EXPR _counter "${_counter} + 1")
+  else()
+    set(_counter 1)
+  endif()
+  string(APPEND _cuda_target "_${_counter}")
+  set_property(DIRECTORY PROPERTY _cuda_internal_phony_counter ${_counter})
+
+  # Separate the sources from the options
+  CUDA_GET_SOURCES_AND_OPTIONS(_sources _cmake_options _options ${ARGN})
+
+  # Create custom commands and targets for each file.
+  CUDA_WRAP_SRCS( ${_cuda_target} ${format} _generated_files ${_sources}
+                  ${_cmake_options} OPTIONS ${_options} PHONY)
+
+  set( ${generated_files} ${_generated_files})
+
+endmacro()
+
+###############################################################################
+###############################################################################
+# CUDA COMPILE
+###############################################################################
+###############################################################################
+macro(CUDA_COMPILE generated_files)
+  cuda_compile_base(cuda_compile OBJ ${generated_files} ${ARGN})
+endmacro()
+
+###############################################################################
+###############################################################################
+# CUDA COMPILE PTX
+###############################################################################
+###############################################################################
+macro(CUDA_COMPILE_PTX generated_files)
+  cuda_compile_base(cuda_compile_ptx PTX ${generated_files} ${ARGN})
+endmacro()
+
+###############################################################################
+###############################################################################
+# CUDA COMPILE FATBIN
+###############################################################################
+###############################################################################
+macro(CUDA_COMPILE_FATBIN generated_files)
+  cuda_compile_base(cuda_compile_fatbin FATBIN ${generated_files} ${ARGN})
+endmacro()
+
+###############################################################################
+###############################################################################
+# CUDA COMPILE CUBIN
+###############################################################################
+###############################################################################
+macro(CUDA_COMPILE_CUBIN generated_files)
+  cuda_compile_base(cuda_compile_cubin CUBIN ${generated_files} ${ARGN})
+endmacro()
+
+
+###############################################################################
+###############################################################################
+# CUDA ADD CUFFT TO TARGET
+###############################################################################
+###############################################################################
+macro(CUDA_ADD_CUFFT_TO_TARGET target)
+  if (CUDA_BUILD_EMULATION)
+    target_link_libraries(${target} ${CUDA_LINK_LIBRARIES_KEYWORD} ${CUDA_cufftemu_LIBRARY})
+  else()
+    target_link_libraries(${target} ${CUDA_LINK_LIBRARIES_KEYWORD} ${CUDA_cufft_LIBRARY})
+  endif()
+endmacro()
+
+###############################################################################
+###############################################################################
+# CUDA ADD CUBLAS TO TARGET
+###############################################################################
+###############################################################################
+macro(CUDA_ADD_CUBLAS_TO_TARGET target)
+  if (CUDA_BUILD_EMULATION)
+    target_link_libraries(${target} ${CUDA_LINK_LIBRARIES_KEYWORD} ${CUDA_cublasemu_LIBRARY})
+  else()
+    target_link_libraries(${target} ${CUDA_LINK_LIBRARIES_KEYWORD} ${CUDA_cublas_LIBRARY} ${CUDA_cublas_device_LIBRARY})
+  endif()
+endmacro()
+
+###############################################################################
+###############################################################################
+# CUDA BUILD CLEAN TARGET
+###############################################################################
+###############################################################################
+macro(CUDA_BUILD_CLEAN_TARGET)
+  # Call this after you add all your CUDA targets, and you will get a
+  # convenience target.  You should also make clean after running this target
+  # to get the build system to generate all the code again.
+
+  set(cuda_clean_target_name clean_cuda_depends)
+  if (CMAKE_GENERATOR MATCHES "Visual Studio")
+    string(TOUPPER ${cuda_clean_target_name} cuda_clean_target_name)
+  endif()
+  add_custom_target(${cuda_clean_target_name}
+    COMMAND ${CMAKE_COMMAND} -E rm -f ${CUDA_ADDITIONAL_CLEAN_FILES})
+
+  # Clear out the variable, so the next time we configure it will be empty.
+  # This is useful so that the files won't persist in the list after targets
+  # have been removed.
+  set(CUDA_ADDITIONAL_CLEAN_FILES "" CACHE INTERNAL "List of intermediate files that are part of the cuda dependency scanning.")
+endmacro()
diff --git a/share/cmake-3.18/Modules/FindCUDA/make2cmake.cmake b/share/cmake-3.22/Modules/FindCUDA/make2cmake.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindCUDA/make2cmake.cmake
rename to share/cmake-3.22/Modules/FindCUDA/make2cmake.cmake
diff --git a/share/cmake-3.18/Modules/FindCUDA/parse_cubin.cmake b/share/cmake-3.22/Modules/FindCUDA/parse_cubin.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindCUDA/parse_cubin.cmake
rename to share/cmake-3.22/Modules/FindCUDA/parse_cubin.cmake
diff --git a/share/cmake-3.22/Modules/FindCUDA/run_nvcc.cmake b/share/cmake-3.22/Modules/FindCUDA/run_nvcc.cmake
new file mode 100644
index 0000000..17e12f8
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindCUDA/run_nvcc.cmake
@@ -0,0 +1,306 @@
+#  James Bigler, NVIDIA Corp (nvidia.com - jbigler)
+#
+#  Copyright (c) 2008 - 2009 NVIDIA Corporation.  All rights reserved.
+#
+#  This code is licensed under the MIT License.  See the FindCUDA.cmake script
+#  for the text of the license.
+
+# The MIT License
+#
+# License for the specific language governing rights and limitations under
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+# DEALINGS IN THE SOFTWARE.
+
+
+##########################################################################
+# This file runs the nvcc commands to produce the desired output file along with
+# the dependency file needed by CMake to compute dependencies.  In addition the
+# file checks the output of each command and if the command fails it deletes the
+# output files.
+
+# Input variables
+#
+# verbose:BOOL=<>          OFF: Be as quiet as possible (default)
+#                          ON : Describe each step
+#
+# build_configuration:STRING=<> Typically one of Debug, MinSizeRel, Release, or
+#                               RelWithDebInfo, but it should match one of the
+#                               entries in CUDA_HOST_FLAGS. This is the build
+#                               configuration used when compiling the code.  If
+#                               blank or unspecified Debug is assumed as this is
+#                               what CMake does.
+#
+# generated_file:STRING=<> File to generate.  This argument must be passed in.
+#
+# generated_cubin_file:STRING=<> File to generate.  This argument must be passed
+#                                                   in if build_cubin is true.
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0007 NEW)
+if(NOT generated_file)
+  message(FATAL_ERROR "You must specify generated_file on the command line")
+endif()
+
+# Set these up as variables to make reading the generated file easier
+set(CMAKE_COMMAND "@CMAKE_COMMAND@") # path
+set(source_file "@source_file@") # path
+set(NVCC_generated_dependency_file "@NVCC_generated_dependency_file@") # path
+set(cmake_dependency_file "@cmake_dependency_file@") # path
+set(CUDA_make2cmake "@CUDA_make2cmake@") # path
+set(CUDA_parse_cubin "@CUDA_parse_cubin@") # path
+set(build_cubin @build_cubin@) # bool
+set(CUDA_HOST_COMPILER "@CUDA_HOST_COMPILER@") # path
+# We won't actually use these variables for now, but we need to set this, in
+# order to force this file to be run again if it changes.
+set(generated_file_path "@generated_file_path@") # path
+set(generated_file_internal "@generated_file@") # path
+set(generated_cubin_file_internal "@generated_cubin_file@") # path
+
+set(CUDA_NVCC_EXECUTABLE "@CUDA_NVCC_EXECUTABLE@") # path
+set(CUDA_NVCC_FLAGS @CUDA_NVCC_FLAGS@ ;; @CUDA_WRAP_OPTION_NVCC_FLAGS@) # list
+@CUDA_NVCC_FLAGS_CONFIG@
+set(nvcc_flags @nvcc_flags@) # list
+set(CUDA_NVCC_INCLUDE_DIRS [==[@CUDA_NVCC_INCLUDE_DIRS@]==]) # list (needs to be in lua quotes to address backslashes)
+string(REPLACE "\\" "/" CUDA_NVCC_INCLUDE_DIRS "${CUDA_NVCC_INCLUDE_DIRS}")
+set(CUDA_NVCC_COMPILE_DEFINITIONS [==[@CUDA_NVCC_COMPILE_DEFINITIONS@]==]) # list (needs to be in lua quotes see #16510 ).
+set(format_flag "@format_flag@") # string
+set(cuda_language_flag @cuda_language_flag@) # list
+
+# Clean up list of include directories and add -I flags
+list(REMOVE_DUPLICATES CUDA_NVCC_INCLUDE_DIRS)
+set(CUDA_NVCC_INCLUDE_ARGS)
+foreach(dir ${CUDA_NVCC_INCLUDE_DIRS})
+  # Extra quotes are added around each flag to help nvcc parse out flags with spaces.
+  list(APPEND CUDA_NVCC_INCLUDE_ARGS "-I${dir}")
+endforeach()
+
+# Clean up list of compile definitions, add -D flags, and append to nvcc_flags
+list(REMOVE_DUPLICATES CUDA_NVCC_COMPILE_DEFINITIONS)
+foreach(def ${CUDA_NVCC_COMPILE_DEFINITIONS})
+  list(APPEND nvcc_flags "-D${def}")
+endforeach()
+
+if(build_cubin AND NOT generated_cubin_file)
+  message(FATAL_ERROR "You must specify generated_cubin_file on the command line")
+endif()
+
+# This is the list of host compilation flags.  It C or CXX should already have
+# been chosen by FindCUDA.cmake.
+@CUDA_HOST_FLAGS@
+
+# Take the compiler flags and package them up to be sent to the compiler via -Xcompiler
+set(nvcc_host_compiler_flags "")
+# If we weren't given a build_configuration, use Debug.
+if(NOT build_configuration)
+  set(build_configuration Debug)
+endif()
+string(TOUPPER "${build_configuration}" build_configuration)
+#message("CUDA_NVCC_HOST_COMPILER_FLAGS = ${CUDA_NVCC_HOST_COMPILER_FLAGS}")
+foreach(flag ${CMAKE_HOST_FLAGS} ${CMAKE_HOST_FLAGS_${build_configuration}})
+  # Extra quotes are added around each flag to help nvcc parse out flags with spaces.
+  string(APPEND nvcc_host_compiler_flags ",\"${flag}\"")
+endforeach()
+if (nvcc_host_compiler_flags)
+  set(nvcc_host_compiler_flags "-Xcompiler" ${nvcc_host_compiler_flags})
+endif()
+#message("nvcc_host_compiler_flags = \"${nvcc_host_compiler_flags}\"")
+# Add the build specific configuration flags
+list(APPEND CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS_${build_configuration}})
+
+# Any -ccbin existing in CUDA_NVCC_FLAGS gets highest priority
+list( FIND CUDA_NVCC_FLAGS "-ccbin" ccbin_found0 )
+list( FIND CUDA_NVCC_FLAGS "--compiler-bindir" ccbin_found1 )
+if( ccbin_found0 LESS 0 AND ccbin_found1 LESS 0 AND CUDA_HOST_COMPILER )
+  if (CUDA_HOST_COMPILER STREQUAL "@_CUDA_MSVC_HOST_COMPILER@" AND DEFINED CCBIN)
+    set(CCBIN -ccbin "${CCBIN}")
+  else()
+    set(CCBIN -ccbin "${CUDA_HOST_COMPILER}")
+  endif()
+endif()
+
+# cuda_execute_process - Executes a command with optional command echo and status message.
+#
+#   status  - Status message to print if verbose is true
+#   command - COMMAND argument from the usual execute_process argument structure
+#   ARGN    - Remaining arguments are the command with arguments
+#
+#   CUDA_result - return value from running the command
+#
+# Make this a macro instead of a function, so that things like RESULT_VARIABLE
+# and other return variables are present after executing the process.
+macro(cuda_execute_process status command)
+  set(_command ${command})
+  if(NOT "x${_command}" STREQUAL "xCOMMAND")
+    message(FATAL_ERROR "Malformed call to cuda_execute_process.  Missing COMMAND as second argument. (command = ${command})")
+  endif()
+  if(verbose)
+    execute_process(COMMAND "${CMAKE_COMMAND}" -E echo -- ${status})
+    # Now we need to build up our command string.  We are accounting for quotes
+    # and spaces, anything else is left up to the user to fix if they want to
+    # copy and paste a runnable command line.
+    set(cuda_execute_process_string)
+    foreach(arg ${ARGN})
+      # If there are quotes, escape them, so they come through.
+      string(REPLACE "\"" "\\\"" arg ${arg})
+      # Args with spaces need quotes around them to get them to be parsed as a single argument.
+      if(arg MATCHES " ")
+        list(APPEND cuda_execute_process_string "\"${arg}\"")
+      else()
+        list(APPEND cuda_execute_process_string ${arg})
+      endif()
+    endforeach()
+    # Echo the command
+    execute_process(COMMAND ${CMAKE_COMMAND} -E echo ${cuda_execute_process_string})
+  endif()
+  # Run the command
+  execute_process(COMMAND ${ARGN} RESULT_VARIABLE CUDA_result )
+endmacro()
+
+# Delete the target file
+cuda_execute_process(
+  "Removing ${generated_file}"
+  COMMAND "${CMAKE_COMMAND}" -E rm -f "${generated_file}"
+  )
+
+# For CUDA 2.3 and below, -G -M doesn't work, so remove the -G flag
+# for dependency generation and hope for the best.
+set(depends_CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS}")
+set(CUDA_VERSION @CUDA_VERSION@)
+if(CUDA_VERSION VERSION_LESS "3.0")
+  # Note that this will remove all occurrences of -G.
+  list(REMOVE_ITEM depends_CUDA_NVCC_FLAGS "-G")
+endif()
+
+# nvcc doesn't define __CUDACC__ for some reason when generating dependency files.  This
+# can cause incorrect dependencies when #including files based on this macro which is
+# defined in the generating passes of nvcc invocation.  We will go ahead and manually
+# define this for now until a future version fixes this bug.
+set(CUDACC_DEFINE -D__CUDACC__)
+
+# Generate the dependency file
+cuda_execute_process(
+  "Generating dependency file: ${NVCC_generated_dependency_file}"
+  COMMAND "${CUDA_NVCC_EXECUTABLE}"
+  -M
+  ${CUDACC_DEFINE}
+  "${source_file}"
+  -o "${NVCC_generated_dependency_file}"
+  ${CCBIN}
+  ${nvcc_flags}
+  ${nvcc_host_compiler_flags}
+  ${depends_CUDA_NVCC_FLAGS}
+  -DNVCC
+  ${CUDA_NVCC_INCLUDE_ARGS}
+  )
+
+if(CUDA_result)
+  message(FATAL_ERROR "Error generating ${generated_file}")
+endif()
+
+# Generate the cmake readable dependency file to a temp file.  Don't put the
+# quotes just around the filenames for the input_file and output_file variables.
+# CMake will pass the quotes through and not be able to find the file.
+cuda_execute_process(
+  "Generating temporary cmake readable file: ${cmake_dependency_file}.tmp"
+  COMMAND "${CMAKE_COMMAND}"
+  -D "input_file:FILEPATH=${NVCC_generated_dependency_file}"
+  -D "output_file:FILEPATH=${cmake_dependency_file}.tmp"
+  -D "verbose=${verbose}"
+  -P "${CUDA_make2cmake}"
+  )
+
+if(CUDA_result)
+  message(FATAL_ERROR "Error generating ${generated_file}")
+endif()
+
+# Copy the file if it is different
+cuda_execute_process(
+  "Copy if different ${cmake_dependency_file}.tmp to ${cmake_dependency_file}"
+  COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${cmake_dependency_file}.tmp" "${cmake_dependency_file}"
+  )
+
+if(CUDA_result)
+  message(FATAL_ERROR "Error generating ${generated_file}")
+endif()
+
+# Delete the temporary file
+cuda_execute_process(
+  "Removing ${cmake_dependency_file}.tmp and ${NVCC_generated_dependency_file}"
+  COMMAND "${CMAKE_COMMAND}" -E rm -f "${cmake_dependency_file}.tmp" "${NVCC_generated_dependency_file}"
+  )
+
+if(CUDA_result)
+  message(FATAL_ERROR "Error generating ${generated_file}")
+endif()
+
+# Generate the code
+cuda_execute_process(
+  "Generating ${generated_file}"
+  COMMAND "${CUDA_NVCC_EXECUTABLE}"
+  "${source_file}"
+  ${cuda_language_flag}
+  ${format_flag} -o "${generated_file}"
+  ${CCBIN}
+  ${nvcc_flags}
+  ${nvcc_host_compiler_flags}
+  ${CUDA_NVCC_FLAGS}
+  -DNVCC
+  ${CUDA_NVCC_INCLUDE_ARGS}
+  )
+
+if(CUDA_result)
+  # Since nvcc can sometimes leave half done files make sure that we delete the output file.
+  cuda_execute_process(
+    "Removing ${generated_file}"
+    COMMAND "${CMAKE_COMMAND}" -E rm -f "${generated_file}"
+    )
+  message(FATAL_ERROR "Error generating file ${generated_file}")
+else()
+  if(verbose)
+    message("Generated ${generated_file} successfully.")
+  endif()
+endif()
+
+# Cubin resource report commands.
+if( build_cubin )
+  # Run with -cubin to produce resource usage report.
+  cuda_execute_process(
+    "Generating ${generated_cubin_file}"
+    COMMAND "${CUDA_NVCC_EXECUTABLE}"
+    "${source_file}"
+    ${CUDA_NVCC_FLAGS}
+    ${nvcc_flags}
+    ${CCBIN}
+    ${nvcc_host_compiler_flags}
+    -DNVCC
+    -cubin
+    -o "${generated_cubin_file}"
+    ${CUDA_NVCC_INCLUDE_ARGS}
+    )
+
+  # Execute the parser script.
+  cuda_execute_process(
+    "Executing the parser script"
+    COMMAND  "${CMAKE_COMMAND}"
+    -D "input_file:STRING=${generated_cubin_file}"
+    -P "${CUDA_parse_cubin}"
+    )
+
+endif()
+
+cmake_policy(POP)
diff --git a/share/cmake-3.22/Modules/FindCUDA/select_compute_arch.cmake b/share/cmake-3.22/Modules/FindCUDA/select_compute_arch.cmake
new file mode 100644
index 0000000..a35b3f8
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindCUDA/select_compute_arch.cmake
@@ -0,0 +1,298 @@
+# Synopsis:
+#   CUDA_SELECT_NVCC_ARCH_FLAGS(out_variable [target_CUDA_architectures])
+#   -- Selects GPU arch flags for nvcc based on target_CUDA_architectures
+#      target_CUDA_architectures : Auto | Common | All | LIST(ARCH_AND_PTX ...)
+#       - "Auto" detects local machine GPU compute arch at runtime.
+#       - "Common" and "All" cover common and entire subsets of architectures
+#      ARCH_AND_PTX : NAME | NUM.NUM | NUM.NUM(NUM.NUM) | NUM.NUM+PTX
+#      NAME: Fermi Kepler Maxwell Kepler+Tegra Kepler+Tesla Maxwell+Tegra Pascal Volta Turing Ampere
+#      NUM: Any number. Only those pairs are currently accepted by NVCC though:
+#            2.0 2.1 3.0 3.2 3.5 3.7 5.0 5.2 5.3 6.0 6.2 7.0 7.2 7.5 8.0 8.6
+#      Returns LIST of flags to be added to CUDA_NVCC_FLAGS in ${out_variable}
+#      Additionally, sets ${out_variable}_readable to the resulting numeric list
+#      Example:
+#       CUDA_SELECT_NVCC_ARCH_FLAGS(ARCH_FLAGS 3.0 3.5+PTX 5.2(5.0) Maxwell)
+#        LIST(APPEND CUDA_NVCC_FLAGS ${ARCH_FLAGS})
+#
+#      More info on CUDA architectures: https://en.wikipedia.org/wiki/CUDA
+#
+
+if(CMAKE_CUDA_COMPILER_LOADED) # CUDA as a language
+  if(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA"
+      AND CMAKE_CUDA_COMPILER_VERSION MATCHES "^([0-9]+\\.[0-9]+)")
+    set(CUDA_VERSION "${CMAKE_MATCH_1}")
+  endif()
+endif()
+
+# See: https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#gpu-feature-list
+# Additions, deprecations, and removals can be found in the release notes:
+# https://developer.nvidia.com/cuda-toolkit-archive
+
+# The initial status here is for CUDA 7.0
+set(CUDA_KNOWN_GPU_ARCHITECTURES  "Fermi" "Kepler" "Maxwell" "Kepler+Tegra" "Kepler+Tesla" "Maxwell+Tegra")
+set(CUDA_COMMON_GPU_ARCHITECTURES "2.0" "2.1" "3.0" "3.5" "5.0" "5.3")
+set(CUDA_LIMIT_GPU_ARCHITECTURE "6.0")
+set(CUDA_ALL_GPU_ARCHITECTURES "2.0" "2.1" "3.0" "3.2" "3.5" "3.7" "5.0" "5.2" "5.3")
+set(_CUDA_MAX_COMMON_ARCHITECTURE "5.2+PTX")
+
+
+if(CUDA_VERSION VERSION_GREATER_EQUAL "8.0")
+  list(APPEND CUDA_KNOWN_GPU_ARCHITECTURES "Pascal")
+  list(APPEND CUDA_COMMON_GPU_ARCHITECTURES "6.0" "6.1")
+  list(APPEND CUDA_ALL_GPU_ARCHITECTURES "6.0" "6.1" "6.2")
+
+  set(_CUDA_MAX_COMMON_ARCHITECTURE "6.2+PTX")
+  set(CUDA_LIMIT_GPU_ARCHITECTURE "7.0")
+
+  list(REMOVE_ITEM CUDA_COMMON_GPU_ARCHITECTURES "2.0" "2.1")
+endif ()
+
+if(CUDA_VERSION VERSION_GREATER_EQUAL "9.0")
+  list(APPEND CUDA_KNOWN_GPU_ARCHITECTURES "Volta")
+  list(APPEND CUDA_COMMON_GPU_ARCHITECTURES "7.0")
+  list(APPEND CUDA_ALL_GPU_ARCHITECTURES "7.0" "7.2")
+
+  set(_CUDA_MAX_COMMON_ARCHITECTURE "7.2+PTX")
+  set(CUDA_LIMIT_GPU_ARCHITECTURE "8.0")
+
+  list(REMOVE_ITEM CUDA_KNOWN_GPU_ARCHITECTURES "Fermi")
+  list(REMOVE_ITEM CUDA_ALL_GPU_ARCHITECTURES "2.0" "2.1")
+endif()
+
+if(CUDA_VERSION VERSION_GREATER_EQUAL "10.0")
+  list(APPEND CUDA_KNOWN_GPU_ARCHITECTURES "Turing")
+  list(APPEND CUDA_COMMON_GPU_ARCHITECTURES "7.5")
+  list(APPEND CUDA_ALL_GPU_ARCHITECTURES "7.5")
+
+  set(_CUDA_MAX_COMMON_ARCHITECTURE "7.5+PTX")
+  set(CUDA_LIMIT_GPU_ARCHITECTURE "8.0")
+
+  list(REMOVE_ITEM CUDA_COMMON_GPU_ARCHITECTURES "3.0")
+endif()
+
+# https://docs.nvidia.com/cuda/archive/11.0/cuda-toolkit-release-notes/index.html#cuda-general-new-features
+# https://docs.nvidia.com/cuda/archive/11.0/cuda-toolkit-release-notes/index.html#deprecated-features
+if(CUDA_VERSION VERSION_GREATER_EQUAL "11.0")
+  list(APPEND CUDA_KNOWN_GPU_ARCHITECTURES "Ampere")
+  list(APPEND CUDA_COMMON_GPU_ARCHITECTURES "8.0")
+  list(APPEND CUDA_ALL_GPU_ARCHITECTURES "8.0")
+
+  set(_CUDA_MAX_COMMON_ARCHITECTURE "8.0+PTX")
+  set(CUDA_LIMIT_GPU_ARCHITECTURE "8.6")
+
+  list(REMOVE_ITEM CUDA_COMMON_GPU_ARCHITECTURES "3.5" "5.0")
+  list(REMOVE_ITEM CUDA_ALL_GPU_ARCHITECTURES "3.0" "3.2")
+endif()
+
+if(CUDA_VERSION VERSION_GREATER_EQUAL "11.1")
+  list(APPEND CUDA_COMMON_GPU_ARCHITECTURES "8.6")
+  list(APPEND CUDA_ALL_GPU_ARCHITECTURES "8.6")
+
+  set(_CUDA_MAX_COMMON_ARCHITECTURE "8.6+PTX")
+  set(CUDA_LIMIT_GPU_ARCHITECTURE "9.0")
+endif()
+
+list(APPEND CUDA_COMMON_GPU_ARCHITECTURES "${_CUDA_MAX_COMMON_ARCHITECTURE}")
+
+# Check with: cmake -DCUDA_VERSION=7.0 -P select_compute_arch.cmake
+if(DEFINED CMAKE_SCRIPT_MODE_FILE)
+  include(CMakePrintHelpers)
+  cmake_print_variables(CUDA_KNOWN_GPU_ARCHITECTURES)
+  cmake_print_variables(CUDA_COMMON_GPU_ARCHITECTURES)
+  cmake_print_variables(CUDA_LIMIT_GPU_ARCHITECTURE)
+  cmake_print_variables(CUDA_ALL_GPU_ARCHITECTURES)
+endif()
+
+
+################################################################################################
+# A function for automatic detection of GPUs installed  (if autodetection is enabled)
+# Usage:
+#   CUDA_DETECT_INSTALLED_GPUS(OUT_VARIABLE)
+#
+function(CUDA_DETECT_INSTALLED_GPUS OUT_VARIABLE)
+  if(NOT CUDA_GPU_DETECT_OUTPUT)
+    if(CMAKE_CUDA_COMPILER_LOADED) # CUDA as a language
+      set(file "${PROJECT_BINARY_DIR}/detect_cuda_compute_capabilities.cu")
+    else()
+      set(file "${PROJECT_BINARY_DIR}/detect_cuda_compute_capabilities.cpp")
+    endif()
+
+    file(WRITE ${file} ""
+      "#include <cuda_runtime.h>\n"
+      "#include <cstdio>\n"
+      "int main()\n"
+      "{\n"
+      "  int count = 0;\n"
+      "  if (cudaSuccess != cudaGetDeviceCount(&count)) return -1;\n"
+      "  if (count == 0) return -1;\n"
+      "  for (int device = 0; device < count; ++device)\n"
+      "  {\n"
+      "    cudaDeviceProp prop;\n"
+      "    if (cudaSuccess == cudaGetDeviceProperties(&prop, device))\n"
+      "      std::printf(\"%d.%d \", prop.major, prop.minor);\n"
+      "  }\n"
+      "  return 0;\n"
+      "}\n")
+
+    if(CMAKE_CUDA_COMPILER_LOADED) # CUDA as a language
+      try_run(run_result compile_result ${PROJECT_BINARY_DIR} ${file}
+              RUN_OUTPUT_VARIABLE compute_capabilities)
+    else()
+      try_run(run_result compile_result ${PROJECT_BINARY_DIR} ${file}
+              CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${CUDA_INCLUDE_DIRS}"
+              LINK_LIBRARIES ${CUDA_LIBRARIES}
+              RUN_OUTPUT_VARIABLE compute_capabilities)
+    endif()
+
+    # Filter unrelated content out of the output.
+    string(REGEX MATCHALL "[0-9]+\\.[0-9]+" compute_capabilities "${compute_capabilities}")
+
+    if(run_result EQUAL 0)
+      string(REPLACE "2.1" "2.1(2.0)" compute_capabilities "${compute_capabilities}")
+      set(CUDA_GPU_DETECT_OUTPUT ${compute_capabilities}
+        CACHE INTERNAL "Returned GPU architectures from detect_gpus tool" FORCE)
+    endif()
+  endif()
+
+  if(NOT CUDA_GPU_DETECT_OUTPUT)
+    message(STATUS "Automatic GPU detection failed. Building for common architectures.")
+    set(${OUT_VARIABLE} ${CUDA_COMMON_GPU_ARCHITECTURES} PARENT_SCOPE)
+  else()
+    # Filter based on CUDA version supported archs
+    set(CUDA_GPU_DETECT_OUTPUT_FILTERED "")
+    separate_arguments(CUDA_GPU_DETECT_OUTPUT)
+    foreach(ITEM IN ITEMS ${CUDA_GPU_DETECT_OUTPUT})
+        if(CUDA_LIMIT_GPU_ARCHITECTURE AND ITEM VERSION_GREATER_EQUAL CUDA_LIMIT_GPU_ARCHITECTURE)
+        list(GET CUDA_COMMON_GPU_ARCHITECTURES -1 NEWITEM)
+        string(APPEND CUDA_GPU_DETECT_OUTPUT_FILTERED " ${NEWITEM}")
+      else()
+        string(APPEND CUDA_GPU_DETECT_OUTPUT_FILTERED " ${ITEM}")
+      endif()
+    endforeach()
+
+    set(${OUT_VARIABLE} ${CUDA_GPU_DETECT_OUTPUT_FILTERED} PARENT_SCOPE)
+  endif()
+endfunction()
+
+
+################################################################################################
+# Function for selecting GPU arch flags for nvcc based on CUDA architectures from parameter list
+# Usage:
+#   SELECT_NVCC_ARCH_FLAGS(out_variable [list of CUDA compute archs])
+function(CUDA_SELECT_NVCC_ARCH_FLAGS out_variable)
+  set(CUDA_ARCH_LIST "${ARGN}")
+
+  if("X${CUDA_ARCH_LIST}" STREQUAL "X" )
+    set(CUDA_ARCH_LIST "Auto")
+  endif()
+
+  set(cuda_arch_bin)
+  set(cuda_arch_ptx)
+
+  if("${CUDA_ARCH_LIST}" STREQUAL "All")
+    set(CUDA_ARCH_LIST ${CUDA_KNOWN_GPU_ARCHITECTURES})
+  elseif("${CUDA_ARCH_LIST}" STREQUAL "Common")
+    set(CUDA_ARCH_LIST ${CUDA_COMMON_GPU_ARCHITECTURES})
+  elseif("${CUDA_ARCH_LIST}" STREQUAL "Auto")
+    CUDA_DETECT_INSTALLED_GPUS(CUDA_ARCH_LIST)
+    message(STATUS "Autodetected CUDA architecture(s): ${CUDA_ARCH_LIST}")
+  endif()
+
+  # Now process the list and look for names
+  string(REGEX REPLACE "[ \t]+" ";" CUDA_ARCH_LIST "${CUDA_ARCH_LIST}")
+  list(REMOVE_DUPLICATES CUDA_ARCH_LIST)
+  foreach(arch_name ${CUDA_ARCH_LIST})
+    set(arch_bin)
+    set(arch_ptx)
+    set(add_ptx FALSE)
+    # Check to see if we are compiling PTX
+    if(arch_name MATCHES "(.*)\\+PTX$")
+      set(add_ptx TRUE)
+      set(arch_name ${CMAKE_MATCH_1})
+    endif()
+    if(arch_name MATCHES "^([0-9]\\.[0-9](\\([0-9]\\.[0-9]\\))?)$")
+      set(arch_bin ${CMAKE_MATCH_1})
+      set(arch_ptx ${arch_bin})
+    else()
+      # Look for it in our list of known architectures
+      if(${arch_name} STREQUAL "Fermi")
+        set(arch_bin 2.0 "2.1(2.0)")
+      elseif(${arch_name} STREQUAL "Kepler+Tegra")
+        set(arch_bin 3.2)
+      elseif(${arch_name} STREQUAL "Kepler+Tesla")
+        set(arch_bin 3.7)
+      elseif(${arch_name} STREQUAL "Kepler")
+        set(arch_bin 3.0 3.5)
+        set(arch_ptx 3.5)
+      elseif(${arch_name} STREQUAL "Maxwell+Tegra")
+        set(arch_bin 5.3)
+      elseif(${arch_name} STREQUAL "Maxwell")
+        set(arch_bin 5.0 5.2)
+        set(arch_ptx 5.2)
+      elseif(${arch_name} STREQUAL "Pascal")
+        set(arch_bin 6.0 6.1)
+        set(arch_ptx 6.1)
+      elseif(${arch_name} STREQUAL "Volta")
+        set(arch_bin 7.0 7.0)
+        set(arch_ptx 7.0)
+      elseif(${arch_name} STREQUAL "Turing")
+        set(arch_bin 7.5)
+        set(arch_ptx 7.5)
+      elseif(${arch_name} STREQUAL "Ampere")
+        set(arch_bin 8.0)
+        set(arch_ptx 8.0)
+      else()
+        message(SEND_ERROR "Unknown CUDA Architecture Name ${arch_name} in CUDA_SELECT_NVCC_ARCH_FLAGS")
+      endif()
+    endif()
+    if(NOT arch_bin)
+      message(SEND_ERROR "arch_bin wasn't set for some reason")
+    endif()
+    list(APPEND cuda_arch_bin ${arch_bin})
+    if(add_ptx)
+      if (NOT arch_ptx)
+        set(arch_ptx ${arch_bin})
+      endif()
+      list(APPEND cuda_arch_ptx ${arch_ptx})
+    endif()
+  endforeach()
+
+  # remove dots and convert to lists
+  string(REGEX REPLACE "\\." "" cuda_arch_bin "${cuda_arch_bin}")
+  string(REGEX REPLACE "\\." "" cuda_arch_ptx "${cuda_arch_ptx}")
+  string(REGEX MATCHALL "[0-9()]+" cuda_arch_bin "${cuda_arch_bin}")
+  string(REGEX MATCHALL "[0-9]+"   cuda_arch_ptx "${cuda_arch_ptx}")
+
+  if(cuda_arch_bin)
+    list(REMOVE_DUPLICATES cuda_arch_bin)
+  endif()
+  if(cuda_arch_ptx)
+    list(REMOVE_DUPLICATES cuda_arch_ptx)
+  endif()
+
+  set(nvcc_flags "")
+  set(nvcc_archs_readable "")
+
+  # Tell NVCC to add binaries for the specified GPUs
+  foreach(arch ${cuda_arch_bin})
+    if(arch MATCHES "([0-9]+)\\(([0-9]+)\\)")
+      # User explicitly specified ARCH for the concrete CODE
+      list(APPEND nvcc_flags -gencode arch=compute_${CMAKE_MATCH_2},code=sm_${CMAKE_MATCH_1})
+      list(APPEND nvcc_archs_readable sm_${CMAKE_MATCH_1})
+    else()
+      # User didn't explicitly specify ARCH for the concrete CODE, we assume ARCH=CODE
+      list(APPEND nvcc_flags -gencode arch=compute_${arch},code=sm_${arch})
+      list(APPEND nvcc_archs_readable sm_${arch})
+    endif()
+  endforeach()
+
+  # Tell NVCC to add PTX intermediate code for the specified architectures
+  foreach(arch ${cuda_arch_ptx})
+    list(APPEND nvcc_flags -gencode arch=compute_${arch},code=compute_${arch})
+    list(APPEND nvcc_archs_readable compute_${arch})
+  endforeach()
+
+  string(REPLACE ";" " " nvcc_archs_readable "${nvcc_archs_readable}")
+  set(${out_variable}          ${nvcc_flags}          PARENT_SCOPE)
+  set(${out_variable}_readable ${nvcc_archs_readable} PARENT_SCOPE)
+endfunction()
diff --git a/share/cmake-3.22/Modules/FindCUDAToolkit.cmake b/share/cmake-3.22/Modules/FindCUDAToolkit.cmake
new file mode 100644
index 0000000..d22a676
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindCUDAToolkit.cmake
@@ -0,0 +1,976 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindCUDAToolkit
+---------------
+
+.. versionadded:: 3.17
+
+This script locates the NVIDIA CUDA toolkit and the associated libraries, but
+does not require the ``CUDA`` language be enabled for a given project. This
+module does not search for the NVIDIA CUDA Samples.
+
+.. versionadded:: 3.19
+  QNX support.
+
+Search Behavior
+^^^^^^^^^^^^^^^
+
+The CUDA Toolkit search behavior uses the following order:
+
+1. If the ``CUDA`` language has been enabled we will use the directory
+   containing the compiler as the first search location for ``nvcc``.
+
+2. If the ``CUDAToolkit_ROOT`` cmake configuration variable (e.g.,
+   ``-DCUDAToolkit_ROOT=/some/path``) *or* environment variable is defined, it
+   will be searched.  If both an environment variable **and** a
+   configuration variable are specified, the *configuration* variable takes
+   precedence.
+
+   The directory specified here must be such that the executable ``nvcc`` or
+   the appropriate ``version.txt`` file can be found underneath the specified
+   directory.
+
+3. If the CUDA_PATH environment variable is defined, it will be searched
+   for ``nvcc``.
+
+4. The user's path is searched for ``nvcc`` using :command:`find_program`.  If
+   this is found, no subsequent search attempts are performed.  Users are
+   responsible for ensuring that the first ``nvcc`` to show up in the path is
+   the desired path in the event that multiple CUDA Toolkits are installed.
+
+5. On Unix systems, if the symbolic link ``/usr/local/cuda`` exists, this is
+   used.  No subsequent search attempts are performed.  No default symbolic link
+   location exists for the Windows platform.
+
+6. The platform specific default install locations are searched.  If exactly one
+   candidate is found, this is used.  The default CUDA Toolkit install locations
+   searched are:
+
+   +-------------+-------------------------------------------------------------+
+   | Platform    | Search Pattern                                              |
+   +=============+=============================================================+
+   | macOS       | ``/Developer/NVIDIA/CUDA-X.Y``                              |
+   +-------------+-------------------------------------------------------------+
+   | Other Unix  | ``/usr/local/cuda-X.Y``                                     |
+   +-------------+-------------------------------------------------------------+
+   | Windows     | ``C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vX.Y`` |
+   +-------------+-------------------------------------------------------------+
+
+   Where ``X.Y`` would be a specific version of the CUDA Toolkit, such as
+   ``/usr/local/cuda-9.0`` or
+   ``C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0``
+
+   .. note::
+
+       When multiple CUDA Toolkits are installed in the default location of a
+       system (e.g., both ``/usr/local/cuda-9.0`` and ``/usr/local/cuda-10.0``
+       exist but the ``/usr/local/cuda`` symbolic link does **not** exist), this
+       package is marked as **not** found.
+
+       There are too many factors involved in making an automatic decision in
+       the presence of multiple CUDA Toolkits being installed.  In this
+       situation, users are encouraged to either (1) set ``CUDAToolkit_ROOT`` or
+       (2) ensure that the correct ``nvcc`` executable shows up in ``$PATH`` for
+       :command:`find_program` to find.
+
+Arguments
+^^^^^^^^^
+
+``[<version>]``
+    The ``[<version>]`` argument requests a version with which the package found
+    should be compatible. See :ref:`find_package version format <FIND_PACKAGE_VERSION_FORMAT>`
+    for more details.
+
+Options
+^^^^^^^
+
+``REQUIRED``
+    If specified, configuration will error if a suitable CUDA Toolkit is not
+    found.
+
+``QUIET``
+    If specified, the search for a suitable CUDA Toolkit will not produce any
+    messages.
+
+``EXACT``
+    If specified, the CUDA Toolkit is considered found only if the exact
+    ``VERSION`` specified is recovered.
+
+Imported targets
+^^^^^^^^^^^^^^^^
+
+An :ref:`imported target <Imported targets>` named ``CUDA::toolkit`` is provided.
+
+This module defines :prop_tgt:`IMPORTED` targets for each
+of the following libraries that are part of the CUDAToolkit:
+
+- :ref:`CUDA Runtime Library<cuda_toolkit_rt_lib>`
+- :ref:`CUDA Driver Library<cuda_toolkit_driver_lib>`
+- :ref:`cuBLAS<cuda_toolkit_cuBLAS>`
+- :ref:`cuFFT<cuda_toolkit_cuFFT>`
+- :ref:`cuRAND<cuda_toolkit_cuRAND>`
+- :ref:`cuSOLVER<cuda_toolkit_cuSOLVER>`
+- :ref:`cuSPARSE<cuda_toolkit_cuSPARSE>`
+- :ref:`cuPTI<cuda_toolkit_cupti>`
+- :ref:`NPP<cuda_toolkit_NPP>`
+- :ref:`nvBLAS<cuda_toolkit_nvBLAS>`
+- :ref:`nvGRAPH<cuda_toolkit_nvGRAPH>`
+- :ref:`nvJPEG<cuda_toolkit_nvJPEG>`
+- :ref:`nvidia-ML<cuda_toolkit_nvML>`
+- :ref:`nvRTC<cuda_toolkit_nvRTC>`
+- :ref:`nvToolsExt<cuda_toolkit_nvToolsExt>`
+- :ref:`OpenCL<cuda_toolkit_opencl>`
+- :ref:`cuLIBOS<cuda_toolkit_cuLIBOS>`
+
+.. _`cuda_toolkit_rt_lib`:
+
+CUDA Runtime Library
+""""""""""""""""""""
+
+The CUDA Runtime library (cudart) are what most applications will typically
+need to link against to make any calls such as `cudaMalloc`, and `cudaFree`.
+
+Targets Created:
+
+- ``CUDA::cudart``
+- ``CUDA::cudart_static``
+
+.. _`cuda_toolkit_driver_lib`:
+
+CUDA Driver Library
+""""""""""""""""""""
+
+The CUDA Driver library (cuda) are used by applications that use calls
+such as `cuMemAlloc`, and `cuMemFree`. This is generally used by advanced
+
+
+Targets Created:
+
+- ``CUDA::cuda_driver``
+- ``CUDA::cuda_driver``
+
+.. _`cuda_toolkit_cuBLAS`:
+
+cuBLAS
+""""""
+
+The `cuBLAS <https://docs.nvidia.com/cuda/cublas/index.html>`_ library.
+
+Targets Created:
+
+- ``CUDA::cublas``
+- ``CUDA::cublas_static``
+- ``CUDA::cublasLt`` starting in CUDA 10.1
+- ``CUDA::cublasLt_static`` starting in CUDA 10.1
+
+.. _`cuda_toolkit_cuFFT`:
+
+cuFFT
+"""""
+
+The `cuFFT <https://docs.nvidia.com/cuda/cufft/index.html>`_ library.
+
+Targets Created:
+
+- ``CUDA::cufft``
+- ``CUDA::cufftw``
+- ``CUDA::cufft_static``
+- ``CUDA::cufftw_static``
+
+cuRAND
+""""""
+
+The `cuRAND <https://docs.nvidia.com/cuda/curand/index.html>`_ library.
+
+Targets Created:
+
+- ``CUDA::curand``
+- ``CUDA::curand_static``
+
+.. _`cuda_toolkit_cuSOLVER`:
+
+cuSOLVER
+""""""""
+
+The `cuSOLVER <https://docs.nvidia.com/cuda/cusolver/index.html>`_ library.
+
+Targets Created:
+
+- ``CUDA::cusolver``
+- ``CUDA::cusolver_static``
+
+.. _`cuda_toolkit_cuSPARSE`:
+
+cuSPARSE
+""""""""
+
+The `cuSPARSE <https://docs.nvidia.com/cuda/cusparse/index.html>`_ library.
+
+Targets Created:
+
+- ``CUDA::cusparse``
+- ``CUDA::cusparse_static``
+
+.. _`cuda_toolkit_cupti`:
+
+cupti
+"""""
+
+The `NVIDIA CUDA Profiling Tools Interface <https://developer.nvidia.com/CUPTI>`_.
+
+Targets Created:
+
+- ``CUDA::cupti``
+- ``CUDA::cupti_static``
+
+.. _`cuda_toolkit_NPP`:
+
+NPP
+"""
+
+The `NPP <https://docs.nvidia.com/cuda/npp/index.html>`_ libraries.
+
+Targets Created:
+
+- `nppc`:
+
+  - ``CUDA::nppc``
+  - ``CUDA::nppc_static``
+
+- `nppial`: Arithmetic and logical operation functions in `nppi_arithmetic_and_logical_operations.h`
+
+  - ``CUDA::nppial``
+  - ``CUDA::nppial_static``
+
+- `nppicc`: Color conversion and sampling functions in `nppi_color_conversion.h`
+
+  - ``CUDA::nppicc``
+  - ``CUDA::nppicc_static``
+
+- `nppicom`: JPEG compression and decompression functions in `nppi_compression_functions.h`
+  Removed starting in CUDA 11.0, use :ref:`nvJPEG<cuda_toolkit_nvJPEG>` instead.
+
+  - ``CUDA::nppicom``
+  - ``CUDA::nppicom_static``
+
+- `nppidei`: Data exchange and initialization functions in `nppi_data_exchange_and_initialization.h`
+
+  - ``CUDA::nppidei``
+  - ``CUDA::nppidei_static``
+
+- `nppif`: Filtering and computer vision functions in `nppi_filter_functions.h`
+
+  - ``CUDA::nppif``
+  - ``CUDA::nppif_static``
+
+- `nppig`: Geometry transformation functions found in `nppi_geometry_transforms.h`
+
+  - ``CUDA::nppig``
+  - ``CUDA::nppig_static``
+
+- `nppim`: Morphological operation functions found in `nppi_morphological_operations.h`
+
+  - ``CUDA::nppim``
+  - ``CUDA::nppim_static``
+
+- `nppist`: Statistics and linear transform in `nppi_statistics_functions.h` and `nppi_linear_transforms.h`
+
+  - ``CUDA::nppist``
+  - ``CUDA::nppist_static``
+
+- `nppisu`: Memory support functions in `nppi_support_functions.h`
+
+  - ``CUDA::nppisu``
+  - ``CUDA::nppisu_static``
+
+- `nppitc`: Threshold and compare operation functions in `nppi_threshold_and_compare_operations.h`
+
+  - ``CUDA::nppitc``
+  - ``CUDA::nppitc_static``
+
+- `npps`:
+
+  - ``CUDA::npps``
+  - ``CUDA::npps_static``
+
+.. _`cuda_toolkit_nvBLAS`:
+
+nvBLAS
+""""""
+
+The `nvBLAS <https://docs.nvidia.com/cuda/nvblas/index.html>`_ libraries.
+This is a shared library only.
+
+Targets Created:
+
+- ``CUDA::nvblas``
+
+.. _`cuda_toolkit_nvGRAPH`:
+
+nvGRAPH
+"""""""
+
+The `nvGRAPH <https://docs.nvidia.com/cuda/nvgraph/index.html>`_ library.
+Removed starting in CUDA 11.0
+
+Targets Created:
+
+- ``CUDA::nvgraph``
+- ``CUDA::nvgraph_static``
+
+
+.. _`cuda_toolkit_nvJPEG`:
+
+nvJPEG
+""""""
+
+The `nvJPEG <https://docs.nvidia.com/cuda/nvjpeg/index.html>`_ library.
+Introduced in CUDA 10.
+
+Targets Created:
+
+- ``CUDA::nvjpeg``
+- ``CUDA::nvjpeg_static``
+
+.. _`cuda_toolkit_nvRTC`:
+
+nvRTC
+"""""
+
+The `nvRTC <https://docs.nvidia.com/cuda/nvrtc/index.html>`_ (Runtime Compilation) library.
+This is a shared library only.
+
+Targets Created:
+
+- ``CUDA::nvrtc``
+
+.. _`cuda_toolkit_nvml`:
+
+nvidia-ML
+"""""""""
+
+The `NVIDIA Management Library <https://developer.nvidia.com/nvidia-management-library-nvml>`_.
+This is a shared library only.
+
+Targets Created:
+
+- ``CUDA::nvml``
+
+.. _`cuda_toolkit_nvToolsExt`:
+
+nvToolsExt
+""""""""""
+
+The `NVIDIA Tools Extension <https://docs.nvidia.com/gameworks/content/gameworkslibrary/nvtx/nvidia_tools_extension_library_nvtx.htm>`_.
+This is a shared library only.
+
+Targets Created:
+
+- ``CUDA::nvToolsExt``
+
+.. _`cuda_toolkit_opencl`:
+
+OpenCL
+""""""
+
+The `NVIDIA OpenCL Library <https://developer.nvidia.com/opencl>`_.
+This is a shared library only.
+
+Targets Created:
+
+- ``CUDA::OpenCL``
+
+.. _`cuda_toolkit_cuLIBOS`:
+
+cuLIBOS
+"""""""
+
+The cuLIBOS library is a backend thread abstraction layer library which is
+static only.  The ``CUDA::cublas_static``, ``CUDA::cusparse_static``,
+``CUDA::cufft_static``, ``CUDA::curand_static``, and (when implemented) NPP
+libraries all automatically have this dependency linked.
+
+Target Created:
+
+- ``CUDA::culibos``
+
+**Note**: direct usage of this target by consumers should not be necessary.
+
+.. _`cuda_toolkit_cuRAND`:
+
+
+
+Result variables
+^^^^^^^^^^^^^^^^
+
+``CUDAToolkit_FOUND``
+    A boolean specifying whether or not the CUDA Toolkit was found.
+
+``CUDAToolkit_VERSION``
+    The exact version of the CUDA Toolkit found (as reported by
+    ``nvcc --version`` or ``version.txt``).
+
+``CUDAToolkit_VERSION_MAJOR``
+    The major version of the CUDA Toolkit.
+
+``CUDAToolkit_VERSION_MINOR``
+    The minor version of the CUDA Toolkit.
+
+``CUDAToolkit_VERSION_PATCH``
+    The patch version of the CUDA Toolkit.
+
+``CUDAToolkit_BIN_DIR``
+    The path to the CUDA Toolkit library directory that contains the CUDA
+    executable ``nvcc``.
+
+``CUDAToolkit_INCLUDE_DIRS``
+    The path to the CUDA Toolkit ``include`` folder containing the header files
+    required to compile a project linking against CUDA.
+
+``CUDAToolkit_LIBRARY_DIR``
+    The path to the CUDA Toolkit library directory that contains the CUDA
+    Runtime library ``cudart``.
+
+``CUDAToolkit_LIBRARY_ROOT``
+    .. versionadded:: 3.18
+
+    The path to the CUDA Toolkit directory containing the nvvm directory and
+    version.txt.
+
+``CUDAToolkit_TARGET_DIR``
+    The path to the CUDA Toolkit directory including the target architecture
+    when cross-compiling. When not cross-compiling this will be equivalent to
+    the parent directory of ``CUDAToolkit_BIN_DIR``.
+
+``CUDAToolkit_NVCC_EXECUTABLE``
+    The path to the NVIDIA CUDA compiler ``nvcc``.  Note that this path may
+    **not** be the same as
+    :variable:`CMAKE_CUDA_COMPILER <CMAKE_<LANG>_COMPILER>`.  ``nvcc`` must be
+    found to determine the CUDA Toolkit version as well as determining other
+    features of the Toolkit.  This variable is set for the convenience of
+    modules that depend on this one.
+
+
+#]=======================================================================]
+
+# NOTE: much of this was simply extracted from FindCUDA.cmake.
+
+#   James Bigler, NVIDIA Corp (nvidia.com - jbigler)
+#   Abe Stephens, SCI Institute -- http://www.sci.utah.edu/~abe/FindCuda.html
+#
+#   Copyright (c) 2008 - 2009 NVIDIA Corporation.  All rights reserved.
+#
+#   Copyright (c) 2007-2009
+#   Scientific Computing and Imaging Institute, University of Utah
+#
+#   This code is licensed under the MIT License.  See the FindCUDA.cmake script
+#   for the text of the license.
+
+# The MIT License
+#
+# License for the specific language governing rights and limitations under
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+# DEALINGS IN THE SOFTWARE.
+#
+###############################################################################
+
+# The toolkit is located during compiler detection for CUDA and stored in CMakeCUDACompiler.cmake as
+# CMAKE_CUDA_COMPILER_TOOLKIT_ROOT and CMAKE_CUDA_COMPILER_LIBRARY_ROOT.
+# We compute the rest based on those here to avoid re-searching and to avoid finding a possibly
+# different installation.
+if(CMAKE_CUDA_COMPILER_TOOLKIT_ROOT)
+  set(CUDAToolkit_ROOT_DIR "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}")
+  set(CUDAToolkit_LIBRARY_ROOT "${CMAKE_CUDA_COMPILER_LIBRARY_ROOT}")
+  set(CUDAToolkit_BIN_DIR "${CUDAToolkit_ROOT_DIR}/bin")
+  set(CUDAToolkit_NVCC_EXECUTABLE "${CUDAToolkit_BIN_DIR}/nvcc${CMAKE_EXECUTABLE_SUFFIX}")
+else()
+
+  function(_CUDAToolkit_find_root_dir )
+    cmake_parse_arguments(arg "" "" "SEARCH_PATHS;FIND_FLAGS" ${ARGN})
+
+
+    if(NOT CUDAToolkit_BIN_DIR)
+      if(NOT CUDAToolkit_SENTINEL_FILE)
+        find_program(CUDAToolkit_NVCC_EXECUTABLE
+          NAMES nvcc nvcc.exe
+          PATHS ${arg_SEARCH_PATHS}
+          ${arg_FIND_FLAGS}
+        )
+      endif()
+
+      if(NOT CUDAToolkit_NVCC_EXECUTABLE)
+        find_file(CUDAToolkit_SENTINEL_FILE
+          NAMES version.txt
+          PATHS ${arg_SEARCH_PATHS}
+          NO_DEFAULT_PATH
+        )
+      endif()
+
+      if(EXISTS "${CUDAToolkit_NVCC_EXECUTABLE}")
+        # If NVCC exists  then invoke it to find the toolkit location.
+        # This allows us to support wrapper scripts (e.g. ccache or colornvcc), CUDA Toolkit,
+        # NVIDIA HPC SDK, and distro's splayed layouts
+        execute_process(COMMAND ${CUDAToolkit_NVCC_EXECUTABLE} "-v" "__cmake_determine_cuda"
+          OUTPUT_VARIABLE _CUDA_NVCC_OUT ERROR_VARIABLE _CUDA_NVCC_OUT)
+        if(_CUDA_NVCC_OUT MATCHES "\\#\\$ TOP=([^\r\n]*)")
+          get_filename_component(CUDAToolkit_BIN_DIR "${CMAKE_MATCH_1}/bin" ABSOLUTE)
+        else()
+          get_filename_component(CUDAToolkit_BIN_DIR "${CUDAToolkit_NVCC_EXECUTABLE}" DIRECTORY)
+        endif()
+        unset(_CUDA_NVCC_OUT)
+
+        mark_as_advanced(CUDAToolkit_BIN_DIR)
+        set(CUDAToolkit_BIN_DIR "${CUDAToolkit_BIN_DIR}" CACHE PATH "" FORCE)
+      endif()
+
+      if(CUDAToolkit_SENTINEL_FILE)
+        get_filename_component(CUDAToolkit_BIN_DIR ${CUDAToolkit_SENTINEL_FILE} DIRECTORY ABSOLUTE)
+        set(CUDAToolkit_BIN_DIR "${CUDAToolkit_BIN_DIR}/bin")
+
+        set(CUDAToolkit_BIN_DIR "${CUDAToolkit_BIN_DIR}" CACHE PATH "" FORCE)
+        mark_as_advanced(CUDAToolkit_BIN_DIR)
+      endif()
+    endif()
+
+    if(CUDAToolkit_BIN_DIR)
+      get_filename_component(CUDAToolkit_ROOT_DIR ${CUDAToolkit_BIN_DIR} DIRECTORY ABSOLUTE)
+      set(CUDAToolkit_ROOT_DIR "${CUDAToolkit_ROOT_DIR}" PARENT_SCOPE)
+    endif()
+
+  endfunction()
+
+  function(_CUDAToolkit_find_version_file result_variable)
+    # We first check for a non-scattered installation to prefer it over a scattered installation.
+    if(CUDAToolkit_ROOT AND EXISTS "${CUDAToolkit_ROOT}/version.txt")
+      set(${result_variable} "${CUDAToolkit_ROOT}/version.txt" PARENT_SCOPE)
+    elseif(CUDAToolkit_ROOT_DIR AND EXISTS "${CUDAToolkit_ROOT_DIR}/version.txt")
+      set(${result_variable} "${CUDAToolkit_ROOT_DIR}/version.txt" PARENT_SCOPE)
+    elseif(CMAKE_SYSROOT_LINK AND EXISTS "${CMAKE_SYSROOT_LINK}/usr/lib/cuda/version.txt")
+      set(${result_variable} "${CMAKE_SYSROOT_LINK}/usr/lib/cuda/version.txt" PARENT_SCOPE)
+    elseif(EXISTS "${CMAKE_SYSROOT}/usr/lib/cuda/version.txt")
+      set(${result_variable} "${CMAKE_SYSROOT}/usr/lib/cuda/version.txt" PARENT_SCOPE)
+    endif()
+  endfunction()
+
+  # For NVCC we can easily deduce the SDK binary directory from the compiler path.
+  if(CMAKE_CUDA_COMPILER_LOADED AND NOT CUDAToolkit_BIN_DIR AND CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA")
+    get_filename_component(CUDAToolkit_BIN_DIR "${CMAKE_CUDA_COMPILER}" DIRECTORY)
+    set(CUDAToolkit_BIN_DIR "${CUDAToolkit_BIN_DIR}" CACHE PATH "")
+    # Try language provided path first.
+    _CUDAToolkit_find_root_dir(SEARCH_PATHS "${CUDAToolkit_BIN_DIR}" FIND_FLAGS NO_DEFAULT_PATH)
+    mark_as_advanced(CUDAToolkit_BIN_DIR)
+  endif()
+
+  # Try user provided path
+  if(NOT CUDAToolkit_ROOT_DIR AND CUDAToolkit_ROOT)
+    _CUDAToolkit_find_root_dir(SEARCH_PATHS "${CUDAToolkit_ROOT}" FIND_FLAGS PATH_SUFFIXES bin NO_DEFAULT_PATH)
+  endif()
+  if(NOT CUDAToolkit_ROOT_DIR)
+    _CUDAToolkit_find_root_dir(FIND_FLAGS PATHS ENV CUDA_PATH PATH_SUFFIXES bin)
+  endif()
+
+  # If the user specified CUDAToolkit_ROOT but the toolkit could not be found, this is an error.
+  if(NOT CUDAToolkit_ROOT_DIR AND (DEFINED CUDAToolkit_ROOT OR DEFINED ENV{CUDAToolkit_ROOT}))
+    # Declare error messages now, print later depending on find_package args.
+    set(fail_base "Could not find nvcc executable in path specified by")
+    set(cuda_root_fail "${fail_base} CUDAToolkit_ROOT=${CUDAToolkit_ROOT}")
+    set(env_cuda_root_fail "${fail_base} environment variable CUDAToolkit_ROOT=$ENV{CUDAToolkit_ROOT}")
+
+    if(CUDAToolkit_FIND_REQUIRED)
+      if(DEFINED CUDAToolkit_ROOT)
+        message(FATAL_ERROR ${cuda_root_fail})
+      elseif(DEFINED ENV{CUDAToolkit_ROOT})
+        message(FATAL_ERROR ${env_cuda_root_fail})
+      endif()
+    else()
+      if(NOT CUDAToolkit_FIND_QUIETLY)
+        if(DEFINED CUDAToolkit_ROOT)
+          message(STATUS ${cuda_root_fail})
+        elseif(DEFINED ENV{CUDAToolkit_ROOT})
+          message(STATUS ${env_cuda_root_fail})
+        endif()
+      endif()
+      set(CUDAToolkit_FOUND FALSE)
+      unset(fail_base)
+      unset(cuda_root_fail)
+      unset(env_cuda_root_fail)
+      return()
+    endif()
+  endif()
+
+  # CUDAToolkit_ROOT cmake / env variable not specified, try platform defaults.
+  #
+  # - Linux: /usr/local/cuda-X.Y
+  # - macOS: /Developer/NVIDIA/CUDA-X.Y
+  # - Windows: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vX.Y
+  #
+  # We will also search the default symlink location /usr/local/cuda first since
+  # if CUDAToolkit_ROOT is not specified, it is assumed that the symlinked
+  # directory is the desired location.
+  if(NOT CUDAToolkit_ROOT_DIR)
+    if(UNIX)
+      if(NOT APPLE)
+        set(platform_base "/usr/local/cuda-")
+      else()
+        set(platform_base "/Developer/NVIDIA/CUDA-")
+      endif()
+    else()
+      set(platform_base "C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v")
+    endif()
+
+    # Build out a descending list of possible cuda installations, e.g.
+    file(GLOB possible_paths "${platform_base}*")
+    # Iterate the glob results and create a descending list.
+    set(versions)
+    foreach(p ${possible_paths})
+      # Extract version number from end of string
+      string(REGEX MATCH "[0-9][0-9]?\\.[0-9]$" p_version ${p})
+      if(IS_DIRECTORY ${p} AND p_version)
+        list(APPEND versions ${p_version})
+      endif()
+    endforeach()
+
+    # Sort numerically in descending order, so we try the newest versions first.
+    list(SORT versions COMPARE NATURAL ORDER DESCENDING)
+
+    # With a descending list of versions, populate possible paths to search.
+    set(search_paths)
+    foreach(v ${versions})
+      list(APPEND search_paths "${platform_base}${v}")
+    endforeach()
+
+    # Force the global default /usr/local/cuda to the front on Unix.
+    if(UNIX)
+      list(INSERT search_paths 0 "/usr/local/cuda")
+    endif()
+
+    # Now search for the toolkit again using the platform default search paths.
+    _CUDAToolkit_find_root_dir(SEARCH_PATHS "${search_paths}" FIND_FLAGS PATH_SUFFIXES bin)
+
+    # We are done with these variables now, cleanup for caller.
+    unset(platform_base)
+    unset(possible_paths)
+    unset(versions)
+    unset(search_paths)
+
+    if(NOT CUDAToolkit_ROOT_DIR)
+      if(CUDAToolkit_FIND_REQUIRED)
+        message(FATAL_ERROR "Could not find nvcc, please set CUDAToolkit_ROOT.")
+      elseif(NOT CUDAToolkit_FIND_QUIETLY)
+        message(STATUS "Could not find nvcc, please set CUDAToolkit_ROOT.")
+      endif()
+
+      set(CUDAToolkit_FOUND FALSE)
+      return()
+    endif()
+  endif()
+
+  _CUDAToolkit_find_version_file( _CUDAToolkit_version_file )
+  if(_CUDAToolkit_version_file)
+    # CUDAToolkit_LIBRARY_ROOT contains the device library and version file.
+    get_filename_component(CUDAToolkit_LIBRARY_ROOT "${_CUDAToolkit_version_file}" DIRECTORY ABSOLUTE)
+  endif()
+  unset(_CUDAToolkit_version_file)
+endif()
+
+# Find target directory when crosscompiling.
+if(CMAKE_CROSSCOMPILING)
+  if(CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7-a")
+    # Support for NVPACK
+    set(CUDAToolkit_TARGET_NAME "armv7-linux-androideabi")
+  elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
+    set(CUDAToolkit_TARGET_NAME "armv7-linux-gnueabihf")
+  elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
+    if(ANDROID_ARCH_NAME STREQUAL "arm64")
+      set(CUDAToolkit_TARGET_NAME "aarch64-linux-androideabi")
+    elseif (CMAKE_SYSTEM_NAME STREQUAL "QNX")
+      set(CUDAToolkit_TARGET_NAME "aarch64-qnx")
+    else()
+      set(CUDAToolkit_TARGET_NAME "aarch64-linux")
+    endif(ANDROID_ARCH_NAME STREQUAL "arm64")
+  elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
+    set(CUDAToolkit_TARGET_NAME "x86_64-linux")
+  endif()
+
+  if(EXISTS "${CUDAToolkit_ROOT_DIR}/targets/${CUDAToolkit_TARGET_NAME}")
+    set(CUDAToolkit_TARGET_DIR "${CUDAToolkit_ROOT_DIR}/targets/${CUDAToolkit_TARGET_NAME}")
+    # add known CUDA target root path to the set of directories we search for programs, libraries and headers
+    list(PREPEND CMAKE_FIND_ROOT_PATH "${CUDAToolkit_TARGET_DIR}")
+
+    # Mark that we need to pop the root search path changes after we have
+    # found all cuda libraries so that searches for our cross-compilation
+    # libraries work when another cuda sdk is in CMAKE_PREFIX_PATH or
+    # PATh
+    set(_CUDAToolkit_Pop_ROOT_PATH True)
+  endif()
+endif()
+
+# If not already set we can simply use the toolkit root or it's a scattered installation.
+if(NOT CUDAToolkit_TARGET_DIR)
+  # Not cross compiling
+  set(CUDAToolkit_TARGET_DIR "${CUDAToolkit_ROOT_DIR}")
+  # Now that we have the real ROOT_DIR, find components inside it.
+  list(APPEND CMAKE_PREFIX_PATH ${CUDAToolkit_ROOT_DIR})
+
+  # Mark that we need to pop the prefix path changes after we have
+  # found the cudart library.
+  set(_CUDAToolkit_Pop_Prefix True)
+endif()
+
+# CUDAToolkit_TARGET_DIR always points to the directory containing the include directory.
+# On a scattered installation /usr, on a non-scattered something like /usr/local/cuda or /usr/local/cuda-10.2/targets/aarch64-linux.
+if(EXISTS "${CUDAToolkit_TARGET_DIR}/include/cuda_runtime.h")
+  set(CUDAToolkit_INCLUDE_DIR "${CUDAToolkit_TARGET_DIR}/include")
+elseif(NOT CUDAToolkit_FIND_QUIETLY)
+  message(STATUS "Unable to find cuda_runtime.h in \"${CUDAToolkit_TARGET_DIR}/include\" for CUDAToolkit_INCLUDE_DIR.")
+endif()
+
+# The NVHPC layout moves math library headers and libraries to a sibling directory.
+# Create a separate variable so this directory can be selectively added to math targets.
+if(NOT EXISTS "${CUDAToolkit_INCLUDE_DIR}/cublas_v2.h")
+  set(CUDAToolkit_MATH_INCLUDE_DIR "${CUDAToolkit_TARGET_DIR}/../../math_libs/include")
+  cmake_path(NORMAL_PATH CUDAToolkit_MATH_INCLUDE_DIR)
+  if(NOT EXISTS "${CUDAToolkit_MATH_INCLUDE_DIR}/cublas_v2.h")
+    if(NOT CUDAToolkit_FIND_QUIETLY)
+      message(STATUS "Unable to find cublas_v2.h in either \"${CUDAToolkit_INCLUDE_DIR}\" or \"${CUDAToolkit_MATH_INCLUDE_DIR}\"")
+    endif()
+    unset(CUDAToolkit_MATH_INCLUDE_DIR)
+  endif()
+endif()
+
+if(CUDAToolkit_NVCC_EXECUTABLE AND
+   CMAKE_CUDA_COMPILER_VERSION AND
+   CUDAToolkit_NVCC_EXECUTABLE STREQUAL CMAKE_CUDA_COMPILER)
+  # Need to set these based off the already computed CMAKE_CUDA_COMPILER_VERSION value
+  # This if statement will always match, but is used to provide variables for MATCH 1,2,3...
+  if(CMAKE_CUDA_COMPILER_VERSION MATCHES [=[([0-9]+)\.([0-9]+)\.([0-9]+)]=])
+    set(CUDAToolkit_VERSION_MAJOR "${CMAKE_MATCH_1}")
+    set(CUDAToolkit_VERSION_MINOR "${CMAKE_MATCH_2}")
+    set(CUDAToolkit_VERSION_PATCH "${CMAKE_MATCH_3}")
+    set(CUDAToolkit_VERSION "${CMAKE_CUDA_COMPILER_VERSION}")
+  endif()
+elseif(CUDAToolkit_NVCC_EXECUTABLE)
+  # Compute the version by invoking nvcc
+  execute_process(COMMAND ${CUDAToolkit_NVCC_EXECUTABLE} "--version" OUTPUT_VARIABLE NVCC_OUT)
+  if(NVCC_OUT MATCHES [=[ V([0-9]+)\.([0-9]+)\.([0-9]+)]=])
+    set(CUDAToolkit_VERSION_MAJOR "${CMAKE_MATCH_1}")
+    set(CUDAToolkit_VERSION_MINOR "${CMAKE_MATCH_2}")
+    set(CUDAToolkit_VERSION_PATCH "${CMAKE_MATCH_3}")
+    set(CUDAToolkit_VERSION  "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}")
+  endif()
+  unset(NVCC_OUT)
+else()
+  _CUDAToolkit_find_version_file(version_file)
+  if(version_file)
+    file(READ "${version_file}" VERSION_INFO)
+    if(VERSION_INFO MATCHES [=[CUDA Version ([0-9]+)\.([0-9]+)\.([0-9]+)]=])
+      set(CUDAToolkit_VERSION_MAJOR "${CMAKE_MATCH_1}")
+      set(CUDAToolkit_VERSION_MINOR "${CMAKE_MATCH_2}")
+      set(CUDAToolkit_VERSION_PATCH "${CMAKE_MATCH_3}")
+      set(CUDAToolkit_VERSION  "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}")
+    endif()
+  endif()
+endif()
+
+# Find the CUDA Runtime Library libcudart
+find_library(CUDA_CUDART
+  NAMES cudart
+  PATH_SUFFIXES lib64 lib/x64
+)
+find_library(CUDA_CUDART
+  NAMES cudart
+  PATH_SUFFIXES lib64/stubs lib/x64/stubs
+)
+
+if(NOT CUDA_CUDART AND NOT CUDAToolkit_FIND_QUIETLY)
+  message(STATUS "Unable to find cudart library.")
+endif()
+
+if(_CUDAToolkit_Pop_Prefix)
+  list(REMOVE_AT CMAKE_PREFIX_PATH -1)
+  unset(_CUDAToolkit_Pop_Prefix)
+endif()
+
+#-----------------------------------------------------------------------------
+# Perform version comparison and validate all required variables are set.
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+find_package_handle_standard_args(CUDAToolkit
+  REQUIRED_VARS
+    CUDAToolkit_INCLUDE_DIR
+    CUDA_CUDART
+    CUDAToolkit_BIN_DIR
+  VERSION_VAR
+    CUDAToolkit_VERSION
+)
+
+unset(CUDAToolkit_ROOT_DIR)
+mark_as_advanced(CUDA_CUDART
+                 CUDAToolkit_INCLUDE_DIR
+                 CUDAToolkit_NVCC_EXECUTABLE
+                 CUDAToolkit_SENTINEL_FILE
+                 )
+
+#-----------------------------------------------------------------------------
+# Construct result variables
+if(CUDAToolkit_FOUND)
+  set(CUDAToolkit_INCLUDE_DIRS ${CUDAToolkit_INCLUDE_DIR})
+  get_filename_component(CUDAToolkit_LIBRARY_DIR ${CUDA_CUDART} DIRECTORY ABSOLUTE)
+endif()
+
+#-----------------------------------------------------------------------------
+# Construct import targets
+if(CUDAToolkit_FOUND)
+
+  function(_CUDAToolkit_find_and_add_import_lib lib_name)
+    cmake_parse_arguments(arg "" "" "ALT;DEPS;EXTRA_PATH_SUFFIXES" ${ARGN})
+
+    set(search_names ${lib_name} ${arg_ALT})
+
+    find_library(CUDA_${lib_name}_LIBRARY
+      NAMES ${search_names}
+      HINTS ${CUDAToolkit_LIBRARY_DIR}
+            ENV CUDA_PATH
+      PATH_SUFFIXES nvidia/current lib64 lib/x64 lib
+                    ${arg_EXTRA_PATH_SUFFIXES}
+    )
+    # Don't try any stub directories until we have exhausted all other
+    # search locations.
+    find_library(CUDA_${lib_name}_LIBRARY
+      NAMES ${search_names}
+      HINTS ${CUDAToolkit_LIBRARY_DIR}
+            ENV CUDA_PATH
+      PATH_SUFFIXES lib64/stubs lib/x64/stubs lib/stubs stubs
+                    # Support NVHPC splayed math library layout
+                    ../../math_libs/${CUDAToolkit_VERSION_MAJOR}.${CUDAToolkit_VERSION_MINOR}/lib64
+                    ../../math_libs/lib64
+    )
+
+    mark_as_advanced(CUDA_${lib_name}_LIBRARY)
+
+    if (NOT TARGET CUDA::${lib_name} AND CUDA_${lib_name}_LIBRARY)
+      add_library(CUDA::${lib_name} UNKNOWN IMPORTED)
+      target_include_directories(CUDA::${lib_name} SYSTEM INTERFACE "${CUDAToolkit_INCLUDE_DIRS}")
+      if(DEFINED CUDAToolkit_MATH_INCLUDE_DIR)
+        string(FIND ${CUDA_${lib_name}_LIBRARY} "math_libs" math_libs)
+        if(NOT ${math_libs} EQUAL -1)
+          target_include_directories(CUDA::${lib_name} SYSTEM INTERFACE "${CUDAToolkit_MATH_INCLUDE_DIR}")
+        endif()
+      endif()
+      set_property(TARGET CUDA::${lib_name} PROPERTY IMPORTED_LOCATION "${CUDA_${lib_name}_LIBRARY}")
+      foreach(dep ${arg_DEPS})
+        if(TARGET CUDA::${dep})
+          target_link_libraries(CUDA::${lib_name} INTERFACE CUDA::${dep})
+        endif()
+      endforeach()
+    endif()
+  endfunction()
+
+  if(NOT TARGET CUDA::toolkit)
+    add_library(CUDA::toolkit IMPORTED INTERFACE)
+    target_include_directories(CUDA::toolkit SYSTEM INTERFACE "${CUDAToolkit_INCLUDE_DIRS}")
+    target_link_directories(CUDA::toolkit INTERFACE "${CUDAToolkit_LIBRARY_DIR}")
+  endif()
+
+  _CUDAToolkit_find_and_add_import_lib(cuda_driver ALT cuda)
+
+  _CUDAToolkit_find_and_add_import_lib(cudart)
+  _CUDAToolkit_find_and_add_import_lib(cudart_static)
+
+  # setup dependencies that are required for cudart_static when building
+  # on linux. These are generally only required when using the CUDA toolkit
+  # when CUDA language is disabled
+  if(NOT TARGET CUDA::cudart_static_deps
+     AND TARGET CUDA::cudart_static)
+
+    add_library(CUDA::cudart_static_deps IMPORTED INTERFACE)
+    target_link_libraries(CUDA::cudart_static INTERFACE CUDA::cudart_static_deps)
+
+    if(UNIX AND (CMAKE_C_COMPILER OR CMAKE_CXX_COMPILER))
+      find_package(Threads REQUIRED)
+      target_link_libraries(CUDA::cudart_static_deps INTERFACE Threads::Threads ${CMAKE_DL_LIBS})
+    endif()
+
+    if(UNIX AND NOT APPLE AND NOT (CMAKE_SYSTEM_NAME STREQUAL "QNX"))
+      # On Linux, you must link against librt when using the static cuda runtime.
+      find_library(CUDAToolkit_rt_LIBRARY rt)
+      mark_as_advanced(CUDAToolkit_rt_LIBRARY)
+      if(NOT CUDAToolkit_rt_LIBRARY)
+        message(WARNING "Could not find librt library, needed by CUDA::cudart_static")
+      else()
+        target_link_libraries(CUDA::cudart_static_deps INTERFACE ${CUDAToolkit_rt_LIBRARY})
+      endif()
+    endif()
+  endif()
+
+  _CUDAToolkit_find_and_add_import_lib(culibos) # it's a static library
+  foreach (cuda_lib cublasLt cublas cufft curand cusparse nppc nvjpeg)
+    _CUDAToolkit_find_and_add_import_lib(${cuda_lib})
+    _CUDAToolkit_find_and_add_import_lib(${cuda_lib}_static DEPS culibos)
+  endforeach()
+
+  # cuFFTW depends on cuFFT
+  _CUDAToolkit_find_and_add_import_lib(cufftw DEPS cufft)
+  _CUDAToolkit_find_and_add_import_lib(cufftw DEPS cufft_static)
+
+  # cuSOLVER depends on cuBLAS, and cuSPARSE
+  _CUDAToolkit_find_and_add_import_lib(cusolver DEPS cublas cusparse)
+  _CUDAToolkit_find_and_add_import_lib(cusolver_static DEPS cublas_static cusparse_static culibos)
+
+  # nvGRAPH depends on cuRAND, and cuSOLVER.
+  _CUDAToolkit_find_and_add_import_lib(nvgraph DEPS curand cusolver)
+  _CUDAToolkit_find_and_add_import_lib(nvgraph_static DEPS curand_static cusolver_static)
+
+  # Process the majority of the NPP libraries.
+  foreach (cuda_lib nppial nppicc nppidei nppif nppig nppim nppist nppitc npps nppicom nppisu)
+    _CUDAToolkit_find_and_add_import_lib(${cuda_lib} DEPS nppc)
+    _CUDAToolkit_find_and_add_import_lib(${cuda_lib}_static DEPS nppc_static)
+  endforeach()
+
+  _CUDAToolkit_find_and_add_import_lib(cupti
+                                       EXTRA_PATH_SUFFIXES ../extras/CUPTI/lib64/
+                                                           ../extras/CUPTI/lib/)
+  _CUDAToolkit_find_and_add_import_lib(cupti_static
+                                       EXTRA_PATH_SUFFIXES ../extras/CUPTI/lib64/
+                                                           ../extras/CUPTI/lib/)
+
+  _CUDAToolkit_find_and_add_import_lib(nvrtc DEPS cuda_driver)
+
+  _CUDAToolkit_find_and_add_import_lib(nvml ALT nvidia-ml nvml)
+
+  if(WIN32)
+    # nvtools can be installed outside the CUDA toolkit directory
+    # so prefer the NVTOOLSEXT_PATH windows only environment variable
+    # In addition on windows the most common name is nvToolsExt64_1
+    find_library(CUDA_nvToolsExt_LIBRARY
+      NAMES nvToolsExt64_1 nvToolsExt64 nvToolsExt
+      PATHS ENV NVTOOLSEXT_PATH
+            ENV CUDA_PATH
+      PATH_SUFFIXES lib/x64 lib
+    )
+  endif()
+  _CUDAToolkit_find_and_add_import_lib(nvToolsExt ALT nvToolsExt64)
+
+  _CUDAToolkit_find_and_add_import_lib(OpenCL)
+endif()
+
+if(_CUDAToolkit_Pop_ROOT_PATH)
+  list(REMOVE_AT CMAKE_FIND_ROOT_PATH 0)
+  unset(_CUDAToolkit_Pop_ROOT_PATH)
+endif()
diff --git a/share/cmake-3.22/Modules/FindCURL.cmake b/share/cmake-3.22/Modules/FindCURL.cmake
new file mode 100644
index 0000000..e37d225
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindCURL.cmake
@@ -0,0 +1,215 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindCURL
+--------
+
+Find the native CURL headers and libraries.
+
+.. versionadded:: 3.14
+  This module accept optional COMPONENTS to check supported features and
+  protocols:
+
+::
+
+  PROTOCOLS: ICT FILE FTP FTPS GOPHER HTTP HTTPS IMAP IMAPS LDAP LDAPS POP3
+             POP3S RTMP RTSP SCP SFTP SMB SMBS SMTP SMTPS TELNET TFTP
+  FEATURES:  SSL IPv6 UnixSockets libz AsynchDNS IDN GSS-API PSL SPNEGO
+             Kerberos NTLM NTLM_WB TLS-SRP HTTP2 HTTPS-proxy
+
+IMPORTED Targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.12
+
+This module defines :prop_tgt:`IMPORTED` target ``CURL::libcurl``, if
+curl has been found.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This module defines the following variables:
+
+``CURL_FOUND``
+  "True" if ``curl`` found.
+
+``CURL_INCLUDE_DIRS``
+  where to find ``curl``/``curl.h``, etc.
+
+``CURL_LIBRARIES``
+  List of libraries when using ``curl``.
+
+``CURL_VERSION_STRING``
+  The version of ``curl`` found.
+
+.. versionadded:: 3.13
+  Debug and Release variants are found separately.
+
+CURL CMake
+^^^^^^^^^^
+
+.. versionadded:: 3.17
+
+If CURL was built using the CMake buildsystem then it provides its own
+``CURLConfig.cmake`` file for use with the :command:`find_package` command's
+config mode. This module looks for this file and, if found,
+returns its results with no further action.
+
+Set ``CURL_NO_CURL_CMAKE`` to ``ON`` to disable this search.
+
+#]=======================================================================]
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+
+if(NOT CURL_NO_CURL_CMAKE)
+  # do a find package call to specifically look for the CMake version
+  # of curl
+  find_package(CURL QUIET NO_MODULE)
+  mark_as_advanced(CURL_DIR)
+
+  # if we found the CURL cmake package then we are done, and
+  # can print what we found and return.
+  if(CURL_FOUND)
+    find_package_handle_standard_args(CURL HANDLE_COMPONENTS CONFIG_MODE)
+    return()
+  endif()
+endif()
+
+find_package(PkgConfig QUIET)
+if(PKG_CONFIG_FOUND)
+  pkg_check_modules(PC_CURL QUIET libcurl)
+  if(PC_CURL_FOUND)
+    set(CURL_VERSION_STRING ${PC_CURL_VERSION})
+    pkg_get_variable(CURL_SUPPORTED_PROTOCOLS libcurl supported_protocols)
+    pkg_get_variable(CURL_SUPPORTED_FEATURES libcurl supported_features)
+  endif()
+endif()
+
+# Look for the header file.
+find_path(CURL_INCLUDE_DIR
+          NAMES curl/curl.h
+          HINTS ${PC_CURL_INCLUDE_DIRS})
+mark_as_advanced(CURL_INCLUDE_DIR)
+
+if(NOT CURL_LIBRARY)
+  # Look for the library (sorted from most current/relevant entry to least).
+  find_library(CURL_LIBRARY_RELEASE NAMES
+      curl
+    # Windows MSVC prebuilts:
+      curllib
+      libcurl_imp
+      curllib_static
+    # Windows older "Win32 - MSVC" prebuilts (libcurl.lib, e.g. libcurl-7.15.5-win32-msvc.zip):
+      libcurl
+      NAMES_PER_DIR
+      HINTS ${PC_CURL_LIBRARY_DIRS}
+  )
+  mark_as_advanced(CURL_LIBRARY_RELEASE)
+
+  find_library(CURL_LIBRARY_DEBUG NAMES
+    # Windows MSVC CMake builds in debug configuration on vcpkg:
+      libcurl-d_imp
+      libcurl-d
+      NAMES_PER_DIR
+      HINTS ${PC_CURL_LIBRARY_DIRS}
+  )
+  mark_as_advanced(CURL_LIBRARY_DEBUG)
+
+  include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
+  select_library_configurations(CURL)
+endif()
+
+if(CURL_INCLUDE_DIR AND NOT CURL_VERSION_STRING)
+  foreach(_curl_version_header curlver.h curl.h)
+    if(EXISTS "${CURL_INCLUDE_DIR}/curl/${_curl_version_header}")
+      file(STRINGS "${CURL_INCLUDE_DIR}/curl/${_curl_version_header}" curl_version_str REGEX "^#define[\t ]+LIBCURL_VERSION[\t ]+\".*\"")
+
+      string(REGEX REPLACE "^#define[\t ]+LIBCURL_VERSION[\t ]+\"([^\"]*)\".*" "\\1" CURL_VERSION_STRING "${curl_version_str}")
+      unset(curl_version_str)
+      break()
+    endif()
+  endforeach()
+endif()
+
+if(CURL_FIND_COMPONENTS)
+  set(CURL_KNOWN_PROTOCOLS ICT FILE FTP FTPS GOPHER HTTP HTTPS IMAP IMAPS LDAP LDAPS POP3 POP3S RTMP RTSP SCP SFTP SMB SMBS SMTP SMTPS TELNET TFTP)
+  set(CURL_KNOWN_FEATURES  SSL IPv6 UnixSockets libz AsynchDNS IDN GSS-API PSL SPNEGO Kerberos NTLM NTLM_WB TLS-SRP HTTP2 HTTPS-proxy)
+  foreach(component IN LISTS CURL_KNOWN_PROTOCOLS CURL_KNOWN_FEATURES)
+    set(CURL_${component}_FOUND FALSE)
+  endforeach()
+  if(NOT PC_CURL_FOUND)
+    find_program(CURL_CONFIG_EXECUTABLE NAMES curl-config)
+    if(CURL_CONFIG_EXECUTABLE)
+      execute_process(COMMAND ${CURL_CONFIG_EXECUTABLE} --version
+                      OUTPUT_VARIABLE CURL_CONFIG_VERSION_STRING
+                      ERROR_QUIET
+                      OUTPUT_STRIP_TRAILING_WHITESPACE)
+      execute_process(COMMAND ${CURL_CONFIG_EXECUTABLE} --feature
+                      OUTPUT_VARIABLE CURL_CONFIG_FEATURES_STRING
+                      ERROR_QUIET
+                      OUTPUT_STRIP_TRAILING_WHITESPACE)
+      string(REPLACE "\n" ";" CURL_SUPPORTED_FEATURES "${CURL_CONFIG_FEATURES_STRING}")
+      execute_process(COMMAND ${CURL_CONFIG_EXECUTABLE} --protocols
+                      OUTPUT_VARIABLE CURL_CONFIG_PROTOCOLS_STRING
+                      ERROR_QUIET
+                      OUTPUT_STRIP_TRAILING_WHITESPACE)
+      string(REPLACE "\n" ";" CURL_SUPPORTED_PROTOCOLS "${CURL_CONFIG_PROTOCOLS_STRING}")
+    endif()
+
+  endif()
+  foreach(component IN LISTS CURL_FIND_COMPONENTS)
+    list(FIND CURL_KNOWN_PROTOCOLS ${component} _found)
+    if(NOT _found EQUAL -1)
+      list(FIND CURL_SUPPORTED_PROTOCOLS ${component} _found)
+      if(NOT _found EQUAL -1)
+        set(CURL_${component}_FOUND TRUE)
+      elseif(CURL_FIND_REQUIRED)
+        message(FATAL_ERROR "CURL: Required protocol ${component} is not found")
+      endif()
+    else()
+      list(FIND CURL_SUPPORTED_FEATURES ${component} _found)
+      if(NOT _found EQUAL -1)
+        set(CURL_${component}_FOUND TRUE)
+      elseif(CURL_FIND_REQUIRED)
+        message(FATAL_ERROR "CURL: Required feature ${component} is not found")
+      endif()
+    endif()
+  endforeach()
+endif()
+
+find_package_handle_standard_args(CURL
+                                  REQUIRED_VARS CURL_LIBRARY CURL_INCLUDE_DIR
+                                  VERSION_VAR CURL_VERSION_STRING
+                                  HANDLE_COMPONENTS)
+
+if(CURL_FOUND)
+  set(CURL_LIBRARIES ${CURL_LIBRARY})
+  set(CURL_INCLUDE_DIRS ${CURL_INCLUDE_DIR})
+
+  if(NOT TARGET CURL::libcurl)
+    add_library(CURL::libcurl UNKNOWN IMPORTED)
+    set_target_properties(CURL::libcurl PROPERTIES
+      INTERFACE_INCLUDE_DIRECTORIES "${CURL_INCLUDE_DIRS}")
+
+    if(EXISTS "${CURL_LIBRARY}")
+      set_target_properties(CURL::libcurl PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+        IMPORTED_LOCATION "${CURL_LIBRARY}")
+    endif()
+    if(CURL_LIBRARY_RELEASE)
+      set_property(TARGET CURL::libcurl APPEND PROPERTY
+        IMPORTED_CONFIGURATIONS RELEASE)
+      set_target_properties(CURL::libcurl PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+        IMPORTED_LOCATION_RELEASE "${CURL_LIBRARY_RELEASE}")
+    endif()
+    if(CURL_LIBRARY_DEBUG)
+      set_property(TARGET CURL::libcurl APPEND PROPERTY
+        IMPORTED_CONFIGURATIONS DEBUG)
+      set_target_properties(CURL::libcurl PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+        IMPORTED_LOCATION_DEBUG "${CURL_LIBRARY_DEBUG}")
+    endif()
+  endif()
+endif()
diff --git a/share/cmake-3.18/Modules/FindCVS.cmake b/share/cmake-3.22/Modules/FindCVS.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindCVS.cmake
rename to share/cmake-3.22/Modules/FindCVS.cmake
diff --git a/share/cmake-3.18/Modules/FindCoin3D.cmake b/share/cmake-3.22/Modules/FindCoin3D.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindCoin3D.cmake
rename to share/cmake-3.22/Modules/FindCoin3D.cmake
diff --git a/share/cmake-3.22/Modules/FindCups.cmake b/share/cmake-3.22/Modules/FindCups.cmake
new file mode 100644
index 0000000..cf0d341
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindCups.cmake
@@ -0,0 +1,100 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindCups
+--------
+
+Find the Common UNIX Printing System (CUPS).
+
+Set ``CUPS_REQUIRE_IPP_DELETE_ATTRIBUTE`` to ``TRUE`` if you need a version which
+features this function (i.e. at least ``1.1.19``)
+
+Imported targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.15
+
+This module defines :prop_tgt:`IMPORTED` target ``Cups::Cups``, if Cups has
+been found.
+
+Result variables
+^^^^^^^^^^^^^^^^
+
+This module will set the following variables in your project:
+
+``CUPS_FOUND``
+  true if CUPS headers and libraries were found
+``CUPS_INCLUDE_DIRS``
+  the directory containing the Cups headers
+``CUPS_LIBRARIES``
+  the libraries to link against to use CUPS.
+``CUPS_VERSION_STRING``
+  the version of CUPS found (since CMake 2.8.8)
+
+Cache variables
+^^^^^^^^^^^^^^^
+
+The following cache variables may also be set:
+
+``CUPS_INCLUDE_DIR``
+  the directory containing the Cups headers
+#]=======================================================================]
+
+find_path(CUPS_INCLUDE_DIR cups/cups.h )
+
+find_library(CUPS_LIBRARIES NAMES cups )
+
+if (CUPS_INCLUDE_DIR AND CUPS_LIBRARIES AND CUPS_REQUIRE_IPP_DELETE_ATTRIBUTE)
+    include(${CMAKE_CURRENT_LIST_DIR}/CheckLibraryExists.cmake)
+    include(${CMAKE_CURRENT_LIST_DIR}/CMakePushCheckState.cmake)
+    cmake_push_check_state()
+    set(CMAKE_REQUIRED_QUIET ${Cups_FIND_QUIETLY})
+
+    # ippDeleteAttribute is new in cups-1.1.19 (and used by kdeprint)
+    CHECK_LIBRARY_EXISTS(cups ippDeleteAttribute "" CUPS_HAS_IPP_DELETE_ATTRIBUTE)
+    cmake_pop_check_state()
+endif ()
+
+if (CUPS_INCLUDE_DIR AND EXISTS "${CUPS_INCLUDE_DIR}/cups/cups.h")
+    file(STRINGS "${CUPS_INCLUDE_DIR}/cups/cups.h" cups_version_str
+         REGEX "^#[\t ]*define[\t ]+CUPS_VERSION_(MAJOR|MINOR|PATCH)[\t ]+[0-9]+$")
+
+    unset(CUPS_VERSION_STRING)
+    foreach(VPART MAJOR MINOR PATCH)
+        foreach(VLINE ${cups_version_str})
+            if(VLINE MATCHES "^#[\t ]*define[\t ]+CUPS_VERSION_${VPART}[\t ]+([0-9]+)$")
+                set(CUPS_VERSION_PART "${CMAKE_MATCH_1}")
+                if(CUPS_VERSION_STRING)
+                    string(APPEND CUPS_VERSION_STRING ".${CUPS_VERSION_PART}")
+                else()
+                    set(CUPS_VERSION_STRING "${CUPS_VERSION_PART}")
+                endif()
+            endif()
+        endforeach()
+    endforeach()
+endif ()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+
+if (CUPS_REQUIRE_IPP_DELETE_ATTRIBUTE)
+    FIND_PACKAGE_HANDLE_STANDARD_ARGS(Cups
+                                      REQUIRED_VARS CUPS_LIBRARIES CUPS_INCLUDE_DIR CUPS_HAS_IPP_DELETE_ATTRIBUTE
+                                      VERSION_VAR CUPS_VERSION_STRING)
+else ()
+    FIND_PACKAGE_HANDLE_STANDARD_ARGS(Cups
+                                      REQUIRED_VARS CUPS_LIBRARIES CUPS_INCLUDE_DIR
+                                      VERSION_VAR CUPS_VERSION_STRING)
+endif ()
+
+mark_as_advanced(CUPS_INCLUDE_DIR CUPS_LIBRARIES)
+
+if (CUPS_FOUND)
+    set(CUPS_INCLUDE_DIRS "${CUPS_INCLUDE_DIR}")
+    if (NOT TARGET Cups::Cups)
+        add_library(Cups::Cups INTERFACE IMPORTED)
+        set_target_properties(Cups::Cups PROPERTIES
+            INTERFACE_LINK_LIBRARIES      "${CUPS_LIBRARIES}"
+            INTERFACE_INCLUDE_DIRECTORIES "${CUPS_INCLUDE_DIR}")
+    endif ()
+endif ()
diff --git a/share/cmake-3.22/Modules/FindCurses.cmake b/share/cmake-3.22/Modules/FindCurses.cmake
new file mode 100644
index 0000000..bfa1d6f
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindCurses.cmake
@@ -0,0 +1,276 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindCurses
+----------
+
+Find the curses or ncurses include file and library.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This module defines the following variables:
+
+``CURSES_FOUND``
+  True if Curses is found.
+``CURSES_INCLUDE_DIRS``
+  The include directories needed to use Curses.
+``CURSES_LIBRARIES``
+  The libraries needed to use Curses.
+``CURSES_CFLAGS``
+  .. versionadded:: 3.16
+
+  Parameters which ought be given to C/C++ compilers when using Curses.
+``CURSES_HAVE_CURSES_H``
+  True if curses.h is available.
+``CURSES_HAVE_NCURSES_H``
+  True if ncurses.h is available.
+``CURSES_HAVE_NCURSES_NCURSES_H``
+  True if ``ncurses/ncurses.h`` is available.
+``CURSES_HAVE_NCURSES_CURSES_H``
+  True if ``ncurses/curses.h`` is available.
+
+Set ``CURSES_NEED_NCURSES`` to ``TRUE`` before the
+``find_package(Curses)`` call if NCurses functionality is required.
+
+.. versionadded:: 3.10
+  Set ``CURSES_NEED_WIDE`` to ``TRUE`` before the
+  ``find_package(Curses)`` call if unicode functionality is required.
+
+Backward Compatibility
+^^^^^^^^^^^^^^^^^^^^^^
+
+The following variable are provided for backward compatibility:
+
+``CURSES_INCLUDE_DIR``
+  Path to Curses include.  Use ``CURSES_INCLUDE_DIRS`` instead.
+``CURSES_LIBRARY``
+  Path to Curses library.  Use ``CURSES_LIBRARIES`` instead.
+#]=======================================================================]
+
+include(${CMAKE_CURRENT_LIST_DIR}/CheckLibraryExists.cmake)
+
+# we don't know anything about cursesw, so only ncurses
+# may be ncursesw
+if(NOT CURSES_NEED_WIDE)
+  set(NCURSES_LIBRARY_NAME "ncurses")
+  set(CURSES_FORM_LIBRARY_NAME "form")
+else()
+  set(NCURSES_LIBRARY_NAME "ncursesw")
+  set(CURSES_FORM_LIBRARY_NAME "formw")
+  # Also, if we are searching for wide curses - we are actually searching
+  # for ncurses, we don't know about any other unicode version.
+  set(CURSES_NEED_NCURSES TRUE)
+endif()
+
+find_library(CURSES_CURSES_LIBRARY NAMES curses)
+
+find_library(CURSES_NCURSES_LIBRARY NAMES "${NCURSES_LIBRARY_NAME}" )
+set(CURSES_USE_NCURSES FALSE)
+
+if(CURSES_NCURSES_LIBRARY  AND ((NOT CURSES_CURSES_LIBRARY) OR CURSES_NEED_NCURSES))
+  set(CURSES_USE_NCURSES TRUE)
+endif()
+# http://cygwin.com/ml/cygwin-announce/2010-01/msg00002.html
+# cygwin ncurses stopped providing curses.h symlinks see above
+# message.  Cygwin is an ncurses package, so force ncurses on
+# cygwin if the curses.h is missing
+if(CURSES_NCURSES_LIBRARY AND CYGWIN)
+  if (CURSES_NEED_WIDE)
+    if(NOT EXISTS /usr/include/ncursesw/curses.h)
+      set(CURSES_USE_NCURSES TRUE)
+    endif()
+  else()
+    if(NOT EXISTS /usr/include/curses.h)
+      set(CURSES_USE_NCURSES TRUE)
+    endif()
+  endif()
+endif()
+
+
+# Not sure the logic is correct here.
+# If NCurses is required, use the function wsyncup() to check if the library
+# has NCurses functionality (at least this is where it breaks on NetBSD).
+# If wsyncup is in curses, use this one.
+# If not, try to find ncurses and check if this has the symbol.
+# Once the ncurses library is found, search the ncurses.h header first, but
+# some web pages also say that even with ncurses there is not always a ncurses.h:
+# http://osdir.com/ml/gnome.apps.mc.devel/2002-06/msg00029.html
+# So at first try ncurses.h, if not found, try to find curses.h under the same
+# prefix as the library was found, if still not found, try curses.h with the
+# default search paths.
+if(CURSES_CURSES_LIBRARY  AND  CURSES_NEED_NCURSES)
+  include(${CMAKE_CURRENT_LIST_DIR}/CMakePushCheckState.cmake)
+  cmake_push_check_state()
+  set(CMAKE_REQUIRED_QUIET ${Curses_FIND_QUIETLY})
+  CHECK_LIBRARY_EXISTS("${CURSES_CURSES_LIBRARY}"
+    wsyncup "" CURSES_CURSES_HAS_WSYNCUP)
+
+  if(CURSES_NCURSES_LIBRARY  AND NOT  CURSES_CURSES_HAS_WSYNCUP)
+    CHECK_LIBRARY_EXISTS("${CURSES_NCURSES_LIBRARY}"
+      wsyncup "" CURSES_NCURSES_HAS_WSYNCUP)
+    if( CURSES_NCURSES_HAS_WSYNCUP)
+      set(CURSES_USE_NCURSES TRUE)
+    endif()
+  endif()
+  cmake_pop_check_state()
+
+endif()
+
+if(CURSES_USE_NCURSES)
+  get_filename_component(_cursesLibDir "${CURSES_NCURSES_LIBRARY}" PATH)
+  get_filename_component(_cursesParentDir "${_cursesLibDir}" PATH)
+
+  # Use CURSES_NCURSES_INCLUDE_PATH if set, for compatibility.
+  if(CURSES_NCURSES_INCLUDE_PATH)
+    if (CURSES_NEED_WIDE)
+      find_path(CURSES_INCLUDE_PATH
+        NAMES ncursesw/ncurses.h ncursesw/curses.h ncursesw.h cursesw.h
+        PATHS ${CURSES_NCURSES_INCLUDE_PATH}
+        NO_DEFAULT_PATH
+        )
+    else()
+      find_path(CURSES_INCLUDE_PATH
+        NAMES ncurses/ncurses.h ncurses/curses.h ncurses.h curses.h
+        PATHS ${CURSES_NCURSES_INCLUDE_PATH}
+        NO_DEFAULT_PATH
+        )
+    endif()
+  endif()
+
+  if (CURSES_NEED_WIDE)
+    set(CURSES_TINFO_LIBRARY_NAME tinfow)
+    find_path(CURSES_INCLUDE_PATH
+      NAMES ncursesw/ncurses.h ncursesw/curses.h ncursesw.h cursesw.h
+      HINTS "${_cursesParentDir}/include"
+      )
+  else()
+    set(CURSES_TINFO_LIBRARY_NAME tinfo)
+    find_path(CURSES_INCLUDE_PATH
+      NAMES ncurses/ncurses.h ncurses/curses.h ncurses.h curses.h
+      HINTS "${_cursesParentDir}/include"
+      )
+  endif()
+
+  # Previous versions of FindCurses provided these values.
+  if(NOT DEFINED CURSES_LIBRARY)
+    set(CURSES_LIBRARY "${CURSES_NCURSES_LIBRARY}")
+  endif()
+
+  CHECK_LIBRARY_EXISTS("${CURSES_NCURSES_LIBRARY}"
+    cbreak "" CURSES_NCURSES_HAS_CBREAK)
+  CHECK_LIBRARY_EXISTS("${CURSES_NCURSES_LIBRARY}"
+    nodelay "" CURSES_NCURSES_HAS_NODELAY)
+  if(NOT CURSES_NCURSES_HAS_CBREAK OR NOT CURSES_NCURSES_HAS_NODELAY)
+    find_library(CURSES_EXTRA_LIBRARY "${CURSES_TINFO_LIBRARY_NAME}" HINTS "${_cursesLibDir}")
+    find_library(CURSES_EXTRA_LIBRARY "${CURSES_TINFO_LIBRARY_NAME}" )
+
+    mark_as_advanced(
+      CURSES_EXTRA_LIBRARY
+      )
+  endif()
+else()
+  get_filename_component(_cursesLibDir "${CURSES_CURSES_LIBRARY}" PATH)
+  get_filename_component(_cursesParentDir "${_cursesLibDir}" PATH)
+
+  #We can't find anything with CURSES_NEED_WIDE because we know
+  #only about ncursesw unicode curses version
+  if(NOT CURSES_NEED_WIDE)
+    find_path(CURSES_INCLUDE_PATH
+      NAMES curses.h
+      HINTS "${_cursesParentDir}/include"
+      )
+  endif()
+
+  # Previous versions of FindCurses provided these values.
+  if(NOT DEFINED CURSES_CURSES_H_PATH)
+    set(CURSES_CURSES_H_PATH "${CURSES_INCLUDE_PATH}")
+  endif()
+  if(NOT DEFINED CURSES_LIBRARY)
+    set(CURSES_LIBRARY "${CURSES_CURSES_LIBRARY}")
+  endif()
+endif()
+
+# Report whether each possible header name exists in the include directory.
+if(NOT DEFINED CURSES_HAVE_NCURSES_NCURSES_H)
+  if(CURSES_NEED_WIDE)
+    if(EXISTS "${CURSES_INCLUDE_PATH}/ncursesw/ncurses.h")
+      set(CURSES_HAVE_NCURSES_NCURSES_H "${CURSES_INCLUDE_PATH}/ncursesw/ncurses.h")
+    endif()
+  elseif(EXISTS "${CURSES_INCLUDE_PATH}/ncurses/ncurses.h")
+    set(CURSES_HAVE_NCURSES_NCURSES_H "${CURSES_INCLUDE_PATH}/ncurses/ncurses.h")
+  endif()
+  if(NOT DEFINED CURSES_HAVE_NCURSES_NCURSES_H)
+    set(CURSES_HAVE_NCURSES_NCURSES_H "CURSES_HAVE_NCURSES_NCURSES_H-NOTFOUND")
+  endif()
+endif()
+if(NOT DEFINED CURSES_HAVE_NCURSES_CURSES_H)
+  if(CURSES_NEED_WIDE)
+    if(EXISTS "${CURSES_INCLUDE_PATH}/ncursesw/curses.h")
+      set(CURSES_HAVE_NCURSES_CURSES_H "${CURSES_INCLUDE_PATH}/ncursesw/curses.h")
+    endif()
+  elseif(EXISTS "${CURSES_INCLUDE_PATH}/ncurses/curses.h")
+    set(CURSES_HAVE_NCURSES_CURSES_H "${CURSES_INCLUDE_PATH}/ncurses/curses.h")
+  endif()
+  if(NOT DEFINED CURSES_HAVE_NCURSES_CURSES_H)
+    set(CURSES_HAVE_NCURSES_CURSES_H "CURSES_HAVE_NCURSES_CURSES_H-NOTFOUND")
+  endif()
+endif()
+if(NOT CURSES_NEED_WIDE)
+  #ncursesw can't be found for this paths
+  if(NOT DEFINED CURSES_HAVE_NCURSES_H)
+    if(EXISTS "${CURSES_INCLUDE_PATH}/ncurses.h")
+      set(CURSES_HAVE_NCURSES_H "${CURSES_INCLUDE_PATH}/ncurses.h")
+    else()
+      set(CURSES_HAVE_NCURSES_H "CURSES_HAVE_NCURSES_H-NOTFOUND")
+    endif()
+  endif()
+  if(NOT DEFINED CURSES_HAVE_CURSES_H)
+    if(EXISTS "${CURSES_INCLUDE_PATH}/curses.h")
+      set(CURSES_HAVE_CURSES_H "${CURSES_INCLUDE_PATH}/curses.h")
+    else()
+      set(CURSES_HAVE_CURSES_H "CURSES_HAVE_CURSES_H-NOTFOUND")
+    endif()
+  endif()
+endif()
+
+find_library(CURSES_FORM_LIBRARY "${CURSES_FORM_LIBRARY_NAME}" HINTS "${_cursesLibDir}")
+find_library(CURSES_FORM_LIBRARY "${CURSES_FORM_LIBRARY_NAME}" )
+
+# Previous versions of FindCurses provided these values.
+if(NOT DEFINED FORM_LIBRARY)
+  set(FORM_LIBRARY "${CURSES_FORM_LIBRARY}")
+endif()
+
+# Need to provide the *_LIBRARIES
+set(CURSES_LIBRARIES ${CURSES_LIBRARY})
+
+if(CURSES_EXTRA_LIBRARY)
+  set(CURSES_LIBRARIES ${CURSES_LIBRARIES} ${CURSES_EXTRA_LIBRARY})
+endif()
+
+if(CURSES_FORM_LIBRARY)
+  set(CURSES_LIBRARIES ${CURSES_LIBRARIES} ${CURSES_FORM_LIBRARY})
+endif()
+
+# Provide the *_INCLUDE_DIRS and *_CFLAGS results.
+set(CURSES_INCLUDE_DIRS ${CURSES_INCLUDE_PATH})
+set(CURSES_INCLUDE_DIR ${CURSES_INCLUDE_PATH}) # compatibility
+
+find_package(PkgConfig QUIET)
+if(PKG_CONFIG_FOUND)
+  pkg_check_modules(NCURSES QUIET ${NCURSES_LIBRARY_NAME})
+  set(CURSES_CFLAGS ${NCURSES_CFLAGS_OTHER})
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(Curses DEFAULT_MSG
+  CURSES_LIBRARY CURSES_INCLUDE_PATH)
+
+mark_as_advanced(
+  CURSES_INCLUDE_PATH
+  CURSES_CURSES_LIBRARY
+  CURSES_NCURSES_LIBRARY
+  CURSES_FORM_LIBRARY
+  )
diff --git a/share/cmake-3.18/Modules/FindCxxTest.cmake b/share/cmake-3.22/Modules/FindCxxTest.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindCxxTest.cmake
rename to share/cmake-3.22/Modules/FindCxxTest.cmake
diff --git a/share/cmake-3.18/Modules/FindCygwin.cmake b/share/cmake-3.22/Modules/FindCygwin.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindCygwin.cmake
rename to share/cmake-3.22/Modules/FindCygwin.cmake
diff --git a/share/cmake-3.18/Modules/FindDCMTK.cmake b/share/cmake-3.22/Modules/FindDCMTK.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindDCMTK.cmake
rename to share/cmake-3.22/Modules/FindDCMTK.cmake
diff --git a/share/cmake-3.18/Modules/FindDart.cmake b/share/cmake-3.22/Modules/FindDart.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindDart.cmake
rename to share/cmake-3.22/Modules/FindDart.cmake
diff --git a/share/cmake-3.22/Modules/FindDevIL.cmake b/share/cmake-3.22/Modules/FindDevIL.cmake
new file mode 100644
index 0000000..c8e5e31
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindDevIL.cmake
@@ -0,0 +1,139 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindDevIL
+---------
+
+
+
+This module locates the developer's image library.
+http://openil.sourceforge.net/
+
+IMPORTED Targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.21
+
+This module defines the :prop_tgt:`IMPORTED` targets:
+
+``DevIL::IL``
+ Defined if the system has DevIL.
+
+``DevIL::ILU``
+ Defined if the system has DevIL Utilities.
+
+``DevIL::ILUT``
+ Defined if the system has DevIL Utility Toolkit.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This module sets:
+
+``IL_LIBRARIES``
+  The name of the IL library. These include the full path to
+  the core DevIL library. This one has to be linked into the
+  application.
+
+``ILU_LIBRARIES``
+  The name of the ILU library. Again, the full path. This
+  library is for filters and effects, not actual loading. It
+  doesn't have to be linked if the functionality it provides
+  is not used.
+
+``ILUT_LIBRARIES``
+  The name of the ILUT library. Full path. This part of the
+  library interfaces with OpenGL. It is not strictly needed
+  in applications.
+
+``IL_INCLUDE_DIR``
+  where to find the il.h, ilu.h and ilut.h files.
+
+``DevIL_FOUND``
+  This is set to TRUE if all the above variables were set.
+  This will be set to false if ILU or ILUT are not found,
+  even if they are not needed. In most systems, if one
+  library is found all the others are as well. That's the
+  way the DevIL developers release it.
+
+``DevIL_ILUT_FOUND``
+  .. versionadded:: 3.21
+
+  This is set to TRUE if the ILUT library is found.
+#]=======================================================================]
+
+# TODO: Add version support.
+# Tested under Linux and Windows (MSVC)
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+
+find_path(IL_INCLUDE_DIR il.h
+  PATH_SUFFIXES include IL
+  DOC "The path to the directory that contains il.h"
+)
+
+#message("IL_INCLUDE_DIR is ${IL_INCLUDE_DIR}")
+
+find_library(IL_LIBRARIES
+  NAMES IL DEVIL
+  PATH_SUFFIXES libx32 lib64 lib lib32
+  DOC "The file that corresponds to the base il library."
+)
+
+#message("IL_LIBRARIES is ${IL_LIBRARIES}")
+
+find_library(ILUT_LIBRARIES
+  NAMES ILUT
+  PATH_SUFFIXES libx32 lib64 lib lib32
+  DOC "The file that corresponds to the il (system?) utility library."
+)
+
+#message("ILUT_LIBRARIES is ${ILUT_LIBRARIES}")
+
+find_library(ILU_LIBRARIES
+  NAMES ILU
+  PATH_SUFFIXES libx32 lib64 lib lib32
+  DOC "The file that corresponds to the il utility library."
+)
+
+#message("ILU_LIBRARIES is ${ILU_LIBRARIES}")
+
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(DevIL DEFAULT_MSG
+                                  IL_LIBRARIES ILU_LIBRARIES
+                                  IL_INCLUDE_DIR)
+# provide legacy variable for compatibility
+set(IL_FOUND ${DevIL_FOUND})
+
+# create imported targets ONLY if we found DevIL.
+if(DevIL_FOUND)
+  # Report the ILUT found if ILUT_LIBRARIES contains valid path.
+  if (ILUT_LIBRARIES)
+    set(DevIL_ILUT_FOUND TRUE)
+  else()
+    set(DevIL_ILUT_FOUND FALSE)
+  endif()
+
+  if(NOT TARGET DevIL::IL)
+    add_library(DevIL::IL UNKNOWN IMPORTED)
+    set_target_properties(DevIL::IL PROPERTIES
+      INTERFACE_INCLUDE_DIRECTORIES "${IL_INCLUDE_DIR}"
+      IMPORTED_LOCATION "${IL_LIBRARIES}")
+  endif()
+
+  # DevIL Utilities target
+  if(NOT TARGET DevIL::ILU)
+    add_library(DevIL::ILU UNKNOWN IMPORTED)
+    set_target_properties(DevIL::ILU PROPERTIES
+      IMPORTED_LOCATION "${ILU_LIBRARIES}")
+    target_link_libraries(DevIL::ILU INTERFACE DevIL::IL)
+  endif()
+
+  # ILUT (if found)
+  if(NOT TARGET DevIL::ILUT AND DevIL_ILUT_FOUND)
+    add_library(DevIL::ILUT UNKNOWN IMPORTED)
+    set_target_properties(DevIL::ILUT PROPERTIES
+      IMPORTED_LOCATION "${ILUT_LIBRARIES}")
+    target_link_libraries(DevIL::ILUT INTERFACE DevIL::ILU)
+  endif()
+endif()
diff --git a/share/cmake-3.22/Modules/FindDoxygen.cmake b/share/cmake-3.22/Modules/FindDoxygen.cmake
new file mode 100644
index 0000000..4a16e31
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindDoxygen.cmake
@@ -0,0 +1,1177 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindDoxygen
+-----------
+
+Doxygen is a documentation generation tool (see http://www.doxygen.org).
+This module looks for Doxygen and some optional tools it supports:
+
+``dot``
+  `Graphviz <http://graphviz.org>`_ ``dot`` utility used to render various
+  graphs.
+``mscgen``
+  `Message Chart Generator <http://www.mcternan.me.uk/mscgen/>`_ utility used
+  by Doxygen's ``\msc`` and ``\mscfile`` commands.
+``dia``
+  `Dia <https://wiki.gnome.org/Apps/Dia>`_ the diagram editor used by Doxygen's
+  ``\diafile`` command.
+
+.. versionadded:: 3.9
+  These tools are available as components in the :command:`find_package` command.
+  For example:
+
+.. code-block:: cmake
+
+  # Require dot, treat the other components as optional
+  find_package(Doxygen
+               REQUIRED dot
+               OPTIONAL_COMPONENTS mscgen dia)
+
+The following variables are defined by this module:
+
+.. variable:: DOXYGEN_FOUND
+
+  True if the ``doxygen`` executable was found.
+
+.. variable:: DOXYGEN_VERSION
+
+  The version reported by ``doxygen --version``.
+
+.. versionadded:: 3.9
+  The module defines ``IMPORTED`` targets for Doxygen and each component found.
+  These can be used as part of custom commands, etc. and should be preferred over
+  old-style (and now deprecated) variables like ``DOXYGEN_EXECUTABLE``. The
+  following import targets are defined if their corresponding executable could be
+  found (the component import targets will only be defined if that component was
+  requested):
+
+::
+
+  Doxygen::doxygen
+  Doxygen::dot
+  Doxygen::mscgen
+  Doxygen::dia
+
+
+Functions
+^^^^^^^^^
+
+.. command:: doxygen_add_docs
+
+  .. versionadded:: 3.9
+
+  This function is intended as a convenience for adding a target for generating
+  documentation with Doxygen. It aims to provide sensible defaults so that
+  projects can generally just provide the input files and directories and that
+  will be sufficient to give sensible results. The function supports the
+  ability to customize the Doxygen configuration used to build the
+  documentation.
+
+  ::
+
+    doxygen_add_docs(targetName
+        [filesOrDirs...]
+        [ALL]
+        [USE_STAMP_FILE]
+        [WORKING_DIRECTORY dir]
+        [COMMENT comment])
+
+  The function constructs a ``Doxyfile`` and defines a custom target that runs
+  Doxygen on that generated file. The listed files and directories are used as
+  the ``INPUT`` of the generated ``Doxyfile`` and they can contain wildcards.
+  Any files that are listed explicitly will also be added as ``SOURCES`` of the
+  custom target so they will show up in an IDE project's source list.
+
+  So that relative input paths work as expected, by default the working
+  directory of the Doxygen command will be the current source directory (i.e.
+  :variable:`CMAKE_CURRENT_SOURCE_DIR`). This can be overridden with the
+  ``WORKING_DIRECTORY`` option to change the directory used as the relative
+  base point. Note also that Doxygen's default behavior is to strip the working
+  directory from relative paths in the generated documentation (see the
+  ``STRIP_FROM_PATH`` `Doxygen config option
+  <http://www.doxygen.org/manual/config.html>`_ for details).
+
+  If provided, the optional ``comment`` will be passed as the ``COMMENT`` for
+  the :command:`add_custom_target` command used to create the custom target
+  internally.
+
+  .. versionadded:: 3.12
+    If ``ALL`` is set, the target will be added to the default build target.
+
+  .. versionadded:: 3.16
+    If ``USE_STAMP_FILE`` is set, the custom command defined by this function will
+    create a stamp file with the name ``<targetName>.stamp`` in the current
+    binary directory whenever doxygen is re-run.  With this option present, all
+    items in ``<filesOrDirs>`` must be files (i.e. no directories, symlinks or
+    wildcards) and each of the files must exist at the time
+    ``doxygen_add_docs()`` is called.  An error will be raised if any of the
+    items listed is missing or is not a file when ``USE_STAMP_FILE`` is given.
+    A dependency will be created on each of the files so that doxygen will only
+    be re-run if one of the files is updated.  Without the ``USE_STAMP_FILE``
+    option, doxygen will always be re-run if the ``<targetName>`` target is built
+    regardless of whether anything listed in ``<filesOrDirs>`` has changed.
+
+  The contents of the generated ``Doxyfile`` can be customized by setting CMake
+  variables before calling ``doxygen_add_docs()``. Any variable with a name of
+  the form ``DOXYGEN_<tag>`` will have its value substituted for the
+  corresponding ``<tag>`` configuration option in the ``Doxyfile``. See the
+  `Doxygen documentation <http://www.doxygen.org/manual/config.html>`_ for the
+  full list of supported configuration options.
+
+  Some of Doxygen's defaults are overridden to provide more appropriate
+  behavior for a CMake project. Each of the following will be explicitly set
+  unless the variable already has a value before ``doxygen_add_docs()`` is
+  called (with some exceptions noted):
+
+  .. variable:: DOXYGEN_HAVE_DOT
+
+    Set to ``YES`` if the ``dot`` component was requested and it was found,
+    ``NO`` otherwise. Any existing value of ``DOXYGEN_HAVE_DOT`` is ignored.
+
+  .. variable:: DOXYGEN_DOT_MULTI_TARGETS
+
+    Set to ``YES`` by this module (note that this requires a ``dot`` version
+    newer than 1.8.10). This option is only meaningful if ``DOXYGEN_HAVE_DOT``
+    is also set to ``YES``.
+
+  .. variable:: DOXYGEN_GENERATE_LATEX
+
+    Set to ``NO`` by this module.
+
+  .. variable:: DOXYGEN_WARN_FORMAT
+
+    For Visual Studio based generators, this is set to the form recognized by
+    the Visual Studio IDE: ``$file($line) : $text``. For all other generators,
+    Doxygen's default value is not overridden.
+
+  .. variable:: DOXYGEN_PROJECT_NAME
+
+    Populated with the name of the current project (i.e.
+    :variable:`PROJECT_NAME`).
+
+  .. variable:: DOXYGEN_PROJECT_NUMBER
+
+    Populated with the version of the current project (i.e.
+    :variable:`PROJECT_VERSION`).
+
+  .. variable:: DOXYGEN_PROJECT_BRIEF
+
+    Populated with the description of the current project (i.e.
+    :variable:`PROJECT_DESCRIPTION`).
+
+  .. variable:: DOXYGEN_INPUT
+
+    Projects should not set this variable. It will be populated with the set of
+    files and directories passed to ``doxygen_add_docs()``, thereby providing
+    consistent behavior with the other built-in commands like
+    :command:`add_executable`, :command:`add_library` and
+    :command:`add_custom_target`. If a variable named ``DOXYGEN_INPUT`` is set
+    by the project, it will be ignored and a warning will be issued.
+
+  .. variable:: DOXYGEN_RECURSIVE
+
+    Set to ``YES`` by this module.
+
+  .. variable:: DOXYGEN_EXCLUDE_PATTERNS
+
+    If the set of inputs includes directories, this variable will specify
+    patterns used to exclude files from them. The following patterns are added
+    by ``doxygen_add_docs()`` to ensure CMake-specific files and directories
+    are not included in the input. If the project sets
+    ``DOXYGEN_EXCLUDE_PATTERNS``, those contents are merged with these
+    additional patterns rather than replacing them:
+
+    ::
+
+      */.git/*
+      */.svn/*
+      */.hg/*
+      */CMakeFiles/*
+      */_CPack_Packages/*
+      DartConfiguration.tcl
+      CMakeLists.txt
+      CMakeCache.txt
+
+  .. variable:: DOXYGEN_OUTPUT_DIRECTORY
+
+    Set to :variable:`CMAKE_CURRENT_BINARY_DIR` by this module. Note that if
+    the project provides its own value for this and it is a relative path, it
+    will be converted to an absolute path relative to the current binary
+    directory. This is necessary because doxygen will normally be run from a
+    directory within the source tree so that relative source paths work as
+    expected. If this directory does not exist, it will be recursively created
+    prior to executing the doxygen commands.
+
+To change any of these defaults or override any other Doxygen config option,
+set relevant variables before calling ``doxygen_add_docs()``. For example:
+
+  .. code-block:: cmake
+
+    set(DOXYGEN_GENERATE_HTML NO)
+    set(DOXYGEN_GENERATE_MAN YES)
+
+    doxygen_add_docs(
+        doxygen
+        ${PROJECT_SOURCE_DIR}
+        COMMENT "Generate man pages"
+    )
+
+A number of Doxygen config options accept lists of values, but Doxygen requires
+them to be separated by whitespace. CMake variables hold lists as a string with
+items separated by semi-colons, so a conversion needs to be performed. The
+``doxygen_add_docs()`` command specifically checks the following Doxygen config
+options and will convert their associated CMake variable's contents into the
+required form if set. CMake variables are named ``DOXYGEN_<name>`` for the
+Doxygen settings specified here.
+
+::
+
+  ABBREVIATE_BRIEF
+  ALIASES
+  CITE_BIB_FILES
+  DIAFILE_DIRS
+  DOTFILE_DIRS
+  DOT_FONTPATH
+  ENABLED_SECTIONS
+  EXAMPLE_PATH
+  EXAMPLE_PATTERNS
+  EXCLUDE
+  EXCLUDE_PATTERNS
+  EXCLUDE_SYMBOLS
+  EXPAND_AS_DEFINED
+  EXTENSION_MAPPING
+  EXTRA_PACKAGES
+  EXTRA_SEARCH_MAPPINGS
+  FILE_PATTERNS
+  FILTER_PATTERNS
+  FILTER_SOURCE_PATTERNS
+  HTML_EXTRA_FILES
+  HTML_EXTRA_STYLESHEET
+  IGNORE_PREFIX
+  IMAGE_PATH
+  INCLUDE_FILE_PATTERNS
+  INCLUDE_PATH
+  INPUT
+  LATEX_EXTRA_FILES
+  LATEX_EXTRA_STYLESHEET
+  MATHJAX_EXTENSIONS
+  MSCFILE_DIRS
+  PLANTUML_INCLUDE_PATH
+  PREDEFINED
+  QHP_CUST_FILTER_ATTRS
+  QHP_SECT_FILTER_ATTRS
+  STRIP_FROM_INC_PATH
+  STRIP_FROM_PATH
+  TAGFILES
+  TCL_SUBST
+
+The following single value Doxygen options will be quoted automatically
+if they contain at least one space:
+
+::
+
+  CHM_FILE
+  DIA_PATH
+  DOCBOOK_OUTPUT
+  DOCSET_FEEDNAME
+  DOCSET_PUBLISHER_NAME
+  DOT_FONTNAME
+  DOT_PATH
+  EXTERNAL_SEARCH_ID
+  FILE_VERSION_FILTER
+  GENERATE_TAGFILE
+  HHC_LOCATION
+  HTML_FOOTER
+  HTML_HEADER
+  HTML_OUTPUT
+  HTML_STYLESHEET
+  INPUT_FILTER
+  LATEX_FOOTER
+  LATEX_HEADER
+  LATEX_OUTPUT
+  LAYOUT_FILE
+  MAN_OUTPUT
+  MAN_SUBDIR
+  MATHJAX_CODEFILE
+  MSCGEN_PATH
+  OUTPUT_DIRECTORY
+  PERL_PATH
+  PLANTUML_JAR_PATH
+  PROJECT_BRIEF
+  PROJECT_LOGO
+  PROJECT_NAME
+  QCH_FILE
+  QHG_LOCATION
+  QHP_CUST_FILTER_NAME
+  QHP_VIRTUAL_FOLDER
+  RTF_EXTENSIONS_FILE
+  RTF_OUTPUT
+  RTF_STYLESHEET_FILE
+  SEARCHDATA_FILE
+  USE_MDFILE_AS_MAINPAGE
+  WARN_FORMAT
+  WARN_LOGFILE
+  XML_OUTPUT
+
+.. versionadded:: 3.11
+  There are situations where it may be undesirable for a particular config option
+  to be automatically quoted by ``doxygen_add_docs()``, such as ``ALIASES`` which
+  may need to include its own embedded quoting.  The ``DOXYGEN_VERBATIM_VARS``
+  variable can be used to specify a list of Doxygen variables (including the
+  leading ``DOXYGEN_`` prefix) which should not be quoted.  The project is then
+  responsible for ensuring that those variables' values make sense when placed
+  directly in the Doxygen input file.  In the case of list variables, list items
+  are still separated by spaces, it is only the automatic quoting that is
+  skipped.  For example, the following allows ``doxygen_add_docs()`` to apply
+  quoting to ``DOXYGEN_PROJECT_BRIEF``, but not each item in the
+  ``DOXYGEN_ALIASES`` list (:ref:`bracket syntax <Bracket Argument>` can also
+  be used to make working with embedded quotes easier):
+
+.. code-block:: cmake
+
+  set(DOXYGEN_PROJECT_BRIEF "String with spaces")
+  set(DOXYGEN_ALIASES
+      [[somealias="@some_command param"]]
+      "anotherAlias=@foobar"
+  )
+  set(DOXYGEN_VERBATIM_VARS DOXYGEN_ALIASES)
+
+The resultant ``Doxyfile`` will contain the following lines:
+
+.. code-block:: text
+
+  PROJECT_BRIEF = "String with spaces"
+  ALIASES       = somealias="@some_command param" anotherAlias=@foobar
+
+
+Deprecated Result Variables
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. deprecated:: 3.9
+
+For compatibility with previous versions of CMake, the following variables
+are also defined but they are deprecated and should no longer be used:
+
+.. variable:: DOXYGEN_EXECUTABLE
+
+  The path to the ``doxygen`` command. If projects need to refer to the
+  ``doxygen`` executable directly, they should use the ``Doxygen::doxygen``
+  import target instead.
+
+.. variable:: DOXYGEN_DOT_FOUND
+
+  True if the ``dot`` executable was found.
+
+.. variable:: DOXYGEN_DOT_EXECUTABLE
+
+  The path to the ``dot`` command. If projects need to refer to the ``dot``
+  executable directly, they should use the ``Doxygen::dot`` import target
+  instead.
+
+.. variable:: DOXYGEN_DOT_PATH
+
+  The path to the directory containing the ``dot`` executable as reported in
+  ``DOXYGEN_DOT_EXECUTABLE``. The path may have forward slashes even on Windows
+  and is not suitable for direct substitution into a ``Doxyfile.in`` template.
+  If you need this value, get the :prop_tgt:`IMPORTED_LOCATION` property of the
+  ``Doxygen::dot`` target and use :command:`get_filename_component` to extract
+  the directory part of that path. You may also want to consider using
+  :command:`file(TO_NATIVE_PATH)` to prepare the path for a Doxygen
+  configuration file.
+
+
+Deprecated Hint Variables
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. deprecated:: 3.9
+
+.. variable:: DOXYGEN_SKIP_DOT
+
+  This variable has no effect for the component form of ``find_package``.
+  In backward compatibility mode (i.e. without components list) it prevents
+  the finder module from searching for Graphviz's ``dot`` utility.
+
+#]=======================================================================]
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0054 NEW) # quoted if arguments
+cmake_policy(SET CMP0057 NEW) # if IN_LIST
+
+# For backwards compatibility support
+if(Doxygen_FIND_QUIETLY)
+    set(DOXYGEN_FIND_QUIETLY TRUE)
+endif()
+
+# ===== Rationale for OS X AppBundle mods below =====
+#  With the OS X GUI version, Doxygen likes to be installed to /Applications
+#  and it contains the doxygen executable in the bundle. In the versions I've
+#  seen, it is located in Resources, but in general, more often binaries are
+#  located in MacOS.
+#
+#  NOTE: The official Doxygen.app distributed for OS X uses non-standard
+#  conventions. Instead of the command-line "doxygen" tool being placed in
+#  Doxygen.app/Contents/MacOS, "Doxywizard" is placed there instead and
+#  "doxygen" is placed in Contents/Resources.  This is most likely done
+#  so that something happens when people double-click on the Doxygen.app
+#  package. Unfortunately, CMake gets confused by this as when it sees the
+#  bundle it uses "Doxywizard" as the executable to use instead of
+#  "doxygen". Therefore to work-around this issue we temporarily disable
+#  the app-bundle feature, just for this CMake module:
+#
+if(APPLE)
+    # Save the old setting
+    set(TEMP_DOXYGEN_SAVE_CMAKE_FIND_APPBUNDLE ${CMAKE_FIND_APPBUNDLE})
+    # Disable the App-bundle detection feature
+    set(CMAKE_FIND_APPBUNDLE "NEVER")
+endif()
+# FYI:
+# In older versions of OS X Doxygen, dot was included with the Doxygen bundle,
+# but newer versions require you to download Graphviz.app which contains "dot"
+# or use something like homebrew.
+# ============== End OSX stuff ================
+
+#
+# Find Doxygen...
+#
+macro(_Doxygen_find_doxygen)
+    find_program(
+        DOXYGEN_EXECUTABLE
+        NAMES doxygen
+        PATHS
+            "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\doxygen_is1;Inno Setup: App Path]/bin"
+            /Applications/Doxygen.app/Contents/Resources
+            /Applications/Doxygen.app/Contents/MacOS
+            /Applications/Utilities/Doxygen.app/Contents/Resources
+            /Applications/Utilities/Doxygen.app/Contents/MacOS
+        DOC "Doxygen documentation generation tool (http://www.doxygen.org)"
+    )
+    mark_as_advanced(DOXYGEN_EXECUTABLE)
+
+    if(DOXYGEN_EXECUTABLE)
+        execute_process(
+            COMMAND "${DOXYGEN_EXECUTABLE}" --version
+            OUTPUT_VARIABLE DOXYGEN_VERSION
+            OUTPUT_STRIP_TRAILING_WHITESPACE
+            RESULT_VARIABLE _Doxygen_version_result
+        )
+        if(_Doxygen_version_result)
+            message(WARNING "Unable to determine doxygen version: ${_Doxygen_version_result}")
+        endif()
+
+        # Create an imported target for Doxygen
+        if(NOT TARGET Doxygen::doxygen)
+            add_executable(Doxygen::doxygen IMPORTED GLOBAL)
+            set_target_properties(Doxygen::doxygen PROPERTIES
+                IMPORTED_LOCATION "${DOXYGEN_EXECUTABLE}"
+            )
+        endif()
+    endif()
+endmacro()
+
+#
+# Find Diagram Editor...
+#
+macro(_Doxygen_find_dia)
+    set(_x86 "(x86)")
+    find_program(
+        DOXYGEN_DIA_EXECUTABLE
+        NAMES dia
+        PATHS
+            "$ENV{ProgramFiles}/Dia"
+            "$ENV{ProgramFiles${_x86}}/Dia"
+        DOC "Diagram Editor tool for use with Doxygen"
+    )
+    mark_as_advanced(DOXYGEN_DIA_EXECUTABLE)
+
+    if(DOXYGEN_DIA_EXECUTABLE)
+        # The Doxyfile wants the path to the utility, not the entire path
+        # including file name
+        get_filename_component(DOXYGEN_DIA_PATH
+                              "${DOXYGEN_DIA_EXECUTABLE}"
+                              DIRECTORY)
+        if(WIN32)
+            file(TO_NATIVE_PATH "${DOXYGEN_DIA_PATH}" DOXYGEN_DIA_PATH)
+        endif()
+
+        # Create an imported target for component
+        if(NOT TARGET Doxygen::dia)
+            add_executable(Doxygen::dia IMPORTED GLOBAL)
+            set_target_properties(Doxygen::dia PROPERTIES
+                IMPORTED_LOCATION "${DOXYGEN_DIA_EXECUTABLE}"
+            )
+        endif()
+    endif()
+
+    unset(_x86)
+endmacro()
+
+#
+# Find Graphviz Dot...
+#
+macro(_Doxygen_find_dot)
+    if(WIN32)
+        set(_x86 "(x86)")
+        file(
+            GLOB _Doxygen_GRAPHVIZ_BIN_DIRS
+            "$ENV{ProgramFiles}/Graphviz*/bin"
+            "$ENV{ProgramFiles${_x86}}/Graphviz*/bin"
+        )
+        unset(_x86)
+    else()
+        set(_Doxygen_GRAPHVIZ_BIN_DIRS "")
+    endif()
+
+    find_program(
+        DOXYGEN_DOT_EXECUTABLE
+        NAMES dot
+        PATHS
+            ${_Doxygen_GRAPHVIZ_BIN_DIRS}
+            "$ENV{ProgramFiles}/ATT/Graphviz/bin"
+            "C:/Program Files/ATT/Graphviz/bin"
+            [HKEY_LOCAL_MACHINE\\SOFTWARE\\ATT\\Graphviz;InstallPath]/bin
+            /Applications/Graphviz.app/Contents/MacOS
+            /Applications/Utilities/Graphviz.app/Contents/MacOS
+            /Applications/Doxygen.app/Contents/Resources
+            /Applications/Doxygen.app/Contents/MacOS
+            /Applications/Utilities/Doxygen.app/Contents/Resources
+            /Applications/Utilities/Doxygen.app/Contents/MacOS
+        DOC "Dot tool for use with Doxygen"
+    )
+    mark_as_advanced(DOXYGEN_DOT_EXECUTABLE)
+
+    if(DOXYGEN_DOT_EXECUTABLE)
+        # The Doxyfile wants the path to the utility, not the entire path
+        # including file name
+        get_filename_component(DOXYGEN_DOT_PATH
+                               "${DOXYGEN_DOT_EXECUTABLE}"
+                               DIRECTORY)
+        if(WIN32)
+            file(TO_NATIVE_PATH "${DOXYGEN_DOT_PATH}" DOXYGEN_DOT_PATH)
+        endif()
+
+        # Create an imported target for component
+        if(NOT TARGET Doxygen::dot)
+            add_executable(Doxygen::dot IMPORTED GLOBAL)
+            set_target_properties(Doxygen::dot PROPERTIES
+                IMPORTED_LOCATION "${DOXYGEN_DOT_EXECUTABLE}"
+            )
+        endif()
+    endif()
+
+    unset(_Doxygen_GRAPHVIZ_BIN_DIRS)
+endmacro()
+
+#
+# Find Message Sequence Chart...
+#
+macro(_Doxygen_find_mscgen)
+    set(_x86 "(x86)")
+    find_program(
+        DOXYGEN_MSCGEN_EXECUTABLE
+        NAMES mscgen
+        PATHS
+            "$ENV{ProgramFiles}/Mscgen"
+            "$ENV{ProgramFiles${_x86}}/Mscgen"
+        DOC "Message sequence chart tool for use with Doxygen"
+    )
+    mark_as_advanced(DOXYGEN_MSCGEN_EXECUTABLE)
+
+    if(DOXYGEN_MSCGEN_EXECUTABLE)
+        # The Doxyfile wants the path to the utility, not the entire path
+        # including file name
+        get_filename_component(DOXYGEN_MSCGEN_PATH
+                               "${DOXYGEN_MSCGEN_EXECUTABLE}"
+                               DIRECTORY)
+        if(WIN32)
+            file(TO_NATIVE_PATH "${DOXYGEN_MSCGEN_PATH}" DOXYGEN_MSCGEN_PATH)
+        endif()
+
+        # Create an imported target for component
+        if(NOT TARGET Doxygen::mscgen)
+            add_executable(Doxygen::mscgen IMPORTED GLOBAL)
+            set_target_properties(Doxygen::mscgen PROPERTIES
+                IMPORTED_LOCATION "${DOXYGEN_MSCGEN_EXECUTABLE}"
+            )
+        endif()
+    endif()
+
+    unset(_x86)
+endmacro()
+
+# Make sure `doxygen` is one of the components to find
+set(_Doxygen_keep_backward_compat FALSE)
+if(NOT Doxygen_FIND_COMPONENTS)
+    # Search at least for `doxygen` executable
+    set(Doxygen_FIND_COMPONENTS doxygen)
+    # Preserve backward compatibility:
+    # search for `dot` also if `DOXYGEN_SKIP_DOT` is not explicitly disable this.
+    if(NOT DOXYGEN_SKIP_DOT)
+        list(APPEND Doxygen_FIND_COMPONENTS dot)
+    endif()
+    set(_Doxygen_keep_backward_compat TRUE)
+elseif(NOT doxygen IN_LIST Doxygen_FIND_COMPONENTS)
+    list(INSERT Doxygen_FIND_COMPONENTS 0 doxygen)
+endif()
+
+#
+# Find all requested components of Doxygen...
+#
+foreach(_comp IN LISTS Doxygen_FIND_COMPONENTS)
+    if(_comp STREQUAL "doxygen")
+        _Doxygen_find_doxygen()
+    elseif(_comp STREQUAL "dia")
+        _Doxygen_find_dia()
+    elseif(_comp STREQUAL "dot")
+        _Doxygen_find_dot()
+    elseif(_comp STREQUAL "mscgen")
+        _Doxygen_find_mscgen()
+    else()
+        message(WARNING "${_comp} is not a valid Doxygen component")
+        set(Doxygen_${_comp}_FOUND FALSE)
+        continue()
+    endif()
+
+    if(TARGET Doxygen::${_comp})
+        set(Doxygen_${_comp}_FOUND TRUE)
+    else()
+        set(Doxygen_${_comp}_FOUND FALSE)
+    endif()
+endforeach()
+unset(_comp)
+
+# Verify find results
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+find_package_handle_standard_args(
+    Doxygen
+    REQUIRED_VARS DOXYGEN_EXECUTABLE
+    VERSION_VAR DOXYGEN_VERSION
+    HANDLE_COMPONENTS
+)
+
+#
+# Backwards compatibility...
+#
+if(APPLE)
+    # Restore the old app-bundle setting
+    set(CMAKE_FIND_APPBUNDLE ${TEMP_DOXYGEN_SAVE_CMAKE_FIND_APPBUNDLE})
+endif()
+
+# Maintain the _FOUND variables as "YES" or "NO" for backwards
+# compatibility. This allows people to substitute them directly into
+# Doxyfile with configure_file().
+if(DOXYGEN_FOUND)
+    set(DOXYGEN_FOUND "YES")
+else()
+    set(DOXYGEN_FOUND "NO")
+endif()
+if(_Doxygen_keep_backward_compat)
+    if(Doxygen_dot_FOUND)
+        set(DOXYGEN_DOT_FOUND "YES")
+    else()
+        set(DOXYGEN_DOT_FOUND "NO")
+    endif()
+
+    # For backwards compatibility support for even older CMake versions
+    set(DOXYGEN ${DOXYGEN_EXECUTABLE})
+    set(DOT ${DOXYGEN_DOT_EXECUTABLE})
+
+    # No need to keep any backward compatibility for `DOXYGEN_MSCGEN_XXX`
+    # and `DOXYGEN_DIA_XXX` since they were not supported before component
+    # support was added
+endif()
+unset(_Doxygen_keep_backward_compat)
+
+#
+# Allow full control of Doxygen from CMakeLists.txt
+#
+
+# Prepare a template Doxyfile and Doxygen's default values CMake file
+if(TARGET Doxygen::doxygen)
+    # If doxygen was found, use it to generate a minimal default Doxyfile.
+    # We will delete this file after we have finished using it below to
+    # generate the other files that doxygen_add_docs() will use.
+    set(_Doxygen_tpl "${CMAKE_BINARY_DIR}/CMakeDoxyfile.tpl")
+    execute_process(
+        COMMAND "${DOXYGEN_EXECUTABLE}" -s -g "${_Doxygen_tpl}"
+        OUTPUT_QUIET
+        RESULT_VARIABLE _Doxygen_tpl_result
+    )
+    if(_Doxygen_tpl_result)
+        message(FATAL_ERROR
+                "Unable to generate Doxyfile template: ${_Doxygen_tpl_result}")
+    elseif(NOT EXISTS "${_Doxygen_tpl}")
+        message(FATAL_ERROR
+                "Doxygen has failed to generate a Doxyfile template")
+    endif()
+
+    # Write a do-not-edit header to files we are going to generate...
+    set(_Doxygen_dne_header
+[[
+#
+# DO NOT EDIT! THIS FILE WAS GENERATED BY CMAKE!
+#
+
+]]
+    )
+    # We only need one copy of these across the whole build, since their
+    # content is only dependent on the version of Doxygen being used. Therefore
+    # we always put them at the top of the build tree so that they are in a
+    # predictable location.
+    set(_doxyfile_in       "${CMAKE_BINARY_DIR}/CMakeDoxyfile.in")
+    set(_doxyfile_defaults "${CMAKE_BINARY_DIR}/CMakeDoxygenDefaults.cmake")
+
+    set(_doxyfile_in_contents "")
+    set(_doxyfile_defaults_contents "")
+
+    # Get strings containing a configuration key from the template Doxyfile
+    # we obtained from this version of Doxygen. Because some options are split
+    # across multiple lines by ending lines with backslashes, we cannot just
+    # use file(STRINGS...) with a REGEX. Instead, read lines without a REGEX
+    # so that file(STRINGS...) handles the trailing backslash as a line
+    # continuation. It stores multi-lines as lists, so we then have to replace
+    # the ";" list separator with backslashed newlines again so that we get the
+    # original content stored back as the value part.
+    file(STRINGS "${_Doxygen_tpl}" _file_lines)
+    unset(_Doxygen_tpl_params)
+    foreach(_line IN LISTS _file_lines)
+        if(_line MATCHES "([A-Z][A-Z0-9_]+)( *=)(.*)")
+            set(_key "${CMAKE_MATCH_1}")
+            set(_eql "${CMAKE_MATCH_2}")
+            set(_value "${CMAKE_MATCH_3}")
+            string(REPLACE "\\" "\\\\" _value "${_value}")
+            string(REPLACE ";" "\\\n" _value "${_value}")
+            list(APPEND _Doxygen_tpl_params "${_key}${_eql}${_value}")
+        endif()
+    endforeach()
+
+    # Build up a Doxyfile that provides @configVar@ substitutions for each
+    # Doxygen config option as well as a separate CMake script which provides
+    # the default value for each of those options if the project doesn't supply
+    # them. Each config option will support substitution of a CMake variable
+    # of the same name except with DOXYGEN_ prepended.
+    foreach(_Doxygen_param IN LISTS _Doxygen_tpl_params)
+        if(_Doxygen_param MATCHES "([A-Z][A-Z0-9_]+)( *)=( (.*))?")
+            # Ok, this is a config key with a value
+            if(CMAKE_MATCH_COUNT EQUAL 4)
+                string(APPEND _doxyfile_in_contents
+                       "${CMAKE_MATCH_1}${CMAKE_MATCH_2}= @DOXYGEN_${CMAKE_MATCH_1}@\n")
+                # Remove the backslashes we had to preserve to handle newlines
+                string(REPLACE "\\\n" "\n" _value "${CMAKE_MATCH_4}")
+                string(APPEND _doxyfile_defaults_contents
+"if(NOT DEFINED DOXYGEN_${CMAKE_MATCH_1})
+    set(DOXYGEN_${CMAKE_MATCH_1} ${_value})
+endif()
+")
+            # Ok, this is a config key with empty default value
+            elseif(CMAKE_MATCH_COUNT EQUAL 2)
+                string(APPEND _doxyfile_in_contents
+                       "${CMAKE_MATCH_1}${CMAKE_MATCH_2}= @DOXYGEN_${CMAKE_MATCH_1}@\n")
+            else()
+                message(AUTHOR_WARNING
+"Unexpected line format! Code review required!\nFault line: ${_Doxygen_param}")
+            endif()
+        else()
+            message(AUTHOR_WARNING
+"Unexpected line format! Code review required!\nFault line: ${_Doxygen_param}")
+        endif()
+    endforeach()
+    file(WRITE "${_doxyfile_defaults}" "${_Doxygen_dne_header}"
+                                       "${_doxyfile_defaults_contents}")
+    file(WRITE "${_doxyfile_in}"       "${_Doxygen_dne_header}"
+                                       "${_doxyfile_in_contents}")
+
+    # Ok, dumped defaults are not needed anymore...
+    file(REMOVE "${_Doxygen_tpl}")
+
+    unset(_Doxygen_param)
+    unset(_Doxygen_tpl_params)
+    unset(_Doxygen_dne_header)
+    unset(_Doxygen_tpl)
+
+endif()
+
+function(doxygen_quote_value VARIABLE)
+    # Quote a value of the given variable if:
+    # - VARIABLE parameter was really given
+    # - the variable it names is defined and is not present in the list
+    #   specified by DOXYGEN_VERBATIM_VARS (if set)
+    # - the value of the named variable isn't already quoted
+    # - the value has spaces
+    if(VARIABLE AND DEFINED ${VARIABLE} AND
+       NOT ${VARIABLE} MATCHES "^\".* .*\"$" AND ${VARIABLE} MATCHES " " AND
+       NOT (DEFINED DOXYGEN_VERBATIM_VARS AND
+            "${VARIABLE}" IN_LIST DOXYGEN_VERBATIM_VARS))
+        set(${VARIABLE} "\"${${VARIABLE}}\"" PARENT_SCOPE)
+    endif()
+endfunction()
+
+function(doxygen_list_to_quoted_strings LIST_VARIABLE)
+    if(LIST_VARIABLE AND DEFINED ${LIST_VARIABLE})
+        unset(_inputs)
+        unset(_sep)
+        unset(_verbatim)
+        # Have to test if list items should be treated as verbatim here
+        # because we lose the variable name when we pass just one list item
+        # to doxygen_quote_value() below
+        if(DEFINED DOXYGEN_VERBATIM_VARS AND
+           "${LIST_VARIABLE}" IN_LIST DOXYGEN_VERBATIM_VARS)
+            set(_verbatim True)
+        endif()
+        foreach(_in IN LISTS ${LIST_VARIABLE})
+            if(NOT _verbatim)
+                doxygen_quote_value(_in)
+            endif()
+            string(APPEND _inputs "${_sep}${_in}")
+            set(_sep " ")
+        endforeach()
+        set(${LIST_VARIABLE} "${_inputs}" PARENT_SCOPE)
+    endif()
+endfunction()
+
+function(doxygen_add_docs targetName)
+    set(_options ALL USE_STAMP_FILE)
+    set(_one_value_args WORKING_DIRECTORY COMMENT)
+    set(_multi_value_args)
+    cmake_parse_arguments(_args
+                          "${_options}"
+                          "${_one_value_args}"
+                          "${_multi_value_args}"
+                          ${ARGN})
+
+    if(NOT _args_COMMENT)
+        set(_args_COMMENT "Generate API documentation for ${targetName}")
+    endif()
+
+    if(NOT _args_WORKING_DIRECTORY)
+        set(_args_WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
+    endif()
+
+    if(DEFINED DOXYGEN_INPUT)
+        message(WARNING
+"DOXYGEN_INPUT is set but it will be ignored. Pass the files and directories \
+directly to the doxygen_add_docs() command instead.")
+    endif()
+    set(DOXYGEN_INPUT ${_args_UNPARSED_ARGUMENTS})
+
+    if(NOT TARGET Doxygen::doxygen)
+        message(FATAL_ERROR "Doxygen was not found, needed by \
+doxygen_add_docs() for target ${targetName}")
+    endif()
+
+    # If not already defined, set some relevant defaults based on the
+    # assumption that the documentation is for the whole project. Details
+    # specified in the project() command will be used to populate a number of
+    # these defaults.
+
+    if(NOT DEFINED DOXYGEN_PROJECT_NAME)
+        # The PROJECT_NAME tag is a single word (or a sequence of words
+        # surrounded by double-quotes, unless you are using Doxywizard) that
+        # should identify the project for which the documentation is generated.
+        # This name is used in the title of most generated pages and in a few
+        # other places. The default value is: My Project.
+        set(DOXYGEN_PROJECT_NAME ${PROJECT_NAME})
+    endif()
+
+    if(NOT DEFINED DOXYGEN_PROJECT_NUMBER)
+        # The PROJECT_NUMBER tag can be used to enter a project or revision
+        # number. This could be handy for archiving the generated documentation
+        # or if some version control system is used.
+        set(DOXYGEN_PROJECT_NUMBER ${PROJECT_VERSION})
+    endif()
+
+    if(NOT DEFINED DOXYGEN_PROJECT_BRIEF)
+        # Using the PROJECT_BRIEF tag one can provide an optional one line
+        # description for a project that appears at the top of each page and
+        # should give viewer a quick idea about the purpose of the project.
+        # Keep the description short.
+        set(DOXYGEN_PROJECT_BRIEF "${PROJECT_DESCRIPTION}")
+    endif()
+
+    if(NOT DEFINED DOXYGEN_RECURSIVE)
+        # The RECURSIVE tag can be used to specify whether or not
+        # subdirectories should be searched for input files as well. CMake
+        # projects generally evolve to span multiple directories, so it makes
+        # more sense for this to be on by default. Doxygen's default value
+        # has this setting turned off, so we override it.
+        set(DOXYGEN_RECURSIVE YES)
+    endif()
+
+    if(NOT DEFINED DOXYGEN_OUTPUT_DIRECTORY)
+        # The OUTPUT_DIRECTORY tag is used to specify the (relative or
+        # absolute) path into which the generated documentation will be
+        # written. If a relative path is used, Doxygen will interpret it as
+        # being relative to the location where doxygen was started, but we need
+        # to run Doxygen in the source tree so that relative input paths work
+        # intuitively. Therefore, we ensure that the output directory is always
+        # an absolute path and if the project provided a relative path, we
+        # treat it as relative to the current BINARY directory so that output
+        # is not generated inside the source tree.
+        set(DOXYGEN_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
+    elseif(NOT IS_ABSOLUTE "${DOXYGEN_OUTPUT_DIRECTORY}")
+        get_filename_component(DOXYGEN_OUTPUT_DIRECTORY
+                               "${DOXYGEN_OUTPUT_DIRECTORY}"
+                               ABSOLUTE
+                               BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
+    endif()
+
+    if(NOT DEFINED DOXYGEN_HAVE_DOT)
+        # If you set the HAVE_DOT tag to YES then doxygen will assume the dot
+        # tool is available from the path. This tool is part of Graphviz (see:
+        # http://www.graphviz.org/), a graph visualization toolkit from AT&T
+        # and Lucent Bell Labs. The other options in this section have no
+        # effect if this option is set to NO.
+        # Doxygen's default value is: NO.
+        if(Doxygen_dot_FOUND)
+          set(DOXYGEN_HAVE_DOT "YES")
+        else()
+          set(DOXYGEN_HAVE_DOT "NO")
+        endif()
+    endif()
+
+    if(NOT DEFINED DOXYGEN_DOT_MULTI_TARGETS)
+        # Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate
+        # multiple output files in one run (i.e. multiple -o and -T options on
+        # the command line). This makes dot run faster, but since only newer
+        # versions of dot (>1.8.10) support this, Doxygen disables this feature
+        # by default.
+        # This tag requires that the tag HAVE_DOT is set to YES.
+        set(DOXYGEN_DOT_MULTI_TARGETS YES)
+    endif()
+
+    if(NOT DEFINED DOXYGEN_GENERATE_LATEX)
+        # If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX
+        # output. We only want the HTML output enabled by default, so we turn
+        # this off if the project hasn't specified it.
+        set(DOXYGEN_GENERATE_LATEX NO)
+    endif()
+
+    if(NOT DEFINED DOXYGEN_WARN_FORMAT)
+        if(CMAKE_VS_MSBUILD_COMMAND OR CMAKE_VS_DEVENV_COMMAND)
+            # The WARN_FORMAT tag determines the format of the warning messages
+            # that doxygen can produce. The string should contain the $file,
+            # $line and $text tags, which will be replaced by the file and line
+            # number from which the warning originated and the warning text.
+            # Optionally, the format may contain $version, which will be
+            # replaced by the version of the file (if it could be obtained via
+            # FILE_VERSION_FILTER).
+            # Doxygen's default value is: $file:$line: $text
+            set(DOXYGEN_WARN_FORMAT "$file($line) : $text ")
+        endif()
+    endif()
+
+    if(DEFINED DOXYGEN_WARN_LOGFILE AND NOT IS_ABSOLUTE "${DOXYGEN_WARN_LOGFILE}")
+        # The WARN_LOGFILE tag can be used to specify a file to which warning and error
+        # messages should be written. If left blank the output is written to standard
+        # error (stderr).
+        get_filename_component(DOXYGEN_WARN_LOGFILE
+                               "${DOXYGEN_WARN_LOGFILE}"
+                               ABSOLUTE
+                               BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
+    endif()
+
+    # Any files from the INPUT that match any of the EXCLUDE_PATTERNS will be
+    # excluded from the set of input files. We provide some additional patterns
+    # to prevent commonly unwanted things from CMake builds being pulled in.
+    #
+    # Note that the wildcards are matched against the file with absolute path,
+    # so to exclude all test directories for example use the pattern */test/*
+    list(
+        APPEND
+        DOXYGEN_EXCLUDE_PATTERNS
+        "*/.git/*"
+        "*/.svn/*"
+        "*/.hg/*"
+        "*/CMakeFiles/*"
+        "*/_CPack_Packages/*"
+        "DartConfiguration.tcl"
+        "CMakeLists.txt"
+        "CMakeCache.txt"
+    )
+
+    # Now bring in Doxgen's defaults for those things the project has not
+    # already set and we have not provided above
+    include("${CMAKE_BINARY_DIR}/CMakeDoxygenDefaults.cmake" OPTIONAL)
+
+    # Cleanup built HTMLs on "make clean"
+    # TODO Any other dirs?
+    if(DOXYGEN_GENERATE_HTML)
+        if(IS_ABSOLUTE "${DOXYGEN_HTML_OUTPUT}")
+            set(_args_clean_html_dir "${DOXYGEN_HTML_OUTPUT}")
+        else()
+            set(_args_clean_html_dir
+                "${DOXYGEN_OUTPUT_DIRECTORY}/${DOXYGEN_HTML_OUTPUT}")
+        endif()
+        set_property(DIRECTORY APPEND PROPERTY
+            ADDITIONAL_CLEAN_FILES "${_args_clean_html_dir}")
+    endif()
+
+    # Build up a list of files we can identify from the inputs so we can list
+    # them as DEPENDS and SOURCES in the custom command/target (the latter
+    # makes them display in IDEs). This must be done before we transform the
+    # various DOXYGEN_... variables below because we need to process
+    # DOXYGEN_INPUT as a list first.
+    unset(_sources)
+    foreach(_item IN LISTS DOXYGEN_INPUT)
+        get_filename_component(_abs_item "${_item}" ABSOLUTE
+                               BASE_DIR "${_args_WORKING_DIRECTORY}")
+        get_source_file_property(_isGenerated "${_abs_item}" GENERATED)
+        if(_isGenerated OR
+           (EXISTS "${_abs_item}" AND
+            NOT IS_DIRECTORY "${_abs_item}" AND
+            NOT IS_SYMLINK "${_abs_item}"))
+            list(APPEND _sources "${_abs_item}")
+        elseif(_args_USE_STAMP_FILE)
+            message(FATAL_ERROR "Source does not exist or is not a file:\n"
+                "    ${_abs_item}\n"
+                "Only existing files may be specified when the "
+                "USE_STAMP_FILE option is given.")
+        endif()
+    endforeach()
+
+    # Transform known list type options into space separated strings.
+    set(_doxygen_list_options
+        ABBREVIATE_BRIEF
+        ALIASES
+        CITE_BIB_FILES
+        DIAFILE_DIRS
+        DOTFILE_DIRS
+        DOT_FONTPATH
+        ENABLED_SECTIONS
+        EXAMPLE_PATH
+        EXAMPLE_PATTERNS
+        EXCLUDE
+        EXCLUDE_PATTERNS
+        EXCLUDE_SYMBOLS
+        EXPAND_AS_DEFINED
+        EXTENSION_MAPPING
+        EXTRA_PACKAGES
+        EXTRA_SEARCH_MAPPINGS
+        FILE_PATTERNS
+        FILTER_PATTERNS
+        FILTER_SOURCE_PATTERNS
+        HTML_EXTRA_FILES
+        HTML_EXTRA_STYLESHEET
+        IGNORE_PREFIX
+        IMAGE_PATH
+        INCLUDE_FILE_PATTERNS
+        INCLUDE_PATH
+        INPUT
+        LATEX_EXTRA_FILES
+        LATEX_EXTRA_STYLESHEET
+        MATHJAX_EXTENSIONS
+        MSCFILE_DIRS
+        PLANTUML_INCLUDE_PATH
+        PREDEFINED
+        QHP_CUST_FILTER_ATTRS
+        QHP_SECT_FILTER_ATTRS
+        STRIP_FROM_INC_PATH
+        STRIP_FROM_PATH
+        TAGFILES
+        TCL_SUBST
+    )
+    foreach(_item IN LISTS _doxygen_list_options)
+        doxygen_list_to_quoted_strings(DOXYGEN_${_item})
+    endforeach()
+
+    # Transform known single value variables which may contain spaces, such as
+    # paths or description strings.
+    set(_doxygen_quoted_options
+        CHM_FILE
+        DIA_PATH
+        DOCBOOK_OUTPUT
+        DOCSET_FEEDNAME
+        DOCSET_PUBLISHER_NAME
+        DOT_FONTNAME
+        DOT_PATH
+        EXTERNAL_SEARCH_ID
+        FILE_VERSION_FILTER
+        GENERATE_TAGFILE
+        HHC_LOCATION
+        HTML_FOOTER
+        HTML_HEADER
+        HTML_OUTPUT
+        HTML_STYLESHEET
+        INPUT_FILTER
+        LATEX_FOOTER
+        LATEX_HEADER
+        LATEX_OUTPUT
+        LAYOUT_FILE
+        MAN_OUTPUT
+        MAN_SUBDIR
+        MATHJAX_CODEFILE
+        MSCGEN_PATH
+        OUTPUT_DIRECTORY
+        PERL_PATH
+        PLANTUML_JAR_PATH
+        PROJECT_BRIEF
+        PROJECT_LOGO
+        PROJECT_NAME
+        QCH_FILE
+        QHG_LOCATION
+        QHP_CUST_FILTER_NAME
+        QHP_VIRTUAL_FOLDER
+        RTF_EXTENSIONS_FILE
+        RTF_OUTPUT
+        RTF_STYLESHEET_FILE
+        SEARCHDATA_FILE
+        USE_MDFILE_AS_MAINPAGE
+        WARN_FORMAT
+        WARN_LOGFILE
+        XML_OUTPUT
+    )
+
+    # Store the unmodified value of DOXYGEN_OUTPUT_DIRECTORY prior to invoking
+    # doxygen_quote_value() below. This will mutate the string specifically for
+    # consumption by Doxygen's config file, which we do not want when we use it
+    # later in the custom target's commands.
+    set( _original_doxygen_output_dir ${DOXYGEN_OUTPUT_DIRECTORY} )
+
+    foreach(_item IN LISTS _doxygen_quoted_options)
+        doxygen_quote_value(DOXYGEN_${_item})
+    endforeach()
+
+    # Prepare doxygen configuration file
+    set(_doxyfile_template "${CMAKE_BINARY_DIR}/CMakeDoxyfile.in")
+    set(_target_doxyfile "${CMAKE_CURRENT_BINARY_DIR}/Doxyfile.${targetName}")
+    configure_file("${_doxyfile_template}" "${_target_doxyfile}")
+
+    unset(_all)
+    if(${_args_ALL})
+        set(_all ALL)
+    endif()
+
+    # Only create the stamp file if asked to. If we don't create it,
+    # the target will always be considered out-of-date.
+    if(_args_USE_STAMP_FILE)
+        set(__stamp_file "${CMAKE_CURRENT_BINARY_DIR}/${targetName}.stamp")
+        add_custom_command(
+            VERBATIM
+            OUTPUT ${__stamp_file}
+            COMMAND ${CMAKE_COMMAND} -E make_directory ${_original_doxygen_output_dir}
+            COMMAND "${DOXYGEN_EXECUTABLE}" "${_target_doxyfile}"
+            COMMAND ${CMAKE_COMMAND} -E touch ${__stamp_file}
+            WORKING_DIRECTORY "${_args_WORKING_DIRECTORY}"
+            DEPENDS "${_target_doxyfile}" ${_sources}
+            COMMENT "${_args_COMMENT}"
+        )
+        add_custom_target(${targetName} ${_all}
+            DEPENDS ${__stamp_file}
+            SOURCES ${_sources}
+        )
+        unset(__stamp_file)
+    else()
+        add_custom_target( ${targetName} ${_all} VERBATIM
+            COMMAND ${CMAKE_COMMAND} -E make_directory ${_original_doxygen_output_dir}
+            COMMAND "${DOXYGEN_EXECUTABLE}" "${_target_doxyfile}"
+            WORKING_DIRECTORY "${_args_WORKING_DIRECTORY}"
+            DEPENDS "${_target_doxyfile}" ${_sources}
+            COMMENT "${_args_COMMENT}"
+            SOURCES ${_sources}
+        )
+    endif()
+
+endfunction()
+
+cmake_policy(POP)
diff --git a/share/cmake-3.22/Modules/FindEXPAT.cmake b/share/cmake-3.22/Modules/FindEXPAT.cmake
new file mode 100644
index 0000000..f9cb432
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindEXPAT.cmake
@@ -0,0 +1,83 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindEXPAT
+---------
+
+Find the native Expat headers and library.
+Expat is a stream-oriented XML parser library written in C.
+
+Imported Targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.10
+
+This module defines the following :prop_tgt:`IMPORTED` targets:
+
+``EXPAT::EXPAT``
+  The Expat ``expat`` library, if found.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This module will set the following variables in your project:
+
+``EXPAT_INCLUDE_DIRS``
+  where to find expat.h, etc.
+``EXPAT_LIBRARIES``
+  the libraries to link against to use Expat.
+``EXPAT_FOUND``
+  true if the Expat headers and libraries were found.
+
+#]=======================================================================]
+
+find_package(PkgConfig QUIET)
+
+pkg_check_modules(PC_EXPAT QUIET expat)
+
+# Look for the header file.
+find_path(EXPAT_INCLUDE_DIR NAMES expat.h HINTS ${PC_EXPAT_INCLUDE_DIRS})
+
+# Look for the library.
+find_library(EXPAT_LIBRARY NAMES expat libexpat NAMES_PER_DIR HINTS ${PC_EXPAT_LIBRARY_DIRS})
+
+if (EXPAT_INCLUDE_DIR AND EXISTS "${EXPAT_INCLUDE_DIR}/expat.h")
+    file(STRINGS "${EXPAT_INCLUDE_DIR}/expat.h" expat_version_str
+         REGEX "^#[\t ]*define[\t ]+XML_(MAJOR|MINOR|MICRO)_VERSION[\t ]+[0-9]+$")
+
+    unset(EXPAT_VERSION_STRING)
+    foreach(VPART MAJOR MINOR MICRO)
+        foreach(VLINE ${expat_version_str})
+            if(VLINE MATCHES "^#[\t ]*define[\t ]+XML_${VPART}_VERSION[\t ]+([0-9]+)$")
+                set(EXPAT_VERSION_PART "${CMAKE_MATCH_1}")
+                if(EXPAT_VERSION_STRING)
+                    string(APPEND EXPAT_VERSION_STRING ".${EXPAT_VERSION_PART}")
+                else()
+                    set(EXPAT_VERSION_STRING "${EXPAT_VERSION_PART}")
+                endif()
+            endif()
+        endforeach()
+    endforeach()
+endif ()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(EXPAT
+                                  REQUIRED_VARS EXPAT_LIBRARY EXPAT_INCLUDE_DIR
+                                  VERSION_VAR EXPAT_VERSION_STRING)
+
+# Copy the results to the output variables and target.
+if(EXPAT_FOUND)
+  set(EXPAT_LIBRARIES ${EXPAT_LIBRARY})
+  set(EXPAT_INCLUDE_DIRS ${EXPAT_INCLUDE_DIR})
+
+  if(NOT TARGET EXPAT::EXPAT)
+    add_library(EXPAT::EXPAT UNKNOWN IMPORTED)
+    set_target_properties(EXPAT::EXPAT PROPERTIES
+      IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+      IMPORTED_LOCATION "${EXPAT_LIBRARY}"
+      INTERFACE_INCLUDE_DIRECTORIES "${EXPAT_INCLUDE_DIRS}")
+  endif()
+endif()
+
+mark_as_advanced(EXPAT_INCLUDE_DIR EXPAT_LIBRARY)
diff --git a/share/cmake-3.22/Modules/FindEnvModules.cmake b/share/cmake-3.22/Modules/FindEnvModules.cmake
new file mode 100644
index 0000000..a4ac0b4
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindEnvModules.cmake
@@ -0,0 +1,335 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindEnvModules
+--------------
+
+.. versionadded:: 3.15
+
+Locate an environment module implementation and make commands available to
+CMake scripts to use them.  This is compatible with both Lua-based Lmod
+and TCL-based EnvironmentModules.
+
+This module is intended for the use case of setting up the compiler and library
+environment within a :ref:`CTest Script <CTest Script>` (``ctest -S``).  It can
+also be used in a :ref:`CMake Script <Script Processing Mode>` (``cmake -P``).
+
+.. note::
+
+  The loaded environment will not survive past the end of the calling process.
+  Do not use this module in project code (``CMakeLists.txt`` files) to load
+  a compiler environment; it will not be available during the build.  Instead
+  load the environment manually before running CMake or using the generated
+  build system.
+
+Example Usage
+^^^^^^^^^^^^^
+
+.. code-block:: cmake
+
+  set(CTEST_BUILD_NAME "CrayLinux-CrayPE-Cray-dynamic")
+  set(CTEST_BUILD_CONFIGURATION Release)
+  set(CTEST_BUILD_FLAGS "-k -j8")
+  set(CTEST_CMAKE_GENERATOR "Unix Makefiles")
+
+  ...
+
+  find_package(EnvModules REQUIRED)
+
+  env_module(purge)
+  env_module(load modules)
+  env_module(load craype)
+  env_module(load PrgEnv-cray)
+  env_module(load craype-knl)
+  env_module(load cray-mpich)
+  env_module(load cray-libsci)
+
+  set(ENV{CRAYPE_LINK_TYPE} dynamic)
+
+  ...
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This module will set the following variables in your project:
+
+``EnvModules_FOUND``
+  True if a compatible environment modules framework was found.
+
+Cache Variables
+^^^^^^^^^^^^^^^
+
+The following cache variable will be set:
+
+``EnvModules_COMMAND``
+  The low level module command to use.  Currently supported
+  implementations are the Lua based Lmod and TCL based EnvironmentModules.
+
+Environment Variables
+^^^^^^^^^^^^^^^^^^^^^
+
+``ENV{MODULESHOME}``
+  Usually set by the module environment implementation, used as a hint to
+  locate the module command to execute.
+
+Provided Functions
+^^^^^^^^^^^^^^^^^^
+
+This defines the following CMake functions for interacting with environment
+modules:
+
+.. command:: env_module
+
+  Execute an aribitrary module command:
+
+  .. code-block:: cmake
+
+    env_module(cmd arg1 ... argN)
+    env_module(
+      COMMAND cmd arg1 ... argN
+      [OUTPUT_VARIABLE <out-var>]
+      [RESULT_VARIABLE <ret-var>]
+    )
+
+  The options are:
+
+  ``cmd arg1 ... argN``
+    The module sub-command and arguments to execute as if they were
+    passed directly to the module command in your shell environment.
+
+  ``OUTPUT_VARIABLE <out-var>``
+    The standard output from executing the module command.
+
+  ``RESULT_VARIABLE <ret-var>``
+    The return code from executing the module command.
+
+.. command:: env_module_swap
+
+  Swap one module for another:
+
+  .. code-block:: cmake
+
+    env_module_swap(out_mod in_mod
+      [OUTPUT_VARIABLE <out-var>]
+      [RESULT_VARIABLE <ret-var>]
+    )
+
+  This is functionally equivalent to the ``module swap out_mod in_mod`` shell
+  command.  The options are:
+
+  ``OUTPUT_VARIABLE <out-var>``
+    The standard output from executing the module command.
+
+  ``RESULT_VARIABLE <ret-var>``
+    The return code from executing the module command.
+
+.. command:: env_module_list
+
+  Retrieve the list of currently loaded modules:
+
+  .. code-block:: cmake
+
+    env_module_list(<out-var>)
+
+  This is functionally equivalent to the ``module list`` shell command.
+  The result is stored in ``<out-var>`` as a properly formatted CMake
+  :ref:`semicolon-separated list <CMake Language Lists>` variable.
+
+.. command:: env_module_avail
+
+  Retrieve the list of available modules:
+
+  .. code-block:: cmake
+
+    env_module_avail([<mod-prefix>] <out-var>)
+
+  This is functionally equivalent to the ``module avail <mod-prefix>`` shell
+  command.  The result is stored in ``<out-var>`` as a properly formatted
+  CMake :ref:`semicolon-separated list <CMake Language Lists>` variable.
+
+#]=======================================================================]
+
+function(env_module)
+  if(NOT EnvModules_COMMAND)
+    message(FATAL_ERROR "Failed to process module command.  EnvModules_COMMAND not found")
+    return()
+  endif()
+
+  set(options)
+  set(oneValueArgs OUTPUT_VARIABLE RESULT_VARIABLE)
+  set(multiValueArgs COMMAND)
+  cmake_parse_arguments(MOD_ARGS
+    "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGV}
+  )
+  if(NOT MOD_ARGS_COMMAND)
+    # If no explicit command argument was given, then treat the calling syntax
+    # as: module(cmd args...)
+    set(exec_cmd ${ARGV})
+  else()
+    set(exec_cmd ${MOD_ARGS_COMMAND})
+  endif()
+
+  if(MOD_ARGS_OUTPUT_VARIABLE)
+    set(err_var_args ERROR_VARIABLE err_var)
+  endif()
+
+  execute_process(
+    COMMAND mktemp -t module.cmake.XXXXXXXXXXXX
+    OUTPUT_VARIABLE tempfile_name
+  )
+  string(STRIP "${tempfile_name}" tempfile_name)
+
+  # If the $MODULESHOME/init/cmake file exists then assume that the CMake
+  # "shell" functionality exits
+  if(EXISTS "$ENV{MODULESHOME}/init/cmake")
+    execute_process(
+      COMMAND ${EnvModules_COMMAND} cmake ${exec_cmd}
+      OUTPUT_FILE ${tempfile_name}
+      ${err_var_args}
+      RESULT_VARIABLE ret_var
+    )
+
+  else() # fallback to the sh shell and manually convert to CMake
+    execute_process(
+      COMMAND ${EnvModules_COMMAND} sh ${exec_cmd}
+      OUTPUT_VARIABLE out_var
+      ${err_var_args}
+      RESULT_VARIABLE ret_var
+    )
+  endif()
+
+  # If we executed successfully then process and cleanup the temp file
+  if(ret_var EQUAL 0)
+    # No CMake shell so we need to process the sh output into CMake code
+    if(NOT EXISTS "$ENV{MODULESHOME}/init/cmake")
+      file(WRITE ${tempfile_name} "")
+      string(REPLACE "\n" ";" out_var "${out_var}")
+      foreach(sh_cmd IN LISTS out_var)
+        if(sh_cmd MATCHES "^ *unset *([^ ]*)")
+          set(cmake_cmd "unset(ENV{${CMAKE_MATCH_1}})")
+        elseif(sh_cmd MATCHES "^ *export *([^ ]*)")
+          set(cmake_cmd "set(ENV{${CMAKE_MATCH_1}} \"\${${CMAKE_MATCH_1}}\")")
+        elseif(sh_cmd MATCHES " *([^ =]*) *= *(.*)")
+          set(var_name "${CMAKE_MATCH_1}")
+          set(var_value "${CMAKE_MATCH_2}")
+          if(var_value MATCHES "^\"(.*[^\\])\"")
+            # If it's in quotes, take the value as is
+            set(var_value "${CMAKE_MATCH_1}")
+          else()
+            # Otherwise, strip trailing spaces
+            string(REGEX REPLACE "([^\\])? +$" "\\1" var_value "${var_value}")
+          endif()
+          string(REPLACE "\\ " " " var_value "${var_value}")
+          set(cmake_cmd "set(${var_name} \"${var_value}\")")
+        else()
+          continue()
+        endif()
+        file(APPEND ${tempfile_name} "${cmake_cmd}\n")
+      endforeach()
+    endif()
+
+    # Process the change in environment variables
+    include(${tempfile_name})
+    file(REMOVE ${tempfile_name})
+  endif()
+
+  # Push the output back out to the calling scope
+  if(MOD_ARGS_OUTPUT_VARIABLE)
+    set(${MOD_ARGS_OUTPUT_VARIABLE} "${err_var}" PARENT_SCOPE)
+  endif()
+  if(MOD_ARGS_RESULT_VARIABLE)
+    set(${MOD_ARGS_RESULT_VARIABLE} ${ret_var} PARENT_SCOPE)
+  endif()
+endfunction(env_module)
+
+#------------------------------------------------------------------------------
+function(env_module_swap out_mod in_mod)
+  set(options)
+  set(oneValueArgs OUTPUT_VARIABLE RESULT_VARIABLE)
+  set(multiValueArgs)
+
+  cmake_parse_arguments(MOD_ARGS
+    "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGV}
+  )
+
+  env_module(COMMAND -t swap ${out_mod} ${in_mod}
+    OUTPUT_VARIABLE tmp_out
+    RETURN_VARIABLE tmp_ret
+  )
+
+  if(MOD_ARGS_OUTPUT_VARIABLE)
+    set(${MOD_ARGS_OUTPUT_VARIABLE} "${err_var}" PARENT_SCOPE)
+  endif()
+  if(MOD_ARGS_RESULT_VARIABLE)
+    set(${MOD_ARGS_RESULT_VARIABLE} ${tmp_ret} PARENT_SCOPE)
+  endif()
+endfunction()
+
+#------------------------------------------------------------------------------
+function(env_module_list out_var)
+  cmake_policy(SET CMP0007 NEW)
+  env_module(COMMAND -t list OUTPUT_VARIABLE tmp_out)
+
+  # Convert output into a CMake list
+  string(REPLACE "\n" ";" ${out_var} "${tmp_out}")
+
+  # Remove title headers and empty entries
+  list(REMOVE_ITEM ${out_var} "No modules loaded")
+  if(${out_var})
+    list(FILTER ${out_var} EXCLUDE REGEX "^(.*:)?$")
+  endif()
+  list(FILTER ${out_var} EXCLUDE REGEX "^(.*:)?$")
+
+  set(${out_var} ${${out_var}} PARENT_SCOPE)
+endfunction()
+
+#------------------------------------------------------------------------------
+function(env_module_avail)
+  cmake_policy(SET CMP0007 NEW)
+
+  if(ARGC EQUAL 1)
+    set(mod_prefix)
+    set(out_var ${ARGV0})
+  elseif(ARGC EQUAL 2)
+    set(mod_prefix ${ARGV0})
+    set(out_var ${ARGV1})
+  else()
+    message(FATAL_ERROR "Usage: env_module_avail([mod_prefix] out_var)")
+  endif()
+  env_module(COMMAND -t avail ${mod_prefix} OUTPUT_VARIABLE tmp_out)
+
+  # Convert output into a CMake list
+  string(REPLACE "\n" ";" tmp_out "${tmp_out}")
+
+  set(${out_var})
+  foreach(MOD IN LISTS tmp_out)
+    # Remove directory entries and empty values
+    if(MOD MATCHES "^(.*:)?$")
+      continue()
+    endif()
+
+    # Convert default modules
+    if(MOD MATCHES "^(.*)/$" ) # "foo/"
+      list(APPEND ${out_var} ${CMAKE_MATCH_1})
+    elseif(MOD MATCHES "^((.*)/.*)\\(default\\)$") # "foo/1.2.3(default)"
+      list(APPEND ${out_var} ${CMAKE_MATCH_2})
+      list(APPEND ${out_var} ${CMAKE_MATCH_1})
+    else()
+      list(APPEND ${out_var} ${MOD})
+    endif()
+  endforeach()
+
+  set(${out_var} ${${out_var}} PARENT_SCOPE)
+endfunction()
+
+#------------------------------------------------------------------------------
+# Make sure we know where the underlying module command is
+find_program(EnvModules_COMMAND
+  NAMES lmod modulecmd
+  HINTS ENV MODULESHOME
+  PATH_SUFFIXES libexec
+)
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+find_package_handle_standard_args(EnvModules DEFAULT_MSG EnvModules_COMMAND)
diff --git a/share/cmake-3.22/Modules/FindFLEX.cmake b/share/cmake-3.22/Modules/FindFLEX.cmake
new file mode 100644
index 0000000..e67e931
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindFLEX.cmake
@@ -0,0 +1,265 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindFLEX
+--------
+
+Find Fast Lexical Analyzer (Flex) executable and provides a macro
+to generate custom build rules
+
+
+
+The module defines the following variables:
+
+::
+
+  FLEX_FOUND - True is flex executable is found
+  FLEX_EXECUTABLE - the path to the flex executable
+  FLEX_VERSION - the version of flex
+  FLEX_LIBRARIES - The flex libraries
+  FLEX_INCLUDE_DIRS - The path to the flex headers
+
+
+
+The minimum required version of flex can be specified using the
+standard syntax, e.g.  :command:`find_package(FLEX 2.5.13)`
+
+
+
+If flex is found on the system, the module provides the macro:
+
+::
+
+  FLEX_TARGET(Name FlexInput FlexOutput
+              [COMPILE_FLAGS <string>]
+              [DEFINES_FILE <string>]
+              )
+
+which creates a custom command to generate the ``FlexOutput`` file from
+the ``FlexInput`` file.  Name is an alias used to get details of this custom
+command.  If ``COMPILE_FLAGS`` option is specified, the next
+parameter is added to the flex command line.
+
+.. versionadded:: 3.5
+  If flex is configured to
+  output a header file, the ``DEFINES_FILE`` option may be used to specify its
+  name.
+
+.. versionchanged:: 3.17
+  When :policy:`CMP0098` is set to ``NEW``, ``flex`` runs in the
+  :variable:`CMAKE_CURRENT_BINARY_DIR` directory.
+
+The macro defines the following variables:
+
+::
+
+  FLEX_${Name}_DEFINED - true is the macro ran successfully
+  FLEX_${Name}_OUTPUTS - the source file generated by the custom rule, an
+  alias for FlexOutput
+  FLEX_${Name}_INPUT - the flex source file, an alias for ${FlexInput}
+  FLEX_${Name}_OUTPUT_HEADER - the header flex output, if any.
+
+
+
+Flex scanners often use tokens defined by Bison: the code generated
+by Flex depends of the header generated by Bison.  This module also
+defines a macro:
+
+::
+
+  ADD_FLEX_BISON_DEPENDENCY(FlexTarget BisonTarget)
+
+which adds the required dependency between a scanner and a parser
+where ``FlexTarget`` and ``BisonTarget`` are the first parameters of
+respectively ``FLEX_TARGET`` and ``BISON_TARGET`` macros.
+
+::
+
+  ====================================================================
+  Example:
+
+
+
+::
+
+   find_package(BISON)
+   find_package(FLEX)
+
+
+
+::
+
+   BISON_TARGET(MyParser parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser.cpp)
+   FLEX_TARGET(MyScanner lexer.l  ${CMAKE_CURRENT_BINARY_DIR}/lexer.cpp)
+   ADD_FLEX_BISON_DEPENDENCY(MyScanner MyParser)
+
+
+
+::
+
+   include_directories(${CMAKE_CURRENT_BINARY_DIR})
+   add_executable(Foo
+      Foo.cc
+      ${BISON_MyParser_OUTPUTS}
+      ${FLEX_MyScanner_OUTPUTS}
+   )
+   target_link_libraries(Foo ${FLEX_LIBRARIES})
+  ====================================================================
+#]=======================================================================]
+
+find_program(FLEX_EXECUTABLE NAMES flex win-flex win_flex DOC "path to the flex executable")
+mark_as_advanced(FLEX_EXECUTABLE)
+
+find_library(FL_LIBRARY NAMES fl
+  DOC "Path to the fl library")
+
+find_path(FLEX_INCLUDE_DIR FlexLexer.h
+  DOC "Path to the flex headers")
+
+mark_as_advanced(FL_LIBRARY FLEX_INCLUDE_DIR)
+
+set(FLEX_INCLUDE_DIRS ${FLEX_INCLUDE_DIR})
+set(FLEX_LIBRARIES ${FL_LIBRARY})
+
+if(FLEX_EXECUTABLE)
+
+  execute_process(COMMAND ${FLEX_EXECUTABLE} --version
+    OUTPUT_VARIABLE FLEX_version_output
+    ERROR_VARIABLE FLEX_version_error
+    RESULT_VARIABLE FLEX_version_result
+    OUTPUT_STRIP_TRAILING_WHITESPACE)
+  if(NOT ${FLEX_version_result} EQUAL 0)
+    if(FLEX_FIND_REQUIRED)
+      message(SEND_ERROR "Command \"${FLEX_EXECUTABLE} --version\" failed with output:\n${FLEX_version_output}\n${FLEX_version_error}")
+    else()
+      message("Command \"${FLEX_EXECUTABLE} --version\" failed with output:\n${FLEX_version_output}\n${FLEX_version_error}\nFLEX_VERSION will not be available")
+    endif()
+  else()
+    # older versions of flex printed "/full/path/to/executable version X.Y"
+    # newer versions use "basename(executable) X.Y"
+    get_filename_component(FLEX_EXE_NAME_WE "${FLEX_EXECUTABLE}" NAME_WE)
+    get_filename_component(FLEX_EXE_EXT "${FLEX_EXECUTABLE}" EXT)
+    string(REGEX REPLACE "^.*${FLEX_EXE_NAME_WE}(${FLEX_EXE_EXT})?\"? (version )?([0-9]+[^ ]*)( .*)?$" "\\3"
+      FLEX_VERSION "${FLEX_version_output}")
+    unset(FLEX_EXE_EXT)
+    unset(FLEX_EXE_NAME_WE)
+  endif()
+
+  #============================================================
+  # FLEX_TARGET (public macro)
+  #============================================================
+  #
+  macro(FLEX_TARGET Name Input Output)
+
+    set(FLEX_TARGET_PARAM_OPTIONS)
+    set(FLEX_TARGET_PARAM_ONE_VALUE_KEYWORDS
+      COMPILE_FLAGS
+      DEFINES_FILE
+      )
+    set(FLEX_TARGET_PARAM_MULTI_VALUE_KEYWORDS)
+
+    cmake_parse_arguments(
+      FLEX_TARGET_ARG
+      "${FLEX_TARGET_PARAM_OPTIONS}"
+      "${FLEX_TARGET_PARAM_ONE_VALUE_KEYWORDS}"
+      "${FLEX_TARGET_MULTI_VALUE_KEYWORDS}"
+      ${ARGN}
+      )
+
+    set(FLEX_TARGET_usage "FLEX_TARGET(<Name> <Input> <Output> [COMPILE_FLAGS <string>] [DEFINES_FILE <string>]")
+
+    if(NOT "${FLEX_TARGET_ARG_UNPARSED_ARGUMENTS}" STREQUAL "")
+      message(SEND_ERROR ${FLEX_TARGET_usage})
+    else()
+
+      cmake_policy(GET CMP0098 _flex_CMP0098
+          PARENT_SCOPE # undocumented, do not use outside of CMake
+        )
+      set(_flex_INPUT "${Input}")
+      if("x${_flex_CMP0098}x" STREQUAL "xNEWx")
+        set(_flex_WORKING_DIR "${CMAKE_CURRENT_BINARY_DIR}")
+        if(NOT IS_ABSOLUTE "${_flex_INPUT}")
+          set(_flex_INPUT "${CMAKE_CURRENT_SOURCE_DIR}/${_flex_INPUT}")
+        endif()
+      else()
+        set(_flex_WORKING_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
+      endif()
+      unset(_flex_CMP0098)
+
+      set(_flex_OUTPUT "${Output}")
+      if(NOT IS_ABSOLUTE ${_flex_OUTPUT})
+        set(_flex_OUTPUT "${_flex_WORKING_DIR}/${_flex_OUTPUT}")
+      endif()
+      set(_flex_TARGET_OUTPUTS "${_flex_OUTPUT}")
+
+      set(_flex_EXE_OPTS "")
+      if(NOT "${FLEX_TARGET_ARG_COMPILE_FLAGS}" STREQUAL "")
+        set(_flex_EXE_OPTS "${FLEX_TARGET_ARG_COMPILE_FLAGS}")
+        separate_arguments(_flex_EXE_OPTS)
+      endif()
+
+      set(_flex_OUTPUT_HEADER "")
+      if(NOT "${FLEX_TARGET_ARG_DEFINES_FILE}" STREQUAL "")
+        set(_flex_OUTPUT_HEADER "${FLEX_TARGET_ARG_DEFINES_FILE}")
+        if(IS_ABSOLUTE "${_flex_OUTPUT_HEADER}")
+          set(_flex_OUTPUT_HEADER_ABS "${_flex_OUTPUT_HEADER}")
+        else()
+          set(_flex_OUTPUT_HEADER_ABS "${_flex_WORKING_DIR}/${_flex_OUTPUT_HEADER}")
+        endif()
+        list(APPEND _flex_TARGET_OUTPUTS "${_flex_OUTPUT_HEADER_ABS}")
+        list(APPEND _flex_EXE_OPTS --header-file=${_flex_OUTPUT_HEADER_ABS})
+      endif()
+
+      get_filename_component(_flex_EXE_NAME_WE "${FLEX_EXECUTABLE}" NAME_WE)
+      add_custom_command(OUTPUT ${_flex_TARGET_OUTPUTS}
+        COMMAND ${FLEX_EXECUTABLE} ${_flex_EXE_OPTS} -o${_flex_OUTPUT} ${_flex_INPUT}
+        VERBATIM
+        DEPENDS ${_flex_INPUT}
+        COMMENT "[FLEX][${Name}] Building scanner with ${_flex_EXE_NAME_WE} ${FLEX_VERSION}"
+        WORKING_DIRECTORY ${_flex_WORKING_DIR})
+
+      set(FLEX_${Name}_DEFINED TRUE)
+      set(FLEX_${Name}_OUTPUTS ${_flex_TARGET_OUTPUTS})
+      set(FLEX_${Name}_INPUT ${_flex_INPUT})
+      set(FLEX_${Name}_COMPILE_FLAGS ${_flex_EXE_OPTS})
+      set(FLEX_${Name}_OUTPUT_HEADER ${_flex_OUTPUT_HEADER})
+
+      unset(_flex_EXE_NAME_WE)
+      unset(_flex_EXE_OPTS)
+      unset(_flex_INPUT)
+      unset(_flex_OUTPUT)
+      unset(_flex_OUTPUT_HEADER)
+      unset(_flex_OUTPUT_HEADER_ABS)
+      unset(_flex_TARGET_OUTPUTS)
+      unset(_flex_WORKING_DIR)
+
+    endif()
+  endmacro()
+  #============================================================
+
+
+  #============================================================
+  # ADD_FLEX_BISON_DEPENDENCY (public macro)
+  #============================================================
+  #
+  macro(ADD_FLEX_BISON_DEPENDENCY FlexTarget BisonTarget)
+
+    if(NOT FLEX_${FlexTarget}_OUTPUTS)
+      message(SEND_ERROR "Flex target `${FlexTarget}' does not exist.")
+    endif()
+
+    if(NOT BISON_${BisonTarget}_OUTPUT_HEADER)
+      message(SEND_ERROR "Bison target `${BisonTarget}' does not exist.")
+    endif()
+
+    set_source_files_properties(${FLEX_${FlexTarget}_OUTPUTS}
+      PROPERTIES OBJECT_DEPENDS ${BISON_${BisonTarget}_OUTPUT_HEADER})
+  endmacro()
+  #============================================================
+
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(FLEX REQUIRED_VARS FLEX_EXECUTABLE
+                                       VERSION_VAR FLEX_VERSION)
diff --git a/share/cmake-3.22/Modules/FindFLTK.cmake b/share/cmake-3.22/Modules/FindFLTK.cmake
new file mode 100644
index 0000000..d54d2f6
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindFLTK.cmake
@@ -0,0 +1,344 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindFLTK
+--------
+
+Find the Fast Light Toolkit (FLTK) library
+
+Input Variables
+^^^^^^^^^^^^^^^
+
+By default this module will search for all of the FLTK components and
+add them to the ``FLTK_LIBRARIES`` variable.  You can limit the components
+which get placed in ``FLTK_LIBRARIES`` by defining one or more of the
+following three options:
+
+``FLTK_SKIP_OPENGL``
+  Set to true to disable searching for the FLTK GL library
+
+``FLTK_SKIP_FORMS``
+  Set to true to disable searching for the FLTK Forms library
+
+``FLTK_SKIP_IMAGES``
+  Set to true to disable searching for the FLTK Images library
+
+FLTK is composed also by a binary tool. You can set the following option:
+
+``FLTK_SKIP_FLUID``
+  Set to true to not look for the FLUID binary
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+The following variables will be defined:
+
+``FLTK_FOUND``
+  True if all components not skipped were found
+
+``FLTK_INCLUDE_DIR``
+  Path to the include directory for FLTK header files
+
+``FLTK_LIBRARIES``
+  List of the FLTK libraries found
+
+``FLTK_FLUID_EXECUTABLE``
+  Path to the FLUID binary tool
+
+``FLTK_WRAP_UI``
+  True if FLUID is found, used to enable the FLTK_WRAP_UI command
+
+Cache Variables
+^^^^^^^^^^^^^^^
+
+The following cache variables are also available to set or use:
+
+``FLTK_BASE_LIBRARY_RELEASE``
+  The FLTK base library (optimized)
+
+``FLTK_BASE_LIBRARY_DEBUG``
+  The FLTK base library (debug)
+
+``FLTK_GL_LIBRARY_RELEASE``
+  The FLTK GL library (optimized)
+
+``FLTK_GL_LIBRARY_DEBUG``
+  The FLTK GL library (debug)
+
+``FLTK_FORMS_LIBRARY_RELEASE``
+  The FLTK Forms library (optimized)
+
+``FLTK_FORMS_LIBRARY_DEBUG``
+  The FLTK Forms library (debug)
+
+``FLTK_IMAGES_LIBRARY_RELEASE``
+  The FLTK Images protobuf library (optimized)
+
+``FLTK_IMAGES_LIBRARY_DEBUG``
+  The FLTK Images library (debug)
+
+.. versionadded:: 3.11
+  Debug and Release variants are found separately and use per-configuration
+  variables.
+#]=======================================================================]
+
+if(NOT FLTK_SKIP_OPENGL)
+  find_package(OpenGL)
+endif()
+
+#  Platform dependent libraries required by FLTK
+if(WIN32)
+  if(NOT CYGWIN)
+    if(BORLAND)
+      set( FLTK_PLATFORM_DEPENDENT_LIBS import32 )
+    else()
+      set( FLTK_PLATFORM_DEPENDENT_LIBS wsock32 comctl32 )
+    endif()
+  endif()
+endif()
+
+if(UNIX)
+  include(${CMAKE_CURRENT_LIST_DIR}/FindX11.cmake)
+  find_library(FLTK_MATH_LIBRARY m)
+  set( FLTK_PLATFORM_DEPENDENT_LIBS ${X11_LIBRARIES} ${FLTK_MATH_LIBRARY})
+endif()
+
+if(APPLE)
+  set( FLTK_PLATFORM_DEPENDENT_LIBS  "-framework Carbon -framework Cocoa -framework ApplicationServices -lz")
+endif()
+
+# If FLTK_INCLUDE_DIR is already defined we assign its value to FLTK_DIR.
+if(FLTK_INCLUDE_DIR)
+  set(FLTK_DIR ${FLTK_INCLUDE_DIR})
+endif()
+
+
+# If FLTK has been built using CMake we try to find everything directly
+set(FLTK_DIR_STRING "directory containing FLTKConfig.cmake.  This is either the root of the build tree, or PREFIX/lib/fltk for an installation.")
+
+# Search only if the location is not already known.
+if(NOT FLTK_DIR)
+  # Get the system search path as a list.
+  file(TO_CMAKE_PATH "$ENV{PATH}" FLTK_DIR_SEARCH2)
+
+  # Construct a set of paths relative to the system search path.
+  set(FLTK_DIR_SEARCH "")
+  foreach(dir ${FLTK_DIR_SEARCH2})
+    set(FLTK_DIR_SEARCH ${FLTK_DIR_SEARCH} "${dir}/../lib/fltk")
+  endforeach()
+  string(REPLACE "//" "/" FLTK_DIR_SEARCH "${FLTK_DIR_SEARCH}")
+
+  #
+  # Look for an installation or build tree.
+  #
+  find_path(FLTK_DIR FLTKConfig.cmake
+    # Look for an environment variable FLTK_DIR.
+    HINTS
+      ENV FLTK_DIR
+
+    # Look in places relative to the system executable search path.
+    ${FLTK_DIR_SEARCH}
+
+    PATH_SUFFIXES
+    fltk
+    fltk/include
+    lib/fltk
+    lib/fltk/include
+
+    # Help the user find it if we cannot.
+    DOC "The ${FLTK_DIR_STRING}"
+    )
+endif()
+
+# Check if FLTK was built using CMake
+foreach(fltk_include IN LISTS FLTK_DIR)
+  if(EXISTS "${fltk_include}/FLTKConfig.cmake")
+    set(FLTK_BUILT_WITH_CMAKE 1)
+    set(FLTK_CMAKE_PATH "${fltk_include}/FLTKConfig.cmake")
+    break()
+  endif()
+endforeach()
+
+if(FLTK_BUILT_WITH_CMAKE)
+  set(FLTK_FOUND 1)
+  include("${FLTK_CMAKE_PATH}")
+
+  # Fluid
+  if(FLUID_COMMAND)
+    set(FLTK_FLUID_EXECUTABLE ${FLUID_COMMAND} CACHE FILEPATH "Fluid executable")
+  else()
+    find_program(FLTK_FLUID_EXECUTABLE fluid PATHS
+      ${FLTK_EXECUTABLE_DIRS}
+      ${FLTK_EXECUTABLE_DIRS}/RelWithDebInfo
+      ${FLTK_EXECUTABLE_DIRS}/Debug
+      ${FLTK_EXECUTABLE_DIRS}/Release
+      NO_SYSTEM_PATH)
+  endif()
+  # mark_as_advanced(FLTK_FLUID_EXECUTABLE)
+
+  set(FLTK_INCLUDE_DIR ${FLTK_DIR})
+  link_directories(${FLTK_LIBRARY_DIRS})
+
+  set(FLTK_BASE_LIBRARY fltk)
+  set(FLTK_GL_LIBRARY fltk_gl)
+  set(FLTK_FORMS_LIBRARY fltk_forms)
+  set(FLTK_IMAGES_LIBRARY fltk_images)
+
+  # Add the extra libraries
+  load_cache(${FLTK_DIR}
+    READ_WITH_PREFIX
+    FL FLTK_USE_SYSTEM_JPEG
+    FL FLTK_USE_SYSTEM_PNG
+    FL FLTK_USE_SYSTEM_ZLIB
+    )
+
+  set(FLTK_IMAGES_LIBS "")
+  if(FLFLTK_USE_SYSTEM_JPEG)
+    set(FLTK_IMAGES_LIBS ${FLTK_IMAGES_LIBS} fltk_jpeg)
+  endif()
+  if(FLFLTK_USE_SYSTEM_PNG)
+    set(FLTK_IMAGES_LIBS ${FLTK_IMAGES_LIBS} fltk_png)
+  endif()
+  if(FLFLTK_USE_SYSTEM_ZLIB)
+    set(FLTK_IMAGES_LIBS ${FLTK_IMAGES_LIBS} fltk_zlib)
+  endif()
+  set(FLTK_IMAGES_LIBS "${FLTK_IMAGES_LIBS}" CACHE INTERNAL
+    "Extra libraries for fltk_images library.")
+
+else()
+
+  # if FLTK was not built using CMake
+  # Find fluid executable.
+  find_program(FLTK_FLUID_EXECUTABLE fluid ${FLTK_INCLUDE_DIR}/fluid)
+
+  # Use location of fluid to help find everything else.
+  set(FLTK_INCLUDE_SEARCH_PATH "")
+  set(FLTK_LIBRARY_SEARCH_PATH "")
+  if(FLTK_FLUID_EXECUTABLE)
+    get_filename_component(FLTK_BIN_DIR "${FLTK_FLUID_EXECUTABLE}" PATH)
+    set(FLTK_INCLUDE_SEARCH_PATH ${FLTK_INCLUDE_SEARCH_PATH}
+      ${FLTK_BIN_DIR}/../include ${FLTK_BIN_DIR}/..)
+    set(FLTK_LIBRARY_SEARCH_PATH ${FLTK_LIBRARY_SEARCH_PATH}
+      ${FLTK_BIN_DIR}/../lib)
+    set(FLTK_WRAP_UI 1)
+  endif()
+
+  #
+  # Try to find FLTK include dir using fltk-config
+  #
+  if(UNIX)
+    # Use fltk-config to generate a list of possible include directories
+    find_program(FLTK_CONFIG_SCRIPT fltk-config PATHS ${FLTK_BIN_DIR})
+    if(FLTK_CONFIG_SCRIPT)
+      if(NOT FLTK_INCLUDE_DIR)
+        exec_program(${FLTK_CONFIG_SCRIPT} ARGS --cxxflags OUTPUT_VARIABLE FLTK_CXXFLAGS)
+        if(FLTK_CXXFLAGS)
+          string(REGEX MATCHALL "-I[^ ]*" _fltk_temp_dirs ${FLTK_CXXFLAGS})
+          string(REPLACE "-I" "" _fltk_temp_dirs "${_fltk_temp_dirs}")
+          foreach(_dir ${_fltk_temp_dirs})
+            string(STRIP ${_dir} _output)
+            list(APPEND _FLTK_POSSIBLE_INCLUDE_DIRS ${_output})
+          endforeach()
+        endif()
+      endif()
+    endif()
+  endif()
+
+  list(APPEND FLTK_INCLUDE_SEARCH_PATH ${_FLTK_POSSIBLE_INCLUDE_DIRS})
+
+  find_path(FLTK_INCLUDE_DIR
+      NAMES FL/Fl.h FL/Fl.H    # fltk 1.1.9 has Fl.H (#8376)
+      PATH_SUFFIXES fltk fltk/include
+      PATHS ${FLTK_INCLUDE_SEARCH_PATH})
+
+  #
+  # Try to find FLTK library
+  if(UNIX)
+    if(FLTK_CONFIG_SCRIPT)
+      exec_program(${FLTK_CONFIG_SCRIPT} ARGS --libs OUTPUT_VARIABLE _FLTK_POSSIBLE_LIBS)
+      if(_FLTK_POSSIBLE_LIBS)
+        get_filename_component(_FLTK_POSSIBLE_LIBRARY_DIR ${_FLTK_POSSIBLE_LIBS} PATH)
+      endif()
+    endif()
+  endif()
+
+  list(APPEND FLTK_LIBRARY_SEARCH_PATH ${FLTK_INCLUDE_DIR}/lib ${_FLTK_POSSIBLE_LIBRARY_DIR})
+
+  include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
+
+  # Allow libraries to be set manually
+  if(NOT FLTK_BASE_LIBRARY)
+      find_library(FLTK_BASE_LIBRARY_RELEASE NAMES fltk PATHS ${FLTK_LIBRARY_SEARCH_PATH} PATH_SUFFIXES fltk fltk/lib)
+      find_library(FLTK_BASE_LIBRARY_DEBUG NAMES fltkd PATHS ${FLTK_LIBRARY_SEARCH_PATH} PATH_SUFFIXES fltk fltk/lib)
+      select_library_configurations(FLTK_BASE)
+  endif()
+  if(NOT FLTK_GL_LIBRARY)
+      find_library(FLTK_GL_LIBRARY_RELEASE NAMES fltkgl fltk_gl PATHS ${FLTK_LIBRARY_SEARCH_PATH} PATH_SUFFIXES fltk fltk/lib)
+      find_library(FLTK_GL_LIBRARY_DEBUG NAMES fltkgld fltk_gld PATHS ${FLTK_LIBRARY_SEARCH_PATH} PATH_SUFFIXES fltk fltk/lib)
+      select_library_configurations(FLTK_GL)
+  endif()
+  if(NOT FLTK_FORMS_LIBRARY)
+      find_library(FLTK_FORMS_LIBRARY_RELEASE NAMES fltkforms fltk_forms PATHS ${FLTK_LIBRARY_SEARCH_PATH} PATH_SUFFIXES fltk fltk/lib)
+      find_library(FLTK_FORMS_LIBRARY_DEBUG NAMES fltkformsd fltk_formsd PATHS ${FLTK_LIBRARY_SEARCH_PATH} PATH_SUFFIXES fltk fltk/lib)
+      select_library_configurations(FLTK_FORMS)
+  endif()
+  if(NOT FLTK_IMAGES_LIBRARY)
+      find_library(FLTK_IMAGES_LIBRARY_RELEASE NAMES fltkimages fltk_images PATHS ${FLTK_LIBRARY_SEARCH_PATH} PATH_SUFFIXES fltk fltk/lib)
+      find_library(FLTK_IMAGES_LIBRARY_DEBUG NAMES fltkimagesd fltk_imagesd PATHS ${FLTK_LIBRARY_SEARCH_PATH} PATH_SUFFIXES fltk fltk/lib)
+      select_library_configurations(FLTK_IMAGES)
+  endif()
+
+  # Find the extra libraries needed for the fltk_images library.
+  if(UNIX)
+    if(FLTK_CONFIG_SCRIPT)
+      exec_program(${FLTK_CONFIG_SCRIPT} ARGS --use-images --ldflags
+        OUTPUT_VARIABLE FLTK_IMAGES_LDFLAGS)
+      set(FLTK_LIBS_EXTRACT_REGEX ".*-lfltk_images (.*) -lfltk.*")
+      if("${FLTK_IMAGES_LDFLAGS}" MATCHES "${FLTK_LIBS_EXTRACT_REGEX}")
+        string(REGEX REPLACE " +" ";" FLTK_IMAGES_LIBS "${CMAKE_MATCH_1}")
+        # The EXEC_PROGRAM will not be inherited into subdirectories from
+        # the file that originally included this module.  Save the answer.
+        set(FLTK_IMAGES_LIBS "${FLTK_IMAGES_LIBS}" CACHE INTERNAL
+          "Extra libraries for fltk_images library.")
+      endif()
+    endif()
+  endif()
+
+endif()
+
+# Append all of the required libraries together (by default, everything)
+set(FLTK_LIBRARIES)
+if(NOT FLTK_SKIP_IMAGES)
+  list(APPEND FLTK_LIBRARIES ${FLTK_IMAGES_LIBRARY})
+endif()
+if(NOT FLTK_SKIP_FORMS)
+  list(APPEND FLTK_LIBRARIES ${FLTK_FORMS_LIBRARY})
+endif()
+if(NOT FLTK_SKIP_OPENGL)
+  list(APPEND FLTK_LIBRARIES ${FLTK_GL_LIBRARY} ${OPENGL_gl_LIBRARY})
+  list(APPEND FLTK_INCLUDE_DIR ${OPENGL_INCLUDE_DIR})
+  list(REMOVE_DUPLICATES FLTK_INCLUDE_DIR)
+endif()
+list(APPEND FLTK_LIBRARIES ${FLTK_BASE_LIBRARY})
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+if(FLTK_SKIP_FLUID)
+  FIND_PACKAGE_HANDLE_STANDARD_ARGS(FLTK DEFAULT_MSG FLTK_LIBRARIES FLTK_INCLUDE_DIR)
+else()
+  FIND_PACKAGE_HANDLE_STANDARD_ARGS(FLTK DEFAULT_MSG FLTK_LIBRARIES FLTK_INCLUDE_DIR FLTK_FLUID_EXECUTABLE)
+endif()
+
+if(FLTK_FOUND)
+  if(APPLE)
+    set(FLTK_LIBRARIES ${FLTK_PLATFORM_DEPENDENT_LIBS} ${FLTK_LIBRARIES})
+  else()
+    set(FLTK_LIBRARIES ${FLTK_LIBRARIES} ${FLTK_PLATFORM_DEPENDENT_LIBS})
+  endif()
+
+  # The following deprecated settings are for compatibility with CMake 1.4
+  set (HAS_FLTK ${FLTK_FOUND})
+  set (FLTK_INCLUDE_PATH ${FLTK_INCLUDE_DIR})
+  set (FLTK_FLUID_EXE ${FLTK_FLUID_EXECUTABLE})
+  set (FLTK_LIBRARY ${FLTK_LIBRARIES})
+endif()
diff --git a/share/cmake-3.18/Modules/FindFLTK2.cmake b/share/cmake-3.22/Modules/FindFLTK2.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindFLTK2.cmake
rename to share/cmake-3.22/Modules/FindFLTK2.cmake
diff --git a/share/cmake-3.22/Modules/FindFontconfig.cmake b/share/cmake-3.22/Modules/FindFontconfig.cmake
new file mode 100644
index 0000000..5228831
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindFontconfig.cmake
@@ -0,0 +1,103 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindFontconfig
+--------------
+
+.. versionadded:: 3.14
+
+Find Fontconfig headers and library.
+
+Imported Targets
+^^^^^^^^^^^^^^^^
+
+``Fontconfig::Fontconfig``
+  The Fontconfig library, if found.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This will define the following variables in your project:
+
+``Fontconfig_FOUND``
+  true if (the requested version of) Fontconfig is available.
+``Fontconfig_VERSION``
+  the version of Fontconfig.
+``Fontconfig_LIBRARIES``
+  the libraries to link against to use Fontconfig.
+``Fontconfig_INCLUDE_DIRS``
+  where to find the Fontconfig headers.
+``Fontconfig_COMPILE_OPTIONS``
+  this should be passed to target_compile_options(), if the
+  target is not used for linking
+
+#]=======================================================================]
+
+
+# use pkg-config to get the directories and then use these values
+# in the FIND_PATH() and FIND_LIBRARY() calls
+find_package(PkgConfig QUIET)
+pkg_check_modules(PKG_FONTCONFIG QUIET fontconfig)
+set(Fontconfig_COMPILE_OPTIONS ${PKG_FONTCONFIG_CFLAGS_OTHER})
+set(Fontconfig_VERSION ${PKG_FONTCONFIG_VERSION})
+
+find_path( Fontconfig_INCLUDE_DIR
+  NAMES
+    fontconfig/fontconfig.h
+  HINTS
+    ${PKG_FONTCONFIG_INCLUDE_DIRS}
+    /usr/X11/include
+)
+
+find_library( Fontconfig_LIBRARY
+  NAMES
+    fontconfig
+  PATHS
+    ${PKG_FONTCONFIG_LIBRARY_DIRS}
+)
+
+if (Fontconfig_INCLUDE_DIR AND NOT Fontconfig_VERSION)
+  file(STRINGS ${Fontconfig_INCLUDE_DIR}/fontconfig/fontconfig.h _contents REGEX "^#define[ \t]+FC_[A-Z]+[ \t]+[0-9]+$")
+  unset(Fontconfig_VERSION)
+  foreach(VPART MAJOR MINOR REVISION)
+    foreach(VLINE ${_contents})
+      if(VLINE MATCHES "^#define[\t ]+FC_${VPART}[\t ]+([0-9]+)$")
+        set(Fontconfig_VERSION_PART "${CMAKE_MATCH_1}")
+        if(Fontconfig_VERSION)
+          string(APPEND Fontconfig_VERSION ".${Fontconfig_VERSION_PART}")
+        else()
+          set(Fontconfig_VERSION "${Fontconfig_VERSION_PART}")
+        endif()
+      endif()
+    endforeach()
+  endforeach()
+endif ()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Fontconfig
+  FOUND_VAR
+    Fontconfig_FOUND
+  REQUIRED_VARS
+    Fontconfig_LIBRARY
+    Fontconfig_INCLUDE_DIR
+  VERSION_VAR
+    Fontconfig_VERSION
+)
+
+
+if(Fontconfig_FOUND AND NOT TARGET Fontconfig::Fontconfig)
+  add_library(Fontconfig::Fontconfig UNKNOWN IMPORTED)
+  set_target_properties(Fontconfig::Fontconfig PROPERTIES
+    IMPORTED_LOCATION "${Fontconfig_LIBRARY}"
+    INTERFACE_COMPILE_OPTIONS "${Fontconfig_COMPILE_OPTIONS}"
+    INTERFACE_INCLUDE_DIRECTORIES "${Fontconfig_INCLUDE_DIR}"
+  )
+endif()
+
+mark_as_advanced(Fontconfig_LIBRARY Fontconfig_INCLUDE_DIR)
+
+if(Fontconfig_FOUND)
+  set(Fontconfig_LIBRARIES ${Fontconfig_LIBRARY})
+  set(Fontconfig_INCLUDE_DIRS ${Fontconfig_INCLUDE_DIR})
+endif()
diff --git a/share/cmake-3.22/Modules/FindFreetype.cmake b/share/cmake-3.22/Modules/FindFreetype.cmake
new file mode 100644
index 0000000..82885cb
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindFreetype.cmake
@@ -0,0 +1,204 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindFreetype
+------------
+
+Find the FreeType font renderer includes and library.
+
+Imported Targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.10
+
+This module defines the following :prop_tgt:`IMPORTED` target:
+
+``Freetype::Freetype``
+  The Freetype ``freetype`` library, if found
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This module will set the following variables in your project:
+
+``FREETYPE_FOUND``
+  true if the Freetype headers and libraries were found
+``FREETYPE_INCLUDE_DIRS``
+  directories containing the Freetype headers. This is the
+  concatenation of the variables:
+
+  ``FREETYPE_INCLUDE_DIR_ft2build``
+    directory holding the main Freetype API configuration header
+  ``FREETYPE_INCLUDE_DIR_freetype2``
+    directory holding Freetype public headers
+``FREETYPE_LIBRARIES``
+  the library to link against
+``FREETYPE_VERSION_STRING``
+  the version of freetype found
+
+.. versionadded:: 3.7
+  Debug and Release variants are found separately.
+
+Hints
+^^^^^
+
+The user may set the environment variable ``FREETYPE_DIR`` to the root
+directory of a Freetype installation.
+#]=======================================================================]
+
+# Created by Eric Wing.
+# Modifications by Alexander Neundorf.
+# This file has been renamed to "FindFreetype.cmake" instead of the correct
+# "FindFreeType.cmake" in order to be compatible with the one from KDE4, Alex.
+
+# Ugh, FreeType seems to use some #include trickery which
+# makes this harder than it should be. It looks like they
+# put ft2build.h in a common/easier-to-find location which
+# then contains a #include to a more specific header in a
+# more specific location (#include <freetype/config/ftheader.h>).
+# Then from there, they need to set a bunch of #define's
+# so you can do something like:
+# #include FT_FREETYPE_H
+# Unfortunately, using CMake's mechanisms like include_directories()
+# wants explicit full paths and this trickery doesn't work too well.
+# I'm going to attempt to cut out the middleman and hope
+# everything still works.
+
+set(FREETYPE_FIND_ARGS
+  HINTS
+    ENV FREETYPE_DIR
+  PATHS
+    ENV GTKMM_BASEPATH
+    [HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path]
+    [HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]
+)
+
+find_path(
+  FREETYPE_INCLUDE_DIR_ft2build
+  ft2build.h
+  ${FREETYPE_FIND_ARGS}
+  PATH_SUFFIXES
+    include/freetype2
+    include
+    freetype2
+)
+
+find_path(
+  FREETYPE_INCLUDE_DIR_freetype2
+  NAMES
+    freetype/config/ftheader.h
+    config/ftheader.h
+  ${FREETYPE_FIND_ARGS}
+  PATH_SUFFIXES
+    include/freetype2
+    include
+    freetype2
+)
+
+if(NOT FREETYPE_LIBRARY)
+  find_library(FREETYPE_LIBRARY_RELEASE
+    NAMES
+      freetype
+      libfreetype
+      freetype219
+    ${FREETYPE_FIND_ARGS}
+    PATH_SUFFIXES
+      lib
+  )
+  find_library(FREETYPE_LIBRARY_DEBUG
+    NAMES
+      freetyped
+      libfreetyped
+      freetype219d
+    ${FREETYPE_FIND_ARGS}
+    PATH_SUFFIXES
+      lib
+  )
+  include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
+  select_library_configurations(FREETYPE)
+else()
+  # on Windows, ensure paths are in canonical format (forward slahes):
+  file(TO_CMAKE_PATH "${FREETYPE_LIBRARY}" FREETYPE_LIBRARY)
+endif()
+
+unset(FREETYPE_FIND_ARGS)
+
+# set the user variables
+if(FREETYPE_INCLUDE_DIR_ft2build AND FREETYPE_INCLUDE_DIR_freetype2)
+  set(FREETYPE_INCLUDE_DIRS "${FREETYPE_INCLUDE_DIR_ft2build};${FREETYPE_INCLUDE_DIR_freetype2}")
+  list(REMOVE_DUPLICATES FREETYPE_INCLUDE_DIRS)
+endif()
+set(FREETYPE_LIBRARIES "${FREETYPE_LIBRARY}")
+
+if(EXISTS "${FREETYPE_INCLUDE_DIR_freetype2}/freetype/freetype.h")
+  set(FREETYPE_H "${FREETYPE_INCLUDE_DIR_freetype2}/freetype/freetype.h")
+elseif(EXISTS "${FREETYPE_INCLUDE_DIR_freetype2}/freetype.h")
+  set(FREETYPE_H "${FREETYPE_INCLUDE_DIR_freetype2}/freetype.h")
+endif()
+
+if(FREETYPE_INCLUDE_DIR_freetype2 AND FREETYPE_H)
+  file(STRINGS "${FREETYPE_H}" freetype_version_str
+       REGEX "^#[\t ]*define[\t ]+FREETYPE_(MAJOR|MINOR|PATCH)[\t ]+[0-9]+$")
+
+  unset(FREETYPE_VERSION_STRING)
+  foreach(VPART MAJOR MINOR PATCH)
+    foreach(VLINE ${freetype_version_str})
+      if(VLINE MATCHES "^#[\t ]*define[\t ]+FREETYPE_${VPART}[\t ]+([0-9]+)$")
+        set(FREETYPE_VERSION_PART "${CMAKE_MATCH_1}")
+        if(FREETYPE_VERSION_STRING)
+          string(APPEND FREETYPE_VERSION_STRING ".${FREETYPE_VERSION_PART}")
+        else()
+          set(FREETYPE_VERSION_STRING "${FREETYPE_VERSION_PART}")
+        endif()
+        unset(FREETYPE_VERSION_PART)
+      endif()
+    endforeach()
+  endforeach()
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+
+find_package_handle_standard_args(
+  Freetype
+  REQUIRED_VARS
+    FREETYPE_LIBRARY
+    FREETYPE_INCLUDE_DIRS
+  VERSION_VAR
+    FREETYPE_VERSION_STRING
+)
+
+mark_as_advanced(
+  FREETYPE_INCLUDE_DIR_freetype2
+  FREETYPE_INCLUDE_DIR_ft2build
+)
+
+if(Freetype_FOUND)
+  if(NOT TARGET Freetype::Freetype)
+    add_library(Freetype::Freetype UNKNOWN IMPORTED)
+    set_target_properties(Freetype::Freetype PROPERTIES
+      INTERFACE_INCLUDE_DIRECTORIES "${FREETYPE_INCLUDE_DIRS}")
+
+    if(FREETYPE_LIBRARY_RELEASE)
+      set_property(TARGET Freetype::Freetype APPEND PROPERTY
+        IMPORTED_CONFIGURATIONS RELEASE)
+      set_target_properties(Freetype::Freetype PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
+        IMPORTED_LOCATION_RELEASE "${FREETYPE_LIBRARY_RELEASE}")
+    endif()
+
+    if(FREETYPE_LIBRARY_DEBUG)
+      set_property(TARGET Freetype::Freetype APPEND PROPERTY
+        IMPORTED_CONFIGURATIONS DEBUG)
+      set_target_properties(Freetype::Freetype PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
+        IMPORTED_LOCATION_DEBUG "${FREETYPE_LIBRARY_DEBUG}")
+    endif()
+
+    if(NOT FREETYPE_LIBRARY_RELEASE AND NOT FREETYPE_LIBRARY_DEBUG)
+      set_target_properties(Freetype::Freetype PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+        IMPORTED_LOCATION "${FREETYPE_LIBRARY}")
+    endif()
+  endif()
+endif()
diff --git a/share/cmake-3.18/Modules/FindGCCXML.cmake b/share/cmake-3.22/Modules/FindGCCXML.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindGCCXML.cmake
rename to share/cmake-3.22/Modules/FindGCCXML.cmake
diff --git a/share/cmake-3.22/Modules/FindGDAL.cmake b/share/cmake-3.22/Modules/FindGDAL.cmake
new file mode 100644
index 0000000..5237e15
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindGDAL.cmake
@@ -0,0 +1,199 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindGDAL
+--------
+
+Find Geospatial Data Abstraction Library (GDAL).
+
+IMPORTED Targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.14
+
+This module defines :prop_tgt:`IMPORTED` target ``GDAL::GDAL``
+if GDAL has been found.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This module will set the following variables in your project:
+
+``GDAL_FOUND``
+  True if GDAL is found.
+``GDAL_INCLUDE_DIRS``
+  Include directories for GDAL headers.
+``GDAL_LIBRARIES``
+  Libraries to link to GDAL.
+``GDAL_VERSION``
+  .. versionadded:: 3.14
+    The version of GDAL found.
+
+Cache variables
+^^^^^^^^^^^^^^^
+
+The following cache variables may also be set:
+
+``GDAL_LIBRARY``
+  The libgdal library file.
+``GDAL_INCLUDE_DIR``
+  The directory containing ``gdal.h``.
+
+Hints
+^^^^^
+
+Set ``GDAL_DIR`` or ``GDAL_ROOT`` in the environment to specify the
+GDAL installation prefix.
+
+The following variables may be set to modify the search strategy:
+
+``FindGDAL_SKIP_GDAL_CONFIG``
+  If set, ``gdal-config`` will not be used. This can be useful if there are
+  GDAL libraries built with autotools (which provide the tool) and CMake (which
+  do not) in the same environment.
+``GDAL_ADDITIONAL_LIBRARY_VERSIONS``
+  Extra versions of library names to search for.
+#]=======================================================================]
+
+# $GDALDIR is an environment variable that would
+# correspond to the ./configure --prefix=$GDAL_DIR
+# used in building gdal.
+#
+# Created by Eric Wing. I'm not a gdal user, but OpenSceneGraph uses it
+# for osgTerrain so I whipped this module together for completeness.
+# I actually don't know the conventions or where files are typically
+# placed in distros.
+# Any real gdal users are encouraged to correct this (but please don't
+# break the OS X framework stuff when doing so which is what usually seems
+# to happen).
+
+# This makes the presumption that you are include gdal.h like
+#
+#include "gdal.h"
+
+find_path(GDAL_INCLUDE_DIR gdal.h
+  HINTS
+    ENV GDAL_DIR
+    ENV GDAL_ROOT
+  PATH_SUFFIXES
+    include/gdal
+    include/GDAL
+    include
+  DOC "Path to the GDAL include directory"
+)
+mark_as_advanced(GDAL_INCLUDE_DIR)
+
+if(UNIX AND NOT FindGDAL_SKIP_GDAL_CONFIG)
+    # Use gdal-config to obtain the library version (this should hopefully
+    # allow us to -lgdal1.x.y where x.y are correct version)
+    # For some reason, libgdal development packages do not contain
+    # libgdal.so...
+    find_program(GDAL_CONFIG gdal-config
+        HINTS
+          ENV GDAL_DIR
+          ENV GDAL_ROOT
+        PATH_SUFFIXES bin
+        DOC "Path to the gdal-config tool"
+    )
+    mark_as_advanced(GDAL_CONFIG)
+
+    if(GDAL_CONFIG)
+        execute_process(COMMAND ${GDAL_CONFIG} --libs OUTPUT_VARIABLE GDAL_CONFIG_LIBS)
+
+        if(GDAL_CONFIG_LIBS)
+            # treat the output as a command line and split it up
+            separate_arguments(args NATIVE_COMMAND "${GDAL_CONFIG_LIBS}")
+
+            # only consider libraries whose name matches this pattern
+            set(name_pattern "[gG][dD][aA][lL]")
+
+            # consider each entry as a possible library path, name, or parent directory
+            foreach(arg IN LISTS args)
+                # library name
+                if("${arg}" MATCHES "^-l(.*)$")
+                    set(lib "${CMAKE_MATCH_1}")
+
+                    # only consider libraries whose name matches the expected pattern
+                    if("${lib}" MATCHES "${name_pattern}")
+                        list(APPEND _gdal_lib "${lib}")
+                    endif()
+                # library search path
+                elseif("${arg}" MATCHES "^-L(.*)$")
+                    list(APPEND _gdal_libpath "${CMAKE_MATCH_1}")
+                # assume this is a full path to a library
+                elseif(IS_ABSOLUTE "${arg}" AND EXISTS "${arg}")
+                    # extract the file name
+                    get_filename_component(lib "${arg}" NAME)
+
+                    # only consider libraries whose name matches the expected pattern
+                    if(NOT "${lib}" MATCHES "${name_pattern}")
+                        continue()
+                    endif()
+
+                    # extract the file directory
+                    get_filename_component(dir "${arg}" DIRECTORY)
+
+                    # remove library prefixes/suffixes
+                    string(REGEX REPLACE "^(${CMAKE_SHARED_LIBRARY_PREFIX}|${CMAKE_STATIC_LIBRARY_PREFIX})" "" lib "${lib}")
+                    string(REGEX REPLACE "(${CMAKE_SHARED_LIBRARY_SUFFIX}|${CMAKE_STATIC_LIBRARY_SUFFIX})$" "" lib "${lib}")
+
+                    # use the file name and directory as hints
+                    list(APPEND _gdal_libpath "${dir}")
+                    list(APPEND _gdal_lib "${lib}")
+                endif()
+            endforeach()
+        endif()
+    endif()
+endif()
+
+# GDAL name its library when built with CMake as `gdal${major}${minor}`.
+set(_gdal_versions
+    ${GDAL_ADDITIONAL_LIBRARY_VERSIONS} 3.0 2.4 2.3 2.2 2.1 2.0 1.11 1.10 1.9 1.8 1.7 1.6 1.5 1.4 1.3 1.2)
+
+set(_gdal_libnames)
+foreach (_gdal_version IN LISTS _gdal_versions)
+    string(REPLACE "." "" _gdal_version "${_gdal_version}")
+    list(APPEND _gdal_libnames "gdal${_gdal_version}" "GDAL${_gdal_version}")
+endforeach ()
+unset(_gdal_version)
+unset(_gdal_versions)
+
+find_library(GDAL_LIBRARY
+  NAMES ${_gdal_lib} ${_gdal_libnames} gdal gdal_i gdal1.5.0 gdal1.4.0 gdal1.3.2 GDAL
+  HINTS
+     ENV GDAL_DIR
+     ENV GDAL_ROOT
+     ${_gdal_libpath}
+  PATH_SUFFIXES lib
+  DOC "Path to the GDAL library"
+)
+mark_as_advanced(GDAL_LIBRARY)
+unset(_gdal_libnames)
+unset(_gdal_lib)
+
+if (EXISTS "${GDAL_INCLUDE_DIR}/gdal_version.h")
+    file(STRINGS "${GDAL_INCLUDE_DIR}/gdal_version.h" _gdal_version
+        REGEX "GDAL_RELEASE_NAME")
+    string(REGEX REPLACE ".*\"\(.*\)\"" "\\1" GDAL_VERSION "${_gdal_version}")
+    unset(_gdal_version)
+else ()
+    set(GDAL_VERSION GDAL_VERSION-NOTFOUND)
+endif ()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(GDAL
+    VERSION_VAR GDAL_VERSION
+    REQUIRED_VARS GDAL_LIBRARY GDAL_INCLUDE_DIR)
+
+if (GDAL_FOUND)
+    set(GDAL_LIBRARIES ${GDAL_LIBRARY})
+    set(GDAL_INCLUDE_DIRS ${GDAL_INCLUDE_DIR})
+
+    if (NOT TARGET GDAL::GDAL)
+        add_library(GDAL::GDAL UNKNOWN IMPORTED)
+        set_target_properties(GDAL::GDAL PROPERTIES
+            IMPORTED_LOCATION "${GDAL_LIBRARY}"
+            INTERFACE_INCLUDE_DIRECTORIES "${GDAL_INCLUDE_DIR}")
+    endif ()
+endif ()
diff --git a/share/cmake-3.22/Modules/FindGIF.cmake b/share/cmake-3.22/Modules/FindGIF.cmake
new file mode 100644
index 0000000..cea9cd8
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindGIF.cmake
@@ -0,0 +1,128 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindGIF
+-------
+
+This finds the Graphics Interchange Format (GIF) library (``giflib``)
+
+Imported targets
+^^^^^^^^^^^^^^^^
+
+This module defines the following :prop_tgt:`IMPORTED` target:
+
+``GIF::GIF``
+  The ``giflib`` library, if found.
+
+Result variables
+^^^^^^^^^^^^^^^^
+
+This module will set the following variables in your project:
+
+``GIF_FOUND``
+  If false, do not try to use GIF.
+``GIF_INCLUDE_DIRS``
+  where to find gif_lib.h, etc.
+``GIF_LIBRARIES``
+  the libraries needed to use GIF.
+``GIF_VERSION``
+  3, 4 or a full version string (eg 5.1.4) for versions >= 4.1.6.
+
+Cache variables
+^^^^^^^^^^^^^^^
+
+The following cache variables may also be set:
+
+``GIF_INCLUDE_DIR``
+  where to find the GIF headers.
+``GIF_LIBRARY``
+  where to find the GIF library.
+
+Hints
+^^^^^
+
+``GIF_DIR`` is an environment variable that would correspond to the
+``./configure --prefix=$GIF_DIR``.
+#]=======================================================================]
+
+# Created by Eric Wing.
+# Modifications by Alexander Neundorf, Ben Campbell
+
+find_path(GIF_INCLUDE_DIR gif_lib.h
+  HINTS
+    ENV GIF_DIR
+  PATH_SUFFIXES include
+)
+
+# the gif library can have many names :-/
+set(POTENTIAL_GIF_LIBS gif libgif ungif libungif giflib giflib4)
+
+find_library(GIF_LIBRARY
+  NAMES ${POTENTIAL_GIF_LIBS}
+  NAMES_PER_DIR
+  HINTS
+    ENV GIF_DIR
+  PATH_SUFFIXES lib
+)
+
+# Very basic version detection.
+# The GIF_LIB_VERSION string in gif_lib.h seems to be unreliable, since it seems
+# to be always " Version 2.0, " in versions 3.x of giflib.
+# In version 4 the member UserData was added to GifFileType, so we check for this
+# one.
+# Versions after 4.1.6 define GIFLIB_MAJOR, GIFLIB_MINOR, and GIFLIB_RELEASE
+# see http://giflib.sourceforge.net/gif_lib.html#compatibility
+if(GIF_INCLUDE_DIR)
+  include(${CMAKE_CURRENT_LIST_DIR}/CMakePushCheckState.cmake)
+  include(${CMAKE_CURRENT_LIST_DIR}/CheckStructHasMember.cmake)
+  CMAKE_PUSH_CHECK_STATE()
+  set(CMAKE_REQUIRED_QUIET ${GIF_FIND_QUIETLY})
+  set(CMAKE_REQUIRED_INCLUDES "${GIF_INCLUDE_DIR}")
+
+  # Check for the specific version defines (>=4.1.6 only)
+  file(STRINGS ${GIF_INCLUDE_DIR}/gif_lib.h _GIF_DEFS REGEX "^[ \t]*#define[ \t]+GIFLIB_(MAJOR|MINOR|RELEASE)")
+  if(_GIF_DEFS)
+    # yay - got exact version info
+    string(REGEX REPLACE ".*GIFLIB_MAJOR ([0-9]+).*" "\\1" _GIF_MAJ "${_GIF_DEFS}")
+    string(REGEX REPLACE ".*GIFLIB_MINOR ([0-9]+).*" "\\1" _GIF_MIN "${_GIF_DEFS}")
+    string(REGEX REPLACE ".*GIFLIB_RELEASE ([0-9]+).*" "\\1" _GIF_REL "${_GIF_DEFS}")
+    set(GIF_VERSION "${_GIF_MAJ}.${_GIF_MIN}.${_GIF_REL}")
+  else()
+    # use UserData field to sniff version instead
+    CHECK_STRUCT_HAS_MEMBER(GifFileType UserData gif_lib.h GIF_GifFileType_UserData )
+    if(GIF_GifFileType_UserData)
+      set(GIF_VERSION 4)
+    else()
+      set(GIF_VERSION 3)
+    endif()
+  endif()
+
+  unset(_GIF_MAJ)
+  unset(_GIF_MIN)
+  unset(_GIF_REL)
+  unset(_GIF_DEFS)
+  CMAKE_POP_CHECK_STATE()
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(GIF  REQUIRED_VARS  GIF_LIBRARY  GIF_INCLUDE_DIR
+                                       VERSION_VAR GIF_VERSION )
+
+if(GIF_FOUND)
+  set(GIF_INCLUDE_DIRS "${GIF_INCLUDE_DIR}")
+  set(GIF_LIBRARIES ${GIF_LIBRARY})
+
+  if(NOT TARGET GIF::GIF)
+    add_library(GIF::GIF UNKNOWN IMPORTED)
+    set_target_properties(GIF::GIF PROPERTIES
+      INTERFACE_INCLUDE_DIRECTORIES "${GIF_INCLUDE_DIRS}")
+    if(EXISTS "${GIF_LIBRARY}")
+      set_target_properties(GIF::GIF PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+        IMPORTED_LOCATION "${GIF_LIBRARY}")
+    endif()
+  endif()
+endif()
+
+mark_as_advanced(GIF_INCLUDE_DIR GIF_LIBRARY)
diff --git a/share/cmake-3.22/Modules/FindGLEW.cmake b/share/cmake-3.22/Modules/FindGLEW.cmake
new file mode 100644
index 0000000..b9ebe08
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindGLEW.cmake
@@ -0,0 +1,350 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindGLEW
+--------
+
+Find the OpenGL Extension Wrangler Library (GLEW)
+
+Input Variables
+^^^^^^^^^^^^^^^
+
+The following variables may be set to influence this module's behavior:
+
+``GLEW_USE_STATIC_LIBS``
+  to find and create :prop_tgt:`IMPORTED` target for static linkage.
+
+``GLEW_VERBOSE``
+  to output a detailed log of this module.
+
+Imported Targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.1
+
+This module defines the following :ref:`Imported Targets <Imported Targets>`:
+
+
+``GLEW::glew``
+  The GLEW shared library.
+``GLEW::glew_s``
+  The GLEW static library, if ``GLEW_USE_STATIC_LIBS`` is set to ``TRUE``.
+``GLEW::GLEW``
+  Duplicates either ``GLEW::glew`` or ``GLEW::glew_s`` based on availability.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This module defines the following variables:
+
+``GLEW_INCLUDE_DIRS``
+  include directories for GLEW
+``GLEW_LIBRARIES``
+  libraries to link against GLEW
+``GLEW_SHARED_LIBRARIES``
+  libraries to link against shared GLEW
+``GLEW_STATIC_LIBRARIES``
+  libraries to link against static GLEW
+``GLEW_FOUND``
+  true if GLEW has been found and can be used
+``GLEW_VERSION``
+  GLEW version
+``GLEW_VERSION_MAJOR``
+  GLEW major version
+``GLEW_VERSION_MINOR``
+  GLEW minor version
+``GLEW_VERSION_MICRO``
+  GLEW micro version
+
+.. versionadded:: 3.7
+  Debug and Release variants are found separately.
+
+#]=======================================================================]
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+
+find_package(GLEW CONFIG QUIET)
+
+if(GLEW_FOUND)
+  find_package_handle_standard_args(GLEW DEFAULT_MSG GLEW_CONFIG)
+  return()
+endif()
+
+if(GLEW_VERBOSE)
+  message(STATUS "FindGLEW: did not find GLEW CMake config file. Searching for libraries.")
+endif()
+
+if(APPLE)
+  find_package(OpenGL QUIET)
+
+  if(OpenGL_FOUND)
+    if(GLEW_VERBOSE)
+      message(STATUS "FindGLEW: Found OpenGL Framework.")
+      message(STATUS "FindGLEW: OPENGL_LIBRARIES: ${OPENGL_LIBRARIES}")
+    endif()
+  else()
+    if(GLEW_VERBOSE)
+      message(STATUS "FindGLEW: could not find GLEW library.")
+    endif()
+    return()
+  endif()
+endif()
+
+
+function(__glew_set_find_library_suffix shared_or_static)
+  if((UNIX AND NOT APPLE) AND "${shared_or_static}" MATCHES "SHARED")
+    set(CMAKE_FIND_LIBRARY_SUFFIXES ".so" PARENT_SCOPE)
+  elseif((UNIX AND NOT APPLE) AND "${shared_or_static}" MATCHES "STATIC")
+    set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" PARENT_SCOPE)
+  elseif(APPLE AND "${shared_or_static}" MATCHES "SHARED")
+    set(CMAKE_FIND_LIBRARY_SUFFIXES ".dylib;.so" PARENT_SCOPE)
+  elseif(APPLE AND "${shared_or_static}" MATCHES "STATIC")
+    set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" PARENT_SCOPE)
+  elseif(WIN32 AND "${shared_or_static}" MATCHES "SHARED")
+    set(CMAKE_FIND_LIBRARY_SUFFIXES ".lib" PARENT_SCOPE)
+  elseif(WIN32 AND "${shared_or_static}" MATCHES "STATIC")
+    set(CMAKE_FIND_LIBRARY_SUFFIXES ".lib;.dll.a" PARENT_SCOPE)
+  endif()
+
+  if(GLEW_VERBOSE)
+    message(STATUS "FindGLEW: CMAKE_FIND_LIBRARY_SUFFIXES for ${shared_or_static}: ${CMAKE_FIND_LIBRARY_SUFFIXES}")
+  endif()
+endfunction()
+
+
+if(GLEW_VERBOSE)
+  if(DEFINED GLEW_USE_STATIC_LIBS)
+    message(STATUS "FindGLEW: GLEW_USE_STATIC_LIBS: ${GLEW_USE_STATIC_LIBS}.")
+  else()
+    message(STATUS "FindGLEW: GLEW_USE_STATIC_LIBS is undefined. Treated as FALSE.")
+  endif()
+endif()
+
+find_path(GLEW_INCLUDE_DIR GL/glew.h)
+mark_as_advanced(GLEW_INCLUDE_DIR)
+
+set(GLEW_INCLUDE_DIRS ${GLEW_INCLUDE_DIR})
+
+if(GLEW_VERBOSE)
+  message(STATUS "FindGLEW: GLEW_INCLUDE_DIR: ${GLEW_INCLUDE_DIR}")
+  message(STATUS "FindGLEW: GLEW_INCLUDE_DIRS: ${GLEW_INCLUDE_DIRS}")
+endif()
+
+if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+  set(_arch "x64")
+else()
+  set(_arch "Win32")
+endif()
+
+set(__GLEW_CURRENT_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
+
+__glew_set_find_library_suffix(SHARED)
+
+find_library(GLEW_SHARED_LIBRARY_RELEASE
+             NAMES GLEW glew glew32
+             NAMES_PER_DIR
+             PATH_SUFFIXES lib lib64 libx32 lib/Release/${_arch}
+             PATHS ENV GLEW_ROOT)
+
+find_library(GLEW_SHARED_LIBRARY_DEBUG
+             NAMES GLEWd glewd glew32d
+             NAMES_PER_DIR
+             PATH_SUFFIXES lib lib64
+             PATHS ENV GLEW_ROOT)
+
+
+__glew_set_find_library_suffix(STATIC)
+
+find_library(GLEW_STATIC_LIBRARY_RELEASE
+             NAMES GLEW glew glew32s
+             NAMES_PER_DIR
+             PATH_SUFFIXES lib lib64 libx32 lib/Release/${_arch}
+             PATHS ENV GLEW_ROOT)
+
+find_library(GLEW_STATIC_LIBRARY_DEBUG
+             NAMES GLEWds glewds glew32ds
+             NAMES_PER_DIR
+             PATH_SUFFIXES lib lib64
+             PATHS ENV GLEW_ROOT)
+
+set(CMAKE_FIND_LIBRARY_SUFFIXES ${__GLEW_CURRENT_FIND_LIBRARY_SUFFIXES})
+unset(__GLEW_CURRENT_FIND_LIBRARY_SUFFIXES)
+
+include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
+
+select_library_configurations(GLEW_SHARED)
+select_library_configurations(GLEW_STATIC)
+
+if(NOT GLEW_USE_STATIC_LIBS)
+  set(GLEW_LIBRARIES ${GLEW_SHARED_LIBRARY})
+else()
+  set(GLEW_LIBRARIES ${GLEW_STATIC_LIBRARY})
+endif()
+
+
+if(GLEW_VERBOSE)
+  message(STATUS "FindGLEW: GLEW_SHARED_LIBRARY_RELEASE: ${GLEW_SHARED_LIBRARY_RELEASE}")
+  message(STATUS "FindGLEW: GLEW_STATIC_LIBRARY_RELEASE: ${GLEW_STATIC_LIBRARY_RELEASE}")
+  message(STATUS "FindGLEW: GLEW_SHARED_LIBRARY_DEBUG: ${GLEW_SHARED_LIBRARY_DEBUG}")
+  message(STATUS "FindGLEW: GLEW_STATIC_LIBRARY_DEBUG: ${GLEW_STATIC_LIBRARY_DEBUG}")
+  message(STATUS "FindGLEW: GLEW_SHARED_LIBRARY: ${GLEW_SHARED_LIBRARY}")
+  message(STATUS "FindGLEW: GLEW_STATIC_LIBRARY: ${GLEW_STATIC_LIBRARY}")
+  message(STATUS "FindGLEW: GLEW_LIBRARIES: ${GLEW_LIBRARIES}")
+endif()
+
+
+# Read version from GL/glew.h file
+if(EXISTS "${GLEW_INCLUDE_DIR}/GL/glew.h")
+  file(STRINGS "${GLEW_INCLUDE_DIR}/GL/glew.h" _contents REGEX "^VERSION_.+ [0-9]+")
+  if(_contents)
+    string(REGEX REPLACE ".*VERSION_MAJOR[ \t]+([0-9]+).*" "\\1" GLEW_VERSION_MAJOR "${_contents}")
+    string(REGEX REPLACE ".*VERSION_MINOR[ \t]+([0-9]+).*" "\\1" GLEW_VERSION_MINOR "${_contents}")
+    string(REGEX REPLACE ".*VERSION_MICRO[ \t]+([0-9]+).*" "\\1" GLEW_VERSION_MICRO "${_contents}")
+    set(GLEW_VERSION "${GLEW_VERSION_MAJOR}.${GLEW_VERSION_MINOR}.${GLEW_VERSION_MICRO}")
+  endif()
+endif()
+
+if(GLEW_VERBOSE)
+  message(STATUS "FindGLEW: GLEW_VERSION_MAJOR: ${GLEW_VERSION_MAJOR}")
+  message(STATUS "FindGLEW: GLEW_VERSION_MINOR: ${GLEW_VERSION_MINOR}")
+  message(STATUS "FindGLEW: GLEW_VERSION_MICRO: ${GLEW_VERSION_MICRO}")
+  message(STATUS "FindGLEW: GLEW_VERSION: ${GLEW_VERSION}")
+endif()
+
+find_package_handle_standard_args(GLEW
+                                  REQUIRED_VARS GLEW_INCLUDE_DIRS GLEW_LIBRARIES
+                                  VERSION_VAR GLEW_VERSION)
+
+if(NOT GLEW_FOUND)
+  if(GLEW_VERBOSE)
+    message(STATUS "FindGLEW: could not find GLEW library.")
+  endif()
+  return()
+endif()
+
+
+if(NOT TARGET GLEW::glew AND NOT GLEW_USE_STATIC_LIBS)
+  if(GLEW_VERBOSE)
+    message(STATUS "FindGLEW: Creating GLEW::glew imported target.")
+  endif()
+
+  add_library(GLEW::glew UNKNOWN IMPORTED)
+
+  set_target_properties(GLEW::glew
+                        PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${GLEW_INCLUDE_DIRS}")
+
+  if(APPLE)
+    set_target_properties(GLEW::glew
+                          PROPERTIES INTERFACE_LINK_LIBRARIES OpenGL::GL)
+  endif()
+
+  if(GLEW_SHARED_LIBRARY_RELEASE)
+    set_property(TARGET GLEW::glew
+                 APPEND
+                 PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
+
+    set_target_properties(GLEW::glew
+                          PROPERTIES IMPORTED_LOCATION_RELEASE "${GLEW_SHARED_LIBRARY_RELEASE}")
+  endif()
+
+  if(GLEW_SHARED_LIBRARY_DEBUG)
+    set_property(TARGET GLEW::glew
+                 APPEND
+                 PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
+
+    set_target_properties(GLEW::glew
+                          PROPERTIES IMPORTED_LOCATION_DEBUG "${GLEW_SHARED_LIBRARY_DEBUG}")
+  endif()
+
+elseif(NOT TARGET GLEW::glew_s AND GLEW_USE_STATIC_LIBS)
+  if(GLEW_VERBOSE)
+    message(STATUS "FindGLEW: Creating GLEW::glew_s imported target.")
+  endif()
+
+  add_library(GLEW::glew_s UNKNOWN IMPORTED)
+
+  set_target_properties(GLEW::glew_s
+                        PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${GLEW_INCLUDE_DIRS}")
+
+  if(APPLE)
+    set_target_properties(GLEW::glew_s
+                          PROPERTIES INTERFACE_LINK_LIBRARIES OpenGL::GL)
+  endif()
+
+  if(GLEW_STATIC_LIBRARY_RELEASE)
+    set_property(TARGET GLEW::glew_s
+                 APPEND
+                 PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
+
+    set_target_properties(GLEW::glew_s
+                          PROPERTIES IMPORTED_LOCATION_RELEASE "${GLEW_STATIC_LIBRARY_RELEASE}")
+  endif()
+
+  if(GLEW_STATIC_LIBRARY_DEBUG)
+    set_property(TARGET GLEW::glew_s
+                 APPEND
+                 PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
+
+    set_target_properties(GLEW::glew_s
+                          PROPERTIES IMPORTED_LOCATION_DEBUG "${GLEW_STATIC_LIBRARY_DEBUG}")
+  endif()
+endif()
+
+if(NOT TARGET GLEW::GLEW)
+  if(GLEW_VERBOSE)
+    message(STATUS "FindGLEW: Creating GLEW::GLEW imported target.")
+  endif()
+
+  add_library(GLEW::GLEW UNKNOWN IMPORTED)
+
+  set_target_properties(GLEW::GLEW
+                        PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${GLEW_INCLUDE_DIRS}")
+
+  if(APPLE)
+    set_target_properties(GLEW::GLEW
+                          PROPERTIES INTERFACE_LINK_LIBRARIES OpenGL::GL)
+  endif()
+
+  if(TARGET GLEW::glew)
+    if(GLEW_SHARED_LIBRARY_RELEASE)
+      set_property(TARGET GLEW::GLEW
+                   APPEND
+                   PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
+
+      set_target_properties(GLEW::GLEW
+                            PROPERTIES IMPORTED_LOCATION_RELEASE "${GLEW_SHARED_LIBRARY_RELEASE}")
+    endif()
+
+    if(GLEW_SHARED_LIBRARY_DEBUG)
+      set_property(TARGET GLEW::GLEW
+                   APPEND
+                   PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
+
+      set_target_properties(GLEW::GLEW
+                            PROPERTIES IMPORTED_LOCATION_DEBUG "${GLEW_SHARED_LIBRARY_DEBUG}")
+    endif()
+
+  elseif(TARGET GLEW::glew_s)
+    if(GLEW_STATIC_LIBRARY_RELEASE)
+      set_property(TARGET GLEW::GLEW
+                   APPEND
+                   PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
+
+      set_target_properties(GLEW::GLEW
+                            PROPERTIES IMPORTED_LOCATION_RELEASE "${GLEW_STATIC_LIBRARY_RELEASE}")
+    endif()
+
+    if(GLEW_STATIC_LIBRARY_DEBUG AND GLEW_USE_STATIC_LIBS)
+      set_property(TARGET GLEW::GLEW
+                   APPEND
+                   PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
+
+      set_target_properties(GLEW::GLEW
+                            PROPERTIES IMPORTED_LOCATION_DEBUG "${GLEW_STATIC_LIBRARY_DEBUG}")
+    endif()
+
+  elseif(GLEW_VERBOSE)
+    message(WARNING "FindGLEW: no `GLEW::glew` or `GLEW::glew_s` target was created. Something went wrong in FindGLEW target creation.")
+  endif()
+endif()
diff --git a/share/cmake-3.18/Modules/FindGLU.cmake b/share/cmake-3.22/Modules/FindGLU.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindGLU.cmake
rename to share/cmake-3.22/Modules/FindGLU.cmake
diff --git a/share/cmake-3.22/Modules/FindGLUT.cmake b/share/cmake-3.22/Modules/FindGLUT.cmake
new file mode 100644
index 0000000..dd0975d
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindGLUT.cmake
@@ -0,0 +1,231 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindGLUT
+--------
+
+Find OpenGL Utility Toolkit (GLUT) library and include files.
+
+IMPORTED Targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.1
+
+This module defines the :prop_tgt:`IMPORTED` targets:
+
+``GLUT::GLUT``
+ Defined if the system has GLUT.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This module sets the following variables:
+
+::
+
+  GLUT_INCLUDE_DIR, where to find GL/glut.h, etc.
+  GLUT_LIBRARIES, the libraries to link against
+  GLUT_FOUND, If false, do not try to use GLUT.
+
+Also defined, but not for general use are:
+
+::
+
+  GLUT_glut_LIBRARY = the full path to the glut library.
+  GLUT_Xmu_LIBRARY  = the full path to the Xmu library.
+  GLUT_Xi_LIBRARY   = the full path to the Xi Library.
+
+.. versionadded:: 3.13
+  Debug and Release variants are found separately.
+#]=======================================================================]
+
+include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+
+function(_add_glut_target_simple)
+  if(TARGET GLUT::GLUT)
+    return()
+  endif()
+  add_library(GLUT::GLUT INTERFACE IMPORTED)
+  if(GLUT_INCLUDE_DIRS)
+    target_include_directories(GLUT::GLUT SYSTEM
+      INTERFACE "${GLUT_INCLUDE_DIRS}")
+  endif()
+  if(GLUT_LIBRARIES)
+    target_link_libraries(GLUT::GLUT INTERFACE ${GLUT_LIBRARIES})
+  endif()
+  if(GLUT_LDFLAGS)
+    target_link_options(GLUT::GLUT INTERFACE ${GLUT_LDFLAGS})
+  endif()
+  if(GLUT_CFLAGS)
+    separate_arguments(GLUT_CFLAGS_SPLIT UNIX_COMMAND "${GLUT_CFLAGS}")
+    target_compile_options(GLUT::GLUT INTERFACE ${GLUT_CFLAGS_SPLIT})
+  endif()
+
+  set_property(TARGET GLUT::GLUT APPEND PROPERTY
+    IMPORTED_LOCATION "${GLUT_glut_LIBRARY}")
+endfunction()
+
+find_package(PkgConfig)
+if(PKG_CONFIG_FOUND)
+  pkg_check_modules(GLUT glut)
+  if(GLUT_FOUND)
+    _add_glut_target_simple()
+    FIND_PACKAGE_HANDLE_STANDARD_ARGS(GLUT REQUIRED_VARS GLUT_FOUND)
+    return()
+  endif()
+endif()
+
+if(WIN32)
+  find_path( GLUT_INCLUDE_DIR NAMES GL/glut.h
+    PATHS  ${GLUT_ROOT_PATH}/include )
+  find_library( GLUT_glut_LIBRARY_RELEASE NAMES glut glut32 freeglut
+    PATHS
+    ${OPENGL_LIBRARY_DIR}
+    ${GLUT_ROOT_PATH}/Release
+    )
+  find_library( GLUT_glut_LIBRARY_DEBUG NAMES freeglutd
+    PATHS
+    ${OPENGL_LIBRARY_DIR}
+    ${GLUT_ROOT_PATH}/Debug
+    )
+  mark_as_advanced(GLUT_glut_LIBRARY_RELEASE GLUT_glut_LIBRARY_DEBUG)
+  select_library_configurations(GLUT_glut)
+elseif(APPLE)
+  find_path(GLUT_INCLUDE_DIR glut.h ${OPENGL_LIBRARY_DIR})
+  find_library(GLUT_glut_LIBRARY GLUT DOC "GLUT library for OSX")
+  find_library(GLUT_cocoa_LIBRARY Cocoa DOC "Cocoa framework for OSX")
+  mark_as_advanced(GLUT_glut_LIBRARY GLUT_cocoa_LIBRARY)
+
+  if(GLUT_cocoa_LIBRARY AND NOT TARGET GLUT::Cocoa)
+    add_library(GLUT::Cocoa UNKNOWN IMPORTED)
+    # Cocoa should always be a Framework, but we check to make sure.
+    if(GLUT_cocoa_LIBRARY MATCHES "/([^/]+)\\.framework$")
+      set(_glut_cocoa "${GLUT_cocoa_LIBRARY}/${CMAKE_MATCH_1}")
+      if(EXISTS "${_glut_cocoa}.tbd")
+        string(APPEND _glut_cocoa ".tbd")
+      endif()
+      set_target_properties(GLUT::Cocoa PROPERTIES
+        IMPORTED_LOCATION "${_glut_cocoa}")
+    else()
+      set_target_properties(GLUT::Cocoa PROPERTIES
+        IMPORTED_LOCATION "${GLUT_cocoa_LIBRARY}")
+    endif()
+  endif()
+else()
+  if(BEOS)
+    set(_GLUT_INC_DIR /boot/develop/headers/os/opengl)
+    set(_GLUT_glut_LIB_DIR /boot/develop/lib/x86)
+  else()
+    find_library( GLUT_Xi_LIBRARY Xi
+      /usr/openwin/lib
+      )
+    mark_as_advanced(GLUT_Xi_LIBRARY)
+
+    find_library( GLUT_Xmu_LIBRARY Xmu
+      /usr/openwin/lib
+      )
+    mark_as_advanced(GLUT_Xmu_LIBRARY)
+
+    if(GLUT_Xi_LIBRARY AND NOT TARGET GLUT::Xi)
+      add_library(GLUT::Xi UNKNOWN IMPORTED)
+      set_target_properties(GLUT::Xi PROPERTIES
+        IMPORTED_LOCATION "${GLUT_Xi_LIBRARY}")
+    endif()
+
+    if(GLUT_Xmu_LIBRARY AND NOT TARGET GLUT::Xmu)
+      add_library(GLUT::Xmu UNKNOWN IMPORTED)
+      set_target_properties(GLUT::Xmu PROPERTIES
+        IMPORTED_LOCATION "${GLUT_Xmu_LIBRARY}")
+    endif()
+
+  endif ()
+
+  find_path( GLUT_INCLUDE_DIR GL/glut.h
+    /usr/include/GL
+    /usr/openwin/share/include
+    /usr/openwin/include
+    /opt/graphics/OpenGL/include
+    /opt/graphics/OpenGL/contrib/libglut
+    ${_GLUT_INC_DIR}
+    )
+
+  find_library( GLUT_glut_LIBRARY glut
+    /usr/openwin/lib
+    ${_GLUT_glut_LIB_DIR}
+    )
+
+  unset(_GLUT_INC_DIR)
+  unset(_GLUT_glut_LIB_DIR)
+endif()
+mark_as_advanced(GLUT_glut_LIBRARY)
+
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(GLUT REQUIRED_VARS GLUT_glut_LIBRARY GLUT_INCLUDE_DIR)
+
+if (GLUT_FOUND)
+  # Is -lXi and -lXmu required on all platforms that have it?
+  # If not, we need some way to figure out what platform we are on.
+  set( GLUT_LIBRARIES
+    ${GLUT_glut_LIBRARY}
+    )
+  foreach(v GLUT_Xmu_LIBRARY GLUT_Xi_LIBRARY GLUT_cocoa_LIBRARY)
+    if(${v})
+      list(APPEND GLUT_LIBRARIES ${${v}})
+    endif()
+  endforeach()
+
+  if(NOT TARGET GLUT::GLUT)
+    add_library(GLUT::GLUT UNKNOWN IMPORTED)
+    set_target_properties(GLUT::GLUT PROPERTIES
+      INTERFACE_INCLUDE_DIRECTORIES "${GLUT_INCLUDE_DIR}")
+    if(GLUT_glut_LIBRARY MATCHES "/([^/]+)\\.framework$")
+      set(_glut_glut "${GLUT_glut_LIBRARY}/${CMAKE_MATCH_1}")
+      if(EXISTS "${_glut_glut}.tbd")
+        string(APPEND _glut_glut ".tbd")
+      endif()
+      set_target_properties(GLUT::GLUT PROPERTIES
+        IMPORTED_LOCATION "${_glut_glut}")
+    else()
+      if(GLUT_glut_LIBRARY_RELEASE)
+        set_property(TARGET GLUT::GLUT APPEND PROPERTY
+          IMPORTED_CONFIGURATIONS RELEASE)
+        set_target_properties(GLUT::GLUT PROPERTIES
+          IMPORTED_LOCATION_RELEASE "${GLUT_glut_LIBRARY_RELEASE}")
+      endif()
+
+      if(GLUT_glut_LIBRARY_DEBUG)
+        set_property(TARGET GLUT::GLUT APPEND PROPERTY
+          IMPORTED_CONFIGURATIONS DEBUG)
+        set_target_properties(GLUT::GLUT PROPERTIES
+          IMPORTED_LOCATION_DEBUG "${GLUT_glut_LIBRARY_DEBUG}")
+      endif()
+
+      if(NOT GLUT_glut_LIBRARY_RELEASE AND NOT GLUT_glut_LIBRARY_DEBUG)
+        set_property(TARGET GLUT::GLUT APPEND PROPERTY
+          IMPORTED_LOCATION "${GLUT_glut_LIBRARY}")
+      endif()
+    endif()
+
+    if(TARGET GLUT::Xmu)
+      set_property(TARGET GLUT::GLUT APPEND
+        PROPERTY INTERFACE_LINK_LIBRARIES GLUT::Xmu)
+    endif()
+
+    if(TARGET GLUT::Xi)
+      set_property(TARGET GLUT::GLUT APPEND
+        PROPERTY INTERFACE_LINK_LIBRARIES GLUT::Xi)
+    endif()
+
+    if(TARGET GLUT::Cocoa)
+      set_property(TARGET GLUT::GLUT APPEND
+        PROPERTY INTERFACE_LINK_LIBRARIES GLUT::Cocoa)
+    endif()
+  endif()
+
+  #The following deprecated settings are for backwards compatibility with CMake1.4
+  set (GLUT_LIBRARY ${GLUT_LIBRARIES})
+  set (GLUT_INCLUDE_PATH ${GLUT_INCLUDE_DIR})
+endif()
+
+mark_as_advanced(GLUT_INCLUDE_DIR)
diff --git a/share/cmake-3.22/Modules/FindGSL.cmake b/share/cmake-3.22/Modules/FindGSL.cmake
new file mode 100644
index 0000000..3d4e7f9
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindGSL.cmake
@@ -0,0 +1,231 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindGSL
+--------
+
+.. versionadded:: 3.2
+
+Find the native GNU Scientific Library (GSL) includes and libraries.
+
+The GNU Scientific Library (GSL) is a numerical library for C and C++
+programmers. It is free software under the GNU General Public
+License.
+
+Imported Targets
+^^^^^^^^^^^^^^^^
+
+If GSL is found, this module defines the following :prop_tgt:`IMPORTED`
+targets::
+
+ GSL::gsl      - The main GSL library.
+ GSL::gslcblas - The CBLAS support library used by GSL.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This module will set the following variables in your project::
+
+ GSL_FOUND          - True if GSL found on the local system
+ GSL_INCLUDE_DIRS   - Location of GSL header files.
+ GSL_LIBRARIES      - The GSL libraries.
+ GSL_VERSION        - The version of the discovered GSL install.
+
+Hints
+^^^^^
+
+Set ``GSL_ROOT_DIR`` to a directory that contains a GSL installation.
+
+This script expects to find libraries at ``$GSL_ROOT_DIR/lib`` and the GSL
+headers at ``$GSL_ROOT_DIR/include/gsl``.  The library directory may
+optionally provide Release and Debug folders. If available, the libraries
+named ``gsld``, ``gslblasd`` or ``cblasd`` are recognized as debug libraries.
+For Unix-like systems, this script will use ``$GSL_ROOT_DIR/bin/gsl-config``
+(if found) to aid in the discovery of GSL.
+
+Cache Variables
+^^^^^^^^^^^^^^^
+
+This module may set the following variables depending on platform and type
+of GSL installation discovered.  These variables may optionally be set to
+help this module find the correct files::
+
+ GSL_CBLAS_LIBRARY       - Location of the GSL CBLAS library.
+ GSL_CBLAS_LIBRARY_DEBUG - Location of the debug GSL CBLAS library (if any).
+ GSL_CONFIG_EXECUTABLE   - Location of the ``gsl-config`` script (if any).
+ GSL_LIBRARY             - Location of the GSL library.
+ GSL_LIBRARY_DEBUG       - Location of the debug GSL library (if any).
+
+#]=======================================================================]
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+
+#=============================================================================
+# If the user has provided ``GSL_ROOT_DIR``, use it!  Choose items found
+# at this location over system locations.
+if( EXISTS "$ENV{GSL_ROOT_DIR}" )
+  file( TO_CMAKE_PATH "$ENV{GSL_ROOT_DIR}" GSL_ROOT_DIR )
+  set( GSL_ROOT_DIR "${GSL_ROOT_DIR}" CACHE PATH "Prefix for GSL installation." )
+endif()
+if( NOT EXISTS "${GSL_ROOT_DIR}" )
+  set( GSL_USE_PKGCONFIG ON )
+endif()
+
+#=============================================================================
+# As a first try, use the PkgConfig module.  This will work on many
+# *NIX systems.  See :module:`findpkgconfig`
+# This will return ``GSL_INCLUDEDIR`` and ``GSL_LIBDIR`` used below.
+if( GSL_USE_PKGCONFIG )
+  find_package(PkgConfig)
+  pkg_check_modules( GSL QUIET gsl )
+
+  if( EXISTS "${GSL_INCLUDEDIR}" )
+    get_filename_component( GSL_ROOT_DIR "${GSL_INCLUDEDIR}" DIRECTORY CACHE)
+  endif()
+endif()
+
+#=============================================================================
+# Set GSL_INCLUDE_DIRS and GSL_LIBRARIES. If we skipped the PkgConfig step, try
+# to find the libraries at $GSL_ROOT_DIR (if provided) or in standard system
+# locations.  These find_library and find_path calls will prefer custom
+# locations over standard locations (HINTS).  If the requested file is not found
+# at the HINTS location, standard system locations will be still be searched
+# (/usr/lib64 (Redhat), lib/i386-linux-gnu (Debian)).
+
+find_path( GSL_INCLUDE_DIR
+  NAMES gsl/gsl_sf.h
+  HINTS ${GSL_ROOT_DIR}/include ${GSL_INCLUDEDIR}
+)
+find_library( GSL_LIBRARY
+  NAMES gsl
+  HINTS ${GSL_ROOT_DIR}/lib ${GSL_LIBDIR}
+  PATH_SUFFIXES Release Debug
+)
+find_library( GSL_CBLAS_LIBRARY
+  NAMES gslcblas cblas
+  HINTS ${GSL_ROOT_DIR}/lib ${GSL_LIBDIR}
+  PATH_SUFFIXES Release Debug
+)
+# Do we also have debug versions?
+find_library( GSL_LIBRARY_DEBUG
+  NAMES gsld gsl
+  HINTS ${GSL_ROOT_DIR}/lib ${GSL_LIBDIR}
+  PATH_SUFFIXES Debug
+)
+find_library( GSL_CBLAS_LIBRARY_DEBUG
+  NAMES gslcblasd cblasd gslcblas cblas
+  HINTS ${GSL_ROOT_DIR}/lib ${GSL_LIBDIR}
+  PATH_SUFFIXES Debug
+)
+set( GSL_INCLUDE_DIRS ${GSL_INCLUDE_DIR} )
+set( GSL_LIBRARIES ${GSL_LIBRARY} ${GSL_CBLAS_LIBRARY} )
+
+# If we didn't use PkgConfig, try to find the version via gsl-config or by
+# reading gsl_version.h.
+if( NOT GSL_VERSION )
+  # 1. If gsl-config exists, query for the version.
+  find_program( GSL_CONFIG_EXECUTABLE
+    NAMES gsl-config
+    HINTS "${GSL_ROOT_DIR}/bin"
+    )
+  if( EXISTS "${GSL_CONFIG_EXECUTABLE}" )
+    execute_process(
+      COMMAND "${GSL_CONFIG_EXECUTABLE}" --version
+      OUTPUT_VARIABLE GSL_VERSION
+      OUTPUT_STRIP_TRAILING_WHITESPACE )
+  endif()
+
+  # 2. If gsl-config is not available, try looking in gsl/gsl_version.h
+  if( NOT GSL_VERSION AND EXISTS "${GSL_INCLUDE_DIRS}/gsl/gsl_version.h" )
+    file( STRINGS "${GSL_INCLUDE_DIRS}/gsl/gsl_version.h" gsl_version_h_contents REGEX "define GSL_VERSION" )
+    string( REGEX REPLACE ".*([0-9]\\.[0-9][0-9]?).*" "\\1" GSL_VERSION ${gsl_version_h_contents} )
+  endif()
+
+  # might also try scraping the directory name for a regex match "gsl-X.X"
+endif()
+
+#=============================================================================
+# handle the QUIETLY and REQUIRED arguments and set GSL_FOUND to TRUE if all
+# listed variables are TRUE
+find_package_handle_standard_args( GSL
+  FOUND_VAR
+    GSL_FOUND
+  REQUIRED_VARS
+    GSL_INCLUDE_DIR
+    GSL_LIBRARY
+    GSL_CBLAS_LIBRARY
+  VERSION_VAR
+    GSL_VERSION
+    )
+
+mark_as_advanced( GSL_ROOT_DIR GSL_VERSION GSL_LIBRARY GSL_INCLUDE_DIR
+  GSL_CBLAS_LIBRARY GSL_LIBRARY_DEBUG GSL_CBLAS_LIBRARY_DEBUG
+  GSL_USE_PKGCONFIG GSL_CONFIG )
+
+#=============================================================================
+# Register imported libraries:
+# 1. If we can find a Windows .dll file (or if we can find both Debug and
+#    Release libraries), we will set appropriate target properties for these.
+# 2. However, for most systems, we will only register the import location and
+#    include directory.
+
+# Look for dlls, or Release and Debug libraries.
+if(WIN32)
+  string( REPLACE ".lib" ".dll" GSL_LIBRARY_DLL       "${GSL_LIBRARY}" )
+  string( REPLACE ".lib" ".dll" GSL_CBLAS_LIBRARY_DLL "${GSL_CBLAS_LIBRARY}" )
+  string( REPLACE ".lib" ".dll" GSL_LIBRARY_DEBUG_DLL "${GSL_LIBRARY_DEBUG}" )
+  string( REPLACE ".lib" ".dll" GSL_CBLAS_LIBRARY_DEBUG_DLL "${GSL_CBLAS_LIBRARY_DEBUG}" )
+endif()
+
+if( GSL_FOUND AND NOT TARGET GSL::gsl )
+  if( EXISTS "${GSL_LIBRARY_DLL}" AND EXISTS "${GSL_CBLAS_LIBRARY_DLL}")
+
+    # Windows systems with dll libraries.
+    add_library( GSL::gsl      SHARED IMPORTED )
+    add_library( GSL::gslcblas SHARED IMPORTED )
+
+    # Windows with dlls, but only Release libraries.
+    set_target_properties( GSL::gslcblas PROPERTIES
+      IMPORTED_LOCATION_RELEASE         "${GSL_CBLAS_LIBRARY_DLL}"
+      IMPORTED_IMPLIB                   "${GSL_CBLAS_LIBRARY}"
+      INTERFACE_INCLUDE_DIRECTORIES     "${GSL_INCLUDE_DIRS}"
+      IMPORTED_CONFIGURATIONS           Release
+      IMPORTED_LINK_INTERFACE_LANGUAGES "C" )
+    set_target_properties( GSL::gsl PROPERTIES
+      IMPORTED_LOCATION_RELEASE         "${GSL_LIBRARY_DLL}"
+      IMPORTED_IMPLIB                   "${GSL_LIBRARY}"
+      INTERFACE_INCLUDE_DIRECTORIES     "${GSL_INCLUDE_DIRS}"
+      IMPORTED_CONFIGURATIONS           Release
+      IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+      INTERFACE_LINK_LIBRARIES          GSL::gslcblas )
+
+    # If we have both Debug and Release libraries
+    if( EXISTS "${GSL_LIBRARY_DEBUG_DLL}" AND EXISTS "${GSL_CBLAS_LIBRARY_DEBUG_DLL}")
+      set_property( TARGET GSL::gslcblas APPEND PROPERTY IMPORTED_CONFIGURATIONS Debug )
+      set_target_properties( GSL::gslcblas PROPERTIES
+        IMPORTED_LOCATION_DEBUG           "${GSL_CBLAS_LIBRARY_DEBUG_DLL}"
+        IMPORTED_IMPLIB_DEBUG             "${GSL_CBLAS_LIBRARY_DEBUG}" )
+      set_property( TARGET GSL::gsl APPEND PROPERTY IMPORTED_CONFIGURATIONS Debug )
+      set_target_properties( GSL::gsl PROPERTIES
+        IMPORTED_LOCATION_DEBUG           "${GSL_LIBRARY_DEBUG_DLL}"
+        IMPORTED_IMPLIB_DEBUG             "${GSL_LIBRARY_DEBUG}" )
+    endif()
+
+  else()
+
+    # For all other environments (ones without dll libraries), create
+    # the imported library targets.
+    add_library( GSL::gsl      UNKNOWN IMPORTED )
+    add_library( GSL::gslcblas UNKNOWN IMPORTED )
+    set_target_properties( GSL::gslcblas PROPERTIES
+      IMPORTED_LOCATION                 "${GSL_CBLAS_LIBRARY}"
+      INTERFACE_INCLUDE_DIRECTORIES     "${GSL_INCLUDE_DIRS}"
+      IMPORTED_LINK_INTERFACE_LANGUAGES "C" )
+    set_target_properties( GSL::gsl PROPERTIES
+      IMPORTED_LOCATION                 "${GSL_LIBRARY}"
+      INTERFACE_INCLUDE_DIRECTORIES     "${GSL_INCLUDE_DIRS}"
+      IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+      INTERFACE_LINK_LIBRARIES          GSL::gslcblas )
+  endif()
+endif()
diff --git a/share/cmake-3.18/Modules/FindGTK.cmake b/share/cmake-3.22/Modules/FindGTK.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindGTK.cmake
rename to share/cmake-3.22/Modules/FindGTK.cmake
diff --git a/share/cmake-3.22/Modules/FindGTK2.cmake b/share/cmake-3.22/Modules/FindGTK2.cmake
new file mode 100644
index 0000000..00bfc29
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindGTK2.cmake
@@ -0,0 +1,969 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindGTK2
+--------
+
+Find the GTK2 widget libraries and several of its other optional components
+like ``gtkmm``, ``glade``, and ``glademm``.
+
+Specify one or more of the following components as you call this find
+module.  See example below.
+
+* ``gtk``
+* ``gtkmm``
+* ``glade``
+* ``glademm``
+
+Imported Targets
+^^^^^^^^^^^^^^^^
+
+This module defines the following :prop_tgt:`IMPORTED` targets (subject to
+component selection):
+
+``GTK2::atk``, ``GTK2::atkmm``, ``GTK2::cairo``, ``GTK2::cairomm``,
+``GTK2::gdk_pixbuf``, ``GTK2::gdk``, ``GTK2::gdkmm``, ``GTK2::gio``,
+``GTK2::giomm``, ``GTK2::glade``, ``GTK2::glademm``, ``GTK2::glib``,
+``GTK2::glibmm``, ``GTK2::gmodule``, ``GTK2::gobject``, ``GTK2::gthread``,
+``GTK2::gtk``, ``GTK2::gtkmm``, ``GTK2::harfbuzz``, ``GTK2::pango``,
+``GTK2::pangocairo``, ``GTK2::pangoft2``, ``GTK2::pangomm``,
+``GTK2::pangoxft``, ``GTK2::sigc``.
+
+.. versionadded:: 3.16.7
+  Added the ``GTK2::harfbuzz`` target.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+The following variables will be defined for your use
+
+``GTK2_FOUND``
+  Were all of your specified components found?
+``GTK2_INCLUDE_DIRS``
+  All include directories
+``GTK2_LIBRARIES``
+  All libraries
+``GTK2_TARGETS``
+  .. versionadded:: 3.5
+    All imported targets
+``GTK2_DEFINITIONS``
+  Additional compiler flags
+``GTK2_VERSION``
+  The version of GTK2 found (x.y.z)
+``GTK2_MAJOR_VERSION``
+  The major version of GTK2
+``GTK2_MINOR_VERSION``
+  The minor version of GTK2
+``GTK2_PATCH_VERSION``
+  The patch version of GTK2
+
+.. versionadded:: 3.5
+  When ``GTK2_USE_IMPORTED_TARGETS`` is set to ``TRUE``, ``GTK2_LIBRARIES``
+  will list imported targets instead of library paths.
+
+Input Variables
+^^^^^^^^^^^^^^^
+
+Optional variables you can define prior to calling this module:
+
+``GTK2_DEBUG``
+  Enables verbose debugging of the module
+``GTK2_ADDITIONAL_SUFFIXES``
+  Allows defining additional directories to search for include files
+
+Example Usage
+^^^^^^^^^^^^^
+
+Call :command:`find_package` once.  Here are some examples to pick from:
+
+Require GTK 2.6 or later:
+
+.. code-block:: cmake
+
+  find_package(GTK2 2.6 REQUIRED gtk)
+
+Require GTK 2.10 or later and Glade:
+
+.. code-block:: cmake
+
+  find_package(GTK2 2.10 REQUIRED gtk glade)
+
+Search for GTK/GTKMM 2.8 or later:
+
+.. code-block:: cmake
+
+  find_package(GTK2 2.8 COMPONENTS gtk gtkmm)
+
+Use the results:
+
+.. code-block:: cmake
+
+  if(GTK2_FOUND)
+    include_directories(${GTK2_INCLUDE_DIRS})
+    add_executable(mygui mygui.cc)
+    target_link_libraries(mygui ${GTK2_LIBRARIES})
+  endif()
+#]=======================================================================]
+
+# Version 1.6 (CMake 3.0)
+#   * Create targets for each library
+#   * Do not link libfreetype
+# Version 1.5 (CMake 2.8.12)
+#   * 14236: Detect gthread library
+#            Detect pangocairo on windows
+#            Detect pangocairo with gtk module instead of with gtkmm
+#   * 14259: Use vc100 libraries with VS 11
+#   * 14260: Export a GTK2_DEFINITIONS variable to set /vd2 when appropriate
+#            (i.e. MSVC)
+#   * Use the optimized/debug syntax for _LIBRARY and _LIBRARIES variables when
+#     appropriate. A new set of _RELEASE variables was also added.
+#   * Remove GTK2_SKIP_MARK_AS_ADVANCED option, as now the variables are
+#     marked as advanced by SelectLibraryConfigurations
+#   * Detect gmodule, pangoft2 and pangoxft libraries
+# Version 1.4 (10/4/2012) (CMake 2.8.10)
+#   * 12596: Missing paths for FindGTK2 on NetBSD
+#   * 12049: Fixed detection of GTK include files in the lib folder on
+#            multiarch systems.
+# Version 1.3 (11/9/2010) (CMake 2.8.4)
+#   * 11429: Add support for detecting GTK2 built with Visual Studio 10.
+#            Thanks to Vincent Levesque for the patch.
+# Version 1.2 (8/30/2010) (CMake 2.8.3)
+#   * Merge patch for detecting gdk-pixbuf library (split off
+#     from core GTK in 2.21).  Thanks to Vincent Untz for the patch
+#     and Ricardo Cruz for the heads up.
+# Version 1.1 (8/19/2010) (CMake 2.8.3)
+#   * Add support for detecting GTK2 under macports (thanks to Gary Kramlich)
+# Version 1.0 (8/12/2010) (CMake 2.8.3)
+#   * Add support for detecting new pangommconfig.h header file
+#     (Thanks to Sune Vuorela & the Debian Project for the patch)
+#   * Add support for detecting fontconfig.h header
+#   * Call find_package(Freetype) since it's required
+#   * Add support for allowing users to add additional library directories
+#     via the GTK2_ADDITIONAL_SUFFIXES variable (kind of a future-kludge in
+#     case the GTK developers change versions on any of the directories in the
+#     future).
+# Version 0.8 (1/4/2010)
+#   * Get module working under MacOSX fink by adding /sw/include, /sw/lib
+#     to PATHS and the gobject library
+# Version 0.7 (3/22/09)
+#   * Checked into CMake CVS
+#   * Added versioning support
+#   * Module now defaults to searching for GTK if COMPONENTS not specified.
+#   * Added HKCU prior to HKLM registry key and GTKMM specific environment
+#      variable as per mailing list discussion.
+#   * Added lib64 to include search path and a few other search paths where GTK
+#      may be installed on Unix systems.
+#   * Switched to lowercase CMake commands
+#   * Prefaced internal variables with _GTK2 to prevent collision
+#   * Changed internal macros to functions
+#   * Enhanced documentation
+# Version 0.6 (1/8/08)
+#   Added GTK2_SKIP_MARK_AS_ADVANCED option
+# Version 0.5 (12/19/08)
+#   Second release to cmake mailing list
+
+#=============================================================
+# _GTK2_GET_VERSION
+# Internal function to parse the version number in gtkversion.h
+#   _OUT_major = Major version number
+#   _OUT_minor = Minor version number
+#   _OUT_micro = Micro version number
+#   _gtkversion_hdr = Header file to parse
+#=============================================================
+
+include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
+
+function(_GTK2_GET_VERSION _OUT_major _OUT_minor _OUT_micro _gtkversion_hdr)
+    file(STRINGS ${_gtkversion_hdr} _contents REGEX "#define GTK_M[A-Z]+_VERSION[ \t]+")
+    if(_contents)
+        string(REGEX REPLACE ".*#define GTK_MAJOR_VERSION[ \t]+\\(([0-9]+)\\).*" "\\1" ${_OUT_major} "${_contents}")
+        string(REGEX REPLACE ".*#define GTK_MINOR_VERSION[ \t]+\\(([0-9]+)\\).*" "\\1" ${_OUT_minor} "${_contents}")
+        string(REGEX REPLACE ".*#define GTK_MICRO_VERSION[ \t]+\\(([0-9]+)\\).*" "\\1" ${_OUT_micro} "${_contents}")
+
+        if(NOT ${_OUT_major} MATCHES "[0-9]+")
+            message(FATAL_ERROR "Version parsing failed for GTK2_MAJOR_VERSION!")
+        endif()
+        if(NOT ${_OUT_minor} MATCHES "[0-9]+")
+            message(FATAL_ERROR "Version parsing failed for GTK2_MINOR_VERSION!")
+        endif()
+        if(NOT ${_OUT_micro} MATCHES "[0-9]+")
+            message(FATAL_ERROR "Version parsing failed for GTK2_MICRO_VERSION!")
+        endif()
+
+        set(${_OUT_major} ${${_OUT_major}} PARENT_SCOPE)
+        set(${_OUT_minor} ${${_OUT_minor}} PARENT_SCOPE)
+        set(${_OUT_micro} ${${_OUT_micro}} PARENT_SCOPE)
+    else()
+        message(FATAL_ERROR "Include file ${_gtkversion_hdr} does not exist")
+    endif()
+endfunction()
+
+
+#=============================================================
+# _GTK2_SIGCXX_GET_VERSION
+# Internal function to parse the version number in
+# sigc++config.h
+#   _OUT_major = Major version number
+#   _OUT_minor = Minor version number
+#   _OUT_micro = Micro version number
+#   _sigcxxversion_hdr = Header file to parse
+#=============================================================
+
+function(_GTK2_SIGCXX_GET_VERSION _OUT_major _OUT_minor _OUT_micro _sigcxxversion_hdr)
+    file(STRINGS ${_sigcxxversion_hdr} _contents REGEX "#define SIGCXX_M[A-Z]+_VERSION[ \t]+")
+    if(_contents)
+        string(REGEX REPLACE ".*#define SIGCXX_MAJOR_VERSION[ \t]+([0-9]+).*" "\\1" ${_OUT_major} "${_contents}")
+        string(REGEX REPLACE ".*#define SIGCXX_MINOR_VERSION[ \t]+([0-9]+).*" "\\1" ${_OUT_minor} "${_contents}")
+        string(REGEX REPLACE ".*#define SIGCXX_MICRO_VERSION[ \t]+([0-9]+).*" "\\1" ${_OUT_micro} "${_contents}")
+
+        if(NOT ${_OUT_major} MATCHES "[0-9]+")
+            message(FATAL_ERROR "Version parsing failed for SIGCXX_MAJOR_VERSION!")
+        endif()
+        if(NOT ${_OUT_minor} MATCHES "[0-9]+")
+            message(FATAL_ERROR "Version parsing failed for SIGCXX_MINOR_VERSION!")
+        endif()
+        if(NOT ${_OUT_micro} MATCHES "[0-9]+")
+            message(FATAL_ERROR "Version parsing failed for SIGCXX_MICRO_VERSION!")
+        endif()
+
+        set(${_OUT_major} ${${_OUT_major}} PARENT_SCOPE)
+        set(${_OUT_minor} ${${_OUT_minor}} PARENT_SCOPE)
+        set(${_OUT_micro} ${${_OUT_micro}} PARENT_SCOPE)
+    else()
+        # The header does not have the version macros; assume it is ``0.0.0``.
+        set(${_OUT_major} 0)
+        set(${_OUT_minor} 0)
+        set(${_OUT_micro} 0)
+    endif()
+endfunction()
+
+
+#=============================================================
+# _GTK2_FIND_INCLUDE_DIR
+# Internal function to find the GTK include directories
+#   _var = variable to set (_INCLUDE_DIR is appended)
+#   _hdr = header file to look for
+#=============================================================
+function(_GTK2_FIND_INCLUDE_DIR _var _hdr)
+
+    if(GTK2_DEBUG)
+        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
+                       "_GTK2_FIND_INCLUDE_DIR( ${_var} ${_hdr} )")
+    endif()
+
+    set(_gtk_packages
+        # If these ever change, things will break.
+        ${GTK2_ADDITIONAL_SUFFIXES}
+        glibmm-2.4
+        glib-2.0
+        atk-1.0
+        atkmm-1.6
+        cairo
+        cairomm-1.0
+        gdk-pixbuf-2.0
+        gdkmm-2.4
+        giomm-2.4
+        gtk-2.0
+        gtkmm-2.4
+        libglade-2.0
+        libglademm-2.4
+        harfbuzz
+        pango-1.0
+        pangomm-1.4
+        sigc++-2.0
+    )
+
+    #
+    # NOTE: The following suffixes cause searching for header files in both of
+    # these directories:
+    #         /usr/include/<pkg>
+    #         /usr/lib/<pkg>/include
+    #
+
+    set(_suffixes)
+    foreach(_d ${_gtk_packages})
+        list(APPEND _suffixes ${_d})
+        list(APPEND _suffixes ${_d}/include) # for /usr/lib/gtk-2.0/include
+    endforeach()
+
+    if(GTK2_DEBUG)
+        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}]     "
+                       "include suffixes = ${_suffixes}")
+    endif()
+
+    if(CMAKE_LIBRARY_ARCHITECTURE)
+      set(_gtk2_arch_dir /usr/lib/${CMAKE_LIBRARY_ARCHITECTURE})
+      if(GTK2_DEBUG)
+        message(STATUS "Adding ${_gtk2_arch_dir} to search path for multiarch support")
+      endif()
+    endif()
+    find_path(GTK2_${_var}_INCLUDE_DIR ${_hdr}
+        PATHS
+            ${_gtk2_arch_dir}
+            /usr/local/libx32
+            /usr/local/lib64
+            /usr/local/lib
+            /usr/libx32
+            /usr/lib64
+            /usr/lib
+            /opt/gnome/include
+            /opt/gnome/lib
+            /opt/openwin/include
+            /usr/openwin/lib
+            /sw/lib
+            /opt/local/lib
+            /usr/pkg/lib
+            /usr/pkg/include/glib
+            $ENV{GTKMM_BASEPATH}/include
+            $ENV{GTKMM_BASEPATH}/lib
+            [HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path]/include
+            [HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path]/lib
+            [HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]/include
+            [HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]/lib
+        PATH_SUFFIXES
+            ${_suffixes}
+    )
+    mark_as_advanced(GTK2_${_var}_INCLUDE_DIR)
+
+    if(GTK2_${_var}_INCLUDE_DIR)
+        set(GTK2_INCLUDE_DIRS ${GTK2_INCLUDE_DIRS} ${GTK2_${_var}_INCLUDE_DIR} PARENT_SCOPE)
+    endif()
+
+endfunction()
+
+#=============================================================
+# _GTK2_FIND_LIBRARY
+# Internal function to find libraries packaged with GTK2
+#   _var = library variable to create (_LIBRARY is appended)
+#=============================================================
+function(_GTK2_FIND_LIBRARY _var _lib _expand_vc _append_version)
+
+    if(GTK2_DEBUG)
+        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
+                       "_GTK2_FIND_LIBRARY( ${_var} ${_lib} ${_expand_vc} ${_append_version} )")
+    endif()
+
+    # Not GTK versions per se but the versions encoded into Windows
+    # import libraries (GtkMM 2.14.1 has a gtkmm-vc80-2_4.lib for example)
+    # Also the MSVC libraries use _ for . (this is handled below)
+    set(_versions 2.20 2.18 2.16 2.14 2.12
+                  2.10  2.8  2.6  2.4  2.2 2.0
+                  1.20 1.18 1.16 1.14 1.12
+                  1.10  1.8  1.6  1.4  1.2 1.0)
+
+    set(_library)
+    set(_library_d)
+
+    set(_library ${_lib})
+
+    if(_expand_vc AND MSVC)
+        # Add vc80/vc90/vc100 midfixes
+        if(MSVC_TOOLSET_VERSION LESS 110)
+            set(_library   ${_library}-vc${MSVC_TOOLSET_VERSION})
+        else()
+            # Up to gtkmm-win 2.22.0-2 there are no vc110 libraries but vc100 can be used
+            set(_library ${_library}-vc100)
+        endif()
+        set(_library_d ${_library}-d)
+    endif()
+
+    if(GTK2_DEBUG)
+        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}]     "
+                       "After midfix addition = ${_library} and ${_library_d}")
+    endif()
+
+    set(_lib_list)
+    set(_libd_list)
+    if(_append_version)
+        foreach(_ver ${_versions})
+            list(APPEND _lib_list  "${_library}-${_ver}")
+            list(APPEND _libd_list "${_library_d}-${_ver}")
+        endforeach()
+    else()
+        set(_lib_list ${_library})
+        set(_libd_list ${_library_d})
+    endif()
+
+    if(GTK2_DEBUG)
+        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}]     "
+                       "library list = ${_lib_list} and library debug list = ${_libd_list}")
+    endif()
+
+    # For some silly reason the MSVC libraries use _ instead of .
+    # in the version fields
+    if(_expand_vc AND MSVC)
+        set(_no_dots_lib_list)
+        set(_no_dots_libd_list)
+        foreach(_l ${_lib_list})
+            string(REPLACE "." "_" _no_dots_library ${_l})
+            list(APPEND _no_dots_lib_list ${_no_dots_library})
+        endforeach()
+        # And for debug
+        set(_no_dots_libsd_list)
+        foreach(_l ${_libd_list})
+            string(REPLACE "." "_" _no_dots_libraryd ${_l})
+            list(APPEND _no_dots_libd_list ${_no_dots_libraryd})
+        endforeach()
+
+        # Copy list back to original names
+        set(_lib_list ${_no_dots_lib_list})
+        set(_libd_list ${_no_dots_libd_list})
+    endif()
+
+    if(GTK2_DEBUG)
+        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}]     "
+                       "While searching for GTK2_${_var}_LIBRARY, our proposed library list is ${_lib_list}")
+    endif()
+
+    find_library(GTK2_${_var}_LIBRARY_RELEASE
+        NAMES ${_lib_list}
+        PATHS
+            /opt/gnome/lib
+            /usr/openwin/lib
+            $ENV{GTKMM_BASEPATH}/lib
+            [HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path]/lib
+            [HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]/lib
+        )
+
+    if(_expand_vc AND MSVC)
+        if(GTK2_DEBUG)
+            message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}]     "
+                           "While searching for GTK2_${_var}_LIBRARY_DEBUG our proposed library list is ${_libd_list}")
+        endif()
+
+        find_library(GTK2_${_var}_LIBRARY_DEBUG
+            NAMES ${_libd_list}
+            PATHS
+            $ENV{GTKMM_BASEPATH}/lib
+            [HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path]/lib
+            [HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]/lib
+        )
+    endif()
+
+    select_library_configurations(GTK2_${_var})
+
+    set(GTK2_${_var}_LIBRARY ${GTK2_${_var}_LIBRARY} PARENT_SCOPE)
+    set(GTK2_${_var}_FOUND ${GTK2_${_var}_FOUND} PARENT_SCOPE)
+
+    if(GTK2_${_var}_FOUND)
+        set(GTK2_LIBRARIES ${GTK2_LIBRARIES} ${GTK2_${_var}_LIBRARY})
+        set(GTK2_LIBRARIES ${GTK2_LIBRARIES} PARENT_SCOPE)
+    endif()
+
+    if(GTK2_DEBUG)
+        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}]     "
+                       "GTK2_${_var}_LIBRARY_RELEASE = \"${GTK2_${_var}_LIBRARY_RELEASE}\"")
+        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}]     "
+                       "GTK2_${_var}_LIBRARY_DEBUG   = \"${GTK2_${_var}_LIBRARY_DEBUG}\"")
+        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}]     "
+                       "GTK2_${_var}_LIBRARY         = \"${GTK2_${_var}_LIBRARY}\"")
+        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}]     "
+                       "GTK2_${_var}_FOUND           = \"${GTK2_${_var}_FOUND}\"")
+    endif()
+
+endfunction()
+
+
+function(_GTK2_ADD_TARGET_DEPENDS_INTERNAL _var _property)
+    if(GTK2_DEBUG)
+        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
+                       "_GTK2_ADD_TARGET_DEPENDS_INTERNAL( ${_var} ${_property} )")
+    endif()
+
+    string(TOLOWER "${_var}" _basename)
+
+    if (TARGET GTK2::${_basename})
+        foreach(_depend ${ARGN})
+            set(_valid_depends)
+            if (TARGET GTK2::${_depend})
+                list(APPEND _valid_depends GTK2::${_depend})
+            endif()
+            if (_valid_depends)
+                set_property(TARGET GTK2::${_basename} APPEND PROPERTY ${_property} "${_valid_depends}")
+            endif()
+            set(_valid_depends)
+        endforeach()
+    endif()
+endfunction()
+
+function(_GTK2_ADD_TARGET_DEPENDS _var)
+    if(GTK2_DEBUG)
+        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
+                       "_GTK2_ADD_TARGET_DEPENDS( ${_var} )")
+    endif()
+
+    string(TOLOWER "${_var}" _basename)
+
+    if(TARGET GTK2::${_basename})
+        get_target_property(_configs GTK2::${_basename} IMPORTED_CONFIGURATIONS)
+        _GTK2_ADD_TARGET_DEPENDS_INTERNAL(${_var} INTERFACE_LINK_LIBRARIES ${ARGN})
+        foreach(_config ${_configs})
+            _GTK2_ADD_TARGET_DEPENDS_INTERNAL(${_var} IMPORTED_LINK_INTERFACE_LIBRARIES_${_config} ${ARGN})
+        endforeach()
+    endif()
+endfunction()
+
+function(_GTK2_ADD_TARGET_INCLUDE_DIRS _var)
+    if(GTK2_DEBUG)
+        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
+                       "_GTK2_ADD_TARGET_INCLUDE_DIRS( ${_var} )")
+    endif()
+
+    string(TOLOWER "${_var}" _basename)
+
+    if(TARGET GTK2::${_basename})
+        foreach(_include ${ARGN})
+            set_property(TARGET GTK2::${_basename} APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${_include}")
+        endforeach()
+    endif()
+endfunction()
+
+#=============================================================
+# _GTK2_ADD_TARGET
+# Internal function to create targets for GTK2
+#   _var = target to create
+#=============================================================
+function(_GTK2_ADD_TARGET _var)
+    if(GTK2_DEBUG)
+        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
+                       "_GTK2_ADD_TARGET( ${_var} )")
+    endif()
+
+    string(TOLOWER "${_var}" _basename)
+
+    cmake_parse_arguments(_${_var} "" "" "GTK2_DEPENDS;GTK2_OPTIONAL_DEPENDS;OPTIONAL_INCLUDES" ${ARGN})
+
+    if(GTK2_${_var}_FOUND)
+        if(NOT TARGET GTK2::${_basename})
+            # Do not create the target if dependencies are missing
+            foreach(_dep ${_${_var}_GTK2_DEPENDS})
+                if(NOT TARGET GTK2::${_dep})
+                    return()
+                endif()
+            endforeach()
+
+            add_library(GTK2::${_basename} UNKNOWN IMPORTED)
+
+            if(GTK2_${_var}_LIBRARY_RELEASE)
+                set_property(TARGET GTK2::${_basename} APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
+                set_property(TARGET GTK2::${_basename}        PROPERTY IMPORTED_LOCATION_RELEASE "${GTK2_${_var}_LIBRARY_RELEASE}" )
+            endif()
+
+            if(GTK2_${_var}_LIBRARY_DEBUG)
+                set_property(TARGET GTK2::${_basename} APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
+                set_property(TARGET GTK2::${_basename}        PROPERTY IMPORTED_LOCATION_DEBUG "${GTK2_${_var}_LIBRARY_DEBUG}" )
+            endif()
+
+            if(GTK2_${_var}_INCLUDE_DIR)
+                set_property(TARGET GTK2::${_basename} APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${GTK2_${_var}_INCLUDE_DIR}")
+            endif()
+
+            if(GTK2_${_var}CONFIG_INCLUDE_DIR AND NOT "x${GTK2_${_var}CONFIG_INCLUDE_DIR}" STREQUAL "x${GTK2_${_var}_INCLUDE_DIR}")
+                set_property(TARGET GTK2::${_basename} APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${GTK2_${_var}CONFIG_INCLUDE_DIR}")
+            endif()
+
+            if(GTK2_DEFINITIONS)
+                set_property(TARGET GTK2::${_basename} PROPERTY INTERFACE_COMPILE_DEFINITIONS "${GTK2_DEFINITIONS}")
+            endif()
+
+            if(_${_var}_GTK2_DEPENDS)
+                _GTK2_ADD_TARGET_DEPENDS(${_var} ${_${_var}_GTK2_DEPENDS} ${_${_var}_GTK2_OPTIONAL_DEPENDS})
+            endif()
+
+            if(_${_var}_OPTIONAL_INCLUDES)
+                foreach(_D ${_${_var}_OPTIONAL_INCLUDES})
+                    if(_D)
+                        _GTK2_ADD_TARGET_INCLUDE_DIRS(${_var} ${_D})
+                    endif()
+                endforeach()
+            endif()
+        endif()
+
+        set(GTK2_TARGETS ${GTK2_TARGETS} GTK2::${_basename})
+        set(GTK2_TARGETS ${GTK2_TARGETS} PARENT_SCOPE)
+
+        if(GTK2_USE_IMPORTED_TARGETS)
+            set(GTK2_${_var}_LIBRARY GTK2::${_basename} PARENT_SCOPE)
+        endif()
+
+    endif()
+endfunction()
+
+
+
+#=============================================================
+
+#
+# main()
+#
+
+set(GTK2_FOUND)
+set(GTK2_INCLUDE_DIRS)
+set(GTK2_LIBRARIES)
+set(GTK2_TARGETS)
+set(GTK2_DEFINITIONS)
+
+if(NOT GTK2_FIND_COMPONENTS)
+    # Assume they only want GTK
+    set(GTK2_FIND_COMPONENTS gtk)
+endif()
+
+#
+# If specified, enforce version number
+#
+if(GTK2_FIND_VERSION)
+    set(GTK2_FAILED_VERSION_CHECK true)
+    if(GTK2_DEBUG)
+        message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
+                       "Searching for version ${GTK2_FIND_VERSION}")
+    endif()
+    _GTK2_FIND_INCLUDE_DIR(GTK gtk/gtk.h)
+    if(GTK2_GTK_INCLUDE_DIR)
+        _GTK2_GET_VERSION(GTK2_MAJOR_VERSION
+                          GTK2_MINOR_VERSION
+                          GTK2_PATCH_VERSION
+                          ${GTK2_GTK_INCLUDE_DIR}/gtk/gtkversion.h)
+        set(GTK2_VERSION
+            ${GTK2_MAJOR_VERSION}.${GTK2_MINOR_VERSION}.${GTK2_PATCH_VERSION})
+        if(GTK2_FIND_VERSION_EXACT)
+            if(GTK2_VERSION VERSION_EQUAL GTK2_FIND_VERSION)
+                set(GTK2_FAILED_VERSION_CHECK false)
+            endif()
+        else()
+            if(GTK2_VERSION VERSION_EQUAL   GTK2_FIND_VERSION OR
+               GTK2_VERSION VERSION_GREATER GTK2_FIND_VERSION)
+                set(GTK2_FAILED_VERSION_CHECK false)
+            endif()
+        endif()
+    else()
+        # If we can't find the GTK include dir, we can't do version checking
+        if(GTK2_FIND_REQUIRED AND NOT GTK2_FIND_QUIETLY)
+            message(FATAL_ERROR "Could not find GTK2 include directory")
+        endif()
+        return()
+    endif()
+
+    if(GTK2_FAILED_VERSION_CHECK)
+        if(GTK2_FIND_REQUIRED AND NOT GTK2_FIND_QUIETLY)
+            if(GTK2_FIND_VERSION_EXACT)
+                message(FATAL_ERROR "GTK2 version check failed.  Version ${GTK2_VERSION} was found, version ${GTK2_FIND_VERSION} is needed exactly.")
+            else()
+                message(FATAL_ERROR "GTK2 version check failed.  Version ${GTK2_VERSION} was found, at least version ${GTK2_FIND_VERSION} is required")
+            endif()
+        endif()
+
+        # If the version check fails, exit out of the module here
+        return()
+    endif()
+endif()
+
+#
+# On MSVC, according to https://wiki.gnome.org/gtkmm/MSWindows, the /vd2 flag needs to be
+# passed to the compiler in order to use gtkmm
+#
+if(MSVC)
+    foreach(_GTK2_component ${GTK2_FIND_COMPONENTS})
+        if(_GTK2_component STREQUAL "gtkmm")
+            set(GTK2_DEFINITIONS "/vd2")
+        elseif(_GTK2_component STREQUAL "glademm")
+            set(GTK2_DEFINITIONS "/vd2")
+        endif()
+    endforeach()
+endif()
+
+#
+# Find all components
+#
+
+find_package(Freetype QUIET)
+if(FREETYPE_INCLUDE_DIR_ft2build AND FREETYPE_INCLUDE_DIR_freetype2)
+    list(APPEND GTK2_INCLUDE_DIRS ${FREETYPE_INCLUDE_DIR_ft2build} ${FREETYPE_INCLUDE_DIR_freetype2})
+endif()
+
+foreach(_GTK2_component ${GTK2_FIND_COMPONENTS})
+    if(_GTK2_component STREQUAL "gtk")
+        # Left for compatibility with previous versions.
+        _GTK2_FIND_INCLUDE_DIR(FONTCONFIG fontconfig/fontconfig.h)
+        _GTK2_FIND_INCLUDE_DIR(X11 X11/Xlib.h)
+
+        _GTK2_FIND_INCLUDE_DIR(GLIB glib.h)
+        _GTK2_FIND_INCLUDE_DIR(GLIBCONFIG glibconfig.h)
+        _GTK2_FIND_LIBRARY    (GLIB glib false true)
+        _GTK2_ADD_TARGET      (GLIB)
+
+        _GTK2_FIND_INCLUDE_DIR(GOBJECT glib-object.h)
+        _GTK2_FIND_LIBRARY    (GOBJECT gobject false true)
+        _GTK2_ADD_TARGET      (GOBJECT GTK2_DEPENDS glib)
+
+        _GTK2_FIND_INCLUDE_DIR(ATK atk/atk.h)
+        _GTK2_FIND_LIBRARY    (ATK atk false true)
+        _GTK2_ADD_TARGET      (ATK GTK2_DEPENDS gobject glib)
+
+        _GTK2_FIND_LIBRARY    (GIO gio false true)
+        _GTK2_ADD_TARGET      (GIO GTK2_DEPENDS gobject glib)
+
+        _GTK2_FIND_LIBRARY    (GTHREAD gthread false true)
+        _GTK2_ADD_TARGET      (GTHREAD GTK2_DEPENDS glib)
+
+        _GTK2_FIND_LIBRARY    (GMODULE gmodule false true)
+        _GTK2_ADD_TARGET      (GMODULE GTK2_DEPENDS glib)
+
+        _GTK2_FIND_INCLUDE_DIR(GDK_PIXBUF gdk-pixbuf/gdk-pixbuf.h)
+        _GTK2_FIND_LIBRARY    (GDK_PIXBUF gdk_pixbuf false true)
+        _GTK2_ADD_TARGET      (GDK_PIXBUF GTK2_DEPENDS gobject glib)
+
+        _GTK2_FIND_INCLUDE_DIR(CAIRO cairo.h)
+        _GTK2_FIND_LIBRARY    (CAIRO cairo false false)
+        _GTK2_ADD_TARGET      (CAIRO)
+
+        _GTK2_FIND_INCLUDE_DIR(HARFBUZZ hb.h)
+        _GTK2_FIND_LIBRARY    (HARFBUZZ harfbuzz false false)
+        _GTK2_ADD_TARGET      (HARFBUZZ)
+
+        _GTK2_FIND_INCLUDE_DIR(PANGO pango/pango.h)
+        _GTK2_FIND_LIBRARY    (PANGO pango false true)
+        _GTK2_ADD_TARGET      (PANGO GTK2_DEPENDS gobject glib
+                                     GTK2_OPTIONAL_DEPENDS harfbuzz)
+
+        _GTK2_FIND_LIBRARY    (PANGOCAIRO pangocairo false true)
+        _GTK2_ADD_TARGET      (PANGOCAIRO GTK2_DEPENDS pango cairo gobject glib)
+
+        _GTK2_FIND_LIBRARY    (PANGOFT2 pangoft2 false true)
+        _GTK2_ADD_TARGET      (PANGOFT2 GTK2_DEPENDS pango gobject glib
+                                        OPTIONAL_INCLUDES ${FREETYPE_INCLUDE_DIR_ft2build} ${FREETYPE_INCLUDE_DIR_freetype2}
+                                                          ${GTK2_FONTCONFIG_INCLUDE_DIR}
+                                                          ${GTK2_X11_INCLUDE_DIR})
+
+        _GTK2_FIND_LIBRARY    (PANGOXFT pangoxft false true)
+        _GTK2_ADD_TARGET      (PANGOXFT GTK2_DEPENDS pangoft2 pango gobject glib
+                                        OPTIONAL_INCLUDES ${FREETYPE_INCLUDE_DIR_ft2build} ${FREETYPE_INCLUDE_DIR_freetype2}
+                                                          ${GTK2_FONTCONFIG_INCLUDE_DIR}
+                                                          ${GTK2_X11_INCLUDE_DIR})
+
+        _GTK2_FIND_INCLUDE_DIR(GDK gdk/gdk.h)
+        _GTK2_FIND_INCLUDE_DIR(GDKCONFIG gdkconfig.h)
+        if(UNIX)
+            if(APPLE)
+                _GTK2_FIND_LIBRARY    (GDK gdk-quartz false true)
+            endif()
+            _GTK2_FIND_LIBRARY    (GDK gdk-x11 false true)
+        else()
+            _GTK2_FIND_LIBRARY    (GDK gdk-win32 false true)
+        endif()
+        _GTK2_ADD_TARGET (GDK GTK2_DEPENDS pango gdk_pixbuf gobject glib
+                              GTK2_OPTIONAL_DEPENDS pangocairo cairo)
+
+        _GTK2_FIND_INCLUDE_DIR(GTK gtk/gtk.h)
+        if(UNIX)
+            if(APPLE)
+                _GTK2_FIND_LIBRARY    (GTK gtk-quartz false true)
+            endif()
+            _GTK2_FIND_LIBRARY    (GTK gtk-x11 false true)
+        else()
+            _GTK2_FIND_LIBRARY    (GTK gtk-win32 false true)
+        endif()
+        _GTK2_ADD_TARGET (GTK GTK2_DEPENDS gdk atk pangoft2 pango gdk_pixbuf gthread gobject glib
+                              GTK2_OPTIONAL_DEPENDS gio pangocairo cairo)
+
+    elseif(_GTK2_component STREQUAL "gtkmm")
+
+        _GTK2_FIND_INCLUDE_DIR(SIGC++ sigc++/sigc++.h)
+        _GTK2_FIND_INCLUDE_DIR(SIGC++CONFIG sigc++config.h)
+        _GTK2_FIND_LIBRARY    (SIGC++ sigc true true)
+        _GTK2_ADD_TARGET      (SIGC++)
+        # Since sigc++ 2.5.1 c++11 support is required
+        if(GTK2_SIGC++CONFIG_INCLUDE_DIR)
+            _GTK2_SIGCXX_GET_VERSION(GTK2_SIGC++_VERSION_MAJOR
+                                     GTK2_SIGC++_VERSION_MINOR
+                                     GTK2_SIGC++_VERSION_MICRO
+                                     ${GTK2_SIGC++CONFIG_INCLUDE_DIR}/sigc++config.h)
+            if(NOT ${GTK2_SIGC++_VERSION_MAJOR}.${GTK2_SIGC++_VERSION_MINOR}.${GTK2_SIGC++_VERSION_MICRO} VERSION_LESS 2.5.1)
+                # These are the features needed by clients in order to include the
+                # project headers:
+                set_property(TARGET GTK2::sigc++
+                             PROPERTY INTERFACE_COMPILE_FEATURES cxx_alias_templates
+                                                                 cxx_auto_type
+                                                                 cxx_decltype
+                                                                 cxx_deleted_functions
+                                                                 cxx_noexcept
+                                                                 cxx_nullptr
+                                                                 cxx_right_angle_brackets
+                                                                 cxx_rvalue_references
+                                                                 cxx_variadic_templates)
+            endif()
+        endif()
+
+        _GTK2_FIND_INCLUDE_DIR(GLIBMM glibmm.h)
+        _GTK2_FIND_INCLUDE_DIR(GLIBMMCONFIG glibmmconfig.h)
+        _GTK2_FIND_LIBRARY    (GLIBMM glibmm true true)
+        _GTK2_ADD_TARGET      (GLIBMM GTK2_DEPENDS gobject sigc++ glib)
+
+        _GTK2_FIND_INCLUDE_DIR(GIOMM giomm.h)
+        _GTK2_FIND_INCLUDE_DIR(GIOMMCONFIG giommconfig.h)
+        _GTK2_FIND_LIBRARY    (GIOMM giomm true true)
+        _GTK2_ADD_TARGET      (GIOMM GTK2_DEPENDS gio glibmm gobject sigc++ glib)
+
+        _GTK2_FIND_INCLUDE_DIR(ATKMM atkmm.h)
+        _GTK2_FIND_INCLUDE_DIR(ATKMMCONFIG atkmmconfig.h)
+        _GTK2_FIND_LIBRARY    (ATKMM atkmm true true)
+        _GTK2_ADD_TARGET      (ATKMM GTK2_DEPENDS atk glibmm gobject sigc++ glib)
+
+        _GTK2_FIND_INCLUDE_DIR(CAIROMM cairomm/cairomm.h)
+        _GTK2_FIND_INCLUDE_DIR(CAIROMMCONFIG cairommconfig.h)
+        _GTK2_FIND_LIBRARY    (CAIROMM cairomm true true)
+        _GTK2_ADD_TARGET      (CAIROMM GTK2_DEPENDS cairo sigc++
+                                       OPTIONAL_INCLUDES ${FREETYPE_INCLUDE_DIR_ft2build} ${FREETYPE_INCLUDE_DIR_freetype2}
+                                                         ${GTK2_FONTCONFIG_INCLUDE_DIR}
+                                                         ${GTK2_X11_INCLUDE_DIR})
+
+        _GTK2_FIND_INCLUDE_DIR(PANGOMM pangomm.h)
+        _GTK2_FIND_INCLUDE_DIR(PANGOMMCONFIG pangommconfig.h)
+        _GTK2_FIND_LIBRARY    (PANGOMM pangomm true true)
+        _GTK2_ADD_TARGET      (PANGOMM GTK2_DEPENDS glibmm sigc++ pango gobject glib
+                                       GTK2_OPTIONAL_DEPENDS cairomm pangocairo cairo
+                                       OPTIONAL_INCLUDES ${FREETYPE_INCLUDE_DIR_ft2build} ${FREETYPE_INCLUDE_DIR_freetype2}
+                                                         ${GTK2_FONTCONFIG_INCLUDE_DIR}
+                                                         ${GTK2_X11_INCLUDE_DIR})
+
+        _GTK2_FIND_INCLUDE_DIR(GDKMM gdkmm.h)
+        _GTK2_FIND_INCLUDE_DIR(GDKMMCONFIG gdkmmconfig.h)
+        _GTK2_FIND_LIBRARY    (GDKMM gdkmm true true)
+        _GTK2_ADD_TARGET      (GDKMM GTK2_DEPENDS pangomm gtk glibmm sigc++ gdk atk pangoft2 gdk_pixbuf pango gobject glib
+                                     GTK2_OPTIONAL_DEPENDS giomm cairomm gio pangocairo cairo
+                                     OPTIONAL_INCLUDES ${FREETYPE_INCLUDE_DIR_ft2build} ${FREETYPE_INCLUDE_DIR_freetype2}
+                                                       ${GTK2_FONTCONFIG_INCLUDE_DIR}
+                                                       ${GTK2_X11_INCLUDE_DIR})
+
+        _GTK2_FIND_INCLUDE_DIR(GTKMM gtkmm.h)
+        _GTK2_FIND_INCLUDE_DIR(GTKMMCONFIG gtkmmconfig.h)
+        _GTK2_FIND_LIBRARY    (GTKMM gtkmm true true)
+        _GTK2_ADD_TARGET      (GTKMM GTK2_DEPENDS atkmm gdkmm pangomm gtk glibmm sigc++ gdk atk pangoft2 gdk_pixbuf pango gthread gobject glib
+                                     GTK2_OPTIONAL_DEPENDS giomm cairomm gio pangocairo cairo
+                                     OPTIONAL_INCLUDES ${FREETYPE_INCLUDE_DIR_ft2build} ${FREETYPE_INCLUDE_DIR_freetype2}
+                                                       ${GTK2_FONTCONFIG_INCLUDE_DIR}
+                                                       ${GTK2_X11_INCLUDE_DIR})
+
+    elseif(_GTK2_component STREQUAL "glade")
+
+        _GTK2_FIND_INCLUDE_DIR(GLADE glade/glade.h)
+        _GTK2_FIND_LIBRARY    (GLADE glade false true)
+        _GTK2_ADD_TARGET      (GLADE GTK2_DEPENDS gtk gdk atk gio pangoft2 gdk_pixbuf pango gobject glib
+                                     GTK2_OPTIONAL_DEPENDS pangocairo cairo
+                                     OPTIONAL_INCLUDES ${FREETYPE_INCLUDE_DIR_ft2build} ${FREETYPE_INCLUDE_DIR_freetype2}
+                                                       ${GTK2_FONTCONFIG_INCLUDE_DIR}
+                                                       ${GTK2_X11_INCLUDE_DIR})
+
+    elseif(_GTK2_component STREQUAL "glademm")
+
+        _GTK2_FIND_INCLUDE_DIR(GLADEMM libglademm.h)
+        _GTK2_FIND_INCLUDE_DIR(GLADEMMCONFIG libglademmconfig.h)
+        _GTK2_FIND_LIBRARY    (GLADEMM glademm true true)
+        _GTK2_ADD_TARGET      (GLADEMM GTK2_DEPENDS gtkmm glade atkmm gdkmm giomm pangomm glibmm sigc++ gtk gdk atk pangoft2 gdk_pixbuf pango gthread gobject glib
+                                       GTK2_OPTIONAL_DEPENDS giomm cairomm gio pangocairo cairo
+                                       OPTIONAL_INCLUDES ${FREETYPE_INCLUDE_DIR_ft2build} ${FREETYPE_INCLUDE_DIR_freetype2}
+                                                         ${GTK2_FONTCONFIG_INCLUDE_DIR}
+                                                         ${GTK2_X11_INCLUDE_DIR})
+
+    else()
+        message(FATAL_ERROR "Unknown GTK2 component ${_component}")
+    endif()
+endforeach()
+
+#
+# Solve for the GTK2 version if we haven't already
+#
+if(NOT GTK2_FIND_VERSION AND GTK2_GTK_INCLUDE_DIR)
+    _GTK2_GET_VERSION(GTK2_MAJOR_VERSION
+                      GTK2_MINOR_VERSION
+                      GTK2_PATCH_VERSION
+                      ${GTK2_GTK_INCLUDE_DIR}/gtk/gtkversion.h)
+    set(GTK2_VERSION ${GTK2_MAJOR_VERSION}.${GTK2_MINOR_VERSION}.${GTK2_PATCH_VERSION})
+endif()
+
+#
+# Try to enforce components
+#
+
+set(_GTK2_did_we_find_everything true)  # This gets set to GTK2_FOUND
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+
+foreach(_GTK2_component ${GTK2_FIND_COMPONENTS})
+    string(TOUPPER ${_GTK2_component} _COMPONENT_UPPER)
+
+    set(GTK2_${_COMPONENT_UPPER}_FIND_QUIETLY ${GTK2_FIND_QUIETLY})
+
+    set(FPHSA_NAME_MISMATCHED 1)
+    if(_GTK2_component STREQUAL "gtk")
+        FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTK2_${_COMPONENT_UPPER} "Some or all of the gtk libraries were not found."
+            GTK2_GTK_LIBRARY
+            GTK2_GTK_INCLUDE_DIR
+
+            GTK2_GDK_INCLUDE_DIR
+            GTK2_GDKCONFIG_INCLUDE_DIR
+            GTK2_GDK_LIBRARY
+
+            GTK2_GLIB_INCLUDE_DIR
+            GTK2_GLIBCONFIG_INCLUDE_DIR
+            GTK2_GLIB_LIBRARY
+        )
+    elseif(_GTK2_component STREQUAL "gtkmm")
+        FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTK2_${_COMPONENT_UPPER} "Some or all of the gtkmm libraries were not found."
+            GTK2_GTKMM_LIBRARY
+            GTK2_GTKMM_INCLUDE_DIR
+            GTK2_GTKMMCONFIG_INCLUDE_DIR
+
+            GTK2_GDKMM_INCLUDE_DIR
+            GTK2_GDKMMCONFIG_INCLUDE_DIR
+            GTK2_GDKMM_LIBRARY
+
+            GTK2_GLIBMM_INCLUDE_DIR
+            GTK2_GLIBMMCONFIG_INCLUDE_DIR
+            GTK2_GLIBMM_LIBRARY
+
+            FREETYPE_INCLUDE_DIR_ft2build
+            FREETYPE_INCLUDE_DIR_freetype2
+        )
+    elseif(_GTK2_component STREQUAL "glade")
+        FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTK2_${_COMPONENT_UPPER} "The glade library was not found."
+            GTK2_GLADE_LIBRARY
+            GTK2_GLADE_INCLUDE_DIR
+        )
+    elseif(_GTK2_component STREQUAL "glademm")
+        FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTK2_${_COMPONENT_UPPER} "The glademm library was not found."
+            GTK2_GLADEMM_LIBRARY
+            GTK2_GLADEMM_INCLUDE_DIR
+            GTK2_GLADEMMCONFIG_INCLUDE_DIR
+        )
+    endif()
+    unset(FPHSA_NAME_MISMATCHED)
+
+    if(NOT GTK2_${_COMPONENT_UPPER}_FOUND)
+        set(_GTK2_did_we_find_everything false)
+    endif()
+endforeach()
+
+if(GTK2_USE_IMPORTED_TARGETS)
+    set(GTK2_LIBRARIES ${GTK2_TARGETS})
+endif()
+
+
+if(_GTK2_did_we_find_everything AND NOT GTK2_VERSION_CHECK_FAILED)
+    set(GTK2_FOUND true)
+else()
+    # Unset our variables.
+    set(GTK2_FOUND false)
+    set(GTK2_VERSION)
+    set(GTK2_VERSION_MAJOR)
+    set(GTK2_VERSION_MINOR)
+    set(GTK2_VERSION_PATCH)
+    set(GTK2_INCLUDE_DIRS)
+    set(GTK2_LIBRARIES)
+    set(GTK2_TARGETS)
+    set(GTK2_DEFINITIONS)
+endif()
+
+if(GTK2_INCLUDE_DIRS)
+  list(REMOVE_DUPLICATES GTK2_INCLUDE_DIRS)
+endif()
diff --git a/share/cmake-3.22/Modules/FindGTest.cmake b/share/cmake-3.22/Modules/FindGTest.cmake
new file mode 100644
index 0000000..8e22f79
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindGTest.cmake
@@ -0,0 +1,294 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindGTest
+---------
+
+Locate the Google C++ Testing Framework.
+
+.. versionadded:: 3.20
+  Upstream ``GTestConfig.cmake`` is used if possible.
+
+Imported targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.20
+  This module defines the following :prop_tgt:`IMPORTED` targets:
+
+``GTest::gtest``
+  The Google Test ``gtest`` library, if found; adds Thread::Thread
+  automatically
+``GTest::gtest_main``
+  The Google Test ``gtest_main`` library, if found
+
+.. deprecated:: 3.20
+  For backwards compatibility, this module defines additionally the
+  following deprecated :prop_tgt:`IMPORTED` targets (available since 3.5):
+
+``GTest::GTest``
+  The Google Test ``gtest`` library, if found; adds Thread::Thread
+  automatically
+``GTest::Main``
+  The Google Test ``gtest_main`` library, if found
+
+
+Result variables
+^^^^^^^^^^^^^^^^
+
+This module will set the following variables in your project:
+
+``GTest_FOUND``
+  Found the Google Testing framework
+``GTEST_INCLUDE_DIRS``
+  the directory containing the Google Test headers
+
+The library variables below are set as normal variables.  These
+contain debug/optimized keywords when a debugging library is found.
+
+``GTEST_LIBRARIES``
+  The Google Test ``gtest`` library; note it also requires linking
+  with an appropriate thread library
+``GTEST_MAIN_LIBRARIES``
+  The Google Test ``gtest_main`` library
+``GTEST_BOTH_LIBRARIES``
+  Both ``gtest`` and ``gtest_main``
+
+Cache variables
+^^^^^^^^^^^^^^^
+
+The following cache variables may also be set:
+
+``GTEST_ROOT``
+  The root directory of the Google Test installation (may also be
+  set as an environment variable)
+``GTEST_MSVC_SEARCH``
+  If compiling with MSVC, this variable can be set to ``MT`` or
+  ``MD`` (the default) to enable searching a GTest build tree
+
+
+Example usage
+^^^^^^^^^^^^^
+
+::
+
+    enable_testing()
+    find_package(GTest REQUIRED)
+
+    add_executable(foo foo.cc)
+    target_link_libraries(foo GTest::gtest GTest::gtest_main)
+
+    add_test(AllTestsInFoo foo)
+
+
+Deeper integration with CTest
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+See :module:`GoogleTest` for information on the :command:`gtest_add_tests`
+and :command:`gtest_discover_tests` commands.
+
+.. versionchanged:: 3.9
+  Previous CMake versions defined :command:`gtest_add_tests` macro in this
+  module.
+#]=======================================================================]
+
+include(${CMAKE_CURRENT_LIST_DIR}/GoogleTest.cmake)
+
+function(__gtest_append_debugs _endvar _library)
+    if(${_library} AND ${_library}_DEBUG)
+        set(_output optimized ${${_library}} debug ${${_library}_DEBUG})
+    else()
+        set(_output ${${_library}})
+    endif()
+    set(${_endvar} ${_output} PARENT_SCOPE)
+endfunction()
+
+function(__gtest_find_library _name)
+    find_library(${_name}
+        NAMES ${ARGN}
+        HINTS
+            ENV GTEST_ROOT
+            ${GTEST_ROOT}
+        PATH_SUFFIXES ${_gtest_libpath_suffixes}
+    )
+    mark_as_advanced(${_name})
+endfunction()
+
+macro(__gtest_determine_windows_library_type _var)
+    if(EXISTS "${${_var}}")
+        file(TO_NATIVE_PATH "${${_var}}" _lib_path)
+        get_filename_component(_name "${${_var}}" NAME_WE)
+        file(STRINGS "${${_var}}" _match REGEX "${_name}\\.dll" LIMIT_COUNT 1)
+        if(NOT _match STREQUAL "")
+            set(${_var}_TYPE SHARED PARENT_SCOPE)
+        else()
+            set(${_var}_TYPE UNKNOWN PARENT_SCOPE)
+        endif()
+        return()
+    endif()
+endmacro()
+
+function(__gtest_determine_library_type _var)
+    if(WIN32)
+        # For now, at least, only Windows really needs to know the library type
+        __gtest_determine_windows_library_type(${_var})
+        __gtest_determine_windows_library_type(${_var}_RELEASE)
+        __gtest_determine_windows_library_type(${_var}_DEBUG)
+    endif()
+    # If we get here, no determination was made from the above checks
+    set(${_var}_TYPE UNKNOWN PARENT_SCOPE)
+endfunction()
+
+function(__gtest_import_library _target _var _config)
+    if(_config)
+        set(_config_suffix "_${_config}")
+    else()
+        set(_config_suffix "")
+    endif()
+
+    set(_lib "${${_var}${_config_suffix}}")
+    if(EXISTS "${_lib}")
+        if(_config)
+            set_property(TARGET ${_target} APPEND PROPERTY
+                IMPORTED_CONFIGURATIONS ${_config})
+        endif()
+        set_target_properties(${_target} PROPERTIES
+            IMPORTED_LINK_INTERFACE_LANGUAGES${_config_suffix} "CXX")
+        if(WIN32 AND ${_var}_TYPE STREQUAL SHARED)
+            set_target_properties(${_target} PROPERTIES
+                IMPORTED_IMPLIB${_config_suffix} "${_lib}")
+        else()
+            set_target_properties(${_target} PROPERTIES
+                IMPORTED_LOCATION${_config_suffix} "${_lib}")
+        endif()
+    endif()
+endfunction()
+
+function(__gtest_define_backwards_compatible_library_targets)
+    set(GTEST_BOTH_LIBRARIES ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES} PARENT_SCOPE)
+
+    # Add targets mapping the same library names as defined in
+    # older versions of CMake's FindGTest
+    if(NOT TARGET GTest::GTest)
+        add_library(GTest::GTest INTERFACE IMPORTED)
+        target_link_libraries(GTest::GTest INTERFACE GTest::gtest)
+    endif()
+    if(NOT TARGET GTest::Main)
+        add_library(GTest::Main INTERFACE IMPORTED)
+        target_link_libraries(GTest::Main INTERFACE GTest::gtest_main)
+    endif()
+endfunction()
+
+#
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+
+# first specifically look for the CMake version of GTest
+find_package(GTest QUIET NO_MODULE)
+
+# if we found the GTest cmake package then we are done, and
+# can print what we found and return.
+if(GTest_FOUND)
+    FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTest HANDLE_COMPONENTS CONFIG_MODE)
+
+    set(GTEST_LIBRARIES      GTest::gtest)
+    set(GTEST_MAIN_LIBRARIES GTest::gtest_main)
+
+    __gtest_define_backwards_compatible_library_targets()
+
+    return()
+endif()
+
+if(NOT DEFINED GTEST_MSVC_SEARCH)
+    set(GTEST_MSVC_SEARCH MD)
+endif()
+
+set(_gtest_libpath_suffixes lib)
+if(MSVC)
+    if(GTEST_MSVC_SEARCH STREQUAL "MD")
+        list(APPEND _gtest_libpath_suffixes
+            msvc/gtest-md/Debug
+            msvc/gtest-md/Release
+            msvc/x64/Debug
+            msvc/x64/Release
+            msvc/2010/gtest-md/Win32-Debug
+            msvc/2010/gtest-md/Win32-Release
+            msvc/2010/gtest-md/x64-Debug
+            msvc/2010/gtest-md/x64-Release
+            )
+    elseif(GTEST_MSVC_SEARCH STREQUAL "MT")
+        list(APPEND _gtest_libpath_suffixes
+            msvc/gtest/Debug
+            msvc/gtest/Release
+            msvc/x64/Debug
+            msvc/x64/Release
+            msvc/2010/gtest/Win32-Debug
+            msvc/2010/gtest/Win32-Release
+            msvc/2010/gtest/x64-Debug
+            msvc/2010/gtest/x64-Release
+            )
+    endif()
+endif()
+
+
+find_path(GTEST_INCLUDE_DIR gtest/gtest.h
+    HINTS
+        $ENV{GTEST_ROOT}/include
+        ${GTEST_ROOT}/include
+)
+mark_as_advanced(GTEST_INCLUDE_DIR)
+
+if(MSVC AND GTEST_MSVC_SEARCH STREQUAL "MD")
+    # The provided /MD project files for Google Test add -md suffixes to the
+    # library names.
+    __gtest_find_library(GTEST_LIBRARY            gtest-md  gtest)
+    __gtest_find_library(GTEST_LIBRARY_DEBUG      gtest-mdd gtestd)
+    __gtest_find_library(GTEST_MAIN_LIBRARY       gtest_main-md  gtest_main)
+    __gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_main-mdd gtest_maind)
+else()
+    __gtest_find_library(GTEST_LIBRARY            gtest)
+    __gtest_find_library(GTEST_LIBRARY_DEBUG      gtestd)
+    __gtest_find_library(GTEST_MAIN_LIBRARY       gtest_main)
+    __gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_maind)
+endif()
+
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTest DEFAULT_MSG GTEST_LIBRARY GTEST_INCLUDE_DIR GTEST_MAIN_LIBRARY)
+
+if(GTest_FOUND)
+    set(GTEST_INCLUDE_DIRS ${GTEST_INCLUDE_DIR})
+    __gtest_append_debugs(GTEST_LIBRARIES      GTEST_LIBRARY)
+    __gtest_append_debugs(GTEST_MAIN_LIBRARIES GTEST_MAIN_LIBRARY)
+
+    find_package(Threads QUIET)
+
+    if(NOT TARGET GTest::gtest)
+        __gtest_determine_library_type(GTEST_LIBRARY)
+        add_library(GTest::gtest ${GTEST_LIBRARY_TYPE} IMPORTED)
+        if(TARGET Threads::Threads)
+            set_target_properties(GTest::gtest PROPERTIES
+                INTERFACE_LINK_LIBRARIES Threads::Threads)
+        endif()
+        if(GTEST_LIBRARY_TYPE STREQUAL "SHARED")
+            set_target_properties(GTest::gtest PROPERTIES
+                INTERFACE_COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1")
+        endif()
+        if(GTEST_INCLUDE_DIRS)
+            set_target_properties(GTest::gtest PROPERTIES
+                INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}")
+        endif()
+        __gtest_import_library(GTest::gtest GTEST_LIBRARY "")
+        __gtest_import_library(GTest::gtest GTEST_LIBRARY "RELEASE")
+        __gtest_import_library(GTest::gtest GTEST_LIBRARY "DEBUG")
+    endif()
+    if(NOT TARGET GTest::gtest_main)
+        __gtest_determine_library_type(GTEST_MAIN_LIBRARY)
+        add_library(GTest::gtest_main ${GTEST_MAIN_LIBRARY_TYPE} IMPORTED)
+        set_target_properties(GTest::gtest_main PROPERTIES
+            INTERFACE_LINK_LIBRARIES "GTest::gtest")
+        __gtest_import_library(GTest::gtest_main GTEST_MAIN_LIBRARY "")
+        __gtest_import_library(GTest::gtest_main GTEST_MAIN_LIBRARY "RELEASE")
+        __gtest_import_library(GTest::gtest_main GTEST_MAIN_LIBRARY "DEBUG")
+    endif()
+
+    __gtest_define_backwards_compatible_library_targets()
+endif()
diff --git a/share/cmake-3.22/Modules/FindGettext.cmake b/share/cmake-3.22/Modules/FindGettext.cmake
new file mode 100644
index 0000000..99e2887
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindGettext.cmake
@@ -0,0 +1,232 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindGettext
+-----------
+
+Find GNU gettext tools
+
+This module looks for the GNU gettext tools.  This module defines the
+following values:
+
+::
+
+  GETTEXT_MSGMERGE_EXECUTABLE: the full path to the msgmerge tool.
+  GETTEXT_MSGFMT_EXECUTABLE: the full path to the msgfmt tool.
+  GETTEXT_FOUND: True if gettext has been found.
+  GETTEXT_VERSION_STRING: the version of gettext found (since CMake 2.8.8)
+
+
+
+Additionally it provides the following macros:
+
+GETTEXT_CREATE_TRANSLATIONS ( outputFile [ALL] file1 ...  fileN )
+
+::
+
+    This will create a target "translations" which will convert the
+    given input po files into the binary output mo file. If the
+    ALL option is used, the translations will also be created when
+    building the default target.
+
+GETTEXT_PROCESS_POT_FILE( <potfile> [ALL] [INSTALL_DESTINATION <destdir>]
+LANGUAGES <lang1> <lang2> ...  )
+
+::
+
+     Process the given pot file to mo files.
+     If INSTALL_DESTINATION is given then automatically install rules will
+     be created, the language subdirectory will be taken into account
+     (by default use share/locale/).
+     If ALL is specified, the pot file is processed when building the all target.
+     It creates a custom target "potfile".
+
+GETTEXT_PROCESS_PO_FILES( <lang> [ALL] [INSTALL_DESTINATION <dir>]
+PO_FILES <po1> <po2> ...  )
+
+::
+
+     Process the given po files to mo files for the given language.
+     If INSTALL_DESTINATION is given then automatically install rules will
+     be created, the language subdirectory will be taken into account
+     (by default use share/locale/).
+     If ALL is specified, the po files are processed when building the all target.
+     It creates a custom target "pofiles".
+
+.. versionadded:: 3.2
+  If you wish to use the Gettext library (libintl), use :module:`FindIntl`.
+#]=======================================================================]
+
+find_program(GETTEXT_MSGMERGE_EXECUTABLE msgmerge)
+
+find_program(GETTEXT_MSGFMT_EXECUTABLE msgfmt)
+
+if(GETTEXT_MSGMERGE_EXECUTABLE)
+  execute_process(COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --version
+                  OUTPUT_VARIABLE gettext_version
+                  ERROR_QUIET
+                  OUTPUT_STRIP_TRAILING_WHITESPACE)
+  get_filename_component(msgmerge_name ${GETTEXT_MSGMERGE_EXECUTABLE} NAME)
+  get_filename_component(msgmerge_namewe ${GETTEXT_MSGMERGE_EXECUTABLE} NAME_WE)
+  if (gettext_version MATCHES "^(${msgmerge_name}|${msgmerge_namewe}) \\([^\\)]*\\) ([0-9\\.]+[^ \n]*)")
+    set(GETTEXT_VERSION_STRING "${CMAKE_MATCH_2}")
+  endif()
+  unset(gettext_version)
+  unset(msgmerge_name)
+  unset(msgmerge_namewe)
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(Gettext
+                                  REQUIRED_VARS GETTEXT_MSGMERGE_EXECUTABLE GETTEXT_MSGFMT_EXECUTABLE
+                                  VERSION_VAR GETTEXT_VERSION_STRING)
+
+function(_GETTEXT_GET_UNIQUE_TARGET_NAME _name _unique_name)
+  set(propertyName "_GETTEXT_UNIQUE_COUNTER_${_name}")
+  get_property(currentCounter GLOBAL PROPERTY "${propertyName}")
+  if(NOT currentCounter)
+    set(currentCounter 1)
+  endif()
+  set(${_unique_name} "${_name}_${currentCounter}" PARENT_SCOPE)
+  math(EXPR currentCounter "${currentCounter} + 1")
+  set_property(GLOBAL PROPERTY ${propertyName} ${currentCounter} )
+endfunction()
+
+macro(GETTEXT_CREATE_TRANSLATIONS _potFile _firstPoFileArg)
+  # make it a real variable, so we can modify it here
+  set(_firstPoFile "${_firstPoFileArg}")
+
+  set(_gmoFiles)
+  get_filename_component(_potName ${_potFile} NAME)
+  string(REGEX REPLACE "^(.+)(\\.[^.]+)$" "\\1" _potBasename ${_potName})
+  get_filename_component(_absPotFile ${_potFile} ABSOLUTE)
+
+  set(_addToAll)
+  if(${_firstPoFile} STREQUAL "ALL")
+    set(_addToAll "ALL")
+    set(_firstPoFile)
+  endif()
+
+  foreach (_currentPoFile ${_firstPoFile} ${ARGN})
+    get_filename_component(_absFile ${_currentPoFile} ABSOLUTE)
+    get_filename_component(_abs_PATH ${_absFile} PATH)
+    get_filename_component(_lang ${_absFile} NAME_WE)
+    set(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo)
+
+    add_custom_command(
+      OUTPUT ${_gmoFile}
+      COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --quiet --update --backup=none -s ${_absFile} ${_absPotFile}
+      COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_absFile}
+      DEPENDS ${_absPotFile} ${_absFile}
+    )
+
+    install(FILES ${_gmoFile} DESTINATION share/locale/${_lang}/LC_MESSAGES RENAME ${_potBasename}.mo)
+    set(_gmoFiles ${_gmoFiles} ${_gmoFile})
+
+  endforeach ()
+
+  if(NOT TARGET translations)
+    add_custom_target(translations)
+  endif()
+
+  _GETTEXT_GET_UNIQUE_TARGET_NAME(translations uniqueTargetName)
+
+  add_custom_target(${uniqueTargetName} ${_addToAll} DEPENDS ${_gmoFiles})
+
+  add_dependencies(translations ${uniqueTargetName})
+
+endmacro()
+
+
+function(GETTEXT_PROCESS_POT_FILE _potFile)
+  set(_gmoFiles)
+  set(_options ALL)
+  set(_oneValueArgs INSTALL_DESTINATION)
+  set(_multiValueArgs LANGUAGES)
+
+  CMAKE_PARSE_ARGUMENTS(_parsedArguments "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN})
+
+  get_filename_component(_potName ${_potFile} NAME)
+  string(REGEX REPLACE "^(.+)(\\.[^.]+)$" "\\1" _potBasename ${_potName})
+  get_filename_component(_absPotFile ${_potFile} ABSOLUTE)
+
+  foreach (_lang ${_parsedArguments_LANGUAGES})
+    set(_poFile  "${CMAKE_CURRENT_BINARY_DIR}/${_lang}.po")
+    set(_gmoFile "${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo")
+
+    add_custom_command(
+      OUTPUT "${_poFile}"
+      COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --quiet --update --backup=none -s ${_poFile} ${_absPotFile}
+      DEPENDS ${_absPotFile}
+    )
+
+    add_custom_command(
+      OUTPUT "${_gmoFile}"
+      COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_poFile}
+      DEPENDS ${_absPotFile} ${_poFile}
+    )
+
+    if(_parsedArguments_INSTALL_DESTINATION)
+      install(FILES ${_gmoFile} DESTINATION ${_parsedArguments_INSTALL_DESTINATION}/${_lang}/LC_MESSAGES RENAME ${_potBasename}.mo)
+    endif()
+    list(APPEND _gmoFiles ${_gmoFile})
+  endforeach ()
+
+  if(NOT TARGET potfiles)
+    add_custom_target(potfiles)
+  endif()
+
+  _GETTEXT_GET_UNIQUE_TARGET_NAME( potfiles uniqueTargetName)
+
+  if(_parsedArguments_ALL)
+    add_custom_target(${uniqueTargetName} ALL DEPENDS ${_gmoFiles})
+  else()
+    add_custom_target(${uniqueTargetName} DEPENDS ${_gmoFiles})
+  endif()
+
+  add_dependencies(potfiles ${uniqueTargetName})
+
+endfunction()
+
+
+function(GETTEXT_PROCESS_PO_FILES _lang)
+  set(_options ALL)
+  set(_oneValueArgs INSTALL_DESTINATION)
+  set(_multiValueArgs PO_FILES)
+  set(_gmoFiles)
+
+  CMAKE_PARSE_ARGUMENTS(_parsedArguments "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN})
+
+  foreach(_current_PO_FILE ${_parsedArguments_PO_FILES})
+    get_filename_component(_name ${_current_PO_FILE} NAME)
+    string(REGEX REPLACE "^(.+)(\\.[^.]+)$" "\\1" _basename ${_name})
+    set(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.gmo)
+    add_custom_command(OUTPUT ${_gmoFile}
+      COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_current_PO_FILE}
+      WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
+      DEPENDS ${_current_PO_FILE}
+    )
+
+    if(_parsedArguments_INSTALL_DESTINATION)
+      install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.gmo DESTINATION ${_parsedArguments_INSTALL_DESTINATION}/${_lang}/LC_MESSAGES/ RENAME ${_basename}.mo)
+    endif()
+    list(APPEND _gmoFiles ${_gmoFile})
+  endforeach()
+
+
+  if(NOT TARGET pofiles)
+    add_custom_target(pofiles)
+  endif()
+
+  _GETTEXT_GET_UNIQUE_TARGET_NAME( pofiles uniqueTargetName)
+
+  if(_parsedArguments_ALL)
+    add_custom_target(${uniqueTargetName} ALL DEPENDS ${_gmoFiles})
+  else()
+    add_custom_target(${uniqueTargetName} DEPENDS ${_gmoFiles})
+  endif()
+
+  add_dependencies(pofiles ${uniqueTargetName})
+
+endfunction()
diff --git a/share/cmake-3.22/Modules/FindGit.cmake b/share/cmake-3.22/Modules/FindGit.cmake
new file mode 100644
index 0000000..99850b4
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindGit.cmake
@@ -0,0 +1,130 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindGit
+-------
+
+The module defines the following variables:
+
+``GIT_EXECUTABLE``
+  Path to Git command-line client.
+``Git_FOUND``, ``GIT_FOUND``
+  True if the Git command-line client was found.
+``GIT_VERSION_STRING``
+  The version of Git found.
+
+.. versionadded:: 3.14
+  The module defines the following ``IMPORTED`` targets (when
+  :prop_gbl:`CMAKE_ROLE` is ``PROJECT``):
+
+``Git::Git``
+  Executable of the Git command-line client.
+
+Example usage:
+
+.. code-block:: cmake
+
+   find_package(Git)
+   if(Git_FOUND)
+     message("Git found: ${GIT_EXECUTABLE}")
+   endif()
+#]=======================================================================]
+
+# Look for 'git' or 'eg' (easy git)
+#
+set(git_names git eg)
+
+# Prefer .cmd variants on Windows unless running in a Makefile
+# in the MSYS shell.
+#
+if(CMAKE_HOST_WIN32)
+  if(NOT CMAKE_GENERATOR MATCHES "MSYS")
+    set(git_names git.cmd git eg.cmd eg)
+    # GitHub search path for Windows
+    file(GLOB github_path
+      "$ENV{LOCALAPPDATA}/Github/PortableGit*/cmd"
+      "$ENV{LOCALAPPDATA}/Github/PortableGit*/bin"
+      )
+    # SourceTree search path for Windows
+    set(_git_sourcetree_path "$ENV{LOCALAPPDATA}/Atlassian/SourceTree/git_local/bin")
+  endif()
+endif()
+
+# First search the PATH and specific locations.
+find_program(GIT_EXECUTABLE
+  NAMES ${git_names}
+  PATHS ${github_path} ${_git_sourcetree_path}
+  DOC "Git command line client"
+  )
+
+if(CMAKE_HOST_WIN32)
+  # Now look for installations in Git/ directories under typical installation
+  # prefixes on Windows.  Exclude PATH from this search because VS 2017's
+  # command prompt happens to have a PATH entry with a Git/ subdirectory
+  # containing a minimal git not meant for general use.
+  find_program(GIT_EXECUTABLE
+    NAMES ${git_names}
+    PATH_SUFFIXES Git/cmd Git/bin
+    NO_SYSTEM_ENVIRONMENT_PATH
+    DOC "Git command line client"
+    )
+endif()
+
+mark_as_advanced(GIT_EXECUTABLE)
+
+unset(git_names)
+unset(_git_sourcetree_path)
+
+if(GIT_EXECUTABLE)
+  # Avoid querying the version if we've already done that this run. For
+  # projects that use things like ExternalProject or FetchContent heavily,
+  # this saving can be measurable on some platforms.
+  #
+  # This is an internal property, projects must not try to use it.
+  # We don't want this stored in the cache because it might still change
+  # between CMake runs, but it shouldn't change during a run for a given
+  # git executable location.
+  set(__doGitVersionCheck TRUE)
+  get_property(__gitVersionProp GLOBAL
+    PROPERTY _CMAKE_FindGit_GIT_EXECUTABLE_VERSION
+  )
+  if(__gitVersionProp)
+    list(GET __gitVersionProp 0 __gitExe)
+    list(GET __gitVersionProp 1 __gitVersion)
+    if(__gitExe STREQUAL GIT_EXECUTABLE AND NOT __gitVersion STREQUAL "")
+      set(GIT_VERSION_STRING "${__gitVersion}")
+      set(__doGitVersionCheck FALSE)
+    endif()
+    unset(__gitExe)
+    unset(__gitVersion)
+  endif()
+  unset(__gitVersionProp)
+
+  if(__doGitVersionCheck)
+    execute_process(COMMAND ${GIT_EXECUTABLE} --version
+                    OUTPUT_VARIABLE git_version
+                    ERROR_QUIET
+                    OUTPUT_STRIP_TRAILING_WHITESPACE)
+    if (git_version MATCHES "^git version [0-9]")
+      string(REPLACE "git version " "" GIT_VERSION_STRING "${git_version}")
+      set_property(GLOBAL PROPERTY _CMAKE_FindGit_GIT_EXECUTABLE_VERSION
+        "${GIT_EXECUTABLE};${GIT_VERSION_STRING}"
+      )
+    endif()
+    unset(git_version)
+  endif()
+  unset(__doGitVersionCheck)
+
+  get_property(_findgit_role GLOBAL PROPERTY CMAKE_ROLE)
+  if(_findgit_role STREQUAL "PROJECT" AND NOT TARGET Git::Git)
+    add_executable(Git::Git IMPORTED)
+    set_property(TARGET Git::Git PROPERTY IMPORTED_LOCATION "${GIT_EXECUTABLE}")
+  endif()
+  unset(_findgit_role)
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+find_package_handle_standard_args(Git
+                                  REQUIRED_VARS GIT_EXECUTABLE
+                                  VERSION_VAR GIT_VERSION_STRING)
diff --git a/share/cmake-3.22/Modules/FindGnuTLS.cmake b/share/cmake-3.22/Modules/FindGnuTLS.cmake
new file mode 100644
index 0000000..782a72b
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindGnuTLS.cmake
@@ -0,0 +1,84 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindGnuTLS
+----------
+
+Find the GNU Transport Layer Security library (gnutls)
+
+IMPORTED Targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.16
+
+This module defines :prop_tgt:`IMPORTED` target ``GnuTLS::GnuTLS``, if
+gnutls has been found.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+``GNUTLS_FOUND``
+  System has gnutls
+``GNUTLS_INCLUDE_DIR``
+  The gnutls include directory
+``GNUTLS_LIBRARIES``
+  The libraries needed to use gnutls
+``GNUTLS_DEFINITIONS``
+  Compiler switches required for using gnutls
+``GNUTLS_VERSION``
+  version of gnutls.
+#]=======================================================================]
+
+# Note that this doesn't try to find the gnutls-extra package.
+
+
+if (GNUTLS_INCLUDE_DIR AND GNUTLS_LIBRARY)
+  # in cache already
+  set(gnutls_FIND_QUIETLY TRUE)
+endif ()
+
+if (NOT WIN32)
+  # try using pkg-config to get the directories and then use these values
+  # in the find_path() and find_library() calls
+  # also fills in GNUTLS_DEFINITIONS, although that isn't normally useful
+  find_package(PkgConfig QUIET)
+  PKG_CHECK_MODULES(PC_GNUTLS QUIET gnutls)
+  set(GNUTLS_DEFINITIONS ${PC_GNUTLS_CFLAGS_OTHER})
+  set(GNUTLS_VERSION ${PC_GNUTLS_VERSION})
+  # keep for backward compatibility
+  set(GNUTLS_VERSION_STRING ${PC_GNUTLS_VERSION})
+endif ()
+
+find_path(GNUTLS_INCLUDE_DIR gnutls/gnutls.h
+  HINTS
+    ${PC_GNUTLS_INCLUDEDIR}
+    ${PC_GNUTLS_INCLUDE_DIRS}
+  )
+
+find_library(GNUTLS_LIBRARY NAMES gnutls libgnutls
+  HINTS
+    ${PC_GNUTLS_LIBDIR}
+    ${PC_GNUTLS_LIBRARY_DIRS}
+  )
+
+mark_as_advanced(GNUTLS_INCLUDE_DIR GNUTLS_LIBRARY)
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(GnuTLS
+                                  REQUIRED_VARS GNUTLS_LIBRARY GNUTLS_INCLUDE_DIR
+                                  VERSION_VAR GNUTLS_VERSION_STRING)
+
+if(GNUTLS_FOUND)
+  set(GNUTLS_LIBRARIES    ${GNUTLS_LIBRARY})
+  set(GNUTLS_INCLUDE_DIRS ${GNUTLS_INCLUDE_DIR})
+
+  if(NOT TARGET GnuTLS::GnuTLS)
+    add_library(GnuTLS::GnuTLS UNKNOWN IMPORTED)
+    set_target_properties(GnuTLS::GnuTLS PROPERTIES
+      INTERFACE_INCLUDE_DIRECTORIES "${GNUTLS_INCLUDE_DIRS}"
+      INTERFACE_COMPILE_DEFINITIONS "${GNUTLS_DEFINITIONS}"
+      IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+      IMPORTED_LOCATION "${GNUTLS_LIBRARIES}")
+  endif()
+endif()
diff --git a/share/cmake-3.22/Modules/FindGnuplot.cmake b/share/cmake-3.22/Modules/FindGnuplot.cmake
new file mode 100644
index 0000000..b4ea6ab
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindGnuplot.cmake
@@ -0,0 +1,57 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindGnuplot
+-----------
+
+this module looks for gnuplot
+
+
+
+Once done this will define
+
+::
+
+  GNUPLOT_FOUND - system has Gnuplot
+  GNUPLOT_EXECUTABLE - the Gnuplot executable
+  GNUPLOT_VERSION_STRING - the version of Gnuplot found (since CMake 2.8.8)
+
+
+
+GNUPLOT_VERSION_STRING will not work for old versions like 3.7.1.
+#]=======================================================================]
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindCygwin.cmake)
+include(${CMAKE_CURRENT_LIST_DIR}/FindMsys.cmake)
+
+find_program(GNUPLOT_EXECUTABLE
+  NAMES
+  gnuplot
+  pgnuplot
+  wgnupl32
+  PATHS
+  ${CYGWIN_INSTALL_PATH}/bin
+  ${MSYS_INSTALL_PATH}/usr/bin
+)
+
+if (GNUPLOT_EXECUTABLE)
+    execute_process(COMMAND "${GNUPLOT_EXECUTABLE}" --version
+                  OUTPUT_VARIABLE GNUPLOT_OUTPUT_VARIABLE
+                  ERROR_QUIET
+                  OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+    string(REGEX REPLACE "^gnuplot ([0-9\\.]+)( patchlevel )?" "\\1." GNUPLOT_VERSION_STRING "${GNUPLOT_OUTPUT_VARIABLE}")
+    string(REGEX REPLACE "\\.$" "" GNUPLOT_VERSION_STRING "${GNUPLOT_VERSION_STRING}")
+    unset(GNUPLOT_OUTPUT_VARIABLE)
+endif()
+
+# for compatibility
+set(GNUPLOT ${GNUPLOT_EXECUTABLE})
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(Gnuplot
+                                  REQUIRED_VARS GNUPLOT_EXECUTABLE
+                                  VERSION_VAR GNUPLOT_VERSION_STRING)
+
+mark_as_advanced( GNUPLOT_EXECUTABLE )
diff --git a/share/cmake-3.22/Modules/FindHDF5.cmake b/share/cmake-3.22/Modules/FindHDF5.cmake
new file mode 100644
index 0000000..6cadadb
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindHDF5.cmake
@@ -0,0 +1,1191 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindHDF5
+--------
+
+Find Hierarchical Data Format (HDF5), a library for reading and writing
+self describing array data.
+
+
+This module invokes the ``HDF5`` wrapper compiler that should be installed
+alongside ``HDF5``.  Depending upon the ``HDF5`` Configuration, the wrapper
+compiler is called either ``h5cc`` or ``h5pcc``.  If this succeeds, the module
+will then call the compiler with the show argument to see what flags
+are used when compiling an ``HDF5`` client application.
+
+The module will optionally accept the ``COMPONENTS`` argument.  If no
+``COMPONENTS`` are specified, then the find module will default to finding
+only the ``HDF5`` C library.  If one or more ``COMPONENTS`` are specified, the
+module will attempt to find the language bindings for the specified
+components.  The valid components are ``C``, ``CXX``, ``Fortran``, ``HL``.
+``HL`` refers to the "high-level" HDF5 functions for C and Fortran.
+If the ``COMPONENTS`` argument is not given, the module will
+attempt to find only the C bindings.
+For example, to use Fortran HDF5 and HDF5-HL functions, do:
+``find_package(HDF5 COMPONENTS Fortran HL)``.
+
+This module will read the variable
+``HDF5_USE_STATIC_LIBRARIES`` to determine whether or not to prefer a
+static link to a dynamic link for ``HDF5`` and all of it's dependencies.
+To use this feature, make sure that the ``HDF5_USE_STATIC_LIBRARIES``
+variable is set before the call to find_package.
+
+.. versionadded:: 3.10
+  Support for ``HDF5_USE_STATIC_LIBRARIES`` on Windows.
+
+Both the serial and parallel ``HDF5`` wrappers are considered and the first
+directory to contain either one will be used.  In the event that both appear
+in the same directory the serial version is preferentially selected. This
+behavior can be reversed by setting the variable ``HDF5_PREFER_PARALLEL`` to
+``TRUE``.
+
+In addition to finding the includes and libraries required to compile
+an ``HDF5`` client application, this module also makes an effort to find
+tools that come with the ``HDF5`` distribution that may be useful for
+regression testing.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This module will set the following variables in your project:
+
+``HDF5_FOUND``
+  HDF5 was found on the system
+``HDF5_VERSION``
+  .. versionadded:: 3.3
+    HDF5 library version
+``HDF5_INCLUDE_DIRS``
+  Location of the HDF5 header files
+``HDF5_DEFINITIONS``
+  Required compiler definitions for HDF5
+``HDF5_LIBRARIES``
+  Required libraries for all requested bindings
+``HDF5_HL_LIBRARIES``
+  Required libraries for the HDF5 high level API for all bindings,
+  if the ``HL`` component is enabled
+
+Available components are: ``C`` ``CXX`` ``Fortran`` and ``HL``.
+For each enabled language binding, a corresponding ``HDF5_${LANG}_LIBRARIES``
+variable, and potentially ``HDF5_${LANG}_DEFINITIONS``, will be defined.
+If the ``HL`` component is enabled, then an ``HDF5_${LANG}_HL_LIBRARIES`` will
+also be defined.  With all components enabled, the following variables will be defined:
+
+``HDF5_C_DEFINITIONS``
+  Required compiler definitions for HDF5 C bindings
+``HDF5_CXX_DEFINITIONS``
+  Required compiler definitions for HDF5 C++ bindings
+``HDF5_Fortran_DEFINITIONS``
+  Required compiler definitions for HDF5 Fortran bindings
+``HDF5_C_INCLUDE_DIRS``
+  Required include directories for HDF5 C bindings
+``HDF5_CXX_INCLUDE_DIRS``
+  Required include directories for HDF5 C++ bindings
+``HDF5_Fortran_INCLUDE_DIRS``
+  Required include directories for HDF5 Fortran bindings
+``HDF5_C_LIBRARIES``
+  Required libraries for the HDF5 C bindings
+``HDF5_CXX_LIBRARIES``
+  Required libraries for the HDF5 C++ bindings
+``HDF5_Fortran_LIBRARIES``
+  Required libraries for the HDF5 Fortran bindings
+``HDF5_C_HL_LIBRARIES``
+  Required libraries for the high level C bindings
+``HDF5_CXX_HL_LIBRARIES``
+  Required libraries for the high level C++ bindings
+``HDF5_Fortran_HL_LIBRARIES``
+  Required libraries for the high level Fortran bindings.
+
+``HDF5_IS_PARALLEL``
+  HDF5 library has parallel IO support
+``HDF5_C_COMPILER_EXECUTABLE``
+  path to the HDF5 C wrapper compiler
+``HDF5_CXX_COMPILER_EXECUTABLE``
+  path to the HDF5 C++ wrapper compiler
+``HDF5_Fortran_COMPILER_EXECUTABLE``
+  path to the HDF5 Fortran wrapper compiler
+``HDF5_C_COMPILER_EXECUTABLE_NO_INTERROGATE``
+  path to the primary C compiler which is also the HDF5 wrapper
+``HDF5_CXX_COMPILER_EXECUTABLE_NO_INTERROGATE``
+  path to the primary C++ compiler which is also the HDF5 wrapper
+``HDF5_Fortran_COMPILER_EXECUTABLE_NO_INTERROGATE``
+  path to the primary Fortran compiler which is also the HDF5 wrapper
+``HDF5_DIFF_EXECUTABLE``
+  path to the HDF5 dataset comparison tool
+
+With all components enabled, the following targets will be defined:
+
+``HDF5::HDF5``
+  All detected ``HDF5_LIBRARIES``.
+``hdf5::hdf5``
+  C library.
+``hdf5::hdf5_cpp``
+  C++ library.
+``hdf5::hdf5_fortran``
+  Fortran library.
+``hdf5::hdf5_hl``
+  High-level C library.
+``hdf5::hdf5_hl_cpp``
+  High-level C++ library.
+``hdf5::hdf5_hl_fortran``
+  High-level Fortran library.
+``hdf5::h5diff``
+  ``h5diff`` executable.
+
+Hints
+^^^^^
+
+The following variables can be set to guide the search for HDF5 libraries and includes:
+
+``HDF5_PREFER_PARALLEL``
+  .. versionadded:: 3.4
+
+  set ``true`` to prefer parallel HDF5 (by default, serial is preferred)
+
+``HDF5_FIND_DEBUG``
+  .. versionadded:: 3.9
+
+  Set ``true`` to get extra debugging output.
+
+``HDF5_NO_FIND_PACKAGE_CONFIG_FILE``
+  .. versionadded:: 3.8
+
+  Set ``true`` to skip trying to find ``hdf5-config.cmake``.
+#]=======================================================================]
+
+include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+
+# We haven't found HDF5 yet. Clear its state in case it is set in the parent
+# scope somewhere else. We can't rely on it because different components may
+# have been requested for this call.
+set(HDF5_FOUND OFF)
+set(HDF5_LIBRARIES)
+set(HDF5_HL_LIBRARIES)
+
+# List of the valid HDF5 components
+set(HDF5_VALID_LANGUAGE_BINDINGS C CXX Fortran)
+
+# Validate the list of find components.
+if(NOT HDF5_FIND_COMPONENTS)
+  set(HDF5_LANGUAGE_BINDINGS "C")
+else()
+  set(HDF5_LANGUAGE_BINDINGS)
+  # add the extra specified components, ensuring that they are valid.
+  set(HDF5_FIND_HL OFF)
+  foreach(_component IN LISTS HDF5_FIND_COMPONENTS)
+    list(FIND HDF5_VALID_LANGUAGE_BINDINGS ${_component} _component_location)
+    if(NOT _component_location EQUAL -1)
+      list(APPEND HDF5_LANGUAGE_BINDINGS ${_component})
+    elseif(_component STREQUAL "HL")
+      set(HDF5_FIND_HL ON)
+    elseif(_component STREQUAL "Fortran_HL") # only for compatibility
+      list(APPEND HDF5_LANGUAGE_BINDINGS Fortran)
+      set(HDF5_FIND_HL ON)
+      set(HDF5_FIND_REQUIRED_Fortran_HL FALSE)
+      set(HDF5_FIND_REQUIRED_Fortran TRUE)
+      set(HDF5_FIND_REQUIRED_HL TRUE)
+    else()
+      message(FATAL_ERROR "${_component} is not a valid HDF5 component.")
+    endif()
+  endforeach()
+  unset(_component)
+  unset(_component_location)
+  if(NOT HDF5_LANGUAGE_BINDINGS)
+    get_property(_langs GLOBAL PROPERTY ENABLED_LANGUAGES)
+    foreach(_lang IN LISTS _langs)
+      if(_lang MATCHES "^(C|CXX|Fortran)$")
+        list(APPEND HDF5_LANGUAGE_BINDINGS ${_lang})
+      endif()
+    endforeach()
+  endif()
+  list(REMOVE_ITEM HDF5_FIND_COMPONENTS Fortran_HL) # replaced by Fortran and HL
+  list(REMOVE_DUPLICATES HDF5_LANGUAGE_BINDINGS)
+endif()
+
+# Determine whether to search for serial or parallel executable first
+if(HDF5_PREFER_PARALLEL)
+  set(HDF5_C_COMPILER_NAMES h5pcc h5cc)
+  set(HDF5_CXX_COMPILER_NAMES h5pc++ h5c++)
+  set(HDF5_Fortran_COMPILER_NAMES h5pfc h5fc)
+else()
+  set(HDF5_C_COMPILER_NAMES h5cc h5pcc)
+  set(HDF5_CXX_COMPILER_NAMES h5c++ h5pc++)
+  set(HDF5_Fortran_COMPILER_NAMES h5fc h5pfc)
+endif()
+
+# Test first if the current compilers automatically wrap HDF5
+function(_HDF5_test_regular_compiler_C success version is_parallel)
+  set(scratch_directory
+    ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/hdf5)
+  if(NOT ${success} OR
+     NOT EXISTS ${scratch_directory}/compiler_has_h5_c)
+    set(test_file ${scratch_directory}/cmake_hdf5_test.c)
+    file(WRITE ${test_file}
+      "#include <hdf5.h>\n"
+      "const char* info_ver = \"INFO\" \":\" H5_VERSION;\n"
+      "#ifdef H5_HAVE_PARALLEL\n"
+      "const char* info_parallel = \"INFO\" \":\" \"PARALLEL\";\n"
+      "#endif\n"
+      "int main(int argc, char **argv) {\n"
+      "  int require = 0;\n"
+      "  require += info_ver[argc];\n"
+      "#ifdef H5_HAVE_PARALLEL\n"
+      "  require += info_parallel[argc];\n"
+      "#endif\n"
+      "  hid_t fid;\n"
+      "  fid = H5Fcreate(\"foo.h5\",H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT);\n"
+      "  return 0;\n"
+      "}")
+    try_compile(${success} ${scratch_directory} ${test_file}
+      COPY_FILE ${scratch_directory}/compiler_has_h5_c
+    )
+  endif()
+  if(${success})
+    file(STRINGS ${scratch_directory}/compiler_has_h5_c INFO_STRINGS
+      REGEX "^INFO:"
+    )
+    string(REGEX MATCH "^INFO:([0-9]+\\.[0-9]+\\.[0-9]+)(-patch([0-9]+))?"
+      INFO_VER "${INFO_STRINGS}"
+    )
+    set(${version} ${CMAKE_MATCH_1})
+    if(CMAKE_MATCH_3)
+      set(${version} ${HDF5_C_VERSION}.${CMAKE_MATCH_3})
+    endif()
+    set(${version} ${${version}} PARENT_SCOPE)
+
+    if(INFO_STRINGS MATCHES "INFO:PARALLEL")
+      set(${is_parallel} TRUE PARENT_SCOPE)
+    else()
+      set(${is_parallel} FALSE PARENT_SCOPE)
+    endif()
+  endif()
+endfunction()
+
+function(_HDF5_test_regular_compiler_CXX success version is_parallel)
+  set(scratch_directory ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/hdf5)
+  if(NOT ${success} OR
+     NOT EXISTS ${scratch_directory}/compiler_has_h5_cxx)
+    set(test_file ${scratch_directory}/cmake_hdf5_test.cxx)
+    file(WRITE ${test_file}
+      "#include <H5Cpp.h>\n"
+      "#ifndef H5_NO_NAMESPACE\n"
+      "using namespace H5;\n"
+      "#endif\n"
+      "const char* info_ver = \"INFO\" \":\" H5_VERSION;\n"
+      "#ifdef H5_HAVE_PARALLEL\n"
+      "const char* info_parallel = \"INFO\" \":\" \"PARALLEL\";\n"
+      "#endif\n"
+      "int main(int argc, char **argv) {\n"
+      "  int require = 0;\n"
+      "  require += info_ver[argc];\n"
+      "#ifdef H5_HAVE_PARALLEL\n"
+      "  require += info_parallel[argc];\n"
+      "#endif\n"
+      "  H5File file(\"foo.h5\", H5F_ACC_TRUNC);\n"
+      "  return 0;\n"
+      "}")
+    try_compile(${success} ${scratch_directory} ${test_file}
+      COPY_FILE ${scratch_directory}/compiler_has_h5_cxx
+    )
+  endif()
+  if(${success})
+    file(STRINGS ${scratch_directory}/compiler_has_h5_cxx INFO_STRINGS
+      REGEX "^INFO:"
+    )
+    string(REGEX MATCH "^INFO:([0-9]+\\.[0-9]+\\.[0-9]+)(-patch([0-9]+))?"
+      INFO_VER "${INFO_STRINGS}"
+    )
+    set(${version} ${CMAKE_MATCH_1})
+    if(CMAKE_MATCH_3)
+      set(${version} ${HDF5_CXX_VERSION}.${CMAKE_MATCH_3})
+    endif()
+    set(${version} ${${version}} PARENT_SCOPE)
+
+    if(INFO_STRINGS MATCHES "INFO:PARALLEL")
+      set(${is_parallel} TRUE PARENT_SCOPE)
+    else()
+      set(${is_parallel} FALSE PARENT_SCOPE)
+    endif()
+  endif()
+endfunction()
+
+function(_HDF5_test_regular_compiler_Fortran success is_parallel)
+  if(NOT ${success})
+    set(scratch_directory
+      ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/hdf5)
+    set(test_file ${scratch_directory}/cmake_hdf5_test.f90)
+    file(WRITE ${test_file}
+      "program hdf5_hello\n"
+      "  use hdf5\n"
+      "  use h5lt\n"
+      "  use h5ds\n"
+      "  integer error\n"
+      "  call h5open_f(error)\n"
+      "  call h5close_f(error)\n"
+      "end\n")
+    try_compile(${success} ${scratch_directory} ${test_file})
+    if(${success})
+      execute_process(COMMAND ${CMAKE_Fortran_COMPILER} -showconfig
+        OUTPUT_VARIABLE config_output
+        ERROR_VARIABLE config_error
+        RESULT_VARIABLE config_result
+        )
+      if(config_output MATCHES "Parallel HDF5: yes")
+        set(${is_parallel} TRUE PARENT_SCOPE)
+      else()
+        set(${is_parallel} FALSE PARENT_SCOPE)
+      endif()
+    endif()
+  endif()
+endfunction()
+
+# Invoke the HDF5 wrapper compiler.  The compiler return value is stored to the
+# return_value argument, the text output is stored to the output variable.
+function( _HDF5_invoke_compiler language output_var return_value_var version_var is_parallel_var)
+  set(is_parallel FALSE)
+  if(HDF5_USE_STATIC_LIBRARIES)
+    set(lib_type_args -noshlib)
+  else()
+    set(lib_type_args -shlib)
+  endif()
+  set(scratch_dir ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/hdf5)
+  if("${language}" STREQUAL "C")
+    set(test_file ${scratch_dir}/cmake_hdf5_test.c)
+  elseif("${language}" STREQUAL "CXX")
+    set(test_file ${scratch_dir}/cmake_hdf5_test.cxx)
+  elseif("${language}" STREQUAL "Fortran")
+    set(test_file ${scratch_dir}/cmake_hdf5_test.f90)
+  endif()
+  # Verify that the compiler wrapper can actually compile: sometimes the compiler
+  # wrapper exists, but not the compiler.  E.g. Miniconda / Anaconda Python
+  execute_process(
+    COMMAND ${HDF5_${language}_COMPILER_EXECUTABLE} ${test_file}
+    WORKING_DIRECTORY ${scratch_dir}
+    OUTPUT_VARIABLE output
+    ERROR_VARIABLE output
+    RESULT_VARIABLE return_value
+    )
+  if(return_value AND NOT HDF5_FIND_QUIETLY)
+    message(STATUS
+      "HDF5 ${language} compiler wrapper is unable to compile a minimal HDF5 program.")
+  else()
+    execute_process(
+      COMMAND ${HDF5_${language}_COMPILER_EXECUTABLE} -show ${lib_type_args} ${test_file}
+      WORKING_DIRECTORY ${scratch_dir}
+      OUTPUT_VARIABLE output
+      ERROR_VARIABLE output
+      RESULT_VARIABLE return_value
+      OUTPUT_STRIP_TRAILING_WHITESPACE
+      )
+    if(return_value AND NOT HDF5_FIND_QUIETLY)
+      message(STATUS
+        "Unable to determine HDF5 ${language} flags from HDF5 wrapper.")
+    endif()
+    execute_process(
+      COMMAND ${HDF5_${language}_COMPILER_EXECUTABLE} -showconfig
+      OUTPUT_VARIABLE config_output
+      ERROR_VARIABLE config_output
+      RESULT_VARIABLE return_value
+      OUTPUT_STRIP_TRAILING_WHITESPACE
+      )
+    if(return_value AND NOT HDF5_FIND_QUIETLY)
+      message(STATUS
+        "Unable to determine HDF5 ${language} version_var from HDF5 wrapper.")
+    endif()
+    string(REGEX MATCH "HDF5 Version: ([a-zA-Z0-9\\.\\-]*)" version "${config_output}")
+    if(version)
+      string(REPLACE "HDF5 Version: " "" version "${version}")
+      string(REPLACE "-patch" "." version "${version}")
+    endif()
+    if(config_output MATCHES "Parallel HDF5: yes")
+      set(is_parallel TRUE)
+    endif()
+  endif()
+  foreach(var output return_value version is_parallel)
+    set(${${var}_var} ${${var}} PARENT_SCOPE)
+  endforeach()
+endfunction()
+
+# Parse a compile line for definitions, includes, library paths, and libraries.
+function(_HDF5_parse_compile_line compile_line_var include_paths definitions
+    library_paths libraries libraries_hl)
+
+  separate_arguments(_compile_args NATIVE_COMMAND "${${compile_line_var}}")
+
+  foreach(_arg IN LISTS _compile_args)
+    if("${_arg}" MATCHES "^-I(.*)$")
+      # include directory
+      list(APPEND include_paths "${CMAKE_MATCH_1}")
+    elseif("${_arg}" MATCHES "^-D(.*)$")
+      # compile definition
+      list(APPEND definitions "-D${CMAKE_MATCH_1}")
+    elseif("${_arg}" MATCHES "^-L(.*)$")
+      # library search path
+      list(APPEND library_paths "${CMAKE_MATCH_1}")
+    elseif("${_arg}" MATCHES "^-l(hdf5.*hl.*)$")
+      # library name (hl)
+      list(APPEND libraries_hl "${CMAKE_MATCH_1}")
+    elseif("${_arg}" MATCHES "^-l(.*)$")
+      # library name
+      list(APPEND libraries "${CMAKE_MATCH_1}")
+    elseif("${_arg}" MATCHES "^(.:)?[/\\].*\\.(a|so|dylib|sl|lib)$")
+      # library file
+      if(NOT EXISTS "${_arg}")
+        continue()
+      endif()
+      get_filename_component(_lpath "${_arg}" DIRECTORY)
+      get_filename_component(_lname "${_arg}" NAME_WE)
+      string(REGEX REPLACE "^lib" "" _lname "${_lname}")
+      list(APPEND library_paths "${_lpath}")
+      if(_lname MATCHES "hdf5.*hl")
+        list(APPEND libraries_hl "${_lname}")
+      else()
+        list(APPEND libraries "${_lname}")
+      endif()
+    endif()
+  endforeach()
+  foreach(var include_paths definitions library_paths libraries libraries_hl)
+    set(${${var}_var} ${${var}} PARENT_SCOPE)
+  endforeach()
+endfunction()
+
+# Select a preferred imported configuration from a target
+function(_HDF5_select_imported_config target imported_conf)
+    # We will first assign the value to a local variable _imported_conf, then assign
+    # it to the function argument at the end.
+    get_target_property(_imported_conf ${target} MAP_IMPORTED_CONFIG_${CMAKE_BUILD_TYPE})
+    if (NOT _imported_conf)
+        # Get available imported configurations by examining target properties
+        get_target_property(_imported_conf ${target} IMPORTED_CONFIGURATIONS)
+        if(HDF5_FIND_DEBUG)
+            message(STATUS "Found imported configurations: ${_imported_conf}")
+        endif()
+        # Find the imported configuration that we prefer.
+        # We do this by making list of configurations in order of preference,
+        # starting with ${CMAKE_BUILD_TYPE} and ending with the first imported_conf
+        set(_preferred_confs ${CMAKE_BUILD_TYPE})
+        list(GET _imported_conf 0 _fallback_conf)
+        list(APPEND _preferred_confs RELWITHDEBINFO RELEASE DEBUG ${_fallback_conf})
+        if(HDF5_FIND_DEBUG)
+            message(STATUS "Start search through imported configurations in the following order: ${_preferred_confs}")
+        endif()
+        # Now find the first of these that is present in imported_conf
+        cmake_policy(PUSH)
+        cmake_policy(SET CMP0057 NEW) # support IN_LISTS
+        foreach (_conf IN LISTS _preferred_confs)
+            if (${_conf} IN_LIST _imported_conf)
+               set(_imported_conf ${_conf})
+               break()
+            endif()
+        endforeach()
+        cmake_policy(POP)
+    endif()
+    if(HDF5_FIND_DEBUG)
+        message(STATUS "Selected imported configuration: ${_imported_conf}")
+    endif()
+    # assign value to function argument
+    set(${imported_conf} ${_imported_conf} PARENT_SCOPE)
+endfunction()
+
+
+if(NOT HDF5_ROOT)
+    set(HDF5_ROOT $ENV{HDF5_ROOT})
+endif()
+if(HDF5_ROOT)
+    set(_HDF5_SEARCH_OPTS NO_DEFAULT_PATH)
+else()
+    set(_HDF5_SEARCH_OPTS)
+endif()
+
+# Try to find HDF5 using an installed hdf5-config.cmake
+if(NOT HDF5_FOUND AND NOT HDF5_NO_FIND_PACKAGE_CONFIG_FILE)
+    find_package(HDF5 QUIET NO_MODULE
+      HINTS ${HDF5_ROOT}
+      ${_HDF5_SEARCH_OPTS}
+      )
+    if( HDF5_FOUND)
+        if(HDF5_FIND_DEBUG)
+            message(STATUS "Found HDF5 at ${HDF5_DIR} via NO_MODULE. Now trying to extract locations etc.")
+        endif()
+        set(HDF5_IS_PARALLEL ${HDF5_ENABLE_PARALLEL})
+        set(HDF5_INCLUDE_DIRS ${HDF5_INCLUDE_DIR})
+        set(HDF5_LIBRARIES)
+        if (NOT TARGET hdf5 AND NOT TARGET hdf5-static AND NOT TARGET hdf5-shared)
+            # Some HDF5 versions (e.g. 1.8.18) used hdf5::hdf5 etc
+            set(_target_prefix "hdf5::")
+        endif()
+        set(HDF5_C_TARGET ${_target_prefix}hdf5)
+        set(HDF5_C_HL_TARGET ${_target_prefix}hdf5_hl)
+        set(HDF5_CXX_TARGET ${_target_prefix}hdf5_cpp)
+        set(HDF5_CXX_HL_TARGET ${_target_prefix}hdf5_hl_cpp)
+        set(HDF5_Fortran_TARGET ${_target_prefix}hdf5_fortran)
+        set(HDF5_Fortran_HL_TARGET ${_target_prefix}hdf5_hl_fortran)
+        set(HDF5_DEFINITIONS "")
+        if(HDF5_USE_STATIC_LIBRARIES)
+            set(_suffix "-static")
+        else()
+            set(_suffix "-shared")
+        endif()
+        foreach(_lang ${HDF5_LANGUAGE_BINDINGS})
+
+            #Older versions of hdf5 don't have a static/shared suffix so
+            #if we detect that occurrence clear the suffix
+            if(_suffix AND NOT TARGET ${HDF5_${_lang}_TARGET}${_suffix})
+              if(NOT TARGET ${HDF5_${_lang}_TARGET})
+                #can't find this component with or without the suffix
+                #so bail out, and let the following locate HDF5
+                set(HDF5_FOUND FALSE)
+                break()
+              endif()
+              set(_suffix "")
+            endif()
+
+            if(HDF5_FIND_DEBUG)
+                message(STATUS "Trying to get properties of target ${HDF5_${_lang}_TARGET}${_suffix}")
+            endif()
+            # Find library for this target. Complicated as on Windows with a DLL, we need to search for the import-lib.
+            _HDF5_select_imported_config(${HDF5_${_lang}_TARGET}${_suffix} _hdf5_imported_conf)
+            get_target_property(_hdf5_lang_location ${HDF5_${_lang}_TARGET}${_suffix} IMPORTED_IMPLIB_${_hdf5_imported_conf} )
+            if (NOT _hdf5_lang_location)
+                # no import lib, just try LOCATION
+                get_target_property(_hdf5_lang_location ${HDF5_${_lang}_TARGET}${_suffix} LOCATION_${_hdf5_imported_conf})
+                if (NOT _hdf5_lang_location)
+                    get_target_property(_hdf5_lang_location ${HDF5_${_lang}_TARGET}${_suffix} LOCATION)
+                endif()
+            endif()
+            if( _hdf5_lang_location )
+                set(HDF5_${_lang}_LIBRARY ${_hdf5_lang_location})
+                list(APPEND HDF5_LIBRARIES ${HDF5_${_lang}_TARGET}${_suffix})
+                set(HDF5_${_lang}_LIBRARIES ${HDF5_${_lang}_TARGET}${_suffix})
+                set(HDF5_${_lang}_FOUND TRUE)
+            endif()
+            if(HDF5_FIND_HL)
+                get_target_property(_hdf5_lang_hl_location ${HDF5_${_lang}_HL_TARGET}${_suffix} IMPORTED_IMPLIB_${_hdf5_imported_conf} )
+                if (NOT _hdf5_lang_hl_location)
+                    get_target_property(_hdf5_lang_hl_location ${HDF5_${_lang}_HL_TARGET}${_suffix} LOCATION_${_hdf5_imported_conf})
+                    if (NOT _hdf5_hl_lang_location)
+                        get_target_property(_hdf5_hl_lang_location ${HDF5_${_lang}_HL_TARGET}${_suffix} LOCATION)
+                    endif()
+                endif()
+                if( _hdf5_lang_hl_location )
+                    set(HDF5_${_lang}_HL_LIBRARY ${_hdf5_lang_hl_location})
+                    list(APPEND HDF5_HL_LIBRARIES ${HDF5_${_lang}_HL_TARGET}${_suffix})
+                    set(HDF5_${_lang}_HL_LIBRARIES ${HDF5_${_lang}_HL_TARGET}${_suffix})
+                    set(HDF5_HL_FOUND TRUE)
+                endif()
+                unset(_hdf5_lang_hl_location)
+            endif()
+            unset(_hdf5_imported_conf)
+            unset(_hdf5_lang_location)
+        endforeach()
+    endif()
+endif()
+
+if(NOT HDF5_FOUND)
+  set(_HDF5_NEED_TO_SEARCH FALSE)
+  set(HDF5_COMPILER_NO_INTERROGATE TRUE)
+  # Only search for languages we've enabled
+  foreach(_lang IN LISTS HDF5_LANGUAGE_BINDINGS)
+    set(HDF5_${_lang}_LIBRARIES)
+    set(HDF5_${_lang}_HL_LIBRARIES)
+
+    # First check to see if our regular compiler is one of wrappers
+    if(_lang STREQUAL "C")
+      _HDF5_test_regular_compiler_C(
+        HDF5_${_lang}_COMPILER_NO_INTERROGATE
+        HDF5_${_lang}_VERSION
+        HDF5_${_lang}_IS_PARALLEL)
+    elseif(_lang STREQUAL "CXX")
+      _HDF5_test_regular_compiler_CXX(
+        HDF5_${_lang}_COMPILER_NO_INTERROGATE
+        HDF5_${_lang}_VERSION
+        HDF5_${_lang}_IS_PARALLEL)
+    elseif(_lang STREQUAL "Fortran")
+      _HDF5_test_regular_compiler_Fortran(
+        HDF5_${_lang}_COMPILER_NO_INTERROGATE
+        HDF5_${_lang}_IS_PARALLEL)
+    else()
+      continue()
+    endif()
+    if(HDF5_${_lang}_COMPILER_NO_INTERROGATE)
+      if(HDF5_FIND_DEBUG)
+        message(STATUS "HDF5: Using hdf5 compiler wrapper for all ${_lang} compiling")
+      endif()
+      set(HDF5_${_lang}_FOUND TRUE)
+      set(HDF5_${_lang}_COMPILER_EXECUTABLE_NO_INTERROGATE
+          "${CMAKE_${_lang}_COMPILER}"
+          CACHE FILEPATH "HDF5 ${_lang} compiler wrapper")
+      set(HDF5_${_lang}_DEFINITIONS)
+      set(HDF5_${_lang}_INCLUDE_DIRS)
+      set(HDF5_${_lang}_LIBRARIES)
+      set(HDF5_${_lang}_HL_LIBRARIES)
+
+      mark_as_advanced(HDF5_${_lang}_COMPILER_EXECUTABLE_NO_INTERROGATE)
+
+      set(HDF5_${_lang}_FOUND TRUE)
+      set(HDF5_HL_FOUND TRUE)
+    else()
+      set(HDF5_COMPILER_NO_INTERROGATE FALSE)
+      # If this language isn't using the wrapper, then try to seed the
+      # search options with the wrapper
+      find_program(HDF5_${_lang}_COMPILER_EXECUTABLE
+        NAMES ${HDF5_${_lang}_COMPILER_NAMES} NAMES_PER_DIR
+        HINTS ${HDF5_ROOT}
+        PATH_SUFFIXES bin Bin
+        DOC "HDF5 ${_lang} Wrapper compiler.  Used only to detect HDF5 compile flags."
+        ${_HDF5_SEARCH_OPTS}
+      )
+      mark_as_advanced( HDF5_${_lang}_COMPILER_EXECUTABLE )
+      unset(HDF5_${_lang}_COMPILER_NAMES)
+
+      if(HDF5_${_lang}_COMPILER_EXECUTABLE)
+        _HDF5_invoke_compiler(${_lang} HDF5_${_lang}_COMPILE_LINE
+          HDF5_${_lang}_RETURN_VALUE HDF5_${_lang}_VERSION HDF5_${_lang}_IS_PARALLEL)
+        if(HDF5_${_lang}_RETURN_VALUE EQUAL 0)
+          if(HDF5_FIND_DEBUG)
+            message(STATUS "HDF5: Using hdf5 compiler wrapper to determine ${_lang} configuration")
+          endif()
+          _HDF5_parse_compile_line( HDF5_${_lang}_COMPILE_LINE
+            HDF5_${_lang}_INCLUDE_DIRS
+            HDF5_${_lang}_DEFINITIONS
+            HDF5_${_lang}_LIBRARY_DIRS
+            HDF5_${_lang}_LIBRARY_NAMES
+            HDF5_${_lang}_HL_LIBRARY_NAMES
+          )
+          set(HDF5_${_lang}_LIBRARIES)
+
+          foreach(_lib IN LISTS HDF5_${_lang}_LIBRARY_NAMES)
+            set(_HDF5_SEARCH_NAMES_LOCAL)
+            if("x${_lib}" MATCHES "hdf5")
+              # hdf5 library
+              set(_HDF5_SEARCH_OPTS_LOCAL ${_HDF5_SEARCH_OPTS})
+              if(HDF5_USE_STATIC_LIBRARIES)
+                if(WIN32)
+                  set(_HDF5_SEARCH_NAMES_LOCAL lib${_lib})
+                else()
+                  set(_HDF5_SEARCH_NAMES_LOCAL lib${_lib}.a)
+                endif()
+              endif()
+            else()
+              # external library
+              set(_HDF5_SEARCH_OPTS_LOCAL)
+            endif()
+            find_library(HDF5_${_lang}_LIBRARY_${_lib}
+              NAMES ${_HDF5_SEARCH_NAMES_LOCAL} ${_lib} NAMES_PER_DIR
+              HINTS ${HDF5_${_lang}_LIBRARY_DIRS}
+                    ${HDF5_ROOT}
+              ${_HDF5_SEARCH_OPTS_LOCAL}
+              )
+            unset(_HDF5_SEARCH_OPTS_LOCAL)
+            unset(_HDF5_SEARCH_NAMES_LOCAL)
+            if(HDF5_${_lang}_LIBRARY_${_lib})
+              list(APPEND HDF5_${_lang}_LIBRARIES ${HDF5_${_lang}_LIBRARY_${_lib}})
+            else()
+              list(APPEND HDF5_${_lang}_LIBRARIES ${_lib})
+            endif()
+          endforeach()
+          if(HDF5_FIND_HL)
+            set(HDF5_${_lang}_HL_LIBRARIES)
+            foreach(_lib IN LISTS HDF5_${_lang}_HL_LIBRARY_NAMES)
+              set(_HDF5_SEARCH_NAMES_LOCAL)
+              if("x${_lib}" MATCHES "hdf5")
+                # hdf5 library
+                set(_HDF5_SEARCH_OPTS_LOCAL ${_HDF5_SEARCH_OPTS})
+                if(HDF5_USE_STATIC_LIBRARIES)
+                  if(WIN32)
+                    set(_HDF5_SEARCH_NAMES_LOCAL lib${_lib})
+                  else()
+                    set(_HDF5_SEARCH_NAMES_LOCAL lib${_lib}.a)
+                  endif()
+                endif()
+              else()
+                # external library
+                set(_HDF5_SEARCH_OPTS_LOCAL)
+              endif()
+              find_library(HDF5_${_lang}_LIBRARY_${_lib}
+                NAMES ${_HDF5_SEARCH_NAMES_LOCAL} ${_lib} NAMES_PER_DIR
+                HINTS ${HDF5_${_lang}_LIBRARY_DIRS}
+                      ${HDF5_ROOT}
+                ${_HDF5_SEARCH_OPTS_LOCAL}
+                )
+              unset(_HDF5_SEARCH_OPTS_LOCAL)
+              unset(_HDF5_SEARCH_NAMES_LOCAL)
+              if(HDF5_${_lang}_LIBRARY_${_lib})
+                list(APPEND HDF5_${_lang}_HL_LIBRARIES ${HDF5_${_lang}_LIBRARY_${_lib}})
+              else()
+                list(APPEND HDF5_${_lang}_HL_LIBRARIES ${_lib})
+              endif()
+            endforeach()
+            set(HDF5_HL_FOUND TRUE)
+          endif()
+
+          set(HDF5_${_lang}_FOUND TRUE)
+          list(REMOVE_DUPLICATES HDF5_${_lang}_DEFINITIONS)
+          list(REMOVE_DUPLICATES HDF5_${_lang}_INCLUDE_DIRS)
+        else()
+          set(_HDF5_NEED_TO_SEARCH TRUE)
+        endif()
+      else()
+        set(_HDF5_NEED_TO_SEARCH TRUE)
+      endif()
+    endif()
+    if(HDF5_${_lang}_VERSION)
+      if(NOT HDF5_VERSION)
+        set(HDF5_VERSION ${HDF5_${_lang}_VERSION})
+      elseif(NOT HDF5_VERSION VERSION_EQUAL HDF5_${_lang}_VERSION)
+        message(WARNING "HDF5 Version found for language ${_lang}, ${HDF5_${_lang}_VERSION} is different than previously found version ${HDF5_VERSION}")
+      endif()
+    endif()
+    if(DEFINED HDF5_${_lang}_IS_PARALLEL)
+      if(NOT DEFINED HDF5_IS_PARALLEL)
+        set(HDF5_IS_PARALLEL ${HDF5_${_lang}_IS_PARALLEL})
+      elseif(NOT HDF5_IS_PARALLEL AND HDF5_${_lang}_IS_PARALLEL)
+        message(WARNING "HDF5 found for language ${_lang} is parallel but previously found language is not parallel.")
+      elseif(HDF5_IS_PARALLEL AND NOT HDF5_${_lang}_IS_PARALLEL)
+        message(WARNING "HDF5 found for language ${_lang} is not parallel but previously found language is parallel.")
+      endif()
+    endif()
+  endforeach()
+  unset(_lib)
+else()
+  set(_HDF5_NEED_TO_SEARCH TRUE)
+endif()
+
+if(NOT HDF5_FOUND AND HDF5_COMPILER_NO_INTERROGATE)
+  # No arguments necessary, all languages can use the compiler wrappers
+  set(HDF5_FOUND TRUE)
+  set(HDF5_METHOD "Included by compiler wrappers")
+  set(HDF5_REQUIRED_VARS HDF5_METHOD)
+elseif(NOT HDF5_FOUND AND NOT _HDF5_NEED_TO_SEARCH)
+  # Compiler wrappers aren't being used by the build but were found and used
+  # to determine necessary include and library flags
+  set(HDF5_INCLUDE_DIRS)
+  set(HDF5_LIBRARIES)
+  set(HDF5_HL_LIBRARIES)
+  foreach(_lang IN LISTS HDF5_LANGUAGE_BINDINGS)
+    if(HDF5_${_lang}_FOUND)
+      if(NOT HDF5_${_lang}_COMPILER_NO_INTERROGATE)
+        list(APPEND HDF5_DEFINITIONS ${HDF5_${_lang}_DEFINITIONS})
+        list(APPEND HDF5_INCLUDE_DIRS ${HDF5_${_lang}_INCLUDE_DIRS})
+        list(APPEND HDF5_LIBRARIES ${HDF5_${_lang}_LIBRARIES})
+        if(HDF5_FIND_HL)
+          list(APPEND HDF5_HL_LIBRARIES ${HDF5_${_lang}_HL_LIBRARIES})
+        endif()
+      endif()
+    endif()
+  endforeach()
+  list(REMOVE_DUPLICATES HDF5_DEFINITIONS)
+  list(REMOVE_DUPLICATES HDF5_INCLUDE_DIRS)
+  set(HDF5_FOUND TRUE)
+  set(HDF5_REQUIRED_VARS HDF5_LIBRARIES)
+  if(HDF5_FIND_HL)
+    list(APPEND HDF5_REQUIRED_VARS HDF5_HL_LIBRARIES)
+  endif()
+endif()
+
+find_program( HDF5_DIFF_EXECUTABLE
+    NAMES h5diff
+    HINTS ${HDF5_ROOT}
+    PATH_SUFFIXES bin Bin
+    ${_HDF5_SEARCH_OPTS}
+    DOC "HDF5 file differencing tool." )
+mark_as_advanced( HDF5_DIFF_EXECUTABLE )
+
+if( NOT HDF5_FOUND )
+    # seed the initial lists of libraries to find with items we know we need
+    set(HDF5_C_LIBRARY_NAMES          hdf5)
+    set(HDF5_C_HL_LIBRARY_NAMES       hdf5_hl ${HDF5_C_LIBRARY_NAMES} )
+
+    set(HDF5_CXX_LIBRARY_NAMES        hdf5_cpp    ${HDF5_C_LIBRARY_NAMES})
+    set(HDF5_CXX_HL_LIBRARY_NAMES     hdf5_hl_cpp ${HDF5_C_HL_LIBRARY_NAMES} ${HDF5_CXX_LIBRARY_NAMES})
+
+    set(HDF5_Fortran_LIBRARY_NAMES    hdf5_fortran   ${HDF5_C_LIBRARY_NAMES})
+    set(HDF5_Fortran_HL_LIBRARY_NAMES hdf5_hl_fortran hdf5hl_fortran ${HDF5_C_HL_LIBRARY_NAMES} ${HDF5_Fortran_LIBRARY_NAMES})
+
+    # suffixes as seen on Linux, MSYS2, ...
+    set(_lib_suffixes hdf5)
+    if(NOT HDF5_PREFER_PARALLEL)
+      list(APPEND _lib_suffixes hdf5/serial)
+    endif()
+    if(HDF5_USE_STATIC_LIBRARIES)
+      set(_inc_suffixes include/static)
+    else()
+      set(_inc_suffixes include/shared)
+    endif()
+
+    foreach(_lang IN LISTS HDF5_LANGUAGE_BINDINGS)
+        set(HDF5_${_lang}_LIBRARIES)
+        set(HDF5_${_lang}_HL_LIBRARIES)
+
+        # The "main" library.
+        set(_hdf5_main_library "")
+
+        # find the HDF5 libraries
+        foreach(LIB IN LISTS HDF5_${_lang}_LIBRARY_NAMES)
+            if(HDF5_USE_STATIC_LIBRARIES)
+                # According to bug 1643 on the CMake bug tracker, this is the
+                # preferred method for searching for a static library.
+                # See https://gitlab.kitware.com/cmake/cmake/-/issues/1643.  We search
+                # first for the full static library name, but fall back to a
+                # generic search on the name if the static search fails.
+                set( THIS_LIBRARY_SEARCH_DEBUG
+                    lib${LIB}d.a lib${LIB}_debug.a lib${LIB}d lib${LIB}_D lib${LIB}_debug
+                    lib${LIB}d-static.a lib${LIB}_debug-static.a ${LIB}d-static ${LIB}_D-static ${LIB}_debug-static )
+                set( THIS_LIBRARY_SEARCH_RELEASE lib${LIB}.a lib${LIB} lib${LIB}-static.a ${LIB}-static)
+            else()
+                set( THIS_LIBRARY_SEARCH_DEBUG ${LIB}d ${LIB}_D ${LIB}_debug ${LIB}d-shared ${LIB}_D-shared ${LIB}_debug-shared)
+                set( THIS_LIBRARY_SEARCH_RELEASE ${LIB} ${LIB}-shared)
+                if(WIN32)
+                  list(APPEND HDF5_DEFINITIONS "-DH5_BUILT_AS_DYNAMIC_LIB")
+                endif()
+            endif()
+            find_library(HDF5_${LIB}_LIBRARY_DEBUG
+                NAMES ${THIS_LIBRARY_SEARCH_DEBUG}
+                HINTS ${HDF5_ROOT} PATH_SUFFIXES lib Lib ${_lib_suffixes}
+                ${_HDF5_SEARCH_OPTS}
+            )
+            find_library(HDF5_${LIB}_LIBRARY_RELEASE
+                NAMES ${THIS_LIBRARY_SEARCH_RELEASE}
+                HINTS ${HDF5_ROOT} PATH_SUFFIXES lib Lib ${_lib_suffixes}
+                ${_HDF5_SEARCH_OPTS}
+            )
+
+            # Set the "main" library if not already set.
+            if (NOT _hdf5_main_library)
+              if (HDF5_${LIB}_LIBRARY_RELEASE)
+                set(_hdf5_main_library "${HDF5_${LIB}_LIBRARY_RELEASE}")
+              elseif (HDF5_${LIB}_LIBRARY_DEBUG)
+                set(_hdf5_main_library "${HDF5_${LIB}_LIBRARY_DEBUG}")
+              endif ()
+            endif ()
+
+            select_library_configurations( HDF5_${LIB} )
+            list(APPEND HDF5_${_lang}_LIBRARIES ${HDF5_${LIB}_LIBRARY})
+        endforeach()
+        if(HDF5_${_lang}_LIBRARIES)
+            set(HDF5_${_lang}_FOUND TRUE)
+        endif()
+
+        # Append the libraries for this language binding to the list of all
+        # required libraries.
+        list(APPEND HDF5_LIBRARIES ${HDF5_${_lang}_LIBRARIES})
+
+        # find the HDF5 include directories
+        set(_hdf5_inc_extra_paths)
+        set(_hdf5_inc_extra_suffixes)
+        if("${_lang}" STREQUAL "Fortran")
+            set(HDF5_INCLUDE_FILENAME hdf5.mod HDF5.mod)
+
+            # Add library-based search paths for Fortran modules.
+            if (NOT _hdf5_main_library STREQUAL "")
+              # gfortran module directory
+              if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU")
+                get_filename_component(_hdf5_library_dir "${_hdf5_main_library}" DIRECTORY)
+                list(APPEND _hdf5_inc_extra_paths "${_hdf5_library_dir}")
+                unset(_hdf5_library_dir)
+                list(APPEND _hdf5_inc_extra_suffixes gfortran/modules)
+              endif ()
+            endif ()
+        elseif("${_lang}" STREQUAL "CXX")
+            set(HDF5_INCLUDE_FILENAME H5Cpp.h)
+        else()
+            set(HDF5_INCLUDE_FILENAME hdf5.h)
+        endif()
+
+        unset(_hdf5_main_library)
+
+        find_path(HDF5_${_lang}_INCLUDE_DIR ${HDF5_INCLUDE_FILENAME}
+            HINTS ${HDF5_ROOT}
+            PATHS $ENV{HOME}/.local/include ${_hdf5_inc_extra_paths}
+            PATH_SUFFIXES include Include ${_inc_suffixes} ${_lib_suffixes} ${_hdf5_inc_extra_suffixes}
+            ${_HDF5_SEARCH_OPTS}
+        )
+        mark_as_advanced(HDF5_${_lang}_INCLUDE_DIR)
+        unset(_hdf5_inc_extra_paths)
+        unset(_hdf5_inc_extra_suffixes)
+        # set the _DIRS variable as this is what the user will normally use
+        set(HDF5_${_lang}_INCLUDE_DIRS ${HDF5_${_lang}_INCLUDE_DIR})
+        list(APPEND HDF5_INCLUDE_DIRS ${HDF5_${_lang}_INCLUDE_DIR})
+
+        if(HDF5_FIND_HL)
+            foreach(LIB IN LISTS HDF5_${_lang}_HL_LIBRARY_NAMES)
+                if(HDF5_USE_STATIC_LIBRARIES)
+                    # According to bug 1643 on the CMake bug tracker, this is the
+                    # preferred method for searching for a static library.
+                    # See https://gitlab.kitware.com/cmake/cmake/-/issues/1643.  We search
+                    # first for the full static library name, but fall back to a
+                    # generic search on the name if the static search fails.
+                    set( THIS_LIBRARY_SEARCH_DEBUG
+                        lib${LIB}d.a lib${LIB}_debug.a lib${LIB}d lib${LIB}_D lib${LIB}_debug
+                        lib${LIB}d-static.a lib${LIB}_debug-static.a lib${LIB}d-static lib${LIB}_D-static lib${LIB}_debug-static )
+                    set( THIS_LIBRARY_SEARCH_RELEASE lib${LIB}.a lib${LIB} lib${LIB}-static.a lib${LIB}-static)
+                else()
+                    set( THIS_LIBRARY_SEARCH_DEBUG ${LIB}d ${LIB}_D ${LIB}_debug ${LIB}d-shared ${LIB}_D-shared ${LIB}_debug-shared)
+                    set( THIS_LIBRARY_SEARCH_RELEASE ${LIB} ${LIB}-shared)
+                endif()
+                find_library(HDF5_${LIB}_LIBRARY_DEBUG
+                    NAMES ${THIS_LIBRARY_SEARCH_DEBUG}
+                    HINTS ${HDF5_ROOT} PATH_SUFFIXES lib Lib ${_lib_suffixes}
+                    ${_HDF5_SEARCH_OPTS}
+                )
+                find_library(HDF5_${LIB}_LIBRARY_RELEASE
+                    NAMES ${THIS_LIBRARY_SEARCH_RELEASE}
+                    HINTS ${HDF5_ROOT} PATH_SUFFIXES lib Lib ${_lib_suffixes}
+                    ${_HDF5_SEARCH_OPTS}
+                )
+
+                select_library_configurations( HDF5_${LIB} )
+                list(APPEND HDF5_${_lang}_HL_LIBRARIES ${HDF5_${LIB}_LIBRARY})
+            endforeach()
+
+            # Append the libraries for this language binding to the list of all
+            # required libraries.
+            list(APPEND HDF5_HL_LIBRARIES ${HDF5_${_lang}_HL_LIBRARIES})
+        endif()
+    endforeach()
+    if(HDF5_FIND_HL AND HDF5_HL_LIBRARIES)
+        set(HDF5_HL_FOUND TRUE)
+    endif()
+
+    list(REMOVE_DUPLICATES HDF5_DEFINITIONS)
+    list(REMOVE_DUPLICATES HDF5_INCLUDE_DIRS)
+
+    # If the HDF5 include directory was found, open H5pubconf.h to determine if
+    # HDF5 was compiled with parallel IO support
+    set( HDF5_IS_PARALLEL FALSE )
+    set( HDF5_VERSION "" )
+    foreach( _dir IN LISTS HDF5_INCLUDE_DIRS )
+      foreach(_hdr "${_dir}/H5pubconf.h" "${_dir}/H5pubconf-64.h" "${_dir}/H5pubconf-32.h")
+        if( EXISTS "${_hdr}" )
+            file( STRINGS "${_hdr}"
+                HDF5_HAVE_PARALLEL_DEFINE
+                REGEX "HAVE_PARALLEL 1" )
+            if( HDF5_HAVE_PARALLEL_DEFINE )
+                set( HDF5_IS_PARALLEL TRUE )
+            endif()
+            unset(HDF5_HAVE_PARALLEL_DEFINE)
+
+            file( STRINGS "${_hdr}"
+                HDF5_VERSION_DEFINE
+                REGEX "^[ \t]*#[ \t]*define[ \t]+H5_VERSION[ \t]+" )
+            if( "${HDF5_VERSION_DEFINE}" MATCHES
+                "H5_VERSION[ \t]+\"([0-9]+\\.[0-9]+\\.[0-9]+)(-patch([0-9]+))?\"" )
+                set( HDF5_VERSION "${CMAKE_MATCH_1}" )
+                if( CMAKE_MATCH_3 )
+                  set( HDF5_VERSION ${HDF5_VERSION}.${CMAKE_MATCH_3})
+                endif()
+            endif()
+            unset(HDF5_VERSION_DEFINE)
+        endif()
+      endforeach()
+    endforeach()
+    unset(_hdr)
+    unset(_dir)
+    set( HDF5_IS_PARALLEL ${HDF5_IS_PARALLEL} CACHE BOOL
+        "HDF5 library compiled with parallel IO support" )
+    mark_as_advanced( HDF5_IS_PARALLEL )
+
+    set(HDF5_REQUIRED_VARS HDF5_LIBRARIES HDF5_INCLUDE_DIRS)
+    if(HDF5_FIND_HL)
+        list(APPEND HDF5_REQUIRED_VARS HDF5_HL_LIBRARIES)
+    endif()
+endif()
+
+# For backwards compatibility we set HDF5_INCLUDE_DIR to the value of
+# HDF5_INCLUDE_DIRS
+if( HDF5_INCLUDE_DIRS )
+  set( HDF5_INCLUDE_DIR "${HDF5_INCLUDE_DIRS}" )
+endif()
+
+# If HDF5_REQUIRED_VARS is empty at this point, then it's likely that
+# something external is trying to explicitly pass already found
+# locations
+if(NOT HDF5_REQUIRED_VARS)
+    set(HDF5_REQUIRED_VARS HDF5_LIBRARIES HDF5_INCLUDE_DIRS)
+endif()
+
+find_package_handle_standard_args(HDF5
+    REQUIRED_VARS ${HDF5_REQUIRED_VARS}
+    VERSION_VAR   HDF5_VERSION
+    HANDLE_COMPONENTS
+)
+
+unset(_HDF5_SEARCH_OPTS)
+
+if( HDF5_FOUND AND NOT HDF5_DIR)
+  # hide HDF5_DIR for the non-advanced user to avoid confusion with
+  # HDF5_DIR-NOT_FOUND while HDF5 was found.
+  mark_as_advanced(HDF5_DIR)
+endif()
+
+if (HDF5_FOUND)
+  if (NOT TARGET HDF5::HDF5)
+    add_library(HDF5::HDF5 INTERFACE IMPORTED)
+    string(REPLACE "-D" "" _hdf5_definitions "${HDF5_DEFINITIONS}")
+    set_target_properties(HDF5::HDF5 PROPERTIES
+      INTERFACE_INCLUDE_DIRECTORIES "${HDF5_INCLUDE_DIRS}"
+      INTERFACE_COMPILE_DEFINITIONS "${_hdf5_definitions}")
+    unset(_hdf5_definitions)
+    target_link_libraries(HDF5::HDF5 INTERFACE ${HDF5_LIBRARIES})
+  endif ()
+
+  foreach (hdf5_lang IN LISTS HDF5_LANGUAGE_BINDINGS)
+    if (hdf5_lang STREQUAL "C")
+      set(hdf5_target_name "hdf5")
+    elseif (hdf5_lang STREQUAL "CXX")
+      set(hdf5_target_name "hdf5_cpp")
+    elseif (hdf5_lang STREQUAL "Fortran")
+      set(hdf5_target_name "hdf5_fortran")
+    else ()
+      continue ()
+    endif ()
+
+    if (NOT TARGET "hdf5::${hdf5_target_name}")
+      if (HDF5_COMPILER_NO_INTERROGATE)
+        add_library("hdf5::${hdf5_target_name}" INTERFACE IMPORTED)
+        string(REPLACE "-D" "" _hdf5_definitions "${HDF5_${hdf5_lang}_DEFINITIONS}")
+        set_target_properties("hdf5::${hdf5_target_name}" PROPERTIES
+          INTERFACE_INCLUDE_DIRECTORIES "${HDF5_${hdf5_lang}_INCLUDE_DIRS}"
+          INTERFACE_COMPILE_DEFINITIONS "${_hdf5_definitions}")
+      else()
+        if (DEFINED "HDF5_${hdf5_target_name}_LIBRARY")
+          set(_hdf5_location "${HDF5_${hdf5_target_name}_LIBRARY}")
+        elseif (DEFINED "HDF5_${hdf5_lang}_LIBRARY")
+          set(_hdf5_location "${HDF5_${hdf5_lang}_LIBRARY}")
+        elseif (DEFINED "HDF5_${hdf5_lang}_LIBRARY_${hdf5_target_name}")
+          set(_hdf5_location "${HDF5_${hdf5_lang}_LIBRARY_${hdf5_target_name}}")
+        else ()
+          # Error if we still don't have the location.
+          message(SEND_ERROR
+            "HDF5 was found, but a different variable was set which contains "
+            "the location of the `hdf5::${hdf5_target_name}` library.")
+        endif ()
+        add_library("hdf5::${hdf5_target_name}" UNKNOWN IMPORTED)
+        string(REPLACE "-D" "" _hdf5_definitions "${HDF5_${hdf5_lang}_DEFINITIONS}")
+        if (NOT HDF5_${hdf5_lang}_INCLUDE_DIRS)
+         set(HDF5_${hdf5_lang}_INCLUDE_DIRS ${HDF5_INCLUDE_DIRS})
+        endif ()
+        set_target_properties("hdf5::${hdf5_target_name}" PROPERTIES
+          IMPORTED_LOCATION "${_hdf5_location}"
+          IMPORTED_IMPLIB "${_hdf5_location}"
+          INTERFACE_INCLUDE_DIRECTORIES "${HDF5_${hdf5_lang}_INCLUDE_DIRS}"
+          INTERFACE_COMPILE_DEFINITIONS "${_hdf5_definitions}")
+        if (_hdf5_libtype STREQUAL "SHARED")
+          set_property(TARGET "hdf5::${hdf5_target_name}" APPEND
+            PROPERTY
+              INTERFACE_COMPILE_DEFINITIONS H5_BUILT_AS_DYNAMIC_LIB)
+        elseif (_hdf5_libtype STREQUAL "STATIC")
+          set_property(TARGET "hdf5::${hdf5_target_name}" APPEND
+            PROPERTY
+              INTERFACE_COMPILE_DEFINITIONS H5_BUILT_AS_STATIC_LIB)
+        endif ()
+        unset(_hdf5_definitions)
+        unset(_hdf5_libtype)
+        unset(_hdf5_location)
+      endif ()
+    endif ()
+
+    if (NOT HDF5_FIND_HL)
+      continue ()
+    endif ()
+
+    set(hdf5_alt_target_name "")
+    if (hdf5_lang STREQUAL "C")
+      set(hdf5_target_name "hdf5_hl")
+    elseif (hdf5_lang STREQUAL "CXX")
+      set(hdf5_target_name "hdf5_hl_cpp")
+    elseif (hdf5_lang STREQUAL "Fortran")
+      set(hdf5_target_name "hdf5_hl_fortran")
+      set(hdf5_alt_target_name "hdf5hl_fortran")
+    else ()
+      continue ()
+    endif ()
+
+    if (NOT TARGET "hdf5::${hdf5_target_name}")
+      if (HDF5_COMPILER_NO_INTERROGATE)
+        add_library("hdf5::${hdf5_target_name}" INTERFACE IMPORTED)
+        string(REPLACE "-D" "" _hdf5_definitions "${HDF5_${hdf5_lang}_HL_DEFINITIONS}")
+        set_target_properties("hdf5::${hdf5_target_name}" PROPERTIES
+          INTERFACE_INCLUDE_DIRECTORIES "${HDF5_${hdf5_lang}_HL_INCLUDE_DIRS}"
+          INTERFACE_COMPILE_DEFINITIONS "${_hdf5_definitions}")
+      else()
+        if (DEFINED "HDF5_${hdf5_target_name}_LIBRARY")
+          set(_hdf5_location "${HDF5_${hdf5_target_name}_LIBRARY}")
+        elseif (DEFINED "HDF5_${hdf5_lang}_HL_LIBRARY")
+          set(_hdf5_location "${HDF5_${hdf5_lang}_HL_LIBRARY}")
+        elseif (DEFINED "HDF5_${hdf5_lang}_LIBRARY_${hdf5_target_name}")
+          set(_hdf5_location "${HDF5_${hdf5_lang}_LIBRARY_${hdf5_target_name}}")
+        elseif (hdf5_alt_target_name AND DEFINED "HDF5_${hdf5_lang}_LIBRARY_${hdf5_alt_target_name}")
+          set(_hdf5_location "${HDF5_${hdf5_lang}_LIBRARY_${hdf5_alt_target_name}}")
+        else ()
+          # Error if we still don't have the location.
+          message(SEND_ERROR
+            "HDF5 was found, but a different variable was set which contains "
+            "the location of the `hdf5::${hdf5_target_name}` library.")
+        endif ()
+        add_library("hdf5::${hdf5_target_name}" UNKNOWN IMPORTED)
+        string(REPLACE "-D" "" _hdf5_definitions "${HDF5_${hdf5_lang}_HL_DEFINITIONS}")
+        set_target_properties("hdf5::${hdf5_target_name}" PROPERTIES
+          IMPORTED_LOCATION "${_hdf5_location}"
+          IMPORTED_IMPLIB "${_hdf5_location}"
+          INTERFACE_INCLUDE_DIRECTORIES "${HDF5_${hdf5_lang}_HL_INCLUDE_DIRS}"
+          INTERFACE_COMPILE_DEFINITIONS "${_hdf5_definitions}")
+        if (_hdf5_libtype STREQUAL "SHARED")
+          set_property(TARGET "hdf5::${hdf5_target_name}" APPEND
+            PROPERTY
+              INTERFACE_COMPILE_DEFINITIONS H5_BUILT_AS_DYNAMIC_LIB)
+        elseif (_hdf5_libtype STREQUAL "STATIC")
+          set_property(TARGET "hdf5::${hdf5_target_name}" APPEND
+            PROPERTY
+              INTERFACE_COMPILE_DEFINITIONS H5_BUILT_AS_STATIC_LIB)
+        endif ()
+        unset(_hdf5_definitions)
+        unset(_hdf5_libtype)
+        unset(_hdf5_location)
+      endif ()
+    endif ()
+  endforeach ()
+  unset(hdf5_lang)
+
+  if (HDF5_DIFF_EXECUTABLE AND NOT TARGET hdf5::h5diff)
+    add_executable(hdf5::h5diff IMPORTED)
+    set_target_properties(hdf5::h5diff PROPERTIES
+      IMPORTED_LOCATION "${HDF5_DIFF_EXECUTABLE}")
+  endif ()
+endif ()
+
+if (HDF5_FIND_DEBUG)
+  message(STATUS "HDF5_DIR: ${HDF5_DIR}")
+  message(STATUS "HDF5_DEFINITIONS: ${HDF5_DEFINITIONS}")
+  message(STATUS "HDF5_INCLUDE_DIRS: ${HDF5_INCLUDE_DIRS}")
+  message(STATUS "HDF5_LIBRARIES: ${HDF5_LIBRARIES}")
+  message(STATUS "HDF5_HL_LIBRARIES: ${HDF5_HL_LIBRARIES}")
+  foreach(_lang IN LISTS HDF5_LANGUAGE_BINDINGS)
+    message(STATUS "HDF5_${_lang}_DEFINITIONS: ${HDF5_${_lang}_DEFINITIONS}")
+    message(STATUS "HDF5_${_lang}_INCLUDE_DIR: ${HDF5_${_lang}_INCLUDE_DIR}")
+    message(STATUS "HDF5_${_lang}_INCLUDE_DIRS: ${HDF5_${_lang}_INCLUDE_DIRS}")
+    message(STATUS "HDF5_${_lang}_LIBRARY: ${HDF5_${_lang}_LIBRARY}")
+    message(STATUS "HDF5_${_lang}_LIBRARIES: ${HDF5_${_lang}_LIBRARIES}")
+    message(STATUS "HDF5_${_lang}_HL_LIBRARY: ${HDF5_${_lang}_HL_LIBRARY}")
+    message(STATUS "HDF5_${_lang}_HL_LIBRARIES: ${HDF5_${_lang}_HL_LIBRARIES}")
+  endforeach()
+  message(STATUS "Defined targets (if any):")
+  foreach(_lang IN  ITEMS "" "_cpp" "_fortran")
+    foreach(_hl IN  ITEMS "" "_hl")
+      foreach(_prefix IN ITEMS "hdf5::" "")
+        foreach(_suffix IN ITEMS "-static" "-shared" "")
+          set (_target ${_prefix}hdf5${_hl}${_lang}${_suffix})
+          if (TARGET  ${_target})
+            message(STATUS "... ${_target}")
+          else()
+            #message(STATUS "... ${_target} does not exist")
+          endif()
+        endforeach()
+      endforeach()
+    endforeach()
+  endforeach()
+endif()
+unset(_lang)
+unset(_HDF5_NEED_TO_SEARCH)
diff --git a/share/cmake-3.18/Modules/FindHSPELL.cmake b/share/cmake-3.22/Modules/FindHSPELL.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindHSPELL.cmake
rename to share/cmake-3.22/Modules/FindHSPELL.cmake
diff --git a/share/cmake-3.18/Modules/FindHTMLHelp.cmake b/share/cmake-3.22/Modules/FindHTMLHelp.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindHTMLHelp.cmake
rename to share/cmake-3.22/Modules/FindHTMLHelp.cmake
diff --git a/share/cmake-3.22/Modules/FindHg.cmake b/share/cmake-3.22/Modules/FindHg.cmake
new file mode 100644
index 0000000..e9f2c82
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindHg.cmake
@@ -0,0 +1,98 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindHg
+------
+
+Extract information from a mercurial working copy.
+
+The module defines the following variables:
+
+::
+
+   HG_EXECUTABLE - path to mercurial command line client (hg)
+   HG_FOUND - true if the command line client was found
+   HG_VERSION_STRING - the version of mercurial found
+
+.. versionadded:: 3.1
+  If the command line client executable is found the following macro is defined:
+
+::
+
+  HG_WC_INFO(<dir> <var-prefix>)
+
+Hg_WC_INFO extracts information of a mercurial working copy
+at a given location.  This macro defines the following variables:
+
+::
+
+  <var-prefix>_WC_CHANGESET - current changeset
+  <var-prefix>_WC_REVISION - current revision
+
+Example usage:
+
+::
+
+   find_package(Hg)
+   if(HG_FOUND)
+     message("hg found: ${HG_EXECUTABLE}")
+     HG_WC_INFO(${PROJECT_SOURCE_DIR} Project)
+     message("Current revision is ${Project_WC_REVISION}")
+     message("Current changeset is ${Project_WC_CHANGESET}")
+   endif()
+#]=======================================================================]
+
+find_program(HG_EXECUTABLE
+  NAMES hg
+  PATHS
+    [HKEY_LOCAL_MACHINE\\Software\\TortoiseHG]
+  PATH_SUFFIXES Mercurial
+  DOC "hg command line client"
+  )
+mark_as_advanced(HG_EXECUTABLE)
+
+if(HG_EXECUTABLE)
+  set(_saved_lc_all "$ENV{LC_ALL}")
+  set(ENV{LC_ALL} "C")
+
+  set(_saved_language "$ENV{LANGUAGE}")
+  set(ENV{LANGUAGE})
+
+  execute_process(COMMAND ${HG_EXECUTABLE} --version
+                  OUTPUT_VARIABLE hg_version
+                  ERROR_QUIET
+                  RESULT_VARIABLE hg_result
+                  OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+  set(ENV{LC_ALL} ${_saved_lc_all})
+  set(ENV{LANGUAGE} ${_saved_language})
+
+  if(hg_result MATCHES "is not a valid Win32 application")
+    set_property(CACHE HG_EXECUTABLE PROPERTY VALUE "HG_EXECUTABLE-NOTFOUND")
+  endif()
+  if(hg_version MATCHES "^Mercurial Distributed SCM \\(version ([0-9][^)]*)\\)")
+    set(HG_VERSION_STRING "${CMAKE_MATCH_1}")
+  endif()
+  unset(hg_version)
+
+  macro(HG_WC_INFO dir prefix)
+    execute_process(COMMAND ${HG_EXECUTABLE} id -i -n
+      WORKING_DIRECTORY ${dir}
+      RESULT_VARIABLE hg_id_result
+      ERROR_VARIABLE hg_id_error
+      OUTPUT_VARIABLE ${prefix}_WC_DATA
+      OUTPUT_STRIP_TRAILING_WHITESPACE)
+    if(NOT ${hg_id_result} EQUAL 0)
+      message(SEND_ERROR "Command \"${HG_EXECUTBALE} id -n\" in directory ${dir} failed with output:\n${hg_id_error}")
+    endif()
+
+    string(REGEX REPLACE "([0-9a-f]+)\\+? [0-9]+\\+?" "\\1" ${prefix}_WC_CHANGESET ${${prefix}_WC_DATA})
+    string(REGEX REPLACE "[0-9a-f]+\\+? ([0-9]+)\\+?" "\\1" ${prefix}_WC_REVISION ${${prefix}_WC_DATA})
+  endmacro(HG_WC_INFO)
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+find_package_handle_standard_args(Hg
+                                  REQUIRED_VARS HG_EXECUTABLE
+                                  VERSION_VAR HG_VERSION_STRING)
diff --git a/share/cmake-3.22/Modules/FindICU.cmake b/share/cmake-3.22/Modules/FindICU.cmake
new file mode 100644
index 0000000..1bae825
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindICU.cmake
@@ -0,0 +1,438 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindICU
+-------
+
+.. versionadded:: 3.7
+
+Find the International Components for Unicode (ICU) libraries and
+programs.
+
+This module supports multiple components.
+Components can include any of: ``data``, ``i18n``, ``io``, ``le``,
+``lx``, ``test``, ``tu`` and ``uc``.
+
+Note that on Windows ``data`` is named ``dt`` and ``i18n`` is named
+``in``; any of the names may be used, and the appropriate
+platform-specific library name will be automatically selected.
+
+.. versionadded:: 3.11
+  Added support for static libraries on Windows.
+
+This module reports information about the ICU installation in
+several variables.  General variables::
+
+  ICU_VERSION - ICU release version
+  ICU_FOUND - true if the main programs and libraries were found
+  ICU_LIBRARIES - component libraries to be linked
+  ICU_INCLUDE_DIRS - the directories containing the ICU headers
+
+Imported targets::
+
+  ICU::<C>
+
+Where ``<C>`` is the name of an ICU component, for example
+``ICU::i18n``; ``<C>`` is lower-case.
+
+ICU programs are reported in::
+
+  ICU_GENCNVAL_EXECUTABLE - path to gencnval executable
+  ICU_ICUINFO_EXECUTABLE - path to icuinfo executable
+  ICU_GENBRK_EXECUTABLE - path to genbrk executable
+  ICU_ICU-CONFIG_EXECUTABLE - path to icu-config executable
+  ICU_GENRB_EXECUTABLE - path to genrb executable
+  ICU_GENDICT_EXECUTABLE - path to gendict executable
+  ICU_DERB_EXECUTABLE - path to derb executable
+  ICU_PKGDATA_EXECUTABLE - path to pkgdata executable
+  ICU_UCONV_EXECUTABLE - path to uconv executable
+  ICU_GENCFU_EXECUTABLE - path to gencfu executable
+  ICU_MAKECONV_EXECUTABLE - path to makeconv executable
+  ICU_GENNORM2_EXECUTABLE - path to gennorm2 executable
+  ICU_GENCCODE_EXECUTABLE - path to genccode executable
+  ICU_GENSPREP_EXECUTABLE - path to gensprep executable
+  ICU_ICUPKG_EXECUTABLE - path to icupkg executable
+  ICU_GENCMN_EXECUTABLE - path to gencmn executable
+
+ICU component libraries are reported in::
+
+  ICU_<C>_FOUND - ON if component was found; ``<C>`` is upper-case.
+  ICU_<C>_LIBRARIES - libraries for component; ``<C>`` is upper-case.
+
+ICU datafiles are reported in::
+
+  ICU_MAKEFILE_INC - Makefile.inc
+  ICU_PKGDATA_INC - pkgdata.inc
+
+This module reads hints about search results from::
+
+  ICU_ROOT - the root of the ICU installation
+
+The environment variable ``ICU_ROOT`` may also be used; the
+ICU_ROOT variable takes precedence.
+
+The following cache variables may also be set::
+
+  ICU_<P>_EXECUTABLE - the path to executable <P>; ``<P>`` is upper-case.
+  ICU_INCLUDE_DIR - the directory containing the ICU headers
+  ICU_<C>_LIBRARY - the library for component <C>; ``<C>`` is upper-case.
+
+.. note::
+
+  In most cases none of the above variables will require setting,
+  unless multiple ICU versions are available and a specific version
+  is required.
+
+Other variables one may set to control this module are::
+
+  ICU_DEBUG - Set to ON to enable debug output from FindICU.
+#]=======================================================================]
+
+# Written by Roger Leigh <rleigh@codelibre.net>
+
+set(icu_programs
+  gencnval
+  icuinfo
+  genbrk
+  icu-config
+  genrb
+  gendict
+  derb
+  pkgdata
+  uconv
+  gencfu
+  makeconv
+  gennorm2
+  genccode
+  gensprep
+  icupkg
+  gencmn)
+
+set(icu_data
+  Makefile.inc
+  pkgdata.inc)
+
+# The ICU checks are contained in a function due to the large number
+# of temporary variables needed.
+function(_ICU_FIND)
+  # Set up search paths, taking compiler into account.  Search ICU_ROOT,
+  # with ICU_ROOT in the environment as a fallback if unset.
+  if(ICU_ROOT)
+    list(APPEND icu_roots "${ICU_ROOT}")
+  else()
+    if(NOT "$ENV{ICU_ROOT}" STREQUAL "")
+      file(TO_CMAKE_PATH "$ENV{ICU_ROOT}" NATIVE_PATH)
+      list(APPEND icu_roots "${NATIVE_PATH}")
+      set(ICU_ROOT "${NATIVE_PATH}"
+          CACHE PATH "Location of the ICU installation" FORCE)
+    endif()
+  endif()
+
+  # Find include directory
+  list(APPEND icu_include_suffixes "include")
+  find_path(ICU_INCLUDE_DIR
+            NAMES "unicode/utypes.h"
+            HINTS ${icu_roots}
+            PATH_SUFFIXES ${icu_include_suffixes}
+            DOC "ICU include directory")
+  set(ICU_INCLUDE_DIR "${ICU_INCLUDE_DIR}" PARENT_SCOPE)
+
+  # Get version
+  if(ICU_INCLUDE_DIR AND EXISTS "${ICU_INCLUDE_DIR}/unicode/uvernum.h")
+    file(STRINGS "${ICU_INCLUDE_DIR}/unicode/uvernum.h" icu_header_str
+      REGEX "^#define[\t ]+U_ICU_VERSION[\t ]+\".*\".*")
+
+    string(REGEX REPLACE "^#define[\t ]+U_ICU_VERSION[\t ]+\"([^ \\n]*)\".*"
+      "\\1" icu_version_string "${icu_header_str}")
+    set(ICU_VERSION "${icu_version_string}")
+    set(ICU_VERSION "${icu_version_string}" PARENT_SCOPE)
+    unset(icu_header_str)
+    unset(icu_version_string)
+  endif()
+
+  if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+    # 64-bit binary directory
+    set(_bin64 "bin64")
+    # 64-bit library directory
+    set(_lib64 "lib64")
+  endif()
+
+
+  # Find all ICU programs
+  list(APPEND icu_binary_suffixes "${_bin64}" "bin" "sbin")
+  foreach(program ${icu_programs})
+    string(TOUPPER "${program}" program_upcase)
+    set(cache_var "ICU_${program_upcase}_EXECUTABLE")
+    set(program_var "ICU_${program_upcase}_EXECUTABLE")
+    find_program("${cache_var}"
+      NAMES "${program}"
+      HINTS ${icu_roots}
+      PATH_SUFFIXES ${icu_binary_suffixes}
+      DOC "ICU ${program} executable"
+      NO_PACKAGE_ROOT_PATH
+      )
+    mark_as_advanced("${cache_var}")
+    set("${program_var}" "${${cache_var}}" PARENT_SCOPE)
+  endforeach()
+
+  # Find all ICU libraries
+  list(APPEND icu_library_suffixes "${_lib64}" "lib")
+  set(ICU_REQUIRED_LIBS_FOUND ON)
+  set(static_prefix )
+  # static icu libraries compiled with MSVC have the prefix 's'
+  if(MSVC)
+    set(static_prefix "s")
+  endif()
+  foreach(component ${ICU_FIND_COMPONENTS})
+    string(TOUPPER "${component}" component_upcase)
+    set(component_cache "ICU_${component_upcase}_LIBRARY")
+    set(component_cache_release "${component_cache}_RELEASE")
+    set(component_cache_debug "${component_cache}_DEBUG")
+    set(component_found "ICU_${component_upcase}_FOUND")
+    set(component_found_compat "${component_upcase}_FOUND")
+    set(component_libnames "icu${component}")
+    set(component_debug_libnames "icu${component}d")
+
+    # Special case deliberate library naming mismatches between Unix
+    # and Windows builds
+    unset(component_libnames)
+    unset(component_debug_libnames)
+    list(APPEND component_libnames "icu${component}")
+    list(APPEND component_debug_libnames "icu${component}d")
+    if(component STREQUAL "data")
+      list(APPEND component_libnames "icudt")
+      # Note there is no debug variant at present
+      list(APPEND component_debug_libnames "icudtd")
+    endif()
+    if(component STREQUAL "dt")
+      list(APPEND component_libnames "icudata")
+      # Note there is no debug variant at present
+      list(APPEND component_debug_libnames "icudatad")
+    endif()
+    if(component STREQUAL "i18n")
+      list(APPEND component_libnames "icuin")
+      list(APPEND component_debug_libnames "icuind")
+    endif()
+    if(component STREQUAL "in")
+      list(APPEND component_libnames "icui18n")
+      list(APPEND component_debug_libnames "icui18nd")
+    endif()
+
+    if(static_prefix)
+      unset(static_component_libnames)
+      unset(static_component_debug_libnames)
+      foreach(component_libname ${component_libnames})
+        list(APPEND static_component_libnames
+          ${static_prefix}${component_libname})
+      endforeach()
+      foreach(component_libname ${component_debug_libnames})
+        list(APPEND static_component_debug_libnames
+          ${static_prefix}${component_libname})
+      endforeach()
+      list(APPEND component_libnames ${static_component_libnames})
+      list(APPEND component_debug_libnames ${static_component_debug_libnames})
+    endif()
+    find_library("${component_cache_release}"
+      NAMES ${component_libnames}
+      HINTS ${icu_roots}
+      PATH_SUFFIXES ${icu_library_suffixes}
+      DOC "ICU ${component} library (release)"
+      NO_PACKAGE_ROOT_PATH
+      )
+    find_library("${component_cache_debug}"
+      NAMES ${component_debug_libnames}
+      HINTS ${icu_roots}
+      PATH_SUFFIXES ${icu_library_suffixes}
+      DOC "ICU ${component} library (debug)"
+      NO_PACKAGE_ROOT_PATH
+      )
+    include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
+    select_library_configurations(ICU_${component_upcase})
+    mark_as_advanced("${component_cache_release}" "${component_cache_debug}")
+    if(${component_cache})
+      set("${component_found}" ON)
+      set("${component_found_compat}" ON)
+      list(APPEND ICU_LIBRARY "${${component_cache}}")
+    endif()
+    mark_as_advanced("${component_found}")
+    mark_as_advanced("${component_found_compat}")
+    set("${component_cache}" "${${component_cache}}" PARENT_SCOPE)
+    set("${component_found}" "${${component_found}}" PARENT_SCOPE)
+    set("${component_found_compat}" "${${component_found_compat}}" PARENT_SCOPE)
+    if(component_found OR component_found_compat)
+      if (ICU_FIND_REQUIRED_${component})
+        list(APPEND ICU_LIBS_FOUND "${component} (required)")
+      else()
+        list(APPEND ICU_LIBS_FOUND "${component} (optional)")
+      endif()
+    else()
+      if (ICU_FIND_REQUIRED_${component})
+        set(ICU_REQUIRED_LIBS_FOUND OFF)
+        list(APPEND ICU_LIBS_NOTFOUND "${component} (required)")
+      else()
+        list(APPEND ICU_LIBS_NOTFOUND "${component} (optional)")
+      endif()
+    endif()
+  endforeach()
+  set(_ICU_REQUIRED_LIBS_FOUND "${ICU_REQUIRED_LIBS_FOUND}" PARENT_SCOPE)
+  set(ICU_LIBRARY "${ICU_LIBRARY}" PARENT_SCOPE)
+
+  # Find all ICU data files
+  if(CMAKE_LIBRARY_ARCHITECTURE)
+    list(APPEND icu_data_suffixes
+      "${_lib64}/${CMAKE_LIBRARY_ARCHITECTURE}/icu/${ICU_VERSION}"
+      "lib/${CMAKE_LIBRARY_ARCHITECTURE}/icu/${ICU_VERSION}"
+      "${_lib64}/${CMAKE_LIBRARY_ARCHITECTURE}/icu"
+      "lib/${CMAKE_LIBRARY_ARCHITECTURE}/icu")
+  endif()
+  list(APPEND icu_data_suffixes
+    "${_lib64}/icu/${ICU_VERSION}"
+    "lib/icu/${ICU_VERSION}"
+    "${_lib64}/icu"
+    "lib/icu")
+  foreach(data ${icu_data})
+    string(TOUPPER "${data}" data_upcase)
+    string(REPLACE "." "_" data_upcase "${data_upcase}")
+    set(cache_var "ICU_${data_upcase}")
+    set(data_var "ICU_${data_upcase}")
+    find_file("${cache_var}"
+      NAMES "${data}"
+      HINTS ${icu_roots}
+      PATH_SUFFIXES ${icu_data_suffixes}
+      DOC "ICU ${data} data file")
+    mark_as_advanced("${cache_var}")
+    set("${data_var}" "${${cache_var}}" PARENT_SCOPE)
+  endforeach()
+
+  if(NOT ICU_FIND_QUIETLY)
+    if(ICU_LIBS_FOUND)
+      message(STATUS "Found the following ICU libraries:")
+      foreach(found ${ICU_LIBS_FOUND})
+        message(STATUS "  ${found}")
+      endforeach()
+    endif()
+    if(ICU_LIBS_NOTFOUND)
+      message(STATUS "The following ICU libraries were not found:")
+      foreach(notfound ${ICU_LIBS_NOTFOUND})
+        message(STATUS "  ${notfound}")
+      endforeach()
+    endif()
+  endif()
+
+  if(ICU_DEBUG)
+    message(STATUS "--------FindICU.cmake search debug--------")
+    message(STATUS "ICU binary path search order: ${icu_roots}")
+    message(STATUS "ICU include path search order: ${icu_roots}")
+    message(STATUS "ICU library path search order: ${icu_roots}")
+    message(STATUS "----------------")
+  endif()
+endfunction()
+
+_ICU_FIND()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(ICU
+                                  FOUND_VAR ICU_FOUND
+                                  REQUIRED_VARS ICU_INCLUDE_DIR
+                                                ICU_LIBRARY
+                                                _ICU_REQUIRED_LIBS_FOUND
+                                  VERSION_VAR ICU_VERSION
+                                  FAIL_MESSAGE "Failed to find all ICU components")
+
+unset(_ICU_REQUIRED_LIBS_FOUND)
+
+if(ICU_FOUND)
+  set(ICU_INCLUDE_DIRS "${ICU_INCLUDE_DIR}")
+  set(ICU_LIBRARIES "${ICU_LIBRARY}")
+  foreach(_ICU_component ${ICU_FIND_COMPONENTS})
+    string(TOUPPER "${_ICU_component}" _ICU_component_upcase)
+    set(_ICU_component_cache "ICU_${_ICU_component_upcase}_LIBRARY")
+    set(_ICU_component_cache_release "ICU_${_ICU_component_upcase}_LIBRARY_RELEASE")
+    set(_ICU_component_cache_debug "ICU_${_ICU_component_upcase}_LIBRARY_DEBUG")
+    set(_ICU_component_lib "ICU_${_ICU_component_upcase}_LIBRARIES")
+    set(_ICU_component_found "ICU_${_ICU_component_upcase}_FOUND")
+    set(_ICU_imported_target "ICU::${_ICU_component}")
+    if(${_ICU_component_found})
+      set("${_ICU_component_lib}" "${${_ICU_component_cache}}")
+      if(NOT TARGET ${_ICU_imported_target})
+        add_library(${_ICU_imported_target} UNKNOWN IMPORTED)
+        if(ICU_INCLUDE_DIR)
+          set_target_properties(${_ICU_imported_target} PROPERTIES
+            INTERFACE_INCLUDE_DIRECTORIES "${ICU_INCLUDE_DIR}")
+        endif()
+        if(EXISTS "${${_ICU_component_cache}}")
+          set_target_properties(${_ICU_imported_target} PROPERTIES
+            IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
+            IMPORTED_LOCATION "${${_ICU_component_cache}}")
+        endif()
+        if(EXISTS "${${_ICU_component_cache_release}}")
+          set_property(TARGET ${_ICU_imported_target} APPEND PROPERTY
+            IMPORTED_CONFIGURATIONS RELEASE)
+          set_target_properties(${_ICU_imported_target} PROPERTIES
+            IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
+            IMPORTED_LOCATION_RELEASE "${${_ICU_component_cache_release}}")
+        endif()
+        if(EXISTS "${${_ICU_component_cache_debug}}")
+          set_property(TARGET ${_ICU_imported_target} APPEND PROPERTY
+            IMPORTED_CONFIGURATIONS DEBUG)
+          set_target_properties(${_ICU_imported_target} PROPERTIES
+            IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX"
+            IMPORTED_LOCATION_DEBUG "${${_ICU_component_cache_debug}}")
+        endif()
+        if(CMAKE_DL_LIBS AND _ICU_component STREQUAL "uc")
+          set_target_properties(${_ICU_imported_target} PROPERTIES
+            INTERFACE_LINK_LIBRARIES "${CMAKE_DL_LIBS}")
+        endif()
+      endif()
+    endif()
+    unset(_ICU_component_upcase)
+    unset(_ICU_component_cache)
+    unset(_ICU_component_lib)
+    unset(_ICU_component_found)
+    unset(_ICU_imported_target)
+  endforeach()
+endif()
+
+if(ICU_DEBUG)
+  message(STATUS "--------FindICU.cmake results debug--------")
+  message(STATUS "ICU found: ${ICU_FOUND}")
+  message(STATUS "ICU_VERSION number: ${ICU_VERSION}")
+  message(STATUS "ICU_ROOT directory: ${ICU_ROOT}")
+  message(STATUS "ICU_INCLUDE_DIR directory: ${ICU_INCLUDE_DIR}")
+  message(STATUS "ICU_LIBRARIES: ${ICU_LIBRARIES}")
+
+  foreach(program IN LISTS icu_programs)
+    string(TOUPPER "${program}" program_upcase)
+    set(program_lib "ICU_${program_upcase}_EXECUTABLE")
+    message(STATUS "${program} program: ${program_lib}=${${program_lib}}")
+    unset(program_upcase)
+    unset(program_lib)
+  endforeach()
+
+  foreach(data IN LISTS icu_data)
+    string(TOUPPER "${data}" data_upcase)
+    string(REPLACE "." "_" data_upcase "${data_upcase}")
+    set(data_lib "ICU_${data_upcase}")
+    message(STATUS "${data} data: ${data_lib}=${${data_lib}}")
+    unset(data_upcase)
+    unset(data_lib)
+  endforeach()
+
+  foreach(component IN LISTS ICU_FIND_COMPONENTS)
+    string(TOUPPER "${component}" component_upcase)
+    set(component_lib "ICU_${component_upcase}_LIBRARIES")
+    set(component_found "ICU_${component_upcase}_FOUND")
+    set(component_found_compat "${component_upcase}_FOUND")
+    message(STATUS "${component} library found: ${component_found}=${${component_found}}")
+    message(STATUS "${component} library found (compat name): ${component_found_compat}=${${component_found_compat}}")
+    message(STATUS "${component} library: ${component_lib}=${${component_lib}}")
+    unset(component_upcase)
+    unset(component_lib)
+    unset(component_found)
+    unset(component_found_compat)
+  endforeach()
+  message(STATUS "----------------")
+endif()
+
+unset(icu_programs)
diff --git a/share/cmake-3.22/Modules/FindIce.cmake b/share/cmake-3.22/Modules/FindIce.cmake
new file mode 100644
index 0000000..543e10c
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindIce.cmake
@@ -0,0 +1,633 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindIce
+-------
+
+.. versionadded:: 3.1
+
+Find the ZeroC Internet Communication Engine (ICE) programs,
+libraries and datafiles.
+
+This module supports multiple components.
+Components can include any of: ``Freeze``, ``Glacier2``, ``Ice``,
+``IceBox``, ``IceDB``, ``IceDiscovery``, ``IceGrid``,
+``IceLocatorDiscovery``, ``IcePatch``, ``IceSSL``, ``IceStorm``,
+``IceUtil``, ``IceXML``, or ``Slice``.
+
+Ice 3.7 and later also include C++11-specific components:
+``Glacier2++11``, ``Ice++11``, ``IceBox++11``, ``IceDiscovery++11``
+``IceGrid``, ``IceLocatorDiscovery++11``, ``IceSSL++11``,
+``IceStorm++11``
+
+Note that the set of supported components is Ice version-specific.
+
+.. versionadded:: 3.4
+  Imported targets for components and most ``EXECUTABLE`` variables.
+
+.. versionadded:: 3.7
+  Debug and Release variants are found separately.
+
+.. versionadded:: 3.10
+  Ice 3.7 support, including new components, programs and the Nuget package.
+
+This module reports information about the Ice installation in
+several variables.  General variables::
+
+  Ice_VERSION - Ice release version
+  Ice_FOUND - true if the main programs and libraries were found
+  Ice_LIBRARIES - component libraries to be linked
+  Ice_INCLUDE_DIRS - the directories containing the Ice headers
+  Ice_SLICE_DIRS - the directories containing the Ice slice interface
+                   definitions
+
+Imported targets::
+
+  Ice::<C>
+
+Where ``<C>`` is the name of an Ice component, for example
+``Ice::Glacier2`` or ``Ice++11``.
+
+Ice slice programs are reported in::
+
+  Ice_SLICE2CONFLUENCE_EXECUTABLE - path to slice2confluence executable
+  Ice_SLICE2CPP_EXECUTABLE - path to slice2cpp executable
+  Ice_SLICE2CS_EXECUTABLE - path to slice2cs executable
+  Ice_SLICE2FREEZEJ_EXECUTABLE - path to slice2freezej executable
+  Ice_SLICE2FREEZE_EXECUTABLE - path to slice2freeze executable
+  Ice_SLICE2HTML_EXECUTABLE - path to slice2html executable
+  Ice_SLICE2JAVA_EXECUTABLE - path to slice2java executable
+  Ice_SLICE2JS_EXECUTABLE - path to slice2js executable
+  Ice_SLICE2MATLAB_EXECUTABLE - path to slice2matlab executable
+  Ice_SLICE2OBJC_EXECUTABLE - path to slice2objc executable
+  Ice_SLICE2PHP_EXECUTABLE - path to slice2php executable
+  Ice_SLICE2PY_EXECUTABLE - path to slice2py executable
+  Ice_SLICE2RB_EXECUTABLE - path to slice2rb executable
+
+.. versionadded:: 3.14
+  Variables for ``slice2confluence`` and ``slice2matlab``.
+
+Ice programs are reported in::
+
+  Ice_GLACIER2ROUTER_EXECUTABLE - path to glacier2router executable
+  Ice_ICEBOX_EXECUTABLE - path to icebox executable
+  Ice_ICEBOXXX11_EXECUTABLE - path to icebox++11 executable
+  Ice_ICEBOXADMIN_EXECUTABLE - path to iceboxadmin executable
+  Ice_ICEBOXD_EXECUTABLE - path to iceboxd executable
+  Ice_ICEBOXNET_EXECUTABLE - path to iceboxnet executable
+  Ice_ICEBRIDGE_EXECUTABLE - path to icebridge executable
+  Ice_ICEGRIDADMIN_EXECUTABLE - path to icegridadmin executable
+  Ice_ICEGRIDDB_EXECUTABLE - path to icegriddb executable
+  Ice_ICEGRIDNODE_EXECUTABLE - path to icegridnode executable
+  Ice_ICEGRIDNODED_EXECUTABLE - path to icegridnoded executable
+  Ice_ICEGRIDREGISTRY_EXECUTABLE - path to icegridregistry executable
+  Ice_ICEGRIDREGISTRYD_EXECUTABLE - path to icegridregistryd executable
+  Ice_ICEPATCH2CALC_EXECUTABLE - path to icepatch2calc executable
+  Ice_ICEPATCH2CLIENT_EXECUTABLE - path to icepatch2client executable
+  Ice_ICEPATCH2SERVER_EXECUTABLE - path to icepatch2server executable
+  Ice_ICESERVICEINSTALL_EXECUTABLE - path to iceserviceinstall executable
+  Ice_ICESTORMADMIN_EXECUTABLE - path to icestormadmin executable
+  Ice_ICESTORMDB_EXECUTABLE - path to icestormdb executable
+  Ice_ICESTORMMIGRATE_EXECUTABLE - path to icestormmigrate executable
+
+Ice db programs (Windows only; standard system versions on all other
+platforms) are reported in::
+
+  Ice_DB_ARCHIVE_EXECUTABLE - path to db_archive executable
+  Ice_DB_CHECKPOINT_EXECUTABLE - path to db_checkpoint executable
+  Ice_DB_DEADLOCK_EXECUTABLE - path to db_deadlock executable
+  Ice_DB_DUMP_EXECUTABLE - path to db_dump executable
+  Ice_DB_HOTBACKUP_EXECUTABLE - path to db_hotbackup executable
+  Ice_DB_LOAD_EXECUTABLE - path to db_load executable
+  Ice_DB_LOG_VERIFY_EXECUTABLE - path to db_log_verify executable
+  Ice_DB_PRINTLOG_EXECUTABLE - path to db_printlog executable
+  Ice_DB_RECOVER_EXECUTABLE - path to db_recover executable
+  Ice_DB_STAT_EXECUTABLE - path to db_stat executable
+  Ice_DB_TUNER_EXECUTABLE - path to db_tuner executable
+  Ice_DB_UPGRADE_EXECUTABLE - path to db_upgrade executable
+  Ice_DB_VERIFY_EXECUTABLE - path to db_verify executable
+  Ice_DUMPDB_EXECUTABLE - path to dumpdb executable
+  Ice_TRANSFORMDB_EXECUTABLE - path to transformdb executable
+
+Ice component libraries are reported in::
+
+  Ice_<C>_FOUND - ON if component was found
+  Ice_<C>_LIBRARIES - libraries for component
+
+Note that ``<C>`` is the uppercased name of the component.
+
+This module reads hints about search results from::
+
+  Ice_HOME - the root of the Ice installation
+
+The environment variable ``ICE_HOME`` may also be used; the
+Ice_HOME variable takes precedence.
+
+.. note::
+  On Windows, Ice 3.7.0 and later provide libraries via the NuGet
+  package manager.  Appropriate NuGet packages will be searched for
+  using ``CMAKE_PREFIX_PATH``, or alternatively ``Ice_HOME`` may be
+  set to the location of a specific NuGet package to restrict the
+  search.
+
+The following cache variables may also be set::
+
+  Ice_<P>_EXECUTABLE - the path to executable <P>
+  Ice_INCLUDE_DIR - the directory containing the Ice headers
+  Ice_SLICE_DIR - the directory containing the Ice slice interface
+                  definitions
+  Ice_<C>_LIBRARY - the library for component <C>
+
+.. note::
+
+  In most cases none of the above variables will require setting,
+  unless multiple Ice versions are available and a specific version
+  is required.  On Windows, the most recent version of Ice will be
+  found through the registry.  On Unix, the programs, headers and
+  libraries will usually be in standard locations, but Ice_SLICE_DIRS
+  might not be automatically detected (commonly known locations are
+  searched).  All the other variables are defaulted using Ice_HOME,
+  if set.  It's possible to set Ice_HOME and selectively specify
+  alternative locations for the other components; this might be
+  required for e.g. newer versions of Visual Studio if the
+  heuristics are not sufficient to identify the correct programs and
+  libraries for the specific Visual Studio version.
+
+Other variables one may set to control this module are::
+
+  Ice_DEBUG - Set to ON to enable debug output from FindIce.
+#]=======================================================================]
+
+# Written by Roger Leigh <rleigh@codelibre.net>
+
+  set(_Ice_db_programs
+      db_archive
+      db_checkpoint
+      db_deadlock
+      db_dump
+      db_hotbackup
+      db_load
+      db_log_verify
+      db_printlog
+      db_recover
+      db_stat
+      db_tuner
+      db_upgrade
+      db_verify
+      dumpdb
+      transformdb)
+
+  set(_Ice_programs
+      glacier2router
+      icebox
+      icebox++11
+      iceboxadmin
+      iceboxd
+      iceboxnet
+      icebridge
+      icegridadmin
+      icegriddb
+      icegridnode
+      icegridnoded
+      icegridregistry
+      icegridregistryd
+      icepatch2calc
+      icepatch2client
+      icepatch2server
+      iceserviceinstall
+      icestormadmin
+      icestormdb
+      icestormmigrate)
+
+  set(_Ice_slice_programs
+      slice2confluence
+      slice2cpp
+      slice2cs
+      slice2freezej
+      slice2freeze
+      slice2html
+      slice2java
+      slice2js
+      slice2matlab
+      slice2objc
+      slice2php
+      slice2py
+      slice2rb)
+
+
+# The Ice checks are contained in a function due to the large number
+# of temporary variables needed.
+function(_Ice_FIND)
+  # Released versions of Ice, including generic short forms
+  set(ice_versions
+      3
+      3.7
+      3.7.0
+      3.6
+      3.6.3
+      3.6.2
+      3.6.1
+      3.6.0
+      3.5
+      3.5.1
+      3.5.0
+      3.4
+      3.4.2
+      3.4.1
+      3.4.0
+      3.3
+      3.3.1
+      3.3.0)
+
+  foreach(ver ${ice_versions})
+    string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\$" two_digit_version_match "${ver}")
+    if(two_digit_version_match)
+      string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\$" "\\1\\2" two_digit_version "${ver}")
+      list(APPEND ice_suffix_versions "${two_digit_version}")
+    endif()
+  endforeach()
+
+  # Set up search paths, taking compiler into account.  Search Ice_HOME,
+  # with ICE_HOME in the environment as a fallback if unset.
+  if(Ice_HOME)
+    list(APPEND ice_roots "${Ice_HOME}")
+  else()
+    if(NOT "$ENV{ICE_HOME}" STREQUAL "")
+      file(TO_CMAKE_PATH "$ENV{ICE_HOME}" NATIVE_PATH)
+      list(APPEND ice_roots "${NATIVE_PATH}")
+      set(Ice_HOME "${NATIVE_PATH}"
+          CACHE PATH "Location of the Ice installation" FORCE)
+    endif()
+  endif()
+
+  set(_bin "bin/Win32")
+  set(_lib "lib/Win32")
+  if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+    set(_bin "bin/x64")
+    set(_lib "lib/x64")
+    # 64-bit path suffix
+    set(_x64 "/x64")
+    # 64-bit library directory
+    set(_lib64 "lib64")
+  endif()
+
+  unset(vcvers)
+  if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" OR "${CMAKE_CXX_SIMULATE_ID}" STREQUAL "MSVC")
+    if(MSVC_TOOLSET_VERSION GREATER_EQUAL 141)
+      set(vcvers "141;140")
+    elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 100)
+      set(vcvers "${MSVC_TOOLSET_VERSION}")
+    elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 90)
+      set(vcvers "${MSVC_TOOLSET_VERSION}")
+      set(vcyear "2008")
+    elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 80)
+      set(vcvers "${MSVC_TOOLSET_VERSION}")
+      set(vcyear "2005")
+    else() # Unknown version
+      set(vcvers Unknown)
+    endif()
+  endif()
+
+  # For compatibility with ZeroC Windows builds.
+  if(vcvers)
+    list(APPEND ice_binary_suffixes "build/native/${_bin}/Release" "tools")
+    list(APPEND ice_debug_library_suffixes "build/native/${_lib}/Debug")
+    list(APPEND ice_release_library_suffixes "build/native/${_lib}/Release")
+    foreach(vcver IN LISTS vcvers)
+      # Earlier Ice (3.3) builds don't use vcnnn subdirectories, but are harmless to check.
+      list(APPEND ice_binary_suffixes "bin/vc${vcver}${_x64}" "bin/vc${vcver}")
+      list(APPEND ice_debug_library_suffixes "lib/vc${vcver}${_x64}" "lib/vc${vcver}")
+      list(APPEND ice_release_library_suffixes "lib/vc${vcver}${_x64}" "lib/vc${vcver}")
+    endforeach()
+  endif()
+  # Generic 64-bit and 32-bit directories
+  list(APPEND ice_binary_suffixes "bin${_x64}" "bin")
+  list(APPEND ice_debug_library_suffixes "libx32" "${_lib64}" "lib${_x64}" "lib")
+  list(APPEND ice_release_library_suffixes "libx32" "${_lib64}" "lib${_x64}" "lib")
+  if(vcvers)
+    list(APPEND ice_include_suffixes "build/native/include")
+  endif()
+  list(APPEND ice_include_suffixes "include")
+  list(APPEND ice_slice_suffixes "slice")
+
+  # On Windows, look in the registry for install locations.  Different
+  # versions of Ice install support different compiler versions.
+  if(vcvers)
+    foreach(ice_version ${ice_versions})
+      foreach(vcver IN LISTS vcvers)
+        list(APPEND ice_nuget_dirs "zeroc.ice.v${vcver}.${ice_version}")
+        list(APPEND freeze_nuget_dirs "zeroc.freeze.v${vcver}.${ice_version}")
+      endforeach()
+    endforeach()
+    find_path(Ice_NUGET_DIR
+              NAMES "tools/slice2cpp.exe"
+              PATH_SUFFIXES ${ice_nuget_dirs}
+              DOC "Ice NuGet directory")
+    if(Ice_NUGET_DIR)
+      list(APPEND ice_roots "${Ice_NUGET_DIR}")
+    endif()
+    find_path(Freeze_NUGET_DIR
+              NAMES "tools/slice2freeze.exe"
+              PATH_SUFFIXES ${freeze_nuget_dirs}
+              DOC "Freeze NuGet directory")
+    if(Freeze_NUGET_DIR)
+      list(APPEND ice_roots "${Freeze_NUGET_DIR}")
+    endif()
+    foreach(ice_version ${ice_versions})
+      # Ice 3.3 releases use a Visual Studio year suffix and value is
+      # enclosed in double quotes, though only the leading quote is
+      # returned by get_filename_component.
+      unset(ice_location)
+      if(vcyear)
+        get_filename_component(ice_location
+                               "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ZeroC\\Ice ${ice_version} for Visual Studio ${vcyear};InstallDir]"
+                               PATH)
+        if(ice_location AND NOT ("${ice_location}" STREQUAL "/registry" OR "${ice_location}" STREQUAL "/"))
+          string(REGEX REPLACE "^\"(.*)\"?$" "\\1" ice_location "${ice_location}")
+          get_filename_component(ice_location "${ice_location}" ABSOLUTE)
+        else()
+          unset(ice_location)
+        endif()
+      endif()
+      # Ice 3.4+ releases don't use a suffix
+      if(NOT ice_location OR "${ice_location}" STREQUAL "/registry")
+        get_filename_component(ice_location
+                               "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ZeroC\\Ice ${ice_version};InstallDir]"
+                               ABSOLUTE)
+      endif()
+
+      if(ice_location AND NOT "${ice_location}" STREQUAL "/registry")
+        list(APPEND ice_roots "${ice_location}")
+      endif()
+    endforeach()
+  else()
+    foreach(ice_version ${ice_versions})
+      # Prefer 64-bit variants if present (and using a 64-bit compiler)
+      list(APPEND ice_roots "/opt/Ice-${ice_version}")
+    endforeach()
+  endif()
+
+  # Find all Ice programs
+  foreach(program ${_Ice_db_programs} ${_Ice_programs} ${_Ice_slice_programs})
+    string(TOUPPER "${program}" program_upcase)
+    set(cache_var "Ice_${program_upcase}_EXECUTABLE")
+    set(program_var "Ice_${program_upcase}_EXECUTABLE")
+    find_program("${cache_var}" "${program}"
+      HINTS ${ice_roots}
+      PATH_SUFFIXES ${ice_binary_suffixes}
+      DOC "Ice ${program} executable")
+    mark_as_advanced(cache_var)
+    set("${program_var}" "${${cache_var}}" PARENT_SCOPE)
+  endforeach()
+
+  # Get version.
+  if(Ice_SLICE2CPP_EXECUTABLE)
+    # Execute in C locale for safety
+    set(_Ice_SAVED_LC_ALL "$ENV{LC_ALL}")
+    set(ENV{LC_ALL} C)
+
+    execute_process(COMMAND ${Ice_SLICE2CPP_EXECUTABLE} --version
+      ERROR_VARIABLE Ice_VERSION_SLICE2CPP_FULL
+      ERROR_STRIP_TRAILING_WHITESPACE)
+
+    # restore the previous LC_ALL
+    set(ENV{LC_ALL} ${_Ice_SAVED_LC_ALL})
+
+    # Make short version
+    string(REGEX REPLACE "^(.*)\\.[^.]*$" "\\1" Ice_VERSION_SLICE2CPP_SHORT "${Ice_VERSION_SLICE2CPP_FULL}")
+    set(Ice_VERSION "${Ice_VERSION_SLICE2CPP_FULL}" PARENT_SCOPE)
+  endif()
+
+  if(NOT Ice_FIND_QUIETLY)
+    message(STATUS "Ice version: ${Ice_VERSION_SLICE2CPP_FULL}")
+  endif()
+
+  # Find include directory
+  find_path(Ice_INCLUDE_DIR
+            NAMES "Ice/Ice.h"
+            HINTS ${ice_roots}
+            PATH_SUFFIXES ${ice_include_suffixes}
+            DOC "Ice include directory")
+  set(Ice_INCLUDE_DIR "${Ice_INCLUDE_DIR}" PARENT_SCOPE)
+
+  find_path(Freeze_INCLUDE_DIR
+            NAMES "Freeze/Freeze.h"
+            HINTS ${ice_roots}
+            PATH_SUFFIXES ${ice_include_suffixes}
+            DOC "Freeze include directory")
+  set(Freeze_INCLUDE_DIR "${Freeze_INCLUDE_DIR}" PARENT_SCOPE)
+
+  # In common use on Linux, MacOS X (homebrew) and FreeBSD; prefer
+  # version-specific dir
+  list(APPEND ice_slice_paths
+       /usr/local/share /usr/share)
+  list(APPEND ice_slice_suffixes
+       "Ice-${Ice_VERSION_SLICE2CPP_FULL}/slice"
+       "Ice-${Ice_VERSION_SLICE2CPP_SHORT}/slice"
+       "ice/slice"
+       Ice)
+
+  # Find slice directory
+  find_path(Ice_SLICE_DIR
+            NAMES "Ice/Connection.ice"
+            HINTS ${ice_roots}
+                  ${ice_slice_paths}
+            PATH_SUFFIXES ${ice_slice_suffixes}
+            NO_DEFAULT_PATH
+            DOC "Ice slice directory")
+  set(Ice_SLICE_DIR "${Ice_SLICE_DIR}" PARENT_SCOPE)
+
+  # Find all Ice libraries
+  set(Ice_REQUIRED_LIBS_FOUND ON)
+  foreach(component ${Ice_FIND_COMPONENTS})
+    string(TOUPPER "${component}" component_upcase)
+    set(component_cache "Ice_${component_upcase}_LIBRARY")
+    set(component_cache_release "${component_cache}_RELEASE")
+    set(component_cache_debug "${component_cache}_DEBUG")
+    set(component_found "${component_upcase}_FOUND")
+    set(component_library "${component}")
+    unset(component_library_release_names)
+    unset(component_library_debug_names)
+    if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" OR "${CMAKE_CXX_SIMULATE_ID}" STREQUAL "MSVC")
+      string(REGEX MATCH ".+\\+\\+11$" component_library_cpp11 "${component_library}")
+      if(component_library_cpp11)
+        string(REGEX REPLACE "^(.+)(\\+\\+11)$" "\\1" component_library "${component_library}")
+      endif()
+      foreach(suffix_ver ${ice_suffix_versions})
+        set(_name "${component_library}${suffix_ver}")
+        if(component_library_cpp11)
+          string(APPEND _name "++11")
+        endif()
+        list(APPEND component_library_debug_names "${_name}d")
+        list(APPEND component_library_release_names "${_name}")
+      endforeach()
+      set(_name "${component_library}")
+      if(component_library_cpp11)
+        string(APPEND _name "++11")
+      endif()
+      list(APPEND component_library_debug_names "${_name}d")
+      list(APPEND component_library_release_names "${_name}")
+    else()
+      list(APPEND component_library_debug_names "${component_library}d")
+      list(APPEND component_library_release_names "${component_library}")
+    endif()
+    find_library("${component_cache_release}" ${component_library_release_names}
+      HINTS ${ice_roots}
+      PATH_SUFFIXES ${ice_release_library_suffixes}
+      DOC "Ice ${component} library (release)")
+    find_library("${component_cache_debug}" ${component_library_debug_names}
+      HINTS ${ice_roots}
+      PATH_SUFFIXES ${ice_debug_library_suffixes}
+      DOC "Ice ${component} library (debug)")
+    include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
+    select_library_configurations(Ice_${component_upcase})
+    mark_as_advanced("${component_cache_release}" "${component_cache_debug}")
+    if(${component_cache})
+      set("${component_found}" ON)
+      list(APPEND Ice_LIBRARY "${${component_cache}}")
+    endif()
+    mark_as_advanced("${component_found}")
+    set("${component_cache}" "${${component_cache}}" PARENT_SCOPE)
+    set("${component_found}" "${${component_found}}" PARENT_SCOPE)
+    if(${component_found})
+      if (Ice_FIND_REQUIRED_${component})
+        list(APPEND Ice_LIBS_FOUND "${component} (required)")
+      else()
+        list(APPEND Ice_LIBS_FOUND "${component} (optional)")
+      endif()
+    else()
+      if (Ice_FIND_REQUIRED_${component})
+        set(Ice_REQUIRED_LIBS_FOUND OFF)
+        list(APPEND Ice_LIBS_NOTFOUND "${component} (required)")
+      else()
+        list(APPEND Ice_LIBS_NOTFOUND "${component} (optional)")
+      endif()
+    endif()
+  endforeach()
+  set(_Ice_REQUIRED_LIBS_FOUND "${Ice_REQUIRED_LIBS_FOUND}" PARENT_SCOPE)
+  set(Ice_LIBRARY "${Ice_LIBRARY}" PARENT_SCOPE)
+
+  if(NOT Ice_FIND_QUIETLY)
+    if(Ice_LIBS_FOUND)
+      message(STATUS "Found the following Ice libraries:")
+      foreach(found ${Ice_LIBS_FOUND})
+        message(STATUS "  ${found}")
+      endforeach()
+    endif()
+    if(Ice_LIBS_NOTFOUND)
+      message(STATUS "The following Ice libraries were not found:")
+      foreach(notfound ${Ice_LIBS_NOTFOUND})
+        message(STATUS "  ${notfound}")
+      endforeach()
+    endif()
+  endif()
+
+  if(Ice_DEBUG)
+    message(STATUS "--------FindIce.cmake search debug--------")
+    message(STATUS "ICE binary path search order: ${ice_roots}")
+    message(STATUS "ICE binary suffixes: ${ice_binary_suffixes}")
+    message(STATUS "ICE include path search order: ${ice_roots}")
+    message(STATUS "ICE include suffixes: ${ice_include_suffixes}")
+    message(STATUS "ICE slice path search order: ${ice_roots} ${ice_slice_paths}")
+    message(STATUS "ICE slice suffixes: ${ice_slice_suffixes}")
+    message(STATUS "ICE library path search order: ${ice_roots}")
+    message(STATUS "ICE debug library suffixes: ${ice_debug_library_suffixes}")
+    message(STATUS "ICE release library suffixes: ${ice_release_library_suffixes}")
+    message(STATUS "----------------")
+  endif()
+endfunction()
+
+_Ice_FIND()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(Ice
+                                  FOUND_VAR Ice_FOUND
+                                  REQUIRED_VARS Ice_SLICE2CPP_EXECUTABLE
+                                                Ice_INCLUDE_DIR
+                                                Ice_SLICE_DIR
+                                                Ice_LIBRARY
+                                                _Ice_REQUIRED_LIBS_FOUND
+                                  VERSION_VAR Ice_VERSION
+                                  FAIL_MESSAGE "Failed to find all Ice components")
+
+unset(_Ice_REQUIRED_LIBS_FOUND)
+
+if(Ice_FOUND)
+  set(Ice_INCLUDE_DIRS "${Ice_INCLUDE_DIR}")
+  if (Freeze_INCLUDE_DIR)
+    list(APPEND Ice_INCLUDE_DIRS "${Freeze_INCLUDE_DIR}")
+  endif()
+  set(Ice_SLICE_DIRS "${Ice_SLICE_DIR}")
+  set(Ice_LIBRARIES "${Ice_LIBRARY}")
+  foreach(_Ice_component ${Ice_FIND_COMPONENTS})
+    string(TOUPPER "${_Ice_component}" _Ice_component_upcase)
+    set(_Ice_component_cache "Ice_${_Ice_component_upcase}_LIBRARY")
+    set(_Ice_component_cache_release "Ice_${_Ice_component_upcase}_LIBRARY_RELEASE")
+    set(_Ice_component_cache_debug "Ice_${_Ice_component_upcase}_LIBRARY_DEBUG")
+    set(_Ice_component_lib "Ice_${_Ice_component_upcase}_LIBRARIES")
+    set(_Ice_component_found "${_Ice_component_upcase}_FOUND")
+    set(_Ice_imported_target "Ice::${_Ice_component}")
+    if(${_Ice_component_found})
+      set("${_Ice_component_lib}" "${${_Ice_component_cache}}")
+      if(NOT TARGET ${_Ice_imported_target})
+        add_library(${_Ice_imported_target} UNKNOWN IMPORTED)
+        set_target_properties(${_Ice_imported_target} PROPERTIES
+          INTERFACE_INCLUDE_DIRECTORIES "${Ice_INCLUDE_DIRS}")
+        if(EXISTS "${${_Ice_component_cache}}")
+          set_target_properties(${_Ice_imported_target} PROPERTIES
+            IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
+            IMPORTED_LOCATION "${${_Ice_component_cache}}")
+        endif()
+        if(EXISTS "${${_Ice_component_cache_release}}")
+          set_property(TARGET ${_Ice_imported_target} APPEND PROPERTY
+            IMPORTED_CONFIGURATIONS RELEASE)
+          set_target_properties(${_Ice_imported_target} PROPERTIES
+            IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
+            IMPORTED_LOCATION_RELEASE "${${_Ice_component_cache_release}}")
+        endif()
+        if(EXISTS "${${_Ice_component_cache_debug}}")
+          set_property(TARGET ${_Ice_imported_target} APPEND PROPERTY
+            IMPORTED_CONFIGURATIONS DEBUG)
+          set_target_properties(${_Ice_imported_target} PROPERTIES
+            IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX"
+            IMPORTED_LOCATION_DEBUG "${${_Ice_component_cache_debug}}")
+        endif()
+      endif()
+    endif()
+    unset(_Ice_component_upcase)
+    unset(_Ice_component_cache)
+    unset(_Ice_component_lib)
+    unset(_Ice_component_found)
+    unset(_Ice_imported_target)
+  endforeach()
+endif()
+
+if(Ice_DEBUG)
+  message(STATUS "--------FindIce.cmake results debug--------")
+  message(STATUS "Ice_VERSION number: ${Ice_VERSION}")
+  message(STATUS "Ice_HOME directory: ${Ice_HOME}")
+  message(STATUS "Ice_INCLUDE_DIR directory: ${Ice_INCLUDE_DIR}")
+  message(STATUS "Ice_SLICE_DIR directory: ${Ice_SLICE_DIR}")
+  message(STATUS "Ice_LIBRARIES: ${Ice_LIBRARIES}")
+  message(STATUS "Freeze_INCLUDE_DIR directory: ${Freeze_INCLUDE_DIR}")
+  message(STATUS "Ice_INCLUDE_DIRS directory: ${Ice_INCLUDE_DIRS}")
+
+  foreach(program ${_Ice_db_programs} ${_Ice_programs} ${_Ice_slice_programs})
+    string(TOUPPER "${program}" program_upcase)
+    message(STATUS "${program} executable: ${Ice_${program_upcase}_EXECUTABLE}")
+  endforeach()
+
+  foreach(component ${Ice_FIND_COMPONENTS})
+    string(TOUPPER "${component}" component_upcase)
+    set(component_lib "Ice_${component_upcase}_LIBRARIES")
+    set(component_found "${component_upcase}_FOUND")
+    message(STATUS "${component} library found: ${${component_found}}")
+    message(STATUS "${component} library: ${${component_lib}}")
+  endforeach()
+  message(STATUS "----------------")
+endif()
+
+unset(_Ice_db_programs)
+unset(_Ice_programs)
+unset(_Ice_slice_programs)
diff --git a/share/cmake-3.22/Modules/FindIconv.cmake b/share/cmake-3.22/Modules/FindIconv.cmake
new file mode 100644
index 0000000..566330f
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindIconv.cmake
@@ -0,0 +1,182 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindIconv
+---------
+
+.. versionadded:: 3.11
+
+This module finds the ``iconv()`` POSIX.1 functions on the system.
+These functions might be provided in the regular C library or externally
+in the form of an additional library.
+
+The following variables are provided to indicate iconv support:
+
+.. variable:: Iconv_FOUND
+
+  Variable indicating if the iconv support was found.
+
+.. variable:: Iconv_INCLUDE_DIRS
+
+  The directories containing the iconv headers.
+
+.. variable:: Iconv_LIBRARIES
+
+  The iconv libraries to be linked.
+
+.. variable:: Iconv_VERSION
+
+  .. versionadded:: 3.21
+
+  The version of iconv found (x.y)
+
+.. variable:: Iconv_VERSION_MAJOR
+
+  .. versionadded:: 3.21
+
+  The major version of iconv
+
+.. variable:: Iconv_VERSION_MINOR
+
+  .. versionadded:: 3.21
+
+  The minor version of iconv
+
+.. variable:: Iconv_IS_BUILT_IN
+
+  A variable indicating whether iconv support is stemming from the
+  C library or not. Even if the C library provides `iconv()`, the presence of
+  an external `libiconv` implementation might lead to this being false.
+
+Additionally, the following :prop_tgt:`IMPORTED` target is being provided:
+
+.. variable:: Iconv::Iconv
+
+  Imported target for using iconv.
+
+The following cache variables may also be set:
+
+.. variable:: Iconv_INCLUDE_DIR
+
+  The directory containing the iconv headers.
+
+.. variable:: Iconv_LIBRARY
+
+  The iconv library (if not implicitly given in the C library).
+
+.. note::
+  On POSIX platforms, iconv might be part of the C library and the cache
+  variables ``Iconv_INCLUDE_DIR`` and ``Iconv_LIBRARY`` might be empty.
+
+.. note::
+  Some libiconv implementations don't embed the version number in their header files.
+  In this case the variables ``Iconv_VERSION*`` will be empty.
+
+#]=======================================================================]
+
+include(${CMAKE_CURRENT_LIST_DIR}/CMakePushCheckState.cmake)
+if(CMAKE_C_COMPILER_LOADED)
+  include(${CMAKE_CURRENT_LIST_DIR}/CheckCSourceCompiles.cmake)
+elseif(CMAKE_CXX_COMPILER_LOADED)
+  include(${CMAKE_CURRENT_LIST_DIR}/CheckCXXSourceCompiles.cmake)
+else()
+  # If neither C nor CXX are loaded, implicit iconv makes no sense.
+  set(Iconv_IS_BUILT_IN FALSE)
+endif()
+
+# iconv can only be provided in libc on a POSIX system.
+# If any cache variable is already set, we'll skip this test.
+if(NOT DEFINED Iconv_IS_BUILT_IN)
+  if(UNIX AND NOT DEFINED Iconv_INCLUDE_DIR AND NOT DEFINED Iconv_LIBRARY)
+    cmake_push_check_state(RESET)
+    # We always suppress the message here: Otherwise on supported systems
+    # not having iconv in their C library (e.g. those using libiconv)
+    # would always display a confusing "Looking for iconv - not found" message
+    set(CMAKE_FIND_QUIETLY TRUE)
+    # The following code will not work, but it's sufficient to see if it compiles.
+    # Note: libiconv will define the iconv functions as macros, so CheckSymbolExists
+    # will not yield correct results.
+    set(Iconv_IMPLICIT_TEST_CODE
+      "
+      #include <stddef.h>
+      #include <iconv.h>
+      int main() {
+        char *a, *b;
+        size_t i, j;
+        iconv_t ic;
+        ic = iconv_open(\"to\", \"from\");
+        iconv(ic, &a, &i, &b, &j);
+        iconv_close(ic);
+      }
+      "
+    )
+    if(CMAKE_C_COMPILER_LOADED)
+      check_c_source_compiles("${Iconv_IMPLICIT_TEST_CODE}" Iconv_IS_BUILT_IN)
+    else()
+      check_cxx_source_compiles("${Iconv_IMPLICIT_TEST_CODE}" Iconv_IS_BUILT_IN)
+    endif()
+    cmake_pop_check_state()
+  else()
+    set(Iconv_IS_BUILT_IN FALSE)
+  endif()
+endif()
+
+set(_Iconv_REQUIRED_VARS)
+if(Iconv_IS_BUILT_IN)
+  set(_Iconv_REQUIRED_VARS _Iconv_IS_BUILT_IN_MSG)
+  set(_Iconv_IS_BUILT_IN_MSG "built in to C library")
+else()
+  set(_Iconv_REQUIRED_VARS Iconv_LIBRARY Iconv_INCLUDE_DIR)
+
+  find_path(Iconv_INCLUDE_DIR
+    NAMES "iconv.h"
+    DOC "iconv include directory")
+  set(Iconv_LIBRARY_NAMES "iconv" "libiconv")
+  mark_as_advanced(Iconv_INCLUDE_DIR)
+
+  find_library(Iconv_LIBRARY
+    NAMES iconv libiconv
+    NAMES_PER_DIR
+    DOC "iconv library (if not in the C library)")
+  mark_as_advanced(Iconv_LIBRARY)
+endif()
+
+# NOTE: glibc's iconv.h does not define _LIBICONV_VERSION
+if(Iconv_INCLUDE_DIR AND EXISTS "${Iconv_INCLUDE_DIR}/iconv.h")
+  file(STRINGS ${Iconv_INCLUDE_DIR}/iconv.h Iconv_VERSION_DEFINE REGEX "_LIBICONV_VERSION (.*)")
+
+  if(Iconv_VERSION_DEFINE MATCHES "(0x[A-Fa-f0-9]+)")
+    set(Iconv_VERSION_NUMBER "${CMAKE_MATCH_1}")
+    # encoding -> version number: (major<<8) + minor
+    math(EXPR Iconv_VERSION_MAJOR "${Iconv_VERSION_NUMBER} >> 8" OUTPUT_FORMAT HEXADECIMAL)
+    math(EXPR Iconv_VERSION_MINOR "${Iconv_VERSION_NUMBER} - (${Iconv_VERSION_MAJOR} << 8)" OUTPUT_FORMAT HEXADECIMAL)
+
+    math(EXPR Iconv_VERSION_MAJOR "${Iconv_VERSION_MAJOR}" OUTPUT_FORMAT DECIMAL)
+    math(EXPR Iconv_VERSION_MINOR "${Iconv_VERSION_MINOR}" OUTPUT_FORMAT DECIMAL)
+    set(Iconv_VERSION "${Iconv_VERSION_MAJOR}.${Iconv_VERSION_MINOR}")
+  endif()
+
+  unset(Iconv_VERSION_DEFINE)
+  unset(Iconv_VERSION_NUMBER)
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+find_package_handle_standard_args(Iconv
+                                  REQUIRED_VARS ${_Iconv_REQUIRED_VARS}
+                                  VERSION_VAR Iconv_VERSION)
+
+if(Iconv_FOUND)
+  if(Iconv_IS_BUILT_IN)
+    set(Iconv_INCLUDE_DIRS "")
+    set(Iconv_LIBRARIES "")
+  else()
+    set(Iconv_INCLUDE_DIRS "${Iconv_INCLUDE_DIR}")
+    set(Iconv_LIBRARIES "${Iconv_LIBRARY}")
+  endif()
+  if(NOT TARGET Iconv::Iconv)
+    add_library(Iconv::Iconv INTERFACE IMPORTED)
+    set_property(TARGET Iconv::Iconv PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${Iconv_INCLUDE_DIRS}")
+    set_property(TARGET Iconv::Iconv PROPERTY INTERFACE_LINK_LIBRARIES "${Iconv_LIBRARIES}")
+  endif()
+endif()
diff --git a/share/cmake-3.18/Modules/FindIcotool.cmake b/share/cmake-3.22/Modules/FindIcotool.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindIcotool.cmake
rename to share/cmake-3.22/Modules/FindIcotool.cmake
diff --git a/share/cmake-3.22/Modules/FindImageMagick.cmake b/share/cmake-3.22/Modules/FindImageMagick.cmake
new file mode 100644
index 0000000..d7de0dd
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindImageMagick.cmake
@@ -0,0 +1,310 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindImageMagick
+---------------
+
+Find ImageMagick binary suite.
+
+.. versionadded:: 3.9
+  Added support for ImageMagick 7.
+
+This module will search for a set of ImageMagick tools specified as
+components in the :command:`find_package` call.  Typical components include,
+but are not limited to (future versions of ImageMagick might have
+additional components not listed here):
+
+::
+
+  animate
+  compare
+  composite
+  conjure
+  convert
+  display
+  identify
+  import
+  mogrify
+  montage
+  stream
+
+
+
+If no component is specified in the :command:`find_package` call, then it only
+searches for the ImageMagick executable directory.  This code defines
+the following variables:
+
+::
+
+  ImageMagick_FOUND                  - TRUE if all components are found.
+  ImageMagick_EXECUTABLE_DIR         - Full path to executables directory.
+  ImageMagick_<component>_FOUND      - TRUE if <component> is found.
+  ImageMagick_<component>_EXECUTABLE - Full path to <component> executable.
+  ImageMagick_VERSION_STRING         - the version of ImageMagick found
+                                       (since CMake 2.8.8)
+
+
+
+``ImageMagick_VERSION_STRING`` will not work for old versions like 5.2.3.
+
+There are also components for the following ImageMagick APIs:
+
+::
+
+  Magick++
+  MagickWand
+  MagickCore
+
+
+
+For these components the following variables are set:
+
+::
+
+  ImageMagick_FOUND                    - TRUE if all components are found.
+  ImageMagick_INCLUDE_DIRS             - Full paths to all include dirs.
+  ImageMagick_LIBRARIES                - Full paths to all libraries.
+  ImageMagick_<component>_FOUND        - TRUE if <component> is found.
+  ImageMagick_<component>_INCLUDE_DIRS - Full path to <component> include dirs.
+  ImageMagick_<component>_LIBRARIES    - Full path to <component> libraries.
+
+
+
+Example Usages:
+
+::
+
+  find_package(ImageMagick)
+  find_package(ImageMagick COMPONENTS convert)
+  find_package(ImageMagick COMPONENTS convert mogrify display)
+  find_package(ImageMagick COMPONENTS Magick++)
+  find_package(ImageMagick COMPONENTS Magick++ convert)
+
+
+
+Note that the standard :command:`find_package` features are supported (i.e.,
+``QUIET``, ``REQUIRED``, etc.).
+#]=======================================================================]
+
+find_package(PkgConfig QUIET)
+
+#---------------------------------------------------------------------
+# Helper functions
+#---------------------------------------------------------------------
+function(FIND_IMAGEMAGICK_API component header)
+  set(ImageMagick_${component}_FOUND FALSE PARENT_SCOPE)
+
+  pkg_check_modules(PC_${component} QUIET ${component})
+
+  find_path(ImageMagick_${component}_INCLUDE_DIR
+    NAMES ${header}
+    HINTS
+      ${PC_${component}_INCLUDEDIR}
+      ${PC_${component}_INCLUDE_DIRS}
+    PATHS
+      ${ImageMagick_INCLUDE_DIRS}
+      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ImageMagick\\Current;BinPath]/include"
+    PATH_SUFFIXES
+      ImageMagick ImageMagick-6 ImageMagick-7
+    DOC "Path to the ImageMagick arch-independent include dir."
+    NO_DEFAULT_PATH
+    )
+  find_path(ImageMagick_${component}_ARCH_INCLUDE_DIR
+    NAMES magick/magick-baseconfig.h
+    HINTS
+      ${PC_${component}_INCLUDEDIR}
+      ${PC_${component}_INCLUDE_DIRS}
+    PATHS
+      ${ImageMagick_INCLUDE_DIRS}
+      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ImageMagick\\Current;BinPath]/include"
+    PATH_SUFFIXES
+      ImageMagick ImageMagick-6 ImageMagick-7
+    DOC "Path to the ImageMagick arch-specific include dir."
+    NO_DEFAULT_PATH
+    )
+  find_library(ImageMagick_${component}_LIBRARY
+    NAMES ${ARGN}
+    HINTS
+      ${PC_${component}_LIBDIR}
+      ${PC_${component}_LIB_DIRS}
+    PATHS
+      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ImageMagick\\Current;BinPath]/lib"
+    DOC "Path to the ImageMagick Magick++ library."
+    NO_DEFAULT_PATH
+    )
+
+  # old version have only indep dir
+  if(ImageMagick_${component}_INCLUDE_DIR AND ImageMagick_${component}_LIBRARY)
+    set(ImageMagick_${component}_FOUND TRUE PARENT_SCOPE)
+
+    # Construct per-component include directories.
+    set(ImageMagick_${component}_INCLUDE_DIRS
+      ${ImageMagick_${component}_INCLUDE_DIR}
+      )
+    if(ImageMagick_${component}_ARCH_INCLUDE_DIR)
+      list(APPEND ImageMagick_${component}_INCLUDE_DIRS
+        ${ImageMagick_${component}_ARCH_INCLUDE_DIR})
+    endif()
+    list(REMOVE_DUPLICATES ImageMagick_${component}_INCLUDE_DIRS)
+    set(ImageMagick_${component}_INCLUDE_DIRS
+      ${ImageMagick_${component}_INCLUDE_DIRS} PARENT_SCOPE)
+
+    # Add the per-component include directories to the full include dirs.
+    list(APPEND ImageMagick_INCLUDE_DIRS ${ImageMagick_${component}_INCLUDE_DIRS})
+    list(REMOVE_DUPLICATES ImageMagick_INCLUDE_DIRS)
+    set(ImageMagick_INCLUDE_DIRS ${ImageMagick_INCLUDE_DIRS} PARENT_SCOPE)
+
+    list(APPEND ImageMagick_LIBRARIES
+      ${ImageMagick_${component}_LIBRARY}
+      )
+    set(ImageMagick_LIBRARIES ${ImageMagick_LIBRARIES} PARENT_SCOPE)
+  endif()
+endfunction()
+
+function(FIND_IMAGEMAGICK_EXE component)
+  set(_IMAGEMAGICK_EXECUTABLE
+    ${ImageMagick_EXECUTABLE_DIR}/${component}${CMAKE_EXECUTABLE_SUFFIX})
+  if(EXISTS ${_IMAGEMAGICK_EXECUTABLE})
+    set(ImageMagick_${component}_EXECUTABLE
+      ${_IMAGEMAGICK_EXECUTABLE}
+       PARENT_SCOPE
+       )
+    set(ImageMagick_${component}_FOUND TRUE PARENT_SCOPE)
+  else()
+    set(ImageMagick_${component}_FOUND FALSE PARENT_SCOPE)
+  endif()
+endfunction()
+
+#---------------------------------------------------------------------
+# Start Actual Work
+#---------------------------------------------------------------------
+# Try to find a ImageMagick installation binary path.
+find_path(ImageMagick_EXECUTABLE_DIR
+  NAMES mogrify${CMAKE_EXECUTABLE_SUFFIX}
+  PATHS
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ImageMagick\\Current;BinPath]"
+  DOC "Path to the ImageMagick binary directory."
+  NO_DEFAULT_PATH
+  )
+find_path(ImageMagick_EXECUTABLE_DIR
+  NAMES mogrify${CMAKE_EXECUTABLE_SUFFIX}
+  )
+
+# Find each component. Search for all tools in same dir
+# <ImageMagick_EXECUTABLE_DIR>; otherwise they should be found
+# independently and not in a cohesive module such as this one.
+unset(ImageMagick_REQUIRED_VARS)
+unset(ImageMagick_DEFAULT_EXECUTABLES)
+foreach(component ${ImageMagick_FIND_COMPONENTS}
+    # DEPRECATED: forced components for backward compatibility
+    convert mogrify import montage composite
+    )
+  if(component STREQUAL "Magick++")
+    FIND_IMAGEMAGICK_API(Magick++ Magick++.h
+      Magick++ CORE_RL_Magick++_
+      Magick++-6 Magick++-7
+      Magick++-Q8 Magick++-Q16 Magick++-Q16HDRI Magick++-Q8HDRI
+      Magick++-6.Q64 Magick++-6.Q32 Magick++-6.Q64HDRI Magick++-6.Q32HDRI
+      Magick++-6.Q16 Magick++-6.Q8 Magick++-6.Q16HDRI Magick++-6.Q8HDRI
+      Magick++-7.Q64 Magick++-7.Q32 Magick++-7.Q64HDRI Magick++-7.Q32HDRI
+      Magick++-7.Q16 Magick++-7.Q8 Magick++-7.Q16HDRI Magick++-7.Q8HDRI
+      )
+    list(APPEND ImageMagick_REQUIRED_VARS ImageMagick_Magick++_LIBRARY)
+  elseif(component STREQUAL "MagickWand")
+    FIND_IMAGEMAGICK_API(MagickWand "wand/MagickWand.h;MagickWand/MagickWand.h"
+      Wand MagickWand CORE_RL_wand_ CORE_RL_MagickWand_
+      MagickWand-6 MagickWand-7
+      MagickWand-Q16 MagickWand-Q8 MagickWand-Q16HDRI MagickWand-Q8HDRI
+      MagickWand-6.Q64 MagickWand-6.Q32 MagickWand-6.Q64HDRI MagickWand-6.Q32HDRI
+      MagickWand-6.Q16 MagickWand-6.Q8 MagickWand-6.Q16HDRI MagickWand-6.Q8HDRI
+      MagickWand-7.Q64 MagickWand-7.Q32 MagickWand-7.Q64HDRI MagickWand-7.Q32HDRI
+      MagickWand-7.Q16 MagickWand-7.Q8 MagickWand-7.Q16HDRI MagickWand-7.Q8HDRI
+      )
+    list(APPEND ImageMagick_REQUIRED_VARS ImageMagick_MagickWand_LIBRARY)
+  elseif(component STREQUAL "MagickCore")
+    FIND_IMAGEMAGICK_API(MagickCore "magick/MagickCore.h;MagickCore/MagickCore.h"
+      Magick MagickCore CORE_RL_magick_ CORE_RL_MagickCore_
+      MagickCore-6 MagickCore-7
+      MagickCore-Q16 MagickCore-Q8 MagickCore-Q16HDRI MagickCore-Q8HDRI
+      MagickCore-6.Q64 MagickCore-6.Q32 MagickCore-6.Q64HDRI MagickCore-6.Q32HDRI
+      MagickCore-6.Q16 MagickCore-6.Q8 MagickCore-6.Q16HDRI MagickCore-6.Q8HDRI
+      MagickCore-7.Q64 MagickCore-7.Q32 MagickCore-7.Q64HDRI MagickCore-7.Q32HDRI
+      MagickCore-7.Q16 MagickCore-7.Q8 MagickCore-7.Q16HDRI MagickCore-7.Q8HDRI
+      )
+    list(APPEND ImageMagick_REQUIRED_VARS ImageMagick_MagickCore_LIBRARY)
+  else()
+    if(ImageMagick_EXECUTABLE_DIR)
+      FIND_IMAGEMAGICK_EXE(${component})
+    endif()
+
+    if(ImageMagick_FIND_COMPONENTS)
+      list(FIND ImageMagick_FIND_COMPONENTS ${component} is_requested)
+      if(is_requested GREATER -1)
+        list(APPEND ImageMagick_REQUIRED_VARS ImageMagick_${component}_EXECUTABLE)
+      endif()
+    elseif(ImageMagick_${component}_EXECUTABLE)
+      # if no components were requested explicitly put all (default) executables
+      # in the list
+      list(APPEND ImageMagick_DEFAULT_EXECUTABLES ImageMagick_${component}_EXECUTABLE)
+    endif()
+  endif()
+endforeach()
+
+if(NOT ImageMagick_FIND_COMPONENTS AND NOT ImageMagick_DEFAULT_EXECUTABLES)
+  # No components were requested, and none of the default components were
+  # found. Just insert mogrify into the list of the default components to
+  # find so FPHSA below has something to check
+  list(APPEND ImageMagick_REQUIRED_VARS ImageMagick_mogrify_EXECUTABLE)
+elseif(ImageMagick_DEFAULT_EXECUTABLES)
+  list(APPEND ImageMagick_REQUIRED_VARS ${ImageMagick_DEFAULT_EXECUTABLES})
+endif()
+
+set(ImageMagick_INCLUDE_DIRS ${ImageMagick_INCLUDE_DIRS})
+set(ImageMagick_LIBRARIES ${ImageMagick_LIBRARIES})
+
+if(ImageMagick_mogrify_EXECUTABLE)
+  execute_process(COMMAND ${ImageMagick_mogrify_EXECUTABLE} -version
+                  OUTPUT_VARIABLE imagemagick_version
+                  ERROR_QUIET
+                  OUTPUT_STRIP_TRAILING_WHITESPACE)
+  if(imagemagick_version MATCHES "^Version: ImageMagick ([-0-9\\.]+)")
+    set(ImageMagick_VERSION_STRING "${CMAKE_MATCH_1}")
+  endif()
+  unset(imagemagick_version)
+endif()
+
+#---------------------------------------------------------------------
+# Standard Package Output
+#---------------------------------------------------------------------
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(ImageMagick
+                                  REQUIRED_VARS ${ImageMagick_REQUIRED_VARS}
+                                  VERSION_VAR ImageMagick_VERSION_STRING
+  )
+# Maintain consistency with all other variables.
+set(ImageMagick_FOUND ${IMAGEMAGICK_FOUND})
+
+#---------------------------------------------------------------------
+# DEPRECATED: Setting variables for backward compatibility.
+#---------------------------------------------------------------------
+set(IMAGEMAGICK_BINARY_PATH          ${ImageMagick_EXECUTABLE_DIR}
+    CACHE PATH "Path to the ImageMagick binary directory.")
+set(IMAGEMAGICK_CONVERT_EXECUTABLE   ${ImageMagick_convert_EXECUTABLE}
+    CACHE FILEPATH "Path to ImageMagick's convert executable.")
+set(IMAGEMAGICK_MOGRIFY_EXECUTABLE   ${ImageMagick_mogrify_EXECUTABLE}
+    CACHE FILEPATH "Path to ImageMagick's mogrify executable.")
+set(IMAGEMAGICK_IMPORT_EXECUTABLE    ${ImageMagick_import_EXECUTABLE}
+    CACHE FILEPATH "Path to ImageMagick's import executable.")
+set(IMAGEMAGICK_MONTAGE_EXECUTABLE   ${ImageMagick_montage_EXECUTABLE}
+    CACHE FILEPATH "Path to ImageMagick's montage executable.")
+set(IMAGEMAGICK_COMPOSITE_EXECUTABLE ${ImageMagick_composite_EXECUTABLE}
+    CACHE FILEPATH "Path to ImageMagick's composite executable.")
+mark_as_advanced(
+  IMAGEMAGICK_BINARY_PATH
+  IMAGEMAGICK_CONVERT_EXECUTABLE
+  IMAGEMAGICK_MOGRIFY_EXECUTABLE
+  IMAGEMAGICK_IMPORT_EXECUTABLE
+  IMAGEMAGICK_MONTAGE_EXECUTABLE
+  IMAGEMAGICK_COMPOSITE_EXECUTABLE
+  )
diff --git a/share/cmake-3.22/Modules/FindIntl.cmake b/share/cmake-3.22/Modules/FindIntl.cmake
new file mode 100644
index 0000000..95eeabd
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindIntl.cmake
@@ -0,0 +1,183 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindIntl
+--------
+
+.. versionadded:: 3.2
+
+Find the Gettext libintl headers and libraries.
+
+This module reports information about the Gettext libintl
+installation in several variables.
+
+.. variable:: Intl_FOUND
+
+  True if libintl is found.
+
+.. variable:: Intl_INCLUDE_DIRS
+
+  The directory containing the libintl headers.
+
+.. variable:: Intl_LIBRARIES
+
+  The intl libraries to be linked.
+
+.. variable:: Intl_VERSION
+
+  .. versionadded:: 3.21
+
+  The version of intl found (x.y.z)
+
+.. variable:: Intl_VERSION_MAJOR
+
+  .. versionadded:: 3.21
+
+  The major version of intl
+
+.. variable:: Intl_VERSION_MINOR
+
+  .. versionadded:: 3.21
+
+  The minor version of intl
+
+.. variable:: Intl_VERSION_PATCH
+
+  .. versionadded:: 3.21
+
+  The patch version of intl
+
+.. versionadded:: 3.20
+  This module defines :prop_tgt:`IMPORTED` target ``Intl::Intl``.
+
+The following cache variables may also be set:
+
+.. variable:: Intl_INCLUDE_DIR
+
+  The directory containing the libintl headers
+
+.. variable:: Intl_LIBRARY
+
+  The libintl library (if any)
+
+.. variable:: Intl_IS_BUILT_IN
+
+  .. versionadded:: 3.20
+
+  whether ``intl`` is a part of the C library.
+
+.. note::
+  On some platforms, such as Linux with GNU libc, the gettext
+  functions are present in the C standard library and libintl
+  is not required.  ``Intl_LIBRARIES`` will be empty in this
+  case.
+
+.. note::
+  Some libintl implementations don't embed the version number in their header files.
+  In this case the variables ``Intl_VERSION*`` will be empty.
+
+.. note::
+  If you wish to use the Gettext tools (``msgmerge``,
+  ``msgfmt``, etc.), use :module:`FindGettext`.
+#]=======================================================================]
+
+include(${CMAKE_CURRENT_LIST_DIR}/CMakePushCheckState.cmake)
+if(CMAKE_C_COMPILER_LOADED)
+  include(${CMAKE_CURRENT_LIST_DIR}/CheckCSourceCompiles.cmake)
+elseif(CMAKE_CXX_COMPILER_LOADED)
+  include(${CMAKE_CURRENT_LIST_DIR}/CheckCXXSourceCompiles.cmake)
+else()
+  # If neither C nor CXX are loaded, implicit intl makes no sense.
+  set(Intl_IS_BUILT_IN FALSE)
+endif()
+
+# Check if Intl is built in to the C library.
+if(NOT DEFINED Intl_IS_BUILT_IN)
+  if(NOT DEFINED Intl_INCLUDE_DIR AND NOT DEFINED Intl_LIBRARY)
+    cmake_push_check_state(RESET)
+    set(CMAKE_REQUIRED_QUIET TRUE)
+    set(Intl_IMPLICIT_TEST_CODE [[
+#include <libintl.h>
+int main(void) {
+  gettext("");
+  dgettext("", "");
+  dcgettext("", "", 0);
+  return 0;
+}
+]])
+    if(CMAKE_C_COMPILER_LOADED)
+      check_c_source_compiles("${Intl_IMPLICIT_TEST_CODE}" Intl_IS_BUILT_IN)
+    else()
+      check_cxx_source_compiles("${Intl_IMPLICIT_TEST_CODE}" Intl_IS_BUILT_IN)
+    endif()
+    cmake_pop_check_state()
+  else()
+    set(Intl_IS_BUILT_IN FALSE)
+  endif()
+endif()
+
+set(_Intl_REQUIRED_VARS)
+if(Intl_IS_BUILT_IN)
+  set(_Intl_REQUIRED_VARS _Intl_IS_BUILT_IN_MSG)
+  set(_Intl_IS_BUILT_IN_MSG "built in to C library")
+else()
+  set(_Intl_REQUIRED_VARS Intl_LIBRARY Intl_INCLUDE_DIR)
+
+  find_path(Intl_INCLUDE_DIR
+            NAMES "libintl.h"
+            DOC "libintl include directory")
+  mark_as_advanced(Intl_INCLUDE_DIR)
+
+  find_library(Intl_LIBRARY
+    NAMES "intl" "libintl"
+    NAMES_PER_DIR
+    DOC "libintl libraries (if not in the C library)")
+  mark_as_advanced(Intl_LIBRARY)
+endif()
+
+# NOTE: glibc's libintl.h does not define LIBINTL_VERSION
+if(Intl_INCLUDE_DIR AND EXISTS "${Intl_INCLUDE_DIR}/libintl.h")
+  file(STRINGS ${Intl_INCLUDE_DIR}/libintl.h Intl_VERSION_DEFINE REGEX "LIBINTL_VERSION (.*)")
+
+  if(Intl_VERSION_DEFINE MATCHES "(0x[A-Fa-f0-9]+)")
+    set(Intl_VERSION_NUMBER "${CMAKE_MATCH_1}")
+    # encoding -> version number: (major<<16) + (minor<<8) + patch
+    math(EXPR Intl_VERSION_MAJOR "${Intl_VERSION_NUMBER} >> 16" OUTPUT_FORMAT HEXADECIMAL)
+    math(EXPR Intl_VERSION_MINOR "(${Intl_VERSION_NUMBER} - (${Intl_VERSION_MAJOR} << 16)) >> 8" OUTPUT_FORMAT HEXADECIMAL)
+    math(EXPR Intl_VERSION_PATCH "${Intl_VERSION_NUMBER} - ((${Intl_VERSION_MAJOR} << 16) + (${Intl_VERSION_MINOR} << 8))" OUTPUT_FORMAT HEXADECIMAL)
+
+    math(EXPR Intl_VERSION_MAJOR "${Intl_VERSION_MAJOR}" OUTPUT_FORMAT DECIMAL)
+    math(EXPR Intl_VERSION_MINOR "${Intl_VERSION_MINOR}" OUTPUT_FORMAT DECIMAL)
+    math(EXPR Intl_VERSION_PATCH "${Intl_VERSION_PATCH}" OUTPUT_FORMAT DECIMAL)
+    set(Intl_VERSION "${Intl_VERSION_MAJOR}.${Intl_VERSION_MINOR}.${Intl_VERSION_PATCH}")
+  endif()
+
+  unset(Intl_VERSION_DEFINE)
+  unset(Intl_VERSION_NUMBER)
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(Intl
+                                  FOUND_VAR Intl_FOUND
+                                  REQUIRED_VARS ${_Intl_REQUIRED_VARS}
+                                  VERSION_VAR Intl_VERSION
+                                  FAIL_MESSAGE "Failed to find Gettext libintl")
+unset(_Intl_REQUIRED_VARS)
+unset(_Intl_IS_BUILT_IN_MSG)
+
+if(Intl_FOUND)
+  if(Intl_IS_BUILT_IN)
+    set(Intl_INCLUDE_DIRS "")
+    set(Intl_LIBRARIES "")
+  else()
+    set(Intl_INCLUDE_DIRS "${Intl_INCLUDE_DIR}")
+    set(Intl_LIBRARIES "${Intl_LIBRARY}")
+  endif()
+  if(NOT TARGET Intl::Intl)
+    add_library(Intl::Intl INTERFACE IMPORTED)
+    set_target_properties(Intl::Intl PROPERTIES
+      INTERFACE_INCLUDE_DIRECTORIES "${Intl_INCLUDE_DIRS}"
+      INTERFACE_LINK_LIBRARIES "${Intl_LIBRARIES}")
+  endif()
+endif()
diff --git a/share/cmake-3.22/Modules/FindJNI.cmake b/share/cmake-3.22/Modules/FindJNI.cmake
new file mode 100644
index 0000000..e4f60b3
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindJNI.cmake
@@ -0,0 +1,405 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindJNI
+-------
+
+Find Java Native Interface (JNI) libraries.
+
+JNI enables Java code running in a Java Virtual Machine (JVM) to call
+and be called by native applications and libraries written in other
+languages such as C, C++.
+
+This module finds if Java is installed and determines where the
+include files and libraries are.  It also determines what the name of
+the library is.  The caller may set variable ``JAVA_HOME`` to specify a
+Java installation prefix explicitly.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This module sets the following result variables:
+
+``JNI_INCLUDE_DIRS``
+  the include dirs to use
+``JNI_LIBRARIES``
+  the libraries to use (JAWT and JVM)
+``JNI_FOUND``
+  TRUE if JNI headers and libraries were found.
+
+Cache Variables
+^^^^^^^^^^^^^^^
+
+The following cache variables are also available to set or use:
+
+``JAVA_AWT_LIBRARY``
+  the path to the Java AWT Native Interface (JAWT) library
+``JAVA_JVM_LIBRARY``
+  the path to the Java Virtual Machine (JVM) library
+``JAVA_INCLUDE_PATH``
+  the include path to jni.h
+``JAVA_INCLUDE_PATH2``
+  the include path to jni_md.h and jniport.h
+``JAVA_AWT_INCLUDE_PATH``
+  the include path to jawt.h
+#]=======================================================================]
+
+# Expand {libarch} occurrences to java_libarch subdirectory(-ies) and set ${_var}
+macro(java_append_library_directories _var)
+    # Determine java arch-specific library subdir
+    # Mostly based on openjdk/jdk/make/common/shared/Platform.gmk as of openjdk
+    # 1.6.0_18 + icedtea patches. However, it would be much better to base the
+    # guess on the first part of the GNU config.guess platform triplet.
+    if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
+      if(CMAKE_LIBRARY_ARCHITECTURE STREQUAL "x86_64-linux-gnux32")
+        set(_java_libarch "x32" "amd64" "i386")
+      else()
+        set(_java_libarch "amd64" "i386")
+      endif()
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^i.86$")
+        set(_java_libarch "i386")
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^aarch64")
+        set(_java_libarch "arm64" "aarch64")
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^alpha")
+        set(_java_libarch "alpha")
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")
+        # Subdir is "arm" for both big-endian (arm) and little-endian (armel).
+        set(_java_libarch "arm" "aarch32")
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^mips")
+        # mips* machines are bi-endian mostly so processor does not tell
+        # endianness of the underlying system.
+        set(_java_libarch "${CMAKE_SYSTEM_PROCESSOR}"
+            "mips" "mipsel" "mipseb" "mipsr6" "mipsr6el"
+            "mips64" "mips64el" "mips64r6" "mips64r6el"
+            "mipsn32" "mipsn32el" "mipsn32r6" "mipsn32r6el")
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64le")
+        set(_java_libarch "ppc64" "ppc64le")
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64")
+        set(_java_libarch "ppc64" "ppc")
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)")
+        set(_java_libarch "ppc" "ppc64")
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^sparc")
+        # Both flavors can run on the same processor
+        set(_java_libarch "${CMAKE_SYSTEM_PROCESSOR}" "sparc" "sparcv9")
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(parisc|hppa)")
+        set(_java_libarch "parisc" "parisc64")
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^s390")
+        # s390 binaries can run on s390x machines
+        set(_java_libarch "${CMAKE_SYSTEM_PROCESSOR}" "s390" "s390x")
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^sh")
+        set(_java_libarch "sh")
+    else()
+        set(_java_libarch "${CMAKE_SYSTEM_PROCESSOR}")
+    endif()
+
+    # Append default list architectures if CMAKE_SYSTEM_PROCESSOR was empty or
+    # system is non-Linux (where the code above has not been well tested)
+    if(NOT _java_libarch OR NOT (CMAKE_SYSTEM_NAME MATCHES "Linux"))
+        list(APPEND _java_libarch "i386" "amd64" "ppc")
+    endif()
+
+    # Sometimes ${CMAKE_SYSTEM_PROCESSOR} is added to the list to prefer
+    # current value to a hardcoded list. Remove possible duplicates.
+    list(REMOVE_DUPLICATES _java_libarch)
+
+    foreach(_path ${ARGN})
+        if(_path MATCHES "{libarch}")
+            foreach(_libarch ${_java_libarch})
+                string(REPLACE "{libarch}" "${_libarch}" _newpath "${_path}")
+                if(EXISTS ${_newpath})
+                    list(APPEND ${_var} "${_newpath}")
+                endif()
+            endforeach()
+        else()
+            if(EXISTS ${_path})
+                list(APPEND ${_var} "${_path}")
+            endif()
+        endif()
+    endforeach()
+endmacro()
+
+include(${CMAKE_CURRENT_LIST_DIR}/CMakeFindJavaCommon.cmake)
+
+# Save CMAKE_FIND_FRAMEWORK
+if(DEFINED CMAKE_FIND_FRAMEWORK)
+  set(_JNI_CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK})
+else()
+  unset(_JNI_CMAKE_FIND_FRAMEWORK)
+endif()
+
+if(_JAVA_HOME_EXPLICIT)
+  set(CMAKE_FIND_FRAMEWORK NEVER)
+endif()
+
+set(JAVA_AWT_LIBRARY_DIRECTORIES)
+if(_JAVA_HOME)
+  JAVA_APPEND_LIBRARY_DIRECTORIES(JAVA_AWT_LIBRARY_DIRECTORIES
+    ${_JAVA_HOME}/jre/lib/{libarch}
+    ${_JAVA_HOME}/jre/lib
+    ${_JAVA_HOME}/lib/{libarch}
+    ${_JAVA_HOME}/lib
+    ${_JAVA_HOME}
+    )
+endif()
+
+if (WIN32)
+  set (_JNI_HINTS)
+  execute_process(COMMAND REG QUERY HKLM\\SOFTWARE\\JavaSoft\\JDK
+    RESULT_VARIABLE _JNI_RESULT
+    OUTPUT_VARIABLE _JNI_VERSIONS
+    ERROR_QUIET)
+  if (NOT  _JNI_RESULT)
+    string (REGEX MATCHALL "HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\JavaSoft\\\\JDK\\\\[0-9.]+" _JNI_VERSIONS "${_JNI_VERSIONS}")
+    if (_JNI_VERSIONS)
+      # sort versions. Most recent first
+      ## handle version 9 apart from other versions to get correct ordering
+      set (_JNI_V9 ${_JNI_VERSIONS})
+      list (FILTER _JNI_VERSIONS EXCLUDE REGEX "JDK\\\\9")
+      list (SORT _JNI_VERSIONS)
+      list (REVERSE _JNI_VERSIONS)
+      list (FILTER _JNI_V9 INCLUDE REGEX "JDK\\\\9")
+      list (SORT _JNI_V9)
+      list (REVERSE _JNI_V9)
+      list (APPEND _JNI_VERSIONS ${_JNI_V9})
+      foreach (_JNI_HINT IN LISTS _JNI_VERSIONS)
+        list(APPEND _JNI_HINTS "[${_JNI_HINT};JavaHome]")
+      endforeach()
+    endif()
+  endif()
+
+  foreach (_JNI_HINT IN LISTS _JNI_HINTS)
+    list(APPEND JAVA_AWT_LIBRARY_DIRECTORIES "${_JNI_HINT}/lib")
+  endforeach()
+
+  get_filename_component(java_install_version
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit;CurrentVersion]" NAME)
+
+  list(APPEND JAVA_AWT_LIBRARY_DIRECTORIES
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.9;JavaHome]/lib"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.8;JavaHome]/lib"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.7;JavaHome]/lib"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.6;JavaHome]/lib"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.5;JavaHome]/lib"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.4;JavaHome]/lib"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.3;JavaHome]/lib"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\${java_install_version};JavaHome]/lib"
+    )
+endif()
+
+set(_JNI_JAVA_DIRECTORIES_BASE
+  /usr/lib/jvm/java
+  /usr/lib/java
+  /usr/lib/jvm
+  /usr/local/lib/java
+  /usr/local/share/java
+  /usr/lib/j2sdk1.4-sun
+  /usr/lib/j2sdk1.5-sun
+  /opt/sun-jdk-1.5.0.04
+  /usr/lib/jvm/java-6-sun
+  /usr/lib/jvm/java-1.5.0-sun
+  /usr/lib/jvm/java-6-sun-1.6.0.00       # can this one be removed according to #8821 ? Alex
+  /usr/lib/jvm/java-6-openjdk
+  /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0        # fedora
+  # Debian specific paths for default JVM
+  /usr/lib/jvm/default-java
+  # Arch Linux specific paths for default JVM
+  /usr/lib/jvm/default
+  # Ubuntu specific paths for default JVM
+  /usr/lib/jvm/java-11-openjdk-{libarch}    # Ubuntu 18.04 LTS
+  /usr/lib/jvm/java-8-openjdk-{libarch}     # Ubuntu 15.10
+  /usr/lib/jvm/java-7-openjdk-{libarch}     # Ubuntu 15.10
+  /usr/lib/jvm/java-6-openjdk-{libarch}     # Ubuntu 15.10
+  # OpenBSD specific paths for default JVM
+  /usr/local/jdk-1.7.0
+  /usr/local/jre-1.7.0
+  /usr/local/jdk-1.6.0
+  /usr/local/jre-1.6.0
+  # FreeBSD specific paths for default JVM
+  /usr/local/openjdk15
+  /usr/local/openjdk14
+  /usr/local/openjdk13
+  /usr/local/openjdk12
+  /usr/local/openjdk11
+  /usr/local/openjdk8
+  /usr/local/openjdk7
+  # SuSE specific paths for default JVM
+  /usr/lib64/jvm/java
+  /usr/lib64/jvm/jre
+  )
+
+set(_JNI_JAVA_AWT_LIBRARY_TRIES)
+set(_JNI_JAVA_INCLUDE_TRIES)
+
+foreach(_java_dir IN LISTS _JNI_JAVA_DIRECTORIES_BASE)
+  list(APPEND _JNI_JAVA_AWT_LIBRARY_TRIES
+    ${_java_dir}/jre/lib/{libarch}
+    ${_java_dir}/jre/lib
+    ${_java_dir}/lib/{libarch}
+    ${_java_dir}/lib
+    ${_java_dir}
+  )
+  list(APPEND _JNI_JAVA_INCLUDE_TRIES
+    ${_java_dir}/include
+  )
+endforeach()
+
+JAVA_APPEND_LIBRARY_DIRECTORIES(JAVA_AWT_LIBRARY_DIRECTORIES
+    ${_JNI_JAVA_AWT_LIBRARY_TRIES}
+  )
+
+set(JAVA_JVM_LIBRARY_DIRECTORIES)
+foreach(dir ${JAVA_AWT_LIBRARY_DIRECTORIES})
+  list(APPEND JAVA_JVM_LIBRARY_DIRECTORIES
+    "${dir}"
+    "${dir}/client"
+    "${dir}/server"
+    # IBM SDK, Java Technology Edition, specific paths
+    "${dir}/j9vm"
+    "${dir}/default"
+    )
+endforeach()
+
+set(JAVA_AWT_INCLUDE_DIRECTORIES)
+if(_JAVA_HOME)
+  list(APPEND JAVA_AWT_INCLUDE_DIRECTORIES ${_JAVA_HOME}/include)
+endif()
+if (WIN32)
+  foreach (_JNI_HINT IN LISTS _JNI_HINTS)
+    list(APPEND JAVA_AWT_INCLUDE_DIRECTORIES "${_JNI_HINT}/include")
+  endforeach()
+  list(APPEND JAVA_AWT_INCLUDE_DIRECTORIES
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.9;JavaHome]/include"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.8;JavaHome]/include"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.7;JavaHome]/include"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.6;JavaHome]/include"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.5;JavaHome]/include"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.4;JavaHome]/include"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.3;JavaHome]/include"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\${java_install_version};JavaHome]/include"
+    )
+endif()
+
+JAVA_APPEND_LIBRARY_DIRECTORIES(JAVA_AWT_INCLUDE_DIRECTORIES
+  ${_JNI_JAVA_INCLUDE_TRIES}
+  )
+
+foreach(JAVA_PROG "${JAVA_RUNTIME}" "${JAVA_COMPILE}" "${JAVA_ARCHIVE}")
+  get_filename_component(jpath "${JAVA_PROG}" PATH)
+  foreach(JAVA_INC_PATH ../include ../java/include ../share/java/include)
+    if(EXISTS ${jpath}/${JAVA_INC_PATH})
+      list(APPEND JAVA_AWT_INCLUDE_DIRECTORIES "${jpath}/${JAVA_INC_PATH}")
+    endif()
+  endforeach()
+  foreach(JAVA_LIB_PATH
+    ../lib ../jre/lib ../jre/lib/i386
+    ../java/lib ../java/jre/lib ../java/jre/lib/i386
+    ../share/java/lib ../share/java/jre/lib ../share/java/jre/lib/i386)
+    if(EXISTS ${jpath}/${JAVA_LIB_PATH})
+      list(APPEND JAVA_AWT_LIBRARY_DIRECTORIES "${jpath}/${JAVA_LIB_PATH}")
+    endif()
+  endforeach()
+endforeach()
+
+if(APPLE)
+  if(CMAKE_FIND_FRAMEWORK STREQUAL "ONLY")
+    set(_JNI_SEARCHES FRAMEWORK)
+  elseif(CMAKE_FIND_FRAMEWORK STREQUAL "NEVER")
+    set(_JNI_SEARCHES NORMAL)
+  elseif(CMAKE_FIND_FRAMEWORK STREQUAL "LAST")
+    set(_JNI_SEARCHES NORMAL FRAMEWORK)
+  else()
+    set(_JNI_SEARCHES FRAMEWORK NORMAL)
+  endif()
+  set(_JNI_FRAMEWORK_JVM NAMES JavaVM)
+  set(_JNI_FRAMEWORK_JAWT "${_JNI_FRAMEWORK_JVM}")
+else()
+  set(_JNI_SEARCHES NORMAL)
+endif()
+
+set(_JNI_NORMAL_JVM
+  NAMES jvm
+  PATHS ${JAVA_JVM_LIBRARY_DIRECTORIES}
+  )
+
+set(_JNI_NORMAL_JAWT
+  NAMES jawt
+  PATHS ${JAVA_AWT_LIBRARY_DIRECTORIES}
+  )
+
+foreach(search ${_JNI_SEARCHES})
+  find_library(JAVA_JVM_LIBRARY ${_JNI_${search}_JVM})
+  find_library(JAVA_AWT_LIBRARY ${_JNI_${search}_JAWT})
+  if(JAVA_JVM_LIBRARY)
+    break()
+  endif()
+endforeach()
+unset(_JNI_SEARCHES)
+unset(_JNI_FRAMEWORK_JVM)
+unset(_JNI_FRAMEWORK_JAWT)
+unset(_JNI_NORMAL_JVM)
+unset(_JNI_NORMAL_JAWT)
+
+# Find headers matching the library.
+if("${JAVA_JVM_LIBRARY};${JAVA_AWT_LIBRARY};" MATCHES "(/JavaVM.framework|-framework JavaVM);")
+  set(CMAKE_FIND_FRAMEWORK ONLY)
+else()
+  set(CMAKE_FIND_FRAMEWORK NEVER)
+endif()
+
+# add in the include path
+find_path(JAVA_INCLUDE_PATH jni.h
+  ${JAVA_AWT_INCLUDE_DIRECTORIES}
+)
+
+find_path(JAVA_INCLUDE_PATH2 NAMES jni_md.h jniport.h
+  PATHS
+  ${JAVA_INCLUDE_PATH}
+  ${JAVA_INCLUDE_PATH}/darwin
+  ${JAVA_INCLUDE_PATH}/win32
+  ${JAVA_INCLUDE_PATH}/linux
+  ${JAVA_INCLUDE_PATH}/freebsd
+  ${JAVA_INCLUDE_PATH}/openbsd
+  ${JAVA_INCLUDE_PATH}/solaris
+  ${JAVA_INCLUDE_PATH}/hp-ux
+  ${JAVA_INCLUDE_PATH}/alpha
+  ${JAVA_INCLUDE_PATH}/aix
+)
+
+find_path(JAVA_AWT_INCLUDE_PATH jawt.h
+  ${JAVA_INCLUDE_PATH}
+)
+
+# Restore CMAKE_FIND_FRAMEWORK
+if(DEFINED _JNI_CMAKE_FIND_FRAMEWORK)
+  set(CMAKE_FIND_FRAMEWORK ${_JNI_CMAKE_FIND_FRAMEWORK})
+  unset(_JNI_CMAKE_FIND_FRAMEWORK)
+else()
+  unset(CMAKE_FIND_FRAMEWORK)
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(JNI  DEFAULT_MSG  JAVA_AWT_LIBRARY
+                                                    JAVA_JVM_LIBRARY
+                                                    JAVA_INCLUDE_PATH
+                                                    JAVA_INCLUDE_PATH2
+                                                    JAVA_AWT_INCLUDE_PATH)
+
+mark_as_advanced(
+  JAVA_AWT_LIBRARY
+  JAVA_JVM_LIBRARY
+  JAVA_AWT_INCLUDE_PATH
+  JAVA_INCLUDE_PATH
+  JAVA_INCLUDE_PATH2
+)
+
+set(JNI_LIBRARIES
+  ${JAVA_AWT_LIBRARY}
+  ${JAVA_JVM_LIBRARY}
+)
+
+set(JNI_INCLUDE_DIRS
+  ${JAVA_INCLUDE_PATH}
+  ${JAVA_INCLUDE_PATH2}
+  ${JAVA_AWT_INCLUDE_PATH}
+)
diff --git a/share/cmake-3.22/Modules/FindJPEG.cmake b/share/cmake-3.22/Modules/FindJPEG.cmake
new file mode 100644
index 0000000..3f243de
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindJPEG.cmake
@@ -0,0 +1,142 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindJPEG
+--------
+
+Find the Joint Photographic Experts Group (JPEG) library (``libjpeg``)
+
+Imported targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.12
+
+This module defines the following :prop_tgt:`IMPORTED` targets:
+
+``JPEG::JPEG``
+  The JPEG library, if found.
+
+Result variables
+^^^^^^^^^^^^^^^^
+
+This module will set the following variables in your project:
+
+``JPEG_FOUND``
+  If false, do not try to use JPEG.
+``JPEG_INCLUDE_DIRS``
+  where to find jpeglib.h, etc.
+``JPEG_LIBRARIES``
+  the libraries needed to use JPEG.
+``JPEG_VERSION``
+  .. versionadded:: 3.12
+    the version of the JPEG library found
+
+Cache variables
+^^^^^^^^^^^^^^^
+
+The following cache variables may also be set:
+
+``JPEG_INCLUDE_DIRS``
+  where to find jpeglib.h, etc.
+``JPEG_LIBRARY_RELEASE``
+  where to find the JPEG library (optimized).
+``JPEG_LIBRARY_DEBUG``
+  where to find the JPEG library (debug).
+
+.. versionadded:: 3.12
+  Debug and Release variand are found separately.
+
+Obsolete variables
+^^^^^^^^^^^^^^^^^^
+
+``JPEG_INCLUDE_DIR``
+  where to find jpeglib.h, etc. (same as JPEG_INCLUDE_DIRS)
+``JPEG_LIBRARY``
+  where to find the JPEG library.
+#]=======================================================================]
+
+find_path(JPEG_INCLUDE_DIR jpeglib.h)
+
+set(jpeg_names ${JPEG_NAMES} jpeg jpeg-static libjpeg libjpeg-static)
+foreach(name ${jpeg_names})
+  list(APPEND jpeg_names_debug "${name}d")
+endforeach()
+
+if(NOT JPEG_LIBRARY)
+  find_library(JPEG_LIBRARY_RELEASE NAMES ${jpeg_names} NAMES_PER_DIR)
+  find_library(JPEG_LIBRARY_DEBUG NAMES ${jpeg_names_debug} NAMES_PER_DIR)
+  include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
+  select_library_configurations(JPEG)
+  mark_as_advanced(JPEG_LIBRARY_RELEASE JPEG_LIBRARY_DEBUG)
+endif()
+unset(jpeg_names)
+unset(jpeg_names_debug)
+
+if(JPEG_INCLUDE_DIR)
+  file(GLOB _JPEG_CONFIG_HEADERS_FEDORA "${JPEG_INCLUDE_DIR}/jconfig*.h")
+  file(GLOB _JPEG_CONFIG_HEADERS_DEBIAN "${JPEG_INCLUDE_DIR}/*/jconfig.h")
+  set(_JPEG_CONFIG_HEADERS
+    "${JPEG_INCLUDE_DIR}/jpeglib.h"
+    ${_JPEG_CONFIG_HEADERS_FEDORA}
+    ${_JPEG_CONFIG_HEADERS_DEBIAN})
+  foreach (_JPEG_CONFIG_HEADER IN LISTS _JPEG_CONFIG_HEADERS)
+    if (NOT EXISTS "${_JPEG_CONFIG_HEADER}")
+      continue ()
+    endif ()
+    file(STRINGS "${_JPEG_CONFIG_HEADER}"
+      jpeg_lib_version REGEX "^#define[\t ]+JPEG_LIB_VERSION[\t ]+.*")
+
+    if (NOT jpeg_lib_version)
+      continue ()
+    endif ()
+
+    string(REGEX REPLACE "^#define[\t ]+JPEG_LIB_VERSION[\t ]+([0-9]+).*"
+      "\\1" JPEG_VERSION "${jpeg_lib_version}")
+    break ()
+  endforeach ()
+  unset(jpeg_lib_version)
+  unset(_JPEG_CONFIG_HEADER)
+  unset(_JPEG_CONFIG_HEADERS)
+  unset(_JPEG_CONFIG_HEADERS_FEDORA)
+  unset(_JPEG_CONFIG_HEADERS_DEBIAN)
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+find_package_handle_standard_args(JPEG
+  REQUIRED_VARS JPEG_LIBRARY JPEG_INCLUDE_DIR
+  VERSION_VAR JPEG_VERSION)
+
+if(JPEG_FOUND)
+  set(JPEG_LIBRARIES ${JPEG_LIBRARY})
+  set(JPEG_INCLUDE_DIRS "${JPEG_INCLUDE_DIR}")
+
+  if(NOT TARGET JPEG::JPEG)
+    add_library(JPEG::JPEG UNKNOWN IMPORTED)
+    if(JPEG_INCLUDE_DIRS)
+      set_target_properties(JPEG::JPEG PROPERTIES
+        INTERFACE_INCLUDE_DIRECTORIES "${JPEG_INCLUDE_DIRS}")
+    endif()
+    if(EXISTS "${JPEG_LIBRARY}")
+      set_target_properties(JPEG::JPEG PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+        IMPORTED_LOCATION "${JPEG_LIBRARY}")
+    endif()
+    if(EXISTS "${JPEG_LIBRARY_RELEASE}")
+      set_property(TARGET JPEG::JPEG APPEND PROPERTY
+        IMPORTED_CONFIGURATIONS RELEASE)
+      set_target_properties(JPEG::JPEG PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
+        IMPORTED_LOCATION_RELEASE "${JPEG_LIBRARY_RELEASE}")
+    endif()
+    if(EXISTS "${JPEG_LIBRARY_DEBUG}")
+      set_property(TARGET JPEG::JPEG APPEND PROPERTY
+        IMPORTED_CONFIGURATIONS DEBUG)
+      set_target_properties(JPEG::JPEG PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
+        IMPORTED_LOCATION_DEBUG "${JPEG_LIBRARY_DEBUG}")
+    endif()
+  endif()
+endif()
+
+mark_as_advanced(JPEG_LIBRARY JPEG_INCLUDE_DIR)
diff --git a/share/cmake-3.22/Modules/FindJasper.cmake b/share/cmake-3.22/Modules/FindJasper.cmake
new file mode 100644
index 0000000..9a62669
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindJasper.cmake
@@ -0,0 +1,90 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindJasper
+----------
+
+Find the Jasper JPEG2000 library.
+
+IMPORTED Targets
+^^^^^^^^^^^^^^^^
+
+``Jasper::Jasper``
+  The jasper library, if found.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This module defines the following variables:
+
+``JASPER_FOUND``
+  system has Jasper
+``JASPER_INCLUDE_DIRS``
+  .. versionadded:: 3.22
+
+  the Jasper include directory
+``JASPER_LIBRARIES``
+  the libraries needed to use Jasper
+``JASPER_VERSION_STRING``
+  the version of Jasper found
+
+Cache variables
+^^^^^^^^^^^^^^^
+
+The following cache variables may also be set:
+
+``JASPER_INCLUDE_DIR``
+  where to find jasper/jasper.h, etc.
+``JASPER_LIBRARY_RELEASE``
+  where to find the Jasper library (optimized).
+``JASPER_LIBARRY_DEBUG``
+  where to find the Jasper library (debug).
+#]=======================================================================]
+
+find_path(JASPER_INCLUDE_DIR jasper/jasper.h)
+mark_as_advanced(JASPER_INCLUDE_DIR)
+
+if(NOT JASPER_LIBRARIES)
+  find_package(JPEG)
+  find_library(JASPER_LIBRARY_RELEASE NAMES jasper libjasper)
+  find_library(JASPER_LIBRARY_DEBUG NAMES jasperd)
+  include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
+  select_library_configurations(JASPER)
+endif()
+
+if(JASPER_INCLUDE_DIR AND EXISTS "${JASPER_INCLUDE_DIR}/jasper/jas_config.h")
+  file(STRINGS "${JASPER_INCLUDE_DIR}/jasper/jas_config.h" jasper_version_str REGEX "^#define[\t ]+JAS_VERSION[\t ]+\".*\".*")
+  string(REGEX REPLACE "^#define[\t ]+JAS_VERSION[\t ]+\"([^\"]+)\".*" "\\1" JASPER_VERSION_STRING "${jasper_version_str}")
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+find_package_handle_standard_args(Jasper
+                                  REQUIRED_VARS JASPER_LIBRARIES JASPER_INCLUDE_DIR JPEG_LIBRARIES
+                                  VERSION_VAR JASPER_VERSION_STRING)
+
+if(JASPER_FOUND)
+  set(JASPER_LIBRARIES ${JASPER_LIBRARIES} ${JPEG_LIBRARIES})
+  set(JASPER_INCLUDE_DIRS ${JASPER_INCLUDE_DIR})
+  if(NOT TARGET Jasper::Jasper)
+    add_library(Jasper::Jasper UNKNOWN IMPORTED)
+    if(JASPER_INCLUDE_DIRS)
+      set_target_properties(Jasper::Jasper PROPERTIES
+        INTERFACE_INCLUDE_DIRECTORIES "${JASPER_INCLUDE_DIRS}")
+    endif()
+    if(EXISTS "${JASPER_LIBRARY_RELEASE}")
+      set_property(TARGET Jasper::Jasper APPEND PROPERTY
+        IMPORTED CONFIGURATION RELEASE)
+      set_target_properties(Jasper::Jasper PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
+        IMPORTED_LOCATION "${JASPER_LIBRARY_RELEASE}")
+    endif()
+    if(EXISTS "${JASPER_LIBRARY_DEBUG}")
+      set_property(TARGET Jasper::Jasper APPEND PROPERTY
+        IMPORTED CONFIGURATION DEBUG)
+      set_target_properties(Jasper::Jasper PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
+        IMPORTED_LOCATION "${JASPER_LIBRARY_DEBUG}")
+    endif()
+  endif()
+endif()
diff --git a/share/cmake-3.22/Modules/FindJava.cmake b/share/cmake-3.22/Modules/FindJava.cmake
new file mode 100644
index 0000000..4f0e0fe
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindJava.cmake
@@ -0,0 +1,364 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindJava
+--------
+
+Find Java
+
+This module finds if Java is installed and determines where the
+include files and libraries are.  The caller may set variable ``JAVA_HOME``
+to specify a Java installation prefix explicitly.
+
+See also the :module:`FindJNI` module to find Java Native Interface (JNI).
+
+.. versionadded:: 3.10
+  Added support for Java 9+ version parsing.
+
+Specify one or more of the following components as you call this find module. See example below.
+
+::
+
+  Runtime     = Java Runtime Environment used to execute Java byte-compiled applications
+  Development = Development tools (java, javac, javah, jar and javadoc), includes Runtime component
+  IdlJ        = Interface Description Language (IDL) to Java compiler
+  JarSigner   = Signer and verifier tool for Java Archive (JAR) files
+
+
+This module sets the following result variables:
+
+::
+
+  Java_JAVA_EXECUTABLE      = the full path to the Java runtime
+  Java_JAVAC_EXECUTABLE     = the full path to the Java compiler
+  Java_JAVAH_EXECUTABLE     = the full path to the Java header generator
+  Java_JAVADOC_EXECUTABLE   = the full path to the Java documentation generator
+  Java_IDLJ_EXECUTABLE      = the full path to the Java idl compiler
+  Java_JAR_EXECUTABLE       = the full path to the Java archiver
+  Java_JARSIGNER_EXECUTABLE = the full path to the Java jar signer
+  Java_VERSION_STRING       = Version of java found, eg. 1.6.0_12
+  Java_VERSION_MAJOR        = The major version of the package found.
+  Java_VERSION_MINOR        = The minor version of the package found.
+  Java_VERSION_PATCH        = The patch version of the package found.
+  Java_VERSION_TWEAK        = The tweak version of the package found (after '_')
+  Java_VERSION              = This is set to: $major[.$minor[.$patch[.$tweak]]]
+
+.. versionadded:: 3.4
+  Added the ``Java_IDLJ_EXECUTABLE`` and ``Java_JARSIGNER_EXECUTABLE``
+  variables.
+
+The minimum required version of Java can be specified using the
+:command:`find_package` syntax, e.g.
+
+.. code-block:: cmake
+
+  find_package(Java 1.8)
+
+NOTE: ``${Java_VERSION}`` and ``${Java_VERSION_STRING}`` are not guaranteed to
+be identical.  For example some java version may return:
+``Java_VERSION_STRING = 1.8.0_17`` and ``Java_VERSION = 1.8.0.17``
+
+another example is the Java OEM, with: ``Java_VERSION_STRING = 1.8.0-oem``
+and ``Java_VERSION = 1.8.0``
+
+For these components the following variables are set:
+
+::
+
+  Java_FOUND                    - TRUE if all components are found.
+  Java_<component>_FOUND        - TRUE if <component> is found.
+
+
+
+Example Usages:
+
+::
+
+  find_package(Java)
+  find_package(Java 1.8 REQUIRED)
+  find_package(Java COMPONENTS Runtime)
+  find_package(Java COMPONENTS Development)
+#]=======================================================================]
+
+include(${CMAKE_CURRENT_LIST_DIR}/CMakeFindJavaCommon.cmake)
+
+# The HINTS option should only be used for values computed from the system.
+set(_JAVA_HINTS)
+if(_JAVA_HOME)
+  list(APPEND _JAVA_HINTS ${_JAVA_HOME}/bin)
+endif()
+if (WIN32)
+  macro (_JAVA_GET_INSTALLED_VERSIONS _KIND)
+    execute_process(COMMAND REG QUERY HKLM\\SOFTWARE\\JavaSoft\\${_KIND}
+      RESULT_VARIABLE _JAVA_RESULT
+      OUTPUT_VARIABLE _JAVA_VERSIONS
+      ERROR_QUIET)
+    if (NOT  _JAVA_RESULT)
+      string (REGEX MATCHALL "HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\JavaSoft\\\\${_KIND}\\\\[0-9.]+" _JAVA_VERSIONS "${_JAVA_VERSIONS}")
+      if (_JAVA_VERSIONS)
+        # sort versions. Most recent first
+        ## handle version 9 apart from other versions to get correct ordering
+        set (_JAVA_V9 ${_JAVA_VERSIONS})
+        list (FILTER _JAVA_VERSIONS EXCLUDE REGEX "${_KIND}\\\\9")
+        list (SORT _JAVA_VERSIONS)
+        list (REVERSE _JAVA_VERSIONS)
+        list (FILTER _JAVA_V9 INCLUDE REGEX "${_KIND}\\\\9")
+        list (SORT _JAVA_V9)
+        list (REVERSE _JAVA_V9)
+        list (APPEND _JAVA_VERSIONS ${_JAVA_V9})
+        foreach (_JAVA_HINT IN LISTS _JAVA_VERSIONS)
+          list(APPEND _JAVA_HINTS "[${_JAVA_HINT};JavaHome]/bin")
+        endforeach()
+      endif()
+    endif()
+  endmacro()
+
+  # search for installed versions for version 9 and upper
+  _JAVA_GET_INSTALLED_VERSIONS("JDK")
+  _JAVA_GET_INSTALLED_VERSIONS("JRE")
+
+  list(APPEND _JAVA_HINTS
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.9;JavaHome]/bin"
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.8;JavaHome]/bin"
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.7;JavaHome]/bin"
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.6;JavaHome]/bin"
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.5;JavaHome]/bin"
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.4;JavaHome]/bin"
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.3;JavaHome]/bin"
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Runtime Environment\\1.9;JavaHome]/bin"
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Runtime Environment\\1.8;JavaHome]/bin"
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Runtime Environment\\1.7;JavaHome]/bin"
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Runtime Environment\\1.6;JavaHome]/bin"
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Runtime Environment\\1.5;JavaHome]/bin"
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Runtime Environment\\1.4;JavaHome]/bin"
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Runtime Environment\\1.3;JavaHome]/bin"
+  )
+endif()
+
+# Hard-coded guesses should still go in PATHS. This ensures that the user
+# environment can always override hard guesses.
+set(_JAVA_PATHS
+  /usr/lib/java/bin
+  /usr/share/java/bin
+  /usr/local/java/bin
+  /usr/local/java/share/bin
+  /usr/java/j2sdk1.4.2_04
+  /usr/lib/j2sdk1.4-sun/bin
+  /usr/java/j2sdk1.4.2_09/bin
+  /usr/lib/j2sdk1.5-sun/bin
+  /opt/sun-jdk-1.5.0.04/bin
+  /usr/local/jdk-1.7.0/bin
+  /usr/local/jdk-1.6.0/bin
+  )
+find_program(Java_JAVA_EXECUTABLE
+  NAMES java
+  HINTS ${_JAVA_HINTS}
+  PATHS ${_JAVA_PATHS}
+)
+
+if(Java_JAVA_EXECUTABLE)
+    execute_process(COMMAND "${Java_JAVA_EXECUTABLE}" -version
+      RESULT_VARIABLE res
+      OUTPUT_VARIABLE var
+      ERROR_VARIABLE var # sun-java output to stderr
+      OUTPUT_STRIP_TRAILING_WHITESPACE
+      ERROR_STRIP_TRAILING_WHITESPACE)
+    if( res )
+      if(var MATCHES "Unable to locate a Java Runtime to invoke|No Java runtime present, requesting install")
+        set(Java_JAVA_EXECUTABLE Java_JAVA_EXECUTABLE-NOTFOUND)
+      elseif(${Java_FIND_REQUIRED})
+        message( FATAL_ERROR "Error executing java -version" )
+      else()
+        message( STATUS "Warning, could not run java -version")
+      endif()
+    else()
+      # Extract version components (up to 4 levels) from "java -version" output.
+      set(_java_version_regex [[(([0-9]+)(\.([0-9]+)(\.([0-9]+)(_([0-9]+))?)?)?.*)]])
+      if(var MATCHES "java version \"${_java_version_regex}\"")
+        # Sun, GCJ, older OpenJDK
+        set(Java_VERSION_STRING "${CMAKE_MATCH_1}")
+        set(Java_VERSION_MAJOR "${CMAKE_MATCH_2}")
+        if (CMAKE_MATCH_4)
+        set(Java_VERSION_MINOR "${CMAKE_MATCH_4}")
+        else()
+          set(Java_VERSION_MINOR 0)
+        endif()
+        if (CMAKE_MATCH_6)
+        set(Java_VERSION_PATCH "${CMAKE_MATCH_6}")
+        else()
+          set(Java_VERSION_PATCH 0)
+        endif()
+        set(Java_VERSION_TWEAK "${CMAKE_MATCH_8}")
+      elseif(var MATCHES "openjdk version \"${_java_version_regex}\"")
+        # OpenJDK
+        set(Java_VERSION_STRING "${CMAKE_MATCH_1}")
+        set(Java_VERSION_MAJOR "${CMAKE_MATCH_2}")
+        if (CMAKE_MATCH_4)
+        set(Java_VERSION_MINOR "${CMAKE_MATCH_4}")
+        else()
+          set(Java_VERSION_MINOR 0)
+        endif()
+        if (CMAKE_MATCH_6)
+        set(Java_VERSION_PATCH "${CMAKE_MATCH_6}")
+        else()
+          set(Java_VERSION_PATCH 0)
+        endif()
+        set(Java_VERSION_TWEAK "${CMAKE_MATCH_8}")
+      elseif(var MATCHES "openjdk version \"([0-9]+)-[A-Za-z]+\"")
+        # OpenJDK 9 early access builds or locally built
+        set(Java_VERSION_STRING "1.${CMAKE_MATCH_1}.0")
+        set(Java_VERSION_MAJOR "1")
+        set(Java_VERSION_MINOR "${CMAKE_MATCH_1}")
+        set(Java_VERSION_PATCH "0")
+        set(Java_VERSION_TWEAK "")
+      elseif(var MATCHES "java full version \"kaffe-${_java_version_regex}\"")
+        # Kaffe style
+        set(Java_VERSION_STRING "${CMAKE_MATCH_1}")
+        set(Java_VERSION_MAJOR "${CMAKE_MATCH_2}")
+        set(Java_VERSION_MINOR "${CMAKE_MATCH_4}")
+        set(Java_VERSION_PATCH "${CMAKE_MATCH_6}")
+        set(Java_VERSION_TWEAK "${CMAKE_MATCH_8}")
+      else()
+        if(NOT Java_FIND_QUIETLY)
+          string(REPLACE "\n" "\n  " ver_msg "\n${var}")
+          message(WARNING "Java version not recognized:${ver_msg}\nPlease report.")
+        endif()
+        set(Java_VERSION_STRING "")
+        set(Java_VERSION_MAJOR "")
+        set(Java_VERSION_MINOR "")
+        set(Java_VERSION_PATCH "")
+        set(Java_VERSION_TWEAK "")
+      endif()
+      set(Java_VERSION "${Java_VERSION_MAJOR}")
+      if(NOT "x${Java_VERSION}" STREQUAL "x")
+        foreach(c MINOR PATCH TWEAK)
+          if(NOT "x${Java_VERSION_${c}}" STREQUAL "x")
+            string(APPEND Java_VERSION ".${Java_VERSION_${c}}")
+          else()
+            break()
+          endif()
+        endforeach()
+      endif()
+    endif()
+
+endif()
+
+
+find_program(Java_JAR_EXECUTABLE
+  NAMES jar
+  HINTS ${_JAVA_HINTS}
+  PATHS ${_JAVA_PATHS}
+)
+
+find_program(Java_JAVAC_EXECUTABLE
+  NAMES javac
+  HINTS ${_JAVA_HINTS}
+  PATHS ${_JAVA_PATHS}
+)
+
+find_program(Java_JAVAH_EXECUTABLE
+  NAMES javah
+  HINTS ${_JAVA_HINTS}
+  PATHS ${_JAVA_PATHS}
+)
+
+find_program(Java_JAVADOC_EXECUTABLE
+  NAMES javadoc
+  HINTS ${_JAVA_HINTS}
+  PATHS ${_JAVA_PATHS}
+)
+
+find_program(Java_IDLJ_EXECUTABLE
+  NAMES idlj
+  HINTS ${_JAVA_HINTS}
+  PATHS ${_JAVA_PATHS}
+)
+
+find_program(Java_JARSIGNER_EXECUTABLE
+  NAMES jarsigner
+  HINTS ${_JAVA_HINTS}
+  PATHS ${_JAVA_PATHS}
+)
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+if(Java_FIND_COMPONENTS)
+  set(_JAVA_REQUIRED_VARS)
+  foreach(component ${Java_FIND_COMPONENTS})
+    # User just want to execute some Java byte-compiled
+    If(component STREQUAL "Runtime")
+      list(APPEND _JAVA_REQUIRED_VARS Java_JAVA_EXECUTABLE)
+      if(Java_JAVA_EXECUTABLE)
+        set(Java_Runtime_FOUND TRUE)
+      endif()
+    elseif(component STREQUAL "Development")
+      list(APPEND _JAVA_REQUIRED_VARS Java_JAVA_EXECUTABLE Java_JAVAC_EXECUTABLE
+                                      Java_JAR_EXECUTABLE Java_JAVADOC_EXECUTABLE)
+      if(Java_VERSION VERSION_LESS "10")
+        list(APPEND _JAVA_REQUIRED_VARS Java_JAVAH_EXECUTABLE)
+        if(Java_JAVA_EXECUTABLE AND Java_JAVAC_EXECUTABLE
+            AND Java_JAVAH_EXECUTABLE AND Java_JAR_EXECUTABLE AND Java_JAVADOC_EXECUTABLE)
+          set(Java_Development_FOUND TRUE)
+        endif()
+      else()
+        if(Java_JAVA_EXECUTABLE AND Java_JAVAC_EXECUTABLE
+            AND Java_JAR_EXECUTABLE AND Java_JAVADOC_EXECUTABLE)
+          set(Java_Development_FOUND TRUE)
+        endif()
+      endif()
+    elseif(component STREQUAL "IdlJ")
+      list(APPEND _JAVA_REQUIRED_VARS Java_IDLJ_EXECUTABLE)
+      if(Java_IDLJ_EXECUTABLE)
+        set(Java_IdlJ_FOUND TRUE)
+      endif()
+    elseif(component STREQUAL "JarSigner")
+      list(APPEND _JAVA_REQUIRED_VARS Java_JARSIGNER_EXECUTABLE)
+      if(Java_JARSIGNER_EXECUTABLE)
+        set(Java_JarSigner_FOUND TRUE)
+      endif()
+    else()
+      message(FATAL_ERROR "Comp: ${component} is not handled")
+    endif()
+  endforeach()
+  list (REMOVE_DUPLICATES _JAVA_REQUIRED_VARS)
+  find_package_handle_standard_args(Java
+    REQUIRED_VARS ${_JAVA_REQUIRED_VARS} HANDLE_COMPONENTS
+    VERSION_VAR Java_VERSION
+    )
+  if(Java_FOUND)
+    foreach(component ${Java_FIND_COMPONENTS})
+      set(Java_${component}_FOUND TRUE)
+    endforeach()
+  endif()
+else()
+  # Check for Development
+  if(Java_VERSION VERSION_LESS "10")
+    find_package_handle_standard_args(Java
+      REQUIRED_VARS Java_JAVA_EXECUTABLE Java_JAR_EXECUTABLE Java_JAVAC_EXECUTABLE
+                    Java_JAVAH_EXECUTABLE Java_JAVADOC_EXECUTABLE
+      VERSION_VAR Java_VERSION_STRING
+      )
+  else()
+    find_package_handle_standard_args(Java
+      REQUIRED_VARS Java_JAVA_EXECUTABLE Java_JAR_EXECUTABLE Java_JAVAC_EXECUTABLE
+                    Java_JAVADOC_EXECUTABLE
+      VERSION_VAR Java_VERSION_STRING
+      )
+  endif()
+endif()
+
+
+mark_as_advanced(
+  Java_JAVA_EXECUTABLE
+  Java_JAR_EXECUTABLE
+  Java_JAVAC_EXECUTABLE
+  Java_JAVAH_EXECUTABLE
+  Java_JAVADOC_EXECUTABLE
+  Java_IDLJ_EXECUTABLE
+  Java_JARSIGNER_EXECUTABLE
+  )
+
+# LEGACY
+set(JAVA_RUNTIME ${Java_JAVA_EXECUTABLE})
+set(JAVA_ARCHIVE ${Java_JAR_EXECUTABLE})
+set(JAVA_COMPILE ${Java_JAVAC_EXECUTABLE})
diff --git a/share/cmake-3.18/Modules/FindKDE3.cmake b/share/cmake-3.22/Modules/FindKDE3.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindKDE3.cmake
rename to share/cmake-3.22/Modules/FindKDE3.cmake
diff --git a/share/cmake-3.18/Modules/FindKDE4.cmake b/share/cmake-3.22/Modules/FindKDE4.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindKDE4.cmake
rename to share/cmake-3.22/Modules/FindKDE4.cmake
diff --git a/share/cmake-3.22/Modules/FindLAPACK.cmake b/share/cmake-3.22/Modules/FindLAPACK.cmake
new file mode 100644
index 0000000..5540965
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindLAPACK.cmake
@@ -0,0 +1,761 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindLAPACK
+----------
+
+Find Linear Algebra PACKage (LAPACK) library
+
+This module finds an installed Fortran library that implements the
+`LAPACK linear-algebra interface`_.
+
+At least one of the ``C``, ``CXX``, or ``Fortran`` languages must be enabled.
+
+.. _`LAPACK linear-algebra interface`: http://www.netlib.org/lapack/
+
+Input Variables
+^^^^^^^^^^^^^^^
+
+The following variables may be set to influence this module's behavior:
+
+``BLA_STATIC``
+  if ``ON`` use static linkage
+
+``BLA_VENDOR``
+  Set to one of the :ref:`BLAS/LAPACK Vendors` to search for BLAS only
+  from the specified vendor.  If not set, all vendors are considered.
+
+``BLA_F95``
+  if ``ON`` tries to find the BLAS95/LAPACK95 interfaces
+
+``BLA_PREFER_PKGCONFIG``
+  .. versionadded:: 3.20
+
+  if set ``pkg-config`` will be used to search for a LAPACK library first
+  and if one is found that is preferred
+
+``BLA_SIZEOF_INTEGER``
+  .. versionadded:: 3.22
+
+  Specify the BLAS/LAPACK library integer size:
+
+  ``4``
+    Search for a BLAS/LAPACK with 32-bit integer interfaces.
+  ``8``
+    Search for a BLAS/LAPACK with 64-bit integer interfaces.
+  ``ANY``
+    Search for any BLAS/LAPACK.
+    Most likely, a BLAS/LAPACK with 32-bit integer interfaces will be found.
+
+Imported targets
+^^^^^^^^^^^^^^^^
+
+This module defines the following :prop_tgt:`IMPORTED` targets:
+
+``LAPACK::LAPACK``
+  .. versionadded:: 3.18
+
+  The libraries to use for LAPACK, if found.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This module defines the following variables:
+
+``LAPACK_FOUND``
+  library implementing the LAPACK interface is found
+``LAPACK_LINKER_FLAGS``
+  uncached list of required linker flags (excluding ``-l`` and ``-L``).
+``LAPACK_LIBRARIES``
+  uncached list of libraries (using full path name) to link against
+  to use LAPACK
+``LAPACK95_LIBRARIES``
+  uncached list of libraries (using full path name) to link against
+  to use LAPACK95
+``LAPACK95_FOUND``
+  library implementing the LAPACK95 interface is found
+
+Intel MKL
+^^^^^^^^^
+
+To use the Intel MKL implementation of LAPACK, a project must enable at least
+one of the ``C`` or ``CXX`` languages.  Set ``BLA_VENDOR`` to an Intel MKL
+variant either on the command-line as ``-DBLA_VENDOR=Intel10_64lp`` or in
+project code:
+
+.. code-block:: cmake
+
+  set(BLA_VENDOR Intel10_64lp)
+  find_package(LAPACK)
+
+In order to build a project using Intel MKL, and end user must first
+establish an Intel MKL environment.  See the :module:`FindBLAS` module
+section on :ref:`Intel MKL` for details.
+
+#]=======================================================================]
+
+# The approach follows that of the ``autoconf`` macro file, ``acx_lapack.m4``
+# (distributed at http://ac-archive.sourceforge.net/ac-archive/acx_lapack.html).
+
+if(CMAKE_Fortran_COMPILER_LOADED)
+  include(${CMAKE_CURRENT_LIST_DIR}/CheckFortranFunctionExists.cmake)
+else()
+  include(${CMAKE_CURRENT_LIST_DIR}/CheckFunctionExists.cmake)
+endif()
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+
+function(_add_lapack_target)
+  if(LAPACK_FOUND AND NOT TARGET LAPACK::LAPACK)
+    add_library(LAPACK::LAPACK INTERFACE IMPORTED)
+
+    # Filter out redundant BLAS info and replace with the BLAS target
+    set(_lapack_libs "${LAPACK_LIBRARIES}")
+    set(_lapack_flags "${LAPACK_LINKER_FLAGS}")
+    if(TARGET BLAS::BLAS)
+      if(_lapack_libs AND BLAS_LIBRARIES)
+        foreach(_blas_lib IN LISTS BLAS_LIBRARIES)
+          list(REMOVE_ITEM _lapack_libs "${_blas_lib}")
+        endforeach()
+      endif()
+      if(_lapack_flags AND BLAS_LINKER_FLAGS)
+        foreach(_blas_flag IN LISTS BLAS_LINKER_FLAGS)
+          list(REMOVE_ITEM _lapack_flags "${_blas_flag}")
+        endforeach()
+      endif()
+      list(APPEND _lapack_libs BLAS::BLAS)
+    endif()
+    if(_lapack_libs)
+      set_target_properties(LAPACK::LAPACK PROPERTIES
+        INTERFACE_LINK_LIBRARIES "${_lapack_libs}"
+      )
+    endif()
+    if(_lapack_flags)
+      set_target_properties(LAPACK::LAPACK PROPERTIES
+        INTERFACE_LINK_OPTIONS "${_lapack_flags}"
+      )
+    endif()
+  endif()
+endfunction()
+
+# TODO: move this stuff to a separate module
+
+function(CHECK_LAPACK_LIBRARIES LIBRARIES _prefix _name _flags _list _deps _addlibdir _subdirs _blas)
+  # This function checks for the existence of the combination of libraries
+  # given by _list.  If the combination is found, this checks whether can link
+  # against that library combination using the name of a routine given by _name
+  # using the linker flags given by _flags.  If the combination of libraries is
+  # found and passes the link test, ${LIBRARIES} is set to the list of complete
+  # library paths that have been found.  Otherwise, ${LIBRARIES} is set to FALSE.
+
+  set(_libraries_work TRUE)
+  set(_libraries)
+  set(_combined_name)
+
+  if(BLA_STATIC)
+    if(WIN32)
+      set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES})
+    else()
+      set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
+    endif()
+  else()
+    if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+      # for ubuntu's libblas3gf and liblapack3gf packages
+      set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES} .so.3gf)
+    endif()
+  endif()
+
+  set(_extaddlibdir "${_addlibdir}")
+  if(WIN32)
+    list(APPEND _extaddlibdir ENV LIB)
+  elseif(APPLE)
+    list(APPEND _extaddlibdir ENV DYLD_LIBRARY_PATH)
+  else()
+    list(APPEND _extaddlibdir ENV LD_LIBRARY_PATH)
+  endif()
+  list(APPEND _extaddlibdir "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
+
+  foreach(_library ${_list})
+    if(_library MATCHES "^-")
+      # Respect linker flags as-is (required by MKL)
+      list(APPEND _libraries "${_library}")
+    else()
+      string(REGEX REPLACE "[^A-Za-z0-9]" "_" _lib_var "${_library}")
+      string(APPEND _combined_name "_${_lib_var}")
+      if(NOT "${_deps}" STREQUAL "")
+        string(APPEND _combined_name "_deps")
+      endif()
+      if(_libraries_work)
+        find_library(${_prefix}_${_lib_var}_LIBRARY
+          NAMES ${_library}
+          NAMES_PER_DIR
+          PATHS ${_extaddlibdir}
+          PATH_SUFFIXES ${_subdirs}
+        )
+        mark_as_advanced(${_prefix}_${_lib_var}_LIBRARY)
+        list(APPEND _libraries ${${_prefix}_${_lib_var}_LIBRARY})
+        set(_libraries_work ${${_prefix}_${_lib_var}_LIBRARY})
+      endif()
+    endif()
+  endforeach()
+
+  foreach(_flag ${_flags})
+    string(REGEX REPLACE "[^A-Za-z0-9]" "_" _flag_var "${_flag}")
+    string(APPEND _combined_name "_${_flag_var}")
+  endforeach()
+  if(_libraries_work)
+    # Test this combination of libraries.
+    set(CMAKE_REQUIRED_LIBRARIES ${_flags} ${_libraries} ${_blas} ${_deps})
+    set(CMAKE_REQUIRED_QUIET ${LAPACK_FIND_QUIETLY})
+    if(CMAKE_Fortran_COMPILER_LOADED)
+      check_fortran_function_exists("${_name}" ${_prefix}${_combined_name}_WORKS)
+    else()
+      check_function_exists("${_name}_" ${_prefix}${_combined_name}_WORKS)
+    endif()
+    set(CMAKE_REQUIRED_LIBRARIES)
+    set(_libraries_work ${${_prefix}${_combined_name}_WORKS})
+  endif()
+
+  if(_libraries_work)
+    if("${_list}${_blas}" STREQUAL "")
+      set(_libraries "${LIBRARIES}-PLACEHOLDER-FOR-EMPTY-LIBRARIES")
+    else()
+      list(APPEND _libraries ${_blas} ${_deps})
+    endif()
+  else()
+    set(_libraries FALSE)
+  endif()
+  set(${LIBRARIES} "${_libraries}" PARENT_SCOPE)
+endfunction()
+
+macro(_lapack_find_dependency dep)
+  set(_lapack_quiet_arg)
+  if(LAPACK_FIND_QUIETLY)
+    set(_lapack_quiet_arg QUIET)
+  endif()
+  set(_lapack_required_arg)
+  if(LAPACK_FIND_REQUIRED)
+    set(_lapack_required_arg REQUIRED)
+  endif()
+  find_package(${dep} ${ARGN}
+    ${_lapack_quiet_arg}
+    ${_lapack_required_arg}
+  )
+  if (NOT ${dep}_FOUND)
+    set(LAPACK_NOT_FOUND_MESSAGE "LAPACK could not be found because dependency ${dep} could not be found.")
+  endif()
+
+  set(_lapack_required_arg)
+  set(_lapack_quiet_arg)
+endmacro()
+
+set(LAPACK_LINKER_FLAGS)
+set(LAPACK_LIBRARIES)
+set(LAPACK95_LIBRARIES)
+set(_lapack_fphsa_req_var LAPACK_LIBRARIES)
+
+# Check the language being used
+if(NOT (CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED OR CMAKE_Fortran_COMPILER_LOADED))
+  set(LAPACK_NOT_FOUND_MESSAGE
+    "FindLAPACK requires Fortran, C, or C++ to be enabled.")
+endif()
+
+if(NOT BLA_SIZEOF_INTEGER)
+  # in the reality we do not know which API of BLAS/LAPACK is masked in library
+  set(_lapack_sizeof_integer "ANY")
+elseif((BLA_SIZEOF_INTEGER STREQUAL "ANY") OR
+       (BLA_SIZEOF_INTEGER STREQUAL "4") OR
+       (BLA_SIZEOF_INTEGER STREQUAL "8"))
+  set(_lapack_sizeof_integer ${BLA_SIZEOF_INTEGER})
+else()
+  message(FATAL_ERROR "BLA_SIZEOF_INTEGER can have only <no value>, ANY, 4, or 8 values")
+endif()
+
+# Load BLAS
+if(NOT LAPACK_NOT_FOUND_MESSAGE)
+  _lapack_find_dependency(BLAS)
+endif()
+
+# Search with pkg-config if specified
+if(BLA_PREFER_PKGCONFIG)
+  find_package(PkgConfig)
+  pkg_check_modules(PKGC_LAPACK lapack)
+  if(PKGC_LAPACK_FOUND)
+    set(LAPACK_FOUND TRUE)
+    set(LAPACK_LIBRARIES "${PKGC_LAPACK_LINK_LIBRARIES}")
+    if (BLAS_LIBRARIES)
+      list(APPEND LAPACK_LIBRARIES "${BLAS_LIBRARIES}")
+    endif()
+    _add_lapack_target()
+    return()
+  endif()
+endif()
+
+# Search for different LAPACK distributions if BLAS is found
+if(NOT LAPACK_NOT_FOUND_MESSAGE)
+  set(LAPACK_LINKER_FLAGS ${BLAS_LINKER_FLAGS})
+  if(NOT $ENV{BLA_VENDOR} STREQUAL "")
+    set(BLA_VENDOR $ENV{BLA_VENDOR})
+  elseif(NOT BLA_VENDOR)
+    set(BLA_VENDOR "All")
+  endif()
+
+  # LAPACK in the Intel MKL 10+ library?
+  if(NOT LAPACK_LIBRARIES
+      AND (BLA_VENDOR MATCHES "Intel" OR BLA_VENDOR STREQUAL "All")
+      AND (CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED))
+    # System-specific settings
+    if(NOT WIN32)
+      set(LAPACK_mkl_LM "-lm")
+      set(LAPACK_mkl_LDL "-ldl")
+    endif()
+
+    _lapack_find_dependency(Threads)
+
+    if(_lapack_sizeof_integer EQUAL 8)
+      set(LAPACK_mkl_ILP_MODE "ilp64")
+    elseif(_lapack_sizeof_integer EQUAL 4)
+      set(LAPACK_mkl_ILP_MODE "lp64")
+    else()
+      if(BLA_VENDOR MATCHES "_64ilp")
+        set(LAPACK_mkl_ILP_MODE "ilp64")
+      else()
+        set(LAPACK_mkl_ILP_MODE "lp64")
+      endif()
+    endif()
+
+    set(LAPACK_SEARCH_LIBS "")
+
+    if(BLA_F95)
+      set(LAPACK_mkl_SEARCH_SYMBOL "cheev_f95")
+      set(_LAPACK_LIBRARIES LAPACK95_LIBRARIES)
+      set(_BLAS_LIBRARIES ${BLAS95_LIBRARIES})
+
+      # old
+      list(APPEND LAPACK_SEARCH_LIBS
+        "mkl_lapack95")
+      # new >= 10.3
+      list(APPEND LAPACK_SEARCH_LIBS
+        "mkl_intel_c")
+      list(APPEND LAPACK_SEARCH_LIBS
+        "mkl_lapack95_${LAPACK_mkl_ILP_MODE}")
+    else()
+      set(LAPACK_mkl_SEARCH_SYMBOL "cheev")
+      set(_LAPACK_LIBRARIES LAPACK_LIBRARIES)
+      set(_BLAS_LIBRARIES ${BLAS_LIBRARIES})
+
+      # old and new >= 10.3
+      list(APPEND LAPACK_SEARCH_LIBS
+        "mkl_lapack")
+    endif()
+
+    # MKL uses a multitude of partially platform-specific subdirectories:
+    if(BLA_VENDOR STREQUAL "Intel10_32")
+      set(LAPACK_mkl_ARCH_NAME "ia32")
+    else()
+      set(LAPACK_mkl_ARCH_NAME "intel64")
+    endif()
+    if(WIN32)
+      set(LAPACK_mkl_OS_NAME "win")
+    elseif(APPLE)
+      set(LAPACK_mkl_OS_NAME "mac")
+    else()
+      set(LAPACK_mkl_OS_NAME "lin")
+    endif()
+    if(DEFINED ENV{MKLROOT})
+      file(TO_CMAKE_PATH "$ENV{MKLROOT}" LAPACK_mkl_MKLROOT)
+      # If MKLROOT points to the subdirectory 'mkl', use the parent directory instead
+      # so we can better detect other relevant libraries in 'compiler' or 'tbb':
+      get_filename_component(LAPACK_mkl_MKLROOT_LAST_DIR "${LAPACK_mkl_MKLROOT}" NAME)
+      if(LAPACK_mkl_MKLROOT_LAST_DIR STREQUAL "mkl")
+          get_filename_component(LAPACK_mkl_MKLROOT "${LAPACK_mkl_MKLROOT}" DIRECTORY)
+      endif()
+    endif()
+    set(LAPACK_mkl_LIB_PATH_SUFFIXES
+        "compiler/lib" "compiler/lib/${LAPACK_mkl_ARCH_NAME}_${LAPACK_mkl_OS_NAME}"
+        "compiler/lib/${LAPACK_mkl_ARCH_NAME}"
+        "mkl/lib" "mkl/lib/${LAPACK_mkl_ARCH_NAME}_${LAPACK_mkl_OS_NAME}"
+        "mkl/lib/${LAPACK_mkl_ARCH_NAME}"
+        "lib" "lib/${LAPACK_mkl_ARCH_NAME}_${LAPACK_mkl_OS_NAME}"
+        "lib/${LAPACK_mkl_ARCH_NAME}"
+        )
+
+    # First try empty lapack libs (implicitly linked or automatic from BLAS)
+    if(NOT ${_LAPACK_LIBRARIES})
+      check_lapack_libraries(
+        ${_LAPACK_LIBRARIES}
+        LAPACK
+        ${LAPACK_mkl_SEARCH_SYMBOL}
+        ""
+        ""
+        "${CMAKE_THREAD_LIBS_INIT};${LAPACK_mkl_LM};${LAPACK_mkl_LDL}"
+        "${LAPACK_mkl_MKLROOT}"
+        "${LAPACK_mkl_LIB_PATH_SUFFIXES}"
+        "${_BLAS_LIBRARIES}"
+      )
+      if(LAPACK_WORKS AND NOT _BLAS_LIBRARIES)
+        # Give a more helpful "found" message
+        set(LAPACK_WORKS "implicitly linked")
+        set(_lapack_fphsa_req_var LAPACK_WORKS)
+      endif()
+    endif()
+
+    # Then try the search libs
+    foreach(_search ${LAPACK_SEARCH_LIBS})
+      string(REPLACE " " ";" _search ${_search})
+      if(NOT ${_LAPACK_LIBRARIES})
+        check_lapack_libraries(
+          ${_LAPACK_LIBRARIES}
+          LAPACK
+          ${LAPACK_mkl_SEARCH_SYMBOL}
+          ""
+          "${_search}"
+          "${CMAKE_THREAD_LIBS_INIT};${LAPACK_mkl_LM};${LAPACK_mkl_LDL}"
+          "${LAPACK_mkl_MKLROOT}"
+          "${LAPACK_mkl_LIB_PATH_SUFFIXES}"
+          "${_BLAS_LIBRARIES}"
+        )
+      endif()
+    endforeach()
+
+    unset(_search)
+    unset(LAPACK_mkl_ILP_MODE)
+    unset(LAPACK_mkl_SEARCH_SYMBOL)
+    unset(LAPACK_mkl_LM)
+    unset(LAPACK_mkl_LDL)
+    unset(LAPACK_mkl_MKLROOT)
+    unset(LAPACK_mkl_ARCH_NAME)
+    unset(LAPACK_mkl_OS_NAME)
+    unset(LAPACK_mkl_LIB_PATH_SUFFIXES)
+  endif()
+
+  # gotoblas? (http://www.tacc.utexas.edu/tacc-projects/gotoblas2)
+  if(NOT LAPACK_LIBRARIES
+      AND (BLA_VENDOR STREQUAL "Goto" OR BLA_VENDOR STREQUAL "All"))
+    check_lapack_libraries(
+      LAPACK_LIBRARIES
+      LAPACK
+      cheev
+      ""
+      "goto2"
+      ""
+      ""
+      ""
+      "${BLAS_LIBRARIES}"
+    )
+  endif()
+
+  # FlexiBLAS? (http://www.mpi-magdeburg.mpg.de/mpcsc/software/FlexiBLAS/)
+  if(NOT LAPACK_LIBRARIES
+      AND (BLA_VENDOR STREQUAL "FlexiBLAS" OR BLA_VENDOR STREQUAL "All"))
+    set(_lapack_flexiblas_lib "flexiblas")
+
+    if(_lapack_sizeof_integer EQUAL 8)
+      string(APPEND _lapack_flexiblas_lib "64")
+    endif()
+
+    check_lapack_libraries(
+      LAPACK_LIBRARIES
+      LAPACK
+      cheev
+      ""
+      "${_lapack_flexiblas_lib}"
+      ""
+      ""
+      ""
+      "${BLAS_LIBRARIES}"
+    )
+
+    unset(_lapack_flexiblas_lib)
+  endif()
+
+  # OpenBLAS? (http://www.openblas.net)
+  if(NOT LAPACK_LIBRARIES
+      AND (BLA_VENDOR STREQUAL "OpenBLAS" OR BLA_VENDOR STREQUAL "All"))
+    set(_lapack_openblas_lib "openblas")
+
+    if(_lapack_sizeof_integer EQUAL 8)
+      string(APPEND _lapack_openblas_lib "64")
+    endif()
+
+    check_lapack_libraries(
+      LAPACK_LIBRARIES
+      LAPACK
+      cheev
+      ""
+      "${_lapack_openblas_lib}"
+      ""
+      ""
+      ""
+      "${BLAS_LIBRARIES}"
+    )
+
+    unset(_lapack_openblas_lib)
+  endif()
+
+  # ArmPL? (https://developer.arm.com/tools-and-software/server-and-hpc/compile/arm-compiler-for-linux/arm-performance-libraries)
+  if(NOT LAPACK_LIBRARIES
+      AND (BLA_VENDOR MATCHES "Arm" OR BLA_VENDOR STREQUAL "All"))
+    # Check for 64bit Integer support
+    if(_lapack_sizeof_integer EQUAL 8)
+      set(LAPACK_armpl_LIB "armpl_ilp64")
+    elseif(_lapack_sizeof_integer EQUAL 4)
+      set(LAPACK_armpl_LIB "armpl_lp64")
+    else()
+      if(BLA_VENDOR MATCHES "_ilp64")
+        set(LAPACK_armpl_LIB "armpl_ilp64")
+      else()
+        set(LAPACK_armpl_LIB "armpl_lp64")
+      endif()
+    endif()
+
+    # Check for OpenMP support, VIA BLA_VENDOR of Arm_mp or Arm_ipl64_mp
+    if(BLA_VENDOR MATCHES "_mp")
+      string(APPEND LAPACK_armpl_LIB "_mp")
+    endif()
+
+    check_lapack_libraries(
+      LAPACK_LIBRARIES
+      LAPACK
+      cheev
+      ""
+      "${LAPACK_armpl_LIB}"
+      ""
+      ""
+      ""
+      "${BLAS_LIBRARIES}"
+    )
+  endif()
+
+  # FLAME's blis library? (https://github.com/flame/blis)
+  if(NOT LAPACK_LIBRARIES
+      AND (BLA_VENDOR STREQUAL "FLAME" OR BLA_VENDOR STREQUAL "All"))
+    if(_lapack_sizeof_integer EQUAL 8)
+      if(BLA_VENDOR STREQUAL "FLAME")
+        message(FATAL_ERROR "libFLAME does not support Int64 type")
+      endif()
+    else()
+      check_lapack_libraries(
+        LAPACK_LIBRARIES
+        LAPACK
+        cheev
+        ""
+        "flame"
+        ""
+        ""
+        ""
+        "${BLAS_LIBRARIES}"
+      )
+    endif()
+  endif()
+
+  # LAPACK in SCSL library? (SGI/Cray Scientific Library)
+  if(NOT LAPACK_LIBRARIES
+      AND (BLA_VENDOR MATCHES "SCSL" OR BLA_VENDOR STREQUAL "All"))
+    set(_lapack_scsl_lib "scs")
+
+    if(_lapack_sizeof_integer EQUAL 8)
+      string(APPEND _lapack_scsl_lib "_i8")
+    endif()
+    # Check for OpenMP support, VIA BLA_VENDOR of scs_mp
+    if(BLA_VENDOR MATCHES "_mp")
+      string(APPEND _lapack_scsl_lib "_mp")
+    endif()
+
+    check_lapack_libraries(
+      LAPACK_LIBRARIES
+      LAPACK
+      cheev
+      ""
+      "${_lapack_scsl_lib}"
+      ""
+      ""
+      ""
+      "${BLAS_LIBRARIES}"
+    )
+    unset(_lapack_scsl_lib)
+  endif()
+
+  # BLAS in acml library?
+  if(BLA_VENDOR MATCHES "ACML" OR BLA_VENDOR STREQUAL "All")
+    if(BLAS_LIBRARIES MATCHES ".+acml.+")
+      set(LAPACK_LIBRARIES ${BLAS_LIBRARIES})
+    endif()
+  endif()
+
+  # Apple LAPACK library?
+  if(NOT LAPACK_LIBRARIES
+      AND (BLA_VENDOR STREQUAL "Apple" OR BLA_VENDOR STREQUAL "All"))
+    if(_lapack_sizeof_integer EQUAL 8)
+      if(BLA_VENDOR STREQUAL "Apple")
+        message(FATAL_ERROR "Accelerate Framework does not support Int64 type")
+      endif()
+    else()
+      check_lapack_libraries(
+        LAPACK_LIBRARIES
+        LAPACK
+        cheev
+        ""
+        "Accelerate"
+        ""
+        ""
+        ""
+        "${BLAS_LIBRARIES}"
+      )
+    endif()
+  endif()
+
+  # Apple NAS (vecLib) library?
+  if(NOT LAPACK_LIBRARIES
+      AND (BLA_VENDOR STREQUAL "NAS" OR BLA_VENDOR STREQUAL "All"))
+    if(_lapack_sizeof_integer EQUAL 8)
+      if(BLA_VENDOR STREQUAL "NAS")
+        message(FATAL_ERROR "Accelerate Framework does not support Int64 type")
+      endif()
+    else()
+      check_lapack_libraries(
+        LAPACK_LIBRARIES
+        LAPACK
+        cheev
+        ""
+        "vecLib"
+        ""
+        ""
+        ""
+        "${BLAS_LIBRARIES}"
+      )
+    endif()
+  endif()
+
+  # Elbrus Math Library?
+  if(NOT LAPACK_LIBRARIES
+      AND (BLA_VENDOR MATCHES "EML" OR BLA_VENDOR STREQUAL "All"))
+    if(BLAS_LIBRARIES MATCHES "eml.+")
+      set(LAPACK_LIBRARIES ${BLAS_LIBRARIES})
+    endif()
+  endif()
+
+  # Fujitsu SSL2 Library?
+  if(NOT LAPACK_LIBRARIES
+      AND (BLA_VENDOR MATCHES "Fujitsu_SSL2" OR BLA_VENDOR STREQUAL "All"))
+    if(BLAS_LIBRARIES MATCHES "fjlapack.+")
+      set(LAPACK_LIBRARIES ${BLAS_LIBRARIES})
+      set(LAPACK_LINKER_FLAGS ${BLAS_LINKER_FLAGS})
+    endif()
+  endif()
+
+  # LAPACK in IBM ESSL library?
+  if(NOT LAPACK_LIBRARIES
+      AND (BLA_VENDOR MATCHES "IBMESSL" OR BLA_VENDOR STREQUAL "All"))
+    if(BLAS_LIBRARIES MATCHES "essl.+")
+      set(LAPACK_LIBRARIES ${BLAS_LIBRARIES})
+    endif()
+  endif()
+
+  # NVHPC Library?
+
+  if(NOT LAPACK_LIBRARIES
+      AND (BLA_VENDOR MATCHES "NVHPC" OR BLA_VENDOR STREQUAL "All"))
+    set(_lapack_nvhpc_lib "lapack")
+
+    if(_lapack_sizeof_integer EQUAL 8)
+      string(APPEND _lapack_nvhpc_lib "_ilp64")
+    elseif(_lapack_sizeof_integer EQUAL 4)
+      string(APPEND _lapack_nvhpc_lib "_lp64")
+    endif()
+
+    check_lapack_libraries(
+      LAPACK_LIBRARIES
+      LAPACK
+      cheev
+      ""
+      "${_lapack_nvhpc_lib}"
+      "-fortranlibs"
+      ""
+      ""
+      "${BLAS_LIBRARIES}"
+    )
+
+    # an additional check for NVHPC 2020
+    # which does not have differentiation
+    # between lp64 and ilp64 modes
+    if(NOT LAPACK_LIBRARIES AND NOT _lapack_sizeof_integer EQUAL 8)
+      set(_lapack_nvhpc_lib "lapack")
+
+      check_lapack_libraries(
+        LAPACK_LIBRARIES
+        LAPACK
+        cheev
+        ""
+        "${_lapack_nvhpc_lib}"
+        "-fortranlibs"
+        ""
+        ""
+        "${BLAS_LIBRARIES}"
+      )
+    endif()
+
+    unset(_lapack_nvhpc_lib)
+  endif()
+
+  # Generic LAPACK library?
+  if(NOT LAPACK_LIBRARIES
+      AND (BLA_VENDOR STREQUAL "Generic"
+           OR BLA_VENDOR STREQUAL "ATLAS"
+           OR BLA_VENDOR STREQUAL "All"))
+    set(_lapack_generic_lib "lapack")
+    if(BLA_STATIC)
+      # We do not know for sure how the LAPACK reference implementation
+      # is built on this host.  Guess typical dependencies.
+      set(_lapack_generic_deps "-lgfortran;-lm")
+    else()
+      set(_lapack_generic_deps "")
+    endif()
+
+    if(_lapack_sizeof_integer EQUAL 8)
+      string(APPEND _lapack_generic_lib "64")
+    endif()
+
+    check_lapack_libraries(
+      LAPACK_LIBRARIES
+      LAPACK
+      cheev
+      ""
+      "${_lapack_generic_lib}"
+      "${_lapack_generic_deps}"
+      ""
+      ""
+      "${BLAS_LIBRARIES}"
+    )
+
+    unset(_lapack_generic_deps)
+    unset(_lapack_generic_lib)
+  endif()
+endif()
+
+if(BLA_F95)
+  set(LAPACK_LIBRARIES "${LAPACK95_LIBRARIES}")
+endif()
+
+if(LAPACK_NOT_FOUND_MESSAGE)
+  set(LAPACK_NOT_FOUND_MESSAGE
+    REASON_FAILURE_MESSAGE ${LAPACK_NOT_FOUND_MESSAGE})
+endif()
+find_package_handle_standard_args(LAPACK REQUIRED_VARS ${_lapack_fphsa_req_var}
+  ${LAPACK_NOT_FOUND_MESSAGE})
+unset(LAPACK_NOT_FOUND_MESSAGE)
+
+if(BLA_F95)
+  set(LAPACK95_FOUND ${LAPACK_FOUND})
+endif()
+
+# On compilers that implicitly link LAPACK (such as ftn, cc, and CC on Cray HPC machines)
+# we used a placeholder for empty LAPACK_LIBRARIES to get through our logic above.
+if(LAPACK_LIBRARIES STREQUAL "LAPACK_LIBRARIES-PLACEHOLDER-FOR-EMPTY-LIBRARIES")
+  set(LAPACK_LIBRARIES "")
+endif()
+
+_add_lapack_target()
+unset(_lapack_fphsa_req_var)
+unset(_lapack_sizeof_integer)
+unset(_LAPACK_LIBRARIES)
diff --git a/share/cmake-3.22/Modules/FindLATEX.cmake b/share/cmake-3.22/Modules/FindLATEX.cmake
new file mode 100644
index 0000000..9d7168e
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindLATEX.cmake
@@ -0,0 +1,287 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindLATEX
+---------
+
+Find LaTeX
+
+This module finds an installed LaTeX and determines the location
+of the compiler.  Additionally the module looks for Latex-related
+software like BibTeX.
+
+.. versionadded:: 3.2
+  Component processing; support for htlatex, pdftops, Biber, xindy, XeLaTeX,
+  LuaLaTeX.
+
+This module sets the following result variables::
+
+  LATEX_FOUND:          whether found Latex and requested components
+  LATEX_<component>_FOUND:  whether found <component>
+  LATEX_COMPILER:       path to the LaTeX compiler
+  PDFLATEX_COMPILER:    path to the PdfLaTeX compiler
+  XELATEX_COMPILER:     path to the XeLaTeX compiler
+  LUALATEX_COMPILER:    path to the LuaLaTeX compiler
+  BIBTEX_COMPILER:      path to the BibTeX compiler
+  BIBER_COMPILER:       path to the Biber compiler
+  MAKEINDEX_COMPILER:   path to the MakeIndex compiler
+  XINDY_COMPILER:       path to the xindy compiler
+  DVIPS_CONVERTER:      path to the DVIPS converter
+  DVIPDF_CONVERTER:     path to the DVIPDF converter
+  PS2PDF_CONVERTER:     path to the PS2PDF converter
+  PDFTOPS_CONVERTER:    path to the pdftops converter
+  LATEX2HTML_CONVERTER: path to the LaTeX2Html converter
+  HTLATEX_COMPILER:     path to the htlatex compiler
+
+Possible components are::
+
+  PDFLATEX
+  XELATEX
+  LUALATEX
+  BIBTEX
+  BIBER
+  MAKEINDEX
+  XINDY
+  DVIPS
+  DVIPDF
+  PS2PDF
+  PDFTOPS
+  LATEX2HTML
+  HTLATEX
+
+Example Usages::
+
+  find_package(LATEX)
+  find_package(LATEX COMPONENTS PDFLATEX)
+  find_package(LATEX COMPONENTS BIBTEX PS2PDF)
+#]=======================================================================]
+
+if (WIN32)
+  # Try to find the MikTex binary path (look for its package manager).
+  find_path(MIKTEX_BINARY_PATH mpm.exe
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MiK\\MiKTeX\\CurrentVersion\\MiKTeX;Install Root]/miktex/bin"
+     "$ENV{LOCALAPPDATA}/Programs/MiKTeX/miktex/bin"
+     "$ENV{LOCALAPPDATA}/Programs/MiKTeX/miktex/bin/x64"
+     "$ENV{APPDATA}/Programs/MiKTeX/miktex/bin"
+     "$ENV{APPDATA}/Programs/MiKTeX/miktex/bin/x64"
+    DOC
+    "Path to the MikTex binary directory."
+  )
+  mark_as_advanced(MIKTEX_BINARY_PATH)
+
+  # Try to find the GhostScript binary path (look for gswin32).
+  get_filename_component(GHOSTSCRIPT_BINARY_PATH_FROM_REGISTERY_8_00
+     "[HKEY_LOCAL_MACHINE\\SOFTWARE\\AFPL Ghostscript\\8.00;GS_DLL]" PATH
+  )
+
+  get_filename_component(GHOSTSCRIPT_BINARY_PATH_FROM_REGISTERY_7_04
+     "[HKEY_LOCAL_MACHINE\\SOFTWARE\\AFPL Ghostscript\\7.04;GS_DLL]" PATH
+  )
+
+  find_path(GHOSTSCRIPT_BINARY_PATH gswin32.exe
+    ${GHOSTSCRIPT_BINARY_PATH_FROM_REGISTERY_8_00}
+    ${GHOSTSCRIPT_BINARY_PATH_FROM_REGISTERY_7_04}
+    DOC "Path to the GhostScript binary directory."
+  )
+  mark_as_advanced(GHOSTSCRIPT_BINARY_PATH)
+
+  find_path(GHOSTSCRIPT_LIBRARY_PATH ps2pdf13.bat
+    "${GHOSTSCRIPT_BINARY_PATH}/../lib"
+    DOC "Path to the GhostScript library directory."
+  )
+  mark_as_advanced(GHOSTSCRIPT_LIBRARY_PATH)
+endif ()
+
+# try to find Latex and the related programs
+find_program(LATEX_COMPILER
+  NAMES latex
+  PATHS ${MIKTEX_BINARY_PATH}
+        /usr/bin
+)
+
+# find pdflatex
+find_program(PDFLATEX_COMPILER
+  NAMES pdflatex
+  PATHS ${MIKTEX_BINARY_PATH}
+        /usr/bin
+)
+if (PDFLATEX_COMPILER)
+  set(LATEX_PDFLATEX_FOUND TRUE)
+else()
+  set(LATEX_PDFLATEX_FOUND FALSE)
+endif()
+
+# find xelatex
+find_program(XELATEX_COMPILER
+  NAMES xelatex
+  PATHS ${MIKTEX_BINARY_PATH}
+        /usr/bin
+)
+if (XELATEX_COMPILER)
+  set(LATEX_XELATEX_FOUND TRUE)
+else()
+  set(LATEX_XELATEX_FOUND FALSE)
+endif()
+
+# find lualatex
+find_program(LUALATEX_COMPILER
+  NAMES lualatex
+  PATHS ${MIKTEX_BINARY_PATH}
+        /usr/bin
+)
+if (LUALATEX_COMPILER)
+  set(LATEX_LUALATEX_FOUND TRUE)
+else()
+  set(LATEX_LUALATEX_FOUND FALSE)
+endif()
+
+# find bibtex
+find_program(BIBTEX_COMPILER
+  NAMES bibtex
+  PATHS ${MIKTEX_BINARY_PATH}
+        /usr/bin
+)
+if (BIBTEX_COMPILER)
+  set(LATEX_BIBTEX_FOUND TRUE)
+else()
+  set(LATEX_BIBTEX_FOUND FALSE)
+endif()
+
+# find biber
+find_program(BIBER_COMPILER
+  NAMES biber
+  PATHS ${MIKTEX_BINARY_PATH}
+        /usr/bin
+)
+if (BIBER_COMPILER)
+  set(LATEX_BIBER_FOUND TRUE)
+else()
+  set(LATEX_BIBER_FOUND FALSE)
+endif()
+
+# find makeindex
+find_program(MAKEINDEX_COMPILER
+  NAMES makeindex
+  PATHS ${MIKTEX_BINARY_PATH}
+        /usr/bin
+)
+if (MAKEINDEX_COMPILER)
+  set(LATEX_MAKEINDEX_FOUND TRUE)
+else()
+  set(LATEX_MAKEINDEX_FOUND FALSE)
+endif()
+
+# find xindy
+find_program(XINDY_COMPILER
+  NAMES xindy
+  PATHS ${MIKTEX_BINARY_PATH}
+        /usr/bin
+)
+if (XINDY_COMPILER)
+  set(LATEX_XINDY_FOUND TRUE)
+else()
+  set(LATEX_XINDY_FOUND FALSE)
+endif()
+
+# find dvips
+find_program(DVIPS_CONVERTER
+  NAMES dvips
+  PATHS ${MIKTEX_BINARY_PATH}
+        /usr/bin
+)
+if (DVIPS_CONVERTER)
+  set(LATEX_DVIPS_FOUND TRUE)
+else()
+  set(LATEX_DVIPS_FOUND FALSE)
+endif()
+
+# find dvipdf
+find_program(DVIPDF_CONVERTER
+  NAMES dvipdfm dvipdft dvipdf
+  PATHS ${MIKTEX_BINARY_PATH}
+        /usr/bin
+)
+if (DVIPDF_CONVERTER)
+  set(LATEX_DVIPDF_FOUND TRUE)
+else()
+  set(LATEX_DVIPDF_FOUND FALSE)
+endif()
+
+# find ps2pdf
+if (WIN32)
+  find_program(PS2PDF_CONVERTER
+    NAMES ps2pdf14.bat ps2pdf14 ps2pdf
+    PATHS ${GHOSTSCRIPT_LIBRARY_PATH}
+          ${MIKTEX_BINARY_PATH}
+  )
+else ()
+  find_program(PS2PDF_CONVERTER
+    NAMES ps2pdf14 ps2pdf
+  )
+endif ()
+if (PS2PDF_CONVERTER)
+  set(LATEX_PS2PDF_FOUND TRUE)
+else()
+  set(LATEX_PS2PDF_FOUND FALSE)
+endif()
+
+# find pdftops
+find_program(PDFTOPS_CONVERTER
+  NAMES pdftops
+  PATHS ${MIKTEX_BINARY_PATH}
+        /usr/bin
+)
+if (PDFTOPS_CONVERTER)
+  set(LATEX_PDFTOPS_FOUND TRUE)
+else()
+  set(LATEX_PDFTOPS_FOUND FALSE)
+endif()
+
+# find latex2html
+find_program(LATEX2HTML_CONVERTER
+  NAMES latex2html
+  PATHS ${MIKTEX_BINARY_PATH}
+        /usr/bin
+)
+if (LATEX2HTML_CONVERTER)
+  set(LATEX_LATEX2HTML_FOUND TRUE)
+else()
+  set(LATEX_LATEX2HTML_FOUND FALSE)
+endif()
+
+# find htlatex
+find_program(HTLATEX_COMPILER
+  NAMES htlatex
+  PATHS ${MIKTEX_BINARY_PATH}
+        /usr/bin
+)
+if (HTLATEX_COMPILER)
+  set(LATEX_HTLATEX_FOUND TRUE)
+else()
+  set(LATEX_HTLATEX_FOUND FALSE)
+endif()
+
+
+mark_as_advanced(
+  LATEX_COMPILER
+  PDFLATEX_COMPILER
+  XELATEX_COMPILER
+  LUALATEX_COMPILER
+  BIBTEX_COMPILER
+  BIBER_COMPILER
+  MAKEINDEX_COMPILER
+  XINDY_COMPILER
+  DVIPS_CONVERTER
+  DVIPDF_CONVERTER
+  PS2PDF_CONVERTER
+  PDFTOPS_CONVERTER
+  LATEX2HTML_CONVERTER
+  HTLATEX_COMPILER
+)
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+find_package_handle_standard_args(LATEX
+  REQUIRED_VARS LATEX_COMPILER
+  HANDLE_COMPONENTS
+)
diff --git a/share/cmake-3.22/Modules/FindLTTngUST.cmake b/share/cmake-3.22/Modules/FindLTTngUST.cmake
new file mode 100644
index 0000000..f478e4d
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindLTTngUST.cmake
@@ -0,0 +1,102 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindLTTngUST
+------------
+
+.. versionadded:: 3.6
+
+Find
+`Linux Trace Toolkit Next Generation (LTTng-UST) <http://lttng.org/>`__ library.
+
+Imported target
+^^^^^^^^^^^^^^^
+
+This module defines the following :prop_tgt:`IMPORTED` target:
+
+``LTTng::UST``
+  The LTTng-UST library, if found
+
+Result variables
+^^^^^^^^^^^^^^^^
+
+This module sets the following
+
+``LTTNGUST_FOUND``
+  ``TRUE`` if system has LTTng-UST
+``LTTNGUST_INCLUDE_DIRS``
+  The LTTng-UST include directories
+``LTTNGUST_LIBRARIES``
+  The libraries needed to use LTTng-UST
+``LTTNGUST_VERSION_STRING``
+  The LTTng-UST version
+``LTTNGUST_HAS_TRACEF``
+  ``TRUE`` if the ``tracef()`` API is available in the system's LTTng-UST
+``LTTNGUST_HAS_TRACELOG``
+  ``TRUE`` if the ``tracelog()`` API is available in the system's LTTng-UST
+#]=======================================================================]
+
+find_path(LTTNGUST_INCLUDE_DIRS NAMES lttng/tracepoint.h)
+find_library(LTTNGUST_LIBRARIES NAMES lttng-ust)
+
+if(LTTNGUST_INCLUDE_DIRS AND LTTNGUST_LIBRARIES)
+  # find tracef() and tracelog() support
+  set(LTTNGUST_HAS_TRACEF 0)
+  set(LTTNGUST_HAS_TRACELOG 0)
+
+  if(EXISTS "${LTTNGUST_INCLUDE_DIRS}/lttng/tracef.h")
+    set(LTTNGUST_HAS_TRACEF TRUE)
+  endif()
+
+  if(EXISTS "${LTTNGUST_INCLUDE_DIRS}/lttng/tracelog.h")
+    set(LTTNGUST_HAS_TRACELOG TRUE)
+  endif()
+
+  # get version
+  set(lttngust_version_file "${LTTNGUST_INCLUDE_DIRS}/lttng/ust-version.h")
+
+  if(EXISTS "${lttngust_version_file}")
+    file(STRINGS "${lttngust_version_file}" lttngust_version_major_string
+         REGEX "^[\t ]*#define[\t ]+LTTNG_UST_MAJOR_VERSION[\t ]+[0-9]+[\t ]*$")
+    file(STRINGS "${lttngust_version_file}" lttngust_version_minor_string
+         REGEX "^[\t ]*#define[\t ]+LTTNG_UST_MINOR_VERSION[\t ]+[0-9]+[\t ]*$")
+    file(STRINGS "${lttngust_version_file}" lttngust_version_patch_string
+         REGEX "^[\t ]*#define[\t ]+LTTNG_UST_PATCHLEVEL_VERSION[\t ]+[0-9]+[\t ]*$")
+    string(REGEX REPLACE ".*([0-9]+).*" "\\1"
+           lttngust_v_major "${lttngust_version_major_string}")
+    string(REGEX REPLACE ".*([0-9]+).*" "\\1"
+           lttngust_v_minor "${lttngust_version_minor_string}")
+    string(REGEX REPLACE ".*([0-9]+).*" "\\1"
+           lttngust_v_patch "${lttngust_version_patch_string}")
+    set(LTTNGUST_VERSION_STRING
+        "${lttngust_v_major}.${lttngust_v_minor}.${lttngust_v_patch}")
+    unset(lttngust_version_major_string)
+    unset(lttngust_version_minor_string)
+    unset(lttngust_version_patch_string)
+    unset(lttngust_v_major)
+    unset(lttngust_v_minor)
+    unset(lttngust_v_patch)
+  endif()
+
+  unset(lttngust_version_file)
+
+  if(NOT TARGET LTTng::UST)
+    add_library(LTTng::UST UNKNOWN IMPORTED)
+    set_target_properties(LTTng::UST PROPERTIES
+      INTERFACE_INCLUDE_DIRECTORIES "${LTTNGUST_INCLUDE_DIRS}"
+      INTERFACE_LINK_LIBRARIES ${CMAKE_DL_LIBS}
+      IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+      IMPORTED_LOCATION "${LTTNGUST_LIBRARIES}")
+  endif()
+
+  # add libdl to required libraries
+  set(LTTNGUST_LIBRARIES ${LTTNGUST_LIBRARIES} ${CMAKE_DL_LIBS})
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+find_package_handle_standard_args(LTTngUST FOUND_VAR LTTNGUST_FOUND
+                                  REQUIRED_VARS LTTNGUST_LIBRARIES
+                                                LTTNGUST_INCLUDE_DIRS
+                                  VERSION_VAR LTTNGUST_VERSION_STRING)
+mark_as_advanced(LTTNGUST_LIBRARIES LTTNGUST_INCLUDE_DIRS)
diff --git a/share/cmake-3.22/Modules/FindLibArchive.cmake b/share/cmake-3.22/Modules/FindLibArchive.cmake
new file mode 100644
index 0000000..08078a2
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindLibArchive.cmake
@@ -0,0 +1,80 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindLibArchive
+--------------
+
+Find libarchive library and headers.
+Libarchive is multi-format archive and compression library.
+
+The module defines the following variables:
+
+::
+
+  LibArchive_FOUND        - true if libarchive was found
+  LibArchive_INCLUDE_DIRS - include search path
+  LibArchive_LIBRARIES    - libraries to link
+  LibArchive_VERSION      - libarchive 3-component version number
+
+The module defines the following ``IMPORTED`` targets:
+
+::
+
+  LibArchive::LibArchive  - target for linking against libarchive
+
+.. versionadded:: 3.6
+  Support for new libarchive 3.2 version string format.
+
+#]=======================================================================]
+
+find_path(LibArchive_INCLUDE_DIR
+  NAMES archive.h
+  PATHS
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\LibArchive;InstallPath]/include"
+  DOC "libarchive include directory"
+  )
+
+find_library(LibArchive_LIBRARY
+  NAMES archive libarchive
+  PATHS
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\LibArchive;InstallPath]/lib"
+  DOC "libarchive library"
+  )
+
+mark_as_advanced(LibArchive_INCLUDE_DIR LibArchive_LIBRARY)
+
+# Extract the version number from the header.
+if(LibArchive_INCLUDE_DIR AND EXISTS "${LibArchive_INCLUDE_DIR}/archive.h")
+  # The version string appears in one of three known formats in the header:
+  #  #define ARCHIVE_LIBRARY_VERSION "libarchive 2.4.12"
+  #  #define ARCHIVE_VERSION_STRING "libarchive 2.8.4"
+  #  #define ARCHIVE_VERSION_ONLY_STRING "3.2.0"
+  # Match any format.
+  set(_LibArchive_VERSION_REGEX "^#define[ \t]+ARCHIVE[_A-Z]+VERSION[_A-Z]*[ \t]+\"(libarchive +)?([0-9]+)\\.([0-9]+)\\.([0-9]+)[^\"]*\".*$")
+  file(STRINGS "${LibArchive_INCLUDE_DIR}/archive.h" _LibArchive_VERSION_STRING LIMIT_COUNT 1 REGEX "${_LibArchive_VERSION_REGEX}")
+  if(_LibArchive_VERSION_STRING)
+    string(REGEX REPLACE "${_LibArchive_VERSION_REGEX}" "\\2.\\3.\\4" LibArchive_VERSION "${_LibArchive_VERSION_STRING}")
+  endif()
+  unset(_LibArchive_VERSION_REGEX)
+  unset(_LibArchive_VERSION_STRING)
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+find_package_handle_standard_args(LibArchive
+                                  REQUIRED_VARS LibArchive_LIBRARY LibArchive_INCLUDE_DIR
+                                  VERSION_VAR LibArchive_VERSION
+  )
+unset(LIBARCHIVE_FOUND)
+
+if(LibArchive_FOUND)
+  set(LibArchive_INCLUDE_DIRS ${LibArchive_INCLUDE_DIR})
+  set(LibArchive_LIBRARIES    ${LibArchive_LIBRARY})
+
+  if (NOT TARGET LibArchive::LibArchive)
+    add_library(LibArchive::LibArchive UNKNOWN IMPORTED)
+    set_target_properties(LibArchive::LibArchive PROPERTIES
+      IMPORTED_LOCATION "${LibArchive_LIBRARY}"
+      INTERFACE_INCLUDE_DIRECTORIES "${LibArchive_INCLUDE_DIR}")
+  endif ()
+endif()
diff --git a/share/cmake-3.22/Modules/FindLibLZMA.cmake b/share/cmake-3.22/Modules/FindLibLZMA.cmake
new file mode 100644
index 0000000..9ec8f07
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindLibLZMA.cmake
@@ -0,0 +1,126 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindLibLZMA
+-----------
+
+Find LZMA compression algorithm headers and library.
+
+
+Imported Targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.14
+
+This module defines :prop_tgt:`IMPORTED` target ``LibLZMA::LibLZMA``, if
+liblzma has been found.
+
+Result variables
+^^^^^^^^^^^^^^^^
+
+This module will set the following variables in your project:
+
+``LIBLZMA_FOUND``
+  True if liblzma headers and library were found.
+``LIBLZMA_INCLUDE_DIRS``
+  Directory where liblzma headers are located.
+``LIBLZMA_LIBRARIES``
+  Lzma libraries to link against.
+``LIBLZMA_HAS_AUTO_DECODER``
+  True if lzma_auto_decoder() is found (required).
+``LIBLZMA_HAS_EASY_ENCODER``
+  True if lzma_easy_encoder() is found (required).
+``LIBLZMA_HAS_LZMA_PRESET``
+  True if lzma_lzma_preset() is found (required).
+``LIBLZMA_VERSION_MAJOR``
+  The major version of lzma
+``LIBLZMA_VERSION_MINOR``
+  The minor version of lzma
+``LIBLZMA_VERSION_PATCH``
+  The patch version of lzma
+``LIBLZMA_VERSION_STRING``
+  version number as a string (ex: "5.0.3")
+#]=======================================================================]
+
+find_path(LIBLZMA_INCLUDE_DIR lzma.h )
+if(NOT LIBLZMA_LIBRARY)
+  find_library(LIBLZMA_LIBRARY_RELEASE NAMES lzma liblzma NAMES_PER_DIR PATH_SUFFIXES lib)
+  find_library(LIBLZMA_LIBRARY_DEBUG NAMES lzmad liblzmad NAMES_PER_DIR PATH_SUFFIXES lib)
+  include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
+  select_library_configurations(LIBLZMA)
+else()
+  file(TO_CMAKE_PATH "${LIBLZMA_LIBRARY}" LIBLZMA_LIBRARY)
+endif()
+
+if(LIBLZMA_INCLUDE_DIR AND EXISTS "${LIBLZMA_INCLUDE_DIR}/lzma/version.h")
+    file(STRINGS "${LIBLZMA_INCLUDE_DIR}/lzma/version.h" LIBLZMA_HEADER_CONTENTS REGEX "#define LZMA_VERSION_[A-Z]+ [0-9]+")
+
+    string(REGEX REPLACE ".*#define LZMA_VERSION_MAJOR ([0-9]+).*" "\\1" LIBLZMA_VERSION_MAJOR "${LIBLZMA_HEADER_CONTENTS}")
+    string(REGEX REPLACE ".*#define LZMA_VERSION_MINOR ([0-9]+).*" "\\1" LIBLZMA_VERSION_MINOR "${LIBLZMA_HEADER_CONTENTS}")
+    string(REGEX REPLACE ".*#define LZMA_VERSION_PATCH ([0-9]+).*" "\\1" LIBLZMA_VERSION_PATCH "${LIBLZMA_HEADER_CONTENTS}")
+
+    set(LIBLZMA_VERSION_STRING "${LIBLZMA_VERSION_MAJOR}.${LIBLZMA_VERSION_MINOR}.${LIBLZMA_VERSION_PATCH}")
+    unset(LIBLZMA_HEADER_CONTENTS)
+endif()
+
+# We're using new code known now as XZ, even library still been called LZMA
+# it can be found in http://tukaani.org/xz/
+# Avoid using old codebase
+if (LIBLZMA_LIBRARY)
+  include(${CMAKE_CURRENT_LIST_DIR}/CheckLibraryExists.cmake)
+  set(CMAKE_REQUIRED_QUIET_SAVE ${CMAKE_REQUIRED_QUIET})
+  set(CMAKE_REQUIRED_QUIET ${LibLZMA_FIND_QUIETLY})
+  if(NOT LIBLZMA_LIBRARY_RELEASE AND NOT LIBLZMA_LIBRARY_DEBUG)
+    set(LIBLZMA_LIBRARY_check ${LIBLZMA_LIBRARY})
+  elseif(LIBLZMA_LIBRARY_RELEASE)
+    set(LIBLZMA_LIBRARY_check ${LIBLZMA_LIBRARY_RELEASE})
+  elseif(LIBLZMA_LIBRARY_DEBUG)
+    set(LIBLZMA_LIBRARY_check ${LIBLZMA_LIBRARY_DEBUG})
+  endif()
+  CHECK_LIBRARY_EXISTS(${LIBLZMA_LIBRARY_check} lzma_auto_decoder "" LIBLZMA_HAS_AUTO_DECODER)
+  CHECK_LIBRARY_EXISTS(${LIBLZMA_LIBRARY_check} lzma_easy_encoder "" LIBLZMA_HAS_EASY_ENCODER)
+  CHECK_LIBRARY_EXISTS(${LIBLZMA_LIBRARY_check} lzma_lzma_preset "" LIBLZMA_HAS_LZMA_PRESET)
+  unset(LIBLZMA_LIBRARY_check)
+  set(CMAKE_REQUIRED_QUIET ${CMAKE_REQUIRED_QUIET_SAVE})
+endif ()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+find_package_handle_standard_args(LibLZMA  REQUIRED_VARS  LIBLZMA_LIBRARY
+                                                          LIBLZMA_INCLUDE_DIR
+                                                          LIBLZMA_HAS_AUTO_DECODER
+                                                          LIBLZMA_HAS_EASY_ENCODER
+                                                          LIBLZMA_HAS_LZMA_PRESET
+                                           VERSION_VAR    LIBLZMA_VERSION_STRING
+                                 )
+mark_as_advanced( LIBLZMA_INCLUDE_DIR LIBLZMA_LIBRARY )
+
+if (LIBLZMA_FOUND)
+    set(LIBLZMA_LIBRARIES ${LIBLZMA_LIBRARY})
+    set(LIBLZMA_INCLUDE_DIRS ${LIBLZMA_INCLUDE_DIR})
+    if(NOT TARGET LibLZMA::LibLZMA)
+        add_library(LibLZMA::LibLZMA UNKNOWN IMPORTED)
+        set_target_properties(LibLZMA::LibLZMA PROPERTIES
+                              INTERFACE_INCLUDE_DIRECTORIES ${LIBLZMA_INCLUDE_DIR}
+                              IMPORTED_LINK_INTERFACE_LANGUAGES C)
+
+        if(LIBLZMA_LIBRARY_RELEASE)
+            set_property(TARGET LibLZMA::LibLZMA APPEND PROPERTY
+                IMPORTED_CONFIGURATIONS RELEASE)
+            set_target_properties(LibLZMA::LibLZMA PROPERTIES
+                IMPORTED_LOCATION_RELEASE "${LIBLZMA_LIBRARY_RELEASE}")
+        endif()
+
+        if(LIBLZMA_LIBRARY_DEBUG)
+            set_property(TARGET LibLZMA::LibLZMA APPEND PROPERTY
+                IMPORTED_CONFIGURATIONS DEBUG)
+            set_target_properties(LibLZMA::LibLZMA PROPERTIES
+                IMPORTED_LOCATION_DEBUG "${LIBLZMA_LIBRARY_DEBUG}")
+        endif()
+
+        if(NOT LIBLZMA_LIBRARY_RELEASE AND NOT LIBLZMA_LIBRARY_DEBUG)
+            set_target_properties(LibLZMA::LibLZMA PROPERTIES
+                IMPORTED_LOCATION "${LIBLZMA_LIBRARY}")
+        endif()
+    endif()
+endif ()
diff --git a/share/cmake-3.22/Modules/FindLibXml2.cmake b/share/cmake-3.22/Modules/FindLibXml2.cmake
new file mode 100644
index 0000000..ce28d03
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindLibXml2.cmake
@@ -0,0 +1,124 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindLibXml2
+-----------
+
+Find the XML processing library (libxml2).
+
+IMPORTED Targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.12
+
+The following :prop_tgt:`IMPORTED` targets may be defined:
+
+``LibXml2::LibXml2``
+  libxml2 library.
+``LibXml2::xmllint``
+  .. versionadded:: 3.17
+
+  xmllint command-line executable.
+
+Result variables
+^^^^^^^^^^^^^^^^
+
+This module will set the following variables in your project:
+
+``LibXml2_FOUND``
+  true if libxml2 headers and libraries were found
+``LIBXML2_INCLUDE_DIR``
+  the directory containing LibXml2 headers
+``LIBXML2_INCLUDE_DIRS``
+  list of the include directories needed to use LibXml2
+``LIBXML2_LIBRARIES``
+  LibXml2 libraries to be linked
+``LIBXML2_DEFINITIONS``
+  the compiler switches required for using LibXml2
+``LIBXML2_XMLLINT_EXECUTABLE``
+  path to the XML checking tool xmllint coming with LibXml2
+``LIBXML2_VERSION_STRING``
+  the version of LibXml2 found (since CMake 2.8.8)
+
+Cache variables
+^^^^^^^^^^^^^^^
+
+The following cache variables may also be set:
+
+``LIBXML2_INCLUDE_DIR``
+  the directory containing LibXml2 headers
+``LIBXML2_LIBRARY``
+  path to the LibXml2 library
+#]=======================================================================]
+
+# use pkg-config to get the directories and then use these values
+# in the find_path() and find_library() calls
+find_package(PkgConfig QUIET)
+PKG_CHECK_MODULES(PC_LIBXML QUIET libxml-2.0)
+
+find_path(LIBXML2_INCLUDE_DIR NAMES libxml/xpath.h
+   HINTS
+   ${PC_LIBXML_INCLUDEDIR}
+   ${PC_LIBXML_INCLUDE_DIRS}
+   PATH_SUFFIXES libxml2
+   )
+
+# CMake 3.9 and below used 'LIBXML2_LIBRARIES' as the name of
+# the cache entry storing the find_library result.  Use the
+# value if it was set by the project or user.
+if(DEFINED LIBXML2_LIBRARIES AND NOT DEFINED LIBXML2_LIBRARY)
+  set(LIBXML2_LIBRARY ${LIBXML2_LIBRARIES})
+endif()
+
+find_library(LIBXML2_LIBRARY NAMES xml2 libxml2 libxml2_a
+   HINTS
+   ${PC_LIBXML_LIBDIR}
+   ${PC_LIBXML_LIBRARY_DIRS}
+   )
+
+find_program(LIBXML2_XMLLINT_EXECUTABLE xmllint)
+# for backwards compat. with KDE 4.0.x:
+set(XMLLINT_EXECUTABLE "${LIBXML2_XMLLINT_EXECUTABLE}")
+
+if(LIBXML2_INCLUDE_DIR AND EXISTS "${LIBXML2_INCLUDE_DIR}/libxml/xmlversion.h")
+    file(STRINGS "${LIBXML2_INCLUDE_DIR}/libxml/xmlversion.h" libxml2_version_str
+         REGEX "^#define[\t ]+LIBXML_DOTTED_VERSION[\t ]+\".*\"")
+
+    string(REGEX REPLACE "^#define[\t ]+LIBXML_DOTTED_VERSION[\t ]+\"([^\"]*)\".*" "\\1"
+           LIBXML2_VERSION_STRING "${libxml2_version_str}")
+    unset(libxml2_version_str)
+endif()
+
+set(LIBXML2_INCLUDE_DIRS ${LIBXML2_INCLUDE_DIR})
+set(LIBXML2_LIBRARIES ${LIBXML2_LIBRARY})
+
+# Did we find the same installation as pkg-config?
+# If so, use additional information from it.
+unset(LIBXML2_DEFINITIONS)
+foreach(libxml2_pc_lib_dir IN LISTS PC_LIBXML_LIBDIR PC_LIBXML_LIBRARY_DIRS)
+  if (LIBXML2_LIBRARY MATCHES "^${libxml2_pc_lib_dir}")
+    list(APPEND LIBXML2_INCLUDE_DIRS ${PC_LIBXML_INCLUDE_DIRS})
+    set(LIBXML2_DEFINITIONS ${PC_LIBXML_CFLAGS_OTHER})
+    break()
+  endif()
+endforeach()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibXml2
+                                  REQUIRED_VARS LIBXML2_LIBRARY LIBXML2_INCLUDE_DIR
+                                  VERSION_VAR LIBXML2_VERSION_STRING)
+
+mark_as_advanced(LIBXML2_INCLUDE_DIR LIBXML2_LIBRARY LIBXML2_XMLLINT_EXECUTABLE)
+
+if(LibXml2_FOUND AND NOT TARGET LibXml2::LibXml2)
+  add_library(LibXml2::LibXml2 UNKNOWN IMPORTED)
+  set_target_properties(LibXml2::LibXml2 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LIBXML2_INCLUDE_DIRS}")
+  set_target_properties(LibXml2::LibXml2 PROPERTIES INTERFACE_COMPILE_OPTIONS "${LIBXML2_DEFINITIONS}")
+  set_property(TARGET LibXml2::LibXml2 APPEND PROPERTY IMPORTED_LOCATION "${LIBXML2_LIBRARY}")
+endif()
+
+if(LIBXML2_XMLLINT_EXECUTABLE AND NOT TARGET LibXml2::xmllint)
+  add_executable(LibXml2::xmllint IMPORTED)
+  set_target_properties(LibXml2::xmllint PROPERTIES IMPORTED_LOCATION "${LIBXML2_XMLLINT_EXECUTABLE}")
+endif()
diff --git a/share/cmake-3.22/Modules/FindLibXslt.cmake b/share/cmake-3.22/Modules/FindLibXslt.cmake
new file mode 100644
index 0000000..97943d6
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindLibXslt.cmake
@@ -0,0 +1,134 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindLibXslt
+-----------
+
+Find the XSL Transformations, Extensible Stylesheet Language
+Transformations (XSLT) library (LibXslt)
+
+IMPORTED Targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.18
+
+The following :prop_tgt:`IMPORTED` targets may be defined:
+
+``LibXslt::LibXslt``
+  If the libxslt library has been found
+``LibXslt::LibExslt``
+  If the libexslt library has been found
+``LibXslt::xsltproc``
+  If the xsltproc command-line executable has been found
+
+Result variables
+^^^^^^^^^^^^^^^^
+
+This module will set the following variables in your project:
+
+  LIBXSLT_FOUND - system has LibXslt
+  LIBXSLT_INCLUDE_DIR - the LibXslt include directory
+  LIBXSLT_LIBRARIES - Link these to LibXslt
+  LIBXSLT_DEFINITIONS - Compiler switches required for using LibXslt
+  LIBXSLT_VERSION_STRING - version of LibXslt found (since CMake 2.8.8)
+
+Additionally, the following two variables are set (but not required
+for using xslt):
+
+``LIBXSLT_EXSLT_INCLUDE_DIR``
+  .. versionadded:: 3.18
+    The include directory for exslt.
+``LIBXSLT_EXSLT_LIBRARIES``
+  Link to these if you need to link against the exslt library.
+``LIBXSLT_XSLTPROC_EXECUTABLE``
+  Contains the full path to the xsltproc executable if found.
+#]=======================================================================]
+
+# use pkg-config to get the directories and then use these values
+# in the find_path() and find_library() calls
+find_package(PkgConfig QUIET)
+PKG_CHECK_MODULES(PC_LIBXSLT QUIET libxslt)
+set(LIBXSLT_DEFINITIONS ${PC_LIBXSLT_CFLAGS_OTHER})
+
+find_path(LIBXSLT_INCLUDE_DIR NAMES libxslt/xslt.h
+    HINTS
+   ${PC_LIBXSLT_INCLUDEDIR}
+   ${PC_LIBXSLT_INCLUDE_DIRS}
+  )
+
+# CMake 3.17 and below used 'LIBXSLT_LIBRARIES' as the name of
+# the cache entry storing the find_library result.  Use the
+# value if it was set by the project or user.
+if(DEFINED LIBXSLT_LIBRARIES AND NOT DEFINED LIBXSLT_LIBRARY)
+  set(LIBXSLT_LIBRARY ${LIBXSLT_LIBRARIES})
+endif()
+
+find_library(LIBXSLT_LIBRARY NAMES xslt libxslt
+    HINTS
+   ${PC_LIBXSLT_LIBDIR}
+   ${PC_LIBXSLT_LIBRARY_DIRS}
+  )
+
+set(LIBXSLT_LIBRARIES ${LIBXSLT_LIBRARY})
+
+PKG_CHECK_MODULES(PC_LIBXSLT_EXSLT QUIET libexslt)
+set(LIBXSLT_EXSLT_DEFINITIONS ${PC_LIBXSLT_EXSLT_CFLAGS_OTHER})
+
+find_path(LIBXSLT_EXSLT_INCLUDE_DIR NAMES libexslt/exslt.h
+  HINTS
+  ${PC_LIBXSLT_EXSLT_INCLUDEDIR}
+  ${PC_LIBXSLT_EXSLT_INCLUDE_DIRS}
+)
+
+find_library(LIBXSLT_EXSLT_LIBRARY NAMES exslt libexslt
+    HINTS
+    ${PC_LIBXSLT_LIBDIR}
+    ${PC_LIBXSLT_LIBRARY_DIRS}
+    ${PC_LIBXSLT_EXSLT_LIBDIR}
+    ${PC_LIBXSLT_EXSLT_LIBRARY_DIRS}
+  )
+
+set(LIBXSLT_EXSLT_LIBRARIES ${LIBXSLT_EXSLT_LIBRARY} )
+
+find_program(LIBXSLT_XSLTPROC_EXECUTABLE xsltproc)
+
+if(PC_LIBXSLT_VERSION)
+    set(LIBXSLT_VERSION_STRING ${PC_LIBXSLT_VERSION})
+elseif(LIBXSLT_INCLUDE_DIR AND EXISTS "${LIBXSLT_INCLUDE_DIR}/libxslt/xsltconfig.h")
+    file(STRINGS "${LIBXSLT_INCLUDE_DIR}/libxslt/xsltconfig.h" libxslt_version_str
+         REGEX "^#define[\t ]+LIBXSLT_DOTTED_VERSION[\t ]+\".*\"")
+
+    string(REGEX REPLACE "^#define[\t ]+LIBXSLT_DOTTED_VERSION[\t ]+\"([^\"]*)\".*" "\\1"
+           LIBXSLT_VERSION_STRING "${libxslt_version_str}")
+    unset(libxslt_version_str)
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibXslt
+                                  REQUIRED_VARS LIBXSLT_LIBRARIES LIBXSLT_INCLUDE_DIR
+                                  VERSION_VAR LIBXSLT_VERSION_STRING)
+
+mark_as_advanced(LIBXSLT_INCLUDE_DIR
+                 LIBXSLT_LIBRARIES
+                 LIBXSLT_EXSLT_LIBRARY
+                 LIBXSLT_XSLTPROC_EXECUTABLE)
+
+if(LIBXSLT_FOUND AND NOT TARGET LibXslt::LibXslt)
+  add_library(LibXslt::LibXslt UNKNOWN IMPORTED)
+  set_target_properties(LibXslt::LibXslt PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LIBXSLT_INCLUDE_DIR}")
+  set_target_properties(LibXslt::LibXslt PROPERTIES INTERFACE_COMPILE_OPTIONS "${LIBXSLT_DEFINITIONS}")
+  set_property(TARGET LibXslt::LibXslt APPEND PROPERTY IMPORTED_LOCATION "${LIBXSLT_LIBRARY}")
+endif()
+
+if(LIBXSLT_FOUND AND NOT TARGET LibXslt::LibExslt)
+  add_library(LibXslt::LibExslt UNKNOWN IMPORTED)
+  set_target_properties(LibXslt::LibExslt PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LIBXSLT_EXSLT_INCLUDE_DIR}")
+  set_target_properties(LibXslt::LibExslt PROPERTIES INTERFACE_COMPILE_OPTIONS "${LIBXSLT_EXSLT_DEFINITIONS}")
+  set_property(TARGET LibXslt::LibExslt APPEND PROPERTY IMPORTED_LOCATION "${LIBXSLT_EXSLT_LIBRARY}")
+endif()
+
+if(LIBXSLT_XSLTPROC_EXECUTABLE AND NOT TARGET LibXslt::xsltproc)
+  add_executable(LibXslt::xsltproc IMPORTED)
+  set_target_properties(LibXslt::xsltproc PROPERTIES IMPORTED_LOCATION "${LIBXSLT_XSLTPROC_EXECUTABLE}")
+endif()
diff --git a/share/cmake-3.22/Modules/FindLibinput.cmake b/share/cmake-3.22/Modules/FindLibinput.cmake
new file mode 100644
index 0000000..88d5b2f
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindLibinput.cmake
@@ -0,0 +1,84 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindLibinput
+------------
+
+.. versionadded:: 3.14
+
+Find libinput headers and library.
+
+Imported Targets
+^^^^^^^^^^^^^^^^
+
+``Libinput::Libinput``
+  The libinput library, if found.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This will define the following variables in your project:
+
+``Libinput_FOUND``
+  true if (the requested version of) libinput is available.
+``Libinput_VERSION``
+  the version of libinput.
+``Libinput_LIBRARIES``
+  the libraries to link against to use libinput.
+``Libinput_INCLUDE_DIRS``
+  where to find the libinput headers.
+``Libinput_COMPILE_OPTIONS``
+  this should be passed to target_compile_options(), if the
+  target is not used for linking
+
+#]=======================================================================]
+
+
+# Use pkg-config to get the directories and then use these values
+# in the FIND_PATH() and FIND_LIBRARY() calls
+find_package(PkgConfig QUIET)
+pkg_check_modules(PKG_Libinput QUIET libinput)
+
+set(Libinput_COMPILE_OPTIONS ${PKG_Libinput_CFLAGS_OTHER})
+set(Libinput_VERSION ${PKG_Libinput_VERSION})
+
+find_path(Libinput_INCLUDE_DIR
+  NAMES
+    libinput.h
+  HINTS
+    ${PKG_Libinput_INCLUDE_DIRS}
+)
+find_library(Libinput_LIBRARY
+  NAMES
+    input
+  HINTS
+    ${PKG_Libinput_LIBRARY_DIRS}
+)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Libinput
+  FOUND_VAR
+    Libinput_FOUND
+  REQUIRED_VARS
+    Libinput_LIBRARY
+    Libinput_INCLUDE_DIR
+  VERSION_VAR
+    Libinput_VERSION
+)
+
+if(Libinput_FOUND AND NOT TARGET Libinput::Libinput)
+  add_library(Libinput::Libinput UNKNOWN IMPORTED)
+  set_target_properties(Libinput::Libinput PROPERTIES
+    IMPORTED_LOCATION "${Libinput_LIBRARY}"
+    INTERFACE_COMPILE_OPTIONS "${Libinput_COMPILE_OPTIONS}"
+    INTERFACE_INCLUDE_DIRECTORIES "${Libinput_INCLUDE_DIR}"
+  )
+endif()
+
+mark_as_advanced(Libinput_LIBRARY Libinput_INCLUDE_DIR)
+
+if(Libinput_FOUND)
+  set(Libinput_LIBRARIES ${Libinput_LIBRARY})
+  set(Libinput_INCLUDE_DIRS ${Libinput_INCLUDE_DIR})
+endif()
diff --git a/share/cmake-3.22/Modules/FindLua.cmake b/share/cmake-3.22/Modules/FindLua.cmake
new file mode 100644
index 0000000..32642fe
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindLua.cmake
@@ -0,0 +1,239 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindLua
+-------
+
+Locate Lua library.
+
+.. versionadded:: 3.18
+  Support for Lua 5.4.
+
+This module defines::
+
+::
+
+  LUA_FOUND          - if false, do not try to link to Lua
+  LUA_LIBRARIES      - both lua and lualib
+  LUA_INCLUDE_DIR    - where to find lua.h
+  LUA_VERSION_STRING - the version of Lua found
+  LUA_VERSION_MAJOR  - the major version of Lua
+  LUA_VERSION_MINOR  - the minor version of Lua
+  LUA_VERSION_PATCH  - the patch version of Lua
+
+
+
+Note that the expected include convention is
+
+::
+
+  #include "lua.h"
+
+and not
+
+::
+
+  #include <lua/lua.h>
+
+This is because, the lua location is not standardized and may exist in
+locations other than lua/
+#]=======================================================================]
+
+cmake_policy(PUSH)  # Policies apply to functions at definition-time
+cmake_policy(SET CMP0012 NEW)  # For while(TRUE)
+
+unset(_lua_include_subdirs)
+unset(_lua_library_names)
+unset(_lua_append_versions)
+
+# this is a function only to have all the variables inside go away automatically
+function(_lua_get_versions)
+    set(LUA_VERSIONS5 5.4 5.3 5.2 5.1 5.0)
+
+    if (Lua_FIND_VERSION_EXACT)
+        if (Lua_FIND_VERSION_COUNT GREATER 1)
+            set(_lua_append_versions ${Lua_FIND_VERSION_MAJOR}.${Lua_FIND_VERSION_MINOR})
+        endif ()
+    elseif (Lua_FIND_VERSION)
+        # once there is a different major version supported this should become a loop
+        if (NOT Lua_FIND_VERSION_MAJOR GREATER 5)
+            if (Lua_FIND_VERSION_COUNT EQUAL 1)
+                set(_lua_append_versions ${LUA_VERSIONS5})
+            else ()
+                foreach (subver IN LISTS LUA_VERSIONS5)
+                    if (NOT subver VERSION_LESS ${Lua_FIND_VERSION})
+                        list(APPEND _lua_append_versions ${subver})
+                    endif ()
+                endforeach ()
+                # New version -> Search for it (heuristic only! Defines in include might have changed)
+                if (NOT _lua_append_versions)
+                    set(_lua_append_versions ${Lua_FIND_VERSION_MAJOR}.${Lua_FIND_VERSION_MINOR})
+                endif()
+            endif ()
+        endif ()
+    else ()
+        # once there is a different major version supported this should become a loop
+        set(_lua_append_versions ${LUA_VERSIONS5})
+    endif ()
+
+    if (LUA_Debug)
+        message(STATUS "Considering following Lua versions: ${_lua_append_versions}")
+    endif()
+
+    set(_lua_append_versions "${_lua_append_versions}" PARENT_SCOPE)
+endfunction()
+
+function(_lua_set_version_vars)
+  set(_lua_include_subdirs_raw "lua")
+
+  foreach (ver IN LISTS _lua_append_versions)
+    string(REGEX MATCH "^([0-9]+)\\.([0-9]+)$" _ver "${ver}")
+    list(APPEND _lua_include_subdirs_raw
+        lua${CMAKE_MATCH_1}${CMAKE_MATCH_2}
+        lua${CMAKE_MATCH_1}.${CMAKE_MATCH_2}
+        lua-${CMAKE_MATCH_1}.${CMAKE_MATCH_2}
+        )
+  endforeach ()
+
+  # Prepend "include/" to each path directly after the path
+  set(_lua_include_subdirs "include")
+  foreach (dir IN LISTS _lua_include_subdirs_raw)
+    list(APPEND _lua_include_subdirs "${dir}" "include/${dir}")
+  endforeach ()
+
+  set(_lua_include_subdirs "${_lua_include_subdirs}" PARENT_SCOPE)
+endfunction(_lua_set_version_vars)
+
+function(_lua_get_header_version)
+  unset(LUA_VERSION_STRING PARENT_SCOPE)
+  set(_hdr_file "${LUA_INCLUDE_DIR}/lua.h")
+
+  if (NOT EXISTS "${_hdr_file}")
+    return()
+  endif ()
+
+  # At least 5.[012] have different ways to express the version
+  # so all of them need to be tested. Lua 5.2 defines LUA_VERSION
+  # and LUA_RELEASE as joined by the C preprocessor, so avoid those.
+  file(STRINGS "${_hdr_file}" lua_version_strings
+       REGEX "^#define[ \t]+LUA_(RELEASE[ \t]+\"Lua [0-9]|VERSION([ \t]+\"Lua [0-9]|_[MR])).*")
+
+  string(REGEX REPLACE ".*;#define[ \t]+LUA_VERSION_MAJOR[ \t]+\"([0-9])\"[ \t]*;.*" "\\1" LUA_VERSION_MAJOR ";${lua_version_strings};")
+  if (LUA_VERSION_MAJOR MATCHES "^[0-9]+$")
+    string(REGEX REPLACE ".*;#define[ \t]+LUA_VERSION_MINOR[ \t]+\"([0-9])\"[ \t]*;.*" "\\1" LUA_VERSION_MINOR ";${lua_version_strings};")
+    string(REGEX REPLACE ".*;#define[ \t]+LUA_VERSION_RELEASE[ \t]+\"([0-9])\"[ \t]*;.*" "\\1" LUA_VERSION_PATCH ";${lua_version_strings};")
+    set(LUA_VERSION_STRING "${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}.${LUA_VERSION_PATCH}")
+  else ()
+    string(REGEX REPLACE ".*;#define[ \t]+LUA_RELEASE[ \t]+\"Lua ([0-9.]+)\"[ \t]*;.*" "\\1" LUA_VERSION_STRING ";${lua_version_strings};")
+    if (NOT LUA_VERSION_STRING MATCHES "^[0-9.]+$")
+      string(REGEX REPLACE ".*;#define[ \t]+LUA_VERSION[ \t]+\"Lua ([0-9.]+)\"[ \t]*;.*" "\\1" LUA_VERSION_STRING ";${lua_version_strings};")
+    endif ()
+    string(REGEX REPLACE "^([0-9]+)\\.[0-9.]*$" "\\1" LUA_VERSION_MAJOR "${LUA_VERSION_STRING}")
+    string(REGEX REPLACE "^[0-9]+\\.([0-9]+)[0-9.]*$" "\\1" LUA_VERSION_MINOR "${LUA_VERSION_STRING}")
+    string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]).*" "\\1" LUA_VERSION_PATCH "${LUA_VERSION_STRING}")
+  endif ()
+  foreach (ver IN LISTS _lua_append_versions)
+    if (ver STREQUAL "${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}")
+      set(LUA_VERSION_MAJOR ${LUA_VERSION_MAJOR} PARENT_SCOPE)
+      set(LUA_VERSION_MINOR ${LUA_VERSION_MINOR} PARENT_SCOPE)
+      set(LUA_VERSION_PATCH ${LUA_VERSION_PATCH} PARENT_SCOPE)
+      set(LUA_VERSION_STRING ${LUA_VERSION_STRING} PARENT_SCOPE)
+      return()
+    endif ()
+  endforeach ()
+endfunction(_lua_get_header_version)
+
+function(_lua_find_header)
+  _lua_set_version_vars()
+
+  # Initialize as local variable
+  set(CMAKE_IGNORE_PATH ${CMAKE_IGNORE_PATH})
+  while (TRUE)
+    # Find the next header to test. Check each possible subdir in order
+    # This prefers e.g. higher versions as they are earlier in the list
+    # It is also consistent with previous versions of FindLua
+    foreach (subdir IN LISTS _lua_include_subdirs)
+      find_path(LUA_INCLUDE_DIR lua.h
+        HINTS ENV LUA_DIR
+        PATH_SUFFIXES ${subdir}
+        )
+      if (LUA_INCLUDE_DIR)
+        break()
+      endif()
+    endforeach()
+    # Did not found header -> Fail
+    if (NOT LUA_INCLUDE_DIR)
+      return()
+    endif()
+    _lua_get_header_version()
+    # Found accepted version -> Ok
+    if (LUA_VERSION_STRING)
+      if (LUA_Debug)
+        message(STATUS "Found suitable version ${LUA_VERSION_STRING} in ${LUA_INCLUDE_DIR}/lua.h")
+      endif()
+      return()
+    endif()
+    # Found wrong version -> Ignore this path and retry
+    if (LUA_Debug)
+      message(STATUS "Ignoring unsuitable version in ${LUA_INCLUDE_DIR}")
+    endif()
+    list(APPEND CMAKE_IGNORE_PATH "${LUA_INCLUDE_DIR}")
+    unset(LUA_INCLUDE_DIR CACHE)
+    unset(LUA_INCLUDE_DIR)
+    unset(LUA_INCLUDE_DIR PARENT_SCOPE)
+  endwhile ()
+endfunction()
+
+_lua_get_versions()
+_lua_find_header()
+_lua_get_header_version()
+unset(_lua_append_versions)
+
+if (LUA_VERSION_STRING)
+  set(_lua_library_names
+    lua${LUA_VERSION_MAJOR}${LUA_VERSION_MINOR}
+    lua${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}
+    lua-${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}
+    lua.${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}
+    )
+endif ()
+
+find_library(LUA_LIBRARY
+  NAMES ${_lua_library_names} lua
+  NAMES_PER_DIR
+  HINTS
+    ENV LUA_DIR
+  PATH_SUFFIXES lib
+)
+unset(_lua_library_names)
+
+if (LUA_LIBRARY)
+  # include the math library for Unix
+  if (UNIX AND NOT APPLE AND NOT BEOS)
+    find_library(LUA_MATH_LIBRARY m)
+    mark_as_advanced(LUA_MATH_LIBRARY)
+    set(LUA_LIBRARIES "${LUA_LIBRARY};${LUA_MATH_LIBRARY}")
+
+    # include dl library for statically-linked Lua library
+    get_filename_component(LUA_LIB_EXT ${LUA_LIBRARY} EXT)
+    if(LUA_LIB_EXT STREQUAL CMAKE_STATIC_LIBRARY_SUFFIX)
+      list(APPEND LUA_LIBRARIES ${CMAKE_DL_LIBS})
+    endif()
+
+  # For Windows and Mac, don't need to explicitly include the math library
+  else ()
+    set(LUA_LIBRARIES "${LUA_LIBRARY}")
+  endif ()
+endif ()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+# handle the QUIETLY and REQUIRED arguments and set LUA_FOUND to TRUE if
+# all listed variables are TRUE
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(Lua
+                                  REQUIRED_VARS LUA_LIBRARIES LUA_INCLUDE_DIR
+                                  VERSION_VAR LUA_VERSION_STRING)
+
+mark_as_advanced(LUA_INCLUDE_DIR LUA_LIBRARY)
+
+cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/FindLua50.cmake b/share/cmake-3.22/Modules/FindLua50.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindLua50.cmake
rename to share/cmake-3.22/Modules/FindLua50.cmake
diff --git a/share/cmake-3.18/Modules/FindLua51.cmake b/share/cmake-3.22/Modules/FindLua51.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindLua51.cmake
rename to share/cmake-3.22/Modules/FindLua51.cmake
diff --git a/share/cmake-3.18/Modules/FindMFC.cmake b/share/cmake-3.22/Modules/FindMFC.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindMFC.cmake
rename to share/cmake-3.22/Modules/FindMFC.cmake
diff --git a/share/cmake-3.18/Modules/FindMPEG.cmake b/share/cmake-3.22/Modules/FindMPEG.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindMPEG.cmake
rename to share/cmake-3.22/Modules/FindMPEG.cmake
diff --git a/share/cmake-3.18/Modules/FindMPEG2.cmake b/share/cmake-3.22/Modules/FindMPEG2.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindMPEG2.cmake
rename to share/cmake-3.22/Modules/FindMPEG2.cmake
diff --git a/share/cmake-3.22/Modules/FindMPI.cmake b/share/cmake-3.22/Modules/FindMPI.cmake
new file mode 100644
index 0000000..c974d33
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindMPI.cmake
@@ -0,0 +1,1900 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindMPI
+-------
+
+Find a Message Passing Interface (MPI) implementation.
+
+The Message Passing Interface (MPI) is a library used to write
+high-performance distributed-memory parallel applications, and is
+typically deployed on a cluster.  MPI is a standard interface (defined
+by the MPI forum) for which many implementations are available.
+
+.. versionadded:: 3.10
+  Major overhaul of the module: many new variables, per-language components,
+  support for a wider variety of runtimes.
+
+Variables for using MPI
+^^^^^^^^^^^^^^^^^^^^^^^
+
+The module exposes the components ``C``, ``CXX``, ``MPICXX`` and ``Fortran``.
+Each of these controls the various MPI languages to search for.
+The difference between ``CXX`` and ``MPICXX`` is that ``CXX`` refers to the
+MPI C API being usable from C++, whereas ``MPICXX`` refers to the MPI-2 C++ API
+that was removed again in MPI-3.
+
+Depending on the enabled components the following variables will be set:
+
+``MPI_FOUND``
+  Variable indicating that MPI settings for all requested languages have been found.
+  If no components are specified, this is true if MPI settings for all enabled languages
+  were detected. Note that the ``MPICXX`` component does not affect this variable.
+``MPI_VERSION``
+  Minimal version of MPI detected among the requested languages, or all enabled languages
+  if no components were specified.
+
+This module will set the following variables per language in your
+project, where ``<lang>`` is one of C, CXX, or Fortran:
+
+``MPI_<lang>_FOUND``
+  Variable indicating the MPI settings for ``<lang>`` were found and that
+  simple MPI test programs compile with the provided settings.
+``MPI_<lang>_COMPILER``
+  MPI compiler for ``<lang>`` if such a program exists.
+``MPI_<lang>_COMPILE_OPTIONS``
+  Compilation options for MPI programs in ``<lang>``, given as a :ref:`;-list <CMake Language Lists>`.
+``MPI_<lang>_COMPILE_DEFINITIONS``
+  Compilation definitions for MPI programs in ``<lang>``, given as a :ref:`;-list <CMake Language Lists>`.
+``MPI_<lang>_INCLUDE_DIRS``
+  Include path(s) for MPI header.
+``MPI_<lang>_LINK_FLAGS``
+  Linker flags for MPI programs.
+``MPI_<lang>_LIBRARIES``
+  All libraries to link MPI programs against.
+
+.. versionadded:: 3.9
+  Additionally, the following :prop_tgt:`IMPORTED` targets are defined:
+
+``MPI::MPI_<lang>``
+  Target for using MPI from ``<lang>``.
+
+The following variables indicating which bindings are present will be defined:
+
+``MPI_MPICXX_FOUND``
+  Variable indicating whether the MPI-2 C++ bindings are present (introduced in MPI-2, removed with MPI-3).
+``MPI_Fortran_HAVE_F77_HEADER``
+  True if the Fortran 77 header ``mpif.h`` is available.
+``MPI_Fortran_HAVE_F90_MODULE``
+  True if the Fortran 90 module ``mpi`` can be used for accessing MPI (MPI-2 and higher only).
+``MPI_Fortran_HAVE_F08_MODULE``
+  True if the Fortran 2008 ``mpi_f08`` is available to MPI programs (MPI-3 and higher only).
+
+If possible, the MPI version will be determined by this module. The facilities to detect the MPI version
+were introduced with MPI-1.2, and therefore cannot be found for older MPI versions.
+
+``MPI_<lang>_VERSION_MAJOR``
+  Major version of MPI implemented for ``<lang>`` by the MPI distribution.
+``MPI_<lang>_VERSION_MINOR``
+  Minor version of MPI implemented for ``<lang>`` by the MPI distribution.
+``MPI_<lang>_VERSION``
+  MPI version implemented for ``<lang>`` by the MPI distribution.
+
+Note that there's no variable for the C bindings being accessible through ``mpi.h``, since the MPI standards
+always have required this binding to work in both C and C++ code.
+
+For running MPI programs, the module sets the following variables
+
+``MPIEXEC_EXECUTABLE``
+  Executable for running MPI programs, if such exists.
+``MPIEXEC_NUMPROC_FLAG``
+  Flag to pass to ``mpiexec`` before giving it the number of processors to run on.
+``MPIEXEC_MAX_NUMPROCS``
+  Number of MPI processors to utilize. Defaults to the number
+  of processors detected on the host system.
+``MPIEXEC_PREFLAGS``
+  Flags to pass to ``mpiexec`` directly before the executable to run.
+``MPIEXEC_POSTFLAGS``
+  Flags to pass to ``mpiexec`` after other flags.
+
+Variables for locating MPI
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+This module performs a four step search for an MPI implementation:
+
+1. Search for ``MPIEXEC_EXECUTABLE`` and, if found, use its base directory.
+2. Check if the compiler has MPI support built-in. This is the case if the user passed a
+   compiler wrapper as ``CMAKE_<LANG>_COMPILER`` or if they use Cray system compiler wrappers.
+3. Attempt to find an MPI compiler wrapper and determine the compiler information from it.
+4. Try to find an MPI implementation that does not ship such a wrapper by guessing settings.
+   Currently, only Microsoft MPI and MPICH2 on Windows are supported.
+
+For controlling the ``MPIEXEC_EXECUTABLE`` step, the following variables may be set:
+
+``MPIEXEC_EXECUTABLE``
+  Manually specify the location of ``mpiexec``.
+``MPI_HOME``
+  Specify the base directory of the MPI installation.
+``ENV{MPI_HOME}``
+  Environment variable to specify the base directory of the MPI installation.
+``ENV{I_MPI_ROOT}``
+  Environment variable to specify the base directory of the MPI installation.
+
+For controlling the compiler wrapper step, the following variables may be set:
+
+``MPI_<lang>_COMPILER``
+  Search for the specified compiler wrapper and use it.
+``MPI_<lang>_COMPILER_FLAGS``
+  Flags to pass to the MPI compiler wrapper during interrogation. Some compiler wrappers
+  support linking debug or tracing libraries if a specific flag is passed and this variable
+  may be used to obtain them.
+``MPI_COMPILER_FLAGS``
+  Used to initialize ``MPI_<lang>_COMPILER_FLAGS`` if no language specific flag has been given.
+  Empty by default.
+``MPI_EXECUTABLE_SUFFIX``
+  A suffix which is appended to all names that are being looked for. For instance you may set this
+  to ``.mpich`` or ``.openmpi`` to prefer the one or the other on Debian and its derivatives.
+
+In order to control the guessing step, the following variable may be set:
+
+``MPI_GUESS_LIBRARY_NAME``
+  Valid values are ``MSMPI`` and ``MPICH2``. If set, only the given library will be searched for.
+  By default, ``MSMPI`` will be preferred over ``MPICH2`` if both are available.
+  This also sets ``MPI_SKIP_COMPILER_WRAPPER`` to ``true``, which may be overridden.
+
+Each of the search steps may be skipped with the following control variables:
+
+``MPI_ASSUME_NO_BUILTIN_MPI``
+  If true, the module assumes that the compiler itself does not provide an MPI implementation and
+  skips to step 2.
+``MPI_SKIP_COMPILER_WRAPPER``
+  If true, no compiler wrapper will be searched for.
+``MPI_SKIP_GUESSING``
+  If true, the guessing step will be skipped.
+
+Additionally, the following control variable is available to change search behavior:
+
+``MPI_CXX_SKIP_MPICXX``
+  Add some definitions that will disable the MPI-2 C++ bindings.
+  Currently supported are MPICH, Open MPI, Platform MPI and derivatives thereof,
+  for example MVAPICH or Intel MPI.
+
+If the find procedure fails for a variable ``MPI_<lang>_WORKS``, then the settings detected by or passed to
+the module did not work and even a simple MPI test program failed to compile.
+
+If all of these parameters were not sufficient to find the right MPI implementation, a user may
+disable the entire autodetection process by specifying both a list of libraries in ``MPI_<lang>_LIBRARIES``
+and a list of include directories in ``MPI_<lang>_ADDITIONAL_INCLUDE_DIRS``.
+Any other variable may be set in addition to these two. The module will then validate the MPI settings and store the
+settings in the cache.
+
+Cache variables for MPI
+^^^^^^^^^^^^^^^^^^^^^^^
+
+The variable ``MPI_<lang>_INCLUDE_DIRS`` will be assembled from the following variables.
+For C and CXX:
+
+``MPI_<lang>_HEADER_DIR``
+  Location of the ``mpi.h`` header on disk.
+
+For Fortran:
+
+``MPI_Fortran_F77_HEADER_DIR``
+  Location of the Fortran 77 header ``mpif.h``, if it exists.
+``MPI_Fortran_MODULE_DIR``
+  Location of the ``mpi`` or ``mpi_f08`` modules, if available.
+
+For all languages the following variables are additionally considered:
+
+``MPI_<lang>_ADDITIONAL_INCLUDE_DIRS``
+  A :ref:`;-list <CMake Language Lists>` of paths needed in addition to the normal include directories.
+``MPI_<include_name>_INCLUDE_DIR``
+  Path variables for include folders referred to by ``<include_name>``.
+``MPI_<lang>_ADDITIONAL_INCLUDE_VARS``
+  A :ref:`;-list <CMake Language Lists>` of ``<include_name>`` that will be added to the include locations of ``<lang>``.
+
+The variable ``MPI_<lang>_LIBRARIES`` will be assembled from the following variables:
+
+``MPI_<lib_name>_LIBRARY``
+  The location of a library called ``<lib_name>`` for use with MPI.
+``MPI_<lang>_LIB_NAMES``
+  A :ref:`;-list <CMake Language Lists>` of ``<lib_name>`` that will be added to the include locations of ``<lang>``.
+
+Usage of mpiexec
+^^^^^^^^^^^^^^^^
+
+When using ``MPIEXEC_EXECUTABLE`` to execute MPI applications, you should typically
+use all of the ``MPIEXEC_EXECUTABLE`` flags as follows:
+
+::
+
+   ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS}
+     ${MPIEXEC_PREFLAGS} EXECUTABLE ${MPIEXEC_POSTFLAGS} ARGS
+
+where ``EXECUTABLE`` is the MPI program, and ``ARGS`` are the arguments to
+pass to the MPI program.
+
+Advanced variables for using MPI
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The module can perform some advanced feature detections upon explicit request.
+
+**Important notice:** The following checks cannot be performed without *executing* an MPI test program.
+Consider the special considerations for the behavior of :command:`try_run` during cross compilation.
+Moreover, running an MPI program can cause additional issues, like a firewall notification on some systems.
+You should only enable these detections if you absolutely need the information.
+
+If the following variables are set to true, the respective search will be performed:
+
+``MPI_DETERMINE_Fortran_CAPABILITIES``
+  Determine for all available Fortran bindings what the values of ``MPI_SUBARRAYS_SUPPORTED`` and
+  ``MPI_ASYNC_PROTECTS_NONBLOCKING`` are and make their values available as ``MPI_Fortran_<binding>_SUBARRAYS``
+  and ``MPI_Fortran_<binding>_ASYNCPROT``, where ``<binding>`` is one of ``F77_HEADER``, ``F90_MODULE`` and
+  ``F08_MODULE``.
+``MPI_DETERMINE_LIBRARY_VERSION``
+  For each language, find the output of ``MPI_Get_library_version`` and make it available as ``MPI_<lang>_LIBRARY_VERSION_STRING``.
+  This information is usually tied to the runtime component of an MPI implementation and might differ depending on ``<lang>``.
+  Note that the return value is entirely implementation defined. This information might be used to identify
+  the MPI vendor and for example pick the correct one of multiple third party binaries that matches the MPI vendor.
+
+Backward Compatibility
+^^^^^^^^^^^^^^^^^^^^^^
+
+.. deprecated:: 3.10
+
+For backward compatibility with older versions of FindMPI, these
+variables are set:
+
+::
+
+   MPI_COMPILER        MPI_LIBRARY        MPI_EXTRA_LIBRARY
+   MPI_COMPILE_FLAGS   MPI_INCLUDE_PATH   MPI_LINK_FLAGS
+   MPI_LIBRARIES
+
+In new projects, please use the ``MPI_<lang>_XXX`` equivalents.
+Additionally, the following variables are deprecated:
+
+``MPI_<lang>_COMPILE_FLAGS``
+  Use ``MPI_<lang>_COMPILE_OPTIONS`` and ``MPI_<lang>_COMPILE_DEFINITIONS`` instead.
+``MPI_<lang>_INCLUDE_PATH``
+  For consumption use ``MPI_<lang>_INCLUDE_DIRS`` and for specifying folders use ``MPI_<lang>_ADDITIONAL_INCLUDE_DIRS`` instead.
+``MPIEXEC``
+  Use ``MPIEXEC_EXECUTABLE`` instead.
+#]=======================================================================]
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0057 NEW) # if IN_LIST
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+find_package(PkgConfig QUIET)
+
+# Generic compiler names
+set(_MPI_C_GENERIC_COMPILER_NAMES          mpicc    mpcc      mpicc_r mpcc_r)
+set(_MPI_CXX_GENERIC_COMPILER_NAMES        mpicxx   mpiCC     mpcxx   mpCC    mpic++   mpc++
+                                           mpicxx_r mpiCC_r   mpcxx_r mpCC_r  mpic++_r mpc++_r)
+set(_MPI_Fortran_GENERIC_COMPILER_NAMES    mpif95   mpif95_r  mpf95   mpf95_r
+                                           mpif90   mpif90_r  mpf90   mpf90_r
+                                           mpif77   mpif77_r  mpf77   mpf77_r
+                                           mpifc)
+
+#Fujitsu cross/own compiler names
+set(_MPI_Fujitsu_C_COMPILER_NAMES        mpifccpx mpifcc)
+set(_MPI_Fujitsu_CXX_COMPILER_NAMES      mpiFCCpx mpiFCC)
+set(_MPI_Fujitsu_Fortran_COMPILER_NAMES  mpifrtpx mpifrt)
+
+# GNU compiler names
+set(_MPI_GNU_C_COMPILER_NAMES              mpigcc mpgcc mpigcc_r mpgcc_r)
+set(_MPI_GNU_CXX_COMPILER_NAMES            mpig++ mpg++ mpig++_r mpg++_r mpigxx)
+set(_MPI_GNU_Fortran_COMPILER_NAMES        mpigfortran mpgfortran mpigfortran_r mpgfortran_r
+                                           mpig77 mpig77_r mpg77 mpg77_r)
+
+# Intel MPI compiler names on Windows
+if(WIN32)
+  list(APPEND _MPI_C_GENERIC_COMPILER_NAMES       mpicc.bat)
+  list(APPEND _MPI_CXX_GENERIC_COMPILER_NAMES     mpicxx.bat)
+  list(APPEND _MPI_Fortran_GENERIC_COMPILER_NAMES mpifc.bat)
+
+  # Intel MPI compiler names
+  set(_MPI_Intel_C_COMPILER_NAMES            mpiicc.bat)
+  set(_MPI_Intel_CXX_COMPILER_NAMES          mpiicpc.bat)
+  set(_MPI_Intel_Fortran_COMPILER_NAMES      mpiifort.bat mpif77.bat mpif90.bat)
+
+  # Intel MPI compiler names
+  set(_MPI_IntelLLVM_C_COMPILER_NAMES            mpiicc.bat)
+  set(_MPI_IntelLLVM_CXX_COMPILER_NAMES          mpiicpc.bat)
+  set(_MPI_IntelLLVM_Fortran_COMPILER_NAMES      mpiifort.bat mpif77.bat mpif90.bat)
+
+  # Intel MPI compiler names for MSMPI
+  set(_MPI_MSVC_C_COMPILER_NAMES             mpicl.bat)
+  set(_MPI_MSVC_CXX_COMPILER_NAMES           mpicl.bat)
+else()
+  # Intel compiler names
+  set(_MPI_Intel_C_COMPILER_NAMES            mpiicc)
+  set(_MPI_Intel_CXX_COMPILER_NAMES          mpiicpc  mpiicxx mpiic++)
+  set(_MPI_Intel_Fortran_COMPILER_NAMES      mpiifort mpiif95 mpiif90 mpiif77)
+
+  # Intel compiler names
+  set(_MPI_IntelLLVM_C_COMPILER_NAMES            mpiicc)
+  set(_MPI_IntelLLVM_CXX_COMPILER_NAMES          mpiicpc  mpiicxx mpiic++)
+  set(_MPI_IntelLLVM_Fortran_COMPILER_NAMES      mpiifort mpiif95 mpiif90 mpiif77)
+endif()
+
+# PGI compiler names
+set(_MPI_PGI_C_COMPILER_NAMES              mpipgicc mpipgcc mppgcc)
+set(_MPI_PGI_CXX_COMPILER_NAMES            mpipgic++ mpipgCC mppgCC)
+set(_MPI_PGI_Fortran_COMPILER_NAMES        mpipgifort mpipgf95 mpipgf90 mppgf95 mppgf90 mpipgf77 mppgf77)
+
+# XLC MPI Compiler names
+set(_MPI_XL_C_COMPILER_NAMES               mpxlc      mpxlc_r    mpixlc     mpixlc_r)
+set(_MPI_XL_CXX_COMPILER_NAMES             mpixlcxx   mpixlC     mpixlc++   mpxlcxx   mpxlc++   mpixlc++   mpxlCC
+                                           mpixlcxx_r mpixlC_r   mpixlc++_r mpxlcxx_r mpxlc++_r mpixlc++_r mpxlCC_r)
+set(_MPI_XL_Fortran_COMPILER_NAMES         mpixlf95   mpixlf95_r mpxlf95 mpxlf95_r
+                                           mpixlf90   mpixlf90_r mpxlf90 mpxlf90_r
+                                           mpixlf77   mpixlf77_r mpxlf77 mpxlf77_r
+                                           mpixlf     mpixlf_r   mpxlf   mpxlf_r)
+
+# Cray Compiler names
+set(_MPI_Cray_C_COMPILER_NAMES             cc)
+set(_MPI_Cray_CXX_COMPILER_NAMES           CC)
+set(_MPI_Cray_Fortran_COMPILER_NAMES       ftn)
+
+# Prepend vendor-specific compiler wrappers to the list. If we don't know the compiler,
+# attempt all of them.
+# By attempting vendor-specific compiler names first, we should avoid situations where the compiler wrapper
+# stems from a proprietary MPI and won't know which compiler it's being used for. For instance, Intel MPI
+# controls its settings via the I_MPI_CC environment variables if the generic name is being used.
+# If we know which compiler we're working with, we can use the most specialized wrapper there is in order to
+# pick up the right settings for it.
+foreach (LANG IN ITEMS C CXX Fortran)
+  set(_MPI_${LANG}_COMPILER_NAMES "")
+  foreach (id IN ITEMS Fujitsu FujitsuClang GNU Intel IntelLLVM MSVC PGI XL)
+    if (NOT CMAKE_${LANG}_COMPILER_ID OR CMAKE_${LANG}_COMPILER_ID STREQUAL id)
+      foreach(_COMPILER_NAME IN LISTS _MPI_${id}_${LANG}_COMPILER_NAMES)
+        list(APPEND _MPI_${LANG}_COMPILER_NAMES ${_COMPILER_NAME}${MPI_EXECUTABLE_SUFFIX})
+      endforeach()
+    endif()
+    unset(_MPI_${id}_${LANG}_COMPILER_NAMES)
+  endforeach()
+  foreach(_COMPILER_NAME IN LISTS _MPI_${LANG}_GENERIC_COMPILER_NAMES)
+    list(APPEND _MPI_${LANG}_COMPILER_NAMES ${_COMPILER_NAME}${MPI_EXECUTABLE_SUFFIX})
+  endforeach()
+  unset(_MPI_${LANG}_GENERIC_COMPILER_NAMES)
+endforeach()
+
+# Names to try for mpiexec
+# Only mpiexec commands are guaranteed to behave as described in the standard,
+# mpirun commands are not covered by the standard in any way whatsoever.
+# lamexec is the executable for LAM/MPI, srun is for SLURM or Open MPI with SLURM support.
+# srun -n X <executable> is however a valid command, so it behaves 'like' mpiexec.
+set(_MPIEXEC_NAMES_BASE                   mpiexec mpiexec.hydra mpiexec.mpd mpirun lamexec srun)
+
+unset(_MPIEXEC_NAMES)
+foreach(_MPIEXEC_NAME IN LISTS _MPIEXEC_NAMES_BASE)
+  list(APPEND _MPIEXEC_NAMES "${_MPIEXEC_NAME}${MPI_EXECUTABLE_SUFFIX}")
+endforeach()
+unset(_MPIEXEC_NAMES_BASE)
+
+function (_MPI_check_compiler LANG QUERY_FLAG OUTPUT_VARIABLE RESULT_VARIABLE)
+  if(DEFINED MPI_${LANG}_COMPILER_FLAGS)
+    separate_arguments(_MPI_COMPILER_WRAPPER_OPTIONS NATIVE_COMMAND "${MPI_${LANG}_COMPILER_FLAGS}")
+  else()
+    separate_arguments(_MPI_COMPILER_WRAPPER_OPTIONS NATIVE_COMMAND "${MPI_COMPILER_FLAGS}")
+  endif()
+  execute_process(
+    COMMAND ${MPI_${LANG}_COMPILER} ${_MPI_COMPILER_WRAPPER_OPTIONS} ${QUERY_FLAG}
+    OUTPUT_VARIABLE  WRAPPER_OUTPUT OUTPUT_STRIP_TRAILING_WHITESPACE
+    ERROR_VARIABLE   WRAPPER_OUTPUT ERROR_STRIP_TRAILING_WHITESPACE
+    RESULT_VARIABLE  WRAPPER_RETURN)
+  # Some compiler wrappers will yield spurious zero return values, for example
+  # Intel MPI tolerates unknown arguments and if the MPI wrappers loads a shared
+  # library that has invalid or missing version information there would be warning
+  # messages emitted by ld.so in the compiler output. In either case, we'll treat
+  # the output as invalid.
+  if("${WRAPPER_OUTPUT}" MATCHES "undefined reference|unrecognized|need to set|no version information available|command not found")
+    set(WRAPPER_RETURN 255)
+  endif()
+  # Ensure that no error output might be passed upwards.
+  if(NOT WRAPPER_RETURN EQUAL 0)
+    unset(WRAPPER_OUTPUT)
+  else()
+    # Strip leading whitespace
+    string(REGEX REPLACE "^ +" "" WRAPPER_OUTPUT "${WRAPPER_OUTPUT}")
+  endif()
+  set(${OUTPUT_VARIABLE} "${WRAPPER_OUTPUT}" PARENT_SCOPE)
+  set(${RESULT_VARIABLE} "${WRAPPER_RETURN}" PARENT_SCOPE)
+endfunction()
+
+macro(_MPI_env_set_ifnot VAR VALUE)
+  if(NOT DEFINED ENV{${VAR}})
+    set(_MPI_${VAR}_WAS_SET FALSE)
+    set(ENV{${VAR}} ${${VALUE}})
+  else()
+    set(_MPI_${VAR}_WAS_SET TRUE)
+  endif()
+endmacro()
+
+macro(_MPI_env_unset_ifnot VAR)
+  if(NOT _MPI_${VAR}_WAS_SET)
+    unset(ENV{${VAR}})
+  endif()
+endmacro()
+
+function (_MPI_interrogate_compiler LANG)
+  unset(MPI_COMPILE_CMDLINE)
+  unset(MPI_LINK_CMDLINE)
+
+  unset(MPI_COMPILE_OPTIONS_WORK)
+  unset(MPI_COMPILE_DEFINITIONS_WORK)
+  unset(MPI_INCLUDE_DIRS_WORK)
+  unset(MPI_LINK_FLAGS_WORK)
+  unset(MPI_LIB_NAMES_WORK)
+  unset(MPI_LIB_FULLPATHS_WORK)
+
+  # Define the MPICH and Intel MPI compiler variables to the compilers set in CMake.
+  # It's possible to have a per-compiler configuration in these MPI implementations and
+  # a particular MPICH derivate might check compiler interoperability.
+  # Intel MPI in particular does this with I_MPI_CHECK_COMPILER.
+  file(TO_NATIVE_PATH "${CMAKE_${LANG}_COMPILER}" _MPI_UNDERLAYING_COMPILER)
+  # On Windows, the Intel MPI batch scripts can only work with filnames - Full paths will break them.
+  # Due to the lack of other MPICH-based wrappers for Visual C++, we may treat this as default.
+  if(MSVC)
+    get_filename_component(_MPI_UNDERLAYING_COMPILER "${_MPI_UNDERLAYING_COMPILER}" NAME)
+  endif()
+  if("${LANG}" STREQUAL "C")
+    _MPI_env_set_ifnot(I_MPI_CC _MPI_UNDERLAYING_COMPILER)
+    _MPI_env_set_ifnot(MPICH_CC _MPI_UNDERLAYING_COMPILER)
+  elseif("${LANG}" STREQUAL "CXX")
+    _MPI_env_set_ifnot(I_MPI_CXX _MPI_UNDERLAYING_COMPILER)
+    _MPI_env_set_ifnot(MPICH_CXX _MPI_UNDERLAYING_COMPILER)
+  elseif("${LANG}" STREQUAL "Fortran")
+    _MPI_env_set_ifnot(I_MPI_FC _MPI_UNDERLAYING_COMPILER)
+    _MPI_env_set_ifnot(MPICH_FC _MPI_UNDERLAYING_COMPILER)
+    _MPI_env_set_ifnot(I_MPI_F77 _MPI_UNDERLAYING_COMPILER)
+    _MPI_env_set_ifnot(MPICH_F77 _MPI_UNDERLAYING_COMPILER)
+    _MPI_env_set_ifnot(I_MPI_F90 _MPI_UNDERLAYING_COMPILER)
+    _MPI_env_set_ifnot(MPICH_F90 _MPI_UNDERLAYING_COMPILER)
+  endif()
+
+  # Set these two variables for Intel MPI:
+  #   - I_MPI_DEBUG_INFO_STRIP: It adds 'objcopy' lines to the compiler output. We support stripping them
+  #     (see below), but if we can avoid them in the first place, we should.
+  #   - I_MPI_FORT_BIND: By default Intel MPI makes the C/C++ compiler wrappers link Fortran bindings.
+  #     This is so that mixed-language code doesn't require additional libraries when linking with mpicc.
+  #     For our purposes, this makes little sense, since correct MPI usage from CMake already circumvenes this.
+  set(_MPI_ENV_VALUE "disable")
+  _MPI_env_set_ifnot(I_MPI_DEBUG_INFO_STRIP _MPI_ENV_VALUE)
+  _MPI_env_set_ifnot(I_MPI_FORT_BIND _MPI_ENV_VALUE)
+
+  # Check whether the -showme:compile option works. This indicates that we have either Open MPI
+  # or a newer version of LAM/MPI, and implies that -showme:link will also work.
+  # Open MPI also supports -show, but separates linker and compiler information
+  _MPI_check_compiler(${LANG} "-showme:compile" MPI_COMPILE_CMDLINE MPI_COMPILER_RETURN)
+  if (MPI_COMPILER_RETURN EQUAL 0)
+    _MPI_check_compiler(${LANG} "-showme:link" MPI_LINK_CMDLINE MPI_COMPILER_RETURN)
+
+    if (NOT MPI_COMPILER_RETURN EQUAL 0)
+      unset(MPI_COMPILE_CMDLINE)
+    endif()
+  endif()
+
+  # MPICH and MVAPICH offer -compile-info and -link-info.
+  # For modern versions, both do the same as -show. However, for old versions, they do differ
+  # when called for mpicxx and mpif90 and it's necessary to use them over -show in order to find the
+  # removed MPI C++ bindings.
+  if (NOT MPI_COMPILER_RETURN EQUAL 0)
+    _MPI_check_compiler(${LANG} "-compile-info" MPI_COMPILE_CMDLINE MPI_COMPILER_RETURN)
+
+    if (MPI_COMPILER_RETURN EQUAL 0)
+      _MPI_check_compiler(${LANG} "-link-info" MPI_LINK_CMDLINE MPI_COMPILER_RETURN)
+
+      if (NOT MPI_COMPILER_RETURN EQUAL 0)
+        unset(MPI_COMPILE_CMDLINE)
+      endif()
+    endif()
+  endif()
+
+  # Cray compiler wrappers come usually without a separate mpicc/c++/ftn, but offer
+  # --cray-print-opts=...
+  if (NOT MPI_COMPILER_RETURN EQUAL 0)
+    _MPI_check_compiler(${LANG} "--cray-print-opts=cflags"
+                        MPI_COMPILE_CMDLINE MPI_COMPILER_RETURN)
+
+    if (MPI_COMPILER_RETURN EQUAL 0)
+      # Pass --no-as-needed so the mpi library is always linked. Otherwise, the
+      # Cray compiler wrapper puts an --as-needed flag around the mpi library,
+      # and it is not linked unless code directly refers to it.
+      _MPI_check_compiler(${LANG} "--no-as-needed;--cray-print-opts=libs"
+                          MPI_LINK_CMDLINE MPI_COMPILER_RETURN)
+
+      if (NOT MPI_COMPILER_RETURN EQUAL 0)
+        unset(MPI_COMPILE_CMDLINE)
+        unset(MPI_LINK_CMDLINE)
+      endif()
+    endif()
+  endif()
+
+  # MPICH, MVAPICH2 and Intel MPI just use "-show". Open MPI also offers this, but the
+  # -showme commands are more specialized.
+  if (NOT MPI_COMPILER_RETURN EQUAL 0)
+    _MPI_check_compiler(${LANG} "-show" MPI_COMPILE_CMDLINE MPI_COMPILER_RETURN)
+  endif()
+
+  # Older versions of LAM/MPI have "-showme". Open MPI also supports this.
+  # Unknown to MPICH, MVAPICH and Intel MPI.
+  if (NOT MPI_COMPILER_RETURN EQUAL 0)
+    _MPI_check_compiler(${LANG} "-showme" MPI_COMPILE_CMDLINE MPI_COMPILER_RETURN)
+  endif()
+
+  if (MPI_COMPILER_RETURN EQUAL 0 AND DEFINED MPI_COMPILE_CMDLINE)
+    # Intel MPI can be run with -compchk or I_MPI_CHECK_COMPILER set to 1.
+    # In this case, -show will be prepended with a line to the compiler checker. This is a script that performs
+    # compatibility checks and returns a non-zero exit code together with an error if something fails.
+    # It has to be called as "compchk.sh <arch> <compiler>". Here, <arch> is one out of 32 (i686), 64 (ia64) or 32e (x86_64).
+    # The compiler is identified by filename, and can be either the MPI compiler or the underlying compiler.
+    # NOTE: It is vital to run this script while the environment variables are set up, otherwise it can check the wrong compiler.
+    if("${MPI_COMPILE_CMDLINE}" MATCHES "^([^\" ]+/compchk.sh|\"[^\"]+/compchk.sh\") +([^ ]+)")
+      # Now CMAKE_MATCH_1 contains the path to the compchk.sh file and CMAKE_MATCH_2 the architecture flag.
+      unset(COMPILER_CHECKER_OUTPUT)
+      execute_process(
+      COMMAND ${CMAKE_MATCH_1} ${CMAKE_MATCH_2} ${MPI_${LANG}_COMPILER}
+      OUTPUT_VARIABLE  COMPILER_CHECKER_OUTPUT OUTPUT_STRIP_TRAILING_WHITESPACE
+      ERROR_VARIABLE   COMPILER_CHECKER_OUTPUT ERROR_STRIP_TRAILING_WHITESPACE
+      RESULT_VARIABLE  MPI_COMPILER_RETURN)
+      # If it returned a non-zero value, the check below will fail and cause the interrogation to be aborted.
+      if(NOT MPI_COMPILER_RETURN EQUAL 0)
+        if(NOT MPI_FIND_QUIETLY)
+          message(STATUS "Intel MPI compiler check failed: ${COMPILER_CHECKER_OUTPUT}")
+        endif()
+      else()
+        # Since the check passed, we can remove the compchk.sh script.
+        string(REGEX REPLACE "^([^\" ]+|\"[^\"]+\")/compchk.sh.*\n" "" MPI_COMPILE_CMDLINE "${MPI_COMPILE_CMDLINE}")
+      endif()
+    endif()
+  endif()
+
+  # Revert changes to the environment made previously
+  if("${LANG}" STREQUAL "C")
+    _MPI_env_unset_ifnot(I_MPI_CC)
+    _MPI_env_unset_ifnot(MPICH_CC)
+  elseif("${LANG}" STREQUAL "CXX")
+    _MPI_env_unset_ifnot(I_MPI_CXX)
+    _MPI_env_unset_ifnot(MPICH_CXX)
+  elseif("${LANG}" STREQUAL "Fortran")
+    _MPI_env_unset_ifnot(I_MPI_FC)
+    _MPI_env_unset_ifnot(MPICH_FC)
+    _MPI_env_unset_ifnot(I_MPI_F77)
+    _MPI_env_unset_ifnot(MPICH_F77)
+    _MPI_env_unset_ifnot(I_MPI_F90)
+    _MPI_env_unset_ifnot(MPICH_F90)
+  endif()
+
+  _MPI_env_unset_ifnot(I_MPI_DEBUG_INFO_STRIP)
+  _MPI_env_unset_ifnot(I_MPI_FORT_BIND)
+
+  if (NOT (MPI_COMPILER_RETURN EQUAL 0) OR NOT (DEFINED MPI_COMPILE_CMDLINE))
+    # Cannot interrogate this compiler, so exit.
+    set(MPI_${LANG}_WRAPPER_FOUND FALSE PARENT_SCOPE)
+    return()
+  endif()
+  unset(MPI_COMPILER_RETURN)
+
+  # We have our command lines, but we might need to copy MPI_COMPILE_CMDLINE
+  # into MPI_LINK_CMDLINE, if we didn't find the link line.
+  if (NOT DEFINED MPI_LINK_CMDLINE)
+    set(MPI_LINK_CMDLINE "${MPI_COMPILE_CMDLINE}")
+  endif()
+
+  # Visual Studio parsers permit each flag prefixed by either / or -.
+  # We'll normalize this to the - syntax we use for CMake purposes anyways.
+  if(MSVC)
+    foreach(_MPI_VARIABLE IN ITEMS COMPILE LINK)
+      # The Intel MPI wrappers on Windows prefix their output with some copyright boilerplate.
+      # To prevent possible problems, we discard this text before proceeding with any further matching.
+      string(REGEX REPLACE "^[^ ]+ for the Intel\\(R\\) MPI Library [^\n]+ for Windows\\*\nCopyright\\(C\\) [^\n]+, Intel Corporation\\. All rights reserved\\.\n\n" ""
+        MPI_${_MPI_VARIABLE}_CMDLINE "${MPI_${_MPI_VARIABLE}_CMDLINE}")
+      string(REGEX REPLACE "(^| )/" "\\1-" MPI_${_MPI_VARIABLE}_CMDLINE "${MPI_${_MPI_VARIABLE}_CMDLINE}")
+      string(REPLACE "-libpath:" "-LIBPATH:" MPI_${_MPI_VARIABLE}_CMDLINE "${MPI_${_MPI_VARIABLE}_CMDLINE}")
+    endforeach()
+  endif()
+
+  # For MSVC and cl-compatible compilers, the keyword /link indicates a point after which
+  # everything following is passed to the linker. In this case, we drop all prior information
+  # from the link line and treat any unknown extra flags as linker flags.
+  set(_MPI_FILTERED_LINK_INFORMATION FALSE)
+  if(MSVC)
+    if(MPI_LINK_CMDLINE MATCHES " -(link|LINK) ")
+      string(REGEX REPLACE ".+-(link|LINK) +" "" MPI_LINK_CMDLINE "${MPI_LINK_CMDLINE}")
+      set(_MPI_FILTERED_LINK_INFORMATION TRUE)
+    endif()
+    string(REGEX REPLACE " +-(link|LINK) .+" "" MPI_COMPILE_CMDLINE "${MPI_COMPILE_CMDLINE}")
+  endif()
+
+  if(UNIX)
+    # At this point, we obtained some output from a compiler wrapper that works.
+    # We'll now try to parse it into variables with meaning to us.
+    if("${LANG}" STREQUAL "Fortran")
+      # If MPICH (and derivates) didn't recognize the Fortran compiler include flag during configuration,
+      # they'll return a set of three commands, consisting out of a symlink command for mpif.h,
+      # the actual compiler command and deletion of the created symlink.
+      # Especially with M(VA)PICH-1, this appears to happen erroneously, and therefore we should translate
+      # this output into an additional include directory and then drop it from the output.
+      if("${MPI_COMPILE_CMDLINE}" MATCHES "^ln -s ([^\" ]+|\"[^\"]+\") mpif.h")
+        get_filename_component(MPI_INCLUDE_DIRS_WORK "${CMAKE_MATCH_1}" DIRECTORY)
+        string(REGEX REPLACE "^ln -s ([^\" ]+|\"[^\"]+\") mpif.h\n" "" MPI_COMPILE_CMDLINE "${MPI_COMPILE_CMDLINE}")
+        string(REGEX REPLACE "^ln -s ([^\" ]+|\"[^\"]+\") mpif.h\n" "" MPI_LINK_CMDLINE "${MPI_LINK_CMDLINE}")
+        string(REGEX REPLACE "\nrm -f mpif.h$" "" MPI_COMPILE_CMDLINE "${MPI_COMPILE_CMDLINE}")
+        string(REGEX REPLACE "\nrm -f mpif.h$" "" MPI_LINK_CMDLINE "${MPI_LINK_CMDLINE}")
+      endif()
+    endif()
+
+    # If Intel MPI was configured for static linkage with -static_mpi, the wrapper will by default strip
+    # debug information from resulting binaries (see I_MPI_DEBUG_INFO_STRIP).
+    # Since we cannot process this information into CMake logic, we need to discard the resulting objcopy
+    # commands from the output.
+    string(REGEX REPLACE "(^|\n)objcopy[^\n]+(\n|$)" "" MPI_COMPILE_CMDLINE "${MPI_COMPILE_CMDLINE}")
+    string(REGEX REPLACE "(^|\n)objcopy[^\n]+(\n|$)" "" MPI_LINK_CMDLINE "${MPI_LINK_CMDLINE}")
+  endif()
+
+  # For Visual C++, extracting compiler options in a generic fashion isn't easy. However, no MPI implementation
+  # on Windows seems to require any specific ones, either.
+  if(NOT MSVC)
+    # Extract compile options from the compile command line.
+    string(REGEX MATCHALL "(^| )-f([^\" ]+|\"[^\"]+\")" MPI_ALL_COMPILE_OPTIONS "${MPI_COMPILE_CMDLINE}")
+
+    foreach(_MPI_COMPILE_OPTION IN LISTS MPI_ALL_COMPILE_OPTIONS)
+      string(REGEX REPLACE "^ " "" _MPI_COMPILE_OPTION "${_MPI_COMPILE_OPTION}")
+
+      # Ignore -fstack-protector directives: These occur on MPICH and MVAPICH when the libraries
+      # themselves were built with this flag. However, this flag is unrelated to using MPI, and
+      # we won't match the accompanying --param-ssp-size and -Wp,-D_FORTIFY_SOURCE flags and therefore
+      # produce inconsistent results with the regularly flags.
+      # Similarly, aliasing flags do not belong into our flag array.
+      # Also strip out `-framework` flags.
+      if(NOT "${_MPI_COMPILE_OPTION}" MATCHES "^-f((no-|)(stack-protector|strict-aliasing)|PI[CE]|pi[ce]|ramework)")
+        list(APPEND MPI_COMPILE_OPTIONS_WORK "${_MPI_COMPILE_OPTION}")
+      endif()
+    endforeach()
+  endif()
+
+  # For GNU-style compilers, it's possible to prefix includes and definitions with certain flags to pass them
+  # only to the preprocessor. For CMake purposes, we need to treat, but ignore such scopings.
+  # Note that we do not support spaces between the arguments, i.e. -Wp,-I -Wp,/opt/mympi will not be parsed
+  # correctly. This form does not seem to occur in any common MPI implementation, however.
+  if(NOT MSVC)
+    set(_MPI_PREPROCESSOR_FLAG_REGEX "(-Wp,|-Xpreprocessor )?")
+  else()
+    set(_MPI_PREPROCESSOR_FLAG_REGEX "")
+  endif()
+
+  # Same deal as above, for the definitions.
+  string(REGEX MATCHALL "(^| )${_MPI_PREPROCESSOR_FLAG_REGEX}-D *([^\" ]+|\"[^\"]+\")" MPI_ALL_COMPILE_DEFINITIONS "${MPI_COMPILE_CMDLINE}")
+
+  foreach(_MPI_COMPILE_DEFINITION IN LISTS MPI_ALL_COMPILE_DEFINITIONS)
+    string(REGEX REPLACE "^ ?${_MPI_PREPROCESSOR_FLAG_REGEX}-D *" "" _MPI_COMPILE_DEFINITION "${_MPI_COMPILE_DEFINITION}")
+    string(REPLACE "\"" "" _MPI_COMPILE_DEFINITION "${_MPI_COMPILE_DEFINITION}")
+    if(NOT "${_MPI_COMPILE_DEFINITION}" MATCHES "^_FORTIFY_SOURCE.*")
+      list(APPEND MPI_COMPILE_DEFINITIONS_WORK "${_MPI_COMPILE_DEFINITION}")
+    endif()
+  endforeach()
+
+  # Extract include paths from compile command line
+  string(REGEX MATCHALL "(^| )${_MPI_PREPROCESSOR_FLAG_REGEX}${CMAKE_INCLUDE_FLAG_${LANG}} *([^\" ]+|\"[^\"]+\")"
+    MPI_ALL_INCLUDE_PATHS "${MPI_COMPILE_CMDLINE}")
+
+  # If extracting failed to work, we'll try using -showme:incdirs.
+  # Unlike before, we do this without the environment variables set up, but since only MPICH derivates are affected by any of them, and
+  # -showme:... is only supported by Open MPI and LAM/MPI, this isn't a concern.
+  if (NOT MPI_ALL_INCLUDE_PATHS)
+    _MPI_check_compiler(${LANG} "-showme:incdirs" MPI_INCDIRS_CMDLINE MPI_INCDIRS_COMPILER_RETURN)
+    if(MPI_INCDIRS_COMPILER_RETURN)
+      separate_arguments(MPI_ALL_INCLUDE_PATHS NATIVE_COMMAND "${MPI_INCDIRS_CMDLINE}")
+    endif()
+  endif()
+
+  foreach(_MPI_INCLUDE_PATH IN LISTS MPI_ALL_INCLUDE_PATHS)
+    string(REGEX REPLACE "^ ?${_MPI_PREPROCESSOR_FLAG_REGEX}${CMAKE_INCLUDE_FLAG_${LANG}} *" "" _MPI_INCLUDE_PATH "${_MPI_INCLUDE_PATH}")
+    string(REPLACE "\"" "" _MPI_INCLUDE_PATH "${_MPI_INCLUDE_PATH}")
+    string(REPLACE "'" "" _MPI_INCLUDE_PATH "${_MPI_INCLUDE_PATH}")
+    get_filename_component(_MPI_INCLUDE_PATH "${_MPI_INCLUDE_PATH}" REALPATH)
+    list(APPEND MPI_INCLUDE_DIRS_WORK "${_MPI_INCLUDE_PATH}")
+  endforeach()
+
+  # The next step are linker flags and library directories. Here, we first take the flags given in raw -L or -LIBPATH: syntax.
+  string(REGEX MATCHALL "(^| )${CMAKE_LIBRARY_PATH_FLAG} *([^\" ]+|\"[^\"]+\")" MPI_DIRECT_LINK_PATHS "${MPI_LINK_CMDLINE}")
+  foreach(_MPI_LPATH IN LISTS MPI_DIRECT_LINK_PATHS)
+    string(REGEX REPLACE "(^| )${CMAKE_LIBRARY_PATH_FLAG} *" "" _MPI_LPATH "${_MPI_LPATH}")
+    list(APPEND MPI_ALL_LINK_PATHS "${_MPI_LPATH}")
+  endforeach()
+
+  # If the link commandline hasn't been filtered (e.g. when using MSVC and /link), we need to extract the relevant parts first.
+  if(NOT _MPI_FILTERED_LINK_INFORMATION)
+    string(REGEX MATCHALL "(^| )(-Wl,|-Xlinker +)([^\" ]+|\"[^\"]+\")" MPI_LINK_FLAGS "${MPI_LINK_CMDLINE}")
+
+    # In this case, we could also find some indirectly given linker paths, e.g. prefixed by -Xlinker or -Wl,
+    # Since syntaxes like -Wl,-L -Wl,/my/path/to/lib are also valid, we parse these paths by first removing -Wl, and -Xlinker
+    # from the list of filtered flags and then parse the remainder of the output.
+    string(REGEX REPLACE "(-Wl,|-Xlinker +)" "" MPI_LINK_FLAGS_RAW "${MPI_LINK_FLAGS}")
+
+    # Now we can parse the leftover output. Note that spaces can now be handled since the above example would reduce to
+    # -L /my/path/to/lib and can be extracted correctly.
+    string(REGEX MATCHALL "^(${CMAKE_LIBRARY_PATH_FLAG},? *|--library-path=)([^\" ]+|\"[^\"]+\")"
+      MPI_INDIRECT_LINK_PATHS "${MPI_LINK_FLAGS_RAW}")
+
+    foreach(_MPI_LPATH IN LISTS MPI_INDIRECT_LINK_PATHS)
+      string(REGEX REPLACE "^(${CMAKE_LIBRARY_PATH_FLAG},? *|--library-path=)" "" _MPI_LPATH "${_MPI_LPATH}")
+      list(APPEND MPI_ALL_LINK_PATHS "${_MPI_LPATH}")
+    endforeach()
+
+    # We need to remove the flags we extracted from the linker flag list now.
+    string(REGEX REPLACE "(^| )(-Wl,|-Xlinker +)(${CMAKE_LIBRARY_PATH_FLAG},? *(-Wl,|-Xlinker +)?|--library-path=)([^\" ]+|\"[^\"]+\")" ""
+      MPI_LINK_CMDLINE_FILTERED "${MPI_LINK_CMDLINE}")
+
+    # Some MPI implementations pass on options they themselves were built with. Since -z,noexecstack is a common
+    # hardening, we should strip it. In general, the -z options should be undesirable.
+    string(REGEX REPLACE "(^| )-Wl,-z(,[^ ]+| +-Wl,[^ ]+)" "" MPI_LINK_CMDLINE_FILTERED "${MPI_LINK_CMDLINE_FILTERED}")
+    string(REGEX REPLACE "(^| )-Xlinker +-z +-Xlinker +[^ ]+" "" MPI_LINK_CMDLINE_FILTERED "${MPI_LINK_CMDLINE_FILTERED}")
+
+    # We only consider options of the form -Wl or -Xlinker:
+    string(REGEX MATCHALL "(^| )(-Wl,|-Xlinker +)([^\" ]+|\"[^\"]+\")" MPI_ALL_LINK_FLAGS "${MPI_LINK_CMDLINE_FILTERED}")
+
+    # As a next step, we assemble the linker flags extracted in a preliminary flags string
+    foreach(_MPI_LINK_FLAG IN LISTS MPI_ALL_LINK_FLAGS)
+      string(STRIP "${_MPI_LINK_FLAG}" _MPI_LINK_FLAG)
+      if (MPI_LINK_FLAGS_WORK)
+        string(APPEND MPI_LINK_FLAGS_WORK " ${_MPI_LINK_FLAG}")
+      else()
+        set(MPI_LINK_FLAGS_WORK "${_MPI_LINK_FLAG}")
+      endif()
+    endforeach()
+  else()
+    # In the filtered case, we obtain the link time flags by just stripping the library paths.
+    string(REGEX REPLACE "(^| )${CMAKE_LIBRARY_PATH_FLAG} *([^\" ]+|\"[^\"]+\")" "" MPI_LINK_CMDLINE_FILTERED "${MPI_LINK_CMDLINE}")
+  endif()
+
+  # If we failed to extract any linker paths, we'll try using the -showme:libdirs option with the MPI compiler.
+  # This will return a list of folders, not a set of flags!
+  if (NOT MPI_ALL_LINK_PATHS)
+    _MPI_check_compiler(${LANG} "-showme:libdirs" MPI_LIBDIRS_CMDLINE MPI_LIBDIRS_COMPILER_RETURN)
+    if(MPI_LIBDIRS_COMPILER_RETURN)
+      separate_arguments(MPI_ALL_LINK_PATHS NATIVE_COMMAND "${MPI_LIBDIRS_CMDLINE}")
+    endif()
+  endif()
+
+  # We need to remove potential quotes and convert the paths to CMake syntax while resolving them, too.
+  foreach(_MPI_LPATH IN LISTS MPI_ALL_LINK_PATHS)
+    string(REPLACE "\"" "" _MPI_LPATH "${_MPI_LPATH}")
+    get_filename_component(_MPI_LPATH "${_MPI_LPATH}" REALPATH)
+    list(APPEND MPI_LINK_DIRECTORIES_WORK "${_MPI_LPATH}")
+  endforeach()
+
+  # Extract the set of libraries to link against from the link command line
+  # This only makes sense if CMAKE_LINK_LIBRARY_FLAG is defined, i.e. a -lxxxx syntax is supported by the compiler.
+  if(CMAKE_LINK_LIBRARY_FLAG)
+    string(REGEX MATCHALL "(^| )${CMAKE_LINK_LIBRARY_FLAG}([^\" ]+|\"[^\"]+\")"
+      MPI_LIBNAMES "${MPI_LINK_CMDLINE}")
+
+    foreach(_MPI_LIB_NAME IN LISTS MPI_LIBNAMES)
+      string(REGEX REPLACE "^ ?${CMAKE_LINK_LIBRARY_FLAG}" "" _MPI_LIB_NAME "${_MPI_LIB_NAME}")
+      string(REPLACE "\"" "" _MPI_LIB_NAME "${_MPI_LIB_NAME}")
+      list(APPEND MPI_LIB_NAMES_WORK "${_MPI_LIB_NAME}")
+    endforeach()
+  endif()
+
+  # Treat linker objects given by full path, for example static libraries, import libraries
+  # or shared libraries if there aren't any import libraries in use on the system.
+  # Note that we do not consider CMAKE_<TYPE>_LIBRARY_PREFIX intentionally here: The linker will for a given file
+  # decide how to link it based on file type, not based on a prefix like 'lib'.
+  set(_MPI_LIB_SUFFIX_REGEX "${CMAKE_STATIC_LIBRARY_SUFFIX}")
+  if(DEFINED CMAKE_IMPORT_LIBRARY_SUFFIX)
+    if(NOT ("${CMAKE_IMPORT_LIBRARY_SUFFIX}" STREQUAL "${CMAKE_STATIC_LIBRARY_SUFFIX}"))
+      string(APPEND _MPI_SUFFIX_REGEX "|${CMAKE_IMPORT_LIBRARY_SUFFIX}")
+    endif()
+  else()
+    string(APPEND _MPI_LIB_SUFFIX_REGEX "|${CMAKE_SHARED_LIBRARY_SUFFIX}")
+  endif()
+  set(_MPI_LIB_NAME_REGEX "(([^\" ]+(${_MPI_LIB_SUFFIX_REGEX}))|(\"[^\"]+(${_MPI_LIB_SUFFIX_REGEX})\"))( +|$)")
+  string(REPLACE "." "\\." _MPI_LIB_NAME_REGEX "${_MPI_LIB_NAME_REGEX}")
+
+  string(REGEX MATCHALL "${_MPI_LIB_NAME_REGEX}" MPI_LIBNAMES "${MPI_LINK_CMDLINE}")
+  foreach(_MPI_LIB_NAME IN LISTS MPI_LIBNAMES)
+    string(REGEX REPLACE "^ +\"?|\"? +$" "" _MPI_LIB_NAME "${_MPI_LIB_NAME}")
+    get_filename_component(_MPI_LIB_PATH "${_MPI_LIB_NAME}" DIRECTORY)
+    if(NOT "${_MPI_LIB_PATH}" STREQUAL "")
+      list(APPEND MPI_LIB_FULLPATHS_WORK "${_MPI_LIB_NAME}")
+    else()
+      list(APPEND MPI_LIB_NAMES_WORK "${_MPI_LIB_NAME}")
+    endif()
+  endforeach()
+
+  # Save the explicitly given link directories
+  set(MPI_LINK_DIRECTORIES_LEFTOVER "${MPI_LINK_DIRECTORIES_WORK}")
+
+  # An MPI compiler wrapper could have its MPI libraries in the implicitly
+  # linked directories of the compiler itself.
+  if(DEFINED CMAKE_${LANG}_IMPLICIT_LINK_DIRECTORIES)
+    list(APPEND MPI_LINK_DIRECTORIES_WORK "${CMAKE_${LANG}_IMPLICIT_LINK_DIRECTORIES}")
+  endif()
+
+  # Determine full path names for all of the libraries that one needs
+  # to link against in an MPI program
+  unset(MPI_PLAIN_LIB_NAMES_WORK)
+  foreach(_MPI_LIB_NAME IN LISTS MPI_LIB_NAMES_WORK)
+    get_filename_component(_MPI_PLAIN_LIB_NAME "${_MPI_LIB_NAME}" NAME_WE)
+    list(APPEND MPI_PLAIN_LIB_NAMES_WORK "${_MPI_PLAIN_LIB_NAME}")
+    find_library(MPI_${_MPI_PLAIN_LIB_NAME}_LIBRARY
+      NAMES "${_MPI_LIB_NAME}" "lib${_MPI_LIB_NAME}"
+      HINTS ${MPI_LINK_DIRECTORIES_WORK}
+      DOC "Location of the ${_MPI_PLAIN_LIB_NAME} library for MPI"
+    )
+    mark_as_advanced(MPI_${_MPI_PLAIN_LIB_NAME}_LIBRARY)
+    # Remove the directory from the remainder list.
+    if(MPI_${_MPI_PLAIN_LIB_NAME}_LIBRARY)
+      get_filename_component(_MPI_TAKEN_DIRECTORY "${MPI_${_MPI_PLAIN_LIB_NAME}_LIBRARY}" DIRECTORY)
+      list(REMOVE_ITEM MPI_LINK_DIRECTORIES_LEFTOVER "${_MPI_TAKEN_DIRECTORY}")
+    endif()
+  endforeach()
+
+  # Add the link directories given explicitly that we haven't used back as linker directories.
+  if(NOT WIN32)
+    foreach(_MPI_LINK_DIRECTORY IN LISTS MPI_LINK_DIRECTORIES_LEFTOVER)
+      file(TO_NATIVE_PATH "${_MPI_LINK_DIRECTORY}" _MPI_LINK_DIRECTORY_ACTUAL)
+      string(FIND "${_MPI_LINK_DIRECTORY_ACTUAL}" " " _MPI_LINK_DIRECTORY_CONTAINS_SPACE)
+      if(NOT _MPI_LINK_DIRECTORY_CONTAINS_SPACE EQUAL -1)
+        set(_MPI_LINK_DIRECTORY_ACTUAL "\"${_MPI_LINK_DIRECTORY_ACTUAL}\"")
+      endif()
+      if(MPI_LINK_FLAGS_WORK)
+        string(APPEND MPI_LINK_FLAGS_WORK " ${CMAKE_LIBRARY_PATH_FLAG}${_MPI_LINK_DIRECTORY_ACTUAL}")
+      else()
+        set(MPI_LINK_FLAGS_WORK "${CMAKE_LIBRARY_PATH_FLAG}${_MPI_LINK_DIRECTORY_ACTUAL}")
+      endif()
+    endforeach()
+  endif()
+
+  # Deal with the libraries given with full path next
+  unset(MPI_DIRECT_LIB_NAMES_WORK)
+  foreach(_MPI_LIB_FULLPATH IN LISTS MPI_LIB_FULLPATHS_WORK)
+    get_filename_component(_MPI_PLAIN_LIB_NAME "${_MPI_LIB_FULLPATH}" NAME_WE)
+    list(APPEND MPI_DIRECT_LIB_NAMES_WORK "${_MPI_PLAIN_LIB_NAME}")
+    set(MPI_${_MPI_PLAIN_LIB_NAME}_LIBRARY "${_MPI_LIB_FULLPATH}" CACHE FILEPATH "Location of the ${_MPI_PLAIN_LIB_NAME} library for MPI")
+    mark_as_advanced(MPI_${_MPI_PLAIN_LIB_NAME}_LIBRARY)
+  endforeach()
+  # Directly linked objects should be linked first in case some generic linker flags are needed for them.
+  if(MPI_DIRECT_LIB_NAMES_WORK)
+    set(MPI_PLAIN_LIB_NAMES_WORK "${MPI_DIRECT_LIB_NAMES_WORK};${MPI_PLAIN_LIB_NAMES_WORK}")
+  endif()
+
+  # MPI might require pthread to work. The above mechanism wouldn't detect it, but we need to
+  # link it in that case. -lpthread is covered by the normal library treatment on the other hand.
+  if("${MPI_COMPILE_CMDLINE}" MATCHES "-pthread")
+    list(APPEND MPI_COMPILE_OPTIONS_WORK "-pthread")
+    if(MPI_LINK_FLAGS_WORK)
+      string(APPEND MPI_LINK_FLAGS_WORK " -pthread")
+    else()
+      set(MPI_LINK_FLAGS_WORK "-pthread")
+    endif()
+  endif()
+
+  if(MPI_${LANG}_EXTRA_COMPILE_DEFINITIONS)
+    list(APPEND MPI_COMPILE_DEFINITIONS_WORK "${MPI_${LANG}_EXTRA_COMPILE_DEFINITIONS}")
+  endif()
+  if(MPI_${LANG}_EXTRA_COMPILE_OPTIONS)
+    list(APPEND MPI_COMPILE_OPTIONS_WORK "${MPI_${LANG}_EXTRA_COMPILE_OPTIONS}")
+  endif()
+  if(MPI_${LANG}_EXTRA_LIB_NAMES)
+    list(APPEND MPI_PLAIN_LIB_NAMES_WORK "${MPI_${LANG}_EXTRA_LIB_NAMES}")
+  endif()
+
+  # If we found MPI, set up all of the appropriate cache entries
+  if(NOT MPI_${LANG}_COMPILE_OPTIONS)
+    set(MPI_${LANG}_COMPILE_OPTIONS          ${MPI_COMPILE_OPTIONS_WORK}     CACHE STRING "MPI ${LANG} compilation options"            FORCE)
+  endif()
+  if(NOT MPI_${LANG}_COMPILE_DEFINITIONS)
+    set(MPI_${LANG}_COMPILE_DEFINITIONS      ${MPI_COMPILE_DEFINITIONS_WORK} CACHE STRING "MPI ${LANG} compilation definitions"        FORCE)
+  endif()
+  if(NOT MPI_${LANG}_COMPILER_INCLUDE_DIRS)
+    set(MPI_${LANG}_COMPILER_INCLUDE_DIRS    ${MPI_INCLUDE_DIRS_WORK}        CACHE STRING "MPI ${LANG} compiler wrapper include directories" FORCE)
+  endif()
+  if(NOT MPI_${LANG}_LINK_FLAGS)
+    set(MPI_${LANG}_LINK_FLAGS               ${MPI_LINK_FLAGS_WORK}          CACHE STRING "MPI ${LANG} linker flags"                   FORCE)
+  endif()
+  if(NOT MPI_${LANG}_LIB_NAMES)
+    set(MPI_${LANG}_LIB_NAMES                ${MPI_PLAIN_LIB_NAMES_WORK}     CACHE STRING "MPI ${LANG} libraries to link against"      FORCE)
+  endif()
+  set(MPI_${LANG}_WRAPPER_FOUND TRUE PARENT_SCOPE)
+endfunction()
+
+function(_MPI_guess_settings LANG)
+  set(MPI_GUESS_FOUND FALSE)
+  # Currently only MSMPI and MPICH2 on Windows are supported, so we can skip this search if we're not targeting that.
+  if(WIN32)
+    # MSMPI
+
+    # The environment variables MSMPI_INC and MSMPILIB32/64 are the only ways of locating the MSMPI_SDK,
+    # which is installed separately from the runtime. Thus it's possible to have mpiexec but not MPI headers
+    # or import libraries and vice versa.
+    if(NOT MPI_GUESS_LIBRARY_NAME OR "${MPI_GUESS_LIBRARY_NAME}" STREQUAL "MSMPI")
+      # We first attempt to locate the msmpi.lib. Should be find it, we'll assume that the MPI present is indeed
+      # Microsoft MPI.
+      if("${CMAKE_SIZEOF_VOID_P}" EQUAL 8)
+        file(TO_CMAKE_PATH "$ENV{MSMPI_LIB64}" MPI_MSMPI_LIB_PATH)
+        file(TO_CMAKE_PATH "$ENV{MSMPI_INC}/x64" MPI_MSMPI_INC_PATH_EXTRA)
+      else()
+        file(TO_CMAKE_PATH "$ENV{MSMPI_LIB32}" MPI_MSMPI_LIB_PATH)
+        file(TO_CMAKE_PATH "$ENV{MSMPI_INC}/x86" MPI_MSMPI_INC_PATH_EXTRA)
+      endif()
+
+      find_library(MPI_msmpi_LIBRARY
+        NAMES msmpi
+        HINTS ${MPI_MSMPI_LIB_PATH}
+        DOC "Location of the msmpi library for Microsoft MPI")
+      mark_as_advanced(MPI_msmpi_LIBRARY)
+
+      if(MPI_msmpi_LIBRARY)
+        # Next, we attempt to locate the MPI header. Note that for Fortran we know that mpif.h is a way
+        # MSMPI can be used and therefore that header has to be present.
+        if(NOT MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS)
+          get_filename_component(MPI_MSMPI_INC_DIR "$ENV{MSMPI_INC}" REALPATH)
+          set(MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS "${MPI_MSMPI_INC_DIR}" CACHE STRING "MPI ${LANG} additional include directories" FORCE)
+          unset(MPI_MSMPI_INC_DIR)
+        endif()
+
+        # For MSMPI, one can compile the MPI module by building the mpi.f90 shipped with the MSMPI SDK,
+        # thus it might be present or provided by the user. Figuring out which is supported is done later on.
+        # The PGI Fortran compiler for instance ships a prebuilt set of modules in its own include folder.
+        # Should a user be employing PGI or have built its own set and provided it via cache variables, the
+        # splitting routine would have located the module files.
+
+        # For C and C++, we're done here (MSMPI does not ship the MPI-2 C++ bindings) - however, for Fortran
+        # we need some extra library to glue Fortran support together:
+        # MSMPI ships 2-4 Fortran libraries, each for different Fortran compiler behaviors. The library names
+        # ending with a c are using the cdecl calling convention, whereas those ending with an s are for Fortran
+        # implementations using stdcall. Therefore, the 64-bit MSMPI only ships those ending in 'c', whereas the 32-bit
+        # has both variants available.
+        # The second difference is the last but one letter, if it's an e(nd), the length of a string argument is
+        # passed by the Fortran compiler after all other arguments on the parameter list, if it's an m(ixed),
+        # it's passed immediately after the string address.
+
+        # To summarize:
+        #   - msmpifec: CHARACTER length passed after the parameter list and using cdecl calling convention
+        #   - msmpifmc: CHARACTER length passed directly after string address and using cdecl calling convention
+        #   - msmpifes: CHARACTER length passed after the parameter list and using stdcall calling convention
+        #   - msmpifms: CHARACTER length passed directly after string address and using stdcall calling convention
+        # 32-bit MSMPI ships all four libraries, 64-bit MSMPI ships only the first two.
+
+        # As is, Intel Fortran and PGI Fortran both use the 'ec' variant of the calling convention, whereas
+        # the old Compaq Visual Fortran compiler defaulted to the 'ms' version. It's possible to make Intel Fortran
+        # use the CVF calling convention using /iface:cvf, but we assume - and this is also assumed in FortranCInterface -
+        # this isn't the case. It's also possible to make CVF use the 'ec' variant, using /iface=(cref,nomixed_str_len_arg).
+
+        # Our strategy is now to locate all libraries, but enter msmpifec into the LIB_NAMES array.
+        # Should this not be adequate it's a straightforward way for a user to change the LIB_NAMES array and
+        # have his library found. Still, this should not be necessary outside of exceptional cases, as reasoned.
+        if ("${LANG}" STREQUAL "Fortran")
+          set(MPI_MSMPI_CALLINGCONVS c)
+          if("${CMAKE_SIZEOF_VOID_P}" EQUAL 4)
+            list(APPEND MPI_MSMPI_CALLINGCONVS s)
+          endif()
+          foreach(mpistrlenpos IN ITEMS e m)
+            foreach(mpicallingconv IN LISTS MPI_MSMPI_CALLINGCONVS)
+              find_library(MPI_msmpif${mpistrlenpos}${mpicallingconv}_LIBRARY
+                NAMES msmpif${mpistrlenpos}${mpicallingconv}
+                HINTS "${MPI_MSMPI_LIB_PATH}"
+                DOC "Location of the msmpi${mpistrlenpos}${mpicallingconv} library for Microsoft MPI")
+              mark_as_advanced(MPI_msmpif${mpistrlenpos}${mpicallingconv}_LIBRARY)
+            endforeach()
+          endforeach()
+          if(NOT MPI_${LANG}_LIB_NAMES)
+            set(MPI_${LANG}_LIB_NAMES "msmpi;msmpifec" CACHE STRING "MPI ${LANG} libraries to link against" FORCE)
+          endif()
+
+          # At this point we're *not* done. MSMPI requires an additional include file for Fortran giving the value
+          # of MPI_AINT. This file is called mpifptr.h located in the x64 and x86 subfolders, respectively.
+          find_path(MPI_mpifptr_INCLUDE_DIR
+            NAMES "mpifptr.h"
+            HINTS "${MPI_MSMPI_INC_PATH_EXTRA}"
+            DOC "Location of the mpifptr.h extra header for Microsoft MPI")
+          if(NOT MPI_${LANG}_ADDITIONAL_INCLUDE_VARS)
+            set(MPI_${LANG}_ADDITIONAL_INCLUDE_VARS "mpifptr" CACHE STRING "MPI ${LANG} additional include directory variables, given in the form MPI_<name>_INCLUDE_DIR." FORCE)
+          endif()
+          mark_as_advanced(MPI_${LANG}_ADDITIONAL_INCLUDE_VARS MPI_mpifptr_INCLUDE_DIR)
+        else()
+          if(NOT MPI_${LANG}_LIB_NAMES)
+            set(MPI_${LANG}_LIB_NAMES "msmpi" CACHE STRING "MPI ${LANG} libraries to link against" FORCE)
+          endif()
+        endif()
+        mark_as_advanced(MPI_${LANG}_LIB_NAMES)
+        set(MPI_GUESS_FOUND TRUE)
+
+        if(_MPIEXEC_NOT_GIVEN)
+          unset(MPIEXEC_EXECUTABLE CACHE)
+        endif()
+
+        find_program(MPIEXEC_EXECUTABLE
+          NAMES mpiexec
+          HINTS $ENV{MSMPI_BIN} "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\MPI;InstallRoot]/Bin"
+          DOC "Executable for running MPI programs.")
+      endif()
+    endif()
+
+    # At this point there's not many MPIs that we could still consider.
+    # OpenMPI 1.6.x and below supported Windows, but these ship compiler wrappers that still work.
+    # The only other relevant MPI implementation without a wrapper is MPICH2, which had Windows support in 1.4.1p1 and older.
+    if(NOT MPI_GUESS_FOUND AND (NOT MPI_GUESS_LIBRARY_NAME OR "${MPI_GUESS_LIBRARY_NAME}" STREQUAL "MPICH2"))
+      set(MPI_MPICH_PREFIX_PATHS
+        "$ENV{ProgramW6432}/MPICH2/lib"
+        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MPICH\\SMPD;binary]/../lib"
+        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MPICH2;Path]/lib"
+      )
+
+      # All of C, C++ and Fortran will need mpi.lib, so we'll look for this first
+      find_library(MPI_mpi_LIBRARY
+        NAMES mpi
+        HINTS ${MPI_MPICH_PREFIX_PATHS})
+      mark_as_advanced(MPI_mpi_LIBRARY)
+      # If we found mpi.lib, we detect the rest of MPICH2
+      if(MPI_mpi_LIBRARY)
+        set(MPI_MPICH_LIB_NAMES "mpi")
+        # If MPI-2 C++ bindings are requested, we need to locate cxx.lib as well.
+        # Otherwise, MPICH_SKIP_MPICXX will be defined and these bindings aren't needed.
+        if("${LANG}" STREQUAL "CXX" AND NOT MPI_CXX_SKIP_MPICXX)
+          find_library(MPI_cxx_LIBRARY
+            NAMES cxx
+            HINTS ${MPI_MPICH_PREFIX_PATHS})
+          mark_as_advanced(MPI_cxx_LIBRARY)
+          list(APPEND MPI_MPICH_LIB_NAMES "cxx")
+        # For Fortran, MPICH2 provides three different libraries:
+        #   fmpich2.lib which uses uppercase symbols and cdecl,
+        #   fmpich2s.lib which uses uppercase symbols and stdcall (32-bit only),
+        #   fmpich2g.lib which uses lowercase symbols with double underscores and cdecl.
+        # fmpich2s.lib would be useful for Compaq Visual Fortran, fmpich2g.lib has to be used with GNU g77 and is also
+        # provided in the form of an .a archive for MinGW and Cygwin. From our perspective, fmpich2.lib is the only one
+        # we need to try, and if it doesn't work with the given Fortran compiler we'd find out later on during validation
+        elseif("${LANG}" STREQUAL "Fortran")
+          find_library(MPI_fmpich2_LIBRARY
+            NAMES fmpich2
+            HINTS ${MPI_MPICH_PREFIX_PATHS})
+          find_library(MPI_fmpich2s_LIBRARY
+            NAMES fmpich2s
+            HINTS ${MPI_MPICH_PREFIX_PATHS})
+          find_library(MPI_fmpich2g_LIBRARY
+            NAMES fmpich2g
+            HINTS ${MPI_MPICH_PREFIX_PATHS})
+          mark_as_advanced(MPI_fmpich2_LIBRARY MPI_fmpich2s_LIBRARY MPI_fmpich2g_LIBRARY)
+          list(APPEND MPI_MPICH_LIB_NAMES "fmpich2")
+        endif()
+
+        if(NOT MPI_${LANG}_LIB_NAMES)
+          set(MPI_${LANG}_LIB_NAMES "${MPI_MPICH_LIB_NAMES}" CACHE STRING "MPI ${LANG} libraries to link against" FORCE)
+        endif()
+        unset(MPI_MPICH_LIB_NAMES)
+
+        if(NOT MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS)
+          # For MPICH2, the include folder would be in ../include relative to the library folder.
+          get_filename_component(MPI_MPICH_ROOT_DIR "${MPI_mpi_LIBRARY}" DIRECTORY)
+          get_filename_component(MPI_MPICH_ROOT_DIR "${MPI_MPICH_ROOT_DIR}" DIRECTORY)
+          if(IS_DIRECTORY "${MPI_MPICH_ROOT_DIR}/include")
+            set(MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS "${MPI_MPICH_ROOT_DIR}/include" CACHE STRING "MPI ${LANG} additional include directory variables, given in the form MPI_<name>_INCLUDE_DIR." FORCE)
+          endif()
+          unset(MPI_MPICH_ROOT_DIR)
+        endif()
+        set(MPI_GUESS_FOUND TRUE)
+
+        if(_MPIEXEC_NOT_GIVEN)
+          unset(MPIEXEC_EXECUTABLE CACHE)
+        endif()
+
+        find_program(MPIEXEC_EXECUTABLE
+          NAMES ${_MPIEXEC_NAMES}
+          HINTS "$ENV{ProgramW6432}/MPICH2/bin"
+                "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MPICH\\SMPD;binary]"
+                "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MPICH2;Path]/bin"
+          DOC "Executable for running MPI programs.")
+      endif()
+      unset(MPI_MPICH_PREFIX_PATHS)
+    endif()
+  endif()
+  set(MPI_${LANG}_GUESS_FOUND "${MPI_GUESS_FOUND}" PARENT_SCOPE)
+endfunction()
+
+function(_MPI_adjust_compile_definitions LANG)
+  if("${LANG}" STREQUAL "CXX")
+    # To disable the C++ bindings, we need to pass some definitions since the mpi.h header has to deal with both C and C++
+    # bindings in MPI-2.
+    if(MPI_CXX_SKIP_MPICXX AND NOT MPI_${LANG}_COMPILE_DEFINITIONS MATCHES "SKIP_MPICXX")
+      # MPICH_SKIP_MPICXX is being used in MPICH and derivatives like MVAPICH or Intel MPI
+      # OMPI_SKIP_MPICXX is being used in Open MPI
+      # _MPICC_H is being used for IBM Platform MPI
+      list(APPEND MPI_${LANG}_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX" "OMPI_SKIP_MPICXX" "_MPICC_H")
+      set(MPI_${LANG}_COMPILE_DEFINITIONS "${MPI_${LANG}_COMPILE_DEFINITIONS}" CACHE STRING "MPI ${LANG} compilation definitions" FORCE)
+    endif()
+  endif()
+endfunction()
+
+macro(_MPI_assemble_libraries LANG)
+  set(MPI_${LANG}_LIBRARIES "")
+  # Only for libraries do we need to check whether the compiler's linking stage is separate.
+  if(NOT "${MPI_${LANG}_COMPILER}" STREQUAL "${CMAKE_${LANG}_COMPILER}" OR NOT MPI_${LANG}_WORKS_IMPLICIT)
+    foreach(mpilib IN LISTS MPI_${LANG}_LIB_NAMES)
+      list(APPEND MPI_${LANG}_LIBRARIES ${MPI_${mpilib}_LIBRARY})
+    endforeach()
+  endif()
+endmacro()
+
+macro(_MPI_assemble_include_dirs LANG)
+  set(MPI_${LANG}_INCLUDE_DIRS
+    ${MPI_${LANG}_COMPILER_INCLUDE_DIRS}
+    ${MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS}
+    )
+  if("${LANG}" MATCHES "(C|CXX)")
+    if(MPI_${LANG}_HEADER_DIR)
+      list(APPEND MPI_${LANG}_INCLUDE_DIRS "${MPI_${LANG}_HEADER_DIR}")
+    endif()
+  else() # Fortran
+    if(MPI_${LANG}_F77_HEADER_DIR)
+      list(APPEND MPI_${LANG}_INCLUDE_DIRS "${MPI_${LANG}_F77_HEADER_DIR}")
+    endif()
+    if(MPI_${LANG}_MODULE_DIR)
+      list(APPEND MPI_${LANG}_INCLUDE_DIRS "${MPI_${LANG}_MODULE_DIR}")
+    endif()
+  endif()
+  if(MPI_${LANG}_INCLUDE_DIRS)
+    list(REMOVE_DUPLICATES MPI_${LANG}_INCLUDE_DIRS)
+  endif()
+endmacro()
+
+macro(_MPI_split_include_dirs LANG)
+  # Backwards compatibility: Search INCLUDE_PATH if given.
+  if(MPI_${LANG}_INCLUDE_PATH)
+    list(APPEND MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS "${MPI_${LANG}_INCLUDE_PATH}")
+  endif()
+
+  # We try to find the headers/modules among those paths (and system paths)
+  # For C/C++, we just need to have a look for mpi.h.
+  if("${LANG}" MATCHES "(C|CXX)")
+    find_path(MPI_${LANG}_HEADER_DIR "mpi.h"
+      HINTS
+        ${MPI_${LANG}_COMPILER_INCLUDE_DIRS}
+        ${MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS}
+    )
+    mark_as_advanced(MPI_${LANG}_HEADER_DIR)
+    if(MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS)
+      list(REMOVE_ITEM MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS "${MPI_${LANG}_HEADER_DIR}")
+    endif()
+
+  # Fortran is more complicated here: An implementation could provide
+  # any of the Fortran 77/90/2008 APIs for MPI. For example, MSMPI
+  # only provides Fortran 77 and - if mpi.f90 is built - potentially
+  # a Fortran 90 module.
+  elseif("${LANG}" STREQUAL "Fortran")
+    find_path(MPI_${LANG}_F77_HEADER_DIR "mpif.h"
+      HINTS
+        ${MPI_${LANG}_COMPILER_INCLUDE_DIRS}
+        ${MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS}
+    )
+    find_path(MPI_${LANG}_MODULE_DIR
+      NAMES "mpi.mod" "mpi_f08.mod"
+      HINTS
+        ${MPI_${LANG}_COMPILER_INCLUDE_DIRS}
+        ${MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS}
+    )
+    if(MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS)
+      list(REMOVE_ITEM MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS
+        "${MPI_${LANG}_F77_HEADER_DIR}"
+        "${MPI_${LANG}_MODULE_DIR}"
+      )
+    endif()
+    mark_as_advanced(MPI_${LANG}_F77_HEADER_DIR MPI_${LANG}_MODULE_DIR)
+  endif()
+
+  # Remove duplicates and default system directories from the list.
+  if(MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS)
+    list(REMOVE_DUPLICATES MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS)
+    foreach(MPI_IMPLICIT_INC_DIR IN LISTS CMAKE_${LANG}_IMPLICIT_LINK_DIRECTORIES)
+      list(REMOVE_ITEM MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS ${MPI_IMPLICIT_INC_DIR})
+    endforeach()
+  endif()
+
+  set(MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS ${MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS} CACHE STRING "MPI ${LANG} additional include directories" FORCE)
+endmacro()
+
+macro(_MPI_create_imported_target LANG)
+  if(NOT TARGET MPI::MPI_${LANG})
+    add_library(MPI::MPI_${LANG} INTERFACE IMPORTED)
+  endif()
+
+  # When this is consumed for compiling CUDA, use '-Xcompiler' to wrap '-pthread' and '-fexceptions'.
+  string(REPLACE "-pthread" "$<$<COMPILE_LANG_AND_ID:CUDA,NVIDIA>:SHELL:-Xcompiler >-pthread"
+    _MPI_${LANG}_COMPILE_OPTIONS "${MPI_${LANG}_COMPILE_OPTIONS}")
+  string(REPLACE "-fexceptions" "$<$<COMPILE_LANG_AND_ID:CUDA,NVIDIA>:SHELL:-Xcompiler >-fexceptions"
+    _MPI_${LANG}_COMPILE_OPTIONS "${_MPI_${LANG}_COMPILE_OPTIONS}")
+  set_property(TARGET MPI::MPI_${LANG} PROPERTY INTERFACE_COMPILE_OPTIONS "${_MPI_${LANG}_COMPILE_OPTIONS}")
+  unset(_MPI_${LANG}_COMPILE_OPTIONS)
+
+  set_property(TARGET MPI::MPI_${LANG} PROPERTY INTERFACE_COMPILE_DEFINITIONS "${MPI_${LANG}_COMPILE_DEFINITIONS}")
+
+  if(MPI_${LANG}_LINK_FLAGS)
+    string(REPLACE "," "$<COMMA>" _MPI_${LANG}_LINK_FLAGS "${MPI_${LANG}_LINK_FLAGS}")
+    string(PREPEND _MPI_${LANG}_LINK_FLAGS "$<HOST_LINK:SHELL:")
+    string(APPEND _MPI_${LANG}_LINK_FLAGS ">")
+    set_property(TARGET MPI::MPI_${LANG} PROPERTY INTERFACE_LINK_OPTIONS "${_MPI_${LANG}_LINK_FLAGS}")
+  endif()
+  # If the compiler links MPI implicitly, no libraries will be found as they're contained within
+  # CMAKE_<LANG>_IMPLICIT_LINK_LIBRARIES already.
+  if(MPI_${LANG}_LIBRARIES)
+    set_property(TARGET MPI::MPI_${LANG} PROPERTY INTERFACE_LINK_LIBRARIES "${MPI_${LANG}_LIBRARIES}")
+  endif()
+  # Given the new design of FindMPI, INCLUDE_DIRS will always be located, even under implicit linking.
+  set_property(TARGET MPI::MPI_${LANG} PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${MPI_${LANG}_INCLUDE_DIRS}")
+endmacro()
+
+function(_MPI_try_staged_settings LANG MPI_TEST_FILE_NAME MODE RUN_BINARY SUPPRESS_ERRORS)
+  set(WORK_DIR "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/FindMPI")
+  set(SRC_DIR "${CMAKE_ROOT}/Modules/FindMPI")
+  set(BIN_FILE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/FindMPI/${MPI_TEST_FILE_NAME}_${LANG}.bin")
+  unset(MPI_TEST_COMPILE_DEFINITIONS)
+  if("${LANG}" STREQUAL "Fortran")
+    if("${MODE}" STREQUAL "F90_MODULE")
+      set(MPI_Fortran_INCLUDE_LINE "use mpi\n      implicit none")
+    elseif("${MODE}" STREQUAL "F08_MODULE")
+      set(MPI_Fortran_INCLUDE_LINE "use mpi_f08\n      implicit none")
+    else() # F77 header
+      set(MPI_Fortran_INCLUDE_LINE "implicit none\n      include 'mpif.h'")
+    endif()
+    configure_file("${SRC_DIR}/${MPI_TEST_FILE_NAME}.f90.in" "${WORK_DIR}/${MPI_TEST_FILE_NAME}.f90" @ONLY)
+    set(MPI_TEST_SOURCE_FILE "${WORK_DIR}/${MPI_TEST_FILE_NAME}.f90")
+  elseif("${LANG}" STREQUAL "CXX")
+    configure_file("${SRC_DIR}/${MPI_TEST_FILE_NAME}.c" "${WORK_DIR}/${MPI_TEST_FILE_NAME}.cpp" COPYONLY)
+    set(MPI_TEST_SOURCE_FILE "${WORK_DIR}/${MPI_TEST_FILE_NAME}.cpp")
+    if("${MODE}" STREQUAL "TEST_MPICXX")
+      set(MPI_TEST_COMPILE_DEFINITIONS TEST_MPI_MPICXX)
+    endif()
+  else() # C
+    set(MPI_TEST_SOURCE_FILE "${SRC_DIR}/${MPI_TEST_FILE_NAME}.c")
+  endif()
+  if(RUN_BINARY)
+    try_run(MPI_RUN_RESULT_${LANG}_${MPI_TEST_FILE_NAME}_${MODE} MPI_RESULT_${LANG}_${MPI_TEST_FILE_NAME}_${MODE}
+     "${CMAKE_BINARY_DIR}" SOURCES "${MPI_TEST_SOURCE_FILE}"
+      COMPILE_DEFINITIONS ${MPI_TEST_COMPILE_DEFINITIONS}
+      LINK_LIBRARIES MPI::MPI_${LANG}
+      RUN_OUTPUT_VARIABLE MPI_RUN_OUTPUT_${LANG}_${MPI_TEST_FILE_NAME}_${MODE}
+      COMPILE_OUTPUT_VARIABLE _MPI_TRY_${MPI_TEST_FILE_NAME}_${MODE}_OUTPUT)
+    set(MPI_RUN_OUTPUT_${LANG}_${MPI_TEST_FILE_NAME}_${MODE} "${MPI_RUN_OUTPUT_${LANG}_${MPI_TEST_FILE_NAME}_${MODE}}" PARENT_SCOPE)
+  else()
+    try_compile(MPI_RESULT_${LANG}_${MPI_TEST_FILE_NAME}_${MODE}
+      "${CMAKE_BINARY_DIR}" SOURCES "${MPI_TEST_SOURCE_FILE}"
+      COMPILE_DEFINITIONS ${MPI_TEST_COMPILE_DEFINITIONS}
+      LINK_LIBRARIES MPI::MPI_${LANG}
+      COPY_FILE "${BIN_FILE}"
+      OUTPUT_VARIABLE _MPI_TRY_${MPI_TEST_FILE_NAME}_${MODE}_OUTPUT)
+  endif()
+  if(NOT SUPPRESS_ERRORS)
+    if(NOT MPI_RESULT_${LANG}_${MPI_TEST_FILE_NAME}_${MODE})
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+          "The MPI test ${MPI_TEST_FILE_NAME} for ${LANG} in mode ${MODE} failed to compile with the following output:\n${_MPI_TRY_${MPI_TEST_FILE_NAME}_${MODE}_OUTPUT}\n\n")
+    elseif(DEFINED MPI_RUN_RESULT_${LANG}_${MPI_TEST_FILE_NAME}_${MODE} AND MPI_RUN_RESULT_${LANG}_${MPI_TEST_FILE_NAME}_${MODE})
+        file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+          "The MPI test ${MPI_TEST_FILE_NAME} for ${LANG} in mode ${MODE} failed to run with the following output:\n${MPI_RUN_OUTPUT_${LANG}_${MPI_TEST_FILE_NAME}_${MODE}}\n\n")
+    endif()
+  endif()
+endfunction()
+
+macro(_MPI_check_lang_works LANG SUPPRESS_ERRORS)
+  # For Fortran we may have by the MPI-3 standard an implementation that provides:
+  #   - the mpi_f08 module
+  #   - *both*, the mpi module and 'mpif.h'
+  # Since older MPI standards (MPI-1) did not define anything but 'mpif.h', we need to check all three individually.
+  if( NOT MPI_${LANG}_WORKS )
+    if("${LANG}" STREQUAL "Fortran")
+      set(MPI_Fortran_INTEGER_LINE "(kind=MPI_INTEGER_KIND)")
+      _MPI_try_staged_settings(${LANG} test_mpi F77_HEADER FALSE ${SUPPRESS_ERRORS})
+      _MPI_try_staged_settings(${LANG} test_mpi F90_MODULE FALSE ${SUPPRESS_ERRORS})
+      _MPI_try_staged_settings(${LANG} test_mpi F08_MODULE FALSE ${SUPPRESS_ERRORS})
+
+      set(MPI_${LANG}_WORKS FALSE)
+
+      foreach(mpimethod IN ITEMS F77_HEADER F08_MODULE F90_MODULE)
+        if(MPI_RESULT_${LANG}_test_mpi_${mpimethod})
+          set(MPI_${LANG}_WORKS TRUE)
+          set(MPI_${LANG}_HAVE_${mpimethod} TRUE)
+        else()
+          set(MPI_${LANG}_HAVE_${mpimethod} FALSE)
+        endif()
+      endforeach()
+      # MPI-1 versions had no MPI_INTGER_KIND defined, so we need to try without it.
+      # However, MPI-1 also did not define the Fortran 90 and 08 modules, so we only try the F77 header.
+      unset(MPI_Fortran_INTEGER_LINE)
+      if(NOT MPI_${LANG}_WORKS)
+        _MPI_try_staged_settings(${LANG} test_mpi F77_HEADER_NOKIND FALSE ${SUPPRESS_ERRORS})
+        if(MPI_RESULT_${LANG}_test_mpi_F77_HEADER_NOKIND)
+          set(MPI_${LANG}_WORKS TRUE)
+          set(MPI_${LANG}_HAVE_F77_HEADER TRUE)
+        endif()
+      endif()
+    else()
+      _MPI_try_staged_settings(${LANG} test_mpi normal FALSE ${SUPPRESS_ERRORS})
+      # If 'test_mpi' built correctly, we've found valid MPI settings. There might not be MPI-2 C++ support, but there can't
+      # be MPI-2 C++ support without the C bindings being present, so checking for them is sufficient.
+      set(MPI_${LANG}_WORKS "${MPI_RESULT_${LANG}_test_mpi_normal}")
+    endif()
+  endif()
+endmacro()
+
+# Some systems install various MPI implementations in separate folders in some MPI prefix
+# This macro enumerates all such subfolders and adds them to the list of hints that will be searched.
+macro(MPI_search_mpi_prefix_folder PREFIX_FOLDER)
+  if(EXISTS "${PREFIX_FOLDER}")
+    file(GLOB _MPI_folder_children RELATIVE "${PREFIX_FOLDER}" "${PREFIX_FOLDER}/*")
+    foreach(_MPI_folder_child IN LISTS _MPI_folder_children)
+      if(IS_DIRECTORY "${PREFIX_FOLDER}/${_MPI_folder_child}")
+        list(APPEND MPI_HINT_DIRS "${PREFIX_FOLDER}/${_MPI_folder_child}")
+      endif()
+    endforeach()
+  endif()
+endmacro()
+
+set(MPI_HINT_DIRS ${MPI_HOME} $ENV{MPI_HOME} $ENV{I_MPI_ROOT})
+if("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Linux")
+  # SUSE Linux Enterprise Server stores its MPI implementations under /usr/lib64/mpi/gcc/<name>
+  # We enumerate the subfolders and append each as a prefix
+  MPI_search_mpi_prefix_folder("/usr/lib64/mpi/gcc")
+elseif("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "FreeBSD")
+  # FreeBSD ships mpich under the normal system paths - but available openmpi implementations
+  # will be found in /usr/local/mpi/<name>
+  MPI_search_mpi_prefix_folder("/usr/local/mpi")
+endif()
+
+# Most MPI distributions have some form of mpiexec or mpirun which gives us something we can look for.
+# The MPI standard does not mandate the existence of either, but instead only makes requirements if a distribution
+# ships an mpiexec program (mpirun executables are not regulated by the standard).
+
+# We defer searching for mpiexec binaries belonging to guesses until later. By doing so, mismatches between mpiexec
+# and the MPI we found should be reduced.
+if(NOT MPIEXEC_EXECUTABLE)
+  set(_MPIEXEC_NOT_GIVEN TRUE)
+else()
+  set(_MPIEXEC_NOT_GIVEN FALSE)
+endif()
+
+find_program(MPIEXEC_EXECUTABLE
+  NAMES ${_MPIEXEC_NAMES}
+  PATH_SUFFIXES bin sbin
+  HINTS ${MPI_HINT_DIRS}
+  DOC "Executable for running MPI programs.")
+
+# call get_filename_component twice to remove mpiexec and the directory it exists in (typically bin).
+# This gives us a fairly reliable base directory to search for /bin /lib and /include from.
+get_filename_component(_MPI_BASE_DIR "${MPIEXEC_EXECUTABLE}" PATH)
+get_filename_component(_MPI_BASE_DIR "${_MPI_BASE_DIR}" PATH)
+
+# According to the MPI standard, section 8.8 -n is a guaranteed, and the only guaranteed way to
+# launch an MPI process using mpiexec if such a program exists.
+set(MPIEXEC_NUMPROC_FLAG "-n"  CACHE STRING "Flag used by MPI to specify the number of processes for mpiexec; the next option will be the number of processes.")
+set(MPIEXEC_PREFLAGS     ""    CACHE STRING "These flags will be directly before the executable that is being run by mpiexec.")
+set(MPIEXEC_POSTFLAGS    ""    CACHE STRING "These flags will be placed after all flags passed to mpiexec.")
+
+# Set the number of processes to the physical processor count
+cmake_host_system_information(RESULT _MPIEXEC_NUMPROCS QUERY NUMBER_OF_PHYSICAL_CORES)
+set(MPIEXEC_MAX_NUMPROCS "${_MPIEXEC_NUMPROCS}" CACHE STRING "Maximum number of processors available to run MPI applications.")
+unset(_MPIEXEC_NUMPROCS)
+mark_as_advanced(MPIEXEC_EXECUTABLE MPIEXEC_NUMPROC_FLAG MPIEXEC_PREFLAGS MPIEXEC_POSTFLAGS MPIEXEC_MAX_NUMPROCS)
+
+#=============================================================================
+# Backward compatibility input hacks.  Propagate the FindMPI hints to C and
+# CXX if the respective new versions are not defined.  Translate the old
+# MPI_LIBRARY and MPI_EXTRA_LIBRARY to respective MPI_${LANG}_LIBRARIES.
+#
+# Once we find the new variables, we translate them back into their old
+# equivalents below.
+if(NOT MPI_IGNORE_LEGACY_VARIABLES)
+  foreach (LANG IN ITEMS C CXX)
+    # Old input variables.
+    set(_MPI_OLD_INPUT_VARS COMPILER COMPILE_FLAGS INCLUDE_PATH LINK_FLAGS)
+
+    # Set new vars based on their old equivalents, if the new versions are not already set.
+    foreach (var ${_MPI_OLD_INPUT_VARS})
+      if (NOT MPI_${LANG}_${var} AND MPI_${var})
+        set(MPI_${LANG}_${var} "${MPI_${var}}")
+      endif()
+    endforeach()
+
+    # Chop the old compile flags into options and definitions
+
+    unset(MPI_${LANG}_EXTRA_COMPILE_DEFINITIONS)
+    unset(MPI_${LANG}_EXTRA_COMPILE_OPTIONS)
+    if(MPI_${LANG}_COMPILE_FLAGS)
+      separate_arguments(MPI_SEPARATE_FLAGS NATIVE_COMMAND "${MPI_${LANG}_COMPILE_FLAGS}")
+      foreach(_MPI_FLAG IN LISTS MPI_SEPARATE_FLAGS)
+        if("${_MPI_FLAG}" MATCHES "^ *-D([^ ]+)")
+          list(APPEND MPI_${LANG}_EXTRA_COMPILE_DEFINITIONS "${CMAKE_MATCH_1}")
+        else()
+          list(APPEND MPI_${LANG}_EXTRA_COMPILE_OPTIONS "${_MPI_FLAG}")
+        endif()
+      endforeach()
+      unset(MPI_SEPARATE_FLAGS)
+    endif()
+
+    # If a list of libraries was given, we'll split it into new-style cache variables
+    unset(MPI_${LANG}_EXTRA_LIB_NAMES)
+    if(NOT MPI_${LANG}_LIB_NAMES)
+      foreach(_MPI_LIB IN LISTS MPI_${LANG}_LIBRARIES MPI_LIBRARY MPI_EXTRA_LIBRARY)
+        if(_MPI_LIB)
+          get_filename_component(_MPI_PLAIN_LIB_NAME "${_MPI_LIB}" NAME_WE)
+          get_filename_component(_MPI_LIB_NAME "${_MPI_LIB}" NAME)
+          get_filename_component(_MPI_LIB_DIR "${_MPI_LIB}" DIRECTORY)
+          list(APPEND MPI_${LANG}_EXTRA_LIB_NAMES "${_MPI_PLAIN_LIB_NAME}")
+          find_library(MPI_${_MPI_PLAIN_LIB_NAME}_LIBRARY
+            NAMES "${_MPI_LIB_NAME}" "lib${_MPI_LIB_NAME}"
+            HINTS ${_MPI_LIB_DIR} $ENV{MPI_LIB}
+            DOC "Location of the ${_MPI_PLAIN_LIB_NAME} library for MPI"
+          )
+          mark_as_advanced(MPI_${_MPI_PLAIN_LIB_NAME}_LIBRARY)
+        endif()
+      endforeach()
+    endif()
+  endforeach()
+endif()
+#=============================================================================
+
+unset(MPI_VERSION)
+unset(MPI_VERSION_MAJOR)
+unset(MPI_VERSION_MINOR)
+
+unset(_MPI_MIN_VERSION)
+
+# If the user specified a library name we assume they prefer that library over a wrapper. If not, they can disable skipping manually.
+if(NOT DEFINED MPI_SKIP_COMPILER_WRAPPER AND MPI_GUESS_LIBRARY_NAME)
+  set(MPI_SKIP_COMPILER_WRAPPER TRUE)
+endif()
+
+# This loop finds the compilers and sends them off for interrogation.
+foreach(LANG IN ITEMS C CXX Fortran)
+  if(CMAKE_${LANG}_COMPILER_LOADED)
+    if(NOT MPI_FIND_COMPONENTS)
+      set(_MPI_FIND_${LANG} TRUE)
+    elseif( ${LANG} IN_LIST MPI_FIND_COMPONENTS)
+      set(_MPI_FIND_${LANG} TRUE)
+    elseif( ${LANG} STREQUAL CXX AND NOT MPI_CXX_SKIP_MPICXX AND MPICXX IN_LIST MPI_FIND_COMPONENTS )
+      set(_MPI_FIND_${LANG} TRUE)
+    else()
+      set(_MPI_FIND_${LANG} FALSE)
+    endif()
+  else()
+    set(_MPI_FIND_${LANG} FALSE)
+    if(${LANG} IN_LIST MPI_FIND_COMPONENTS)
+      string(APPEND _MPI_FAIL_REASON "MPI component '${LANG}' was requested, but language ${LANG} is not enabled.  ")
+    endif()
+  endif()
+  if(_MPI_FIND_${LANG})
+    if( ${LANG} STREQUAL CXX AND NOT MPICXX IN_LIST MPI_FIND_COMPONENTS )
+      option(MPI_CXX_SKIP_MPICXX "If true, the MPI-2 C++ bindings are disabled using definitions." FALSE)
+      mark_as_advanced(MPI_CXX_SKIP_MPICXX)
+    endif()
+    _MPI_adjust_compile_definitions(${LANG})
+    if(NOT (MPI_${LANG}_LIB_NAMES AND (MPI_${LANG}_INCLUDE_PATH OR MPI_${LANG}_INCLUDE_DIRS OR MPI_${LANG}_COMPILER_INCLUDE_DIRS)))
+      set(MPI_${LANG}_TRIED_IMPLICIT FALSE)
+      set(MPI_${LANG}_WORKS_IMPLICIT FALSE)
+      if(NOT MPI_${LANG}_COMPILER AND NOT MPI_ASSUME_NO_BUILTIN_MPI)
+        # Should the imported targets be empty, we effectively try whether the compiler supports MPI on its own, which is the case on e.g.
+        # Cray PrgEnv.
+        _MPI_create_imported_target(${LANG})
+        _MPI_check_lang_works(${LANG} TRUE)
+
+        # If the compiler can build MPI code on its own, it functions as an MPI compiler and we'll set the variable to point to it.
+        if(MPI_${LANG}_WORKS)
+          set(MPI_${LANG}_COMPILER "${CMAKE_${LANG}_COMPILER}" CACHE FILEPATH "MPI compiler for ${LANG}" FORCE)
+          set(MPI_${LANG}_WORKS_IMPLICIT TRUE)
+        endif()
+        set(MPI_${LANG}_TRIED_IMPLICIT TRUE)
+      endif()
+
+      if(NOT "${MPI_${LANG}_COMPILER}" STREQUAL "${CMAKE_${LANG}_COMPILER}" OR NOT MPI_${LANG}_WORKS)
+        set(MPI_${LANG}_WRAPPER_FOUND FALSE)
+        set(MPI_PINNED_COMPILER FALSE)
+
+        if(NOT MPI_SKIP_COMPILER_WRAPPER)
+          if(MPI_${LANG}_COMPILER)
+            # If the user supplies a compiler *name* instead of an absolute path, assume that we need to find THAT compiler.
+            if (NOT IS_ABSOLUTE "${MPI_${LANG}_COMPILER}")
+              # Get rid of our default list of names and just search for the name the user wants.
+              set(_MPI_${LANG}_COMPILER_NAMES "${MPI_${LANG}_COMPILER}")
+              unset(MPI_${LANG}_COMPILER CACHE)
+            endif()
+            # If the user specifies a compiler, we don't want to try to search libraries either.
+            set(MPI_PINNED_COMPILER TRUE)
+          endif()
+
+          # If we have an MPI base directory, we'll try all compiler names in that one first.
+          # This should prevent mixing different MPI environments
+          if(_MPI_BASE_DIR)
+            find_program(MPI_${LANG}_COMPILER
+              NAMES  ${_MPI_${LANG}_COMPILER_NAMES}
+              PATH_SUFFIXES bin sbin
+              HINTS  ${_MPI_BASE_DIR}
+              NO_DEFAULT_PATH
+              DOC    "MPI compiler for ${LANG}"
+            )
+          endif()
+
+          # If the base directory did not help (for example because the mpiexec isn't in the same directory as the compilers),
+          # we shall try searching in the default paths.
+          find_program(MPI_${LANG}_COMPILER
+            NAMES  ${_MPI_${LANG}_COMPILER_NAMES}
+            PATH_SUFFIXES bin sbin
+            DOC    "MPI compiler for ${LANG}"
+          )
+
+          if("${MPI_${LANG}_COMPILER}" STREQUAL "${CMAKE_${LANG}_COMPILER}")
+            set(MPI_PINNED_COMPILER TRUE)
+
+            # If we haven't made the implicit compiler test yet, perform it now.
+            if(NOT MPI_${LANG}_TRIED_IMPLICIT)
+              _MPI_create_imported_target(${LANG})
+              _MPI_check_lang_works(${LANG} TRUE)
+            endif()
+
+            # Should the MPI compiler not work implicitly for MPI, still interrogate it.
+            # Otherwise, MPI compilers for which CMake has separate linking stages, e.g. Intel MPI on Windows where link.exe is being used
+            # directly during linkage instead of CMAKE_<LANG>_COMPILER will not work.
+            if(NOT MPI_${LANG}_WORKS)
+              set(MPI_${LANG}_WORKS_IMPLICIT FALSE)
+              _MPI_interrogate_compiler(${LANG})
+            else()
+              set(MPI_${LANG}_WORKS_IMPLICIT TRUE)
+            endif()
+          elseif(MPI_${LANG}_COMPILER)
+            _MPI_interrogate_compiler(${LANG})
+          endif()
+        endif()
+
+        # We are on a Cray, environment identfier: PE_ENV is set (CRAY), and
+        # have NOT found an mpic++-like compiler wrapper (previous block),
+        # and we do NOT use the Cray cc/CC compiler wrappers as CC/CXX CMake
+        # compiler.
+        # So as a last resort, we now interrogate cc/CC/ftn for MPI flags.
+        if(DEFINED ENV{PE_ENV} AND NOT "${MPI_${LANG}_COMPILER}")
+          set(MPI_PINNED_COMPILER TRUE)
+          find_program(MPI_${LANG}_COMPILER
+            NAMES  ${_MPI_Cray_${LANG}_COMPILER_NAMES}
+            PATH_SUFFIXES bin sbin
+            DOC    "MPI compiler for ${LANG}"
+          )
+
+          # If we haven't made the implicit compiler test yet, perform it now.
+          if(NOT MPI_${LANG}_TRIED_IMPLICIT)
+            _MPI_create_imported_target(${LANG})
+            _MPI_check_lang_works(${LANG} TRUE)
+          endif()
+
+          set(MPI_${LANG}_WORKS_IMPLICIT TRUE)
+          _MPI_interrogate_compiler(${LANG})
+        endif()
+
+        if(NOT MPI_PINNED_COMPILER AND NOT MPI_${LANG}_WRAPPER_FOUND)
+          # If MPI_PINNED_COMPILER wasn't given, and the MPI compiler we potentially found didn't work, we withdraw it.
+          set(MPI_${LANG}_COMPILER "MPI_${LANG}_COMPILER-NOTFOUND" CACHE FILEPATH "MPI compiler for ${LANG}" FORCE)
+
+          if(LANG STREQUAL "C")
+            set(_MPI_PKG "mpi-c")
+          elseif(LANG STREQUAL "CXX")
+            set(_MPI_PKG "mpi-cxx")
+          elseif(LANG STREQUAL "Fortran")
+            set(_MPI_PKG "mpi-fort")
+          else()
+            set(_MPI_PKG "")
+          endif()
+          if(_MPI_PKG AND PKG_CONFIG_FOUND)
+            pkg_check_modules("MPI_${LANG}_PKG" "${_MPI_PKG}")
+            if("${MPI_${LANG}_PKG_FOUND}")
+              set(MPI_${LANG}_COMPILE_OPTIONS  ${MPI_${LANG}_PKG_CFLAGS}        CACHE STRING "MPI ${LANG} compilation options"       FORCE)
+              set(MPI_${LANG}_INCLUDE_PATH     ${MPI_${LANG}_PKG_INCLUDE_DIRS}  CACHE STRING "MPI ${LANG} include directories"       FORCE)
+              set(MPI_${LANG}_LINK_FLAGS       ${MPI_${LANG}_PKG_LDFLAGS}       CACHE STRING "MPI ${LANG} linker flags"              FORCE)
+              set(MPI_${LANG}_LIB_NAMES        ${MPI_${LANG}_PKG_LIBRARIES}     CACHE STRING "MPI ${LANG} libraries to link against" FORCE)
+              foreach(_MPI_LIB IN LISTS MPI_${LANG}_LIB_NAMES)
+                if(_MPI_LIB)
+                  get_filename_component(_MPI_PLAIN_LIB_NAME "${_MPI_LIB}" NAME_WE)
+                  get_filename_component(_MPI_LIB_NAME "${_MPI_LIB}" NAME)
+                  get_filename_component(_MPI_LIB_DIR "${_MPI_LIB}" DIRECTORY)
+                  find_library(MPI_${_MPI_PLAIN_LIB_NAME}_LIBRARY
+                    NAMES "${_MPI_LIB_NAME}" "lib${_MPI_LIB_NAME}"
+                    HINTS ${_MPI_LIB_DIR}
+                    DOC "Location of the ${_MPI_PLAIN_LIB_NAME} library for MPI"
+                  )
+                  mark_as_advanced(MPI_${_MPI_PLAIN_LIB_NAME}_LIBRARY)
+                endif()
+              endforeach()
+            endif()
+          endif()
+
+          if(NOT MPI_SKIP_GUESSING AND NOT "${MPI_${LANG}_PKG_FOUND}")
+            # For C++, we may use the settings for C. Should a given compiler wrapper for C++ not exist, but one for C does, we copy over the
+            # settings for C. An MPI distribution that is in this situation would be IBM Platform MPI.
+            if("${LANG}" STREQUAL "CXX" AND MPI_C_WRAPPER_FOUND)
+              set(MPI_${LANG}_COMPILE_OPTIONS          ${MPI_C_COMPILE_OPTIONS}     CACHE STRING "MPI ${LANG} compilation options"           )
+              set(MPI_${LANG}_COMPILE_DEFINITIONS      ${MPI_C_COMPILE_DEFINITIONS} CACHE STRING "MPI ${LANG} compilation definitions"       )
+              set(MPI_${LANG}_COMPILER_INCLUDE_DIRS    ${MPI_C_INCLUDE_DIRS}        CACHE STRING "MPI ${LANG} compiler wrapper include directories")
+              set(MPI_${LANG}_LINK_FLAGS               ${MPI_C_LINK_FLAGS}          CACHE STRING "MPI ${LANG} linker flags"                  )
+              set(MPI_${LANG}_LIB_NAMES                ${MPI_C_LIB_NAMES}           CACHE STRING "MPI ${LANG} libraries to link against"     )
+            else()
+              _MPI_guess_settings(${LANG})
+            endif()
+          endif()
+        endif()
+      endif()
+    endif()
+
+    if(NOT "${MPI_${LANG}_COMPILER}" STREQUAL "${CMAKE_${LANG}_COMPILER}")
+      _MPI_split_include_dirs(${LANG})
+      _MPI_assemble_include_dirs(${LANG})
+    else()
+      set(MPI_${LANG}_INCLUDE_DIRS "")
+    endif()
+    _MPI_assemble_libraries(${LANG})
+
+    # We always create imported targets even if they're empty
+    _MPI_create_imported_target(${LANG})
+
+    if(NOT MPI_${LANG}_WORKS)
+      _MPI_check_lang_works(${LANG} FALSE)
+    endif()
+
+    # Next, we'll initialize the MPI variables that have not been previously set.
+    set(MPI_${LANG}_COMPILE_OPTIONS          "" CACHE STRING "MPI ${LANG} compilation flags"             )
+    set(MPI_${LANG}_COMPILE_DEFINITIONS      "" CACHE STRING "MPI ${LANG} compilation definitions"       )
+    set(MPI_${LANG}_COMPILER_INCLUDE_DIRS    "" CACHE STRING "MPI ${LANG} compiler wrapper include directories")
+    set(MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS  "" CACHE STRING "MPI ${LANG} additional include directories")
+    set(MPI_${LANG}_LINK_FLAGS               "" CACHE STRING "MPI ${LANG} linker flags"                  )
+    if(NOT MPI_${LANG}_COMPILER STREQUAL CMAKE_${LANG}_COMPILER)
+      set(MPI_${LANG}_LIB_NAMES                "" CACHE STRING "MPI ${LANG} libraries to link against"   )
+    endif()
+    mark_as_advanced(
+      MPI_${LANG}_COMPILE_OPTIONS
+      MPI_${LANG}_COMPILE_DEFINITIONS
+      MPI_${LANG}_LINK_FLAGS
+      MPI_${LANG}_LIB_NAMES
+      MPI_${LANG}_COMPILER_INCLUDE_DIRS
+      MPI_${LANG}_ADDITIONAL_INCLUDE_DIRS
+      MPI_${LANG}_COMPILER
+      )
+
+    # If we've found MPI, then we'll perform additional analysis: Determine the MPI version, MPI library version, supported
+    # MPI APIs (i.e. MPI-2 C++ bindings). For Fortran we also need to find specific parameters if we're under MPI-3.
+    if(MPI_${LANG}_WORKS)
+      if("${LANG}" STREQUAL "CXX" AND NOT DEFINED MPI_MPICXX_FOUND)
+        if(NOT MPI_CXX_SKIP_MPICXX AND NOT MPI_CXX_VALIDATE_SKIP_MPICXX)
+          _MPI_try_staged_settings(${LANG} test_mpi MPICXX FALSE FALSE)
+          if(MPI_RESULT_${LANG}_test_mpi_MPICXX)
+            set(MPI_MPICXX_FOUND TRUE)
+          else()
+            set(MPI_MPICXX_FOUND FALSE)
+          endif()
+        else()
+          set(MPI_MPICXX_FOUND FALSE)
+        endif()
+      endif()
+
+      # At this point, we know the bindings present but not the MPI version or anything else.
+      if(NOT DEFINED MPI_${LANG}_VERSION)
+        unset(MPI_${LANG}_VERSION_MAJOR)
+        unset(MPI_${LANG}_VERSION_MINOR)
+      endif()
+      set(MPI_BIN_FOLDER ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/FindMPI)
+
+      # For Fortran, we'll want to use the most modern MPI binding to test capabilities other than the
+      # Fortran parameters, since those depend on the method of consumption.
+      # For C++, we can always use the C bindings, and should do so, since the C++ bindings do not exist in MPI-3
+      # whereas the C bindings do, and the C++ bindings never offered any feature advantage over their C counterparts.
+      if("${LANG}" STREQUAL "Fortran")
+        if(MPI_${LANG}_HAVE_F08_MODULE)
+          set(MPI_${LANG}_HIGHEST_METHOD F08_MODULE)
+        elseif(MPI_${LANG}_HAVE_F90_MODULE)
+          set(MPI_${LANG}_HIGHEST_METHOD F90_MODULE)
+        else()
+          set(MPI_${LANG}_HIGHEST_METHOD F77_HEADER)
+        endif()
+
+        # Another difference between C and Fortran is that we can't use the preprocessor to determine whether MPI_VERSION
+        # and MPI_SUBVERSION are provided. These defines did not exist in MPI 1.0 and 1.1 and therefore might not
+        # exist. For C/C++, test_mpi.c will handle the MPI_VERSION extraction, but for Fortran, we need mpiver.f90.
+        if(NOT DEFINED MPI_${LANG}_VERSION)
+          _MPI_try_staged_settings(${LANG} mpiver ${MPI_${LANG}_HIGHEST_METHOD} FALSE FALSE)
+          if(MPI_RESULT_${LANG}_mpiver_${MPI_${LANG}_HIGHEST_METHOD})
+            file(STRINGS ${MPI_BIN_FOLDER}/mpiver_${LANG}.bin _MPI_VERSION_STRING LIMIT_COUNT 1 REGEX "INFO:MPI-VER")
+            if("${_MPI_VERSION_STRING}" MATCHES ".*INFO:MPI-VER\\[([0-9]+)\\.([0-9]+)\\].*")
+              set(MPI_${LANG}_VERSION_MAJOR "${CMAKE_MATCH_1}")
+              set(MPI_${LANG}_VERSION_MINOR "${CMAKE_MATCH_2}")
+              set(MPI_${LANG}_VERSION "${MPI_${LANG}_VERSION_MAJOR}.${MPI_${LANG}_VERSION_MINOR}")
+            endif()
+          endif()
+        endif()
+
+        # Finally, we want to find out which capabilities a given interface supports, compare the MPI-3 standard.
+        # This is determined by interface specific parameters MPI_SUBARRAYS_SUPPORTED and MPI_ASYNC_PROTECTS_NONBLOCKING
+        # and might vary between the different methods of consumption.
+        if(MPI_DETERMINE_Fortran_CAPABILITIES AND NOT MPI_Fortran_CAPABILITIES_DETERMINED)
+          foreach(mpimethod IN ITEMS F08_MODULE F90_MODULE F77_HEADER)
+            if(MPI_${LANG}_HAVE_${mpimethod})
+              set(MPI_${LANG}_${mpimethod}_SUBARRAYS FALSE)
+              set(MPI_${LANG}_${mpimethod}_ASYNCPROT FALSE)
+              _MPI_try_staged_settings(${LANG} fortranparam_mpi ${mpimethod} TRUE FALSE)
+              if(MPI_RESULT_${LANG}_fortranparam_mpi_${mpimethod} AND
+                NOT "${MPI_RUN_RESULT_${LANG}_fortranparam_mpi_${mpimethod}}" STREQUAL "FAILED_TO_RUN")
+                if("${MPI_RUN_OUTPUT_${LANG}_fortranparam_mpi_${mpimethod}}" MATCHES
+                  ".*INFO:SUBARRAYS\\[ *([TF]) *\\]-ASYNCPROT\\[ *([TF]) *\\].*")
+                  if("${CMAKE_MATCH_1}" STREQUAL "T")
+                    set(MPI_${LANG}_${mpimethod}_SUBARRAYS TRUE)
+                  endif()
+                  if("${CMAKE_MATCH_2}" STREQUAL "T")
+                    set(MPI_${LANG}_${mpimethod}_ASYNCPROT TRUE)
+                  endif()
+                endif()
+              endif()
+            endif()
+          endforeach()
+          set(MPI_Fortran_CAPABILITIES_DETERMINED TRUE)
+        endif()
+      else()
+        set(MPI_${LANG}_HIGHEST_METHOD normal)
+
+        # By the MPI-2 standard, MPI_VERSION and MPI_SUBVERSION are valid for both C and C++ bindings.
+        if(NOT DEFINED MPI_${LANG}_VERSION)
+          file(STRINGS ${MPI_BIN_FOLDER}/test_mpi_${LANG}.bin _MPI_VERSION_STRING LIMIT_COUNT 1 REGEX "INFO:MPI-VER")
+          if("${_MPI_VERSION_STRING}" MATCHES ".*INFO:MPI-VER\\[([0-9]+)\\.([0-9]+)\\].*")
+            set(MPI_${LANG}_VERSION_MAJOR "${CMAKE_MATCH_1}")
+            set(MPI_${LANG}_VERSION_MINOR "${CMAKE_MATCH_2}")
+            set(MPI_${LANG}_VERSION "${MPI_${LANG}_VERSION_MAJOR}.${MPI_${LANG}_VERSION_MINOR}")
+          endif()
+        endif()
+      endif()
+
+      unset(MPI_BIN_FOLDER)
+
+      # At this point, we have dealt with determining the MPI version and parameters for each Fortran method available.
+      # The one remaining issue is to determine which MPI library is installed.
+      # Determining the version and vendor of the MPI library is only possible via MPI_Get_library_version() at runtime,
+      # and therefore we cannot do this while cross-compiling (a user may still define MPI_<lang>_LIBRARY_VERSION_STRING
+      # themselves and we'll attempt splitting it, which is equivalent to provide the try_run output).
+      # It's also worth noting that the installed version string can depend on the language, or on the system the binary
+      # runs on if MPI is not statically linked.
+      if(MPI_DETERMINE_LIBRARY_VERSION AND NOT MPI_${LANG}_LIBRARY_VERSION_STRING)
+        _MPI_try_staged_settings(${LANG} libver_mpi ${MPI_${LANG}_HIGHEST_METHOD} TRUE FALSE)
+        if(MPI_RESULT_${LANG}_libver_mpi_${MPI_${LANG}_HIGHEST_METHOD} AND
+          "${MPI_RUN_RESULT_${LANG}_libver_mpi_${MPI_${LANG}_HIGHEST_METHOD}}" EQUAL "0")
+          string(STRIP "${MPI_RUN_OUTPUT_${LANG}_libver_mpi_${MPI_${LANG}_HIGHEST_METHOD}}"
+            MPI_${LANG}_LIBRARY_VERSION_STRING)
+        else()
+          set(MPI_${LANG}_LIBRARY_VERSION_STRING "NOTFOUND")
+        endif()
+      endif()
+    endif()
+
+    set(MPI_${LANG}_FIND_QUIETLY ${MPI_FIND_QUIETLY})
+    set(MPI_${LANG}_FIND_VERSION ${MPI_FIND_VERSION})
+    set(MPI_${LANG}_FIND_VERSION_EXACT ${MPI_FIND_VERSION_EXACT})
+
+    unset(MPI_${LANG}_REQUIRED_VARS)
+    if (NOT "${MPI_${LANG}_COMPILER}" STREQUAL "${CMAKE_${LANG}_COMPILER}")
+      foreach(mpilibname IN LISTS MPI_${LANG}_LIB_NAMES)
+        list(APPEND MPI_${LANG}_REQUIRED_VARS "MPI_${mpilibname}_LIBRARY")
+      endforeach()
+      list(APPEND MPI_${LANG}_REQUIRED_VARS "MPI_${LANG}_LIB_NAMES")
+      if("${LANG}" STREQUAL "Fortran")
+        # For Fortran we only need one of the module or header directories to have *some* support for MPI.
+        if(NOT MPI_${LANG}_MODULE_DIR)
+          list(APPEND MPI_${LANG}_REQUIRED_VARS "MPI_${LANG}_F77_HEADER_DIR")
+        endif()
+        if(NOT MPI_${LANG}_F77_HEADER_DIR)
+          list(APPEND MPI_${LANG}_REQUIRED_VARS "MPI_${LANG}_MODULE_DIR")
+        endif()
+      else()
+        list(APPEND MPI_${LANG}_REQUIRED_VARS "MPI_${LANG}_HEADER_DIR")
+      endif()
+      if(MPI_${LANG}_ADDITIONAL_INCLUDE_VARS)
+        foreach(mpiincvar IN LISTS MPI_${LANG}_ADDITIONAL_INCLUDE_VARS)
+          list(APPEND MPI_${LANG}_REQUIRED_VARS "MPI_${mpiincvar}_INCLUDE_DIR")
+        endforeach()
+      endif()
+      # Append the works variable now. If the settings did not work, this will show up properly.
+      list(APPEND MPI_${LANG}_REQUIRED_VARS "MPI_${LANG}_WORKS")
+    else()
+      # If the compiler worked implicitly, use its path as output.
+      # Should the compiler variable be set, we also require it to work.
+      list(APPEND MPI_${LANG}_REQUIRED_VARS "MPI_${LANG}_COMPILER")
+      if(MPI_${LANG}_COMPILER)
+        list(APPEND MPI_${LANG}_REQUIRED_VARS "MPI_${LANG}_WORKS")
+      endif()
+    endif()
+    find_package_handle_standard_args(MPI_${LANG} NAME_MISMATCHED
+      REQUIRED_VARS ${MPI_${LANG}_REQUIRED_VARS}
+      VERSION_VAR MPI_${LANG}_VERSION)
+
+    if(DEFINED MPI_${LANG}_VERSION)
+      if(NOT _MPI_MIN_VERSION OR _MPI_MIN_VERSION VERSION_GREATER MPI_${LANG}_VERSION)
+        set(_MPI_MIN_VERSION MPI_${LANG}_VERSION)
+      endif()
+    endif()
+  endif()
+endforeach()
+
+unset(_MPI_REQ_VARS)
+foreach(LANG IN ITEMS C CXX Fortran)
+  if((NOT MPI_FIND_COMPONENTS AND CMAKE_${LANG}_COMPILER_LOADED) OR LANG IN_LIST MPI_FIND_COMPONENTS)
+    list(APPEND _MPI_REQ_VARS "MPI_${LANG}_FOUND")
+  endif()
+endforeach()
+
+if(MPICXX IN_LIST MPI_FIND_COMPONENTS)
+  list(APPEND _MPI_REQ_VARS "MPI_MPICXX_FOUND")
+endif()
+
+find_package_handle_standard_args(MPI
+    REQUIRED_VARS ${_MPI_REQ_VARS}
+    VERSION_VAR ${_MPI_MIN_VERSION}
+    REASON_FAILURE_MESSAGE "${_MPI_FAIL_REASON}"
+    HANDLE_COMPONENTS)
+
+#=============================================================================
+# More backward compatibility stuff
+
+# For compatibility reasons, we also define MPIEXEC
+set(MPIEXEC "${MPIEXEC_EXECUTABLE}")
+
+# Copy over MPI_<LANG>_INCLUDE_PATH from the assembled INCLUDE_DIRS.
+foreach(LANG IN ITEMS C CXX Fortran)
+  if(MPI_${LANG}_FOUND)
+    set(MPI_${LANG}_INCLUDE_PATH "${MPI_${LANG}_INCLUDE_DIRS}")
+    unset(MPI_${LANG}_COMPILE_FLAGS)
+    if(MPI_${LANG}_COMPILE_OPTIONS)
+      list(JOIN MPI_${LANG}_COMPILE_OPTIONS " " MPI_${LANG}_COMPILE_FLAGS)
+    endif()
+    if(MPI_${LANG}_COMPILE_DEFINITIONS)
+      foreach(_MPI_DEF IN LISTS MPI_${LANG}_COMPILE_DEFINITIONS)
+        string(APPEND MPI_${LANG}_COMPILE_FLAGS " -D${_MPI_DEF}")
+      endforeach()
+    endif()
+  endif()
+endforeach()
+
+# Bare MPI sans ${LANG} vars are set to CXX then C, depending on what was found.
+# This mimics the behavior of the old language-oblivious FindMPI.
+set(_MPI_OLD_VARS COMPILER INCLUDE_PATH COMPILE_FLAGS LINK_FLAGS LIBRARIES)
+if (MPI_CXX_FOUND)
+  foreach (var ${_MPI_OLD_VARS})
+    set(MPI_${var} ${MPI_CXX_${var}})
+  endforeach()
+elseif (MPI_C_FOUND)
+  foreach (var ${_MPI_OLD_VARS})
+    set(MPI_${var} ${MPI_C_${var}})
+  endforeach()
+endif()
+
+# Chop MPI_LIBRARIES into the old-style MPI_LIBRARY and MPI_EXTRA_LIBRARY, and set them in cache.
+if (MPI_LIBRARIES)
+  list(GET MPI_LIBRARIES 0 MPI_LIBRARY_WORK)
+  set(MPI_LIBRARY "${MPI_LIBRARY_WORK}")
+  unset(MPI_LIBRARY_WORK)
+else()
+  set(MPI_LIBRARY "MPI_LIBRARY-NOTFOUND")
+endif()
+
+list(LENGTH MPI_LIBRARIES MPI_NUMLIBS)
+if (MPI_NUMLIBS GREATER 1)
+  set(MPI_EXTRA_LIBRARY_WORK "${MPI_LIBRARIES}")
+  list(REMOVE_AT MPI_EXTRA_LIBRARY_WORK 0)
+  set(MPI_EXTRA_LIBRARY "${MPI_EXTRA_LIBRARY_WORK}")
+  unset(MPI_EXTRA_LIBRARY_WORK)
+else()
+  set(MPI_EXTRA_LIBRARY "MPI_EXTRA_LIBRARY-NOTFOUND")
+endif()
+set(MPI_IGNORE_LEGACY_VARIABLES TRUE)
+#=============================================================================
+
+# unset these vars to cleanup namespace
+unset(_MPI_OLD_VARS)
+unset(_MPI_PREFIX_PATH)
+unset(_MPI_BASE_DIR)
+foreach (lang C CXX Fortran)
+  unset(_MPI_${LANG}_COMPILER_NAMES)
+endforeach()
+
+cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/FindMPI/fortranparam_mpi.f90.in b/share/cmake-3.22/Modules/FindMPI/fortranparam_mpi.f90.in
similarity index 100%
rename from share/cmake-3.18/Modules/FindMPI/fortranparam_mpi.f90.in
rename to share/cmake-3.22/Modules/FindMPI/fortranparam_mpi.f90.in
diff --git a/share/cmake-3.18/Modules/FindMPI/libver_mpi.c b/share/cmake-3.22/Modules/FindMPI/libver_mpi.c
similarity index 100%
rename from share/cmake-3.18/Modules/FindMPI/libver_mpi.c
rename to share/cmake-3.22/Modules/FindMPI/libver_mpi.c
diff --git a/share/cmake-3.18/Modules/FindMPI/libver_mpi.f90.in b/share/cmake-3.22/Modules/FindMPI/libver_mpi.f90.in
similarity index 100%
rename from share/cmake-3.18/Modules/FindMPI/libver_mpi.f90.in
rename to share/cmake-3.22/Modules/FindMPI/libver_mpi.f90.in
diff --git a/share/cmake-3.18/Modules/FindMPI/mpiver.f90.in b/share/cmake-3.22/Modules/FindMPI/mpiver.f90.in
similarity index 100%
rename from share/cmake-3.18/Modules/FindMPI/mpiver.f90.in
rename to share/cmake-3.22/Modules/FindMPI/mpiver.f90.in
diff --git a/share/cmake-3.22/Modules/FindMPI/test_mpi.c b/share/cmake-3.22/Modules/FindMPI/test_mpi.c
new file mode 100644
index 0000000..70d7e1d
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindMPI/test_mpi.c
@@ -0,0 +1,38 @@
+#include <mpi.h>
+
+#ifdef __cplusplus
+#  include <cstdio>
+#else
+#  include <stdio.h>
+#endif
+
+#if defined(MPI_VERSION) && defined(MPI_SUBVERSION)
+const static char mpiver_str[] = { 'I', 'N',
+                                   'F', 'O',
+                                   ':', 'M',
+                                   'P', 'I',
+                                   '-', 'V',
+                                   'E', 'R',
+                                   '[', ('0' + MPI_VERSION),
+                                   '.', ('0' + MPI_SUBVERSION),
+                                   ']', '\0' };
+#endif
+
+int main(int argc, char* argv[])
+{
+#if defined(MPI_VERSION) && defined(MPI_SUBVERSION)
+#  ifdef __cplusplus
+  std::puts(mpiver_str);
+#  else
+  puts(mpiver_str);
+#  endif
+#endif
+#ifdef TEST_MPI_MPICXX
+  MPI::MPI_Init(&argc, &argv);
+  MPI::MPI_Finalize();
+#else
+  MPI_Init(&argc, &argv);
+  MPI_Finalize();
+#endif
+  return 0;
+}
diff --git a/share/cmake-3.18/Modules/FindMPI/test_mpi.f90.in b/share/cmake-3.22/Modules/FindMPI/test_mpi.f90.in
similarity index 100%
rename from share/cmake-3.18/Modules/FindMPI/test_mpi.f90.in
rename to share/cmake-3.22/Modules/FindMPI/test_mpi.f90.in
diff --git a/share/cmake-3.22/Modules/FindMatlab.cmake b/share/cmake-3.22/Modules/FindMatlab.cmake
new file mode 100644
index 0000000..0ca593e
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindMatlab.cmake
@@ -0,0 +1,1976 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindMatlab
+----------
+
+Finds Matlab or Matlab Compiler Runtime (MCR) and provides Matlab tools,
+libraries and compilers to CMake.
+
+This package primary purpose is to find the libraries associated with Matlab
+or the MCR in order to be able to build Matlab extensions (mex files). It
+can also be used:
+
+* to run specific commands in Matlab in case Matlab is available
+* for declaring Matlab unit test
+* to retrieve various information from Matlab (mex extensions, versions and
+  release queries, ...)
+
+.. versionadded:: 3.12
+  Added Matlab Compiler Runtime (MCR) support.
+
+The module supports the following components:
+
+* ``ENG_LIBRARY`` and ``MAT_LIBRARY``: respectively the ``ENG`` and ``MAT``
+  libraries of Matlab
+* ``MAIN_PROGRAM`` the Matlab binary program. Note that this component is not
+  available on the MCR version, and will yield an error if the MCR is found
+  instead of the regular Matlab installation.
+* ``MEX_COMPILER`` the MEX compiler.
+* ``MCC_COMPILER`` the MCC compiler, included with the Matlab Compiler add-on.
+* ``SIMULINK`` the Simulink environment.
+
+.. versionadded:: 3.7
+  Added the ``MAT_LIBRARY`` component.
+
+.. versionadded:: 3.13
+  Added the ``ENGINE_LIBRARY``, ``DATAARRAY_LIBRARY`` and ``MCC_COMPILER``
+  components.
+
+.. versionchanged:: 3.14
+  Removed the ``MX_LIBRARY``, ``ENGINE_LIBRARY`` and ``DATAARRAY_LIBRARY``
+  components.  These libraries are found unconditionally.
+
+.. note::
+
+  The version given to the :command:`find_package` directive is the Matlab
+  **version**, which should not be confused with the Matlab *release* name
+  (eg. `R2014`).
+  The :command:`matlab_get_version_from_release_name` and
+  :command:`matlab_get_release_name_from_version` provide a mapping
+  between the release name and the version.
+
+The variable :variable:`Matlab_ROOT_DIR` may be specified in order to give
+the path of the desired Matlab version. Otherwise, the behavior is platform
+specific:
+
+* Windows: The installed versions of Matlab/MCR are retrieved from the
+  Windows registry
+* OS X: The installed versions of Matlab/MCR are given by the MATLAB
+  default installation paths in ``/Application``. If no such application is
+  found, it falls back to the one that might be accessible from the ``PATH``.
+* Unix: The desired Matlab should be accessible from the ``PATH``. This does
+  not work for MCR installation and :variable:`Matlab_ROOT_DIR` should be
+  specified on this platform.
+
+Additional information is provided when :variable:`MATLAB_FIND_DEBUG` is set.
+When a Matlab/MCR installation is found automatically and the ``MATLAB_VERSION``
+is not given, the version is queried from Matlab directly (on Windows this
+may pop up a Matlab window) or from the MCR installation.
+
+The mapping of the release names and the version of Matlab is performed by
+defining pairs (name, version).  The variable
+:variable:`MATLAB_ADDITIONAL_VERSIONS` may be provided before the call to
+the :command:`find_package` in order to handle additional versions.
+
+A Matlab scripts can be added to the set of tests using the
+:command:`matlab_add_unit_test`. By default, the Matlab unit test framework
+will be used (>= 2013a) to run this script, but regular ``.m`` files
+returning an exit code can be used as well (0 indicating a success).
+
+Module Input Variables
+^^^^^^^^^^^^^^^^^^^^^^
+
+Users or projects may set the following variables to configure the module
+behavior:
+
+:variable:`Matlab_ROOT_DIR`
+  the root of the Matlab installation.
+:variable:`MATLAB_FIND_DEBUG`
+  outputs debug information
+:variable:`MATLAB_ADDITIONAL_VERSIONS`
+  additional versions of Matlab for the automatic retrieval of the installed
+  versions.
+
+Imported targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.22
+
+This module defines the following :prop_tgt:`IMPORTED` targets:
+
+``Matlab::mex``
+  The ``mex`` library, always available.
+
+``Matlab::mx``
+  The mx library of Matlab (arrays), always available.
+
+``Matlab::eng``
+  Matlab engine library. Available only if the ``ENG_LIBRARY`` component
+  is requested.
+
+``Matlab::mat``
+  Matlab matrix library. Available only if the ``MAT_LIBRARY`` component
+  is requested.
+
+``Matlab::MatlabEngine``
+  Matlab C++ engine library, always available for R2018a and newer.
+
+``Matlab::MatlabDataArray``
+  Matlab C++ data array library, always available for R2018a and newer.
+
+Variables defined by the module
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Result variables
+""""""""""""""""
+
+``Matlab_FOUND``
+  ``TRUE`` if the Matlab installation is found, ``FALSE``
+  otherwise. All variable below are defined if Matlab is found.
+``Matlab_ROOT_DIR``
+  the final root of the Matlab installation determined by the FindMatlab
+  module.
+``Matlab_MAIN_PROGRAM``
+  the Matlab binary program. Available only if the component ``MAIN_PROGRAM``
+  is given in the :command:`find_package` directive.
+``Matlab_INCLUDE_DIRS``
+ the path of the Matlab libraries headers
+``Matlab_MEX_LIBRARY``
+  library for mex, always available.
+``Matlab_MX_LIBRARY``
+  mx library of Matlab (arrays), always available.
+``Matlab_ENG_LIBRARY``
+  Matlab engine library. Available only if the component ``ENG_LIBRARY``
+  is requested.
+``Matlab_MAT_LIBRARY``
+  Matlab matrix library. Available only if the component ``MAT_LIBRARY``
+  is requested.
+``Matlab_ENGINE_LIBRARY``
+  .. versionadded:: 3.13
+
+  Matlab C++ engine library, always available for R2018a and newer.
+``Matlab_DATAARRAY_LIBRARY``
+  .. versionadded:: 3.13
+
+  Matlab C++ data array library, always available for R2018a and newer.
+``Matlab_LIBRARIES``
+  the whole set of libraries of Matlab
+``Matlab_MEX_COMPILER``
+  the mex compiler of Matlab. Currently not used.
+  Available only if the component ``MEX_COMPILER`` is requested.
+``Matlab_MCC_COMPILER``
+  .. versionadded:: 3.13
+
+  the mcc compiler of Matlab. Included with the Matlab Compiler add-on.
+  Available only if the component ``MCC_COMPILER`` is requested.
+
+Cached variables
+""""""""""""""""
+
+``Matlab_MEX_EXTENSION``
+  the extension of the mex files for the current platform (given by Matlab).
+``Matlab_ROOT_DIR``
+  the location of the root of the Matlab installation found. If this value
+  is changed by the user, the result variables are recomputed.
+
+Provided macros
+^^^^^^^^^^^^^^^
+
+:command:`matlab_get_version_from_release_name`
+  returns the version from the release name
+:command:`matlab_get_release_name_from_version`
+  returns the release name from the Matlab version
+
+Provided functions
+^^^^^^^^^^^^^^^^^^
+
+:command:`matlab_add_mex`
+  adds a target compiling a MEX file.
+:command:`matlab_add_unit_test`
+  adds a Matlab unit test file as a test to the project.
+:command:`matlab_extract_all_installed_versions_from_registry`
+  parses the registry for all Matlab versions. Available on Windows only.
+  The part of the registry parsed is dependent on the host processor
+:command:`matlab_get_all_valid_matlab_roots_from_registry`
+  returns all the possible Matlab or MCR paths, according to a previously
+  given list. Only the existing/accessible paths are kept. This is mainly
+  useful for the searching all possible Matlab installation.
+:command:`matlab_get_mex_suffix`
+  returns the suffix to be used for the mex files
+  (platform/architecture dependent)
+:command:`matlab_get_version_from_matlab_run`
+  returns the version of Matlab/MCR, given the full directory of the Matlab/MCR
+  installation path.
+
+
+Known issues
+^^^^^^^^^^^^
+
+**Symbol clash in a MEX target**
+  By default, every symbols inside a MEX
+  file defined with the command :command:`matlab_add_mex` have hidden
+  visibility, except for the entry point. This is the default behavior of
+  the MEX compiler, which lowers the risk of symbol collision between the
+  libraries shipped with Matlab, and the libraries to which the MEX file is
+  linking to. This is also the default on Windows platforms.
+
+  However, this is not sufficient in certain case, where for instance your
+  MEX file is linking against libraries that are already loaded by Matlab,
+  even if those libraries have different SONAMES.
+  A possible solution is to hide the symbols of the libraries to which the
+  MEX target is linking to. This can be achieved in GNU GCC compilers with
+  the linker option ``-Wl,--exclude-libs,ALL``.
+
+**Tests using GPU resources**
+  in case your MEX file is using the GPU and
+  in order to be able to run unit tests on this MEX file, the GPU resources
+  should be properly released by Matlab. A possible solution is to make
+  Matlab aware of the use of the GPU resources in the session, which can be
+  performed by a command such as ``D = gpuDevice()`` at the beginning of
+  the test script (or via a fixture).
+
+
+Reference
+^^^^^^^^^
+
+.. variable:: Matlab_ROOT_DIR
+
+   The root folder of the Matlab installation. If set before the call to
+   :command:`find_package`, the module will look for the components in that
+   path. If not set, then an automatic search of Matlab
+   will be performed. If set, it should point to a valid version of Matlab.
+
+.. variable:: MATLAB_FIND_DEBUG
+
+   If set, the lookup of Matlab and the intermediate configuration steps are
+   outputted to the console.
+
+.. variable:: MATLAB_ADDITIONAL_VERSIONS
+
+  If set, specifies additional versions of Matlab that may be looked for.
+  The variable should be a list of strings, organized by pairs of release
+  name and versions, such as follows::
+
+    set(MATLAB_ADDITIONAL_VERSIONS
+        "release_name1=corresponding_version1"
+        "release_name2=corresponding_version2"
+        ...
+        )
+
+  Example::
+
+    set(MATLAB_ADDITIONAL_VERSIONS
+        "R2013b=8.2"
+        "R2013a=8.1"
+        "R2012b=8.0")
+
+  The order of entries in this list matters when several versions of
+  Matlab are installed. The priority is set according to the ordering in
+  this list.
+#]=======================================================================]
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0057 NEW) # if IN_LIST
+
+set(_FindMatlab_SELF_DIR "${CMAKE_CURRENT_LIST_DIR}")
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+include(CheckCXXCompilerFlag)
+include(CheckCCompilerFlag)
+
+
+# The currently supported versions. Other version can be added by the user by
+# providing MATLAB_ADDITIONAL_VERSIONS
+if(NOT MATLAB_ADDITIONAL_VERSIONS)
+  set(MATLAB_ADDITIONAL_VERSIONS)
+endif()
+
+set(MATLAB_VERSIONS_MAPPING
+  "R2021b=9.11"
+  "R2021a=9.10"
+  "R2020b=9.9"
+  "R2020a=9.8"
+  "R2019b=9.7"
+  "R2019a=9.6"
+  "R2018b=9.5"
+  "R2018a=9.4"
+  "R2017b=9.3"
+  "R2017a=9.2"
+  "R2016b=9.1"
+  "R2016a=9.0"
+  "R2015b=8.6"
+  "R2015a=8.5"
+  "R2014b=8.4"
+  "R2014a=8.3"
+  "R2013b=8.2"
+  "R2013a=8.1"
+  "R2012b=8.0"
+  "R2012a=7.14"
+  "R2011b=7.13"
+  "R2011a=7.12"
+  "R2010b=7.11"
+
+  ${MATLAB_ADDITIONAL_VERSIONS}
+  )
+
+
+# temporary folder for all Matlab runs
+set(_matlab_temporary_folder ${CMAKE_BINARY_DIR}/Matlab)
+
+if(NOT EXISTS "${_matlab_temporary_folder}")
+  file(MAKE_DIRECTORY "${_matlab_temporary_folder}")
+endif()
+
+#[=======================================================================[.rst:
+.. command:: matlab_get_version_from_release_name
+
+  Returns the version of Matlab (17.58) from a release name (R2017k)
+#]=======================================================================]
+macro(matlab_get_version_from_release_name release_name version_name)
+
+  string(REGEX MATCHALL "${release_name}=([0-9]+\\.?[0-9]*)" _matched ${MATLAB_VERSIONS_MAPPING})
+
+  set(${version_name} "")
+  if(NOT _matched STREQUAL "")
+    set(${version_name} ${CMAKE_MATCH_1})
+  else()
+    message(WARNING "[MATLAB] The release name ${release_name} is not registered")
+  endif()
+  unset(_matched)
+
+endmacro()
+
+
+
+
+
+#[=======================================================================[.rst:
+.. command:: matlab_get_release_name_from_version
+
+  Returns the release name (R2017k) from the version of Matlab (17.58)
+#]=======================================================================]
+macro(matlab_get_release_name_from_version version release_name)
+
+  set(${release_name} "")
+  foreach(_var IN LISTS MATLAB_VERSIONS_MAPPING)
+    string(REGEX MATCHALL "(.+)=${version}" _matched ${_var})
+    if(NOT _matched STREQUAL "")
+      set(${release_name} ${CMAKE_MATCH_1})
+      break()
+    endif()
+  endforeach(_var)
+
+  unset(_var)
+  unset(_matched)
+  if(${release_name} STREQUAL "")
+    message(WARNING "[MATLAB] The version ${version} is not registered")
+  endif()
+
+endmacro()
+
+
+
+
+
+# extracts all the supported release names (R2017k...) of Matlab
+# internal use
+macro(matlab_get_supported_releases list_releases)
+  set(${list_releases})
+  foreach(_var IN LISTS MATLAB_VERSIONS_MAPPING)
+    string(REGEX MATCHALL "(.+)=([0-9]+\\.?[0-9]*)" _matched ${_var})
+    if(NOT _matched STREQUAL "")
+      list(APPEND ${list_releases} ${CMAKE_MATCH_1})
+    endif()
+    unset(_matched)
+    unset(CMAKE_MATCH_1)
+  endforeach(_var)
+  unset(_var)
+endmacro()
+
+
+
+# extracts all the supported versions of Matlab
+# internal use
+macro(matlab_get_supported_versions list_versions)
+  set(${list_versions})
+  foreach(_var IN LISTS MATLAB_VERSIONS_MAPPING)
+    string(REGEX MATCHALL "(.+)=([0-9]+\\.?[0-9]*)" _matched ${_var})
+    if(NOT _matched STREQUAL "")
+      list(APPEND ${list_versions} ${CMAKE_MATCH_2})
+    endif()
+    unset(_matched)
+    unset(CMAKE_MATCH_1)
+  endforeach(_var)
+  unset(_var)
+endmacro()
+
+
+#[=======================================================================[.rst:
+.. command:: matlab_extract_all_installed_versions_from_registry
+
+  This function parses the registry and founds the Matlab versions that are
+  installed. The found versions are returned in `matlab_versions`.
+  Set `win64` to `TRUE` if the 64 bit version of Matlab should be looked for
+  The returned list contains all versions under
+  ``HKLM\\SOFTWARE\\Mathworks\\MATLAB`` and
+  ``HKLM\\SOFTWARE\\Mathworks\\MATLAB Runtime`` or an empty list in case an
+  error occurred (or nothing found).
+
+  .. note::
+
+    Only the versions are provided. No check is made over the existence of the
+    installation referenced in the registry,
+
+#]=======================================================================]
+function(matlab_extract_all_installed_versions_from_registry win64 matlab_versions)
+
+  if(NOT CMAKE_HOST_WIN32)
+    message(FATAL_ERROR "[MATLAB] This macro can only be called by a windows host (call to reg.exe)")
+  endif()
+
+  if(${win64} AND CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "64")
+    set(APPEND_REG "/reg:64")
+  else()
+    set(APPEND_REG "/reg:32")
+  endif()
+
+  set(matlabs_from_registry)
+
+  foreach(_installation_type IN ITEMS "MATLAB" "MATLAB Runtime" "MATLAB Compiler Runtime")
+
+    # /reg:64 should be added on 64 bits capable OSs in order to enable the
+    # redirection of 64 bits applications
+    execute_process(
+      COMMAND reg query "HKEY_LOCAL_MACHINE\\SOFTWARE\\Mathworks\\${_installation_type}" /f * /k ${APPEND_REG}
+      RESULT_VARIABLE resultMatlab
+      OUTPUT_VARIABLE varMatlab
+      ERROR_VARIABLE errMatlab
+      INPUT_FILE NUL
+      )
+
+
+    if(resultMatlab EQUAL 0)
+
+      string(
+        REGEX MATCHALL "${_installation_type}\\\\([0-9]+(\\.[0-9]+)?)"
+        matlab_versions_regex ${varMatlab})
+
+      foreach(match IN LISTS matlab_versions_regex)
+        string(
+          REGEX MATCH "${_installation_type}\\\\(([0-9]+)(\\.([0-9]+))?)"
+          current_match ${match})
+
+        set(_matlab_current_version ${CMAKE_MATCH_1})
+        set(current_matlab_version_major ${CMAKE_MATCH_2})
+        set(current_matlab_version_minor ${CMAKE_MATCH_4})
+        if(NOT current_matlab_version_minor)
+          set(current_matlab_version_minor "0")
+        endif()
+
+        list(APPEND matlabs_from_registry ${_matlab_current_version})
+        unset(_matlab_current_version)
+      endforeach()
+
+    endif()
+  endforeach()
+
+  if(matlabs_from_registry)
+    list(REMOVE_DUPLICATES matlabs_from_registry)
+    list(SORT matlabs_from_registry COMPARE NATURAL)
+    list(REVERSE matlabs_from_registry)
+  endif()
+
+  set(${matlab_versions} ${matlabs_from_registry} PARENT_SCOPE)
+
+endfunction()
+
+
+
+# (internal)
+macro(extract_matlab_versions_from_registry_brute_force matlab_versions)
+  # get the supported versions
+  set(matlab_supported_versions)
+  matlab_get_supported_versions(matlab_supported_versions)
+
+
+  # this is a manual population of the versions we want to look for
+  # this can be done as is, but preferably with the call to
+  # matlab_get_supported_versions and variable
+
+  # populating the versions we want to look for
+  # set(matlab_supported_versions)
+
+  # # Matlab 7
+  # set(matlab_major 7)
+  # foreach(current_matlab_minor RANGE 4 20)
+    # list(APPEND matlab_supported_versions "${matlab_major}.${current_matlab_minor}")
+  # endforeach(current_matlab_minor)
+
+  # # Matlab 8
+  # set(matlab_major 8)
+  # foreach(current_matlab_minor RANGE 0 5)
+    # list(APPEND matlab_supported_versions "${matlab_major}.${current_matlab_minor}")
+  # endforeach(current_matlab_minor)
+
+  # # taking into account the possible additional versions provided by the user
+  # if(DEFINED MATLAB_ADDITIONAL_VERSIONS)
+    # list(APPEND matlab_supported_versions MATLAB_ADDITIONAL_VERSIONS)
+  # endif()
+
+  # we order from more recent to older
+  if(matlab_supported_versions)
+    list(REMOVE_DUPLICATES matlab_supported_versions)
+    list(SORT matlab_supported_versions COMPARE NATURAL)
+    list(REVERSE matlab_supported_versions)
+  endif()
+
+  set(${matlab_versions} ${matlab_supported_versions})
+endmacro()
+
+
+
+
+#[=======================================================================[.rst:
+.. command:: matlab_get_all_valid_matlab_roots_from_registry
+
+  Populates the Matlab root with valid versions of Matlab or
+  Matlab Runtime (MCR).
+  The returned matlab_roots is organized in triplets
+  ``(type,version_number,matlab_root_path)``, where ``type``
+  indicates either ``MATLAB`` or ``MCR``.
+
+  ::
+
+    matlab_get_all_valid_matlab_roots_from_registry(
+        matlab_versions
+        matlab_roots)
+
+  ``matlab_versions``
+    the versions of each of the Matlab or MCR installations
+  ``matlab_roots``
+    the location of each of the Matlab or MCR installations
+#]=======================================================================]
+function(matlab_get_all_valid_matlab_roots_from_registry matlab_versions matlab_roots)
+
+  # The matlab_versions comes either from
+  # extract_matlab_versions_from_registry_brute_force or
+  # matlab_extract_all_installed_versions_from_registry.
+
+  set(_matlab_roots_list )
+  # check for Matlab installations
+  foreach(_matlab_current_version ${matlab_versions})
+    get_filename_component(
+      current_MATLAB_ROOT
+      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MathWorks\\MATLAB\\${_matlab_current_version};MATLABROOT]"
+      ABSOLUTE)
+
+    if(EXISTS "${current_MATLAB_ROOT}")
+      list(APPEND _matlab_roots_list "MATLAB" ${_matlab_current_version} ${current_MATLAB_ROOT})
+    endif()
+
+  endforeach()
+
+  # Check for MCR installations
+  foreach(_matlab_current_version ${matlab_versions})
+    get_filename_component(
+      current_MATLAB_ROOT
+      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MathWorks\\MATLAB Runtime\\${_matlab_current_version};MATLABROOT]"
+      ABSOLUTE)
+
+    # remove the dot
+    string(REPLACE "." "" _matlab_current_version_without_dot "${_matlab_current_version}")
+
+    if(EXISTS "${current_MATLAB_ROOT}")
+      list(APPEND _matlab_roots_list "MCR" ${_matlab_current_version} "${current_MATLAB_ROOT}/v${_matlab_current_version_without_dot}")
+    endif()
+
+  endforeach()
+
+  # Check for old MCR installations
+  foreach(_matlab_current_version ${matlab_versions})
+    get_filename_component(
+      current_MATLAB_ROOT
+      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MathWorks\\MATLAB Compiler Runtime\\${_matlab_current_version};MATLABROOT]"
+      ABSOLUTE)
+
+    # remove the dot
+    string(REPLACE "." "" _matlab_current_version_without_dot "${_matlab_current_version}")
+
+    if(EXISTS "${current_MATLAB_ROOT}")
+      list(APPEND _matlab_roots_list "MCR" ${_matlab_current_version} "${current_MATLAB_ROOT}/v${_matlab_current_version_without_dot}")
+    endif()
+
+  endforeach()
+  set(${matlab_roots} ${_matlab_roots_list} PARENT_SCOPE)
+endfunction()
+
+#[=======================================================================[.rst:
+.. command:: matlab_get_mex_suffix
+
+  Returns the extension of the mex files (the suffixes).
+  This function should not be called before the appropriate Matlab root has
+  been found.
+
+  ::
+
+    matlab_get_mex_suffix(
+        matlab_root
+        mex_suffix)
+
+  ``matlab_root``
+    the root of the Matlab/MCR installation
+  ``mex_suffix``
+    the variable name in which the suffix will be returned.
+#]=======================================================================]
+function(matlab_get_mex_suffix matlab_root mex_suffix)
+
+  # todo setup the extension properly. Currently I do not know if this is
+  # sufficient for all win32 distributions.
+  # there is also CMAKE_EXECUTABLE_SUFFIX that could be tweaked
+  set(mexext_suffix "")
+  if(WIN32)
+    list(APPEND mexext_suffix ".bat")
+  endif()
+
+  # we first try without suffix, since cmake does not understand a list with
+  # one empty string element
+  find_program(
+    Matlab_MEXEXTENSIONS_PROG
+    NAMES mexext
+    PATHS ${matlab_root}/bin
+    DOC "Matlab MEX extension provider"
+    NO_DEFAULT_PATH
+  )
+
+  foreach(current_mexext_suffix IN LISTS mexext_suffix)
+    if(NOT DEFINED Matlab_MEXEXTENSIONS_PROG OR NOT Matlab_MEXEXTENSIONS_PROG)
+      # this call should populate the cache automatically
+      find_program(
+        Matlab_MEXEXTENSIONS_PROG
+        "mexext${current_mexext_suffix}"
+        PATHS ${matlab_root}/bin
+        DOC "Matlab MEX extension provider"
+        NO_DEFAULT_PATH
+      )
+    endif()
+  endforeach(current_mexext_suffix)
+  if(MATLAB_FIND_DEBUG)
+    message(STATUS "[MATLAB] Determining mex files extensions from '${matlab_root}/bin' with program '${Matlab_MEXEXTENSIONS_PROG}'")
+  endif()
+
+  # the program has been found?
+  if((NOT Matlab_MEXEXTENSIONS_PROG) OR (NOT EXISTS ${Matlab_MEXEXTENSIONS_PROG}))
+    if(MATLAB_FIND_DEBUG)
+      message(WARNING "[MATLAB] Cannot found mexext program. Matlab root is ${matlab_root}")
+    endif()
+    unset(Matlab_MEXEXTENSIONS_PROG CACHE)
+    return()
+  endif()
+
+  set(_matlab_mex_extension)
+
+  set(devnull)
+  if(UNIX)
+    set(devnull INPUT_FILE /dev/null)
+  elseif(WIN32)
+    set(devnull INPUT_FILE NUL)
+  endif()
+
+  if(WIN32)
+    # this environment variable is used to determine the arch on Windows
+    if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+      set(ENV{MATLAB_ARCH} "win64")
+    else()
+      set(ENV{MATLAB_ARCH} "win32")
+    endif()
+  endif()
+
+  # this is the preferred way. If this does not work properly (eg. MCR on Windows), then we use our own knowledge
+  execute_process(
+    COMMAND ${Matlab_MEXEXTENSIONS_PROG}
+    OUTPUT_VARIABLE _matlab_mex_extension
+    ERROR_VARIABLE _matlab_mex_extension_error
+    OUTPUT_STRIP_TRAILING_WHITESPACE
+    ${devnull})
+  unset(ENV{MATLAB_ARCH})
+
+  if(_matlab_mex_extension_error)
+    if(WIN32)
+      # this is only for intel architecture
+      if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+        set(_matlab_mex_extension "mexw64")
+      else()
+        set(_matlab_mex_extension "mexw32")
+      endif()
+    endif()
+  endif()
+
+  string(STRIP "${_matlab_mex_extension}"  _matlab_mex_extension)
+  if(MATLAB_FIND_DEBUG)
+    message(STATUS "[MATLAB] '${Matlab_MEXEXTENSIONS_PROG}' : determined extension '${_matlab_mex_extension}' and error string is '${_matlab_mex_extension_error}'")
+  endif()
+
+  unset(Matlab_MEXEXTENSIONS_PROG CACHE)
+  set(${mex_suffix} ${_matlab_mex_extension} PARENT_SCOPE)
+endfunction()
+
+
+
+
+#[=======================================================================[.rst:
+.. command:: matlab_get_version_from_matlab_run
+
+  This function runs Matlab program specified on arguments and extracts its
+  version. If the path provided for the Matlab installation points to an MCR
+  installation, the version is extracted from the installed files.
+
+  ::
+
+    matlab_get_version_from_matlab_run(
+        matlab_binary_path
+        matlab_list_versions)
+
+  ``matlab_binary_path``
+    the location of the `matlab` binary executable
+  ``matlab_list_versions``
+    the version extracted from Matlab
+#]=======================================================================]
+function(matlab_get_version_from_matlab_run matlab_binary_program matlab_list_versions)
+
+  set(${matlab_list_versions} "" PARENT_SCOPE)
+
+  if(MATLAB_FIND_DEBUG)
+    message(STATUS "[MATLAB] Determining the version of Matlab from ${matlab_binary_program}")
+  endif()
+
+  if(EXISTS "${_matlab_temporary_folder}/matlabVersionLog.cmaketmp")
+    if(MATLAB_FIND_DEBUG)
+      message(STATUS "[MATLAB] Removing previous ${_matlab_temporary_folder}/matlabVersionLog.cmaketmp file")
+    endif()
+    file(REMOVE "${_matlab_temporary_folder}/matlabVersionLog.cmaketmp")
+  endif()
+
+
+  # the log file is needed since on windows the command executes in a new
+  # window and it is not possible to get back the answer of Matlab
+  # the -wait command is needed on windows, otherwise the call returns
+  # immediately after the program launches itself.
+  if(WIN32)
+    set(_matlab_additional_commands "-wait")
+  endif()
+
+  set(devnull)
+  if(UNIX)
+    set(devnull INPUT_FILE /dev/null)
+  elseif(WIN32)
+    set(devnull INPUT_FILE NUL)
+  endif()
+
+  # timeout set to 120 seconds, in case it does not start
+  # note as said before OUTPUT_VARIABLE cannot be used in a platform
+  # independent manner however, not setting it would flush the output of Matlab
+  # in the current console (unix variant)
+  execute_process(
+    COMMAND "${matlab_binary_program}" -nosplash -nojvm ${_matlab_additional_commands} -logfile "matlabVersionLog.cmaketmp" -nodesktop -nodisplay -r "version, exit"
+    OUTPUT_VARIABLE _matlab_version_from_cmd_dummy
+    RESULT_VARIABLE _matlab_result_version_call
+    ERROR_VARIABLE _matlab_result_version_call_error
+    TIMEOUT 120
+    WORKING_DIRECTORY "${_matlab_temporary_folder}"
+    ${devnull}
+    )
+
+  if(_matlab_result_version_call MATCHES "timeout")
+    if(MATLAB_FIND_DEBUG)
+      message(WARNING "[MATLAB] Unable to determine the version of Matlab."
+        " Matlab call timed out after 120 seconds.")
+    endif()
+    return()
+  endif()
+
+  if(${_matlab_result_version_call})
+    if(MATLAB_FIND_DEBUG)
+      message(WARNING "[MATLAB] Unable to determine the version of Matlab. Matlab call returned with error ${_matlab_result_version_call}.")
+    endif()
+    return()
+  elseif(NOT EXISTS "${_matlab_temporary_folder}/matlabVersionLog.cmaketmp")
+    if(MATLAB_FIND_DEBUG)
+      message(WARNING "[MATLAB] Unable to determine the version of Matlab. The log file does not exist.")
+    endif()
+    return()
+  endif()
+
+  # if successful, read back the log
+  file(READ "${_matlab_temporary_folder}/matlabVersionLog.cmaketmp" _matlab_version_from_cmd)
+  file(REMOVE "${_matlab_temporary_folder}/matlabVersionLog.cmaketmp")
+
+  set(index -1)
+  string(FIND "${_matlab_version_from_cmd}" "ans" index)
+  if(index EQUAL -1)
+
+    if(MATLAB_FIND_DEBUG)
+      message(WARNING "[MATLAB] Cannot find the version of Matlab returned by the run.")
+    endif()
+
+  else()
+    set(matlab_list_of_all_versions_tmp)
+
+    string(SUBSTRING "${_matlab_version_from_cmd}" ${index} -1 substring_ans)
+    string(
+      REGEX MATCHALL "ans[\r\n\t ]*=[\r\n\t ]*'?([0-9]+(\\.[0-9]+)?)"
+      matlab_versions_regex
+      ${substring_ans})
+    foreach(match IN LISTS matlab_versions_regex)
+      string(
+        REGEX MATCH "ans[\r\n\t ]*=[\r\n\t ]*'?(([0-9]+)(\\.([0-9]+))?)"
+        current_match ${match})
+
+      list(APPEND matlab_list_of_all_versions_tmp ${CMAKE_MATCH_1})
+    endforeach()
+    if(matlab_list_of_all_versions_tmp)
+      list(REMOVE_DUPLICATES matlab_list_of_all_versions_tmp)
+    endif()
+    set(${matlab_list_versions} ${matlab_list_of_all_versions_tmp} PARENT_SCOPE)
+
+  endif()
+
+endfunction()
+
+#[=======================================================================[.rst:
+.. command:: matlab_add_unit_test
+
+  Adds a Matlab unit test to the test set of cmake/ctest.
+  This command requires the component ``MAIN_PROGRAM`` and hence is not
+  available for an MCR installation.
+
+  The unit test uses the Matlab unittest framework (default, available
+  starting Matlab 2013b+) except if the option ``NO_UNITTEST_FRAMEWORK``
+  is given.
+
+  The function expects one Matlab test script file to be given.
+  In the case ``NO_UNITTEST_FRAMEWORK`` is given, the unittest script file
+  should contain the script to be run, plus an exit command with the exit
+  value. This exit value will be passed to the ctest framework (0 success,
+  non 0 failure). Additional arguments accepted by :command:`add_test` can be
+  passed through ``TEST_ARGS`` (eg. ``CONFIGURATION <config> ...``).
+
+  ::
+
+    matlab_add_unit_test(
+        NAME <name>
+        UNITTEST_FILE matlab_file_containing_unittest.m
+        [CUSTOM_TEST_COMMAND matlab_command_to_run_as_test]
+        [UNITTEST_PRECOMMAND matlab_command_to_run]
+        [TIMEOUT timeout]
+        [ADDITIONAL_PATH path1 [path2 ...]]
+        [MATLAB_ADDITIONAL_STARTUP_OPTIONS option1 [option2 ...]]
+        [TEST_ARGS arg1 [arg2 ...]]
+        [NO_UNITTEST_FRAMEWORK]
+        )
+
+  The function arguments are:
+
+  ``NAME``
+    name of the unittest in ctest.
+  ``UNITTEST_FILE``
+    the matlab unittest file. Its path will be automatically
+    added to the Matlab path.
+  ``CUSTOM_TEST_COMMAND``
+    Matlab script command to run as the test.
+    If this is not set, then the following is run:
+    ``runtests('matlab_file_name'), exit(max([ans(1,:).Failed]))``
+    where ``matlab_file_name`` is the ``UNITTEST_FILE`` without the extension.
+  ``UNITTEST_PRECOMMAND``
+    Matlab script command to be ran before the file
+    containing the test (eg. GPU device initialization based on CMake
+    variables).
+  ``TIMEOUT``
+    the test timeout in seconds. Defaults to 180 seconds as the
+    Matlab unit test may hang.
+  ``ADDITIONAL_PATH``
+    a list of paths to add to the Matlab path prior to
+    running the unit test.
+  ``MATLAB_ADDITIONAL_STARTUP_OPTIONS``
+    a list of additional option in order
+    to run Matlab from the command line.
+    ``-nosplash -nodesktop -nodisplay`` are always added.
+  ``TEST_ARGS``
+    Additional options provided to the add_test command. These
+    options are added to the default options (eg. "CONFIGURATIONS Release")
+  ``NO_UNITTEST_FRAMEWORK``
+    when set, indicates that the test should not
+    use the unittest framework of Matlab (available for versions >= R2013a).
+  ``WORKING_DIRECTORY``
+    This will be the working directory for the test. If specified it will
+    also be the output directory used for the log file of the test run.
+    If not specified the temporary directory ``${CMAKE_BINARY_DIR}/Matlab`` will
+    be used as the working directory and the log location.
+
+#]=======================================================================]
+function(matlab_add_unit_test)
+
+  if(NOT Matlab_MAIN_PROGRAM)
+    message(FATAL_ERROR "[MATLAB] This functionality needs the MAIN_PROGRAM component (not default)")
+  endif()
+
+  set(options NO_UNITTEST_FRAMEWORK)
+  set(oneValueArgs NAME UNITTEST_FILE TIMEOUT WORKING_DIRECTORY
+    UNITTEST_PRECOMMAND CUSTOM_TEST_COMMAND)
+  set(multiValueArgs ADDITIONAL_PATH MATLAB_ADDITIONAL_STARTUP_OPTIONS TEST_ARGS)
+
+  set(prefix _matlab_unittest_prefix)
+  cmake_parse_arguments(PARSE_ARGV 0 ${prefix} "${options}" "${oneValueArgs}" "${multiValueArgs}" )
+
+  if(NOT ${prefix}_NAME)
+    message(FATAL_ERROR "[MATLAB] The Matlab test name cannot be empty")
+  endif()
+
+  add_test(NAME ${${prefix}_NAME}
+           COMMAND ${CMAKE_COMMAND}
+            "-Dtest_name=${${prefix}_NAME}"
+            "-Dadditional_paths=${${prefix}_ADDITIONAL_PATH}"
+            "-Dtest_timeout=${${prefix}_TIMEOUT}"
+            "-Doutput_directory=${_matlab_temporary_folder}"
+            "-Dworking_directory=${${prefix}_WORKING_DIRECTORY}"
+            "-DMatlab_PROGRAM=${Matlab_MAIN_PROGRAM}"
+            "-Dno_unittest_framework=${${prefix}_NO_UNITTEST_FRAMEWORK}"
+            "-DMatlab_ADDITIONAL_STARTUP_OPTIONS=${${prefix}_MATLAB_ADDITIONAL_STARTUP_OPTIONS}"
+            "-Dunittest_file_to_run=${${prefix}_UNITTEST_FILE}"
+            "-Dcustom_Matlab_test_command=${${prefix}_CUSTOM_TEST_COMMAND}"
+            "-Dcmd_to_run_before_test=${${prefix}_UNITTEST_PRECOMMAND}"
+            -P ${_FindMatlab_SELF_DIR}/MatlabTestsRedirect.cmake
+           ${${prefix}_TEST_ARGS}
+           ${${prefix}_UNPARSED_ARGUMENTS}
+           )
+endfunction()
+
+
+#[=======================================================================[.rst:
+.. command:: matlab_add_mex
+
+  Adds a Matlab MEX target.
+  This commands compiles the given sources with the current tool-chain in
+  order to produce a MEX file. The final name of the produced output may be
+  specified, as well as additional link libraries, and a documentation entry
+  for the MEX file. Remaining arguments of the call are passed to the
+  :command:`add_library` or :command:`add_executable` command.
+
+  ::
+
+     matlab_add_mex(
+         NAME <name>
+         [EXECUTABLE | MODULE | SHARED]
+         SRC src1 [src2 ...]
+         [OUTPUT_NAME output_name]
+         [DOCUMENTATION file.txt]
+         [LINK_TO target1 target2 ...]
+         [R2017b | R2018a]
+         [EXCLUDE_FROM_ALL]
+         [...]
+     )
+
+  ``NAME``
+    name of the target.
+  ``SRC``
+    list of source files.
+  ``LINK_TO``
+    a list of additional link dependencies.  The target links to ``libmex``
+    and ``libmx`` by default.
+  ``OUTPUT_NAME``
+    if given, overrides the default name. The default name is
+    the name of the target without any prefix and
+    with ``Matlab_MEX_EXTENSION`` suffix.
+  ``DOCUMENTATION``
+    if given, the file ``file.txt`` will be considered as
+    being the documentation file for the MEX file. This file is copied into
+    the same folder without any processing, with the same name as the final
+    mex file, and with extension `.m`. In that case, typing ``help <name>``
+    in Matlab prints the documentation contained in this file.
+  ``R2017b`` or ``R2018a``
+    .. versionadded:: 3.14
+
+    May be given to specify the version of the C API
+    to use: ``R2017b`` specifies the traditional (separate complex) C API,
+    and corresponds to the ``-R2017b`` flag for the `mex` command. ``R2018a``
+    specifies the new interleaved complex C API, and corresponds to the
+    ``-R2018a`` flag for the `mex` command. Ignored if MATLAB version prior
+    to R2018a. Defaults to ``R2017b``.
+
+  ``MODULE`` or ``SHARED``
+    .. versionadded:: 3.7
+
+    May be given to specify the type of library to be
+    created.
+
+  ``EXECUTABLE``
+    .. versionadded:: 3.7
+
+    May be given to create an executable instead of
+    a library. If no type is given explicitly, the type is ``SHARED``.
+  ``EXCLUDE_FROM_ALL``
+    This option has the same meaning as for :prop_tgt:`EXCLUDE_FROM_ALL` and
+    is forwarded to :command:`add_library` or :command:`add_executable`
+    commands.
+
+  The documentation file is not processed and should be in the following
+  format:
+
+  ::
+
+    % This is the documentation
+    function ret = mex_target_output_name(input1)
+
+#]=======================================================================]
+function(matlab_add_mex)
+
+  if(NOT WIN32)
+    # we do not need all this on Windows
+    # pthread options
+    if(CMAKE_CXX_COMPILER_LOADED)
+      check_cxx_compiler_flag(-pthread HAS_MINUS_PTHREAD)
+    elseif(CMAKE_C_COMPILER_LOADED)
+      check_c_compiler_flag(-pthread HAS_MINUS_PTHREAD)
+    endif()
+    # we should use try_compile instead, the link flags are discarded from
+    # this compiler_flag function.
+    #check_cxx_compiler_flag(-Wl,--exclude-libs,ALL HAS_SYMBOL_HIDING_CAPABILITY)
+
+  endif()
+
+  set(options EXECUTABLE MODULE SHARED R2017b R2018a EXCLUDE_FROM_ALL)
+  set(oneValueArgs NAME DOCUMENTATION OUTPUT_NAME)
+  set(multiValueArgs LINK_TO SRC)
+
+  set(prefix _matlab_addmex_prefix)
+  cmake_parse_arguments(${prefix} "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
+
+  if(NOT ${prefix}_NAME)
+    message(FATAL_ERROR "[MATLAB] The MEX target name cannot be empty")
+  endif()
+
+  if(NOT ${prefix}_OUTPUT_NAME)
+    set(${prefix}_OUTPUT_NAME ${${prefix}_NAME})
+  endif()
+
+  if(NOT Matlab_VERSION_STRING VERSION_LESS "9.1") # For 9.1 (R2016b) and newer, add version source file
+    # Add the correct version file depending on which languages are enabled in the project
+    if(CMAKE_C_COMPILER_LOADED)
+      # If C is enabled, use the .c file as it will work fine also with C++
+      set(MEX_VERSION_FILE "${Matlab_ROOT_DIR}/extern/version/c_mexapi_version.c")
+    elseif(CMAKE_CXX_COMPILER_LOADED)
+      # If C is not enabled, check if CXX is enabled and use the .cpp file
+      # to avoid that the .c file is silently ignored
+      set(MEX_VERSION_FILE "${Matlab_ROOT_DIR}/extern/version/cpp_mexapi_version.cpp")
+    else()
+      # If neither C or CXX is enabled, warn because we cannot add the source.
+      # TODO: add support for fortran mex files
+      message(WARNING "[MATLAB] matlab_add_mex requires that at least C or CXX are enabled languages")
+    endif()
+  endif()
+
+  # For 9.4 (R2018a) and newer, add API macro.
+  # Add it for unknown versions too, just in case.
+  if(NOT Matlab_VERSION_STRING VERSION_LESS "9.4"
+      OR Matlab_VERSION_STRING STREQUAL "unknown")
+    if(${${prefix}_R2018a})
+      set(MEX_API_MACRO "MATLAB_DEFAULT_RELEASE=R2018a")
+    else()
+      set(MEX_API_MACRO "MATLAB_DEFAULT_RELEASE=R2017b")
+    endif()
+  endif()
+
+  set(_option_EXCLUDE_FROM_ALL)
+  if(${prefix}_EXCLUDE_FROM_ALL)
+    set(_option_EXCLUDE_FROM_ALL "EXCLUDE_FROM_ALL")
+  endif()
+
+  if(${prefix}_EXECUTABLE)
+    add_executable(${${prefix}_NAME}
+      ${_option_EXCLUDE_FROM_ALL}
+      ${${prefix}_SRC}
+      ${MEX_VERSION_FILE}
+      ${${prefix}_DOCUMENTATION}
+      ${${prefix}_UNPARSED_ARGUMENTS})
+  else()
+    if(${prefix}_MODULE)
+      set(type MODULE)
+    else()
+      set(type SHARED)
+    endif()
+
+    add_library(${${prefix}_NAME}
+      ${type}
+      ${_option_EXCLUDE_FROM_ALL}
+      ${${prefix}_SRC}
+      ${MEX_VERSION_FILE}
+      ${${prefix}_DOCUMENTATION}
+      ${${prefix}_UNPARSED_ARGUMENTS})
+  endif()
+
+  target_include_directories(${${prefix}_NAME} PRIVATE ${Matlab_INCLUDE_DIRS})
+
+  if(Matlab_HAS_CPP_API)
+    if(Matlab_ENGINE_LIBRARY)
+      target_link_libraries(${${prefix}_NAME} ${Matlab_ENGINE_LIBRARY})
+    endif()
+    if(Matlab_DATAARRAY_LIBRARY)
+      target_link_libraries(${${prefix}_NAME} ${Matlab_DATAARRAY_LIBRARY})
+    endif()
+  endif()
+
+  target_link_libraries(${${prefix}_NAME} ${Matlab_MEX_LIBRARY} ${Matlab_MX_LIBRARY} ${${prefix}_LINK_TO})
+  set_target_properties(${${prefix}_NAME}
+      PROPERTIES
+        PREFIX ""
+        OUTPUT_NAME ${${prefix}_OUTPUT_NAME}
+        SUFFIX ".${Matlab_MEX_EXTENSION}")
+
+  target_compile_definitions(${${prefix}_NAME} PRIVATE ${MEX_API_MACRO} MATLAB_MEX_FILE)
+
+  # documentation
+  if(NOT ${${prefix}_DOCUMENTATION} STREQUAL "")
+    get_target_property(output_name ${${prefix}_NAME} OUTPUT_NAME)
+    add_custom_command(
+      TARGET ${${prefix}_NAME}
+      PRE_BUILD
+      COMMAND ${CMAKE_COMMAND} -E copy_if_different ${${prefix}_DOCUMENTATION} $<TARGET_FILE_DIR:${${prefix}_NAME}>/${output_name}.m
+      COMMENT "[MATLAB] Copy ${${prefix}_NAME} documentation file into the output folder"
+    )
+  endif() # documentation
+
+  # entry point in the mex file + taking care of visibility and symbol clashes.
+  if(WIN32)
+
+    if (MSVC)
+
+      set(_link_flags "${_link_flags} /EXPORT:mexFunction")
+      if(NOT Matlab_VERSION_STRING VERSION_LESS "9.1") # For 9.1 (R2016b) and newer, export version
+        set(_link_flags "${_link_flags} /EXPORT:mexfilerequiredapiversion")
+      endif()
+
+      set_property(TARGET ${${prefix}_NAME} APPEND PROPERTY LINK_FLAGS ${_link_flags})
+
+    endif() # No other compiler currently supported on Windows.
+
+    set_target_properties(${${prefix}_NAME}
+      PROPERTIES
+        DEFINE_SYMBOL "DLL_EXPORT_SYM=__declspec(dllexport)")
+
+  else()
+
+    if(Matlab_VERSION_STRING VERSION_LESS "9.1") # For versions prior to 9.1 (R2016b)
+      set(_ver_map_files ${Matlab_EXTERN_LIBRARY_DIR}/mexFunction.map)
+    else()                                          # For 9.1 (R2016b) and newer
+      set(_ver_map_files ${Matlab_EXTERN_LIBRARY_DIR}/c_exportsmexfileversion.map)
+    endif()
+
+    if(NOT Matlab_VERSION_STRING VERSION_LESS "9.5") # For 9.5 (R2018b) (and newer?)
+      target_compile_options(${${prefix}_NAME} PRIVATE "-fvisibility=default")
+      # This one is weird, it might be a bug in <mex.h> for R2018b. When compiling with
+      # -fvisibility=hidden, the symbol `mexFunction` cannot be exported. Reading the
+      # source code for <mex.h>, it seems that the preprocessor macro `MW_NEEDS_VERSION_H`
+      # needs to be defined for `__attribute__((visibility("default")))` to be added
+      # in front of the declaration of `mexFunction`. In previous versions of MATLAB this
+      # was not the case, there `DLL_EXPORT_SYM` needed to be defined.
+      # Adding `-fvisibility=hidden` to the `mex` command causes the build to fail.
+      # TODO: Check that this is still necessary in R2019a when it comes out.
+    endif()
+
+    if(APPLE)
+
+      if(Matlab_HAS_CPP_API)
+        list(APPEND _ver_map_files ${Matlab_EXTERN_LIBRARY_DIR}/cppMexFunction.map) # This one doesn't exist on Linux
+        set(_link_flags "${_link_flags} -Wl,-U,_mexCreateMexFunction -Wl,-U,_mexDestroyMexFunction -Wl,-U,_mexFunctionAdapter")
+        # On MacOS, the MEX command adds the above, without it the link breaks
+        # because we indiscriminately use "cppMexFunction.map" even for C API MEX-files.
+      endif()
+
+      set(_export_flag_name -exported_symbols_list)
+
+    else() # Linux
+
+      if(HAS_MINUS_PTHREAD)
+        # Apparently, compiling with -pthread generated the proper link flags
+        # and some defines at compilation
+        target_compile_options(${${prefix}_NAME} PRIVATE "-pthread")
+      endif()
+
+      set(_link_flags "${_link_flags} -Wl,--as-needed")
+
+      set(_export_flag_name --version-script)
+
+    endif()
+
+    foreach(_file ${_ver_map_files})
+      set(_link_flags "${_link_flags} -Wl,${_export_flag_name},${_file}")
+    endforeach()
+
+    # The `mex` command doesn't add this define. It is specified here in order
+    # to export the symbol in case the client code decides to hide its symbols
+    set_target_properties(${${prefix}_NAME}
+      PROPERTIES
+        DEFINE_SYMBOL "DLL_EXPORT_SYM=__attribute__((visibility(\"default\")))"
+        LINK_FLAGS "${_link_flags}"
+    )
+
+  endif()
+
+endfunction()
+
+
+# (internal)
+# Used to get the version of matlab, using caching. This basically transforms the
+# output of the root list, with possible unknown version, to a version
+# This can possibly run Matlab for extracting the version.
+function(_Matlab_get_version_from_root matlab_root matlab_or_mcr matlab_known_version matlab_final_version)
+
+  # if the version is not trivial, we query matlab (if not MCR) for that
+  # we keep track of the location of matlab that induced this version
+  #if(NOT DEFINED Matlab_PROG_VERSION_STRING_AUTO_DETECT)
+  #  set(Matlab_PROG_VERSION_STRING_AUTO_DETECT "" CACHE INTERNAL "internal matlab location for the discovered version")
+  #endif()
+
+  if(NOT matlab_known_version STREQUAL "NOTFOUND")
+    # the version is known, we just return it
+    set(${matlab_final_version} ${matlab_known_version} PARENT_SCOPE)
+    set(Matlab_VERSION_STRING_INTERNAL ${matlab_known_version} CACHE INTERNAL "Matlab version (automatically determined)" FORCE)
+    return()
+  endif()
+
+  if(matlab_or_mcr STREQUAL "UNKNOWN")
+    if(MATLAB_FIND_DEBUG)
+      message(WARNING "[MATLAB] Determining Matlab or MCR")
+    endif()
+
+    if(EXISTS "${matlab_root}/appdata/version.xml")
+      # we inspect the application version.xml file that contains the product information
+      file(STRINGS "${matlab_root}/appdata/version.xml" productinfo_string NEWLINE_CONSUME)
+      string(REGEX MATCH "<installedProductData.*displayedString=\"([a-zA-Z ]+)\".*/>"
+             product_reg_match
+             ${productinfo_string}
+            )
+
+      # default fallback to Matlab
+      set(matlab_or_mcr "MATLAB")
+      if(NOT CMAKE_MATCH_1 STREQUAL "")
+        string(TOLOWER "${CMAKE_MATCH_1}" product_reg_match)
+
+        if(product_reg_match STREQUAL "matlab runtime")
+          set(matlab_or_mcr "MCR")
+        endif()
+      endif()
+    endif()
+
+    if(MATLAB_FIND_DEBUG)
+      message(WARNING "[MATLAB] '${matlab_root}' contains the '${matlab_or_mcr}'")
+    endif()
+  endif()
+
+  # UNKNOWN is the default behavior in case we
+  # - have an erroneous matlab_root
+  # - have an initial 'UNKNOWN'
+  if(matlab_or_mcr STREQUAL "MATLAB" OR matlab_or_mcr STREQUAL "UNKNOWN")
+    # MATLAB versions
+    set(_matlab_current_program ${Matlab_MAIN_PROGRAM})
+
+    # do we already have a matlab program?
+    if(NOT _matlab_current_program)
+
+      set(_find_matlab_options)
+      if(matlab_root AND EXISTS ${matlab_root})
+        set(_find_matlab_options PATHS ${matlab_root} ${matlab_root}/bin NO_DEFAULT_PATH)
+      endif()
+
+      find_program(
+          _matlab_current_program
+          matlab
+          ${_find_matlab_options}
+          DOC "Matlab main program"
+        )
+    endif()
+
+    if(NOT _matlab_current_program OR NOT EXISTS ${_matlab_current_program})
+      # if not found, clear the dependent variables
+      if(MATLAB_FIND_DEBUG)
+        message(WARNING "[MATLAB] Cannot find the main matlab program under ${matlab_root}")
+      endif()
+      set(Matlab_PROG_VERSION_STRING_AUTO_DETECT "" CACHE INTERNAL "internal matlab location for the discovered version" FORCE)
+      set(Matlab_VERSION_STRING_INTERNAL "" CACHE INTERNAL "internal matlab location for the discovered version" FORCE)
+      unset(_matlab_current_program)
+      unset(_matlab_current_program CACHE)
+      return()
+    endif()
+
+    # full real path for path comparison
+    get_filename_component(_matlab_main_real_path_tmp "${_matlab_current_program}" REALPATH)
+    unset(_matlab_current_program)
+    unset(_matlab_current_program CACHE)
+
+    # is it the same as the previous one?
+    if(_matlab_main_real_path_tmp STREQUAL Matlab_PROG_VERSION_STRING_AUTO_DETECT)
+      set(${matlab_final_version} ${Matlab_VERSION_STRING_INTERNAL} PARENT_SCOPE)
+      return()
+    endif()
+
+    # update the location of the program
+    set(Matlab_PROG_VERSION_STRING_AUTO_DETECT
+        ${_matlab_main_real_path_tmp}
+        CACHE INTERNAL "internal matlab location for the discovered version" FORCE)
+
+    set(matlab_list_of_all_versions)
+    matlab_get_version_from_matlab_run("${Matlab_PROG_VERSION_STRING_AUTO_DETECT}" matlab_list_of_all_versions)
+
+    list(LENGTH matlab_list_of_all_versions list_of_all_versions_length)
+    if(list_of_all_versions_length GREATER 0)
+      list(GET matlab_list_of_all_versions 0 _matlab_version_tmp)
+    else()
+      set(_matlab_version_tmp "unknown")
+    endif()
+
+    # set the version into the cache
+    set(Matlab_VERSION_STRING_INTERNAL ${_matlab_version_tmp} CACHE INTERNAL "Matlab version (automatically determined)" FORCE)
+
+    # warning, just in case several versions found (should not happen)
+    if((list_of_all_versions_length GREATER 1) AND MATLAB_FIND_DEBUG)
+      message(WARNING "[MATLAB] Found several versions, taking the first one (versions found ${matlab_list_of_all_versions})")
+    endif()
+
+    # return the updated value
+    set(${matlab_final_version} ${Matlab_VERSION_STRING_INTERNAL} PARENT_SCOPE)
+  elseif(EXISTS "${matlab_root}/VersionInfo.xml")
+    # MCR
+    # we cannot run anything in order to extract the version. We assume that the file
+    # VersionInfo.xml exists under the MatlabRoot, we look for it and extract the version from there
+    set(_matlab_version_tmp "unknown")
+    file(STRINGS "${matlab_root}/VersionInfo.xml" versioninfo_string NEWLINE_CONSUME)
+
+    if(versioninfo_string)
+      # parses "<version>9.2.0.538062</version>"
+      string(REGEX MATCH "<version>(.*)</version>"
+             version_reg_match
+             ${versioninfo_string}
+            )
+
+      if(CMAKE_MATCH_1 MATCHES "(([0-9])\\.([0-9]))[\\.0-9]*")
+        set(_matlab_version_tmp "${CMAKE_MATCH_1}")
+      endif()
+    endif()
+    set(${matlab_final_version} "${_matlab_version_tmp}" PARENT_SCOPE)
+    set(Matlab_VERSION_STRING_INTERNAL
+        "${_matlab_version_tmp}"
+        CACHE INTERNAL "Matlab (MCR) version (automatically determined)"
+        FORCE)
+  endif() # Matlab or MCR
+
+endfunction()
+
+
+# Utility function for finding Matlab or MCR on Win32
+function(_Matlab_find_instances_win32 matlab_roots)
+  # On WIN32, we look for Matlab installation in the registry
+  # if unsuccessful, we look for all known revision and filter the existing
+  # ones.
+
+  # testing if we are able to extract the needed information from the registry
+  set(_matlab_versions_from_registry)
+
+  if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+    set(_matlab_win64 ON)
+  else()
+    set(_matlab_win64 OFF)
+  endif()
+
+  matlab_extract_all_installed_versions_from_registry(_matlab_win64 _matlab_versions_from_registry)
+
+  # the returned list is empty, doing the search on all known versions
+  if(NOT _matlab_versions_from_registry)
+    if(MATLAB_FIND_DEBUG)
+      message(STATUS "[MATLAB] Search for Matlab from the registry unsuccessful, testing all supported versions")
+    endif()
+    extract_matlab_versions_from_registry_brute_force(_matlab_versions_from_registry)
+  endif()
+
+  # filtering the results with the registry keys
+  matlab_get_all_valid_matlab_roots_from_registry("${_matlab_versions_from_registry}" _matlab_possible_roots)
+  set(${matlab_roots} ${_matlab_possible_roots} PARENT_SCOPE)
+
+endfunction()
+
+# Utility function for finding Matlab or MCR on OSX
+function(_Matlab_find_instances_osx matlab_roots)
+
+  set(_matlab_possible_roots)
+  # on mac, we look for the /Application paths
+  # this corresponds to the behavior on Windows. On Linux, we do not have
+  # any other guess.
+  matlab_get_supported_releases(_matlab_releases)
+  if(MATLAB_FIND_DEBUG)
+    message(STATUS "[MATLAB] Matlab supported versions ${_matlab_releases}. If more version should be supported "
+                 "the variable MATLAB_ADDITIONAL_VERSIONS can be set according to the documentation")
+  endif()
+
+  foreach(_matlab_current_release IN LISTS _matlab_releases)
+    matlab_get_version_from_release_name("${_matlab_current_release}" _matlab_current_version)
+    string(REPLACE "." "" _matlab_current_version_without_dot "${_matlab_current_version}")
+    set(_matlab_base_path "/Applications/MATLAB_${_matlab_current_release}.app")
+
+    # Check Matlab, has precedence over MCR
+    if(EXISTS ${_matlab_base_path})
+      if(MATLAB_FIND_DEBUG)
+        message(STATUS "[MATLAB] Found version ${_matlab_current_release} (${_matlab_current_version}) in ${_matlab_base_path}")
+      endif()
+      list(APPEND _matlab_possible_roots "MATLAB" ${_matlab_current_version} ${_matlab_base_path})
+    endif()
+
+    # Checks MCR
+    set(_mcr_path "/Applications/MATLAB/MATLAB_Runtime/v${_matlab_current_version_without_dot}")
+    if(EXISTS "${_mcr_path}")
+      if(MATLAB_FIND_DEBUG)
+        message(STATUS "[MATLAB] Found MCR version ${_matlab_current_release} (${_matlab_current_version}) in ${_mcr_path}")
+      endif()
+      list(APPEND _matlab_possible_roots "MCR" ${_matlab_current_version} ${_mcr_path})
+    endif()
+
+  endforeach()
+  set(${matlab_roots} ${_matlab_possible_roots} PARENT_SCOPE)
+
+endfunction()
+
+# Utility function for finding Matlab or MCR from the PATH
+function(_Matlab_find_instances_from_path matlab_roots)
+
+  set(_matlab_possible_roots)
+
+  # At this point, we have no other choice than trying to find it from PATH.
+  # If set by the user, this won't change.
+  find_program(
+    _matlab_main_tmp
+    NAMES matlab)
+
+  if(_matlab_main_tmp)
+    # we then populate the list of roots, with empty version
+    if(MATLAB_FIND_DEBUG)
+      message(STATUS "[MATLAB] matlab found from PATH: ${_matlab_main_tmp}")
+    endif()
+
+    # resolve symlinks
+    get_filename_component(_matlab_current_location "${_matlab_main_tmp}" REALPATH)
+
+    # get the directory (the command below has to be run twice)
+    # this will be the matlab root
+    get_filename_component(_matlab_current_location "${_matlab_current_location}" DIRECTORY)
+    get_filename_component(_matlab_current_location "${_matlab_current_location}" DIRECTORY) # Matlab should be in bin
+
+    # We found the Matlab program
+    list(APPEND _matlab_possible_roots "MATLAB" "NOTFOUND" ${_matlab_current_location})
+
+    # we remove this from the CACHE
+    unset(_matlab_main_tmp CACHE)
+  else()
+    find_program(
+      _matlab_mex_tmp
+      NAMES mex)
+    if(_matlab_mex_tmp)
+      # we then populate the list of roots, with empty version
+      if(MATLAB_FIND_DEBUG)
+        message(STATUS "[MATLAB] mex compiler found from PATH: ${_matlab_mex_tmp}")
+      endif()
+
+      # resolve symlinks
+      get_filename_component(_mex_current_location "${_matlab_mex_tmp}" REALPATH)
+
+      # get the directory (the command below has to be run twice)
+      # this will be the matlab root
+      get_filename_component(_mex_current_location "${_mex_current_location}" DIRECTORY)
+      get_filename_component(_mex_current_location "${_mex_current_location}" DIRECTORY) # Matlab Runtime mex compiler should be in bin
+
+      # We found the Matlab program
+      list(APPEND _matlab_possible_roots "MCR" "NOTFOUND" ${_mex_current_location})
+
+      unset(_matlab_mex_tmp CACHE)
+    else()
+      if(MATLAB_FIND_DEBUG)
+        message(STATUS "[MATLAB] mex compiler not found")
+      endif()
+    endif()
+
+
+  endif()
+
+  set(${matlab_roots} ${_matlab_possible_roots} PARENT_SCOPE)
+endfunction()
+
+
+# ###################################
+# Exploring the possible Matlab_ROOTS
+
+# this variable will get all Matlab installations found in the current system.
+set(_matlab_possible_roots)
+
+if(Matlab_ROOT_DIR)
+  # if the user specifies a possible root, we keep this one
+
+  if(NOT EXISTS "${Matlab_ROOT_DIR}")
+    # if Matlab_ROOT_DIR specified but erroneous
+    if(MATLAB_FIND_DEBUG)
+      message(WARNING "[MATLAB] the specified path for Matlab_ROOT_DIR does not exist (${Matlab_ROOT_DIR})")
+    endif()
+  else()
+    # NOTFOUND indicates the code below to search for the version automatically
+    if("${Matlab_VERSION_STRING_INTERNAL}" STREQUAL "")
+      list(APPEND _matlab_possible_roots "UNKNOWN" "NOTFOUND" ${Matlab_ROOT_DIR}) # empty version, empty MCR/Matlab indication
+    else()
+      list(APPEND _matlab_possible_roots "UNKNOWN" ${Matlab_VERSION_STRING_INTERNAL} ${Matlab_ROOT_DIR}) # cached version
+    endif()
+  endif()
+else()
+
+  # if the user does not specify the possible installation root, we look for
+  # one installation using the appropriate heuristics.
+  # There is apparently no standard way on Linux.
+  if(CMAKE_HOST_WIN32)
+    _Matlab_find_instances_win32(_matlab_possible_roots_win32)
+    list(APPEND _matlab_possible_roots ${_matlab_possible_roots_win32})
+  elseif(APPLE)
+    _Matlab_find_instances_osx(_matlab_possible_roots_osx)
+    list(APPEND _matlab_possible_roots ${_matlab_possible_roots_osx})
+  endif()
+endif()
+
+
+list(LENGTH _matlab_possible_roots _numbers_of_matlab_roots)
+if(_numbers_of_matlab_roots EQUAL 0)
+  # if we have not found anything, we fall back on the PATH
+  _Matlab_find_instances_from_path(_matlab_possible_roots)
+endif()
+
+
+if(MATLAB_FIND_DEBUG)
+  message(STATUS "[MATLAB] Matlab root folders are ${_matlab_possible_roots}")
+endif()
+
+
+
+
+
+# take the first possible Matlab root
+list(LENGTH _matlab_possible_roots _numbers_of_matlab_roots)
+set(Matlab_VERSION_STRING "NOTFOUND")
+set(Matlab_Or_MCR "UNKNOWN")
+if(_numbers_of_matlab_roots GREATER 0)
+  if(Matlab_FIND_VERSION_EXACT)
+    list(FIND _matlab_possible_roots ${Matlab_FIND_VERSION} _list_index)
+    if(_list_index LESS 0)
+      set(_list_index 1)
+    endif()
+
+    math(EXPR _matlab_or_mcr_index "${_list_index} - 1")
+    math(EXPR _matlab_root_dir_index "${_list_index} + 1")
+
+    list(GET _matlab_possible_roots ${_matlab_or_mcr_index} Matlab_Or_MCR)
+    list(GET _matlab_possible_roots ${_list_index} Matlab_VERSION_STRING)
+    list(GET _matlab_possible_roots ${_matlab_root_dir_index} Matlab_ROOT_DIR)
+  elseif(DEFINED Matlab_FIND_VERSION)
+    foreach(_matlab_root_index RANGE 1 ${_numbers_of_matlab_roots} 3)
+      list(GET _matlab_possible_roots ${_matlab_root_index} _matlab_root_version)
+      if(_matlab_root_version VERSION_GREATER_EQUAL Matlab_FIND_VERSION)
+        set(_list_index ${_matlab_root_index})
+        break()
+      endif()
+    endforeach()
+
+    if(_list_index LESS 0)
+      set(_list_index 1)
+    endif()
+
+    math(EXPR _matlab_or_mcr_index "${_list_index} - 1")
+    math(EXPR _matlab_root_dir_index "${_list_index} + 1")
+    list(GET _matlab_possible_roots ${_matlab_or_mcr_index} Matlab_Or_MCR)
+    list(GET _matlab_possible_roots ${_list_index} Matlab_VERSION_STRING)
+    list(GET _matlab_possible_roots ${_matlab_root_dir_index} Matlab_ROOT_DIR)
+    # adding a warning in case of ambiguity
+    if(_numbers_of_matlab_roots GREATER 3 AND MATLAB_FIND_DEBUG)
+      message(WARNING "[MATLAB] Found several distributions of Matlab. Setting the current version to ${Matlab_VERSION_STRING} (located ${Matlab_ROOT_DIR})."
+                      " If this is not the desired behavior, use the EXACT keyword or provide the -DMatlab_ROOT_DIR=... on the command line")
+    endif()
+  else()
+    list(GET _matlab_possible_roots 0 Matlab_Or_MCR)
+    list(GET _matlab_possible_roots 1 Matlab_VERSION_STRING)
+    list(GET _matlab_possible_roots 2 Matlab_ROOT_DIR)
+
+    # adding a warning in case of ambiguity
+    if(_numbers_of_matlab_roots GREATER 3 AND MATLAB_FIND_DEBUG)
+      message(WARNING "[MATLAB] Found several distributions of Matlab. Setting the current version to ${Matlab_VERSION_STRING} (located ${Matlab_ROOT_DIR})."
+                      " If this is not the desired behavior, use the EXACT keyword or provide the -DMatlab_ROOT_DIR=... on the command line")
+    endif()
+  endif()
+endif()
+
+
+# check if the root changed wrt. the previous defined one, if so
+# clear all the cached variables for being able to reconfigure properly
+if(DEFINED Matlab_ROOT_DIR_LAST_CACHED)
+
+  if(NOT Matlab_ROOT_DIR_LAST_CACHED STREQUAL Matlab_ROOT_DIR)
+    set(_Matlab_cached_vars
+        Matlab_VERSION_STRING
+        Matlab_INCLUDE_DIRS
+        Matlab_MEX_LIBRARY
+        Matlab_MEX_COMPILER
+        Matlab_MCC_COMPILER
+        Matlab_MAIN_PROGRAM
+        Matlab_MX_LIBRARY
+        Matlab_ENG_LIBRARY
+        Matlab_MAT_LIBRARY
+        Matlab_ENGINE_LIBRARY
+        Matlab_DATAARRAY_LIBRARY
+        Matlab_MEX_EXTENSION
+        Matlab_SIMULINK_INCLUDE_DIR
+
+        # internal
+        Matlab_MEXEXTENSIONS_PROG
+        Matlab_ROOT_DIR_LAST_CACHED
+        #Matlab_PROG_VERSION_STRING_AUTO_DETECT
+        #Matlab_VERSION_STRING_INTERNAL
+        )
+    foreach(_var IN LISTS _Matlab_cached_vars)
+      if(DEFINED ${_var})
+        unset(${_var} CACHE)
+      endif()
+    endforeach()
+  endif()
+endif()
+
+set(Matlab_ROOT_DIR_LAST_CACHED ${Matlab_ROOT_DIR} CACHE INTERNAL "last Matlab root dir location")
+set(Matlab_ROOT_DIR ${Matlab_ROOT_DIR} CACHE PATH "Matlab installation root path" FORCE)
+
+# Fix the version, in case this one is NOTFOUND
+_Matlab_get_version_from_root(
+  "${Matlab_ROOT_DIR}"
+  "${Matlab_Or_MCR}"
+  ${Matlab_VERSION_STRING}
+  Matlab_VERSION_STRING
+)
+
+if(MATLAB_FIND_DEBUG)
+  message(STATUS "[MATLAB] Current version is ${Matlab_VERSION_STRING} located ${Matlab_ROOT_DIR}")
+endif()
+
+# MATLAB 9.4 (R2018a) and newer have a new C++ API
+# This API pulls additional required libraries.
+if(NOT ${Matlab_VERSION_STRING} VERSION_LESS "9.4")
+  set(Matlab_HAS_CPP_API 1)
+endif()
+
+if(Matlab_ROOT_DIR)
+  file(TO_CMAKE_PATH ${Matlab_ROOT_DIR} Matlab_ROOT_DIR)
+endif()
+
+if(CMAKE_SIZEOF_VOID_P EQUAL 4)
+  set(_matlab_64Build FALSE)
+else()
+  set(_matlab_64Build TRUE)
+endif()
+
+if(APPLE)
+  set(_matlab_bin_prefix "mac") # i should be for intel
+  set(_matlab_bin_suffix_32bits "i")
+  set(_matlab_bin_suffix_64bits "i64")
+elseif(UNIX)
+  set(_matlab_bin_prefix "gln")
+  set(_matlab_bin_suffix_32bits "x86")
+  set(_matlab_bin_suffix_64bits "xa64")
+else()
+  set(_matlab_bin_prefix "win")
+  set(_matlab_bin_suffix_32bits "32")
+  set(_matlab_bin_suffix_64bits "64")
+endif()
+
+
+
+set(MATLAB_INCLUDE_DIR_TO_LOOK ${Matlab_ROOT_DIR}/extern/include)
+if(_matlab_64Build)
+  set(_matlab_current_suffix ${_matlab_bin_suffix_64bits})
+else()
+  set(_matlab_current_suffix ${_matlab_bin_suffix_32bits})
+endif()
+
+set(Matlab_BINARIES_DIR
+    ${Matlab_ROOT_DIR}/bin/${_matlab_bin_prefix}${_matlab_current_suffix})
+set(Matlab_EXTERN_LIBRARY_DIR
+    ${Matlab_ROOT_DIR}/extern/lib/${_matlab_bin_prefix}${_matlab_current_suffix})
+set(Matlab_EXTERN_BINARIES_DIR
+    ${Matlab_ROOT_DIR}/extern/bin/${_matlab_bin_prefix}${_matlab_current_suffix})
+
+if(WIN32)
+  if(MINGW)
+    set(_matlab_lib_dir_for_search ${Matlab_EXTERN_LIBRARY_DIR}/mingw64)
+  else()
+    set(_matlab_lib_dir_for_search ${Matlab_EXTERN_LIBRARY_DIR}/microsoft)
+  endif()
+  set(_matlab_lib_prefix_for_search "lib")
+else()
+  set(_matlab_lib_dir_for_search ${Matlab_BINARIES_DIR} ${Matlab_EXTERN_BINARIES_DIR})
+  set(_matlab_lib_prefix_for_search "lib")
+endif()
+
+unset(_matlab_64Build)
+
+
+if(NOT DEFINED Matlab_MEX_EXTENSION)
+  set(_matlab_mex_extension "")
+  matlab_get_mex_suffix("${Matlab_ROOT_DIR}" _matlab_mex_extension)
+
+  # This variable goes to the cache.
+  set(Matlab_MEX_EXTENSION ${_matlab_mex_extension} CACHE STRING "Extensions for the mex targets (automatically given by Matlab)")
+  unset(_matlab_mex_extension)
+endif()
+
+
+if(MATLAB_FIND_DEBUG)
+  message(STATUS "[MATLAB] [DEBUG]_matlab_lib_prefix_for_search = ${_matlab_lib_prefix_for_search} | _matlab_lib_dir_for_search = ${_matlab_lib_dir_for_search}")
+endif()
+
+
+
+# internal
+# This small stub around find_library is to prevent any pollution of CMAKE_FIND_LIBRARY_PREFIXES in the global scope.
+# This is the function to be used below instead of the find_library directives.
+function(_Matlab_find_library _matlab_library_prefix)
+  set(CMAKE_FIND_LIBRARY_PREFIXES ${CMAKE_FIND_LIBRARY_PREFIXES} ${_matlab_library_prefix})
+  find_library(${ARGN})
+endfunction()
+
+
+set(_matlab_required_variables)
+
+# Order is as follow:
+# - unconditionally required libraries/headers first
+# - then library components
+# - then program components
+
+# the MEX library/header are required
+find_path(
+  Matlab_INCLUDE_DIRS
+  mex.h
+  PATHS ${MATLAB_INCLUDE_DIR_TO_LOOK}
+  NO_DEFAULT_PATH
+  )
+list(APPEND _matlab_required_variables Matlab_INCLUDE_DIRS)
+
+if(Matlab_Or_MCR STREQUAL "MATLAB" OR Matlab_Or_MCR STREQUAL "UNKNOWN")
+  _Matlab_find_library(
+    ${_matlab_lib_prefix_for_search}
+    Matlab_MEX_LIBRARY
+    mex
+    PATHS ${_matlab_lib_dir_for_search}
+    NO_DEFAULT_PATH
+  )
+  list(APPEND _matlab_required_variables Matlab_MEX_LIBRARY)
+
+  # the MEX extension is required
+  list(APPEND _matlab_required_variables Matlab_MEX_EXTENSION)
+
+  # the matlab root is required
+  list(APPEND _matlab_required_variables Matlab_ROOT_DIR)
+
+  # The MX library is required
+  _Matlab_find_library(
+    ${_matlab_lib_prefix_for_search}
+    Matlab_MX_LIBRARY
+    mx
+    PATHS ${_matlab_lib_dir_for_search}
+    NO_DEFAULT_PATH
+  )
+  list(APPEND _matlab_required_variables Matlab_MX_LIBRARY)
+  if(Matlab_MX_LIBRARY)
+    set(Matlab_MX_LIBRARY_FOUND TRUE)
+  endif()
+endif()
+
+if(Matlab_HAS_CPP_API)
+
+  # The MatlabEngine library is required for R2018a+
+  _Matlab_find_library(
+    ${_matlab_lib_prefix_for_search}
+    Matlab_ENGINE_LIBRARY
+    MatlabEngine
+    PATHS ${_matlab_lib_dir_for_search}
+    DOC "MatlabEngine Library"
+    NO_DEFAULT_PATH
+  )
+  if(Matlab_ENGINE_LIBRARY)
+    set(Matlab_ENGINE_LIBRARY_FOUND TRUE)
+  endif()
+
+  # The MatlabDataArray library is required for R2018a+
+  _Matlab_find_library(
+    ${_matlab_lib_prefix_for_search}
+    Matlab_DATAARRAY_LIBRARY
+    MatlabDataArray
+    PATHS ${_matlab_lib_dir_for_search}
+    DOC "MatlabDataArray Library"
+    NO_DEFAULT_PATH
+  )
+  if(Matlab_DATAARRAY_LIBRARY)
+    set(Matlab_DATAARRAY_LIBRARY_FOUND TRUE)
+  endif()
+
+endif()
+
+# Component ENG library
+if("ENG_LIBRARY" IN_LIST Matlab_FIND_COMPONENTS)
+  _Matlab_find_library(
+    ${_matlab_lib_prefix_for_search}
+    Matlab_ENG_LIBRARY
+    eng
+    PATHS ${_matlab_lib_dir_for_search}
+    NO_DEFAULT_PATH
+  )
+  if(Matlab_ENG_LIBRARY)
+    set(Matlab_ENG_LIBRARY_FOUND TRUE)
+  endif()
+endif()
+
+# Component MAT library
+if("MAT_LIBRARY" IN_LIST Matlab_FIND_COMPONENTS)
+  _Matlab_find_library(
+    ${_matlab_lib_prefix_for_search}
+    Matlab_MAT_LIBRARY
+    mat
+    PATHS ${_matlab_lib_dir_for_search}
+    NO_DEFAULT_PATH
+  )
+  if(Matlab_MAT_LIBRARY)
+    set(Matlab_MAT_LIBRARY_FOUND TRUE)
+  endif()
+endif()
+
+# Component Simulink
+if("SIMULINK" IN_LIST Matlab_FIND_COMPONENTS)
+  find_path(
+    Matlab_SIMULINK_INCLUDE_DIR
+    simstruc.h
+    PATHS "${Matlab_ROOT_DIR}/simulink/include"
+    NO_DEFAULT_PATH
+    )
+  if(Matlab_SIMULINK_INCLUDE_DIR)
+    set(Matlab_SIMULINK_FOUND TRUE)
+    list(APPEND Matlab_INCLUDE_DIRS "${Matlab_SIMULINK_INCLUDE_DIR}")
+  endif()
+endif()
+
+# component Matlab program
+if("MAIN_PROGRAM" IN_LIST Matlab_FIND_COMPONENTS)
+  find_program(
+    Matlab_MAIN_PROGRAM
+    matlab
+    PATHS ${Matlab_ROOT_DIR} ${Matlab_ROOT_DIR}/bin
+    DOC "Matlab main program"
+    NO_DEFAULT_PATH
+  )
+  if(Matlab_MAIN_PROGRAM)
+    set(Matlab_MAIN_PROGRAM_FOUND TRUE)
+  endif()
+endif()
+
+# component Mex Compiler
+if("MEX_COMPILER" IN_LIST Matlab_FIND_COMPONENTS)
+  find_program(
+    Matlab_MEX_COMPILER
+    "mex"
+    PATHS ${Matlab_BINARIES_DIR}
+    DOC "Matlab MEX compiler"
+    NO_DEFAULT_PATH
+  )
+  if(Matlab_MEX_COMPILER)
+    set(Matlab_MEX_COMPILER_FOUND TRUE)
+  endif()
+endif()
+
+# component MCC Compiler
+if("MCC_COMPILER" IN_LIST Matlab_FIND_COMPONENTS)
+  find_program(
+    Matlab_MCC_COMPILER
+    "mcc"
+    PATHS ${Matlab_BINARIES_DIR}
+    DOC "Matlab MCC compiler"
+    NO_DEFAULT_PATH
+  )
+  if(Matlab_MCC_COMPILER)
+    set(Matlab_MCC_COMPILER_FOUND TRUE)
+  endif()
+endif()
+
+set(Matlab_LIBRARIES
+  ${Matlab_MEX_LIBRARY} ${Matlab_MX_LIBRARY}
+  ${Matlab_ENG_LIBRARY} ${Matlab_MAT_LIBRARY})
+
+if(Matlab_ENGINE_LIBRARY)
+  list(APPEND Matlab_LIBRARIES ${Matlab_ENGINE_LIBRARY})
+endif()
+
+if(Matlab_DATAARRAY_LIBRARY)
+  list(APPEND Matlab_LIBRARIES ${Matlab_DATAARRAY_LIBRARY})
+endif()
+
+# internal
+# This small stub permits to add imported targets for the found MATLAB libraries
+function(_Matlab_add_imported_target _matlab_library_variable_name _matlab_library_target_name)
+  if(Matlab_${_matlab_library_variable_name}_LIBRARY)
+    if(NOT TARGET Matlab::${_matlab_library_target_name})
+      add_library(Matlab::${_matlab_library_target_name} UNKNOWN IMPORTED)
+      set_target_properties(Matlab::${_matlab_library_target_name} PROPERTIES
+        INTERFACE_INCLUDE_DIRECTORIES "${Matlab_INCLUDE_DIRS}"
+        IMPORTED_LOCATION "${Matlab_${_matlab_library_variable_name}_LIBRARY}")
+      if(_matlab_library_target_name STREQUAL "mex" OR
+         _matlab_library_target_name STREQUAL "eng" OR
+         _matlab_library_target_name STREQUAL "mat")
+        set_target_properties(Matlab::${_matlab_library_target_name} PROPERTIES
+          INTERFACE_LINK_LIBRARIES Matlab::mx)
+      endif()
+    endif()
+  endif()
+endfunction()
+
+_Matlab_add_imported_target(MX mx)
+_Matlab_add_imported_target(MEX mex)
+_Matlab_add_imported_target(ENG eng)
+_Matlab_add_imported_target(MAT mat)
+_Matlab_add_imported_target(ENGINE MatlabEngine)
+_Matlab_add_imported_target(DATAARRAY MatlabDataArray)
+
+find_package_handle_standard_args(
+  Matlab
+  FOUND_VAR Matlab_FOUND
+  REQUIRED_VARS ${_matlab_required_variables}
+  VERSION_VAR Matlab_VERSION_STRING
+  HANDLE_COMPONENTS)
+
+unset(_matlab_required_variables)
+unset(_matlab_bin_prefix)
+unset(_matlab_bin_suffix_32bits)
+unset(_matlab_bin_suffix_64bits)
+unset(_matlab_current_suffix)
+unset(_matlab_lib_dir_for_search)
+unset(_matlab_lib_prefix_for_search)
+
+if(Matlab_INCLUDE_DIRS AND Matlab_LIBRARIES)
+  mark_as_advanced(
+    Matlab_MEX_LIBRARY
+    Matlab_MX_LIBRARY
+    Matlab_ENG_LIBRARY
+    Matlab_ENGINE_LIBRARY
+    Matlab_DATAARRAY_LIBRARY
+    Matlab_MAT_LIBRARY
+    Matlab_INCLUDE_DIRS
+    Matlab_FOUND
+    Matlab_MAIN_PROGRAM
+    Matlab_MEXEXTENSIONS_PROG
+    Matlab_MEX_EXTENSION
+  )
+endif()
+
+cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/FindMotif.cmake b/share/cmake-3.22/Modules/FindMotif.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindMotif.cmake
rename to share/cmake-3.22/Modules/FindMotif.cmake
diff --git a/share/cmake-3.22/Modules/FindMsys.cmake b/share/cmake-3.22/Modules/FindMsys.cmake
new file mode 100644
index 0000000..b4796d2
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindMsys.cmake
@@ -0,0 +1,31 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindMsys
+--------
+
+.. versionadded:: 3.21
+
+Find MSYS, a POSIX-compatible environment that runs natively
+on Microsoft Windows
+#]=======================================================================]
+
+if (WIN32)
+  if(MSYS_INSTALL_PATH)
+    set(MSYS_CMD "${MSYS_INSTALL_PATH}/msys2_shell.cmd")
+  endif()
+
+  find_program(MSYS_CMD
+    NAMES msys2_shell.cmd
+    PATHS
+      "C:/msys64"
+      "C:/msys32"
+      "C:/MSYS"
+      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MSYS\\setup;rootdir]"
+      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Cygnus Solutions\\MSYS\\mounts v2\\/;native]"
+  )
+  get_filename_component(MSYS_INSTALL_PATH "${MSYS_CMD}" DIRECTORY)
+  mark_as_advanced(MSYS_CMD)
+
+endif ()
diff --git a/share/cmake-3.22/Modules/FindODBC.cmake b/share/cmake-3.22/Modules/FindODBC.cmake
new file mode 100644
index 0000000..884653c
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindODBC.cmake
@@ -0,0 +1,233 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindODBC
+--------
+
+.. versionadded:: 3.12
+
+Find an Open Database Connectivity (ODBC) include directory and library.
+
+On Windows, when building with Visual Studio, this module assumes the ODBC
+library is provided by the available Windows SDK.
+
+On Unix, this module allows to search for ODBC library provided by
+unixODBC or iODBC implementations of ODBC API.
+This module reads hint about location of the config program:
+
+.. variable:: ODBC_CONFIG
+
+  Location of odbc_config or iodbc-config program
+
+Otherwise, this module tries to find the config program,
+first from unixODBC, then from iODBC.
+If no config program found, this module searches for ODBC header
+and library in list of known locations.
+
+Imported targets
+^^^^^^^^^^^^^^^^
+
+This module defines the following :prop_tgt:`IMPORTED` targets:
+
+.. variable:: ODBC::ODBC
+
+  Imported target for using the ODBC library, if found.
+
+Result variables
+^^^^^^^^^^^^^^^^
+
+.. variable:: ODBC_FOUND
+
+  Set to true if ODBC library found, otherwise false or undefined.
+
+.. variable:: ODBC_INCLUDE_DIRS
+
+  Paths to include directories listed in one variable for use by ODBC client.
+  May be empty on Windows, where the include directory corresponding to the
+  expected Windows SDK is already available in the compilation environment.
+
+.. variable:: ODBC_LIBRARIES
+
+  Paths to libraries to linked against to use ODBC.
+  May just a library name on Windows, where the library directory corresponding
+  to the expected Windows SDK is already available in the compilation environment.
+
+.. variable:: ODBC_CONFIG
+
+  Path to unixODBC or iODBC config program, if found or specified.
+
+Cache variables
+^^^^^^^^^^^^^^^
+
+For users who wish to edit and control the module behavior, this module
+reads hints about search locations from the following variables:
+
+.. variable:: ODBC_INCLUDE_DIR
+
+  Path to ODBC include directory with ``sql.h`` header.
+
+.. variable:: ODBC_LIBRARY
+
+  Path to ODBC library to be linked.
+
+These variables should not be used directly by project code.
+
+Limitations
+^^^^^^^^^^^
+
+On Windows, this module does not search for iODBC.
+On Unix, there is no way to prefer unixODBC over iODBC, or vice versa,
+other than providing the config program location using the ``ODBC_CONFIG``.
+This module does not allow to search for a specific ODBC driver.
+
+#]=======================================================================]
+
+# Define lists used internally
+set(_odbc_include_paths)
+set(_odbc_lib_paths)
+set(_odbc_lib_names)
+set(_odbc_required_libs_names)
+
+### Try Windows Kits ##########################################################
+if(WIN32)
+  # List names of ODBC libraries on Windows
+  if(NOT MINGW)
+    set(ODBC_LIBRARY odbc32.lib)
+  else()
+    set(ODBC_LIBRARY libodbc32.a)
+  endif()
+  set(_odbc_lib_names odbc32;)
+
+  # List additional libraries required to use ODBC library
+  if(MSVC OR CMAKE_CXX_COMPILER_ID MATCHES "Intel")
+    set(_odbc_required_libs_names odbccp32;ws2_32)
+  elseif(MINGW)
+    set(_odbc_required_libs_names odbccp32)
+  endif()
+endif()
+
+### Try unixODBC or iODBC config program ######################################
+if (UNIX)
+  find_program(ODBC_CONFIG
+    NAMES odbc_config iodbc-config
+    DOC "Path to unixODBC or iODBC config program")
+  mark_as_advanced(ODBC_CONFIG)
+endif()
+
+if (UNIX AND ODBC_CONFIG)
+  # unixODBC and iODBC accept unified command line options
+  execute_process(COMMAND ${ODBC_CONFIG} --cflags
+    OUTPUT_VARIABLE _cflags OUTPUT_STRIP_TRAILING_WHITESPACE)
+  execute_process(COMMAND ${ODBC_CONFIG} --libs
+    OUTPUT_VARIABLE _libs OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+  # Collect paths of include directories from CFLAGS
+  separate_arguments(_cflags NATIVE_COMMAND "${_cflags}")
+  foreach(arg IN LISTS _cflags)
+    if("${arg}" MATCHES "^-I(.*)$")
+      list(APPEND _odbc_include_paths "${CMAKE_MATCH_1}")
+    endif()
+  endforeach()
+  unset(_cflags)
+
+  # Collect paths of library names and directories from LIBS
+  separate_arguments(_libs NATIVE_COMMAND "${_libs}")
+  foreach(arg IN LISTS _libs)
+    if("${arg}" MATCHES "^-L(.*)$")
+      list(APPEND _odbc_lib_paths "${CMAKE_MATCH_1}")
+    elseif("${arg}" MATCHES "^-l(.*)$")
+      set(_lib_name ${CMAKE_MATCH_1})
+      string(REGEX MATCH "odbc" _is_odbc ${_lib_name})
+      if(_is_odbc)
+        list(APPEND _odbc_lib_names ${_lib_name})
+      else()
+        list(APPEND _odbc_required_libs_names ${_lib_name})
+      endif()
+      unset(_lib_name)
+    endif()
+  endforeach()
+  unset(_libs)
+endif()
+
+### Try unixODBC or iODBC in include/lib filesystems ##########################
+if (UNIX AND NOT ODBC_CONFIG)
+  # List names of both ODBC libraries, unixODBC and iODBC
+  set(_odbc_lib_names odbc;iodbc;unixodbc;)
+endif()
+
+### Find include directories ##################################################
+find_path(ODBC_INCLUDE_DIR
+  NAMES sql.h
+  PATHS ${_odbc_include_paths})
+
+if(NOT ODBC_INCLUDE_DIR AND WIN32)
+  set(ODBC_INCLUDE_DIR "")
+endif()
+
+### Find libraries ############################################################
+if(NOT ODBC_LIBRARY)
+  find_library(ODBC_LIBRARY
+    NAMES ${_odbc_lib_names}
+    PATHS ${_odbc_lib_paths}
+    PATH_SUFFIXES odbc)
+
+  foreach(_lib IN LISTS _odbc_required_libs_names)
+    find_library(_lib_path
+      NAMES ${_lib}
+      PATHS ${_odbc_lib_paths} # system parths or collected from ODBC_CONFIG
+      PATH_SUFFIXES odbc)
+    if(_lib_path)
+      list(APPEND _odbc_required_libs_paths ${_lib_path})
+    endif()
+    unset(_lib_path CACHE)
+  endforeach()
+endif()
+
+# Unset internal lists as no longer used
+unset(_odbc_include_paths)
+unset(_odbc_lib_paths)
+unset(_odbc_lib_names)
+unset(_odbc_required_libs_names)
+
+### Set result variables ######################################################
+set(_odbc_required_vars ODBC_LIBRARY)
+if(NOT WIN32)
+  list(APPEND _odbc_required_vars ODBC_INCLUDE_DIR)
+endif()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(ODBC DEFAULT_MSG ${_odbc_required_vars})
+
+unset(_odbc_required_vars)
+
+mark_as_advanced(ODBC_LIBRARY ODBC_INCLUDE_DIR)
+
+set(ODBC_INCLUDE_DIRS ${ODBC_INCLUDE_DIR})
+list(APPEND ODBC_LIBRARIES ${ODBC_LIBRARY})
+list(APPEND ODBC_LIBRARIES ${_odbc_required_libs_paths})
+
+### Import targets ############################################################
+if(ODBC_FOUND)
+  if(NOT TARGET ODBC::ODBC)
+    if(IS_ABSOLUTE "${ODBC_LIBRARY}")
+      add_library(ODBC::ODBC UNKNOWN IMPORTED)
+      set_target_properties(ODBC::ODBC PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+        IMPORTED_LOCATION "${ODBC_LIBRARY}")
+    else()
+      add_library(ODBC::ODBC INTERFACE IMPORTED)
+      set_target_properties(ODBC::ODBC PROPERTIES
+        IMPORTED_LIBNAME "${ODBC_LIBRARY}")
+    endif()
+    set_target_properties(ODBC::ODBC PROPERTIES
+      INTERFACE_INCLUDE_DIRECTORIES "${ODBC_INCLUDE_DIR}")
+
+    if(_odbc_required_libs_paths)
+      set_property(TARGET ODBC::ODBC APPEND PROPERTY
+        INTERFACE_LINK_LIBRARIES "${_odbc_required_libs_paths}")
+    endif()
+  endif()
+endif()
+
+unset(_odbc_required_libs_paths)
diff --git a/share/cmake-3.22/Modules/FindOpenACC.cmake b/share/cmake-3.22/Modules/FindOpenACC.cmake
new file mode 100644
index 0000000..cf58f3b
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindOpenACC.cmake
@@ -0,0 +1,296 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindOpenACC
+-----------
+
+.. versionadded:: 3.10
+
+Detect OpenACC support by the compiler.
+
+This module can be used to detect OpenACC support in a compiler.
+If the compiler supports OpenACC, the flags required to compile with
+OpenACC support are returned in variables for the different languages.
+Currently, only NVHPC, PGI, GNU and Cray compilers are supported.
+
+Imported Targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.16
+
+The module provides :prop_tgt:`IMPORTED` targets:
+
+``OpenACC::OpenACC_<lang>``
+  Target for using OpenACC from ``<lang>``.
+
+Variables
+^^^^^^^^^
+
+This module will set the following variables per language in your
+project, where ``<lang>`` is one of C, CXX, or Fortran:
+
+``OpenACC_<lang>_FOUND``
+  Variable indicating if OpenACC support for ``<lang>`` was detected.
+``OpenACC_<lang>_FLAGS``
+  OpenACC compiler flags for ``<lang>``, separated by spaces.
+``OpenACC_<lang>_OPTIONS``
+  .. versionadded:: 3.16
+
+  OpenACC compiler flags for ``<lang>``, as a list. Suitable for usage
+  with target_compile_options or target_link_options.
+
+The module will also try to provide the OpenACC version variables:
+
+``OpenACC_<lang>_SPEC_DATE``
+  Date of the OpenACC specification implemented by the ``<lang>`` compiler.
+``OpenACC_<lang>_VERSION_MAJOR``
+  Major version of OpenACC implemented by the ``<lang>`` compiler.
+``OpenACC_<lang>_VERSION_MINOR``
+  Minor version of OpenACC implemented by the ``<lang>`` compiler.
+``OpenACC_<lang>_VERSION``
+  OpenACC version implemented by the ``<lang>`` compiler.
+
+The specification date is formatted as given in the OpenACC standard:
+``yyyymm`` where ``yyyy`` and ``mm`` represents the year and month of
+the OpenACC specification implemented by the ``<lang>`` compiler.
+
+Input Variables
+^^^^^^^^^^^^^^^
+
+``OpenACC_ACCEL_TARGET=<target>``
+If set, will the correct target accelerator flag set to the <target> will
+be returned with OpenACC_<lang>_FLAGS.
+#]=======================================================================]
+
+set(OpenACC_C_CXX_TEST_SOURCE
+"
+int main(){
+#ifdef _OPENACC
+  return 0;
+#else
+  breaks_on_purpose
+#endif
+}
+"
+)
+set(OpenACC_Fortran_TEST_SOURCE
+"
+program test
+#ifndef _OPENACC
+  breaks_on_purpose
+#endif
+endprogram test
+"
+)
+set(OpenACC_C_CXX_CHECK_VERSION_SOURCE
+"
+#include <stdio.h>
+const char accver_str[] = { 'I', 'N', 'F', 'O', ':', 'O', 'p', 'e', 'n', 'A',
+                            'C', 'C', '-', 'd', 'a', 't', 'e', '[',
+                            ('0' + ((_OPENACC/100000)%10)),
+                            ('0' + ((_OPENACC/10000)%10)),
+                            ('0' + ((_OPENACC/1000)%10)),
+                            ('0' + ((_OPENACC/100)%10)),
+                            ('0' + ((_OPENACC/10)%10)),
+                            ('0' + ((_OPENACC/1)%10)),
+                            ']', '\\0' };
+int main()
+{
+  puts(accver_str);
+  return 0;
+}
+")
+set(OpenACC_Fortran_CHECK_VERSION_SOURCE
+"
+      program acc_ver
+      implicit none
+      integer, parameter :: zero = ichar('0')
+      character, dimension(25), parameter :: accver_str =&
+      (/ 'I', 'N', 'F', 'O', ':', 'O', 'p', 'e', 'n', 'A', 'C', 'C', '-',&
+         'd', 'a', 't', 'e', '[',&
+         char(zero + mod(_OPENACC/100000, 10)),&
+         char(zero + mod(_OPENACC/10000, 10)),&
+         char(zero + mod(_OPENACC/1000, 10)),&
+         char(zero + mod(_OPENACC/100, 10)),&
+         char(zero + mod(_OPENACC/10, 10)),&
+         char(zero + mod(_OPENACC/1, 10)), ']' /)
+      print *, accver_str
+      end program acc_ver
+"
+)
+
+
+function(_OPENACC_WRITE_SOURCE_FILE LANG SRC_FILE_CONTENT_VAR SRC_FILE_NAME SRC_FILE_FULLPATH)
+  set(WORK_DIR ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/FindOpenACC)
+  if("${LANG}" STREQUAL "C")
+    set(SRC_FILE "${WORK_DIR}/${SRC_FILE_NAME}.c")
+    file(WRITE "${SRC_FILE}" "${OpenACC_C_CXX_${SRC_FILE_CONTENT_VAR}}")
+  elseif("${LANG}" STREQUAL "CXX")
+    set(SRC_FILE "${WORK_DIR}/${SRC_FILE_NAME}.cpp")
+    file(WRITE "${SRC_FILE}" "${OpenACC_C_CXX_${SRC_FILE_CONTENT_VAR}}")
+  elseif("${LANG}" STREQUAL "Fortran")
+    set(SRC_FILE "${WORK_DIR}/${SRC_FILE_NAME}.F90")
+    file(WRITE "${SRC_FILE}_in" "${OpenACC_Fortran_${SRC_FILE_CONTENT_VAR}}")
+    configure_file("${SRC_FILE}_in" "${SRC_FILE}" @ONLY)
+  endif()
+  set(${SRC_FILE_FULLPATH} "${SRC_FILE}" PARENT_SCOPE)
+endfunction()
+
+
+function(_OPENACC_GET_FLAGS_CANDIDATE LANG FLAG_VAR)
+  set(ACC_FLAG_NVHPC "-acc")
+  set(ACC_FLAG_PGI "-acc")
+  set(ACC_FLAG_GNU "-fopenacc")
+  set(ACC_FLAG_Cray "-h acc")
+
+  if(DEFINED ACC_FLAG_${CMAKE_${LANG}_COMPILER_ID})
+    set("${FLAG_VAR}" "${ACC_FLAG_${CMAKE_${LANG}_COMPILER_ID}}" PARENT_SCOPE)
+  else()
+    # Fall back to a few common flags.
+    set("${FLAG_VAR}" ${ACC_FLAG_GNU} ${ACC_FLAG_PGI})
+  endif()
+
+endfunction()
+
+
+function(_OPENACC_GET_ACCEL_TARGET_FLAG LANG TARGET FLAG_VAR)
+  # Find target accelerator flags.
+  set(ACC_TARGET_FLAG_NVHPC "-ta")
+  set(ACC_TARGET_FLAG_PGI "-ta")
+  if(DEFINED ACC_TARGET_FLAG_${CMAKE_${LANG}_COMPILER_ID})
+    set("${FLAG_VAR}" "${ACC_TARGET_FLAG_${CMAKE_${LANG}_COMPILER_ID}}=${TARGET}" PARENT_SCOPE)
+  endif()
+endfunction()
+
+
+function(_OPENACC_GET_VERBOSE_FLAG LANG FLAG_VAR)
+  # Find compiler's verbose flag for OpenACC.
+  set(ACC_VERBOSE_FLAG_NVHPC "-Minfo=accel")
+  set(ACC_VERBOSE_FLAG_PGI "-Minfo=accel")
+  if(DEFINED ACC_VERBOSE_FLAG_${CMAKE_${LANG}_COMPILER_ID})
+    set("${FLAG_VAR}" "${ACC_VERBOSE_FLAG_${CMAKE_${LANG}_COMPILER_ID}}" PARENT_SCOPE)
+  endif()
+endfunction()
+
+
+function(_OPENACC_GET_FLAGS LANG FLAG_VAR)
+  set(FLAG_CANDIDATES "")
+  _OPENACC_GET_FLAGS_CANDIDATE("${LANG}" FLAG_CANDIDATES)
+  _OPENACC_WRITE_SOURCE_FILE("${LANG}" "TEST_SOURCE" OpenACCTryFlag _OPENACC_TEST_SRC)
+
+  foreach(FLAG IN LISTS FLAG_CANDIDATES)
+    try_compile(OpenACC_FLAG_TEST_RESULT ${CMAKE_BINARY_DIR} ${_OPENACC_TEST_SRC}
+      CMAKE_FLAGS "-DCOMPILE_DEFINITIONS:STRING=${FLAG}"
+      OUTPUT_VARIABLE OpenACC_TRY_COMPILE_OUTPUT
+    )
+    if(OpenACC_FLAG_TEST_RESULT)
+      set("${FLAG_VAR}" "${FLAG}")
+      if(DEFINED OpenACC_ACCEL_TARGET)
+        _OPENACC_GET_ACCEL_TARGET_FLAG("${LANG}" "${OpenACC_ACCEL_TARGET}" TARGET_FLAG)
+        string(APPEND "${FLAG_VAR}" " ${TARGET_FLAG}")
+      endif()
+
+      if(CMAKE_VERBOSE_MAKEFILE)
+        # -Minfo=accel prints out OpenACC's messages on optimizations.
+        _OPENACC_GET_VERBOSE_FLAG("${LANG}" OpenACC_VERBOSE_FLAG)
+        string(APPEND "${FLAG_VAR}" " ${OpenACC_VERBOSE_FLAG}")
+      endif()
+      set("${FLAG_VAR}" "${${FLAG_VAR}}" PARENT_SCOPE)
+      break()
+    endif()
+  endforeach()
+
+endfunction()
+
+
+function(_OPENACC_GET_SPEC_DATE LANG SPEC_DATE)
+  _OPENACC_WRITE_SOURCE_FILE("${LANG}" "CHECK_VERSION_SOURCE" OpenACCCheckVersion _OPENACC_TEST_SRC)
+
+  set(BIN_FILE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/FindOpenACC/accver_${LANG}.bin")
+  try_compile(OpenACC_SPECTEST_${LANG} "${CMAKE_BINARY_DIR}" "${_OPENACC_TEST_SRC}"
+              CMAKE_FLAGS "-DCOMPILE_DEFINITIONS:STRING=${OpenACC_${LANG}_FLAGS}"
+              COPY_FILE ${BIN_FILE}
+              OUTPUT_VARIABLE OUTPUT)
+
+  if(${OpenACC_SPECTEST_${LANG}})
+    file(STRINGS ${BIN_FILE} specstr LIMIT_COUNT 1 REGEX "INFO:OpenACC-date")
+    set(regex_spec_date ".*INFO:OpenACC-date\\[0*([^]]*)\\].*")
+    if("${specstr}" MATCHES "${regex_spec_date}")
+      set(${SPEC_DATE} "${CMAKE_MATCH_1}" PARENT_SCOPE)
+    endif()
+  endif()
+endfunction()
+
+
+macro(_OPENACC_SET_VERSION_BY_SPEC_DATE LANG)
+  set(OpenACC_SPEC_DATE_MAP
+    # Combined versions, 2.5 onwards
+    "201510=2.5"
+    # 2013 08 is the corrected version.
+    "201308=2.0"
+    "201306=2.0"
+    "201111=1.0"
+  )
+
+  string(REGEX MATCHALL "${OpenACC_${LANG}_SPEC_DATE}=([0-9]+)\\.([0-9]+)" _version_match "${OpenACC_SPEC_DATE_MAP}")
+  if(NOT _version_match STREQUAL "")
+    set(OpenACC_${LANG}_VERSION_MAJOR ${CMAKE_MATCH_1})
+    set(OpenACC_${LANG}_VERSION_MINOR ${CMAKE_MATCH_2})
+    set(OpenACC_${LANG}_VERSION "${OpenACC_${LANG}_VERSION_MAJOR}.${OpenACC_${LANG}_VERSION_MINOR}")
+  else()
+    unset(OpenACC_${LANG}_VERSION_MAJOR)
+    unset(OpenACC_${LANG}_VERSION_MINOR)
+    unset(OpenACC_${LANG}_VERSION)
+  endif()
+  unset(_version_match)
+  unset(OpenACC_SPEC_DATE_MAP)
+endmacro()
+
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+foreach (LANG IN ITEMS C CXX Fortran)
+  if(CMAKE_${LANG}_COMPILER_LOADED)
+    set(OpenACC_${LANG}_FIND_QUIETLY ${OpenACC_FIND_QUIETLY})
+    set(OpenACC_${LANG}_FIND_REQUIRED ${OpenACC_FIND_REQUIRED})
+    set(OpenACC_${LANG}_FIND_VERSION ${OpenACC_FIND_VERSION})
+    set(OpenACC_${LANG}_FIND_VERSION_EXACT ${OpenACC_FIND_VERSION_EXACT})
+
+    if(NOT DEFINED OpenACC_${LANG}_FLAGS)
+      _OPENACC_GET_FLAGS("${LANG}" OpenACC_${LANG}_FLAGS)
+    endif()
+    if(NOT DEFINED OpenACC_${LANG}_OPTIONS)
+      separate_arguments(OpenACC_${LANG}_OPTIONS NATIVE_COMMAND "${OpenACC_${LANG}_FLAGS}")
+    endif()
+    _OPENACC_GET_SPEC_DATE("${LANG}" OpenACC_${LANG}_SPEC_DATE)
+    _OPENACC_SET_VERSION_BY_SPEC_DATE("${LANG}")
+
+    find_package_handle_standard_args(OpenACC_${LANG}
+      NAME_MISMATCHED
+      REQUIRED_VARS OpenACC_${LANG}_FLAGS
+      VERSION_VAR OpenACC_${LANG}_VERSION
+    )
+  endif()
+endforeach()
+
+foreach (LANG IN ITEMS C CXX Fortran)
+  if(OpenACC_${LANG}_FOUND AND NOT TARGET OpenACC::OpenACC_${LANG})
+    add_library(OpenACC::OpenACC_${LANG} INTERFACE IMPORTED)
+  endif()
+  if(OpenACC_${LANG}_LIBRARIES)
+    set_property(TARGET OpenACC::OpenACC_${LANG} PROPERTY
+      INTERFACE_LINK_LIBRARIES "${OpenACC_${LANG}_LIBRARIES}")
+  endif()
+  if(OpenACC_${LANG}_FLAGS)
+    set_property(TARGET OpenACC::OpenACC_${LANG} PROPERTY
+      INTERFACE_COMPILE_OPTIONS "$<$<COMPILE_LANGUAGE:${LANG}>:${OpenACC_${LANG}_OPTIONS}>")
+    set_property(TARGET OpenACC::OpenACC_${LANG} PROPERTY
+      INTERFACE_LINK_OPTIONS "$<$<COMPILE_LANGUAGE:${LANG}>:${OpenACC_${LANG}_OPTIONS}>")
+    unset(_OpenACC_${LANG}_OPTIONS)
+  endif()
+endforeach()
+
+unset(OpenACC_C_CXX_TEST_SOURCE)
+unset(OpenACC_Fortran_TEST_SOURCE)
+unset(OpenACC_C_CXX_CHECK_VERSION_SOURCE)
+unset(OpenACC_Fortran_CHECK_VERSION_SOURCE)
diff --git a/share/cmake-3.18/Modules/FindOpenAL.cmake b/share/cmake-3.22/Modules/FindOpenAL.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindOpenAL.cmake
rename to share/cmake-3.22/Modules/FindOpenAL.cmake
diff --git a/share/cmake-3.22/Modules/FindOpenCL.cmake b/share/cmake-3.22/Modules/FindOpenCL.cmake
new file mode 100644
index 0000000..1b4662b
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindOpenCL.cmake
@@ -0,0 +1,185 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindOpenCL
+----------
+
+.. versionadded:: 3.1
+
+Finds Open Computing Language (OpenCL)
+
+.. versionadded:: 3.10
+  Detection of OpenCL 2.1 and 2.2.
+
+IMPORTED Targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.7
+
+This module defines :prop_tgt:`IMPORTED` target ``OpenCL::OpenCL``, if
+OpenCL has been found.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This module defines the following variables::
+
+  OpenCL_FOUND          - True if OpenCL was found
+  OpenCL_INCLUDE_DIRS   - include directories for OpenCL
+  OpenCL_LIBRARIES      - link against this library to use OpenCL
+  OpenCL_VERSION_STRING - Highest supported OpenCL version (eg. 1.2)
+  OpenCL_VERSION_MAJOR  - The major version of the OpenCL implementation
+  OpenCL_VERSION_MINOR  - The minor version of the OpenCL implementation
+
+The module will also define two cache variables::
+
+  OpenCL_INCLUDE_DIR    - the OpenCL include directory
+  OpenCL_LIBRARY        - the path to the OpenCL library
+
+#]=======================================================================]
+
+function(_FIND_OPENCL_VERSION)
+  include(CheckSymbolExists)
+  include(CMakePushCheckState)
+  set(CMAKE_REQUIRED_QUIET ${OpenCL_FIND_QUIETLY})
+
+  CMAKE_PUSH_CHECK_STATE()
+  foreach(VERSION "2_2" "2_1" "2_0" "1_2" "1_1" "1_0")
+    set(CMAKE_REQUIRED_INCLUDES "${OpenCL_INCLUDE_DIR}")
+
+    if(APPLE)
+      CHECK_SYMBOL_EXISTS(
+        CL_VERSION_${VERSION}
+        "${OpenCL_INCLUDE_DIR}/Headers/cl.h"
+        OPENCL_VERSION_${VERSION})
+    else()
+      CHECK_SYMBOL_EXISTS(
+        CL_VERSION_${VERSION}
+        "${OpenCL_INCLUDE_DIR}/CL/cl.h"
+        OPENCL_VERSION_${VERSION})
+    endif()
+
+    if(OPENCL_VERSION_${VERSION})
+      string(REPLACE "_" "." VERSION "${VERSION}")
+      set(OpenCL_VERSION_STRING ${VERSION} PARENT_SCOPE)
+      string(REGEX MATCHALL "[0-9]+" version_components "${VERSION}")
+      list(GET version_components 0 major_version)
+      list(GET version_components 1 minor_version)
+      set(OpenCL_VERSION_MAJOR ${major_version} PARENT_SCOPE)
+      set(OpenCL_VERSION_MINOR ${minor_version} PARENT_SCOPE)
+      break()
+    endif()
+  endforeach()
+  CMAKE_POP_CHECK_STATE()
+endfunction()
+
+find_path(OpenCL_INCLUDE_DIR
+  NAMES
+    CL/cl.h OpenCL/cl.h
+  PATHS
+    ENV "PROGRAMFILES(X86)"
+    ENV AMDAPPSDKROOT
+    ENV INTELOCLSDKROOT
+    ENV NVSDKCOMPUTE_ROOT
+    ENV CUDA_PATH
+    ENV ATISTREAMSDKROOT
+    ENV OCL_ROOT
+    /usr/local/cuda
+    /opt/cuda
+  PATH_SUFFIXES
+    include
+    OpenCL/common/inc
+    "AMD APP/include")
+
+_FIND_OPENCL_VERSION()
+
+if(WIN32)
+  if(CMAKE_SIZEOF_VOID_P EQUAL 4)
+    find_library(OpenCL_LIBRARY
+      NAMES OpenCL
+      PATHS
+        ENV "PROGRAMFILES(X86)"
+        ENV AMDAPPSDKROOT
+        ENV INTELOCLSDKROOT
+        ENV CUDA_PATH
+        ENV NVSDKCOMPUTE_ROOT
+        ENV ATISTREAMSDKROOT
+        ENV OCL_ROOT
+      PATH_SUFFIXES
+        "AMD APP/lib/x86"
+        lib/x86
+        lib/Win32
+        OpenCL/common/lib/Win32)
+  elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
+    find_library(OpenCL_LIBRARY
+      NAMES OpenCL
+      PATHS
+        ENV "PROGRAMFILES(X86)"
+        ENV AMDAPPSDKROOT
+        ENV INTELOCLSDKROOT
+        ENV CUDA_PATH
+        ENV NVSDKCOMPUTE_ROOT
+        ENV ATISTREAMSDKROOT
+        ENV OCL_ROOT
+      PATH_SUFFIXES
+        "AMD APP/lib/x86_64"
+        lib/x86_64
+        lib/x64
+        OpenCL/common/lib/x64)
+  endif()
+else()
+  if(CMAKE_SIZEOF_VOID_P EQUAL 4)
+    find_library(OpenCL_LIBRARY
+      NAMES OpenCL
+      PATHS
+        ENV AMDAPPSDKROOT
+        ENV CUDA_PATH
+        /usr/local/cuda
+        /opt/cuda
+      PATH_SUFFIXES
+        lib/x86
+        lib)
+  elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
+    find_library(OpenCL_LIBRARY
+      NAMES OpenCL
+      PATHS
+        ENV AMDAPPSDKROOT
+        ENV CUDA_PATH
+        /usr/local/cuda
+        /opt/cuda
+      PATH_SUFFIXES
+        lib/x86_64
+        lib/x64
+        lib
+        lib64)
+  endif()
+endif()
+
+set(OpenCL_LIBRARIES ${OpenCL_LIBRARY})
+set(OpenCL_INCLUDE_DIRS ${OpenCL_INCLUDE_DIR})
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+find_package_handle_standard_args(
+  OpenCL
+  FOUND_VAR OpenCL_FOUND
+  REQUIRED_VARS OpenCL_LIBRARY OpenCL_INCLUDE_DIR
+  VERSION_VAR OpenCL_VERSION_STRING)
+
+mark_as_advanced(
+  OpenCL_INCLUDE_DIR
+  OpenCL_LIBRARY)
+
+if(OpenCL_FOUND AND NOT TARGET OpenCL::OpenCL)
+  if(OpenCL_LIBRARY MATCHES "/([^/]+)\\.framework$")
+    add_library(OpenCL::OpenCL INTERFACE IMPORTED)
+    set_target_properties(OpenCL::OpenCL PROPERTIES
+      INTERFACE_LINK_LIBRARIES "${OpenCL_LIBRARY}")
+  else()
+    add_library(OpenCL::OpenCL UNKNOWN IMPORTED)
+    set_target_properties(OpenCL::OpenCL PROPERTIES
+      IMPORTED_LOCATION "${OpenCL_LIBRARY}")
+  endif()
+  set_target_properties(OpenCL::OpenCL PROPERTIES
+    INTERFACE_INCLUDE_DIRECTORIES "${OpenCL_INCLUDE_DIRS}")
+endif()
diff --git a/share/cmake-3.22/Modules/FindOpenGL.cmake b/share/cmake-3.22/Modules/FindOpenGL.cmake
new file mode 100644
index 0000000..d6d1c00
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindOpenGL.cmake
@@ -0,0 +1,583 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindOpenGL
+----------
+
+FindModule for OpenGL and OpenGL Utility Library (GLU).
+
+.. versionchanged:: 3.2
+  X11 is no longer added as a dependency on Unix/Linux systems.
+
+.. versionadded:: 3.10
+  GLVND support on Linux.  See the :ref:`Linux Specific` section below.
+
+Optional COMPONENTS
+^^^^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.10
+
+This module respects several optional COMPONENTS: ``EGL``, ``GLX``, and
+``OpenGL``.  There are corresponding import targets for each of these flags.
+
+IMPORTED Targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.8
+
+This module defines the :prop_tgt:`IMPORTED` targets:
+
+``OpenGL::GL``
+  Defined to the platform-specific OpenGL libraries if the system has OpenGL.
+``OpenGL::GLU``
+  Defined if the system has OpenGL Utility Library (GLU).
+
+.. versionadded:: 3.10
+  Additionally, the following GLVND-specific library targets are defined:
+
+``OpenGL::OpenGL``
+  Defined to libOpenGL if the system is GLVND-based.
+``OpenGL::GLX``
+  Defined if the system has OpenGL Extension to the X Window System (GLX).
+``OpenGL::EGL``
+  Defined if the system has EGL.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This module sets the following variables:
+
+``OPENGL_FOUND``
+ True, if the system has OpenGL and all components are found.
+``OPENGL_XMESA_FOUND``
+ True, if the system has XMESA.
+``OPENGL_GLU_FOUND``
+ True, if the system has GLU.
+``OpenGL_OpenGL_FOUND``
+ True, if the system has an OpenGL library.
+``OpenGL_GLX_FOUND``
+ True, if the system has GLX.
+``OpenGL_EGL_FOUND``
+ True, if the system has EGL.
+``OPENGL_INCLUDE_DIR``
+ Path to the OpenGL include directory.
+``OPENGL_EGL_INCLUDE_DIRS``
+ Path to the EGL include directory.
+``OPENGL_LIBRARIES``
+ Paths to the OpenGL library, windowing system libraries, and GLU libraries.
+ On Linux, this assumes GLX and is never correct for EGL-based targets.
+ Clients are encouraged to use the ``OpenGL::*`` import targets instead.
+
+.. versionadded:: 3.10
+  Variables for GLVND-specific libraries ``OpenGL``, ``EGL`` and ``GLX``.
+
+Cache variables
+^^^^^^^^^^^^^^^
+
+The following cache variables may also be set:
+
+``OPENGL_egl_LIBRARY``
+ Path to the EGL library.
+``OPENGL_glu_LIBRARY``
+ Path to the GLU library.
+``OPENGL_glx_LIBRARY``
+ Path to the GLVND 'GLX' library.
+``OPENGL_opengl_LIBRARY``
+ Path to the GLVND 'OpenGL' library
+``OPENGL_gl_LIBRARY``
+ Path to the OpenGL library.  New code should prefer the ``OpenGL::*`` import
+ targets.
+
+.. versionadded:: 3.10
+  Variables for GLVND-specific libraries ``OpenGL``, ``EGL`` and ``GLX``.
+
+.. _`Linux Specific`:
+
+Linux-specific
+^^^^^^^^^^^^^^
+
+Some Linux systems utilize GLVND as a new ABI for OpenGL.  GLVND separates
+context libraries from OpenGL itself; OpenGL lives in "libOpenGL", and
+contexts are defined in "libGLX" or "libEGL".  GLVND is currently the only way
+to get OpenGL 3+ functionality via EGL in a manner portable across vendors.
+Projects may use GLVND explicitly with target ``OpenGL::OpenGL`` and either
+``OpenGL::GLX`` or ``OpenGL::EGL``.
+
+Projects may use the ``OpenGL::GL`` target (or ``OPENGL_LIBRARIES`` variable)
+to use legacy GL interfaces.  These will use the legacy GL library located
+by ``OPENGL_gl_LIBRARY``, if available.  If ``OPENGL_gl_LIBRARY`` is empty or
+not found and GLVND is available, the ``OpenGL::GL`` target will use GLVND
+``OpenGL::OpenGL`` and ``OpenGL::GLX`` (and the ``OPENGL_LIBRARIES``
+variable will use the corresponding libraries).  Thus, for non-EGL-based
+Linux targets, the ``OpenGL::GL`` target is most portable.
+
+A ``OpenGL_GL_PREFERENCE`` variable may be set to specify the preferred way
+to provide legacy GL interfaces in case multiple choices are available.
+The value may be one of:
+
+``GLVND``
+ If the GLVND OpenGL and GLX libraries are available, prefer them.
+ This forces ``OPENGL_gl_LIBRARY`` to be empty.
+
+ .. versionchanged:: 3.11
+  This is the default, unless policy :policy:`CMP0072` is set to ``OLD``
+  and no components are requeted (since components
+  correspond to GLVND libraries).
+
+``LEGACY``
+ Prefer to use the legacy libGL library, if available.
+
+For EGL targets the client must rely on GLVND support on the user's system.
+Linking should use the ``OpenGL::OpenGL OpenGL::EGL`` targets.  Using GLES*
+libraries is theoretically possible in place of ``OpenGL::OpenGL``, but this
+module does not currently support that; contributions welcome.
+
+``OPENGL_egl_LIBRARY`` and ``OPENGL_EGL_INCLUDE_DIRS`` are defined in the case of
+GLVND.  For non-GLVND Linux and other systems these are left undefined.
+
+macOS-Specific
+^^^^^^^^^^^^^^
+
+On OSX FindOpenGL defaults to using the framework version of OpenGL. People
+will have to change the cache values of OPENGL_glu_LIBRARY and
+OPENGL_gl_LIBRARY to use OpenGL with X11 on OSX.
+#]=======================================================================]
+
+set(_OpenGL_REQUIRED_VARS OPENGL_gl_LIBRARY)
+
+# Provide OPENGL_USE_<C> variables for each component.
+foreach(component ${OpenGL_FIND_COMPONENTS})
+  string(TOUPPER ${component} _COMPONENT)
+  set(OPENGL_USE_${_COMPONENT} 1)
+endforeach()
+
+set(_OpenGL_CACHE_VARS)
+
+if (WIN32)
+
+  if(BORLAND)
+    set (OPENGL_gl_LIBRARY import32 CACHE STRING "OpenGL library for win32")
+    set (OPENGL_glu_LIBRARY import32 CACHE STRING "GLU library for win32")
+  else()
+    set (OPENGL_gl_LIBRARY opengl32 CACHE STRING "OpenGL library for win32")
+    set (OPENGL_glu_LIBRARY glu32 CACHE STRING "GLU library for win32")
+  endif()
+
+  list(APPEND _OpenGL_CACHE_VARS
+    OPENGL_gl_LIBRARY
+    OPENGL_glu_LIBRARY
+    )
+elseif (APPLE)
+  # The OpenGL.framework provides both gl and glu
+  find_library(OPENGL_gl_LIBRARY OpenGL DOC "OpenGL library for OS X")
+  find_library(OPENGL_glu_LIBRARY OpenGL DOC
+    "GLU library for OS X (usually same as OpenGL library)")
+  find_path(OPENGL_INCLUDE_DIR OpenGL/gl.h DOC "Include for OpenGL on OS X")
+  list(APPEND _OpenGL_REQUIRED_VARS OPENGL_INCLUDE_DIR)
+
+  list(APPEND _OpenGL_CACHE_VARS
+    OPENGL_INCLUDE_DIR
+    OPENGL_gl_LIBRARY
+    OPENGL_glu_LIBRARY
+    )
+else()
+  if (CMAKE_SYSTEM_NAME MATCHES "HP-UX")
+    # Handle HP-UX cases where we only want to find OpenGL in either hpux64
+    # or hpux32 depending on if we're doing a 64 bit build.
+    if(CMAKE_SIZEOF_VOID_P EQUAL 4)
+      set(_OPENGL_LIB_PATH
+        /opt/graphics/OpenGL/lib/hpux32/)
+    else()
+      set(_OPENGL_LIB_PATH
+        /opt/graphics/OpenGL/lib/hpux64/
+        /opt/graphics/OpenGL/lib/pa20_64)
+    endif()
+  elseif(CMAKE_SYSTEM_NAME STREQUAL Haiku)
+    set(_OPENGL_LIB_PATH
+      /boot/develop/lib/x86)
+    set(_OPENGL_INCLUDE_PATH
+      /boot/develop/headers/os/opengl)
+  endif()
+
+  # The first line below is to make sure that the proper headers
+  # are used on a Linux machine with the NVidia drivers installed.
+  # They replace Mesa with NVidia's own library but normally do not
+  # install headers and that causes the linking to
+  # fail since the compiler finds the Mesa headers but NVidia's library.
+  # Make sure the NVIDIA directory comes BEFORE the others.
+  #  - Atanas Georgiev <atanas@cs.columbia.edu>
+  find_path(OPENGL_INCLUDE_DIR GL/gl.h
+    /usr/share/doc/NVIDIA_GLX-1.0/include
+    /usr/openwin/share/include
+    /opt/graphics/OpenGL/include
+    ${_OPENGL_INCLUDE_PATH}
+  )
+  find_path(OPENGL_GLX_INCLUDE_DIR GL/glx.h ${_OPENGL_INCLUDE_PATH})
+  find_path(OPENGL_EGL_INCLUDE_DIR EGL/egl.h ${_OPENGL_INCLUDE_PATH})
+  find_path(OPENGL_xmesa_INCLUDE_DIR GL/xmesa.h
+    /usr/share/doc/NVIDIA_GLX-1.0/include
+    /usr/openwin/share/include
+    /opt/graphics/OpenGL/include
+  )
+  list(APPEND _OpenGL_CACHE_VARS
+    OPENGL_INCLUDE_DIR
+    OPENGL_GLX_INCLUDE_DIR
+    OPENGL_EGL_INCLUDE_DIR
+    OPENGL_xmesa_INCLUDE_DIR
+    )
+
+  # Search for the GLVND libraries.  We do this regardless of COMPONENTS; we'll
+  # take into account the COMPONENTS logic later.
+  find_library(OPENGL_opengl_LIBRARY
+    NAMES OpenGL
+    PATHS ${_OPENGL_LIB_PATH}
+  )
+
+  find_library(OPENGL_glx_LIBRARY
+    NAMES GLX
+    PATHS ${_OPENGL_LIB_PATH}
+    PATH_SUFFIXES libglvnd
+  )
+
+  find_library(OPENGL_egl_LIBRARY
+    NAMES EGL
+    PATHS ${_OPENGL_LIB_PATH}
+    PATH_SUFFIXES libglvnd
+  )
+
+  find_library(OPENGL_glu_LIBRARY
+    NAMES GLU MesaGLU
+    PATHS ${OPENGL_gl_LIBRARY}
+          /opt/graphics/OpenGL/lib
+          /usr/openwin/lib
+          /usr/shlib
+  )
+
+  list(APPEND _OpenGL_CACHE_VARS
+    OPENGL_opengl_LIBRARY
+    OPENGL_glx_LIBRARY
+    OPENGL_egl_LIBRARY
+    OPENGL_glu_LIBRARY
+    )
+
+  set(_OpenGL_GL_POLICY_WARN 0)
+  if(NOT DEFINED OpenGL_GL_PREFERENCE)
+    set(OpenGL_GL_PREFERENCE "")
+  endif()
+  if(NOT OpenGL_GL_PREFERENCE STREQUAL "")
+    # A preference has been explicitly specified.
+    if(NOT OpenGL_GL_PREFERENCE MATCHES "^(GLVND|LEGACY)$")
+      message(FATAL_ERROR
+        "OpenGL_GL_PREFERENCE value '${OpenGL_GL_PREFERENCE}' not recognized.  "
+        "Allowed values are 'GLVND' and 'LEGACY'."
+        )
+    endif()
+  elseif(OpenGL_FIND_COMPONENTS)
+    # No preference was explicitly specified, but the caller did request
+    # at least one GLVND component.  Prefer GLVND for legacy GL.
+    set(OpenGL_GL_PREFERENCE "GLVND")
+  else()
+    # No preference was explicitly specified and no GLVND components were
+    # requested.  Use a policy to choose the default.
+    cmake_policy(GET CMP0072 _OpenGL_GL_POLICY)
+    if("x${_OpenGL_GL_POLICY}x" STREQUAL "xNEWx")
+      set(OpenGL_GL_PREFERENCE "GLVND")
+    else()
+      set(OpenGL_GL_PREFERENCE "LEGACY")
+      if("x${_OpenGL_GL_POLICY}x" STREQUAL "xx")
+        set(_OpenGL_GL_POLICY_WARN 1)
+      endif()
+    endif()
+    unset(_OpenGL_GL_POLICY)
+  endif()
+
+  if("x${OpenGL_GL_PREFERENCE}x" STREQUAL "xGLVNDx" AND OPENGL_opengl_LIBRARY AND OPENGL_glx_LIBRARY)
+    # We can provide legacy GL using GLVND libraries.
+    # Do not use any legacy GL library.
+    set(OPENGL_gl_LIBRARY "")
+  else()
+    # We cannot provide legacy GL using GLVND libraries.
+    # Search for the legacy GL library.
+    find_library(OPENGL_gl_LIBRARY
+      NAMES GL MesaGL
+      PATHS /opt/graphics/OpenGL/lib
+            /usr/openwin/lib
+            /usr/shlib
+            ${_OPENGL_LIB_PATH}
+      PATH_SUFFIXES libglvnd
+      )
+    list(APPEND _OpenGL_CACHE_VARS OPENGL_gl_LIBRARY)
+  endif()
+
+  if(_OpenGL_GL_POLICY_WARN AND OPENGL_gl_LIBRARY AND OPENGL_opengl_LIBRARY AND OPENGL_glx_LIBRARY)
+    cmake_policy(GET_WARNING CMP0072 _cmp0072_warning)
+    message(AUTHOR_WARNING
+      "${_cmp0072_warning}\n"
+      "FindOpenGL found both a legacy GL library:\n"
+      "  OPENGL_gl_LIBRARY: ${OPENGL_gl_LIBRARY}\n"
+      "and GLVND libraries for OpenGL and GLX:\n"
+      "  OPENGL_opengl_LIBRARY: ${OPENGL_opengl_LIBRARY}\n"
+      "  OPENGL_glx_LIBRARY: ${OPENGL_glx_LIBRARY}\n"
+      "OpenGL_GL_PREFERENCE has not been set to \"GLVND\" or \"LEGACY\", so for "
+      "compatibility with CMake 3.10 and below the legacy GL library will be used."
+      )
+  endif()
+  unset(_OpenGL_GL_POLICY_WARN)
+
+  # FPHSA cannot handle "this OR that is required", so we conditionally set what
+  # it must look for.  First clear any previous config we might have done:
+  set(_OpenGL_REQUIRED_VARS)
+
+  # now we append the libraries as appropriate.  The complicated logic
+  # basically comes down to "use libOpenGL when we can, and add in specific
+  # context mechanisms when requested, or we need them to preserve the previous
+  # default where glx is always available."
+  if((NOT OPENGL_USE_EGL AND
+      NOT OPENGL_opengl_LIBRARY AND
+          OPENGL_glx_LIBRARY AND
+      NOT OPENGL_gl_LIBRARY) OR
+     (NOT OPENGL_USE_EGL AND
+      NOT OPENGL_glx_LIBRARY AND
+      NOT OPENGL_gl_LIBRARY) OR
+     (NOT OPENGL_USE_EGL AND
+          OPENGL_opengl_LIBRARY AND
+          OPENGL_glx_LIBRARY) OR
+     (    OPENGL_USE_EGL))
+    list(APPEND _OpenGL_REQUIRED_VARS OPENGL_opengl_LIBRARY)
+  endif()
+
+  # GLVND GLX library.  Preferred when available.
+  if((NOT OPENGL_USE_OPENGL AND
+      NOT OPENGL_USE_GLX AND
+      NOT OPENGL_USE_EGL AND
+      NOT OPENGL_glx_LIBRARY AND
+      NOT OPENGL_gl_LIBRARY) OR
+     (    OPENGL_USE_GLX AND
+      NOT OPENGL_USE_EGL AND
+      NOT OPENGL_glx_LIBRARY AND
+      NOT OPENGL_gl_LIBRARY) OR
+     (NOT OPENGL_USE_EGL AND
+          OPENGL_opengl_LIBRARY AND
+          OPENGL_glx_LIBRARY) OR
+     (OPENGL_USE_GLX AND OPENGL_USE_EGL))
+    list(APPEND _OpenGL_REQUIRED_VARS OPENGL_glx_LIBRARY)
+  endif()
+
+  # GLVND EGL library.
+  if(OPENGL_USE_EGL)
+    list(APPEND _OpenGL_REQUIRED_VARS OPENGL_egl_LIBRARY)
+  endif()
+
+  # Old-style "libGL" library: used as a fallback when GLVND isn't available.
+  if((NOT OPENGL_USE_EGL AND
+      NOT OPENGL_opengl_LIBRARY AND
+          OPENGL_glx_LIBRARY AND
+          OPENGL_gl_LIBRARY) OR
+     (NOT OPENGL_USE_EGL AND
+      NOT OPENGL_glx_LIBRARY AND
+          OPENGL_gl_LIBRARY))
+    list(APPEND _OpenGL_REQUIRED_VARS OPENGL_gl_LIBRARY)
+  endif()
+
+  # We always need the 'gl.h' include dir.
+  list(APPEND _OpenGL_REQUIRED_VARS OPENGL_INCLUDE_DIR)
+
+  unset(_OPENGL_INCLUDE_PATH)
+  unset(_OPENGL_LIB_PATH)
+
+  find_library(OPENGL_glu_LIBRARY
+    NAMES GLU MesaGLU
+    PATHS ${OPENGL_gl_LIBRARY}
+          /opt/graphics/OpenGL/lib
+          /usr/openwin/lib
+          /usr/shlib
+  )
+endif ()
+
+if(OPENGL_xmesa_INCLUDE_DIR)
+  set( OPENGL_XMESA_FOUND "YES" )
+else()
+  set( OPENGL_XMESA_FOUND "NO" )
+endif()
+
+if(OPENGL_glu_LIBRARY)
+  set( OPENGL_GLU_FOUND "YES" )
+else()
+  set( OPENGL_GLU_FOUND "NO" )
+endif()
+
+# OpenGL_OpenGL_FOUND is a bit unique in that it is okay if /either/ libOpenGL
+# or libGL is found.
+# Using libGL with libEGL is never okay, though; we handle that case later.
+if(NOT OPENGL_opengl_LIBRARY AND NOT OPENGL_gl_LIBRARY)
+  set(OpenGL_OpenGL_FOUND FALSE)
+else()
+  set(OpenGL_OpenGL_FOUND TRUE)
+endif()
+
+if(OPENGL_glx_LIBRARY AND OPENGL_GLX_INCLUDE_DIR)
+  set(OpenGL_GLX_FOUND TRUE)
+else()
+  set(OpenGL_GLX_FOUND FALSE)
+endif()
+
+if(OPENGL_egl_LIBRARY AND OPENGL_EGL_INCLUDE_DIR)
+  set(OpenGL_EGL_FOUND TRUE)
+else()
+  set(OpenGL_EGL_FOUND FALSE)
+endif()
+
+# User-visible names should be plural.
+if(OPENGL_EGL_INCLUDE_DIR)
+  set(OPENGL_EGL_INCLUDE_DIRS ${OPENGL_EGL_INCLUDE_DIR})
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+if (CMAKE_FIND_PACKAGE_NAME STREQUAL "GLU")
+  # FindGLU include()'s this module. It's an old pattern, but rather than
+  # trying to suppress this from outside the module (which is then sensitive to
+  # the contents, detect the case in this module and suppress it explicitly.
+  set(FPHSA_NAME_MISMATCHED 1)
+endif ()
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenGL REQUIRED_VARS ${_OpenGL_REQUIRED_VARS}
+                                  HANDLE_COMPONENTS)
+unset(FPHSA_NAME_MISMATCHED)
+unset(_OpenGL_REQUIRED_VARS)
+
+# OpenGL:: targets
+if(OPENGL_FOUND)
+  # ::OpenGL is a GLVND library, and thus Linux-only: we don't bother checking
+  # for a framework version of this library.
+  if(OPENGL_opengl_LIBRARY AND NOT TARGET OpenGL::OpenGL)
+    if(IS_ABSOLUTE "${OPENGL_opengl_LIBRARY}")
+      add_library(OpenGL::OpenGL UNKNOWN IMPORTED)
+      set_target_properties(OpenGL::OpenGL PROPERTIES IMPORTED_LOCATION
+                            "${OPENGL_opengl_LIBRARY}")
+    else()
+      add_library(OpenGL::OpenGL INTERFACE IMPORTED)
+      set_target_properties(OpenGL::OpenGL PROPERTIES IMPORTED_LIBNAME
+                            "${OPENGL_opengl_LIBRARY}")
+    endif()
+    set_target_properties(OpenGL::OpenGL PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
+                          "${OPENGL_INCLUDE_DIR}")
+  endif()
+
+  # ::GLX is a GLVND library, and thus Linux-only: we don't bother checking
+  # for a framework version of this library.
+  if(OpenGL_GLX_FOUND AND NOT TARGET OpenGL::GLX AND TARGET OpenGL::OpenGL)
+    if(IS_ABSOLUTE "${OPENGL_glx_LIBRARY}")
+      add_library(OpenGL::GLX UNKNOWN IMPORTED)
+      set_target_properties(OpenGL::GLX PROPERTIES IMPORTED_LOCATION
+                            "${OPENGL_glx_LIBRARY}")
+    else()
+      add_library(OpenGL::GLX INTERFACE IMPORTED)
+      set_target_properties(OpenGL::GLX PROPERTIES IMPORTED_LIBNAME
+                            "${OPENGL_glx_LIBRARY}")
+    endif()
+    set_target_properties(OpenGL::GLX PROPERTIES INTERFACE_LINK_LIBRARIES
+                          OpenGL::OpenGL)
+    set_target_properties(OpenGL::GLX PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
+                          "${OPENGL_GLX_INCLUDE_DIR}")
+  endif()
+
+  if(OPENGL_gl_LIBRARY AND NOT TARGET OpenGL::GL)
+    # A legacy GL library is available, so use it for the legacy GL target.
+    if(IS_ABSOLUTE "${OPENGL_gl_LIBRARY}")
+      add_library(OpenGL::GL UNKNOWN IMPORTED)
+      if(OPENGL_gl_LIBRARY MATCHES "/([^/]+)\\.framework$")
+        set(_gl_fw "${OPENGL_gl_LIBRARY}/${CMAKE_MATCH_1}")
+        if(EXISTS "${_gl_fw}.tbd")
+          string(APPEND _gl_fw ".tbd")
+        endif()
+        set_target_properties(OpenGL::GL PROPERTIES
+          IMPORTED_LOCATION "${_gl_fw}")
+      else()
+        set_target_properties(OpenGL::GL PROPERTIES
+          IMPORTED_LOCATION "${OPENGL_gl_LIBRARY}")
+      endif()
+    else()
+      add_library(OpenGL::GL INTERFACE IMPORTED)
+      set_target_properties(OpenGL::GL PROPERTIES
+        IMPORTED_LIBNAME "${OPENGL_gl_LIBRARY}")
+    endif()
+    set_target_properties(OpenGL::GL PROPERTIES
+      INTERFACE_INCLUDE_DIRECTORIES "${OPENGL_INCLUDE_DIR}")
+  elseif(NOT TARGET OpenGL::GL AND TARGET OpenGL::OpenGL AND TARGET OpenGL::GLX)
+    # A legacy GL library is not available, but we can provide the legacy GL
+    # target using GLVND OpenGL+GLX.
+    add_library(OpenGL::GL INTERFACE IMPORTED)
+    set_target_properties(OpenGL::GL PROPERTIES INTERFACE_LINK_LIBRARIES
+                          OpenGL::OpenGL)
+    set_property(TARGET OpenGL::GL APPEND PROPERTY INTERFACE_LINK_LIBRARIES
+                 OpenGL::GLX)
+    set_target_properties(OpenGL::GL PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
+                          "${OPENGL_INCLUDE_DIR}")
+  endif()
+
+  # ::EGL is a GLVND library, and thus Linux-only: we don't bother checking
+  # for a framework version of this library.
+  # Note we test for OpenGL::OpenGL as a target.  When this module is updated to
+  # support GLES, we would additionally want to check for the hypothetical GLES
+  # target and enable EGL if either ::GLES or ::OpenGL is created.
+  if(TARGET OpenGL::OpenGL AND OpenGL_EGL_FOUND AND NOT TARGET OpenGL::EGL)
+    if(IS_ABSOLUTE "${OPENGL_egl_LIBRARY}")
+      add_library(OpenGL::EGL UNKNOWN IMPORTED)
+      set_target_properties(OpenGL::EGL PROPERTIES IMPORTED_LOCATION
+                            "${OPENGL_egl_LIBRARY}")
+    else()
+      add_library(OpenGL::EGL INTERFACE IMPORTED)
+      set_target_properties(OpenGL::EGL PROPERTIES IMPORTED_LIBNAME
+                            "${OPENGL_egl_LIBRARY}")
+    endif()
+    set_target_properties(OpenGL::EGL PROPERTIES INTERFACE_LINK_LIBRARIES
+                          OpenGL::OpenGL)
+    # Note that EGL's include directory is different from OpenGL/GLX's!
+    set_target_properties(OpenGL::EGL PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
+                          "${OPENGL_EGL_INCLUDE_DIR}")
+  endif()
+
+  if(OPENGL_GLU_FOUND AND NOT TARGET OpenGL::GLU)
+    if(IS_ABSOLUTE "${OPENGL_glu_LIBRARY}")
+      add_library(OpenGL::GLU UNKNOWN IMPORTED)
+      if(OPENGL_glu_LIBRARY MATCHES "/([^/]+)\\.framework$")
+        set(_glu_fw "${OPENGL_glu_LIBRARY}/${CMAKE_MATCH_1}")
+        if(EXISTS "${_glu_fw}.tbd")
+          string(APPEND _glu_fw ".tbd")
+        endif()
+        set_target_properties(OpenGL::GLU PROPERTIES
+          IMPORTED_LOCATION "${_glu_fw}")
+      else()
+        set_target_properties(OpenGL::GLU PROPERTIES
+          IMPORTED_LOCATION "${OPENGL_glu_LIBRARY}")
+      endif()
+    else()
+      add_library(OpenGL::GLU INTERFACE IMPORTED)
+      set_target_properties(OpenGL::GLU PROPERTIES
+        IMPORTED_LIBNAME "${OPENGL_glu_LIBRARY}")
+    endif()
+    set_target_properties(OpenGL::GLU PROPERTIES
+      INTERFACE_LINK_LIBRARIES OpenGL::GL)
+  endif()
+
+  # OPENGL_LIBRARIES mirrors OpenGL::GL's logic ...
+  if(OPENGL_gl_LIBRARY)
+    set(OPENGL_LIBRARIES ${OPENGL_gl_LIBRARY})
+  elseif(TARGET OpenGL::OpenGL AND TARGET OpenGL::GLX)
+    set(OPENGL_LIBRARIES ${OPENGL_opengl_LIBRARY} ${OPENGL_glx_LIBRARY})
+  else()
+    set(OPENGL_LIBRARIES "")
+  endif()
+  # ... and also includes GLU, if available.
+  if(TARGET OpenGL::GLU)
+    list(APPEND OPENGL_LIBRARIES ${OPENGL_glu_LIBRARY})
+  endif()
+endif()
+
+# This deprecated setting is for backward compatibility with CMake1.4
+set(OPENGL_LIBRARY ${OPENGL_LIBRARIES})
+# This deprecated setting is for backward compatibility with CMake1.4
+set(OPENGL_INCLUDE_PATH ${OPENGL_INCLUDE_DIR})
+
+mark_as_advanced(${_OpenGL_CACHE_VARS})
+unset(_OpenGL_CACHE_VARS)
diff --git a/share/cmake-3.22/Modules/FindOpenMP.cmake b/share/cmake-3.22/Modules/FindOpenMP.cmake
new file mode 100644
index 0000000..929a809
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindOpenMP.cmake
@@ -0,0 +1,624 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindOpenMP
+----------
+
+Finds Open Multi-Processing (OpenMP) support.
+
+This module can be used to detect OpenMP support in a compiler.  If
+the compiler supports OpenMP, the flags required to compile with
+OpenMP support are returned in variables for the different languages.
+The variables may be empty if the compiler does not need a special
+flag to support OpenMP.
+
+.. versionadded:: 3.5
+  Clang support.
+
+Variables
+^^^^^^^^^
+
+.. versionadded:: 3.10
+  The module exposes the components ``C``, ``CXX``, and ``Fortran``.
+  Each of these controls the various languages to search OpenMP support for.
+
+Depending on the enabled components the following variables will be set:
+
+``OpenMP_FOUND``
+  Variable indicating that OpenMP flags for all requested languages have been found.
+  If no components are specified, this is true if OpenMP settings for all enabled languages
+  were detected.
+``OpenMP_VERSION``
+  Minimal version of the OpenMP standard detected among the requested languages,
+  or all enabled languages if no components were specified.
+
+This module will set the following variables per language in your
+project, where ``<lang>`` is one of C, CXX, or Fortran:
+
+``OpenMP_<lang>_FOUND``
+  Variable indicating if OpenMP support for ``<lang>`` was detected.
+``OpenMP_<lang>_FLAGS``
+  OpenMP compiler flags for ``<lang>``, separated by spaces.
+``OpenMP_<lang>_INCLUDE_DIRS``
+  Directories that must be added to the header search path for ``<lang>``
+  when using OpenMP.
+
+For linking with OpenMP code written in ``<lang>``, the following
+variables are provided:
+
+``OpenMP_<lang>_LIB_NAMES``
+  :ref:`;-list <CMake Language Lists>` of libraries for OpenMP programs for ``<lang>``.
+``OpenMP_<libname>_LIBRARY``
+  Location of the individual libraries needed for OpenMP support in ``<lang>``.
+``OpenMP_<lang>_LIBRARIES``
+  A list of libraries needed to link with OpenMP code written in ``<lang>``.
+
+Additionally, the module provides :prop_tgt:`IMPORTED` targets:
+
+``OpenMP::OpenMP_<lang>``
+  Target for using OpenMP from ``<lang>``.
+
+Specifically for Fortran, the module sets the following variables:
+
+``OpenMP_Fortran_HAVE_OMPLIB_HEADER``
+  Boolean indicating if OpenMP is accessible through ``omp_lib.h``.
+``OpenMP_Fortran_HAVE_OMPLIB_MODULE``
+  Boolean indicating if OpenMP is accessible through the ``omp_lib`` Fortran module.
+
+The module will also try to provide the OpenMP version variables:
+
+``OpenMP_<lang>_SPEC_DATE``
+  .. versionadded:: 3.7
+
+  Date of the OpenMP specification implemented by the ``<lang>`` compiler.
+``OpenMP_<lang>_VERSION_MAJOR``
+  Major version of OpenMP implemented by the ``<lang>`` compiler.
+``OpenMP_<lang>_VERSION_MINOR``
+  Minor version of OpenMP implemented by the ``<lang>`` compiler.
+``OpenMP_<lang>_VERSION``
+  OpenMP version implemented by the ``<lang>`` compiler.
+
+The specification date is formatted as given in the OpenMP standard:
+``yyyymm`` where ``yyyy`` and ``mm`` represents the year and month of
+the OpenMP specification implemented by the ``<lang>`` compiler.
+
+For some compilers, it may be necessary to add a header search path to find
+the relevant OpenMP headers.  This location may be language-specific.  Where
+this is needed, the module may attempt to find the location, but it can be
+provided directly by setting the ``OpenMP_<lang>_INCLUDE_DIR`` cache variable.
+Note that this variable is an _input_ control to the module.  Project code
+should use the ``OpenMP_<lang>_INCLUDE_DIRS`` _output_ variable if it needs
+to know what include directories are needed.
+#]=======================================================================]
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0012 NEW) # if() recognizes numbers and booleans
+cmake_policy(SET CMP0054 NEW) # if() quoted variables not dereferenced
+cmake_policy(SET CMP0057 NEW) # if IN_LIST
+
+function(_OPENMP_FLAG_CANDIDATES LANG)
+  if(NOT OpenMP_${LANG}_FLAG)
+    unset(OpenMP_FLAG_CANDIDATES)
+
+    set(OMP_FLAG_GNU "-fopenmp")
+    set(OMP_FLAG_Clang "-fopenmp=libomp" "-fopenmp=libiomp5" "-fopenmp" "-Xclang -fopenmp")
+    set(OMP_FLAG_AppleClang "-Xclang -fopenmp")
+    set(OMP_FLAG_HP "+Oopenmp")
+    if(WIN32)
+      set(OMP_FLAG_Intel "-Qopenmp")
+    elseif(CMAKE_${LANG}_COMPILER_ID STREQUAL "Intel" AND
+           "${CMAKE_${LANG}_COMPILER_VERSION}" VERSION_LESS "15.0.0.20140528")
+      set(OMP_FLAG_Intel "-openmp")
+    else()
+      set(OMP_FLAG_Intel "-qopenmp")
+    endif()
+    if(CMAKE_${LANG}_COMPILER_ID STREQUAL "IntelLLVM" AND
+      "x${CMAKE_${LANG}_COMPILER_FRONTEND_VARIANT}" STREQUAL "xMSVC")
+      set(OMP_FLAG_IntelLLVM "-Qiopenmp")
+    else()
+      set(OMP_FLAG_IntelLLVM "-fiopenmp")
+    endif()
+    set(OMP_FLAG_MSVC "-openmp")
+    set(OMP_FLAG_PathScale "-openmp")
+    set(OMP_FLAG_NAG "-openmp")
+    set(OMP_FLAG_Absoft "-openmp")
+    set(OMP_FLAG_NVHPC "-mp")
+    set(OMP_FLAG_PGI "-mp")
+    set(OMP_FLAG_Flang "-fopenmp")
+    set(OMP_FLAG_SunPro "-xopenmp")
+    set(OMP_FLAG_XL "-qsmp=omp")
+    # Cray compiler activate OpenMP with -h omp, which is enabled by default.
+    set(OMP_FLAG_Cray " " "-h omp")
+    set(OMP_FLAG_Fujitsu "-Kopenmp" "-KOMP")
+    set(OMP_FLAG_FujitsuClang "-fopenmp" "-Kopenmp")
+
+    # If we know the correct flags, use those
+    if(DEFINED OMP_FLAG_${CMAKE_${LANG}_COMPILER_ID})
+      set(OpenMP_FLAG_CANDIDATES "${OMP_FLAG_${CMAKE_${LANG}_COMPILER_ID}}")
+    # Fall back to reasonable default tries otherwise
+    else()
+      set(OpenMP_FLAG_CANDIDATES "-openmp" "-fopenmp" "-mp" " ")
+    endif()
+    set(OpenMP_${LANG}_FLAG_CANDIDATES "${OpenMP_FLAG_CANDIDATES}" PARENT_SCOPE)
+  else()
+    set(OpenMP_${LANG}_FLAG_CANDIDATES "${OpenMP_${LANG}_FLAG}" PARENT_SCOPE)
+  endif()
+endfunction()
+
+# sample openmp source code to test
+set(OpenMP_C_CXX_TEST_SOURCE
+"
+#include <omp.h>
+int main(void) {
+#ifdef _OPENMP
+  omp_get_max_threads();
+  return 0;
+#elif defined(__HIP_DEVICE_COMPILE__)
+  return 0;
+#else
+  breaks_on_purpose
+#endif
+}
+")
+
+# in Fortran, an implementation may provide an omp_lib.h header
+# or omp_lib module, or both (OpenMP standard, section 3.1)
+# Furthmore !$ is the Fortran equivalent of #ifdef _OPENMP (OpenMP standard, 2.2.2)
+# Without the conditional compilation, some compilers (e.g. PGI) might compile OpenMP code
+# while not actually enabling OpenMP, building code sequentially
+set(OpenMP_Fortran_TEST_SOURCE
+  "
+      program test
+      @OpenMP_Fortran_INCLUDE_LINE@
+  !$  integer :: n
+      n = omp_get_num_threads()
+      end program test
+  "
+)
+
+function(_OPENMP_WRITE_SOURCE_FILE LANG SRC_FILE_CONTENT_VAR SRC_FILE_NAME SRC_FILE_FULLPATH)
+  set(WORK_DIR ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/FindOpenMP)
+  if("${LANG}" STREQUAL "C")
+    set(SRC_FILE "${WORK_DIR}/${SRC_FILE_NAME}.c")
+    file(WRITE "${SRC_FILE}" "${OpenMP_C_CXX_${SRC_FILE_CONTENT_VAR}}")
+  elseif("${LANG}" STREQUAL "CXX")
+    set(SRC_FILE "${WORK_DIR}/${SRC_FILE_NAME}.cpp")
+    file(WRITE "${SRC_FILE}" "${OpenMP_C_CXX_${SRC_FILE_CONTENT_VAR}}")
+  elseif("${LANG}" STREQUAL "Fortran")
+    set(SRC_FILE "${WORK_DIR}/${SRC_FILE_NAME}.f90")
+    file(WRITE "${SRC_FILE}_in" "${OpenMP_Fortran_${SRC_FILE_CONTENT_VAR}}")
+    configure_file("${SRC_FILE}_in" "${SRC_FILE}" @ONLY)
+  endif()
+  set(${SRC_FILE_FULLPATH} "${SRC_FILE}" PARENT_SCOPE)
+endfunction()
+
+include(${CMAKE_CURRENT_LIST_DIR}/CMakeParseImplicitLinkInfo.cmake)
+
+function(_OPENMP_GET_FLAGS LANG FLAG_MODE OPENMP_FLAG_VAR OPENMP_LIB_NAMES_VAR)
+  _OPENMP_FLAG_CANDIDATES("${LANG}")
+  _OPENMP_WRITE_SOURCE_FILE("${LANG}" "TEST_SOURCE" OpenMPTryFlag _OPENMP_TEST_SRC)
+
+  unset(OpenMP_VERBOSE_COMPILE_OPTIONS)
+  separate_arguments(OpenMP_VERBOSE_OPTIONS NATIVE_COMMAND "${CMAKE_${LANG}_VERBOSE_FLAG}")
+  foreach(_VERBOSE_OPTION IN LISTS OpenMP_VERBOSE_OPTIONS)
+    if(NOT _VERBOSE_OPTION MATCHES "^-Wl,")
+      list(APPEND OpenMP_VERBOSE_COMPILE_OPTIONS ${_VERBOSE_OPTION})
+    endif()
+  endforeach()
+
+  foreach(OPENMP_FLAG IN LISTS OpenMP_${LANG}_FLAG_CANDIDATES)
+    set(OPENMP_FLAGS_TEST "${OPENMP_FLAG}")
+    if(OpenMP_VERBOSE_COMPILE_OPTIONS)
+      string(APPEND OPENMP_FLAGS_TEST " ${OpenMP_VERBOSE_COMPILE_OPTIONS}")
+    endif()
+    string(REGEX REPLACE "[-/=+]" "" OPENMP_PLAIN_FLAG "${OPENMP_FLAG}")
+    try_compile( OpenMP_COMPILE_RESULT_${FLAG_MODE}_${OPENMP_PLAIN_FLAG} ${CMAKE_BINARY_DIR} ${_OPENMP_TEST_SRC}
+      CMAKE_FLAGS "-DCOMPILE_DEFINITIONS:STRING=${OPENMP_FLAGS_TEST}"
+      LINK_LIBRARIES ${CMAKE_${LANG}_VERBOSE_FLAG}
+      OUTPUT_VARIABLE OpenMP_TRY_COMPILE_OUTPUT
+    )
+
+    if(OpenMP_COMPILE_RESULT_${FLAG_MODE}_${OPENMP_PLAIN_FLAG})
+      set("${OPENMP_FLAG_VAR}" "${OPENMP_FLAG}" PARENT_SCOPE)
+
+      if(CMAKE_${LANG}_VERBOSE_FLAG)
+        unset(OpenMP_${LANG}_IMPLICIT_LIBRARIES)
+        unset(OpenMP_${LANG}_IMPLICIT_LINK_DIRS)
+        unset(OpenMP_${LANG}_IMPLICIT_FWK_DIRS)
+        unset(OpenMP_${LANG}_LOG_VAR)
+
+        file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+        "Detecting ${LANG} OpenMP compiler ABI info compiled with the following output:\n${OpenMP_TRY_COMPILE_OUTPUT}\n\n")
+
+        cmake_parse_implicit_link_info("${OpenMP_TRY_COMPILE_OUTPUT}"
+          OpenMP_${LANG}_IMPLICIT_LIBRARIES
+          OpenMP_${LANG}_IMPLICIT_LINK_DIRS
+          OpenMP_${LANG}_IMPLICIT_FWK_DIRS
+          OpenMP_${LANG}_LOG_VAR
+          "${CMAKE_${LANG}_IMPLICIT_OBJECT_REGEX}"
+        )
+
+        file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+        "Parsed ${LANG} OpenMP implicit link information from above output:\n${OpenMP_${LANG}_LOG_VAR}\n\n")
+
+        unset(_OPENMP_LIB_NAMES)
+        foreach(_OPENMP_IMPLICIT_LIB IN LISTS OpenMP_${LANG}_IMPLICIT_LIBRARIES)
+          get_filename_component(_OPENMP_IMPLICIT_LIB_DIR "${_OPENMP_IMPLICIT_LIB}" DIRECTORY)
+          get_filename_component(_OPENMP_IMPLICIT_LIB_NAME "${_OPENMP_IMPLICIT_LIB}" NAME)
+          get_filename_component(_OPENMP_IMPLICIT_LIB_PLAIN "${_OPENMP_IMPLICIT_LIB}" NAME_WE)
+          string(REGEX REPLACE "([][+.*?()^$])" "\\\\\\1" _OPENMP_IMPLICIT_LIB_PLAIN_ESC "${_OPENMP_IMPLICIT_LIB_PLAIN}")
+          string(REGEX REPLACE "([][+.*?()^$])" "\\\\\\1" _OPENMP_IMPLICIT_LIB_PATH_ESC "${_OPENMP_IMPLICIT_LIB}")
+          if(NOT ( "${_OPENMP_IMPLICIT_LIB}" IN_LIST CMAKE_${LANG}_IMPLICIT_LINK_LIBRARIES
+            OR "${CMAKE_${LANG}_STANDARD_LIBRARIES}" MATCHES "(^| )(-Wl,)?(-l)?(${_OPENMP_IMPLICIT_LIB_PLAIN_ESC}|${_OPENMP_IMPLICIT_LIB_PATH_ESC})( |$)"
+            OR "${CMAKE_${LANG}_LINK_EXECUTABLE}" MATCHES "(^| )(-Wl,)?(-l)?(${_OPENMP_IMPLICIT_LIB_PLAIN_ESC}|${_OPENMP_IMPLICIT_LIB_PATH_ESC})( |$)" ) )
+            if(_OPENMP_IMPLICIT_LIB_DIR)
+              set(OpenMP_${_OPENMP_IMPLICIT_LIB_PLAIN}_LIBRARY "${_OPENMP_IMPLICIT_LIB}" CACHE FILEPATH
+                "Path to the ${_OPENMP_IMPLICIT_LIB_PLAIN} library for OpenMP")
+            else()
+              find_library(OpenMP_${_OPENMP_IMPLICIT_LIB_PLAIN}_LIBRARY
+                NAMES "${_OPENMP_IMPLICIT_LIB_NAME}"
+                DOC "Path to the ${_OPENMP_IMPLICIT_LIB_PLAIN} library for OpenMP"
+                HINTS ${OpenMP_${LANG}_IMPLICIT_LINK_DIRS}
+                CMAKE_FIND_ROOT_PATH_BOTH
+                NO_DEFAULT_PATH
+              )
+            endif()
+            mark_as_advanced(OpenMP_${_OPENMP_IMPLICIT_LIB_PLAIN}_LIBRARY)
+            list(APPEND _OPENMP_LIB_NAMES ${_OPENMP_IMPLICIT_LIB_PLAIN})
+          endif()
+        endforeach()
+        set("${OPENMP_LIB_NAMES_VAR}" "${_OPENMP_LIB_NAMES}" PARENT_SCOPE)
+      else()
+        # We do not know how to extract implicit OpenMP libraries for this compiler.
+        # Assume that it handles them automatically, e.g. the Intel Compiler on
+        # Windows should put the dependency in its object files.
+        set("${OPENMP_LIB_NAMES_VAR}" "" PARENT_SCOPE)
+      endif()
+      break()
+    elseif(CMAKE_${LANG}_COMPILER_ID STREQUAL "AppleClang"
+      AND CMAKE_${LANG}_COMPILER_VERSION VERSION_GREATER_EQUAL "7.0")
+
+      # Check for separate OpenMP library on AppleClang 7+
+      find_library(OpenMP_libomp_LIBRARY
+        NAMES omp gomp iomp5
+        HINTS ${CMAKE_${LANG}_IMPLICIT_LINK_DIRECTORIES}
+      )
+      mark_as_advanced(OpenMP_libomp_LIBRARY)
+
+      if(OpenMP_libomp_LIBRARY)
+        # Try without specifying include directory first. We only want to
+        # explicitly add a search path if the header can't be found on the
+        # default header search path already.
+        try_compile( OpenMP_COMPILE_RESULT_${FLAG_MODE}_${OPENMP_PLAIN_FLAG} ${CMAKE_BINARY_DIR} ${_OPENMP_TEST_SRC}
+          CMAKE_FLAGS "-DCOMPILE_DEFINITIONS:STRING=${OPENMP_FLAGS_TEST}"
+          LINK_LIBRARIES ${CMAKE_${LANG}_VERBOSE_FLAG} ${OpenMP_libomp_LIBRARY}
+          OUTPUT_VARIABLE OpenMP_TRY_COMPILE_OUTPUT
+        )
+        if(NOT OpenMP_COMPILE_RESULT_${FLAG_MODE}_${OPENMP_PLAIN_FLAG})
+          find_path(OpenMP_${LANG}_INCLUDE_DIR omp.h)
+          mark_as_advanced(OpenMP_${LANG}_INCLUDE_DIR)
+          set(OpenMP_${LANG}_INCLUDE_DIR "${OpenMP_${LANG}_INCLUDE_DIR}" PARENT_SCOPE)
+          if(OpenMP_${LANG}_INCLUDE_DIR)
+            try_compile( OpenMP_COMPILE_RESULT_${FLAG_MODE}_${OPENMP_PLAIN_FLAG} ${CMAKE_BINARY_DIR} ${_OPENMP_TEST_SRC}
+              CMAKE_FLAGS "-DCOMPILE_DEFINITIONS:STRING=${OPENMP_FLAGS_TEST}"
+                          "-DINCLUDE_DIRECTORIES:STRING=${OpenMP_${LANG}_INCLUDE_DIR}"
+              LINK_LIBRARIES ${CMAKE_${LANG}_VERBOSE_FLAG} ${OpenMP_libomp_LIBRARY}
+              OUTPUT_VARIABLE OpenMP_TRY_COMPILE_OUTPUT
+            )
+          endif()
+        endif()
+        if(OpenMP_COMPILE_RESULT_${FLAG_MODE}_${OPENMP_PLAIN_FLAG})
+          set("${OPENMP_FLAG_VAR}" "${OPENMP_FLAG}" PARENT_SCOPE)
+          set("${OPENMP_LIB_NAMES_VAR}" "libomp" PARENT_SCOPE)
+          break()
+        endif()
+      endif()
+    elseif(CMAKE_${LANG}_COMPILER_ID STREQUAL "Clang" AND WIN32)
+      # Check for separate OpenMP library for Clang on Windows
+      find_library(OpenMP_libomp_LIBRARY
+        NAMES libomp libgomp libiomp5
+        HINTS ${CMAKE_${LANG}_IMPLICIT_LINK_DIRECTORIES}
+      )
+      mark_as_advanced(OpenMP_libomp_LIBRARY)
+      if(OpenMP_libomp_LIBRARY)
+        try_compile( OpenMP_COMPILE_RESULT_${FLAG_MODE}_${OPENMP_PLAIN_FLAG} ${CMAKE_BINARY_DIR} ${_OPENMP_TEST_SRC}
+          CMAKE_FLAGS "-DCOMPILE_DEFINITIONS:STRING=${OPENMP_FLAGS_TEST}"
+          LINK_LIBRARIES ${CMAKE_${LANG}_VERBOSE_FLAG} ${OpenMP_libomp_LIBRARY}
+          OUTPUT_VARIABLE OpenMP_TRY_COMPILE_OUTPUT
+        )
+        if(OpenMP_COMPILE_RESULT_${FLAG_MODE}_${OPENMP_PLAIN_FLAG})
+          set("${OPENMP_FLAG_VAR}" "${OPENMP_FLAG}" PARENT_SCOPE)
+          set("${OPENMP_LIB_NAMES_VAR}" "libomp" PARENT_SCOPE)
+          break()
+        endif()
+      endif()
+    else()
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+        "Detecting ${LANG} OpenMP failed with the following output:\n${OpenMP_TRY_COMPILE_OUTPUT}\n\n")
+    endif()
+    set("${OPENMP_LIB_NAMES_VAR}" "NOTFOUND" PARENT_SCOPE)
+    set("${OPENMP_FLAG_VAR}" "NOTFOUND" PARENT_SCOPE)
+  endforeach()
+
+  unset(OpenMP_VERBOSE_COMPILE_OPTIONS)
+endfunction()
+
+set(OpenMP_C_CXX_CHECK_VERSION_SOURCE
+"
+#include <stdio.h>
+#include <omp.h>
+const char ompver_str[] = { 'I', 'N', 'F', 'O', ':', 'O', 'p', 'e', 'n', 'M',
+                            'P', '-', 'd', 'a', 't', 'e', '[',
+                            ('0' + ((_OPENMP/100000)%10)),
+                            ('0' + ((_OPENMP/10000)%10)),
+                            ('0' + ((_OPENMP/1000)%10)),
+                            ('0' + ((_OPENMP/100)%10)),
+                            ('0' + ((_OPENMP/10)%10)),
+                            ('0' + ((_OPENMP/1)%10)),
+                            ']', '\\0' };
+int main(void)
+{
+  puts(ompver_str);
+  return 0;
+}
+")
+
+set(OpenMP_Fortran_CHECK_VERSION_SOURCE
+"
+      program omp_ver
+      @OpenMP_Fortran_INCLUDE_LINE@
+      integer, parameter :: zero = ichar('0')
+      integer, parameter :: ompv = openmp_version
+      character, dimension(24), parameter :: ompver_str =&
+      (/ 'I', 'N', 'F', 'O', ':', 'O', 'p', 'e', 'n', 'M', 'P', '-',&
+         'd', 'a', 't', 'e', '[',&
+         char(zero + mod(ompv/100000, 10)),&
+         char(zero + mod(ompv/10000, 10)),&
+         char(zero + mod(ompv/1000, 10)),&
+         char(zero + mod(ompv/100, 10)),&
+         char(zero + mod(ompv/10, 10)),&
+         char(zero + mod(ompv/1, 10)), ']' /)
+      print *, ompver_str
+      end program omp_ver
+")
+
+function(_OPENMP_GET_SPEC_DATE LANG SPEC_DATE)
+  _OPENMP_WRITE_SOURCE_FILE("${LANG}" "CHECK_VERSION_SOURCE" OpenMPCheckVersion _OPENMP_TEST_SRC)
+
+  unset(_includeDirFlags)
+  if(OpenMP_${LANG}_INCLUDE_DIR)
+    set(_includeDirFlags "-DINCLUDE_DIRECTORIES:STRING=${OpenMP_${LANG}_INCLUDE_DIR}")
+  endif()
+
+  set(BIN_FILE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/FindOpenMP/ompver_${LANG}.bin")
+  string(REGEX REPLACE "[-/=+]" "" OPENMP_PLAIN_FLAG "${OPENMP_FLAG}")
+  try_compile(OpenMP_SPECTEST_${LANG}_${OPENMP_PLAIN_FLAG} "${CMAKE_BINARY_DIR}" "${_OPENMP_TEST_SRC}"
+              CMAKE_FLAGS "-DCOMPILE_DEFINITIONS:STRING=${OpenMP_${LANG}_FLAGS}" ${_includeDirFlags}
+              COPY_FILE ${BIN_FILE}
+              OUTPUT_VARIABLE OpenMP_TRY_COMPILE_OUTPUT)
+
+  if(${OpenMP_SPECTEST_${LANG}_${OPENMP_PLAIN_FLAG}})
+    file(STRINGS ${BIN_FILE} specstr LIMIT_COUNT 1 REGEX "INFO:OpenMP-date")
+    set(regex_spec_date ".*INFO:OpenMP-date\\[0*([^]]*)\\].*")
+    if("${specstr}" MATCHES "${regex_spec_date}")
+      set(${SPEC_DATE} "${CMAKE_MATCH_1}" PARENT_SCOPE)
+    endif()
+  else()
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+        "Detecting ${LANG} OpenMP version failed with the following output:\n${OpenMP_TRY_COMPILE_OUTPUT}\n\n")
+  endif()
+endfunction()
+
+macro(_OPENMP_SET_VERSION_BY_SPEC_DATE LANG)
+  set(OpenMP_SPEC_DATE_MAP
+    # Preview versions
+    "201611=5.0" # OpenMP 5.0 preview 1
+    # Combined versions, 2.5 onwards
+    "201811=5.0"
+    "201511=4.5"
+    "201307=4.0"
+    "201107=3.1"
+    "200805=3.0"
+    "200505=2.5"
+    # C/C++ version 2.0
+    "200203=2.0"
+    # Fortran version 2.0
+    "200011=2.0"
+    # Fortran version 1.1
+    "199911=1.1"
+    # C/C++ version 1.0 (there's no 1.1 for C/C++)
+    "199810=1.0"
+    # Fortran version 1.0
+    "199710=1.0"
+  )
+  if(MSVC)
+    list(APPEND OpenMP_SPEC_DATE_MAP "2019=2.0")
+  endif()
+
+  if(OpenMP_${LANG}_SPEC_DATE)
+    string(REGEX MATCHALL "${OpenMP_${LANG}_SPEC_DATE}=([0-9]+)\\.([0-9]+)" _version_match "${OpenMP_SPEC_DATE_MAP}")
+  else()
+    set(_version_match "")
+  endif()
+  if(NOT _version_match STREQUAL "")
+    set(OpenMP_${LANG}_VERSION_MAJOR ${CMAKE_MATCH_1})
+    set(OpenMP_${LANG}_VERSION_MINOR ${CMAKE_MATCH_2})
+    set(OpenMP_${LANG}_VERSION "${OpenMP_${LANG}_VERSION_MAJOR}.${OpenMP_${LANG}_VERSION_MINOR}")
+  else()
+    unset(OpenMP_${LANG}_VERSION_MAJOR)
+    unset(OpenMP_${LANG}_VERSION_MINOR)
+    unset(OpenMP_${LANG}_VERSION)
+  endif()
+  unset(_version_match)
+  unset(OpenMP_SPEC_DATE_MAP)
+endmacro()
+
+foreach(LANG IN ITEMS C CXX)
+  if(CMAKE_${LANG}_COMPILER_LOADED)
+    if(NOT DEFINED OpenMP_${LANG}_FLAGS OR "${OpenMP_${LANG}_FLAGS}" STREQUAL "NOTFOUND"
+      OR NOT DEFINED OpenMP_${LANG}_LIB_NAMES OR "${OpenMP_${LANG}_LIB_NAMES}" STREQUAL "NOTFOUND")
+      _OPENMP_GET_FLAGS("${LANG}" "${LANG}" OpenMP_${LANG}_FLAGS_WORK OpenMP_${LANG}_LIB_NAMES_WORK)
+      set(OpenMP_${LANG}_FLAGS "${OpenMP_${LANG}_FLAGS_WORK}"
+        CACHE STRING "${LANG} compiler flags for OpenMP parallelization" FORCE)
+      set(OpenMP_${LANG}_LIB_NAMES "${OpenMP_${LANG}_LIB_NAMES_WORK}"
+        CACHE STRING "${LANG} compiler libraries for OpenMP parallelization" FORCE)
+      mark_as_advanced(OpenMP_${LANG}_FLAGS OpenMP_${LANG}_LIB_NAMES)
+    endif()
+  endif()
+endforeach()
+
+if(CMAKE_Fortran_COMPILER_LOADED)
+  if(NOT DEFINED OpenMP_Fortran_FLAGS OR "${OpenMP_Fortran_FLAGS}" STREQUAL "NOTFOUND"
+    OR NOT DEFINED OpenMP_Fortran_LIB_NAMES OR "${OpenMP_Fortran_LIB_NAMES}" STREQUAL "NOTFOUND"
+    OR NOT DEFINED OpenMP_Fortran_HAVE_OMPLIB_MODULE)
+    set(OpenMP_Fortran_INCLUDE_LINE "use omp_lib\n      implicit none")
+    _OPENMP_GET_FLAGS("Fortran" "FortranHeader" OpenMP_Fortran_FLAGS_WORK OpenMP_Fortran_LIB_NAMES_WORK)
+    if(OpenMP_Fortran_FLAGS_WORK)
+      set(OpenMP_Fortran_HAVE_OMPLIB_MODULE TRUE CACHE BOOL INTERNAL "")
+    endif()
+
+    set(OpenMP_Fortran_FLAGS "${OpenMP_Fortran_FLAGS_WORK}"
+      CACHE STRING "Fortran compiler flags for OpenMP parallelization")
+    set(OpenMP_Fortran_LIB_NAMES "${OpenMP_Fortran_LIB_NAMES_WORK}"
+      CACHE STRING "Fortran compiler libraries for OpenMP parallelization")
+    mark_as_advanced(OpenMP_Fortran_FLAGS OpenMP_Fortran_LIB_NAMES)
+  endif()
+
+  if(NOT DEFINED OpenMP_Fortran_FLAGS OR "${OpenMP_Fortran_FLAGS}" STREQUAL "NOTFOUND"
+    OR NOT DEFINED OpenMP_Fortran_LIB_NAMES OR "${OpenMP_Fortran_LIB_NAMES}" STREQUAL "NOTFOUND"
+    OR NOT DEFINED OpenMP_Fortran_HAVE_OMPLIB_HEADER)
+    set(OpenMP_Fortran_INCLUDE_LINE "implicit none\n      include 'omp_lib.h'")
+    _OPENMP_GET_FLAGS("Fortran" "FortranModule" OpenMP_Fortran_FLAGS_WORK OpenMP_Fortran_LIB_NAMES_WORK)
+    if(OpenMP_Fortran_FLAGS_WORK)
+      set(OpenMP_Fortran_HAVE_OMPLIB_HEADER TRUE CACHE BOOL INTERNAL "")
+    endif()
+
+    set(OpenMP_Fortran_FLAGS "${OpenMP_Fortran_FLAGS_WORK}"
+      CACHE STRING "Fortran compiler flags for OpenMP parallelization")
+
+    set(OpenMP_Fortran_LIB_NAMES "${OpenMP_Fortran_LIB_NAMES}"
+      CACHE STRING "Fortran compiler libraries for OpenMP parallelization")
+  endif()
+
+  if(OpenMP_Fortran_HAVE_OMPLIB_MODULE)
+    set(OpenMP_Fortran_INCLUDE_LINE "use omp_lib\n      implicit none")
+  else()
+    set(OpenMP_Fortran_INCLUDE_LINE "implicit none\n      include 'omp_lib.h'")
+  endif()
+endif()
+
+if(NOT OpenMP_FIND_COMPONENTS)
+  set(OpenMP_FINDLIST C CXX Fortran)
+else()
+  set(OpenMP_FINDLIST ${OpenMP_FIND_COMPONENTS})
+endif()
+
+unset(_OpenMP_MIN_VERSION)
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+
+foreach(LANG IN LISTS OpenMP_FINDLIST)
+  if(CMAKE_${LANG}_COMPILER_LOADED)
+    if (NOT OpenMP_${LANG}_SPEC_DATE AND OpenMP_${LANG}_FLAGS)
+      _OPENMP_GET_SPEC_DATE("${LANG}" OpenMP_${LANG}_SPEC_DATE_INTERNAL)
+      set(OpenMP_${LANG}_SPEC_DATE "${OpenMP_${LANG}_SPEC_DATE_INTERNAL}" CACHE
+        INTERNAL "${LANG} compiler's OpenMP specification date")
+    endif()
+    _OPENMP_SET_VERSION_BY_SPEC_DATE("${LANG}")
+
+    set(OpenMP_${LANG}_FIND_QUIETLY ${OpenMP_FIND_QUIETLY})
+    set(OpenMP_${LANG}_FIND_REQUIRED ${OpenMP_FIND_REQUIRED})
+    set(OpenMP_${LANG}_FIND_VERSION ${OpenMP_FIND_VERSION})
+    set(OpenMP_${LANG}_FIND_VERSION_EXACT ${OpenMP_FIND_VERSION_EXACT})
+
+    set(_OPENMP_${LANG}_REQUIRED_VARS OpenMP_${LANG}_FLAGS)
+    if("${OpenMP_${LANG}_LIB_NAMES}" STREQUAL "NOTFOUND")
+      set(_OPENMP_${LANG}_REQUIRED_LIB_VARS OpenMP_${LANG}_LIB_NAMES)
+    else()
+      foreach(_OPENMP_IMPLICIT_LIB IN LISTS OpenMP_${LANG}_LIB_NAMES)
+        list(APPEND _OPENMP_${LANG}_REQUIRED_LIB_VARS OpenMP_${_OPENMP_IMPLICIT_LIB}_LIBRARY)
+      endforeach()
+    endif()
+
+    find_package_handle_standard_args(OpenMP_${LANG}
+      NAME_MISMATCHED
+      REQUIRED_VARS OpenMP_${LANG}_FLAGS ${_OPENMP_${LANG}_REQUIRED_LIB_VARS}
+      VERSION_VAR OpenMP_${LANG}_VERSION
+    )
+
+    if(OpenMP_${LANG}_FOUND)
+      if(DEFINED OpenMP_${LANG}_VERSION)
+        if(NOT _OpenMP_MIN_VERSION OR _OpenMP_MIN_VERSION VERSION_GREATER OpenMP_${LANG}_VERSION)
+          set(_OpenMP_MIN_VERSION OpenMP_${LANG}_VERSION)
+        endif()
+      endif()
+      set(OpenMP_${LANG}_LIBRARIES "")
+      foreach(_OPENMP_IMPLICIT_LIB IN LISTS OpenMP_${LANG}_LIB_NAMES)
+        list(APPEND OpenMP_${LANG}_LIBRARIES "${OpenMP_${_OPENMP_IMPLICIT_LIB}_LIBRARY}")
+      endforeach()
+      if(OpenMP_${LANG}_INCLUDE_DIR)
+        set(OpenMP_${LANG}_INCLUDE_DIRS ${OpenMP_${LANG}_INCLUDE_DIR})
+      else()
+        set(OpenMP_${LANG}_INCLUDE_DIRS "")
+      endif()
+
+      if(NOT TARGET OpenMP::OpenMP_${LANG})
+        add_library(OpenMP::OpenMP_${LANG} INTERFACE IMPORTED)
+      endif()
+      if(OpenMP_${LANG}_FLAGS)
+        separate_arguments(_OpenMP_${LANG}_OPTIONS NATIVE_COMMAND "${OpenMP_${LANG}_FLAGS}")
+        set_property(TARGET OpenMP::OpenMP_${LANG} PROPERTY
+          INTERFACE_COMPILE_OPTIONS "$<$<COMPILE_LANGUAGE:${LANG}>:${_OpenMP_${LANG}_OPTIONS}>")
+        if(CMAKE_${LANG}_COMPILER_ID STREQUAL "Fujitsu")
+          set_property(TARGET OpenMP::OpenMP_${LANG} PROPERTY
+            INTERFACE_LINK_OPTIONS "${OpenMP_${LANG}_FLAGS}")
+        endif()
+        unset(_OpenMP_${LANG}_OPTIONS)
+      endif()
+      if(OpenMP_${LANG}_INCLUDE_DIRS)
+        set_property(TARGET OpenMP::OpenMP_${LANG} PROPERTY
+          INTERFACE_INCLUDE_DIRECTORIES "$<BUILD_INTERFACE:${OpenMP_${LANG}_INCLUDE_DIRS}>")
+      endif()
+      if(OpenMP_${LANG}_LIBRARIES)
+        set_property(TARGET OpenMP::OpenMP_${LANG} PROPERTY
+          INTERFACE_LINK_LIBRARIES "${OpenMP_${LANG}_LIBRARIES}")
+      endif()
+    endif()
+  endif()
+endforeach()
+
+unset(_OpenMP_REQ_VARS)
+foreach(LANG IN ITEMS C CXX Fortran)
+  if((NOT OpenMP_FIND_COMPONENTS AND CMAKE_${LANG}_COMPILER_LOADED) OR LANG IN_LIST OpenMP_FIND_COMPONENTS)
+    list(APPEND _OpenMP_REQ_VARS "OpenMP_${LANG}_FOUND")
+  endif()
+endforeach()
+
+find_package_handle_standard_args(OpenMP
+    REQUIRED_VARS ${_OpenMP_REQ_VARS}
+    VERSION_VAR ${_OpenMP_MIN_VERSION}
+    HANDLE_COMPONENTS)
+
+set(OPENMP_FOUND ${OpenMP_FOUND})
+
+if(CMAKE_Fortran_COMPILER_LOADED AND OpenMP_Fortran_FOUND)
+  if(NOT DEFINED OpenMP_Fortran_HAVE_OMPLIB_MODULE)
+    set(OpenMP_Fortran_HAVE_OMPLIB_MODULE FALSE CACHE BOOL INTERNAL "")
+  endif()
+  if(NOT DEFINED OpenMP_Fortran_HAVE_OMPLIB_HEADER)
+    set(OpenMP_Fortran_HAVE_OMPLIB_HEADER FALSE CACHE BOOL INTERNAL "")
+  endif()
+endif()
+
+if(NOT ( CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED OR CMAKE_Fortran_COMPILER_LOADED ))
+  message(SEND_ERROR "FindOpenMP requires the C, CXX or Fortran languages to be enabled")
+endif()
+
+unset(OpenMP_C_CXX_TEST_SOURCE)
+unset(OpenMP_Fortran_TEST_SOURCE)
+unset(OpenMP_C_CXX_CHECK_VERSION_SOURCE)
+unset(OpenMP_Fortran_CHECK_VERSION_SOURCE)
+unset(OpenMP_Fortran_INCLUDE_LINE)
+
+cmake_policy(POP)
diff --git a/share/cmake-3.22/Modules/FindOpenSSL.cmake b/share/cmake-3.22/Modules/FindOpenSSL.cmake
new file mode 100644
index 0000000..8474e05
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindOpenSSL.cmake
@@ -0,0 +1,679 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindOpenSSL
+-----------
+
+Find the OpenSSL encryption library.
+
+This module finds an installed OpenSSL library and determines its version.
+
+.. versionadded:: 3.19
+  When a version is requested, it can be specified as a simple value or as a
+  range. For a detailed description of version range usage and capabilities,
+  refer to the :command:`find_package` command.
+
+.. versionadded:: 3.18
+  Support for OpenSSL 3.0.
+
+Optional COMPONENTS
+^^^^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.12
+
+This module supports two optional COMPONENTS: ``Crypto`` and ``SSL``.  Both
+components have associated imported targets, as described below.
+
+Imported Targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.4
+
+This module defines the following :prop_tgt:`IMPORTED` targets:
+
+``OpenSSL::SSL``
+  The OpenSSL ``ssl`` library, if found.
+``OpenSSL::Crypto``
+  The OpenSSL ``crypto`` library, if found.
+``OpenSSL::applink``
+  .. versionadded:: 3.18
+
+  The OpenSSL ``applink`` components that might be need to be compiled into
+  projects under MSVC. This target is available only if found OpenSSL version
+  is not less than 0.9.8. By linking this target the above OpenSSL targets can
+  be linked even if the project has different MSVC runtime configurations with
+  the above OpenSSL targets. This target has no effect on platforms other than
+  MSVC.
+
+NOTE: Due to how ``INTERFACE_SOURCES`` are consumed by the consuming target,
+unless you certainly know what you are doing, it is always preferred to link
+``OpenSSL::applink`` target as ``PRIVATE`` and to make sure that this target is
+linked at most once for the whole dependency graph of any library or
+executable:
+
+.. code-block:: cmake
+
+   target_link_libraries(myTarget PRIVATE OpenSSL::applink)
+
+Otherwise you would probably encounter unexpected random problems when building
+and linking, as both the ISO C and the ISO C++ standard claims almost nothing
+about what a link process should be.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This module will set the following variables in your project:
+
+``OPENSSL_FOUND``
+  System has the OpenSSL library. If no components are requested it only
+  requires the crypto library.
+``OPENSSL_INCLUDE_DIR``
+  The OpenSSL include directory.
+``OPENSSL_CRYPTO_LIBRARY``
+  The OpenSSL crypto library.
+``OPENSSL_CRYPTO_LIBRARIES``
+  The OpenSSL crypto library and its dependencies.
+``OPENSSL_SSL_LIBRARY``
+  The OpenSSL SSL library.
+``OPENSSL_SSL_LIBRARIES``
+  The OpenSSL SSL library and its dependencies.
+``OPENSSL_LIBRARIES``
+  All OpenSSL libraries and their dependencies.
+``OPENSSL_VERSION``
+  This is set to ``$major.$minor.$revision$patch`` (e.g. ``0.9.8s``).
+``OPENSSL_APPLINK_SOURCE``
+  The sources in the target ``OpenSSL::applink`` that is mentioned above. This
+  variable shall always be undefined if found openssl version is less than
+  0.9.8 or if platform is not MSVC.
+
+Hints
+^^^^^
+
+Set ``OPENSSL_ROOT_DIR`` to the root directory of an OpenSSL installation.
+
+.. versionadded:: 3.4
+  Set ``OPENSSL_USE_STATIC_LIBS`` to ``TRUE`` to look for static libraries.
+
+.. versionadded:: 3.5
+  Set ``OPENSSL_MSVC_STATIC_RT`` set ``TRUE`` to choose the MT version of the lib.
+#]=======================================================================]
+
+macro(_OpenSSL_test_and_find_dependencies ssl_library crypto_library)
+  if((CMAKE_SYSTEM_NAME STREQUAL "Linux") AND
+     (("${ssl_library}" MATCHES "\\${CMAKE_STATIC_LIBRARY_SUFFIX}$") OR
+      ("${crypto_library}" MATCHES "\\${CMAKE_STATIC_LIBRARY_SUFFIX}$")))
+    set(_OpenSSL_has_dependencies TRUE)
+    find_package(Threads)
+  else()
+    set(_OpenSSL_has_dependencies FALSE)
+  endif()
+endmacro()
+
+function(_OpenSSL_add_dependencies libraries_var)
+  if(CMAKE_THREAD_LIBS_INIT)
+    list(APPEND ${libraries_var} ${CMAKE_THREAD_LIBS_INIT})
+  endif()
+  list(APPEND ${libraries_var} ${CMAKE_DL_LIBS})
+  set(${libraries_var} ${${libraries_var}} PARENT_SCOPE)
+endfunction()
+
+function(_OpenSSL_target_add_dependencies target)
+  if(_OpenSSL_has_dependencies)
+    set_property( TARGET ${target} APPEND PROPERTY INTERFACE_LINK_LIBRARIES Threads::Threads )
+    set_property( TARGET ${target} APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${CMAKE_DL_LIBS} )
+  endif()
+  if(WIN32 AND OPENSSL_USE_STATIC_LIBS)
+    set_property( TARGET ${target} APPEND PROPERTY INTERFACE_LINK_LIBRARIES ws2_32 )
+    set_property( TARGET ${target} APPEND PROPERTY INTERFACE_LINK_LIBRARIES crypt32 )
+  endif()
+endfunction()
+
+if (UNIX)
+  find_package(PkgConfig QUIET)
+  pkg_check_modules(_OPENSSL QUIET openssl)
+endif ()
+
+# Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES
+if(OPENSSL_USE_STATIC_LIBS)
+  set(_openssl_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
+  if(WIN32)
+    set(CMAKE_FIND_LIBRARY_SUFFIXES .lib .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
+  else()
+    set(CMAKE_FIND_LIBRARY_SUFFIXES .a )
+  endif()
+endif()
+
+if (WIN32)
+  # http://www.slproweb.com/products/Win32OpenSSL.html
+  set(_OPENSSL_ROOT_HINTS
+    ${OPENSSL_ROOT_DIR}
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;Inno Setup: App Path]"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (64-bit)_is1;Inno Setup: App Path]"
+    ENV OPENSSL_ROOT_DIR
+    )
+
+  if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
+    set(_arch "Win64")
+    file(TO_CMAKE_PATH "$ENV{PROGRAMFILES}" _programfiles)
+  else()
+    set(_arch "Win32")
+    set(_progfiles_x86 "ProgramFiles(x86)")
+    if(NOT "$ENV{${_progfiles_x86}}" STREQUAL "")
+      # under windows 64 bit machine
+      file(TO_CMAKE_PATH "$ENV{${_progfiles_x86}}" _programfiles)
+    else()
+      # under windows 32 bit machine
+      file(TO_CMAKE_PATH "$ENV{ProgramFiles}" _programfiles)
+    endif()
+  endif()
+
+  set(_OPENSSL_ROOT_PATHS
+    "${_programfiles}/OpenSSL"
+    "${_programfiles}/OpenSSL-${_arch}"
+    "C:/OpenSSL/"
+    "C:/OpenSSL-${_arch}/"
+    )
+  unset(_programfiles)
+  unset(_arch)
+else ()
+  set(_OPENSSL_ROOT_HINTS
+    ${OPENSSL_ROOT_DIR}
+    ENV OPENSSL_ROOT_DIR
+    )
+endif ()
+
+set(_OPENSSL_ROOT_HINTS_AND_PATHS
+    HINTS ${_OPENSSL_ROOT_HINTS}
+    PATHS ${_OPENSSL_ROOT_PATHS}
+    )
+
+find_path(OPENSSL_INCLUDE_DIR
+  NAMES
+    openssl/ssl.h
+  ${_OPENSSL_ROOT_HINTS_AND_PATHS}
+  HINTS
+    ${_OPENSSL_INCLUDEDIR}
+    ${_OPENSSL_INCLUDE_DIRS}
+  PATH_SUFFIXES
+    include
+)
+
+if(WIN32 AND NOT CYGWIN)
+  if(MSVC)
+    # /MD and /MDd are the standard values - if someone wants to use
+    # others, the libnames have to change here too
+    # use also ssl and ssleay32 in debug as fallback for openssl < 0.9.8b
+    # enable OPENSSL_MSVC_STATIC_RT to get the libs build /MT (Multithreaded no-DLL)
+    # In Visual C++ naming convention each of these four kinds of Windows libraries has it's standard suffix:
+    #   * MD for dynamic-release
+    #   * MDd for dynamic-debug
+    #   * MT for static-release
+    #   * MTd for static-debug
+
+    # Implementation details:
+    # We are using the libraries located in the VC subdir instead of the parent directory even though :
+    # libeay32MD.lib is identical to ../libeay32.lib, and
+    # ssleay32MD.lib is identical to ../ssleay32.lib
+    # enable OPENSSL_USE_STATIC_LIBS to use the static libs located in lib/VC/static
+
+    if (OPENSSL_MSVC_STATIC_RT)
+      set(_OPENSSL_MSVC_RT_MODE "MT")
+    else ()
+      set(_OPENSSL_MSVC_RT_MODE "MD")
+    endif ()
+
+    # Since OpenSSL 1.1, lib names are like libcrypto32MTd.lib and libssl32MTd.lib
+    if( "${CMAKE_SIZEOF_VOID_P}" STREQUAL "8" )
+        set(_OPENSSL_MSVC_ARCH_SUFFIX "64")
+    else()
+        set(_OPENSSL_MSVC_ARCH_SUFFIX "32")
+    endif()
+
+    if(OPENSSL_USE_STATIC_LIBS)
+      set(_OPENSSL_STATIC_SUFFIX
+        "_static"
+      )
+      set(_OPENSSL_PATH_SUFFIXES
+        "lib/VC/static"
+        "VC/static"
+        "lib"
+        )
+    else()
+      set(_OPENSSL_STATIC_SUFFIX
+        ""
+      )
+      set(_OPENSSL_PATH_SUFFIXES
+        "lib/VC"
+        "VC"
+        "lib"
+        )
+    endif ()
+
+    find_library(LIB_EAY_DEBUG
+      NAMES
+        # When OpenSSL is built with default options, the static library name is suffixed with "_static".
+        # Looking the "libcrypto_static.lib" with a higher priority than "libcrypto.lib" which is the
+        # import library of "libcrypto.dll".
+        libcrypto${_OPENSSL_STATIC_SUFFIX}${_OPENSSL_MSVC_ARCH_SUFFIX}${_OPENSSL_MSVC_RT_MODE}d
+        libcrypto${_OPENSSL_STATIC_SUFFIX}${_OPENSSL_MSVC_RT_MODE}d
+        libcrypto${_OPENSSL_STATIC_SUFFIX}d
+        libeay32${_OPENSSL_STATIC_SUFFIX}${_OPENSSL_MSVC_RT_MODE}d
+        libeay32${_OPENSSL_STATIC_SUFFIX}d
+        crypto${_OPENSSL_STATIC_SUFFIX}d
+        # When OpenSSL is built with the "-static" option, only the static build is produced,
+        # and it is not suffixed with "_static".
+        libcrypto${_OPENSSL_MSVC_ARCH_SUFFIX}${_OPENSSL_MSVC_RT_MODE}d
+        libcrypto${_OPENSSL_MSVC_RT_MODE}d
+        libcryptod
+        libeay32${_OPENSSL_MSVC_RT_MODE}d
+        libeay32d
+        cryptod
+      NAMES_PER_DIR
+      ${_OPENSSL_ROOT_HINTS_AND_PATHS}
+      PATH_SUFFIXES
+        ${_OPENSSL_PATH_SUFFIXES}
+    )
+
+    find_library(LIB_EAY_RELEASE
+      NAMES
+        # When OpenSSL is built with default options, the static library name is suffixed with "_static".
+        # Looking the "libcrypto_static.lib" with a higher priority than "libcrypto.lib" which is the
+        # import library of "libcrypto.dll".
+        libcrypto${_OPENSSL_STATIC_SUFFIX}${_OPENSSL_MSVC_ARCH_SUFFIX}${_OPENSSL_MSVC_RT_MODE}
+        libcrypto${_OPENSSL_STATIC_SUFFIX}${_OPENSSL_MSVC_RT_MODE}
+        libcrypto${_OPENSSL_STATIC_SUFFIX}
+        libeay32${_OPENSSL_STATIC_SUFFIX}${_OPENSSL_MSVC_RT_MODE}
+        libeay32${_OPENSSL_STATIC_SUFFIX}
+        crypto${_OPENSSL_STATIC_SUFFIX}
+        # When OpenSSL is built with the "-static" option, only the static build is produced,
+        # and it is not suffixed with "_static".
+        libcrypto${_OPENSSL_MSVC_ARCH_SUFFIX}${_OPENSSL_MSVC_RT_MODE}
+        libcrypto${_OPENSSL_MSVC_RT_MODE}
+        libcrypto
+        libeay32${_OPENSSL_MSVC_RT_MODE}
+        libeay32
+        crypto
+      NAMES_PER_DIR
+      ${_OPENSSL_ROOT_HINTS_AND_PATHS}
+      PATH_SUFFIXES
+        ${_OPENSSL_PATH_SUFFIXES}
+    )
+
+    find_library(SSL_EAY_DEBUG
+      NAMES
+        # When OpenSSL is built with default options, the static library name is suffixed with "_static".
+        # Looking the "libssl_static.lib" with a higher priority than "libssl.lib" which is the
+        # import library of "libssl.dll".
+        libssl${_OPENSSL_STATIC_SUFFIX}${_OPENSSL_MSVC_ARCH_SUFFIX}${_OPENSSL_MSVC_RT_MODE}d
+        libssl${_OPENSSL_STATIC_SUFFIX}${_OPENSSL_MSVC_RT_MODE}d
+        libssl${_OPENSSL_STATIC_SUFFIX}d
+        ssleay32${_OPENSSL_STATIC_SUFFIX}${_OPENSSL_MSVC_RT_MODE}d
+        ssleay32${_OPENSSL_STATIC_SUFFIX}d
+        ssl${_OPENSSL_STATIC_SUFFIX}d
+        # When OpenSSL is built with the "-static" option, only the static build is produced,
+        # and it is not suffixed with "_static".
+        libssl${_OPENSSL_MSVC_ARCH_SUFFIX}${_OPENSSL_MSVC_RT_MODE}d
+        libssl${_OPENSSL_MSVC_RT_MODE}d
+        libssld
+        ssleay32${_OPENSSL_MSVC_RT_MODE}d
+        ssleay32d
+        ssld
+      NAMES_PER_DIR
+      ${_OPENSSL_ROOT_HINTS_AND_PATHS}
+      PATH_SUFFIXES
+        ${_OPENSSL_PATH_SUFFIXES}
+    )
+
+    find_library(SSL_EAY_RELEASE
+      NAMES
+        # When OpenSSL is built with default options, the static library name is suffixed with "_static".
+        # Looking the "libssl_static.lib" with a higher priority than "libssl.lib" which is the
+        # import library of "libssl.dll".
+        libssl${_OPENSSL_STATIC_SUFFIX}${_OPENSSL_MSVC_ARCH_SUFFIX}${_OPENSSL_MSVC_RT_MODE}
+        libssl${_OPENSSL_STATIC_SUFFIX}${_OPENSSL_MSVC_RT_MODE}
+        libssl${_OPENSSL_STATIC_SUFFIX}
+        ssleay32${_OPENSSL_STATIC_SUFFIX}${_OPENSSL_MSVC_RT_MODE}
+        ssleay32${_OPENSSL_STATIC_SUFFIX}
+        ssl${_OPENSSL_STATIC_SUFFIX}
+        # When OpenSSL is built with the "-static" option, only the static build is produced,
+        # and it is not suffixed with "_static".
+        libssl${_OPENSSL_MSVC_ARCH_SUFFIX}${_OPENSSL_MSVC_RT_MODE}
+        libssl${_OPENSSL_MSVC_RT_MODE}
+        libssl
+        ssleay32${_OPENSSL_MSVC_RT_MODE}
+        ssleay32
+        ssl
+      NAMES_PER_DIR
+      ${_OPENSSL_ROOT_HINTS_AND_PATHS}
+      PATH_SUFFIXES
+        ${_OPENSSL_PATH_SUFFIXES}
+    )
+
+    set(LIB_EAY_LIBRARY_DEBUG "${LIB_EAY_DEBUG}")
+    set(LIB_EAY_LIBRARY_RELEASE "${LIB_EAY_RELEASE}")
+    set(SSL_EAY_LIBRARY_DEBUG "${SSL_EAY_DEBUG}")
+    set(SSL_EAY_LIBRARY_RELEASE "${SSL_EAY_RELEASE}")
+
+    include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
+    select_library_configurations(LIB_EAY)
+    select_library_configurations(SSL_EAY)
+
+    mark_as_advanced(LIB_EAY_LIBRARY_DEBUG LIB_EAY_LIBRARY_RELEASE
+                     SSL_EAY_LIBRARY_DEBUG SSL_EAY_LIBRARY_RELEASE)
+    set(OPENSSL_SSL_LIBRARY ${SSL_EAY_LIBRARY} )
+    set(OPENSSL_CRYPTO_LIBRARY ${LIB_EAY_LIBRARY} )
+  elseif(MINGW)
+    # same player, for MinGW
+    set(LIB_EAY_NAMES crypto libeay32)
+    set(SSL_EAY_NAMES ssl ssleay32)
+    find_library(LIB_EAY
+      NAMES
+        ${LIB_EAY_NAMES}
+      NAMES_PER_DIR
+      ${_OPENSSL_ROOT_HINTS_AND_PATHS}
+      PATH_SUFFIXES
+        "lib/MinGW"
+        "lib"
+    )
+
+    find_library(SSL_EAY
+      NAMES
+        ${SSL_EAY_NAMES}
+      NAMES_PER_DIR
+      ${_OPENSSL_ROOT_HINTS_AND_PATHS}
+      PATH_SUFFIXES
+        "lib/MinGW"
+        "lib"
+    )
+
+    mark_as_advanced(SSL_EAY LIB_EAY)
+    set(OPENSSL_SSL_LIBRARY ${SSL_EAY} )
+    set(OPENSSL_CRYPTO_LIBRARY ${LIB_EAY} )
+    unset(LIB_EAY_NAMES)
+    unset(SSL_EAY_NAMES)
+  else()
+    # Not sure what to pick for -say- intel, let's use the toplevel ones and hope someone report issues:
+    find_library(LIB_EAY
+      NAMES
+        libcrypto
+        libeay32
+      NAMES_PER_DIR
+      ${_OPENSSL_ROOT_HINTS_AND_PATHS}
+      HINTS
+        ${_OPENSSL_LIBDIR}
+      PATH_SUFFIXES
+        lib
+    )
+
+    find_library(SSL_EAY
+      NAMES
+        libssl
+        ssleay32
+      NAMES_PER_DIR
+      ${_OPENSSL_ROOT_HINTS_AND_PATHS}
+      HINTS
+        ${_OPENSSL_LIBDIR}
+      PATH_SUFFIXES
+        lib
+    )
+
+    mark_as_advanced(SSL_EAY LIB_EAY)
+    set(OPENSSL_SSL_LIBRARY ${SSL_EAY} )
+    set(OPENSSL_CRYPTO_LIBRARY ${LIB_EAY} )
+  endif()
+else()
+
+  find_library(OPENSSL_SSL_LIBRARY
+    NAMES
+      ssl
+      ssleay32
+      ssleay32MD
+    NAMES_PER_DIR
+    ${_OPENSSL_ROOT_HINTS_AND_PATHS}
+    HINTS
+      ${_OPENSSL_LIBDIR}
+      ${_OPENSSL_LIBRARY_DIRS}
+    PATH_SUFFIXES
+      lib
+  )
+
+  find_library(OPENSSL_CRYPTO_LIBRARY
+    NAMES
+      crypto
+    NAMES_PER_DIR
+    ${_OPENSSL_ROOT_HINTS_AND_PATHS}
+    HINTS
+      ${_OPENSSL_LIBDIR}
+      ${_OPENSSL_LIBRARY_DIRS}
+    PATH_SUFFIXES
+      lib
+  )
+
+  mark_as_advanced(OPENSSL_CRYPTO_LIBRARY OPENSSL_SSL_LIBRARY)
+
+endif()
+
+set(OPENSSL_SSL_LIBRARIES ${OPENSSL_SSL_LIBRARY})
+set(OPENSSL_CRYPTO_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY})
+set(OPENSSL_LIBRARIES ${OPENSSL_SSL_LIBRARIES} ${OPENSSL_CRYPTO_LIBRARIES} )
+_OpenSSL_test_and_find_dependencies("${OPENSSL_SSL_LIBRARY}" "${OPENSSL_CRYPTO_LIBRARY}")
+if(_OpenSSL_has_dependencies)
+  _OpenSSL_add_dependencies( OPENSSL_SSL_LIBRARIES )
+  _OpenSSL_add_dependencies( OPENSSL_CRYPTO_LIBRARIES )
+  _OpenSSL_add_dependencies( OPENSSL_LIBRARIES )
+endif()
+
+function(from_hex HEX DEC)
+  string(TOUPPER "${HEX}" HEX)
+  set(_res 0)
+  string(LENGTH "${HEX}" _strlen)
+
+  while (_strlen GREATER 0)
+    math(EXPR _res "${_res} * 16")
+    string(SUBSTRING "${HEX}" 0 1 NIBBLE)
+    string(SUBSTRING "${HEX}" 1 -1 HEX)
+    if (NIBBLE STREQUAL "A")
+      math(EXPR _res "${_res} + 10")
+    elseif (NIBBLE STREQUAL "B")
+      math(EXPR _res "${_res} + 11")
+    elseif (NIBBLE STREQUAL "C")
+      math(EXPR _res "${_res} + 12")
+    elseif (NIBBLE STREQUAL "D")
+      math(EXPR _res "${_res} + 13")
+    elseif (NIBBLE STREQUAL "E")
+      math(EXPR _res "${_res} + 14")
+    elseif (NIBBLE STREQUAL "F")
+      math(EXPR _res "${_res} + 15")
+    else()
+      math(EXPR _res "${_res} + ${NIBBLE}")
+    endif()
+
+    string(LENGTH "${HEX}" _strlen)
+  endwhile()
+
+  set(${DEC} ${_res} PARENT_SCOPE)
+endfunction()
+
+if(OPENSSL_INCLUDE_DIR AND EXISTS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h")
+  file(STRINGS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h" openssl_version_str
+       REGEX "^#[\t ]*define[\t ]+OPENSSL_VERSION_NUMBER[\t ]+0x([0-9a-fA-F])+.*")
+
+  if(openssl_version_str)
+    # The version number is encoded as 0xMNNFFPPS: major minor fix patch status
+    # The status gives if this is a developer or prerelease and is ignored here.
+    # Major, minor, and fix directly translate into the version numbers shown in
+    # the string. The patch field translates to the single character suffix that
+    # indicates the bug fix state, which 00 -> nothing, 01 -> a, 02 -> b and so
+    # on.
+
+    string(REGEX REPLACE "^.*OPENSSL_VERSION_NUMBER[\t ]+0x([0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F]).*$"
+           "\\1;\\2;\\3;\\4;\\5" OPENSSL_VERSION_LIST "${openssl_version_str}")
+    list(GET OPENSSL_VERSION_LIST 0 OPENSSL_VERSION_MAJOR)
+    list(GET OPENSSL_VERSION_LIST 1 OPENSSL_VERSION_MINOR)
+    from_hex("${OPENSSL_VERSION_MINOR}" OPENSSL_VERSION_MINOR)
+    list(GET OPENSSL_VERSION_LIST 2 OPENSSL_VERSION_FIX)
+    from_hex("${OPENSSL_VERSION_FIX}" OPENSSL_VERSION_FIX)
+    list(GET OPENSSL_VERSION_LIST 3 OPENSSL_VERSION_PATCH)
+
+    if (NOT OPENSSL_VERSION_PATCH STREQUAL "00")
+      from_hex("${OPENSSL_VERSION_PATCH}" _tmp)
+      # 96 is the ASCII code of 'a' minus 1
+      math(EXPR OPENSSL_VERSION_PATCH_ASCII "${_tmp} + 96")
+      unset(_tmp)
+      # Once anyone knows how OpenSSL would call the patch versions beyond 'z'
+      # this should be updated to handle that, too. This has not happened yet
+      # so it is simply ignored here for now.
+      string(ASCII "${OPENSSL_VERSION_PATCH_ASCII}" OPENSSL_VERSION_PATCH_STRING)
+    endif ()
+
+    set(OPENSSL_VERSION "${OPENSSL_VERSION_MAJOR}.${OPENSSL_VERSION_MINOR}.${OPENSSL_VERSION_FIX}${OPENSSL_VERSION_PATCH_STRING}")
+  else ()
+    # Since OpenSSL 3.0.0, the new version format is MAJOR.MINOR.PATCH and
+    # a new OPENSSL_VERSION_STR macro contains exactly that
+    file(STRINGS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h" OPENSSL_VERSION_STR
+         REGEX "^#[\t ]*define[\t ]+OPENSSL_VERSION_STR[\t ]+\"([0-9])+\\.([0-9])+\\.([0-9])+\".*")
+    string(REGEX REPLACE "^.*OPENSSL_VERSION_STR[\t ]+\"([0-9]+\\.[0-9]+\\.[0-9]+)\".*$"
+           "\\1" OPENSSL_VERSION_STR "${OPENSSL_VERSION_STR}")
+
+    set(OPENSSL_VERSION "${OPENSSL_VERSION_STR}")
+
+    unset(OPENSSL_VERSION_STR)
+  endif ()
+endif ()
+
+foreach(_comp IN LISTS OpenSSL_FIND_COMPONENTS)
+  if(_comp STREQUAL "Crypto")
+    if(EXISTS "${OPENSSL_INCLUDE_DIR}" AND
+        (EXISTS "${OPENSSL_CRYPTO_LIBRARY}" OR
+        EXISTS "${LIB_EAY_LIBRARY_DEBUG}" OR
+        EXISTS "${LIB_EAY_LIBRARY_RELEASE}")
+    )
+      set(OpenSSL_${_comp}_FOUND TRUE)
+    else()
+      set(OpenSSL_${_comp}_FOUND FALSE)
+    endif()
+  elseif(_comp STREQUAL "SSL")
+    if(EXISTS "${OPENSSL_INCLUDE_DIR}" AND
+        (EXISTS "${OPENSSL_SSL_LIBRARY}" OR
+        EXISTS "${SSL_EAY_LIBRARY_DEBUG}" OR
+        EXISTS "${SSL_EAY_LIBRARY_RELEASE}")
+    )
+      set(OpenSSL_${_comp}_FOUND TRUE)
+    else()
+      set(OpenSSL_${_comp}_FOUND FALSE)
+    endif()
+  else()
+    message(WARNING "${_comp} is not a valid OpenSSL component")
+    set(OpenSSL_${_comp}_FOUND FALSE)
+  endif()
+endforeach()
+unset(_comp)
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+find_package_handle_standard_args(OpenSSL
+  REQUIRED_VARS
+    OPENSSL_CRYPTO_LIBRARY
+    OPENSSL_INCLUDE_DIR
+  VERSION_VAR
+    OPENSSL_VERSION
+  HANDLE_VERSION_RANGE
+  HANDLE_COMPONENTS
+  FAIL_MESSAGE
+    "Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR"
+)
+
+mark_as_advanced(OPENSSL_INCLUDE_DIR)
+
+if(OPENSSL_FOUND)
+  if(NOT TARGET OpenSSL::Crypto AND
+      (EXISTS "${OPENSSL_CRYPTO_LIBRARY}" OR
+        EXISTS "${LIB_EAY_LIBRARY_DEBUG}" OR
+        EXISTS "${LIB_EAY_LIBRARY_RELEASE}")
+      )
+    add_library(OpenSSL::Crypto UNKNOWN IMPORTED)
+    set_target_properties(OpenSSL::Crypto PROPERTIES
+      INTERFACE_INCLUDE_DIRECTORIES "${OPENSSL_INCLUDE_DIR}")
+    if(EXISTS "${OPENSSL_CRYPTO_LIBRARY}")
+      set_target_properties(OpenSSL::Crypto PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+        IMPORTED_LOCATION "${OPENSSL_CRYPTO_LIBRARY}")
+    endif()
+    if(EXISTS "${LIB_EAY_LIBRARY_RELEASE}")
+      set_property(TARGET OpenSSL::Crypto APPEND PROPERTY
+        IMPORTED_CONFIGURATIONS RELEASE)
+      set_target_properties(OpenSSL::Crypto PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
+        IMPORTED_LOCATION_RELEASE "${LIB_EAY_LIBRARY_RELEASE}")
+    endif()
+    if(EXISTS "${LIB_EAY_LIBRARY_DEBUG}")
+      set_property(TARGET OpenSSL::Crypto APPEND PROPERTY
+        IMPORTED_CONFIGURATIONS DEBUG)
+      set_target_properties(OpenSSL::Crypto PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
+        IMPORTED_LOCATION_DEBUG "${LIB_EAY_LIBRARY_DEBUG}")
+    endif()
+    _OpenSSL_target_add_dependencies(OpenSSL::Crypto)
+  endif()
+
+  if(NOT TARGET OpenSSL::SSL AND
+      (EXISTS "${OPENSSL_SSL_LIBRARY}" OR
+        EXISTS "${SSL_EAY_LIBRARY_DEBUG}" OR
+        EXISTS "${SSL_EAY_LIBRARY_RELEASE}")
+      )
+    add_library(OpenSSL::SSL UNKNOWN IMPORTED)
+    set_target_properties(OpenSSL::SSL PROPERTIES
+      INTERFACE_INCLUDE_DIRECTORIES "${OPENSSL_INCLUDE_DIR}")
+    if(EXISTS "${OPENSSL_SSL_LIBRARY}")
+      set_target_properties(OpenSSL::SSL PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+        IMPORTED_LOCATION "${OPENSSL_SSL_LIBRARY}")
+    endif()
+    if(EXISTS "${SSL_EAY_LIBRARY_RELEASE}")
+      set_property(TARGET OpenSSL::SSL APPEND PROPERTY
+        IMPORTED_CONFIGURATIONS RELEASE)
+      set_target_properties(OpenSSL::SSL PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
+        IMPORTED_LOCATION_RELEASE "${SSL_EAY_LIBRARY_RELEASE}")
+    endif()
+    if(EXISTS "${SSL_EAY_LIBRARY_DEBUG}")
+      set_property(TARGET OpenSSL::SSL APPEND PROPERTY
+        IMPORTED_CONFIGURATIONS DEBUG)
+      set_target_properties(OpenSSL::SSL PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
+        IMPORTED_LOCATION_DEBUG "${SSL_EAY_LIBRARY_DEBUG}")
+    endif()
+    if(TARGET OpenSSL::Crypto)
+      set_target_properties(OpenSSL::SSL PROPERTIES
+        INTERFACE_LINK_LIBRARIES OpenSSL::Crypto)
+    endif()
+    _OpenSSL_target_add_dependencies(OpenSSL::SSL)
+  endif()
+
+  if("${OPENSSL_VERSION_MAJOR}.${OPENSSL_VERSION_MAJOR}.${OPENSSL_VERSION_FIX}" VERSION_GREATER_EQUAL "0.9.8")
+    if(MSVC)
+      if(EXISTS "${OPENSSL_INCLUDE_DIR}")
+        set(_OPENSSL_applink_paths PATHS ${OPENSSL_INCLUDE_DIR})
+      endif()
+      find_file(OPENSSL_APPLINK_SOURCE
+        NAMES
+          openssl/applink.c
+        ${_OPENSSL_applink_paths}
+        NO_DEFAULT_PATH)
+      if(OPENSSL_APPLINK_SOURCE)
+        set(_OPENSSL_applink_interface_srcs ${OPENSSL_APPLINK_SOURCE})
+      endif()
+    endif()
+    if(NOT TARGET OpenSSL::applink)
+      add_library(OpenSSL::applink INTERFACE IMPORTED)
+      set_property(TARGET OpenSSL::applink APPEND
+        PROPERTY INTERFACE_SOURCES
+          ${_OPENSSL_applink_interface_srcs})
+    endif()
+  endif()
+endif()
+
+# Restore the original find library ordering
+if(OPENSSL_USE_STATIC_LIBS)
+  set(CMAKE_FIND_LIBRARY_SUFFIXES ${_openssl_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
+endif()
diff --git a/share/cmake-3.18/Modules/FindOpenSceneGraph.cmake b/share/cmake-3.22/Modules/FindOpenSceneGraph.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindOpenSceneGraph.cmake
rename to share/cmake-3.22/Modules/FindOpenSceneGraph.cmake
diff --git a/share/cmake-3.18/Modules/FindOpenThreads.cmake b/share/cmake-3.22/Modules/FindOpenThreads.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindOpenThreads.cmake
rename to share/cmake-3.22/Modules/FindOpenThreads.cmake
diff --git a/share/cmake-3.18/Modules/FindPHP4.cmake b/share/cmake-3.22/Modules/FindPHP4.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindPHP4.cmake
rename to share/cmake-3.22/Modules/FindPHP4.cmake
diff --git a/share/cmake-3.22/Modules/FindPNG.cmake b/share/cmake-3.22/Modules/FindPNG.cmake
new file mode 100644
index 0000000..94d15db
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindPNG.cmake
@@ -0,0 +1,161 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindPNG
+-------
+
+Find libpng, the official reference library for the PNG image format.
+
+Imported targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.5
+
+This module defines the following :prop_tgt:`IMPORTED` target:
+
+``PNG::PNG``
+  The libpng library, if found.
+
+Result variables
+^^^^^^^^^^^^^^^^
+
+This module will set the following variables in your project:
+
+``PNG_INCLUDE_DIRS``
+  where to find png.h, etc.
+``PNG_LIBRARIES``
+  the libraries to link against to use PNG.
+``PNG_DEFINITIONS``
+  You should add_definitions(${PNG_DEFINITIONS}) before compiling code
+  that includes png library files.
+``PNG_FOUND``
+  If false, do not try to use PNG.
+``PNG_VERSION_STRING``
+  the version of the PNG library found (since CMake 2.8.8)
+
+Obsolete variables
+^^^^^^^^^^^^^^^^^^
+
+The following variables may also be set, for backwards compatibility:
+
+``PNG_LIBRARY``
+  where to find the PNG library.
+``PNG_INCLUDE_DIR``
+  where to find the PNG headers (same as PNG_INCLUDE_DIRS)
+
+Since PNG depends on the ZLib compression library, none of the above
+will be defined unless ZLib can be found.
+#]=======================================================================]
+
+if(PNG_FIND_QUIETLY)
+  set(_FIND_ZLIB_ARG QUIET)
+endif()
+find_package(ZLIB ${_FIND_ZLIB_ARG})
+
+if(ZLIB_FOUND)
+  find_path(PNG_PNG_INCLUDE_DIR png.h PATH_SUFFIXES include/libpng)
+  mark_as_advanced(PNG_PNG_INCLUDE_DIR)
+
+  list(APPEND PNG_NAMES png libpng)
+  unset(PNG_NAMES_DEBUG)
+  set(_PNG_VERSION_SUFFIXES 17 16 15 14 12)
+  if (PNG_FIND_VERSION MATCHES "^([0-9]+)\\.([0-9]+)(\\..*)?$")
+    set(_PNG_VERSION_SUFFIX_MIN "${CMAKE_MATCH_1}${CMAKE_MATCH_2}")
+    if (PNG_FIND_VERSION_EXACT)
+      set(_PNG_VERSION_SUFFIXES ${_PNG_VERSION_SUFFIX_MIN})
+    else ()
+      string(REGEX REPLACE
+          "${_PNG_VERSION_SUFFIX_MIN}.*" "${_PNG_VERSION_SUFFIX_MIN}"
+          _PNG_VERSION_SUFFIXES "${_PNG_VERSION_SUFFIXES}")
+    endif ()
+    unset(_PNG_VERSION_SUFFIX_MIN)
+  endif ()
+  foreach(v IN LISTS _PNG_VERSION_SUFFIXES)
+    list(APPEND PNG_NAMES png${v} libpng${v} libpng${v}_static)
+    list(APPEND PNG_NAMES_DEBUG png${v}d libpng${v}d libpng${v}_staticd)
+  endforeach()
+  unset(_PNG_VERSION_SUFFIXES)
+  # For compatibility with versions prior to this multi-config search, honor
+  # any PNG_LIBRARY that is already specified and skip the search.
+  if(NOT PNG_LIBRARY)
+    find_library(PNG_LIBRARY_RELEASE NAMES ${PNG_NAMES} NAMES_PER_DIR)
+    find_library(PNG_LIBRARY_DEBUG NAMES ${PNG_NAMES_DEBUG} NAMES_PER_DIR)
+    include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
+    select_library_configurations(PNG)
+    mark_as_advanced(PNG_LIBRARY_RELEASE PNG_LIBRARY_DEBUG)
+  endif()
+  unset(PNG_NAMES)
+  unset(PNG_NAMES_DEBUG)
+
+  # Set by select_library_configurations(), but we want the one from
+  # find_package_handle_standard_args() below.
+  unset(PNG_FOUND)
+
+  if (PNG_LIBRARY AND PNG_PNG_INCLUDE_DIR)
+      # png.h includes zlib.h. Sigh.
+      set(PNG_INCLUDE_DIRS ${PNG_PNG_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR} )
+      set(PNG_INCLUDE_DIR ${PNG_INCLUDE_DIRS} ) # for backward compatibility
+      set(PNG_LIBRARIES ${PNG_LIBRARY} ${ZLIB_LIBRARY})
+      if((CMAKE_SYSTEM_NAME STREQUAL "Linux") AND
+         ("${PNG_LIBRARY}" MATCHES "\\${CMAKE_STATIC_LIBRARY_SUFFIX}$"))
+        list(APPEND PNG_LIBRARIES m)
+      endif()
+
+      if (CYGWIN)
+        if(BUILD_SHARED_LIBS)
+           # No need to define PNG_USE_DLL here, because it's default for Cygwin.
+        else()
+          set (PNG_DEFINITIONS -DPNG_STATIC)
+          set(_PNG_COMPILE_DEFINITIONS PNG_STATIC)
+        endif()
+      endif ()
+
+      if(NOT TARGET PNG::PNG)
+        add_library(PNG::PNG UNKNOWN IMPORTED)
+        set_target_properties(PNG::PNG PROPERTIES
+          INTERFACE_COMPILE_DEFINITIONS "${_PNG_COMPILE_DEFINITIONS}"
+          INTERFACE_INCLUDE_DIRECTORIES "${PNG_INCLUDE_DIRS}"
+          INTERFACE_LINK_LIBRARIES ZLIB::ZLIB)
+        if((CMAKE_SYSTEM_NAME STREQUAL "Linux") AND
+           ("${PNG_LIBRARY}" MATCHES "\\${CMAKE_STATIC_LIBRARY_SUFFIX}$"))
+          set_property(TARGET PNG::PNG APPEND PROPERTY
+            INTERFACE_LINK_LIBRARIES m)
+        endif()
+
+        if(EXISTS "${PNG_LIBRARY}")
+          set_target_properties(PNG::PNG PROPERTIES
+            IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+            IMPORTED_LOCATION "${PNG_LIBRARY}")
+        endif()
+        if(EXISTS "${PNG_LIBRARY_RELEASE}")
+          set_property(TARGET PNG::PNG APPEND PROPERTY
+            IMPORTED_CONFIGURATIONS RELEASE)
+          set_target_properties(PNG::PNG PROPERTIES
+            IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
+            IMPORTED_LOCATION_RELEASE "${PNG_LIBRARY_RELEASE}")
+        endif()
+        if(EXISTS "${PNG_LIBRARY_DEBUG}")
+          set_property(TARGET PNG::PNG APPEND PROPERTY
+            IMPORTED_CONFIGURATIONS DEBUG)
+          set_target_properties(PNG::PNG PROPERTIES
+            IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
+            IMPORTED_LOCATION_DEBUG "${PNG_LIBRARY_DEBUG}")
+        endif()
+      endif()
+
+      unset(_PNG_COMPILE_DEFINITIONS)
+  endif ()
+
+  if (PNG_PNG_INCLUDE_DIR AND EXISTS "${PNG_PNG_INCLUDE_DIR}/png.h")
+      file(STRINGS "${PNG_PNG_INCLUDE_DIR}/png.h" png_version_str REGEX "^#define[ \t]+PNG_LIBPNG_VER_STRING[ \t]+\".+\"")
+
+      string(REGEX REPLACE "^#define[ \t]+PNG_LIBPNG_VER_STRING[ \t]+\"([^\"]+)\".*" "\\1" PNG_VERSION_STRING "${png_version_str}")
+      unset(png_version_str)
+  endif ()
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+find_package_handle_standard_args(PNG
+                                  REQUIRED_VARS PNG_LIBRARY PNG_PNG_INCLUDE_DIR
+                                  VERSION_VAR PNG_VERSION_STRING)
diff --git a/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake b/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake
new file mode 100644
index 0000000..fbcf7cd
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake
@@ -0,0 +1,605 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindPackageHandleStandardArgs
+-----------------------------
+
+This module provides functions intended to be used in :ref:`Find Modules`
+implementing :command:`find_package(<PackageName>)` calls.
+
+.. command:: find_package_handle_standard_args
+
+  This command handles the ``REQUIRED``, ``QUIET`` and version-related
+  arguments of :command:`find_package`.  It also sets the
+  ``<PackageName>_FOUND`` variable.  The package is considered found if all
+  variables listed contain valid results, e.g. valid filepaths.
+
+  There are two signatures:
+
+  .. code-block:: cmake
+
+    find_package_handle_standard_args(<PackageName>
+      (DEFAULT_MSG|<custom-failure-message>)
+      <required-var>...
+      )
+
+    find_package_handle_standard_args(<PackageName>
+      [FOUND_VAR <result-var>]
+      [REQUIRED_VARS <required-var>...]
+      [VERSION_VAR <version-var>]
+      [HANDLE_VERSION_RANGE]
+      [HANDLE_COMPONENTS]
+      [CONFIG_MODE]
+      [NAME_MISMATCHED]
+      [REASON_FAILURE_MESSAGE <reason-failure-message>]
+      [FAIL_MESSAGE <custom-failure-message>]
+      )
+
+  The ``<PackageName>_FOUND`` variable will be set to ``TRUE`` if all
+  the variables ``<required-var>...`` are valid and any optional
+  constraints are satisfied, and ``FALSE`` otherwise.  A success or
+  failure message may be displayed based on the results and on
+  whether the ``REQUIRED`` and/or ``QUIET`` option was given to
+  the :command:`find_package` call.
+
+  The options are:
+
+  ``(DEFAULT_MSG|<custom-failure-message>)``
+    In the simple signature this specifies the failure message.
+    Use ``DEFAULT_MSG`` to ask for a default message to be computed
+    (recommended).  Not valid in the full signature.
+
+  ``FOUND_VAR <result-var>``
+    .. deprecated:: 3.3
+
+    Specifies either ``<PackageName>_FOUND`` or
+    ``<PACKAGENAME>_FOUND`` as the result variable.  This exists only
+    for compatibility with older versions of CMake and is now ignored.
+    Result variables of both names are always set for compatibility.
+
+  ``REQUIRED_VARS <required-var>...``
+    Specify the variables which are required for this package.
+    These may be named in the generated failure message asking the
+    user to set the missing variable values.  Therefore these should
+    typically be cache entries such as ``FOO_LIBRARY`` and not output
+    variables like ``FOO_LIBRARIES``.
+
+    .. versionchanged:: 3.18
+      If ``HANDLE_COMPONENTS`` is specified, this option can be omitted.
+
+  ``VERSION_VAR <version-var>``
+    Specify the name of a variable that holds the version of the package
+    that has been found.  This version will be checked against the
+    (potentially) specified required version given to the
+    :command:`find_package` call, including its ``EXACT`` option.
+    The default messages include information about the required
+    version and the version which has been actually found, both
+    if the version is ok or not.
+
+  ``HANDLE_VERSION_RANGE``
+    .. versionadded:: 3.19
+
+    Enable handling of a version range, if one is specified. Without this
+    option, a developer warning will be displayed if a version range is
+    specified.
+
+  ``HANDLE_COMPONENTS``
+    Enable handling of package components.  In this case, the command
+    will report which components have been found and which are missing,
+    and the ``<PackageName>_FOUND`` variable will be set to ``FALSE``
+    if any of the required components (i.e. not the ones listed after
+    the ``OPTIONAL_COMPONENTS`` option of :command:`find_package`) are
+    missing.
+
+  ``CONFIG_MODE``
+    Specify that the calling find module is a wrapper around a
+    call to ``find_package(<PackageName> NO_MODULE)``.  This implies
+    a ``VERSION_VAR`` value of ``<PackageName>_VERSION``.  The command
+    will automatically check whether the package configuration file
+    was found.
+
+  ``REASON_FAILURE_MESSAGE <reason-failure-message>``
+    .. versionadded:: 3.16
+
+    Specify a custom message of the reason for the failure which will be
+    appended to the default generated message.
+
+  ``FAIL_MESSAGE <custom-failure-message>``
+    Specify a custom failure message instead of using the default
+    generated message.  Not recommended.
+
+  ``NAME_MISMATCHED``
+    .. versionadded:: 3.17
+
+    Indicate that the ``<PackageName>`` does not match
+    ``${CMAKE_FIND_PACKAGE_NAME}``. This is usually a mistake and raises a
+    warning, but it may be intentional for usage of the command for components
+    of a larger package.
+
+Example for the simple signature:
+
+.. code-block:: cmake
+
+  find_package_handle_standard_args(LibXml2 DEFAULT_MSG
+    LIBXML2_LIBRARY LIBXML2_INCLUDE_DIR)
+
+The ``LibXml2`` package is considered to be found if both
+``LIBXML2_LIBRARY`` and ``LIBXML2_INCLUDE_DIR`` are valid.
+Then also ``LibXml2_FOUND`` is set to ``TRUE``.  If it is not found
+and ``REQUIRED`` was used, it fails with a
+:command:`message(FATAL_ERROR)`, independent whether ``QUIET`` was
+used or not.  If it is found, success will be reported, including
+the content of the first ``<required-var>``.  On repeated CMake runs,
+the same message will not be printed again.
+
+.. note::
+
+  If ``<PackageName>`` does not match ``CMAKE_FIND_PACKAGE_NAME`` for the
+  calling module, a warning that there is a mismatch is given. The
+  ``FPHSA_NAME_MISMATCHED`` variable may be set to bypass the warning if using
+  the old signature and the ``NAME_MISMATCHED`` argument using the new
+  signature. To avoid forcing the caller to require newer versions of CMake for
+  usage, the variable's value will be used if defined when the
+  ``NAME_MISMATCHED`` argument is not passed for the new signature (but using
+  both is an error)..
+
+Example for the full signature:
+
+.. code-block:: cmake
+
+  find_package_handle_standard_args(LibArchive
+    REQUIRED_VARS LibArchive_LIBRARY LibArchive_INCLUDE_DIR
+    VERSION_VAR LibArchive_VERSION)
+
+In this case, the ``LibArchive`` package is considered to be found if
+both ``LibArchive_LIBRARY`` and ``LibArchive_INCLUDE_DIR`` are valid.
+Also the version of ``LibArchive`` will be checked by using the version
+contained in ``LibArchive_VERSION``.  Since no ``FAIL_MESSAGE`` is given,
+the default messages will be printed.
+
+Another example for the full signature:
+
+.. code-block:: cmake
+
+  find_package(Automoc4 QUIET NO_MODULE HINTS /opt/automoc4)
+  find_package_handle_standard_args(Automoc4  CONFIG_MODE)
+
+In this case, a ``FindAutmoc4.cmake`` module wraps a call to
+``find_package(Automoc4 NO_MODULE)`` and adds an additional search
+directory for ``automoc4``.  Then the call to
+``find_package_handle_standard_args`` produces a proper success/failure
+message.
+
+.. command:: find_package_check_version
+
+  .. versionadded:: 3.19
+
+  Helper function which can be used to check if a ``<version>`` is valid
+  against version-related arguments of :command:`find_package`.
+
+  .. code-block:: cmake
+
+    find_package_check_version(<version> <result-var>
+      [HANDLE_VERSION_RANGE]
+      [RESULT_MESSAGE_VARIABLE <message-var>]
+      )
+
+  The ``<result-var>`` will hold a boolean value giving the result of the check.
+
+  The options are:
+
+  ``HANDLE_VERSION_RANGE``
+    Enable handling of a version range, if one is specified. Without this
+    option, a developer warning will be displayed if a version range is
+    specified.
+
+  ``RESULT_MESSAGE_VARIABLE <message-var>``
+    Specify a variable to get back a message describing the result of the check.
+
+Example for the usage:
+
+.. code-block:: cmake
+
+  find_package_check_version(1.2.3 result HANDLE_VERSION_RANGE
+    RESULT_MESSAGE_VARIABLE reason)
+  if (result)
+    message (STATUS "${reason}")
+  else()
+    message (FATAL_ERROR "${reason}")
+  endif()
+#]=======================================================================]
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageMessage.cmake)
+
+
+cmake_policy(PUSH)
+# numbers and boolean constants
+cmake_policy (SET CMP0012 NEW)
+# IN_LIST operator
+cmake_policy (SET CMP0057 NEW)
+
+
+# internal helper macro
+macro(_FPHSA_FAILURE_MESSAGE _msg)
+  set (__msg "${_msg}")
+  if (FPHSA_REASON_FAILURE_MESSAGE)
+    string(APPEND __msg "\n    Reason given by package: ${FPHSA_REASON_FAILURE_MESSAGE}\n")
+  endif()
+  if (${_NAME}_FIND_REQUIRED)
+    message(FATAL_ERROR "${__msg}")
+  else ()
+    if (NOT ${_NAME}_FIND_QUIETLY)
+      message(STATUS "${__msg}")
+    endif ()
+  endif ()
+endmacro()
+
+
+# internal helper macro to generate the failure message when used in CONFIG_MODE:
+macro(_FPHSA_HANDLE_FAILURE_CONFIG_MODE)
+  # <PackageName>_CONFIG is set, but FOUND is false, this means that some other of the REQUIRED_VARS was not found:
+  if(${_NAME}_CONFIG)
+    _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: missing:${MISSING_VARS} (found ${${_NAME}_CONFIG} ${VERSION_MSG})")
+  else()
+    # If _CONSIDERED_CONFIGS is set, the config-file has been found, but no suitable version.
+    # List them all in the error message:
+    if(${_NAME}_CONSIDERED_CONFIGS)
+      set(configsText "")
+      list(LENGTH ${_NAME}_CONSIDERED_CONFIGS configsCount)
+      math(EXPR configsCount "${configsCount} - 1")
+      foreach(currentConfigIndex RANGE ${configsCount})
+        list(GET ${_NAME}_CONSIDERED_CONFIGS ${currentConfigIndex} filename)
+        list(GET ${_NAME}_CONSIDERED_VERSIONS ${currentConfigIndex} version)
+        string(APPEND configsText "\n    ${filename} (version ${version})")
+      endforeach()
+      if (${_NAME}_NOT_FOUND_MESSAGE)
+        if (FPHSA_REASON_FAILURE_MESSAGE)
+          string(PREPEND FPHSA_REASON_FAILURE_MESSAGE "${${_NAME}_NOT_FOUND_MESSAGE}\n    ")
+        else()
+          set(FPHSA_REASON_FAILURE_MESSAGE "${${_NAME}_NOT_FOUND_MESSAGE}")
+        endif()
+      else()
+        string(APPEND configsText "\n")
+      endif()
+      _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE} ${VERSION_MSG}, checked the following files:${configsText}")
+
+    else()
+      # Simple case: No Config-file was found at all:
+      _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: found neither ${_NAME}Config.cmake nor ${_NAME_LOWER}-config.cmake ${VERSION_MSG}")
+    endif()
+  endif()
+endmacro()
+
+
+function(FIND_PACKAGE_CHECK_VERSION version result)
+  cmake_parse_arguments (PARSE_ARGV 2 FPCV "HANDLE_VERSION_RANGE;NO_AUTHOR_WARNING_VERSION_RANGE" "RESULT_MESSAGE_VARIABLE" "")
+
+  if (FPCV_UNPARSED_ARGUMENTS)
+    message (FATAL_ERROR "find_package_check_version(): ${FPCV_UNPARSED_ARGUMENTS}: unexpected arguments")
+  endif()
+  if ("RESULT_MESSAGE_VARIABLE" IN_LIST FPCV_KEYWORDS_MISSING_VALUES)
+    message (FATAL_ERROR "find_package_check_version(): RESULT_MESSAGE_VARIABLE expects an argument")
+  endif()
+
+  set (${result} FALSE PARENT_SCOPE)
+  if (FPCV_RESULT_MESSAGE_VARIABLE)
+    unset (${FPCV_RESULT_MESSAGE_VARIABLE} PARENT_SCOPE)
+  endif()
+
+  if (_CMAKE_FPHSA_PACKAGE_NAME)
+    set (package "${_CMAKE_FPHSA_PACKAGE_NAME}")
+  elseif (CMAKE_FIND_PACKAGE_NAME)
+    set (package "${CMAKE_FIND_PACKAGE_NAME}")
+  else()
+    message (FATAL_ERROR "find_package_check_version(): Cannot be used outside a 'Find Module'")
+  endif()
+
+  if (NOT FPCV_NO_AUTHOR_WARNING_VERSION_RANGE
+      AND ${package}_FIND_VERSION_RANGE AND NOT FPCV_HANDLE_VERSION_RANGE)
+    message(AUTHOR_WARNING
+      "`find_package()` specify a version range but the option "
+      "HANDLE_VERSION_RANGE` is not passed to `find_package_check_version()`. "
+      "Only the lower endpoint of the range will be used.")
+  endif()
+
+
+  set (version_ok FALSE)
+  unset (version_msg)
+
+  if (FPCV_HANDLE_VERSION_RANGE AND ${package}_FIND_VERSION_RANGE)
+    if ((${package}_FIND_VERSION_RANGE_MIN STREQUAL "INCLUDE"
+          AND version VERSION_GREATER_EQUAL ${package}_FIND_VERSION_MIN)
+        AND ((${package}_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE"
+            AND version VERSION_LESS_EQUAL ${package}_FIND_VERSION_MAX)
+          OR (${package}_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE"
+            AND version VERSION_LESS ${package}_FIND_VERSION_MAX)))
+      set (version_ok TRUE)
+      set(version_msg "(found suitable version \"${version}\", required range is \"${${package}_FIND_VERSION_RANGE}\")")
+    else()
+      set(version_msg "Found unsuitable version \"${version}\", required range is \"${${package}_FIND_VERSION_RANGE}\"")
+    endif()
+  elseif (DEFINED ${package}_FIND_VERSION)
+    if(${package}_FIND_VERSION_EXACT)       # exact version required
+      # count the dots in the version string
+      string(REGEX REPLACE "[^.]" "" version_dots "${version}")
+      # add one dot because there is one dot more than there are components
+      string(LENGTH "${version_dots}." version_dots)
+      if (version_dots GREATER ${package}_FIND_VERSION_COUNT)
+        # Because of the C++ implementation of find_package() ${package}_FIND_VERSION_COUNT
+        # is at most 4 here. Therefore a simple lookup table is used.
+        if (${package}_FIND_VERSION_COUNT EQUAL 1)
+          set(version_regex "[^.]*")
+        elseif (${package}_FIND_VERSION_COUNT EQUAL 2)
+          set(version_regex "[^.]*\\.[^.]*")
+        elseif (${package}_FIND_VERSION_COUNT EQUAL 3)
+          set(version_regex "[^.]*\\.[^.]*\\.[^.]*")
+        else()
+          set(version_regex "[^.]*\\.[^.]*\\.[^.]*\\.[^.]*")
+        endif()
+        string(REGEX REPLACE "^(${version_regex})\\..*" "\\1" version_head "${version}")
+        if (NOT ${package}_FIND_VERSION VERSION_EQUAL version_head)
+          set(version_msg "Found unsuitable version \"${version}\", but required is exact version \"${${package}_FIND_VERSION}\"")
+        else ()
+          set(version_ok TRUE)
+          set(version_msg "(found suitable exact version \"${_FOUND_VERSION}\")")
+        endif ()
+      else ()
+        if (NOT ${package}_FIND_VERSION VERSION_EQUAL version)
+          set(version_msg "Found unsuitable version \"${version}\", but required is exact version \"${${package}_FIND_VERSION}\"")
+        else ()
+          set(version_ok TRUE)
+          set(version_msg "(found suitable exact version \"${version}\")")
+        endif ()
+      endif ()
+    else()     # minimum version
+      if (${package}_FIND_VERSION VERSION_GREATER version)
+        set(version_msg "Found unsuitable version \"${version}\", but required is at least \"${${package}_FIND_VERSION}\"")
+      else()
+        set(version_ok TRUE)
+        set(version_msg "(found suitable version \"${version}\", minimum required is \"${${package}_FIND_VERSION}\")")
+      endif()
+    endif()
+  else ()
+    set(version_ok TRUE)
+    set(version_msg "(found version \"${version}\")")
+  endif()
+
+  set (${result} ${version_ok} PARENT_SCOPE)
+  if (FPCV_RESULT_MESSAGE_VARIABLE)
+    set (${FPCV_RESULT_MESSAGE_VARIABLE} "${version_msg}" PARENT_SCOPE)
+  endif()
+endfunction()
+
+
+function(FIND_PACKAGE_HANDLE_STANDARD_ARGS _NAME _FIRST_ARG)
+
+  # Set up the arguments for `cmake_parse_arguments`.
+  set(options  CONFIG_MODE  HANDLE_COMPONENTS NAME_MISMATCHED HANDLE_VERSION_RANGE)
+  set(oneValueArgs  FAIL_MESSAGE  REASON_FAILURE_MESSAGE VERSION_VAR  FOUND_VAR)
+  set(multiValueArgs REQUIRED_VARS)
+
+  # Check whether we are in 'simple' or 'extended' mode:
+  set(_KEYWORDS_FOR_EXTENDED_MODE  ${options} ${oneValueArgs} ${multiValueArgs} )
+  list(FIND _KEYWORDS_FOR_EXTENDED_MODE "${_FIRST_ARG}" INDEX)
+
+  unset(FPHSA_NAME_MISMATCHED_override)
+  if (DEFINED FPHSA_NAME_MISMATCHED)
+    # If the variable NAME_MISMATCHED variable is set, error if it is passed as
+    # an argument. The former is for old signatures, the latter is for new
+    # signatures.
+    list(FIND ARGN "NAME_MISMATCHED" name_mismatched_idx)
+    if (NOT name_mismatched_idx EQUAL "-1")
+      message(FATAL_ERROR
+        "The `NAME_MISMATCHED` argument may only be specified by the argument or "
+        "the variable, not both.")
+    endif ()
+
+    # But use the variable if it is not an argument to avoid forcing minimum
+    # CMake version bumps for calling modules.
+    set(FPHSA_NAME_MISMATCHED_override "${FPHSA_NAME_MISMATCHED}")
+  endif ()
+
+  if(${INDEX} EQUAL -1)
+    set(FPHSA_FAIL_MESSAGE ${_FIRST_ARG})
+    set(FPHSA_REQUIRED_VARS ${ARGN})
+    set(FPHSA_VERSION_VAR)
+  else()
+    cmake_parse_arguments(FPHSA "${options}" "${oneValueArgs}" "${multiValueArgs}"  ${_FIRST_ARG} ${ARGN})
+
+    if(FPHSA_UNPARSED_ARGUMENTS)
+      message(FATAL_ERROR "Unknown keywords given to FIND_PACKAGE_HANDLE_STANDARD_ARGS(): \"${FPHSA_UNPARSED_ARGUMENTS}\"")
+    endif()
+
+    if(NOT FPHSA_FAIL_MESSAGE)
+      set(FPHSA_FAIL_MESSAGE  "DEFAULT_MSG")
+    endif()
+
+    # In config-mode, we rely on the variable <PackageName>_CONFIG, which is set by find_package()
+    # when it successfully found the config-file, including version checking:
+    if(FPHSA_CONFIG_MODE)
+      list(INSERT FPHSA_REQUIRED_VARS 0 ${_NAME}_CONFIG)
+      list(REMOVE_DUPLICATES FPHSA_REQUIRED_VARS)
+      set(FPHSA_VERSION_VAR ${_NAME}_VERSION)
+    endif()
+
+    if(NOT FPHSA_REQUIRED_VARS AND NOT FPHSA_HANDLE_COMPONENTS)
+      message(FATAL_ERROR "No REQUIRED_VARS specified for FIND_PACKAGE_HANDLE_STANDARD_ARGS()")
+    endif()
+  endif()
+
+  if (DEFINED FPHSA_NAME_MISMATCHED_override)
+    set(FPHSA_NAME_MISMATCHED "${FPHSA_NAME_MISMATCHED_override}")
+  endif ()
+
+  if (DEFINED CMAKE_FIND_PACKAGE_NAME
+      AND NOT FPHSA_NAME_MISMATCHED
+      AND NOT _NAME STREQUAL CMAKE_FIND_PACKAGE_NAME)
+    message(AUTHOR_WARNING
+      "The package name passed to `find_package_handle_standard_args` "
+      "(${_NAME}) does not match the name of the calling package "
+      "(${CMAKE_FIND_PACKAGE_NAME}). This can lead to problems in calling "
+      "code that expects `find_package` result variables (e.g., `_FOUND`) "
+      "to follow a certain pattern.")
+  endif ()
+
+  if (${_NAME}_FIND_VERSION_RANGE AND NOT FPHSA_HANDLE_VERSION_RANGE)
+    message(AUTHOR_WARNING
+      "`find_package()` specify a version range but the module ${_NAME} does "
+      "not support this capability. Only the lower endpoint of the range "
+      "will be used.")
+  endif()
+
+  # to propagate package name to FIND_PACKAGE_CHECK_VERSION
+  set(_CMAKE_FPHSA_PACKAGE_NAME "${_NAME}")
+
+  # now that we collected all arguments, process them
+
+  if("x${FPHSA_FAIL_MESSAGE}" STREQUAL "xDEFAULT_MSG")
+    set(FPHSA_FAIL_MESSAGE "Could NOT find ${_NAME}")
+  endif()
+
+  if (FPHSA_REQUIRED_VARS)
+    list(GET FPHSA_REQUIRED_VARS 0 _FIRST_REQUIRED_VAR)
+  endif()
+
+  string(TOUPPER ${_NAME} _NAME_UPPER)
+  string(TOLOWER ${_NAME} _NAME_LOWER)
+
+  if(FPHSA_FOUND_VAR)
+    set(_FOUND_VAR_UPPER ${_NAME_UPPER}_FOUND)
+    set(_FOUND_VAR_MIXED ${_NAME}_FOUND)
+    if(FPHSA_FOUND_VAR STREQUAL _FOUND_VAR_MIXED  OR  FPHSA_FOUND_VAR STREQUAL _FOUND_VAR_UPPER)
+      set(_FOUND_VAR ${FPHSA_FOUND_VAR})
+    else()
+      message(FATAL_ERROR "The argument for FOUND_VAR is \"${FPHSA_FOUND_VAR}\", but only \"${_FOUND_VAR_MIXED}\" and \"${_FOUND_VAR_UPPER}\" are valid names.")
+    endif()
+  else()
+    set(_FOUND_VAR ${_NAME_UPPER}_FOUND)
+  endif()
+
+  # collect all variables which were not found, so they can be printed, so the
+  # user knows better what went wrong (#6375)
+  set(MISSING_VARS "")
+  set(DETAILS "")
+  # check if all passed variables are valid
+  set(FPHSA_FOUND_${_NAME} TRUE)
+  foreach(_CURRENT_VAR ${FPHSA_REQUIRED_VARS})
+    if(NOT ${_CURRENT_VAR})
+      set(FPHSA_FOUND_${_NAME} FALSE)
+      string(APPEND MISSING_VARS " ${_CURRENT_VAR}")
+    else()
+      string(APPEND DETAILS "[${${_CURRENT_VAR}}]")
+    endif()
+  endforeach()
+  if(FPHSA_FOUND_${_NAME})
+    set(${_NAME}_FOUND TRUE)
+    set(${_NAME_UPPER}_FOUND TRUE)
+  else()
+    set(${_NAME}_FOUND FALSE)
+    set(${_NAME_UPPER}_FOUND FALSE)
+  endif()
+
+  # component handling
+  unset(FOUND_COMPONENTS_MSG)
+  unset(MISSING_COMPONENTS_MSG)
+
+  if(FPHSA_HANDLE_COMPONENTS)
+    foreach(comp ${${_NAME}_FIND_COMPONENTS})
+      if(${_NAME}_${comp}_FOUND)
+
+        if(NOT DEFINED FOUND_COMPONENTS_MSG)
+          set(FOUND_COMPONENTS_MSG "found components:")
+        endif()
+        string(APPEND FOUND_COMPONENTS_MSG " ${comp}")
+
+      else()
+
+        if(NOT DEFINED MISSING_COMPONENTS_MSG)
+          set(MISSING_COMPONENTS_MSG "missing components:")
+        endif()
+        string(APPEND MISSING_COMPONENTS_MSG " ${comp}")
+
+        if(${_NAME}_FIND_REQUIRED_${comp})
+          set(${_NAME}_FOUND FALSE)
+          string(APPEND MISSING_VARS " ${comp}")
+        endif()
+
+      endif()
+    endforeach()
+    set(COMPONENT_MSG "${FOUND_COMPONENTS_MSG} ${MISSING_COMPONENTS_MSG}")
+    string(APPEND DETAILS "[c${COMPONENT_MSG}]")
+  endif()
+
+  # version handling:
+  set(VERSION_MSG "")
+  set(VERSION_OK TRUE)
+
+  # check with DEFINED here as the requested or found version may be "0"
+  if (DEFINED ${_NAME}_FIND_VERSION)
+    if(DEFINED ${FPHSA_VERSION_VAR})
+      set(_FOUND_VERSION ${${FPHSA_VERSION_VAR}})
+      if (FPHSA_HANDLE_VERSION_RANGE)
+        set (FPCV_HANDLE_VERSION_RANGE HANDLE_VERSION_RANGE)
+      else()
+        set(FPCV_HANDLE_VERSION_RANGE NO_AUTHOR_WARNING_VERSION_RANGE)
+      endif()
+      find_package_check_version ("${_FOUND_VERSION}" VERSION_OK RESULT_MESSAGE_VARIABLE VERSION_MSG
+        ${FPCV_HANDLE_VERSION_RANGE})
+    else()
+      # if the package was not found, but a version was given, add that to the output:
+      if(${_NAME}_FIND_VERSION_EXACT)
+        set(VERSION_MSG "(Required is exact version \"${${_NAME}_FIND_VERSION}\")")
+      elseif (FPHSA_HANDLE_VERSION_RANGE AND ${_NAME}_FIND_VERSION_RANGE)
+        set(VERSION_MSG "(Required is version range \"${${_NAME}_FIND_VERSION_RANGE}\")")
+      else()
+        set(VERSION_MSG "(Required is at least version \"${${_NAME}_FIND_VERSION}\")")
+      endif()
+    endif()
+  else ()
+    # Check with DEFINED as the found version may be 0.
+    if(DEFINED ${FPHSA_VERSION_VAR})
+      set(VERSION_MSG "(found version \"${${FPHSA_VERSION_VAR}}\")")
+    endif()
+  endif ()
+
+  if(VERSION_OK)
+    string(APPEND DETAILS "[v${${FPHSA_VERSION_VAR}}(${${_NAME}_FIND_VERSION})]")
+  else()
+    set(${_NAME}_FOUND FALSE)
+  endif()
+
+
+  # print the result:
+  if (${_NAME}_FOUND)
+    FIND_PACKAGE_MESSAGE(${_NAME} "Found ${_NAME}: ${${_FIRST_REQUIRED_VAR}} ${VERSION_MSG} ${COMPONENT_MSG}" "${DETAILS}")
+  else ()
+
+    if(FPHSA_CONFIG_MODE)
+      _FPHSA_HANDLE_FAILURE_CONFIG_MODE()
+    else()
+      if(NOT VERSION_OK)
+        set(RESULT_MSG)
+        if (_FIRST_REQUIRED_VAR)
+          string (APPEND RESULT_MSG "found ${${_FIRST_REQUIRED_VAR}}")
+        endif()
+        if (COMPONENT_MSG)
+          if (RESULT_MSG)
+            string (APPEND RESULT_MSG ", ")
+          endif()
+          string (APPEND RESULT_MSG "${FOUND_COMPONENTS_MSG}")
+        endif()
+        _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: ${VERSION_MSG} (${RESULT_MSG})")
+      else()
+        _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE} (missing:${MISSING_VARS}) ${VERSION_MSG}")
+      endif()
+    endif()
+
+  endif ()
+
+  set(${_NAME}_FOUND ${${_NAME}_FOUND} PARENT_SCOPE)
+  set(${_NAME_UPPER}_FOUND ${${_NAME}_FOUND} PARENT_SCOPE)
+endfunction()
+
+
+cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/FindPackageMessage.cmake b/share/cmake-3.22/Modules/FindPackageMessage.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindPackageMessage.cmake
rename to share/cmake-3.22/Modules/FindPackageMessage.cmake
diff --git a/share/cmake-3.22/Modules/FindPatch.cmake b/share/cmake-3.22/Modules/FindPatch.cmake
new file mode 100644
index 0000000..f4fe4a6
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindPatch.cmake
@@ -0,0 +1,71 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindPatch
+---------
+
+.. versionadded:: 3.10
+
+The module defines the following variables:
+
+``Patch_EXECUTABLE``
+  Path to patch command-line executable.
+``Patch_FOUND``
+  True if the patch command-line executable was found.
+
+The following :prop_tgt:`IMPORTED` targets are also defined:
+
+``Patch::patch``
+  The command-line executable.
+
+Example usage:
+
+.. code-block:: cmake
+
+   find_package(Patch)
+   if(Patch_FOUND)
+     message("Patch found: ${Patch_EXECUTABLE}")
+   endif()
+#]=======================================================================]
+
+set(_doc "Patch command line executable")
+set(_patch_path )
+
+if(CMAKE_HOST_WIN32)
+  set(_patch_path
+    "$ENV{LOCALAPPDATA}/Programs/Git/bin"
+    "$ENV{LOCALAPPDATA}/Programs/Git/usr/bin"
+    "$ENV{APPDATA}/Programs/Git/bin"
+    "$ENV{APPDATA}/Programs/Git/usr/bin"
+    )
+endif()
+
+# First search the PATH
+find_program(Patch_EXECUTABLE
+  NAMES patch
+  PATHS ${_patch_path}
+  DOC ${_doc}
+  )
+
+if(CMAKE_HOST_WIN32)
+  # Now look for installations in Git/ directories under typical installation
+  # prefixes on Windows.
+  find_program(Patch_EXECUTABLE
+    NAMES patch
+    PATH_SUFFIXES Git/usr/bin Git/bin GnuWin32/bin
+    DOC ${_doc}
+    )
+endif()
+
+if(Patch_EXECUTABLE AND NOT TARGET Patch::patch)
+  add_executable(Patch::patch IMPORTED)
+  set_property(TARGET Patch::patch PROPERTY IMPORTED_LOCATION ${Patch_EXECUTABLE})
+endif()
+
+unset(_patch_path)
+unset(_doc)
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+find_package_handle_standard_args(Patch
+                                  REQUIRED_VARS Patch_EXECUTABLE)
diff --git a/share/cmake-3.22/Modules/FindPerl.cmake b/share/cmake-3.22/Modules/FindPerl.cmake
new file mode 100644
index 0000000..26962df
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindPerl.cmake
@@ -0,0 +1,89 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindPerl
+--------
+
+Find perl
+
+this module looks for Perl
+
+::
+
+  PERL_EXECUTABLE     - the full path to perl
+  PERL_FOUND          - If false, don't attempt to use perl.
+  PERL_VERSION_STRING - version of perl found (since CMake 2.8.8)
+#]=======================================================================]
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindCygwin.cmake)
+include(${CMAKE_CURRENT_LIST_DIR}/FindMsys.cmake)
+
+set(PERL_POSSIBLE_BIN_PATHS
+  ${CYGWIN_INSTALL_PATH}/bin
+  ${MSYS_INSTALL_PATH}/usr/bin
+  )
+
+if(WIN32)
+  get_filename_component(
+    ActivePerl_CurrentVersion
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActivePerl;CurrentVersion]"
+    NAME)
+  set(PERL_POSSIBLE_BIN_PATHS ${PERL_POSSIBLE_BIN_PATHS}
+    "C:/Perl/bin"
+    "C:/Strawberry/perl/bin"
+    [HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActivePerl\\${ActivePerl_CurrentVersion}]/bin
+    )
+endif()
+
+find_program(PERL_EXECUTABLE
+  NAMES perl
+  PATHS ${PERL_POSSIBLE_BIN_PATHS}
+  )
+
+if(PERL_EXECUTABLE)
+  ### PERL_VERSION
+  execute_process(
+    COMMAND
+      ${PERL_EXECUTABLE} -V:version
+      OUTPUT_VARIABLE
+        PERL_VERSION_OUTPUT_VARIABLE
+      RESULT_VARIABLE
+        PERL_VERSION_RESULT_VARIABLE
+      ERROR_QUIET
+      OUTPUT_STRIP_TRAILING_WHITESPACE
+  )
+  if(NOT PERL_VERSION_RESULT_VARIABLE AND NOT PERL_VERSION_OUTPUT_VARIABLE MATCHES "^version='UNKNOWN'")
+    string(REGEX REPLACE "version='([^']+)'.*" "\\1" PERL_VERSION_STRING ${PERL_VERSION_OUTPUT_VARIABLE})
+  else()
+    execute_process(
+      COMMAND ${PERL_EXECUTABLE} -v
+      OUTPUT_VARIABLE PERL_VERSION_OUTPUT_VARIABLE
+      RESULT_VARIABLE PERL_VERSION_RESULT_VARIABLE
+      ERROR_QUIET
+      OUTPUT_STRIP_TRAILING_WHITESPACE
+    )
+    if(NOT PERL_VERSION_RESULT_VARIABLE AND PERL_VERSION_OUTPUT_VARIABLE MATCHES "This is perl.*[ \\(]v([0-9\\._]+)[ \\)]")
+      set(PERL_VERSION_STRING "${CMAKE_MATCH_1}")
+    elseif(NOT PERL_VERSION_RESULT_VARIABLE AND PERL_VERSION_OUTPUT_VARIABLE MATCHES "This is perl, version ([0-9\\._]+) +")
+      set(PERL_VERSION_STRING "${CMAKE_MATCH_1}")
+    endif()
+  endif()
+endif()
+
+# Deprecated settings for compatibility with CMake1.4
+set(PERL ${PERL_EXECUTABLE})
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+if (CMAKE_FIND_PACKAGE_NAME STREQUAL "PerlLibs")
+  # FindPerlLibs include()'s this module. It's an old pattern, but rather than
+  # trying to suppress this from outside the module (which is then sensitive to
+  # the contents, detect the case in this module and suppress it explicitly.
+  set(FPHSA_NAME_MISMATCHED 1)
+endif ()
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(Perl
+                                  REQUIRED_VARS PERL_EXECUTABLE
+                                  VERSION_VAR PERL_VERSION_STRING)
+unset(FPHSA_NAME_MISMATCHED)
+
+mark_as_advanced(PERL_EXECUTABLE)
diff --git a/share/cmake-3.22/Modules/FindPerlLibs.cmake b/share/cmake-3.22/Modules/FindPerlLibs.cmake
new file mode 100644
index 0000000..d576b86
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindPerlLibs.cmake
@@ -0,0 +1,162 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindPerlLibs
+------------
+
+Find Perl libraries
+
+This module finds if PERL is installed and determines where the
+include files and libraries are.  It also determines what the name of
+the library is.  This code sets the following variables:
+
+::
+
+  PERLLIBS_FOUND    = True if perl.h & libperl were found
+  PERL_INCLUDE_PATH = path to where perl.h is found
+  PERL_LIBRARY      = path to libperl
+  PERL_EXECUTABLE   = full path to the perl binary
+
+
+
+The minimum required version of Perl can be specified using the
+standard syntax, e.g.  find_package(PerlLibs 6.0)
+
+::
+
+  The following variables are also available if needed
+  (introduced after CMake 2.6.4)
+
+
+
+::
+
+  PERL_SITESEARCH     = path to the sitesearch install dir (-V:installsitesearch)
+  PERL_SITEARCH       = path to the sitelib install directory (-V:installsitearch)
+  PERL_SITELIB        = path to the sitelib install directory (-V:installsitelib)
+  PERL_VENDORARCH     = path to the vendor arch install directory (-V:installvendorarch)
+  PERL_VENDORLIB      = path to the vendor lib install directory (-V:installvendorlib)
+  PERL_ARCHLIB        = path to the core arch lib install directory (-V:archlib)
+  PERL_PRIVLIB        = path to the core priv lib install directory (-V:privlib)
+  PERL_UPDATE_ARCHLIB = path to the update arch lib install directory (-V:installarchlib)
+  PERL_UPDATE_PRIVLIB = path to the update priv lib install directory (-V:installprivlib)
+  PERL_EXTRA_C_FLAGS = Compilation flags used to build perl
+#]=======================================================================]
+
+# find the perl executable
+include(${CMAKE_CURRENT_LIST_DIR}/FindPerl.cmake)
+
+if (PERL_EXECUTABLE)
+
+  function (perl_get_info _pgi_info tag)
+    cmake_parse_arguments(_PGI "IS_PATH" "" "" ${ARGN})
+
+    set (${_pgi_info} NOTFOUND PARENT_SCOPE)
+
+    execute_process(COMMAND "${PERL_EXECUTABLE}" -V:${tag}
+      OUTPUT_VARIABLE result
+      RESULT_VARIABLE status)
+
+    if (NOT status)
+      string(REGEX REPLACE "${tag}='([^']*)'.*" "\\1" result "${result}")
+      if (_PGI_IS_PATH)
+        file(TO_CMAKE_PATH "${result}" result)
+      endif()
+      set (${_pgi_info} "${result}" PARENT_SCOPE)
+    endif ()
+  endfunction()
+
+  ### PERL_PREFIX
+  perl_get_info(PERL_PREFIX prefix IS_PATH)
+
+  ### PERL_ARCHNAME
+  perl_get_info(PERL_ARCHNAME archname)
+
+  ### PERL_EXTRA_C_FLAGS
+  perl_get_info(PERL_EXTRA_C_FLAGS cppflags)
+
+  ### PERL_SITESEARCH
+  perl_get_info(PERL_SITESEARCH installsitesearch IS_PATH)
+
+  ### PERL_SITEARCH
+  perl_get_info(PERL_SITEARCH installsitearch IS_PATH)
+
+  ### PERL_SITELIB
+  perl_get_info(PERL_SITELIB installsitelib IS_PATH)
+
+  ### PERL_VENDORARCH
+  perl_get_info(PERL_VENDORARCH installvendorarch IS_PATH)
+
+  ### PERL_VENDORLIB
+  perl_get_info(PERL_VENDORLIB installvendorlib IS_PATH)
+
+  ### PERL_ARCHLIB
+  perl_get_info(PERL_ARCHLIB archlib IS_PATH)
+
+  ### PERL_PRIVLIB
+  perl_get_info(PERL_PRIVLIB privlib IS_PATH)
+
+  ### PERL_UPDATE_ARCHLIB
+  perl_get_info(PERL_UPDATE_ARCHLIB installarchlib IS_PATH)
+
+  ### PERL_UPDATE_PRIVLIB
+  perl_get_info(PERL_UPDATE_PRIVLIB installprivlib IS_PATH)
+
+  ### PERL_POSSIBLE_LIBRARY_NAMES
+  perl_get_info(PERL_POSSIBLE_LIBRARY_NAMES libperl)
+  if (NOT PERL_POSSIBLE_LIBRARY_NAMES)
+    set(PERL_POSSIBLE_LIBRARY_NAMES perl${PERL_VERSION_STRING} perl)
+  endif()
+  if(CMAKE_SYSTEM_NAME MATCHES "CYGWIN")
+    list (APPEND PERL_POSSIBLE_LIBRARY_NAMES perl${PERL_VERSION_STRING})
+  endif()
+  if (CMAKE_SYSTEM_NAME MATCHES "MSYS|CYGWIN")
+    # on MSYS and CYGWIN environments, current perl -V:libperl gives shared library name
+    # rather than the import library. So, extends possible library names
+    list (APPEND PERL_POSSIBLE_LIBRARY_NAMES perl)
+  endif()
+
+  ### PERL_INCLUDE_PATH
+  find_path(PERL_INCLUDE_PATH
+    NAMES
+      perl.h
+    PATHS
+      "${PERL_UPDATE_ARCHLIB}/CORE"
+      "${PERL_ARCHLIB}/CORE"
+      /usr/lib/perl5/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
+      /usr/lib/perl/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
+      /usr/lib/perl5/${PERL_VERSION_STRING}/CORE
+      /usr/lib/perl/${PERL_VERSION_STRING}/CORE
+  )
+
+  ### PERL_LIBRARY
+  find_library(PERL_LIBRARY
+    NAMES
+      ${PERL_POSSIBLE_LIBRARY_NAMES}
+    PATHS
+      "${PERL_UPDATE_ARCHLIB}/CORE"
+      "${PERL_ARCHLIB}/CORE"
+      /usr/lib/perl5/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
+      /usr/lib/perl/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
+      /usr/lib/perl5/${PERL_VERSION_STRING}/CORE
+      /usr/lib/perl/${PERL_VERSION_STRING}/CORE
+  )
+
+endif ()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+find_package_handle_standard_args(PerlLibs REQUIRED_VARS PERL_LIBRARY PERL_INCLUDE_PATH
+                                           VERSION_VAR PERL_VERSION_STRING)
+
+# Introduced after CMake 2.6.4 to bring module into compliance
+set(PERL_INCLUDE_DIR  ${PERL_INCLUDE_PATH})
+set(PERL_INCLUDE_DIRS ${PERL_INCLUDE_PATH})
+set(PERL_LIBRARIES    ${PERL_LIBRARY})
+# For backward compatibility with CMake before 2.8.8
+set(PERL_VERSION ${PERL_VERSION_STRING})
+
+mark_as_advanced(
+  PERL_INCLUDE_PATH
+  PERL_LIBRARY
+)
diff --git a/share/cmake-3.18/Modules/FindPhysFS.cmake b/share/cmake-3.22/Modules/FindPhysFS.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindPhysFS.cmake
rename to share/cmake-3.22/Modules/FindPhysFS.cmake
diff --git a/share/cmake-3.18/Modules/FindPike.cmake b/share/cmake-3.22/Modules/FindPike.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindPike.cmake
rename to share/cmake-3.22/Modules/FindPike.cmake
diff --git a/share/cmake-3.22/Modules/FindPkgConfig.cmake b/share/cmake-3.22/Modules/FindPkgConfig.cmake
new file mode 100644
index 0000000..547bc52
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindPkgConfig.cmake
@@ -0,0 +1,982 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[========================================[.rst:
+FindPkgConfig
+-------------
+
+A ``pkg-config`` module for CMake.
+
+Finds the ``pkg-config`` executable and adds the :command:`pkg_get_variable`,
+:command:`pkg_check_modules` and :command:`pkg_search_module` commands. The
+following variables will also be set:
+
+``PKG_CONFIG_FOUND``
+  True if a pkg-config executable was found.
+
+``PKG_CONFIG_VERSION_STRING``
+  .. versionadded:: 2.8.8
+
+  The version of pkg-config that was found.
+
+``PKG_CONFIG_EXECUTABLE``
+  The pathname of the pkg-config program.
+
+``PKG_CONFIG_ARGN``
+  .. versionadded:: 3.22
+
+  A list of arguments to pass to pkg-config.
+
+Both ``PKG_CONFIG_EXECUTABLE`` and ``PKG_CONFIG_ARGN`` are initialized by the
+module, but may be overridden by the user.  See `Variables Affecting Behavior`_
+for how these variables are initialized.
+
+#]========================================]
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0054 NEW) # if() quoted variables not dereferenced
+cmake_policy(SET CMP0057 NEW) # if IN_LIST
+
+### Common stuff ####
+set(PKG_CONFIG_VERSION 1)
+
+# find pkg-config, use PKG_CONFIG if set
+if((NOT PKG_CONFIG_EXECUTABLE) AND (NOT "$ENV{PKG_CONFIG}" STREQUAL ""))
+  separate_arguments(PKG_CONFIG_FROM_ENV_SPLIT NATIVE_COMMAND PROGRAM SEPARATE_ARGS "$ENV{PKG_CONFIG}")
+  list(LENGTH PKG_CONFIG_FROM_ENV_SPLIT PKG_CONFIG_FROM_ENV_SPLIT_ARGC)
+  if(PKG_CONFIG_FROM_ENV_SPLIT_ARGC GREATER 0)
+    list(GET PKG_CONFIG_FROM_ENV_SPLIT 0 PKG_CONFIG_FROM_ENV_ARGV0)
+    if(PKG_CONFIG_FROM_ENV_SPLIT_ARGC GREATER 1)
+      list(SUBLIST PKG_CONFIG_FROM_ENV_SPLIT 1 -1 PKG_CONFIG_ARGN)
+    endif()
+    set(PKG_CONFIG_EXECUTABLE "${PKG_CONFIG_FROM_ENV_ARGV0}" CACHE FILEPATH "pkg-config executable")
+  endif()
+endif()
+
+set(PKG_CONFIG_NAMES "pkg-config")
+if(CMAKE_HOST_WIN32)
+  list(PREPEND PKG_CONFIG_NAMES "pkg-config.bat")
+endif()
+list(APPEND PKG_CONFIG_NAMES "pkgconf")
+
+find_program(PKG_CONFIG_EXECUTABLE
+  NAMES ${PKG_CONFIG_NAMES}
+  NAMES_PER_DIR
+  DOC "pkg-config executable")
+mark_as_advanced(PKG_CONFIG_EXECUTABLE)
+
+set(PKG_CONFIG_ARGN "${PKG_CONFIG_ARGN}" CACHE STRING "Arguments to supply to pkg-config")
+mark_as_advanced(PKG_CONFIG_ARGN)
+
+set(_PKG_CONFIG_FAILURE_MESSAGE "")
+if (PKG_CONFIG_EXECUTABLE)
+  execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} ${PKG_CONFIG_ARGN} --version
+    OUTPUT_VARIABLE PKG_CONFIG_VERSION_STRING OUTPUT_STRIP_TRAILING_WHITESPACE
+    ERROR_VARIABLE _PKG_CONFIG_VERSION_ERROR ERROR_STRIP_TRAILING_WHITESPACE
+    RESULT_VARIABLE _PKG_CONFIG_VERSION_RESULT
+    )
+
+  if (NOT _PKG_CONFIG_VERSION_RESULT EQUAL 0)
+    string(REPLACE "\n" "\n    " _PKG_CONFIG_VERSION_ERROR "      ${_PKG_CONFIG_VERSION_ERROR}")
+    if(PKG_CONFIG_ARGN)
+      string(REPLACE ";" " " PKG_CONFIG_ARGN " ${PKG_CONFIG_ARGN}")
+    endif()
+    string(APPEND _PKG_CONFIG_FAILURE_MESSAGE
+      "The command\n"
+      "      \"${PKG_CONFIG_EXECUTABLE}\"${PKG_CONFIG_ARGN} --version\n"
+      "    failed with output:\n${PKG_CONFIG_VERSION_STRING}\n"
+      "    stderr: \n${_PKG_CONFIG_VERSION_ERROR}\n"
+      "    result: \n${_PKG_CONFIG_VERSION_RESULT}"
+      )
+    set(PKG_CONFIG_EXECUTABLE "")
+    set(PKG_CONFIG_ARGN "")
+    unset(PKG_CONFIG_VERSION_STRING)
+  endif ()
+  unset(_PKG_CONFIG_VERSION_RESULT)
+endif ()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+find_package_handle_standard_args(PkgConfig
+                                  REQUIRED_VARS PKG_CONFIG_EXECUTABLE
+                                  REASON_FAILURE_MESSAGE "${_PKG_CONFIG_FAILURE_MESSAGE}"
+                                  VERSION_VAR PKG_CONFIG_VERSION_STRING)
+
+# This is needed because the module name is "PkgConfig" but the name of
+# this variable has always been PKG_CONFIG_FOUND so this isn't automatically
+# handled by FPHSA.
+set(PKG_CONFIG_FOUND "${PKGCONFIG_FOUND}")
+
+# Unsets the given variables
+macro(_pkgconfig_unset var)
+  # Clear normal variable (possibly set by project code).
+  unset(${var})
+  # Store as cache variable.
+  # FIXME: Add a policy to switch to a normal variable.
+  set(${var} "" CACHE INTERNAL "")
+endmacro()
+
+macro(_pkgconfig_set var value)
+  # Clear normal variable (possibly set by project code).
+  unset(${var})
+  # Store as cache variable.
+  # FIXME: Add a policy to switch to a normal variable.
+  set(${var} ${value} CACHE INTERNAL "")
+endmacro()
+
+# Invokes pkgconfig, cleans up the result and sets variables
+macro(_pkgconfig_invoke _pkglist _prefix _varname _regexp)
+  set(_pkgconfig_invoke_result)
+
+  execute_process(
+    COMMAND ${PKG_CONFIG_EXECUTABLE} ${PKG_CONFIG_ARGN} ${ARGN} ${_pkglist}
+    OUTPUT_VARIABLE _pkgconfig_invoke_result
+    RESULT_VARIABLE _pkgconfig_failed
+    OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+  if (_pkgconfig_failed)
+    set(_pkgconfig_${_varname} "")
+    _pkgconfig_unset(${_prefix}_${_varname})
+  else()
+    string(REGEX REPLACE "[\r\n]"       " " _pkgconfig_invoke_result "${_pkgconfig_invoke_result}")
+
+    if (NOT ${_regexp} STREQUAL "")
+      string(REGEX REPLACE "${_regexp}" " " _pkgconfig_invoke_result "${_pkgconfig_invoke_result}")
+    endif()
+
+    separate_arguments(_pkgconfig_invoke_result)
+
+    #message(STATUS "  ${_varname} ... ${_pkgconfig_invoke_result}")
+    set(_pkgconfig_${_varname} ${_pkgconfig_invoke_result})
+    _pkgconfig_set(${_prefix}_${_varname} "${_pkgconfig_invoke_result}")
+  endif()
+endmacro()
+
+# Internal version of pkg_get_variable; expects PKG_CONFIG_PATH to already be set
+function (_pkg_get_variable result pkg variable)
+  _pkgconfig_invoke("${pkg}" "prefix" "result" "" "--variable=${variable}")
+  set("${result}"
+    "${prefix_result}"
+    PARENT_SCOPE)
+endfunction ()
+
+# Invokes pkgconfig two times; once without '--static' and once with
+# '--static'
+macro(_pkgconfig_invoke_dyn _pkglist _prefix _varname cleanup_regexp)
+  _pkgconfig_invoke("${_pkglist}" ${_prefix}        ${_varname} "${cleanup_regexp}" ${ARGN})
+  _pkgconfig_invoke("${_pkglist}" ${_prefix} STATIC_${_varname} "${cleanup_regexp}" --static  ${ARGN})
+endmacro()
+
+# Splits given arguments into options and a package list
+macro(_pkgconfig_parse_options _result _is_req _is_silent _no_cmake_path _no_cmake_environment_path _imp_target _imp_target_global)
+  set(${_is_req} 0)
+  set(${_is_silent} 0)
+  set(${_no_cmake_path} 0)
+  set(${_no_cmake_environment_path} 0)
+  set(${_imp_target} 0)
+  set(${_imp_target_global} 0)
+  if(DEFINED PKG_CONFIG_USE_CMAKE_PREFIX_PATH)
+    if(NOT PKG_CONFIG_USE_CMAKE_PREFIX_PATH)
+      set(${_no_cmake_path} 1)
+      set(${_no_cmake_environment_path} 1)
+    endif()
+  elseif(CMAKE_MINIMUM_REQUIRED_VERSION VERSION_LESS 3.1)
+    set(${_no_cmake_path} 1)
+    set(${_no_cmake_environment_path} 1)
+  endif()
+
+  foreach(_pkg ${ARGN})
+    if (_pkg STREQUAL "REQUIRED")
+      set(${_is_req} 1)
+    endif ()
+    if (_pkg STREQUAL "QUIET")
+      set(${_is_silent} 1)
+    endif ()
+    if (_pkg STREQUAL "NO_CMAKE_PATH")
+      set(${_no_cmake_path} 1)
+    endif()
+    if (_pkg STREQUAL "NO_CMAKE_ENVIRONMENT_PATH")
+      set(${_no_cmake_environment_path} 1)
+    endif()
+    if (_pkg STREQUAL "IMPORTED_TARGET")
+      set(${_imp_target} 1)
+    endif()
+    if (_pkg STREQUAL "GLOBAL")
+      set(${_imp_target_global} 1)
+    endif()
+  endforeach()
+
+  if (${_imp_target_global} AND NOT ${_imp_target})
+    message(SEND_ERROR "the argument GLOBAL may only be used together with IMPORTED_TARGET")
+  endif()
+
+  set(${_result} ${ARGN})
+  list(REMOVE_ITEM ${_result} "REQUIRED")
+  list(REMOVE_ITEM ${_result} "QUIET")
+  list(REMOVE_ITEM ${_result} "NO_CMAKE_PATH")
+  list(REMOVE_ITEM ${_result} "NO_CMAKE_ENVIRONMENT_PATH")
+  list(REMOVE_ITEM ${_result} "IMPORTED_TARGET")
+  list(REMOVE_ITEM ${_result} "GLOBAL")
+endmacro()
+
+# Add the content of a variable or an environment variable to a list of
+# paths
+# Usage:
+#  - _pkgconfig_add_extra_path(_extra_paths VAR)
+#  - _pkgconfig_add_extra_path(_extra_paths ENV VAR)
+function(_pkgconfig_add_extra_path _extra_paths_var _var)
+  set(_is_env 0)
+  if(ARGC GREATER 2 AND _var STREQUAL "ENV")
+    set(_var ${ARGV2})
+    set(_is_env 1)
+  endif()
+  if(NOT _is_env)
+    if(NOT "${${_var}}" STREQUAL "")
+      list(APPEND ${_extra_paths_var} ${${_var}})
+    endif()
+  else()
+    if(NOT "$ENV{${_var}}" STREQUAL "")
+      file(TO_CMAKE_PATH "$ENV{${_var}}" _path)
+      list(APPEND ${_extra_paths_var} ${_path})
+      unset(_path)
+    endif()
+  endif()
+  set(${_extra_paths_var} ${${_extra_paths_var}} PARENT_SCOPE)
+endfunction()
+
+# scan the LDFLAGS returned by pkg-config for library directories and
+# libraries, figure out the absolute paths of that libraries in the
+# given directories
+function(_pkg_find_libs _prefix _no_cmake_path _no_cmake_environment_path)
+  unset(_libs)
+  unset(_find_opts)
+
+  # set the options that are used as long as the .pc file does not provide a library
+  # path to look into
+  if(_no_cmake_path)
+    list(APPEND _find_opts "NO_CMAKE_PATH")
+  endif()
+  if(_no_cmake_environment_path)
+    list(APPEND _find_opts "NO_CMAKE_ENVIRONMENT_PATH")
+  endif()
+
+  unset(_search_paths)
+  unset(_next_is_framework)
+  foreach (flag IN LISTS ${_prefix}_LDFLAGS)
+    if (_next_is_framework)
+      list(APPEND _libs "-framework ${flag}")
+      unset(_next_is_framework)
+      continue()
+    endif ()
+    if (flag MATCHES "^-L(.*)")
+      list(APPEND _search_paths ${CMAKE_MATCH_1})
+      continue()
+    endif()
+    if (flag MATCHES "^-l(.*)")
+      set(_pkg_search "${CMAKE_MATCH_1}")
+    else()
+      if (flag STREQUAL "-framework")
+        set(_next_is_framework TRUE)
+      endif ()
+      continue()
+    endif()
+
+    if(_search_paths)
+        # Firstly search in -L paths
+        find_library(pkgcfg_lib_${_prefix}_${_pkg_search}
+                     NAMES ${_pkg_search}
+                     HINTS ${_search_paths} NO_DEFAULT_PATH)
+    endif()
+    find_library(pkgcfg_lib_${_prefix}_${_pkg_search}
+                 NAMES ${_pkg_search}
+                 ${_find_opts})
+    mark_as_advanced(pkgcfg_lib_${_prefix}_${_pkg_search})
+    if(pkgcfg_lib_${_prefix}_${_pkg_search})
+      list(APPEND _libs "${pkgcfg_lib_${_prefix}_${_pkg_search}}")
+    else()
+      list(APPEND _libs ${_pkg_search})
+    endif()
+  endforeach()
+
+  set(${_prefix}_LINK_LIBRARIES "${_libs}" PARENT_SCOPE)
+endfunction()
+
+# create an imported target from all the information returned by pkg-config
+function(_pkg_create_imp_target _prefix _imp_target_global)
+  if (NOT TARGET PkgConfig::${_prefix})
+    if(${_imp_target_global})
+      set(_global_opt "GLOBAL")
+    else()
+      unset(_global_opt)
+    endif()
+    add_library(PkgConfig::${_prefix} INTERFACE IMPORTED ${_global_opt})
+
+    if(${_prefix}_INCLUDE_DIRS)
+      set_property(TARGET PkgConfig::${_prefix} PROPERTY
+                   INTERFACE_INCLUDE_DIRECTORIES "${${_prefix}_INCLUDE_DIRS}")
+    endif()
+    if(${_prefix}_LINK_LIBRARIES)
+      set_property(TARGET PkgConfig::${_prefix} PROPERTY
+                   INTERFACE_LINK_LIBRARIES "${${_prefix}_LINK_LIBRARIES}")
+    endif()
+    if(${_prefix}_LDFLAGS_OTHER)
+      set_property(TARGET PkgConfig::${_prefix} PROPERTY
+                   INTERFACE_LINK_OPTIONS "${${_prefix}_LDFLAGS_OTHER}")
+    endif()
+    if(${_prefix}_CFLAGS_OTHER)
+      set_property(TARGET PkgConfig::${_prefix} PROPERTY
+                   INTERFACE_COMPILE_OPTIONS "${${_prefix}_CFLAGS_OTHER}")
+    endif()
+  endif()
+endfunction()
+
+# recalculate the dynamic output
+# this is a macro and not a function so the result of _pkg_find_libs is automatically propagated
+macro(_pkg_recalculate _prefix _no_cmake_path _no_cmake_environment_path _imp_target _imp_target_global)
+  _pkg_find_libs(${_prefix} ${_no_cmake_path} ${_no_cmake_environment_path})
+  if(${_imp_target})
+    _pkg_create_imp_target(${_prefix} ${_imp_target_global})
+  endif()
+endmacro()
+
+###
+macro(_pkg_set_path_internal)
+  set(_extra_paths)
+
+  if(NOT _no_cmake_path)
+    _pkgconfig_add_extra_path(_extra_paths CMAKE_PREFIX_PATH)
+    _pkgconfig_add_extra_path(_extra_paths CMAKE_FRAMEWORK_PATH)
+    _pkgconfig_add_extra_path(_extra_paths CMAKE_APPBUNDLE_PATH)
+  endif()
+
+  if(NOT _no_cmake_environment_path)
+    _pkgconfig_add_extra_path(_extra_paths ENV CMAKE_PREFIX_PATH)
+    _pkgconfig_add_extra_path(_extra_paths ENV CMAKE_FRAMEWORK_PATH)
+    _pkgconfig_add_extra_path(_extra_paths ENV CMAKE_APPBUNDLE_PATH)
+  endif()
+
+  if(NOT _extra_paths STREQUAL "")
+    # Save the PKG_CONFIG_PATH environment variable, and add paths
+    # from the CMAKE_PREFIX_PATH variables
+    set(_pkgconfig_path_old "$ENV{PKG_CONFIG_PATH}")
+    set(_pkgconfig_path "${_pkgconfig_path_old}")
+    if(NOT _pkgconfig_path STREQUAL "")
+      file(TO_CMAKE_PATH "${_pkgconfig_path}" _pkgconfig_path)
+    endif()
+
+    # Create a list of the possible pkgconfig subfolder (depending on
+    # the system
+    set(_lib_dirs)
+    if(NOT DEFINED CMAKE_SYSTEM_NAME
+        OR (CMAKE_SYSTEM_NAME MATCHES "^(Linux|kFreeBSD|GNU)$"
+            AND NOT CMAKE_CROSSCOMPILING))
+      if(EXISTS "/etc/debian_version") # is this a debian system ?
+        if(CMAKE_LIBRARY_ARCHITECTURE)
+          list(APPEND _lib_dirs "lib/${CMAKE_LIBRARY_ARCHITECTURE}/pkgconfig")
+        endif()
+      else()
+        # not debian, check the FIND_LIBRARY_USE_LIB32_PATHS and FIND_LIBRARY_USE_LIB64_PATHS properties
+        get_property(uselib32 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB32_PATHS)
+        if(uselib32 AND CMAKE_SIZEOF_VOID_P EQUAL 4)
+          list(APPEND _lib_dirs "lib32/pkgconfig")
+        endif()
+        get_property(uselib64 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS)
+        if(uselib64 AND CMAKE_SIZEOF_VOID_P EQUAL 8)
+          list(APPEND _lib_dirs "lib64/pkgconfig")
+        endif()
+        get_property(uselibx32 GLOBAL PROPERTY FIND_LIBRARY_USE_LIBX32_PATHS)
+        if(uselibx32 AND CMAKE_INTERNAL_PLATFORM_ABI STREQUAL "ELF X32")
+          list(APPEND _lib_dirs "libx32/pkgconfig")
+        endif()
+      endif()
+    endif()
+    if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" AND NOT CMAKE_CROSSCOMPILING)
+      list(APPEND _lib_dirs "libdata/pkgconfig")
+    endif()
+    list(APPEND _lib_dirs "lib/pkgconfig")
+    list(APPEND _lib_dirs "share/pkgconfig")
+
+    # Check if directories exist and eventually append them to the
+    # pkgconfig path list
+    foreach(_prefix_dir ${_extra_paths})
+      foreach(_lib_dir ${_lib_dirs})
+        if(EXISTS "${_prefix_dir}/${_lib_dir}")
+          list(APPEND _pkgconfig_path "${_prefix_dir}/${_lib_dir}")
+          list(REMOVE_DUPLICATES _pkgconfig_path)
+        endif()
+      endforeach()
+    endforeach()
+
+    # Prepare and set the environment variable
+    if(NOT _pkgconfig_path STREQUAL "")
+      # remove empty values from the list
+      list(REMOVE_ITEM _pkgconfig_path "")
+      file(TO_NATIVE_PATH "${_pkgconfig_path}" _pkgconfig_path)
+      if(CMAKE_HOST_UNIX)
+        string(REPLACE ";" ":" _pkgconfig_path "${_pkgconfig_path}")
+        string(REPLACE "\\ " " " _pkgconfig_path "${_pkgconfig_path}")
+      endif()
+      set(ENV{PKG_CONFIG_PATH} "${_pkgconfig_path}")
+    endif()
+
+    # Unset variables
+    unset(_lib_dirs)
+    unset(_pkgconfig_path)
+  endif()
+
+  # Tell pkg-config not to strip any -L paths so we can search them all.
+  if(DEFINED ENV{PKG_CONFIG_ALLOW_SYSTEM_LIBS})
+    set(_pkgconfig_allow_system_libs_old "$ENV{PKG_CONFIG_ALLOW_SYSTEM_LIBS}")
+  else()
+    unset(_pkgconfig_allow_system_libs_old)
+  endif()
+  set(ENV{PKG_CONFIG_ALLOW_SYSTEM_LIBS} 0)
+endmacro()
+
+macro(_pkg_restore_path_internal)
+  if(NOT _extra_paths STREQUAL "")
+    # Restore the environment variable
+    set(ENV{PKG_CONFIG_PATH} "${_pkgconfig_path_old}")
+  endif()
+  if(DEFINED _pkgconfig_allow_system_libs_old)
+    set(ENV{PKG_CONFIG_ALLOW_SYSTEM_LIBS} "${_pkgconfig_allow_system_libs_old}")
+    unset(_pkgconfig_allow_system_libs_old)
+  endif()
+
+  unset(_extra_paths)
+  unset(_pkgconfig_path_old)
+endmacro()
+
+# pkg-config returns frameworks in --libs-only-other
+# they need to be in ${_prefix}_LIBRARIES so "-framework a -framework b" does
+# not incorrectly be combined to "-framework a b"
+function(_pkgconfig_extract_frameworks _prefix)
+  set(ldflags "${${_prefix}_LDFLAGS_OTHER}")
+  list(FIND ldflags "-framework" FR_POS)
+  list(LENGTH ldflags LD_LENGTH)
+
+  # reduce length by 1 as we need "-framework" and the next entry
+  math(EXPR LD_LENGTH "${LD_LENGTH} - 1")
+  while (FR_POS GREATER -1 AND LD_LENGTH GREATER FR_POS)
+    list(REMOVE_AT ldflags ${FR_POS})
+    list(GET ldflags ${FR_POS} HEAD)
+    list(REMOVE_AT ldflags ${FR_POS})
+    math(EXPR LD_LENGTH "${LD_LENGTH} - 2")
+
+    list(APPEND LIBS "-framework ${HEAD}")
+
+    list(FIND ldflags "-framework" FR_POS)
+  endwhile ()
+  set(${_prefix}_LIBRARIES ${${_prefix}_LIBRARIES} ${LIBS} PARENT_SCOPE)
+  set(${_prefix}_LDFLAGS_OTHER "${ldflags}" PARENT_SCOPE)
+endfunction()
+
+# pkg-config returns -isystem include directories in --cflags-only-other,
+# depending on the version and if there is a space between -isystem and
+# the actual path
+function(_pkgconfig_extract_isystem _prefix)
+  set(cflags "${${_prefix}_CFLAGS_OTHER}")
+  set(outflags "")
+  set(incdirs "${${_prefix}_INCLUDE_DIRS}")
+
+  set(next_is_isystem FALSE)
+  foreach (THING IN LISTS cflags)
+    # This may filter "-isystem -isystem". That would not work anyway,
+    # so let it happen.
+    if (THING STREQUAL "-isystem")
+      set(next_is_isystem TRUE)
+      continue()
+    endif ()
+    if (next_is_isystem)
+      set(next_is_isystem FALSE)
+      list(APPEND incdirs "${THING}")
+    elseif (THING MATCHES "^-isystem")
+      string(SUBSTRING "${THING}" 8 -1 THING)
+      list(APPEND incdirs "${THING}")
+    else ()
+      list(APPEND outflags "${THING}")
+    endif ()
+  endforeach ()
+  set(${_prefix}_CFLAGS_OTHER "${outflags}" PARENT_SCOPE)
+  set(${_prefix}_INCLUDE_DIRS "${incdirs}" PARENT_SCOPE)
+endfunction()
+
+###
+macro(_pkg_check_modules_internal _is_required _is_silent _no_cmake_path _no_cmake_environment_path _imp_target _imp_target_global _prefix)
+  _pkgconfig_unset(${_prefix}_FOUND)
+  _pkgconfig_unset(${_prefix}_VERSION)
+  _pkgconfig_unset(${_prefix}_PREFIX)
+  _pkgconfig_unset(${_prefix}_INCLUDEDIR)
+  _pkgconfig_unset(${_prefix}_LIBDIR)
+  _pkgconfig_unset(${_prefix}_MODULE_NAME)
+  _pkgconfig_unset(${_prefix}_LIBS)
+  _pkgconfig_unset(${_prefix}_LIBS_L)
+  _pkgconfig_unset(${_prefix}_LIBS_PATHS)
+  _pkgconfig_unset(${_prefix}_LIBS_OTHER)
+  _pkgconfig_unset(${_prefix}_CFLAGS)
+  _pkgconfig_unset(${_prefix}_CFLAGS_I)
+  _pkgconfig_unset(${_prefix}_CFLAGS_OTHER)
+  _pkgconfig_unset(${_prefix}_STATIC_LIBDIR)
+  _pkgconfig_unset(${_prefix}_STATIC_LIBS)
+  _pkgconfig_unset(${_prefix}_STATIC_LIBS_L)
+  _pkgconfig_unset(${_prefix}_STATIC_LIBS_PATHS)
+  _pkgconfig_unset(${_prefix}_STATIC_LIBS_OTHER)
+  _pkgconfig_unset(${_prefix}_STATIC_CFLAGS)
+  _pkgconfig_unset(${_prefix}_STATIC_CFLAGS_I)
+  _pkgconfig_unset(${_prefix}_STATIC_CFLAGS_OTHER)
+
+  # create a better addressable variable of the modules and calculate its size
+  set(_pkg_check_modules_list ${ARGN})
+  list(LENGTH _pkg_check_modules_list _pkg_check_modules_cnt)
+
+  if(PKG_CONFIG_EXECUTABLE)
+    # give out status message telling checked module
+    if (NOT ${_is_silent})
+      if (_pkg_check_modules_cnt EQUAL 1)
+        message(STATUS "Checking for module '${_pkg_check_modules_list}'")
+      else()
+        message(STATUS "Checking for modules '${_pkg_check_modules_list}'")
+      endif()
+    endif()
+
+    set(_pkg_check_modules_packages)
+    set(_pkg_check_modules_failed)
+
+    _pkg_set_path_internal()
+
+    # iterate through module list and check whether they exist and match the required version
+    foreach (_pkg_check_modules_pkg ${_pkg_check_modules_list})
+      set(_pkg_check_modules_exist_query)
+
+      # check whether version is given
+      if (_pkg_check_modules_pkg MATCHES "(.*[^><])(=|[><]=?)(.*)")
+        set(_pkg_check_modules_pkg_name "${CMAKE_MATCH_1}")
+        set(_pkg_check_modules_pkg_op "${CMAKE_MATCH_2}")
+        set(_pkg_check_modules_pkg_ver "${CMAKE_MATCH_3}")
+      else()
+        set(_pkg_check_modules_pkg_name "${_pkg_check_modules_pkg}")
+        set(_pkg_check_modules_pkg_op)
+        set(_pkg_check_modules_pkg_ver)
+      endif()
+
+      _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_VERSION)
+      _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_PREFIX)
+      _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_INCLUDEDIR)
+      _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_LIBDIR)
+
+      list(APPEND _pkg_check_modules_packages    "${_pkg_check_modules_pkg_name}")
+
+      # create the final query which is of the format:
+      # * <pkg-name> > <version>
+      # * <pkg-name> >= <version>
+      # * <pkg-name> = <version>
+      # * <pkg-name> <= <version>
+      # * <pkg-name> < <version>
+      # * --exists <pkg-name>
+      list(APPEND _pkg_check_modules_exist_query --print-errors --short-errors)
+      if (_pkg_check_modules_pkg_op)
+        list(APPEND _pkg_check_modules_exist_query "${_pkg_check_modules_pkg_name} ${_pkg_check_modules_pkg_op} ${_pkg_check_modules_pkg_ver}")
+      else()
+        list(APPEND _pkg_check_modules_exist_query --exists)
+        list(APPEND _pkg_check_modules_exist_query "${_pkg_check_modules_pkg_name}")
+      endif()
+
+      # execute the query
+      execute_process(
+        COMMAND ${PKG_CONFIG_EXECUTABLE} ${PKG_CONFIG_ARGN} ${_pkg_check_modules_exist_query}
+        RESULT_VARIABLE _pkgconfig_retval
+        ERROR_VARIABLE _pkgconfig_error
+        ERROR_STRIP_TRAILING_WHITESPACE)
+
+      # evaluate result and tell failures
+      if (_pkgconfig_retval)
+        if(NOT ${_is_silent})
+          message(STATUS "  ${_pkgconfig_error}")
+        endif()
+
+        set(_pkg_check_modules_failed 1)
+      endif()
+    endforeach()
+
+    if(_pkg_check_modules_failed)
+      # fail when requested
+      if (${_is_required})
+        message(FATAL_ERROR "A required package was not found")
+      endif ()
+    else()
+      # when we are here, we checked whether requested modules
+      # exist. Now, go through them and set variables
+
+      _pkgconfig_set(${_prefix}_FOUND 1)
+      list(LENGTH _pkg_check_modules_packages pkg_count)
+
+      # iterate through all modules again and set individual variables
+      foreach (_pkg_check_modules_pkg ${_pkg_check_modules_packages})
+        # handle case when there is only one package required
+        if (pkg_count EQUAL 1)
+          set(_pkg_check_prefix "${_prefix}")
+        else()
+          set(_pkg_check_prefix "${_prefix}_${_pkg_check_modules_pkg}")
+        endif()
+
+        _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" VERSION    ""   --modversion )
+        pkg_get_variable("${_pkg_check_prefix}_PREFIX" ${_pkg_check_modules_pkg} "prefix")
+        pkg_get_variable("${_pkg_check_prefix}_INCLUDEDIR" ${_pkg_check_modules_pkg} "includedir")
+        pkg_get_variable("${_pkg_check_prefix}_LIBDIR" ${_pkg_check_modules_pkg} "libdir")
+        foreach (variable IN ITEMS PREFIX INCLUDEDIR LIBDIR)
+          _pkgconfig_set("${_pkg_check_prefix}_${variable}" "${${_pkg_check_prefix}_${variable}}")
+        endforeach ()
+          _pkgconfig_set("${_pkg_check_prefix}_MODULE_NAME" "${_pkg_check_modules_pkg}")
+
+        if (NOT ${_is_silent})
+          message(STATUS "  Found ${_pkg_check_modules_pkg}, version ${_pkgconfig_VERSION}")
+        endif ()
+      endforeach()
+
+      # set variables which are combined for multiple modules
+      _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LIBRARIES     "(^| )-l"             --libs-only-l )
+      _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LIBRARY_DIRS  "(^| )-L"             --libs-only-L )
+      _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LDFLAGS       ""                    --libs )
+      _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LDFLAGS_OTHER ""                    --libs-only-other )
+
+      if (APPLE AND "-framework" IN_LIST ${_prefix}_LDFLAGS_OTHER)
+        _pkgconfig_extract_frameworks("${_prefix}")
+      endif()
+
+      _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" INCLUDE_DIRS  "(^| )(-I|-isystem ?)" --cflags-only-I )
+      _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" CFLAGS        ""                    --cflags )
+      _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" CFLAGS_OTHER  ""                    --cflags-only-other )
+
+      if (${_prefix}_CFLAGS_OTHER MATCHES "-isystem")
+        _pkgconfig_extract_isystem("${_prefix}")
+      endif ()
+
+      _pkg_recalculate("${_prefix}" ${_no_cmake_path} ${_no_cmake_environment_path} ${_imp_target} ${_imp_target_global})
+    endif()
+
+    _pkg_restore_path_internal()
+  else()
+    if (${_is_required})
+      message(SEND_ERROR "pkg-config tool not found")
+    endif ()
+  endif()
+endmacro()
+
+
+#[========================================[.rst:
+.. command:: pkg_check_modules
+
+  Checks for all the given modules, setting a variety of result variables in
+  the calling scope.
+
+  .. code-block:: cmake
+
+    pkg_check_modules(<prefix>
+                      [REQUIRED] [QUIET]
+                      [NO_CMAKE_PATH]
+                      [NO_CMAKE_ENVIRONMENT_PATH]
+                      [IMPORTED_TARGET [GLOBAL]]
+                      <moduleSpec> [<moduleSpec>...])
+
+  When the ``REQUIRED`` argument is given, the command will fail with an error
+  if module(s) could not be found.
+
+  When the ``QUIET`` argument is given, no status messages will be printed.
+
+  .. versionadded:: 3.1
+    The :variable:`CMAKE_PREFIX_PATH`,
+    :variable:`CMAKE_FRAMEWORK_PATH`, and :variable:`CMAKE_APPBUNDLE_PATH` cache
+    and environment variables will be added to the ``pkg-config`` search path.
+    The ``NO_CMAKE_PATH`` and ``NO_CMAKE_ENVIRONMENT_PATH`` arguments
+    disable this behavior for the cache variables and environment variables
+    respectively.
+    The :variable:`PKG_CONFIG_USE_CMAKE_PREFIX_PATH` variable set to ``FALSE``
+    disables this behavior globally.
+
+    .. This didn't actually work until 3.3.
+
+  .. versionadded:: 3.6
+    The ``IMPORTED_TARGET`` argument will create an imported target named
+    ``PkgConfig::<prefix>`` that can be passed directly as an argument to
+    :command:`target_link_libraries`.
+
+    .. This didn't actually work until 3.7.
+
+  .. versionadded:: 3.13
+    The ``GLOBAL`` argument will make the
+    imported target available in global scope.
+
+  .. versionadded:: 3.15
+    Non-library linker options reported by ``pkg-config`` are stored in the
+    :prop_tgt:`INTERFACE_LINK_OPTIONS` target property.
+
+  .. versionchanged:: 3.18
+    Include directories specified with ``-isystem`` are stored in the
+    :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` target property.  Previous
+    versions of CMake left them in the :prop_tgt:`INTERFACE_COMPILE_OPTIONS`
+    property.
+
+  Each ``<moduleSpec>`` can be either a bare module name or it can be a
+  module name with a version constraint (operators ``=``, ``<``, ``>``,
+  ``<=`` and ``>=`` are supported).  The following are examples for a module
+  named ``foo`` with various constraints:
+
+  - ``foo`` matches any version.
+  - ``foo<2`` only matches versions before 2.
+  - ``foo>=3.1`` matches any version from 3.1 or later.
+  - ``foo=1.2.3`` requires that foo must be exactly version 1.2.3.
+
+  The following variables may be set upon return.  Two sets of values exist:
+  One for the common case (``<XXX> = <prefix>``) and another for the
+  information ``pkg-config`` provides when called with the ``--static``
+  option (``<XXX> = <prefix>_STATIC``).
+
+  ``<XXX>_FOUND``
+    set to 1 if module(s) exist
+  ``<XXX>_LIBRARIES``
+    only the libraries (without the '-l')
+  ``<XXX>_LINK_LIBRARIES``
+    the libraries and their absolute paths
+  ``<XXX>_LIBRARY_DIRS``
+    the paths of the libraries (without the '-L')
+  ``<XXX>_LDFLAGS``
+    all required linker flags
+  ``<XXX>_LDFLAGS_OTHER``
+    all other linker flags
+  ``<XXX>_INCLUDE_DIRS``
+    the '-I' preprocessor flags (without the '-I')
+  ``<XXX>_CFLAGS``
+    all required cflags
+  ``<XXX>_CFLAGS_OTHER``
+    the other compiler flags
+
+  All but ``<XXX>_FOUND`` may be a :ref:`;-list <CMake Language Lists>` if the
+  associated variable returned from ``pkg-config`` has multiple values.
+
+  .. versionchanged:: 3.18
+    Include directories specified with ``-isystem`` are stored in the
+    ``<XXX>_INCLUDE_DIRS`` variable.  Previous versions of CMake left them
+    in ``<XXX>_CFLAGS_OTHER``.
+
+  There are some special variables whose prefix depends on the number of
+  ``<moduleSpec>`` given.  When there is only one ``<moduleSpec>``,
+  ``<YYY>`` will simply be ``<prefix>``, but if two or more ``<moduleSpec>``
+  items are given, ``<YYY>`` will be ``<prefix>_<moduleName>``.
+
+  ``<YYY>_VERSION``
+    version of the module
+  ``<YYY>_PREFIX``
+    prefix directory of the module
+  ``<YYY>_INCLUDEDIR``
+    include directory of the module
+  ``<YYY>_LIBDIR``
+    lib directory of the module
+
+  .. versionchanged:: 3.8
+    For any given ``<prefix>``, ``pkg_check_modules()`` can be called multiple
+    times with different parameters.  Previous versions of CMake cached and
+    returned the first successful result.
+
+  .. versionchanged:: 3.16
+    If a full path to the found library can't be determined, but it's still
+    visible to the linker, pass it through as ``-l<name>``.  Previous versions
+    of CMake failed in this case.
+
+  Examples:
+
+  .. code-block:: cmake
+
+    pkg_check_modules (GLIB2 glib-2.0)
+
+  Looks for any version of glib2.  If found, the output variable
+  ``GLIB2_VERSION`` will hold the actual version found.
+
+  .. code-block:: cmake
+
+    pkg_check_modules (GLIB2 glib-2.0>=2.10)
+
+  Looks for at least version 2.10 of glib2.  If found, the output variable
+  ``GLIB2_VERSION`` will hold the actual version found.
+
+  .. code-block:: cmake
+
+    pkg_check_modules (FOO glib-2.0>=2.10 gtk+-2.0)
+
+  Looks for both glib2-2.0 (at least version 2.10) and any version of
+  gtk2+-2.0.  Only if both are found will ``FOO`` be considered found.
+  The ``FOO_glib-2.0_VERSION`` and ``FOO_gtk+-2.0_VERSION`` variables will be
+  set to their respective found module versions.
+
+  .. code-block:: cmake
+
+    pkg_check_modules (XRENDER REQUIRED xrender)
+
+  Requires any version of ``xrender``.  Example output variables set by a
+  successful call::
+
+    XRENDER_LIBRARIES=Xrender;X11
+    XRENDER_STATIC_LIBRARIES=Xrender;X11;pthread;Xau;Xdmcp
+#]========================================]
+macro(pkg_check_modules _prefix _module0)
+  _pkgconfig_parse_options(_pkg_modules _pkg_is_required _pkg_is_silent _no_cmake_path _no_cmake_environment_path _imp_target _imp_target_global "${_module0}" ${ARGN})
+  # check cached value
+  if (NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION} OR NOT ${_prefix}_FOUND OR
+      (NOT "${ARGN}" STREQUAL "" AND NOT "${__pkg_config_arguments_${_prefix}}" STREQUAL "${_module0};${ARGN}") OR
+      (    "${ARGN}" STREQUAL "" AND NOT "${__pkg_config_arguments_${_prefix}}" STREQUAL "${_module0}"))
+    _pkg_check_modules_internal("${_pkg_is_required}" "${_pkg_is_silent}" ${_no_cmake_path} ${_no_cmake_environment_path} ${_imp_target} ${_imp_target_global} "${_prefix}" ${_pkg_modules})
+
+    _pkgconfig_set(__pkg_config_checked_${_prefix} ${PKG_CONFIG_VERSION})
+    if (${_prefix}_FOUND)
+      _pkgconfig_set(__pkg_config_arguments_${_prefix} "${_module0};${ARGN}")
+    endif()
+  else()
+    if (${_prefix}_FOUND)
+      _pkg_recalculate("${_prefix}" ${_no_cmake_path} ${_no_cmake_environment_path} ${_imp_target} ${_imp_target_global})
+    endif()
+  endif()
+endmacro()
+
+
+#[========================================[.rst:
+.. command:: pkg_search_module
+
+  The behavior of this command is the same as :command:`pkg_check_modules`,
+  except that rather than checking for all the specified modules, it searches
+  for just the first successful match.
+
+  .. code-block:: cmake
+
+    pkg_search_module(<prefix>
+                      [REQUIRED] [QUIET]
+                      [NO_CMAKE_PATH]
+                      [NO_CMAKE_ENVIRONMENT_PATH]
+                      [IMPORTED_TARGET [GLOBAL]]
+                      <moduleSpec> [<moduleSpec>...])
+
+  .. versionadded:: 3.16
+    If a module is found, the ``<prefix>_MODULE_NAME`` variable will contain the
+    name of the matching module. This variable can be used if you need to run
+    :command:`pkg_get_variable`.
+
+  Example:
+
+  .. code-block:: cmake
+
+    pkg_search_module (BAR libxml-2.0 libxml2 libxml>=2)
+#]========================================]
+macro(pkg_search_module _prefix _module0)
+  _pkgconfig_parse_options(_pkg_modules_alt _pkg_is_required _pkg_is_silent _no_cmake_path _no_cmake_environment_path _imp_target _imp_target_global "${_module0}" ${ARGN})
+  # check cached value
+  if (NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION} OR NOT ${_prefix}_FOUND)
+    set(_pkg_modules_found 0)
+
+    if (NOT ${_pkg_is_silent})
+      message(STATUS "Checking for one of the modules '${_pkg_modules_alt}'")
+    endif ()
+
+    # iterate through all modules and stop at the first working one.
+    foreach(_pkg_alt ${_pkg_modules_alt})
+      if(NOT _pkg_modules_found)
+        _pkg_check_modules_internal(0 1 ${_no_cmake_path} ${_no_cmake_environment_path} ${_imp_target} ${_imp_target_global} "${_prefix}" "${_pkg_alt}")
+      endif()
+
+      if (${_prefix}_FOUND)
+        set(_pkg_modules_found 1)
+        break()
+      endif()
+    endforeach()
+
+    if (NOT ${_prefix}_FOUND)
+      if(${_pkg_is_required})
+        message(SEND_ERROR "None of the required '${_pkg_modules_alt}' found")
+      endif()
+    endif()
+
+    _pkgconfig_set(__pkg_config_checked_${_prefix} ${PKG_CONFIG_VERSION})
+  elseif (${_prefix}_FOUND)
+    _pkg_recalculate("${_prefix}" ${_no_cmake_path} ${_no_cmake_environment_path} ${_imp_target} ${_imp_target_global})
+  endif()
+endmacro()
+
+#[========================================[.rst:
+.. command:: pkg_get_variable
+
+  .. versionadded:: 3.4
+
+  Retrieves the value of a pkg-config variable ``varName`` and stores it in the
+  result variable ``resultVar`` in the calling scope.
+
+  .. code-block:: cmake
+
+    pkg_get_variable(<resultVar> <moduleName> <varName>)
+
+  If ``pkg-config`` returns multiple values for the specified variable,
+  ``resultVar`` will contain a :ref:`;-list <CMake Language Lists>`.
+
+  For example:
+
+  .. code-block:: cmake
+
+    pkg_get_variable(GI_GIRDIR gobject-introspection-1.0 girdir)
+#]========================================]
+function (pkg_get_variable result pkg variable)
+  _pkg_set_path_internal()
+  _pkgconfig_invoke("${pkg}" "prefix" "result" "" "--variable=${variable}")
+  set("${result}"
+    "${prefix_result}"
+    PARENT_SCOPE)
+  _pkg_restore_path_internal()
+endfunction ()
+
+
+#[========================================[.rst:
+Variables Affecting Behavior
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. variable:: PKG_CONFIG_EXECUTABLE
+
+  This cache variable can be set to the path of the pkg-config executable.
+  :command:`find_program` is called internally by the module with this
+  variable.
+
+  .. versionadded:: 3.1
+    The ``PKG_CONFIG`` environment variable can be used as a hint if
+    ``PKG_CONFIG_EXECUTABLE`` has not yet been set.
+
+  .. versionchanged:: 3.22
+    If the ``PKG_CONFIG`` environment variable is set, only the first
+    argument is taken from it when using it as a hint.
+
+.. variable:: PKG_CONFIG_ARGN
+
+  .. versionadded:: 3.22
+
+  This cache variable can be set to a list of arguments to additionally pass
+  to pkg-config if needed. If not provided, it will be initialized from the
+  ``PKG_CONFIG`` environment variable, if set. The first argument in that
+  environment variable is assumed to be the pkg-config program, while all
+  remaining arguments after that are used to initialize ``PKG_CONFIG_ARGN``.
+  If no such environment variable is defined, ``PKG_CONFIG_ARGN`` is
+  initialized to an empty string. The module does not update the variable once
+  it has been set in the cache.
+
+.. variable:: PKG_CONFIG_USE_CMAKE_PREFIX_PATH
+
+  .. versionadded:: 3.1
+
+  Specifies whether :command:`pkg_check_modules` and
+  :command:`pkg_search_module` should add the paths in the
+  :variable:`CMAKE_PREFIX_PATH`, :variable:`CMAKE_FRAMEWORK_PATH` and
+  :variable:`CMAKE_APPBUNDLE_PATH` cache and environment variables to the
+  ``pkg-config`` search path.
+
+  If this variable is not set, this behavior is enabled by default if
+  :variable:`CMAKE_MINIMUM_REQUIRED_VERSION` is 3.1 or later, disabled
+  otherwise.
+#]========================================]
+
+
+### Local Variables:
+### mode: cmake
+### End:
+
+cmake_policy(POP)
diff --git a/share/cmake-3.22/Modules/FindPostgreSQL.cmake b/share/cmake-3.22/Modules/FindPostgreSQL.cmake
new file mode 100644
index 0000000..147071a
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindPostgreSQL.cmake
@@ -0,0 +1,312 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindPostgreSQL
+--------------
+
+Find the PostgreSQL installation.
+
+IMPORTED Targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.14
+
+This module defines :prop_tgt:`IMPORTED` target ``PostgreSQL::PostgreSQL``
+if PostgreSQL has been found.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This module will set the following variables in your project:
+
+``PostgreSQL_FOUND``
+  True if PostgreSQL is found.
+``PostgreSQL_LIBRARIES``
+  the PostgreSQL libraries needed for linking
+``PostgreSQL_INCLUDE_DIRS``
+  the directories of the PostgreSQL headers
+``PostgreSQL_LIBRARY_DIRS``
+  the link directories for PostgreSQL libraries
+``PostgreSQL_VERSION_STRING``
+  the version of PostgreSQL found
+``PostgreSQL_TYPE_INCLUDE_DIR``
+  the directories of the PostgreSQL server headers
+
+Components
+^^^^^^^^^^
+
+This module contains additional ``Server`` component, that forcibly checks
+for the presence of server headers. Note that ``PostgreSQL_TYPE_INCLUDE_DIR``
+is set regardless of the presence of the ``Server`` component in find_package call.
+
+#]=======================================================================]
+
+# ----------------------------------------------------------------------------
+# History:
+# This module is derived from the module originally found in the VTK source tree.
+#
+# ----------------------------------------------------------------------------
+# Note:
+# PostgreSQL_ADDITIONAL_VERSIONS is a variable that can be used to set the
+# version number of the implementation of PostgreSQL.
+# In Windows the default installation of PostgreSQL uses that as part of the path.
+# E.g C:\Program Files\PostgreSQL\8.4.
+# Currently, the following version numbers are known to this module:
+# "11" "10" "9.6" "9.5" "9.4" "9.3" "9.2" "9.1" "9.0" "8.4" "8.3" "8.2" "8.1" "8.0"
+#
+# To use this variable just do something like this:
+# set(PostgreSQL_ADDITIONAL_VERSIONS "9.2" "8.4.4")
+# before calling find_package(PostgreSQL) in your CMakeLists.txt file.
+# This will mean that the versions you set here will be found first in the order
+# specified before the default ones are searched.
+#
+# ----------------------------------------------------------------------------
+# You may need to manually set:
+#  PostgreSQL_INCLUDE_DIR  - the path to where the PostgreSQL include files are.
+#  PostgreSQL_LIBRARY_DIR  - The path to where the PostgreSQL library files are.
+# If FindPostgreSQL.cmake cannot find the include files or the library files.
+#
+# ----------------------------------------------------------------------------
+# The following variables are set if PostgreSQL is found:
+#  PostgreSQL_FOUND         - Set to true when PostgreSQL is found.
+#  PostgreSQL_INCLUDE_DIRS  - Include directories for PostgreSQL
+#  PostgreSQL_LIBRARY_DIRS  - Link directories for PostgreSQL libraries
+#  PostgreSQL_LIBRARIES     - The PostgreSQL libraries.
+#
+# The ``PostgreSQL::PostgreSQL`` imported target is also created.
+#
+# ----------------------------------------------------------------------------
+# If you have installed PostgreSQL in a non-standard location.
+# (Please note that in the following comments, it is assumed that <Your Path>
+# points to the root directory of the include directory of PostgreSQL.)
+# Then you have three options.
+# 1) After CMake runs, set PostgreSQL_INCLUDE_DIR to <Your Path>/include and
+#    PostgreSQL_LIBRARY_DIR to wherever the library pq (or libpq in windows) is
+# 2) Use CMAKE_INCLUDE_PATH to set a path to <Your Path>/PostgreSQL<-version>. This will allow find_path()
+#    to locate PostgreSQL_INCLUDE_DIR by utilizing the PATH_SUFFIXES option. e.g. In your CMakeLists.txt file
+#    set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "<Your Path>/include")
+# 3) Set an environment variable called ${PostgreSQL_ROOT} that points to the root of where you have
+#    installed PostgreSQL, e.g. <Your Path>.
+#
+# ----------------------------------------------------------------------------
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0057 NEW) # if IN_LIST
+
+set(PostgreSQL_INCLUDE_PATH_DESCRIPTION "top-level directory containing the PostgreSQL include directories. E.g /usr/local/include/PostgreSQL/8.4 or C:/Program Files/PostgreSQL/8.4/include")
+set(PostgreSQL_INCLUDE_DIR_MESSAGE "Set the PostgreSQL_INCLUDE_DIR cmake cache entry to the ${PostgreSQL_INCLUDE_PATH_DESCRIPTION}")
+set(PostgreSQL_LIBRARY_PATH_DESCRIPTION "top-level directory containing the PostgreSQL libraries.")
+set(PostgreSQL_LIBRARY_DIR_MESSAGE "Set the PostgreSQL_LIBRARY_DIR cmake cache entry to the ${PostgreSQL_LIBRARY_PATH_DESCRIPTION}")
+set(PostgreSQL_ROOT_DIR_MESSAGE "Set the PostgreSQL_ROOT system variable to where PostgreSQL is found on the machine E.g C:/Program Files/PostgreSQL/8.4")
+
+
+set(PostgreSQL_KNOWN_VERSIONS ${PostgreSQL_ADDITIONAL_VERSIONS}
+    "13" "12" "11" "10" "9.6" "9.5" "9.4" "9.3" "9.2" "9.1" "9.0" "8.4" "8.3" "8.2" "8.1" "8.0")
+
+# Define additional search paths for root directories.
+set( PostgreSQL_ROOT_DIRECTORIES
+   ENV PostgreSQL_ROOT
+   ${PostgreSQL_ROOT}
+)
+foreach(suffix ${PostgreSQL_KNOWN_VERSIONS})
+  if(WIN32)
+    list(APPEND PostgreSQL_LIBRARY_ADDITIONAL_SEARCH_SUFFIXES
+        "PostgreSQL/${suffix}/lib")
+    list(APPEND PostgreSQL_INCLUDE_ADDITIONAL_SEARCH_SUFFIXES
+        "PostgreSQL/${suffix}/include")
+    list(APPEND PostgreSQL_TYPE_ADDITIONAL_SEARCH_SUFFIXES
+        "PostgreSQL/${suffix}/include/server")
+  endif()
+  if(UNIX)
+    list(APPEND PostgreSQL_LIBRARY_ADDITIONAL_SEARCH_SUFFIXES
+        "postgresql${suffix}"
+        "pgsql-${suffix}/lib")
+    list(APPEND PostgreSQL_INCLUDE_ADDITIONAL_SEARCH_SUFFIXES
+        "postgresql${suffix}"
+        "postgresql/${suffix}"
+        "pgsql-${suffix}/include")
+    list(APPEND PostgreSQL_TYPE_ADDITIONAL_SEARCH_SUFFIXES
+        "postgresql${suffix}/server"
+        "postgresql/${suffix}/server"
+        "pgsql-${suffix}/include/server")
+  endif()
+endforeach()
+
+#
+# Look for an installation.
+#
+find_path(PostgreSQL_INCLUDE_DIR
+  NAMES libpq-fe.h
+  PATHS
+   # Look in other places.
+   ${PostgreSQL_ROOT_DIRECTORIES}
+  PATH_SUFFIXES
+    pgsql
+    postgresql
+    include
+    ${PostgreSQL_INCLUDE_ADDITIONAL_SEARCH_SUFFIXES}
+  # Help the user find it if we cannot.
+  DOC "The ${PostgreSQL_INCLUDE_DIR_MESSAGE}"
+)
+
+find_path(PostgreSQL_TYPE_INCLUDE_DIR
+  NAMES catalog/pg_type.h
+  PATHS
+   # Look in other places.
+   ${PostgreSQL_ROOT_DIRECTORIES}
+  PATH_SUFFIXES
+    postgresql
+    pgsql/server
+    postgresql/server
+    include/server
+    ${PostgreSQL_TYPE_ADDITIONAL_SEARCH_SUFFIXES}
+  # Help the user find it if we cannot.
+  DOC "The ${PostgreSQL_INCLUDE_DIR_MESSAGE}"
+)
+
+# The PostgreSQL library.
+set (PostgreSQL_LIBRARY_TO_FIND pq)
+# Setting some more prefixes for the library
+set (PostgreSQL_LIB_PREFIX "")
+if ( WIN32 )
+  set (PostgreSQL_LIB_PREFIX ${PostgreSQL_LIB_PREFIX} "lib")
+  set (PostgreSQL_LIBRARY_TO_FIND ${PostgreSQL_LIB_PREFIX}${PostgreSQL_LIBRARY_TO_FIND})
+endif()
+
+function(__postgresql_find_library _name)
+  find_library(${_name}
+   NAMES ${ARGN}
+   PATHS
+     ${PostgreSQL_ROOT_DIRECTORIES}
+   PATH_SUFFIXES
+     lib
+     ${PostgreSQL_LIBRARY_ADDITIONAL_SEARCH_SUFFIXES}
+   # Help the user find it if we cannot.
+   DOC "The ${PostgreSQL_LIBRARY_DIR_MESSAGE}"
+  )
+endfunction()
+
+# For compatibility with versions prior to this multi-config search, honor
+# any PostgreSQL_LIBRARY that is already specified and skip the search.
+if(PostgreSQL_LIBRARY)
+  set(PostgreSQL_LIBRARIES "${PostgreSQL_LIBRARY}")
+  get_filename_component(PostgreSQL_LIBRARY_DIR "${PostgreSQL_LIBRARY}" PATH)
+else()
+  __postgresql_find_library(PostgreSQL_LIBRARY_RELEASE ${PostgreSQL_LIBRARY_TO_FIND})
+  __postgresql_find_library(PostgreSQL_LIBRARY_DEBUG ${PostgreSQL_LIBRARY_TO_FIND}d)
+  include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
+  select_library_configurations(PostgreSQL)
+  mark_as_advanced(PostgreSQL_LIBRARY_RELEASE PostgreSQL_LIBRARY_DEBUG)
+  if(PostgreSQL_LIBRARY_RELEASE)
+    get_filename_component(PostgreSQL_LIBRARY_DIR "${PostgreSQL_LIBRARY_RELEASE}" PATH)
+  elseif(PostgreSQL_LIBRARY_DEBUG)
+    get_filename_component(PostgreSQL_LIBRARY_DIR "${PostgreSQL_LIBRARY_DEBUG}" PATH)
+  else()
+    set(PostgreSQL_LIBRARY_DIR "")
+  endif()
+endif()
+
+if (PostgreSQL_INCLUDE_DIR)
+  # Some platforms include multiple pg_config.hs for multi-lib configurations
+  # This is a temporary workaround.  A better solution would be to compile
+  # a dummy c file and extract the value of the symbol.
+  file(GLOB _PG_CONFIG_HEADERS "${PostgreSQL_INCLUDE_DIR}/pg_config*.h")
+  foreach(_PG_CONFIG_HEADER ${_PG_CONFIG_HEADERS})
+    if(EXISTS "${_PG_CONFIG_HEADER}")
+      file(STRINGS "${_PG_CONFIG_HEADER}" pgsql_version_str
+           REGEX "^#define[\t ]+PG_VERSION_NUM[\t ]+.*")
+      if(pgsql_version_str)
+        string(REGEX REPLACE "^#define[\t ]+PG_VERSION_NUM[\t ]+([0-9]*).*"
+               "\\1" _PostgreSQL_VERSION_NUM "${pgsql_version_str}")
+        break()
+      endif()
+    endif()
+  endforeach()
+  if (_PostgreSQL_VERSION_NUM)
+    # 9.x and older encoding
+    if (_PostgreSQL_VERSION_NUM LESS 100000)
+      math(EXPR _PostgreSQL_major_version "${_PostgreSQL_VERSION_NUM} / 10000")
+      math(EXPR _PostgreSQL_minor_version "${_PostgreSQL_VERSION_NUM} % 10000 / 100")
+      math(EXPR _PostgreSQL_patch_version "${_PostgreSQL_VERSION_NUM} % 100")
+      set(PostgreSQL_VERSION_STRING "${_PostgreSQL_major_version}.${_PostgreSQL_minor_version}.${_PostgreSQL_patch_version}")
+      unset(_PostgreSQL_major_version)
+      unset(_PostgreSQL_minor_version)
+      unset(_PostgreSQL_patch_version)
+    else ()
+      math(EXPR _PostgreSQL_major_version "${_PostgreSQL_VERSION_NUM} / 10000")
+      math(EXPR _PostgreSQL_minor_version "${_PostgreSQL_VERSION_NUM} % 10000")
+      set(PostgreSQL_VERSION_STRING "${_PostgreSQL_major_version}.${_PostgreSQL_minor_version}")
+      unset(_PostgreSQL_major_version)
+      unset(_PostgreSQL_minor_version)
+    endif ()
+  else ()
+    foreach(_PG_CONFIG_HEADER ${_PG_CONFIG_HEADERS})
+      if(EXISTS "${_PG_CONFIG_HEADER}")
+        file(STRINGS "${_PG_CONFIG_HEADER}" pgsql_version_str
+             REGEX "^#define[\t ]+PG_VERSION[\t ]+\".*\"")
+        if(pgsql_version_str)
+          string(REGEX REPLACE "^#define[\t ]+PG_VERSION[\t ]+\"([^\"]*)\".*"
+                 "\\1" PostgreSQL_VERSION_STRING "${pgsql_version_str}")
+          break()
+        endif()
+      endif()
+    endforeach()
+  endif ()
+  unset(_PostgreSQL_VERSION_NUM)
+  unset(pgsql_version_str)
+endif()
+
+if("Server" IN_LIST PostgreSQL_FIND_COMPONENTS)
+  set(PostgreSQL_Server_FOUND TRUE)
+  if(NOT PostgreSQL_TYPE_INCLUDE_DIR)
+    set(PostgreSQL_Server_FOUND FALSE)
+  endif()
+endif()
+
+# Did we find anything?
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+find_package_handle_standard_args(PostgreSQL
+                                  REQUIRED_VARS PostgreSQL_LIBRARY PostgreSQL_INCLUDE_DIR
+                                  HANDLE_COMPONENTS
+                                  VERSION_VAR PostgreSQL_VERSION_STRING)
+set(PostgreSQL_FOUND  ${POSTGRESQL_FOUND})
+
+function(__postgresql_import_library _target _var _config)
+  if(_config)
+    set(_config_suffix "_${_config}")
+  else()
+    set(_config_suffix "")
+  endif()
+
+  set(_lib "${${_var}${_config_suffix}}")
+  if(EXISTS "${_lib}")
+    if(_config)
+      set_property(TARGET ${_target} APPEND PROPERTY
+        IMPORTED_CONFIGURATIONS ${_config})
+    endif()
+    set_target_properties(${_target} PROPERTIES
+      IMPORTED_LOCATION${_config_suffix} "${_lib}")
+  endif()
+endfunction()
+
+# Now try to get the include and library path.
+if(PostgreSQL_FOUND)
+  set(PostgreSQL_INCLUDE_DIRS ${PostgreSQL_INCLUDE_DIR})
+  if(PostgreSQL_TYPE_INCLUDE_DIR)
+    list(APPEND PostgreSQL_INCLUDE_DIRS ${PostgreSQL_TYPE_INCLUDE_DIR})
+  endif()
+  set(PostgreSQL_LIBRARY_DIRS ${PostgreSQL_LIBRARY_DIR})
+  if (NOT TARGET PostgreSQL::PostgreSQL)
+    add_library(PostgreSQL::PostgreSQL UNKNOWN IMPORTED)
+    set_target_properties(PostgreSQL::PostgreSQL PROPERTIES
+      INTERFACE_INCLUDE_DIRECTORIES "${PostgreSQL_INCLUDE_DIRS}")
+    __postgresql_import_library(PostgreSQL::PostgreSQL PostgreSQL_LIBRARY "")
+    __postgresql_import_library(PostgreSQL::PostgreSQL PostgreSQL_LIBRARY "RELEASE")
+    __postgresql_import_library(PostgreSQL::PostgreSQL PostgreSQL_LIBRARY "DEBUG")
+  endif ()
+endif()
+
+mark_as_advanced(PostgreSQL_INCLUDE_DIR PostgreSQL_TYPE_INCLUDE_DIR)
+
+cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/FindProducer.cmake b/share/cmake-3.22/Modules/FindProducer.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindProducer.cmake
rename to share/cmake-3.22/Modules/FindProducer.cmake
diff --git a/share/cmake-3.22/Modules/FindProtobuf.cmake b/share/cmake-3.22/Modules/FindProtobuf.cmake
new file mode 100644
index 0000000..c73a2d8
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindProtobuf.cmake
@@ -0,0 +1,685 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindProtobuf
+------------
+
+Locate and configure the Google Protocol Buffers library.
+
+.. versionadded:: 3.6
+  Support for :command:`find_package` version checks.
+
+.. versionchanged:: 3.6
+  All input and output variables use the ``Protobuf_`` prefix.
+  Variables with ``PROTOBUF_`` prefix are still supported for compatibility.
+
+The following variables can be set and are optional:
+
+``Protobuf_SRC_ROOT_FOLDER``
+  When compiling with MSVC, if this cache variable is set
+  the protobuf-default VS project build locations
+  (vsprojects/Debug and vsprojects/Release
+  or vsprojects/x64/Debug and vsprojects/x64/Release)
+  will be searched for libraries and binaries.
+``Protobuf_IMPORT_DIRS``
+  List of additional directories to be searched for
+  imported .proto files.
+``Protobuf_DEBUG``
+  .. versionadded:: 3.6
+
+  Show debug messages.
+``Protobuf_USE_STATIC_LIBS``
+  .. versionadded:: 3.9
+
+  Set to ON to force the use of the static libraries.
+  Default is OFF.
+
+Defines the following variables:
+
+``Protobuf_FOUND``
+  Found the Google Protocol Buffers library
+  (libprotobuf & header files)
+``Protobuf_VERSION``
+  .. versionadded:: 3.6
+
+  Version of package found.
+``Protobuf_INCLUDE_DIRS``
+  Include directories for Google Protocol Buffers
+``Protobuf_LIBRARIES``
+  The protobuf libraries
+``Protobuf_PROTOC_LIBRARIES``
+  The protoc libraries
+``Protobuf_LITE_LIBRARIES``
+  The protobuf-lite libraries
+
+.. versionadded:: 3.9
+  The following :prop_tgt:`IMPORTED` targets are also defined:
+
+``protobuf::libprotobuf``
+  The protobuf library.
+``protobuf::libprotobuf-lite``
+  The protobuf lite library.
+``protobuf::libprotoc``
+  The protoc library.
+``protobuf::protoc``
+  .. versionadded:: 3.10
+    The protoc compiler.
+
+The following cache variables are also available to set or use:
+
+``Protobuf_LIBRARY``
+  The protobuf library
+``Protobuf_PROTOC_LIBRARY``
+  The protoc library
+``Protobuf_INCLUDE_DIR``
+  The include directory for protocol buffers
+``Protobuf_PROTOC_EXECUTABLE``
+  The protoc compiler
+``Protobuf_LIBRARY_DEBUG``
+  The protobuf library (debug)
+``Protobuf_PROTOC_LIBRARY_DEBUG``
+  The protoc library (debug)
+``Protobuf_LITE_LIBRARY``
+  The protobuf lite library
+``Protobuf_LITE_LIBRARY_DEBUG``
+  The protobuf lite library (debug)
+
+Example:
+
+.. code-block:: cmake
+
+  find_package(Protobuf REQUIRED)
+  include_directories(${Protobuf_INCLUDE_DIRS})
+  include_directories(${CMAKE_CURRENT_BINARY_DIR})
+  protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS foo.proto)
+  protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS EXPORT_MACRO DLL_EXPORT foo.proto)
+  protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS DESCRIPTORS PROTO_DESCS foo.proto)
+  protobuf_generate_python(PROTO_PY foo.proto)
+  add_executable(bar bar.cc ${PROTO_SRCS} ${PROTO_HDRS})
+  target_link_libraries(bar ${Protobuf_LIBRARIES})
+
+.. note::
+  The ``protobuf_generate_cpp`` and ``protobuf_generate_python``
+  functions and :command:`add_executable` or :command:`add_library`
+  calls only work properly within the same directory.
+
+.. command:: protobuf_generate_cpp
+
+  Add custom commands to process ``.proto`` files to C++::
+
+    protobuf_generate_cpp (<SRCS> <HDRS>
+        [DESCRIPTORS <DESC>] [EXPORT_MACRO <MACRO>] [<ARGN>...])
+
+  ``SRCS``
+    Variable to define with autogenerated source files
+  ``HDRS``
+    Variable to define with autogenerated header files
+  ``DESCRIPTORS``
+    .. versionadded:: 3.10
+      Variable to define with autogenerated descriptor files, if requested.
+  ``EXPORT_MACRO``
+    is a macro which should expand to ``__declspec(dllexport)`` or
+    ``__declspec(dllimport)`` depending on what is being compiled.
+  ``ARGN``
+    ``.proto`` files
+
+.. command:: protobuf_generate_python
+
+  .. versionadded:: 3.4
+
+  Add custom commands to process ``.proto`` files to Python::
+
+    protobuf_generate_python (<PY> [<ARGN>...])
+
+  ``PY``
+    Variable to define with autogenerated Python files
+  ``ARGN``
+    ``.proto`` files
+#]=======================================================================]
+
+function(protobuf_generate)
+  set(_options APPEND_PATH DESCRIPTORS)
+  set(_singleargs LANGUAGE OUT_VAR EXPORT_MACRO PROTOC_OUT_DIR PLUGIN)
+  if(COMMAND target_sources)
+    list(APPEND _singleargs TARGET)
+  endif()
+  set(_multiargs PROTOS IMPORT_DIRS GENERATE_EXTENSIONS)
+
+  cmake_parse_arguments(protobuf_generate "${_options}" "${_singleargs}" "${_multiargs}" "${ARGN}")
+
+  if(NOT protobuf_generate_PROTOS AND NOT protobuf_generate_TARGET)
+    message(SEND_ERROR "Error: protobuf_generate called without any targets or source files")
+    return()
+  endif()
+
+  if(NOT protobuf_generate_OUT_VAR AND NOT protobuf_generate_TARGET)
+    message(SEND_ERROR "Error: protobuf_generate called without a target or output variable")
+    return()
+  endif()
+
+  if(NOT protobuf_generate_LANGUAGE)
+    set(protobuf_generate_LANGUAGE cpp)
+  endif()
+  string(TOLOWER ${protobuf_generate_LANGUAGE} protobuf_generate_LANGUAGE)
+
+  if(NOT protobuf_generate_PROTOC_OUT_DIR)
+    set(protobuf_generate_PROTOC_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
+  endif()
+
+  if(protobuf_generate_EXPORT_MACRO AND protobuf_generate_LANGUAGE STREQUAL cpp)
+    set(_dll_export_decl "dllexport_decl=${protobuf_generate_EXPORT_MACRO}:")
+  endif()
+
+  if(protobuf_generate_PLUGIN)
+    set(_plugin "--plugin=${protobuf_generate_PLUGIN}")
+  endif()
+
+  if(NOT protobuf_generate_GENERATE_EXTENSIONS)
+    if(protobuf_generate_LANGUAGE STREQUAL cpp)
+      set(protobuf_generate_GENERATE_EXTENSIONS .pb.h .pb.cc)
+    elseif(protobuf_generate_LANGUAGE STREQUAL python)
+      set(protobuf_generate_GENERATE_EXTENSIONS _pb2.py)
+    else()
+      message(SEND_ERROR "Error: protobuf_generate given unknown Language ${LANGUAGE}, please provide a value for GENERATE_EXTENSIONS")
+      return()
+    endif()
+  endif()
+
+  if(protobuf_generate_TARGET)
+    get_target_property(_source_list ${protobuf_generate_TARGET} SOURCES)
+    foreach(_file ${_source_list})
+      if(_file MATCHES "proto$")
+        list(APPEND protobuf_generate_PROTOS ${_file})
+      endif()
+    endforeach()
+  endif()
+
+  if(NOT protobuf_generate_PROTOS)
+    message(SEND_ERROR "Error: protobuf_generate could not find any .proto files")
+    return()
+  endif()
+
+  if(protobuf_generate_APPEND_PATH)
+    # Create an include path for each file specified
+    foreach(_file ${protobuf_generate_PROTOS})
+      get_filename_component(_abs_file ${_file} ABSOLUTE)
+      get_filename_component(_abs_path ${_abs_file} PATH)
+      list(FIND _protobuf_include_path ${_abs_path} _contains_already)
+      if(${_contains_already} EQUAL -1)
+          list(APPEND _protobuf_include_path -I ${_abs_path})
+      endif()
+    endforeach()
+  else()
+    set(_protobuf_include_path -I ${CMAKE_CURRENT_SOURCE_DIR})
+  endif()
+
+  foreach(DIR ${protobuf_generate_IMPORT_DIRS})
+    get_filename_component(ABS_PATH ${DIR} ABSOLUTE)
+    list(FIND _protobuf_include_path ${ABS_PATH} _contains_already)
+    if(${_contains_already} EQUAL -1)
+        list(APPEND _protobuf_include_path -I ${ABS_PATH})
+    endif()
+  endforeach()
+
+  set(_generated_srcs_all)
+  foreach(_proto ${protobuf_generate_PROTOS})
+    get_filename_component(_abs_file ${_proto} ABSOLUTE)
+    get_filename_component(_abs_dir ${_abs_file} DIRECTORY)
+    get_filename_component(_basename ${_proto} NAME_WLE)
+    file(RELATIVE_PATH _rel_dir ${CMAKE_CURRENT_SOURCE_DIR} ${_abs_dir})
+
+    set(_possible_rel_dir)
+    if (NOT protobuf_generate_APPEND_PATH)
+        set(_possible_rel_dir ${_rel_dir}/)
+    endif()
+
+    set(_generated_srcs)
+    foreach(_ext ${protobuf_generate_GENERATE_EXTENSIONS})
+      list(APPEND _generated_srcs "${protobuf_generate_PROTOC_OUT_DIR}/${_possible_rel_dir}${_basename}${_ext}")
+    endforeach()
+
+    if(protobuf_generate_DESCRIPTORS AND protobuf_generate_LANGUAGE STREQUAL cpp)
+      set(_descriptor_file "${CMAKE_CURRENT_BINARY_DIR}/${_basename}.desc")
+      set(_dll_desc_out "--descriptor_set_out=${_descriptor_file}")
+      list(APPEND _generated_srcs ${_descriptor_file})
+    endif()
+    list(APPEND _generated_srcs_all ${_generated_srcs})
+
+    add_custom_command(
+      OUTPUT ${_generated_srcs}
+      COMMAND  protobuf::protoc
+      ARGS --${protobuf_generate_LANGUAGE}_out ${_dll_export_decl}${protobuf_generate_PROTOC_OUT_DIR} ${_plugin} ${_dll_desc_out} ${_protobuf_include_path} ${_abs_file}
+      DEPENDS ${_abs_file} protobuf::protoc
+      COMMENT "Running ${protobuf_generate_LANGUAGE} protocol buffer compiler on ${_proto}"
+      VERBATIM )
+  endforeach()
+
+  set_source_files_properties(${_generated_srcs_all} PROPERTIES GENERATED TRUE)
+  if(protobuf_generate_OUT_VAR)
+    set(${protobuf_generate_OUT_VAR} ${_generated_srcs_all} PARENT_SCOPE)
+  endif()
+  if(protobuf_generate_TARGET)
+    target_sources(${protobuf_generate_TARGET} PRIVATE ${_generated_srcs_all})
+  endif()
+endfunction()
+
+function(PROTOBUF_GENERATE_CPP SRCS HDRS)
+  cmake_parse_arguments(protobuf_generate_cpp "" "EXPORT_MACRO;DESCRIPTORS" "" ${ARGN})
+
+  set(_proto_files "${protobuf_generate_cpp_UNPARSED_ARGUMENTS}")
+  if(NOT _proto_files)
+    message(SEND_ERROR "Error: PROTOBUF_GENERATE_CPP() called without any proto files")
+    return()
+  endif()
+
+  if(PROTOBUF_GENERATE_CPP_APPEND_PATH)
+    set(_append_arg APPEND_PATH)
+  endif()
+
+  if(protobuf_generate_cpp_DESCRIPTORS)
+    set(_descriptors DESCRIPTORS)
+  endif()
+
+  if(DEFINED PROTOBUF_IMPORT_DIRS AND NOT DEFINED Protobuf_IMPORT_DIRS)
+    set(Protobuf_IMPORT_DIRS "${PROTOBUF_IMPORT_DIRS}")
+  endif()
+
+  if(DEFINED Protobuf_IMPORT_DIRS)
+    set(_import_arg IMPORT_DIRS ${Protobuf_IMPORT_DIRS})
+  endif()
+
+  set(_outvar)
+  protobuf_generate(${_append_arg} ${_descriptors} LANGUAGE cpp EXPORT_MACRO ${protobuf_generate_cpp_EXPORT_MACRO} OUT_VAR _outvar ${_import_arg} PROTOS ${_proto_files})
+
+  set(${SRCS})
+  set(${HDRS})
+  if(protobuf_generate_cpp_DESCRIPTORS)
+    set(${protobuf_generate_cpp_DESCRIPTORS})
+  endif()
+
+  foreach(_file ${_outvar})
+    if(_file MATCHES "cc$")
+      list(APPEND ${SRCS} ${_file})
+    elseif(_file MATCHES "desc$")
+      list(APPEND ${protobuf_generate_cpp_DESCRIPTORS} ${_file})
+    else()
+      list(APPEND ${HDRS} ${_file})
+    endif()
+  endforeach()
+  set(${SRCS} ${${SRCS}} PARENT_SCOPE)
+  set(${HDRS} ${${HDRS}} PARENT_SCOPE)
+  if(protobuf_generate_cpp_DESCRIPTORS)
+    set(${protobuf_generate_cpp_DESCRIPTORS} "${${protobuf_generate_cpp_DESCRIPTORS}}" PARENT_SCOPE)
+  endif()
+endfunction()
+
+function(PROTOBUF_GENERATE_PYTHON SRCS)
+  if(NOT ARGN)
+    message(SEND_ERROR "Error: PROTOBUF_GENERATE_PYTHON() called without any proto files")
+    return()
+  endif()
+
+  if(PROTOBUF_GENERATE_CPP_APPEND_PATH)
+    set(_append_arg APPEND_PATH)
+  endif()
+
+  if(DEFINED PROTOBUF_IMPORT_DIRS AND NOT DEFINED Protobuf_IMPORT_DIRS)
+    set(Protobuf_IMPORT_DIRS "${PROTOBUF_IMPORT_DIRS}")
+  endif()
+
+  if(DEFINED Protobuf_IMPORT_DIRS)
+    set(_import_arg IMPORT_DIRS ${Protobuf_IMPORT_DIRS})
+  endif()
+
+  set(_outvar)
+  protobuf_generate(${_append_arg} LANGUAGE python OUT_VAR _outvar ${_import_arg} PROTOS ${ARGN})
+  set(${SRCS} ${_outvar} PARENT_SCOPE)
+endfunction()
+
+
+if(Protobuf_DEBUG)
+  # Output some of their choices
+  message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+                 "Protobuf_USE_STATIC_LIBS = ${Protobuf_USE_STATIC_LIBS}")
+endif()
+
+
+# Backwards compatibility
+# Define camel case versions of input variables
+foreach(UPPER
+    PROTOBUF_SRC_ROOT_FOLDER
+    PROTOBUF_IMPORT_DIRS
+    PROTOBUF_DEBUG
+    PROTOBUF_LIBRARY
+    PROTOBUF_PROTOC_LIBRARY
+    PROTOBUF_INCLUDE_DIR
+    PROTOBUF_PROTOC_EXECUTABLE
+    PROTOBUF_LIBRARY_DEBUG
+    PROTOBUF_PROTOC_LIBRARY_DEBUG
+    PROTOBUF_LITE_LIBRARY
+    PROTOBUF_LITE_LIBRARY_DEBUG
+    )
+    if (DEFINED ${UPPER})
+        string(REPLACE "PROTOBUF_" "Protobuf_" Camel ${UPPER})
+        if (NOT DEFINED ${Camel})
+            set(${Camel} ${${UPPER}})
+        endif()
+    endif()
+endforeach()
+
+if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+  set(_PROTOBUF_ARCH_DIR x64/)
+endif()
+
+
+# Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES
+if( Protobuf_USE_STATIC_LIBS )
+  set( _protobuf_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
+  if(WIN32)
+    set(CMAKE_FIND_LIBRARY_SUFFIXES .lib .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
+  else()
+    set(CMAKE_FIND_LIBRARY_SUFFIXES .a )
+  endif()
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
+
+# Internal function: search for normal library as well as a debug one
+#    if the debug one is specified also include debug/optimized keywords
+#    in *_LIBRARIES variable
+function(_protobuf_find_libraries name filename)
+  if(${name}_LIBRARIES)
+    # Use result recorded by a previous call.
+    return()
+  elseif(${name}_LIBRARY)
+    # Honor cache entry used by CMake 3.5 and lower.
+    set(${name}_LIBRARIES "${${name}_LIBRARY}" PARENT_SCOPE)
+  else()
+    find_library(${name}_LIBRARY_RELEASE
+      NAMES ${filename}
+      NAMES_PER_DIR
+      PATHS ${Protobuf_SRC_ROOT_FOLDER}/vsprojects/${_PROTOBUF_ARCH_DIR}Release)
+    mark_as_advanced(${name}_LIBRARY_RELEASE)
+
+    find_library(${name}_LIBRARY_DEBUG
+      NAMES ${filename}d ${filename}
+      NAMES_PER_DIR
+      PATHS ${Protobuf_SRC_ROOT_FOLDER}/vsprojects/${_PROTOBUF_ARCH_DIR}Debug)
+    mark_as_advanced(${name}_LIBRARY_DEBUG)
+
+    select_library_configurations(${name})
+
+    if(UNIX AND Threads_FOUND AND ${name}_LIBRARY)
+      list(APPEND ${name}_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
+    endif()
+
+    set(${name}_LIBRARY "${${name}_LIBRARY}" PARENT_SCOPE)
+    set(${name}_LIBRARIES "${${name}_LIBRARIES}" PARENT_SCOPE)
+  endif()
+endfunction()
+
+#
+# Main.
+#
+
+# By default have PROTOBUF_GENERATE_CPP macro pass -I to protoc
+# for each directory where a proto file is referenced.
+if(NOT DEFINED PROTOBUF_GENERATE_CPP_APPEND_PATH)
+  set(PROTOBUF_GENERATE_CPP_APPEND_PATH TRUE)
+endif()
+
+
+# Google's provided vcproj files generate libraries with a "lib"
+# prefix on Windows
+if(MSVC)
+    set(Protobuf_ORIG_FIND_LIBRARY_PREFIXES "${CMAKE_FIND_LIBRARY_PREFIXES}")
+    set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "")
+
+    find_path(Protobuf_SRC_ROOT_FOLDER protobuf.pc.in)
+endif()
+
+if(UNIX)
+  # Protobuf headers may depend on threading.
+  find_package(Threads QUIET)
+endif()
+
+# The Protobuf library
+_protobuf_find_libraries(Protobuf protobuf)
+#DOC "The Google Protocol Buffers RELEASE Library"
+
+_protobuf_find_libraries(Protobuf_LITE protobuf-lite)
+
+# The Protobuf Protoc Library
+_protobuf_find_libraries(Protobuf_PROTOC protoc)
+
+# Restore original find library prefixes
+if(MSVC)
+    set(CMAKE_FIND_LIBRARY_PREFIXES "${Protobuf_ORIG_FIND_LIBRARY_PREFIXES}")
+endif()
+
+# Find the include directory
+find_path(Protobuf_INCLUDE_DIR
+    google/protobuf/service.h
+    PATHS ${Protobuf_SRC_ROOT_FOLDER}/src
+)
+mark_as_advanced(Protobuf_INCLUDE_DIR)
+
+# Find the protoc Executable
+find_program(Protobuf_PROTOC_EXECUTABLE
+    NAMES protoc
+    DOC "The Google Protocol Buffers Compiler"
+    PATHS
+    ${Protobuf_SRC_ROOT_FOLDER}/vsprojects/${_PROTOBUF_ARCH_DIR}Release
+    ${Protobuf_SRC_ROOT_FOLDER}/vsprojects/${_PROTOBUF_ARCH_DIR}Debug
+)
+mark_as_advanced(Protobuf_PROTOC_EXECUTABLE)
+
+if(Protobuf_DEBUG)
+    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+        "requested version of Google Protobuf is ${Protobuf_FIND_VERSION}")
+endif()
+
+if(Protobuf_INCLUDE_DIR)
+  set(_PROTOBUF_COMMON_HEADER ${Protobuf_INCLUDE_DIR}/google/protobuf/stubs/common.h)
+
+  if(Protobuf_DEBUG)
+    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+                   "location of common.h: ${_PROTOBUF_COMMON_HEADER}")
+  endif()
+
+  set(Protobuf_VERSION "")
+  set(Protobuf_LIB_VERSION "")
+  file(STRINGS ${_PROTOBUF_COMMON_HEADER} _PROTOBUF_COMMON_H_CONTENTS REGEX "#define[ \t]+GOOGLE_PROTOBUF_VERSION[ \t]+")
+  if(_PROTOBUF_COMMON_H_CONTENTS MATCHES "#define[ \t]+GOOGLE_PROTOBUF_VERSION[ \t]+([0-9]+)")
+      set(Protobuf_LIB_VERSION "${CMAKE_MATCH_1}")
+  endif()
+  unset(_PROTOBUF_COMMON_H_CONTENTS)
+
+  math(EXPR _PROTOBUF_MAJOR_VERSION "${Protobuf_LIB_VERSION} / 1000000")
+  math(EXPR _PROTOBUF_MINOR_VERSION "${Protobuf_LIB_VERSION} / 1000 % 1000")
+  math(EXPR _PROTOBUF_SUBMINOR_VERSION "${Protobuf_LIB_VERSION} % 1000")
+  set(Protobuf_VERSION "${_PROTOBUF_MAJOR_VERSION}.${_PROTOBUF_MINOR_VERSION}.${_PROTOBUF_SUBMINOR_VERSION}")
+
+  if(Protobuf_DEBUG)
+    message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+        "${_PROTOBUF_COMMON_HEADER} reveals protobuf ${Protobuf_VERSION}")
+  endif()
+
+  if(Protobuf_PROTOC_EXECUTABLE)
+    # Check Protobuf compiler version to be aligned with libraries version
+    execute_process(COMMAND ${Protobuf_PROTOC_EXECUTABLE} --version
+                    OUTPUT_VARIABLE _PROTOBUF_PROTOC_EXECUTABLE_VERSION)
+
+    if("${_PROTOBUF_PROTOC_EXECUTABLE_VERSION}" MATCHES "libprotoc ([0-9.]+)")
+      set(_PROTOBUF_PROTOC_EXECUTABLE_VERSION "${CMAKE_MATCH_1}")
+    endif()
+
+    if(Protobuf_DEBUG)
+      message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+          "${Protobuf_PROTOC_EXECUTABLE} reveals version ${_PROTOBUF_PROTOC_EXECUTABLE_VERSION}")
+    endif()
+
+    if(NOT "${_PROTOBUF_PROTOC_EXECUTABLE_VERSION}" VERSION_EQUAL "${Protobuf_VERSION}")
+      message(WARNING "Protobuf compiler version ${_PROTOBUF_PROTOC_EXECUTABLE_VERSION}"
+        " doesn't match library version ${Protobuf_VERSION}")
+    endif()
+  endif()
+
+  if(Protobuf_LIBRARY)
+      if(NOT TARGET protobuf::libprotobuf)
+          add_library(protobuf::libprotobuf UNKNOWN IMPORTED)
+          set_target_properties(protobuf::libprotobuf PROPERTIES
+            INTERFACE_INCLUDE_DIRECTORIES "${Protobuf_INCLUDE_DIR}")
+          if(EXISTS "${Protobuf_LIBRARY}")
+            set_target_properties(protobuf::libprotobuf PROPERTIES
+              IMPORTED_LOCATION "${Protobuf_LIBRARY}")
+          endif()
+          if(EXISTS "${Protobuf_LIBRARY_RELEASE}")
+            set_property(TARGET protobuf::libprotobuf APPEND PROPERTY
+              IMPORTED_CONFIGURATIONS RELEASE)
+            set_target_properties(protobuf::libprotobuf PROPERTIES
+              IMPORTED_LOCATION_RELEASE "${Protobuf_LIBRARY_RELEASE}")
+          endif()
+          if(EXISTS "${Protobuf_LIBRARY_DEBUG}")
+            set_property(TARGET protobuf::libprotobuf APPEND PROPERTY
+              IMPORTED_CONFIGURATIONS DEBUG)
+            set_target_properties(protobuf::libprotobuf PROPERTIES
+              IMPORTED_LOCATION_DEBUG "${Protobuf_LIBRARY_DEBUG}")
+          endif()
+          if (Protobuf_VERSION VERSION_GREATER_EQUAL "3.6")
+            set_property(TARGET protobuf::libprotobuf APPEND PROPERTY
+              INTERFACE_COMPILE_FEATURES cxx_std_11
+            )
+          endif()
+          if (MSVC AND NOT Protobuf_USE_STATIC_LIBS)
+            set_property(TARGET protobuf::libprotobuf APPEND PROPERTY
+              INTERFACE_COMPILE_DEFINITIONS "PROTOBUF_USE_DLLS"
+            )
+          endif()
+          if(UNIX AND TARGET Threads::Threads)
+            set_property(TARGET protobuf::libprotobuf APPEND PROPERTY
+                INTERFACE_LINK_LIBRARIES Threads::Threads)
+          endif()
+      endif()
+  endif()
+
+  if(Protobuf_LITE_LIBRARY)
+      if(NOT TARGET protobuf::libprotobuf-lite)
+          add_library(protobuf::libprotobuf-lite UNKNOWN IMPORTED)
+          set_target_properties(protobuf::libprotobuf-lite PROPERTIES
+            INTERFACE_INCLUDE_DIRECTORIES "${Protobuf_INCLUDE_DIR}")
+          if(EXISTS "${Protobuf_LITE_LIBRARY}")
+            set_target_properties(protobuf::libprotobuf-lite PROPERTIES
+              IMPORTED_LOCATION "${Protobuf_LITE_LIBRARY}")
+          endif()
+          if(EXISTS "${Protobuf_LITE_LIBRARY_RELEASE}")
+            set_property(TARGET protobuf::libprotobuf-lite APPEND PROPERTY
+              IMPORTED_CONFIGURATIONS RELEASE)
+            set_target_properties(protobuf::libprotobuf-lite PROPERTIES
+              IMPORTED_LOCATION_RELEASE "${Protobuf_LITE_LIBRARY_RELEASE}")
+          endif()
+          if(EXISTS "${Protobuf_LITE_LIBRARY_DEBUG}")
+            set_property(TARGET protobuf::libprotobuf-lite APPEND PROPERTY
+              IMPORTED_CONFIGURATIONS DEBUG)
+            set_target_properties(protobuf::libprotobuf-lite PROPERTIES
+              IMPORTED_LOCATION_DEBUG "${Protobuf_LITE_LIBRARY_DEBUG}")
+          endif()
+          if (MSVC AND NOT Protobuf_USE_STATIC_LIBS)
+            set_property(TARGET protobuf::libprotobuf-lite APPEND PROPERTY
+              INTERFACE_COMPILE_DEFINITIONS "PROTOBUF_USE_DLLS"
+            )
+          endif()
+          if(UNIX AND TARGET Threads::Threads)
+            set_property(TARGET protobuf::libprotobuf-lite APPEND PROPERTY
+                INTERFACE_LINK_LIBRARIES Threads::Threads)
+          endif()
+      endif()
+  endif()
+
+  if(Protobuf_PROTOC_LIBRARY)
+      if(NOT TARGET protobuf::libprotoc)
+          add_library(protobuf::libprotoc UNKNOWN IMPORTED)
+          set_target_properties(protobuf::libprotoc PROPERTIES
+            INTERFACE_INCLUDE_DIRECTORIES "${Protobuf_INCLUDE_DIR}")
+          if(EXISTS "${Protobuf_PROTOC_LIBRARY}")
+            set_target_properties(protobuf::libprotoc PROPERTIES
+              IMPORTED_LOCATION "${Protobuf_PROTOC_LIBRARY}")
+          endif()
+          if(EXISTS "${Protobuf_PROTOC_LIBRARY_RELEASE}")
+            set_property(TARGET protobuf::libprotoc APPEND PROPERTY
+              IMPORTED_CONFIGURATIONS RELEASE)
+            set_target_properties(protobuf::libprotoc PROPERTIES
+              IMPORTED_LOCATION_RELEASE "${Protobuf_PROTOC_LIBRARY_RELEASE}")
+          endif()
+          if(EXISTS "${Protobuf_PROTOC_LIBRARY_DEBUG}")
+            set_property(TARGET protobuf::libprotoc APPEND PROPERTY
+              IMPORTED_CONFIGURATIONS DEBUG)
+            set_target_properties(protobuf::libprotoc PROPERTIES
+              IMPORTED_LOCATION_DEBUG "${Protobuf_PROTOC_LIBRARY_DEBUG}")
+          endif()
+          if (Protobuf_VERSION VERSION_GREATER_EQUAL "3.6")
+            set_property(TARGET protobuf::libprotoc APPEND PROPERTY
+              INTERFACE_COMPILE_FEATURES cxx_std_11
+            )
+          endif()
+          if (MSVC AND NOT Protobuf_USE_STATIC_LIBS)
+            set_property(TARGET protobuf::libprotoc APPEND PROPERTY
+              INTERFACE_COMPILE_DEFINITIONS "PROTOBUF_USE_DLLS"
+            )
+          endif()
+          if(UNIX AND TARGET Threads::Threads)
+            set_property(TARGET protobuf::libprotoc APPEND PROPERTY
+                INTERFACE_LINK_LIBRARIES Threads::Threads)
+          endif()
+      endif()
+  endif()
+
+  if(Protobuf_PROTOC_EXECUTABLE)
+      if(NOT TARGET protobuf::protoc)
+          add_executable(protobuf::protoc IMPORTED)
+          if(EXISTS "${Protobuf_PROTOC_EXECUTABLE}")
+            set_target_properties(protobuf::protoc PROPERTIES
+              IMPORTED_LOCATION "${Protobuf_PROTOC_EXECUTABLE}")
+          endif()
+      endif()
+  endif()
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(Protobuf
+    REQUIRED_VARS Protobuf_LIBRARIES Protobuf_INCLUDE_DIR
+    VERSION_VAR Protobuf_VERSION
+)
+
+if(Protobuf_FOUND)
+    set(Protobuf_INCLUDE_DIRS ${Protobuf_INCLUDE_DIR})
+endif()
+
+# Restore the original find library ordering
+if( Protobuf_USE_STATIC_LIBS )
+  set(CMAKE_FIND_LIBRARY_SUFFIXES ${_protobuf_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
+endif()
+
+# Backwards compatibility
+# Define upper case versions of output variables
+foreach(Camel
+    Protobuf_SRC_ROOT_FOLDER
+    Protobuf_IMPORT_DIRS
+    Protobuf_DEBUG
+    Protobuf_INCLUDE_DIRS
+    Protobuf_LIBRARIES
+    Protobuf_PROTOC_LIBRARIES
+    Protobuf_LITE_LIBRARIES
+    Protobuf_LIBRARY
+    Protobuf_PROTOC_LIBRARY
+    Protobuf_INCLUDE_DIR
+    Protobuf_PROTOC_EXECUTABLE
+    Protobuf_LIBRARY_DEBUG
+    Protobuf_PROTOC_LIBRARY_DEBUG
+    Protobuf_LITE_LIBRARY
+    Protobuf_LITE_LIBRARY_DEBUG
+    )
+    string(TOUPPER ${Camel} UPPER)
+    set(${UPPER} ${${Camel}})
+endforeach()
diff --git a/share/cmake-3.22/Modules/FindPython.cmake b/share/cmake-3.22/Modules/FindPython.cmake
new file mode 100644
index 0000000..375cb70
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindPython.cmake
@@ -0,0 +1,586 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindPython
+----------
+
+.. versionadded:: 3.12
+
+Find Python interpreter, compiler and development environment (include
+directories and libraries).
+
+.. versionadded:: 3.19
+  When a version is requested, it can be specified as a simple value or as a
+  range. For a detailed description of version range usage and capabilities,
+  refer to the :command:`find_package` command.
+
+The following components are supported:
+
+* ``Interpreter``: search for Python interpreter.
+* ``Compiler``: search for Python compiler. Only offered by IronPython.
+* ``Development``: search for development artifacts (include directories and
+  libraries).
+
+  .. versionadded:: 3.18
+    This component includes two sub-components which can be specified
+    independently:
+
+    * ``Development.Module``: search for artifacts for Python module
+      developments.
+    * ``Development.Embed``: search for artifacts for Python embedding
+      developments.
+
+* ``NumPy``: search for NumPy include directories.
+
+.. versionadded:: 3.14
+  Added the ``NumPy`` component.
+
+If no ``COMPONENTS`` are specified, ``Interpreter`` is assumed.
+
+If component ``Development`` is specified, it implies sub-components
+``Development.Module`` and ``Development.Embed``.
+
+To ensure consistent versions between components ``Interpreter``, ``Compiler``,
+``Development`` (or one of its sub-components) and ``NumPy``, specify all
+components at the same time::
+
+  find_package (Python COMPONENTS Interpreter Development)
+
+This module looks preferably for version 3 of Python. If not found, version 2
+is searched.
+To manage concurrent versions 3 and 2 of Python, use :module:`FindPython3` and
+:module:`FindPython2` modules rather than this one.
+
+.. note::
+
+  If components ``Interpreter`` and ``Development`` (or one of its
+  sub-components) are both specified, this module search only for interpreter
+  with same platform architecture as the one defined by ``CMake``
+  configuration. This constraint does not apply if only ``Interpreter``
+  component is specified.
+
+Imported Targets
+^^^^^^^^^^^^^^^^
+
+This module defines the following :ref:`Imported Targets <Imported Targets>`:
+
+.. versionchanged:: 3.14
+  :ref:`Imported Targets <Imported Targets>` are only created when
+  :prop_gbl:`CMAKE_ROLE` is ``PROJECT``.
+
+``Python::Interpreter``
+  Python interpreter. Target defined if component ``Interpreter`` is found.
+``Python::Compiler``
+  Python compiler. Target defined if component ``Compiler`` is found.
+
+``Python::Module``
+  .. versionadded:: 3.15
+
+  Python library for Python module. Target defined if component
+  ``Development.Module`` is found.
+
+``Python::Python``
+  Python library for Python embedding. Target defined if component
+  ``Development.Embed`` is found.
+
+``Python::NumPy``
+  .. versionadded:: 3.14
+
+  NumPy Python library. Target defined if component ``NumPy`` is found.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This module will set the following variables in your project
+(see :ref:`Standard Variable Names <CMake Developer Standard Variable Names>`):
+
+``Python_FOUND``
+  System has the Python requested components.
+``Python_Interpreter_FOUND``
+  System has the Python interpreter.
+``Python_EXECUTABLE``
+  Path to the Python interpreter.
+``Python_INTERPRETER_ID``
+  A short string unique to the interpreter. Possible values include:
+    * Python
+    * ActivePython
+    * Anaconda
+    * Canopy
+    * IronPython
+    * PyPy
+``Python_STDLIB``
+  Standard platform independent installation directory.
+
+  Information returned by
+  ``distutils.sysconfig.get_python_lib(plat_specific=False,standard_lib=True)``
+  or else ``sysconfig.get_path('stdlib')``.
+``Python_STDARCH``
+  Standard platform dependent installation directory.
+
+  Information returned by
+  ``distutils.sysconfig.get_python_lib(plat_specific=True,standard_lib=True)``
+  or else ``sysconfig.get_path('platstdlib')``.
+``Python_SITELIB``
+  Third-party platform independent installation directory.
+
+  Information returned by
+  ``distutils.sysconfig.get_python_lib(plat_specific=False,standard_lib=False)``
+  or else ``sysconfig.get_path('purelib')``.
+``Python_SITEARCH``
+  Third-party platform dependent installation directory.
+
+  Information returned by
+  ``distutils.sysconfig.get_python_lib(plat_specific=True,standard_lib=False)``
+  or else ``sysconfig.get_path('platlib')``.
+
+``Python_SOABI``
+  .. versionadded:: 3.17
+
+  Extension suffix for modules.
+
+  Information returned by
+  ``distutils.sysconfig.get_config_var('SOABI')`` or computed from
+  ``distutils.sysconfig.get_config_var('EXT_SUFFIX')`` or
+  ``python-config --extension-suffix``. If package ``distutils.sysconfig`` is
+  not available, ``sysconfig.get_config_var('SOABI')`` or
+  ``sysconfig.get_config_var('EXT_SUFFIX')`` are used.
+
+``Python_Compiler_FOUND``
+  System has the Python compiler.
+``Python_COMPILER``
+  Path to the Python compiler. Only offered by IronPython.
+``Python_COMPILER_ID``
+  A short string unique to the compiler. Possible values include:
+    * IronPython
+
+``Python_DOTNET_LAUNCHER``
+  .. versionadded:: 3.18
+
+  The ``.Net`` interpreter. Only used by ``IronPython`` implementation.
+
+``Python_Development_FOUND``
+  System has the Python development artifacts.
+
+``Python_Development.Module_FOUND``
+  .. versionadded:: 3.18
+
+  System has the Python development artifacts for Python module.
+
+``Python_Development.Embed_FOUND``
+  .. versionadded:: 3.18
+
+  System has the Python development artifacts for Python embedding.
+
+``Python_INCLUDE_DIRS``
+
+  The Python include directories.
+
+``Python_LINK_OPTIONS``
+  .. versionadded:: 3.19
+
+  The Python link options. Some configurations require specific link options
+  for a correct build and execution.
+
+``Python_LIBRARIES``
+  The Python libraries.
+``Python_LIBRARY_DIRS``
+  The Python library directories.
+``Python_RUNTIME_LIBRARY_DIRS``
+  The Python runtime library directories.
+``Python_VERSION``
+  Python version.
+``Python_VERSION_MAJOR``
+  Python major version.
+``Python_VERSION_MINOR``
+  Python minor version.
+``Python_VERSION_PATCH``
+  Python patch version.
+
+``Python_PyPy_VERSION``
+  .. versionadded:: 3.18
+
+  Python PyPy version.
+
+``Python_NumPy_FOUND``
+  .. versionadded:: 3.14
+
+  System has the NumPy.
+
+``Python_NumPy_INCLUDE_DIRS``
+  .. versionadded:: 3.14
+
+  The NumPy include directories.
+
+``Python_NumPy_VERSION``
+  .. versionadded:: 3.14
+
+  The NumPy version.
+
+Hints
+^^^^^
+
+``Python_ROOT_DIR``
+  Define the root directory of a Python installation.
+
+``Python_USE_STATIC_LIBS``
+  * If not defined, search for shared libraries and static libraries in that
+    order.
+  * If set to TRUE, search **only** for static libraries.
+  * If set to FALSE, search **only** for shared libraries.
+
+  .. note::
+
+    This hint will be ignored on ``Windows`` because static libraries are not
+    available on this platform.
+
+``Python_FIND_ABI``
+  .. versionadded:: 3.16
+
+  This variable defines which ABIs, as defined in
+  `PEP 3149 <https://www.python.org/dev/peps/pep-3149/>`_, should be searched.
+
+  .. note::
+
+    This hint will be honored only when searched for ``Python`` version 3.
+
+  .. note::
+
+    If ``Python_FIND_ABI`` is not defined, any ABI will be searched.
+
+  The ``Python_FIND_ABI`` variable is a 3-tuple specifying, in that order,
+  ``pydebug`` (``d``), ``pymalloc`` (``m``) and ``unicode`` (``u``) flags.
+  Each element can be set to one of the following:
+
+  * ``ON``: Corresponding flag is selected.
+  * ``OFF``: Corresponding flag is not selected.
+  * ``ANY``: The two possibilities (``ON`` and ``OFF``) will be searched.
+
+  From this 3-tuple, various ABIs will be searched starting from the most
+  specialized to the most general. Moreover, ``debug`` versions will be
+  searched **after** ``non-debug`` ones.
+
+  For example, if we have::
+
+    set (Python_FIND_ABI "ON" "ANY" "ANY")
+
+  The following flags combinations will be appended, in that order, to the
+  artifact names: ``dmu``, ``dm``, ``du``, and ``d``.
+
+  And to search any possible ABIs::
+
+    set (Python_FIND_ABI "ANY" "ANY" "ANY")
+
+  The following combinations, in that order, will be used: ``mu``, ``m``,
+  ``u``, ``<empty>``, ``dmu``, ``dm``, ``du`` and ``d``.
+
+  .. note::
+
+    This hint is useful only on ``POSIX`` systems. So, on ``Windows`` systems,
+    when ``Python_FIND_ABI`` is defined, ``Python`` distributions from
+    `python.org <https://www.python.org/>`_ will be found only if value for
+    each flag is ``OFF`` or ``ANY``.
+
+``Python_FIND_STRATEGY``
+  .. versionadded:: 3.15
+
+  This variable defines how lookup will be done.
+  The ``Python_FIND_STRATEGY`` variable can be set to one of the following:
+
+  * ``VERSION``: Try to find the most recent version in all specified
+    locations.
+    This is the default if policy :policy:`CMP0094` is undefined or set to
+    ``OLD``.
+  * ``LOCATION``: Stops lookup as soon as a version satisfying version
+    constraints is founded.
+    This is the default if policy :policy:`CMP0094` is set to ``NEW``.
+
+``Python_FIND_REGISTRY``
+  .. versionadded:: 3.13
+
+  On Windows the ``Python_FIND_REGISTRY`` variable determine the order
+  of preference between registry and environment variables.
+  the ``Python_FIND_REGISTRY`` variable can be set to one of the following:
+
+  * ``FIRST``: Try to use registry before environment variables.
+    This is the default.
+  * ``LAST``: Try to use registry after environment variables.
+  * ``NEVER``: Never try to use registry.
+
+``Python_FIND_FRAMEWORK``
+  .. versionadded:: 3.15
+
+  On macOS the ``Python_FIND_FRAMEWORK`` variable determine the order of
+  preference between Apple-style and unix-style package components.
+  This variable can take same values as :variable:`CMAKE_FIND_FRAMEWORK`
+  variable.
+
+  .. note::
+
+    Value ``ONLY`` is not supported so ``FIRST`` will be used instead.
+
+  If ``Python_FIND_FRAMEWORK`` is not defined, :variable:`CMAKE_FIND_FRAMEWORK`
+  variable will be used, if any.
+
+``Python_FIND_VIRTUALENV``
+  .. versionadded:: 3.15
+
+  This variable defines the handling of virtual environments managed by
+  ``virtualenv`` or ``conda``. It is meaningful only when a virtual environment
+  is active (i.e. the ``activate`` script has been evaluated). In this case, it
+  takes precedence over ``Python_FIND_REGISTRY`` and ``CMAKE_FIND_FRAMEWORK``
+  variables.  The ``Python_FIND_VIRTUALENV`` variable can be set to one of the
+  following:
+
+  * ``FIRST``: The virtual environment is used before any other standard
+    paths to look-up for the interpreter. This is the default.
+  * ``ONLY``: Only the virtual environment is used to look-up for the
+    interpreter.
+  * ``STANDARD``: The virtual environment is not used to look-up for the
+    interpreter but environment variable ``PATH`` is always considered.
+    In this case, variable ``Python_FIND_REGISTRY`` (Windows) or
+    ``CMAKE_FIND_FRAMEWORK`` (macOS) can be set with value ``LAST`` or
+    ``NEVER`` to select preferably the interpreter from the virtual
+    environment.
+
+  .. versionadded:: 3.17
+    Added support for ``conda`` environments.
+
+  .. note::
+
+    If the component ``Development`` is requested, it is **strongly**
+    recommended to also include the component ``Interpreter`` to get expected
+    result.
+
+``Python_FIND_IMPLEMENTATIONS``
+  .. versionadded:: 3.18
+
+  This variable defines, in an ordered list, the different implementations
+  which will be searched. The ``Python_FIND_IMPLEMENTATIONS`` variable can
+  hold the following values:
+
+  * ``CPython``: this is the standard implementation. Various products, like
+    ``Anaconda`` or ``ActivePython``, rely on this implementation.
+  * ``IronPython``: This implementation use the ``CSharp`` language for
+    ``.NET Framework`` on top of the `Dynamic Language Runtime` (``DLR``).
+    See `IronPython <http://ironpython.net>`_.
+  * ``PyPy``: This implementation use ``RPython`` language and
+    ``RPython translation toolchain`` to produce the python interpreter.
+    See `PyPy <https://www.pypy.org>`_.
+
+  The default value is:
+
+  * Windows platform: ``CPython``, ``IronPython``
+  * Other platforms: ``CPython``
+
+  .. note::
+
+    This hint has the lowest priority of all hints, so even if, for example,
+    you specify ``IronPython`` first and ``CPython`` in second, a python
+    product based on ``CPython`` can be selected because, for example with
+    ``Python_FIND_STRATEGY=LOCATION``, each location will be search first for
+    ``IronPython`` and second for ``CPython``.
+
+  .. note::
+
+    When ``IronPython`` is specified, on platforms other than ``Windows``, the
+    ``.Net`` interpreter (i.e. ``mono`` command) is expected to be available
+    through the ``PATH`` variable.
+
+``Python_FIND_UNVERSIONED_NAMES``
+  .. versionadded:: 3.20
+
+  This variable defines how the generic names will be searched. Currently, it
+  only applies to the generic names of the interpreter, namely, ``python3`` or
+  ``python2`` and ``python``.
+  The ``Python_FIND_UNVERSIONED_NAMES`` variable can be set to one of the
+  following values:
+
+  * ``FIRST``: The generic names are searched before the more specialized ones
+    (such as ``python2.5`` for example).
+  * ``LAST``: The generic names are searched after the more specialized ones.
+    This is the default.
+  * ``NEVER``: The generic name are not searched at all.
+
+Artifacts Specification
+^^^^^^^^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.16
+
+To solve special cases, it is possible to specify directly the artifacts by
+setting the following variables:
+
+``Python_EXECUTABLE``
+  The path to the interpreter.
+
+``Python_COMPILER``
+  The path to the compiler.
+
+``Python_DOTNET_LAUNCHER``
+  .. versionadded:: 3.18
+
+  The ``.Net`` interpreter. Only used by ``IronPython`` implementation.
+
+``Python_LIBRARY``
+  The path to the library. It will be used to compute the
+  variables ``Python_LIBRARIES``, ``Python_LIBRARY_DIRS`` and
+  ``Python_RUNTIME_LIBRARY_DIRS``.
+
+``Python_INCLUDE_DIR``
+  The path to the directory of the ``Python`` headers. It will be used to
+  compute the variable ``Python_INCLUDE_DIRS``.
+
+``Python_NumPy_INCLUDE_DIR``
+  The path to the directory of the ``NumPy`` headers. It will be used to
+  compute the variable ``Python_NumPy_INCLUDE_DIRS``.
+
+.. note::
+
+  All paths must be absolute. Any artifact specified with a relative path
+  will be ignored.
+
+.. note::
+
+  When an artifact is specified, all ``HINTS`` will be ignored and no search
+  will be performed for this artifact.
+
+  If more than one artifact is specified, it is the user's responsibility to
+  ensure the consistency of the various artifacts.
+
+By default, this module supports multiple calls in different directories of a
+project with different version/component requirements while providing correct
+and consistent results for each call. To support this behavior, ``CMake`` cache
+is not used in the traditional way which can be problematic for interactive
+specification. So, to enable also interactive specification, module behavior
+can be controlled with the following variable:
+
+``Python_ARTIFACTS_INTERACTIVE``
+  .. versionadded:: 3.18
+
+  Selects the behavior of the module. This is a boolean variable:
+
+  * If set to ``TRUE``: Create CMake cache entries for the above artifact
+    specification variables so that users can edit them interactively.
+    This disables support for multiple version/component requirements.
+  * If set to ``FALSE`` or undefined: Enable multiple version/component
+    requirements.
+
+Commands
+^^^^^^^^
+
+This module defines the command ``Python_add_library`` (when
+:prop_gbl:`CMAKE_ROLE` is ``PROJECT``), which has the same semantics as
+:command:`add_library` and adds a dependency to target ``Python::Python`` or,
+when library type is ``MODULE``, to target ``Python::Module`` and takes care of
+Python module naming rules::
+
+  Python_add_library (<name> [STATIC | SHARED | MODULE [WITH_SOABI]]
+                      <source1> [<source2> ...])
+
+If the library type is not specified, ``MODULE`` is assumed.
+
+.. versionadded:: 3.17
+  For ``MODULE`` library type, if option ``WITH_SOABI`` is specified, the
+  module suffix will include the ``Python_SOABI`` value, if any.
+#]=======================================================================]
+
+
+cmake_policy(PUSH)
+# numbers and boolean constants
+cmake_policy (SET CMP0012 NEW)
+
+
+set (_PYTHON_PREFIX Python)
+unset (_Python_REQUIRED_VERSION_MAJOR)
+unset (_Python_REQUIRED_VERSIONS)
+
+if (Python_FIND_VERSION_RANGE)
+  # compute list of major versions
+  foreach (_Python_MAJOR IN ITEMS 3 2)
+    if (_Python_MAJOR VERSION_GREATER_EQUAL Python_FIND_VERSION_MIN_MAJOR
+        AND ((Python_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND _Python_MAJOR VERSION_LESS_EQUAL Python_FIND_VERSION_MAX)
+        OR (Python_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND _Python_MAJOR VERSION_LESS Python_FIND_VERSION_MAX)))
+      list (APPEND _Python_REQUIRED_VERSIONS ${_Python_MAJOR})
+    endif()
+  endforeach()
+  list (LENGTH _Python_REQUIRED_VERSIONS _Python_VERSION_COUNT)
+  if (_Python_VERSION_COUNT EQUAL 0)
+    unset (_Python_REQUIRED_VERSIONS)
+  elseif (_Python_VERSION_COUNT EQUAL 1)
+    set (_Python_REQUIRED_VERSION_MAJOR ${_Python_REQUIRED_VERSIONS})
+  endif()
+elseif (DEFINED Python_FIND_VERSION)
+  set (_Python_REQUIRED_VERSION_MAJOR ${Python_FIND_VERSION_MAJOR})
+else()
+  set (_Python_REQUIRED_VERSIONS 3 2)
+endif()
+
+if (_Python_REQUIRED_VERSION_MAJOR)
+  include (${CMAKE_CURRENT_LIST_DIR}/FindPython/Support.cmake)
+elseif (_Python_REQUIRED_VERSIONS)
+  # iterate over versions in quiet and NOT required modes to avoid multiple
+  # "Found" messages and prematurally failure.
+  set (_Python_QUIETLY ${Python_FIND_QUIETLY})
+  set (_Python_REQUIRED ${Python_FIND_REQUIRED})
+  set (Python_FIND_QUIETLY TRUE)
+  set (Python_FIND_REQUIRED FALSE)
+
+  set (_Python_REQUIRED_VERSION_LAST 2)
+
+  unset (_Python_INPUT_VARS)
+  foreach (_Python_ITEM IN ITEMS Python_EXECUTABLE Python_COMPILER Python_LIBRARY
+                                 Python_INCLUDE_DIR Python_NumPy_INCLUDE_DIR)
+    if (NOT DEFINED ${_Python_ITEM})
+      list (APPEND _Python_INPUT_VARS ${_Python_ITEM})
+    endif()
+  endforeach()
+
+  foreach (_Python_REQUIRED_VERSION_MAJOR IN LISTS _Python_REQUIRED_VERSIONS)
+    set (Python_FIND_VERSION ${_Python_REQUIRED_VERSION_MAJOR})
+    include (${CMAKE_CURRENT_LIST_DIR}/FindPython/Support.cmake)
+    if (Python_FOUND OR
+        _Python_REQUIRED_VERSION_MAJOR EQUAL _Python_REQUIRED_VERSION_LAST)
+      break()
+    endif()
+    # clean-up INPUT variables not set by the user
+    foreach (_Python_ITEM IN LISTS _Python_INPUT_VARS)
+      unset (${_Python_ITEM})
+    endforeach()
+    # clean-up some CACHE variables to ensure look-up restart from scratch
+    foreach (_Python_ITEM IN LISTS _Python_CACHED_VARS)
+      unset (${_Python_ITEM} CACHE)
+    endforeach()
+  endforeach()
+
+  unset (Python_FIND_VERSION)
+
+  set (Python_FIND_QUIETLY ${_Python_QUIETLY})
+  set (Python_FIND_REQUIRED ${_Python_REQUIRED})
+  if (Python_FIND_REQUIRED OR NOT Python_FIND_QUIETLY)
+    # call again validation command to get "Found" or error message
+    find_package_handle_standard_args (Python HANDLE_COMPONENTS HANDLE_VERSION_RANGE
+                                              REQUIRED_VARS ${_Python_REQUIRED_VARS}
+                                              VERSION_VAR Python_VERSION)
+  endif()
+else()
+  # supported versions not in the specified range. Call final check
+  if (NOT Python_FIND_COMPONENTS)
+    set (Python_FIND_COMPONENTS Interpreter)
+    set (Python_FIND_REQUIRED_Interpreter TRUE)
+  endif()
+
+  include (${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+  find_package_handle_standard_args (Python HANDLE_COMPONENTS HANDLE_VERSION_RANGE
+                                            VERSION_VAR Python_VERSION
+                                            REASON_FAILURE_MESSAGE "Version range specified \"${Python_FIND_VERSION_RANGE}\" does not include supported versions")
+endif()
+
+if (COMMAND __Python_add_library)
+  macro (Python_add_library)
+    __Python_add_library (Python ${ARGV})
+  endmacro()
+endif()
+
+unset (_PYTHON_PREFIX)
+
+cmake_policy(POP)
diff --git a/share/cmake-3.22/Modules/FindPython/Support.cmake b/share/cmake-3.22/Modules/FindPython/Support.cmake
new file mode 100644
index 0000000..ce25cfc
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindPython/Support.cmake
@@ -0,0 +1,3370 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#
+# This file is a "template" file used by various FindPython modules.
+#
+
+#
+# Initial configuration
+#
+
+cmake_policy(PUSH)
+# numbers and boolean constants
+cmake_policy (SET CMP0012 NEW)
+# IN_LIST operator
+cmake_policy (SET CMP0057 NEW)
+
+if (NOT DEFINED _PYTHON_PREFIX)
+  message (FATAL_ERROR "FindPython: INTERNAL ERROR")
+endif()
+if (NOT DEFINED _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR)
+  message (FATAL_ERROR "FindPython: INTERNAL ERROR")
+endif()
+if (_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR EQUAL "3")
+  set(_${_PYTHON_PREFIX}_VERSIONS 3.10 3.9 3.8 3.7 3.6 3.5 3.4 3.3 3.2 3.1 3.0)
+elseif (_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR EQUAL "2")
+  set(_${_PYTHON_PREFIX}_VERSIONS 2.7 2.6 2.5 2.4 2.3 2.2 2.1 2.0)
+else()
+  message (FATAL_ERROR "FindPython: INTERNAL ERROR")
+endif()
+
+get_property(_${_PYTHON_PREFIX}_CMAKE_ROLE GLOBAL PROPERTY CMAKE_ROLE)
+
+include (${CMAKE_CURRENT_LIST_DIR}/../FindPackageHandleStandardArgs.cmake)
+
+#
+# helper commands
+#
+macro (_PYTHON_DISPLAY_FAILURE _PYTHON_MSG)
+  if (${_PYTHON_PREFIX}_FIND_REQUIRED)
+    message (FATAL_ERROR "${_PYTHON_MSG}")
+  else()
+    if (NOT ${_PYTHON_PREFIX}_FIND_QUIETLY)
+      message(STATUS "${_PYTHON_MSG}")
+    endif ()
+  endif()
+
+  set (${_PYTHON_PREFIX}_FOUND FALSE)
+  string (TOUPPER "${_PYTHON_PREFIX}" _${_PYTHON_PREFIX}_UPPER_PREFIX)
+  set (${_PYTHON_UPPER_PREFIX}_FOUND FALSE)
+endmacro()
+
+
+function (_PYTHON_MARK_AS_INTERNAL)
+  foreach (var IN LISTS ARGV)
+    if (DEFINED CACHE{${var}})
+      set_property (CACHE ${var} PROPERTY TYPE INTERNAL)
+    endif()
+  endforeach()
+endfunction()
+
+
+macro (_PYTHON_SELECT_LIBRARY_CONFIGURATIONS _PYTHON_BASENAME)
+  if(NOT DEFINED ${_PYTHON_BASENAME}_LIBRARY_RELEASE)
+    set(${_PYTHON_BASENAME}_LIBRARY_RELEASE "${_PYTHON_BASENAME}_LIBRARY_RELEASE-NOTFOUND")
+  endif()
+  if(NOT DEFINED ${_PYTHON_BASENAME}_LIBRARY_DEBUG)
+    set(${_PYTHON_BASENAME}_LIBRARY_DEBUG "${_PYTHON_BASENAME}_LIBRARY_DEBUG-NOTFOUND")
+  endif()
+
+  get_property(_PYTHON_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
+  if (${_PYTHON_BASENAME}_LIBRARY_DEBUG AND ${_PYTHON_BASENAME}_LIBRARY_RELEASE AND
+      NOT ${_PYTHON_BASENAME}_LIBRARY_DEBUG STREQUAL ${_PYTHON_BASENAME}_LIBRARY_RELEASE AND
+      (_PYTHON_isMultiConfig OR CMAKE_BUILD_TYPE))
+    # if the generator is multi-config or if CMAKE_BUILD_TYPE is set for
+    # single-config generators, set optimized and debug libraries
+    set (${_PYTHON_BASENAME}_LIBRARIES "")
+    foreach (_PYTHON_libname IN LISTS ${_PYTHON_BASENAME}_LIBRARY_RELEASE)
+      list( APPEND ${_PYTHON_BASENAME}_LIBRARIES optimized "${_PYTHON_libname}")
+    endforeach()
+    foreach (_PYTHON_libname IN LISTS ${_PYTHON_BASENAME}_LIBRARY_DEBUG)
+      list( APPEND ${_PYTHON_BASENAME}_LIBRARIES debug "${_PYTHON_libname}")
+    endforeach()
+  elseif (${_PYTHON_BASENAME}_LIBRARY_RELEASE)
+    set (${_PYTHON_BASENAME}_LIBRARIES "${${_PYTHON_BASENAME}_LIBRARY_RELEASE}")
+  elseif (${_PYTHON_BASENAME}_LIBRARY_DEBUG)
+    set (${_PYTHON_BASENAME}_LIBRARIES "${${_PYTHON_BASENAME}_LIBRARY_DEBUG}")
+  else()
+    set (${_PYTHON_BASENAME}_LIBRARIES "${_PYTHON_BASENAME}_LIBRARY-NOTFOUND")
+  endif()
+endmacro()
+
+
+macro (_PYTHON_FIND_FRAMEWORKS)
+  if (CMAKE_HOST_APPLE OR APPLE)
+    file(TO_CMAKE_PATH "$ENV{CMAKE_FRAMEWORK_PATH}" _pff_CMAKE_FRAMEWORK_PATH)
+    set (_pff_frameworks ${CMAKE_FRAMEWORK_PATH}
+                         ${_pff_CMAKE_FRAMEWORK_PATH}
+                         ~/Library/Frameworks
+                         /usr/local/Frameworks
+                         /opt/homebrew/Frameworks
+                         ${CMAKE_SYSTEM_FRAMEWORK_PATH})
+    list (REMOVE_DUPLICATES _pff_frameworks)
+    foreach (_pff_implementation IN LISTS _${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS)
+      unset (_${_PYTHON_PREFIX}_${_pff_implementation}_FRAMEWORKS)
+      if (_pff_implementation STREQUAL "CPython")
+        foreach (_pff_framework IN LISTS _pff_frameworks)
+          if (EXISTS ${_pff_framework}/Python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR}.framework)
+            list (APPEND _${_PYTHON_PREFIX}_${_pff_implementation}_FRAMEWORKS ${_pff_framework}/Python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR}.framework)
+          endif()
+          if (EXISTS ${_pff_framework}/Python.framework)
+            list (APPEND _${_PYTHON_PREFIX}_${_pff_implementation}_FRAMEWORKS ${_pff_framework}/Python.framework)
+          endif()
+        endforeach()
+      elseif (_pff_implementation STREQUAL "IronPython")
+        foreach (_pff_framework IN LISTS _pff_frameworks)
+          if (EXISTS ${_pff_framework}/IronPython.framework)
+            list (APPEND _${_PYTHON_PREFIX}_${_pff_implementation}_FRAMEWORKS ${_pff_framework}/IronPython.framework)
+          endif()
+        endforeach()
+      endif()
+    endforeach()
+    unset (_pff_implementation)
+    unset (_pff_frameworks)
+    unset (_pff_framework)
+  endif()
+endmacro()
+
+function (_PYTHON_GET_FRAMEWORKS _PYTHON_PGF_FRAMEWORK_PATHS)
+  cmake_parse_arguments (PARSE_ARGV 1 _PGF "" "" "IMPLEMENTATIONS;VERSION")
+
+  if (NOT _PGF_IMPLEMENTATIONS)
+    set (_PGF_IMPLEMENTATIONS ${_${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS})
+  endif()
+
+  set (framework_paths)
+
+  foreach (implementation IN LISTS _PGF_IMPLEMENTATIONS)
+    if (implementation STREQUAL "CPython")
+      foreach (version IN LISTS _PGF_VERSION)
+        foreach (framework IN LISTS _${_PYTHON_PREFIX}_${implementation}_FRAMEWORKS)
+          if (EXISTS "${framework}/Versions/${version}")
+            list (APPEND framework_paths "${framework}/Versions/${version}")
+          endif()
+        endforeach()
+      endforeach()
+    elseif (implementation STREQUAL "IronPython")
+      foreach (version IN LISTS _PGF_VERSION)
+        foreach (framework IN LISTS _${_PYTHON_PREFIX}_${implementation}_FRAMEWORKS)
+          # pick-up all available versions
+          file (GLOB versions LIST_DIRECTORIES true RELATIVE "${framework}/Versions/"
+                              "${framework}/Versions/${version}*")
+          list (SORT versions ORDER DESCENDING)
+          list (TRANSFORM versions PREPEND "${framework}/Versions/")
+          list (APPEND framework_paths ${versions})
+        endforeach()
+      endforeach()
+    endif()
+  endforeach()
+
+  set (${_PYTHON_PGF_FRAMEWORK_PATHS} ${framework_paths} PARENT_SCOPE)
+endfunction()
+
+function (_PYTHON_GET_REGISTRIES _PYTHON_PGR_REGISTRY_PATHS)
+  cmake_parse_arguments (PARSE_ARGV 1 _PGR "" "" "IMPLEMENTATIONS;VERSION")
+
+  if (NOT _PGR_IMPLEMENTATIONS)
+    set (_PGR_IMPLEMENTATIONS ${_${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS})
+  endif()
+
+  set (registries)
+
+  foreach (implementation IN LISTS _PGR_IMPLEMENTATIONS)
+    if (implementation STREQUAL "CPython")
+      foreach (version IN LISTS _PGR_VERSION)
+        string (REPLACE "." "" version_no_dots ${version})
+        list (APPEND registries
+                     [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${version}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath]
+                     [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${version}-${_${_PYTHON_PREFIX}_ARCH2}\\InstallPath])
+        if (version VERSION_GREATER_EQUAL "3.5")
+          get_filename_component (arch "[HKEY_CURRENT_USER\\Software\\Python\\PythonCore\\${version};SysArchitecture]" NAME)
+          if (arch MATCHES "(${_${_PYTHON_PREFIX}_ARCH}|${_${_PYTHON_PREFIX}_ARCH2})bit")
+            list (APPEND registries
+                         [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${version}\\InstallPath])
+          endif()
+        else()
+          list (APPEND registries
+                       [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${version}\\InstallPath])
+        endif()
+        list (APPEND registries
+                     [HKEY_CURRENT_USER\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${version_no_dots}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath]
+                     [HKEY_CURRENT_USER\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${version_no_dots}-${_${_PYTHON_PREFIX}_ARCH2}\\InstallPath]
+                     [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${version}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath]
+                     [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${version}-${_${_PYTHON_PREFIX}_ARCH2}\\InstallPath]
+                     [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${version}\\InstallPath]
+                     [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${version_no_dots}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath]
+                     [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${version_no_dots}-${_${_PYTHON_PREFIX}_ARCH2}\\InstallPath])
+      endforeach()
+    elseif (implementation STREQUAL "IronPython")
+      foreach (version  IN LISTS _PGR_VERSION)
+        list (APPEND registries [HKEY_LOCAL_MACHINE\\SOFTWARE\\IronPython\\${version}\\InstallPath])
+      endforeach()
+    endif()
+  endforeach()
+
+  set (${_PYTHON_PGR_REGISTRY_PATHS} "${registries}" PARENT_SCOPE)
+endfunction()
+
+
+function (_PYTHON_GET_ABIFLAGS _PGABIFLAGS)
+  set (abiflags)
+  list (GET _${_PYTHON_PREFIX}_FIND_ABI 0 pydebug)
+  list (GET _${_PYTHON_PREFIX}_FIND_ABI 1 pymalloc)
+  list (GET _${_PYTHON_PREFIX}_FIND_ABI 2 unicode)
+
+  if (pymalloc STREQUAL "ANY" AND unicode STREQUAL "ANY")
+    set (abiflags "mu" "m" "u" "")
+  elseif (pymalloc STREQUAL "ANY" AND unicode STREQUAL "ON")
+    set (abiflags "mu" "u")
+  elseif (pymalloc STREQUAL "ANY" AND unicode STREQUAL "OFF")
+    set (abiflags "m" "")
+  elseif (pymalloc STREQUAL "ON" AND unicode STREQUAL "ANY")
+    set (abiflags "mu" "m")
+  elseif (pymalloc STREQUAL "ON" AND unicode STREQUAL "ON")
+    set (abiflags "mu")
+  elseif (pymalloc STREQUAL "ON" AND unicode STREQUAL "OFF")
+    set (abiflags "m")
+  elseif (pymalloc STREQUAL "ON" AND unicode STREQUAL "ANY")
+    set (abiflags "u" "")
+  elseif (pymalloc STREQUAL "OFF" AND unicode STREQUAL "ON")
+    set (abiflags "u")
+  endif()
+
+  if (pydebug STREQUAL "ON")
+    if (abiflags)
+      list (TRANSFORM abiflags PREPEND "d")
+    else()
+      set (abiflags "d")
+    endif()
+  elseif (pydebug STREQUAL "ANY")
+    if (abiflags)
+      set (flags "${abiflags}")
+      list (TRANSFORM flags PREPEND "d")
+      list (APPEND abiflags "${flags}")
+    else()
+      set (abiflags "" "d")
+    endif()
+  endif()
+
+  set (${_PGABIFLAGS} "${abiflags}" PARENT_SCOPE)
+endfunction()
+
+function (_PYTHON_GET_PATH_SUFFIXES _PYTHON_PGPS_PATH_SUFFIXES)
+  cmake_parse_arguments (PARSE_ARGV 1 _PGPS "INTERPRETER;COMPILER;LIBRARY;INCLUDE" "" "IMPLEMENTATIONS;VERSION")
+
+  if (NOT _PGPS_IMPLEMENTATIONS)
+    set (_PGPS_IMPLEMENTATIONS ${_${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS})
+  endif()
+
+  if (DEFINED _${_PYTHON_PREFIX}_ABIFLAGS)
+    set (abi "${_${_PYTHON_PREFIX}_ABIFLAGS}")
+  else()
+    set (abi "mu" "m" "u" "")
+  endif()
+
+  set (path_suffixes)
+
+  foreach (implementation IN LISTS _PGPS_IMPLEMENTATIONS)
+    if (implementation STREQUAL "CPython")
+      if (_PGPS_INTERPRETER)
+        list (APPEND path_suffixes bin Scripts)
+      else()
+        foreach (version IN LISTS _PGPS_VERSION)
+          if (_PGPS_LIBRARY)
+            if (CMAKE_LIBRARY_ARCHITECTURE)
+              list (APPEND path_suffixes lib/${CMAKE_LIBRARY_ARCHITECTURE})
+            endif()
+            list (APPEND path_suffixes lib libs)
+
+            if (CMAKE_LIBRARY_ARCHITECTURE)
+              set (suffixes "${abi}")
+              if (suffixes)
+                list (TRANSFORM suffixes PREPEND "lib/python${_PGPS_VERSION}/config-${_PGPS_VERSION}")
+                list (TRANSFORM suffixes APPEND "-${CMAKE_LIBRARY_ARCHITECTURE}")
+              else()
+                set (suffixes "lib/python${_PGPS_VERSION}/config-${_PGPS_VERSION}-${CMAKE_LIBRARY_ARCHITECTURE}")
+              endif()
+              list (APPEND path_suffixes ${suffixes})
+            endif()
+            set (suffixes "${abi}")
+            if (suffixes)
+              list (TRANSFORM suffixes PREPEND "lib/python${_PGPS_VERSION}/config-${_PGPS_VERSION}")
+            else()
+              set (suffixes "lib/python${_PGPS_VERSION}/config-${_PGPS_VERSION}")
+            endif()
+            list (APPEND path_suffixes ${suffixes})
+          elseif (_PGPS_INCLUDE)
+            set (suffixes "${abi}")
+            if (suffixes)
+              list (TRANSFORM suffixes PREPEND "include/python${_PGPS_VERSION}")
+            else()
+              set (suffixes "include/python${_PGPS_VERSION}")
+            endif()
+            list (APPEND path_suffixes ${suffixes} include)
+          endif()
+        endforeach()
+      endif()
+    elseif (implementation STREQUAL "IronPython")
+      if (_PGPS_INTERPRETER OR _PGPS_COMPILER)
+        foreach (version IN LISTS _PGPS_VERSION)
+          list (APPEND path_suffixes "share/ironpython${version}")
+        endforeach()
+        list (APPEND path_suffixes ${_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES})
+      endif()
+    elseif (implementation STREQUAL "PyPy")
+      if (_PGPS_INTERPRETER)
+        list (APPEND path_suffixes ${_${_PYTHON_PREFIX}_PYPY_EXECUTABLE_PATH_SUFFIXES})
+      elseif (_PGPS_LIBRARY)
+        list (APPEND path_suffixes ${_${_PYTHON_PREFIX}_PYPY_LIBRARY_PATH_SUFFIXES})
+      elseif (_PGPS_INCLUDE)
+        list (APPEND path_suffixes ${_${_PYTHON_PREFIX}_PYPY_INCLUDE_PATH_SUFFIXES})
+      endif()
+    endif()
+  endforeach()
+  list (REMOVE_DUPLICATES path_suffixes)
+
+  set (${_PYTHON_PGPS_PATH_SUFFIXES} ${path_suffixes} PARENT_SCOPE)
+endfunction()
+
+function (_PYTHON_GET_NAMES _PYTHON_PGN_NAMES)
+  cmake_parse_arguments (PARSE_ARGV 1 _PGN "POSIX;INTERPRETER;COMPILER;CONFIG;LIBRARY;WIN32;DEBUG" "" "IMPLEMENTATIONS;VERSION")
+
+  if (NOT _PGN_IMPLEMENTATIONS)
+    set (_PGN_IMPLEMENTATIONS ${_${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS})
+  endif()
+
+  set (names)
+
+  foreach (implementation IN LISTS _PGN_IMPLEMENTATIONS)
+    if (implementation STREQUAL "CPython")
+      if (_PGN_INTERPRETER AND _${_PYTHON_PREFIX}_FIND_UNVERSIONED_NAMES STREQUAL "FIRST")
+        list (APPEND names python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR} python)
+      endif()
+      foreach (version IN LISTS _PGN_VERSION)
+        if (_PGN_WIN32)
+          string (REPLACE "." "" version_no_dots ${version})
+
+          set (name python${version_no_dots})
+          if (_PGN_DEBUG)
+            string (APPEND name "_d")
+          endif()
+
+          list (APPEND names "${name}")
+        endif()
+
+        if (_PGN_POSIX)
+          if (DEFINED _${_PYTHON_PREFIX}_ABIFLAGS)
+            set (abi "${_${_PYTHON_PREFIX}_ABIFLAGS}")
+          else()
+            if (_PGN_INTERPRETER OR _PGN_CONFIG)
+              set (abi "")
+            else()
+              set (abi "mu" "m" "u" "")
+            endif()
+          endif()
+
+          if (abi)
+            if (_PGN_CONFIG AND DEFINED CMAKE_LIBRARY_ARCHITECTURE)
+              set (abinames "${abi}")
+              list (TRANSFORM abinames PREPEND "${CMAKE_LIBRARY_ARCHITECTURE}-python${version}")
+              list (TRANSFORM abinames APPEND "-config")
+              list (APPEND names ${abinames})
+            endif()
+            set (abinames "${abi}")
+            list (TRANSFORM abinames PREPEND "python${version}")
+            if (_PGN_CONFIG)
+              list (TRANSFORM abinames APPEND "-config")
+            endif()
+            list (APPEND names ${abinames})
+          else()
+            unset (abinames)
+            if (_PGN_CONFIG AND DEFINED CMAKE_LIBRARY_ARCHITECTURE)
+              set (abinames "${CMAKE_LIBRARY_ARCHITECTURE}-python${version}")
+            endif()
+            list (APPEND abinames "python${version}")
+            if (_PGN_CONFIG)
+              list (TRANSFORM abinames APPEND "-config")
+            endif()
+            list (APPEND names ${abinames})
+          endif()
+        endif()
+      endforeach()
+      if (_PGN_INTERPRETER AND _${_PYTHON_PREFIX}_FIND_UNVERSIONED_NAMES STREQUAL "LAST")
+        list (APPEND names python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR} python)
+      endif()
+    elseif (implementation STREQUAL "IronPython")
+      if (_PGN_INTERPRETER)
+        if (NOT CMAKE_SYSTEM_NAME STREQUAL "Linux")
+          # Do not use wrapper script on Linux because it is buggy: -c interpreter option cannot be used
+          foreach (version IN LISTS _PGN_VERSION)
+            list (APPEND names "ipy${version}")
+          endforeach()
+        endif()
+        list (APPEND names ${_${_PYTHON_PREFIX}_IRON_PYTHON_INTERPRETER_NAMES})
+      elseif (_PGN_COMPILER)
+        list (APPEND names ${_${_PYTHON_PREFIX}_IRON_PYTHON_COMPILER_NAMES})
+      endif()
+    elseif (implementation STREQUAL "PyPy")
+      if (_PGN_INTERPRETER)
+        list (APPEND names ${_${_PYTHON_PREFIX}_PYPY_NAMES})
+      elseif (_PGN_LIBRARY)
+        if (_PGN_WIN32)
+          foreach (version IN LISTS _PGN_VERSION)
+            string (REPLACE "." "" version_no_dots ${version})
+
+            set (name "python${version_no_dots}")
+            if (_PGN_DEBUG)
+              string (APPEND name "_d")
+            endif()
+            list (APPEND names "${name}")
+          endforeach()
+        endif()
+        list (APPEND names ${_${_PYTHON_PREFIX}_PYPY_LIB_NAMES})
+      endif()
+    endif()
+  endforeach()
+
+  set (${_PYTHON_PGN_NAMES} ${names} PARENT_SCOPE)
+endfunction()
+
+function (_PYTHON_GET_CONFIG_VAR _PYTHON_PGCV_VALUE NAME)
+  unset (${_PYTHON_PGCV_VALUE} PARENT_SCOPE)
+
+  if (NOT NAME MATCHES "^(PREFIX|ABIFLAGS|CONFIGDIR|INCLUDES|LIBS|SOABI)$")
+    return()
+  endif()
+
+  if (_${_PYTHON_PREFIX}_CONFIG)
+    if (NAME STREQUAL "SOABI")
+      set (config_flag "--extension-suffix")
+    else()
+      set (config_flag "--${NAME}")
+    endif()
+    string (TOLOWER "${config_flag}" config_flag)
+    execute_process (COMMAND "${_${_PYTHON_PREFIX}_CONFIG}" ${config_flag}
+                     RESULT_VARIABLE _result
+                     OUTPUT_VARIABLE _values
+                     ERROR_QUIET
+                     OUTPUT_STRIP_TRAILING_WHITESPACE)
+    if (_result)
+      unset (_values)
+    else()
+      if (NAME STREQUAL "INCLUDES")
+        # do some clean-up
+        string (REGEX MATCHALL "(-I|-iwithsysroot)[ ]*[^ ]+" _values "${_values}")
+        string (REGEX REPLACE "(-I|-iwithsysroot)[ ]*" "" _values "${_values}")
+        list (REMOVE_DUPLICATES _values)
+      elseif (NAME STREQUAL "SOABI")
+        # clean-up: remove prefix character and suffix
+        if (_values MATCHES "^(\\.${CMAKE_SHARED_LIBRARY_SUFFIX}|\\.so|\\.pyd)$")
+          set(_values "")
+        else()
+          string (REGEX REPLACE "^[.-](.+)(${CMAKE_SHARED_LIBRARY_SUFFIX}|\\.(so|pyd))$" "\\1" _values "${_values}")
+        endif()
+      endif()
+    endif()
+  endif()
+
+  if (_${_PYTHON_PREFIX}_EXECUTABLE AND NOT CMAKE_CROSSCOMPILING)
+    if (NAME STREQUAL "PREFIX")
+      execute_process (COMMAND ${_${_PYTHON_PREFIX}_INTERPRETER_LAUNCHER} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c "import sys\ntry:\n   from distutils import sysconfig\n   sys.stdout.write(';'.join([sysconfig.PREFIX,sysconfig.EXEC_PREFIX,sysconfig.BASE_EXEC_PREFIX]))\nexcept Exception:\n   import sysconfig\n   sys.stdout.write(';'.join([sysconfig.get_config_var('base') or '', sysconfig.get_config_var('installed_base') or '']))"
+                       RESULT_VARIABLE _result
+                       OUTPUT_VARIABLE _values
+                       ERROR_QUIET
+                       OUTPUT_STRIP_TRAILING_WHITESPACE)
+      if (_result)
+        unset (_values)
+      else()
+        list (REMOVE_DUPLICATES _values)
+      endif()
+    elseif (NAME STREQUAL "INCLUDES")
+      if (WIN32)
+        set (_scheme "nt")
+      else()
+        set (_scheme "posix_prefix")
+      endif()
+      execute_process (COMMAND ${_${_PYTHON_PREFIX}_INTERPRETER_LAUNCHER} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
+                               "import sys\ntry:\n   from distutils import sysconfig\n   sys.stdout.write(';'.join([sysconfig.get_python_inc(plat_specific=True),sysconfig.get_python_inc(plat_specific=False)]))\nexcept Exception:\n   import sysconfig\n   sys.stdout.write(';'.join([sysconfig.get_path('platinclude'),sysconfig.get_path('platinclude','${_scheme}'),sysconfig.get_path('include'),sysconfig.get_path('include','${_scheme}')]))"
+                       RESULT_VARIABLE _result
+                       OUTPUT_VARIABLE _values
+                       ERROR_QUIET
+                       OUTPUT_STRIP_TRAILING_WHITESPACE)
+      if (_result)
+        unset (_values)
+      else()
+        list (REMOVE_DUPLICATES _values)
+      endif()
+    elseif (NAME STREQUAL "SOABI")
+      execute_process (COMMAND ${_${_PYTHON_PREFIX}_INTERPRETER_LAUNCHER} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
+                               "import sys\ntry:\n   from distutils import sysconfig\n   sys.stdout.write(';'.join([sysconfig.get_config_var('SOABI') or '',sysconfig.get_config_var('EXT_SUFFIX') or '',sysconfig.get_config_var('SO') or '']))\nexcept Exception:\n   import sysconfig;sys.stdout.write(';'.join([sysconfig.get_config_var('SOABI') or '',sysconfig.get_config_var('EXT_SUFFIX') or '',sysconfig.get_config_var('SO') or '']))"
+                       RESULT_VARIABLE _result
+                       OUTPUT_VARIABLE _soabi
+                       ERROR_QUIET
+                       OUTPUT_STRIP_TRAILING_WHITESPACE)
+      if (_result)
+        unset (_values)
+      else()
+        foreach (_item IN LISTS _soabi)
+          if (_item)
+            set (_values "${_item}")
+            break()
+          endif()
+        endforeach()
+        if (_values)
+          # clean-up: remove prefix character and suffix
+          if (_values MATCHES "^(\\.${CMAKE_SHARED_LIBRARY_SUFFIX}|\\.so|\\.pyd)$")
+            set(_values "")
+          else()
+            string (REGEX REPLACE "^[.-](.+)(${CMAKE_SHARED_LIBRARY_SUFFIX}|\\.(so|pyd))$" "\\1" _values "${_values}")
+          endif()
+        endif()
+      endif()
+    else()
+      set (config_flag "${NAME}")
+      if (NAME STREQUAL "CONFIGDIR")
+        set (config_flag "LIBPL")
+      endif()
+      execute_process (COMMAND ${_${_PYTHON_PREFIX}_INTERPRETER_LAUNCHER} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
+                               "import sys\ntry:\n   from distutils import sysconfig\n   sys.stdout.write(sysconfig.get_config_var('${config_flag}'))\nexcept Exception:\n   import sysconfig\n   sys.stdout.write(sysconfig.get_config_var('${config_flag}'))"
+                       RESULT_VARIABLE _result
+                       OUTPUT_VARIABLE _values
+                       ERROR_QUIET
+                       OUTPUT_STRIP_TRAILING_WHITESPACE)
+      if (_result)
+        unset (_values)
+      endif()
+    endif()
+  endif()
+
+  if (NAME STREQUAL "ABIFLAGS" OR NAME STREQUAL "SOABI")
+    set (${_PYTHON_PGCV_VALUE} "${_values}" PARENT_SCOPE)
+    return()
+  endif()
+
+  if (NOT _values OR _values STREQUAL "None")
+    return()
+  endif()
+
+  if (NAME STREQUAL "LIBS")
+    # do some clean-up
+    string (REGEX MATCHALL "-(l|framework)[ ]*[^ ]+" _values "${_values}")
+    # remove elements relative to python library itself
+    list (FILTER _values EXCLUDE REGEX "-lpython")
+    list (REMOVE_DUPLICATES _values)
+  endif()
+
+  if (WIN32 AND NAME MATCHES "^(PREFIX|CONFIGDIR|INCLUDES)$")
+    file (TO_CMAKE_PATH "${_values}" _values)
+  endif()
+
+  set (${_PYTHON_PGCV_VALUE} "${_values}" PARENT_SCOPE)
+endfunction()
+
+function (_PYTHON_GET_VERSION)
+  cmake_parse_arguments (PARSE_ARGV 0 _PGV "LIBRARY;INCLUDE" "PREFIX" "")
+
+  unset (${_PGV_PREFIX}VERSION PARENT_SCOPE)
+  unset (${_PGV_PREFIX}VERSION_MAJOR PARENT_SCOPE)
+  unset (${_PGV_PREFIX}VERSION_MINOR PARENT_SCOPE)
+  unset (${_PGV_PREFIX}VERSION_PATCH PARENT_SCOPE)
+  unset (${_PGV_PREFIX}ABI PARENT_SCOPE)
+
+  if (_PGV_LIBRARY)
+    # retrieve version and abi from library name
+    if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE)
+      get_filename_component (library_name "${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}" NAME)
+      # extract version from library name
+      if (library_name MATCHES "python([23])([0-9]+)")
+        set (${_PGV_PREFIX}VERSION_MAJOR "${CMAKE_MATCH_1}" PARENT_SCOPE)
+        set (${_PGV_PREFIX}VERSION_MINOR "${CMAKE_MATCH_2}" PARENT_SCOPE)
+        set (${_PGV_PREFIX}VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}" PARENT_SCOPE)
+        set (${_PGV_PREFIX}ABI "" PARENT_SCOPE)
+      elseif (library_name MATCHES "python([23])\\.([0-9]+)([dmu]*)")
+        set (${_PGV_PREFIX}VERSION_MAJOR "${CMAKE_MATCH_1}" PARENT_SCOPE)
+        set (${_PGV_PREFIX}VERSION_MINOR "${CMAKE_MATCH_2}" PARENT_SCOPE)
+        set (${_PGV_PREFIX}VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}" PARENT_SCOPE)
+        set (${_PGV_PREFIX}ABI "${CMAKE_MATCH_3}" PARENT_SCOPE)
+      elseif (library_name MATCHES "pypy(3)?-c")
+        set (version "${CMAKE_MATCH_1}")
+        if (version EQUAL "3")
+          set (${_PGV_PREFIX}VERSION_MAJOR "3" PARENT_SCOPE)
+          set (${_PGV_PREFIX}VERSION "3" PARENT_SCOPE)
+        else()
+          set (${_PGV_PREFIX}VERSION_MAJOR "2" PARENT_SCOPE)
+          set (${_PGV_PREFIX}VERSION "2" PARENT_SCOPE)
+        endif()
+        set (${_PGV_PREFIX}ABI "" PARENT_SCOPE)
+      endif()
+    endif()
+  else()
+    if (_${_PYTHON_PREFIX}_INCLUDE_DIR)
+      # retrieve version from header file
+      file (STRINGS "${_${_PYTHON_PREFIX}_INCLUDE_DIR}/patchlevel.h" version
+            REGEX "^#define[ \t]+PY_VERSION[ \t]+\"[^\"]+\"")
+      string (REGEX REPLACE "^#define[ \t]+PY_VERSION[ \t]+\"([^\"]+)\".*" "\\1"
+                            version "${version}")
+      string (REGEX MATCHALL "[0-9]+" versions "${version}")
+      list (GET versions 0 version_major)
+      list (GET versions 1 version_minor)
+      list (GET versions 2 version_patch)
+
+      set (${_PGV_PREFIX}VERSION "${version_major}.${version_minor}.${version_patch}" PARENT_SCOPE)
+      set (${_PGV_PREFIX}VERSION_MAJOR ${version_major} PARENT_SCOPE)
+      set (${_PGV_PREFIX}VERSION_MINOR ${version_minor} PARENT_SCOPE)
+      set (${_PGV_PREFIX}VERSION_PATCH ${version_patch} PARENT_SCOPE)
+
+      # compute ABI flags
+      if (version_major VERSION_GREATER "2")
+        file (STRINGS "${_${_PYTHON_PREFIX}_INCLUDE_DIR}/pyconfig.h" config REGEX "(Py_DEBUG|WITH_PYMALLOC|Py_UNICODE_SIZE|MS_WIN32)")
+        set (abi)
+        if (config MATCHES "#[ ]*define[ ]+MS_WIN32")
+          # ABI not used on Windows
+          set (abi "")
+        else()
+          if (NOT config)
+            # pyconfig.h can be a wrapper to a platform specific pyconfig.h
+            # In this case, try to identify ABI from include directory
+            if (_${_PYTHON_PREFIX}_INCLUDE_DIR MATCHES "python${version_major}\\.${version_minor}+([dmu]*)")
+              set (abi "${CMAKE_MATCH_1}")
+            else()
+              set (abi "")
+            endif()
+          else()
+            if (config MATCHES "#[ ]*define[ ]+Py_DEBUG[ ]+1")
+              string (APPEND abi "d")
+            endif()
+            if (config MATCHES "#[ ]*define[ ]+WITH_PYMALLOC[ ]+1")
+              string (APPEND abi "m")
+            endif()
+            if (config MATCHES "#[ ]*define[ ]+Py_UNICODE_SIZE[ ]+4")
+              string (APPEND abi "u")
+            endif()
+          endif()
+          set (${_PGV_PREFIX}ABI "${abi}" PARENT_SCOPE)
+        endif()
+      else()
+        # ABI not supported
+        set (${_PGV_PREFIX}ABI "" PARENT_SCOPE)
+      endif()
+    endif()
+  endif()
+endfunction()
+
+function (_PYTHON_GET_LAUNCHER _PYTHON_PGL_NAME)
+  cmake_parse_arguments (PARSE_ARGV 1 _PGL "INTERPRETER;COMPILER" "" "")
+
+  unset ({_PYTHON_PGL_NAME} PARENT_SCOPE)
+
+  if ((_PGL_INTERPRETER AND NOT _${_PYTHON_PREFIX}_EXECUTABLE)
+      OR (_PGL_COMPILER AND NOT _${_PYTHON_PREFIX}_COMPILER))
+    return()
+  endif()
+
+  if ("IronPython" IN_LIST _${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS
+      AND NOT SYSTEM_NAME MATCHES "Windows|Linux")
+    if (_PGL_INTERPRETER)
+      get_filename_component (name "${_${_PYTHON_PREFIX}_EXECUTABLE}" NAME)
+      get_filename_component (ext "${_${_PYTHON_PREFIX}_EXECUTABLE}" LAST_EXT)
+      if (name IN_LIST _${_PYTHON_PREFIX}_IRON_PYTHON_INTERPRETER_NAMES
+          AND ext STREQUAL ".exe")
+        set (${_PYTHON_PGL_NAME} "${${_PYTHON_PREFIX}_DOTNET_LAUNCHER}" PARENT_SCOPE)
+      endif()
+    else()
+      get_filename_component (name "${_${_PYTHON_PREFIX}_COMPILER}" NAME)
+      get_filename_component (ext "${_${_PYTHON_PREFIX}_COMPILER}" LAST_EXT)
+      if (name IN_LIST _${_PYTHON_PREFIX}_IRON_PYTHON_COMPILER_NAMES
+          AND ext STREQUAL ".exe")
+        set (${_PYTHON_PGL_NAME} "${${_PYTHON_PREFIX}_DOTNET_LAUNCHER}" PARENT_SCOPE)
+      endif()
+    endif()
+  endif()
+endfunction()
+
+
+function (_PYTHON_VALIDATE_INTERPRETER)
+  if (NOT _${_PYTHON_PREFIX}_EXECUTABLE)
+    return()
+  endif()
+
+  cmake_parse_arguments (PARSE_ARGV 0 _PVI "IN_RANGE;EXACT;CHECK_EXISTS" "VERSION" "")
+
+  if (_PVI_CHECK_EXISTS AND NOT EXISTS "${_${_PYTHON_PREFIX}_EXECUTABLE}")
+    # interpreter does not exist anymore
+    set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE "Cannot find the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"" PARENT_SCOPE)
+    set_property (CACHE _${_PYTHON_PREFIX}_EXECUTABLE PROPERTY VALUE "${_PYTHON_PREFIX}_EXECUTABLE-NOTFOUND")
+    return()
+  endif()
+
+  _python_get_launcher (launcher INTERPRETER)
+
+  # validate ABI compatibility
+  if (DEFINED _${_PYTHON_PREFIX}_FIND_ABI)
+    execute_process (COMMAND ${launcher} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
+                             "import sys; sys.stdout.write(sys.abiflags)"
+                     RESULT_VARIABLE result
+                     OUTPUT_VARIABLE abi
+                     ERROR_QUIET
+                     OUTPUT_STRIP_TRAILING_WHITESPACE)
+    if (result)
+      # assume ABI is not supported
+      set (abi "")
+    endif()
+    if (NOT abi IN_LIST _${_PYTHON_PREFIX}_ABIFLAGS)
+      # incompatible ABI
+      set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE "Wrong ABI for the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"" PARENT_SCOPE)
+      set_property (CACHE _${_PYTHON_PREFIX}_EXECUTABLE PROPERTY VALUE "${_PYTHON_PREFIX}_EXECUTABLE-NOTFOUND")
+      return()
+    endif()
+  endif()
+
+  if (_PVI_IN_RANGE OR _PVI_VERSION)
+    # retrieve full version
+    execute_process (COMMAND ${launcher} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
+                             "import sys; sys.stdout.write('.'.join([str(x) for x in sys.version_info[:3]]))"
+                     RESULT_VARIABLE result
+                     OUTPUT_VARIABLE version
+                     ERROR_QUIET
+                     OUTPUT_STRIP_TRAILING_WHITESPACE)
+    if (result)
+      # interpreter is not usable
+      set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE "Cannot use the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"" PARENT_SCOPE)
+      set_property (CACHE _${_PYTHON_PREFIX}_EXECUTABLE PROPERTY VALUE "${_PYTHON_PREFIX}_EXECUTABLE-NOTFOUND")
+      return()
+    endif()
+
+    if (_PVI_VERSION)
+      # check against specified version
+      ## compute number of components for version
+      string (REGEX REPLACE "[^.]" "" dots "${_PVI_VERSION}")
+      ## add one dot because there is one dot less than there are components
+      string (LENGTH "${dots}." count)
+      if (count GREATER 3)
+        set (count 3)
+      endif()
+      set (version_regex "^[0-9]+")
+      if (count EQUAL 3)
+        string (APPEND version_regex "\\.[0-9]+\\.[0-9]+")
+      elseif (count EQUAL 2)
+        string (APPEND version_regex "\\.[0-9]+")
+      endif()
+      # extract needed range
+      string (REGEX MATCH "${version_regex}" version "${version}")
+
+      if (_PVI_EXACT AND NOT version VERSION_EQUAL _PVI_VERSION)
+        # interpreter has wrong version
+        set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE "Wrong version for the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"" PARENT_SCOPE)
+        set_property (CACHE _${_PYTHON_PREFIX}_EXECUTABLE PROPERTY VALUE "${_PYTHON_PREFIX}_EXECUTABLE-NOTFOUND")
+        return()
+      else()
+        # check that version is OK
+        string(REGEX REPLACE "^([0-9]+)\\.?.*$" "\\1" major_version "${version}")
+        string(REGEX REPLACE "^([0-9]+)\\.?.*$" "\\1" expected_major_version "${_PVI_VERSION}")
+        if (NOT major_version VERSION_EQUAL expected_major_version
+            OR NOT version VERSION_GREATER_EQUAL _PVI_VERSION)
+          set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE "Wrong version for the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"" PARENT_SCOPE)
+          set_property (CACHE _${_PYTHON_PREFIX}_EXECUTABLE PROPERTY VALUE "${_PYTHON_PREFIX}_EXECUTABLE-NOTFOUND")
+          return()
+        endif()
+      endif()
+    endif()
+
+    if (_PVI_IN_RANGE)
+      # check if version is in the requested range
+      find_package_check_version ("${version}" in_range HANDLE_VERSION_RANGE)
+      if (NOT in_range)
+        # interpreter has invalid version
+        set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE "Wrong version for the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"" PARENT_SCOPE)
+        set_property (CACHE _${_PYTHON_PREFIX}_EXECUTABLE PROPERTY VALUE "${_PYTHON_PREFIX}_EXECUTABLE-NOTFOUND")
+        return()
+      endif()
+    endif()
+  else()
+    get_filename_component (python_name "${_${_PYTHON_PREFIX}_EXECUTABLE}" NAME)
+    if (NOT python_name STREQUAL "python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR}${CMAKE_EXECUTABLE_SUFFIX}")
+      # executable found do not have version in name
+      # ensure major version is OK
+      execute_process (COMMAND ${launcher} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
+                               "import sys; sys.stdout.write(str(sys.version_info[0]))"
+                       RESULT_VARIABLE result
+                       OUTPUT_VARIABLE version
+                       ERROR_QUIET
+                       OUTPUT_STRIP_TRAILING_WHITESPACE)
+      if (result OR NOT version EQUAL _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR)
+        # interpreter not usable or has wrong major version
+        if (result)
+          set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE "Cannot use the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"" PARENT_SCOPE)
+        else()
+          set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE "Wrong major version for the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"" PARENT_SCOPE)
+        endif()
+        set_property (CACHE _${_PYTHON_PREFIX}_EXECUTABLE PROPERTY VALUE "${_PYTHON_PREFIX}_EXECUTABLE-NOTFOUND")
+        return()
+      endif()
+    endif()
+  endif()
+
+  if (CMAKE_SIZEOF_VOID_P AND ("Development.Module" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
+        OR "Development.Embed" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
+      AND NOT CMAKE_CROSSCOMPILING)
+    # In this case, interpreter must have same architecture as environment
+    execute_process (COMMAND ${launcher} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
+                             "import sys, struct; sys.stdout.write(str(struct.calcsize(\"P\")))"
+                     RESULT_VARIABLE result
+                     OUTPUT_VARIABLE size
+                     ERROR_QUIET
+                     OUTPUT_STRIP_TRAILING_WHITESPACE)
+    if (result OR NOT size EQUAL CMAKE_SIZEOF_VOID_P)
+      # interpreter not usable or has wrong architecture
+      if (result)
+        set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE "Cannot use the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"" PARENT_SCOPE)
+      else()
+        set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE "Wrong architecture for the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"" PARENT_SCOPE)
+      endif()
+      set_property (CACHE _${_PYTHON_PREFIX}_EXECUTABLE PROPERTY VALUE "${_PYTHON_PREFIX}_EXECUTABLE-NOTFOUND")
+      return()
+    endif()
+  endif()
+endfunction()
+
+
+function (_PYTHON_VALIDATE_COMPILER)
+  if (NOT _${_PYTHON_PREFIX}_COMPILER)
+    return()
+  endif()
+
+  cmake_parse_arguments (PARSE_ARGV 0 _PVC "IN_RANGE;EXACT;CHECK_EXISTS" "VERSION" "")
+
+  if (_PVC_CHECK_EXISTS AND NOT EXISTS "${_${_PYTHON_PREFIX}_COMPILER}")
+    # Compiler does not exist anymore
+    set (_${_PYTHON_PREFIX}_Compiler_REASON_FAILURE "Cannot find the compiler \"${_${_PYTHON_PREFIX}_COMPILER}\"" PARENT_SCOPE)
+    set_property (CACHE _${_PYTHON_PREFIX}_COMPILER PROPERTY VALUE "${_PYTHON_PREFIX}_COMPILER-NOTFOUND")
+    return()
+  endif()
+
+  _python_get_launcher (launcher COMPILER)
+
+  # retrieve python environment version from compiler
+  set (working_dir "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/PythonCompilerVersion.dir")
+  file (WRITE "${working_dir}/version.py" "import sys; sys.stdout.write('.'.join([str(x) for x in sys.version_info[:3]]))\n")
+  execute_process (COMMAND ${launcher} "${_${_PYTHON_PREFIX}_COMPILER}"
+                           ${_${_PYTHON_PREFIX}_IRON_PYTHON_COMPILER_ARCH_FLAGS}
+                           /target:exe /embed "${working_dir}/version.py"
+                   WORKING_DIRECTORY "${working_dir}"
+                   OUTPUT_QUIET
+                   ERROR_QUIET
+                   OUTPUT_STRIP_TRAILING_WHITESPACE)
+  get_filename_component (ir_dir "${_${_PYTHON_PREFIX}_COMPILER}" DIRECTORY)
+  execute_process (COMMAND "${CMAKE_COMMAND}" -E env "MONO_PATH=${ir_dir}"
+                                              ${${_PYTHON_PREFIX}_DOTNET_LAUNCHER} "${working_dir}/version.exe"
+                   WORKING_DIRECTORY "${working_dir}"
+                   RESULT_VARIABLE result
+                   OUTPUT_VARIABLE version
+                   ERROR_QUIET)
+  file (REMOVE_RECURSE "${working_dir}")
+  if (result)
+    # compiler is not usable
+    set (_${_PYTHON_PREFIX}_Compiler_REASON_FAILURE "Cannot use the compiler \"${_${_PYTHON_PREFIX}_COMPILER}\"" PARENT_SCOPE)
+    set_property (CACHE _${_PYTHON_PREFIX}_COMPILER PROPERTY VALUE "${_PYTHON_PREFIX}_COMPILER-NOTFOUND")
+    return()
+  endif()
+
+  if (_PVC_VERSION OR _PVC_IN_RANGE)
+    if (_PVC_VERSION)
+      # check against specified version
+      ## compute number of components for version
+      string (REGEX REPLACE "[^.]" "" dots "${_PVC_VERSION}")
+      ## add one dot because there is one dot less than there are components
+      string (LENGTH "${dots}." count)
+      if (count GREATER 3)
+        set (count 3)
+      endif()
+      set (version_regex "^[0-9]+")
+      if (count EQUAL 3)
+        string (APPEND version_regex "\\.[0-9]+\\.[0-9]+")
+      elseif (count EQUAL 2)
+        string (APPEND version_regex "\\.[0-9]+")
+      endif()
+      # extract needed range
+      string (REGEX MATCH "${version_regex}" version "${version}")
+
+      if (_PVC_EXACT AND NOT version VERSION_EQUAL _PVC_VERSION)
+        # interpreter has wrong version
+        set (_${_PYTHON_PREFIX}_Compiler_REASON_FAILURE "Wrong version for the compiler \"${_${_PYTHON_PREFIX}_COMPILER}\"" PARENT_SCOPE)
+        set_property (CACHE _${_PYTHON_PREFIX}_COMPILER PROPERTY VALUE "${_PYTHON_PREFIX}_COMPILER-NOTFOUND")
+        return()
+      else()
+        # check that version is OK
+        string(REGEX REPLACE "^([0-9]+)\\.?.*$" "\\1" major_version "${version}")
+        string(REGEX REPLACE "^([0-9]+)\\.?.*$" "\\1" expected_major_version "${_PVC_VERSION}")
+        if (NOT major_version VERSION_EQUAL expected_major_version
+            OR NOT version VERSION_GREATER_EQUAL _PVC_VERSION)
+          set (_${_PYTHON_PREFIX}_Compiler_REASON_FAILURE "Wrong version for the compiler \"${_${_PYTHON_PREFIX}_COMPILER}\"" PARENT_SCOPE)
+          set_property (CACHE _${_PYTHON_PREFIX}_COMPILER PROPERTY VALUE "${_PYTHON_PREFIX}_COMPILER-NOTFOUND")
+          return()
+        endif()
+      endif()
+    endif()
+
+    if (_PVC_IN_RANGE)
+      # check if version is in the requested range
+      find_package_check_version ("${version}" in_range HANDLE_VERSION_RANGE)
+      if (NOT in_range)
+        # interpreter has invalid version
+        set (_${_PYTHON_PREFIX}_Compiler_REASON_FAILURE "Wrong version for the compiler \"${_${_PYTHON_PREFIX}_COMPILER}\"" PARENT_SCOPE)
+        set_property (CACHE _${_PYTHON_PREFIX}_COMPILER PROPERTY VALUE "${_PYTHON_PREFIX}_COMPILER-NOTFOUND")
+        return()
+      endif()
+    endif()
+  else()
+    string(REGEX REPLACE "^([0-9]+)\\.?.*$" "\\1" major_version "${version}")
+    if (NOT major_version EQUAL _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR)
+      # Compiler has wrong major version
+      set (_${_PYTHON_PREFIX}_Compiler_REASON_FAILURE "Wrong major version for the compiler \"${_${_PYTHON_PREFIX}_COMPILER}\"" PARENT_SCOPE)
+      set_property (CACHE _${_PYTHON_PREFIX}_COMPILER PROPERTY VALUE "${_PYTHON_PREFIX}_COMPILER-NOTFOUND")
+      return()
+    endif()
+  endif()
+endfunction()
+
+
+function (_PYTHON_VALIDATE_LIBRARY)
+  if (NOT _${_PYTHON_PREFIX}_LIBRARY_RELEASE)
+    unset (_${_PYTHON_PREFIX}_LIBRARY_DEBUG)
+    return()
+  endif()
+
+  cmake_parse_arguments (PARSE_ARGV 0 _PVL "IN_RANGE;EXACT;CHECK_EXISTS" "VERSION" "")
+
+  if (_PVL_CHECK_EXISTS AND NOT EXISTS "${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}")
+    # library does not exist anymore
+    set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE "Cannot find the library \"${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}\"" PARENT_SCOPE)
+    set_property (CACHE _${_PYTHON_PREFIX}_LIBRARY_RELEASE PROPERTY VALUE "${_PYTHON_PREFIX}_LIBRARY_RELEASE-NOTFOUND")
+    if (WIN32)
+      set_property (CACHE _${_PYTHON_PREFIX}_LIBRARY_DEBUG PROPERTY VALUE "${_PYTHON_PREFIX}_LIBRARY_DEBUG-NOTFOUND")
+    endif()
+    set_property (CACHE _${_PYTHON_PREFIX}_INCLUDE_DIR PROPERTY VALUE "${_PYTHON_PREFIX}_INCLUDE_DIR-NOTFOUND")
+    return()
+  endif()
+
+  # retrieve version and abi from library name
+  _python_get_version (LIBRARY PREFIX lib_)
+
+  if (DEFINED _${_PYTHON_PREFIX}_FIND_ABI AND NOT lib_ABI IN_LIST _${_PYTHON_PREFIX}_ABIFLAGS)
+    # incompatible ABI
+    set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE "Wrong ABI for the library \"${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}\"" PARENT_SCOPE)
+    set_property (CACHE _${_PYTHON_PREFIX}_LIBRARY_RELEASE PROPERTY VALUE "${_PYTHON_PREFIX}_LIBRARY_RELEASE-NOTFOUND")
+  else()
+    if (_PVL_VERSION OR _PVL_IN_RANGE)
+      if (_PVL_VERSION)
+        # library have only major.minor information
+        string (REGEX MATCH "[0-9](\\.[0-9]+)?" version "${_PVL_VERSION}")
+        if ((_PVL_EXACT AND NOT lib_VERSION VERSION_EQUAL version) OR (lib_VERSION VERSION_LESS version))
+          # library has wrong version
+          set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE "Wrong version for the library \"${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}\"" PARENT_SCOPE)
+          set_property (CACHE _${_PYTHON_PREFIX}_LIBRARY_RELEASE PROPERTY VALUE "${_PYTHON_PREFIX}_LIBRARY_RELEASE-NOTFOUND")
+        endif()
+      endif()
+
+      if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE AND _PVL_IN_RANGE)
+        # check if library version is in the requested range
+        find_package_check_version ("${lib_VERSION}" in_range HANDLE_VERSION_RANGE)
+        if (NOT in_range)
+          # library has wrong version
+          set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE "Wrong version for the library \"${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}\"" PARENT_SCOPE)
+          set_property (CACHE _${_PYTHON_PREFIX}_LIBRARY_RELEASE PROPERTY VALUE "${_PYTHON_PREFIX}_LIBRARY_RELEASE-NOTFOUND")
+        endif()
+      endif()
+    else()
+      if (NOT lib_VERSION_MAJOR VERSION_EQUAL _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR)
+        # library has wrong major version
+        set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE "Wrong major version for the library \"${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}\"" PARENT_SCOPE)
+        set_property (CACHE _${_PYTHON_PREFIX}_LIBRARY_RELEASE PROPERTY VALUE "${_PYTHON_PREFIX}_LIBRARY_RELEASE-NOTFOUND")
+      endif()
+    endif()
+  endif()
+
+  if (NOT _${_PYTHON_PREFIX}_LIBRARY_RELEASE)
+    if (WIN32)
+      set_property (CACHE _${_PYTHON_PREFIX}_LIBRARY_DEBUG PROPERTY VALUE "${_PYTHON_PREFIX}_LIBRARY_DEBUG-NOTFOUND")
+    endif()
+    unset (_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE CACHE)
+    unset (_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG CACHE)
+    set_property (CACHE _${_PYTHON_PREFIX}_INCLUDE_DIR PROPERTY VALUE "${_PYTHON_PREFIX}_INCLUDE_DIR-NOTFOUND")
+  endif()
+endfunction()
+
+
+function (_PYTHON_VALIDATE_INCLUDE_DIR)
+  if (NOT _${_PYTHON_PREFIX}_INCLUDE_DIR)
+    return()
+  endif()
+
+  cmake_parse_arguments (PARSE_ARGV 0 _PVID "IN_RANGE;EXACT;CHECK_EXISTS" "VERSION" "")
+
+  if (_PVID_CHECK_EXISTS AND NOT EXISTS "${_${_PYTHON_PREFIX}_INCLUDE_DIR}")
+    # include file does not exist anymore
+    set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE "Cannot find the directory \"${_${_PYTHON_PREFIX}_INCLUDE_DIR}\"" PARENT_SCOPE)
+    set_property (CACHE _${_PYTHON_PREFIX}_INCLUDE_DIR PROPERTY VALUE "${_PYTHON_PREFIX}_INCLUDE_DIR-NOTFOUND")
+    return()
+  endif()
+
+  # retrieve version from header file
+  _python_get_version (INCLUDE PREFIX inc_)
+
+  if (DEFINED _${_PYTHON_PREFIX}_FIND_ABI AND NOT inc_ABI IN_LIST _${_PYTHON_PREFIX}_ABIFLAGS)
+    # incompatible ABI
+    set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE "Wrong ABI for the directory \"${_${_PYTHON_PREFIX}_INCLUDE_DIR}\"" PARENT_SCOPE)
+    set_property (CACHE _${_PYTHON_PREFIX}_INCLUDE_DIR PROPERTY VALUE "${_PYTHON_PREFIX}_INCLUDE_DIR-NOTFOUND")
+  else()
+    if (_PVID_VERSION OR _PVID_IN_RANGE)
+      if (_PVID_VERSION)
+        if ((_PVID_EXACT AND NOT inc_VERSION VERSION_EQUAL expected_version) OR (inc_VERSION VERSION_LESS expected_version))
+          # include dir has wrong version
+          set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE "Wrong version for the directory \"${_${_PYTHON_PREFIX}_INCLUDE_DIR}\"" PARENT_SCOPE)
+          set_property (CACHE _${_PYTHON_PREFIX}_INCLUDE_DIR PROPERTY VALUE "${_PYTHON_PREFIX}_INCLUDE_DIR-NOTFOUND")
+        endif()
+      endif()
+
+      if (_${_PYTHON_PREFIX}_INCLUDE_DIR AND PVID_IN_RANGE)
+        # check if include dir is in the request range
+        find_package_check_version ("${inc_VERSION}" in_range HANDLE_VERSION_RANGE)
+        if (NOT in_range)
+          # include dir has wrong version
+          set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE "Wrong version for the directory \"${_${_PYTHON_PREFIX}_INCLUDE_DIR}\"" PARENT_SCOPE)
+          set_property (CACHE _${_PYTHON_PREFIX}_INCLUDE_DIR PROPERTY VALUE "${_PYTHON_PREFIX}_INCLUDE_DIR-NOTFOUND")
+        endif()
+      endif()
+    else()
+      if (NOT inc_VERSION_MAJOR VERSION_EQUAL _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR)
+        # include dir has wrong major version
+        set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE "Wrong major version for the directory \"${_${_PYTHON_PREFIX}_INCLUDE_DIR}\"" PARENT_SCOPE)
+        set_property (CACHE _${_PYTHON_PREFIX}_INCLUDE_DIR PROPERTY VALUE "${_PYTHON_PREFIX}_INCLUDE_DIR-NOTFOUND")
+      endif()
+    endif()
+  endif()
+endfunction()
+
+
+function (_PYTHON_FIND_RUNTIME_LIBRARY _PYTHON_LIB)
+  string (REPLACE "_RUNTIME" "" _PYTHON_LIB "${_PYTHON_LIB}")
+  # look at runtime part on systems supporting it
+  if (CMAKE_SYSTEM_NAME STREQUAL "Windows" OR
+      (CMAKE_SYSTEM_NAME MATCHES "MSYS|CYGWIN"
+        AND ${_PYTHON_LIB} MATCHES "${CMAKE_IMPORT_LIBRARY_SUFFIX}$"))
+    set (CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_SHARED_LIBRARY_SUFFIX})
+    # MSYS has a special syntax for runtime libraries
+    if (CMAKE_SYSTEM_NAME MATCHES "MSYS")
+      list (APPEND CMAKE_FIND_LIBRARY_PREFIXES "msys-")
+    endif()
+    find_library (${ARGV})
+  endif()
+endfunction()
+
+
+function (_PYTHON_SET_LIBRARY_DIRS _PYTHON_SLD_RESULT)
+  unset (_PYTHON_DIRS)
+  set (_PYTHON_LIBS ${ARGN})
+  foreach (_PYTHON_LIB IN LISTS _PYTHON_LIBS)
+    if (${_PYTHON_LIB})
+      get_filename_component (_PYTHON_DIR "${${_PYTHON_LIB}}" DIRECTORY)
+      list (APPEND _PYTHON_DIRS "${_PYTHON_DIR}")
+    endif()
+  endforeach()
+  list (REMOVE_DUPLICATES _PYTHON_DIRS)
+  set (${_PYTHON_SLD_RESULT} ${_PYTHON_DIRS} PARENT_SCOPE)
+endfunction()
+
+
+function (_PYTHON_SET_DEVELOPMENT_MODULE_FOUND module)
+  if ("Development.${module}" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
+    string(TOUPPER "${module}" id)
+    set (module_found TRUE)
+
+    if ("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS
+        AND NOT _${_PYTHON_PREFIX}_LIBRARY_RELEASE)
+      set (module_found FALSE)
+    endif()
+    if ("INCLUDE_DIR" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS
+        AND NOT _${_PYTHON_PREFIX}_INCLUDE_DIR)
+      set (module_found FALSE)
+    endif()
+
+    set (${_PYTHON_PREFIX}_Development.${module}_FOUND ${module_found} PARENT_SCOPE)
+  endif()
+endfunction()
+
+
+if (${_PYTHON_PREFIX}_FIND_VERSION_RANGE)
+  # range must include internal major version
+  if (${_PYTHON_PREFIX}_FIND_VERSION_MIN_MAJOR VERSION_GREATER _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR
+      OR ((${_PYTHON_PREFIX}_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE"
+          AND ${_PYTHON_PREFIX}_FIND_VERSION_MAX VERSION_LESS _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR)
+        OR (${_PYTHON_PREFIX}_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE"
+          AND ${_PYTHON_PREFIX}_FIND_VERSION_MAX VERSION_LESS_EQUAL _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR)))
+    _python_display_failure ("Could NOT find ${_PYTHON_PREFIX}: Wrong version range specified is \"${${_PYTHON_PREFIX}_FIND_VERSION_RANGE}\", but expected version range must include major version \"${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR}\"")
+
+    cmake_policy(POP)
+    return()
+  endif()
+else()
+  if (DEFINED ${_PYTHON_PREFIX}_FIND_VERSION_MAJOR
+      AND NOT ${_PYTHON_PREFIX}_FIND_VERSION_MAJOR VERSION_EQUAL _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR)
+    # If major version is specified, it must be the same as internal major version
+    _python_display_failure ("Could NOT find ${_PYTHON_PREFIX}: Wrong major version specified is \"${${_PYTHON_PREFIX}_FIND_VERSION_MAJOR}\", but expected major version is \"${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR}\"")
+
+    cmake_policy(POP)
+    return()
+  endif()
+endif()
+
+
+# handle components
+if (NOT ${_PYTHON_PREFIX}_FIND_COMPONENTS)
+  set (${_PYTHON_PREFIX}_FIND_COMPONENTS Interpreter)
+  set (${_PYTHON_PREFIX}_FIND_REQUIRED_Interpreter TRUE)
+endif()
+if ("NumPy" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
+  list (APPEND ${_PYTHON_PREFIX}_FIND_COMPONENTS "Interpreter" "Development.Module")
+endif()
+if ("Development" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
+  list (APPEND ${_PYTHON_PREFIX}_FIND_COMPONENTS "Development.Module" "Development.Embed")
+endif()
+list (REMOVE_DUPLICATES ${_PYTHON_PREFIX}_FIND_COMPONENTS)
+foreach (_${_PYTHON_PREFIX}_COMPONENT IN ITEMS Interpreter Compiler Development Development.Module Development.Embed NumPy)
+  set (${_PYTHON_PREFIX}_${_${_PYTHON_PREFIX}_COMPONENT}_FOUND FALSE)
+endforeach()
+if (${_PYTHON_PREFIX}_FIND_REQUIRED_Development)
+  set (${_PYTHON_PREFIX}_FIND_REQUIRED_Development.Module TRUE)
+  set (${_PYTHON_PREFIX}_FIND_REQUIRED_Development.Embed TRUE)
+endif()
+
+unset (_${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
+unset (_${_PYTHON_PREFIX}_FIND_DEVELOPMENT_MODULE_ARTIFACTS)
+unset (_${_PYTHON_PREFIX}_FIND_DEVELOPMENT_EMBED_ARTIFACTS)
+if ("Development.Module" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
+  if (CMAKE_SYSTEM_NAME MATCHES "^(Windows.*|CYGWIN|MSYS)$")
+    list (APPEND _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_MODULE_ARTIFACTS "LIBRARY")
+  endif()
+  list (APPEND _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_MODULE_ARTIFACTS "INCLUDE_DIR")
+endif()
+if ("Development.Embed" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
+  list (APPEND _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_EMBED_ARTIFACTS "LIBRARY" "INCLUDE_DIR")
+endif()
+set (_${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS ${_${_PYTHON_PREFIX}_FIND_DEVELOPMENT_MODULE_ARTIFACTS} ${_${_PYTHON_PREFIX}_FIND_DEVELOPMENT_EMBED_ARTIFACTS})
+list (REMOVE_DUPLICATES _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
+
+# Set versions to search
+## default: search any version
+set (_${_PYTHON_PREFIX}_FIND_VERSIONS ${_${_PYTHON_PREFIX}_VERSIONS})
+unset (_${_PYTHON_PREFIX}_FIND_VERSION_EXACT)
+
+if (${_PYTHON_PREFIX}_FIND_VERSION_RANGE)
+  unset (_${_PYTHON_PREFIX}_FIND_VERSIONS)
+  foreach (_${_PYTHON_PREFIX}_VERSION IN LISTS _${_PYTHON_PREFIX}_VERSIONS)
+    if ((${_PYTHON_PREFIX}_FIND_VERSION_RANGE_MIN STREQUAL "INCLUDE"
+          AND _${_PYTHON_PREFIX}_VERSION VERSION_GREATER_EQUAL ${_PYTHON_PREFIX}_FIND_VERSION_MIN)
+        AND ((${_PYTHON_PREFIX}_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE"
+            AND _${_PYTHON_PREFIX}_VERSION VERSION_LESS_EQUAL ${_PYTHON_PREFIX}_FIND_VERSION_MAX)
+          OR (${_PYTHON_PREFIX}_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE"
+            AND _${_PYTHON_PREFIX}_VERSION VERSION_LESS ${_PYTHON_PREFIX}_FIND_VERSION_MAX)))
+      list (APPEND _${_PYTHON_PREFIX}_FIND_VERSIONS ${_${_PYTHON_PREFIX}_VERSION})
+    endif()
+  endforeach()
+else()
+  if (${_PYTHON_PREFIX}_FIND_VERSION_COUNT GREATER 1)
+    if (${_PYTHON_PREFIX}_FIND_VERSION_EXACT)
+      set (_${_PYTHON_PREFIX}_FIND_VERSION_EXACT "EXACT")
+      set (_${_PYTHON_PREFIX}_FIND_VERSIONS ${${_PYTHON_PREFIX}_FIND_VERSION_MAJOR}.${${_PYTHON_PREFIX}_FIND_VERSION_MINOR})
+    else()
+      unset (_${_PYTHON_PREFIX}_FIND_VERSIONS)
+      # add all compatible versions
+      foreach (_${_PYTHON_PREFIX}_VERSION IN LISTS _${_PYTHON_PREFIX}_VERSIONS)
+        if (_${_PYTHON_PREFIX}_VERSION VERSION_GREATER_EQUAL "${${_PYTHON_PREFIX}_FIND_VERSION_MAJOR}.${${_PYTHON_PREFIX}_FIND_VERSION_MINOR}")
+          list (APPEND _${_PYTHON_PREFIX}_FIND_VERSIONS ${_${_PYTHON_PREFIX}_VERSION})
+        endif()
+      endforeach()
+    endif()
+  endif()
+endif()
+
+# Set ABIs to search
+## default: search any ABI
+if (_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR VERSION_LESS "3")
+  # ABI not supported
+  unset (_${_PYTHON_PREFIX}_FIND_ABI)
+  set (_${_PYTHON_PREFIX}_ABIFLAGS "")
+else()
+  unset (_${_PYTHON_PREFIX}_FIND_ABI)
+  unset (_${_PYTHON_PREFIX}_ABIFLAGS)
+  if (DEFINED ${_PYTHON_PREFIX}_FIND_ABI)
+    # normalization
+    string (TOUPPER "${${_PYTHON_PREFIX}_FIND_ABI}" _${_PYTHON_PREFIX}_FIND_ABI)
+    list (TRANSFORM _${_PYTHON_PREFIX}_FIND_ABI REPLACE "^(TRUE|Y(ES)?|1)$" "ON")
+    list (TRANSFORM _${_PYTHON_PREFIX}_FIND_ABI REPLACE "^(FALSE|N(O)?|0)$" "OFF")
+    if (NOT _${_PYTHON_PREFIX}_FIND_ABI MATCHES "^(ON|OFF|ANY);(ON|OFF|ANY);(ON|OFF|ANY)$")
+      message (AUTHOR_WARNING "Find${_PYTHON_PREFIX}: ${${_PYTHON_PREFIX}_FIND_ABI}: invalid value for '${_PYTHON_PREFIX}_FIND_ABI'. Ignore it")
+      unset (_${_PYTHON_PREFIX}_FIND_ABI)
+    endif()
+    _python_get_abiflags (_${_PYTHON_PREFIX}_ABIFLAGS)
+  endif()
+endif()
+unset (${_PYTHON_PREFIX}_SOABI)
+
+# Define lookup strategy
+cmake_policy (GET CMP0094 _${_PYTHON_PREFIX}_LOOKUP_POLICY)
+if (_${_PYTHON_PREFIX}_LOOKUP_POLICY STREQUAL "NEW")
+  set (_${_PYTHON_PREFIX}_FIND_STRATEGY "LOCATION")
+else()
+  set (_${_PYTHON_PREFIX}_FIND_STRATEGY "VERSION")
+endif()
+if (DEFINED ${_PYTHON_PREFIX}_FIND_STRATEGY)
+  if (NOT ${_PYTHON_PREFIX}_FIND_STRATEGY MATCHES "^(VERSION|LOCATION)$")
+    message (AUTHOR_WARNING "Find${_PYTHON_PREFIX}: ${${_PYTHON_PREFIX}_FIND_STRATEGY}: invalid value for '${_PYTHON_PREFIX}_FIND_STRATEGY'. 'VERSION' or 'LOCATION' expected.")
+    set (_${_PYTHON_PREFIX}_FIND_STRATEGY "VERSION")
+  else()
+    set (_${_PYTHON_PREFIX}_FIND_STRATEGY "${${_PYTHON_PREFIX}_FIND_STRATEGY}")
+  endif()
+endif()
+
+# Python and Anaconda distributions: define which architectures can be used
+if (CMAKE_SIZEOF_VOID_P)
+  # In this case, search only for 64bit or 32bit
+  math (EXPR _${_PYTHON_PREFIX}_ARCH "${CMAKE_SIZEOF_VOID_P} * 8")
+  set (_${_PYTHON_PREFIX}_ARCH2 ${_${_PYTHON_PREFIX}_ARCH})
+else()
+  # architecture unknown, search for both 64bit and 32bit
+  set (_${_PYTHON_PREFIX}_ARCH 64)
+  set (_${_PYTHON_PREFIX}_ARCH2 32)
+endif()
+
+# IronPython support
+unset (_${_PYTHON_PREFIX}_IRON_PYTHON_INTERPRETER_NAMES)
+unset (_${_PYTHON_PREFIX}_IRON_PYTHON_COMPILER_NAMES)
+unset (_${_PYTHON_PREFIX}_IRON_PYTHON_COMPILER_ARCH_FLAGS)
+if (CMAKE_SIZEOF_VOID_P)
+  if (_${_PYTHON_PREFIX}_ARCH EQUAL "32")
+    set (_${_PYTHON_PREFIX}_IRON_PYTHON_COMPILER_ARCH_FLAGS "/platform:x86")
+  else()
+    set (_${_PYTHON_PREFIX}_IRON_PYTHON_COMPILER_ARCH_FLAGS "/platform:x64")
+  endif()
+endif()
+if (NOT CMAKE_SYSTEM_NAME STREQUAL "Linux")
+  # Do not use wrapper script on Linux because it is buggy: -c interpreter option cannot be used
+  list (APPEND _${_PYTHON_PREFIX}_IRON_PYTHON_INTERPRETER_NAMES "ipy${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR}" "ipy64" "ipy32" "ipy")
+  list (APPEND _${_PYTHON_PREFIX}_IRON_PYTHON_COMPILER_NAMES "ipyc")
+endif()
+list (APPEND _${_PYTHON_PREFIX}_IRON_PYTHON_INTERPRETER_NAMES "ipy.exe")
+list (APPEND _${_PYTHON_PREFIX}_IRON_PYTHON_COMPILER_NAMES "ipyc.exe")
+set (_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES net45 net40 bin)
+
+# PyPy support
+if (_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR EQUAL "3")
+  set (_${_PYTHON_PREFIX}_PYPY_NAMES pypy3)
+  set (_${_PYTHON_PREFIX}_PYPY_LIB_NAMES pypy3-c)
+  if (WIN32)
+    # special name for runtime part
+    list (APPEND _${_PYTHON_PREFIX}_PYPY_LIB_NAMES libpypy3-c)
+  endif()
+  set (_${_PYTHON_PREFIX}_PYPY_INCLUDE_PATH_SUFFIXES lib/pypy3)
+else()
+  set (_${_PYTHON_PREFIX}_PYPY_NAMES pypy)
+  set (_${_PYTHON_PREFIX}_PYPY_LIB_NAMES pypy-c)
+  if (WIN32)
+    # special name for runtime part
+    list (APPEND _${_PYTHON_PREFIX}_PYPY_LIB_NAMES libpypy-c)
+  endif()
+  set (_${_PYTHON_PREFIX}_PYPY_INCLUDE_PATH_SUFFIXES lib/pypy)
+endif()
+set (_${_PYTHON_PREFIX}_PYPY_EXECUTABLE_PATH_SUFFIXES bin)
+set (_${_PYTHON_PREFIX}_PYPY_LIBRARY_PATH_SUFFIXES lib libs bin)
+list (APPEND _${_PYTHON_PREFIX}_PYPY_INCLUDE_PATH_SUFFIXES include)
+
+# Python Implementations handling
+unset (_${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS)
+if (DEFINED ${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS)
+  foreach (_${_PYTHON_PREFIX}_IMPLEMENTATION IN LISTS ${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS)
+    if (NOT _${_PYTHON_PREFIX}_IMPLEMENTATION MATCHES "^(CPython|IronPython|PyPy)$")
+      message (AUTHOR_WARNING "Find${_PYTHON_PREFIX}: ${_${_PYTHON_PREFIX}_IMPLEMENTATION}: invalid value for '${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS'. 'CPython', 'IronPython' or 'PyPy' expected. Value will be ignored.")
+    else()
+      list (APPEND _${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS ${_${_PYTHON_PREFIX}_IMPLEMENTATION})
+    endif()
+  endforeach()
+else()
+  if (WIN32)
+    set (_${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS CPython IronPython)
+  else()
+    set (_${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS CPython)
+  endif()
+endif()
+
+# compute list of names for header file
+unset (_${_PYTHON_PREFIX}_INCLUDE_NAMES)
+foreach (_${_PYTHON_PREFIX}_IMPLEMENTATION IN LISTS _${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS)
+  if (_${_PYTHON_PREFIX}_IMPLEMENTATION STREQUAL "CPython")
+    list (APPEND _${_PYTHON_PREFIX}_INCLUDE_NAMES "Python.h")
+  elseif (_${_PYTHON_PREFIX}_IMPLEMENTATION STREQUAL "PyPy")
+    list (APPEND _${_PYTHON_PREFIX}_INCLUDE_NAMES "PyPy.h")
+  endif()
+endforeach()
+
+
+# Apple frameworks handling
+_python_find_frameworks ()
+
+set (_${_PYTHON_PREFIX}_FIND_FRAMEWORK "FIRST")
+
+if (DEFINED ${_PYTHON_PREFIX}_FIND_FRAMEWORK)
+  if (NOT ${_PYTHON_PREFIX}_FIND_FRAMEWORK MATCHES "^(FIRST|LAST|NEVER)$")
+    message (AUTHOR_WARNING "Find${_PYTHON_PREFIX}: ${${_PYTHON_PREFIX}_FIND_FRAMEWORK}: invalid value for '${_PYTHON_PREFIX}_FIND_FRAMEWORK'. 'FIRST', 'LAST' or 'NEVER' expected. 'FIRST' will be used instead.")
+  else()
+    set (_${_PYTHON_PREFIX}_FIND_FRAMEWORK ${${_PYTHON_PREFIX}_FIND_FRAMEWORK})
+  endif()
+elseif (DEFINED CMAKE_FIND_FRAMEWORK)
+  if (CMAKE_FIND_FRAMEWORK STREQUAL "ONLY")
+    message (AUTHOR_WARNING "Find${_PYTHON_PREFIX}: CMAKE_FIND_FRAMEWORK: 'ONLY' value is not supported. 'FIRST' will be used instead.")
+  elseif (NOT CMAKE_FIND_FRAMEWORK MATCHES "^(FIRST|LAST|NEVER)$")
+    message (AUTHOR_WARNING "Find${_PYTHON_PREFIX}: ${CMAKE_FIND_FRAMEWORK}: invalid value for 'CMAKE_FIND_FRAMEWORK'. 'FIRST', 'LAST' or 'NEVER' expected. 'FIRST' will be used instead.")
+  else()
+    set (_${_PYTHON_PREFIX}_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK})
+  endif()
+endif()
+
+# Save CMAKE_FIND_APPBUNDLE
+if (DEFINED CMAKE_FIND_APPBUNDLE)
+  set (_${_PYTHON_PREFIX}_CMAKE_FIND_APPBUNDLE ${CMAKE_FIND_APPBUNDLE})
+else()
+  unset (_${_PYTHON_PREFIX}_CMAKE_FIND_APPBUNDLE)
+endif()
+# To avoid app bundle lookup
+set (CMAKE_FIND_APPBUNDLE "NEVER")
+
+# Save CMAKE_FIND_FRAMEWORK
+if (DEFINED CMAKE_FIND_FRAMEWORK)
+  set (_${_PYTHON_PREFIX}_CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK})
+else()
+  unset (_${_PYTHON_PREFIX}_CMAKE_FIND_FRAMEWORK)
+endif()
+# To avoid framework lookup
+set (CMAKE_FIND_FRAMEWORK "NEVER")
+
+# Windows Registry handling
+if (DEFINED ${_PYTHON_PREFIX}_FIND_REGISTRY)
+  if (NOT ${_PYTHON_PREFIX}_FIND_REGISTRY MATCHES "^(FIRST|LAST|NEVER)$")
+    message (AUTHOR_WARNING "Find${_PYTHON_PREFIX}: ${${_PYTHON_PREFIX}_FIND_REGISTRY}: invalid value for '${_PYTHON_PREFIX}_FIND_REGISTRY'. 'FIRST', 'LAST' or 'NEVER' expected. 'FIRST' will be used instead.")
+    set (_${_PYTHON_PREFIX}_FIND_REGISTRY "FIRST")
+  else()
+    set (_${_PYTHON_PREFIX}_FIND_REGISTRY ${${_PYTHON_PREFIX}_FIND_REGISTRY})
+  endif()
+else()
+  set (_${_PYTHON_PREFIX}_FIND_REGISTRY "FIRST")
+endif()
+
+# virtual environments recognition
+if (DEFINED ENV{VIRTUAL_ENV} OR DEFINED ENV{CONDA_PREFIX})
+  if (DEFINED ${_PYTHON_PREFIX}_FIND_VIRTUALENV)
+    if (NOT ${_PYTHON_PREFIX}_FIND_VIRTUALENV MATCHES "^(FIRST|ONLY|STANDARD)$")
+      message (AUTHOR_WARNING "Find${_PYTHON_PREFIX}: ${${_PYTHON_PREFIX}_FIND_VIRTUALENV}: invalid value for '${_PYTHON_PREFIX}_FIND_VIRTUALENV'. 'FIRST', 'ONLY' or 'STANDARD' expected. 'FIRST' will be used instead.")
+      set (_${_PYTHON_PREFIX}_FIND_VIRTUALENV "FIRST")
+    else()
+      set (_${_PYTHON_PREFIX}_FIND_VIRTUALENV ${${_PYTHON_PREFIX}_FIND_VIRTUALENV})
+    endif()
+  else()
+    set (_${_PYTHON_PREFIX}_FIND_VIRTUALENV FIRST)
+  endif()
+else()
+  set (_${_PYTHON_PREFIX}_FIND_VIRTUALENV STANDARD)
+endif()
+
+
+# Python naming handling
+if (DEFINED ${_PYTHON_PREFIX}_FIND_UNVERSIONED_NAMES)
+  if (NOT ${_PYTHON_PREFIX}_FIND_UNVERSIONED_NAMES MATCHES "^(FIRST|LAST|NEVER)$")
+    message (AUTHOR_WARNING "Find${_PYTHON_PREFIX}: ${_${_PYTHON_PREFIX}_FIND_UNVERSIONED_NAMES}: invalid value for '${_PYTHON_PREFIX}_FIND_UNVERSIONED_NAMES'. 'FIRST', 'LAST' or 'NEVER' expected. 'LAST' will be used instead.")
+    set (_${_PYTHON_PREFIX}_FIND_UNVERSIONED_NAMES LAST)
+  else()
+    set (_${_PYTHON_PREFIX}_FIND_UNVERSIONED_NAMES ${${_PYTHON_PREFIX}_FIND_UNVERSIONED_NAMES})
+  endif()
+else()
+  set (_${_PYTHON_PREFIX}_FIND_UNVERSIONED_NAMES LAST)
+endif()
+
+
+# Compute search signature
+# This signature will be used to check validity of cached variables on new search
+set (_${_PYTHON_PREFIX}_SIGNATURE "${${_PYTHON_PREFIX}_ROOT_DIR}:${_${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS}:${_${_PYTHON_PREFIX}_FIND_STRATEGY}:${${_PYTHON_PREFIX}_FIND_VIRTUALENV}${_${_PYTHON_PREFIX}_FIND_UNVERSIONED_NAMES}")
+if (NOT WIN32)
+  string (APPEND _${_PYTHON_PREFIX}_SIGNATURE ":${${_PYTHON_PREFIX}_USE_STATIC_LIBS}:")
+endif()
+if (CMAKE_HOST_APPLE)
+  string (APPEND _${_PYTHON_PREFIX}_SIGNATURE ":${_${_PYTHON_PREFIX}_FIND_FRAMEWORK}")
+endif()
+if (CMAKE_HOST_WIN32)
+  string (APPEND _${_PYTHON_PREFIX}_SIGNATURE ":${_${_PYTHON_PREFIX}_FIND_REGISTRY}")
+endif()
+
+function (_PYTHON_CHECK_DEVELOPMENT_SIGNATURE module)
+  if ("Development.${module}" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
+    string (TOUPPER "${module}" id)
+    set (signature "${_${_PYTHON_PREFIX}_SIGNATURE}:")
+    if ("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS)
+      list (APPEND signature "${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}:")
+    endif()
+    if ("INCLUDE_DIR" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS)
+      list (APPEND signature "${_${_PYTHON_PREFIX}_INCLUDE_DIR}:")
+    endif()
+    string (MD5 signature "${signature}")
+    if (signature STREQUAL _${_PYTHON_PREFIX}_DEVELOPMENT_${id}_SIGNATURE)
+      if ("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS)
+        if (${_PYTHON_PREFIX}_FIND_VERSION_EXACT)
+          _python_validate_library (VERSION ${${_PYTHON_PREFIX}_FIND_VERSION} EXACT CHECK_EXISTS)
+        elseif (${_PYTHON_PREFIX}_FIND_VERSION_RANGE)
+          _python_validate_library (IN_RANGE CHECK_EXISTS)
+        elseif (DEFINED ${_PYTHON_PREFIX}_FIND_VERSION)
+          _python_validate_library (VERSION ${${_PYTHON_PREFIX}_FIND_VERSION} CHECK_EXISTS)
+        else()
+          _python_validate_library (CHECK_EXISTS)
+        endif()
+      endif()
+      if ("INCLUDE_DIR" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS)
+        if (${_PYTHON_PREFIX}_FIND_VERSION_EXACT)
+          _python_validate_include_dir (VERSION ${${_PYTHON_PREFIX}_FIND_VERSION} EXACT CHECK_EXISTS)
+        elseif (${_PYTHON_PREFIX}_FIND_VERSION_RANGE)
+          _python_validate_include_dir (IN_RANGE CHECK_EXISTS)
+        elseif (${_PYTHON_PREFIX}_FIND_VERSION)
+          _python_validate_include_dir (VERSION ${${_PYTHON_PREFIX}_FIND_VERSION} CHECK_EXISTS)
+        else()
+          _python_validate_include_dir (CHECK_EXISTS)
+        endif()
+      endif()
+    else()
+      if ("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS)
+        unset (_${_PYTHON_PREFIX}_LIBRARY_RELEASE CACHE)
+        unset (_${_PYTHON_PREFIX}_LIBRARY_DEBUG CACHE)
+      endif()
+      if ("INCLUDE_DIR" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS)
+        unset (_${_PYTHON_PREFIX}_INCLUDE_DIR CACHE)
+      endif()
+    endif()
+    if (("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS
+          AND NOT _${_PYTHON_PREFIX}_LIBRARY_RELEASE)
+        OR ("INCLUDE_DIR" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS
+          AND NOT _${_PYTHON_PREFIX}_INCLUDE_DIR))
+      unset (_${_PYTHON_PREFIX}_CONFIG CACHE)
+      unset (_${_PYTHON_PREFIX}_DEVELOPMENT_${id}_SIGNATURE CACHE)
+    endif()
+  endif()
+endfunction()
+
+function (_PYTHON_COMPUTE_DEVELOPMENT_SIGNATURE module)
+  string (TOUPPER "${module}" id)
+  if (${_PYTHON_PREFIX}_Development.${module}_FOUND)
+    set (signature "${_${_PYTHON_PREFIX}_SIGNATURE}:")
+    if ("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS)
+      list (APPEND signature "${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}:")
+    endif()
+    if ("INCLUDE_DIR" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_${id}_ARTIFACTS)
+      list (APPEND signature "${_${_PYTHON_PREFIX}_INCLUDE_DIR}:")
+    endif()
+    string (MD5 signature "${signature}")
+    set (_${_PYTHON_PREFIX}_DEVELOPMENT_${id}_SIGNATURE "${signature}" CACHE INTERNAL "")
+  else()
+    unset (_${_PYTHON_PREFIX}_DEVELOPMENT_${id}_SIGNATURE CACHE)
+  endif()
+endfunction()
+
+
+unset (_${_PYTHON_PREFIX}_REQUIRED_VARS)
+unset (_${_PYTHON_PREFIX}_CACHED_VARS)
+unset (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE)
+unset (_${_PYTHON_PREFIX}_Compiler_REASON_FAILURE)
+unset (_${_PYTHON_PREFIX}_Development_REASON_FAILURE)
+unset (_${_PYTHON_PREFIX}_NumPy_REASON_FAILURE)
+
+
+# preamble
+## For IronPython on platforms other than Windows, search for the .Net interpreter
+if ("IronPython" IN_LIST _${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS
+    AND NOT WIN32)
+  find_program (${_PYTHON_PREFIX}_DOTNET_LAUNCHER
+                NAMES "mono")
+endif()
+
+
+# first step, search for the interpreter
+if ("Interpreter" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
+  list (APPEND _${_PYTHON_PREFIX}_CACHED_VARS _${_PYTHON_PREFIX}_EXECUTABLE
+                                              _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES)
+  if (${_PYTHON_PREFIX}_FIND_REQUIRED_Interpreter)
+    list (APPEND _${_PYTHON_PREFIX}_REQUIRED_VARS ${_PYTHON_PREFIX}_EXECUTABLE)
+  endif()
+
+  if (DEFINED ${_PYTHON_PREFIX}_EXECUTABLE
+      AND IS_ABSOLUTE "${${_PYTHON_PREFIX}_EXECUTABLE}")
+    if (NOT ${_PYTHON_PREFIX}_EXECUTABLE STREQUAL _${_PYTHON_PREFIX}_EXECUTABLE)
+      # invalidate cache properties
+      unset (_${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES CACHE)
+    endif()
+    set (_${_PYTHON_PREFIX}_EXECUTABLE "${${_PYTHON_PREFIX}_EXECUTABLE}" CACHE INTERNAL "")
+  elseif (DEFINED _${_PYTHON_PREFIX}_EXECUTABLE)
+    # compute interpreter signature and check validity of definition
+    string (MD5 __${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE "${_${_PYTHON_PREFIX}_SIGNATURE}:${_${_PYTHON_PREFIX}_EXECUTABLE}")
+    if (__${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE STREQUAL _${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE)
+      # check version validity
+      if (${_PYTHON_PREFIX}_FIND_VERSION_EXACT)
+        _python_validate_interpreter (VERSION ${${_PYTHON_PREFIX}_FIND_VERSION} EXACT CHECK_EXISTS)
+      elseif (${_PYTHON_PREFIX}_FIND_VERSION_RANGE)
+        _python_validate_interpreter (IN_RANGE CHECK_EXISTS)
+      elseif (DEFINED ${_PYTHON_PREFIX}_FIND_VERSION)
+        _python_validate_interpreter (VERSION ${${_PYTHON_PREFIX}_FIND_VERSION} CHECK_EXISTS)
+      else()
+        _python_validate_interpreter (CHECK_EXISTS)
+      endif()
+    else()
+      unset (_${_PYTHON_PREFIX}_EXECUTABLE CACHE)
+    endif()
+    if (NOT _${_PYTHON_PREFIX}_EXECUTABLE)
+      unset (_${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE CACHE)
+      unset (_${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES CACHE)
+    endif()
+  endif()
+
+  if (NOT _${_PYTHON_PREFIX}_EXECUTABLE)
+    set (_${_PYTHON_PREFIX}_HINTS "${${_PYTHON_PREFIX}_ROOT_DIR}" ENV ${_PYTHON_PREFIX}_ROOT_DIR)
+
+    if (_${_PYTHON_PREFIX}_FIND_STRATEGY STREQUAL "LOCATION")
+      # build all executable names
+      _python_get_names (_${_PYTHON_PREFIX}_NAMES VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS} POSIX INTERPRETER)
+      _python_get_path_suffixes (_${_PYTHON_PREFIX}_PATH_SUFFIXES VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS} INTERPRETER)
+
+      # Framework Paths
+      _python_get_frameworks (_${_PYTHON_PREFIX}_FRAMEWORK_PATHS VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS})
+      # Registry Paths
+      _python_get_registries (_${_PYTHON_PREFIX}_REGISTRY_PATHS VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS})
+
+      set (_${_PYTHON_PREFIX}_VALIDATE_OPTIONS ${_${_PYTHON_PREFIX}_FIND_VERSION_EXACT})
+      if (${_PYTHON_PREFIX}_FIND_VERSION_RANGE)
+        list (APPEND _${_PYTHON_PREFIX}_VALIDATE_OPTIONS IN_RANGE)
+      elseif (DEFINED ${_PYTHON_PREFIX}_FIND_VERSION)
+        list (APPEND _${_PYTHON_PREFIX}_VALIDATE_OPTIONS VERSION ${${_PYTHON_PREFIX}_FIND_VERSION})
+      endif()
+
+      while (TRUE)
+        # Virtual environments handling
+        if (_${_PYTHON_PREFIX}_FIND_VIRTUALENV MATCHES "^(FIRST|ONLY)$")
+          find_program (_${_PYTHON_PREFIX}_EXECUTABLE
+                        NAMES ${_${_PYTHON_PREFIX}_NAMES}
+                        NAMES_PER_DIR
+                        HINTS ${_${_PYTHON_PREFIX}_HINTS}
+                        PATHS ENV VIRTUAL_ENV ENV CONDA_PREFIX
+                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                        NO_CMAKE_PATH
+                        NO_CMAKE_ENVIRONMENT_PATH
+                        NO_SYSTEM_ENVIRONMENT_PATH
+                        NO_CMAKE_SYSTEM_PATH)
+
+          _python_validate_interpreter (${_${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
+          if (_${_PYTHON_PREFIX}_EXECUTABLE)
+            break()
+          endif()
+          if (_${_PYTHON_PREFIX}_FIND_VIRTUALENV STREQUAL "ONLY")
+            break()
+          endif()
+        endif()
+
+        # Apple frameworks handling
+        if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "FIRST")
+          find_program (_${_PYTHON_PREFIX}_EXECUTABLE
+                        NAMES ${_${_PYTHON_PREFIX}_NAMES}
+                        NAMES_PER_DIR
+                        HINTS ${_${_PYTHON_PREFIX}_HINTS}
+                        PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
+                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                        NO_CMAKE_PATH
+                        NO_CMAKE_ENVIRONMENT_PATH
+                        NO_SYSTEM_ENVIRONMENT_PATH
+                        NO_CMAKE_SYSTEM_PATH)
+          _python_validate_interpreter (${${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
+          if (_${_PYTHON_PREFIX}_EXECUTABLE)
+            break()
+          endif()
+        endif()
+        # Windows registry
+        if (CMAKE_HOST_WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "FIRST")
+          find_program (_${_PYTHON_PREFIX}_EXECUTABLE
+                        NAMES ${_${_PYTHON_PREFIX}_NAMES}
+                        NAMES_PER_DIR
+                        HINTS ${_${_PYTHON_PREFIX}_HINTS}
+                        PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
+                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                        NO_SYSTEM_ENVIRONMENT_PATH
+                        NO_CMAKE_SYSTEM_PATH)
+          _python_validate_interpreter (${${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
+          if (_${_PYTHON_PREFIX}_EXECUTABLE)
+            break()
+          endif()
+        endif()
+
+        # try using HINTS
+        find_program (_${_PYTHON_PREFIX}_EXECUTABLE
+                      NAMES ${_${_PYTHON_PREFIX}_NAMES}
+                      NAMES_PER_DIR
+                      HINTS ${_${_PYTHON_PREFIX}_HINTS}
+                      PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                      NO_SYSTEM_ENVIRONMENT_PATH
+                      NO_CMAKE_SYSTEM_PATH)
+        _python_validate_interpreter (${${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
+        if (_${_PYTHON_PREFIX}_EXECUTABLE)
+          break()
+        endif()
+        # try using standard paths
+        find_program (_${_PYTHON_PREFIX}_EXECUTABLE
+                      NAMES ${_${_PYTHON_PREFIX}_NAMES}
+                      NAMES_PER_DIR
+                      PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES})
+        _python_validate_interpreter (${${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
+        if (_${_PYTHON_PREFIX}_EXECUTABLE)
+          break()
+        endif()
+
+        # Apple frameworks handling
+        if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "LAST")
+          find_program (_${_PYTHON_PREFIX}_EXECUTABLE
+                        NAMES ${_${_PYTHON_PREFIX}_NAMES}
+                        NAMES_PER_DIR
+                        PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
+                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                        NO_DEFAULT_PATH)
+          _python_validate_interpreter (${${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
+          if (_${_PYTHON_PREFIX}_EXECUTABLE)
+            break()
+          endif()
+        endif()
+        # Windows registry
+        if (CMAKE_HOST_WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "LAST")
+          find_program (_${_PYTHON_PREFIX}_EXECUTABLE
+                        NAMES ${_${_PYTHON_PREFIX}_NAMES}
+                        NAMES_PER_DIR
+                        PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
+                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                        NO_DEFAULT_PATH)
+          _python_validate_interpreter (${${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
+          if (_${_PYTHON_PREFIX}_EXECUTABLE)
+            break()
+          endif()
+        endif()
+
+        break()
+      endwhile()
+    else()
+      # look-up for various versions and locations
+      set (_${_PYTHON_PREFIX}_VALIDATE_OPTIONS EXACT)
+      if (${_PYTHON_PREFIX}_FIND_VERSION_RANGE)
+        list (APPEND _${_PYTHON_PREFIX}_VALIDATE_OPTIONS IN_RANGE)
+      endif()
+
+      foreach (_${_PYTHON_PREFIX}_VERSION IN LISTS _${_PYTHON_PREFIX}_FIND_VERSIONS)
+        _python_get_names (_${_PYTHON_PREFIX}_NAMES VERSION ${_${_PYTHON_PREFIX}_VERSION} POSIX INTERPRETER)
+        _python_get_path_suffixes (_${_PYTHON_PREFIX}_PATH_SUFFIXES VERSION ${_${_PYTHON_PREFIX}_VERSION} INTERPRETER)
+
+        _python_get_frameworks (_${_PYTHON_PREFIX}_FRAMEWORK_PATHS VERSION ${_${_PYTHON_PREFIX}_VERSION})
+        _python_get_registries (_${_PYTHON_PREFIX}_REGISTRY_PATHS VERSION ${_${_PYTHON_PREFIX}_VERSION})
+
+        # Virtual environments handling
+        if (_${_PYTHON_PREFIX}_FIND_VIRTUALENV MATCHES "^(FIRST|ONLY)$")
+          find_program (_${_PYTHON_PREFIX}_EXECUTABLE
+                        NAMES ${_${_PYTHON_PREFIX}_NAMES}
+                        NAMES_PER_DIR
+                        HINTS ${_${_PYTHON_PREFIX}_HINTS}
+                        PATHS ENV VIRTUAL_ENV ENV CONDA_PREFIX
+                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                        NO_CMAKE_PATH
+                        NO_CMAKE_ENVIRONMENT_PATH
+                        NO_SYSTEM_ENVIRONMENT_PATH
+                        NO_CMAKE_SYSTEM_PATH)
+          _python_validate_interpreter (VERSION ${_${_PYTHON_PREFIX}_VERSION} ${_${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
+          if (_${_PYTHON_PREFIX}_EXECUTABLE)
+            break()
+          endif()
+          if (_${_PYTHON_PREFIX}_FIND_VIRTUALENV STREQUAL "ONLY")
+            continue()
+          endif()
+        endif()
+
+        # Apple frameworks handling
+        if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "FIRST")
+          find_program (_${_PYTHON_PREFIX}_EXECUTABLE
+                        NAMES ${_${_PYTHON_PREFIX}_NAMES}
+                        NAMES_PER_DIR
+                        HINTS ${_${_PYTHON_PREFIX}_HINTS}
+                        PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
+                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                        NO_CMAKE_PATH
+                        NO_CMAKE_ENVIRONMENT_PATH
+                        NO_SYSTEM_ENVIRONMENT_PATH
+                        NO_CMAKE_SYSTEM_PATH)
+        endif()
+
+        # Windows registry
+        if (CMAKE_HOST_WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "FIRST")
+          find_program (_${_PYTHON_PREFIX}_EXECUTABLE
+                        NAMES ${_${_PYTHON_PREFIX}_NAMES}
+                        NAMES_PER_DIR
+                        HINTS ${_${_PYTHON_PREFIX}_HINTS}
+                        PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
+                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                        NO_SYSTEM_ENVIRONMENT_PATH
+                        NO_CMAKE_SYSTEM_PATH)
+        endif()
+
+        _python_validate_interpreter (VERSION ${_${_PYTHON_PREFIX}_VERSION} ${_${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
+        if (_${_PYTHON_PREFIX}_EXECUTABLE)
+          break()
+        endif()
+
+        # try using HINTS
+        find_program (_${_PYTHON_PREFIX}_EXECUTABLE
+                      NAMES ${_${_PYTHON_PREFIX}_NAMES}
+                      NAMES_PER_DIR
+                      HINTS ${_${_PYTHON_PREFIX}_HINTS}
+                      PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                      NO_SYSTEM_ENVIRONMENT_PATH
+                      NO_CMAKE_SYSTEM_PATH)
+        _python_validate_interpreter (VERSION ${_${_PYTHON_PREFIX}_VERSION} ${_${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
+        if (_${_PYTHON_PREFIX}_EXECUTABLE)
+          break()
+        endif()
+        # try using standard paths.
+        # NAMES_PER_DIR is not defined on purpose to have a chance to find
+        # expected version.
+        # For example, typical systems have 'python' for version 2.* and 'python3'
+        # for version 3.*. So looking for names per dir will find, potentially,
+        # systematically 'python' (i.e. version 2) even if version 3 is searched.
+        find_program (_${_PYTHON_PREFIX}_EXECUTABLE
+                      NAMES ${_${_PYTHON_PREFIX}_NAMES}
+                      PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES})
+        _python_validate_interpreter (VERSION ${_${_PYTHON_PREFIX}_VERSION} ${_${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
+        if (_${_PYTHON_PREFIX}_EXECUTABLE)
+          break()
+        endif()
+
+        # Apple frameworks handling
+        if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "LAST")
+          find_program (_${_PYTHON_PREFIX}_EXECUTABLE
+                        NAMES ${_${_PYTHON_PREFIX}_NAMES}
+                        NAMES_PER_DIR
+                        PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
+                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                        NO_DEFAULT_PATH)
+        endif()
+
+        # Windows registry
+        if (CMAKE_HOST_WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "LAST")
+          find_program (_${_PYTHON_PREFIX}_EXECUTABLE
+                        NAMES ${_${_PYTHON_PREFIX}_NAMES}
+                        NAMES_PER_DIR
+                        PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
+                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                        NO_DEFAULT_PATH)
+        endif()
+
+        _python_validate_interpreter (VERSION ${_${_PYTHON_PREFIX}_VERSION} ${_${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
+        if (_${_PYTHON_PREFIX}_EXECUTABLE)
+          break()
+        endif()
+      endforeach()
+
+      if (NOT _${_PYTHON_PREFIX}_EXECUTABLE AND
+          NOT _${_PYTHON_PREFIX}_FIND_VIRTUALENV STREQUAL "ONLY")
+        # No specific version found. Retry with generic names and standard paths.
+        # NAMES_PER_DIR is not defined on purpose to have a chance to find
+        # expected version.
+        # For example, typical systems have 'python' for version 2.* and 'python3'
+        # for version 3.*. So looking for names per dir will find, potentially,
+        # systematically 'python' (i.e. version 2) even if version 3 is searched.
+        _python_get_names (_${_PYTHON_PREFIX}_NAMES POSIX INTERPRETER)
+        find_program (_${_PYTHON_PREFIX}_EXECUTABLE
+                      NAMES ${_${_PYTHON_PREFIX}_NAMES})
+        _python_validate_interpreter ()
+      endif()
+    endif()
+  endif()
+
+  set (${_PYTHON_PREFIX}_EXECUTABLE "${_${_PYTHON_PREFIX}_EXECUTABLE}")
+  _python_get_launcher (_${_PYTHON_PREFIX}_INTERPRETER_LAUNCHER INTERPRETER)
+
+  # retrieve exact version of executable found
+  if (_${_PYTHON_PREFIX}_EXECUTABLE)
+    execute_process (COMMAND ${_${_PYTHON_PREFIX}_INTERPRETER_LAUNCHER} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
+                             "import sys; sys.stdout.write('.'.join([str(x) for x in sys.version_info[:3]]))"
+                     RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
+                     OUTPUT_VARIABLE ${_PYTHON_PREFIX}_VERSION
+                     ERROR_QUIET
+                     OUTPUT_STRIP_TRAILING_WHITESPACE)
+    if (NOT _${_PYTHON_PREFIX}_RESULT)
+      set (_${_PYTHON_PREFIX}_EXECUTABLE_USABLE TRUE)
+    else()
+      # Interpreter is not usable
+      set (_${_PYTHON_PREFIX}_EXECUTABLE_USABLE FALSE)
+      unset (${_PYTHON_PREFIX}_VERSION)
+      set (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE "Cannot run the interpreter \"${_${_PYTHON_PREFIX}_EXECUTABLE}\"")
+    endif()
+  endif()
+
+  if (_${_PYTHON_PREFIX}_EXECUTABLE AND _${_PYTHON_PREFIX}_EXECUTABLE_USABLE)
+    if (_${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES)
+      set (${_PYTHON_PREFIX}_Interpreter_FOUND TRUE)
+
+      list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 0 ${_PYTHON_PREFIX}_INTERPRETER_ID)
+
+      list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 1 ${_PYTHON_PREFIX}_VERSION_MAJOR)
+      list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 2 ${_PYTHON_PREFIX}_VERSION_MINOR)
+      list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 3 ${_PYTHON_PREFIX}_VERSION_PATCH)
+
+      list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 4 _${_PYTHON_PREFIX}_ARCH)
+      set (_${_PYTHON_PREFIX}_ARCH2 ${_${_PYTHON_PREFIX}_ARCH})
+
+      list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 5 _${_PYTHON_PREFIX}_ABIFLAGS)
+      list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 6 ${_PYTHON_PREFIX}_SOABI)
+
+      list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 7 ${_PYTHON_PREFIX}_STDLIB)
+      list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 8 ${_PYTHON_PREFIX}_STDARCH)
+      list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 9 ${_PYTHON_PREFIX}_SITELIB)
+      list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 10 ${_PYTHON_PREFIX}_SITEARCH)
+    else()
+      string (REGEX MATCHALL "[0-9]+" _${_PYTHON_PREFIX}_VERSIONS "${${_PYTHON_PREFIX}_VERSION}")
+      list (GET _${_PYTHON_PREFIX}_VERSIONS 0 ${_PYTHON_PREFIX}_VERSION_MAJOR)
+      list (GET _${_PYTHON_PREFIX}_VERSIONS 1 ${_PYTHON_PREFIX}_VERSION_MINOR)
+      list (GET _${_PYTHON_PREFIX}_VERSIONS 2 ${_PYTHON_PREFIX}_VERSION_PATCH)
+
+      if (${_PYTHON_PREFIX}_VERSION_MAJOR VERSION_EQUAL _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR)
+        set (${_PYTHON_PREFIX}_Interpreter_FOUND TRUE)
+
+        # Use interpreter version and ABI for future searches to ensure consistency
+        set (_${_PYTHON_PREFIX}_FIND_VERSIONS ${${_PYTHON_PREFIX}_VERSION_MAJOR}.${${_PYTHON_PREFIX}_VERSION_MINOR})
+        execute_process (COMMAND ${_${_PYTHON_PREFIX}_INTERPRETR_LAUNCHER} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
+                                 "import sys; sys.stdout.write(sys.abiflags)"
+                         RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
+                         OUTPUT_VARIABLE _${_PYTHON_PREFIX}_ABIFLAGS
+                         ERROR_QUIET
+                         OUTPUT_STRIP_TRAILING_WHITESPACE)
+        if (_${_PYTHON_PREFIX}_RESULT)
+          # assunme ABI is not supported
+          set (_${_PYTHON_PREFIX}_ABIFLAGS "")
+        endif()
+      endif()
+
+      if (${_PYTHON_PREFIX}_Interpreter_FOUND)
+        unset (_${_PYTHON_PREFIX}_Interpreter_REASON_FAILURE)
+
+        # compute and save interpreter signature
+        string (MD5 __${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE "${_${_PYTHON_PREFIX}_SIGNATURE}:${_${_PYTHON_PREFIX}_EXECUTABLE}")
+        set (_${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE "${__${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE}" CACHE INTERNAL "")
+
+        if (NOT CMAKE_SIZEOF_VOID_P)
+          # determine interpreter architecture
+          execute_process (COMMAND ${_${_PYTHON_PREFIX}_INTERPRETER_LAUNCHER} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
+                                   "import sys; sys.stdout.write(str(sys.maxsize > 2**32))"
+                           RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
+                           OUTPUT_VARIABLE ${_PYTHON_PREFIX}_IS64BIT
+                           ERROR_VARIABLE ${_PYTHON_PREFIX}_IS64BIT)
+          if (NOT _${_PYTHON_PREFIX}_RESULT)
+            if (${_PYTHON_PREFIX}_IS64BIT)
+              set (_${_PYTHON_PREFIX}_ARCH 64)
+              set (_${_PYTHON_PREFIX}_ARCH2 64)
+            else()
+              set (_${_PYTHON_PREFIX}_ARCH 32)
+              set (_${_PYTHON_PREFIX}_ARCH2 32)
+            endif()
+          endif()
+        endif()
+
+        # retrieve interpreter identity
+        execute_process (COMMAND ${_${_PYTHON_PREFIX}_INTERPRETER_LAUNCHER} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -V
+                         RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
+                         OUTPUT_VARIABLE ${_PYTHON_PREFIX}_INTERPRETER_ID
+                         ERROR_VARIABLE ${_PYTHON_PREFIX}_INTERPRETER_ID)
+        if (NOT _${_PYTHON_PREFIX}_RESULT)
+          if (${_PYTHON_PREFIX}_INTERPRETER_ID MATCHES "Anaconda")
+            set (${_PYTHON_PREFIX}_INTERPRETER_ID "Anaconda")
+          elseif (${_PYTHON_PREFIX}_INTERPRETER_ID MATCHES "Enthought")
+            set (${_PYTHON_PREFIX}_INTERPRETER_ID "Canopy")
+          elseif (${_PYTHON_PREFIX}_INTERPRETER_ID MATCHES "PyPy ([0-9.]+)")
+            set (${_PYTHON_PREFIX}_INTERPRETER_ID "PyPy")
+            set  (${_PYTHON_PREFIX}_PyPy_VERSION "${CMAKE_MATCH_1}")
+          else()
+            string (REGEX REPLACE "^([^ ]+).*" "\\1" ${_PYTHON_PREFIX}_INTERPRETER_ID "${${_PYTHON_PREFIX}_INTERPRETER_ID}")
+            if (${_PYTHON_PREFIX}_INTERPRETER_ID STREQUAL "Python")
+              # try to get a more precise ID
+              execute_process (COMMAND ${_${_PYTHON_PREFIX}_INTERPRETER_LAUNCHER} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
+                                       "import sys; sys.stdout.write(sys.copyright)"
+                               RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
+                               OUTPUT_VARIABLE ${_PYTHON_PREFIX}_COPYRIGHT
+                               ERROR_QUIET)
+              if (${_PYTHON_PREFIX}_COPYRIGHT MATCHES "ActiveState")
+                set (${_PYTHON_PREFIX}_INTERPRETER_ID "ActivePython")
+              endif()
+            endif()
+          endif()
+        else()
+          set (${_PYTHON_PREFIX}_INTERPRETER_ID Python)
+        endif()
+
+        # retrieve various package installation directories
+        execute_process (COMMAND ${_${_PYTHON_PREFIX}_INTERPRETER_LAUNCHER} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
+                                 "import sys\ntry:\n   from distutils import sysconfig\n   sys.stdout.write(';'.join([sysconfig.get_python_lib(plat_specific=False,standard_lib=True),sysconfig.get_python_lib(plat_specific=True,standard_lib=True),sysconfig.get_python_lib(plat_specific=False,standard_lib=False),sysconfig.get_python_lib(plat_specific=True,standard_lib=False)]))\nexcept Exception:\n   import sysconfig\n   sys.stdout.write(';'.join([sysconfig.get_path('stdlib'),sysconfig.get_path('platstdlib'),sysconfig.get_path('purelib'),sysconfig.get_path('platlib')]))"
+                         RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
+                         OUTPUT_VARIABLE _${_PYTHON_PREFIX}_LIBPATHS
+                         ERROR_QUIET)
+        if (NOT _${_PYTHON_PREFIX}_RESULT)
+          list (GET _${_PYTHON_PREFIX}_LIBPATHS 0 ${_PYTHON_PREFIX}_STDLIB)
+          list (GET _${_PYTHON_PREFIX}_LIBPATHS 1 ${_PYTHON_PREFIX}_STDARCH)
+          list (GET _${_PYTHON_PREFIX}_LIBPATHS 2 ${_PYTHON_PREFIX}_SITELIB)
+          list (GET _${_PYTHON_PREFIX}_LIBPATHS 3 ${_PYTHON_PREFIX}_SITEARCH)
+        else()
+          unset (${_PYTHON_PREFIX}_STDLIB)
+          unset (${_PYTHON_PREFIX}_STDARCH)
+          unset (${_PYTHON_PREFIX}_SITELIB)
+          unset (${_PYTHON_PREFIX}_SITEARCH)
+        endif()
+
+        _python_get_config_var (${_PYTHON_PREFIX}_SOABI SOABI)
+
+        # store properties in the cache to speed-up future searches
+        set (_${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES
+          "${${_PYTHON_PREFIX}_INTERPRETER_ID};${${_PYTHON_PREFIX}_VERSION_MAJOR};${${_PYTHON_PREFIX}_VERSION_MINOR};${${_PYTHON_PREFIX}_VERSION_PATCH};${_${_PYTHON_PREFIX}_ARCH};${_${_PYTHON_PREFIX}_ABIFLAGS};${${_PYTHON_PREFIX}_SOABI};${${_PYTHON_PREFIX}_STDLIB};${${_PYTHON_PREFIX}_STDARCH};${${_PYTHON_PREFIX}_SITELIB};${${_PYTHON_PREFIX}_SITEARCH}" CACHE INTERNAL "${_PYTHON_PREFIX} Properties")
+      else()
+        unset (_${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE CACHE)
+        unset (${_PYTHON_PREFIX}_INTERPRETER_ID)
+      endif()
+    endif()
+  endif()
+
+  if (${_PYTHON_PREFIX}_ARTIFACTS_INTERACTIVE)
+    set (${_PYTHON_PREFIX}_EXECUTABLE "${_${_PYTHON_PREFIX}_EXECUTABLE}" CACHE FILEPATH "${_PYTHON_PREFIX} Interpreter")
+  endif()
+
+  _python_mark_as_internal (_${_PYTHON_PREFIX}_EXECUTABLE
+                            _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES
+                            _${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE)
+endif()
+
+
+# second step, search for compiler (IronPython)
+if ("Compiler" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
+  list (APPEND _${_PYTHON_PREFIX}_CACHED_VARS _${_PYTHON_PREFIX}_COMPILER)
+  if (${_PYTHON_PREFIX}_FIND_REQUIRED_Compiler)
+    list (APPEND _${_PYTHON_PREFIX}_REQUIRED_VARS ${_PYTHON_PREFIX}_COMPILER)
+  endif()
+
+  if (NOT "IronPython" IN_LIST _${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS)
+    unset (_${_PYTHON_PREFIX}_COMPILER CACHE)
+    unset (_${_PYTHON_PREFIX}_COMPILER_SIGNATURE CACHE)
+  elseif (DEFINED ${_PYTHON_PREFIX}_COMPILER
+      AND IS_ABSOLUTE "${${_PYTHON_PREFIX}_COMPILER}")
+    set (_${_PYTHON_PREFIX}_COMPILER "${${_PYTHON_PREFIX}_COMPILER}" CACHE INTERNAL "")
+  elseif (DEFINED _${_PYTHON_PREFIX}_COMPILER)
+    # compute compiler signature and check validity of definition
+    string (MD5 __${_PYTHON_PREFIX}_COMPILER_SIGNATURE "${_${_PYTHON_PREFIX}_SIGNATURE}:${_${_PYTHON_PREFIX}_COMPILER}")
+    if (__${_PYTHON_PREFIX}_COMPILER_SIGNATURE STREQUAL _${_PYTHON_PREFIX}_COMPILER_SIGNATURE)
+      # check version validity
+      if (${_PYTHON_PREFIX}_FIND_VERSION_EXACT)
+        _python_validate_compiler (VERSION ${${_PYTHON_PREFIX}_FIND_VERSION} EXACT CHECK_EXISTS)
+      elseif (${_PYTHON_PREFIX}_FIND_VERSION_RANGE)
+        _python_validate_compiler (IN_RANGE CHECK_EXISTS)
+      elseif (DEFINED ${_PYTHON_PREFIX}_FIND_VERSION)
+        _python_validate_compiler (VERSION ${${_PYTHON_PREFIX}_FIND_VERSION} CHECK_EXISTS)
+      else()
+        _python_validate_compiler (CHECK_EXISTS)
+      endif()
+    else()
+      unset (_${_PYTHON_PREFIX}_COMPILER CACHE)
+      unset (_${_PYTHON_PREFIX}_COMPILER_SIGNATURE CACHE)
+    endif()
+  endif()
+
+  if ("IronPython" IN_LIST _${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS
+      AND NOT _${_PYTHON_PREFIX}_COMPILER)
+    # IronPython specific artifacts
+    # If IronPython interpreter is found, use its path
+    unset (_${_PYTHON_PREFIX}_IRON_ROOT)
+    if (${_PYTHON_PREFIX}_Interpreter_FOUND AND ${_PYTHON_PREFIX}_INTERPRETER_ID STREQUAL "IronPython")
+      get_filename_component (_${_PYTHON_PREFIX}_IRON_ROOT "${${_PYTHON_PREFIX}_EXECUTABLE}" DIRECTORY)
+    endif()
+
+    if (_${_PYTHON_PREFIX}_FIND_STRATEGY STREQUAL "LOCATION")
+      _python_get_names (_${_PYTHON_PREFIX}_COMPILER_NAMES
+                         IMPLEMENTATIONS IronPython
+                         VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS}
+                         COMPILER)
+
+      _python_get_path_suffixes (_${_PYTHON_PREFIX}_PATH_SUFFIXES
+                                 IMPLEMENTATIONS IronPython
+                                 VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS}
+                                 COMPILER)
+
+      _python_get_frameworks (_${_PYTHON_PREFIX}_FRAMEWORK_PATHS
+                              IMPLEMENTATIONS IronPython
+                              VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS})
+      _python_get_registries (_${_PYTHON_PREFIX}_REGISTRY_PATHS
+                              IMPLEMENTATIONS IronPython
+                              VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS})
+
+      set (_${_PYTHON_PREFIX}_VALIDATE_OPTIONS ${_${_PYTHON_PREFIX}_FIND_VERSION_EXACT})
+      if (${_PYTHON_PREFIX}_FIND_VERSION_RANGE)
+        list (APPEND _${_PYTHON_PREFIX}_VALIDATE_OPTIONS IN_RANGE)
+      elseif (DEFINED ${_PYTHON_PREFIX}_FIND_VERSION)
+        list (APPEND _${_PYTHON_PREFIX}_VALIDATE_OPTIONS VERSION ${${_PYTHON_PREFIX}_FIND_VERSION})
+      endif()
+
+      while (TRUE)
+        # Apple frameworks handling
+        if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "FIRST")
+          find_program (_${_PYTHON_PREFIX}_COMPILER
+                        NAMES ${_${_PYTHON_PREFIX}_COMPILER_NAMES}
+                        NAMES_PER_DIR
+                        HINTS ${_${_PYTHON_PREFIX}_IRON_ROOT} ${_${_PYTHON_PREFIX}_HINTS}
+                        PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
+                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                        NO_CMAKE_PATH
+                        NO_CMAKE_ENVIRONMENT_PATH
+                        NO_SYSTEM_ENVIRONMENT_PATH
+                        NO_CMAKE_SYSTEM_PATH)
+          _python_validate_compiler (${_${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
+          if (_${_PYTHON_PREFIX}_COMPILER)
+            break()
+          endif()
+        endif()
+        # Windows registry
+        if (CMAKE_HOST_WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "FIRST")
+          find_program (_${_PYTHON_PREFIX}_COMPILER
+                        NAMES ${_${_PYTHON_PREFIX}_COMPILER_NAMES}
+                        NAMES_PER_DIR
+                        HINTS ${_${_PYTHON_PREFIX}_IRON_ROOT} ${_${_PYTHON_PREFIX}_HINTS}
+                        PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
+                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                        NO_SYSTEM_ENVIRONMENT_PATH
+                        NO_CMAKE_SYSTEM_PATH)
+          _python_validate_compiler (${_${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
+          if (_${_PYTHON_PREFIX}_COMPILER)
+            break()
+          endif()
+        endif()
+
+        # try using HINTS
+        find_program (_${_PYTHON_PREFIX}_COMPILER
+                      NAMES ${_${_PYTHON_PREFIX}_COMPILER_NAMES}
+                      NAMES_PER_DIR
+                      HINTS ${_${_PYTHON_PREFIX}_IRON_ROOT} ${_${_PYTHON_PREFIX}_HINTS}
+                      PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                      NO_SYSTEM_ENVIRONMENT_PATH
+                      NO_CMAKE_SYSTEM_PATH)
+        _python_validate_compiler (${_${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
+        if (_${_PYTHON_PREFIX}_COMPILER)
+          break()
+        endif()
+
+        # try using standard paths
+        find_program (_${_PYTHON_PREFIX}_COMPILER
+                      NAMES ${_${_PYTHON_PREFIX}_COMPILER_NAMES}
+                      NAMES_PER_DIR
+                      PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES})
+        _python_validate_compiler (${_${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
+        if (_${_PYTHON_PREFIX}_COMPILER)
+          break()
+        endif()
+
+        # Apple frameworks handling
+        if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "LAST")
+          find_program (_${_PYTHON_PREFIX}_COMPILER
+                        NAMES ${_${_PYTHON_PREFIX}_COMPILER_NAMES}
+                        NAMES_PER_DIR
+                        PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
+                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                        NO_DEFAULT_PATH)
+          _python_validate_compiler (${_${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
+          if (_${_PYTHON_PREFIX}_COMPILER)
+            break()
+          endif()
+        endif()
+        # Windows registry
+        if (CMAKE_HOST_WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "LAST")
+          find_program (_${_PYTHON_PREFIX}_COMPILER
+                        NAMES ${_${_PYTHON_PREFIX}_COMPILER_NAMES}
+                        NAMES_PER_DIR
+                        PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
+                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                        NO_DEFAULT_PATH)
+          _python_validate_compiler (${_${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
+          if (_${_PYTHON_PREFIX}_COMPILER)
+            break()
+          endif()
+        endif()
+
+        break()
+      endwhile()
+    else()
+      # try using root dir and registry
+      set (_${_PYTHON_PREFIX}_VALIDATE_OPTIONS EXACT)
+      if (${_PYTHON_PREFIX}_FIND_VERSION_RANGE)
+        list (APPEND _${_PYTHON_PREFIX}_VALIDATE_OPTIONS IN_RANGE)
+      endif()
+
+      foreach (_${_PYTHON_PREFIX}_VERSION IN LISTS _${_PYTHON_PREFIX}_FIND_VERSIONS)
+        _python_get_names (_${_PYTHON_PREFIX}_COMPILER_NAMES
+                           IMPLEMENTATIONS IronPython
+                           VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS}
+                           COMPILER)
+
+        _python_get_path_suffixes (_${_PYTHON_PREFIX}_PATH_SUFFIXES
+                                   IMPLEMENTATIONS IronPython
+                                   VERSION ${_${_PYTHON_PREFIX}_FIND_VERSION}
+                                   COMPILER)
+
+        _python_get_frameworks (_${_PYTHON_PREFIX}_FRAMEWORK_PATHS
+                                IMPLEMENTATIONS IronPython
+                                VERSION ${_${_PYTHON_PREFIX}_VERSION})
+        _python_get_registries (_${_PYTHON_PREFIX}_REGISTRY_PATHS
+                                IMPLEMENTATIONS IronPython
+                                VERSION ${_${_PYTHON_PREFIX}_VERSION})
+
+        # Apple frameworks handling
+        if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "FIRST")
+          find_program (_${_PYTHON_PREFIX}_COMPILER
+                        NAMES ${_${_PYTHON_PREFIX}_COMPILER_NAMES}
+                        NAMES_PER_DIR
+                        HINTS ${_${_PYTHON_PREFIX}_IRON_ROOT} ${_${_PYTHON_PREFIX}_HINTS}
+                        PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
+                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                        NO_CMAKE_PATH
+                        NO_CMAKE_ENVIRONMENT_PATH
+                        NO_SYSTEM_ENVIRONMENT_PATH
+                        NO_CMAKE_SYSTEM_PATH)
+          _python_validate_compiler (VERSION ${_${_PYTHON_PREFIX}_VERSION} ${_${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
+          if (_${_PYTHON_PREFIX}_COMPILER)
+            break()
+          endif()
+        endif()
+        # Windows registry
+        if (CMAKE_HOST_WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "FIRST")
+          find_program (_${_PYTHON_PREFIX}_COMPILER
+                        NAMES ${_${_PYTHON_PREFIX}_COMPILER_NAMES}
+                        NAMES_PER_DIR
+                        HINTS ${_${_PYTHON_PREFIX}_IRON_ROOT} ${_${_PYTHON_PREFIX}_HINTS}
+                        PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
+                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                        NO_SYSTEM_ENVIRONMENT_PATH
+                        NO_CMAKE_SYSTEM_PATH)
+          _python_validate_compiler (VERSION ${_${_PYTHON_PREFIX}_VERSION} ${_${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
+          if (_${_PYTHON_PREFIX}_COMPILER)
+            break()
+          endif()
+        endif()
+
+        # try using HINTS
+        find_program (_${_PYTHON_PREFIX}_COMPILER
+                      NAMES ${_${_PYTHON_PREFIX}_COMPILER_NAMES}
+                      NAMES_PER_DIR
+                      HINTS ${_${_PYTHON_PREFIX}_IRON_ROOT} ${_${_PYTHON_PREFIX}_HINTS}
+                      PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                      NO_SYSTEM_ENVIRONMENT_PATH
+                      NO_CMAKE_SYSTEM_PATH)
+        _python_validate_compiler (VERSION ${_${_PYTHON_PREFIX}_VERSION} ${_${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
+        if (_${_PYTHON_PREFIX}_COMPILER)
+          break()
+        endif()
+
+        # Apple frameworks handling
+        if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "LAST")
+          find_program (_${_PYTHON_PREFIX}_COMPILER
+                        NAMES ${_${_PYTHON_PREFIX}_COMPILER_NAMES}
+                        NAMES_PER_DIR
+                        PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
+                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                        NO_DEFAULT_PATH)
+          _python_validate_compiler (VERSION ${_${_PYTHON_PREFIX}_VERSION} ${_${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
+          if (_${_PYTHON_PREFIX}_COMPILER)
+            break()
+          endif()
+        endif()
+        # Windows registry
+        if (CMAKE_HOST_WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "LAST")
+          find_program (_${_PYTHON_PREFIX}_COMPILER
+                        NAMES ${_${_PYTHON_PREFIX}_COMPILER_NAMES}
+                        NAMES_PER_DIR
+                        PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
+                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                        NO_DEFAULT_PATH)
+          _python_validate_compiler (VERSION ${_${_PYTHON_PREFIX}_VERSION} ${_${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
+          if (_${_PYTHON_PREFIX}_COMPILER)
+            break()
+          endif()
+        endif()
+      endforeach()
+
+      # no specific version found, re-try in standard paths
+      _python_get_names (_${_PYTHON_PREFIX}_COMPILER_NAMES
+                         IMPLEMENTATIONS IronPython
+                         VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS}
+                         COMPILER)
+      _python_get_path_suffixes (_${_PYTHON_PREFIX}_PATH_SUFFIXES
+                                 IMPLEMENTATIONS IronPython
+                                 VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS}
+                                 COMPILER)
+      find_program (_${_PYTHON_PREFIX}_COMPILER
+                    NAMES ${_${_PYTHON_PREFIX}_COMPILER_NAMES}
+                    HINTS ${_${_PYTHON_PREFIX}_IRON_ROOT} ${_${_PYTHON_PREFIX}_HINTS}
+                    PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES})
+      _python_validate_compiler ()
+    endif()
+  endif()
+
+  set (${_PYTHON_PREFIX}_COMPILER "${_${_PYTHON_PREFIX}_COMPILER}")
+
+  if (_${_PYTHON_PREFIX}_COMPILER)
+    # retrieve python environment version from compiler
+    _python_get_launcher (_${_PYTHON_PREFIX}_COMPILER_LAUNCHER COMPILER)
+    set (_${_PYTHON_PREFIX}_VERSION_DIR "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/PythonCompilerVersion.dir")
+    file (WRITE "${_${_PYTHON_PREFIX}_VERSION_DIR}/version.py" "import sys; sys.stdout.write('.'.join([str(x) for x in sys.version_info[:3]]))\n")
+    execute_process (COMMAND ${_${_PYTHON_PREFIX}_COMPILER_LAUNCHER} "${_${_PYTHON_PREFIX}_COMPILER}"
+                             ${_${_PYTHON_PREFIX}_IRON_PYTHON_COMPILER_ARCH_FLAGS}
+                             /target:exe /embed "${_${_PYTHON_PREFIX}_VERSION_DIR}/version.py"
+                     WORKING_DIRECTORY "${_${_PYTHON_PREFIX}_VERSION_DIR}"
+                     OUTPUT_QUIET
+                     ERROR_QUIET)
+    get_filename_component (_${_PYTHON_PREFIX}_IR_DIR "${_${_PYTHON_PREFIX}_COMPILER}" DIRECTORY)
+    execute_process (COMMAND "${CMAKE_COMMAND}" -E env "MONO_PATH=${_${_PYTHON_PREFIX}_IR_DIR}"
+                             ${${_PYTHON_PREFIX}_DOTNET_LAUNCHER} "${_${_PYTHON_PREFIX}_VERSION_DIR}/version.exe"
+                     WORKING_DIRECTORY "${_${_PYTHON_PREFIX}_VERSION_DIR}"
+                     RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
+                     OUTPUT_VARIABLE _${_PYTHON_PREFIX}_VERSION
+                     ERROR_QUIET)
+    if (NOT _${_PYTHON_PREFIX}_RESULT)
+      set (_${_PYTHON_PREFIX}_COMPILER_USABLE TRUE)
+      string (REGEX MATCHALL "[0-9]+" _${_PYTHON_PREFIX}_VERSIONS "${_${_PYTHON_PREFIX}_VERSION}")
+      list (GET _${_PYTHON_PREFIX}_VERSIONS 0 _${_PYTHON_PREFIX}_VERSION_MAJOR)
+      list (GET _${_PYTHON_PREFIX}_VERSIONS 1 _${_PYTHON_PREFIX}_VERSION_MINOR)
+      list (GET _${_PYTHON_PREFIX}_VERSIONS 2 _${_PYTHON_PREFIX}_VERSION_PATCH)
+
+      if (NOT ${_PYTHON_PREFIX}_Interpreter_FOUND)
+        # set public version information
+        set (${_PYTHON_PREFIX}_VERSION ${_${_PYTHON_PREFIX}_VERSION})
+        set (${_PYTHON_PREFIX}_VERSION_MAJOR ${_${_PYTHON_PREFIX}_VERSION_MAJOR})
+        set (${_PYTHON_PREFIX}_VERSION_MINOR ${_${_PYTHON_PREFIX}_VERSION_MINOR})
+        set (${_PYTHON_PREFIX}_VERSION_PATCH ${_${_PYTHON_PREFIX}_VERSION_PATCH})
+      endif()
+    else()
+      # compiler not usable
+      set (_${_PYTHON_PREFIX}_COMPILER_USABLE FALSE)
+      set (_${_PYTHON_PREFIX}_Compiler_REASON_FAILURE "Cannot run the compiler \"${_${_PYTHON_PREFIX}_COMPILER}\"")
+    endif()
+    file (REMOVE_RECURSE "${_${_PYTHON_PREFIX}_VERSION_DIR}")
+  endif()
+
+  if (_${_PYTHON_PREFIX}_COMPILER AND _${_PYTHON_PREFIX}_COMPILER_USABLE)
+    if (${_PYTHON_PREFIX}_Interpreter_FOUND)
+      # Compiler must be compatible with interpreter
+      if ("${_${_PYTHON_PREFIX}_VERSION_MAJOR}.${_${_PYTHON_PREFIX}_VERSION_MINOR}" VERSION_EQUAL "${${_PYTHON_PREFIX}_VERSION_MAJOR}.${${_PYTHON_PREFIX}_VERSION_MINOR}")
+        set (${_PYTHON_PREFIX}_Compiler_FOUND TRUE)
+      endif()
+    elseif (${_PYTHON_PREFIX}_VERSION_MAJOR VERSION_EQUAL _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR)
+      set (${_PYTHON_PREFIX}_Compiler_FOUND TRUE)
+      # Use compiler version for future searches to ensure consistency
+      set (_${_PYTHON_PREFIX}_FIND_VERSIONS ${${_PYTHON_PREFIX}_VERSION_MAJOR}.${${_PYTHON_PREFIX}_VERSION_MINOR})
+    endif()
+  endif()
+
+  if (${_PYTHON_PREFIX}_Compiler_FOUND)
+    unset (_${_PYTHON_PREFIX}_Compiler_REASON_FAILURE)
+
+    # compute and save compiler signature
+    string (MD5 __${_PYTHON_PREFIX}_COMPILER_SIGNATURE "${_${_PYTHON_PREFIX}_SIGNATURE}:${_${_PYTHON_PREFIX}_COMPILER}")
+    set (_${_PYTHON_PREFIX}_COMPILER_SIGNATURE "${__${_PYTHON_PREFIX}_COMPILER_SIGNATURE}" CACHE INTERNAL "")
+
+    set (${_PYTHON_PREFIX}_COMPILER_ID IronPython)
+  else()
+    unset (_${_PYTHON_PREFIX}_COMPILER_SIGNATURE CACHE)
+    unset (${_PYTHON_PREFIX}_COMPILER_ID)
+  endif()
+
+  if (${_PYTHON_PREFIX}_ARTIFACTS_INTERACTIVE)
+    set (${_PYTHON_PREFIX}_COMPILER "${_${_PYTHON_PREFIX}_COMPILER}" CACHE FILEPATH "${_PYTHON_PREFIX} Compiler")
+  endif()
+
+  _python_mark_as_internal (_${_PYTHON_PREFIX}_COMPILER
+                            _${_PYTHON_PREFIX}_COMPILER_SIGNATURE)
+endif()
+
+# third step, search for the development artifacts
+if (${_PYTHON_PREFIX}_FIND_REQUIRED_Development.Module)
+  if ("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_MODULE_ARTIFACTS)
+    list (APPEND _${_PYTHON_PREFIX}_REQUIRED_VARS ${_PYTHON_PREFIX}_LIBRARIES)
+  endif()
+  if ("INCLUDE_DIR" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_MODULE_ARTIFACTS)
+    list (APPEND _${_PYTHON_PREFIX}_REQUIRED_VARS ${_PYTHON_PREFIX}_INCLUDE_DIRS)
+  endif()
+endif()
+if (${_PYTHON_PREFIX}_FIND_REQUIRED_Development.Embed)
+  if ("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_EMBED_ARTIFACTS)
+    list (APPEND _${_PYTHON_PREFIX}_REQUIRED_VARS ${_PYTHON_PREFIX}_LIBRARIES)
+  endif()
+  if ("INCLUDE_DIR" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_EMBED_ARTIFACTS)
+    list (APPEND _${_PYTHON_PREFIX}_REQUIRED_VARS ${_PYTHON_PREFIX}_INCLUDE_DIRS)
+  endif()
+endif()
+list (REMOVE_DUPLICATES _${_PYTHON_PREFIX}_REQUIRED_VARS)
+## Development environment is not compatible with IronPython interpreter
+if (("Development.Module" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
+      OR "Development.Embed" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
+    AND ((${_PYTHON_PREFIX}_Interpreter_FOUND
+        AND NOT ${_PYTHON_PREFIX}_INTERPRETER_ID STREQUAL "IronPython")
+      OR NOT ${_PYTHON_PREFIX}_Interpreter_FOUND))
+  if (${_PYTHON_PREFIX}_Interpreter_FOUND)
+    # reduce possible implementations to the interpreter one
+    if (${_PYTHON_PREFIX}_INTERPRETER_ID STREQUAL "PyPy")
+      set (_${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS "PyPy")
+    else()
+      set (_${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS "CPython")
+    endif()
+  else()
+    list (REMOVE_ITEM _${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS "IronPython")
+  endif()
+  if ("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
+  list (APPEND _${_PYTHON_PREFIX}_CACHED_VARS _${_PYTHON_PREFIX}_LIBRARY_RELEASE
+                                              _${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE
+                                              _${_PYTHON_PREFIX}_LIBRARY_DEBUG
+                                              _${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG)
+  endif()
+  if ("INCLUDE_DIR" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
+    list (APPEND _${_PYTHON_PREFIX}_CACHED_VARS _${_PYTHON_PREFIX}_INCLUDE_DIR)
+  endif()
+
+  _python_check_development_signature (Module)
+  _python_check_development_signature (Embed)
+
+  if (DEFINED ${_PYTHON_PREFIX}_LIBRARY
+      AND IS_ABSOLUTE "${${_PYTHON_PREFIX}_LIBRARY}")
+    set (_${_PYTHON_PREFIX}_LIBRARY_RELEASE "${${_PYTHON_PREFIX}_LIBRARY}" CACHE INTERNAL "")
+    unset (_${_PYTHON_PREFIX}_LIBRARY_DEBUG CACHE)
+    unset (_${_PYTHON_PREFIX}_INCLUDE_DIR CACHE)
+  endif()
+  if (DEFINED ${_PYTHON_PREFIX}_INCLUDE_DIR
+      AND IS_ABSOLUTE "${${_PYTHON_PREFIX}_INCLUDE_DIR}")
+    set (_${_PYTHON_PREFIX}_INCLUDE_DIR "${${_PYTHON_PREFIX}_INCLUDE_DIR}" CACHE INTERNAL "")
+  endif()
+
+  # Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES
+  unset (_${_PYTHON_PREFIX}_CMAKE_FIND_LIBRARY_SUFFIXES)
+  if (DEFINED ${_PYTHON_PREFIX}_USE_STATIC_LIBS AND NOT WIN32)
+    set(_${_PYTHON_PREFIX}_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
+    if(${_PYTHON_PREFIX}_USE_STATIC_LIBS)
+      set (CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX})
+    else()
+      list (REMOVE_ITEM CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX})
+    endif()
+  endif()
+
+  if (NOT _${_PYTHON_PREFIX}_LIBRARY_RELEASE OR NOT _${_PYTHON_PREFIX}_INCLUDE_DIR)
+    # if python interpreter is found, use it to look-up for artifacts
+    # to ensure consistency between interpreter and development environments.
+    # If not, try to locate a compatible config tool
+    if ((NOT ${_PYTHON_PREFIX}_Interpreter_FOUND OR CMAKE_CROSSCOMPILING)
+        AND "CPython" IN_LIST _${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS)
+      set (_${_PYTHON_PREFIX}_HINTS "${${_PYTHON_PREFIX}_ROOT_DIR}" ENV ${_PYTHON_PREFIX}_ROOT_DIR)
+      unset (_${_PYTHON_PREFIX}_VIRTUALENV_PATHS)
+      if (_${_PYTHON_PREFIX}_FIND_VIRTUALENV MATCHES "^(FIRST|ONLY)$")
+        set (_${_PYTHON_PREFIX}_VIRTUALENV_PATHS ENV VIRTUAL_ENV ENV CONDA_PREFIX)
+      endif()
+
+      if (_${_PYTHON_PREFIX}_FIND_STRATEGY STREQUAL "LOCATION")
+        _python_get_names (_${_PYTHON_PREFIX}_CONFIG_NAMES VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS} POSIX CONFIG)
+          # Framework Paths
+        _python_get_frameworks (_${_PYTHON_PREFIX}_FRAMEWORK_PATHS VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS})
+
+        # Apple frameworks handling
+        if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "FIRST")
+          find_program (_${_PYTHON_PREFIX}_CONFIG
+                        NAMES ${_${_PYTHON_PREFIX}_CONFIG_NAMES}
+                        NAMES_PER_DIR
+                        HINTS ${_${_PYTHON_PREFIX}_HINTS}
+                        PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
+                              ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
+                        PATH_SUFFIXES bin
+                        NO_CMAKE_PATH
+                        NO_CMAKE_ENVIRONMENT_PATH
+                        NO_SYSTEM_ENVIRONMENT_PATH
+                        NO_CMAKE_SYSTEM_PATH)
+        endif()
+
+        find_program (_${_PYTHON_PREFIX}_CONFIG
+                      NAMES ${_${_PYTHON_PREFIX}_CONFIG_NAMES}
+                      NAMES_PER_DIR
+                      HINTS ${_${_PYTHON_PREFIX}_HINTS}
+                      PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
+                      PATH_SUFFIXES bin)
+
+        # Apple frameworks handling
+        if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "LAST")
+          find_program (_${_PYTHON_PREFIX}_CONFIG
+                        NAMES ${_${_PYTHON_PREFIX}_CONFIG_NAMES}
+                        NAMES_PER_DIR
+                        PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
+                        PATH_SUFFIXES bin
+                        NO_DEFAULT_PATH)
+        endif()
+
+        if (_${_PYTHON_PREFIX}_CONFIG)
+          execute_process (COMMAND "${_${_PYTHON_PREFIX}_CONFIG}" --help
+                           RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
+                           OUTPUT_VARIABLE __${_PYTHON_PREFIX}_HELP
+                           ERROR_QUIET
+                           OUTPUT_STRIP_TRAILING_WHITESPACE)
+          if (_${_PYTHON_PREFIX}_RESULT)
+            # assume config tool is not usable
+            unset (_${_PYTHON_PREFIX}_CONFIG CACHE)
+          endif()
+        endif()
+
+        if (_${_PYTHON_PREFIX}_CONFIG)
+          execute_process (COMMAND "${_${_PYTHON_PREFIX}_CONFIG}" --abiflags
+                           RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
+                           OUTPUT_VARIABLE __${_PYTHON_PREFIX}_ABIFLAGS
+                           ERROR_QUIET
+                           OUTPUT_STRIP_TRAILING_WHITESPACE)
+          if (_${_PYTHON_PREFIX}_RESULT)
+            # assume ABI is not supported
+            set (__${_PYTHON_PREFIX}_ABIFLAGS "")
+          endif()
+          if (DEFINED _${_PYTHON_PREFIX}_FIND_ABI AND NOT __${_PYTHON_PREFIX}_ABIFLAGS IN_LIST _${_PYTHON_PREFIX}_ABIFLAGS)
+            # Wrong ABI
+            unset (_${_PYTHON_PREFIX}_CONFIG CACHE)
+          endif()
+        endif()
+
+        if (_${_PYTHON_PREFIX}_CONFIG AND DEFINED CMAKE_LIBRARY_ARCHITECTURE)
+          # check that config tool match library architecture
+          execute_process (COMMAND "${_${_PYTHON_PREFIX}_CONFIG}" --configdir
+                           RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
+                           OUTPUT_VARIABLE _${_PYTHON_PREFIX}_CONFIGDIR
+                           ERROR_QUIET
+                           OUTPUT_STRIP_TRAILING_WHITESPACE)
+          if (_${_PYTHON_PREFIX}_RESULT)
+            unset (_${_PYTHON_PREFIX}_CONFIG CACHE)
+          else()
+            string(FIND "${_${_PYTHON_PREFIX}_CONFIGDIR}" "${CMAKE_LIBRARY_ARCHITECTURE}" _${_PYTHON_PREFIX}_RESULT)
+            if (_${_PYTHON_PREFIX}_RESULT EQUAL -1)
+              unset (_${_PYTHON_PREFIX}_CONFIG CACHE)
+            endif()
+          endif()
+        endif()
+      else()
+        foreach (_${_PYTHON_PREFIX}_VERSION IN LISTS _${_PYTHON_PREFIX}_FIND_VERSIONS)
+          # try to use pythonX.Y-config tool
+          _python_get_names (_${_PYTHON_PREFIX}_CONFIG_NAMES VERSION ${_${_PYTHON_PREFIX}_VERSION} POSIX CONFIG)
+
+          # Framework Paths
+          _python_get_frameworks (_${_PYTHON_PREFIX}_FRAMEWORK_PATHS VERSION ${_${_PYTHON_PREFIX}_VERSION})
+
+          # Apple frameworks handling
+          if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "FIRST")
+            find_program (_${_PYTHON_PREFIX}_CONFIG
+                          NAMES ${_${_PYTHON_PREFIX}_CONFIG_NAMES}
+                          NAMES_PER_DIR
+                          HINTS ${_${_PYTHON_PREFIX}_HINTS}
+                          PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
+                                ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
+                          PATH_SUFFIXES bin
+                          NO_CMAKE_PATH
+                          NO_CMAKE_ENVIRONMENT_PATH
+                          NO_SYSTEM_ENVIRONMENT_PATH
+                          NO_CMAKE_SYSTEM_PATH)
+          endif()
+
+          find_program (_${_PYTHON_PREFIX}_CONFIG
+                        NAMES ${_${_PYTHON_PREFIX}_CONFIG_NAMES}
+                        NAMES_PER_DIR
+                        HINTS ${_${_PYTHON_PREFIX}_HINTS}
+                        PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
+                        PATH_SUFFIXES bin)
+
+          # Apple frameworks handling
+          if (CMAKE_HOST_APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "LAST")
+            find_program (_${_PYTHON_PREFIX}_CONFIG
+                          NAMES ${_${_PYTHON_PREFIX}_CONFIG_NAMES}
+                          NAMES_PER_DIR
+                          PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
+                          PATH_SUFFIXES bin
+                          NO_DEFAULT_PATH)
+          endif()
+
+          unset (_${_PYTHON_PREFIX}_CONFIG_NAMES)
+
+          if (_${_PYTHON_PREFIX}_CONFIG)
+            execute_process (COMMAND "${_${_PYTHON_PREFIX}_CONFIG}" --help
+                             RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
+                             OUTPUT_VARIABLE __${_PYTHON_PREFIX}_HELP
+                             ERROR_QUIET
+                             OUTPUT_STRIP_TRAILING_WHITESPACE)
+            if (_${_PYTHON_PREFIX}_RESULT)
+              # assume config tool is not usable
+              unset (_${_PYTHON_PREFIX}_CONFIG CACHE)
+            endif()
+          endif()
+
+          if (NOT _${_PYTHON_PREFIX}_CONFIG)
+            continue()
+          endif()
+
+          execute_process (COMMAND "${_${_PYTHON_PREFIX}_CONFIG}" --abiflags
+                           RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
+                           OUTPUT_VARIABLE __${_PYTHON_PREFIX}_ABIFLAGS
+                           ERROR_QUIET
+                           OUTPUT_STRIP_TRAILING_WHITESPACE)
+          if (_${_PYTHON_PREFIX}_RESULT)
+            # assume ABI is not supported
+            set (__${_PYTHON_PREFIX}_ABIFLAGS "")
+          endif()
+          if (DEFINED _${_PYTHON_PREFIX}_FIND_ABI AND NOT __${_PYTHON_PREFIX}_ABIFLAGS IN_LIST _${_PYTHON_PREFIX}_ABIFLAGS)
+            # Wrong ABI
+            unset (_${_PYTHON_PREFIX}_CONFIG CACHE)
+            continue()
+          endif()
+
+          if (_${_PYTHON_PREFIX}_CONFIG AND DEFINED CMAKE_LIBRARY_ARCHITECTURE)
+            # check that config tool match library architecture
+            execute_process (COMMAND "${_${_PYTHON_PREFIX}_CONFIG}" --configdir
+                             RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
+                             OUTPUT_VARIABLE _${_PYTHON_PREFIX}_CONFIGDIR
+                             ERROR_QUIET
+                             OUTPUT_STRIP_TRAILING_WHITESPACE)
+            if (_${_PYTHON_PREFIX}_RESULT)
+              unset (_${_PYTHON_PREFIX}_CONFIG CACHE)
+              continue()
+            endif()
+            string (FIND "${_${_PYTHON_PREFIX}_CONFIGDIR}" "${CMAKE_LIBRARY_ARCHITECTURE}" _${_PYTHON_PREFIX}_RESULT)
+            if (_${_PYTHON_PREFIX}_RESULT EQUAL -1)
+              unset (_${_PYTHON_PREFIX}_CONFIG CACHE)
+              continue()
+            endif()
+          endif()
+
+          if (_${_PYTHON_PREFIX}_CONFIG)
+            break()
+          endif()
+        endforeach()
+      endif()
+    endif()
+  endif()
+
+  if ("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
+    if (NOT _${_PYTHON_PREFIX}_LIBRARY_RELEASE)
+      if ((${_PYTHON_PREFIX}_Interpreter_FOUND AND NOT CMAKE_CROSSCOMPILING) OR _${_PYTHON_PREFIX}_CONFIG)
+        # retrieve root install directory
+        _python_get_config_var (_${_PYTHON_PREFIX}_PREFIX PREFIX)
+
+        # enforce current ABI
+        _python_get_config_var (_${_PYTHON_PREFIX}_ABIFLAGS ABIFLAGS)
+
+        set (_${_PYTHON_PREFIX}_HINTS "${_${_PYTHON_PREFIX}_PREFIX}")
+
+        # retrieve library
+        ## compute some paths and artifact names
+        if (_${_PYTHON_PREFIX}_CONFIG)
+          string (REGEX REPLACE "^.+python([0-9.]+)[a-z]*-config" "\\1" _${_PYTHON_PREFIX}_VERSION "${_${_PYTHON_PREFIX}_CONFIG}")
+        else()
+          set (_${_PYTHON_PREFIX}_VERSION "${${_PYTHON_PREFIX}_VERSION_MAJOR}.${${_PYTHON_PREFIX}_VERSION_MINOR}")
+        endif()
+        _python_get_path_suffixes (_${_PYTHON_PREFIX}_PATH_SUFFIXES VERSION ${_${_PYTHON_PREFIX}_VERSION} LIBRARY)
+        _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES VERSION ${_${_PYTHON_PREFIX}_VERSION} WIN32 POSIX LIBRARY)
+
+        _python_get_config_var (_${_PYTHON_PREFIX}_CONFIGDIR CONFIGDIR)
+        list (APPEND _${_PYTHON_PREFIX}_HINTS "${_${_PYTHON_PREFIX}_CONFIGDIR}")
+
+        list (APPEND _${_PYTHON_PREFIX}_HINTS "${${_PYTHON_PREFIX}_ROOT_DIR}" ENV ${_PYTHON_PREFIX}_ROOT_DIR)
+
+        find_library (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
+                      NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
+                      NAMES_PER_DIR
+                      HINTS ${_${_PYTHON_PREFIX}_HINTS}
+                      PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                      NO_SYSTEM_ENVIRONMENT_PATH
+                      NO_CMAKE_SYSTEM_PATH)
+      endif()
+
+      # Rely on HINTS and standard paths if interpreter or config tool failed to locate artifacts
+      if (NOT _${_PYTHON_PREFIX}_LIBRARY_RELEASE)
+        set (_${_PYTHON_PREFIX}_HINTS "${${_PYTHON_PREFIX}_ROOT_DIR}" ENV ${_PYTHON_PREFIX}_ROOT_DIR)
+
+        unset (_${_PYTHON_PREFIX}_VIRTUALENV_PATHS)
+        if (_${_PYTHON_PREFIX}_FIND_VIRTUALENV MATCHES "^(FIRST|ONLY)$")
+          set (_${_PYTHON_PREFIX}_VIRTUALENV_PATHS ENV VIRTUAL_ENV ENV CONDA_PREFIX)
+        endif()
+
+        if (_${_PYTHON_PREFIX}_FIND_STRATEGY STREQUAL "LOCATION")
+          # library names
+          _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS} WIN32 POSIX LIBRARY)
+          _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS} WIN32 DEBUG)
+          # Paths suffixes
+          _python_get_path_suffixes (_${_PYTHON_PREFIX}_PATH_SUFFIXES VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS} LIBRARY)
+
+          # Framework Paths
+          _python_get_frameworks (_${_PYTHON_PREFIX}_FRAMEWORK_PATHS VERSION ${_${_PYTHON_PREFIX}_LIB_FIND_VERSIONS})
+          # Registry Paths
+          _python_get_registries (_${_PYTHON_PREFIX}_REGISTRY_PATHS VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS} )
+
+          if (APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "FIRST")
+            find_library (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
+                          NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
+                          NAMES_PER_DIR
+                          HINTS ${_${_PYTHON_PREFIX}_HINTS}
+                          PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
+                                ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
+                          PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                          NO_CMAKE_PATH
+                          NO_CMAKE_ENVIRONMENT_PATH
+                          NO_SYSTEM_ENVIRONMENT_PATH
+                          NO_CMAKE_SYSTEM_PATH)
+          endif()
+
+          if (WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "FIRST")
+            find_library (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
+                          NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
+                          NAMES_PER_DIR
+                          HINTS ${_${_PYTHON_PREFIX}_HINTS}
+                          PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
+                                ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
+                          PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                          NO_SYSTEM_ENVIRONMENT_PATH
+                          NO_CMAKE_SYSTEM_PATH)
+          endif()
+
+          # search in HINTS locations
+          find_library (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
+                        NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
+                        NAMES_PER_DIR
+                        HINTS ${_${_PYTHON_PREFIX}_HINTS}
+                        PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
+                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                        NO_SYSTEM_ENVIRONMENT_PATH
+                        NO_CMAKE_SYSTEM_PATH)
+
+          if (APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "LAST")
+            set (__${_PYTHON_PREFIX}_FRAMEWORK_PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS})
+          else()
+            unset (__${_PYTHON_PREFIX}_FRAMEWORK_PATHS)
+          endif()
+
+          if (WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "LAST")
+            set (__${_PYTHON_PREFIX}_REGISTRY_PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS})
+          else()
+            unset (__${_PYTHON_PREFIX}_REGISTRY_PATHS)
+          endif()
+
+          # search in all default paths
+          find_library (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
+                        NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
+                        NAMES_PER_DIR
+                        PATHS ${__${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
+                              ${__${_PYTHON_PREFIX}_REGISTRY_PATHS}
+                        PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES})
+        else()
+          foreach (_${_PYTHON_PREFIX}_LIB_VERSION IN LISTS _${_PYTHON_PREFIX}_FIND_VERSIONS)
+            _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES VERSION ${_${_PYTHON_PREFIX}_LIB_VERSION} WIN32 POSIX LIBRARY)
+            _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG VERSION ${_${_PYTHON_PREFIX}_LIB_VERSION} WIN32 DEBUG)
+
+            _python_get_frameworks (_${_PYTHON_PREFIX}_FRAMEWORK_PATHS VERSION ${_${_PYTHON_PREFIX}_LIB_VERSION})
+            _python_get_registries (_${_PYTHON_PREFIX}_REGISTRY_PATHS VERSION ${_${_PYTHON_PREFIX}_LIB_VERSION})
+
+            _python_get_path_suffixes (_${_PYTHON_PREFIX}_PATH_SUFFIXES VERSION ${_${_PYTHON_PREFIX}_LIB_VERSION} LIBRARY)
+
+            if (APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "FIRST")
+              find_library (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
+                            NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
+                            NAMES_PER_DIR
+                            HINTS ${_${_PYTHON_PREFIX}_HINTS}
+                            PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
+                                  ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
+                            PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                            NO_CMAKE_PATH
+                            NO_CMAKE_ENVIRONMENT_PATH
+                            NO_SYSTEM_ENVIRONMENT_PATH
+                            NO_CMAKE_SYSTEM_PATH)
+            endif()
+
+            if (WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "FIRST")
+              find_library (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
+                            NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
+                            NAMES_PER_DIR
+                            HINTS ${_${_PYTHON_PREFIX}_HINTS}
+                            PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
+                                  ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
+                            PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                            NO_SYSTEM_ENVIRONMENT_PATH
+                            NO_CMAKE_SYSTEM_PATH)
+            endif()
+
+            # search in HINTS locations
+            find_library (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
+                          NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
+                          NAMES_PER_DIR
+                          HINTS ${_${_PYTHON_PREFIX}_HINTS}
+                          PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
+                          PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                          NO_SYSTEM_ENVIRONMENT_PATH
+                          NO_CMAKE_SYSTEM_PATH)
+
+            if (APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "LAST")
+              set (__${_PYTHON_PREFIX}_FRAMEWORK_PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS})
+            else()
+              unset (__${_PYTHON_PREFIX}_FRAMEWORK_PATHS)
+            endif()
+
+            if (WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "LAST")
+              set (__${_PYTHON_PREFIX}_REGISTRY_PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS})
+            else()
+              unset (__${_PYTHON_PREFIX}_REGISTRY_PATHS)
+            endif()
+
+            # search in all default paths
+            find_library (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
+                          NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
+                          NAMES_PER_DIR
+                          PATHS ${__${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
+                                ${__${_PYTHON_PREFIX}_REGISTRY_PATHS}
+                          PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES})
+
+            if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE)
+              break()
+            endif()
+          endforeach()
+        endif()
+      endif()
+    endif()
+
+    # finalize library version information
+    _python_get_version (LIBRARY PREFIX _${_PYTHON_PREFIX}_)
+    if (_${_PYTHON_PREFIX}_VERSION EQUAL "${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR}")
+      # not able to extract full version from library name
+      if (${_PYTHON_PREFIX}_Interpreter_FOUND)
+        # update from interpreter
+        set (_${_PYTHON_PREFIX}_VERSION ${${_PYTHON_PREFIX}_VERSION})
+        set (_${_PYTHON_PREFIX}_VERSION_MAJOR ${${_PYTHON_PREFIX}_VERSION_MAJOR})
+        set (_${_PYTHON_PREFIX}_VERSION_MINOR ${${_PYTHON_PREFIX}_VERSION_MINOR})
+        set (_${_PYTHON_PREFIX}_VERSION_PATCH ${${_PYTHON_PREFIX}_VERSION_PATCH})
+      endif()
+    endif()
+
+    set (${_PYTHON_PREFIX}_LIBRARY_RELEASE "${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}")
+
+    if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE AND NOT EXISTS "${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}")
+      set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE "Cannot find the library \"${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}\"")
+      set_property (CACHE _${_PYTHON_PREFIX}_LIBRARY_RELEASE PROPERTY VALUE "${_PYTHON_PREFIX}_LIBRARY_RELEASE-NOTFOUND")
+    endif()
+
+    set (_${_PYTHON_PREFIX}_HINTS "${${_PYTHON_PREFIX}_ROOT_DIR}" ENV ${_PYTHON_PREFIX}_ROOT_DIR)
+
+    if (WIN32 AND _${_PYTHON_PREFIX}_LIBRARY_RELEASE)
+      # search for debug library
+      # use release library location as a hint
+      _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG VERSION ${_${_PYTHON_PREFIX}_VERSION} WIN32 DEBUG)
+      get_filename_component (_${_PYTHON_PREFIX}_PATH "${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}" DIRECTORY)
+      find_library (_${_PYTHON_PREFIX}_LIBRARY_DEBUG
+                    NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG}
+                    NAMES_PER_DIR
+                    HINTS "${_${_PYTHON_PREFIX}_PATH}" ${_${_PYTHON_PREFIX}_HINTS}
+                    NO_DEFAULT_PATH)
+      # second try including CMAKE variables to catch-up non conventional layouts
+      find_library (_${_PYTHON_PREFIX}_LIBRARY_DEBUG
+                    NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG}
+                    NAMES_PER_DIR
+                    NO_SYSTEM_ENVIRONMENT_PATH
+                    NO_CMAKE_SYSTEM_PATH)
+    endif()
+
+    # retrieve runtime libraries
+    if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE)
+      _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES VERSION ${_${_PYTHON_PREFIX}_VERSION} WIN32 POSIX LIBRARY)
+      get_filename_component (_${_PYTHON_PREFIX}_PATH "${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}" DIRECTORY)
+      get_filename_component (_${_PYTHON_PREFIX}_PATH2 "${_${_PYTHON_PREFIX}_PATH}" DIRECTORY)
+      _python_find_runtime_library (_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE
+                                    NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES}
+                                    NAMES_PER_DIR
+                                    HINTS "${_${_PYTHON_PREFIX}_PATH}"
+                                          "${_${_PYTHON_PREFIX}_PATH2}" ${_${_PYTHON_PREFIX}_HINTS}
+                                    PATH_SUFFIXES bin)
+    endif()
+    if (_${_PYTHON_PREFIX}_LIBRARY_DEBUG)
+      _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG VERSION ${_${_PYTHON_PREFIX}_VERSION} WIN32 DEBUG)
+      get_filename_component (_${_PYTHON_PREFIX}_PATH "${_${_PYTHON_PREFIX}_LIBRARY_DEBUG}" DIRECTORY)
+      get_filename_component (_${_PYTHON_PREFIX}_PATH2 "${_${_PYTHON_PREFIX}_PATH}" DIRECTORY)
+      _python_find_runtime_library (_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG
+                                    NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG}
+                                    NAMES_PER_DIR
+                                    HINTS "${_${_PYTHON_PREFIX}_PATH}"
+                                          "${_${_PYTHON_PREFIX}_PATH2}" ${_${_PYTHON_PREFIX}_HINTS}
+                                    PATH_SUFFIXES bin)
+    endif()
+  endif()
+
+  if ("INCLUDE_DIR" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
+    while (NOT _${_PYTHON_PREFIX}_INCLUDE_DIR)
+      if ("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS
+          AND NOT _${_PYTHON_PREFIX}_LIBRARY_RELEASE)
+        # Don't search for include dir if no library was founded
+        break()
+      endif()
+
+      if ((${_PYTHON_PREFIX}_Interpreter_FOUND AND NOT CMAKE_CROSSCOMPILING) OR _${_PYTHON_PREFIX}_CONFIG)
+        _python_get_config_var (_${_PYTHON_PREFIX}_INCLUDE_DIRS INCLUDES)
+
+        find_path (_${_PYTHON_PREFIX}_INCLUDE_DIR
+                   NAMES ${_${_PYTHON_PREFIX}_INCLUDE_NAMES}
+                   HINTS ${_${_PYTHON_PREFIX}_INCLUDE_DIRS}
+                   NO_SYSTEM_ENVIRONMENT_PATH
+                   NO_CMAKE_SYSTEM_PATH)
+      endif()
+
+      # Rely on HINTS and standard paths if interpreter or config tool failed to locate artifacts
+      if (NOT _${_PYTHON_PREFIX}_INCLUDE_DIR)
+        unset (_${_PYTHON_PREFIX}_VIRTUALENV_PATHS)
+        if (_${_PYTHON_PREFIX}_FIND_VIRTUALENV MATCHES "^(FIRST|ONLY)$")
+          set (_${_PYTHON_PREFIX}_VIRTUALENV_PATHS ENV VIRTUAL_ENV ENV CONDA_PREFIX)
+        endif()
+        unset (_${_PYTHON_PREFIX}_INCLUDE_HINTS)
+
+        if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE)
+          # Use the library's install prefix as a hint
+          if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE MATCHES "^(.+/Frameworks/Python.framework/Versions/[0-9.]+)")
+            list (APPEND _${_PYTHON_PREFIX}_INCLUDE_HINTS "${CMAKE_MATCH_1}")
+          elseif (_${_PYTHON_PREFIX}_LIBRARY_RELEASE MATCHES "^(.+)/lib(64|32)?/python[0-9.]+/config")
+            list (APPEND _${_PYTHON_PREFIX}_INCLUDE_HINTS "${CMAKE_MATCH_1}")
+          elseif (DEFINED CMAKE_LIBRARY_ARCHITECTURE AND ${_${_PYTHON_PREFIX}_LIBRARY_RELEASE} MATCHES "^(.+)/lib/${CMAKE_LIBRARY_ARCHITECTURE}")
+            list (APPEND _${_PYTHON_PREFIX}_INCLUDE_HINTS "${CMAKE_MATCH_1}")
+          else()
+            # assume library is in a directory under root
+            get_filename_component (_${_PYTHON_PREFIX}_PREFIX "${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}" DIRECTORY)
+            get_filename_component (_${_PYTHON_PREFIX}_PREFIX "${_${_PYTHON_PREFIX}_PREFIX}" DIRECTORY)
+            list (APPEND _${_PYTHON_PREFIX}_INCLUDE_HINTS "${_${_PYTHON_PREFIX}_PREFIX}")
+          endif()
+        endif()
+
+        _python_get_frameworks (_${_PYTHON_PREFIX}_FRAMEWORK_PATHS VERSION ${_${_PYTHON_PREFIX}_VERSION})
+        _python_get_registries (_${_PYTHON_PREFIX}_REGISTRY_PATHS VERSION ${_${_PYTHON_PREFIX}_VERSION})
+        _python_get_path_suffixes (_${_PYTHON_PREFIX}_PATH_SUFFIXES VERSION ${_${_PYTHON_PREFIX}_VERSION} INCLUDE)
+
+        if (APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "FIRST")
+          find_path (_${_PYTHON_PREFIX}_INCLUDE_DIR
+                     NAMES ${_${_PYTHON_PREFIX}_INCLUDE_NAMES}
+                     HINTS ${_${_PYTHON_PREFIX}_INCLUDE_HINTS} ${_${_PYTHON_PREFIX}_HINTS}
+                     PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
+                           ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
+                     PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                     NO_CMAKE_PATH
+                     NO_CMAKE_ENVIRONMENT_PATH
+                     NO_SYSTEM_ENVIRONMENT_PATH
+                     NO_CMAKE_SYSTEM_PATH)
+        endif()
+
+        if (WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "FIRST")
+          find_path (_${_PYTHON_PREFIX}_INCLUDE_DIR
+                     NAMES ${_${_PYTHON_PREFIX}_INCLUDE_NAMES}
+                     HINTS ${_${_PYTHON_PREFIX}_INCLUDE_HINTS} ${_${_PYTHON_PREFIX}_HINTS}
+                     PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
+                           ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
+                     PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                     NO_SYSTEM_ENVIRONMENT_PATH
+                     NO_CMAKE_SYSTEM_PATH)
+        endif()
+
+        if (APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "LAST")
+          set (__${_PYTHON_PREFIX}_FRAMEWORK_PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS})
+        else()
+          unset (__${_PYTHON_PREFIX}_FRAMEWORK_PATHS)
+        endif()
+
+        if (WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "LAST")
+          set (__${_PYTHON_PREFIX}_REGISTRY_PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS})
+        else()
+          unset (__${_PYTHON_PREFIX}_REGISTRY_PATHS)
+        endif()
+
+        find_path (_${_PYTHON_PREFIX}_INCLUDE_DIR
+                   NAMES ${_${_PYTHON_PREFIX}_INCLUDE_NAMES}
+                   HINTS ${_${_PYTHON_PREFIX}_INCLUDE_HINTS} ${_${_PYTHON_PREFIX}_HINTS}
+                   PATHS ${_${_PYTHON_PREFIX}_VIRTUALENV_PATHS}
+                         ${__${_PYTHON_PREFIX}_FRAMEWORK_PATHS}
+                         ${__${_PYTHON_PREFIX}_REGISTRY_PATHS}
+                   PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
+                   NO_SYSTEM_ENVIRONMENT_PATH
+                   NO_CMAKE_SYSTEM_PATH)
+      endif()
+
+      # search header file in standard locations
+      find_path (_${_PYTHON_PREFIX}_INCLUDE_DIR
+                 NAMES ${_${_PYTHON_PREFIX}_INCLUDE_NAMES})
+
+      break()
+    endwhile()
+
+    set (${_PYTHON_PREFIX}_INCLUDE_DIRS "${_${_PYTHON_PREFIX}_INCLUDE_DIR}")
+
+    if (_${_PYTHON_PREFIX}_INCLUDE_DIR AND NOT EXISTS "${_${_PYTHON_PREFIX}_INCLUDE_DIR}")
+      set (_${_PYTHON_PREFIX}_Development_REASON_FAILURE "Cannot find the directory \"${_${_PYTHON_PREFIX}_INCLUDE_DIR}\"")
+      set_property (CACHE _${_PYTHON_PREFIX}_INCLUDE_DIR PROPERTY VALUE "${_PYTHON_PREFIX}_INCLUDE_DIR-NOTFOUND")
+    endif()
+
+    if (_${_PYTHON_PREFIX}_INCLUDE_DIR)
+      # retrieve version from header file
+      _python_get_version (INCLUDE PREFIX _${_PYTHON_PREFIX}_INC_)
+      if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE)
+        if ("${_${_PYTHON_PREFIX}_INC_VERSION_MAJOR}.${_${_PYTHON_PREFIX}_INC_VERSION_MINOR}"
+            VERSION_EQUAL _${_PYTHON_PREFIX}_VERSION)
+          # update versioning
+          set (_${_PYTHON_PREFIX}_VERSION ${_${_PYTHON_PREFIX}_INC_VERSION})
+          set (_${_PYTHON_PREFIX}_VERSION_PATCH ${_${_PYTHON_PREFIX}_INC_VERSION_PATCH})
+        endif()
+      else()
+        set (_${_PYTHON_PREFIX}_VERSION ${_${_PYTHON_PREFIX}_INC_VERSION})
+        set (_${_PYTHON_PREFIX}_VERSION_MAJOR ${_${_PYTHON_PREFIX}_INC_VERSION_MAJOR})
+        set (_${_PYTHON_PREFIX}_VERSION_MINOR ${_${_PYTHON_PREFIX}_INC_VERSION_MINOR})
+        set (_${_PYTHON_PREFIX}_VERSION_PATCH ${_${_PYTHON_PREFIX}_INC_VERSION_PATCH})
+      endif()
+    endif()
+  endif()
+
+  if (NOT ${_PYTHON_PREFIX}_Interpreter_FOUND AND NOT ${_PYTHON_PREFIX}_Compiler_FOUND)
+    # set public version information
+    set (${_PYTHON_PREFIX}_VERSION ${_${_PYTHON_PREFIX}_VERSION})
+    set (${_PYTHON_PREFIX}_VERSION_MAJOR ${_${_PYTHON_PREFIX}_VERSION_MAJOR})
+    set (${_PYTHON_PREFIX}_VERSION_MINOR ${_${_PYTHON_PREFIX}_VERSION_MINOR})
+    set (${_PYTHON_PREFIX}_VERSION_PATCH ${_${_PYTHON_PREFIX}_VERSION_PATCH})
+  endif()
+
+  # define public variables
+  if ("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
+    set (${_PYTHON_PREFIX}_LIBRARY_DEBUG "${_${_PYTHON_PREFIX}_LIBRARY_DEBUG}")
+    _python_select_library_configurations (${_PYTHON_PREFIX})
+
+    set (${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE "${_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE}")
+    set (${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG "${_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG}")
+
+    if (_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE)
+      set (${_PYTHON_PREFIX}_RUNTIME_LIBRARY "${_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE}")
+    elseif (_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG)
+      set (${_PYTHON_PREFIX}_RUNTIME_LIBRARY "${_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG}")
+    else()
+      set (${_PYTHON_PREFIX}_RUNTIME_LIBRARY "${_PYTHON_PREFIX}_RUNTIME_LIBRARY-NOTFOUND")
+    endif()
+
+    _python_set_library_dirs (${_PYTHON_PREFIX}_LIBRARY_DIRS
+                              _${_PYTHON_PREFIX}_LIBRARY_RELEASE
+                              _${_PYTHON_PREFIX}_LIBRARY_DEBUG)
+    if (UNIX)
+      if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE MATCHES "${CMAKE_SHARED_LIBRARY_SUFFIX}$")
+        set (${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DIRS ${${_PYTHON_PREFIX}_LIBRARY_DIRS})
+      endif()
+    else()
+      _python_set_library_dirs (${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DIRS
+                                _${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE
+                                _${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG)
+    endif()
+  endif()
+
+  if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE OR _${_PYTHON_PREFIX}_INCLUDE_DIR)
+    if (${_PYTHON_PREFIX}_Interpreter_FOUND OR ${_PYTHON_PREFIX}_Compiler_FOUND)
+      # development environment must be compatible with interpreter/compiler
+      if ("${_${_PYTHON_PREFIX}_VERSION_MAJOR}.${_${_PYTHON_PREFIX}_VERSION_MINOR}" VERSION_EQUAL "${${_PYTHON_PREFIX}_VERSION_MAJOR}.${${_PYTHON_PREFIX}_VERSION_MINOR}"
+          AND "${_${_PYTHON_PREFIX}_INC_VERSION_MAJOR}.${_${_PYTHON_PREFIX}_INC_VERSION_MINOR}" VERSION_EQUAL "${_${_PYTHON_PREFIX}_VERSION_MAJOR}.${_${_PYTHON_PREFIX}_VERSION_MINOR}")
+        _python_set_development_module_found (Module)
+        _python_set_development_module_found (Embed)
+      endif()
+    elseif (${_PYTHON_PREFIX}_VERSION_MAJOR VERSION_EQUAL _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR
+        AND "${_${_PYTHON_PREFIX}_INC_VERSION_MAJOR}.${_${_PYTHON_PREFIX}_INC_VERSION_MINOR}" VERSION_EQUAL "${_${_PYTHON_PREFIX}_VERSION_MAJOR}.${_${_PYTHON_PREFIX}_VERSION_MINOR}")
+      _python_set_development_module_found (Module)
+      _python_set_development_module_found (Embed)
+    endif()
+    if (DEFINED _${_PYTHON_PREFIX}_FIND_ABI AND
+        (NOT _${_PYTHON_PREFIX}_ABI IN_LIST _${_PYTHON_PREFIX}_ABIFLAGS
+          OR NOT _${_PYTHON_PREFIX}_INC_ABI IN_LIST _${_PYTHON_PREFIX}_ABIFLAGS))
+      set (${_PYTHON_PREFIX}_Development.Module_FOUND FALSE)
+      set (${_PYTHON_PREFIX}_Development.Embed_FOUND FALSE)
+    endif()
+  endif()
+
+  if (( ${_PYTHON_PREFIX}_Development.Module_FOUND
+        AND ${_PYTHON_PREFIX}_Development.Embed_FOUND)
+      OR (NOT "Development.Module" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
+        AND ${_PYTHON_PREFIX}_Development.Embed_FOUND)
+      OR (NOT "Development.Embed" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
+        AND ${_PYTHON_PREFIX}_Development.Module_FOUND))
+    unset (_${_PYTHON_PREFIX}_Development_REASON_FAILURE)
+  endif()
+
+  if ("Development" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
+      AND ${_PYTHON_PREFIX}_Development.Module_FOUND
+      AND ${_PYTHON_PREFIX}_Development.Embed_FOUND)
+    set (${_PYTHON_PREFIX}_Development_FOUND TRUE)
+  endif()
+
+  if ((${_PYTHON_PREFIX}_Development.Module_FOUND
+      OR ${_PYTHON_PREFIX}_Development.Embed_FOUND)
+    AND EXISTS "${_${_PYTHON_PREFIX}_INCLUDE_DIR}/PyPy.h")
+  # retrieve PyPy version
+  file (STRINGS "${_${_PYTHON_PREFIX}_INCLUDE_DIR}/patchlevel.h" ${_PYTHON_PREFIX}_PyPy_VERSION
+                REGEX "^#define[ \t]+PYPY_VERSION[ \t]+\"[^\"]+\"")
+  string (REGEX REPLACE "^#define[ \t]+PYPY_VERSION[ \t]+\"([^\"]+)\".*" "\\1"
+                ${_PYTHON_PREFIX}_PyPy_VERSION "${${_PYTHON_PREFIX}_PyPy_VERSION}")
+  endif()
+
+  unset(${_PYTHON_PREFIX}_LINK_OPTIONS)
+  if (${_PYTHON_PREFIX}_Development.Embed_FOUND AND APPLE
+      AND ${_PYTHON_PREFIX}_LIBRARY_RELEASE MATCHES "${CMAKE_SHARED_LIBRARY_SUFFIX}$")
+    # rpath must be specified if python is part of a framework
+    unset(_${_PYTHON_PREFIX}_is_prefix)
+    foreach (_${_PYTHON_PREFIX}_implementation IN LISTS _${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS)
+      foreach (_${_PYTHON_PREFIX}_framework IN LISTS _${_PYTHON_PREFIX}_${_${_PYTHON_PREFIX}_implementation}_FRAMEWORKS)
+        cmake_path (IS_PREFIX _${_PYTHON_PREFIX}_framework "${${_PYTHON_PREFIX}_LIBRARY_RELEASE}" _${_PYTHON_PREFIX}_is_prefix)
+        if (_${_PYTHON_PREFIX}_is_prefix)
+          cmake_path (GET _${_PYTHON_PREFIX}_framework PARENT_PATH _${_PYTHON_PREFIX}_framework)
+          set (${_PYTHON_PREFIX}_LINK_OPTIONS "LINKER:-rpath,${_${_PYTHON_PREFIX}_framework}")
+          break()
+        endif()
+      endforeach()
+      if (_${_PYTHON_PREFIX}_is_prefix)
+        break()
+      endif()
+    endforeach()
+    unset(_${_PYTHON_PREFIX}_implementation)
+    unset(_${_PYTHON_PREFIX}_framework)
+    unset(_${_PYTHON_PREFIX}_is_prefix)
+  endif()
+
+  if (NOT DEFINED ${_PYTHON_PREFIX}_SOABI)
+    _python_get_config_var (${_PYTHON_PREFIX}_SOABI SOABI)
+  endif()
+
+  _python_compute_development_signature (Module)
+  _python_compute_development_signature (Embed)
+
+  # Restore the original find library ordering
+  if (DEFINED _${_PYTHON_PREFIX}_CMAKE_FIND_LIBRARY_SUFFIXES)
+    set (CMAKE_FIND_LIBRARY_SUFFIXES ${_${_PYTHON_PREFIX}_CMAKE_FIND_LIBRARY_SUFFIXES})
+  endif()
+
+  if (${_PYTHON_PREFIX}_ARTIFACTS_INTERACTIVE)
+    if ("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
+      set (${_PYTHON_PREFIX}_LIBRARY "${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}" CACHE FILEPATH "${_PYTHON_PREFIX} Library")
+    endif()
+    if ("INCLUDE_DIR" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS)
+      set (${_PYTHON_PREFIX}_INCLUDE_DIR "${_${_PYTHON_PREFIX}_INCLUDE_DIR}" CACHE FILEPATH "${_PYTHON_PREFIX} Include Directory")
+    endif()
+  endif()
+
+  _python_mark_as_internal (_${_PYTHON_PREFIX}_LIBRARY_RELEASE
+                            _${_PYTHON_PREFIX}_LIBRARY_DEBUG
+                            _${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE
+                            _${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG
+                            _${_PYTHON_PREFIX}_INCLUDE_DIR
+                            _${_PYTHON_PREFIX}_CONFIG
+                            _${_PYTHON_PREFIX}_DEVELOPMENT_MODULE_SIGNATURE
+                            _${_PYTHON_PREFIX}_DEVELOPMENT_EMBED_SIGNATURE)
+endif()
+
+if (${_PYTHON_PREFIX}_FIND_REQUIRED_NumPy)
+  list (APPEND _${_PYTHON_PREFIX}_REQUIRED_VARS ${_PYTHON_PREFIX}_NumPy_INCLUDE_DIRS)
+endif()
+if ("NumPy" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS AND ${_PYTHON_PREFIX}_Interpreter_FOUND)
+  list (APPEND _${_PYTHON_PREFIX}_CACHED_VARS _${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR)
+
+  if (DEFINED ${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR
+      AND IS_ABSOLUTE "${${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR}")
+    set (_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR "${${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR}" CACHE INTERNAL "")
+  elseif (DEFINED _${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR)
+    # compute numpy signature. Depends on interpreter and development signatures
+    string (MD5 __${_PYTHON_PREFIX}_NUMPY_SIGNATURE "${_${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE}:${_${_PYTHON_PREFIX}_DEVELOPMENT_MODULE_SIGNATURE}:${_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR}")
+    if (NOT __${_PYTHON_PREFIX}_NUMPY_SIGNATURE STREQUAL _${_PYTHON_PREFIX}_NUMPY_SIGNATURE
+        OR NOT EXISTS "${_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR}")
+      unset (_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR CACHE)
+      unset (_${_PYTHON_PREFIX}_NUMPY_SIGNATURE CACHE)
+    endif()
+  endif()
+
+  if (NOT _${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR)
+    execute_process(COMMAND ${${_PYTHON_PREFIX}_INTERPRETER_LAUNCHER} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
+                            "import sys\ntry: import numpy; sys.stdout.write(numpy.get_include())\nexcept:pass\n"
+                    RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
+                    OUTPUT_VARIABLE _${_PYTHON_PREFIX}_NumPy_PATH
+                    ERROR_QUIET
+                    OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+    if (NOT _${_PYTHON_PREFIX}_RESULT)
+      find_path (_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR
+                 NAMES "numpy/arrayobject.h" "numpy/numpyconfig.h"
+                 HINTS "${_${_PYTHON_PREFIX}_NumPy_PATH}"
+                 NO_DEFAULT_PATH)
+    endif()
+  endif()
+
+  set (${_PYTHON_PREFIX}_NumPy_INCLUDE_DIRS "${_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR}")
+
+  if(_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR AND NOT EXISTS "${_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR}")
+    set (_${_PYTHON_PREFIX}_NumPy_REASON_FAILURE "Cannot find the directory \"${_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR}\"")
+    set_property (CACHE _${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR PROPERTY VALUE "${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR-NOTFOUND")
+  endif()
+
+  if (_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR)
+    execute_process (COMMAND ${${_PYTHON_PREFIX}_INTERPRETER_LAUNCHER} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
+                             "import sys\ntry: import numpy; sys.stdout.write(numpy.__version__)\nexcept:pass\n"
+                     RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
+                     OUTPUT_VARIABLE _${_PYTHON_PREFIX}_NumPy_VERSION)
+    if (NOT _${_PYTHON_PREFIX}_RESULT)
+      set (${_PYTHON_PREFIX}_NumPy_VERSION "${_${_PYTHON_PREFIX}_NumPy_VERSION}")
+    else()
+      unset (${_PYTHON_PREFIX}_NumPy_VERSION)
+    endif()
+
+    # final step: set NumPy founded only if Development.Module component is founded as well
+    set(${_PYTHON_PREFIX}_NumPy_FOUND ${${_PYTHON_PREFIX}_Development.Module_FOUND})
+  else()
+    set (${_PYTHON_PREFIX}_NumPy_FOUND FALSE)
+  endif()
+
+  if (${_PYTHON_PREFIX}_NumPy_FOUND)
+    unset (_${_PYTHON_PREFIX}_NumPy_REASON_FAILURE)
+
+    # compute and save numpy signature
+    string (MD5 __${_PYTHON_PREFIX}_NUMPY_SIGNATURE "${_${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE}:${_${_PYTHON_PREFIX}_DEVELOPMENT_MODULE_SIGNATURE}:${${_PYTHON_PREFIX}_NumPyINCLUDE_DIR}")
+    set (_${_PYTHON_PREFIX}_NUMPY_SIGNATURE "${__${_PYTHON_PREFIX}_NUMPY_SIGNATURE}" CACHE INTERNAL "")
+  else()
+    unset (_${_PYTHON_PREFIX}_NUMPY_SIGNATURE CACHE)
+  endif()
+
+  if (${_PYTHON_PREFIX}_ARTIFACTS_INTERACTIVE)
+    set (${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR "${_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR}" CACHE FILEPATH "${_PYTHON_PREFIX} NumPy Include Directory")
+  endif()
+
+  _python_mark_as_internal (_${_PYTHON_PREFIX}_NumPy_INCLUDE_DIR
+                            _${_PYTHON_PREFIX}_NUMPY_SIGNATURE)
+endif()
+
+# final validation
+if (${_PYTHON_PREFIX}_VERSION_MAJOR AND
+    NOT ${_PYTHON_PREFIX}_VERSION_MAJOR VERSION_EQUAL _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR)
+  _python_display_failure ("Could NOT find ${_PYTHON_PREFIX}: Found unsuitable major version \"${${_PYTHON_PREFIX}_VERSION_MAJOR}\", but required major version is exact version \"${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR}\"")
+
+  cmake_policy(POP)
+  return()
+endif()
+
+unset (_${_PYTHON_PREFIX}_REASON_FAILURE)
+foreach (_${_PYTHON_PREFIX}_COMPONENT IN ITEMS Interpreter Compiler Development NumPy)
+  if (_${_PYTHON_PREFIX}_${_${_PYTHON_PREFIX}_COMPONENT}_REASON_FAILURE)
+    string (APPEND _${_PYTHON_PREFIX}_REASON_FAILURE "\n        ${_${_PYTHON_PREFIX}_COMPONENT}: ${_${_PYTHON_PREFIX}_${_${_PYTHON_PREFIX}_COMPONENT}_REASON_FAILURE}")
+    unset (_${_PYTHON_PREFIX}_${_${_PYTHON_PREFIX}_COMPONENT}_REASON_FAILURE)
+  endif()
+endforeach()
+
+find_package_handle_standard_args (${_PYTHON_PREFIX}
+                                   REQUIRED_VARS ${_${_PYTHON_PREFIX}_REQUIRED_VARS}
+                                   VERSION_VAR ${_PYTHON_PREFIX}_VERSION
+                                   HANDLE_VERSION_RANGE
+                                   HANDLE_COMPONENTS
+                                   REASON_FAILURE_MESSAGE "${_${_PYTHON_PREFIX}_REASON_FAILURE}")
+
+# Create imported targets and helper functions
+if(_${_PYTHON_PREFIX}_CMAKE_ROLE STREQUAL "PROJECT")
+  if ("Interpreter" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
+      AND ${_PYTHON_PREFIX}_Interpreter_FOUND
+      AND NOT TARGET ${_PYTHON_PREFIX}::Interpreter)
+    add_executable (${_PYTHON_PREFIX}::Interpreter IMPORTED)
+    set_property (TARGET ${_PYTHON_PREFIX}::Interpreter
+                  PROPERTY IMPORTED_LOCATION "${${_PYTHON_PREFIX}_EXECUTABLE}")
+  endif()
+
+  if ("Compiler" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
+      AND ${_PYTHON_PREFIX}_Compiler_FOUND
+      AND NOT TARGET ${_PYTHON_PREFIX}::Compiler)
+    add_executable (${_PYTHON_PREFIX}::Compiler IMPORTED)
+    set_property (TARGET ${_PYTHON_PREFIX}::Compiler
+                  PROPERTY IMPORTED_LOCATION "${${_PYTHON_PREFIX}_COMPILER}")
+  endif()
+
+  if (("Development.Module" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
+        AND ${_PYTHON_PREFIX}_Development.Module_FOUND)
+      OR ("Development.Embed" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
+        AND ${_PYTHON_PREFIX}_Development.Embed_FOUND))
+
+    macro (__PYTHON_IMPORT_LIBRARY __name)
+      if (${_PYTHON_PREFIX}_LIBRARY_RELEASE MATCHES "${CMAKE_SHARED_LIBRARY_SUFFIX}$"
+          OR ${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE)
+        set (_${_PYTHON_PREFIX}_LIBRARY_TYPE SHARED)
+      else()
+        set (_${_PYTHON_PREFIX}_LIBRARY_TYPE STATIC)
+      endif()
+
+      if (NOT TARGET ${__name})
+        add_library (${__name} ${_${_PYTHON_PREFIX}_LIBRARY_TYPE} IMPORTED)
+      endif()
+
+      set_property (TARGET ${__name}
+                    PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${${_PYTHON_PREFIX}_INCLUDE_DIRS}")
+
+      if (${_PYTHON_PREFIX}_LIBRARY_RELEASE AND ${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE)
+        # System manage shared libraries in two parts: import and runtime
+        if (${_PYTHON_PREFIX}_LIBRARY_RELEASE AND ${_PYTHON_PREFIX}_LIBRARY_DEBUG)
+          set_property (TARGET ${__name} PROPERTY IMPORTED_CONFIGURATIONS RELEASE DEBUG)
+          set_target_properties (${__name}
+                                 PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
+                                            IMPORTED_IMPLIB_RELEASE "${${_PYTHON_PREFIX}_LIBRARY_RELEASE}"
+                                            IMPORTED_LOCATION_RELEASE "${${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE}")
+          set_target_properties (${__name}
+                                 PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
+                                            IMPORTED_IMPLIB_DEBUG "${${_PYTHON_PREFIX}_LIBRARY_DEBUG}"
+                                            IMPORTED_LOCATION_DEBUG "${${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG}")
+        else()
+          set_target_properties (${__name}
+                                 PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+                                            IMPORTED_IMPLIB "${${_PYTHON_PREFIX}_LIBRARIES}"
+                                            IMPORTED_LOCATION "${${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE}")
+        endif()
+      else()
+        if (${_PYTHON_PREFIX}_LIBRARY_RELEASE AND ${_PYTHON_PREFIX}_LIBRARY_DEBUG)
+          set_property (TARGET ${__name} PROPERTY IMPORTED_CONFIGURATIONS RELEASE DEBUG)
+          set_target_properties (${__name}
+                                 PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
+                                            IMPORTED_LOCATION_RELEASE "${${_PYTHON_PREFIX}_LIBRARY_RELEASE}")
+          set_target_properties (${__name}
+                                 PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
+                                            IMPORTED_LOCATION_DEBUG "${${_PYTHON_PREFIX}_LIBRARY_DEBUG}")
+        else()
+          set_target_properties (${__name}
+                                 PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+                                            IMPORTED_LOCATION "${${_PYTHON_PREFIX}_LIBRARY_RELEASE}")
+        endif()
+      endif()
+
+      if (_${_PYTHON_PREFIX}_LIBRARY_TYPE STREQUAL "STATIC")
+        # extend link information with dependent libraries
+        _python_get_config_var (_${_PYTHON_PREFIX}_LINK_LIBRARIES LIBS)
+        if (_${_PYTHON_PREFIX}_LINK_LIBRARIES)
+          set_property (TARGET ${__name}
+                        PROPERTY INTERFACE_LINK_LIBRARIES ${_${_PYTHON_PREFIX}_LINK_LIBRARIES})
+        endif()
+      endif()
+
+      if (${_PYTHON_PREFIX}_LINK_OPTIONS
+          AND _${_PYTHON_PREFIX}_LIBRARY_TYPE STREQUAL "SHARED")
+        set_property (TARGET ${__name} PROPERTY INTERFACE_LINK_OPTIONS "${${_PYTHON_PREFIX}_LINK_OPTIONS}")
+      endif()
+    endmacro()
+
+    if (${_PYTHON_PREFIX}_Development.Embed_FOUND)
+      __python_import_library (${_PYTHON_PREFIX}::Python)
+    endif()
+
+    if (${_PYTHON_PREFIX}_Development.Module_FOUND)
+      if ("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_MODULE_ARTIFACTS)
+        # On Windows/CYGWIN/MSYS, Python::Module is the same as Python::Python
+        # but ALIAS cannot be used because the imported library is not GLOBAL.
+        __python_import_library (${_PYTHON_PREFIX}::Module)
+      else()
+        if (NOT TARGET ${_PYTHON_PREFIX}::Module)
+          add_library (${_PYTHON_PREFIX}::Module INTERFACE IMPORTED)
+        endif()
+        set_property (TARGET ${_PYTHON_PREFIX}::Module
+                      PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${${_PYTHON_PREFIX}_INCLUDE_DIRS}")
+
+        # When available, enforce shared library generation with undefined symbols
+        if (APPLE)
+          set_property (TARGET ${_PYTHON_PREFIX}::Module
+                        PROPERTY INTERFACE_LINK_OPTIONS "LINKER:-undefined,dynamic_lookup")
+        endif()
+        if (CMAKE_SYSTEM_NAME STREQUAL "SunOS")
+          set_property (TARGET ${_PYTHON_PREFIX}::Module
+                        PROPERTY INTERFACE_LINK_OPTIONS "LINKER:-z,nodefs")
+        endif()
+        if (CMAKE_SYSTEM_NAME STREQUAL "AIX")
+          set_property (TARGET ${_PYTHON_PREFIX}::Module
+                        PROPERTY INTERFACE_LINK_OPTIONS "LINKER:-b,erok")
+        endif()
+      endif()
+    endif()
+
+    #
+    # PYTHON_ADD_LIBRARY (<name> [STATIC|SHARED|MODULE] src1 src2 ... srcN)
+    # It is used to build modules for python.
+    #
+    function (__${_PYTHON_PREFIX}_ADD_LIBRARY prefix name)
+      cmake_parse_arguments (PARSE_ARGV 2 PYTHON_ADD_LIBRARY "STATIC;SHARED;MODULE;WITH_SOABI" "" "")
+
+      if (PYTHON_ADD_LIBRARY_STATIC)
+        set (type STATIC)
+      elseif (PYTHON_ADD_LIBRARY_SHARED)
+        set (type SHARED)
+      else()
+        set (type MODULE)
+      endif()
+
+      if (type STREQUAL "MODULE" AND NOT TARGET ${prefix}::Module)
+        message (SEND_ERROR "${prefix}_ADD_LIBRARY: dependent target '${prefix}::Module' is not defined.\n   Did you miss to request COMPONENT 'Development.Module'?")
+        return()
+      endif()
+      if (NOT type STREQUAL "MODULE" AND NOT TARGET ${prefix}::Python)
+        message (SEND_ERROR "${prefix}_ADD_LIBRARY: dependent target '${prefix}::Python' is not defined.\n   Did you miss to request COMPONENT 'Development.Embed'?")
+        return()
+      endif()
+
+      add_library (${name} ${type} ${PYTHON_ADD_LIBRARY_UNPARSED_ARGUMENTS})
+
+      get_property (type TARGET ${name} PROPERTY TYPE)
+
+      if (type STREQUAL "MODULE_LIBRARY")
+        target_link_libraries (${name} PRIVATE ${prefix}::Module)
+        # customize library name to follow module name rules
+        set_property (TARGET ${name} PROPERTY PREFIX "")
+        if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
+          set_property (TARGET ${name} PROPERTY SUFFIX ".pyd")
+        endif()
+
+        if (PYTHON_ADD_LIBRARY_WITH_SOABI AND ${prefix}_SOABI)
+          get_property (suffix TARGET ${name} PROPERTY SUFFIX)
+          if (NOT suffix)
+            set (suffix "${CMAKE_SHARED_MODULE_SUFFIX}")
+          endif()
+          set_property (TARGET ${name} PROPERTY SUFFIX ".${${prefix}_SOABI}${suffix}")
+        endif()
+      else()
+        if (PYTHON_ADD_LIBRARY_WITH_SOABI)
+          message (AUTHOR_WARNING "Find${prefix}: Option `WITH_SOABI` is only supported for `MODULE` library type.")
+        endif()
+        target_link_libraries (${name} PRIVATE ${prefix}::Python)
+      endif()
+    endfunction()
+  endif()
+
+  if ("NumPy" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS AND ${_PYTHON_PREFIX}_NumPy_FOUND
+      AND NOT TARGET ${_PYTHON_PREFIX}::NumPy AND TARGET ${_PYTHON_PREFIX}::Module)
+    add_library (${_PYTHON_PREFIX}::NumPy INTERFACE IMPORTED)
+    set_property (TARGET ${_PYTHON_PREFIX}::NumPy
+                  PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${${_PYTHON_PREFIX}_NumPy_INCLUDE_DIRS}")
+    target_link_libraries (${_PYTHON_PREFIX}::NumPy INTERFACE ${_PYTHON_PREFIX}::Module)
+  endif()
+endif()
+
+# final clean-up
+
+# Restore CMAKE_FIND_APPBUNDLE
+if (DEFINED _${_PYTHON_PREFIX}_CMAKE_FIND_APPBUNDLE)
+  set (CMAKE_FIND_APPBUNDLE ${_${_PYTHON_PREFIX}_CMAKE_FIND_APPBUNDLE})
+  unset (_${_PYTHON_PREFIX}_CMAKE_FIND_APPBUNDLE)
+else()
+  unset (CMAKE_FIND_APPBUNDLE)
+endif()
+# Restore CMAKE_FIND_FRAMEWORK
+if (DEFINED _${_PYTHON_PREFIX}_CMAKE_FIND_FRAMEWORK)
+  set (CMAKE_FIND_FRAMEWORK ${_${_PYTHON_PREFIX}_CMAKE_FIND_FRAMEWORK})
+  unset (_${_PYTHON_PREFIX}_CMAKE_FIND_FRAMEWORK)
+else()
+  unset (CMAKE_FIND_FRAMEWORK)
+endif()
+
+cmake_policy(POP)
diff --git a/share/cmake-3.22/Modules/FindPython2.cmake b/share/cmake-3.22/Modules/FindPython2.cmake
new file mode 100644
index 0000000..0888fad
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindPython2.cmake
@@ -0,0 +1,435 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindPython2
+-----------
+
+.. versionadded:: 3.12
+
+Find Python 2 interpreter, compiler and development environment (include
+directories and libraries).
+
+.. versionadded:: 3.19
+  When a version is requested, it can be specified as a simple value or as a
+  range. For a detailed description of version range usage and capabilities,
+  refer to the :command:`find_package` command.
+
+The following components are supported:
+
+* ``Interpreter``: search for Python 2 interpreter
+* ``Compiler``: search for Python 2 compiler. Only offered by IronPython.
+* ``Development``: search for development artifacts (include directories and
+  libraries).
+
+  .. versionadded:: 3.18
+    This component includes two sub-components which can be specified
+    independently:
+
+    * ``Development.Module``: search for artifacts for Python 2 module
+      developments.
+    * ``Development.Embed``: search for artifacts for Python 2 embedding
+      developments.
+
+* ``NumPy``: search for NumPy include directories.
+
+.. versionadded:: 3.14
+  Added the ``NumPy`` component.
+
+If no ``COMPONENTS`` are specified, ``Interpreter`` is assumed.
+
+If component ``Development`` is specified, it implies sub-components
+``Development.Module`` and ``Development.Embed``.
+
+To ensure consistent versions between components ``Interpreter``, ``Compiler``,
+``Development`` (or one of its sub-components) and ``NumPy``, specify all
+components at the same time::
+
+  find_package (Python2 COMPONENTS Interpreter Development)
+
+This module looks only for version 2 of Python. This module can be used
+concurrently with :module:`FindPython3` module to use both Python versions.
+
+The :module:`FindPython` module can be used if Python version does not matter
+for you.
+
+.. note::
+
+  If components ``Interpreter`` and ``Development`` (or one of its
+  sub-components) are both specified, this module search only for interpreter
+  with same platform architecture as the one defined by ``CMake``
+  configuration. This constraint does not apply if only ``Interpreter``
+  component is specified.
+
+Imported Targets
+^^^^^^^^^^^^^^^^
+
+This module defines the following :ref:`Imported Targets <Imported Targets>`:
+
+.. versionchanged:: 3.14
+  :ref:`Imported Targets <Imported Targets>` are only created when
+  :prop_gbl:`CMAKE_ROLE` is ``PROJECT``.
+
+``Python2::Interpreter``
+  Python 2 interpreter. Target defined if component ``Interpreter`` is found.
+``Python2::Compiler``
+  Python 2 compiler. Target defined if component ``Compiler`` is found.
+``Python2::Module``
+  .. versionadded:: 3.15
+
+  Python 2 library for Python module. Target defined if component
+  ``Development.Module`` is found.
+
+``Python2::Python``
+  Python 2 library for Python embedding. Target defined if component
+  ``Development.Embed`` is found.
+
+``Python2::NumPy``
+  .. versionadded:: 3.14
+
+  NumPy library for Python 2. Target defined if component ``NumPy`` is found.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This module will set the following variables in your project
+(see :ref:`Standard Variable Names <CMake Developer Standard Variable Names>`):
+
+``Python2_FOUND``
+  System has the Python 2 requested components.
+``Python2_Interpreter_FOUND``
+  System has the Python 2 interpreter.
+``Python2_EXECUTABLE``
+  Path to the Python 2 interpreter.
+``Python2_INTERPRETER_ID``
+  A short string unique to the interpreter. Possible values include:
+    * Python
+    * ActivePython
+    * Anaconda
+    * Canopy
+    * IronPython
+    * PyPy
+``Python2_STDLIB``
+  Standard platform independent installation directory.
+
+  Information returned by
+  ``distutils.sysconfig.get_python_lib(plat_specific=False,standard_lib=True)``
+  or else ``sysconfig.get_path('stdlib')``.
+``Python2_STDARCH``
+  Standard platform dependent installation directory.
+
+  Information returned by
+  ``distutils.sysconfig.get_python_lib(plat_specific=True,standard_lib=True)``
+  or else ``sysconfig.get_path('platstdlib')``.
+``Python2_SITELIB``
+  Third-party platform independent installation directory.
+
+  Information returned by
+  ``distutils.sysconfig.get_python_lib(plat_specific=False,standard_lib=False)``
+  or else ``sysconfig.get_path('purelib')``.
+``Python2_SITEARCH``
+  Third-party platform dependent installation directory.
+
+  Information returned by
+  ``distutils.sysconfig.get_python_lib(plat_specific=True,standard_lib=False)``
+  or else ``sysconfig.get_path('platlib')``.
+``Python2_Compiler_FOUND``
+  System has the Python 2 compiler.
+``Python2_COMPILER``
+  Path to the Python 2 compiler. Only offered by IronPython.
+``Python2_COMPILER_ID``
+  A short string unique to the compiler. Possible values include:
+    * IronPython
+
+``Python2_DOTNET_LAUNCHER``
+  .. versionadded:: 3.18
+
+  The ``.Net`` interpreter. Only used by ``IronPython`` implementation.
+
+``Python2_Development_FOUND``
+  System has the Python 2 development artifacts.
+
+``Python2_Development.Module_FOUND``
+  .. versionadded:: 3.18
+
+  System has the Python 2 development artifacts for Python module.
+
+``Python2_Development.Embed_FOUND``
+  .. versionadded:: 3.18
+
+  System has the Python 2 development artifacts for Python embedding.
+
+``Python2_INCLUDE_DIRS``
+  The Python 2 include directories.
+
+``Python2_LINK_OPTIONS``
+  .. versionadded:: 3.19
+
+  The Python 2 link options. Some configurations require specific link options
+  for a correct build and execution.
+
+``Python2_LIBRARIES``
+  The Python 2 libraries.
+``Python2_LIBRARY_DIRS``
+  The Python 2 library directories.
+``Python2_RUNTIME_LIBRARY_DIRS``
+  The Python 2 runtime library directories.
+``Python2_VERSION``
+  Python 2 version.
+``Python2_VERSION_MAJOR``
+  Python 2 major version.
+``Python2_VERSION_MINOR``
+  Python 2 minor version.
+``Python2_VERSION_PATCH``
+  Python 2 patch version.
+
+``Python2_PyPy_VERSION``
+  .. versionadded:: 3.18
+
+  Python 2 PyPy version.
+
+``Python2_NumPy_FOUND``
+  .. versionadded:: 3.14
+
+  System has the NumPy.
+
+``Python2_NumPy_INCLUDE_DIRS``
+  .. versionadded:: 3.14
+
+  The NumPy include directories.
+
+``Python2_NumPy_VERSION``
+  .. versionadded:: 3.14
+
+  The NumPy version.
+
+Hints
+^^^^^
+
+``Python2_ROOT_DIR``
+  Define the root directory of a Python 2 installation.
+
+``Python2_USE_STATIC_LIBS``
+  * If not defined, search for shared libraries and static libraries in that
+    order.
+  * If set to TRUE, search **only** for static libraries.
+  * If set to FALSE, search **only** for shared libraries.
+
+  .. note::
+
+    This hint will be ignored on ``Windows`` because static libraries are not
+    available on this platform.
+
+``Python2_FIND_STRATEGY``
+  .. versionadded:: 3.15
+
+  This variable defines how lookup will be done.
+  The ``Python2_FIND_STRATEGY`` variable can be set to one of the following:
+
+  * ``VERSION``: Try to find the most recent version in all specified
+    locations.
+    This is the default if policy :policy:`CMP0094` is undefined or set to
+    ``OLD``.
+  * ``LOCATION``: Stops lookup as soon as a version satisfying version
+    constraints is founded.
+    This is the default if policy :policy:`CMP0094` is set to ``NEW``.
+
+``Python2_FIND_REGISTRY``
+  .. versionadded:: 3.13
+
+  On Windows the ``Python2_FIND_REGISTRY`` variable determine the order
+  of preference between registry and environment variables.
+  the ``Python2_FIND_REGISTRY`` variable can be set to one of the following:
+
+  * ``FIRST``: Try to use registry before environment variables.
+    This is the default.
+  * ``LAST``: Try to use registry after environment variables.
+  * ``NEVER``: Never try to use registry.
+
+``Python2_FIND_FRAMEWORK``
+  .. versionadded:: 3.15
+
+  On macOS the ``Python2_FIND_FRAMEWORK`` variable determine the order of
+  preference between Apple-style and unix-style package components.
+  This variable can take same values as :variable:`CMAKE_FIND_FRAMEWORK`
+  variable.
+
+  .. note::
+
+    Value ``ONLY`` is not supported so ``FIRST`` will be used instead.
+
+  If ``Python2_FIND_FRAMEWORK`` is not defined, :variable:`CMAKE_FIND_FRAMEWORK`
+  variable will be used, if any.
+
+``Python2_FIND_VIRTUALENV``
+  .. versionadded:: 3.15
+
+  This variable defines the handling of virtual environments managed by
+  ``virtualenv`` or ``conda``. It is meaningful only when a virtual environment
+  is active (i.e. the ``activate`` script has been evaluated). In this case, it
+  takes precedence over ``Python2_FIND_REGISTRY`` and ``CMAKE_FIND_FRAMEWORK``
+  variables.  The ``Python2_FIND_VIRTUALENV`` variable can be set to one of the
+  following:
+
+  * ``FIRST``: The virtual environment is used before any other standard
+    paths to look-up for the interpreter. This is the default.
+  * ``ONLY``: Only the virtual environment is used to look-up for the
+    interpreter.
+  * ``STANDARD``: The virtual environment is not used to look-up for the
+    interpreter but environment variable ``PATH`` is always considered.
+    In this case, variable ``Python2_FIND_REGISTRY`` (Windows) or
+    ``CMAKE_FIND_FRAMEWORK`` (macOS) can be set with value ``LAST`` or
+    ``NEVER`` to select preferably the interpreter from the virtual
+    environment.
+
+  .. versionadded:: 3.17
+    Added support for ``conda`` environments.
+
+  .. note::
+
+    If the component ``Development`` is requested, it is **strongly**
+    recommended to also include the component ``Interpreter`` to get expected
+    result.
+
+``Python2_FIND_IMPLEMENTATIONS``
+  .. versionadded:: 3.18
+
+  This variable defines, in an ordered list, the different implementations
+  which will be searched. The ``Python2_FIND_IMPLEMENTATIONS`` variable can
+  hold the following values:
+
+  * ``CPython``: this is the standard implementation. Various products, like
+    ``Anaconda`` or ``ActivePython``, rely on this implementation.
+  * ``IronPython``: This implementation use the ``CSharp`` language for
+    ``.NET Framework`` on top of the `Dynamic Language Runtime` (``DLR``).
+    See `IronPython <http://ironpython.net>`_.
+  * ``PyPy``: This implementation use ``RPython`` language and
+    ``RPython translation toolchain`` to produce the python interpreter.
+    See `PyPy <https://www.pypy.org>`_.
+
+  The default value is:
+
+  * Windows platform: ``CPython``, ``IronPython``
+  * Other platforms: ``CPython``
+
+  .. note::
+
+    This hint has the lowest priority of all hints, so even if, for example,
+    you specify ``IronPython`` first and ``CPython`` in second, a python
+    product based on ``CPython`` can be selected because, for example with
+    ``Python2_FIND_STRATEGY=LOCATION``, each location will be search first for
+    ``IronPython`` and second for ``CPython``.
+
+  .. note::
+
+    When ``IronPython`` is specified, on platforms other than ``Windows``, the
+    ``.Net`` interpreter (i.e. ``mono`` command) is expected to be available
+    through the ``PATH`` variable.
+
+``Python2_FIND_UNVERSIONED_NAMES``
+  .. versionadded:: 3.20
+
+  This variable defines how the generic names will be searched. Currently, it
+  only applies to the generic names of the interpreter, namely, ``python2`` and
+  ``python``.
+  The ``Python2_FIND_UNVERSIONED_NAMES`` variable can be set to one of the
+  following values:
+
+  * ``FIRST``: The generic names are searched before the more specialized ones
+    (such as ``python2.5`` for example).
+  * ``LAST``: The generic names are searched after the more specialized ones.
+    This is the default.
+  * ``NEVER``: The generic name are not searched at all.
+
+Artifacts Specification
+^^^^^^^^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.16
+
+To solve special cases, it is possible to specify directly the artifacts by
+setting the following variables:
+
+``Python2_EXECUTABLE``
+  The path to the interpreter.
+
+``Python2_COMPILER``
+  The path to the compiler.
+
+``Python2_DOTNET_LAUNCHER``
+  .. versionadded:: 3.18
+
+  The ``.Net`` interpreter. Only used by ``IronPython`` implementation.
+
+``Python2_LIBRARY``
+  The path to the library. It will be used to compute the
+  variables ``Python2_LIBRARIES``, ``Python2_LIBRARY_DIRS`` and
+  ``Python2_RUNTIME_LIBRARY_DIRS``.
+
+``Python2_INCLUDE_DIR``
+  The path to the directory of the ``Python`` headers. It will be used to
+  compute the variable ``Python2_INCLUDE_DIRS``.
+
+``Python2_NumPy_INCLUDE_DIR``
+  The path to the directory of the ``NumPy`` headers. It will be used to
+  compute the variable ``Python2_NumPy_INCLUDE_DIRS``.
+
+.. note::
+
+  All paths must be absolute. Any artifact specified with a relative path
+  will be ignored.
+
+.. note::
+
+  When an artifact is specified, all ``HINTS`` will be ignored and no search
+  will be performed for this artifact.
+
+  If more than one artifact is specified, it is the user's responsibility to
+  ensure the consistency of the various artifacts.
+
+By default, this module supports multiple calls in different directories of a
+project with different version/component requirements while providing correct
+and consistent results for each call. To support this behavior, ``CMake`` cache
+is not used in the traditional way which can be problematic for interactive
+specification. So, to enable also interactive specification, module behavior
+can be controlled with the following variable:
+
+``Python2_ARTIFACTS_INTERACTIVE``
+  .. versionadded:: 3.18
+
+  Selects the behavior of the module. This is a boolean variable:
+
+  * If set to ``TRUE``: Create CMake cache entries for the above artifact
+    specification variables so that users can edit them interactively.
+    This disables support for multiple version/component requirements.
+  * If set to ``FALSE`` or undefined: Enable multiple version/component
+    requirements.
+
+Commands
+^^^^^^^^
+
+This module defines the command ``Python2_add_library`` (when
+:prop_gbl:`CMAKE_ROLE` is ``PROJECT``), which has the same semantics as
+:command:`add_library` and adds a dependency to target ``Python2::Python`` or,
+when library type is ``MODULE``, to target ``Python2::Module`` and takes care
+of Python module naming rules::
+
+  Python2_add_library (<name> [STATIC | SHARED | MODULE]
+                       <source1> [<source2> ...])
+
+If library type is not specified, ``MODULE`` is assumed.
+#]=======================================================================]
+
+
+set (_PYTHON_PREFIX Python2)
+
+set (_Python2_REQUIRED_VERSION_MAJOR 2)
+
+include (${CMAKE_CURRENT_LIST_DIR}/FindPython/Support.cmake)
+
+if (COMMAND __Python2_add_library)
+  macro (Python2_add_library)
+    __Python2_add_library (Python2 ${ARGV})
+  endmacro()
+endif()
+
+unset (_PYTHON_PREFIX)
diff --git a/share/cmake-3.22/Modules/FindPython3.cmake b/share/cmake-3.22/Modules/FindPython3.cmake
new file mode 100644
index 0000000..145c95e
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindPython3.cmake
@@ -0,0 +1,498 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindPython3
+-----------
+
+.. versionadded:: 3.12
+
+Find Python 3 interpreter, compiler and development environment (include
+directories and libraries).
+
+.. versionadded:: 3.19
+  When a version is requested, it can be specified as a simple value or as a
+  range. For a detailed description of version range usage and capabilities,
+  refer to the :command:`find_package` command.
+
+The following components are supported:
+
+* ``Interpreter``: search for Python 3 interpreter
+* ``Compiler``: search for Python 3 compiler. Only offered by IronPython.
+* ``Development``: search for development artifacts (include directories and
+  libraries).
+
+  .. versionadded:: 3.18
+    This component includes two sub-components which can be specified
+    independently:
+
+    * ``Development.Module``: search for artifacts for Python 3 module
+      developments.
+    * ``Development.Embed``: search for artifacts for Python 3 embedding
+      developments.
+
+* ``NumPy``: search for NumPy include directories.
+
+.. versionadded:: 3.14
+  Added the ``NumPy`` component.
+
+If no ``COMPONENTS`` are specified, ``Interpreter`` is assumed.
+
+If component ``Development`` is specified, it implies sub-components
+``Development.Module`` and ``Development.Embed``.
+
+To ensure consistent versions between components ``Interpreter``, ``Compiler``,
+``Development`` (or one of its sub-components) and ``NumPy``, specify all
+components at the same time::
+
+  find_package (Python3 COMPONENTS Interpreter Development)
+
+This module looks only for version 3 of Python. This module can be used
+concurrently with :module:`FindPython2` module to use both Python versions.
+
+The :module:`FindPython` module can be used if Python version does not matter
+for you.
+
+.. note::
+
+  If components ``Interpreter`` and ``Development`` (or one of its
+  sub-components) are both specified, this module search only for interpreter
+  with same platform architecture as the one defined by ``CMake``
+  configuration. This constraint does not apply if only ``Interpreter``
+  component is specified.
+
+Imported Targets
+^^^^^^^^^^^^^^^^
+
+This module defines the following :ref:`Imported Targets <Imported Targets>`:
+
+.. versionchanged:: 3.14
+  :ref:`Imported Targets <Imported Targets>` are only created when
+  :prop_gbl:`CMAKE_ROLE` is ``PROJECT``.
+
+``Python3::Interpreter``
+  Python 3 interpreter. Target defined if component ``Interpreter`` is found.
+``Python3::Compiler``
+  Python 3 compiler. Target defined if component ``Compiler`` is found.
+
+``Python3::Module``
+  .. versionadded:: 3.15
+
+  Python 3 library for Python module. Target defined if component
+  ``Development.Module`` is found.
+
+``Python3::Python``
+  Python 3 library for Python embedding. Target defined if component
+  ``Development.Embed`` is found.
+
+``Python3::NumPy``
+  .. versionadded:: 3.14
+
+  NumPy library for Python 3. Target defined if component ``NumPy`` is found.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This module will set the following variables in your project
+(see :ref:`Standard Variable Names <CMake Developer Standard Variable Names>`):
+
+``Python3_FOUND``
+  System has the Python 3 requested components.
+``Python3_Interpreter_FOUND``
+  System has the Python 3 interpreter.
+``Python3_EXECUTABLE``
+  Path to the Python 3 interpreter.
+``Python3_INTERPRETER_ID``
+  A short string unique to the interpreter. Possible values include:
+    * Python
+    * ActivePython
+    * Anaconda
+    * Canopy
+    * IronPython
+    * PyPy
+``Python3_STDLIB``
+  Standard platform independent installation directory.
+
+  Information returned by
+  ``distutils.sysconfig.get_python_lib(plat_specific=False,standard_lib=True)``
+  or else ``sysconfig.get_path('stdlib')``.
+``Python3_STDARCH``
+  Standard platform dependent installation directory.
+
+  Information returned by
+  ``distutils.sysconfig.get_python_lib(plat_specific=True,standard_lib=True)``
+  or else ``sysconfig.get_path('platstdlib')``.
+``Python3_SITELIB``
+  Third-party platform independent installation directory.
+
+  Information returned by
+  ``distutils.sysconfig.get_python_lib(plat_specific=False,standard_lib=False)``
+  or else ``sysconfig.get_path('purelib')``.
+``Python3_SITEARCH``
+  Third-party platform dependent installation directory.
+
+  Information returned by
+  ``distutils.sysconfig.get_python_lib(plat_specific=True,standard_lib=False)``
+  or else ``sysconfig.get_path('platlib')``.
+
+``Python3_SOABI``
+  .. versionadded:: 3.17
+
+  Extension suffix for modules.
+
+  Information returned by
+  ``distutils.sysconfig.get_config_var('SOABI')`` or computed from
+  ``distutils.sysconfig.get_config_var('EXT_SUFFIX')`` or
+  ``python3-config --extension-suffix``. If package ``distutils.sysconfig`` is
+  not available, ``sysconfig.get_config_var('SOABI')`` or
+  ``sysconfig.get_config_var('EXT_SUFFIX')`` are used.
+
+``Python3_Compiler_FOUND``
+  System has the Python 3 compiler.
+``Python3_COMPILER``
+  Path to the Python 3 compiler. Only offered by IronPython.
+``Python3_COMPILER_ID``
+  A short string unique to the compiler. Possible values include:
+    * IronPython
+
+``Python3_DOTNET_LAUNCHER``
+  .. versionadded:: 3.18
+
+  The ``.Net`` interpreter. Only used by ``IronPython`` implementation.
+
+``Python3_Development_FOUND``
+
+  System has the Python 3 development artifacts.
+
+``Python3_Development.Module_FOUND``
+  .. versionadded:: 3.18
+
+  System has the Python 3 development artifacts for Python module.
+
+``Python3_Development.Embed_FOUND``
+  .. versionadded:: 3.18
+
+  System has the Python 3 development artifacts for Python embedding.
+
+``Python3_INCLUDE_DIRS``
+
+  The Python 3 include directories.
+
+``Python3_LINK_OPTIONS``
+  .. versionadded:: 3.19
+
+  The Python 3 link options. Some configurations require specific link options
+  for a correct build and execution.
+
+``Python3_LIBRARIES``
+  The Python 3 libraries.
+``Python3_LIBRARY_DIRS``
+  The Python 3 library directories.
+``Python3_RUNTIME_LIBRARY_DIRS``
+  The Python 3 runtime library directories.
+``Python3_VERSION``
+  Python 3 version.
+``Python3_VERSION_MAJOR``
+  Python 3 major version.
+``Python3_VERSION_MINOR``
+  Python 3 minor version.
+``Python3_VERSION_PATCH``
+  Python 3 patch version.
+
+``Python3_PyPy_VERSION``
+  .. versionadded:: 3.18
+
+  Python 3 PyPy version.
+
+``Python3_NumPy_FOUND``
+  .. versionadded:: 3.14
+
+  System has the NumPy.
+
+``Python3_NumPy_INCLUDE_DIRS``
+  .. versionadded:: 3.14
+
+  The NumPy include directories.
+
+``Python3_NumPy_VERSION``
+  .. versionadded:: 3.14
+
+  The NumPy version.
+
+Hints
+^^^^^
+
+``Python3_ROOT_DIR``
+  Define the root directory of a Python 3 installation.
+
+``Python3_USE_STATIC_LIBS``
+  * If not defined, search for shared libraries and static libraries in that
+    order.
+  * If set to TRUE, search **only** for static libraries.
+  * If set to FALSE, search **only** for shared libraries.
+
+  .. note::
+
+    This hint will be ignored on ``Windows`` because static libraries are not
+    available on this platform.
+
+``Python3_FIND_ABI``
+  .. versionadded:: 3.16
+
+  This variable defines which ABIs, as defined in
+  `PEP 3149 <https://www.python.org/dev/peps/pep-3149/>`_, should be searched.
+
+  .. note::
+
+    If ``Python3_FIND_ABI`` is not defined, any ABI will be searched.
+
+  The ``Python3_FIND_ABI`` variable is a 3-tuple specifying, in that order,
+  ``pydebug`` (``d``), ``pymalloc`` (``m``) and ``unicode`` (``u``) flags.
+  Each element can be set to one of the following:
+
+  * ``ON``: Corresponding flag is selected.
+  * ``OFF``: Corresponding flag is not selected.
+  * ``ANY``: The two possibilities (``ON`` and ``OFF``) will be searched.
+
+  From this 3-tuple, various ABIs will be searched starting from the most
+  specialized to the most general. Moreover, ``debug`` versions will be
+  searched **after** ``non-debug`` ones.
+
+  For example, if we have::
+
+    set (Python3_FIND_ABI "ON" "ANY" "ANY")
+
+  The following flags combinations will be appended, in that order, to the
+  artifact names: ``dmu``, ``dm``, ``du``, and ``d``.
+
+  And to search any possible ABIs::
+
+    set (Python3_FIND_ABI "ANY" "ANY" "ANY")
+
+  The following combinations, in that order, will be used: ``mu``, ``m``,
+  ``u``, ``<empty>``, ``dmu``, ``dm``, ``du`` and ``d``.
+
+  .. note::
+
+    This hint is useful only on ``POSIX`` systems. So, on ``Windows`` systems,
+    when ``Python3_FIND_ABI`` is defined, ``Python`` distributions from
+    `python.org <https://www.python.org/>`_ will be found only if value for
+    each flag is ``OFF`` or ``ANY``.
+
+``Python3_FIND_STRATEGY``
+  .. versionadded:: 3.15
+
+  This variable defines how lookup will be done.
+  The ``Python3_FIND_STRATEGY`` variable can be set to one of the following:
+
+  * ``VERSION``: Try to find the most recent version in all specified
+    locations.
+    This is the default if policy :policy:`CMP0094` is undefined or set to
+    ``OLD``.
+  * ``LOCATION``: Stops lookup as soon as a version satisfying version
+    constraints is founded.
+    This is the default if policy :policy:`CMP0094` is set to ``NEW``.
+
+``Python3_FIND_REGISTRY``
+  .. versionadded:: 3.13
+
+  On Windows the ``Python3_FIND_REGISTRY`` variable determine the order
+  of preference between registry and environment variables.
+  The ``Python3_FIND_REGISTRY`` variable can be set to one of the following:
+
+  * ``FIRST``: Try to use registry before environment variables.
+    This is the default.
+  * ``LAST``: Try to use registry after environment variables.
+  * ``NEVER``: Never try to use registry.
+
+``Python3_FIND_FRAMEWORK``
+  .. versionadded:: 3.15
+
+  On macOS the ``Python3_FIND_FRAMEWORK`` variable determine the order of
+  preference between Apple-style and unix-style package components.
+  This variable can take same values as :variable:`CMAKE_FIND_FRAMEWORK`
+  variable.
+
+  .. note::
+
+    Value ``ONLY`` is not supported so ``FIRST`` will be used instead.
+
+  If ``Python3_FIND_FRAMEWORK`` is not defined, :variable:`CMAKE_FIND_FRAMEWORK`
+  variable will be used, if any.
+
+``Python3_FIND_VIRTUALENV``
+  .. versionadded:: 3.15
+
+  This variable defines the handling of virtual environments managed by
+  ``virtualenv`` or ``conda``. It is meaningful only when a virtual environment
+  is active (i.e. the ``activate`` script has been evaluated). In this case, it
+  takes precedence over ``Python3_FIND_REGISTRY`` and ``CMAKE_FIND_FRAMEWORK``
+  variables.  The ``Python3_FIND_VIRTUALENV`` variable can be set to one of the
+  following:
+
+  * ``FIRST``: The virtual environment is used before any other standard
+    paths to look-up for the interpreter. This is the default.
+  * ``ONLY``: Only the virtual environment is used to look-up for the
+    interpreter.
+  * ``STANDARD``: The virtual environment is not used to look-up for the
+    interpreter but environment variable ``PATH`` is always considered.
+    In this case, variable ``Python3_FIND_REGISTRY`` (Windows) or
+    ``CMAKE_FIND_FRAMEWORK`` (macOS) can be set with value ``LAST`` or
+    ``NEVER`` to select preferably the interpreter from the virtual
+    environment.
+
+  .. versionadded:: 3.17
+    Added support for ``conda`` environments.
+
+  .. note::
+
+    If the component ``Development`` is requested, it is **strongly**
+    recommended to also include the component ``Interpreter`` to get expected
+    result.
+
+``Python3_FIND_IMPLEMENTATIONS``
+  .. versionadded:: 3.18
+
+  This variable defines, in an ordered list, the different implementations
+  which will be searched. The ``Python3_FIND_IMPLEMENTATIONS`` variable can
+  hold the following values:
+
+  * ``CPython``: this is the standard implementation. Various products, like
+    ``Anaconda`` or ``ActivePython``, rely on this implementation.
+  * ``IronPython``: This implementation use the ``CSharp`` language for
+    ``.NET Framework`` on top of the `Dynamic Language Runtime` (``DLR``).
+    See `IronPython <http://ironpython.net>`_.
+  * ``PyPy``: This implementation use ``RPython`` language and
+    ``RPython translation toolchain`` to produce the python interpreter.
+    See `PyPy <https://www.pypy.org>`_.
+
+  The default value is:
+
+  * Windows platform: ``CPython``, ``IronPython``
+  * Other platforms: ``CPython``
+
+  .. note::
+
+    This hint has the lowest priority of all hints, so even if, for example,
+    you specify ``IronPython`` first and ``CPython`` in second, a python
+    product based on ``CPython`` can be selected because, for example with
+    ``Python3_FIND_STRATEGY=LOCATION``, each location will be search first for
+    ``IronPython`` and second for ``CPython``.
+
+  .. note::
+
+    When ``IronPython`` is specified, on platforms other than ``Windows``, the
+    ``.Net`` interpreter (i.e. ``mono`` command) is expected to be available
+    through the ``PATH`` variable.
+
+``Python3_FIND_UNVERSIONED_NAMES``
+  .. versionadded:: 3.20
+
+  This variable defines how the generic names will be searched. Currently, it
+  only applies to the generic names of the interpreter, namely, ``python3`` and
+  ``python``.
+  The ``Python3_FIND_UNVERSIONED_NAMES`` variable can be set to one of the
+  following values:
+
+  * ``FIRST``: The generic names are searched before the more specialized ones
+    (such as ``python3.5`` for example).
+  * ``LAST``: The generic names are searched after the more specialized ones.
+    This is the default.
+  * ``NEVER``: The generic name are not searched at all.
+
+Artifacts Specification
+^^^^^^^^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.16
+
+To solve special cases, it is possible to specify directly the artifacts by
+setting the following variables:
+
+``Python3_EXECUTABLE``
+  The path to the interpreter.
+
+``Python3_COMPILER``
+  The path to the compiler.
+
+``Python3_DOTNET_LAUNCHER``
+  .. versionadded:: 3.18
+
+  The ``.Net`` interpreter. Only used by ``IronPython`` implementation.
+
+``Python3_LIBRARY``
+  The path to the library. It will be used to compute the
+  variables ``Python3_LIBRARIES``, ``Python3_LIBRARY_DIRS`` and
+  ``Python3_RUNTIME_LIBRARY_DIRS``.
+
+``Python3_INCLUDE_DIR``
+  The path to the directory of the ``Python`` headers. It will be used to
+  compute the variable ``Python3_INCLUDE_DIRS``.
+
+``Python3_NumPy_INCLUDE_DIR``
+  The path to the directory of the ``NumPy`` headers. It will be used to
+  compute the variable ``Python3_NumPy_INCLUDE_DIRS``.
+
+.. note::
+
+  All paths must be absolute. Any artifact specified with a relative path
+  will be ignored.
+
+.. note::
+
+  When an artifact is specified, all ``HINTS`` will be ignored and no search
+  will be performed for this artifact.
+
+  If more than one artifact is specified, it is the user's responsibility to
+  ensure the consistency of the various artifacts.
+
+By default, this module supports multiple calls in different directories of a
+project with different version/component requirements while providing correct
+and consistent results for each call. To support this behavior, ``CMake`` cache
+is not used in the traditional way which can be problematic for interactive
+specification. So, to enable also interactive specification, module behavior
+can be controlled with the following variable:
+
+``Python3_ARTIFACTS_INTERACTIVE``
+  .. versionadded:: 3.18
+
+  Selects the behavior of the module. This is a boolean variable:
+
+  * If set to ``TRUE``: Create CMake cache entries for the above artifact
+    specification variables so that users can edit them interactively.
+    This disables support for multiple version/component requirements.
+  * If set to ``FALSE`` or undefined: Enable multiple version/component
+    requirements.
+
+Commands
+^^^^^^^^
+
+This module defines the command ``Python3_add_library`` (when
+:prop_gbl:`CMAKE_ROLE` is ``PROJECT``), which has the same semantics as
+:command:`add_library` and adds a dependency to target ``Python3::Python`` or,
+when library type is ``MODULE``, to target ``Python3::Module`` and takes care
+of Python module naming rules::
+
+  Python3_add_library (<name> [STATIC | SHARED | MODULE [WITH_SOABI]]
+                       <source1> [<source2> ...])
+
+If the library type is not specified, ``MODULE`` is assumed.
+
+.. versionadded:: 3.17
+  For ``MODULE`` library type, if option ``WITH_SOABI`` is specified, the
+  module suffix will include the ``Python3_SOABI`` value, if any.
+#]=======================================================================]
+
+
+set (_PYTHON_PREFIX Python3)
+
+set (_Python3_REQUIRED_VERSION_MAJOR 3)
+
+include (${CMAKE_CURRENT_LIST_DIR}/FindPython/Support.cmake)
+
+if (COMMAND __Python3_add_library)
+  macro (Python3_add_library)
+    __Python3_add_library (Python3 ${ARGV})
+  endmacro()
+endif()
+
+unset (_PYTHON_PREFIX)
diff --git a/share/cmake-3.22/Modules/FindPythonInterp.cmake b/share/cmake-3.22/Modules/FindPythonInterp.cmake
new file mode 100644
index 0000000..efe0f11
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindPythonInterp.cmake
@@ -0,0 +1,171 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindPythonInterp
+----------------
+
+.. deprecated:: 3.12
+
+  Use :module:`FindPython3`, :module:`FindPython2` or :module:`FindPython` instead.
+
+Find python interpreter
+
+This module finds if Python interpreter is installed and determines
+where the executables are.  This code sets the following variables:
+
+::
+
+  PYTHONINTERP_FOUND         - Was the Python executable found
+  PYTHON_EXECUTABLE          - path to the Python interpreter
+
+
+
+::
+
+  PYTHON_VERSION_STRING      - Python version found e.g. 2.5.2
+  PYTHON_VERSION_MAJOR       - Python major version found e.g. 2
+  PYTHON_VERSION_MINOR       - Python minor version found e.g. 5
+  PYTHON_VERSION_PATCH       - Python patch version found e.g. 2
+
+
+
+The Python_ADDITIONAL_VERSIONS variable can be used to specify a list
+of version numbers that should be taken into account when searching
+for Python.  You need to set this variable before calling
+find_package(PythonInterp).
+
+If calling both ``find_package(PythonInterp)`` and
+``find_package(PythonLibs)``, call ``find_package(PythonInterp)`` first to
+get the currently active Python version by default with a consistent version
+of PYTHON_LIBRARIES.
+
+.. note::
+
+  A call to ``find_package(PythonInterp ${V})`` for python version ``V``
+  may find a ``python`` executable with no version suffix.  In this case
+  no attempt is made to avoid python executables from other versions.
+  Use :module:`FindPython3`, :module:`FindPython2` or :module:`FindPython`
+  instead.
+
+#]=======================================================================]
+
+unset(_Python_NAMES)
+
+set(_PYTHON1_VERSIONS 1.6 1.5)
+set(_PYTHON2_VERSIONS 2.7 2.6 2.5 2.4 2.3 2.2 2.1 2.0)
+set(_PYTHON3_VERSIONS 3.10 3.9 3.8 3.7 3.6 3.5 3.4 3.3 3.2 3.1 3.0)
+
+if(PythonInterp_FIND_VERSION)
+    if(PythonInterp_FIND_VERSION_COUNT GREATER 1)
+        set(_PYTHON_FIND_MAJ_MIN "${PythonInterp_FIND_VERSION_MAJOR}.${PythonInterp_FIND_VERSION_MINOR}")
+        list(APPEND _Python_NAMES
+             python${_PYTHON_FIND_MAJ_MIN}
+             python${PythonInterp_FIND_VERSION_MAJOR})
+        unset(_PYTHON_FIND_OTHER_VERSIONS)
+        if(NOT PythonInterp_FIND_VERSION_EXACT)
+            foreach(_PYTHON_V ${_PYTHON${PythonInterp_FIND_VERSION_MAJOR}_VERSIONS})
+                if(NOT _PYTHON_V VERSION_LESS _PYTHON_FIND_MAJ_MIN)
+                    list(APPEND _PYTHON_FIND_OTHER_VERSIONS ${_PYTHON_V})
+                endif()
+             endforeach()
+        endif()
+        unset(_PYTHON_FIND_MAJ_MIN)
+    else()
+        list(APPEND _Python_NAMES python${PythonInterp_FIND_VERSION_MAJOR})
+        set(_PYTHON_FIND_OTHER_VERSIONS ${_PYTHON${PythonInterp_FIND_VERSION_MAJOR}_VERSIONS})
+    endif()
+else()
+    set(_PYTHON_FIND_OTHER_VERSIONS ${_PYTHON3_VERSIONS} ${_PYTHON2_VERSIONS} ${_PYTHON1_VERSIONS})
+endif()
+find_program(PYTHON_EXECUTABLE NAMES ${_Python_NAMES})
+
+# Set up the versions we know about, in the order we will search. Always add
+# the user supplied additional versions to the front.
+set(_Python_VERSIONS ${Python_ADDITIONAL_VERSIONS})
+# If FindPythonInterp has already found the major and minor version,
+# insert that version next to get consistent versions of the interpreter and
+# library.
+if(DEFINED PYTHONLIBS_VERSION_STRING)
+  string(REPLACE "." ";" _PYTHONLIBS_VERSION "${PYTHONLIBS_VERSION_STRING}")
+  list(GET _PYTHONLIBS_VERSION 0 _PYTHONLIBS_VERSION_MAJOR)
+  list(GET _PYTHONLIBS_VERSION 1 _PYTHONLIBS_VERSION_MINOR)
+  list(APPEND _Python_VERSIONS ${_PYTHONLIBS_VERSION_MAJOR}.${_PYTHONLIBS_VERSION_MINOR})
+endif()
+# Search for the current active python version first
+list(APPEND _Python_VERSIONS ";")
+list(APPEND _Python_VERSIONS ${_PYTHON_FIND_OTHER_VERSIONS})
+
+unset(_PYTHON_FIND_OTHER_VERSIONS)
+unset(_PYTHON1_VERSIONS)
+unset(_PYTHON2_VERSIONS)
+unset(_PYTHON3_VERSIONS)
+
+# Search for newest python version if python executable isn't found
+if(NOT PYTHON_EXECUTABLE)
+    foreach(_CURRENT_VERSION IN LISTS _Python_VERSIONS)
+      set(_Python_NAMES python${_CURRENT_VERSION})
+      if(CMAKE_HOST_WIN32)
+        list(APPEND _Python_NAMES python)
+      endif()
+      find_program(PYTHON_EXECUTABLE
+        NAMES ${_Python_NAMES}
+        PATHS
+            [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]
+            [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-32\\InstallPath]
+            [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-64\\InstallPath]
+            [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]
+            [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-32\\InstallPath]
+            [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-64\\InstallPath]
+        )
+    endforeach()
+endif()
+
+# determine python version string
+if(PYTHON_EXECUTABLE)
+    execute_process(COMMAND "${PYTHON_EXECUTABLE}" -c
+                            "import sys; sys.stdout.write(';'.join([str(x) for x in sys.version_info[:3]]))"
+                    OUTPUT_VARIABLE _VERSION
+                    RESULT_VARIABLE _PYTHON_VERSION_RESULT
+                    ERROR_QUIET)
+    if(NOT _PYTHON_VERSION_RESULT)
+        string(REPLACE ";" "." PYTHON_VERSION_STRING "${_VERSION}")
+        list(GET _VERSION 0 PYTHON_VERSION_MAJOR)
+        list(GET _VERSION 1 PYTHON_VERSION_MINOR)
+        list(GET _VERSION 2 PYTHON_VERSION_PATCH)
+        if(PYTHON_VERSION_PATCH EQUAL 0)
+            # it's called "Python 2.7", not "2.7.0"
+            string(REGEX REPLACE "\\.0$" "" PYTHON_VERSION_STRING "${PYTHON_VERSION_STRING}")
+        endif()
+    else()
+        # sys.version predates sys.version_info, so use that
+        # sys.version was first documented for Python 1.5, so assume version 1.4
+        # if retrieving sys.version fails.
+        execute_process(COMMAND "${PYTHON_EXECUTABLE}" -c "try: import sys; sys.stdout.write(sys.version)\nexcept: sys.stdout.write(\"1.4.0\")"
+                        OUTPUT_VARIABLE _VERSION
+                        RESULT_VARIABLE _PYTHON_VERSION_RESULT
+                        ERROR_QUIET)
+        if(NOT _PYTHON_VERSION_RESULT)
+            string(REGEX REPLACE " .*" "" PYTHON_VERSION_STRING "${_VERSION}")
+            string(REGEX REPLACE "^([0-9]+)\\.[0-9]+.*" "\\1" PYTHON_VERSION_MAJOR "${PYTHON_VERSION_STRING}")
+            string(REGEX REPLACE "^[0-9]+\\.([0-9])+.*" "\\1" PYTHON_VERSION_MINOR "${PYTHON_VERSION_STRING}")
+            if(PYTHON_VERSION_STRING MATCHES "^[0-9]+\\.[0-9]+\\.([0-9]+)")
+                set(PYTHON_VERSION_PATCH "${CMAKE_MATCH_1}")
+            else()
+                set(PYTHON_VERSION_PATCH "0")
+            endif()
+        else()
+            unset(PYTHON_VERSION_STRING)
+            unset(PYTHON_VERSION_MAJOR)
+            unset(PYTHON_VERSION_MINOR)
+            unset(PYTHON_VERSION_PATCH)
+        endif()
+    endif()
+    unset(_PYTHON_VERSION_RESULT)
+    unset(_VERSION)
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(PythonInterp REQUIRED_VARS PYTHON_EXECUTABLE VERSION_VAR PYTHON_VERSION_STRING)
+
+mark_as_advanced(PYTHON_EXECUTABLE)
diff --git a/share/cmake-3.22/Modules/FindPythonLibs.cmake b/share/cmake-3.22/Modules/FindPythonLibs.cmake
new file mode 100644
index 0000000..396f0d2
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindPythonLibs.cmake
@@ -0,0 +1,399 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindPythonLibs
+--------------
+
+.. deprecated:: 3.12
+
+  Use :module:`FindPython3`, :module:`FindPython2` or :module:`FindPython` instead.
+
+Find python libraries
+
+This module finds if Python is installed and determines where the
+include files and libraries are.  It also determines what the name of
+the library is.  This code sets the following variables:
+
+::
+
+  PYTHONLIBS_FOUND           - have the Python libs been found
+  PYTHON_LIBRARIES           - path to the python library
+  PYTHON_INCLUDE_PATH        - path to where Python.h is found (deprecated)
+  PYTHON_INCLUDE_DIRS        - path to where Python.h is found
+  PYTHON_DEBUG_LIBRARIES     - path to the debug library (deprecated)
+  PYTHONLIBS_VERSION_STRING  - version of the Python libs found (since CMake 2.8.8)
+
+
+
+The Python_ADDITIONAL_VERSIONS variable can be used to specify a list
+of version numbers that should be taken into account when searching
+for Python.  You need to set this variable before calling
+find_package(PythonLibs).
+
+If you'd like to specify the installation of Python to use, you should
+modify the following cache variables:
+
+::
+
+  PYTHON_LIBRARY             - path to the python library
+  PYTHON_INCLUDE_DIR         - path to where Python.h is found
+
+If calling both ``find_package(PythonInterp)`` and
+``find_package(PythonLibs)``, call ``find_package(PythonInterp)`` first to
+get the currently active Python version by default with a consistent version
+of PYTHON_LIBRARIES.
+#]=======================================================================]
+
+# Use the executable's path as a hint
+set(_Python_LIBRARY_PATH_HINT)
+if(IS_ABSOLUTE "${PYTHON_EXECUTABLE}")
+  if(WIN32)
+    get_filename_component(_Python_PREFIX "${PYTHON_EXECUTABLE}" PATH)
+    if(_Python_PREFIX)
+      set(_Python_LIBRARY_PATH_HINT ${_Python_PREFIX}/libs)
+    endif()
+    unset(_Python_PREFIX)
+  else()
+    get_filename_component(_Python_PREFIX "${PYTHON_EXECUTABLE}" PATH)
+    get_filename_component(_Python_PREFIX "${_Python_PREFIX}" PATH)
+    if(_Python_PREFIX)
+      set(_Python_LIBRARY_PATH_HINT ${_Python_PREFIX}/lib)
+    endif()
+    unset(_Python_PREFIX)
+  endif()
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/CMakeFindFrameworks.cmake)
+# Search for the python framework on Apple.
+CMAKE_FIND_FRAMEWORKS(Python)
+
+# Save CMAKE_FIND_FRAMEWORK
+if(DEFINED CMAKE_FIND_FRAMEWORK)
+  set(_PythonLibs_CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK})
+else()
+  unset(_PythonLibs_CMAKE_FIND_FRAMEWORK)
+endif()
+# To avoid picking up the system Python.h pre-maturely.
+set(CMAKE_FIND_FRAMEWORK LAST)
+
+set(_PYTHON1_VERSIONS 1.6 1.5)
+set(_PYTHON2_VERSIONS 2.7 2.6 2.5 2.4 2.3 2.2 2.1 2.0)
+set(_PYTHON3_VERSIONS 3.10 3.9 3.8 3.7 3.6 3.5 3.4 3.3 3.2 3.1 3.0)
+
+if(PythonLibs_FIND_VERSION)
+    if(PythonLibs_FIND_VERSION_COUNT GREATER 1)
+        set(_PYTHON_FIND_MAJ_MIN "${PythonLibs_FIND_VERSION_MAJOR}.${PythonLibs_FIND_VERSION_MINOR}")
+        unset(_PYTHON_FIND_OTHER_VERSIONS)
+        if(PythonLibs_FIND_VERSION_EXACT)
+            if(_PYTHON_FIND_MAJ_MIN STREQUAL PythonLibs_FIND_VERSION)
+                set(_PYTHON_FIND_OTHER_VERSIONS "${PythonLibs_FIND_VERSION}")
+            else()
+                set(_PYTHON_FIND_OTHER_VERSIONS "${PythonLibs_FIND_VERSION}" "${_PYTHON_FIND_MAJ_MIN}")
+            endif()
+        else()
+            foreach(_PYTHON_V ${_PYTHON${PythonLibs_FIND_VERSION_MAJOR}_VERSIONS})
+                if(NOT _PYTHON_V VERSION_LESS _PYTHON_FIND_MAJ_MIN)
+                    list(APPEND _PYTHON_FIND_OTHER_VERSIONS ${_PYTHON_V})
+                endif()
+             endforeach()
+        endif()
+        unset(_PYTHON_FIND_MAJ_MIN)
+    else()
+        set(_PYTHON_FIND_OTHER_VERSIONS ${_PYTHON${PythonLibs_FIND_VERSION_MAJOR}_VERSIONS})
+    endif()
+else()
+    set(_PYTHON_FIND_OTHER_VERSIONS ${_PYTHON3_VERSIONS} ${_PYTHON2_VERSIONS} ${_PYTHON1_VERSIONS})
+endif()
+
+# Set up the versions we know about, in the order we will search. Always add
+# the user supplied additional versions to the front.
+# If FindPythonInterp has already found the major and minor version,
+# insert that version between the user supplied versions and the stock
+# version list.
+set(_Python_VERSIONS ${Python_ADDITIONAL_VERSIONS})
+if(DEFINED PYTHON_VERSION_MAJOR AND DEFINED PYTHON_VERSION_MINOR)
+  list(APPEND _Python_VERSIONS ${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR})
+endif()
+list(APPEND _Python_VERSIONS ${_PYTHON_FIND_OTHER_VERSIONS})
+
+unset(_PYTHON_FIND_OTHER_VERSIONS)
+unset(_PYTHON1_VERSIONS)
+unset(_PYTHON2_VERSIONS)
+unset(_PYTHON3_VERSIONS)
+
+# Python distribution: define which architectures can be used
+if (CMAKE_SIZEOF_VOID_P)
+  # In this case, search only for 64bit or 32bit
+  math (EXPR _PYTHON_ARCH "${CMAKE_SIZEOF_VOID_P} * 8")
+  set (_PYTHON_ARCH2 _PYTHON_PREFIX_ARCH})
+else()
+  if (PYTHON_EXECUTABLE)
+    # determine interpreter architecture
+    execute_process (COMMAND "${PYTHON_EXECUTABLE}" -c "import sys; print(sys.maxsize > 2**32)"
+                     RESULT_VARIABLE _PYTHON_RESULT
+                     OUTPUT_VARIABLE _PYTHON_IS64BIT
+                     ERROR_VARIABLE _PYTHON_IS64BIT)
+      if (NOT _PYTHON_RESULT)
+        if (_PYTHON_IS64BIT)
+          set (_PYTHON_ARCH 64)
+          set (_PYTHON_ARCH2 64)
+        else()
+          set (_PYTHON_ARCH 32)
+          set (_PYTHON_ARCH2 32)
+        endif()
+      endif()
+  else()
+    # architecture unknown, search for both 64bit and 32bit
+    set (_PYTHON_ARCH 64)
+    set (_PYTHON_ARCH2 32)
+  endif()
+endif()
+
+foreach(_CURRENT_VERSION ${_Python_VERSIONS})
+  string(REPLACE "." "" _CURRENT_VERSION_NO_DOTS ${_CURRENT_VERSION})
+  if(WIN32)
+    find_library(PYTHON_DEBUG_LIBRARY
+      NAMES python${_CURRENT_VERSION_NO_DOTS}_d python
+      NAMES_PER_DIR
+      HINTS ${_Python_LIBRARY_PATH_HINT}
+      PATHS
+      [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs/Debug
+      [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH}\\InstallPath]/libs/Debug
+      [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH2}\\InstallPath]/libs/Debug
+      [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs/Debug
+      [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH}\\InstallPath]/libs/Debug
+      [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH2}\\InstallPath]/libs/Debug
+      [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs
+      [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH}\\InstallPath]/libs
+      [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH2}\\InstallPath]/libs
+      [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs
+      [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH}\\InstallPath]/libs
+      [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH2}\\InstallPath]/libs
+      )
+  endif()
+
+  set(PYTHON_FRAMEWORK_LIBRARIES)
+  if(Python_FRAMEWORKS AND NOT PYTHON_LIBRARY)
+    foreach(dir ${Python_FRAMEWORKS})
+      list(APPEND PYTHON_FRAMEWORK_LIBRARIES
+           ${dir}/Versions/${_CURRENT_VERSION}/lib)
+    endforeach()
+  endif()
+  find_library(PYTHON_LIBRARY
+    NAMES
+      python${_CURRENT_VERSION_NO_DOTS}
+      python${_CURRENT_VERSION}mu
+      python${_CURRENT_VERSION}m
+      python${_CURRENT_VERSION}u
+      python${_CURRENT_VERSION}
+    NAMES_PER_DIR
+    HINTS
+      ${_Python_LIBRARY_PATH_HINT}
+    PATHS
+      ${PYTHON_FRAMEWORK_LIBRARIES}
+      [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs
+      [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH}\\InstallPath]/libs
+      [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH2}\\InstallPath]/libs
+      [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs
+      [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH}\\InstallPath]/libs
+      [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH2}\\InstallPath]/libs
+  )
+  # Look for the static library in the Python config directory
+  find_library(PYTHON_LIBRARY
+    NAMES python${_CURRENT_VERSION_NO_DOTS} python${_CURRENT_VERSION}
+    NAMES_PER_DIR
+    # This is where the static library is usually located
+    PATH_SUFFIXES python${_CURRENT_VERSION}/config
+  )
+
+  # Don't search for include dir until library location is known
+  if(PYTHON_LIBRARY)
+
+    # Use the library's install prefix as a hint
+    set(_Python_INCLUDE_PATH_HINT)
+    # PYTHON_LIBRARY may contain a list because of SelectLibraryConfigurations
+    # which may have been run previously. If it is the case, the list can be:
+    #   optimized;<FILEPATH_TO_RELEASE_LIBRARY>;debug;<FILEPATH_TO_DEBUG_LIBRARY>
+    foreach(lib ${PYTHON_LIBRARY} ${PYTHON_DEBUG_LIBRARY})
+      if(IS_ABSOLUTE "${lib}")
+        get_filename_component(_Python_PREFIX "${lib}" PATH)
+        get_filename_component(_Python_PREFIX "${_Python_PREFIX}" PATH)
+        if(_Python_PREFIX)
+          list(APPEND _Python_INCLUDE_PATH_HINT ${_Python_PREFIX}/include)
+        endif()
+        unset(_Python_PREFIX)
+      endif()
+    endforeach()
+
+    # Add framework directories to the search paths
+    set(PYTHON_FRAMEWORK_INCLUDES)
+    if(Python_FRAMEWORKS AND NOT PYTHON_INCLUDE_DIR)
+      foreach(dir ${Python_FRAMEWORKS})
+        list(APPEND PYTHON_FRAMEWORK_INCLUDES
+          ${dir}/Versions/${_CURRENT_VERSION}/include)
+      endforeach()
+    endif()
+
+    find_path(PYTHON_INCLUDE_DIR
+      NAMES Python.h
+      HINTS
+        ${_Python_INCLUDE_PATH_HINT}
+      PATHS
+        ${PYTHON_FRAMEWORK_INCLUDES}
+        [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/include
+        [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH}\\InstallPath]/include
+        [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH2}\\InstallPath]/include
+        [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/include
+        [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH}\\InstallPath]/include
+        [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH2}\\InstallPath]/include
+      PATH_SUFFIXES
+        python${_CURRENT_VERSION}mu
+        python${_CURRENT_VERSION}m
+        python${_CURRENT_VERSION}u
+        python${_CURRENT_VERSION}
+    )
+  endif()
+
+  # For backward compatibility, set PYTHON_INCLUDE_PATH.
+  set(PYTHON_INCLUDE_PATH "${PYTHON_INCLUDE_DIR}")
+
+  if(PYTHON_INCLUDE_DIR AND EXISTS "${PYTHON_INCLUDE_DIR}/patchlevel.h")
+    file(STRINGS "${PYTHON_INCLUDE_DIR}/patchlevel.h" python_version_str
+         REGEX "^#define[ \t]+PY_VERSION[ \t]+\"[^\"]+\"")
+    string(REGEX REPLACE "^#define[ \t]+PY_VERSION[ \t]+\"([^\"]+)\".*" "\\1"
+                         PYTHONLIBS_VERSION_STRING "${python_version_str}")
+    unset(python_version_str)
+  endif()
+
+  if(PYTHON_LIBRARY AND PYTHON_INCLUDE_DIR)
+    break()
+  endif()
+endforeach()
+
+unset(_Python_INCLUDE_PATH_HINT)
+unset(_Python_LIBRARY_PATH_HINT)
+
+mark_as_advanced(
+  PYTHON_DEBUG_LIBRARY
+  PYTHON_LIBRARY
+  PYTHON_INCLUDE_DIR
+)
+
+# We use PYTHON_INCLUDE_DIR, PYTHON_LIBRARY and PYTHON_DEBUG_LIBRARY for the
+# cache entries because they are meant to specify the location of a single
+# library. We now set the variables listed by the documentation for this
+# module.
+set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
+set(PYTHON_DEBUG_LIBRARIES "${PYTHON_DEBUG_LIBRARY}")
+
+# These variables have been historically named in this module different from
+# what SELECT_LIBRARY_CONFIGURATIONS() expects.
+set(PYTHON_LIBRARY_DEBUG "${PYTHON_DEBUG_LIBRARY}")
+set(PYTHON_LIBRARY_RELEASE "${PYTHON_LIBRARY}")
+include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
+SELECT_LIBRARY_CONFIGURATIONS(PYTHON)
+# SELECT_LIBRARY_CONFIGURATIONS() sets ${PREFIX}_FOUND if it has a library.
+# Unset this, this prefix doesn't match the module prefix, they are different
+# for historical reasons.
+unset(PYTHON_FOUND)
+
+# Restore CMAKE_FIND_FRAMEWORK
+if(DEFINED _PythonLibs_CMAKE_FIND_FRAMEWORK)
+  set(CMAKE_FIND_FRAMEWORK ${_PythonLibs_CMAKE_FIND_FRAMEWORK})
+  unset(_PythonLibs_CMAKE_FIND_FRAMEWORK)
+else()
+  unset(CMAKE_FIND_FRAMEWORK)
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(PythonLibs
+                                  REQUIRED_VARS PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS
+                                  VERSION_VAR PYTHONLIBS_VERSION_STRING)
+
+# PYTHON_ADD_MODULE(<name> src1 src2 ... srcN) is used to build modules for python.
+# PYTHON_WRITE_MODULES_HEADER(<filename>) writes a header file you can include
+# in your sources to initialize the static python modules
+function(PYTHON_ADD_MODULE _NAME )
+  get_property(_TARGET_SUPPORTS_SHARED_LIBS
+    GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS)
+  option(PYTHON_ENABLE_MODULE_${_NAME} "Add module ${_NAME}" TRUE)
+  option(PYTHON_MODULE_${_NAME}_BUILD_SHARED
+    "Add module ${_NAME} shared" ${_TARGET_SUPPORTS_SHARED_LIBS})
+
+  # Mark these options as advanced
+  mark_as_advanced(PYTHON_ENABLE_MODULE_${_NAME}
+    PYTHON_MODULE_${_NAME}_BUILD_SHARED)
+
+  if(PYTHON_ENABLE_MODULE_${_NAME})
+    if(PYTHON_MODULE_${_NAME}_BUILD_SHARED)
+      set(PY_MODULE_TYPE MODULE)
+    else()
+      set(PY_MODULE_TYPE STATIC)
+      set_property(GLOBAL  APPEND  PROPERTY  PY_STATIC_MODULES_LIST ${_NAME})
+    endif()
+
+    set_property(GLOBAL  APPEND  PROPERTY  PY_MODULES_LIST ${_NAME})
+    add_library(${_NAME} ${PY_MODULE_TYPE} ${ARGN})
+#    target_link_libraries(${_NAME} ${PYTHON_LIBRARIES})
+
+    if(PYTHON_MODULE_${_NAME}_BUILD_SHARED)
+      set_target_properties(${_NAME} PROPERTIES PREFIX "${PYTHON_MODULE_PREFIX}")
+      if(WIN32 AND NOT CYGWIN)
+        set_target_properties(${_NAME} PROPERTIES SUFFIX ".pyd")
+      endif()
+    endif()
+
+  endif()
+endfunction()
+
+function(PYTHON_WRITE_MODULES_HEADER _filename)
+
+  get_property(PY_STATIC_MODULES_LIST  GLOBAL  PROPERTY PY_STATIC_MODULES_LIST)
+
+  get_filename_component(_name "${_filename}" NAME)
+  string(REPLACE "." "_" _name "${_name}")
+  string(TOUPPER ${_name} _nameUpper)
+  set(_filename ${CMAKE_CURRENT_BINARY_DIR}/${_filename})
+
+  set(_filenameTmp "${_filename}.in")
+  file(WRITE ${_filenameTmp} "/*Created by cmake, do not edit, changes will be lost*/\n")
+  file(APPEND ${_filenameTmp}
+"#ifndef ${_nameUpper}
+#define ${_nameUpper}
+
+#include <Python.h>
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif /* __cplusplus */
+
+")
+
+  foreach(_currentModule ${PY_STATIC_MODULES_LIST})
+    file(APPEND ${_filenameTmp} "extern void init${PYTHON_MODULE_PREFIX}${_currentModule}(void);\n\n")
+  endforeach()
+
+  file(APPEND ${_filenameTmp}
+"#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+")
+
+
+  foreach(_currentModule ${PY_STATIC_MODULES_LIST})
+    file(APPEND ${_filenameTmp} "int ${_name}_${_currentModule}(void) \n{\n  static char name[]=\"${PYTHON_MODULE_PREFIX}${_currentModule}\"; return PyImport_AppendInittab(name, init${PYTHON_MODULE_PREFIX}${_currentModule});\n}\n\n")
+  endforeach()
+
+  file(APPEND ${_filenameTmp} "void ${_name}_LoadAllPythonModules(void)\n{\n")
+  foreach(_currentModule ${PY_STATIC_MODULES_LIST})
+    file(APPEND ${_filenameTmp} "  ${_name}_${_currentModule}();\n")
+  endforeach()
+  file(APPEND ${_filenameTmp} "}\n\n")
+  file(APPEND ${_filenameTmp} "#ifndef EXCLUDE_LOAD_ALL_FUNCTION\nvoid CMakeLoadAllPythonModules(void)\n{\n  ${_name}_LoadAllPythonModules();\n}\n#endif\n\n#endif\n")
+
+# with configure_file() cmake complains that you may not use a file created using file(WRITE) as input file for configure_file()
+  execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${_filenameTmp}" "${_filename}" OUTPUT_QUIET ERROR_QUIET)
+
+endfunction()
diff --git a/share/cmake-3.22/Modules/FindQt.cmake b/share/cmake-3.22/Modules/FindQt.cmake
new file mode 100644
index 0000000..44a1f41
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindQt.cmake
@@ -0,0 +1,188 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindQt
+------
+
+.. deprecated:: 3.14
+  This module is available only if policy :policy:`CMP0084` is not set to ``NEW``.
+
+Searches for all installed versions of Qt3 or Qt4.
+
+This module cannot handle Qt5 or any later versions.
+For those, see :manual:`cmake-qt(7)`.
+
+This module should only be used if your project can work with multiple
+versions of Qt.  If not, you should just directly use FindQt4 or
+FindQt3.  If multiple versions of Qt are found on the machine, then
+The user must set the option DESIRED_QT_VERSION to the version they
+want to use.  If only one version of qt is found on the machine, then
+the DESIRED_QT_VERSION is set to that version and the matching FindQt3
+or FindQt4 module is included.  Once the user sets DESIRED_QT_VERSION,
+then the FindQt3 or FindQt4 module is included.
+
+::
+
+  QT_REQUIRED if this is set to TRUE then if CMake can
+              not find Qt4 or Qt3 an error is raised
+              and a message is sent to the user.
+
+
+
+::
+
+  DESIRED_QT_VERSION OPTION is created
+  QT4_INSTALLED is set to TRUE if qt4 is found.
+  QT3_INSTALLED is set to TRUE if qt3 is found.
+#]=======================================================================]
+
+if(_findqt_testing)
+  set(_findqt_included TRUE)
+  return()
+endif()
+
+# look for signs of qt3 installations
+file(GLOB GLOB_TEMP_VAR /usr/lib*/qt-3*/bin/qmake /usr/lib*/qt3*/bin/qmake)
+if(GLOB_TEMP_VAR)
+  set(QT3_INSTALLED TRUE)
+endif()
+set(GLOB_TEMP_VAR)
+
+file(GLOB GLOB_TEMP_VAR /usr/local/qt-x11-commercial-3*/bin/qmake)
+if(GLOB_TEMP_VAR)
+  set(QT3_INSTALLED TRUE)
+endif()
+set(GLOB_TEMP_VAR)
+
+file(GLOB GLOB_TEMP_VAR /usr/local/lib/qt3/bin/qmake)
+if(GLOB_TEMP_VAR)
+  set(QT3_INSTALLED TRUE)
+endif()
+set(GLOB_TEMP_VAR)
+
+# look for qt4 installations
+file(GLOB GLOB_TEMP_VAR /usr/local/qt-x11-commercial-4*/bin/qmake)
+if(GLOB_TEMP_VAR)
+  set(QT4_INSTALLED TRUE)
+endif()
+set(GLOB_TEMP_VAR)
+
+file(GLOB GLOB_TEMP_VAR /usr/local/Trolltech/Qt-4*/bin/qmake)
+if(GLOB_TEMP_VAR)
+  set(QT4_INSTALLED TRUE)
+endif()
+set(GLOB_TEMP_VAR)
+
+file(GLOB GLOB_TEMP_VAR /usr/local/lib/qt4/bin/qmake)
+if(GLOB_TEMP_VAR)
+  set(QT4_INSTALLED TRUE)
+endif()
+set(GLOB_TEMP_VAR)
+
+if (Qt_FIND_VERSION)
+  if (Qt_FIND_VERSION MATCHES "^([34])(\\.[0-9]+.*)?$")
+    set(DESIRED_QT_VERSION ${CMAKE_MATCH_1})
+  else ()
+    message(FATAL_ERROR "FindQt was called with invalid version '${Qt_FIND_VERSION}'. Only Qt major versions 3 or 4 are supported. If you do not need to support both Qt3 and Qt4 in your source consider calling find_package(Qt3) or find_package(Qt4) instead of find_package(Qt) instead.")
+  endif ()
+endif ()
+
+# now find qmake
+find_program(QT_QMAKE_EXECUTABLE_FINDQT NAMES qmake PATHS "${QT_SEARCH_PATH}/bin" "$ENV{QTDIR}/bin")
+if(QT_QMAKE_EXECUTABLE_FINDQT)
+  exec_program(${QT_QMAKE_EXECUTABLE_FINDQT} ARGS "-query QT_VERSION"
+    OUTPUT_VARIABLE QTVERSION)
+  if(QTVERSION MATCHES "4")
+    set(QT_QMAKE_EXECUTABLE ${QT_QMAKE_EXECUTABLE_FINDQT} CACHE PATH "Qt4 qmake program.")
+    set(QT4_INSTALLED TRUE)
+  endif()
+  if(QTVERSION MATCHES "Unknown")
+    set(QT3_INSTALLED TRUE)
+  endif()
+endif()
+
+if(QT_QMAKE_EXECUTABLE_FINDQT)
+  exec_program( ${QT_QMAKE_EXECUTABLE_FINDQT}
+    ARGS "-query QT_INSTALL_HEADERS"
+    OUTPUT_VARIABLE qt_headers )
+endif()
+
+find_file( QT4_QGLOBAL_H_FILE qglobal.h
+  "${QT_SEARCH_PATH}/Qt/include"
+  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\4.0.0;InstallDir]/include/Qt"
+  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Versions\\4.0.0;InstallDir]/include/Qt"
+  ${qt_headers}/Qt
+  $ENV{QTDIR}/include/Qt
+  /usr/lib/qt/include/Qt
+  /usr/share/qt4/include/Qt
+  /usr/local/include/X11/qt4/Qt
+  C:/Progra~1/qt/include/Qt
+  PATH_SUFFIXES qt/include/Qt include/Qt)
+
+if(QT4_QGLOBAL_H_FILE)
+  set(QT4_INSTALLED TRUE)
+endif()
+
+find_file( QT3_QGLOBAL_H_FILE qglobal.h
+  "${QT_SEARCH_PATH}/Qt/include"
+ "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]/include/Qt"
+  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]/include/Qt"
+  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]/include/Qt"
+  C:/Qt/3.3.3Educational/include
+  $ENV{QTDIR}/include
+  /usr/include/qt3/Qt
+  /usr/share/qt3/include
+  /usr/local/include/X11/qt3
+  C:/Progra~1/qt/include
+  PATH_SUFFIXES qt/include include/qt3)
+
+if(QT3_QGLOBAL_H_FILE)
+  set(QT3_INSTALLED TRUE)
+endif()
+
+if(QT3_INSTALLED AND QT4_INSTALLED AND NOT DESIRED_QT_VERSION)
+  # force user to pick if we have both
+  set(DESIRED_QT_VERSION 0 CACHE STRING "Pick a version of Qt to use: 3 or 4")
+else()
+  # if only one found then pick that one
+  if(QT3_INSTALLED AND NOT DESIRED_QT_VERSION EQUAL 4)
+    set(DESIRED_QT_VERSION 3 CACHE STRING "Pick a version of Qt to use: 3 or 4")
+  endif()
+  if(QT4_INSTALLED AND NOT DESIRED_QT_VERSION EQUAL 3)
+    set(DESIRED_QT_VERSION 4 CACHE STRING "Pick a version of Qt to use: 3 or 4")
+  endif()
+endif()
+
+if(DESIRED_QT_VERSION EQUAL 3)
+  set(Qt3_FIND_REQUIRED ${Qt_FIND_REQUIRED})
+  set(Qt3_FIND_QUIETLY  ${Qt_FIND_QUIETLY})
+  include(${CMAKE_CURRENT_LIST_DIR}/FindQt3.cmake)
+endif()
+if(DESIRED_QT_VERSION EQUAL 4)
+  set(Qt4_FIND_REQUIRED ${Qt_FIND_REQUIRED})
+  set(Qt4_FIND_QUIETLY  ${Qt_FIND_QUIETLY})
+  include(${CMAKE_CURRENT_LIST_DIR}/FindQt4.cmake)
+endif()
+
+if(NOT QT3_INSTALLED AND NOT QT4_INSTALLED)
+  if(QT_REQUIRED)
+    message(SEND_ERROR "CMake was unable to find any Qt versions, put qmake in your path, or set QT_QMAKE_EXECUTABLE.")
+  endif()
+else()
+  if(NOT QT_FOUND AND NOT DESIRED_QT_VERSION)
+    if(QT_REQUIRED)
+      message(SEND_ERROR "Multiple versions of Qt found please set DESIRED_QT_VERSION")
+    else()
+      message("Multiple versions of Qt found please set DESIRED_QT_VERSION")
+    endif()
+  endif()
+  if(NOT QT_FOUND AND DESIRED_QT_VERSION)
+    if(QT_REQUIRED)
+      message(FATAL_ERROR "CMake was unable to find Qt version: ${DESIRED_QT_VERSION}. Set advanced values QT_QMAKE_EXECUTABLE and QT${DESIRED_QT_VERSION}_QGLOBAL_H_FILE, if those are set then QT_QT_LIBRARY or QT_LIBRARY_DIR.")
+    else()
+      message( "CMake was unable to find desired Qt version: ${DESIRED_QT_VERSION}. Set advanced values QT_QMAKE_EXECUTABLE and QT${DESIRED_QT_VERSION}_QGLOBAL_H_FILE.")
+    endif()
+  endif()
+endif()
+mark_as_advanced(QT3_QGLOBAL_H_FILE QT4_QGLOBAL_H_FILE QT_QMAKE_EXECUTABLE_FINDQT)
diff --git a/share/cmake-3.22/Modules/FindQt3.cmake b/share/cmake-3.22/Modules/FindQt3.cmake
new file mode 100644
index 0000000..da82e59
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindQt3.cmake
@@ -0,0 +1,306 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindQt3
+-------
+
+Locate Qt include paths and libraries
+
+This module defines:
+
+::
+
+  QT_INCLUDE_DIR    - where to find qt.h, etc.
+  QT_LIBRARIES      - the libraries to link against to use Qt.
+  QT_DEFINITIONS    - definitions to use when
+                      compiling code that uses Qt.
+  QT_FOUND          - If false, don't try to use Qt.
+  QT_VERSION_STRING - the version of Qt found
+
+
+
+If you need the multithreaded version of Qt, set QT_MT_REQUIRED to
+TRUE
+
+Also defined, but not for general use are:
+
+::
+
+  QT_MOC_EXECUTABLE, where to find the moc tool.
+  QT_UIC_EXECUTABLE, where to find the uic tool.
+  QT_QT_LIBRARY, where to find the Qt library.
+  QT_QTMAIN_LIBRARY, where to find the qtmain
+   library. This is only required by Qt3 on Windows.
+#]=======================================================================]
+
+# These are around for backwards compatibility
+# they will be set
+#  QT_WRAP_CPP, set true if QT_MOC_EXECUTABLE is found
+#  QT_WRAP_UI set true if QT_UIC_EXECUTABLE is found
+
+# If Qt4 has already been found, fail.
+if(QT4_FOUND)
+  if(Qt3_FIND_REQUIRED)
+    message( FATAL_ERROR "Qt3 and Qt4 cannot be used together in one project.")
+  else()
+    if(NOT Qt3_FIND_QUIETLY)
+      message( STATUS    "Qt3 and Qt4 cannot be used together in one project.")
+    endif()
+    return()
+  endif()
+endif()
+
+
+file(GLOB GLOB_PATHS /usr/lib/qt-3*)
+foreach(GLOB_PATH ${GLOB_PATHS})
+  list(APPEND GLOB_PATHS_BIN "${GLOB_PATH}/bin")
+endforeach()
+find_path(QT_INCLUDE_DIR
+  NAMES qt.h
+  PATHS
+  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]/include/Qt"
+  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]/include/Qt"
+  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]/include/Qt"
+  $ENV{QTDIR}/include
+  ${GLOB_PATHS}
+  /usr/share/qt3/include
+  C:/Progra~1/qt/include
+  /usr/local/include/X11/qt3
+  PATH_SUFFIXES lib/qt/include lib/qt3/include include/qt include/qt3 qt/include qt3/include
+  )
+
+# if qglobal.h is not in the qt_include_dir then set
+# QT_INCLUDE_DIR to NOTFOUND
+if(NOT EXISTS ${QT_INCLUDE_DIR}/qglobal.h)
+  set(QT_INCLUDE_DIR QT_INCLUDE_DIR-NOTFOUND CACHE PATH "path to Qt3 include directory" FORCE)
+endif()
+
+if(QT_INCLUDE_DIR)
+  #extract the version string from qglobal.h
+  file(STRINGS ${QT_INCLUDE_DIR}/qglobal.h QGLOBAL_H REGEX "#define[\t ]+QT_VERSION_STR[\t ]+\"[0-9]+.[0-9]+.[0-9]+[a-z]*\"")
+  string(REGEX REPLACE ".*\"([0-9]+.[0-9]+.[0-9]+[a-z]*)\".*" "\\1" qt_version_str "${QGLOBAL_H}")
+  unset(QGLOBAL_H)
+
+  # Under windows the qt library (MSVC) has the format qt-mtXYZ where XYZ is the
+  # version X.Y.Z, so we need to remove the dots from version
+  string(REGEX REPLACE "\\." "" qt_version_str_lib "${qt_version_str}")
+  set(QT_VERSION_STRING "${qt_version_str}")
+endif()
+
+file(GLOB GLOB_PATHS_LIB /usr/lib/qt-3*/lib/)
+if (QT_MT_REQUIRED)
+  find_library(QT_QT_LIBRARY
+    NAMES
+    qt-mt qt-mt${qt_version_str_lib} qt-mtnc${qt_version_str_lib}
+    qt-mtedu${qt_version_str_lib} qt-mt230nc qt-mtnc321 qt-mt3
+    PATHS
+      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]"
+      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]"
+      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]"
+      ENV QTDIR
+      ${GLOB_PATHS_LIB}
+      /usr/share/qt3
+      C:/Progra~1/qt
+    PATH_SUFFIXES
+      lib lib/qt lib/qt3 qt qt3 qt/lib qt3/lib
+    )
+
+else ()
+  find_library(QT_QT_LIBRARY
+    NAMES
+    qt qt-${qt_version_str_lib} qt-edu${qt_version_str_lib}
+    qt-mt qt-mt${qt_version_str_lib} qt-mtnc${qt_version_str_lib}
+    qt-mtedu${qt_version_str_lib} qt-mt230nc qt-mtnc321 qt-mt3
+    PATHS
+      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]"
+      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]"
+      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]"
+      ENV QTDIR
+      ${GLOB_PATHS_LIB}
+      /usr/share/qt3
+      C:/Progra~1/qt/lib
+    PATH_SUFFIXES
+      lib lib/qt lib/qt3 qt qt3 qt/lib qt3/lib
+    )
+endif ()
+
+
+find_library(QT_QASSISTANTCLIENT_LIBRARY
+  NAMES qassistantclient
+  PATHS
+    "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]"
+    "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]"
+    "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]"
+    ENV QTDIR
+    ${GLOB_PATHS_LIB}
+    /usr/share/qt3
+    C:/Progra~1/qt
+  PATH_SUFFIXES
+    lib lib/qt lib/qt3 qt qt3 qt/lib qt3/lib
+  )
+
+# Qt 3 should prefer QTDIR over the PATH
+find_program(QT_MOC_EXECUTABLE
+  NAMES moc-qt3 moc3 moc3-mt moc
+  HINTS
+    ENV QTDIR
+  PATHS
+  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]/include/Qt"
+  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]/include/Qt"
+  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]/include/Qt"
+  ${GLOB_PATHS_BIN}
+    /usr/share/qt3
+    C:/Progra~1/qt
+  PATH_SUFFIXES
+    bin lib/qt lib/qt3 qt qt3 qt/bin qt3/bin lib/qt/bin lib/qt3/bin
+  )
+
+if(QT_MOC_EXECUTABLE)
+  set ( QT_WRAP_CPP "YES")
+endif()
+
+# Qt 3 should prefer QTDIR over the PATH
+find_program(QT_UIC_EXECUTABLE
+  NAMES uic-qt3 uic3 uic3-mt uic
+  HINTS
+    ENV QTDIR
+  PATHS
+  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]/include/Qt"
+  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]/include/Qt"
+  "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]/include/Qt"
+  ${GLOB_PATHS_BIN}
+    /usr/share/qt3
+    C:/Progra~1/qt
+  PATH_SUFFIXES
+    bin lib/qt lib/qt3 qt qt3 qt/bin qt3/bin lib/qt/bin lib/qt3/bin
+  )
+
+if(QT_UIC_EXECUTABLE)
+  set ( QT_WRAP_UI "YES")
+endif()
+
+if (WIN32)
+  find_library(QT_QTMAIN_LIBRARY
+    NAMES qtmain
+    HINTS
+      ENV QTDIR
+      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]"
+      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]"
+      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]"
+    PATHS
+      "$ENV{ProgramFiles}/qt"
+      "C:/Program Files/qt"
+    PATH_SUFFIXES
+      lib
+    DOC "This Library is only needed by and included with Qt3 on MSWindows. It should be NOTFOUND, undefined or IGNORE otherwise."
+    )
+endif ()
+
+#support old QT_MIN_VERSION if set, but not if version is supplied by find_package()
+if(NOT Qt3_FIND_VERSION AND QT_MIN_VERSION)
+  set(Qt3_FIND_VERSION ${QT_MIN_VERSION})
+endif()
+
+# if the include a library are found then we have it
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+if (CMAKE_FIND_PACKAGE_NAME STREQUAL "Qt")
+  # FindQt include()'s this module. It's an old pattern, but rather than trying
+  # to suppress this from outside the module (which is then sensitive to the
+  # contents, detect the case in this module and suppress it explicitly.
+  set(FPHSA_NAME_MISMATCHED 1)
+endif ()
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(Qt3
+                                  REQUIRED_VARS QT_QT_LIBRARY QT_INCLUDE_DIR QT_MOC_EXECUTABLE
+                                  VERSION_VAR QT_VERSION_STRING)
+unset(FPHSA_NAME_MISMATCHED)
+set(QT_FOUND ${QT3_FOUND} )
+
+if(QT_FOUND)
+  set( QT_LIBRARIES ${QT_LIBRARIES} ${QT_QT_LIBRARY} )
+  set( QT_DEFINITIONS "")
+
+  if (WIN32 AND NOT CYGWIN)
+    if (QT_QTMAIN_LIBRARY)
+      # for version 3
+      set (QT_DEFINITIONS -DQT_DLL -DQT_THREAD_SUPPORT -DNO_DEBUG)
+      set (QT_LIBRARIES imm32.lib ${QT_QT_LIBRARY} ${QT_QTMAIN_LIBRARY} )
+      set (QT_LIBRARIES ${QT_LIBRARIES} winmm wsock32)
+    else ()
+      # for version 2
+      set (QT_LIBRARIES imm32.lib ws2_32.lib ${QT_QT_LIBRARY} )
+    endif ()
+  else ()
+    set (QT_LIBRARIES ${QT_QT_LIBRARY} )
+
+    set (QT_DEFINITIONS -DQT_SHARED -DQT_NO_DEBUG)
+    if(QT_QT_LIBRARY MATCHES "qt-mt")
+      set (QT_DEFINITIONS ${QT_DEFINITIONS} -DQT_THREAD_SUPPORT -D_REENTRANT)
+    endif()
+
+  endif ()
+
+  if (QT_QASSISTANTCLIENT_LIBRARY)
+    set (QT_LIBRARIES ${QT_QASSISTANTCLIENT_LIBRARY} ${QT_LIBRARIES})
+  endif ()
+
+  # Backwards compatibility for CMake1.4 and 1.2
+  set (QT_MOC_EXE ${QT_MOC_EXECUTABLE} )
+  set (QT_UIC_EXE ${QT_UIC_EXECUTABLE} )
+  # for unix add X11 stuff
+  if(UNIX)
+    find_package(X11)
+    if (X11_FOUND)
+      set (QT_LIBRARIES ${QT_LIBRARIES} ${X11_LIBRARIES})
+    endif ()
+    if (CMAKE_DL_LIBS)
+      set (QT_LIBRARIES ${QT_LIBRARIES} ${CMAKE_DL_LIBS})
+    endif ()
+  endif()
+  if(QT_QT_LIBRARY MATCHES "qt-mt")
+    find_package(Threads)
+    set(QT_LIBRARIES ${QT_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
+  endif()
+endif()
+
+if(QT_MOC_EXECUTABLE)
+  execute_process(COMMAND ${QT_MOC_EXECUTABLE} "-v"
+                  OUTPUT_VARIABLE QTVERSION_MOC
+                  ERROR_QUIET)
+endif()
+if(QT_UIC_EXECUTABLE)
+  execute_process(COMMAND ${QT_UIC_EXECUTABLE} "-version"
+                  OUTPUT_VARIABLE QTVERSION_UIC
+                  ERROR_QUIET)
+endif()
+
+set(_QT_UIC_VERSION_3 FALSE)
+if("${QTVERSION_UIC}" MATCHES " 3.")
+  set(_QT_UIC_VERSION_3 TRUE)
+endif()
+
+set(_QT_MOC_VERSION_3 FALSE)
+if("${QTVERSION_MOC}" MATCHES " 3.")
+  set(_QT_MOC_VERSION_3 TRUE)
+endif()
+
+set(QT_WRAP_CPP FALSE)
+if (QT_MOC_EXECUTABLE AND _QT_MOC_VERSION_3)
+  set ( QT_WRAP_CPP TRUE)
+endif ()
+
+set(QT_WRAP_UI FALSE)
+if (QT_UIC_EXECUTABLE AND _QT_UIC_VERSION_3)
+  set ( QT_WRAP_UI TRUE)
+endif ()
+
+mark_as_advanced(
+  QT_INCLUDE_DIR
+  QT_QT_LIBRARY
+  QT_QTMAIN_LIBRARY
+  QT_QASSISTANTCLIENT_LIBRARY
+  QT_UIC_EXECUTABLE
+  QT_MOC_EXECUTABLE
+  QT_WRAP_CPP
+  QT_WRAP_UI
+  )
diff --git a/share/cmake-3.22/Modules/FindQt4.cmake b/share/cmake-3.22/Modules/FindQt4.cmake
new file mode 100644
index 0000000..ec0f453
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindQt4.cmake
@@ -0,0 +1,1346 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindQt4
+-------
+
+Finding and Using Qt4
+^^^^^^^^^^^^^^^^^^^^^
+
+This module can be used to find Qt4.  The most important issue is that
+the Qt4 qmake is available via the system path.  This qmake is then
+used to detect basically everything else.  This module defines a
+number of :prop_tgt:`IMPORTED` targets, macros and variables.
+
+Typical usage could be something like:
+
+.. code-block:: cmake
+
+   set(CMAKE_AUTOMOC ON)
+   set(CMAKE_INCLUDE_CURRENT_DIR ON)
+   find_package(Qt4 4.4.3 REQUIRED QtGui QtXml)
+   add_executable(myexe main.cpp)
+   target_link_libraries(myexe Qt4::QtGui Qt4::QtXml)
+
+.. note::
+
+ When using :prop_tgt:`IMPORTED` targets, the qtmain.lib static library is
+ automatically linked on Windows for :prop_tgt:`WIN32 <WIN32_EXECUTABLE>`
+ executables. To disable that globally, set the
+ ``QT4_NO_LINK_QTMAIN`` variable before finding Qt4. To disable that
+ for a particular executable, set the ``QT4_NO_LINK_QTMAIN`` target
+ property to ``TRUE`` on the executable.
+
+Qt Build Tools
+^^^^^^^^^^^^^^
+
+Qt relies on some bundled tools for code generation, such as ``moc`` for
+meta-object code generation,``uic`` for widget layout and population,
+and ``rcc`` for virtual filesystem content generation.  These tools may be
+automatically invoked by :manual:`cmake(1)` if the appropriate conditions
+are met.  See :manual:`cmake-qt(7)` for more.
+
+Qt Macros
+^^^^^^^^^
+
+In some cases it can be necessary or useful to invoke the Qt build tools in a
+more-manual way. Several macros are available to add targets for such uses.
+
+::
+
+  macro QT4_WRAP_CPP(outfiles inputfile ... [TARGET tgt] OPTIONS ...)
+        create moc code from a list of files containing Qt class with
+        the Q_OBJECT declaration.  Per-directory preprocessor definitions
+        are also added.  If the <tgt> is specified, the
+        INTERFACE_INCLUDE_DIRECTORIES and INTERFACE_COMPILE_DEFINITIONS from
+        the <tgt> are passed to moc.  Options may be given to moc, such as
+        those found when executing "moc -help".
+
+
+::
+
+  macro QT4_WRAP_UI(outfiles inputfile ... OPTIONS ...)
+        create code from a list of Qt designer ui files.
+        Options may be given to uic, such as those found
+        when executing "uic -help"
+
+
+::
+
+  macro QT4_ADD_RESOURCES(outfiles inputfile ... OPTIONS ...)
+        create code from a list of Qt resource files.
+        Options may be given to rcc, such as those found
+        when executing "rcc -help"
+
+
+::
+
+  macro QT4_GENERATE_MOC(inputfile outputfile [TARGET tgt])
+        creates a rule to run moc on infile and create outfile.
+        Use this if for some reason QT4_WRAP_CPP() isn't appropriate, e.g.
+        because you need a custom filename for the moc file or something
+        similar.  If the <tgt> is specified, the
+        INTERFACE_INCLUDE_DIRECTORIES and INTERFACE_COMPILE_DEFINITIONS from
+        the <tgt> are passed to moc.
+
+
+::
+
+  macro QT4_ADD_DBUS_INTERFACE(outfiles interface basename)
+        Create the interface header and implementation files with the
+        given basename from the given interface xml file and add it to
+        the list of sources.
+
+        You can pass additional parameters to the qdbusxml2cpp call by setting
+        properties on the input file:
+
+        INCLUDE the given file will be included in the generate interface header
+
+        CLASSNAME the generated class is named accordingly
+
+        NO_NAMESPACE the generated class is not wrapped in a namespace
+
+
+::
+
+  macro QT4_ADD_DBUS_INTERFACES(outfiles inputfile ... )
+        Create the interface header and implementation files
+        for all listed interface xml files.
+        The basename will be automatically determined from the name
+        of the xml file.
+
+        The source file properties described for
+        QT4_ADD_DBUS_INTERFACE also apply here.
+
+
+::
+
+  macro QT4_ADD_DBUS_ADAPTOR(outfiles xmlfile parentheader parentclassname
+                             [basename] [classname])
+        create a dbus adaptor (header and implementation file) from the xml file
+        describing the interface, and add it to the list of sources. The adaptor
+        forwards the calls to a parent class, defined in parentheader and named
+        parentclassname. The name of the generated files will be
+        <basename>adaptor.{cpp,h} where basename defaults to the basename of the
+        xml file.
+        If <classname> is provided, then it will be used as the classname of the
+        adaptor itself.
+
+
+::
+
+  macro QT4_GENERATE_DBUS_INTERFACE( header [interfacename] OPTIONS ...)
+        generate the xml interface file from the given header.
+        If the optional argument interfacename is omitted, the name of the
+        interface file is constructed from the basename of the header with
+        the suffix .xml appended.
+        Options may be given to qdbuscpp2xml, such as those found when
+        executing "qdbuscpp2xml --help"
+
+
+::
+
+  macro QT4_CREATE_TRANSLATION( qm_files directories ... sources ...
+                                ts_files ... OPTIONS ...)
+        out: qm_files
+        in:  directories sources ts_files
+        options: flags to pass to lupdate, such as -extensions to specify
+        extensions for a directory scan.
+        generates commands to create .ts (via lupdate) and .qm
+        (via lrelease) - files from directories and/or sources. The ts files are
+        created and/or updated in the source tree (unless given with full paths).
+        The qm files are generated in the build tree.
+        Updating the translations can be done by adding the qm_files
+        to the source list of your library/executable, so they are
+        always updated, or by adding a custom target to control when
+        they get updated/generated.
+
+
+::
+
+  macro QT4_ADD_TRANSLATION( qm_files ts_files ... )
+        out: qm_files
+        in:  ts_files
+        generates commands to create .qm from .ts - files. The generated
+        filenames can be found in qm_files. The ts_files
+        must exist and are not updated in any way.
+
+
+::
+
+  macro QT4_AUTOMOC(sourcefile1 sourcefile2 ... [TARGET tgt])
+        The qt4_automoc macro is obsolete.  Use the CMAKE_AUTOMOC feature instead.
+        This macro is still experimental.
+        It can be used to have moc automatically handled.
+        So if you have the files foo.h and foo.cpp, and in foo.h a
+        a class uses the Q_OBJECT macro, moc has to run on it. If you don't
+        want to use QT4_WRAP_CPP() (which is reliable and mature), you can insert
+        #include "foo.moc"
+        in foo.cpp and then give foo.cpp as argument to QT4_AUTOMOC(). This will
+        scan all listed files at cmake-time for such included moc files and if it
+        finds them cause a rule to be generated to run moc at build time on the
+        accompanying header file foo.h.
+        If a source file has the SKIP_AUTOMOC property set it will be ignored by
+        this macro.
+        If the <tgt> is specified, the INTERFACE_INCLUDE_DIRECTORIES and
+        INTERFACE_COMPILE_DEFINITIONS from the <tgt> are passed to moc.
+
+
+::
+
+ function QT4_USE_MODULES( target [link_type] modules...)
+        This function is obsolete. Use target_link_libraries with IMPORTED targets
+        instead.
+        Make <target> use the <modules> from Qt. Using a Qt module means
+        to link to the library, add the relevant include directories for the
+        module, and add the relevant compiler defines for using the module.
+        Modules are roughly equivalent to components of Qt4, so usage would be
+        something like:
+         qt4_use_modules(myexe Core Gui Declarative)
+        to use QtCore, QtGui and QtDeclarative. The optional <link_type> argument
+        can be specified as either LINK_PUBLIC or LINK_PRIVATE to specify the
+        same argument to the target_link_libraries call.
+
+
+IMPORTED Targets
+^^^^^^^^^^^^^^^^
+
+A particular Qt library may be used by using the corresponding
+:prop_tgt:`IMPORTED` target with the :command:`target_link_libraries`
+command:
+
+.. code-block:: cmake
+
+  target_link_libraries(myexe Qt4::QtGui Qt4::QtXml)
+
+Using a target in this way causes :cmake(1)` to use the appropriate include
+directories and compile definitions for the target when compiling ``myexe``.
+
+Targets are aware of their dependencies, so for example it is not necessary
+to list ``Qt4::QtCore`` if another Qt library is listed, and it is not
+necessary to list ``Qt4::QtGui`` if ``Qt4::QtDeclarative`` is listed.
+Targets may be tested for existence in the usual way with the
+:command:`if(TARGET)` command.
+
+The Qt toolkit may contain both debug and release libraries.
+:manual:`cmake(1)` will choose the appropriate version based on the build
+configuration.
+
+``Qt4::QtCore``
+ The QtCore target
+``Qt4::QtGui``
+ The QtGui target
+``Qt4::Qt3Support``
+ The Qt3Support target
+``Qt4::QtAssistant``
+ The QtAssistant target
+``Qt4::QtAssistantClient``
+ The QtAssistantClient target
+``Qt4::QAxContainer``
+ The QAxContainer target (Windows only)
+``Qt4::QAxServer``
+ The QAxServer target (Windows only)
+``Qt4::QtDBus``
+ The QtDBus target
+``Qt4::QtDeclarative``
+ The QtDeclarative target
+``Qt4::QtDesigner``
+ The QtDesigner target
+``Qt4::QtDesignerComponents``
+ The QtDesignerComponents target
+``Qt4::QtHelp``
+ The QtHelp target
+``Qt4::QtMotif``
+ The QtMotif target
+``Qt4::QtMultimedia``
+ The QtMultimedia target
+``Qt4::QtNetwork``
+ The QtNetwork target
+``Qt4::QtNsPLugin``
+ The QtNsPLugin target
+``Qt4::QtOpenGL``
+ The QtOpenGL target
+``Qt4::QtScript``
+ The QtScript target
+``Qt4::QtScriptTools``
+ The QtScriptTools target
+``Qt4::QtSql``
+ The QtSql target
+``Qt4::QtSvg``
+ The QtSvg target
+``Qt4::QtTest``
+ The QtTest target
+``Qt4::QtUiTools``
+ The QtUiTools target
+``Qt4::QtWebKit``
+ The QtWebKit target
+``Qt4::QtXml``
+ The QtXml target
+``Qt4::QtXmlPatterns``
+ The QtXmlPatterns target
+``Qt4::phonon``
+ The phonon target
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+  Below is a detailed list of variables that FindQt4.cmake sets.
+
+``Qt4_FOUND``
+ If false, don't try to use Qt 4.
+``QT_FOUND``
+ If false, don't try to use Qt. This variable is for compatibility only.
+``QT4_FOUND``
+ If false, don't try to use Qt 4. This variable is for compatibility only.
+``QT_VERSION_MAJOR``
+ The major version of Qt found.
+``QT_VERSION_MINOR``
+ The minor version of Qt found.
+``QT_VERSION_PATCH``
+ The patch version of Qt found.
+#]=======================================================================]
+
+# Use find_package( Qt4 COMPONENTS ... ) to enable modules
+if( Qt4_FIND_COMPONENTS )
+  foreach( component ${Qt4_FIND_COMPONENTS} )
+    string( TOUPPER ${component} _COMPONENT )
+    set( QT_USE_${_COMPONENT} 1 )
+  endforeach()
+
+  # To make sure we don't use QtCore or QtGui when not in COMPONENTS
+  if(NOT QT_USE_QTCORE)
+    set( QT_DONT_USE_QTCORE 1 )
+  endif()
+
+  if(NOT QT_USE_QTGUI)
+    set( QT_DONT_USE_QTGUI 1 )
+  endif()
+
+endif()
+
+# If Qt3 has already been found, fail.
+if(QT_QT_LIBRARY)
+  if(Qt4_FIND_REQUIRED)
+    message( FATAL_ERROR "Qt3 and Qt4 cannot be used together in one project.  If switching to Qt4, the CMakeCache.txt needs to be cleaned.")
+  else()
+    if(NOT Qt4_FIND_QUIETLY)
+      message( STATUS    "Qt3 and Qt4 cannot be used together in one project.  If switching to Qt4, the CMakeCache.txt needs to be cleaned.")
+    endif()
+    return()
+  endif()
+endif()
+
+
+include(${CMAKE_CURRENT_LIST_DIR}/CheckCXXSymbolExists.cmake)
+include(${CMAKE_CURRENT_LIST_DIR}/MacroAddFileDependencies.cmake)
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+include(${CMAKE_CURRENT_LIST_DIR}/CMakePushCheckState.cmake)
+
+set(QT_USE_FILE ${CMAKE_ROOT}/Modules/UseQt4.cmake)
+
+set( QT_DEFINITIONS "")
+
+# convenience macro for dealing with debug/release library names
+macro (_QT4_ADJUST_LIB_VARS _camelCaseBasename)
+
+  string(TOUPPER "${_camelCaseBasename}" basename)
+
+  # The name of the imported targets, i.e. the prefix "Qt4::" must not change,
+  # since it is stored in EXPORT-files as name of a required library. If the name would change
+  # here, this would lead to the imported Qt4-library targets not being resolved by cmake anymore.
+  if (QT_${basename}_LIBRARY_RELEASE OR QT_${basename}_LIBRARY_DEBUG)
+
+    if(NOT TARGET Qt4::${_camelCaseBasename})
+      add_library(Qt4::${_camelCaseBasename} UNKNOWN IMPORTED )
+
+      if (QT_${basename}_LIBRARY_RELEASE)
+        set_property(TARGET Qt4::${_camelCaseBasename} APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
+        set(_location "${QT_${basename}_LIBRARY_RELEASE}")
+        if(QT_USE_FRAMEWORKS AND EXISTS ${_location}/${_camelCaseBasename})
+          set_property(TARGET Qt4::${_camelCaseBasename}        PROPERTY IMPORTED_LOCATION_RELEASE "${_location}/${_camelCaseBasename}" )
+        else()
+          set_property(TARGET Qt4::${_camelCaseBasename}        PROPERTY IMPORTED_LOCATION_RELEASE "${_location}" )
+        endif()
+      endif ()
+
+      if (QT_${basename}_LIBRARY_DEBUG)
+        set_property(TARGET Qt4::${_camelCaseBasename} APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
+        set(_location "${QT_${basename}_LIBRARY_DEBUG}")
+        if(QT_USE_FRAMEWORKS AND EXISTS ${_location}/${_camelCaseBasename})
+          set_property(TARGET Qt4::${_camelCaseBasename}        PROPERTY IMPORTED_LOCATION_DEBUG "${_location}/${_camelCaseBasename}" )
+        else()
+          set_property(TARGET Qt4::${_camelCaseBasename}        PROPERTY IMPORTED_LOCATION_DEBUG "${_location}" )
+        endif()
+      endif ()
+      set_property(TARGET Qt4::${_camelCaseBasename} PROPERTY
+        INTERFACE_INCLUDE_DIRECTORIES
+          "${QT_${basename}_INCLUDE_DIR}"
+      )
+      string(REGEX REPLACE "^QT" "" _stemname ${basename})
+      set_property(TARGET Qt4::${_camelCaseBasename} PROPERTY
+        INTERFACE_COMPILE_DEFINITIONS
+          "QT_${_stemname}_LIB"
+      )
+    endif()
+
+    # If QT_USE_IMPORTED_TARGETS is enabled, the QT_QTFOO_LIBRARY variables are set to point at these
+    # imported targets. This works better in general, and is also in almost all cases fully
+    # backward compatible. The only issue is when a project A which had this enabled then exports its
+    # libraries via export or export_library_dependencies(). In this case the libraries from project
+    # A will depend on the imported Qt targets, and the names of these imported targets will be stored
+    # in the dependency files on disk. This means when a project B then uses project A, these imported
+    # targets must be created again, otherwise e.g. "Qt4__QtCore" will be interpreted as name of a
+    # library file on disk, and not as a target, and linking will fail:
+    if(QT_USE_IMPORTED_TARGETS)
+        set(QT_${basename}_LIBRARY       Qt4::${_camelCaseBasename} )
+        set(QT_${basename}_LIBRARIES     Qt4::${_camelCaseBasename} )
+    else()
+
+      # if the release- as well as the debug-version of the library have been found:
+      if (QT_${basename}_LIBRARY_DEBUG AND QT_${basename}_LIBRARY_RELEASE)
+        # if the generator is multi-config or if CMAKE_BUILD_TYPE is set for
+        # single-config generators, set optimized and debug libraries
+        get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
+        if(_isMultiConfig OR CMAKE_BUILD_TYPE)
+          set(QT_${basename}_LIBRARY       optimized ${QT_${basename}_LIBRARY_RELEASE} debug ${QT_${basename}_LIBRARY_DEBUG})
+        else()
+          # For single-config generators where CMAKE_BUILD_TYPE has no value,
+          # just use the release libraries
+          set(QT_${basename}_LIBRARY       ${QT_${basename}_LIBRARY_RELEASE} )
+        endif()
+        set(QT_${basename}_LIBRARIES       optimized ${QT_${basename}_LIBRARY_RELEASE} debug ${QT_${basename}_LIBRARY_DEBUG})
+      endif ()
+
+      # if only the release version was found, set the debug variable also to the release version
+      if (QT_${basename}_LIBRARY_RELEASE AND NOT QT_${basename}_LIBRARY_DEBUG)
+        set(QT_${basename}_LIBRARY_DEBUG ${QT_${basename}_LIBRARY_RELEASE})
+        set(QT_${basename}_LIBRARY       ${QT_${basename}_LIBRARY_RELEASE})
+        set(QT_${basename}_LIBRARIES     ${QT_${basename}_LIBRARY_RELEASE})
+      endif ()
+
+      # if only the debug version was found, set the release variable also to the debug version
+      if (QT_${basename}_LIBRARY_DEBUG AND NOT QT_${basename}_LIBRARY_RELEASE)
+        set(QT_${basename}_LIBRARY_RELEASE ${QT_${basename}_LIBRARY_DEBUG})
+        set(QT_${basename}_LIBRARY         ${QT_${basename}_LIBRARY_DEBUG})
+        set(QT_${basename}_LIBRARIES       ${QT_${basename}_LIBRARY_DEBUG})
+      endif ()
+
+      # put the value in the cache:
+      set(QT_${basename}_LIBRARY ${QT_${basename}_LIBRARY} CACHE STRING "The Qt ${basename} library" FORCE)
+
+    endif()
+
+    set(QT_${basename}_FOUND 1)
+
+  else ()
+
+    set(QT_${basename}_LIBRARY "" CACHE STRING "The Qt ${basename} library" FORCE)
+
+  endif ()
+
+  if (QT_${basename}_INCLUDE_DIR)
+    #add the include directory to QT_INCLUDES
+    set(QT_INCLUDES "${QT_${basename}_INCLUDE_DIR}" ${QT_INCLUDES})
+  endif ()
+
+  # Make variables changeable to the advanced user
+  mark_as_advanced(QT_${basename}_LIBRARY QT_${basename}_LIBRARY_RELEASE QT_${basename}_LIBRARY_DEBUG QT_${basename}_INCLUDE_DIR)
+endmacro ()
+
+function(_QT4_QUERY_QMAKE VAR RESULT)
+  execute_process(COMMAND "${QT_QMAKE_EXECUTABLE}" -query ${VAR}
+    RESULT_VARIABLE return_code
+    OUTPUT_VARIABLE output
+    OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE)
+  if(NOT return_code)
+    file(TO_CMAKE_PATH "${output}" output)
+    set(${RESULT} ${output} PARENT_SCOPE)
+  endif()
+endfunction()
+
+function(_QT4_GET_VERSION_COMPONENTS VERSION RESULT_MAJOR RESULT_MINOR RESULT_PATCH)
+  string(REGEX REPLACE "^([0-9]+)\\.[0-9]+\\.[0-9]+.*" "\\1" QT_VERSION_MAJOR "${QTVERSION}")
+  string(REGEX REPLACE "^[0-9]+\\.([0-9]+)\\.[0-9]+.*" "\\1" QT_VERSION_MINOR "${QTVERSION}")
+  string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" QT_VERSION_PATCH "${QTVERSION}")
+
+  set(${RESULT_MAJOR} ${QT_VERSION_MAJOR} PARENT_SCOPE)
+  set(${RESULT_MINOR} ${QT_VERSION_MINOR} PARENT_SCOPE)
+  set(${RESULT_PATCH} ${QT_VERSION_PATCH} PARENT_SCOPE)
+endfunction()
+
+function(_QT4_FIND_QMAKE QMAKE_NAMES QMAKE_RESULT VERSION_RESULT)
+  list(LENGTH QMAKE_NAMES QMAKE_NAMES_LEN)
+  if(${QMAKE_NAMES_LEN} EQUAL 0)
+    return()
+  endif()
+  list(GET QMAKE_NAMES 0 QMAKE_NAME)
+
+  get_filename_component(qt_install_version "[HKEY_CURRENT_USER\\Software\\trolltech\\Versions;DefaultQtVersion]" NAME)
+
+  find_program(QT_QMAKE_EXECUTABLE NAMES ${QMAKE_NAME}
+    PATHS
+      ENV QTDIR
+      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Versions\\${qt_install_version};InstallDir]"
+    PATH_SUFFIXES bin
+    DOC "The qmake executable for the Qt installation to use"
+  )
+
+  set(major 0)
+  if (QT_QMAKE_EXECUTABLE)
+    _qt4_query_qmake(QT_VERSION QTVERSION)
+    _qt4_get_version_components("${QTVERSION}" major minor patch)
+  endif()
+
+  if (NOT QT_QMAKE_EXECUTABLE OR NOT "${major}" EQUAL 4)
+    set(curr_qmake "${QT_QMAKE_EXECUTABLE}")
+    set(curr_qt_version "${QTVERSION}")
+
+    set(QT_QMAKE_EXECUTABLE NOTFOUND CACHE FILEPATH "" FORCE)
+    list(REMOVE_AT QMAKE_NAMES 0)
+    _qt4_find_qmake("${QMAKE_NAMES}" QMAKE QTVERSION)
+
+    _qt4_get_version_components("${QTVERSION}" major minor patch)
+    if (NOT ${major} EQUAL 4)
+      # Restore possibly found qmake and it's version; these are used later
+      # in error message if incorrect version is found
+      set(QT_QMAKE_EXECUTABLE "${curr_qmake}" CACHE FILEPATH "" FORCE)
+      set(QTVERSION "${curr_qt_version}")
+    endif()
+
+  endif()
+
+
+  set(${QMAKE_RESULT} "${QT_QMAKE_EXECUTABLE}" PARENT_SCOPE)
+  set(${VERSION_RESULT} "${QTVERSION}" PARENT_SCOPE)
+endfunction()
+
+
+set(QT4_INSTALLED_VERSION_TOO_OLD FALSE)
+
+set(_QT4_QMAKE_NAMES qmake qmake4 qmake-qt4 qmake-mac)
+_qt4_find_qmake("${_QT4_QMAKE_NAMES}" QT_QMAKE_EXECUTABLE QTVERSION)
+
+if (QT_QMAKE_EXECUTABLE AND
+  QTVERSION VERSION_GREATER 3 AND QTVERSION VERSION_LESS 5)
+
+  if (Qt5Core_FOUND)
+    # Qt5CoreConfig sets QT_MOC_EXECUTABLE as a non-cache variable to the Qt 5
+    # path to moc.  Unset that variable when Qt 4 and 5 are used together, so
+    # that when find_program looks for moc, it is not set to the Qt 5 version.
+    # If FindQt4 has already put the Qt 4 path in the cache, the unset()
+    # command 'unhides' the (correct) cache variable.
+    unset(QT_MOC_EXECUTABLE)
+  endif()
+  if (QT_QMAKE_EXECUTABLE_LAST)
+    string(COMPARE NOTEQUAL "${QT_QMAKE_EXECUTABLE_LAST}" "${QT_QMAKE_EXECUTABLE}" QT_QMAKE_CHANGED)
+  endif()
+  set(QT_QMAKE_EXECUTABLE_LAST "${QT_QMAKE_EXECUTABLE}" CACHE INTERNAL "" FORCE)
+
+  _qt4_get_version_components("${QTVERSION}" QT_VERSION_MAJOR QT_VERSION_MINOR QT_VERSION_PATCH)
+
+  # ask qmake for the mkspecs directory
+  # we do this first because QT_LIBINFIX might be set
+  if (NOT QT_MKSPECS_DIR  OR  QT_QMAKE_CHANGED)
+    _qt4_query_qmake(QMAKE_MKSPECS qt_mkspecs_dirs)
+    # do not replace : on windows as it might be a drive letter
+    # and windows should already use ; as a separator
+    if(NOT WIN32)
+      string(REPLACE ":" ";" qt_mkspecs_dirs "${qt_mkspecs_dirs}")
+    endif()
+
+    find_path(QT_MKSPECS_DIR NAMES qconfig.pri
+      HINTS ${qt_mkspecs_dirs}
+      PATH_SUFFIXES mkspecs share/qt4/mkspecs
+      DOC "The location of the Qt mkspecs containing qconfig.pri")
+  endif()
+
+  if(EXISTS "${QT_MKSPECS_DIR}/qconfig.pri")
+    file(READ ${QT_MKSPECS_DIR}/qconfig.pri _qconfig_FILE_contents)
+    string(REGEX MATCH "QT_CONFIG[^\n]+" QT_QCONFIG "${_qconfig_FILE_contents}")
+    string(REGEX MATCH "CONFIG[^\n]+" QT_CONFIG "${_qconfig_FILE_contents}")
+    string(REGEX MATCH "EDITION[^\n]+" QT_EDITION "${_qconfig_FILE_contents}")
+    string(REGEX MATCH "QT_LIBINFIX[^\n]+" _qconfig_qt_libinfix "${_qconfig_FILE_contents}")
+    string(REGEX REPLACE "QT_LIBINFIX *= *([^\n]*)" "\\1" QT_LIBINFIX "${_qconfig_qt_libinfix}")
+  endif()
+  if("${QT_EDITION}" MATCHES "DesktopLight")
+    set(QT_EDITION_DESKTOPLIGHT 1)
+  endif()
+
+  # ask qmake for the library dir as a hint, then search for QtCore library and use that as a reference for finding the
+  # others and for setting QT_LIBRARY_DIR
+  if (NOT (QT_QTCORE_LIBRARY_RELEASE OR QT_QTCORE_LIBRARY_DEBUG)  OR QT_QMAKE_CHANGED)
+    _qt4_query_qmake(QT_INSTALL_LIBS QT_LIBRARY_DIR_TMP)
+    set(QT_QTCORE_LIBRARY_RELEASE NOTFOUND)
+    set(QT_QTCORE_LIBRARY_DEBUG NOTFOUND)
+    find_library(QT_QTCORE_LIBRARY_RELEASE
+                 NAMES QtCore${QT_LIBINFIX} QtCore${QT_LIBINFIX}4
+                 HINTS ${QT_LIBRARY_DIR_TMP}
+                 NO_DEFAULT_PATH
+        )
+    find_library(QT_QTCORE_LIBRARY_DEBUG
+                 NAMES QtCore${QT_LIBINFIX}_debug QtCore${QT_LIBINFIX}d QtCore${QT_LIBINFIX}d4
+                 HINTS ${QT_LIBRARY_DIR_TMP}
+                 NO_DEFAULT_PATH
+        )
+
+    if(NOT QT_QTCORE_LIBRARY_RELEASE AND NOT QT_QTCORE_LIBRARY_DEBUG)
+      find_library(QT_QTCORE_LIBRARY_RELEASE
+                   NAMES QtCore${QT_LIBINFIX} QtCore${QT_LIBINFIX}4
+                   HINTS ${QT_LIBRARY_DIR_TMP}
+          )
+      find_library(QT_QTCORE_LIBRARY_DEBUG
+                   NAMES QtCore${QT_LIBINFIX}_debug QtCore${QT_LIBINFIX}d QtCore${QT_LIBINFIX}d4
+                   HINTS ${QT_LIBRARY_DIR_TMP}
+          )
+    endif()
+
+    # try dropping a hint if trying to use Visual Studio with Qt built by MinGW
+    if(NOT QT_QTCORE_LIBRARY_RELEASE AND MSVC)
+      if(EXISTS ${QT_LIBRARY_DIR_TMP}/libqtmain.a)
+        message( FATAL_ERROR "It appears you're trying to use Visual Studio with Qt built by MinGW.  Those compilers do not produce code compatible with each other.")
+      endif()
+    endif()
+
+  endif ()
+
+  # set QT_LIBRARY_DIR based on location of QtCore found.
+  if(QT_QTCORE_LIBRARY_RELEASE)
+    get_filename_component(QT_LIBRARY_DIR_TMP "${QT_QTCORE_LIBRARY_RELEASE}" PATH)
+    set(QT_LIBRARY_DIR ${QT_LIBRARY_DIR_TMP} CACHE INTERNAL "Qt library dir" FORCE)
+    set(QT_QTCORE_FOUND 1)
+  elseif(QT_QTCORE_LIBRARY_DEBUG)
+    get_filename_component(QT_LIBRARY_DIR_TMP "${QT_QTCORE_LIBRARY_DEBUG}" PATH)
+    set(QT_LIBRARY_DIR ${QT_LIBRARY_DIR_TMP} CACHE INTERNAL "Qt library dir" FORCE)
+    set(QT_QTCORE_FOUND 1)
+  else()
+    if(NOT Qt4_FIND_QUIETLY)
+      message(WARNING
+        "${QT_QMAKE_EXECUTABLE} reported QT_INSTALL_LIBS as "
+        "\"${QT_LIBRARY_DIR_TMP}\" "
+        "but QtCore could not be found there.  "
+        "Qt is NOT installed correctly for the target build environment.")
+    endif()
+    set(Qt4_FOUND FALSE)
+    if(Qt4_FIND_REQUIRED)
+      message( FATAL_ERROR "Could NOT find QtCore. Check ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log for more details.")
+    else()
+      return()
+    endif()
+  endif()
+
+  # ask qmake for the binary dir
+  if (NOT QT_BINARY_DIR  OR  QT_QMAKE_CHANGED)
+    _qt4_query_qmake(QT_INSTALL_BINS qt_bins)
+    set(QT_BINARY_DIR ${qt_bins} CACHE INTERNAL "" FORCE)
+  endif ()
+
+  if (APPLE)
+    set(CMAKE_FIND_FRAMEWORK_OLD ${CMAKE_FIND_FRAMEWORK})
+    if (EXISTS ${QT_LIBRARY_DIR}/QtCore.framework)
+      set(QT_USE_FRAMEWORKS ON CACHE INTERNAL "" FORCE)
+      set(CMAKE_FIND_FRAMEWORK FIRST)
+    else ()
+      set(QT_USE_FRAMEWORKS OFF CACHE INTERNAL "" FORCE)
+      set(CMAKE_FIND_FRAMEWORK LAST)
+    endif ()
+  endif ()
+
+  # ask qmake for the include dir
+  if (QT_LIBRARY_DIR AND (NOT QT_QTCORE_INCLUDE_DIR OR NOT QT_HEADERS_DIR OR  QT_QMAKE_CHANGED))
+      _qt4_query_qmake(QT_INSTALL_HEADERS qt_headers)
+      set(QT_QTCORE_INCLUDE_DIR NOTFOUND)
+      find_path(QT_QTCORE_INCLUDE_DIR QtCore
+                HINTS ${qt_headers} ${QT_LIBRARY_DIR}
+                PATH_SUFFIXES QtCore qt4/QtCore
+                NO_DEFAULT_PATH
+        )
+      if(NOT QT_QTCORE_INCLUDE_DIR)
+        find_path(QT_QTCORE_INCLUDE_DIR QtCore
+                  HINTS ${qt_headers} ${QT_LIBRARY_DIR}
+                  PATH_SUFFIXES QtCore qt4/QtCore
+          )
+      endif()
+
+      # Set QT_HEADERS_DIR based on finding QtCore header
+      if(QT_QTCORE_INCLUDE_DIR)
+        if(QT_USE_FRAMEWORKS)
+          set(QT_HEADERS_DIR "${qt_headers}" CACHE INTERNAL "" FORCE)
+        else()
+          get_filename_component(qt_headers "${QT_QTCORE_INCLUDE_DIR}/../" ABSOLUTE)
+          set(QT_HEADERS_DIR "${qt_headers}" CACHE INTERNAL "" FORCE)
+        endif()
+      else()
+        message("Warning: QT_QMAKE_EXECUTABLE reported QT_INSTALL_HEADERS as ${qt_headers}")
+        message("Warning: But QtCore couldn't be found.  Qt must NOT be installed correctly.")
+      endif()
+  endif()
+
+  if(APPLE)
+    set(CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK_OLD})
+  endif()
+
+  # Set QT_INCLUDE_DIR based on QT_HEADERS_DIR
+  if(QT_HEADERS_DIR)
+    if(QT_USE_FRAMEWORKS)
+      # Qt/Mac frameworks has two include dirs.
+      # One is the framework include for which CMake will add a -F flag
+      # and the other is an include dir for non-framework Qt modules
+      set(QT_INCLUDE_DIR ${QT_HEADERS_DIR} ${QT_QTCORE_LIBRARY_RELEASE} )
+    else()
+      set(QT_INCLUDE_DIR ${QT_HEADERS_DIR})
+    endif()
+  endif()
+
+  # Set QT_INCLUDES
+  set( QT_INCLUDES ${QT_MKSPECS_DIR}/default ${QT_INCLUDE_DIR} ${QT_QTCORE_INCLUDE_DIR})
+
+
+  # ask qmake for the documentation directory
+  if (QT_LIBRARY_DIR AND NOT QT_DOC_DIR  OR  QT_QMAKE_CHANGED)
+    _qt4_query_qmake(QT_INSTALL_DOCS qt_doc_dir)
+    set(QT_DOC_DIR ${qt_doc_dir} CACHE PATH "The location of the Qt docs" FORCE)
+  endif ()
+
+
+  # ask qmake for the plugins directory
+  if (QT_LIBRARY_DIR AND NOT QT_PLUGINS_DIR  OR  QT_QMAKE_CHANGED)
+    _qt4_query_qmake(QT_INSTALL_PLUGINS qt_plugins_dir)
+    if(CMAKE_CROSSCOMPILING OR NOT qt_plugins_dir)
+      find_path(QT_PLUGINS_DIR
+        NAMES accessible bearer codecs designer graphicssystems iconengines imageformats inputmethods qmltooling script sqldrivers
+        HINTS ${qt_plugins_dir}
+        PATH_SUFFIXES plugins lib/qt4/plugins
+        DOC "The location of the Qt plugins")
+    else()
+      set(QT_PLUGINS_DIR ${qt_plugins_dir} CACHE PATH "The location of the Qt plugins")
+    endif()
+  endif ()
+
+  # ask qmake for the translations directory
+  if (QT_LIBRARY_DIR AND NOT QT_TRANSLATIONS_DIR  OR  QT_QMAKE_CHANGED)
+    _qt4_query_qmake(QT_INSTALL_TRANSLATIONS qt_translations_dir)
+    set(QT_TRANSLATIONS_DIR ${qt_translations_dir} CACHE PATH "The location of the Qt translations" FORCE)
+  endif ()
+
+  # ask qmake for the imports directory
+  if (QT_LIBRARY_DIR AND NOT QT_IMPORTS_DIR OR QT_QMAKE_CHANGED)
+    _qt4_query_qmake(QT_INSTALL_IMPORTS qt_imports_dir)
+    if(CMAKE_CROSSCOMPILING OR NOT qt_imports_dir)
+      find_path(QT_IMPORTS_DIR NAMES Qt
+        HINTS ${qt_imports_dir}
+        PATH_SUFFIXES imports lib/qt4/imports
+        DOC "The location of the Qt imports")
+    else()
+      set(QT_IMPORTS_DIR ${qt_imports_dir} CACHE PATH "The location of the Qt imports")
+    endif()
+  endif ()
+
+  # Make variables changeable to the advanced user
+  mark_as_advanced( QT_LIBRARY_DIR QT_DOC_DIR QT_MKSPECS_DIR
+                    QT_PLUGINS_DIR QT_TRANSLATIONS_DIR)
+
+
+
+
+  #############################################
+  #
+  # Find out what window system we're using
+  #
+  #############################################
+  cmake_push_check_state()
+  # Add QT_INCLUDE_DIR to CMAKE_REQUIRED_INCLUDES
+  list(APPEND CMAKE_REQUIRED_INCLUDES "${QT_INCLUDE_DIR}")
+  set(CMAKE_REQUIRED_QUIET ${Qt4_FIND_QUIETLY})
+  # Check for Window system symbols (note: only one should end up being set)
+  CHECK_CXX_SYMBOL_EXISTS(Q_WS_X11 "QtCore/qglobal.h" Q_WS_X11)
+  CHECK_CXX_SYMBOL_EXISTS(Q_WS_WIN "QtCore/qglobal.h" Q_WS_WIN)
+  CHECK_CXX_SYMBOL_EXISTS(Q_WS_QWS "QtCore/qglobal.h" Q_WS_QWS)
+  CHECK_CXX_SYMBOL_EXISTS(Q_WS_MAC "QtCore/qglobal.h" Q_WS_MAC)
+  if(Q_WS_MAC)
+    if(QT_QMAKE_CHANGED)
+      unset(QT_MAC_USE_COCOA CACHE)
+    endif()
+    CHECK_CXX_SYMBOL_EXISTS(QT_MAC_USE_COCOA "QtCore/qconfig.h" QT_MAC_USE_COCOA)
+  endif()
+
+  if (QT_QTCOPY_REQUIRED)
+     CHECK_CXX_SYMBOL_EXISTS(QT_IS_QTCOPY "QtCore/qglobal.h" QT_KDE_QT_COPY)
+     if (NOT QT_IS_QTCOPY)
+        message(FATAL_ERROR "qt-copy is required, but hasn't been found")
+     endif ()
+  endif ()
+
+  cmake_pop_check_state()
+  #
+  #############################################
+
+
+
+  ########################################
+  #
+  #       Setting the INCLUDE-Variables
+  #
+  ########################################
+
+  set(QT_MODULES QtGui Qt3Support QtSvg QtScript QtTest QtUiTools
+                 QtHelp QtWebKit QtXmlPatterns phonon QtNetwork QtMultimedia
+                 QtNsPlugin QtOpenGL QtSql QtXml QtDesigner QtDBus QtScriptTools
+                 QtDeclarative)
+
+  if(Q_WS_X11)
+    set(QT_MODULES ${QT_MODULES} QtMotif)
+  endif()
+
+  if(QT_QMAKE_CHANGED)
+    foreach(QT_MODULE ${QT_MODULES})
+      string(TOUPPER ${QT_MODULE} _upper_qt_module)
+      set(QT_${_upper_qt_module}_INCLUDE_DIR NOTFOUND)
+      set(QT_${_upper_qt_module}_LIBRARY_RELEASE NOTFOUND)
+      set(QT_${_upper_qt_module}_LIBRARY_DEBUG NOTFOUND)
+    endforeach()
+    set(QT_QTDESIGNERCOMPONENTS_INCLUDE_DIR NOTFOUND)
+    set(QT_QTDESIGNERCOMPONENTS_LIBRARY_RELEASE NOTFOUND)
+    set(QT_QTDESIGNERCOMPONENTS_LIBRARY_DEBUG NOTFOUND)
+    set(QT_QTASSISTANTCLIENT_INCLUDE_DIR NOTFOUND)
+    set(QT_QTASSISTANTCLIENT_LIBRARY_RELEASE NOTFOUND)
+    set(QT_QTASSISTANTCLIENT_LIBRARY_DEBUG NOTFOUND)
+    set(QT_QTASSISTANT_INCLUDE_DIR NOTFOUND)
+    set(QT_QTASSISTANT_LIBRARY_RELEASE NOTFOUND)
+    set(QT_QTASSISTANT_LIBRARY_DEBUG NOTFOUND)
+    set(QT_QTCLUCENE_LIBRARY_RELEASE NOTFOUND)
+    set(QT_QTCLUCENE_LIBRARY_DEBUG NOTFOUND)
+    set(QT_QAXCONTAINER_INCLUDE_DIR NOTFOUND)
+    set(QT_QAXCONTAINER_LIBRARY_RELEASE NOTFOUND)
+    set(QT_QAXCONTAINER_LIBRARY_DEBUG NOTFOUND)
+    set(QT_QAXSERVER_INCLUDE_DIR NOTFOUND)
+    set(QT_QAXSERVER_LIBRARY_RELEASE NOTFOUND)
+    set(QT_QAXSERVER_LIBRARY_DEBUG NOTFOUND)
+    if(Q_WS_WIN)
+      set(QT_QTMAIN_LIBRARY_DEBUG NOTFOUND)
+      set(QT_QTMAIN_LIBRARY_RELEASE NOTFOUND)
+    endif()
+  endif()
+
+  foreach(QT_MODULE ${QT_MODULES})
+    string(TOUPPER ${QT_MODULE} _upper_qt_module)
+    find_path(QT_${_upper_qt_module}_INCLUDE_DIR ${QT_MODULE}
+              PATHS
+              ${QT_HEADERS_DIR}/${QT_MODULE}
+              ${QT_LIBRARY_DIR}/${QT_MODULE}.framework/Headers
+              NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
+      )
+    # phonon doesn't seem consistent, let's try phonondefs.h for some
+    # installations
+    if(${QT_MODULE} STREQUAL "phonon")
+      find_path(QT_${_upper_qt_module}_INCLUDE_DIR phonondefs.h
+                PATHS
+                ${QT_HEADERS_DIR}/${QT_MODULE}
+                ${QT_LIBRARY_DIR}/${QT_MODULE}.framework/Headers
+                NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
+        )
+    endif()
+  endforeach()
+
+  if(Q_WS_WIN)
+    set(QT_MODULES ${QT_MODULES} QAxContainer QAxServer)
+    # Set QT_AXCONTAINER_INCLUDE_DIR and QT_AXSERVER_INCLUDE_DIR
+    find_path(QT_QAXCONTAINER_INCLUDE_DIR ActiveQt
+      PATHS ${QT_HEADERS_DIR}/ActiveQt
+      NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
+      )
+    find_path(QT_QAXSERVER_INCLUDE_DIR ActiveQt
+      PATHS ${QT_HEADERS_DIR}/ActiveQt
+      NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
+      )
+  endif()
+
+  # Set QT_QTDESIGNERCOMPONENTS_INCLUDE_DIR
+  find_path(QT_QTDESIGNERCOMPONENTS_INCLUDE_DIR QDesignerComponents
+    PATHS
+    ${QT_HEADERS_DIR}/QtDesigner
+    ${QT_LIBRARY_DIR}/QtDesigner.framework/Headers
+    NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
+    )
+
+  # Set QT_QTASSISTANT_INCLUDE_DIR
+  find_path(QT_QTASSISTANT_INCLUDE_DIR QtAssistant
+    PATHS
+    ${QT_HEADERS_DIR}/QtAssistant
+    ${QT_LIBRARY_DIR}/QtAssistant.framework/Headers
+    NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
+    )
+
+  # Set QT_QTASSISTANTCLIENT_INCLUDE_DIR
+  find_path(QT_QTASSISTANTCLIENT_INCLUDE_DIR QAssistantClient
+    PATHS
+    ${QT_HEADERS_DIR}/QtAssistant
+    ${QT_LIBRARY_DIR}/QtAssistant.framework/Headers
+    NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
+    )
+
+  ########################################
+  #
+  #       Setting the LIBRARY-Variables
+  #
+  ########################################
+
+  # find the libraries
+  foreach(QT_MODULE ${QT_MODULES})
+    string(TOUPPER ${QT_MODULE} _upper_qt_module)
+    find_library(QT_${_upper_qt_module}_LIBRARY_RELEASE
+                 NAMES ${QT_MODULE}${QT_LIBINFIX} ${QT_MODULE}${QT_LIBINFIX}4
+                 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
+        )
+    find_library(QT_${_upper_qt_module}_LIBRARY_DEBUG
+                 NAMES ${QT_MODULE}${QT_LIBINFIX}_debug ${QT_MODULE}${QT_LIBINFIX}d ${QT_MODULE}${QT_LIBINFIX}d4
+                 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
+        )
+    if(QT_${_upper_qt_module}_LIBRARY_RELEASE MATCHES "/${QT_MODULE}\\.framework$")
+      if(NOT EXISTS "${QT_${_upper_qt_module}_LIBRARY_RELEASE}/${QT_MODULE}")
+        # Release framework library file does not exist... Force to NOTFOUND:
+        set(QT_${_upper_qt_module}_LIBRARY_RELEASE "QT_${_upper_qt_module}_LIBRARY_RELEASE-NOTFOUND" CACHE FILEPATH "Path to a library." FORCE)
+      endif()
+    endif()
+    if(QT_${_upper_qt_module}_LIBRARY_DEBUG MATCHES "/${QT_MODULE}\\.framework$")
+      if(NOT EXISTS "${QT_${_upper_qt_module}_LIBRARY_DEBUG}/${QT_MODULE}")
+        # Debug framework library file does not exist... Force to NOTFOUND:
+        set(QT_${_upper_qt_module}_LIBRARY_DEBUG "QT_${_upper_qt_module}_LIBRARY_DEBUG-NOTFOUND" CACHE FILEPATH "Path to a library." FORCE)
+      endif()
+    endif()
+  endforeach()
+
+  # QtUiTools is sometimes not in the same directory as the other found libraries
+  # e.g. on Mac, its never a framework like the others are
+  if(QT_QTCORE_LIBRARY_RELEASE AND NOT QT_QTUITOOLS_LIBRARY_RELEASE)
+    find_library(QT_QTUITOOLS_LIBRARY_RELEASE NAMES QtUiTools${QT_LIBINFIX} PATHS ${QT_LIBRARY_DIR})
+  endif()
+
+  # Set QT_QTDESIGNERCOMPONENTS_LIBRARY
+  find_library(QT_QTDESIGNERCOMPONENTS_LIBRARY_RELEASE NAMES QtDesignerComponents${QT_LIBINFIX} QtDesignerComponents${QT_LIBINFIX}4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
+  find_library(QT_QTDESIGNERCOMPONENTS_LIBRARY_DEBUG   NAMES QtDesignerComponents${QT_LIBINFIX}_debug QtDesignerComponents${QT_LIBINFIX}d QtDesignerComponents${QT_LIBINFIX}d4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
+
+  # Set QT_QTMAIN_LIBRARY
+  if(Q_WS_WIN)
+    find_library(QT_QTMAIN_LIBRARY_RELEASE NAMES qtmain${QT_LIBINFIX} PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
+    find_library(QT_QTMAIN_LIBRARY_DEBUG NAMES qtmain${QT_LIBINFIX}d PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
+  endif()
+
+  # Set QT_QTASSISTANTCLIENT_LIBRARY
+  find_library(QT_QTASSISTANTCLIENT_LIBRARY_RELEASE NAMES QtAssistantClient${QT_LIBINFIX} QtAssistantClient${QT_LIBINFIX}4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
+  find_library(QT_QTASSISTANTCLIENT_LIBRARY_DEBUG   NAMES QtAssistantClient${QT_LIBINFIX}_debug QtAssistantClient${QT_LIBINFIX}d QtAssistantClient${QT_LIBINFIX}d4 PATHS ${QT_LIBRARY_DIR}  NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
+
+  # Set QT_QTASSISTANT_LIBRARY
+  find_library(QT_QTASSISTANT_LIBRARY_RELEASE NAMES QtAssistantClient${QT_LIBINFIX} QtAssistantClient${QT_LIBINFIX}4 QtAssistant${QT_LIBINFIX} QtAssistant${QT_LIBINFIX}4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
+  find_library(QT_QTASSISTANT_LIBRARY_DEBUG   NAMES QtAssistantClient${QT_LIBINFIX}_debug QtAssistantClient${QT_LIBINFIX}d QtAssistantClient${QT_LIBINFIX}d4 QtAssistant${QT_LIBINFIX}_debug QtAssistant${QT_LIBINFIX}d4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
+
+  # Set QT_QTHELP_LIBRARY
+  find_library(QT_QTCLUCENE_LIBRARY_RELEASE NAMES QtCLucene${QT_LIBINFIX} QtCLucene${QT_LIBINFIX}4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
+  find_library(QT_QTCLUCENE_LIBRARY_DEBUG   NAMES QtCLucene${QT_LIBINFIX}_debug QtCLucene${QT_LIBINFIX}d QtCLucene${QT_LIBINFIX}d4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
+  if(Q_WS_MAC AND QT_QTCORE_LIBRARY_RELEASE AND NOT QT_QTCLUCENE_LIBRARY_RELEASE)
+    find_library(QT_QTCLUCENE_LIBRARY_RELEASE NAMES QtCLucene${QT_LIBINFIX} PATHS ${QT_LIBRARY_DIR})
+  endif()
+
+
+  ############################################
+  #
+  # Check the existence of the libraries.
+  #
+  ############################################
+
+
+  macro(_qt4_add_target_depends_internal _QT_MODULE _PROPERTY)
+    if (TARGET Qt4::${_QT_MODULE})
+      foreach(_DEPEND ${ARGN})
+        set(_VALID_DEPENDS)
+        if (TARGET Qt4::Qt${_DEPEND})
+          list(APPEND _VALID_DEPENDS Qt4::Qt${_DEPEND})
+        endif()
+        if (_VALID_DEPENDS)
+          set_property(TARGET Qt4::${_QT_MODULE} APPEND PROPERTY
+            ${_PROPERTY}
+            "${_VALID_DEPENDS}"
+          )
+        endif()
+        set(_VALID_DEPENDS)
+      endforeach()
+    endif()
+  endmacro()
+
+  macro(_qt4_add_target_depends _QT_MODULE)
+    if (TARGET Qt4::${_QT_MODULE})
+      get_target_property(_configs Qt4::${_QT_MODULE} IMPORTED_CONFIGURATIONS)
+      _qt4_add_target_depends_internal(${_QT_MODULE} INTERFACE_LINK_LIBRARIES ${ARGN})
+      foreach(_config ${_configs})
+        _qt4_add_target_depends_internal(${_QT_MODULE} IMPORTED_LINK_INTERFACE_LIBRARIES_${_config} ${ARGN})
+      endforeach()
+      set(_configs)
+    endif()
+  endmacro()
+
+  macro(_qt4_add_target_private_depends _QT_MODULE)
+    if (TARGET Qt4::${_QT_MODULE})
+      get_target_property(_configs Qt4::${_QT_MODULE} IMPORTED_CONFIGURATIONS)
+      foreach(_config ${_configs})
+        _qt4_add_target_depends_internal(${_QT_MODULE} IMPORTED_LINK_DEPENDENT_LIBRARIES_${_config} ${ARGN})
+      endforeach()
+      set(_configs)
+    endif()
+  endmacro()
+
+
+  # Set QT_xyz_LIBRARY variable and add
+  # library include path to QT_INCLUDES
+  _QT4_ADJUST_LIB_VARS(QtCore)
+  set_property(TARGET Qt4::QtCore APPEND PROPERTY
+    INTERFACE_INCLUDE_DIRECTORIES
+      "${QT_MKSPECS_DIR}/default"
+      ${QT_INCLUDE_DIR}
+  )
+  set_property(TARGET Qt4::QtCore APPEND PROPERTY
+    INTERFACE_COMPILE_DEFINITIONS
+      $<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
+  )
+  set_property(TARGET Qt4::QtCore PROPERTY
+    INTERFACE_QT_MAJOR_VERSION 4
+  )
+  set_property(TARGET Qt4::QtCore APPEND PROPERTY
+    COMPATIBLE_INTERFACE_STRING QT_MAJOR_VERSION
+  )
+
+  foreach(QT_MODULE ${QT_MODULES})
+    _QT4_ADJUST_LIB_VARS(${QT_MODULE})
+    _qt4_add_target_depends(${QT_MODULE} Core)
+  endforeach()
+
+  _QT4_ADJUST_LIB_VARS(QtAssistant)
+  _QT4_ADJUST_LIB_VARS(QtAssistantClient)
+  _QT4_ADJUST_LIB_VARS(QtCLucene)
+  _QT4_ADJUST_LIB_VARS(QtDesignerComponents)
+
+  # platform dependent libraries
+  if(Q_WS_WIN)
+    _QT4_ADJUST_LIB_VARS(qtmain)
+
+    _QT4_ADJUST_LIB_VARS(QAxServer)
+    if(QT_QAXSERVER_FOUND)
+      set_property(TARGET Qt4::QAxServer PROPERTY
+        INTERFACE_QT4_NO_LINK_QTMAIN ON
+      )
+      set_property(TARGET Qt4::QAxServer APPEND PROPERTY
+        COMPATIBLE_INTERFACE_BOOL QT4_NO_LINK_QTMAIN)
+    endif()
+
+    _QT4_ADJUST_LIB_VARS(QAxContainer)
+  endif()
+
+  # Only public dependencies are listed here.
+  # Eg, QtDBus links to QtXml, but users of QtDBus do not need to
+  # link to QtXml because QtDBus only uses it internally, not in public
+  # headers.
+  # Everything depends on QtCore, but that is covered above already
+  _qt4_add_target_depends(Qt3Support Sql Gui Network)
+  if (TARGET Qt4::Qt3Support)
+    # An additional define is required for QT3_SUPPORT
+    set_property(TARGET Qt4::Qt3Support APPEND PROPERTY INTERFACE_COMPILE_DEFINITIONS QT3_SUPPORT)
+  endif()
+  _qt4_add_target_depends(QtDeclarative Script Gui)
+  _qt4_add_target_depends(QtDesigner Gui)
+  _qt4_add_target_depends(QtHelp Gui)
+  _qt4_add_target_depends(QtMultimedia Gui)
+  _qt4_add_target_depends(QtOpenGL Gui)
+  _qt4_add_target_depends(QtSvg Gui)
+  _qt4_add_target_depends(QtWebKit Gui Network)
+
+  _qt4_add_target_private_depends(Qt3Support Xml)
+  if(QT_VERSION VERSION_GREATER 4.6)
+    _qt4_add_target_private_depends(QtSvg Xml)
+  endif()
+  _qt4_add_target_private_depends(QtDBus Xml)
+  _qt4_add_target_private_depends(QtUiTools Xml Gui)
+  _qt4_add_target_private_depends(QtHelp Sql Xml Network)
+  _qt4_add_target_private_depends(QtXmlPatterns Network)
+  _qt4_add_target_private_depends(QtScriptTools Gui)
+  _qt4_add_target_private_depends(QtWebKit XmlPatterns)
+  _qt4_add_target_private_depends(QtDeclarative XmlPatterns Svg Sql Gui)
+  _qt4_add_target_private_depends(QtMultimedia Gui)
+  _qt4_add_target_private_depends(QtOpenGL Gui)
+  if(QT_QAXSERVER_FOUND)
+    _qt4_add_target_private_depends(QAxServer Gui)
+  endif()
+  if(QT_QAXCONTAINER_FOUND)
+    _qt4_add_target_private_depends(QAxContainer Gui)
+  endif()
+  _qt4_add_target_private_depends(phonon Gui)
+  if(QT_QTDBUS_FOUND)
+    _qt4_add_target_private_depends(phonon DBus)
+  endif()
+
+  if (WIN32 AND NOT QT4_NO_LINK_QTMAIN)
+    set(_isExe $<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>)
+    set(_isWin32 $<BOOL:$<TARGET_PROPERTY:WIN32_EXECUTABLE>>)
+    set(_isNotExcluded $<NOT:$<BOOL:$<TARGET_PROPERTY:QT4_NO_LINK_QTMAIN>>>)
+    set(_isPolicyNEW $<TARGET_POLICY:CMP0020>)
+    get_target_property(_configs Qt4::QtCore IMPORTED_CONFIGURATIONS)
+    set_property(TARGET Qt4::QtCore APPEND PROPERTY
+        INTERFACE_LINK_LIBRARIES
+          $<$<AND:${_isExe},${_isWin32},${_isNotExcluded},${_isPolicyNEW}>:Qt4::qtmain>
+    )
+    foreach(_config ${_configs})
+      set_property(TARGET Qt4::QtCore APPEND PROPERTY
+        IMPORTED_LINK_INTERFACE_LIBRARIES_${_config}
+          $<$<AND:${_isExe},${_isWin32},${_isNotExcluded},${_isPolicyNEW}>:Qt4::qtmain>
+      )
+    endforeach()
+    unset(_configs)
+    unset(_isExe)
+    unset(_isWin32)
+    unset(_isNotExcluded)
+    unset(_isPolicyNEW)
+  endif()
+
+  #######################################
+  #
+  #       Check the executables of Qt
+  #          ( moc, uic, rcc )
+  #
+  #######################################
+
+
+  if(QT_QMAKE_CHANGED)
+    set(QT_UIC_EXECUTABLE NOTFOUND)
+    set(QT_MOC_EXECUTABLE NOTFOUND)
+    set(QT_UIC3_EXECUTABLE NOTFOUND)
+    set(QT_RCC_EXECUTABLE NOTFOUND)
+    set(QT_DBUSCPP2XML_EXECUTABLE NOTFOUND)
+    set(QT_DBUSXML2CPP_EXECUTABLE NOTFOUND)
+    set(QT_LUPDATE_EXECUTABLE NOTFOUND)
+    set(QT_LRELEASE_EXECUTABLE NOTFOUND)
+    set(QT_QCOLLECTIONGENERATOR_EXECUTABLE NOTFOUND)
+    set(QT_DESIGNER_EXECUTABLE NOTFOUND)
+    set(QT_LINGUIST_EXECUTABLE NOTFOUND)
+  endif()
+
+  macro(_find_qt4_program VAR NAME)
+    find_program(${VAR}
+      NAMES ${ARGN}
+      PATHS ${QT_BINARY_DIR}
+      NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
+      )
+    if (${VAR} AND NOT TARGET ${NAME})
+      add_executable(${NAME} IMPORTED)
+      set_property(TARGET ${NAME} PROPERTY IMPORTED_LOCATION ${${VAR}})
+    endif()
+  endmacro()
+
+  _find_qt4_program(QT_MOC_EXECUTABLE Qt4::moc moc-qt4 moc4 moc)
+  _find_qt4_program(QT_UIC_EXECUTABLE Qt4::uic uic-qt4 uic4 uic)
+  _find_qt4_program(QT_UIC3_EXECUTABLE Qt4::uic3 uic3)
+  _find_qt4_program(QT_RCC_EXECUTABLE Qt4::rcc rcc)
+  _find_qt4_program(QT_DBUSCPP2XML_EXECUTABLE Qt4::qdbuscpp2xml qdbuscpp2xml)
+  _find_qt4_program(QT_DBUSXML2CPP_EXECUTABLE Qt4::qdbusxml2cpp qdbusxml2cpp)
+  _find_qt4_program(QT_LUPDATE_EXECUTABLE Qt4::lupdate lupdate-qt4 lupdate4 lupdate)
+  _find_qt4_program(QT_LRELEASE_EXECUTABLE Qt4::lrelease lrelease-qt4 lrelease4 lrelease)
+  _find_qt4_program(QT_QCOLLECTIONGENERATOR_EXECUTABLE Qt4::qcollectiongenerator qcollectiongenerator-qt4 qcollectiongenerator)
+  _find_qt4_program(QT_DESIGNER_EXECUTABLE Qt4::designer designer-qt4 designer4 designer)
+  _find_qt4_program(QT_LINGUIST_EXECUTABLE Qt4::linguist linguist-qt4 linguist4 linguist)
+
+  if (NOT TARGET Qt4::qmake)
+    add_executable(Qt4::qmake IMPORTED)
+    set_property(TARGET Qt4::qmake PROPERTY IMPORTED_LOCATION ${QT_QMAKE_EXECUTABLE})
+  endif()
+
+  if (QT_MOC_EXECUTABLE)
+     set(QT_WRAP_CPP "YES")
+  endif ()
+
+  if (QT_UIC_EXECUTABLE)
+     set(QT_WRAP_UI "YES")
+  endif ()
+
+
+
+  mark_as_advanced( QT_UIC_EXECUTABLE QT_UIC3_EXECUTABLE QT_MOC_EXECUTABLE
+    QT_RCC_EXECUTABLE QT_DBUSXML2CPP_EXECUTABLE QT_DBUSCPP2XML_EXECUTABLE
+    QT_LUPDATE_EXECUTABLE QT_LRELEASE_EXECUTABLE QT_QCOLLECTIONGENERATOR_EXECUTABLE
+    QT_DESIGNER_EXECUTABLE QT_LINGUIST_EXECUTABLE)
+
+
+  # get the directory of the current file, used later on in the file
+  get_filename_component( _qt4_current_dir  "${CMAKE_CURRENT_LIST_FILE}" PATH)
+
+
+  ###############################################
+  #
+  #       configuration/system dependent settings
+  #
+  ###############################################
+
+  include("${_qt4_current_dir}/Qt4ConfigDependentSettings.cmake")
+
+
+  #######################################
+  #
+  #       Check the plugins of Qt
+  #
+  #######################################
+
+  set( QT_PLUGIN_TYPES accessible bearer codecs decorations designer gfxdrivers graphicssystems iconengines imageformats inputmethods mousedrivers phonon_backend script sqldrivers )
+
+  set( QT_ACCESSIBLE_PLUGINS qtaccessiblecompatwidgets qtaccessiblewidgets )
+  set( QT_BEARER_PLUGINS qcorewlanbearer qgenericbearer qnativewifibearer )
+  set( QT_CODECS_PLUGINS qcncodecs qjpcodecs qkrcodecs qtwcodecs )
+  set( QT_DECORATIONS_PLUGINS qdecorationdefault qdecorationwindows )
+  set( QT_DESIGNER_PLUGINS arthurplugin containerextension customwidgetplugin phononwidgets qdeclarativeview qt3supportwidgets qwebview taskmenuextension worldtimeclockplugin )
+  set( QT_GRAPHICSDRIVERS_PLUGINS qgfxtransformed qgfxvnc qscreenvfb )
+  set( QT_GRAPHICSSYSTEMS_PLUGINS qglgraphicssystem qtracegraphicssystem )
+  set( QT_ICONENGINES_PLUGINS qsvgicon )
+  set( QT_IMAGEFORMATS_PLUGINS qgif qjpeg qmng qico qsvg qtiff qtga )
+  set( QT_INPUTMETHODS_PLUGINS qimsw_multi )
+  set( QT_MOUSEDRIVERS_PLUGINS qwstslibmousehandler )
+  if(APPLE)
+    set( QT_PHONON_BACKEND_PLUGINS phonon_qt7 )
+  elseif(WIN32)
+    set( QT_PHONON_BACKEND_PLUGINS phonon_ds9 )
+  endif()
+  set( QT_SCRIPT_PLUGINS qtscriptdbus )
+  set( QT_SQLDRIVERS_PLUGINS qsqldb2 qsqlibase qsqlite qsqlite2 qsqlmysql qsqloci qsqlodbc qsqlpsql qsqltds )
+
+  set( QT_PHONON_PLUGINS ${QT_PHONON_BACKEND_PLUGINS} )
+  set( QT_QT3SUPPORT_PLUGINS qtaccessiblecompatwidgets )
+  set( QT_QTCORE_PLUGINS ${QT_BEARER_PLUGINS} ${QT_CODECS_PLUGINS} )
+  set( QT_QTGUI_PLUGINS qtaccessiblewidgets ${QT_IMAGEFORMATS_PLUGINS} ${QT_DECORATIONS_PLUGINS} ${QT_GRAPHICSDRIVERS_PLUGINS} ${QT_GRAPHICSSYSTEMS_PLUGINS} ${QT_INPUTMETHODS_PLUGINS} ${QT_MOUSEDRIVERS_PLUGINS} )
+  set( QT_QTSCRIPT_PLUGINS ${QT_SCRIPT_PLUGINS} )
+  set( QT_QTSQL_PLUGINS ${QT_SQLDRIVERS_PLUGINS} )
+  set( QT_QTSVG_PLUGINS qsvg qsvgicon )
+
+  if(QT_QMAKE_CHANGED)
+    foreach(QT_PLUGIN_TYPE ${QT_PLUGIN_TYPES})
+      string(TOUPPER ${QT_PLUGIN_TYPE} _upper_qt_plugin_type)
+      set(QT_${_upper_qt_plugin_type}_PLUGINS_DIR ${QT_PLUGINS_DIR}/${QT_PLUGIN_TYPE})
+      foreach(QT_PLUGIN ${QT_${_upper_qt_plugin_type}_PLUGINS})
+        string(TOUPPER ${QT_PLUGIN} _upper_qt_plugin)
+        unset(QT_${_upper_qt_plugin}_LIBRARY_RELEASE CACHE)
+        unset(QT_${_upper_qt_plugin}_LIBRARY_DEBUG CACHE)
+        unset(QT_${_upper_qt_plugin}_LIBRARY CACHE)
+        unset(QT_${_upper_qt_plugin}_PLUGIN_RELEASE CACHE)
+        unset(QT_${_upper_qt_plugin}_PLUGIN_DEBUG CACHE)
+        unset(QT_${_upper_qt_plugin}_PLUGIN CACHE)
+      endforeach()
+    endforeach()
+  endif()
+
+  # find_library works better than find_file but we need to set prefixes to only match plugins
+  foreach(QT_PLUGIN_TYPE ${QT_PLUGIN_TYPES})
+    string(TOUPPER ${QT_PLUGIN_TYPE} _upper_qt_plugin_type)
+    set(QT_${_upper_qt_plugin_type}_PLUGINS_DIR ${QT_PLUGINS_DIR}/${QT_PLUGIN_TYPE})
+    foreach(QT_PLUGIN ${QT_${_upper_qt_plugin_type}_PLUGINS})
+      string(TOUPPER ${QT_PLUGIN} _upper_qt_plugin)
+      if(QT_IS_STATIC)
+        find_library(QT_${_upper_qt_plugin}_LIBRARY_RELEASE
+                     NAMES ${QT_PLUGIN}${QT_LIBINFIX} ${QT_PLUGIN}${QT_LIBINFIX}4
+                     PATHS ${QT_${_upper_qt_plugin_type}_PLUGINS_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
+            )
+        find_library(QT_${_upper_qt_plugin}_LIBRARY_DEBUG
+                     NAMES ${QT_PLUGIN}${QT_LIBINFIX}_debug ${QT_PLUGIN}${QT_LIBINFIX}d ${QT_PLUGIN}${QT_LIBINFIX}d4
+                     PATHS ${QT_${_upper_qt_plugin_type}_PLUGINS_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
+            )
+        _QT4_ADJUST_LIB_VARS(${QT_PLUGIN})
+      else()
+        # find_library works easier/better than find_file but we need to set suffixes to only match plugins
+        set(CMAKE_FIND_LIBRARY_SUFFIXES_DEFAULT ${CMAKE_FIND_LIBRARY_SUFFIXES})
+        set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_SHARED_MODULE_SUFFIX} ${CMAKE_SHARED_LIBRARY_SUFFIX})
+        find_library(QT_${_upper_qt_plugin}_PLUGIN_RELEASE
+                     NAMES ${QT_PLUGIN}${QT_LIBINFIX} ${QT_PLUGIN}${QT_LIBINFIX}4
+                     PATHS ${QT_${_upper_qt_plugin_type}_PLUGINS_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
+            )
+        find_library(QT_${_upper_qt_plugin}_PLUGIN_DEBUG
+                     NAMES ${QT_PLUGIN}${QT_LIBINFIX}_debug ${QT_PLUGIN}${QT_LIBINFIX}d ${QT_PLUGIN}${QT_LIBINFIX}d4
+                     PATHS ${QT_${_upper_qt_plugin_type}_PLUGINS_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
+            )
+        mark_as_advanced(QT_${_upper_qt_plugin}_PLUGIN_RELEASE QT_${_upper_qt_plugin}_PLUGIN_DEBUG)
+        set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_DEFAULT})
+      endif()
+    endforeach()
+  endforeach()
+
+
+  ######################################
+  #
+  #       Macros for building Qt files
+  #
+  ######################################
+
+  include("${_qt4_current_dir}/Qt4Macros.cmake")
+
+endif()
+
+#support old QT_MIN_VERSION if set, but not if version is supplied by find_package()
+if(NOT Qt4_FIND_VERSION AND QT_MIN_VERSION)
+  set(Qt4_FIND_VERSION ${QT_MIN_VERSION})
+endif()
+
+if( Qt4_FIND_COMPONENTS )
+
+  # if components specified in find_package(), make sure each of those pieces were found
+  set(_QT4_FOUND_REQUIRED_VARS QT_QMAKE_EXECUTABLE QT_MOC_EXECUTABLE QT_RCC_EXECUTABLE QT_INCLUDE_DIR QT_LIBRARY_DIR)
+  foreach( component ${Qt4_FIND_COMPONENTS} )
+    string( TOUPPER ${component} _COMPONENT )
+    if(${_COMPONENT} STREQUAL "QTMAIN")
+      if(Q_WS_WIN)
+        set(_QT4_FOUND_REQUIRED_VARS ${_QT4_FOUND_REQUIRED_VARS} QT_${_COMPONENT}_LIBRARY)
+      endif()
+    else()
+      set(_QT4_FOUND_REQUIRED_VARS ${_QT4_FOUND_REQUIRED_VARS} QT_${_COMPONENT}_INCLUDE_DIR QT_${_COMPONENT}_LIBRARY)
+    endif()
+  endforeach()
+
+  if(Qt4_FIND_COMPONENTS MATCHES QtGui)
+    set(_QT4_FOUND_REQUIRED_VARS ${_QT4_FOUND_REQUIRED_VARS} QT_UIC_EXECUTABLE)
+  endif()
+
+else()
+
+  # if no components specified, we'll make a default set of required variables to say Qt is found
+  set(_QT4_FOUND_REQUIRED_VARS QT_QMAKE_EXECUTABLE QT_MOC_EXECUTABLE QT_RCC_EXECUTABLE QT_UIC_EXECUTABLE QT_INCLUDE_DIR
+    QT_LIBRARY_DIR QT_QTCORE_LIBRARY)
+
+endif()
+
+if (NOT QT_VERSION_MAJOR EQUAL 4)
+    set(VERSION_MSG "Found unsuitable Qt version \"${QTVERSION}\" from ${QT_QMAKE_EXECUTABLE}")
+    set(Qt4_FOUND FALSE)
+    if(Qt4_FIND_REQUIRED)
+       message( FATAL_ERROR "${VERSION_MSG}, this code requires Qt 4.x")
+    else()
+      if(NOT Qt4_FIND_QUIETLY)
+         message( STATUS    "${VERSION_MSG}")
+      endif()
+    endif()
+else()
+  if (CMAKE_FIND_PACKAGE_NAME STREQUAL "Qt")
+    # FindQt include()'s this module. It's an old pattern, but rather than
+    # trying to suppress this from outside the module (which is then sensitive
+    # to the contents, detect the case in this module and suppress it
+    # explicitly.
+    set(FPHSA_NAME_MISMATCHED 1)
+  endif ()
+  FIND_PACKAGE_HANDLE_STANDARD_ARGS(Qt4 FOUND_VAR Qt4_FOUND
+    REQUIRED_VARS ${_QT4_FOUND_REQUIRED_VARS}
+    VERSION_VAR QTVERSION
+    )
+  unset(FPHSA_NAME_MISMATCHED)
+endif()
+
+#######################################
+#
+#       compatibility settings
+#
+#######################################
+# Backwards compatibility for CMake1.4 and 1.2
+set (QT_MOC_EXE ${QT_MOC_EXECUTABLE} )
+set (QT_UIC_EXE ${QT_UIC_EXECUTABLE} )
+set( QT_QT_LIBRARY "")
+set(QT4_FOUND ${Qt4_FOUND})
+set(QT_FOUND ${Qt4_FOUND})
+
diff --git a/share/cmake-3.18/Modules/FindQuickTime.cmake b/share/cmake-3.22/Modules/FindQuickTime.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindQuickTime.cmake
rename to share/cmake-3.22/Modules/FindQuickTime.cmake
diff --git a/share/cmake-3.18/Modules/FindRTI.cmake b/share/cmake-3.22/Modules/FindRTI.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindRTI.cmake
rename to share/cmake-3.22/Modules/FindRTI.cmake
diff --git a/share/cmake-3.22/Modules/FindRuby.cmake b/share/cmake-3.22/Modules/FindRuby.cmake
new file mode 100644
index 0000000..759f57c
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindRuby.cmake
@@ -0,0 +1,533 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindRuby
+--------
+
+Find Ruby
+
+This module finds if Ruby is installed and determines where the
+include files and libraries are.  Ruby 1.8 through 2.7 are
+supported.
+
+The minimum required version of Ruby can be specified using the
+standard syntax, e.g.
+
+.. code-block:: cmake
+
+  find_package(Ruby 2.5.1 EXACT REQUIRED)
+  # OR
+  find_package(Ruby 2.4)
+
+It also determines what the name of the library is.
+
+Virtual environments such as RVM are handled as well, by passing
+the argument ``Ruby_FIND_VIRTUALENV``
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This module will set the following variables in your project:
+
+``Ruby_FOUND``
+  set to true if ruby was found successfully
+``Ruby_EXECUTABLE``
+  full path to the ruby binary
+``Ruby_INCLUDE_DIRS``
+  include dirs to be used when using the ruby library
+``Ruby_LIBRARIES``
+  .. versionadded:: 3.18
+    libraries needed to use ruby from C.
+``Ruby_VERSION``
+  the version of ruby which was found, e.g. "1.8.7"
+``Ruby_VERSION_MAJOR``
+  Ruby major version.
+``Ruby_VERSION_MINOR``
+  Ruby minor version.
+``Ruby_VERSION_PATCH``
+  Ruby patch version.
+
+.. versionchanged:: 3.18
+  Previous versions of CMake used the ``RUBY_`` prefix for all variables.
+  The following variables are provided for compatibility reasons,
+  don't use them in new code:
+
+``RUBY_EXECUTABLE``
+  same as Ruby_EXECUTABLE.
+``RUBY_INCLUDE_DIRS``
+  same as Ruby_INCLUDE_DIRS.
+``RUBY_INCLUDE_PATH``
+  same as Ruby_INCLUDE_DIRS.
+``RUBY_LIBRARY``
+  same as Ruby_LIBRARY.
+``RUBY_VERSION``
+  same as Ruby_VERSION.
+``RUBY_FOUND``
+  same as Ruby_FOUND.
+
+Hints
+^^^^^
+
+.. versionadded:: 3.18
+
+``Ruby_ROOT_DIR``
+  Define the root directory of a Ruby installation.
+
+``Ruby_FIND_VIRTUALENV``
+  This variable defines the handling of virtual environments managed by
+  ``rvm``. It is meaningful only when a virtual environment
+  is active (i.e. the ``rvm`` script has been evaluated or at least the
+  ``MY_RUBY_HOME`` environment variable is set).
+  The ``Ruby_FIND_VIRTUALENV`` variable can be set to empty or
+  one of the following:
+
+  * ``FIRST``: The virtual environment is used before any other standard
+    paths to look-up for the interpreter. This is the default.
+  * ``ONLY``: Only the virtual environment is used to look-up for the
+    interpreter.
+  * ``STANDARD``: The virtual environment is not used to look-up for the
+    interpreter (assuming it isn't still in the PATH...)
+
+#]=======================================================================]
+
+# Backwards compatibility
+# Define camel case versions of input variables
+foreach(UPPER
+    RUBY_EXECUTABLE
+    RUBY_LIBRARY
+    RUBY_INCLUDE_DIR
+    RUBY_CONFIG_INCLUDE_DIR
+    )
+    if (DEFINED ${UPPER})
+      string(REPLACE "RUBY_" "Ruby_" Camel ${UPPER})
+        if (NOT DEFINED ${Camel})
+            set(${Camel} ${${UPPER}})
+        endif()
+    endif()
+endforeach()
+
+#   Ruby_ARCHDIR=`$RUBY -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"archdir"@:>@)'`
+#   Ruby_SITEARCHDIR=`$RUBY -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"sitearchdir"@:>@)'`
+#   Ruby_SITEDIR=`$RUBY -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"sitelibdir"@:>@)'`
+#   Ruby_LIBDIR=`$RUBY -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"libdir"@:>@)'`
+#   Ruby_LIBRUBYARG=`$RUBY -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"LIBRUBYARG_SHARED"@:>@)'`
+
+# uncomment the following line to get debug output for this file
+# set(_Ruby_DEBUG_OUTPUT TRUE)
+
+# Determine the list of possible names of the ruby executable depending
+# on which version of ruby is required
+set(_Ruby_POSSIBLE_EXECUTABLE_NAMES ruby)
+
+# If not specified, allow everything as far back as 1.8.0
+if(NOT DEFINED Ruby_FIND_VERSION_MAJOR)
+  set(Ruby_FIND_VERSION "1.8.0")
+  set(Ruby_FIND_VERSION_MAJOR 1)
+  set(Ruby_FIND_VERSION_MINOR 8)
+  set(Ruby_FIND_VERSION_PATCH 0)
+endif()
+
+if(_Ruby_DEBUG_OUTPUT)
+  message("Ruby_FIND_VERSION=${Ruby_FIND_VERSION}")
+  message("Ruby_FIND_VERSION_MAJOR=${Ruby_FIND_VERSION_MAJOR}")
+  message("Ruby_FIND_VERSION_MINOR=${Ruby_FIND_VERSION_MINOR}")
+  message("Ruby_FIND_VERSION_PATCH=${Ruby_FIND_VERSION_PATCH}")
+endif()
+
+set(Ruby_FIND_VERSION_SHORT_NODOT "${Ruby_FIND_VERSION_MAJOR}${Ruby_FIND_VERSION_MINOR}")
+
+# Set name of possible executables, ignoring the minor
+# Eg:
+# 2.1.1 => from ruby27 to ruby21 included
+# 2.1   => from ruby27 to ruby21 included
+# 2     => from ruby26 to ruby20 included
+# empty => from ruby27 to ruby18 included
+if(NOT Ruby_FIND_VERSION_EXACT)
+
+  foreach(_ruby_version RANGE 27 18 -1)
+    string(SUBSTRING "${_ruby_version}" 0 1 _ruby_major_version)
+    string(SUBSTRING "${_ruby_version}" 1 1 _ruby_minor_version)
+
+    if(NOT "${_ruby_major_version}${_ruby_minor_version}" VERSION_LESS ${Ruby_FIND_VERSION_SHORT_NODOT})
+      # Append both rubyX.Y and rubyXY (eg: ruby2.7 ruby27)
+      list(APPEND _Ruby_POSSIBLE_EXECUTABLE_NAMES ruby${_ruby_major_version}.${_ruby_minor_version} ruby${_ruby_major_version}${_ruby_minor_version})
+    else()
+      break()
+    endif()
+
+  endforeach()
+
+  list(REMOVE_DUPLICATES _Ruby_POSSIBLE_EXECUTABLE_NAMES)
+endif()
+
+# virtual environments handling (eg RVM)
+if (DEFINED ENV{MY_RUBY_HOME})
+  if(_Ruby_DEBUG_OUTPUT)
+    message("My ruby home is defined: $ENV{MY_RUBY_HOME}")
+  endif()
+
+  if (DEFINED Ruby_FIND_VIRTUALENV)
+    if (NOT Ruby_FIND_VIRTUALENV MATCHES "^(FIRST|ONLY|STANDARD)$")
+      message (AUTHOR_WARNING "FindRuby: ${Ruby_FIND_VIRTUALENV}: invalid value for 'Ruby_FIND_VIRTUALENV'. 'FIRST', 'ONLY' or 'STANDARD' expected. 'FIRST' will be used instead.")
+      set (_Ruby_FIND_VIRTUALENV "FIRST")
+    else()
+      set (_Ruby_FIND_VIRTUALENV ${Ruby_FIND_VIRTUALENV})
+    endif()
+  else()
+    set (_Ruby_FIND_VIRTUALENV FIRST)
+  endif()
+else()
+  if (DEFINED Ruby_FIND_VIRTUALENV)
+    message("Environment variable MY_RUBY_HOME isn't set, defaulting back to Ruby_FIND_VIRTUALENV=STANDARD")
+  endif()
+  set (_Ruby_FIND_VIRTUALENV STANDARD)
+endif()
+
+if(_Ruby_DEBUG_OUTPUT)
+  message("_Ruby_POSSIBLE_EXECUTABLE_NAMES=${_Ruby_POSSIBLE_EXECUTABLE_NAMES}")
+  message("_Ruby_FIND_VIRTUALENV=${_Ruby_FIND_VIRTUALENV}")
+endif()
+
+function (_RUBY_VALIDATE_INTERPRETER)
+  if (NOT Ruby_EXECUTABLE)
+    return()
+  endif()
+
+  cmake_parse_arguments (PARSE_ARGV 0 _RVI "EXACT;CHECK_EXISTS" "" "")
+  if (_RVI_UNPARSED_ARGUMENTS)
+    set (expected_version ${_RVI_UNPARSED_ARGUMENTS})
+  else()
+    unset (expected_version)
+  endif()
+
+  if (_RVI_CHECK_EXISTS AND NOT EXISTS "${Ruby_EXECUTABLE}")
+    # interpreter does not exist anymore
+    set (_Ruby_Interpreter_REASON_FAILURE "Cannot find the interpreter \"${Ruby_EXECUTABLE}\"")
+    set_property (CACHE Ruby_EXECUTABLE PROPERTY VALUE "Ruby_EXECUTABLE-NOTFOUND")
+    return()
+  endif()
+
+  # Check the version it returns
+  # executable found must have a specific version
+  execute_process (COMMAND "${Ruby_EXECUTABLE}" -e "puts RUBY_VERSION"
+                   RESULT_VARIABLE result
+                   OUTPUT_VARIABLE version
+                   ERROR_QUIET
+                   OUTPUT_STRIP_TRAILING_WHITESPACE)
+  if (result OR (_RVI_EXACT AND NOT version VERSION_EQUAL expected_version) OR (version VERSION_LESS expected_version))
+    # interpreter not usable or has wrong major version
+    if (result)
+      set (_Ruby_Interpreter_REASON_FAILURE "Cannot use the interpreter \"${Ruby_EXECUTABLE}\"")
+    else()
+      set (_Ruby_Interpreter_REASON_FAILURE "Wrong major version for the interpreter \"${Ruby_EXECUTABLE}\"")
+    endif()
+    set_property (CACHE Ruby_EXECUTABLE PROPERTY VALUE "Ruby_EXECUTABLE-NOTFOUND")
+    return()
+  endif()
+
+endfunction()
+
+while(1)
+  # Virtual environments handling
+  if(_Ruby_FIND_VIRTUALENV MATCHES "^(FIRST|ONLY)$")
+    if(_Ruby_DEBUG_OUTPUT)
+      message("Inside Matches")
+    endif()
+    find_program (Ruby_EXECUTABLE
+                  NAMES ${_Ruby_POSSIBLE_EXECUTABLE_NAMES}
+                  NAMES_PER_DIR
+                  PATHS ENV MY_RUBY_HOME
+                  PATH_SUFFIXES bin Scripts
+                  NO_CMAKE_PATH
+                  NO_CMAKE_ENVIRONMENT_PATH
+                  NO_SYSTEM_ENVIRONMENT_PATH
+                  NO_CMAKE_SYSTEM_PATH)
+
+    if(_Ruby_DEBUG_OUTPUT)
+      message("Ruby_EXECUTABLE=${Ruby_EXECUTABLE}")
+    endif()
+
+    _RUBY_VALIDATE_INTERPRETER (${Ruby_FIND_VERSION}})
+    if(Ruby_EXECUTABLE)
+      break()
+    endif()
+    if(NOT _Ruby_FIND_VIRTUALENV STREQUAL "ONLY")
+      break()
+    endif()
+  elseif(_Ruby_DEBUG_OUTPUT)
+    message("_Ruby_FIND_VIRTUALENV doesn't match: ${_Ruby_FIND_VIRTUALENV}")
+  endif()
+
+  # try using standard paths
+  find_program (Ruby_EXECUTABLE
+                NAMES ${_Ruby_POSSIBLE_EXECUTABLE_NAMES}
+                NAMES_PER_DIR)
+  _RUBY_VALIDATE_INTERPRETER (${Ruby_FIND_VERSION})
+  if (Ruby_EXECUTABLE)
+    break()
+  endif()
+
+  break()
+endwhile()
+
+if(Ruby_EXECUTABLE AND NOT Ruby_VERSION_MAJOR)
+  function(_RUBY_CONFIG_VAR RBVAR OUTVAR)
+    execute_process(COMMAND ${Ruby_EXECUTABLE} -r rbconfig -e "print RbConfig::CONFIG['${RBVAR}']"
+      RESULT_VARIABLE _Ruby_SUCCESS
+      OUTPUT_VARIABLE _Ruby_OUTPUT
+      ERROR_QUIET)
+    if(_Ruby_SUCCESS OR _Ruby_OUTPUT STREQUAL "")
+      execute_process(COMMAND ${Ruby_EXECUTABLE} -r rbconfig -e "print Config::CONFIG['${RBVAR}']"
+        RESULT_VARIABLE _Ruby_SUCCESS
+        OUTPUT_VARIABLE _Ruby_OUTPUT
+        ERROR_QUIET)
+    endif()
+    set(${OUTVAR} "${_Ruby_OUTPUT}" PARENT_SCOPE)
+  endfunction()
+
+
+  # query the ruby version
+  _RUBY_CONFIG_VAR("MAJOR" Ruby_VERSION_MAJOR)
+  _RUBY_CONFIG_VAR("MINOR" Ruby_VERSION_MINOR)
+  _RUBY_CONFIG_VAR("TEENY" Ruby_VERSION_PATCH)
+
+  # query the different directories
+  _RUBY_CONFIG_VAR("archdir" Ruby_ARCH_DIR)
+  _RUBY_CONFIG_VAR("arch" Ruby_ARCH)
+  _RUBY_CONFIG_VAR("rubyhdrdir" Ruby_HDR_DIR)
+  _RUBY_CONFIG_VAR("rubyarchhdrdir" Ruby_ARCHHDR_DIR)
+  _RUBY_CONFIG_VAR("libdir" Ruby_POSSIBLE_LIB_DIR)
+  _RUBY_CONFIG_VAR("rubylibdir" Ruby_RUBY_LIB_DIR)
+
+  # site_ruby
+  _RUBY_CONFIG_VAR("sitearchdir" Ruby_SITEARCH_DIR)
+  _RUBY_CONFIG_VAR("sitelibdir" Ruby_SITELIB_DIR)
+
+  # vendor_ruby available ?
+  execute_process(COMMAND ${Ruby_EXECUTABLE} -r vendor-specific -e "print 'true'"
+    OUTPUT_VARIABLE Ruby_HAS_VENDOR_RUBY  ERROR_QUIET)
+
+  if(Ruby_HAS_VENDOR_RUBY)
+    _RUBY_CONFIG_VAR("vendorlibdir" Ruby_VENDORLIB_DIR)
+    _RUBY_CONFIG_VAR("vendorarchdir" Ruby_VENDORARCH_DIR)
+  endif()
+
+  # save the results in the cache so we don't have to run ruby the next time again
+  set(Ruby_VERSION_MAJOR    ${Ruby_VERSION_MAJOR}    CACHE PATH "The Ruby major version" FORCE)
+  set(Ruby_VERSION_MINOR    ${Ruby_VERSION_MINOR}    CACHE PATH "The Ruby minor version" FORCE)
+  set(Ruby_VERSION_PATCH    ${Ruby_VERSION_PATCH}    CACHE PATH "The Ruby patch version" FORCE)
+  set(Ruby_ARCH_DIR         ${Ruby_ARCH_DIR}         CACHE PATH "The Ruby arch dir" FORCE)
+  set(Ruby_HDR_DIR          ${Ruby_HDR_DIR}          CACHE PATH "The Ruby header dir (1.9+)" FORCE)
+  set(Ruby_ARCHHDR_DIR      ${Ruby_ARCHHDR_DIR}      CACHE PATH "The Ruby arch header dir (2.0+)" FORCE)
+  set(Ruby_POSSIBLE_LIB_DIR ${Ruby_POSSIBLE_LIB_DIR} CACHE PATH "The Ruby lib dir" FORCE)
+  set(Ruby_RUBY_LIB_DIR     ${Ruby_RUBY_LIB_DIR}     CACHE PATH "The Ruby ruby-lib dir" FORCE)
+  set(Ruby_SITEARCH_DIR     ${Ruby_SITEARCH_DIR}     CACHE PATH "The Ruby site arch dir" FORCE)
+  set(Ruby_SITELIB_DIR      ${Ruby_SITELIB_DIR}      CACHE PATH "The Ruby site lib dir" FORCE)
+  set(Ruby_HAS_VENDOR_RUBY  ${Ruby_HAS_VENDOR_RUBY}  CACHE BOOL "Vendor Ruby is available" FORCE)
+  set(Ruby_VENDORARCH_DIR   ${Ruby_VENDORARCH_DIR}   CACHE PATH "The Ruby vendor arch dir" FORCE)
+  set(Ruby_VENDORLIB_DIR    ${Ruby_VENDORLIB_DIR}    CACHE PATH "The Ruby vendor lib dir" FORCE)
+
+  mark_as_advanced(
+    Ruby_ARCH_DIR
+    Ruby_ARCH
+    Ruby_HDR_DIR
+    Ruby_ARCHHDR_DIR
+    Ruby_POSSIBLE_LIB_DIR
+    Ruby_RUBY_LIB_DIR
+    Ruby_SITEARCH_DIR
+    Ruby_SITELIB_DIR
+    Ruby_HAS_VENDOR_RUBY
+    Ruby_VENDORARCH_DIR
+    Ruby_VENDORLIB_DIR
+    Ruby_VERSION_MAJOR
+    Ruby_VERSION_MINOR
+    Ruby_VERSION_PATCH
+    )
+endif()
+
+# In case Ruby_EXECUTABLE could not be executed (e.g. cross compiling)
+# try to detect which version we found. This is not too good.
+if(Ruby_EXECUTABLE AND NOT Ruby_VERSION_MAJOR)
+  # by default assume 1.8.0
+  set(Ruby_VERSION_MAJOR 1)
+  set(Ruby_VERSION_MINOR 8)
+  set(Ruby_VERSION_PATCH 0)
+  # check whether we found 1.9.x
+  if(${Ruby_EXECUTABLE} MATCHES "ruby1\\.?9")
+    set(Ruby_VERSION_MAJOR 1)
+    set(Ruby_VERSION_MINOR 9)
+  endif()
+  # check whether we found 2.0.x
+  if(${Ruby_EXECUTABLE} MATCHES "ruby2\\.?0")
+    set(Ruby_VERSION_MAJOR 2)
+    set(Ruby_VERSION_MINOR 0)
+  endif()
+  # check whether we found 2.1.x
+  if(${Ruby_EXECUTABLE} MATCHES "ruby2\\.?1")
+    set(Ruby_VERSION_MAJOR 2)
+    set(Ruby_VERSION_MINOR 1)
+  endif()
+  # check whether we found 2.2.x
+  if(${Ruby_EXECUTABLE} MATCHES "ruby2\\.?2")
+    set(Ruby_VERSION_MAJOR 2)
+    set(Ruby_VERSION_MINOR 2)
+  endif()
+  # check whether we found 2.3.x
+  if(${Ruby_EXECUTABLE} MATCHES "ruby2\\.?3")
+    set(Ruby_VERSION_MAJOR 2)
+    set(Ruby_VERSION_MINOR 3)
+  endif()
+  # check whether we found 2.4.x
+  if(${Ruby_EXECUTABLE} MATCHES "ruby2\\.?4")
+    set(Ruby_VERSION_MAJOR 2)
+    set(Ruby_VERSION_MINOR 4)
+  endif()
+  # check whether we found 2.5.x
+  if(${Ruby_EXECUTABLE} MATCHES "ruby2\\.?5")
+    set(Ruby_VERSION_MAJOR 2)
+    set(Ruby_VERSION_MINOR 5)
+  endif()
+  # check whether we found 2.6.x
+  if(${Ruby_EXECUTABLE} MATCHES "ruby2\\.?6")
+    set(Ruby_VERSION_MAJOR 2)
+    set(Ruby_VERSION_MINOR 6)
+  endif()
+  # check whether we found 2.7.x
+  if(${Ruby_EXECUTABLE} MATCHES "ruby2\\.?7")
+    set(Ruby_VERSION_MAJOR 2)
+    set(Ruby_VERSION_MINOR 7)
+  endif()
+endif()
+
+if(Ruby_VERSION_MAJOR)
+  set(Ruby_VERSION "${Ruby_VERSION_MAJOR}.${Ruby_VERSION_MINOR}.${Ruby_VERSION_PATCH}")
+  set(_Ruby_VERSION_SHORT "${Ruby_VERSION_MAJOR}.${Ruby_VERSION_MINOR}")
+  set(_Ruby_VERSION_SHORT_NODOT "${Ruby_VERSION_MAJOR}${Ruby_VERSION_MINOR}")
+  set(_Ruby_NODOT_VERSION "${Ruby_VERSION_MAJOR}${Ruby_VERSION_MINOR}${Ruby_VERSION_PATCH}")
+  set(_Ruby_NODOT_VERSION_ZERO_PATCH "${Ruby_VERSION_MAJOR}${Ruby_VERSION_MINOR}0")
+endif()
+
+# FIXME: Currently we require both the interpreter and development components to be found
+# in order to use either.  See issue #20474.
+find_path(Ruby_INCLUDE_DIR
+  NAMES ruby.h
+  HINTS
+    ${Ruby_HDR_DIR}
+    ${Ruby_ARCH_DIR}
+    /usr/lib/ruby/${_Ruby_VERSION_SHORT}/i586-linux-gnu/
+)
+
+set(Ruby_INCLUDE_DIRS ${Ruby_INCLUDE_DIR})
+
+# if ruby > 1.8 is required or if ruby > 1.8 was found, search for the config.h dir
+if( Ruby_FIND_VERSION VERSION_GREATER_EQUAL "1.9"  OR  Ruby_VERSION VERSION_GREATER_EQUAL "1.9"  OR  Ruby_HDR_DIR)
+  find_path(Ruby_CONFIG_INCLUDE_DIR
+    NAMES ruby/config.h  config.h
+    HINTS
+      ${Ruby_HDR_DIR}/${Ruby_ARCH}
+      ${Ruby_ARCH_DIR}
+      ${Ruby_ARCHHDR_DIR}
+  )
+
+  set(Ruby_INCLUDE_DIRS ${Ruby_INCLUDE_DIRS} ${Ruby_CONFIG_INCLUDE_DIR} )
+endif()
+
+
+# Determine the list of possible names for the ruby library
+set(_Ruby_POSSIBLE_LIB_NAMES ruby ruby-static ruby${_Ruby_VERSION_SHORT} ruby${_Ruby_VERSION_SHORT_NODOT} ruby${_Ruby_NODOT_VERSION} ruby-${_Ruby_VERSION_SHORT} ruby-${Ruby_VERSION})
+
+if(WIN32)
+  set(_Ruby_POSSIBLE_MSVC_RUNTIMES "msvcrt;vcruntime140;vcruntime140_1")
+  if(MSVC_TOOLSET_VERSION)
+    list(APPEND _Ruby_POSSIBLE_MSVC_RUNTIMES "msvcr${MSVC_TOOLSET_VERSION}")
+  else()
+    list(APPEND _Ruby_POSSIBLE_MSVC_RUNTIMES "msvcr")
+  endif()
+
+  set(_Ruby_POSSIBLE_VERSION_SUFFICES "${_Ruby_NODOT_VERSION};${_Ruby_NODOT_VERSION_ZERO_PATCH}")
+
+  set(_Ruby_ARCH_PREFIX "")
+  if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+    set(_Ruby_ARCH_PREFIX "x64-")
+  endif()
+
+  foreach(_Ruby_MSVC_RUNTIME ${_Ruby_POSSIBLE_MSVC_RUNTIMES})
+    foreach(_Ruby_VERSION_SUFFIX ${_Ruby_POSSIBLE_VERSION_SUFFICES})
+      list(APPEND _Ruby_POSSIBLE_LIB_NAMES
+                 "${_Ruby_ARCH_PREFIX}${_Ruby_MSVC_RUNTIME}-ruby${_Ruby_VERSION_SUFFIX}"
+                 "${_Ruby_ARCH_PREFIX}${_Ruby_MSVC_RUNTIME}-ruby${_Ruby_VERSION_SUFFIX}-static")
+    endforeach()
+  endforeach()
+endif()
+
+find_library(Ruby_LIBRARY NAMES ${_Ruby_POSSIBLE_LIB_NAMES} HINTS ${Ruby_POSSIBLE_LIB_DIR} )
+
+set(_Ruby_REQUIRED_VARS Ruby_EXECUTABLE Ruby_INCLUDE_DIR Ruby_LIBRARY)
+if(_Ruby_VERSION_SHORT_NODOT GREATER 18)
+  list(APPEND _Ruby_REQUIRED_VARS Ruby_CONFIG_INCLUDE_DIR)
+endif()
+
+if(_Ruby_DEBUG_OUTPUT)
+  message(STATUS "--------FindRuby.cmake debug------------")
+  message(STATUS "_Ruby_POSSIBLE_EXECUTABLE_NAMES: ${_Ruby_POSSIBLE_EXECUTABLE_NAMES}")
+  message(STATUS "_Ruby_POSSIBLE_LIB_NAMES: ${_Ruby_POSSIBLE_LIB_NAMES}")
+  message(STATUS "Ruby_ARCH_DIR: ${Ruby_ARCH_DIR}")
+  message(STATUS "Ruby_HDR_DIR: ${Ruby_HDR_DIR}")
+  message(STATUS "Ruby_POSSIBLE_LIB_DIR: ${Ruby_POSSIBLE_LIB_DIR}")
+  message(STATUS "Found Ruby_VERSION: \"${Ruby_VERSION}\" , short: \"${_Ruby_VERSION_SHORT}\", nodot: \"${_Ruby_VERSION_SHORT_NODOT}\"")
+  message(STATUS "_Ruby_REQUIRED_VARS: ${_Ruby_REQUIRED_VARS}")
+  message(STATUS "Ruby_EXECUTABLE: ${Ruby_EXECUTABLE}")
+  message(STATUS "Ruby_LIBRARY: ${Ruby_LIBRARY}")
+  message(STATUS "Ruby_INCLUDE_DIR: ${Ruby_INCLUDE_DIR}")
+  message(STATUS "Ruby_CONFIG_INCLUDE_DIR: ${Ruby_CONFIG_INCLUDE_DIR}")
+  message(STATUS "--------------------")
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(Ruby  REQUIRED_VARS  ${_Ruby_REQUIRED_VARS}
+                                        VERSION_VAR Ruby_VERSION )
+
+if(Ruby_FOUND)
+  set(Ruby_LIBRARIES ${Ruby_LIBRARY})
+endif()
+
+mark_as_advanced(
+  Ruby_EXECUTABLE
+  Ruby_LIBRARY
+  Ruby_INCLUDE_DIR
+  Ruby_CONFIG_INCLUDE_DIR
+  )
+
+# Set some variables for compatibility with previous version of this file (no need to provide a CamelCase version of that...)
+set(RUBY_POSSIBLE_LIB_PATH ${Ruby_POSSIBLE_LIB_DIR})
+set(RUBY_RUBY_LIB_PATH ${Ruby_RUBY_LIB_DIR})
+set(RUBY_INCLUDE_PATH ${Ruby_INCLUDE_DIRS})
+
+# Backwards compatibility
+# Define upper case versions of output variables
+foreach(Camel
+    Ruby_EXECUTABLE
+    Ruby_INCLUDE_DIRS
+    Ruby_LIBRARY
+    Ruby_VERSION
+    Ruby_VERSION_MAJOR
+    Ruby_VERSION_MINOR
+    Ruby_VERSION_PATCH
+
+    Ruby_ARCH_DIR
+    Ruby_ARCH
+    Ruby_HDR_DIR
+    Ruby_ARCHHDR_DIR
+    Ruby_POSSIBLE_LIB_DIR
+    Ruby_RUBY_LIB_DIR
+    Ruby_SITEARCH_DIR
+    Ruby_SITELIB_DIR
+    Ruby_HAS_VENDOR_RUBY
+    Ruby_VENDORARCH_DIR
+    Ruby_VENDORLIB_DIR
+
+    )
+    string(TOUPPER ${Camel} UPPER)
+    set(${UPPER} ${${Camel}})
+endforeach()
diff --git a/share/cmake-3.22/Modules/FindSDL.cmake b/share/cmake-3.22/Modules/FindSDL.cmake
new file mode 100644
index 0000000..c68e18d
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindSDL.cmake
@@ -0,0 +1,237 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindSDL
+-------
+
+Locate the SDL library
+
+
+Imported targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.19
+
+This module defines the following :prop_tgt:`IMPORTED` target:
+
+``SDL::SDL``
+  The SDL library, if found
+
+Result variables
+^^^^^^^^^^^^^^^^
+
+This module will set the following variables in your project:
+
+``SDL_INCLUDE_DIRS``
+  where to find SDL.h
+``SDL_LIBRARIES``
+  the name of the library to link against
+``SDL_FOUND``
+  if false, do not try to link to SDL
+``SDL_VERSION``
+  the human-readable string containing the version of SDL if found
+``SDL_VERSION_MAJOR``
+  SDL major version
+``SDL_VERSION_MINOR``
+  SDL minor version
+``SDL_VERSION_PATCH``
+  SDL patch version
+
+.. versionadded:: 3.19
+  Added the ``SDL_INCLUDE_DIRS``, ``SDL_LIBRARIES`` and ``SDL_VERSION[_<PART>]``
+  variables.
+
+Cache variables
+^^^^^^^^^^^^^^^
+
+These variables may optionally be set to help this module find the correct files:
+
+``SDL_INCLUDE_DIR``
+  where to find SDL.h
+``SDL_LIBRARY``
+  the name of the library to link against
+
+
+Variables for locating SDL
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+This module responds to the flag:
+
+``SDL_BUILDING_LIBRARY``
+    If this is defined, then no SDL_main will be linked in because
+    only applications need main().
+    Otherwise, it is assumed you are building an application and this
+    module will attempt to locate and set the proper link flags
+    as part of the returned SDL_LIBRARY variable.
+
+
+Obsolete variables
+^^^^^^^^^^^^^^^^^^
+
+.. deprecated:: 3.19
+
+These variables are obsolete and provided for backwards compatibility:
+
+``SDL_VERSION_STRING``
+  the human-readable string containing the version of SDL if found.
+  Identical to SDL_VERSION
+
+
+Don't forget to include SDLmain.h and SDLmain.m your project for the
+OS X framework based version.  (Other versions link to -lSDLmain which
+this module will try to find on your behalf.) Also for OS X, this
+module will automatically add the -framework Cocoa on your behalf.
+
+
+
+Additional Note: If you see an empty SDL_LIBRARY_TEMP in your
+configuration and no SDL_LIBRARY, it means CMake did not find your SDL
+library (SDL.dll, libsdl.so, SDL.framework, etc).  Set
+SDL_LIBRARY_TEMP to point to your SDL library, and configure again.
+Similarly, if you see an empty SDLMAIN_LIBRARY, you should set this
+value as appropriate.  These values are used to generate the final
+SDL_LIBRARY variable, but when these values are unset, SDL_LIBRARY
+does not get created.
+
+
+
+$SDLDIR is an environment variable that would correspond to the
+./configure --prefix=$SDLDIR used in building SDL.  l.e.galup 9-20-02
+
+On OSX, this will prefer the Framework version (if found) over others.
+People will have to manually change the cache values of SDL_LIBRARY to
+override this selection or set the CMake environment
+CMAKE_INCLUDE_PATH to modify the search paths.
+
+Note that the header path has changed from SDL/SDL.h to just SDL.h
+This needed to change because "proper" SDL convention is #include
+"SDL.h", not <SDL/SDL.h>.  This is done for portability reasons
+because not all systems place things in SDL/ (see FreeBSD).
+#]=======================================================================]
+
+find_path(SDL_INCLUDE_DIR SDL.h
+  HINTS
+    ENV SDLDIR
+  PATH_SUFFIXES SDL SDL12 SDL11
+                # path suffixes to search inside ENV{SDLDIR}
+                include/SDL include/SDL12 include/SDL11 include
+)
+
+if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+  set(VC_LIB_PATH_SUFFIX lib/x64)
+else()
+  set(VC_LIB_PATH_SUFFIX lib/x86)
+endif()
+
+# SDL-1.1 is the name used by FreeBSD ports...
+# don't confuse it for the version number.
+find_library(SDL_LIBRARY_TEMP
+  NAMES SDL SDL-1.1
+  HINTS
+    ENV SDLDIR
+  PATH_SUFFIXES lib ${VC_LIB_PATH_SUFFIX}
+)
+
+# Hide this cache variable from the user, it's an internal implementation
+# detail. The documented library variable for the user is SDL_LIBRARY
+# which is derived from SDL_LIBRARY_TEMP further below.
+set_property(CACHE SDL_LIBRARY_TEMP PROPERTY TYPE INTERNAL)
+
+if(NOT SDL_BUILDING_LIBRARY)
+  if(NOT SDL_INCLUDE_DIR MATCHES ".framework")
+    # Non-OS X framework versions expect you to also dynamically link to
+    # SDLmain. This is mainly for Windows and OS X. Other (Unix) platforms
+    # seem to provide SDLmain for compatibility even though they don't
+    # necessarily need it.
+    find_library(SDLMAIN_LIBRARY
+      NAMES SDLmain SDLmain-1.1
+      HINTS
+        ENV SDLDIR
+      PATH_SUFFIXES lib ${VC_LIB_PATH_SUFFIX}
+      PATHS
+      /opt
+    )
+  endif()
+endif()
+
+# SDL may require threads on your system.
+# The Apple build may not need an explicit flag because one of the
+# frameworks may already provide it.
+# But for non-OSX systems, I will use the CMake Threads package.
+if(NOT APPLE)
+  find_package(Threads)
+endif()
+
+# MinGW needs an additional link flag, -mwindows
+# It's total link flags should look like -lmingw32 -lSDLmain -lSDL -mwindows
+if(MINGW)
+  set(MINGW32_LIBRARY mingw32 "-mwindows" CACHE STRING "link flags for MinGW")
+endif()
+
+if(SDL_LIBRARY_TEMP)
+  # For SDLmain
+  if(SDLMAIN_LIBRARY AND NOT SDL_BUILDING_LIBRARY)
+    list(FIND SDL_LIBRARY_TEMP "${SDLMAIN_LIBRARY}" _SDL_MAIN_INDEX)
+    if(_SDL_MAIN_INDEX EQUAL -1)
+      set(SDL_LIBRARY_TEMP "${SDLMAIN_LIBRARY}" ${SDL_LIBRARY_TEMP})
+    endif()
+    unset(_SDL_MAIN_INDEX)
+  endif()
+
+  # For OS X, SDL uses Cocoa as a backend so it must link to Cocoa.
+  # CMake doesn't display the -framework Cocoa string in the UI even
+  # though it actually is there if I modify a pre-used variable.
+  # I think it has something to do with the CACHE STRING.
+  # So I use a temporary variable until the end so I can set the
+  # "real" variable in one-shot.
+  if(APPLE)
+    set(SDL_LIBRARY_TEMP ${SDL_LIBRARY_TEMP} "-framework Cocoa")
+  endif()
+
+  # For threads, as mentioned Apple doesn't need this.
+  # In fact, there seems to be a problem if I used the Threads package
+  # and try using this line, so I'm just skipping it entirely for OS X.
+  if(NOT APPLE)
+    set(SDL_LIBRARY_TEMP ${SDL_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT})
+  endif()
+
+  # For MinGW library
+  if(MINGW)
+    set(SDL_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL_LIBRARY_TEMP})
+  endif()
+
+  # Set the final string here so the GUI reflects the final state.
+  set(SDL_LIBRARY ${SDL_LIBRARY_TEMP} CACHE STRING "Where the SDL Library can be found")
+endif()
+
+if(SDL_INCLUDE_DIR AND EXISTS "${SDL_INCLUDE_DIR}/SDL_version.h")
+  file(STRINGS "${SDL_INCLUDE_DIR}/SDL_version.h" SDL_VERSION_MAJOR_LINE REGEX "^#define[ \t]+SDL_MAJOR_VERSION[ \t]+[0-9]+$")
+  file(STRINGS "${SDL_INCLUDE_DIR}/SDL_version.h" SDL_VERSION_MINOR_LINE REGEX "^#define[ \t]+SDL_MINOR_VERSION[ \t]+[0-9]+$")
+  file(STRINGS "${SDL_INCLUDE_DIR}/SDL_version.h" SDL_VERSION_PATCH_LINE REGEX "^#define[ \t]+SDL_PATCHLEVEL[ \t]+[0-9]+$")
+  string(REGEX REPLACE "^#define[ \t]+SDL_MAJOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL_VERSION_MAJOR "${SDL_VERSION_MAJOR_LINE}")
+  string(REGEX REPLACE "^#define[ \t]+SDL_MINOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL_VERSION_MINOR "${SDL_VERSION_MINOR_LINE}")
+  string(REGEX REPLACE "^#define[ \t]+SDL_PATCHLEVEL[ \t]+([0-9]+)$" "\\1" SDL_VERSION_PATCH "${SDL_VERSION_PATCH_LINE}")
+  unset(SDL_VERSION_MAJOR_LINE)
+  unset(SDL_VERSION_MINOR_LINE)
+  unset(SDL_VERSION_PATCH_LINE)
+  set(SDL_VERSION ${SDL_VERSION_MAJOR}.${SDL_VERSION_MINOR}.${SDL_VERSION_PATCH})
+  set(SDL_VERSION_STRING ${SDL_VERSION})
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL
+                                  REQUIRED_VARS SDL_LIBRARY SDL_INCLUDE_DIR
+                                  VERSION_VAR SDL_VERSION_STRING)
+
+if(SDL_FOUND)
+  set(SDL_LIBRARIES ${SDL_LIBRARY})
+  set(SDL_INCLUDE_DIRS ${SDL_INCLUDE_DIR})
+  if(NOT TARGET SDL::SDL)
+    add_library(SDL::SDL INTERFACE IMPORTED)
+    set_target_properties(SDL::SDL PROPERTIES
+      INTERFACE_INCLUDE_DIRECTORIES "${SDL_INCLUDE_DIR}"
+      INTERFACE_LINK_LIBRARIES "${SDL_LIBRARY}")
+  endif()
+endif()
diff --git a/share/cmake-3.18/Modules/FindSDL_image.cmake b/share/cmake-3.22/Modules/FindSDL_image.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindSDL_image.cmake
rename to share/cmake-3.22/Modules/FindSDL_image.cmake
diff --git a/share/cmake-3.18/Modules/FindSDL_mixer.cmake b/share/cmake-3.22/Modules/FindSDL_mixer.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindSDL_mixer.cmake
rename to share/cmake-3.22/Modules/FindSDL_mixer.cmake
diff --git a/share/cmake-3.18/Modules/FindSDL_net.cmake b/share/cmake-3.22/Modules/FindSDL_net.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindSDL_net.cmake
rename to share/cmake-3.22/Modules/FindSDL_net.cmake
diff --git a/share/cmake-3.18/Modules/FindSDL_sound.cmake b/share/cmake-3.22/Modules/FindSDL_sound.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindSDL_sound.cmake
rename to share/cmake-3.22/Modules/FindSDL_sound.cmake
diff --git a/share/cmake-3.18/Modules/FindSDL_ttf.cmake b/share/cmake-3.22/Modules/FindSDL_ttf.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindSDL_ttf.cmake
rename to share/cmake-3.22/Modules/FindSDL_ttf.cmake
diff --git a/share/cmake-3.22/Modules/FindSQLite3.cmake b/share/cmake-3.22/Modules/FindSQLite3.cmake
new file mode 100644
index 0000000..88c7dd2
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindSQLite3.cmake
@@ -0,0 +1,68 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindSQLite3
+-----------
+
+.. versionadded:: 3.14
+
+Find the SQLite libraries, v3
+
+IMPORTED targets
+^^^^^^^^^^^^^^^^
+
+This module defines the following :prop_tgt:`IMPORTED` target:
+
+``SQLite::SQLite3``
+
+Result variables
+^^^^^^^^^^^^^^^^
+
+This module will set the following variables if found:
+
+``SQLite3_INCLUDE_DIRS``
+  where to find sqlite3.h, etc.
+``SQLite3_LIBRARIES``
+  the libraries to link against to use SQLite3.
+``SQLite3_VERSION``
+  version of the SQLite3 library found
+``SQLite3_FOUND``
+  TRUE if found
+
+#]=======================================================================]
+
+# Look for the necessary header
+find_path(SQLite3_INCLUDE_DIR NAMES sqlite3.h)
+mark_as_advanced(SQLite3_INCLUDE_DIR)
+
+# Look for the necessary library
+find_library(SQLite3_LIBRARY NAMES sqlite3 sqlite)
+mark_as_advanced(SQLite3_LIBRARY)
+
+# Extract version information from the header file
+if(SQLite3_INCLUDE_DIR)
+    file(STRINGS ${SQLite3_INCLUDE_DIR}/sqlite3.h _ver_line
+         REGEX "^#define SQLITE_VERSION  *\"[0-9]+\\.[0-9]+\\.[0-9]+\""
+         LIMIT_COUNT 1)
+    string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+"
+           SQLite3_VERSION "${_ver_line}")
+    unset(_ver_line)
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+find_package_handle_standard_args(SQLite3
+    REQUIRED_VARS SQLite3_INCLUDE_DIR SQLite3_LIBRARY
+    VERSION_VAR SQLite3_VERSION)
+
+# Create the imported target
+if(SQLite3_FOUND)
+    set(SQLite3_INCLUDE_DIRS ${SQLite3_INCLUDE_DIR})
+    set(SQLite3_LIBRARIES ${SQLite3_LIBRARY})
+    if(NOT TARGET SQLite::SQLite3)
+        add_library(SQLite::SQLite3 UNKNOWN IMPORTED)
+        set_target_properties(SQLite::SQLite3 PROPERTIES
+            IMPORTED_LOCATION             "${SQLite3_LIBRARY}"
+            INTERFACE_INCLUDE_DIRECTORIES "${SQLite3_INCLUDE_DIR}")
+    endif()
+endif()
diff --git a/share/cmake-3.22/Modules/FindSWIG.cmake b/share/cmake-3.22/Modules/FindSWIG.cmake
new file mode 100644
index 0000000..7c610d9
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindSWIG.cmake
@@ -0,0 +1,163 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindSWIG
+--------
+
+Find the Simplified Wrapper and Interface Generator (SWIG_) executable.
+
+This module finds an installed SWIG and determines its version.
+
+.. versionadded:: 3.18
+  If a ``COMPONENTS`` or ``OPTIONAL_COMPONENTS`` argument is given to the
+  :command:`find_package` command, it will also determine supported target
+  languages.
+
+.. versionadded:: 3.19
+  When a version is requested, it can be specified as a simple value or as a
+  range. For a detailed description of version range usage and capabilities,
+  refer to the :command:`find_package` command.
+
+The module defines the following variables:
+
+``SWIG_FOUND``
+  Whether SWIG and any required components were found on the system.
+``SWIG_EXECUTABLE``
+  Path to the SWIG executable.
+``SWIG_DIR``
+  Path to the installed SWIG ``Lib`` directory (result of ``swig -swiglib``).
+``SWIG_VERSION``
+  SWIG executable version (result of ``swig -version``).
+``SWIG_<lang>_FOUND``
+  If ``COMPONENTS`` or ``OPTIONAL_COMPONENTS`` are requested, each available
+  target language ``<lang>`` (lowercase) will be set to TRUE.
+
+Any ``COMPONENTS`` given to ``find_package`` should be the names of supported
+target languages as provided to the LANGUAGE argument of ``swig_add_library``,
+such as ``python`` or ``perl5``. Language names *must* be lowercase.
+
+All information is collected from the ``SWIG_EXECUTABLE``, so the version
+to be found can be changed from the command line by means of setting
+``SWIG_EXECUTABLE``.
+
+Example usage requiring SWIG 4.0 or higher and Python language support, with
+optional Fortran support:
+
+.. code-block:: cmake
+
+   find_package(SWIG 4.0 COMPONENTS python OPTIONAL_COMPONENTS fortran)
+   if(SWIG_FOUND)
+     message("SWIG found: ${SWIG_EXECUTABLE}")
+     if(NOT SWIG_fortran_FOUND)
+       message(WARNING "SWIG Fortran bindings cannot be generated")
+     endif()
+   endif()
+
+.. _`SWIG`: http://swig.org
+
+#]=======================================================================]
+
+# compute list of possible names
+unset (_SWIG_NAMES)
+if (SWIG_FIND_VERSION_RANGE)
+  foreach (_SWIG_MAJOR IN ITEMS 4 3 2)
+    if (_SWIG_MAJOR VERSION_GREATER_EQUAL SWIG_FIND_VERSION_MIN_MAJOR
+        AND ((SWIG_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND _SWIG_MAJOR VERSION_LESS_EQUAL SWIG_FIND_VERSION_MAX)
+        OR (SWIG_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND _SWIG_MAJOR VERSION_LESS SWIG_FIND_VERSION_MAX)))
+      list (APPEND _SWIG_NAMES swig${_SWIG_MAJOR}.0)
+    endif()
+  endforeach()
+elseif(SWIG_FIND_VERSION)
+  if (SWIG_FIND_VERSION_EXACT)
+    set(_SWIG_NAMES swig${SWIG_FIND_VERSION_MAJOR}.0)
+  else()
+    foreach (_SWIG_MAJOR IN ITEMS 4 3 2)
+      if (_SWIG_MAJOR VERSION_GREATER_EQUAL SWIG_FIND_VERSION_MAJOR)
+        list (APPEND _SWIG_NAMES swig${_SWIG_MAJOR}.0)
+      endif()
+    endforeach()
+  endif()
+else()
+  set (_SWIG_NAMES swig4.0 swig3.0 swig2.0)
+endif()
+if (NOT _SWIG_NAMES)
+  # try to find any version
+  set (_SWIG_NAMES swig4.0 swig3.0 swig2.0)
+endif()
+
+find_program(SWIG_EXECUTABLE NAMES ${_SWIG_NAMES} swig)
+unset(_SWIG_NAMES)
+
+if(SWIG_EXECUTABLE AND NOT SWIG_DIR)
+  # Find default value for SWIG library directory
+  execute_process(COMMAND "${SWIG_EXECUTABLE}" -swiglib
+    OUTPUT_VARIABLE _swig_output
+    ERROR_VARIABLE _swig_error
+    RESULT_VARIABLE _swig_result)
+
+  if(_swig_result)
+    set(_msg "Command \"${SWIG_EXECUTABLE} -swiglib\" failed with output:\n${_swig_error}")
+    if(SWIG_FIND_REQUIRED)
+      message(SEND_ERROR "${_msg}")
+    else()
+      message(STATUS "${_msg}")
+    endif()
+    unset(_msg)
+  else()
+    string(REGEX REPLACE "[\n\r]+" ";" _SWIG_LIB ${_swig_output})
+  endif()
+
+  # Find SWIG library directory
+  find_path(SWIG_DIR swig.swg PATHS ${_SWIG_LIB} NO_CMAKE_FIND_ROOT_PATH)
+  unset(_SWIG_LIB)
+endif()
+
+if(SWIG_EXECUTABLE AND SWIG_DIR AND NOT SWIG_VERSION)
+  # Determine SWIG version
+  execute_process(COMMAND "${SWIG_EXECUTABLE}" -version
+    OUTPUT_VARIABLE _swig_output
+    ERROR_VARIABLE _swig_output
+    RESULT_VARIABLE _swig_result)
+  if(_swig_result)
+    message(SEND_ERROR "Command \"${SWIG_EXECUTABLE} -version\" failed with output:\n${_swig_output}")
+  else()
+    string(REGEX REPLACE ".*SWIG Version[^0-9.]*\([0-9.]+\).*" "\\1"
+      _swig_output "${_swig_output}")
+    set(SWIG_VERSION ${_swig_output} CACHE STRING "Swig version" FORCE)
+  endif()
+endif()
+
+if(SWIG_EXECUTABLE AND SWIG_FIND_COMPONENTS)
+  execute_process(COMMAND "${SWIG_EXECUTABLE}" -help
+    OUTPUT_VARIABLE _swig_output
+    ERROR_VARIABLE _swig_error
+    RESULT_VARIABLE _swig_result)
+  if(_swig_result)
+    message(SEND_ERROR "Command \"${SWIG_EXECUTABLE} -help\" failed with output:\n${_swig_error}")
+  else()
+    string(REPLACE "\n" ";" _swig_output "${_swig_output}")
+    foreach(SWIG_line IN LISTS _swig_output)
+      if(SWIG_line MATCHES "-([A-Za-z0-9_]+) +- *Generate.*wrappers")
+        set(SWIG_${CMAKE_MATCH_1}_FOUND TRUE)
+      endif()
+    endforeach()
+  endif()
+endif()
+
+unset(_swig_output)
+unset(_swig_error)
+unset(_swig_result)
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+find_package_handle_standard_args(
+  SWIG HANDLE_COMPONENTS
+  REQUIRED_VARS SWIG_EXECUTABLE SWIG_DIR
+  VERSION_VAR SWIG_VERSION
+  HANDLE_VERSION_RANGE)
+
+if(SWIG_FOUND)
+  set(SWIG_USE_FILE "${CMAKE_CURRENT_LIST_DIR}/UseSWIG.cmake")
+endif()
+
+mark_as_advanced(SWIG_DIR SWIG_VERSION SWIG_EXECUTABLE)
diff --git a/share/cmake-3.22/Modules/FindSelfPackers.cmake b/share/cmake-3.22/Modules/FindSelfPackers.cmake
new file mode 100644
index 0000000..a6eb6e5
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindSelfPackers.cmake
@@ -0,0 +1,61 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindSelfPackers
+---------------
+
+Find upx
+
+This module looks for some executable packers (i.e.  software that
+compress executables or shared libs into on-the-fly self-extracting
+executables or shared libs.  Examples:
+
+::
+
+  UPX: http://wildsau.idv.uni-linz.ac.at/mfx/upx.html
+#]=======================================================================]
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindCygwin.cmake)
+include(${CMAKE_CURRENT_LIST_DIR}/FindMsys.cmake)
+
+find_program(SELF_PACKER_FOR_EXECUTABLE
+  upx
+  ${CYGWIN_INSTALL_PATH}/bin
+  ${MSYS_INSTALL_PATH}/usr/bin
+)
+
+find_program(SELF_PACKER_FOR_SHARED_LIB
+  upx
+  ${CYGWIN_INSTALL_PATH}/bin
+  ${MSYS_INSTALL_PATH}/usr/bin
+)
+
+mark_as_advanced(
+  SELF_PACKER_FOR_EXECUTABLE
+  SELF_PACKER_FOR_SHARED_LIB
+)
+
+#
+# Set flags
+#
+if (SELF_PACKER_FOR_EXECUTABLE MATCHES "upx")
+  set (SELF_PACKER_FOR_EXECUTABLE_FLAGS "-q" CACHE STRING
+       "Flags for the executable self-packer.")
+else ()
+  set (SELF_PACKER_FOR_EXECUTABLE_FLAGS "" CACHE STRING
+       "Flags for the executable self-packer.")
+endif ()
+
+if (SELF_PACKER_FOR_SHARED_LIB MATCHES "upx")
+  set (SELF_PACKER_FOR_SHARED_LIB_FLAGS "-q" CACHE STRING
+       "Flags for the shared lib self-packer.")
+else ()
+  set (SELF_PACKER_FOR_SHARED_LIB_FLAGS "" CACHE STRING
+       "Flags for the shared lib self-packer.")
+endif ()
+
+mark_as_advanced(
+  SELF_PACKER_FOR_EXECUTABLE_FLAGS
+  SELF_PACKER_FOR_SHARED_LIB_FLAGS
+)
diff --git a/share/cmake-3.22/Modules/FindSquish.cmake b/share/cmake-3.22/Modules/FindSquish.cmake
new file mode 100644
index 0000000..9a17fdb
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindSquish.cmake
@@ -0,0 +1,289 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindSquish
+----------
+
+-- Typical Use
+
+
+
+This module can be used to find Squish.
+
+::
+
+  SQUISH_FOUND                    If false, don't try to use Squish
+  SQUISH_VERSION                  The full version of Squish found
+  SQUISH_VERSION_MAJOR            The major version of Squish found
+  SQUISH_VERSION_MINOR            The minor version of Squish found
+  SQUISH_VERSION_PATCH            The patch version of Squish found
+
+
+
+::
+
+  SQUISH_INSTALL_DIR              The Squish installation directory
+                                  (containing bin, lib, etc)
+  SQUISH_SERVER_EXECUTABLE        The squishserver executable
+  SQUISH_CLIENT_EXECUTABLE        The squishrunner executable
+
+
+
+::
+
+  SQUISH_INSTALL_DIR_FOUND        Was the install directory found?
+  SQUISH_SERVER_EXECUTABLE_FOUND  Was the server executable found?
+  SQUISH_CLIENT_EXECUTABLE_FOUND  Was the client executable found?
+
+
+
+It provides the function squish_add_test() for adding a squish test
+to cmake using Squish >= 4.x:
+
+::
+
+   squish_add_test(cmakeTestName
+     AUT targetName SUITE suiteName TEST squishTestName
+     [SETTINGSGROUP group] [PRE_COMMAND command] [POST_COMMAND command] )
+
+.. versionchanged:: 3.18
+  In previous CMake versions, this function was named ``squish_v4_add_test``.
+
+The arguments have the following meaning:
+
+``cmakeTestName``
+  this will be used as the first argument for add_test()
+``AUT targetName``
+  the name of the cmake target which will be used as AUT, i.e. the
+  executable which will be tested.
+``SUITE suiteName``
+  this is either the full path to the squish suite, or just the
+  last directory of the suite, i.e. the suite name. In this case
+  the CMakeLists.txt which calls squish_add_test() must be located
+  in the parent directory of the suite directory.
+``TEST squishTestName``
+  the name of the squish test, i.e. the name of the subdirectory
+  of the test inside the suite directory.
+``SETTINGSGROUP group``
+  deprecated, this argument will be ignored.
+``PRE_COMMAND command``
+  if specified, the given command will be executed before starting the squish test.
+``POST_COMMAND command``
+  same as PRE_COMMAND, but after the squish test has been executed.
+
+
+
+::
+
+   enable_testing()
+   find_package(Squish 6.5)
+   if (SQUISH_FOUND)
+      squish_add_test(myTestName
+        AUT myApp
+        SUITE ${CMAKE_SOURCE_DIR}/tests/mySuite
+        TEST someSquishTest
+        )
+   endif ()
+
+
+
+
+
+For users of Squish version 3.x the macro squish_v3_add_test() is
+provided:
+
+::
+
+   squish_v3_add_test(testName applicationUnderTest testCase envVars testWrapper)
+   Use this macro to add a test using Squish 3.x.
+
+
+
+::
+
+  enable_testing()
+  find_package(Squish 3.0)
+  if (SQUISH_FOUND)
+    squish_v3_add_test(myTestName myApplication testCase envVars testWrapper)
+  endif ()
+
+
+#]=======================================================================]
+
+set(SQUISH_INSTALL_DIR_STRING "Directory containing the bin, doc, and lib directories for Squish; this should be the root of the installation directory.")
+set(SQUISH_SERVER_EXECUTABLE_STRING "The squishserver executable program.")
+set(SQUISH_CLIENT_EXECUTABLE_STRING "The squishclient executable program.")
+
+# Search only if the location is not already known.
+if(NOT SQUISH_INSTALL_DIR)
+  # Get the system search path as a list.
+  file(TO_CMAKE_PATH "$ENV{PATH}" SQUISH_INSTALL_DIR_SEARCH2)
+
+  # Construct a set of paths relative to the system search path.
+  set(SQUISH_INSTALL_DIR_SEARCH "")
+  foreach(dir ${SQUISH_INSTALL_DIR_SEARCH2})
+    set(SQUISH_INSTALL_DIR_SEARCH ${SQUISH_INSTALL_DIR_SEARCH} "${dir}/../lib/fltk")
+  endforeach()
+  string(REPLACE "//" "/" SQUISH_INSTALL_DIR_SEARCH "${SQUISH_INSTALL_DIR_SEARCH}")
+
+  # Look for an installation
+  find_path(SQUISH_INSTALL_DIR
+    NAMES bin/squishrunner bin/squishrunner.exe
+    HINTS
+    # Look for an environment variable SQUISH_INSTALL_DIR.
+      ENV SQUISH_INSTALL_DIR
+
+    # Look in places relative to the system executable search path.
+    ${SQUISH_INSTALL_DIR_SEARCH}
+
+    DOC "The ${SQUISH_INSTALL_DIR_STRING}"
+    )
+endif()
+
+# search for the executables
+if(SQUISH_INSTALL_DIR)
+  set(SQUISH_INSTALL_DIR_FOUND 1)
+
+  # find the client program
+  if(NOT SQUISH_CLIENT_EXECUTABLE)
+    find_program(SQUISH_CLIENT_EXECUTABLE ${SQUISH_INSTALL_DIR}/bin/squishrunner${CMAKE_EXECUTABLE_SUFFIX} DOC "The ${SQUISH_CLIENT_EXECUTABLE_STRING}")
+  endif()
+
+  # find the server program
+  if(NOT SQUISH_SERVER_EXECUTABLE)
+    find_program(SQUISH_SERVER_EXECUTABLE ${SQUISH_INSTALL_DIR}/bin/squishserver${CMAKE_EXECUTABLE_SUFFIX} DOC "The ${SQUISH_SERVER_EXECUTABLE_STRING}")
+  endif()
+
+else()
+  set(SQUISH_INSTALL_DIR_FOUND 0)
+endif()
+
+
+set(SQUISH_VERSION)
+set(SQUISH_VERSION_MAJOR)
+set(SQUISH_VERSION_MINOR)
+set(SQUISH_VERSION_PATCH)
+
+# record if executables are set
+if(SQUISH_CLIENT_EXECUTABLE)
+  set(SQUISH_CLIENT_EXECUTABLE_FOUND 1)
+  execute_process(COMMAND "${SQUISH_CLIENT_EXECUTABLE}" --version
+                  OUTPUT_VARIABLE _squishVersionOutput
+                  ERROR_QUIET )
+  if("${_squishVersionOutput}" MATCHES "([0-9]+)\\.([0-9]+)\\.([0-9]+)")
+    set(SQUISH_VERSION_MAJOR "${CMAKE_MATCH_1}")
+    set(SQUISH_VERSION_MINOR "${CMAKE_MATCH_2}")
+    set(SQUISH_VERSION_PATCH "${CMAKE_MATCH_3}")
+    set(SQUISH_VERSION "${SQUISH_VERSION_MAJOR}.${SQUISH_VERSION_MINOR}.${SQUISH_VERSION_PATCH}" )
+  endif()
+else()
+  set(SQUISH_CLIENT_EXECUTABLE_FOUND 0)
+endif()
+
+if(SQUISH_SERVER_EXECUTABLE)
+  set(SQUISH_SERVER_EXECUTABLE_FOUND 1)
+else()
+  set(SQUISH_SERVER_EXECUTABLE_FOUND 0)
+endif()
+
+# record if Squish was found
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+find_package_handle_standard_args(Squish  REQUIRED_VARS  SQUISH_INSTALL_DIR SQUISH_CLIENT_EXECUTABLE SQUISH_SERVER_EXECUTABLE
+                                          VERSION_VAR  SQUISH_VERSION )
+
+
+set(_SQUISH_MODULE_DIR "${CMAKE_CURRENT_LIST_DIR}")
+
+macro(squish_v3_add_test testName testAUT testCase envVars testWraper)
+  if("${SQUISH_VERSION_MAJOR}" STRGREATER "3")
+    message(STATUS "Using squish_v3_add_test(), but SQUISH_VERSION_MAJOR is ${SQUISH_VERSION_MAJOR}.\nThis may not work.")
+  endif()
+
+  add_test(${testName}
+    ${CMAKE_COMMAND} -V -VV
+    "-Dsquish_version:STRING=3"
+    "-Dsquish_aut:STRING=${testAUT}"
+    "-Dsquish_server_executable:STRING=${SQUISH_SERVER_EXECUTABLE}"
+    "-Dsquish_client_executable:STRING=${SQUISH_CLIENT_EXECUTABLE}"
+    "-Dsquish_libqtdir:STRING=${QT_LIBRARY_DIR}"
+    "-Dsquish_test_case:STRING=${testCase}"
+    "-Dsquish_env_vars:STRING=${envVars}"
+    "-Dsquish_wrapper:STRING=${testWraper}"
+    "-Dsquish_module_dir:STRING=${_SQUISH_MODULE_DIR}"
+    -P "${_SQUISH_MODULE_DIR}/SquishTestScript.cmake"
+    )
+  set_tests_properties(${testName}
+    PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED;ERROR;FATAL"
+    )
+endmacro()
+
+
+function(squish_v4_add_test testName)
+  if(NOT "${SQUISH_VERSION_MAJOR}" STRGREATER "3")
+    message(STATUS "Using squish_add_test(), but SQUISH_VERSION_MAJOR is ${SQUISH_VERSION_MAJOR}.\nThis may not work.")
+  endif()
+
+  set(oneValueArgs AUT SUITE TEST SETTINGSGROUP PRE_COMMAND POST_COMMAND)
+
+  cmake_parse_arguments(_SQUISH "" "${oneValueArgs}" "" ${ARGN} )
+
+  if(_SQUISH_UNPARSED_ARGUMENTS)
+    message(FATAL_ERROR "Unknown keywords given to SQUISH_ADD_TEST(): \"${_SQUISH_UNPARSED_ARGUMENTS}\"")
+  endif()
+
+  if(NOT _SQUISH_AUT)
+    message(FATAL_ERROR "Required argument AUT not given for SQUISH_ADD_TEST()")
+  endif()
+
+  if(NOT _SQUISH_SUITE)
+    message(FATAL_ERROR "Required argument SUITE not given for SQUISH_ADD_TEST()")
+  endif()
+
+  if(NOT _SQUISH_TEST)
+    message(FATAL_ERROR "Required argument TEST not given for SQUISH_ADD_TEST()")
+  endif()
+
+  get_filename_component(absTestSuite "${_SQUISH_SUITE}" ABSOLUTE)
+  if(NOT EXISTS "${absTestSuite}")
+    message(FATAL_ERROR "Could not find squish test suite ${_SQUISH_SUITE} (checked ${absTestSuite})")
+  endif()
+
+  set(absTestCase "${absTestSuite}/${_SQUISH_TEST}")
+  if(NOT EXISTS "${absTestCase}")
+    message(FATAL_ERROR "Could not find squish testcase ${_SQUISH_TEST} (checked ${absTestCase})")
+  endif()
+
+  if(_SQUISH_SETTINGSGROUP)
+    message("SETTINGSGROUP is deprecated and will be ignored.")
+  endif()
+
+  add_test(NAME ${testName}
+    COMMAND ${CMAKE_COMMAND} -V -VV
+    "-Dsquish_version:STRING=4"
+    "-Dsquish_aut:STRING=$<TARGET_FILE_BASE_NAME:${_SQUISH_AUT}>"
+    "-Dsquish_aut_dir:STRING=$<TARGET_FILE_DIR:${_SQUISH_AUT}>"
+    "-Dsquish_server_executable:STRING=${SQUISH_SERVER_EXECUTABLE}"
+    "-Dsquish_client_executable:STRING=${SQUISH_CLIENT_EXECUTABLE}"
+    "-Dsquish_libqtdir:STRING=${QT_LIBRARY_DIR}"
+    "-Dsquish_test_suite:STRING=${absTestSuite}"
+    "-Dsquish_test_case:STRING=${_SQUISH_TEST}"
+    "-Dsquish_env_vars:STRING=${envVars}"
+    "-Dsquish_wrapper:STRING=${testWraper}"
+    "-Dsquish_module_dir:STRING=${_SQUISH_MODULE_DIR}"
+    "-Dsquish_pre_command:STRING=${_SQUISH_PRE_COMMAND}"
+    "-Dsquish_post_command:STRING=${_SQUISH_POST_COMMAND}"
+    -P "${_SQUISH_MODULE_DIR}/SquishTestScript.cmake"
+    )
+  set_tests_properties(${testName}
+    PROPERTIES FAIL_REGULAR_EXPRESSION "FAIL;FAILED;ERROR;FATAL"
+    )
+endfunction()
+
+macro(squish_add_test)
+  if("${SQUISH_VERSION_MAJOR}" STRGREATER "3")
+    squish_v4_add_test(${ARGV})
+  else()
+    squish_v3_add_test(${ARGV})
+  endif()
+endmacro()
diff --git a/share/cmake-3.22/Modules/FindSubversion.cmake b/share/cmake-3.22/Modules/FindSubversion.cmake
new file mode 100644
index 0000000..7a9c440
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindSubversion.cmake
@@ -0,0 +1,169 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindSubversion
+--------------
+
+Extract information from a subversion working copy
+
+The module defines the following variables:
+
+::
+
+  Subversion_SVN_EXECUTABLE - path to svn command line client
+  Subversion_VERSION_SVN - version of svn command line client
+  Subversion_FOUND - true if the command line client was found
+  SUBVERSION_FOUND - same as Subversion_FOUND, set for compatibility reasons
+
+
+
+The minimum required version of Subversion can be specified using the
+standard syntax, e.g. ``find_package(Subversion 1.4)``.
+
+If the command line client executable is found two macros are defined:
+
+::
+
+  Subversion_WC_INFO(<dir> <var-prefix> [IGNORE_SVN_FAILURE])
+  Subversion_WC_LOG(<dir> <var-prefix>)
+
+``Subversion_WC_INFO`` extracts information of a subversion working copy at a
+given location.  This macro defines the following variables if running
+Subversion's ``info`` command on ``<dir>`` succeeds; otherwise a
+``SEND_ERROR`` message is generated.
+
+.. versionadded:: 3.13
+  The error can be ignored by providing the
+  ``IGNORE_SVN_FAILURE`` option, which causes these variables to remain
+  undefined.
+
+::
+
+  <var-prefix>_WC_URL - url of the repository (at <dir>)
+  <var-prefix>_WC_ROOT - root url of the repository
+  <var-prefix>_WC_REVISION - current revision
+  <var-prefix>_WC_LAST_CHANGED_AUTHOR - author of last commit
+  <var-prefix>_WC_LAST_CHANGED_DATE - date of last commit
+  <var-prefix>_WC_LAST_CHANGED_REV - revision of last commit
+  <var-prefix>_WC_INFO - output of command `svn info <dir>'
+
+``Subversion_WC_LOG`` retrieves the log message of the base revision of a
+subversion working copy at a given location.  This macro defines the variable:
+
+::
+
+  <var-prefix>_LAST_CHANGED_LOG - last log of base revision
+
+Example usage:
+
+::
+
+  find_package(Subversion)
+  if(SUBVERSION_FOUND)
+    Subversion_WC_INFO(${PROJECT_SOURCE_DIR} Project)
+    message("Current revision is ${Project_WC_REVISION}")
+    Subversion_WC_LOG(${PROJECT_SOURCE_DIR} Project)
+    message("Last changed log is ${Project_LAST_CHANGED_LOG}")
+  endif()
+#]=======================================================================]
+
+find_program(Subversion_SVN_EXECUTABLE svn
+  PATHS
+    [HKEY_LOCAL_MACHINE\\Software\\TortoiseSVN;Directory]/bin
+  DOC "subversion command line client")
+mark_as_advanced(Subversion_SVN_EXECUTABLE)
+
+if(Subversion_SVN_EXECUTABLE)
+  # the subversion commands should be executed with the C locale, otherwise
+  # the message (which are parsed) may be translated, Alex
+  set(_Subversion_SAVED_LC_ALL "$ENV{LC_ALL}")
+  set(ENV{LC_ALL} C)
+
+  execute_process(COMMAND ${Subversion_SVN_EXECUTABLE} --version
+    OUTPUT_VARIABLE Subversion_VERSION_SVN
+    ERROR_VARIABLE _Subversion_VERSION_STDERR
+    RESULT_VARIABLE _Subversion_VERSION_RESULT
+    OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+  # restore the previous LC_ALL
+  set(ENV{LC_ALL} ${_Subversion_SAVED_LC_ALL})
+
+  if(_Subversion_VERSION_RESULT EQUAL 0)
+    string(REGEX REPLACE "^(.*\n)?svn, version ([.0-9]+).*"
+      "\\2" Subversion_VERSION_SVN "${Subversion_VERSION_SVN}")
+  else()
+    unset(Subversion_VERSION_SVN)
+    if(_Subversion_VERSION_STDERR MATCHES "svn: error: The subversion command line tools are no longer provided by Xcode")
+      set(Subversion_SVN_EXECUTABLE Subversion_SVN_EXECUTABLE-NOTFOUND)
+    endif()
+  endif()
+
+  macro(Subversion_WC_INFO dir prefix)
+
+    cmake_parse_arguments(
+      "Subversion_WC_INFO"
+      "IGNORE_SVN_FAILURE"
+      "" ""
+      ${ARGN}
+    )
+
+    # the subversion commands should be executed with the C locale, otherwise
+    # the message (which are parsed) may be translated, Alex
+    set(_Subversion_SAVED_LC_ALL "$ENV{LC_ALL}")
+    set(ENV{LC_ALL} C)
+
+    execute_process(COMMAND ${Subversion_SVN_EXECUTABLE} info ${dir}
+      OUTPUT_VARIABLE ${prefix}_WC_INFO
+      ERROR_VARIABLE Subversion_svn_info_error
+      RESULT_VARIABLE Subversion_svn_info_result
+      OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+    if(${Subversion_svn_info_result} EQUAL 0)
+      string(REGEX REPLACE "^(.*\n)?URL: ([^\n]+).*"
+        "\\2" ${prefix}_WC_URL "${${prefix}_WC_INFO}")
+      string(REGEX REPLACE "^(.*\n)?Repository Root: ([^\n]+).*"
+        "\\2" ${prefix}_WC_ROOT "${${prefix}_WC_INFO}")
+      string(REGEX REPLACE "^(.*\n)?Revision: ([^\n]+).*"
+        "\\2" ${prefix}_WC_REVISION "${${prefix}_WC_INFO}")
+      string(REGEX REPLACE "^(.*\n)?Last Changed Author: ([^\n]+).*"
+        "\\2" ${prefix}_WC_LAST_CHANGED_AUTHOR "${${prefix}_WC_INFO}")
+      string(REGEX REPLACE "^(.*\n)?Last Changed Rev: ([^\n]+).*"
+        "\\2" ${prefix}_WC_LAST_CHANGED_REV "${${prefix}_WC_INFO}")
+      string(REGEX REPLACE "^(.*\n)?Last Changed Date: ([^\n]+).*"
+        "\\2" ${prefix}_WC_LAST_CHANGED_DATE "${${prefix}_WC_INFO}")
+    elseif(NOT Subversion_WC_INFO_IGNORE_SVN_FAILURE)
+      message(SEND_ERROR "Command \"${Subversion_SVN_EXECUTABLE} info ${dir}\" failed with output:\n${Subversion_svn_info_error}")
+    endif()
+
+    # restore the previous LC_ALL
+    set(ENV{LC_ALL} ${_Subversion_SAVED_LC_ALL})
+
+  endmacro()
+
+  macro(Subversion_WC_LOG dir prefix)
+    # This macro can block if the certificate is not signed:
+    # svn ask you to accept the certificate and wait for your answer
+    # This macro requires a svn server network access (Internet most of the time)
+    # and can also be slow since it access the svn server
+    execute_process(COMMAND
+      ${Subversion_SVN_EXECUTABLE} --non-interactive log -r BASE ${dir}
+      OUTPUT_VARIABLE ${prefix}_LAST_CHANGED_LOG
+      ERROR_VARIABLE Subversion_svn_log_error
+      RESULT_VARIABLE Subversion_svn_log_result
+      OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+    if(NOT ${Subversion_svn_log_result} EQUAL 0)
+      message(SEND_ERROR "Command \"${Subversion_SVN_EXECUTABLE} log -r BASE ${dir}\" failed with output:\n${Subversion_svn_log_error}")
+    endif()
+  endmacro()
+
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(Subversion REQUIRED_VARS Subversion_SVN_EXECUTABLE
+                                             VERSION_VAR Subversion_VERSION_SVN )
+
+# for compatibility
+set(Subversion_FOUND ${SUBVERSION_FOUND})
+set(Subversion_SVN_FOUND ${SUBVERSION_FOUND})
diff --git a/share/cmake-3.22/Modules/FindTCL.cmake b/share/cmake-3.22/Modules/FindTCL.cmake
new file mode 100644
index 0000000..9b771dc
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindTCL.cmake
@@ -0,0 +1,247 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindTCL
+-------
+
+TK_INTERNAL_PATH was removed.
+
+This module finds if Tcl is installed and determines where the include
+files and libraries are.  It also determines what the name of the
+library is.  This code sets the following variables:
+
+::
+
+  TCL_FOUND              = Tcl was found
+  TK_FOUND               = Tk was found
+  TCLTK_FOUND            = Tcl and Tk were found
+  TCL_LIBRARY            = path to Tcl library (tcl tcl80)
+  TCL_INCLUDE_PATH       = path to where tcl.h can be found
+  TCL_TCLSH              = path to tclsh binary (tcl tcl80)
+  TK_LIBRARY             = path to Tk library (tk tk80 etc)
+  TK_INCLUDE_PATH        = path to where tk.h can be found
+  TK_WISH                = full path to the wish executable
+
+
+
+In an effort to remove some clutter and clear up some issues for
+people who are not necessarily Tcl/Tk gurus/developers, some
+variables were moved or removed.  Changes compared to CMake 2.4 are:
+
+::
+
+   => they were only useful for people writing Tcl/Tk extensions.
+   => these libs are not packaged by default with Tcl/Tk distributions.
+      Even when Tcl/Tk is built from source, several flavors of debug libs
+      are created and there is no real reason to pick a single one
+      specifically (say, amongst tcl84g, tcl84gs, or tcl84sgx).
+      Let's leave that choice to the user by allowing him to assign
+      TCL_LIBRARY to any Tcl library, debug or not.
+   => this ended up being only a Win32 variable, and there is a lot of
+      confusion regarding the location of this file in an installed Tcl/Tk
+      tree anyway (see 8.5 for example). If you need the internal path at
+      this point it is safer you ask directly where the *source* tree is
+      and dig from there.
+#]=======================================================================]
+
+include(${CMAKE_CURRENT_LIST_DIR}/CMakeFindFrameworks.cmake)
+include(${CMAKE_CURRENT_LIST_DIR}/FindTclsh.cmake)
+include(${CMAKE_CURRENT_LIST_DIR}/FindWish.cmake)
+
+if(TCLSH_VERSION_STRING)
+  set(TCL_TCLSH_VERSION "${TCLSH_VERSION_STRING}")
+else()
+  get_filename_component(TCL_TCLSH_PATH "${TCL_TCLSH}" PATH)
+  get_filename_component(TCL_TCLSH_PATH_PARENT "${TCL_TCLSH_PATH}" PATH)
+  string(REGEX REPLACE
+    "^.*tclsh([0-9]\\.*[0-9]).*$" "\\1" TCL_TCLSH_VERSION "${TCL_TCLSH}")
+endif()
+
+get_filename_component(TK_WISH_PATH "${TK_WISH}" PATH)
+get_filename_component(TK_WISH_PATH_PARENT "${TK_WISH_PATH}" PATH)
+string(REGEX REPLACE
+  "^.*wish([0-9]\\.*[0-9]).*$" "\\1" TK_WISH_VERSION "${TK_WISH}")
+
+get_filename_component(TCL_INCLUDE_PATH_PARENT "${TCL_INCLUDE_PATH}" PATH)
+get_filename_component(TK_INCLUDE_PATH_PARENT "${TK_INCLUDE_PATH}" PATH)
+
+get_filename_component(TCL_LIBRARY_PATH "${TCL_LIBRARY}" PATH)
+get_filename_component(TCL_LIBRARY_PATH_PARENT "${TCL_LIBRARY_PATH}" PATH)
+string(REGEX REPLACE
+  "^.*tcl([0-9]\\.*[0-9]).*$" "\\1" TCL_LIBRARY_VERSION "${TCL_LIBRARY}")
+
+get_filename_component(TK_LIBRARY_PATH "${TK_LIBRARY}" PATH)
+get_filename_component(TK_LIBRARY_PATH_PARENT "${TK_LIBRARY_PATH}" PATH)
+string(REGEX REPLACE
+  "^.*tk([0-9]\\.*[0-9]).*$" "\\1" TK_LIBRARY_VERSION "${TK_LIBRARY}")
+
+set(TCLTK_POSSIBLE_LIB_PATHS
+  "${TCL_INCLUDE_PATH_PARENT}/lib"
+  "${TK_INCLUDE_PATH_PARENT}/lib"
+  "${TCL_LIBRARY_PATH}"
+  "${TK_LIBRARY_PATH}"
+  "${TCL_TCLSH_PATH_PARENT}/lib"
+  "${TK_WISH_PATH_PARENT}/lib"
+)
+
+set(TCLTK_POSSIBLE_LIB_PATH_SUFFIXES
+  lib/tcl/tcl8.7
+  lib/tcl/tk8.7
+  lib/tcl/tcl8.6
+  lib/tcl/tk8.6
+  lib/tcl/tcl8.5
+  lib/tcl/tk8.5
+  lib/tcl/tcl8.4
+  lib/tcl/tk8.4
+)
+
+if(WIN32)
+  get_filename_component(
+    ActiveTcl_CurrentVersion
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl;CurrentVersion]"
+    NAME)
+  set(TCLTK_POSSIBLE_LIB_PATHS ${TCLTK_POSSIBLE_LIB_PATHS}
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl\\${ActiveTcl_CurrentVersion}]/lib"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.6;Root]/lib"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.5;Root]/lib"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.4;Root]/lib"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.3;Root]/lib"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.2;Root]/lib"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.0;Root]/lib"
+    "$ENV{ProgramFiles}/Tcl/Lib"
+    "C:/Program Files/Tcl/lib"
+    "C:/Tcl/lib"
+    )
+endif()
+
+find_library(TCL_LIBRARY
+  NAMES
+  tcl
+  tcl${TCL_LIBRARY_VERSION} tcl${TCL_TCLSH_VERSION} tcl${TK_WISH_VERSION}
+  tcl87 tcl8.7 tcl87t tcl8.7t
+  tcl86 tcl8.6 tcl86t tcl8.6t
+  tcl85 tcl8.5
+  tcl84 tcl8.4
+  tcl83 tcl8.3
+  tcl82 tcl8.2
+  tcl80 tcl8.0
+  PATHS ${TCLTK_POSSIBLE_LIB_PATHS}
+  PATH_SUFFIXES ${TCLTK_POSSIBLE_LIB_PATH_SUFFIXES}
+  )
+
+find_library(TK_LIBRARY
+  NAMES
+  tk
+  tk${TK_LIBRARY_VERSION} tk${TCL_TCLSH_VERSION} tk${TK_WISH_VERSION}
+  tk87 tk8.7 tk87t tk8.7t
+  tk86 tk8.6 tk86t tk8.6t
+  tk85 tk8.5
+  tk84 tk8.4
+  tk83 tk8.3
+  tk82 tk8.2
+  tk80 tk8.0
+  PATHS ${TCLTK_POSSIBLE_LIB_PATHS}
+  PATH_SUFFIXES ${TCLTK_POSSIBLE_LIB_PATH_SUFFIXES}
+  )
+
+CMAKE_FIND_FRAMEWORKS(Tcl)
+CMAKE_FIND_FRAMEWORKS(Tk)
+
+set(TCL_FRAMEWORK_INCLUDES)
+if(Tcl_FRAMEWORKS)
+  if(NOT TCL_INCLUDE_PATH)
+    foreach(dir ${Tcl_FRAMEWORKS})
+      set(TCL_FRAMEWORK_INCLUDES ${TCL_FRAMEWORK_INCLUDES} ${dir}/Headers)
+    endforeach()
+  endif()
+endif()
+
+set(TK_FRAMEWORK_INCLUDES)
+if(Tk_FRAMEWORKS)
+  if(NOT TK_INCLUDE_PATH)
+    foreach(dir ${Tk_FRAMEWORKS})
+      set(TK_FRAMEWORK_INCLUDES ${TK_FRAMEWORK_INCLUDES}
+        ${dir}/Headers ${dir}/PrivateHeaders)
+    endforeach()
+  endif()
+endif()
+
+set(TCLTK_POSSIBLE_INCLUDE_PATHS
+  "${TCL_LIBRARY_PATH_PARENT}/include"
+  "${TK_LIBRARY_PATH_PARENT}/include"
+  "${TCL_INCLUDE_PATH}"
+  "${TK_INCLUDE_PATH}"
+  ${TCL_FRAMEWORK_INCLUDES}
+  ${TK_FRAMEWORK_INCLUDES}
+  "${TCL_TCLSH_PATH_PARENT}/include"
+  "${TK_WISH_PATH_PARENT}/include"
+  )
+
+set(TCLTK_POSSIBLE_INCLUDE_PATH_SUFFIXES
+  include/tcl${TK_LIBRARY_VERSION}
+  include/tcl${TCL_LIBRARY_VERSION}
+  include/tcl8.7
+  include/tk8.7
+  include/tcl8.6
+  include/tk8.6
+  include/tcl8.5
+  include/tk8.5
+  include/tcl8.4
+  include/tk8.4
+  include/tcl8.3
+  include/tcl8.2
+  include/tcl8.0
+  )
+
+if(WIN32)
+  set(TCLTK_POSSIBLE_INCLUDE_PATHS ${TCLTK_POSSIBLE_INCLUDE_PATHS}
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl\\${ActiveTcl_CurrentVersion}]/include"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.6;Root]/include"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.5;Root]/include"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.4;Root]/include"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.3;Root]/include"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.2;Root]/include"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.0;Root]/include"
+    "$ENV{ProgramFiles}/Tcl/include"
+    "C:/Program Files/Tcl/include"
+    "C:/Tcl/include"
+    )
+endif()
+
+find_path(TCL_INCLUDE_PATH
+  NAMES tcl.h
+  HINTS ${TCLTK_POSSIBLE_INCLUDE_PATHS}
+  PATH_SUFFIXES ${TCLTK_POSSIBLE_INCLUDE_PATH_SUFFIXES}
+  )
+
+find_path(TK_INCLUDE_PATH
+  NAMES tk.h
+  HINTS ${TCLTK_POSSIBLE_INCLUDE_PATHS}
+  PATH_SUFFIXES ${TCLTK_POSSIBLE_INCLUDE_PATH_SUFFIXES}
+  )
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+
+if (CMAKE_FIND_PACKAGE_NAME STREQUAL "TclStub")
+  # FindTclStub include()'s this module. It's an old pattern, but rather than
+  # trying to suppress this from outside the module (which is then sensitive to
+  # the contents, detect the case in this module and suppress it explicitly.
+  set(FPHSA_NAME_MISMATCHED 1)
+endif ()
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(TCL DEFAULT_MSG TCL_LIBRARY TCL_INCLUDE_PATH)
+set(FPHSA_NAME_MISMATCHED 1)
+set(TCLTK_FIND_REQUIRED ${TCL_FIND_REQUIRED})
+set(TCLTK_FIND_QUIETLY  ${TCL_FIND_QUIETLY})
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(TCLTK DEFAULT_MSG TCL_LIBRARY TCL_INCLUDE_PATH TK_LIBRARY TK_INCLUDE_PATH)
+set(TK_FIND_REQUIRED ${TCL_FIND_REQUIRED})
+set(TK_FIND_QUIETLY  ${TCL_FIND_QUIETLY})
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(TK DEFAULT_MSG TK_LIBRARY TK_INCLUDE_PATH)
+unset(FPHSA_NAME_MISMATCHED)
+
+mark_as_advanced(
+  TCL_INCLUDE_PATH
+  TK_INCLUDE_PATH
+  TCL_LIBRARY
+  TK_LIBRARY
+  )
diff --git a/share/cmake-3.22/Modules/FindTIFF.cmake b/share/cmake-3.22/Modules/FindTIFF.cmake
new file mode 100644
index 0000000..ed2657c
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindTIFF.cmake
@@ -0,0 +1,200 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindTIFF
+--------
+
+Find the TIFF library (``libtiff``, https://libtiff.gitlab.io/libtiff/).
+
+Optional COMPONENTS
+^^^^^^^^^^^^^^^^^^^
+
+This module supports the optional component `CXX`, for use with the COMPONENTS
+argument of the :command:`find_package` command. This component has an associated
+imported target, as described below.
+
+Imported targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.5
+
+This module defines the following :prop_tgt:`IMPORTED` targets:
+
+``TIFF::TIFF``
+  The TIFF library, if found.
+
+``TIFF::CXX``
+  .. versionadded:: 3.19
+
+  The C++ wrapper libtiffxx, if requested by the `COMPONENTS CXX` option,
+  if the compiler is not MSVC (which includes the C++ wrapper in libtiff),
+  and if found.
+
+Result variables
+^^^^^^^^^^^^^^^^
+
+This module will set the following variables in your project:
+
+``TIFF_FOUND``
+  true if the TIFF headers and libraries were found
+``TIFF_INCLUDE_DIR``
+  the directory containing the TIFF headers
+``TIFF_INCLUDE_DIRS``
+  the directory containing the TIFF headers
+``TIFF_LIBRARIES``
+  TIFF libraries to be linked
+
+Cache variables
+^^^^^^^^^^^^^^^
+
+The following cache variables may also be set:
+
+``TIFF_INCLUDE_DIR``
+  the directory containing the TIFF headers
+``TIFF_LIBRARY_RELEASE``
+  the path to the TIFF library for release configurations
+``TIFF_LIBRARY_DEBUG``
+  the path to the TIFF library for debug configurations
+``TIFFXX_LIBRARY_RELEASE``
+  the path to the TIFFXX library for release configurations
+``TIFFXX_LIBRARY_DEBUG``
+  the path to the TIFFXX library for debug configurations
+
+.. versionadded:: 3.4
+  Debug and Release variants are found separately.
+#]=======================================================================]
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0057 NEW)
+
+find_path(TIFF_INCLUDE_DIR tiff.h)
+
+set(TIFF_NAMES ${TIFF_NAMES} tiff libtiff tiff3 libtiff3)
+foreach(name ${TIFF_NAMES})
+  list(APPEND TIFF_NAMES_DEBUG "${name}d")
+endforeach()
+
+if(NOT TIFF_LIBRARY)
+  find_library(TIFF_LIBRARY_RELEASE NAMES ${TIFF_NAMES})
+  find_library(TIFF_LIBRARY_DEBUG NAMES ${TIFF_NAMES_DEBUG})
+  include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
+  select_library_configurations(TIFF)
+  mark_as_advanced(TIFF_LIBRARY_RELEASE TIFF_LIBRARY_DEBUG)
+endif()
+
+if(TIFF_INCLUDE_DIR AND EXISTS "${TIFF_INCLUDE_DIR}/tiffvers.h")
+    file(STRINGS "${TIFF_INCLUDE_DIR}/tiffvers.h" tiff_version_str
+         REGEX "^#define[\t ]+TIFFLIB_VERSION_STR[\t ]+\"LIBTIFF, Version .*")
+
+    string(REGEX REPLACE "^#define[\t ]+TIFFLIB_VERSION_STR[\t ]+\"LIBTIFF, Version +([^ \\n]*).*"
+           "\\1" TIFF_VERSION_STRING "${tiff_version_str}")
+    unset(tiff_version_str)
+endif()
+
+foreach(_comp IN LISTS TIFF_FIND_COMPONENTS)
+  if(_comp STREQUAL "CXX")
+    if(MSVC)
+      # C++ bindings are built into the main tiff library.
+      set(TIFF_CXX_FOUND 1)
+    else()
+      foreach(name ${TIFF_NAMES})
+        list(APPEND TIFFXX_NAMES "${name}xx")
+        list(APPEND TIFFXX_NAMES_DEBUG "${name}xxd")
+      endforeach()
+      find_library(TIFFXX_LIBRARY_RELEASE NAMES ${TIFFXX_NAMES})
+      find_library(TIFFXX_LIBRARY_DEBUG NAMES ${TIFFXX_NAMES_DEBUG})
+      include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
+      select_library_configurations(TIFFXX)
+      mark_as_advanced(TIFFXX_LIBRARY_RELEASE TIFFXX_LIBRARY_DEBUG)
+      unset(TIFFXX_NAMES)
+      unset(TIFFXX_NAMES_DEBUG)
+      if(TIFFXX_LIBRARY)
+        set(TIFF_CXX_FOUND 1)
+      endif()
+    endif()
+  endif()
+endforeach()
+unset(_comp)
+
+unset(TIFF_NAMES)
+unset(TIFF_NAMES_DEBUG)
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(TIFF
+                                  HANDLE_COMPONENTS
+                                  REQUIRED_VARS TIFF_LIBRARY TIFF_INCLUDE_DIR
+                                  VERSION_VAR TIFF_VERSION_STRING)
+
+if(TIFF_FOUND)
+  set(TIFF_LIBRARIES ${TIFF_LIBRARY})
+  if("CXX" IN_LIST TIFF_FIND_COMPONENTS AND NOT MSVC)
+    list(APPEND TIFF_LIBRARIES ${TIFFXX_LIBRARY})
+  endif()
+
+  set(TIFF_INCLUDE_DIRS "${TIFF_INCLUDE_DIR}")
+
+  if(NOT TARGET TIFF::TIFF)
+    add_library(TIFF::TIFF UNKNOWN IMPORTED)
+    if(TIFF_INCLUDE_DIRS)
+      set_target_properties(TIFF::TIFF PROPERTIES
+        INTERFACE_INCLUDE_DIRECTORIES "${TIFF_INCLUDE_DIRS}")
+    endif()
+    if(EXISTS "${TIFF_LIBRARY}")
+      set_target_properties(TIFF::TIFF PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+        IMPORTED_LOCATION "${TIFF_LIBRARY}")
+    endif()
+    if(EXISTS "${TIFF_LIBRARY_RELEASE}")
+      set_property(TARGET TIFF::TIFF APPEND PROPERTY
+        IMPORTED_CONFIGURATIONS RELEASE)
+      set_target_properties(TIFF::TIFF PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
+        IMPORTED_LOCATION_RELEASE "${TIFF_LIBRARY_RELEASE}")
+    endif()
+    if(EXISTS "${TIFF_LIBRARY_DEBUG}")
+      set_property(TARGET TIFF::TIFF APPEND PROPERTY
+        IMPORTED_CONFIGURATIONS DEBUG)
+      set_target_properties(TIFF::TIFF PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
+        IMPORTED_LOCATION_DEBUG "${TIFF_LIBRARY_DEBUG}")
+    endif()
+  endif()
+
+  if(NOT TARGET TIFF::CXX)
+    if(MSVC)
+      add_library(TIFF::CXX INTERFACE IMPORTED)
+      set_property(TARGET TIFF::CXX PROPERTY INTERFACE_LINK_LIBRARIES TIFF::TIFF)
+    else()
+      add_library(TIFF::CXX UNKNOWN IMPORTED)
+      set_property(TARGET TIFF::CXX PROPERTY INTERFACE_LINK_LIBRARIES TIFF::TIFF)
+      if(TIFF_INCLUDE_DIRS)
+        set_target_properties(TIFF::CXX PROPERTIES
+          INTERFACE_INCLUDE_DIRECTORIES "${TIFF_INCLUDE_DIRS}")
+      endif()
+      if(EXISTS "${TIFFXX_LIBRARY}")
+        set_target_properties(TIFF::CXX PROPERTIES
+          IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
+          IMPORTED_LOCATION "${TIFFXX_LIBRARY}")
+      endif()
+      if(EXISTS "${TIFFXX_LIBRARY_RELEASE}")
+        set_property(TARGET TIFF::CXX APPEND PROPERTY
+          IMPORTED_CONFIGURATIONS RELEASE)
+        set_target_properties(TIFF::CXX PROPERTIES
+          IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
+          IMPORTED_LOCATION_RELEASE "${TIFFXX_LIBRARY_RELEASE}")
+      endif()
+      if(EXISTS "${TIFFXX_LIBRARY_DEBUG}")
+        set_property(TARGET TIFF::CXX APPEND PROPERTY
+          IMPORTED_CONFIGURATIONS DEBUG)
+        set_target_properties(TIFF::CXX PROPERTIES
+          IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX"
+          IMPORTED_LOCATION_DEBUG "${TIFFXX_LIBRARY_DEBUG}")
+      endif()
+    endif()
+  endif()
+
+endif()
+
+mark_as_advanced(TIFF_INCLUDE_DIR)
+cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/FindTclStub.cmake b/share/cmake-3.22/Modules/FindTclStub.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindTclStub.cmake
rename to share/cmake-3.22/Modules/FindTclStub.cmake
diff --git a/share/cmake-3.22/Modules/FindTclsh.cmake b/share/cmake-3.22/Modules/FindTclsh.cmake
new file mode 100644
index 0000000..594d0ec
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindTclsh.cmake
@@ -0,0 +1,101 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindTclsh
+---------
+
+Find tclsh
+
+This module finds if TCL is installed and determines where the include
+files and libraries are.  It also determines what the name of the
+library is.  This code sets the following variables:
+
+::
+
+  TCLSH_FOUND = TRUE if tclsh has been found
+  TCL_TCLSH = the path to the tclsh executable
+#]=======================================================================]
+
+get_filename_component(TK_WISH_PATH "${TK_WISH}" PATH)
+get_filename_component(TK_WISH_PATH_PARENT "${TK_WISH_PATH}" PATH)
+string(REGEX REPLACE
+  "^.*wish([0-9]\\.*[0-9]).*$" "\\1" TK_WISH_VERSION "${TK_WISH}")
+
+get_filename_component(TCL_INCLUDE_PATH_PARENT "${TCL_INCLUDE_PATH}" PATH)
+get_filename_component(TK_INCLUDE_PATH_PARENT "${TK_INCLUDE_PATH}" PATH)
+
+get_filename_component(TCL_LIBRARY_PATH "${TCL_LIBRARY}" PATH)
+get_filename_component(TCL_LIBRARY_PATH_PARENT "${TCL_LIBRARY_PATH}" PATH)
+string(REGEX REPLACE
+  "^.*tcl([0-9]\\.*[0-9]).*$" "\\1" TCL_LIBRARY_VERSION "${TCL_LIBRARY}")
+
+get_filename_component(TK_LIBRARY_PATH "${TK_LIBRARY}" PATH)
+get_filename_component(TK_LIBRARY_PATH_PARENT "${TK_LIBRARY_PATH}" PATH)
+string(REGEX REPLACE
+  "^.*tk([0-9]\\.*[0-9]).*$" "\\1" TK_LIBRARY_VERSION "${TK_LIBRARY}")
+
+set(TCLTK_POSSIBLE_BIN_PATHS
+  "${TCL_INCLUDE_PATH_PARENT}/bin"
+  "${TK_INCLUDE_PATH_PARENT}/bin"
+  "${TCL_LIBRARY_PATH_PARENT}/bin"
+  "${TK_LIBRARY_PATH_PARENT}/bin"
+  "${TK_WISH_PATH_PARENT}/bin"
+  )
+
+if(WIN32)
+  get_filename_component(
+    ActiveTcl_CurrentVersion
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl;CurrentVersion]"
+    NAME)
+  set(TCLTK_POSSIBLE_BIN_PATHS ${TCLTK_POSSIBLE_BIN_PATHS}
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl\\${ActiveTcl_CurrentVersion}]/bin"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.6;Root]/bin"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.5;Root]/bin"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.4;Root]/bin"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.3;Root]/bin"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.2;Root]/bin"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.0;Root]/bin"
+    )
+endif()
+
+set(TCL_TCLSH_NAMES
+  tclsh
+  tclsh${TCL_LIBRARY_VERSION} tclsh${TK_LIBRARY_VERSION} tclsh${TK_WISH_VERSION}
+  tclsh87 tclsh8.7
+  tclsh86 tclsh8.6
+  tclsh85 tclsh8.5
+  tclsh84 tclsh8.4
+  tclsh83 tclsh8.3
+  tclsh82 tclsh8.2
+  tclsh80 tclsh8.0
+  )
+
+find_program(TCL_TCLSH
+  NAMES ${TCL_TCLSH_NAMES}
+  HINTS ${TCLTK_POSSIBLE_BIN_PATHS}
+  )
+
+if(TCL_TCLSH)
+  execute_process(COMMAND "${CMAKE_COMMAND}" -E echo puts "\$tcl_version"
+                  COMMAND "${TCL_TCLSH}"
+                  OUTPUT_VARIABLE TCLSH_VERSION_STRING
+                  ERROR_QUIET
+                  OUTPUT_STRIP_TRAILING_WHITESPACE)
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+if (CMAKE_FIND_PACKAGE_NAME STREQUAL "TCL" OR
+    CMAKE_FIND_PACKAGE_NAME STREQUAL "TclStub")
+  # FindTCL include()'s this module. It's an old pattern, but rather than
+  # trying to suppress this from outside the module (which is then sensitive to
+  # the contents, detect the case in this module and suppress it explicitly.
+  # Transitively, FindTclStub includes FindTCL.
+  set(FPHSA_NAME_MISMATCHED 1)
+endif ()
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(Tclsh
+                                  REQUIRED_VARS TCL_TCLSH
+                                  VERSION_VAR TCLSH_VERSION_STRING)
+unset(FPHSA_NAME_MISMATCHED)
+
+mark_as_advanced(TCL_TCLSH)
diff --git a/share/cmake-3.22/Modules/FindThreads.cmake b/share/cmake-3.22/Modules/FindThreads.cmake
new file mode 100644
index 0000000..e4d6cf3
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindThreads.cmake
@@ -0,0 +1,258 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindThreads
+-----------
+
+This module determines the thread library of the system.
+
+Imported Targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.1
+
+This module defines the following :prop_tgt:`IMPORTED` target:
+
+``Threads::Threads``
+  The thread library, if found.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+The following variables are set:
+
+``Threads_FOUND``
+  If a supported thread library was found.
+``CMAKE_THREAD_LIBS_INIT``
+  The thread library to use. This may be empty if the thread functions
+  are provided by the system libraries and no special flags are needed
+  to use them.
+``CMAKE_USE_WIN32_THREADS_INIT``
+  If the found thread library is the win32 one.
+``CMAKE_USE_PTHREADS_INIT``
+  If the found thread library is pthread compatible.
+``CMAKE_HP_PTHREADS_INIT``
+  If the found thread library is the HP thread library.
+
+Variables Affecting Behavior
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. variable:: THREADS_PREFER_PTHREAD_FLAG
+
+  .. versionadded:: 3.1
+
+  If the use of the -pthread compiler and linker flag is preferred then
+  the caller can set this variable to TRUE. The compiler flag can only be
+  used with the imported target. Use of both the imported target as well
+  as this switch is highly recommended for new code.
+
+  This variable has no effect if the system libraries provide the
+  thread functions, i.e. when ``CMAKE_THREAD_LIBS_INIT`` will be empty.
+#]=======================================================================]
+
+include (CheckLibraryExists)
+set(Threads_FOUND FALSE)
+set(CMAKE_REQUIRED_QUIET_SAVE ${CMAKE_REQUIRED_QUIET})
+set(CMAKE_REQUIRED_QUIET ${Threads_FIND_QUIETLY})
+
+if(CMAKE_C_COMPILER_LOADED)
+  include (CheckIncludeFile)
+  include (CheckCSourceCompiles)
+elseif(CMAKE_CXX_COMPILER_LOADED)
+  include (CheckIncludeFileCXX)
+  include (CheckCXXSourceCompiles)
+else()
+  message(FATAL_ERROR "FindThreads only works if either C or CXX language is enabled")
+endif()
+
+# simple pthread test code
+set(PTHREAD_C_CXX_TEST_SOURCE [====[
+#include <pthread.h>
+
+static void* test_func(void* data)
+{
+  return data;
+}
+
+int main(void)
+{
+  pthread_t thread;
+  pthread_create(&thread, NULL, test_func, NULL);
+  pthread_detach(thread);
+  pthread_cancel(thread);
+  pthread_join(thread, NULL);
+  pthread_atfork(NULL, NULL, NULL);
+  pthread_exit(NULL);
+
+  return 0;
+}
+]====])
+
+# Internal helper macro.
+# Do NOT even think about using it outside of this file!
+macro(_check_threads_lib LIBNAME FUNCNAME VARNAME)
+  if(NOT Threads_FOUND)
+     CHECK_LIBRARY_EXISTS(${LIBNAME} ${FUNCNAME} "" ${VARNAME})
+     if(${VARNAME})
+       set(CMAKE_THREAD_LIBS_INIT "-l${LIBNAME}")
+       set(CMAKE_HAVE_THREADS_LIBRARY 1)
+       set(Threads_FOUND TRUE)
+     endif()
+  endif ()
+endmacro()
+
+# Internal helper macro.
+# Do NOT even think about using it outside of this file!
+macro(_check_pthreads_flag)
+  if(NOT Threads_FOUND)
+    # If we did not find -lpthreads, -lpthread, or -lthread, look for -pthread
+    if(NOT DEFINED THREADS_HAVE_PTHREAD_ARG)
+      message(CHECK_START "Check if compiler accepts -pthread")
+      if(CMAKE_C_COMPILER_LOADED)
+        set(_threads_src ${CMAKE_CURRENT_LIST_DIR}/CheckForPthreads.c)
+      elseif(CMAKE_CXX_COMPILER_LOADED)
+        set(_threads_src ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/FindThreads/CheckForPthreads.cxx)
+        configure_file(${CMAKE_CURRENT_LIST_DIR}/CheckForPthreads.c "${_threads_src}" COPYONLY)
+      endif()
+      try_compile(THREADS_HAVE_PTHREAD_ARG
+        ${CMAKE_BINARY_DIR}
+        ${_threads_src}
+        CMAKE_FLAGS -DLINK_LIBRARIES:STRING=-pthread
+        OUTPUT_VARIABLE _cmake_check_pthreads_output)
+
+      string(APPEND _cmake_find_threads_output "${_cmake_check_pthreads_output}")
+      unset(_cmake_check_pthreads_output)
+      unset(_threads_src)
+
+      if(THREADS_HAVE_PTHREAD_ARG)
+        set(Threads_FOUND TRUE)
+        message(CHECK_PASS "yes")
+      else()
+        message(CHECK_FAIL "no")
+      endif()
+
+    endif()
+
+    if(THREADS_HAVE_PTHREAD_ARG)
+      set(Threads_FOUND TRUE)
+      set(CMAKE_THREAD_LIBS_INIT "-pthread")
+    endif()
+  endif()
+endmacro()
+
+# Do we have pthreads?
+if(CMAKE_C_COMPILER_LOADED)
+  CHECK_INCLUDE_FILE("pthread.h" CMAKE_HAVE_PTHREAD_H)
+else()
+  CHECK_INCLUDE_FILE_CXX("pthread.h" CMAKE_HAVE_PTHREAD_H)
+endif()
+
+if(CMAKE_HAVE_PTHREAD_H)
+  #
+  # We have pthread.h
+  # Let's check for the library now.
+  #
+  set(CMAKE_HAVE_THREADS_LIBRARY)
+  if(NOT THREADS_HAVE_PTHREAD_ARG)
+    # Check if pthread functions are in normal C library.
+    # We list some pthread functions in PTHREAD_C_CXX_TEST_SOURCE test code.
+    # If the pthread functions already exist in C library, we could just use
+    # them instead of linking to the additional pthread library.
+    if(CMAKE_C_COMPILER_LOADED)
+      CHECK_C_SOURCE_COMPILES("${PTHREAD_C_CXX_TEST_SOURCE}" CMAKE_HAVE_LIBC_PTHREAD)
+    elseif(CMAKE_CXX_COMPILER_LOADED)
+      CHECK_CXX_SOURCE_COMPILES("${PTHREAD_C_CXX_TEST_SOURCE}" CMAKE_HAVE_LIBC_PTHREAD)
+    endif()
+    if(CMAKE_HAVE_LIBC_PTHREAD)
+      set(CMAKE_THREAD_LIBS_INIT "")
+      set(CMAKE_HAVE_THREADS_LIBRARY 1)
+      set(Threads_FOUND TRUE)
+    else()
+      # Check for -pthread first if enabled. This is the recommended
+      # way, but not backwards compatible as one must also pass -pthread
+      # as compiler flag then.
+      if (THREADS_PREFER_PTHREAD_FLAG)
+         _check_pthreads_flag()
+      endif ()
+
+      if(CMAKE_SYSTEM MATCHES "GHS-MULTI")
+        _check_threads_lib(posix pthread_create CMAKE_HAVE_PTHREADS_CREATE)
+      endif()
+      _check_threads_lib(pthreads pthread_create CMAKE_HAVE_PTHREADS_CREATE)
+      _check_threads_lib(pthread  pthread_create CMAKE_HAVE_PTHREAD_CREATE)
+      if(CMAKE_SYSTEM_NAME MATCHES "SunOS")
+          # On sun also check for -lthread
+          _check_threads_lib(thread thr_create CMAKE_HAVE_THR_CREATE)
+      endif()
+    endif()
+  endif()
+
+  _check_pthreads_flag()
+endif()
+
+if(CMAKE_THREAD_LIBS_INIT OR CMAKE_HAVE_LIBC_PTHREAD)
+  set(CMAKE_USE_PTHREADS_INIT 1)
+  set(Threads_FOUND TRUE)
+endif()
+
+if(CMAKE_SYSTEM_NAME MATCHES "Windows")
+  set(CMAKE_USE_WIN32_THREADS_INIT 1)
+  set(Threads_FOUND TRUE)
+endif()
+
+if(CMAKE_USE_PTHREADS_INIT)
+  if(CMAKE_SYSTEM_NAME MATCHES "HP-UX")
+    # Use libcma if it exists and can be used.  It provides more
+    # symbols than the plain pthread library.  CMA threads
+    # have actually been deprecated:
+    #   http://docs.hp.com/en/B3920-90091/ch12s03.html#d0e11395
+    #   http://docs.hp.com/en/947/d8.html
+    # but we need to maintain compatibility here.
+    # The CMAKE_HP_PTHREADS setting actually indicates whether CMA threads
+    # are available.
+    CHECK_LIBRARY_EXISTS(cma pthread_attr_create "" CMAKE_HAVE_HP_CMA)
+    if(CMAKE_HAVE_HP_CMA)
+      set(CMAKE_THREAD_LIBS_INIT "-lcma")
+      set(CMAKE_HP_PTHREADS_INIT 1)
+      set(Threads_FOUND TRUE)
+    endif()
+    set(CMAKE_USE_PTHREADS_INIT 1)
+  endif()
+
+  if(CMAKE_SYSTEM MATCHES "OSF1-V")
+    set(CMAKE_USE_PTHREADS_INIT 0)
+    set(CMAKE_THREAD_LIBS_INIT )
+  endif()
+
+  if(CMAKE_SYSTEM MATCHES "CYGWIN_NT" OR CMAKE_SYSTEM MATCHES "MSYS_NT")
+    set(CMAKE_USE_PTHREADS_INIT 1)
+    set(Threads_FOUND TRUE)
+    set(CMAKE_THREAD_LIBS_INIT )
+    set(CMAKE_USE_WIN32_THREADS_INIT 0)
+  endif()
+endif()
+
+set(CMAKE_REQUIRED_QUIET ${CMAKE_REQUIRED_QUIET_SAVE})
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(Threads DEFAULT_MSG Threads_FOUND)
+
+if(THREADS_FOUND AND NOT TARGET Threads::Threads)
+  add_library(Threads::Threads INTERFACE IMPORTED)
+
+  if(THREADS_HAVE_PTHREAD_ARG)
+    set_property(TARGET Threads::Threads
+                 PROPERTY INTERFACE_COMPILE_OPTIONS "$<$<COMPILE_LANG_AND_ID:CUDA,NVIDIA>:SHELL:-Xcompiler -pthread>"
+                                                    "$<$<NOT:$<COMPILE_LANG_AND_ID:CUDA,NVIDIA>>:-pthread>")
+  endif()
+
+  if(CMAKE_THREAD_LIBS_INIT)
+    set_property(TARGET Threads::Threads PROPERTY INTERFACE_LINK_LIBRARIES "${CMAKE_THREAD_LIBS_INIT}")
+  endif()
+elseif(NOT THREADS_FOUND AND _cmake_find_threads_output)
+  file(APPEND
+    ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+    "Determining if compiler accepts -pthread failed with the following output:\n${_cmake_find_threads_output}\n\n")
+endif()
+
+unset(_cmake_find_threads_output)
diff --git a/share/cmake-3.22/Modules/FindUnixCommands.cmake b/share/cmake-3.22/Modules/FindUnixCommands.cmake
new file mode 100644
index 0000000..97739fa
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindUnixCommands.cmake
@@ -0,0 +1,78 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindUnixCommands
+----------------
+
+Find Unix commands, including the ones from Cygwin
+
+This module looks for the Unix commands ``bash``, ``cp``, ``gzip``,
+``mv``, ``rm``, and ``tar`` and stores the result in the variables
+``BASH``, ``CP``, ``GZIP``, ``MV``, ``RM``, and ``TAR``.
+#]=======================================================================]
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindCygwin.cmake)
+include(${CMAKE_CURRENT_LIST_DIR}/FindMsys.cmake)
+
+find_program(BASH
+  bash
+  ${CYGWIN_INSTALL_PATH}/bin
+  ${MSYS_INSTALL_PATH}/usr/bin
+)
+mark_as_advanced(
+  BASH
+)
+
+find_program(CP
+  cp
+  ${CYGWIN_INSTALL_PATH}/bin
+  ${MSYS_INSTALL_PATH}/usr/bin
+)
+mark_as_advanced(
+  CP
+)
+
+find_program(GZIP
+  gzip
+  ${CYGWIN_INSTALL_PATH}/bin
+  ${MSYS_INSTALL_PATH}/usr/bin
+)
+mark_as_advanced(
+  GZIP
+)
+
+find_program(MV
+  mv
+  ${CYGWIN_INSTALL_PATH}/bin
+  ${MSYS_INSTALL_PATH}/usr/bin
+)
+mark_as_advanced(
+  MV
+)
+
+find_program(RM
+  rm
+  ${CYGWIN_INSTALL_PATH}/bin
+  ${MSYS_INSTALL_PATH}/usr/bin
+)
+mark_as_advanced(
+  RM
+)
+
+find_program(TAR
+  NAMES
+  tar
+  gtar
+  PATH
+  ${CYGWIN_INSTALL_PATH}/bin
+  ${MSYS_INSTALL_PATH}/usr/bin
+)
+mark_as_advanced(
+  TAR
+)
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+find_package_handle_standard_args(UnixCommands
+  REQUIRED_VARS BASH CP GZIP MV RM TAR
+)
diff --git a/share/cmake-3.22/Modules/FindVulkan.cmake b/share/cmake-3.22/Modules/FindVulkan.cmake
new file mode 100644
index 0000000..4f48e13
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindVulkan.cmake
@@ -0,0 +1,157 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindVulkan
+----------
+
+.. versionadded:: 3.7
+
+Find Vulkan, which is a low-overhead, cross-platform 3D graphics
+and computing API.
+
+IMPORTED Targets
+^^^^^^^^^^^^^^^^
+
+This module defines :prop_tgt:`IMPORTED` targets if Vulkan has been found:
+
+``Vulkan::Vulkan``
+  The main Vulkan library.
+
+``Vulkan::glslc``
+  .. versionadded:: 3.19
+
+  The GLSLC SPIR-V compiler, if it has been found.
+
+``Vulkan::Headers``
+  .. versionadded:: 3.21
+
+  Provides just Vulkan headers include paths, if found.  No library is
+  included in this target.  This can be useful for applications that
+  load Vulkan library dynamically.
+
+``Vulkan::glslangValidator``
+  .. versionadded:: 3.21
+
+  The glslangValidator tool, if found.  It is used to compile GLSL and
+  HLSL shaders into SPIR-V.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This module defines the following variables::
+
+  Vulkan_FOUND          - "True" if Vulkan was found
+  Vulkan_INCLUDE_DIRS   - include directories for Vulkan
+  Vulkan_LIBRARIES      - link against this library to use Vulkan
+
+The module will also define three cache variables::
+
+  Vulkan_INCLUDE_DIR        - the Vulkan include directory
+  Vulkan_LIBRARY            - the path to the Vulkan library
+  Vulkan_GLSLC_EXECUTABLE   - the path to the GLSL SPIR-V compiler
+  Vulkan_GLSLANG_VALIDATOR_EXECUTABLE - the path to the glslangValidator tool
+
+Hints
+^^^^^
+
+.. versionadded:: 3.18
+
+The ``VULKAN_SDK`` environment variable optionally specifies the
+location of the Vulkan SDK root directory for the given
+architecture. It is typically set by sourcing the toplevel
+``setup-env.sh`` script of the Vulkan SDK directory into the shell
+environment.
+
+#]=======================================================================]
+
+if(WIN32)
+  find_path(Vulkan_INCLUDE_DIR
+    NAMES vulkan/vulkan.h
+    HINTS
+      "$ENV{VULKAN_SDK}/Include"
+    )
+
+  if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+    find_library(Vulkan_LIBRARY
+      NAMES vulkan-1
+      HINTS
+        "$ENV{VULKAN_SDK}/Lib"
+        "$ENV{VULKAN_SDK}/Bin"
+      )
+    find_program(Vulkan_GLSLC_EXECUTABLE
+      NAMES glslc
+      HINTS
+        "$ENV{VULKAN_SDK}/Bin"
+      )
+    find_program(Vulkan_GLSLANG_VALIDATOR_EXECUTABLE
+      NAMES glslangValidator
+      HINTS
+        "$ENV{VULKAN_SDK}/Bin"
+      )
+  elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
+    find_library(Vulkan_LIBRARY
+      NAMES vulkan-1
+      HINTS
+        "$ENV{VULKAN_SDK}/Lib32"
+        "$ENV{VULKAN_SDK}/Bin32"
+      )
+    find_program(Vulkan_GLSLC_EXECUTABLE
+      NAMES glslc
+      HINTS
+        "$ENV{VULKAN_SDK}/Bin32"
+      )
+    find_program(Vulkan_GLSLANG_VALIDATOR_EXECUTABLE
+      NAMES glslangValidator
+      HINTS
+        "$ENV{VULKAN_SDK}/Bin32"
+      )
+  endif()
+else()
+  find_path(Vulkan_INCLUDE_DIR
+    NAMES vulkan/vulkan.h
+    HINTS "$ENV{VULKAN_SDK}/include")
+  find_library(Vulkan_LIBRARY
+    NAMES vulkan
+    HINTS "$ENV{VULKAN_SDK}/lib")
+  find_program(Vulkan_GLSLC_EXECUTABLE
+    NAMES glslc
+    HINTS "$ENV{VULKAN_SDK}/bin")
+  find_program(Vulkan_GLSLANG_VALIDATOR_EXECUTABLE
+    NAMES glslangValidator
+    HINTS "$ENV{VULKAN_SDK}/bin")
+endif()
+
+set(Vulkan_LIBRARIES ${Vulkan_LIBRARY})
+set(Vulkan_INCLUDE_DIRS ${Vulkan_INCLUDE_DIR})
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+find_package_handle_standard_args(Vulkan
+  DEFAULT_MSG
+  Vulkan_LIBRARY Vulkan_INCLUDE_DIR)
+
+mark_as_advanced(Vulkan_INCLUDE_DIR Vulkan_LIBRARY Vulkan_GLSLC_EXECUTABLE
+                 Vulkan_GLSLANG_VALIDATOR_EXECUTABLE)
+
+if(Vulkan_FOUND AND NOT TARGET Vulkan::Vulkan)
+  add_library(Vulkan::Vulkan UNKNOWN IMPORTED)
+  set_target_properties(Vulkan::Vulkan PROPERTIES
+    IMPORTED_LOCATION "${Vulkan_LIBRARIES}"
+    INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}")
+endif()
+
+if(Vulkan_FOUND AND NOT TARGET Vulkan::Headers)
+  add_library(Vulkan::Headers INTERFACE IMPORTED)
+  set_target_properties(Vulkan::Headers PROPERTIES
+    INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}")
+endif()
+
+if(Vulkan_FOUND AND Vulkan_GLSLC_EXECUTABLE AND NOT TARGET Vulkan::glslc)
+  add_executable(Vulkan::glslc IMPORTED)
+  set_property(TARGET Vulkan::glslc PROPERTY IMPORTED_LOCATION "${Vulkan_GLSLC_EXECUTABLE}")
+endif()
+
+if(Vulkan_FOUND AND Vulkan_GLSLANG_VALIDATOR_EXECUTABLE AND NOT TARGET Vulkan::glslangValidator)
+  add_executable(Vulkan::glslangValidator IMPORTED)
+  set_property(TARGET Vulkan::glslangValidator PROPERTY IMPORTED_LOCATION "${Vulkan_GLSLANG_VALIDATOR_EXECUTABLE}")
+endif()
diff --git a/share/cmake-3.22/Modules/FindWget.cmake b/share/cmake-3.22/Modules/FindWget.cmake
new file mode 100644
index 0000000..d0b6fdf
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindWget.cmake
@@ -0,0 +1,34 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindWget
+--------
+
+Find wget
+
+This module looks for wget.  This module defines the following values:
+
+::
+
+  WGET_EXECUTABLE: the full path to the wget tool.
+  WGET_FOUND: True if wget has been found.
+#]=======================================================================]
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindCygwin.cmake)
+include(${CMAKE_CURRENT_LIST_DIR}/FindMsys.cmake)
+
+find_program(WGET_EXECUTABLE
+  wget
+  ${CYGWIN_INSTALL_PATH}/bin
+  ${MSYS_INSTALL_PATH}/usr/bin
+)
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(Wget DEFAULT_MSG WGET_EXECUTABLE)
+
+mark_as_advanced( WGET_EXECUTABLE )
+
+# WGET option is deprecated.
+# use WGET_EXECUTABLE instead.
+set (WGET ${WGET_EXECUTABLE})
diff --git a/share/cmake-3.18/Modules/FindWish.cmake b/share/cmake-3.22/Modules/FindWish.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindWish.cmake
rename to share/cmake-3.22/Modules/FindWish.cmake
diff --git a/share/cmake-3.22/Modules/FindX11.cmake b/share/cmake-3.22/Modules/FindX11.cmake
new file mode 100644
index 0000000..fd5ee53
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindX11.cmake
@@ -0,0 +1,904 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindX11
+-------
+
+Find X11 installation
+
+Try to find X11 on UNIX systems. The following values are defined
+
+::
+
+  X11_FOUND        - True if X11 is available
+  X11_INCLUDE_DIR  - include directories to use X11
+  X11_LIBRARIES    - link against these to use X11
+
+and also the following more fine grained variables and targets:
+
+.. versionadded:: 3.14
+  Imported targets.
+
+::
+
+  X11_ICE_INCLUDE_PATH,          X11_ICE_LIB,        X11_ICE_FOUND,        X11::ICE
+  X11_SM_INCLUDE_PATH,           X11_SM_LIB,         X11_SM_FOUND,         X11::SM
+  X11_X11_INCLUDE_PATH,          X11_X11_LIB,                              X11::X11
+  X11_Xaccessrules_INCLUDE_PATH,
+  X11_Xaccessstr_INCLUDE_PATH,                       X11_Xaccess_FOUND
+  X11_Xau_INCLUDE_PATH,          X11_Xau_LIB,        X11_Xau_FOUND,        X11::Xau
+  X11_xcb_INCLUDE_PATH,          X11_xcb_LIB,        X11_xcb_FOUND,        X11::xcb
+  X11_X11_xcb_INCLUDE_PATH,      X11_X11_xcb_LIB,    X11_X11_xcb_FOUND,    X11::X11_xcb
+  X11_xcb_icccm_INCLUDE_PATH,    X11_xcb_icccm_LIB,  X11_xcb_icccm_FOUND,  X11::xcb_icccm
+  X11_xcb_util_INCLUDE_PATH,     X11_xcb_util_LIB,   X11_xcb_util_FOUND,   X11::xcb_util
+  X11_xcb_xfixes_INCLUDE_PATH,   X11_xcb_xfixes_LIB, X11_xcb_xfixes_FOUND, X11::xcb_xfixes
+  X11_xcb_xkb_INCLUDE_PATH,      X11_xcb_xkb_LIB,    X11_xcb_xkb_FOUND,    X11::xcb_xkb
+  X11_Xcomposite_INCLUDE_PATH,   X11_Xcomposite_LIB, X11_Xcomposite_FOUND, X11::Xcomposite
+  X11_Xcursor_INCLUDE_PATH,      X11_Xcursor_LIB,    X11_Xcursor_FOUND,    X11::Xcursor
+  X11_Xdamage_INCLUDE_PATH,      X11_Xdamage_LIB,    X11_Xdamage_FOUND,    X11::Xdamage
+  X11_Xdmcp_INCLUDE_PATH,        X11_Xdmcp_LIB,      X11_Xdmcp_FOUND,      X11::Xdmcp
+  X11_Xext_INCLUDE_PATH,         X11_Xext_LIB,       X11_Xext_FOUND,       X11::Xext
+  X11_Xxf86misc_INCLUDE_PATH,    X11_Xxf86misc_LIB,  X11_Xxf86misc_FOUND,  X11::Xxf86misc
+  X11_Xxf86vm_INCLUDE_PATH,      X11_Xxf86vm_LIB     X11_Xxf86vm_FOUND,    X11::Xxf86vm
+  X11_Xfixes_INCLUDE_PATH,       X11_Xfixes_LIB,     X11_Xfixes_FOUND,     X11::Xfixes
+  X11_Xft_INCLUDE_PATH,          X11_Xft_LIB,        X11_Xft_FOUND,        X11::Xft
+  X11_Xi_INCLUDE_PATH,           X11_Xi_LIB,         X11_Xi_FOUND,         X11::Xi
+  X11_Xinerama_INCLUDE_PATH,     X11_Xinerama_LIB,   X11_Xinerama_FOUND,   X11::Xinerama
+  X11_Xkb_INCLUDE_PATH,
+  X11_Xkblib_INCLUDE_PATH,                           X11_Xkb_FOUND,        X11::Xkb
+  X11_xkbcommon_INCLUDE_PATH,    X11_xkbcommon_LIB,  X11_xkbcommon_FOUND,  X11::xkbcommon
+  X11_xkbcommon_X11_INCLUDE_PATH,X11_xkbcommon_X11_LIB,X11_xkbcommon_X11_FOUND,X11::xkbcommon_X11
+  X11_xkbfile_INCLUDE_PATH,      X11_xkbfile_LIB,    X11_xkbfile_FOUND,    X11::xkbfile
+  X11_Xmu_INCLUDE_PATH,          X11_Xmu_LIB,        X11_Xmu_FOUND,        X11::Xmu
+  X11_Xpm_INCLUDE_PATH,          X11_Xpm_LIB,        X11_Xpm_FOUND,        X11::Xpm
+  X11_Xtst_INCLUDE_PATH,         X11_Xtst_LIB,       X11_Xtst_FOUND,       X11::Xtst
+  X11_Xrandr_INCLUDE_PATH,       X11_Xrandr_LIB,     X11_Xrandr_FOUND,     X11::Xrandr
+  X11_Xrender_INCLUDE_PATH,      X11_Xrender_LIB,    X11_Xrender_FOUND,    X11::Xrender
+  X11_XRes_INCLUDE_PATH,         X11_XRes_LIB,       X11_XRes_FOUND,       X11::XRes
+  X11_Xss_INCLUDE_PATH,          X11_Xss_LIB,        X11_Xss_FOUND,        X11::Xss
+  X11_Xt_INCLUDE_PATH,           X11_Xt_LIB,         X11_Xt_FOUND,         X11::Xt
+  X11_Xutil_INCLUDE_PATH,                            X11_Xutil_FOUND,      X11::Xutil
+  X11_Xv_INCLUDE_PATH,           X11_Xv_LIB,         X11_Xv_FOUND,         X11::Xv
+  X11_dpms_INCLUDE_PATH,         (in X11_Xext_LIB),  X11_dpms_FOUND
+  X11_XShm_INCLUDE_PATH,         (in X11_Xext_LIB),  X11_XShm_FOUND
+  X11_Xshape_INCLUDE_PATH,       (in X11_Xext_LIB),  X11_Xshape_FOUND
+  X11_XSync_INCLUDE_PATH,        (in X11_Xext_LIB),  X11_XSync_FOUND
+  X11_Xaw_INCLUDE_PATH,          X11_Xaw_LIB         X11_Xaw_FOUND         X11::Xaw
+
+.. versionadded:: 3.14
+  Renamed ``Xxf86misc``, ``X11_Xxf86misc``, ``X11_Xxf86vm``, ``X11_xkbfile``,
+  ``X11_Xtst``, and ``X11_Xss`` libraries to match their file names.
+  Deprecated the ``X11_Xinput`` library.  Old names are still available
+  for compatibility.
+
+.. versionadded:: 3.14
+  Added the ``X11_Xext_INCLUDE_PATH`` variable.
+
+.. versionadded:: 3.18
+  Added the ``xcb``, ``X11-xcb``, ``xcb-icccm``, ``xcb-xkb``, ``xkbcommon``,
+  and ``xkbcommon-X11`` libraries.
+
+.. versionadded:: 3.19
+  Added the ``Xaw``, ``xcb_util``, and ``xcb_xfixes`` libraries.
+
+#]=======================================================================]
+
+if (UNIX)
+  set(X11_FOUND 0)
+  # X11 is never a framework and some header files may be
+  # found in tcl on the mac
+  set(CMAKE_FIND_FRAMEWORK_SAVE ${CMAKE_FIND_FRAMEWORK})
+  set(CMAKE_FIND_FRAMEWORK NEVER)
+  set(CMAKE_REQUIRED_QUIET_SAVE ${CMAKE_REQUIRED_QUIET})
+  set(CMAKE_REQUIRED_QUIET ${X11_FIND_QUIETLY})
+  set(X11_INC_SEARCH_PATH
+    /usr/pkg/xorg/include
+    /usr/X11R6/include
+    /usr/X11R7/include
+    /usr/include/X11
+    /usr/openwin/include
+    /usr/openwin/share/include
+    /opt/graphics/OpenGL/include
+    /opt/X11/include
+  )
+
+  set(X11_LIB_SEARCH_PATH
+    /usr/pkg/xorg/lib
+    /usr/X11R6/lib
+    /usr/X11R7/lib
+    /usr/openwin/lib
+    /opt/X11/lib
+  )
+
+  find_path(X11_X11_INCLUDE_PATH X11/X.h                             ${X11_INC_SEARCH_PATH})
+  find_path(X11_Xlib_INCLUDE_PATH X11/Xlib.h                         ${X11_INC_SEARCH_PATH})
+
+  # Look for includes; keep the list sorted by name of the cmake *_INCLUDE_PATH
+  # variable (which doesn't need to match the include file name).
+
+  # Solaris lacks XKBrules.h, so we should skip kxkbd there.
+  find_path(X11_ICE_INCLUDE_PATH X11/ICE/ICE.h                       ${X11_INC_SEARCH_PATH})
+  find_path(X11_SM_INCLUDE_PATH X11/SM/SM.h                          ${X11_INC_SEARCH_PATH})
+  find_path(X11_Xaccessrules_INCLUDE_PATH X11/extensions/XKBrules.h  ${X11_INC_SEARCH_PATH})
+  find_path(X11_Xaccessstr_INCLUDE_PATH X11/extensions/XKBstr.h      ${X11_INC_SEARCH_PATH})
+  find_path(X11_Xau_INCLUDE_PATH X11/Xauth.h                         ${X11_INC_SEARCH_PATH})
+  find_path(X11_Xaw_INCLUDE_PATH X11/Xaw/Intrinsic.h                 ${X11_INC_SEARCH_PATH})
+  find_path(X11_xcb_INCLUDE_PATH xcb/xcb.h                           ${X11_INC_SEARCH_PATH})
+  find_path(X11_X11_xcb_INCLUDE_PATH X11/Xlib-xcb.h                  ${X11_INC_SEARCH_PATH})
+  find_path(X11_xcb_icccm_INCLUDE_PATH xcb/xcb_icccm.h               ${X11_INC_SEARCH_PATH})
+  find_path(X11_xcb_util_INCLUDE_PATH xcb/xcb_aux.h                  ${X11_INC_SEARCH_PATH})
+  find_path(X11_xcb_xfixes_INCLUDE_PATH xcb/xfixes.h                 ${X11_INC_SEARCH_PATH})
+  find_path(X11_Xcomposite_INCLUDE_PATH X11/extensions/Xcomposite.h  ${X11_INC_SEARCH_PATH})
+  find_path(X11_Xcursor_INCLUDE_PATH X11/Xcursor/Xcursor.h           ${X11_INC_SEARCH_PATH})
+  find_path(X11_Xdamage_INCLUDE_PATH X11/extensions/Xdamage.h        ${X11_INC_SEARCH_PATH})
+  find_path(X11_Xdmcp_INCLUDE_PATH X11/Xdmcp.h                       ${X11_INC_SEARCH_PATH})
+  find_path(X11_Xext_INCLUDE_PATH X11/extensions/Xext.h              ${X11_INC_SEARCH_PATH})
+  find_path(X11_dpms_INCLUDE_PATH X11/extensions/dpms.h              ${X11_INC_SEARCH_PATH})
+  find_path(X11_Xxf86misc_INCLUDE_PATH X11/extensions/xf86misc.h     ${X11_INC_SEARCH_PATH})
+  find_path(X11_Xxf86vm_INCLUDE_PATH X11/extensions/xf86vmode.h      ${X11_INC_SEARCH_PATH})
+  find_path(X11_Xfixes_INCLUDE_PATH X11/extensions/Xfixes.h          ${X11_INC_SEARCH_PATH})
+  find_path(X11_Xft_INCLUDE_PATH X11/Xft/Xft.h                       ${X11_INC_SEARCH_PATH})
+  find_path(X11_Xi_INCLUDE_PATH X11/extensions/XInput.h              ${X11_INC_SEARCH_PATH})
+  find_path(X11_Xinerama_INCLUDE_PATH X11/extensions/Xinerama.h      ${X11_INC_SEARCH_PATH})
+  find_path(X11_Xkb_INCLUDE_PATH X11/extensions/XKB.h                ${X11_INC_SEARCH_PATH})
+  find_path(X11_xkbcommon_INCLUDE_PATH xkbcommon/xkbcommon.h         ${X11_INC_SEARCH_PATH})
+  find_path(X11_xkbcommon_X11_INCLUDE_PATH xkbcommon/xkbcommon-x11.h ${X11_INC_SEARCH_PATH})
+  find_path(X11_Xkblib_INCLUDE_PATH X11/XKBlib.h                     ${X11_INC_SEARCH_PATH})
+  find_path(X11_xkbfile_INCLUDE_PATH X11/extensions/XKBfile.h        ${X11_INC_SEARCH_PATH})
+  find_path(X11_Xmu_INCLUDE_PATH X11/Xmu/Xmu.h                       ${X11_INC_SEARCH_PATH})
+  find_path(X11_Xpm_INCLUDE_PATH X11/xpm.h                           ${X11_INC_SEARCH_PATH})
+  find_path(X11_Xtst_INCLUDE_PATH X11/extensions/XTest.h             ${X11_INC_SEARCH_PATH})
+  find_path(X11_XShm_INCLUDE_PATH X11/extensions/XShm.h              ${X11_INC_SEARCH_PATH})
+  find_path(X11_Xrandr_INCLUDE_PATH X11/extensions/Xrandr.h          ${X11_INC_SEARCH_PATH})
+  find_path(X11_Xrender_INCLUDE_PATH X11/extensions/Xrender.h        ${X11_INC_SEARCH_PATH})
+  find_path(X11_XRes_INCLUDE_PATH X11/extensions/XRes.h              ${X11_INC_SEARCH_PATH})
+  find_path(X11_Xss_INCLUDE_PATH X11/extensions/scrnsaver.h          ${X11_INC_SEARCH_PATH})
+  find_path(X11_Xshape_INCLUDE_PATH X11/extensions/shape.h           ${X11_INC_SEARCH_PATH})
+  find_path(X11_Xutil_INCLUDE_PATH X11/Xutil.h                       ${X11_INC_SEARCH_PATH})
+  find_path(X11_Xt_INCLUDE_PATH X11/Intrinsic.h                      ${X11_INC_SEARCH_PATH})
+  find_path(X11_Xv_INCLUDE_PATH X11/extensions/Xvlib.h               ${X11_INC_SEARCH_PATH})
+  find_path(X11_XSync_INCLUDE_PATH X11/extensions/sync.h             ${X11_INC_SEARCH_PATH})
+
+
+
+  # Backwards compatibility.
+  set(X11_Xinput_INCLUDE_PATH "${X11_Xi_INCLUDE_PATH}")
+  set(X11_xf86misc_INCLUDE_PATH "${X11_Xxf86misc_INCLUDE_PATH}")
+  set(X11_xf86vmode_INCLUDE_PATH "${X11_Xxf8vm_INCLUDE_PATH}")
+  set(X11_Xkbfile_INCLUDE_PATH "${X11_xkbfile_INCLUDE_PATH}")
+  set(X11_XTest_INCLUDE_PATH "${X11_Xtst_INCLUDE_PATH}")
+  set(X11_Xscreensaver_INCLUDE_PATH "${X11_Xss_INCLUDE_PATH}")
+
+  find_library(X11_X11_LIB X11               ${X11_LIB_SEARCH_PATH})
+
+  # Find additional X libraries. Keep list sorted by library name.
+  find_library(X11_ICE_LIB ICE               ${X11_LIB_SEARCH_PATH})
+  find_library(X11_SM_LIB SM                 ${X11_LIB_SEARCH_PATH})
+  find_library(X11_Xau_LIB Xau               ${X11_LIB_SEARCH_PATH})
+  find_library(X11_Xaw_LIB Xaw               ${X11_LIB_SEARCH_PATH})
+  find_library(X11_xcb_LIB xcb               ${X11_LIB_SEARCH_PATH})
+  find_library(X11_X11_xcb_LIB X11-xcb       ${X11_LIB_SEARCH_PATH})
+  find_library(X11_xcb_icccm_LIB xcb-icccm   ${X11_LIB_SEARCH_PATH})
+  find_library(X11_xcb_util_LIB xcb-util     ${X11_LIB_SEARCH_PATH})
+  find_library(X11_xcb_xfixes_LIB xcb-xfixes ${X11_LIB_SEARCH_PATH})
+  find_library(X11_xcb_xkb_LIB xcb-xkb       ${X11_LIB_SEARCH_PATH})
+  find_library(X11_Xcomposite_LIB Xcomposite ${X11_LIB_SEARCH_PATH})
+  find_library(X11_Xcursor_LIB Xcursor       ${X11_LIB_SEARCH_PATH})
+  find_library(X11_Xdamage_LIB Xdamage       ${X11_LIB_SEARCH_PATH})
+  find_library(X11_Xdmcp_LIB Xdmcp           ${X11_LIB_SEARCH_PATH})
+  find_library(X11_Xext_LIB Xext             ${X11_LIB_SEARCH_PATH})
+  find_library(X11_Xfixes_LIB Xfixes         ${X11_LIB_SEARCH_PATH})
+  find_library(X11_Xft_LIB Xft               ${X11_LIB_SEARCH_PATH})
+  find_library(X11_Xi_LIB Xi                 ${X11_LIB_SEARCH_PATH})
+  find_library(X11_Xinerama_LIB Xinerama     ${X11_LIB_SEARCH_PATH})
+  find_library(X11_xkbcommon_LIB xkbcommon   ${X11_LIB_SEARCH_PATH})
+  find_library(X11_xkbcommon_X11_LIB xkbcommon-x11   ${X11_LIB_SEARCH_PATH})
+  find_library(X11_xkbfile_LIB xkbfile       ${X11_LIB_SEARCH_PATH})
+  find_library(X11_Xmu_LIB Xmu               ${X11_LIB_SEARCH_PATH})
+  find_library(X11_Xpm_LIB Xpm               ${X11_LIB_SEARCH_PATH})
+  find_library(X11_Xrandr_LIB Xrandr         ${X11_LIB_SEARCH_PATH})
+  find_library(X11_Xrender_LIB Xrender       ${X11_LIB_SEARCH_PATH})
+  find_library(X11_XRes_LIB XRes             ${X11_LIB_SEARCH_PATH})
+  find_library(X11_Xss_LIB Xss               ${X11_LIB_SEARCH_PATH})
+  find_library(X11_Xt_LIB Xt                 ${X11_LIB_SEARCH_PATH})
+  find_library(X11_Xtst_LIB Xtst             ${X11_LIB_SEARCH_PATH})
+  find_library(X11_Xv_LIB Xv                 ${X11_LIB_SEARCH_PATH})
+  find_library(X11_Xxf86misc_LIB Xxf86misc   ${X11_LIB_SEARCH_PATH})
+  find_library(X11_Xxf86vm_LIB Xxf86vm       ${X11_LIB_SEARCH_PATH})
+
+  # Backwards compatibility.
+  set(X11_Xinput_LIB "${X11_Xi_LIB}")
+  set(X11_Xkbfile_LIB "${X11_xkbfile_LIB}")
+  set(X11_XTest_LIB "${X11_Xtst_LIB}")
+  set(X11_Xscreensaver_LIB "${X11_Xss_LIB}")
+
+  set(X11_LIBRARY_DIR "")
+  if(X11_X11_LIB)
+    get_filename_component(X11_LIBRARY_DIR ${X11_X11_LIB} PATH)
+  endif()
+
+  set(X11_INCLUDE_DIR) # start with empty list
+  if(X11_X11_INCLUDE_PATH)
+    list(APPEND X11_INCLUDE_DIR ${X11_X11_INCLUDE_PATH})
+  endif()
+
+  if(X11_Xlib_INCLUDE_PATH)
+    list(APPEND X11_INCLUDE_DIR ${X11_Xlib_INCLUDE_PATH})
+  endif()
+
+  if(X11_Xutil_INCLUDE_PATH)
+    set(X11_Xutil_FOUND TRUE)
+    list(APPEND X11_INCLUDE_DIR ${X11_Xutil_INCLUDE_PATH})
+  endif()
+
+  if(X11_Xshape_INCLUDE_PATH)
+    set(X11_Xshape_FOUND TRUE)
+    list(APPEND X11_INCLUDE_DIR ${X11_Xshape_INCLUDE_PATH})
+  endif()
+
+  set(X11_LIBRARIES) # start with empty list
+  if(X11_X11_LIB)
+    list(APPEND X11_LIBRARIES ${X11_X11_LIB})
+  endif()
+
+  if(X11_Xext_LIB)
+    set(X11_Xext_FOUND TRUE)
+    list(APPEND X11_LIBRARIES ${X11_Xext_LIB})
+  endif()
+
+  if(X11_Xt_LIB AND X11_Xt_INCLUDE_PATH)
+    set(X11_Xt_FOUND TRUE)
+  endif()
+
+  if(X11_Xft_LIB AND X11_Xft_INCLUDE_PATH)
+    find_package(Freetype QUIET)
+    find_package(Fontconfig QUIET)
+    if (FREETYPE_FOUND AND Fontconfig_FOUND)
+      set(X11_Xft_FOUND TRUE)
+    endif ()
+    list(APPEND X11_INCLUDE_DIR ${X11_Xft_INCLUDE_PATH})
+  endif()
+
+  if(X11_Xv_LIB AND X11_Xv_INCLUDE_PATH)
+    set(X11_Xv_FOUND TRUE)
+    list(APPEND X11_INCLUDE_DIR ${X11_Xv_INCLUDE_PATH})
+  endif()
+
+  if (X11_Xau_LIB AND X11_Xau_INCLUDE_PATH)
+    set(X11_Xau_FOUND TRUE)
+  endif ()
+
+  if (X11_xcb_LIB AND X11_xcb_INCLUDE_PATH)
+    set(X11_xcb_FOUND TRUE)
+  endif ()
+
+  if (X11_X11_xcb_LIB AND X11_X11_xcb_INCLUDE_PATH)
+    set(X11_X11_xcb_FOUND TRUE)
+  endif ()
+
+  if (X11_xcb_icccm_LIB AND X11_xcb_icccm_INCLUDE_PATH)
+    set(X11_xcb_icccm_FOUND TRUE)
+  endif ()
+
+  if (X11_xcb_util_LIB AND X11_xcb_util_INCLUDE_PATH)
+    set(X11_xcb_util_FOUND TRUE)
+  endif ()
+
+  if (X11_xcb_xfixes_LIB)
+    set(X11_xcb_xfixes_FOUND TRUE)
+  endif ()
+
+  if (X11_xcb_xkb_LIB)
+    set(X11_xcb_xkb_FOUND TRUE)
+  endif ()
+
+  if (X11_Xdmcp_INCLUDE_PATH AND X11_Xdmcp_LIB)
+      set(X11_Xdmcp_FOUND TRUE)
+      list(APPEND X11_INCLUDE_DIR ${X11_Xdmcp_INCLUDE_PATH})
+  endif ()
+
+  if (X11_Xaccessrules_INCLUDE_PATH AND X11_Xaccessstr_INCLUDE_PATH)
+      set(X11_Xaccess_FOUND TRUE)
+      set(X11_Xaccess_INCLUDE_PATH ${X11_Xaccessstr_INCLUDE_PATH})
+      list(APPEND X11_INCLUDE_DIR ${X11_Xaccess_INCLUDE_PATH})
+  endif ()
+
+  if (X11_Xpm_INCLUDE_PATH AND X11_Xpm_LIB)
+      set(X11_Xpm_FOUND TRUE)
+      list(APPEND X11_INCLUDE_DIR ${X11_Xpm_INCLUDE_PATH})
+  endif ()
+
+  if (X11_Xcomposite_INCLUDE_PATH AND X11_Xcomposite_LIB)
+     set(X11_Xcomposite_FOUND TRUE)
+     list(APPEND X11_INCLUDE_DIR ${X11_Xcomposite_INCLUDE_PATH})
+  endif ()
+
+  if (X11_Xdamage_INCLUDE_PATH AND X11_Xdamage_LIB)
+     set(X11_Xdamage_FOUND TRUE)
+     list(APPEND X11_INCLUDE_DIR ${X11_Xdamage_INCLUDE_PATH})
+  endif ()
+
+  if (X11_XShm_INCLUDE_PATH)
+     set(X11_XShm_FOUND TRUE)
+     list(APPEND X11_INCLUDE_DIR ${X11_XShm_INCLUDE_PATH})
+  endif ()
+
+  if (X11_Xtst_INCLUDE_PATH AND X11_Xtst_LIB)
+      set(X11_Xtst_FOUND TRUE)
+      # Backwards compatibility.
+      set(X11_XTest_FOUND TRUE)
+      list(APPEND X11_INCLUDE_DIR ${X11_Xtst_INCLUDE_PATH})
+  endif ()
+
+  if (X11_Xi_INCLUDE_PATH AND X11_Xi_LIB)
+     set(X11_Xi_FOUND TRUE)
+     # Backwards compatibility.
+     set(X11_Xinput_FOUND TRUE)
+     list(APPEND X11_INCLUDE_DIR ${X11_Xi_INCLUDE_PATH})
+  endif ()
+
+  if (X11_Xinerama_INCLUDE_PATH AND X11_Xinerama_LIB)
+     set(X11_Xinerama_FOUND TRUE)
+     list(APPEND X11_INCLUDE_DIR ${X11_Xinerama_INCLUDE_PATH})
+  endif ()
+
+  if (X11_Xfixes_INCLUDE_PATH AND X11_Xfixes_LIB)
+     set(X11_Xfixes_FOUND TRUE)
+     list(APPEND X11_INCLUDE_DIR ${X11_Xfixes_INCLUDE_PATH})
+  endif ()
+
+  if (X11_Xrender_INCLUDE_PATH AND X11_Xrender_LIB)
+     set(X11_Xrender_FOUND TRUE)
+     list(APPEND X11_INCLUDE_DIR ${X11_Xrender_INCLUDE_PATH})
+  endif ()
+
+  if (X11_XRes_INCLUDE_PATH AND X11_XRes_LIB)
+     set(X11_XRes_FOUND TRUE)
+     list(APPEND X11_INCLUDE_DIR ${X11_XRes_INCLUDE_PATH})
+  endif ()
+
+  if (X11_Xrandr_INCLUDE_PATH AND X11_Xrandr_LIB)
+     set(X11_Xrandr_FOUND TRUE)
+     list(APPEND X11_INCLUDE_DIR ${X11_Xrandr_INCLUDE_PATH})
+  endif ()
+
+  if (X11_Xxf86misc_INCLUDE_PATH AND X11_Xxf86misc_LIB)
+     set(X11_Xxf86misc_FOUND TRUE)
+     # Backwards compatibility.
+     set(X11_xf86misc_FOUND TRUE)
+     list(APPEND X11_INCLUDE_DIR ${X11_Xxf86misc_INCLUDE_PATH})
+  endif ()
+
+  if (X11_Xxf86vm_INCLUDE_PATH AND X11_Xxf86vm_LIB)
+     set(X11_Xxf86vm_FOUND TRUE)
+     # Backwards compatibility.
+     set(X11_xf86vmode_FOUND TRUE)
+     list(APPEND X11_INCLUDE_DIR ${X11_Xxf86vm_INCLUDE_PATH})
+  endif ()
+
+  if (X11_Xcursor_INCLUDE_PATH AND X11_Xcursor_LIB)
+     set(X11_Xcursor_FOUND TRUE)
+     list(APPEND X11_INCLUDE_DIR ${X11_Xcursor_INCLUDE_PATH})
+  endif ()
+
+  if (X11_Xss_INCLUDE_PATH AND X11_Xss_LIB)
+     set(X11_Xss_FOUND TRUE)
+     set(X11_Xscreensaver_FOUND TRUE)
+     list(APPEND X11_INCLUDE_DIR ${X11_Xss_INCLUDE_PATH})
+  endif ()
+
+  if (X11_dpms_INCLUDE_PATH)
+     set(X11_dpms_FOUND TRUE)
+     list(APPEND X11_INCLUDE_DIR ${X11_dpms_INCLUDE_PATH})
+  endif ()
+
+  if (X11_Xkb_INCLUDE_PATH AND X11_Xkblib_INCLUDE_PATH AND X11_Xlib_INCLUDE_PATH)
+     set(X11_Xkb_FOUND TRUE)
+     list(APPEND X11_INCLUDE_DIR ${X11_Xkb_INCLUDE_PATH} )
+  endif ()
+
+  if (X11_xkbcommon_INCLUDE_PATH AND X11_xkbcommon_LIB)
+     set(X11_xkbcommon_FOUND TRUE)
+  endif ()
+
+  if (X11_xkbcommon_X11_INCLUDE_PATH AND X11_xkbcommon_X11_LIB)
+     set(X11_xkbcommon_X11_FOUND TRUE)
+  endif ()
+
+  if (X11_xkbfile_INCLUDE_PATH AND X11_xkbfile_LIB AND X11_Xlib_INCLUDE_PATH)
+     set(X11_xkbfile_FOUND TRUE)
+     # Backwards compatibility.
+     set(X11_Xkbfile_FOUND TRUE)
+     list(APPEND X11_INCLUDE_DIR ${X11_xkbfile_INCLUDE_PATH} )
+  endif ()
+
+  if (X11_Xmu_INCLUDE_PATH AND X11_Xmu_LIB)
+     set(X11_Xmu_FOUND TRUE)
+     list(APPEND X11_INCLUDE_DIR ${X11_Xmu_INCLUDE_PATH})
+  endif ()
+
+  if (X11_XSync_INCLUDE_PATH)
+     set(X11_XSync_FOUND TRUE)
+     list(APPEND X11_INCLUDE_DIR ${X11_XSync_INCLUDE_PATH})
+  endif ()
+
+  if(X11_ICE_LIB AND X11_ICE_INCLUDE_PATH)
+     set(X11_ICE_FOUND TRUE)
+  endif()
+
+  if(X11_SM_LIB AND X11_SM_INCLUDE_PATH)
+     set(X11_SM_FOUND TRUE)
+  endif()
+
+  if(X11_Xaw_LIB AND X11_Xaw_INCLUDE_PATH)
+      set(X11_Xaw_FOUND TRUE)
+  endif()
+
+  # Most of the X11 headers will be in the same directories, avoid
+  # creating a huge list of duplicates.
+  if (X11_INCLUDE_DIR)
+     list(REMOVE_DUPLICATES X11_INCLUDE_DIR)
+  endif ()
+
+  # Deprecated variable for backwards compatibility with CMake 1.4
+  if (X11_X11_INCLUDE_PATH AND X11_LIBRARIES)
+    set(X11_FOUND 1)
+  endif ()
+
+  include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+  if (CMAKE_FIND_PACKAGE_NAME STREQUAL "FLTK")
+    # FindFLTK include()'s this module. It's an old pattern, but rather than
+    # trying to suppress this from outside the module (which is then sensitive
+    # to the contents, detect the case in this module and suppress it
+    # explicitly.
+    set(FPHSA_NAME_MISMATCHED 1)
+  endif ()
+  find_package_handle_standard_args(X11
+    REQUIRED_VARS X11_X11_INCLUDE_PATH X11_X11_LIB
+    HANDLE_COMPONENTS)
+  unset(FPHSA_NAME_MISMATCHED)
+
+  if(X11_FOUND)
+    include(${CMAKE_CURRENT_LIST_DIR}/CheckFunctionExists.cmake)
+    include(${CMAKE_CURRENT_LIST_DIR}/CheckLibraryExists.cmake)
+
+    # Translated from an autoconf-generated configure script.
+    # See libs.m4 in autoconf's m4 directory.
+    if($ENV{ISC} MATCHES "^yes$")
+      set(X11_X_EXTRA_LIBS -lnsl_s -linet)
+    else()
+      set(X11_X_EXTRA_LIBS "")
+
+      # See if XOpenDisplay in X11 works by itself.
+      check_library_exists("${X11_LIBRARIES}" "XOpenDisplay" "${X11_LIBRARY_DIR}" X11_LIB_X11_SOLO)
+      if(NOT X11_LIB_X11_SOLO)
+        # Find library needed for dnet_ntoa.
+        check_library_exists("dnet" "dnet_ntoa" "" X11_LIB_DNET_HAS_DNET_NTOA)
+        if (X11_LIB_DNET_HAS_DNET_NTOA)
+          list(APPEND X11_X_EXTRA_LIBS -ldnet)
+        else ()
+          check_library_exists("dnet_stub" "dnet_ntoa" "" X11_LIB_DNET_STUB_HAS_DNET_NTOA)
+          if (X11_LIB_DNET_STUB_HAS_DNET_NTOA)
+            list(APPEND X11_X_EXTRA_LIBS -ldnet_stub)
+          endif ()
+        endif ()
+      endif()
+
+      # Find library needed for gethostbyname.
+      check_function_exists("gethostbyname" CMAKE_HAVE_GETHOSTBYNAME)
+      if(NOT CMAKE_HAVE_GETHOSTBYNAME)
+        check_library_exists("nsl" "gethostbyname" "" CMAKE_LIB_NSL_HAS_GETHOSTBYNAME)
+        if (CMAKE_LIB_NSL_HAS_GETHOSTBYNAME)
+          list(APPEND X11_X_EXTRA_LIBS -lnsl)
+        else ()
+          check_library_exists("bsd" "gethostbyname" "" CMAKE_LIB_BSD_HAS_GETHOSTBYNAME)
+          if (CMAKE_LIB_BSD_HAS_GETHOSTBYNAME)
+            list(APPEND X11_X_EXTRA_LIBS -lbsd)
+          endif ()
+        endif ()
+      endif()
+
+      # Find library needed for connect.
+      check_function_exists("connect" CMAKE_HAVE_CONNECT)
+      if(NOT CMAKE_HAVE_CONNECT)
+        check_library_exists("socket" "connect" "" CMAKE_LIB_SOCKET_HAS_CONNECT)
+        if (CMAKE_LIB_SOCKET_HAS_CONNECT)
+          list(INSERT X11_X_EXTRA_LIBS 0 -lsocket)
+        endif ()
+      endif()
+
+      # Find library needed for remove.
+      check_function_exists("remove" CMAKE_HAVE_REMOVE)
+      if(NOT CMAKE_HAVE_REMOVE)
+        check_library_exists("posix" "remove" "" CMAKE_LIB_POSIX_HAS_REMOVE)
+        if (CMAKE_LIB_POSIX_HAS_REMOVE)
+          list(APPEND X11_X_EXTRA_LIBS -lposix)
+        endif ()
+      endif()
+
+      # Find library needed for shmat.
+      check_function_exists("shmat" CMAKE_HAVE_SHMAT)
+      if(NOT CMAKE_HAVE_SHMAT)
+        check_library_exists("ipc" "shmat" "" CMAKE_LIB_IPS_HAS_SHMAT)
+        if (CMAKE_LIB_IPS_HAS_SHMAT)
+          list(APPEND X11_X_EXTRA_LIBS -lipc)
+        endif ()
+      endif()
+    endif()
+
+    if (X11_ICE_FOUND)
+      check_library_exists("ICE" "IceConnectionNumber" "${X11_LIBRARY_DIR}"
+                            CMAKE_LIB_ICE_HAS_ICECONNECTIONNUMBER)
+      if(CMAKE_LIB_ICE_HAS_ICECONNECTIONNUMBER)
+        set (X11_X_PRE_LIBS ${X11_ICE_LIB})
+        if(X11_SM_LIB)
+          list(INSERT X11_X_PRE_LIBS 0 ${X11_SM_LIB})
+        endif()
+      endif()
+    endif ()
+
+    # Build the final list of libraries.
+    set(X11_LIBRARIES ${X11_X_PRE_LIBS} ${X11_LIBRARIES} ${X11_X_EXTRA_LIBS})
+
+    if (NOT TARGET X11::X11)
+      add_library(X11::X11 UNKNOWN IMPORTED)
+      set_target_properties(X11::X11 PROPERTIES
+        IMPORTED_LOCATION "${X11_X11_LIB}"
+        INTERFACE_INCLUDE_DIRECTORIES "${X11_X11_INCLUDE_PATH}")
+    endif ()
+  endif ()
+
+  if (X11_ICE_FOUND AND NOT TARGET X11::ICE)
+    add_library(X11::ICE UNKNOWN IMPORTED)
+    set_target_properties(X11::ICE PROPERTIES
+      IMPORTED_LOCATION "${X11_ICE_LIB}"
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_ICE_INCLUDE_PATH}")
+  endif ()
+
+  if (X11_SM_FOUND AND NOT TARGET X11::SM)
+    add_library(X11::SM UNKNOWN IMPORTED)
+    set_target_properties(X11::SM PROPERTIES
+      IMPORTED_LOCATION "${X11_SM_LIB}"
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_SM_INCLUDE_PATH}")
+  endif ()
+
+  if (X11_Xau_FOUND AND NOT TARGET X11::Xau)
+    add_library(X11::Xau UNKNOWN IMPORTED)
+    set_target_properties(X11::Xau PROPERTIES
+      IMPORTED_LOCATION "${X11_Xau_LIB}"
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xau_INCLUDE_PATH}")
+  endif ()
+
+  if (X11_Xaw_FOUND AND NOT TARGET X11::Xaw)
+    add_library(X11::Xaw UNKNOWN IMPORTED)
+    set_target_properties(X11::Xaw PROPERTIES
+      IMPORTED_LOCATION "${X11_Xaw_LIB}"
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xaw_INCLUDE_PATH}"
+      INTERFACE_LINK_LIBRARIES "X11::Xext;X11::Xmu;X11::Xt;X11::Xpm;X11::X11")
+  endif ()
+
+  if (X11_xcb_FOUND AND NOT TARGET X11::xcb)
+    add_library(X11::xcb UNKNOWN IMPORTED)
+    set_target_properties(X11::xcb PROPERTIES
+      IMPORTED_LOCATION "${X11_xcb_LIB}"
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_xcb_INCLUDE_PATH}")
+  endif ()
+
+  if (X11_X11_xcb_FOUND AND NOT TARGET X11::X11_xcb)
+    add_library(X11::X11_xcb UNKNOWN IMPORTED)
+    set_target_properties(X11::X11_xcb PROPERTIES
+      IMPORTED_LOCATION "${X11_X11_xcb_LIB}"
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_X11_xcb_INCLUDE_PATH}"
+      INTERFACE_LINK_LIBRARIES "X11::xcb;X11::X11")
+  endif ()
+
+  if (X11_xcb_icccm_FOUND AND NOT TARGET X11::xcb_icccm)
+    add_library(X11::xcb_icccm UNKNOWN IMPORTED)
+    set_target_properties(X11::xcb_icccm PROPERTIES
+      IMPORTED_LOCATION "${X11_xcb_icccm_LIB}"
+      INTERFACE_LINK_LIBRARIES "X11::xcb")
+  endif ()
+
+  if (X11_xcb_util_FOUND AND NOT TARGET X11::xcb_util)
+    add_library(X11::xcb_util UNKNOWN IMPORTED)
+    set_target_properties(X11::xcb_util PROPERTIES
+      IMPORTED_LOCATION "${X11_xcb_util_LIB}"
+      INTERFACE_LINK_LIBRARIES "X11::xcb")
+  endif ()
+
+  if (X11_xcb_xfixes_FOUND AND NOT TARGET X11::xcb_xfixes)
+    add_library(X11::xcb_xfixes UNKNOWN IMPORTED)
+    set_target_properties(X11::xcb_xfixes PROPERTIES
+      IMPORTED_LOCATION "${X11_xcb_xfixes_LIB}"
+      INTERFACE_LINK_LIBRARIES "X11::xcb")
+  endif ()
+
+  if (X11_xcb_xkb_FOUND AND NOT TARGET X11::xcb_xkb)
+    add_library(X11::xcb_xkb UNKNOWN IMPORTED)
+    set_target_properties(X11::xcb_xkb PROPERTIES
+      IMPORTED_LOCATION "${X11_xcb_xkb_LIB}"
+      INTERFACE_LINK_LIBRARIES "X11::xcb")
+  endif ()
+
+  if (X11_Xcomposite_FOUND AND NOT TARGET X11::Xcomposite)
+    add_library(X11::Xcomposite UNKNOWN IMPORTED)
+    set_target_properties(X11::Xcomposite PROPERTIES
+      IMPORTED_LOCATION "${X11_Xcomposite_LIB}"
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xcomposite_INCLUDE_PATH}"
+      INTERFACE_LINK_LIBRARIES "X11::X11")
+  endif ()
+
+  if (X11_Xcursor_FOUND AND NOT TARGET X11::Xcursor)
+    add_library(X11::Xcursor UNKNOWN IMPORTED)
+    set_target_properties(X11::Xcursor PROPERTIES
+      IMPORTED_LOCATION "${X11_Xcursor_LIB}"
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xcursor_INCLUDE_PATH}"
+      INTERFACE_LINK_LIBRARIES "X11::Xrender;X11::Xfixes;X11::X11")
+  endif ()
+
+  if (X11_Xdamage_FOUND AND NOT TARGET X11::Xdamage)
+    add_library(X11::Xdamage UNKNOWN IMPORTED)
+    set_target_properties(X11::Xdamage PROPERTIES
+      IMPORTED_LOCATION "${X11_Xdamage_LIB}"
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xdamage_INCLUDE_PATH}"
+      INTERFACE_LINK_LIBRARIES "X11::Xfixes;X11::X11")
+  endif ()
+
+  if (X11_Xdmcp_FOUND AND NOT TARGET X11::Xdmcp)
+    add_library(X11::Xdmcp UNKNOWN IMPORTED)
+    set_target_properties(X11::Xdmcp PROPERTIES
+      IMPORTED_LOCATION "${X11_Xdmcp_LIB}"
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xdmcp_INCLUDE_PATH}")
+  endif ()
+
+  if (X11_Xext_FOUND AND NOT TARGET X11::Xext)
+    add_library(X11::Xext UNKNOWN IMPORTED)
+    set_target_properties(X11::Xext PROPERTIES
+      IMPORTED_LOCATION "${X11_Xext_LIB}"
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xext_INCLUDE_PATH}"
+      INTERFACE_LINK_LIBRARIES "X11::X11")
+  endif ()
+
+  if (X11_Xxf86misc_FOUND AND NOT TARGET X11::Xxf86misc)
+    add_library(X11::Xxf86misc UNKNOWN IMPORTED)
+    set_target_properties(X11::Xxf86misc PROPERTIES
+      IMPORTED_LOCATION "${X11_Xxf86misc_LIB}"
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xxf86misc_INCLUDE_PATH}"
+      INTERFACE_LINK_LIBRARIES "X11::X11;X11::Xext")
+  endif ()
+
+  if (X11_Xxf86vm_FOUND AND NOT TARGET X11::Xxf86vm)
+    add_library(X11::Xxf86vm UNKNOWN IMPORTED)
+    set_target_properties(X11::Xxf86vm PROPERTIES
+      IMPORTED_LOCATION "${X11_Xxf86vm_LIB}"
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xxf86vm_INCLUDE_PATH}"
+      INTERFACE_LINK_LIBRARIES "X11::X11;X11::Xext")
+  endif ()
+
+  if (X11_Xfixes_FOUND AND NOT TARGET X11::Xfixes)
+    add_library(X11::Xfixes UNKNOWN IMPORTED)
+    set_target_properties(X11::Xfixes PROPERTIES
+      IMPORTED_LOCATION "${X11_Xfixes_LIB}"
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xfixes_INCLUDE_PATH}"
+      INTERFACE_LINK_LIBRARIES "X11::X11")
+  endif ()
+
+  if (X11_Xft_FOUND AND NOT TARGET X11::Xft)
+    add_library(X11::Xft UNKNOWN IMPORTED)
+    set_target_properties(X11::Xft PROPERTIES
+      IMPORTED_LOCATION "${X11_Xft_LIB}"
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xft_INCLUDE_PATH}"
+      INTERFACE_LINK_LIBRARIES "X11::Xrender;X11::X11;Fontconfig::Fontconfig;Freetype::Freetype")
+  endif ()
+
+  if (X11_Xi_FOUND AND NOT TARGET X11::Xi)
+    add_library(X11::Xi UNKNOWN IMPORTED)
+    set_target_properties(X11::Xi PROPERTIES
+      IMPORTED_LOCATION "${X11_Xi_LIB}"
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xi_INCLUDE_PATH}"
+      INTERFACE_LINK_LIBRARIES "X11::Xext;X11::X11")
+  endif ()
+
+  if (X11_Xinerama_FOUND AND NOT TARGET X11::Xinerama)
+    add_library(X11::Xinerama UNKNOWN IMPORTED)
+    set_target_properties(X11::Xinerama PROPERTIES
+      IMPORTED_LOCATION "${X11_Xinerama_LIB}"
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xinerama_INCLUDE_PATH}"
+      INTERFACE_LINK_LIBRARIES "X11::Xext;X11::X11")
+  endif ()
+
+  if (X11_Xkb_FOUND AND NOT TARGET X11::Xkb)
+    add_library(X11::Xkb INTERFACE IMPORTED)
+    set_target_properties(X11::Xkb PROPERTIES
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xkb_INCLUDE_PATH}"
+      INTERFACE_LINK_LIBRARIES "X11::X11")
+  endif ()
+
+  if (X11_xkbcommon_FOUND AND NOT TARGET X11::xkbcommon)
+    add_library(X11::xkbcommon UNKNOWN IMPORTED)
+    set_target_properties(X11::xkbcommon PROPERTIES
+      IMPORTED_LOCATION "${X11_xkbcommon_LIB}"
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_xkbcommon_INCLUDE_PATH}")
+  endif ()
+
+  if (X11_xkbcommon_X11_FOUND AND NOT TARGET X11::xkbcommon_X11)
+    add_library(X11::xkbcommon_X11 UNKNOWN IMPORTED)
+    set_target_properties(X11::xkbcommon_X11 PROPERTIES
+      IMPORTED_LOCATION "${X11_xkbcommon_X11_LIB}"
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_xkbcommon_X11_INCLUDE_PATH}"
+      INTERFACE_LINK_LIBRARIES "X11::X11;X11::xkbcommon")
+  endif ()
+
+  if (X11_xkbfile_FOUND AND NOT TARGET X11::xkbfile)
+    add_library(X11::xkbfile UNKNOWN IMPORTED)
+    set_target_properties(X11::xkbfile PROPERTIES
+      IMPORTED_LOCATION "${X11_xkbfile_LIB}"
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_xkbfile_INCLUDE_PATH}"
+      INTERFACE_LINK_LIBRARIES "X11::X11")
+  endif ()
+
+  if (X11_Xmu_FOUND AND NOT TARGET X11::Xmu)
+    add_library(X11::Xmu UNKNOWN IMPORTED)
+    set_target_properties(X11::Xmu PROPERTIES
+      IMPORTED_LOCATION "${X11_Xmu_LIB}"
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xmu_INCLUDE_PATH}"
+      INTERFACE_LINK_LIBRARIES "X11::Xt;X11::Xext;X11::X11")
+  endif ()
+
+  if (X11_Xpm_FOUND AND NOT TARGET X11::Xpm)
+    add_library(X11::Xpm UNKNOWN IMPORTED)
+    set_target_properties(X11::Xpm PROPERTIES
+      IMPORTED_LOCATION "${X11_Xpm_LIB}"
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xpm_INCLUDE_PATH}"
+      INTERFACE_LINK_LIBRARIES "X11::X11")
+  endif ()
+
+  if (X11_Xtst_FOUND AND NOT TARGET X11::Xtst)
+    add_library(X11::Xtst UNKNOWN IMPORTED)
+    set_target_properties(X11::Xtst PROPERTIES
+      IMPORTED_LOCATION "${X11_Xtst_LIB}"
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xtst_INCLUDE_PATH}"
+      INTERFACE_LINK_LIBRARIES "X11::Xi;X11::Xext;X11::X11")
+  endif ()
+
+  if (X11_Xrandr_FOUND AND NOT TARGET X11::Xrandr)
+    add_library(X11::Xrandr UNKNOWN IMPORTED)
+    set_target_properties(X11::Xrandr PROPERTIES
+      IMPORTED_LOCATION "${X11_Xrandr_LIB}"
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xrandr_INCLUDE_PATH}"
+      INTERFACE_LINK_LIBRARIES "X11::Xrender;X11::Xext;X11::X11")
+  endif ()
+
+  if (X11_Xrender_FOUND AND NOT TARGET X11::Xrender)
+    add_library(X11::Xrender UNKNOWN IMPORTED)
+    set_target_properties(X11::Xrender PROPERTIES
+      IMPORTED_LOCATION "${X11_Xrender_LIB}"
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xrender_INCLUDE_PATH}"
+      INTERFACE_LINK_LIBRARIES "X11::X11")
+  endif ()
+
+  if (X11_XRes_FOUND AND NOT TARGET X11::XRes)
+    add_library(X11::XRes UNKNOWN IMPORTED)
+    set_target_properties(X11::XRes PROPERTIES
+      IMPORTED_LOCATION "${X11_XRes_LIB}"
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_XRes_INCLUDE_PATH}"
+      INTERFACE_LINK_LIBRARIES "X11::Xext;X11::X11")
+  endif ()
+
+  if (X11_Xss_FOUND AND NOT TARGET X11::Xss)
+    add_library(X11::Xss UNKNOWN IMPORTED)
+    set_target_properties(X11::Xss PROPERTIES
+      IMPORTED_LOCATION "${X11_Xss_LIB}"
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xss_INCLUDE_PATH}"
+      INTERFACE_LINK_LIBRARIES "X11::Xext;X11::X11")
+  endif ()
+
+  if (X11_Xt_FOUND AND NOT TARGET X11::Xt)
+    add_library(X11::Xt UNKNOWN IMPORTED)
+    set_target_properties(X11::Xt PROPERTIES
+      IMPORTED_LOCATION "${X11_Xt_LIB}"
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xt_INCLUDE_PATH}"
+      INTERFACE_LINK_LIBRARIES "X11::ICE;X11::SM;X11::X11")
+  endif ()
+
+  if (X11_Xutil_FOUND AND NOT TARGET X11::Xutil)
+    add_library(X11::Xutil INTERFACE IMPORTED)
+    set_target_properties(X11::Xutil PROPERTIES
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xutil_INCLUDE_PATH}"
+      # libX11 contains the implementations for functions in the Xutil.h
+      # header.
+      INTERFACE_LINK_LIBRARIES "X11::X11")
+  endif ()
+
+  if (X11_Xv_FOUND AND NOT TARGET X11::Xv)
+    add_library(X11::Xv UNKNOWN IMPORTED)
+    set_target_properties(X11::Xv PROPERTIES
+      IMPORTED_LOCATION "${X11_Xv_LIB}"
+      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xv_INCLUDE_PATH}"
+      INTERFACE_LINK_LIBRARIES "X11::Xext;X11::X11")
+  endif ()
+
+  mark_as_advanced(
+    X11_X11_INCLUDE_PATH
+    X11_X11_LIB
+    X11_Xext_INCLUDE_PATH
+    X11_Xext_LIB
+    X11_Xau_LIB
+    X11_Xau_INCLUDE_PATH
+    X11_xcb_LIB
+    X11_xcb_INCLUDE_PATH
+    X11_xcb_icccm_LIB
+    X11_xcb_icccm_INCLUDE_PATH
+    X11_xcb_util_LIB
+    X11_xcb_util_INCLUDE_PATH
+    X11_xcb_xfixes_LIB
+    X11_xcb_xfixes_INCLUDE_PATH
+    X11_xcb_xkb_LIB
+    X11_X11_xcb_LIB
+    X11_X11_xcb_INCLUDE_PATH
+    X11_Xlib_INCLUDE_PATH
+    X11_Xutil_INCLUDE_PATH
+    X11_Xcomposite_INCLUDE_PATH
+    X11_Xcomposite_LIB
+    X11_Xfixes_LIB
+    X11_Xfixes_INCLUDE_PATH
+    X11_Xrandr_LIB
+    X11_Xrandr_INCLUDE_PATH
+    X11_Xdamage_LIB
+    X11_Xdamage_INCLUDE_PATH
+    X11_Xrender_LIB
+    X11_Xrender_INCLUDE_PATH
+    X11_XRes_LIB
+    X11_XRes_INCLUDE_PATH
+    X11_Xxf86misc_LIB
+    X11_Xxf86misc_INCLUDE_PATH
+    X11_Xxf86vm_LIB
+    X11_Xxf86vm_INCLUDE_PATH
+    X11_Xi_LIB
+    X11_Xi_INCLUDE_PATH
+    X11_Xinerama_LIB
+    X11_Xinerama_INCLUDE_PATH
+    X11_Xtst_LIB
+    X11_Xtst_INCLUDE_PATH
+    X11_Xcursor_LIB
+    X11_Xcursor_INCLUDE_PATH
+    X11_dpms_INCLUDE_PATH
+    X11_Xt_LIB
+    X11_Xt_INCLUDE_PATH
+    X11_Xdmcp_LIB
+    X11_LIBRARIES
+    X11_Xaccessrules_INCLUDE_PATH
+    X11_Xaccessstr_INCLUDE_PATH
+    X11_Xdmcp_INCLUDE_PATH
+    X11_Xkb_INCLUDE_PATH
+    X11_Xkblib_INCLUDE_PATH
+    X11_xkbcommon_INCLUDE_PATH
+    X11_xkbcommon_LIB
+    X11_xkbcommon_X11_INCLUDE_PATH
+    X11_xkbcommon_X11_LIB
+    X11_xkbfile_INCLUDE_PATH
+    X11_xkbfile_LIB
+    X11_Xmu_INCLUDE_PATH
+    X11_Xmu_LIB
+    X11_Xss_INCLUDE_PATH
+    X11_Xss_LIB
+    X11_Xpm_INCLUDE_PATH
+    X11_Xpm_LIB
+    X11_Xft_LIB
+    X11_Xft_INCLUDE_PATH
+    X11_Xshape_INCLUDE_PATH
+    X11_Xv_LIB
+    X11_Xv_INCLUDE_PATH
+    X11_XShm_INCLUDE_PATH
+    X11_ICE_LIB
+    X11_ICE_INCLUDE_PATH
+    X11_SM_LIB
+    X11_SM_INCLUDE_PATH
+    X11_XSync_INCLUDE_PATH
+    X11_Xaw_LIB
+    X11_Xaw_INCLUDE_PATH
+  )
+  set(CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK_SAVE})
+  set(CMAKE_REQUIRED_QUIET ${CMAKE_REQUIRED_QUIET_SAVE})
+endif ()
diff --git a/share/cmake-3.22/Modules/FindXCTest.cmake b/share/cmake-3.22/Modules/FindXCTest.cmake
new file mode 100644
index 0000000..00729bc
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindXCTest.cmake
@@ -0,0 +1,223 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindXCTest
+----------
+
+.. versionadded:: 3.3
+
+Functions to help creating and executing XCTest bundles.
+
+An XCTest bundle is a CFBundle with a special product-type
+and bundle extension. The Mac Developer Library provides more
+information in the `Testing with Xcode`_ document.
+
+.. _Testing with Xcode: http://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/testing_with_xcode/
+
+Module Functions
+^^^^^^^^^^^^^^^^
+
+.. command:: xctest_add_bundle
+
+  The ``xctest_add_bundle`` function creates a XCTest bundle named
+  <target> which will test the target <testee>. Supported target types
+  for testee are Frameworks and App Bundles::
+
+    xctest_add_bundle(
+      <target>  # Name of the XCTest bundle
+      <testee>  # Target name of the testee
+      )
+
+.. command:: xctest_add_test
+
+  The ``xctest_add_test`` function adds an XCTest bundle to the
+  project to be run by :manual:`ctest(1)`. The test will be named
+  <name> and tests <bundle>::
+
+    xctest_add_test(
+      <name>    # Test name
+      <bundle>  # Target name of XCTest bundle
+      )
+
+Module Variables
+^^^^^^^^^^^^^^^^
+
+The following variables are set by including this module:
+
+.. variable:: XCTest_FOUND
+
+  True if the XCTest Framework and executable were found.
+
+.. variable:: XCTest_EXECUTABLE
+
+  The path to the xctest command line tool used to execute XCTest bundles.
+
+.. variable:: XCTest_INCLUDE_DIRS
+
+  The directory containing the XCTest Framework headers.
+
+.. variable:: XCTest_LIBRARIES
+
+  The location of the XCTest Framework.
+
+#]=======================================================================]
+
+set(_PRESERVED_CMAKE_FIND_ROOT_PATH "${CMAKE_FIND_ROOT_PATH}")
+
+if(CMAKE_EFFECTIVE_SYSTEM_NAME STREQUAL "Apple"
+   AND NOT CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+  # Non-macos systems set the CMAKE_FIND_ROOT_PATH_MODE to "ONLY" which
+  # restricts the search paths too much to find XCTest.framework. In
+  # contrast to the regular system frameworks which reside within the
+  # SDK direectory the XCTest framework is located in the respective
+  # platform directory which is not added to the CMAKE_FIND_ROOT_PATH
+  # (only to CMAKE_SYSTEM_FRAMEWORK_PATH) and therefore not searched.
+  #
+  # Until this is properly addressed, temporaily add the platform
+  # directory to CMAKE_FIND_ROOT_PATH.
+  list(APPEND CMAKE_FIND_ROOT_PATH "${_CMAKE_OSX_SYSROOT_PATH}/../..")
+endif()
+
+find_path(XCTest_INCLUDE_DIR
+  NAMES "XCTest/XCTest.h"
+  DOC "XCTest include directory")
+mark_as_advanced(XCTest_INCLUDE_DIR)
+
+find_library(XCTest_LIBRARY
+  NAMES XCTest
+  DOC "XCTest Framework library")
+mark_as_advanced(XCTest_LIBRARY)
+
+set(CMAKE_FIND_ROOT_PATH "${_PRESERVED_CMAKE_FIND_ROOT_PATH}")
+unset(_PRESERVED_CMAKE_FIND_ROOT_PATH)
+
+execute_process(
+  COMMAND xcrun --find xctest
+  OUTPUT_VARIABLE _xcrun_out OUTPUT_STRIP_TRAILING_WHITESPACE
+  ERROR_VARIABLE _xcrun_err)
+if(_xcrun_out)
+  set(XCTest_EXECUTABLE "${_xcrun_out}" CACHE FILEPATH "XCTest executable")
+  mark_as_advanced(XCTest_EXECUTABLE)
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+find_package_handle_standard_args(XCTest
+  FOUND_VAR XCTest_FOUND
+  REQUIRED_VARS XCTest_LIBRARY XCTest_INCLUDE_DIR XCTest_EXECUTABLE)
+
+if(XCTest_FOUND)
+  set(XCTest_INCLUDE_DIRS "${XCTest_INCLUDE_DIR}")
+  set(XCTest_LIBRARIES "${XCTest_LIBRARY}")
+endif(XCTest_FOUND)
+
+
+function(xctest_add_bundle target testee)
+  if(NOT XCTest_FOUND)
+    message(FATAL_ERROR "XCTest is required to create a XCTest Bundle.")
+  endif(NOT XCTest_FOUND)
+
+  if(NOT CMAKE_OSX_SYSROOT)
+    message(FATAL_ERROR "Adding XCTest bundles requires CMAKE_OSX_SYSROOT to be set.")
+  endif()
+
+  add_library(${target} MODULE ${ARGN})
+
+  set_target_properties(${target} PROPERTIES
+    BUNDLE TRUE
+    XCTEST TRUE
+    XCTEST_TESTEE ${testee})
+
+  target_link_libraries(${target} PRIVATE "-framework Foundation")
+  target_link_libraries(${target} PRIVATE ${XCTest_LIBRARIES})
+  target_include_directories(${target} PRIVATE ${XCTest_INCLUDE_DIRS})
+
+  # retrieve testee target type
+  if(NOT TARGET ${testee})
+    message(FATAL_ERROR "${testee} is not a target.")
+  endif()
+  get_property(_testee_type TARGET ${testee} PROPERTY TYPE)
+  get_property(_testee_framework TARGET ${testee} PROPERTY FRAMEWORK)
+  get_property(_testee_macosx_bundle TARGET ${testee} PROPERTY MACOSX_BUNDLE)
+
+  if(_testee_type STREQUAL "SHARED_LIBRARY" AND _testee_framework)
+    # testee is a Framework
+    target_link_libraries(${target} PRIVATE ${testee})
+
+  elseif(_testee_type STREQUAL "STATIC_LIBRARY")
+    # testee is a static library
+    target_link_libraries(${target} PRIVATE ${testee})
+
+  elseif(_testee_type STREQUAL "EXECUTABLE" AND _testee_macosx_bundle)
+    # testee is an App Bundle
+    add_dependencies(${target} ${testee})
+    if(XCODE)
+      set_target_properties(${target} PROPERTIES
+        XCODE_ATTRIBUTE_BUNDLE_LOADER "$(TEST_HOST)"
+        XCODE_ATTRIBUTE_TEST_HOST "$<TARGET_FILE:${testee}>")
+      if(XCODE_VERSION VERSION_GREATER_EQUAL 7.3)
+        # The Xcode "new build system" used a different path until Xcode 12.5.
+        if(CMAKE_XCODE_BUILD_SYSTEM EQUAL 12 AND
+           XCODE_VERSION VERSION_LESS 12.5 AND
+           NOT CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+          set(_output_directory "$<TARGET_BUNDLE_CONTENT_DIR:${testee}>")
+        else()
+          set(_output_directory "$<TARGET_BUNDLE_CONTENT_DIR:${testee}>/PlugIns")
+        endif()
+        set_target_properties(${target} PROPERTIES
+          LIBRARY_OUTPUT_DIRECTORY "${_output_directory}")
+      endif()
+    else(XCODE)
+      target_link_libraries(${target}
+        PRIVATE -bundle_loader $<TARGET_FILE:${testee}>)
+    endif(XCODE)
+
+  else()
+    message(FATAL_ERROR "Testee ${testee} is of unsupported type.")
+  endif()
+endfunction(xctest_add_bundle)
+
+
+function(xctest_add_test name bundle)
+  if(NOT XCTest_EXECUTABLE)
+    message(FATAL_ERROR "XCTest executable is required to register a test.")
+  endif()
+
+  # check that bundle is a XCTest Bundle
+
+  if(NOT TARGET ${bundle})
+    message(FATAL_ERROR "${bundle} is not a target.")
+  endif(NOT TARGET ${bundle})
+
+  get_property(_test_type TARGET ${bundle} PROPERTY TYPE)
+  get_property(_test_bundle TARGET ${bundle} PROPERTY BUNDLE)
+  get_property(_test_xctest TARGET ${bundle} PROPERTY XCTEST)
+
+  if(NOT _test_type STREQUAL "MODULE_LIBRARY"
+       OR NOT _test_xctest OR NOT _test_bundle)
+    message(FATAL_ERROR "Test ${bundle} is not an XCTest Bundle")
+  endif()
+
+  # get and check testee properties
+
+  get_property(_testee TARGET ${bundle} PROPERTY XCTEST_TESTEE)
+  if(NOT TARGET ${_testee})
+    message(FATAL_ERROR "${_testee} is not a target.")
+  endif()
+
+  get_property(_testee_type TARGET ${_testee} PROPERTY TYPE)
+  get_property(_testee_framework TARGET ${_testee} PROPERTY FRAMEWORK)
+
+  # register test
+
+  add_test(
+    NAME ${name}
+    COMMAND ${XCTest_EXECUTABLE} $<TARGET_BUNDLE_DIR:${bundle}>)
+
+  # point loader to testee in case rpath is disabled
+
+  if(_testee_type STREQUAL "SHARED_LIBRARY" AND _testee_framework)
+    set_property(TEST ${name} APPEND PROPERTY
+      ENVIRONMENT DYLD_FRAMEWORK_PATH=$<TARGET_LINKER_FILE_DIR:${_testee}>/..)
+  endif()
+endfunction(xctest_add_test)
diff --git a/share/cmake-3.18/Modules/FindXMLRPC.cmake b/share/cmake-3.22/Modules/FindXMLRPC.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindXMLRPC.cmake
rename to share/cmake-3.22/Modules/FindXMLRPC.cmake
diff --git a/share/cmake-3.22/Modules/FindXalanC.cmake b/share/cmake-3.22/Modules/FindXalanC.cmake
new file mode 100644
index 0000000..a7fb766
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindXalanC.cmake
@@ -0,0 +1,155 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindXalanC
+-----------
+
+.. versionadded:: 3.5
+
+Find the Apache Xalan-C++ XSL transform processor headers and libraries.
+
+Imported targets
+^^^^^^^^^^^^^^^^
+
+This module defines the following :prop_tgt:`IMPORTED` targets:
+
+``XalanC::XalanC``
+  The Xalan-C++ ``xalan-c`` library, if found.
+
+Result variables
+^^^^^^^^^^^^^^^^
+
+This module will set the following variables in your project:
+
+``XalanC_FOUND``
+  true if the Xalan headers and libraries were found
+``XalanC_VERSION``
+  Xalan release version
+``XalanC_INCLUDE_DIRS``
+  the directory containing the Xalan headers; note
+  ``XercesC_INCLUDE_DIRS`` is also required
+``XalanC_LIBRARIES``
+  Xalan libraries to be linked; note ``XercesC_LIBRARIES`` is also
+  required
+
+Cache variables
+^^^^^^^^^^^^^^^
+
+The following cache variables may also be set:
+
+``XalanC_INCLUDE_DIR``
+  the directory containing the Xalan headers
+``XalanC_LIBRARY``
+  the Xalan library
+#]=======================================================================]
+
+# Written by Roger Leigh <rleigh@codelibre.net>
+
+function(_XalanC_GET_VERSION  version_hdr)
+    file(STRINGS ${version_hdr} _contents REGEX "^[ \t]*#define XALAN_VERSION_.*")
+    if(_contents)
+        string(REGEX REPLACE "[^*]*#define XALAN_VERSION_MAJOR[ \t(]+([0-9]+).*" "\\1" XalanC_MAJOR "${_contents}")
+        string(REGEX REPLACE "[^*]*#define XALAN_VERSION_MINOR[ \t(]+([0-9]+).*" "\\1" XalanC_MINOR "${_contents}")
+        string(REGEX REPLACE "[^*]*#define XALAN_VERSION_REVISION[ \t(]+([0-9]+).*" "\\1" XalanC_PATCH "${_contents}")
+
+        if(NOT XalanC_MAJOR MATCHES "^[0-9]+$")
+            message(FATAL_ERROR "Version parsing failed for XALAN_VERSION_MAJOR!")
+        endif()
+        if(NOT XalanC_MINOR MATCHES "^[0-9]+$")
+            message(FATAL_ERROR "Version parsing failed for XALAN_VERSION_MINOR!")
+        endif()
+        if(NOT XalanC_PATCH MATCHES "^[0-9]+$")
+            message(FATAL_ERROR "Version parsing failed for XALAN_VERSION_REVISION!")
+        endif()
+
+        set(XalanC_VERSION "${XalanC_MAJOR}.${XalanC_MINOR}.${XalanC_PATCH}" PARENT_SCOPE)
+        set(XalanC_VERSION_MAJOR "${XalanC_MAJOR}" PARENT_SCOPE)
+        set(XalanC_VERSION_MINOR "${XalanC_MINOR}" PARENT_SCOPE)
+        set(XalanC_VERSION_PATCH "${XalanC_PATCH}" PARENT_SCOPE)
+    else()
+        message(FATAL_ERROR "Include file ${version_hdr} does not exist or does not contain expected version information")
+    endif()
+endfunction()
+
+# Find include directory
+find_path(XalanC_INCLUDE_DIR
+          NAMES "xalanc/XalanTransformer/XalanTransformer.hpp"
+          DOC "Xalan-C++ include directory")
+mark_as_advanced(XalanC_INCLUDE_DIR)
+
+if(XalanC_INCLUDE_DIR AND EXISTS "${XalanC_INCLUDE_DIR}/xalanc/Include/XalanVersion.hpp")
+  _XalanC_GET_VERSION("${XalanC_INCLUDE_DIR}/xalanc/Include/XalanVersion.hpp")
+endif()
+
+if(NOT XalanC_LIBRARY)
+  # Find all XalanC libraries
+  find_library(XalanC_LIBRARY_RELEASE
+               NAMES "Xalan-C" "xalan-c"
+                     "Xalan-C_${XalanC_VERSION_MAJOR}"
+                     "Xalan-C_${XalanC_VERSION_MAJOR}_${XalanC_VERSION_MINOR}"
+               DOC "Xalan-C++ libraries (release)")
+  find_library(XalanC_LIBRARY_DEBUG
+               NAMES "Xalan-CD" "xalan-cd"
+                     "Xalan-C_${XalanC_VERSION_MAJOR}D"
+                     "Xalan-C_${XalanC_VERSION_MAJOR}_${XalanC_VERSION_MINOR}D"
+               DOC "Xalan-C++ libraries (debug)")
+  include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
+  select_library_configurations(XalanC)
+  mark_as_advanced(XalanC_LIBRARY_RELEASE XalanC_LIBRARY_DEBUG)
+endif()
+
+unset(XalanC_VERSION_MAJOR)
+unset(XalanC_VERSION_MINOR)
+unset(XalanC_VERSION_PATCH)
+
+unset(XalanC_XERCESC_REQUIRED)
+if(XalanC_FIND_REQUIRED)
+  set(XalanC_XERCESC_REQUIRED REQUIRED)
+endif()
+find_package(XercesC ${XalanC_XERCESC_REQUIRED})
+unset(XalanC_XERCESC_REQUIRED)
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(XalanC
+                                  FOUND_VAR XalanC_FOUND
+                                  REQUIRED_VARS XalanC_LIBRARY
+                                                XalanC_INCLUDE_DIR
+                                                XalanC_VERSION
+                                                XercesC_FOUND
+                                  VERSION_VAR XalanC_VERSION
+                                  FAIL_MESSAGE "Failed to find XalanC")
+
+if(XalanC_FOUND)
+  set(XalanC_INCLUDE_DIRS "${XalanC_INCLUDE_DIR}" ${XercesC_INCLUDE_DIRS})
+  set(XalanC_LIBRARIES "${XalanC_LIBRARY}" ${XercesC_LIBRARIES})
+
+  # For header-only libraries
+  if(NOT TARGET XalanC::XalanC)
+    add_library(XalanC::XalanC UNKNOWN IMPORTED)
+    if(XalanC_INCLUDE_DIRS)
+      set_target_properties(XalanC::XalanC PROPERTIES
+        INTERFACE_INCLUDE_DIRECTORIES "${XalanC_INCLUDE_DIRS}")
+    endif()
+    if(EXISTS "${XalanC_LIBRARY}")
+      set_target_properties(XalanC::XalanC PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
+        IMPORTED_LOCATION "${XalanC_LIBRARY}")
+    endif()
+    if(EXISTS "${XalanC_LIBRARY_RELEASE}")
+      set_property(TARGET XalanC::XalanC APPEND PROPERTY
+        IMPORTED_CONFIGURATIONS RELEASE)
+      set_target_properties(XalanC::XalanC PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
+        IMPORTED_LOCATION_RELEASE "${XalanC_LIBRARY_RELEASE}")
+    endif()
+    if(EXISTS "${XalanC_LIBRARY_DEBUG}")
+      set_property(TARGET XalanC::XalanC APPEND PROPERTY
+        IMPORTED_CONFIGURATIONS DEBUG)
+      set_target_properties(XalanC::XalanC PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX"
+        IMPORTED_LOCATION_DEBUG "${XalanC_LIBRARY_DEBUG}")
+    endif()
+    set_target_properties(XalanC::XalanC PROPERTIES INTERFACE_LINK_LIBRARIES XercesC::XercesC)
+  endif()
+endif()
diff --git a/share/cmake-3.22/Modules/FindXercesC.cmake b/share/cmake-3.22/Modules/FindXercesC.cmake
new file mode 100644
index 0000000..af1b0b4
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindXercesC.cmake
@@ -0,0 +1,149 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindXercesC
+-----------
+
+.. versionadded:: 3.1
+
+Find the Apache Xerces-C++ validating XML parser headers and libraries.
+
+Imported targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.5
+
+This module defines the following :prop_tgt:`IMPORTED` targets:
+
+``XercesC::XercesC``
+  The Xerces-C++ ``xerces-c`` library, if found.
+
+Result variables
+^^^^^^^^^^^^^^^^
+
+This module will set the following variables in your project:
+
+``XercesC_FOUND``
+  true if the Xerces headers and libraries were found
+``XercesC_VERSION``
+  Xerces release version
+``XercesC_INCLUDE_DIRS``
+  the directory containing the Xerces headers
+``XercesC_LIBRARIES``
+  Xerces libraries to be linked
+
+Cache variables
+^^^^^^^^^^^^^^^
+
+The following cache variables may also be set:
+
+``XercesC_INCLUDE_DIR``
+  the directory containing the Xerces headers
+``XercesC_LIBRARY``
+  the Xerces library
+
+.. versionadded:: 3.4
+  Debug and Release variants are found separately.
+#]=======================================================================]
+
+# Written by Roger Leigh <rleigh@codelibre.net>
+
+function(_XercesC_GET_VERSION  version_hdr)
+    file(STRINGS ${version_hdr} _contents REGEX "^[ \t]*#define XERCES_VERSION_.*")
+    if(_contents)
+        string(REGEX REPLACE ".*#define XERCES_VERSION_MAJOR[ \t]+([0-9]+).*" "\\1" XercesC_MAJOR "${_contents}")
+        string(REGEX REPLACE ".*#define XERCES_VERSION_MINOR[ \t]+([0-9]+).*" "\\1" XercesC_MINOR "${_contents}")
+        string(REGEX REPLACE ".*#define XERCES_VERSION_REVISION[ \t]+([0-9]+).*" "\\1" XercesC_PATCH "${_contents}")
+
+        if(NOT XercesC_MAJOR MATCHES "^[0-9]+$")
+            message(FATAL_ERROR "Version parsing failed for XERCES_VERSION_MAJOR!")
+        endif()
+        if(NOT XercesC_MINOR MATCHES "^[0-9]+$")
+            message(FATAL_ERROR "Version parsing failed for XERCES_VERSION_MINOR!")
+        endif()
+        if(NOT XercesC_PATCH MATCHES "^[0-9]+$")
+            message(FATAL_ERROR "Version parsing failed for XERCES_VERSION_REVISION!")
+        endif()
+
+        set(XercesC_VERSION "${XercesC_MAJOR}.${XercesC_MINOR}.${XercesC_PATCH}" PARENT_SCOPE)
+        set(XercesC_VERSION_MAJOR "${XercesC_MAJOR}" PARENT_SCOPE)
+        set(XercesC_VERSION_MINOR "${XercesC_MINOR}" PARENT_SCOPE)
+        set(XercesC_VERSION_PATCH "${XercesC_PATCH}" PARENT_SCOPE)
+    else()
+        message(FATAL_ERROR "Include file ${version_hdr} does not exist or does not contain expected version information")
+    endif()
+endfunction()
+
+# Find include directory
+find_path(XercesC_INCLUDE_DIR
+          NAMES "xercesc/util/PlatformUtils.hpp"
+          DOC "Xerces-C++ include directory")
+mark_as_advanced(XercesC_INCLUDE_DIR)
+
+if(XercesC_INCLUDE_DIR AND EXISTS "${XercesC_INCLUDE_DIR}/xercesc/util/XercesVersion.hpp")
+  _XercesC_GET_VERSION("${XercesC_INCLUDE_DIR}/xercesc/util/XercesVersion.hpp")
+endif()
+
+if(NOT XercesC_LIBRARY)
+  # Find all XercesC libraries
+  find_library(XercesC_LIBRARY_RELEASE
+               NAMES "xerces-c"
+                     "xerces-c_${XercesC_VERSION_MAJOR}"
+                     "xerces-c-${XercesC_VERSION_MAJOR}.${XercesC_VERSION_MINOR}"
+               DOC "Xerces-C++ libraries (release)")
+  find_library(XercesC_LIBRARY_DEBUG
+               NAMES "xerces-cd"
+                     "xerces-c_${XercesC_VERSION_MAJOR}D"
+                     "xerces-c_${XercesC_VERSION_MAJOR}_${XercesC_VERSION_MINOR}D"
+               DOC "Xerces-C++ libraries (debug)")
+  include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
+  select_library_configurations(XercesC)
+  mark_as_advanced(XercesC_LIBRARY_RELEASE XercesC_LIBRARY_DEBUG)
+endif()
+
+unset(XercesC_VERSION_MAJOR)
+unset(XercesC_VERSION_MINOR)
+unset(XercesC_VERSION_PATCH)
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(XercesC
+                                  FOUND_VAR XercesC_FOUND
+                                  REQUIRED_VARS XercesC_LIBRARY
+                                                XercesC_INCLUDE_DIR
+                                                XercesC_VERSION
+                                  VERSION_VAR XercesC_VERSION
+                                  FAIL_MESSAGE "Failed to find XercesC")
+
+if(XercesC_FOUND)
+  set(XercesC_INCLUDE_DIRS "${XercesC_INCLUDE_DIR}")
+  set(XercesC_LIBRARIES "${XercesC_LIBRARY}")
+
+  # For header-only libraries
+  if(NOT TARGET XercesC::XercesC)
+    add_library(XercesC::XercesC UNKNOWN IMPORTED)
+    if(XercesC_INCLUDE_DIRS)
+      set_target_properties(XercesC::XercesC PROPERTIES
+        INTERFACE_INCLUDE_DIRECTORIES "${XercesC_INCLUDE_DIRS}")
+    endif()
+    if(EXISTS "${XercesC_LIBRARY}")
+      set_target_properties(XercesC::XercesC PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
+        IMPORTED_LOCATION "${XercesC_LIBRARY}")
+    endif()
+    if(EXISTS "${XercesC_LIBRARY_RELEASE}")
+      set_property(TARGET XercesC::XercesC APPEND PROPERTY
+        IMPORTED_CONFIGURATIONS RELEASE)
+      set_target_properties(XercesC::XercesC PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
+        IMPORTED_LOCATION_RELEASE "${XercesC_LIBRARY_RELEASE}")
+    endif()
+    if(EXISTS "${XercesC_LIBRARY_DEBUG}")
+      set_property(TARGET XercesC::XercesC APPEND PROPERTY
+        IMPORTED_CONFIGURATIONS DEBUG)
+      set_target_properties(XercesC::XercesC PROPERTIES
+        IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX"
+        IMPORTED_LOCATION_DEBUG "${XercesC_LIBRARY_DEBUG}")
+    endif()
+  endif()
+endif()
diff --git a/share/cmake-3.22/Modules/FindZLIB.cmake b/share/cmake-3.22/Modules/FindZLIB.cmake
new file mode 100644
index 0000000..5778b03
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindZLIB.cmake
@@ -0,0 +1,154 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindZLIB
+--------
+
+Find the native ZLIB includes and library.
+
+IMPORTED Targets
+^^^^^^^^^^^^^^^^
+
+.. versionadded:: 3.1
+
+This module defines :prop_tgt:`IMPORTED` target ``ZLIB::ZLIB``, if
+ZLIB has been found.
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This module defines the following variables:
+
+::
+
+  ZLIB_INCLUDE_DIRS   - where to find zlib.h, etc.
+  ZLIB_LIBRARIES      - List of libraries when using zlib.
+  ZLIB_FOUND          - True if zlib found.
+
+::
+
+  ZLIB_VERSION_STRING - The version of zlib found (x.y.z)
+  ZLIB_VERSION_MAJOR  - The major version of zlib
+  ZLIB_VERSION_MINOR  - The minor version of zlib
+  ZLIB_VERSION_PATCH  - The patch version of zlib
+  ZLIB_VERSION_TWEAK  - The tweak version of zlib
+
+.. versionadded:: 3.4
+  Debug and Release variants are found separately.
+
+Backward Compatibility
+^^^^^^^^^^^^^^^^^^^^^^
+
+The following variable are provided for backward compatibility
+
+::
+
+  ZLIB_MAJOR_VERSION  - The major version of zlib
+  ZLIB_MINOR_VERSION  - The minor version of zlib
+  ZLIB_PATCH_VERSION  - The patch version of zlib
+
+Hints
+^^^^^
+
+A user may set ``ZLIB_ROOT`` to a zlib installation root to tell this
+module where to look.
+#]=======================================================================]
+
+set(_ZLIB_SEARCHES)
+
+# Search ZLIB_ROOT first if it is set.
+if(ZLIB_ROOT)
+  set(_ZLIB_SEARCH_ROOT PATHS ${ZLIB_ROOT} NO_DEFAULT_PATH)
+  list(APPEND _ZLIB_SEARCHES _ZLIB_SEARCH_ROOT)
+endif()
+
+# Normal search.
+set(_ZLIB_x86 "(x86)")
+set(_ZLIB_SEARCH_NORMAL
+    PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\Zlib;InstallPath]"
+          "$ENV{ProgramFiles}/zlib"
+          "$ENV{ProgramFiles${_ZLIB_x86}}/zlib")
+unset(_ZLIB_x86)
+list(APPEND _ZLIB_SEARCHES _ZLIB_SEARCH_NORMAL)
+
+set(ZLIB_NAMES z zlib zdll zlib1 zlibstatic)
+set(ZLIB_NAMES_DEBUG zd zlibd zdlld zlibd1 zlib1d zlibstaticd)
+
+# Try each search configuration.
+foreach(search ${_ZLIB_SEARCHES})
+  find_path(ZLIB_INCLUDE_DIR NAMES zlib.h ${${search}} PATH_SUFFIXES include)
+endforeach()
+
+# Allow ZLIB_LIBRARY to be set manually, as the location of the zlib library
+if(NOT ZLIB_LIBRARY)
+  foreach(search ${_ZLIB_SEARCHES})
+    find_library(ZLIB_LIBRARY_RELEASE NAMES ${ZLIB_NAMES} NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib)
+    find_library(ZLIB_LIBRARY_DEBUG NAMES ${ZLIB_NAMES_DEBUG} NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib)
+  endforeach()
+
+  include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
+  select_library_configurations(ZLIB)
+endif()
+
+unset(ZLIB_NAMES)
+unset(ZLIB_NAMES_DEBUG)
+
+mark_as_advanced(ZLIB_INCLUDE_DIR)
+
+if(ZLIB_INCLUDE_DIR AND EXISTS "${ZLIB_INCLUDE_DIR}/zlib.h")
+    file(STRINGS "${ZLIB_INCLUDE_DIR}/zlib.h" ZLIB_H REGEX "^#define ZLIB_VERSION \"[^\"]*\"$")
+
+    string(REGEX REPLACE "^.*ZLIB_VERSION \"([0-9]+).*$" "\\1" ZLIB_VERSION_MAJOR "${ZLIB_H}")
+    string(REGEX REPLACE "^.*ZLIB_VERSION \"[0-9]+\\.([0-9]+).*$" "\\1" ZLIB_VERSION_MINOR  "${ZLIB_H}")
+    string(REGEX REPLACE "^.*ZLIB_VERSION \"[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1" ZLIB_VERSION_PATCH "${ZLIB_H}")
+    set(ZLIB_VERSION_STRING "${ZLIB_VERSION_MAJOR}.${ZLIB_VERSION_MINOR}.${ZLIB_VERSION_PATCH}")
+
+    # only append a TWEAK version if it exists:
+    set(ZLIB_VERSION_TWEAK "")
+    if( "${ZLIB_H}" MATCHES "ZLIB_VERSION \"[0-9]+\\.[0-9]+\\.[0-9]+\\.([0-9]+)")
+        set(ZLIB_VERSION_TWEAK "${CMAKE_MATCH_1}")
+        string(APPEND ZLIB_VERSION_STRING ".${ZLIB_VERSION_TWEAK}")
+    endif()
+
+    set(ZLIB_MAJOR_VERSION "${ZLIB_VERSION_MAJOR}")
+    set(ZLIB_MINOR_VERSION "${ZLIB_VERSION_MINOR}")
+    set(ZLIB_PATCH_VERSION "${ZLIB_VERSION_PATCH}")
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(ZLIB REQUIRED_VARS ZLIB_LIBRARY ZLIB_INCLUDE_DIR
+                                       VERSION_VAR ZLIB_VERSION_STRING)
+
+if(ZLIB_FOUND)
+    set(ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR})
+
+    if(NOT ZLIB_LIBRARIES)
+      set(ZLIB_LIBRARIES ${ZLIB_LIBRARY})
+    endif()
+
+    if(NOT TARGET ZLIB::ZLIB)
+      add_library(ZLIB::ZLIB UNKNOWN IMPORTED)
+      set_target_properties(ZLIB::ZLIB PROPERTIES
+        INTERFACE_INCLUDE_DIRECTORIES "${ZLIB_INCLUDE_DIRS}")
+
+      if(ZLIB_LIBRARY_RELEASE)
+        set_property(TARGET ZLIB::ZLIB APPEND PROPERTY
+          IMPORTED_CONFIGURATIONS RELEASE)
+        set_target_properties(ZLIB::ZLIB PROPERTIES
+          IMPORTED_LOCATION_RELEASE "${ZLIB_LIBRARY_RELEASE}")
+      endif()
+
+      if(ZLIB_LIBRARY_DEBUG)
+        set_property(TARGET ZLIB::ZLIB APPEND PROPERTY
+          IMPORTED_CONFIGURATIONS DEBUG)
+        set_target_properties(ZLIB::ZLIB PROPERTIES
+          IMPORTED_LOCATION_DEBUG "${ZLIB_LIBRARY_DEBUG}")
+      endif()
+
+      if(NOT ZLIB_LIBRARY_RELEASE AND NOT ZLIB_LIBRARY_DEBUG)
+        set_property(TARGET ZLIB::ZLIB APPEND PROPERTY
+          IMPORTED_LOCATION "${ZLIB_LIBRARY}")
+      endif()
+    endif()
+endif()
diff --git a/share/cmake-3.18/Modules/Findosg.cmake b/share/cmake-3.22/Modules/Findosg.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Findosg.cmake
rename to share/cmake-3.22/Modules/Findosg.cmake
diff --git a/share/cmake-3.18/Modules/FindosgAnimation.cmake b/share/cmake-3.22/Modules/FindosgAnimation.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindosgAnimation.cmake
rename to share/cmake-3.22/Modules/FindosgAnimation.cmake
diff --git a/share/cmake-3.18/Modules/FindosgDB.cmake b/share/cmake-3.22/Modules/FindosgDB.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindosgDB.cmake
rename to share/cmake-3.22/Modules/FindosgDB.cmake
diff --git a/share/cmake-3.18/Modules/FindosgFX.cmake b/share/cmake-3.22/Modules/FindosgFX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindosgFX.cmake
rename to share/cmake-3.22/Modules/FindosgFX.cmake
diff --git a/share/cmake-3.18/Modules/FindosgGA.cmake b/share/cmake-3.22/Modules/FindosgGA.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindosgGA.cmake
rename to share/cmake-3.22/Modules/FindosgGA.cmake
diff --git a/share/cmake-3.18/Modules/FindosgIntrospection.cmake b/share/cmake-3.22/Modules/FindosgIntrospection.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindosgIntrospection.cmake
rename to share/cmake-3.22/Modules/FindosgIntrospection.cmake
diff --git a/share/cmake-3.18/Modules/FindosgManipulator.cmake b/share/cmake-3.22/Modules/FindosgManipulator.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindosgManipulator.cmake
rename to share/cmake-3.22/Modules/FindosgManipulator.cmake
diff --git a/share/cmake-3.18/Modules/FindosgParticle.cmake b/share/cmake-3.22/Modules/FindosgParticle.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindosgParticle.cmake
rename to share/cmake-3.22/Modules/FindosgParticle.cmake
diff --git a/share/cmake-3.18/Modules/FindosgPresentation.cmake b/share/cmake-3.22/Modules/FindosgPresentation.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindosgPresentation.cmake
rename to share/cmake-3.22/Modules/FindosgPresentation.cmake
diff --git a/share/cmake-3.18/Modules/FindosgProducer.cmake b/share/cmake-3.22/Modules/FindosgProducer.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindosgProducer.cmake
rename to share/cmake-3.22/Modules/FindosgProducer.cmake
diff --git a/share/cmake-3.18/Modules/FindosgQt.cmake b/share/cmake-3.22/Modules/FindosgQt.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindosgQt.cmake
rename to share/cmake-3.22/Modules/FindosgQt.cmake
diff --git a/share/cmake-3.18/Modules/FindosgShadow.cmake b/share/cmake-3.22/Modules/FindosgShadow.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindosgShadow.cmake
rename to share/cmake-3.22/Modules/FindosgShadow.cmake
diff --git a/share/cmake-3.18/Modules/FindosgSim.cmake b/share/cmake-3.22/Modules/FindosgSim.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindosgSim.cmake
rename to share/cmake-3.22/Modules/FindosgSim.cmake
diff --git a/share/cmake-3.18/Modules/FindosgTerrain.cmake b/share/cmake-3.22/Modules/FindosgTerrain.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindosgTerrain.cmake
rename to share/cmake-3.22/Modules/FindosgTerrain.cmake
diff --git a/share/cmake-3.18/Modules/FindosgText.cmake b/share/cmake-3.22/Modules/FindosgText.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindosgText.cmake
rename to share/cmake-3.22/Modules/FindosgText.cmake
diff --git a/share/cmake-3.18/Modules/FindosgUtil.cmake b/share/cmake-3.22/Modules/FindosgUtil.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindosgUtil.cmake
rename to share/cmake-3.22/Modules/FindosgUtil.cmake
diff --git a/share/cmake-3.18/Modules/FindosgViewer.cmake b/share/cmake-3.22/Modules/FindosgViewer.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindosgViewer.cmake
rename to share/cmake-3.22/Modules/FindosgViewer.cmake
diff --git a/share/cmake-3.18/Modules/FindosgVolume.cmake b/share/cmake-3.22/Modules/FindosgVolume.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindosgVolume.cmake
rename to share/cmake-3.22/Modules/FindosgVolume.cmake
diff --git a/share/cmake-3.18/Modules/FindosgWidget.cmake b/share/cmake-3.22/Modules/FindosgWidget.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/FindosgWidget.cmake
rename to share/cmake-3.22/Modules/FindosgWidget.cmake
diff --git a/share/cmake-3.18/Modules/Findosg_functions.cmake b/share/cmake-3.22/Modules/Findosg_functions.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Findosg_functions.cmake
rename to share/cmake-3.22/Modules/Findosg_functions.cmake
diff --git a/share/cmake-3.22/Modules/FindwxWidgets.cmake b/share/cmake-3.22/Modules/FindwxWidgets.cmake
new file mode 100644
index 0000000..63af9b6
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindwxWidgets.cmake
@@ -0,0 +1,1243 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindwxWidgets
+-------------
+
+Find a wxWidgets (a.k.a., wxWindows) installation.
+
+This module finds if wxWidgets is installed and selects a default
+configuration to use.  wxWidgets is a modular library.  To specify the
+modules that you will use, you need to name them as components to the
+package:
+
+find_package(wxWidgets COMPONENTS core base ... OPTIONAL_COMPONENTS net ...)
+
+.. versionadded:: 3.4
+  Support for :command:`find_package` version argument; ``webview`` component.
+
+.. versionadded:: 3.14
+  ``OPTIONAL_COMPONENTS`` support.
+
+There are two search branches: a windows style and a unix style.  For
+windows, the following variables are searched for and set to defaults
+in case of multiple choices.  Change them if the defaults are not
+desired (i.e., these are the only variables you should change to
+select a configuration):
+
+::
+
+  wxWidgets_ROOT_DIR      - Base wxWidgets directory
+                            (e.g., C:/wxWidgets-2.6.3).
+  wxWidgets_LIB_DIR       - Path to wxWidgets libraries
+                            (e.g., C:/wxWidgets-2.6.3/lib/vc_lib).
+  wxWidgets_CONFIGURATION - Configuration to use
+                            (e.g., msw, mswd, mswu, mswunivud, etc.)
+  wxWidgets_EXCLUDE_COMMON_LIBRARIES
+                          - Set to TRUE to exclude linking of
+                            commonly required libs (e.g., png tiff
+                            jpeg zlib regex expat).
+
+
+
+For unix style it uses the wx-config utility.  You can select between
+debug/release, unicode/ansi, universal/non-universal, and
+static/shared in the QtDialog or ccmake interfaces by turning ON/OFF
+the following variables:
+
+::
+
+  wxWidgets_USE_DEBUG
+  wxWidgets_USE_UNICODE
+  wxWidgets_USE_UNIVERSAL
+  wxWidgets_USE_STATIC
+
+
+
+There is also a wxWidgets_CONFIG_OPTIONS variable for all other
+options that need to be passed to the wx-config utility.  For example,
+to use the base toolkit found in the /usr/local path, set the variable
+(before calling the FIND_PACKAGE command) as such:
+
+::
+
+  set(wxWidgets_CONFIG_OPTIONS --toolkit=base --prefix=/usr)
+
+
+
+The following are set after the configuration is done for both windows
+and unix style:
+
+::
+
+  wxWidgets_FOUND            - Set to TRUE if wxWidgets was found.
+  wxWidgets_INCLUDE_DIRS     - Include directories for WIN32
+                               i.e., where to find "wx/wx.h" and
+                               "wx/setup.h"; possibly empty for unices.
+  wxWidgets_LIBRARIES        - Path to the wxWidgets libraries.
+  wxWidgets_LIBRARY_DIRS     - compile time link dirs, useful for
+                               rpath on UNIX. Typically an empty string
+                               in WIN32 environment.
+  wxWidgets_DEFINITIONS      - Contains defines required to compile/link
+                               against WX, e.g. WXUSINGDLL
+  wxWidgets_DEFINITIONS_DEBUG- Contains defines required to compile/link
+                               against WX debug builds, e.g. __WXDEBUG__
+  wxWidgets_CXX_FLAGS        - Include dirs and compiler flags for
+                               unices, empty on WIN32. Essentially
+                               "`wx-config --cxxflags`".
+  wxWidgets_USE_FILE         - Convenience include file.
+
+.. versionadded:: 3.11
+  The following environment variables can be used as hints: ``WX_CONFIG``,
+  ``WXRC_CMD``.
+
+
+Sample usage:
+
+::
+
+   # Note that for MinGW users the order of libs is important!
+   find_package(wxWidgets COMPONENTS gl core base OPTIONAL_COMPONENTS net)
+   if(wxWidgets_FOUND)
+     include(${wxWidgets_USE_FILE})
+     # and for each of your dependent executable/library targets:
+     target_link_libraries(<YourTarget> ${wxWidgets_LIBRARIES})
+   endif()
+
+
+
+If wxWidgets is required (i.e., not an optional part):
+
+::
+
+   find_package(wxWidgets REQUIRED gl core base OPTIONAL_COMPONENTS net)
+   include(${wxWidgets_USE_FILE})
+   # and for each of your dependent executable/library targets:
+   target_link_libraries(<YourTarget> ${wxWidgets_LIBRARIES})
+#]=======================================================================]
+
+#
+# FIXME: check this and provide a correct sample usage...
+#        Remember to connect back to the upper text.
+# Sample usage with monolithic wx build:
+#
+#   find_package(wxWidgets COMPONENTS mono)
+#   ...
+
+# NOTES
+#
+# This module has been tested on the WIN32 platform with wxWidgets
+# 2.6.2, 2.6.3, and 2.5.3. However, it has been designed to
+# easily extend support to all possible builds, e.g., static/shared,
+# debug/release, unicode, universal, multilib/monolithic, etc..
+#
+# If you want to use the module and your build type is not supported
+# out-of-the-box, please contact me to exchange information on how
+# your system is setup and I'll try to add support for it.
+#
+# AUTHOR
+#
+# Miguel A. Figueroa-Villanueva (miguelf at ieee dot org).
+# Jan Woetzel (jw at mip.informatik.uni-kiel.de).
+#
+# Based on previous works of:
+# Jan Woetzel (FindwxWindows.cmake),
+# Jorgen Bodde and Jerry Fath (FindwxWin.cmake).
+
+# TODO/ideas
+#
+# (1) Option/Setting to use all available wx libs
+# In contrast to expert developer who lists the
+# minimal set of required libs in wxWidgets_USE_LIBS
+# there is the newbie user:
+#   - who just wants to link against WX with more 'magic'
+#   - doesn't know the internal structure of WX or how it was built,
+#     in particular if it is monolithic or not
+#   - want to link against all available WX libs
+# Basically, the intent here is to mimic what wx-config would do by
+# default (i.e., `wx-config --libs`).
+#
+# Possible solution:
+#   Add a reserved keyword "std" that initializes to what wx-config
+# would default to. If the user has not set the wxWidgets_USE_LIBS,
+# default to "std" instead of "base core" as it is now. To implement
+# "std" will basically boil down to a FOR_EACH lib-FOUND, but maybe
+# checking whether a minimal set was found.
+
+
+# FIXME: This and all the DBG_MSG calls should be removed after the
+# module stabilizes.
+#
+# Helper macro to control the debugging output globally. There are
+# two versions for controlling how verbose your output should be.
+macro(DBG_MSG _MSG)
+#  message(STATUS
+#    "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): ${_MSG}")
+endmacro()
+macro(DBG_MSG_V _MSG)
+#  message(STATUS
+#    "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): ${_MSG}")
+endmacro()
+
+# Clear return values in case the module is loaded more than once.
+set(wxWidgets_FOUND FALSE)
+set(wxWidgets_INCLUDE_DIRS "")
+set(wxWidgets_LIBRARIES    "")
+set(wxWidgets_LIBRARY_DIRS "")
+set(wxWidgets_CXX_FLAGS    "")
+
+# DEPRECATED: This is a patch to support the DEPRECATED use of
+# wxWidgets_USE_LIBS.
+#
+# If wxWidgets_USE_LIBS is set:
+# - if using <components>, then override wxWidgets_USE_LIBS
+# - else set wxWidgets_FIND_COMPONENTS to wxWidgets_USE_LIBS
+if(wxWidgets_USE_LIBS AND NOT wxWidgets_FIND_COMPONENTS)
+  set(wxWidgets_FIND_COMPONENTS ${wxWidgets_USE_LIBS})
+endif()
+DBG_MSG("wxWidgets_FIND_COMPONENTS : ${wxWidgets_FIND_COMPONENTS}")
+
+# Add the convenience use file if available.
+#
+# Get dir of this file which may reside in:
+# - CMAKE_MAKE_ROOT/Modules on CMake installation
+# - CMAKE_MODULE_PATH if user prefers his own specialized version
+set(wxWidgets_USE_FILE "")
+get_filename_component(
+  wxWidgets_CURRENT_LIST_DIR ${CMAKE_CURRENT_LIST_FILE} PATH)
+# Prefer an existing customized version, but the user might override
+# the FindwxWidgets module and not the UsewxWidgets one.
+if(EXISTS "${wxWidgets_CURRENT_LIST_DIR}/UsewxWidgets.cmake")
+  set(wxWidgets_USE_FILE
+    "${wxWidgets_CURRENT_LIST_DIR}/UsewxWidgets.cmake")
+else()
+  set(wxWidgets_USE_FILE UsewxWidgets)
+endif()
+
+#=====================================================================
+# Determine whether unix or win32 paths should be used
+#=====================================================================
+if(WIN32 AND NOT CYGWIN AND NOT MSYS AND NOT CMAKE_CROSSCOMPILING)
+  set(wxWidgets_FIND_STYLE "win32")
+else()
+  set(wxWidgets_FIND_STYLE "unix")
+endif()
+
+#=====================================================================
+# WIN32_FIND_STYLE
+#=====================================================================
+if(wxWidgets_FIND_STYLE STREQUAL "win32")
+  # Useful common wx libs needed by almost all components.
+  set(wxWidgets_COMMON_LIBRARIES png tiff jpeg zlib regex expat)
+
+  # DEPRECATED: Use find_package(wxWidgets COMPONENTS mono) instead.
+  if(NOT wxWidgets_FIND_COMPONENTS)
+    if(wxWidgets_USE_MONOLITHIC)
+      set(wxWidgets_FIND_COMPONENTS mono)
+    else()
+      set(wxWidgets_FIND_COMPONENTS core base) # this is default
+    endif()
+  endif()
+
+  # Add the common (usually required libs) unless
+  # wxWidgets_EXCLUDE_COMMON_LIBRARIES has been set.
+  if(NOT wxWidgets_EXCLUDE_COMMON_LIBRARIES)
+    list(APPEND wxWidgets_FIND_COMPONENTS
+      ${wxWidgets_COMMON_LIBRARIES})
+  endif()
+
+  #-------------------------------------------------------------------
+  # WIN32: Helper MACROS
+  #-------------------------------------------------------------------
+  #
+  # Get filename components for a configuration. For example,
+  #   if _CONFIGURATION = mswunivud, then _PF="msw", _UNV=univ, _UCD=u _DBG=d
+  #   if _CONFIGURATION = mswu,      then _PF="msw", _UNV="",   _UCD=u _DBG=""
+  #
+  macro(WX_GET_NAME_COMPONENTS _CONFIGURATION _PF _UNV _UCD _DBG)
+    DBG_MSG_V(${_CONFIGURATION})
+    string(REGEX MATCH "univ" ${_UNV} "${_CONFIGURATION}")
+    string(REGEX REPLACE "[msw|qt].*(u)[d]*$" "u" ${_UCD} "${_CONFIGURATION}")
+    if(${_UCD} STREQUAL ${_CONFIGURATION})
+      set(${_UCD} "")
+    endif()
+    string(REGEX MATCH "d$" ${_DBG} "${_CONFIGURATION}")
+    string(REGEX MATCH "^[msw|qt]*" ${_PF} "${_CONFIGURATION}")
+  endmacro()
+
+  #
+  # Find libraries associated to a configuration.
+  #
+  macro(WX_FIND_LIBS _PF _UNV _UCD _DBG)
+    DBG_MSG_V("m_unv = ${_UNV}")
+    DBG_MSG_V("m_ucd = ${_UCD}")
+    DBG_MSG_V("m_dbg = ${_DBG}")
+
+    # FIXME: What if both regex libs are available. regex should be
+    # found outside the loop and only wx${LIB}${_UCD}${_DBG}.
+    # Find wxWidgets common libraries.
+    foreach(LIB ${wxWidgets_COMMON_LIBRARIES} scintilla)
+      find_library(WX_${LIB}${_DBG}
+        NAMES
+        wx${LIB}${_UCD}${_DBG} # for regex
+        wx${LIB}${_DBG}
+        PATHS ${WX_LIB_DIR}
+        NO_DEFAULT_PATH
+        )
+      mark_as_advanced(WX_${LIB}${_DBG})
+    endforeach()
+
+    # Find wxWidgets multilib base libraries.
+    find_library(WX_base${_DBG}
+      NAMES
+      wxbase31${_UCD}${_DBG}
+      wxbase30${_UCD}${_DBG}
+      wxbase29${_UCD}${_DBG}
+      wxbase28${_UCD}${_DBG}
+      wxbase27${_UCD}${_DBG}
+      wxbase26${_UCD}${_DBG}
+      wxbase25${_UCD}${_DBG}
+      PATHS ${WX_LIB_DIR}
+      NO_DEFAULT_PATH
+      )
+    mark_as_advanced(WX_base${_DBG})
+    foreach(LIB net odbc xml)
+      find_library(WX_${LIB}${_DBG}
+        NAMES
+        wxbase31${_UCD}${_DBG}_${LIB}
+        wxbase30${_UCD}${_DBG}_${LIB}
+        wxbase29${_UCD}${_DBG}_${LIB}
+        wxbase28${_UCD}${_DBG}_${LIB}
+        wxbase27${_UCD}${_DBG}_${LIB}
+        wxbase26${_UCD}${_DBG}_${LIB}
+        wxbase25${_UCD}${_DBG}_${LIB}
+        PATHS ${WX_LIB_DIR}
+        NO_DEFAULT_PATH
+        )
+      mark_as_advanced(WX_${LIB}${_DBG})
+    endforeach()
+
+    # Find wxWidgets monolithic library.
+    find_library(WX_mono${_DBG}
+      NAMES
+      wx${_PF}${_UNV}31${_UCD}${_DBG}
+      wx${_PF}${_UNV}30${_UCD}${_DBG}
+      wx${_PF}${_UNV}29${_UCD}${_DBG}
+      wx${_PF}${_UNV}28${_UCD}${_DBG}
+      wx${_PF}${_UNV}27${_UCD}${_DBG}
+      wx${_PF}${_UNV}26${_UCD}${_DBG}
+      wx${_PF}${_UNV}25${_UCD}${_DBG}
+      PATHS ${WX_LIB_DIR}
+      NO_DEFAULT_PATH
+      )
+    mark_as_advanced(WX_mono${_DBG})
+
+    # Find wxWidgets multilib libraries.
+    foreach(LIB core adv aui html media xrc dbgrid gl qa richtext
+                stc ribbon propgrid webview)
+      find_library(WX_${LIB}${_DBG}
+        NAMES
+        wx${_PF}${_UNV}31${_UCD}${_DBG}_${LIB}
+        wx${_PF}${_UNV}30${_UCD}${_DBG}_${LIB}
+        wx${_PF}${_UNV}29${_UCD}${_DBG}_${LIB}
+        wx${_PF}${_UNV}28${_UCD}${_DBG}_${LIB}
+        wx${_PF}${_UNV}27${_UCD}${_DBG}_${LIB}
+        wx${_PF}${_UNV}26${_UCD}${_DBG}_${LIB}
+        wx${_PF}${_UNV}25${_UCD}${_DBG}_${LIB}
+        PATHS ${WX_LIB_DIR}
+        NO_DEFAULT_PATH
+        )
+      mark_as_advanced(WX_${LIB}${_DBG})
+    endforeach()
+  endmacro()
+
+  #
+  # Clear all library paths, so that FIND_LIBRARY refinds them.
+  #
+  # Clear a lib, reset its found flag, and mark as advanced.
+  macro(WX_CLEAR_LIB _LIB)
+    set(${_LIB} "${_LIB}-NOTFOUND" CACHE FILEPATH "Cleared." FORCE)
+    set(${_LIB}_FOUND FALSE)
+    mark_as_advanced(${_LIB})
+  endmacro()
+  # Clear all debug or release library paths (arguments are "d" or "").
+  macro(WX_CLEAR_ALL_LIBS _DBG)
+    # Clear wxWidgets common libraries.
+    foreach(LIB ${wxWidgets_COMMON_LIBRARIES} scintilla)
+      WX_CLEAR_LIB(WX_${LIB}${_DBG})
+    endforeach()
+
+    # Clear wxWidgets multilib base libraries.
+    WX_CLEAR_LIB(WX_base${_DBG})
+    foreach(LIB net odbc xml)
+      WX_CLEAR_LIB(WX_${LIB}${_DBG})
+    endforeach()
+
+    # Clear wxWidgets monolithic library.
+    WX_CLEAR_LIB(WX_mono${_DBG})
+
+    # Clear wxWidgets multilib libraries.
+    foreach(LIB core adv aui html media xrc dbgrid gl qa richtext
+                webview stc ribbon propgrid)
+      WX_CLEAR_LIB(WX_${LIB}${_DBG})
+    endforeach()
+  endmacro()
+  # Clear all wxWidgets debug libraries.
+  macro(WX_CLEAR_ALL_DBG_LIBS)
+    WX_CLEAR_ALL_LIBS("d")
+  endmacro()
+  # Clear all wxWidgets release libraries.
+  macro(WX_CLEAR_ALL_REL_LIBS)
+    WX_CLEAR_ALL_LIBS("")
+  endmacro()
+
+  #
+  # Set the wxWidgets_LIBRARIES variable.
+  # Also, Sets output variable wxWidgets_FOUND to FALSE if it fails.
+  #
+  macro(WX_SET_LIBRARIES _LIBS _DBG)
+    DBG_MSG_V("Looking for ${${_LIBS}}")
+    if(WX_USE_REL_AND_DBG)
+      foreach(LIB ${${_LIBS}})
+        DBG_MSG_V("Searching for ${LIB} and ${LIB}d")
+        DBG_MSG_V("WX_${LIB}  : ${WX_${LIB}}")
+        DBG_MSG_V("WX_${LIB}d : ${WX_${LIB}d}")
+        if(WX_${LIB} AND WX_${LIB}d)
+          DBG_MSG_V("Found ${LIB} and ${LIB}d")
+          list(APPEND wxWidgets_LIBRARIES
+            debug ${WX_${LIB}d} optimized ${WX_${LIB}}
+            )
+          set(wxWidgets_${LIB}_FOUND TRUE)
+        elseif(NOT wxWidgets_FIND_REQUIRED_${LIB})
+          DBG_MSG_V("- ignored optional missing WX_${LIB}=${WX_${LIB}} or WX_${LIB}d=${WX_${LIB}d}")
+        else()
+          DBG_MSG_V("- not found due to missing WX_${LIB}=${WX_${LIB}} or WX_${LIB}d=${WX_${LIB}d}")
+          set(wxWidgets_FOUND FALSE)
+        endif()
+      endforeach()
+    else()
+      foreach(LIB ${${_LIBS}})
+        DBG_MSG_V("Searching for ${LIB}${_DBG}")
+        DBG_MSG_V("WX_${LIB}${_DBG} : ${WX_${LIB}${_DBG}}")
+        if(WX_${LIB}${_DBG})
+          DBG_MSG_V("Found ${LIB}${_DBG}")
+          list(APPEND wxWidgets_LIBRARIES ${WX_${LIB}${_DBG}})
+          set(wxWidgets_${LIB}_FOUND TRUE)
+        elseif(NOT wxWidgets_FIND_REQUIRED_${LIB})
+          DBG_MSG_V("- ignored optional missing WX_${LIB}${_DBG}=${WX_${LIB}${_DBG}}")
+        else()
+          DBG_MSG_V("- not found due to missing WX_${LIB}${_DBG}=${WX_${LIB}${_DBG}}")
+          set(wxWidgets_FOUND FALSE)
+        endif()
+      endforeach()
+    endif()
+
+    DBG_MSG_V("OpenGL")
+    list(FIND ${_LIBS} gl WX_USE_GL)
+    if(NOT WX_USE_GL EQUAL -1)
+      DBG_MSG_V("- is required.")
+      list(APPEND wxWidgets_LIBRARIES opengl32 glu32)
+    endif()
+
+    list(APPEND wxWidgets_LIBRARIES winmm comctl32 uuid oleacc uxtheme rpcrt4 shlwapi version wsock32)
+  endmacro()
+
+  #-------------------------------------------------------------------
+  # WIN32: Start actual work.
+  #-------------------------------------------------------------------
+
+  # Look for an installation tree.
+  find_path(wxWidgets_ROOT_DIR
+    NAMES include/wx/wx.h
+    PATHS
+      ENV wxWidgets_ROOT_DIR
+      ENV WXWIN
+      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\wxWidgets_is1;Inno Setup: App Path]"  # WX 2.6.x
+      C:/
+      D:/
+      ENV ProgramFiles
+    PATH_SUFFIXES
+      wxWidgets-3.1.0
+      wxWidgets-3.0.2
+      wxWidgets-3.0.1
+      wxWidgets-3.0.0
+      wxWidgets-2.9.5
+      wxWidgets-2.9.4
+      wxWidgets-2.9.3
+      wxWidgets-2.9.2
+      wxWidgets-2.9.1
+      wxWidgets-2.9.0
+      wxWidgets-2.8.9
+      wxWidgets-2.8.8
+      wxWidgets-2.8.7
+      wxWidgets-2.8.6
+      wxWidgets-2.8.5
+      wxWidgets-2.8.4
+      wxWidgets-2.8.3
+      wxWidgets-2.8.2
+      wxWidgets-2.8.1
+      wxWidgets-2.8.0
+      wxWidgets-2.7.4
+      wxWidgets-2.7.3
+      wxWidgets-2.7.2
+      wxWidgets-2.7.1
+      wxWidgets-2.7.0
+      wxWidgets-2.7.0-1
+      wxWidgets-2.6.4
+      wxWidgets-2.6.3
+      wxWidgets-2.6.2
+      wxWidgets-2.6.1
+      wxWidgets-2.5.4
+      wxWidgets-2.5.3
+      wxWidgets-2.5.2
+      wxWidgets-2.5.1
+      wxWidgets
+    DOC "wxWidgets base/installation directory"
+    )
+
+  # If wxWidgets_ROOT_DIR changed, clear lib dir.
+  if(NOT WX_ROOT_DIR STREQUAL wxWidgets_ROOT_DIR)
+    set(WX_ROOT_DIR ${wxWidgets_ROOT_DIR}
+        CACHE INTERNAL "wxWidgets_ROOT_DIR")
+    set(wxWidgets_LIB_DIR "wxWidgets_LIB_DIR-NOTFOUND"
+        CACHE PATH "Cleared." FORCE)
+  endif()
+
+  if(WX_ROOT_DIR)
+    # Select one default tree inside the already determined wx tree.
+    # Prefer static/shared order usually consistent with build
+    # settings.
+    set(_WX_TOOL "")
+    set(_WX_TOOLVER "")
+    set(_WX_ARCH "")
+    if(MINGW)
+      set(_WX_TOOL gcc)
+    elseif(MSVC)
+      set(_WX_TOOL vc)
+      set(_WX_TOOLVER ${MSVC_TOOLSET_VERSION})
+      # support for a lib/vc14x_x64_dll/ path from wxW 3.1.3 distribution
+      string(REGEX REPLACE ".$" "x" _WX_TOOLVERx ${_WX_TOOLVER})
+      if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+        set(_WX_ARCH _x64)
+      endif()
+    endif()
+    if(BUILD_SHARED_LIBS)
+      find_path(wxWidgets_LIB_DIR
+        NAMES
+          qtu/wx/setup.h
+          qtud/wx/setup.h
+          msw/wx/setup.h
+          mswd/wx/setup.h
+          mswu/wx/setup.h
+          mswud/wx/setup.h
+          mswuniv/wx/setup.h
+          mswunivd/wx/setup.h
+          mswunivu/wx/setup.h
+          mswunivud/wx/setup.h
+        PATHS
+        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVER}_xp${_WX_ARCH}_dll   # prefer shared
+        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVER}${_WX_ARCH}_dll   # prefer shared
+        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVERx}_xp${_WX_ARCH}_dll   # prefer shared
+        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVERx}${_WX_ARCH}_dll   # prefer shared
+        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_ARCH}_dll                 # prefer shared
+        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVER}_xp${_WX_ARCH}_lib
+        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVER}${_WX_ARCH}_lib
+        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVERx}_xp${_WX_ARCH}_lib
+        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVERx}${_WX_ARCH}_lib
+        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_ARCH}_lib
+        DOC "Path to wxWidgets libraries"
+        NO_DEFAULT_PATH
+        )
+    else()
+      find_path(wxWidgets_LIB_DIR
+        NAMES
+          qtu/wx/setup.h
+          qtud/wx/setup.h
+          msw/wx/setup.h
+          mswd/wx/setup.h
+          mswu/wx/setup.h
+          mswud/wx/setup.h
+          mswuniv/wx/setup.h
+          mswunivd/wx/setup.h
+          mswunivu/wx/setup.h
+          mswunivud/wx/setup.h
+        PATHS
+        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVER}_xp${_WX_ARCH}_lib   # prefer static
+        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVER}${_WX_ARCH}_lib   # prefer static
+        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVERx}_xp${_WX_ARCH}_lib   # prefer static
+        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVERx}${_WX_ARCH}_lib   # prefer static
+        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_ARCH}_lib                 # prefer static
+        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVER}_xp${_WX_ARCH}_dll
+        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVER}${_WX_ARCH}_dll
+        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVERx}_xp${_WX_ARCH}_dll
+        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_TOOLVERx}${_WX_ARCH}_dll
+        ${WX_ROOT_DIR}/lib/${_WX_TOOL}${_WX_ARCH}_dll
+        DOC "Path to wxWidgets libraries"
+        NO_DEFAULT_PATH
+        )
+    endif()
+    unset(_WX_TOOL)
+    unset(_WX_TOOLVER)
+    unset(_WX_ARCH)
+
+    # If wxWidgets_LIB_DIR changed, clear all libraries.
+    if(NOT WX_LIB_DIR STREQUAL wxWidgets_LIB_DIR)
+      set(WX_LIB_DIR ${wxWidgets_LIB_DIR} CACHE INTERNAL "wxWidgets_LIB_DIR")
+      WX_CLEAR_ALL_DBG_LIBS()
+      WX_CLEAR_ALL_REL_LIBS()
+    endif()
+
+    if(WX_LIB_DIR)
+      # If building shared libs, define WXUSINGDLL to use dllimport.
+      if(WX_LIB_DIR MATCHES "[dD][lL][lL]")
+        set(wxWidgets_DEFINITIONS WXUSINGDLL)
+        DBG_MSG_V("detected SHARED/DLL tree WX_LIB_DIR=${WX_LIB_DIR}")
+      endif()
+
+      # Search for available configuration types.
+      foreach(CFG mswunivud mswunivd mswud mswd mswunivu mswuniv mswu msw qt qtd qtu qtud)
+        set(WX_${CFG}_FOUND FALSE)
+        if(EXISTS ${WX_LIB_DIR}/${CFG})
+          list(APPEND WX_CONFIGURATION_LIST ${CFG})
+          set(WX_${CFG}_FOUND TRUE)
+          set(WX_CONFIGURATION ${CFG})
+        endif()
+      endforeach()
+      DBG_MSG_V("WX_CONFIGURATION_LIST=${WX_CONFIGURATION_LIST}")
+
+      if(WX_CONFIGURATION)
+        set(wxWidgets_FOUND TRUE)
+
+        # If the selected configuration wasn't found force the default
+        # one. Otherwise, use it but still force a refresh for
+        # updating the doc string with the current list of available
+        # configurations.
+        if(NOT WX_${wxWidgets_CONFIGURATION}_FOUND)
+          set(wxWidgets_CONFIGURATION ${WX_CONFIGURATION} CACHE STRING
+            "Set wxWidgets configuration (${WX_CONFIGURATION_LIST})" FORCE)
+        else()
+          set(wxWidgets_CONFIGURATION ${wxWidgets_CONFIGURATION} CACHE STRING
+            "Set wxWidgets configuration (${WX_CONFIGURATION_LIST})" FORCE)
+        endif()
+
+        # If release config selected, and both release/debug exist.
+        if(WX_${wxWidgets_CONFIGURATION}d_FOUND)
+          option(wxWidgets_USE_REL_AND_DBG
+            "Use release and debug configurations?" TRUE)
+          set(WX_USE_REL_AND_DBG ${wxWidgets_USE_REL_AND_DBG})
+        else()
+          # If the option exists (already in cache), force it false.
+          if(wxWidgets_USE_REL_AND_DBG)
+            set(wxWidgets_USE_REL_AND_DBG FALSE CACHE BOOL
+              "No ${wxWidgets_CONFIGURATION}d found." FORCE)
+          endif()
+          set(WX_USE_REL_AND_DBG FALSE)
+        endif()
+
+        # Get configuration parameters from the name.
+        WX_GET_NAME_COMPONENTS(${wxWidgets_CONFIGURATION} PF UNV UCD DBG)
+
+        # Set wxWidgets lib setup include directory.
+        if(EXISTS ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h)
+          set(wxWidgets_INCLUDE_DIRS
+            ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION})
+        else()
+          DBG_MSG("wxWidgets_FOUND FALSE because ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h does not exists.")
+          set(wxWidgets_FOUND FALSE)
+        endif()
+
+        # Set wxWidgets main include directory.
+        if(EXISTS ${WX_ROOT_DIR}/include/wx/wx.h)
+          list(APPEND wxWidgets_INCLUDE_DIRS ${WX_ROOT_DIR}/include)
+        else()
+          DBG_MSG("wxWidgets_FOUND FALSE because WX_ROOT_DIR=${WX_ROOT_DIR} has no ${WX_ROOT_DIR}/include/wx/wx.h")
+          set(wxWidgets_FOUND FALSE)
+        endif()
+
+        # Find wxWidgets libraries.
+        WX_FIND_LIBS("${PF}" "${UNV}" "${UCD}" "${DBG}")
+        if(WX_USE_REL_AND_DBG)
+          WX_FIND_LIBS("${PF}" "${UNV}" "${UCD}" "d")
+        endif()
+
+        # Settings for requested libs (i.e., include dir, libraries, etc.).
+        WX_SET_LIBRARIES(wxWidgets_FIND_COMPONENTS "${DBG}")
+
+        # Add necessary definitions for unicode builds
+        if("${UCD}" STREQUAL "u")
+          list(APPEND wxWidgets_DEFINITIONS UNICODE _UNICODE)
+        endif()
+
+        # Add necessary definitions for debug builds
+        set(wxWidgets_DEFINITIONS_DEBUG _DEBUG __WXDEBUG__)
+
+      endif()
+    endif()
+  endif()
+
+#=====================================================================
+# UNIX_FIND_STYLE
+#=====================================================================
+else()
+  if(wxWidgets_FIND_STYLE STREQUAL "unix")
+    #-----------------------------------------------------------------
+    # UNIX: Helper MACROS
+    #-----------------------------------------------------------------
+    #
+    # Set the default values based on "wx-config --selected-config".
+    #
+    macro(WX_CONFIG_SELECT_GET_DEFAULT)
+      execute_process(
+        COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}"
+          ${wxWidgets_CONFIG_OPTIONS} --selected-config
+        OUTPUT_VARIABLE _wx_selected_config
+        RESULT_VARIABLE _wx_result
+        ERROR_QUIET
+        )
+      if(_wx_result EQUAL 0)
+        foreach(_opt_name debug static unicode universal)
+          string(TOUPPER ${_opt_name} _upper_opt_name)
+          if(_wx_selected_config MATCHES "${_opt_name}")
+            set(wxWidgets_DEFAULT_${_upper_opt_name} ON)
+          else()
+            set(wxWidgets_DEFAULT_${_upper_opt_name} OFF)
+          endif()
+        endforeach()
+      else()
+        foreach(_upper_opt_name DEBUG STATIC UNICODE UNIVERSAL)
+          set(wxWidgets_DEFAULT_${_upper_opt_name} OFF)
+        endforeach()
+      endif()
+    endmacro()
+
+    #
+    # Query a boolean configuration option to determine if the system
+    # has both builds available. If so, provide the selection option
+    # to the user.
+    #
+    macro(WX_CONFIG_SELECT_QUERY_BOOL _OPT_NAME _OPT_HELP)
+      execute_process(
+        COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}"
+          ${wxWidgets_CONFIG_OPTIONS} --${_OPT_NAME}=yes
+        RESULT_VARIABLE _wx_result_yes
+        OUTPUT_QUIET
+        ERROR_QUIET
+        )
+      execute_process(
+        COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}"
+          ${wxWidgets_CONFIG_OPTIONS} --${_OPT_NAME}=no
+        RESULT_VARIABLE _wx_result_no
+        OUTPUT_QUIET
+        ERROR_QUIET
+        )
+      string(TOUPPER ${_OPT_NAME} _UPPER_OPT_NAME)
+      if(_wx_result_yes EQUAL 0 AND _wx_result_no EQUAL 0)
+        option(wxWidgets_USE_${_UPPER_OPT_NAME}
+          ${_OPT_HELP} ${wxWidgets_DEFAULT_${_UPPER_OPT_NAME}})
+      else()
+        # If option exists (already in cache), force to available one.
+        if(DEFINED wxWidgets_USE_${_UPPER_OPT_NAME})
+          if(_wx_result_yes EQUAL 0)
+            set(wxWidgets_USE_${_UPPER_OPT_NAME} ON  CACHE BOOL ${_OPT_HELP} FORCE)
+          else()
+            set(wxWidgets_USE_${_UPPER_OPT_NAME} OFF CACHE BOOL ${_OPT_HELP} FORCE)
+          endif()
+        endif()
+      endif()
+    endmacro()
+
+    #
+    # Set wxWidgets_SELECT_OPTIONS to wx-config options for selecting
+    # among multiple builds.
+    #
+    macro(WX_CONFIG_SELECT_SET_OPTIONS)
+      set(wxWidgets_SELECT_OPTIONS ${wxWidgets_CONFIG_OPTIONS})
+      foreach(_opt_name debug static unicode universal)
+        string(TOUPPER ${_opt_name} _upper_opt_name)
+        if(DEFINED wxWidgets_USE_${_upper_opt_name})
+          if(wxWidgets_USE_${_upper_opt_name})
+            list(APPEND wxWidgets_SELECT_OPTIONS --${_opt_name}=yes)
+          else()
+            list(APPEND wxWidgets_SELECT_OPTIONS --${_opt_name}=no)
+          endif()
+        endif()
+      endforeach()
+    endmacro()
+
+    #-----------------------------------------------------------------
+    # UNIX: Start actual work.
+    #-----------------------------------------------------------------
+    # Support cross-compiling, only search in the target platform.
+    #
+    # Look for wx-config -- this can be set in the environment,
+    # or try versioned and toolchain-versioned variants of the -config
+    # executable as well.
+    find_program(wxWidgets_CONFIG_EXECUTABLE
+      NAMES
+        $ENV{WX_CONFIG}
+        wx-config
+        wx-config-3.1 wx-config-3.0 wx-config-2.9 wx-config-2.8
+        wxgtk3u-3.1-config wxgtk3u-3.0-config wxgtk2u-2.8-config
+      DOC "Location of wxWidgets library configuration provider binary (wx-config)."
+      ONLY_CMAKE_FIND_ROOT_PATH
+      )
+
+    if(wxWidgets_CONFIG_EXECUTABLE)
+      set(wxWidgets_FOUND TRUE)
+
+      # get defaults based on "wx-config --selected-config"
+      WX_CONFIG_SELECT_GET_DEFAULT()
+
+      # for each option: if both builds are available, provide option
+      WX_CONFIG_SELECT_QUERY_BOOL(debug "Use debug build?")
+      WX_CONFIG_SELECT_QUERY_BOOL(unicode "Use unicode build?")
+      WX_CONFIG_SELECT_QUERY_BOOL(universal "Use universal build?")
+      WX_CONFIG_SELECT_QUERY_BOOL(static "Link libraries statically?")
+
+      # process selection to set wxWidgets_SELECT_OPTIONS
+      WX_CONFIG_SELECT_SET_OPTIONS()
+      DBG_MSG("wxWidgets_SELECT_OPTIONS=${wxWidgets_SELECT_OPTIONS}")
+
+      # run the wx-config program to get cxxflags
+      execute_process(
+        COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}"
+          ${wxWidgets_SELECT_OPTIONS} --cxxflags
+        OUTPUT_VARIABLE wxWidgets_CXX_FLAGS
+        RESULT_VARIABLE RET
+        ERROR_QUIET
+        )
+      if(RET EQUAL 0)
+        string(STRIP "${wxWidgets_CXX_FLAGS}" wxWidgets_CXX_FLAGS)
+        separate_arguments(wxWidgets_CXX_FLAGS_LIST NATIVE_COMMAND "${wxWidgets_CXX_FLAGS}")
+
+        DBG_MSG_V("wxWidgets_CXX_FLAGS=${wxWidgets_CXX_FLAGS}")
+
+        # parse definitions and include dirs from cxxflags
+        #   drop the -D and -I prefixes
+        set(wxWidgets_CXX_FLAGS)
+        foreach(arg IN LISTS wxWidgets_CXX_FLAGS_LIST)
+          if("${arg}" MATCHES "^-I(.*)$")
+            # include directory
+            list(APPEND wxWidgets_INCLUDE_DIRS "${CMAKE_MATCH_1}")
+          elseif("${arg}" MATCHES "^-D(.*)$")
+            # compile definition
+            list(APPEND wxWidgets_DEFINITIONS "${CMAKE_MATCH_1}")
+          else()
+            list(APPEND wxWidgets_CXX_FLAGS "${arg}")
+          endif()
+        endforeach()
+
+        DBG_MSG_V("wxWidgets_DEFINITIONS=${wxWidgets_DEFINITIONS}")
+        DBG_MSG_V("wxWidgets_INCLUDE_DIRS=${wxWidgets_INCLUDE_DIRS}")
+        DBG_MSG_V("wxWidgets_CXX_FLAGS=${wxWidgets_CXX_FLAGS}")
+
+      else()
+        set(wxWidgets_FOUND FALSE)
+        DBG_MSG_V(
+          "${wxWidgets_CONFIG_EXECUTABLE} --cxxflags FAILED with RET=${RET}")
+      endif()
+
+      # run the wx-config program to get the libs
+      # - NOTE: wx-config doesn't verify that the libs requested exist
+      #         it just produces the names. Maybe a TRY_COMPILE would
+      #         be useful here...
+      unset(_cmp_req)
+      unset(_cmp_opt)
+      foreach(_cmp IN LISTS wxWidgets_FIND_COMPONENTS)
+        if(wxWidgets_FIND_REQUIRED_${_cmp})
+          list(APPEND _cmp_req "${_cmp}")
+        else()
+          list(APPEND _cmp_opt "${_cmp}")
+        endif()
+      endforeach()
+      DBG_MSG_V("wxWidgets required components : ${_cmp_req}")
+      DBG_MSG_V("wxWidgets optional components : ${_cmp_opt}")
+      if(DEFINED _cmp_opt)
+        string(REPLACE ";" "," _cmp_opt "--optional-libs ${_cmp_opt}")
+      endif()
+      string(REPLACE ";" "," _cmp_req "${_cmp_req}")
+      execute_process(
+        COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}"
+          ${wxWidgets_SELECT_OPTIONS} --libs ${_cmp_req} ${_cmp_opt}
+        OUTPUT_VARIABLE wxWidgets_LIBRARIES
+        RESULT_VARIABLE RET
+        ERROR_QUIET
+        )
+      if(RET EQUAL 0)
+        string(STRIP "${wxWidgets_LIBRARIES}" wxWidgets_LIBRARIES)
+        separate_arguments(wxWidgets_LIBRARIES)
+        string(REPLACE "-framework;" "-framework "
+          wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}")
+        string(REPLACE "-weak_framework;" "-weak_framework "
+          wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}")
+        string(REPLACE "-arch;" "-arch "
+          wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}")
+        string(REPLACE "-isysroot;" "-isysroot "
+          wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}")
+
+        # extract linkdirs (-L) for rpath (i.e., LINK_DIRECTORIES)
+        string(REGEX MATCHALL "-L[^;]+"
+          wxWidgets_LIBRARY_DIRS "${wxWidgets_LIBRARIES}")
+        string(REGEX REPLACE "-L([^;]+)" "\\1"
+          wxWidgets_LIBRARY_DIRS "${wxWidgets_LIBRARY_DIRS}")
+
+        DBG_MSG_V("wxWidgets_LIBRARIES=${wxWidgets_LIBRARIES}")
+        DBG_MSG_V("wxWidgets_LIBRARY_DIRS=${wxWidgets_LIBRARY_DIRS}")
+
+      else()
+        set(wxWidgets_FOUND FALSE)
+        DBG_MSG("${wxWidgets_CONFIG_EXECUTABLE} --libs ${_cmp_req} ${_cmp_opt} FAILED with RET=${RET}")
+      endif()
+      unset(_cmp_req)
+      unset(_cmp_opt)
+    endif()
+
+    # When using wx-config in MSYS, the include paths are UNIX style paths which may or may
+    # not work correctly depending on you MSYS/MinGW configuration.  CMake expects native
+    # paths internally.
+    if(wxWidgets_FOUND AND MSYS)
+      find_program(_cygpath_exe cygpath ONLY_CMAKE_FIND_ROOT_PATH)
+      DBG_MSG_V("_cygpath_exe:  ${_cygpath_exe}")
+      if(_cygpath_exe)
+        set(_tmp_path "")
+        foreach(_path ${wxWidgets_INCLUDE_DIRS})
+          execute_process(
+            COMMAND cygpath -w ${_path}
+            OUTPUT_VARIABLE _native_path
+            RESULT_VARIABLE _retv
+            OUTPUT_STRIP_TRAILING_WHITESPACE
+            ERROR_QUIET
+            )
+          if(_retv EQUAL 0)
+            file(TO_CMAKE_PATH ${_native_path} _native_path)
+            DBG_MSG_V("Path ${_path} converted to ${_native_path}")
+            string(APPEND _tmp_path " ${_native_path}")
+          endif()
+        endforeach()
+        DBG_MSG("Setting wxWidgets_INCLUDE_DIRS = ${_tmp_path}")
+        set(wxWidgets_INCLUDE_DIRS ${_tmp_path})
+        separate_arguments(wxWidgets_INCLUDE_DIRS)
+        list(REMOVE_ITEM wxWidgets_INCLUDE_DIRS "")
+
+        set(_tmp_path "")
+        foreach(_path ${wxWidgets_LIBRARY_DIRS})
+          execute_process(
+            COMMAND cygpath -w ${_path}
+            OUTPUT_VARIABLE _native_path
+            RESULT_VARIABLE _retv
+            OUTPUT_STRIP_TRAILING_WHITESPACE
+            ERROR_QUIET
+            )
+          if(_retv EQUAL 0)
+            file(TO_CMAKE_PATH ${_native_path} _native_path)
+            DBG_MSG_V("Path ${_path} converted to ${_native_path}")
+            string(APPEND _tmp_path " ${_native_path}")
+          endif()
+        endforeach()
+        DBG_MSG("Setting wxWidgets_LIBRARY_DIRS = ${_tmp_path}")
+        set(wxWidgets_LIBRARY_DIRS ${_tmp_path})
+        separate_arguments(wxWidgets_LIBRARY_DIRS)
+        list(REMOVE_ITEM wxWidgets_LIBRARY_DIRS "")
+      endif()
+      unset(_cygpath_exe CACHE)
+    endif()
+
+#=====================================================================
+# Neither UNIX_FIND_STYLE, nor WIN32_FIND_STYLE
+#=====================================================================
+  else()
+    if(NOT wxWidgets_FIND_QUIETLY)
+      message(STATUS
+        "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): \n"
+        "  Platform unknown/unsupported. It's neither WIN32 nor UNIX "
+        "find style."
+        )
+    endif()
+  endif()
+endif()
+
+# Check that all libraries are present, as wx-config does not check it
+set(_wx_lib_missing "")
+foreach(_wx_lib_ ${wxWidgets_LIBRARIES})
+  if("${_wx_lib_}" MATCHES "^-l(.*)")
+    set(_wx_lib_name "${CMAKE_MATCH_1}")
+    unset(_wx_lib_found CACHE)
+    find_library(_wx_lib_found NAMES ${_wx_lib_name} HINTS ${wxWidgets_LIBRARY_DIRS})
+    if(_wx_lib_found STREQUAL _wx_lib_found-NOTFOUND)
+      list(APPEND _wx_lib_missing ${_wx_lib_name})
+    endif()
+    unset(_wx_lib_found CACHE)
+  endif()
+endforeach()
+
+if (_wx_lib_missing)
+  string(REPLACE ";" " " _wx_lib_missing "${_wx_lib_missing}")
+  DBG_MSG_V("wxWidgets not found due to following missing libraries: ${_wx_lib_missing}")
+  set(wxWidgets_FOUND FALSE)
+  unset(wxWidgets_LIBRARIES)
+endif()
+unset(_wx_lib_missing)
+
+# Check if a specific version was requested by find_package().
+if(wxWidgets_FOUND)
+  unset(_wx_filename)
+  find_file(_wx_filename wx/version.h PATHS ${wxWidgets_INCLUDE_DIRS} NO_DEFAULT_PATH)
+  dbg_msg("_wx_filename:  ${_wx_filename}")
+
+  if(NOT _wx_filename)
+    message(FATAL_ERROR "wxWidgets wx/version.h file not found in ${wxWidgets_INCLUDE_DIRS}.")
+  endif()
+
+  file(READ "${_wx_filename}" _wx_version_h)
+  unset(_wx_filename CACHE)
+
+  string(REGEX REPLACE "^(.*\n)?#define +wxMAJOR_VERSION +([0-9]+).*"
+    "\\2" wxWidgets_VERSION_MAJOR "${_wx_version_h}" )
+  string(REGEX REPLACE "^(.*\n)?#define +wxMINOR_VERSION +([0-9]+).*"
+    "\\2" wxWidgets_VERSION_MINOR "${_wx_version_h}" )
+  string(REGEX REPLACE "^(.*\n)?#define +wxRELEASE_NUMBER +([0-9]+).*"
+    "\\2" wxWidgets_VERSION_PATCH "${_wx_version_h}" )
+  set(wxWidgets_VERSION_STRING
+    "${wxWidgets_VERSION_MAJOR}.${wxWidgets_VERSION_MINOR}.${wxWidgets_VERSION_PATCH}" )
+  dbg_msg("wxWidgets_VERSION_STRING:    ${wxWidgets_VERSION_STRING}")
+endif()
+
+# Debug output:
+DBG_MSG("wxWidgets_FOUND           : ${wxWidgets_FOUND}")
+DBG_MSG("wxWidgets_INCLUDE_DIRS    : ${wxWidgets_INCLUDE_DIRS}")
+DBG_MSG("wxWidgets_LIBRARY_DIRS    : ${wxWidgets_LIBRARY_DIRS}")
+DBG_MSG("wxWidgets_LIBRARIES       : ${wxWidgets_LIBRARIES}")
+DBG_MSG("wxWidgets_CXX_FLAGS       : ${wxWidgets_CXX_FLAGS}")
+DBG_MSG("wxWidgets_USE_FILE        : ${wxWidgets_USE_FILE}")
+
+#=====================================================================
+#=====================================================================
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+
+# FIXME: set wxWidgets_<comp>_FOUND for wx-config branch
+#        and use HANDLE_COMPONENTS on Unix too
+if(wxWidgets_FIND_STYLE STREQUAL "win32")
+  set(wxWidgets_HANDLE_COMPONENTS "HANDLE_COMPONENTS")
+endif()
+
+find_package_handle_standard_args(wxWidgets
+  REQUIRED_VARS wxWidgets_LIBRARIES wxWidgets_INCLUDE_DIRS
+  VERSION_VAR   wxWidgets_VERSION_STRING
+  ${wxWidgets_HANDLE_COMPONENTS}
+  )
+unset(wxWidgets_HANDLE_COMPONENTS)
+
+#=====================================================================
+# Macros for use in wxWidgets apps.
+# - This module will not fail to find wxWidgets based on the code
+#   below. Hence, it's required to check for validity of:
+#
+# wxWidgets_wxrc_EXECUTABLE
+#=====================================================================
+
+# Resource file compiler.
+find_program(wxWidgets_wxrc_EXECUTABLE
+  NAMES $ENV{WXRC_CMD} wxrc
+  PATHS ${wxWidgets_ROOT_DIR}/utils/wxrc/vc_msw
+  DOC "Location of wxWidgets resource file compiler binary (wxrc)"
+  )
+
+#
+# WX_SPLIT_ARGUMENTS_ON(<keyword> <left> <right> <arg1> <arg2> ...)
+#
+# Sets <left> and <right> to contain arguments to the left and right,
+# respectively, of <keyword>.
+#
+# Example usage:
+#  function(WXWIDGETS_ADD_RESOURCES outfiles)
+#    WX_SPLIT_ARGUMENTS_ON(OPTIONS wxrc_files wxrc_options ${ARGN})
+#    ...
+#  endfunction()
+#
+#  WXWIDGETS_ADD_RESOURCES(sources ${xrc_files} OPTIONS -e -o file.C)
+#
+# NOTE: This is a generic piece of code that should be renamed to
+# SPLIT_ARGUMENTS_ON and put in a file serving the same purpose as
+# FindPackageStandardArgs.cmake. At the time of this writing
+# FindQt4.cmake has a QT4_EXTRACT_OPTIONS, which I basically copied
+# here a bit more generalized. So, there are already two find modules
+# using this approach.
+#
+function(WX_SPLIT_ARGUMENTS_ON _keyword _leftvar _rightvar)
+  # FIXME: Document that the input variables will be cleared.
+  #list(APPEND ${_leftvar}  "")
+  #list(APPEND ${_rightvar} "")
+  set(${_leftvar}  "")
+  set(${_rightvar} "")
+
+  set(_doing_right FALSE)
+  foreach(element ${ARGN})
+    if("${element}" STREQUAL "${_keyword}")
+      set(_doing_right TRUE)
+    else()
+      if(_doing_right)
+        list(APPEND ${_rightvar} "${element}")
+      else()
+        list(APPEND ${_leftvar} "${element}")
+      endif()
+    endif()
+  endforeach()
+
+  set(${_leftvar}  ${${_leftvar}}  PARENT_SCOPE)
+  set(${_rightvar} ${${_rightvar}} PARENT_SCOPE)
+endfunction()
+
+#
+# WX_GET_DEPENDENCIES_FROM_XML(
+#   <depends>
+#   <match_pattern>
+#   <clean_pattern>
+#   <xml_contents>
+#   <depends_path>
+#   )
+#
+# FIXME: Add documentation here...
+#
+function(WX_GET_DEPENDENCIES_FROM_XML
+    _depends
+    _match_patt
+    _clean_patt
+    _xml_contents
+    _depends_path
+    )
+
+  string(REGEX MATCHALL
+    ${_match_patt}
+    dep_file_list
+    "${${_xml_contents}}"
+    )
+  foreach(dep_file ${dep_file_list})
+    string(REGEX REPLACE ${_clean_patt} "" dep_file "${dep_file}")
+
+    # make the file have an absolute path
+    if(NOT IS_ABSOLUTE "${dep_file}")
+      set(dep_file "${${_depends_path}}/${dep_file}")
+    endif()
+
+    # append file to dependency list
+    list(APPEND ${_depends} "${dep_file}")
+  endforeach()
+
+  set(${_depends} ${${_depends}} PARENT_SCOPE)
+endfunction()
+
+#
+# WXWIDGETS_ADD_RESOURCES(<sources> <xrc_files>
+#                         OPTIONS <options> [NO_CPP_CODE])
+#
+# Adds a custom command for resource file compilation of the
+# <xrc_files> and appends the output files to <sources>.
+#
+# Example usages:
+#   WXWIDGETS_ADD_RESOURCES(sources xrc/main_frame.xrc)
+#   WXWIDGETS_ADD_RESOURCES(sources ${xrc_files} OPTIONS -e -o altname.cxx)
+#
+function(WXWIDGETS_ADD_RESOURCES _outfiles)
+  WX_SPLIT_ARGUMENTS_ON(OPTIONS rc_file_list rc_options ${ARGN})
+
+  # Parse files for dependencies.
+  set(rc_file_list_abs "")
+  set(rc_depends       "")
+  foreach(rc_file ${rc_file_list})
+    get_filename_component(depends_path ${rc_file} PATH)
+
+    get_filename_component(rc_file_abs ${rc_file} ABSOLUTE)
+    list(APPEND rc_file_list_abs "${rc_file_abs}")
+
+    # All files have absolute paths or paths relative to the location
+    # of the rc file.
+    file(READ "${rc_file_abs}" rc_file_contents)
+
+    # get bitmap/bitmap2 files
+    WX_GET_DEPENDENCIES_FROM_XML(
+      rc_depends
+      "<bitmap[^<]+"
+      "^<bitmap[^>]*>"
+      rc_file_contents
+      depends_path
+      )
+
+    # get url files
+    WX_GET_DEPENDENCIES_FROM_XML(
+      rc_depends
+      "<url[^<]+"
+      "^<url[^>]*>"
+      rc_file_contents
+      depends_path
+      )
+
+    # get wxIcon files
+    WX_GET_DEPENDENCIES_FROM_XML(
+      rc_depends
+      "<object[^>]*class=\"wxIcon\"[^<]+"
+      "^<object[^>]*>"
+      rc_file_contents
+      depends_path
+      )
+  endforeach()
+
+  #
+  # Parse options.
+  #
+  # If NO_CPP_CODE option specified, then produce .xrs file rather
+  # than a .cpp file (i.e., don't add the default --cpp-code option).
+  list(FIND rc_options NO_CPP_CODE index)
+  if(index EQUAL -1)
+    list(APPEND rc_options --cpp-code)
+    # wxrc's default output filename for cpp code.
+    set(outfile resource.cpp)
+  else()
+    list(REMOVE_AT rc_options ${index})
+    # wxrc's default output filename for xrs file.
+    set(outfile resource.xrs)
+  endif()
+
+  # Get output name for use in ADD_CUSTOM_COMMAND.
+  # - short option scanning
+  list(FIND rc_options -o index)
+  if(NOT index EQUAL -1)
+    math(EXPR filename_index "${index} + 1")
+    list(GET rc_options ${filename_index} outfile)
+    #list(REMOVE_AT rc_options ${index} ${filename_index})
+  endif()
+  # - long option scanning
+  string(REGEX MATCH "--output=[^;]*" outfile_opt "${rc_options}")
+  if(outfile_opt)
+    string(REPLACE "--output=" "" outfile "${outfile_opt}")
+  endif()
+  #string(REGEX REPLACE "--output=[^;]*;?" "" rc_options "${rc_options}")
+  #string(REGEX REPLACE ";$" "" rc_options "${rc_options}")
+
+  if(NOT IS_ABSOLUTE "${outfile}")
+    set(outfile "${CMAKE_CURRENT_BINARY_DIR}/${outfile}")
+  endif()
+  add_custom_command(
+    OUTPUT "${outfile}"
+    COMMAND ${wxWidgets_wxrc_EXECUTABLE} ${rc_options} ${rc_file_list_abs}
+    DEPENDS ${rc_file_list_abs} ${rc_depends}
+    )
+
+  # Add generated header to output file list.
+  list(FIND rc_options -e short_index)
+  list(FIND rc_options --extra-cpp-code long_index)
+  if(NOT short_index EQUAL -1 OR NOT long_index EQUAL -1)
+    get_filename_component(outfile_ext ${outfile} EXT)
+    string(REPLACE "${outfile_ext}" ".h" outfile_header "${outfile}")
+    list(APPEND ${_outfiles} "${outfile_header}")
+    set_source_files_properties(
+      "${outfile_header}" PROPERTIES GENERATED TRUE
+      )
+  endif()
+
+  # Add generated file to output file list.
+  list(APPEND ${_outfiles} "${outfile}")
+
+  set(${_outfiles} ${${_outfiles}} PARENT_SCOPE)
+endfunction()
diff --git a/share/cmake-3.22/Modules/FindwxWindows.cmake b/share/cmake-3.22/Modules/FindwxWindows.cmake
new file mode 100644
index 0000000..07fbc1b
--- /dev/null
+++ b/share/cmake-3.22/Modules/FindwxWindows.cmake
@@ -0,0 +1,730 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FindwxWindows
+-------------
+
+.. deprecated:: 3.0
+
+  Replaced by :module:`FindwxWidgets`.
+
+Find wxWindows (wxWidgets) installation
+
+This module finds if wxWindows/wxWidgets is installed and determines
+where the include files and libraries are.  It also determines what
+the name of the library is.  This code sets the following variables:
+
+::
+
+  WXWINDOWS_FOUND     = system has WxWindows
+  WXWINDOWS_LIBRARIES = path to the wxWindows libraries
+                        on Unix/Linux with additional
+                        linker flags from
+                        "wx-config --libs"
+  CMAKE_WXWINDOWS_CXX_FLAGS  = Compiler flags for wxWindows,
+                               essentially "`wx-config --cxxflags`"
+                               on Linux
+  WXWINDOWS_INCLUDE_DIR      = where to find "wx/wx.h" and "wx/setup.h"
+  WXWINDOWS_LINK_DIRECTORIES = link directories, useful for rpath on
+                                Unix
+  WXWINDOWS_DEFINITIONS      = extra defines
+
+
+
+OPTIONS If you need OpenGL support please
+
+::
+
+  set(WXWINDOWS_USE_GL 1)
+
+in your CMakeLists.txt *before* you include this file.
+
+::
+
+  HAVE_ISYSTEM      - true required to replace -I by -isystem on g++
+
+
+
+For convenience include Use_wxWindows.cmake in your project's
+CMakeLists.txt using
+include(${CMAKE_CURRENT_LIST_DIR}/Use_wxWindows.cmake).
+
+USAGE
+
+::
+
+  set(WXWINDOWS_USE_GL 1)
+  find_package(wxWindows)
+
+
+
+NOTES wxWidgets 2.6.x is supported for monolithic builds e.g.
+compiled in wx/build/msw dir as:
+
+::
+
+  nmake -f makefile.vc BUILD=debug SHARED=0 USE_OPENGL=1 MONOLITHIC=1
+
+
+
+DEPRECATED
+
+::
+
+  CMAKE_WX_CAN_COMPILE
+  WXWINDOWS_LIBRARY
+  CMAKE_WX_CXX_FLAGS
+  WXWINDOWS_INCLUDE_PATH
+
+
+
+AUTHOR Jan Woetzel <http://www.mip.informatik.uni-kiel.de/~jw>
+(07/2003-01/2006)
+#]=======================================================================]
+
+# ------------------------------------------------------------------
+#
+# -removed OPTION for CMAKE_WXWINDOWS_USE_GL. Force the developer to SET it before calling this.
+# -major update for wx 2.6.2 and monolithic build option. (10/2005)
+#
+# STATUS
+# tested with:
+#  cmake 1.6.7, Linux (Suse 7.3), wxWindows 2.4.0, gcc 2.95
+#  cmake 1.6.7, Linux (Suse 8.2), wxWindows 2.4.0, gcc 3.3
+#  cmake 1.6.7, Linux (Suse 8.2), wxWindows 2.4.1-patch1,  gcc 3.3
+#  cmake 1.6.7, MS Windows XP home, wxWindows 2.4.1, MS Visual Studio .net 7 2002 (static build)
+#  cmake 2.0.5 on Windows XP and Suse Linux 9.2
+#  cmake 2.0.6 on Windows XP and Suse Linux 9.2, wxWidgets 2.6.2 MONOLITHIC build
+#  cmake 2.2.2 on Windows XP, MS Visual Studio .net 2003 7.1 wxWidgets 2.6.2 MONOLITHIC build
+#
+# TODO
+#  -OPTION for unicode builds
+#  -further testing of DLL linking under MS WIN32
+#  -better support for non-monolithic builds
+#
+
+
+if(WIN32)
+  set(WIN32_STYLE_FIND 1)
+endif()
+if(MINGW)
+  set(WIN32_STYLE_FIND 0)
+  set(UNIX_STYLE_FIND 1)
+endif()
+if(UNIX)
+  set(UNIX_STYLE_FIND 1)
+endif()
+
+
+if(WIN32_STYLE_FIND)
+
+  ## ######################################################################
+  ##
+  ## Windows specific:
+  ##
+  ## candidates for root/base directory of wxwindows
+  ## should have subdirs include and lib containing include/wx/wx.h
+  ## fix the root dir to avoid mixing of headers/libs from different
+  ## versions/builds:
+
+  ## WX supports monolithic and multiple smaller libs (since 2.5.x), we prefer monolithic for now.
+  ## monolithic = WX is built as a single big library
+  ## e.g. compile on WIN32 as  "nmake -f makefile.vc MONOLITHIC=1 BUILD=debug SHARED=0 USE_OPENGL=1" (JW)
+  option(WXWINDOWS_USE_MONOLITHIC "Use monolithic build of WX??" ON)
+  mark_as_advanced(WXWINDOWS_USE_MONOLITHIC)
+
+  ## GL libs used?
+  option(WXWINDOWS_USE_GL "Use Wx with GL support(glcanvas)?" ON)
+  mark_as_advanced(WXWINDOWS_USE_GL)
+
+
+  ## avoid mixing of headers and libs between multiple installed WX versions,
+  ## select just one tree here:
+  find_path(WXWINDOWS_ROOT_DIR  include/wx/wx.h
+    HINTS
+      ENV WXWIN
+      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\wxWidgets_is1;Inno Setup: App Path]"  ## WX 2.6.x
+      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\wxWindows_is1;Inno Setup: App Path]"  ## WX 2.4.x
+    PATHS
+      C:/wxWidgets-2.6.2
+      D:/wxWidgets-2.6.2
+      C:/wxWidgets-2.6.1
+      D:/wxWidgets-2.6.1
+      C:/wxWindows-2.4.2
+      D:/wxWindows-2.4.2
+  )
+  # message("DBG found WXWINDOWS_ROOT_DIR: ${WXWINDOWS_ROOT_DIR}")
+
+
+  ## find libs for combination of static/shared with release/debug
+  ## be careful if you add something here,
+  ## avoid mixing of headers and libs of different wx versions,
+  ## there may be multiple WX versions installed.
+  set (WXWINDOWS_POSSIBLE_LIB_PATHS
+    "${WXWINDOWS_ROOT_DIR}/lib"
+    )
+
+  ## monolithic?
+  if (WXWINDOWS_USE_MONOLITHIC)
+
+    find_library(WXWINDOWS_STATIC_LIBRARY
+      NAMES wx wxmsw wxmsw26
+      PATHS
+      "${WXWINDOWS_ROOT_DIR}/lib/vc_lib"
+      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
+      DOC "wxWindows static release build library" )
+
+    find_library(WXWINDOWS_STATIC_DEBUG_LIBRARY
+      NAMES wxd wxmswd wxmsw26d
+      PATHS
+      "${WXWINDOWS_ROOT_DIR}/lib/vc_lib"
+      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
+      DOC "wxWindows static debug build library" )
+
+    find_library(WXWINDOWS_SHARED_LIBRARY
+      NAMES wxmsw26 wxmsw262 wxmsw24 wxmsw242 wxmsw241 wxmsw240 wx23_2 wx22_9
+      PATHS
+      "${WXWINDOWS_ROOT_DIR}/lib/vc_dll"
+      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
+      DOC "wxWindows shared release build library" )
+
+    find_library(WXWINDOWS_SHARED_DEBUG_LIBRARY
+      NAMES wxmsw26d wxmsw262d wxmsw24d wxmsw241d wxmsw240d wx23_2d wx22_9d
+      PATHS
+      "${WXWINDOWS_ROOT_DIR}/lib/vc_dll"
+      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
+      DOC "wxWindows shared debug build library " )
+
+
+    ##
+    ## required for WXWINDOWS_USE_GL
+    ## gl lib is always build separate:
+    ##
+    find_library(WXWINDOWS_STATIC_LIBRARY_GL
+      NAMES wx_gl wxmsw_gl wxmsw26_gl
+      PATHS
+      "${WXWINDOWS_ROOT_DIR}/lib/vc_lib"
+      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
+      DOC "wxWindows static release build GL library" )
+
+    find_library(WXWINDOWS_STATIC_DEBUG_LIBRARY_GL
+      NAMES wxd_gl wxmswd_gl wxmsw26d_gl
+      PATHS
+      "${WXWINDOWS_ROOT_DIR}/lib/vc_lib"
+      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
+      DOC "wxWindows static debug build GL library" )
+
+
+    find_library(WXWINDOWS_STATIC_DEBUG_LIBRARY_PNG
+      NAMES wxpngd
+      PATHS
+      "${WXWINDOWS_ROOT_DIR}/lib/vc_lib"
+      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
+      DOC "wxWindows static debug png library" )
+
+    find_library(WXWINDOWS_STATIC_LIBRARY_PNG
+      NAMES wxpng
+      PATHS
+      "${WXWINDOWS_ROOT_DIR}/lib/vc_lib"
+      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
+      DOC "wxWindows static png library" )
+
+    find_library(WXWINDOWS_STATIC_DEBUG_LIBRARY_TIFF
+      NAMES wxtiffd
+      PATHS
+      "${WXWINDOWS_ROOT_DIR}/lib/vc_lib"
+      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
+      DOC "wxWindows static debug tiff library" )
+
+    find_library(WXWINDOWS_STATIC_LIBRARY_TIFF
+      NAMES wxtiff
+      PATHS
+      "${WXWINDOWS_ROOT_DIR}/lib/vc_lib"
+      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
+      DOC "wxWindows static tiff library" )
+
+    find_library(WXWINDOWS_STATIC_DEBUG_LIBRARY_JPEG
+      NAMES wxjpegd  wxjpgd
+      PATHS
+      "${WXWINDOWS_ROOT_DIR}/lib/vc_lib"
+      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
+      DOC "wxWindows static debug jpeg library" )
+
+    find_library(WXWINDOWS_STATIC_LIBRARY_JPEG
+      NAMES wxjpeg wxjpg
+      PATHS
+      "${WXWINDOWS_ROOT_DIR}/lib/vc_lib"
+      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
+      DOC "wxWindows static jpeg library" )
+
+    find_library(WXWINDOWS_STATIC_DEBUG_LIBRARY_ZLIB
+      NAMES wxzlibd
+      PATHS
+      "${WXWINDOWS_ROOT_DIR}/lib/vc_lib"
+      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
+      DOC "wxWindows static debug zlib library" )
+
+    find_library(WXWINDOWS_STATIC_LIBRARY_ZLIB
+      NAMES wxzlib
+      PATHS
+      "${WXWINDOWS_ROOT_DIR}/lib/vc_lib"
+      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
+      DOC "wxWindows static zib library" )
+
+    find_library(WXWINDOWS_STATIC_DEBUG_LIBRARY_REGEX
+      NAMES wxregexd
+      PATHS
+      "${WXWINDOWS_ROOT_DIR}/lib/vc_lib"
+      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
+      DOC "wxWindows static debug regex library" )
+
+    find_library(WXWINDOWS_STATIC_LIBRARY_REGEX
+      NAMES wxregex
+      PATHS
+      "${WXWINDOWS_ROOT_DIR}/lib/vc_lib"
+      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
+      DOC "wxWindows static regex library" )
+
+
+
+    ## untested:
+    find_library(WXWINDOWS_SHARED_LIBRARY_GL
+      NAMES wx_gl wxmsw_gl wxmsw26_gl
+      PATHS
+      "${WXWINDOWS_ROOT_DIR}/lib/vc_dll"
+      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
+      DOC "wxWindows shared release build GL library" )
+
+    find_library(WXWINDOWS_SHARED_DEBUG_LIBRARY_GL
+      NAMES wxd_gl wxmswd_gl wxmsw26d_gl
+      PATHS
+      "${WXWINDOWS_ROOT_DIR}/lib/vc_dll"
+      ${WXWINDOWS_POSSIBLE_LIB_PATHS}
+      DOC "wxWindows shared debug build GL library" )
+
+
+  else ()
+    ## WX is built as multiple small pieces libraries instead of monolithic
+
+    ## DEPRECATED (jw) replaced by more general WXWINDOWS_USE_MONOLITHIC ON/OFF
+    # option(WXWINDOWS_SEPARATE_LIBS_BUILD "Is wxWindows build with separate libs?" OFF)
+
+    ## HACK: This is very dirty.
+    ## because the libs of a particular version are explicitly listed
+    ## and NOT searched/verified.
+    ## TODO:  Really search for each lib, then decide for
+    ## monolithic x debug x shared x GL (=16 combinations) for at least 18 libs
+    ## -->  about 288 combinations
+    ## thus we need a different approach so solve this correctly ...
+
+    message(STATUS "Warning: You are trying to use wxWidgets without monolithic build (WXWINDOWS_SEPARATE_LIBS_BUILD). This is a HACK, libraries are not verified! (JW).")
+
+    set(WXWINDOWS_STATIC_LIBS ${WXWINDOWS_STATIC_LIBS}
+      wxbase26
+      wxbase26_net
+      wxbase26_odbc
+      wxbase26_xml
+      wxmsw26_adv
+      wxmsw26_core
+      wxmsw26_dbgrid
+      wxmsw26_gl
+      wxmsw26_html
+      wxmsw26_media
+      wxmsw26_qa
+      wxmsw26_xrc
+      wxexpat
+      wxjpeg
+      wxpng
+      wxregex
+      wxtiff
+      wxzlib
+      comctl32
+      rpcrt4
+      wsock32
+      )
+    ## HACK: feed in to optimized / debug libraries if both were FOUND.
+    set(WXWINDOWS_STATIC_DEBUG_LIBS ${WXWINDOWS_STATIC_DEBUG_LIBS}
+      wxbase26d
+      wxbase26d_net
+      wxbase26d_odbc
+      wxbase26d_xml
+      wxmsw26d_adv
+      wxmsw26d_core
+      wxmsw26d_dbgrid
+      wxmsw26d_gl
+      wxmsw26d_html
+      wxmsw26d_media
+      wxmsw26d_qa
+      wxmsw26d_xrc
+      wxexpatd
+      wxjpegd
+      wxpngd
+      wxregexd
+      wxtiffd
+      wxzlibd
+      comctl32
+      rpcrt4
+      wsock32
+      )
+  endif ()
+
+
+  ##
+  ## now we should have found all WX libs available on the system.
+  ## let the user decide which of the available onse to use.
+  ##
+
+  ## if there is at least one shared lib available
+  ## let user choose whether to use shared or static wxwindows libs
+  if(WXWINDOWS_SHARED_LIBRARY OR WXWINDOWS_SHARED_DEBUG_LIBRARY)
+    ## default value OFF because wxWindows MSVS default build is static
+    option(WXWINDOWS_USE_SHARED_LIBS
+      "Use shared versions (dll) of wxWindows libraries?" OFF)
+    mark_as_advanced(WXWINDOWS_USE_SHARED_LIBS)
+  endif()
+
+  ## add system libraries wxwindows always seems to depend on
+  set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
+    comctl32
+    rpcrt4
+    wsock32
+    )
+
+  if (NOT WXWINDOWS_USE_SHARED_LIBS)
+    set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
+      ##  these ones don't seem required, in particular  ctl3d32 is not necessary (Jan Woetzel 07/2003)
+      #   ctl3d32
+      debug ${WXWINDOWS_STATIC_DEBUG_LIBRARY_ZLIB}   optimized ${WXWINDOWS_STATIC_LIBRARY_ZLIB}
+      debug ${WXWINDOWS_STATIC_DEBUG_LIBRARY_REGEX}  optimized ${WXWINDOWS_STATIC_LIBRARY_REGEX}
+      debug ${WXWINDOWS_STATIC_DEBUG_LIBRARY_PNG}    optimized ${WXWINDOWS_STATIC_LIBRARY_PNG}
+      debug ${WXWINDOWS_STATIC_DEBUG_LIBRARY_JPEG}   optimized ${WXWINDOWS_STATIC_LIBRARY_JPEG}
+      debug ${WXWINDOWS_STATIC_DEBUG_LIBRARY_TIFF}   optimized ${WXWINDOWS_STATIC_LIBRARY_TIFF}
+      )
+  endif ()
+
+  ## opengl/glu: TODO/FIXME: better use FindOpenGL.cmake here
+  ## assume release versions of glu an dopengl, here.
+  if (WXWINDOWS_USE_GL)
+    set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
+      opengl32
+      glu32 )
+  endif ()
+
+  ##
+  ## select between use of  shared or static wxWindows lib then set libs to use
+  ## for debug and optimized build.  so the user can switch between debug and
+  ## release build e.g. within MS Visual Studio without running cmake with a
+  ## different build directory again.
+  ##
+  ## then add the build specific include dir for wx/setup.h
+  ##
+
+  if(WXWINDOWS_USE_SHARED_LIBS)
+    ##message("DBG wxWindows use shared lib selected.")
+    ## assume that both builds use the same setup(.h) for simplicity
+
+    ## shared: both wx (debug and release) found?
+    ## assume that both builds use the same setup(.h) for simplicity
+    if(WXWINDOWS_SHARED_DEBUG_LIBRARY AND WXWINDOWS_SHARED_LIBRARY)
+      ##message("DBG wx shared: debug and optimized found.")
+      find_path(WXWINDOWS_INCLUDE_DIR_SETUPH  wx/setup.h
+        ${WXWINDOWS_ROOT_DIR}/lib/mswdlld
+        ${WXWINDOWS_ROOT_DIR}/lib/mswdll
+        ${WXWINDOWS_ROOT_DIR}/lib/vc_dll/mswd
+        ${WXWINDOWS_ROOT_DIR}/lib/vc_dll/msw )
+      set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
+        debug     ${WXWINDOWS_SHARED_DEBUG_LIBRARY}
+        optimized ${WXWINDOWS_SHARED_LIBRARY} )
+      if (WXWINDOWS_USE_GL)
+        set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
+          debug     ${WXWINDOWS_SHARED_DEBUG_LIBRARY_GL}
+          optimized ${WXWINDOWS_SHARED_LIBRARY_GL} )
+      endif ()
+    endif()
+
+    ## shared: only debug wx lib found?
+    if(WXWINDOWS_SHARED_DEBUG_LIBRARY)
+      if(NOT WXWINDOWS_SHARED_LIBRARY)
+        ##message("DBG wx shared: debug (but no optimized) found.")
+        find_path(WXWINDOWS_INCLUDE_DIR_SETUPH  wx/setup.h
+          ${WXWINDOWS_ROOT_DIR}/lib/mswdlld
+          ${WXWINDOWS_ROOT_DIR}/lib/vc_dll/mswd  )
+        set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
+          ${WXWINDOWS_SHARED_DEBUG_LIBRARY} )
+        if (WXWINDOWS_USE_GL)
+          set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
+            ${WXWINDOWS_SHARED_DEBUG_LIBRARY_GL} )
+        endif ()
+      endif()
+    endif()
+
+    ## shared: only release wx lib found?
+    if(NOT WXWINDOWS_SHARED_DEBUG_LIBRARY)
+      if(WXWINDOWS_SHARED_LIBRARY)
+        ##message("DBG wx shared: optimized (but no debug) found.")
+        find_path(WXWINDOWS_INCLUDE_DIR_SETUPH  wx/setup.h
+          ${WXWINDOWS_ROOT_DIR}/lib/mswdll
+          ${WXWINDOWS_ROOT_DIR}/lib/vc_dll/msw  )
+        set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
+          ${WXWINDOWS_SHARED_DEBUG_LIBRARY} )
+        if (WXWINDOWS_USE_GL)
+          set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
+            ${WXWINDOWS_SHARED_DEBUG_LIBRARY_GL} )
+        endif ()
+      endif()
+    endif()
+
+    ## shared: none found?
+    if(NOT WXWINDOWS_SHARED_DEBUG_LIBRARY)
+      if(NOT WXWINDOWS_SHARED_LIBRARY)
+        message(STATUS
+          "No shared wxWindows lib found, but WXWINDOWS_USE_SHARED_LIBS=${WXWINDOWS_USE_SHARED_LIBS}.")
+      endif()
+    endif()
+
+    #########################################################################################
+  else()
+
+    ##jw: DEPRECATED if(NOT WXWINDOWS_SEPARATE_LIBS_BUILD)
+
+    ## static: both wx (debug and release) found?
+    ## assume that both builds use the same setup(.h) for simplicity
+    if(WXWINDOWS_STATIC_DEBUG_LIBRARY AND WXWINDOWS_STATIC_LIBRARY)
+      ##message("DBG wx static: debug and optimized found.")
+      find_path(WXWINDOWS_INCLUDE_DIR_SETUPH  wx/setup.h
+        ${WXWINDOWS_ROOT_DIR}/lib/mswd
+        ${WXWINDOWS_ROOT_DIR}/lib/msw
+        ${WXWINDOWS_ROOT_DIR}/lib/vc_lib/mswd
+        ${WXWINDOWS_ROOT_DIR}/lib/vc_lib/msw )
+      set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
+        debug     ${WXWINDOWS_STATIC_DEBUG_LIBRARY}
+        optimized ${WXWINDOWS_STATIC_LIBRARY} )
+      if (WXWINDOWS_USE_GL)
+        set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
+          debug     ${WXWINDOWS_STATIC_DEBUG_LIBRARY_GL}
+          optimized ${WXWINDOWS_STATIC_LIBRARY_GL} )
+      endif ()
+    endif()
+
+    ## static: only debug wx lib found?
+    if(WXWINDOWS_STATIC_DEBUG_LIBRARY)
+      if(NOT WXWINDOWS_STATIC_LIBRARY)
+        ##message("DBG wx static: debug (but no optimized) found.")
+        find_path(WXWINDOWS_INCLUDE_DIR_SETUPH  wx/setup.h
+          ${WXWINDOWS_ROOT_DIR}/lib/mswd
+          ${WXWINDOWS_ROOT_DIR}/lib/vc_lib/mswd  )
+        set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
+          ${WXWINDOWS_STATIC_DEBUG_LIBRARY} )
+        if (WXWINDOWS_USE_GL)
+          set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
+            ${WXWINDOWS_STATIC_DEBUG_LIBRARY_GL} )
+        endif ()
+      endif()
+    endif()
+
+    ## static: only release wx lib found?
+    if(NOT WXWINDOWS_STATIC_DEBUG_LIBRARY)
+      if(WXWINDOWS_STATIC_LIBRARY)
+        ##message("DBG wx static: optimized (but no debug) found.")
+        find_path(WXWINDOWS_INCLUDE_DIR_SETUPH  wx/setup.h
+          ${WXWINDOWS_ROOT_DIR}/lib/msw
+          ${WXWINDOWS_ROOT_DIR}/lib/vc_lib/msw )
+        set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
+          ${WXWINDOWS_STATIC_LIBRARY} )
+        if (WXWINDOWS_USE_GL)
+          set(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES}
+            ${WXWINDOWS_STATIC_LIBRARY_GL} )
+        endif ()
+      endif()
+    endif()
+
+    ## static: none found?
+    if(NOT WXWINDOWS_STATIC_DEBUG_LIBRARY AND NOT WXWINDOWS_SEPARATE_LIBS_BUILD)
+      if(NOT WXWINDOWS_STATIC_LIBRARY)
+        message(STATUS
+          "No static wxWindows lib found, but WXWINDOWS_USE_SHARED_LIBS=${WXWINDOWS_USE_SHARED_LIBS}.")
+      endif()
+    endif()
+  endif()
+
+
+  ## not necessary in wxWindows 2.4.1 and 2.6.2
+  ## but it may fix a previous bug, see
+  ## http://lists.wxwindows.org/cgi-bin/ezmlm-cgi?8:mss:37574:200305:mpdioeneabobmgjenoap
+  option(WXWINDOWS_SET_DEFINITIONS "Set additional defines for wxWindows" OFF)
+  mark_as_advanced(WXWINDOWS_SET_DEFINITIONS)
+  if (WXWINDOWS_SET_DEFINITIONS)
+    set(WXWINDOWS_DEFINITIONS "-DWINVER=0x400")
+  else ()
+    # clear:
+    set(WXWINDOWS_DEFINITIONS "")
+  endif ()
+
+
+
+  ## Find the include directories for wxwindows
+  ## the first, build specific for wx/setup.h was determined before.
+  ## add inc dir for general for "wx/wx.h"
+  find_path(WXWINDOWS_INCLUDE_DIR  wx/wx.h
+    "${WXWINDOWS_ROOT_DIR}/include" )
+  ## append the build specific include dir for wx/setup.h:
+  if (WXWINDOWS_INCLUDE_DIR_SETUPH)
+    set(WXWINDOWS_INCLUDE_DIR ${WXWINDOWS_INCLUDE_DIR} ${WXWINDOWS_INCLUDE_DIR_SETUPH} )
+  endif ()
+
+
+
+  mark_as_advanced(
+    WXWINDOWS_ROOT_DIR
+    WXWINDOWS_INCLUDE_DIR
+    WXWINDOWS_INCLUDE_DIR_SETUPH
+    WXWINDOWS_STATIC_LIBRARY
+    WXWINDOWS_STATIC_LIBRARY_GL
+    WXWINDOWS_STATIC_DEBUG_LIBRARY
+    WXWINDOWS_STATIC_DEBUG_LIBRARY_GL
+    WXWINDOWS_STATIC_LIBRARY_ZLIB
+    WXWINDOWS_STATIC_DEBUG_LIBRARY_ZLIB
+    WXWINDOWS_STATIC_LIBRARY_REGEX
+    WXWINDOWS_STATIC_DEBUG_LIBRARY_REGEX
+    WXWINDOWS_STATIC_LIBRARY_PNG
+    WXWINDOWS_STATIC_DEBUG_LIBRARY_PNG
+    WXWINDOWS_STATIC_LIBRARY_JPEG
+    WXWINDOWS_STATIC_DEBUG_LIBRARY_JPEG
+    WXWINDOWS_STATIC_DEBUG_LIBRARY_TIFF
+    WXWINDOWS_STATIC_LIBRARY_TIFF
+    WXWINDOWS_SHARED_LIBRARY
+    WXWINDOWS_SHARED_DEBUG_LIBRARY
+    WXWINDOWS_SHARED_LIBRARY_GL
+    WXWINDOWS_SHARED_DEBUG_LIBRARY_GL
+    )
+
+
+else()
+
+  if (UNIX_STYLE_FIND)
+    ## ######################################################################
+    ##
+    ## UNIX/Linux specific:
+    ##
+    ## use backquoted wx-config to query and set flags and libs:
+    ## 06/2003 Jan Woetzel
+    ##
+
+    option(WXWINDOWS_USE_SHARED_LIBS "Use shared versions (.so) of wxWindows libraries" ON)
+    mark_as_advanced(WXWINDOWS_USE_SHARED_LIBS)
+
+    # JW removed option and force the develper th SET it.
+    # option(WXWINDOWS_USE_GL "use wxWindows with GL support (use additional
+    # --gl-libs for wx-config)?" OFF)
+
+    # wx-config should be in your path anyhow, usually no need to set WXWIN or
+    # search in ../wx or ../../wx
+    find_program(CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE
+      NAMES $ENV{WX_CONFIG} wx-config
+      HINTS
+        ENV WXWIN
+        $ENV{WXWIN}/bin
+      PATHS
+      ../wx/bin
+      ../../wx/bin )
+
+    # check whether wx-config was found:
+    if(CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE)
+
+      # use shared/static wx lib?
+      # remember: always link shared to use systems GL etc. libs (no static
+      # linking, just link *against* static .a libs)
+      if(WXWINDOWS_USE_SHARED_LIBS)
+        set(WX_CONFIG_ARGS_LIBS "--libs")
+      else()
+        set(WX_CONFIG_ARGS_LIBS "--static --libs")
+      endif()
+
+      # do we need additionial wx GL stuff like GLCanvas ?
+      if(WXWINDOWS_USE_GL)
+        string(APPEND WX_CONFIG_ARGS_LIBS " --gl-libs" )
+      endif()
+      ##message("DBG: WX_CONFIG_ARGS_LIBS=${WX_CONFIG_ARGS_LIBS}===")
+
+      # set CXXFLAGS to be fed into CMAKE_CXX_FLAGS by the user:
+      if (HAVE_ISYSTEM) # does the compiler support -isystem ?
+              if (NOT APPLE) # -isystem seem sto be unsuppored on Mac
+                if(CMAKE_COMPILER_IS_GNUCC AND CMAKE_COMPILER_IS_GNUCXX )
+            if (CMAKE_CXX_COMPILER MATCHES g\\+\\+)
+              set(CMAKE_WXWINDOWS_CXX_FLAGS "`${CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE} --cxxflags|sed -e s/-I/-isystem/g`")
+            else()
+              set(CMAKE_WXWINDOWS_CXX_FLAGS "`${CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE} --cxxflags`")
+            endif()
+                endif()
+              endif ()
+      endif ()
+      ##message("DBG: for compilation:
+      ##CMAKE_WXWINDOWS_CXX_FLAGS=${CMAKE_WXWINDOWS_CXX_FLAGS}===")
+
+      # keep the back-quoted string for clarity
+      set(WXWINDOWS_LIBRARIES "`${CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE} ${WX_CONFIG_ARGS_LIBS}`")
+      ##message("DBG2: for linking:
+      ##WXWINDOWS_LIBRARIES=${WXWINDOWS_LIBRARIES}===")
+
+      # evaluate wx-config output to separate linker flags and linkdirs for
+      # rpath:
+      exec_program(${CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE}
+        ARGS ${WX_CONFIG_ARGS_LIBS}
+        OUTPUT_VARIABLE WX_CONFIG_LIBS )
+
+      ## extract linkdirs (-L) for rpath
+      ## use regular expression to match wildcard equivalent "-L*<endchar>"
+      ## with <endchar> is a space or a semicolon
+      string(REGEX MATCHALL "[-][L]([^ ;])+" WXWINDOWS_LINK_DIRECTORIES_WITH_PREFIX "${WX_CONFIG_LIBS}" )
+      # message("DBG  WXWINDOWS_LINK_DIRECTORIES_WITH_PREFIX=${WXWINDOWS_LINK_DIRECTORIES_WITH_PREFIX}")
+
+      ## remove prefix -L because we need the pure directory for LINK_DIRECTORIES
+      ## replace -L by ; because the separator seems to be lost otherwise (bug or
+      ## feature?)
+      if(WXWINDOWS_LINK_DIRECTORIES_WITH_PREFIX)
+        string(REGEX REPLACE "[-][L]" ";" WXWINDOWS_LINK_DIRECTORIES ${WXWINDOWS_LINK_DIRECTORIES_WITH_PREFIX} )
+        # message("DBG  WXWINDOWS_LINK_DIRECTORIES=${WXWINDOWS_LINK_DIRECTORIES}")
+      endif()
+
+
+      ## replace space separated string by semicolon separated vector to make it
+      ## work with LINK_DIRECTORIES
+      separate_arguments(WXWINDOWS_LINK_DIRECTORIES)
+
+      mark_as_advanced(
+        CMAKE_WXWINDOWS_CXX_FLAGS
+        WXWINDOWS_INCLUDE_DIR
+        WXWINDOWS_LIBRARIES
+        CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE
+        )
+
+
+      ## we really need wx-config...
+    else()
+      message(STATUS "Cannot find wx-config anywhere on the system. Please put the file into your path or specify it in CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE.")
+      mark_as_advanced(CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE)
+    endif()
+
+
+
+  else()
+    message(STATUS "FindwxWindows.cmake:  Platform unknown/unsupported by FindwxWindows.cmake. It's neither WIN32 nor UNIX")
+  endif()
+endif()
+
+
+if(WXWINDOWS_LIBRARIES)
+  if(WXWINDOWS_INCLUDE_DIR OR CMAKE_WXWINDOWS_CXX_FLAGS)
+    ## found all we need.
+    set(WXWINDOWS_FOUND 1)
+
+    ## set deprecated variables for backward compatibility:
+    set(CMAKE_WX_CAN_COMPILE   ${WXWINDOWS_FOUND})
+    set(WXWINDOWS_LIBRARY     ${WXWINDOWS_LIBRARIES})
+    set(WXWINDOWS_INCLUDE_PATH ${WXWINDOWS_INCLUDE_DIR})
+    set(WXWINDOWS_LINK_DIRECTORIES ${WXWINDOWS_LINK_DIRECTORIES})
+    set(CMAKE_WX_CXX_FLAGS     ${CMAKE_WXWINDOWS_CXX_FLAGS})
+
+  endif()
+endif()
diff --git a/share/cmake-3.22/Modules/FortranCInterface.cmake b/share/cmake-3.22/Modules/FortranCInterface.cmake
new file mode 100644
index 0000000..733c723
--- /dev/null
+++ b/share/cmake-3.22/Modules/FortranCInterface.cmake
@@ -0,0 +1,400 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+FortranCInterface
+-----------------
+
+Fortran/C Interface Detection
+
+This module automatically detects the API by which C and Fortran
+languages interact.
+
+Module Variables
+^^^^^^^^^^^^^^^^
+
+Variables that indicate if the mangling is found:
+
+``FortranCInterface_GLOBAL_FOUND``
+  Global subroutines and functions.
+
+``FortranCInterface_MODULE_FOUND``
+  Module subroutines and functions (declared by "MODULE PROCEDURE").
+
+This module also provides the following variables to specify
+the detected mangling, though a typical use case does not need
+to reference them and can use the `Module Functions`_ below.
+
+``FortranCInterface_GLOBAL_PREFIX``
+  Prefix for a global symbol without an underscore.
+
+``FortranCInterface_GLOBAL_SUFFIX``
+  Suffix for a global symbol without an underscore.
+
+``FortranCInterface_GLOBAL_CASE``
+  The case for a global symbol without an underscore,
+  either ``UPPER`` or ``LOWER``.
+
+``FortranCInterface_GLOBAL__PREFIX``
+  Prefix for a global symbol with an underscore.
+
+``FortranCInterface_GLOBAL__SUFFIX``
+  Suffix for a global symbol with an underscore.
+
+``FortranCInterface_GLOBAL__CASE``
+  The case for a global symbol with an underscore,
+  either ``UPPER`` or ``LOWER``.
+
+``FortranCInterface_MODULE_PREFIX``
+  Prefix for a module symbol without an underscore.
+
+``FortranCInterface_MODULE_MIDDLE``
+  Middle of a module symbol without an underscore that appears
+  between the name of the module and the name of the symbol.
+
+``FortranCInterface_MODULE_SUFFIX``
+  Suffix for a module symbol without an underscore.
+
+``FortranCInterface_MODULE_CASE``
+  The case for a module symbol without an underscore,
+  either ``UPPER`` or ``LOWER``.
+
+``FortranCInterface_MODULE__PREFIX``
+  Prefix for a module symbol with an underscore.
+
+``FortranCInterface_MODULE__MIDDLE``
+  Middle of a module symbol with an underscore that appears
+  between the name of the module and the name of the symbol.
+
+``FortranCInterface_MODULE__SUFFIX``
+  Suffix for a module symbol with an underscore.
+
+``FortranCInterface_MODULE__CASE``
+  The case for a module symbol with an underscore,
+  either ``UPPER`` or ``LOWER``.
+
+Module Functions
+^^^^^^^^^^^^^^^^
+
+.. command:: FortranCInterface_HEADER
+
+  The ``FortranCInterface_HEADER`` function is provided to generate a
+  C header file containing macros to mangle symbol names::
+
+    FortranCInterface_HEADER(<file>
+                             [MACRO_NAMESPACE <macro-ns>]
+                             [SYMBOL_NAMESPACE <ns>]
+                             [SYMBOLS [<module>:]<function> ...])
+
+  It generates in ``<file>`` definitions of the following macros::
+
+     #define FortranCInterface_GLOBAL (name,NAME) ...
+     #define FortranCInterface_GLOBAL_(name,NAME) ...
+     #define FortranCInterface_MODULE (mod,name, MOD,NAME) ...
+     #define FortranCInterface_MODULE_(mod,name, MOD,NAME) ...
+
+  These macros mangle four categories of Fortran symbols, respectively:
+
+  * Global symbols without '_': ``call mysub()``
+  * Global symbols with '_'   : ``call my_sub()``
+  * Module symbols without '_': ``use mymod; call mysub()``
+  * Module symbols with '_'   : ``use mymod; call my_sub()``
+
+  If mangling for a category is not known, its macro is left undefined.
+  All macros require raw names in both lower case and upper case.
+
+  The options are:
+
+  ``MACRO_NAMESPACE``
+    Replace the default ``FortranCInterface_`` prefix with a given
+    namespace ``<macro-ns>``.
+
+  ``SYMBOLS``
+    List symbols to mangle automatically with C preprocessor definitions::
+
+      <function>          ==> #define <ns><function> ...
+      <module>:<function> ==> #define <ns><module>_<function> ...
+
+    If the mangling for some symbol is not known then no preprocessor
+    definition is created, and a warning is displayed.
+
+  ``SYMBOL_NAMESPACE``
+    Prefix all preprocessor definitions generated by the ``SYMBOLS``
+    option with a given namespace ``<ns>``.
+
+.. command:: FortranCInterface_VERIFY
+
+  The ``FortranCInterface_VERIFY`` function is provided to verify
+  that the Fortran and C/C++ compilers work together::
+
+    FortranCInterface_VERIFY([CXX] [QUIET])
+
+  It tests whether a simple test executable using Fortran and C (and C++
+  when the CXX option is given) compiles and links successfully.  The
+  result is stored in the cache entry ``FortranCInterface_VERIFIED_C``
+  (or ``FortranCInterface_VERIFIED_CXX`` if ``CXX`` is given) as a boolean.
+  If the check fails and ``QUIET`` is not given the function terminates with a
+  fatal error message describing the problem.  The purpose of this check
+  is to stop a build early for incompatible compiler combinations.  The
+  test is built in the ``Release`` configuration.
+
+Example Usage
+^^^^^^^^^^^^^
+
+.. code-block:: cmake
+
+   include(FortranCInterface)
+   FortranCInterface_HEADER(FC.h MACRO_NAMESPACE "FC_")
+
+This creates a "FC.h" header that defines mangling macros ``FC_GLOBAL()``,
+``FC_GLOBAL_()``, ``FC_MODULE()``, and ``FC_MODULE_()``.
+
+.. code-block:: cmake
+
+   include(FortranCInterface)
+   FortranCInterface_HEADER(FCMangle.h
+                            MACRO_NAMESPACE "FC_"
+                            SYMBOL_NAMESPACE "FC_"
+                            SYMBOLS mysub mymod:my_sub)
+
+This creates a "FCMangle.h" header that defines the same ``FC_*()``
+mangling macros as the previous example plus preprocessor symbols
+``FC_mysub`` and ``FC_mymod_my_sub``.
+
+Additional Manglings
+^^^^^^^^^^^^^^^^^^^^
+
+FortranCInterface is aware of possible ``GLOBAL`` and ``MODULE`` manglings
+for many Fortran compilers, but it also provides an interface to specify
+new possible manglings.  Set the variables::
+
+   FortranCInterface_GLOBAL_SYMBOLS
+   FortranCInterface_MODULE_SYMBOLS
+
+before including FortranCInterface to specify manglings of the symbols
+``MySub``, ``My_Sub``, ``MyModule:MySub``, and ``My_Module:My_Sub``.
+For example, the code:
+
+.. code-block:: cmake
+
+   set(FortranCInterface_GLOBAL_SYMBOLS mysub_ my_sub__ MYSUB_)
+     #                                  ^^^^^  ^^^^^^   ^^^^^
+   set(FortranCInterface_MODULE_SYMBOLS
+       __mymodule_MOD_mysub __my_module_MOD_my_sub)
+     #   ^^^^^^^^     ^^^^^   ^^^^^^^^^     ^^^^^^
+   include(FortranCInterface)
+
+tells FortranCInterface to try given ``GLOBAL`` and ``MODULE`` manglings.
+(The carets point at raw symbol names for clarity in this example but
+are not needed.)
+#]=======================================================================]
+
+#-----------------------------------------------------------------------------
+# Execute at most once in a project.
+if(FortranCInterface_SOURCE_DIR)
+  return()
+endif()
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0007 NEW)
+
+#-----------------------------------------------------------------------------
+# Verify that C and Fortran are available.
+foreach(lang C Fortran)
+  if(NOT CMAKE_${lang}_COMPILER_LOADED)
+    message(FATAL_ERROR
+      "FortranCInterface requires the ${lang} language to be enabled.")
+  endif()
+endforeach()
+
+#-----------------------------------------------------------------------------
+set(FortranCInterface_SOURCE_DIR ${CMAKE_ROOT}/Modules/FortranCInterface)
+
+# MinGW's make tool does not always like () in the path
+if("${CMAKE_GENERATOR}" MATCHES "MinGW" AND
+    "${FortranCInterface_SOURCE_DIR}" MATCHES "[()]")
+  file(COPY ${FortranCInterface_SOURCE_DIR}/
+    DESTINATION ${CMAKE_BINARY_DIR}/CMakeFiles/FortranCInterfaceMinGW)
+  set(FortranCInterface_SOURCE_DIR ${CMAKE_BINARY_DIR}/CMakeFiles/FortranCInterfaceMinGW)
+endif()
+
+# Create the interface detection project if it does not exist.
+if(NOT FortranCInterface_BINARY_DIR)
+  set(FortranCInterface_BINARY_DIR ${CMAKE_BINARY_DIR}/CMakeFiles/FortranCInterface)
+  include(${FortranCInterface_SOURCE_DIR}/Detect.cmake)
+endif()
+
+# Load the detection results.
+include(${FortranCInterface_BINARY_DIR}/Output.cmake)
+
+#-----------------------------------------------------------------------------
+function(FortranCInterface_HEADER file)
+  # Parse arguments.
+  if(IS_ABSOLUTE "${file}")
+    set(FILE "${file}")
+  else()
+    set(FILE "${CMAKE_CURRENT_BINARY_DIR}/${file}")
+  endif()
+  set(MACRO_NAMESPACE "FortranCInterface_")
+  set(SYMBOL_NAMESPACE)
+  set(SYMBOLS)
+  set(doing)
+  foreach(arg ${ARGN})
+    if("x${arg}" MATCHES "^x(SYMBOLS|SYMBOL_NAMESPACE|MACRO_NAMESPACE)$")
+      set(doing "${arg}")
+    elseif("x${doing}" MATCHES "^x(SYMBOLS)$")
+      list(APPEND "${doing}" "${arg}")
+    elseif("x${doing}" MATCHES "^x(SYMBOL_NAMESPACE|MACRO_NAMESPACE)$")
+      set("${doing}" "${arg}")
+      set(doing)
+    else()
+      message(AUTHOR_WARNING "Unknown argument: \"${arg}\"")
+    endif()
+  endforeach()
+
+  # Generate macro definitions.
+  set(HEADER_CONTENT)
+  set(_desc_GLOBAL  "/* Mangling for Fortran global symbols without underscores. */")
+  set(_desc_GLOBAL_ "/* Mangling for Fortran global symbols with underscores. */")
+  set(_desc_MODULE  "/* Mangling for Fortran module symbols without underscores. */")
+  set(_desc_MODULE_ "/* Mangling for Fortran module symbols with underscores. */")
+  foreach(macro GLOBAL GLOBAL_ MODULE MODULE_)
+    if(FortranCInterface_${macro}_MACRO)
+      string(APPEND HEADER_CONTENT "
+${_desc_${macro}}
+#define ${MACRO_NAMESPACE}${macro}${FortranCInterface_${macro}_MACRO}
+")
+    endif()
+  endforeach()
+
+  # Generate symbol mangling definitions.
+  if(SYMBOLS)
+    string(APPEND HEADER_CONTENT "
+/*--------------------------------------------------------------------------*/
+/* Mangle some symbols automatically.                                       */
+")
+  endif()
+  foreach(f ${SYMBOLS})
+    if("${f}" MATCHES ":")
+      # Module symbol name.  Parse "<module>:<function>" syntax.
+      string(REPLACE ":" ";" pieces "${f}")
+      list(GET pieces 0 module)
+      list(GET pieces 1 function)
+      string(TOUPPER "${module}" m_upper)
+      string(TOLOWER "${module}" m_lower)
+      string(TOUPPER "${function}" f_upper)
+      string(TOLOWER "${function}" f_lower)
+      if("${function}" MATCHES "_")
+        set(form "_")
+      else()
+        set(form "")
+      endif()
+      if(FortranCInterface_MODULE${form}_MACRO)
+        string(APPEND HEADER_CONTENT "#define ${SYMBOL_NAMESPACE}${module}_${function} ${MACRO_NAMESPACE}MODULE${form}(${m_lower},${f_lower}, ${m_upper},${f_upper})\n")
+      else()
+        message(AUTHOR_WARNING "No FortranCInterface mangling known for ${f}")
+      endif()
+    else()
+      # Global symbol name.
+      if("${f}" MATCHES "_")
+        set(form "_")
+      else()
+        set(form "")
+      endif()
+      string(TOUPPER "${f}" f_upper)
+      string(TOLOWER "${f}" f_lower)
+      if(FortranCInterface_GLOBAL${form}_MACRO)
+        string(APPEND HEADER_CONTENT "#define ${SYMBOL_NAMESPACE}${f} ${MACRO_NAMESPACE}GLOBAL${form}(${f_lower}, ${f_upper})\n")
+      else()
+        message(AUTHOR_WARNING "No FortranCInterface mangling known for ${f}")
+      endif()
+    endif()
+  endforeach()
+
+  # Store the content.
+  configure_file(${FortranCInterface_SOURCE_DIR}/Macro.h.in ${FILE} @ONLY)
+endfunction()
+
+function(FortranCInterface_VERIFY)
+  # Check arguments.
+
+  set(lang C)
+  set(quiet 0)
+  set(verify_cxx 0)
+  foreach(arg ${ARGN})
+    if("${arg}" STREQUAL "QUIET")
+      set(quiet 1)
+    elseif("${arg}" STREQUAL "CXX")
+      set(lang CXX)
+      set(verify_cxx 1)
+    else()
+      message(FATAL_ERROR
+        "FortranCInterface_VERIFY - called with unknown argument:\n  ${arg}")
+    endif()
+  endforeach()
+
+  if(NOT CMAKE_${lang}_COMPILER_LOADED)
+    message(FATAL_ERROR
+      "FortranCInterface_VERIFY(${lang}) requires ${lang} to be enabled.")
+  endif()
+
+  # Build the verification project if not yet built.
+  if(NOT DEFINED FortranCInterface_VERIFIED_${lang})
+    set(_desc "Verifying Fortran/${lang} Compiler Compatibility")
+    message(CHECK_START "${_desc}")
+
+    cmake_policy(GET CMP0056 _FortranCInterface_CMP0056)
+    if(_FortranCInterface_CMP0056 STREQUAL "NEW")
+      set(_FortranCInterface_EXE_LINKER_FLAGS "-DCMAKE_EXE_LINKER_FLAGS:STRING=${CMAKE_EXE_LINKER_FLAGS}")
+    else()
+      set(_FortranCInterface_EXE_LINKER_FLAGS "")
+    endif()
+
+    # Build a sample project which reports symbols.
+    set(CMAKE_TRY_COMPILE_CONFIGURATION Release)
+    try_compile(FortranCInterface_VERIFY_${lang}_COMPILED
+      ${FortranCInterface_BINARY_DIR}/Verify${lang}
+      ${FortranCInterface_SOURCE_DIR}/Verify
+      VerifyFortranC # project name
+      VerifyFortranC # target name
+      CMAKE_FLAGS -DVERIFY_CXX=${verify_cxx}
+                  -DCMAKE_VERBOSE_MAKEFILE=ON
+                 "-DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS}"
+                 "-DCMAKE_CXX_FLAGS:STRING=${CMAKE_CXX_FLAGS}"
+                 "-DCMAKE_Fortran_FLAGS:STRING=${CMAKE_Fortran_FLAGS}"
+                 "-DCMAKE_C_FLAGS_RELEASE:STRING=${CMAKE_C_FLAGS_RELEASE}"
+                 "-DCMAKE_CXX_FLAGS_RELEASE:STRING=${CMAKE_CXX_FLAGS_RELEASE}"
+                 "-DCMAKE_Fortran_FLAGS_RELEASE:STRING=${CMAKE_Fortran_FLAGS_RELEASE}"
+                 ${_FortranCInterface_EXE_LINKER_FLAGS}
+      OUTPUT_VARIABLE _output)
+    file(WRITE "${FortranCInterface_BINARY_DIR}/Verify${lang}/output.txt" "${_output}")
+
+    # Report results.
+    if(FortranCInterface_VERIFY_${lang}_COMPILED)
+      message(CHECK_PASS "Success")
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+        "${_desc} passed with the following output:\n${_output}\n\n")
+      set(FortranCInterface_VERIFIED_${lang} 1 CACHE INTERNAL "Fortran/${lang} compatibility")
+    else()
+      message(CHECK_FAIL "Failed")
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+        "${_desc} failed with the following output:\n${_output}\n\n")
+      set(FortranCInterface_VERIFIED_${lang} 0 CACHE INTERNAL "Fortran/${lang} compatibility")
+    endif()
+    unset(FortranCInterface_VERIFY_${lang}_COMPILED CACHE)
+  endif()
+
+  # Error if compilers are incompatible.
+  if(NOT FortranCInterface_VERIFIED_${lang} AND NOT quiet)
+    file(READ "${FortranCInterface_BINARY_DIR}/Verify${lang}/output.txt" _output)
+    string(REPLACE "\n" "\n  " _output "${_output}")
+    message(FATAL_ERROR
+      "The Fortran compiler:\n  ${CMAKE_Fortran_COMPILER}\n"
+      "and the ${lang} compiler:\n  ${CMAKE_${lang}_COMPILER}\n"
+      "failed to compile a simple test project using both languages.  "
+      "The output was:\n  ${_output}")
+  endif()
+endfunction()
+
+# Restore including context policies.
+cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/FortranCInterface/CMakeLists.txt b/share/cmake-3.22/Modules/FortranCInterface/CMakeLists.txt
similarity index 100%
rename from share/cmake-3.18/Modules/FortranCInterface/CMakeLists.txt
rename to share/cmake-3.22/Modules/FortranCInterface/CMakeLists.txt
diff --git a/share/cmake-3.22/Modules/FortranCInterface/Detect.cmake b/share/cmake-3.22/Modules/FortranCInterface/Detect.cmake
new file mode 100644
index 0000000..4d3cb00
--- /dev/null
+++ b/share/cmake-3.22/Modules/FortranCInterface/Detect.cmake
@@ -0,0 +1,186 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+configure_file(${FortranCInterface_SOURCE_DIR}/Input.cmake.in
+               ${FortranCInterface_BINARY_DIR}/Input.cmake @ONLY)
+
+# Detect the Fortran/C interface on the first run or when the
+# configuration changes.
+if(NOT EXISTS ${FortranCInterface_BINARY_DIR}/Output.cmake
+    OR NOT EXISTS ${FortranCInterface_BINARY_DIR}/Input.cmake
+    OR NOT ${FortranCInterface_BINARY_DIR}/Output.cmake
+      IS_NEWER_THAN ${FortranCInterface_BINARY_DIR}/Input.cmake
+    OR NOT ${FortranCInterface_SOURCE_DIR}/Output.cmake
+      IS_NEWER_THAN ${FortranCInterface_SOURCE_DIR}/Output.cmake.in
+    OR NOT ${FortranCInterface_BINARY_DIR}/Output.cmake
+      IS_NEWER_THAN ${FortranCInterface_SOURCE_DIR}/CMakeLists.txt
+    OR NOT ${FortranCInterface_BINARY_DIR}/Output.cmake
+      IS_NEWER_THAN ${CMAKE_CURRENT_LIST_FILE}
+    )
+  message(CHECK_START "Detecting Fortran/C Interface")
+else()
+  return()
+endif()
+
+# Invalidate verification results.
+unset(FortranCInterface_VERIFIED_C CACHE)
+unset(FortranCInterface_VERIFIED_CXX CACHE)
+
+set(_result)
+
+cmake_policy(GET CMP0056 _FortranCInterface_CMP0056)
+if(_FortranCInterface_CMP0056 STREQUAL "NEW")
+  set(_FortranCInterface_EXE_LINKER_FLAGS "-DCMAKE_EXE_LINKER_FLAGS:STRING=${CMAKE_EXE_LINKER_FLAGS}")
+else()
+  set(_FortranCInterface_EXE_LINKER_FLAGS "")
+endif()
+unset(_FortranCInterface_CMP0056)
+
+# Build a sample project which reports symbols.
+set(CMAKE_TRY_COMPILE_CONFIGURATION Release)
+try_compile(FortranCInterface_COMPILED
+  ${FortranCInterface_BINARY_DIR}
+  ${FortranCInterface_SOURCE_DIR}
+  FortranCInterface # project name
+  FortranCInterface # target name
+  CMAKE_FLAGS
+    "-DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS}"
+    "-DCMAKE_Fortran_FLAGS:STRING=${CMAKE_Fortran_FLAGS}"
+    "-DCMAKE_C_FLAGS_RELEASE:STRING=${CMAKE_C_FLAGS_RELEASE}"
+    "-DCMAKE_Fortran_FLAGS_RELEASE:STRING=${CMAKE_Fortran_FLAGS_RELEASE}"
+    ${_FortranCInterface_EXE_LINKER_FLAGS}
+  OUTPUT_VARIABLE FortranCInterface_OUTPUT)
+set(FortranCInterface_COMPILED ${FortranCInterface_COMPILED})
+unset(FortranCInterface_COMPILED CACHE)
+unset(_FortranCInterface_EXE_LINKER_FLAGS)
+
+# Locate the sample project executable.
+set(FortranCInterface_EXE)
+if(FortranCInterface_COMPILED)
+  include(${FortranCInterface_BINARY_DIR}/exe-Release.cmake OPTIONAL)
+else()
+  set(_result "Failed to compile")
+  file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+    "Fortran/C interface test project failed with the following output:\n"
+    "${FortranCInterface_OUTPUT}\n")
+endif()
+
+# Load symbols from INFO:symbol[] strings in the executable.
+set(FortranCInterface_SYMBOLS)
+if(FortranCInterface_EXE)
+  file(STRINGS "${FortranCInterface_EXE}" _info_strings
+    LIMIT_COUNT 8 REGEX "INFO:[A-Za-z0-9_]+\\[[^]]*\\]")
+  foreach(info ${_info_strings})
+    if("${info}" MATCHES "INFO:symbol\\[([^]]*)\\]")
+      list(APPEND FortranCInterface_SYMBOLS ${CMAKE_MATCH_1})
+    endif()
+  endforeach()
+elseif(NOT _result)
+  set(_result "Failed to load sample executable")
+endif()
+
+set(_case_mysub "LOWER")
+set(_case_my_sub "LOWER")
+set(_case_MYSUB "UPPER")
+set(_case_MY_SUB "UPPER")
+set(_global_regex  "^(_*)(mysub|MYSUB)([_$]*)$")
+set(_global__regex "^(_*)(my_sub|MY_SUB)([_$]*)$")
+set(_module_regex  "^(_*)(mymodule|MYMODULE)([A-Za-z_$]*)(mysub|MYSUB)([_$]*)$")
+set(_module__regex "^(_*)(my_module|MY_MODULE)([A-Za-z_$]*)(my_sub|MY_SUB)([_$]*)$")
+
+# Parse the symbol names.
+foreach(symbol ${FortranCInterface_SYMBOLS})
+  foreach(form "" "_")
+    # Look for global symbols.
+    string(REGEX REPLACE "${_global_${form}regex}"
+                         "\\1;\\2;\\3" pieces "${symbol}")
+    list(LENGTH pieces len)
+    if(len EQUAL 3)
+      set(FortranCInterface_GLOBAL_${form}SYMBOL "${symbol}")
+      list(GET pieces 0 FortranCInterface_GLOBAL_${form}PREFIX)
+      list(GET pieces 1 name)
+      list(GET pieces 2 FortranCInterface_GLOBAL_${form}SUFFIX)
+      set(FortranCInterface_GLOBAL_${form}CASE "${_case_${name}}")
+    endif()
+
+    # Look for module symbols.
+    string(REGEX REPLACE "${_module_${form}regex}"
+                         "\\1;\\2;\\3;\\4;\\5" pieces "${symbol}")
+    list(LENGTH pieces len)
+    if(len EQUAL 5)
+      set(FortranCInterface_MODULE_${form}SYMBOL "${symbol}")
+      list(GET pieces 0 FortranCInterface_MODULE_${form}PREFIX)
+      list(GET pieces 1 module)
+      list(GET pieces 2 FortranCInterface_MODULE_${form}MIDDLE)
+      list(GET pieces 3 name)
+      list(GET pieces 4 FortranCInterface_MODULE_${form}SUFFIX)
+      set(FortranCInterface_MODULE_${form}CASE "${_case_${name}}")
+    endif()
+  endforeach()
+endforeach()
+
+# Construct mangling macro definitions.
+set(_name_LOWER "name")
+set(_name_UPPER "NAME")
+foreach(form "" "_")
+  if(FortranCInterface_GLOBAL_${form}SYMBOL)
+    if(FortranCInterface_GLOBAL_${form}PREFIX)
+      set(_prefix "${FortranCInterface_GLOBAL_${form}PREFIX}##")
+    else()
+      set(_prefix "")
+    endif()
+    if(FortranCInterface_GLOBAL_${form}SUFFIX)
+      set(_suffix "##${FortranCInterface_GLOBAL_${form}SUFFIX}")
+    else()
+      set(_suffix "")
+    endif()
+    set(_name "${_name_${FortranCInterface_GLOBAL_${form}CASE}}")
+    set(FortranCInterface_GLOBAL${form}_MACRO
+      "(name,NAME) ${_prefix}${_name}${_suffix}")
+  endif()
+  if(FortranCInterface_MODULE_${form}SYMBOL)
+    if(FortranCInterface_MODULE_${form}PREFIX)
+      set(_prefix "${FortranCInterface_MODULE_${form}PREFIX}##")
+    else()
+      set(_prefix "")
+    endif()
+    if(FortranCInterface_MODULE_${form}SUFFIX)
+      set(_suffix "##${FortranCInterface_MODULE_${form}SUFFIX}")
+    else()
+      set(_suffix "")
+    endif()
+    set(_name "${_name_${FortranCInterface_MODULE_${form}CASE}}")
+    set(_middle "##${FortranCInterface_MODULE_${form}MIDDLE}##")
+    set(FortranCInterface_MODULE${form}_MACRO
+      "(mod_name,name, mod_NAME,NAME) ${_prefix}mod_${_name}${_middle}${_name}${_suffix}")
+  endif()
+endforeach()
+
+# Summarize what is available.
+foreach(scope GLOBAL MODULE)
+  if(FortranCInterface_${scope}_SYMBOL AND
+      FortranCInterface_${scope}__SYMBOL)
+    set(FortranCInterface_${scope}_FOUND 1)
+  else()
+    set(FortranCInterface_${scope}_FOUND 0)
+  endif()
+endforeach()
+
+# Record the detection results.
+configure_file(${FortranCInterface_SOURCE_DIR}/Output.cmake.in
+               ${FortranCInterface_BINARY_DIR}/Output.cmake @ONLY)
+file(APPEND ${FortranCInterface_BINARY_DIR}/Output.cmake "\n")
+
+# Report the results.
+if(FortranCInterface_GLOBAL_FOUND)
+  if(FortranCInterface_MODULE_FOUND)
+    set(_result "Found GLOBAL and MODULE mangling")
+  else()
+    set(_result "Found GLOBAL but not MODULE mangling")
+  endif()
+  set(_result_type CHECK_PASS)
+elseif(NOT _result)
+  set(_result "Failed to recognize symbols")
+  set(_result_type CHECK_FAIL)
+endif()
+message(${_result_type} "${_result}")
diff --git a/share/cmake-3.18/Modules/FortranCInterface/Input.cmake.in b/share/cmake-3.22/Modules/FortranCInterface/Input.cmake.in
similarity index 100%
rename from share/cmake-3.18/Modules/FortranCInterface/Input.cmake.in
rename to share/cmake-3.22/Modules/FortranCInterface/Input.cmake.in
diff --git a/share/cmake-3.18/Modules/FortranCInterface/MYMODULE.c b/share/cmake-3.22/Modules/FortranCInterface/MYMODULE.c
similarity index 100%
rename from share/cmake-3.18/Modules/FortranCInterface/MYMODULE.c
rename to share/cmake-3.22/Modules/FortranCInterface/MYMODULE.c
diff --git a/share/cmake-3.18/Modules/FortranCInterface/MY_MODULE.c b/share/cmake-3.22/Modules/FortranCInterface/MY_MODULE.c
similarity index 100%
rename from share/cmake-3.18/Modules/FortranCInterface/MY_MODULE.c
rename to share/cmake-3.22/Modules/FortranCInterface/MY_MODULE.c
diff --git a/share/cmake-3.18/Modules/FortranCInterface/Macro.h.in b/share/cmake-3.22/Modules/FortranCInterface/Macro.h.in
similarity index 100%
rename from share/cmake-3.18/Modules/FortranCInterface/Macro.h.in
rename to share/cmake-3.22/Modules/FortranCInterface/Macro.h.in
diff --git a/share/cmake-3.18/Modules/FortranCInterface/Output.cmake.in b/share/cmake-3.22/Modules/FortranCInterface/Output.cmake.in
similarity index 100%
rename from share/cmake-3.18/Modules/FortranCInterface/Output.cmake.in
rename to share/cmake-3.22/Modules/FortranCInterface/Output.cmake.in
diff --git a/share/cmake-3.18/Modules/FortranCInterface/Verify/CMakeLists.txt b/share/cmake-3.22/Modules/FortranCInterface/Verify/CMakeLists.txt
similarity index 100%
rename from share/cmake-3.18/Modules/FortranCInterface/Verify/CMakeLists.txt
rename to share/cmake-3.22/Modules/FortranCInterface/Verify/CMakeLists.txt
diff --git a/share/cmake-3.18/Modules/FortranCInterface/Verify/VerifyC.c b/share/cmake-3.22/Modules/FortranCInterface/Verify/VerifyC.c
similarity index 100%
rename from share/cmake-3.18/Modules/FortranCInterface/Verify/VerifyC.c
rename to share/cmake-3.22/Modules/FortranCInterface/Verify/VerifyC.c
diff --git a/share/cmake-3.18/Modules/FortranCInterface/Verify/VerifyCXX.cxx b/share/cmake-3.22/Modules/FortranCInterface/Verify/VerifyCXX.cxx
similarity index 100%
rename from share/cmake-3.18/Modules/FortranCInterface/Verify/VerifyCXX.cxx
rename to share/cmake-3.22/Modules/FortranCInterface/Verify/VerifyCXX.cxx
diff --git a/share/cmake-3.18/Modules/FortranCInterface/Verify/VerifyFortran.f b/share/cmake-3.22/Modules/FortranCInterface/Verify/VerifyFortran.f
similarity index 100%
rename from share/cmake-3.18/Modules/FortranCInterface/Verify/VerifyFortran.f
rename to share/cmake-3.22/Modules/FortranCInterface/Verify/VerifyFortran.f
diff --git a/share/cmake-3.18/Modules/FortranCInterface/Verify/main.c b/share/cmake-3.22/Modules/FortranCInterface/Verify/main.c
similarity index 100%
rename from share/cmake-3.18/Modules/FortranCInterface/Verify/main.c
rename to share/cmake-3.22/Modules/FortranCInterface/Verify/main.c
diff --git a/share/cmake-3.18/Modules/FortranCInterface/call_mod.f90 b/share/cmake-3.22/Modules/FortranCInterface/call_mod.f90
similarity index 100%
rename from share/cmake-3.18/Modules/FortranCInterface/call_mod.f90
rename to share/cmake-3.22/Modules/FortranCInterface/call_mod.f90
diff --git a/share/cmake-3.18/Modules/FortranCInterface/call_sub.f b/share/cmake-3.22/Modules/FortranCInterface/call_sub.f
similarity index 100%
rename from share/cmake-3.18/Modules/FortranCInterface/call_sub.f
rename to share/cmake-3.22/Modules/FortranCInterface/call_sub.f
diff --git a/share/cmake-3.18/Modules/FortranCInterface/main.F b/share/cmake-3.22/Modules/FortranCInterface/main.F
similarity index 100%
rename from share/cmake-3.18/Modules/FortranCInterface/main.F
rename to share/cmake-3.22/Modules/FortranCInterface/main.F
diff --git a/share/cmake-3.18/Modules/FortranCInterface/my_module.f90 b/share/cmake-3.22/Modules/FortranCInterface/my_module.f90
similarity index 100%
rename from share/cmake-3.18/Modules/FortranCInterface/my_module.f90
rename to share/cmake-3.22/Modules/FortranCInterface/my_module.f90
diff --git a/share/cmake-3.18/Modules/FortranCInterface/my_module_.c b/share/cmake-3.22/Modules/FortranCInterface/my_module_.c
similarity index 100%
rename from share/cmake-3.18/Modules/FortranCInterface/my_module_.c
rename to share/cmake-3.22/Modules/FortranCInterface/my_module_.c
diff --git a/share/cmake-3.18/Modules/FortranCInterface/my_sub.f b/share/cmake-3.22/Modules/FortranCInterface/my_sub.f
similarity index 100%
rename from share/cmake-3.18/Modules/FortranCInterface/my_sub.f
rename to share/cmake-3.22/Modules/FortranCInterface/my_sub.f
diff --git a/share/cmake-3.18/Modules/FortranCInterface/mymodule.f90 b/share/cmake-3.22/Modules/FortranCInterface/mymodule.f90
similarity index 100%
rename from share/cmake-3.18/Modules/FortranCInterface/mymodule.f90
rename to share/cmake-3.22/Modules/FortranCInterface/mymodule.f90
diff --git a/share/cmake-3.18/Modules/FortranCInterface/mymodule_.c b/share/cmake-3.22/Modules/FortranCInterface/mymodule_.c
similarity index 100%
rename from share/cmake-3.18/Modules/FortranCInterface/mymodule_.c
rename to share/cmake-3.22/Modules/FortranCInterface/mymodule_.c
diff --git a/share/cmake-3.18/Modules/FortranCInterface/mysub.f b/share/cmake-3.22/Modules/FortranCInterface/mysub.f
similarity index 100%
rename from share/cmake-3.18/Modules/FortranCInterface/mysub.f
rename to share/cmake-3.22/Modules/FortranCInterface/mysub.f
diff --git a/share/cmake-3.18/Modules/FortranCInterface/symbol.c.in b/share/cmake-3.22/Modules/FortranCInterface/symbol.c.in
similarity index 100%
rename from share/cmake-3.18/Modules/FortranCInterface/symbol.c.in
rename to share/cmake-3.22/Modules/FortranCInterface/symbol.c.in
diff --git a/share/cmake-3.22/Modules/GNUInstallDirs.cmake b/share/cmake-3.22/Modules/GNUInstallDirs.cmake
new file mode 100644
index 0000000..01bd637
--- /dev/null
+++ b/share/cmake-3.22/Modules/GNUInstallDirs.cmake
@@ -0,0 +1,442 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+GNUInstallDirs
+--------------
+
+Define GNU standard installation directories
+
+Provides install directory variables as defined by the
+`GNU Coding Standards`_.
+
+.. _`GNU Coding Standards`: https://www.gnu.org/prep/standards/html_node/Directory-Variables.html
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+Inclusion of this module defines the following variables:
+
+``CMAKE_INSTALL_<dir>``
+
+  Destination for files of a given type.  This value may be passed to
+  the ``DESTINATION`` options of :command:`install` commands for the
+  corresponding file type.  It should typically be a path relative to
+  the installation prefix so that it can be converted to an absolute
+  path in a relocatable way (see ``CMAKE_INSTALL_FULL_<dir>``).
+  However, an absolute path is also allowed.
+
+``CMAKE_INSTALL_FULL_<dir>``
+
+  The absolute path generated from the corresponding ``CMAKE_INSTALL_<dir>``
+  value.  If the value is not already an absolute path, an absolute path
+  is constructed typically by prepending the value of the
+  :variable:`CMAKE_INSTALL_PREFIX` variable.  However, there are some
+  `special cases`_ as documented below.
+
+where ``<dir>`` is one of:
+
+``BINDIR``
+  user executables (``bin``)
+``SBINDIR``
+  system admin executables (``sbin``)
+``LIBEXECDIR``
+  program executables (``libexec``)
+``SYSCONFDIR``
+  read-only single-machine data (``etc``)
+``SHAREDSTATEDIR``
+  modifiable architecture-independent data (``com``)
+``LOCALSTATEDIR``
+  modifiable single-machine data (``var``)
+``RUNSTATEDIR``
+  .. versionadded:: 3.9
+    run-time variable data (``LOCALSTATEDIR/run``)
+``LIBDIR``
+  object code libraries (``lib`` or ``lib64``
+  or ``lib/<multiarch-tuple>`` on Debian)
+``INCLUDEDIR``
+  C header files (``include``)
+``OLDINCLUDEDIR``
+  C header files for non-gcc (``/usr/include``)
+``DATAROOTDIR``
+  read-only architecture-independent data root (``share``)
+``DATADIR``
+  read-only architecture-independent data (``DATAROOTDIR``)
+``INFODIR``
+  info documentation (``DATAROOTDIR/info``)
+``LOCALEDIR``
+  locale-dependent data (``DATAROOTDIR/locale``)
+``MANDIR``
+  man documentation (``DATAROOTDIR/man``)
+``DOCDIR``
+  documentation root (``DATAROOTDIR/doc/PROJECT_NAME``)
+
+If the includer does not define a value the above-shown default will be
+used and the value will appear in the cache for editing by the user.
+
+Special Cases
+^^^^^^^^^^^^^
+
+.. versionadded:: 3.4
+
+The following values of :variable:`CMAKE_INSTALL_PREFIX` are special:
+
+``/``
+
+  For ``<dir>`` other than the ``SYSCONFDIR``, ``LOCALSTATEDIR`` and
+  ``RUNSTATEDIR``, the value of ``CMAKE_INSTALL_<dir>`` is prefixed
+  with ``usr/`` if it is not user-specified as an absolute path.
+  For example, the ``INCLUDEDIR`` value ``include`` becomes ``usr/include``.
+  This is required by the `GNU Coding Standards`_, which state:
+
+    When building the complete GNU system, the prefix will be empty
+    and ``/usr`` will be a symbolic link to ``/``.
+
+``/usr``
+
+  For ``<dir>`` equal to ``SYSCONFDIR``, ``LOCALSTATEDIR`` or
+  ``RUNSTATEDIR``, the ``CMAKE_INSTALL_FULL_<dir>`` is computed by
+  prepending just ``/`` to the value of ``CMAKE_INSTALL_<dir>``
+  if it is not user-specified as an absolute path.
+  For example, the ``SYSCONFDIR`` value ``etc`` becomes ``/etc``.
+  This is required by the `GNU Coding Standards`_.
+
+``/opt/...``
+
+  For ``<dir>`` equal to ``SYSCONFDIR``, ``LOCALSTATEDIR`` or
+  ``RUNSTATEDIR``, the ``CMAKE_INSTALL_FULL_<dir>`` is computed by
+  *appending* the prefix to the value of ``CMAKE_INSTALL_<dir>``
+  if it is not user-specified as an absolute path.
+  For example, the ``SYSCONFDIR`` value ``etc`` becomes ``/etc/opt/...``.
+  This is defined by the `Filesystem Hierarchy Standard`_.
+
+.. _`Filesystem Hierarchy Standard`: https://refspecs.linuxfoundation.org/FHS_3.0/fhs/index.html
+
+Macros
+^^^^^^
+
+.. command:: GNUInstallDirs_get_absolute_install_dir
+
+  ::
+
+    GNUInstallDirs_get_absolute_install_dir(absvar var dirname)
+
+  .. versionadded:: 3.7
+
+  Set the given variable ``absvar`` to the absolute path contained
+  within the variable ``var``.  This is to allow the computation of an
+  absolute path, accounting for all the special cases documented
+  above.  While this macro is used to compute the various
+  ``CMAKE_INSTALL_FULL_<dir>`` variables, it is exposed publicly to
+  allow users who create additional path variables to also compute
+  absolute paths where necessary, using the same logic.  ``dirname`` is
+  the directory name to get, e.g. ``BINDIR``.
+
+  .. versionchanged:: 3.20
+    Added the ``<dirname>`` parameter.  Previous versions of CMake passed
+    this value through the variable ``${dir}``.
+#]=======================================================================]
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0054 NEW) # if() quoted variables not dereferenced
+
+# Convert a cache variable to PATH type
+
+macro(_GNUInstallDirs_cache_convert_to_path var description)
+  get_property(_GNUInstallDirs_cache_type CACHE ${var} PROPERTY TYPE)
+  if(_GNUInstallDirs_cache_type STREQUAL "UNINITIALIZED")
+    file(TO_CMAKE_PATH "${${var}}" _GNUInstallDirs_cmakepath)
+    set_property(CACHE ${var} PROPERTY TYPE PATH)
+    set_property(CACHE ${var} PROPERTY VALUE "${_GNUInstallDirs_cmakepath}")
+    set_property(CACHE ${var} PROPERTY HELPSTRING "${description}")
+    unset(_GNUInstallDirs_cmakepath)
+  endif()
+  unset(_GNUInstallDirs_cache_type)
+endmacro()
+
+# Create a cache variable with default for a path.
+macro(_GNUInstallDirs_cache_path var default description)
+  if(NOT DEFINED ${var})
+    set(${var} "${default}" CACHE PATH "${description}")
+  endif()
+  _GNUInstallDirs_cache_convert_to_path("${var}" "${description}")
+endmacro()
+
+# Create a cache variable with not default for a path, with a fallback
+# when unset; used for entries slaved to other entries such as
+# DATAROOTDIR.
+macro(_GNUInstallDirs_cache_path_fallback var default description)
+  if(NOT ${var})
+    set(${var} "" CACHE PATH "${description}")
+    set(${var} "${default}")
+  endif()
+  _GNUInstallDirs_cache_convert_to_path("${var}" "${description}")
+endmacro()
+
+# Installation directories
+#
+
+_GNUInstallDirs_cache_path(CMAKE_INSTALL_BINDIR "bin"
+  "User executables (bin)")
+_GNUInstallDirs_cache_path(CMAKE_INSTALL_SBINDIR "sbin"
+  "System admin executables (sbin)")
+_GNUInstallDirs_cache_path(CMAKE_INSTALL_LIBEXECDIR "libexec"
+  "Program executables (libexec)")
+_GNUInstallDirs_cache_path(CMAKE_INSTALL_SYSCONFDIR "etc"
+  "Read-only single-machine data (etc)")
+_GNUInstallDirs_cache_path(CMAKE_INSTALL_SHAREDSTATEDIR "com"
+  "Modifiable architecture-independent data (com)")
+_GNUInstallDirs_cache_path(CMAKE_INSTALL_LOCALSTATEDIR "var"
+  "Modifiable single-machine data (var)")
+
+# We check if the variable was manually set and not cached, in order to
+# allow projects to set the values as normal variables before including
+# GNUInstallDirs to avoid having the entries cached or user-editable. It
+# replaces the "if(NOT DEFINED CMAKE_INSTALL_XXX)" checks in all the
+# other cases.
+# If CMAKE_INSTALL_LIBDIR is defined, if _libdir_set is false, then the
+# variable is a normal one, otherwise it is a cache one.
+get_property(_libdir_set CACHE CMAKE_INSTALL_LIBDIR PROPERTY TYPE SET)
+if(NOT DEFINED CMAKE_INSTALL_LIBDIR OR (_libdir_set
+    AND DEFINED _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX
+    AND NOT "${_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX}" STREQUAL "${CMAKE_INSTALL_PREFIX}"))
+  # If CMAKE_INSTALL_LIBDIR is not defined, it is always executed.
+  # Otherwise:
+  #  * if _libdir_set is false it is not executed (meaning that it is
+  #    not a cache variable)
+  #  * if _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX is not defined it is
+  #    not executed
+  #  * if _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX and
+  #    CMAKE_INSTALL_PREFIX are the same string it is not executed.
+  #    _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX is updated after the
+  #    execution, of this part of code, therefore at the next inclusion
+  #    of the file, CMAKE_INSTALL_LIBDIR is defined, and the 2 strings
+  #    are equal, meaning that the if is not executed the code the
+  #    second time.
+
+  set(_LIBDIR_DEFAULT "lib")
+  # Override this default 'lib' with 'lib64' iff:
+  #  - we are on Linux system but NOT cross-compiling
+  #  - we are NOT on debian
+  #  - we are NOT building for conda
+  #  - we are on a 64 bits system
+  # reason is: amd64 ABI: https://github.com/hjl-tools/x86-psABI/wiki/X86-psABI
+  # For Debian with multiarch, use 'lib/${CMAKE_LIBRARY_ARCHITECTURE}' if
+  # CMAKE_LIBRARY_ARCHITECTURE is set (which contains e.g. "i386-linux-gnu"
+  # and CMAKE_INSTALL_PREFIX is "/usr"
+  # See http://wiki.debian.org/Multiarch
+  if(DEFINED _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX)
+    set(__LAST_LIBDIR_DEFAULT "lib")
+    # __LAST_LIBDIR_DEFAULT is the default value that we compute from
+    # _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX, not a cache entry for
+    # the value that was last used as the default.
+    # This value is used to figure out whether the user changed the
+    # CMAKE_INSTALL_LIBDIR value manually, or if the value was the
+    # default one. When CMAKE_INSTALL_PREFIX changes, the value is
+    # updated to the new default, unless the user explicitly changed it.
+  endif()
+  if (NOT DEFINED CMAKE_SYSTEM_NAME OR NOT DEFINED CMAKE_SIZEOF_VOID_P)
+    message(AUTHOR_WARNING
+      "Unable to determine default CMAKE_INSTALL_LIBDIR directory because no target architecture is known. "
+      "Please enable at least one language before including GNUInstallDirs.")
+  endif()
+
+  if(CMAKE_SYSTEM_NAME MATCHES "^(Linux|kFreeBSD|GNU)$"
+      AND NOT CMAKE_CROSSCOMPILING)
+    unset(__system_type_for_install)
+    if(DEFINED ENV{CONDA_BUILD} AND DEFINED ENV{PREFIX})
+      set(conda_prefix "$ENV{PREFIX}")
+      cmake_path(ABSOLUTE_PATH conda_prefix NORMALIZE)
+      if("${CMAKE_INSTALL_PREFIX}" STREQUAL conda_prefix)
+        set(__system_type_for_install "conda")
+      endif()
+    elseif(DEFINED ENV{CONDA_PREFIX})
+      set(conda_prefix "$ENV{CONDA_PREFIX}")
+      cmake_path(ABSOLUTE_PATH conda_prefix NORMALIZE)
+      if("${CMAKE_INSTALL_PREFIX}" STREQUAL conda_prefix AND
+         NOT ("${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/?$" OR
+              "${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/local/?$"))
+        set(__system_type_for_install "conda")
+      endif()
+    endif()
+    if(NOT __system_type_for_install)
+      if (EXISTS "/etc/alpine-release")
+        set(__system_type_for_install "alpine")
+      elseif (EXISTS "/etc/arch-release")
+        set(__system_type_for_install "arch linux")
+      elseif (EXISTS "/etc/debian_version")
+        set(__system_type_for_install "debian")
+      endif()
+    endif()
+
+    if(__system_type_for_install STREQUAL "debian")
+      if(CMAKE_LIBRARY_ARCHITECTURE)
+        if("${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/?$")
+          set(_LIBDIR_DEFAULT "lib/${CMAKE_LIBRARY_ARCHITECTURE}")
+        endif()
+        if(DEFINED _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX
+            AND "${_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/?$")
+          set(__LAST_LIBDIR_DEFAULT "lib/${CMAKE_LIBRARY_ARCHITECTURE}")
+        endif()
+      endif()
+    elseif(NOT DEFINED __system_type_for_install)
+      # not debian, alpine, arch, or conda so rely on CMAKE_SIZEOF_VOID_P:
+      if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
+        set(_LIBDIR_DEFAULT "lib64")
+        if(DEFINED _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX)
+          set(__LAST_LIBDIR_DEFAULT "lib64")
+        endif()
+      endif()
+    endif()
+  endif()
+  unset(__system_type_for_install)
+
+  if(NOT DEFINED CMAKE_INSTALL_LIBDIR)
+    set(CMAKE_INSTALL_LIBDIR "${_LIBDIR_DEFAULT}" CACHE PATH "Object code libraries (${_LIBDIR_DEFAULT})")
+  elseif(DEFINED __LAST_LIBDIR_DEFAULT
+      AND "${__LAST_LIBDIR_DEFAULT}" STREQUAL "${CMAKE_INSTALL_LIBDIR}")
+    set_property(CACHE CMAKE_INSTALL_LIBDIR PROPERTY VALUE "${_LIBDIR_DEFAULT}")
+  endif()
+endif()
+_GNUInstallDirs_cache_convert_to_path(CMAKE_INSTALL_LIBDIR "Object code libraries (lib)")
+
+# Save for next run
+set(_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE INTERNAL "CMAKE_INSTALL_PREFIX during last run")
+unset(_libdir_set)
+unset(__LAST_LIBDIR_DEFAULT)
+
+_GNUInstallDirs_cache_path(CMAKE_INSTALL_INCLUDEDIR "include"
+  "C header files (include)")
+_GNUInstallDirs_cache_path(CMAKE_INSTALL_OLDINCLUDEDIR "/usr/include"
+  "C header files for non-gcc (/usr/include)")
+_GNUInstallDirs_cache_path(CMAKE_INSTALL_DATAROOTDIR "share"
+  "Read-only architecture-independent data root (share)")
+
+#-----------------------------------------------------------------------------
+# Values whose defaults are relative to DATAROOTDIR.  Store empty values in
+# the cache and store the defaults in local variables if the cache values are
+# not set explicitly.  This auto-updates the defaults as DATAROOTDIR changes.
+
+_GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_DATADIR "${CMAKE_INSTALL_DATAROOTDIR}"
+  "Read-only architecture-independent data (DATAROOTDIR)")
+
+if(CMAKE_SYSTEM_NAME MATCHES "^(([^kF].*)?BSD|DragonFly)$")
+  _GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_INFODIR "info"
+    "Info documentation (info)")
+else()
+  _GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_INFODIR "${CMAKE_INSTALL_DATAROOTDIR}/info"
+    "Info documentation (DATAROOTDIR/info)")
+endif()
+
+if(CMAKE_SYSTEM_NAME MATCHES "^(([^k].*)?BSD|DragonFly)$")
+  _GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_MANDIR "man"
+    "Man documentation (man)")
+else()
+  _GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_MANDIR "${CMAKE_INSTALL_DATAROOTDIR}/man"
+    "Man documentation (DATAROOTDIR/man)")
+endif()
+
+_GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_LOCALEDIR "${CMAKE_INSTALL_DATAROOTDIR}/locale"
+  "Locale-dependent data (DATAROOTDIR/locale)")
+_GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME}"
+  "Documentation root (DATAROOTDIR/doc/PROJECT_NAME)")
+
+_GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_RUNSTATEDIR "${CMAKE_INSTALL_LOCALSTATEDIR}/run"
+  "Run-time variable data (LOCALSTATEDIR/run)")
+
+#-----------------------------------------------------------------------------
+
+mark_as_advanced(
+  CMAKE_INSTALL_BINDIR
+  CMAKE_INSTALL_SBINDIR
+  CMAKE_INSTALL_LIBEXECDIR
+  CMAKE_INSTALL_SYSCONFDIR
+  CMAKE_INSTALL_SHAREDSTATEDIR
+  CMAKE_INSTALL_LOCALSTATEDIR
+  CMAKE_INSTALL_RUNSTATEDIR
+  CMAKE_INSTALL_LIBDIR
+  CMAKE_INSTALL_INCLUDEDIR
+  CMAKE_INSTALL_OLDINCLUDEDIR
+  CMAKE_INSTALL_DATAROOTDIR
+  CMAKE_INSTALL_DATADIR
+  CMAKE_INSTALL_INFODIR
+  CMAKE_INSTALL_LOCALEDIR
+  CMAKE_INSTALL_MANDIR
+  CMAKE_INSTALL_DOCDIR
+  )
+
+macro(GNUInstallDirs_get_absolute_install_dir absvar var)
+  set(GGAID_extra_args ${ARGN})
+  list(LENGTH GGAID_extra_args GGAID_extra_arg_count)
+  if(GGAID_extra_arg_count GREATER "0")
+    list(GET GGAID_extra_args 0 GGAID_dir)
+  else()
+    # Historical behavior: use ${dir} from caller's scope
+    set(GGAID_dir "${dir}")
+    message(AUTHOR_WARNING
+      "GNUInstallDirs_get_absolute_install_dir called without third argument. "
+      "Using \${dir} from the caller's scope for compatibility with CMake 3.19 and below.")
+  endif()
+
+  if(NOT IS_ABSOLUTE "${${var}}")
+    # Handle special cases:
+    # - CMAKE_INSTALL_PREFIX == /
+    # - CMAKE_INSTALL_PREFIX == /usr
+    # - CMAKE_INSTALL_PREFIX == /opt/...
+    if("${CMAKE_INSTALL_PREFIX}" STREQUAL "/")
+      if("${GGAID_dir}" STREQUAL "SYSCONFDIR" OR "${GGAID_dir}" STREQUAL "LOCALSTATEDIR" OR "${GGAID_dir}" STREQUAL "RUNSTATEDIR")
+        set(${absvar} "/${${var}}")
+      else()
+        if (NOT "${${var}}" MATCHES "^usr/")
+          set(${var} "usr/${${var}}")
+        endif()
+        set(${absvar} "/${${var}}")
+      endif()
+    elseif("${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/?$")
+      if("${GGAID_dir}" STREQUAL "SYSCONFDIR" OR "${GGAID_dir}" STREQUAL "LOCALSTATEDIR" OR "${GGAID_dir}" STREQUAL "RUNSTATEDIR")
+        set(${absvar} "/${${var}}")
+      else()
+        set(${absvar} "${CMAKE_INSTALL_PREFIX}/${${var}}")
+      endif()
+    elseif("${CMAKE_INSTALL_PREFIX}" MATCHES "^/opt/.*")
+      if("${GGAID_dir}" STREQUAL "SYSCONFDIR" OR "${GGAID_dir}" STREQUAL "LOCALSTATEDIR" OR "${GGAID_dir}" STREQUAL "RUNSTATEDIR")
+        set(${absvar} "/${${var}}${CMAKE_INSTALL_PREFIX}")
+      else()
+        set(${absvar} "${CMAKE_INSTALL_PREFIX}/${${var}}")
+      endif()
+    else()
+      set(${absvar} "${CMAKE_INSTALL_PREFIX}/${${var}}")
+    endif()
+  else()
+    set(${absvar} "${${var}}")
+  endif()
+
+  unset(GGAID_dir)
+  unset(GGAID_extra_arg_count)
+  unset(GGAID_extra_args)
+endmacro()
+
+# Result directories
+#
+foreach(dir
+    BINDIR
+    SBINDIR
+    LIBEXECDIR
+    SYSCONFDIR
+    SHAREDSTATEDIR
+    LOCALSTATEDIR
+    RUNSTATEDIR
+    LIBDIR
+    INCLUDEDIR
+    OLDINCLUDEDIR
+    DATAROOTDIR
+    DATADIR
+    INFODIR
+    LOCALEDIR
+    MANDIR
+    DOCDIR
+    )
+  GNUInstallDirs_get_absolute_install_dir(CMAKE_INSTALL_FULL_${dir} CMAKE_INSTALL_${dir} ${dir})
+endforeach()
+
+cmake_policy(POP)
diff --git a/share/cmake-3.22/Modules/GenerateExportHeader.cmake b/share/cmake-3.22/Modules/GenerateExportHeader.cmake
new file mode 100644
index 0000000..a9a9c59
--- /dev/null
+++ b/share/cmake-3.22/Modules/GenerateExportHeader.cmake
@@ -0,0 +1,455 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+GenerateExportHeader
+--------------------
+
+Function for generation of export macros for libraries
+
+This module provides the function ``GENERATE_EXPORT_HEADER()``.
+
+.. versionadded:: 3.12
+  Added support for C projects.  Previous versions supported C++ project only.
+
+The ``GENERATE_EXPORT_HEADER`` function can be used to generate a file
+suitable for preprocessor inclusion which contains EXPORT macros to be
+used in library classes::
+
+   GENERATE_EXPORT_HEADER( LIBRARY_TARGET
+             [BASE_NAME <base_name>]
+             [EXPORT_MACRO_NAME <export_macro_name>]
+             [EXPORT_FILE_NAME <export_file_name>]
+             [DEPRECATED_MACRO_NAME <deprecated_macro_name>]
+             [NO_EXPORT_MACRO_NAME <no_export_macro_name>]
+             [INCLUDE_GUARD_NAME <include_guard_name>]
+             [STATIC_DEFINE <static_define>]
+             [NO_DEPRECATED_MACRO_NAME <no_deprecated_macro_name>]
+             [DEFINE_NO_DEPRECATED]
+             [PREFIX_NAME <prefix_name>]
+             [CUSTOM_CONTENT_FROM_VARIABLE <variable>]
+   )
+
+The target properties :prop_tgt:`CXX_VISIBILITY_PRESET <<LANG>_VISIBILITY_PRESET>`
+and :prop_tgt:`VISIBILITY_INLINES_HIDDEN` can be used to add the appropriate
+compile flags for targets.  See the documentation of those target properties,
+and the convenience variables
+:variable:`CMAKE_CXX_VISIBILITY_PRESET <CMAKE_<LANG>_VISIBILITY_PRESET>` and
+:variable:`CMAKE_VISIBILITY_INLINES_HIDDEN`.
+
+By default ``GENERATE_EXPORT_HEADER()`` generates macro names in a file
+name determined by the name of the library.  This means that in the
+simplest case, users of ``GenerateExportHeader`` will be equivalent to:
+
+.. code-block:: cmake
+
+   set(CMAKE_CXX_VISIBILITY_PRESET hidden)
+   set(CMAKE_VISIBILITY_INLINES_HIDDEN 1)
+   add_library(somelib someclass.cpp)
+   generate_export_header(somelib)
+   install(TARGETS somelib DESTINATION ${LIBRARY_INSTALL_DIR})
+   install(FILES
+    someclass.h
+    ${PROJECT_BINARY_DIR}/somelib_export.h DESTINATION ${INCLUDE_INSTALL_DIR}
+   )
+
+
+And in the ABI header files:
+
+.. code-block:: c++
+
+   #include "somelib_export.h"
+   class SOMELIB_EXPORT SomeClass {
+     ...
+   };
+
+
+The CMake fragment will generate a file in the
+``${CMAKE_CURRENT_BINARY_DIR}`` called ``somelib_export.h`` containing the
+macros ``SOMELIB_EXPORT``, ``SOMELIB_NO_EXPORT``, ``SOMELIB_DEPRECATED``,
+``SOMELIB_DEPRECATED_EXPORT`` and ``SOMELIB_DEPRECATED_NO_EXPORT``.
+They will be followed by content taken from the variable specified by
+the ``CUSTOM_CONTENT_FROM_VARIABLE`` option, if any.
+The resulting file should be installed with other headers in the library.
+
+The ``BASE_NAME`` argument can be used to override the file name and the
+names used for the macros:
+
+.. code-block:: cmake
+
+   add_library(somelib someclass.cpp)
+   generate_export_header(somelib
+     BASE_NAME other_name
+   )
+
+
+Generates a file called ``other_name_export.h`` containing the macros
+``OTHER_NAME_EXPORT``, ``OTHER_NAME_NO_EXPORT`` and ``OTHER_NAME_DEPRECATED``
+etc.
+
+The ``BASE_NAME`` may be overridden by specifying other options in the
+function.  For example:
+
+.. code-block:: cmake
+
+   add_library(somelib someclass.cpp)
+   generate_export_header(somelib
+     EXPORT_MACRO_NAME OTHER_NAME_EXPORT
+   )
+
+
+creates the macro ``OTHER_NAME_EXPORT`` instead of ``SOMELIB_EXPORT``, but
+other macros and the generated file name is as default:
+
+.. code-block:: cmake
+
+   add_library(somelib someclass.cpp)
+   generate_export_header(somelib
+     DEPRECATED_MACRO_NAME KDE_DEPRECATED
+   )
+
+
+creates the macro ``KDE_DEPRECATED`` instead of ``SOMELIB_DEPRECATED``.
+
+If ``LIBRARY_TARGET`` is a static library, macros are defined without
+values.
+
+If the same sources are used to create both a shared and a static
+library, the uppercased symbol ``${BASE_NAME}_STATIC_DEFINE`` should be
+used when building the static library:
+
+.. code-block:: cmake
+
+   add_library(shared_variant SHARED ${lib_SRCS})
+   add_library(static_variant ${lib_SRCS})
+   generate_export_header(shared_variant BASE_NAME libshared_and_static)
+   set_target_properties(static_variant PROPERTIES
+     COMPILE_FLAGS -DLIBSHARED_AND_STATIC_STATIC_DEFINE)
+
+This will cause the export macros to expand to nothing when building
+the static library.
+
+If ``DEFINE_NO_DEPRECATED`` is specified, then a macro
+``${BASE_NAME}_NO_DEPRECATED`` will be defined This macro can be used to
+remove deprecated code from preprocessor output:
+
+.. code-block:: cmake
+
+   option(EXCLUDE_DEPRECATED "Exclude deprecated parts of the library" FALSE)
+   if (EXCLUDE_DEPRECATED)
+     set(NO_BUILD_DEPRECATED DEFINE_NO_DEPRECATED)
+   endif()
+   generate_export_header(somelib ${NO_BUILD_DEPRECATED})
+
+
+And then in somelib:
+
+.. code-block:: c++
+
+   class SOMELIB_EXPORT SomeClass
+   {
+   public:
+   #ifndef SOMELIB_NO_DEPRECATED
+     SOMELIB_DEPRECATED void oldMethod();
+   #endif
+   };
+
+.. code-block:: c++
+
+   #ifndef SOMELIB_NO_DEPRECATED
+   void SomeClass::oldMethod() {  }
+   #endif
+
+
+If ``PREFIX_NAME`` is specified, the argument will be used as a prefix to
+all generated macros.
+
+For example:
+
+.. code-block:: cmake
+
+   generate_export_header(somelib PREFIX_NAME VTK_)
+
+Generates the macros ``VTK_SOMELIB_EXPORT`` etc.
+
+.. versionadded:: 3.1
+  Library target can be an ``OBJECT`` library.
+
+.. versionadded:: 3.7
+  Added the ``CUSTOM_CONTENT_FROM_VARIABLE`` option.
+
+.. versionadded:: 3.11
+  Added the ``INCLUDE_GUARD_NAME`` option.
+
+::
+
+   ADD_COMPILER_EXPORT_FLAGS( [<output_variable>] )
+
+.. deprecated:: 3.0
+  Set the target properties
+  :prop_tgt:`CXX_VISIBILITY_PRESET <<LANG>_VISIBILITY_PRESET>` and
+  :prop_tgt:`VISIBILITY_INLINES_HIDDEN` instead.
+
+The ``ADD_COMPILER_EXPORT_FLAGS`` function adds ``-fvisibility=hidden`` to
+:variable:`CMAKE_CXX_FLAGS <CMAKE_<LANG>_FLAGS>` if supported, and is a no-op
+on Windows which does not need extra compiler flags for exporting support.
+You may optionally pass a single argument to ``ADD_COMPILER_EXPORT_FLAGS``
+that will be populated with the ``CXX_FLAGS`` required to enable visibility
+support for the compiler/architecture in use.
+#]=======================================================================]
+
+include(CheckCCompilerFlag)
+include(CheckCXXCompilerFlag)
+
+# TODO: Install this macro separately?
+macro(_check_cxx_compiler_attribute _ATTRIBUTE _RESULT)
+  check_cxx_source_compiles("${_ATTRIBUTE} int somefunc() { return 0; }
+    int main() { return somefunc();}" ${_RESULT}
+  )
+endmacro()
+
+# TODO: Install this macro separately?
+macro(_check_c_compiler_attribute _ATTRIBUTE _RESULT)
+  check_c_source_compiles("${_ATTRIBUTE} int somefunc() { return 0; }
+    int main() { return somefunc();}" ${_RESULT}
+  )
+endmacro()
+
+macro(_test_compiler_hidden_visibility)
+
+  if(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.2")
+    set(GCC_TOO_OLD TRUE)
+  elseif(CMAKE_COMPILER_IS_GNUCC AND CMAKE_C_COMPILER_VERSION VERSION_LESS "4.2")
+    set(GCC_TOO_OLD TRUE)
+  elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "12.0")
+    set(_INTEL_TOO_OLD TRUE)
+  endif()
+
+  # Exclude XL here because it misinterprets -fvisibility=hidden even though
+  # the check_cxx_compiler_flag passes
+  if(NOT GCC_TOO_OLD
+      AND NOT _INTEL_TOO_OLD
+      AND NOT WIN32
+      AND NOT CYGWIN
+      AND NOT CMAKE_CXX_COMPILER_ID MATCHES XL
+      AND NOT CMAKE_CXX_COMPILER_ID MATCHES "^(PGI|NVHPC)$"
+      AND NOT CMAKE_CXX_COMPILER_ID MATCHES Watcom)
+    if (CMAKE_CXX_COMPILER_LOADED)
+      check_cxx_compiler_flag(-fvisibility=hidden COMPILER_HAS_HIDDEN_VISIBILITY)
+      check_cxx_compiler_flag(-fvisibility-inlines-hidden
+        COMPILER_HAS_HIDDEN_INLINE_VISIBILITY)
+    else()
+      check_c_compiler_flag(-fvisibility=hidden COMPILER_HAS_HIDDEN_VISIBILITY)
+      check_c_compiler_flag(-fvisibility-inlines-hidden
+        COMPILER_HAS_HIDDEN_INLINE_VISIBILITY)
+    endif()
+  endif()
+endmacro()
+
+macro(_test_compiler_has_deprecated)
+  # NOTE:  Some Embarcadero compilers silently compile __declspec(deprecated)
+  # without error, but this is not a documented feature and the attribute does
+  # not actually generate any warnings.
+  if(CMAKE_CXX_COMPILER_ID MATCHES Borland
+      OR CMAKE_CXX_COMPILER_ID MATCHES Embarcadero
+      OR CMAKE_CXX_COMPILER_ID MATCHES HP
+      OR GCC_TOO_OLD
+      OR CMAKE_CXX_COMPILER_ID MATCHES "^(PGI|NVHPC)$"
+      OR CMAKE_CXX_COMPILER_ID MATCHES Watcom)
+    set(COMPILER_HAS_DEPRECATED "" CACHE INTERNAL
+      "Compiler support for a deprecated attribute")
+  else()
+    if (CMAKE_CXX_COMPILER_LOADED)
+      _check_cxx_compiler_attribute("__attribute__((__deprecated__))"
+        COMPILER_HAS_DEPRECATED_ATTR)
+      if(COMPILER_HAS_DEPRECATED_ATTR)
+        set(COMPILER_HAS_DEPRECATED "${COMPILER_HAS_DEPRECATED_ATTR}"
+          CACHE INTERNAL "Compiler support for a deprecated attribute")
+      else()
+        _check_cxx_compiler_attribute("__declspec(deprecated)"
+          COMPILER_HAS_DEPRECATED)
+      endif()
+    else()
+      _check_c_compiler_attribute("__attribute__((__deprecated__))"
+        COMPILER_HAS_DEPRECATED_ATTR)
+      if(COMPILER_HAS_DEPRECATED_ATTR)
+        set(COMPILER_HAS_DEPRECATED "${COMPILER_HAS_DEPRECATED_ATTR}"
+          CACHE INTERNAL "Compiler support for a deprecated attribute")
+      else()
+        _check_c_compiler_attribute("__declspec(deprecated)"
+          COMPILER_HAS_DEPRECATED)
+      endif()
+
+    endif()
+  endif()
+endmacro()
+
+get_filename_component(_GENERATE_EXPORT_HEADER_MODULE_DIR
+  "${CMAKE_CURRENT_LIST_FILE}" PATH)
+
+macro(_DO_SET_MACRO_VALUES TARGET_LIBRARY)
+  set(DEFINE_DEPRECATED)
+  set(DEFINE_EXPORT)
+  set(DEFINE_IMPORT)
+  set(DEFINE_NO_EXPORT)
+
+  if (COMPILER_HAS_DEPRECATED_ATTR)
+    set(DEFINE_DEPRECATED "__attribute__ ((__deprecated__))")
+  elseif(COMPILER_HAS_DEPRECATED)
+    set(DEFINE_DEPRECATED "__declspec(deprecated)")
+  endif()
+
+  get_property(type TARGET ${TARGET_LIBRARY} PROPERTY TYPE)
+
+  if(NOT ${type} STREQUAL "STATIC_LIBRARY")
+    if(WIN32 OR CYGWIN)
+      set(DEFINE_EXPORT "__declspec(dllexport)")
+      set(DEFINE_IMPORT "__declspec(dllimport)")
+    elseif(COMPILER_HAS_HIDDEN_VISIBILITY)
+      set(DEFINE_EXPORT "__attribute__((visibility(\"default\")))")
+      set(DEFINE_IMPORT "__attribute__((visibility(\"default\")))")
+      set(DEFINE_NO_EXPORT "__attribute__((visibility(\"hidden\")))")
+    endif()
+  endif()
+endmacro()
+
+macro(_DO_GENERATE_EXPORT_HEADER TARGET_LIBRARY)
+  # Option overrides
+  set(options DEFINE_NO_DEPRECATED)
+  set(oneValueArgs PREFIX_NAME BASE_NAME EXPORT_MACRO_NAME EXPORT_FILE_NAME
+    DEPRECATED_MACRO_NAME NO_EXPORT_MACRO_NAME STATIC_DEFINE
+    NO_DEPRECATED_MACRO_NAME CUSTOM_CONTENT_FROM_VARIABLE INCLUDE_GUARD_NAME)
+  set(multiValueArgs)
+
+  cmake_parse_arguments(_GEH "${options}" "${oneValueArgs}" "${multiValueArgs}"
+    ${ARGN})
+
+  set(BASE_NAME "${TARGET_LIBRARY}")
+
+  if(_GEH_BASE_NAME)
+    set(BASE_NAME ${_GEH_BASE_NAME})
+  endif()
+
+  string(TOUPPER ${BASE_NAME} BASE_NAME_UPPER)
+  string(TOLOWER ${BASE_NAME} BASE_NAME_LOWER)
+
+  # Default options
+  set(EXPORT_MACRO_NAME "${_GEH_PREFIX_NAME}${BASE_NAME_UPPER}_EXPORT")
+  set(NO_EXPORT_MACRO_NAME "${_GEH_PREFIX_NAME}${BASE_NAME_UPPER}_NO_EXPORT")
+  set(EXPORT_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/${BASE_NAME_LOWER}_export.h")
+  set(DEPRECATED_MACRO_NAME "${_GEH_PREFIX_NAME}${BASE_NAME_UPPER}_DEPRECATED")
+  set(STATIC_DEFINE "${_GEH_PREFIX_NAME}${BASE_NAME_UPPER}_STATIC_DEFINE")
+  set(NO_DEPRECATED_MACRO_NAME
+    "${_GEH_PREFIX_NAME}${BASE_NAME_UPPER}_NO_DEPRECATED")
+
+  if(_GEH_UNPARSED_ARGUMENTS)
+    message(FATAL_ERROR "Unknown keywords given to GENERATE_EXPORT_HEADER(): \"${_GEH_UNPARSED_ARGUMENTS}\"")
+  endif()
+
+  if(_GEH_EXPORT_MACRO_NAME)
+    set(EXPORT_MACRO_NAME ${_GEH_PREFIX_NAME}${_GEH_EXPORT_MACRO_NAME})
+  endif()
+  string(MAKE_C_IDENTIFIER ${EXPORT_MACRO_NAME} EXPORT_MACRO_NAME)
+  if(_GEH_EXPORT_FILE_NAME)
+    if(IS_ABSOLUTE ${_GEH_EXPORT_FILE_NAME})
+      set(EXPORT_FILE_NAME ${_GEH_EXPORT_FILE_NAME})
+    else()
+      set(EXPORT_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/${_GEH_EXPORT_FILE_NAME}")
+    endif()
+  endif()
+  if(_GEH_DEPRECATED_MACRO_NAME)
+    set(DEPRECATED_MACRO_NAME ${_GEH_PREFIX_NAME}${_GEH_DEPRECATED_MACRO_NAME})
+  endif()
+  string(MAKE_C_IDENTIFIER ${DEPRECATED_MACRO_NAME} DEPRECATED_MACRO_NAME)
+  if(_GEH_NO_EXPORT_MACRO_NAME)
+    set(NO_EXPORT_MACRO_NAME ${_GEH_PREFIX_NAME}${_GEH_NO_EXPORT_MACRO_NAME})
+  endif()
+  string(MAKE_C_IDENTIFIER ${NO_EXPORT_MACRO_NAME} NO_EXPORT_MACRO_NAME)
+  if(_GEH_STATIC_DEFINE)
+    set(STATIC_DEFINE ${_GEH_PREFIX_NAME}${_GEH_STATIC_DEFINE})
+  endif()
+  string(MAKE_C_IDENTIFIER ${STATIC_DEFINE} STATIC_DEFINE)
+
+  if(_GEH_DEFINE_NO_DEPRECATED)
+    set(DEFINE_NO_DEPRECATED 1)
+  else()
+    set(DEFINE_NO_DEPRECATED 0)
+  endif()
+
+  if(_GEH_NO_DEPRECATED_MACRO_NAME)
+    set(NO_DEPRECATED_MACRO_NAME
+      ${_GEH_PREFIX_NAME}${_GEH_NO_DEPRECATED_MACRO_NAME})
+  endif()
+  string(MAKE_C_IDENTIFIER ${NO_DEPRECATED_MACRO_NAME} NO_DEPRECATED_MACRO_NAME)
+
+  if(_GEH_INCLUDE_GUARD_NAME)
+    set(INCLUDE_GUARD_NAME ${_GEH_INCLUDE_GUARD_NAME})
+  else()
+    set(INCLUDE_GUARD_NAME "${EXPORT_MACRO_NAME}_H")
+  endif()
+
+  get_target_property(EXPORT_IMPORT_CONDITION ${TARGET_LIBRARY} DEFINE_SYMBOL)
+
+  if(NOT EXPORT_IMPORT_CONDITION)
+    set(EXPORT_IMPORT_CONDITION ${TARGET_LIBRARY}_EXPORTS)
+  endif()
+  string(MAKE_C_IDENTIFIER ${EXPORT_IMPORT_CONDITION} EXPORT_IMPORT_CONDITION)
+
+  if(_GEH_CUSTOM_CONTENT_FROM_VARIABLE)
+    if(DEFINED "${_GEH_CUSTOM_CONTENT_FROM_VARIABLE}")
+      set(CUSTOM_CONTENT "${${_GEH_CUSTOM_CONTENT_FROM_VARIABLE}}")
+    else()
+      set(CUSTOM_CONTENT "")
+    endif()
+  endif()
+
+  configure_file("${_GENERATE_EXPORT_HEADER_MODULE_DIR}/exportheader.cmake.in"
+    "${EXPORT_FILE_NAME}" @ONLY)
+endmacro()
+
+function(GENERATE_EXPORT_HEADER TARGET_LIBRARY)
+  get_property(type TARGET ${TARGET_LIBRARY} PROPERTY TYPE)
+  if(NOT ${type} STREQUAL "STATIC_LIBRARY"
+      AND NOT ${type} STREQUAL "SHARED_LIBRARY"
+      AND NOT ${type} STREQUAL "OBJECT_LIBRARY"
+      AND NOT ${type} STREQUAL "MODULE_LIBRARY")
+    message(WARNING "This macro can only be used with libraries")
+    return()
+  endif()
+  _test_compiler_hidden_visibility()
+  _test_compiler_has_deprecated()
+  _do_set_macro_values(${TARGET_LIBRARY})
+  _do_generate_export_header(${TARGET_LIBRARY} ${ARGN})
+endfunction()
+
+function(add_compiler_export_flags)
+  if(NOT CMAKE_MINIMUM_REQUIRED_VERSION VERSION_LESS 2.8.12)
+    message(DEPRECATION "The add_compiler_export_flags function is obsolete. Use the CXX_VISIBILITY_PRESET and VISIBILITY_INLINES_HIDDEN target properties instead.")
+  endif()
+
+  _test_compiler_hidden_visibility()
+  _test_compiler_has_deprecated()
+
+  option(USE_COMPILER_HIDDEN_VISIBILITY
+    "Use HIDDEN visibility support if available." ON)
+  mark_as_advanced(USE_COMPILER_HIDDEN_VISIBILITY)
+  if(NOT (USE_COMPILER_HIDDEN_VISIBILITY AND COMPILER_HAS_HIDDEN_VISIBILITY))
+    # Just return if there are no flags to add.
+    return()
+  endif()
+
+  set (EXTRA_FLAGS "-fvisibility=hidden")
+
+  if(COMPILER_HAS_HIDDEN_INLINE_VISIBILITY)
+    set (EXTRA_FLAGS "${EXTRA_FLAGS} -fvisibility-inlines-hidden")
+  endif()
+
+  # Either return the extra flags needed in the supplied argument, or to the
+  # CMAKE_CXX_FLAGS if no argument is supplied.
+  if(ARGC GREATER 0)
+    set(${ARGV0} "${EXTRA_FLAGS}" PARENT_SCOPE)
+  else()
+    string(APPEND CMAKE_CXX_FLAGS " ${EXTRA_FLAGS}")
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" PARENT_SCOPE)
+  endif()
+endfunction()
diff --git a/share/cmake-3.22/Modules/GetPrerequisites.cmake b/share/cmake-3.22/Modules/GetPrerequisites.cmake
new file mode 100644
index 0000000..53584c6
--- /dev/null
+++ b/share/cmake-3.22/Modules/GetPrerequisites.cmake
@@ -0,0 +1,1048 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+GetPrerequisites
+----------------
+
+.. deprecated:: 3.16
+
+  Use :command:`file(GET_RUNTIME_DEPENDENCIES)` instead.
+
+Functions to analyze and list executable file prerequisites.
+
+This module provides functions to list the .dll, .dylib or .so files
+that an executable or shared library file depends on.  (Its
+prerequisites.)
+
+It uses various tools to obtain the list of required shared library
+files:
+
+::
+
+   dumpbin (Windows)
+   objdump (MinGW on Windows)
+   ldd (Linux/Unix)
+   otool (Mac OSX)
+
+.. versionchanged:: 3.16
+  The tool specified by ``CMAKE_OBJDUMP`` will be used, if set.
+
+The following functions are provided by this module:
+
+::
+
+   get_prerequisites
+   list_prerequisites
+   list_prerequisites_by_glob
+   gp_append_unique
+   is_file_executable
+   gp_item_default_embedded_path
+     (projects can override with gp_item_default_embedded_path_override)
+   gp_resolve_item
+     (projects can override with gp_resolve_item_override)
+   gp_resolved_file_type
+     (projects can override with gp_resolved_file_type_override)
+   gp_file_type
+
+::
+
+  GET_PREREQUISITES(<target> <prerequisites_var> <exclude_system> <recurse>
+                    <exepath> <dirs> [<rpaths>])
+
+Get the list of shared library files required by <target>.  The list
+in the variable named <prerequisites_var> should be empty on first
+entry to this function.  On exit, <prerequisites_var> will contain the
+list of required shared library files.
+
+<target> is the full path to an executable file.  <prerequisites_var>
+is the name of a CMake variable to contain the results.
+<exclude_system> must be 0 or 1 indicating whether to include or
+exclude "system" prerequisites.  If <recurse> is set to 1 all
+prerequisites will be found recursively, if set to 0 only direct
+prerequisites are listed.  <exepath> is the path to the top level
+executable used for @executable_path replacement on the Mac.  <dirs> is
+a list of paths where libraries might be found: these paths are
+searched first when a target without any path info is given.  Then
+standard system locations are also searched: PATH, Framework
+locations, /usr/lib...
+
+.. versionadded:: 3.14
+  The variable GET_PREREQUISITES_VERBOSE can be set to true to enable verbose
+  output.
+
+::
+
+  LIST_PREREQUISITES(<target> [<recurse> [<exclude_system> [<verbose>]]])
+
+Print a message listing the prerequisites of <target>.
+
+<target> is the name of a shared library or executable target or the
+full path to a shared library or executable file.  If <recurse> is set
+to 1 all prerequisites will be found recursively, if set to 0 only
+direct prerequisites are listed.  <exclude_system> must be 0 or 1
+indicating whether to include or exclude "system" prerequisites.  With
+<verbose> set to 0 only the full path names of the prerequisites are
+printed, set to 1 extra information will be displayed.
+
+::
+
+  LIST_PREREQUISITES_BY_GLOB(<glob_arg> <glob_exp>)
+
+Print the prerequisites of shared library and executable files
+matching a globbing pattern.  <glob_arg> is GLOB or GLOB_RECURSE and
+<glob_exp> is a globbing expression used with "file(GLOB" or
+"file(GLOB_RECURSE" to retrieve a list of matching files.  If a
+matching file is executable, its prerequisites are listed.
+
+Any additional (optional) arguments provided are passed along as the
+optional arguments to the list_prerequisites calls.
+
+::
+
+  GP_APPEND_UNIQUE(<list_var> <value>)
+
+Append <value> to the list variable <list_var> only if the value is
+not already in the list.
+
+::
+
+  IS_FILE_EXECUTABLE(<file> <result_var>)
+
+Return 1 in <result_var> if <file> is a binary executable, 0
+otherwise.
+
+::
+
+  GP_ITEM_DEFAULT_EMBEDDED_PATH(<item> <default_embedded_path_var>)
+
+Return the path that others should refer to the item by when the item
+is embedded inside a bundle.
+
+Override on a per-project basis by providing a project-specific
+gp_item_default_embedded_path_override function.
+
+::
+
+  GP_RESOLVE_ITEM(<context> <item> <exepath> <dirs> <resolved_item_var>
+                  [<rpaths>])
+
+Resolve an item into an existing full path file.
+
+Override on a per-project basis by providing a project-specific
+gp_resolve_item_override function.
+
+::
+
+  GP_RESOLVED_FILE_TYPE(<original_file> <file> <exepath> <dirs> <type_var>
+                        [<rpaths>])
+
+Return the type of <file> with respect to <original_file>.  String
+describing type of prerequisite is returned in variable named
+<type_var>.
+
+Use <exepath> and <dirs> if necessary to resolve non-absolute <file>
+values -- but only for non-embedded items.
+
+Possible types are:
+
+::
+
+   system
+   local
+   embedded
+   other
+
+Override on a per-project basis by providing a project-specific
+gp_resolved_file_type_override function.
+
+::
+
+  GP_FILE_TYPE(<original_file> <file> <type_var>)
+
+Return the type of <file> with respect to <original_file>.  String
+describing type of prerequisite is returned in variable named
+<type_var>.
+
+Possible types are:
+
+::
+
+   system
+   local
+   embedded
+   other
+#]=======================================================================]
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0057 NEW) # if IN_LIST
+
+function(gp_append_unique list_var value)
+  if(NOT value IN_LIST ${list_var})
+    set(${list_var} ${${list_var}} "${value}" PARENT_SCOPE)
+  endif()
+endfunction()
+
+
+function(is_file_executable file result_var)
+  #
+  # A file is not executable until proven otherwise:
+  #
+  set(${result_var} 0 PARENT_SCOPE)
+
+  get_filename_component(file_full "${file}" ABSOLUTE)
+  string(TOLOWER "${file_full}" file_full_lower)
+
+  # If file name ends in .exe on Windows, *assume* executable:
+  #
+  if(WIN32 AND NOT UNIX)
+    if("${file_full_lower}" MATCHES "\\.exe$")
+      set(${result_var} 1 PARENT_SCOPE)
+      return()
+    endif()
+
+    # A clause could be added here that uses output or return value of dumpbin
+    # to determine ${result_var}. In 99%+? practical cases, the exe name
+    # match will be sufficient...
+    #
+  endif()
+
+  # Use the information returned from the Unix shell command "file" to
+  # determine if ${file_full} should be considered an executable file...
+  #
+  # If the file command's output contains "executable" and does *not* contain
+  # "text" then it is likely an executable suitable for prerequisite analysis
+  # via the get_prerequisites macro.
+  #
+  if(UNIX)
+    if(NOT file_cmd)
+      find_program(file_cmd "file")
+      mark_as_advanced(file_cmd)
+    endif()
+
+    if(file_cmd)
+      execute_process(COMMAND "${file_cmd}" "${file_full}"
+        RESULT_VARIABLE file_rv
+        OUTPUT_VARIABLE file_ov
+        ERROR_VARIABLE file_ev
+        OUTPUT_STRIP_TRAILING_WHITESPACE
+        )
+      if(NOT file_rv STREQUAL "0")
+        message(FATAL_ERROR "${file_cmd} failed: ${file_rv}\n${file_ev}")
+      endif()
+
+      # Replace the name of the file in the output with a placeholder token
+      # (the string " _file_full_ ") so that just in case the path name of
+      # the file contains the word "text" or "executable" we are not fooled
+      # into thinking "the wrong thing" because the file name matches the
+      # other 'file' command output we are looking for...
+      #
+      string(REPLACE "${file_full}" " _file_full_ " file_ov "${file_ov}")
+      string(TOLOWER "${file_ov}" file_ov)
+
+      #message(STATUS "file_ov='${file_ov}'")
+      if("${file_ov}" MATCHES "executable")
+        #message(STATUS "executable!")
+        if("${file_ov}" MATCHES "text")
+          #message(STATUS "but text, so *not* a binary executable!")
+        else()
+          set(${result_var} 1 PARENT_SCOPE)
+          return()
+        endif()
+      endif()
+
+      # Also detect position independent executables on Linux,
+      # where "file" gives "shared object ... (uses shared libraries)"
+      if("${file_ov}" MATCHES "shared object.*\(uses shared libs\)")
+        set(${result_var} 1 PARENT_SCOPE)
+        return()
+      endif()
+
+      # "file" version 5.22 does not print "(used shared libraries)"
+      # but uses "interpreter"
+      if("${file_ov}" MATCHES "shared object.*interpreter")
+        set(${result_var} 1 PARENT_SCOPE)
+        return()
+      endif()
+
+    else()
+      message(STATUS "warning: No 'file' command, skipping execute_process...")
+    endif()
+  endif()
+endfunction()
+
+
+function(gp_item_default_embedded_path item default_embedded_path_var)
+
+  # On Windows and Linux, "embed" prerequisites in the same directory
+  # as the executable by default:
+  #
+  set(path "@executable_path")
+
+  # On the Mac, relative to the executable depending on the type
+  # of the thing we are embedding:
+  #
+  if(APPLE)
+    #
+    # The assumption here is that all executables in the bundle will be
+    # in same-level-directories inside the bundle. The parent directory
+    # of an executable inside the bundle should be MacOS or a sibling of
+    # MacOS and all embedded paths returned from here will begin with
+    # "@executable_path/../" and will work from all executables in all
+    # such same-level-directories inside the bundle.
+    #
+
+    # By default, embed things right next to the main bundle executable:
+    #
+    set(path "@executable_path/../../Contents/MacOS")
+
+    # Embed frameworks and .dylibs in the embedded "Frameworks" directory
+    # (sibling of MacOS):
+    #
+    if(item MATCHES "[^/]+\\.framework/" OR item MATCHES "\\.dylib$")
+      set(path "@executable_path/../Frameworks")
+    endif()
+  endif()
+
+  # Provide a hook so that projects can override the default embedded location
+  # of any given library by whatever logic they choose:
+  #
+  if(COMMAND gp_item_default_embedded_path_override)
+    gp_item_default_embedded_path_override("${item}" path)
+  endif()
+
+  set(${default_embedded_path_var} "${path}" PARENT_SCOPE)
+endfunction()
+
+
+function(gp_resolve_item context item exepath dirs resolved_item_var)
+  set(resolved 0)
+  set(resolved_item "${item}")
+  if(ARGC GREATER 5)
+    set(rpaths "${ARGV5}")
+  else()
+    set(rpaths "")
+  endif()
+
+  # Is it already resolved?
+  #
+  if(IS_ABSOLUTE "${resolved_item}" AND EXISTS "${resolved_item}")
+    set(resolved 1)
+  endif()
+
+  if(NOT resolved)
+    if(item MATCHES "^@executable_path")
+      #
+      # @executable_path references are assumed relative to exepath
+      #
+      string(REPLACE "@executable_path" "${exepath}" ri "${item}")
+      get_filename_component(ri "${ri}" ABSOLUTE)
+
+      if(EXISTS "${ri}")
+        #message(STATUS "info: embedded item exists (${ri})")
+        set(resolved 1)
+        set(resolved_item "${ri}")
+      else()
+        message(STATUS "warning: embedded item does not exist '${ri}'")
+      endif()
+    endif()
+  endif()
+
+  if(NOT resolved)
+    if(item MATCHES "^@loader_path")
+      #
+      # @loader_path references are assumed relative to the
+      # PATH of the given "context" (presumably another library)
+      #
+      get_filename_component(contextpath "${context}" PATH)
+      string(REPLACE "@loader_path" "${contextpath}" ri "${item}")
+      get_filename_component(ri "${ri}" ABSOLUTE)
+
+      if(EXISTS "${ri}")
+        #message(STATUS "info: embedded item exists (${ri})")
+        set(resolved 1)
+        set(resolved_item "${ri}")
+      else()
+        message(STATUS "warning: embedded item does not exist '${ri}'")
+      endif()
+    endif()
+  endif()
+
+  if(NOT resolved)
+    if(item MATCHES "^@rpath")
+      #
+      # @rpath references are relative to the paths built into the binaries with -rpath
+      # We handle this case like we do for other Unixes
+      #
+      string(REPLACE "@rpath/" "" norpath_item "${item}")
+
+      set(ri "ri-NOTFOUND")
+      find_file(ri "${norpath_item}" ${exepath} ${dirs} ${rpaths} NO_DEFAULT_PATH)
+      if(ri)
+        #message(STATUS "info: 'find_file' in exepath/dirs/rpaths (${ri})")
+        set(resolved 1)
+        set(resolved_item "${ri}")
+        set(ri "ri-NOTFOUND")
+      endif()
+
+    endif()
+  endif()
+
+  if(NOT resolved)
+    set(ri "ri-NOTFOUND")
+    find_file(ri "${item}" ${exepath} ${dirs} NO_DEFAULT_PATH)
+    find_file(ri "${item}" ${exepath} ${dirs} /usr/lib)
+
+    get_filename_component(basename_item "${item}" NAME)
+    find_file(ri "${basename_item}" PATHS ${exepath} ${dirs} NO_DEFAULT_PATH)
+    find_file(ri "${basename_item}" PATHS /usr/lib)
+
+    if(ri)
+      #message(STATUS "info: 'find_file' in exepath/dirs (${ri})")
+      set(resolved 1)
+      set(resolved_item "${ri}")
+      set(ri "ri-NOTFOUND")
+    endif()
+  endif()
+
+  if(NOT resolved)
+    if(item MATCHES "[^/]+\\.framework/")
+      set(fw "fw-NOTFOUND")
+      find_file(fw "${item}"
+        "~/Library/Frameworks"
+        "/Library/Frameworks"
+        "/System/Library/Frameworks"
+      )
+      if(fw)
+        #message(STATUS "info: 'find_file' found framework (${fw})")
+        set(resolved 1)
+        set(resolved_item "${fw}")
+        set(fw "fw-NOTFOUND")
+      endif()
+    endif()
+  endif()
+
+  # Using find_program on Windows will find dll files that are in the PATH.
+  # (Converting simple file names into full path names if found.)
+  #
+  if(WIN32 AND NOT UNIX)
+  if(NOT resolved)
+    set(ri "ri-NOTFOUND")
+    find_program(ri "${item}" PATHS ${exepath} ${dirs} NO_DEFAULT_PATH)
+    find_program(ri "${item}" PATHS ${exepath} ${dirs})
+    if(ri)
+      #message(STATUS "info: 'find_program' in exepath/dirs (${ri})")
+      set(resolved 1)
+      set(resolved_item "${ri}")
+      set(ri "ri-NOTFOUND")
+    endif()
+  endif()
+  endif()
+
+  # Provide a hook so that projects can override item resolution
+  # by whatever logic they choose:
+  #
+  if(COMMAND gp_resolve_item_override)
+    gp_resolve_item_override("${context}" "${item}" "${exepath}" "${dirs}" resolved_item resolved)
+  endif()
+
+  if(NOT resolved)
+    message(STATUS "
+warning: cannot resolve item '${item}'
+
+  possible problems:
+    need more directories?
+    need to use InstallRequiredSystemLibraries?
+    run in install tree instead of build tree?
+")
+#    message(STATUS "
+#******************************************************************************
+#warning: cannot resolve item '${item}'
+#
+#  possible problems:
+#    need more directories?
+#    need to use InstallRequiredSystemLibraries?
+#    run in install tree instead of build tree?
+#
+#    context='${context}'
+#    item='${item}'
+#    exepath='${exepath}'
+#    dirs='${dirs}'
+#    resolved_item_var='${resolved_item_var}'
+#******************************************************************************
+#")
+  endif()
+
+  set(${resolved_item_var} "${resolved_item}" PARENT_SCOPE)
+endfunction()
+
+
+function(gp_resolved_file_type original_file file exepath dirs type_var)
+  if(ARGC GREATER 5)
+    set(rpaths "${ARGV5}")
+  else()
+    set(rpaths "")
+  endif()
+  #message(STATUS "**")
+
+  if(NOT IS_ABSOLUTE "${original_file}")
+    message(STATUS "warning: gp_resolved_file_type expects absolute full path for first arg original_file")
+  endif()
+  if(IS_ABSOLUTE "${original_file}")
+    get_filename_component(original_file "${original_file}" ABSOLUTE) # canonicalize path
+  endif()
+
+  set(is_embedded 0)
+  set(is_local 0)
+  set(is_system 0)
+
+  set(resolved_file "${file}")
+
+  if("${file}" MATCHES "^@(executable|loader)_path")
+    set(is_embedded 1)
+  endif()
+
+  if(NOT is_embedded)
+    if(NOT IS_ABSOLUTE "${file}")
+      gp_resolve_item("${original_file}" "${file}" "${exepath}" "${dirs}" resolved_file "${rpaths}")
+    endif()
+    if(IS_ABSOLUTE "${resolved_file}")
+      get_filename_component(resolved_file "${resolved_file}" ABSOLUTE) # canonicalize path
+    endif()
+
+    string(TOLOWER "${original_file}" original_lower)
+    string(TOLOWER "${resolved_file}" lower)
+
+    if(UNIX)
+      if(resolved_file MATCHES "^(/lib/|/lib32/|/libx32/|/lib64/|/usr/lib/|/usr/lib32/|/usr/libx32/|/usr/lib64/|/usr/X11R6/|/usr/bin/)")
+        set(is_system 1)
+      endif()
+    endif()
+
+    if(APPLE)
+      if(resolved_file MATCHES "^(/System/Library/|/usr/lib/)")
+        set(is_system 1)
+      endif()
+    endif()
+
+    if(WIN32)
+      string(TOLOWER "$ENV{SystemRoot}" sysroot)
+      file(TO_CMAKE_PATH "${sysroot}" sysroot)
+
+      string(TOLOWER "$ENV{windir}" windir)
+      file(TO_CMAKE_PATH "${windir}" windir)
+
+      if(lower MATCHES "^(${sysroot}/sys(tem|wow)|${windir}/sys(tem|wow)|(.*/)*(msvc|api-ms-win-|vcruntime)[^/]+dll)")
+        set(is_system 1)
+      endif()
+
+      if(UNIX)
+        # if cygwin, we can get the properly formed windows paths from cygpath
+        find_program(CYGPATH_EXECUTABLE cygpath)
+
+        if(CYGPATH_EXECUTABLE)
+          execute_process(COMMAND ${CYGPATH_EXECUTABLE} -W
+                          RESULT_VARIABLE env_rv
+                          OUTPUT_VARIABLE env_windir
+                          ERROR_VARIABLE env_ev
+                          OUTPUT_STRIP_TRAILING_WHITESPACE)
+          if(NOT env_rv STREQUAL "0")
+            message(FATAL_ERROR "${CYGPATH_EXECUTABLE} -W failed: ${env_rv}\n${env_ev}")
+          endif()
+          execute_process(COMMAND ${CYGPATH_EXECUTABLE} -S
+                          RESULT_VARIABLE env_rv
+                          OUTPUT_VARIABLE env_sysdir
+                          ERROR_VARIABLE env_ev
+                          OUTPUT_STRIP_TRAILING_WHITESPACE)
+          if(NOT env_rv STREQUAL "0")
+            message(FATAL_ERROR "${CYGPATH_EXECUTABLE} -S failed: ${env_rv}\n${env_ev}")
+          endif()
+          string(TOLOWER "${env_windir}" windir)
+          string(TOLOWER "${env_sysdir}" sysroot)
+
+          if(lower MATCHES "^(${sysroot}/sys(tem|wow)|${windir}/sys(tem|wow)|(.*/)*(msvc|api-ms-win-|vcruntime)[^/]+dll)")
+            set(is_system 1)
+          endif()
+        endif()
+      endif()
+    endif()
+
+    if(NOT is_system)
+      get_filename_component(original_path "${original_lower}" PATH)
+      get_filename_component(path "${lower}" PATH)
+      if(original_path STREQUAL path)
+        set(is_local 1)
+      else()
+        string(LENGTH "${original_path}/" original_length)
+        string(LENGTH "${lower}" path_length)
+        if(${path_length} GREATER ${original_length})
+          string(SUBSTRING "${lower}" 0 ${original_length} path)
+          if("${original_path}/" STREQUAL path)
+            set(is_embedded 1)
+          endif()
+        endif()
+      endif()
+    endif()
+  endif()
+
+  # Return type string based on computed booleans:
+  #
+  set(type "other")
+
+  if(is_system)
+    set(type "system")
+  elseif(is_embedded)
+    set(type "embedded")
+  elseif(is_local)
+    set(type "local")
+  endif()
+
+  #message(STATUS "gp_resolved_file_type: '${file}' '${resolved_file}'")
+  #message(STATUS "                type: '${type}'")
+
+  if(NOT is_embedded)
+    if(NOT IS_ABSOLUTE "${resolved_file}")
+      if(lower MATCHES "^(msvc|api-ms-win-|vcruntime)[^/]+dll" AND is_system)
+        message(STATUS "info: non-absolute msvc file '${file}' returning type '${type}'")
+      else()
+        message(STATUS "warning: gp_resolved_file_type non-absolute file '${file}' returning type '${type}' -- possibly incorrect")
+      endif()
+    endif()
+  endif()
+
+  # Provide a hook so that projects can override the decision on whether a
+  # library belongs to the system or not by whatever logic they choose:
+  #
+  if(COMMAND gp_resolved_file_type_override)
+    gp_resolved_file_type_override("${resolved_file}" type)
+  endif()
+
+  set(${type_var} "${type}" PARENT_SCOPE)
+
+  #message(STATUS "**")
+endfunction()
+
+
+function(gp_file_type original_file file type_var)
+  if(NOT IS_ABSOLUTE "${original_file}")
+    message(STATUS "warning: gp_file_type expects absolute full path for first arg original_file")
+  endif()
+
+  get_filename_component(exepath "${original_file}" PATH)
+
+  set(type "")
+  gp_resolved_file_type("${original_file}" "${file}" "${exepath}" "" type)
+
+  set(${type_var} "${type}" PARENT_SCOPE)
+endfunction()
+
+
+function(get_prerequisites target prerequisites_var exclude_system recurse exepath dirs)
+  set(verbose 0)
+  set(eol_char "E")
+  if(ARGC GREATER 6)
+    set(rpaths "${ARGV6}")
+  else()
+    set(rpaths "")
+  endif()
+
+  if(GET_PREREQUISITES_VERBOSE)
+    set(verbose 1)
+  endif()
+
+  if(NOT IS_ABSOLUTE "${target}")
+    message("warning: target '${target}' is not absolute...")
+  endif()
+
+  if(NOT EXISTS "${target}")
+    message("warning: target '${target}' does not exist...")
+    return()
+  endif()
+
+  # Check for a script by extension (.bat,.sh,...) or if the file starts with "#!" (shebang)
+  file(READ ${target} file_contents LIMIT 5)
+  if(target MATCHES "\\.(bat|c?sh|bash|ksh|cmd)$" OR file_contents MATCHES "^#!")
+    message(STATUS "GetPrequisites(${target}) : ignoring script file")
+    # Clear var
+    set(${prerequisites_var} "" PARENT_SCOPE)
+    return()
+  endif()
+
+  set(gp_cmd_paths ${gp_cmd_paths}
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\14.0;InstallDir]/../../VC/bin"
+    "$ENV{VS140COMNTOOLS}/../../VC/bin"
+    "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\12.0;InstallDir]/../../VC/bin"
+    "$ENV{VS120COMNTOOLS}/../../VC/bin"
+    "C:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0;InstallDir]/../../VC/bin"
+    "$ENV{VS110COMNTOOLS}/../../VC/bin"
+    "C:/Program Files (x86)/Microsoft Visual Studio 11.0/VC/bin"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0;InstallDir]/../../VC/bin"
+    "$ENV{VS100COMNTOOLS}/../../VC/bin"
+    "C:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/bin"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\9.0;InstallDir]/../../VC/bin"
+    "$ENV{VS90COMNTOOLS}/../../VC/bin"
+    "C:/Program Files/Microsoft Visual Studio 9.0/VC/bin"
+    "C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/bin"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0;InstallDir]/../../VC/bin"
+    "$ENV{VS80COMNTOOLS}/../../VC/bin"
+    "C:/Program Files/Microsoft Visual Studio 8/VC/BIN"
+    "C:/Program Files (x86)/Microsoft Visual Studio 8/VC/BIN"
+    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\7.1;InstallDir]/../../VC7/bin"
+    "$ENV{VS71COMNTOOLS}/../../VC7/bin"
+    "C:/Program Files/Microsoft Visual Studio .NET 2003/VC7/BIN"
+    "C:/Program Files (x86)/Microsoft Visual Studio .NET 2003/VC7/BIN"
+    )
+
+  # <setup-gp_tool-vars>
+  #
+  # Try to choose the right tool by default. Caller can set gp_tool prior to
+  # calling this function to force using a different tool.
+  #
+  if(NOT gp_tool)
+    set(gp_tool "ldd")
+
+    if(APPLE)
+      set(gp_tool "otool")
+    endif()
+
+    if(WIN32 AND NOT UNIX) # This is how to check for cygwin, har!
+      find_program(gp_dumpbin "dumpbin" PATHS ${gp_cmd_paths})
+      if(gp_dumpbin)
+        set(gp_tool "dumpbin")
+      elseif(CMAKE_OBJDUMP) # Try harder. Maybe we're on MinGW
+        set(gp_tool "${CMAKE_OBJDUMP}")
+      else()
+        set(gp_tool "objdump")
+      endif()
+    endif()
+  endif()
+
+  find_program(gp_cmd ${gp_tool} PATHS ${gp_cmd_paths})
+
+  if(NOT gp_cmd)
+    message(STATUS "warning: could not find '${gp_tool}' - cannot analyze prerequisites...")
+    return()
+  endif()
+
+  set(gp_cmd_maybe_filter)      # optional command to pre-filter gp_tool results
+
+  if(gp_tool MATCHES "ldd$")
+    set(gp_cmd_args "")
+    set(gp_regex "^[\t ]*[^\t ]+ =>[\t ]+([^\t\(]+)( \(.+\))?${eol_char}$")
+    set(gp_regex_error "not found${eol_char}$")
+    set(gp_regex_fallback "^[\t ]*([^\t ]+) => ([^\t ]+).*${eol_char}$")
+    set(gp_regex_cmp_count 1)
+  elseif(gp_tool MATCHES "otool$")
+    set(gp_cmd_args "-L")
+    set(gp_regex "^\t([^\t]+) \\(compatibility version ([0-9]+.[0-9]+.[0-9]+), current version ([0-9]+.[0-9]+.[0-9]+)(, weak)?\\)${eol_char}$")
+    set(gp_regex_error "")
+    set(gp_regex_fallback "")
+    set(gp_regex_cmp_count 3)
+  elseif(gp_tool MATCHES "dumpbin$")
+    set(gp_cmd_args "/dependents")
+    set(gp_regex "^    ([^ ].*[Dd][Ll][Ll])${eol_char}$")
+    set(gp_regex_error "")
+    set(gp_regex_fallback "")
+    set(gp_regex_cmp_count 1)
+  elseif(gp_tool MATCHES "objdump(\\.exe)?$")
+    set(gp_cmd_args "-p")
+    set(gp_regex "^\t*DLL Name: (.*\\.[Dd][Ll][Ll])${eol_char}$")
+    set(gp_regex_error "")
+    set(gp_regex_fallback "")
+    set(gp_regex_cmp_count 1)
+    # objdump generates copious output so we create a grep filter to pre-filter results
+    if(WIN32)
+      find_program(gp_grep_cmd findstr)
+    else()
+      find_program(gp_grep_cmd grep)
+    endif()
+    if(gp_grep_cmd)
+      set(gp_cmd_maybe_filter COMMAND ${gp_grep_cmd} "-a" "^[[:blank:]]*DLL Name: ")
+    endif()
+  else()
+    message(STATUS "warning: gp_tool='${gp_tool}' is an unknown tool...")
+    message(STATUS "CMake function get_prerequisites needs more code to handle '${gp_tool}'")
+    message(STATUS "Valid gp_tool values are dumpbin, ldd, objdump and otool.")
+    return()
+  endif()
+
+
+  if(gp_tool MATCHES "dumpbin$")
+    # When running dumpbin, it also needs the "Common7/IDE" directory in the
+    # PATH. It will already be in the PATH if being run from a Visual Studio
+    # command prompt. Add it to the PATH here in case we are running from a
+    # different command prompt.
+    #
+    get_filename_component(gp_cmd_dir "${gp_cmd}" PATH)
+    get_filename_component(gp_cmd_dlls_dir "${gp_cmd_dir}/../../Common7/IDE" ABSOLUTE)
+    # Use cmake paths as a user may have a PATH element ending with a backslash.
+    # This will escape the list delimiter and create havoc!
+    if(EXISTS "${gp_cmd_dlls_dir}")
+      # only add to the path if it is not already in the path
+      set(gp_found_cmd_dlls_dir 0)
+      file(TO_CMAKE_PATH "$ENV{PATH}" env_path)
+      foreach(gp_env_path_element ${env_path})
+        if(gp_env_path_element STREQUAL gp_cmd_dlls_dir)
+          set(gp_found_cmd_dlls_dir 1)
+        endif()
+      endforeach()
+
+      if(NOT gp_found_cmd_dlls_dir)
+        file(TO_NATIVE_PATH "${gp_cmd_dlls_dir}" gp_cmd_dlls_dir)
+        set(ENV{PATH} "$ENV{PATH};${gp_cmd_dlls_dir}")
+      endif()
+    endif()
+  endif()
+  #
+  # </setup-gp_tool-vars>
+
+  if(gp_tool MATCHES "ldd$")
+    set(old_ld_env "$ENV{LD_LIBRARY_PATH}")
+    set(new_ld_env "${exepath}")
+    foreach(dir ${dirs})
+      string(APPEND new_ld_env ":${dir}")
+    endforeach()
+    set(ENV{LD_LIBRARY_PATH} "${new_ld_env}:$ENV{LD_LIBRARY_PATH}")
+  endif()
+
+
+  # Track new prerequisites at each new level of recursion. Start with an
+  # empty list at each level:
+  #
+  set(unseen_prereqs)
+
+  # Run gp_cmd on the target:
+  #
+  execute_process(
+    COMMAND ${gp_cmd} ${gp_cmd_args} ${target}
+    ${gp_cmd_maybe_filter}
+    RESULT_VARIABLE gp_rv
+    OUTPUT_VARIABLE gp_cmd_ov
+    ERROR_VARIABLE gp_ev
+    )
+
+  if(gp_tool MATCHES "dumpbin$")
+    # Exclude delay load dependencies under windows (they are listed in dumpbin output after the message below)
+    string(FIND "${gp_cmd_ov}" "Image has the following delay load dependencies" gp_delayload_pos)
+    if (${gp_delayload_pos} GREATER -1)
+      string(SUBSTRING "${gp_cmd_ov}" 0 ${gp_delayload_pos} gp_cmd_ov_no_delayload_deps)
+      string(SUBSTRING "${gp_cmd_ov}" ${gp_delayload_pos} -1 gp_cmd_ov_delayload_deps)
+      if (verbose)
+        message(STATUS "GetPrequisites(${target}) : ignoring the following delay load dependencies :\n ${gp_cmd_ov_delayload_deps}")
+      endif()
+      set(gp_cmd_ov ${gp_cmd_ov_no_delayload_deps})
+    endif()
+  endif()
+
+  if(NOT gp_rv STREQUAL "0")
+    if(gp_tool MATCHES "dumpbin$")
+      # dumpbin error messages seem to go to stdout
+      message(FATAL_ERROR "${gp_cmd} failed: ${gp_rv}\n${gp_ev}\n${gp_cmd_ov}")
+    else()
+      message(FATAL_ERROR "${gp_cmd} failed: ${gp_rv}\n${gp_ev}")
+    endif()
+  endif()
+
+  if(gp_tool MATCHES "ldd$")
+    set(ENV{LD_LIBRARY_PATH} "${old_ld_env}")
+  endif()
+
+  if(verbose)
+    message(STATUS "<RawOutput cmd='${gp_cmd} ${gp_cmd_args} ${target}'>")
+    message(STATUS "gp_cmd_ov='${gp_cmd_ov}'")
+    message(STATUS "</RawOutput>")
+  endif()
+
+  get_filename_component(target_dir "${target}" PATH)
+
+  # Convert to a list of lines:
+  #
+  string(REPLACE ";" "\\;" candidates "${gp_cmd_ov}")
+  string(REPLACE "\n" "${eol_char};" candidates "${candidates}")
+
+  # check for install id and remove it from list, since otool -L can include a
+  # reference to itself
+  set(gp_install_id)
+  if(gp_tool MATCHES "otool$")
+    execute_process(
+      COMMAND ${gp_cmd} -D ${target}
+      RESULT_VARIABLE otool_rv
+      OUTPUT_VARIABLE gp_install_id_ov
+      ERROR_VARIABLE otool_ev
+      )
+    if(NOT otool_rv STREQUAL "0")
+      message(FATAL_ERROR "otool -D failed: ${otool_rv}\n${otool_ev}")
+    endif()
+    # second line is install name
+    string(REGEX REPLACE ".*:\n" "" gp_install_id "${gp_install_id_ov}")
+    if(gp_install_id)
+      # trim
+      string(REGEX MATCH "[^\n ].*[^\n ]" gp_install_id "${gp_install_id}")
+      #message("INSTALL ID is \"${gp_install_id}\"")
+    endif()
+  endif()
+
+  # Analyze each line for file names that match the regular expression:
+  #
+  foreach(candidate ${candidates})
+  if("${candidate}" MATCHES "${gp_regex}")
+
+    # Extract information from each candidate:
+    if(gp_regex_error AND "${candidate}" MATCHES "${gp_regex_error}")
+      string(REGEX REPLACE "${gp_regex_fallback}" "\\1" raw_item "${candidate}")
+    else()
+      string(REGEX REPLACE "${gp_regex}" "\\1" raw_item "${candidate}")
+    endif()
+
+    if(gp_regex_cmp_count GREATER 1)
+      string(REGEX REPLACE "${gp_regex}" "\\2" raw_compat_version "${candidate}")
+      string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\1" compat_major_version "${raw_compat_version}")
+      string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\2" compat_minor_version "${raw_compat_version}")
+      string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\3" compat_patch_version "${raw_compat_version}")
+    endif()
+
+    if(gp_regex_cmp_count GREATER 2)
+      string(REGEX REPLACE "${gp_regex}" "\\3" raw_current_version "${candidate}")
+      string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\1" current_major_version "${raw_current_version}")
+      string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\2" current_minor_version "${raw_current_version}")
+      string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\3" current_patch_version "${raw_current_version}")
+    endif()
+
+    # Use the raw_item as the list entries returned by this function. Use the
+    # gp_resolve_item function to resolve it to an actual full path file if
+    # necessary.
+    #
+    set(item "${raw_item}")
+
+    # Add each item unless it is excluded:
+    #
+    set(add_item 1)
+
+    if(item STREQUAL gp_install_id)
+      set(add_item 0)
+    endif()
+
+    if(add_item AND ${exclude_system})
+      set(type "")
+      gp_resolved_file_type("${target}" "${item}" "${exepath}" "${dirs}" type "${rpaths}")
+
+      if(type STREQUAL "system")
+        set(add_item 0)
+      endif()
+    endif()
+
+    if(add_item)
+      list(LENGTH ${prerequisites_var} list_length_before_append)
+      gp_append_unique(${prerequisites_var} "${item}")
+      list(LENGTH ${prerequisites_var} list_length_after_append)
+
+      if(${recurse})
+        # If item was really added, this is the first time we have seen it.
+        # Add it to unseen_prereqs so that we can recursively add *its*
+        # prerequisites...
+        #
+        # But first: resolve its name to an absolute full path name such
+        # that the analysis tools can simply accept it as input.
+        #
+        if(NOT list_length_before_append EQUAL list_length_after_append)
+          gp_resolve_item("${target}" "${item}" "${exepath}" "${dirs}" resolved_item "${rpaths}")
+          if(EXISTS "${resolved_item}")
+            # Recurse only if we could resolve the item.
+            # Otherwise the prerequisites_var list will be cleared
+            set(unseen_prereqs ${unseen_prereqs} "${resolved_item}")
+          endif()
+        endif()
+      endif()
+    endif()
+  else()
+    if(verbose)
+      message(STATUS "ignoring non-matching line: '${candidate}'")
+    endif()
+  endif()
+  endforeach()
+
+  list(LENGTH ${prerequisites_var} prerequisites_var_length)
+  if(prerequisites_var_length GREATER 0)
+    list(SORT ${prerequisites_var})
+  endif()
+  if(${recurse})
+    set(more_inputs ${unseen_prereqs})
+    foreach(input ${more_inputs})
+      get_prerequisites("${input}" ${prerequisites_var} ${exclude_system} ${recurse} "${exepath}" "${dirs}" "${rpaths}")
+    endforeach()
+  endif()
+
+  set(${prerequisites_var} ${${prerequisites_var}} PARENT_SCOPE)
+endfunction()
+
+
+function(list_prerequisites target)
+  if(ARGC GREATER 1 AND NOT "${ARGV1}" STREQUAL "")
+    set(all "${ARGV1}")
+  else()
+    set(all 1)
+  endif()
+
+  if(ARGC GREATER 2 AND NOT "${ARGV2}" STREQUAL "")
+    set(exclude_system "${ARGV2}")
+  else()
+    set(exclude_system 0)
+  endif()
+
+  if(ARGC GREATER 3 AND NOT "${ARGV3}" STREQUAL "")
+    set(verbose "${ARGV3}")
+  else()
+    set(verbose 0)
+  endif()
+
+  set(count 0)
+  set(count_str "")
+  set(print_count "${verbose}")
+  set(print_prerequisite_type "${verbose}")
+  set(print_target "${verbose}")
+  set(type_str "")
+
+  get_filename_component(exepath "${target}" PATH)
+
+  set(prereqs "")
+  get_prerequisites("${target}" prereqs ${exclude_system} ${all} "${exepath}" "")
+
+  if(print_target)
+    message(STATUS "File '${target}' depends on:")
+  endif()
+
+  foreach(d ${prereqs})
+    math(EXPR count "${count} + 1")
+
+    if(print_count)
+      set(count_str "${count}. ")
+    endif()
+
+    if(print_prerequisite_type)
+      gp_file_type("${target}" "${d}" type)
+      set(type_str " (${type})")
+    endif()
+
+    message(STATUS "${count_str}${d}${type_str}")
+  endforeach()
+endfunction()
+
+
+function(list_prerequisites_by_glob glob_arg glob_exp)
+  message(STATUS "=============================================================================")
+  message(STATUS "List prerequisites of executables matching ${glob_arg} '${glob_exp}'")
+  message(STATUS "")
+  file(${glob_arg} file_list ${glob_exp})
+  foreach(f ${file_list})
+    is_file_executable("${f}" is_f_executable)
+    if(is_f_executable)
+      message(STATUS "=============================================================================")
+      list_prerequisites("${f}" ${ARGN})
+      message(STATUS "")
+    endif()
+  endforeach()
+endfunction()
+
+cmake_policy(POP)
diff --git a/share/cmake-3.22/Modules/GoogleTest.cmake b/share/cmake-3.22/Modules/GoogleTest.cmake
new file mode 100644
index 0000000..f5f4f02
--- /dev/null
+++ b/share/cmake-3.22/Modules/GoogleTest.cmake
@@ -0,0 +1,573 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+GoogleTest
+----------
+
+.. versionadded:: 3.9
+
+This module defines functions to help use the Google Test infrastructure.  Two
+mechanisms for adding tests are provided. :command:`gtest_add_tests` has been
+around for some time, originally via ``find_package(GTest)``.
+:command:`gtest_discover_tests` was introduced in CMake 3.10.
+
+The (older) :command:`gtest_add_tests` scans source files to identify tests.
+This is usually effective, with some caveats, including in cross-compiling
+environments, and makes setting additional properties on tests more convenient.
+However, its handling of parameterized tests is less comprehensive, and it
+requires re-running CMake to detect changes to the list of tests.
+
+The (newer) :command:`gtest_discover_tests` discovers tests by asking the
+compiled test executable to enumerate its tests.  This is more robust and
+provides better handling of parameterized tests, and does not require CMake
+to be re-run when tests change.  However, it may not work in a cross-compiling
+environment, and setting test properties is less convenient.
+
+More details can be found in the documentation of the respective functions.
+
+Both commands are intended to replace use of :command:`add_test` to register
+tests, and will create a separate CTest test for each Google Test test case.
+Note that this is in some cases less efficient, as common set-up and tear-down
+logic cannot be shared by multiple test cases executing in the same instance.
+However, it provides more fine-grained pass/fail information to CTest, which is
+usually considered as more beneficial.  By default, the CTest test name is the
+same as the Google Test name (i.e. ``suite.testcase``); see also
+``TEST_PREFIX`` and ``TEST_SUFFIX``.
+
+.. command:: gtest_add_tests
+
+  Automatically add tests with CTest by scanning source code for Google Test
+  macros::
+
+    gtest_add_tests(TARGET target
+                    [SOURCES src1...]
+                    [EXTRA_ARGS arg1...]
+                    [WORKING_DIRECTORY dir]
+                    [TEST_PREFIX prefix]
+                    [TEST_SUFFIX suffix]
+                    [SKIP_DEPENDENCY]
+                    [TEST_LIST outVar]
+    )
+
+  ``gtest_add_tests`` attempts to identify tests by scanning source files.
+  Although this is generally effective, it uses only a basic regular expression
+  match, which can be defeated by atypical test declarations, and is unable to
+  fully "split" parameterized tests.  Additionally, it requires that CMake be
+  re-run to discover any newly added, removed or renamed tests (by default,
+  this means that CMake is re-run when any test source file is changed, but see
+  ``SKIP_DEPENDENCY``).  However, it has the advantage of declaring tests at
+  CMake time, which somewhat simplifies setting additional properties on tests,
+  and always works in a cross-compiling environment.
+
+  The options are:
+
+  ``TARGET target``
+    Specifies the Google Test executable, which must be a known CMake
+    executable target.  CMake will substitute the location of the built
+    executable when running the test.
+
+  ``SOURCES src1...``
+    When provided, only the listed files will be scanned for test cases.  If
+    this option is not given, the :prop_tgt:`SOURCES` property of the
+    specified ``target`` will be used to obtain the list of sources.
+
+  ``EXTRA_ARGS arg1...``
+    Any extra arguments to pass on the command line to each test case.
+
+  ``WORKING_DIRECTORY dir``
+    Specifies the directory in which to run the discovered test cases.  If this
+    option is not provided, the current binary directory is used.
+
+  ``TEST_PREFIX prefix``
+    Specifies a ``prefix`` to be prepended to the name of each discovered test
+    case.  This can be useful when the same source files are being used in
+    multiple calls to ``gtest_add_test()`` but with different ``EXTRA_ARGS``.
+
+  ``TEST_SUFFIX suffix``
+    Similar to ``TEST_PREFIX`` except the ``suffix`` is appended to the name of
+    every discovered test case.  Both ``TEST_PREFIX`` and ``TEST_SUFFIX`` may
+    be specified.
+
+  ``SKIP_DEPENDENCY``
+    Normally, the function creates a dependency which will cause CMake to be
+    re-run if any of the sources being scanned are changed.  This is to ensure
+    that the list of discovered tests is updated.  If this behavior is not
+    desired (as may be the case while actually writing the test cases), this
+    option can be used to prevent the dependency from being added.
+
+  ``TEST_LIST outVar``
+    The variable named by ``outVar`` will be populated in the calling scope
+    with the list of discovered test cases.  This allows the caller to do
+    things like manipulate test properties of the discovered tests.
+
+  Usage example:
+
+  .. code-block:: cmake
+
+    include(GoogleTest)
+    add_executable(FooTest FooUnitTest.cxx)
+    gtest_add_tests(TARGET      FooTest
+                    TEST_SUFFIX .noArgs
+                    TEST_LIST   noArgsTests
+    )
+    gtest_add_tests(TARGET      FooTest
+                    EXTRA_ARGS  --someArg someValue
+                    TEST_SUFFIX .withArgs
+                    TEST_LIST   withArgsTests
+    )
+    set_tests_properties(${noArgsTests}   PROPERTIES TIMEOUT 10)
+    set_tests_properties(${withArgsTests} PROPERTIES TIMEOUT 20)
+
+  For backward compatibility, the following form is also supported::
+
+    gtest_add_tests(exe args files...)
+
+  ``exe``
+    The path to the test executable or the name of a CMake target.
+  ``args``
+    A ;-list of extra arguments to be passed to executable.  The entire
+    list must be passed as a single argument.  Enclose it in quotes,
+    or pass ``""`` for no arguments.
+  ``files...``
+    A list of source files to search for tests and test fixtures.
+    Alternatively, use ``AUTO`` to specify that ``exe`` is the name
+    of a CMake executable target whose sources should be scanned.
+
+  .. code-block:: cmake
+
+    include(GoogleTest)
+    set(FooTestArgs --foo 1 --bar 2)
+    add_executable(FooTest FooUnitTest.cxx)
+    gtest_add_tests(FooTest "${FooTestArgs}" AUTO)
+
+.. command:: gtest_discover_tests
+
+  Automatically add tests with CTest by querying the compiled test executable
+  for available tests::
+
+    gtest_discover_tests(target
+                         [EXTRA_ARGS arg1...]
+                         [WORKING_DIRECTORY dir]
+                         [TEST_PREFIX prefix]
+                         [TEST_SUFFIX suffix]
+                         [TEST_FILTER expr]
+                         [NO_PRETTY_TYPES] [NO_PRETTY_VALUES]
+                         [PROPERTIES name1 value1...]
+                         [TEST_LIST var]
+                         [DISCOVERY_TIMEOUT seconds]
+                         [XML_OUTPUT_DIR dir]
+                         [DISCOVERY_MODE <POST_BUILD|PRE_TEST>]
+    )
+
+  .. versionadded:: 3.10
+
+  ``gtest_discover_tests()`` sets up a post-build command on the test executable
+  that generates the list of tests by parsing the output from running the test
+  with the ``--gtest_list_tests`` argument.  Compared to the source parsing
+  approach of :command:`gtest_add_tests`, this ensures that the full list of
+  tests, including instantiations of parameterized tests, is obtained.  Since
+  test discovery occurs at build time, it is not necessary to re-run CMake when
+  the list of tests changes.
+  However, it requires that :prop_tgt:`CROSSCOMPILING_EMULATOR` is properly set
+  in order to function in a cross-compiling environment.
+
+  Additionally, setting properties on tests is somewhat less convenient, since
+  the tests are not available at CMake time.  Additional test properties may be
+  assigned to the set of tests as a whole using the ``PROPERTIES`` option.  If
+  more fine-grained test control is needed, custom content may be provided
+  through an external CTest script using the :prop_dir:`TEST_INCLUDE_FILES`
+  directory property.  The set of discovered tests is made accessible to such a
+  script via the ``<target>_TESTS`` variable.
+
+  The options are:
+
+  ``target``
+    Specifies the Google Test executable, which must be a known CMake
+    executable target.  CMake will substitute the location of the built
+    executable when running the test.
+
+  ``EXTRA_ARGS arg1...``
+    Any extra arguments to pass on the command line to each test case.
+
+  ``WORKING_DIRECTORY dir``
+    Specifies the directory in which to run the discovered test cases.  If this
+    option is not provided, the current binary directory is used.
+
+  ``TEST_PREFIX prefix``
+    Specifies a ``prefix`` to be prepended to the name of each discovered test
+    case.  This can be useful when the same test executable is being used in
+    multiple calls to ``gtest_discover_tests()`` but with different
+    ``EXTRA_ARGS``.
+
+  ``TEST_SUFFIX suffix``
+    Similar to ``TEST_PREFIX`` except the ``suffix`` is appended to the name of
+    every discovered test case.  Both ``TEST_PREFIX`` and ``TEST_SUFFIX`` may
+    be specified.
+
+  ``TEST_FILTER expr``
+    .. versionadded:: 3.22
+
+    Filter expression to pass as a ``--gtest_filter`` argument during test
+    discovery.  Note that the expression is a wildcard-based format that
+    matches against the original test names as used by gtest.  For type or
+    value-parameterized tests, these names may be different to the potentially
+    pretty-printed test names that ``ctest`` uses.
+
+  ``NO_PRETTY_TYPES``
+    By default, the type index of type-parameterized tests is replaced by the
+    actual type name in the CTest test name.  If this behavior is undesirable
+    (e.g. because the type names are unwieldy), this option will suppress this
+    behavior.
+
+  ``NO_PRETTY_VALUES``
+    By default, the value index of value-parameterized tests is replaced by the
+    actual value in the CTest test name.  If this behavior is undesirable
+    (e.g. because the value strings are unwieldy), this option will suppress
+    this behavior.
+
+  ``PROPERTIES name1 value1...``
+    Specifies additional properties to be set on all tests discovered by this
+    invocation of ``gtest_discover_tests()``.
+
+  ``TEST_LIST var``
+    Make the list of tests available in the variable ``var``, rather than the
+    default ``<target>_TESTS``.  This can be useful when the same test
+    executable is being used in multiple calls to ``gtest_discover_tests()``.
+    Note that this variable is only available in CTest.
+
+  ``DISCOVERY_TIMEOUT num``
+    .. versionadded:: 3.10.3
+
+    Specifies how long (in seconds) CMake will wait for the test to enumerate
+    available tests.  If the test takes longer than this, discovery (and your
+    build) will fail.  Most test executables will enumerate their tests very
+    quickly, but under some exceptional circumstances, a test may require a
+    longer timeout.  The default is 5.  See also the ``TIMEOUT`` option of
+    :command:`execute_process`.
+
+    .. note::
+
+      In CMake versions 3.10.1 and 3.10.2, this option was called ``TIMEOUT``.
+      This clashed with the ``TIMEOUT`` test property, which is one of the
+      common properties that would be set with the ``PROPERTIES`` keyword,
+      usually leading to legal but unintended behavior.  The keyword was
+      changed to ``DISCOVERY_TIMEOUT`` in CMake 3.10.3 to address this
+      problem.  The ambiguous behavior of the ``TIMEOUT`` keyword in 3.10.1
+      and 3.10.2 has not been preserved.
+
+  ``XML_OUTPUT_DIR dir``
+    .. versionadded:: 3.18
+
+    If specified, the parameter is passed along with ``--gtest_output=xml:``
+    to test executable. The actual file name is the same as the test target,
+    including prefix and suffix. This should be used instead of
+    ``EXTRA_ARGS --gtest_output=xml`` to avoid race conditions writing the
+    XML result output when using parallel test execution.
+
+  ``DISCOVERY_MODE``
+    .. versionadded:: 3.18
+
+    Provides greater control over when ``gtest_discover_tests()`` performs test
+    discovery. By default, ``POST_BUILD`` sets up a post-build command
+    to perform test discovery at build time. In certain scenarios, like
+    cross-compiling, this ``POST_BUILD`` behavior is not desirable.
+    By contrast, ``PRE_TEST`` delays test discovery until just prior to test
+    execution. This way test discovery occurs in the target environment
+    where the test has a better chance at finding appropriate runtime
+    dependencies.
+
+    ``DISCOVERY_MODE`` defaults to the value of the
+    ``CMAKE_GTEST_DISCOVER_TESTS_DISCOVERY_MODE`` variable if it is not
+    passed when calling ``gtest_discover_tests()``. This provides a mechanism
+    for globally selecting a preferred test discovery behavior without having
+    to modify each call site.
+
+#]=======================================================================]
+
+# Save project's policies
+cmake_policy(PUSH)
+cmake_policy(SET CMP0057 NEW) # if IN_LIST
+
+#------------------------------------------------------------------------------
+function(gtest_add_tests)
+
+  if (ARGC LESS 1)
+    message(FATAL_ERROR "No arguments supplied to gtest_add_tests()")
+  endif()
+
+  set(options
+      SKIP_DEPENDENCY
+  )
+  set(oneValueArgs
+      TARGET
+      WORKING_DIRECTORY
+      TEST_PREFIX
+      TEST_SUFFIX
+      TEST_LIST
+  )
+  set(multiValueArgs
+      SOURCES
+      EXTRA_ARGS
+  )
+  set(allKeywords ${options} ${oneValueArgs} ${multiValueArgs})
+
+  unset(sources)
+  if("${ARGV0}" IN_LIST allKeywords)
+    cmake_parse_arguments(ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+    set(autoAddSources YES)
+  else()
+    # Non-keyword syntax, convert to keyword form
+    if (ARGC LESS 3)
+      message(FATAL_ERROR "gtest_add_tests() without keyword options requires at least 3 arguments")
+    endif()
+    set(ARGS_TARGET     "${ARGV0}")
+    set(ARGS_EXTRA_ARGS "${ARGV1}")
+    if(NOT "${ARGV2}" STREQUAL "AUTO")
+      set(ARGS_SOURCES "${ARGV}")
+      list(REMOVE_AT ARGS_SOURCES 0 1)
+    endif()
+  endif()
+
+  # The non-keyword syntax allows the first argument to be an arbitrary
+  # executable rather than a target if source files are also provided. In all
+  # other cases, both forms require a target.
+  if(NOT TARGET "${ARGS_TARGET}" AND NOT ARGS_SOURCES)
+    message(FATAL_ERROR "${ARGS_TARGET} does not define an existing CMake target")
+  endif()
+  if(NOT ARGS_WORKING_DIRECTORY)
+    unset(workDir)
+  else()
+    set(workDir WORKING_DIRECTORY "${ARGS_WORKING_DIRECTORY}")
+  endif()
+
+  if(NOT ARGS_SOURCES)
+    get_property(ARGS_SOURCES TARGET ${ARGS_TARGET} PROPERTY SOURCES)
+  endif()
+
+  unset(testList)
+
+  set(gtest_case_name_regex ".*\\( *([A-Za-z_0-9]+) *, *([A-Za-z_0-9]+) *\\).*")
+  set(gtest_test_type_regex "(TYPED_TEST|TEST_?[FP]?)")
+
+  foreach(source IN LISTS ARGS_SOURCES)
+    if(NOT ARGS_SKIP_DEPENDENCY)
+      set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${source})
+    endif()
+    file(READ "${source}" contents)
+    string(REGEX MATCHALL "${gtest_test_type_regex} *\\(([A-Za-z_0-9 ,]+)\\)" found_tests "${contents}")
+    foreach(hit ${found_tests})
+      string(REGEX MATCH "${gtest_test_type_regex}" test_type ${hit})
+
+      # Parameterized tests have a different signature for the filter
+      if("x${test_type}" STREQUAL "xTEST_P")
+        string(REGEX REPLACE ${gtest_case_name_regex}  "*/\\1.\\2/*" gtest_test_name ${hit})
+      elseif("x${test_type}" STREQUAL "xTEST_F" OR "x${test_type}" STREQUAL "xTEST")
+        string(REGEX REPLACE ${gtest_case_name_regex} "\\1.\\2" gtest_test_name ${hit})
+      elseif("x${test_type}" STREQUAL "xTYPED_TEST")
+        string(REGEX REPLACE ${gtest_case_name_regex} "\\1/*.\\2" gtest_test_name ${hit})
+      else()
+        message(WARNING "Could not parse GTest ${hit} for adding to CTest.")
+        continue()
+      endif()
+
+      # Make sure tests disabled in GTest get disabled in CTest
+      if(gtest_test_name MATCHES "(^|\\.)DISABLED_")
+        # Add the disabled test if CMake is new enough
+        # Note that this check is to allow backwards compatibility so this
+        # module can be copied locally in projects to use with older CMake
+        # versions
+        if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.8.20170401)
+          string(REGEX REPLACE
+                 "(^|\\.)DISABLED_" "\\1"
+                 orig_test_name "${gtest_test_name}"
+          )
+          set(ctest_test_name
+              ${ARGS_TEST_PREFIX}${orig_test_name}${ARGS_TEST_SUFFIX}
+          )
+          add_test(NAME ${ctest_test_name}
+                   ${workDir}
+                   COMMAND ${ARGS_TARGET}
+                     --gtest_also_run_disabled_tests
+                     --gtest_filter=${gtest_test_name}
+                     ${ARGS_EXTRA_ARGS}
+          )
+          set_tests_properties(${ctest_test_name} PROPERTIES DISABLED TRUE)
+          list(APPEND testList ${ctest_test_name})
+        endif()
+      else()
+        set(ctest_test_name ${ARGS_TEST_PREFIX}${gtest_test_name}${ARGS_TEST_SUFFIX})
+        add_test(NAME ${ctest_test_name}
+                 ${workDir}
+                 COMMAND ${ARGS_TARGET}
+                   --gtest_filter=${gtest_test_name}
+                   ${ARGS_EXTRA_ARGS}
+        )
+        list(APPEND testList ${ctest_test_name})
+      endif()
+    endforeach()
+  endforeach()
+
+  if(ARGS_TEST_LIST)
+    set(${ARGS_TEST_LIST} ${testList} PARENT_SCOPE)
+  endif()
+
+endfunction()
+
+#------------------------------------------------------------------------------
+
+function(gtest_discover_tests TARGET)
+  cmake_parse_arguments(
+    ""
+    "NO_PRETTY_TYPES;NO_PRETTY_VALUES"
+    "TEST_PREFIX;TEST_SUFFIX;WORKING_DIRECTORY;TEST_LIST;DISCOVERY_TIMEOUT;XML_OUTPUT_DIR;DISCOVERY_MODE"
+    "EXTRA_ARGS;PROPERTIES;TEST_FILTER"
+    ${ARGN}
+  )
+
+  if(NOT _WORKING_DIRECTORY)
+    set(_WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
+  endif()
+  if(NOT _TEST_LIST)
+    set(_TEST_LIST ${TARGET}_TESTS)
+  endif()
+  if(NOT _DISCOVERY_TIMEOUT)
+    set(_DISCOVERY_TIMEOUT 5)
+  endif()
+  if(NOT _DISCOVERY_MODE)
+    if(NOT CMAKE_GTEST_DISCOVER_TESTS_DISCOVERY_MODE)
+      set(CMAKE_GTEST_DISCOVER_TESTS_DISCOVERY_MODE "POST_BUILD")
+    endif()
+    set(_DISCOVERY_MODE ${CMAKE_GTEST_DISCOVER_TESTS_DISCOVERY_MODE})
+  endif()
+
+  get_property(
+    has_counter
+    TARGET ${TARGET}
+    PROPERTY CTEST_DISCOVERED_TEST_COUNTER
+    SET
+  )
+  if(has_counter)
+    get_property(
+      counter
+      TARGET ${TARGET}
+      PROPERTY CTEST_DISCOVERED_TEST_COUNTER
+    )
+    math(EXPR counter "${counter} + 1")
+  else()
+    set(counter 1)
+  endif()
+  set_property(
+    TARGET ${TARGET}
+    PROPERTY CTEST_DISCOVERED_TEST_COUNTER
+    ${counter}
+  )
+
+  # Define rule to generate test list for aforementioned test executable
+  set(ctest_file_base "${CMAKE_CURRENT_BINARY_DIR}/${TARGET}[${counter}]")
+  set(ctest_include_file "${ctest_file_base}_include.cmake")
+  set(ctest_tests_file "${ctest_file_base}_tests.cmake")
+  get_property(crosscompiling_emulator
+    TARGET ${TARGET}
+    PROPERTY CROSSCOMPILING_EMULATOR
+  )
+
+  if(_DISCOVERY_MODE STREQUAL "POST_BUILD")
+    add_custom_command(
+      TARGET ${TARGET} POST_BUILD
+      BYPRODUCTS "${ctest_tests_file}"
+      COMMAND "${CMAKE_COMMAND}"
+              -D "TEST_TARGET=${TARGET}"
+              -D "TEST_EXECUTABLE=$<TARGET_FILE:${TARGET}>"
+              -D "TEST_EXECUTOR=${crosscompiling_emulator}"
+              -D "TEST_WORKING_DIR=${_WORKING_DIRECTORY}"
+              -D "TEST_EXTRA_ARGS=${_EXTRA_ARGS}"
+              -D "TEST_PROPERTIES=${_PROPERTIES}"
+              -D "TEST_PREFIX=${_TEST_PREFIX}"
+              -D "TEST_SUFFIX=${_TEST_SUFFIX}"
+              -D "TEST_FILTER=${_TEST_FILTER}"
+              -D "NO_PRETTY_TYPES=${_NO_PRETTY_TYPES}"
+              -D "NO_PRETTY_VALUES=${_NO_PRETTY_VALUES}"
+              -D "TEST_LIST=${_TEST_LIST}"
+              -D "CTEST_FILE=${ctest_tests_file}"
+              -D "TEST_DISCOVERY_TIMEOUT=${_DISCOVERY_TIMEOUT}"
+              -D "TEST_XML_OUTPUT_DIR=${_XML_OUTPUT_DIR}"
+              -P "${_GOOGLETEST_DISCOVER_TESTS_SCRIPT}"
+      VERBATIM
+    )
+
+    file(WRITE "${ctest_include_file}"
+      "if(EXISTS \"${ctest_tests_file}\")\n"
+      "  include(\"${ctest_tests_file}\")\n"
+      "else()\n"
+      "  add_test(${TARGET}_NOT_BUILT ${TARGET}_NOT_BUILT)\n"
+      "endif()\n"
+    )
+  elseif(_DISCOVERY_MODE STREQUAL "PRE_TEST")
+
+    get_property(GENERATOR_IS_MULTI_CONFIG GLOBAL
+        PROPERTY GENERATOR_IS_MULTI_CONFIG
+    )
+
+    if(GENERATOR_IS_MULTI_CONFIG)
+      set(ctest_tests_file "${ctest_file_base}_tests-$<CONFIG>.cmake")
+    endif()
+
+    string(CONCAT ctest_include_content
+      "if(EXISTS \"$<TARGET_FILE:${TARGET}>\")"                                    "\n"
+      "  if(NOT EXISTS \"${ctest_tests_file}\" OR"                                 "\n"
+      "     NOT \"${ctest_tests_file}\" IS_NEWER_THAN \"$<TARGET_FILE:${TARGET}>\" OR\n"
+      "     NOT \"${ctest_tests_file}\" IS_NEWER_THAN \"\${CMAKE_CURRENT_LIST_FILE}\")\n"
+      "    include(\"${_GOOGLETEST_DISCOVER_TESTS_SCRIPT}\")"                      "\n"
+      "    gtest_discover_tests_impl("                                             "\n"
+      "      TEST_EXECUTABLE"        " [==[" "$<TARGET_FILE:${TARGET}>"   "]==]"   "\n"
+      "      TEST_EXECUTOR"          " [==[" "${crosscompiling_emulator}" "]==]"   "\n"
+      "      TEST_WORKING_DIR"       " [==[" "${_WORKING_DIRECTORY}"      "]==]"   "\n"
+      "      TEST_EXTRA_ARGS"        " [==[" "${_EXTRA_ARGS}"             "]==]"   "\n"
+      "      TEST_PROPERTIES"        " [==[" "${_PROPERTIES}"             "]==]"   "\n"
+      "      TEST_PREFIX"            " [==[" "${_TEST_PREFIX}"            "]==]"   "\n"
+      "      TEST_SUFFIX"            " [==[" "${_TEST_SUFFIX}"            "]==]"   "\n"
+      "      TEST_FILTER"            " [==[" "${_TEST_FILTER}"            "]==]"   "\n"
+      "      NO_PRETTY_TYPES"        " [==[" "${_NO_PRETTY_TYPES}"        "]==]"   "\n"
+      "      NO_PRETTY_VALUES"       " [==[" "${_NO_PRETTY_VALUES}"       "]==]"   "\n"
+      "      TEST_LIST"              " [==[" "${_TEST_LIST}"              "]==]"   "\n"
+      "      CTEST_FILE"             " [==[" "${ctest_tests_file}"        "]==]"   "\n"
+      "      TEST_DISCOVERY_TIMEOUT" " [==[" "${_DISCOVERY_TIMEOUT}"      "]==]"   "\n"
+      "      TEST_XML_OUTPUT_DIR"    " [==[" "${_XML_OUTPUT_DIR}"         "]==]"   "\n"
+      "    )"                                                                      "\n"
+      "  endif()"                                                                  "\n"
+      "  include(\"${ctest_tests_file}\")"                                         "\n"
+      "else()"                                                                     "\n"
+      "  add_test(${TARGET}_NOT_BUILT ${TARGET}_NOT_BUILT)"                        "\n"
+      "endif()"                                                                    "\n"
+    )
+
+    if(GENERATOR_IS_MULTI_CONFIG)
+      foreach(_config ${CMAKE_CONFIGURATION_TYPES})
+        file(GENERATE OUTPUT "${ctest_file_base}_include-${_config}.cmake" CONTENT "${ctest_include_content}" CONDITION $<CONFIG:${_config}>)
+      endforeach()
+      file(WRITE "${ctest_include_file}" "include(\"${ctest_file_base}_include-\${CTEST_CONFIGURATION_TYPE}.cmake\")")
+    else()
+      file(GENERATE OUTPUT "${ctest_file_base}_include.cmake" CONTENT "${ctest_include_content}")
+      file(WRITE "${ctest_include_file}" "include(\"${ctest_file_base}_include.cmake\")")
+    endif()
+
+  else()
+    message(FATAL_ERROR "Unknown DISCOVERY_MODE: ${_DISCOVERY_MODE}")
+  endif()
+
+  # Add discovered tests to directory TEST_INCLUDE_FILES
+  set_property(DIRECTORY
+    APPEND PROPERTY TEST_INCLUDE_FILES "${ctest_include_file}"
+  )
+
+endfunction()
+
+###############################################################################
+
+set(_GOOGLETEST_DISCOVER_TESTS_SCRIPT
+  ${CMAKE_CURRENT_LIST_DIR}/GoogleTestAddTests.cmake
+)
+
+# Restore project's policies
+cmake_policy(POP)
diff --git a/share/cmake-3.22/Modules/GoogleTestAddTests.cmake b/share/cmake-3.22/Modules/GoogleTestAddTests.cmake
new file mode 100644
index 0000000..6b3bf34
--- /dev/null
+++ b/share/cmake-3.22/Modules/GoogleTestAddTests.cmake
@@ -0,0 +1,195 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+cmake_minimum_required(VERSION ${CMAKE_VERSION})
+
+# Overwrite possibly existing ${_CTEST_FILE} with empty file
+set(flush_tests_MODE WRITE)
+
+# Flushes script to ${_CTEST_FILE}
+macro(flush_script)
+  file(${flush_tests_MODE} "${_CTEST_FILE}" "${script}")
+  set(flush_tests_MODE APPEND)
+
+  set(script "")
+endmacro()
+
+# Flushes tests_buffer to tests
+macro(flush_tests_buffer)
+  list(APPEND tests "${tests_buffer}")
+  set(tests_buffer "")
+endmacro()
+
+macro(add_command NAME)
+  set(_args "")
+  foreach(_arg ${ARGN})
+    if(_arg MATCHES "[^-./:a-zA-Z0-9_]")
+      string(APPEND _args " [==[${_arg}]==]")
+    else()
+      string(APPEND _args " ${_arg}")
+    endif()
+  endforeach()
+  string(APPEND script "${NAME}(${_args})\n")
+  string(LENGTH "${script}" _script_len)
+  if(${_script_len} GREATER "50000")
+    flush_script()
+  endif()
+  # Unsets macro local variables to prevent leakage outside of this macro.
+  unset(_args)
+  unset(_script_len)
+endmacro()
+
+function(gtest_discover_tests_impl)
+
+  cmake_parse_arguments(
+    ""
+    ""
+    "NO_PRETTY_TYPES;NO_PRETTY_VALUES;TEST_EXECUTABLE;TEST_WORKING_DIR;TEST_PREFIX;TEST_SUFFIX;TEST_LIST;CTEST_FILE;TEST_DISCOVERY_TIMEOUT;TEST_XML_OUTPUT_DIR;TEST_FILTER"
+    "TEST_EXTRA_ARGS;TEST_PROPERTIES;TEST_EXECUTOR"
+    ${ARGN}
+  )
+
+  set(prefix "${_TEST_PREFIX}")
+  set(suffix "${_TEST_SUFFIX}")
+  set(extra_args ${_TEST_EXTRA_ARGS})
+  set(properties ${_TEST_PROPERTIES})
+  set(script)
+  set(suite)
+  set(tests)
+  set(tests_buffer)
+
+  if(_TEST_FILTER)
+    set(filter "--gtest_filter=${_TEST_FILTER}")
+  else()
+    set(filter)
+  endif()
+
+  # Run test executable to get list of available tests
+  if(NOT EXISTS "${_TEST_EXECUTABLE}")
+    message(FATAL_ERROR
+      "Specified test executable does not exist.\n"
+      "  Path: '${_TEST_EXECUTABLE}'"
+    )
+  endif()
+  execute_process(
+    COMMAND ${_TEST_EXECUTOR} "${_TEST_EXECUTABLE}" --gtest_list_tests ${filter}
+    WORKING_DIRECTORY "${_TEST_WORKING_DIR}"
+    TIMEOUT ${_TEST_DISCOVERY_TIMEOUT}
+    OUTPUT_VARIABLE output
+    RESULT_VARIABLE result
+  )
+  if(NOT ${result} EQUAL 0)
+    string(REPLACE "\n" "\n    " output "${output}")
+    message(FATAL_ERROR
+      "Error running test executable.\n"
+      "  Path: '${_TEST_EXECUTABLE}'\n"
+      "  Result: ${result}\n"
+      "  Output:\n"
+      "    ${output}\n"
+    )
+  endif()
+
+  # Preserve semicolon in test-parameters
+  string(REPLACE [[;]] [[\;]] output "${output}")
+  string(REPLACE "\n" ";" output "${output}")
+
+  # Parse output
+  foreach(line ${output})
+    # Skip header
+    if(NOT line MATCHES "gtest_main\\.cc")
+      # Do we have a module name or a test name?
+      if(NOT line MATCHES "^  ")
+        # Module; remove trailing '.' to get just the name...
+        string(REGEX REPLACE "\\.( *#.*)?" "" suite "${line}")
+        if(line MATCHES "#" AND NOT _NO_PRETTY_TYPES)
+          string(REGEX REPLACE "/[0-9]\\.+ +#.*= +" "/" pretty_suite "${line}")
+        else()
+          set(pretty_suite "${suite}")
+        endif()
+        string(REGEX REPLACE "^DISABLED_" "" pretty_suite "${pretty_suite}")
+      else()
+        # Test name; strip spaces and comments to get just the name...
+        string(REGEX REPLACE " +" "" test "${line}")
+        if(test MATCHES "#" AND NOT _NO_PRETTY_VALUES)
+          string(REGEX REPLACE "/[0-9]+#GetParam..=" "/" pretty_test "${test}")
+        else()
+          string(REGEX REPLACE "#.*" "" pretty_test "${test}")
+        endif()
+        string(REGEX REPLACE "^DISABLED_" "" pretty_test "${pretty_test}")
+        string(REGEX REPLACE "#.*" "" test "${test}")
+        if(NOT "${_TEST_XML_OUTPUT_DIR}" STREQUAL "")
+          set(TEST_XML_OUTPUT_PARAM "--gtest_output=xml:${_TEST_XML_OUTPUT_DIR}/${prefix}${suite}.${test}${suffix}.xml")
+        else()
+          unset(TEST_XML_OUTPUT_PARAM)
+        endif()
+
+        # sanitize test name for further processing downstream
+        set(testname "${prefix}${pretty_suite}.${pretty_test}${suffix}")
+        # escape \
+        string(REPLACE [[\]] [[\\]] testname "${testname}")
+        # escape ;
+        string(REPLACE [[;]] [[\;]] testname "${testname}")
+        # escape $
+        string(REPLACE [[$]] [[\$]] testname "${testname}")
+
+        # ...and add to script
+        add_command(add_test
+          "${testname}"
+          ${_TEST_EXECUTOR}
+          "${_TEST_EXECUTABLE}"
+          "--gtest_filter=${suite}.${test}"
+          "--gtest_also_run_disabled_tests"
+          ${TEST_XML_OUTPUT_PARAM}
+          ${extra_args}
+        )
+        if(suite MATCHES "^DISABLED_" OR test MATCHES "^DISABLED_")
+          add_command(set_tests_properties
+            "${testname}"
+            PROPERTIES DISABLED TRUE
+          )
+        endif()
+        add_command(set_tests_properties
+          "${testname}"
+          PROPERTIES
+          WORKING_DIRECTORY "${_TEST_WORKING_DIR}"
+          SKIP_REGULAR_EXPRESSION "\\\\[  SKIPPED \\\\]"
+          ${properties}
+        )
+        list(APPEND tests_buffer "${testname}")
+        list(LENGTH tests_buffer tests_buffer_length)
+        if(${tests_buffer_length} GREATER "250")
+          flush_tests_buffer()
+        endif()
+      endif()
+    endif()
+  endforeach()
+
+
+  # Create a list of all discovered tests, which users may use to e.g. set
+  # properties on the tests
+  flush_tests_buffer()
+  add_command(set ${_TEST_LIST} ${tests})
+
+  # Write CTest script
+  flush_script()
+
+endfunction()
+
+if(CMAKE_SCRIPT_MODE_FILE)
+  gtest_discover_tests_impl(
+    NO_PRETTY_TYPES ${NO_PRETTY_TYPES}
+    NO_PRETTY_VALUES ${NO_PRETTY_VALUES}
+    TEST_EXECUTABLE ${TEST_EXECUTABLE}
+    TEST_EXECUTOR ${TEST_EXECUTOR}
+    TEST_WORKING_DIR ${TEST_WORKING_DIR}
+    TEST_PREFIX ${TEST_PREFIX}
+    TEST_SUFFIX ${TEST_SUFFIX}
+    TEST_FILTER ${TEST_FILTER}
+    TEST_LIST ${TEST_LIST}
+    CTEST_FILE ${CTEST_FILE}
+    TEST_DISCOVERY_TIMEOUT ${TEST_DISCOVERY_TIMEOUT}
+    TEST_XML_OUTPUT_DIR ${TEST_XML_OUTPUT_DIR}
+    TEST_EXTRA_ARGS ${TEST_EXTRA_ARGS}
+    TEST_PROPERTIES ${TEST_PROPERTIES}
+  )
+endif()
diff --git a/share/cmake-3.18/Modules/ITKCompatibility.cmake b/share/cmake-3.22/Modules/ITKCompatibility.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/ITKCompatibility.cmake
rename to share/cmake-3.22/Modules/ITKCompatibility.cmake
diff --git a/share/cmake-3.22/Modules/InstallRequiredSystemLibraries.cmake b/share/cmake-3.22/Modules/InstallRequiredSystemLibraries.cmake
new file mode 100644
index 0000000..689cab5
--- /dev/null
+++ b/share/cmake-3.22/Modules/InstallRequiredSystemLibraries.cmake
@@ -0,0 +1,809 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+InstallRequiredSystemLibraries
+------------------------------
+
+Include this module to search for compiler-provided system runtime
+libraries and add install rules for them.  Some optional variables
+may be set prior to including the module to adjust behavior:
+
+``CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS``
+  Specify additional runtime libraries that may not be detected.
+  After inclusion any detected libraries will be appended to this.
+
+``CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP``
+  Set to TRUE to skip calling the :command:`install(PROGRAMS)` command to
+  allow the includer to specify its own install rule, using the value of
+  ``CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS`` to get the list of libraries.
+
+``CMAKE_INSTALL_DEBUG_LIBRARIES``
+  Set to TRUE to install the debug runtime libraries when available
+  with MSVC tools.
+
+``CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY``
+  Set to TRUE to install only the debug runtime libraries with MSVC
+  tools even if the release runtime libraries are also available.
+
+``CMAKE_INSTALL_UCRT_LIBRARIES``
+  .. versionadded:: 3.6
+
+  Set to TRUE to install the Windows Universal CRT libraries for
+  app-local deployment (e.g. to Windows XP).  This is meaningful
+  only with MSVC from Visual Studio 2015 or higher.
+
+  .. versionadded:: 3.9
+    One may set a ``CMAKE_WINDOWS_KITS_10_DIR`` *environment variable*
+    to an absolute path to tell CMake to look for Windows 10 SDKs in
+    a custom location.  The specified directory is expected to contain
+    ``Redist/ucrt/DLLs/*`` directories.
+
+``CMAKE_INSTALL_MFC_LIBRARIES``
+  Set to TRUE to install the MSVC MFC runtime libraries.
+
+``CMAKE_INSTALL_OPENMP_LIBRARIES``
+  Set to TRUE to install the MSVC OpenMP runtime libraries
+
+``CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION``
+  Specify the :command:`install(PROGRAMS)` command ``DESTINATION``
+  option.  If not specified, the default is ``bin`` on Windows
+  and ``lib`` elsewhere.
+
+``CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS``
+  Set to TRUE to disable warnings about required library files that
+  do not exist.  (For example, Visual Studio Express editions may
+  not provide the redistributable files.)
+
+``CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT``
+  .. versionadded:: 3.3
+
+  Specify the :command:`install(PROGRAMS)` command ``COMPONENT``
+  option.  If not specified, no such option will be used.
+
+.. versionadded:: 3.10
+  Support for installing Intel compiler runtimes.
+#]=======================================================================]
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0054 NEW) # if() quoted variables not dereferenced
+
+set(_IRSL_HAVE_Intel FALSE)
+set(_IRSL_HAVE_MSVC FALSE)
+foreach(LANG IN ITEMS C CXX Fortran)
+  if("${CMAKE_${LANG}_COMPILER_ID}" MATCHES "Intel")
+    if(NOT _IRSL_HAVE_Intel)
+      # The oneAPI icx/ifx compilers are under ${os}/bin.
+      # The classic icc/icpc/icl/ifort compilers may be under ${os}/bin/intel64.
+      get_filename_component(_Intel_basedir "${CMAKE_${LANG}_COMPILER}" PATH)
+      if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+        set(_Intel_archdir intel64)
+      else()
+        set(_Intel_archdir ia32)
+      endif()
+      set(_Intel_compiler_ver ${CMAKE_${LANG}_COMPILER_VERSION})
+      if(WIN32)
+        set(_Intel_possible_redistdirs
+          "${_Intel_basedir}/../redist/${_Intel_archdir}_win/compiler"
+          "${_Intel_basedir}/../redist/${_Intel_archdir}/compiler"
+          "${_Intel_basedir}/../../redist/${_Intel_archdir}_win/compiler"
+          "${_Intel_basedir}/../../redist/${_Intel_archdir}/compiler"
+          )
+      elseif(APPLE)
+        set(_Intel_possible_redistdirs
+          "${_Intel_basedir}/../../compiler/lib"
+          )
+      else()
+        set(_Intel_possible_redistdirs
+          "${_Intel_basedir}/../lib/${_Intel_archdir}"
+          "${_Intel_basedir}/../../compiler/lib/${_Intel_archdir}_lin"
+          )
+      endif()
+
+      set(_Intel_redistdir NOT-FOUND)
+      foreach(dir IN LISTS _Intel_possible_redistdirs)
+        if(EXISTS "${dir}")
+          set(_Intel_redistdir "${dir}")
+          break()
+        endif()
+      endforeach()
+      # Fall back to last dir
+      if(NOT _Intel_redistdir)
+        list(POP_BACK _Intel_possible_redistdirs _Intel_redistdir)
+      endif()
+      unset(_Intel_possible_redistdirs)
+      set(_IRSL_HAVE_Intel TRUE)
+    endif()
+  elseif("${CMAKE_${LANG}_COMPILER_ID}" STREQUAL "MSVC")
+    set(_IRSL_HAVE_MSVC TRUE)
+  endif()
+endforeach()
+
+if(MSVC)
+  file(TO_CMAKE_PATH "$ENV{SYSTEMROOT}" SYSTEMROOT)
+
+  if(MSVC_C_ARCHITECTURE_ID)
+    string(TOLOWER "${MSVC_C_ARCHITECTURE_ID}" CMAKE_MSVC_ARCH)
+  elseif(MSVC_CXX_ARCHITECTURE_ID)
+    string(TOLOWER "${MSVC_CXX_ARCHITECTURE_ID}" CMAKE_MSVC_ARCH)
+  else()
+    set(CMAKE_MSVC_ARCH x86)
+  endif()
+  if(CMAKE_MSVC_ARCH STREQUAL "x64")
+    if(MSVC_VERSION LESS 1600)
+      # VS 9 and earlier:
+      set(CMAKE_MSVC_ARCH amd64)
+    endif()
+  endif()
+
+  get_filename_component(devenv_dir "${CMAKE_MAKE_PROGRAM}" PATH)
+  get_filename_component(base_dir "${devenv_dir}/../.." ABSOLUTE)
+
+  if(MSVC_VERSION EQUAL 1300)
+    set(__install__libs
+      "${SYSTEMROOT}/system32/msvcp70.dll"
+      "${SYSTEMROOT}/system32/msvcr70.dll"
+      )
+  endif()
+
+  if(MSVC_VERSION EQUAL 1310)
+    set(__install__libs
+      "${SYSTEMROOT}/system32/msvcp71.dll"
+      "${SYSTEMROOT}/system32/msvcr71.dll"
+      )
+  endif()
+
+  if(MSVC_TOOLSET_VERSION EQUAL 80)
+    # Find the runtime library redistribution directory.
+    get_filename_component(msvc_install_dir
+      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0;InstallDir]" ABSOLUTE)
+    if(DEFINED MSVC80_REDIST_DIR AND EXISTS "${MSVC80_REDIST_DIR}")
+      set(MSVC_REDIST_DIR "${MSVC80_REDIST_DIR}") # use old cache entry
+    endif()
+    find_path(MSVC_REDIST_DIR NAMES ${CMAKE_MSVC_ARCH}/Microsoft.VC80.CRT/Microsoft.VC80.CRT.manifest
+      PATHS
+        "${msvc_install_dir}/../../VC/redist"
+        "${base_dir}/VC/redist"
+      )
+    mark_as_advanced(MSVC_REDIST_DIR)
+    set(MSVC_CRT_DIR "${MSVC_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC80.CRT")
+
+    # Install the manifest that allows DLLs to be loaded from the
+    # directory containing the executable.
+    if(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY)
+      set(__install__libs
+        "${MSVC_CRT_DIR}/Microsoft.VC80.CRT.manifest"
+        "${MSVC_CRT_DIR}/msvcm80.dll"
+        "${MSVC_CRT_DIR}/msvcp80.dll"
+        "${MSVC_CRT_DIR}/msvcr80.dll"
+        )
+    else()
+      set(__install__libs)
+    endif()
+
+    if(CMAKE_INSTALL_DEBUG_LIBRARIES)
+      set(MSVC_CRT_DIR
+        "${MSVC_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.VC80.DebugCRT")
+      set(__install__libs ${__install__libs}
+        "${MSVC_CRT_DIR}/Microsoft.VC80.DebugCRT.manifest"
+        "${MSVC_CRT_DIR}/msvcm80d.dll"
+        "${MSVC_CRT_DIR}/msvcp80d.dll"
+        "${MSVC_CRT_DIR}/msvcr80d.dll"
+        )
+    endif()
+  endif()
+
+  if(MSVC_TOOLSET_VERSION EQUAL 90)
+    # Find the runtime library redistribution directory.
+    get_filename_component(msvc_install_dir
+      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\9.0;InstallDir]" ABSOLUTE)
+    get_filename_component(msvc_express_install_dir
+      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\9.0;InstallDir]" ABSOLUTE)
+    if(DEFINED MSVC90_REDIST_DIR AND EXISTS "${MSVC90_REDIST_DIR}")
+      set(MSVC_REDIST_DIR "${MSVC90_REDIST_DIR}") # use old cache entry
+    endif()
+    find_path(MSVC_REDIST_DIR NAMES ${CMAKE_MSVC_ARCH}/Microsoft.VC90.CRT/Microsoft.VC90.CRT.manifest
+      PATHS
+        "${msvc_install_dir}/../../VC/redist"
+        "${msvc_express_install_dir}/../../VC/redist"
+        "${base_dir}/VC/redist"
+      )
+    mark_as_advanced(MSVC_REDIST_DIR)
+    set(MSVC_CRT_DIR "${MSVC_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC90.CRT")
+
+    # Install the manifest that allows DLLs to be loaded from the
+    # directory containing the executable.
+    if(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY)
+      set(__install__libs
+        "${MSVC_CRT_DIR}/Microsoft.VC90.CRT.manifest"
+        "${MSVC_CRT_DIR}/msvcm90.dll"
+        "${MSVC_CRT_DIR}/msvcp90.dll"
+        "${MSVC_CRT_DIR}/msvcr90.dll"
+        )
+    else()
+      set(__install__libs)
+    endif()
+
+    if(CMAKE_INSTALL_DEBUG_LIBRARIES)
+      set(MSVC_CRT_DIR
+        "${MSVC_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.VC90.DebugCRT")
+      set(__install__libs ${__install__libs}
+        "${MSVC_CRT_DIR}/Microsoft.VC90.DebugCRT.manifest"
+        "${MSVC_CRT_DIR}/msvcm90d.dll"
+        "${MSVC_CRT_DIR}/msvcp90d.dll"
+        "${MSVC_CRT_DIR}/msvcr90d.dll"
+        )
+    endif()
+  endif()
+
+  set(MSVC_REDIST_NAME "")
+  set(_MSVC_DLL_VERSION "")
+  set(_MSVC_IDE_VERSION "")
+  if(MSVC_VERSION GREATER_EQUAL 2000)
+    message(WARNING "MSVC ${MSVC_VERSION} not yet supported.")
+  elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 144)
+    message(WARNING "MSVC toolset v${MSVC_TOOLSET_VERSION} not yet supported.")
+  elseif(MSVC_TOOLSET_VERSION EQUAL 143)
+    set(MSVC_REDIST_NAME VC143)
+    set(_MSVC_DLL_VERSION 140)
+    set(_MSVC_IDE_VERSION 17)
+  elseif(MSVC_TOOLSET_VERSION EQUAL 142)
+    set(MSVC_REDIST_NAME VC142)
+    set(_MSVC_DLL_VERSION 140)
+    set(_MSVC_IDE_VERSION 16)
+    if(MSVC_VERSION EQUAL 1920)
+      # VS2019 named this differently prior to update 1.
+      set(MSVC_REDIST_NAME VC141)
+    endif()
+  elseif(MSVC_TOOLSET_VERSION EQUAL 141)
+    set(MSVC_REDIST_NAME VC141)
+    set(_MSVC_DLL_VERSION 140)
+    set(_MSVC_IDE_VERSION 15)
+    if(MSVC_VERSION EQUAL 1910)
+      # VS2017 named this differently prior to update 3.
+      set(MSVC_REDIST_NAME VC150)
+    endif()
+  elseif(MSVC_TOOLSET_VERSION)
+    set(MSVC_REDIST_NAME VC${MSVC_TOOLSET_VERSION})
+    math(EXPR _MSVC_DLL_VERSION "${MSVC_TOOLSET_VERSION} / 10 * 10")
+    math(EXPR _MSVC_IDE_VERSION "${MSVC_TOOLSET_VERSION} / 10")
+  endif()
+
+  set(_MSVCRT_DLL_VERSION "")
+  set(_MSVCRT_IDE_VERSION "")
+  if(_MSVC_IDE_VERSION GREATER_EQUAL 10)
+    set(_MSVCRT_DLL_VERSION "${_MSVC_DLL_VERSION}")
+    set(_MSVCRT_IDE_VERSION "${_MSVC_IDE_VERSION}")
+  endif()
+
+  if(_MSVCRT_DLL_VERSION)
+    set(v "${_MSVCRT_DLL_VERSION}")
+    set(vs "${_MSVCRT_IDE_VERSION}")
+
+    # Find the runtime library redistribution directory.
+    if(vs VERSION_LESS 15 AND DEFINED MSVC${vs}_REDIST_DIR AND EXISTS "${MSVC${vs}_REDIST_DIR}")
+      set(MSVC_REDIST_DIR "${MSVC${vs}_REDIST_DIR}") # use old cache entry
+    endif()
+    if(NOT vs VERSION_LESS 15)
+      set(_vs_redist_paths "")
+      # The toolset and its redistributables may come with any VS version 15 or newer.
+      set(_MSVC_IDE_VERSIONS 17 16 15)
+      foreach(_vs_ver ${_MSVC_IDE_VERSIONS})
+        set(_vs_glob_redist_paths "")
+        cmake_host_system_information(RESULT _vs_dir QUERY VS_${_vs_ver}_DIR) # undocumented query
+        if(IS_DIRECTORY "${_vs_dir}")
+          file(GLOB _vs_glob_redist_paths "${_vs_dir}/VC/Redist/MSVC/*")
+          list(REVERSE _vs_glob_redist_paths)
+          list(APPEND _vs_redist_paths ${_vs_glob_redist_paths})
+        endif()
+        unset(_vs_glob_redist_paths)
+      endforeach()
+      unset(_MSVC_IDE_VERSIONS)
+      unset(_vs_dir)
+    else()
+      get_filename_component(_vs_dir
+        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\${vs}.0;InstallDir]" ABSOLUTE)
+      set(programfilesx86 "ProgramFiles(x86)")
+      set(_vs_redist_paths
+        "${_vs_dir}/../../VC/redist"
+        "${base_dir}/VC/redist"
+        "$ENV{ProgramFiles}/Microsoft Visual Studio ${vs}.0/VC/redist"
+        "$ENV{${programfilesx86}}/Microsoft Visual Studio ${vs}.0/VC/redist"
+        )
+      unset(_vs_dir)
+      unset(programfilesx86)
+    endif()
+    find_path(MSVC_REDIST_DIR NAMES ${CMAKE_MSVC_ARCH}/Microsoft.${MSVC_REDIST_NAME}.CRT PATHS ${_vs_redist_paths})
+    unset(_vs_redist_paths)
+    mark_as_advanced(MSVC_REDIST_DIR)
+    set(MSVC_CRT_DIR "${MSVC_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.${MSVC_REDIST_NAME}.CRT")
+
+    if(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY)
+      set(__install__libs
+        "${MSVC_CRT_DIR}/msvcp${v}.dll"
+        )
+      if(NOT vs VERSION_LESS 14)
+        foreach(crt
+            "${MSVC_CRT_DIR}/msvcp${v}_1.dll"
+            "${MSVC_CRT_DIR}/msvcp${v}_2.dll"
+            "${MSVC_CRT_DIR}/msvcp${v}_atomic_wait.dll"
+            "${MSVC_CRT_DIR}/msvcp${v}_codecvt_ids.dll"
+            "${MSVC_CRT_DIR}/vcruntime${v}_1.dll"
+            )
+          if(EXISTS "${crt}")
+            list(APPEND __install__libs "${crt}")
+          endif()
+        endforeach()
+        list(APPEND __install__libs
+            "${MSVC_CRT_DIR}/vcruntime${v}.dll"
+            "${MSVC_CRT_DIR}/concrt${v}.dll"
+            )
+      else()
+        list(APPEND __install__libs "${MSVC_CRT_DIR}/msvcr${v}.dll")
+      endif()
+    else()
+      set(__install__libs)
+    endif()
+
+    if(CMAKE_INSTALL_DEBUG_LIBRARIES)
+      set(MSVC_CRT_DIR
+        "${MSVC_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.${MSVC_REDIST_NAME}.DebugCRT")
+      set(__install__libs ${__install__libs}
+        "${MSVC_CRT_DIR}/msvcp${v}d.dll"
+        )
+      if(NOT vs VERSION_LESS 14)
+        foreach(crt
+            "${MSVC_CRT_DIR}/msvcp${v}_1d.dll"
+            "${MSVC_CRT_DIR}/msvcp${v}_2d.dll"
+            "${MSVC_CRT_DIR}/msvcp${v}d_atomic_wait.dll"
+            "${MSVC_CRT_DIR}/msvcp${v}d_codecvt_ids.dll"
+            "${MSVC_CRT_DIR}/vcruntime${v}_1d.dll"
+            )
+          if(EXISTS "${crt}")
+            list(APPEND __install__libs "${crt}")
+          endif()
+        endforeach()
+        list(APPEND __install__libs
+            "${MSVC_CRT_DIR}/vcruntime${v}d.dll"
+            "${MSVC_CRT_DIR}/concrt${v}d.dll"
+            )
+      else()
+        list(APPEND __install__libs "${MSVC_CRT_DIR}/msvcr${v}d.dll")
+      endif()
+    endif()
+
+    if(CMAKE_INSTALL_UCRT_LIBRARIES AND NOT vs VERSION_LESS 14)
+      # Find the Windows Kits directory.
+      get_filename_component(windows_kits_dir
+        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots;KitsRoot10]" ABSOLUTE)
+      set(programfilesx86 "ProgramFiles(x86)")
+      if(";${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION};$ENV{UCRTVersion};$ENV{WindowsSDKVersion};" MATCHES [=[;(10\.[0-9.]+)[;\]]=])
+        set(__ucrt_version "${CMAKE_MATCH_1}/")
+      else()
+        set(__ucrt_version "")
+      endif()
+      find_path(WINDOWS_KITS_DIR
+        NAMES
+          Redist/${__ucrt_version}ucrt/DLLs/${CMAKE_MSVC_ARCH}/ucrtbase.dll
+          Redist/ucrt/DLLs/${CMAKE_MSVC_ARCH}/ucrtbase.dll
+        PATHS
+        $ENV{CMAKE_WINDOWS_KITS_10_DIR}
+        "${windows_kits_dir}"
+        "$ENV{ProgramFiles}/Windows Kits/10"
+        "$ENV{${programfilesx86}}/Windows Kits/10"
+        )
+      mark_as_advanced(WINDOWS_KITS_DIR)
+
+      # Glob the list of UCRT DLLs.
+      if(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY)
+        if(EXISTS "${WINDOWS_KITS_DIR}/Redist/${__ucrt_version}ucrt/DLLs/${CMAKE_MSVC_ARCH}/ucrtbase.dll")
+          file(GLOB __ucrt_dlls "${WINDOWS_KITS_DIR}/Redist/${__ucrt_version}ucrt/DLLs/${CMAKE_MSVC_ARCH}/*.dll")
+        else()
+          file(GLOB __ucrt_dlls "${WINDOWS_KITS_DIR}/Redist/ucrt/DLLs/${CMAKE_MSVC_ARCH}/*.dll")
+        endif()
+        list(APPEND __install__libs ${__ucrt_dlls})
+      endif()
+      if(CMAKE_INSTALL_DEBUG_LIBRARIES)
+        if(EXISTS "${WINDOWS_KITS_DIR}/bin/${__ucrt_version}${CMAKE_MSVC_ARCH}/ucrt/ucrtbased.dll")
+          file(GLOB __ucrt_dlls "${WINDOWS_KITS_DIR}/bin/${__ucrt_version}${CMAKE_MSVC_ARCH}/ucrt/*.dll")
+        else()
+          file(GLOB __ucrt_dlls "${WINDOWS_KITS_DIR}/bin/${CMAKE_MSVC_ARCH}/ucrt/*.dll")
+        endif()
+        list(APPEND __install__libs ${__ucrt_dlls})
+      endif()
+    endif()
+  endif()
+
+  if(CMAKE_INSTALL_MFC_LIBRARIES)
+    if(MSVC_VERSION EQUAL 1300)
+      set(__install__libs ${__install__libs}
+        "${SYSTEMROOT}/system32/mfc70.dll"
+        )
+    endif()
+
+    if(MSVC_VERSION EQUAL 1310)
+      set(__install__libs ${__install__libs}
+        "${SYSTEMROOT}/system32/mfc71.dll"
+        )
+    endif()
+
+    if(MSVC_VERSION EQUAL 1400)
+      if(CMAKE_INSTALL_DEBUG_LIBRARIES)
+        set(MSVC_MFC_DIR
+          "${MSVC_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.VC80.DebugMFC")
+        set(__install__libs ${__install__libs}
+          "${MSVC_MFC_DIR}/Microsoft.VC80.DebugMFC.manifest"
+          "${MSVC_MFC_DIR}/mfc80d.dll"
+          "${MSVC_MFC_DIR}/mfc80ud.dll"
+          "${MSVC_MFC_DIR}/mfcm80d.dll"
+          "${MSVC_MFC_DIR}/mfcm80ud.dll"
+          )
+      endif()
+
+      set(MSVC_MFC_DIR "${MSVC_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC80.MFC")
+      # Install the manifest that allows DLLs to be loaded from the
+      # directory containing the executable.
+      if(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY)
+        set(__install__libs ${__install__libs}
+          "${MSVC_MFC_DIR}/Microsoft.VC80.MFC.manifest"
+          "${MSVC_MFC_DIR}/mfc80.dll"
+          "${MSVC_MFC_DIR}/mfc80u.dll"
+          "${MSVC_MFC_DIR}/mfcm80.dll"
+          "${MSVC_MFC_DIR}/mfcm80u.dll"
+          )
+      endif()
+
+      # include the language dll's for vs8 as well as the actual dll's
+      set(MSVC_MFCLOC_DIR "${MSVC_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC80.MFCLOC")
+      # Install the manifest that allows DLLs to be loaded from the
+      # directory containing the executable.
+      set(__install__libs ${__install__libs}
+        "${MSVC_MFCLOC_DIR}/Microsoft.VC80.MFCLOC.manifest"
+        "${MSVC_MFCLOC_DIR}/mfc80chs.dll"
+        "${MSVC_MFCLOC_DIR}/mfc80cht.dll"
+        "${MSVC_MFCLOC_DIR}/mfc80enu.dll"
+        "${MSVC_MFCLOC_DIR}/mfc80esp.dll"
+        "${MSVC_MFCLOC_DIR}/mfc80deu.dll"
+        "${MSVC_MFCLOC_DIR}/mfc80fra.dll"
+        "${MSVC_MFCLOC_DIR}/mfc80ita.dll"
+        "${MSVC_MFCLOC_DIR}/mfc80jpn.dll"
+        "${MSVC_MFCLOC_DIR}/mfc80kor.dll"
+        )
+    endif()
+
+    if(MSVC_VERSION EQUAL 1500)
+      if(CMAKE_INSTALL_DEBUG_LIBRARIES)
+        set(MSVC_MFC_DIR
+          "${MSVC_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.VC90.DebugMFC")
+        set(__install__libs ${__install__libs}
+          "${MSVC_MFC_DIR}/Microsoft.VC90.DebugMFC.manifest"
+          "${MSVC_MFC_DIR}/mfc90d.dll"
+          "${MSVC_MFC_DIR}/mfc90ud.dll"
+          "${MSVC_MFC_DIR}/mfcm90d.dll"
+          "${MSVC_MFC_DIR}/mfcm90ud.dll"
+          )
+      endif()
+
+      set(MSVC_MFC_DIR "${MSVC_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC90.MFC")
+      # Install the manifest that allows DLLs to be loaded from the
+      # directory containing the executable.
+      if(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY)
+        set(__install__libs ${__install__libs}
+          "${MSVC_MFC_DIR}/Microsoft.VC90.MFC.manifest"
+          "${MSVC_MFC_DIR}/mfc90.dll"
+          "${MSVC_MFC_DIR}/mfc90u.dll"
+          "${MSVC_MFC_DIR}/mfcm90.dll"
+          "${MSVC_MFC_DIR}/mfcm90u.dll"
+          )
+      endif()
+
+      # include the language dll's for vs9 as well as the actual dll's
+      set(MSVC_MFCLOC_DIR "${MSVC_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC90.MFCLOC")
+      # Install the manifest that allows DLLs to be loaded from the
+      # directory containing the executable.
+      set(__install__libs ${__install__libs}
+        "${MSVC_MFCLOC_DIR}/Microsoft.VC90.MFCLOC.manifest"
+        "${MSVC_MFCLOC_DIR}/mfc90chs.dll"
+        "${MSVC_MFCLOC_DIR}/mfc90cht.dll"
+        "${MSVC_MFCLOC_DIR}/mfc90enu.dll"
+        "${MSVC_MFCLOC_DIR}/mfc90esp.dll"
+        "${MSVC_MFCLOC_DIR}/mfc90deu.dll"
+        "${MSVC_MFCLOC_DIR}/mfc90fra.dll"
+        "${MSVC_MFCLOC_DIR}/mfc90ita.dll"
+        "${MSVC_MFCLOC_DIR}/mfc90jpn.dll"
+        "${MSVC_MFCLOC_DIR}/mfc90kor.dll"
+        )
+    endif()
+
+    set(_MFC_DLL_VERSION "")
+    set(_MFC_IDE_VERSION "")
+    if(_MSVC_IDE_VERSION GREATER_EQUAL 10)
+      set(_MFC_DLL_VERSION ${_MSVC_DLL_VERSION})
+      set(_MFC_IDE_VERSION ${_MSVC_IDE_VERSION})
+    endif()
+
+    if(_MFC_DLL_VERSION)
+      set(v "${_MFC_DLL_VERSION}")
+      set(vs "${_MFC_IDE_VERSION}")
+
+      # Starting with VS 15 the MFC DLLs may be in a different directory.
+      if (NOT vs VERSION_LESS 15)
+        file(GLOB _MSVC_REDIST_DIRS "${MSVC_REDIST_DIR}/../*")
+        find_path(MSVC_REDIST_MFC_DIR NAMES ${CMAKE_MSVC_ARCH}/Microsoft.${MSVC_REDIST_NAME}.MFC
+          PATHS ${_MSVC_REDIST_DIRS} NO_DEFAULT_PATH)
+        mark_as_advanced(MSVC_REDIST_MFC_DIR)
+        unset(_MSVC_REDIST_DIRS)
+      else()
+        set(MSVC_REDIST_MFC_DIR "${MSVC_REDIST_DIR}")
+      endif()
+
+      # Multi-Byte Character Set versions of MFC are available as optional
+      # addon since Visual Studio 12.  So for version 12 or higher, check
+      # whether they are available and exclude them if they are not.
+
+      if(CMAKE_INSTALL_DEBUG_LIBRARIES)
+        set(MSVC_MFC_DIR
+          "${MSVC_REDIST_MFC_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.${MSVC_REDIST_NAME}.DebugMFC")
+        set(__install__libs ${__install__libs}
+          "${MSVC_MFC_DIR}/mfc${v}ud.dll"
+          "${MSVC_MFC_DIR}/mfcm${v}ud.dll"
+          )
+        if("${v}" LESS 12 OR EXISTS "${MSVC_MFC_DIR}/mfc${v}d.dll")
+          set(__install__libs ${__install__libs}
+            "${MSVC_MFC_DIR}/mfc${v}d.dll"
+          )
+        endif()
+        if("${v}" LESS 12 OR EXISTS "${MSVC_MFC_DIR}/mfcm${v}d.dll")
+          set(__install__libs ${__install__libs}
+            "${MSVC_MFC_DIR}/mfcm${v}d.dll"
+          )
+        endif()
+      endif()
+
+      set(MSVC_MFC_DIR "${MSVC_REDIST_MFC_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.${MSVC_REDIST_NAME}.MFC")
+      if(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY)
+        set(__install__libs ${__install__libs}
+          "${MSVC_MFC_DIR}/mfc${v}u.dll"
+          "${MSVC_MFC_DIR}/mfcm${v}u.dll"
+          )
+        if("${v}" LESS 12 OR EXISTS "${MSVC_MFC_DIR}/mfc${v}.dll")
+          set(__install__libs ${__install__libs}
+            "${MSVC_MFC_DIR}/mfc${v}.dll"
+          )
+        endif()
+        if("${v}" LESS 12 OR EXISTS "${MSVC_MFC_DIR}/mfcm${v}.dll")
+          set(__install__libs ${__install__libs}
+            "${MSVC_MFC_DIR}/mfcm${v}.dll"
+          )
+        endif()
+      endif()
+
+      # include the language dll's as well as the actual dll's
+      set(MSVC_MFCLOC_DIR "${MSVC_REDIST_MFC_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.${MSVC_REDIST_NAME}.MFCLOC")
+      set(__install__libs ${__install__libs}
+        "${MSVC_MFCLOC_DIR}/mfc${v}chs.dll"
+        "${MSVC_MFCLOC_DIR}/mfc${v}cht.dll"
+        "${MSVC_MFCLOC_DIR}/mfc${v}deu.dll"
+        "${MSVC_MFCLOC_DIR}/mfc${v}enu.dll"
+        "${MSVC_MFCLOC_DIR}/mfc${v}esn.dll"
+        "${MSVC_MFCLOC_DIR}/mfc${v}fra.dll"
+        "${MSVC_MFCLOC_DIR}/mfc${v}ita.dll"
+        "${MSVC_MFCLOC_DIR}/mfc${v}jpn.dll"
+        "${MSVC_MFCLOC_DIR}/mfc${v}kor.dll"
+        "${MSVC_MFCLOC_DIR}/mfc${v}rus.dll"
+        )
+    endif()
+  endif()
+
+  # MSVC 8 was the first version with OpenMP
+  # Furthermore, there is no debug version of this
+  if(CMAKE_INSTALL_OPENMP_LIBRARIES AND _IRSL_HAVE_MSVC)
+    set(_MSOMP_DLL_VERSION ${_MSVC_DLL_VERSION})
+    set(_MSOMP_IDE_VERSION ${_MSVC_IDE_VERSION})
+
+    if(_MSOMP_DLL_VERSION)
+      set(v "${_MSOMP_DLL_VERSION}")
+      set(vs "${_MSOMP_IDE_VERSION}")
+      set(MSVC_OPENMP_DIR "${MSVC_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.${MSVC_REDIST_NAME}.OPENMP")
+
+      if(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY)
+        set(__install__libs ${__install__libs}
+          "${MSVC_OPENMP_DIR}/vcomp${v}.dll")
+      endif()
+    endif()
+  endif()
+
+  foreach(lib
+      ${__install__libs}
+      )
+    if(EXISTS ${lib})
+      set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS
+        ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} ${lib})
+    else()
+      if(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS)
+        message(WARNING "system runtime library file does not exist: '${lib}'")
+        # This warning indicates an incomplete Visual Studio installation
+        # or a bug somewhere above here in this file.
+        # If you would like to avoid this warning, fix the real problem, or
+        # set CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS before including
+        # this file.
+      endif()
+    endif()
+  endforeach()
+endif()
+
+if(_IRSL_HAVE_Intel)
+  unset(__install_libs)
+  if(CMAKE_INSTALL_OPENMP_LIBRARIES)
+    if(WIN32)
+      list(APPEND __install_libs "${_Intel_redistdir}/libiomp5md.dll" "${_Intel_redistdir}/libiompstubs5md.dll")
+    elseif(APPLE)
+      list(APPEND __install_libs "${_Intel_redistdir}/libiomp5.dylib" "${_Intel_redistdir}/libiompstubs5.dylib")
+    else()
+      list(APPEND __install_libs "${_Intel_redistdir}/libiomp5.so" "${_Intel_redistdir}/libiompstubs5.so")
+      if(_Intel_compiler_ver VERSION_LESS 17)
+        list(APPEND __install_libs "${_Intel_redistdir}/libomp_db.so")
+      endif()
+      if(_Intel_compiler_ver VERSION_LESS 13)
+        list(APPEND __install_libs "${_Intel_redistdir}/libiompprof5.so")
+      endif()
+    endif()
+  endif()
+  if(WIN32)
+    set(__install_dirs "${_Intel_redistdir}/1033")
+    if(EXISTS "${_Intel_redistdir}/1041")
+      list(APPEND __install_dirs "${_Intel_redistdir}/1041")
+    endif()
+    if(_Intel_compiler_ver VERSION_LESS 18)
+      list(APPEND __install_dirs "${_Intel_redistdir}/irml" "${_Intel_redistdir}/irml_c")
+    endif()
+    foreach(__Intel_lib IN ITEMS cilkrts20.dll libchkp.dll libioffload_host.dll libirngmd.dll
+      libmmd.dll libmmdd.dll libmpx.dll liboffload.dll svml_dispmd.dll)
+
+      list(APPEND __install_libs "${_Intel_redistdir}/${__Intel_lib}")
+    endforeach()
+    if(CMAKE_C_COMPILER_ID MATCHES Intel OR CMAKE_CXX_COMPILER_ID MATCHES Intel)
+      list(APPEND __install_libs "${_Intel_redistdir}/libgfxoffload.dll")
+    endif()
+    if(CMAKE_Fortran_COMPILER_ID MATCHES Intel)
+      foreach(__Intel_lib IN ITEMS ifdlg100.dll libicaf.dll libifcoremd.dll libifcoremdd.dll libifcorert.dll libifcorertd.dll libifportmd.dll)
+
+        list(APPEND __install_libs "${_Intel_redistdir}/${__Intel_lib}")
+      endforeach()
+    endif()
+  elseif(APPLE)
+    foreach(__Intel_lib IN ITEMS libchkp.dylib libcilkrts.5.dylib libcilkrts.dylib libimf.dylib libintlc.dylib libirc.dylib libirng.dylib libsvml.dylib)
+      list(APPEND __install_libs "${_Intel_redistdir}/${__Intel_lib}")
+    endforeach()
+    if(CMAKE_C_COMPILER_ID MATCHES Intel OR CMAKE_CXX_COMPILER_ID MATCHES Intel)
+      if(_Intel_compiler_ver VERSION_LESS 17)
+        list(APPEND __install_libs "${_Intel_redistdir}/libistrconv.dylib")
+      endif()
+    endif()
+    if(CMAKE_Fortran_COMPILER_ID MATCHES Intel)
+      foreach(__Intel_lib IN ITEMS libifcore.dylib libifcoremt.dylib libifport.dylib libifportmt.dylib)
+
+        list(APPEND __install_libs "${_Intel_redistdir}/${__Intel_lib}")
+      endforeach()
+    endif()
+  else()
+    foreach(__Intel_lib IN ITEMS libchkp.so libcilkrts.so libcilkrts.so.5 libimf.so libintlc.so libintlc.so.5 libirc.so libpdbx.so libpdbx.so.5 libsvml.so)
+
+      list(APPEND __install_libs "${_Intel_redistdir}/${__Intel_lib}")
+    endforeach()
+    if(_Intel_compiler_ver VERSION_GREATER_EQUAL 13)
+      foreach(__Intel_lib IN ITEMS libirng.so liboffload.so liboffload.so.5)
+
+        list(APPEND __install_libs "${_Intel_redistdir}/${__Intel_lib}")
+      endforeach()
+    endif()
+    if(CMAKE_C_COMPILER_ID MATCHES Intel OR CMAKE_CXX_COMPILER_ID MATCHES Intel)
+      set(__install_dirs "${_Intel_redistdir}/irml")
+      list(APPEND __install_libs "${_Intel_redistdir}/cilk_db.so")
+      if(_Intel_compiler_ver VERSION_GREATER_EQUAL 15)
+        list(APPEND __install_libs "${_Intel_redistdir}/libistrconv.so" "${_Intel_redistdir}/libgfxoffload.so")
+      endif()
+    endif()
+    if(_Intel_compiler_ver VERSION_GREATER_EQUAL 16)
+      foreach(__Intel_lib IN ITEMS libioffload_host.so libioffload_host.so.5 libioffload_target.so libioffload_target.so.5 libmpx.so offload_main)
+
+        list(APPEND __install_libs "${_Intel_redistdir}/${__Intel_lib}")
+      endforeach()
+    endif()
+    if(_Intel_compiler_ver VERSION_LESS 15)
+      foreach(__Intel_lib IN ITEMS libcxaguard.so libcxaguard.so.5)
+
+        list(APPEND __install_libs "${_Intel_redistdir}/${__Intel_lib}")
+      endforeach()
+    endif()
+    if(CMAKE_Fortran_COMPILER_ID MATCHES Intel)
+      foreach(__Intel_lib IN ITEMS libicaf.so libifcore.so libifcore.so.5 libifcoremt.so libifcoremt.so.5 libifport.so libifport.so.5)
+
+        list(APPEND __install_libs "${_Intel_redistdir}/${__Intel_lib}")
+      endforeach()
+    endif()
+  endif()
+
+  foreach(lib IN LISTS __install_libs)
+    if(EXISTS ${lib})
+      list(APPEND CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS ${lib})
+    else()
+      if(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS)
+        message(WARNING "system runtime library file does not exist: '${lib}'")
+      endif()
+    endif()
+  endforeach()
+
+  foreach(dir IN LISTS __install_dirs)
+    if(EXISTS ${dir})
+      list(APPEND CMAKE_INSTALL_SYSTEM_RUNTIME_DIRECTORIES ${dir})
+    else()
+      if(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS)
+        message(WARNING "system runtime library file does not exist: '${dir}'")
+      endif()
+    endif()
+  endforeach()
+endif()
+
+if(WATCOM)
+  get_filename_component( CompilerPath ${CMAKE_C_COMPILER} PATH )
+  if(CMAKE_C_COMPILER_VERSION)
+    set(_compiler_version ${CMAKE_C_COMPILER_VERSION})
+  else()
+    set(_compiler_version ${CMAKE_CXX_COMPILER_VERSION})
+  endif()
+  string(REGEX MATCHALL "[0-9]+" _watcom_version_list "${_compiler_version}")
+  list(GET _watcom_version_list 0 _watcom_major)
+  list(GET _watcom_version_list 1 _watcom_minor)
+  set( __install__libs
+    ${CompilerPath}/clbr${_watcom_major}${_watcom_minor}.dll
+    ${CompilerPath}/mt7r${_watcom_major}${_watcom_minor}.dll
+    ${CompilerPath}/plbr${_watcom_major}${_watcom_minor}.dll )
+  foreach(lib
+      ${__install__libs}
+      )
+    if(EXISTS ${lib})
+      set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS
+        ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} ${lib})
+    else()
+      if(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS)
+        message(WARNING "system runtime library file does not exist: '${lib}'")
+        # This warning indicates an incomplete Watcom installation
+        # or a bug somewhere above here in this file.
+        # If you would like to avoid this warning, fix the real problem, or
+        # set CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS before including
+        # this file.
+      endif()
+    endif()
+  endforeach()
+endif()
+
+
+# Include system runtime libraries in the installation if any are
+# specified by CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS.
+if(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS)
+  if(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP)
+    if(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION)
+      if(WIN32)
+        set(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION bin)
+      else()
+        set(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION lib)
+      endif()
+    endif()
+    if(CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT)
+      set(_CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT
+        COMPONENT ${CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT})
+    endif()
+    install(PROGRAMS ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS}
+      DESTINATION ${CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION}
+      ${_CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT}
+      )
+
+    install(DIRECTORY ${CMAKE_INSTALL_SYSTEM_RUNTIME_DIRECTORIES}
+      DESTINATION ${CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION}
+      ${_CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT}
+      )
+  endif()
+endif()
+
+cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/IntelVSImplicitPath/CMakeLists.txt b/share/cmake-3.22/Modules/IntelVSImplicitPath/CMakeLists.txt
similarity index 100%
rename from share/cmake-3.18/Modules/IntelVSImplicitPath/CMakeLists.txt
rename to share/cmake-3.22/Modules/IntelVSImplicitPath/CMakeLists.txt
diff --git a/share/cmake-3.18/Modules/IntelVSImplicitPath/detect.cmake b/share/cmake-3.22/Modules/IntelVSImplicitPath/detect.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/IntelVSImplicitPath/detect.cmake
rename to share/cmake-3.22/Modules/IntelVSImplicitPath/detect.cmake
diff --git a/share/cmake-3.18/Modules/IntelVSImplicitPath/hello.f b/share/cmake-3.22/Modules/IntelVSImplicitPath/hello.f
similarity index 100%
rename from share/cmake-3.18/Modules/IntelVSImplicitPath/hello.f
rename to share/cmake-3.22/Modules/IntelVSImplicitPath/hello.f
diff --git a/share/cmake-3.22/Modules/Internal/CMakeTryCompilerOrLinkerFlag.cmake b/share/cmake-3.22/Modules/Internal/CMakeTryCompilerOrLinkerFlag.cmake
new file mode 100644
index 0000000..d6fa5f0
--- /dev/null
+++ b/share/cmake-3.22/Modules/Internal/CMakeTryCompilerOrLinkerFlag.cmake
@@ -0,0 +1,158 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=[
+
+NOTE: This function is used internally by CMake. Projects should not include
+      this file directly.
+
+The cmake_try_compiler_or_linker_flag() function can be used to compile and link a
+source file to check whether a specific compiler or linker flag is supported.
+The function does not use the try_compile() command so as to avoid infinite
+recursion.  It may not work for all platforms or toolchains, the caller is
+responsible for ensuring it is only called in valid situations.
+
+  cmake_try_compiler_or_linker_flag(<lang> <flag> <result>
+                            [SRC_EXT <ext>] [COMMAND_PATTERN <pattern>]
+                            [FAIL_REGEX <regex> ...]
+                            [OUTPUT_VARIABLE <output>])
+
+Parameters:
+  <lang>   - Language to check.
+  <flag>   - The flag to add to the compile/link command line.
+  <result> - Boolean output variable.  It will be stored in the cache as an
+             internal variable and if true, will cause future tests that assign
+             to that variable to be bypassed.
+
+Optional parameters:
+  SRC_EXT         - Overrides the extension of the source file used for the
+                    check.  Defaults are 'c' (C), 'cxx' (CXX), 'F' (Fortran).
+  COMMAND_PATTERN - Pattern to be used for the command line. The default is
+                    '<FLAG> -o <OUTPUT> <SOURCE>'
+  FAIL_REGEX      - List of additional regular expressions that, if matched by
+                    the output, give a failed result for the check.  A common
+                    set of regular expressions will be included in addition to
+                    those given by FAIL_REGEX.
+  OUTPUT_VARIABLE - Set <output> variable with details about any error.
+#]=]
+
+include_guard(GLOBAL)
+include(CMakeCheckCompilerFlagCommonPatterns)
+
+function(CMAKE_TRY_COMPILER_OR_LINKER_FLAG lang flag result)
+  # Cache results between runs similar to check_<lang>_source_compiles()
+  if(DEFINED ${result})
+    return()
+  endif()
+
+  set(comment "Is the '${flag}' option(s) supported")
+  string(REPLACE ";" " " comment "${comment}")
+
+  if (NOT lang MATCHES "^(C|CXX|Fortran|ASM)$")
+    # other possible languages are not supported
+    # log message to keep trace of this problem...
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+      "Function 'CMAKE_CHECK_COMPILER_FLAG' called with unsupported language: ${lang}\n")
+    set(${result} FALSE CACHE INTERNAL ${comment})
+    return()
+  endif()
+  if (lang STREQUAL "ASM")
+    # assume ASM compiler is a multi-language compiler, so supports C language as well
+    set(check_lang C)
+  else()
+    set(check_lang ${lang})
+  endif()
+
+  cmake_parse_arguments(CCCF "" "SRC_EXT;COMMAND_PATTERN;OUTPUT_VARIABLE" "FAIL_REGEX" ${ARGN})
+
+  if (NOT CCCF_COMMAND_PATTERN)
+    set (CCCF_COMMAND_PATTERN "<FLAG> -o <OUTPUT> <SOURCE>")
+  endif()
+
+  list (APPEND CCCF_FAIL_REGEX "argument unused during compilation") # clang
+  if (check_lang STREQUAL "C")
+    list(APPEND CCCF_FAIL_REGEX
+      "command line option .* is valid for .* but not for C") # GNU
+  elseif(check_lang STREQUAL "CXX")
+    list(APPEND CCCF_FAIL_REGEX
+      "command line option .* is valid for .* but not for C\\+\\+") # GNU
+  elseif(check_lang STREQUAL "Fortran")
+    list(APPEND CCCF_FAIL_REGEX
+      "command line option .* is valid for .* but not for Fortran") # GNU
+  endif()
+
+  # Add patterns for common errors
+  check_compiler_flag_common_patterns(COMPILER_FLAG_COMMON_PATTERNS)
+  foreach(arg IN LISTS COMPILER_FLAG_COMMON_PATTERNS)
+    if(arg MATCHES "^FAIL_REGEX$")
+      continue()
+    endif()
+    list(APPEND CCCF_FAIL_REGEX "${arg}")
+  endforeach()
+
+  if(NOT CCCF_SRC_EXT)
+    if (check_lang STREQUAL "C")
+      set(CCCF_SRC_EXT c)
+    elseif(check_lang STREQUAL "CXX")
+      set(CCCF_SRC_EXT cxx)
+    elseif(check_lang STREQUAL "Fortran")
+      set(CCCF_SRC_EXT F)
+    endif()
+  endif()
+
+  if (CCCF_OUTPUT_VARIABLE)
+    unset(${CCCF_OUTPUT_VARIABLE} PARENT_SCOPE)
+  endif()
+
+  # Compute the directory in which to run the test.
+  set(COMPILER_FLAG_DIR "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp")
+  # Compute source and output files.
+  set(COMPILER_FLAG_SRC
+    "${COMPILER_FLAG_DIR}/CompilerFlag${lang}.${CCCF_SRC_EXT}")
+  if(check_lang STREQUAL "Fortran")
+    file(WRITE "${COMPILER_FLAG_SRC}"
+      "      program simple\n      end program simple\n")
+  else()
+    file(WRITE "${COMPILER_FLAG_SRC}" "int main (void)\n{ return 0; }\n")
+  endif()
+  get_filename_component(COMPILER_FLAG_EXE "${COMPILER_FLAG_SRC}" NAME_WE)
+  string(APPEND COMPILER_FLAG_EXE "${CMAKE_EXECUTABLE_SUFFIX}")
+
+  # Build command line
+  separate_arguments(CCCF_COMMAND_PATTERN UNIX_COMMAND
+    "${CCCF_COMMAND_PATTERN}")
+  list(TRANSFORM CCCF_COMMAND_PATTERN REPLACE "<SOURCE>" "${COMPILER_FLAG_SRC}")
+  list(TRANSFORM CCCF_COMMAND_PATTERN REPLACE "<OUTPUT>" "${COMPILER_FLAG_EXE}")
+  list(TRANSFORM CCCF_COMMAND_PATTERN REPLACE "<FLAG>" "${flag}")
+
+  execute_process(
+    COMMAND "${CMAKE_COMMAND}" -E env LC_ALL=C LC_MESSAGES=C LANG=C
+            "${CMAKE_${lang}_COMPILER}" ${CCCF_COMMAND_PATTERN}
+    WORKING_DIRECTORY "${COMPILER_FLAG_DIR}"
+    OUTPUT_VARIABLE COMPILER_FLAG_OUTPUT
+    ERROR_VARIABLE COMPILER_FLAG_OUTPUT
+    RESULT_VARIABLE COMPILER_FLAG_RESULT)
+
+  # Record result in the cache so we can avoid re-testing every CMake run
+  if (COMPILER_FLAG_RESULT)
+    set(${result} FALSE CACHE INTERNAL ${comment})
+  else()
+    foreach(regex IN LISTS CCCF_FAIL_REGEX)
+      if(COMPILER_FLAG_OUTPUT MATCHES "${regex}")
+        set(${result} FALSE CACHE INTERNAL ${comment})
+      endif()
+    endforeach()
+  endif()
+  if (DEFINED ${result})
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+        "Determining if the ${flag} option "
+        "is supported for ${lang} language failed with the following output:\n"
+        "${COMPILER_FLAG_OUTPUT}\n")
+    if (CCCF_OUTPUT_VARIABLE)
+      set(${CCCF_OUTPUT_VARIABLE} "${COMPILER_FLAG_OUTPUT}" PARENT_SCOPE)
+    endif()
+    return()
+  endif()
+
+  set(${result} TRUE CACHE INTERNAL ${comment})
+endfunction()
diff --git a/share/cmake-3.18/Modules/Internal/CPack/CPack.DS_Store.in b/share/cmake-3.22/Modules/Internal/CPack/CPack.DS_Store.in
similarity index 100%
rename from share/cmake-3.18/Modules/Internal/CPack/CPack.DS_Store.in
rename to share/cmake-3.22/Modules/Internal/CPack/CPack.DS_Store.in
Binary files differ
diff --git a/share/cmake-3.18/Modules/Internal/CPack/CPack.Description.plist.in b/share/cmake-3.22/Modules/Internal/CPack/CPack.Description.plist.in
similarity index 100%
rename from share/cmake-3.18/Modules/Internal/CPack/CPack.Description.plist.in
rename to share/cmake-3.22/Modules/Internal/CPack/CPack.Description.plist.in
diff --git a/share/cmake-3.18/Modules/Internal/CPack/CPack.Info.plist.in b/share/cmake-3.22/Modules/Internal/CPack/CPack.Info.plist.in
similarity index 100%
rename from share/cmake-3.18/Modules/Internal/CPack/CPack.Info.plist.in
rename to share/cmake-3.22/Modules/Internal/CPack/CPack.Info.plist.in
diff --git a/share/cmake-3.22/Modules/Internal/CPack/CPack.NuGet.nuspec.in b/share/cmake-3.22/Modules/Internal/CPack/CPack.NuGet.nuspec.in
new file mode 100644
index 0000000..d89d69f
--- /dev/null
+++ b/share/cmake-3.22/Modules/Internal/CPack/CPack.NuGet.nuspec.in
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
+    <metadata>
+        <!-- Required elements-->
+        <id>@CPACK_NUGET_PACKAGE_NAME@</id>
+        <version>@CPACK_NUGET_PACKAGE_VERSION@</version>
+        <description>@CPACK_NUGET_PACKAGE_DESCRIPTION@</description>
+        <authors>@CPACK_NUGET_PACKAGE_AUTHORS@</authors>
+
+        <!-- Optional elements -->
+        @_CPACK_NUGET_TITLE_TAG@
+        @_CPACK_NUGET_OWNERS_TAG@
+        @_CPACK_NUGET_PROJECTURL_TAG@
+        @_CPACK_NUGET_LICENSEURL_TAG@
+        @_CPACK_NUGET_LICENSE_TAG@
+        @_CPACK_NUGET_ICONURL_TAG@
+        @_CPACK_NUGET_ICON_TAG@
+        @_CPACK_NUGET_REQUIRELICENSEACCEPTANCE_TAG@
+        @_CPACK_NUGET_SUMMARY_TAG@
+        @_CPACK_NUGET_RELEASENOTES_TAG@
+        @_CPACK_NUGET_COPYRIGHT_TAG@
+        @_CPACK_NUGET_LANGUAGE_TAG@
+        @_CPACK_NUGET_TAGS_TAG@
+        @_CPACK_NUGET_DEPENDENCIES_TAG@
+    </metadata>
+    @_CPACK_NUGET_FILES_TAG@
+</package>
diff --git a/share/cmake-3.18/Modules/Internal/CPack/CPack.OSXScriptLauncher.in b/share/cmake-3.22/Modules/Internal/CPack/CPack.OSXScriptLauncher.in
similarity index 100%
rename from share/cmake-3.18/Modules/Internal/CPack/CPack.OSXScriptLauncher.in
rename to share/cmake-3.22/Modules/Internal/CPack/CPack.OSXScriptLauncher.in
Binary files differ
diff --git a/share/cmake-3.18/Modules/Internal/CPack/CPack.OSXScriptLauncher.rsrc.in b/share/cmake-3.22/Modules/Internal/CPack/CPack.OSXScriptLauncher.rsrc.in
similarity index 100%
rename from share/cmake-3.18/Modules/Internal/CPack/CPack.OSXScriptLauncher.rsrc.in
rename to share/cmake-3.22/Modules/Internal/CPack/CPack.OSXScriptLauncher.rsrc.in
Binary files differ
diff --git a/share/cmake-3.18/Modules/Internal/CPack/CPack.OSXX11.Info.plist.in b/share/cmake-3.22/Modules/Internal/CPack/CPack.OSXX11.Info.plist.in
similarity index 100%
rename from share/cmake-3.18/Modules/Internal/CPack/CPack.OSXX11.Info.plist.in
rename to share/cmake-3.22/Modules/Internal/CPack/CPack.OSXX11.Info.plist.in
diff --git a/share/cmake-3.18/Modules/Internal/CPack/CPack.OSXX11.main.scpt.in b/share/cmake-3.22/Modules/Internal/CPack/CPack.OSXX11.main.scpt.in
similarity index 100%
rename from share/cmake-3.18/Modules/Internal/CPack/CPack.OSXX11.main.scpt.in
rename to share/cmake-3.22/Modules/Internal/CPack/CPack.OSXX11.main.scpt.in
Binary files differ
diff --git a/share/cmake-3.18/Modules/Internal/CPack/CPack.RuntimeScript.in b/share/cmake-3.22/Modules/Internal/CPack/CPack.RuntimeScript.in
similarity index 100%
rename from share/cmake-3.18/Modules/Internal/CPack/CPack.RuntimeScript.in
rename to share/cmake-3.22/Modules/Internal/CPack/CPack.RuntimeScript.in
diff --git a/share/cmake-3.18/Modules/Internal/CPack/CPack.STGZ_Header.sh.in b/share/cmake-3.22/Modules/Internal/CPack/CPack.STGZ_Header.sh.in
similarity index 100%
rename from share/cmake-3.18/Modules/Internal/CPack/CPack.STGZ_Header.sh.in
rename to share/cmake-3.22/Modules/Internal/CPack/CPack.STGZ_Header.sh.in
diff --git a/share/cmake-3.18/Modules/Internal/CPack/CPack.VolumeIcon.icns.in b/share/cmake-3.22/Modules/Internal/CPack/CPack.VolumeIcon.icns.in
similarity index 100%
rename from share/cmake-3.18/Modules/Internal/CPack/CPack.VolumeIcon.icns.in
rename to share/cmake-3.22/Modules/Internal/CPack/CPack.VolumeIcon.icns.in
Binary files differ
diff --git a/share/cmake-3.18/Modules/Internal/CPack/CPack.background.png.in b/share/cmake-3.22/Modules/Internal/CPack/CPack.background.png.in
similarity index 100%
rename from share/cmake-3.18/Modules/Internal/CPack/CPack.background.png.in
rename to share/cmake-3.22/Modules/Internal/CPack/CPack.background.png.in
Binary files differ
diff --git a/share/cmake-3.18/Modules/Internal/CPack/CPack.distribution.dist.in b/share/cmake-3.22/Modules/Internal/CPack/CPack.distribution.dist.in
similarity index 100%
rename from share/cmake-3.18/Modules/Internal/CPack/CPack.distribution.dist.in
rename to share/cmake-3.22/Modules/Internal/CPack/CPack.distribution.dist.in
diff --git a/share/cmake-3.22/Modules/Internal/CPack/CPackDeb.cmake b/share/cmake-3.22/Modules/Internal/CPack/CPackDeb.cmake
new file mode 100644
index 0000000..c115f00
--- /dev/null
+++ b/share/cmake-3.22/Modules/Internal/CPack/CPackDeb.cmake
@@ -0,0 +1,795 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+# CPack script for creating Debian package
+# Author: Mathieu Malaterre
+#
+# http://wiki.debian.org/HowToPackageForDebian
+
+if(CMAKE_BINARY_DIR)
+  message(FATAL_ERROR "CPackDeb.cmake may only be used by CPack internally.")
+endif()
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0057 NEW) # if IN_LIST
+
+function(cpack_deb_variable_fallback OUTPUT_VAR_NAME)
+  set(FALLBACK_VAR_NAMES ${ARGN})
+
+  foreach(variable_name IN LISTS FALLBACK_VAR_NAMES)
+    if(${variable_name})
+      set(${OUTPUT_VAR_NAME} "${${variable_name}}" PARENT_SCOPE)
+      break()
+    endif()
+  endforeach()
+endfunction()
+
+function(get_component_package_name var component)
+  string(TOUPPER "${component}" component_upcase)
+  if(CPACK_DEBIAN_${component_upcase}_PACKAGE_NAME)
+    string(TOLOWER "${CPACK_DEBIAN_${component_upcase}_PACKAGE_NAME}" package_name)
+  else()
+    string(TOLOWER "${CPACK_DEBIAN_PACKAGE_NAME}-${component}" package_name)
+  endif()
+
+  set("${var}" "${package_name}" PARENT_SCOPE)
+endfunction()
+
+#extract library name and version for given shared object
+function(extract_so_info shared_object libname version)
+  if(READELF_EXECUTABLE)
+    execute_process(COMMAND "${READELF_EXECUTABLE}" -d "${shared_object}"
+      WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
+      RESULT_VARIABLE result
+      OUTPUT_VARIABLE output
+      ERROR_QUIET
+      OUTPUT_STRIP_TRAILING_WHITESPACE)
+    if(result EQUAL 0)
+      string(REGEX MATCH "\\(?SONAME\\)?[^\n]*\\[([^\n]+)\\.so\\.([^\n]*)\\]" soname "${output}")
+      set(${libname} "${CMAKE_MATCH_1}" PARENT_SCOPE)
+      set(${version} "${CMAKE_MATCH_2}" PARENT_SCOPE)
+    else()
+      message(WARNING "Error running readelf for \"${shared_object}\"")
+    endif()
+  else()
+    message(FATAL_ERROR "Readelf utility is not available.")
+  endif()
+endfunction()
+
+function(cpack_deb_check_description SUMMARY LINES RESULT_VARIABLE)
+  set(_result TRUE)
+
+  # Get the summary line
+  if(NOT SUMMARY MATCHES "^[^\\s].*$")
+    set(_result FALSE)
+    set(${RESULT_VARIABLE} ${_result} PARENT_SCOPE)
+    return()
+  endif()
+
+  foreach(_line IN LISTS LINES)
+    if(NOT _line MATCHES "^ +[^ ]+.*$")
+      set(_result FALSE)
+      break()
+    endif()
+  endforeach()
+
+  set(${RESULT_VARIABLE} ${_result} PARENT_SCOPE)
+endfunction()
+
+function(cpack_deb_format_package_description TEXT OUTPUT_VAR)
+  # Turn the possible multi-line string into a list
+  string(UUID uuid NAMESPACE 00000000-0000-0000-0000-000000000000 TYPE SHA1)
+  string(REPLACE ";" "${uuid}" _text "${TEXT}")
+  string(REPLACE "\n" ";" _lines "${_text}")
+  list(POP_FRONT _lines _summary)
+
+  # If the description ends with a newline (e.g. typically if it was read
+  # from a file) the last line will be empty. We drop it here, otherwise
+  # it would be replaced by a `.` which would lead to the package violating
+  # the extended-description-contains-empty-paragraph debian policy
+  list(POP_BACK _lines _last_line)
+  string(STRIP "${_last_line}" _last_line_strip)
+  if(_last_line_strip)
+    list(APPEND _lines "${_last_line_strip}")
+  endif()
+
+  # Check if reformatting required
+  cpack_deb_check_description("${_summary}" "${_lines}" _result)
+  if(_result)
+    # Ok, no formatting required
+    set(${OUTPUT_VAR} "${TEXT}" PARENT_SCOPE)
+    return()
+  endif()
+
+  # Format the summary line
+  string(STRIP "${_summary}" _summary)
+
+  # Make sure the rest formatted properly
+  set(_result)
+  foreach(_line IN LISTS _lines)
+    string(STRIP "${_line}" _line_strip)
+    if(NOT _line_strip)
+      # Replace empty lines w/ a _single full stop character_
+      set(_line " .")
+    else()
+      # Prepend the normal lines w/ a single space.
+      # If the line already starts w/ at least one space,
+      # it'll become _verbatim_ (assuming it supposed to be
+      # verbatim in the original text).
+      string(PREPEND _line " ")
+    endif()
+    list(APPEND _result "${_line}")
+  endforeach()
+
+  list(PREPEND _result "${_summary}")
+  list(JOIN _result "\n" _result)
+  string(REPLACE "${uuid}"  ";" _result "${_result}")
+  set(${OUTPUT_VAR} "${_result}" PARENT_SCOPE)
+endfunction()
+
+function(cpack_deb_prepare_package_vars)
+  # CPACK_DEBIAN_PACKAGE_SHLIBDEPS
+  # If specify OFF, only user depends are used
+  if(NOT DEFINED CPACK_DEBIAN_PACKAGE_SHLIBDEPS)
+    set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS OFF)
+  endif()
+
+  set(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}${CPACK_DEB_PACKAGE_COMPONENT_PART_PATH}")
+  set(DBGSYMDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}${CPACK_DEB_PACKAGE_COMPONENT_PART_PATH}-dbgsym")
+  file(REMOVE_RECURSE "${DBGSYMDIR}")
+
+  # per component automatic discover: some of the component might not have
+  # binaries.
+  if(CPACK_DEB_PACKAGE_COMPONENT)
+    string(TOUPPER "${CPACK_DEB_PACKAGE_COMPONENT}" _local_component_name)
+    set(_component_shlibdeps_var "CPACK_DEBIAN_${_local_component_name}_PACKAGE_SHLIBDEPS")
+
+    # if set, overrides the global configuration
+    if(DEFINED ${_component_shlibdeps_var})
+      set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS "${${_component_shlibdeps_var}}")
+      if(CPACK_DEBIAN_PACKAGE_DEBUG)
+        message("CPackDeb Debug: component '${CPACK_DEB_PACKAGE_COMPONENT}' dpkg-shlibdeps set to ${CPACK_DEBIAN_PACKAGE_SHLIBDEPS}")
+      endif()
+    endif()
+  endif()
+
+  cpack_deb_variable_fallback("CPACK_DEBIAN_DEBUGINFO_PACKAGE"
+    "CPACK_DEBIAN_${_local_component_name}_DEBUGINFO_PACKAGE"
+    "CPACK_DEBIAN_DEBUGINFO_PACKAGE")
+  if(CPACK_DEBIAN_PACKAGE_SHLIBDEPS OR CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS OR CPACK_DEBIAN_DEBUGINFO_PACKAGE)
+    # Generating binary list - Get type of all install files
+    file(GLOB_RECURSE FILE_PATHS_ LIST_DIRECTORIES false RELATIVE "${WDIR}" "${WDIR}/*")
+
+    find_program(FILE_EXECUTABLE file)
+    if(NOT FILE_EXECUTABLE)
+      message(FATAL_ERROR "CPackDeb: file utility is not available. CPACK_DEBIAN_PACKAGE_SHLIBDEPS and CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS options are not available.")
+    endif()
+
+    # get file info so that we can determine if file is executable or not
+    unset(CPACK_DEB_INSTALL_FILES)
+    foreach(FILE_ IN LISTS FILE_PATHS_)
+      execute_process(COMMAND ${CMAKE_COMMAND} -E env LC_ALL=C ${FILE_EXECUTABLE} "./${FILE_}"
+        WORKING_DIRECTORY "${WDIR}"
+        RESULT_VARIABLE FILE_RESULT_
+        OUTPUT_VARIABLE INSTALL_FILE_)
+      if(NOT FILE_RESULT_ EQUAL 0)
+        message(FATAL_ERROR "CPackDeb: execution of command: '${FILE_EXECUTABLE} ./${FILE_}' failed with exit code: ${FILE_RESULT_}")
+      endif()
+      list(APPEND CPACK_DEB_INSTALL_FILES "${INSTALL_FILE_}")
+    endforeach()
+
+    # Only dynamically linked ELF files are included
+    # Extract only file name infront of ":"
+    foreach(_FILE IN LISTS CPACK_DEB_INSTALL_FILES)
+      if(_FILE MATCHES "ELF.*dynamically linked")
+        string(REGEX MATCH "(^.*):" _FILE_NAME "${_FILE}")
+        list(APPEND CPACK_DEB_BINARY_FILES "${CMAKE_MATCH_1}")
+        set(CONTAINS_EXECUTABLE_FILES_ TRUE)
+      endif()
+      if(_FILE MATCHES "ELF.*shared object")
+        string(REGEX MATCH "(^.*):" _FILE_NAME "${_FILE}")
+        list(APPEND CPACK_DEB_SHARED_OBJECT_FILES "${CMAKE_MATCH_1}")
+      endif()
+      if(_FILE MATCHES "ELF.*not stripped")
+        string(REGEX MATCH "(^.*):" _FILE_NAME "${_FILE}")
+        list(APPEND CPACK_DEB_UNSTRIPPED_FILES "${CMAKE_MATCH_1}")
+      endif()
+    endforeach()
+  endif()
+
+  find_program(READELF_EXECUTABLE NAMES readelf)
+
+  if(CPACK_DEBIAN_DEBUGINFO_PACKAGE AND CPACK_DEB_UNSTRIPPED_FILES)
+    find_program(OBJCOPY_EXECUTABLE NAMES objcopy)
+
+    if(NOT OBJCOPY_EXECUTABLE)
+      message(FATAL_ERROR "debuginfo packages require the objcopy tool")
+    endif()
+    if(NOT READELF_EXECUTABLE)
+      message(FATAL_ERROR "debuginfo packages require the readelf tool")
+    endif()
+
+    file(RELATIVE_PATH _DBGSYM_ROOT "${CPACK_TEMPORARY_DIRECTORY}" "${DBGSYMDIR}")
+    foreach(_FILE IN LISTS CPACK_DEB_UNSTRIPPED_FILES)
+
+      # Get the file's Build ID
+      execute_process(COMMAND env LC_ALL=C ${READELF_EXECUTABLE} -n "${_FILE}"
+        WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
+        OUTPUT_VARIABLE READELF_OUTPUT
+        RESULT_VARIABLE READELF_RESULT
+        ERROR_VARIABLE READELF_ERROR
+        OUTPUT_STRIP_TRAILING_WHITESPACE )
+      if(NOT READELF_RESULT EQUAL 0)
+        message(FATAL_ERROR "CPackDeb: readelf: '${READELF_ERROR}';\n"
+            "executed command: '${READELF_EXECUTABLE} -n ${_FILE}'")
+      endif()
+      if(READELF_OUTPUT MATCHES "Build ID: ([0-9a-zA-Z][0-9a-zA-Z])([0-9a-zA-Z]*)")
+        set(_BUILD_ID_START ${CMAKE_MATCH_1})
+        set(_BUILD_ID_REMAINING ${CMAKE_MATCH_2})
+        list(APPEND BUILD_IDS ${_BUILD_ID_START}${_BUILD_ID_REMAINING})
+      else()
+        message(FATAL_ERROR "Unable to determine Build ID for ${_FILE}")
+      endif()
+
+      # Split out the debug symbols from the binaries
+      set(_FILE_DBGSYM ${_DBGSYM_ROOT}/usr/lib/debug/.build-id/${_BUILD_ID_START}/${_BUILD_ID_REMAINING}.debug)
+      get_filename_component(_OUT_DIR "${_FILE_DBGSYM}" DIRECTORY)
+      file(MAKE_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}/${_OUT_DIR}")
+      execute_process(COMMAND ${OBJCOPY_EXECUTABLE} --only-keep-debug "${_FILE}" "${_FILE_DBGSYM}"
+        WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
+        OUTPUT_VARIABLE OBJCOPY_OUTPUT
+        RESULT_VARIABLE OBJCOPY_RESULT
+        ERROR_VARIABLE OBJCOPY_ERROR
+        OUTPUT_STRIP_TRAILING_WHITESPACE )
+      if(NOT OBJCOPY_RESULT EQUAL 0)
+        message(FATAL_ERROR "CPackDeb: objcopy: '${OBJCOPY_ERROR}';\n"
+            "executed command: '${OBJCOPY_EXECUTABLE} --only-keep-debug ${_FILE} ${_FILE_DBGSYM}'")
+      endif()
+      execute_process(COMMAND ${OBJCOPY_EXECUTABLE} --strip-unneeded ${_FILE}
+        WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
+        OUTPUT_VARIABLE OBJCOPY_OUTPUT
+        RESULT_VARIABLE OBJCOPY_RESULT
+        ERROR_VARIABLE OBJCOPY_ERROR
+        OUTPUT_STRIP_TRAILING_WHITESPACE )
+      if(NOT OBJCOPY_RESULT EQUAL 0)
+        message(FATAL_ERROR "CPackDeb: objcopy: '${OBJCOPY_ERROR}';\n"
+            "executed command: '${OBJCOPY_EXECUTABLE} --strip-debug ${_FILE}'")
+      endif()
+      execute_process(COMMAND ${OBJCOPY_EXECUTABLE} --add-gnu-debuglink=${_FILE_DBGSYM} ${_FILE}
+        WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
+        OUTPUT_VARIABLE OBJCOPY_OUTPUT
+        RESULT_VARIABLE OBJCOPY_RESULT
+        ERROR_VARIABLE OBJCOPY_ERROR
+        OUTPUT_STRIP_TRAILING_WHITESPACE )
+      if(NOT OBJCOPY_RESULT EQUAL 0)
+        message(FATAL_ERROR "CPackDeb: objcopy: '${OBJCOPY_ERROR}';\n"
+            "executed command: '${OBJCOPY_EXECUTABLE} --add-gnu-debuglink=${_FILE_DBGSYM} ${_FILE}'")
+      endif()
+    endforeach()
+  endif()
+
+  if(CPACK_DEBIAN_PACKAGE_SHLIBDEPS)
+    # dpkg-shlibdeps is a Debian utility for generating dependency list
+    find_program(SHLIBDEPS_EXECUTABLE dpkg-shlibdeps)
+
+    if(SHLIBDEPS_EXECUTABLE)
+      # Check version of the dpkg-shlibdeps tool using CPackDEB method
+      execute_process(COMMAND ${CMAKE_COMMAND} -E env LC_ALL=C ${SHLIBDEPS_EXECUTABLE} --version
+        OUTPUT_VARIABLE _TMP_VERSION
+        ERROR_QUIET
+        OUTPUT_STRIP_TRAILING_WHITESPACE)
+      if(_TMP_VERSION MATCHES "dpkg-shlibdeps version ([0-9]+\\.[0-9]+\\.[0-9]+)")
+        set(SHLIBDEPS_EXECUTABLE_VERSION "${CMAKE_MATCH_1}")
+      else()
+        unset(SHLIBDEPS_EXECUTABLE_VERSION)
+      endif()
+
+      if(CPACK_DEBIAN_PACKAGE_DEBUG)
+        message("CPackDeb Debug: dpkg-shlibdeps --version output is '${_TMP_VERSION}'")
+        message("CPackDeb Debug: dpkg-shlibdeps version is <${SHLIBDEPS_EXECUTABLE_VERSION}>")
+      endif()
+
+      if(CONTAINS_EXECUTABLE_FILES_)
+        message("CPackDeb: - Generating dependency list")
+
+        # Create blank control file for running dpkg-shlibdeps
+        # There might be some other way to invoke dpkg-shlibdeps without creating this file
+        # but standard debian package should not have anything that can collide with this file or directory
+        file(MAKE_DIRECTORY ${CPACK_TEMPORARY_DIRECTORY}/debian)
+        file(WRITE ${CPACK_TEMPORARY_DIRECTORY}/debian/control "")
+
+        # Create a DEBIAN directory so that dpkg-shlibdeps can find the package dir when resolving $ORIGIN.
+        file(MAKE_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}/DEBIAN")
+
+        # Add --ignore-missing-info if the tool supports it
+        execute_process(COMMAND ${CMAKE_COMMAND} -E env LC_ALL=C ${SHLIBDEPS_EXECUTABLE} --help
+          OUTPUT_VARIABLE _TMP_HELP
+          ERROR_QUIET
+          OUTPUT_STRIP_TRAILING_WHITESPACE)
+        if(_TMP_HELP MATCHES "--ignore-missing-info")
+          set(IGNORE_MISSING_INFO_FLAG "--ignore-missing-info")
+        endif()
+
+        if(CPACK_DEBIAN_PACKAGE_SHLIBDEPS_PRIVATE_DIRS)
+          unset(PRIVATE_SEARCH_DIR_OPTIONS)
+          # Add -l option if the tool supports it
+          if(DEFINED SHLIBDEPS_EXECUTABLE_VERSION AND SHLIBDEPS_EXECUTABLE_VERSION VERSION_GREATER_EQUAL 1.17.0)
+            foreach(dir IN LISTS CPACK_DEBIAN_PACKAGE_SHLIBDEPS_PRIVATE_DIRS)
+              list(APPEND PRIVATE_SEARCH_DIR_OPTIONS "-l${dir}")
+            endforeach()
+          else()
+            message(WARNING "CPackDeb: dkpg-shlibdeps is too old. \"CPACK_DEBIAN_PACKAGE_SHLIBDEPS_PRIVATE_DIRS\" is therefore ignored.")
+          endif()
+        endif()
+
+        # Execute dpkg-shlibdeps
+        # --ignore-missing-info : allow dpkg-shlibdeps to run even if some libs do not belong to a package
+        # -l<dir>: make dpkg-shlibdeps also search in this directory for (private) shared library dependencies
+        # -O : print to STDOUT
+        execute_process(COMMAND ${SHLIBDEPS_EXECUTABLE} ${PRIVATE_SEARCH_DIR_OPTIONS} ${IGNORE_MISSING_INFO_FLAG} -O ${CPACK_DEB_BINARY_FILES}
+          WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
+          OUTPUT_VARIABLE SHLIBDEPS_OUTPUT
+          RESULT_VARIABLE SHLIBDEPS_RESULT
+          ERROR_VARIABLE SHLIBDEPS_ERROR
+          OUTPUT_STRIP_TRAILING_WHITESPACE )
+        if(CPACK_DEBIAN_PACKAGE_DEBUG)
+          # dpkg-shlibdeps will throw some warnings if some input files are not binary
+          message( "CPackDeb Debug: dpkg-shlibdeps warnings \n${SHLIBDEPS_ERROR}")
+        endif()
+        if(NOT SHLIBDEPS_RESULT EQUAL 0)
+          message(FATAL_ERROR "CPackDeb: dpkg-shlibdeps: '${SHLIBDEPS_ERROR}';\n"
+              "executed command: '${SHLIBDEPS_EXECUTABLE} ${PRIVATE_SEARCH_DIR_OPTIONS} ${IGNORE_MISSING_INFO_FLAG} -O ${CPACK_DEB_BINARY_FILES}';\n"
+              "found files: '${INSTALL_FILE_}';\n"
+              "files info: '${CPACK_DEB_INSTALL_FILES}';\n"
+              "binary files: '${CPACK_DEB_BINARY_FILES}'")
+        endif()
+
+        #Get rid of prefix generated by dpkg-shlibdeps
+        string(REGEX REPLACE "^.*Depends=" "" CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS "${SHLIBDEPS_OUTPUT}")
+
+        if(CPACK_DEBIAN_PACKAGE_DEBUG)
+          message("CPackDeb Debug: Found dependency: ${CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS} from output ${SHLIBDEPS_OUTPUT}")
+        endif()
+
+        # Remove blank control file
+        # Might not be safe if package actual contain file or directory named debian
+        file(REMOVE_RECURSE "${CPACK_TEMPORARY_DIRECTORY}/debian")
+
+        # remove temporary directory that was created only for dpkg-shlibdeps execution
+        file(REMOVE_RECURSE "${CPACK_TEMPORARY_DIRECTORY}/DEBIAN")
+      else()
+        if(CPACK_DEBIAN_PACKAGE_DEBUG)
+          message(AUTHOR_WARNING "CPackDeb Debug: Using only user-provided depends because package does not contain executable files that link to shared libraries.")
+        endif()
+      endif()
+    else()
+      message("CPackDeb: Using only user-provided dependencies because dpkg-shlibdeps is not found.")
+    endif()
+
+  else()
+    if(CPACK_DEBIAN_PACKAGE_DEBUG)
+      message("CPackDeb Debug: Using only user-provided dependencies")
+    endif()
+  endif()
+
+  # Let's define the control file found in debian package:
+
+  # Binary package:
+  # http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-binarycontrolfiles
+
+  # DEBIAN/control
+  # debian policy enforce lower case for package name
+  # Package: (mandatory)
+  if(NOT CPACK_DEBIAN_PACKAGE_NAME)
+    string(TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_DEBIAN_PACKAGE_NAME)
+  endif()
+
+  # Version: (mandatory)
+  if(NOT CPACK_DEBIAN_PACKAGE_VERSION)
+    if(NOT CPACK_PACKAGE_VERSION)
+      message(FATAL_ERROR "CPackDeb: Debian package requires a package version")
+    endif()
+    set(CPACK_DEBIAN_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION})
+  endif()
+
+  if(DEFINED CPACK_DEBIAN_PACKAGE_RELEASE OR DEFINED CPACK_DEBIAN_PACKAGE_EPOCH)
+    # only test the version format if CPACK_DEBIAN_PACKAGE_RELEASE or
+    # CPACK_DEBIAN_PACKAGE_EPOCH is set
+    if(NOT CPACK_DEBIAN_PACKAGE_VERSION MATCHES "^[0-9][A-Za-z0-9.+~-]*$")
+      message(FATAL_ERROR
+        "CPackDeb: Debian package version must confirm to \"^[0-9][A-Za-z0-9.+~-]*$\" regex!")
+    endif()
+  else()
+    # before CMake 3.10 version format was not tested so only warn to preserve
+    # backward compatibility
+    if(NOT CPACK_DEBIAN_PACKAGE_VERSION MATCHES "^([0-9]+:)?[0-9][A-Za-z0-9.+~-]*$")
+      message(AUTHOR_WARNING
+        "CPackDeb: Debian package versioning ([<epoch>:]<version>[-<release>])"
+        " should confirm to \"^([0-9]+:)?[0-9][A-Za-z0-9.+~-]*$\" regex in"
+        " order to satisfy Debian packaging rules.")
+    endif()
+  endif()
+
+  if(CPACK_DEBIAN_PACKAGE_RELEASE)
+    if(NOT CPACK_DEBIAN_PACKAGE_RELEASE MATCHES "^[A-Za-z0-9.+~]+$")
+      message(FATAL_ERROR
+        "CPackDeb: Debian package release must confirm to \"^[A-Za-z0-9.+~]+$\" regex!")
+    endif()
+    string(APPEND CPACK_DEBIAN_PACKAGE_VERSION
+      "-${CPACK_DEBIAN_PACKAGE_RELEASE}")
+  elseif(DEFINED CPACK_DEBIAN_PACKAGE_EPOCH)
+    # only test the version format if CPACK_DEBIAN_PACKAGE_RELEASE or
+    # CPACK_DEBIAN_PACKAGE_EPOCH is set - versions CPack/Deb generator before
+    # CMake 3.10 did not check for version format so we have to preserve
+    # backward compatibility
+    if(CPACK_DEBIAN_PACKAGE_VERSION MATCHES ".*-.*")
+      message(FATAL_ERROR
+        "CPackDeb: Debian package version must not contain hyphens when CPACK_DEBIAN_PACKAGE_RELEASE is not provided!")
+    endif()
+  endif()
+
+  if(CPACK_DEBIAN_PACKAGE_EPOCH)
+    if(NOT CPACK_DEBIAN_PACKAGE_EPOCH MATCHES "^[0-9]+$")
+      message(FATAL_ERROR
+        "CPackDeb: Debian package epoch must confirm to \"^[0-9]+$\" regex!")
+    endif()
+    set(CPACK_DEBIAN_PACKAGE_VERSION
+      "${CPACK_DEBIAN_PACKAGE_EPOCH}:${CPACK_DEBIAN_PACKAGE_VERSION}")
+  endif()
+
+  # Architecture: (mandatory)
+  if(CPACK_DEB_PACKAGE_COMPONENT AND CPACK_DEBIAN_${_local_component_name}_PACKAGE_ARCHITECTURE)
+    set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "${CPACK_DEBIAN_${_local_component_name}_PACKAGE_ARCHITECTURE}")
+  elseif(NOT CPACK_DEBIAN_PACKAGE_ARCHITECTURE)
+    # There is no such thing as i686 architecture on debian, you should use i386 instead
+    # $ dpkg --print-architecture
+    find_program(DPKG_CMD dpkg)
+    if(NOT DPKG_CMD)
+      message(STATUS "CPackDeb: Can not find dpkg in your path, default to i386.")
+      set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE i386)
+    endif()
+    execute_process(COMMAND "${DPKG_CMD}" --print-architecture
+      OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE
+      OUTPUT_STRIP_TRAILING_WHITESPACE
+      )
+  endif()
+
+  # Source: (optional)
+  # in case several packages are constructed from a unique source
+  # (multipackaging), the source may be indicated as well.
+  # The source might contain a version if the generated package
+  # version is different from the source version
+  if(NOT CPACK_DEBIAN_PACKAGE_SOURCE)
+    set(CPACK_DEBIAN_PACKAGE_SOURCE "")
+  endif()
+
+  # have a look at get_property(result GLOBAL PROPERTY ENABLED_FEATURES),
+  # this returns the successful find_package() calls, maybe this can help
+  # Depends:
+  # You should set: DEBIAN_PACKAGE_DEPENDS
+  # TODO: automate 'objdump -p | grep NEEDED'
+
+  # if per-component variable, overrides the global CPACK_DEBIAN_PACKAGE_${variable_type_}
+  # automatic dependency discovery will be performed afterwards.
+  if(CPACK_DEB_PACKAGE_COMPONENT)
+    foreach(value_type_ IN ITEMS DEPENDS RECOMMENDS SUGGESTS PREDEPENDS ENHANCES BREAKS CONFLICTS PROVIDES REPLACES SOURCE SECTION PRIORITY NAME)
+      set(_component_var "CPACK_DEBIAN_${_local_component_name}_PACKAGE_${value_type_}")
+
+      # if set, overrides the global variable
+      if(DEFINED ${_component_var})
+        set(CPACK_DEBIAN_PACKAGE_${value_type_} "${${_component_var}}")
+        if(CPACK_DEBIAN_PACKAGE_DEBUG)
+          message("CPackDeb Debug: component '${_local_component_name}' ${value_type_} "
+            "value set to '${CPACK_DEBIAN_PACKAGE_${value_type_}}'")
+        endif()
+      endif()
+    endforeach()
+
+    if(CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS)
+      unset(COMPONENT_DEPENDS)
+      foreach(_PACK IN LISTS CPACK_COMPONENT_${_local_component_name}_DEPENDS)
+        get_component_package_name(_PACK_NAME "${_PACK}")
+        list(PREPEND COMPONENT_DEPENDS "${_PACK_NAME} (= ${CPACK_DEBIAN_PACKAGE_VERSION})")
+      endforeach()
+      list(JOIN COMPONENT_DEPENDS ", " COMPONENT_DEPENDS)
+      if(COMPONENT_DEPENDS)
+        list(PREPEND CPACK_DEBIAN_PACKAGE_DEPENDS ${COMPONENT_DEPENDS})
+        list(JOIN CPACK_DEBIAN_PACKAGE_DEPENDS ", " CPACK_DEBIAN_PACKAGE_DEPENDS)
+      endif()
+    endif()
+  endif()
+
+  # at this point, the CPACK_DEBIAN_PACKAGE_DEPENDS is properly set
+  # to the minimal dependency of the package
+  # Append automatically discovered dependencies .
+  if(CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS)
+    list(APPEND CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS})
+    list(JOIN CPACK_DEBIAN_PACKAGE_DEPENDS ", " CPACK_DEBIAN_PACKAGE_DEPENDS)
+  endif()
+
+  if(NOT CPACK_DEBIAN_PACKAGE_DEPENDS)
+    message(STATUS "CPACK_DEBIAN_PACKAGE_DEPENDS not set, the package will have no dependencies.")
+  endif()
+
+  # Maintainer: (mandatory)
+  if(NOT CPACK_DEBIAN_PACKAGE_MAINTAINER)
+    if(NOT CPACK_PACKAGE_CONTACT)
+      message(FATAL_ERROR "CPackDeb: Debian package requires a maintainer for a package, set CPACK_PACKAGE_CONTACT or CPACK_DEBIAN_PACKAGE_MAINTAINER")
+    endif()
+    set(CPACK_DEBIAN_PACKAGE_MAINTAINER ${CPACK_PACKAGE_CONTACT})
+  endif()
+
+  # Description: (mandatory)
+  # Try package description first
+  if(CPACK_USED_DEFAULT_PACKAGE_DESCRIPTION_FILE)
+    set(_desc_fallback)
+  else()
+    set(_desc_fallback "CPACK_PACKAGE_DESCRIPTION")
+  endif()
+  if(CPACK_DEB_PACKAGE_COMPONENT)
+    cpack_deb_variable_fallback("CPACK_DEBIAN_PACKAGE_DESCRIPTION"
+      "CPACK_DEBIAN_${_local_component_name}_DESCRIPTION"
+      "CPACK_COMPONENT_${_local_component_name}_DESCRIPTION")
+  else()
+    cpack_deb_variable_fallback("CPACK_DEBIAN_PACKAGE_DESCRIPTION"
+      "CPACK_DEBIAN_PACKAGE_DESCRIPTION"
+      ${_desc_fallback})
+  endif()
+
+  # Still no description? ... and description file has set ...
+  if(NOT CPACK_DEBIAN_PACKAGE_DESCRIPTION
+     AND CPACK_PACKAGE_DESCRIPTION_FILE
+     AND NOT CPACK_PACKAGE_DESCRIPTION_FILE STREQUAL CPACK_DEFAULT_PACKAGE_DESCRIPTION_FILE)
+    # Read `CPACK_PACKAGE_DESCRIPTION_FILE` then...
+    file(READ ${CPACK_PACKAGE_DESCRIPTION_FILE} CPACK_DEBIAN_PACKAGE_DESCRIPTION)
+  endif()
+
+  # Still no description? #2
+  if(NOT CPACK_DEBIAN_PACKAGE_DESCRIPTION)
+    # Try to get `CPACK_PACKAGE_DESCRIPTION_SUMMARY` as the last hope
+    if(CPACK_PACKAGE_DESCRIPTION_SUMMARY)
+      set(CPACK_DEBIAN_PACKAGE_DESCRIPTION ${CPACK_PACKAGE_DESCRIPTION_SUMMARY})
+    else()
+      # Giving up! Report an error...
+      set(_description_failure_message
+        "CPackDeb: Debian package requires a summary for a package, set CPACK_PACKAGE_DESCRIPTION_SUMMARY or CPACK_DEBIAN_PACKAGE_DESCRIPTION")
+      if(CPACK_DEB_PACKAGE_COMPONENT)
+        string(APPEND _description_failure_message
+          " or CPACK_DEBIAN_${_local_component_name}_DESCRIPTION")
+      endif()
+      message(FATAL_ERROR "${_description_failure_message}")
+    endif()
+
+  # Ok, description has set. According to the `Debian Policy Manual`_ the first
+  # line is a package summary.  Try to get it as well...
+  # See also: https://www.debian.org/doc/debian-policy/ch-controlfields.html#description
+  elseif(CPACK_PACKAGE_DESCRIPTION_SUMMARY AND
+         NOT CPACK_PACKAGE_DESCRIPTION_SUMMARY STREQUAL CPACK_DEFAULT_PACKAGE_DESCRIPTION_SUMMARY)
+    # Merge summary w/ the detailed description
+    string(PREPEND CPACK_DEBIAN_PACKAGE_DESCRIPTION "${CPACK_PACKAGE_DESCRIPTION_SUMMARY}\n")
+  endif()
+  # assert(CPACK_DEBIAN_PACKAGE_DESCRIPTION)
+
+  # Make sure description is properly formatted
+  cpack_deb_format_package_description(
+    "${CPACK_DEBIAN_PACKAGE_DESCRIPTION}"
+    CPACK_DEBIAN_PACKAGE_DESCRIPTION
+  )
+
+  # Homepage: (optional)
+  if(NOT CPACK_DEBIAN_PACKAGE_HOMEPAGE AND CPACK_PACKAGE_HOMEPAGE_URL)
+    set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "${CPACK_PACKAGE_HOMEPAGE_URL}")
+  endif()
+
+  # Section: (recommended)
+  if(NOT CPACK_DEBIAN_PACKAGE_SECTION)
+    set(CPACK_DEBIAN_PACKAGE_SECTION "devel")
+  endif()
+
+  # Priority: (recommended)
+  if(NOT CPACK_DEBIAN_PACKAGE_PRIORITY)
+    set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
+  endif()
+
+  if(CPACK_DEBIAN_ARCHIVE_TYPE)
+    if(CPACK_DEBIAN_ARCHIVE_TYPE STREQUAL "paxr")
+      message(DEPRECATION "CPACK_DEBIAN_ARCHIVE_TYPE set to old and invalid "
+        "type 'paxr', mapping to 'gnutar'")
+      set(CPACK_DEBIAN_ARCHIVE_TYPE "gnutar")
+    elseif(NOT CPACK_DEBIAN_ARCHIVE_TYPE STREQUAL "gnutar")
+      message(FATAL_ERROR "CPACK_DEBIAN_ARCHIVE_TYPE set to unsupported"
+        "type ${CPACK_DEBIAN_ARCHIVE_TYPE}")
+    endif()
+  else()
+    set(CPACK_DEBIAN_ARCHIVE_TYPE "gnutar")
+  endif()
+
+  # Compression: (recommended)
+  if(NOT CPACK_DEBIAN_COMPRESSION_TYPE)
+    set(CPACK_DEBIAN_COMPRESSION_TYPE "gzip")
+  endif()
+
+  # Recommends:
+  # You should set: CPACK_DEBIAN_PACKAGE_RECOMMENDS
+
+  # Suggests:
+  # You should set: CPACK_DEBIAN_PACKAGE_SUGGESTS
+
+  # CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
+  # This variable allow advanced user to add custom script to the control.tar.gz (inside the .deb archive)
+  # Typical examples are:
+  # - conffiles
+  # - postinst
+  # - postrm
+  # - prerm
+  # Usage:
+  # set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
+  #    "${CMAKE_CURRENT_SOURCE_DIR}/prerm;${CMAKE_CURRENT_SOURCE_DIR}/postrm")
+
+  # Are we packaging components ?
+  if(CPACK_DEB_PACKAGE_COMPONENT)
+    # override values with per component version if set
+    foreach(VAR_NAME_ IN ITEMS PACKAGE_CONTROL_EXTRA PACKAGE_CONTROL_STRICT_PERMISSION)
+      if(CPACK_DEBIAN_${_local_component_name}_${VAR_NAME_})
+        set(CPACK_DEBIAN_${VAR_NAME_} "${CPACK_DEBIAN_${_local_component_name}_${VAR_NAME_}}")
+      endif()
+    endforeach()
+    get_component_package_name(CPACK_DEBIAN_PACKAGE_NAME ${_local_component_name})
+  endif()
+
+  if(NOT CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY)
+    set(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY "=")
+  endif()
+
+  unset(CPACK_DEBIAN_PACKAGE_SHLIBS_LIST)
+
+  if(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS)
+    if(READELF_EXECUTABLE)
+      foreach(_FILE IN LISTS CPACK_DEB_SHARED_OBJECT_FILES)
+        extract_so_info("${_FILE}" libname soversion)
+        if(libname AND DEFINED soversion)
+          list(APPEND CPACK_DEBIAN_PACKAGE_SHLIBS_LIST
+               "${libname} ${soversion} ${CPACK_DEBIAN_PACKAGE_NAME} (${CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY} ${CPACK_DEBIAN_PACKAGE_VERSION})")
+        else()
+          message(AUTHOR_WARNING "Shared library '${_FILE}' is missing soname or soversion. Library will not be added to DEBIAN/shlibs control file.")
+        endif()
+      endforeach()
+      list(JOIN CPACK_DEBIAN_PACKAGE_SHLIBS_LIST "\n" CPACK_DEBIAN_PACKAGE_SHLIBS_LIST)
+    else()
+      message(FATAL_ERROR "Readelf utility is not available. CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS option is not available.")
+    endif()
+  endif()
+
+  # add ldconfig call in default postrm and postint
+  set(CPACK_ADD_LDCONFIG_CALL 0)
+  # all files in CPACK_DEB_SHARED_OBJECT_FILES have dot at the beginning
+  set(_LDCONF_DEFAULTS "./lib" "./usr/lib")
+  foreach(_FILE IN LISTS CPACK_DEB_SHARED_OBJECT_FILES)
+    get_filename_component(_DIR ${_FILE} DIRECTORY)
+    get_filename_component(_PARENT_DIR ${_DIR} DIRECTORY)
+    if(_DIR IN_LIST _LDCONF_DEFAULTS OR _PARENT_DIR IN_LIST _LDCONF_DEFAULTS)
+      set(CPACK_ADD_LDCONFIG_CALL 1)
+    endif()
+  endforeach()
+
+  if(CPACK_ADD_LDCONFIG_CALL)
+    set(CPACK_DEBIAN_GENERATE_POSTINST 1)
+    set(CPACK_DEBIAN_GENERATE_POSTRM 1)
+    foreach(f IN LISTS CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA)
+      get_filename_component(n "${f}" NAME)
+      if(n STREQUAL "postinst")
+        set(CPACK_DEBIAN_GENERATE_POSTINST 0)
+      endif()
+      if(n STREQUAL "postrm")
+        set(CPACK_DEBIAN_GENERATE_POSTRM 0)
+      endif()
+    endforeach()
+  else()
+    set(CPACK_DEBIAN_GENERATE_POSTINST 0)
+    set(CPACK_DEBIAN_GENERATE_POSTRM 0)
+  endif()
+
+  cpack_deb_variable_fallback("CPACK_DEBIAN_FILE_NAME"
+    "CPACK_DEBIAN_${_local_component_name}_FILE_NAME"
+    "CPACK_DEBIAN_FILE_NAME")
+  if(CPACK_DEBIAN_FILE_NAME)
+    if(CPACK_DEBIAN_FILE_NAME STREQUAL "DEB-DEFAULT")
+      # Patch package file name to be in correct debian format:
+      # <foo>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb
+      set(CPACK_OUTPUT_FILE_NAME
+        "${CPACK_DEBIAN_PACKAGE_NAME}_${CPACK_DEBIAN_PACKAGE_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb")
+      set(CPACK_DBGSYM_OUTPUT_FILE_NAME
+        "${CPACK_DEBIAN_PACKAGE_NAME}-dbgsym_${CPACK_DEBIAN_PACKAGE_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.ddeb")
+    else()
+      if(NOT CPACK_DEBIAN_FILE_NAME MATCHES ".*\\.(deb|ipk)")
+        message(FATAL_ERROR "'${CPACK_DEBIAN_FILE_NAME}' is not a valid DEB package file name as it must end with '.deb' or '.ipk'!")
+      endif()
+
+      set(CPACK_OUTPUT_FILE_NAME "${CPACK_DEBIAN_FILE_NAME}")
+      string(REGEX REPLACE "\.deb$" "-dbgsym.ddeb" CPACK_DBGSYM_OUTPUT_FILE_NAME "${CPACK_DEBIAN_FILE_NAME}")
+    endif()
+
+    set(CPACK_TEMPORARY_PACKAGE_FILE_NAME "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_OUTPUT_FILE_NAME}")
+    get_filename_component(BINARY_DIR "${CPACK_OUTPUT_FILE_PATH}" DIRECTORY)
+    set(CPACK_OUTPUT_FILE_PATH "${BINARY_DIR}/${CPACK_OUTPUT_FILE_NAME}")
+  else()
+    # back compatibility - don't change the name
+    string(REGEX REPLACE "\.deb$" "-dbgsym.ddeb" CPACK_DBGSYM_OUTPUT_FILE_NAME "${CPACK_OUTPUT_FILE_NAME}")
+  endif()
+
+  # Print out some debug information if we were asked for that
+  if(CPACK_DEBIAN_PACKAGE_DEBUG)
+     message("CPackDeb:Debug: CPACK_TOPLEVEL_DIRECTORY          = '${CPACK_TOPLEVEL_DIRECTORY}'")
+     message("CPackDeb:Debug: CPACK_TOPLEVEL_TAG                = '${CPACK_TOPLEVEL_TAG}'")
+     message("CPackDeb:Debug: CPACK_TEMPORARY_DIRECTORY         = '${CPACK_TEMPORARY_DIRECTORY}'")
+     message("CPackDeb:Debug: CPACK_OUTPUT_FILE_NAME            = '${CPACK_OUTPUT_FILE_NAME}'")
+     message("CPackDeb:Debug: CPACK_OUTPUT_FILE_PATH            = '${CPACK_OUTPUT_FILE_PATH}'")
+     message("CPackDeb:Debug: CPACK_PACKAGE_FILE_NAME           = '${CPACK_PACKAGE_FILE_NAME}'")
+     message("CPackDeb:Debug: CPACK_PACKAGE_INSTALL_DIRECTORY   = '${CPACK_PACKAGE_INSTALL_DIRECTORY}'")
+     message("CPackDeb:Debug: CPACK_TEMPORARY_PACKAGE_FILE_NAME = '${CPACK_TEMPORARY_PACKAGE_FILE_NAME}'")
+     message("CPackDeb:Debug: CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION = '${CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION}'")
+     message("CPackDeb:Debug: CPACK_DEBIAN_PACKAGE_SOURCE       = '${CPACK_DEBIAN_PACKAGE_SOURCE}'")
+  endif()
+
+  # For debian source packages:
+  # debian/control
+  # http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-sourcecontrolfiles
+
+  # .dsc
+  # http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-debiansourcecontrolfiles
+
+  # Builds-Depends:
+  #if(NOT CPACK_DEBIAN_PACKAGE_BUILDS_DEPENDS)
+  #  set(CPACK_DEBIAN_PACKAGE_BUILDS_DEPENDS
+  #    "debhelper (>> 5.0.0), libncurses5-dev, tcl8.4"
+  #  )
+  #endif()
+
+  # move variables to parent scope so that they may be used to create debian package
+  set(GEN_CPACK_OUTPUT_FILE_NAME "${CPACK_OUTPUT_FILE_NAME}" PARENT_SCOPE)
+  set(GEN_CPACK_TEMPORARY_PACKAGE_FILE_NAME "${CPACK_TEMPORARY_PACKAGE_FILE_NAME}" PARENT_SCOPE)
+  set(GEN_CPACK_DEBIAN_PACKAGE_NAME "${CPACK_DEBIAN_PACKAGE_NAME}" PARENT_SCOPE)
+  set(GEN_CPACK_DEBIAN_PACKAGE_VERSION "${CPACK_DEBIAN_PACKAGE_VERSION}" PARENT_SCOPE)
+  set(GEN_CPACK_DEBIAN_PACKAGE_SECTION "${CPACK_DEBIAN_PACKAGE_SECTION}" PARENT_SCOPE)
+  set(GEN_CPACK_DEBIAN_PACKAGE_PRIORITY "${CPACK_DEBIAN_PACKAGE_PRIORITY}" PARENT_SCOPE)
+  set(GEN_CPACK_DEBIAN_PACKAGE_ARCHITECTURE "${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}" PARENT_SCOPE)
+  set(GEN_CPACK_DEBIAN_PACKAGE_MAINTAINER "${CPACK_DEBIAN_PACKAGE_MAINTAINER}" PARENT_SCOPE)
+  set(GEN_CPACK_DEBIAN_PACKAGE_DESCRIPTION "${CPACK_DEBIAN_PACKAGE_DESCRIPTION}" PARENT_SCOPE)
+  set(GEN_CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}" PARENT_SCOPE)
+  set(GEN_CPACK_DEBIAN_ARCHIVE_TYPE "${CPACK_DEBIAN_ARCHIVE_TYPE}" PARENT_SCOPE)
+  set(GEN_CPACK_DEBIAN_COMPRESSION_TYPE "${CPACK_DEBIAN_COMPRESSION_TYPE}" PARENT_SCOPE)
+  set(GEN_CPACK_DEBIAN_PACKAGE_RECOMMENDS "${CPACK_DEBIAN_PACKAGE_RECOMMENDS}" PARENT_SCOPE)
+  set(GEN_CPACK_DEBIAN_PACKAGE_SUGGESTS "${CPACK_DEBIAN_PACKAGE_SUGGESTS}" PARENT_SCOPE)
+  set(GEN_CPACK_DEBIAN_PACKAGE_HOMEPAGE "${CPACK_DEBIAN_PACKAGE_HOMEPAGE}" PARENT_SCOPE)
+  set(GEN_CPACK_DEBIAN_PACKAGE_PREDEPENDS "${CPACK_DEBIAN_PACKAGE_PREDEPENDS}" PARENT_SCOPE)
+  set(GEN_CPACK_DEBIAN_PACKAGE_ENHANCES "${CPACK_DEBIAN_PACKAGE_ENHANCES}" PARENT_SCOPE)
+  set(GEN_CPACK_DEBIAN_PACKAGE_BREAKS "${CPACK_DEBIAN_PACKAGE_BREAKS}" PARENT_SCOPE)
+  set(GEN_CPACK_DEBIAN_PACKAGE_CONFLICTS "${CPACK_DEBIAN_PACKAGE_CONFLICTS}" PARENT_SCOPE)
+  set(GEN_CPACK_DEBIAN_PACKAGE_PROVIDES "${CPACK_DEBIAN_PACKAGE_PROVIDES}" PARENT_SCOPE)
+  set(GEN_CPACK_DEBIAN_PACKAGE_REPLACES "${CPACK_DEBIAN_PACKAGE_REPLACES}" PARENT_SCOPE)
+  set(GEN_CPACK_DEBIAN_PACKAGE_SHLIBS "${CPACK_DEBIAN_PACKAGE_SHLIBS_LIST}" PARENT_SCOPE)
+  set(GEN_CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA}" PARENT_SCOPE)
+  set(GEN_CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION
+      "${CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION}" PARENT_SCOPE)
+  set(GEN_CPACK_DEBIAN_PACKAGE_SOURCE
+     "${CPACK_DEBIAN_PACKAGE_SOURCE}" PARENT_SCOPE)
+  set(GEN_CPACK_DEBIAN_GENERATE_POSTINST "${CPACK_DEBIAN_GENERATE_POSTINST}" PARENT_SCOPE)
+  set(GEN_CPACK_DEBIAN_GENERATE_POSTRM "${CPACK_DEBIAN_GENERATE_POSTRM}" PARENT_SCOPE)
+  set(GEN_WDIR "${WDIR}" PARENT_SCOPE)
+
+  set(GEN_CPACK_DEBIAN_DEBUGINFO_PACKAGE "${CPACK_DEBIAN_DEBUGINFO_PACKAGE}" PARENT_SCOPE)
+  if(BUILD_IDS)
+    set(GEN_DBGSYMDIR "${DBGSYMDIR}" PARENT_SCOPE)
+    set(GEN_CPACK_DBGSYM_OUTPUT_FILE_NAME "${CPACK_DBGSYM_OUTPUT_FILE_NAME}" PARENT_SCOPE)
+    list(JOIN BUILD_IDS " " BUILD_IDS)
+    set(GEN_BUILD_IDS "${BUILD_IDS}" PARENT_SCOPE)
+  else()
+    unset(GEN_DBGSYMDIR PARENT_SCOPE)
+    unset(GEN_CPACK_DBGSYM_OUTPUT_FILE_NAME PARENT_SCOPE)
+    unset(GEN_BUILD_IDS PARENT_SCOPE)
+  endif()
+endfunction()
+
+cpack_deb_prepare_package_vars()
+
+cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/Internal/CPack/CPackExternal.cmake b/share/cmake-3.22/Modules/Internal/CPack/CPackExternal.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Internal/CPack/CPackExternal.cmake
rename to share/cmake-3.22/Modules/Internal/CPack/CPackExternal.cmake
diff --git a/share/cmake-3.18/Modules/Internal/CPack/CPackFreeBSD.cmake b/share/cmake-3.22/Modules/Internal/CPack/CPackFreeBSD.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Internal/CPack/CPackFreeBSD.cmake
rename to share/cmake-3.22/Modules/Internal/CPack/CPackFreeBSD.cmake
diff --git a/share/cmake-3.22/Modules/Internal/CPack/CPackNuGet.cmake b/share/cmake-3.22/Modules/Internal/CPack/CPackNuGet.cmake
new file mode 100644
index 0000000..fb363f4
--- /dev/null
+++ b/share/cmake-3.22/Modules/Internal/CPack/CPackNuGet.cmake
@@ -0,0 +1,440 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+# Author: Alex Turbov
+
+if(CMAKE_BINARY_DIR)
+  message(FATAL_ERROR "CPackNuGet.cmake may only be used by CPack internally.")
+endif()
+
+function(_cpack_nuget_debug)
+    if(CPACK_NUGET_PACKAGE_DEBUG)
+        message("CPackNuGet:Debug: " ${ARGN})
+    endif()
+endfunction()
+
+function(_cpack_nuget_debug_var NAME)
+    if(CPACK_NUGET_PACKAGE_DEBUG)
+        message("CPackNuGet:Debug: ${NAME}=`${${NAME}}`")
+    endif()
+endfunction()
+
+function(_cpack_nuget_variable_fallback OUTPUT_VAR_NAME NUGET_VAR_NAME)
+    if(ARGN)
+        list(JOIN ARGN "`, `" _va_args)
+        set(_va_args ", ARGN: `${_va_args}`")
+    endif()
+    _cpack_nuget_debug(
+        "_cpack_nuget_variable_fallback: "
+        "OUTPUT_VAR_NAME=`${OUTPUT_VAR_NAME}`, "
+        "NUGET_VAR_NAME=`${NUGET_VAR_NAME}`"
+        "${_va_args}"
+      )
+
+    set(_options USE_CDATA)
+    set(_one_value_args LIST_GLUE)
+    set(_multi_value_args FALLBACK_VARS)
+    cmake_parse_arguments(PARSE_ARGV 0 _args "${_options}" "${_one_value_args}" "${_multi_value_args}")
+
+    if(CPACK_NUGET_PACKAGE_COMPONENT)
+        string(
+            TOUPPER "${CPACK_NUGET_PACKAGE_COMPONENT}"
+            CPACK_NUGET_PACKAGE_COMPONENT_UPPER
+          )
+    endif()
+
+    if(CPACK_NUGET_PACKAGE_COMPONENT
+      AND CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT}_PACKAGE_${NUGET_VAR_NAME}
+      )
+        set(
+            _result
+            "${CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT}_PACKAGE_${NUGET_VAR_NAME}}"
+          )
+        _cpack_nuget_debug(
+            "  CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT}_PACKAGE_${NUGET_VAR_NAME}: "
+            "OUTPUT_VAR_NAME->${OUTPUT_VAR_NAME}=`${_result}`"
+          )
+
+    elseif(CPACK_NUGET_PACKAGE_COMPONENT_UPPER
+      AND CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT_UPPER}_PACKAGE_${NUGET_VAR_NAME}
+      )
+        set(
+            _result
+            "${CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT_UPPER}_PACKAGE_${NUGET_VAR_NAME}}"
+          )
+        _cpack_nuget_debug(
+            "  CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT_UPPER}_PACKAGE_${NUGET_VAR_NAME}: "
+            "OUTPUT_VAR_NAME->${OUTPUT_VAR_NAME}=`${_result}`"
+          )
+
+    elseif(CPACK_NUGET_PACKAGE_${NUGET_VAR_NAME})
+        set(_result "${CPACK_NUGET_PACKAGE_${NUGET_VAR_NAME}}")
+        _cpack_nuget_debug(
+            "  CPACK_NUGET_PACKAGE_${NUGET_VAR_NAME}: "
+            "OUTPUT_VAR_NAME->${OUTPUT_VAR_NAME}=`${_result}`"
+          )
+
+    else()
+        foreach(_var IN LISTS _args_FALLBACK_VARS)
+            _cpack_nuget_debug("  Fallback: ${_var} ...")
+            if(${_var})
+                _cpack_nuget_debug("            ${_var}=`${${_var}}`")
+                set(_result "${${_var}}")
+                _cpack_nuget_debug(
+                    "  ${_var}: OUTPUT_VAR_NAME->${OUTPUT_VAR_NAME}=`${_result}`"
+                  )
+                break()
+            endif()
+        endforeach()
+    endif()
+
+    if(_result)
+        if(_args_USE_CDATA)
+            set(_value_before "<![CDATA[")
+            set(_value_after "]]>")
+        endif()
+
+        list(LENGTH _result _result_len)
+        if(_result_len GREATER 1 AND _args_LIST_GLUE)
+            list(JOIN _result "${_args_LIST_GLUE}" _result)
+        endif()
+
+        set(${OUTPUT_VAR_NAME} "${_value_before}${_result}${_value_after}" PARENT_SCOPE)
+    endif()
+
+endfunction()
+
+function(_cpack_nuget_variable_fallback_and_wrap_into_element ELEMENT NUGET_VAR_NAME)
+    set(_options)
+    set(_one_value_args)
+    set(_multi_value_args FALLBACK_VARS ATTRIBUTES)
+    cmake_parse_arguments(PARSE_ARGV 2 _args "${_options}" "${_one_value_args}" "${_multi_value_args}")
+
+    if(_args_ATTRIBUTES)
+        list(JOIN _args_ATTRIBUTES " " _attributes)
+        string(PREPEND _attributes " ")
+    endif()
+
+    _cpack_nuget_variable_fallback(_value ${NUGET_VAR_NAME} ${ARGN} USE_CDATA)
+
+    string(TOUPPER "${ELEMENT}" _ELEMENT_UP)
+    if(_value)
+        set(
+            _CPACK_NUGET_${_ELEMENT_UP}_TAG
+            "<${ELEMENT}${_attributes}>${_value}</${ELEMENT}>"
+            PARENT_SCOPE
+          )
+    elseif(_attributes)
+        set(
+            _CPACK_NUGET_${_ELEMENT_UP}_TAG
+            "<${ELEMENT}${_attributes} />"
+            PARENT_SCOPE
+          )
+    endif()
+endfunction()
+
+# Warn of obsolete nuspec fields, referencing CMake variables and suggested
+# replacement, if any
+function(_cpack_nuget_deprecation_warning NUGET_ELEMENT VARNAME REPLACEMENT)
+    if(${VARNAME})
+        if(REPLACEMENT)
+            message(DEPRECATION "nuspec element `${NUGET_ELEMENT}` is deprecated in NuGet; consider replacing `${VARNAME}` with `${REPLACEMENT}`")
+        else()
+            message(DEPRECATION "nuspec element `${NUGET_ELEMENT}` is deprecated in NuGet; consider removing `${VARNAME}`")
+        endif()
+    endif()
+endfunction()
+
+# Print some debug info
+_cpack_nuget_debug("---[CPack NuGet Input Variables]---")
+_cpack_nuget_debug_var(CPACK_PACKAGE_NAME)
+_cpack_nuget_debug_var(CPACK_PACKAGE_VERSION)
+_cpack_nuget_debug_var(CPACK_TOPLEVEL_TAG)
+_cpack_nuget_debug_var(CPACK_TOPLEVEL_DIRECTORY)
+_cpack_nuget_debug_var(CPACK_TEMPORARY_DIRECTORY)
+_cpack_nuget_debug_var(CPACK_NUGET_GROUPS)
+if(CPACK_NUGET_GROUPS)
+    foreach(_group IN LISTS CPACK_NUGET_GROUPS)
+        string(MAKE_C_IDENTIFIER "${_group}" _group_up)
+        string(TOUPPER "${_group_up}" _group_up)
+        _cpack_nuget_debug_var(CPACK_NUGET_${_group_up}_GROUP_COMPONENTS)
+    endforeach()
+endif()
+_cpack_nuget_debug_var(CPACK_NUGET_COMPONENTS)
+_cpack_nuget_debug_var(CPACK_NUGET_ALL_IN_ONE)
+_cpack_nuget_debug_var(CPACK_NUGET_ORDINAL_MONOLITIC)
+_cpack_nuget_debug("-----------------------------------")
+
+function(_cpack_nuget_render_spec)
+    # Make a variable w/ upper-cased component name
+    if(CPACK_NUGET_PACKAGE_COMPONENT)
+        string(TOUPPER "${CPACK_NUGET_PACKAGE_COMPONENT}" CPACK_NUGET_PACKAGE_COMPONENT_UPPER)
+    endif()
+
+    # Set mandatory variables (not wrapped into XML elements)
+    # https://docs.microsoft.com/en-us/nuget/reference/nuspec#required-metadata-elements
+    if(CPACK_NUGET_PACKAGE_COMPONENT)
+        if(CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT_UPPER}_PACKAGE_NAME)
+            set(
+                CPACK_NUGET_PACKAGE_NAME
+                "${CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT_UPPER}_PACKAGE_NAME}"
+              )
+        elseif(NOT CPACK_NUGET_PACKAGE_COMPONENT STREQUAL "Unspecified")
+            set(
+                CPACK_NUGET_PACKAGE_NAME
+                "${CPACK_PACKAGE_NAME}.${CPACK_NUGET_PACKAGE_COMPONENT}"
+              )
+        else()
+            set(CPACK_NUGET_PACKAGE_NAME "${CPACK_PACKAGE_NAME}")
+        endif()
+    elseif(NOT CPACK_NUGET_PACKAGE_NAME)
+        set(CPACK_NUGET_PACKAGE_NAME "${CPACK_PACKAGE_NAME}")
+    endif()
+
+    # Warn about deprecated nuspec elements; warnings only display if
+    # variable is set
+    # Note that while nuspec's "summary" element is deprecated, there
+    # is no suggested replacement so (for now) no deprecation warning
+    # is shown for `CPACK_NUGET_*_DESCRIPTION_SUMMARY`
+    _cpack_nuget_deprecation_warning("licenseUrl" CPACK_NUGET_PACKAGE_LICENSEURL
+        "CPACK_NUGET_PACKAGE_LICENSE_FILE_NAME or CPACK_NUGET_PACKAGE_LICENSE_EXPRESSION")
+    _cpack_nuget_deprecation_warning("licenseUrl" CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT}_LICENSEURL
+        "CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT}_LICENSE_FILE_NAME or CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT}_LICENSE_EXPRESSION")
+    _cpack_nuget_deprecation_warning("iconUrl" CPACK_NUGET_PACKAGE_ICONURL
+        "CPACK_NUGET_PACKAGE_ICON")
+    _cpack_nuget_deprecation_warning("iconUrl" CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT}_ICONURL
+        "CPACK_NUGET_${CPACK_NUGET_PACKAGE_COMPONENT}_ICON")
+
+    # Set nuspec fields
+    _cpack_nuget_variable_fallback(
+        CPACK_NUGET_PACKAGE_VERSION VERSION
+        FALLBACK_VARS
+            CPACK_PACKAGE_VERSION
+      )
+    _cpack_nuget_variable_fallback(
+        CPACK_NUGET_PACKAGE_DESCRIPTION DESCRIPTION
+        FALLBACK_VARS
+            CPACK_COMPONENT_${CPACK_NUGET_PACKAGE_COMPONENT}_DESCRIPTION
+            CPACK_COMPONENT_${CPACK_NUGET_PACKAGE_COMPONENT_UPPER}_DESCRIPTION
+            CPACK_COMPONENT_GROUP_${CPACK_NUGET_PACKAGE_COMPONENT_UPPER}_DESCRIPTION
+            CPACK_PACKAGE_DESCRIPTION
+        USE_CDATA
+      )
+    _cpack_nuget_variable_fallback(
+        CPACK_NUGET_PACKAGE_AUTHORS AUTHORS
+        FALLBACK_VARS
+            CPACK_PACKAGE_VENDOR
+        USE_CDATA
+        LIST_GLUE ","
+      )
+
+    # Set optional variables (wrapped into XML elements)
+    # https://docs.microsoft.com/en-us/nuget/reference/nuspec#optional-metadata-elements
+    _cpack_nuget_variable_fallback_and_wrap_into_element(
+        title
+        TITLE
+        FALLBACK_VARS
+            CPACK_COMPONENT_${CPACK_NUGET_PACKAGE_COMPONENT}_DISPLAY_NAME
+            CPACK_COMPONENT_${CPACK_NUGET_PACKAGE_COMPONENT_UPPER}_DISPLAY_NAME
+            CPACK_COMPONENT_GROUP_${CPACK_NUGET_PACKAGE_COMPONENT_UPPER}_DISPLAY_NAME
+      )
+    _cpack_nuget_variable_fallback_and_wrap_into_element(owners OWNERS LIST_GLUE ",")
+    _cpack_nuget_variable_fallback_and_wrap_into_element(
+        projectUrl
+        HOMEPAGE_URL
+        FALLBACK_VARS
+            CPACK_PACKAGE_HOMEPAGE_URL
+      )
+
+    # "licenseUrl" is deprecated in favor of "license"
+    _cpack_nuget_variable_fallback_and_wrap_into_element(licenseUrl LICENSEURL)
+
+    # "iconUrl" is deprecated in favor of "icon"
+    _cpack_nuget_variable_fallback_and_wrap_into_element(iconUrl ICONURL)
+
+    # "license" takes a "type" attribute of either "file" or "expression"
+    # "file" refers to a file path of a .txt or .md file relative to the installation root
+    # "expression" refers to simple or compound expression of license identifiers
+    # listed at https://spdx.org/licenses/
+    # Note that only one of CPACK_NUGET_PACKAGE_LICENSE_FILE_NAME and
+    # CPACK_NUGET_PACKAGE_LICENSE_EXPRESSION may be specified. If both are specified,
+    # CPACK_NUGET_PACKAGE_LICENSE_FILE_NAME takes precedence and CPACK_NUGET_PACKAGE_LICENSE_EXPRESSION is ignored.
+    if(CPACK_NUGET_PACKAGE_LICENSE_FILE_NAME)
+        _cpack_nuget_variable_fallback_and_wrap_into_element(
+            license LICENSE_FILE_NAME
+            ATTRIBUTES [[type="file"]]
+          )
+    elseif(CPACK_NUGET_PACKAGE_LICENSE_EXPRESSION)
+        _cpack_nuget_variable_fallback_and_wrap_into_element(
+            license LICENSE_EXPRESSION
+            ATTRIBUTES [[type="expression"]]
+          )
+    endif()
+
+    # "icon" refers to a file path relative to the installation root
+    _cpack_nuget_variable_fallback_and_wrap_into_element(icon ICON)
+    # "summary" is deprecated in favor of "description"
+    _cpack_nuget_variable_fallback_and_wrap_into_element(
+        summary DESCRIPTION_SUMMARY
+        FALLBACK_VARS
+            CPACK_PACKAGE_DESCRIPTION_SUMMARY
+      )
+    if(CPACK_NUGET_PACKAGE_REQUIRE_LICENSE_ACCEPTANCE)
+        set(
+            _CPACK_NUGET_REQUIRELICENSEACCEPTANCE_TAG
+            "<requireLicenseAcceptance>true</requireLicenseAcceptance>"
+          )
+    endif()
+    _cpack_nuget_variable_fallback_and_wrap_into_element(releaseNotes RELEASE_NOTES)
+    _cpack_nuget_variable_fallback_and_wrap_into_element(copyright COPYRIGHT)
+    # "language" is a locale identifier such as "en_CA"
+    _cpack_nuget_variable_fallback_and_wrap_into_element(language LANGUAGE)
+    _cpack_nuget_variable_fallback_and_wrap_into_element(tags TAGS LIST_GLUE " ")
+    # "repository" holds repository metadata consisting of four optional
+    # attributes: "type", "url", "branch", and "commit". While all fields are
+    # considered optional, they are not independent. Currently unsupported.
+
+    # Handle dependencies
+    _cpack_nuget_variable_fallback(_deps DEPENDENCIES)
+    set(_collected_deps)
+    foreach(_dep IN LISTS _deps)
+        _cpack_nuget_debug("  checking dependency `${_dep}`")
+
+        _cpack_nuget_variable_fallback(_ver DEPENDENCIES_${_dep}_VERSION)
+
+        if(NOT _ver)
+            string(TOUPPER "${_dep}" _dep_upper)
+            _cpack_nuget_variable_fallback(_ver DEPENDENCIES_${_dep_upper}_VERSION)
+        endif()
+
+        if(_ver)
+            _cpack_nuget_debug("  got `${_dep}` dependency version ${_ver}")
+            string(CONCAT _collected_deps "${_collected_deps}" "            <dependency id=\"${_dep}\" version=\"${_ver}\" />\n")
+        endif()
+    endforeach()
+
+    # Render deps into the variable
+    if(_collected_deps)
+        string(CONCAT _CPACK_NUGET_DEPENDENCIES_TAG "<dependencies>\n" "${_collected_deps}" "        </dependencies>")
+    endif()
+
+    # Render the spec file
+    # NOTE The spec filename doesn't matter. Being included into a package,
+    # NuGet will name it properly.
+    _cpack_nuget_debug("Rendering `${CPACK_TEMPORARY_DIRECTORY}/CPack.NuGet.nuspec` file...")
+    configure_file(
+        "${CMAKE_ROOT}/Modules/Internal/CPack/CPack.NuGet.nuspec.in"
+        "${CPACK_TEMPORARY_DIRECTORY}/CPack.NuGet.nuspec"
+        @ONLY
+      )
+endfunction()
+
+function(_cpack_nuget_make_files_tag)
+    set(_files)
+    foreach(_comp IN LISTS ARGN)
+        string(APPEND _files "        <file src=\"${_comp}/**\" target=\".\" />\n")
+    endforeach()
+    set(_CPACK_NUGET_FILES_TAG "<files>\n${_files}    </files>" PARENT_SCOPE)
+endfunction()
+
+find_program(NUGET_EXECUTABLE nuget)
+_cpack_nuget_debug_var(NUGET_EXECUTABLE)
+if(NOT NUGET_EXECUTABLE)
+    message(FATAL_ERROR "NuGet executable not found")
+endif()
+
+# Add details for debug run
+if(CPACK_NUGET_PACKAGE_DEBUG)
+    list(APPEND CPACK_NUGET_PACK_ADDITIONAL_OPTIONS "-Verbosity" "detailed")
+endif()
+
+# Case one: ordinal all-in-one package
+if(CPACK_NUGET_ORDINAL_MONOLITIC)
+    # This variable `CPACK_NUGET_ALL_IN_ONE` set by C++ code:
+    # Meaning to pack all installed files into a single package
+    _cpack_nuget_debug("---[Making an ordinal monolitic package]---")
+    _cpack_nuget_render_spec()
+    execute_process(
+        COMMAND "${NUGET_EXECUTABLE}" pack ${CPACK_NUGET_PACK_ADDITIONAL_OPTIONS}
+        WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
+        RESULT_VARIABLE _nuget_result
+      )
+    if(NOT _nuget_result EQUAL 0)
+        message(FATAL_ERROR "Nuget pack failed")
+    endif()
+
+elseif(CPACK_NUGET_ALL_IN_ONE)
+    # This variable `CPACK_NUGET_ALL_IN_ONE` set by C++ code:
+    # Meaning to pack all installed components into a single package
+    _cpack_nuget_debug("---[Making a monolitic package from installed components]---")
+
+    # Prepare the `files` element which include files from several components
+    _cpack_nuget_make_files_tag(${CPACK_NUGET_COMPONENTS})
+    _cpack_nuget_render_spec()
+    execute_process(
+        COMMAND "${NUGET_EXECUTABLE}" pack ${CPACK_NUGET_PACK_ADDITIONAL_OPTIONS}
+        WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
+        RESULT_VARIABLE _nuget_result
+      )
+    if(NOT _nuget_result EQUAL 0)
+        message(FATAL_ERROR "Nuget pack failed")
+    endif()
+
+else()
+    # Is there any grouped component?
+    if(CPACK_NUGET_GROUPS)
+        _cpack_nuget_debug("---[Making grouped component(s) package(s)]---")
+        foreach(_group IN LISTS CPACK_NUGET_GROUPS)
+            _cpack_nuget_debug("Starting to make the package for group `${_group}`")
+            string(MAKE_C_IDENTIFIER "${_group}" _group_up)
+            string(TOUPPER "${_group_up}" _group_up)
+
+            # Render a spec file which includes all components in the current group
+            unset(_CPACK_NUGET_FILES_TAG)
+            _cpack_nuget_make_files_tag(${CPACK_NUGET_${_group_up}_GROUP_COMPONENTS})
+            # Temporary set `CPACK_NUGET_PACKAGE_COMPONENT` to the group name
+            # to properly collect various per group settings
+            set(CPACK_NUGET_PACKAGE_COMPONENT ${_group})
+            _cpack_nuget_render_spec()
+            unset(CPACK_NUGET_PACKAGE_COMPONENT)
+            execute_process(
+                COMMAND "${NUGET_EXECUTABLE}" pack ${CPACK_NUGET_PACK_ADDITIONAL_OPTIONS}
+                WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
+                RESULT_VARIABLE _nuget_result
+              )
+            if(NOT _nuget_result EQUAL 0)
+                message(FATAL_ERROR "Nuget pack failed")
+            endif()
+        endforeach()
+    endif()
+    # Is there any single component package needed?
+    if(CPACK_NUGET_COMPONENTS)
+        _cpack_nuget_debug("---[Making single-component(s) package(s)]---")
+        foreach(_comp IN LISTS CPACK_NUGET_COMPONENTS)
+            _cpack_nuget_debug("Starting to make the package for component `${_comp}`")
+            # Render a spec file which includes only given component
+            unset(_CPACK_NUGET_FILES_TAG)
+            _cpack_nuget_make_files_tag(${_comp})
+            # Temporary set `CPACK_NUGET_PACKAGE_COMPONENT` to the current
+            # component name to properly collect various per group settings
+            set(CPACK_NUGET_PACKAGE_COMPONENT ${_comp})
+            _cpack_nuget_render_spec()
+            unset(CPACK_NUGET_PACKAGE_COMPONENT)
+            execute_process(
+                COMMAND "${NUGET_EXECUTABLE}" pack ${CPACK_NUGET_PACK_ADDITIONAL_OPTIONS}
+                WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
+                RESULT_VARIABLE _nuget_result
+              )
+            if(NOT _nuget_result EQUAL 0)
+                message(FATAL_ERROR "Nuget pack failed")
+            endif()
+        endforeach()
+    endif()
+endif()
+
+file(GLOB_RECURSE GEN_CPACK_OUTPUT_FILES "${CPACK_TEMPORARY_DIRECTORY}/*.nupkg")
+if(NOT GEN_CPACK_OUTPUT_FILES)
+    message(FATAL_ERROR "NuGet package was not generated at `${CPACK_TEMPORARY_DIRECTORY}`!")
+endif()
+
+_cpack_nuget_debug("Generated files: ${GEN_CPACK_OUTPUT_FILES}")
diff --git a/share/cmake-3.22/Modules/Internal/CPack/CPackRPM.cmake b/share/cmake-3.22/Modules/Internal/CPack/CPackRPM.cmake
new file mode 100644
index 0000000..c72bf6d
--- /dev/null
+++ b/share/cmake-3.22/Modules/Internal/CPack/CPackRPM.cmake
@@ -0,0 +1,1970 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+# Author: Eric Noulard with the help of Alexander Neundorf.
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0057 NEW) # if IN_LIST
+
+function(set_spec_script_if_enabled TYPE PACKAGE_NAME VAR)
+  if(NOT "${VAR}" STREQUAL "" AND NOT "${VAR}" STREQUAL "\n")
+    if(PACKAGE_NAME)
+      set(PACKAGE_NAME " -n ${PACKAGE_NAME}")
+    endif()
+    set(${TYPE}_ "%${TYPE}${PACKAGE_NAME}\n${VAR}\n" PARENT_SCOPE)
+  else()
+    set(${TYPE} "" PARENT_SCOPE)
+  endif()
+endfunction()
+
+macro(set_spec_scripts PACKAGE_NAME)
+  # we should only set scripts that were provided
+  # as script announcement without content inside
+  # spec file will generate unneeded dependency
+  # on shell
+
+  set_spec_script_if_enabled(
+    "post"
+    "${PACKAGE_NAME}"
+    "${RPM_SYMLINK_POSTINSTALL}\n${CPACK_RPM_SPEC_POSTINSTALL}")
+
+  set_spec_script_if_enabled(
+    "posttrans"
+    "${PACKAGE_NAME}"
+    "${CPACK_RPM_SPEC_POSTTRANS}")
+
+  set_spec_script_if_enabled(
+    "postun"
+    "${PACKAGE_NAME}"
+    "${CPACK_RPM_SPEC_POSTUNINSTALL}")
+
+  set_spec_script_if_enabled(
+    "pre"
+    "${PACKAGE_NAME}"
+    "${CPACK_RPM_SPEC_PREINSTALL}")
+
+  set_spec_script_if_enabled(
+    "pretrans"
+    "${PACKAGE_NAME}"
+    "${CPACK_RPM_SPEC_PRETRANS}")
+
+  set_spec_script_if_enabled(
+    "preun"
+    "${PACKAGE_NAME}"
+    "${CPACK_RPM_SPEC_PREUNINSTALL}")
+endmacro()
+
+function(get_file_permissions FILE RETURN_VAR)
+  execute_process(COMMAND ls -l ${FILE}
+          OUTPUT_VARIABLE permissions_
+          ERROR_QUIET
+          OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+  string(REPLACE " " ";" permissions_ "${permissions_}")
+  list(GET permissions_ 0 permissions_)
+
+  unset(text_notation_)
+  set(any_chars_ ".")
+  foreach(PERMISSION_TYPE "OWNER" "GROUP" "WORLD")
+    if(permissions_ MATCHES "${any_chars_}r.*")
+      list(APPEND text_notation_ "${PERMISSION_TYPE}_READ")
+    endif()
+    string(APPEND any_chars_ ".")
+    if(permissions_ MATCHES "${any_chars_}w.*")
+      list(APPEND text_notation_ "${PERMISSION_TYPE}_WRITE")
+    endif()
+    string(APPEND any_chars_ ".")
+    if(permissions_ MATCHES "${any_chars_}x.*")
+      list(APPEND text_notation_ "${PERMISSION_TYPE}_EXECUTE")
+    endif()
+  endforeach()
+
+  set(${RETURN_VAR} "${text_notation_}" PARENT_SCOPE)
+endfunction()
+
+function(get_unix_permissions_octal_notation PERMISSIONS_VAR RETURN_VAR)
+  set(PERMISSIONS ${${PERMISSIONS_VAR}})
+  list(LENGTH PERMISSIONS PERM_LEN_PRE)
+  list(REMOVE_DUPLICATES PERMISSIONS)
+  list(LENGTH PERMISSIONS PERM_LEN_POST)
+
+  if(NOT ${PERM_LEN_PRE} EQUAL ${PERM_LEN_POST})
+    message(FATAL_ERROR "${PERMISSIONS_VAR} contains duplicate values.")
+  endif()
+
+  foreach(PERMISSION_TYPE "OWNER" "GROUP" "WORLD")
+    set(${PERMISSION_TYPE}_PERMISSIONS 0)
+
+    foreach(PERMISSION ${PERMISSIONS})
+      if("${PERMISSION}" STREQUAL "${PERMISSION_TYPE}_READ")
+        math(EXPR ${PERMISSION_TYPE}_PERMISSIONS "${${PERMISSION_TYPE}_PERMISSIONS} + 4")
+      elseif("${PERMISSION}" STREQUAL "${PERMISSION_TYPE}_WRITE")
+        math(EXPR ${PERMISSION_TYPE}_PERMISSIONS "${${PERMISSION_TYPE}_PERMISSIONS} + 2")
+      elseif("${PERMISSION}" STREQUAL "${PERMISSION_TYPE}_EXECUTE")
+        math(EXPR ${PERMISSION_TYPE}_PERMISSIONS "${${PERMISSION_TYPE}_PERMISSIONS} + 1")
+      elseif(PERMISSION MATCHES "${PERMISSION_TYPE}.*")
+        message(FATAL_ERROR "${PERMISSIONS_VAR} contains invalid values.")
+      endif()
+    endforeach()
+  endforeach()
+
+  set(${RETURN_VAR} "${OWNER_PERMISSIONS}${GROUP_PERMISSIONS}${WORLD_PERMISSIONS}" PARENT_SCOPE)
+endfunction()
+
+function(cpack_rpm_exact_regex regex_var string)
+  string(REGEX REPLACE "([][+.*()^])" "\\\\\\1" regex "${string}")
+  set("${regex_var}" "${regex}" PARENT_SCOPE)
+endfunction()
+
+function(cpack_rpm_prepare_relocation_paths)
+  # set appropriate prefix, remove possible trailing slash and convert backslashes to slashes
+  if(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_PREFIX)
+    file(TO_CMAKE_PATH "${CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_PREFIX}" PATH_PREFIX)
+  elseif(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_PACKAGE_PREFIX)
+    file(TO_CMAKE_PATH "${CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_PACKAGE_PREFIX}" PATH_PREFIX)
+  else()
+    file(TO_CMAKE_PATH "${CPACK_PACKAGING_INSTALL_PREFIX}" PATH_PREFIX)
+  endif()
+
+  set(RPM_RELOCATION_PATHS "${CPACK_RPM_RELOCATION_PATHS}")
+  list(REMOVE_DUPLICATES RPM_RELOCATION_PATHS)
+
+  # set base path prefix
+  if(EXISTS "${WDIR}/${PATH_PREFIX}")
+    if(NOT CPACK_RPM_NO_INSTALL_PREFIX_RELOCATION AND
+       NOT CPACK_RPM_NO_${CPACK_RPM_PACKAGE_COMPONENT}_INSTALL_PREFIX_RELOCATION AND
+       NOT CPACK_RPM_NO_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_INSTALL_PREFIX_RELOCATION)
+      string(APPEND TMP_RPM_PREFIXES "Prefix: ${PATH_PREFIX}\n")
+      list(APPEND RPM_USED_PACKAGE_PREFIXES "${PATH_PREFIX}")
+
+      if(CPACK_RPM_PACKAGE_DEBUG)
+        message("CPackRPM:Debug: removing '${PATH_PREFIX}' from relocation paths")
+      endif()
+    endif()
+  endif()
+
+  # set other path prefixes
+  foreach(RELOCATION_PATH ${RPM_RELOCATION_PATHS})
+    if(IS_ABSOLUTE "${RELOCATION_PATH}")
+      set(PREPARED_RELOCATION_PATH "${RELOCATION_PATH}")
+    elseif(PATH_PREFIX STREQUAL "/")
+      # don't prefix path with a second slash as "//" is treated as network path
+      # by get_filename_component() so it remains in path even inside rpm
+      # package where it may cause problems with relocation
+      set(PREPARED_RELOCATION_PATH "/${RELOCATION_PATH}")
+    else()
+      set(PREPARED_RELOCATION_PATH "${PATH_PREFIX}/${RELOCATION_PATH}")
+    endif()
+
+    # handle cases where path contains extra slashes (e.g. /a//b/ instead of
+    # /a/b)
+    get_filename_component(PREPARED_RELOCATION_PATH
+      "${PREPARED_RELOCATION_PATH}" ABSOLUTE)
+
+    if(EXISTS "${WDIR}/${PREPARED_RELOCATION_PATH}")
+      string(APPEND TMP_RPM_PREFIXES "Prefix: ${PREPARED_RELOCATION_PATH}\n")
+      list(APPEND RPM_USED_PACKAGE_PREFIXES "${PREPARED_RELOCATION_PATH}")
+    endif()
+  endforeach()
+
+  # warn about all the paths that are not relocatable
+  file(GLOB_RECURSE FILE_PATHS_ "${WDIR}/*")
+  foreach(TMP_PATH ${FILE_PATHS_})
+    string(LENGTH "${WDIR}" WDIR_LEN)
+    string(SUBSTRING "${TMP_PATH}" ${WDIR_LEN} -1 TMP_PATH)
+    unset(TMP_PATH_FOUND_)
+
+    foreach(RELOCATION_PATH ${RPM_USED_PACKAGE_PREFIXES})
+      file(RELATIVE_PATH REL_PATH_ "${RELOCATION_PATH}" "${TMP_PATH}")
+      string(SUBSTRING "${REL_PATH_}" 0 2 PREFIX_)
+
+      if(NOT "${PREFIX_}" STREQUAL "..")
+        set(TPM_PATH_FOUND_ TRUE)
+        break()
+      endif()
+    endforeach()
+
+    if(NOT TPM_PATH_FOUND_)
+      message(AUTHOR_WARNING "CPackRPM:Warning: Path ${TMP_PATH} is not on one of the relocatable paths! Package will be partially relocatable.")
+    endif()
+  endforeach()
+
+  set(RPM_USED_PACKAGE_PREFIXES "${RPM_USED_PACKAGE_PREFIXES}" PARENT_SCOPE)
+  set(TMP_RPM_PREFIXES "${TMP_RPM_PREFIXES}" PARENT_SCOPE)
+endfunction()
+
+function(cpack_rpm_prepare_content_list)
+  # get files list
+  file(GLOB_RECURSE CPACK_RPM_INSTALL_FILES LIST_DIRECTORIES true RELATIVE "${WDIR}" "${WDIR}/*")
+  set(CPACK_RPM_INSTALL_FILES "/${CPACK_RPM_INSTALL_FILES}")
+  string(REPLACE ";" ";/" CPACK_RPM_INSTALL_FILES "${CPACK_RPM_INSTALL_FILES}")
+
+  # if we are creating a relocatable package, omit parent directories of
+  # CPACK_RPM_PACKAGE_PREFIX. This is achieved by building a "filter list"
+  # which is passed to the find command that generates the content-list
+  if(CPACK_RPM_PACKAGE_RELOCATABLE)
+    # get a list of the elements in CPACK_RPM_PACKAGE_PREFIXES that are
+    # destinct parent paths of other relocation paths and remove the
+    # final element (so the install-prefix dir itself is not omitted
+    # from the RPM's content-list)
+    list(SORT RPM_USED_PACKAGE_PREFIXES)
+    set(_DISTINCT_PATH "NOT_SET")
+    foreach(_RPM_RELOCATION_PREFIX ${RPM_USED_PACKAGE_PREFIXES})
+      if(NOT "${_RPM_RELOCATION_PREFIX}" MATCHES "${_DISTINCT_PATH}/.*")
+        set(_DISTINCT_PATH "${_RPM_RELOCATION_PREFIX}")
+
+        string(REPLACE "/" ";" _CPACK_RPM_PACKAGE_PREFIX_ELEMS " ${_RPM_RELOCATION_PREFIX}")
+        list(REMOVE_AT _CPACK_RPM_PACKAGE_PREFIX_ELEMS -1)
+        unset(_TMP_LIST)
+        # Now generate all of the parent dirs of the relocation path
+        foreach(_PREFIX_PATH_ELEM ${_CPACK_RPM_PACKAGE_PREFIX_ELEMS})
+          list(APPEND _TMP_LIST "${_PREFIX_PATH_ELEM}")
+          string(REPLACE ";" "/" _OMIT_DIR "${_TMP_LIST}")
+          separate_arguments(_OMIT_DIR)
+          list(APPEND _RPM_DIRS_TO_OMIT ${_OMIT_DIR})
+        endforeach()
+      endif()
+    endforeach()
+  endif()
+
+  if(CPACK_RPM_PACKAGE_DEBUG)
+    message("CPackRPM:Debug: Initial list of path to OMIT in RPM: ${_RPM_DIRS_TO_OMIT}")
+  endif()
+
+  if(NOT DEFINED CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST)
+    set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST /etc /etc/init.d /usr /usr/bin
+        /usr/include /usr/lib /usr/libx32 /usr/lib64
+        /usr/share /usr/share/aclocal /usr/share/doc )
+    if(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION)
+      if(CPACK_RPM_PACKAGE_DEBUG)
+        message("CPackRPM:Debug: Adding ${CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION} to builtin omit list.")
+      endif()
+      list(APPEND CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST "${CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION}")
+    endif()
+  endif()
+
+  if(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST)
+    if(CPACK_RPM_PACKAGE_DEBUG)
+      message("CPackRPM:Debug: CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST= ${CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST}")
+    endif()
+    list(APPEND _RPM_DIRS_TO_OMIT ${CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST})
+  endif()
+
+  if(CPACK_RPM_PACKAGE_DEBUG)
+    message("CPackRPM:Debug: Final list of path to OMIT in RPM: ${_RPM_DIRS_TO_OMIT}")
+  endif()
+
+  list(REMOVE_ITEM CPACK_RPM_INSTALL_FILES ${_RPM_DIRS_TO_OMIT})
+
+  # add man paths that will be compressed
+  # (copied from /usr/lib/rpm/brp-compress - script that does the actual
+  # compressing)
+  list(APPEND MAN_LOCATIONS "/usr/man/man.*" "/usr/man/.*/man.*" "/usr/info.*"
+    "/usr/share/man/man.*" "/usr/share/man/.*/man.*" "/usr/share/info.*"
+    "/usr/kerberos/man.*" "/usr/X11R6/man/man.*" "/usr/lib/perl5/man/man.*"
+    "/usr/share/doc/.*/man/man.*" "/usr/lib/.*/man/man.*")
+
+  if(CPACK_RPM_ADDITIONAL_MAN_DIRS)
+    if(CPACK_RPM_PACKAGE_DEBUG)
+      message("CPackRPM:Debug: CPACK_RPM_ADDITIONAL_MAN_DIRS= ${CPACK_RPM_ADDITIONAL_MAN_DIRS}")
+    endif()
+    list(APPEND MAN_LOCATIONS ${CPACK_RPM_ADDITIONAL_MAN_DIRS})
+  endif()
+
+  foreach(PACK_LOCATION IN LISTS CPACK_RPM_INSTALL_FILES)
+    foreach(MAN_LOCATION IN LISTS MAN_LOCATIONS)
+      # man pages are files inside a certain location
+      if(PACK_LOCATION MATCHES "${MAN_LOCATION}/"
+        AND NOT IS_DIRECTORY "${WDIR}${PACK_LOCATION}"
+        AND NOT IS_SYMLINK "${WDIR}${PACK_LOCATION}")
+        list(FIND CPACK_RPM_INSTALL_FILES "${PACK_LOCATION}" INDEX)
+        # insert file location that covers compressed man pages
+        # even if using a wildcard causes duplicates as those are
+        # handled by RPM and we still keep the same file list
+        # in spec file - wildcard only represents file type (e.g. .gz)
+        list(INSERT CPACK_RPM_INSTALL_FILES ${INDEX} "${PACK_LOCATION}*")
+        # remove file location that doesn't cover compressed man pages
+        math(EXPR INDEX ${INDEX}+1)
+        list(REMOVE_AT CPACK_RPM_INSTALL_FILES ${INDEX})
+
+        break()
+      endif()
+    endforeach()
+  endforeach()
+
+  set(CPACK_RPM_INSTALL_FILES "${CPACK_RPM_INSTALL_FILES}" PARENT_SCOPE)
+endfunction()
+
+function(cpack_rpm_symlink_get_relocation_prefixes LOCATION PACKAGE_PREFIXES RETURN_VARIABLE)
+  foreach(PKG_PREFIX IN LISTS PACKAGE_PREFIXES)
+    string(REGEX MATCH "^${PKG_PREFIX}/.*" FOUND_ "${LOCATION}")
+    if(FOUND_)
+      list(APPEND TMP_PREFIXES "${PKG_PREFIX}")
+    endif()
+  endforeach()
+
+  set(${RETURN_VARIABLE} "${TMP_PREFIXES}" PARENT_SCOPE)
+endfunction()
+
+function(cpack_rpm_symlink_create_relocation_script PACKAGE_PREFIXES)
+  list(LENGTH PACKAGE_PREFIXES LAST_INDEX)
+  set(SORTED_PACKAGE_PREFIXES "${PACKAGE_PREFIXES}")
+  list(SORT SORTED_PACKAGE_PREFIXES)
+  list(REVERSE SORTED_PACKAGE_PREFIXES)
+  math(EXPR LAST_INDEX ${LAST_INDEX}-1)
+
+  foreach(SYMLINK_INDEX RANGE ${LAST_INDEX})
+    list(GET SORTED_PACKAGE_PREFIXES ${SYMLINK_INDEX} SRC_PATH)
+    list(FIND PACKAGE_PREFIXES "${SRC_PATH}" SYMLINK_INDEX) # reverse magic
+    string(LENGTH "${SRC_PATH}" SRC_PATH_LEN)
+
+    set(PARTS_CNT 0)
+    set(SCRIPT_PART "if [ \"$RPM_INSTALL_PREFIX${SYMLINK_INDEX}\" != \"${SRC_PATH}\" ]; then\n")
+
+    # both paths relocated
+    foreach(POINT_INDEX RANGE ${LAST_INDEX})
+      list(GET SORTED_PACKAGE_PREFIXES ${POINT_INDEX} POINT_PATH)
+      list(FIND PACKAGE_PREFIXES "${POINT_PATH}" POINT_INDEX) # reverse magic
+      string(LENGTH "${POINT_PATH}" POINT_PATH_LEN)
+
+      if(_RPM_RELOCATION_SCRIPT_${SYMLINK_INDEX}_${POINT_INDEX})
+        if("${SYMLINK_INDEX}" EQUAL "${POINT_INDEX}")
+          set(INDENT "")
+        else()
+          string(APPEND SCRIPT_PART "  if [ \"$RPM_INSTALL_PREFIX${POINT_INDEX}\" != \"${POINT_PATH}\" ]; then\n")
+          set(INDENT "  ")
+        endif()
+
+        foreach(RELOCATION_NO IN LISTS _RPM_RELOCATION_SCRIPT_${SYMLINK_INDEX}_${POINT_INDEX})
+          math(EXPR PARTS_CNT ${PARTS_CNT}+1)
+
+          math(EXPR RELOCATION_INDEX ${RELOCATION_NO}-1)
+          list(GET _RPM_RELOCATION_SCRIPT_PAIRS ${RELOCATION_INDEX} RELOCATION_SCRIPT_PAIR)
+          string(FIND "${RELOCATION_SCRIPT_PAIR}" ":" SPLIT_INDEX)
+
+          math(EXPR SRC_PATH_END ${SPLIT_INDEX}-${SRC_PATH_LEN})
+          string(SUBSTRING ${RELOCATION_SCRIPT_PAIR} ${SRC_PATH_LEN} ${SRC_PATH_END} SYMLINK_)
+
+          math(EXPR POINT_PATH_START ${SPLIT_INDEX}+1+${POINT_PATH_LEN})
+          string(SUBSTRING ${RELOCATION_SCRIPT_PAIR} ${POINT_PATH_START} -1 POINT_)
+
+          string(APPEND SCRIPT_PART "  ${INDENT}if [ -z \"$CPACK_RPM_RELOCATED_SYMLINK_${RELOCATION_INDEX}\" ]; then\n")
+          string(APPEND SCRIPT_PART "    ${INDENT}ln -s \"$RPM_INSTALL_PREFIX${POINT_INDEX}${POINT_}\" \"$RPM_INSTALL_PREFIX${SYMLINK_INDEX}${SYMLINK_}\"\n")
+          string(APPEND SCRIPT_PART "    ${INDENT}CPACK_RPM_RELOCATED_SYMLINK_${RELOCATION_INDEX}=true\n")
+          string(APPEND SCRIPT_PART "  ${INDENT}fi\n")
+        endforeach()
+
+        if(NOT "${SYMLINK_INDEX}" EQUAL "${POINT_INDEX}")
+          string(APPEND SCRIPT_PART "  fi\n")
+        endif()
+      endif()
+    endforeach()
+
+    # source path relocated
+    if(_RPM_RELOCATION_SCRIPT_${SYMLINK_INDEX}_X)
+      foreach(RELOCATION_NO IN LISTS _RPM_RELOCATION_SCRIPT_${SYMLINK_INDEX}_X)
+        math(EXPR PARTS_CNT ${PARTS_CNT}+1)
+
+        math(EXPR RELOCATION_INDEX ${RELOCATION_NO}-1)
+        list(GET _RPM_RELOCATION_SCRIPT_PAIRS ${RELOCATION_INDEX} RELOCATION_SCRIPT_PAIR)
+        string(FIND "${RELOCATION_SCRIPT_PAIR}" ":" SPLIT_INDEX)
+
+        math(EXPR SRC_PATH_END ${SPLIT_INDEX}-${SRC_PATH_LEN})
+        string(SUBSTRING ${RELOCATION_SCRIPT_PAIR} ${SRC_PATH_LEN} ${SRC_PATH_END} SYMLINK_)
+
+        math(EXPR POINT_PATH_START ${SPLIT_INDEX}+1)
+        string(SUBSTRING ${RELOCATION_SCRIPT_PAIR} ${POINT_PATH_START} -1 POINT_)
+
+        string(APPEND SCRIPT_PART "  if [ -z \"$CPACK_RPM_RELOCATED_SYMLINK_${RELOCATION_INDEX}\" ]; then\n")
+        string(APPEND SCRIPT_PART "    ln -s \"${POINT_}\" \"$RPM_INSTALL_PREFIX${SYMLINK_INDEX}${SYMLINK_}\"\n")
+        string(APPEND SCRIPT_PART "    CPACK_RPM_RELOCATED_SYMLINK_${RELOCATION_INDEX}=true\n")
+        string(APPEND SCRIPT_PART "  fi\n")
+      endforeach()
+    endif()
+
+    if(PARTS_CNT)
+      set(SCRIPT "${SCRIPT_PART}")
+      string(APPEND SCRIPT "fi\n")
+    endif()
+  endforeach()
+
+  # point path relocated
+  foreach(POINT_INDEX RANGE ${LAST_INDEX})
+    list(GET SORTED_PACKAGE_PREFIXES ${POINT_INDEX} POINT_PATH)
+    list(FIND PACKAGE_PREFIXES "${POINT_PATH}" POINT_INDEX) # reverse magic
+    string(LENGTH "${POINT_PATH}" POINT_PATH_LEN)
+
+    if(_RPM_RELOCATION_SCRIPT_X_${POINT_INDEX})
+      string(APPEND SCRIPT "if [ \"$RPM_INSTALL_PREFIX${POINT_INDEX}\" != \"${POINT_PATH}\" ]; then\n")
+
+      foreach(RELOCATION_NO IN LISTS _RPM_RELOCATION_SCRIPT_X_${POINT_INDEX})
+        math(EXPR RELOCATION_INDEX ${RELOCATION_NO}-1)
+        list(GET _RPM_RELOCATION_SCRIPT_PAIRS ${RELOCATION_INDEX} RELOCATION_SCRIPT_PAIR)
+        string(FIND "${RELOCATION_SCRIPT_PAIR}" ":" SPLIT_INDEX)
+
+        string(SUBSTRING ${RELOCATION_SCRIPT_PAIR} 0 ${SPLIT_INDEX} SYMLINK_)
+
+        math(EXPR POINT_PATH_START ${SPLIT_INDEX}+1+${POINT_PATH_LEN})
+        string(SUBSTRING ${RELOCATION_SCRIPT_PAIR} ${POINT_PATH_START} -1 POINT_)
+
+        string(APPEND SCRIPT "  if [ -z \"$CPACK_RPM_RELOCATED_SYMLINK_${RELOCATION_INDEX}\" ]; then\n")
+        string(APPEND SCRIPT "    ln -s \"$RPM_INSTALL_PREFIX${POINT_INDEX}${POINT_}\" \"${SYMLINK_}\"\n")
+        string(APPEND SCRIPT "    CPACK_RPM_RELOCATED_SYMLINK_${RELOCATION_INDEX}=true\n")
+        string(APPEND SCRIPT "  fi\n")
+      endforeach()
+
+      string(APPEND SCRIPT "fi\n")
+    endif()
+  endforeach()
+
+  # no path relocated
+  if(_RPM_RELOCATION_SCRIPT_X_X)
+    foreach(RELOCATION_NO IN LISTS _RPM_RELOCATION_SCRIPT_X_X)
+      math(EXPR RELOCATION_INDEX ${RELOCATION_NO}-1)
+      list(GET _RPM_RELOCATION_SCRIPT_PAIRS ${RELOCATION_INDEX} RELOCATION_SCRIPT_PAIR)
+      string(FIND "${RELOCATION_SCRIPT_PAIR}" ":" SPLIT_INDEX)
+
+      string(SUBSTRING ${RELOCATION_SCRIPT_PAIR} 0 ${SPLIT_INDEX} SYMLINK_)
+
+      math(EXPR POINT_PATH_START ${SPLIT_INDEX}+1)
+      string(SUBSTRING ${RELOCATION_SCRIPT_PAIR} ${POINT_PATH_START} -1 POINT_)
+
+      string(APPEND SCRIPT "if [ -z \"$CPACK_RPM_RELOCATED_SYMLINK_${RELOCATION_INDEX}\" ]; then\n")
+      string(APPEND SCRIPT "  ln -s \"${POINT_}\" \"${SYMLINK_}\"\n")
+      string(APPEND SCRIPT "fi\n")
+    endforeach()
+  endif()
+
+  set(RPM_SYMLINK_POSTINSTALL "${SCRIPT}" PARENT_SCOPE)
+endfunction()
+
+function(cpack_rpm_symlink_add_for_relocation_script PACKAGE_PREFIXES SYMLINK SYMLINK_RELOCATION_PATHS POINT POINT_RELOCATION_PATHS)
+  list(LENGTH SYMLINK_RELOCATION_PATHS SYMLINK_PATHS_COUTN)
+  list(LENGTH POINT_RELOCATION_PATHS POINT_PATHS_COUNT)
+
+  list(APPEND _RPM_RELOCATION_SCRIPT_PAIRS "${SYMLINK}:${POINT}")
+  list(LENGTH _RPM_RELOCATION_SCRIPT_PAIRS PAIR_NO)
+
+  if(SYMLINK_PATHS_COUTN)
+    foreach(SYMLINK_RELOC_PATH IN LISTS SYMLINK_RELOCATION_PATHS)
+      list(FIND PACKAGE_PREFIXES "${SYMLINK_RELOC_PATH}" SYMLINK_INDEX)
+
+      # source path relocated
+      list(APPEND _RPM_RELOCATION_SCRIPT_${SYMLINK_INDEX}_X "${PAIR_NO}")
+      list(APPEND RELOCATION_VARS "_RPM_RELOCATION_SCRIPT_${SYMLINK_INDEX}_X")
+
+      foreach(POINT_RELOC_PATH IN LISTS POINT_RELOCATION_PATHS)
+        list(FIND PACKAGE_PREFIXES "${POINT_RELOC_PATH}" POINT_INDEX)
+
+        # both paths relocated
+        list(APPEND _RPM_RELOCATION_SCRIPT_${SYMLINK_INDEX}_${POINT_INDEX} "${PAIR_NO}")
+        list(APPEND RELOCATION_VARS "_RPM_RELOCATION_SCRIPT_${SYMLINK_INDEX}_${POINT_INDEX}")
+
+        # point path relocated
+        list(APPEND _RPM_RELOCATION_SCRIPT_X_${POINT_INDEX} "${PAIR_NO}")
+        list(APPEND RELOCATION_VARS "_RPM_RELOCATION_SCRIPT_X_${POINT_INDEX}")
+      endforeach()
+    endforeach()
+  elseif(POINT_PATHS_COUNT)
+    foreach(POINT_RELOC_PATH IN LISTS POINT_RELOCATION_PATHS)
+      list(FIND PACKAGE_PREFIXES "${POINT_RELOC_PATH}" POINT_INDEX)
+
+      # point path relocated
+      list(APPEND _RPM_RELOCATION_SCRIPT_X_${POINT_INDEX} "${PAIR_NO}")
+      list(APPEND RELOCATION_VARS "_RPM_RELOCATION_SCRIPT_X_${POINT_INDEX}")
+    endforeach()
+  endif()
+
+  # no path relocated
+  list(APPEND _RPM_RELOCATION_SCRIPT_X_X "${PAIR_NO}")
+  list(APPEND RELOCATION_VARS "_RPM_RELOCATION_SCRIPT_X_X")
+
+  # place variables into parent scope
+  foreach(VAR IN LISTS RELOCATION_VARS)
+    set(${VAR} "${${VAR}}" PARENT_SCOPE)
+  endforeach()
+  set(_RPM_RELOCATION_SCRIPT_PAIRS "${_RPM_RELOCATION_SCRIPT_PAIRS}" PARENT_SCOPE)
+  set(REQUIRES_SYMLINK_RELOCATION_SCRIPT "true" PARENT_SCOPE)
+  set(DIRECTIVE "%ghost " PARENT_SCOPE)
+endfunction()
+
+function(cpack_rpm_prepare_install_files INSTALL_FILES_LIST WDIR PACKAGE_PREFIXES IS_RELOCATABLE)
+  # Prepend directories in ${CPACK_RPM_INSTALL_FILES} with %dir
+  # This is necessary to avoid duplicate files since rpmbuild does
+  # recursion on its own when encountering a pathname which is a directory
+  # which is not flagged as %dir
+  string(STRIP "${INSTALL_FILES_LIST}" INSTALL_FILES_LIST)
+  string(REPLACE "\n" ";" INSTALL_FILES_LIST
+                          "${INSTALL_FILES_LIST}")
+  string(REPLACE "\"" "" INSTALL_FILES_LIST
+                          "${INSTALL_FILES_LIST}")
+  string(LENGTH "${WDIR}" WDR_LEN_)
+
+  list(SORT INSTALL_FILES_LIST) # make file order consistent on all platforms
+
+  foreach(F IN LISTS INSTALL_FILES_LIST)
+    unset(DIRECTIVE)
+
+    if(IS_SYMLINK "${WDIR}/${F}")
+      if(IS_RELOCATABLE)
+        # check that symlink has relocatable format
+        get_filename_component(SYMLINK_LOCATION_ "${WDIR}/${F}" DIRECTORY)
+        execute_process(COMMAND ls -la "${WDIR}/${F}"
+                  WORKING_DIRECTORY "${WDIR}"
+                  OUTPUT_VARIABLE SYMLINK_POINT_
+                  OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+        string(FIND "${SYMLINK_POINT_}" "->" SYMLINK_POINT_INDEX_ REVERSE)
+        math(EXPR SYMLINK_POINT_INDEX_ ${SYMLINK_POINT_INDEX_}+3)
+        string(LENGTH "${SYMLINK_POINT_}" SYMLINK_POINT_LENGTH_)
+
+        # get destination path
+        string(SUBSTRING "${SYMLINK_POINT_}" ${SYMLINK_POINT_INDEX_} ${SYMLINK_POINT_LENGTH_} SYMLINK_POINT_)
+
+        # check if path is relative or absolute
+        string(SUBSTRING "${SYMLINK_POINT_}" 0 1 SYMLINK_IS_ABSOLUTE_)
+
+        if(${SYMLINK_IS_ABSOLUTE_} STREQUAL "/")
+          # prevent absolute paths from having /../ or /./ section inside of them
+          get_filename_component(SYMLINK_POINT_ "${SYMLINK_POINT_}" ABSOLUTE)
+        else()
+          # handle relative path
+          get_filename_component(SYMLINK_POINT_ "${SYMLINK_LOCATION_}/${SYMLINK_POINT_}" ABSOLUTE)
+        endif()
+
+        # recalculate path length after conversion to canonical form
+        string(LENGTH "${SYMLINK_POINT_}" SYMLINK_POINT_LENGTH_)
+
+        cpack_rpm_exact_regex(IN_SYMLINK_POINT_REGEX "${WDIR}")
+        string(APPEND IN_SYMLINK_POINT_REGEX "/.*")
+        if(SYMLINK_POINT_ MATCHES "${IN_SYMLINK_POINT_REGEX}")
+          # only symlinks that are pointing inside the packaging structure should be checked for relocation
+          string(SUBSTRING "${SYMLINK_POINT_}" ${WDR_LEN_} -1 SYMLINK_POINT_WD_)
+          cpack_rpm_symlink_get_relocation_prefixes("${F}" "${PACKAGE_PREFIXES}" "SYMLINK_RELOCATIONS")
+          cpack_rpm_symlink_get_relocation_prefixes("${SYMLINK_POINT_WD_}" "${PACKAGE_PREFIXES}" "POINT_RELOCATIONS")
+
+          list(LENGTH SYMLINK_RELOCATIONS SYMLINK_RELOCATIONS_COUNT)
+          list(LENGTH POINT_RELOCATIONS POINT_RELOCATIONS_COUNT)
+        else()
+          # location pointed to is outside WDR so it should be treated as a permanent symlink
+          set(SYMLINK_POINT_WD_ "${SYMLINK_POINT_}")
+
+          unset(SYMLINK_RELOCATIONS)
+          unset(POINT_RELOCATIONS)
+          unset(SYMLINK_RELOCATIONS_COUNT)
+          unset(POINT_RELOCATIONS_COUNT)
+
+          message(AUTHOR_WARNING "CPackRPM:Warning: Symbolic link '${F}' points to location that is outside packaging path! Link will possibly not be relocatable.")
+        endif()
+
+        if(SYMLINK_RELOCATIONS_COUNT AND POINT_RELOCATIONS_COUNT)
+          # find matching
+          foreach(SYMLINK_RELOCATION_PREFIX IN LISTS SYMLINK_RELOCATIONS)
+            list(FIND POINT_RELOCATIONS "${SYMLINK_RELOCATION_PREFIX}" FOUND_INDEX)
+            if(NOT ${FOUND_INDEX} EQUAL -1)
+              break()
+            endif()
+          endforeach()
+
+          if(NOT ${FOUND_INDEX} EQUAL -1)
+            # symlinks have the same subpath
+            if(${SYMLINK_RELOCATIONS_COUNT} EQUAL 1 AND ${POINT_RELOCATIONS_COUNT} EQUAL 1)
+              # permanent symlink
+              get_filename_component(SYMLINK_LOCATION_ "${F}" DIRECTORY)
+              file(RELATIVE_PATH FINAL_PATH_ ${SYMLINK_LOCATION_} ${SYMLINK_POINT_WD_})
+              execute_process(COMMAND "${CMAKE_COMMAND}" -E create_symlink "${FINAL_PATH_}" "${WDIR}/${F}")
+            else()
+              # relocation subpaths
+              cpack_rpm_symlink_add_for_relocation_script("${PACKAGE_PREFIXES}" "${F}" "${SYMLINK_RELOCATIONS}"
+                  "${SYMLINK_POINT_WD_}" "${POINT_RELOCATIONS}")
+            endif()
+          else()
+            # not on the same relocation path
+            cpack_rpm_symlink_add_for_relocation_script("${PACKAGE_PREFIXES}" "${F}" "${SYMLINK_RELOCATIONS}"
+                "${SYMLINK_POINT_WD_}" "${POINT_RELOCATIONS}")
+          endif()
+        elseif(POINT_RELOCATIONS_COUNT)
+          # point is relocatable
+          cpack_rpm_symlink_add_for_relocation_script("${PACKAGE_PREFIXES}" "${F}" "${SYMLINK_RELOCATIONS}"
+              "${SYMLINK_POINT_WD_}" "${POINT_RELOCATIONS}")
+        else()
+          # is not relocatable or points to non relocatable path - permanent symlink
+          execute_process(COMMAND "${CMAKE_COMMAND}" -E create_symlink "${SYMLINK_POINT_WD_}" "${WDIR}/${F}")
+        endif()
+      endif()
+    elseif(IS_DIRECTORY "${WDIR}/${F}")
+      set(DIRECTIVE "%dir ")
+    endif()
+
+    string(APPEND INSTALL_FILES "${DIRECTIVE}\"${F}\"\n")
+  endforeach()
+
+  if(REQUIRES_SYMLINK_RELOCATION_SCRIPT)
+    cpack_rpm_symlink_create_relocation_script("${PACKAGE_PREFIXES}")
+  endif()
+
+  set(RPM_SYMLINK_POSTINSTALL "${RPM_SYMLINK_POSTINSTALL}" PARENT_SCOPE)
+  set(CPACK_RPM_INSTALL_FILES "${INSTALL_FILES}" PARENT_SCOPE)
+endfunction()
+
+if(CMAKE_BINARY_DIR)
+  message(FATAL_ERROR "CPackRPM.cmake may only be used by CPack internally.")
+endif()
+
+if(NOT UNIX)
+  message(FATAL_ERROR "CPackRPM.cmake may only be used under UNIX.")
+endif()
+
+# We need to check if the binaries were compiled with debug symbols
+# because without them the package will be useless
+function(cpack_rpm_debugsymbol_check INSTALL_FILES WORKING_DIR)
+  if(NOT CPACK_BUILD_SOURCE_DIRS)
+    message(FATAL_ERROR "CPackRPM: CPACK_BUILD_SOURCE_DIRS variable is not set!"
+      " Required for debuginfo packaging. See documentation of"
+      " CPACK_RPM_DEBUGINFO_PACKAGE variable for details.")
+  endif()
+
+  # With objdump we should check the debug symbols
+  find_program(OBJDUMP_EXECUTABLE objdump)
+  if(NOT OBJDUMP_EXECUTABLE)
+    message(FATAL_ERROR "CPackRPM: objdump binary could not be found!"
+      " Required for debuginfo packaging. See documentation of"
+      " CPACK_RPM_DEBUGINFO_PACKAGE variable for details.")
+  endif()
+
+  # With debugedit we prepare source files list
+  find_program(DEBUGEDIT_EXECUTABLE debugedit "/usr/lib/rpm/")
+  if(NOT DEBUGEDIT_EXECUTABLE)
+    message(FATAL_ERROR "CPackRPM: debugedit binary could not be found!"
+      " Required for debuginfo packaging. See documentation of"
+      " CPACK_RPM_DEBUGINFO_PACKAGE variable for details.")
+  endif()
+
+  unset(mkdir_list_)
+  unset(cp_list_)
+  unset(additional_sources_)
+
+  foreach(F IN LISTS INSTALL_FILES)
+    if(IS_DIRECTORY "${WORKING_DIR}/${F}" OR IS_SYMLINK "${WORKING_DIR}/${F}")
+      continue()
+    endif()
+
+    execute_process(COMMAND "${OBJDUMP_EXECUTABLE}" -h ${WORKING_DIR}/${F}
+                    WORKING_DIRECTORY "${CPACK_TOPLEVEL_DIRECTORY}"
+                    RESULT_VARIABLE OBJDUMP_EXEC_RESULT
+                    OUTPUT_VARIABLE OBJDUMP_OUT
+                    ERROR_QUIET)
+    # Check if the given file is an executable or not
+    if(NOT OBJDUMP_EXEC_RESULT)
+      string(FIND "${OBJDUMP_OUT}" "debug" FIND_RESULT)
+      if(FIND_RESULT GREATER -1)
+        set(index_ 0)
+        foreach(source_dir_ IN LISTS CPACK_BUILD_SOURCE_DIRS)
+          string(LENGTH "${source_dir_}" source_dir_len_)
+          string(LENGTH "${CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX}/src_${index_}" debuginfo_dir_len)
+          if(source_dir_len_ LESS debuginfo_dir_len)
+            message(FATAL_ERROR "CPackRPM: source dir path '${source_dir_}' is"
+              " shorter than debuginfo sources dir path '${CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX}/src_${index_}'!"
+              " Source dir path must be longer than debuginfo sources dir path."
+              " Set CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX variable to a shorter value"
+              " or make source dir path longer."
+              " Required for debuginfo packaging. See documentation of"
+              " CPACK_RPM_DEBUGINFO_PACKAGE variable for details.")
+          endif()
+
+          file(REMOVE "${CPACK_RPM_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}${CPACK_RPM_PACKAGE_COMPONENT_PART_PATH}/debugsources_add.list")
+          execute_process(COMMAND "${DEBUGEDIT_EXECUTABLE}" -b "${source_dir_}" -d "${CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX}/src_${index_}" -i -l "${CPACK_RPM_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}${CPACK_RPM_PACKAGE_COMPONENT_PART_PATH}/debugsources_add.list" "${WORKING_DIR}/${F}"
+              RESULT_VARIABLE res_
+              OUTPUT_VARIABLE opt_
+              ERROR_VARIABLE err_
+            )
+
+          file(STRINGS
+            "${CPACK_RPM_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}${CPACK_RPM_PACKAGE_COMPONENT_PART_PATH}/debugsources_add.list"
+            sources_)
+          list(REMOVE_DUPLICATES sources_)
+
+          foreach(source_ IN LISTS sources_)
+            if(EXISTS "${source_dir_}/${source_}" AND NOT IS_DIRECTORY "${source_dir_}/${source_}")
+              get_filename_component(path_part_ "${source_}" DIRECTORY)
+              list(APPEND mkdir_list_ "%{buildroot}${CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX}/src_${index_}/${path_part_}")
+              list(APPEND cp_list_ "cp \"${source_dir_}/${source_}\" \"%{buildroot}${CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX}/src_${index_}/${path_part_}\"")
+
+              list(APPEND additional_sources_ "${CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX}/src_${index_}/${source_}")
+            endif()
+          endforeach()
+
+          math(EXPR index_ "${index_} + 1")
+        endforeach()
+      else()
+        message(WARNING "CPackRPM: File: ${F} does not contain debug symbols. They will possibly be missing from debuginfo package!")
+      endif()
+
+      get_file_permissions("${WORKING_DIR}/${F}" permissions_)
+      if(NOT "USER_EXECUTE" IN_LIST permissions_ AND
+         NOT "GROUP_EXECUTE" IN_LIST permissions_ AND
+         NOT "WORLD_EXECUTE" IN_LIST permissions_)
+        if(CPACK_RPM_INSTALL_WITH_EXEC)
+          execute_process(COMMAND chmod a+x ${WORKING_DIR}/${F}
+                  RESULT_VARIABLE res_
+                  ERROR_VARIABLE err_
+                  OUTPUT_QUIET)
+
+          if(res_)
+            message(FATAL_ERROR "CPackRPM: could not apply execute permissions "
+              "requested by CPACK_RPM_INSTALL_WITH_EXEC variable on "
+              "'${WORKING_DIR}/${F}'! Reason: '${err_}'")
+          endif()
+        else()
+          message(AUTHOR_WARNING "CPackRPM: File: ${WORKING_DIR}/${F} does not "
+            "have execute permissions. Debuginfo symbols will not be extracted"
+            "! Missing debuginfo may cause packaging failure. Consider setting "
+            "execute permissions or setting 'CPACK_RPM_INSTALL_WITH_EXEC' "
+            "variable.")
+        endif()
+      endif()
+    endif()
+  endforeach()
+
+  list(LENGTH mkdir_list_ len_)
+  if(len_)
+    list(REMOVE_DUPLICATES mkdir_list_)
+    unset(TMP_RPM_DEBUGINFO_INSTALL)
+    foreach(part_ IN LISTS mkdir_list_)
+      string(APPEND TMP_RPM_DEBUGINFO_INSTALL "mkdir -p \"${part_}\"\n")
+    endforeach()
+  endif()
+
+  list(LENGTH cp_list_ len_)
+  if(len_)
+    list(REMOVE_DUPLICATES cp_list_)
+    foreach(part_ IN LISTS cp_list_)
+      string(APPEND TMP_RPM_DEBUGINFO_INSTALL "${part_}\n")
+    endforeach()
+  endif()
+
+  if(NOT DEFINED CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS)
+    set(CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS /usr /usr/src /usr/src/debug)
+    if(CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS_ADDITION)
+      if(CPACK_RPM_PACKAGE_DEBUG)
+        message("CPackRPM:Debug: Adding ${CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS_ADDITION} to builtin omit list.")
+      endif()
+      list(APPEND CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS "${CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS_ADDITION}")
+    endif()
+  endif()
+  if(CPACK_RPM_PACKAGE_DEBUG)
+    message("CPackRPM:Debug: CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS= ${CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS}")
+  endif()
+
+  list(LENGTH additional_sources_ len_)
+  if(len_)
+    list(REMOVE_DUPLICATES additional_sources_)
+    unset(additional_sources_all_)
+    foreach(source_ IN LISTS additional_sources_)
+      string(REPLACE "/" ";" split_source_ " ${source_}")
+      list(REMOVE_AT split_source_ 0)
+      unset(tmp_path_)
+      # Now generate all segments of the path
+      foreach(segment_ IN LISTS split_source_)
+        string(APPEND tmp_path_ "/${segment_}")
+        list(APPEND additional_sources_all_ "${tmp_path_}")
+      endforeach()
+    endforeach()
+
+    list(REMOVE_DUPLICATES additional_sources_all_)
+    list(REMOVE_ITEM additional_sources_all_
+      ${CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS})
+
+    unset(TMP_DEBUGINFO_ADDITIONAL_SOURCES)
+    foreach(source_ IN LISTS additional_sources_all_)
+      string(APPEND TMP_DEBUGINFO_ADDITIONAL_SOURCES "${source_}\n")
+    endforeach()
+  endif()
+
+  set(TMP_RPM_DEBUGINFO_INSTALL "${TMP_RPM_DEBUGINFO_INSTALL}" PARENT_SCOPE)
+  set(TMP_DEBUGINFO_ADDITIONAL_SOURCES "${TMP_DEBUGINFO_ADDITIONAL_SOURCES}"
+    PARENT_SCOPE)
+endfunction()
+
+function(cpack_rpm_variable_fallback OUTPUT_VAR_NAME)
+  set(FALLBACK_VAR_NAMES ${ARGN})
+
+  foreach(variable_name IN LISTS FALLBACK_VAR_NAMES)
+    if(${variable_name})
+      set(${OUTPUT_VAR_NAME} "${${variable_name}}" PARENT_SCOPE)
+      break()
+    endif()
+  endforeach()
+endfunction()
+
+function(cpack_rpm_generate_package)
+  # rpmbuild is the basic command for building RPM package
+  # it may be a simple (symbolic) link to rpm command.
+  find_program(RPMBUILD_EXECUTABLE rpmbuild)
+
+  # Check version of the rpmbuild tool this would be easier to
+  # track bugs with users and CPackRPM debug mode.
+  # We may use RPM version in order to check for available version dependent features
+  if(RPMBUILD_EXECUTABLE)
+    execute_process(COMMAND ${RPMBUILD_EXECUTABLE} --version
+                    OUTPUT_VARIABLE _TMP_VERSION
+                    ERROR_QUIET
+                    OUTPUT_STRIP_TRAILING_WHITESPACE)
+    string(REGEX REPLACE "^.* " ""
+           RPMBUILD_EXECUTABLE_VERSION
+           ${_TMP_VERSION})
+    if(CPACK_RPM_PACKAGE_DEBUG)
+      message("CPackRPM:Debug: rpmbuild version is <${RPMBUILD_EXECUTABLE_VERSION}>")
+    endif()
+  endif()
+
+  if(NOT RPMBUILD_EXECUTABLE)
+    message(FATAL_ERROR "RPM package requires rpmbuild executable")
+  endif()
+
+  # Display lsb_release output if DEBUG mode enable
+  # This will help to diagnose problem with CPackRPM
+  # because we will know on which kind of Linux we are
+  if(CPACK_RPM_PACKAGE_DEBUG)
+    find_program(LSB_RELEASE_EXECUTABLE lsb_release)
+    if(LSB_RELEASE_EXECUTABLE)
+      execute_process(COMMAND ${LSB_RELEASE_EXECUTABLE} -a
+                      OUTPUT_VARIABLE _TMP_LSB_RELEASE_OUTPUT
+                      ERROR_QUIET
+                      OUTPUT_STRIP_TRAILING_WHITESPACE)
+      string(REGEX REPLACE "\n" ", "
+             LSB_RELEASE_OUTPUT
+             ${_TMP_LSB_RELEASE_OUTPUT})
+    else ()
+      set(LSB_RELEASE_OUTPUT "lsb_release not installed/found!")
+    endif()
+    message("CPackRPM:Debug: LSB_RELEASE  = ${LSB_RELEASE_OUTPUT}")
+  endif()
+
+  # We may use RPM version in the future in order
+  # to shut down warning about space in buildtree
+  # some recent RPM version should support space in different places.
+  # not checked [yet].
+  if(CPACK_TOPLEVEL_DIRECTORY MATCHES ".* .*")
+    message(FATAL_ERROR "${RPMBUILD_EXECUTABLE} can't handle paths with spaces, use a build directory without spaces for building RPMs.")
+  endif()
+
+  # If rpmbuild is found
+  # we try to discover alien since we may be on non RPM distro like Debian.
+  # In this case we may try to to use more advanced features
+  # like generating RPM directly from DEB using alien.
+  # FIXME feature not finished (yet)
+  find_program(ALIEN_EXECUTABLE alien)
+  if(ALIEN_EXECUTABLE)
+    message(STATUS "alien found, we may be on a Debian based distro.")
+  endif()
+
+  # Are we packaging components ?
+  if(CPACK_RPM_PACKAGE_COMPONENT)
+    string(TOUPPER ${CPACK_RPM_PACKAGE_COMPONENT} CPACK_RPM_PACKAGE_COMPONENT_UPPER)
+  endif()
+
+  set(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}${CPACK_RPM_PACKAGE_COMPONENT_PART_PATH}")
+
+  #
+  # Use user-defined RPM specific variables value
+  # or generate reasonable default value from
+  # CPACK_xxx generic values.
+  # The variables comes from the needed (mandatory or not)
+  # values found in the RPM specification file aka ".spec" file.
+  # The variables which may/should be defined are:
+  #
+
+  # CPACK_RPM_PACKAGE_SUMMARY (mandatory)
+
+  if(CPACK_RPM_PACKAGE_COMPONENT)
+    cpack_rpm_variable_fallback("CPACK_RPM_PACKAGE_SUMMARY"
+      "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_SUMMARY"
+      "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_PACKAGE_SUMMARY")
+  endif()
+
+  if(NOT CPACK_RPM_PACKAGE_SUMMARY)
+    if(CPACK_PACKAGE_DESCRIPTION_SUMMARY)
+      set(CPACK_RPM_PACKAGE_SUMMARY ${CPACK_PACKAGE_DESCRIPTION_SUMMARY})
+    else()
+      # if neither var is defined lets use the name as summary
+      string(TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_RPM_PACKAGE_SUMMARY)
+    endif()
+  endif()
+
+  if(NOT CPACK_RPM_PACKAGE_URL AND CPACK_PACKAGE_HOMEPAGE_URL)
+    set(CPACK_RPM_PACKAGE_URL "${CPACK_PACKAGE_HOMEPAGE_URL}")
+  endif()
+
+  # CPACK_RPM_PACKAGE_NAME (mandatory)
+  if(NOT CPACK_RPM_PACKAGE_NAME)
+    string(TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_RPM_PACKAGE_NAME)
+  endif()
+
+  if(CPACK_RPM_PACKAGE_COMPONENT)
+    string(TOUPPER "${CPACK_RPM_MAIN_COMPONENT}"
+      CPACK_RPM_MAIN_COMPONENT_UPPER)
+
+    if(NOT CPACK_RPM_MAIN_COMPONENT_UPPER STREQUAL CPACK_RPM_PACKAGE_COMPONENT_UPPER)
+      string(APPEND CPACK_RPM_PACKAGE_NAME "-${CPACK_RPM_PACKAGE_COMPONENT}")
+
+      cpack_rpm_variable_fallback("CPACK_RPM_PACKAGE_NAME"
+        "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_NAME"
+        "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_PACKAGE_NAME")
+    endif()
+  endif()
+
+  # CPACK_RPM_PACKAGE_VERSION (mandatory)
+  if(NOT CPACK_RPM_PACKAGE_VERSION)
+    if(NOT CPACK_PACKAGE_VERSION)
+      message(FATAL_ERROR "RPM package requires a package version")
+    endif()
+    set(CPACK_RPM_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION})
+  endif()
+  # Replace '-' in version with '_'
+  # '-' character is  an Illegal RPM version character
+  # it is illegal because it is used to separate
+  # RPM "Version" from RPM "Release"
+  string(REPLACE "-" "_" CPACK_RPM_PACKAGE_VERSION ${CPACK_RPM_PACKAGE_VERSION})
+
+  # CPACK_RPM_PACKAGE_ARCHITECTURE (mandatory)
+  if(NOT CPACK_RPM_PACKAGE_ARCHITECTURE)
+    execute_process(COMMAND uname "-m"
+                    OUTPUT_VARIABLE CPACK_RPM_PACKAGE_ARCHITECTURE
+                    OUTPUT_STRIP_TRAILING_WHITESPACE)
+  else()
+    if(CPACK_RPM_PACKAGE_DEBUG)
+      message("CPackRPM:Debug: using user-specified build arch = ${CPACK_RPM_PACKAGE_ARCHITECTURE}")
+    endif()
+  endif()
+
+  if(CPACK_RPM_PACKAGE_COMPONENT)
+    cpack_rpm_variable_fallback("CPACK_RPM_PACKAGE_ARCHITECTURE"
+      "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_ARCHITECTURE"
+      "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_PACKAGE_ARCHITECTURE")
+
+    if(CPACK_RPM_PACKAGE_DEBUG)
+      message("CPackRPM:Debug: using component build arch = ${CPACK_RPM_PACKAGE_ARCHITECTURE}")
+    endif()
+  endif()
+
+  if(${CPACK_RPM_PACKAGE_ARCHITECTURE} STREQUAL "noarch")
+    set(TMP_RPM_BUILDARCH "Buildarch: ${CPACK_RPM_PACKAGE_ARCHITECTURE}")
+  else()
+    set(TMP_RPM_BUILDARCH "")
+  endif()
+
+  # CPACK_RPM_PACKAGE_RELEASE
+  # The RPM release is the numbering of the RPM package ITSELF
+  # this is the version of the PACKAGING and NOT the version
+  # of the CONTENT of the package.
+  # You may well need to generate a new RPM package release
+  # without changing the version of the packaged software.
+  # This is the case when the packaging is buggy (not) the software :=)
+  # If not set, 1 is a good candidate
+  if(NOT CPACK_RPM_PACKAGE_RELEASE)
+    set(CPACK_RPM_PACKAGE_RELEASE "1")
+  endif()
+
+  if(CPACK_RPM_PACKAGE_RELEASE_DIST)
+    string(APPEND CPACK_RPM_PACKAGE_RELEASE "%{?dist}")
+  endif()
+
+  # CPACK_RPM_PACKAGE_LICENSE
+  if(NOT CPACK_RPM_PACKAGE_LICENSE)
+    set(CPACK_RPM_PACKAGE_LICENSE "unknown")
+  endif()
+
+  # CPACK_RPM_PACKAGE_GROUP
+  if(CPACK_RPM_PACKAGE_COMPONENT)
+    cpack_rpm_variable_fallback("CPACK_RPM_PACKAGE_GROUP"
+      "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_GROUP"
+      "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_PACKAGE_GROUP")
+  endif()
+
+  if(NOT CPACK_RPM_PACKAGE_GROUP)
+    set(CPACK_RPM_PACKAGE_GROUP "unknown")
+  endif()
+
+  # CPACK_RPM_PACKAGE_VENDOR
+  if(NOT CPACK_RPM_PACKAGE_VENDOR)
+    if(CPACK_PACKAGE_VENDOR)
+      set(CPACK_RPM_PACKAGE_VENDOR "${CPACK_PACKAGE_VENDOR}")
+    else()
+      set(CPACK_RPM_PACKAGE_VENDOR "unknown")
+    endif()
+  endif()
+
+  # CPACK_RPM_PACKAGE_SOURCE
+  # The name of the source tarball in case we generate a source RPM
+
+  # CPACK_RPM_PACKAGE_DESCRIPTION
+  # The variable content may be either
+  #   - explicitly given by the user or
+  #   - filled with the content of CPACK_PACKAGE_DESCRIPTION_FILE
+  #     if it is defined
+  #   - set to a default value
+  #
+
+  if(CPACK_RPM_PACKAGE_COMPONENT)
+    cpack_rpm_variable_fallback("CPACK_RPM_PACKAGE_DESCRIPTION"
+      "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_DESCRIPTION"
+      "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_PACKAGE_DESCRIPTION"
+      "CPACK_COMPONENT_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_DESCRIPTION")
+  endif()
+
+  if(NOT CPACK_RPM_PACKAGE_DESCRIPTION)
+    if(CPACK_PACKAGE_DESCRIPTION_FILE)
+      file(READ ${CPACK_PACKAGE_DESCRIPTION_FILE} CPACK_RPM_PACKAGE_DESCRIPTION)
+    else ()
+      set(CPACK_RPM_PACKAGE_DESCRIPTION "no package description available")
+    endif ()
+  endif ()
+
+  # CPACK_RPM_COMPRESSION_TYPE
+  #
+  if (CPACK_RPM_COMPRESSION_TYPE)
+     if(CPACK_RPM_PACKAGE_DEBUG)
+       message("CPackRPM:Debug: User Specified RPM compression type: ${CPACK_RPM_COMPRESSION_TYPE}")
+     endif()
+     if(CPACK_RPM_COMPRESSION_TYPE STREQUAL "lzma")
+       set(CPACK_RPM_COMPRESSION_TYPE_TMP "%define _binary_payload w9.lzdio")
+     endif()
+     if(CPACK_RPM_COMPRESSION_TYPE STREQUAL "xz")
+       set(CPACK_RPM_COMPRESSION_TYPE_TMP "%define _binary_payload w7.xzdio")
+     endif()
+     if(CPACK_RPM_COMPRESSION_TYPE STREQUAL "bzip2")
+       set(CPACK_RPM_COMPRESSION_TYPE_TMP "%define _binary_payload w9.bzdio")
+     endif()
+     if(CPACK_RPM_COMPRESSION_TYPE STREQUAL "gzip")
+       set(CPACK_RPM_COMPRESSION_TYPE_TMP "%define _binary_payload w9.gzdio")
+     endif()
+  else()
+     set(CPACK_RPM_COMPRESSION_TYPE_TMP "")
+  endif()
+
+  if(NOT CPACK_RPM_PACKAGE_SOURCES)
+    if(CPACK_PACKAGE_RELOCATABLE OR CPACK_RPM_PACKAGE_RELOCATABLE)
+      if(CPACK_RPM_PACKAGE_DEBUG)
+        message("CPackRPM:Debug: Trying to build a relocatable package")
+      endif()
+      if(CPACK_SET_DESTDIR AND (NOT CPACK_SET_DESTDIR STREQUAL "I_ON"))
+        message("CPackRPM:Warning: CPACK_SET_DESTDIR is set (=${CPACK_SET_DESTDIR}) while requesting a relocatable package (CPACK_RPM_PACKAGE_RELOCATABLE is set): this is not supported, the package won't be relocatable.")
+        set(CPACK_RPM_PACKAGE_RELOCATABLE FALSE)
+      else()
+        set(CPACK_RPM_PACKAGE_PREFIX ${CPACK_PACKAGING_INSTALL_PREFIX}) # kept for back compatibility (provided external RPM spec files)
+        cpack_rpm_prepare_relocation_paths()
+        set(CPACK_RPM_PACKAGE_RELOCATABLE TRUE)
+      endif()
+    endif()
+  else()
+    if(CPACK_RPM_PACKAGE_COMPONENT)
+      message(FATAL_ERROR "CPACK_RPM_PACKAGE_SOURCES parameter can not be used"
+        " in combination with CPACK_RPM_PACKAGE_COMPONENT parameter!")
+    endif()
+
+    set(CPACK_RPM_PACKAGE_RELOCATABLE FALSE) # disable relocatable option if building source RPM
+  endif()
+
+  execute_process(
+    COMMAND "${RPMBUILD_EXECUTABLE}" --querytags
+    OUTPUT_VARIABLE RPMBUILD_TAG_LIST
+    OUTPUT_STRIP_TRAILING_WHITESPACE)
+  string(REPLACE "\n" ";" RPMBUILD_TAG_LIST "${RPMBUILD_TAG_LIST}")
+
+  # In some versions of RPM, weak dependency tags are present in the --querytags
+  # list, but unsupported by rpmbuild. A different method must be used to check
+  # if they are supported.
+
+  execute_process(
+    COMMAND ${RPM_EXECUTABLE} --suggests
+    ERROR_QUIET
+    RESULT_VARIABLE RPMBUILD_SUGGESTS_RESULT)
+
+  if(NOT RPMBUILD_SUGGESTS_RESULT EQUAL 0)
+    foreach(_WEAK_DEP SUGGESTS RECOMMENDS SUPPLEMENTS ENHANCES)
+      list(REMOVE_ITEM RPMBUILD_TAG_LIST ${_WEAK_DEP})
+    endforeach()
+  endif()
+
+  if(CPACK_RPM_PACKAGE_EPOCH)
+    set(TMP_RPM_EPOCH "Epoch: ${CPACK_RPM_PACKAGE_EPOCH}")
+  endif()
+
+  # Check if additional fields for RPM spec header are given
+  # There may be some COMPONENT specific variables as well
+  # If component specific var is not provided we use the global one
+  # for each component
+  foreach(_RPM_SPEC_HEADER URL REQUIRES SUGGESTS PROVIDES OBSOLETES PREFIX CONFLICTS AUTOPROV AUTOREQ AUTOREQPROV REQUIRES_PRE REQUIRES_POST REQUIRES_PREUN REQUIRES_POSTUN)
+
+    if(CPACK_RPM_PACKAGE_DEBUG)
+      message("CPackRPM:Debug: processing ${_RPM_SPEC_HEADER}")
+    endif()
+
+    if(CPACK_RPM_PACKAGE_COMPONENT)
+      cpack_rpm_variable_fallback("CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}"
+        "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_${_RPM_SPEC_HEADER}"
+        "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_PACKAGE_${_RPM_SPEC_HEADER}")
+    endif()
+
+    if(DEFINED CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER})
+      # Prefix can be replaced by Prefixes but the old version still works so we'll ignore it for now
+      # Requires* is a special case because it gets transformed to Requires(pre/post/preun/postun)
+      # Auto* is a special case because the tags can not be queried by querytags rpmbuild flag
+      set(special_case_tags_ PREFIX REQUIRES_PRE REQUIRES_POST REQUIRES_PREUN REQUIRES_POSTUN AUTOPROV AUTOREQ AUTOREQPROV)
+      if(NOT _RPM_SPEC_HEADER IN_LIST RPMBUILD_TAG_LIST AND NOT _RPM_SPEC_HEADER IN_LIST special_case_tags_)
+        message(AUTHOR_WARNING "CPackRPM:Warning: ${_RPM_SPEC_HEADER} not "
+            "supported in provided rpmbuild. Tag will not be used.")
+        continue()
+      endif()
+
+      if(CPACK_RPM_PACKAGE_DEBUG)
+        message("CPackRPM:Debug: using CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}")
+      endif()
+
+      set(CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}_TMP ${CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}})
+    endif()
+
+    # Treat the RPM Spec keyword iff it has been properly defined
+    if(DEFINED CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}_TMP)
+      # Transform NAME --> Name e.g. PROVIDES --> Provides
+      # The Upper-case first letter and lowercase tail is the
+      # appropriate value required in the final RPM spec file.
+      string(SUBSTRING ${_RPM_SPEC_HEADER} 1 -1 _PACKAGE_HEADER_TAIL)
+      string(TOLOWER "${_PACKAGE_HEADER_TAIL}" _PACKAGE_HEADER_TAIL)
+      string(SUBSTRING ${_RPM_SPEC_HEADER} 0 1 _PACKAGE_HEADER_NAME)
+      string(APPEND _PACKAGE_HEADER_NAME "${_PACKAGE_HEADER_TAIL}")
+      # The following keywords require parentheses around the "pre" or "post" suffix in the final RPM spec file.
+      set(SCRIPTS_REQUIREMENTS_LIST REQUIRES_PRE REQUIRES_POST REQUIRES_PREUN REQUIRES_POSTUN)
+      list(FIND SCRIPTS_REQUIREMENTS_LIST ${_RPM_SPEC_HEADER} IS_SCRIPTS_REQUIREMENT_FOUND)
+      if(NOT ${IS_SCRIPTS_REQUIREMENT_FOUND} EQUAL -1)
+        string(REPLACE "_" "(" _PACKAGE_HEADER_NAME "${_PACKAGE_HEADER_NAME}")
+        string(APPEND _PACKAGE_HEADER_NAME ")")
+      endif()
+      if(CPACK_RPM_PACKAGE_DEBUG)
+        message("CPackRPM:Debug: User defined ${_PACKAGE_HEADER_NAME}:\n ${CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}_TMP}")
+      endif()
+      set(TMP_RPM_${_RPM_SPEC_HEADER} "${_PACKAGE_HEADER_NAME}: ${CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}_TMP}")
+      unset(CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}_TMP)
+    endif()
+  endforeach()
+
+  # CPACK_RPM_SPEC_INSTALL_POST
+  # May be used to define a RPM post intallation script
+  # for example setting it to "/bin/true" may prevent
+  # rpmbuild from stripping binaries.
+  if(CPACK_RPM_SPEC_INSTALL_POST)
+    if(CPACK_RPM_PACKAGE_DEBUG)
+      message("CPackRPM:Debug: User defined CPACK_RPM_SPEC_INSTALL_POST = ${CPACK_RPM_SPEC_INSTALL_POST}")
+    endif()
+    set(TMP_RPM_SPEC_INSTALL_POST "%define __spec_install_post ${CPACK_RPM_SPEC_INSTALL_POST}")
+  endif()
+
+  # CPACK_RPM_REQUIRES_EXCLUDE_FROM
+  # May be defined to keep the dependency generator from
+  # scanning specific files or directories for deps.
+  if(CPACK_RPM_REQUIRES_EXCLUDE_FROM)
+    if(CPACK_RPM_PACKAGE_DEBUG)
+      message("CPackRPM:Debug: User defined CPACK_RPM_REQUIRES_EXCLUDE_FROM = ${CPACK_RPM_REQUIRES_EXCLUDE_FROM}")
+    endif()
+    set(TMP_RPM_REQUIRES_EXCLUDE_FROM "%global __requires_exclude_from ${CPACK_RPM_REQUIRES_EXCLUDE_FROM}")
+  endif()
+
+  # CPACK_RPM_POST_INSTALL_SCRIPT_FILE (or CPACK_RPM_<COMPONENT>_POST_INSTALL_SCRIPT_FILE)
+  # CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE (or CPACK_RPM_<COMPONENT>_POST_UNINSTALL_SCRIPT_FILE)
+  # CPACK_RPM_POST_TRANS_SCRIPT_FILE (or CPACK_RPM_<COMPONENT>_POST_TRANS_SCRIPT_FILE)
+  # May be used to embed a post installation/uninstallation/transaction script in the spec file.
+  # The referred script file(s) will be read and directly
+  # put after the %post or %postun or %posttrans section
+  # ----------------------------------------------------------------
+  # CPACK_RPM_PRE_INSTALL_SCRIPT_FILE (or CPACK_RPM_<COMPONENT>_PRE_INSTALL_SCRIPT_FILE)
+  # CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE (or CPACK_RPM_<COMPONENT>_PRE_UNINSTALL_SCRIPT_FILE)
+  # CPACK_RPM_PRE_TRANS_SCRIPT_FILE (or CPACK_RPM_<COMPONENT>_PRE_TRANS_SCRIPT_FILE)
+  # May be used to embed a pre installation/uninstallation/transaction script in the spec file.
+  # The referred script file(s) will be read and directly
+  # put after the %pre or %preun or %pretrans section
+  foreach(RPM_SCRIPT_FILE_TYPE_ "INSTALL" "UNINSTALL" "TRANS")
+    foreach(RPM_SCRIPT_FILE_TIME_ "PRE" "POST")
+      set("CPACK_RPM_${RPM_SCRIPT_FILE_TIME_}_${RPM_SCRIPT_FILE_TYPE_}_READ_FILE"
+        "${CPACK_RPM_${RPM_SCRIPT_FILE_TIME_}_${RPM_SCRIPT_FILE_TYPE_}_SCRIPT_FILE}")
+
+      if(CPACK_RPM_PACKAGE_COMPONENT)
+        cpack_rpm_variable_fallback("CPACK_RPM_${RPM_SCRIPT_FILE_TIME_}_${RPM_SCRIPT_FILE_TYPE_}_READ_FILE"
+          "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_${RPM_SCRIPT_FILE_TIME_}_${RPM_SCRIPT_FILE_TYPE_}_SCRIPT_FILE"
+          "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_${RPM_SCRIPT_FILE_TIME_}_${RPM_SCRIPT_FILE_TYPE_}_SCRIPT_FILE")
+      endif()
+
+      # Handle file if it has been specified
+      if(CPACK_RPM_${RPM_SCRIPT_FILE_TIME_}_${RPM_SCRIPT_FILE_TYPE_}_READ_FILE)
+        if(EXISTS ${CPACK_RPM_${RPM_SCRIPT_FILE_TIME_}_${RPM_SCRIPT_FILE_TYPE_}_READ_FILE})
+          file(READ ${CPACK_RPM_${RPM_SCRIPT_FILE_TIME_}_${RPM_SCRIPT_FILE_TYPE_}_READ_FILE}
+            "CPACK_RPM_SPEC_${RPM_SCRIPT_FILE_TIME_}${RPM_SCRIPT_FILE_TYPE_}")
+        else()
+          message("CPackRPM:Warning: CPACK_RPM_${RPM_SCRIPT_FILE_TIME_}_${RPM_SCRIPT_FILE_TYPE_}_SCRIPT_FILE <${CPACK_RPM_${RPM_SCRIPT_FILE_TIME_}_${RPM_SCRIPT_FILE_TYPE_}_READ_FILE}> does not exists - ignoring")
+        endif()
+      else()
+        # reset SPEC var value if no file has been specified
+        # (either globally or component-wise)
+        set("CPACK_RPM_SPEC_${RPM_SCRIPT_FILE_TIME_}${RPM_SCRIPT_FILE_TYPE_}" "")
+      endif()
+    endforeach()
+  endforeach()
+
+  # CPACK_RPM_CHANGELOG_FILE
+  # May be used to embed a changelog in the spec file.
+  # The referred file will be read and directly put after the %changelog section
+  if(CPACK_RPM_CHANGELOG_FILE)
+    if(EXISTS ${CPACK_RPM_CHANGELOG_FILE})
+      file(READ ${CPACK_RPM_CHANGELOG_FILE} CPACK_RPM_SPEC_CHANGELOG)
+    else()
+      message(SEND_ERROR "CPackRPM:Warning: CPACK_RPM_CHANGELOG_FILE <${CPACK_RPM_CHANGELOG_FILE}> does not exists - ignoring")
+    endif()
+  else()
+    set(CPACK_RPM_SPEC_CHANGELOG "* Sun Jul 4 2010 Eric Noulard <eric.noulard@gmail.com> - ${CPACK_RPM_PACKAGE_VERSION}-${CPACK_RPM_PACKAGE_RELEASE}\n  Generated by CPack RPM (no Changelog file were provided)")
+  endif()
+
+  # CPACK_RPM_SPEC_MORE_DEFINE
+  # This is a generated spec rpm file spaceholder
+  if(CPACK_RPM_SPEC_MORE_DEFINE)
+    if(CPACK_RPM_PACKAGE_DEBUG)
+      message("CPackRPM:Debug: User defined more define spec line specified:\n ${CPACK_RPM_SPEC_MORE_DEFINE}")
+    endif()
+  endif()
+
+  # Now we may create the RPM build tree structure
+  set(CPACK_RPM_ROOTDIR "${CPACK_TOPLEVEL_DIRECTORY}")
+  if(CPACK_RPM_PACKAGE_DEBUG)
+    message("CPackRPM:Debug: Using CPACK_RPM_ROOTDIR=${CPACK_RPM_ROOTDIR}")
+  endif()
+  # Prepare RPM build tree
+  file(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR})
+  file(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/tmp)
+  file(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/BUILD)
+  file(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/RPMS)
+  file(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/SOURCES)
+  file(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/SPECS)
+  file(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/SRPMS)
+
+  # it seems rpmbuild can't handle spaces in the path
+  # neither escaping (as below) nor putting quotes around the path seem to help
+  #string(REGEX REPLACE " " "\\\\ " CPACK_RPM_DIRECTORY "${CPACK_TOPLEVEL_DIRECTORY}")
+  set(CPACK_RPM_DIRECTORY "${CPACK_TOPLEVEL_DIRECTORY}")
+
+  cpack_rpm_prepare_content_list()
+
+  # In component case, put CPACK_ABSOLUTE_DESTINATION_FILES_<COMPONENT>
+  #                   into CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL
+  #         otherwise, put CPACK_ABSOLUTE_DESTINATION_FILES
+  # This must be done BEFORE the CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL handling
+  if(CPACK_RPM_PACKAGE_COMPONENT)
+    if(CPACK_ABSOLUTE_DESTINATION_FILES)
+      cpack_rpm_variable_fallback("COMPONENT_FILES_TAG"
+        "CPACK_ABSOLUTE_DESTINATION_FILES_${CPACK_RPM_PACKAGE_COMPONENT}"
+        "CPACK_ABSOLUTE_DESTINATION_FILES_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}")
+      set(CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL "${${COMPONENT_FILES_TAG}}")
+      if(CPACK_RPM_PACKAGE_DEBUG)
+        message("CPackRPM:Debug: Handling Absolute Destination Files: <${CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL}>")
+        message("CPackRPM:Debug: in component = ${CPACK_RPM_PACKAGE_COMPONENT}")
+      endif()
+    endif()
+  else()
+    if(CPACK_ABSOLUTE_DESTINATION_FILES)
+      set(CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL "${CPACK_ABSOLUTE_DESTINATION_FILES}")
+    endif()
+  endif()
+
+  # In component case, set CPACK_RPM_USER_FILELIST_INTERNAL with CPACK_RPM_<COMPONENT>_USER_FILELIST.
+  set(CPACK_RPM_USER_FILELIST_INTERNAL "")
+  if(CPACK_RPM_PACKAGE_COMPONENT)
+    cpack_rpm_variable_fallback("CPACK_RPM_USER_FILELIST_INTERNAL"
+      "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_USER_FILELIST"
+      "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_USER_FILELIST")
+
+    if(CPACK_RPM_PACKAGE_DEBUG AND CPACK_RPM_USER_FILELIST_INTERNAL)
+      message("CPackRPM:Debug: Handling User Filelist: <${CPACK_RPM_USER_FILELIST_INTERNAL}>")
+      message("CPackRPM:Debug: in component = ${CPACK_RPM_PACKAGE_COMPONENT}")
+    endif()
+  elseif(CPACK_RPM_USER_FILELIST)
+    set(CPACK_RPM_USER_FILELIST_INTERNAL "${CPACK_RPM_USER_FILELIST}")
+  endif()
+
+  # Handle user specified file line list in CPACK_RPM_USER_FILELIST_INTERNAL
+  # Remove those files from CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL
+  #                      or CPACK_RPM_INSTALL_FILES,
+  # hence it must be done before these auto-generated lists are processed.
+  if(CPACK_RPM_USER_FILELIST_INTERNAL)
+    if(CPACK_RPM_PACKAGE_DEBUG)
+      message("CPackRPM:Debug: Handling User Filelist: <${CPACK_RPM_USER_FILELIST_INTERNAL}>")
+    endif()
+
+    # Create CMake list from CPACK_RPM_INSTALL_FILES
+    string(STRIP "${CPACK_RPM_INSTALL_FILES}" CPACK_RPM_INSTALL_FILES_LIST)
+    string(REPLACE "\n" ";" CPACK_RPM_INSTALL_FILES_LIST
+                            "${CPACK_RPM_INSTALL_FILES_LIST}")
+    string(REPLACE "\"" "" CPACK_RPM_INSTALL_FILES_LIST
+                            "${CPACK_RPM_INSTALL_FILES_LIST}")
+
+    set(CPACK_RPM_USER_INSTALL_FILES "")
+    foreach(F IN LISTS CPACK_RPM_USER_FILELIST_INTERNAL)
+      string(REGEX REPLACE "%[A-Za-z]+(\\([^()]*\\))? " "" F_PATH ${F})
+      string(REGEX MATCH "(%[A-Za-z]+(\\([^()]*\\))? )*" F_PREFIX ${F})
+      string(STRIP ${F_PREFIX} F_PREFIX)
+
+      if(CPACK_RPM_PACKAGE_DEBUG)
+        message("CPackRPM:Debug: F_PREFIX=<${F_PREFIX}>, F_PATH=<${F_PATH}>")
+      endif()
+      if(F_PREFIX)
+        string(APPEND F_PREFIX " ")
+      endif()
+      # Rebuild the user list file
+      string(APPEND CPACK_RPM_USER_INSTALL_FILES "${F_PREFIX}\"${F_PATH}\"\n")
+
+      # Remove from CPACK_RPM_INSTALL_FILES and CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL
+      list(REMOVE_ITEM CPACK_RPM_INSTALL_FILES_LIST ${F_PATH})
+      # ABSOLUTE destination files list may not exists at all
+      if (CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL)
+        list(REMOVE_ITEM CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL ${F_PATH})
+      endif()
+    endforeach()
+
+    # Rebuild CPACK_RPM_INSTALL_FILES
+    set(CPACK_RPM_INSTALL_FILES "")
+    foreach(F IN LISTS CPACK_RPM_INSTALL_FILES_LIST)
+      string(APPEND CPACK_RPM_INSTALL_FILES "\"${F}\"\n")
+    endforeach()
+  else()
+    set(CPACK_RPM_USER_INSTALL_FILES "")
+  endif()
+
+  if (CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL)
+    if(CPACK_RPM_PACKAGE_DEBUG)
+      message("CPackRPM:Debug: Handling Absolute Destination Files: ${CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL}")
+    endif()
+    # Remove trailing space
+    string(STRIP "${CPACK_RPM_INSTALL_FILES}" CPACK_RPM_INSTALL_FILES_LIST)
+    # Transform endline separated - string into CMake List
+    string(REPLACE "\n" ";" CPACK_RPM_INSTALL_FILES_LIST "${CPACK_RPM_INSTALL_FILES_LIST}")
+    # Remove unnecessary quotes
+    string(REPLACE "\"" "" CPACK_RPM_INSTALL_FILES_LIST "${CPACK_RPM_INSTALL_FILES_LIST}")
+    # Remove ABSOLUTE install file from INSTALL FILE LIST
+    list(REMOVE_ITEM CPACK_RPM_INSTALL_FILES_LIST ${CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL})
+    # Rebuild INSTALL_FILES
+    set(CPACK_RPM_INSTALL_FILES "")
+    foreach(F IN LISTS CPACK_RPM_INSTALL_FILES_LIST)
+      string(APPEND CPACK_RPM_INSTALL_FILES "\"${F}\"\n")
+    endforeach()
+    # Build ABSOLUTE_INSTALL_FILES
+    set(CPACK_RPM_ABSOLUTE_INSTALL_FILES "")
+    foreach(F IN LISTS CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL)
+      string(APPEND CPACK_RPM_ABSOLUTE_INSTALL_FILES "%config \"${F}\"\n")
+    endforeach()
+    if(CPACK_RPM_PACKAGE_DEBUG)
+      message("CPackRPM:Debug: CPACK_RPM_ABSOLUTE_INSTALL_FILES=${CPACK_RPM_ABSOLUTE_INSTALL_FILES}")
+      message("CPackRPM:Debug: CPACK_RPM_INSTALL_FILES=${CPACK_RPM_INSTALL_FILES}")
+    endif()
+  else()
+    # reset vars in order to avoid leakage of value(s) from one component to another
+    set(CPACK_RPM_ABSOLUTE_INSTALL_FILES "")
+  endif()
+
+  cpack_rpm_variable_fallback("CPACK_RPM_DEBUGINFO_PACKAGE"
+    "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_DEBUGINFO_PACKAGE"
+    "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_DEBUGINFO_PACKAGE"
+    "CPACK_RPM_DEBUGINFO_PACKAGE")
+  if(CPACK_RPM_DEBUGINFO_PACKAGE OR (CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE AND NOT GENERATE_SPEC_PARTS))
+    cpack_rpm_variable_fallback("CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX"
+      "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_BUILD_SOURCE_DIRS_PREFIX"
+      "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_BUILD_SOURCE_DIRS_PREFIX"
+      "CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX")
+    if(NOT CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX)
+      set(CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX "/usr/src/debug/${CPACK_PACKAGE_FILE_NAME}${CPACK_RPM_PACKAGE_COMPONENT_PART_PATH}")
+    endif()
+
+    # handle cases where path contains extra slashes (e.g. /a//b/ instead of
+    # /a/b)
+    get_filename_component(CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX
+      "${CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX}" ABSOLUTE)
+
+    if(CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE AND GENERATE_SPEC_PARTS)
+      file(WRITE "${CPACK_RPM_ROOTDIR}/SPECS/${CPACK_RPM_PACKAGE_COMPONENT}.files"
+        "${CPACK_RPM_INSTALL_FILES}")
+    else()
+      if(CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE AND CPACK_RPM_PACKAGE_COMPONENT)
+        # this part is only required by components packaging - with monolithic
+        # packages we can be certain that there are no other components present
+        # so CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE is a noop
+        if(CPACK_RPM_DEBUGINFO_PACKAGE)
+          # only add current package files to debuginfo list if debuginfo
+          # generation is enabled for current package
+          string(STRIP "${CPACK_RPM_INSTALL_FILES}" install_files_)
+          string(REPLACE "\n" ";" install_files_ "${install_files_}")
+          string(REPLACE "\"" "" install_files_ "${install_files_}")
+        else()
+          unset(install_files_)
+        endif()
+
+        file(GLOB files_ "${CPACK_RPM_DIRECTORY}/SPECS/*.files")
+
+        foreach(f_ IN LISTS files_)
+          file(READ "${f_}" tmp_)
+          string(APPEND install_files_ ";${tmp_}")
+        endforeach()
+
+        # if there were other components/groups so we need to move files from them
+        # to current component otherwise those files won't be found
+        file(GLOB components_ LIST_DIRECTORIES true RELATIVE
+          "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}"
+          "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}/*")
+        foreach(component_ IN LISTS components_)
+          string(TOUPPER "${component_}" component_dir_upper_)
+          if(component_dir_upper_ STREQUAL CPACK_RPM_PACKAGE_COMPONENT_UPPER)
+            # skip current component
+            continue()
+          endif()
+
+          file(GLOB_RECURSE files_for_move_ LIST_DIRECTORIES true RELATIVE
+            "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}/${component_}"
+            "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}/${component_}/*")
+
+          foreach(f_ IN LISTS files_for_move_)
+            set(src_file_
+              "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}/${component_}/${f_}")
+
+            if(IS_DIRECTORY "${src_file_}")
+              file(MAKE_DIRECTORY "${WDIR}/${f_}")
+              continue()
+            endif()
+
+            get_filename_component(dir_path_ "${f_}" DIRECTORY)
+
+            # check that we are not overriding an existing file that doesn't
+            # match the file that we want to copy
+            if(EXISTS "${src_file_}" AND EXISTS "${WDIR}/${f_}")
+              execute_process(
+                  COMMAND ${CMAKE_COMMAND} -E compare_files "${src_file_}" "${WDIR}/${f_}"
+                  RESULT_VARIABLE res_
+                )
+              if(res_)
+                message(FATAL_ERROR "CPackRPM:Error: File on path '${WDIR}/${f_}'"
+                  " already exists but is a different than the one in component"
+                  " '${component_}'! Packages will not be generated.")
+              endif()
+            endif()
+
+            file(MAKE_DIRECTORY "${WDIR}/${dir_path_}")
+            file(RENAME "${src_file_}"
+              "${WDIR}/${f_}")
+          endforeach()
+        endforeach()
+
+        cpack_rpm_debugsymbol_check("${install_files_}" "${WDIR}")
+      else()
+        string(STRIP "${CPACK_RPM_INSTALL_FILES}" install_files_)
+        string(REPLACE "\n" ";" install_files_ "${install_files_}")
+        string(REPLACE "\"" "" install_files_ "${install_files_}")
+
+        cpack_rpm_debugsymbol_check("${install_files_}" "${WDIR}")
+      endif()
+
+      if(TMP_DEBUGINFO_ADDITIONAL_SOURCES)
+        set(TMP_RPM_DEBUGINFO "
+# Modified version of %%debug_package macro
+# defined in /usr/lib/rpm/macros as that one
+# can't handle injection of extra source files.
+%ifnarch noarch
+%global __debug_package 1
+%package debuginfo
+Summary: Debug information for package %{name}
+Group: Development/Debug
+AutoReqProv: 0
+%description debuginfo
+This package provides debug information for package %{name}.
+Debug information is useful when developing applications that use this
+package or when debugging this package.
+%files debuginfo -f debugfiles.list
+%defattr(-,root,root)
+${TMP_DEBUGINFO_ADDITIONAL_SOURCES}
+%endif
+")
+      elseif(CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE)
+        message(AUTHOR_WARNING "CPackRPM:Warning: debuginfo package was requested"
+          " but will not be generated as no source files were found!")
+      else()
+        message(AUTHOR_WARNING "CPackRPM:Warning: debuginfo package was requested"
+          " but will not be generated as no source files were found! Component: '"
+          "${CPACK_RPM_PACKAGE_COMPONENT}'.")
+      endif()
+    endif()
+  endif()
+
+  # Prepare install files
+  cpack_rpm_prepare_install_files(
+      "${CPACK_RPM_INSTALL_FILES}"
+      "${WDIR}"
+      "${RPM_USED_PACKAGE_PREFIXES}"
+      "${CPACK_RPM_PACKAGE_RELOCATABLE}"
+    )
+
+  # set default user and group
+  foreach(_PERM_TYPE "USER" "GROUP")
+    if(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_DEFAULT_${_PERM_TYPE})
+      set(TMP_DEFAULT_${_PERM_TYPE} "${CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_DEFAULT_${_PERM_TYPE}}")
+    elseif(CPACK_RPM_DEFAULT_${_PERM_TYPE})
+      set(TMP_DEFAULT_${_PERM_TYPE} "${CPACK_RPM_DEFAULT_${_PERM_TYPE}}")
+    else()
+      set(TMP_DEFAULT_${_PERM_TYPE} "root")
+    endif()
+  endforeach()
+
+  # set default file and dir permissions
+  foreach(_PERM_TYPE "FILE" "DIR")
+    if(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_DEFAULT_${_PERM_TYPE}_PERMISSIONS)
+      get_unix_permissions_octal_notation("CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_DEFAULT_${_PERM_TYPE}_PERMISSIONS" "TMP_DEFAULT_${_PERM_TYPE}_PERMISSIONS")
+      set(_PERMISSIONS_VAR "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_DEFAULT_${_PERM_TYPE}_PERMISSIONS")
+    elseif(CPACK_RPM_DEFAULT_${_PERM_TYPE}_PERMISSIONS)
+      get_unix_permissions_octal_notation("CPACK_RPM_DEFAULT_${_PERM_TYPE}_PERMISSIONS" "TMP_DEFAULT_${_PERM_TYPE}_PERMISSIONS")
+      set(_PERMISSIONS_VAR "CPACK_RPM_DEFAULT_${_PERM_TYPE}_PERMISSIONS")
+    else()
+      set(TMP_DEFAULT_${_PERM_TYPE}_PERMISSIONS "-")
+    endif()
+  endforeach()
+
+  # The name of the final spec file to be used by rpmbuild
+  set(CPACK_RPM_BINARY_SPECFILE "${CPACK_RPM_ROOTDIR}/SPECS/${CPACK_RPM_PACKAGE_NAME}.spec")
+
+  # Print out some debug information if we were asked for that
+  if(CPACK_RPM_PACKAGE_DEBUG)
+     message("CPackRPM:Debug: CPACK_TOPLEVEL_DIRECTORY          = ${CPACK_TOPLEVEL_DIRECTORY}")
+     message("CPackRPM:Debug: CPACK_TOPLEVEL_TAG                = ${CPACK_TOPLEVEL_TAG}")
+     message("CPackRPM:Debug: CPACK_TEMPORARY_DIRECTORY         = ${CPACK_TEMPORARY_DIRECTORY}")
+     message("CPackRPM:Debug: CPACK_OUTPUT_FILE_NAME            = ${CPACK_OUTPUT_FILE_NAME}")
+     message("CPackRPM:Debug: CPACK_OUTPUT_FILE_PATH            = ${CPACK_OUTPUT_FILE_PATH}")
+     message("CPackRPM:Debug: CPACK_PACKAGE_FILE_NAME           = ${CPACK_PACKAGE_FILE_NAME}")
+     message("CPackRPM:Debug: CPACK_RPM_BINARY_SPECFILE         = ${CPACK_RPM_BINARY_SPECFILE}")
+     message("CPackRPM:Debug: CPACK_PACKAGE_INSTALL_DIRECTORY   = ${CPACK_PACKAGE_INSTALL_DIRECTORY}")
+     message("CPackRPM:Debug: CPACK_TEMPORARY_PACKAGE_FILE_NAME = ${CPACK_TEMPORARY_PACKAGE_FILE_NAME}")
+  endif()
+
+  #
+  # USER generated/provided spec file handling.
+  #
+
+  # We can have a component specific spec file.
+  if(CPACK_RPM_PACKAGE_COMPONENT)
+    cpack_rpm_variable_fallback("CPACK_RPM_USER_BINARY_SPECFILE"
+      "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_USER_BINARY_SPECFILE"
+      "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_USER_BINARY_SPECFILE")
+  endif()
+
+  cpack_rpm_variable_fallback("CPACK_RPM_FILE_NAME"
+    "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_FILE_NAME"
+    "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_FILE_NAME"
+    "CPACK_RPM_FILE_NAME")
+  if(NOT CPACK_RPM_FILE_NAME STREQUAL "RPM-DEFAULT")
+    if(CPACK_RPM_FILE_NAME)
+      if(NOT CPACK_RPM_FILE_NAME MATCHES ".*\\.rpm")
+        message(FATAL_ERROR "'${CPACK_RPM_FILE_NAME}' is not a valid RPM package file name as it must end with '.rpm'!")
+      endif()
+    else()
+      # old file name format for back compatibility
+      string(TOUPPER "${CPACK_RPM_MAIN_COMPONENT}"
+        CPACK_RPM_MAIN_COMPONENT_UPPER)
+
+      if(CPACK_RPM_MAIN_COMPONENT_UPPER STREQUAL CPACK_RPM_PACKAGE_COMPONENT_UPPER)
+        # this is the main component so ignore the component filename part
+        set(CPACK_RPM_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}.rpm")
+      else()
+        set(CPACK_RPM_FILE_NAME "${CPACK_OUTPUT_FILE_NAME}")
+      endif()
+    endif()
+    # else example:
+    #set(CPACK_RPM_FILE_NAME "${CPACK_RPM_PACKAGE_NAME}-${CPACK_RPM_PACKAGE_VERSION}-${CPACK_RPM_PACKAGE_RELEASE}-${CPACK_RPM_PACKAGE_ARCHITECTURE}.rpm")
+
+    if(CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE AND GENERATE_SPEC_PARTS)
+      string(TOLOWER "${CPACK_RPM_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}.*\\.rpm" expected_filename_)
+
+      file(WRITE "${CPACK_RPM_ROOTDIR}/SPECS/${CPACK_RPM_PACKAGE_COMPONENT}.rpm_name"
+        "${expected_filename_};${CPACK_RPM_FILE_NAME}")
+    elseif(NOT CPACK_RPM_DEBUGINFO_PACKAGE)
+      set(FILE_NAME_DEFINE "%define _rpmfilename ${CPACK_RPM_FILE_NAME}")
+    endif()
+  endif()
+
+  if(CPACK_RPM_PACKAGE_SOURCES) # source rpm
+    set(archive_name_ "${CPACK_RPM_PACKAGE_NAME}-${CPACK_RPM_PACKAGE_VERSION}")
+
+    execute_process(
+        COMMAND ${CMAKE_COMMAND} -E tar "cfvz" "${CPACK_RPM_DIRECTORY}/SOURCES/${archive_name_}.tar.gz" "${CPACK_PACKAGE_FILE_NAME}"
+        WORKING_DIRECTORY ${CPACK_RPM_DIRECTORY}
+      )
+    set(TMP_RPM_SOURCE "Source: ${archive_name_}.tar.gz")
+
+    if(CPACK_RPM_BUILDREQUIRES)
+      set(TMP_RPM_BUILD_REQUIRES "BuildRequires: ${CPACK_RPM_BUILDREQUIRES}")
+    endif()
+
+    # Disable debuginfo packages - srpm generates invalid packages due to
+    # releasing control to cpack to generate binary packages.
+    # Note however that this doesn't prevent cpack to generate debuginfo
+    # packages when run from srpm with --rebuild.
+    set(TMP_RPM_DISABLE_DEBUGINFO "%define debug_package %{nil}")
+
+    if(NOT CPACK_RPM_SOURCE_PKG_PACKAGING_INSTALL_PREFIX)
+      set(CPACK_RPM_SOURCE_PKG_PACKAGING_INSTALL_PREFIX "/")
+    endif()
+
+    set(TMP_RPM_BUILD
+      "
+%build
+mkdir cpack_rpm_build_dir
+cd cpack_rpm_build_dir
+'${CMAKE_COMMAND}' ${CPACK_RPM_SOURCE_PKG_BUILD_PARAMS} -DCPACK_PACKAGING_INSTALL_PREFIX=${CPACK_RPM_SOURCE_PKG_PACKAGING_INSTALL_PREFIX} ../${CPACK_PACKAGE_FILE_NAME}
+make %{?_smp_mflags}" # %{?_smp_mflags} -> -j option
+      )
+    set(TMP_RPM_INSTALL
+      "
+cd cpack_rpm_build_dir
+cpack -G RPM
+mv *.rpm %_rpmdir"
+      )
+    set(TMP_RPM_PREP "%setup -c")
+
+    set(RPMBUILD_FLAGS "-bs")
+
+     file(WRITE ${CPACK_RPM_BINARY_SPECFILE}.in
+      "# Restore old style debuginfo creation for rpm >= 4.14.
+%undefine _debugsource_packages
+%undefine _debuginfo_subpackages
+
+# -*- rpm-spec -*-
+BuildRoot:      %_topdir/\@CPACK_PACKAGE_FILE_NAME\@
+Summary:        \@CPACK_RPM_PACKAGE_SUMMARY\@
+Name:           \@CPACK_RPM_PACKAGE_NAME\@
+Version:        \@CPACK_RPM_PACKAGE_VERSION\@
+Release:        \@CPACK_RPM_PACKAGE_RELEASE\@
+License:        \@CPACK_RPM_PACKAGE_LICENSE\@
+Group:          \@CPACK_RPM_PACKAGE_GROUP\@
+Vendor:         \@CPACK_RPM_PACKAGE_VENDOR\@
+
+\@TMP_RPM_SOURCE\@
+\@TMP_RPM_BUILD_REQUIRES\@
+\@TMP_RPM_BUILDARCH\@
+\@TMP_RPM_PREFIXES\@
+
+\@TMP_RPM_DISABLE_DEBUGINFO\@
+
+%define _rpmdir %_topdir/RPMS
+%define _srcrpmdir %_topdir/SRPMS
+\@FILE_NAME_DEFINE\@
+%define _unpackaged_files_terminate_build 0
+\@TMP_RPM_SPEC_INSTALL_POST\@
+\@TMP_RPM_REQUIRES_EXCLUDE_FROM\@
+\@CPACK_RPM_SPEC_MORE_DEFINE\@
+\@CPACK_RPM_COMPRESSION_TYPE_TMP\@
+
+%description
+\@CPACK_RPM_PACKAGE_DESCRIPTION\@
+
+# This is a shortcutted spec file generated by CMake RPM generator
+# we skip _install step because CPack does that for us.
+# We do only save CPack installed tree in _prepr
+# and then restore it in build.
+%prep
+\@TMP_RPM_PREP\@
+
+\@TMP_RPM_BUILD\@
+
+#p build
+
+%install
+\@TMP_RPM_INSTALL\@
+
+%clean
+
+%changelog
+\@CPACK_RPM_SPEC_CHANGELOG\@
+"
+    )
+
+  elseif(GENERATE_SPEC_PARTS) # binary rpm with single debuginfo package
+
+    set_spec_scripts("${CPACK_RPM_PACKAGE_NAME}")
+
+    file(WRITE ${CPACK_RPM_BINARY_SPECFILE}.in
+        "# -*- rpm-spec -*-
+%package -n \@CPACK_RPM_PACKAGE_NAME\@
+Summary:        \@CPACK_RPM_PACKAGE_SUMMARY\@
+Version:        \@CPACK_RPM_PACKAGE_VERSION\@
+Release:        \@CPACK_RPM_PACKAGE_RELEASE\@
+License:        \@CPACK_RPM_PACKAGE_LICENSE\@
+Group:          \@CPACK_RPM_PACKAGE_GROUP\@
+Vendor:         \@CPACK_RPM_PACKAGE_VENDOR\@
+
+\@TMP_RPM_URL\@
+\@TMP_RPM_REQUIRES\@
+\@TMP_RPM_REQUIRES_PRE\@
+\@TMP_RPM_REQUIRES_POST\@
+\@TMP_RPM_REQUIRES_PREUN\@
+\@TMP_RPM_REQUIRES_POSTUN\@
+\@TMP_RPM_PROVIDES\@
+\@TMP_RPM_OBSOLETES\@
+\@TMP_RPM_CONFLICTS\@
+\@TMP_RPM_SUGGESTS\@
+\@TMP_RPM_AUTOPROV\@
+\@TMP_RPM_AUTOREQ\@
+\@TMP_RPM_AUTOREQPROV\@
+\@TMP_RPM_BUILDARCH\@
+\@TMP_RPM_PREFIXES\@
+\@TMP_RPM_EPOCH\@
+
+%description -n \@CPACK_RPM_PACKAGE_NAME\@
+\@CPACK_RPM_PACKAGE_DESCRIPTION\@
+
+\@post_\@
+\@posttrans_\@
+\@postun_\@
+\@pre_\@
+\@pretrans_\@
+\@preun_\@
+
+%files -n \@CPACK_RPM_PACKAGE_NAME\@
+%defattr(\@TMP_DEFAULT_FILE_PERMISSIONS\@,\@TMP_DEFAULT_USER\@,\@TMP_DEFAULT_GROUP\@,\@TMP_DEFAULT_DIR_PERMISSIONS\@)
+\@CPACK_RPM_INSTALL_FILES\@
+\@CPACK_RPM_ABSOLUTE_INSTALL_FILES\@
+\@CPACK_RPM_USER_INSTALL_FILES\@
+"
+    )
+
+  else()  # binary rpm
+    if(CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE)
+      # find generated spec file and take its name
+      file(GLOB spec_files_ "${CPACK_RPM_DIRECTORY}/SPECS/*.spec")
+
+      foreach(f_ IN LISTS spec_files_)
+        file(READ "${f_}" tmp_)
+        string(APPEND TMP_OTHER_COMPONENTS "\n${tmp_}\n")
+      endforeach()
+    endif()
+
+    # We should generate a USER spec file template:
+    #  - either because the user asked for it : CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE
+    #  - or the user did not provide one : NOT CPACK_RPM_USER_BINARY_SPECFILE
+    set(RPMBUILD_FLAGS "-bb")
+    if(CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE OR NOT CPACK_RPM_USER_BINARY_SPECFILE)
+
+      set_spec_scripts("")
+
+      file(WRITE ${CPACK_RPM_BINARY_SPECFILE}.in
+        "# Restore old style debuginfo creation for rpm >= 4.14.
+%undefine _debugsource_packages
+%undefine _debuginfo_subpackages
+
+# -*- rpm-spec -*-
+BuildRoot:      %_topdir/\@CPACK_PACKAGE_FILE_NAME\@\@CPACK_RPM_PACKAGE_COMPONENT_PART_PATH\@
+Summary:        \@CPACK_RPM_PACKAGE_SUMMARY\@
+Name:           \@CPACK_RPM_PACKAGE_NAME\@
+Version:        \@CPACK_RPM_PACKAGE_VERSION\@
+Release:        \@CPACK_RPM_PACKAGE_RELEASE\@
+License:        \@CPACK_RPM_PACKAGE_LICENSE\@
+Group:          \@CPACK_RPM_PACKAGE_GROUP\@
+Vendor:         \@CPACK_RPM_PACKAGE_VENDOR\@
+
+\@TMP_RPM_URL\@
+\@TMP_RPM_REQUIRES\@
+\@TMP_RPM_REQUIRES_PRE\@
+\@TMP_RPM_REQUIRES_POST\@
+\@TMP_RPM_REQUIRES_PREUN\@
+\@TMP_RPM_REQUIRES_POSTUN\@
+\@TMP_RPM_PROVIDES\@
+\@TMP_RPM_OBSOLETES\@
+\@TMP_RPM_CONFLICTS\@
+\@TMP_RPM_SUGGESTS\@
+\@TMP_RPM_AUTOPROV\@
+\@TMP_RPM_AUTOREQ\@
+\@TMP_RPM_AUTOREQPROV\@
+\@TMP_RPM_BUILDARCH\@
+\@TMP_RPM_PREFIXES\@
+\@TMP_RPM_EPOCH\@
+
+\@TMP_RPM_DEBUGINFO\@
+
+%define _rpmdir %_topdir/RPMS
+%define _srcrpmdir %_topdir/SRPMS
+\@FILE_NAME_DEFINE\@
+%define _unpackaged_files_terminate_build 0
+\@TMP_RPM_SPEC_INSTALL_POST\@
+\@TMP_RPM_REQUIRES_EXCLUDE_FROM\@
+\@CPACK_RPM_SPEC_MORE_DEFINE\@
+\@CPACK_RPM_COMPRESSION_TYPE_TMP\@
+
+%description
+\@CPACK_RPM_PACKAGE_DESCRIPTION\@
+
+# This is a shortcutted spec file generated by CMake RPM generator
+# we skip _install step because CPack does that for us.
+# We do only save CPack installed tree in _prepr
+# and then restore it in build.
+%prep
+mv $RPM_BUILD_ROOT %_topdir/tmpBBroot
+
+%install
+if [ -e $RPM_BUILD_ROOT ];
+then
+  rm -rf $RPM_BUILD_ROOT
+fi
+mv %_topdir/tmpBBroot $RPM_BUILD_ROOT
+
+\@TMP_RPM_DEBUGINFO_INSTALL\@
+
+%clean
+
+\@post_\@
+\@posttrans_\@
+\@postun_\@
+\@pre_\@
+\@pretrans_\@
+\@preun_\@
+
+%files
+%defattr(\@TMP_DEFAULT_FILE_PERMISSIONS\@,\@TMP_DEFAULT_USER\@,\@TMP_DEFAULT_GROUP\@,\@TMP_DEFAULT_DIR_PERMISSIONS\@)
+\@CPACK_RPM_INSTALL_FILES\@
+\@CPACK_RPM_ABSOLUTE_INSTALL_FILES\@
+\@CPACK_RPM_USER_INSTALL_FILES\@
+
+%changelog
+\@CPACK_RPM_SPEC_CHANGELOG\@
+
+\@TMP_OTHER_COMPONENTS\@
+"
+      )
+    endif()
+
+    # Stop here if we were asked to only generate a template USER spec file
+    # The generated file may then be used as a template by user who wants
+    # to customize their own spec file.
+    if(CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE)
+      message(FATAL_ERROR "CPackRPM: STOP here Generated USER binary spec file template is: ${CPACK_RPM_BINARY_SPECFILE}.in")
+    endif()
+  endif()
+
+  # After that we may either use a user provided spec file
+  # or generate one using appropriate variables value.
+  if(CPACK_RPM_USER_BINARY_SPECFILE)
+    # User may have specified SPECFILE just use it
+    message("CPackRPM: Will use USER specified spec file: ${CPACK_RPM_USER_BINARY_SPECFILE}")
+    # The user provided file is processed for @var replacement
+    configure_file(${CPACK_RPM_USER_BINARY_SPECFILE} ${CPACK_RPM_BINARY_SPECFILE} @ONLY)
+  else()
+    # No User specified spec file, will use the generated spec file
+    message("CPackRPM: Will use GENERATED spec file: ${CPACK_RPM_BINARY_SPECFILE}")
+    # Note the just created file is processed for @var replacement
+    configure_file(${CPACK_RPM_BINARY_SPECFILE}.in ${CPACK_RPM_BINARY_SPECFILE} @ONLY)
+  endif()
+
+  if(NOT GENERATE_SPEC_PARTS) # generate package
+    if(RPMBUILD_EXECUTABLE)
+      # Now call rpmbuild using the SPECFILE
+      execute_process(
+        COMMAND "${RPMBUILD_EXECUTABLE}" ${RPMBUILD_FLAGS}
+                --define "_topdir ${CPACK_RPM_DIRECTORY}"
+                --buildroot "%_topdir/${CPACK_PACKAGE_FILE_NAME}${CPACK_RPM_PACKAGE_COMPONENT_PART_PATH}"
+                --target "${CPACK_RPM_PACKAGE_ARCHITECTURE}"
+                "${CPACK_RPM_BINARY_SPECFILE}"
+        WORKING_DIRECTORY "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}${CPACK_RPM_PACKAGE_COMPONENT_PART_PATH}"
+        RESULT_VARIABLE CPACK_RPMBUILD_EXEC_RESULT
+        ERROR_FILE "${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_NAME}.err"
+        OUTPUT_FILE "${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_NAME}.out")
+      if(CPACK_RPM_PACKAGE_DEBUG OR CPACK_RPMBUILD_EXEC_RESULT)
+        file(READ ${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_NAME}.err RPMBUILDERR)
+        file(READ ${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_NAME}.out RPMBUILDOUT)
+        message("CPackRPM:Debug: You may consult rpmbuild logs in: ")
+        message("CPackRPM:Debug:    - ${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_NAME}.err")
+        message("CPackRPM:Debug: *** ${RPMBUILDERR} ***")
+        message("CPackRPM:Debug:    - ${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_NAME}.out")
+        message("CPackRPM:Debug: *** ${RPMBUILDOUT} ***")
+      endif()
+    else()
+      if(ALIEN_EXECUTABLE)
+        message(FATAL_ERROR "RPM packaging through alien not done (yet)")
+      endif()
+    endif()
+
+    # find generated rpm files and take their names
+    file(GLOB_RECURSE GENERATED_FILES "${CPACK_RPM_DIRECTORY}/RPMS/*.rpm"
+      "${CPACK_RPM_DIRECTORY}/SRPMS/*.rpm")
+
+    if(NOT GENERATED_FILES)
+      message(FATAL_ERROR "RPM package was not generated! ${CPACK_RPM_DIRECTORY}")
+    endif()
+
+    unset(expected_filenames_)
+    unset(filenames_)
+    if(CPACK_RPM_DEBUGINFO_PACKAGE AND NOT CPACK_RPM_FILE_NAME STREQUAL "RPM-DEFAULT")
+      list(APPEND expected_filenames_
+        "${CPACK_RPM_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}.*\\.rpm")
+      list(APPEND filenames_ "${CPACK_RPM_FILE_NAME}")
+    endif()
+
+    if(CPACK_RPM_DEBUGINFO_PACKAGE)
+      cpack_rpm_variable_fallback("CPACK_RPM_DEBUGINFO_FILE_NAME"
+        "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_DEBUGINFO_FILE_NAME"
+        "CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT_UPPER}_DEBUGINFO_FILE_NAME"
+        "CPACK_RPM_DEBUGINFO_FILE_NAME")
+
+      if(CPACK_RPM_DEBUGINFO_FILE_NAME AND
+        NOT CPACK_RPM_DEBUGINFO_FILE_NAME STREQUAL "RPM-DEFAULT")
+        list(APPEND expected_filenames_
+          "${CPACK_RPM_PACKAGE_NAME}-debuginfo-${CPACK_PACKAGE_VERSION}.*\\.rpm")
+        string(REPLACE "@cpack_component@" "${CPACK_RPM_PACKAGE_COMPONENT}"
+          CPACK_RPM_DEBUGINFO_FILE_NAME "${CPACK_RPM_DEBUGINFO_FILE_NAME}")
+        list(APPEND filenames_ "${CPACK_RPM_DEBUGINFO_FILE_NAME}")
+      endif()
+    endif()
+
+    # check if other files have to be renamed
+    file(GLOB rename_files_ "${CPACK_RPM_DIRECTORY}/SPECS/*.rpm_name")
+    if(rename_files_)
+      foreach(f_ IN LISTS rename_files_)
+        file(READ "${f_}" tmp_)
+        list(GET tmp_ 0 efn_)
+        list(APPEND expected_filenames_ "${efn_}")
+        list(GET tmp_ 1 fn_)
+        list(APPEND filenames_ "${fn_}")
+      endforeach()
+    endif()
+
+    if(expected_filenames_)
+      foreach(F IN LISTS GENERATED_FILES)
+        unset(matched_)
+        foreach(expected_ IN LISTS expected_filenames_)
+          if(F MATCHES ".*/${expected_}")
+            list(FIND expected_filenames_ "${expected_}" idx_)
+            list(GET filenames_ ${idx_} filename_)
+            get_filename_component(FILE_PATH "${F}" DIRECTORY)
+            file(RENAME "${F}" "${FILE_PATH}/${filename_}")
+            list(APPEND new_files_list_ "${FILE_PATH}/${filename_}")
+            set(matched_ "YES")
+
+            break()
+          endif()
+        endforeach()
+
+        if(NOT matched_)
+          list(APPEND new_files_list_ "${F}")
+        endif()
+      endforeach()
+
+      set(GENERATED_FILES "${new_files_list_}")
+    endif()
+  endif()
+
+  set(GEN_CPACK_OUTPUT_FILES "${GENERATED_FILES}" PARENT_SCOPE)
+
+  if(CPACK_RPM_PACKAGE_DEBUG)
+     message("CPackRPM:Debug: GEN_CPACK_OUTPUT_FILES = ${GENERATED_FILES}")
+  endif()
+endfunction()
+
+cpack_rpm_generate_package()
+
+cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/Internal/CPack/CPackWIX.cmake b/share/cmake-3.22/Modules/Internal/CPack/CPackWIX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Internal/CPack/CPackWIX.cmake
rename to share/cmake-3.22/Modules/Internal/CPack/CPackWIX.cmake
diff --git a/share/cmake-3.18/Modules/Internal/CPack/CPackZIP.cmake b/share/cmake-3.22/Modules/Internal/CPack/CPackZIP.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Internal/CPack/CPackZIP.cmake
rename to share/cmake-3.22/Modules/Internal/CPack/CPackZIP.cmake
diff --git a/share/cmake-3.18/Modules/Internal/CPack/NSIS.InstallOptions.ini.in b/share/cmake-3.22/Modules/Internal/CPack/NSIS.InstallOptions.ini.in
similarity index 100%
rename from share/cmake-3.18/Modules/Internal/CPack/NSIS.InstallOptions.ini.in
rename to share/cmake-3.22/Modules/Internal/CPack/NSIS.InstallOptions.ini.in
diff --git a/share/cmake-3.22/Modules/Internal/CPack/NSIS.template.in b/share/cmake-3.22/Modules/Internal/CPack/NSIS.template.in
new file mode 100644
index 0000000..8a0c972
--- /dev/null
+++ b/share/cmake-3.22/Modules/Internal/CPack/NSIS.template.in
@@ -0,0 +1,993 @@
+﻿; CPack install script designed for a nmake build
+
+;--------------------------------
+; You must define these values
+
+  !define VERSION "@CPACK_PACKAGE_VERSION@"
+  !define PATCH  "@CPACK_PACKAGE_VERSION_PATCH@"
+  !define INST_DIR "@CPACK_TEMPORARY_DIRECTORY@"
+
+;--------------------------------
+;Variables
+
+  Var MUI_TEMP
+  Var STARTMENU_FOLDER
+  Var SV_ALLUSERS
+  Var START_MENU
+  Var DO_NOT_ADD_TO_PATH
+  Var ADD_TO_PATH_ALL_USERS
+  Var ADD_TO_PATH_CURRENT_USER
+  Var INSTALL_DESKTOP
+  Var IS_DEFAULT_INSTALLDIR
+;--------------------------------
+;Include Modern UI
+
+  !include "MUI.nsh"
+
+  ;Default installation folder
+  InstallDir "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@"
+
+;--------------------------------
+;General
+
+  ;Name and file
+  Name "@CPACK_NSIS_PACKAGE_NAME@"
+  OutFile "@CPACK_TOPLEVEL_DIRECTORY@/@CPACK_OUTPUT_FILE_NAME@"
+
+  ;Set compression
+  SetCompressor @CPACK_NSIS_COMPRESSOR@
+
+  ;Require administrator access
+  RequestExecutionLevel admin
+
+@CPACK_NSIS_DEFINES@
+@CPACK_NSIS_MANIFEST_DPI_AWARE_CODE@
+@CPACK_NSIS_BRANDING_TEXT_CODE@
+
+  !include Sections.nsh
+
+;--- Component support macros: ---
+; The code for the add/remove functionality is from:
+;   http://nsis.sourceforge.net/Add/Remove_Functionality
+; It has been modified slightly and extended to provide
+; inter-component dependencies.
+Var AR_SecFlags
+Var AR_RegFlags
+@CPACK_NSIS_SECTION_SELECTED_VARS@
+
+; Loads the "selected" flag for the section named SecName into the
+; variable VarName.
+!macro LoadSectionSelectedIntoVar SecName VarName
+ SectionGetFlags ${${SecName}} $${VarName}
+ IntOp $${VarName} $${VarName} & ${SF_SELECTED}  ;Turn off all other bits
+!macroend
+
+; Loads the value of a variable... can we get around this?
+!macro LoadVar VarName
+  IntOp $R0 0 + $${VarName}
+!macroend
+
+; Sets the value of a variable
+!macro StoreVar VarName IntValue
+  IntOp $${VarName} 0 + ${IntValue}
+!macroend
+
+!macro InitSection SecName
+  ;  This macro reads component installed flag from the registry and
+  ;changes checked state of the section on the components page.
+  ;Input: section index constant name specified in Section command.
+
+  ClearErrors
+  ;Reading component status from registry
+  ReadRegDWORD $AR_RegFlags HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" "Installed"
+  IfErrors "default_${SecName}"
+    ;Status will stay default if registry value not found
+    ;(component was never installed)
+  IntOp $AR_RegFlags $AR_RegFlags & ${SF_SELECTED} ;Turn off all other bits
+  SectionGetFlags ${${SecName}} $AR_SecFlags  ;Reading default section flags
+  IntOp $AR_SecFlags $AR_SecFlags & 0xFFFE  ;Turn lowest (enabled) bit off
+  IntOp $AR_SecFlags $AR_RegFlags | $AR_SecFlags      ;Change lowest bit
+
+  ; Note whether this component was installed before
+  !insertmacro StoreVar ${SecName}_was_installed $AR_RegFlags
+  IntOp $R0 $AR_RegFlags & $AR_RegFlags
+
+  ;Writing modified flags
+  SectionSetFlags ${${SecName}} $AR_SecFlags
+
+ "default_${SecName}:"
+ !insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected
+!macroend
+
+!macro FinishSection SecName
+  ;  This macro reads section flag set by user and removes the section
+  ;if it is not selected.
+  ;Then it writes component installed flag to registry
+  ;Input: section index constant name specified in Section command.
+
+  SectionGetFlags ${${SecName}} $AR_SecFlags  ;Reading section flags
+  ;Checking lowest bit:
+  IntOp $AR_SecFlags $AR_SecFlags & ${SF_SELECTED}
+  IntCmp $AR_SecFlags 1 "leave_${SecName}"
+    ;Section is not selected:
+    ;Calling Section uninstall macro and writing zero installed flag
+    !insertmacro "Remove_${${SecName}}"
+    WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \
+  "Installed" 0
+    Goto "exit_${SecName}"
+
+ "leave_${SecName}:"
+    ;Section is selected:
+    WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \
+  "Installed" 1
+
+ "exit_${SecName}:"
+!macroend
+
+!macro RemoveSection_CPack SecName
+  ;  This macro is used to call section's Remove_... macro
+  ;from the uninstaller.
+  ;Input: section index constant name specified in Section command.
+
+  !insertmacro "Remove_${${SecName}}"
+!macroend
+
+; Determine whether the selection of SecName changed
+!macro MaybeSelectionChanged SecName
+  !insertmacro LoadVar ${SecName}_selected
+  SectionGetFlags ${${SecName}} $R1
+  IntOp $R1 $R1 & ${SF_SELECTED} ;Turn off all other bits
+
+  ; See if the status has changed:
+  IntCmp $R0 $R1 "${SecName}_unchanged"
+  !insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected
+
+  IntCmp $R1 ${SF_SELECTED} "${SecName}_was_selected"
+  !insertmacro "Deselect_required_by_${SecName}"
+  goto "${SecName}_unchanged"
+
+  "${SecName}_was_selected:"
+  !insertmacro "Select_${SecName}_depends"
+
+  "${SecName}_unchanged:"
+!macroend
+;--- End of Add/Remove macros ---
+
+;--------------------------------
+;Interface Settings
+
+  !define MUI_HEADERIMAGE
+  !define MUI_ABORTWARNING
+
+;----------------------------------------
+; based upon a script of "Written by KiCHiK 2003-01-18 05:57:02"
+;----------------------------------------
+!verbose 3
+!include "WinMessages.NSH"
+!verbose 4
+;====================================================
+; get_NT_environment
+;     Returns: the selected environment
+;     Output : head of the stack
+;====================================================
+!macro select_NT_profile UN
+Function ${UN}select_NT_profile
+   StrCmp $ADD_TO_PATH_ALL_USERS "1" 0 environment_single
+      DetailPrint "Selected environment for all users"
+      Push "all"
+      Return
+   environment_single:
+      DetailPrint "Selected environment for current user only."
+      Push "current"
+      Return
+FunctionEnd
+!macroend
+!insertmacro select_NT_profile ""
+!insertmacro select_NT_profile "un."
+;----------------------------------------------------
+!define NT_current_env 'HKCU "Environment"'
+!define NT_all_env     'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"'
+
+!ifndef WriteEnvStr_RegKey
+  !ifdef ALL_USERS
+    !define WriteEnvStr_RegKey \
+       'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"'
+  !else
+    !define WriteEnvStr_RegKey 'HKCU "Environment"'
+  !endif
+!endif
+
+; AddToPath - Adds the given dir to the search path.
+;        Input - head of the stack
+;        Note - Win9x systems requires reboot
+
+Function AddToPath
+  Exch $0
+  Push $1
+  Push $2
+  Push $3
+
+  # don't add if the path doesn't exist
+  IfFileExists "$0\*.*" "" AddToPath_done
+
+  ReadEnvStr $1 PATH
+  ; if the path is too long for a NSIS variable NSIS will return a 0
+  ; length string.  If we find that, then warn and skip any path
+  ; modification as it will trash the existing path.
+  StrLen $2 $1
+  IntCmp $2 0 CheckPathLength_ShowPathWarning CheckPathLength_Done CheckPathLength_Done
+    CheckPathLength_ShowPathWarning:
+    Messagebox MB_OK|MB_ICONEXCLAMATION "Warning! PATH too long installer unable to modify PATH!"
+    Goto AddToPath_done
+  CheckPathLength_Done:
+  Push "$1;"
+  Push "$0;"
+  Call StrStr
+  Pop $2
+  StrCmp $2 "" "" AddToPath_done
+  Push "$1;"
+  Push "$0\;"
+  Call StrStr
+  Pop $2
+  StrCmp $2 "" "" AddToPath_done
+  GetFullPathName /SHORT $3 $0
+  Push "$1;"
+  Push "$3;"
+  Call StrStr
+  Pop $2
+  StrCmp $2 "" "" AddToPath_done
+  Push "$1;"
+  Push "$3\;"
+  Call StrStr
+  Pop $2
+  StrCmp $2 "" "" AddToPath_done
+
+  Call IsNT
+  Pop $1
+  StrCmp $1 1 AddToPath_NT
+    ; Not on NT
+    StrCpy $1 $WINDIR 2
+    FileOpen $1 "$1\autoexec.bat" a
+    FileSeek $1 -1 END
+    FileReadByte $1 $2
+    IntCmp $2 26 0 +2 +2 # DOS EOF
+      FileSeek $1 -1 END # write over EOF
+    FileWrite $1 "$\r$\nSET PATH=%PATH%;$3$\r$\n"
+    FileClose $1
+    SetRebootFlag true
+    Goto AddToPath_done
+
+  AddToPath_NT:
+    StrCmp $ADD_TO_PATH_ALL_USERS "1" ReadAllKey
+      ReadRegStr $1 ${NT_current_env} "PATH"
+      Goto DoTrim
+    ReadAllKey:
+      ReadRegStr $1 ${NT_all_env} "PATH"
+    DoTrim:
+    StrCmp $1 "" AddToPath_NTdoIt
+      Push $1
+      Call Trim
+      Pop $1
+      StrCpy $0 "$1;$0"
+    AddToPath_NTdoIt:
+      StrCmp $ADD_TO_PATH_ALL_USERS "1" WriteAllKey
+        WriteRegExpandStr ${NT_current_env} "PATH" $0
+        Goto DoSend
+      WriteAllKey:
+        WriteRegExpandStr ${NT_all_env} "PATH" $0
+      DoSend:
+      SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
+
+  AddToPath_done:
+    Pop $3
+    Pop $2
+    Pop $1
+    Pop $0
+FunctionEnd
+
+
+; RemoveFromPath - Remove a given dir from the path
+;     Input: head of the stack
+
+Function un.RemoveFromPath
+  Exch $0
+  Push $1
+  Push $2
+  Push $3
+  Push $4
+  Push $5
+  Push $6
+
+  IntFmt $6 "%c" 26 # DOS EOF
+
+  Call un.IsNT
+  Pop $1
+  StrCmp $1 1 unRemoveFromPath_NT
+    ; Not on NT
+    StrCpy $1 $WINDIR 2
+    FileOpen $1 "$1\autoexec.bat" r
+    GetTempFileName $4
+    FileOpen $2 $4 w
+    GetFullPathName /SHORT $0 $0
+    StrCpy $0 "SET PATH=%PATH%;$0"
+    Goto unRemoveFromPath_dosLoop
+
+    unRemoveFromPath_dosLoop:
+      FileRead $1 $3
+      StrCpy $5 $3 1 -1 # read last char
+      StrCmp $5 $6 0 +2 # if DOS EOF
+        StrCpy $3 $3 -1 # remove DOS EOF so we can compare
+      StrCmp $3 "$0$\r$\n" unRemoveFromPath_dosLoopRemoveLine
+      StrCmp $3 "$0$\n" unRemoveFromPath_dosLoopRemoveLine
+      StrCmp $3 "$0" unRemoveFromPath_dosLoopRemoveLine
+      StrCmp $3 "" unRemoveFromPath_dosLoopEnd
+      FileWrite $2 $3
+      Goto unRemoveFromPath_dosLoop
+      unRemoveFromPath_dosLoopRemoveLine:
+        SetRebootFlag true
+        Goto unRemoveFromPath_dosLoop
+
+    unRemoveFromPath_dosLoopEnd:
+      FileClose $2
+      FileClose $1
+      StrCpy $1 $WINDIR 2
+      Delete "$1\autoexec.bat"
+      CopyFiles /SILENT $4 "$1\autoexec.bat"
+      Delete $4
+      Goto unRemoveFromPath_done
+
+  unRemoveFromPath_NT:
+    StrCmp $ADD_TO_PATH_ALL_USERS "1" unReadAllKey
+      ReadRegStr $1 ${NT_current_env} "PATH"
+      Goto unDoTrim
+    unReadAllKey:
+      ReadRegStr $1 ${NT_all_env} "PATH"
+    unDoTrim:
+    StrCpy $5 $1 1 -1 # copy last char
+    StrCmp $5 ";" +2 # if last char != ;
+      StrCpy $1 "$1;" # append ;
+    Push $1
+    Push "$0;"
+    Call un.StrStr ; Find `$0;` in $1
+    Pop $2 ; pos of our dir
+    StrCmp $2 "" unRemoveFromPath_done
+      ; else, it is in path
+      # $0 - path to add
+      # $1 - path var
+      StrLen $3 "$0;"
+      StrLen $4 $2
+      StrCpy $5 $1 -$4 # $5 is now the part before the path to remove
+      StrCpy $6 $2 "" $3 # $6 is now the part after the path to remove
+      StrCpy $3 $5$6
+
+      StrCpy $5 $3 1 -1 # copy last char
+      StrCmp $5 ";" 0 +2 # if last char == ;
+        StrCpy $3 $3 -1 # remove last char
+
+      StrCmp $ADD_TO_PATH_ALL_USERS "1" unWriteAllKey
+        WriteRegExpandStr ${NT_current_env} "PATH" $3
+        Goto unDoSend
+      unWriteAllKey:
+        WriteRegExpandStr ${NT_all_env} "PATH" $3
+      unDoSend:
+      SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
+
+  unRemoveFromPath_done:
+    Pop $6
+    Pop $5
+    Pop $4
+    Pop $3
+    Pop $2
+    Pop $1
+    Pop $0
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Uninstall sutff
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+###########################################
+#            Utility Functions            #
+###########################################
+
+;====================================================
+; IsNT - Returns 1 if the current system is NT, 0
+;        otherwise.
+;     Output: head of the stack
+;====================================================
+; IsNT
+; no input
+; output, top of the stack = 1 if NT or 0 if not
+;
+; Usage:
+;   Call IsNT
+;   Pop $R0
+;  ($R0 at this point is 1 or 0)
+
+!macro IsNT un
+Function ${un}IsNT
+  Push $0
+  ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
+  StrCmp $0 "" 0 IsNT_yes
+  ; we are not NT.
+  Pop $0
+  Push 0
+  Return
+
+  IsNT_yes:
+    ; NT!!!
+    Pop $0
+    Push 1
+FunctionEnd
+!macroend
+!insertmacro IsNT ""
+!insertmacro IsNT "un."
+
+; StrStr
+; input, top of stack = string to search for
+;        top of stack-1 = string to search in
+; output, top of stack (replaces with the portion of the string remaining)
+; modifies no other variables.
+;
+; Usage:
+;   Push "this is a long ass string"
+;   Push "ass"
+;   Call StrStr
+;   Pop $R0
+;  ($R0 at this point is "ass string")
+
+!macro StrStr un
+Function ${un}StrStr
+Exch $R1 ; st=haystack,old$R1, $R1=needle
+  Exch    ; st=old$R1,haystack
+  Exch $R2 ; st=old$R1,old$R2, $R2=haystack
+  Push $R3
+  Push $R4
+  Push $R5
+  StrLen $R3 $R1
+  StrCpy $R4 0
+  ; $R1=needle
+  ; $R2=haystack
+  ; $R3=len(needle)
+  ; $R4=cnt
+  ; $R5=tmp
+  loop:
+    StrCpy $R5 $R2 $R3 $R4
+    StrCmp $R5 $R1 done
+    StrCmp $R5 "" done
+    IntOp $R4 $R4 + 1
+    Goto loop
+done:
+  StrCpy $R1 $R2 "" $R4
+  Pop $R5
+  Pop $R4
+  Pop $R3
+  Pop $R2
+  Exch $R1
+FunctionEnd
+!macroend
+!insertmacro StrStr ""
+!insertmacro StrStr "un."
+
+Function Trim ; Added by Pelaca
+	Exch $R1
+	Push $R2
+Loop:
+	StrCpy $R2 "$R1" 1 -1
+	StrCmp "$R2" " " RTrim
+	StrCmp "$R2" "$\n" RTrim
+	StrCmp "$R2" "$\r" RTrim
+	StrCmp "$R2" ";" RTrim
+	GoTo Done
+RTrim:
+	StrCpy $R1 "$R1" -1
+	Goto Loop
+Done:
+	Pop $R2
+	Exch $R1
+FunctionEnd
+
+Function ConditionalAddToRegisty
+  Pop $0
+  Pop $1
+  StrCmp "$0" "" ConditionalAddToRegisty_EmptyString
+    WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" \
+    "$1" "$0"
+    ;MessageBox MB_OK "Set Registry: '$1' to '$0'"
+    DetailPrint "Set install registry entry: '$1' to '$0'"
+  ConditionalAddToRegisty_EmptyString:
+FunctionEnd
+
+;--------------------------------
+
+!ifdef CPACK_USES_DOWNLOAD
+Function DownloadFile
+    IfFileExists $INSTDIR\* +2
+    CreateDirectory $INSTDIR
+    Pop $0
+
+    ; Skip if already downloaded
+    IfFileExists $INSTDIR\$0 0 +2
+    Return
+
+    StrCpy $1 "@CPACK_DOWNLOAD_SITE@"
+
+  try_again:
+    NSISdl::download "$1/$0" "$INSTDIR\$0"
+
+    Pop $1
+    StrCmp $1 "success" success
+    StrCmp $1 "Cancelled" cancel
+    MessageBox MB_OK "Download failed: $1"
+  cancel:
+    Return
+  success:
+FunctionEnd
+!endif
+
+;--------------------------------
+; Define some macro setting for the gui
+@CPACK_NSIS_INSTALLER_MUI_ICON_CODE@
+@CPACK_NSIS_INSTALLER_ICON_CODE@
+@CPACK_NSIS_INSTALLER_MUI_WELCOMEFINISH_CODE@
+@CPACK_NSIS_INSTALLER_MUI_UNWELCOMEFINISH_CODE@
+@CPACK_NSIS_INSTALLER_MUI_COMPONENTS_DESC@
+@CPACK_NSIS_INSTALLER_MUI_FINISHPAGE_RUN_CODE@
+
+;--------------------------------
+;Pages
+  @CPACK_NSIS_INSTALLER_WELCOME_TITLE_CODE@
+  @CPACK_NSIS_INSTALLER_WELCOME_TITLE_3LINES_CODE@
+  !insertmacro MUI_PAGE_WELCOME
+
+  @CPACK_NSIS_LICENSE_PAGE@
+  Page custom InstallOptionsPage
+  !insertmacro MUI_PAGE_DIRECTORY
+
+  ;Start Menu Folder Page Configuration
+  !define MUI_STARTMENUPAGE_REGISTRY_ROOT "SHCTX"
+  !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@"
+  !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
+  !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER
+
+  @CPACK_NSIS_PAGE_COMPONENTS@
+
+  !insertmacro MUI_PAGE_INSTFILES
+  @CPACK_NSIS_INSTALLER_FINISH_TITLE_CODE@
+  @CPACK_NSIS_INSTALLER_FINISH_TITLE_3LINES_CODE@
+  !insertmacro MUI_PAGE_FINISH
+
+  !insertmacro MUI_UNPAGE_CONFIRM
+  !insertmacro MUI_UNPAGE_INSTFILES
+
+;--------------------------------
+;Languages
+
+  !insertmacro MUI_LANGUAGE "English" ;first language is the default language
+  !insertmacro MUI_LANGUAGE "Afrikaans"
+  !insertmacro MUI_LANGUAGE "Albanian"
+  !insertmacro MUI_LANGUAGE "Arabic"
+  !insertmacro MUI_LANGUAGE "Asturian"
+  !insertmacro MUI_LANGUAGE "Basque"
+  !insertmacro MUI_LANGUAGE "Belarusian"
+  !insertmacro MUI_LANGUAGE "Bosnian"
+  !insertmacro MUI_LANGUAGE "Breton"
+  !insertmacro MUI_LANGUAGE "Bulgarian"
+  !insertmacro MUI_LANGUAGE "Catalan"
+  !insertmacro MUI_LANGUAGE "Corsican"
+  !insertmacro MUI_LANGUAGE "Croatian"
+  !insertmacro MUI_LANGUAGE "Czech"
+  !insertmacro MUI_LANGUAGE "Danish"
+  !insertmacro MUI_LANGUAGE "Dutch"
+  !insertmacro MUI_LANGUAGE "Esperanto"
+  !insertmacro MUI_LANGUAGE "Estonian"
+  !insertmacro MUI_LANGUAGE "Farsi"
+  !insertmacro MUI_LANGUAGE "Finnish"
+  !insertmacro MUI_LANGUAGE "French"
+  !insertmacro MUI_LANGUAGE "Galician"
+  !insertmacro MUI_LANGUAGE "German"
+  !insertmacro MUI_LANGUAGE "Greek"
+  !insertmacro MUI_LANGUAGE "Hebrew"
+  !insertmacro MUI_LANGUAGE "Hungarian"
+  !insertmacro MUI_LANGUAGE "Icelandic"
+  !insertmacro MUI_LANGUAGE "Indonesian"
+  !insertmacro MUI_LANGUAGE "Irish"
+  !insertmacro MUI_LANGUAGE "Italian"
+  !insertmacro MUI_LANGUAGE "Japanese"
+  !insertmacro MUI_LANGUAGE "Korean"
+  !insertmacro MUI_LANGUAGE "Kurdish"
+  !insertmacro MUI_LANGUAGE "Latvian"
+  !insertmacro MUI_LANGUAGE "Lithuanian"
+  !insertmacro MUI_LANGUAGE "Luxembourgish"
+  !insertmacro MUI_LANGUAGE "Macedonian"
+  !insertmacro MUI_LANGUAGE "Malay"
+  !insertmacro MUI_LANGUAGE "Mongolian"
+  !insertmacro MUI_LANGUAGE "Norwegian"
+  !insertmacro MUI_LANGUAGE "NorwegianNynorsk"
+  !insertmacro MUI_LANGUAGE "Pashto"
+  !insertmacro MUI_LANGUAGE "Polish"
+  !insertmacro MUI_LANGUAGE "Portuguese"
+  !insertmacro MUI_LANGUAGE "PortugueseBR"
+  !insertmacro MUI_LANGUAGE "Romanian"
+  !insertmacro MUI_LANGUAGE "Russian"
+  !insertmacro MUI_LANGUAGE "ScotsGaelic"
+  !insertmacro MUI_LANGUAGE "Serbian"
+  !insertmacro MUI_LANGUAGE "SerbianLatin"
+  !insertmacro MUI_LANGUAGE "SimpChinese"
+  !insertmacro MUI_LANGUAGE "Slovak"
+  !insertmacro MUI_LANGUAGE "Slovenian"
+  !insertmacro MUI_LANGUAGE "Spanish"
+  !insertmacro MUI_LANGUAGE "SpanishInternational"
+  !insertmacro MUI_LANGUAGE "Swedish"
+  !insertmacro MUI_LANGUAGE "Tatar"
+  !insertmacro MUI_LANGUAGE "Thai"
+  !insertmacro MUI_LANGUAGE "TradChinese"
+  !insertmacro MUI_LANGUAGE "Turkish"
+  !insertmacro MUI_LANGUAGE "Ukrainian"
+  !insertmacro MUI_LANGUAGE "Uzbek"
+  !insertmacro MUI_LANGUAGE "Vietnamese"
+  !insertmacro MUI_LANGUAGE "Welsh"
+
+;--------------------------------
+;Reserve Files
+
+  ;These files should be inserted before other files in the data block
+  ;Keep these lines before any File command
+  ;Only for solid compression (by default, solid compression is enabled for BZIP2 and LZMA)
+
+  ReserveFile "NSIS.InstallOptions.ini"
+  !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
+
+  ; for UserInfo::GetName and UserInfo::GetAccountType
+  ReserveFile /plugin 'UserInfo.dll'
+
+;--------------------------------
+; Installation types
+@CPACK_NSIS_INSTALLATION_TYPES@
+
+;--------------------------------
+; Component sections
+@CPACK_NSIS_COMPONENT_SECTIONS@
+
+;--------------------------------
+;Installer Sections
+
+Section "-Core installation"
+  ;Use the entire tree produced by the INSTALL target.  Keep the
+  ;list of directories here in sync with the RMDir commands below.
+  SetOutPath "$INSTDIR"
+  @CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS@
+  @CPACK_NSIS_FULL_INSTALL@
+
+  ;Store installation folder
+  WriteRegStr SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "" $INSTDIR
+
+  ;Create uninstaller
+  WriteUninstaller "$INSTDIR\@CPACK_NSIS_UNINSTALL_NAME@.exe"
+  Push "DisplayName"
+  Push "@CPACK_NSIS_DISPLAY_NAME@"
+  Call ConditionalAddToRegisty
+  Push "DisplayVersion"
+  Push "@CPACK_PACKAGE_VERSION@"
+  Call ConditionalAddToRegisty
+  Push "Publisher"
+  Push "@CPACK_PACKAGE_VENDOR@"
+  Call ConditionalAddToRegisty
+  Push "UninstallString"
+  Push "$\"$INSTDIR\@CPACK_NSIS_UNINSTALL_NAME@.exe$\""
+  Call ConditionalAddToRegisty
+  Push "NoRepair"
+  Push "1"
+  Call ConditionalAddToRegisty
+
+  !ifdef CPACK_NSIS_ADD_REMOVE
+  ;Create add/remove functionality
+  Push "ModifyPath"
+  Push "$INSTDIR\AddRemove.exe"
+  Call ConditionalAddToRegisty
+  !else
+  Push "NoModify"
+  Push "1"
+  Call ConditionalAddToRegisty
+  !endif
+
+  ; Optional registration
+  Push "DisplayIcon"
+  Push "$INSTDIR\@CPACK_NSIS_INSTALLED_ICON_NAME@"
+  Call ConditionalAddToRegisty
+  Push "HelpLink"
+  Push "@CPACK_NSIS_HELP_LINK@"
+  Call ConditionalAddToRegisty
+  Push "URLInfoAbout"
+  Push "@CPACK_NSIS_URL_INFO_ABOUT@"
+  Call ConditionalAddToRegisty
+  Push "Contact"
+  Push "@CPACK_NSIS_CONTACT@"
+  Call ConditionalAddToRegisty
+  !insertmacro MUI_INSTALLOPTIONS_READ $INSTALL_DESKTOP "NSIS.InstallOptions.ini" "Field 5" "State"
+  !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
+
+  ;Create shortcuts
+  CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER"
+@CPACK_NSIS_CREATE_ICONS@
+@CPACK_NSIS_CREATE_ICONS_EXTRA@
+  CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\@CPACK_NSIS_UNINSTALL_NAME@.exe"
+
+  ;Read a value from an InstallOptions INI file
+  !insertmacro MUI_INSTALLOPTIONS_READ $DO_NOT_ADD_TO_PATH "NSIS.InstallOptions.ini" "Field 2" "State"
+  !insertmacro MUI_INSTALLOPTIONS_READ $ADD_TO_PATH_ALL_USERS "NSIS.InstallOptions.ini" "Field 3" "State"
+  !insertmacro MUI_INSTALLOPTIONS_READ $ADD_TO_PATH_CURRENT_USER "NSIS.InstallOptions.ini" "Field 4" "State"
+
+  ; Write special uninstall registry entries
+  Push "StartMenu"
+  Push "$STARTMENU_FOLDER"
+  Call ConditionalAddToRegisty
+  Push "DoNotAddToPath"
+  Push "$DO_NOT_ADD_TO_PATH"
+  Call ConditionalAddToRegisty
+  Push "AddToPathAllUsers"
+  Push "$ADD_TO_PATH_ALL_USERS"
+  Call ConditionalAddToRegisty
+  Push "AddToPathCurrentUser"
+  Push "$ADD_TO_PATH_CURRENT_USER"
+  Call ConditionalAddToRegisty
+  Push "InstallToDesktop"
+  Push "$INSTALL_DESKTOP"
+  Call ConditionalAddToRegisty
+
+  !insertmacro MUI_STARTMENU_WRITE_END
+
+@CPACK_NSIS_EXTRA_INSTALL_COMMANDS@
+
+SectionEnd
+
+Section "-Add to path"
+  Push $INSTDIR\bin
+  StrCmp "@CPACK_NSIS_MODIFY_PATH@" "ON" 0 doNotAddToPath
+  StrCmp $DO_NOT_ADD_TO_PATH "1" doNotAddToPath 0
+    Call AddToPath
+  doNotAddToPath:
+SectionEnd
+
+;--------------------------------
+; Create custom pages
+Function InstallOptionsPage
+  !insertmacro MUI_HEADER_TEXT "Install Options" "Choose options for installing @CPACK_NSIS_PACKAGE_NAME@"
+  !insertmacro MUI_INSTALLOPTIONS_DISPLAY "NSIS.InstallOptions.ini"
+
+FunctionEnd
+
+;--------------------------------
+; determine admin versus local install
+Function un.onInit
+
+  ClearErrors
+  UserInfo::GetName
+  IfErrors noLM
+  Pop $0
+  UserInfo::GetAccountType
+  Pop $1
+  StrCmp $1 "Admin" 0 +3
+    SetShellVarContext all
+    ;MessageBox MB_OK 'User "$0" is in the Admin group'
+    Goto done
+  StrCmp $1 "Power" 0 +3
+    SetShellVarContext all
+    ;MessageBox MB_OK 'User "$0" is in the Power Users group'
+    Goto done
+
+  noLM:
+    ;Get installation folder from registry if available
+
+  done:
+
+FunctionEnd
+
+;--- Add/Remove callback functions: ---
+!macro SectionList MacroName
+  ;This macro used to perform operation on multiple sections.
+  ;List all of your components in following manner here.
+@CPACK_NSIS_COMPONENT_SECTION_LIST@
+!macroend
+
+Section -FinishComponents
+  ;Removes unselected components and writes component status to registry
+  !insertmacro SectionList "FinishSection"
+
+!ifdef CPACK_NSIS_ADD_REMOVE
+  ; Get the name of the installer executable
+  System::Call 'kernel32::GetModuleFileNameA(i 0, t .R0, i 1024) i r1'
+  StrCpy $R3 $R0
+
+  ; Strip off the last 13 characters, to see if we have AddRemove.exe
+  StrLen $R1 $R0
+  IntOp $R1 $R0 - 13
+  StrCpy $R2 $R0 13 $R1
+  StrCmp $R2 "AddRemove.exe" addremove_installed
+
+  ; We're not running AddRemove.exe, so install it
+  CopyFiles $R3 $INSTDIR\AddRemove.exe
+
+  addremove_installed:
+!endif
+SectionEnd
+;--- End of Add/Remove callback functions ---
+
+;--------------------------------
+; Component dependencies
+Function .onSelChange
+  !insertmacro SectionList MaybeSelectionChanged
+FunctionEnd
+
+;--------------------------------
+;Uninstaller Section
+
+Section "Uninstall"
+  ReadRegStr $START_MENU SHCTX \
+   "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "StartMenu"
+  ;MessageBox MB_OK "Start menu is in: $START_MENU"
+  ReadRegStr $DO_NOT_ADD_TO_PATH SHCTX \
+    "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "DoNotAddToPath"
+  ReadRegStr $ADD_TO_PATH_ALL_USERS SHCTX \
+    "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "AddToPathAllUsers"
+  ReadRegStr $ADD_TO_PATH_CURRENT_USER SHCTX \
+    "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "AddToPathCurrentUser"
+  ;MessageBox MB_OK "Add to path: $DO_NOT_ADD_TO_PATH all users: $ADD_TO_PATH_ALL_USERS"
+  ReadRegStr $INSTALL_DESKTOP SHCTX \
+    "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "InstallToDesktop"
+  ;MessageBox MB_OK "Install to desktop: $INSTALL_DESKTOP "
+
+@CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS@
+
+  ;Remove files we installed.
+  ;Keep the list of directories here in sync with the File commands above.
+@CPACK_NSIS_DELETE_FILES@
+@CPACK_NSIS_DELETE_DIRECTORIES@
+
+!ifdef CPACK_NSIS_ADD_REMOVE
+  ;Remove the add/remove program
+  Delete "$INSTDIR\AddRemove.exe"
+!endif
+
+  ;Remove the uninstaller itself.
+  Delete "$INSTDIR\@CPACK_NSIS_UNINSTALL_NAME@.exe"
+  DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@"
+
+  ;Remove the installation directory if it is empty.
+  RMDir "$INSTDIR"
+
+  ; Remove the registry entries.
+  DeleteRegKey SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@"
+
+  ; Removes all optional components
+  !insertmacro SectionList "RemoveSection_CPack"
+
+  !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
+
+  Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk"
+@CPACK_NSIS_DELETE_ICONS@
+@CPACK_NSIS_DELETE_ICONS_EXTRA@
+
+  ;Delete empty start menu parent directories
+  StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP"
+
+  startMenuDeleteLoop:
+    ClearErrors
+    RMDir $MUI_TEMP
+    GetFullPathName $MUI_TEMP "$MUI_TEMP\.."
+
+    IfErrors startMenuDeleteLoopDone
+
+    StrCmp "$MUI_TEMP" "$SMPROGRAMS" startMenuDeleteLoopDone startMenuDeleteLoop
+  startMenuDeleteLoopDone:
+
+  ; If the user changed the shortcut, then untinstall may not work. This should
+  ; try to fix it.
+  StrCpy $MUI_TEMP "$START_MENU"
+  Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk"
+@CPACK_NSIS_DELETE_ICONS_EXTRA@
+
+  ;Delete empty start menu parent directories
+  StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP"
+
+  secondStartMenuDeleteLoop:
+    ClearErrors
+    RMDir $MUI_TEMP
+    GetFullPathName $MUI_TEMP "$MUI_TEMP\.."
+
+    IfErrors secondStartMenuDeleteLoopDone
+
+    StrCmp "$MUI_TEMP" "$SMPROGRAMS" secondStartMenuDeleteLoopDone secondStartMenuDeleteLoop
+  secondStartMenuDeleteLoopDone:
+
+  DeleteRegKey /ifempty SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@"
+
+  Push $INSTDIR\bin
+  StrCmp $DO_NOT_ADD_TO_PATH_ "1" doNotRemoveFromPath 0
+    Call un.RemoveFromPath
+  doNotRemoveFromPath:
+SectionEnd
+
+;--------------------------------
+; determine admin versus local install
+; Is install for "AllUsers" or "JustMe"?
+; Default to "JustMe" - set to "AllUsers" if admin or on Win9x
+; This function is used for the very first "custom page" of the installer.
+; This custom page does not show up visibly, but it executes prior to the
+; first visible page and sets up $INSTDIR properly...
+; Choose different default installation folder based on SV_ALLUSERS...
+; "Program Files" for AllUsers, "My Documents" for JustMe...
+
+Function .onInit
+  StrCmp "@CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL@" "ON" 0 inst
+
+  ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "UninstallString"
+  StrCmp $0 "" inst
+
+  MessageBox MB_YESNOCANCEL|MB_ICONEXCLAMATION \
+  "@CPACK_NSIS_PACKAGE_NAME@ is already installed. $\n$\nDo you want to uninstall the old version before installing the new one?" \
+  /SD IDYES IDYES uninst IDNO inst
+  Abort
+
+;Run the uninstaller
+uninst:
+  ClearErrors
+  StrLen $2 "\@CPACK_NSIS_UNINSTALL_NAME@.exe"
+  StrCpy $3 $0 -$2 # remove "\@CPACK_NSIS_UNINSTALL_NAME@.exe" from UninstallString to get path
+  ExecWait '"$0" /S _?=$3' ;Do not copy the uninstaller to a temp file
+
+  IfErrors uninst_failed inst
+uninst_failed:
+  MessageBox MB_OK|MB_ICONSTOP "Uninstall failed."
+  Abort
+
+
+inst:
+  ; Reads components status for registry
+  !insertmacro SectionList "InitSection"
+
+  ; check to see if /D has been used to change
+  ; the install directory by comparing it to the
+  ; install directory that is expected to be the
+  ; default
+  StrCpy $IS_DEFAULT_INSTALLDIR 0
+  StrCmp "$INSTDIR" "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" 0 +2
+    StrCpy $IS_DEFAULT_INSTALLDIR 1
+
+  StrCpy $SV_ALLUSERS "JustMe"
+  ; if default install dir then change the default
+  ; if it is installed for JustMe
+  StrCmp "$IS_DEFAULT_INSTALLDIR" "1" 0 +2
+    StrCpy $INSTDIR "$DOCUMENTS\@CPACK_PACKAGE_INSTALL_DIRECTORY@"
+
+  ClearErrors
+  UserInfo::GetName
+  IfErrors noLM
+  Pop $0
+  UserInfo::GetAccountType
+  Pop $1
+  StrCmp $1 "Admin" 0 +4
+    SetShellVarContext all
+    ;MessageBox MB_OK 'User "$0" is in the Admin group'
+    StrCpy $SV_ALLUSERS "AllUsers"
+    Goto done
+  StrCmp $1 "Power" 0 +4
+    SetShellVarContext all
+    ;MessageBox MB_OK 'User "$0" is in the Power Users group'
+    StrCpy $SV_ALLUSERS "AllUsers"
+    Goto done
+
+  noLM:
+    StrCpy $SV_ALLUSERS "AllUsers"
+    ;Get installation folder from registry if available
+
+  done:
+  StrCmp $SV_ALLUSERS "AllUsers" 0 +3
+    StrCmp "$IS_DEFAULT_INSTALLDIR" "1" 0 +2
+      StrCpy $INSTDIR "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@"
+
+  StrCmp "@CPACK_NSIS_MODIFY_PATH@" "ON" 0 noOptionsPage
+    !insertmacro MUI_INSTALLOPTIONS_EXTRACT "NSIS.InstallOptions.ini"
+
+  noOptionsPage:
+FunctionEnd
diff --git a/share/cmake-3.22/Modules/Internal/CPack/WIX.template.in b/share/cmake-3.22/Modules/Internal/CPack/WIX.template.in
new file mode 100644
index 0000000..c0bf935
--- /dev/null
+++ b/share/cmake-3.22/Modules/Internal/CPack/WIX.template.in
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?include "cpack_variables.wxi"?>
+
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" @CPACK_WIX_CUSTOM_XMLNS_EXPANDED@
+    RequiredVersion="3.6.3303.0">
+
+    <Product Id="$(var.CPACK_WIX_PRODUCT_GUID)"
+        Name="$(var.CPACK_PACKAGE_NAME)"
+        Language="1033"
+        Version="$(var.CPACK_PACKAGE_VERSION)"
+        Manufacturer="$(var.CPACK_PACKAGE_VENDOR)"
+        UpgradeCode="$(var.CPACK_WIX_UPGRADE_GUID)">
+
+        <Package InstallerVersion="301" Compressed="yes"/>
+
+        <Media Id="1" Cabinet="media1.cab" EmbedCab="yes"/>
+
+        <MajorUpgrade
+            Schedule="afterInstallInitialize"
+            AllowSameVersionUpgrades="yes"
+            DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit."/>
+
+        <WixVariable Id="WixUILicenseRtf" Value="$(var.CPACK_WIX_LICENSE_RTF)"/>
+        <Property Id="WIXUI_INSTALLDIR" Value="INSTALL_ROOT"/>
+
+        <?ifdef CPACK_WIX_PRODUCT_ICON?>
+        <Property Id="ARPPRODUCTICON">ProductIcon.ico</Property>
+        <Icon Id="ProductIcon.ico" SourceFile="$(var.CPACK_WIX_PRODUCT_ICON)"/>
+        <?endif?>
+
+        <?ifdef CPACK_WIX_UI_BANNER?>
+        <WixVariable Id="WixUIBannerBmp" Value="$(var.CPACK_WIX_UI_BANNER)"/>
+        <?endif?>
+
+        <?ifdef CPACK_WIX_UI_DIALOG?>
+        <WixVariable Id="WixUIDialogBmp" Value="$(var.CPACK_WIX_UI_DIALOG)"/>
+        <?endif?>
+
+        <FeatureRef Id="ProductFeature"/>
+
+        <UIRef Id="$(var.CPACK_WIX_UI_REF)" />
+
+        <?include "properties.wxi"?>
+        <?include "product_fragment.wxi"?>
+    </Product>
+</Wix>
diff --git a/share/cmake-3.22/Modules/Internal/CheckCompilerFlag.cmake b/share/cmake-3.22/Modules/Internal/CheckCompilerFlag.cmake
new file mode 100644
index 0000000..f6a4cc9
--- /dev/null
+++ b/share/cmake-3.22/Modules/Internal/CheckCompilerFlag.cmake
@@ -0,0 +1,83 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+include_guard(GLOBAL)
+include(Internal/CheckSourceCompiles)
+include(CMakeCheckCompilerFlagCommonPatterns)
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0054 NEW) # if() quoted variables not dereferenced
+cmake_policy(SET CMP0057 NEW) # if() supports IN_LIST
+
+function(CMAKE_CHECK_COMPILER_FLAG _lang _flag _var)
+
+  if(_lang STREQUAL "C")
+    set(_lang_src "int main(void) { return 0; }")
+    set(_lang_fail_regex FAIL_REGEX "command[ -]line option .* is valid for .* but not for C"
+                         FAIL_REGEX "-Werror=.* argument .* is not valid for C")
+  elseif(_lang STREQUAL "CXX")
+    set(_lang_src "int main() { return 0; }")
+    set(_lang_fail_regex FAIL_REGEX "command[ -]line option .* is valid for .* but not for C\\+\\+"
+                         FAIL_REGEX "-Werror=.* argument .* is not valid for C\\+\\+")
+  elseif(_lang STREQUAL "CUDA")
+    set(_lang_src "__host__ int main() { return 0; }")
+    set(_lang_fail_regex FAIL_REGEX "command[ -]line option .* is valid for .* but not for C\\+\\+" # Host GNU
+                         FAIL_REGEX "argument unused during compilation: .*") # Clang
+  elseif(_lang STREQUAL "Fortran")
+    set(_lang_src "       program test\n       stop\n       end program")
+    set(_lang_fail_regex FAIL_REGEX "command[ -]line option .* is valid for .* but not for Fortran")
+  elseif(_lang STREQUAL "HIP")
+    set(_lang_src "__host__ int main() { return 0; }")
+    set(_lang_fail_regex FAIL_REGEX "argument unused during compilation: .*") # Clang
+  elseif(_lang STREQUAL "OBJC")
+    set(_lang_src [=[
+#ifndef __OBJC__
+#  error "Not an Objective-C compiler"
+#endif
+int main(void) { return 0; }]=])
+    set(_lang_fail_regex FAIL_REGEX "command[ -]line option .* is valid for .* but not for Objective-C" # GNU
+                         FAIL_REGEX "argument unused during compilation: .*") # Clang
+  elseif(_lang STREQUAL "OBJCXX")
+    set(_lang_src [=[
+#ifndef __OBJC__
+#  error "Not an Objective-C++ compiler"
+#endif
+int main(void) { return 0; }]=])
+    set(_lang_fail_regex FAIL_REGEX "command[ -]line option .* is valid for .* but not for Objective-C\\+\\+" # GNU
+                         FAIL_REGEX "argument unused during compilation: .*") # Clang
+  elseif(_lang STREQUAL "ISPC")
+    set(_lang_src "float func(uniform int32, float a) { return a / 2.25; }")
+  else()
+    message (SEND_ERROR "check_compiler_flag: ${_lang}: unknown language.")
+    return()
+  endif()
+
+  get_property (_supported_languages GLOBAL PROPERTY ENABLED_LANGUAGES)
+  if (NOT _lang IN_LIST _supported_languages)
+    message (SEND_ERROR "check_compiler_flag: ${_lang}: needs to be enabled before use.")
+    return()
+  endif()
+
+  set(CMAKE_REQUIRED_DEFINITIONS ${_flag})
+
+  # Normalize locale during test compilation.
+  set(_locale_vars LC_ALL LC_MESSAGES LANG)
+  foreach(v IN LISTS _locale_vars)
+    set(_locale_vars_saved_${v} "$ENV{${v}}")
+    set(ENV{${v}} C)
+  endforeach()
+
+  check_compiler_flag_common_patterns(_common_patterns)
+  cmake_check_source_compiles(${_lang}
+    "${_lang_src}"
+    ${_var}
+    ${_lang_fail_regex}
+    ${_common_patterns}
+    )
+
+  foreach(v IN LISTS _locale_vars)
+    set(ENV{${v}} ${_locale_vars_saved_${v}})
+  endforeach()
+endfunction ()
+
+cmake_policy(POP)
diff --git a/share/cmake-3.22/Modules/Internal/CheckSourceCompiles.cmake b/share/cmake-3.22/Modules/Internal/CheckSourceCompiles.cmake
new file mode 100644
index 0000000..8c3a418
--- /dev/null
+++ b/share/cmake-3.22/Modules/Internal/CheckSourceCompiles.cmake
@@ -0,0 +1,130 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+include_guard(GLOBAL)
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0054 NEW) # if() quoted variables not dereferenced
+cmake_policy(SET CMP0057 NEW) # if() supports IN_LIST
+
+function(CMAKE_CHECK_SOURCE_COMPILES _lang _source _var)
+  if(NOT DEFINED "${_var}")
+
+    if(_lang STREQUAL "C")
+      set(_lang_textual "C")
+      set(_lang_ext "c")
+    elseif(_lang STREQUAL "CXX")
+      set(_lang_textual "C++")
+      set(_lang_ext "cxx")
+    elseif(_lang STREQUAL "CUDA")
+      set(_lang_textual "CUDA")
+      set(_lang_ext "cu")
+    elseif(_lang STREQUAL "Fortran")
+      set(_lang_textual "Fortran")
+      set(_lang_ext "F90")
+    elseif(_lang STREQUAL "HIP")
+      set(_lang_textual "HIP")
+      set(_lang_ext "hip")
+    elseif(_lang STREQUAL "ISPC")
+      set(_lang_textual "ISPC")
+      set(_lang_ext "ispc")
+    elseif(_lang STREQUAL "OBJC")
+      set(_lang_textual "Objective-C")
+      set(_lang_ext "m")
+    elseif(_lang STREQUAL "OBJCXX")
+      set(_lang_textual "Objective-C++")
+      set(_lang_ext "mm")
+    else()
+      message (SEND_ERROR "check_source_compiles: ${_lang}: unknown language.")
+      return()
+    endif()
+
+    get_property (_supported_languages GLOBAL PROPERTY ENABLED_LANGUAGES)
+    if (NOT _lang IN_LIST _supported_languages)
+      message (SEND_ERROR "check_source_compiles: ${_lang}: needs to be enabled before use.")
+      return()
+    endif()
+
+    set(_FAIL_REGEX)
+    set(_SRC_EXT)
+    set(_key)
+    foreach(arg ${ARGN})
+      if("${arg}" MATCHES "^(FAIL_REGEX|SRC_EXT)$")
+        set(_key "${arg}")
+      elseif(_key STREQUAL "FAIL_REGEX")
+        list(APPEND _FAIL_REGEX "${arg}")
+      elseif(_key STREQUAL "SRC_EXT")
+        set(_SRC_EXT "${arg}")
+        set(_key "")
+      else()
+        message(FATAL_ERROR "Unknown argument:\n  ${arg}\n")
+      endif()
+    endforeach()
+
+    if(NOT _SRC_EXT)
+      set(_SRC_EXT ${_lang_ext})
+    endif()
+
+    if(CMAKE_REQUIRED_LINK_OPTIONS)
+      set(CHECK_${LANG}_SOURCE_COMPILES_ADD_LINK_OPTIONS
+        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
+    else()
+      set(CHECK_${LANG}_SOURCE_COMPILES_ADD_LINK_OPTIONS)
+    endif()
+    if(CMAKE_REQUIRED_LIBRARIES)
+      set(CHECK_${LANG}_SOURCE_COMPILES_ADD_LIBRARIES
+        LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
+    else()
+      set(CHECK_${LANG}_SOURCE_COMPILES_ADD_LIBRARIES)
+    endif()
+    if(CMAKE_REQUIRED_INCLUDES)
+      set(CHECK_${LANG}_SOURCE_COMPILES_ADD_INCLUDES
+        "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
+    else()
+      set(CHECK_${LANG}_SOURCE_COMPILES_ADD_INCLUDES)
+    endif()
+    file(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.${_SRC_EXT}"
+      "${_source}\n")
+
+    if(NOT CMAKE_REQUIRED_QUIET)
+      message(CHECK_START "Performing Test ${_var}")
+    endif()
+    try_compile(${_var}
+      ${CMAKE_BINARY_DIR}
+      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.${_SRC_EXT}
+      COMPILE_DEFINITIONS -D${_var} ${CMAKE_REQUIRED_DEFINITIONS}
+      ${CHECK_${LANG}_SOURCE_COMPILES_ADD_LINK_OPTIONS}
+      ${CHECK_${LANG}_SOURCE_COMPILES_ADD_LIBRARIES}
+      CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS}
+      "${CHECK_${LANG}_SOURCE_COMPILES_ADD_INCLUDES}"
+      OUTPUT_VARIABLE OUTPUT)
+
+    foreach(_regex ${_FAIL_REGEX})
+      if("${OUTPUT}" MATCHES "${_regex}")
+        set(${_var} 0)
+      endif()
+    endforeach()
+
+    if(${_var})
+      set(${_var} 1 CACHE INTERNAL "Test ${_var}")
+      if(NOT CMAKE_REQUIRED_QUIET)
+        message(CHECK_PASS "Success")
+      endif()
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+        "Performing ${_lang_textual} SOURCE FILE Test ${_var} succeeded with the following output:\n"
+        "${OUTPUT}\n"
+        "Source file was:\n${_source}\n")
+    else()
+      if(NOT CMAKE_REQUIRED_QUIET)
+        message(CHECK_FAIL "Failed")
+      endif()
+      set(${_var} "" CACHE INTERNAL "Test ${_var}")
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+        "Performing ${_lang_textual} SOURCE FILE Test ${_var} failed with the following output:\n"
+        "${OUTPUT}\n"
+        "Source file was:\n${_source}\n")
+    endif()
+  endif()
+endfunction()
+
+cmake_policy(POP)
diff --git a/share/cmake-3.22/Modules/Internal/CheckSourceRuns.cmake b/share/cmake-3.22/Modules/Internal/CheckSourceRuns.cmake
new file mode 100644
index 0000000..75e9896
--- /dev/null
+++ b/share/cmake-3.22/Modules/Internal/CheckSourceRuns.cmake
@@ -0,0 +1,145 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+include_guard(GLOBAL)
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0054 NEW) # if() quoted variables not dereferenced
+cmake_policy(SET CMP0057 NEW) # if() supports IN_LIST
+
+function(CMAKE_CHECK_SOURCE_RUNS _lang _source _var)
+  if(NOT DEFINED "${_var}")
+
+    if(_lang STREQUAL "C")
+      set(_lang_textual "C")
+      set(_lang_ext "c")
+    elseif(_lang STREQUAL "CXX")
+      set(_lang_textual "C++")
+      set(_lang_ext "cxx")
+    elseif(_lang STREQUAL "CUDA")
+      set(_lang_textual "CUDA")
+      set(_lang_ext "cu")
+    elseif(_lang STREQUAL "Fortran")
+      set(_lang_textual "Fortran")
+      set(_lang_ext "F90")
+    elseif(_lang STREQUAL "HIP")
+      set(_lang_textual "HIP")
+      set(_lang_ext "hip")
+    elseif(_lang STREQUAL "OBJC")
+      set(_lang_textual "Objective-C")
+      set(_lang_ext "m")
+    elseif(_lang STREQUAL "OBJCXX")
+      set(_lang_textual "Objective-C++")
+      set(_lang_ext "mm")
+    else()
+      message (SEND_ERROR "check_source_runs: ${_lang}: unknown language.")
+      return()
+    endif()
+
+    get_property (_supported_languages GLOBAL PROPERTY ENABLED_LANGUAGES)
+    if (NOT _lang IN_LIST _supported_languages)
+      message (SEND_ERROR "check_source_runs: ${_lang}: needs to be enabled before use.")
+      return()
+    endif()
+
+    set(_FAIL_REGEX)
+    set(_SRC_EXT)
+    set(_key)
+    foreach(arg ${ARGN})
+      if("${arg}" MATCHES "^(FAIL_REGEX|SRC_EXT)$")
+        set(_key "${arg}")
+      elseif(_key STREQUAL "FAIL_REGEX")
+        list(APPEND _FAIL_REGEX "${arg}")
+      elseif(_key STREQUAL "SRC_EXT")
+        set(_SRC_EXT "${arg}")
+        set(_key "")
+      else()
+        set(message_type FATAL_ERROR)
+        if (_CheckSourceRuns_old_signature)
+          set(message_type AUTHOR_WARNING)
+        endif ()
+        message("${message_type}" "Unknown argument:\n  ${arg}\n")
+        unset(message_type)
+      endif()
+    endforeach()
+
+    if(NOT _SRC_EXT)
+      set(_SRC_EXT ${_lang_ext})
+    endif()
+
+    if(CMAKE_REQUIRED_LINK_OPTIONS)
+      set(CHECK_${_lang}_SOURCE_COMPILES_ADD_LINK_OPTIONS
+        LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
+    else()
+      set(CHECK_${_lang}_SOURCE_COMPILES_ADD_LINK_OPTIONS)
+    endif()
+    if(CMAKE_REQUIRED_LIBRARIES)
+      set(CHECK_${_lang}_SOURCE_COMPILES_ADD_LIBRARIES
+        LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
+    else()
+      set(CHECK_${_lang}_SOURCE_COMPILES_ADD_LIBRARIES)
+    endif()
+    if(CMAKE_REQUIRED_INCLUDES)
+      set(CHECK_${_lang}_SOURCE_COMPILES_ADD_INCLUDES
+        "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
+    else()
+      set(CHECK_${_lang}_SOURCE_COMPILES_ADD_INCLUDES)
+    endif()
+    file(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.${_SRC_EXT}"
+      "${_source}\n")
+
+    if(NOT CMAKE_REQUIRED_QUIET)
+      message(CHECK_START "Performing Test ${_var}")
+    endif()
+    try_run(${_var}_EXITCODE ${_var}_COMPILED
+      ${CMAKE_BINARY_DIR}
+      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.${_SRC_EXT}
+      COMPILE_DEFINITIONS -D${_var} ${CMAKE_REQUIRED_DEFINITIONS}
+      ${CHECK_${_lang}_SOURCE_COMPILES_ADD_LINK_OPTIONS}
+      ${CHECK_${_lang}_SOURCE_COMPILES_ADD_LIBRARIES}
+      CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS}
+      -DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH}
+      "${CHECK_${_lang}_SOURCE_COMPILES_ADD_INCLUDES}"
+      COMPILE_OUTPUT_VARIABLE OUTPUT
+      RUN_OUTPUT_VARIABLE RUN_OUTPUT)
+    # if it did not compile make the return value fail code of 1
+    if(NOT ${_var}_COMPILED)
+      set(${_var}_EXITCODE 1)
+      set(${_var}_EXITCODE 1 PARENT_SCOPE)
+    endif()
+    # if the return value was 0 then it worked
+    if("${${_var}_EXITCODE}" EQUAL 0)
+      set(${_var} 1 CACHE INTERNAL "Test ${_var}")
+      if(NOT CMAKE_REQUIRED_QUIET)
+        message(CHECK_PASS "Success")
+      endif()
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+        "Performing ${_lang_textual} SOURCE FILE Test ${_var} succeeded with the following compile output:\n"
+        "${OUTPUT}\n"
+        "...and run output:\n"
+        "${RUN_OUTPUT}\n"
+        "Return value: ${${_var}}\n"
+        "Source file was:\n${_source}\n")
+    else()
+      if(CMAKE_CROSSCOMPILING AND "${${_var}_EXITCODE}" MATCHES  "FAILED_TO_RUN")
+        set(${_var} "${${_var}_EXITCODE}" PARENT_SCOPE)
+      else()
+        set(${_var} "" CACHE INTERNAL "Test ${_var}")
+      endif()
+
+      if(NOT CMAKE_REQUIRED_QUIET)
+        message(CHECK_FAIL "Failed")
+      endif()
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+        "Performing ${_lang_textual} SOURCE FILE Test ${_var} failed with the following compile output:\n"
+        "${OUTPUT}\n"
+        "...and run output:\n"
+        "${RUN_OUTPUT}\n"
+        "Return value: ${${_var}_EXITCODE}\n"
+        "Source file was:\n${_source}\n")
+
+    endif()
+  endif()
+endfunction()
+
+cmake_policy(POP)
diff --git a/share/cmake-3.22/Modules/Internal/FeatureTesting.cmake b/share/cmake-3.22/Modules/Internal/FeatureTesting.cmake
new file mode 100644
index 0000000..b6f3c09
--- /dev/null
+++ b/share/cmake-3.22/Modules/Internal/FeatureTesting.cmake
@@ -0,0 +1,133 @@
+
+macro(_record_compiler_features lang compile_flags feature_list)
+  include("${CMAKE_ROOT}/Modules/Compiler/${CMAKE_${lang}_COMPILER_ID}-${lang}-FeatureTests.cmake" OPTIONAL)
+
+  string(TOLOWER ${lang} lang_lc)
+  file(REMOVE "${CMAKE_BINARY_DIR}/CMakeFiles/feature_tests.bin")
+  file(WRITE "${CMAKE_BINARY_DIR}/CMakeFiles/feature_tests.${lang_lc}" "
+  const char features[] = {\"\\n\"\n")
+
+  get_property(known_features GLOBAL PROPERTY CMAKE_${lang}_KNOWN_FEATURES)
+
+  foreach(feature ${known_features})
+    if (_cmake_feature_test_${feature})
+      if (${_cmake_feature_test_${feature}} STREQUAL 1)
+        set(_feature_condition "\"1\" ")
+      else()
+        set(_feature_condition "#if ${_cmake_feature_test_${feature}}\n\"1\"\n#else\n\"0\"\n#endif\n")
+      endif()
+      file(APPEND "${CMAKE_BINARY_DIR}/CMakeFiles/feature_tests.${lang_lc}" "\"${lang}_FEATURE:\"\n${_feature_condition}\"${feature}\\n\"\n")
+    endif()
+  endforeach()
+  file(APPEND "${CMAKE_BINARY_DIR}/CMakeFiles/feature_tests.${lang_lc}"
+    "\n};\n\nint main(int argc, char** argv) { (void)argv; return features[argc]; }\n")
+
+  if(CMAKE_${lang}_LINK_WITH_STANDARD_COMPILE_OPTION)
+    # This toolchain requires use of the language standard flag
+    # when linking in order to use the matching standard library.
+    set(compile_flags_for_link "${compile_flags}")
+  else()
+    set(compile_flags_for_link "")
+  endif()
+
+  try_compile(CMAKE_${lang}_FEATURE_TEST
+    ${CMAKE_BINARY_DIR} "${CMAKE_BINARY_DIR}/CMakeFiles/feature_tests.${lang_lc}"
+    COMPILE_DEFINITIONS "${compile_flags}"
+    LINK_LIBRARIES "${compile_flags_for_link}"
+    OUTPUT_VARIABLE _output
+    COPY_FILE "${CMAKE_BINARY_DIR}/CMakeFiles/feature_tests.bin"
+    COPY_FILE_ERROR _copy_error
+    )
+  if(CMAKE_${lang}_FEATURE_TEST AND NOT _copy_error)
+    set(_result 0)
+  else()
+    set(_result 255)
+  endif()
+  unset(CMAKE_${lang}_FEATURE_TEST CACHE)
+  unset(compile_flags_for_link)
+
+  if (_result EQUAL 0)
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+      "\n\nDetecting ${lang} [${compile_flags}] compiler features compiled with the following output:\n${_output}\n\n")
+    if(EXISTS "${CMAKE_BINARY_DIR}/CMakeFiles/feature_tests.bin")
+      file(STRINGS "${CMAKE_BINARY_DIR}/CMakeFiles/feature_tests.bin"
+        features REGEX "${lang}_FEATURE:.*")
+      foreach(info ${features})
+        file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+          "    Feature record: ${info}\n")
+        string(REPLACE "${lang}_FEATURE:" "" info ${info})
+        string(SUBSTRING ${info} 0 1 has_feature)
+        if(has_feature)
+          string(REGEX REPLACE "^1" "" feature ${info})
+          list(APPEND ${feature_list} ${feature})
+        endif()
+      endforeach()
+    endif()
+  else()
+    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+      "Detecting ${lang} [${compile_flags}] compiler features failed to compile with the following output:\n${_output}\n${_copy_error}\n\n")
+  endif()
+endmacro()
+
+macro(_record_compiler_features_c std)
+  list(APPEND CMAKE_C${std}_COMPILE_FEATURES c_std_${std})
+
+  get_property(lang_level_has_features GLOBAL PROPERTY CMAKE_C${std}_KNOWN_FEATURES)
+  if(lang_level_has_features)
+    _record_compiler_features(C "${CMAKE_C${std}_STANDARD_COMPILE_OPTION}" CMAKE_C${std}_COMPILE_FEATURES)
+  endif()
+  unset(lang_level_has_features)
+endmacro()
+
+macro(_record_compiler_features_cxx std)
+  list(APPEND CMAKE_CXX${std}_COMPILE_FEATURES cxx_std_${std})
+
+  get_property(lang_level_has_features GLOBAL PROPERTY CMAKE_CXX${std}_KNOWN_FEATURES)
+  if(lang_level_has_features)
+    _record_compiler_features(CXX "${CMAKE_CXX${std}_STANDARD_COMPILE_OPTION}" CMAKE_CXX${std}_COMPILE_FEATURES)
+  endif()
+  unset(lang_level_has_features)
+endmacro()
+
+macro(_record_compiler_features_cuda std)
+  list(APPEND CMAKE_CUDA${std}_COMPILE_FEATURES cuda_std_${std})
+
+  get_property(lang_level_has_features GLOBAL PROPERTY CMAKE_CUDA${std}_KNOWN_FEATURES)
+  if(lang_level_has_features)
+    _record_compiler_features(CUDA "${CMAKE_CUDA${std}_STANDARD_COMPILE_OPTION}" CMAKE_CUDA${std}_COMPILE_FEATURES)
+  endif()
+  unset(lang_level_has_features)
+endmacro()
+
+macro(_record_compiler_features_hip std)
+  list(APPEND CMAKE_HIP${std}_COMPILE_FEATURES hip_std_${std})
+
+  get_property(lang_level_has_features GLOBAL PROPERTY CMAKE_HIP${std}_KNOWN_FEATURES)
+  if(lang_level_has_features)
+    _record_compiler_features(HIP "${CMAKE_HIP${std}_STANDARD_COMPILE_OPTION}" CMAKE_HIP${std}_COMPILE_FEATURES)
+  endif()
+  unset(lang_level_has_features)
+endmacro()
+
+macro(_has_compiler_features lang level compile_flags feature_list)
+  # presume all known features are supported
+  get_property(known_features GLOBAL PROPERTY CMAKE_${lang}${level}_KNOWN_FEATURES)
+  list(APPEND ${feature_list} ${known_features})
+endmacro()
+
+macro(_has_compiler_features_c std)
+  list(APPEND CMAKE_C${std}_COMPILE_FEATURES c_std_${std})
+  _has_compiler_features(C ${std} "${CMAKE_C${std}_STANDARD_COMPILE_OPTION}" CMAKE_C${std}_COMPILE_FEATURES)
+endmacro()
+macro(_has_compiler_features_cxx std)
+  list(APPEND CMAKE_CXX${std}_COMPILE_FEATURES cxx_std_${std})
+  _has_compiler_features(CXX ${std} "${CMAKE_CXX${std}_STANDARD_COMPILE_OPTION}" CMAKE_CXX${std}_COMPILE_FEATURES)
+endmacro()
+macro(_has_compiler_features_cuda std)
+  list(APPEND CMAKE_CUDA${std}_COMPILE_FEATURES cuda_std_${std})
+  _has_compiler_features(CUDA ${std} "${CMAKE_CUDA${std}_STANDARD_COMPILE_OPTION}" CMAKE_CUDA${std}_COMPILE_FEATURES)
+endmacro()
+macro(_has_compiler_features_hip std)
+  list(APPEND CMAKE_HIP${std}_COMPILE_FEATURES hip_std_${std})
+  _has_compiler_features(HIP ${std} "${CMAKE_HIP${std}_STANDARD_COMPILE_OPTION}" CMAKE_HIP${std}_COMPILE_FEATURES)
+endmacro()
diff --git a/share/cmake-3.22/Modules/Internal/OSRelease/010-TryOldCentOS.cmake b/share/cmake-3.22/Modules/Internal/OSRelease/010-TryOldCentOS.cmake
new file mode 100644
index 0000000..ff35897
--- /dev/null
+++ b/share/cmake-3.22/Modules/Internal/OSRelease/010-TryOldCentOS.cmake
@@ -0,0 +1,41 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+# Author: Alex Turbov
+
+if(NOT EXISTS "${CMAKE_SYSROOT}/etc/centos-release")
+  return()
+endif()
+
+# Get the first string only
+file(
+    STRINGS "${CMAKE_SYSROOT}/etc/centos-release" CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT
+    LIMIT_COUNT 1
+  )
+
+#
+# Example:
+#   CentOS release 6.10 (Final)
+#
+if(CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT MATCHES "CentOS release ([0-9\.]+) .*")
+
+  set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_NAME CentOS)
+  set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_PRETTY_NAME "${CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT}")
+  set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_ID centos)
+  set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_ID_LIKE rhel)
+  set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION ${CMAKE_MATCH_1})
+  set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION_ID ${CMAKE_MATCH_1})
+
+  list(
+      APPEND CMAKE_GET_OS_RELEASE_FALLBACK_RESULT
+      CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_NAME
+      CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_PRETTY_NAME
+      CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_ID
+      CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_ID_LIKE
+      CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION
+      CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION_ID
+    )
+
+endif()
+
+unset(CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT)
diff --git a/share/cmake-3.22/Modules/Internal/OSRelease/020-TryDebianVersion.cmake b/share/cmake-3.22/Modules/Internal/OSRelease/020-TryDebianVersion.cmake
new file mode 100644
index 0000000..8ebe19a
--- /dev/null
+++ b/share/cmake-3.22/Modules/Internal/OSRelease/020-TryDebianVersion.cmake
@@ -0,0 +1,38 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+# Author: Alex Turbov
+
+if(NOT EXISTS "${CMAKE_SYSROOT}/etc/debian_version")
+  return()
+endif()
+
+# Get the first string only
+file(
+    STRINGS "${CMAKE_SYSROOT}/etc/debian_version" CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT
+    LIMIT_COUNT 1
+  )
+
+#
+# Example:
+#   6.0.10          # Old debian
+#   wheezy/sid      # Ubuntu
+#
+if(CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT MATCHES "[0-9]+(\.[0-9]+)*")
+
+  set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_NAME Debian)
+  set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_ID debian)
+  set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION ${CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT})
+  set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION_ID ${CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT})
+
+  list(
+      APPEND CMAKE_GET_OS_RELEASE_FALLBACK_RESULT
+      CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_NAME
+      CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_ID
+      CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION
+      CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION_ID
+    )
+
+endif()
+
+unset(CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT)
diff --git a/share/cmake-3.18/Modules/KDE3Macros.cmake b/share/cmake-3.22/Modules/KDE3Macros.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/KDE3Macros.cmake
rename to share/cmake-3.22/Modules/KDE3Macros.cmake
diff --git a/share/cmake-3.18/Modules/MacOSXBundleInfo.plist.in b/share/cmake-3.22/Modules/MacOSXBundleInfo.plist.in
similarity index 100%
rename from share/cmake-3.18/Modules/MacOSXBundleInfo.plist.in
rename to share/cmake-3.22/Modules/MacOSXBundleInfo.plist.in
diff --git a/share/cmake-3.18/Modules/MacOSXFrameworkInfo.plist.in b/share/cmake-3.22/Modules/MacOSXFrameworkInfo.plist.in
similarity index 100%
rename from share/cmake-3.18/Modules/MacOSXFrameworkInfo.plist.in
rename to share/cmake-3.22/Modules/MacOSXFrameworkInfo.plist.in
diff --git a/share/cmake-3.22/Modules/MacroAddFileDependencies.cmake b/share/cmake-3.22/Modules/MacroAddFileDependencies.cmake
new file mode 100644
index 0000000..8fdc264
--- /dev/null
+++ b/share/cmake-3.22/Modules/MacroAddFileDependencies.cmake
@@ -0,0 +1,29 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+MacroAddFileDependencies
+------------------------
+
+.. deprecated:: 3.14
+
+::
+
+  MACRO_ADD_FILE_DEPENDENCIES(<source> <files>...)
+
+Do not use this command in new code.  It is just a wrapper around:
+
+.. code-block:: cmake
+
+  set_property(SOURCE <source> APPEND PROPERTY OBJECT_DEPENDS <files>...)
+
+Instead use the :command:`set_property` command to append to the
+:prop_sf:`OBJECT_DEPENDS` source file property directly.
+
+#]=======================================================================]
+
+macro (MACRO_ADD_FILE_DEPENDENCIES _file)
+
+  set_property(SOURCE "${_file}" APPEND PROPERTY OBJECT_DEPENDS "${ARGN}")
+
+endmacro ()
diff --git a/share/cmake-3.18/Modules/MatlabTestsRedirect.cmake b/share/cmake-3.22/Modules/MatlabTestsRedirect.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/MatlabTestsRedirect.cmake
rename to share/cmake-3.22/Modules/MatlabTestsRedirect.cmake
diff --git a/share/cmake-3.18/Modules/Platform/AIX-Clang-C.cmake b/share/cmake-3.22/Modules/Platform/AIX-Clang-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/AIX-Clang-C.cmake
rename to share/cmake-3.22/Modules/Platform/AIX-Clang-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/AIX-Clang-CXX.cmake b/share/cmake-3.22/Modules/Platform/AIX-Clang-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/AIX-Clang-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/AIX-Clang-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/AIX-GNU-ASM.cmake b/share/cmake-3.22/Modules/Platform/AIX-GNU-ASM.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/AIX-GNU-ASM.cmake
rename to share/cmake-3.22/Modules/Platform/AIX-GNU-ASM.cmake
diff --git a/share/cmake-3.18/Modules/Platform/AIX-GNU-C.cmake b/share/cmake-3.22/Modules/Platform/AIX-GNU-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/AIX-GNU-C.cmake
rename to share/cmake-3.22/Modules/Platform/AIX-GNU-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/AIX-GNU-CXX.cmake b/share/cmake-3.22/Modules/Platform/AIX-GNU-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/AIX-GNU-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/AIX-GNU-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/AIX-GNU-Fortran.cmake b/share/cmake-3.22/Modules/Platform/AIX-GNU-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/AIX-GNU-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/AIX-GNU-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Platform/AIX-GNU.cmake b/share/cmake-3.22/Modules/Platform/AIX-GNU.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/AIX-GNU.cmake
rename to share/cmake-3.22/Modules/Platform/AIX-GNU.cmake
diff --git a/share/cmake-3.18/Modules/Platform/AIX-VisualAge-C.cmake b/share/cmake-3.22/Modules/Platform/AIX-VisualAge-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/AIX-VisualAge-C.cmake
rename to share/cmake-3.22/Modules/Platform/AIX-VisualAge-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/AIX-VisualAge-CXX.cmake b/share/cmake-3.22/Modules/Platform/AIX-VisualAge-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/AIX-VisualAge-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/AIX-VisualAge-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/AIX-VisualAge-Fortran.cmake b/share/cmake-3.22/Modules/Platform/AIX-VisualAge-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/AIX-VisualAge-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/AIX-VisualAge-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Platform/AIX-XL-ASM.cmake b/share/cmake-3.22/Modules/Platform/AIX-XL-ASM.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/AIX-XL-ASM.cmake
rename to share/cmake-3.22/Modules/Platform/AIX-XL-ASM.cmake
diff --git a/share/cmake-3.18/Modules/Platform/AIX-XL-C.cmake b/share/cmake-3.22/Modules/Platform/AIX-XL-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/AIX-XL-C.cmake
rename to share/cmake-3.22/Modules/Platform/AIX-XL-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/AIX-XL-CXX.cmake b/share/cmake-3.22/Modules/Platform/AIX-XL-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/AIX-XL-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/AIX-XL-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/AIX-XL-Fortran.cmake b/share/cmake-3.22/Modules/Platform/AIX-XL-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/AIX-XL-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/AIX-XL-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Platform/AIX-XL.cmake b/share/cmake-3.22/Modules/Platform/AIX-XL.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/AIX-XL.cmake
rename to share/cmake-3.22/Modules/Platform/AIX-XL.cmake
diff --git a/share/cmake-3.18/Modules/Platform/AIX-XLClang-C.cmake b/share/cmake-3.22/Modules/Platform/AIX-XLClang-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/AIX-XLClang-C.cmake
rename to share/cmake-3.22/Modules/Platform/AIX-XLClang-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/AIX-XLClang-CXX.cmake b/share/cmake-3.22/Modules/Platform/AIX-XLClang-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/AIX-XLClang-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/AIX-XLClang-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/AIX-XLClang.cmake b/share/cmake-3.22/Modules/Platform/AIX-XLClang.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/AIX-XLClang.cmake
rename to share/cmake-3.22/Modules/Platform/AIX-XLClang.cmake
diff --git a/share/cmake-3.18/Modules/Platform/AIX.cmake b/share/cmake-3.22/Modules/Platform/AIX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/AIX.cmake
rename to share/cmake-3.22/Modules/Platform/AIX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/AIX/ExportImportList b/share/cmake-3.22/Modules/Platform/AIX/ExportImportList
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/AIX/ExportImportList
rename to share/cmake-3.22/Modules/Platform/AIX/ExportImportList
diff --git a/share/cmake-3.22/Modules/Platform/ARTOS-GNU-C.cmake b/share/cmake-3.22/Modules/Platform/ARTOS-GNU-C.cmake
new file mode 100644
index 0000000..bce4613
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/ARTOS-GNU-C.cmake
@@ -0,0 +1,9 @@
+# Define ARTOS to select proper behavior and tell preprocessor to accept C++ style comments.
+string(APPEND CMAKE_C_FLAGS_INIT " -DARTOS -Xp -+")
+# ac doesn't support -g properly and doesn't support the normal gcc optimization options. Just use the defaults set by ac.
+string(APPEND CMAKE_C_FLAGS_DEBUG_INIT " ")
+string(APPEND CMAKE_C_FLAGS_MINSIZEREL_INIT " -DNDEBUG")
+string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " -DNDEBUG")
+string(APPEND CMAKE_C_FLAGS_RELWITHDEBINFO_INIT " -DNDEBUG")
+# Most projects expect the stdio functions to be available.
+set(CMAKE_C_STANDARD_LIBRARIES_INIT "stdio.a")
diff --git a/share/cmake-3.18/Modules/Platform/ARTOS.cmake b/share/cmake-3.22/Modules/Platform/ARTOS.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/ARTOS.cmake
rename to share/cmake-3.22/Modules/Platform/ARTOS.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android-Clang-ASM.cmake b/share/cmake-3.22/Modules/Platform/Android-Clang-ASM.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android-Clang-ASM.cmake
rename to share/cmake-3.22/Modules/Platform/Android-Clang-ASM.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android-Clang-C.cmake b/share/cmake-3.22/Modules/Platform/Android-Clang-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android-Clang-C.cmake
rename to share/cmake-3.22/Modules/Platform/Android-Clang-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android-Clang-CXX.cmake b/share/cmake-3.22/Modules/Platform/Android-Clang-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android-Clang-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/Android-Clang-CXX.cmake
diff --git a/share/cmake-3.22/Modules/Platform/Android-Clang.cmake b/share/cmake-3.22/Modules/Platform/Android-Clang.cmake
new file mode 100644
index 0000000..3a279ca
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Android-Clang.cmake
@@ -0,0 +1,91 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+# This module is shared by multiple languages; use include blocker.
+if(__ANDROID_COMPILER_CLANG)
+  return()
+endif()
+set(__ANDROID_COMPILER_CLANG 1)
+
+# Include the NDK hook.
+# It can be used by NDK to inject necessary fixes for an earlier cmake.
+if(CMAKE_ANDROID_NDK)
+  include(${CMAKE_ANDROID_NDK}/build/cmake/hooks/pre/Android-Clang.cmake OPTIONAL)
+endif()
+
+# Load flags from NDK. This file may provides the following variables:
+#   _ANDROID_NDK_INIT_CFLAGS
+#   _ANDROID_NDK_INIT_CFLAGS_DEBUG
+#   _ANDROID_NDK_INIT_CFLAGS_RELEASE
+#   _ANDROID_NDK_INIT_LDFLAGS
+#   _ANDROID_NDK_INIT_LDFLAGS_EXE
+if(CMAKE_ANDROID_NDK)
+  include(${CMAKE_ANDROID_NDK}/build/cmake/flags.cmake OPTIONAL
+          RESULT_VARIABLE _INCLUDED_FLAGS)
+endif()
+
+# Support for NVIDIA Nsight Tegra Visual Studio Edition was previously
+# implemented in the CMake VS IDE generators.  Avoid interfering with
+# that functionality for now.  Later we may try to integrate this.
+if(CMAKE_VS_PLATFORM_NAME STREQUAL "Tegra-Android")
+  macro(__android_compiler_clang lang)
+  endmacro()
+  return()
+endif()
+
+# Commonly used Android toolchain files that pre-date CMake upstream support
+# set CMAKE_SYSTEM_VERSION to 1.  Avoid interfering with them.
+if(CMAKE_SYSTEM_VERSION EQUAL 1)
+  macro(__android_compiler_clang lang)
+  endmacro()
+  return()
+endif()
+
+# Natively compiling on an Android host doesn't use the NDK cross-compilation
+# tools.
+if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Android")
+  macro(__android_compiler_clang lang)
+  endmacro()
+  return()
+endif()
+
+include(Platform/Android-Common)
+
+if(_INCLUDED_FLAGS)
+  # NDK provides the flags.
+  set(_ANDROID_ABI_INIT_CFLAGS "${_ANDROID_NDK_INIT_CFLAGS}")
+  set(_ANDROID_ABI_INIT_CFLAGS_DEBUG "${_ANDROID_NDK_INIT_CFLAGS_DEBUG}")
+  set(_ANDROID_ABI_INIT_CFLAGS_RELEASE "${_ANDROID_NDK_INIT_CFLAGS_RELEASE}")
+  set(_ANDROID_ABI_INIT_LDFLAGS "${_ANDROID_NDK_INIT_LDFLAGS}")
+  set(_ANDROID_ABI_INIT_EXE_LDFLAGS "${_ANDROID_NDK_INIT_LDFLAGS_EXE}")
+else()
+  # The NDK toolchain configuration files at:
+  #
+  #   <ndk>/[build/core/]toolchains/*-clang*/setup.mk
+  #
+  # contain logic to set LLVM_TRIPLE for Clang-based toolchains for each target.
+  # We need to produce the same target here to produce compatible binaries.
+  include(Platform/Android/abi-${CMAKE_ANDROID_ARCH_ABI}-Clang)
+endif()
+
+macro(__android_compiler_clang lang)
+  if(NOT "x${lang}" STREQUAL "xASM")
+    __android_compiler_common(${lang})
+  endif()
+  if(NOT CMAKE_${lang}_COMPILER_TARGET)
+    set(CMAKE_${lang}_COMPILER_TARGET "${CMAKE_ANDROID_ARCH_LLVM_TRIPLE}")
+    if(CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED)
+      string(APPEND CMAKE_${lang}_COMPILER_TARGET "${CMAKE_SYSTEM_VERSION}")
+    endif()
+    list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "--target=${CMAKE_${lang}_COMPILER_TARGET}")
+  endif()
+  if(CMAKE_GENERATOR MATCHES "Visual Studio")
+    set(_ANDROID_STL_NOSTDLIBXX 1)
+  endif()
+endmacro()
+
+# Include the NDK hook.
+# It can be used by NDK to inject necessary fixes for an earlier cmake.
+if(CMAKE_ANDROID_NDK)
+  include(${CMAKE_ANDROID_NDK}/build/cmake/hooks/post/Android-Clang.cmake OPTIONAL)
+endif()
diff --git a/share/cmake-3.22/Modules/Platform/Android-Common.cmake b/share/cmake-3.22/Modules/Platform/Android-Common.cmake
new file mode 100644
index 0000000..f1deaca
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Android-Common.cmake
@@ -0,0 +1,230 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+# This module is shared by multiple languages; use include blocker.
+if(__ANDROID_COMPILER_COMMON)
+  return()
+endif()
+set(__ANDROID_COMPILER_COMMON 1)
+
+if(CMAKE_ANDROID_NDK)
+  # <ndk>/build/core/definitions.mk
+
+  set(_ANDROID_STL_TYPES
+    none
+    system
+    c++_static
+    c++_shared
+    gabi++_static
+    gabi++_shared
+    gnustl_static
+    gnustl_shared
+    stlport_static
+    stlport_shared
+    )
+
+  if(CMAKE_ANDROID_STL_TYPE)
+    list(FIND _ANDROID_STL_TYPES "${CMAKE_ANDROID_STL_TYPE}" _ANDROID_STL_TYPE_FOUND)
+    if(_ANDROID_STL_TYPE_FOUND EQUAL -1)
+      string(REPLACE ";" "\n  " _msg ";${_ANDROID_STL_TYPES}")
+      message(FATAL_ERROR
+        "The CMAKE_ANDROID_STL_TYPE '${CMAKE_ANDROID_STL_TYPE}' is not one of the allowed values:${_msg}\n"
+        )
+    endif()
+    unset(_ANDROID_STL_TYPE_FOUND)
+  elseif(IS_DIRECTORY ${CMAKE_ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++)
+    set(CMAKE_ANDROID_STL_TYPE "gnustl_static")
+  else()
+    set(CMAKE_ANDROID_STL_TYPE "c++_static")
+  endif()
+
+  unset(_ANDROID_STL_TYPES)
+
+  # Forward Android-specific platform variables to try_compile projects.
+  list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
+    CMAKE_ANDROID_STL_TYPE
+    )
+endif()
+
+if(CMAKE_ANDROID_STL_TYPE)
+  if(CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED)
+    if(CMAKE_ANDROID_STL_TYPE STREQUAL "system")
+      set(_ANDROID_STL_EXCEPTIONS 0)
+      set(_ANDROID_STL_RTTI 0)
+      macro(__android_stl lang)
+        string(APPEND CMAKE_${lang}_FLAGS_INIT " -stdlib=libstdc++")
+        if(_ANDROID_STL_EXCEPTIONS OR _ANDROID_STL_RTTI)
+          string(APPEND CMAKE_${lang}_STANDARD_LIBRARIES " -lc++abi")
+          if(CMAKE_SYSTEM_VERSION LESS 21)
+            string(APPEND CMAKE_${lang}_STANDARD_LIBRARIES " -landroid_support")
+          endif()
+        endif()
+      endmacro()
+    elseif(CMAKE_ANDROID_STL_TYPE STREQUAL "c++_static")
+      set(_ANDROID_STL_EXCEPTIONS 1)
+      set(_ANDROID_STL_RTTI 1)
+      macro(__android_stl lang)
+        string(APPEND CMAKE_${lang}_FLAGS_INIT " -stdlib=libc++")
+        string(APPEND CMAKE_${lang}_STANDARD_LIBRARIES " -static-libstdc++")
+      endmacro()
+    elseif(CMAKE_ANDROID_STL_TYPE STREQUAL "c++_shared")
+      set(_ANDROID_STL_EXCEPTIONS 1)
+      set(_ANDROID_STL_RTTI 1)
+      macro(__android_stl lang)
+        string(APPEND CMAKE_${lang}_FLAGS_INIT " -stdlib=libc++")
+      endmacro()
+    elseif(CMAKE_ANDROID_STL_TYPE STREQUAL "none")
+      set(_ANDROID_STL_RTTI 0)
+      set(_ANDROID_STL_EXCEPTIONS 0)
+      macro(__android_stl lang)
+        # FIXME: Add a way to add project-wide language-specific compile-only flags.
+        set(CMAKE_CXX_COMPILE_OBJECT
+          "<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE> -nostdinc++")
+        string(APPEND CMAKE_${lang}_STANDARD_LIBRARIES " -nostdlib++")
+      endmacro()
+    else()
+      message(FATAL_ERROR
+        "Android: STL '${CMAKE_ANDROID_STL_TYPE}' not supported by this NDK."
+        )
+    endif()
+    if(DEFINED CMAKE_ANDROID_RTTI)
+      set(_ANDROID_STL_RTTI ${CMAKE_ANDROID_RTTI})
+    endif()
+    if(DEFINED CMAKE_ANDROID_EXCEPTIONS)
+      set(_ANDROID_STL_EXCEPTIONS ${CMAKE_ANDROID_EXCEPTIONS})
+    endif()
+  elseif(CMAKE_ANDROID_NDK)
+
+    macro(__android_stl_inc lang dir req)
+      if(EXISTS "${dir}")
+        list(APPEND CMAKE_${lang}_STANDARD_INCLUDE_DIRECTORIES "${dir}")
+      elseif(${req})
+        message(FATAL_ERROR
+          "Android: STL '${CMAKE_ANDROID_STL_TYPE}' include directory not found:\n"
+          "  ${dir}"
+          )
+      endif()
+    endmacro()
+
+    macro(__android_stl_lib lang lib req)
+      if(CMAKE_ANDROID_ARCH_ABI MATCHES "^armeabi" AND NOT CMAKE_ANDROID_ARM_MODE)
+        get_filename_component(_ANDROID_STL_LIBDIR "${lib}" DIRECTORY)
+        get_filename_component(_ANDROID_STL_LIBNAME "${lib}" NAME)
+        set(_ANDROID_STL_LIBTHUMB "${_ANDROID_STL_LIBDIR}/thumb/${_ANDROID_STL_LIBNAME}")
+        unset(_ANDROID_STL_LIBDIR)
+        unset(_ANDROID_STL_LIBNAME)
+      else()
+        set(_ANDROID_STL_LIBTHUMB "")
+      endif()
+
+      if(_ANDROID_STL_LIBTHUMB AND EXISTS "${_ANDROID_STL_LIBTHUMB}")
+        string(APPEND CMAKE_${lang}_STANDARD_LIBRARIES " \"${_ANDROID_STL_LIBTHUMB}\"")
+      elseif(EXISTS "${lib}")
+        string(APPEND CMAKE_${lang}_STANDARD_LIBRARIES " \"${lib}\"")
+      elseif(${req})
+        message(FATAL_ERROR
+          "Android: STL '${CMAKE_ANDROID_STL_TYPE}' library file not found:\n"
+          "  ${lib}"
+          )
+      endif()
+
+      unset(_ANDROID_STL_LIBTHUMB)
+    endmacro()
+
+    include(Platform/Android/ndk-stl-${CMAKE_ANDROID_STL_TYPE})
+  else()
+    macro(__android_stl lang)
+    endmacro()
+  endif()
+else()
+  macro(__android_stl lang)
+  endmacro()
+endif()
+
+# The NDK toolchain configuration files at:
+#
+#   <ndk>/[build/core/]toolchains/*/setup.mk
+#
+# contain logic to set TARGET_CFLAGS and TARGET_LDFLAGS (and debug/release
+# variants) to tell their build system what flags to pass for each ABI.
+# We need to produce the same flags here to produce compatible binaries.
+# We initialize these variables here and set them in the compiler-specific
+# modules that include this one.  Then we use them in the macro below when
+# it is called.
+set(_ANDROID_ABI_INIT_CFLAGS "")
+set(_ANDROID_ABI_INIT_CFLAGS_DEBUG "")
+set(_ANDROID_ABI_INIT_CFLAGS_RELEASE "")
+set(_ANDROID_ABI_INIT_LDFLAGS "")
+set(_ANDROID_ABI_INIT_EXE_LDFLAGS "")
+
+macro(__android_compiler_common lang)
+  if(_ANDROID_ABI_INIT_CFLAGS)
+    string(APPEND CMAKE_${lang}_FLAGS_INIT " ${_ANDROID_ABI_INIT_CFLAGS}")
+  endif()
+  if(_ANDROID_ABI_INIT_CFLAGS_DEBUG)
+    string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " ${_ANDROID_ABI_INIT_CFLAGS_DEBUG}")
+  endif()
+  if(_ANDROID_ABI_INIT_CFLAGS_RELEASE)
+    string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " ${_ANDROID_ABI_INIT_CFLAGS_RELEASE}")
+    string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " ${_ANDROID_ABI_INIT_CFLAGS_RELEASE}")
+    string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " ${_ANDROID_ABI_INIT_CFLAGS_RELEASE}")
+  endif()
+  if(_ANDROID_ABI_INIT_LDFLAGS)
+    foreach(t EXE SHARED MODULE)
+      string(APPEND CMAKE_${t}_LINKER_FLAGS_INIT " ${_ANDROID_ABI_INIT_LDFLAGS}")
+    endforeach()
+  endif()
+  if(_ANDROID_ABI_INIT_EXE_LDFLAGS)
+    string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT " ${_ANDROID_ABI_INIT_EXE_LDFLAGS}")
+  endif()
+
+  if(DEFINED _ANDROID_STL_EXCEPTIONS)
+    if(_ANDROID_STL_EXCEPTIONS)
+      string(APPEND CMAKE_${lang}_FLAGS_INIT " -fexceptions")
+    else()
+      string(APPEND CMAKE_${lang}_FLAGS_INIT " -fno-exceptions")
+    endif()
+  endif()
+
+  if("x${lang}" STREQUAL "xCXX" AND DEFINED _ANDROID_STL_RTTI)
+    if(_ANDROID_STL_RTTI)
+      string(APPEND CMAKE_${lang}_FLAGS_INIT " -frtti")
+    else()
+      string(APPEND CMAKE_${lang}_FLAGS_INIT " -fno-rtti")
+    endif()
+  endif()
+
+  if("x${lang}" STREQUAL "xCXX")
+    __android_stl(CXX)
+  endif()
+
+  if(CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED)
+    string(APPEND CMAKE_${lang}_STANDARD_LIBRARIES " -latomic -lm")
+  endif()
+
+  # <ndk>/build/core/definitions.mk appends the sysroot's include directory
+  # explicitly at the end of the command-line include path so that it
+  # precedes the toolchain's builtin include directories.  This is
+  # necessary so that Android API-version-specific headers are preferred
+  # over those in the toolchain's `include-fixed` directory (which cannot
+  # possibly match all versions).
+  #
+  # Do not do this for a standalone toolchain because it is already
+  # tied to a specific API version.
+  if(CMAKE_ANDROID_NDK AND NOT CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED)
+    if(CMAKE_SYSROOT_COMPILE)
+      set(_cmake_sysroot_compile "${CMAKE_SYSROOT_COMPILE}")
+    else()
+      set(_cmake_sysroot_compile "${CMAKE_SYSROOT}")
+    endif()
+    if(NOT CMAKE_ANDROID_NDK_DEPRECATED_HEADERS)
+      list(APPEND CMAKE_${lang}_STANDARD_INCLUDE_DIRECTORIES
+        "${_cmake_sysroot_compile}/usr/include"
+        "${_cmake_sysroot_compile}/usr/include/${CMAKE_ANDROID_ARCH_TRIPLE}"
+        )
+    else()
+      list(APPEND CMAKE_${lang}_STANDARD_INCLUDE_DIRECTORIES "${_cmake_sysroot_compile}/usr/include")
+    endif()
+    unset(_cmake_sysroot_compile)
+  endif()
+endmacro()
diff --git a/share/cmake-3.18/Modules/Platform/Android-Determine-C.cmake b/share/cmake-3.22/Modules/Platform/Android-Determine-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android-Determine-C.cmake
rename to share/cmake-3.22/Modules/Platform/Android-Determine-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android-Determine-CXX.cmake b/share/cmake-3.22/Modules/Platform/Android-Determine-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android-Determine-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/Android-Determine-CXX.cmake
diff --git a/share/cmake-3.22/Modules/Platform/Android-Determine.cmake b/share/cmake-3.22/Modules/Platform/Android-Determine.cmake
new file mode 100644
index 0000000..a4e9574
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Android-Determine.cmake
@@ -0,0 +1,609 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+# When CMAKE_SYSTEM_NAME is "Android", CMakeDetermineSystem loads this module.
+# This module detects platform-wide information about the Android target
+# in order to store it in "CMakeSystem.cmake".
+
+# Include the NDK hook.
+# It can be used by NDK to inject necessary fixes for an earlier cmake.
+if(CMAKE_ANDROID_NDK)
+  include(${CMAKE_ANDROID_NDK}/build/cmake/hooks/pre/Android-Determine.cmake OPTIONAL)
+endif()
+
+# Support for NVIDIA Nsight Tegra Visual Studio Edition was previously
+# implemented in the CMake VS IDE generators.  Avoid interfering with
+# that functionality for now.
+if(CMAKE_GENERATOR_PLATFORM STREQUAL "Tegra-Android")
+  return()
+endif()
+
+# Commonly used Android toolchain files that pre-date CMake upstream support
+# set CMAKE_SYSTEM_VERSION to 1.  Avoid interfering with them.
+if(CMAKE_SYSTEM_VERSION EQUAL 1)
+  return()
+endif()
+
+# Natively compiling on an Android host doesn't use the NDK cross-compilation
+# tools.
+if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Android")
+  return()
+endif()
+
+cmake_policy(PUSH)
+cmake_policy(SET CMP0057 NEW) # if IN_LIST
+
+# If using Android tools for Visual Studio, compile a sample project to get the
+# sysroot.
+if(CMAKE_GENERATOR MATCHES "Visual Studio")
+  if(NOT CMAKE_SYSROOT)
+    set(vcx_platform ${CMAKE_GENERATOR_PLATFORM})
+    if(CMAKE_GENERATOR MATCHES "Visual Studio 1[45]")
+      set(vcx_sysroot_var "Sysroot")
+    else()
+      set(vcx_sysroot_var "SysrootLink")
+    endif()
+    if(CMAKE_GENERATOR MATCHES "Visual Studio 14")
+      set(vcx_revision "2.0")
+    elseif(CMAKE_GENERATOR MATCHES "Visual Studio 1[56]")
+      set(vcx_revision "3.0")
+    else()
+      set(vcx_revision "")
+    endif()
+    configure_file(${CMAKE_ROOT}/Modules/Platform/Android/VCXProjInspect.vcxproj.in
+      ${CMAKE_PLATFORM_INFO_DIR}/VCXProjInspect.vcxproj @ONLY)
+    cmake_host_system_information(RESULT _msbuild QUERY VS_MSBUILD_COMMAND) # undocumented query
+    execute_process(
+      COMMAND "${_msbuild}" "VCXProjInspect.vcxproj"
+        "/p:Configuration=Debug" "/p:Platform=${vcx_platform}"
+      WORKING_DIRECTORY ${CMAKE_PLATFORM_INFO_DIR}
+      OUTPUT_VARIABLE VCXPROJ_INSPECT_OUTPUT
+      ERROR_VARIABLE VCXPROJ_INSPECT_OUTPUT
+      RESULT_VARIABLE VCXPROJ_INSPECT_RESULT
+      )
+    unset(_msbuild)
+    if(NOT CMAKE_SYSROOT AND VCXPROJ_INSPECT_OUTPUT MATCHES "CMAKE_SYSROOT=([^%\r\n]+)[\r\n]")
+      # Strip VS diagnostic output from the end of the line.
+      string(REGEX REPLACE " \\(TaskId:[0-9]*\\)$" "" _sysroot "${CMAKE_MATCH_1}")
+      if(EXISTS "${_sysroot}")
+        file(TO_CMAKE_PATH "${_sysroot}" CMAKE_SYSROOT)
+      endif()
+    endif()
+    if(VCXPROJ_INSPECT_RESULT)
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+        "Determining the sysroot for the Android NDK failed.
+The output was:
+${VCXPROJ_INSPECT_RESULT}
+${VCXPROJ_INSPECT_OUTPUT}
+
+")
+    else()
+      file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+        "Determining the sysroot for the Android NDK succeeded.
+The output was:
+${VCXPROJ_INSPECT_RESULT}
+${VCXPROJ_INSPECT_OUTPUT}
+
+")
+    endif()
+  endif()
+  if(NOT CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION)
+    set(CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION "clang")
+  endif()
+endif()
+
+# If the user provided CMAKE_SYSROOT for us, extract information from it.
+set(_ANDROID_SYSROOT_NDK "")
+set(_ANDROID_SYSROOT_API "")
+set(_ANDROID_SYSROOT_ARCH "")
+set(_ANDROID_SYSROOT_STANDALONE_TOOLCHAIN "")
+if(CMAKE_SYSROOT)
+  if(NOT IS_DIRECTORY "${CMAKE_SYSROOT}")
+    message(FATAL_ERROR
+      "Android: The specified CMAKE_SYSROOT:\n"
+      "  ${CMAKE_SYSROOT}\n"
+      "is not an existing directory."
+      )
+  endif()
+  if(CMAKE_SYSROOT MATCHES "^([^\\\n]*)/platforms/android-([0-9]+)/arch-([a-z0-9_]+)$")
+    set(_ANDROID_SYSROOT_NDK "${CMAKE_MATCH_1}")
+    set(_ANDROID_SYSROOT_API "${CMAKE_MATCH_2}")
+    set(_ANDROID_SYSROOT_ARCH "${CMAKE_MATCH_3}")
+  elseif(CMAKE_SYSROOT MATCHES "^([^\\\n]*)/sysroot$")
+    set(_ANDROID_SYSROOT_STANDALONE_TOOLCHAIN "${CMAKE_MATCH_1}")
+  else()
+    message(FATAL_ERROR
+      "The value of CMAKE_SYSROOT:\n"
+      "  ${CMAKE_SYSROOT}\n"
+      "does not match any of the forms:\n"
+      "  <ndk>/platforms/android-<api>/arch-<arch>\n"
+      "  <standalone-toolchain>/sysroot\n"
+      "where:\n"
+      "  <ndk>  = Android NDK directory (with forward slashes)\n"
+      "  <api>  = Android API version number (decimal digits)\n"
+      "  <arch> = Android ARCH name (lower case)\n"
+      "  <standalone-toolchain> = Path to standalone toolchain prefix\n"
+      )
+  endif()
+endif()
+
+# Find the Android NDK.
+if(CMAKE_ANDROID_NDK)
+  if(NOT IS_DIRECTORY "${CMAKE_ANDROID_NDK}")
+    message(FATAL_ERROR
+      "Android: The NDK root directory specified by CMAKE_ANDROID_NDK:\n"
+      "  ${CMAKE_ANDROID_NDK}\n"
+      "does not exist."
+      )
+  endif()
+elseif(CMAKE_ANDROID_STANDALONE_TOOLCHAIN)
+  if(NOT IS_DIRECTORY "${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}")
+    message(FATAL_ERROR
+      "Android: The standalone toolchain directory specified by CMAKE_ANDROID_STANDALONE_TOOLCHAIN:\n"
+      "  ${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}\n"
+      "does not exist."
+      )
+  endif()
+  if(NOT EXISTS "${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}/sysroot/usr/include/android/api-level.h")
+    message(FATAL_ERROR
+      "Android: The standalone toolchain directory specified by CMAKE_ANDROID_STANDALONE_TOOLCHAIN:\n"
+      "  ${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}\n"
+      "does not contain a sysroot with a known layout.  The file:\n"
+      "  ${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}/sysroot/usr/include/android/api-level.h\n"
+      "does not exist."
+      )
+  endif()
+else()
+  if(IS_DIRECTORY "${_ANDROID_SYSROOT_NDK}")
+    set(CMAKE_ANDROID_NDK "${_ANDROID_SYSROOT_NDK}")
+  elseif(IS_DIRECTORY "${_ANDROID_SYSROOT_STANDALONE_TOOLCHAIN}")
+    set(CMAKE_ANDROID_STANDALONE_TOOLCHAIN "${_ANDROID_SYSROOT_STANDALONE_TOOLCHAIN}")
+  elseif(IS_DIRECTORY "${ANDROID_NDK}")
+    file(TO_CMAKE_PATH "${ANDROID_NDK}" CMAKE_ANDROID_NDK)
+  elseif(IS_DIRECTORY "${ANDROID_STANDALONE_TOOLCHAIN}")
+    file(TO_CMAKE_PATH "${ANDROID_STANDALONE_TOOLCHAIN}" CMAKE_ANDROID_STANDALONE_TOOLCHAIN)
+  elseif(IS_DIRECTORY "$ENV{ANDROID_NDK_ROOT}")
+    file(TO_CMAKE_PATH "$ENV{ANDROID_NDK_ROOT}" CMAKE_ANDROID_NDK)
+  elseif(IS_DIRECTORY "$ENV{ANDROID_NDK}")
+    file(TO_CMAKE_PATH "$ENV{ANDROID_NDK}" CMAKE_ANDROID_NDK)
+  elseif(IS_DIRECTORY "$ENV{ANDROID_STANDALONE_TOOLCHAIN}")
+    file(TO_CMAKE_PATH "$ENV{ANDROID_STANDALONE_TOOLCHAIN}" CMAKE_ANDROID_STANDALONE_TOOLCHAIN)
+  endif()
+  # TODO: Search harder for the NDK or standalone toolchain.
+endif()
+
+set(_ANDROID_STANDALONE_TOOLCHAIN_API "")
+if(CMAKE_ANDROID_STANDALONE_TOOLCHAIN)
+  # Try to read the API level from the toolchain launcher.
+  if(EXISTS "${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}/bin/clang")
+    set(_ANDROID_API_LEVEL_CLANG_REGEX "__ANDROID_API__=([0-9]+)")
+    file(STRINGS "${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}/bin/clang" _ANDROID_STANDALONE_TOOLCHAIN_BIN_CLANG
+      REGEX "${_ANDROID_API_LEVEL_CLANG_REGEX}" LIMIT_COUNT 1 LIMIT_INPUT 65536)
+    if(_ANDROID_STANDALONE_TOOLCHAIN_BIN_CLANG MATCHES "${_ANDROID_API_LEVEL_CLANG_REGEX}")
+      set(_ANDROID_STANDALONE_TOOLCHAIN_API "${CMAKE_MATCH_1}")
+    endif()
+    unset(_ANDROID_STANDALONE_TOOLCHAIN_BIN_CLANG)
+    unset(_ANDROID_API_LEVEL_CLANG_REGEX)
+  endif()
+  if(NOT _ANDROID_STANDALONE_TOOLCHAIN_API)
+    # The compiler launcher does not know __ANDROID_API__.  Assume this
+    # is not unified headers and look for it in the api-level.h header.
+    set(_ANDROID_API_LEVEL_H_REGEX "^[\t ]*#[\t ]*define[\t ]+__ANDROID_API__[\t ]+([0-9]+)")
+    file(STRINGS "${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}/sysroot/usr/include/android/api-level.h"
+      _ANDROID_API_LEVEL_H_CONTENT REGEX "${_ANDROID_API_LEVEL_H_REGEX}")
+    if(_ANDROID_API_LEVEL_H_CONTENT MATCHES "${_ANDROID_API_LEVEL_H_REGEX}")
+      set(_ANDROID_STANDALONE_TOOLCHAIN_API "${CMAKE_MATCH_1}")
+    endif()
+  endif()
+  if(NOT _ANDROID_STANDALONE_TOOLCHAIN_API)
+    message(WARNING
+      "Android: Did not detect API level from\n"
+      "  ${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}/bin/clang\n"
+      "or\n"
+      "  ${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}/sysroot/usr/include/android/api-level.h\n"
+      )
+  endif()
+endif()
+
+if(NOT CMAKE_ANDROID_NDK AND NOT CMAKE_ANDROID_STANDALONE_TOOLCHAIN)
+  message(FATAL_ERROR "Android: Neither the NDK or a standalone toolchain was found.")
+endif()
+
+if(CMAKE_ANDROID_NDK)
+  # NDK >= 18 has platforms.cmake. It provides:
+  #   NDK_MIN_PLATFORM_LEVEL
+  #   NDK_MAX_PLATFORM_LEVEL
+  include("${CMAKE_ANDROID_NDK}/build/cmake/platforms.cmake" OPTIONAL RESULT_VARIABLE _INCLUDED_PLATFORMS)
+  # NDK >= 18 has abis.cmake. It provides:
+  #   NDK_KNOWN_DEVICE_ABI32S
+  #   NDK_KNOWN_DEVICE_ABI64S
+  # NDK >= 23 also provides:
+  #   NDK_KNOWN_DEVICE_ABIS
+  #   NDK_ABI_<abi>_PROC
+  #   NDK_ABI_<abi>_ARCH
+  #   NDK_ABI_<abi>_TRIPLE
+  #   NDK_ABI_<abi>_LLVM_TRIPLE
+  #   NDK_PROC_<processor>_ABI
+  #   NDK_ARCH_<arch>_ABI
+  include("${CMAKE_ANDROID_NDK}/build/cmake/abis.cmake" OPTIONAL RESULT_VARIABLE _INCLUDED_ABIS)
+endif()
+
+if(CMAKE_ANDROID_NDK AND EXISTS "${CMAKE_ANDROID_NDK}/source.properties")
+  # Android NDK revision
+  # Possible formats:
+  # * r16, build 1234: 16.0.1234
+  # * r16b, build 1234: 16.1.1234
+  # * r16 beta 1, build 1234: 16.0.1234-beta1
+  #
+  # Canary builds are not specially marked.
+  file(READ "${CMAKE_ANDROID_NDK}/source.properties" _ANDROID_NDK_SOURCE_PROPERTIES)
+
+  set(_ANDROID_NDK_REVISION_REGEX
+    "^Pkg\\.Desc = Android NDK\nPkg\\.Revision = ([0-9]+)\\.([0-9]+)\\.([0-9]+)(-beta([0-9]+))?")
+  if(NOT _ANDROID_NDK_SOURCE_PROPERTIES MATCHES "${_ANDROID_NDK_REVISION_REGEX}")
+    string(REPLACE "\n" "\n  " _ANDROID_NDK_SOURCE_PROPERTIES "${_ANDROID_NDK_SOURCE_PROPERTIES}")
+    message(FATAL_ERROR
+      "Android: Failed to parse NDK revision from:\n"
+      " ${CMAKE_ANDROID_NDK}/source.properties\n"
+      "with content:\n"
+      "  ${_ANDROID_NDK_SOURCE_PROPERTIES}")
+  endif()
+
+  set(_ANDROID_NDK_MAJOR "${CMAKE_MATCH_1}")
+  set(_ANDROID_NDK_MINOR "${CMAKE_MATCH_2}")
+  set(_ANDROID_NDK_BUILD "${CMAKE_MATCH_3}")
+  set(_ANDROID_NDK_BETA "${CMAKE_MATCH_5}")
+  if(_ANDROID_NDK_BETA STREQUAL "")
+    set(_ANDROID_NDK_BETA "0")
+  endif()
+  set(CMAKE_ANDROID_NDK_VERSION "${_ANDROID_NDK_MAJOR}.${_ANDROID_NDK_MINOR}")
+
+  unset(_ANDROID_NDK_SOURCE_PROPERTIES)
+  unset(_ANDROID_NDK_REVISION_REGEX)
+  unset(_ANDROID_NDK_MAJOR)
+  unset(_ANDROID_NDK_MINOR)
+  unset(_ANDROID_NDK_BUILD)
+  unset(_ANDROID_NDK_BETA)
+endif()
+
+if(CMAKE_ANDROID_NDK)
+  # Identify the host platform.
+  if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
+    if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "64")
+      set(CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG "darwin-x86_64")
+    else()
+      set(CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG "darwin-x86")
+    endif()
+  elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
+    if(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "x86_64")
+      set(CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG "linux-x86_64")
+    else()
+      set(CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG "linux-x86")
+    endif()
+  elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
+    if(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "AMD64")
+      set(CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG "windows-x86_64")
+    else()
+      set(CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG "windows")
+    endif()
+  else()
+    message(FATAL_ERROR "Android: Builds hosted on '${CMAKE_HOST_SYSTEM_NAME}' not supported.")
+  endif()
+
+  # Look for a unified toolchain/sysroot provided with the NDK.
+  set(CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED "${CMAKE_ANDROID_NDK}/toolchains/llvm/prebuilt/${CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG}")
+  if(NOT IS_DIRECTORY "${CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED}/sysroot")
+    set(CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED "")
+  endif()
+else()
+  set(CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG "")
+  set(CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED "")
+endif()
+
+if(_INCLUDED_ABIS)
+  if(NDK_KNOWN_DEVICE_ABIS)
+    set(_ANDROID_KNOWN_ABIS ${NDK_KNOWN_DEVICE_ABIS})
+  else()
+    set(_ANDROID_KNOWN_ABIS ${NDK_KNOWN_DEVICE_ABI32S} ${NDK_KNOWN_DEVICE_ABI64S})
+  endif()
+endif()
+
+if(NOT DEFINED NDK_KNOWN_DEVICE_ABIS)
+  # The NDK is not new enough to provide ABI information.
+  # https://developer.android.com/ndk/guides/abis.html
+
+  set(NDK_ABI_arm64-v8a_PROC           "aarch64")
+  set(NDK_ABI_arm64-v8a_ARCH           "arm64")
+  set(NDK_ABI_arm64-v8a_TRIPLE         "aarch64-linux-android")
+  set(NDK_ABI_arm64-v8a_LLVM_TRIPLE    "aarch64-none-linux-android")
+  set(NDK_ABI_armeabi-v7a_PROC         "armv7-a")
+  set(NDK_ABI_armeabi-v7a_ARCH         "arm")
+  set(NDK_ABI_armeabi-v7a_TRIPLE       "arm-linux-androideabi")
+  set(NDK_ABI_armeabi-v7a_LLVM_TRIPLE  "armv7-none-linux-androideabi")
+  set(NDK_ABI_armeabi-v6_PROC          "armv6")
+  set(NDK_ABI_armeabi-v6_ARCH          "arm")
+  set(NDK_ABI_armeabi-v6_TRIPLE        "arm-linux-androideabi")
+  set(NDK_ABI_armeabi-v6_LLVM_TRIPLE   "armv6-none-linux-androideabi")
+  set(NDK_ABI_armeabi_PROC             "armv5te")
+  set(NDK_ABI_armeabi_ARCH             "arm")
+  set(NDK_ABI_armeabi_TRIPLE           "arm-linux-androideabi")
+  set(NDK_ABI_armeabi_LLVM_TRIPLE      "armv5te-none-linux-androideabi")
+  set(NDK_ABI_mips_PROC                "mips")
+  set(NDK_ABI_mips_ARCH                "mips")
+  set(NDK_ABI_mips_TRIPLE              "mipsel-linux-android")
+  set(NDK_ABI_mips_LLVM_TRIPLE         "mipsel-none-linux-android")
+  set(NDK_ABI_mips64_PROC              "mips64")
+  set(NDK_ABI_mips64_ARCH              "mips64")
+  set(NDK_ABI_mips64_TRIPLE            "mips64el-linux-android")
+  set(NDK_ABI_mips64_LLVM_TRIPLE       "mips64el-none-linux-android")
+  set(NDK_ABI_x86_PROC                 "i686")
+  set(NDK_ABI_x86_ARCH                 "x86")
+  set(NDK_ABI_x86_TRIPLE               "i686-linux-android")
+  set(NDK_ABI_x86_LLVM_TRIPLE          "i686-none-linux-android")
+  set(NDK_ABI_x86_64_PROC              "x86_64")
+  set(NDK_ABI_x86_64_ARCH              "x86_64")
+  set(NDK_ABI_x86_64_TRIPLE            "x86_64-linux-android")
+  set(NDK_ABI_x86_64_LLVM_TRIPLE       "x86_64-none-linux-android")
+
+  set(NDK_PROC_aarch64_ABI "arm64-v8a")
+  set(NDK_PROC_armv7-a_ABI "armeabi-v7a")
+  set(NDK_PROC_armv6_ABI   "armeabi-v6")
+  set(NDK_PROC_armv5te_ABI "armeabi")
+  set(NDK_PROC_i686_ABI    "x86")
+  set(NDK_PROC_mips_ABI    "mips")
+  set(NDK_PROC_mips64_ABI  "mips64")
+  set(NDK_PROC_x86_64_ABI  "x86_64")
+
+  set(NDK_ARCH_arm64_ABI  "arm64-v8a")
+  set(NDK_ARCH_arm_ABI    "armeabi")
+  set(NDK_ARCH_mips_ABI   "mips")
+  set(NDK_ARCH_mips64_ABI "mips64")
+  set(NDK_ARCH_x86_ABI    "x86")
+  set(NDK_ARCH_x86_64_ABI "x86_64")
+endif()
+
+# Validate inputs.
+if(CMAKE_ANDROID_ARCH_ABI AND NOT DEFINED "NDK_ABI_${CMAKE_ANDROID_ARCH_ABI}_PROC")
+  message(FATAL_ERROR "Android: Unknown ABI CMAKE_ANDROID_ARCH_ABI='${CMAKE_ANDROID_ARCH_ABI}'.")
+endif()
+if(CMAKE_SYSTEM_PROCESSOR AND NOT DEFINED "NDK_PROC_${CMAKE_SYSTEM_PROCESSOR}_ABI")
+  message(FATAL_ERROR "Android: Unknown processor CMAKE_SYSTEM_PROCESSOR='${CMAKE_SYSTEM_PROCESSOR}'.")
+endif()
+if(_ANDROID_SYSROOT_ARCH AND NOT DEFINED "NDK_ARCH_${_ANDROID_SYSROOT_ARCH}_ABI")
+  message(FATAL_ERROR
+    "Android: Unknown architecture '${_ANDROID_SYSROOT_ARCH}' specified in CMAKE_SYSROOT:\n"
+    "  ${CMAKE_SYSROOT}"
+    )
+endif()
+
+# Select an ABI.
+if(NOT CMAKE_ANDROID_ARCH_ABI)
+  if(CMAKE_SYSTEM_PROCESSOR)
+    set(CMAKE_ANDROID_ARCH_ABI "${NDK_PROC_${CMAKE_SYSTEM_PROCESSOR}_ABI}")
+  elseif(_ANDROID_SYSROOT_ARCH)
+    set(CMAKE_ANDROID_ARCH_ABI "${NDK_ARCH_${_ANDROID_SYSROOT_ARCH}_ABI}")
+  elseif(_INCLUDED_ABIS)
+    # Default to the oldest ARM ABI.
+    foreach(abi armeabi armeabi-v7a arm64-v8a)
+      if("${abi}" IN_LIST _ANDROID_KNOWN_ABIS)
+        set(CMAKE_ANDROID_ARCH_ABI "${abi}")
+        break()
+      endif()
+    endforeach()
+    if(NOT CMAKE_ANDROID_ARCH_ABI)
+      message(FATAL_ERROR
+        "Android: Can not determine the default ABI. Please set CMAKE_ANDROID_ARCH_ABI."
+      )
+    endif()
+  else()
+    # https://developer.android.com/ndk/guides/application_mk.html
+    # Default is the oldest ARM ABI.
+
+    # Lookup the available ABIs among all toolchains.
+    set(_ANDROID_ABIS "")
+    file(GLOB _ANDROID_CONFIG_MKS
+      "${CMAKE_ANDROID_NDK}/build/core/toolchains/*/config.mk"
+      "${CMAKE_ANDROID_NDK}/toolchains/*/config.mk"
+      )
+    foreach(config_mk IN LISTS _ANDROID_CONFIG_MKS)
+      file(STRINGS "${config_mk}" _ANDROID_TOOL_ABIS REGEX "^TOOLCHAIN_ABIS :=")
+      string(REPLACE "TOOLCHAIN_ABIS :=" "" _ANDROID_TOOL_ABIS "${_ANDROID_TOOL_ABIS}")
+      separate_arguments(_ANDROID_TOOL_ABIS UNIX_COMMAND "${_ANDROID_TOOL_ABIS}")
+      list(APPEND _ANDROID_ABIS ${_ANDROID_TOOL_ABIS})
+      unset(_ANDROID_TOOL_ABIS)
+    endforeach()
+    unset(_ANDROID_CONFIG_MKS)
+
+    # Choose the oldest among the available arm ABIs.
+    if(_ANDROID_ABIS)
+      list(REMOVE_DUPLICATES _ANDROID_ABIS)
+      foreach(abi armeabi armeabi-v7a arm64-v8a)
+        if("${abi}" IN_LIST _ANDROID_ABIS)
+          set(CMAKE_ANDROID_ARCH_ABI "${abi}")
+          break()
+        endif()
+      endforeach()
+    endif()
+    unset(_ANDROID_ABIS)
+
+    if(NOT CMAKE_ANDROID_ARCH_ABI)
+      set(CMAKE_ANDROID_ARCH_ABI "armeabi")
+    endif()
+  endif()
+endif()
+if(_INCLUDED_ABIS AND NOT CMAKE_ANDROID_ARCH_ABI IN_LIST _ANDROID_KNOWN_ABIS)
+  message(FATAL_ERROR
+    "Android: ABI '${CMAKE_ANDROID_ARCH_ABI}' is not supported by the NDK.\n"
+    "Supported ABIS: ${_ANDROID_KNOWN_ABIS}."
+  )
+endif()
+set(CMAKE_ANDROID_ARCH "${NDK_ABI_${CMAKE_ANDROID_ARCH_ABI}_ARCH}")
+if(_ANDROID_SYSROOT_ARCH AND NOT "x${_ANDROID_SYSROOT_ARCH}" STREQUAL "x${CMAKE_ANDROID_ARCH}")
+  message(FATAL_ERROR
+    "Android: Architecture '${_ANDROID_SYSROOT_ARCH}' specified in CMAKE_SYSROOT:\n"
+    "  ${CMAKE_SYSROOT}\n"
+    "does not match architecture '${CMAKE_ANDROID_ARCH}' for the ABI '${CMAKE_ANDROID_ARCH_ABI}'."
+    )
+endif()
+set(CMAKE_ANDROID_ARCH_TRIPLE "${NDK_ABI_${CMAKE_ANDROID_ARCH_ABI}_TRIPLE}")
+set(CMAKE_ANDROID_ARCH_LLVM_TRIPLE
+    "${NDK_ABI_${CMAKE_ANDROID_ARCH_ABI}_LLVM_TRIPLE}")
+
+# Select a processor.
+if(NOT CMAKE_SYSTEM_PROCESSOR)
+  set(CMAKE_SYSTEM_PROCESSOR "${NDK_ABI_${CMAKE_ANDROID_ARCH_ABI}_PROC}")
+endif()
+
+# If the user specified both an ABI and a processor then they might not match.
+if(NOT NDK_ABI_${CMAKE_ANDROID_ARCH_ABI}_PROC STREQUAL CMAKE_SYSTEM_PROCESSOR)
+  message(FATAL_ERROR "Android: The specified CMAKE_ANDROID_ARCH_ABI='${CMAKE_ANDROID_ARCH_ABI}' and CMAKE_SYSTEM_PROCESSOR='${CMAKE_SYSTEM_PROCESSOR}' is not a valid combination.")
+endif()
+
+# Select an API.
+if(CMAKE_SYSTEM_VERSION)
+  set(_ANDROID_API_VAR CMAKE_SYSTEM_VERSION)
+elseif(CMAKE_ANDROID_API)
+  set(CMAKE_SYSTEM_VERSION "${CMAKE_ANDROID_API}")
+  set(_ANDROID_API_VAR CMAKE_ANDROID_API)
+elseif(_ANDROID_SYSROOT_API)
+  set(CMAKE_SYSTEM_VERSION "${_ANDROID_SYSROOT_API}")
+  set(_ANDROID_API_VAR CMAKE_SYSROOT)
+elseif(_ANDROID_STANDALONE_TOOLCHAIN_API)
+  set(CMAKE_SYSTEM_VERSION "${_ANDROID_STANDALONE_TOOLCHAIN_API}")
+endif()
+if(CMAKE_SYSTEM_VERSION)
+  if(CMAKE_ANDROID_API AND NOT "x${CMAKE_ANDROID_API}" STREQUAL "x${CMAKE_SYSTEM_VERSION}")
+    message(FATAL_ERROR
+      "Android: The API specified by CMAKE_ANDROID_API='${CMAKE_ANDROID_API}' is not consistent with CMAKE_SYSTEM_VERSION='${CMAKE_SYSTEM_VERSION}'."
+      )
+  endif()
+  if(_ANDROID_SYSROOT_API)
+    foreach(v CMAKE_ANDROID_API CMAKE_SYSTEM_VERSION)
+      if(${v} AND NOT "x${_ANDROID_SYSROOT_API}" STREQUAL "x${${v}}")
+        message(FATAL_ERROR
+          "Android: The API specified by ${v}='${${v}}' is not consistent with CMAKE_SYSROOT:\n"
+          "  ${CMAKE_SYSROOT}"
+          )
+      endif()
+    endforeach()
+  endif()
+  if(CMAKE_ANDROID_NDK)
+    if (_INCLUDED_PLATFORMS)
+      if(CMAKE_SYSTEM_VERSION GREATER NDK_MAX_PLATFORM_LEVEL OR
+         CMAKE_SYSTEM_VERSION LESS NDK_MIN_PLATFORM_LEVEL)
+        message(FATAL_ERROR
+          "Android: The API level ${CMAKE_SYSTEM_VERSION} is not supported by the NDK.\n"
+          "Choose one in the range of [${NDK_MIN_PLATFORM_LEVEL}, ${NDK_MAX_PLATFORM_LEVEL}]."
+        )
+      endif()
+    else()
+      if(NOT IS_DIRECTORY "${CMAKE_ANDROID_NDK}/platforms/android-${CMAKE_SYSTEM_VERSION}")
+        message(FATAL_ERROR
+          "Android: The API specified by ${_ANDROID_API_VAR}='${${_ANDROID_API_VAR}}' does not exist in the NDK.  "
+          "The directory:\n"
+          "  ${CMAKE_ANDROID_NDK}/platforms/android-${CMAKE_SYSTEM_VERSION}\n"
+          "does not exist."
+          )
+      endif()
+    endif()
+  endif()
+elseif(CMAKE_ANDROID_NDK)
+  if (_INCLUDED_PLATFORMS)
+    set(CMAKE_SYSTEM_VERSION ${NDK_MIN_PLATFORM_LEVEL})
+    # And for LP64 we need to pull up to 21. No diagnostic is provided here because
+    # minSdkVersion < 21 is valid for the project even though it may not be for this
+    # ABI.
+    if(CMAKE_ANDROID_ARCH_ABI MATCHES "64(-v8a)?$" AND CMAKE_SYSTEM_VERSION LESS 21)
+      set(CMAKE_SYSTEM_VERSION 21)
+    endif()
+  else()
+    file(GLOB _ANDROID_APIS_1 RELATIVE "${CMAKE_ANDROID_NDK}/platforms" "${CMAKE_ANDROID_NDK}/platforms/android-[0-9]")
+    file(GLOB _ANDROID_APIS_2 RELATIVE "${CMAKE_ANDROID_NDK}/platforms" "${CMAKE_ANDROID_NDK}/platforms/android-[0-9][0-9]")
+    list(SORT _ANDROID_APIS_1)
+    list(SORT _ANDROID_APIS_2)
+    set(_ANDROID_APIS ${_ANDROID_APIS_1} ${_ANDROID_APIS_2})
+    unset(_ANDROID_APIS_1)
+    unset(_ANDROID_APIS_2)
+    if(_ANDROID_APIS STREQUAL "")
+      message(FATAL_ERROR
+        "Android: No APIs found in the NDK.  No\n"
+        "  ${CMAKE_ANDROID_NDK}/platforms/android-*\n"
+        "directories exist."
+        )
+    endif()
+    string(REPLACE "android-" "" _ANDROID_APIS "${_ANDROID_APIS}")
+    list(REVERSE _ANDROID_APIS)
+    list(GET _ANDROID_APIS 0 CMAKE_SYSTEM_VERSION)
+    unset(_ANDROID_APIS)
+  endif()
+endif()
+if(NOT CMAKE_SYSTEM_VERSION MATCHES "^[0-9]+$")
+  message(FATAL_ERROR "Android: The API specified by CMAKE_SYSTEM_VERSION='${CMAKE_SYSTEM_VERSION}' is not an integer.")
+endif()
+
+if(CMAKE_ANDROID_NDK AND NOT DEFINED CMAKE_ANDROID_NDK_DEPRECATED_HEADERS)
+  if(IS_DIRECTORY "${CMAKE_ANDROID_NDK}/sysroot/usr/include/${CMAKE_ANDROID_ARCH_TRIPLE}")
+    # Unified headers exist so we use them by default.
+    set(CMAKE_ANDROID_NDK_DEPRECATED_HEADERS 0)
+  else()
+    # Unified headers do not exist so use the deprecated headers.
+    set(CMAKE_ANDROID_NDK_DEPRECATED_HEADERS 1)
+  endif()
+endif()
+
+# Save the Android-specific information in CMakeSystem.cmake.
+set(CMAKE_SYSTEM_CUSTOM_CODE "
+set(CMAKE_ANDROID_NDK \"${CMAKE_ANDROID_NDK}\")
+set(CMAKE_ANDROID_STANDALONE_TOOLCHAIN \"${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}\")
+set(CMAKE_ANDROID_ARCH \"${CMAKE_ANDROID_ARCH}\")
+set(CMAKE_ANDROID_ARCH_ABI \"${CMAKE_ANDROID_ARCH_ABI}\")
+")
+
+if(CMAKE_ANDROID_NDK)
+  string(APPEND CMAKE_SYSTEM_CUSTOM_CODE
+    "set(CMAKE_ANDROID_ARCH_TRIPLE \"${CMAKE_ANDROID_ARCH_TRIPLE}\")\n"
+    "set(CMAKE_ANDROID_ARCH_LLVM_TRIPLE \"${CMAKE_ANDROID_ARCH_LLVM_TRIPLE}\")\n"
+    "set(CMAKE_ANDROID_NDK_VERSION \"${CMAKE_ANDROID_NDK_VERSION}\")\n"
+    "set(CMAKE_ANDROID_NDK_DEPRECATED_HEADERS \"${CMAKE_ANDROID_NDK_DEPRECATED_HEADERS}\")\n"
+    "set(CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG \"${CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG}\")\n"
+    "set(CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED \"${CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED}\")\n"
+    )
+endif()
+
+# Select an ARM variant.
+if(CMAKE_ANDROID_ARCH_ABI MATCHES "^armeabi")
+  if(CMAKE_ANDROID_ARM_MODE)
+    set(CMAKE_ANDROID_ARM_MODE 1)
+  else()
+    set(CMAKE_ANDROID_ARM_MODE 0)
+  endif()
+  string(APPEND CMAKE_SYSTEM_CUSTOM_CODE
+    "set(CMAKE_ANDROID_ARM_MODE \"${CMAKE_ANDROID_ARM_MODE}\")\n"
+    )
+elseif(DEFINED CMAKE_ANDROID_ARM_MODE)
+  message(FATAL_ERROR "Android: CMAKE_ANDROID_ARM_MODE is set but is valid only for 'armeabi' architectures.")
+endif()
+
+if(CMAKE_ANDROID_ARCH_ABI STREQUAL "armeabi-v7a")
+  if(CMAKE_ANDROID_ARM_NEON)
+    set(CMAKE_ANDROID_ARM_NEON 1)
+  else()
+    set(CMAKE_ANDROID_ARM_NEON 0)
+  endif()
+  string(APPEND CMAKE_SYSTEM_CUSTOM_CODE
+    "set(CMAKE_ANDROID_ARM_NEON \"${CMAKE_ANDROID_ARM_NEON}\")\n"
+    )
+elseif(DEFINED CMAKE_ANDROID_ARM_NEON)
+  message(FATAL_ERROR "Android: CMAKE_ANDROID_ARM_NEON is set but is valid only for 'armeabi-v7a' architecture.")
+endif()
+
+# Report the chosen architecture.
+message(STATUS "Android: Targeting API '${CMAKE_SYSTEM_VERSION}' with architecture '${CMAKE_ANDROID_ARCH}', ABI '${CMAKE_ANDROID_ARCH_ABI}', and processor '${CMAKE_SYSTEM_PROCESSOR}'")
+
+cmake_policy(POP)
+
+# Include the NDK hook.
+# It can be used by NDK to inject necessary fixes for an earlier cmake.
+if(CMAKE_ANDROID_NDK)
+  include(${CMAKE_ANDROID_NDK}/build/cmake/hooks/post/Android-Determine.cmake OPTIONAL)
+endif()
diff --git a/share/cmake-3.18/Modules/Platform/Android-GNU-C.cmake b/share/cmake-3.22/Modules/Platform/Android-GNU-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android-GNU-C.cmake
rename to share/cmake-3.22/Modules/Platform/Android-GNU-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android-GNU-CXX.cmake b/share/cmake-3.22/Modules/Platform/Android-GNU-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android-GNU-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/Android-GNU-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android-GNU.cmake b/share/cmake-3.22/Modules/Platform/Android-GNU.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android-GNU.cmake
rename to share/cmake-3.22/Modules/Platform/Android-GNU.cmake
diff --git a/share/cmake-3.22/Modules/Platform/Android-Initialize.cmake b/share/cmake-3.22/Modules/Platform/Android-Initialize.cmake
new file mode 100644
index 0000000..63bc949
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Android-Initialize.cmake
@@ -0,0 +1,112 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+# When CMAKE_SYSTEM_NAME is "Android", CMakeSystemSpecificInitialize loads this
+# module.
+
+# Include the NDK hook.
+# It can be used by NDK to inject necessary fixes for an earlier cmake.
+if(CMAKE_ANDROID_NDK)
+  include(${CMAKE_ANDROID_NDK}/build/cmake/hooks/pre/Android-Initialize.cmake OPTIONAL)
+endif()
+
+# Support for NVIDIA Nsight Tegra Visual Studio Edition was previously
+# implemented in the CMake VS IDE generators.  Avoid interfering with
+# that functionality for now.
+if(CMAKE_VS_PLATFORM_NAME STREQUAL "Tegra-Android")
+  return()
+endif()
+
+# Commonly used Android toolchain files that pre-date CMake upstream support
+# set CMAKE_SYSTEM_VERSION to 1.  Avoid interfering with them.
+if(CMAKE_SYSTEM_VERSION EQUAL 1)
+  return()
+endif()
+
+set(CMAKE_BUILD_TYPE_INIT "RelWithDebInfo")
+
+if(CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED)
+  # Tell CMake not to search host sysroots for headers/libraries.
+
+  # All paths added to CMAKE_SYSTEM_*_PATH below will be rerooted under
+  # CMAKE_FIND_ROOT_PATH. This is set because:
+  # 1. Users may structure their libraries in a way similar to NDK. When they do that,
+  #    they can simply append another path to CMAKE_FIND_ROOT_PATH.
+  # 2. CMAKE_FIND_ROOT_PATH must be non-empty for CMAKE_FIND_ROOT_PATH_MODE_* == ONLY
+  #    to be meaningful. https://github.com/android-ndk/ndk/issues/890
+  list(APPEND CMAKE_FIND_ROOT_PATH "${CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED}/sysroot")
+
+  # Allow users to override these values in case they want more strict behaviors.
+  # For example, they may want to prevent the NDK's libz from being picked up so
+  # they can use their own.
+  # https://github.com/android-ndk/ndk/issues/517
+  if(NOT DEFINED CMAKE_FIND_ROOT_PATH_MODE_PROGRAM)
+    set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+  endif()
+
+  if(NOT DEFINED CMAKE_FIND_ROOT_PATH_MODE_LIBRARY)
+    set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+  endif()
+
+  if(NOT DEFINED CMAKE_FIND_ROOT_PATH_MODE_INCLUDE)
+    set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+  endif()
+
+  if(NOT DEFINED CMAKE_FIND_ROOT_PATH_MODE_PACKAGE)
+    set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
+  endif()
+
+  # Allows CMake to find headers in the architecture-specific include directories.
+  set(CMAKE_LIBRARY_ARCHITECTURE "${CMAKE_ANDROID_ARCH_TRIPLE}")
+
+  # Instructs CMake to search the correct API level for libraries.
+  # Besides the paths like <root>/<prefix>/lib/<arch>, cmake also searches <root>/<prefix>.
+  # So we can add the API level specific directory directly.
+  # https://github.com/android/ndk/issues/929
+  list(PREPEND CMAKE_SYSTEM_PREFIX_PATH
+    "/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}/${CMAKE_SYSTEM_VERSION}"
+    )
+
+  list(APPEND CMAKE_SYSTEM_PROGRAM_PATH "${CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED}/bin")
+endif()
+
+# Skip sysroot selection if the NDK has a unified toolchain.
+if(CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED)
+  return()
+endif()
+
+# Natively compiling on an Android host doesn't use the NDK cross-compilation
+# tools.
+if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Android")
+  return()
+endif()
+
+if(NOT CMAKE_SYSROOT)
+  if(CMAKE_ANDROID_NDK)
+    set(CMAKE_SYSROOT "${CMAKE_ANDROID_NDK}/platforms/android-${CMAKE_SYSTEM_VERSION}/arch-${CMAKE_ANDROID_ARCH}")
+    if(NOT CMAKE_ANDROID_NDK_DEPRECATED_HEADERS)
+      set(CMAKE_SYSROOT_COMPILE "${CMAKE_ANDROID_NDK}/sysroot")
+    endif()
+  elseif(CMAKE_ANDROID_STANDALONE_TOOLCHAIN)
+    set(CMAKE_SYSROOT "${CMAKE_ANDROID_STANDALONE_TOOLCHAIN}/sysroot")
+  endif()
+endif()
+
+if(CMAKE_SYSROOT)
+  if(NOT IS_DIRECTORY "${CMAKE_SYSROOT}")
+    message(FATAL_ERROR
+      "Android: The system root directory needed for the selected Android version and architecture does not exist:\n"
+      "  ${CMAKE_SYSROOT}\n"
+      )
+  endif()
+else()
+  message(FATAL_ERROR
+    "Android: No CMAKE_SYSROOT was selected."
+    )
+endif()
+
+# Include the NDK hook.
+# It can be used by NDK to inject necessary fixes for an earlier cmake.
+if(CMAKE_ANDROID_NDK)
+  include(${CMAKE_ANDROID_NDK}/build/cmake/hooks/post/Android-Initialize.cmake OPTIONAL)
+endif()
diff --git a/share/cmake-3.22/Modules/Platform/Android.cmake b/share/cmake-3.22/Modules/Platform/Android.cmake
new file mode 100644
index 0000000..6944e32
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Android.cmake
@@ -0,0 +1,42 @@
+# Include the NDK hook.
+# It can be used by NDK to inject necessary fixes for an earlier cmake.
+if(CMAKE_ANDROID_NDK)
+  include(${CMAKE_ANDROID_NDK}/build/cmake/hooks/pre/Android.cmake OPTIONAL)
+endif()
+
+include(Platform/Linux)
+
+set(ANDROID 1)
+
+# Natively compiling on an Android host doesn't need these flags to be reset.
+if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Android")
+  return()
+endif()
+
+# Conventionally Android does not use versioned soname
+# But in modern versions it is acceptable
+if(NOT DEFINED CMAKE_PLATFORM_NO_VERSIONED_SONAME)
+  set(CMAKE_PLATFORM_NO_VERSIONED_SONAME 1)
+endif()
+
+# Android reportedly ignores RPATH, and we cannot predict the install
+# location anyway.
+set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "")
+
+# Nsight Tegra Visual Studio Edition takes care of
+# prefixing library names with '-l'.
+if(CMAKE_VS_PLATFORM_NAME STREQUAL "Tegra-Android")
+  set(CMAKE_LINK_LIBRARY_FLAG "")
+endif()
+
+# Commonly used Android toolchain files that pre-date CMake upstream support
+# set CMAKE_SYSTEM_VERSION to 1.  Avoid interfering with them.
+if(CMAKE_SYSTEM_VERSION EQUAL 1)
+  return()
+endif()
+
+# Include the NDK hook.
+# It can be used by NDK to inject necessary fixes for an earlier cmake.
+if(CMAKE_ANDROID_NDK)
+  include(${CMAKE_ANDROID_NDK}/build/cmake/hooks/post/Android.cmake OPTIONAL)
+endif()
diff --git a/share/cmake-3.22/Modules/Platform/Android/Determine-Compiler-NDK.cmake b/share/cmake-3.22/Modules/Platform/Android/Determine-Compiler-NDK.cmake
new file mode 100644
index 0000000..a4d67c4
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Android/Determine-Compiler-NDK.cmake
@@ -0,0 +1,271 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+# In Android NDK r19 and above there is a single clang toolchain.
+if(CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED)
+  if(CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION AND NOT CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION STREQUAL "clang")
+    message(FATAL_ERROR
+      "Android: The CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION value '${CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION}' "
+      "is not supported by this NDK.  It must be 'clang' or not set at all."
+      )
+  endif()
+  message(STATUS "Android: Selected unified Clang toolchain")
+  set(_ANDROID_TOOL_NDK_TOOLCHAIN_VERSION "clang")
+  set(_ANDROID_TOOL_C_COMPILER "${CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED}/bin/clang${_ANDROID_HOST_EXT}")
+  set(_ANDROID_TOOL_C_TOOLCHAIN_MACHINE "${CMAKE_ANDROID_ARCH_TRIPLE}")
+  set(_ANDROID_TOOL_C_TOOLCHAIN_VERSION "")
+  set(_ANDROID_TOOL_C_COMPILER_EXTERNAL_TOOLCHAIN "")
+  set(_ANDROID_TOOL_C_TOOLCHAIN_PREFIX "${CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED}/bin/${CMAKE_ANDROID_ARCH_TRIPLE}-")
+  set(_ANDROID_TOOL_C_TOOLCHAIN_SUFFIX "${_ANDROID_HOST_EXT}")
+  set(_ANDROID_TOOL_CXX_COMPILER "${CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED}/bin/clang++${_ANDROID_HOST_EXT}")
+  set(_ANDROID_TOOL_CXX_TOOLCHAIN_MACHINE "${CMAKE_ANDROID_ARCH_TRIPLE}")
+  set(_ANDROID_TOOL_CXX_TOOLCHAIN_VERSION "")
+  set(_ANDROID_TOOL_CXX_COMPILER_EXTERNAL_TOOLCHAIN "")
+  set(_ANDROID_TOOL_CXX_TOOLCHAIN_PREFIX "${CMAKE_ANDROID_NDK_TOOLCHAIN_UNIFIED}/bin/${CMAKE_ANDROID_ARCH_TRIPLE}-")
+  set(_ANDROID_TOOL_CXX_TOOLCHAIN_SUFFIX "${_ANDROID_HOST_EXT}")
+  set(_CMAKE_TOOLCHAIN_PREFIX "${CMAKE_ANDROID_ARCH_TRIPLE}-")
+  return()
+endif()
+
+# In Android NDK releases there is build system toolchain selection logic in
+# these files:
+#
+# * <ndk>/build/core/init.mk
+# * <ndk>/build/core/setup-toolchain.mk
+# * <ndk>/[build/core/]toolchains/<toolchain>/{config.mk,setup.mk}
+#
+# We parse information out of the ``config.mk`` and ``setup.mk`` files below.
+#
+# There is also a "toolchains" directory with the prebuilt toolchains themselves:
+#
+# * <triple-or-arch>-<gcc-version>/prebuilt/<host>/bin/<triple>-gcc(.exe)?
+#   The gcc compiler to be invoked.
+#
+# * llvm*/prebuilt/<host>/bin/clang
+#   The clang compiler to be invoked with flags:
+#     -target <triple>
+#     -gcc-toolchain <ndk>/toolchains/<triple-or-arch>-<gcc-version>
+
+# Glob available toolchains in the NDK, restricted by any version request.
+if(CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION STREQUAL "clang")
+  set(_ANDROID_TOOL_PATTERNS "*-clang" "*-clang[0-9].[0-9]")
+elseif(CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION)
+  if(NOT CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION MATCHES "^(clang)?[0-9]\\.[0-9]$")
+    message(FATAL_ERROR
+      "Android: The CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION value '${CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION}' "
+      "is not one of the allowed forms:\n"
+      "  <major>.<minor>       = GCC of specified version\n"
+      "  clang<major>.<minor>  = Clang of specified version\n"
+      "  clang                 = Clang of most recent available version\n"
+      )
+  endif()
+  set(_ANDROID_TOOL_PATTERNS "*-${CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION}")
+else()
+  # If we can find any gcc toolchains then use one by default.
+  # Otherwise we look for clang toolchains (e.g. NDK r18+).
+  file(GLOB _ANDROID_CONFIG_MKS_FOR_GCC
+    "${CMAKE_ANDROID_NDK}/build/core/toolchains/*-[0-9].[0-9]/config.mk"
+    "${CMAKE_ANDROID_NDK}/toolchains/*-[0-9].[0-9]/config.mk"
+    )
+  if(_ANDROID_CONFIG_MKS_FOR_GCC)
+    set(_ANDROID_TOOL_PATTERNS "*-[0-9].[0-9]")
+  else()
+    set(_ANDROID_TOOL_PATTERNS "*-clang")
+  endif()
+  unset(_ANDROID_CONFIG_MKS_FOR_GCC)
+endif()
+set(_ANDROID_CONFIG_MK_PATTERNS)
+foreach(base "build/core/toolchains" "toolchains")
+  foreach(pattern IN LISTS _ANDROID_TOOL_PATTERNS)
+    list(APPEND _ANDROID_CONFIG_MK_PATTERNS
+      "${CMAKE_ANDROID_NDK}/${base}/${pattern}/config.mk"
+      )
+  endforeach()
+endforeach()
+unset(_ANDROID_TOOL_PATTERNS)
+file(GLOB _ANDROID_CONFIG_MKS ${_ANDROID_CONFIG_MK_PATTERNS})
+unset(_ANDROID_CONFIG_MK_PATTERNS)
+
+# Find the newest toolchain version matching the ABI.
+set(_ANDROID_TOOL_NAME "")
+set(_ANDROID_TOOL_VERS 0)
+set(_ANDROID_TOOL_VERS_NDK "")
+set(_ANDROID_TOOL_SETUP_MK "")
+foreach(config_mk IN LISTS _ANDROID_CONFIG_MKS)
+  # Check that the toolchain matches the ABI.
+  file(STRINGS "${config_mk}" _ANDROID_TOOL_ABIS REGEX "^TOOLCHAIN_ABIS :=.* ${CMAKE_ANDROID_ARCH_ABI}( |$)")
+  if(NOT _ANDROID_TOOL_ABIS)
+    continue()
+  endif()
+  unset(_ANDROID_TOOL_ABIS)
+
+  # Check the version.
+  if("${config_mk}" MATCHES [[/([^/]+-((clang)?([0-9]\.[0-9]|)))/config.mk$]])
+    set(_ANDROID_CUR_NAME "${CMAKE_MATCH_1}")
+    set(_ANDROID_CUR_VERS "${CMAKE_MATCH_4}")
+    set(_ANDROID_CUR_VERS_NDK "${CMAKE_MATCH_2}")
+    if(_ANDROID_TOOL_VERS STREQUAL "")
+      # already the latest possible
+    elseif(_ANDROID_CUR_VERS STREQUAL "" OR _ANDROID_CUR_VERS VERSION_GREATER _ANDROID_TOOL_VERS)
+      set(_ANDROID_TOOL_NAME "${_ANDROID_CUR_NAME}")
+      set(_ANDROID_TOOL_VERS "${_ANDROID_CUR_VERS}")
+      set(_ANDROID_TOOL_VERS_NDK "${_ANDROID_CUR_VERS_NDK}")
+      string(REPLACE "/config.mk" "/setup.mk" _ANDROID_TOOL_SETUP_MK "${config_mk}")
+    endif()
+    unset(_ANDROID_CUR_TOOL)
+    unset(_ANDROID_CUR_VERS)
+    unset(_ANDROID_CUR_VERS_NDK)
+  endif()
+endforeach()
+
+# Verify that we have a suitable toolchain.
+if(NOT _ANDROID_TOOL_NAME)
+  if(_ANDROID_CONFIG_MKS)
+    string(REPLACE ";" "\n  " _ANDROID_TOOLS_MSG "after considering:;${_ANDROID_CONFIG_MKS}")
+  else()
+    set(_ANDROID_TOOLS_MSG "")
+  endif()
+  if(CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION)
+    string(CONCAT _ANDROID_TOOLS_MSG
+      "of the version specified by CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION:\n"
+      "  ${CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION}\n"
+      "${_ANDROID_TOOLS_MSG}")
+  endif()
+  message(FATAL_ERROR
+    "Android: No toolchain for ABI '${CMAKE_ANDROID_ARCH_ABI}' found in the NDK:\n"
+    "  ${CMAKE_ANDROID_NDK}\n"
+    "${_ANDROID_TOOLS_MSG}"
+    )
+endif()
+unset(_ANDROID_CONFIG_MKS)
+
+# For clang toolchains we still need to find a gcc toolchain.
+if(_ANDROID_TOOL_NAME MATCHES "-clang")
+  set(_ANDROID_TOOL_CLANG_NAME "${_ANDROID_TOOL_NAME}")
+  set(_ANDROID_TOOL_CLANG_VERS "${_ANDROID_TOOL_VERS}")
+  set(_ANDROID_TOOL_NAME "")
+  set(_ANDROID_TOOL_VERS "")
+else()
+  set(_ANDROID_TOOL_CLANG_NAME "")
+  set(_ANDROID_TOOL_CLANG_VERS "")
+endif()
+
+# Parse the toolchain setup.mk file to extract information we need.
+# Their content is not standardized across toolchains or NDK versions,
+# so we match known cases.  Note that the parsing is stateful across
+# lines because we need to substitute for some Make variable references.
+if(CMAKE_ANDROID_NDK_TOOLCHAIN_DEBUG)
+  message(STATUS "loading: ${_ANDROID_TOOL_SETUP_MK}")
+endif()
+file(STRINGS "${_ANDROID_TOOL_SETUP_MK}" _ANDROID_TOOL_SETUP REGEX "^(LLVM|TOOLCHAIN)_[A-Z_]+ +:= +.*$")
+unset(_ANDROID_TOOL_SETUP_MK)
+set(_ANDROID_TOOL_PREFIX "")
+set(_ANDROID_TOOL_NAME_ONLY "")
+set(_ANDROID_TOOL_LLVM_NAME "llvm")
+set(_ANDROID_TOOL_LLVM_VERS "")
+foreach(line IN LISTS _ANDROID_TOOL_SETUP)
+  if(CMAKE_ANDROID_NDK_TOOLCHAIN_DEBUG)
+    message(STATUS "setup.mk: ${line}")
+  endif()
+
+  if(line MATCHES [[^TOOLCHAIN_PREFIX +:= +.*/bin/([^$/ ]*) *$]])
+    # We just matched the toolchain prefix with no Make variable references.
+    set(_ANDROID_TOOL_PREFIX "${CMAKE_MATCH_1}")
+  elseif(_ANDROID_TOOL_CLANG_NAME)
+    # For clang toolchains we need to find more information.
+    if(line MATCHES [[^TOOLCHAIN_VERSION +:= +([0-9.]+) *$]])
+      # We just matched the gcc toolchain version number.  Save it for later.
+      set(_ANDROID_TOOL_VERS "${CMAKE_MATCH_1}")
+    elseif(line MATCHES [[^TOOLCHAIN_NAME +:= +(.*\$\(TOOLCHAIN_VERSION\)) *$]])
+      # We just matched the gcc toolchain name with a version number placeholder, so substitute it.
+      # The gcc toolchain version number will have already been extracted from a TOOLCHAIN_VERSION line.
+      string(REPLACE "$(TOOLCHAIN_VERSION)" "${_ANDROID_TOOL_VERS}" _ANDROID_TOOL_NAME "${CMAKE_MATCH_1}")
+    elseif(line MATCHES [[^TOOLCHAIN_NAME +:= +([^$/ ]+) *$]])
+      # We just matched the gcc toolchain name without version number.  Save it for later.
+      set(_ANDROID_TOOL_NAME_ONLY "${CMAKE_MATCH_1}")
+    elseif(line MATCHES [[^TOOLCHAIN_PREFIX +:= +.*/bin/(\$\(TOOLCHAIN_NAME\)-) *$]])
+      # We just matched the toolchain prefix with a name placeholder, so substitute it.
+      # The gcc toolchain name will have already been extracted without version number from a TOOLCHAIN_NAME line.
+      string(REPLACE "$(TOOLCHAIN_NAME)" "${_ANDROID_TOOL_NAME_ONLY}" _ANDROID_TOOL_PREFIX "${CMAKE_MATCH_1}")
+    elseif(line MATCHES [[^LLVM_VERSION +:= +([0-9.]+)$]])
+      # We just matched the llvm prebuilt binary toolchain version number.  Save it for later.
+      set(_ANDROID_TOOL_LLVM_VERS "${CMAKE_MATCH_1}")
+    elseif(line MATCHES [[^LLVM_NAME +:= +(llvm-\$\(LLVM_VERSION\)) *$]])
+      # We just matched the llvm prebuilt binary toolchain directory name with a version number placeholder,
+      # so substitute it. The llvm prebuilt binary toolchain version number will have already been extracted
+      # from a LLVM_VERSION line.
+      string(REPLACE "$(LLVM_VERSION)" "${_ANDROID_TOOL_LLVM_VERS}" _ANDROID_TOOL_LLVM_NAME "${CMAKE_MATCH_1}")
+    elseif(line MATCHES [[^LLVM_TOOLCHAIN_PREBUILT_ROOT +:= +\$\(call get-toolchain-root.*,([^$ ]+)\) *$]])
+      # We just matched the llvm prebuilt binary toolchain directory name.
+      set(_ANDROID_TOOL_LLVM_NAME "${CMAKE_MATCH_1}")
+    elseif(line MATCHES [[^TOOLCHAIN_ROOT +:= +\$\(call get-toolchain-root.*,(\$\(TOOLCHAIN_NAME\)-[0-9.]+)\) *$]])
+      # We just matched a placeholder for the name followed by a version number.
+      # The gcc toolchain name will have already been extracted without version number from a TOOLCHAIN_NAME line.
+      # Substitute for the placeholder to get the full gcc toolchain name.
+      string(REPLACE "$(TOOLCHAIN_NAME)" "${_ANDROID_TOOL_NAME_ONLY}" _ANDROID_TOOL_NAME "${CMAKE_MATCH_1}")
+    elseif(line MATCHES [[^TOOLCHAIN_ROOT +:= +\$\(call get-toolchain-root.*,([^$ ]+)\) *$]])
+      # We just matched the full gcc toolchain name without placeholder.
+      set(_ANDROID_TOOL_NAME "${CMAKE_MATCH_1}")
+    endif()
+  endif()
+endforeach()
+unset(_ANDROID_TOOL_NAME_ONLY)
+unset(_ANDROID_TOOL_LLVM_VERS)
+unset(_ANDROID_TOOL_SETUP)
+
+# Fall back to parsing the version and prefix from the tool name.
+if(NOT _ANDROID_TOOL_VERS AND "${_ANDROID_TOOL_NAME}" MATCHES "-([0-9.]+)$")
+  set(_ANDROID_TOOL_VERS "${CMAKE_MATCH_1}")
+endif()
+if(NOT _ANDROID_TOOL_PREFIX AND "${_ANDROID_TOOL_NAME}" MATCHES "^(.*-)[0-9.]+$")
+  set(_ANDROID_TOOL_PREFIX "${CMAKE_MATCH_1}")
+endif()
+
+# Help CMakeFindBinUtils locate things.
+set(_CMAKE_TOOLCHAIN_PREFIX "${_ANDROID_TOOL_PREFIX}")
+
+set(_ANDROID_TOOL_NDK_TOOLCHAIN_VERSION "${_ANDROID_TOOL_VERS_NDK}")
+
+# _ANDROID_TOOL_PREFIX should now match `gcc -dumpmachine`.
+string(REGEX REPLACE "-$" "" _ANDROID_TOOL_C_TOOLCHAIN_MACHINE "${_ANDROID_TOOL_PREFIX}")
+
+set(_ANDROID_TOOL_C_TOOLCHAIN_VERSION "${_ANDROID_TOOL_VERS}")
+set(_ANDROID_TOOL_C_TOOLCHAIN_PREFIX "${CMAKE_ANDROID_NDK}/toolchains/${_ANDROID_TOOL_NAME}/prebuilt/${CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG}/bin/${_ANDROID_TOOL_PREFIX}")
+set(_ANDROID_TOOL_C_TOOLCHAIN_SUFFIX "${_ANDROID_HOST_EXT}")
+
+set(_ANDROID_TOOL_CXX_TOOLCHAIN_MACHINE "${_ANDROID_TOOL_C_TOOLCHAIN_MACHINE}")
+set(_ANDROID_TOOL_CXX_TOOLCHAIN_VERSION "${_ANDROID_TOOL_C_TOOLCHAIN_VERSION}")
+set(_ANDROID_TOOL_CXX_TOOLCHAIN_PREFIX "${_ANDROID_TOOL_C_TOOLCHAIN_PREFIX}")
+set(_ANDROID_TOOL_CXX_TOOLCHAIN_SUFFIX "${_ANDROID_TOOL_C_TOOLCHAIN_SUFFIX}")
+
+if(_ANDROID_TOOL_CLANG_NAME)
+  message(STATUS "Android: Selected Clang toolchain '${_ANDROID_TOOL_CLANG_NAME}' with GCC toolchain '${_ANDROID_TOOL_NAME}'")
+  set(_ANDROID_TOOL_C_COMPILER "${CMAKE_ANDROID_NDK}/toolchains/${_ANDROID_TOOL_LLVM_NAME}/prebuilt/${CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG}/bin/clang${_ANDROID_HOST_EXT}")
+  set(_ANDROID_TOOL_C_COMPILER_EXTERNAL_TOOLCHAIN ${CMAKE_ANDROID_NDK}/toolchains/${_ANDROID_TOOL_NAME}/prebuilt/${CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG})
+  set(_ANDROID_TOOL_CXX_COMPILER "${CMAKE_ANDROID_NDK}/toolchains/${_ANDROID_TOOL_LLVM_NAME}/prebuilt/${CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG}/bin/clang++${_ANDROID_HOST_EXT}")
+  set(_ANDROID_TOOL_CXX_COMPILER_EXTERNAL_TOOLCHAIN "${_ANDROID_TOOL_C_COMPILER_EXTERNAL_TOOLCHAIN}")
+else()
+  message(STATUS "Android: Selected GCC toolchain '${_ANDROID_TOOL_NAME}'")
+  set(_ANDROID_TOOL_C_COMPILER "${_ANDROID_TOOL_C_TOOLCHAIN_PREFIX}gcc${_ANDROID_TOOL_C_TOOLCHAIN_SUFFIX}")
+  set(_ANDROID_TOOL_C_COMPILER_EXTERNAL_TOOLCHAIN "")
+  set(_ANDROID_TOOL_CXX_COMPILER "${_ANDROID_TOOL_CXX_TOOLCHAIN_PREFIX}g++${_ANDROID_TOOL_CXX_TOOLCHAIN_SUFFIX}")
+  set(_ANDROID_TOOL_CXX_COMPILER_EXTERNAL_TOOLCHAIN "")
+endif()
+
+if(CMAKE_ANDROID_NDK_TOOLCHAIN_DEBUG)
+  message(STATUS "_ANDROID_TOOL_NAME=${_ANDROID_TOOL_NAME}")
+  message(STATUS "_ANDROID_TOOL_VERS=${_ANDROID_TOOL_VERS}")
+  message(STATUS "_ANDROID_TOOL_VERS_NDK=${_ANDROID_TOOL_VERS_NDK}")
+  message(STATUS "_ANDROID_TOOL_PREFIX=${_ANDROID_TOOL_PREFIX}")
+  message(STATUS "_ANDROID_TOOL_CLANG_NAME=${_ANDROID_TOOL_CLANG_NAME}")
+  message(STATUS "_ANDROID_TOOL_CLANG_VERS=${_ANDROID_TOOL_CLANG_VERS}")
+  message(STATUS "_ANDROID_TOOL_LLVM_NAME=${_ANDROID_TOOL_LLVM_NAME}")
+endif()
+
+unset(_ANDROID_TOOL_NAME)
+unset(_ANDROID_TOOL_VERS)
+unset(_ANDROID_TOOL_VERS_NDK)
+unset(_ANDROID_TOOL_PREFIX)
+unset(_ANDROID_TOOL_CLANG_NAME)
+unset(_ANDROID_TOOL_CLANG_VERS)
+unset(_ANDROID_TOOL_LLVM_NAME)
diff --git a/share/cmake-3.18/Modules/Platform/Android/Determine-Compiler-Standalone.cmake b/share/cmake-3.22/Modules/Platform/Android/Determine-Compiler-Standalone.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/Determine-Compiler-Standalone.cmake
rename to share/cmake-3.22/Modules/Platform/Android/Determine-Compiler-Standalone.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/Determine-Compiler.cmake b/share/cmake-3.22/Modules/Platform/Android/Determine-Compiler.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/Determine-Compiler.cmake
rename to share/cmake-3.22/Modules/Platform/Android/Determine-Compiler.cmake
diff --git a/share/cmake-3.22/Modules/Platform/Android/VCXProjInspect.vcxproj.in b/share/cmake-3.22/Modules/Platform/Android/VCXProjInspect.vcxproj.in
new file mode 100644
index 0000000..6919d2c
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Android/VCXProjInspect.vcxproj.in
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|@vcx_platform@">
+      <Configuration>Debug</Configuration>
+      <Platform>@vcx_platform@</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{14D44772-ECF7-47BD-9E29-BC62FAF940A5}</ProjectGuid>
+    <RootNamespace>VCXProjInspect</RootNamespace>
+    <Keyword>Android</Keyword>
+    <ApplicationType>Android</ApplicationType>
+    <ApplicationTypeRevision>@vcx_revision@</ApplicationTypeRevision>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|@vcx_platform@'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|@vcx_platform@'">false</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|@vcx_platform@'">
+    <PostBuildEvent>
+      <Command>%40echo CMAKE_SYSROOT=$(@vcx_sysroot_var@)</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
diff --git a/share/cmake-3.18/Modules/Platform/Android/abi-arm64-v8a-Clang.cmake b/share/cmake-3.22/Modules/Platform/Android/abi-arm64-v8a-Clang.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/abi-arm64-v8a-Clang.cmake
rename to share/cmake-3.22/Modules/Platform/Android/abi-arm64-v8a-Clang.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/abi-arm64-v8a-GNU.cmake b/share/cmake-3.22/Modules/Platform/Android/abi-arm64-v8a-GNU.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/abi-arm64-v8a-GNU.cmake
rename to share/cmake-3.22/Modules/Platform/Android/abi-arm64-v8a-GNU.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/abi-armeabi-Clang.cmake b/share/cmake-3.22/Modules/Platform/Android/abi-armeabi-Clang.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/abi-armeabi-Clang.cmake
rename to share/cmake-3.22/Modules/Platform/Android/abi-armeabi-Clang.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/abi-armeabi-GNU.cmake b/share/cmake-3.22/Modules/Platform/Android/abi-armeabi-GNU.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/abi-armeabi-GNU.cmake
rename to share/cmake-3.22/Modules/Platform/Android/abi-armeabi-GNU.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/abi-armeabi-v6-Clang.cmake b/share/cmake-3.22/Modules/Platform/Android/abi-armeabi-v6-Clang.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/abi-armeabi-v6-Clang.cmake
rename to share/cmake-3.22/Modules/Platform/Android/abi-armeabi-v6-Clang.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/abi-armeabi-v6-GNU.cmake b/share/cmake-3.22/Modules/Platform/Android/abi-armeabi-v6-GNU.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/abi-armeabi-v6-GNU.cmake
rename to share/cmake-3.22/Modules/Platform/Android/abi-armeabi-v6-GNU.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/abi-armeabi-v7a-Clang.cmake b/share/cmake-3.22/Modules/Platform/Android/abi-armeabi-v7a-Clang.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/abi-armeabi-v7a-Clang.cmake
rename to share/cmake-3.22/Modules/Platform/Android/abi-armeabi-v7a-Clang.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/abi-armeabi-v7a-GNU.cmake b/share/cmake-3.22/Modules/Platform/Android/abi-armeabi-v7a-GNU.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/abi-armeabi-v7a-GNU.cmake
rename to share/cmake-3.22/Modules/Platform/Android/abi-armeabi-v7a-GNU.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/abi-common-Clang.cmake b/share/cmake-3.22/Modules/Platform/Android/abi-common-Clang.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/abi-common-Clang.cmake
rename to share/cmake-3.22/Modules/Platform/Android/abi-common-Clang.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/abi-common-GNU.cmake b/share/cmake-3.22/Modules/Platform/Android/abi-common-GNU.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/abi-common-GNU.cmake
rename to share/cmake-3.22/Modules/Platform/Android/abi-common-GNU.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/abi-common.cmake b/share/cmake-3.22/Modules/Platform/Android/abi-common.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/abi-common.cmake
rename to share/cmake-3.22/Modules/Platform/Android/abi-common.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/abi-mips-Clang.cmake b/share/cmake-3.22/Modules/Platform/Android/abi-mips-Clang.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/abi-mips-Clang.cmake
rename to share/cmake-3.22/Modules/Platform/Android/abi-mips-Clang.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/abi-mips-GNU.cmake b/share/cmake-3.22/Modules/Platform/Android/abi-mips-GNU.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/abi-mips-GNU.cmake
rename to share/cmake-3.22/Modules/Platform/Android/abi-mips-GNU.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/abi-mips64-Clang.cmake b/share/cmake-3.22/Modules/Platform/Android/abi-mips64-Clang.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/abi-mips64-Clang.cmake
rename to share/cmake-3.22/Modules/Platform/Android/abi-mips64-Clang.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/abi-mips64-GNU.cmake b/share/cmake-3.22/Modules/Platform/Android/abi-mips64-GNU.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/abi-mips64-GNU.cmake
rename to share/cmake-3.22/Modules/Platform/Android/abi-mips64-GNU.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/abi-x86-Clang.cmake b/share/cmake-3.22/Modules/Platform/Android/abi-x86-Clang.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/abi-x86-Clang.cmake
rename to share/cmake-3.22/Modules/Platform/Android/abi-x86-Clang.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/abi-x86-GNU.cmake b/share/cmake-3.22/Modules/Platform/Android/abi-x86-GNU.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/abi-x86-GNU.cmake
rename to share/cmake-3.22/Modules/Platform/Android/abi-x86-GNU.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/abi-x86_64-Clang.cmake b/share/cmake-3.22/Modules/Platform/Android/abi-x86_64-Clang.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/abi-x86_64-Clang.cmake
rename to share/cmake-3.22/Modules/Platform/Android/abi-x86_64-Clang.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/abi-x86_64-GNU.cmake b/share/cmake-3.22/Modules/Platform/Android/abi-x86_64-GNU.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/abi-x86_64-GNU.cmake
rename to share/cmake-3.22/Modules/Platform/Android/abi-x86_64-GNU.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/ndk-stl-c++.cmake b/share/cmake-3.22/Modules/Platform/Android/ndk-stl-c++.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/ndk-stl-c++.cmake
rename to share/cmake-3.22/Modules/Platform/Android/ndk-stl-c++.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/ndk-stl-c++_shared.cmake b/share/cmake-3.22/Modules/Platform/Android/ndk-stl-c++_shared.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/ndk-stl-c++_shared.cmake
rename to share/cmake-3.22/Modules/Platform/Android/ndk-stl-c++_shared.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/ndk-stl-c++_static.cmake b/share/cmake-3.22/Modules/Platform/Android/ndk-stl-c++_static.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/ndk-stl-c++_static.cmake
rename to share/cmake-3.22/Modules/Platform/Android/ndk-stl-c++_static.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/ndk-stl-gabi++.cmake b/share/cmake-3.22/Modules/Platform/Android/ndk-stl-gabi++.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/ndk-stl-gabi++.cmake
rename to share/cmake-3.22/Modules/Platform/Android/ndk-stl-gabi++.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/ndk-stl-gabi++_shared.cmake b/share/cmake-3.22/Modules/Platform/Android/ndk-stl-gabi++_shared.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/ndk-stl-gabi++_shared.cmake
rename to share/cmake-3.22/Modules/Platform/Android/ndk-stl-gabi++_shared.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/ndk-stl-gabi++_static.cmake b/share/cmake-3.22/Modules/Platform/Android/ndk-stl-gabi++_static.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/ndk-stl-gabi++_static.cmake
rename to share/cmake-3.22/Modules/Platform/Android/ndk-stl-gabi++_static.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/ndk-stl-gnustl.cmake b/share/cmake-3.22/Modules/Platform/Android/ndk-stl-gnustl.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/ndk-stl-gnustl.cmake
rename to share/cmake-3.22/Modules/Platform/Android/ndk-stl-gnustl.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/ndk-stl-gnustl_shared.cmake b/share/cmake-3.22/Modules/Platform/Android/ndk-stl-gnustl_shared.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/ndk-stl-gnustl_shared.cmake
rename to share/cmake-3.22/Modules/Platform/Android/ndk-stl-gnustl_shared.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/ndk-stl-gnustl_static.cmake b/share/cmake-3.22/Modules/Platform/Android/ndk-stl-gnustl_static.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/ndk-stl-gnustl_static.cmake
rename to share/cmake-3.22/Modules/Platform/Android/ndk-stl-gnustl_static.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/ndk-stl-none.cmake b/share/cmake-3.22/Modules/Platform/Android/ndk-stl-none.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/ndk-stl-none.cmake
rename to share/cmake-3.22/Modules/Platform/Android/ndk-stl-none.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/ndk-stl-stlport.cmake b/share/cmake-3.22/Modules/Platform/Android/ndk-stl-stlport.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/ndk-stl-stlport.cmake
rename to share/cmake-3.22/Modules/Platform/Android/ndk-stl-stlport.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/ndk-stl-stlport_shared.cmake b/share/cmake-3.22/Modules/Platform/Android/ndk-stl-stlport_shared.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/ndk-stl-stlport_shared.cmake
rename to share/cmake-3.22/Modules/Platform/Android/ndk-stl-stlport_shared.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/ndk-stl-stlport_static.cmake b/share/cmake-3.22/Modules/Platform/Android/ndk-stl-stlport_static.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/ndk-stl-stlport_static.cmake
rename to share/cmake-3.22/Modules/Platform/Android/ndk-stl-stlport_static.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Android/ndk-stl-system.cmake b/share/cmake-3.22/Modules/Platform/Android/ndk-stl-system.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Android/ndk-stl-system.cmake
rename to share/cmake-3.22/Modules/Platform/Android/ndk-stl-system.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Apple-Absoft-Fortran.cmake b/share/cmake-3.22/Modules/Platform/Apple-Absoft-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-Absoft-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-Absoft-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Apple-Apple-Swift.cmake b/share/cmake-3.22/Modules/Platform/Apple-Apple-Swift.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-Apple-Swift.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-Apple-Swift.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Apple-AppleClang-C.cmake b/share/cmake-3.22/Modules/Platform/Apple-AppleClang-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-AppleClang-C.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-AppleClang-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Apple-AppleClang-CXX.cmake b/share/cmake-3.22/Modules/Platform/Apple-AppleClang-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-AppleClang-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-AppleClang-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Apple-AppleClang-OBJC.cmake b/share/cmake-3.22/Modules/Platform/Apple-AppleClang-OBJC.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-AppleClang-OBJC.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-AppleClang-OBJC.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Apple-AppleClang-OBJCXX.cmake b/share/cmake-3.22/Modules/Platform/Apple-AppleClang-OBJCXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-AppleClang-OBJCXX.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-AppleClang-OBJCXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Apple-Clang-ASM.cmake b/share/cmake-3.22/Modules/Platform/Apple-Clang-ASM.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-Clang-ASM.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-Clang-ASM.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Apple-Clang-C.cmake b/share/cmake-3.22/Modules/Platform/Apple-Clang-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-Clang-C.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-Clang-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Apple-Clang-CXX.cmake b/share/cmake-3.22/Modules/Platform/Apple-Clang-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-Clang-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-Clang-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Apple-Clang-OBJC.cmake b/share/cmake-3.22/Modules/Platform/Apple-Clang-OBJC.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-Clang-OBJC.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-Clang-OBJC.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Apple-Clang-OBJCXX.cmake b/share/cmake-3.22/Modules/Platform/Apple-Clang-OBJCXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-Clang-OBJCXX.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-Clang-OBJCXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Apple-Clang.cmake b/share/cmake-3.22/Modules/Platform/Apple-Clang.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-Clang.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-Clang.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Apple-GNU-C.cmake b/share/cmake-3.22/Modules/Platform/Apple-GNU-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-GNU-C.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-GNU-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Apple-GNU-CXX.cmake b/share/cmake-3.22/Modules/Platform/Apple-GNU-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-GNU-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-GNU-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Apple-GNU-Fortran.cmake b/share/cmake-3.22/Modules/Platform/Apple-GNU-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-GNU-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-GNU-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Apple-GNU-OBJC.cmake b/share/cmake-3.22/Modules/Platform/Apple-GNU-OBJC.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-GNU-OBJC.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-GNU-OBJC.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Apple-GNU-OBJCXX.cmake b/share/cmake-3.22/Modules/Platform/Apple-GNU-OBJCXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-GNU-OBJCXX.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-GNU-OBJCXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Apple-GNU.cmake b/share/cmake-3.22/Modules/Platform/Apple-GNU.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-GNU.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-GNU.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Apple-Intel-C.cmake b/share/cmake-3.22/Modules/Platform/Apple-Intel-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-Intel-C.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-Intel-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Apple-Intel-CXX.cmake b/share/cmake-3.22/Modules/Platform/Apple-Intel-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-Intel-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-Intel-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Apple-Intel-Fortran.cmake b/share/cmake-3.22/Modules/Platform/Apple-Intel-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-Intel-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-Intel-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Apple-Intel.cmake b/share/cmake-3.22/Modules/Platform/Apple-Intel.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-Intel.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-Intel.cmake
diff --git a/share/cmake-3.22/Modules/Platform/Apple-IntelLLVM-C.cmake b/share/cmake-3.22/Modules/Platform/Apple-IntelLLVM-C.cmake
new file mode 100644
index 0000000..8e74729
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Apple-IntelLLVM-C.cmake
@@ -0,0 +1,2 @@
+include(Platform/Apple-IntelLLVM)
+__apple_compiler_intel_llvm(C)
diff --git a/share/cmake-3.22/Modules/Platform/Apple-IntelLLVM-CXX.cmake b/share/cmake-3.22/Modules/Platform/Apple-IntelLLVM-CXX.cmake
new file mode 100644
index 0000000..38640e1
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Apple-IntelLLVM-CXX.cmake
@@ -0,0 +1,2 @@
+include(Platform/Apple-IntelLLVM)
+__apple_compiler_intel_llvm(CXX)
diff --git a/share/cmake-3.22/Modules/Platform/Apple-IntelLLVM-Fortran.cmake b/share/cmake-3.22/Modules/Platform/Apple-IntelLLVM-Fortran.cmake
new file mode 100644
index 0000000..d0486ed
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Apple-IntelLLVM-Fortran.cmake
@@ -0,0 +1,8 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+include(Platform/Apple-IntelLLVM)
+__apple_compiler_intel_llvm(Fortran)
+
+set(CMAKE_Fortran_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ")
+set(CMAKE_Fortran_OSX_CURRENT_VERSION_FLAG "-current_version ")
diff --git a/share/cmake-3.22/Modules/Platform/Apple-IntelLLVM.cmake b/share/cmake-3.22/Modules/Platform/Apple-IntelLLVM.cmake
new file mode 100644
index 0000000..2f9f0ca
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Apple-IntelLLVM.cmake
@@ -0,0 +1,17 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# This module is shared by multiple languages; use include blocker.
+include_guard()
+
+macro(__apple_compiler_intel_llvm lang)
+  set(CMAKE_${lang}_VERBOSE_FLAG "-v -Wl,-v") # also tell linker to print verbose output
+  set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-dynamiclib -Wl,-headerpad_max_install_names")
+  set(CMAKE_SHARED_MODULE_CREATE_${lang}_FLAGS "-bundle -Wl,-headerpad_max_install_names")
+
+  set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Wl,")
+  set(CMAKE_${lang}_LINKER_WRAPPER_FLAG_SEP ",")
+
+  set(CMAKE_${lang}_COMPILE_OPTIONS_VISIBILITY "-fvisibility=")
+endmacro()
diff --git a/share/cmake-3.18/Modules/Platform/Apple-NAG-Fortran.cmake b/share/cmake-3.22/Modules/Platform/Apple-NAG-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-NAG-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-NAG-Fortran.cmake
diff --git a/share/cmake-3.22/Modules/Platform/Apple-NVIDIA-CUDA.cmake b/share/cmake-3.22/Modules/Platform/Apple-NVIDIA-CUDA.cmake
new file mode 100644
index 0000000..35e759a
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Apple-NVIDIA-CUDA.cmake
@@ -0,0 +1,19 @@
+include(Platform/Darwin)
+
+set(__IMPLICIT_LINKS)
+foreach(dir ${CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES})
+  string(APPEND __IMPLICIT_LINKS " -L\"${dir}\"")
+endforeach()
+foreach(lib ${CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES})
+  if(${lib} MATCHES "/")
+    string(APPEND __IMPLICIT_LINKS " \"${lib}\"")
+  else()
+    string(APPEND __IMPLICIT_LINKS " -l${lib}")
+  endif()
+endforeach()
+
+set(CMAKE_SHARED_LIBRARY_CREATE_CUDA_FLAGS "-shared -Wl,-headerpad_max_install_names")
+set(CMAKE_SHARED_MODULE_CREATE_CUDA_FLAGS "-shared -Wl,-headerpad_max_install_names")
+
+set(CMAKE_CUDA_CREATE_SHARED_LIBRARY "<CMAKE_CUDA_HOST_LINK_LAUNCHER> <CMAKE_SHARED_LIBRARY_CUDA_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CUDA_FLAGS> -o <TARGET> <SONAME_FLAG> <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>${__IMPLICIT_LINKS}")
+set(CMAKE_CUDA_CREATE_SHARED_MODULE "<CMAKE_CUDA_HOST_LINK_LAUNCHER> <CMAKE_SHARED_LIBRARY_CUDA_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CUDA_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>${__IMPLICIT_LINKS}")
diff --git a/share/cmake-3.18/Modules/Platform/Apple-PGI-C.cmake b/share/cmake-3.22/Modules/Platform/Apple-PGI-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-PGI-C.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-PGI-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Apple-PGI-CXX.cmake b/share/cmake-3.22/Modules/Platform/Apple-PGI-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-PGI-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-PGI-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Apple-PGI-Fortran.cmake b/share/cmake-3.22/Modules/Platform/Apple-PGI-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-PGI-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-PGI-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Apple-PGI.cmake b/share/cmake-3.22/Modules/Platform/Apple-PGI.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-PGI.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-PGI.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Apple-VisualAge-C.cmake b/share/cmake-3.22/Modules/Platform/Apple-VisualAge-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-VisualAge-C.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-VisualAge-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Apple-VisualAge-CXX.cmake b/share/cmake-3.22/Modules/Platform/Apple-VisualAge-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-VisualAge-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-VisualAge-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Apple-XL-C.cmake b/share/cmake-3.22/Modules/Platform/Apple-XL-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-XL-C.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-XL-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Apple-XL-CXX.cmake b/share/cmake-3.22/Modules/Platform/Apple-XL-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Apple-XL-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/Apple-XL-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BSDOS.cmake b/share/cmake-3.22/Modules/Platform/BSDOS.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BSDOS.cmake
rename to share/cmake-3.22/Modules/Platform/BSDOS.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BeOS.cmake b/share/cmake-3.22/Modules/Platform/BeOS.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BeOS.cmake
rename to share/cmake-3.22/Modules/Platform/BeOS.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneL.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneL.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneL.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneL.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneP-base.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneP-base.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneP-base.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneP-base.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneP-dynamic-GNU-C.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneP-dynamic-GNU-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneP-dynamic-GNU-C.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneP-dynamic-GNU-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneP-dynamic-GNU-CXX.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneP-dynamic-GNU-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneP-dynamic-GNU-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneP-dynamic-GNU-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneP-dynamic-GNU-Fortran.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneP-dynamic-GNU-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneP-dynamic-GNU-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneP-dynamic-GNU-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneP-dynamic-XL-C.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneP-dynamic-XL-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneP-dynamic-XL-C.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneP-dynamic-XL-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneP-dynamic-XL-CXX.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneP-dynamic-XL-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneP-dynamic-XL-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneP-dynamic-XL-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneP-dynamic-XL-Fortran.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneP-dynamic-XL-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneP-dynamic-XL-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneP-dynamic-XL-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneP-dynamic.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneP-dynamic.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneP-dynamic.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneP-dynamic.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneP-static-GNU-C.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneP-static-GNU-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneP-static-GNU-C.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneP-static-GNU-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneP-static-GNU-CXX.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneP-static-GNU-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneP-static-GNU-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneP-static-GNU-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneP-static-GNU-Fortran.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneP-static-GNU-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneP-static-GNU-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneP-static-GNU-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneP-static-XL-C.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneP-static-XL-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneP-static-XL-C.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneP-static-XL-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneP-static-XL-CXX.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneP-static-XL-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneP-static-XL-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneP-static-XL-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneP-static-XL-Fortran.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneP-static-XL-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneP-static-XL-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneP-static-XL-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneP-static.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneP-static.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneP-static.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneP-static.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneQ-base.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneQ-base.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneQ-base.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneQ-base.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneQ-dynamic-GNU-C.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneQ-dynamic-GNU-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneQ-dynamic-GNU-C.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneQ-dynamic-GNU-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneQ-dynamic-GNU-CXX.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneQ-dynamic-GNU-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneQ-dynamic-GNU-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneQ-dynamic-GNU-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneQ-dynamic-GNU-Fortran.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneQ-dynamic-GNU-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneQ-dynamic-GNU-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneQ-dynamic-GNU-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneQ-dynamic-XL-C.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneQ-dynamic-XL-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneQ-dynamic-XL-C.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneQ-dynamic-XL-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneQ-dynamic-XL-CXX.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneQ-dynamic-XL-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneQ-dynamic-XL-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneQ-dynamic-XL-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneQ-dynamic-XL-Fortran.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneQ-dynamic-XL-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneQ-dynamic-XL-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneQ-dynamic-XL-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneQ-dynamic.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneQ-dynamic.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneQ-dynamic.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneQ-dynamic.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneQ-static-GNU-C.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneQ-static-GNU-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneQ-static-GNU-C.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneQ-static-GNU-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneQ-static-GNU-CXX.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneQ-static-GNU-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneQ-static-GNU-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneQ-static-GNU-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneQ-static-GNU-Fortran.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneQ-static-GNU-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneQ-static-GNU-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneQ-static-GNU-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneQ-static-XL-C.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneQ-static-XL-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneQ-static-XL-C.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneQ-static-XL-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneQ-static-XL-CXX.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneQ-static-XL-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneQ-static-XL-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneQ-static-XL-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneQ-static-XL-Fortran.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneQ-static-XL-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneQ-static-XL-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneQ-static-XL-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Platform/BlueGeneQ-static.cmake b/share/cmake-3.22/Modules/Platform/BlueGeneQ-static.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/BlueGeneQ-static.cmake
rename to share/cmake-3.22/Modules/Platform/BlueGeneQ-static.cmake
diff --git a/share/cmake-3.18/Modules/Platform/CYGWIN-Clang-C.cmake b/share/cmake-3.22/Modules/Platform/CYGWIN-Clang-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/CYGWIN-Clang-C.cmake
rename to share/cmake-3.22/Modules/Platform/CYGWIN-Clang-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/CYGWIN-Clang-CXX.cmake b/share/cmake-3.22/Modules/Platform/CYGWIN-Clang-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/CYGWIN-Clang-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/CYGWIN-Clang-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/CYGWIN-Determine-CXX.cmake b/share/cmake-3.22/Modules/Platform/CYGWIN-Determine-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/CYGWIN-Determine-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/CYGWIN-Determine-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/CYGWIN-GNU-C.cmake b/share/cmake-3.22/Modules/Platform/CYGWIN-GNU-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/CYGWIN-GNU-C.cmake
rename to share/cmake-3.22/Modules/Platform/CYGWIN-GNU-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/CYGWIN-GNU-CXX.cmake b/share/cmake-3.22/Modules/Platform/CYGWIN-GNU-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/CYGWIN-GNU-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/CYGWIN-GNU-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/CYGWIN-GNU-Fortran.cmake b/share/cmake-3.22/Modules/Platform/CYGWIN-GNU-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/CYGWIN-GNU-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/CYGWIN-GNU-Fortran.cmake
diff --git a/share/cmake-3.22/Modules/Platform/CYGWIN-GNU.cmake b/share/cmake-3.22/Modules/Platform/CYGWIN-GNU.cmake
new file mode 100644
index 0000000..b81bd4d
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/CYGWIN-GNU.cmake
@@ -0,0 +1,54 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# This module is shared by multiple languages; use include blocker.
+if(__CYGWIN_COMPILER_GNU)
+  return()
+endif()
+set(__CYGWIN_COMPILER_GNU 1)
+
+# TODO: Is -Wl,--enable-auto-import now always default?
+string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT " -Wl,--enable-auto-import")
+
+set(CMAKE_GNULD_IMAGE_VERSION
+  "-Wl,--major-image-version,<TARGET_VERSION_MAJOR>,--minor-image-version,<TARGET_VERSION_MINOR>")
+set(CMAKE_GENERATOR_RC windres)
+macro(__cygwin_compiler_gnu lang)
+  # Binary link rules.
+  set(CMAKE_${lang}_CREATE_SHARED_MODULE
+    "<CMAKE_${lang}_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_MODULE_${lang}_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_MODULE_CREATE_${lang}_FLAGS> -o <TARGET> ${CMAKE_GNULD_IMAGE_VERSION} <OBJECTS> <LINK_LIBRARIES>")
+  set(CMAKE_${lang}_CREATE_SHARED_LIBRARY
+    "<CMAKE_${lang}_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_${lang}_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS> -o <TARGET> -Wl,--out-implib,<TARGET_IMPLIB> ${CMAKE_GNULD_IMAGE_VERSION} <OBJECTS> <LINK_LIBRARIES>")
+  set(CMAKE_${lang}_LINK_EXECUTABLE
+    "<CMAKE_${lang}_COMPILER> <FLAGS> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> -Wl,--out-implib,<TARGET_IMPLIB> ${CMAKE_GNULD_IMAGE_VERSION} <LINK_LIBRARIES>")
+  set(CMAKE_${lang}_CREATE_WIN32_EXE "-mwindows")
+
+   # No -fPIC on cygwin
+  set(CMAKE_${lang}_COMPILE_OPTIONS_PIC "")
+  set(CMAKE_${lang}_COMPILE_OPTIONS_PIE "")
+  set(_CMAKE_${lang}_PIE_MAY_BE_SUPPORTED_BY_LINKER NO)
+  set(CMAKE_${lang}_LINK_OPTIONS_PIE "")
+  set(CMAKE_${lang}_LINK_OPTIONS_NO_PIE "")
+  set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "")
+
+  # Initialize C link type selection flags.  These flags are used when
+  # building a shared library, shared module, or executable that links
+  # to other libraries to select whether to use the static or shared
+  # versions of the libraries.
+  foreach(type SHARED_LIBRARY SHARED_MODULE EXE)
+    set(CMAKE_${type}_LINK_STATIC_${lang}_FLAGS "-Wl,-Bstatic")
+    set(CMAKE_${type}_LINK_DYNAMIC_${lang}_FLAGS "-Wl,-Bdynamic")
+  endforeach()
+
+  set(CMAKE_EXE_EXPORTS_${lang}_FLAG "-Wl,--export-all-symbols")
+  # TODO: Is -Wl,--enable-auto-import now always default?
+  string(APPEND CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS " -Wl,--enable-auto-import")
+  set(CMAKE_SHARED_MODULE_CREATE_${lang}_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS}")
+
+  if(NOT CMAKE_RC_COMPILER_INIT)
+    set(CMAKE_RC_COMPILER_INIT windres)
+  endif()
+
+  enable_language(RC)
+endmacro()
diff --git a/share/cmake-3.18/Modules/Platform/CYGWIN-windres.cmake b/share/cmake-3.22/Modules/Platform/CYGWIN-windres.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/CYGWIN-windres.cmake
rename to share/cmake-3.22/Modules/Platform/CYGWIN-windres.cmake
diff --git a/share/cmake-3.22/Modules/Platform/CYGWIN.cmake b/share/cmake-3.22/Modules/Platform/CYGWIN.cmake
new file mode 100644
index 0000000..fc4ea2e
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/CYGWIN.cmake
@@ -0,0 +1,74 @@
+if("${CMAKE_MINIMUM_REQUIRED_VERSION}" VERSION_LESS "2.8.3.20101214" AND NOT MSYS)
+  set(__USE_CMAKE_LEGACY_CYGWIN_WIN32 1)
+endif()
+if(NOT DEFINED WIN32 AND NOT MSYS)
+  set(WIN32 0)
+  if(DEFINED __USE_CMAKE_LEGACY_CYGWIN_WIN32)
+    if(NOT DEFINED CMAKE_LEGACY_CYGWIN_WIN32
+        AND DEFINED ENV{CMAKE_LEGACY_CYGWIN_WIN32})
+      set(CMAKE_LEGACY_CYGWIN_WIN32 $ENV{CMAKE_LEGACY_CYGWIN_WIN32})
+    endif()
+    if(CMAKE_LEGACY_CYGWIN_WIN32)
+      message(STATUS "Defining WIN32 under Cygwin due to CMAKE_LEGACY_CYGWIN_WIN32")
+      set(WIN32 1)
+    elseif("x${CMAKE_LEGACY_CYGWIN_WIN32}" STREQUAL "x")
+      message(WARNING "CMake no longer defines WIN32 on Cygwin!"
+        "\n"
+        "(1) If you are just trying to build this project, ignore this warning "
+        "or quiet it by setting CMAKE_LEGACY_CYGWIN_WIN32=0 in your environment or "
+        "in the CMake cache.  "
+        "If later configuration or build errors occur then this project may "
+        "have been written under the assumption that Cygwin is WIN32.  "
+        "In that case, set CMAKE_LEGACY_CYGWIN_WIN32=1 instead."
+        "\n"
+        "(2) If you are developing this project, add the line\n"
+        "  set(CMAKE_LEGACY_CYGWIN_WIN32 0) # Remove when CMake >= 2.8.4 is required\n"
+        "at the top of your top-level CMakeLists.txt file or set the minimum "
+        "required version of CMake to 2.8.4 or higher.  "
+        "Then teach your project to build on Cygwin without WIN32.")
+    endif()
+  elseif(DEFINED CMAKE_LEGACY_CYGWIN_WIN32)
+    message(AUTHOR_WARNING "CMAKE_LEGACY_CYGWIN_WIN32 ignored because\n"
+      "  cmake_minimum_required(VERSION ${CMAKE_MINIMUM_REQUIRED_VERSION})\n"
+      "is at least 2.8.4.")
+  endif()
+endif()
+if(DEFINED __USE_CMAKE_LEGACY_CYGWIN_WIN32)
+  # Pass WIN32 legacy setting to scripts.
+  if(WIN32)
+    set(ENV{CMAKE_LEGACY_CYGWIN_WIN32} 1)
+  else()
+    set(ENV{CMAKE_LEGACY_CYGWIN_WIN32} 0)
+  endif()
+  unset(__USE_CMAKE_LEGACY_CYGWIN_WIN32)
+endif()
+
+set(CYGWIN 1)
+
+set(CMAKE_SHARED_LIBRARY_PREFIX "cyg")
+set(CMAKE_SHARED_LIBRARY_SUFFIX ".dll")
+set(CMAKE_SHARED_MODULE_PREFIX "cyg")
+set(CMAKE_SHARED_MODULE_SUFFIX ".dll")
+set(CMAKE_IMPORT_LIBRARY_PREFIX "lib")
+set(CMAKE_IMPORT_LIBRARY_SUFFIX ".dll.a")
+set(CMAKE_EXECUTABLE_SUFFIX ".exe")          # .exe
+# Modules have a different default prefix that shared libs.
+set(CMAKE_MODULE_EXISTS 1)
+
+set(CMAKE_FIND_LIBRARY_PREFIXES "lib")
+set(CMAKE_FIND_LIBRARY_SUFFIXES ".dll.a" ".a")
+
+# Shared libraries on cygwin can be named with their version number.
+set(CMAKE_SHARED_LIBRARY_NAME_WITH_VERSION 1)
+
+include(Platform/UnixPaths)
+
+# Windows API on Cygwin
+list(APPEND CMAKE_SYSTEM_INCLUDE_PATH
+  /usr/include/w32api
+  )
+
+# Windows API on Cygwin
+list(APPEND CMAKE_SYSTEM_LIBRARY_PATH
+  /usr/lib/w32api
+  )
diff --git a/share/cmake-3.18/Modules/Platform/Catamount.cmake b/share/cmake-3.22/Modules/Platform/Catamount.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Catamount.cmake
rename to share/cmake-3.22/Modules/Platform/Catamount.cmake
diff --git a/share/cmake-3.18/Modules/Platform/CrayLinuxEnvironment.cmake b/share/cmake-3.22/Modules/Platform/CrayLinuxEnvironment.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/CrayLinuxEnvironment.cmake
rename to share/cmake-3.22/Modules/Platform/CrayLinuxEnvironment.cmake
diff --git a/share/cmake-3.18/Modules/Platform/DOS-OpenWatcom-C.cmake b/share/cmake-3.22/Modules/Platform/DOS-OpenWatcom-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/DOS-OpenWatcom-C.cmake
rename to share/cmake-3.22/Modules/Platform/DOS-OpenWatcom-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/DOS-OpenWatcom-CXX.cmake b/share/cmake-3.22/Modules/Platform/DOS-OpenWatcom-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/DOS-OpenWatcom-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/DOS-OpenWatcom-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/DOS-OpenWatcom.cmake b/share/cmake-3.22/Modules/Platform/DOS-OpenWatcom.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/DOS-OpenWatcom.cmake
rename to share/cmake-3.22/Modules/Platform/DOS-OpenWatcom.cmake
diff --git a/share/cmake-3.18/Modules/Platform/DOS.cmake b/share/cmake-3.22/Modules/Platform/DOS.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/DOS.cmake
rename to share/cmake-3.22/Modules/Platform/DOS.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Darwin-Determine-CXX.cmake b/share/cmake-3.22/Modules/Platform/Darwin-Determine-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Darwin-Determine-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/Darwin-Determine-CXX.cmake
diff --git a/share/cmake-3.22/Modules/Platform/Darwin-Initialize.cmake b/share/cmake-3.22/Modules/Platform/Darwin-Initialize.cmake
new file mode 100644
index 0000000..c2f1851
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Darwin-Initialize.cmake
@@ -0,0 +1,318 @@
+# Ask xcode-select where to find /Developer or fall back to ancient location.
+execute_process(COMMAND xcode-select -print-path
+  OUTPUT_VARIABLE _stdout
+  OUTPUT_STRIP_TRAILING_WHITESPACE
+  ERROR_VARIABLE _stderr
+  RESULT_VARIABLE _failed)
+if(NOT _failed AND IS_DIRECTORY ${_stdout})
+  set(OSX_DEVELOPER_ROOT ${_stdout})
+elseif(IS_DIRECTORY "/Developer")
+  set(OSX_DEVELOPER_ROOT "/Developer")
+else()
+  set(OSX_DEVELOPER_ROOT "")
+endif()
+
+execute_process(COMMAND sw_vers -productVersion
+  OUTPUT_VARIABLE CURRENT_OSX_VERSION
+  OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+# Save CMAKE_OSX_ARCHITECTURES from the environment.
+set(CMAKE_OSX_ARCHITECTURES "$ENV{CMAKE_OSX_ARCHITECTURES}" CACHE STRING
+  "Build architectures for OSX")
+
+if(NOT CMAKE_CROSSCOMPILING AND
+   CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND
+   CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "^(arm64|x86_64)$")
+  execute_process(COMMAND sysctl -q hw.optional.arm64
+    OUTPUT_VARIABLE _sysctl_stdout
+    ERROR_VARIABLE _sysctl_stderr
+    RESULT_VARIABLE _sysctl_result
+    )
+  # When building on an Apple Silicon host, we need to explicitly specify
+  # the architecture to the toolchain since it will otherwise guess the
+  # architecture based on that of the build system tool.
+  # Set an *internal variable* to tell the generators to do this.
+  if(_sysctl_result EQUAL 0 AND _sysctl_stdout MATCHES "hw.optional.arm64: 1")
+    set(_CMAKE_APPLE_ARCHS_DEFAULT "${CMAKE_HOST_SYSTEM_PROCESSOR}")
+  endif()
+  unset(_sysctl_result)
+  unset(_sysctl_stderr)
+  unset(_sysctl_stdout)
+endif()
+
+# macOS, iOS, tvOS, and watchOS should lookup compilers from
+# Platform/Apple-${CMAKE_CXX_COMPILER_ID}-<LANG>
+set(CMAKE_EFFECTIVE_SYSTEM_NAME "Apple")
+
+#----------------------------------------------------------------------------
+# _CURRENT_OSX_VERSION - as a two-component string: 10.5, 10.6, ...
+#
+string(REGEX REPLACE "^([0-9]+\\.[0-9]+).*$" "\\1"
+  _CURRENT_OSX_VERSION "${CURRENT_OSX_VERSION}")
+
+#----------------------------------------------------------------------------
+# CMAKE_OSX_DEPLOYMENT_TARGET
+
+# Set cache variable - end user may change this during ccmake or cmake-gui configure.
+if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND _CURRENT_OSX_VERSION VERSION_GREATER 10.3)
+  set(CMAKE_OSX_DEPLOYMENT_TARGET "$ENV{MACOSX_DEPLOYMENT_TARGET}" CACHE STRING
+    "Minimum OS X version to target for deployment (at runtime); newer APIs weak linked. Set to empty string for default value.")
+endif()
+
+#----------------------------------------------------------------------------
+# CMAKE_OSX_SYSROOT
+
+if(CMAKE_OSX_SYSROOT)
+  # Use the existing value without further computation to choose a default.
+  set(_CMAKE_OSX_SYSROOT_DEFAULT "${CMAKE_OSX_SYSROOT}")
+elseif(NOT "x$ENV{SDKROOT}" STREQUAL "x" AND
+        (NOT "x$ENV{SDKROOT}" MATCHES "/" OR IS_DIRECTORY "$ENV{SDKROOT}"))
+  # Use the value of SDKROOT from the environment.
+  set(_CMAKE_OSX_SYSROOT_DEFAULT "$ENV{SDKROOT}")
+elseif(CMAKE_SYSTEM_NAME STREQUAL iOS)
+  set(_CMAKE_OSX_SYSROOT_DEFAULT "iphoneos")
+elseif(CMAKE_SYSTEM_NAME STREQUAL tvOS)
+  set(_CMAKE_OSX_SYSROOT_DEFAULT "appletvos")
+elseif(CMAKE_SYSTEM_NAME STREQUAL watchOS)
+  set(_CMAKE_OSX_SYSROOT_DEFAULT "watchos")
+elseif("${CMAKE_GENERATOR}" MATCHES Xcode
+       OR CMAKE_OSX_DEPLOYMENT_TARGET
+       OR CMAKE_OSX_ARCHITECTURES MATCHES "[^;]"
+       OR NOT EXISTS "/usr/include/sys/types.h")
+  # Find installed SDKs in either Xcode-4.3+ or pre-4.3 SDKs directory.
+  set(_CMAKE_OSX_SDKS_DIR "")
+  if(OSX_DEVELOPER_ROOT)
+    foreach(_d Platforms/MacOSX.platform/Developer/SDKs SDKs)
+      file(GLOB _CMAKE_OSX_SDKS ${OSX_DEVELOPER_ROOT}/${_d}/*)
+      if(_CMAKE_OSX_SDKS)
+        set(_CMAKE_OSX_SDKS_DIR ${OSX_DEVELOPER_ROOT}/${_d})
+        break()
+      endif()
+    endforeach()
+  endif()
+
+  if(_CMAKE_OSX_SDKS_DIR)
+    # Find the latest SDK as recommended by Apple (Technical Q&A QA1806)
+    set(_CMAKE_OSX_LATEST_SDK_VERSION "0.0")
+    file(GLOB _CMAKE_OSX_SDKS RELATIVE "${_CMAKE_OSX_SDKS_DIR}" "${_CMAKE_OSX_SDKS_DIR}/MacOSX*.sdk")
+    foreach(_SDK ${_CMAKE_OSX_SDKS})
+      if(IS_DIRECTORY "${_CMAKE_OSX_SDKS_DIR}/${_SDK}"
+         AND _SDK MATCHES "MacOSX([0-9]+\\.[0-9]+)[^/]*\\.sdk"
+         AND CMAKE_MATCH_1 VERSION_GREATER ${_CMAKE_OSX_LATEST_SDK_VERSION})
+        set(_CMAKE_OSX_LATEST_SDK_VERSION "${CMAKE_MATCH_1}")
+      endif()
+    endforeach()
+
+    if(NOT _CMAKE_OSX_LATEST_SDK_VERSION STREQUAL "0.0")
+      set(_CMAKE_OSX_SYSROOT_DEFAULT "${_CMAKE_OSX_SDKS_DIR}/MacOSX${_CMAKE_OSX_LATEST_SDK_VERSION}.sdk")
+    else()
+      message(WARNING "Could not find any valid SDKs in ${_CMAKE_OSX_SDKS_DIR}")
+    endif()
+
+    if(NOT CMAKE_CROSSCOMPILING AND NOT CMAKE_OSX_DEPLOYMENT_TARGET
+       AND (_CURRENT_OSX_VERSION VERSION_LESS _CMAKE_OSX_LATEST_SDK_VERSION
+            OR _CMAKE_OSX_LATEST_SDK_VERSION STREQUAL "0.0"))
+      set(CMAKE_OSX_DEPLOYMENT_TARGET ${_CURRENT_OSX_VERSION} CACHE STRING
+        "Minimum OS X version to target for deployment (at runtime); newer APIs weak linked. Set to empty string for default value." FORCE)
+    endif()
+  else()
+    # Assume developer files are in root (such as Xcode 4.5 command-line tools).
+    set(_CMAKE_OSX_SYSROOT_DEFAULT "")
+  endif()
+endif()
+
+# Set cache variable - end user may change this during ccmake or cmake-gui configure.
+# Choose the type based on the current value.
+set(_CMAKE_OSX_SYSROOT_TYPE STRING)
+foreach(_v CMAKE_OSX_SYSROOT _CMAKE_OSX_SYSROOT_DEFAULT)
+  if("x${${_v}}" MATCHES "/")
+    set(_CMAKE_OSX_SYSROOT_TYPE PATH)
+    break()
+  endif()
+endforeach()
+set(CMAKE_OSX_SYSROOT "${_CMAKE_OSX_SYSROOT_DEFAULT}" CACHE ${_CMAKE_OSX_SYSROOT_TYPE}
+  "The product will be built against the headers and libraries located inside the indicated SDK.")
+
+# Resolves the SDK name into a path
+function(_apple_resolve_sdk_path sdk_name ret)
+  execute_process(
+    COMMAND xcrun -sdk ${sdk_name} --show-sdk-path
+    OUTPUT_VARIABLE _stdout
+    OUTPUT_STRIP_TRAILING_WHITESPACE
+    ERROR_VARIABLE _stderr
+    RESULT_VARIABLE _failed
+  )
+  set(${ret} "${_stdout}" PARENT_SCOPE)
+endfunction()
+
+function(_apple_resolve_supported_archs_for_sdk_from_system_lib sdk_path ret ret_failed)
+  # Detect the supported SDK architectures by inspecting the main libSystem library.
+  set(common_lib_prefix "${sdk_path}/usr/lib/libSystem")
+  set(system_lib_dylib_path "${common_lib_prefix}.dylib")
+  set(system_lib_tbd_path "${common_lib_prefix}.tbd")
+
+  # Newer SDKs ship text based dylib stub files which contain the architectures supported by the
+  # library in text form.
+  if(EXISTS "${system_lib_tbd_path}")
+    file(STRINGS "${system_lib_tbd_path}" tbd_lines REGEX "^(archs|targets): +\\[.+\\]")
+    if(NOT tbd_lines)
+      set(${ret_failed} TRUE PARENT_SCOPE)
+      return()
+    endif()
+
+    # The tbd architectures line looks like the following:
+    #   archs:           [ armv7, armv7s, arm64, arm64e ]
+    # or for version 4 TBD files:
+    #   targets:         [ armv7-ios, armv7s-ios, arm64-ios, arm64e-ios ]
+    list(GET tbd_lines 0 first_arch_line)
+    string(REGEX REPLACE
+           "(archs|targets): +\\[ (.+) \\]" "\\2" arches_comma_separated "${first_arch_line}")
+    string(STRIP "${arches_comma_separated}" arches_comma_separated)
+    string(REPLACE "," ";" arch_list "${arches_comma_separated}")
+    string(REPLACE " " "" arch_list "${arch_list}")
+
+    # Remove -platform suffix from target (version 4 only)
+    string(REGEX REPLACE "-[a-z-]+" "" arch_list "${arch_list}")
+
+    if(NOT arch_list)
+      set(${ret_failed} TRUE PARENT_SCOPE)
+      return()
+    endif()
+    set(${ret} "${arch_list}" PARENT_SCOPE)
+  elseif(EXISTS "${system_lib_dylib_path}")
+    # Old SDKs (Xcode < 7) ship dylib files, use lipo to inspect the supported architectures.
+    # Can't use -archs because the option is not available in older Xcode versions.
+    execute_process(
+      COMMAND lipo -info ${system_lib_dylib_path}
+      OUTPUT_VARIABLE lipo_output
+      OUTPUT_STRIP_TRAILING_WHITESPACE
+      ERROR_VARIABLE _stderr
+      RESULT_VARIABLE _failed
+    )
+    if(_failed OR NOT lipo_output OR NOT lipo_output MATCHES "(Non-fat file:|Architectures in the fat file:)")
+      set(${ret_failed} TRUE PARENT_SCOPE)
+      return()
+    endif()
+
+    # The lipo output looks like the following:
+    # Non-fat file: <path> is architecture: i386
+    # Architectures in the fat file: <path> are: i386 x86_64
+    string(REGEX REPLACE
+           "^(.+)is architecture:(.+)" "\\2" arches_space_separated "${lipo_output}")
+    string(REGEX REPLACE
+            "^(.+)are:(.+)" "\\2" arches_space_separated "${arches_space_separated}")
+
+    # Need to clean up the arches, with Xcode 4.6.3 the output of lipo -info contains some
+    # additional info, e.g.
+    # Architectures in the fat file: <path> are: armv7 (cputype (12) cpusubtype (11))
+    string(REGEX REPLACE
+            "\\(.+\\)" "" arches_space_separated "${arches_space_separated}")
+
+    # The output is space separated.
+    string(STRIP "${arches_space_separated}" arches_space_separated)
+    string(REPLACE " " ";" arch_list "${arches_space_separated}")
+
+    if(NOT arch_list)
+      set(${ret_failed} TRUE PARENT_SCOPE)
+      return()
+    endif()
+    set(${ret} "${arch_list}" PARENT_SCOPE)
+  else()
+    # This shouldn't happen, but keep it for safety.
+    message(WARNING "No way to find architectures for given sdk_path '${sdk_path}'")
+    set(${ret_failed} TRUE PARENT_SCOPE)
+  endif()
+endfunction()
+
+# Handle multi-arch sysroots. Do this before CMAKE_OSX_SYSROOT is
+# transformed into a path, so that we know the sysroot name.
+function(_apple_resolve_multi_arch_sysroots)
+  if(DEFINED CMAKE_APPLE_ARCH_SYSROOTS)
+    return() # Already cached
+  endif()
+
+  list(LENGTH CMAKE_OSX_ARCHITECTURES _num_archs)
+  if(NOT (_num_archs GREATER 1))
+    return() # Only apply to multi-arch
+  endif()
+
+  if(CMAKE_OSX_SYSROOT STREQUAL "macosx")
+    # macOS doesn't have a simulator sdk / sysroot, so there is no need to handle per-sdk arches.
+    return()
+  endif()
+
+  if(IS_DIRECTORY "${CMAKE_OSX_SYSROOT}")
+    if(NOT CMAKE_OSX_SYSROOT STREQUAL _CMAKE_OSX_SYSROOT_DEFAULT)
+      message(WARNING "Can not resolve multi-arch sysroots with CMAKE_OSX_SYSROOT set to path (${CMAKE_OSX_SYSROOT})")
+    endif()
+    return()
+  endif()
+
+  string(REPLACE "os" "simulator" _simulator_sdk ${CMAKE_OSX_SYSROOT})
+  set(_sdks "${CMAKE_OSX_SYSROOT};${_simulator_sdk}")
+  foreach(sdk ${_sdks})
+    _apple_resolve_sdk_path(${sdk} _sdk_path)
+    if(NOT IS_DIRECTORY "${_sdk_path}")
+      message(WARNING "Failed to resolve SDK path for '${sdk}'")
+      continue()
+    endif()
+
+    _apple_resolve_supported_archs_for_sdk_from_system_lib(${_sdk_path} _sdk_archs _failed)
+
+    if(_failed)
+      # Failure to extract supported architectures for an SDK means that the installed SDK is old
+      # and does not provide such information (SDKs that come with Xcode >= 10.x started providing
+      # the information). In such a case, return early, and handle multi-arch builds the old way
+      # (no per-sdk arches).
+      return()
+    endif()
+
+    set(_sdk_archs_${sdk} ${_sdk_archs})
+    set(_sdk_path_${sdk} ${_sdk_path})
+  endforeach()
+
+  foreach(arch ${CMAKE_OSX_ARCHITECTURES})
+    set(_arch_sysroot "")
+    foreach(sdk ${_sdks})
+      list(FIND _sdk_archs_${sdk} ${arch} arch_index)
+      if(NOT arch_index EQUAL -1)
+        set(_arch_sysroot ${_sdk_path_${sdk}})
+        break()
+      endif()
+    endforeach()
+    if(_arch_sysroot)
+      list(APPEND _arch_sysroots ${_arch_sysroot})
+    else()
+      message(WARNING "No SDK found for architecture '${arch}'")
+      list(APPEND _arch_sysroots "${arch}-SDK-NOTFOUND")
+    endif()
+  endforeach()
+
+  set(CMAKE_APPLE_ARCH_SYSROOTS "${_arch_sysroots}" CACHE INTERNAL
+    "Architecture dependent sysroots, one per CMAKE_OSX_ARCHITECTURES")
+endfunction()
+
+_apple_resolve_multi_arch_sysroots()
+
+# Transform CMAKE_OSX_SYSROOT to absolute path
+set(_CMAKE_OSX_SYSROOT_PATH "")
+if(CMAKE_OSX_SYSROOT)
+  if("x${CMAKE_OSX_SYSROOT}" MATCHES "/")
+    # This is a path to the SDK.  Make sure it exists.
+    if(NOT IS_DIRECTORY "${CMAKE_OSX_SYSROOT}")
+      message(WARNING "Ignoring CMAKE_OSX_SYSROOT value:\n ${CMAKE_OSX_SYSROOT}\n"
+        "because the directory does not exist.")
+      set(CMAKE_OSX_SYSROOT "")
+    endif()
+    set(_CMAKE_OSX_SYSROOT_PATH "${CMAKE_OSX_SYSROOT}")
+  else()
+    _apple_resolve_sdk_path(${CMAKE_OSX_SYSROOT} _sdk_path)
+    if(IS_DIRECTORY "${_sdk_path}")
+      set(_CMAKE_OSX_SYSROOT_PATH "${_sdk_path}")
+      # For non-Xcode generators use the path.
+      if(NOT "${CMAKE_GENERATOR}" MATCHES "Xcode")
+        set(CMAKE_OSX_SYSROOT "${_CMAKE_OSX_SYSROOT_PATH}")
+      endif()
+    endif()
+  endif()
+endif()
diff --git a/share/cmake-3.22/Modules/Platform/Darwin.cmake b/share/cmake-3.22/Modules/Platform/Darwin.cmake
new file mode 100644
index 0000000..839dc81
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Darwin.cmake
@@ -0,0 +1,241 @@
+set(APPLE 1)
+
+if(CMAKE_SYSTEM_NAME STREQUAL "iOS" OR CMAKE_SYSTEM_NAME STREQUAL "tvOS" OR CMAKE_SYSTEM_NAME STREQUAL "watchOS")
+  if(NOT DEFINED CMAKE_MACOSX_BUNDLE)
+    set(CMAKE_MACOSX_BUNDLE ON)
+  endif()
+
+  list(APPEND CMAKE_FIND_ROOT_PATH "${_CMAKE_OSX_SYSROOT_PATH}")
+  if(NOT DEFINED CMAKE_FIND_ROOT_PATH_MODE_LIBRARY)
+      set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+  endif()
+  if(NOT DEFINED CMAKE_FIND_ROOT_PATH_MODE_INCLUDE)
+      set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+  endif()
+  if(NOT DEFINED CMAKE_FIND_ROOT_PATH_MODE_PACKAGE)
+      set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
+  endif()
+endif()
+
+# Darwin versions:
+#   6.x == Mac OSX 10.2 (Jaguar)
+#   7.x == Mac OSX 10.3 (Panther)
+#   8.x == Mac OSX 10.4 (Tiger)
+#   9.x == Mac OSX 10.5 (Leopard)
+#  10.x == Mac OSX 10.6 (Snow Leopard)
+#  11.x == Mac OSX 10.7 (Lion)
+#  12.x == Mac OSX 10.8 (Mountain Lion)
+string(REGEX REPLACE "^([0-9]+)\\.([0-9]+).*$" "\\1" DARWIN_MAJOR_VERSION "${CMAKE_SYSTEM_VERSION}")
+string(REGEX REPLACE "^([0-9]+)\\.([0-9]+).*$" "\\2" DARWIN_MINOR_VERSION "${CMAKE_SYSTEM_VERSION}")
+
+# Do not use the "-Wl,-search_paths_first" flag with the OSX 10.2 compiler.
+# Done this way because it is too early to do a TRY_COMPILE.
+if(NOT DEFINED HAVE_FLAG_SEARCH_PATHS_FIRST)
+  set(HAVE_FLAG_SEARCH_PATHS_FIRST 0)
+  if("${DARWIN_MAJOR_VERSION}" GREATER 6)
+    set(HAVE_FLAG_SEARCH_PATHS_FIRST 1)
+  endif()
+endif()
+# More desirable, but does not work:
+  #include(CheckCXXCompilerFlag)
+  #CHECK_CXX_COMPILER_FLAG("-Wl,-search_paths_first" HAVE_FLAG_SEARCH_PATHS_FIRST)
+
+set(CMAKE_SHARED_LIBRARY_PREFIX "lib")
+set(CMAKE_SHARED_LIBRARY_SUFFIX ".dylib")
+set(CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES ".tbd" ".so")
+set(CMAKE_SHARED_MODULE_PREFIX "lib")
+set(CMAKE_SHARED_MODULE_SUFFIX ".so")
+set(CMAKE_MODULE_EXISTS 1)
+set(CMAKE_DL_LIBS "")
+if(NOT "${_CURRENT_OSX_VERSION}" VERSION_LESS "10.5")
+  set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,")
+endif()
+
+foreach(lang C CXX OBJC OBJCXX)
+  set(CMAKE_${lang}_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ")
+  set(CMAKE_${lang}_OSX_CURRENT_VERSION_FLAG "-current_version ")
+  set(CMAKE_${lang}_LINK_FLAGS "-Wl,-headerpad_max_install_names")
+
+  if(HAVE_FLAG_SEARCH_PATHS_FIRST)
+    set(CMAKE_${lang}_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_${lang}_LINK_FLAGS}")
+  endif()
+
+  set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-dynamiclib -Wl,-headerpad_max_install_names")
+  set(CMAKE_SHARED_MODULE_CREATE_${lang}_FLAGS "-bundle -Wl,-headerpad_max_install_names")
+  set(CMAKE_SHARED_MODULE_LOADER_${lang}_FLAG "-Wl,-bundle_loader,")
+endforeach()
+
+set(CMAKE_PLATFORM_HAS_INSTALLNAME 1)
+set(CMAKE_FIND_LIBRARY_SUFFIXES ".tbd" ".dylib" ".so" ".a")
+
+# hack: if a new cmake (which uses CMAKE_INSTALL_NAME_TOOL) runs on an old build tree
+# (where install_name_tool was hardcoded) and where CMAKE_INSTALL_NAME_TOOL isn't in the cache
+# and still cmake didn't fail in CMakeFindBinUtils.cmake (because it isn't rerun)
+# hardcode CMAKE_INSTALL_NAME_TOOL here to install_name_tool, so it behaves as it did before, Alex
+if(NOT DEFINED CMAKE_INSTALL_NAME_TOOL)
+  find_program(CMAKE_INSTALL_NAME_TOOL install_name_tool)
+  mark_as_advanced(CMAKE_INSTALL_NAME_TOOL)
+endif()
+
+# Enable shared library versioning.
+set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-install_name")
+
+if("${_CURRENT_OSX_VERSION}" VERSION_LESS "10.5")
+  # Need to list dependent shared libraries on link line.  When building
+  # with -isysroot (for universal binaries), the linker always looks for
+  # dependent libraries under the sysroot.  Listing them on the link
+  # line works around the problem.
+  set(CMAKE_LINK_DEPENDENT_LIBRARY_FILES 1)
+endif()
+
+foreach(lang C CXX Fortran OBJC OBJCXX)
+  # Xcode does not support -isystem yet.
+  if(XCODE)
+    set(CMAKE_INCLUDE_SYSTEM_FLAG_${lang})
+  endif()
+
+  set(CMAKE_${lang}_CREATE_SHARED_LIBRARY
+    "<CMAKE_${lang}_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS> <LINK_FLAGS> -o <TARGET> <SONAME_FLAG> <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
+
+  set(CMAKE_${lang}_CREATE_SHARED_MODULE
+      "<CMAKE_${lang}_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_MODULE_CREATE_${lang}_FLAGS> <LINK_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
+
+  set(CMAKE_${lang}_CREATE_MACOSX_FRAMEWORK
+      "<CMAKE_${lang}_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS> <LINK_FLAGS> -o <TARGET> <SONAME_FLAG> <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
+
+  # Set default framework search path flag for languages known to use a
+  # preprocessor that may find headers in frameworks.
+  set(CMAKE_${lang}_FRAMEWORK_SEARCH_FLAG -F)
+endforeach()
+
+# default to searching for frameworks first
+if(NOT DEFINED CMAKE_FIND_FRAMEWORK)
+  set(CMAKE_FIND_FRAMEWORK FIRST)
+endif()
+
+# Older OS X linkers do not report their framework search path
+# with -v but "man ld" documents the following locations.
+set(CMAKE_PLATFORM_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES
+  ${_CMAKE_OSX_SYSROOT_PATH}/Library/Frameworks
+  ${_CMAKE_OSX_SYSROOT_PATH}/System/Library/Frameworks
+  )
+if(_CMAKE_OSX_SYSROOT_PATH)
+  # Treat some paths as implicit so we do not override the SDK versions.
+  list(APPEND CMAKE_PLATFORM_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES
+    /System/Library/Frameworks)
+endif()
+if("${_CURRENT_OSX_VERSION}" VERSION_LESS "10.5")
+  # Older OS X tools had more implicit paths.
+  list(APPEND CMAKE_PLATFORM_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES
+    ${_CMAKE_OSX_SYSROOT_PATH}/Network/Library/Frameworks)
+endif()
+
+# set up the default search directories for frameworks
+set(CMAKE_SYSTEM_FRAMEWORK_PATH
+  ~/Library/Frameworks
+  )
+if(_CMAKE_OSX_SYSROOT_PATH)
+  list(APPEND CMAKE_SYSTEM_FRAMEWORK_PATH
+    ${_CMAKE_OSX_SYSROOT_PATH}/Library/Frameworks
+    ${_CMAKE_OSX_SYSROOT_PATH}/Network/Library/Frameworks
+    ${_CMAKE_OSX_SYSROOT_PATH}/System/Library/Frameworks
+    )
+  # add platform developer framework path if exists
+  foreach(_path
+    # Xcode 6
+    ${_CMAKE_OSX_SYSROOT_PATH}/../../Library/Frameworks
+    # Xcode 5 iOS
+    ${_CMAKE_OSX_SYSROOT_PATH}/Developer/Library/Frameworks
+    # Xcode 5 OSX
+    ${_CMAKE_OSX_SYSROOT_PATH}/../../../../../Library/Frameworks
+    )
+    get_filename_component(_abolute_path "${_path}" ABSOLUTE)
+    if(EXISTS "${_abolute_path}")
+      list(APPEND CMAKE_SYSTEM_FRAMEWORK_PATH "${_abolute_path}")
+      break()
+    endif()
+  endforeach()
+
+  if(EXISTS ${_CMAKE_OSX_SYSROOT_PATH}/usr/lib)
+    list(INSERT CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES 0 ${_CMAKE_OSX_SYSROOT_PATH}/usr/lib)
+  endif()
+  if(EXISTS ${_CMAKE_OSX_SYSROOT_PATH}/usr/local/lib)
+    list(INSERT CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES 0 ${_CMAKE_OSX_SYSROOT_PATH}/usr/local/lib)
+  endif()
+endif()
+if (OSX_DEVELOPER_ROOT AND EXISTS "${OSX_DEVELOPER_ROOT}/Library/Frameworks")
+  list(APPEND CMAKE_SYSTEM_FRAMEWORK_PATH
+    ${OSX_DEVELOPER_ROOT}/Library/Frameworks)
+endif()
+list(APPEND CMAKE_SYSTEM_FRAMEWORK_PATH
+  /Library/Frameworks
+  /Network/Library/Frameworks
+  /System/Library/Frameworks)
+
+# Warn about known system mis-configuration case.
+if(CMAKE_OSX_SYSROOT)
+  get_property(_IN_TC GLOBAL PROPERTY IN_TRY_COMPILE)
+  if(NOT _IN_TC AND
+     NOT IS_SYMLINK "${CMAKE_OSX_SYSROOT}/Library/Frameworks"
+     AND IS_SYMLINK "${CMAKE_OSX_SYSROOT}/Library/Frameworks/Frameworks")
+    message(WARNING "The SDK Library/Frameworks path\n"
+      " ${CMAKE_OSX_SYSROOT}/Library/Frameworks\n"
+      "is not set up correctly on this system.  "
+      "This is known to occur when installing Xcode 3.2.6:\n"
+      " http://bugs.python.org/issue14018\n"
+      "The problem may cause build errors that report missing system frameworks.  "
+      "Fix your SDK symlinks to resolve this issue and avoid this warning."
+      )
+  endif()
+endif()
+
+# default to searching for application bundles first
+if(NOT DEFINED CMAKE_FIND_APPBUNDLE)
+  set(CMAKE_FIND_APPBUNDLE FIRST)
+endif()
+# set up the default search directories for application bundles
+set(_apps_paths)
+foreach(_path
+  "~/Applications"
+  "/Applications"
+  "${OSX_DEVELOPER_ROOT}/../Applications" # Xcode 4.3+
+  "${OSX_DEVELOPER_ROOT}/Applications"    # pre-4.3
+  )
+  get_filename_component(_apps "${_path}" ABSOLUTE)
+  if(EXISTS "${_apps}")
+    list(APPEND _apps_paths "${_apps}")
+  endif()
+endforeach()
+if(_apps_paths)
+  list(REMOVE_DUPLICATES _apps_paths)
+endif()
+set(CMAKE_SYSTEM_APPBUNDLE_PATH
+  ${_apps_paths})
+unset(_apps_paths)
+
+include(Platform/UnixPaths)
+
+if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64")
+  list(PREPEND CMAKE_SYSTEM_PREFIX_PATH
+    /opt/homebrew # Brew on Apple Silicon
+    )
+endif()
+
+if(_CMAKE_OSX_SYSROOT_PATH)
+  if(EXISTS ${_CMAKE_OSX_SYSROOT_PATH}/usr/include)
+    list(INSERT CMAKE_SYSTEM_PREFIX_PATH 0 ${_CMAKE_OSX_SYSROOT_PATH}/usr)
+    foreach(lang C CXX OBJC OBJCXX Swift)
+      list(APPEND _CMAKE_${lang}_IMPLICIT_INCLUDE_DIRECTORIES_INIT ${_CMAKE_OSX_SYSROOT_PATH}/usr/include)
+    endforeach()
+  endif()
+  if(EXISTS ${_CMAKE_OSX_SYSROOT_PATH}/usr/local/include)
+    list(INSERT CMAKE_SYSTEM_PREFIX_PATH 0 ${_CMAKE_OSX_SYSROOT_PATH}/usr/local)
+    foreach(lang C CXX OBJC OBJCXX Swift)
+      list(APPEND _CMAKE_${lang}_IMPLICIT_INCLUDE_DIRECTORIES_INIT ${_CMAKE_OSX_SYSROOT_PATH}/usr/local/include)
+    endforeach()
+  endif()
+endif()
+list(APPEND CMAKE_SYSTEM_PREFIX_PATH
+  /sw        # Fink
+  /opt/local # MacPorts
+  )
diff --git a/share/cmake-3.18/Modules/Platform/DragonFly.cmake b/share/cmake-3.22/Modules/Platform/DragonFly.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/DragonFly.cmake
rename to share/cmake-3.22/Modules/Platform/DragonFly.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Euros.cmake b/share/cmake-3.22/Modules/Platform/Euros.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Euros.cmake
rename to share/cmake-3.22/Modules/Platform/Euros.cmake
diff --git a/share/cmake-3.18/Modules/Platform/FreeBSD-Determine-CXX.cmake b/share/cmake-3.22/Modules/Platform/FreeBSD-Determine-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/FreeBSD-Determine-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/FreeBSD-Determine-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/FreeBSD.cmake b/share/cmake-3.22/Modules/Platform/FreeBSD.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/FreeBSD.cmake
rename to share/cmake-3.22/Modules/Platform/FreeBSD.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Fuchsia.cmake b/share/cmake-3.22/Modules/Platform/Fuchsia.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Fuchsia.cmake
rename to share/cmake-3.22/Modules/Platform/Fuchsia.cmake
diff --git a/share/cmake-3.18/Modules/Platform/GHS-MULTI-Determine.cmake b/share/cmake-3.22/Modules/Platform/GHS-MULTI-Determine.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/GHS-MULTI-Determine.cmake
rename to share/cmake-3.22/Modules/Platform/GHS-MULTI-Determine.cmake
diff --git a/share/cmake-3.18/Modules/Platform/GHS-MULTI.cmake b/share/cmake-3.22/Modules/Platform/GHS-MULTI.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/GHS-MULTI.cmake
rename to share/cmake-3.22/Modules/Platform/GHS-MULTI.cmake
diff --git a/share/cmake-3.18/Modules/Platform/GNU.cmake b/share/cmake-3.22/Modules/Platform/GNU.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/GNU.cmake
rename to share/cmake-3.22/Modules/Platform/GNU.cmake
diff --git a/share/cmake-3.18/Modules/Platform/GNUtoMS_lib.bat.in b/share/cmake-3.22/Modules/Platform/GNUtoMS_lib.bat.in
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/GNUtoMS_lib.bat.in
rename to share/cmake-3.22/Modules/Platform/GNUtoMS_lib.bat.in
diff --git a/share/cmake-3.18/Modules/Platform/GNUtoMS_lib.cmake b/share/cmake-3.22/Modules/Platform/GNUtoMS_lib.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/GNUtoMS_lib.cmake
rename to share/cmake-3.22/Modules/Platform/GNUtoMS_lib.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Generic-ADSP-ASM.cmake b/share/cmake-3.22/Modules/Platform/Generic-ADSP-ASM.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Generic-ADSP-ASM.cmake
rename to share/cmake-3.22/Modules/Platform/Generic-ADSP-ASM.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Generic-ADSP-C.cmake b/share/cmake-3.22/Modules/Platform/Generic-ADSP-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Generic-ADSP-C.cmake
rename to share/cmake-3.22/Modules/Platform/Generic-ADSP-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Generic-ADSP-CXX.cmake b/share/cmake-3.22/Modules/Platform/Generic-ADSP-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Generic-ADSP-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/Generic-ADSP-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Generic-ADSP-Common.cmake b/share/cmake-3.22/Modules/Platform/Generic-ADSP-Common.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Generic-ADSP-Common.cmake
rename to share/cmake-3.22/Modules/Platform/Generic-ADSP-Common.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Generic-SDCC-C.cmake b/share/cmake-3.22/Modules/Platform/Generic-SDCC-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Generic-SDCC-C.cmake
rename to share/cmake-3.22/Modules/Platform/Generic-SDCC-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Generic.cmake b/share/cmake-3.22/Modules/Platform/Generic.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Generic.cmake
rename to share/cmake-3.22/Modules/Platform/Generic.cmake
diff --git a/share/cmake-3.18/Modules/Platform/HP-UX-GNU-ASM.cmake b/share/cmake-3.22/Modules/Platform/HP-UX-GNU-ASM.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/HP-UX-GNU-ASM.cmake
rename to share/cmake-3.22/Modules/Platform/HP-UX-GNU-ASM.cmake
diff --git a/share/cmake-3.18/Modules/Platform/HP-UX-GNU-C.cmake b/share/cmake-3.22/Modules/Platform/HP-UX-GNU-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/HP-UX-GNU-C.cmake
rename to share/cmake-3.22/Modules/Platform/HP-UX-GNU-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/HP-UX-GNU-CXX.cmake b/share/cmake-3.22/Modules/Platform/HP-UX-GNU-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/HP-UX-GNU-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/HP-UX-GNU-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/HP-UX-GNU-Fortran.cmake b/share/cmake-3.22/Modules/Platform/HP-UX-GNU-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/HP-UX-GNU-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/HP-UX-GNU-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Platform/HP-UX-GNU.cmake b/share/cmake-3.22/Modules/Platform/HP-UX-GNU.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/HP-UX-GNU.cmake
rename to share/cmake-3.22/Modules/Platform/HP-UX-GNU.cmake
diff --git a/share/cmake-3.18/Modules/Platform/HP-UX-HP-ASM.cmake b/share/cmake-3.22/Modules/Platform/HP-UX-HP-ASM.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/HP-UX-HP-ASM.cmake
rename to share/cmake-3.22/Modules/Platform/HP-UX-HP-ASM.cmake
diff --git a/share/cmake-3.18/Modules/Platform/HP-UX-HP-C.cmake b/share/cmake-3.22/Modules/Platform/HP-UX-HP-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/HP-UX-HP-C.cmake
rename to share/cmake-3.22/Modules/Platform/HP-UX-HP-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/HP-UX-HP-CXX.cmake b/share/cmake-3.22/Modules/Platform/HP-UX-HP-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/HP-UX-HP-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/HP-UX-HP-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/HP-UX-HP-Fortran.cmake b/share/cmake-3.22/Modules/Platform/HP-UX-HP-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/HP-UX-HP-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/HP-UX-HP-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Platform/HP-UX-HP.cmake b/share/cmake-3.22/Modules/Platform/HP-UX-HP.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/HP-UX-HP.cmake
rename to share/cmake-3.22/Modules/Platform/HP-UX-HP.cmake
diff --git a/share/cmake-3.22/Modules/Platform/HP-UX.cmake b/share/cmake-3.22/Modules/Platform/HP-UX.cmake
new file mode 100644
index 0000000..425a13f
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/HP-UX.cmake
@@ -0,0 +1,47 @@
+if(NOT DEFINED CMAKE_PLATFORM_REQUIRED_RUNTIME_PATH)
+  set(CMAKE_PLATFORM_REQUIRED_RUNTIME_PATH /usr/lib)
+endif()
+
+if(NOT CMAKE_SYSTEM_PROCESSOR STREQUAL "ia64")
+  set(CMAKE_SHARED_LIBRARY_SUFFIX ".sl")          # .so
+  set(CMAKE_FIND_LIBRARY_SUFFIXES ".sl" ".so" ".a")
+  set(CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES ".so")
+endif()
+set(CMAKE_DL_LIBS "dld")
+
+# The HP linker needs to find transitive shared library dependencies
+# in the -L path.  Therefore the runtime path must be added to the
+# link line with -L flags.
+set(CMAKE_SHARED_LIBRARY_LINK_C_WITH_RUNTIME_PATH 1)
+set(CMAKE_LINK_DEPENDENT_LIBRARY_DIRS 1)
+
+# Shared libraries with no builtin soname may not be linked safely by
+# specifying the file path.
+set(CMAKE_PLATFORM_USES_PATH_WHEN_NO_SONAME 1)
+
+# set flags for gcc support
+include(Platform/UnixPaths)
+
+# Look in both 32-bit and 64-bit implicit link directories, but tell
+# CMake not to pass the paths to the linker.  The linker will find the
+# library for the proper architecture.  In the future we should detect
+# which path will be used by the linker.  Since the pointer type size
+# CMAKE_SIZEOF_VOID_P is not set until after this file executes, we
+# would need to append to CMAKE_SYSTEM_LIBRARY_PATH at a later point
+# (after CMakeTest(LANG)Compiler.cmake runs for at least one language).
+list(APPEND CMAKE_SYSTEM_LIBRARY_PATH /usr/lib/hpux32)
+list(APPEND CMAKE_SYSTEM_LIBRARY_PATH /usr/lib/hpux64)
+list(APPEND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES
+  /usr/lib/hpux32 /usr/lib/hpux64)
+
+# Initialize C and CXX link type selection flags.  These flags are
+# used when building a shared library, shared module, or executable
+# that links to other libraries to select whether to use the static or
+# shared versions of the libraries.
+foreach(type SHARED_LIBRARY SHARED_MODULE EXE)
+  foreach(lang C CXX)
+    set(CMAKE_${type}_LINK_STATIC_${lang}_FLAGS "-Wl,-a,archive")
+    set(CMAKE_${type}_LINK_DYNAMIC_${lang}_FLAGS "-Wl,-a,default")
+  endforeach()
+endforeach()
+
diff --git a/share/cmake-3.22/Modules/Platform/Haiku.cmake b/share/cmake-3.22/Modules/Platform/Haiku.cmake
new file mode 100644
index 0000000..b8e3ba6
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Haiku.cmake
@@ -0,0 +1,126 @@
+set(HAIKU 1)
+set(UNIX 1)
+
+set(CMAKE_DL_LIBS "")
+set(CMAKE_SHARED_LIBRARY_C_FLAGS "-fPIC")
+set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared")
+set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,")
+set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP ":")
+set(CMAKE_SHARED_LIBRARY_RPATH_ORIGIN_TOKEN "\$ORIGIN")
+set(CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG "-Wl,-rpath-link,")
+set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,")
+set(CMAKE_EXE_EXPORTS_C_FLAG "-Wl,--export-dynamic")
+
+# Determine, if the C or C++ compiler is configured for a secondary
+# architecture. If so, that will change the search paths we set below. We check
+# whether the compiler's library search paths contain a
+# "/boot/system/develop/lib/<subdir>/", which we assume to be the secondary
+# architecture specific subdirectory and extract the name of the architecture
+# accordingly.
+
+# First of all, find a C or C++ compiler we can run. The "arg1" is necessary
+# here for compilers such as "distcc gcc-x86" or "ccache gcc-x86"
+# TODO See CMakeDetermineCompilerId.cmake for some more things we may want to do.
+if(CMAKE_C_COMPILER)
+  set(__HAIKU_COMPILER ${CMAKE_C_COMPILER})
+  string (STRIP "${CMAKE_C_COMPILER_ARG1}" __HAIKU_COMPILER_FLAGS)
+else()
+  set(__HAIKU_COMPILER ${CMAKE_CXX_COMPILER})
+  string (STRIP "${CMAKE_CXX_COMPILER_ARG1}" __HAIKU_COMPILER_FLAGS)
+endif()
+
+
+execute_process(
+  COMMAND ${__HAIKU_COMPILER} ${__HAIKU_COMPILER_FLAGS} -print-search-dirs
+  OUTPUT_VARIABLE _HAIKU_SEARCH_DIRS
+  RESULT_VARIABLE _HAIKU_SEARCH_DIRS_FOUND
+  OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+string(REGEX MATCH "libraries: =?([^\n]*:)?/boot/system/develop/lib/([^/]*)/?(:?\n+)" _dummy "${_HAIKU_SEARCH_DIRS}\n")
+set(CMAKE_HAIKU_SECONDARY_ARCH "${CMAKE_MATCH_2}")
+
+if(NOT CMAKE_HAIKU_SECONDARY_ARCH)
+  set(CMAKE_HAIKU_SECONDARY_ARCH_SUBDIR "")
+  unset(CMAKE_HAIKU_SECONDARY_ARCH)
+else()
+  set(CMAKE_HAIKU_SECONDARY_ARCH_SUBDIR "/${CMAKE_HAIKU_SECONDARY_ARCH}")
+
+  # Override CMAKE_*LIBRARY_ARCHITECTURE. This will cause FIND_LIBRARY to search
+  # the libraries in the correct subdirectory first. It still isn't completely
+  # correct, since the parent directories shouldn't be searched at all. The
+  # primary architecture library might still be found, if there isn't one
+  # installed for the secondary architecture or it is installed in a less
+  # specific location.
+  set(CMAKE_LIBRARY_ARCHITECTURE ${CMAKE_HAIKU_SECONDARY_ARCH})
+  set(CMAKE_C_LIBRARY_ARCHITECTURE ${CMAKE_HAIKU_SECONDARY_ARCH})
+  set(CMAKE_CXX_LIBRARY_ARCHITECTURE ${CMAKE_HAIKU_SECONDARY_ARCH})
+endif()
+
+list(APPEND CMAKE_SYSTEM_PREFIX_PATH
+  /boot/system/non-packaged
+  /boot/system
+  )
+
+LIST(APPEND CMAKE_HAIKU_COMMON_INCLUDE_DIRECTORIES
+  /boot/system/non-packaged/develop/headers${CMAKE_HAIKU_SECONDARY_ARCH_SUBDIR}
+  /boot/system/develop/headers/os
+  /boot/system/develop/headers/os/app
+  /boot/system/develop/headers/os/device
+  /boot/system/develop/headers/os/drivers
+  /boot/system/develop/headers/os/game
+  /boot/system/develop/headers/os/interface
+  /boot/system/develop/headers/os/kernel
+  /boot/system/develop/headers/os/locale
+  /boot/system/develop/headers/os/mail
+  /boot/system/develop/headers/os/media
+  /boot/system/develop/headers/os/midi
+  /boot/system/develop/headers/os/midi2
+  /boot/system/develop/headers/os/net
+  /boot/system/develop/headers/os/opengl
+  /boot/system/develop/headers/os/storage
+  /boot/system/develop/headers/os/support
+  /boot/system/develop/headers/os/translation
+  /boot/system/develop/headers/os/add-ons/graphics
+  /boot/system/develop/headers/os/add-ons/input_server
+  /boot/system/develop/headers/os/add-ons/screen_saver
+  /boot/system/develop/headers/os/add-ons/tracker
+  /boot/system/develop/headers/os/be_apps/Deskbar
+  /boot/system/develop/headers/os/be_apps/NetPositive
+  /boot/system/develop/headers/os/be_apps/Tracker
+  /boot/system/develop/headers/3rdparty
+  /boot/system/develop/headers/bsd
+  /boot/system/develop/headers/glibc
+  /boot/system/develop/headers/gnu
+  /boot/system/develop/headers/posix
+  /boot/system/develop/headers${CMAKE_HAIKU_SECONDARY_ARCH_SUBDIR}
+  )
+IF (CMAKE_HAIKU_SECONDARY_ARCH)
+  LIST(APPEND CMAKE_HAIKU_COMMON_INCLUDE_DIRECTORIES
+    /boot/system/develop/headers
+    )
+ENDIF (CMAKE_HAIKU_SECONDARY_ARCH)
+
+LIST(APPEND CMAKE_HAIKU_C_INCLUDE_DIRECTORIES
+  ${CMAKE_HAIKU_COMMON_INCLUDE_DIRECTORIES}
+  )
+
+LIST(APPEND CMAKE_HAIKU_CXX_INCLUDE_DIRECTORIES
+  ${CMAKE_HAIKU_COMMON_INCLUDE_DIRECTORIES})
+
+LIST(APPEND CMAKE_SYSTEM_INCLUDE_PATH ${CMAKE_HAIKU_C_INCLUDE_DIRECTORIES})
+
+LIST(APPEND CMAKE_HAIKU_DEVELOP_LIB_DIRECTORIES
+  /boot/system/non-packaged/develop/lib${CMAKE_HAIKU_SECONDARY_ARCH_SUBDIR}
+  /boot/system/develop/lib${CMAKE_HAIKU_SECONDARY_ARCH_SUBDIR}
+  )
+
+LIST(APPEND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES
+  ${CMAKE_HAIKU_DEVELOP_LIB_DIRECTORIES}
+  )
+
+LIST(APPEND CMAKE_SYSTEM_LIBRARY_PATH ${CMAKE_HAIKU_DEVELOP_LIB_DIRECTORIES})
+
+if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
+  set(CMAKE_INSTALL_PREFIX "/boot/system" CACHE PATH
+    "Install path prefix, prepended onto install directories." FORCE)
+endif()
diff --git a/share/cmake-3.18/Modules/Platform/Linux-Absoft-Fortran.cmake b/share/cmake-3.22/Modules/Platform/Linux-Absoft-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-Absoft-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-Absoft-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Linux-CCur-Fortran.cmake b/share/cmake-3.22/Modules/Platform/Linux-CCur-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-CCur-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-CCur-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Linux-Clang-C.cmake b/share/cmake-3.22/Modules/Platform/Linux-Clang-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-Clang-C.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-Clang-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Linux-Clang-CXX.cmake b/share/cmake-3.22/Modules/Platform/Linux-Clang-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-Clang-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-Clang-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Linux-Determine-CXX.cmake b/share/cmake-3.22/Modules/Platform/Linux-Determine-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-Determine-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-Determine-CXX.cmake
diff --git a/share/cmake-3.22/Modules/Platform/Linux-Fujitsu-C.cmake b/share/cmake-3.22/Modules/Platform/Linux-Fujitsu-C.cmake
new file mode 100644
index 0000000..e37573d
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Linux-Fujitsu-C.cmake
@@ -0,0 +1 @@
+include(Platform/Linux-Clang-C)
diff --git a/share/cmake-3.22/Modules/Platform/Linux-Fujitsu-CXX.cmake b/share/cmake-3.22/Modules/Platform/Linux-Fujitsu-CXX.cmake
new file mode 100644
index 0000000..5257f13
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Linux-Fujitsu-CXX.cmake
@@ -0,0 +1 @@
+include(Platform/Linux-Clang-CXX)
diff --git a/share/cmake-3.22/Modules/Platform/Linux-Fujitsu.cmake b/share/cmake-3.22/Modules/Platform/Linux-Fujitsu.cmake
new file mode 100644
index 0000000..be11b0a
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Linux-Fujitsu.cmake
@@ -0,0 +1,17 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# This module is shared by multiple languages; use include blocker.
+if(__LINUX_COMPILER_FUJITSU)
+  return()
+endif()
+set(__LINUX_COMPILER_FUJITSU 1)
+
+macro(__linux_compiler_fujitsu lang)
+  set(CMAKE_${lang}_COMPILE_OPTIONS_PIC "-fPIC")
+  set(CMAKE_${lang}_COMPILE_OPTIONS_PIE "-fPIE")
+  set(CMAKE_${lang}_COMPILE_OPTIONS_VISIBILITY "-fvisibility=")
+  set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "-fPIC")
+  set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-shared")
+endmacro()
diff --git a/share/cmake-3.18/Modules/Platform/Linux-GNU-C.cmake b/share/cmake-3.22/Modules/Platform/Linux-GNU-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-GNU-C.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-GNU-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Linux-GNU-CXX.cmake b/share/cmake-3.22/Modules/Platform/Linux-GNU-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-GNU-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-GNU-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Linux-GNU-Fortran.cmake b/share/cmake-3.22/Modules/Platform/Linux-GNU-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-GNU-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-GNU-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Linux-GNU.cmake b/share/cmake-3.22/Modules/Platform/Linux-GNU.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-GNU.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-GNU.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Linux-Intel-C.cmake b/share/cmake-3.22/Modules/Platform/Linux-Intel-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-Intel-C.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-Intel-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Linux-Intel-CXX.cmake b/share/cmake-3.22/Modules/Platform/Linux-Intel-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-Intel-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-Intel-CXX.cmake
diff --git a/share/cmake-3.22/Modules/Platform/Linux-Intel-Fortran.cmake b/share/cmake-3.22/Modules/Platform/Linux-Intel-Fortran.cmake
new file mode 100644
index 0000000..a99e793
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Linux-Intel-Fortran.cmake
@@ -0,0 +1,4 @@
+include(Platform/Linux-Intel)
+__linux_compiler_intel(Fortran)
+string(APPEND CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS " -nofor-main")
+set(CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS "")
diff --git a/share/cmake-3.18/Modules/Platform/Linux-Intel.cmake b/share/cmake-3.22/Modules/Platform/Linux-Intel.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-Intel.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-Intel.cmake
diff --git a/share/cmake-3.22/Modules/Platform/Linux-IntelLLVM-C.cmake b/share/cmake-3.22/Modules/Platform/Linux-IntelLLVM-C.cmake
new file mode 100644
index 0000000..5356c4f
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Linux-IntelLLVM-C.cmake
@@ -0,0 +1,3 @@
+include(Platform/Linux-IntelLLVM)
+__linux_compiler_intel_llvm(C)
+set(CMAKE_INCLUDE_SYSTEM_FLAG_C "-isystem ")
diff --git a/share/cmake-3.22/Modules/Platform/Linux-IntelLLVM-CXX.cmake b/share/cmake-3.22/Modules/Platform/Linux-IntelLLVM-CXX.cmake
new file mode 100644
index 0000000..44ce0e8
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Linux-IntelLLVM-CXX.cmake
@@ -0,0 +1,3 @@
+include(Platform/Linux-IntelLLVM)
+__linux_compiler_intel_llvm(CXX)
+set(CMAKE_INCLUDE_SYSTEM_FLAG_CXX "-isystem ")
diff --git a/share/cmake-3.22/Modules/Platform/Linux-IntelLLVM-Fortran.cmake b/share/cmake-3.22/Modules/Platform/Linux-IntelLLVM-Fortran.cmake
new file mode 100644
index 0000000..1cd9b1f
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Linux-IntelLLVM-Fortran.cmake
@@ -0,0 +1,4 @@
+include(Platform/Linux-IntelLLVM)
+__linux_compiler_intel_llvm(Fortran)
+string(APPEND CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS " -nofor-main")
+set(CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS "")
diff --git a/share/cmake-3.22/Modules/Platform/Linux-IntelLLVM.cmake b/share/cmake-3.22/Modules/Platform/Linux-IntelLLVM.cmake
new file mode 100644
index 0000000..1363b44
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Linux-IntelLLVM.cmake
@@ -0,0 +1,55 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# This module is shared by multiple languages; use include blocker.
+if(__LINUX_COMPILER_INTEL_LLVM)
+  return()
+endif()
+set(__LINUX_COMPILER_INTEL_LLVM 1)
+
+if(NOT XIAR)
+  set(_intel_xiar_hints)
+  foreach(lang C CXX Fortran)
+    if(IS_ABSOLUTE "${CMAKE_${lang}_COMPILER}")
+      get_filename_component(_hint "${CMAKE_${lang}_COMPILER}" PATH)
+      list(APPEND _intel_xiar_hints ${_hint})
+    endif()
+  endforeach()
+  find_program(XIAR NAMES xiar HINTS ${_intel_xiar_hints})
+  mark_as_advanced(XIAR)
+endif()
+
+macro(__linux_compiler_intel_llvm lang)
+  set(CMAKE_${lang}_COMPILE_OPTIONS_PIC "-fPIC")
+  set(CMAKE_${lang}_COMPILE_OPTIONS_PIE "-fPIE")
+  set(_CMAKE_${lang}_PIE_MAY_BE_SUPPORTED_BY_LINKER NO)
+  set(_CMAKE_${lang}_PIE_MAY_BE_SUPPORTED_BY_LINKER YES)
+  set(CMAKE_${lang}_LINK_OPTIONS_PIE ${CMAKE_${lang}_COMPILE_OPTIONS_PIE} "-pie")
+  set(CMAKE_${lang}_LINK_OPTIONS_NO_PIE "-no-pie")
+  set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "-fPIC")
+  set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-shared")
+
+  # We pass this for historical reasons.  Projects may have
+  # executables that use dlopen but do not set ENABLE_EXPORTS.
+  set(CMAKE_SHARED_LIBRARY_LINK_${lang}_FLAGS "-rdynamic")
+
+  set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Wl,")
+  set(CMAKE_${lang}_LINKER_WRAPPER_FLAG_SEP ",")
+
+  set(_CMAKE_${lang}_IPO_SUPPORTED_BY_CMAKE YES)
+
+  if(XIAR)
+    # INTERPROCEDURAL_OPTIMIZATION
+    set(CMAKE_${lang}_COMPILE_OPTIONS_IPO -ipo)
+    set(CMAKE_${lang}_CREATE_STATIC_LIBRARY_IPO
+      "${XIAR} cr <TARGET> <LINK_FLAGS> <OBJECTS> "
+      "${XIAR} -s <TARGET> ")
+    set(_CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER YES)
+    set(_CMAKE_${lang}_IPO_LEGACY_BEHAVIOR YES)
+  else()
+    set(_CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER NO)
+  endif()
+
+  set(CMAKE_${lang}_COMPILE_OPTIONS_VISIBILITY "-fvisibility=")
+endmacro()
diff --git a/share/cmake-3.18/Modules/Platform/Linux-NAG-Fortran.cmake b/share/cmake-3.22/Modules/Platform/Linux-NAG-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-NAG-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-NAG-Fortran.cmake
diff --git a/share/cmake-3.22/Modules/Platform/Linux-NVHPC-C.cmake b/share/cmake-3.22/Modules/Platform/Linux-NVHPC-C.cmake
new file mode 100644
index 0000000..4aab327
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Linux-NVHPC-C.cmake
@@ -0,0 +1,2 @@
+include(Platform/Linux-NVHPC)
+__linux_compiler_nvhpc(C)
diff --git a/share/cmake-3.22/Modules/Platform/Linux-NVHPC-CXX.cmake b/share/cmake-3.22/Modules/Platform/Linux-NVHPC-CXX.cmake
new file mode 100644
index 0000000..57380eb
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Linux-NVHPC-CXX.cmake
@@ -0,0 +1,2 @@
+include(Platform/Linux-NVHPC)
+__linux_compiler_nvhpc(CXX)
diff --git a/share/cmake-3.22/Modules/Platform/Linux-NVHPC-Fortran.cmake b/share/cmake-3.22/Modules/Platform/Linux-NVHPC-Fortran.cmake
new file mode 100644
index 0000000..c68430c
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Linux-NVHPC-Fortran.cmake
@@ -0,0 +1,2 @@
+include(Platform/Linux-NVHPC)
+__linux_compiler_nvhpc(Fortran)
diff --git a/share/cmake-3.22/Modules/Platform/Linux-NVHPC.cmake b/share/cmake-3.22/Modules/Platform/Linux-NVHPC.cmake
new file mode 100644
index 0000000..aad17f1
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Linux-NVHPC.cmake
@@ -0,0 +1,15 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# This module is shared by multiple languages; use include blocker.
+if(__LINUX_COMPILER_NVIDIA)
+  return()
+endif()
+set(__LINUX_COMPILER_NVIDIA 1)
+
+include(Platform/Linux-PGI)
+
+macro(__linux_compiler_nvhpc lang)
+  __linux_compiler_pgi(${lang})
+endmacro()
diff --git a/share/cmake-3.18/Modules/Platform/Linux-OpenWatcom-C.cmake b/share/cmake-3.22/Modules/Platform/Linux-OpenWatcom-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-OpenWatcom-C.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-OpenWatcom-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Linux-OpenWatcom-CXX.cmake b/share/cmake-3.22/Modules/Platform/Linux-OpenWatcom-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-OpenWatcom-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-OpenWatcom-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Linux-OpenWatcom.cmake b/share/cmake-3.22/Modules/Platform/Linux-OpenWatcom.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-OpenWatcom.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-OpenWatcom.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Linux-PGI-C.cmake b/share/cmake-3.22/Modules/Platform/Linux-PGI-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-PGI-C.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-PGI-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Linux-PGI-CXX.cmake b/share/cmake-3.22/Modules/Platform/Linux-PGI-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-PGI-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-PGI-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Linux-PGI-Fortran.cmake b/share/cmake-3.22/Modules/Platform/Linux-PGI-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-PGI-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-PGI-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Linux-PGI.cmake b/share/cmake-3.22/Modules/Platform/Linux-PGI.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-PGI.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-PGI.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Linux-PathScale-C.cmake b/share/cmake-3.22/Modules/Platform/Linux-PathScale-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-PathScale-C.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-PathScale-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Linux-PathScale-CXX.cmake b/share/cmake-3.22/Modules/Platform/Linux-PathScale-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-PathScale-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-PathScale-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Linux-PathScale-Fortran.cmake b/share/cmake-3.22/Modules/Platform/Linux-PathScale-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-PathScale-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-PathScale-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Linux-PathScale.cmake b/share/cmake-3.22/Modules/Platform/Linux-PathScale.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-PathScale.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-PathScale.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Linux-SunPro-CXX.cmake b/share/cmake-3.22/Modules/Platform/Linux-SunPro-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-SunPro-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-SunPro-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Linux-TinyCC-C.cmake b/share/cmake-3.22/Modules/Platform/Linux-TinyCC-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-TinyCC-C.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-TinyCC-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Linux-VisualAge-C.cmake b/share/cmake-3.22/Modules/Platform/Linux-VisualAge-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-VisualAge-C.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-VisualAge-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Linux-VisualAge-CXX.cmake b/share/cmake-3.22/Modules/Platform/Linux-VisualAge-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-VisualAge-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-VisualAge-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Linux-VisualAge-Fortran.cmake b/share/cmake-3.22/Modules/Platform/Linux-VisualAge-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-VisualAge-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-VisualAge-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Linux-XL-C.cmake b/share/cmake-3.22/Modules/Platform/Linux-XL-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-XL-C.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-XL-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Linux-XL-CXX.cmake b/share/cmake-3.22/Modules/Platform/Linux-XL-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-XL-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-XL-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Linux-XL-Fortran.cmake b/share/cmake-3.22/Modules/Platform/Linux-XL-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-XL-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-XL-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Linux-como.cmake b/share/cmake-3.22/Modules/Platform/Linux-como.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux-como.cmake
rename to share/cmake-3.22/Modules/Platform/Linux-como.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Linux.cmake b/share/cmake-3.22/Modules/Platform/Linux.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Linux.cmake
rename to share/cmake-3.22/Modules/Platform/Linux.cmake
diff --git a/share/cmake-3.18/Modules/Platform/MP-RAS.cmake b/share/cmake-3.22/Modules/Platform/MP-RAS.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/MP-RAS.cmake
rename to share/cmake-3.22/Modules/Platform/MP-RAS.cmake
diff --git a/share/cmake-3.22/Modules/Platform/MSYS-Clang-C.cmake b/share/cmake-3.22/Modules/Platform/MSYS-Clang-C.cmake
new file mode 100644
index 0000000..f025b33
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/MSYS-Clang-C.cmake
@@ -0,0 +1 @@
+include(Platform/CYGWIN-Clang-C)
diff --git a/share/cmake-3.22/Modules/Platform/MSYS-Clang-CXX.cmake b/share/cmake-3.22/Modules/Platform/MSYS-Clang-CXX.cmake
new file mode 100644
index 0000000..e509eaa
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/MSYS-Clang-CXX.cmake
@@ -0,0 +1 @@
+include(Platform/CYGWIN-Clang-CXX)
diff --git a/share/cmake-3.22/Modules/Platform/MSYS-Determine-CXX.cmake b/share/cmake-3.22/Modules/Platform/MSYS-Determine-CXX.cmake
new file mode 100644
index 0000000..dec17f0
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/MSYS-Determine-CXX.cmake
@@ -0,0 +1 @@
+include(Platform/CYGWIN-Determine-CXX)
diff --git a/share/cmake-3.18/Modules/Platform/CYGWIN-Clang-C.cmake b/share/cmake-3.22/Modules/Platform/MSYS-GNU-C.cmake
similarity index 100%
copy from share/cmake-3.18/Modules/Platform/CYGWIN-Clang-C.cmake
copy to share/cmake-3.22/Modules/Platform/MSYS-GNU-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/CYGWIN-Clang-CXX.cmake b/share/cmake-3.22/Modules/Platform/MSYS-GNU-CXX.cmake
similarity index 100%
copy from share/cmake-3.18/Modules/Platform/CYGWIN-Clang-CXX.cmake
copy to share/cmake-3.22/Modules/Platform/MSYS-GNU-CXX.cmake
diff --git a/share/cmake-3.22/Modules/Platform/MSYS-GNU-Fortran.cmake b/share/cmake-3.22/Modules/Platform/MSYS-GNU-Fortran.cmake
new file mode 100644
index 0000000..b0b7d8e
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/MSYS-GNU-Fortran.cmake
@@ -0,0 +1 @@
+include(Platform/CYGWIN-GNU-Fortran)
diff --git a/share/cmake-3.22/Modules/Platform/MSYS-GNU.cmake b/share/cmake-3.22/Modules/Platform/MSYS-GNU.cmake
new file mode 100644
index 0000000..012c112
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/MSYS-GNU.cmake
@@ -0,0 +1 @@
+include(Platform/CYGWIN-GNU)
diff --git a/share/cmake-3.22/Modules/Platform/MSYS-windres.cmake b/share/cmake-3.22/Modules/Platform/MSYS-windres.cmake
new file mode 100644
index 0000000..faaccc2
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/MSYS-windres.cmake
@@ -0,0 +1 @@
+include(Platform/CYGWIN-windres)
diff --git a/share/cmake-3.22/Modules/Platform/MSYS.cmake b/share/cmake-3.22/Modules/Platform/MSYS.cmake
new file mode 100644
index 0000000..96fa36f
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/MSYS.cmake
@@ -0,0 +1,4 @@
+set(MSYS 1)
+include(Platform/CYGWIN)
+set(CMAKE_SHARED_LIBRARY_PREFIX "msys-")
+set(CMAKE_SHARED_MODULE_PREFIX "msys-")
diff --git a/share/cmake-3.18/Modules/Platform/Midipix.cmake b/share/cmake-3.22/Modules/Platform/Midipix.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Midipix.cmake
rename to share/cmake-3.22/Modules/Platform/Midipix.cmake
diff --git a/share/cmake-3.18/Modules/Platform/MirBSD.cmake b/share/cmake-3.22/Modules/Platform/MirBSD.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/MirBSD.cmake
rename to share/cmake-3.22/Modules/Platform/MirBSD.cmake
diff --git a/share/cmake-3.18/Modules/Platform/NetBSD.cmake b/share/cmake-3.22/Modules/Platform/NetBSD.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/NetBSD.cmake
rename to share/cmake-3.22/Modules/Platform/NetBSD.cmake
diff --git a/share/cmake-3.18/Modules/Platform/OS2-OpenWatcom-C.cmake b/share/cmake-3.22/Modules/Platform/OS2-OpenWatcom-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/OS2-OpenWatcom-C.cmake
rename to share/cmake-3.22/Modules/Platform/OS2-OpenWatcom-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/OS2-OpenWatcom-CXX.cmake b/share/cmake-3.22/Modules/Platform/OS2-OpenWatcom-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/OS2-OpenWatcom-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/OS2-OpenWatcom-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/OS2-OpenWatcom.cmake b/share/cmake-3.22/Modules/Platform/OS2-OpenWatcom.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/OS2-OpenWatcom.cmake
rename to share/cmake-3.22/Modules/Platform/OS2-OpenWatcom.cmake
diff --git a/share/cmake-3.18/Modules/Platform/OS2.cmake b/share/cmake-3.22/Modules/Platform/OS2.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/OS2.cmake
rename to share/cmake-3.22/Modules/Platform/OS2.cmake
diff --git a/share/cmake-3.18/Modules/Platform/OSF1.cmake b/share/cmake-3.22/Modules/Platform/OSF1.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/OSF1.cmake
rename to share/cmake-3.22/Modules/Platform/OSF1.cmake
diff --git a/share/cmake-3.18/Modules/Platform/OpenBSD.cmake b/share/cmake-3.22/Modules/Platform/OpenBSD.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/OpenBSD.cmake
rename to share/cmake-3.22/Modules/Platform/OpenBSD.cmake
diff --git a/share/cmake-3.18/Modules/Platform/OpenVMS.cmake b/share/cmake-3.22/Modules/Platform/OpenVMS.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/OpenVMS.cmake
rename to share/cmake-3.22/Modules/Platform/OpenVMS.cmake
diff --git a/share/cmake-3.18/Modules/Platform/QNX.cmake b/share/cmake-3.22/Modules/Platform/QNX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/QNX.cmake
rename to share/cmake-3.22/Modules/Platform/QNX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/RISCos.cmake b/share/cmake-3.22/Modules/Platform/RISCos.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/RISCos.cmake
rename to share/cmake-3.22/Modules/Platform/RISCos.cmake
diff --git a/share/cmake-3.18/Modules/Platform/SCO_SV.cmake b/share/cmake-3.22/Modules/Platform/SCO_SV.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/SCO_SV.cmake
rename to share/cmake-3.22/Modules/Platform/SCO_SV.cmake
diff --git a/share/cmake-3.18/Modules/Platform/SINIX.cmake b/share/cmake-3.22/Modules/Platform/SINIX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/SINIX.cmake
rename to share/cmake-3.22/Modules/Platform/SINIX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/SunOS-Clang-C.cmake b/share/cmake-3.22/Modules/Platform/SunOS-Clang-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/SunOS-Clang-C.cmake
rename to share/cmake-3.22/Modules/Platform/SunOS-Clang-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/SunOS-Clang-CXX.cmake b/share/cmake-3.22/Modules/Platform/SunOS-Clang-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/SunOS-Clang-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/SunOS-Clang-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/SunOS-GNU-C.cmake b/share/cmake-3.22/Modules/Platform/SunOS-GNU-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/SunOS-GNU-C.cmake
rename to share/cmake-3.22/Modules/Platform/SunOS-GNU-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/SunOS-GNU-CXX.cmake b/share/cmake-3.22/Modules/Platform/SunOS-GNU-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/SunOS-GNU-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/SunOS-GNU-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/SunOS-GNU-Fortran.cmake b/share/cmake-3.22/Modules/Platform/SunOS-GNU-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/SunOS-GNU-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/SunOS-GNU-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Platform/SunOS-GNU.cmake b/share/cmake-3.22/Modules/Platform/SunOS-GNU.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/SunOS-GNU.cmake
rename to share/cmake-3.22/Modules/Platform/SunOS-GNU.cmake
diff --git a/share/cmake-3.18/Modules/Platform/SunOS-PathScale-C.cmake b/share/cmake-3.22/Modules/Platform/SunOS-PathScale-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/SunOS-PathScale-C.cmake
rename to share/cmake-3.22/Modules/Platform/SunOS-PathScale-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/SunOS-PathScale-CXX.cmake b/share/cmake-3.22/Modules/Platform/SunOS-PathScale-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/SunOS-PathScale-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/SunOS-PathScale-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/SunOS-PathScale-Fortran.cmake b/share/cmake-3.22/Modules/Platform/SunOS-PathScale-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/SunOS-PathScale-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/SunOS-PathScale-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Platform/SunOS-PathScale.cmake b/share/cmake-3.22/Modules/Platform/SunOS-PathScale.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/SunOS-PathScale.cmake
rename to share/cmake-3.22/Modules/Platform/SunOS-PathScale.cmake
diff --git a/share/cmake-3.18/Modules/Platform/SunOS.cmake b/share/cmake-3.22/Modules/Platform/SunOS.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/SunOS.cmake
rename to share/cmake-3.22/Modules/Platform/SunOS.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Tru64.cmake b/share/cmake-3.22/Modules/Platform/Tru64.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Tru64.cmake
rename to share/cmake-3.22/Modules/Platform/Tru64.cmake
diff --git a/share/cmake-3.18/Modules/Platform/ULTRIX.cmake b/share/cmake-3.22/Modules/Platform/ULTRIX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/ULTRIX.cmake
rename to share/cmake-3.22/Modules/Platform/ULTRIX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/UNIX_SV.cmake b/share/cmake-3.22/Modules/Platform/UNIX_SV.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/UNIX_SV.cmake
rename to share/cmake-3.22/Modules/Platform/UNIX_SV.cmake
diff --git a/share/cmake-3.18/Modules/Platform/UnixPaths.cmake b/share/cmake-3.22/Modules/Platform/UnixPaths.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/UnixPaths.cmake
rename to share/cmake-3.22/Modules/Platform/UnixPaths.cmake
diff --git a/share/cmake-3.18/Modules/Platform/UnixWare.cmake b/share/cmake-3.22/Modules/Platform/UnixWare.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/UnixWare.cmake
rename to share/cmake-3.22/Modules/Platform/UnixWare.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Windows-Apple-Swift.cmake b/share/cmake-3.22/Modules/Platform/Windows-Apple-Swift.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Windows-Apple-Swift.cmake
rename to share/cmake-3.22/Modules/Platform/Windows-Apple-Swift.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Windows-Borland-C.cmake b/share/cmake-3.22/Modules/Platform/Windows-Borland-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Windows-Borland-C.cmake
rename to share/cmake-3.22/Modules/Platform/Windows-Borland-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Windows-Borland-CXX.cmake b/share/cmake-3.22/Modules/Platform/Windows-Borland-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Windows-Borland-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/Windows-Borland-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Windows-Clang-ASM.cmake b/share/cmake-3.22/Modules/Platform/Windows-Clang-ASM.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Windows-Clang-ASM.cmake
rename to share/cmake-3.22/Modules/Platform/Windows-Clang-ASM.cmake
diff --git a/share/cmake-3.22/Modules/Platform/Windows-Clang-C.cmake b/share/cmake-3.22/Modules/Platform/Windows-Clang-C.cmake
new file mode 100644
index 0000000..322e3fb
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Windows-Clang-C.cmake
@@ -0,0 +1,18 @@
+include(Platform/Windows-Clang)
+__windows_compiler_clang(C)
+
+if("x${MAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "xMSVC")
+  if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+      AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
+      AND CMAKE_DEPFILE_FLAGS_C)
+    set(CMAKE_C_DEPENDS_USE_COMPILER TRUE)
+  endif()
+elseif("x${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "xGNU")
+  if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+      AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
+      AND CMAKE_DEPFILE_FLAGS_C)
+    # dependencies are computed by the compiler itself
+    set(CMAKE_C_DEPFILE_FORMAT gcc)
+    set(CMAKE_C_DEPENDS_USE_COMPILER TRUE)
+  endif()
+endif()
diff --git a/share/cmake-3.22/Modules/Platform/Windows-Clang-CXX.cmake b/share/cmake-3.22/Modules/Platform/Windows-Clang-CXX.cmake
new file mode 100644
index 0000000..b4aaf1e
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Windows-Clang-CXX.cmake
@@ -0,0 +1,19 @@
+include(Platform/Windows-Clang)
+set(_COMPILE_CXX_MSVC " -TP")
+__windows_compiler_clang(CXX)
+
+if("x${MAKE_CXX_COMPILER_FRONTEND_VARIANT}" STREQUAL "xMSVC")
+  if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+      AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
+      AND CMAKE_DEPFILE_FLAGS_CXX)
+    set(CMAKE_CXX_DEPENDS_USE_COMPILER TRUE)
+  endif()
+elseif("x${CMAKE_CXX_COMPILER_FRONTEND_VARIANT}" STREQUAL "xGNU")
+  if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+      AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
+      AND CMAKE_DEPFILE_FLAGS_CXX)
+    # dependencies are computed by the compiler itself
+    set(CMAKE_CXX_DEPFILE_FORMAT gcc)
+    set(CMAKE_CXX_DEPENDS_USE_COMPILER TRUE)
+  endif()
+endif()
diff --git a/share/cmake-3.22/Modules/Platform/Windows-Clang.cmake b/share/cmake-3.22/Modules/Platform/Windows-Clang.cmake
new file mode 100644
index 0000000..1c32018
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Windows-Clang.cmake
@@ -0,0 +1,213 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# This module is shared by multiple languages; use include blocker.
+if(__WINDOWS_CLANG)
+  return()
+endif()
+set(__WINDOWS_CLANG 1)
+
+set(__pch_header_C "c-header")
+set(__pch_header_CXX "c++-header")
+set(__pch_header_OBJC "objective-c-header")
+set(__pch_header_OBJCXX "objective-c++-header")
+
+macro(__windows_compiler_clang_gnu lang)
+  set(CMAKE_LIBRARY_PATH_FLAG "-L")
+  set(CMAKE_LINK_LIBRARY_FLAG "-l")
+
+  set(CMAKE_IMPORT_LIBRARY_PREFIX "")
+  set(CMAKE_SHARED_LIBRARY_PREFIX "")
+  set(CMAKE_SHARED_MODULE_PREFIX  "")
+  set(CMAKE_STATIC_LIBRARY_PREFIX "")
+  set(CMAKE_EXECUTABLE_SUFFIX     ".exe")
+  set(CMAKE_IMPORT_LIBRARY_SUFFIX ".lib")
+  set(CMAKE_SHARED_LIBRARY_SUFFIX ".dll")
+  set(CMAKE_SHARED_MODULE_SUFFIX  ".dll")
+  set(CMAKE_STATIC_LIBRARY_SUFFIX ".lib")
+  if(NOT "${lang}" STREQUAL "ASM")
+    set(CMAKE_DEPFILE_FLAGS_${lang} "-MD -MT <DEP_TARGET> -MF <DEP_FILE>")
+  endif()
+
+  set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "")
+  set(CMAKE_FIND_LIBRARY_SUFFIXES ".dll.a" ".a" ".lib")
+  set(CMAKE_SUPPORT_WINDOWS_EXPORT_ALL_SYMBOLS 1)
+  set (CMAKE_LINK_DEF_FILE_FLAG "-Xlinker /DEF:")
+
+  set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Xlinker" " ")
+  set(CMAKE_${lang}_LINKER_WRAPPER_FLAG_SEP)
+
+  set(CMAKE_${lang}_LINKER_MANIFEST_FLAG " -Xlinker /MANIFESTINPUT:")
+
+  if("${CMAKE_${lang}_SIMULATE_VERSION}" MATCHES "^([0-9]+)\\.([0-9]+)")
+    math(EXPR MSVC_VERSION "${CMAKE_MATCH_1}*100 + ${CMAKE_MATCH_2}")
+  endif()
+
+  # No -fPIC on Windows
+  set(CMAKE_${lang}_COMPILE_OPTIONS_PIC "")
+  set(CMAKE_${lang}_COMPILE_OPTIONS_PIE "")
+  set(_CMAKE_${lang}_PIE_MAY_BE_SUPPORTED_BY_LINKER NO)
+  set(CMAKE_${lang}_LINK_OPTIONS_PIE "")
+  set(CMAKE_${lang}_LINK_OPTIONS_NO_PIE "")
+  set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "")
+
+  set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_OBJECTS 1)
+  set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_LIBRARIES 1)
+  set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_INCLUDES 1)
+
+  set(CMAKE_${lang}_COMPILE_OPTIONS_IPO "-flto")
+  set(_CMAKE_${lang}_IPO_SUPPORTED_BY_CMAKE YES)
+  set(_CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER YES)
+  set(CMAKE_${lang}_ARCHIVE_CREATE_IPO "<CMAKE_AR> qc <TARGET> <LINK_FLAGS> <OBJECTS>")
+  set(CMAKE_${lang}_ARCHIVE_APPEND_IPO "<CMAKE_AR> q <TARGET> <LINK_FLAGS> <OBJECTS>")
+  set(CMAKE_${lang}_ARCHIVE_FINISH_IPO "<CMAKE_RANLIB> <TARGET>")
+
+  # Create archiving rules to support large object file lists for static libraries.
+  set(CMAKE_${lang}_ARCHIVE_CREATE "<CMAKE_AR> qc <TARGET> <LINK_FLAGS> <OBJECTS>")
+  set(CMAKE_${lang}_ARCHIVE_APPEND "<CMAKE_AR> q <TARGET> <LINK_FLAGS> <OBJECTS>")
+  set(CMAKE_${lang}_ARCHIVE_FINISH "<CMAKE_RANLIB> <TARGET>")
+  set(CMAKE_${lang}_CREATE_SHARED_LIBRARY
+    "<CMAKE_${lang}_COMPILER> -fuse-ld=lld-link -nostartfiles -nostdlib <CMAKE_SHARED_LIBRARY_${lang}_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS> -o <TARGET> ${CMAKE_GNULD_IMAGE_VERSION} -Xlinker /MANIFEST:EMBED -Xlinker /implib:<TARGET_IMPLIB> -Xlinker /pdb:<TARGET_PDB> -Xlinker /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> <OBJECTS> <LINK_LIBRARIES> <MANIFESTS>")
+  set(CMAKE_${lang}_CREATE_SHARED_MODULE ${CMAKE_${lang}_CREATE_SHARED_LIBRARY})
+  set(CMAKE_${lang}_LINK_EXECUTABLE
+    "<CMAKE_${lang}_COMPILER> -fuse-ld=lld-link -nostartfiles -nostdlib <FLAGS> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> -Xlinker /MANIFEST:EMBED -Xlinker /implib:<TARGET_IMPLIB> -Xlinker /pdb:<TARGET_PDB> -Xlinker /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> ${CMAKE_GNULD_IMAGE_VERSION} <LINK_LIBRARIES> <MANIFESTS>")
+
+  set(CMAKE_${lang}_CREATE_WIN32_EXE "-Xlinker /subsystem:windows")
+  set(CMAKE_${lang}_CREATE_CONSOLE_EXE "-Xlinker /subsystem:console")
+
+  if(NOT "${lang}" STREQUAL "ASM")
+    set(CMAKE_${lang}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreaded         -Xclang -flto-visibility-public-std -D_MT -Xclang --dependent-lib=libcmt)
+    set(CMAKE_${lang}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDLL      -D_DLL -D_MT -Xclang --dependent-lib=msvcrt)
+    set(CMAKE_${lang}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebug    -D_DEBUG -Xclang -flto-visibility-public-std -D_MT -Xclang --dependent-lib=libcmtd)
+    set(CMAKE_${lang}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebugDLL -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd)
+
+    if(CMAKE_MSVC_RUNTIME_LIBRARY_DEFAULT)
+      set(__ADDED_FLAGS "")
+      set(__ADDED_FLAGS_DEBUG "")
+    else()
+      set(__ADDED_FLAGS_DEBUG "-D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd")
+      set(__ADDED_FLAGS "-D_DLL -D_MT -Xclang --dependent-lib=msvcrt")
+    endif()
+
+    string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -g -Xclang -gcodeview -O0 ${__ADDED_FLAGS_DEBUG}")
+    string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -Os -DNDEBUG ${__ADDED_FLAGS}")
+    string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -O3 -DNDEBUG ${__ADDED_FLAGS}")
+    string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -O2 -g -DNDEBUG -Xclang -gcodeview ${__ADDED_FLAGS}")
+  endif()
+  set(CMAKE_INCLUDE_SYSTEM_FLAG_${lang} "-isystem ")
+
+  set(CMAKE_PCH_EXTENSION .pch)
+  set(CMAKE_PCH_PROLOGUE "#pragma clang system_header")
+  set(CMAKE_${lang}_COMPILE_OPTIONS_USE_PCH -Xclang -include-pch -Xclang <PCH_FILE> -Xclang -include -Xclang <PCH_HEADER>)
+  set(CMAKE_${lang}_COMPILE_OPTIONS_CREATE_PCH -Xclang -emit-pch -Xclang -include -Xclang <PCH_HEADER> -x ${__pch_header_${lang}})
+
+  unset(__ADDED_FLAGS)
+  unset(__ADDED_FLAGS_DEBUG)
+  string(TOLOWER "${CMAKE_BUILD_TYPE}" BUILD_TYPE_LOWER)
+  set(CMAKE_${lang}_STANDARD_LIBRARIES_INIT "-lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 -loldnames")
+
+  enable_language(RC)
+endmacro()
+
+macro(__enable_llvm_rc_preprocessing clang_option_prefix extra_pp_flags)
+  # Feed the preprocessed rc file to llvm-rc
+  if(CMAKE_RC_COMPILER_INIT MATCHES "llvm-rc" OR CMAKE_RC_COMPILER MATCHES "llvm-rc")
+    if(DEFINED CMAKE_C_COMPILER_ID)
+      set(CMAKE_RC_PREPROCESSOR CMAKE_C_COMPILER)
+    elseif(DEFINED CMAKE_CXX_COMPILER_ID)
+      set(CMAKE_RC_PREPROCESSOR CMAKE_CXX_COMPILER)
+    endif()
+    if(DEFINED CMAKE_RC_PREPROCESSOR)
+      set(CMAKE_DEPFILE_FLAGS_RC "${clang_option_prefix}-MD ${clang_option_prefix}-MF ${clang_option_prefix}<DEP_FILE>")
+      # The <FLAGS> are passed to the preprocess and the resource compiler to pick
+      # up the eventual -D / -C options passed through the CMAKE_RC_FLAGS.
+      set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_COMMAND> -E cmake_llvm_rc <SOURCE> <OBJECT>.pp <${CMAKE_RC_PREPROCESSOR}> <DEFINES> -DRC_INVOKED <INCLUDES> <FLAGS> ${extra_pp_flags} -E -- <SOURCE> ++ <CMAKE_RC_COMPILER> <DEFINES> -I <SOURCE_DIR> <INCLUDES> <FLAGS> /fo <OBJECT> <OBJECT>.pp")
+      if(CMAKE_GENERATOR MATCHES "Ninja")
+        set(CMAKE_NINJA_CMCLDEPS_RC 0)
+        set(CMAKE_NINJA_DEP_TYPE_RC gcc)
+      endif()
+      unset(CMAKE_RC_PREPROCESSOR)
+    endif()
+  endif()
+endmacro()
+
+
+if("x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC"
+    OR "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
+
+  if ( DEFINED CMAKE_C_COMPILER_ID AND DEFINED CMAKE_CXX_COMPILER_ID
+       AND NOT "x${CMAKE_C_COMPILER_ID}" STREQUAL "x${CMAKE_CXX_COMPILER_ID}")
+    message(FATAL_ERROR "The current configuration mixes Clang and MSVC or "
+            "some other CL compatible compiler tool. This is not supported. "
+            "Use either clang or MSVC as both C and C++ compilers.")
+  endif()
+
+  if ( DEFINED CMAKE_C_COMPILER_FRONTEND_VARIANT AND DEFINED CMAKE_CXX_COMPILER_FRONTEND_VARIANT
+       AND NOT "x${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "x${CMAKE_CXX_COMPILER_FRONTEND_VARIANT}")
+    message(FATAL_ERROR "The current configuration uses the Clang compiler "
+            "tool with mixed frontend variants, both the GNU and in MSVC CL "
+            "like variants. This is not supported. Use either clang/clang++ "
+            "or clang-cl as both C and C++ compilers.")
+  endif()
+
+  if(NOT CMAKE_RC_COMPILER_INIT)
+    # Check if rc is already in the path
+    # This may happen in cases where the user is already in a visual studio environment when CMake is invoked
+    find_program(__RC_COMPILER_PATH NAMES rc)
+
+    # Default to rc if it's available, otherwise fall back to llvm-rc
+    if(__RC_COMPILER_PATH)
+      set(CMAKE_RC_COMPILER_INIT rc)
+    else()
+      find_program(__RC_COMPILER_PATH NAMES llvm-rc)
+      if(__RC_COMPILER_PATH)
+        set(CMAKE_RC_COMPILER_INIT llvm-rc)
+      endif()
+    endif()
+
+    unset(__RC_COMPILER_PATH CACHE)
+  endif()
+
+  if ( "x${CMAKE_CXX_COMPILER_FRONTEND_VARIANT}" STREQUAL "xMSVC" OR "x${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "xMSVC" )
+    include(Platform/Windows-MSVC)
+    # Set the clang option forwarding prefix for clang-cl usage in the llvm-rc processing stage
+    __enable_llvm_rc_preprocessing("-clang:" "")
+    macro(__windows_compiler_clang_base lang)
+      set(_COMPILE_${lang} "${_COMPILE_${lang}_MSVC}")
+      __windows_compiler_msvc(${lang})
+      set(CMAKE_INCLUDE_SYSTEM_FLAG_${lang} "-imsvc ")
+    endmacro()
+  else()
+    cmake_policy(GET CMP0091 __WINDOWS_CLANG_CMP0091)
+    if(__WINDOWS_CLANG_CMP0091 STREQUAL "NEW")
+      set(CMAKE_MSVC_RUNTIME_LIBRARY_DEFAULT "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
+    else()
+      set(CMAKE_MSVC_RUNTIME_LIBRARY_DEFAULT "")
+    endif()
+    unset(__WINDOWS_CLANG_CMP0091)
+
+    set(CMAKE_BUILD_TYPE_INIT Debug)
+
+    __enable_llvm_rc_preprocessing("" "-x c")
+    macro(__windows_compiler_clang_base lang)
+      __windows_compiler_clang_gnu(${lang})
+    endmacro()
+  endif()
+
+else()
+  include(Platform/Windows-GNU)
+  __enable_llvm_rc_preprocessing("" "-x c")
+  macro(__windows_compiler_clang_base lang)
+    __windows_compiler_gnu(${lang})
+  endmacro()
+endif()
+
+macro(__windows_compiler_clang lang)
+  if(CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.4.0)
+    set(CMAKE_${lang}_COMPILE_OPTIONS_TARGET "-target ")
+  else()
+    set(CMAKE_${lang}_COMPILE_OPTIONS_TARGET "--target=")
+  endif()
+  __windows_compiler_clang_base(${lang})
+endmacro()
diff --git a/share/cmake-3.18/Modules/Platform/Windows-Determine-CXX.cmake b/share/cmake-3.22/Modules/Platform/Windows-Determine-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Windows-Determine-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/Windows-Determine-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Windows-Embarcadero-C.cmake b/share/cmake-3.22/Modules/Platform/Windows-Embarcadero-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Windows-Embarcadero-C.cmake
rename to share/cmake-3.22/Modules/Platform/Windows-Embarcadero-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Windows-Embarcadero-CXX.cmake b/share/cmake-3.22/Modules/Platform/Windows-Embarcadero-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Windows-Embarcadero-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/Windows-Embarcadero-CXX.cmake
diff --git a/share/cmake-3.22/Modules/Platform/Windows-Embarcadero.cmake b/share/cmake-3.22/Modules/Platform/Windows-Embarcadero.cmake
new file mode 100644
index 0000000..4ecc2c2
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Windows-Embarcadero.cmake
@@ -0,0 +1,139 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# This module is shared by multiple languages; use include blocker.
+if(__WINDOWS_EMBARCADERO)
+  return()
+endif()
+set(__WINDOWS_EMBARCADERO 1)
+
+set(BORLAND 1)
+
+set(__pch_header_C "c-header")
+set(__pch_header_CXX "c++-header")
+set(__pch_header_OBJC "objective-c-header")
+set(__pch_header_OBJCXX "objective-c++-header")
+
+if("${CMAKE_${_lang}_COMPILER_VERSION}" VERSION_LESS 6.30)
+  # Borland target type flags (bcc32 -h -t):
+  set(_tW "-tW")       # -tW  GUI App         (implies -U__CONSOLE__)
+  set(_tC "-tWC")      # -tWC Console App     (implies -D__CONSOLE__=1)
+  set(_tD "-tWD")      # -tWD Build a DLL     (implies -D__DLL__=1 -D_DLL=1)
+  set(_tM "-tWM")      # -tWM Enable threads  (implies -D__MT__=1 -D_MT=1)
+  set(_tR "-tWR -tW-") # -tWR Use DLL runtime (implies -D_RTLDLL, and '-tW' too!!)
+  # Notes:
+  #  - The flags affect linking so we pass them to the linker.
+  #  - The flags affect preprocessing so we pass them to the compiler.
+  #  - Since '-tWR' implies '-tW' we use '-tWR -tW-' instead.
+  #  - Since '-tW-' disables '-tWD' we use '-tWR -tW- -tWD' for DLLs.
+else()
+  set(EMBARCADERO 1)
+  set(_tC "-tC") # Target is a console application
+  set(_tD "-tD") # Target is a shared library
+  set(_tM "-tM") # Target is multi-threaded
+  set(_tR "-tR") # Target uses the dynamic RTL
+  set(_tW "-tW") # Target is a Windows application
+endif()
+set(_COMPILE_C "")
+set(_COMPILE_CXX " -P")
+
+set(CMAKE_LIBRARY_PATH_FLAG "-L")
+set(CMAKE_LINK_LIBRARY_FLAG "")
+
+set(CMAKE_FIND_LIBRARY_SUFFIXES "-bcc.lib" ".lib")
+
+# uncomment these out to debug makefiles
+#set(CMAKE_START_TEMP_FILE "")
+#set(CMAKE_END_TEMP_FILE "")
+#set(CMAKE_VERBOSE_MAKEFILE 1)
+
+# Borland cannot handle + in the file name, so mangle object file name
+set (CMAKE_MANGLE_OBJECT_FILE_NAMES "ON")
+
+set (CMAKE_BUILD_TYPE Debug CACHE STRING
+     "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel.")
+
+foreach(t EXE SHARED MODULE)
+  string(APPEND CMAKE_${t}_LINKER_FLAGS_INIT " ${_tM} -lS:1048576 -lSc:4098 -lH:1048576 -lHc:8192 ")
+  string(APPEND CMAKE_${t}_LINKER_FLAGS_DEBUG_INIT " -v")
+  string(APPEND CMAKE_${t}_LINKER_FLAGS_RELWITHDEBINFO_INIT " -v")
+endforeach()
+
+# The Borland link tool does not support multiple concurrent
+# invocations within a single working directory.
+if(NOT DEFINED CMAKE_JOB_POOL_LINK)
+  set(CMAKE_JOB_POOL_LINK BCC32LinkPool)
+  get_property(_bccjp GLOBAL PROPERTY JOB_POOLS)
+  if(NOT _bccjp MATCHES "BCC32LinkPool=")
+      set_property(GLOBAL APPEND PROPERTY JOB_POOLS BCC32LinkPool=1)
+  endif()
+  unset(_bccjp)
+endif()
+
+macro(__embarcadero_language lang)
+  set(CMAKE_${lang}_COMPILE_OPTIONS_DLL "${_tD}") # Note: This variable is a ';' separated list
+  set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "${_tD}") # ... while this is a space separated string.
+  set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_INCLUDES 1)
+
+  set (CMAKE_${lang}_LINKER_WRAPPER_FLAG "-l")
+
+  # compile a source file into an object file
+  # place <DEFINES> outside the response file because Borland refuses
+  # to parse quotes from the response file.
+  set(CMAKE_${lang}_COMPILE_OBJECT
+    "<CMAKE_${lang}_COMPILER> ${_tR} -DWIN32 <DEFINES> <INCLUDES> <FLAGS> -o<OBJECT>${_COMPILE_${lang}} -c <SOURCE>"
+    )
+
+  set(CMAKE_${lang}_LINK_EXECUTABLE
+    "<CMAKE_${lang}_COMPILER> ${_tR} -e<TARGET> <LINK_FLAGS> <FLAGS> ${CMAKE_START_TEMP_FILE} <LINK_LIBRARIES> <OBJECTS>${CMAKE_END_TEMP_FILE}"
+    # "implib -c -w <TARGET_IMPLIB> <TARGET>"
+    )
+
+  # place <DEFINES> outside the response file because Borland refuses
+  # to parse quotes from the response file.
+  set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE
+    "cpp32 -DWIN32 <DEFINES> <INCLUDES> <FLAGS> -o<PREPROCESSED_SOURCE>${_COMPILE_${lang}} -c <SOURCE>"
+    )
+  # Borland >= 5.6 allows -P option for cpp32, <= 5.5 does not
+
+  # Create a module library.
+  set(CMAKE_${lang}_CREATE_SHARED_MODULE
+    "<CMAKE_${lang}_COMPILER> ${_tR} ${_tD} ${CMAKE_START_TEMP_FILE}-e<TARGET> <LINK_FLAGS> <LINK_LIBRARIES> <OBJECTS>${CMAKE_END_TEMP_FILE}"
+    )
+
+  # Create an import library for another target.
+  set(CMAKE_${lang}_CREATE_IMPORT_LIBRARY
+    "implib -c -w <TARGET_IMPLIB> <TARGET>"
+    )
+
+  # Create a shared library.
+  # First create a module and then its import library.
+  set(CMAKE_${lang}_CREATE_SHARED_LIBRARY
+    ${CMAKE_${lang}_CREATE_SHARED_MODULE}
+    ${CMAKE_${lang}_CREATE_IMPORT_LIBRARY}
+    )
+
+  # create a static library
+  set(CMAKE_${lang}_CREATE_STATIC_LIBRARY
+    "tlib ${CMAKE_START_TEMP_FILE}/p512 <LINK_FLAGS> /a <TARGET_QUOTED> <OBJECTS>${CMAKE_END_TEMP_FILE}"
+    )
+
+  set(CMAKE_${lang}_CREATE_WIN32_EXE "${_tW}")
+  set(CMAKE_${lang}_CREATE_CONSOLE_EXE "${_tC}")
+
+  # Precompile Headers
+  if (EMBARCADERO)
+    set(CMAKE_PCH_EXTENSION .pch)
+    set(CMAKE_${lang}_COMPILE_OPTIONS_USE_PCH -Xclang -include-pch -Xclang <PCH_FILE> -Xclang -include -Xclang <PCH_HEADER>)
+    set(CMAKE_${lang}_COMPILE_OPTIONS_CREATE_PCH -Xclang -emit-pch -Xclang -include -Xclang <PCH_HEADER> -x ${__pch_header_${lang}})
+  endif()
+
+  # Initial configuration flags.
+  string(APPEND CMAKE_${lang}_FLAGS_INIT " ${_tM}")
+  string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -Od -v")
+  string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -O1 -DNDEBUG")
+  string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -O2 -DNDEBUG")
+  string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -Od")
+  set(CMAKE_${lang}_STANDARD_LIBRARIES_INIT "import32.lib")
+endmacro()
diff --git a/share/cmake-3.18/Modules/Platform/Windows-Flang-Fortran.cmake b/share/cmake-3.22/Modules/Platform/Windows-Flang-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Windows-Flang-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/Windows-Flang-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Windows-G95-Fortran.cmake b/share/cmake-3.22/Modules/Platform/Windows-G95-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Windows-G95-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/Windows-G95-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Windows-GNU-ASM.cmake b/share/cmake-3.22/Modules/Platform/Windows-GNU-ASM.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Windows-GNU-ASM.cmake
rename to share/cmake-3.22/Modules/Platform/Windows-GNU-ASM.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Windows-GNU-C-ABI.cmake b/share/cmake-3.22/Modules/Platform/Windows-GNU-C-ABI.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Windows-GNU-C-ABI.cmake
rename to share/cmake-3.22/Modules/Platform/Windows-GNU-C-ABI.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Windows-GNU-C.cmake b/share/cmake-3.22/Modules/Platform/Windows-GNU-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Windows-GNU-C.cmake
rename to share/cmake-3.22/Modules/Platform/Windows-GNU-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Windows-GNU-CXX-ABI.cmake b/share/cmake-3.22/Modules/Platform/Windows-GNU-CXX-ABI.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Windows-GNU-CXX-ABI.cmake
rename to share/cmake-3.22/Modules/Platform/Windows-GNU-CXX-ABI.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Windows-GNU-CXX.cmake b/share/cmake-3.22/Modules/Platform/Windows-GNU-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Windows-GNU-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/Windows-GNU-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Windows-GNU-Fortran-ABI.cmake b/share/cmake-3.22/Modules/Platform/Windows-GNU-Fortran-ABI.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Windows-GNU-Fortran-ABI.cmake
rename to share/cmake-3.22/Modules/Platform/Windows-GNU-Fortran-ABI.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Windows-GNU-Fortran.cmake b/share/cmake-3.22/Modules/Platform/Windows-GNU-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Windows-GNU-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/Windows-GNU-Fortran.cmake
diff --git a/share/cmake-3.22/Modules/Platform/Windows-GNU.cmake b/share/cmake-3.22/Modules/Platform/Windows-GNU.cmake
new file mode 100644
index 0000000..51dc146
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Windows-GNU.cmake
@@ -0,0 +1,202 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# This module is shared by multiple languages; use include blocker.
+if(__WINDOWS_GNU)
+  return()
+endif()
+set(__WINDOWS_GNU 1)
+
+set(MINGW 1)
+
+set(CMAKE_IMPORT_LIBRARY_PREFIX "lib")
+set(CMAKE_SHARED_LIBRARY_PREFIX "lib")
+set(CMAKE_SHARED_MODULE_PREFIX  "lib")
+set(CMAKE_STATIC_LIBRARY_PREFIX "lib")
+
+set(CMAKE_EXECUTABLE_SUFFIX     ".exe")
+set(CMAKE_IMPORT_LIBRARY_SUFFIX ".dll.a")
+set(CMAKE_SHARED_LIBRARY_SUFFIX ".dll")
+set(CMAKE_SHARED_MODULE_SUFFIX  ".dll")
+set(CMAKE_STATIC_LIBRARY_SUFFIX ".a")
+
+set(CMAKE_EXTRA_LINK_EXTENSIONS ".lib") # MinGW can also link to a MS .lib
+
+set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "")
+set(CMAKE_FIND_LIBRARY_SUFFIXES ".dll.a" ".a" ".lib")
+set(CMAKE_C_STANDARD_LIBRARIES_INIT "-lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32")
+set(CMAKE_CXX_STANDARD_LIBRARIES_INIT "${CMAKE_C_STANDARD_LIBRARIES_INIT}")
+
+set(CMAKE_DL_LIBS "")
+set(CMAKE_LIBRARY_PATH_FLAG "-L")
+set(CMAKE_LINK_LIBRARY_FLAG "-l")
+set(CMAKE_LINK_DEF_FILE_FLAG "") # Empty string: passing the file is enough
+set(CMAKE_LINK_LIBRARY_SUFFIX "")
+
+set(CMAKE_GNULD_IMAGE_VERSION
+  "-Wl,--major-image-version,<TARGET_VERSION_MAJOR>,--minor-image-version,<TARGET_VERSION_MINOR>")
+
+# Check if GNU ld is too old to support @FILE syntax.
+set(__WINDOWS_GNU_LD_RESPONSE 1)
+execute_process(COMMAND ld -v OUTPUT_VARIABLE _help ERROR_VARIABLE _help)
+if("${_help}" MATCHES "GNU ld .* 2\\.1[1-6]")
+  set(__WINDOWS_GNU_LD_RESPONSE 0)
+endif()
+
+macro(__windows_compiler_gnu lang)
+
+  # Create archiving rules to support large object file lists for static libraries.
+  set(CMAKE_${lang}_ARCHIVE_CREATE "<CMAKE_AR> qc <TARGET> <LINK_FLAGS> <OBJECTS>")
+  set(CMAKE_${lang}_ARCHIVE_APPEND "<CMAKE_AR> q <TARGET> <LINK_FLAGS> <OBJECTS>")
+  set(CMAKE_${lang}_ARCHIVE_FINISH "<CMAKE_RANLIB> <TARGET>")
+
+  # Initialize C link type selection flags.  These flags are used when
+  # building a shared library, shared module, or executable that links
+  # to other libraries to select whether to use the static or shared
+  # versions of the libraries.
+  foreach(type SHARED_LIBRARY SHARED_MODULE EXE)
+    set(CMAKE_${type}_LINK_STATIC_${lang}_FLAGS "-Wl,-Bstatic")
+    set(CMAKE_${type}_LINK_DYNAMIC_${lang}_FLAGS "-Wl,-Bdynamic")
+  endforeach()
+
+  # No -fPIC on Windows
+  set(CMAKE_${lang}_COMPILE_OPTIONS_PIC "")
+  set(CMAKE_${lang}_COMPILE_OPTIONS_PIE "")
+  set(_CMAKE_${lang}_PIE_MAY_BE_SUPPORTED_BY_LINKER NO)
+  set(CMAKE_${lang}_LINK_OPTIONS_PIE "")
+  set(CMAKE_${lang}_LINK_OPTIONS_NO_PIE "")
+  set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "")
+
+  set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_OBJECTS ${__WINDOWS_GNU_LD_RESPONSE})
+  set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_LIBRARIES ${__WINDOWS_GNU_LD_RESPONSE})
+  set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_INCLUDES 1)
+
+  # We prefer "@" for response files but it is not supported by gcc 3.
+  execute_process(COMMAND ${CMAKE_${lang}_COMPILER} --version OUTPUT_VARIABLE _ver ERROR_VARIABLE _ver)
+  if("${_ver}" MATCHES "\\(GCC\\) 3\\.")
+    if("${lang}" STREQUAL "Fortran")
+      # The GNU Fortran compiler reports an error:
+      #   no input files; unwilling to write output files
+      # when the response file is passed with "-Wl,@".
+      set(CMAKE_Fortran_USE_RESPONSE_FILE_FOR_OBJECTS 0)
+    else()
+      # Use "-Wl,@" to pass the response file to the linker.
+      set(CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG "-Wl,@")
+    endif()
+    # The GNU 3.x compilers do not support response files (only linkers).
+    set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_INCLUDES 0)
+    # Link libraries are generated only for the front-end.
+    set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_LIBRARIES 0)
+  else()
+    # Use "@" to pass the response file to the front-end.
+    set(CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG "@")
+  endif()
+
+  # Binary link rules.
+  set(CMAKE_${lang}_CREATE_SHARED_MODULE
+    "<CMAKE_${lang}_COMPILER> <CMAKE_SHARED_MODULE_${lang}_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_MODULE_CREATE_${lang}_FLAGS> -o <TARGET> ${CMAKE_GNULD_IMAGE_VERSION} <OBJECTS> <LINK_LIBRARIES>")
+  set(CMAKE_${lang}_CREATE_SHARED_LIBRARY
+    "<CMAKE_${lang}_COMPILER> <CMAKE_SHARED_LIBRARY_${lang}_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS> -o <TARGET> -Wl,--out-implib,<TARGET_IMPLIB> ${CMAKE_GNULD_IMAGE_VERSION} <OBJECTS> <LINK_LIBRARIES>")
+  set(CMAKE_${lang}_LINK_EXECUTABLE
+    "<CMAKE_${lang}_COMPILER> <FLAGS> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> -Wl,--out-implib,<TARGET_IMPLIB> ${CMAKE_GNULD_IMAGE_VERSION} <LINK_LIBRARIES>")
+  set(CMAKE_${lang}_CREATE_WIN32_EXE "-mwindows")
+
+  list(APPEND CMAKE_${lang}_ABI_FILES "Platform/Windows-GNU-${lang}-ABI")
+
+  # Support very long lists of object files.
+  # TODO: check for which gcc versions this is still needed, not needed for gcc >= 4.4.
+  # Ninja generator doesn't support this work around.
+  if("${CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG}" STREQUAL "@" AND NOT CMAKE_GENERATOR MATCHES "Ninja")
+    foreach(rule CREATE_SHARED_MODULE CREATE_SHARED_LIBRARY LINK_EXECUTABLE)
+      # The gcc/collect2/ld toolchain does not use response files
+      # internally so we cannot pass long object lists.  Instead pass
+      # the object file list in a response file to the archiver to put
+      # them in a temporary archive.  Hand the archive to the linker.
+      string(REPLACE "<OBJECTS>" "-Wl,--whole-archive <OBJECT_DIR>/objects.a -Wl,--no-whole-archive"
+        CMAKE_${lang}_${rule} "${CMAKE_${lang}_${rule}}")
+      set(CMAKE_${lang}_${rule}
+        "<CMAKE_COMMAND> -E rm -f <OBJECT_DIR>/objects.a"
+        "<CMAKE_AR> qc <OBJECT_DIR>/objects.a <OBJECTS>"
+        "${CMAKE_${lang}_${rule}}"
+        )
+    endforeach()
+  endif()
+
+  if(NOT CMAKE_RC_COMPILER_INIT AND NOT CMAKE_GENERATOR_RC)
+    set(CMAKE_RC_COMPILER_INIT ${_CMAKE_TOOLCHAIN_PREFIX}windres)
+  endif()
+
+  enable_language(RC)
+endmacro()
+
+macro(__windows_compiler_gnu_abi lang)
+  if(CMAKE_NO_GNUtoMS)
+    set(CMAKE_GNUtoMS 0)
+  else()
+    option(CMAKE_GNUtoMS "Convert GNU import libraries to MS format (requires Visual Studio)" OFF)
+  endif()
+
+  if(CMAKE_GNUtoMS AND NOT CMAKE_GNUtoMS_LIB)
+    # Find MS development environment setup script for this architecture.
+    # We need to use the MS Librarian tool (lib.exe).
+    # Find the most recent version available.
+
+    # Query the VS Installer tool for locations of VS 2017 and above.
+    set(_vs_installer_paths "")
+    foreach(vs RANGE 17 15 -1) # change the first number to the largest supported version
+      cmake_host_system_information(RESULT _vs_dir QUERY VS_${vs}_DIR)
+      if(_vs_dir)
+        list(APPEND _vs_installer_paths "${_vs_dir}/VC/Auxiliary/Build")
+      endif()
+    endforeach(vs)
+
+    if("${CMAKE_SIZEOF_VOID_P}" EQUAL 4)
+      find_program(CMAKE_GNUtoMS_VCVARS NAMES vcvars32.bat
+        DOC "Visual Studio vcvars32.bat"
+        PATHS
+        ${_vs_installer_paths}
+        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\14.0\\Setup\\VC;ProductDir]/bin"
+        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\12.0\\Setup\\VC;ProductDir]/bin"
+        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0\\Setup\\VC;ProductDir]/bin"
+        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VC;ProductDir]/bin"
+        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\9.0\\Setup\\VC;ProductDir]/bin"
+        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/bin"
+        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\7.1\\Setup\\VC;ProductDir]/bin"
+        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\6.0\\Setup\\Microsoft Visual C++;ProductDir]/bin"
+        )
+      set(CMAKE_GNUtoMS_ARCH x86)
+    elseif("${CMAKE_SIZEOF_VOID_P}" EQUAL 8)
+      find_program(CMAKE_GNUtoMS_VCVARS NAMES vcvars64.bat vcvarsamd64.bat
+        DOC "Visual Studio vcvarsamd64.bat"
+        PATHS
+        ${_vs_installer_paths}
+        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\14.0\\Setup\\VC;ProductDir]/bin/amd64"
+        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\12.0\\Setup\\VC;ProductDir]/bin/amd64"
+        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0\\Setup\\VC;ProductDir]/bin/amd64"
+        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VC;ProductDir]/bin/amd64"
+        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\9.0\\Setup\\VC;ProductDir]/bin/amd64"
+        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/bin/amd64"
+        )
+      set(CMAKE_GNUtoMS_ARCH amd64)
+    endif()
+    unset(_vs_installer_paths)
+    set_property(CACHE CMAKE_GNUtoMS_VCVARS PROPERTY ADVANCED 1)
+    if(CMAKE_GNUtoMS_VCVARS)
+      # Create helper script to run lib.exe from MS environment.
+      string(REPLACE "/" "\\" CMAKE_GNUtoMS_BAT "${CMAKE_GNUtoMS_VCVARS}")
+      set(CMAKE_GNUtoMS_LIB ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeGNUtoMS_lib.bat)
+      configure_file(${CMAKE_ROOT}/Modules/Platform/GNUtoMS_lib.bat.in ${CMAKE_GNUtoMS_LIB})
+    else()
+      message(WARNING "Disabling CMAKE_GNUtoMS option because CMAKE_GNUtoMS_VCVARS is not set.")
+      set(CMAKE_GNUtoMS 0)
+    endif()
+  endif()
+
+  if(CMAKE_GNUtoMS)
+    # Teach CMake how to create a MS import library at link time.
+    set(CMAKE_${lang}_GNUtoMS_RULE " -Wl,--output-def,<TARGET_NAME>.def"
+      "<CMAKE_COMMAND> -Dlib=\"${CMAKE_GNUtoMS_LIB}\" -Ddef=<TARGET_NAME>.def -Ddll=<TARGET> -Dimp=<TARGET_IMPLIB> -P \"${CMAKE_ROOT}/Modules/Platform/GNUtoMS_lib.cmake\""
+      )
+  endif()
+endmacro()
diff --git a/share/cmake-3.18/Modules/Platform/Windows-Intel-ASM.cmake b/share/cmake-3.22/Modules/Platform/Windows-Intel-ASM.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Windows-Intel-ASM.cmake
rename to share/cmake-3.22/Modules/Platform/Windows-Intel-ASM.cmake
diff --git a/share/cmake-3.22/Modules/Platform/Windows-Intel-C.cmake b/share/cmake-3.22/Modules/Platform/Windows-Intel-C.cmake
new file mode 100644
index 0000000..152b27c
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Windows-Intel-C.cmake
@@ -0,0 +1,27 @@
+include(Platform/Windows-Intel)
+__windows_compiler_intel(C)
+
+set(CMAKE_DEPFILE_FLAGS_C "-QMMD -QMT <DEP_TARGET> -QMF <DEP_FILE>")
+set(CMAKE_C_DEPFILE_FORMAT gcc)
+
+if(CMAKE_GENERATOR MATCHES "^Ninja")
+  if(_CMAKE_NINJA_VERSION VERSION_LESS 1.9)
+    # This ninja version is too old to support the Intel depfile format.
+    # Fall back to msvc depfile format.
+    set(CMAKE_DEPFILE_FLAGS_C "/showIncludes")
+    set(CMAKE_C_DEPFILE_FORMAT msvc)
+  endif()
+endif()
+
+if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+    AND CMAKE_GENERATOR MATCHES "Makefiles|WMake")
+  # dependencies are computed by the compiler itself
+  set(CMAKE_C_DEPENDS_USE_COMPILER TRUE)
+endif()
+
+if("${CMAKE_SOURCE_DIR}${CMAKE_BINARY_DIR}" MATCHES " ")
+  # The Intel compiler does not properly escape spaces in a depfile.
+  # Fall back to msvc depfile format.
+  set(CMAKE_DEPFILE_FLAGS_C "/showIncludes")
+  set(CMAKE_C_DEPFILE_FORMAT msvc)
+endif()
diff --git a/share/cmake-3.22/Modules/Platform/Windows-Intel-CXX.cmake b/share/cmake-3.22/Modules/Platform/Windows-Intel-CXX.cmake
new file mode 100644
index 0000000..ce33ae1
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Windows-Intel-CXX.cmake
@@ -0,0 +1,28 @@
+include(Platform/Windows-Intel)
+set(_COMPILE_CXX " /TP")
+__windows_compiler_intel(CXX)
+
+set(CMAKE_DEPFILE_FLAGS_CXX "-QMMD -QMT <DEP_TARGET> -QMF <DEP_FILE>")
+set(CMAKE_CXX_DEPFILE_FORMAT gcc)
+
+if(CMAKE_GENERATOR MATCHES "^Ninja")
+  if(_CMAKE_NINJA_VERSION VERSION_LESS 1.9)
+    # This ninja version is too old to support the Intel depfile format.
+    # Fall back to msvc depfile format.
+    set(CMAKE_DEPFILE_FLAGS_CXX "/showIncludes")
+    set(CMAKE_CXX_DEPFILE_FORMAT msvc)
+  endif()
+endif()
+
+if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+    AND CMAKE_GENERATOR MATCHES "Makefiles|WMake")
+  # dependencies are computed by the compiler itself
+ set(CMAKE_CXX_DEPENDS_USE_COMPILER TRUE)
+endif()
+
+if("${CMAKE_SOURCE_DIR}${CMAKE_BINARY_DIR}" MATCHES " ")
+  # The Intel compiler does not properly escape spaces in a depfile.
+  # Fall back to msvc depfile format.
+  set(CMAKE_DEPFILE_FLAGS_CXX "/showIncludes")
+  set(CMAKE_CXX_DEPFILE_FORMAT msvc)
+endif()
diff --git a/share/cmake-3.18/Modules/Platform/Windows-Intel-Fortran.cmake b/share/cmake-3.22/Modules/Platform/Windows-Intel-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Windows-Intel-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/Windows-Intel-Fortran.cmake
diff --git a/share/cmake-3.22/Modules/Platform/Windows-Intel-ISPC.cmake b/share/cmake-3.22/Modules/Platform/Windows-Intel-ISPC.cmake
new file mode 100644
index 0000000..cd26302
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Windows-Intel-ISPC.cmake
@@ -0,0 +1,8 @@
+
+if(CMAKE_VERBOSE_MAKEFILE)
+  set(CMAKE_CL_NOLOGO)
+else()
+  set(CMAKE_CL_NOLOGO "/nologo")
+endif()
+
+set(CMAKE_ISPC_CREATE_STATIC_LIBRARY  "<CMAKE_AR> ${CMAKE_CL_NOLOGO} <LINK_FLAGS> /out:<TARGET> <OBJECTS> ")
diff --git a/share/cmake-3.22/Modules/Platform/Windows-Intel.cmake b/share/cmake-3.22/Modules/Platform/Windows-Intel.cmake
new file mode 100644
index 0000000..26e0cde
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Windows-Intel.cmake
@@ -0,0 +1,28 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# This module is shared by multiple languages; use include blocker.
+if(__WINDOWS_INTEL)
+  return()
+endif()
+set(__WINDOWS_INTEL 1)
+
+
+if (CMAKE_GENERATOR MATCHES "^Ninja")
+  # retrieve ninja version to enable dependencies configuration
+  # against Ninja capabilities
+  execute_process(COMMAND "${CMAKE_MAKE_PROGRAM}" --version
+    RESULT_VARIABLE _CMAKE_NINJA_RESULT
+    OUTPUT_VARIABLE _CMAKE_NINJA_VERSION
+    ERROR_VARIABLE _CMAKE_NINJA_VERSION)
+  if (NOT _CMAKE_NINJA_RESULT AND _CMAKE_NINJA_VERSION MATCHES "[0-9]+(\\.[0-9]+)*")
+    set (_CMAKE_NINJA_VERSION "${CMAKE_MATCH_0}")
+  endif()
+  unset(_CMAKE_NINJA_RESULT)
+endif()
+
+include(Platform/Windows-MSVC)
+macro(__windows_compiler_intel lang)
+  __windows_compiler_msvc(${lang})
+endmacro()
diff --git a/share/cmake-3.22/Modules/Platform/Windows-IntelLLVM-ASM.cmake b/share/cmake-3.22/Modules/Platform/Windows-IntelLLVM-ASM.cmake
new file mode 100644
index 0000000..f355e49
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Windows-IntelLLVM-ASM.cmake
@@ -0,0 +1,2 @@
+include(Platform/Windows-IntelLLVM)
+__windows_compiler_intel(ASM)
diff --git a/share/cmake-3.22/Modules/Platform/Windows-IntelLLVM-C.cmake b/share/cmake-3.22/Modules/Platform/Windows-IntelLLVM-C.cmake
new file mode 100644
index 0000000..93c3364
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Windows-IntelLLVM-C.cmake
@@ -0,0 +1,2 @@
+include(Platform/Windows-IntelLLVM)
+__windows_compiler_intel(C)
diff --git a/share/cmake-3.22/Modules/Platform/Windows-IntelLLVM-CXX.cmake b/share/cmake-3.22/Modules/Platform/Windows-IntelLLVM-CXX.cmake
new file mode 100644
index 0000000..4667895
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Windows-IntelLLVM-CXX.cmake
@@ -0,0 +1,3 @@
+include(Platform/Windows-IntelLLVM)
+set(_COMPILE_CXX " /TP")
+__windows_compiler_intel(CXX)
diff --git a/share/cmake-3.22/Modules/Platform/Windows-IntelLLVM-Fortran.cmake b/share/cmake-3.22/Modules/Platform/Windows-IntelLLVM-Fortran.cmake
new file mode 100644
index 0000000..06d0a00
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Windows-IntelLLVM-Fortran.cmake
@@ -0,0 +1,44 @@
+include(Platform/Windows-IntelLLVM)
+set(CMAKE_BUILD_TYPE_INIT Debug)
+set(_COMPILE_Fortran " /fpp")
+set(CMAKE_Fortran_MODDIR_FLAG "-module:")
+set(CMAKE_Fortran_STANDARD_LIBRARIES_INIT "user32.lib")
+__windows_compiler_intel(Fortran)
+if(CMAKE_MSVC_RUNTIME_LIBRARY_DEFAULT)
+  set(_LIBSDLL "")
+  set(_DBGLIBS "")
+  set(_THREADS "")
+else()
+  set(_LIBSDLL " /libs:dll")
+  set(_DBGLIBS " /dbglibs")
+  set(_THREADS " /threads")
+endif()
+
+cmake_policy(GET CMP0092 _cmp0092)
+if(NOT _cmp0092 STREQUAL "NEW")
+  string(APPEND CMAKE_Fortran_FLAGS_INIT " /W1")
+endif()
+unset(_cmp0092)
+
+string(APPEND CMAKE_Fortran_FLAGS_INIT " /nologo /fpp${_LIBSDLL}${_THREADS}")
+string(APPEND CMAKE_Fortran_FLAGS_DEBUG_INIT " /Od /debug:full${_DBGLIBS}")
+string(APPEND CMAKE_Fortran_FLAGS_MINSIZEREL_INIT " /O1 /DNDEBUG")
+string(APPEND CMAKE_Fortran_FLAGS_RELEASE_INIT " /O2 /DNDEBUG")
+string(APPEND CMAKE_Fortran_FLAGS_RELWITHDEBINFO_INIT " /O2 /debug:full /DNDEBUG")
+unset(_LIBSDLL)
+unset(_DBGLIBS)
+unset(_THREADS)
+
+set(CMAKE_Fortran_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreaded         -threads -libs:static)
+set(CMAKE_Fortran_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDLL      -threads -libs:dll)
+set(CMAKE_Fortran_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebug    -threads -libs:static -dbglibs)
+set(CMAKE_Fortran_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebugDLL -threads -libs:dll    -dbglibs)
+
+# Intel Fortran for Windows supports single-threaded RTL but it is
+# not implemented by the Visual Studio integration.
+if(NOT CMAKE_GENERATOR MATCHES "Visual Studio")
+  set(CMAKE_Fortran_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_SingleThreaded                 -libs:static)
+  set(CMAKE_Fortran_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_SingleThreadedDLL              -libs:dll)
+  set(CMAKE_Fortran_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_SingleThreadedDebug            -libs:static -dbglibs)
+  set(CMAKE_Fortran_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_SingleThreadedDebugDLL         -libs:dll    -dbglibs)
+endif()
diff --git a/share/cmake-3.22/Modules/Platform/Windows-IntelLLVM.cmake b/share/cmake-3.22/Modules/Platform/Windows-IntelLLVM.cmake
new file mode 100644
index 0000000..b9ea037
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Windows-IntelLLVM.cmake
@@ -0,0 +1,17 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# This module is shared by multiple languages; use include blocker.
+if(__WINDOWS_INTEL)
+  return()
+endif()
+set(__WINDOWS_INTEL 1)
+
+include(Platform/Windows-MSVC)
+macro(__windows_compiler_intel lang)
+  __windows_compiler_msvc(${lang})
+
+  set(CMAKE_DEPFILE_FLAGS_${lang} "-QMMD -QMT <DEP_TARGET> -QMF <DEP_FILE>")
+  set(CMAKE_${lang}_DEPFILE_FORMAT gcc)
+endmacro()
diff --git a/share/cmake-3.22/Modules/Platform/Windows-MSVC-C.cmake b/share/cmake-3.22/Modules/Platform/Windows-MSVC-C.cmake
new file mode 100644
index 0000000..67b6827
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Windows-MSVC-C.cmake
@@ -0,0 +1,12 @@
+include(Platform/Windows-MSVC)
+if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 18.0)
+  set(_FS_C " /FS")
+endif()
+__windows_compiler_msvc(C)
+
+if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+    AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
+    AND CMAKE_DEPFILE_FLAGS_C)
+  # dependencies are computed by the compiler itself
+  set(CMAKE_C_DEPENDS_USE_COMPILER TRUE)
+endif()
diff --git a/share/cmake-3.22/Modules/Platform/Windows-MSVC-CXX.cmake b/share/cmake-3.22/Modules/Platform/Windows-MSVC-CXX.cmake
new file mode 100644
index 0000000..6fea617
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Windows-MSVC-CXX.cmake
@@ -0,0 +1,13 @@
+include(Platform/Windows-MSVC)
+set(_COMPILE_CXX " /TP")
+if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 18.0)
+  set(_FS_CXX " /FS")
+endif()
+__windows_compiler_msvc(CXX)
+
+if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER)
+    AND CMAKE_GENERATOR MATCHES "Makefiles|WMake"
+    AND CMAKE_DEPFILE_FLAGS_CXX)
+  # dependencies are computed by the compiler itself
+  set(CMAKE_CXX_DEPENDS_USE_COMPILER TRUE)
+endif()
diff --git a/share/cmake-3.22/Modules/Platform/Windows-MSVC.cmake b/share/cmake-3.22/Modules/Platform/Windows-MSVC.cmake
new file mode 100644
index 0000000..7d602c3
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Windows-MSVC.cmake
@@ -0,0 +1,484 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+# This module is shared by multiple languages; use include blocker.
+if(__WINDOWS_MSVC)
+  return()
+endif()
+set(__WINDOWS_MSVC 1)
+
+set(CMAKE_LIBRARY_PATH_FLAG "-LIBPATH:")
+set(CMAKE_LINK_LIBRARY_FLAG "")
+set(MSVC 1)
+
+# hack: if a new cmake (which uses CMAKE_LINKER) runs on an old build tree
+# (where link was hardcoded) and where CMAKE_LINKER isn't in the cache
+# and still cmake didn't fail in CMakeFindBinUtils.cmake (because it isn't rerun)
+# hardcode CMAKE_LINKER here to link, so it behaves as it did before, Alex
+if(NOT DEFINED CMAKE_LINKER)
+  set(CMAKE_LINKER link)
+endif()
+
+if(CMAKE_VERBOSE_MAKEFILE)
+  set(CMAKE_CL_NOLOGO)
+else()
+  set(CMAKE_CL_NOLOGO "/nologo")
+endif()
+
+if(CMAKE_SYSTEM_NAME STREQUAL "WindowsCE")
+  set(_PLATFORM_LINK_FLAGS " /subsystem:windowsce")
+else()
+  set(_PLATFORM_LINK_FLAGS "")
+endif()
+
+set(CMAKE_SUPPORT_WINDOWS_EXPORT_ALL_SYMBOLS 1)
+if(NOT CMAKE_NO_BUILD_TYPE AND CMAKE_GENERATOR MATCHES "Visual Studio")
+  set (CMAKE_NO_BUILD_TYPE 1)
+endif()
+
+if("${CMAKE_GENERATOR}" MATCHES "Visual Studio")
+  set(MSVC_IDE 1)
+else()
+  set(MSVC_IDE 0)
+endif()
+
+if(NOT MSVC_VERSION)
+  if("x${CMAKE_C_COMPILER_ID}" STREQUAL "xMSVC")
+    set(_compiler_version ${CMAKE_C_COMPILER_VERSION})
+  elseif("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC")
+    set(_compiler_version ${CMAKE_CXX_COMPILER_VERSION})
+  elseif(CMAKE_C_SIMULATE_VERSION)
+    set(_compiler_version ${CMAKE_C_SIMULATE_VERSION})
+  elseif(CMAKE_CXX_SIMULATE_VERSION)
+    set(_compiler_version ${CMAKE_CXX_SIMULATE_VERSION})
+  elseif(CMAKE_Fortran_SIMULATE_VERSION)
+    set(_compiler_version ${CMAKE_Fortran_SIMULATE_VERSION})
+  elseif(CMAKE_CUDA_SIMULATE_VERSION)
+    set(_compiler_version ${CMAKE_CUDA_SIMULATE_VERSION})
+  elseif(CMAKE_C_COMPILER_VERSION)
+    set(_compiler_version ${CMAKE_C_COMPILER_VERSION})
+  else()
+    set(_compiler_version ${CMAKE_CXX_COMPILER_VERSION})
+  endif()
+  if("${_compiler_version}" MATCHES "^([0-9]+)\\.([0-9]+)")
+    math(EXPR MSVC_VERSION "${CMAKE_MATCH_1}*100 + ${CMAKE_MATCH_2}")
+  else()
+    message(FATAL_ERROR "MSVC compiler version not detected properly: ${_compiler_version}")
+  endif()
+
+  if(MSVC_VERSION GREATER_EQUAL 1930)
+    # VS 2022 or greater
+    set(MSVC_TOOLSET_VERSION 143)
+  elseif(MSVC_VERSION GREATER_EQUAL 1920)
+    # VS 2019 or greater
+    set(MSVC_TOOLSET_VERSION 142)
+  elseif(MSVC_VERSION GREATER_EQUAL 1910)
+    # VS 2017 or greater
+    set(MSVC_TOOLSET_VERSION 141)
+  elseif(MSVC_VERSION EQUAL 1900)
+    # VS 2015
+    set(MSVC_TOOLSET_VERSION 140)
+  elseif(MSVC_VERSION EQUAL 1800)
+    # VS 2013
+    set(MSVC_TOOLSET_VERSION 120)
+  elseif(MSVC_VERSION EQUAL 1700)
+    # VS 2012
+    set(MSVC_TOOLSET_VERSION 110)
+  elseif(MSVC_VERSION EQUAL 1600)
+    # VS 2010
+    set(MSVC_TOOLSET_VERSION 100)
+  elseif(MSVC_VERSION EQUAL 1500)
+    # VS 2008
+    set(MSVC_TOOLSET_VERSION 90)
+  elseif(MSVC_VERSION EQUAL 1400)
+    # VS 2005
+    set(MSVC_TOOLSET_VERSION 80)
+  else()
+    # We don't support MSVC_TOOLSET_VERSION for earlier compiler.
+  endif()
+
+  set(MSVC10)
+  set(MSVC11)
+  set(MSVC12)
+  set(MSVC14)
+  set(MSVC60)
+  set(MSVC70)
+  set(MSVC71)
+  set(MSVC80)
+  set(MSVC90)
+  set(CMAKE_COMPILER_2005)
+  set(CMAKE_COMPILER_SUPPORTS_PDBTYPE)
+  if(NOT "${_compiler_version}" VERSION_LESS 20)
+    # We no longer provide per-version variables.  Use MSVC_VERSION instead.
+  elseif(NOT "${_compiler_version}" VERSION_LESS 19)
+    set(MSVC14 1)
+  elseif(NOT "${_compiler_version}" VERSION_LESS 18)
+    set(MSVC12 1)
+  elseif(NOT "${_compiler_version}" VERSION_LESS 17)
+    set(MSVC11 1)
+  elseif(NOT  "${_compiler_version}" VERSION_LESS 16)
+    set(MSVC10 1)
+  elseif(NOT  "${_compiler_version}" VERSION_LESS 15)
+    set(MSVC90 1)
+  elseif(NOT  "${_compiler_version}" VERSION_LESS 14)
+    set(MSVC80 1)
+    set(CMAKE_COMPILER_2005 1)
+  elseif(NOT  "${_compiler_version}" VERSION_LESS 13.10)
+    set(MSVC71 1)
+  elseif(NOT  "${_compiler_version}" VERSION_LESS 13)
+    set(MSVC70 1)
+  else()
+    set(MSVC60 1)
+    set(CMAKE_COMPILER_SUPPORTS_PDBTYPE 1)
+  endif()
+endif()
+
+if(MSVC_C_ARCHITECTURE_ID MATCHES 64 OR MSVC_CXX_ARCHITECTURE_ID MATCHES 64)
+  set(CMAKE_CL_64 1)
+else()
+  set(CMAKE_CL_64 0)
+endif()
+if(CMAKE_FORCE_WIN64 OR CMAKE_FORCE_IA64)
+  set(CMAKE_CL_64 1)
+endif()
+
+if("${MSVC_VERSION}" GREATER 1599)
+  set(MSVC_INCREMENTAL_DEFAULT ON)
+endif()
+
+# default to Debug builds
+set(CMAKE_BUILD_TYPE_INIT Debug)
+
+# Compute an architecture family from the architecture id.
+foreach(lang C CXX)
+  set(_MSVC_${lang}_ARCHITECTURE_FAMILY "${MSVC_${lang}_ARCHITECTURE_ID}")
+  if(_MSVC_${lang}_ARCHITECTURE_FAMILY MATCHES "^ARM64EC")
+    set(_MSVC_${lang}_ARCHITECTURE_FAMILY "ARM64EC")
+  elseif(_MSVC_${lang}_ARCHITECTURE_FAMILY MATCHES "^ARM64")
+    set(_MSVC_${lang}_ARCHITECTURE_FAMILY "ARM64")
+  elseif(_MSVC_${lang}_ARCHITECTURE_FAMILY MATCHES "^ARM")
+    set(_MSVC_${lang}_ARCHITECTURE_FAMILY "ARM")
+  elseif(_MSVC_${lang}_ARCHITECTURE_FAMILY MATCHES "^SH")
+    set(_MSVC_${lang}_ARCHITECTURE_FAMILY "SHx")
+  endif()
+endforeach()
+
+cmake_policy(GET CMP0117 __WINDOWS_MSVC_CMP0117)
+if(__WINDOWS_MSVC_CMP0117 STREQUAL "NEW")
+  set(_GR "")
+else()
+  set(_GR " /GR")
+endif()
+unset(__WINDOWS_MSVC_CMP0117)
+
+if(WINCE)
+  foreach(lang C CXX)
+    string(TOUPPER "${_MSVC_${lang}_ARCHITECTURE_FAMILY}" _MSVC_${lang}_ARCHITECTURE_FAMILY_UPPER)
+  endforeach()
+
+  if("${CMAKE_SYSTEM_VERSION}" MATCHES "^([0-9]+)\\.([0-9]+)")
+    math(EXPR _CE_VERSION "${CMAKE_MATCH_1}*100 + ${CMAKE_MATCH_2}")
+  elseif("${CMAKE_SYSTEM_VERSION}" STREQUAL "")
+    set(_CE_VERSION "500")
+  else()
+    message(FATAL_ERROR "Invalid Windows CE version: ${CMAKE_SYSTEM_VERSION}")
+  endif()
+
+  set(_PLATFORM_DEFINES "/D_WIN32_WCE=0x${_CE_VERSION} /DUNDER_CE /DWINCE")
+  set(_PLATFORM_DEFINES_C " /D${_MSVC_C_ARCHITECTURE_FAMILY} /D_${_MSVC_C_ARCHITECTURE_FAMILY_UPPER}_")
+  set(_PLATFORM_DEFINES_CXX " /D${_MSVC_CXX_ARCHITECTURE_FAMILY} /D_${_MSVC_CXX_ARCHITECTURE_FAMILY_UPPER}_")
+
+  set(_RTC1 "")
+  set(_FLAGS_C "")
+  set(_FLAGS_CXX "${_GR} /EHsc")
+
+  foreach(lang C CXX)
+    if(_MSVC_${lang}_ARCHITECTURE_FAMILY STREQUAL "ARM")
+      string(APPEND _PLATFORM_DEFINES_${lang} " /D${MSVC_${lang}_ARCHITECTURE_ID}")
+      if(MSVC_${lang}_ARCHITECTURE_ID MATCHES "^ARMV([45])I$")
+        string(APPEND _FLAGS_${lang} " /QRarch${CMAKE_MATCH_1}T")
+      endif()
+    endif()
+  endforeach()
+
+  set(CMAKE_C_STANDARD_LIBRARIES_INIT "coredll.lib ole32.lib oleaut32.lib uuid.lib commctrl.lib")
+  foreach(t EXE SHARED MODULE)
+    string(APPEND CMAKE_${t}_LINKER_FLAGS_INIT " /NODEFAULTLIB:libc.lib /NODEFAULTLIB:oldnames.lib")
+  endforeach()
+
+  if (MSVC_VERSION LESS 1600)
+    string(APPEND CMAKE_C_STANDARD_LIBRARIES_INIT " corelibc.lib")
+  endif ()
+elseif(WINDOWS_PHONE OR WINDOWS_STORE)
+  set(_PLATFORM_DEFINES "/DWIN32")
+  set(_FLAGS_C " /DUNICODE /D_UNICODE")
+  set(_FLAGS_CXX " /DUNICODE /D_UNICODE${_GR} /EHsc")
+  if(WINDOWS_STORE AND MSVC_VERSION GREATER 1899)
+    set(CMAKE_C_STANDARD_LIBRARIES_INIT "WindowsApp.lib")
+  elseif(WINDOWS_PHONE)
+    set(CMAKE_C_STANDARD_LIBRARIES_INIT "WindowsPhoneCore.lib RuntimeObject.lib PhoneAppModelHost.lib")
+  elseif(_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM" OR _MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM" OR _MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM64" OR _MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM64")
+    set(CMAKE_C_STANDARD_LIBRARIES_INIT "kernel32.lib user32.lib")
+  else()
+    set(CMAKE_C_STANDARD_LIBRARIES_INIT "kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib")
+  endif()
+else()
+  set(_PLATFORM_DEFINES "/DWIN32")
+  if((_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM64EC") OR (_MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM64EC"))
+    set(_PLATFORM_DEFINES "${_PLATFORM_DEFINES} /D_AMD64_ /DAMD64 /D_ARM64EC_ /DARM64EC /D_ARM64EC_WORKAROUND_")
+  endif()
+  if(_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM" OR _MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM")
+    set(CMAKE_C_STANDARD_LIBRARIES_INIT "kernel32.lib user32.lib")
+  elseif(MSVC_VERSION GREATER 1310)
+    if(CMAKE_VS_PLATFORM_TOOLSET MATCHES "v[0-9]+_clang_.*")
+      # Clang/C2 in MSVC14 Update 1 seems to not support -fsantinize (yet?)
+      # set(_RTC1 "-fsantinize=memory,safe-stack")
+      set(_FLAGS_CXX " -frtti -fexceptions")
+    else()
+      set(_RTC1 "/RTC1")
+      set(_FLAGS_CXX "${_GR} /EHsc")
+    endif()
+    set(CMAKE_C_STANDARD_LIBRARIES_INIT "kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib")
+  else()
+    set(_RTC1 "/GZ")
+    set(_FLAGS_CXX "${_GR} /GX")
+    set(CMAKE_C_STANDARD_LIBRARIES_INIT "kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib")
+  endif()
+
+  if(MSVC_VERSION LESS 1310)
+    set(_FLAGS_C   " /Zm1000${_FLAGS_C}")
+    set(_FLAGS_CXX " /Zm1000${_FLAGS_CXX}")
+  endif()
+endif()
+
+unset(_GR)
+
+set(CMAKE_CXX_STANDARD_LIBRARIES_INIT "${CMAKE_C_STANDARD_LIBRARIES_INIT}")
+
+# executable linker flags
+set (CMAKE_LINK_DEF_FILE_FLAG "/DEF:")
+# set the machine type
+if(MSVC_C_ARCHITECTURE_ID)
+  if(MSVC_C_ARCHITECTURE_ID MATCHES "^ARMV.I")
+    set(_MACHINE_ARCH_FLAG "/machine:THUMB")
+  elseif(_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM64")
+    set(_MACHINE_ARCH_FLAG "/machine:ARM64")
+  elseif(_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM64EC")
+    set(_MACHINE_ARCH_FLAG "/machine:ARM64EC")
+  elseif(_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM")
+    set(_MACHINE_ARCH_FLAG "/machine:ARM")
+  else()
+    set(_MACHINE_ARCH_FLAG "/machine:${MSVC_C_ARCHITECTURE_ID}")
+  endif()
+elseif(MSVC_CXX_ARCHITECTURE_ID)
+  if(MSVC_CXX_ARCHITECTURE_ID MATCHES "^ARMV.I")
+    set(_MACHINE_ARCH_FLAG "/machine:THUMB")
+  elseif(_MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM64")
+    set(_MACHINE_ARCH_FLAG "/machine:ARM64")
+  elseif(_MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM64EC")
+    set(_MACHINE_ARCH_FLAG "/machine:ARM64EC")
+  elseif(_MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM")
+    set(_MACHINE_ARCH_FLAG "/machine:ARM")
+  else()
+    set(_MACHINE_ARCH_FLAG "/machine:${MSVC_CXX_ARCHITECTURE_ID}")
+  endif()
+elseif(MSVC_Fortran_ARCHITECTURE_ID)
+  set(_MACHINE_ARCH_FLAG "/machine:${MSVC_Fortran_ARCHITECTURE_ID}")
+endif()
+
+# add /debug and /INCREMENTAL:YES to DEBUG and RELWITHDEBINFO also add pdbtype
+# on versions that support it
+set( MSVC_INCREMENTAL_YES_FLAG "")
+if(NOT WINDOWS_PHONE AND NOT WINDOWS_STORE)
+  if(NOT MSVC_INCREMENTAL_DEFAULT)
+    set( MSVC_INCREMENTAL_YES_FLAG "/INCREMENTAL:YES")
+  else()
+    set(  MSVC_INCREMENTAL_YES_FLAG "/INCREMENTAL" )
+  endif()
+endif()
+
+foreach(t EXE SHARED MODULE)
+  string(APPEND CMAKE_${t}_LINKER_FLAGS_INIT " ${_MACHINE_ARCH_FLAG}")
+  if (CMAKE_COMPILER_SUPPORTS_PDBTYPE)
+    string(APPEND CMAKE_${t}_LINKER_FLAGS_DEBUG_INIT " /debug /pdbtype:sept ${MSVC_INCREMENTAL_YES_FLAG}")
+    string(APPEND CMAKE_${t}_LINKER_FLAGS_RELWITHDEBINFO_INIT " /debug /pdbtype:sept ${MSVC_INCREMENTAL_YES_FLAG}")
+  else ()
+    string(APPEND CMAKE_${t}_LINKER_FLAGS_DEBUG_INIT " /debug ${MSVC_INCREMENTAL_YES_FLAG}")
+    string(APPEND CMAKE_${t}_LINKER_FLAGS_RELWITHDEBINFO_INIT " /debug ${MSVC_INCREMENTAL_YES_FLAG}")
+  endif ()
+  # for release and minsize release default to no incremental linking
+  string(APPEND CMAKE_${t}_LINKER_FLAGS_MINSIZEREL_INIT " /INCREMENTAL:NO")
+  string(APPEND CMAKE_${t}_LINKER_FLAGS_RELEASE_INIT " /INCREMENTAL:NO")
+endforeach()
+
+if((_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM64EC") OR (_MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM64EC"))
+  string(APPEND CMAKE_STATIC_LINKER_FLAGS_INIT " /machine:ARM64X")
+else()
+  string(APPEND CMAKE_STATIC_LINKER_FLAGS_INIT " ${_MACHINE_ARCH_FLAG}")
+endif()
+unset(_MACHINE_ARCH_FLAG)
+
+cmake_policy(GET CMP0091 __WINDOWS_MSVC_CMP0091)
+if(__WINDOWS_MSVC_CMP0091 STREQUAL "NEW")
+  set(CMAKE_MSVC_RUNTIME_LIBRARY_DEFAULT "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
+else()
+  set(CMAKE_MSVC_RUNTIME_LIBRARY_DEFAULT "")
+endif()
+unset(__WINDOWS_MSVC_CMP0091)
+
+macro(__windows_compiler_msvc lang)
+  if(NOT MSVC_VERSION LESS 1400)
+    # for 2005 make sure the manifest is put in the dll with mt
+    set(_CMAKE_VS_LINK_DLL "<CMAKE_COMMAND> -E vs_link_dll --intdir=<OBJECT_DIR> --rc=<CMAKE_RC_COMPILER> --mt=<CMAKE_MT> --manifests <MANIFESTS> -- ")
+    set(_CMAKE_VS_LINK_EXE "<CMAKE_COMMAND> -E vs_link_exe --intdir=<OBJECT_DIR> --rc=<CMAKE_RC_COMPILER> --mt=<CMAKE_MT> --manifests <MANIFESTS> -- ")
+  endif()
+  set(CMAKE_${lang}_CREATE_SHARED_LIBRARY
+    "${_CMAKE_VS_LINK_DLL}<CMAKE_LINKER> ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} /out:<TARGET> /implib:<TARGET_IMPLIB> /pdb:<TARGET_PDB> /dll /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR>${_PLATFORM_LINK_FLAGS} <LINK_FLAGS> <LINK_LIBRARIES> ${CMAKE_END_TEMP_FILE}")
+
+  set(CMAKE_${lang}_CREATE_SHARED_MODULE ${CMAKE_${lang}_CREATE_SHARED_LIBRARY})
+  set(CMAKE_${lang}_CREATE_STATIC_LIBRARY  "<CMAKE_AR> ${CMAKE_CL_NOLOGO} <LINK_FLAGS> /out:<TARGET> <OBJECTS> ")
+
+  set(CMAKE_${lang}_COMPILE_OBJECT
+    "<CMAKE_${lang}_COMPILER> ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO}${_COMPILE_${lang}} <DEFINES> <INCLUDES> <FLAGS> /Fo<OBJECT> /Fd<TARGET_COMPILE_PDB>${_FS_${lang}} -c <SOURCE>${CMAKE_END_TEMP_FILE}")
+  set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE
+    "<CMAKE_${lang}_COMPILER> > <PREPROCESSED_SOURCE> ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO}${_COMPILE_${lang}} <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE>${CMAKE_END_TEMP_FILE}")
+  set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE
+    "<CMAKE_${lang}_COMPILER> ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO}${_COMPILE_${lang}} <DEFINES> <INCLUDES> <FLAGS> /FoNUL /FAs /Fa<ASSEMBLY_SOURCE> /c <SOURCE>${CMAKE_END_TEMP_FILE}")
+
+  set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_OBJECTS 1)
+  set(CMAKE_${lang}_LINK_EXECUTABLE
+    "${_CMAKE_VS_LINK_EXE}<CMAKE_LINKER> ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} /out:<TARGET> /implib:<TARGET_IMPLIB> /pdb:<TARGET_PDB> /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR>${_PLATFORM_LINK_FLAGS} <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>${CMAKE_END_TEMP_FILE}")
+
+  if(CMAKE_SYSTEM_NAME STREQUAL "WindowsCE")
+    set(CMAKE_${lang}_CREATE_WIN32_EXE "/entry:WinMainCRTStartup")
+    set(CMAKE_${lang}_CREATE_CONSOLE_EXE "/entry:mainACRTStartup")
+  else()
+    set(CMAKE_${lang}_CREATE_WIN32_EXE "/subsystem:windows")
+    set(CMAKE_${lang}_CREATE_CONSOLE_EXE "/subsystem:console")
+  endif()
+
+  set(CMAKE_PCH_EXTENSION .pch)
+  set(CMAKE_LINK_PCH ON)
+  if (CMAKE_${lang}_COMPILER_ID STREQUAL "Clang")
+    set(CMAKE_PCH_PROLOGUE "#pragma clang system_header")
+
+    # macOS paths usually start with /Users/*. Unfortunately, clang-cl interprets
+    # paths starting with /U as macro undefines, so we need to put a -- before the
+    # input file path to force it to be treated as a path.
+    string(REPLACE "-c <SOURCE>" "-c -- <SOURCE>" CMAKE_${lang}_COMPILE_OBJECT "${CMAKE_${lang}_COMPILE_OBJECT}")
+    string(REPLACE "-c <SOURCE>" "-c -- <SOURCE>" CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE "${CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE}")
+    string(REPLACE "-c <SOURCE>" "-c -- <SOURCE>" CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE "${CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE}")
+
+  elseif(MSVC_VERSION GREATER_EQUAL 1913)
+    # At least MSVC toolet 14.13 from VS 2017 15.6
+    set(CMAKE_PCH_PROLOGUE "#pragma system_header")
+  endif()
+  if (NOT ${CMAKE_${lang}_COMPILER_ID} STREQUAL "Clang")
+    set(CMAKE_PCH_COPY_COMPILE_PDB ON)
+  endif()
+  set(CMAKE_${lang}_COMPILE_OPTIONS_USE_PCH /Yu<PCH_HEADER> /Fp<PCH_FILE> /FI<PCH_HEADER>)
+  set(CMAKE_${lang}_COMPILE_OPTIONS_CREATE_PCH /Yc<PCH_HEADER> /Fp<PCH_FILE> /FI<PCH_HEADER>)
+
+  if("x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xMSVC")
+    set(_CMAKE_${lang}_IPO_SUPPORTED_BY_CMAKE YES)
+    set(_CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER YES)
+
+    set(CMAKE_${lang}_COMPILE_OPTIONS_IPO "/GL")
+    set(CMAKE_${lang}_LINK_OPTIONS_IPO "/INCREMENTAL:NO" "/LTCG")
+    string(REPLACE "<LINK_FLAGS> " "/LTCG <LINK_FLAGS> "
+      CMAKE_${lang}_CREATE_STATIC_LIBRARY_IPO "${CMAKE_${lang}_CREATE_STATIC_LIBRARY}")
+  elseif("x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xClang" OR
+         "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xFlang")
+    set(_CMAKE_${lang}_IPO_SUPPORTED_BY_CMAKE YES)
+    set(_CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER YES)
+
+    # '-flto=thin' available since Clang 3.9 and Xcode 8
+    # * http://clang.llvm.org/docs/ThinLTO.html#clang-llvm
+    # * https://trac.macports.org/wiki/XcodeVersionInfo
+    set(_CMAKE_LTO_THIN TRUE)
+    if(CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.9)
+      set(_CMAKE_LTO_THIN FALSE)
+    endif()
+
+    if(_CMAKE_LTO_THIN)
+      set(CMAKE_${lang}_COMPILE_OPTIONS_IPO "-flto=thin")
+    else()
+      set(CMAKE_${lang}_COMPILE_OPTIONS_IPO "-flto")
+    endif()
+  endif()
+
+  if("x${lang}" STREQUAL "xC" OR
+      "x${lang}" STREQUAL "xCXX")
+    if(CMAKE_MSVC_RUNTIME_LIBRARY_DEFAULT)
+      set(_MDd "")
+      set(_MD "")
+    else()
+      set(_MDd " /MDd")
+      set(_MD " /MD")
+    endif()
+
+    cmake_policy(GET CMP0092 _cmp0092)
+    if(_cmp0092 STREQUAL "NEW")
+      set(_W3 "")
+      set(_Wall "")
+    else()
+      set(_W3 " /W3")
+      set(_Wall " -Wall")
+    endif()
+    unset(_cmp0092)
+
+    if(CMAKE_VS_PLATFORM_TOOLSET MATCHES "v[0-9]+_clang_.*")
+      # note: MSVC 14 2015 Update 1 sets -fno-ms-compatibility by default, but this does not allow one to compile many projects
+      # that include MS's own headers. CMake itself is affected project too.
+      string(APPEND CMAKE_${lang}_FLAGS_INIT " ${_PLATFORM_DEFINES}${_PLATFORM_DEFINES_${lang}} -fms-extensions -fms-compatibility -D_WINDOWS${_Wall}${_FLAGS_${lang}}")
+      string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT "${_MDd} -gline-tables-only -fno-inline -O0 ${_RTC1}")
+      string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT "${_MD} -O2 -DNDEBUG")
+      string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT "${_MD} -gline-tables-only -O2 -fno-inline -DNDEBUG")
+      string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT "${_MD} -DNDEBUG") # TODO: Add '-Os' once VS generator maps it properly for Clang
+    else()
+      string(APPEND CMAKE_${lang}_FLAGS_INIT " ${_PLATFORM_DEFINES}${_PLATFORM_DEFINES_${lang}} /D_WINDOWS${_W3}${_FLAGS_${lang}}")
+      string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT "${_MDd} /Zi /Ob0 /Od ${_RTC1}")
+      string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT "${_MD} /O2 /Ob2 /DNDEBUG")
+      string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT "${_MD} /Zi /O2 /Ob1 /DNDEBUG")
+      string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT "${_MD} /O1 /Ob1 /DNDEBUG")
+    endif()
+    unset(_Wall)
+    unset(_W3)
+    unset(_MDd)
+    unset(_MD)
+
+    set(CMAKE_${lang}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreaded         -MT)
+    set(CMAKE_${lang}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDLL      -MD)
+    set(CMAKE_${lang}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebug    -MTd)
+    set(CMAKE_${lang}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebugDLL -MDd)
+  endif()
+  set(CMAKE_${lang}_LINKER_SUPPORTS_PDB ON)
+
+  __windows_compiler_msvc_enable_rc("${_PLATFORM_DEFINES} ${_PLATFORM_DEFINES_${lang}}")
+
+  # define generic information about compiler dependencies
+  if (MSVC_VERSION GREATER 1300)
+    set(CMAKE_DEPFILE_FLAGS_${lang} "/showIncludes")
+    set(CMAKE_${lang}_DEPFILE_FORMAT msvc)
+  endif()
+endmacro()
+
+macro(__windows_compiler_msvc_enable_rc flags)
+  if(NOT CMAKE_RC_COMPILER_INIT)
+    set(CMAKE_RC_COMPILER_INIT rc)
+  endif()
+  if(NOT CMAKE_RC_FLAGS_INIT)
+    # llvm-rc fails when flags are specified with /D and no space after
+    string(REPLACE " /D" " -D" fixed_flags " ${flags}")
+    string(APPEND CMAKE_RC_FLAGS_INIT " ${fixed_flags}")
+  endif()
+  if(NOT CMAKE_RC_FLAGS_DEBUG_INIT)
+    string(APPEND CMAKE_RC_FLAGS_DEBUG_INIT " -D_DEBUG")
+  endif()
+
+  enable_language(RC)
+  if(NOT DEFINED CMAKE_NINJA_CMCLDEPS_RC)
+    set(CMAKE_NINJA_CMCLDEPS_RC 1)
+  endif()
+endmacro()
diff --git a/share/cmake-3.22/Modules/Platform/Windows-NVIDIA-CUDA.cmake b/share/cmake-3.22/Modules/Platform/Windows-NVIDIA-CUDA.cmake
new file mode 100644
index 0000000..b83932e
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Windows-NVIDIA-CUDA.cmake
@@ -0,0 +1,88 @@
+include(Platform/Windows-MSVC)
+
+set(CMAKE_CUDA_COMPILE_PTX_COMPILATION
+  "<CMAKE_CUDA_COMPILER> ${_CMAKE_CUDA_EXTRA_FLAGS} <DEFINES> <INCLUDES> <FLAGS> ${_CMAKE_COMPILE_AS_CUDA_FLAG} -ptx <SOURCE> -o <OBJECT> -Xcompiler=-Fd<TARGET_COMPILE_PDB>,-FS")
+set(CMAKE_CUDA_COMPILE_SEPARABLE_COMPILATION
+  "<CMAKE_CUDA_COMPILER> ${_CMAKE_CUDA_EXTRA_FLAGS} <DEFINES> <INCLUDES> <FLAGS> ${_CMAKE_COMPILE_AS_CUDA_FLAG} -dc <SOURCE> -o <OBJECT> -Xcompiler=-Fd<TARGET_COMPILE_PDB>,-FS")
+set(CMAKE_CUDA_COMPILE_WHOLE_COMPILATION
+  "<CMAKE_CUDA_COMPILER> ${_CMAKE_CUDA_EXTRA_FLAGS} <DEFINES> <INCLUDES> <FLAGS> ${_CMAKE_COMPILE_AS_CUDA_FLAG} -c <SOURCE> -o <OBJECT> -Xcompiler=-Fd<TARGET_COMPILE_PDB>,-FS")
+
+set(__IMPLICIT_LINKS)
+foreach(dir ${CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES})
+  string(APPEND __IMPLICIT_LINKS " -LIBPATH:\"${dir}\"")
+endforeach()
+foreach(lib ${CMAKE_CUDA_HOST_IMPLICIT_LINK_LIBRARIES})
+  string(APPEND __IMPLICIT_LINKS " \"${lib}\"")
+endforeach()
+set(CMAKE_CUDA_LINK_EXECUTABLE
+   "<CMAKE_CUDA_HOST_LINK_LAUNCHER> <LINK_FLAGS> <OBJECTS> /out:<TARGET> /implib:<TARGET_IMPLIB> /pdb:<TARGET_PDB> /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> <LINK_LIBRARIES>${__IMPLICIT_LINKS}")
+
+set(_CMAKE_VS_LINK_DLL "<CMAKE_COMMAND> -E vs_link_dll --intdir=<OBJECT_DIR> --rc=<CMAKE_RC_COMPILER> --mt=<CMAKE_MT> --manifests <MANIFESTS> -- ")
+set(_CMAKE_VS_LINK_EXE "<CMAKE_COMMAND> -E vs_link_exe --intdir=<OBJECT_DIR> --rc=<CMAKE_RC_COMPILER> --mt=<CMAKE_MT> --manifests <MANIFESTS> -- ")
+set(CMAKE_CUDA_CREATE_SHARED_LIBRARY
+  "${_CMAKE_VS_LINK_DLL}<CMAKE_LINKER> ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} /out:<TARGET> /implib:<TARGET_IMPLIB> /pdb:<TARGET_PDB> /dll /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR>${_PLATFORM_LINK_FLAGS} <LINK_FLAGS> <LINK_LIBRARIES>${__IMPLICIT_LINKS} ${CMAKE_END_TEMP_FILE}")
+
+set(CMAKE_CUDA_CREATE_SHARED_MODULE ${CMAKE_CUDA_CREATE_SHARED_LIBRARY})
+set(CMAKE_CUDA_CREATE_STATIC_LIBRARY  "<CMAKE_AR> ${CMAKE_CL_NOLOGO} <LINK_FLAGS> /out:<TARGET> <OBJECTS> ")
+set(CMAKE_CUDA_LINKER_SUPPORTS_PDB ON)
+set(CMAKE_CUDA_LINK_EXECUTABLE
+  "${_CMAKE_VS_LINK_EXE}<CMAKE_LINKER> ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} /out:<TARGET> /implib:<TARGET_IMPLIB> /pdb:<TARGET_PDB> /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR>${_PLATFORM_LINK_FLAGS} <LINK_FLAGS> <LINK_LIBRARIES>${__IMPLICIT_LINKS} ${CMAKE_END_TEMP_FILE}")
+unset(_CMAKE_VS_LINK_DLL)
+unset(_CMAKE_VS_LINK_EXE)
+
+
+# Add implicit host link directories that contain device libraries
+# to the device link line.
+set(__IMPLICIT_DLINK_DIRS ${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES})
+if(__IMPLICIT_DLINK_DIRS)
+  list(REMOVE_ITEM __IMPLICIT_DLINK_DIRS ${CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES})
+endif()
+set(__IMPLICIT_DLINK_FLAGS)
+foreach(dir ${__IMPLICIT_DLINK_DIRS})
+  if(EXISTS "${dir}/curand_static.lib")
+    string(APPEND __IMPLICIT_DLINK_FLAGS " -L\"${dir}\"")
+  endif()
+endforeach()
+unset(__IMPLICIT_DLINK_DIRS)
+
+set(CMAKE_CUDA_DEVICE_LINK_LIBRARY
+  "<CMAKE_CUDA_COMPILER> ${_CMAKE_CUDA_EXTRA_FLAGS} <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> ${_CMAKE_CUDA_EXTRA_DEVICE_LINK_FLAGS} -shared -dlink <OBJECTS> -o <TARGET> <LINK_LIBRARIES> -Xcompiler=-Fd<TARGET_COMPILE_PDB>,-FS${__IMPLICIT_DLINK_FLAGS}")
+set(CMAKE_CUDA_DEVICE_LINK_EXECUTABLE
+  "<CMAKE_CUDA_COMPILER> ${_CMAKE_CUDA_EXTRA_FLAGS} <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> ${_CMAKE_CUDA_EXTRA_DEVICE_LINK_FLAGS} -shared -dlink <OBJECTS> -o <TARGET> <LINK_LIBRARIES> -Xcompiler=-Fd<TARGET_COMPILE_PDB>,-FS${__IMPLICIT_DLINK_FLAGS}")
+unset(__IMPLICIT_DLINK_FLAGS)
+
+string(REPLACE "/D" "-D" _PLATFORM_DEFINES_CUDA "${_PLATFORM_DEFINES}${_PLATFORM_DEFINES_CXX}")
+
+if(CMAKE_MSVC_RUNTIME_LIBRARY_DEFAULT)
+  set(_MDd "")
+  set(_MD "")
+else()
+  set(_MDd "-MDd ")
+  set(_MD "-MD ")
+endif()
+
+cmake_policy(GET CMP0092 _cmp0092)
+if(_cmp0092 STREQUAL "NEW")
+  set(_W3 "")
+else()
+  set(_W3 "/W3")
+endif()
+unset(_cmp0092)
+
+string(APPEND CMAKE_CUDA_FLAGS_INIT " ${PLATFORM_DEFINES_CUDA} -D_WINDOWS -Xcompiler=\"${_W3}${_FLAGS_CXX}\"")
+string(APPEND CMAKE_CUDA_FLAGS_DEBUG_INIT " -Xcompiler=\"${_MDd}-Zi -Ob0 -Od ${_RTC1}\"")
+string(APPEND CMAKE_CUDA_FLAGS_RELEASE_INIT " -Xcompiler=\"${_MD}-O2 -Ob2\" -DNDEBUG")
+string(APPEND CMAKE_CUDA_FLAGS_RELWITHDEBINFO_INIT " -Xcompiler=\"${_MD}-Zi -O2 -Ob1\" -DNDEBUG")
+string(APPEND CMAKE_CUDA_FLAGS_MINSIZEREL_INIT " -Xcompiler=\"${_MD}-O1 -Ob1\" -DNDEBUG")
+unset(_W3)
+unset(_MDd)
+unset(_MD)
+
+set(CMAKE_CUDA_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreaded         -Xcompiler=-MT)
+set(CMAKE_CUDA_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDLL      -Xcompiler=-MD)
+set(CMAKE_CUDA_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebug    -Xcompiler=-MTd)
+set(CMAKE_CUDA_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebugDLL -Xcompiler=-MDd)
+
+set(CMAKE_CUDA_STANDARD_LIBRARIES_INIT "${CMAKE_C_STANDARD_LIBRARIES_INIT}")
+
+__windows_compiler_msvc_enable_rc("${_PLATFORM_DEFINES} ${_PLATFORM_DEFINES_CXX}")
diff --git a/share/cmake-3.22/Modules/Platform/Windows-OpenWatcom-C.cmake b/share/cmake-3.22/Modules/Platform/Windows-OpenWatcom-C.cmake
new file mode 100644
index 0000000..b82a4cb
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Windows-OpenWatcom-C.cmake
@@ -0,0 +1,2 @@
+include(Platform/Windows-OpenWatcom)
+__windows_open_watcom(C)
diff --git a/share/cmake-3.22/Modules/Platform/Windows-OpenWatcom-CXX.cmake b/share/cmake-3.22/Modules/Platform/Windows-OpenWatcom-CXX.cmake
new file mode 100644
index 0000000..ac90d28
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Windows-OpenWatcom-CXX.cmake
@@ -0,0 +1,2 @@
+include(Platform/Windows-OpenWatcom)
+__windows_open_watcom(CXX)
diff --git a/share/cmake-3.22/Modules/Platform/Windows-OpenWatcom.cmake b/share/cmake-3.22/Modules/Platform/Windows-OpenWatcom.cmake
new file mode 100644
index 0000000..19bcb97
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Windows-OpenWatcom.cmake
@@ -0,0 +1,35 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+# This module is shared by multiple languages; use include blocker.
+include_guard()
+
+set(CMAKE_BUILD_TYPE_INIT Debug)
+
+string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT " system nt_dll")
+string(APPEND CMAKE_MODULE_LINKER_FLAGS_INIT " system nt_dll")
+
+set(CMAKE_C_COMPILE_OPTIONS_DLL "-bd") # Note: This variable is a ';' separated list
+set(CMAKE_SHARED_LIBRARY_C_FLAGS "-bd") # ... while this is a space separated string.
+
+set(CMAKE_RC_COMPILER "rc" )
+
+# single/multi-threaded                 /-bm
+# static/DLL run-time libraries         /-br
+# default is setup for multi-threaded + DLL run-time libraries
+string(APPEND CMAKE_C_FLAGS_INIT " -bt=nt -dWIN32 -br -bm")
+string(APPEND CMAKE_CXX_FLAGS_INIT " -bt=nt -xs -dWIN32 -br -bm")
+
+if(CMAKE_CROSSCOMPILING)
+  if(NOT CMAKE_C_STANDARD_INCLUDE_DIRECTORIES)
+    set(CMAKE_C_STANDARD_INCLUDE_DIRECTORIES $ENV{WATCOM}/h $ENV{WATCOM}/h/nt)
+  endif()
+  if(NOT CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES)
+    set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES $ENV{WATCOM}/h $ENV{WATCOM}/h/nt)
+  endif()
+endif()
+
+macro(__windows_open_watcom lang)
+  set(CMAKE_${lang}_CREATE_WIN32_EXE "system nt_win")
+  set(CMAKE_${lang}_CREATE_CONSOLE_EXE "system nt")
+endmacro()
diff --git a/share/cmake-3.18/Modules/Platform/Windows-PGI-C.cmake b/share/cmake-3.22/Modules/Platform/Windows-PGI-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Windows-PGI-C.cmake
rename to share/cmake-3.22/Modules/Platform/Windows-PGI-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Windows-PGI-Fortran.cmake b/share/cmake-3.22/Modules/Platform/Windows-PGI-Fortran.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Windows-PGI-Fortran.cmake
rename to share/cmake-3.22/Modules/Platform/Windows-PGI-Fortran.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Windows-PGI.cmake b/share/cmake-3.22/Modules/Platform/Windows-PGI.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Windows-PGI.cmake
rename to share/cmake-3.22/Modules/Platform/Windows-PGI.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Windows-Watcom-C.cmake b/share/cmake-3.22/Modules/Platform/Windows-Watcom-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Windows-Watcom-C.cmake
rename to share/cmake-3.22/Modules/Platform/Windows-Watcom-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Windows-Watcom-CXX.cmake b/share/cmake-3.22/Modules/Platform/Windows-Watcom-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Windows-Watcom-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/Windows-Watcom-CXX.cmake
diff --git a/share/cmake-3.22/Modules/Platform/Windows-df.cmake b/share/cmake-3.22/Modules/Platform/Windows-df.cmake
new file mode 100644
index 0000000..c823423
--- /dev/null
+++ b/share/cmake-3.22/Modules/Platform/Windows-df.cmake
@@ -0,0 +1,60 @@
+# compiler support for fortran CVF compiler on windows
+
+set(CMAKE_WINDOWS_OBJECT_PATH 1)
+set(CMAKE_LIBRARY_PATH_FLAG "-LIBPATH:")
+set(CMAKE_LINK_LIBRARY_FLAG "")
+set(WIN32 1)
+if(CMAKE_VERBOSE_MAKEFILE)
+  set(CMAKE_CL_NOLOGO)
+else()
+  set(CMAKE_CL_NOLOGO "/nologo")
+endif()
+
+set(CMAKE_Fortran_MODDIR_FLAG "-module:")
+
+set(CMAKE_Fortran_CREATE_SHARED_LIBRARY
+ "link ${CMAKE_CL_NOLOGO} ${CMAKE_START_TEMP_FILE} /out:<TARGET> /dll <LINK_FLAGS> <OBJECTS> <LINK_LIBRARIES> ${CMAKE_END_TEMP_FILE}")
+
+set(CMAKE_Fortran_CREATE_SHARED_MODULE ${CMAKE_Fortran_CREATE_SHARED_LIBRARY})
+
+# create a C++ static library
+set(CMAKE_Fortran_CREATE_STATIC_LIBRARY  "lib ${CMAKE_CL_NOLOGO} <LINK_FLAGS> /out:<TARGET> <OBJECTS> ")
+
+# compile a C++ file into an object file
+set(CMAKE_Fortran_COMPILE_OBJECT
+    "<CMAKE_Fortran_COMPILER> ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO} /object:<OBJECT> <FLAGS> /compile_only <SOURCE>${CMAKE_END_TEMP_FILE}")
+
+set(CMAKE_Fortran_LINK_EXECUTABLE
+    "<CMAKE_Fortran_COMPILER> ${CMAKE_CL_NOLOGO} ${CMAKE_START_TEMP_FILE} <FLAGS> /exe:<TARGET> <OBJECTS> /link <CMAKE_Fortran_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>${CMAKE_END_TEMP_FILE}")
+
+set(CMAKE_Fortran_CREATE_WIN32_EXE /winapp)
+set(CMAKE_Fortran_CREATE_CONSOLE_EXE )
+
+# does the compiler support pdbtype and is it the newer compiler
+
+set(CMAKE_BUILD_TYPE_INIT Debug)
+set (CMAKE_Fortran_FLAGS_INIT "")
+set (CMAKE_Fortran_FLAGS_DEBUG_INIT "/debug:full")
+set (CMAKE_Fortran_FLAGS_MINSIZEREL_INIT "/Optimize:2 /Define:NDEBUG")
+set (CMAKE_Fortran_FLAGS_RELEASE_INIT "/Optimize:1 /Define:NDEBUG")
+set (CMAKE_Fortran_FLAGS_RELWITHDEBINFO_INIT "/Optimize:1 /debug:full /Define:NDEBUG")
+
+set (CMAKE_Fortran_STANDARD_LIBRARIES_INIT "user32.lib")
+
+# executable linker flags
+set (CMAKE_LINK_DEF_FILE_FLAG "/DEF:")
+set (CMAKE_EXE_LINKER_FLAGS_INIT " /INCREMENTAL:YES")
+if (CMAKE_COMPILER_SUPPORTS_PDBTYPE)
+  set (CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT "/debug /pdbtype:sept")
+  set (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT "/debug /pdbtype:sept")
+else ()
+  set (CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT "/debug")
+  set (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT "/debug")
+endif ()
+
+set (CMAKE_SHARED_LINKER_FLAGS_INIT ${CMAKE_EXE_LINKER_FLAGS_INIT})
+set (CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT ${CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT})
+set (CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO_INIT ${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT})
+set (CMAKE_MODULE_LINKER_FLAGS_INIT ${CMAKE_SHARED_LINKER_FLAGS_INIT})
+set (CMAKE_MODULE_LINKER_FLAGS_DEBUG_INIT ${CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT})
+set (CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO_INIT ${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT})
diff --git a/share/cmake-3.18/Modules/Platform/Windows-windres.cmake b/share/cmake-3.22/Modules/Platform/Windows-windres.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Windows-windres.cmake
rename to share/cmake-3.22/Modules/Platform/Windows-windres.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Windows.cmake b/share/cmake-3.22/Modules/Platform/Windows.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Windows.cmake
rename to share/cmake-3.22/Modules/Platform/Windows.cmake
diff --git a/share/cmake-3.18/Modules/Platform/WindowsCE-MSVC-C.cmake b/share/cmake-3.22/Modules/Platform/WindowsCE-MSVC-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/WindowsCE-MSVC-C.cmake
rename to share/cmake-3.22/Modules/Platform/WindowsCE-MSVC-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/WindowsCE-MSVC-CXX.cmake b/share/cmake-3.22/Modules/Platform/WindowsCE-MSVC-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/WindowsCE-MSVC-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/WindowsCE-MSVC-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/WindowsCE.cmake b/share/cmake-3.22/Modules/Platform/WindowsCE.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/WindowsCE.cmake
rename to share/cmake-3.22/Modules/Platform/WindowsCE.cmake
diff --git a/share/cmake-3.18/Modules/Platform/WindowsPaths.cmake b/share/cmake-3.22/Modules/Platform/WindowsPaths.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/WindowsPaths.cmake
rename to share/cmake-3.22/Modules/Platform/WindowsPaths.cmake
diff --git a/share/cmake-3.18/Modules/Platform/WindowsPhone-Clang-ASM.cmake b/share/cmake-3.22/Modules/Platform/WindowsPhone-Clang-ASM.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/WindowsPhone-Clang-ASM.cmake
rename to share/cmake-3.22/Modules/Platform/WindowsPhone-Clang-ASM.cmake
diff --git a/share/cmake-3.18/Modules/Platform/WindowsPhone-Clang-C.cmake b/share/cmake-3.22/Modules/Platform/WindowsPhone-Clang-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/WindowsPhone-Clang-C.cmake
rename to share/cmake-3.22/Modules/Platform/WindowsPhone-Clang-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/WindowsPhone-Clang-CXX.cmake b/share/cmake-3.22/Modules/Platform/WindowsPhone-Clang-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/WindowsPhone-Clang-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/WindowsPhone-Clang-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/WindowsPhone-GNU-ASM.cmake b/share/cmake-3.22/Modules/Platform/WindowsPhone-GNU-ASM.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/WindowsPhone-GNU-ASM.cmake
rename to share/cmake-3.22/Modules/Platform/WindowsPhone-GNU-ASM.cmake
diff --git a/share/cmake-3.18/Modules/Platform/WindowsPhone-GNU-C.cmake b/share/cmake-3.22/Modules/Platform/WindowsPhone-GNU-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/WindowsPhone-GNU-C.cmake
rename to share/cmake-3.22/Modules/Platform/WindowsPhone-GNU-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/WindowsPhone-GNU-CXX.cmake b/share/cmake-3.22/Modules/Platform/WindowsPhone-GNU-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/WindowsPhone-GNU-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/WindowsPhone-GNU-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/WindowsPhone-MSVC-C.cmake b/share/cmake-3.22/Modules/Platform/WindowsPhone-MSVC-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/WindowsPhone-MSVC-C.cmake
rename to share/cmake-3.22/Modules/Platform/WindowsPhone-MSVC-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/WindowsPhone-MSVC-CXX.cmake b/share/cmake-3.22/Modules/Platform/WindowsPhone-MSVC-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/WindowsPhone-MSVC-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/WindowsPhone-MSVC-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/WindowsPhone.cmake b/share/cmake-3.22/Modules/Platform/WindowsPhone.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/WindowsPhone.cmake
rename to share/cmake-3.22/Modules/Platform/WindowsPhone.cmake
diff --git a/share/cmake-3.18/Modules/Platform/WindowsStore-Clang-ASM.cmake b/share/cmake-3.22/Modules/Platform/WindowsStore-Clang-ASM.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/WindowsStore-Clang-ASM.cmake
rename to share/cmake-3.22/Modules/Platform/WindowsStore-Clang-ASM.cmake
diff --git a/share/cmake-3.18/Modules/Platform/WindowsStore-Clang-C.cmake b/share/cmake-3.22/Modules/Platform/WindowsStore-Clang-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/WindowsStore-Clang-C.cmake
rename to share/cmake-3.22/Modules/Platform/WindowsStore-Clang-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/WindowsStore-Clang-CXX.cmake b/share/cmake-3.22/Modules/Platform/WindowsStore-Clang-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/WindowsStore-Clang-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/WindowsStore-Clang-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/WindowsStore-GNU-ASM.cmake b/share/cmake-3.22/Modules/Platform/WindowsStore-GNU-ASM.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/WindowsStore-GNU-ASM.cmake
rename to share/cmake-3.22/Modules/Platform/WindowsStore-GNU-ASM.cmake
diff --git a/share/cmake-3.18/Modules/Platform/WindowsStore-GNU-C.cmake b/share/cmake-3.22/Modules/Platform/WindowsStore-GNU-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/WindowsStore-GNU-C.cmake
rename to share/cmake-3.22/Modules/Platform/WindowsStore-GNU-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/WindowsStore-GNU-CXX.cmake b/share/cmake-3.22/Modules/Platform/WindowsStore-GNU-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/WindowsStore-GNU-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/WindowsStore-GNU-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/WindowsStore-MSVC-C.cmake b/share/cmake-3.22/Modules/Platform/WindowsStore-MSVC-C.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/WindowsStore-MSVC-C.cmake
rename to share/cmake-3.22/Modules/Platform/WindowsStore-MSVC-C.cmake
diff --git a/share/cmake-3.18/Modules/Platform/WindowsStore-MSVC-CXX.cmake b/share/cmake-3.22/Modules/Platform/WindowsStore-MSVC-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/WindowsStore-MSVC-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/WindowsStore-MSVC-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/WindowsStore.cmake b/share/cmake-3.22/Modules/Platform/WindowsStore.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/WindowsStore.cmake
rename to share/cmake-3.22/Modules/Platform/WindowsStore.cmake
diff --git a/share/cmake-3.18/Modules/Platform/Xenix.cmake b/share/cmake-3.22/Modules/Platform/Xenix.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/Xenix.cmake
rename to share/cmake-3.22/Modules/Platform/Xenix.cmake
diff --git a/share/cmake-3.18/Modules/Platform/eCos.cmake b/share/cmake-3.22/Modules/Platform/eCos.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/eCos.cmake
rename to share/cmake-3.22/Modules/Platform/eCos.cmake
diff --git a/share/cmake-3.18/Modules/Platform/gas.cmake b/share/cmake-3.22/Modules/Platform/gas.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/gas.cmake
rename to share/cmake-3.22/Modules/Platform/gas.cmake
diff --git a/share/cmake-3.18/Modules/Platform/iOS-Determine-CXX.cmake b/share/cmake-3.22/Modules/Platform/iOS-Determine-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/iOS-Determine-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/iOS-Determine-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/iOS-Initialize.cmake b/share/cmake-3.22/Modules/Platform/iOS-Initialize.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/iOS-Initialize.cmake
rename to share/cmake-3.22/Modules/Platform/iOS-Initialize.cmake
diff --git a/share/cmake-3.18/Modules/Platform/iOS.cmake b/share/cmake-3.22/Modules/Platform/iOS.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/iOS.cmake
rename to share/cmake-3.22/Modules/Platform/iOS.cmake
diff --git a/share/cmake-3.18/Modules/Platform/kFreeBSD.cmake b/share/cmake-3.22/Modules/Platform/kFreeBSD.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/kFreeBSD.cmake
rename to share/cmake-3.22/Modules/Platform/kFreeBSD.cmake
diff --git a/share/cmake-3.18/Modules/Platform/syllable.cmake b/share/cmake-3.22/Modules/Platform/syllable.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/syllable.cmake
rename to share/cmake-3.22/Modules/Platform/syllable.cmake
diff --git a/share/cmake-3.18/Modules/Platform/tvOS-Determine-CXX.cmake b/share/cmake-3.22/Modules/Platform/tvOS-Determine-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/tvOS-Determine-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/tvOS-Determine-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/tvOS-Initialize.cmake b/share/cmake-3.22/Modules/Platform/tvOS-Initialize.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/tvOS-Initialize.cmake
rename to share/cmake-3.22/Modules/Platform/tvOS-Initialize.cmake
diff --git a/share/cmake-3.18/Modules/Platform/tvOS.cmake b/share/cmake-3.22/Modules/Platform/tvOS.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/tvOS.cmake
rename to share/cmake-3.22/Modules/Platform/tvOS.cmake
diff --git a/share/cmake-3.18/Modules/Platform/watchOS-Determine-CXX.cmake b/share/cmake-3.22/Modules/Platform/watchOS-Determine-CXX.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/watchOS-Determine-CXX.cmake
rename to share/cmake-3.22/Modules/Platform/watchOS-Determine-CXX.cmake
diff --git a/share/cmake-3.18/Modules/Platform/watchOS-Initialize.cmake b/share/cmake-3.22/Modules/Platform/watchOS-Initialize.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/watchOS-Initialize.cmake
rename to share/cmake-3.22/Modules/Platform/watchOS-Initialize.cmake
diff --git a/share/cmake-3.18/Modules/Platform/watchOS.cmake b/share/cmake-3.22/Modules/Platform/watchOS.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Platform/watchOS.cmake
rename to share/cmake-3.22/Modules/Platform/watchOS.cmake
diff --git a/share/cmake-3.22/Modules/ProcessorCount.cmake b/share/cmake-3.22/Modules/ProcessorCount.cmake
new file mode 100644
index 0000000..bda23ab
--- /dev/null
+++ b/share/cmake-3.22/Modules/ProcessorCount.cmake
@@ -0,0 +1,240 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+ProcessorCount
+--------------
+
+ProcessorCount(var)
+
+Determine the number of processors/cores and save value in ${var}
+
+Sets the variable named ${var} to the number of physical cores
+available on the machine if the information can be determined.
+Otherwise it is set to 0.  Currently this functionality is implemented
+for AIX, cygwin, FreeBSD, HPUX, Linux, macOS, QNX, Sun and
+Windows.
+
+.. versionchanged:: 3.15
+  On Linux, returns the container CPU count instead of the host CPU count.
+
+This function is guaranteed to return a positive integer (>=1) if it
+succeeds.  It returns 0 if there's a problem determining the processor
+count.
+
+Example use, in a ctest -S dashboard script:
+
+::
+
+   include(ProcessorCount)
+   ProcessorCount(N)
+   if(NOT N EQUAL 0)
+     set(CTEST_BUILD_FLAGS -j${N})
+     set(ctest_test_args ${ctest_test_args} PARALLEL_LEVEL ${N})
+   endif()
+
+
+
+This function is intended to offer an approximation of the value of
+the number of compute cores available on the current machine, such
+that you may use that value for parallel building and parallel
+testing.  It is meant to help utilize as much of the machine as seems
+reasonable.  Of course, knowledge of what else might be running on the
+machine simultaneously should be used when deciding whether to request
+a machine's full capacity all for yourself.
+#]=======================================================================]
+
+# A more reliable way might be to compile a small C program that uses the CPUID
+# instruction, but that again requires compiler support or compiling assembler
+# code.
+
+function(ProcessorCount var)
+  # Unknown:
+  set(count 0)
+
+  if(WIN32)
+    # Windows:
+    set(count "$ENV{NUMBER_OF_PROCESSORS}")
+    #message("ProcessorCount: WIN32, trying environment variable")
+  endif()
+
+  if(NOT count)
+    # Mac, FreeBSD, OpenBSD (systems with sysctl):
+    find_program(ProcessorCount_cmd_sysctl sysctl
+      PATHS /usr/sbin /sbin)
+    mark_as_advanced(ProcessorCount_cmd_sysctl)
+    if(ProcessorCount_cmd_sysctl)
+      execute_process(COMMAND ${ProcessorCount_cmd_sysctl} -n hw.ncpu
+        ERROR_QUIET
+        OUTPUT_STRIP_TRAILING_WHITESPACE
+        OUTPUT_VARIABLE count)
+      #message("ProcessorCount: trying sysctl '${ProcessorCount_cmd_sysctl}'")
+    endif()
+  endif()
+
+  if(NOT count)
+    # Linux (systems with nproc):
+    # Prefer nproc to getconf if available as getconf may return the host CPU count in Linux containers
+    find_program(ProcessorCount_cmd_nproc nproc)
+    mark_as_advanced(ProcessorCount_cmd_nproc)
+    if(ProcessorCount_cmd_nproc)
+      execute_process(COMMAND ${ProcessorCount_cmd_nproc}
+        ERROR_QUIET
+        OUTPUT_STRIP_TRAILING_WHITESPACE
+        OUTPUT_VARIABLE count)
+      #message("ProcessorCount: trying nproc '${ProcessorCount_cmd_nproc}'")
+    endif()
+  endif()
+
+  if(NOT count)
+    # Linux (systems with getconf):
+    find_program(ProcessorCount_cmd_getconf getconf)
+    mark_as_advanced(ProcessorCount_cmd_getconf)
+    if(ProcessorCount_cmd_getconf)
+      execute_process(COMMAND ${ProcessorCount_cmd_getconf} _NPROCESSORS_ONLN
+        ERROR_QUIET
+        OUTPUT_STRIP_TRAILING_WHITESPACE
+        OUTPUT_VARIABLE count)
+      #message("ProcessorCount: trying getconf '${ProcessorCount_cmd_getconf}'")
+    endif()
+  endif()
+
+  if(NOT count)
+    # HPUX (systems with machinfo):
+    find_program(ProcessorCount_cmd_machinfo machinfo
+      PATHS /usr/contrib/bin)
+    mark_as_advanced(ProcessorCount_cmd_machinfo)
+    if(ProcessorCount_cmd_machinfo)
+      execute_process(COMMAND ${ProcessorCount_cmd_machinfo}
+        ERROR_QUIET
+        OUTPUT_STRIP_TRAILING_WHITESPACE
+        OUTPUT_VARIABLE machinfo_output)
+      string(REGEX MATCHALL "Number of CPUs = ([0-9]+)" procs "${machinfo_output}")
+      set(count "${CMAKE_MATCH_1}")
+      if(NOT count)
+        string(REGEX MATCHALL "([0-9]+) logical processors" procs "${machinfo_output}")
+        set(count "${CMAKE_MATCH_1}")
+      endif()
+      #message("ProcessorCount: trying machinfo '${ProcessorCount_cmd_machinfo}'")
+    else()
+      find_program(ProcessorCount_cmd_mpsched mpsched)
+      mark_as_advanced(ProcessorCount_cmd_mpsched)
+      if(ProcessorCount_cmd_mpsched)
+        execute_process(COMMAND ${ProcessorCount_cmd_mpsched} -s
+          OUTPUT_QUIET
+          ERROR_STRIP_TRAILING_WHITESPACE
+          ERROR_VARIABLE mpsched_output)
+        string(REGEX MATCHALL "Processor Count *: *([0-9]+)" procs "${mpsched_output}")
+        set(count "${CMAKE_MATCH_1}")
+        #message("ProcessorCount: trying mpsched -s '${ProcessorCount_cmd_mpsched}'")
+      endif()
+    endif()
+  endif()
+
+  if(NOT count)
+    # AIX (systems with lsconf):
+    find_program(ProcessorCount_cmd_lsconf lsconf
+      PATHS /usr/sbin)
+    mark_as_advanced(ProcessorCount_cmd_lsconf)
+    if(ProcessorCount_cmd_lsconf)
+      execute_process(COMMAND ${ProcessorCount_cmd_lsconf}
+        ERROR_QUIET
+        OUTPUT_STRIP_TRAILING_WHITESPACE
+        OUTPUT_VARIABLE lsconf_output)
+      string(REGEX MATCHALL "Number Of Processors: ([0-9]+)" procs "${lsconf_output}")
+      set(count "${CMAKE_MATCH_1}")
+      #message("ProcessorCount: trying lsconf '${ProcessorCount_cmd_lsconf}'")
+    endif()
+  endif()
+
+  if(NOT count)
+    # QNX (systems with pidin):
+    find_program(ProcessorCount_cmd_pidin pidin)
+    mark_as_advanced(ProcessorCount_cmd_pidin)
+    if(ProcessorCount_cmd_pidin)
+      execute_process(COMMAND ${ProcessorCount_cmd_pidin} info
+        ERROR_QUIET
+        OUTPUT_STRIP_TRAILING_WHITESPACE
+        OUTPUT_VARIABLE pidin_output)
+      string(REGEX MATCHALL "Processor[0-9]+: " procs "${pidin_output}")
+      list(LENGTH procs count)
+      #message("ProcessorCount: trying pidin '${ProcessorCount_cmd_pidin}'")
+    endif()
+  endif()
+
+  if(NOT count)
+    # Sun (systems where psrinfo tool is available)
+    find_program(ProcessorCount_cmd_psrinfo psrinfo PATHS /usr/sbin /sbin)
+    mark_as_advanced(ProcessorCount_cmd_psrinfo)
+    if (ProcessorCount_cmd_psrinfo)
+      execute_process(COMMAND ${ProcessorCount_cmd_psrinfo} -p -v
+        ERROR_QUIET
+        OUTPUT_STRIP_TRAILING_WHITESPACE
+        OUTPUT_VARIABLE psrinfo_output)
+      string(REGEX MATCHALL "has [0-9]+ virtual processor" procs "${psrinfo_output}")
+      set(count "")
+      foreach(proc ${procs})
+        string(REGEX MATCH "has ([0-9]+) virtual" res ${proc})
+        math(EXPR count "${count} + ${CMAKE_MATCH_1}")
+      endforeach()
+      #message("ProcessorCount: trying '${ProcessorCount_cmd_psrinfo}' -p -v")
+    else()
+      # Sun (systems where uname -X emits "NumCPU" in its output):
+      find_program(ProcessorCount_cmd_uname uname)
+      mark_as_advanced(ProcessorCount_cmd_uname)
+      if(ProcessorCount_cmd_uname)
+        execute_process(COMMAND ${ProcessorCount_cmd_uname} -X
+          ERROR_QUIET
+          OUTPUT_STRIP_TRAILING_WHITESPACE
+          OUTPUT_VARIABLE uname_X_output)
+        string(REGEX MATCHALL "NumCPU = ([0-9]+)" procs "${uname_X_output}")
+        set(count "${CMAKE_MATCH_1}")
+        #message("ProcessorCount: trying uname -X '${ProcessorCount_cmd_uname}'")
+      endif()
+    endif()
+  endif()
+
+  # Execute this code when all previously attempted methods return empty
+  # output:
+  #
+  if(NOT count)
+    # Systems with /proc/cpuinfo:
+    set(cpuinfo_file /proc/cpuinfo)
+    if(EXISTS "${cpuinfo_file}")
+      file(STRINGS "${cpuinfo_file}" procs REGEX "^processor.: [0-9]+$")
+      list(LENGTH procs count)
+      #message("ProcessorCount: trying cpuinfo '${cpuinfo_file}'")
+    endif()
+  endif()
+
+  if(NOT count)
+    # Haiku
+    find_program(ProcessorCount_cmd_sysinfo sysinfo)
+    if(ProcessorCount_cmd_sysinfo)
+      execute_process(COMMAND ${ProcessorCount_cmd_sysinfo}
+        ERROR_QUIET
+        OUTPUT_STRIP_TRAILING_WHITESPACE
+        OUTPUT_VARIABLE sysinfo_X_output)
+      string(REGEX MATCHALL "\nCPU #[0-9]+:" procs "\n${sysinfo_X_output}")
+      list(LENGTH procs count)
+      #message("ProcessorCount: trying sysinfo '${ProcessorCount_cmd_sysinfo}'")
+    endif()
+  endif()
+
+  # Since cygwin builds of CMake do not define WIN32 anymore, but they still
+  # run on Windows, and will still have this env var defined:
+  #
+  if(NOT count)
+    set(count "$ENV{NUMBER_OF_PROCESSORS}")
+    #message("ProcessorCount: last fallback, trying environment variable")
+  endif()
+
+  # Ensure an integer return (avoid inadvertently returning an empty string
+  # or an error string)... If it's not a decimal integer, return 0:
+  #
+  if(NOT count MATCHES "^[0-9]+$")
+    set(count 0)
+  endif()
+
+  set(${var} ${count} PARENT_SCOPE)
+endfunction()
diff --git a/share/cmake-3.18/Modules/Qt4ConfigDependentSettings.cmake b/share/cmake-3.22/Modules/Qt4ConfigDependentSettings.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Qt4ConfigDependentSettings.cmake
rename to share/cmake-3.22/Modules/Qt4ConfigDependentSettings.cmake
diff --git a/share/cmake-3.18/Modules/Qt4Macros.cmake b/share/cmake-3.22/Modules/Qt4Macros.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Qt4Macros.cmake
rename to share/cmake-3.22/Modules/Qt4Macros.cmake
diff --git a/share/cmake-3.18/Modules/RepositoryInfo.txt.in b/share/cmake-3.22/Modules/RepositoryInfo.txt.in
similarity index 100%
rename from share/cmake-3.18/Modules/RepositoryInfo.txt.in
rename to share/cmake-3.22/Modules/RepositoryInfo.txt.in
diff --git a/share/cmake-3.18/Modules/SelectLibraryConfigurations.cmake b/share/cmake-3.22/Modules/SelectLibraryConfigurations.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/SelectLibraryConfigurations.cmake
rename to share/cmake-3.22/Modules/SelectLibraryConfigurations.cmake
diff --git a/share/cmake-3.18/Modules/Squish4RunTestCase.bat b/share/cmake-3.22/Modules/Squish4RunTestCase.bat
similarity index 100%
rename from share/cmake-3.18/Modules/Squish4RunTestCase.bat
rename to share/cmake-3.22/Modules/Squish4RunTestCase.bat
diff --git a/share/cmake-3.18/Modules/Squish4RunTestCase.sh b/share/cmake-3.22/Modules/Squish4RunTestCase.sh
similarity index 100%
rename from share/cmake-3.18/Modules/Squish4RunTestCase.sh
rename to share/cmake-3.22/Modules/Squish4RunTestCase.sh
diff --git a/share/cmake-3.18/Modules/SquishRunTestCase.bat b/share/cmake-3.22/Modules/SquishRunTestCase.bat
similarity index 100%
rename from share/cmake-3.18/Modules/SquishRunTestCase.bat
rename to share/cmake-3.22/Modules/SquishRunTestCase.bat
diff --git a/share/cmake-3.18/Modules/SquishRunTestCase.sh b/share/cmake-3.22/Modules/SquishRunTestCase.sh
similarity index 100%
rename from share/cmake-3.18/Modules/SquishRunTestCase.sh
rename to share/cmake-3.22/Modules/SquishRunTestCase.sh
diff --git a/share/cmake-3.18/Modules/SquishTestScript.cmake b/share/cmake-3.22/Modules/SquishTestScript.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/SquishTestScript.cmake
rename to share/cmake-3.22/Modules/SquishTestScript.cmake
diff --git a/share/cmake-3.18/Modules/SystemInformation.cmake b/share/cmake-3.22/Modules/SystemInformation.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/SystemInformation.cmake
rename to share/cmake-3.22/Modules/SystemInformation.cmake
diff --git a/share/cmake-3.18/Modules/SystemInformation.in b/share/cmake-3.22/Modules/SystemInformation.in
similarity index 100%
rename from share/cmake-3.18/Modules/SystemInformation.in
rename to share/cmake-3.22/Modules/SystemInformation.in
diff --git a/share/cmake-3.22/Modules/TestBigEndian.cmake b/share/cmake-3.22/Modules/TestBigEndian.cmake
new file mode 100644
index 0000000..ea8ca73
--- /dev/null
+++ b/share/cmake-3.22/Modules/TestBigEndian.cmake
@@ -0,0 +1,143 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+TestBigEndian
+-------------
+
+.. deprecated:: 3.20
+
+  Supserseded by the :variable:`CMAKE_<LANG>_BYTE_ORDER` variable.
+
+Check if the target architecture is big endian or little endian.
+
+.. command:: test_big_endian
+
+  .. code-block:: cmake
+
+    test_big_endian(<var>)
+
+  Stores in variable ``<var>`` either 1 or 0 indicating whether the
+  target architecture is big or little endian.
+
+#]=======================================================================]
+include_guard()
+
+include(CheckTypeSize)
+
+function(TEST_BIG_ENDIAN VARIABLE)
+  if(";${CMAKE_C_BYTE_ORDER};${CMAKE_CXX_BYTE_ORDER};${CMAKE_CUDA_BYTE_ORDER};${CMAKE_OBJC_BYTE_ORDER};${CMAKE_OBJCXX_BYTE_ORDER};" MATCHES ";(BIG_ENDIAN|LITTLE_ENDIAN);")
+    set(order "${CMAKE_MATCH_1}")
+    if(order STREQUAL "BIG_ENDIAN")
+      set("${VARIABLE}" 1 PARENT_SCOPE)
+    else()
+      set("${VARIABLE}" 0 PARENT_SCOPE)
+    endif()
+  else()
+    __TEST_BIG_ENDIAN_LEGACY_IMPL(is_big)
+    set("${VARIABLE}" "${is_big}" PARENT_SCOPE)
+  endif()
+endfunction()
+
+macro(__TEST_BIG_ENDIAN_LEGACY_IMPL VARIABLE)
+  if(NOT DEFINED HAVE_${VARIABLE})
+    message(CHECK_START "Check if the system is big endian")
+    message(CHECK_START "Searching 16 bit integer")
+
+    if(CMAKE_C_COMPILER_LOADED)
+      set(_test_language "C")
+    elseif(CMAKE_CXX_COMPILER_LOADED)
+      set(_test_language "CXX")
+    else()
+      message(FATAL_ERROR "TEST_BIG_ENDIAN needs either C or CXX language enabled")
+    endif()
+
+    CHECK_TYPE_SIZE("unsigned short" CMAKE_SIZEOF_UNSIGNED_SHORT LANGUAGE ${_test_language})
+    if(CMAKE_SIZEOF_UNSIGNED_SHORT EQUAL 2)
+      message(CHECK_PASS "Using unsigned short")
+      set(CMAKE_16BIT_TYPE "unsigned short")
+    else()
+      CHECK_TYPE_SIZE("unsigned int"   CMAKE_SIZEOF_UNSIGNED_INT LANGUAGE ${_test_language})
+      if(CMAKE_SIZEOF_UNSIGNED_INT)
+        message(CHECK_PASS "Using unsigned int")
+        set(CMAKE_16BIT_TYPE "unsigned int")
+
+      else()
+
+        CHECK_TYPE_SIZE("unsigned long"  CMAKE_SIZEOF_UNSIGNED_LONG LANGUAGE ${_test_language})
+        if(CMAKE_SIZEOF_UNSIGNED_LONG)
+          message(CHECK_PASS "Using unsigned long")
+          set(CMAKE_16BIT_TYPE "unsigned long")
+        else()
+          message(FATAL_ERROR "no suitable type found")
+        endif()
+
+      endif()
+
+    endif()
+
+    if(_test_language STREQUAL "CXX")
+      set(_test_file "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/TestEndianess.cpp")
+    else()
+      set(_test_file "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/TestEndianess.c")
+    endif()
+
+    configure_file("${CMAKE_ROOT}/Modules/TestEndianess.c.in"
+                   ${_test_file}
+                   @ONLY)
+
+     file(READ ${_test_file} TEST_ENDIANESS_FILE_CONTENT)
+
+     try_compile(HAVE_${VARIABLE}
+      "${CMAKE_BINARY_DIR}"
+      ${_test_file}
+      OUTPUT_VARIABLE OUTPUT
+      COPY_FILE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/TestEndianess.bin" )
+
+      if(HAVE_${VARIABLE})
+
+        file(STRINGS "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/TestEndianess.bin"
+            CMAKE_TEST_ENDIANESS_STRINGS_LE LIMIT_COUNT 1 REGEX "THIS IS LITTLE ENDIAN")
+
+        file(STRINGS "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/TestEndianess.bin"
+            CMAKE_TEST_ENDIANESS_STRINGS_BE LIMIT_COUNT 1 REGEX "THIS IS BIG ENDIAN")
+
+        # on mac, if there are universal binaries built both will be true
+        # return the result depending on the machine on which cmake runs
+        if(CMAKE_TEST_ENDIANESS_STRINGS_BE  AND  CMAKE_TEST_ENDIANESS_STRINGS_LE)
+          if(CMAKE_SYSTEM_PROCESSOR MATCHES powerpc)
+            set(CMAKE_TEST_ENDIANESS_STRINGS_BE TRUE)
+            set(CMAKE_TEST_ENDIANESS_STRINGS_LE FALSE)
+          else()
+            set(CMAKE_TEST_ENDIANESS_STRINGS_BE FALSE)
+            set(CMAKE_TEST_ENDIANESS_STRINGS_LE TRUE)
+          endif()
+          message(STATUS "TEST_BIG_ENDIAN found different results, consider setting CMAKE_OSX_ARCHITECTURES or CMAKE_TRY_COMPILE_OSX_ARCHITECTURES to one or no architecture !")
+        endif()
+
+        if(CMAKE_TEST_ENDIANESS_STRINGS_LE)
+          set(${VARIABLE} 0 CACHE INTERNAL "Result of TEST_BIG_ENDIAN" FORCE)
+          message(CHECK_PASS "little endian")
+        endif()
+
+        if(CMAKE_TEST_ENDIANESS_STRINGS_BE)
+          set(${VARIABLE} 1 CACHE INTERNAL "Result of TEST_BIG_ENDIAN" FORCE)
+          message(CHECK_PASS "big endian")
+        endif()
+
+        if(NOT CMAKE_TEST_ENDIANESS_STRINGS_BE  AND  NOT CMAKE_TEST_ENDIANESS_STRINGS_LE)
+          message(CHECK_FAIL "TEST_BIG_ENDIAN found no result!")
+          message(SEND_ERROR "TEST_BIG_ENDIAN found no result!")
+        endif()
+
+        file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+          "Determining if the system is big endian passed with the following output:\n${OUTPUT}\nTestEndianess.c:\n${TEST_ENDIANESS_FILE_CONTENT}\n\n")
+
+      else()
+        message(CHECK_FAIL "failed")
+        file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+          "Determining if the system is big endian failed with the following output:\n${OUTPUT}\nTestEndianess.c:\n${TEST_ENDIANESS_FILE_CONTENT}\n\n")
+        set(${VARIABLE})
+      endif()
+  endif()
+endmacro()
diff --git a/share/cmake-3.18/Modules/TestCXXAcceptsFlag.cmake b/share/cmake-3.22/Modules/TestCXXAcceptsFlag.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/TestCXXAcceptsFlag.cmake
rename to share/cmake-3.22/Modules/TestCXXAcceptsFlag.cmake
diff --git a/share/cmake-3.18/Modules/TestEndianess.c.in b/share/cmake-3.22/Modules/TestEndianess.c.in
similarity index 100%
rename from share/cmake-3.18/Modules/TestEndianess.c.in
rename to share/cmake-3.22/Modules/TestEndianess.c.in
diff --git a/share/cmake-3.18/Modules/TestForANSIForScope.cmake b/share/cmake-3.22/Modules/TestForANSIForScope.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/TestForANSIForScope.cmake
rename to share/cmake-3.22/Modules/TestForANSIForScope.cmake
diff --git a/share/cmake-3.18/Modules/TestForANSIStreamHeaders.cmake b/share/cmake-3.22/Modules/TestForANSIStreamHeaders.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/TestForANSIStreamHeaders.cmake
rename to share/cmake-3.22/Modules/TestForANSIStreamHeaders.cmake
diff --git a/share/cmake-3.18/Modules/TestForANSIStreamHeaders.cxx b/share/cmake-3.22/Modules/TestForANSIStreamHeaders.cxx
similarity index 100%
rename from share/cmake-3.18/Modules/TestForANSIStreamHeaders.cxx
rename to share/cmake-3.22/Modules/TestForANSIStreamHeaders.cxx
diff --git a/share/cmake-3.18/Modules/TestForAnsiForScope.cxx b/share/cmake-3.22/Modules/TestForAnsiForScope.cxx
similarity index 100%
rename from share/cmake-3.18/Modules/TestForAnsiForScope.cxx
rename to share/cmake-3.22/Modules/TestForAnsiForScope.cxx
diff --git a/share/cmake-3.18/Modules/TestForSSTREAM.cmake b/share/cmake-3.22/Modules/TestForSSTREAM.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/TestForSSTREAM.cmake
rename to share/cmake-3.22/Modules/TestForSSTREAM.cmake
diff --git a/share/cmake-3.18/Modules/TestForSSTREAM.cxx b/share/cmake-3.22/Modules/TestForSSTREAM.cxx
similarity index 100%
rename from share/cmake-3.18/Modules/TestForSSTREAM.cxx
rename to share/cmake-3.22/Modules/TestForSSTREAM.cxx
diff --git a/share/cmake-3.18/Modules/TestForSTDNamespace.cmake b/share/cmake-3.22/Modules/TestForSTDNamespace.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/TestForSTDNamespace.cmake
rename to share/cmake-3.22/Modules/TestForSTDNamespace.cmake
diff --git a/share/cmake-3.18/Modules/TestForSTDNamespace.cxx b/share/cmake-3.22/Modules/TestForSTDNamespace.cxx
similarity index 100%
rename from share/cmake-3.18/Modules/TestForSTDNamespace.cxx
rename to share/cmake-3.22/Modules/TestForSTDNamespace.cxx
diff --git a/share/cmake-3.18/Modules/UseEcos.cmake b/share/cmake-3.22/Modules/UseEcos.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/UseEcos.cmake
rename to share/cmake-3.22/Modules/UseEcos.cmake
diff --git a/share/cmake-3.22/Modules/UseJava.cmake b/share/cmake-3.22/Modules/UseJava.cmake
new file mode 100644
index 0000000..ef63ac3
--- /dev/null
+++ b/share/cmake-3.22/Modules/UseJava.cmake
@@ -0,0 +1,1701 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+UseJava
+-------
+
+This file provides support for ``Java``.  It is assumed that
+:module:`FindJava` has already been loaded.  See :module:`FindJava` for
+information on how to load Java into your ``CMake`` project.
+
+Synopsis
+^^^^^^^^
+
+.. parsed-literal::
+
+  `Creating and Installing JARS`_
+    `add_jar`_ (<target_name> [SOURCES] <source1> [<source2>...] ...)
+    `install_jar`_ (<target_name> DESTINATION <destination> [COMPONENT <component>])
+    `install_jni_symlink`_ (<target_name> DESTINATION <destination> [COMPONENT <component>])
+
+  `Header Generation`_
+    `create_javah`_ ((TARGET <target> | GENERATED_FILES <VAR>) CLASSES <class>... ...)
+
+  `Exporting JAR Targets`_
+    `install_jar_exports`_ (TARGETS <jars>... FILE <filename> DESTINATION <destination> ...)
+    `export_jars`_ (TARGETS <jars>... [NAMESPACE <namespace>] FILE <filename>)
+
+  `Finding JARs`_
+    `find_jar`_ (<VAR> NAMES <name1> [<name2>...] [PATHS <path1> [<path2>... ENV <var>]] ...)
+
+  `Creating Java Documentation`_
+    `create_javadoc`_ (<VAR> (PACKAGES <pkg1> [<pkg2>...] | FILES <file1> [<file2>...]) ...)
+
+Creating And Installing JARs
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. _add_jar:
+
+.. command:: add_jar
+
+  Creates a jar file containing java objects and, optionally, resources::
+
+    add_jar(<target_name>
+            [SOURCES] <source1> [<source2>...] [<resource1>...]
+            [RESOURCES NAMESPACE <ns1> <resource1>... [NAMESPACE <nsX> <resourceX>...]... ]
+            [INCLUDE_JARS <jar1> [<jar2>...]]
+            [ENTRY_POINT <entry>]
+            [VERSION <version>]
+            [MANIFEST <manifest>]
+            [OUTPUT_NAME <name>]
+            [OUTPUT_DIR <dir>]
+            [GENERATE_NATIVE_HEADERS <target>
+                                     [DESTINATION (<dir>|INSTALL <dir> [BUILD <dir>])]]
+            )
+
+  This command creates a ``<target_name>.jar``.  It compiles the given
+  ``<source>`` files and adds the given ``<resource>`` files to
+  the jar file.  Source files can be java files or listing files
+  (prefixed by ``@``).  If only resource files are given then just a jar file
+  is created.
+
+  ``SOURCES``
+    Compiles the specified source files and adds the result in the jar file.
+
+    .. versionadded:: 3.4
+      Support for response files, prefixed by ``@``.
+
+  ``RESOURCES``
+    .. versionadded:: 3.21
+
+    Adds the named ``<resource>`` files to the jar by stripping the source file
+    path and placing the file beneath ``<ns>`` within the jar.
+
+    For example::
+
+      RESOURCES NAMESPACE "/com/my/namespace" "a/path/to/resource.txt"
+
+    results in a resource accessible via ``/com/my/namespace/resource.txt``
+    within the jar.
+
+    Resources may be added without adjusting the namespace by adding them to
+    the list of ``SOURCES`` (original behavior), in this case, resource
+    paths must be relative to ``CMAKE_CURRENT_SOURCE_DIR``.  Adding resources
+    without using the ``RESOURCES`` parameter in out of source builds will
+    almost certainly result in confusion.
+
+    .. note::
+
+      Adding resources via the ``SOURCES`` parameter relies upon a hard-coded
+      list of file extensions which are tested to determine whether they
+      compile (e.g. File.java). ``SOURCES`` files which match the extensions
+      are compiled. Files which do not match are treated as resources. To
+      include uncompiled resources matching those file extensions use
+      the ``RESOURCES`` parameter.
+
+  ``INCLUDE_JARS``
+    The list of jars are added to the classpath when compiling the java sources
+    and also to the dependencies of the target. ``INCLUDE_JARS`` also accepts
+    other target names created by ``add_jar()``. For backwards compatibility,
+    jar files listed as sources are ignored (as they have been since the first
+    version of this module).
+
+  ``ENTRY_POINT``
+    Defines an entry point in the jar file.
+
+  ``VERSION``
+    Adds a version to the target output name.
+
+    The following example will create a jar file with the name
+    ``shibboleet-1.2.0.jar`` and will create a symlink ``shibboleet.jar``
+    pointing to the jar with the version information.
+
+    .. code-block:: cmake
+
+      add_jar(shibboleet shibbotleet.java VERSION 1.2.0)
+
+  ``MANIFEST``
+    Defines a custom manifest for the jar.
+
+  ``OUTPUT_NAME``
+    Specify a different output name for the target.
+
+  ``OUTPUT_DIR``
+    Sets the directory where the jar file will be generated. If not specified,
+    :variable:`CMAKE_CURRENT_BINARY_DIR` is used as the output directory.
+
+  ``GENERATE_NATIVE_HEADERS``
+    .. versionadded:: 3.11
+
+    Generates native header files for methods declared as native. These files
+    provide the connective glue that allow your Java and C code to interact.
+    An INTERFACE target will be created for an easy usage of generated files.
+    Sub-option ``DESTINATION`` can be used to specify the output directory for
+    generated header files.
+
+    This option requires, at least, version 1.8 of the JDK.
+
+    For an optimum usage of this option, it is recommended to include module
+    JNI before any call to ``add_jar()``. The produced target for native
+    headers can then be used to compile C/C++ sources with the
+    :command:`target_link_libraries` command.
+
+    .. code-block:: cmake
+
+      find_package(JNI)
+      add_jar(foo foo.java GENERATE_NATIVE_HEADERS foo-native)
+      add_library(bar bar.cpp)
+      target_link_libraries(bar PRIVATE foo-native)
+
+    .. versionadded:: 3.20
+      ``DESTINATION`` sub-option now supports the possibility to specify
+      different output directories for ``BUILD`` and ``INSTALL`` steps. If
+      ``BUILD`` directory is not specified, a default directory will be used.
+
+      To export the interface target generated by ``GENERATE_NATIVE_HEADERS``
+      option, sub-option ``INSTALL`` of ``DESTINATION`` is required:
+
+      .. code-block:: cmake
+
+        add_jar(foo foo.java GENERATE_NATIVE_HEADERS foo-native
+                             DESTINATION INSTALL include)
+        install(TARGETS foo-native EXPORT native)
+        install(DIRECTORY "$<TARGET_PROPERTY:foo-native,NATIVE_HEADERS_DIRECTORY>/"
+                DESTINATION include)
+        install(EXPORT native DESTINATION /to/export NAMESPACE foo)
+
+  Some variables can be set to customize the behavior of ``add_jar()`` as well
+  as the java compiler:
+
+  ``CMAKE_JAVA_COMPILE_FLAGS``
+    Specify additional flags to java compiler.
+
+  ``CMAKE_JAVA_INCLUDE_PATH``
+    Specify additional paths to the class path.
+
+  ``CMAKE_JNI_TARGET``
+    If the target is a JNI library, sets this boolean variable to ``TRUE`` to
+    enable creation of a JNI symbolic link (see also
+    :ref:`install_jni_symlink() <install_jni_symlink>`).
+
+  ``CMAKE_JAR_CLASSES_PREFIX``
+    If multiple jars should be produced from the same java source filetree,
+    to prevent the accumulation of duplicate class files in subsequent jars,
+    set/reset ``CMAKE_JAR_CLASSES_PREFIX`` prior to calling the ``add_jar()``:
+
+    .. code-block:: cmake
+
+      set(CMAKE_JAR_CLASSES_PREFIX com/redhat/foo)
+      add_jar(foo foo.java)
+
+      set(CMAKE_JAR_CLASSES_PREFIX com/redhat/bar)
+      add_jar(bar bar.java)
+
+  The ``add_jar()`` function sets the following target properties on
+  ``<target_name>``:
+
+  ``INSTALL_FILES``
+    The files which should be installed.  This is used by
+    :ref:`install_jar() <install_jar>`.
+  ``JNI_SYMLINK``
+    The JNI symlink which should be installed.  This is used by
+    :ref:`install_jni_symlink() <install_jni_symlink>`.
+  ``JAR_FILE``
+    The location of the jar file so that you can include it.
+  ``CLASSDIR``
+    The directory where the class files can be found.  For example to use them
+    with ``javah``.
+  ``NATIVE_HEADERS_DIRECTORY``
+    .. versionadded:: 3.20
+
+    The directory where native headers are generated. Defined when option
+    ``GENERATE_NATIVE_HEADERS`` is specified.
+
+.. _install_jar:
+
+.. command:: install_jar
+
+  This command installs the jar file to the given destination::
+
+   install_jar(<target_name> <destination>)
+   install_jar(<target_name> DESTINATION <destination> [COMPONENT <component>])
+
+  This command installs the ``<target_name>`` file to the given
+  ``<destination>``.  It should be called in the same scope as
+  :ref:`add_jar() <add_jar>` or it will fail.
+
+  .. versionadded:: 3.4
+    The second signature with ``DESTINATION`` and ``COMPONENT`` options.
+
+  ``DESTINATION``
+    Specify the directory on disk to which a file will be installed.
+
+  ``COMPONENT``
+    Specify an installation component name with which the install rule is
+    associated, such as "runtime" or "development".
+
+  The ``install_jar()`` command sets the following target properties
+  on ``<target_name>``:
+
+  ``INSTALL_DESTINATION``
+    Holds the ``<destination>`` as described above, and is used by
+    :ref:`install_jar_exports() <install_jar_exports>`.
+
+.. _install_jni_symlink:
+
+.. command:: install_jni_symlink
+
+  Installs JNI symlinks for target generated by :ref:`add_jar() <add_jar>`::
+
+   install_jni_symlink(<target_name> <destination>)
+   install_jni_symlink(<target_name> DESTINATION <destination> [COMPONENT <component>])
+
+  This command installs the ``<target_name>`` JNI symlinks to the given
+  ``<destination>``.  It should be called in the same scope as
+  :ref:`add_jar() <add_jar>` or it will fail.
+
+  .. versionadded:: 3.4
+    The second signature with ``DESTINATION`` and ``COMPONENT`` options.
+
+  ``DESTINATION``
+    Specify the directory on disk to which a file will be installed.
+
+  ``COMPONENT``
+    Specify an installation component name with which the install rule is
+    associated, such as "runtime" or "development".
+
+  Utilize the following commands to create a JNI symbolic link:
+
+  .. code-block:: cmake
+
+    set(CMAKE_JNI_TARGET TRUE)
+    add_jar(shibboleet shibbotleet.java VERSION 1.2.0)
+    install_jar(shibboleet ${LIB_INSTALL_DIR}/shibboleet)
+    install_jni_symlink(shibboleet ${JAVA_LIB_INSTALL_DIR})
+
+Header Generation
+^^^^^^^^^^^^^^^^^
+
+.. _create_javah:
+
+.. command:: create_javah
+
+  .. versionadded:: 3.4
+
+  Generates C header files for java classes::
+
+   create_javah(TARGET <target> | GENERATED_FILES <VAR>
+                CLASSES <class>...
+                [CLASSPATH <classpath>...]
+                [DEPENDS <depend>...]
+                [OUTPUT_NAME <path>|OUTPUT_DIR <path>]
+                )
+
+  .. deprecated:: 3.11
+    This command will no longer be supported starting with version 10 of the JDK
+    due to the `suppression of javah tool <http://openjdk.java.net/jeps/313>`_.
+    The :ref:`add_jar(GENERATE_NATIVE_HEADERS) <add_jar>` command should be
+    used instead.
+
+  Create C header files from java classes. These files provide the connective
+  glue that allow your Java and C code to interact.
+
+  There are two main signatures for ``create_javah()``.  The first signature
+  returns generated files through variable specified by the ``GENERATED_FILES``
+  option.  For example:
+
+  .. code-block:: cmake
+
+    create_javah(GENERATED_FILES files_headers
+      CLASSES org.cmake.HelloWorld
+      CLASSPATH hello.jar
+    )
+
+  The second signature for ``create_javah()`` creates a target which
+  encapsulates header files generation. E.g.
+
+  .. code-block:: cmake
+
+    create_javah(TARGET target_headers
+      CLASSES org.cmake.HelloWorld
+      CLASSPATH hello.jar
+    )
+
+  Both signatures share same options.
+
+  ``CLASSES``
+    Specifies Java classes used to generate headers.
+
+  ``CLASSPATH``
+    Specifies various paths to look up classes. Here ``.class`` files, jar
+    files or targets created by command add_jar can be used.
+
+  ``DEPENDS``
+    Targets on which the javah target depends.
+
+  ``OUTPUT_NAME``
+    Concatenates the resulting header files for all the classes listed by
+    option ``CLASSES`` into ``<path>``.  Same behavior as option ``-o`` of
+    ``javah`` tool.
+
+  ``OUTPUT_DIR``
+    Sets the directory where the header files will be generated.  Same behavior
+    as option ``-d`` of ``javah`` tool.  If not specified,
+    :variable:`CMAKE_CURRENT_BINARY_DIR` is used as the output directory.
+
+Exporting JAR Targets
+^^^^^^^^^^^^^^^^^^^^^
+
+.. _install_jar_exports:
+
+.. command:: install_jar_exports
+
+  .. versionadded:: 3.7
+
+  Installs a target export file::
+
+   install_jar_exports(TARGETS <jars>...
+                       [NAMESPACE <namespace>]
+                       FILE <filename>
+                       DESTINATION <destination> [COMPONENT <component>])
+
+  This command installs a target export file ``<filename>`` for the named jar
+  targets to the given ``<destination>`` directory.  Its function is similar to
+  that of :command:`install(EXPORT)`.
+
+  ``TARGETS``
+    List of targets created by :ref:`add_jar() <add_jar>` command.
+
+  ``NAMESPACE``
+    .. versionadded:: 3.9
+
+    The ``<namespace>`` value will be prepend to the target names as they are
+    written to the import file.
+
+  ``FILE``
+    Specify name of the export file.
+
+
+  ``DESTINATION``
+    Specify the directory on disk to which a file will be installed.
+
+  ``COMPONENT``
+    Specify an installation component name with which the install rule is
+    associated, such as "runtime" or "development".
+
+.. _export_jars:
+
+.. command:: export_jars
+
+  .. versionadded:: 3.7
+
+  Writes a target export file::
+
+   export_jars(TARGETS <jars>...
+               [NAMESPACE <namespace>]
+               FILE <filename>)
+
+  This command writes a target export file ``<filename>`` for the named ``<jars>``
+  targets.  Its function is similar to that of :command:`export`.
+
+  ``TARGETS``
+    List of targets created by :ref:`add_jar() <add_jar>` command.
+
+  ``NAMESPACE``
+    .. versionadded:: 3.9
+
+    The ``<namespace>`` value will be prepend to the target names as they are
+    written to the import file.
+
+  ``FILE``
+    Specify name of the export file.
+
+Finding JARs
+^^^^^^^^^^^^
+
+.. _find_jar:
+
+.. command:: find_jar
+
+  Finds the specified jar file::
+
+    find_jar(<VAR>
+             <name> | NAMES <name1> [<name2>...]
+             [PATHS <path1> [<path2>... ENV <var>]]
+             [VERSIONS <version1> [<version2>]]
+             [DOC "cache documentation string"]
+            )
+
+  This command is used to find a full path to the named jar.  A cache
+  entry named by ``<VAR>`` is created to store the result of this command.
+  If the full path to a jar is found the result is stored in the
+  variable and the search will not repeated unless the variable is
+  cleared.  If nothing is found, the result will be ``<VAR>-NOTFOUND``, and
+  the search will be attempted again next time ``find_jar()`` is invoked with
+  the same variable.
+
+  ``NAMES``
+    Specify one or more possible names for the jar file.
+
+  ``PATHS``
+    Specify directories to search in addition to the default locations.
+    The ``ENV`` var sub-option reads paths from a system environment variable.
+
+  ``VERSIONS``
+    Specify jar versions.
+
+  ``DOC``
+    Specify the documentation string for the ``<VAR>`` cache entry.
+
+Creating Java Documentation
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. _create_javadoc:
+
+.. command:: create_javadoc
+
+  Creates java documentation based on files and packages::
+
+    create_javadoc(<VAR>
+                   (PACKAGES <pkg1> [<pkg2>...] | FILES <file1> [<file2>...])
+                   [SOURCEPATH <sourcepath>]
+                   [CLASSPATH <classpath>]
+                   [INSTALLPATH <install path>]
+                   [DOCTITLE <the documentation title>]
+                   [WINDOWTITLE <the title of the document>]
+                   [AUTHOR (TRUE|FALSE)]
+                   [USE (TRUE|FALSE)]
+                   [VERSION (TRUE|FALSE)]
+                   )
+
+  The ``create_javadoc()`` command can be used to create java documentation.
+  There are two main signatures for ``create_javadoc()``.
+
+  The first signature works with package names on a path with source files:
+
+  .. code-block:: cmake
+
+    create_javadoc(my_example_doc
+                   PACKAGES com.example.foo com.example.bar
+                   SOURCEPATH "${CMAKE_CURRENT_SOURCE_DIR}"
+                   CLASSPATH ${CMAKE_JAVA_INCLUDE_PATH}
+                   WINDOWTITLE "My example"
+                   DOCTITLE "<h1>My example</h1>"
+                   AUTHOR TRUE
+                   USE TRUE
+                   VERSION TRUE
+                  )
+
+  The second signature for ``create_javadoc()`` works on a given list of files:
+
+  .. code-block:: cmake
+
+    create_javadoc(my_example_doc
+                   FILES java/A.java java/B.java
+                   CLASSPATH ${CMAKE_JAVA_INCLUDE_PATH}
+                   WINDOWTITLE "My example"
+                   DOCTITLE "<h1>My example</h1>"
+                   AUTHOR TRUE
+                   USE TRUE
+                   VERSION TRUE
+                  )
+
+  Both signatures share most of the options. For more details please read the
+  javadoc manpage.
+
+  ``PACKAGES``
+    Specify java packages.
+
+  ``FILES``
+    Specify java source files. If relative paths are specified, they are
+    relative to :variable:`CMAKE_CURRENT_SOURCE_DIR`.
+
+  ``SOURCEPATH``
+    Specify the directory where to look for packages. By default,
+    :variable:`CMAKE_CURRENT_SOURCE_DIR` directory is used.
+
+  ``CLASSPATH``
+    Specify where to find user class files. Same behavior as option
+    ``-classpath`` of ``javadoc`` tool.
+
+  ``INSTALLPATH``
+    Specify where to install the java documentation. If you specified, the
+    documentation will be installed to
+    ``${CMAKE_INSTALL_PREFIX}/share/javadoc/<VAR>``.
+
+  ``DOCTITLE``
+    Specify the title to place near the top of the overview summary file.
+    Same behavior as option ``-doctitle`` of ``javadoc`` tool.
+
+  ``WINDOWTITLE``
+    Specify the title to be placed in the HTML ``<title>`` tag. Same behavior
+    as option ``-windowtitle`` of ``javadoc`` tool.
+
+  ``AUTHOR``
+    When value ``TRUE`` is specified, includes the ``@author`` text in the
+    generated docs. Same behavior as option  ``-author`` of ``javadoc`` tool.
+
+  ``USE``
+    When value ``TRUE`` is specified, creates class and package usage pages.
+    Includes one Use page for each documented class and package. Same behavior
+    as option ``-use`` of ``javadoc`` tool.
+
+  ``VERSION``
+    When value ``TRUE`` is specified, includes the version text in the
+    generated docs. Same behavior as option ``-version`` of ``javadoc`` tool.
+#]=======================================================================]
+
+function (__java_copy_file src dest comment)
+    add_custom_command(
+        OUTPUT  ${dest}
+        COMMAND ${CMAKE_COMMAND} -E copy_if_different
+        ARGS    ${src}
+                ${dest}
+        DEPENDS ${src}
+        COMMENT ${comment}
+        VERBATIM
+        )
+endfunction ()
+
+function(__java_lcat VAR)
+    foreach(_line IN LISTS ARGN)
+        string(APPEND ${VAR} "${_line}\n")
+    endforeach()
+
+    set(${VAR} "${${VAR}}" PARENT_SCOPE)
+endfunction()
+
+function(__java_export_jar VAR TARGET PATH)
+    get_target_property(_jarpath ${TARGET} JAR_FILE)
+    get_filename_component(_jarname ${_jarpath} NAME)
+    set(_target "${_jar_NAMESPACE}${TARGET}")
+    __java_lcat(${VAR}
+      "# Create imported target ${_target}"
+      "add_library(${_target} IMPORTED STATIC)"
+      "set_target_properties(${_target} PROPERTIES"
+      "  IMPORTED_LOCATION \"${PATH}/${_jarname}\""
+      "  JAR_FILE \"${PATH}/${_jarname}\")"
+      ""
+    )
+    set(${VAR} "${${VAR}}" PARENT_SCOPE)
+endfunction()
+
+function(__java_copy_resource_namespaces VAR DEST JAVA_RESOURCE_FILES JAVA_RESOURCE_FILES_RELATIVE)
+
+    set(_ns_ID "")
+    set(_ns_VAL "")
+
+    foreach(_item IN LISTS VAR)
+        if(NOT _ns_ID)
+            if(NOT _item STREQUAL "NAMESPACE")
+                message(FATAL_ERROR "UseJava: Expecting \"NAMESPACE\", got\t\"${_item}\"")
+                return()
+            endif()
+        endif()
+
+        if(_item STREQUAL "NAMESPACE")
+            set(_ns_VAL "")               # Prepare for next namespace
+            set(_ns_ID "${_item}")
+            continue()
+        endif()
+
+        if( NOT _ns_VAL)
+            # we're expecting the next token to be a namespace value
+            # whatever it is, we're treating it like a namespace
+            set(_ns_VAL "${_item}")
+            continue()
+        endif()
+
+        if(_ns_ID AND _ns_VAL)
+            # We're expecting a file name, check to see if we got one
+            cmake_path(ABSOLUTE_PATH _item OUTPUT_VARIABLE _test_file_name)
+            if (NOT EXISTS "${_test_file_name}")
+                message(FATAL_ERROR "UseJava: File does not exist:\t${_item}")
+                return()
+            endif()
+        endif()
+
+        cmake_path(ABSOLUTE_PATH _item OUTPUT_VARIABLE _abs_file_name)
+        cmake_path(GET _item FILENAME _resource_file_name)
+        set(_dest_resource_file_name "${_ns_VAL}/${_resource_file_name}" )
+
+        __java_copy_file( ${_abs_file_name}
+                          ${DEST}/${_dest_resource_file_name}
+                          "Copying ${_item} to the build directory")
+
+        list(APPEND RESOURCE_FILES_LIST           ${DEST}/${_dest_resource_file_name})
+        list(APPEND RELATIVE_RESOURCE_FILES_LIST  ${_dest_resource_file_name})
+
+    endforeach()
+
+    set(${JAVA_RESOURCE_FILES} "${RESOURCE_FILES_LIST}" PARENT_SCOPE)
+    set(${JAVA_RESOURCE_FILES_RELATIVE} "${RELATIVE_RESOURCE_FILES_LIST}" PARENT_SCOPE)
+endfunction()
+
+# define helper scripts
+set(_JAVA_EXPORT_TARGETS_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/UseJava/javaTargets.cmake.in)
+set(_JAVA_SYMLINK_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/UseJava/Symlinks.cmake)
+
+if (CMAKE_HOST_WIN32 AND NOT CYGWIN AND CMAKE_HOST_SYSTEM_NAME MATCHES "Windows")
+    set(_UseJava_PATH_SEP "$<SEMICOLON>")
+else ()
+    set(_UseJava_PATH_SEP ":")
+endif()
+
+function(add_jar _TARGET_NAME)
+
+    set(options)  # currently there are no zero value args (aka: options)
+    set(oneValueArgs "ENTRY_POINT;MANIFEST;OUTPUT_DIR;;OUTPUT_NAME;VERSION" )
+    set(multiValueArgs "GENERATE_NATIVE_HEADERS;INCLUDE_JARS;RESOURCES;SOURCES" )
+
+    cmake_parse_arguments(PARSE_ARGV 1 _add_jar
+                    "${options}"
+                    "${oneValueArgs}"
+                    "${multiValueArgs}" )
+
+    # In CMake < 2.8.12, add_jar used variables which were set prior to calling
+    # add_jar for customizing the behavior of add_jar. In order to be backwards
+    # compatible, check if any of those variables are set, and use them to
+    # initialize values of the named arguments. (Giving the corresponding named
+    # argument will override the value set here.)
+    #
+    # New features should use named arguments only.
+    if(NOT DEFINED _add_jar_VERSION AND DEFINED CMAKE_JAVA_TARGET_VERSION)
+        set(_add_jar_VERSION "${CMAKE_JAVA_TARGET_VERSION}")
+    endif()
+    if(NOT DEFINED _add_jar_OUTPUT_DIR AND DEFINED CMAKE_JAVA_TARGET_OUTPUT_DIR)
+        set(_add_jar_OUTPUT_DIR "${CMAKE_JAVA_TARGET_OUTPUT_DIR}")
+    endif()
+    if(NOT DEFINED _add_jar_OUTPUT_NAME AND DEFINED CMAKE_JAVA_TARGET_OUTPUT_NAME)
+        set(_add_jar_OUTPUT_NAME "${CMAKE_JAVA_TARGET_OUTPUT_NAME}")
+        # reset
+        set(CMAKE_JAVA_TARGET_OUTPUT_NAME)
+    endif()
+    if(NOT DEFINED _add_jar_ENTRY_POINT AND DEFINED CMAKE_JAVA_JAR_ENTRY_POINT)
+        set(_add_jar_ENTRY_POINT "${CMAKE_JAVA_JAR_ENTRY_POINT}")
+    endif()
+
+    # This *should* still work if <resources1>... are included without a
+    # named RESOURCES argument.  In that case, the old behavior of potentially
+    # misplacing the within the Jar will behave as previously (incorrectly)
+    set(_JAVA_SOURCE_FILES ${_add_jar_SOURCES} ${_add_jar_UNPARSED_ARGUMENTS})
+
+    if (NOT DEFINED _add_jar_OUTPUT_DIR)
+        set(_add_jar_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
+    else()
+        get_filename_component(_add_jar_OUTPUT_DIR ${_add_jar_OUTPUT_DIR} ABSOLUTE)
+    endif()
+    # ensure output directory exists
+    file (MAKE_DIRECTORY "${_add_jar_OUTPUT_DIR}")
+
+    if (_add_jar_ENTRY_POINT)
+        set(_ENTRY_POINT_OPTION e)
+        set(_ENTRY_POINT_VALUE ${_add_jar_ENTRY_POINT})
+    endif ()
+
+    if (_add_jar_MANIFEST)
+        set(_MANIFEST_OPTION m)
+        get_filename_component (_MANIFEST_VALUE "${_add_jar_MANIFEST}" ABSOLUTE)
+    endif ()
+
+    unset (_GENERATE_NATIVE_HEADERS)
+    if (_add_jar_GENERATE_NATIVE_HEADERS)
+      # Raise an error if JDK version is less than 1.8 because javac -h is not supported
+      # by earlier versions.
+      if (Java_VERSION VERSION_LESS 1.8)
+        message (FATAL_ERROR "ADD_JAR: GENERATE_NATIVE_HEADERS is not supported with this version of Java.")
+      endif()
+
+      unset (_GENERATE_NATIVE_HEADERS_OUTPUT_DESC)
+
+      cmake_parse_arguments (_add_jar_GENERATE_NATIVE_HEADERS "" "" "DESTINATION" ${_add_jar_GENERATE_NATIVE_HEADERS})
+      if (NOT _add_jar_GENERATE_NATIVE_HEADERS_UNPARSED_ARGUMENTS)
+        message (FATAL_ERROR "ADD_JAR: GENERATE_NATIVE_HEADERS: missing required argument.")
+      endif()
+      list (LENGTH _add_jar_GENERATE_NATIVE_HEADERS_UNPARSED_ARGUMENTS length)
+      if (length GREATER 1)
+        list (REMOVE_AT _add_jar_GENERATE_NATIVE_HEADERS_UNPARSED_ARGUMENTS 0)
+        message (FATAL_ERROR "ADD_JAR: GENERATE_NATIVE_HEADERS: ${_add_jar_GENERATE_NATIVE_HEADERS_UNPARSED_ARGUMENTS}: unexpected argument(s).")
+      endif()
+      if (NOT _add_jar_GENERATE_NATIVE_HEADERS_DESTINATION)
+        set (_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${_TARGET_NAME}.dir/native_headers")
+      else()
+        list (LENGTH _add_jar_GENERATE_NATIVE_HEADERS_DESTINATION length)
+        if (NOT length EQUAL 1)
+          cmake_parse_arguments (_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION "" "BUILD;INSTALL" "" "${_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION}")
+          if (_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION_UNPARSED_ARGUMENTS)
+            message (FATAL_ERROR "ADD_JAR: GENERATE_NATIVE_HEADERS: DESTINATION: ${_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION_UNPARSED_ARGUMENTS}: unexpected argument(s).")
+          endif()
+          if (NOT _add_jar_GENERATE_NATIVE_HEADERS_DESTINATION_INSTALL)
+            message (FATAL_ERROR "ADD_JAR: GENERATE_NATIVE_HEADERS: DESTINATION: INSTALL sub-option is required.")
+          endif()
+          if (NOT _add_jar_GENERATE_NATIVE_HEADERS_DESTINATION_BUILD)
+            set(_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION_BUILD "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${_TARGET_NAME}.dir/native_headers")
+          endif()
+          set(_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION "${_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION_BUILD}")
+          set(_GENERATE_NATIVE_HEADERS_OUTPUT_DESC "$<BUILD_INTERFACE:${_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION_BUILD}>" "$<INSTALL_INTERFACE:${_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION_INSTALL}>")
+        endif()
+      endif()
+
+      set (_GENERATE_NATIVE_HEADERS_TARGET ${_add_jar_GENERATE_NATIVE_HEADERS_UNPARSED_ARGUMENTS})
+      set (_GENERATE_NATIVE_HEADERS_OUTPUT_DIR "${_add_jar_GENERATE_NATIVE_HEADERS_DESTINATION}")
+      set (_GENERATE_NATIVE_HEADERS -h "${_GENERATE_NATIVE_HEADERS_OUTPUT_DIR}")
+      if(NOT _GENERATE_NATIVE_HEADERS_OUTPUT_DESC)
+        set(_GENERATE_NATIVE_HEADERS_OUTPUT_DESC "${_GENERATE_NATIVE_HEADERS_OUTPUT_DIR}")
+      endif()
+    endif()
+
+    if (LIBRARY_OUTPUT_PATH)
+        set(CMAKE_JAVA_LIBRARY_OUTPUT_PATH ${LIBRARY_OUTPUT_PATH})
+    else ()
+        set(CMAKE_JAVA_LIBRARY_OUTPUT_PATH ${_add_jar_OUTPUT_DIR})
+    endif ()
+
+    set(CMAKE_JAVA_INCLUDE_PATH
+        ${CMAKE_JAVA_INCLUDE_PATH}
+        ${CMAKE_CURRENT_SOURCE_DIR}
+        ${CMAKE_JAVA_OBJECT_OUTPUT_PATH}
+        ${CMAKE_JAVA_LIBRARY_OUTPUT_PATH}
+    )
+
+    foreach (JAVA_INCLUDE_DIR IN LISTS CMAKE_JAVA_INCLUDE_PATH)
+       string(APPEND CMAKE_JAVA_INCLUDE_PATH_FINAL "${_UseJava_PATH_SEP}${JAVA_INCLUDE_DIR}")
+    endforeach()
+
+    set(CMAKE_JAVA_CLASS_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${_TARGET_NAME}.dir")
+
+    set(_JAVA_TARGET_OUTPUT_NAME "${_TARGET_NAME}.jar")
+    if (_add_jar_OUTPUT_NAME AND _add_jar_VERSION)
+        set(_JAVA_TARGET_OUTPUT_NAME "${_add_jar_OUTPUT_NAME}-${_add_jar_VERSION}.jar")
+        set(_JAVA_TARGET_OUTPUT_LINK "${_add_jar_OUTPUT_NAME}.jar")
+    elseif (_add_jar_VERSION)
+        set(_JAVA_TARGET_OUTPUT_NAME "${_TARGET_NAME}-${_add_jar_VERSION}.jar")
+        set(_JAVA_TARGET_OUTPUT_LINK "${_TARGET_NAME}.jar")
+    elseif (_add_jar_OUTPUT_NAME)
+        set(_JAVA_TARGET_OUTPUT_NAME "${_add_jar_OUTPUT_NAME}.jar")
+    endif ()
+
+    set(_JAVA_CLASS_FILES)
+    set(_JAVA_COMPILE_FILES)
+    set(_JAVA_COMPILE_FILELISTS)
+    set(_JAVA_DEPENDS)
+    set(_JAVA_COMPILE_DEPENDS)
+    set(_JAVA_RESOURCE_FILES)
+    set(_JAVA_RESOURCE_FILES_RELATIVE)
+    foreach(_JAVA_SOURCE_FILE IN LISTS _JAVA_SOURCE_FILES)
+        get_filename_component(_JAVA_EXT ${_JAVA_SOURCE_FILE} EXT)
+        get_filename_component(_JAVA_FILE ${_JAVA_SOURCE_FILE} NAME_WE)
+        get_filename_component(_JAVA_PATH ${_JAVA_SOURCE_FILE} PATH)
+        get_filename_component(_JAVA_FULL ${_JAVA_SOURCE_FILE} ABSOLUTE)
+
+        if (_JAVA_SOURCE_FILE MATCHES "^@(.+)$")
+            get_filename_component(_JAVA_FULL ${CMAKE_MATCH_1} ABSOLUTE)
+            list(APPEND _JAVA_COMPILE_FILELISTS ${_JAVA_FULL})
+
+        elseif (_JAVA_EXT MATCHES ".java")
+            file(RELATIVE_PATH _JAVA_REL_BINARY_PATH ${CMAKE_CURRENT_BINARY_DIR} ${_JAVA_FULL})
+            file(RELATIVE_PATH _JAVA_REL_SOURCE_PATH ${CMAKE_CURRENT_SOURCE_DIR} ${_JAVA_FULL})
+            string(LENGTH ${_JAVA_REL_BINARY_PATH} _BIN_LEN)
+            string(LENGTH ${_JAVA_REL_SOURCE_PATH} _SRC_LEN)
+            if (_BIN_LEN LESS _SRC_LEN)
+                set(_JAVA_REL_PATH ${_JAVA_REL_BINARY_PATH})
+            else ()
+                set(_JAVA_REL_PATH ${_JAVA_REL_SOURCE_PATH})
+            endif ()
+            get_filename_component(_JAVA_REL_PATH ${_JAVA_REL_PATH} PATH)
+
+            list(APPEND _JAVA_COMPILE_FILES ${_JAVA_SOURCE_FILE})
+            set(_JAVA_CLASS_FILE "${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${_JAVA_REL_PATH}/${_JAVA_FILE}.class")
+            set(_JAVA_CLASS_FILES ${_JAVA_CLASS_FILES} ${_JAVA_CLASS_FILE})
+
+        elseif (_JAVA_EXT MATCHES ".jar"
+                OR _JAVA_EXT MATCHES ".war"
+                OR _JAVA_EXT MATCHES ".ear"
+                OR _JAVA_EXT MATCHES ".sar")
+            # Ignored for backward compatibility
+
+        elseif (_JAVA_EXT STREQUAL "")
+            list(APPEND CMAKE_JAVA_INCLUDE_PATH ${JAVA_JAR_TARGET_${_JAVA_SOURCE_FILE}} ${JAVA_JAR_TARGET_${_JAVA_SOURCE_FILE}_CLASSPATH})
+            list(APPEND _JAVA_DEPENDS ${JAVA_JAR_TARGET_${_JAVA_SOURCE_FILE}})
+
+        else ()
+            __java_copy_file(${CMAKE_CURRENT_SOURCE_DIR}/${_JAVA_SOURCE_FILE}
+                             ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${_JAVA_SOURCE_FILE}
+                             "Copying ${_JAVA_SOURCE_FILE} to the build directory")
+            list(APPEND _JAVA_RESOURCE_FILES ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${_JAVA_SOURCE_FILE})
+            list(APPEND _JAVA_RESOURCE_FILES_RELATIVE ${_JAVA_SOURCE_FILE})
+        endif ()
+    endforeach()
+
+    if(_add_jar_RESOURCES)         # Process RESOURCES if it exists
+        __java_copy_resource_namespaces("${_add_jar_RESOURCES}"
+                                        ${CMAKE_JAVA_CLASS_OUTPUT_PATH}
+                                        _JAVA_RESOURCE_FILES
+                                        _JAVA_RESOURCE_FILES_RELATIVE)
+    endif()
+
+    foreach(_JAVA_INCLUDE_JAR IN LISTS _add_jar_INCLUDE_JARS)
+        if (TARGET ${_JAVA_INCLUDE_JAR})
+            get_target_property(_JAVA_JAR_PATH ${_JAVA_INCLUDE_JAR} JAR_FILE)
+            if (_JAVA_JAR_PATH)
+                string(APPEND CMAKE_JAVA_INCLUDE_PATH_FINAL "${_UseJava_PATH_SEP}${_JAVA_JAR_PATH}")
+                list(APPEND CMAKE_JAVA_INCLUDE_PATH ${_JAVA_JAR_PATH})
+                list(APPEND _JAVA_DEPENDS ${_JAVA_INCLUDE_JAR})
+                list(APPEND _JAVA_COMPILE_DEPENDS ${_JAVA_JAR_PATH})
+            else ()
+                message(SEND_ERROR "add_jar: INCLUDE_JARS target ${_JAVA_INCLUDE_JAR} is not a jar")
+            endif ()
+        else ()
+            string(APPEND CMAKE_JAVA_INCLUDE_PATH_FINAL "${_UseJava_PATH_SEP}${_JAVA_INCLUDE_JAR}")
+            list(APPEND CMAKE_JAVA_INCLUDE_PATH "${_JAVA_INCLUDE_JAR}")
+            list(APPEND _JAVA_DEPENDS "${_JAVA_INCLUDE_JAR}")
+            list(APPEND _JAVA_COMPILE_DEPENDS "${_JAVA_INCLUDE_JAR}")
+        endif ()
+    endforeach()
+
+    if (_JAVA_COMPILE_FILES OR _JAVA_COMPILE_FILELISTS)
+        set (_JAVA_SOURCES_FILELISTS)
+
+        if (_JAVA_COMPILE_FILES)
+            # Create the list of files to compile.
+            set(_JAVA_SOURCES_FILE ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_sources)
+            string(REPLACE ";" "\"\n\"" _JAVA_COMPILE_STRING "\"${_JAVA_COMPILE_FILES}\"")
+            set(CMAKE_CONFIGURABLE_FILE_CONTENT "${_JAVA_COMPILE_STRING}")
+            configure_file("${CMAKE_ROOT}/Modules/CMakeConfigurableFile.in"
+              "${_JAVA_SOURCES_FILE}" @ONLY)
+            unset(CMAKE_CONFIGURABLE_FILE_CONTENT)
+            list (APPEND _JAVA_SOURCES_FILELISTS "@${_JAVA_SOURCES_FILE}")
+        endif()
+        if (_JAVA_COMPILE_FILELISTS)
+            foreach (_JAVA_FILELIST IN LISTS _JAVA_COMPILE_FILELISTS)
+                list (APPEND _JAVA_SOURCES_FILELISTS "@${_JAVA_FILELIST}")
+            endforeach()
+        endif()
+
+        # Compile the java files and create a list of class files
+        add_custom_command(
+            # NOTE: this command generates an artificial dependency file
+            OUTPUT ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME}
+            COMMAND ${CMAKE_COMMAND}
+                -DCMAKE_JAVA_CLASS_OUTPUT_PATH=${CMAKE_JAVA_CLASS_OUTPUT_PATH}
+                -DCMAKE_JAR_CLASSES_PREFIX=${CMAKE_JAR_CLASSES_PREFIX}
+                -P ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/UseJava/ClearClassFiles.cmake
+            COMMAND ${Java_JAVAC_EXECUTABLE}
+                ${CMAKE_JAVA_COMPILE_FLAGS}
+                -classpath "${CMAKE_JAVA_INCLUDE_PATH_FINAL}"
+                -d ${CMAKE_JAVA_CLASS_OUTPUT_PATH}
+                ${_GENERATE_NATIVE_HEADERS}
+                ${_JAVA_SOURCES_FILELISTS}
+            COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME}
+            DEPENDS ${_JAVA_COMPILE_FILES} ${_JAVA_COMPILE_FILELISTS} ${_JAVA_COMPILE_DEPENDS} ${_JAVA_SOURCES_FILE}
+            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+            COMMENT "Building Java objects for ${_TARGET_NAME}.jar"
+            VERBATIM
+        )
+        add_custom_command(
+            OUTPUT ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist
+            COMMAND ${CMAKE_COMMAND}
+                -DCMAKE_JAVA_CLASS_OUTPUT_PATH=${CMAKE_JAVA_CLASS_OUTPUT_PATH}
+                -DCMAKE_JAR_CLASSES_PREFIX=${CMAKE_JAR_CLASSES_PREFIX}
+                -P ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/UseJava/ClassFilelist.cmake
+            DEPENDS ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME}
+            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+            VERBATIM
+        )
+    else ()
+        # create an empty java_class_filelist
+        if (NOT EXISTS ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist)
+            file(WRITE ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist "")
+        endif()
+    endif ()
+
+    # create the jar file
+    set(_JAVA_JAR_OUTPUT_PATH
+      "${_add_jar_OUTPUT_DIR}/${_JAVA_TARGET_OUTPUT_NAME}")
+    if (CMAKE_JNI_TARGET)
+        add_custom_command(
+            OUTPUT ${_JAVA_JAR_OUTPUT_PATH}
+            COMMAND ${Java_JAR_EXECUTABLE}
+                -cf${_ENTRY_POINT_OPTION}${_MANIFEST_OPTION} ${_JAVA_JAR_OUTPUT_PATH} ${_ENTRY_POINT_VALUE} ${_MANIFEST_VALUE}
+                ${_JAVA_RESOURCE_FILES_RELATIVE} @java_class_filelist
+            COMMAND ${CMAKE_COMMAND}
+                -D_JAVA_TARGET_DIR=${_add_jar_OUTPUT_DIR}
+                -D_JAVA_TARGET_OUTPUT_NAME=${_JAVA_TARGET_OUTPUT_NAME}
+                -D_JAVA_TARGET_OUTPUT_LINK=${_JAVA_TARGET_OUTPUT_LINK}
+                -P ${_JAVA_SYMLINK_SCRIPT}
+            COMMAND ${CMAKE_COMMAND}
+                -D_JAVA_TARGET_DIR=${_add_jar_OUTPUT_DIR}
+                -D_JAVA_TARGET_OUTPUT_NAME=${_JAVA_JAR_OUTPUT_PATH}
+                -D_JAVA_TARGET_OUTPUT_LINK=${_JAVA_TARGET_OUTPUT_LINK}
+                -P ${_JAVA_SYMLINK_SCRIPT}
+            DEPENDS ${_JAVA_RESOURCE_FILES} ${_JAVA_DEPENDS} ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist
+            WORKING_DIRECTORY ${CMAKE_JAVA_CLASS_OUTPUT_PATH}
+            COMMENT "Creating Java archive ${_JAVA_TARGET_OUTPUT_NAME}"
+            VERBATIM
+        )
+    else ()
+        add_custom_command(
+            OUTPUT ${_JAVA_JAR_OUTPUT_PATH}
+            COMMAND ${Java_JAR_EXECUTABLE}
+                -cf${_ENTRY_POINT_OPTION}${_MANIFEST_OPTION} ${_JAVA_JAR_OUTPUT_PATH} ${_ENTRY_POINT_VALUE} ${_MANIFEST_VALUE}
+                ${_JAVA_RESOURCE_FILES_RELATIVE} @java_class_filelist
+            COMMAND ${CMAKE_COMMAND}
+                -D_JAVA_TARGET_DIR=${_add_jar_OUTPUT_DIR}
+                -D_JAVA_TARGET_OUTPUT_NAME=${_JAVA_TARGET_OUTPUT_NAME}
+                -D_JAVA_TARGET_OUTPUT_LINK=${_JAVA_TARGET_OUTPUT_LINK}
+                -P ${_JAVA_SYMLINK_SCRIPT}
+            WORKING_DIRECTORY ${CMAKE_JAVA_CLASS_OUTPUT_PATH}
+            DEPENDS ${_JAVA_RESOURCE_FILES} ${_JAVA_DEPENDS} ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist
+            COMMENT "Creating Java archive ${_JAVA_TARGET_OUTPUT_NAME}"
+            VERBATIM
+        )
+    endif ()
+
+    # Add the target and make sure we have the latest resource files.
+    add_custom_target(${_TARGET_NAME} ALL DEPENDS ${_JAVA_JAR_OUTPUT_PATH})
+
+    set_property(
+        TARGET
+            ${_TARGET_NAME}
+        PROPERTY
+            INSTALL_FILES
+                ${_JAVA_JAR_OUTPUT_PATH}
+    )
+
+    if (_JAVA_TARGET_OUTPUT_LINK)
+        set_property(
+            TARGET
+                ${_TARGET_NAME}
+            PROPERTY
+                INSTALL_FILES
+                    ${_JAVA_JAR_OUTPUT_PATH}
+                    ${_add_jar_OUTPUT_DIR}/${_JAVA_TARGET_OUTPUT_LINK}
+        )
+
+        if (CMAKE_JNI_TARGET)
+            set_property(
+                TARGET
+                    ${_TARGET_NAME}
+                PROPERTY
+                    JNI_SYMLINK
+                        ${_add_jar_OUTPUT_DIR}/${_JAVA_TARGET_OUTPUT_LINK}
+            )
+        endif ()
+    endif ()
+
+    set_property(
+        TARGET
+            ${_TARGET_NAME}
+        PROPERTY
+            JAR_FILE
+                ${_JAVA_JAR_OUTPUT_PATH}
+    )
+
+    set_property(
+        TARGET
+            ${_TARGET_NAME}
+        PROPERTY
+            CLASSDIR
+                ${CMAKE_JAVA_CLASS_OUTPUT_PATH}
+    )
+
+  if (_GENERATE_NATIVE_HEADERS)
+    # create an INTERFACE library encapsulating include directory for generated headers
+    add_library (${_GENERATE_NATIVE_HEADERS_TARGET} INTERFACE)
+    target_include_directories (${_GENERATE_NATIVE_HEADERS_TARGET} INTERFACE
+      "${_GENERATE_NATIVE_HEADERS_OUTPUT_DESC}"
+      ${JNI_INCLUDE_DIRS})
+    set_property(TARGET ${_GENERATE_NATIVE_HEADERS_TARGET} PROPERTY NATIVE_HEADERS_DIRECTORY "${_GENERATE_NATIVE_HEADERS_OUTPUT_DIR}")
+    # this INTERFACE library depends on jar generation
+    add_dependencies (${_GENERATE_NATIVE_HEADERS_TARGET} ${_TARGET_NAME})
+
+    set_property (DIRECTORY APPEND PROPERTY ADDITIONAL_CLEAN_FILES
+      "${_GENERATE_NATIVE_HEADERS_OUTPUT_DIR}")
+  endif()
+endfunction()
+
+function(INSTALL_JAR _TARGET_NAME)
+    if (ARGC EQUAL 2)
+      set (_DESTINATION ${ARGV1})
+    else()
+      cmake_parse_arguments(_install_jar
+        ""
+        "DESTINATION;COMPONENT"
+        ""
+        ${ARGN})
+      if (_install_jar_DESTINATION)
+        set (_DESTINATION ${_install_jar_DESTINATION})
+      else()
+        message(SEND_ERROR "install_jar: ${_TARGET_NAME}: DESTINATION must be specified.")
+      endif()
+
+      if (_install_jar_COMPONENT)
+        set (_COMPONENT COMPONENT ${_install_jar_COMPONENT})
+      endif()
+    endif()
+
+    get_property(__FILES
+        TARGET
+            ${_TARGET_NAME}
+        PROPERTY
+            INSTALL_FILES
+    )
+    set_property(
+        TARGET
+            ${_TARGET_NAME}
+        PROPERTY
+            INSTALL_DESTINATION
+            ${_DESTINATION}
+    )
+
+    if (__FILES)
+        install(
+            FILES
+                ${__FILES}
+            DESTINATION
+                ${_DESTINATION}
+            ${_COMPONENT}
+        )
+    else ()
+        message(SEND_ERROR "install_jar: The target ${_TARGET_NAME} is not known in this scope.")
+    endif ()
+endfunction()
+
+function(INSTALL_JNI_SYMLINK _TARGET_NAME)
+    if (ARGC EQUAL 2)
+      set (_DESTINATION ${ARGV1})
+    else()
+      cmake_parse_arguments(_install_jni_symlink
+        ""
+        "DESTINATION;COMPONENT"
+        ""
+        ${ARGN})
+      if (_install_jni_symlink_DESTINATION)
+        set (_DESTINATION ${_install_jni_symlink_DESTINATION})
+      else()
+        message(SEND_ERROR "install_jni_symlink: ${_TARGET_NAME}: DESTINATION must be specified.")
+      endif()
+
+      if (_install_jni_symlink_COMPONENT)
+        set (_COMPONENT COMPONENT ${_install_jni_symlink_COMPONENT})
+      endif()
+    endif()
+
+    get_property(__SYMLINK
+        TARGET
+            ${_TARGET_NAME}
+        PROPERTY
+            JNI_SYMLINK
+    )
+
+    if (__SYMLINK)
+        install(
+            FILES
+                ${__SYMLINK}
+            DESTINATION
+                ${_DESTINATION}
+            ${_COMPONENT}
+        )
+    else ()
+        message(SEND_ERROR "install_jni_symlink: The target ${_TARGET_NAME} is not known in this scope.")
+    endif ()
+endfunction()
+
+function (find_jar VARIABLE)
+    set(_jar_names)
+    set(_jar_files)
+    set(_jar_versions)
+    set(_jar_paths
+        /usr/share/java/
+        /usr/local/share/java/
+        ${Java_JAR_PATHS})
+    set(_jar_doc "NOTSET")
+
+    set(_state "name")
+
+    foreach (arg IN LISTS ARGN)
+        if (_state STREQUAL "name")
+            if (arg STREQUAL "VERSIONS")
+                set(_state "versions")
+            elseif (arg STREQUAL "NAMES")
+                set(_state "names")
+            elseif (arg STREQUAL "PATHS")
+                set(_state "paths")
+            elseif (arg STREQUAL "DOC")
+                set(_state "doc")
+            else ()
+                set(_jar_names ${arg})
+                if (_jar_doc STREQUAL "NOTSET")
+                    set(_jar_doc "Finding ${arg} jar")
+                endif ()
+            endif ()
+        elseif (_state STREQUAL "versions")
+            if (arg STREQUAL "NAMES")
+                set(_state "names")
+            elseif (arg STREQUAL "PATHS")
+                set(_state "paths")
+            elseif (arg STREQUAL "DOC")
+                set(_state "doc")
+            else ()
+                set(_jar_versions ${_jar_versions} ${arg})
+            endif ()
+        elseif (_state STREQUAL "names")
+            if (arg STREQUAL "VERSIONS")
+                set(_state "versions")
+            elseif (arg STREQUAL "PATHS")
+                set(_state "paths")
+            elseif (arg STREQUAL "DOC")
+                set(_state "doc")
+            else ()
+                set(_jar_names ${_jar_names} ${arg})
+                if (_jar_doc STREQUAL "NOTSET")
+                    set(_jar_doc "Finding ${arg} jar")
+                endif ()
+            endif ()
+        elseif (_state STREQUAL "paths")
+            if (arg STREQUAL "VERSIONS")
+                set(_state "versions")
+            elseif (arg STREQUAL "NAMES")
+                set(_state "names")
+            elseif (arg STREQUAL "DOC")
+                set(_state "doc")
+            else ()
+                set(_jar_paths ${_jar_paths} ${arg})
+            endif ()
+        elseif (_state STREQUAL "doc")
+            if (arg STREQUAL "VERSIONS")
+                set(_state "versions")
+            elseif (arg STREQUAL "NAMES")
+                set(_state "names")
+            elseif (arg STREQUAL "PATHS")
+                set(_state "paths")
+            else ()
+                set(_jar_doc ${arg})
+            endif ()
+        endif ()
+    endforeach ()
+
+    if (NOT _jar_names)
+        message(FATAL_ERROR "find_jar: No name to search for given")
+    endif ()
+
+    foreach (jar_name IN LISTS _jar_names)
+        foreach (version IN LISTS _jar_versions)
+            set(_jar_files ${_jar_files} ${jar_name}-${version}.jar)
+        endforeach ()
+        set(_jar_files ${_jar_files} ${jar_name}.jar)
+    endforeach ()
+
+    find_file(${VARIABLE}
+        NAMES   ${_jar_files}
+        PATHS   ${_jar_paths}
+        DOC     ${_jar_doc}
+        NO_DEFAULT_PATH)
+endfunction ()
+
+function(create_javadoc _target)
+    set(_javadoc_packages)
+    set(_javadoc_files)
+    set(_javadoc_sourcepath)
+    set(_javadoc_classpath)
+    set(_javadoc_installpath "${CMAKE_INSTALL_PREFIX}/share/javadoc")
+    set(_javadoc_doctitle)
+    set(_javadoc_windowtitle)
+    set(_javadoc_author FALSE)
+    set(_javadoc_version FALSE)
+    set(_javadoc_use FALSE)
+
+    set(_state "package")
+
+    foreach (arg IN LISTS ARGN)
+        if (_state STREQUAL "package")
+            if (arg STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (arg STREQUAL "FILES")
+                set(_state "files")
+            elseif (arg STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (arg STREQUAL "CLASSPATH")
+                set(_state "classpath")
+            elseif (arg STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (arg STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (arg STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (arg STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (arg STREQUAL "USE")
+                set(_state "use")
+            elseif (arg STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                set(_javadoc_packages ${arg})
+                set(_state "packages")
+            endif ()
+        elseif (_state STREQUAL "packages")
+            if (arg STREQUAL "FILES")
+                set(_state "files")
+            elseif (arg STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (arg STREQUAL "CLASSPATH")
+                set(_state "classpath")
+            elseif (arg STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (arg STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (arg STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (arg STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (arg STREQUAL "USE")
+                set(_state "use")
+            elseif (arg STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                list(APPEND _javadoc_packages ${arg})
+            endif ()
+        elseif (_state STREQUAL "files")
+            if (arg STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (arg STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (arg STREQUAL "CLASSPATH")
+                set(_state "classpath")
+            elseif (arg STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (arg STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (arg STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (arg STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (arg STREQUAL "USE")
+                set(_state "use")
+            elseif (arg STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                list(APPEND _javadoc_files ${arg})
+            endif ()
+        elseif (_state STREQUAL "sourcepath")
+            if (arg STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (arg STREQUAL "FILES")
+                set(_state "files")
+            elseif (arg STREQUAL "CLASSPATH")
+                set(_state "classpath")
+            elseif (arg STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (arg STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (arg STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (arg STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (arg STREQUAL "USE")
+                set(_state "use")
+            elseif (arg STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                list(APPEND _javadoc_sourcepath ${arg})
+            endif ()
+        elseif (_state STREQUAL "classpath")
+            if (arg STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (arg STREQUAL "FILES")
+                set(_state "files")
+            elseif (arg STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (arg STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (arg STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (arg STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (arg STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (arg STREQUAL "USE")
+                set(_state "use")
+            elseif (arg STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                list(APPEND _javadoc_classpath ${arg})
+            endif ()
+        elseif (_state STREQUAL "installpath")
+            if (arg STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (arg STREQUAL "FILES")
+                set(_state "files")
+            elseif (arg STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (arg STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (arg STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (arg STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (arg STREQUAL "USE")
+                set(_state "use")
+            elseif (arg STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                set(_javadoc_installpath ${arg})
+            endif ()
+        elseif (_state STREQUAL "doctitle")
+            if (${arg} STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (arg STREQUAL "FILES")
+                set(_state "files")
+            elseif (arg STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (arg STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (arg STREQUAL "CLASSPATH")
+                set(_state "classpath")
+            elseif (arg STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (arg STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (arg STREQUAL "USE")
+                set(_state "use")
+            elseif (arg STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                set(_javadoc_doctitle ${arg})
+            endif ()
+        elseif (_state STREQUAL "windowtitle")
+            if (${arg} STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (arg STREQUAL "FILES")
+                set(_state "files")
+            elseif (arg STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (arg STREQUAL "CLASSPATH")
+                set(_state "classpath")
+            elseif (arg STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (arg STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (arg STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (arg STREQUAL "USE")
+                set(_state "use")
+            elseif (arg STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                set(_javadoc_windowtitle ${arg})
+            endif ()
+        elseif (_state STREQUAL "author")
+            if (arg STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (arg STREQUAL "FILES")
+                set(_state "files")
+            elseif (arg STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (arg STREQUAL "CLASSPATH")
+                set(_state "classpath")
+            elseif (arg STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (arg STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (arg STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (arg STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (arg STREQUAL "USE")
+                set(_state "use")
+            elseif (arg STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                set(_javadoc_author ${arg})
+            endif ()
+        elseif (_state STREQUAL "use")
+            if (arg STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (arg STREQUAL "FILES")
+                set(_state "files")
+            elseif (arg STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (arg STREQUAL "CLASSPATH")
+                set(_state "classpath")
+            elseif (arg STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (arg STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (arg STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (arg STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (arg STREQUAL "USE")
+                set(_state "use")
+            elseif (arg STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                set(_javadoc_use ${arg})
+            endif ()
+        elseif (_state STREQUAL "version")
+            if (arg STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (arg STREQUAL "FILES")
+                set(_state "files")
+            elseif (arg STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (arg STREQUAL "CLASSPATH")
+                set(_state "classpath")
+            elseif (arg STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (arg STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (arg STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (arg STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (arg STREQUAL "USE")
+                set(_state "use")
+            elseif (arg STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                set(_javadoc_version ${arg})
+            endif ()
+        endif ()
+    endforeach ()
+
+    set(_javadoc_builddir ${CMAKE_CURRENT_BINARY_DIR}/javadoc/${_target})
+    set(_javadoc_options -d ${_javadoc_builddir})
+
+    if (_javadoc_sourcepath)
+        list(JOIN _javadoc_sourcepath "${_UseJava_PATH_SEP}" _javadoc_sourcepath)
+        list(APPEND _javadoc_options -sourcepath "\"${_javadoc_sourcepath}\"")
+    endif ()
+
+    if (_javadoc_classpath)
+        list(JOIN _javadoc_classpath "${_UseJava_PATH_SEP}" _javadoc_classpath)
+        list(APPEND _javadoc_options -classpath "\"${_javadoc_classpath}\"")
+    endif ()
+
+    if (_javadoc_doctitle)
+        list(APPEND _javadoc_options -doctitle '${_javadoc_doctitle}')
+    endif ()
+
+    if (_javadoc_windowtitle)
+        list(APPEND _javadoc_options -windowtitle '${_javadoc_windowtitle}')
+    endif ()
+
+    if (_javadoc_author)
+        list(APPEND _javadoc_options -author)
+    endif ()
+
+    if (_javadoc_use)
+        list(APPEND _javadoc_options -use)
+    endif ()
+
+    if (_javadoc_version)
+        list(APPEND _javadoc_options -version)
+    endif ()
+
+    add_custom_target(${_target}_javadoc ALL
+        COMMAND ${Java_JAVADOC_EXECUTABLE}
+                ${_javadoc_options}
+                ${_javadoc_files}
+                ${_javadoc_packages}
+        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+    )
+
+    install(
+        DIRECTORY ${_javadoc_builddir}
+        DESTINATION ${_javadoc_installpath}
+    )
+endfunction()
+
+function (create_javah)
+  if (Java_VERSION VERSION_GREATER_EQUAL 10)
+    message (FATAL_ERROR "create_javah: not supported with this Java version. Use add_jar(GENERATE_NATIVE_HEADERS) instead.")
+  elseif (Java_VERSION VERSION_GREATER_EQUAL 1.8)
+    message (DEPRECATION "create_javah: this command will no longer be supported starting with version 10 of JDK. Update your project by using command add_jar(GENERATE_NATIVE_HEADERS) instead.")
+  endif()
+
+    cmake_parse_arguments(_create_javah
+      ""
+      "TARGET;GENERATED_FILES;OUTPUT_NAME;OUTPUT_DIR"
+      "CLASSES;CLASSPATH;DEPENDS"
+      ${ARGN})
+
+    # ckeck parameters
+    if (NOT _create_javah_TARGET AND NOT _create_javah_GENERATED_FILES)
+      message (FATAL_ERROR "create_javah: TARGET or GENERATED_FILES must be specified.")
+    endif()
+    if (_create_javah_OUTPUT_NAME AND _create_javah_OUTPUT_DIR)
+      message (FATAL_ERROR "create_javah: OUTPUT_NAME and OUTPUT_DIR are mutually exclusive.")
+    endif()
+
+    if (NOT _create_javah_CLASSES)
+      message (FATAL_ERROR "create_javah: CLASSES is a required parameter.")
+    endif()
+
+    set (_output_files)
+
+    # handle javah options
+    set (_javah_options)
+
+    if (_create_javah_CLASSPATH)
+      # CLASSPATH can specify directories, jar files or targets created with add_jar command
+      set (_classpath)
+      foreach (_path IN LISTS _create_javah_CLASSPATH)
+        if (TARGET ${_path})
+          get_target_property (_jar_path ${_path} JAR_FILE)
+          if (_jar_path)
+            list (APPEND _classpath "${_jar_path}")
+            list (APPEND _create_javah_DEPENDS "${_path}")
+          else()
+            message(SEND_ERROR "create_javah: CLASSPATH target ${_path} is not a jar.")
+          endif()
+        elseif (EXISTS "${_path}")
+          list (APPEND _classpath "${_path}")
+          if (NOT IS_DIRECTORY "${_path}")
+            list (APPEND _create_javah_DEPENDS "${_path}")
+          endif()
+        else()
+          message(SEND_ERROR "create_javah: CLASSPATH entry ${_path} does not exist.")
+        endif()
+      endforeach()
+      string (REPLACE ";" "${_UseJava_PATH_SEP}" _classpath "${_classpath}")
+      list (APPEND _javah_options -classpath "${_classpath}")
+    endif()
+
+    if (_create_javah_OUTPUT_DIR)
+      list (APPEND _javah_options -d "${_create_javah_OUTPUT_DIR}")
+    endif()
+
+    if (_create_javah_OUTPUT_NAME)
+      list (APPEND _javah_options -o "${_create_javah_OUTPUT_NAME}")
+      set (_output_files "${_create_javah_OUTPUT_NAME}")
+
+      get_filename_component (_create_javah_OUTPUT_DIR "${_create_javah_OUTPUT_NAME}" DIRECTORY)
+      get_filename_component (_create_javah_OUTPUT_DIR "${_create_javah_OUTPUT_DIR}" ABSOLUTE)
+    endif()
+
+    if (NOT _create_javah_OUTPUT_DIR)
+      set (_create_javah_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}")
+    endif()
+
+    if (NOT _create_javah_OUTPUT_NAME)
+      # compute output names
+      foreach (_class IN LISTS _create_javah_CLASSES)
+        string (REPLACE "." "_" _c_header "${_class}")
+        set (_c_header  "${_create_javah_OUTPUT_DIR}/${_c_header}.h")
+        list (APPEND _output_files "${_c_header}")
+      endforeach()
+    endif()
+
+    # finalize custom command arguments
+    if (_create_javah_DEPENDS)
+      list (INSERT _create_javah_DEPENDS 0 DEPENDS)
+    endif()
+
+    add_custom_command (OUTPUT ${_output_files}
+      COMMAND "${Java_JAVAH_EXECUTABLE}" ${_javah_options} -jni ${_create_javah_CLASSES}
+      ${_create_javah_DEPENDS}
+      WORKING_DIRECTORY ${_create_javah_OUTPUT_DIR}
+      COMMENT "Building C header files from classes...")
+
+    if (_create_javah_TARGET)
+      add_custom_target (${_create_javah_TARGET} ALL DEPENDS ${_output_files})
+    endif()
+    if (_create_javah_GENERATED_FILES)
+      set (${_create_javah_GENERATED_FILES} ${_output_files} PARENT_SCOPE)
+    endif()
+endfunction()
+
+function(export_jars)
+    # Parse and validate arguments
+    cmake_parse_arguments(_export_jars
+      ""
+      "FILE;NAMESPACE"
+      "TARGETS"
+      ${ARGN}
+    )
+    if (NOT _export_jars_FILE)
+      message(SEND_ERROR "export_jars: FILE must be specified.")
+    endif()
+    if (NOT _export_jars_TARGETS)
+      message(SEND_ERROR "export_jars: TARGETS must be specified.")
+    endif()
+    set(_jar_NAMESPACE "${_export_jars_NAMESPACE}")
+
+    # Set content of generated exports file
+    string(REPLACE ";" " " __targets__ "${_export_jars_TARGETS}")
+    set(__targetdefs__ "")
+    foreach(_target IN LISTS _export_jars_TARGETS)
+        get_target_property(_jarpath ${_target} JAR_FILE)
+        get_filename_component(_jarpath ${_jarpath} PATH)
+        __java_export_jar(__targetdefs__ ${_target} "${_jarpath}")
+    endforeach()
+
+    # Generate exports file
+    configure_file(
+      ${_JAVA_EXPORT_TARGETS_SCRIPT}
+      ${_export_jars_FILE}
+      @ONLY
+    )
+endfunction()
+
+function(install_jar_exports)
+    # Parse and validate arguments
+    cmake_parse_arguments(_install_jar_exports
+      ""
+      "FILE;DESTINATION;COMPONENT;NAMESPACE"
+      "TARGETS"
+      ${ARGN}
+    )
+    if (NOT _install_jar_exports_FILE)
+      message(SEND_ERROR "install_jar_exports: FILE must be specified.")
+    endif()
+    if (NOT _install_jar_exports_DESTINATION)
+      message(SEND_ERROR "install_jar_exports: DESTINATION must be specified.")
+    endif()
+    if (NOT _install_jar_exports_TARGETS)
+      message(SEND_ERROR "install_jar_exports: TARGETS must be specified.")
+    endif()
+    set(_jar_NAMESPACE "${_install_jar_exports_NAMESPACE}")
+
+    if (_install_jar_exports_COMPONENT)
+      set (_COMPONENT COMPONENT ${_install_jar_exports_COMPONENT})
+    endif()
+
+    # Determine relative path from installed export file to install prefix
+    if(IS_ABSOLUTE "${_install_jar_exports_DESTINATION}")
+      file(RELATIVE_PATH _relpath
+        ${_install_jar_exports_DESTINATION}
+        ${CMAKE_INSTALL_PREFIX}
+      )
+    else()
+      file(RELATIVE_PATH _relpath
+        ${CMAKE_INSTALL_PREFIX}/${_install_jar_exports_DESTINATION}
+        ${CMAKE_INSTALL_PREFIX}
+      )
+    endif()
+
+    # Set up unique location for generated exports file
+    string(SHA256 _hash "${_install_jar_exports_DESTINATION}")
+    set(_tmpdir ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/JavaExports/${_hash})
+
+    # Set content of generated exports file
+    string(REPLACE ";" " " __targets__ "${_install_jar_exports_TARGETS}")
+    set(__targetdefs__ "set(_prefix \${CMAKE_CURRENT_LIST_DIR}/${_relpath})\n\n")
+    foreach(_target IN LISTS _install_jar_exports_TARGETS)
+        get_target_property(_dir ${_target} INSTALL_DESTINATION)
+        __java_export_jar(__targetdefs__ ${_target} "\${_prefix}/${_dir}")
+    endforeach()
+    __java_lcat(__targetdefs__ "\nunset(_prefix)")
+
+    # Generate and install exports file
+    configure_file(
+      ${_JAVA_EXPORT_TARGETS_SCRIPT}
+      ${_tmpdir}/${_install_jar_exports_FILE}
+      @ONLY
+    )
+    install(FILES ${_tmpdir}/${_install_jar_exports_FILE}
+            DESTINATION ${_install_jar_exports_DESTINATION}
+            ${_COMPONENT})
+endfunction()
diff --git a/share/cmake-3.22/Modules/UseJava/ClassFilelist.cmake b/share/cmake-3.22/Modules/UseJava/ClassFilelist.cmake
new file mode 100644
index 0000000..aa9e35d
--- /dev/null
+++ b/share/cmake-3.22/Modules/UseJava/ClassFilelist.cmake
@@ -0,0 +1,40 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+# This script creates a list of compiled Java class files to be added to
+# a jar file.  This avoids including cmake files which get created in
+# the binary directory.
+
+if (CMAKE_JAVA_CLASS_OUTPUT_PATH)
+    if (EXISTS "${CMAKE_JAVA_CLASS_OUTPUT_PATH}")
+
+        set(_JAVA_GLOBBED_FILES)
+        if (CMAKE_JAR_CLASSES_PREFIX)
+            foreach(JAR_CLASS_PREFIX ${CMAKE_JAR_CLASSES_PREFIX})
+                message(STATUS "JAR_CLASS_PREFIX: ${JAR_CLASS_PREFIX}")
+
+                file(GLOB_RECURSE _JAVA_GLOBBED_TMP_FILES "${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${JAR_CLASS_PREFIX}/*.class")
+                if (_JAVA_GLOBBED_TMP_FILES)
+                    list(APPEND _JAVA_GLOBBED_FILES ${_JAVA_GLOBBED_TMP_FILES})
+                endif ()
+            endforeach()
+        else()
+            file(GLOB_RECURSE _JAVA_GLOBBED_FILES "${CMAKE_JAVA_CLASS_OUTPUT_PATH}/*.class")
+        endif ()
+
+        set(_JAVA_CLASS_FILES)
+        # file(GLOB_RECURSE foo RELATIVE) is broken so we need this.
+        foreach(_JAVA_GLOBBED_FILE ${_JAVA_GLOBBED_FILES})
+            file(RELATIVE_PATH _JAVA_CLASS_FILE ${CMAKE_JAVA_CLASS_OUTPUT_PATH} ${_JAVA_GLOBBED_FILE})
+            set(_JAVA_CLASS_FILES ${_JAVA_CLASS_FILES}${_JAVA_CLASS_FILE}\n)
+        endforeach()
+
+        # write to file
+        file(WRITE ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist ${_JAVA_CLASS_FILES})
+
+    else ()
+        message(SEND_ERROR "FATAL: Java class output path doesn't exist")
+    endif ()
+else ()
+    message(SEND_ERROR "FATAL: Can't find CMAKE_JAVA_CLASS_OUTPUT_PATH")
+endif ()
diff --git a/share/cmake-3.18/Modules/UseJava/ClearClassFiles.cmake b/share/cmake-3.22/Modules/UseJava/ClearClassFiles.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/UseJava/ClearClassFiles.cmake
rename to share/cmake-3.22/Modules/UseJava/ClearClassFiles.cmake
diff --git a/share/cmake-3.22/Modules/UseJava/Symlinks.cmake b/share/cmake-3.22/Modules/UseJava/Symlinks.cmake
new file mode 100644
index 0000000..2788195
--- /dev/null
+++ b/share/cmake-3.22/Modules/UseJava/Symlinks.cmake
@@ -0,0 +1,20 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+# Helper script for UseJava.cmake
+
+if (UNIX AND _JAVA_TARGET_OUTPUT_LINK)
+    if (_JAVA_TARGET_OUTPUT_NAME)
+        find_program(LN_EXECUTABLE
+            NAMES
+                ln
+        )
+
+        execute_process(
+            COMMAND ${LN_EXECUTABLE} -sf "${_JAVA_TARGET_OUTPUT_NAME}" "${_JAVA_TARGET_OUTPUT_LINK}"
+            WORKING_DIRECTORY ${_JAVA_TARGET_DIR}
+        )
+    else ()
+        message(SEND_ERROR "FATAL: Can't find _JAVA_TARGET_OUTPUT_NAME")
+    endif ()
+endif ()
diff --git a/share/cmake-3.22/Modules/UseJava/javaTargets.cmake.in b/share/cmake-3.22/Modules/UseJava/javaTargets.cmake.in
new file mode 100644
index 0000000..6e14256
--- /dev/null
+++ b/share/cmake-3.22/Modules/UseJava/javaTargets.cmake.in
@@ -0,0 +1,39 @@
+cmake_minimum_required(VERSION 2.8.12)
+cmake_policy(PUSH)
+cmake_policy(VERSION 2.8)
+
+#----------------------------------------------------------------
+# Generated CMake Java target import file.
+#----------------------------------------------------------------
+
+# Protect against multiple inclusion, which would fail when already imported targets are added once more.
+set(_targetsDefined)
+set(_targetsNotDefined)
+set(_expectedTargets)
+foreach(_expectedTarget @__targets__@)
+  list(APPEND _expectedTargets ${_expectedTarget})
+  if(TARGET ${_expectedTarget})
+    list(APPEND _targetsDefined ${_expectedTarget})
+  else()
+    list(APPEND _targetsNotDefined ${_expectedTarget})
+  endif()
+endforeach()
+if("%${_targetsDefined}" STREQUAL "%${_expectedTargets}")
+  unset(_targetsDefined)
+  unset(_targetsNotDefined)
+  unset(_expectedTargets)
+  cmake_policy(POP)
+  return()
+endif()
+if(NOT "${_targetsDefined}" STREQUAL "")
+  message(FATAL_ERROR
+    "Some (but not all) targets in this export set were already defined.\n"
+    "Targets Defined: ${_targetsDefined}\n"
+    "Targets not yet defined: ${_targetsNotDefined}\n")
+endif()
+unset(_targetsDefined)
+unset(_targetsNotDefined)
+unset(_expectedTargets)
+
+@__targetdefs__@
+cmake_policy(POP)
diff --git a/share/cmake-3.18/Modules/UsePkgConfig.cmake b/share/cmake-3.22/Modules/UsePkgConfig.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/UsePkgConfig.cmake
rename to share/cmake-3.22/Modules/UsePkgConfig.cmake
diff --git a/share/cmake-3.18/Modules/UseQt4.cmake b/share/cmake-3.22/Modules/UseQt4.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/UseQt4.cmake
rename to share/cmake-3.22/Modules/UseQt4.cmake
diff --git a/share/cmake-3.22/Modules/UseSWIG.cmake b/share/cmake-3.22/Modules/UseSWIG.cmake
new file mode 100644
index 0000000..35b1704
--- /dev/null
+++ b/share/cmake-3.22/Modules/UseSWIG.cmake
@@ -0,0 +1,1041 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+UseSWIG
+-------
+
+This file provides support for ``SWIG``. It is assumed that :module:`FindSWIG`
+module has already been loaded.
+
+Defines the following command for use with ``SWIG``:
+
+.. command:: swig_add_library
+
+  .. versionadded:: 3.8
+
+  Define swig module with given name and specified language::
+
+    swig_add_library(<name>
+                     [TYPE <SHARED|MODULE|STATIC|USE_BUILD_SHARED_LIBS>]
+                     LANGUAGE <language>
+                     [NO_PROXY]
+                     [OUTPUT_DIR <directory>]
+                     [OUTFILE_DIR <directory>]
+                     SOURCES <file>...
+                    )
+
+  Targets created with the ``swig_add_library`` command have the same
+  capabilities as targets created with the :command:`add_library` command, so
+  those targets can be used with any command expecting a target (e.g.
+  :command:`target_link_libraries`).
+
+  .. versionchanged:: 3.13
+    This command creates a target with the specified ``<name>`` when
+    policy :policy:`CMP0078` is set to ``NEW``.  Otherwise, the legacy
+    behavior will choose a different target name and store it in the
+    ``SWIG_MODULE_<name>_REAL_NAME`` variable.
+
+  .. versionchanged:: 3.15
+    Alternate library name (set with the :prop_tgt:`OUTPUT_NAME` property,
+    for example) will be passed on to ``Python`` and ``CSharp`` wrapper
+    libraries.
+
+  .. versionchanged:: 3.21
+    Generated library use standard naming conventions for ``CSharp`` language
+    when policy :policy:`CMP0122` is set to ``NEW``. Otherwise, the legacy
+    behavior is applied.
+
+  .. note::
+
+    For multi-config generators, this module does not support
+    configuration-specific files generated by ``SWIG``. All build
+    configurations must result in the same generated source file.
+
+  .. note::
+
+    For :ref:`Makefile Generators`, if, for some sources, the
+    ``USE_SWIG_DEPENDENCIES`` property is ``FALSE``, ``swig_add_library`` does
+    not track file dependencies, so depending on the ``<name>_swig_compilation``
+    custom target is required for targets which require the ``swig``-generated
+    files to exist. Other generators may depend on the source files that would
+    be generated by SWIG.
+
+  ``TYPE``
+    ``SHARED``, ``MODULE`` and ``STATIC`` have the same semantic as for the
+    :command:`add_library` command. If ``USE_BUILD_SHARED_LIBS`` is specified,
+    the library type will be ``STATIC`` or ``SHARED`` based on whether the
+    current value of the :variable:`BUILD_SHARED_LIBS` variable is ``ON``. If
+    no type is specified, ``MODULE`` will be used.
+
+  ``LANGUAGE``
+    Specify the target language.
+
+    .. versionadded:: 3.1
+      Go and Lua language support.
+
+    .. versionadded:: 3.2
+      R language support.
+
+    .. versionadded:: 3.18
+      Fortran language support.
+
+  ``NO_PROXY``
+    .. versionadded:: 3.12
+
+    Prevent the generation of the wrapper layer (swig ``-noproxy`` option).
+
+  ``OUTPUT_DIR``
+    .. versionadded:: 3.12
+
+    Specify where to write the language specific files (swig ``-outdir``
+    option). If not given, the ``CMAKE_SWIG_OUTDIR`` variable will be used.
+    If neither is specified, the default depends on the value of the
+    ``UseSWIG_MODULE_VERSION`` variable as follows:
+
+    * If ``UseSWIG_MODULE_VERSION`` is 1 or is undefined, output is written to
+      the :variable:`CMAKE_CURRENT_BINARY_DIR` directory.
+    * If ``UseSWIG_MODULE_VERSION`` is 2, a dedicated directory will be used.
+      The path of this directory can be retrieved from the
+      ``SWIG_SUPPORT_FILES_DIRECTORY`` target property.
+
+  ``OUTFILE_DIR``
+    .. versionadded:: 3.12
+
+    Specify an output directory name where the generated source file will be
+    placed (swig ``-o`` option). If not specified, the ``SWIG_OUTFILE_DIR``
+    variable will be used. If neither is specified, ``OUTPUT_DIR`` or
+    ``CMAKE_SWIG_OUTDIR`` is used instead.
+
+  ``SOURCES``
+    List of sources for the library. Files with extension ``.i`` will be
+    identified as sources for the ``SWIG`` tool. Other files will be handled in
+    the standard way.
+
+    .. versionadded:: 3.14
+      This behavior can be overridden by specifying the variable
+      ``SWIG_SOURCE_FILE_EXTENSIONS``.
+
+  .. note::
+
+    If ``UseSWIG_MODULE_VERSION`` is set to 2, it is **strongly** recommended
+    to use a dedicated directory unique to the target when either the
+    ``OUTPUT_DIR`` option or the ``CMAKE_SWIG_OUTDIR`` variable are specified.
+    The output directory contents are erased as part of the target build, so
+    to prevent interference between targets or losing other important files,
+    each target should have its own dedicated output directory.
+
+.. command:: swig_link_libraries
+
+  Link libraries to swig module::
+
+    swig_link_libraries(<name> <item>...)
+
+  This command has same capabilities as :command:`target_link_libraries`
+  command.
+
+  .. note::
+
+    If variable ``UseSWIG_TARGET_NAME_PREFERENCE`` is set to ``STANDARD``, this
+    command is deprecated and :command:`target_link_libraries` command must be
+    used instead.
+
+Source file properties on module files **must** be set before the invocation
+of the ``swig_add_library`` command to specify special behavior of SWIG and
+ensure generated files will receive the required settings.
+
+``CPLUSPLUS``
+  Call SWIG in c++ mode.  For example:
+
+  .. code-block:: cmake
+
+    set_property(SOURCE mymod.i PROPERTY CPLUSPLUS ON)
+    swig_add_library(mymod LANGUAGE python SOURCES mymod.i)
+
+``SWIG_FLAGS``
+  .. deprecated:: 3.12
+    Replaced with the fine-grained properties that follow.
+
+  Pass custom flags to the SWIG executable.
+
+``INCLUDE_DIRECTORIES``, ``COMPILE_DEFINITIONS`` and ``COMPILE_OPTIONS``
+  .. versionadded:: 3.12
+
+  Add custom flags to SWIG compiler and have same semantic as properties
+  :prop_sf:`INCLUDE_DIRECTORIES`, :prop_sf:`COMPILE_DEFINITIONS` and
+  :prop_sf:`COMPILE_OPTIONS`.
+
+``USE_TARGET_INCLUDE_DIRECTORIES``
+  .. versionadded:: 3.13
+
+  If set to ``TRUE``, contents of target property
+  :prop_tgt:`INCLUDE_DIRECTORIES` will be forwarded to ``SWIG`` compiler.
+  If set to ``FALSE`` target property :prop_tgt:`INCLUDE_DIRECTORIES` will be
+  ignored. If not set, target property ``SWIG_USE_TARGET_INCLUDE_DIRECTORIES``
+  will be considered.
+
+``GENERATED_INCLUDE_DIRECTORIES``, ``GENERATED_COMPILE_DEFINITIONS`` and ``GENERATED_COMPILE_OPTIONS``
+  .. versionadded:: 3.12
+
+  Add custom flags to the C/C++ generated source. They will fill, respectively,
+  properties :prop_sf:`INCLUDE_DIRECTORIES`, :prop_sf:`COMPILE_DEFINITIONS` and
+  :prop_sf:`COMPILE_OPTIONS` of generated C/C++ file.
+
+``DEPENDS``
+  .. versionadded:: 3.12
+
+  Specify additional dependencies to the source file.
+
+``USE_SWIG_DEPENDENCIES``
+  .. versionadded:: 3.20
+
+  If set to ``TRUE``, implicit dependencies are generated by the ``swig`` tool
+  itself. This property is only meaningful for
+  :ref:`Makefile <Makefile Generators>`,
+  :ref:`Ninja <Ninja Generators>`, :generator:`Xcode`, and
+  :ref:`Visual Studio <Visual Studio Generators>`
+  (:generator:`Visual Studio 11 2012` and above) generators. Default value is
+  ``FALSE``.
+
+  .. versionadded:: 3.21
+    Added the support of :generator:`Xcode` generator.
+
+  .. versionadded:: 3.22
+    Added the support of :ref:`Visual Studio Generators`.
+
+``SWIG_MODULE_NAME``
+  Specify the actual import name of the module in the target language.
+  This is required if it cannot be scanned automatically from source
+  or different from the module file basename.  For example:
+
+  .. code-block:: cmake
+
+    set_property(SOURCE mymod.i PROPERTY SWIG_MODULE_NAME mymod_realname)
+
+  .. versionchanged:: 3.14
+    If policy :policy:`CMP0086` is set to ``NEW``, ``-module <module_name>``
+    is passed to ``SWIG`` compiler.
+
+``OUTPUT_DIR``
+  .. versionadded:: 3.19
+
+  Specify where to write the language specific files (swig ``-outdir`` option)
+  for the considered source file. If not specified, the other ways to define
+  the output directory applies (see ``OUTPUT_DIR`` option of
+  ``swig_add_library()`` command).
+
+``OUTFILE_DIR``
+  .. versionadded:: 3.19
+
+  Specify an output directory where the generated source file will be placed
+  (swig ``-o`` option) for the considered source file. If not specified,
+  ``OUTPUT_DIR`` source property will be used. If neither are specified, the
+  other ways to define output file directory applies (see ``OUTFILE_DIR``
+  option of ``swig_add_library()`` command).
+
+Target library properties can be set to apply same configuration to all SWIG
+input files.
+
+``SWIG_INCLUDE_DIRECTORIES``, ``SWIG_COMPILE_DEFINITIONS`` and ``SWIG_COMPILE_OPTIONS``
+  .. versionadded:: 3.12
+
+  These properties will be applied to all SWIG input files and have same
+  semantic as target properties :prop_tgt:`INCLUDE_DIRECTORIES`,
+  :prop_tgt:`COMPILE_DEFINITIONS` and :prop_tgt:`COMPILE_OPTIONS`.
+
+  .. code-block:: cmake
+
+    set (UseSWIG_TARGET_NAME_PREFERENCE STANDARD)
+    swig_add_library(mymod LANGUAGE python SOURCES mymod.i)
+    set_property(TARGET mymod PROPERTY SWIG_COMPILE_DEFINITIONS MY_DEF1 MY_DEF2)
+    set_property(TARGET mymod PROPERTY SWIG_COMPILE_OPTIONS -bla -blb)
+
+``SWIG_USE_TARGET_INCLUDE_DIRECTORIES``
+  .. versionadded:: 3.13
+
+  If set to ``TRUE``, contents of target property
+  :prop_tgt:`INCLUDE_DIRECTORIES` will be forwarded to ``SWIG`` compiler.
+  If set to ``FALSE`` or not defined, target property
+  :prop_tgt:`INCLUDE_DIRECTORIES` will be ignored. This behavior can be
+  overridden by specifying source property ``USE_TARGET_INCLUDE_DIRECTORIES``.
+
+``SWIG_GENERATED_INCLUDE_DIRECTORIES``, ``SWIG_GENERATED_COMPILE_DEFINITIONS`` and ``SWIG_GENERATED_COMPILE_OPTIONS``
+  .. versionadded:: 3.12
+
+  These properties will populate, respectively, properties
+  :prop_sf:`INCLUDE_DIRECTORIES`, :prop_sf:`COMPILE_DEFINITIONS` and
+  :prop_sf:`COMPILE_FLAGS` of all generated C/C++ files.
+
+``SWIG_DEPENDS``
+  .. versionadded:: 3.12
+
+  Add dependencies to all SWIG input files.
+
+The following target properties are output properties and can be used to get
+information about support files generated by ``SWIG`` interface compilation.
+
+``SWIG_SUPPORT_FILES``
+  .. versionadded:: 3.12
+
+  This output property list of wrapper files generated during SWIG compilation.
+
+  .. code-block:: cmake
+
+    set (UseSWIG_TARGET_NAME_PREFERENCE STANDARD)
+    swig_add_library(mymod LANGUAGE python SOURCES mymod.i)
+    get_property(support_files TARGET mymod PROPERTY SWIG_SUPPORT_FILES)
+
+  .. note::
+
+    Only most principal support files are listed. In case some advanced
+    features of ``SWIG`` are used (for example ``%template``), associated
+    support files may not be listed. Prefer to use the
+    ``SWIG_SUPPORT_FILES_DIRECTORY`` property to handle support files.
+
+``SWIG_SUPPORT_FILES_DIRECTORY``
+  .. versionadded:: 3.12
+
+  This output property specifies the directory where support files will be
+  generated.
+
+  .. note::
+
+    When source property ``OUTPUT_DIR`` is defined, multiple directories can be
+    specified as part of ``SWIG_SUPPORT_FILES_DIRECTORY``.
+
+Some variables can be set to customize the behavior of ``swig_add_library``
+as well as ``SWIG``:
+
+``UseSWIG_MODULE_VERSION``
+  .. versionadded:: 3.12
+
+  Specify different behaviors for ``UseSWIG`` module.
+
+  * Set to 1 or undefined: Legacy behavior is applied.
+  * Set to 2: A new strategy is applied regarding support files: the output
+    directory of support files is erased before ``SWIG`` interface compilation.
+
+``CMAKE_SWIG_FLAGS``
+  Add flags to all swig calls.
+
+``CMAKE_SWIG_OUTDIR``
+  Specify where to write the language specific files (swig ``-outdir`` option).
+
+``SWIG_OUTFILE_DIR``
+  .. versionadded:: 3.8
+
+  Specify an output directory name where the generated source file will be
+  placed.  If not specified, ``CMAKE_SWIG_OUTDIR`` is used.
+
+``SWIG_MODULE_<name>_EXTRA_DEPS``
+  Specify extra dependencies for the generated module for ``<name>``.
+
+``SWIG_SOURCE_FILE_EXTENSIONS``
+  .. versionadded:: 3.14
+
+  Specify a list of source file extensions to override the default
+  behavior of considering only ``.i`` files as sources for the ``SWIG``
+  tool. For example:
+
+  .. code-block:: cmake
+
+    set(SWIG_SOURCE_FILE_EXTENSIONS ".i" ".swg")
+
+``SWIG_USE_SWIG_DEPENDENCIES``
+  .. versionadded:: 3.20
+
+  If set to ``TRUE``, implicit dependencies are generated by the ``swig`` tool
+  itself. This variable is only meaningful for
+  :ref:`Makefile <Makefile Generators>`,
+  :ref:`Ninja <Ninja Generators>`, :generator:`Xcode`, and
+  :ref:`Visual Studio <Visual Studio Generators>`
+  (:generator:`Visual Studio 11 2012` and above) generators. Default value is
+  ``FALSE``.
+
+  Source file property ``USE_SWIG_DEPENDENCIES``, if not defined, will be
+  initialized with the value of this variable.
+
+  .. versionadded:: 3.21
+    Added the support of :generator:`Xcode` generator.
+
+  .. versionadded:: 3.22
+    Added the support of :ref:`Visual Studio Generators`.
+
+#]=======================================================================]
+
+cmake_policy(PUSH)
+# numbers and boolean constants
+cmake_policy (SET CMP0012 NEW)
+# IN_LIST operator
+cmake_policy (SET CMP0057 NEW)
+# Ninja generator normalizes custom command depfile paths
+cmake_policy (SET CMP0116 NEW)
+
+set(SWIG_CXX_EXTENSION "cxx")
+set(SWIG_EXTRA_LIBRARIES "")
+
+set(SWIG_PYTHON_EXTRA_FILE_EXTENSIONS ".py")
+set(SWIG_JAVA_EXTRA_FILE_EXTENSIONS ".java" "JNI.java")
+set(SWIG_CSHARP_EXTRA_FILE_EXTENSIONS ".cs" "PINVOKE.cs")
+
+set(SWIG_MANAGE_SUPPORT_FILES_SCRIPT "${CMAKE_CURRENT_LIST_DIR}/UseSWIG/ManageSupportFiles.cmake")
+
+##
+## PRIVATE functions
+##
+function (__SWIG_COMPUTE_TIMESTAMP name language infile workingdir __timestamp)
+  get_filename_component(filename "${infile}" NAME_WE)
+  set(${__timestamp}
+    "${workingdir}/${filename}${language}.stamp" PARENT_SCOPE)
+  # get_filename_component(filename "${infile}" ABSOLUTE)
+  # string(UUID uuid NAMESPACE 9735D882-D2F8-4E1D-88C9-A0A4F1F6ECA4
+  #   NAME ${name}-${language}-${filename} TYPE SHA1)
+  # set(${__timestamp} "${workingdir}/${uuid}.stamp" PARENT_SCOPE)
+endfunction()
+
+#
+# For given swig module initialize variables associated with it
+#
+macro(SWIG_MODULE_INITIALIZE name language)
+  string(TOUPPER "${language}" SWIG_MODULE_${name}_LANGUAGE)
+  string(TOLOWER "${language}" SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG)
+
+  if (NOT DEFINED SWIG_MODULE_${name}_NOPROXY)
+    set (SWIG_MODULE_${name}_NOPROXY FALSE)
+  endif()
+  if ("-noproxy" IN_LIST CMAKE_SWIG_FLAGS)
+    set (SWIG_MODULE_${name}_NOPROXY TRUE)
+  endif ()
+
+  if (SWIG_MODULE_${name}_NOPROXY AND
+      NOT ("-noproxy" IN_LIST CMAKE_SWIG_FLAGS OR "-noproxy" IN_LIST SWIG_MODULE_${name}_EXTRA_FLAGS))
+    list (APPEND SWIG_MODULE_${name}_EXTRA_FLAGS "-noproxy")
+  endif()
+  if(SWIG_MODULE_${name}_LANGUAGE STREQUAL "UNKNOWN")
+    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
+  elseif(SWIG_MODULE_${name}_LANGUAGE STREQUAL "PERL" AND
+         NOT "-shadow" IN_LIST SWIG_MODULE_${name}_EXTRA_FLAGS)
+    list(APPEND SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
+  endif()
+endmacro()
+
+#
+# For a given language, input file, and output file, determine extra files that
+# will be generated. This is internal swig macro.
+#
+
+function(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)
+  set(files)
+  get_source_file_property(module_basename
+    "${infile}" SWIG_MODULE_NAME)
+  if(NOT module_basename)
+
+    # try to get module name from "%module foo" syntax
+    if ( EXISTS "${infile}" )
+      file ( STRINGS "${infile}" module_basename REGEX "[ ]*%module[ ]*[a-zA-Z0-9_]+.*" )
+    endif ()
+    if ( module_basename )
+      string ( REGEX REPLACE "[ ]*%module[ ]*([a-zA-Z0-9_]+).*" "\\1" module_basename "${module_basename}" )
+
+    else ()
+      # try to get module name from "%module (options=...) foo" syntax
+      if ( EXISTS "${infile}" )
+        file ( STRINGS "${infile}" module_basename REGEX "[ ]*%module[ ]*\\(.*\\)[ ]*[a-zA-Z0-9_]+.*" )
+      endif ()
+      if ( module_basename )
+        string ( REGEX REPLACE "[ ]*%module[ ]*\\(.*\\)[ ]*([a-zA-Z0-9_]+).*" "\\1" module_basename "${module_basename}" )
+
+      else ()
+        # fallback to file basename
+        get_filename_component(module_basename "${infile}" NAME_WE)
+      endif ()
+    endif ()
+
+  endif()
+  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSIONS})
+    set(extra_file "${generatedpath}/${module_basename}${it}")
+    if (extra_file MATCHES "\\.cs$" AND CMAKE_CSharp_COMPILER_LOADED)
+      set_source_files_properties(${extra_file} PROPERTIES LANGUAGE "CSharp")
+    else()
+      # Treat extra outputs as plain files regardless of language.
+      set_source_files_properties(${extra_file} PROPERTIES LANGUAGE "")
+    endif()
+    list(APPEND files "${extra_file}")
+  endforeach()
+
+  if (language STREQUAL "FORTRAN" AND CMAKE_Fortran_COMPILER_LOADED)
+    # Process possible user-supplied extension in flags (obtained via parent
+    # scope variable) to determine the source file name.
+    list(FIND SWIG_COMPILATION_FLAGS "-fext" fext_idx)
+    if (fext_idx EQUAL -1)
+      # Default Fortran generated extension
+      set(fext "f90")
+    else()
+      # Get extension from user-provided flag
+      math(EXPR fext_idx "${fext_idx} + 1")
+      list(GET SWIG_COMPILATION_FLAGS "${fext_idx}" fext)
+    endif()
+    set(extra_file "${generatedpath}/${module_basename}.${fext}")
+    set_source_files_properties("${extra_file}" PROPERTIES LANGUAGE "Fortran")
+    list(APPEND files "${extra_file}")
+  endif()
+
+  set (${outfiles} ${files} PARENT_SCOPE)
+endfunction()
+
+#
+# Take swig (*.i) file and add proper custom commands for it
+#
+function(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
+  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)
+  get_source_file_property(swig_source_file_cplusplus "${infile}" CPLUSPLUS)
+  get_source_file_property(swig_source_file_outdir "${infile}" OUTPUT_DIR)
+  get_source_file_property(swig_source_file_outfiledir "${infile}" OUTFILE_DIR)
+
+  if (swig_source_file_outdir)
+    # use source file property
+    set(outdir "${swig_source_file_outdir}")
+    if (NOT swig_source_file_outfiledir)
+      set (swig_source_file_outfiledir "${outdir}")
+    endif()
+  elseif(CMAKE_SWIG_OUTDIR)
+    set(outdir ${CMAKE_SWIG_OUTDIR})
+  else()
+    set(outdir ${CMAKE_CURRENT_BINARY_DIR})
+  endif()
+
+  if (swig_source_file_outfiledir)
+    set (outfiledir "${swig_source_file_outfiledir}")
+  elseif(SWIG_OUTFILE_DIR)
+    set(outfiledir ${SWIG_OUTFILE_DIR})
+  else()
+    set(outfiledir ${outdir})
+  endif()
+
+  if(SWIG_WORKING_DIR)
+    set (workingdir "${SWIG_WORKING_DIR}")
+  else()
+    set(workingdir "${outdir}")
+  endif()
+
+  if(SWIG_TARGET_NAME)
+    set(target_name ${SWIG_TARGET_NAME})
+  else()
+    set(target_name ${name})
+  endif()
+
+  set (use_swig_dependencies ${SWIG_USE_SWIG_DEPENDENCIES})
+  if (CMAKE_GENERATOR MATCHES "Make|Ninja|Xcode|Visual Studio (1[1-9]|[2-9][0-9])")
+    get_property(use_swig_dependencies_set SOURCE "${infile}" PROPERTY USE_SWIG_DEPENDENCIES SET)
+    if (use_swig_dependencies_set)
+      get_property(use_swig_dependencies SOURCE "${infile}" PROPERTY USE_SWIG_DEPENDENCIES)
+    endif()
+  endif()
+
+  set (swig_source_file_flags ${CMAKE_SWIG_FLAGS})
+  # handle various swig compile flags properties
+  get_source_file_property (include_directories "${infile}" INCLUDE_DIRECTORIES)
+  if (include_directories)
+    list (APPEND swig_source_file_flags "$<$<BOOL:${include_directories}>:-I$<JOIN:${include_directories},$<SEMICOLON>-I>>")
+  endif()
+  set (property "$<TARGET_PROPERTY:${target_name},SWIG_INCLUDE_DIRECTORIES>")
+  list (APPEND swig_source_file_flags "$<$<BOOL:${property}>:-I$<JOIN:$<TARGET_GENEX_EVAL:${target_name},${property}>,$<SEMICOLON>-I>>")
+  set (property "$<REMOVE_DUPLICATES:$<TARGET_PROPERTY:${target_name},INCLUDE_DIRECTORIES>>")
+  get_source_file_property(use_target_include_dirs "${infile}" USE_TARGET_INCLUDE_DIRECTORIES)
+  if (use_target_include_dirs)
+    list (APPEND swig_source_file_flags "$<$<BOOL:${property}>:-I$<JOIN:${property},$<SEMICOLON>-I>>")
+  elseif(use_target_include_dirs STREQUAL "NOTFOUND")
+    # not defined at source level, rely on target level
+    list (APPEND swig_source_file_flags "$<$<AND:$<BOOL:$<TARGET_PROPERTY:${target_name},SWIG_USE_TARGET_INCLUDE_DIRECTORIES>>,$<BOOL:${property}>>:-I$<JOIN:${property},$<SEMICOLON>-I>>")
+  endif()
+
+  set (property "$<TARGET_PROPERTY:${target_name},SWIG_COMPILE_DEFINITIONS>")
+  list (APPEND swig_source_file_flags "$<$<BOOL:${property}>:-D$<JOIN:$<TARGET_GENEX_EVAL:${target_name},${property}>,$<SEMICOLON>-D>>")
+  get_source_file_property (compile_definitions "${infile}" COMPILE_DEFINITIONS)
+  if (compile_definitions)
+    list (APPEND swig_source_file_flags "$<$<BOOL:${compile_definitions}>:-D$<JOIN:${compile_definitions},$<SEMICOLON>-D>>")
+  endif()
+
+  list (APPEND swig_source_file_flags "$<TARGET_GENEX_EVAL:${target_name},$<TARGET_PROPERTY:${target_name},SWIG_COMPILE_OPTIONS>>")
+  get_source_file_property (compile_options "${infile}" COMPILE_OPTIONS)
+  if (compile_options)
+    list (APPEND swig_source_file_flags ${compile_options})
+  endif()
+
+  # legacy support
+  get_source_file_property (swig_flags "${infile}" SWIG_FLAGS)
+  if (swig_flags)
+    list (APPEND swig_source_file_flags ${swig_flags})
+  endif()
+
+  get_filename_component(swig_source_file_fullname "${infile}" ABSOLUTE)
+
+  if (NOT SWIG_MODULE_${name}_NOPROXY)
+    set(SWIG_COMPILATION_FLAGS ${swig_source_file_flags})
+    SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}
+      swig_extra_generated_files
+      "${outdir}"
+      "${swig_source_file_fullname}")
+  endif()
+  set(swig_generated_file_fullname
+    "${outfiledir}/${swig_source_file_name_we}")
+  # add the language into the name of the file (i.e. TCL_wrap)
+  # this allows for the same .i file to be wrapped into different languages
+  string(APPEND swig_generated_file_fullname
+    "${SWIG_MODULE_${name}_LANGUAGE}_wrap")
+
+  if(swig_source_file_cplusplus)
+    string(APPEND swig_generated_file_fullname
+      ".${SWIG_CXX_EXTENSION}")
+  else()
+    string(APPEND swig_generated_file_fullname
+      ".c")
+  endif()
+
+  get_directory_property (cmake_include_directories INCLUDE_DIRECTORIES)
+  list (REMOVE_DUPLICATES cmake_include_directories)
+  set (swig_include_dirs)
+  if (cmake_include_directories)
+    set (swig_include_dirs "$<$<BOOL:${cmake_include_directories}>:-I$<JOIN:${cmake_include_directories},$<SEMICOLON>-I>>")
+  endif()
+
+  set(swig_special_flags)
+  # default is c, so add c++ flag if it is c++
+  if(swig_source_file_cplusplus)
+    list (APPEND swig_special_flags "-c++")
+  endif()
+
+  cmake_policy(GET CMP0086 module_name_policy)
+  if (module_name_policy STREQUAL "NEW")
+    get_source_file_property(module_name "${infile}" SWIG_MODULE_NAME)
+    if (module_name)
+      list (APPEND swig_special_flags "-module" "${module_name}")
+    endif()
+  else()
+    if (NOT module_name_policy)
+      cmake_policy(GET_WARNING CMP0086 _cmp0086_warning)
+      message(AUTHOR_WARNING "${_cmp0086_warning}\n")
+    endif()
+  endif()
+
+  set (swig_extra_flags)
+  if(SWIG_MODULE_${name}_LANGUAGE STREQUAL "CSHARP")
+    if(NOT ("-dllimport" IN_LIST swig_source_file_flags OR "-dllimport" IN_LIST SWIG_MODULE_${name}_EXTRA_FLAGS))
+      # This makes sure that the name used in the generated DllImport
+      # matches the library name created by CMake
+      list (APPEND SWIG_MODULE_${name}_EXTRA_FLAGS "-dllimport" "$<TARGET_FILE_PREFIX:${target_name}>$<TARGET_FILE_BASE_NAME:${target_name}>")
+    endif()
+  endif()
+  if (SWIG_MODULE_${name}_LANGUAGE STREQUAL "PYTHON" AND NOT SWIG_MODULE_${name}_NOPROXY)
+    if(SWIG_USE_INTERFACE AND
+        NOT ("-interface" IN_LIST swig_source_file_flags OR "-interface" IN_LIST SWIG_MODULE_${name}_EXTRA_FLAGS))
+      # This makes sure that the name used in the proxy code
+      # matches the library name created by CMake
+      list (APPEND SWIG_MODULE_${name}_EXTRA_FLAGS "-interface" "$<TARGET_FILE_PREFIX:${target_name}>$<TARGET_FILE_BASE_NAME:${target_name}>")
+    endif()
+  endif()
+  list (APPEND swig_extra_flags ${SWIG_MODULE_${name}_EXTRA_FLAGS})
+
+  # dependencies
+  set (swig_dependencies DEPENDS ${SWIG_MODULE_${name}_EXTRA_DEPS} $<TARGET_PROPERTY:${target_name},SWIG_DEPENDS>)
+  get_source_file_property(file_depends "${infile}" DEPENDS)
+  if (file_depends)
+    list (APPEND swig_dependencies ${file_depends})
+  endif()
+
+  if (UseSWIG_MODULE_VERSION VERSION_GREATER 1)
+    # as part of custom command, start by removing old generated files
+    # to ensure obsolete files do not stay
+    set (swig_file_outdir "${workingdir}/${swig_source_file_name_we}.files")
+    set (swig_cleanup_command COMMAND "${CMAKE_COMMAND}" "-DSUPPORT_FILES_WORKING_DIRECTORY=${swig_file_outdir}" "-DSUPPORT_FILES_OUTPUT_DIRECTORY=${outdir}" -DACTION=CLEAN -P "${SWIG_MANAGE_SUPPORT_FILES_SCRIPT}")
+    set (swig_copy_command COMMAND "${CMAKE_COMMAND}" "-DSUPPORT_FILES_WORKING_DIRECTORY=${swig_file_outdir}" "-DSUPPORT_FILES_OUTPUT_DIRECTORY=${outdir}" -DACTION=COPY -P "${SWIG_MANAGE_SUPPORT_FILES_SCRIPT}")
+  else()
+    set (swig_file_outdir "${outdir}")
+    unset (swig_cleanup_command)
+    unset (swig_copy_command)
+  endif()
+
+  set(swig_depends_flags)
+  if(NOT use_swig_dependencies AND CMAKE_GENERATOR MATCHES "Make")
+    # IMPLICIT_DEPENDS can not handle situations where a dependent file is
+    # removed. We need an extra step with timestamp and custom target, see #16830
+    # As this is needed only for Makefile generator do it conditionally
+    __swig_compute_timestamp(${name} ${SWIG_MODULE_${name}_LANGUAGE}
+      "${infile}" "${workingdir}" swig_generated_timestamp)
+    set(swig_custom_output "${swig_generated_timestamp}")
+    set(swig_custom_products
+      BYPRODUCTS "${swig_generated_file_fullname}" ${swig_extra_generated_files})
+    set(swig_timestamp_command
+      COMMAND ${CMAKE_COMMAND} -E touch "${swig_generated_timestamp}")
+    list(APPEND swig_dependencies IMPLICIT_DEPENDS CXX "${swig_source_file_fullname}")
+  else()
+    set(swig_generated_timestamp)
+    set(swig_custom_output
+      "${swig_generated_file_fullname}" ${swig_extra_generated_files})
+    set(swig_custom_products)
+    set(swig_timestamp_command)
+    if (use_swig_dependencies)
+      cmake_path(GET infile FILENAME swig_depends_filename)
+      set(swig_depends_filename "${workingdir}/${swig_depends_filename}.d")
+      list(APPEND swig_dependencies DEPFILE "${swig_depends_filename}")
+      set(swig_depends_flags -MF "${swig_depends_filename}" -MD)
+    endif()
+  endif()
+  add_custom_command(
+    OUTPUT ${swig_custom_output}
+    ${swig_custom_products}
+    ${swig_cleanup_command}
+    # Let's create the ${outdir} at execution time, in case dir contains $(OutDir)
+    COMMAND "${CMAKE_COMMAND}" -E make_directory "${workingdir}" "${outdir}" "${outfiledir}"
+    ${swig_timestamp_command}
+    COMMAND "${CMAKE_COMMAND}" -E env "SWIG_LIB=${SWIG_DIR}" "${SWIG_EXECUTABLE}"
+    "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
+    "${swig_source_file_flags}"
+    -outdir "${swig_file_outdir}"
+    ${swig_special_flags}
+    ${swig_extra_flags}
+    ${swig_depends_flags}
+    "${swig_include_dirs}"
+    -o "${swig_generated_file_fullname}"
+    "${swig_source_file_fullname}"
+    ${swig_copy_command}
+    MAIN_DEPENDENCY "${swig_source_file_fullname}"
+    ${swig_dependencies}
+    COMMENT "Swig compile ${infile} for ${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"
+    COMMAND_EXPAND_LISTS)
+  set_source_files_properties("${swig_generated_file_fullname}" ${swig_extra_generated_files}
+    PROPERTIES GENERATED 1)
+
+  ## add all properties for generated file to various properties
+  get_property (include_directories SOURCE "${infile}" PROPERTY GENERATED_INCLUDE_DIRECTORIES)
+  set_property (SOURCE "${swig_generated_file_fullname}" PROPERTY INCLUDE_DIRECTORIES ${include_directories} $<TARGET_GENEX_EVAL:${target_name},$<TARGET_PROPERTY:${target_name},SWIG_GENERATED_INCLUDE_DIRECTORIES>>)
+
+  get_property (compile_definitions SOURCE "${infile}" PROPERTY GENERATED_COMPILE_DEFINITIONS)
+  set_property (SOURCE "${swig_generated_file_fullname}" PROPERTY COMPILE_DEFINITIONS $<TARGET_GENEX_EVAL:${target_name},$<TARGET_PROPERTY:${target_name},SWIG_GENERATED_COMPILE_DEFINITIONS>> ${compile_definitions})
+
+  get_property (compile_options SOURCE "${infile}" PROPERTY GENERATED_COMPILE_OPTIONS)
+  set_property (SOURCE "${swig_generated_file_fullname}" PROPERTY COMPILE_OPTIONS $<TARGET_GENEX_EVAL:${target_name},$<TARGET_PROPERTY:${target_name},SWIG_GENERATED_COMPILE_OPTIONS>> ${compile_options})
+
+  if (SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG MATCHES "php")
+    set_property (SOURCE "${swig_generated_file_fullname}" APPEND PROPERTY INCLUDE_DIRECTORIES "${outdir}")
+  endif()
+
+  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files} PARENT_SCOPE)
+  set(swig_timestamp "${swig_generated_timestamp}" PARENT_SCOPE)
+
+  # legacy support
+  set (swig_generated_file_fullname "${swig_generated_file_fullname}" PARENT_SCOPE)
+endfunction()
+
+#
+# Create Swig module
+#
+macro(SWIG_ADD_MODULE name language)
+  message(DEPRECATION "SWIG_ADD_MODULE is deprecated. Use SWIG_ADD_LIBRARY instead.")
+  swig_add_library(${name}
+                   LANGUAGE ${language}
+                   TYPE MODULE
+                   SOURCES ${ARGN})
+endmacro()
+
+
+function(SWIG_ADD_LIBRARY name)
+  set(options NO_PROXY)
+  set(oneValueArgs LANGUAGE
+                   TYPE
+                   OUTPUT_DIR
+                   OUTFILE_DIR)
+  set(multiValueArgs SOURCES)
+  cmake_parse_arguments(_SAM "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+  if (_SAM_UNPARSED_ARGUMENTS)
+    message(FATAL_ERROR "SWIG_ADD_LIBRARY: ${_SAM_UNPARSED_ARGUMENTS}: unexpected arguments")
+  endif()
+
+  if(NOT DEFINED _SAM_LANGUAGE)
+    message(FATAL_ERROR "SWIG_ADD_LIBRARY: Missing LANGUAGE argument")
+  endif()
+
+  if(NOT DEFINED _SAM_SOURCES)
+    message(FATAL_ERROR "SWIG_ADD_LIBRARY: Missing SOURCES argument")
+  endif()
+
+  if(NOT DEFINED _SAM_TYPE)
+    set(_SAM_TYPE MODULE)
+  elseif(_SAM_TYPE STREQUAL "USE_BUILD_SHARED_LIBS")
+    unset(_SAM_TYPE)
+  endif()
+
+  cmake_policy(GET CMP0078 target_name_policy)
+  if (target_name_policy STREQUAL "NEW")
+    set (UseSWIG_TARGET_NAME_PREFERENCE STANDARD)
+  else()
+    if (NOT target_name_policy)
+      cmake_policy(GET_WARNING CMP0078 _cmp0078_warning)
+      message(AUTHOR_WARNING "${_cmp0078_warning}\n")
+    endif()
+    if (NOT DEFINED UseSWIG_TARGET_NAME_PREFERENCE)
+      set (UseSWIG_TARGET_NAME_PREFERENCE LEGACY)
+    elseif (NOT UseSWIG_TARGET_NAME_PREFERENCE MATCHES "^(LEGACY|STANDARD)$")
+      message (FATAL_ERROR "UseSWIG_TARGET_NAME_PREFERENCE: ${UseSWIG_TARGET_NAME_PREFERENCE}: invalid value. 'LEGACY' or 'STANDARD' is expected.")
+    endif()
+  endif()
+
+  if (NOT DEFINED UseSWIG_MODULE_VERSION)
+    set (UseSWIG_MODULE_VERSION 1)
+  elseif (NOT UseSWIG_MODULE_VERSION MATCHES "^(1|2)$")
+    message (FATAL_ERROR "UseSWIG_MODULE_VERSION: ${UseSWIG_MODULE_VERSION}: invalid value. 1 or 2 is expected.")
+  endif()
+
+  set (SWIG_MODULE_${name}_NOPROXY ${_SAM_NO_PROXY})
+  swig_module_initialize(${name} ${_SAM_LANGUAGE})
+
+  # compute real target name.
+  if (UseSWIG_TARGET_NAME_PREFERENCE STREQUAL "LEGACY" AND
+      SWIG_MODULE_${name}_LANGUAGE STREQUAL "PYTHON" AND NOT SWIG_MODULE_${name}_NOPROXY)
+    # swig will produce a module.py containing an 'import _modulename' statement,
+    # which implies having a corresponding _modulename.so (*NIX), _modulename.pyd (Win32),
+    # unless the -noproxy flag is used
+    set(target_name "_${name}")
+  else()
+    set(target_name "${name}")
+  endif()
+
+  if (TARGET ${target_name})
+    # a target with same name is already defined.
+    # call NOW add_library command to raise the most useful error message
+    add_library(${target_name})
+    return()
+  endif()
+
+  set (workingdir "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${target_name}.dir")
+  # set special variable to pass extra information to command SWIG_ADD_SOURCE_TO_MODULE
+  # which cannot be changed due to legacy compatibility
+  set (SWIG_WORKING_DIR "${workingdir}")
+  set (SWIG_TARGET_NAME "${target_name}")
+
+  set (outputdir "${_SAM_OUTPUT_DIR}")
+  if (NOT _SAM_OUTPUT_DIR)
+    if (CMAKE_SWIG_OUTDIR)
+      set (outputdir "${CMAKE_SWIG_OUTDIR}")
+    else()
+      if (UseSWIG_MODULE_VERSION VERSION_GREATER 1)
+        set (outputdir "${workingdir}/${_SAM_LANGUAGE}.files")
+      else()
+        set (outputdir "${CMAKE_CURRENT_BINARY_DIR}")
+      endif()
+    endif()
+  endif()
+
+  set (outfiledir "${_SAM_OUTFILE_DIR}")
+  if(NOT _SAM_OUTFILE_DIR)
+    if (SWIG_OUTFILE_DIR)
+      set (outfiledir "${SWIG_OUTFILE_DIR}")
+    else()
+      if (_SAM_OUTPUT_DIR OR CMAKE_SWIG_OUTDIR)
+        set (outfiledir "${outputdir}")
+    else()
+        set (outfiledir "${workingdir}")
+      endif()
+    endif()
+  endif()
+  # set again, locally, predefined variables to ensure compatibility
+  # with command SWIG_ADD_SOURCE_TO_MODULE
+  set(CMAKE_SWIG_OUTDIR "${outputdir}")
+  set(SWIG_OUTFILE_DIR "${outfiledir}")
+
+  # See if the user has specified source extensions for swig files?
+  if (NOT DEFINED SWIG_SOURCE_FILE_EXTENSIONS)
+    # Assume the default (*.i) file extension for Swig source files
+    set(SWIG_SOURCE_FILE_EXTENSIONS ".i")
+  endif()
+
+  if (CMAKE_GENERATOR MATCHES "Make|Ninja|Xcode|Visual Studio (1[1-9]|[2-9][0-9])")
+    # For Makefiles, Ninja, Xcode and Visual Studio generators,
+    # use SWIG generated dependencies if requested
+    if (NOT DEFINED SWIG_USE_SWIG_DEPENDENCIES)
+        set (SWIG_USE_SWIG_DEPENDENCIES OFF)
+    endif()
+  else()
+    set (SWIG_USE_SWIG_DEPENDENCIES OFF)
+  endif()
+
+  # Generate a regex out of file extensions.
+  string(REGEX REPLACE "([$^.*+?|()-])" "\\\\\\1" swig_source_ext_regex "${SWIG_SOURCE_FILE_EXTENSIONS}")
+  list (JOIN swig_source_ext_regex "|" swig_source_ext_regex)
+  string (PREPEND swig_source_ext_regex "(")
+  string (APPEND swig_source_ext_regex ")$")
+
+  set(swig_dot_i_sources ${_SAM_SOURCES})
+  list(FILTER swig_dot_i_sources INCLUDE REGEX ${swig_source_ext_regex})
+  if (NOT swig_dot_i_sources)
+    message(FATAL_ERROR "SWIG_ADD_LIBRARY: no SWIG interface files specified")
+  endif()
+  set(swig_other_sources ${_SAM_SOURCES})
+  list(REMOVE_ITEM swig_other_sources ${swig_dot_i_sources})
+
+  set(swig_generated_sources)
+  set(swig_generated_timestamps)
+  set(swig_generated_outdirs "${outputdir}")
+  list(LENGTH swig_dot_i_sources swig_sources_count)
+  if (swig_sources_count GREATER "1")
+    # option -interface cannot be used
+    set(SWIG_USE_INTERFACE FALSE)
+  else()
+    set(SWIG_USE_INTERFACE TRUE)
+  endif()
+  foreach(swig_it IN LISTS swig_dot_i_sources)
+    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source "${swig_it}")
+    list (APPEND swig_generated_sources "${swig_generated_source}")
+    if(swig_timestamp)
+      list (APPEND swig_generated_timestamps "${swig_timestamp}")
+    endif()
+    get_source_file_property(swig_source_file_outdir "${swig_it}" OUTPUT_DIR)
+    if (swig_source_file_outdir)
+      list (APPEND swig_generated_outdirs "${swig_source_file_outdir}")
+    endif()
+  endforeach()
+  list(REMOVE_DUPLICATES swig_generated_outdirs)
+  set_property (DIRECTORY APPEND PROPERTY
+    ADDITIONAL_CLEAN_FILES ${swig_generated_sources} ${swig_generated_timestamps})
+  if (UseSWIG_MODULE_VERSION VERSION_GREATER 1)
+    set_property (DIRECTORY APPEND PROPERTY ADDITIONAL_CLEAN_FILES ${swig_generated_outdirs})
+  endif()
+
+  add_library(${target_name}
+    ${_SAM_TYPE}
+    ${swig_generated_sources}
+    ${swig_other_sources})
+  if(swig_generated_timestamps)
+    # see IMPLICIT_DEPENDS above
+    add_custom_target(${name}_swig_compilation DEPENDS ${swig_generated_timestamps})
+    add_dependencies(${target_name} ${name}_swig_compilation)
+  endif()
+  if(_SAM_TYPE STREQUAL "MODULE")
+    set_target_properties(${target_name} PROPERTIES NO_SONAME ON)
+  endif()
+  string(TOLOWER "${_SAM_LANGUAGE}" swig_lowercase_language)
+  if (swig_lowercase_language STREQUAL "octave")
+    set_target_properties(${target_name} PROPERTIES PREFIX "")
+    set_target_properties(${target_name} PROPERTIES SUFFIX ".oct")
+  elseif (swig_lowercase_language STREQUAL "go")
+    set_target_properties(${target_name} PROPERTIES PREFIX "")
+  elseif (swig_lowercase_language STREQUAL "java")
+    # In java you want:
+    #      System.loadLibrary("LIBRARY");
+    # then JNI will look for a library whose name is platform dependent, namely
+    #   MacOS  : libLIBRARY.jnilib
+    #   Windows: LIBRARY.dll
+    #   Linux  : libLIBRARY.so
+    if (APPLE)
+      set_target_properties (${target_name} PROPERTIES SUFFIX ".jnilib")
+    endif()
+    if ((WIN32 AND MINGW) OR CYGWIN OR CMAKE_SYSTEM_NAME STREQUAL "MSYS")
+      set_target_properties(${target_name} PROPERTIES PREFIX "")
+    endif()
+  elseif (swig_lowercase_language STREQUAL "lua")
+    if(_SAM_TYPE STREQUAL "MODULE")
+      set_target_properties(${target_name} PROPERTIES PREFIX "")
+    endif()
+  elseif (swig_lowercase_language STREQUAL "python")
+    if (UseSWIG_TARGET_NAME_PREFERENCE STREQUAL "STANDARD" AND NOT SWIG_MODULE_${name}_NOPROXY)
+      # swig will produce a module.py containing an 'import _modulename' statement,
+      # which implies having a corresponding _modulename.so (*NIX), _modulename.pyd (Win32),
+      # unless the -noproxy flag is used
+      set_target_properties(${target_name} PROPERTIES PREFIX "_")
+    else()
+      set_target_properties(${target_name} PROPERTIES PREFIX "")
+    endif()
+    # Python extension modules on Windows must have the extension ".pyd"
+    # instead of ".dll" as of Python 2.5.  Older python versions do support
+    # this suffix.
+    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000
+    # <quote>
+    # Windows: .dll is no longer supported as a filename extension for extension modules.
+    # .pyd is now the only filename extension that will be searched for.
+    # </quote>
+    if(WIN32 AND NOT CYGWIN)
+      set_target_properties(${target_name} PROPERTIES SUFFIX ".pyd")
+    endif()
+  elseif (swig_lowercase_language STREQUAL "r")
+    set_target_properties(${target_name} PROPERTIES PREFIX "")
+  elseif (swig_lowercase_language STREQUAL "ruby")
+    # In ruby you want:
+    #      require 'LIBRARY'
+    # then ruby will look for a library whose name is platform dependent, namely
+    #   MacOS  : LIBRARY.bundle
+    #   Windows: LIBRARY.dll
+    #   Linux  : LIBRARY.so
+    set_target_properties (${target_name} PROPERTIES PREFIX "")
+    if (APPLE)
+      set_target_properties (${target_name} PROPERTIES SUFFIX ".bundle")
+    endif ()
+  elseif (swig_lowercase_language STREQUAL "perl")
+    # assume empty prefix because we expect the module to be dynamically loaded
+    set_target_properties (${target_name} PROPERTIES PREFIX "")
+    if (APPLE)
+      set_target_properties (${target_name} PROPERTIES SUFFIX ".dylib")
+    endif ()
+  elseif (swig_lowercase_language STREQUAL "fortran")
+    # Do *not* override the target's library prefix
+  elseif (swig_lowercase_language STREQUAL "csharp")
+    cmake_policy(GET CMP0122 csharp_naming_policy)
+    if (csharp_naming_policy STREQUAL "NEW")
+      # Do *not* override the target's library prefix
+    else()
+      if (NOT csharp_naming_policy)
+        cmake_policy(GET_WARNING CMP0122 _cmp0122_warning)
+        message(AUTHOR_WARNING "${_cmp0122_warning}\n")
+      endif()
+      set_target_properties (${target_name} PROPERTIES PREFIX "")
+    endif()
+  else()
+    # assume empty prefix because we expect the module to be dynamically loaded
+    set_target_properties (${target_name} PROPERTIES PREFIX "")
+  endif ()
+
+  # target property SWIG_SUPPORT_FILES_DIRECTORY specify output directories of support files
+  set_property (TARGET ${target_name} PROPERTY SWIG_SUPPORT_FILES_DIRECTORY ${swig_generated_outdirs})
+  # target property SWIG_SUPPORT_FILES lists principal proxy support files
+  if (NOT SWIG_MODULE_${name}_NOPROXY)
+    string(TOUPPER "${_SAM_LANGUAGE}" swig_uppercase_language)
+    set(swig_all_support_files)
+    foreach (swig_it IN LISTS SWIG_${swig_uppercase_language}_EXTRA_FILE_EXTENSIONS)
+      set (swig_support_files ${swig_generated_sources})
+      list (FILTER swig_support_files INCLUDE REGEX ".*${swig_it}$")
+      list(APPEND swig_all_support_files ${swig_support_files})
+    endforeach()
+    if (swig_all_support_files)
+      list(REMOVE_DUPLICATES swig_all_support_files)
+    endif()
+    set_property (TARGET ${target_name} PROPERTY SWIG_SUPPORT_FILES ${swig_all_support_files})
+  endif()
+
+  # to ensure legacy behavior, export some variables
+  set (SWIG_MODULE_${name}_LANGUAGE "${SWIG_MODULE_${name}_LANGUAGE}" PARENT_SCOPE)
+  set (SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}" PARENT_SCOPE)
+  set (SWIG_MODULE_${name}_REAL_NAME "${target_name}" PARENT_SCOPE)
+  set (SWIG_MODULE_${name}_NOPROXY "${SWIG_MODULE_${name}_NOPROXY}" PARENT_SCOPE)
+  set (SWIG_MODULE_${name}_EXTRA_FLAGS "${SWIG_MODULE_${name}_EXTRA_FLAGS}" PARENT_SCOPE)
+  # the last one is a bit crazy but it is documented, so...
+  # NOTA: works as expected if only ONE input file is specified
+  set (swig_generated_file_fullname "${swig_generated_file_fullname}" PARENT_SCOPE)
+endfunction()
+
+#
+# Like TARGET_LINK_LIBRARIES but for swig modules
+#
+function(SWIG_LINK_LIBRARIES name)
+  if (UseSWIG_TARGET_NAME_PREFERENCE STREQUAL "STANDARD")
+    message(DEPRECATION "SWIG_LINK_LIBRARIES is deprecated. Use TARGET_LINK_LIBRARIES instead.")
+    target_link_libraries(${name} ${ARGN})
+  else()
+    if(SWIG_MODULE_${name}_REAL_NAME)
+      target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})
+    else()
+      message(SEND_ERROR "Cannot find Swig library \"${name}\".")
+    endif()
+  endif()
+endfunction()
+
+cmake_policy(POP)
diff --git a/share/cmake-3.22/Modules/UseSWIG/ManageSupportFiles.cmake b/share/cmake-3.22/Modules/UseSWIG/ManageSupportFiles.cmake
new file mode 100644
index 0000000..6618fd5
--- /dev/null
+++ b/share/cmake-3.22/Modules/UseSWIG/ManageSupportFiles.cmake
@@ -0,0 +1,31 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+
+if (ACTION STREQUAL "CLEAN")
+  # Collect current list of generated files
+  file (GLOB_RECURSE files LIST_DIRECTORIES TRUE RELATIVE "${SUPPORT_FILES_WORKING_DIRECTORY}" "${SUPPORT_FILES_WORKING_DIRECTORY}/*")
+
+  if (files)
+    # clean-up the output directory
+    ## compute full paths
+    list (TRANSFORM files PREPEND "${SUPPORT_FILES_OUTPUT_DIRECTORY}/")
+    ## remove generated files from the output directory
+    file (REMOVE ${files})
+
+    # clean-up working directory
+    file (REMOVE_RECURSE "${SUPPORT_FILES_WORKING_DIRECTORY}")
+  endif()
+
+  file (MAKE_DIRECTORY "${SUPPORT_FILES_WORKING_DIRECTORY}")
+endif()
+
+if (ACTION STREQUAL "COPY")
+  # Collect current list of generated files
+  file (GLOB files LIST_DIRECTORIES TRUE "${SUPPORT_FILES_WORKING_DIRECTORY}/*")
+
+  if (files)
+    # copy files to the output directory
+    file (COPY ${files} DESTINATION "${SUPPORT_FILES_OUTPUT_DIRECTORY}")
+  endif()
+endif()
diff --git a/share/cmake-3.18/Modules/Use_wxWindows.cmake b/share/cmake-3.22/Modules/Use_wxWindows.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/Use_wxWindows.cmake
rename to share/cmake-3.22/Modules/Use_wxWindows.cmake
diff --git a/share/cmake-3.18/Modules/UsewxWidgets.cmake b/share/cmake-3.22/Modules/UsewxWidgets.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/UsewxWidgets.cmake
rename to share/cmake-3.22/Modules/UsewxWidgets.cmake
diff --git a/share/cmake-3.22/Modules/VTKCompatibility.cmake b/share/cmake-3.22/Modules/VTKCompatibility.cmake
new file mode 100644
index 0000000..4ee7643
--- /dev/null
+++ b/share/cmake-3.22/Modules/VTKCompatibility.cmake
@@ -0,0 +1,46 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+# Not needed for "modern" VTK.
+if (EXISTS "${VTK_SOURCE_DIR}/CMake/vtkModule.cmake")
+  return ()
+endif ()
+
+if(APPLE)
+  set(CMAKE_CXX_CREATE_SHARED_LIBRARY "${CMAKE_C_CREATE_SHARED_LIBRARY}")
+  set(CMAKE_CXX_CREATE_SHARED_MODULE "${CMAKE_C_CREATE_SHARED_MODULE}")
+  string( REGEX REPLACE "CMAKE_C_COMPILER"
+    CMAKE_CXX_COMPILER CMAKE_CXX_CREATE_SHARED_MODULE
+    "${CMAKE_CXX_CREATE_SHARED_MODULE}")
+  string( REGEX REPLACE "CMAKE_C_COMPILER"
+    CMAKE_CXX_COMPILER CMAKE_CXX_CREATE_SHARED_LIBRARY
+    "${CMAKE_CXX_CREATE_SHARED_LIBRARY}")
+endif()
+
+set(VTKFTGL_BINARY_DIR "${VTK_BINARY_DIR}/Utilities/ftgl"
+  CACHE INTERNAL "")
+set(VTKFREETYPE_BINARY_DIR "${VTK_BINARY_DIR}/Utilities/freetype"
+  CACHE INTERNAL "")
+set(VTKFTGL_SOURCE_DIR "${VTK_SOURCE_DIR}/Utilities/ftgl"
+  CACHE INTERNAL "")
+set(VTKFREETYPE_SOURCE_DIR "${VTK_SOURCE_DIR}/Utilities/freetype"
+  CACHE INTERNAL "")
+
+set(VTK_GLEXT_FILE "${VTK_SOURCE_DIR}/Utilities/ParseOGLExt/headers/glext.h"
+  CACHE FILEPATH
+  "Location of the OpenGL extensions header file (glext.h).")
+set(VTK_GLXEXT_FILE
+  "${VTK_SOURCE_DIR}/Utilities/ParseOGLExt/headers/glxext.h" CACHE FILEPATH
+  "Location of the GLX extensions header file (glxext.h).")
+set(VTK_WGLEXT_FILE "${VTK_SOURCE_DIR}/Utilities/ParseOGLExt/headers/wglext.h"
+  CACHE FILEPATH
+  "Location of the WGL extensions header file (wglext.h).")
+
+# work around an old bug in VTK
+set(TIFF_RIGHT_VERSION 1)
+
+# for very old VTK (versions prior to 4.2)
+macro(SOURCE_FILES)
+  message (FATAL_ERROR "You are trying to build a very old version of VTK (prior to VTK 4.2). To do this you need to use CMake 2.0 as it was the last version of CMake to support VTK 4.0.")
+endmacro()
+
diff --git a/share/cmake-3.18/Modules/WriteBasicConfigVersionFile.cmake b/share/cmake-3.22/Modules/WriteBasicConfigVersionFile.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/WriteBasicConfigVersionFile.cmake
rename to share/cmake-3.22/Modules/WriteBasicConfigVersionFile.cmake
diff --git a/share/cmake-3.22/Modules/WriteCompilerDetectionHeader.cmake b/share/cmake-3.22/Modules/WriteCompilerDetectionHeader.cmake
new file mode 100644
index 0000000..0e4e028
--- /dev/null
+++ b/share/cmake-3.22/Modules/WriteCompilerDetectionHeader.cmake
@@ -0,0 +1,845 @@
+# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
+
+#[=======================================================================[.rst:
+WriteCompilerDetectionHeader
+----------------------------
+
+.. deprecated:: 3.20
+  This module is available only if policy :policy:`CMP0120`
+  is not set to ``NEW``.  Do not use it in new code.
+
+.. versionadded:: 3.1
+
+This module provides the function ``write_compiler_detection_header()``.
+
+This function can be used to generate a file suitable for preprocessor
+inclusion which contains macros to be used in source code::
+
+   write_compiler_detection_header(
+             FILE <file>
+             PREFIX <prefix>
+             [OUTPUT_FILES_VAR <output_files_var> OUTPUT_DIR <output_dir>]
+             COMPILERS <compiler> [...]
+             FEATURES <feature> [...]
+             [BARE_FEATURES <feature> [...]]
+             [VERSION <version>]
+             [PROLOG <prolog>]
+             [EPILOG <epilog>]
+             [ALLOW_UNKNOWN_COMPILERS]
+             [ALLOW_UNKNOWN_COMPILER_VERSIONS]
+   )
+
+This generates the file ``<file>`` with macros which all have the prefix
+``<prefix>``.
+
+By default, all content is written directly to the ``<file>``.  The
+``OUTPUT_FILES_VAR`` may be specified to cause the compiler-specific
+content to be written to separate files.  The separate files are then
+available in the ``<output_files_var>`` and may be consumed by the caller
+for installation for example.  The ``OUTPUT_DIR`` specifies a relative
+path from the main ``<file>`` to the compiler-specific files. For example:
+
+.. code-block:: cmake
+
+   write_compiler_detection_header(
+     FILE climbingstats_compiler_detection.h
+     PREFIX ClimbingStats
+     OUTPUT_FILES_VAR support_files
+     OUTPUT_DIR compilers
+     COMPILERS GNU Clang MSVC Intel
+     FEATURES cxx_variadic_templates
+   )
+   install(FILES
+     ${CMAKE_CURRENT_BINARY_DIR}/climbingstats_compiler_detection.h
+     DESTINATION include
+   )
+   install(FILES
+     ${support_files}
+     DESTINATION include/compilers
+   )
+
+
+``VERSION`` may be used to specify the API version to be generated.
+Future versions of CMake may introduce alternative APIs.  A given
+API is selected by any ``<version>`` value greater than or equal
+to the version of CMake that introduced the given API and less
+than the version of CMake that introduced its succeeding API.
+The value of the :variable:`CMAKE_MINIMUM_REQUIRED_VERSION`
+variable is used if no explicit version is specified.
+(As of CMake version |release| there is only one API version.)
+
+``PROLOG`` may be specified as text content to write at the start of the
+header. ``EPILOG`` may be specified as text content to write at the end
+of the header
+
+At least one ``<compiler>`` and one ``<feature>`` must be listed.  Compilers
+which are known to CMake, but not specified are detected and a preprocessor
+``#error`` is generated for them.  A preprocessor macro matching
+``<PREFIX>_COMPILER_IS_<compiler>`` is generated for each compiler
+known to CMake to contain the value ``0`` or ``1``.
+
+Possible compiler identifiers are documented with the
+:variable:`CMAKE_<LANG>_COMPILER_ID` variable.
+Available features in this version of CMake are listed in the
+:prop_gbl:`CMAKE_C_KNOWN_FEATURES` and
+:prop_gbl:`CMAKE_CXX_KNOWN_FEATURES` global properties.
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features.
+
+.. versionadded:: 3.2
+  Added ``MSVC`` and ``AppleClang`` compiler support.
+
+.. versionadded:: 3.6
+  Added ``Intel`` compiler support.
+
+.. versionchanged:: 3.8
+  The ``{c,cxx}_std_*`` meta-features are ignored if requested.
+
+.. versionadded:: 3.8
+  ``ALLOW_UNKNOWN_COMPILERS`` and ``ALLOW_UNKNOWN_COMPILER_VERSIONS`` cause
+  the module to generate conditions that treat unknown compilers as simply
+  lacking all features.  Without these options the default behavior is to
+  generate a ``#error`` for unknown compilers and versions.
+
+.. versionadded:: 3.12
+  ``BARE_FEATURES`` will define the compatibility macros with the name used in
+  newer versions of the language standard, so the code can use the new feature
+  name unconditionally.
+
+Feature Test Macros
+===================
+
+For each compiler, a preprocessor macro is generated matching
+``<PREFIX>_COMPILER_IS_<compiler>`` which has the content either ``0``
+or ``1``, depending on the compiler in use. Preprocessor macros for
+compiler version components are generated matching
+``<PREFIX>_COMPILER_VERSION_MAJOR`` ``<PREFIX>_COMPILER_VERSION_MINOR``
+and ``<PREFIX>_COMPILER_VERSION_PATCH`` containing decimal values
+for the corresponding compiler version components, if defined.
+
+A preprocessor test is generated based on the compiler version
+denoting whether each feature is enabled.  A preprocessor macro
+matching ``<PREFIX>_COMPILER_<FEATURE>``, where ``<FEATURE>`` is the
+upper-case ``<feature>`` name, is generated to contain the value
+``0`` or ``1`` depending on whether the compiler in use supports the
+feature:
+
+.. code-block:: cmake
+
+   write_compiler_detection_header(
+     FILE climbingstats_compiler_detection.h
+     PREFIX ClimbingStats
+     COMPILERS GNU Clang AppleClang MSVC Intel
+     FEATURES cxx_variadic_templates
+   )
+
+.. code-block:: c++
+
+   #if ClimbingStats_COMPILER_CXX_VARIADIC_TEMPLATES
+   template<typename... T>
+   void someInterface(T t...) { /* ... */ }
+   #else
+   // Compatibility versions
+   template<typename T1>
+   void someInterface(T1 t1) { /* ... */ }
+   template<typename T1, typename T2>
+   void someInterface(T1 t1, T2 t2) { /* ... */ }
+   template<typename T1, typename T2, typename T3>
+   void someInterface(T1 t1, T2 t2, T3 t3) { /* ... */ }
+   #endif
+
+Symbol Macros
+=============
+
+Some additional symbol-defines are created for particular features for
+use as symbols which may be conditionally defined empty:
+
+.. code-block:: c++
+
+   class MyClass ClimbingStats_FINAL
+   {
+       ClimbingStats_CONSTEXPR int someInterface() { return 42; }
+   };
+
+The ``ClimbingStats_FINAL`` macro will expand to ``final`` if the
+compiler (and its flags) support the ``cxx_final`` feature, and the
+``ClimbingStats_CONSTEXPR`` macro will expand to ``constexpr``
+if ``cxx_constexpr`` is supported.
+
+If ``BARE_FEATURES cxx_final`` was given as argument the ``final`` keyword
+will be defined for old compilers, too.
+
+The following features generate corresponding symbol defines and if they
+are available as ``BARE_FEATURES``:
+
+========================== =================================== ================= ======
+        Feature                          Define                      Symbol       bare
+========================== =================================== ================= ======
+``c_restrict``              ``<PREFIX>_RESTRICT``               ``restrict``      yes
+``cxx_constexpr``           ``<PREFIX>_CONSTEXPR``              ``constexpr``     yes
+``cxx_deleted_functions``   ``<PREFIX>_DELETED_FUNCTION``       ``= delete``
+``cxx_extern_templates``    ``<PREFIX>_EXTERN_TEMPLATE``        ``extern``
+``cxx_final``               ``<PREFIX>_FINAL``                  ``final``         yes
+``cxx_noexcept``            ``<PREFIX>_NOEXCEPT``               ``noexcept``      yes
+``cxx_noexcept``            ``<PREFIX>_NOEXCEPT_EXPR(X)``       ``noexcept(X)``
+``cxx_override``            ``<PREFIX>_OVERRIDE``               ``override``      yes
+========================== =================================== ================= ======
+
+Compatibility Implementation Macros
+===================================
+
+Some features are suitable for wrapping in a macro with a backward
+compatibility implementation if the compiler does not support the feature.
+
+When the ``cxx_static_assert`` feature is not provided by the compiler,
+a compatibility implementation is available via the
+``<PREFIX>_STATIC_ASSERT(COND)`` and
+``<PREFIX>_STATIC_ASSERT_MSG(COND, MSG)`` function-like macros. The macros
+expand to ``static_assert`` where that compiler feature is available, and
+to a compatibility implementation otherwise. In the first form, the
+condition is stringified in the message field of ``static_assert``.  In
+the second form, the message ``MSG`` is passed to the message field of
+``static_assert``, or ignored if using the backward compatibility
+implementation.
+
+The ``cxx_attribute_deprecated`` feature provides a macro definition
+``<PREFIX>_DEPRECATED``, which expands to either the standard
+``[[deprecated]]`` attribute or a compiler-specific decorator such
+as ``__attribute__((__deprecated__))`` used by GNU compilers.
+
+The ``cxx_alignas`` feature provides a macro definition
+``<PREFIX>_ALIGNAS`` which expands to either the standard ``alignas``
+decorator or a compiler-specific decorator such as
+``__attribute__ ((__aligned__))`` used by GNU compilers.
+
+The ``cxx_alignof`` feature provides a macro definition
+``<PREFIX>_ALIGNOF`` which expands to either the standard ``alignof``
+decorator or a compiler-specific decorator such as ``__alignof__``
+used by GNU compilers.
+
+============================= ================================ ===================== ======
+          Feature                          Define                     Symbol          bare
+============================= ================================ ===================== ======
+``cxx_alignas``                ``<PREFIX>_ALIGNAS``             ``alignas``
+``cxx_alignof``                ``<PREFIX>_ALIGNOF``             ``alignof``
+``cxx_nullptr``                ``<PREFIX>_NULLPTR``             ``nullptr``           yes
+``cxx_static_assert``          ``<PREFIX>_STATIC_ASSERT``       ``static_assert``
+``cxx_static_assert``          ``<PREFIX>_STATIC_ASSERT_MSG``   ``static_assert``
+``cxx_attribute_deprecated``   ``<PREFIX>_DEPRECATED``          ``[[deprecated]]``
+``cxx_attribute_deprecated``   ``<PREFIX>_DEPRECATED_MSG``      ``[[deprecated]]``
+``cxx_thread_local``           ``<PREFIX>_THREAD_LOCAL``        ``thread_local``
+============================= ================================ ===================== ======
+
+A use-case which arises with such deprecation macros is the deprecation
+of an entire library.  In that case, all public API in the library may
+be decorated with the ``<PREFIX>_DEPRECATED`` macro.  This results in
+very noisy build output when building the library itself, so the macro
+may be may be defined to empty in that case when building the deprecated
+library:
+
+.. code-block:: cmake
+
+  add_library(compat_support ${srcs})
+  target_compile_definitions(compat_support
+    PRIVATE
+      CompatSupport_DEPRECATED=
+  )
+
+.. _`WCDH Example Usage`:
+
+Example Usage
+=============
+
+.. note::
+
+  This section was migrated from the :manual:`cmake-compile-features(7)`
+  manual since it relies on the ``WriteCompilerDetectionHeader`` module
+  which is removed by policy :policy:`CMP0120`.
+
+Compile features may be preferred if available, without creating a hard
+requirement.  For example, a library may provide alternative
+implementations depending on whether the ``cxx_variadic_templates``
+feature is available:
+
+.. code-block:: c++
+
+  #if Foo_COMPILER_CXX_VARIADIC_TEMPLATES
+  template<int I, int... Is>
+  struct Interface;
+
+  template<int I>
+  struct Interface<I>
+  {
+    static int accumulate()
+    {
+      return I;
+    }
+  };
+
+  template<int I, int... Is>
+  struct Interface
+  {
+    static int accumulate()
+    {
+      return I + Interface<Is...>::accumulate();
+    }
+  };
+  #else
+  template<int I1, int I2 = 0, int I3 = 0, int I4 = 0>
+  struct Interface
+  {
+    static int accumulate() { return I1 + I2 + I3 + I4; }
+  };
+  #endif
+
+Such an interface depends on using the correct preprocessor defines for the
+compiler features.  CMake can generate a header file containing such
+defines using the :module:`WriteCompilerDetectionHeader` module.  The
+module contains the ``write_compiler_detection_header`` function which
+accepts parameters to control the content of the generated header file:
+
+.. code-block:: cmake
+
+  write_compiler_detection_header(
+    FILE "${CMAKE_CURRENT_BINARY_DIR}/foo_compiler_detection.h"
+    PREFIX Foo
+    COMPILERS GNU
+    FEATURES
+      cxx_variadic_templates
+  )
+
+Such a header file may be used internally in the source code of a project,
+and it may be installed and used in the interface of library code.
+
+For each feature listed in ``FEATURES``, a preprocessor definition
+is created in the header file, and defined to either ``1`` or ``0``.
+
+Additionally, some features call for additional defines, such as the
+``cxx_final`` and ``cxx_override`` features. Rather than being used in
+``#ifdef`` code, the ``final`` keyword is abstracted by a symbol
+which is defined to either ``final``, a compiler-specific equivalent, or
+to empty.  That way, C++ code can be written to unconditionally use the
+symbol, and compiler support determines what it is expanded to:
+
+.. code-block:: c++
+
+  struct Interface {
+    virtual void Execute() = 0;
+  };
+
+  struct Concrete Foo_FINAL {
+    void Execute() Foo_OVERRIDE;
+  };
+
+In this case, ``Foo_FINAL`` will expand to ``final`` if the
+compiler supports the keyword, or to empty otherwise.
+
+In this use-case, the project code may wish to enable a particular language
+standard if available from the compiler. The :prop_tgt:`CXX_STANDARD`
+target property may be set to the desired language standard for a particular
+target, and the :variable:`CMAKE_CXX_STANDARD` variable may be set to
+influence all following targets:
+
+.. code-block:: cmake
+
+  write_compiler_detection_header(
+    FILE "${CMAKE_CURRENT_BINARY_DIR}/foo_compiler_detection.h"
+    PREFIX Foo
+    COMPILERS GNU
+    FEATURES
+      cxx_final cxx_override
+  )
+
+  # Includes foo_compiler_detection.h and uses the Foo_FINAL symbol
+  # which will expand to 'final' if the compiler supports the requested
+  # CXX_STANDARD.
+  add_library(foo foo.cpp)
+  set_property(TARGET foo PROPERTY CXX_STANDARD 11)
+
+  # Includes foo_compiler_detection.h and uses the Foo_FINAL symbol
+  # which will expand to 'final' if the compiler supports the feature,
+  # even though CXX_STANDARD is not set explicitly.  The requirement of
+  # cxx_constexpr causes CMake to set CXX_STANDARD internally, which
+  # affects the compile flags.
+  add_library(foo_impl foo_impl.cpp)
+  target_compile_features(foo_impl PRIVATE cxx_constexpr)
+
+The ``write_compiler_detection_header`` function also creates compatibility
+code for other features which have standard equivalents.  For example, the
+``cxx_static_assert`` feature is emulated with a template and abstracted
+via the ``<PREFIX>_STATIC_ASSERT`` and ``<PREFIX>_STATIC_ASSERT_MSG``
+function-macros.
+#]=======================================================================]
+
+# Guard against inclusion by absolute path.
+cmake_policy(GET CMP0120 _WCDH_policy)
+if(_WCDH_policy STREQUAL "NEW")
+  message(FATAL_ERROR "The WriteCompilerDetectionHeader module has been removed by policy CMP0120.")
+elseif(_WCDH_policy STREQUAL "")
+  message(AUTHOR_WARNING
+    "The WriteCompilerDetectionHeader module will be removed by policy CMP0120.  "
+    "Projects should be ported away from the module, perhaps by bundling a copy "
+    "of the generated header or using a third-party alternative."
+    )
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/CMakeCompilerIdDetection.cmake)
+
+function(_load_compiler_variables CompilerId lang)
+  include("${CMAKE_ROOT}/Modules/Compiler/${CompilerId}-${lang}-FeatureTests.cmake" OPTIONAL)
+  set(_cmake_oldestSupported_${CompilerId} ${_cmake_oldestSupported} PARENT_SCOPE)
+  foreach(feature ${ARGN})
+    set(_cmake_feature_test_${CompilerId}_${feature} ${_cmake_feature_test_${feature}} PARENT_SCOPE)
+  endforeach()
+  include("${CMAKE_ROOT}/Modules/Compiler/${CompilerId}-${lang}-DetermineCompiler.cmake" OPTIONAL
+      RESULT_VARIABLE determinedCompiler)
+  if (NOT determinedCompiler)
+    include("${CMAKE_ROOT}/Modules/Compiler/${CompilerId}-DetermineCompiler.cmake" OPTIONAL)
+  endif()
+  set(_compiler_id_version_compute_${CompilerId} ${_compiler_id_version_compute} PARENT_SCOPE)
+endfunction()
+
+macro(_simpledefine FEATURE_NAME FEATURE_TESTNAME FEATURE_STRING FEATURE_DEFAULT_STRING)
+  if (feature STREQUAL "${FEATURE_NAME}")
+        set(def_value "${prefix_arg}_${FEATURE_TESTNAME}")
+        string(APPEND file_content "
+#  if defined(${def_name}) && ${def_name}
+#    define ${def_value} ${FEATURE_STRING}
+#  else
+#    define ${def_value} ${FEATURE_DEFAULT_STRING}
+#  endif
+\n")
+  endif()
+endmacro()
+
+macro(_simplebaredefine FEATURE_NAME FEATURE_STRING FEATURE_DEFAULT_STRING)
+  if (feature STREQUAL "${FEATURE_NAME}")
+        string(APPEND file_content "
+#  if !(defined(${def_name}) && ${def_name})
+#    define ${FEATURE_STRING} ${FEATURE_DEFAULT_STRING}
+#  endif
+\n")
+  endif()
+endmacro()
+
+function(_check_feature_lists C_FEATURE_VAR CXX_FEATURE_VAR)
+  foreach(feature ${ARGN})
+    if (feature MATCHES "^c_std_")
+      # ignored
+    elseif (feature MATCHES "^cxx_std_")
+      # ignored
+    elseif (feature MATCHES "^cxx_")
+      list(APPEND _langs CXX)
+      list(APPEND ${CXX_FEATURE_VAR} ${feature})
+    elseif (feature MATCHES "^c_")
+      list(APPEND _langs C)
+      list(APPEND ${C_FEATURE_VAR} ${feature})
+    else()
+      message(FATAL_ERROR "Unsupported feature ${feature}.")
+    endif()
+  endforeach()
+  set(${C_FEATURE_VAR} ${${C_FEATURE_VAR}} PARENT_SCOPE)
+  set(${CXX_FEATURE_VAR} ${${CXX_FEATURE_VAR}} PARENT_SCOPE)
+  set(_langs ${_langs} PARENT_SCOPE)
+endfunction()
+
+function(write_compiler_detection_header
+    file_keyword file_arg
+    prefix_keyword prefix_arg
+    )
+  if (NOT "x${file_keyword}" STREQUAL "xFILE")
+    message(FATAL_ERROR "write_compiler_detection_header: FILE parameter missing.")
+  endif()
+  if (NOT "x${prefix_keyword}" STREQUAL "xPREFIX")
+    message(FATAL_ERROR "write_compiler_detection_header: PREFIX parameter missing.")
+  endif()
+  set(options ALLOW_UNKNOWN_COMPILERS ALLOW_UNKNOWN_COMPILER_VERSIONS)
+  set(oneValueArgs VERSION EPILOG PROLOG OUTPUT_FILES_VAR OUTPUT_DIR)
+  set(multiValueArgs COMPILERS FEATURES BARE_FEATURES)
+  cmake_parse_arguments(_WCD "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+  if (NOT _WCD_COMPILERS)
+    message(FATAL_ERROR "Invalid arguments.  write_compiler_detection_header requires at least one compiler.")
+  endif()
+  if (NOT _WCD_FEATURES AND NOT _WCD_BARE_FEATURES)
+    message(FATAL_ERROR "Invalid arguments.  write_compiler_detection_header requires at least one feature.")
+  endif()
+
+  if(_WCD_UNPARSED_ARGUMENTS)
+    message(FATAL_ERROR "Unparsed arguments: ${_WCD_UNPARSED_ARGUMENTS}")
+  endif()
+
+  if (prefix_arg STREQUAL "")
+    message(FATAL_ERROR "A prefix must be specified")
+  endif()
+  string(MAKE_C_IDENTIFIER ${prefix_arg} cleaned_prefix)
+  if (NOT prefix_arg STREQUAL cleaned_prefix)
+    message(FATAL_ERROR "The prefix must be a valid C identifier.")
+  endif()
+
+  if(NOT _WCD_VERSION)
+    set(_WCD_VERSION ${CMAKE_MINIMUM_REQUIRED_VERSION})
+  endif()
+  set(_min_version 3.1.0) # Version which introduced this function
+  if (_WCD_VERSION VERSION_LESS _min_version)
+    set(err "VERSION compatibility for write_compiler_detection_header is set to ${_WCD_VERSION}, which is too low.")
+    string(APPEND err "  It must be set to at least ${_min_version}.  ")
+    string(APPEND err "  Either set the VERSION parameter to the write_compiler_detection_header function, or update")
+    string(APPEND err " your minimum required CMake version with the cmake_minimum_required command.")
+    message(FATAL_ERROR "${err}")
+  endif()
+
+  if(_WCD_OUTPUT_FILES_VAR)
+    if(NOT _WCD_OUTPUT_DIR)
+      message(FATAL_ERROR "If OUTPUT_FILES_VAR is specified, then OUTPUT_DIR must also be specified.")
+    endif()
+  endif()
+  if(_WCD_OUTPUT_DIR)
+    if(NOT _WCD_OUTPUT_FILES_VAR)
+      message(FATAL_ERROR "If OUTPUT_DIR is specified, then OUTPUT_FILES_VAR must also be specified.")
+    endif()
+    get_filename_component(main_file_dir ${file_arg} DIRECTORY)
+    if (NOT IS_ABSOLUTE ${main_file_dir})
+      set(main_file_dir "${CMAKE_CURRENT_BINARY_DIR}/${main_file_dir}")
+    endif()
+    if (NOT IS_ABSOLUTE ${_WCD_OUTPUT_DIR})
+      set(_WCD_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/${_WCD_OUTPUT_DIR}")
+    endif()
+    get_filename_component(out_file_dir ${_WCD_OUTPUT_DIR} ABSOLUTE)
+    string(FIND ${out_file_dir} ${main_file_dir} idx)
+    if (NOT idx EQUAL 0)
+      message(FATAL_ERROR "The compiler-specific output directory must be within the same directory as the main file.")
+    endif()
+
+    if (main_file_dir STREQUAL out_file_dir)
+      unset(_WCD_OUTPUT_DIR)
+    else()
+      string(REPLACE "${main_file_dir}/" "" _WCD_OUTPUT_DIR "${out_file_dir}/")
+    endif()
+  endif()
+
+  set(compilers
+    GNU
+    Clang
+    AppleClang
+    MSVC
+    SunPro
+    Intel
+  )
+
+  set(_hex_compilers ADSP Borland Embarcadero SunPro)
+
+  foreach(_comp ${_WCD_COMPILERS})
+    list(FIND compilers ${_comp} idx)
+    if (idx EQUAL -1)
+      message(FATAL_ERROR "Unsupported compiler ${_comp}.")
+    endif()
+    if (NOT _need_hex_conversion)
+      list(FIND _hex_compilers ${_comp} idx)
+      if (NOT idx EQUAL -1)
+        set(_need_hex_conversion TRUE)
+      endif()
+    endif()
+  endforeach()
+
+  set(file_content "
+// This is a generated file. Do not edit!
+
+#ifndef ${prefix_arg}_COMPILER_DETECTION_H
+#define ${prefix_arg}_COMPILER_DETECTION_H
+")
+
+  if (_WCD_PROLOG)
+    string(APPEND file_content "\n${_WCD_PROLOG}\n")
+  endif()
+
+  if (_need_hex_conversion)
+    string(APPEND file_content "
+#define ${prefix_arg}_DEC(X) (X)
+#define ${prefix_arg}_HEX(X) ( \\
+    ((X)>>28 & 0xF) * 10000000 + \\
+    ((X)>>24 & 0xF) *  1000000 + \\
+    ((X)>>20 & 0xF) *   100000 + \\
+    ((X)>>16 & 0xF) *    10000 + \\
+    ((X)>>12 & 0xF) *     1000 + \\
+    ((X)>>8  & 0xF) *      100 + \\
+    ((X)>>4  & 0xF) *       10 + \\
+    ((X)     & 0xF) \\
+    )\n")
+  endif()
+
+  _check_feature_lists(C_features CXX_features ${_WCD_FEATURES})
+  _check_feature_lists(C_bare_features CXX_bare_features ${_WCD_BARE_FEATURES})
+  list(REMOVE_DUPLICATES _langs)
+
+  if(_WCD_OUTPUT_FILES_VAR)
+    get_filename_component(main_file_name ${file_arg} NAME)
+    set(compiler_file_content_
+"#ifndef ${prefix_arg}_COMPILER_DETECTION_H
+#  error This file may only be included from ${main_file_name}
+#endif\n")
+  endif()
+
+  foreach(_lang ${_langs})
+    set(target_compilers)
+    foreach(compiler ${_WCD_COMPILERS})
+      _load_compiler_variables(${compiler} ${_lang} ${${_lang}_features})
+      if(_cmake_oldestSupported_${compiler})
+        list(APPEND target_compilers ${compiler})
+      endif()
+    endforeach()
+
+    get_property(known_features GLOBAL PROPERTY CMAKE_${_lang}_KNOWN_FEATURES)
+    foreach(feature ${${_lang}_features})
+      list(FIND known_features ${feature} idx)
+      if (idx EQUAL -1)
+        message(FATAL_ERROR "Unsupported feature ${feature}.")
+      endif()
+    endforeach()
+
+    if(_lang STREQUAL CXX)
+      string(APPEND file_content "\n#ifdef __cplusplus\n")
+    else()
+      string(APPEND file_content "\n#ifndef __cplusplus\n")
+    endif()
+
+    compiler_id_detection(ID_CONTENT ${_lang} PREFIX ${prefix_arg}_
+      ID_DEFINE
+    )
+
+    string(APPEND file_content "${ID_CONTENT}\n")
+
+    set(pp_if "if")
+    foreach(compiler ${target_compilers})
+      string(APPEND file_content "\n#  ${pp_if} ${prefix_arg}_COMPILER_IS_${compiler}\n")
+
+      if(_WCD_OUTPUT_FILES_VAR)
+        set(compile_file_name "${_WCD_OUTPUT_DIR}${prefix_arg}_COMPILER_INFO_${compiler}_${_lang}.h")
+        string(APPEND file_content "\n#    include \"${compile_file_name}\"\n")
+      endif()
+
+      if(_WCD_OUTPUT_FILES_VAR)
+        set(compiler_file_content compiler_file_content_${compiler}_${_lang})
+      else()
+        set(compiler_file_content file_content)
+      endif()
+
+      if(NOT _WCD_ALLOW_UNKNOWN_COMPILER_VERSIONS)
+        string(APPEND ${compiler_file_content} "
+#    if !(${_cmake_oldestSupported_${compiler}})
+#      error Unsupported compiler version
+#    endif\n")
+      endif()
+
+      set(PREFIX ${prefix_arg}_)
+      if (_need_hex_conversion)
+        set(MACRO_DEC ${prefix_arg}_DEC)
+        set(MACRO_HEX ${prefix_arg}_HEX)
+      else()
+        set(MACRO_DEC)
+        set(MACRO_HEX)
+      endif()
+      string(CONFIGURE "${_compiler_id_version_compute_${compiler}}" VERSION_BLOCK @ONLY)
+      string(APPEND ${compiler_file_content} "${VERSION_BLOCK}\n")
+      set(PREFIX)
+      set(MACRO_DEC)
+      set(MACRO_HEX)
+
+      set(pp_if "elif")
+      foreach(feature ${${_lang}_features})
+        string(TOUPPER ${feature} feature_upper)
+        set(feature_PP "COMPILER_${feature_upper}")
+        set(_define_item "\n#    define ${prefix_arg}_${feature_PP} 0\n")
+        if (_cmake_feature_test_${compiler}_${feature} STREQUAL "1")
+          set(_define_item "\n#    define ${prefix_arg}_${feature_PP} 1\n")
+        elseif (_cmake_feature_test_${compiler}_${feature})
+          set(_define_item "\n#      define ${prefix_arg}_${feature_PP} 0\n")
+          set(_define_item "\n#    if ${_cmake_feature_test_${compiler}_${feature}}\n#      define ${prefix_arg}_${feature_PP} 1\n#    else${_define_item}#    endif\n")
+        endif()
+        string(APPEND ${compiler_file_content} "${_define_item}")
+      endforeach()
+    endforeach()
+    if(pp_if STREQUAL "elif")
+      if(_WCD_ALLOW_UNKNOWN_COMPILERS)
+        string(APPEND file_content "
+#  endif\n")
+      else()
+        string(APPEND file_content "
+#  else
+#    error Unsupported compiler
+#  endif\n")
+      endif()
+    endif()
+    foreach(feature ${${_lang}_features})
+      string(TOUPPER ${feature} feature_upper)
+      set(feature_PP "COMPILER_${feature_upper}")
+      set(def_name ${prefix_arg}_${feature_PP})
+      _simpledefine(c_restrict RESTRICT restrict "")
+      _simpledefine(cxx_constexpr CONSTEXPR constexpr "")
+      _simpledefine(cxx_final FINAL final "")
+      _simpledefine(cxx_override OVERRIDE override "")
+      if (feature STREQUAL cxx_static_assert)
+        set(def_value "${prefix_arg}_STATIC_ASSERT(X)")
+        set(def_value_msg "${prefix_arg}_STATIC_ASSERT_MSG(X, MSG)")
+        set(def_fallback "enum { ${prefix_arg}_STATIC_ASSERT_JOIN(${prefix_arg}StaticAssertEnum, __LINE__) = sizeof(${prefix_arg}StaticAssert<X>) }")
+        string(APPEND file_content "#  if defined(${def_name}) && ${def_name}
+#    define ${def_value} static_assert(X, #X)
+#    define ${def_value_msg} static_assert(X, MSG)
+#  else
+#    define ${prefix_arg}_STATIC_ASSERT_JOIN(X, Y) ${prefix_arg}_STATIC_ASSERT_JOIN_IMPL(X, Y)
+#    define ${prefix_arg}_STATIC_ASSERT_JOIN_IMPL(X, Y) X##Y
+template<bool> struct ${prefix_arg}StaticAssert;
+template<> struct ${prefix_arg}StaticAssert<true>{};
+#    define ${def_value} ${def_fallback}
+#    define ${def_value_msg} ${def_fallback}
+#  endif
+\n")
+      endif()
+      if (feature STREQUAL cxx_alignas)
+        set(def_value "${prefix_arg}_ALIGNAS(X)")
+        string(APPEND file_content "
+#  if defined(${def_name}) && ${def_name}
+#    define ${def_value} alignas(X)
+#  elif ${prefix_arg}_COMPILER_IS_GNU || ${prefix_arg}_COMPILER_IS_Clang || ${prefix_arg}_COMPILER_IS_AppleClang
+#    define ${def_value} __attribute__ ((__aligned__(X)))
+#  elif ${prefix_arg}_COMPILER_IS_MSVC
+#    define ${def_value} __declspec(align(X))
+#  else
+#    define ${def_value}
+#  endif
+\n")
+      endif()
+      if (feature STREQUAL cxx_alignof)
+        set(def_value "${prefix_arg}_ALIGNOF(X)")
+        string(APPEND file_content "
+#  if defined(${def_name}) && ${def_name}
+#    define ${def_value} alignof(X)
+#  elif ${prefix_arg}_COMPILER_IS_GNU || ${prefix_arg}_COMPILER_IS_Clang || ${prefix_arg}_COMPILER_IS_AppleClang
+#    define ${def_value} __alignof__(X)
+#  elif ${prefix_arg}_COMPILER_IS_MSVC
+#    define ${def_value} __alignof(X)
+#  endif
+\n")
+      endif()
+      _simpledefine(cxx_deleted_functions DELETED_FUNCTION "= delete" "")
+      _simpledefine(cxx_extern_templates EXTERN_TEMPLATE extern "")
+      if (feature STREQUAL cxx_noexcept)
+        set(def_value "${prefix_arg}_NOEXCEPT")
+        string(APPEND file_content "
+#  if defined(${def_name}) && ${def_name}
+#    define ${def_value} noexcept
+#    define ${def_value}_EXPR(X) noexcept(X)
+#  else
+#    define ${def_value}
+#    define ${def_value}_EXPR(X)
+#  endif
+\n")
+      endif()
+      if (feature STREQUAL cxx_nullptr)
+        set(def_value "${prefix_arg}_NULLPTR")
+        string(APPEND file_content "
+#  if defined(${def_name}) && ${def_name}
+#    define ${def_value} nullptr
+#  elif ${prefix_arg}_COMPILER_IS_GNU
+#    define ${def_value} __null
+#  else
+#    define ${def_value} 0
+#  endif
+\n")
+      endif()
+      if (feature STREQUAL cxx_thread_local)
+        set(def_value "${prefix_arg}_THREAD_LOCAL")
+        string(APPEND file_content "
+#  if defined(${def_name}) && ${def_name}
+#    define ${def_value} thread_local
+#  elif ${prefix_arg}_COMPILER_IS_GNU || ${prefix_arg}_COMPILER_IS_Clang || ${prefix_arg}_COMPILER_IS_AppleClang
+#    define ${def_value} __thread
+#  elif ${prefix_arg}_COMPILER_IS_MSVC
+#    define ${def_value} __declspec(thread)
+#  else
+// ${def_value} not defined for this configuration.
+#  endif
+\n")
+      endif()
+      if (feature STREQUAL cxx_attribute_deprecated)
+        set(def_name ${prefix_arg}_${feature_PP})
+        set(def_value "${prefix_arg}_DEPRECATED")
+        string(APPEND file_content "
+#  ifndef ${def_value}
+#    if defined(${def_name}) && ${def_name}
+#      define ${def_value} [[deprecated]]
+#      define ${def_value}_MSG(MSG) [[deprecated(MSG)]]
+#    elif ${prefix_arg}_COMPILER_IS_GNU || ${prefix_arg}_COMPILER_IS_Clang
+#      define ${def_value} __attribute__((__deprecated__))
+#      define ${def_value}_MSG(MSG) __attribute__((__deprecated__(MSG)))
+#    elif ${prefix_arg}_COMPILER_IS_MSVC
+#      define ${def_value} __declspec(deprecated)
+#      define ${def_value}_MSG(MSG) __declspec(deprecated(MSG))
+#    else
+#      define ${def_value}
+#      define ${def_value}_MSG(MSG)
+#    endif
+#  endif
+\n")
+      endif()
+    endforeach()
+
+    foreach(feature ${${_lang}_bare_features})
+      string(TOUPPER ${feature} feature_upper)
+      set(feature_PP "COMPILER_${feature_upper}")
+      set(def_name ${prefix_arg}_${feature_PP})
+      _simplebaredefine(c_restrict restrict "")
+      _simplebaredefine(cxx_constexpr constexpr "")
+      _simplebaredefine(cxx_final final "")
+      _simplebaredefine(cxx_override override "")
+      if (feature STREQUAL cxx_nullptr)
+        set(def_value "nullptr")
+        string(APPEND file_content "
+#  if !(defined(${def_name}) && ${def_name})
+#    if ${prefix_arg}_COMPILER_IS_GNU
+#      define ${def_value} __null
+#    else
+#      define ${def_value} 0
+#    endif
+#  endif
+\n")
+      endif()
+      _simplebaredefine(cxx_noexcept noexcept "")
+    endforeach()
+
+    string(APPEND file_content "#endif\n")
+
+  endforeach()
+
+  if(_WCD_OUTPUT_FILES_VAR)
+    foreach(compiler ${_WCD_COMPILERS})
+      foreach(_lang ${_langs})
+        if(compiler_file_content_${compiler}_${_lang})
+          set(CMAKE_CONFIGURABLE_FILE_CONTENT "${compiler_file_content_}")
+          string(APPEND CMAKE_CONFIGURABLE_FILE_CONTENT "${compiler_file_content_${compiler}_${_lang}}")
+
+          set(compile_file_name "${_WCD_OUTPUT_DIR}${prefix_arg}_COMPILER_INFO_${compiler}_${_lang}.h")
+          set(full_path "${main_file_dir}/${compile_file_name}")
+          list(APPEND ${_WCD_OUTPUT_FILES_VAR} ${full_path})
+          configure_file("${CMAKE_ROOT}/Modules/CMakeConfigurableFile.in"
+            "${full_path}"
+            @ONLY
+          )
+        endif()
+      endforeach()
+    endforeach()
+    set(${_WCD_OUTPUT_FILES_VAR} ${${_WCD_OUTPUT_FILES_VAR}} PARENT_SCOPE)
+  endif()
+
+  if (_WCD_EPILOG)
+    string(APPEND file_content "\n${_WCD_EPILOG}\n")
+  endif()
+  string(APPEND file_content "\n#endif")
+
+  set(CMAKE_CONFIGURABLE_FILE_CONTENT ${file_content})
+  configure_file("${CMAKE_ROOT}/Modules/CMakeConfigurableFile.in"
+    "${file_arg}"
+    @ONLY
+  )
+endfunction()
diff --git a/share/cmake-3.18/Modules/ecos_clean.cmake b/share/cmake-3.22/Modules/ecos_clean.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/ecos_clean.cmake
rename to share/cmake-3.22/Modules/ecos_clean.cmake
diff --git a/share/cmake-3.18/Modules/exportheader.cmake.in b/share/cmake-3.22/Modules/exportheader.cmake.in
similarity index 100%
rename from share/cmake-3.18/Modules/exportheader.cmake.in
rename to share/cmake-3.22/Modules/exportheader.cmake.in
diff --git a/share/cmake-3.18/Modules/kde3init_dummy.cpp.in b/share/cmake-3.22/Modules/kde3init_dummy.cpp.in
similarity index 100%
rename from share/cmake-3.18/Modules/kde3init_dummy.cpp.in
rename to share/cmake-3.22/Modules/kde3init_dummy.cpp.in
diff --git a/share/cmake-3.18/Modules/kde3uic.cmake b/share/cmake-3.22/Modules/kde3uic.cmake
similarity index 100%
rename from share/cmake-3.18/Modules/kde3uic.cmake
rename to share/cmake-3.22/Modules/kde3uic.cmake
diff --git a/share/cmake-3.18/Modules/readme.txt b/share/cmake-3.22/Modules/readme.txt
similarity index 100%
rename from share/cmake-3.18/Modules/readme.txt
rename to share/cmake-3.22/Modules/readme.txt
diff --git a/share/cmake-3.18/Templates/AppleInfo.plist b/share/cmake-3.22/Templates/AppleInfo.plist
similarity index 100%
rename from share/cmake-3.18/Templates/AppleInfo.plist
rename to share/cmake-3.22/Templates/AppleInfo.plist
diff --git a/share/cmake-3.18/Templates/CMakeVSMacros1.vsmacros b/share/cmake-3.22/Templates/CMakeVSMacros1.vsmacros
similarity index 100%
rename from share/cmake-3.18/Templates/CMakeVSMacros1.vsmacros
rename to share/cmake-3.22/Templates/CMakeVSMacros1.vsmacros
Binary files differ
diff --git a/share/cmake-3.18/Templates/CMakeVSMacros2.vsmacros b/share/cmake-3.22/Templates/CMakeVSMacros2.vsmacros
similarity index 100%
rename from share/cmake-3.18/Templates/CMakeVSMacros2.vsmacros
rename to share/cmake-3.22/Templates/CMakeVSMacros2.vsmacros
Binary files differ
diff --git a/share/cmake-3.18/Templates/CPack.GenericDescription.txt b/share/cmake-3.22/Templates/CPack.GenericDescription.txt
similarity index 100%
rename from share/cmake-3.18/Templates/CPack.GenericDescription.txt
rename to share/cmake-3.22/Templates/CPack.GenericDescription.txt
diff --git a/share/cmake-3.18/Templates/CPack.GenericLicense.txt b/share/cmake-3.22/Templates/CPack.GenericLicense.txt
similarity index 100%
rename from share/cmake-3.18/Templates/CPack.GenericLicense.txt
rename to share/cmake-3.22/Templates/CPack.GenericLicense.txt
diff --git a/share/cmake-3.18/Templates/CPack.GenericWelcome.txt b/share/cmake-3.22/Templates/CPack.GenericWelcome.txt
similarity index 100%
rename from share/cmake-3.18/Templates/CPack.GenericWelcome.txt
rename to share/cmake-3.22/Templates/CPack.GenericWelcome.txt
diff --git a/share/cmake-3.18/Templates/CPackConfig.cmake.in b/share/cmake-3.22/Templates/CPackConfig.cmake.in
similarity index 100%
rename from share/cmake-3.18/Templates/CPackConfig.cmake.in
rename to share/cmake-3.22/Templates/CPackConfig.cmake.in
diff --git a/share/cmake-3.18/Templates/CTestScript.cmake.in b/share/cmake-3.22/Templates/CTestScript.cmake.in
similarity index 100%
rename from share/cmake-3.18/Templates/CTestScript.cmake.in
rename to share/cmake-3.22/Templates/CTestScript.cmake.in
diff --git a/share/cmake-3.22/Templates/MSBuild/CustomBuildDepFile.targets b/share/cmake-3.22/Templates/MSBuild/CustomBuildDepFile.targets
new file mode 100644
index 0000000..2387ab5
--- /dev/null
+++ b/share/cmake-3.22/Templates/MSBuild/CustomBuildDepFile.targets
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <!-- Update AdditionalInputs with depfile-discovered inputs.  -->
+  <Target Name="CMakeCustomBuildDepFileAdditionalInputs" BeforeTargets="CustomBuild" Condition="'@(CustomBuild)' != ''">
+    <ItemGroup>
+      <!-- Save original AdditionalInputs generated by CMake.  -->
+      <CustomBuild>
+        <CMakeAdditionalInputs>%(CustomBuild.AdditionalInputs)</CMakeAdditionalInputs>
+      </CustomBuild>
+      <!-- Read depfile-discovered inputs.  -->
+      <CustomBuild Condition="Exists('%(CustomBuild.DepFileAdditionalInputsFile)')">
+        <DepFileAdditionalInputs>$([System.IO.File]::ReadAllText('%(CustomBuild.DepFileAdditionalInputsFile)').TrimEnd())</DepFileAdditionalInputs>
+      </CustomBuild>
+      <!-- Add depfile-discovered inputs to AdditionalInputs.  -->
+      <CustomBuild Condition="'%(CustomBuild.DepFileAdditionalInputs)' != ''">
+        <AdditionalInputs Condition="'%(CustomBuild.AdditionalInputs)' == ''">%(CustomBuild.DepFileAdditionalInputs)</AdditionalInputs>
+        <AdditionalInputs Condition="'%(CustomBuild.AdditionalInputs)' != ''">%(CustomBuild.AdditionalInputs);%(CustomBuild.DepFileAdditionalInputs)</AdditionalInputs>
+      </CustomBuild>
+    </ItemGroup>
+  </Target>
+
+  <!-- Update the tracking log with depfile-discovered inputs.  -->
+  <Target Name="CMakeCustomBuildDepFileTrackingLog" AfterTargets="CustomBuild" Condition="'@(CustomBuild)' != ''">
+    <!-- Compute the tracking log content for each CustomBuild item individually.  -->
+    <ItemGroup>
+      <!-- Read depfile-discovered inputs.  -->
+      <CustomBuild Condition="Exists('%(CustomBuild.DepFileAdditionalInputsFile)')">
+        <DepFileAdditionalInputs>$([System.IO.File]::ReadAllText('%(CustomBuild.DepFileAdditionalInputsFile)').TrimEnd())</DepFileAdditionalInputs>
+      </CustomBuild>
+      <!-- Generate tracking log representation of all inputs.  -->
+      <CustomBuild>
+        <ReadTLog>^%(CustomBuild.Identity)&#xD;&#xA;</ReadTLog>
+      </CustomBuild>
+      <CustomBuild Condition="'%(CustomBuild.CMakeAdditionalInputs)' != ''">
+        <ReadTLog>%(ReadTLog)$([System.String]::Copy('%(CustomBuild.CMakeAdditionalInputs)').Trim(';').Replace(';', '&#xD;&#xA;'))&#xD;&#xA;</ReadTLog>
+      </CustomBuild>
+      <CustomBuild Condition="'%(CustomBuild.DepFileAdditionalInputs)' != ''">
+        <ReadTLog>%(ReadTLog)$([System.String]::Copy('%(CustomBuild.DepFileAdditionalInputs)').Trim(';').Replace(';', '&#xD;&#xA;'))&#xD;&#xA;</ReadTLog>
+      </CustomBuild>
+    </ItemGroup>
+    <!-- Compute the combined tracking log for all CustomBuild items together.  -->
+    <PropertyGroup>
+      <CustomBuildReadTLog>@(CustomBuild->'%(ReadTLog)','')</CustomBuildReadTLog>
+    </PropertyGroup>
+    <!-- Replace the combined tracking log on disk.  -->
+    <WriteLinesToFile File="$(TLogLocation)CustomBuild.read.1.tlog" Overwrite="true" Lines="$(CustomBuildReadTLog.ToUpper())" />
+  </Target>
+</Project>
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v10_CL.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v10_CL.json
similarity index 100%
rename from share/cmake-3.18/Templates/MSBuild/FlagTables/v10_CL.json
rename to share/cmake-3.22/Templates/MSBuild/FlagTables/v10_CL.json
diff --git a/share/cmake-3.22/Templates/MSBuild/FlagTables/v10_CSharp.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v10_CSharp.json
new file mode 100644
index 0000000..9f21d9a
--- /dev/null
+++ b/share/cmake-3.22/Templates/MSBuild/FlagTables/v10_CSharp.json
@@ -0,0 +1,535 @@
+[
+  {
+    "name":  "ProjectName",
+    "switch": "out:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:exe",
+    "comment": "",
+    "value": "Exe",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:winexe",
+    "comment": "",
+    "value": "Winexe",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:library",
+    "comment": "",
+    "value": "Library",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:module",
+    "comment": "",
+    "value": "Module",
+    "flags": []
+  },
+  {
+    "name":  "DocumentationFile",
+    "switch": "doc",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:x86",
+    "comment": "",
+    "value": "x86",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:Itanium",
+    "comment": "",
+    "value": "Itanium",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:x64",
+    "comment": "",
+    "value": "x64",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:arm",
+    "comment": "",
+    "value": "arm",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:anycpu32bitpreferred",
+    "comment": "",
+    "value": "anycpu32bitpreferred",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:anycpu",
+    "comment": "",
+    "value": "anycpu",
+    "flags": []
+  },
+  {
+    "name":  "References",
+    "switch": "reference:",
+    "comment": "mit alias",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "References",
+    "switch": "reference:",
+    "comment": "dateiliste",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "AddModules",
+    "switch": "addmodule:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name":  "Win32Resource",
+    "switch": "win32res:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "ApplicationIcon",
+    "switch": "win32icon:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "ApplicationManifest",
+    "switch": "win32manifest:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "NoWin32Manifest",
+    "switch": "nowin32manifest",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DefineDebug",
+    "switch": "debug",
+    "comment": "",
+    "value": "true",
+    "flags": [
+      "Continue"
+    ]
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:none",
+    "comment": "",
+    "value": "none",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:full",
+    "comment": "",
+    "value": "full",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:pdbonly",
+    "comment": "",
+    "value": "pdbonly",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror-",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror+",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:0",
+    "comment": "",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:1",
+    "comment": "",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:2",
+    "comment": "",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:3",
+    "comment": "",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:4",
+    "comment": "",
+    "value": "4",
+    "flags": []
+  },
+  {
+    "name":  "NoWarn",
+    "switch": "nowarn:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired",
+      "CommaAppendable"
+    ]
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DefineConstants",
+    "switch": "define:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "SemicolonAppendable",
+      "UserValue"
+    ]
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AssemblyOriginatorKeyFile",
+    "switch": "keyfile",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "KeyContainerName",
+    "switch": "keycontainer",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoLogo",
+    "switch": "nologo",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoConfig",
+    "switch": "noconfig",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "BaseAddress",
+    "switch": "baseaddress:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "CodePage",
+    "switch": "codepage",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "Utf8Output",
+    "switch": "utf8output",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "MainEntryPoint",
+    "switch": "main:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "GenerateFullPaths",
+    "switch": "fullpaths",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "FileAlignment",
+    "switch": "filealign",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "PdbFile",
+    "switch": "pdb:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "SubsystemVersion",
+    "switch": "subsystemversion",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "AdditionalLibPaths",
+    "switch": "lib:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:none",
+    "comment": "Do Not Send Report",
+    "value": "none",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:prompt",
+    "comment": "Prompt Immediately",
+    "value": "prompt",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:queue",
+    "comment": "Queue For Next Login",
+    "value": "queue",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:send",
+    "comment": "Send Automatically",
+    "value": "send",
+    "flags": []
+  }
+]
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v10_Cuda.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v10_Cuda.json
similarity index 100%
rename from share/cmake-3.18/Templates/MSBuild/FlagTables/v10_Cuda.json
rename to share/cmake-3.22/Templates/MSBuild/FlagTables/v10_Cuda.json
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v10_CudaHost.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v10_CudaHost.json
similarity index 100%
rename from share/cmake-3.18/Templates/MSBuild/FlagTables/v10_CudaHost.json
rename to share/cmake-3.22/Templates/MSBuild/FlagTables/v10_CudaHost.json
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v10_LIB.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v10_LIB.json
similarity index 100%
rename from share/cmake-3.18/Templates/MSBuild/FlagTables/v10_LIB.json
rename to share/cmake-3.22/Templates/MSBuild/FlagTables/v10_LIB.json
diff --git a/share/cmake-3.22/Templates/MSBuild/FlagTables/v10_Link.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v10_Link.json
new file mode 100644
index 0000000..494774b
--- /dev/null
+++ b/share/cmake-3.22/Templates/MSBuild/FlagTables/v10_Link.json
@@ -0,0 +1,1128 @@
+[
+  {
+    "name": "ShowProgress",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE",
+    "comment": "Display all progress messages",
+    "value": "LinkVerbose",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:Lib",
+    "comment": "For Libraries Searched",
+    "value": "LinkVerboseLib",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:ICF",
+    "comment": "About COMDAT folding during optimized linking",
+    "value": "LinkVerboseICF",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:REF",
+    "comment": "About data removed during optimized linking",
+    "value": "LinkVerboseREF",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:SAFESEH",
+    "comment": "About Modules incompatible with SEH",
+    "value": "LinkVerboseSAFESEH",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:CLR",
+    "comment": "About linker activity related to managed code",
+    "value": "LinkVerboseCLR",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE:MULTIPLE",
+    "comment": "Multiply Defined Symbol Only",
+    "value": "MultiplyDefinedSymbolOnly",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE:UNRESOLVED",
+    "comment": "Undefined Symbol Only",
+    "value": "UndefinedSymbolOnly",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:5",
+    "comment": "X86 Image Only",
+    "value": "X86Image",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:6",
+    "comment": "X64 Image Only",
+    "value": "X64Image",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:16",
+    "comment": "Itanium Image Only",
+    "value": "ItaniumImage",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='asInvoker'",
+    "comment": "asInvoker",
+    "value": "AsInvoker",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='highestAvailable'",
+    "comment": "highestAvailable",
+    "value": "HighestAvailable",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='requireAdministrator'",
+    "comment": "requireAdministrator",
+    "value": "RequireAdministrator",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:CONSOLE",
+    "comment": "Console",
+    "value": "Console",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:WINDOWS",
+    "comment": "Windows",
+    "value": "Windows",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:NATIVE",
+    "comment": "Native",
+    "value": "Native",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_APPLICATION",
+    "comment": "EFI Application",
+    "value": "EFI Application",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
+    "comment": "EFI Boot Service Driver",
+    "value": "EFI Boot Service Driver",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_ROM",
+    "comment": "EFI ROM",
+    "value": "EFI ROM",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_RUNTIME_DRIVER",
+    "comment": "EFI Runtime",
+    "value": "EFI Runtime",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:WINDOWSCE",
+    "comment": "WindowsCE",
+    "value": "WindowsCE",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:POSIX",
+    "comment": "POSIX",
+    "value": "POSIX",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "Driver",
+    "comment": "Driver",
+    "value": "Driver",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "DRIVER:UPONLY",
+    "comment": "UP Only",
+    "value": "UpOnly",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "DRIVER:WDM",
+    "comment": "WDM",
+    "value": "WDM",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG",
+    "comment": "Use Link Time Code Generation",
+    "value": "UseLinkTimeCodeGeneration",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGInstrument",
+    "comment": "Profile Guided Optimization - Instrument",
+    "value": "PGInstrument",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGOptimize",
+    "comment": "Profile Guided Optimization - Optimization",
+    "value": "PGOptimization",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGUpdate",
+    "comment": "Profile Guided Optimization - Update",
+    "value": "PGUpdate",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:ARM",
+    "comment": "MachineARM",
+    "value": "MachineARM",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:EBC",
+    "comment": "MachineEBC",
+    "value": "MachineEBC",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:IA64",
+    "comment": "MachineIA64",
+    "value": "MachineIA64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS",
+    "comment": "MachineMIPS",
+    "value": "MachineMIPS",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS16",
+    "comment": "MachineMIPS16",
+    "value": "MachineMIPS16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU",
+    "comment": "MachineMIPSFPU",
+    "value": "MachineMIPSFPU",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU16",
+    "comment": "MachineMIPSFPU16",
+    "value": "MachineMIPSFPU16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:SH4",
+    "comment": "MachineSH4",
+    "value": "MachineSH4",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:THUMB",
+    "comment": "MachineTHUMB",
+    "value": "MachineTHUMB",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X64",
+    "comment": "MachineX64",
+    "value": "MachineX64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X86",
+    "comment": "MachineX86",
+    "value": "MachineX86",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:MTA",
+    "comment": "MTA threading attribute",
+    "value": "MTAThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:STA",
+    "comment": "STA threading attribute",
+    "value": "STAThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:NONE",
+    "comment": "Default threading attribute",
+    "value": "DefaultThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:IJW",
+    "comment": "Force IJW image",
+    "value": "ForceIJWImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:PURE",
+    "comment": "Force Pure IL Image",
+    "value": "ForcePureILImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:SAFE",
+    "comment": "Force Safe IL Image",
+    "value": "ForceSafeILImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "",
+    "comment": "Default image type",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:PROMPT",
+    "comment": "PromptImmediately",
+    "value": "PromptImmediately",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:QUEUE",
+    "comment": "Queue For Next Login",
+    "value": "QueueForNextLogin",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:SEND",
+    "comment": "Send Error Report",
+    "value": "SendErrorReport",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:NONE",
+    "comment": "No Error Report",
+    "value": "NoErrorReport",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError:NO",
+    "comment": "Disabled",
+    "value": "Disabled",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError:SYSTEMDLL",
+    "comment": "System Dlls Only",
+    "value": "SystemDlls",
+    "flags": []
+  },
+  {
+    "name": "LinkIncremental",
+    "switch": "INCREMENTAL:NO",
+    "comment": "Enable Incremental Linking",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkIncremental",
+    "switch": "INCREMENTAL",
+    "comment": "Enable Incremental Linking",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "NOLOGO",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkStatus",
+    "switch": "LTCG:NOSTATUS",
+    "comment": "Link Status",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkStatus",
+    "switch": "LTCG:STATUS",
+    "comment": "Link Status",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreventDllBinding",
+    "switch": "ALLOWBIND:NO",
+    "comment": "Prevent Dll Binding",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "PreventDllBinding",
+    "switch": "ALLOWBIND",
+    "comment": "Prevent Dll Binding",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatLinkerWarningAsErrors",
+    "switch": "WX:NO",
+    "comment": "Treat Linker Warning As Errors",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatLinkerWarningAsErrors",
+    "switch": "WX",
+    "comment": "Treat Linker Warning As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreAllDefaultLibraries",
+    "switch": "NODEFAULTLIB",
+    "comment": "Ignore All Default Libraries",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateManifest",
+    "switch": "MANIFEST:NO",
+    "comment": "Generate Manifest",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "GenerateManifest",
+    "switch": "MANIFEST",
+    "comment": "Generate Manifest",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AllowIsolation",
+    "switch": "ALLOWISOLATION:NO",
+    "comment": "Allow Isolation",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "AllowIsolation",
+    "switch": "ALLOWISOLATION",
+    "comment": "Allow Isolation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableUAC",
+    "switch": "MANIFESTUAC:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired",
+      "SpaceAppendable"
+    ]
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='false'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "false",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='false'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='true'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG",
+    "comment": "Generate Debug Info",
+    "value": "true",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "GenerateMapFile",
+    "switch": "MAP",
+    "comment": "Generate Map File",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "MapExports",
+    "switch": "MAPINFO:EXPORTS",
+    "comment": "Map Exports",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AssemblyDebug",
+    "switch": "ASSEMBLYDEBUG:DISABLE",
+    "comment": "Debuggable Assembly",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "AssemblyDebug",
+    "switch": "ASSEMBLYDEBUG",
+    "comment": "Debuggable Assembly",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LargeAddressAware",
+    "switch": "LARGEADDRESSAWARE:NO",
+    "comment": "Enable Large Addresses",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LargeAddressAware",
+    "switch": "LARGEADDRESSAWARE",
+    "comment": "Enable Large Addresses",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TerminalServerAware",
+    "switch": "TSAWARE:NO",
+    "comment": "Terminal Server",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TerminalServerAware",
+    "switch": "TSAWARE",
+    "comment": "Terminal Server",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SwapRunFromCD",
+    "switch": "SWAPRUN:CD",
+    "comment": "Swap Run From CD",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SwapRunFromNET",
+    "switch": "SWAPRUN:NET",
+    "comment": "Swap Run From Network",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OptimizeReferences",
+    "switch": "OPT:NOREF",
+    "comment": "References",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "OptimizeReferences",
+    "switch": "OPT:REF",
+    "comment": "References",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableCOMDATFolding",
+    "switch": "OPT:NOICF",
+    "comment": "Enable COMDAT Folding",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnableCOMDATFolding",
+    "switch": "OPT:ICF",
+    "comment": "Enable COMDAT Folding",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreEmbeddedIDL",
+    "switch": "IGNOREIDL",
+    "comment": "Ignore Embedded IDL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "NoEntryPoint",
+    "switch": "NOENTRY",
+    "comment": "No Entry Point",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SetChecksum",
+    "switch": "RELEASE",
+    "comment": "Set Checksum",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "RandomizedBaseAddress",
+    "switch": "DYNAMICBASE:NO",
+    "comment": "Randomized Base Address",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "RandomizedBaseAddress",
+    "switch": "DYNAMICBASE",
+    "comment": "Randomized Base Address",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "FixedBaseAddress",
+    "switch": "FIXED:NO",
+    "comment": "Fixed Base Address",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "FixedBaseAddress",
+    "switch": "FIXED",
+    "comment": "Fixed Base Address",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DataExecutionPrevention",
+    "switch": "NXCOMPAT:NO",
+    "comment": "Data Execution Prevention (DEP)",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "DataExecutionPrevention",
+    "switch": "NXCOMPAT",
+    "comment": "Data Execution Prevention (DEP)",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TurnOffAssemblyGeneration",
+    "switch": "NOASSEMBLY",
+    "comment": "Turn Off Assembly Generation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SupportUnloadOfDelayLoadedDLL",
+    "switch": "DELAY:UNLOAD",
+    "comment": "Unload delay loaded DLL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SupportNobindOfDelayLoadedDLL",
+    "switch": "DELAY:NOBIND",
+    "comment": "Nobind delay loaded DLL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "Profile",
+    "switch": "PROFILE",
+    "comment": "Profile",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkDelaySign",
+    "switch": "DELAYSIGN:NO",
+    "comment": "Delay Sign",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkDelaySign",
+    "switch": "DELAYSIGN",
+    "comment": "Delay Sign",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CLRUnmanagedCodeCheck",
+    "switch": "CLRUNMANAGEDCODECHECK:NO",
+    "comment": "CLR Unmanaged Code Check",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "CLRUnmanagedCodeCheck",
+    "switch": "CLRUNMANAGEDCODECHECK",
+    "comment": "CLR Unmanaged Code Check",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ImageHasSafeExceptionHandlers",
+    "switch": "SAFESEH:NO",
+    "comment": "Image Has Safe Exception Handlers",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "ImageHasSafeExceptionHandlers",
+    "switch": "SAFESEH",
+    "comment": "Image Has Safe Exception Handlers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkDLL",
+    "switch": "DLL",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AdditionalLibraryDirectories",
+    "switch": "LIBPATH:",
+    "comment": "Additional Library Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "IgnoreSpecificDefaultLibraries",
+    "switch": "NODEFAULTLIB:",
+    "comment": "Ignore Specific Default Libraries",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AddModuleNamesToAssembly",
+    "switch": "ASSEMBLYMODULE:",
+    "comment": "Add Module to Assembly",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "EmbedManagedResourceFile",
+    "switch": "ASSEMBLYRESOURCE:",
+    "comment": "Embed Managed Resource File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ForceSymbolReferences",
+    "switch": "INCLUDE:",
+    "comment": "Force Symbol References",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "DelayLoadDLLs",
+    "switch": "DELAYLOAD:",
+    "comment": "Delay Loaded Dlls",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AssemblyLinkResource",
+    "switch": "ASSEMBLYLINKRESOURCE:",
+    "comment": "Assembly Link Resource",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalManifestDependencies",
+    "switch": "MANIFESTDEPENDENCY:",
+    "comment": "Additional Manifest Dependencies",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "OutputFile",
+    "switch": "OUT:",
+    "comment": "Output File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "Version",
+    "switch": "VERSION:",
+    "comment": "Version",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "SpecifySectionAttributes",
+    "switch": "SECTION:",
+    "comment": "Specify Section Attributes",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MSDOSStubFileName",
+    "switch": "STUB:",
+    "comment": "MS-DOS Stub File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ModuleDefinitionFile",
+    "switch": "DEF:",
+    "comment": "Module Definition File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ManifestFile",
+    "switch": "ManifestFile:",
+    "comment": "Manifest File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProgramDatabaseFile",
+    "switch": "PDB:",
+    "comment": "Generate Program Database File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "StripPrivateSymbols",
+    "switch": "PDBSTRIPPED:",
+    "comment": "Strip Private Symbols",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MapFileName",
+    "switch": "MAP:",
+    "comment": "Map File Name",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "HeapReserveSize",
+    "switch": "HEAP:",
+    "comment": "Heap Reserve Size",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "HeapCommitSize",
+    "switch": "HEAP",
+    "comment": "Heap Commit Size",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "StackReserveSize",
+    "switch": "STACK:",
+    "comment": "Stack Reserve Size",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "StackCommitSize",
+    "switch": "STACK",
+    "comment": "Stack Commit Size",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "FunctionOrder",
+    "switch": "ORDER:@",
+    "comment": "Function Order",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProfileGuidedDatabase",
+    "switch": "PGD:",
+    "comment": "Profile Guided Database",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MidlCommandFile",
+    "switch": "MIDL:@",
+    "comment": "MIDL Commands",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MergedIDLBaseFileName",
+    "switch": "IDLOUT:",
+    "comment": "Merged IDL Base File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "TypeLibraryFile",
+    "switch": "TLBOUT:",
+    "comment": "Type Library",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "EntryPointSymbol",
+    "switch": "ENTRY:",
+    "comment": "Entry Point",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "BaseAddress",
+    "switch": "BASE:",
+    "comment": "Base Address",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ImportLibrary",
+    "switch": "IMPLIB:",
+    "comment": "Import Library",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "LinkKeyFile",
+    "switch": "KEYFILE:",
+    "comment": "Key File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "KeyContainer",
+    "switch": "KEYCONTAINER:",
+    "comment": "Key Container",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "TypeLibraryResourceID",
+    "switch": "TLBID:",
+    "comment": "TypeLib Resource ID",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "SectionAlignment",
+    "switch": "ALIGN:",
+    "comment": "SectionAlignment",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  }
+]
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v10_MASM.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v10_MASM.json
similarity index 100%
rename from share/cmake-3.18/Templates/MSBuild/FlagTables/v10_MASM.json
rename to share/cmake-3.22/Templates/MSBuild/FlagTables/v10_MASM.json
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v10_NASM.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v10_NASM.json
similarity index 100%
rename from share/cmake-3.18/Templates/MSBuild/FlagTables/v10_NASM.json
rename to share/cmake-3.22/Templates/MSBuild/FlagTables/v10_NASM.json
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v10_RC.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v10_RC.json
similarity index 100%
rename from share/cmake-3.18/Templates/MSBuild/FlagTables/v10_RC.json
rename to share/cmake-3.22/Templates/MSBuild/FlagTables/v10_RC.json
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v11_CL.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v11_CL.json
similarity index 100%
rename from share/cmake-3.18/Templates/MSBuild/FlagTables/v11_CL.json
rename to share/cmake-3.22/Templates/MSBuild/FlagTables/v11_CL.json
diff --git a/share/cmake-3.22/Templates/MSBuild/FlagTables/v11_CSharp.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v11_CSharp.json
new file mode 100644
index 0000000..9f21d9a
--- /dev/null
+++ b/share/cmake-3.22/Templates/MSBuild/FlagTables/v11_CSharp.json
@@ -0,0 +1,535 @@
+[
+  {
+    "name":  "ProjectName",
+    "switch": "out:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:exe",
+    "comment": "",
+    "value": "Exe",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:winexe",
+    "comment": "",
+    "value": "Winexe",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:library",
+    "comment": "",
+    "value": "Library",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:module",
+    "comment": "",
+    "value": "Module",
+    "flags": []
+  },
+  {
+    "name":  "DocumentationFile",
+    "switch": "doc",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:x86",
+    "comment": "",
+    "value": "x86",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:Itanium",
+    "comment": "",
+    "value": "Itanium",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:x64",
+    "comment": "",
+    "value": "x64",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:arm",
+    "comment": "",
+    "value": "arm",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:anycpu32bitpreferred",
+    "comment": "",
+    "value": "anycpu32bitpreferred",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:anycpu",
+    "comment": "",
+    "value": "anycpu",
+    "flags": []
+  },
+  {
+    "name":  "References",
+    "switch": "reference:",
+    "comment": "mit alias",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "References",
+    "switch": "reference:",
+    "comment": "dateiliste",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "AddModules",
+    "switch": "addmodule:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name":  "Win32Resource",
+    "switch": "win32res:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "ApplicationIcon",
+    "switch": "win32icon:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "ApplicationManifest",
+    "switch": "win32manifest:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "NoWin32Manifest",
+    "switch": "nowin32manifest",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DefineDebug",
+    "switch": "debug",
+    "comment": "",
+    "value": "true",
+    "flags": [
+      "Continue"
+    ]
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:none",
+    "comment": "",
+    "value": "none",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:full",
+    "comment": "",
+    "value": "full",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:pdbonly",
+    "comment": "",
+    "value": "pdbonly",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror-",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror+",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:0",
+    "comment": "",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:1",
+    "comment": "",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:2",
+    "comment": "",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:3",
+    "comment": "",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:4",
+    "comment": "",
+    "value": "4",
+    "flags": []
+  },
+  {
+    "name":  "NoWarn",
+    "switch": "nowarn:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired",
+      "CommaAppendable"
+    ]
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DefineConstants",
+    "switch": "define:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "SemicolonAppendable",
+      "UserValue"
+    ]
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AssemblyOriginatorKeyFile",
+    "switch": "keyfile",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "KeyContainerName",
+    "switch": "keycontainer",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoLogo",
+    "switch": "nologo",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoConfig",
+    "switch": "noconfig",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "BaseAddress",
+    "switch": "baseaddress:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "CodePage",
+    "switch": "codepage",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "Utf8Output",
+    "switch": "utf8output",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "MainEntryPoint",
+    "switch": "main:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "GenerateFullPaths",
+    "switch": "fullpaths",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "FileAlignment",
+    "switch": "filealign",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "PdbFile",
+    "switch": "pdb:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "SubsystemVersion",
+    "switch": "subsystemversion",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "AdditionalLibPaths",
+    "switch": "lib:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:none",
+    "comment": "Do Not Send Report",
+    "value": "none",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:prompt",
+    "comment": "Prompt Immediately",
+    "value": "prompt",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:queue",
+    "comment": "Queue For Next Login",
+    "value": "queue",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:send",
+    "comment": "Send Automatically",
+    "value": "send",
+    "flags": []
+  }
+]
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v11_LIB.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v11_LIB.json
similarity index 100%
rename from share/cmake-3.18/Templates/MSBuild/FlagTables/v11_LIB.json
rename to share/cmake-3.22/Templates/MSBuild/FlagTables/v11_LIB.json
diff --git a/share/cmake-3.22/Templates/MSBuild/FlagTables/v11_Link.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v11_Link.json
new file mode 100644
index 0000000..0db5d9e
--- /dev/null
+++ b/share/cmake-3.22/Templates/MSBuild/FlagTables/v11_Link.json
@@ -0,0 +1,1263 @@
+[
+  {
+    "name": "ShowProgress",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE",
+    "comment": "Display all progress messages",
+    "value": "LinkVerbose",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:Lib",
+    "comment": "For Libraries Searched",
+    "value": "LinkVerboseLib",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:ICF",
+    "comment": "About COMDAT folding during optimized linking",
+    "value": "LinkVerboseICF",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:REF",
+    "comment": "About data removed during optimized linking",
+    "value": "LinkVerboseREF",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:SAFESEH",
+    "comment": "About Modules incompatible with SEH",
+    "value": "LinkVerboseSAFESEH",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:CLR",
+    "comment": "About linker activity related to managed code",
+    "value": "LinkVerboseCLR",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE:MULTIPLE",
+    "comment": "Multiply Defined Symbol Only",
+    "value": "MultiplyDefinedSymbolOnly",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE:UNRESOLVED",
+    "comment": "Undefined Symbol Only",
+    "value": "UndefinedSymbolOnly",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:5",
+    "comment": "X86 Image Only",
+    "value": "X86Image",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:6",
+    "comment": "X64 Image Only",
+    "value": "X64Image",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:16",
+    "comment": "Itanium Image Only",
+    "value": "ItaniumImage",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='asInvoker'",
+    "comment": "asInvoker",
+    "value": "AsInvoker",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='highestAvailable'",
+    "comment": "highestAvailable",
+    "value": "HighestAvailable",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='requireAdministrator'",
+    "comment": "requireAdministrator",
+    "value": "RequireAdministrator",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:CONSOLE",
+    "comment": "Console",
+    "value": "Console",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:WINDOWS",
+    "comment": "Windows",
+    "value": "Windows",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:NATIVE",
+    "comment": "Native",
+    "value": "Native",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_APPLICATION",
+    "comment": "EFI Application",
+    "value": "EFI Application",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
+    "comment": "EFI Boot Service Driver",
+    "value": "EFI Boot Service Driver",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_ROM",
+    "comment": "EFI ROM",
+    "value": "EFI ROM",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_RUNTIME_DRIVER",
+    "comment": "EFI Runtime",
+    "value": "EFI Runtime",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:POSIX",
+    "comment": "POSIX",
+    "value": "POSIX",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "Driver",
+    "comment": "Driver",
+    "value": "Driver",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "DRIVER:UPONLY",
+    "comment": "UP Only",
+    "value": "UpOnly",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "DRIVER:WDM",
+    "comment": "WDM",
+    "value": "WDM",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG",
+    "comment": "Use Link Time Code Generation",
+    "value": "UseLinkTimeCodeGeneration",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGInstrument",
+    "comment": "Profile Guided Optimization - Instrument",
+    "value": "PGInstrument",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGOptimize",
+    "comment": "Profile Guided Optimization - Optimization",
+    "value": "PGOptimization",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGUpdate",
+    "comment": "Profile Guided Optimization - Update",
+    "value": "PGUpdate",
+    "flags": []
+  },
+  {
+    "name": "GenerateWindowsMetadata",
+    "switch": "WINMD",
+    "comment": "Yes",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateWindowsMetadata",
+    "switch": "WINMD:NO",
+    "comment": "No",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA1",
+    "comment": "SHA1",
+    "value": "SHA1",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA256",
+    "comment": "SHA256",
+    "value": "SHA256",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA384",
+    "comment": "SHA384",
+    "value": "SHA384",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA512",
+    "comment": "SHA512",
+    "value": "SHA512",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:ARM",
+    "comment": "MachineARM",
+    "value": "MachineARM",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:EBC",
+    "comment": "MachineEBC",
+    "value": "MachineEBC",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:IA64",
+    "comment": "MachineIA64",
+    "value": "MachineIA64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS",
+    "comment": "MachineMIPS",
+    "value": "MachineMIPS",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS16",
+    "comment": "MachineMIPS16",
+    "value": "MachineMIPS16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU",
+    "comment": "MachineMIPSFPU",
+    "value": "MachineMIPSFPU",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU16",
+    "comment": "MachineMIPSFPU16",
+    "value": "MachineMIPSFPU16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:SH4",
+    "comment": "MachineSH4",
+    "value": "MachineSH4",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:THUMB",
+    "comment": "MachineTHUMB",
+    "value": "MachineTHUMB",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X64",
+    "comment": "MachineX64",
+    "value": "MachineX64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X86",
+    "comment": "MachineX86",
+    "value": "MachineX86",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:MTA",
+    "comment": "MTA threading attribute",
+    "value": "MTAThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:STA",
+    "comment": "STA threading attribute",
+    "value": "STAThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:NONE",
+    "comment": "Default threading attribute",
+    "value": "DefaultThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:IJW",
+    "comment": "Force IJW image",
+    "value": "ForceIJWImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:PURE",
+    "comment": "Force Pure IL Image",
+    "value": "ForcePureILImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:SAFE",
+    "comment": "Force Safe IL Image",
+    "value": "ForceSafeILImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "",
+    "comment": "Default image type",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA1",
+    "comment": "SHA1",
+    "value": "SHA1",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA256",
+    "comment": "SHA256",
+    "value": "SHA256",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA384",
+    "comment": "SHA384",
+    "value": "SHA384",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA512",
+    "comment": "SHA512",
+    "value": "SHA512",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:PROMPT",
+    "comment": "PromptImmediately",
+    "value": "PromptImmediately",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:QUEUE",
+    "comment": "Queue For Next Login",
+    "value": "QueueForNextLogin",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:SEND",
+    "comment": "Send Error Report",
+    "value": "SendErrorReport",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:NONE",
+    "comment": "No Error Report",
+    "value": "NoErrorReport",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError:NO",
+    "comment": "Disabled",
+    "value": "Disabled",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError:SYSTEMDLL",
+    "comment": "System Dlls Only",
+    "value": "SystemDlls",
+    "flags": []
+  },
+  {
+    "name": "LinkIncremental",
+    "switch": "INCREMENTAL:NO",
+    "comment": "Enable Incremental Linking",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkIncremental",
+    "switch": "INCREMENTAL",
+    "comment": "Enable Incremental Linking",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "NOLOGO",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkStatus",
+    "switch": "LTCG:NOSTATUS",
+    "comment": "Link Status",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkStatus",
+    "switch": "LTCG:STATUS",
+    "comment": "Link Status",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreventDllBinding",
+    "switch": "ALLOWBIND:NO",
+    "comment": "Prevent Dll Binding",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "PreventDllBinding",
+    "switch": "ALLOWBIND",
+    "comment": "Prevent Dll Binding",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatLinkerWarningAsErrors",
+    "switch": "WX:NO",
+    "comment": "Treat Linker Warning As Errors",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatLinkerWarningAsErrors",
+    "switch": "WX",
+    "comment": "Treat Linker Warning As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreAllDefaultLibraries",
+    "switch": "NODEFAULTLIB",
+    "comment": "Ignore All Default Libraries",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateManifest",
+    "switch": "MANIFEST:NO",
+    "comment": "Generate Manifest",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "GenerateManifest",
+    "switch": "MANIFEST",
+    "comment": "Generate Manifest",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AllowIsolation",
+    "switch": "ALLOWISOLATION:NO",
+    "comment": "Allow Isolation",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "AllowIsolation",
+    "switch": "",
+    "comment": "Allow Isolation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableUAC",
+    "switch": "MANIFESTUAC:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired",
+      "SpaceAppendable"
+    ]
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='false'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "false",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='false'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='true'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ManifestEmbed",
+    "switch": "manifest:embed",
+    "comment": "Embed Manifest",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG",
+    "comment": "Generate Debug Info",
+    "value": "true",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "GenerateMapFile",
+    "switch": "MAP",
+    "comment": "Generate Map File",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "MapExports",
+    "switch": "MAPINFO:EXPORTS",
+    "comment": "Map Exports",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AssemblyDebug",
+    "switch": "ASSEMBLYDEBUG:DISABLE",
+    "comment": "Debuggable Assembly",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "AssemblyDebug",
+    "switch": "ASSEMBLYDEBUG",
+    "comment": "Debuggable Assembly",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LargeAddressAware",
+    "switch": "LARGEADDRESSAWARE:NO",
+    "comment": "Enable Large Addresses",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LargeAddressAware",
+    "switch": "LARGEADDRESSAWARE",
+    "comment": "Enable Large Addresses",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TerminalServerAware",
+    "switch": "TSAWARE:NO",
+    "comment": "Terminal Server",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TerminalServerAware",
+    "switch": "TSAWARE",
+    "comment": "Terminal Server",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SwapRunFromCD",
+    "switch": "SWAPRUN:CD",
+    "comment": "Swap Run From CD",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SwapRunFromNET",
+    "switch": "SWAPRUN:NET",
+    "comment": "Swap Run From Network",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OptimizeReferences",
+    "switch": "OPT:NOREF",
+    "comment": "References",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "OptimizeReferences",
+    "switch": "OPT:REF",
+    "comment": "References",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableCOMDATFolding",
+    "switch": "OPT:NOICF",
+    "comment": "Enable COMDAT Folding",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnableCOMDATFolding",
+    "switch": "OPT:ICF",
+    "comment": "Enable COMDAT Folding",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreEmbeddedIDL",
+    "switch": "IGNOREIDL",
+    "comment": "Ignore Embedded IDL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AppContainer",
+    "switch": "APPCONTAINER",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataLinkDelaySign",
+    "switch": "WINMDDELAYSIGN:NO",
+    "comment": "Windows Metadata Delay Sign",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataLinkDelaySign",
+    "switch": "WINMDDELAYSIGN",
+    "comment": "Windows Metadata Delay Sign",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "NoEntryPoint",
+    "switch": "NOENTRY",
+    "comment": "No Entry Point",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SetChecksum",
+    "switch": "RELEASE",
+    "comment": "Set Checksum",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "RandomizedBaseAddress",
+    "switch": "DYNAMICBASE:NO",
+    "comment": "Randomized Base Address",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "RandomizedBaseAddress",
+    "switch": "DYNAMICBASE",
+    "comment": "Randomized Base Address",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "FixedBaseAddress",
+    "switch": "FIXED:NO",
+    "comment": "Fixed Base Address",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "FixedBaseAddress",
+    "switch": "FIXED",
+    "comment": "Fixed Base Address",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DataExecutionPrevention",
+    "switch": "NXCOMPAT:NO",
+    "comment": "Data Execution Prevention (DEP)",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "DataExecutionPrevention",
+    "switch": "NXCOMPAT",
+    "comment": "Data Execution Prevention (DEP)",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TurnOffAssemblyGeneration",
+    "switch": "NOASSEMBLY",
+    "comment": "Turn Off Assembly Generation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SupportUnloadOfDelayLoadedDLL",
+    "switch": "DELAY:UNLOAD",
+    "comment": "Unload delay loaded DLL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SupportNobindOfDelayLoadedDLL",
+    "switch": "DELAY:NOBIND",
+    "comment": "Nobind delay loaded DLL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "Profile",
+    "switch": "PROFILE",
+    "comment": "Profile",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkDelaySign",
+    "switch": "DELAYSIGN:NO",
+    "comment": "Delay Sign",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkDelaySign",
+    "switch": "DELAYSIGN",
+    "comment": "Delay Sign",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CLRUnmanagedCodeCheck",
+    "switch": "CLRUNMANAGEDCODECHECK:NO",
+    "comment": "CLR Unmanaged Code Check",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "CLRUnmanagedCodeCheck",
+    "switch": "CLRUNMANAGEDCODECHECK",
+    "comment": "CLR Unmanaged Code Check",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DetectOneDefinitionRule",
+    "switch": "ODR",
+    "comment": "Detect One Definition Rule violations",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ImageHasSafeExceptionHandlers",
+    "switch": "SAFESEH:NO",
+    "comment": "Image Has Safe Exception Handlers",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "ImageHasSafeExceptionHandlers",
+    "switch": "SAFESEH",
+    "comment": "Image Has Safe Exception Handlers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkDLL",
+    "switch": "DLL",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AdditionalLibraryDirectories",
+    "switch": "LIBPATH:",
+    "comment": "Additional Library Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "IgnoreSpecificDefaultLibraries",
+    "switch": "NODEFAULTLIB:",
+    "comment": "Ignore Specific Default Libraries",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AddModuleNamesToAssembly",
+    "switch": "ASSEMBLYMODULE:",
+    "comment": "Add Module to Assembly",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "EmbedManagedResourceFile",
+    "switch": "ASSEMBLYRESOURCE:",
+    "comment": "Embed Managed Resource File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ForceSymbolReferences",
+    "switch": "INCLUDE:",
+    "comment": "Force Symbol References",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "DelayLoadDLLs",
+    "switch": "DELAYLOAD:",
+    "comment": "Delay Loaded Dlls",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AssemblyLinkResource",
+    "switch": "ASSEMBLYLINKRESOURCE:",
+    "comment": "Assembly Link Resource",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalManifestDependencies",
+    "switch": "MANIFESTDEPENDENCY:",
+    "comment": "Additional Manifest Dependencies",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ManifestInput",
+    "switch": "manifestinput:",
+    "comment": "Manifest Input",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "OutputFile",
+    "switch": "OUT:",
+    "comment": "Output File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "Version",
+    "switch": "VERSION:",
+    "comment": "Version",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "SpecifySectionAttributes",
+    "switch": "SECTION:",
+    "comment": "Specify Section Attributes",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MSDOSStubFileName",
+    "switch": "STUB:",
+    "comment": "MS-DOS Stub File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ModuleDefinitionFile",
+    "switch": "DEF:",
+    "comment": "Module Definition File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ManifestFile",
+    "switch": "ManifestFile:",
+    "comment": "Manifest File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProgramDatabaseFile",
+    "switch": "PDB:",
+    "comment": "Generate Program Database File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "StripPrivateSymbols",
+    "switch": "PDBSTRIPPED:",
+    "comment": "Strip Private Symbols",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MapFileName",
+    "switch": "MAP:",
+    "comment": "Map File Name",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "HeapReserveSize",
+    "switch": "HEAP:",
+    "comment": "Heap Reserve Size",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "HeapCommitSize",
+    "switch": "HEAP",
+    "comment": "Heap Commit Size",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "StackReserveSize",
+    "switch": "STACK:",
+    "comment": "Stack Reserve Size",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "StackCommitSize",
+    "switch": "STACK",
+    "comment": "Stack Commit Size",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "FunctionOrder",
+    "switch": "ORDER:@",
+    "comment": "Function Order",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProfileGuidedDatabase",
+    "switch": "PGD:",
+    "comment": "Profile Guided Database",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MidlCommandFile",
+    "switch": "MIDL:@",
+    "comment": "MIDL Commands",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MergedIDLBaseFileName",
+    "switch": "IDLOUT:",
+    "comment": "Merged IDL Base File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "TypeLibraryFile",
+    "switch": "TLBOUT:",
+    "comment": "Type Library",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataFile",
+    "switch": "WINMDFILE:",
+    "comment": "Windows Metadata File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataLinkKeyFile",
+    "switch": "WINMDKEYFILE:",
+    "comment": "Windows Metadata Key File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataKeyContainer",
+    "switch": "WINMDKEYCONTAINER:",
+    "comment": "Windows Metadata Key Container",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "EntryPointSymbol",
+    "switch": "ENTRY:",
+    "comment": "Entry Point",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "BaseAddress",
+    "switch": "BASE:",
+    "comment": "Base Address",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ImportLibrary",
+    "switch": "IMPLIB:",
+    "comment": "Import Library",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "LinkKeyFile",
+    "switch": "KEYFILE:",
+    "comment": "Key File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "KeyContainer",
+    "switch": "KEYCONTAINER:",
+    "comment": "Key Container",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "TypeLibraryResourceID",
+    "switch": "TLBID:",
+    "comment": "TypeLib Resource ID",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "SectionAlignment",
+    "switch": "ALIGN:",
+    "comment": "SectionAlignment",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  }
+]
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v11_MASM.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v11_MASM.json
similarity index 100%
rename from share/cmake-3.18/Templates/MSBuild/FlagTables/v11_MASM.json
rename to share/cmake-3.22/Templates/MSBuild/FlagTables/v11_MASM.json
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v11_RC.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v11_RC.json
similarity index 100%
rename from share/cmake-3.18/Templates/MSBuild/FlagTables/v11_RC.json
rename to share/cmake-3.22/Templates/MSBuild/FlagTables/v11_RC.json
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v12_CL.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v12_CL.json
similarity index 100%
rename from share/cmake-3.18/Templates/MSBuild/FlagTables/v12_CL.json
rename to share/cmake-3.22/Templates/MSBuild/FlagTables/v12_CL.json
diff --git a/share/cmake-3.22/Templates/MSBuild/FlagTables/v12_CSharp.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v12_CSharp.json
new file mode 100644
index 0000000..9f21d9a
--- /dev/null
+++ b/share/cmake-3.22/Templates/MSBuild/FlagTables/v12_CSharp.json
@@ -0,0 +1,535 @@
+[
+  {
+    "name":  "ProjectName",
+    "switch": "out:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:exe",
+    "comment": "",
+    "value": "Exe",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:winexe",
+    "comment": "",
+    "value": "Winexe",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:library",
+    "comment": "",
+    "value": "Library",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:module",
+    "comment": "",
+    "value": "Module",
+    "flags": []
+  },
+  {
+    "name":  "DocumentationFile",
+    "switch": "doc",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:x86",
+    "comment": "",
+    "value": "x86",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:Itanium",
+    "comment": "",
+    "value": "Itanium",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:x64",
+    "comment": "",
+    "value": "x64",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:arm",
+    "comment": "",
+    "value": "arm",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:anycpu32bitpreferred",
+    "comment": "",
+    "value": "anycpu32bitpreferred",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:anycpu",
+    "comment": "",
+    "value": "anycpu",
+    "flags": []
+  },
+  {
+    "name":  "References",
+    "switch": "reference:",
+    "comment": "mit alias",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "References",
+    "switch": "reference:",
+    "comment": "dateiliste",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "AddModules",
+    "switch": "addmodule:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name":  "Win32Resource",
+    "switch": "win32res:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "ApplicationIcon",
+    "switch": "win32icon:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "ApplicationManifest",
+    "switch": "win32manifest:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "NoWin32Manifest",
+    "switch": "nowin32manifest",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DefineDebug",
+    "switch": "debug",
+    "comment": "",
+    "value": "true",
+    "flags": [
+      "Continue"
+    ]
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:none",
+    "comment": "",
+    "value": "none",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:full",
+    "comment": "",
+    "value": "full",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:pdbonly",
+    "comment": "",
+    "value": "pdbonly",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror-",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror+",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:0",
+    "comment": "",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:1",
+    "comment": "",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:2",
+    "comment": "",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:3",
+    "comment": "",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:4",
+    "comment": "",
+    "value": "4",
+    "flags": []
+  },
+  {
+    "name":  "NoWarn",
+    "switch": "nowarn:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired",
+      "CommaAppendable"
+    ]
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DefineConstants",
+    "switch": "define:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "SemicolonAppendable",
+      "UserValue"
+    ]
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AssemblyOriginatorKeyFile",
+    "switch": "keyfile",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "KeyContainerName",
+    "switch": "keycontainer",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoLogo",
+    "switch": "nologo",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoConfig",
+    "switch": "noconfig",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "BaseAddress",
+    "switch": "baseaddress:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "CodePage",
+    "switch": "codepage",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "Utf8Output",
+    "switch": "utf8output",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "MainEntryPoint",
+    "switch": "main:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "GenerateFullPaths",
+    "switch": "fullpaths",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "FileAlignment",
+    "switch": "filealign",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "PdbFile",
+    "switch": "pdb:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "SubsystemVersion",
+    "switch": "subsystemversion",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "AdditionalLibPaths",
+    "switch": "lib:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:none",
+    "comment": "Do Not Send Report",
+    "value": "none",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:prompt",
+    "comment": "Prompt Immediately",
+    "value": "prompt",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:queue",
+    "comment": "Queue For Next Login",
+    "value": "queue",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:send",
+    "comment": "Send Automatically",
+    "value": "send",
+    "flags": []
+  }
+]
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v12_LIB.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v12_LIB.json
similarity index 100%
rename from share/cmake-3.18/Templates/MSBuild/FlagTables/v12_LIB.json
rename to share/cmake-3.22/Templates/MSBuild/FlagTables/v12_LIB.json
diff --git a/share/cmake-3.22/Templates/MSBuild/FlagTables/v12_Link.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v12_Link.json
new file mode 100644
index 0000000..0db5d9e
--- /dev/null
+++ b/share/cmake-3.22/Templates/MSBuild/FlagTables/v12_Link.json
@@ -0,0 +1,1263 @@
+[
+  {
+    "name": "ShowProgress",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE",
+    "comment": "Display all progress messages",
+    "value": "LinkVerbose",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:Lib",
+    "comment": "For Libraries Searched",
+    "value": "LinkVerboseLib",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:ICF",
+    "comment": "About COMDAT folding during optimized linking",
+    "value": "LinkVerboseICF",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:REF",
+    "comment": "About data removed during optimized linking",
+    "value": "LinkVerboseREF",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:SAFESEH",
+    "comment": "About Modules incompatible with SEH",
+    "value": "LinkVerboseSAFESEH",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:CLR",
+    "comment": "About linker activity related to managed code",
+    "value": "LinkVerboseCLR",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE:MULTIPLE",
+    "comment": "Multiply Defined Symbol Only",
+    "value": "MultiplyDefinedSymbolOnly",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE:UNRESOLVED",
+    "comment": "Undefined Symbol Only",
+    "value": "UndefinedSymbolOnly",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:5",
+    "comment": "X86 Image Only",
+    "value": "X86Image",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:6",
+    "comment": "X64 Image Only",
+    "value": "X64Image",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:16",
+    "comment": "Itanium Image Only",
+    "value": "ItaniumImage",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='asInvoker'",
+    "comment": "asInvoker",
+    "value": "AsInvoker",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='highestAvailable'",
+    "comment": "highestAvailable",
+    "value": "HighestAvailable",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='requireAdministrator'",
+    "comment": "requireAdministrator",
+    "value": "RequireAdministrator",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:CONSOLE",
+    "comment": "Console",
+    "value": "Console",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:WINDOWS",
+    "comment": "Windows",
+    "value": "Windows",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:NATIVE",
+    "comment": "Native",
+    "value": "Native",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_APPLICATION",
+    "comment": "EFI Application",
+    "value": "EFI Application",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
+    "comment": "EFI Boot Service Driver",
+    "value": "EFI Boot Service Driver",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_ROM",
+    "comment": "EFI ROM",
+    "value": "EFI ROM",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_RUNTIME_DRIVER",
+    "comment": "EFI Runtime",
+    "value": "EFI Runtime",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:POSIX",
+    "comment": "POSIX",
+    "value": "POSIX",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "Driver",
+    "comment": "Driver",
+    "value": "Driver",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "DRIVER:UPONLY",
+    "comment": "UP Only",
+    "value": "UpOnly",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "DRIVER:WDM",
+    "comment": "WDM",
+    "value": "WDM",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG",
+    "comment": "Use Link Time Code Generation",
+    "value": "UseLinkTimeCodeGeneration",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGInstrument",
+    "comment": "Profile Guided Optimization - Instrument",
+    "value": "PGInstrument",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGOptimize",
+    "comment": "Profile Guided Optimization - Optimization",
+    "value": "PGOptimization",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGUpdate",
+    "comment": "Profile Guided Optimization - Update",
+    "value": "PGUpdate",
+    "flags": []
+  },
+  {
+    "name": "GenerateWindowsMetadata",
+    "switch": "WINMD",
+    "comment": "Yes",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateWindowsMetadata",
+    "switch": "WINMD:NO",
+    "comment": "No",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA1",
+    "comment": "SHA1",
+    "value": "SHA1",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA256",
+    "comment": "SHA256",
+    "value": "SHA256",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA384",
+    "comment": "SHA384",
+    "value": "SHA384",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA512",
+    "comment": "SHA512",
+    "value": "SHA512",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:ARM",
+    "comment": "MachineARM",
+    "value": "MachineARM",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:EBC",
+    "comment": "MachineEBC",
+    "value": "MachineEBC",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:IA64",
+    "comment": "MachineIA64",
+    "value": "MachineIA64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS",
+    "comment": "MachineMIPS",
+    "value": "MachineMIPS",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS16",
+    "comment": "MachineMIPS16",
+    "value": "MachineMIPS16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU",
+    "comment": "MachineMIPSFPU",
+    "value": "MachineMIPSFPU",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU16",
+    "comment": "MachineMIPSFPU16",
+    "value": "MachineMIPSFPU16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:SH4",
+    "comment": "MachineSH4",
+    "value": "MachineSH4",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:THUMB",
+    "comment": "MachineTHUMB",
+    "value": "MachineTHUMB",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X64",
+    "comment": "MachineX64",
+    "value": "MachineX64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X86",
+    "comment": "MachineX86",
+    "value": "MachineX86",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:MTA",
+    "comment": "MTA threading attribute",
+    "value": "MTAThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:STA",
+    "comment": "STA threading attribute",
+    "value": "STAThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:NONE",
+    "comment": "Default threading attribute",
+    "value": "DefaultThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:IJW",
+    "comment": "Force IJW image",
+    "value": "ForceIJWImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:PURE",
+    "comment": "Force Pure IL Image",
+    "value": "ForcePureILImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:SAFE",
+    "comment": "Force Safe IL Image",
+    "value": "ForceSafeILImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "",
+    "comment": "Default image type",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA1",
+    "comment": "SHA1",
+    "value": "SHA1",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA256",
+    "comment": "SHA256",
+    "value": "SHA256",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA384",
+    "comment": "SHA384",
+    "value": "SHA384",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA512",
+    "comment": "SHA512",
+    "value": "SHA512",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:PROMPT",
+    "comment": "PromptImmediately",
+    "value": "PromptImmediately",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:QUEUE",
+    "comment": "Queue For Next Login",
+    "value": "QueueForNextLogin",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:SEND",
+    "comment": "Send Error Report",
+    "value": "SendErrorReport",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:NONE",
+    "comment": "No Error Report",
+    "value": "NoErrorReport",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError:NO",
+    "comment": "Disabled",
+    "value": "Disabled",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError:SYSTEMDLL",
+    "comment": "System Dlls Only",
+    "value": "SystemDlls",
+    "flags": []
+  },
+  {
+    "name": "LinkIncremental",
+    "switch": "INCREMENTAL:NO",
+    "comment": "Enable Incremental Linking",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkIncremental",
+    "switch": "INCREMENTAL",
+    "comment": "Enable Incremental Linking",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "NOLOGO",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkStatus",
+    "switch": "LTCG:NOSTATUS",
+    "comment": "Link Status",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkStatus",
+    "switch": "LTCG:STATUS",
+    "comment": "Link Status",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreventDllBinding",
+    "switch": "ALLOWBIND:NO",
+    "comment": "Prevent Dll Binding",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "PreventDllBinding",
+    "switch": "ALLOWBIND",
+    "comment": "Prevent Dll Binding",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatLinkerWarningAsErrors",
+    "switch": "WX:NO",
+    "comment": "Treat Linker Warning As Errors",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatLinkerWarningAsErrors",
+    "switch": "WX",
+    "comment": "Treat Linker Warning As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreAllDefaultLibraries",
+    "switch": "NODEFAULTLIB",
+    "comment": "Ignore All Default Libraries",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateManifest",
+    "switch": "MANIFEST:NO",
+    "comment": "Generate Manifest",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "GenerateManifest",
+    "switch": "MANIFEST",
+    "comment": "Generate Manifest",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AllowIsolation",
+    "switch": "ALLOWISOLATION:NO",
+    "comment": "Allow Isolation",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "AllowIsolation",
+    "switch": "",
+    "comment": "Allow Isolation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableUAC",
+    "switch": "MANIFESTUAC:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired",
+      "SpaceAppendable"
+    ]
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='false'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "false",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='false'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='true'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ManifestEmbed",
+    "switch": "manifest:embed",
+    "comment": "Embed Manifest",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG",
+    "comment": "Generate Debug Info",
+    "value": "true",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "GenerateMapFile",
+    "switch": "MAP",
+    "comment": "Generate Map File",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "MapExports",
+    "switch": "MAPINFO:EXPORTS",
+    "comment": "Map Exports",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AssemblyDebug",
+    "switch": "ASSEMBLYDEBUG:DISABLE",
+    "comment": "Debuggable Assembly",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "AssemblyDebug",
+    "switch": "ASSEMBLYDEBUG",
+    "comment": "Debuggable Assembly",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LargeAddressAware",
+    "switch": "LARGEADDRESSAWARE:NO",
+    "comment": "Enable Large Addresses",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LargeAddressAware",
+    "switch": "LARGEADDRESSAWARE",
+    "comment": "Enable Large Addresses",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TerminalServerAware",
+    "switch": "TSAWARE:NO",
+    "comment": "Terminal Server",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TerminalServerAware",
+    "switch": "TSAWARE",
+    "comment": "Terminal Server",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SwapRunFromCD",
+    "switch": "SWAPRUN:CD",
+    "comment": "Swap Run From CD",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SwapRunFromNET",
+    "switch": "SWAPRUN:NET",
+    "comment": "Swap Run From Network",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OptimizeReferences",
+    "switch": "OPT:NOREF",
+    "comment": "References",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "OptimizeReferences",
+    "switch": "OPT:REF",
+    "comment": "References",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableCOMDATFolding",
+    "switch": "OPT:NOICF",
+    "comment": "Enable COMDAT Folding",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnableCOMDATFolding",
+    "switch": "OPT:ICF",
+    "comment": "Enable COMDAT Folding",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreEmbeddedIDL",
+    "switch": "IGNOREIDL",
+    "comment": "Ignore Embedded IDL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AppContainer",
+    "switch": "APPCONTAINER",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataLinkDelaySign",
+    "switch": "WINMDDELAYSIGN:NO",
+    "comment": "Windows Metadata Delay Sign",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataLinkDelaySign",
+    "switch": "WINMDDELAYSIGN",
+    "comment": "Windows Metadata Delay Sign",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "NoEntryPoint",
+    "switch": "NOENTRY",
+    "comment": "No Entry Point",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SetChecksum",
+    "switch": "RELEASE",
+    "comment": "Set Checksum",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "RandomizedBaseAddress",
+    "switch": "DYNAMICBASE:NO",
+    "comment": "Randomized Base Address",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "RandomizedBaseAddress",
+    "switch": "DYNAMICBASE",
+    "comment": "Randomized Base Address",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "FixedBaseAddress",
+    "switch": "FIXED:NO",
+    "comment": "Fixed Base Address",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "FixedBaseAddress",
+    "switch": "FIXED",
+    "comment": "Fixed Base Address",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DataExecutionPrevention",
+    "switch": "NXCOMPAT:NO",
+    "comment": "Data Execution Prevention (DEP)",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "DataExecutionPrevention",
+    "switch": "NXCOMPAT",
+    "comment": "Data Execution Prevention (DEP)",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TurnOffAssemblyGeneration",
+    "switch": "NOASSEMBLY",
+    "comment": "Turn Off Assembly Generation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SupportUnloadOfDelayLoadedDLL",
+    "switch": "DELAY:UNLOAD",
+    "comment": "Unload delay loaded DLL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SupportNobindOfDelayLoadedDLL",
+    "switch": "DELAY:NOBIND",
+    "comment": "Nobind delay loaded DLL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "Profile",
+    "switch": "PROFILE",
+    "comment": "Profile",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkDelaySign",
+    "switch": "DELAYSIGN:NO",
+    "comment": "Delay Sign",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkDelaySign",
+    "switch": "DELAYSIGN",
+    "comment": "Delay Sign",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CLRUnmanagedCodeCheck",
+    "switch": "CLRUNMANAGEDCODECHECK:NO",
+    "comment": "CLR Unmanaged Code Check",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "CLRUnmanagedCodeCheck",
+    "switch": "CLRUNMANAGEDCODECHECK",
+    "comment": "CLR Unmanaged Code Check",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DetectOneDefinitionRule",
+    "switch": "ODR",
+    "comment": "Detect One Definition Rule violations",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ImageHasSafeExceptionHandlers",
+    "switch": "SAFESEH:NO",
+    "comment": "Image Has Safe Exception Handlers",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "ImageHasSafeExceptionHandlers",
+    "switch": "SAFESEH",
+    "comment": "Image Has Safe Exception Handlers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkDLL",
+    "switch": "DLL",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AdditionalLibraryDirectories",
+    "switch": "LIBPATH:",
+    "comment": "Additional Library Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "IgnoreSpecificDefaultLibraries",
+    "switch": "NODEFAULTLIB:",
+    "comment": "Ignore Specific Default Libraries",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AddModuleNamesToAssembly",
+    "switch": "ASSEMBLYMODULE:",
+    "comment": "Add Module to Assembly",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "EmbedManagedResourceFile",
+    "switch": "ASSEMBLYRESOURCE:",
+    "comment": "Embed Managed Resource File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ForceSymbolReferences",
+    "switch": "INCLUDE:",
+    "comment": "Force Symbol References",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "DelayLoadDLLs",
+    "switch": "DELAYLOAD:",
+    "comment": "Delay Loaded Dlls",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AssemblyLinkResource",
+    "switch": "ASSEMBLYLINKRESOURCE:",
+    "comment": "Assembly Link Resource",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalManifestDependencies",
+    "switch": "MANIFESTDEPENDENCY:",
+    "comment": "Additional Manifest Dependencies",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ManifestInput",
+    "switch": "manifestinput:",
+    "comment": "Manifest Input",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "OutputFile",
+    "switch": "OUT:",
+    "comment": "Output File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "Version",
+    "switch": "VERSION:",
+    "comment": "Version",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "SpecifySectionAttributes",
+    "switch": "SECTION:",
+    "comment": "Specify Section Attributes",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MSDOSStubFileName",
+    "switch": "STUB:",
+    "comment": "MS-DOS Stub File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ModuleDefinitionFile",
+    "switch": "DEF:",
+    "comment": "Module Definition File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ManifestFile",
+    "switch": "ManifestFile:",
+    "comment": "Manifest File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProgramDatabaseFile",
+    "switch": "PDB:",
+    "comment": "Generate Program Database File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "StripPrivateSymbols",
+    "switch": "PDBSTRIPPED:",
+    "comment": "Strip Private Symbols",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MapFileName",
+    "switch": "MAP:",
+    "comment": "Map File Name",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "HeapReserveSize",
+    "switch": "HEAP:",
+    "comment": "Heap Reserve Size",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "HeapCommitSize",
+    "switch": "HEAP",
+    "comment": "Heap Commit Size",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "StackReserveSize",
+    "switch": "STACK:",
+    "comment": "Stack Reserve Size",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "StackCommitSize",
+    "switch": "STACK",
+    "comment": "Stack Commit Size",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "FunctionOrder",
+    "switch": "ORDER:@",
+    "comment": "Function Order",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProfileGuidedDatabase",
+    "switch": "PGD:",
+    "comment": "Profile Guided Database",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MidlCommandFile",
+    "switch": "MIDL:@",
+    "comment": "MIDL Commands",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MergedIDLBaseFileName",
+    "switch": "IDLOUT:",
+    "comment": "Merged IDL Base File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "TypeLibraryFile",
+    "switch": "TLBOUT:",
+    "comment": "Type Library",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataFile",
+    "switch": "WINMDFILE:",
+    "comment": "Windows Metadata File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataLinkKeyFile",
+    "switch": "WINMDKEYFILE:",
+    "comment": "Windows Metadata Key File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataKeyContainer",
+    "switch": "WINMDKEYCONTAINER:",
+    "comment": "Windows Metadata Key Container",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "EntryPointSymbol",
+    "switch": "ENTRY:",
+    "comment": "Entry Point",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "BaseAddress",
+    "switch": "BASE:",
+    "comment": "Base Address",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ImportLibrary",
+    "switch": "IMPLIB:",
+    "comment": "Import Library",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "LinkKeyFile",
+    "switch": "KEYFILE:",
+    "comment": "Key File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "KeyContainer",
+    "switch": "KEYCONTAINER:",
+    "comment": "Key Container",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "TypeLibraryResourceID",
+    "switch": "TLBID:",
+    "comment": "TypeLib Resource ID",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "SectionAlignment",
+    "switch": "ALIGN:",
+    "comment": "SectionAlignment",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  }
+]
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v12_MASM.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v12_MASM.json
similarity index 100%
rename from share/cmake-3.18/Templates/MSBuild/FlagTables/v12_MASM.json
rename to share/cmake-3.22/Templates/MSBuild/FlagTables/v12_MASM.json
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v12_RC.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v12_RC.json
similarity index 100%
rename from share/cmake-3.18/Templates/MSBuild/FlagTables/v12_RC.json
rename to share/cmake-3.22/Templates/MSBuild/FlagTables/v12_RC.json
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v140_CL.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v140_CL.json
similarity index 100%
rename from share/cmake-3.18/Templates/MSBuild/FlagTables/v140_CL.json
rename to share/cmake-3.22/Templates/MSBuild/FlagTables/v140_CL.json
diff --git a/share/cmake-3.22/Templates/MSBuild/FlagTables/v140_CSharp.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v140_CSharp.json
new file mode 100644
index 0000000..9f21d9a
--- /dev/null
+++ b/share/cmake-3.22/Templates/MSBuild/FlagTables/v140_CSharp.json
@@ -0,0 +1,535 @@
+[
+  {
+    "name":  "ProjectName",
+    "switch": "out:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:exe",
+    "comment": "",
+    "value": "Exe",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:winexe",
+    "comment": "",
+    "value": "Winexe",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:library",
+    "comment": "",
+    "value": "Library",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:module",
+    "comment": "",
+    "value": "Module",
+    "flags": []
+  },
+  {
+    "name":  "DocumentationFile",
+    "switch": "doc",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:x86",
+    "comment": "",
+    "value": "x86",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:Itanium",
+    "comment": "",
+    "value": "Itanium",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:x64",
+    "comment": "",
+    "value": "x64",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:arm",
+    "comment": "",
+    "value": "arm",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:anycpu32bitpreferred",
+    "comment": "",
+    "value": "anycpu32bitpreferred",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:anycpu",
+    "comment": "",
+    "value": "anycpu",
+    "flags": []
+  },
+  {
+    "name":  "References",
+    "switch": "reference:",
+    "comment": "mit alias",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "References",
+    "switch": "reference:",
+    "comment": "dateiliste",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "AddModules",
+    "switch": "addmodule:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name":  "Win32Resource",
+    "switch": "win32res:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "ApplicationIcon",
+    "switch": "win32icon:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "ApplicationManifest",
+    "switch": "win32manifest:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "NoWin32Manifest",
+    "switch": "nowin32manifest",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DefineDebug",
+    "switch": "debug",
+    "comment": "",
+    "value": "true",
+    "flags": [
+      "Continue"
+    ]
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:none",
+    "comment": "",
+    "value": "none",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:full",
+    "comment": "",
+    "value": "full",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:pdbonly",
+    "comment": "",
+    "value": "pdbonly",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror-",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror+",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:0",
+    "comment": "",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:1",
+    "comment": "",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:2",
+    "comment": "",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:3",
+    "comment": "",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:4",
+    "comment": "",
+    "value": "4",
+    "flags": []
+  },
+  {
+    "name":  "NoWarn",
+    "switch": "nowarn:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired",
+      "CommaAppendable"
+    ]
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DefineConstants",
+    "switch": "define:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "SemicolonAppendable",
+      "UserValue"
+    ]
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AssemblyOriginatorKeyFile",
+    "switch": "keyfile",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "KeyContainerName",
+    "switch": "keycontainer",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoLogo",
+    "switch": "nologo",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoConfig",
+    "switch": "noconfig",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "BaseAddress",
+    "switch": "baseaddress:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "CodePage",
+    "switch": "codepage",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "Utf8Output",
+    "switch": "utf8output",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "MainEntryPoint",
+    "switch": "main:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "GenerateFullPaths",
+    "switch": "fullpaths",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "FileAlignment",
+    "switch": "filealign",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "PdbFile",
+    "switch": "pdb:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "SubsystemVersion",
+    "switch": "subsystemversion",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "AdditionalLibPaths",
+    "switch": "lib:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:none",
+    "comment": "Do Not Send Report",
+    "value": "none",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:prompt",
+    "comment": "Prompt Immediately",
+    "value": "prompt",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:queue",
+    "comment": "Queue For Next Login",
+    "value": "queue",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:send",
+    "comment": "Send Automatically",
+    "value": "send",
+    "flags": []
+  }
+]
diff --git a/share/cmake-3.22/Templates/MSBuild/FlagTables/v140_Link.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v140_Link.json
new file mode 100644
index 0000000..7e293b1
--- /dev/null
+++ b/share/cmake-3.22/Templates/MSBuild/FlagTables/v140_Link.json
@@ -0,0 +1,1307 @@
+[
+  {
+    "name": "ShowProgress",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE",
+    "comment": "Display all progress messages",
+    "value": "LinkVerbose",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:Lib",
+    "comment": "For Libraries Searched",
+    "value": "LinkVerboseLib",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:ICF",
+    "comment": "About COMDAT folding during optimized linking",
+    "value": "LinkVerboseICF",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:REF",
+    "comment": "About data removed during optimized linking",
+    "value": "LinkVerboseREF",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:SAFESEH",
+    "comment": "About Modules incompatible with SEH",
+    "value": "LinkVerboseSAFESEH",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:CLR",
+    "comment": "About linker activity related to managed code",
+    "value": "LinkVerboseCLR",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE:MULTIPLE",
+    "comment": "Multiply Defined Symbol Only",
+    "value": "MultiplyDefinedSymbolOnly",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE:UNRESOLVED",
+    "comment": "Undefined Symbol Only",
+    "value": "UndefinedSymbolOnly",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:5",
+    "comment": "X86 Image Only",
+    "value": "X86Image",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:6",
+    "comment": "X64 Image Only",
+    "value": "X64Image",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:16",
+    "comment": "Itanium Image Only",
+    "value": "ItaniumImage",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='asInvoker'",
+    "comment": "asInvoker",
+    "value": "AsInvoker",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='highestAvailable'",
+    "comment": "highestAvailable",
+    "value": "HighestAvailable",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='requireAdministrator'",
+    "comment": "requireAdministrator",
+    "value": "RequireAdministrator",
+    "flags": []
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG",
+    "comment": "Optimize for debugging",
+    "value": "true",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG:FASTLINK",
+    "comment": "Optimize for faster linking",
+    "value": "DebugFastLink",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG:FULL",
+    "comment": "Optimize for debugging",
+    "value": "true",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG:NONE",
+    "comment": "Produces no debugging information",
+    "value": "false",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "SubSystem",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:CONSOLE",
+    "comment": "Console",
+    "value": "Console",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:WINDOWS",
+    "comment": "Windows",
+    "value": "Windows",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:NATIVE",
+    "comment": "Native",
+    "value": "Native",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_APPLICATION",
+    "comment": "EFI Application",
+    "value": "EFI Application",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
+    "comment": "EFI Boot Service Driver",
+    "value": "EFI Boot Service Driver",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_ROM",
+    "comment": "EFI ROM",
+    "value": "EFI ROM",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_RUNTIME_DRIVER",
+    "comment": "EFI Runtime",
+    "value": "EFI Runtime",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:POSIX",
+    "comment": "POSIX",
+    "value": "POSIX",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "Driver",
+    "comment": "Driver",
+    "value": "Driver",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "DRIVER:UPONLY",
+    "comment": "UP Only",
+    "value": "UpOnly",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "DRIVER:WDM",
+    "comment": "WDM",
+    "value": "WDM",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:incremental",
+    "comment": "Use Fast Link Time Code Generation",
+    "value": "UseFastLinkTimeCodeGeneration",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG",
+    "comment": "Use Link Time Code Generation",
+    "value": "UseLinkTimeCodeGeneration",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGInstrument",
+    "comment": "Profile Guided Optimization - Instrument",
+    "value": "PGInstrument",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGOptimize",
+    "comment": "Profile Guided Optimization - Optimization",
+    "value": "PGOptimization",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGUpdate",
+    "comment": "Profile Guided Optimization - Update",
+    "value": "PGUpdate",
+    "flags": []
+  },
+  {
+    "name": "GenerateWindowsMetadata",
+    "switch": "WINMD",
+    "comment": "Yes",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateWindowsMetadata",
+    "switch": "WINMD:NO",
+    "comment": "No",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA1",
+    "comment": "SHA1",
+    "value": "SHA1",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA256",
+    "comment": "SHA256",
+    "value": "SHA256",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA384",
+    "comment": "SHA384",
+    "value": "SHA384",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA512",
+    "comment": "SHA512",
+    "value": "SHA512",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:ARM",
+    "comment": "MachineARM",
+    "value": "MachineARM",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:EBC",
+    "comment": "MachineEBC",
+    "value": "MachineEBC",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:IA64",
+    "comment": "MachineIA64",
+    "value": "MachineIA64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS",
+    "comment": "MachineMIPS",
+    "value": "MachineMIPS",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS16",
+    "comment": "MachineMIPS16",
+    "value": "MachineMIPS16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU",
+    "comment": "MachineMIPSFPU",
+    "value": "MachineMIPSFPU",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU16",
+    "comment": "MachineMIPSFPU16",
+    "value": "MachineMIPSFPU16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:SH4",
+    "comment": "MachineSH4",
+    "value": "MachineSH4",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:THUMB",
+    "comment": "MachineTHUMB",
+    "value": "MachineTHUMB",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X64",
+    "comment": "MachineX64",
+    "value": "MachineX64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X86",
+    "comment": "MachineX86",
+    "value": "MachineX86",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:MTA",
+    "comment": "MTA threading attribute",
+    "value": "MTAThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:STA",
+    "comment": "STA threading attribute",
+    "value": "STAThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:NONE",
+    "comment": "Default threading attribute",
+    "value": "DefaultThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:IJW",
+    "comment": "Force IJW image",
+    "value": "ForceIJWImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:PURE",
+    "comment": "Force Pure IL Image",
+    "value": "ForcePureILImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:SAFE",
+    "comment": "Force Safe IL Image",
+    "value": "ForceSafeILImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "",
+    "comment": "Default image type",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA1",
+    "comment": "SHA1",
+    "value": "SHA1",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA256",
+    "comment": "SHA256",
+    "value": "SHA256",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA384",
+    "comment": "SHA384",
+    "value": "SHA384",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA512",
+    "comment": "SHA512",
+    "value": "SHA512",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:PROMPT",
+    "comment": "PromptImmediately",
+    "value": "PromptImmediately",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:QUEUE",
+    "comment": "Queue For Next Login",
+    "value": "QueueForNextLogin",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:SEND",
+    "comment": "Send Error Report",
+    "value": "SendErrorReport",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:NONE",
+    "comment": "No Error Report",
+    "value": "NoErrorReport",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError:NO",
+    "comment": "Disabled",
+    "value": "Disabled",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError:SYSTEMDLL",
+    "comment": "System Dlls Only",
+    "value": "SystemDlls",
+    "flags": []
+  },
+  {
+    "name": "LinkIncremental",
+    "switch": "INCREMENTAL:NO",
+    "comment": "Enable Incremental Linking",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkIncremental",
+    "switch": "INCREMENTAL",
+    "comment": "Enable Incremental Linking",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "NOLOGO",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkStatus",
+    "switch": "LTCG:NOSTATUS",
+    "comment": "Link Status",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkStatus",
+    "switch": "LTCG:STATUS",
+    "comment": "Link Status",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreventDllBinding",
+    "switch": "ALLOWBIND:NO",
+    "comment": "Prevent Dll Binding",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "PreventDllBinding",
+    "switch": "ALLOWBIND",
+    "comment": "Prevent Dll Binding",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatLinkerWarningAsErrors",
+    "switch": "WX:NO",
+    "comment": "Treat Linker Warning As Errors",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatLinkerWarningAsErrors",
+    "switch": "WX",
+    "comment": "Treat Linker Warning As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreAllDefaultLibraries",
+    "switch": "NODEFAULTLIB",
+    "comment": "Ignore All Default Libraries",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateManifest",
+    "switch": "MANIFEST:NO",
+    "comment": "Generate Manifest",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "GenerateManifest",
+    "switch": "MANIFEST",
+    "comment": "Generate Manifest",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AllowIsolation",
+    "switch": "ALLOWISOLATION:NO",
+    "comment": "Allow Isolation",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "AllowIsolation",
+    "switch": "",
+    "comment": "Allow Isolation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableUAC",
+    "switch": "MANIFESTUAC:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired",
+      "SpaceAppendable"
+    ]
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='false'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "false",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='false'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='true'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ManifestEmbed",
+    "switch": "manifest:embed",
+    "comment": "Embed Manifest",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateMapFile",
+    "switch": "MAP",
+    "comment": "Generate Map File",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "MapExports",
+    "switch": "MAPINFO:EXPORTS",
+    "comment": "Map Exports",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AssemblyDebug",
+    "switch": "ASSEMBLYDEBUG:DISABLE",
+    "comment": "Debuggable Assembly",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "AssemblyDebug",
+    "switch": "ASSEMBLYDEBUG",
+    "comment": "Debuggable Assembly",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LargeAddressAware",
+    "switch": "LARGEADDRESSAWARE:NO",
+    "comment": "Enable Large Addresses",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LargeAddressAware",
+    "switch": "LARGEADDRESSAWARE",
+    "comment": "Enable Large Addresses",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TerminalServerAware",
+    "switch": "TSAWARE:NO",
+    "comment": "Terminal Server",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TerminalServerAware",
+    "switch": "TSAWARE",
+    "comment": "Terminal Server",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SwapRunFromCD",
+    "switch": "SWAPRUN:CD",
+    "comment": "Swap Run From CD",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SwapRunFromNET",
+    "switch": "SWAPRUN:NET",
+    "comment": "Swap Run From Network",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OptimizeReferences",
+    "switch": "OPT:NOREF",
+    "comment": "References",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "OptimizeReferences",
+    "switch": "OPT:REF",
+    "comment": "References",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableCOMDATFolding",
+    "switch": "OPT:NOICF",
+    "comment": "Enable COMDAT Folding",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnableCOMDATFolding",
+    "switch": "OPT:ICF",
+    "comment": "Enable COMDAT Folding",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreEmbeddedIDL",
+    "switch": "IGNOREIDL",
+    "comment": "Ignore Embedded IDL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AppContainer",
+    "switch": "APPCONTAINER",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataLinkDelaySign",
+    "switch": "WINMDDELAYSIGN:NO",
+    "comment": "Windows Metadata Delay Sign",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataLinkDelaySign",
+    "switch": "WINMDDELAYSIGN",
+    "comment": "Windows Metadata Delay Sign",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "NoEntryPoint",
+    "switch": "NOENTRY",
+    "comment": "No Entry Point",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SetChecksum",
+    "switch": "RELEASE",
+    "comment": "Set Checksum",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "RandomizedBaseAddress",
+    "switch": "DYNAMICBASE:NO",
+    "comment": "Randomized Base Address",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "RandomizedBaseAddress",
+    "switch": "DYNAMICBASE",
+    "comment": "Randomized Base Address",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "FixedBaseAddress",
+    "switch": "FIXED:NO",
+    "comment": "Fixed Base Address",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "FixedBaseAddress",
+    "switch": "FIXED",
+    "comment": "Fixed Base Address",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DataExecutionPrevention",
+    "switch": "NXCOMPAT:NO",
+    "comment": "Data Execution Prevention (DEP)",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "DataExecutionPrevention",
+    "switch": "NXCOMPAT",
+    "comment": "Data Execution Prevention (DEP)",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TurnOffAssemblyGeneration",
+    "switch": "NOASSEMBLY",
+    "comment": "Turn Off Assembly Generation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SupportUnloadOfDelayLoadedDLL",
+    "switch": "DELAY:UNLOAD",
+    "comment": "Unload delay loaded DLL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SupportNobindOfDelayLoadedDLL",
+    "switch": "DELAY:NOBIND",
+    "comment": "Nobind delay loaded DLL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "Profile",
+    "switch": "PROFILE",
+    "comment": "Profile",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkDelaySign",
+    "switch": "DELAYSIGN:NO",
+    "comment": "Delay Sign",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkDelaySign",
+    "switch": "DELAYSIGN",
+    "comment": "Delay Sign",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CLRUnmanagedCodeCheck",
+    "switch": "CLRUNMANAGEDCODECHECK:NO",
+    "comment": "CLR Unmanaged Code Check",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "CLRUnmanagedCodeCheck",
+    "switch": "CLRUNMANAGEDCODECHECK",
+    "comment": "CLR Unmanaged Code Check",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DetectOneDefinitionRule",
+    "switch": "ODR",
+    "comment": "Detect One Definition Rule violations",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ImageHasSafeExceptionHandlers",
+    "switch": "SAFESEH:NO",
+    "comment": "Image Has Safe Exception Handlers",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "ImageHasSafeExceptionHandlers",
+    "switch": "SAFESEH",
+    "comment": "Image Has Safe Exception Handlers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkDLL",
+    "switch": "DLL",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AdditionalLibraryDirectories",
+    "switch": "LIBPATH:",
+    "comment": "Additional Library Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "Natvis",
+    "switch": "NATVIS:",
+    "comment": "Natvis files",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "IgnoreSpecificDefaultLibraries",
+    "switch": "NODEFAULTLIB:",
+    "comment": "Ignore Specific Default Libraries",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AddModuleNamesToAssembly",
+    "switch": "ASSEMBLYMODULE:",
+    "comment": "Add Module to Assembly",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "EmbedManagedResourceFile",
+    "switch": "ASSEMBLYRESOURCE:",
+    "comment": "Embed Managed Resource File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ForceSymbolReferences",
+    "switch": "INCLUDE:",
+    "comment": "Force Symbol References",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "DelayLoadDLLs",
+    "switch": "DELAYLOAD:",
+    "comment": "Delay Loaded Dlls",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AssemblyLinkResource",
+    "switch": "ASSEMBLYLINKRESOURCE:",
+    "comment": "Assembly Link Resource",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalManifestDependencies",
+    "switch": "MANIFESTDEPENDENCY:",
+    "comment": "Additional Manifest Dependencies",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ManifestInput",
+    "switch": "manifestinput:",
+    "comment": "Manifest Input",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "OutputFile",
+    "switch": "OUT:",
+    "comment": "Output File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "Version",
+    "switch": "VERSION:",
+    "comment": "Version",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "SpecifySectionAttributes",
+    "switch": "SECTION:",
+    "comment": "Specify Section Attributes",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MSDOSStubFileName",
+    "switch": "STUB:",
+    "comment": "MS-DOS Stub File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ModuleDefinitionFile",
+    "switch": "DEF:",
+    "comment": "Module Definition File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ManifestFile",
+    "switch": "ManifestFile:",
+    "comment": "Manifest File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProgramDatabaseFile",
+    "switch": "PDB:",
+    "comment": "Generate Program Database File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "StripPrivateSymbols",
+    "switch": "PDBSTRIPPED:",
+    "comment": "Strip Private Symbols",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MapFileName",
+    "switch": "MAP:",
+    "comment": "Map File Name",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "HeapReserveSize",
+    "switch": "HEAP:",
+    "comment": "Heap Reserve Size",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "HeapCommitSize",
+    "switch": "HEAP",
+    "comment": "Heap Commit Size",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "StackReserveSize",
+    "switch": "STACK:",
+    "comment": "Stack Reserve Size",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "StackCommitSize",
+    "switch": "STACK",
+    "comment": "Stack Commit Size",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "FunctionOrder",
+    "switch": "ORDER:@",
+    "comment": "Function Order",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProfileGuidedDatabase",
+    "switch": "PGD:",
+    "comment": "Profile Guided Database",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MidlCommandFile",
+    "switch": "MIDL:@",
+    "comment": "MIDL Commands",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MergedIDLBaseFileName",
+    "switch": "IDLOUT:",
+    "comment": "Merged IDL Base File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "TypeLibraryFile",
+    "switch": "TLBOUT:",
+    "comment": "Type Library",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataFile",
+    "switch": "WINMDFILE:",
+    "comment": "Windows Metadata File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataLinkKeyFile",
+    "switch": "WINMDKEYFILE:",
+    "comment": "Windows Metadata Key File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataKeyContainer",
+    "switch": "WINMDKEYCONTAINER:",
+    "comment": "Windows Metadata Key Container",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "EntryPointSymbol",
+    "switch": "ENTRY:",
+    "comment": "Entry Point",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "BaseAddress",
+    "switch": "BASE:",
+    "comment": "Base Address",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ImportLibrary",
+    "switch": "IMPLIB:",
+    "comment": "Import Library",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "LinkKeyFile",
+    "switch": "KEYFILE:",
+    "comment": "Key File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "KeyContainer",
+    "switch": "KEYCONTAINER:",
+    "comment": "Key Container",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "TypeLibraryResourceID",
+    "switch": "TLBID:",
+    "comment": "TypeLib Resource ID",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "SectionAlignment",
+    "switch": "ALIGN:",
+    "comment": "SectionAlignment",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  }
+]
diff --git a/share/cmake-3.22/Templates/MSBuild/FlagTables/v141_CL.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v141_CL.json
new file mode 100644
index 0000000..5b18e32
--- /dev/null
+++ b/share/cmake-3.22/Templates/MSBuild/FlagTables/v141_CL.json
@@ -0,0 +1,1289 @@
+[
+  {
+    "name": "DebugInformationFormat",
+    "switch": "",
+    "comment": "None",
+    "value": "None",
+    "flags": []
+  },
+  {
+    "name": "DebugInformationFormat",
+    "switch": "Z7",
+    "comment": "C7 compatible",
+    "value": "OldStyle",
+    "flags": []
+  },
+  {
+    "name": "DebugInformationFormat",
+    "switch": "Zi",
+    "comment": "Program Database",
+    "value": "ProgramDatabase",
+    "flags": []
+  },
+  {
+    "name": "DebugInformationFormat",
+    "switch": "ZI",
+    "comment": "Program Database for Edit And Continue",
+    "value": "EditAndContinue",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "",
+    "comment": "No Common Language RunTime Support",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "clr",
+    "comment": "Common Language RunTime Support",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "clr:pure",
+    "comment": "Pure MSIL Common Language RunTime Support",
+    "value": "Pure",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "clr:safe",
+    "comment": "Safe MSIL Common Language RunTime Support",
+    "value": "Safe",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W0",
+    "comment": "Turn Off All Warnings",
+    "value": "TurnOffAllWarnings",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W1",
+    "comment": "Level1",
+    "value": "Level1",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W2",
+    "comment": "Level2",
+    "value": "Level2",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W3",
+    "comment": "Level3",
+    "value": "Level3",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W4",
+    "comment": "Level4",
+    "value": "Level4",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "Wall",
+    "comment": "EnableAllWarnings",
+    "value": "EnableAllWarnings",
+    "flags": []
+  },
+  {
+    "name": "DiagnosticsFormat",
+    "switch": "diagnostics:caret",
+    "comment": "Caret",
+    "value": "Caret",
+    "flags": []
+  },
+  {
+    "name": "DiagnosticsFormat",
+    "switch": "diagnostics:column",
+    "comment": "Column Info",
+    "value": "Column",
+    "flags": []
+  },
+  {
+    "name": "DiagnosticsFormat",
+    "switch": "diagnostics:classic",
+    "comment": "Classic",
+    "value": "Classic",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "",
+    "comment": "Custom",
+    "value": "Custom",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "Od",
+    "comment": "Disabled",
+    "value": "Disabled",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "O1",
+    "comment": "Maximum Optimization (Favor Size)",
+    "value": "MinSpace",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "O2",
+    "comment": "Maximum Optimization (Favor Speed)",
+    "value": "MaxSpeed",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "Ox",
+    "comment": "Optimizations (Favor Speed)",
+    "value": "Full",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "Ob0",
+    "comment": "Disabled",
+    "value": "Disabled",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "Ob1",
+    "comment": "Only __inline",
+    "value": "OnlyExplicitInline",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "Ob2",
+    "comment": "Any Suitable",
+    "value": "AnySuitable",
+    "flags": []
+  },
+  {
+    "name": "FavorSizeOrSpeed",
+    "switch": "Os",
+    "comment": "Favor small code",
+    "value": "Size",
+    "flags": []
+  },
+  {
+    "name": "FavorSizeOrSpeed",
+    "switch": "Ot",
+    "comment": "Favor fast code",
+    "value": "Speed",
+    "flags": []
+  },
+  {
+    "name": "FavorSizeOrSpeed",
+    "switch": "",
+    "comment": "Neither",
+    "value": "Neither",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "EHa",
+    "comment": "Yes with SEH Exceptions",
+    "value": "Async",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "EHsc",
+    "comment": "Yes",
+    "value": "Sync",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "EHs",
+    "comment": "Yes with Extern C functions",
+    "value": "SyncCThrow",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "",
+    "comment": "No",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "RTCs",
+    "comment": "Stack Frames",
+    "value": "StackFrameRuntimeCheck",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "RTCu",
+    "comment": "Uninitialized variables",
+    "value": "UninitializedLocalUsageCheck",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "RTC1",
+    "comment": "Both (/RTC1, equiv. to /RTCsu)",
+    "value": "EnableFastChecks",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MT",
+    "comment": "Multi-threaded",
+    "value": "MultiThreaded",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MTd",
+    "comment": "Multi-threaded Debug",
+    "value": "MultiThreadedDebug",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MD",
+    "comment": "Multi-threaded DLL",
+    "value": "MultiThreadedDLL",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MDd",
+    "comment": "Multi-threaded Debug DLL",
+    "value": "MultiThreadedDebugDLL",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp1",
+    "comment": "1 Byte",
+    "value": "1Byte",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp2",
+    "comment": "2 Bytes",
+    "value": "2Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp4",
+    "comment": "4 Byte",
+    "value": "4Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp8",
+    "comment": "8 Bytes",
+    "value": "8Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp16",
+    "comment": "16 Bytes",
+    "value": "16Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "BufferSecurityCheck",
+    "switch": "GS-",
+    "comment": "Disable Security Check",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "BufferSecurityCheck",
+    "switch": "GS",
+    "comment": "Enable Security Check",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ControlFlowGuard",
+    "switch": "guard:cf",
+    "comment": "Yes",
+    "value": "Guard",
+    "flags": []
+  },
+  {
+    "name": "ControlFlowGuard",
+    "switch": "",
+    "comment": "No",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:SSE",
+    "comment": "Streaming SIMD Extensions",
+    "value": "StreamingSIMDExtensions",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:SSE2",
+    "comment": "Streaming SIMD Extensions 2",
+    "value": "StreamingSIMDExtensions2",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:AVX",
+    "comment": "Advanced Vector Extensions",
+    "value": "AdvancedVectorExtensions",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:AVX2",
+    "comment": "Advanced Vector Extensions 2",
+    "value": "AdvancedVectorExtensions2",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:IA32",
+    "comment": "No Enhanced Instructions",
+    "value": "NoExtensions",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointModel",
+    "switch": "fp:precise",
+    "comment": "Precise",
+    "value": "Precise",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointModel",
+    "switch": "fp:strict",
+    "comment": "Strict",
+    "value": "Strict",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointModel",
+    "switch": "fp:fast",
+    "comment": "Fast",
+    "value": "Fast",
+    "flags": []
+  },
+  {
+    "name": "SpectreMitigation",
+    "switch": "Qspectre-load-cf",
+    "comment": "All Control Flow Loads",
+    "value": "SpectreLoadCF",
+    "flags": []
+  },
+  {
+    "name": "SpectreMitigation",
+    "switch": "Qspectre-load",
+    "comment": "All Loads",
+    "value": "SpectreLoad",
+    "flags": []
+  },
+  {
+    "name": "SpectreMitigation",
+    "switch": "Qspectre-",
+    "comment": "Disabled",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "SpectreMitigation",
+    "switch": "Qspectre",
+    "comment": "Enabled",
+    "value": "Spectre",
+    "flags": []
+  },
+  {
+    "name": "LanguageStandard",
+    "switch": "std:c++14",
+    "comment": "ISO C++14 Standard",
+    "value": "stdcpp14",
+    "flags": []
+  },
+  {
+    "name": "LanguageStandard",
+    "switch": "std:c++17",
+    "comment": "ISO C++17 Standard",
+    "value": "stdcpp17",
+    "flags": []
+  },
+  {
+    "name": "LanguageStandard",
+    "switch": "std:c++latest",
+    "comment": "ISO C++ Latest Draft Standard",
+    "value": "stdcpplatest",
+    "flags": []
+  },
+  {
+    "name": "PrecompiledHeader",
+    "switch": "Yc",
+    "comment": "Create",
+    "value": "Create",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "PrecompiledHeader",
+    "switch": "Yu",
+    "comment": "Use",
+    "value": "Use",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "PrecompiledHeader",
+    "switch": "Y-",
+    "comment": "Not Using Precompiled Headers",
+    "value": "NotUsing",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "",
+    "comment": "No Listing",
+    "value": "NoListing",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FA",
+    "comment": "Assembly-Only Listing",
+    "value": "AssemblyCode",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FAc",
+    "comment": "Assembly With Machine Code",
+    "value": "AssemblyAndMachineCode",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FAs",
+    "comment": "Assembly With Source Code",
+    "value": "AssemblyAndSourceCode",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FAcs",
+    "comment": "Assembly, Machine Code and Source",
+    "value": "All",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gd",
+    "comment": "__cdecl",
+    "value": "Cdecl",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gr",
+    "comment": "__fastcall",
+    "value": "FastCall",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gz",
+    "comment": "__stdcall",
+    "value": "StdCall",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gv",
+    "comment": "__vectorcall",
+    "value": "VectorCall",
+    "flags": []
+  },
+  {
+    "name": "CompileAs",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "CompileAs",
+    "switch": "TC",
+    "comment": "Compile as C Code",
+    "value": "CompileAsC",
+    "flags": []
+  },
+  {
+    "name": "CompileAs",
+    "switch": "TP",
+    "comment": "Compile as C++ Code",
+    "value": "CompileAsCpp",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:none",
+    "comment": "Do Not Send Report",
+    "value": "None",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:prompt",
+    "comment": "Prompt Immediately",
+    "value": "Prompt",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:queue",
+    "comment": "Queue For Next Login",
+    "value": "Queue",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:send",
+    "comment": "Send Automatically",
+    "value": "Send",
+    "flags": []
+  },
+  {
+    "name": "SupportJustMyCode",
+    "switch": "JMC-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "SupportJustMyCode",
+    "switch": "JMC",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CompileAsWinRT",
+    "switch": "ZW",
+    "comment": "Consume Windows Runtime Extension",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "WinRTNoStdLib",
+    "switch": "ZW:nostdlib",
+    "comment": "No Standard WinRT Libraries",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "nologo",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatWarningAsError",
+    "switch": "WX-",
+    "comment": "Treat Warnings As Errors",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatWarningAsError",
+    "switch": "WX",
+    "comment": "Treat Warnings As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SDLCheck",
+    "switch": "sdl-",
+    "comment": "SDL checks",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "SDLCheck",
+    "switch": "sdl",
+    "comment": "SDL checks",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "MultiProcessorCompilation",
+    "switch": "MP",
+    "comment": "Multi-processor Compilation",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "IntrinsicFunctions",
+    "switch": "Oi",
+    "comment": "Enable Intrinsic Functions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OmitFramePointers",
+    "switch": "Oy-",
+    "comment": "Omit Frame Pointers",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "OmitFramePointers",
+    "switch": "Oy",
+    "comment": "Omit Frame Pointers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableFiberSafeOptimizations",
+    "switch": "GT",
+    "comment": "Enable Fiber-Safe Optimizations",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "WholeProgramOptimization",
+    "switch": "GL",
+    "comment": "Whole Program Optimization",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UndefineAllPreprocessorDefinitions",
+    "switch": "u",
+    "comment": "Undefine All Preprocessor Definitions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreStandardIncludePath",
+    "switch": "X",
+    "comment": "Ignore Standard Include Paths",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessToFile",
+    "switch": "P",
+    "comment": "Preprocess to a File",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessSuppressLineNumbers",
+    "switch": "EP",
+    "comment": "Preprocess Suppress Line Numbers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessKeepComments",
+    "switch": "C",
+    "comment": "Keep Comments",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "StringPooling",
+    "switch": "GF-",
+    "comment": "Enable String Pooling",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "StringPooling",
+    "switch": "GF",
+    "comment": "Enable String Pooling",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "MinimalRebuild",
+    "switch": "Gm-",
+    "comment": "Enable Minimal Rebuild",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "MinimalRebuild",
+    "switch": "Gm",
+    "comment": "Enable Minimal Rebuild",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SmallerTypeCheck",
+    "switch": "RTCc",
+    "comment": "Smaller Type Check",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "FunctionLevelLinking",
+    "switch": "Gy-",
+    "comment": "Enable Function-Level Linking",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "FunctionLevelLinking",
+    "switch": "Gy",
+    "comment": "Enable Function-Level Linking",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableParallelCodeGeneration",
+    "switch": "Qpar-",
+    "comment": "Enable Parallel Code Generation",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnableParallelCodeGeneration",
+    "switch": "Qpar",
+    "comment": "Enable Parallel Code Generation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointExceptions",
+    "switch": "fp:except-",
+    "comment": "Enable Floating Point Exceptions",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointExceptions",
+    "switch": "fp:except",
+    "comment": "Enable Floating Point Exceptions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CreateHotpatchableImage",
+    "switch": "hotpatch",
+    "comment": "Create Hotpatchable Image",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DisableLanguageExtensions",
+    "switch": "Za",
+    "comment": "Disable Language Extensions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ConformanceMode",
+    "switch": "permissive-",
+    "comment": "Conformance mode",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ConformanceMode",
+    "switch": "permissive",
+    "comment": "Conformance mode disabled",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatWChar_tAsBuiltInType",
+    "switch": "Zc:wchar_t-",
+    "comment": "Treat WChar_t As Built in Type",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatWChar_tAsBuiltInType",
+    "switch": "Zc:wchar_t",
+    "comment": "Treat WChar_t As Built in Type",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ForceConformanceInForLoopScope",
+    "switch": "Zc:forScope-",
+    "comment": "Force Conformance in For Loop Scope",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "ForceConformanceInForLoopScope",
+    "switch": "Zc:forScope",
+    "comment": "Force Conformance in For Loop Scope",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "RemoveUnreferencedCodeData",
+    "switch": "Zc:inline-",
+    "comment": "Remove unreferenced code and data",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "RemoveUnreferencedCodeData",
+    "switch": "Zc:inline",
+    "comment": "Remove unreferenced code and data",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnforceTypeConversionRules",
+    "switch": "Zc:rvalueCast-",
+    "comment": "Enforce type conversion rules",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnforceTypeConversionRules",
+    "switch": "Zc:rvalueCast",
+    "comment": "Enforce type conversion rules",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "RuntimeTypeInfo",
+    "switch": "GR-",
+    "comment": "Enable Run-Time Type Information",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "RuntimeTypeInfo",
+    "switch": "GR",
+    "comment": "Enable Run-Time Type Information",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OpenMPSupport",
+    "switch": "openmp-",
+    "comment": "Open MP Support",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "OpenMPSupport",
+    "switch": "openmp",
+    "comment": "Open MP Support",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableModules",
+    "switch": "experimental:module",
+    "comment": "Enable C++ Modules (experimental)",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ExpandAttributedSource",
+    "switch": "Fx",
+    "comment": "Expand Attributed Source",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UseUnicodeForAssemblerListing",
+    "switch": "FAu",
+    "comment": "Use Unicode For Assembler Listing",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateXMLDocumentationFiles",
+    "switch": "doc",
+    "comment": "Generate XML Documentation Files",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "BrowseInformation",
+    "switch": "FR",
+    "comment": "Enable Browse Information",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "ShowIncludes",
+    "switch": "showIncludes",
+    "comment": "Show Includes",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnablePREfast",
+    "switch": "analyze-",
+    "comment": "Enable Code Analysis",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnablePREfast",
+    "switch": "analyze",
+    "comment": "Enable Code Analysis",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UseFullPaths",
+    "switch": "FC",
+    "comment": "Use Full Paths",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OmitDefaultLibName",
+    "switch": "Zl",
+    "comment": "Omit Default Library Name",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AdditionalIncludeDirectories",
+    "switch": "I",
+    "comment": "Additional Include Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalUsingDirectories",
+    "switch": "AI",
+    "comment": "Additional #using Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "PreprocessorDefinitions",
+    "switch": "D",
+    "comment": "Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "UndefinePreprocessorDefinitions",
+    "switch": "U",
+    "comment": "Undefine Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "DisableSpecificWarnings",
+    "switch": "wd",
+    "comment": "Disable Specific Warnings",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ForcedIncludeFiles",
+    "switch": "FI",
+    "comment": "Forced Include File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ForcedUsingFiles",
+    "switch": "FU",
+    "comment": "Forced #using File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "PREfastLog",
+    "switch": "analyze:log",
+    "comment": "Code Analysis Log",
+    "value": "",
+    "flags": [
+      "UserFollowing"
+    ]
+  },
+  {
+    "name": "PREfastAdditionalPlugins",
+    "switch": "analyze:plugin",
+    "comment": "Additional Code Analysis Native plugins",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "TreatSpecificWarningsAsErrors",
+    "switch": "we",
+    "comment": "Treat Specific Warnings As Errors",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "WarningVersion",
+    "switch": "Wv:",
+    "comment": "Warning Version",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "PreprocessOutputPath",
+    "switch": "Fi",
+    "comment": "Preprocess Output Path",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "PrecompiledHeaderFile",
+    "switch": "Yu",
+    "comment": "Precompiled Header File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "PrecompiledHeaderFile",
+    "switch": "Yc",
+    "comment": "Precompiled Header File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "PrecompiledHeaderOutputFile",
+    "switch": "Fp",
+    "comment": "Precompiled Header Output File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "AssemblerListingLocation",
+    "switch": "Fa",
+    "comment": "ASM List Location",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ObjectFileName",
+    "switch": "Fo",
+    "comment": "Object File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProgramDataBaseFileName",
+    "switch": "Fd",
+    "comment": "Program Database File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "XMLDocumentationFileName",
+    "switch": "doc",
+    "comment": "XML Documentation File Name",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "BrowseInformationFile",
+    "switch": "FR",
+    "comment": "Browse Information File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "ProcessorNumber",
+    "switch": "MP",
+    "comment": "Number of processors",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "CppLanguageStandard",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "CppLanguageStandard",
+    "switch": "std=c++98",
+    "comment": "C++03",
+    "value": "c++98",
+    "flags": []
+  },
+  {
+    "name": "CppLanguageStandard",
+    "switch": "std=c++11",
+    "comment": "C++11",
+    "value": "c++11",
+    "flags": []
+  },
+  {
+    "name": "CppLanguageStandard",
+    "switch": "std=c++1y",
+    "comment": "C++14",
+    "value": "c++1y",
+    "flags": []
+  },
+  {
+    "name": "CppLanguageStandard",
+    "switch": "std=c++14",
+    "comment": "C++14",
+    "value": "c++1y",
+    "flags": []
+  },
+  {
+    "name": "CppLanguageStandard",
+    "switch": "std=gnu++98",
+    "comment": "C++03 (GNU Dialect)",
+    "value": "gnu++98",
+    "flags": []
+  },
+  {
+    "name": "CppLanguageStandard",
+    "switch": "std=gnu++11",
+    "comment": "C++11 (GNU Dialect)",
+    "value": "gnu++11",
+    "flags": []
+  },
+  {
+    "name": "CppLanguageStandard",
+    "switch": "std=gnu++1y",
+    "comment": "C++14 (GNU Dialect)",
+    "value": "gnu++1y",
+    "flags": []
+  },
+  {
+    "name": "CppLanguageStandard",
+    "switch": "std=gnu++14",
+    "comment": "C++14 (GNU Dialect)",
+    "value": "gnu++1y",
+    "flags": []
+  }
+]
diff --git a/share/cmake-3.22/Templates/MSBuild/FlagTables/v141_CSharp.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v141_CSharp.json
new file mode 100644
index 0000000..9f21d9a
--- /dev/null
+++ b/share/cmake-3.22/Templates/MSBuild/FlagTables/v141_CSharp.json
@@ -0,0 +1,535 @@
+[
+  {
+    "name":  "ProjectName",
+    "switch": "out:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:exe",
+    "comment": "",
+    "value": "Exe",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:winexe",
+    "comment": "",
+    "value": "Winexe",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:library",
+    "comment": "",
+    "value": "Library",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:module",
+    "comment": "",
+    "value": "Module",
+    "flags": []
+  },
+  {
+    "name":  "DocumentationFile",
+    "switch": "doc",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:x86",
+    "comment": "",
+    "value": "x86",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:Itanium",
+    "comment": "",
+    "value": "Itanium",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:x64",
+    "comment": "",
+    "value": "x64",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:arm",
+    "comment": "",
+    "value": "arm",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:anycpu32bitpreferred",
+    "comment": "",
+    "value": "anycpu32bitpreferred",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:anycpu",
+    "comment": "",
+    "value": "anycpu",
+    "flags": []
+  },
+  {
+    "name":  "References",
+    "switch": "reference:",
+    "comment": "mit alias",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "References",
+    "switch": "reference:",
+    "comment": "dateiliste",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "AddModules",
+    "switch": "addmodule:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name":  "Win32Resource",
+    "switch": "win32res:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "ApplicationIcon",
+    "switch": "win32icon:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "ApplicationManifest",
+    "switch": "win32manifest:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "NoWin32Manifest",
+    "switch": "nowin32manifest",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DefineDebug",
+    "switch": "debug",
+    "comment": "",
+    "value": "true",
+    "flags": [
+      "Continue"
+    ]
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:none",
+    "comment": "",
+    "value": "none",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:full",
+    "comment": "",
+    "value": "full",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:pdbonly",
+    "comment": "",
+    "value": "pdbonly",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror-",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror+",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:0",
+    "comment": "",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:1",
+    "comment": "",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:2",
+    "comment": "",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:3",
+    "comment": "",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:4",
+    "comment": "",
+    "value": "4",
+    "flags": []
+  },
+  {
+    "name":  "NoWarn",
+    "switch": "nowarn:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired",
+      "CommaAppendable"
+    ]
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DefineConstants",
+    "switch": "define:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "SemicolonAppendable",
+      "UserValue"
+    ]
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AssemblyOriginatorKeyFile",
+    "switch": "keyfile",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "KeyContainerName",
+    "switch": "keycontainer",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoLogo",
+    "switch": "nologo",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoConfig",
+    "switch": "noconfig",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "BaseAddress",
+    "switch": "baseaddress:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "CodePage",
+    "switch": "codepage",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "Utf8Output",
+    "switch": "utf8output",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "MainEntryPoint",
+    "switch": "main:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "GenerateFullPaths",
+    "switch": "fullpaths",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "FileAlignment",
+    "switch": "filealign",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "PdbFile",
+    "switch": "pdb:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "SubsystemVersion",
+    "switch": "subsystemversion",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "AdditionalLibPaths",
+    "switch": "lib:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:none",
+    "comment": "Do Not Send Report",
+    "value": "none",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:prompt",
+    "comment": "Prompt Immediately",
+    "value": "prompt",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:queue",
+    "comment": "Queue For Next Login",
+    "value": "queue",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:send",
+    "comment": "Send Automatically",
+    "value": "send",
+    "flags": []
+  }
+]
diff --git a/share/cmake-3.22/Templates/MSBuild/FlagTables/v141_Link.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v141_Link.json
new file mode 100644
index 0000000..e311240
--- /dev/null
+++ b/share/cmake-3.22/Templates/MSBuild/FlagTables/v141_Link.json
@@ -0,0 +1,1314 @@
+[
+  {
+    "name": "ShowProgress",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE",
+    "comment": "Display all progress messages",
+    "value": "LinkVerbose",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:Lib",
+    "comment": "For Libraries Searched",
+    "value": "LinkVerboseLib",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:ICF",
+    "comment": "About COMDAT folding during optimized linking",
+    "value": "LinkVerboseICF",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:REF",
+    "comment": "About data removed during optimized linking",
+    "value": "LinkVerboseREF",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:SAFESEH",
+    "comment": "About Modules incompatible with SEH",
+    "value": "LinkVerboseSAFESEH",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:CLR",
+    "comment": "About linker activity related to managed code",
+    "value": "LinkVerboseCLR",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE:MULTIPLE",
+    "comment": "Multiply Defined Symbol Only",
+    "value": "MultiplyDefinedSymbolOnly",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE:UNRESOLVED",
+    "comment": "Undefined Symbol Only",
+    "value": "UndefinedSymbolOnly",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:5",
+    "comment": "X86 Image Only",
+    "value": "X86Image",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:6",
+    "comment": "X64 Image Only",
+    "value": "X64Image",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:16",
+    "comment": "Itanium Image Only",
+    "value": "ItaniumImage",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='asInvoker'",
+    "comment": "asInvoker",
+    "value": "AsInvoker",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='highestAvailable'",
+    "comment": "highestAvailable",
+    "value": "HighestAvailable",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='requireAdministrator'",
+    "comment": "requireAdministrator",
+    "value": "RequireAdministrator",
+    "flags": []
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG",
+    "comment": "Generate Debug Information",
+    "value": "true",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG:FASTLINK",
+    "comment": "Generate Debug Information optimized for faster links",
+    "value": "DebugFastLink",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG:FULL",
+    "comment": "Generate Debug Information optimized for sharing and publishing",
+    "value": "DebugFull",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG:NONE",
+    "comment": "Produces no debugging information",
+    "value": "false",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "SubSystem",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:CONSOLE",
+    "comment": "Console",
+    "value": "Console",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:WINDOWS",
+    "comment": "Windows",
+    "value": "Windows",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:NATIVE",
+    "comment": "Native",
+    "value": "Native",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_APPLICATION",
+    "comment": "EFI Application",
+    "value": "EFI Application",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
+    "comment": "EFI Boot Service Driver",
+    "value": "EFI Boot Service Driver",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_ROM",
+    "comment": "EFI ROM",
+    "value": "EFI ROM",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_RUNTIME_DRIVER",
+    "comment": "EFI Runtime",
+    "value": "EFI Runtime",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:POSIX",
+    "comment": "POSIX",
+    "value": "POSIX",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "Driver",
+    "comment": "Driver",
+    "value": "Driver",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "DRIVER:UPONLY",
+    "comment": "UP Only",
+    "value": "UpOnly",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "DRIVER:WDM",
+    "comment": "WDM",
+    "value": "WDM",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:incremental",
+    "comment": "Use Fast Link Time Code Generation",
+    "value": "UseFastLinkTimeCodeGeneration",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG",
+    "comment": "Use Link Time Code Generation",
+    "value": "UseLinkTimeCodeGeneration",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGInstrument",
+    "comment": "Profile Guided Optimization - Instrument",
+    "value": "PGInstrument",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGOptimize",
+    "comment": "Profile Guided Optimization - Optimization",
+    "value": "PGOptimization",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGUpdate",
+    "comment": "Profile Guided Optimization - Update",
+    "value": "PGUpdate",
+    "flags": []
+  },
+  {
+    "name": "GenerateWindowsMetadata",
+    "switch": "WINMD",
+    "comment": "Yes",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateWindowsMetadata",
+    "switch": "WINMD:NO",
+    "comment": "No",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA1",
+    "comment": "SHA1",
+    "value": "SHA1",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA256",
+    "comment": "SHA256",
+    "value": "SHA256",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA384",
+    "comment": "SHA384",
+    "value": "SHA384",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA512",
+    "comment": "SHA512",
+    "value": "SHA512",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:ARM",
+    "comment": "MachineARM",
+    "value": "MachineARM",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:ARM64",
+    "comment": "MachineARM64",
+    "value": "MachineARM64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:EBC",
+    "comment": "MachineEBC",
+    "value": "MachineEBC",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:IA64",
+    "comment": "MachineIA64",
+    "value": "MachineIA64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS",
+    "comment": "MachineMIPS",
+    "value": "MachineMIPS",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS16",
+    "comment": "MachineMIPS16",
+    "value": "MachineMIPS16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU",
+    "comment": "MachineMIPSFPU",
+    "value": "MachineMIPSFPU",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU16",
+    "comment": "MachineMIPSFPU16",
+    "value": "MachineMIPSFPU16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:SH4",
+    "comment": "MachineSH4",
+    "value": "MachineSH4",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:THUMB",
+    "comment": "MachineTHUMB",
+    "value": "MachineTHUMB",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X64",
+    "comment": "MachineX64",
+    "value": "MachineX64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X86",
+    "comment": "MachineX86",
+    "value": "MachineX86",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:MTA",
+    "comment": "MTA threading attribute",
+    "value": "MTAThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:STA",
+    "comment": "STA threading attribute",
+    "value": "STAThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:NONE",
+    "comment": "Default threading attribute",
+    "value": "DefaultThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:IJW",
+    "comment": "Force IJW image",
+    "value": "ForceIJWImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:PURE",
+    "comment": "Force Pure IL Image",
+    "value": "ForcePureILImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:SAFE",
+    "comment": "Force Safe IL Image",
+    "value": "ForceSafeILImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "",
+    "comment": "Default image type",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA1",
+    "comment": "SHA1",
+    "value": "SHA1",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA256",
+    "comment": "SHA256",
+    "value": "SHA256",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA384",
+    "comment": "SHA384",
+    "value": "SHA384",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA512",
+    "comment": "SHA512",
+    "value": "SHA512",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:PROMPT",
+    "comment": "PromptImmediately",
+    "value": "PromptImmediately",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:QUEUE",
+    "comment": "Queue For Next Login",
+    "value": "QueueForNextLogin",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:SEND",
+    "comment": "Send Error Report",
+    "value": "SendErrorReport",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:NONE",
+    "comment": "No Error Report",
+    "value": "NoErrorReport",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError:NO",
+    "comment": "Disabled",
+    "value": "Disabled",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError:SYSTEMDLL",
+    "comment": "System Dlls Only",
+    "value": "SystemDlls",
+    "flags": []
+  },
+  {
+    "name": "LinkIncremental",
+    "switch": "INCREMENTAL:NO",
+    "comment": "Enable Incremental Linking",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkIncremental",
+    "switch": "INCREMENTAL",
+    "comment": "Enable Incremental Linking",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "NOLOGO",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkStatus",
+    "switch": "LTCG:NOSTATUS",
+    "comment": "Link Status",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkStatus",
+    "switch": "LTCG:STATUS",
+    "comment": "Link Status",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreventDllBinding",
+    "switch": "ALLOWBIND:NO",
+    "comment": "Prevent Dll Binding",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "PreventDllBinding",
+    "switch": "ALLOWBIND",
+    "comment": "Prevent Dll Binding",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatLinkerWarningAsErrors",
+    "switch": "WX:NO",
+    "comment": "Treat Linker Warning As Errors",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatLinkerWarningAsErrors",
+    "switch": "WX",
+    "comment": "Treat Linker Warning As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreAllDefaultLibraries",
+    "switch": "NODEFAULTLIB",
+    "comment": "Ignore All Default Libraries",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateManifest",
+    "switch": "MANIFEST:NO",
+    "comment": "Generate Manifest",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "GenerateManifest",
+    "switch": "MANIFEST",
+    "comment": "Generate Manifest",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AllowIsolation",
+    "switch": "ALLOWISOLATION:NO",
+    "comment": "Allow Isolation",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "AllowIsolation",
+    "switch": "",
+    "comment": "Allow Isolation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableUAC",
+    "switch": "MANIFESTUAC:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired",
+      "SpaceAppendable"
+    ]
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='false'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "false",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='false'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='true'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ManifestEmbed",
+    "switch": "manifest:embed",
+    "comment": "Embed Manifest",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateMapFile",
+    "switch": "MAP",
+    "comment": "Generate Map File",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "MapExports",
+    "switch": "MAPINFO:EXPORTS",
+    "comment": "Map Exports",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AssemblyDebug",
+    "switch": "ASSEMBLYDEBUG:DISABLE",
+    "comment": "Debuggable Assembly",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "AssemblyDebug",
+    "switch": "ASSEMBLYDEBUG",
+    "comment": "Debuggable Assembly",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LargeAddressAware",
+    "switch": "LARGEADDRESSAWARE:NO",
+    "comment": "Enable Large Addresses",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LargeAddressAware",
+    "switch": "LARGEADDRESSAWARE",
+    "comment": "Enable Large Addresses",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TerminalServerAware",
+    "switch": "TSAWARE:NO",
+    "comment": "Terminal Server",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TerminalServerAware",
+    "switch": "TSAWARE",
+    "comment": "Terminal Server",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SwapRunFromCD",
+    "switch": "SWAPRUN:CD",
+    "comment": "Swap Run From CD",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SwapRunFromNET",
+    "switch": "SWAPRUN:NET",
+    "comment": "Swap Run From Network",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OptimizeReferences",
+    "switch": "OPT:NOREF",
+    "comment": "References",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "OptimizeReferences",
+    "switch": "OPT:REF",
+    "comment": "References",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableCOMDATFolding",
+    "switch": "OPT:NOICF",
+    "comment": "Enable COMDAT Folding",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnableCOMDATFolding",
+    "switch": "OPT:ICF",
+    "comment": "Enable COMDAT Folding",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreEmbeddedIDL",
+    "switch": "IGNOREIDL",
+    "comment": "Ignore Embedded IDL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AppContainer",
+    "switch": "APPCONTAINER",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataLinkDelaySign",
+    "switch": "WINMDDELAYSIGN:NO",
+    "comment": "Windows Metadata Delay Sign",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataLinkDelaySign",
+    "switch": "WINMDDELAYSIGN",
+    "comment": "Windows Metadata Delay Sign",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "NoEntryPoint",
+    "switch": "NOENTRY",
+    "comment": "No Entry Point",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SetChecksum",
+    "switch": "RELEASE",
+    "comment": "Set Checksum",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "RandomizedBaseAddress",
+    "switch": "DYNAMICBASE:NO",
+    "comment": "Randomized Base Address",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "RandomizedBaseAddress",
+    "switch": "DYNAMICBASE",
+    "comment": "Randomized Base Address",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "FixedBaseAddress",
+    "switch": "FIXED:NO",
+    "comment": "Fixed Base Address",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "FixedBaseAddress",
+    "switch": "FIXED",
+    "comment": "Fixed Base Address",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DataExecutionPrevention",
+    "switch": "NXCOMPAT:NO",
+    "comment": "Data Execution Prevention (DEP)",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "DataExecutionPrevention",
+    "switch": "NXCOMPAT",
+    "comment": "Data Execution Prevention (DEP)",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TurnOffAssemblyGeneration",
+    "switch": "NOASSEMBLY",
+    "comment": "Turn Off Assembly Generation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SupportUnloadOfDelayLoadedDLL",
+    "switch": "DELAY:UNLOAD",
+    "comment": "Unload delay loaded DLL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SupportNobindOfDelayLoadedDLL",
+    "switch": "DELAY:NOBIND",
+    "comment": "Nobind delay loaded DLL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "Profile",
+    "switch": "PROFILE",
+    "comment": "Profile",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkDelaySign",
+    "switch": "DELAYSIGN:NO",
+    "comment": "Delay Sign",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkDelaySign",
+    "switch": "DELAYSIGN",
+    "comment": "Delay Sign",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CLRUnmanagedCodeCheck",
+    "switch": "CLRUNMANAGEDCODECHECK:NO",
+    "comment": "CLR Unmanaged Code Check",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "CLRUnmanagedCodeCheck",
+    "switch": "CLRUNMANAGEDCODECHECK",
+    "comment": "CLR Unmanaged Code Check",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DetectOneDefinitionRule",
+    "switch": "ODR",
+    "comment": "Detect One Definition Rule violations",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ImageHasSafeExceptionHandlers",
+    "switch": "SAFESEH:NO",
+    "comment": "Image Has Safe Exception Handlers",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "ImageHasSafeExceptionHandlers",
+    "switch": "SAFESEH",
+    "comment": "Image Has Safe Exception Handlers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkDLL",
+    "switch": "DLL",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AdditionalLibraryDirectories",
+    "switch": "LIBPATH:",
+    "comment": "Additional Library Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "Natvis",
+    "switch": "NATVIS:",
+    "comment": "Natvis files",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "IgnoreSpecificDefaultLibraries",
+    "switch": "NODEFAULTLIB:",
+    "comment": "Ignore Specific Default Libraries",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AddModuleNamesToAssembly",
+    "switch": "ASSEMBLYMODULE:",
+    "comment": "Add Module to Assembly",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "EmbedManagedResourceFile",
+    "switch": "ASSEMBLYRESOURCE:",
+    "comment": "Embed Managed Resource File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ForceSymbolReferences",
+    "switch": "INCLUDE:",
+    "comment": "Force Symbol References",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "DelayLoadDLLs",
+    "switch": "DELAYLOAD:",
+    "comment": "Delay Loaded Dlls",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AssemblyLinkResource",
+    "switch": "ASSEMBLYLINKRESOURCE:",
+    "comment": "Assembly Link Resource",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalManifestDependencies",
+    "switch": "MANIFESTDEPENDENCY:",
+    "comment": "Additional Manifest Dependencies",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ManifestInput",
+    "switch": "manifestinput:",
+    "comment": "Manifest Input",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "OutputFile",
+    "switch": "OUT:",
+    "comment": "Output File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "Version",
+    "switch": "VERSION:",
+    "comment": "Version",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "SpecifySectionAttributes",
+    "switch": "SECTION:",
+    "comment": "Specify Section Attributes",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MSDOSStubFileName",
+    "switch": "STUB:",
+    "comment": "MS-DOS Stub File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ModuleDefinitionFile",
+    "switch": "DEF:",
+    "comment": "Module Definition File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ManifestFile",
+    "switch": "ManifestFile:",
+    "comment": "Manifest File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProgramDatabaseFile",
+    "switch": "PDB:",
+    "comment": "Generate Program Database File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "StripPrivateSymbols",
+    "switch": "PDBSTRIPPED:",
+    "comment": "Strip Private Symbols",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MapFileName",
+    "switch": "MAP:",
+    "comment": "Map File Name",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "HeapReserveSize",
+    "switch": "HEAP:",
+    "comment": "Heap Reserve Size",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "HeapCommitSize",
+    "switch": "HEAP",
+    "comment": "Heap Commit Size",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "StackReserveSize",
+    "switch": "STACK:",
+    "comment": "Stack Reserve Size",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "StackCommitSize",
+    "switch": "STACK",
+    "comment": "Stack Commit Size",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "FunctionOrder",
+    "switch": "ORDER:@",
+    "comment": "Function Order",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProfileGuidedDatabase",
+    "switch": "PGD:",
+    "comment": "Profile Guided Database",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MidlCommandFile",
+    "switch": "MIDL:@",
+    "comment": "MIDL Commands",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MergedIDLBaseFileName",
+    "switch": "IDLOUT:",
+    "comment": "Merged IDL Base File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "TypeLibraryFile",
+    "switch": "TLBOUT:",
+    "comment": "Type Library",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataFile",
+    "switch": "WINMDFILE:",
+    "comment": "Windows Metadata File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataLinkKeyFile",
+    "switch": "WINMDKEYFILE:",
+    "comment": "Windows Metadata Key File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataKeyContainer",
+    "switch": "WINMDKEYCONTAINER:",
+    "comment": "Windows Metadata Key Container",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "EntryPointSymbol",
+    "switch": "ENTRY:",
+    "comment": "Entry Point",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "BaseAddress",
+    "switch": "BASE:",
+    "comment": "Base Address",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ImportLibrary",
+    "switch": "IMPLIB:",
+    "comment": "Import Library",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "LinkKeyFile",
+    "switch": "KEYFILE:",
+    "comment": "Key File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "KeyContainer",
+    "switch": "KEYCONTAINER:",
+    "comment": "Key Container",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "TypeLibraryResourceID",
+    "switch": "TLBID:",
+    "comment": "TypeLib Resource ID",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "SectionAlignment",
+    "switch": "ALIGN:",
+    "comment": "SectionAlignment",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  }
+]
diff --git a/share/cmake-3.22/Templates/MSBuild/FlagTables/v142_CL.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v142_CL.json
new file mode 100644
index 0000000..4c65ad9
--- /dev/null
+++ b/share/cmake-3.22/Templates/MSBuild/FlagTables/v142_CL.json
@@ -0,0 +1,1462 @@
+[
+  {
+    "name": "DebugInformationFormat",
+    "switch": "",
+    "comment": "None",
+    "value": "None",
+    "flags": []
+  },
+  {
+    "name": "DebugInformationFormat",
+    "switch": "Z7",
+    "comment": "C7 compatible",
+    "value": "OldStyle",
+    "flags": []
+  },
+  {
+    "name": "DebugInformationFormat",
+    "switch": "Zi",
+    "comment": "Program Database",
+    "value": "ProgramDatabase",
+    "flags": []
+  },
+  {
+    "name": "DebugInformationFormat",
+    "switch": "ZI",
+    "comment": "Program Database for Edit And Continue",
+    "value": "EditAndContinue",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "",
+    "comment": "No Common Language RunTime Support",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "clr",
+    "comment": "Common Language RunTime Support",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "clr:pure",
+    "comment": "Pure MSIL Common Language RunTime Support",
+    "value": "Pure",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "clr:safe",
+    "comment": "Safe MSIL Common Language RunTime Support",
+    "value": "Safe",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W0",
+    "comment": "Turn Off All Warnings",
+    "value": "TurnOffAllWarnings",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W1",
+    "comment": "Level1",
+    "value": "Level1",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W2",
+    "comment": "Level2",
+    "value": "Level2",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W3",
+    "comment": "Level3",
+    "value": "Level3",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W4",
+    "comment": "Level4",
+    "value": "Level4",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "Wall",
+    "comment": "EnableAllWarnings",
+    "value": "EnableAllWarnings",
+    "flags": []
+  },
+  {
+    "name": "DiagnosticsFormat",
+    "switch": "diagnostics:caret",
+    "comment": "Caret",
+    "value": "Caret",
+    "flags": []
+  },
+  {
+    "name": "DiagnosticsFormat",
+    "switch": "diagnostics:column",
+    "comment": "Column Info",
+    "value": "Column",
+    "flags": []
+  },
+  {
+    "name": "DiagnosticsFormat",
+    "switch": "diagnostics:classic",
+    "comment": "Classic",
+    "value": "Classic",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "",
+    "comment": "Custom",
+    "value": "Custom",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "Od",
+    "comment": "Disabled",
+    "value": "Disabled",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "O1",
+    "comment": "Maximum Optimization (Favor Size)",
+    "value": "MinSpace",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "O2",
+    "comment": "Maximum Optimization (Favor Speed)",
+    "value": "MaxSpeed",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "Ox",
+    "comment": "Optimizations (Favor Speed)",
+    "value": "Full",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "Ob0",
+    "comment": "Disabled",
+    "value": "Disabled",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "Ob1",
+    "comment": "Only __inline",
+    "value": "OnlyExplicitInline",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "Ob2",
+    "comment": "Any Suitable",
+    "value": "AnySuitable",
+    "flags": []
+  },
+  {
+    "name": "FavorSizeOrSpeed",
+    "switch": "Os",
+    "comment": "Favor small code",
+    "value": "Size",
+    "flags": []
+  },
+  {
+    "name": "FavorSizeOrSpeed",
+    "switch": "Ot",
+    "comment": "Favor fast code",
+    "value": "Speed",
+    "flags": []
+  },
+  {
+    "name": "FavorSizeOrSpeed",
+    "switch": "",
+    "comment": "Neither",
+    "value": "Neither",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "EHa",
+    "comment": "Yes with SEH Exceptions",
+    "value": "Async",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "EHsc",
+    "comment": "Yes",
+    "value": "Sync",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "EHs",
+    "comment": "Yes with Extern C functions",
+    "value": "SyncCThrow",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "",
+    "comment": "No",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "RTCs",
+    "comment": "Stack Frames",
+    "value": "StackFrameRuntimeCheck",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "RTCu",
+    "comment": "Uninitialized variables",
+    "value": "UninitializedLocalUsageCheck",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "RTC1",
+    "comment": "Both (/RTC1, equiv. to /RTCsu)",
+    "value": "EnableFastChecks",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MT",
+    "comment": "Multi-threaded",
+    "value": "MultiThreaded",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MTd",
+    "comment": "Multi-threaded Debug",
+    "value": "MultiThreadedDebug",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MD",
+    "comment": "Multi-threaded DLL",
+    "value": "MultiThreadedDLL",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MDd",
+    "comment": "Multi-threaded Debug DLL",
+    "value": "MultiThreadedDebugDLL",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp1",
+    "comment": "1 Byte",
+    "value": "1Byte",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp2",
+    "comment": "2 Bytes",
+    "value": "2Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp4",
+    "comment": "4 Byte",
+    "value": "4Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp8",
+    "comment": "8 Bytes",
+    "value": "8Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp16",
+    "comment": "16 Bytes",
+    "value": "16Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "BufferSecurityCheck",
+    "switch": "GS-",
+    "comment": "Disable Security Check",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "BufferSecurityCheck",
+    "switch": "GS",
+    "comment": "Enable Security Check",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ControlFlowGuard",
+    "switch": "guard:cf",
+    "comment": "Yes",
+    "value": "Guard",
+    "flags": []
+  },
+  {
+    "name": "ControlFlowGuard",
+    "switch": "",
+    "comment": "No",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:SSE",
+    "comment": "Streaming SIMD Extensions",
+    "value": "StreamingSIMDExtensions",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:SSE2",
+    "comment": "Streaming SIMD Extensions 2",
+    "value": "StreamingSIMDExtensions2",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:AVX",
+    "comment": "Advanced Vector Extensions",
+    "value": "AdvancedVectorExtensions",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:AVX2",
+    "comment": "Advanced Vector Extensions 2",
+    "value": "AdvancedVectorExtensions2",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:AVX512",
+    "comment": "Advanced Vector Extensions 512",
+    "value": "AdvancedVectorExtensions512",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:IA32",
+    "comment": "No Enhanced Instructions",
+    "value": "NoExtensions",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointModel",
+    "switch": "fp:precise",
+    "comment": "Precise",
+    "value": "Precise",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointModel",
+    "switch": "fp:strict",
+    "comment": "Strict",
+    "value": "Strict",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointModel",
+    "switch": "fp:fast",
+    "comment": "Fast",
+    "value": "Fast",
+    "flags": []
+  },
+  {
+    "name": "SpectreMitigation",
+    "switch": "Qspectre-load-cf",
+    "comment": "All Control Flow Loads",
+    "value": "SpectreLoadCF",
+    "flags": []
+  },
+  {
+    "name": "SpectreMitigation",
+    "switch": "Qspectre-load",
+    "comment": "All Loads",
+    "value": "SpectreLoad",
+    "flags": []
+  },
+  {
+    "name": "SpectreMitigation",
+    "switch": "Qspectre-",
+    "comment": "Disabled",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "SpectreMitigation",
+    "switch": "Qspectre",
+    "comment": "Enabled",
+    "value": "Spectre",
+    "flags": []
+  },
+  {
+    "name": "ConformanceMode",
+    "switch": "permissive-",
+    "comment": "Yes",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ConformanceMode",
+    "switch": "permissive",
+    "comment": "No",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LanguageStandard",
+    "switch": "std:c++14",
+    "comment": "ISO C++14 Standard",
+    "value": "stdcpp14",
+    "flags": []
+  },
+  {
+    "name": "LanguageStandard",
+    "switch": "std:c++17",
+    "comment": "ISO C++17 Standard",
+    "value": "stdcpp17",
+    "flags": []
+  },
+  {
+    "name": "LanguageStandard",
+    "switch": "std:c++20",
+    "comment": "ISO C++20 Standard",
+    "value": "stdcpp20",
+    "flags": []
+  },
+  {
+    "name": "LanguageStandard",
+    "switch": "std:c++latest",
+    "comment": "Preview - Features from the Latest C++ Working Draft",
+    "value": "stdcpplatest",
+    "flags": []
+  },
+  {
+    "name": "LanguageStandard_C",
+    "switch": "std:c11",
+    "comment": "ISO C11 Standard",
+    "value": "stdc11",
+    "flags": []
+  },
+  {
+    "name": "LanguageStandard_C",
+    "switch": "std:c17",
+    "comment": "ISO C17 (2018) Standard",
+    "value": "stdc17",
+    "flags": []
+  },
+  {
+    "name": "PrecompiledHeader",
+    "switch": "Yc",
+    "comment": "Create",
+    "value": "Create",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "PrecompiledHeader",
+    "switch": "Yu",
+    "comment": "Use",
+    "value": "Use",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "PrecompiledHeader",
+    "switch": "Y-",
+    "comment": "Not Using Precompiled Headers",
+    "value": "NotUsing",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "",
+    "comment": "No Listing",
+    "value": "NoListing",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FA",
+    "comment": "Assembly-Only Listing",
+    "value": "AssemblyCode",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FAc",
+    "comment": "Assembly With Machine Code",
+    "value": "AssemblyAndMachineCode",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FAs",
+    "comment": "Assembly With Source Code",
+    "value": "AssemblyAndSourceCode",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FAcs",
+    "comment": "Assembly, Machine Code and Source",
+    "value": "All",
+    "flags": []
+  },
+  {
+    "name": "ExternalWarningLevel",
+    "switch": "external:W0",
+    "comment": "Turn Off All Warnings",
+    "value": "TurnOffAllWarnings",
+    "vsmin": "16.10.31321.278",
+    "flags": []
+  },
+  {
+    "name": "ExternalWarningLevel",
+    "switch": "external:W1",
+    "comment": "Level1",
+    "value": "Level1",
+    "vsmin": "16.10.31321.278",
+    "flags": []
+  },
+  {
+    "name": "ExternalWarningLevel",
+    "switch": "external:W2",
+    "comment": "Level2",
+    "value": "Level2",
+    "vsmin": "16.10.31321.278",
+    "flags": []
+  },
+  {
+    "name": "ExternalWarningLevel",
+    "switch": "external:W3",
+    "comment": "Level3",
+    "value": "Level3",
+    "vsmin": "16.10.31321.278",
+    "flags": []
+  },
+  {
+    "name": "ExternalWarningLevel",
+    "switch": "external:W4",
+    "comment": "Level4",
+    "value": "Level4",
+    "vsmin": "16.10.31321.278",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gd",
+    "comment": "__cdecl",
+    "value": "Cdecl",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gr",
+    "comment": "__fastcall",
+    "value": "FastCall",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gz",
+    "comment": "__stdcall",
+    "value": "StdCall",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gv",
+    "comment": "__vectorcall",
+    "value": "VectorCall",
+    "flags": []
+  },
+  {
+    "name": "CompileAs",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "CompileAs",
+    "switch": "TC",
+    "comment": "Compile as C Code",
+    "value": "CompileAsC",
+    "flags": []
+  },
+  {
+    "name": "CompileAs",
+    "switch": "TP",
+    "comment": "Compile as C++ Code",
+    "value": "CompileAsCpp",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:none",
+    "comment": "Do Not Send Report",
+    "value": "None",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:prompt",
+    "comment": "Prompt Immediately",
+    "value": "Prompt",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:queue",
+    "comment": "Queue For Next Login",
+    "value": "Queue",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:send",
+    "comment": "Send Automatically",
+    "value": "Send",
+    "flags": []
+  },
+  {
+    "name": "SupportJustMyCode",
+    "switch": "JMC-",
+    "comment": "Support Just My Code Debugging",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "SupportJustMyCode",
+    "switch": "JMC",
+    "comment": "Support Just My Code Debugging",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CompileAsWinRT",
+    "switch": "ZW",
+    "comment": "Consume Windows Runtime Extension",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "WinRTNoStdLib",
+    "switch": "ZW:nostdlib",
+    "comment": "No Standard WinRT Libraries",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "nologo",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatWarningAsError",
+    "switch": "WX-",
+    "comment": "Treat Warnings As Errors",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatWarningAsError",
+    "switch": "WX",
+    "comment": "Treat Warnings As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SDLCheck",
+    "switch": "sdl-",
+    "comment": "SDL checks",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "SDLCheck",
+    "switch": "sdl",
+    "comment": "SDL checks",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "MultiProcessorCompilation",
+    "switch": "MP",
+    "comment": "Multi-processor Compilation",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "IntrinsicFunctions",
+    "switch": "Oi",
+    "comment": "Enable Intrinsic Functions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OmitFramePointers",
+    "switch": "Oy-",
+    "comment": "Omit Frame Pointers",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "OmitFramePointers",
+    "switch": "Oy",
+    "comment": "Omit Frame Pointers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableFiberSafeOptimizations",
+    "switch": "GT",
+    "comment": "Enable Fiber-Safe Optimizations",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "WholeProgramOptimization",
+    "switch": "GL",
+    "comment": "Whole Program Optimization",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UndefineAllPreprocessorDefinitions",
+    "switch": "u",
+    "comment": "Undefine All Preprocessor Definitions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreStandardIncludePath",
+    "switch": "X",
+    "comment": "Ignore Standard Include Paths",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessToFile",
+    "switch": "P",
+    "comment": "Preprocess to a File",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessSuppressLineNumbers",
+    "switch": "EP",
+    "comment": "Preprocess Suppress Line Numbers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessKeepComments",
+    "switch": "C",
+    "comment": "Keep Comments",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UseStandardPreprocessor",
+    "switch": "Zc:preprocessor-",
+    "comment": "Use Standard Conforming Preprocessor",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "UseStandardPreprocessor",
+    "switch": "Zc:preprocessor",
+    "comment": "Use Standard Conforming Preprocessor",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "StringPooling",
+    "switch": "GF-",
+    "comment": "Enable String Pooling",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "StringPooling",
+    "switch": "GF",
+    "comment": "Enable String Pooling",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "MinimalRebuild",
+    "switch": "Gm-",
+    "comment": "Enable Minimal Rebuild",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "MinimalRebuild",
+    "switch": "Gm",
+    "comment": "Enable Minimal Rebuild",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SmallerTypeCheck",
+    "switch": "RTCc",
+    "comment": "Smaller Type Check",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "FunctionLevelLinking",
+    "switch": "Gy-",
+    "comment": "Enable Function-Level Linking",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "FunctionLevelLinking",
+    "switch": "Gy",
+    "comment": "Enable Function-Level Linking",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableParallelCodeGeneration",
+    "switch": "Qpar-",
+    "comment": "Enable Parallel Code Generation",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnableParallelCodeGeneration",
+    "switch": "Qpar",
+    "comment": "Enable Parallel Code Generation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointExceptions",
+    "switch": "fp:except-",
+    "comment": "Enable Floating Point Exceptions",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointExceptions",
+    "switch": "fp:except",
+    "comment": "Enable Floating Point Exceptions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CreateHotpatchableImage",
+    "switch": "hotpatch",
+    "comment": "Create Hotpatchable Image",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IntelJCCErratum",
+    "switch": "QIntel-jcc-erratum",
+    "comment": "Enable Intel JCC Erratum Mitigation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GuardEHContMetadata",
+    "switch": "guard:ehcont-",
+    "comment": "Enable EH Continuation Metadata",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "GuardEHContMetadata",
+    "switch": "guard:ehcont",
+    "comment": "Enable EH Continuation Metadata",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GuardSignedReturns",
+    "switch": "guard:signret-",
+    "comment": "Enable Signed Returns",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "GuardSignedReturns",
+    "switch": "guard:signret",
+    "comment": "Enable Signed Returns",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DisableLanguageExtensions",
+    "switch": "Za",
+    "comment": "Disable Language Extensions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatWChar_tAsBuiltInType",
+    "switch": "Zc:wchar_t-",
+    "comment": "Treat WChar_t As Built in Type",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatWChar_tAsBuiltInType",
+    "switch": "Zc:wchar_t",
+    "comment": "Treat WChar_t As Built in Type",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ForceConformanceInForLoopScope",
+    "switch": "Zc:forScope-",
+    "comment": "Force Conformance in For Loop Scope",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "ForceConformanceInForLoopScope",
+    "switch": "Zc:forScope",
+    "comment": "Force Conformance in For Loop Scope",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "RemoveUnreferencedCodeData",
+    "switch": "Zc:inline-",
+    "comment": "Remove unreferenced code and data",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "RemoveUnreferencedCodeData",
+    "switch": "Zc:inline",
+    "comment": "Remove unreferenced code and data",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnforceTypeConversionRules",
+    "switch": "Zc:rvalueCast-",
+    "comment": "Enforce type conversion rules",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnforceTypeConversionRules",
+    "switch": "Zc:rvalueCast",
+    "comment": "Enforce type conversion rules",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "RuntimeTypeInfo",
+    "switch": "GR-",
+    "comment": "Enable Run-Time Type Information",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "RuntimeTypeInfo",
+    "switch": "GR",
+    "comment": "Enable Run-Time Type Information",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OpenMPSupport",
+    "switch": "openmp-",
+    "comment": "Open MP Support",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "OpenMPSupport",
+    "switch": "openmp",
+    "comment": "Open MP Support",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableModules",
+    "switch": "experimental:module",
+    "comment": "Enable Experimental C++ Standard Library Modules",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ExpandAttributedSource",
+    "switch": "Fx",
+    "comment": "Expand Attributed Source",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UseUnicodeForAssemblerListing",
+    "switch": "FAu",
+    "comment": "Use Unicode For Assembler Listing",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateModuleDependencies",
+    "switch": "sourceDependencies:directives",
+    "comment": "Generate Module Dependenices File",
+    "value": "true",
+    "flags": [
+      "Continue"
+    ]
+  },
+  {
+    "name": "GenerateXMLDocumentationFiles",
+    "switch": "doc",
+    "comment": "Generate XML Documentation Files",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "GenerateSourceDependencies",
+    "switch": "sourceDependencies",
+    "comment": "Generate Source Dependencies File",
+    "value": "true",
+    "flags": [
+      "Continue"
+    ]
+  },
+  {
+    "name": "BrowseInformation",
+    "switch": "FR",
+    "comment": "Enable Browse Information",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "TreatAngleIncludeAsExternal",
+    "switch": "external:anglebrackets",
+    "comment": "Treat Files Included with Angle Brackets as External",
+    "value": "true",
+    "vsmin": "16.10.31321.278",
+    "flags": []
+  },
+  {
+    "name": "ExternalTemplatesDiagnostics",
+    "switch": "external:templates-",
+    "comment": "Template Diagnostics in External Headers",
+    "value": "true",
+    "vsmin": "16.10.31321.278",
+    "flags": []
+  },
+  {
+    "name": "DisableAnalyzeExternal",
+    "switch": "analyze:external-",
+    "comment": "Disable Code Analysis for External Headers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ShowIncludes",
+    "switch": "showIncludes",
+    "comment": "Show Includes",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnablePREfast",
+    "switch": "analyze-",
+    "comment": "Enable Code Analysis",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnablePREfast",
+    "switch": "analyze",
+    "comment": "Enable Code Analysis",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UseFullPaths",
+    "switch": "FC",
+    "comment": "Use Full Paths",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OmitDefaultLibName",
+    "switch": "Zl",
+    "comment": "Omit Default Library Name",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AdditionalIncludeDirectories",
+    "switch": "I",
+    "comment": "Additional Include Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalUsingDirectories",
+    "switch": "AI",
+    "comment": "Additional #using Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalBMIDirectories",
+    "switch": "ifcSearchDir",
+    "comment": "Additional BMI Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalModuleDependencies",
+    "switch": "reference",
+    "comment": "Additional Module Dependencies",
+    "value": "",
+    "flags": [
+      "UserFollowing",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalHeaderUnitDependencies",
+    "switch": "headerUnit",
+    "comment": "Additional Header Unit Dependencies",
+    "value": "",
+    "flags": [
+      "UserFollowing",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "PreprocessorDefinitions",
+    "switch": "D",
+    "comment": "Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "UndefinePreprocessorDefinitions",
+    "switch": "U",
+    "comment": "Undefine Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "StdIfcDirectory",
+    "switch": "stdIfcDir",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ExternalDirectoriesEnv",
+    "switch": "external:env:",
+    "comment": "External Directories Environment Variables",
+    "value": "",
+    "vsmin": "16.10.31321.278",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "DisableSpecificWarnings",
+    "switch": "wd",
+    "comment": "Disable Specific Warnings",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ForcedIncludeFiles",
+    "switch": "FI",
+    "comment": "Forced Include File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ForcedUsingFiles",
+    "switch": "FU",
+    "comment": "Forced #using File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "PREfastLog",
+    "switch": "analyze:log",
+    "comment": "Code Analysis Log",
+    "value": "",
+    "flags": [
+      "UserFollowing"
+    ]
+  },
+  {
+    "name": "PREfastAdditionalPlugins",
+    "switch": "analyze:plugin",
+    "comment": "Additional Code Analysis Native plugins",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "TreatSpecificWarningsAsErrors",
+    "switch": "we",
+    "comment": "Treat Specific Warnings As Errors",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "WarningVersion",
+    "switch": "Wv:",
+    "comment": "Warning Version",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "PreprocessOutputPath",
+    "switch": "Fi",
+    "comment": "Preprocess Output Path",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "PrecompiledHeaderFile",
+    "switch": "Yu",
+    "comment": "Precompiled Header File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "PrecompiledHeaderFile",
+    "switch": "Yc",
+    "comment": "Precompiled Header File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "PrecompiledHeaderOutputFile",
+    "switch": "Fp",
+    "comment": "Precompiled Header Output File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "AssemblerListingLocation",
+    "switch": "Fa",
+    "comment": "ASM List Location",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ModuleOutputFile",
+    "switch": "ifcOutput",
+    "comment": "Module Output File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ModuleDependenciesFile",
+    "switch": "sourceDependencies:directives",
+    "comment": "Module Dependencies File Name",
+    "value": "",
+    "flags": [
+      "UserFollowing"
+    ]
+  },
+  {
+    "name": "ObjectFileName",
+    "switch": "Fo",
+    "comment": "Object File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProgramDataBaseFileName",
+    "switch": "Fd",
+    "comment": "Program Database File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "XMLDocumentationFileName",
+    "switch": "doc",
+    "comment": "XML Documentation File Name",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "SourceDependenciesFile",
+    "switch": "sourceDependencies",
+    "comment": "Source Dependencies File Name",
+    "value": "",
+    "flags": [
+      "UserFollowing"
+    ]
+  },
+  {
+    "name": "BrowseInformationFile",
+    "switch": "FR",
+    "comment": "Browse Information File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "ProcessorNumber",
+    "switch": "MP",
+    "comment": "Number of processors",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  }
+]
diff --git a/share/cmake-3.22/Templates/MSBuild/FlagTables/v142_CSharp.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v142_CSharp.json
new file mode 100644
index 0000000..ae1bd47
--- /dev/null
+++ b/share/cmake-3.22/Templates/MSBuild/FlagTables/v142_CSharp.json
@@ -0,0 +1,553 @@
+[
+  {
+    "name":  "ProjectName",
+    "switch": "out:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:exe",
+    "comment": "",
+    "value": "Exe",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:winexe",
+    "comment": "",
+    "value": "Winexe",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:library",
+    "comment": "",
+    "value": "Library",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:module",
+    "comment": "",
+    "value": "Module",
+    "flags": []
+  },
+  {
+    "name":  "DocumentationFile",
+    "switch": "doc",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:x86",
+    "comment": "",
+    "value": "x86",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:Itanium",
+    "comment": "",
+    "value": "Itanium",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:x64",
+    "comment": "",
+    "value": "x64",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:arm",
+    "comment": "",
+    "value": "arm",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:anycpu32bitpreferred",
+    "comment": "",
+    "value": "anycpu32bitpreferred",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:anycpu",
+    "comment": "",
+    "value": "anycpu",
+    "flags": []
+  },
+  {
+    "name":  "References",
+    "switch": "reference:",
+    "comment": "mit alias",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "References",
+    "switch": "reference:",
+    "comment": "dateiliste",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "AddModules",
+    "switch": "addmodule:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name":  "Win32Resource",
+    "switch": "win32res:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "ApplicationIcon",
+    "switch": "win32icon:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "ApplicationManifest",
+    "switch": "win32manifest:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "NoWin32Manifest",
+    "switch": "nowin32manifest",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DefineDebug",
+    "switch": "debug",
+    "comment": "",
+    "value": "true",
+    "flags": [
+      "Continue"
+    ]
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:none",
+    "comment": "",
+    "value": "none",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:full",
+    "comment": "",
+    "value": "full",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:pdbonly",
+    "comment": "",
+    "value": "pdbonly",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:portable",
+    "comment": "",
+    "value": "portable",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror-",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror+",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired",
+      "CommaAppendable"
+    ]
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:0",
+    "comment": "",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:1",
+    "comment": "",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:2",
+    "comment": "",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:3",
+    "comment": "",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:4",
+    "comment": "",
+    "value": "4",
+    "flags": []
+  },
+  {
+    "name":  "NoWarn",
+    "switch": "nowarn:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired",
+      "CommaAppendable"
+    ]
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DefineConstants",
+    "switch": "define:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "SemicolonAppendable",
+      "UserValue"
+    ]
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AssemblyOriginatorKeyFile",
+    "switch": "keyfile",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "KeyContainerName",
+    "switch": "keycontainer",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoLogo",
+    "switch": "nologo",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoConfig",
+    "switch": "noconfig",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "BaseAddress",
+    "switch": "baseaddress:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "CodePage",
+    "switch": "codepage",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "Utf8Output",
+    "switch": "utf8output",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "MainEntryPoint",
+    "switch": "main:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "GenerateFullPaths",
+    "switch": "fullpaths",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "FileAlignment",
+    "switch": "filealign",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "PdbFile",
+    "switch": "pdb:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "SubsystemVersion",
+    "switch": "subsystemversion",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "AdditionalLibPaths",
+    "switch": "lib:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:none",
+    "comment": "Do Not Send Report",
+    "value": "none",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:prompt",
+    "comment": "Prompt Immediately",
+    "value": "prompt",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:queue",
+    "comment": "Queue For Next Login",
+    "value": "queue",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:send",
+    "comment": "Send Automatically",
+    "value": "send",
+    "flags": []
+  }
+]
diff --git a/share/cmake-3.22/Templates/MSBuild/FlagTables/v142_Link.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v142_Link.json
new file mode 100644
index 0000000..d5fc2e4
--- /dev/null
+++ b/share/cmake-3.22/Templates/MSBuild/FlagTables/v142_Link.json
@@ -0,0 +1,1321 @@
+[
+  {
+    "name": "ShowProgress",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE",
+    "comment": "Display all progress messages",
+    "value": "LinkVerbose",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:Lib",
+    "comment": "For Libraries Searched",
+    "value": "LinkVerboseLib",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:ICF",
+    "comment": "About COMDAT folding during optimized linking",
+    "value": "LinkVerboseICF",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:REF",
+    "comment": "About data removed during optimized linking",
+    "value": "LinkVerboseREF",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:SAFESEH",
+    "comment": "About Modules incompatible with SEH",
+    "value": "LinkVerboseSAFESEH",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:CLR",
+    "comment": "About linker activity related to managed code",
+    "value": "LinkVerboseCLR",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE:MULTIPLE",
+    "comment": "Multiply Defined Symbol Only",
+    "value": "MultiplyDefinedSymbolOnly",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE:UNRESOLVED",
+    "comment": "Undefined Symbol Only",
+    "value": "UndefinedSymbolOnly",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:5",
+    "comment": "X86 Image Only",
+    "value": "X86Image",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:6",
+    "comment": "X64 Image Only",
+    "value": "X64Image",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:16",
+    "comment": "Itanium Image Only",
+    "value": "ItaniumImage",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='asInvoker'",
+    "comment": "asInvoker",
+    "value": "AsInvoker",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='highestAvailable'",
+    "comment": "highestAvailable",
+    "value": "HighestAvailable",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='requireAdministrator'",
+    "comment": "requireAdministrator",
+    "value": "RequireAdministrator",
+    "flags": []
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG",
+    "comment": "Generate Debug Information",
+    "value": "true",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG:FASTLINK",
+    "comment": "Generate Debug Information optimized for faster links",
+    "value": "DebugFastLink",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG:FULL",
+    "comment": "Generate Debug Information optimized for sharing and publishing",
+    "value": "DebugFull",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG:NONE",
+    "comment": "Produces no debugging information",
+    "value": "false",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "SubSystem",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:CONSOLE",
+    "comment": "Console",
+    "value": "Console",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:WINDOWS",
+    "comment": "Windows",
+    "value": "Windows",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:NATIVE",
+    "comment": "Native",
+    "value": "Native",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_APPLICATION",
+    "comment": "EFI Application",
+    "value": "EFI Application",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
+    "comment": "EFI Boot Service Driver",
+    "value": "EFI Boot Service Driver",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_ROM",
+    "comment": "EFI ROM",
+    "value": "EFI ROM",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_RUNTIME_DRIVER",
+    "comment": "EFI Runtime",
+    "value": "EFI Runtime",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:POSIX",
+    "comment": "POSIX",
+    "value": "POSIX",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "Driver",
+    "comment": "Driver",
+    "value": "Driver",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "DRIVER:UPONLY",
+    "comment": "UP Only",
+    "value": "UpOnly",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "DRIVER:WDM",
+    "comment": "WDM",
+    "value": "WDM",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:incremental",
+    "comment": "Use Fast Link Time Code Generation",
+    "value": "UseFastLinkTimeCodeGeneration",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG",
+    "comment": "Use Link Time Code Generation",
+    "value": "UseLinkTimeCodeGeneration",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGInstrument",
+    "comment": "Profile Guided Optimization - Instrument",
+    "value": "PGInstrument",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGOptimize",
+    "comment": "Profile Guided Optimization - Optimization",
+    "value": "PGOptimization",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGUpdate",
+    "comment": "Profile Guided Optimization - Update",
+    "value": "PGUpdate",
+    "flags": []
+  },
+  {
+    "name": "GenerateWindowsMetadata",
+    "switch": "WINMD",
+    "comment": "Yes",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateWindowsMetadata",
+    "switch": "WINMD:NO",
+    "comment": "No",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA1",
+    "comment": "SHA1",
+    "value": "SHA1",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA256",
+    "comment": "SHA256",
+    "value": "SHA256",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA384",
+    "comment": "SHA384",
+    "value": "SHA384",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA512",
+    "comment": "SHA512",
+    "value": "SHA512",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:ARM",
+    "comment": "MachineARM",
+    "value": "MachineARM",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:ARM64",
+    "comment": "MachineARM64",
+    "value": "MachineARM64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:ARM64EC",
+    "comment": "MachineARM64EC",
+    "value": "MachineARM64EC",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:EBC",
+    "comment": "MachineEBC",
+    "value": "MachineEBC",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:IA64",
+    "comment": "MachineIA64",
+    "value": "MachineIA64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS",
+    "comment": "MachineMIPS",
+    "value": "MachineMIPS",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS16",
+    "comment": "MachineMIPS16",
+    "value": "MachineMIPS16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU",
+    "comment": "MachineMIPSFPU",
+    "value": "MachineMIPSFPU",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU16",
+    "comment": "MachineMIPSFPU16",
+    "value": "MachineMIPSFPU16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:SH4",
+    "comment": "MachineSH4",
+    "value": "MachineSH4",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:THUMB",
+    "comment": "MachineTHUMB",
+    "value": "MachineTHUMB",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X64",
+    "comment": "MachineX64",
+    "value": "MachineX64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X86",
+    "comment": "MachineX86",
+    "value": "MachineX86",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:MTA",
+    "comment": "MTA threading attribute",
+    "value": "MTAThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:STA",
+    "comment": "STA threading attribute",
+    "value": "STAThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:NONE",
+    "comment": "Default threading attribute",
+    "value": "DefaultThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:IJW",
+    "comment": "Force IJW image",
+    "value": "ForceIJWImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:PURE",
+    "comment": "Force Pure IL Image",
+    "value": "ForcePureILImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:SAFE",
+    "comment": "Force Safe IL Image",
+    "value": "ForceSafeILImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "",
+    "comment": "Default image type",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA1",
+    "comment": "SHA1",
+    "value": "SHA1",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA256",
+    "comment": "SHA256",
+    "value": "SHA256",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA384",
+    "comment": "SHA384",
+    "value": "SHA384",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA512",
+    "comment": "SHA512",
+    "value": "SHA512",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:PROMPT",
+    "comment": "PromptImmediately",
+    "value": "PromptImmediately",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:QUEUE",
+    "comment": "Queue For Next Login",
+    "value": "QueueForNextLogin",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:SEND",
+    "comment": "Send Error Report",
+    "value": "SendErrorReport",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:NONE",
+    "comment": "No Error Report",
+    "value": "NoErrorReport",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError:NO",
+    "comment": "Disabled",
+    "value": "Disabled",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError:SYSTEMDLL",
+    "comment": "System Dlls Only",
+    "value": "SystemDlls",
+    "flags": []
+  },
+  {
+    "name": "LinkIncremental",
+    "switch": "INCREMENTAL:NO",
+    "comment": "Enable Incremental Linking",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkIncremental",
+    "switch": "INCREMENTAL",
+    "comment": "Enable Incremental Linking",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "NOLOGO",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkStatus",
+    "switch": "LTCG:NOSTATUS",
+    "comment": "Link Status",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkStatus",
+    "switch": "LTCG:STATUS",
+    "comment": "Link Status",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreventDllBinding",
+    "switch": "ALLOWBIND:NO",
+    "comment": "Prevent Dll Binding",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "PreventDllBinding",
+    "switch": "ALLOWBIND",
+    "comment": "Prevent Dll Binding",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatLinkerWarningAsErrors",
+    "switch": "WX:NO",
+    "comment": "Treat Linker Warning As Errors",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatLinkerWarningAsErrors",
+    "switch": "WX",
+    "comment": "Treat Linker Warning As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreAllDefaultLibraries",
+    "switch": "NODEFAULTLIB",
+    "comment": "Ignore All Default Libraries",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateManifest",
+    "switch": "MANIFEST:NO",
+    "comment": "Generate Manifest",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "GenerateManifest",
+    "switch": "MANIFEST",
+    "comment": "Generate Manifest",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AllowIsolation",
+    "switch": "ALLOWISOLATION:NO",
+    "comment": "Allow Isolation",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "AllowIsolation",
+    "switch": "",
+    "comment": "Allow Isolation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableUAC",
+    "switch": "MANIFESTUAC:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired",
+      "SpaceAppendable"
+    ]
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='false'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "false",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='false'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='true'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ManifestEmbed",
+    "switch": "manifest:embed",
+    "comment": "Embed Manifest",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateMapFile",
+    "switch": "MAP",
+    "comment": "Generate Map File",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "MapExports",
+    "switch": "MAPINFO:EXPORTS",
+    "comment": "Map Exports",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AssemblyDebug",
+    "switch": "ASSEMBLYDEBUG:DISABLE",
+    "comment": "Debuggable Assembly",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "AssemblyDebug",
+    "switch": "ASSEMBLYDEBUG",
+    "comment": "Debuggable Assembly",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LargeAddressAware",
+    "switch": "LARGEADDRESSAWARE:NO",
+    "comment": "Enable Large Addresses",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LargeAddressAware",
+    "switch": "LARGEADDRESSAWARE",
+    "comment": "Enable Large Addresses",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TerminalServerAware",
+    "switch": "TSAWARE:NO",
+    "comment": "Terminal Server",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TerminalServerAware",
+    "switch": "TSAWARE",
+    "comment": "Terminal Server",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SwapRunFromCD",
+    "switch": "SWAPRUN:CD",
+    "comment": "Swap Run From CD",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SwapRunFromNET",
+    "switch": "SWAPRUN:NET",
+    "comment": "Swap Run From Network",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OptimizeReferences",
+    "switch": "OPT:NOREF",
+    "comment": "References",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "OptimizeReferences",
+    "switch": "OPT:REF",
+    "comment": "References",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableCOMDATFolding",
+    "switch": "OPT:NOICF",
+    "comment": "Enable COMDAT Folding",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnableCOMDATFolding",
+    "switch": "OPT:ICF",
+    "comment": "Enable COMDAT Folding",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreEmbeddedIDL",
+    "switch": "IGNOREIDL",
+    "comment": "Ignore Embedded IDL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AppContainer",
+    "switch": "APPCONTAINER",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataLinkDelaySign",
+    "switch": "WINMDDELAYSIGN:NO",
+    "comment": "Windows Metadata Delay Sign",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataLinkDelaySign",
+    "switch": "WINMDDELAYSIGN",
+    "comment": "Windows Metadata Delay Sign",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "NoEntryPoint",
+    "switch": "NOENTRY",
+    "comment": "No Entry Point",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SetChecksum",
+    "switch": "RELEASE",
+    "comment": "Set Checksum",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "RandomizedBaseAddress",
+    "switch": "DYNAMICBASE:NO",
+    "comment": "Randomized Base Address",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "RandomizedBaseAddress",
+    "switch": "DYNAMICBASE",
+    "comment": "Randomized Base Address",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "FixedBaseAddress",
+    "switch": "FIXED:NO",
+    "comment": "Fixed Base Address",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "FixedBaseAddress",
+    "switch": "FIXED",
+    "comment": "Fixed Base Address",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DataExecutionPrevention",
+    "switch": "NXCOMPAT:NO",
+    "comment": "Data Execution Prevention (DEP)",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "DataExecutionPrevention",
+    "switch": "NXCOMPAT",
+    "comment": "Data Execution Prevention (DEP)",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TurnOffAssemblyGeneration",
+    "switch": "NOASSEMBLY",
+    "comment": "Turn Off Assembly Generation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SupportUnloadOfDelayLoadedDLL",
+    "switch": "DELAY:UNLOAD",
+    "comment": "Unload delay loaded DLL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SupportNobindOfDelayLoadedDLL",
+    "switch": "DELAY:NOBIND",
+    "comment": "Nobind delay loaded DLL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "Profile",
+    "switch": "PROFILE",
+    "comment": "Profile",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkDelaySign",
+    "switch": "DELAYSIGN:NO",
+    "comment": "Delay Sign",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkDelaySign",
+    "switch": "DELAYSIGN",
+    "comment": "Delay Sign",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CLRUnmanagedCodeCheck",
+    "switch": "CLRUNMANAGEDCODECHECK:NO",
+    "comment": "CLR Unmanaged Code Check",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "CLRUnmanagedCodeCheck",
+    "switch": "CLRUNMANAGEDCODECHECK",
+    "comment": "CLR Unmanaged Code Check",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DetectOneDefinitionRule",
+    "switch": "ODR",
+    "comment": "Detect One Definition Rule violations",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ImageHasSafeExceptionHandlers",
+    "switch": "SAFESEH:NO",
+    "comment": "Image Has Safe Exception Handlers",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "ImageHasSafeExceptionHandlers",
+    "switch": "SAFESEH",
+    "comment": "Image Has Safe Exception Handlers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkDLL",
+    "switch": "DLL",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AdditionalLibraryDirectories",
+    "switch": "LIBPATH:",
+    "comment": "Additional Library Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "Natvis",
+    "switch": "NATVIS:",
+    "comment": "Natvis files",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "IgnoreSpecificDefaultLibraries",
+    "switch": "NODEFAULTLIB:",
+    "comment": "Ignore Specific Default Libraries",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AddModuleNamesToAssembly",
+    "switch": "ASSEMBLYMODULE:",
+    "comment": "Add Module to Assembly",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "EmbedManagedResourceFile",
+    "switch": "ASSEMBLYRESOURCE:",
+    "comment": "Embed Managed Resource File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ForceSymbolReferences",
+    "switch": "INCLUDE:",
+    "comment": "Force Symbol References",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "DelayLoadDLLs",
+    "switch": "DELAYLOAD:",
+    "comment": "Delay Loaded Dlls",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AssemblyLinkResource",
+    "switch": "ASSEMBLYLINKRESOURCE:",
+    "comment": "Assembly Link Resource",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalManifestDependencies",
+    "switch": "MANIFESTDEPENDENCY:",
+    "comment": "Additional Manifest Dependencies",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ManifestInput",
+    "switch": "manifestinput:",
+    "comment": "Manifest Input",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "OutputFile",
+    "switch": "OUT:",
+    "comment": "Output File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "Version",
+    "switch": "VERSION:",
+    "comment": "Version",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "SpecifySectionAttributes",
+    "switch": "SECTION:",
+    "comment": "Specify Section Attributes",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MSDOSStubFileName",
+    "switch": "STUB:",
+    "comment": "MS-DOS Stub File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ModuleDefinitionFile",
+    "switch": "DEF:",
+    "comment": "Module Definition File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ManifestFile",
+    "switch": "ManifestFile:",
+    "comment": "Manifest File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProgramDatabaseFile",
+    "switch": "PDB:",
+    "comment": "Generate Program Database File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "StripPrivateSymbols",
+    "switch": "PDBSTRIPPED:",
+    "comment": "Strip Private Symbols",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MapFileName",
+    "switch": "MAP:",
+    "comment": "Map File Name",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "HeapReserveSize",
+    "switch": "HEAP:",
+    "comment": "Heap Reserve Size",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "HeapCommitSize",
+    "switch": "HEAP",
+    "comment": "Heap Commit Size",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "StackReserveSize",
+    "switch": "STACK:",
+    "comment": "Stack Reserve Size",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "StackCommitSize",
+    "switch": "STACK",
+    "comment": "Stack Commit Size",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "FunctionOrder",
+    "switch": "ORDER:@",
+    "comment": "Function Order",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProfileGuidedDatabase",
+    "switch": "PGD:",
+    "comment": "Profile Guided Database",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MidlCommandFile",
+    "switch": "MIDL:@",
+    "comment": "MIDL Commands",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MergedIDLBaseFileName",
+    "switch": "IDLOUT:",
+    "comment": "Merged IDL Base File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "TypeLibraryFile",
+    "switch": "TLBOUT:",
+    "comment": "Type Library",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataFile",
+    "switch": "WINMDFILE:",
+    "comment": "Windows Metadata File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataLinkKeyFile",
+    "switch": "WINMDKEYFILE:",
+    "comment": "Windows Metadata Key File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataKeyContainer",
+    "switch": "WINMDKEYCONTAINER:",
+    "comment": "Windows Metadata Key Container",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "EntryPointSymbol",
+    "switch": "ENTRY:",
+    "comment": "Entry Point",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "BaseAddress",
+    "switch": "BASE:",
+    "comment": "Base Address",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ImportLibrary",
+    "switch": "IMPLIB:",
+    "comment": "Import Library",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "LinkKeyFile",
+    "switch": "KEYFILE:",
+    "comment": "Key File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "KeyContainer",
+    "switch": "KEYCONTAINER:",
+    "comment": "Key Container",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "TypeLibraryResourceID",
+    "switch": "TLBID:",
+    "comment": "TypeLib Resource ID",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "SectionAlignment",
+    "switch": "ALIGN:",
+    "comment": "SectionAlignment",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  }
+]
diff --git a/share/cmake-3.22/Templates/MSBuild/FlagTables/v143_CL.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v143_CL.json
new file mode 100644
index 0000000..96f74b1
--- /dev/null
+++ b/share/cmake-3.22/Templates/MSBuild/FlagTables/v143_CL.json
@@ -0,0 +1,1488 @@
+[
+  {
+    "name": "DebugInformationFormat",
+    "switch": "",
+    "comment": "None",
+    "value": "None",
+    "flags": []
+  },
+  {
+    "name": "DebugInformationFormat",
+    "switch": "Z7",
+    "comment": "C7 compatible",
+    "value": "OldStyle",
+    "flags": []
+  },
+  {
+    "name": "DebugInformationFormat",
+    "switch": "Zi",
+    "comment": "Program Database",
+    "value": "ProgramDatabase",
+    "flags": []
+  },
+  {
+    "name": "DebugInformationFormat",
+    "switch": "ZI",
+    "comment": "Program Database for Edit And Continue",
+    "value": "EditAndContinue",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "",
+    "comment": "No Common Language RunTime Support",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "clr",
+    "comment": "Common Language RunTime Support",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "clr:pure",
+    "comment": "Pure MSIL Common Language RunTime Support",
+    "value": "Pure",
+    "flags": []
+  },
+  {
+    "name": "CompileAsManaged",
+    "switch": "clr:safe",
+    "comment": "Safe MSIL Common Language RunTime Support",
+    "value": "Safe",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W0",
+    "comment": "Turn Off All Warnings",
+    "value": "TurnOffAllWarnings",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W1",
+    "comment": "Level1",
+    "value": "Level1",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W2",
+    "comment": "Level2",
+    "value": "Level2",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W3",
+    "comment": "Level3",
+    "value": "Level3",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "W4",
+    "comment": "Level4",
+    "value": "Level4",
+    "flags": []
+  },
+  {
+    "name": "WarningLevel",
+    "switch": "Wall",
+    "comment": "EnableAllWarnings",
+    "value": "EnableAllWarnings",
+    "flags": []
+  },
+  {
+    "name": "DiagnosticsFormat",
+    "switch": "diagnostics:caret",
+    "comment": "Caret",
+    "value": "Caret",
+    "flags": []
+  },
+  {
+    "name": "DiagnosticsFormat",
+    "switch": "diagnostics:column",
+    "comment": "Column Info",
+    "value": "Column",
+    "flags": []
+  },
+  {
+    "name": "DiagnosticsFormat",
+    "switch": "diagnostics:classic",
+    "comment": "Classic",
+    "value": "Classic",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "",
+    "comment": "Custom",
+    "value": "Custom",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "Od",
+    "comment": "Disabled",
+    "value": "Disabled",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "O1",
+    "comment": "Maximum Optimization (Favor Size)",
+    "value": "MinSpace",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "O2",
+    "comment": "Maximum Optimization (Favor Speed)",
+    "value": "MaxSpeed",
+    "flags": []
+  },
+  {
+    "name": "Optimization",
+    "switch": "Ox",
+    "comment": "Optimizations (Favor Speed)",
+    "value": "Full",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "Ob0",
+    "comment": "Disabled",
+    "value": "Disabled",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "Ob1",
+    "comment": "Only __inline",
+    "value": "OnlyExplicitInline",
+    "flags": []
+  },
+  {
+    "name": "InlineFunctionExpansion",
+    "switch": "Ob2",
+    "comment": "Any Suitable",
+    "value": "AnySuitable",
+    "flags": []
+  },
+  {
+    "name": "FavorSizeOrSpeed",
+    "switch": "Os",
+    "comment": "Favor small code",
+    "value": "Size",
+    "flags": []
+  },
+  {
+    "name": "FavorSizeOrSpeed",
+    "switch": "Ot",
+    "comment": "Favor fast code",
+    "value": "Speed",
+    "flags": []
+  },
+  {
+    "name": "FavorSizeOrSpeed",
+    "switch": "",
+    "comment": "Neither",
+    "value": "Neither",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "EHa",
+    "comment": "Yes with SEH Exceptions",
+    "value": "Async",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "EHsc",
+    "comment": "Yes",
+    "value": "Sync",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "EHs",
+    "comment": "Yes with Extern C functions",
+    "value": "SyncCThrow",
+    "flags": []
+  },
+  {
+    "name": "ExceptionHandling",
+    "switch": "",
+    "comment": "No",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "RTCs",
+    "comment": "Stack Frames",
+    "value": "StackFrameRuntimeCheck",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "RTCu",
+    "comment": "Uninitialized variables",
+    "value": "UninitializedLocalUsageCheck",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "RTC1",
+    "comment": "Both (/RTC1, equiv. to /RTCsu)",
+    "value": "EnableFastChecks",
+    "flags": []
+  },
+  {
+    "name": "BasicRuntimeChecks",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MT",
+    "comment": "Multi-threaded",
+    "value": "MultiThreaded",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MTd",
+    "comment": "Multi-threaded Debug",
+    "value": "MultiThreadedDebug",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MD",
+    "comment": "Multi-threaded DLL",
+    "value": "MultiThreadedDLL",
+    "flags": []
+  },
+  {
+    "name": "RuntimeLibrary",
+    "switch": "MDd",
+    "comment": "Multi-threaded Debug DLL",
+    "value": "MultiThreadedDebugDLL",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp1",
+    "comment": "1 Byte",
+    "value": "1Byte",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp2",
+    "comment": "2 Bytes",
+    "value": "2Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp4",
+    "comment": "4 Byte",
+    "value": "4Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp8",
+    "comment": "8 Bytes",
+    "value": "8Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "Zp16",
+    "comment": "16 Bytes",
+    "value": "16Bytes",
+    "flags": []
+  },
+  {
+    "name": "StructMemberAlignment",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "BufferSecurityCheck",
+    "switch": "GS-",
+    "comment": "Disable Security Check",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "BufferSecurityCheck",
+    "switch": "GS",
+    "comment": "Enable Security Check",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ControlFlowGuard",
+    "switch": "guard:cf",
+    "comment": "Yes",
+    "value": "Guard",
+    "flags": []
+  },
+  {
+    "name": "ControlFlowGuard",
+    "switch": "",
+    "comment": "No",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:SSE",
+    "comment": "Streaming SIMD Extensions",
+    "value": "StreamingSIMDExtensions",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:SSE2",
+    "comment": "Streaming SIMD Extensions 2",
+    "value": "StreamingSIMDExtensions2",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:AVX",
+    "comment": "Advanced Vector Extensions",
+    "value": "AdvancedVectorExtensions",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:AVX2",
+    "comment": "Advanced Vector Extensions 2",
+    "value": "AdvancedVectorExtensions2",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:AVX512",
+    "comment": "Advanced Vector Extensions 512",
+    "value": "AdvancedVectorExtensions512",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "arch:IA32",
+    "comment": "No Enhanced Instructions",
+    "value": "NoExtensions",
+    "flags": []
+  },
+  {
+    "name": "EnableEnhancedInstructionSet",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointModel",
+    "switch": "fp:precise",
+    "comment": "Precise",
+    "value": "Precise",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointModel",
+    "switch": "fp:strict",
+    "comment": "Strict",
+    "value": "Strict",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointModel",
+    "switch": "fp:fast",
+    "comment": "Fast",
+    "value": "Fast",
+    "flags": []
+  },
+  {
+    "name": "SpectreMitigation",
+    "switch": "Qspectre-load-cf",
+    "comment": "All Control Flow Loads",
+    "value": "SpectreLoadCF",
+    "flags": []
+  },
+  {
+    "name": "SpectreMitigation",
+    "switch": "Qspectre-load",
+    "comment": "All Loads",
+    "value": "SpectreLoad",
+    "flags": []
+  },
+  {
+    "name": "SpectreMitigation",
+    "switch": "Qspectre-",
+    "comment": "Disabled",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "SpectreMitigation",
+    "switch": "Qspectre",
+    "comment": "Enabled",
+    "value": "Spectre",
+    "flags": []
+  },
+  {
+    "name": "ConformanceMode",
+    "switch": "permissive-",
+    "comment": "Yes",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ConformanceMode",
+    "switch": "permissive",
+    "comment": "No",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LanguageStandard",
+    "switch": "std:c++14",
+    "comment": "ISO C++14 Standard",
+    "value": "stdcpp14",
+    "flags": []
+  },
+  {
+    "name": "LanguageStandard",
+    "switch": "std:c++17",
+    "comment": "ISO C++17 Standard",
+    "value": "stdcpp17",
+    "flags": []
+  },
+  {
+    "name": "LanguageStandard",
+    "switch": "std:c++20",
+    "comment": "ISO C++20 Standard",
+    "value": "stdcpp20",
+    "flags": []
+  },
+  {
+    "name": "LanguageStandard",
+    "switch": "std:c++latest",
+    "comment": "Preview - Features from the Latest C++ Working Draft",
+    "value": "stdcpplatest",
+    "flags": []
+  },
+  {
+    "name": "LanguageStandard_C",
+    "switch": "std:c11",
+    "comment": "ISO C11 Standard",
+    "value": "stdc11",
+    "flags": []
+  },
+  {
+    "name": "LanguageStandard_C",
+    "switch": "std:c17",
+    "comment": "ISO C17 (2018) Standard",
+    "value": "stdc17",
+    "flags": []
+  },
+  {
+    "name": "PrecompiledHeader",
+    "switch": "Yc",
+    "comment": "Create",
+    "value": "Create",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "PrecompiledHeader",
+    "switch": "Yu",
+    "comment": "Use",
+    "value": "Use",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "PrecompiledHeader",
+    "switch": "Y-",
+    "comment": "Not Using Precompiled Headers",
+    "value": "NotUsing",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "",
+    "comment": "No Listing",
+    "value": "NoListing",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FA",
+    "comment": "Assembly-Only Listing",
+    "value": "AssemblyCode",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FAc",
+    "comment": "Assembly With Machine Code",
+    "value": "AssemblyAndMachineCode",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FAs",
+    "comment": "Assembly With Source Code",
+    "value": "AssemblyAndSourceCode",
+    "flags": []
+  },
+  {
+    "name": "AssemblerOutput",
+    "switch": "FAcs",
+    "comment": "Assembly, Machine Code and Source",
+    "value": "All",
+    "flags": []
+  },
+  {
+    "name": "ExternalWarningLevel",
+    "switch": "external:W0",
+    "comment": "Turn Off All Warnings",
+    "value": "TurnOffAllWarnings",
+    "flags": []
+  },
+  {
+    "name": "ExternalWarningLevel",
+    "switch": "external:W1",
+    "comment": "Level1",
+    "value": "Level1",
+    "flags": []
+  },
+  {
+    "name": "ExternalWarningLevel",
+    "switch": "external:W2",
+    "comment": "Level2",
+    "value": "Level2",
+    "flags": []
+  },
+  {
+    "name": "ExternalWarningLevel",
+    "switch": "external:W3",
+    "comment": "Level3",
+    "value": "Level3",
+    "flags": []
+  },
+  {
+    "name": "ExternalWarningLevel",
+    "switch": "external:W4",
+    "comment": "Level4",
+    "value": "Level4",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gd",
+    "comment": "__cdecl",
+    "value": "Cdecl",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gr",
+    "comment": "__fastcall",
+    "value": "FastCall",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gz",
+    "comment": "__stdcall",
+    "value": "StdCall",
+    "flags": []
+  },
+  {
+    "name": "CallingConvention",
+    "switch": "Gv",
+    "comment": "__vectorcall",
+    "value": "VectorCall",
+    "flags": []
+  },
+  {
+    "name": "CompileAs",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "CompileAs",
+    "switch": "TC",
+    "comment": "Compile as C Code",
+    "value": "CompileAsC",
+    "flags": []
+  },
+  {
+    "name": "CompileAs",
+    "switch": "TP",
+    "comment": "Compile as C++ Code",
+    "value": "CompileAsCpp",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:none",
+    "comment": "Do Not Send Report",
+    "value": "None",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:prompt",
+    "comment": "Prompt Immediately",
+    "value": "Prompt",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:queue",
+    "comment": "Queue For Next Login",
+    "value": "Queue",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "errorReport:send",
+    "comment": "Send Automatically",
+    "value": "Send",
+    "flags": []
+  },
+  {
+    "name": "TranslateIncludes",
+    "switch": "translateInclude",
+    "comment": "Translate Includes to Imports",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SupportJustMyCode",
+    "switch": "JMC-",
+    "comment": "Support Just My Code Debugging",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "SupportJustMyCode",
+    "switch": "JMC",
+    "comment": "Support Just My Code Debugging",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CompileAsWinRT",
+    "switch": "ZW",
+    "comment": "Consume Windows Runtime Extension",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "WinRTNoStdLib",
+    "switch": "ZW:nostdlib",
+    "comment": "No Standard WinRT Libraries",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "nologo",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatWarningAsError",
+    "switch": "WX-",
+    "comment": "Treat Warnings As Errors",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatWarningAsError",
+    "switch": "WX",
+    "comment": "Treat Warnings As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SDLCheck",
+    "switch": "sdl-",
+    "comment": "SDL checks",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "SDLCheck",
+    "switch": "sdl",
+    "comment": "SDL checks",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "MultiProcessorCompilation",
+    "switch": "MP",
+    "comment": "Multi-processor Compilation",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "IntrinsicFunctions",
+    "switch": "Oi",
+    "comment": "Enable Intrinsic Functions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OmitFramePointers",
+    "switch": "Oy-",
+    "comment": "Omit Frame Pointers",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "OmitFramePointers",
+    "switch": "Oy",
+    "comment": "Omit Frame Pointers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableFiberSafeOptimizations",
+    "switch": "GT",
+    "comment": "Enable Fiber-Safe Optimizations",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "WholeProgramOptimization",
+    "switch": "GL",
+    "comment": "Whole Program Optimization",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UndefineAllPreprocessorDefinitions",
+    "switch": "u",
+    "comment": "Undefine All Preprocessor Definitions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreStandardIncludePath",
+    "switch": "X",
+    "comment": "Ignore Standard Include Paths",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessToFile",
+    "switch": "P",
+    "comment": "Preprocess to a File",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessSuppressLineNumbers",
+    "switch": "EP",
+    "comment": "Preprocess Suppress Line Numbers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreprocessKeepComments",
+    "switch": "C",
+    "comment": "Keep Comments",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UseStandardPreprocessor",
+    "switch": "Zc:preprocessor-",
+    "comment": "Use Standard Conforming Preprocessor",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "UseStandardPreprocessor",
+    "switch": "Zc:preprocessor",
+    "comment": "Use Standard Conforming Preprocessor",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "StringPooling",
+    "switch": "GF-",
+    "comment": "Enable String Pooling",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "StringPooling",
+    "switch": "GF",
+    "comment": "Enable String Pooling",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "MinimalRebuild",
+    "switch": "Gm-",
+    "comment": "Enable Minimal Rebuild",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "MinimalRebuild",
+    "switch": "Gm",
+    "comment": "Enable Minimal Rebuild",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SmallerTypeCheck",
+    "switch": "RTCc",
+    "comment": "Smaller Type Check",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "FunctionLevelLinking",
+    "switch": "Gy-",
+    "comment": "Enable Function-Level Linking",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "FunctionLevelLinking",
+    "switch": "Gy",
+    "comment": "Enable Function-Level Linking",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableParallelCodeGeneration",
+    "switch": "Qpar-",
+    "comment": "Enable Parallel Code Generation",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnableParallelCodeGeneration",
+    "switch": "Qpar",
+    "comment": "Enable Parallel Code Generation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointExceptions",
+    "switch": "fp:except-",
+    "comment": "Enable Floating Point Exceptions",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "FloatingPointExceptions",
+    "switch": "fp:except",
+    "comment": "Enable Floating Point Exceptions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CreateHotpatchableImage",
+    "switch": "hotpatch",
+    "comment": "Create Hotpatchable Image",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IntelJCCErratum",
+    "switch": "QIntel-jcc-erratum",
+    "comment": "Enable Intel JCC Erratum Mitigation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GuardEHContMetadata",
+    "switch": "guard:ehcont-",
+    "comment": "Enable EH Continuation Metadata",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "GuardEHContMetadata",
+    "switch": "guard:ehcont",
+    "comment": "Enable EH Continuation Metadata",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GuardSignedReturns",
+    "switch": "guard:signret-",
+    "comment": "Enable Signed Returns",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "GuardSignedReturns",
+    "switch": "guard:signret",
+    "comment": "Enable Signed Returns",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DisableLanguageExtensions",
+    "switch": "Za",
+    "comment": "Disable Language Extensions",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatWChar_tAsBuiltInType",
+    "switch": "Zc:wchar_t-",
+    "comment": "Treat WChar_t As Built in Type",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatWChar_tAsBuiltInType",
+    "switch": "Zc:wchar_t",
+    "comment": "Treat WChar_t As Built in Type",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ForceConformanceInForLoopScope",
+    "switch": "Zc:forScope-",
+    "comment": "Force Conformance in For Loop Scope",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "ForceConformanceInForLoopScope",
+    "switch": "Zc:forScope",
+    "comment": "Force Conformance in For Loop Scope",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "RemoveUnreferencedCodeData",
+    "switch": "Zc:inline-",
+    "comment": "Remove unreferenced code and data",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "RemoveUnreferencedCodeData",
+    "switch": "Zc:inline",
+    "comment": "Remove unreferenced code and data",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnforceTypeConversionRules",
+    "switch": "Zc:rvalueCast-",
+    "comment": "Enforce type conversion rules",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnforceTypeConversionRules",
+    "switch": "Zc:rvalueCast",
+    "comment": "Enforce type conversion rules",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "RuntimeTypeInfo",
+    "switch": "GR-",
+    "comment": "Enable Run-Time Type Information",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "RuntimeTypeInfo",
+    "switch": "GR",
+    "comment": "Enable Run-Time Type Information",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OpenMPSupport",
+    "switch": "openmp-",
+    "comment": "Open MP Support",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "OpenMPSupport",
+    "switch": "openmp",
+    "comment": "Open MP Support",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableModules",
+    "switch": "experimental:module",
+    "comment": "Enable Experimental C++ Standard Library Modules",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ExpandAttributedSource",
+    "switch": "Fx",
+    "comment": "Expand Attributed Source",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UseUnicodeForAssemblerListing",
+    "switch": "FAu",
+    "comment": "Use Unicode For Assembler Listing",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateModuleDependencies",
+    "switch": "sourceDependencies:directives",
+    "comment": "Generate Module Dependenices File",
+    "value": "true",
+    "flags": [
+      "Continue"
+    ]
+  },
+  {
+    "name": "GenerateXMLDocumentationFiles",
+    "switch": "doc",
+    "comment": "Generate XML Documentation Files",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "GenerateSourceDependencies",
+    "switch": "sourceDependencies",
+    "comment": "Generate Source Dependencies File",
+    "value": "true",
+    "flags": [
+      "Continue"
+    ]
+  },
+  {
+    "name": "BrowseInformation",
+    "switch": "FR",
+    "comment": "Enable Browse Information",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "TreatAngleIncludeAsExternal",
+    "switch": "external:anglebrackets",
+    "comment": "Treat Files Included with Angle Brackets as External",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ExternalTemplatesDiagnostics",
+    "switch": "external:templates-",
+    "comment": "Template Diagnostics in External Headers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DisableAnalyzeExternal",
+    "switch": "analyze:external-",
+    "comment": "Disable Code Analysis for External Headers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ShowIncludes",
+    "switch": "showIncludes",
+    "comment": "Show Includes",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnablePREfast",
+    "switch": "analyze-",
+    "comment": "Enable Code Analysis",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnablePREfast",
+    "switch": "analyze",
+    "comment": "Enable Code Analysis",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "UseFullPaths",
+    "switch": "FC",
+    "comment": "Use Full Paths",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OmitDefaultLibName",
+    "switch": "Zl",
+    "comment": "Omit Default Library Name",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AdditionalIncludeDirectories",
+    "switch": "I",
+    "comment": "Additional Include Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalUsingDirectories",
+    "switch": "AI",
+    "comment": "Additional #using Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalBMIDirectories",
+    "switch": "ifcSearchDir",
+    "comment": "Additional BMI Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalModuleDependencies",
+    "switch": "reference",
+    "comment": "Additional Module Dependencies",
+    "value": "",
+    "flags": [
+      "UserFollowing",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalHeaderUnitDependencies",
+    "switch": "headerUnit",
+    "comment": "Additional Header Unit Dependencies",
+    "value": "",
+    "flags": [
+      "UserFollowing",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "PreprocessorDefinitions",
+    "switch": "D",
+    "comment": "Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "UndefinePreprocessorDefinitions",
+    "switch": "U",
+    "comment": "Undefine Preprocessor Definitions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "StdIfcDirectory",
+    "switch": "stdIfcDir",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ExternalDirectoriesEnv",
+    "switch": "external:env:",
+    "comment": "External Directories Environment Variables",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "DisableSpecificWarnings",
+    "switch": "wd",
+    "comment": "Disable Specific Warnings",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ForcedIncludeFiles",
+    "switch": "FI",
+    "comment": "Forced Include File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ForcedUsingFiles",
+    "switch": "FU",
+    "comment": "Forced #using File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "PREfastLog",
+    "switch": "analyze:log",
+    "comment": "Code Analysis Log",
+    "value": "",
+    "flags": [
+      "UserFollowing"
+    ]
+  },
+  {
+    "name": "PREfastAdditionalPlugins",
+    "switch": "analyze:plugin",
+    "comment": "Additional Code Analysis Native plugins",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "TreatSpecificWarningsAsErrors",
+    "switch": "we",
+    "comment": "Treat Specific Warnings As Errors",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "WarningVersion",
+    "switch": "Wv:",
+    "comment": "Warning Version",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "PreprocessOutputPath",
+    "switch": "Fi",
+    "comment": "Preprocess Output Path",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "PrecompiledHeaderFile",
+    "switch": "Yu",
+    "comment": "Precompiled Header File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "PrecompiledHeaderFile",
+    "switch": "Yc",
+    "comment": "Precompiled Header File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "PrecompiledHeaderOutputFile",
+    "switch": "Fp",
+    "comment": "Precompiled Header Output File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "AssemblerListingLocation",
+    "switch": "Fa",
+    "comment": "ASM List Location",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ModuleOutputFile",
+    "switch": "ifcOutput",
+    "comment": "Module Output File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ModuleDependenciesFile",
+    "switch": "sourceDependencies:directives",
+    "comment": "Module Dependencies File Name",
+    "value": "",
+    "flags": [
+      "UserFollowing"
+    ]
+  },
+  {
+    "name": "ObjectFileName",
+    "switch": "Fo",
+    "comment": "Object File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProgramDataBaseFileName",
+    "switch": "Fd",
+    "comment": "Program Database File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "XMLDocumentationFileName",
+    "switch": "doc",
+    "comment": "XML Documentation File Name",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "SourceDependenciesFile",
+    "switch": "sourceDependencies",
+    "comment": "Source Dependencies File Name",
+    "value": "",
+    "flags": [
+      "UserFollowing"
+    ]
+  },
+  {
+    "name": "BrowseInformationFile",
+    "switch": "FR",
+    "comment": "Browse Information File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "PREfastProjectDirectory",
+    "switch": "analyze:projectdirectory",
+    "comment": "Code Analysis Project Directory",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "PREfastRulesetDirectories",
+    "switch": "analyze:rulesetdirectory",
+    "comment": "Code Analysis Ruleset Directories",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "PREfastRulesetFile",
+    "switch": "analyze:ruleset",
+    "comment": "Code Analysis Ruleset File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProcessorNumber",
+    "switch": "MP",
+    "comment": "Number of processors",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  }
+]
diff --git a/share/cmake-3.22/Templates/MSBuild/FlagTables/v143_CSharp.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v143_CSharp.json
new file mode 100644
index 0000000..ae1bd47
--- /dev/null
+++ b/share/cmake-3.22/Templates/MSBuild/FlagTables/v143_CSharp.json
@@ -0,0 +1,553 @@
+[
+  {
+    "name":  "ProjectName",
+    "switch": "out:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:exe",
+    "comment": "",
+    "value": "Exe",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:winexe",
+    "comment": "",
+    "value": "Winexe",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:library",
+    "comment": "",
+    "value": "Library",
+    "flags": []
+  },
+  {
+    "name":  "OutputType",
+    "switch": "target:module",
+    "comment": "",
+    "value": "Module",
+    "flags": []
+  },
+  {
+    "name":  "DocumentationFile",
+    "switch": "doc",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:x86",
+    "comment": "",
+    "value": "x86",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:Itanium",
+    "comment": "",
+    "value": "Itanium",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:x64",
+    "comment": "",
+    "value": "x64",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:arm",
+    "comment": "",
+    "value": "arm",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:anycpu32bitpreferred",
+    "comment": "",
+    "value": "anycpu32bitpreferred",
+    "flags": []
+  },
+  {
+    "name":  "Platform",
+    "switch": "platform:anycpu",
+    "comment": "",
+    "value": "anycpu",
+    "flags": []
+  },
+  {
+    "name":  "References",
+    "switch": "reference:",
+    "comment": "mit alias",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "References",
+    "switch": "reference:",
+    "comment": "dateiliste",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "AddModules",
+    "switch": "addmodule:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name":  "Win32Resource",
+    "switch": "win32res:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "ApplicationIcon",
+    "switch": "win32icon:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "ApplicationManifest",
+    "switch": "win32manifest:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "NoWin32Manifest",
+    "switch": "nowin32manifest",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DefineDebug",
+    "switch": "debug",
+    "comment": "",
+    "value": "true",
+    "flags": [
+      "Continue"
+    ]
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "DebugSymbols",
+    "switch": "debug+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:none",
+    "comment": "",
+    "value": "none",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:full",
+    "comment": "",
+    "value": "full",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:pdbonly",
+    "comment": "",
+    "value": "pdbonly",
+    "flags": []
+  },
+  {
+    "name":  "DebugType",
+    "switch": "debug:portable",
+    "comment": "",
+    "value": "portable",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "Optimize",
+    "switch": "optimize+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "TreatWarningsAsErrors",
+    "switch": "warnaserror+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror-",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror+",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "WarningsAsErrors",
+    "switch": "warnaserror:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired",
+      "CommaAppendable"
+    ]
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:0",
+    "comment": "",
+    "value": "0",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:1",
+    "comment": "",
+    "value": "1",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:2",
+    "comment": "",
+    "value": "2",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:3",
+    "comment": "",
+    "value": "3",
+    "flags": []
+  },
+  {
+    "name":  "WarningLevel",
+    "switch": "warn:4",
+    "comment": "",
+    "value": "4",
+    "flags": []
+  },
+  {
+    "name":  "NoWarn",
+    "switch": "nowarn:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired",
+      "CommaAppendable"
+    ]
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "CheckForOverflowUnderflow",
+    "switch": "checked+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "AllowUnsafeBlocks",
+    "switch": "unsafe+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DefineConstants",
+    "switch": "define:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "SemicolonAppendable",
+      "UserValue"
+    ]
+  },
+  {
+    "name":  "LangVersion",
+    "switch": "langversion:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "DelaySign",
+    "switch": "delaysign+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "AssemblyOriginatorKeyFile",
+    "switch": "keyfile",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "KeyContainerName",
+    "switch": "keycontainer",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoLogo",
+    "switch": "nologo",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoConfig",
+    "switch": "noconfig",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "BaseAddress",
+    "switch": "baseaddress:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "CodePage",
+    "switch": "codepage",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "Utf8Output",
+    "switch": "utf8output",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "MainEntryPoint",
+    "switch": "main:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "GenerateFullPaths",
+    "switch": "fullpaths",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "FileAlignment",
+    "switch": "filealign",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "PdbFile",
+    "switch": "pdb:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib-",
+    "comment": "",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name":  "NoStandardLib",
+    "switch": "nostdlib+",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name":  "SubsystemVersion",
+    "switch": "subsystemversion",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "AdditionalLibPaths",
+    "switch": "lib:",
+    "comment": "",
+    "value": "",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:none",
+    "comment": "Do Not Send Report",
+    "value": "none",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:prompt",
+    "comment": "Prompt Immediately",
+    "value": "prompt",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:queue",
+    "comment": "Queue For Next Login",
+    "value": "queue",
+    "flags": []
+  },
+  {
+    "name":  "ErrorReport",
+    "switch": "errorreport:send",
+    "comment": "Send Automatically",
+    "value": "send",
+    "flags": []
+  }
+]
diff --git a/share/cmake-3.22/Templates/MSBuild/FlagTables/v143_Link.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v143_Link.json
new file mode 100644
index 0000000..71d58f8
--- /dev/null
+++ b/share/cmake-3.22/Templates/MSBuild/FlagTables/v143_Link.json
@@ -0,0 +1,1407 @@
+[
+  {
+    "name": "ShowProgress",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE",
+    "comment": "Display all progress messages",
+    "value": "LinkVerbose",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:Lib",
+    "comment": "For Libraries Searched",
+    "value": "LinkVerboseLib",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:ICF",
+    "comment": "About COMDAT folding during optimized linking",
+    "value": "LinkVerboseICF",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:REF",
+    "comment": "About data removed during optimized linking",
+    "value": "LinkVerboseREF",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:SAFESEH",
+    "comment": "About Modules incompatible with SEH",
+    "value": "LinkVerboseSAFESEH",
+    "flags": []
+  },
+  {
+    "name": "ShowProgress",
+    "switch": "VERBOSE:CLR",
+    "comment": "About linker activity related to managed code",
+    "value": "LinkVerboseCLR",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE:MULTIPLE",
+    "comment": "Multiply Defined Symbol Only",
+    "value": "MultiplyDefinedSymbolOnly",
+    "flags": []
+  },
+  {
+    "name": "ForceFileOutput",
+    "switch": "FORCE:UNRESOLVED",
+    "comment": "Undefined Symbol Only",
+    "value": "UndefinedSymbolOnly",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:5",
+    "comment": "X86 Image Only",
+    "value": "X86Image",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:6",
+    "comment": "X64 Image Only",
+    "value": "X64Image",
+    "flags": []
+  },
+  {
+    "name": "CreateHotPatchableImage",
+    "switch": "FUNCTIONPADMIN:16",
+    "comment": "Itanium Image Only",
+    "value": "ItaniumImage",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='asInvoker'",
+    "comment": "asInvoker",
+    "value": "AsInvoker",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='highestAvailable'",
+    "comment": "highestAvailable",
+    "value": "HighestAvailable",
+    "flags": []
+  },
+  {
+    "name": "UACExecutionLevel",
+    "switch": "level='requireAdministrator'",
+    "comment": "requireAdministrator",
+    "value": "RequireAdministrator",
+    "flags": []
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG",
+    "comment": "Generate Debug Information",
+    "value": "true",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG:FASTLINK",
+    "comment": "Generate Debug Information optimized for faster links",
+    "value": "DebugFastLink",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG:FULL",
+    "comment": "Generate Debug Information optimized for sharing and publishing",
+    "value": "DebugFull",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "GenerateDebugInformation",
+    "switch": "DEBUG:NONE",
+    "comment": "Produces no debugging information",
+    "value": "false",
+    "flags": [
+      "CaseInsensitive"
+    ]
+  },
+  {
+    "name": "SubSystem",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:CONSOLE",
+    "comment": "Console",
+    "value": "Console",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:WINDOWS",
+    "comment": "Windows",
+    "value": "Windows",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:NATIVE",
+    "comment": "Native",
+    "value": "Native",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_APPLICATION",
+    "comment": "EFI Application",
+    "value": "EFI Application",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
+    "comment": "EFI Boot Service Driver",
+    "value": "EFI Boot Service Driver",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_ROM",
+    "comment": "EFI ROM",
+    "value": "EFI ROM",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_RUNTIME_DRIVER",
+    "comment": "EFI Runtime",
+    "value": "EFI Runtime",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:POSIX",
+    "comment": "POSIX",
+    "value": "POSIX",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "Driver",
+    "comment": "Driver",
+    "value": "Driver",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "DRIVER:UPONLY",
+    "comment": "UP Only",
+    "value": "UpOnly",
+    "flags": []
+  },
+  {
+    "name": "Driver",
+    "switch": "DRIVER:WDM",
+    "comment": "WDM",
+    "value": "WDM",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "",
+    "comment": "Default",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:incremental",
+    "comment": "Use Fast Link Time Code Generation",
+    "value": "UseFastLinkTimeCodeGeneration",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG",
+    "comment": "Use Link Time Code Generation",
+    "value": "UseLinkTimeCodeGeneration",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGInstrument",
+    "comment": "Profile Guided Optimization - Instrument",
+    "value": "PGInstrument",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGOptimize",
+    "comment": "Profile Guided Optimization - Optimization",
+    "value": "PGOptimization",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG:PGUpdate",
+    "comment": "Profile Guided Optimization - Update",
+    "value": "PGUpdate",
+    "flags": []
+  },
+  {
+    "name": "GenerateWindowsMetadata",
+    "switch": "WINMD",
+    "comment": "Yes",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateWindowsMetadata",
+    "switch": "WINMD:NO",
+    "comment": "No",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA1",
+    "comment": "SHA1",
+    "value": "SHA1",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA256",
+    "comment": "SHA256",
+    "value": "SHA256",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA384",
+    "comment": "SHA384",
+    "value": "SHA384",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataSignHash",
+    "switch": "WINMDSIGNHASH:SHA512",
+    "comment": "SHA512",
+    "value": "SHA512",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "",
+    "comment": "Not Set",
+    "value": "NotSet",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:ARM",
+    "comment": "MachineARM",
+    "value": "MachineARM",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:ARM64",
+    "comment": "MachineARM64",
+    "value": "MachineARM64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:ARM64EC",
+    "comment": "MachineARM64EC",
+    "value": "MachineARM64EC",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:ARM64X",
+    "comment": "MachineARM64X",
+    "value": "MachineARM64X",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:EBC",
+    "comment": "MachineEBC",
+    "value": "MachineEBC",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:IA64",
+    "comment": "MachineIA64",
+    "value": "MachineIA64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS",
+    "comment": "MachineMIPS",
+    "value": "MachineMIPS",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS16",
+    "comment": "MachineMIPS16",
+    "value": "MachineMIPS16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU",
+    "comment": "MachineMIPSFPU",
+    "value": "MachineMIPSFPU",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU16",
+    "comment": "MachineMIPSFPU16",
+    "value": "MachineMIPSFPU16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:SH4",
+    "comment": "MachineSH4",
+    "value": "MachineSH4",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:THUMB",
+    "comment": "MachineTHUMB",
+    "value": "MachineTHUMB",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X64",
+    "comment": "MachineX64",
+    "value": "MachineX64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X86",
+    "comment": "MachineX86",
+    "value": "MachineX86",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:MTA",
+    "comment": "MTA threading attribute",
+    "value": "MTAThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:STA",
+    "comment": "STA threading attribute",
+    "value": "STAThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRThreadAttribute",
+    "switch": "CLRTHREADATTRIBUTE:NONE",
+    "comment": "Default threading attribute",
+    "value": "DefaultThreadingAttribute",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:IJW",
+    "comment": "Force IJW image",
+    "value": "ForceIJWImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:PURE",
+    "comment": "Force Pure IL Image",
+    "value": "ForcePureILImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "CLRIMAGETYPE:SAFE",
+    "comment": "Force Safe IL Image",
+    "value": "ForceSafeILImage",
+    "flags": []
+  },
+  {
+    "name": "CLRImageType",
+    "switch": "",
+    "comment": "Default image type",
+    "value": "Default",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA1",
+    "comment": "SHA1",
+    "value": "SHA1",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA256",
+    "comment": "SHA256",
+    "value": "SHA256",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA384",
+    "comment": "SHA384",
+    "value": "SHA384",
+    "flags": []
+  },
+  {
+    "name": "SignHash",
+    "switch": "CLRSIGNHASH:SHA512",
+    "comment": "SHA512",
+    "value": "SHA512",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:PROMPT",
+    "comment": "PromptImmediately",
+    "value": "PromptImmediately",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:QUEUE",
+    "comment": "Queue For Next Login",
+    "value": "QueueForNextLogin",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:SEND",
+    "comment": "Send Error Report",
+    "value": "SendErrorReport",
+    "flags": []
+  },
+  {
+    "name": "LinkErrorReporting",
+    "switch": "ERRORREPORT:NONE",
+    "comment": "No Error Report",
+    "value": "NoErrorReport",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError",
+    "comment": "Enabled",
+    "value": "Enabled",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError:NO",
+    "comment": "Disabled",
+    "value": "Disabled",
+    "flags": []
+  },
+  {
+    "name": "CLRSupportLastError",
+    "switch": "CLRSupportLastError:SYSTEMDLL",
+    "comment": "System Dlls Only",
+    "value": "SystemDlls",
+    "flags": []
+  },
+  {
+    "name": "LinkIncremental",
+    "switch": "INCREMENTAL:NO",
+    "comment": "Enable Incremental Linking",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkIncremental",
+    "switch": "INCREMENTAL",
+    "comment": "Enable Incremental Linking",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "NOLOGO",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkStatus",
+    "switch": "LTCG:NOSTATUS",
+    "comment": "Link Status",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkStatus",
+    "switch": "LTCG:STATUS",
+    "comment": "Link Status",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "PreventDllBinding",
+    "switch": "ALLOWBIND:NO",
+    "comment": "Prevent Dll Binding",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "PreventDllBinding",
+    "switch": "ALLOWBIND",
+    "comment": "Prevent Dll Binding",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatLinkerWarningAsErrors",
+    "switch": "WX:NO",
+    "comment": "Treat Linker Warning As Errors",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatLinkerWarningAsErrors",
+    "switch": "WX",
+    "comment": "Treat Linker Warning As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreAllDefaultLibraries",
+    "switch": "NODEFAULTLIB",
+    "comment": "Ignore All Default Libraries",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateManifest",
+    "switch": "MANIFEST:NO",
+    "comment": "Generate Manifest",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "GenerateManifest",
+    "switch": "MANIFEST",
+    "comment": "Generate Manifest",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AllowIsolation",
+    "switch": "ALLOWISOLATION:NO",
+    "comment": "Allow Isolation",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "AllowIsolation",
+    "switch": "",
+    "comment": "Allow Isolation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableUAC",
+    "switch": "MANIFESTUAC:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired",
+      "SpaceAppendable"
+    ]
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='false'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "false",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='false'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "UACUIAccess",
+    "switch": "uiAccess='true'",
+    "comment": "UAC Bypass UI Protection",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ManifestEmbed",
+    "switch": "manifest:embed",
+    "comment": "Embed Manifest",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "GenerateMapFile",
+    "switch": "MAP",
+    "comment": "Generate Map File",
+    "value": "true",
+    "flags": [
+      "UserValue",
+      "UserIgnored",
+      "Continue"
+    ]
+  },
+  {
+    "name": "MapExports",
+    "switch": "MAPINFO:EXPORTS",
+    "comment": "Map Exports",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AssemblyDebug",
+    "switch": "ASSEMBLYDEBUG:DISABLE",
+    "comment": "Debuggable Assembly",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "AssemblyDebug",
+    "switch": "ASSEMBLYDEBUG",
+    "comment": "Debuggable Assembly",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LargeAddressAware",
+    "switch": "LARGEADDRESSAWARE:NO",
+    "comment": "Enable Large Addresses",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LargeAddressAware",
+    "switch": "LARGEADDRESSAWARE",
+    "comment": "Enable Large Addresses",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TerminalServerAware",
+    "switch": "TSAWARE:NO",
+    "comment": "Terminal Server",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TerminalServerAware",
+    "switch": "TSAWARE",
+    "comment": "Terminal Server",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SwapRunFromCD",
+    "switch": "SWAPRUN:CD",
+    "comment": "Swap Run From CD",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SwapRunFromNET",
+    "switch": "SWAPRUN:NET",
+    "comment": "Swap Run From Network",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "OptimizeReferences",
+    "switch": "OPT:NOREF",
+    "comment": "References",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "OptimizeReferences",
+    "switch": "OPT:REF",
+    "comment": "References",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "EnableCOMDATFolding",
+    "switch": "OPT:NOICF",
+    "comment": "Enable COMDAT Folding",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "EnableCOMDATFolding",
+    "switch": "OPT:ICF",
+    "comment": "Enable COMDAT Folding",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreEmbeddedIDL",
+    "switch": "IGNOREIDL",
+    "comment": "Ignore Embedded IDL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AppContainer",
+    "switch": "APPCONTAINER",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataLinkDelaySign",
+    "switch": "WINMDDELAYSIGN:NO",
+    "comment": "Windows Metadata Delay Sign",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "WindowsMetadataLinkDelaySign",
+    "switch": "WINMDDELAYSIGN",
+    "comment": "Windows Metadata Delay Sign",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "NoEntryPoint",
+    "switch": "NOENTRY",
+    "comment": "No Entry Point",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SetChecksum",
+    "switch": "RELEASE",
+    "comment": "Set Checksum",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "RandomizedBaseAddress",
+    "switch": "DYNAMICBASE:NO",
+    "comment": "Randomized Base Address",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "RandomizedBaseAddress",
+    "switch": "DYNAMICBASE",
+    "comment": "Randomized Base Address",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "FixedBaseAddress",
+    "switch": "FIXED:NO",
+    "comment": "Fixed Base Address",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "FixedBaseAddress",
+    "switch": "FIXED",
+    "comment": "Fixed Base Address",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DataExecutionPrevention",
+    "switch": "NXCOMPAT:NO",
+    "comment": "Data Execution Prevention (DEP)",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "DataExecutionPrevention",
+    "switch": "NXCOMPAT",
+    "comment": "Data Execution Prevention (DEP)",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TurnOffAssemblyGeneration",
+    "switch": "NOASSEMBLY",
+    "comment": "Turn Off Assembly Generation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SupportUnloadOfDelayLoadedDLL",
+    "switch": "DELAY:UNLOAD",
+    "comment": "Unload delay loaded DLL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "SupportNobindOfDelayLoadedDLL",
+    "switch": "DELAY:NOBIND",
+    "comment": "Nobind delay loaded DLL",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "Profile",
+    "switch": "PROFILE",
+    "comment": "Profile",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkDelaySign",
+    "switch": "DELAYSIGN:NO",
+    "comment": "Delay Sign",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkDelaySign",
+    "switch": "DELAYSIGN",
+    "comment": "Delay Sign",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CLRUnmanagedCodeCheck",
+    "switch": "CLRUNMANAGEDCODECHECK:NO",
+    "comment": "CLR Unmanaged Code Check",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "CLRUnmanagedCodeCheck",
+    "switch": "CLRUNMANAGEDCODECHECK",
+    "comment": "CLR Unmanaged Code Check",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "DetectOneDefinitionRule",
+    "switch": "ODR",
+    "comment": "Detect One Definition Rule violations",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "CETCompat",
+    "switch": "CETCOMPAT:NO",
+    "comment": "CET Shadow Stack Compatible",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "CETCompat",
+    "switch": "CETCOMPAT",
+    "comment": "CET Shadow Stack Compatible",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "ImageHasSafeExceptionHandlers",
+    "switch": "SAFESEH:NO",
+    "comment": "Image Has Safe Exception Handlers",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "ImageHasSafeExceptionHandlers",
+    "switch": "SAFESEH",
+    "comment": "Image Has Safe Exception Handlers",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkControlFlowGuard",
+    "switch": "guard:cf",
+    "comment": "Control Flow Guard",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkGuardEHContMetadata",
+    "switch": "guard:ehcont",
+    "comment": "Enable EH Continuation Metadata",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkGuardSignedReturns",
+    "switch": "guard:nodelayloadsignret",
+    "comment": "Enable Signed Returns",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "LinkGuardSignedReturns",
+    "switch": "guard:delayloadsignret",
+    "comment": "Enable Signed Returns",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkDLL",
+    "switch": "DLL",
+    "comment": "",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AdditionalLibraryDirectories",
+    "switch": "LIBPATH:",
+    "comment": "Additional Library Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "Natvis",
+    "switch": "NATVIS:",
+    "comment": "Natvis files",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "SpecifySectionAttributes",
+    "switch": "SECTION:",
+    "comment": "Specify Section Attributes",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "IgnoreSpecificDefaultLibraries",
+    "switch": "NODEFAULTLIB:",
+    "comment": "Ignore Specific Default Libraries",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AddModuleNamesToAssembly",
+    "switch": "ASSEMBLYMODULE:",
+    "comment": "Add Module to Assembly",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "EmbedManagedResourceFile",
+    "switch": "ASSEMBLYRESOURCE:",
+    "comment": "Embed Managed Resource File",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ForceSymbolReferences",
+    "switch": "INCLUDE:",
+    "comment": "Force Symbol References",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "DelayLoadDLLs",
+    "switch": "DELAYLOAD:",
+    "comment": "Delay Loaded Dlls",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AssemblyLinkResource",
+    "switch": "ASSEMBLYLINKRESOURCE:",
+    "comment": "Assembly Link Resource",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "AdditionalManifestDependencies",
+    "switch": "MANIFESTDEPENDENCY:",
+    "comment": "Additional Manifest Dependencies",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ManifestInput",
+    "switch": "manifestinput:",
+    "comment": "Manifest Input",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "OutputFile",
+    "switch": "OUT:",
+    "comment": "Output File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "Version",
+    "switch": "VERSION:",
+    "comment": "Version",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "IncrementalLinkDatabaseFile",
+    "switch": "ILK:",
+    "comment": "Incremental Link Database File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MSDOSStubFileName",
+    "switch": "STUB:",
+    "comment": "MS-DOS Stub File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ModuleDefinitionFile",
+    "switch": "DEF:",
+    "comment": "Module Definition File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ManifestFile",
+    "switch": "ManifestFile:",
+    "comment": "Manifest File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProgramDatabaseFile",
+    "switch": "PDB:",
+    "comment": "Generate Program Database File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "StripPrivateSymbols",
+    "switch": "PDBSTRIPPED:",
+    "comment": "Strip Private Symbols",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MapFileName",
+    "switch": "MAP:",
+    "comment": "Map File Name",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "HeapReserveSize",
+    "switch": "HEAP:",
+    "comment": "Heap Reserve Size",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "HeapCommitSize",
+    "switch": "HEAP",
+    "comment": "Heap Commit Size",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "StackReserveSize",
+    "switch": "STACK:",
+    "comment": "Stack Reserve Size",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "StackCommitSize",
+    "switch": "STACK",
+    "comment": "Stack Commit Size",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "UserRequired"
+    ]
+  },
+  {
+    "name": "FunctionOrder",
+    "switch": "ORDER:@",
+    "comment": "Function Order",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ProfileGuidedDatabase",
+    "switch": "PGD:",
+    "comment": "Profile Guided Database",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "LinkTimeCodeGenerationObjectFile",
+    "switch": "LTCGOUT:",
+    "comment": "Link Time Code Generation Object File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MidlCommandFile",
+    "switch": "MIDL:@",
+    "comment": "MIDL Commands",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "MergedIDLBaseFileName",
+    "switch": "IDLOUT:",
+    "comment": "Merged IDL Base File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "TypeLibraryFile",
+    "switch": "TLBOUT:",
+    "comment": "Type Library",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataFile",
+    "switch": "WINMDFILE:",
+    "comment": "Windows Metadata File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataLinkKeyFile",
+    "switch": "WINMDKEYFILE:",
+    "comment": "Windows Metadata Key File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "WindowsMetadataKeyContainer",
+    "switch": "WINMDKEYCONTAINER:",
+    "comment": "Windows Metadata Key Container",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "EntryPointSymbol",
+    "switch": "ENTRY:",
+    "comment": "Entry Point",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "BaseAddress",
+    "switch": "BASE:",
+    "comment": "Base Address",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ImportLibrary",
+    "switch": "IMPLIB:",
+    "comment": "Import Library",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "LinkKeyFile",
+    "switch": "KEYFILE:",
+    "comment": "Key File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "KeyContainer",
+    "switch": "KEYCONTAINER:",
+    "comment": "Key Container",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "TypeLibraryResourceID",
+    "switch": "TLBID:",
+    "comment": "TypeLib Resource ID",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "SectionAlignment",
+    "switch": "ALIGN:",
+    "comment": "SectionAlignment",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "PdbThreads",
+    "switch": "pdbthreads:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "CgThreads",
+    "switch": "cgthreads:",
+    "comment": "",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  }
+]
diff --git a/share/cmake-3.22/Templates/MSBuild/FlagTables/v14_LIB.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v14_LIB.json
new file mode 100644
index 0000000..a0e85b2
--- /dev/null
+++ b/share/cmake-3.22/Templates/MSBuild/FlagTables/v14_LIB.json
@@ -0,0 +1,311 @@
+[
+  {
+    "name": "ErrorReporting",
+    "switch": "ERRORREPORT:PROMPT",
+    "comment": "PromptImmediately",
+    "value": "PromptImmediately",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "ERRORREPORT:QUEUE",
+    "comment": "Queue For Next Login",
+    "value": "QueueForNextLogin",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "ERRORREPORT:SEND",
+    "comment": "Send Error Report",
+    "value": "SendErrorReport",
+    "flags": []
+  },
+  {
+    "name": "ErrorReporting",
+    "switch": "ERRORREPORT:NONE",
+    "comment": "No Error Report",
+    "value": "NoErrorReport",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:ARM",
+    "comment": "MachineARM",
+    "value": "MachineARM",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:ARM64",
+    "comment": "MachineARM64",
+    "value": "MachineARM64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:ARM64X",
+    "comment": "MachineARM64X",
+    "value": "MachineARM64X",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:EBC",
+    "comment": "MachineEBC",
+    "value": "MachineEBC",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:IA64",
+    "comment": "MachineIA64",
+    "value": "MachineIA64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS",
+    "comment": "MachineMIPS",
+    "value": "MachineMIPS",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPS16",
+    "comment": "MachineMIPS16",
+    "value": "MachineMIPS16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU",
+    "comment": "MachineMIPSFPU",
+    "value": "MachineMIPSFPU",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:MIPSFPU16",
+    "comment": "MachineMIPSFPU16",
+    "value": "MachineMIPSFPU16",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:SH4",
+    "comment": "MachineSH4",
+    "value": "MachineSH4",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:THUMB",
+    "comment": "MachineTHUMB",
+    "value": "MachineTHUMB",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X64",
+    "comment": "MachineX64",
+    "value": "MachineX64",
+    "flags": []
+  },
+  {
+    "name": "TargetMachine",
+    "switch": "MACHINE:X86",
+    "comment": "MachineX86",
+    "value": "MachineX86",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:CONSOLE",
+    "comment": "Console",
+    "value": "Console",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:WINDOWS",
+    "comment": "Windows",
+    "value": "Windows",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:NATIVE",
+    "comment": "Native",
+    "value": "Native",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_APPLICATION",
+    "comment": "EFI Application",
+    "value": "EFI Application",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER",
+    "comment": "EFI Boot Service Driver",
+    "value": "EFI Boot Service Driver",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_ROM",
+    "comment": "EFI ROM",
+    "value": "EFI ROM",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:EFI_RUNTIME_DRIVER",
+    "comment": "EFI Runtime",
+    "value": "EFI Runtime",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:WINDOWSCE",
+    "comment": "WindowsCE",
+    "value": "WindowsCE",
+    "flags": []
+  },
+  {
+    "name": "SubSystem",
+    "switch": "SUBSYSTEM:POSIX",
+    "comment": "POSIX",
+    "value": "POSIX",
+    "flags": []
+  },
+  {
+    "name": "SuppressStartupBanner",
+    "switch": "NOLOGO",
+    "comment": "Suppress Startup Banner",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "IgnoreAllDefaultLibraries",
+    "switch": "NODEFAULTLIB",
+    "comment": "Ignore All Default Libraries",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "TreatLibWarningAsErrors",
+    "switch": "WX:NO",
+    "comment": "Treat Lib Warning As Errors",
+    "value": "false",
+    "flags": []
+  },
+  {
+    "name": "TreatLibWarningAsErrors",
+    "switch": "WX",
+    "comment": "Treat Lib Warning As Errors",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "Verbose",
+    "switch": "VERBOSE",
+    "comment": "Verbose",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "LinkTimeCodeGeneration",
+    "switch": "LTCG",
+    "comment": "Link Time Code Generation",
+    "value": "true",
+    "flags": []
+  },
+  {
+    "name": "AdditionalLibraryDirectories",
+    "switch": "LIBPATH:",
+    "comment": "Additional Library Directories",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "IgnoreSpecificDefaultLibraries",
+    "switch": "NODEFAULTLIB:",
+    "comment": "Ignore Specific Default Libraries",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "ExportNamedFunctions",
+    "switch": "EXPORT:",
+    "comment": "Export Named Functions",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "RemoveObjects",
+    "switch": "REMOVE:",
+    "comment": "Remove Objects",
+    "value": "",
+    "flags": [
+      "UserValue",
+      "SemicolonAppendable"
+    ]
+  },
+  {
+    "name": "OutputFile",
+    "switch": "OUT:",
+    "comment": "Output File",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ModuleDefinitionFile",
+    "switch": "DEF:",
+    "comment": "Module Definition File Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "ForceSymbolReferences",
+    "switch": "INCLUDE:",
+    "comment": "Force Symbol References",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "DisplayLibrary",
+    "switch": "LIST:",
+    "comment": "Display Library to standard output",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  },
+  {
+    "name": "Name",
+    "switch": "NAME:",
+    "comment": "Name",
+    "value": "",
+    "flags": [
+      "UserValue"
+    ]
+  }
+]
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v14_MASM.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v14_MASM.json
similarity index 100%
rename from share/cmake-3.18/Templates/MSBuild/FlagTables/v14_MASM.json
rename to share/cmake-3.22/Templates/MSBuild/FlagTables/v14_MASM.json
diff --git a/share/cmake-3.18/Templates/MSBuild/FlagTables/v14_RC.json b/share/cmake-3.22/Templates/MSBuild/FlagTables/v14_RC.json
similarity index 100%
rename from share/cmake-3.18/Templates/MSBuild/FlagTables/v14_RC.json
rename to share/cmake-3.22/Templates/MSBuild/FlagTables/v14_RC.json
diff --git a/share/cmake-3.18/Templates/MSBuild/nasm.props.in b/share/cmake-3.22/Templates/MSBuild/nasm.props.in
similarity index 100%
rename from share/cmake-3.18/Templates/MSBuild/nasm.props.in
rename to share/cmake-3.22/Templates/MSBuild/nasm.props.in
diff --git a/share/cmake-3.18/Templates/MSBuild/nasm.targets b/share/cmake-3.22/Templates/MSBuild/nasm.targets
similarity index 100%
rename from share/cmake-3.18/Templates/MSBuild/nasm.targets
rename to share/cmake-3.22/Templates/MSBuild/nasm.targets
diff --git a/share/cmake-3.18/Templates/MSBuild/nasm.xml b/share/cmake-3.22/Templates/MSBuild/nasm.xml
similarity index 100%
rename from share/cmake-3.18/Templates/MSBuild/nasm.xml
rename to share/cmake-3.22/Templates/MSBuild/nasm.xml
diff --git a/share/cmake-3.22/Templates/TestDriver.cxx.in b/share/cmake-3.22/Templates/TestDriver.cxx.in
new file mode 100644
index 0000000..632bb80
--- /dev/null
+++ b/share/cmake-3.22/Templates/TestDriver.cxx.in
@@ -0,0 +1,189 @@
+#include <ctype.h>  /* NOLINT */
+#include <stdio.h>  /* NOLINT */
+#include <stdlib.h> /* NOLINT */
+#include <string.h> /* NOLINT */
+#include <time.h>   /* NOLINT */
+
+#if defined(_MSC_VER)
+#pragma warning(disable : 4996) /* deprecation */
+#endif
+
+@CMAKE_TESTDRIVER_EXTRA_INCLUDES@
+
+/* Forward declare test functions. */
+@CMAKE_FORWARD_DECLARE_TESTS@
+
+#ifdef __cplusplus
+#  define CM_CAST(TYPE, EXPR) static_cast<TYPE>(EXPR)
+#  if __cplusplus >= 201103L
+#    define CM_NULL nullptr
+#  else
+#    define CM_NULL NULL
+#  endif
+#else
+#  define CM_CAST(TYPE, EXPR) (TYPE)(EXPR)
+#  define CM_NULL NULL
+#endif
+
+/* Create map.  */
+
+typedef int (*MainFuncPointer)(int, char* []); /* NOLINT */
+typedef struct /* NOLINT */
+{
+  const char* name;
+  MainFuncPointer func;
+} functionMapEntry;
+
+static functionMapEntry cmakeGeneratedFunctionMapEntries[] = {
+  @CMAKE_FUNCTION_TABLE_ENTRIES@
+  { CM_NULL, CM_NULL } /* NOLINT */
+};
+
+static const int NumTests = CM_CAST(int,
+  sizeof(cmakeGeneratedFunctionMapEntries) / sizeof(functionMapEntry)) - 1;
+
+/* Allocate and create a lowercased copy of string
+   (note that it has to be free'd manually) */
+static char* lowercase(const char* string)
+{
+  char *new_string;
+  char *p;
+  size_t stringSize;
+
+  stringSize = CM_CAST(size_t, strlen(string) + 1);
+  new_string = CM_CAST(char*, malloc(sizeof(char) * stringSize));
+
+  if (new_string == CM_NULL) { /* NOLINT */
+    return CM_NULL;            /* NOLINT */
+  }
+  strcpy(new_string, string);  /* NOLINT */
+  for (p = new_string; *p != 0; ++p) {
+    *p = CM_CAST(char, tolower(*p));
+  }
+  return new_string;
+}
+
+int isTestSkipped(const char *name, int n_skipped_tests, char *skipped_tests[]) {
+  int i;
+  for (i = 0; i < n_skipped_tests; i++) {
+    if (strcmp(name, skipped_tests[i]) == 0) {
+      return 1;
+    }
+  }
+
+  return 0;
+}
+
+int main(int ac, char* av[])
+{
+  int i;
+  int testNum = 0;
+  int partial_match;
+  int run_all;
+  char *arg;
+  int testToRun = -1;
+
+  @CMAKE_TESTDRIVER_ARGVC_FUNCTION@
+
+  /* If no test name was given */
+  /* process command line with user function.  */
+  if (ac < 2) {
+    /* Ask for a test.  */
+    printf("Available tests:\n");
+    for (i = 0; i < NumTests; ++i) {
+      printf("%3d. %s\n", i, cmakeGeneratedFunctionMapEntries[i].name);
+    }
+    printf("To run a test, enter the test number: ");
+    fflush(stdout);
+    if (scanf("%d", &testNum) != 1) {
+      printf("Couldn't parse that input as a number\n");
+      return -1;
+    }
+    if (testNum >= NumTests) {
+      printf("%3d is an invalid test number.\n", testNum);
+      return -1;
+    }
+    testToRun = testNum;
+    ac--;
+    av++;
+  }
+  partial_match = 0;
+  run_all = 0;
+  arg = CM_NULL; /* NOLINT */
+  /* If partial match or running all tests are requested.  */
+  if (testToRun == -1 && ac > 1) {
+    partial_match = (strcmp(av[1], "-R") == 0) ? 1 : 0;
+    run_all = (strcmp(av[1], "-A") == 0) ? 1 : 0;
+  }
+  if (partial_match != 0 && ac < 3) {
+    printf("-R needs an additional parameter.\n");
+    return -1;
+  }
+  if (run_all == 1) {
+    clock_t t;
+    int status = 0;
+    const char* status_message = CM_NULL;
+    printf("TAP version 13\n");
+    printf("1..%d\n", NumTests);
+    for (i = 0; i < NumTests; ++i) {
+      const char *name = cmakeGeneratedFunctionMapEntries[i].name;
+      if (ac > 2) {
+        if (isTestSkipped(name, ac - 2, av + 2) == 1) {
+          printf("ok %d %s # SKIP\n", i + 1, name);
+          continue;
+        }
+      }
+      t = clock();
+      status = (*cmakeGeneratedFunctionMapEntries[i].func)(ac, av);
+      t = clock() - t;
+      status_message = (status == -1) ? "not ok" : "ok";
+      {
+        double time_taken = CM_CAST(double, t) / CLOCKS_PER_SEC;
+        printf("%s %d %s # %f\n", status_message, i + 1, name, time_taken);
+      }
+    }
+    printf("All tests finished.\n");
+
+    return 0;
+  }
+
+  if (testToRun == -1) {
+    arg = lowercase(av[1 + partial_match]);
+  }
+  for (i = 0; i < NumTests && testToRun == -1; ++i) {
+    char *test_name = lowercase(cmakeGeneratedFunctionMapEntries[i].name);
+    if (partial_match != 0 && strstr(test_name, arg) != CM_NULL) { /* NOLINT */
+      testToRun = i;
+      ac -= 2;
+      av += 2;
+    } else if (partial_match == 0 && strcmp(test_name, arg) == 0) {
+      testToRun = i;
+      ac--;
+      av++;
+    }
+    free(test_name);
+  }
+  free(arg);
+  if (testToRun != -1) {
+    int result;
+@CMAKE_TESTDRIVER_BEFORE_TESTMAIN@
+    if (testToRun < 0 || testToRun >= NumTests) {
+      printf("testToRun was modified by TestDriver code to an invalid value: "
+             "%3d.\n",
+             testNum);
+      return -1;
+    }
+    result = (*cmakeGeneratedFunctionMapEntries[testToRun].func)(ac, av);
+@CMAKE_TESTDRIVER_AFTER_TESTMAIN@
+    return result;
+  }
+
+  /* Nothing was run, display the test names.  */
+  printf("Available tests:\n");
+  for (i = 0; i < NumTests; ++i) {
+    printf("%3d. %s\n", i, cmakeGeneratedFunctionMapEntries[i].name);
+  }
+  printf("Failed: %s is an invalid test name.\n", av[1]);
+
+  return -1;
+}
diff --git a/share/cmake-3.18/Templates/Windows/ApplicationIcon.png b/share/cmake-3.22/Templates/Windows/ApplicationIcon.png
similarity index 100%
rename from share/cmake-3.18/Templates/Windows/ApplicationIcon.png
rename to share/cmake-3.22/Templates/Windows/ApplicationIcon.png
Binary files differ
diff --git a/share/cmake-3.18/Templates/Windows/Logo.png b/share/cmake-3.22/Templates/Windows/Logo.png
similarity index 100%
rename from share/cmake-3.18/Templates/Windows/Logo.png
rename to share/cmake-3.22/Templates/Windows/Logo.png
Binary files differ
diff --git a/share/cmake-3.18/Templates/Windows/SmallLogo.png b/share/cmake-3.22/Templates/Windows/SmallLogo.png
similarity index 100%
rename from share/cmake-3.18/Templates/Windows/SmallLogo.png
rename to share/cmake-3.22/Templates/Windows/SmallLogo.png
Binary files differ
diff --git a/share/cmake-3.18/Templates/Windows/SmallLogo44x44.png b/share/cmake-3.22/Templates/Windows/SmallLogo44x44.png
similarity index 100%
rename from share/cmake-3.18/Templates/Windows/SmallLogo44x44.png
rename to share/cmake-3.22/Templates/Windows/SmallLogo44x44.png
Binary files differ
diff --git a/share/cmake-3.18/Templates/Windows/SplashScreen.png b/share/cmake-3.22/Templates/Windows/SplashScreen.png
similarity index 100%
rename from share/cmake-3.18/Templates/Windows/SplashScreen.png
rename to share/cmake-3.22/Templates/Windows/SplashScreen.png
Binary files differ
diff --git a/share/cmake-3.18/Templates/Windows/StoreLogo.png b/share/cmake-3.22/Templates/Windows/StoreLogo.png
similarity index 100%
rename from share/cmake-3.18/Templates/Windows/StoreLogo.png
rename to share/cmake-3.22/Templates/Windows/StoreLogo.png
Binary files differ
diff --git a/share/cmake-3.18/Templates/Windows/Windows_TemporaryKey.pfx b/share/cmake-3.22/Templates/Windows/Windows_TemporaryKey.pfx
similarity index 100%
rename from share/cmake-3.18/Templates/Windows/Windows_TemporaryKey.pfx
rename to share/cmake-3.22/Templates/Windows/Windows_TemporaryKey.pfx
Binary files differ
diff --git a/share/cmake-3.18/include/cmCPluginAPI.h b/share/cmake-3.22/include/cmCPluginAPI.h
similarity index 100%
rename from share/cmake-3.18/include/cmCPluginAPI.h
rename to share/cmake-3.22/include/cmCPluginAPI.h
diff --git a/share/emacs/site-lisp/cmake-mode.el b/share/emacs/site-lisp/cmake-mode.el
index caaf0d5..ddc7b40 100644
--- a/share/emacs/site-lisp/cmake-mode.el
+++ b/share/emacs/site-lisp/cmake-mode.el
@@ -27,6 +27,9 @@
 ;; cmake-command-help Written by James Bigler
 ;;
 
+(require 'rst)
+(require 'rx)
+
 (defcustom cmake-mode-cmake-executable "cmake"
   "*The name of the cmake executable.
 
@@ -188,6 +191,61 @@
     )
   )
 
+
+;------------------------------------------------------------------------------
+
+;;
+;; Navigation / marking by function or macro
+;;
+
+(defconst cmake--regex-defun-start
+  (rx line-start
+      (zero-or-more space)
+      (or "function" "macro")
+      (zero-or-more space)
+      "("))
+
+(defconst cmake--regex-defun-end
+  (rx line-start
+      (zero-or-more space)
+      "end"
+      (or "function" "macro")
+      (zero-or-more space)
+      "(" (zero-or-more (not-char ")")) ")"))
+
+(defun cmake-beginning-of-defun ()
+  "Move backward to the beginning of a CMake function or macro.
+
+Return t unless search stops due to beginning of buffer."
+  (interactive)
+  (when (not (region-active-p))
+    (push-mark))
+  (let ((case-fold-search t))
+    (when (re-search-backward cmake--regex-defun-start nil 'move)
+      t)))
+
+(defun cmake-end-of-defun ()
+  "Move forward to the end of a CMake function or macro.
+
+Return t unless search stops due to end of buffer."
+  (interactive)
+  (when (not (region-active-p))
+    (push-mark))
+  (let ((case-fold-search t))
+    (when (re-search-forward cmake--regex-defun-end nil 'move)
+      (forward-line)
+      t)))
+
+(defun cmake-mark-defun ()
+  "Mark the current CMake function or macro.
+
+This puts the mark at the end, and point at the beginning."
+  (interactive)
+  (cmake-end-of-defun)
+  (push-mark nil :nomsg :activate)
+  (cmake-beginning-of-defun))
+
+
 ;------------------------------------------------------------------------------
 
 ;;
@@ -240,6 +298,12 @@
   ; Setup comment syntax.
   (set (make-local-variable 'comment-start) "#"))
 
+;; Default cmake-mode key bindings
+(define-key cmake-mode-map "\e\C-a" #'cmake-beginning-of-defun)
+(define-key cmake-mode-map "\e\C-e" #'cmake-end-of-defun)
+(define-key cmake-mode-map "\e\C-h" #'cmake-mark-defun)
+
+
 ; Help mode starts here
 
 
@@ -258,7 +322,27 @@
     (save-selected-window
       (select-window (display-buffer buffer 'not-this-window))
       (cmake-mode)
-      (read-only-mode 1))
+      (read-only-mode 1)
+      (view-mode 1))
+    )
+  )
+
+;;;###autoload
+(defun cmake-command-run-help (type &optional topic buffer)
+  "`cmake-command-run' but rendered in `rst-mode'."
+  (interactive "s")
+  (let* ((bufname (if buffer buffer (concat "*CMake" type (if topic "-") topic "*")))
+         (buffer  (if (get-buffer bufname) (get-buffer bufname) (generate-new-buffer bufname)))
+         (command (concat cmake-mode-cmake-executable " " type " " topic))
+         ;; Turn of resizing of mini-windows for shell-command.
+         (resize-mini-windows nil)
+         )
+    (shell-command command buffer)
+    (save-selected-window
+      (select-window (display-buffer buffer 'not-this-window))
+      (rst-mode)
+      (read-only-mode 1)
+      (view-mode 1))
     )
   )
 
@@ -266,7 +350,7 @@
 (defun cmake-help-list-commands ()
   "Prints out a list of the cmake commands."
   (interactive)
-  (cmake-command-run "--help-command-list")
+  (cmake-command-run-help "--help-command-list")
   )
 
 (defvar cmake-commands '() "List of available topics for --help-command.")
@@ -292,7 +376,7 @@
     (if (not (symbol-value listvar))
         (let ((temp-buffer-name "*CMake Temporary*"))
           (save-window-excursion
-            (cmake-command-run (concat "--help-" listname "-list") nil temp-buffer-name)
+            (cmake-command-run-help (concat "--help-" listname "-list") nil temp-buffer-name)
             (with-current-buffer temp-buffer-name
               ; FIXME: Ignore first line if it is "cmake version ..." from CMake < 3.0.
               (set listvar (split-string (buffer-substring-no-properties (point-min) (point-max)) "\n" t)))))
@@ -326,25 +410,25 @@
 (defun cmake-help-command ()
   "Prints out the help message for the command the cursor is on."
   (interactive)
-  (cmake-command-run "--help-command" (cmake-help-type "command") "*CMake Help*"))
+  (cmake-command-run-help "--help-command" (cmake-help-type "command") "*CMake Help*"))
 
 ;;;###autoload
 (defun cmake-help-module ()
   "Prints out the help message for the module the cursor is on."
   (interactive)
-  (cmake-command-run "--help-module" (cmake-help-type "module") "*CMake Help*"))
+  (cmake-command-run-help "--help-module" (cmake-help-type "module") "*CMake Help*"))
 
 ;;;###autoload
 (defun cmake-help-variable ()
   "Prints out the help message for the variable the cursor is on."
   (interactive)
-  (cmake-command-run "--help-variable" (cmake-help-type "variable") "*CMake Help*"))
+  (cmake-command-run-help "--help-variable" (cmake-help-type "variable") "*CMake Help*"))
 
 ;;;###autoload
 (defun cmake-help-property ()
   "Prints out the help message for the property the cursor is on."
   (interactive)
-  (cmake-command-run "--help-property" (cmake-help-type "property") "*CMake Help*"))
+  (cmake-command-run-help "--help-property" (cmake-help-type "property") "*CMake Help*"))
 
 ;;;###autoload
 (defun cmake-help ()
@@ -367,13 +451,13 @@
     (if (string= input "")
         (error "No argument given")
       (if (member input command-list)
-          (cmake-command-run "--help-command" input "*CMake Help*")
+          (cmake-command-run-help "--help-command" input "*CMake Help*")
         (if (member input variable-list)
-            (cmake-command-run "--help-variable" input "*CMake Help*")
+            (cmake-command-run-help "--help-variable" input "*CMake Help*")
           (if (member input module-list)
-              (cmake-command-run "--help-module" input "*CMake Help*")
+              (cmake-command-run-help "--help-module" input "*CMake Help*")
             (if (member input property-list)
-                (cmake-command-run "--help-property" input "*CMake Help*")
+                (cmake-command-run-help "--help-property" input "*CMake Help*")
               (error "Not a know help topic.") ; this really should not happen
               ))))))
   )
diff --git a/share/vim/vimfiles/indent/cmake.vim b/share/vim/vimfiles/indent/cmake.vim
index 33e583d..f7ab24a 100644
--- a/share/vim/vimfiles/indent/cmake.vim
+++ b/share/vim/vimfiles/indent/cmake.vim
@@ -5,7 +5,7 @@
 " Former Maintainer: Karthik Krishnan <karthik.krishnan@kitware.com>
 " Last Change:  2017 Aug 30
 "
-" Licence:      The CMake license applies to this file. See
+" License:      The CMake license applies to this file. See
 "               https://cmake.org/licensing
 "               This implies that distribution with Vim is allowed
 
diff --git a/share/vim/vimfiles/syntax/cmake.vim b/share/vim/vimfiles/syntax/cmake.vim
index 2d63eb0..7a3e4ed 100644
--- a/share/vim/vimfiles/syntax/cmake.vim
+++ b/share/vim/vimfiles/syntax/cmake.vim
@@ -1,15 +1,15 @@
 " Vim syntax file
 " Program:      CMake - Cross-Platform Makefile Generator
-" Version:      cmake version 3.14.20190529-g067a4f
+" Version:      cmake version 3.19.20201028-gdab947f
 " Language:     CMake
 " Author:       Andy Cedilnik <andy.cedilnik@kitware.com>,
 "               Nicholas Hutchinson <nshutchinson@gmail.com>,
 "               Patrick Boettcher <patrick.boettcher@posteo.de>
 " Maintainer:   Dimitri Merejkowsky <d.merej@gmail.com>
 " Former Maintainer: Karthik Krishnan <karthik.krishnan@kitware.com>
-" Last Change:  2019 May 29
+" Last Change:  2020 oct. 28
 "
-" Licence:      The CMake license applies to this file. See
+" License:      The CMake license applies to this file. See
 "               https://cmake.org/licensing
 "               This implies that distribution with Vim is allowed
 
@@ -44,7 +44,9 @@
             \ ADDITIONAL_CLEAN_FILES
             \ ADDITIONAL_MAKE_CLEAN_FILES
             \ ADVANCED
+            \ AIX_EXPORT_ALL_SYMBOLS
             \ ALIASED_TARGET
+            \ ALIAS_GLOBAL
             \ ALLOW_DUPLICATE_CUSTOM_TARGETS
             \ ANDROID_ANT_ADDITIONAL_OPTIONS
             \ ANDROID_API
@@ -79,6 +81,7 @@
             \ AUTOMOC_EXECUTABLE
             \ AUTOMOC_MACRO_NAMES
             \ AUTOMOC_MOC_OPTIONS
+            \ AUTOMOC_PATH_PREFIX
             \ AUTOMOC_SOURCE_GROUP
             \ AUTOMOC_TARGETS_FOLDER
             \ AUTORCC
@@ -89,6 +92,7 @@
             \ AUTOUIC_EXECUTABLE
             \ AUTOUIC_OPTIONS
             \ AUTOUIC_SEARCH_PATHS
+            \ AUTOUIC_SOURCE_GROUP
             \ BINARY_DIR
             \ BUILDSYSTEM_TARGETS
             \ BUILD_RPATH
@@ -100,8 +104,8 @@
             \ CACHE_VARIABLES
             \ CLEAN_NO_CUSTOM
             \ CMAKE_CONFIGURE_DEPENDS
-            \ CMAKE_CXX_KNOWN_FEATURES
             \ CMAKE_CUDA_KNOWN_FEATURES
+            \ CMAKE_CXX_KNOWN_FEATURES
             \ CMAKE_C_KNOWN_FEATURES
             \ CMAKE_ROLE
             \ COMMON_LANGUAGE_RUNTIME
@@ -123,9 +127,11 @@
             \ CPACK_START_MENU_SHORTCUTS
             \ CPACK_WIX_ACL
             \ CROSSCOMPILING_EMULATOR
+            \ CUDA_ARCHITECTURES
             \ CUDA_EXTENSIONS
             \ CUDA_PTX_COMPILATION
             \ CUDA_RESOLVE_DEVICE_SYMBOLS
+            \ CUDA_RUNTIME_LIBRARY
             \ CUDA_SEPARABLE_COMPILATION
             \ CUDA_STANDARD
             \ CUDA_STANDARD_REQUIRED
@@ -142,8 +148,11 @@
             \ DEPENDS
             \ DEPLOYMENT_ADDITIONAL_FILES
             \ DEPLOYMENT_REMOTE_DIRECTORY
+            \ DEPRECATION
             \ DISABLED
             \ DISABLED_FEATURES
+            \ DISABLE_PRECOMPILE_HEADERS
+            \ DOTNET_TARGET_FRAMEWORK
             \ DOTNET_TARGET_FRAMEWORK_VERSION
             \ ECLIPSE_EXTRA_CPROJECT_CONTENTS
             \ ECLIPSE_EXTRA_NATURES
@@ -151,6 +160,7 @@
             \ ENABLED_LANGUAGES
             \ ENABLE_EXPORTS
             \ ENVIRONMENT
+            \ ENVIRONMENT_MODIFICATION
             \ EXCLUDE_FROM_ALL
             \ EXCLUDE_FROM_DEFAULT_BUILD
             \ EXPORT_NAME
@@ -202,6 +212,7 @@
             \ INCLUDE_DIRECTORIES
             \ INCLUDE_REGULAR_EXPRESSION
             \ INSTALL_NAME_DIR
+            \ INSTALL_REMOVE_ENVIRONMENT_RPATH
             \ INSTALL_RPATH
             \ INSTALL_RPATH_USE_LINK_PATH
             \ INTERFACE_AUTOUIC_OPTIONS
@@ -214,11 +225,14 @@
             \ INTERFACE_LINK_LIBRARIES
             \ INTERFACE_LINK_OPTIONS
             \ INTERFACE_POSITION_INDEPENDENT_CODE
+            \ INTERFACE_PRECOMPILE_HEADERS
             \ INTERFACE_SOURCES
             \ INTERFACE_SYSTEM_INCLUDE_DIRECTORIES
             \ INTERPROCEDURAL_OPTIMIZATION
             \ IN_TRY_COMPILE
             \ IOS_INSTALL_COMBINED
+            \ ISPC_HEADER_DIRECTORY
+            \ ISPC_INSTRUCTION_SETS
             \ JOB_POOLS
             \ JOB_POOL_COMPILE
             \ JOB_POOL_LINK
@@ -242,6 +256,8 @@
             \ LINK_WHAT_YOU_USE
             \ LISTFILE_STACK
             \ LOCATION
+            \ MACHO_COMPATIBILITY_VERSION
+            \ MACHO_CURRENT_VERSION
             \ MACOSX_BUNDLE
             \ MACOSX_BUNDLE_INFO_PLIST
             \ MACOSX_FRAMEWORK_INFO_PLIST
@@ -255,18 +271,29 @@
             \ NAME
             \ NO_SONAME
             \ NO_SYSTEM_FROM_IMPORTED
+            \ OBJCXX_EXTENSIONS
+            \ OBJCXX_STANDARD
+            \ OBJCXX_STANDARD_REQUIRED
+            \ OBJC_EXTENSIONS
+            \ OBJC_STANDARD
+            \ OBJC_STANDARD_REQUIRED
             \ OBJECT_DEPENDS
             \ OBJECT_OUTPUTS
+            \ OPTIMIZE_DEPENDENCIES
             \ OSX_ARCHITECTURES
             \ OUTPUT_NAME
             \ PACKAGES_FOUND
             \ PACKAGES_NOT_FOUND
             \ PARENT_DIRECTORY
             \ PASS_REGULAR_EXPRESSION
+            \ PCH_INSTANTIATE_TEMPLATES
+            \ PCH_WARN_INVALID
             \ PDB_NAME
             \ PDB_OUTPUT_DIRECTORY
             \ POSITION_INDEPENDENT_CODE
             \ POST_INSTALL_SCRIPT
+            \ PRECOMPILE_HEADERS
+            \ PRECOMPILE_HEADERS_REUSE_FROM
             \ PREDEFINED_TARGETS_FOLDER
             \ PREFIX
             \ PRE_INSTALL_SCRIPT
@@ -278,6 +305,7 @@
             \ REPORT_UNDEFINED_PROPERTIES
             \ REQUIRED_FILES
             \ RESOURCE
+            \ RESOURCE_GROUPS
             \ RESOURCE_LOCK
             \ RULE_LAUNCH_COMPILE
             \ RULE_LAUNCH_CUSTOM
@@ -291,8 +319,10 @@
             \ SKIP_AUTORCC
             \ SKIP_AUTOUIC
             \ SKIP_BUILD_RPATH
+            \ SKIP_PRECOMPILE_HEADERS
             \ SKIP_REGULAR_EXPRESSION
             \ SKIP_RETURN_CODE
+            \ SKIP_UNITY_BUILD_INCLUSION
             \ SOURCES
             \ SOURCE_DIR
             \ SOVERSION
@@ -304,6 +334,7 @@
             \ SYMBOLIC
             \ Swift_DEPENDENCIES_FILE
             \ Swift_DIAGNOSTICS_FILE
+            \ Swift_LANGUAGE_VERSION
             \ Swift_MODULE_DIRECTORY
             \ Swift_MODULE_NAME
             \ TARGET_ARCHIVES_MAY_BE_SHARED_LIBS
@@ -315,6 +346,12 @@
             \ TIMEOUT
             \ TIMEOUT_AFTER_MATCH
             \ TYPE
+            \ UNITY_BUILD
+            \ UNITY_BUILD_BATCH_SIZE
+            \ UNITY_BUILD_CODE_AFTER_INCLUDE
+            \ UNITY_BUILD_CODE_BEFORE_INCLUDE
+            \ UNITY_BUILD_MODE
+            \ UNITY_GROUP
             \ USE_FOLDERS
             \ VALUE
             \ VARIABLES
@@ -329,9 +366,11 @@
             \ VS_DEPLOYMENT_CONTENT
             \ VS_DEPLOYMENT_LOCATION
             \ VS_DESKTOP_EXTENSIONS_VERSION
+            \ VS_DOTNET_DOCUMENTATION_FILE
             \ VS_DOTNET_REFERENCES
             \ VS_DOTNET_REFERENCES_COPY_LOCAL
             \ VS_DOTNET_TARGET_FRAMEWORK_VERSION
+            \ VS_DPI_AWARE
             \ VS_GLOBAL_KEYWORD
             \ VS_GLOBAL_PROJECT_TYPES
             \ VS_GLOBAL_ROOTNAMESPACE
@@ -342,6 +381,8 @@
             \ VS_KEYWORD
             \ VS_MOBILE_EXTENSIONS_VERSION
             \ VS_NO_SOLUTION_DEPLOY
+            \ VS_PACKAGE_REFERENCES
+            \ VS_PLATFORM_TOOLSET
             \ VS_PROJECT_IMPORT
             \ VS_RESOURCE_GENERATOR
             \ VS_SCC_AUXPATH
@@ -349,6 +390,7 @@
             \ VS_SCC_PROJECTNAME
             \ VS_SCC_PROVIDER
             \ VS_SDK_REFERENCES
+            \ VS_SETTINGS
             \ VS_SHADER_DISABLE_OPTIMIZATIONS
             \ VS_SHADER_ENABLE_DEBUG
             \ VS_SHADER_ENTRYPOINT
@@ -358,6 +400,7 @@
             \ VS_SHADER_OUTPUT_HEADER_FILE
             \ VS_SHADER_TYPE
             \ VS_SHADER_VARIABLE_NAME
+            \ VS_SOLUTION_DEPLOY
             \ VS_STARTUP_PROJECT
             \ VS_TOOL_OVERRIDE
             \ VS_USER_PROPS
@@ -376,11 +419,13 @@
             \ XCODE_FILE_ATTRIBUTES
             \ XCODE_GENERATE_SCHEME
             \ XCODE_LAST_KNOWN_FILE_TYPE
+            \ XCODE_LINK_BUILD_PHASE_MODE
             \ XCODE_PRODUCT_TYPE
             \ XCODE_SCHEME_ADDRESS_SANITIZER
             \ XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN
             \ XCODE_SCHEME_ARGUMENTS
             \ XCODE_SCHEME_DEBUG_AS_ROOT
+            \ XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING
             \ XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER
             \ XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS
             \ XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE
@@ -395,6 +440,7 @@
             \ XCODE_SCHEME_THREAD_SANITIZER_STOP
             \ XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER
             \ XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP
+            \ XCODE_SCHEME_WORKING_DIRECTORY
             \ XCODE_SCHEME_ZOMBIE_OBJECTS
             \ XCTEST
 
@@ -405,6 +451,7 @@
             \ BUILD_SHARED_LIBS
             \ CACHE
             \ CMAKE_ABSOLUTE_DESTINATION_FILES
+            \ CMAKE_AIX_EXPORT_ALL_SYMBOLS
             \ CMAKE_ANDROID_ANT_ADDITIONAL_OPTIONS
             \ CMAKE_ANDROID_API
             \ CMAKE_ANDROID_API_MIN
@@ -485,6 +532,9 @@
             \ CMAKE_ASM_LINKER_WRAPPER_FLAG
             \ CMAKE_ASM_LINKER_WRAPPER_FLAG_SEP
             \ CMAKE_ASM_LINK_EXECUTABLE
+            \ CMAKE_ASM_LINK_LIBRARY_FILE_FLAG
+            \ CMAKE_ASM_LINK_LIBRARY_FLAG
+            \ CMAKE_ASM_LINK_LIBRARY_SUFFIX
             \ CMAKE_ASM_MASM
             \ CMAKE_ASM_MASM_ANDROID_TOOLCHAIN_MACHINE
             \ CMAKE_ASM_MASM_ANDROID_TOOLCHAIN_PREFIX
@@ -535,6 +585,9 @@
             \ CMAKE_ASM_MASM_LINKER_WRAPPER_FLAG
             \ CMAKE_ASM_MASM_LINKER_WRAPPER_FLAG_SEP
             \ CMAKE_ASM_MASM_LINK_EXECUTABLE
+            \ CMAKE_ASM_MASM_LINK_LIBRARY_FILE_FLAG
+            \ CMAKE_ASM_MASM_LINK_LIBRARY_FLAG
+            \ CMAKE_ASM_MASM_LINK_LIBRARY_SUFFIX
             \ CMAKE_ASM_MASM_OUTPUT_EXTENSION
             \ CMAKE_ASM_MASM_PLATFORM_ID
             \ CMAKE_ASM_MASM_SIMULATE_ID
@@ -594,6 +647,9 @@
             \ CMAKE_ASM_NASM_LINKER_WRAPPER_FLAG
             \ CMAKE_ASM_NASM_LINKER_WRAPPER_FLAG_SEP
             \ CMAKE_ASM_NASM_LINK_EXECUTABLE
+            \ CMAKE_ASM_NASM_LINK_LIBRARY_FILE_FLAG
+            \ CMAKE_ASM_NASM_LINK_LIBRARY_FLAG
+            \ CMAKE_ASM_NASM_LINK_LIBRARY_SUFFIX
             \ CMAKE_ASM_NASM_OUTPUT_EXTENSION
             \ CMAKE_ASM_NASM_PLATFORM_ID
             \ CMAKE_ASM_NASM_SIMULATE_ID
@@ -620,6 +676,7 @@
             \ CMAKE_AUTOMOC_DEPEND_FILTERS
             \ CMAKE_AUTOMOC_MACRO_NAMES
             \ CMAKE_AUTOMOC_MOC_OPTIONS
+            \ CMAKE_AUTOMOC_PATH_PREFIX
             \ CMAKE_AUTOMOC_RELAXED_MODE
             \ CMAKE_AUTORCC
             \ CMAKE_AUTORCC_OPTIONS
@@ -640,6 +697,7 @@
             \ CMAKE_CACHE_MINOR_VERSION
             \ CMAKE_CACHE_PATCH_VERSION
             \ CMAKE_CFG_INTDIR
+            \ CMAKE_CLANG_VFS_OVERLAY
             \ CMAKE_CL_64
             \ CMAKE_CODEBLOCKS_COMPILER_ID
             \ CMAKE_CODEBLOCKS_EXCLUDE_EXTERNAL_FILES
@@ -655,6 +713,7 @@
             \ CMAKE_CPACK_COMMAND
             \ CMAKE_CROSSCOMPILING
             \ CMAKE_CROSSCOMPILING_EMULATOR
+            \ CMAKE_CROSS_CONFIGS
             \ CMAKE_CSharp
             \ CMAKE_CSharp_ANDROID_TOOLCHAIN_MACHINE
             \ CMAKE_CSharp_ANDROID_TOOLCHAIN_PREFIX
@@ -705,6 +764,9 @@
             \ CMAKE_CSharp_LINKER_WRAPPER_FLAG
             \ CMAKE_CSharp_LINKER_WRAPPER_FLAG_SEP
             \ CMAKE_CSharp_LINK_EXECUTABLE
+            \ CMAKE_CSharp_LINK_LIBRARY_FILE_FLAG
+            \ CMAKE_CSharp_LINK_LIBRARY_FLAG
+            \ CMAKE_CSharp_LINK_LIBRARY_SUFFIX
             \ CMAKE_CSharp_OUTPUT_EXTENSION
             \ CMAKE_CSharp_PLATFORM_ID
             \ CMAKE_CSharp_SIMULATE_ID
@@ -714,11 +776,13 @@
             \ CMAKE_CSharp_STANDARD_INCLUDE_DIRECTORIES
             \ CMAKE_CSharp_STANDARD_LIBRARIES
             \ CMAKE_CSharp_VISIBILITY_PRESET
+            \ CMAKE_CTEST_ARGUMENTS
             \ CMAKE_CTEST_COMMAND
             \ CMAKE_CUDA
             \ CMAKE_CUDA_ANDROID_TOOLCHAIN_MACHINE
             \ CMAKE_CUDA_ANDROID_TOOLCHAIN_PREFIX
             \ CMAKE_CUDA_ANDROID_TOOLCHAIN_SUFFIX
+            \ CMAKE_CUDA_ARCHITECTURES
             \ CMAKE_CUDA_ARCHIVE_APPEND
             \ CMAKE_CUDA_ARCHIVE_CREATE
             \ CMAKE_CUDA_ARCHIVE_FINISH
@@ -728,7 +792,6 @@
             \ CMAKE_CUDA_COMPILER_AR
             \ CMAKE_CUDA_COMPILER_ARCHITECTURE_ID
             \ CMAKE_CUDA_COMPILER_EXTERNAL_TOOLCHAIN
-            \ CMAKE_CUDA_COMPILE_FEATURES
             \ CMAKE_CUDA_COMPILER_ID
             \ CMAKE_CUDA_COMPILER_LAUNCHER
             \ CMAKE_CUDA_COMPILER_LOADED
@@ -737,6 +800,7 @@
             \ CMAKE_CUDA_COMPILER_TARGET
             \ CMAKE_CUDA_COMPILER_VERSION
             \ CMAKE_CUDA_COMPILER_VERSION_INTERNAL
+            \ CMAKE_CUDA_COMPILE_FEATURES
             \ CMAKE_CUDA_COMPILE_OBJECT
             \ CMAKE_CUDA_CPPCHECK
             \ CMAKE_CUDA_CPPLINT
@@ -768,8 +832,13 @@
             \ CMAKE_CUDA_LINKER_WRAPPER_FLAG
             \ CMAKE_CUDA_LINKER_WRAPPER_FLAG_SEP
             \ CMAKE_CUDA_LINK_EXECUTABLE
+            \ CMAKE_CUDA_LINK_LIBRARY_FILE_FLAG
+            \ CMAKE_CUDA_LINK_LIBRARY_FLAG
+            \ CMAKE_CUDA_LINK_LIBRARY_SUFFIX
             \ CMAKE_CUDA_OUTPUT_EXTENSION
             \ CMAKE_CUDA_PLATFORM_ID
+            \ CMAKE_CUDA_RESOLVE_DEVICE_SYMBOLS
+            \ CMAKE_CUDA_RUNTIME_LIBRARY
             \ CMAKE_CUDA_SEPARABLE_COMPILATION
             \ CMAKE_CUDA_SIMULATE_ID
             \ CMAKE_CUDA_SIMULATE_VERSION
@@ -782,6 +851,10 @@
             \ CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES
             \ CMAKE_CUDA_VISIBILITY_PRESET
             \ CMAKE_CURRENT_BINARY_DIR
+            \ CMAKE_CURRENT_FUNCTION
+            \ CMAKE_CURRENT_FUNCTION_LIST_DIR
+            \ CMAKE_CURRENT_FUNCTION_LIST_FILE
+            \ CMAKE_CURRENT_FUNCTION_LIST_LINE
             \ CMAKE_CURRENT_LIST_DIR
             \ CMAKE_CURRENT_LIST_FILE
             \ CMAKE_CURRENT_LIST_LINE
@@ -833,11 +906,15 @@
             \ CMAKE_CXX_INCLUDE_WHAT_YOU_USE
             \ CMAKE_CXX_INIT
             \ CMAKE_CXX_LIBRARY_ARCHITECTURE
+            \ CMAKE_CXX_LINKER_LAUNCHER
             \ CMAKE_CXX_LINKER_PREFERENCE
             \ CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES
             \ CMAKE_CXX_LINKER_WRAPPER_FLAG
             \ CMAKE_CXX_LINKER_WRAPPER_FLAG_SEP
             \ CMAKE_CXX_LINK_EXECUTABLE
+            \ CMAKE_CXX_LINK_LIBRARY_FILE_FLAG
+            \ CMAKE_CXX_LINK_LIBRARY_FLAG
+            \ CMAKE_CXX_LINK_LIBRARY_SUFFIX
             \ CMAKE_CXX_OUTPUT_EXTENSION
             \ CMAKE_CXX_PLATFORM_ID
             \ CMAKE_CXX_SIMULATE_ID
@@ -895,11 +972,15 @@
             \ CMAKE_C_INCLUDE_WHAT_YOU_USE
             \ CMAKE_C_INIT
             \ CMAKE_C_LIBRARY_ARCHITECTURE
+            \ CMAKE_C_LINKER_LAUNCHER
             \ CMAKE_C_LINKER_PREFERENCE
             \ CMAKE_C_LINKER_PREFERENCE_PROPAGATES
             \ CMAKE_C_LINKER_WRAPPER_FLAG
             \ CMAKE_C_LINKER_WRAPPER_FLAG_SEP
             \ CMAKE_C_LINK_EXECUTABLE
+            \ CMAKE_C_LINK_LIBRARY_FILE_FLAG
+            \ CMAKE_C_LINK_LIBRARY_FLAG
+            \ CMAKE_C_LINK_LIBRARY_SUFFIX
             \ CMAKE_C_OUTPUT_EXTENSION
             \ CMAKE_C_PLATFORM_ID
             \ CMAKE_C_SIMULATE_ID
@@ -913,9 +994,13 @@
             \ CMAKE_C_VISIBILITY_PRESET
             \ CMAKE_DEBUG_POSTFIX
             \ CMAKE_DEBUG_TARGET_PROPERTIES
+            \ CMAKE_DEFAULT_BUILD_TYPE
+            \ CMAKE_DEFAULT_CONFIGS
             \ CMAKE_DEPENDS_IN_PROJECT_ONLY
             \ CMAKE_DIRECTORY_LABELS
+            \ CMAKE_DISABLE_PRECOMPILE_HEADERS
             \ CMAKE_DL_LIBS
+            \ CMAKE_DOTNET_TARGET_FRAMEWORK
             \ CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION
             \ CMAKE_ECLIPSE_GENERATE_LINKED_RESOURCES
             \ CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT
@@ -936,6 +1021,7 @@
             \ CMAKE_EXTRA_GENERATOR
             \ CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES
             \ CMAKE_FIND_APPBUNDLE
+            \ CMAKE_FIND_DEBUG_MODE
             \ CMAKE_FIND_FRAMEWORK
             \ CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX
             \ CMAKE_FIND_LIBRARY_PREFIXES
@@ -960,6 +1046,7 @@
             \ CMAKE_FIND_USE_PACKAGE_REGISTRY
             \ CMAKE_FIND_USE_PACKAGE_ROOT_PATH
             \ CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH
+            \ CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY
             \ CMAKE_FOLDER
             \ CMAKE_FRAMEWORK
             \ CMAKE_FRAMEWORK_PATH
@@ -1014,6 +1101,9 @@
             \ CMAKE_Fortran_LINKER_WRAPPER_FLAG
             \ CMAKE_Fortran_LINKER_WRAPPER_FLAG_SEP
             \ CMAKE_Fortran_LINK_EXECUTABLE
+            \ CMAKE_Fortran_LINK_LIBRARY_FILE_FLAG
+            \ CMAKE_Fortran_LINK_LIBRARY_FLAG
+            \ CMAKE_Fortran_LINK_LIBRARY_SUFFIX
             \ CMAKE_Fortran_MODDIR_DEFAULT
             \ CMAKE_Fortran_MODDIR_FLAG
             \ CMAKE_Fortran_MODOUT_FLAG
@@ -1061,11 +1151,14 @@
             \ CMAKE_INSTALL_NAME_DIR
             \ CMAKE_INSTALL_PREFIX
             \ CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT
+            \ CMAKE_INSTALL_REMOVE_ENVIRONMENT_RPATH
             \ CMAKE_INSTALL_RPATH
             \ CMAKE_INSTALL_RPATH_USE_LINK_PATH
             \ CMAKE_INTERNAL_PLATFORM_ABI
             \ CMAKE_INTERPROCEDURAL_OPTIMIZATION
             \ CMAKE_IOS_INSTALL_COMBINED
+            \ CMAKE_ISPC_HEADER_DIRECTORY
+            \ CMAKE_ISPC_INSTRUCTION_SETS
             \ CMAKE_JOB_POOLS
             \ CMAKE_JOB_POOL_COMPILE
             \ CMAKE_JOB_POOL_LINK
@@ -1120,6 +1213,9 @@
             \ CMAKE_Java_LINKER_WRAPPER_FLAG
             \ CMAKE_Java_LINKER_WRAPPER_FLAG_SEP
             \ CMAKE_Java_LINK_EXECUTABLE
+            \ CMAKE_Java_LINK_LIBRARY_FILE_FLAG
+            \ CMAKE_Java_LINK_LIBRARY_FLAG
+            \ CMAKE_Java_LINK_LIBRARY_SUFFIX
             \ CMAKE_Java_OUTPUT_EXTENSION
             \ CMAKE_Java_PLATFORM_ID
             \ CMAKE_Java_SIMULATE_ID
@@ -1150,6 +1246,10 @@
             \ CMAKE_MAKE_PROGRAM
             \ CMAKE_MATCH_COUNT
             \ CMAKE_MAXIMUM_RECURSION_DEPTH
+            \ CMAKE_MESSAGE_CONTEXT
+            \ CMAKE_MESSAGE_CONTEXT_SHOW
+            \ CMAKE_MESSAGE_INDENT
+            \ CMAKE_MESSAGE_LOG_LEVEL
             \ CMAKE_MFC_FLAG
             \ CMAKE_MINIMUM_REQUIRED_VERSION
             \ CMAKE_MINOR_VERSION
@@ -1164,12 +1264,25 @@
             \ CMAKE_NOT_USING_CONFIG_FLAGS
             \ CMAKE_NO_BUILTIN_CHRPATH
             \ CMAKE_NO_SYSTEM_FROM_IMPORTED
+            \ CMAKE_OBJCXX_CLANG_TIDY
+            \ CMAKE_OBJCXX_EXTENSIONS
+            \ CMAKE_OBJCXX_LINKER_LAUNCHER
+            \ CMAKE_OBJCXX_STANDARD
+            \ CMAKE_OBJCXX_STANDARD_REQUIRED
+            \ CMAKE_OBJC_CLANG_TIDY
+            \ CMAKE_OBJC_EXTENSIONS
+            \ CMAKE_OBJC_LINKER_LAUNCHER
+            \ CMAKE_OBJC_STANDARD
+            \ CMAKE_OBJC_STANDARD_REQUIRED
             \ CMAKE_OBJECT_PATH_MAX
+            \ CMAKE_OPTIMIZE_DEPENDENCIES
             \ CMAKE_OSX_ARCHITECTURES
             \ CMAKE_OSX_DEPLOYMENT_TARGET
             \ CMAKE_OSX_SYSROOT
             \ CMAKE_PARENT_LIST_FILE
             \ CMAKE_PATCH_VERSION
+            \ CMAKE_PCH_INSTANTIATE_TEMPLATES
+            \ CMAKE_PCH_WARN_INVALID
             \ CMAKE_PDB_OUTPUT_DIRECTORY
             \ CMAKE_POSITION_INDEPENDENT_CODE
             \ CMAKE_PREFIX_PATH
@@ -1235,6 +1348,9 @@
             \ CMAKE_RC_LINKER_WRAPPER_FLAG
             \ CMAKE_RC_LINKER_WRAPPER_FLAG_SEP
             \ CMAKE_RC_LINK_EXECUTABLE
+            \ CMAKE_RC_LINK_LIBRARY_FILE_FLAG
+            \ CMAKE_RC_LINK_LIBRARY_FLAG
+            \ CMAKE_RC_LINK_LIBRARY_SUFFIX
             \ CMAKE_RC_OUTPUT_EXTENSION
             \ CMAKE_RC_PLATFORM_ID
             \ CMAKE_RC_SIMULATE_ID
@@ -1334,7 +1450,11 @@
             \ CMAKE_Swift_LINKER_WRAPPER_FLAG
             \ CMAKE_Swift_LINKER_WRAPPER_FLAG_SEP
             \ CMAKE_Swift_LINK_EXECUTABLE
+            \ CMAKE_Swift_LINK_LIBRARY_FILE_FLAG
+            \ CMAKE_Swift_LINK_LIBRARY_FLAG
+            \ CMAKE_Swift_LINK_LIBRARY_SUFFIX
             \ CMAKE_Swift_MODULE_DIRECTORY
+            \ CMAKE_Swift_NUM_THREADS
             \ CMAKE_Swift_OUTPUT_EXTENSION
             \ CMAKE_Swift_PLATFORM_ID
             \ CMAKE_Swift_SIMULATE_ID
@@ -1349,6 +1469,8 @@
             \ CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
             \ CMAKE_TRY_COMPILE_TARGET_TYPE
             \ CMAKE_TWEAK_VERSION
+            \ CMAKE_UNITY_BUILD
+            \ CMAKE_UNITY_BUILD_BATCH_SIZE
             \ CMAKE_USER_MAKE_RULES_OVERRIDE
             \ CMAKE_USER_MAKE_RULES_OVERRIDE_ASM
             \ CMAKE_USER_MAKE_RULES_OVERRIDE_ASM_MASM
@@ -1377,6 +1499,7 @@
             \ CMAKE_VS_PLATFORM_NAME_DEFAULT
             \ CMAKE_VS_PLATFORM_TOOLSET
             \ CMAKE_VS_PLATFORM_TOOLSET_CUDA
+            \ CMAKE_VS_PLATFORM_TOOLSET_CUDA_CUSTOM_DIR
             \ CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE
             \ CMAKE_VS_PLATFORM_TOOLSET_VERSION
             \ CMAKE_VS_SDK_EXCLUDE_DIRECTORIES
@@ -1387,19 +1510,24 @@
             \ CMAKE_VS_SDK_REFERENCE_DIRECTORIES
             \ CMAKE_VS_SDK_SOURCE_DIRECTORIES
             \ CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION
+            \ CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION_MAXIMUM
             \ CMAKE_VS_WINRT_BY_DEFAULT
             \ CMAKE_WARN_DEPRECATED
             \ CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION
             \ CMAKE_WIN32_EXECUTABLE
             \ CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS
+            \ CMAKE_XCODE_BUILD_SYSTEM
             \ CMAKE_XCODE_GENERATE_SCHEME
             \ CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY
+            \ CMAKE_XCODE_LINK_BUILD_PHASE_MODE
             \ CMAKE_XCODE_PLATFORM_TOOLSET
             \ CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER
             \ CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN
+            \ CMAKE_XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING
             \ CMAKE_XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER
             \ CMAKE_XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS
             \ CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE
+            \ CMAKE_XCODE_SCHEME_ENVIRONMENT
             \ CMAKE_XCODE_SCHEME_GUARD_MALLOC
             \ CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP
             \ CMAKE_XCODE_SCHEME_MALLOC_GUARD_EDGES
@@ -1409,13 +1537,13 @@
             \ CMAKE_XCODE_SCHEME_THREAD_SANITIZER_STOP
             \ CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER
             \ CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP
+            \ CMAKE_XCODE_SCHEME_WORKING_DIRECTORY
             \ CMAKE_XCODE_SCHEME_ZOMBIE_OBJECTS
             \ CPACK_ABSOLUTE_DESTINATION_FILES
             \ CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY
             \ CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION
             \ CPACK_INCLUDE_TOPLEVEL_DIRECTORY
             \ CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS
-            \ CPACK_INSTALL_SCRIPT
             \ CPACK_PACKAGING_INSTALL_PREFIX
             \ CPACK_SET_DESTDIR
             \ CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION
@@ -1475,6 +1603,7 @@
             \ CTEST_P4_COMMAND
             \ CTEST_P4_OPTIONS
             \ CTEST_P4_UPDATE_OPTIONS
+            \ CTEST_RESOURCE_SPEC_FILE
             \ CTEST_RUN_CURRENT_SCRIPT
             \ CTEST_SCP_COMMAND
             \ CTEST_SITE
@@ -1492,6 +1621,283 @@
             \ CTEST_UPDATE_VERSION_OVERRIDE
             \ CTEST_USE_LAUNCHERS
             \ CYGWIN
+            \ DOXYGEN_ABBREVIATE_BRIEF
+            \ DOXYGEN_ALIASES
+            \ DOXYGEN_ALLEXTERNALS
+            \ DOXYGEN_ALLOW_UNICODE_NAMES
+            \ DOXYGEN_ALPHABETICAL_INDEX
+            \ DOXYGEN_ALWAYS_DETAILED_SEC
+            \ DOXYGEN_AUTOLINK_SUPPORT
+            \ DOXYGEN_BINARY_TOC
+            \ DOXYGEN_BRIEF_MEMBER_DESC
+            \ DOXYGEN_BUILTIN_STL_SUPPORT
+            \ DOXYGEN_CALLER_GRAPH
+            \ DOXYGEN_CALL_GRAPH
+            \ DOXYGEN_CASE_SENSE_NAMES
+            \ DOXYGEN_CHM_FILE
+            \ DOXYGEN_CHM_INDEX_ENCODING
+            \ DOXYGEN_CITE_BIB_FILES
+            \ DOXYGEN_CLANG_ASSISTED_PARSING
+            \ DOXYGEN_CLANG_DATABASE_PATH
+            \ DOXYGEN_CLANG_OPTIONS
+            \ DOXYGEN_CLASS_DIAGRAMS
+            \ DOXYGEN_CLASS_GRAPH
+            \ DOXYGEN_COLLABORATION_GRAPH
+            \ DOXYGEN_COLS_IN_ALPHA_INDEX
+            \ DOXYGEN_COMPACT_LATEX
+            \ DOXYGEN_COMPACT_RTF
+            \ DOXYGEN_CPP_CLI_SUPPORT
+            \ DOXYGEN_CREATE_SUBDIRS
+            \ DOXYGEN_DIAFILE_DIRS
+            \ DOXYGEN_DIA_PATH
+            \ DOXYGEN_DIRECTORY_GRAPH
+            \ DOXYGEN_DISABLE_INDEX
+            \ DOXYGEN_DISTRIBUTE_GROUP_DOC
+            \ DOXYGEN_DOCBOOK_OUTPUT
+            \ DOXYGEN_DOCBOOK_PROGRAMLISTING
+            \ DOXYGEN_DOCSET_BUNDLE_ID
+            \ DOXYGEN_DOCSET_FEEDNAME
+            \ DOXYGEN_DOCSET_PUBLISHER_ID
+            \ DOXYGEN_DOCSET_PUBLISHER_NAME
+            \ DOXYGEN_DOTFILE_DIRS
+            \ DOXYGEN_DOT_CLEANUP
+            \ DOXYGEN_DOT_FONTNAME
+            \ DOXYGEN_DOT_FONTPATH
+            \ DOXYGEN_DOT_FONTSIZE
+            \ DOXYGEN_DOT_GRAPH_MAX_NODES
+            \ DOXYGEN_DOT_IMAGE_FORMAT
+            \ DOXYGEN_DOT_MULTI_TARGETS
+            \ DOXYGEN_DOT_NUM_THREADS
+            \ DOXYGEN_DOT_PATH
+            \ DOXYGEN_DOT_TRANSPARENT
+            \ DOXYGEN_DOXYFILE_ENCODING
+            \ DOXYGEN_ECLIPSE_DOC_ID
+            \ DOXYGEN_ENABLED_SECTIONS
+            \ DOXYGEN_ENABLE_PREPROCESSING
+            \ DOXYGEN_ENUM_VALUES_PER_LINE
+            \ DOXYGEN_EXAMPLE_PATH
+            \ DOXYGEN_EXAMPLE_PATTERNS
+            \ DOXYGEN_EXAMPLE_RECURSIVE
+            \ DOXYGEN_EXCLUDE
+            \ DOXYGEN_EXCLUDE_PATTERNS
+            \ DOXYGEN_EXCLUDE_SYMBOLS
+            \ DOXYGEN_EXCLUDE_SYMLINKS
+            \ DOXYGEN_EXPAND_AS_DEFINED
+            \ DOXYGEN_EXPAND_ONLY_PREDEF
+            \ DOXYGEN_EXTENSION_MAPPING
+            \ DOXYGEN_EXTERNAL_GROUPS
+            \ DOXYGEN_EXTERNAL_PAGES
+            \ DOXYGEN_EXTERNAL_SEARCH
+            \ DOXYGEN_EXTERNAL_SEARCH_ID
+            \ DOXYGEN_EXTRACT_ALL
+            \ DOXYGEN_EXTRACT_ANON_NSPACES
+            \ DOXYGEN_EXTRACT_LOCAL_CLASSES
+            \ DOXYGEN_EXTRACT_LOCAL_METHODS
+            \ DOXYGEN_EXTRACT_PACKAGE
+            \ DOXYGEN_EXTRACT_PRIVATE
+            \ DOXYGEN_EXTRACT_PRIV_VIRTUAL
+            \ DOXYGEN_EXTRACT_STATIC
+            \ DOXYGEN_EXTRA_PACKAGES
+            \ DOXYGEN_EXTRA_SEARCH_MAPPINGS
+            \ DOXYGEN_EXT_LINKS_IN_WINDOW
+            \ DOXYGEN_FILE_PATTERNS
+            \ DOXYGEN_FILE_VERSION_FILTER
+            \ DOXYGEN_FILTER_PATTERNS
+            \ DOXYGEN_FILTER_SOURCE_FILES
+            \ DOXYGEN_FILTER_SOURCE_PATTERNS
+            \ DOXYGEN_FORCE_LOCAL_INCLUDES
+            \ DOXYGEN_FORMULA_FONTSIZE
+            \ DOXYGEN_FORMULA_TRANSPARENT
+            \ DOXYGEN_FULL_PATH_NAMES
+            \ DOXYGEN_GENERATE_AUTOGEN_DEF
+            \ DOXYGEN_GENERATE_BUGLIST
+            \ DOXYGEN_GENERATE_CHI
+            \ DOXYGEN_GENERATE_DEPRECATEDLIST
+            \ DOXYGEN_GENERATE_DOCBOOK
+            \ DOXYGEN_GENERATE_DOCSET
+            \ DOXYGEN_GENERATE_ECLIPSEHELP
+            \ DOXYGEN_GENERATE_HTML
+            \ DOXYGEN_GENERATE_HTMLHELP
+            \ DOXYGEN_GENERATE_LATEX
+            \ DOXYGEN_GENERATE_LEGEND
+            \ DOXYGEN_GENERATE_MAN
+            \ DOXYGEN_GENERATE_PERLMOD
+            \ DOXYGEN_GENERATE_QHP
+            \ DOXYGEN_GENERATE_RTF
+            \ DOXYGEN_GENERATE_TAGFILE
+            \ DOXYGEN_GENERATE_TESTLIST
+            \ DOXYGEN_GENERATE_TODOLIST
+            \ DOXYGEN_GENERATE_TREEVIEW
+            \ DOXYGEN_GENERATE_XML
+            \ DOXYGEN_GRAPHICAL_HIERARCHY
+            \ DOXYGEN_GROUP_GRAPHS
+            \ DOXYGEN_GROUP_NESTED_COMPOUNDS
+            \ DOXYGEN_HAVE_DOT
+            \ DOXYGEN_HHC_LOCATION
+            \ DOXYGEN_HIDE_COMPOUND_REFERENCE
+            \ DOXYGEN_HIDE_FRIEND_COMPOUNDS
+            \ DOXYGEN_HIDE_IN_BODY_DOCS
+            \ DOXYGEN_HIDE_SCOPE_NAMES
+            \ DOXYGEN_HIDE_UNDOC_CLASSES
+            \ DOXYGEN_HIDE_UNDOC_MEMBERS
+            \ DOXYGEN_HIDE_UNDOC_RELATIONS
+            \ DOXYGEN_HTML_COLORSTYLE_GAMMA
+            \ DOXYGEN_HTML_COLORSTYLE_HUE
+            \ DOXYGEN_HTML_COLORSTYLE_SAT
+            \ DOXYGEN_HTML_DYNAMIC_MENUS
+            \ DOXYGEN_HTML_DYNAMIC_SECTIONS
+            \ DOXYGEN_HTML_EXTRA_FILES
+            \ DOXYGEN_HTML_EXTRA_STYLESHEET
+            \ DOXYGEN_HTML_FILE_EXTENSION
+            \ DOXYGEN_HTML_FOOTER
+            \ DOXYGEN_HTML_HEADER
+            \ DOXYGEN_HTML_INDEX_NUM_ENTRIES
+            \ DOXYGEN_HTML_OUTPUT
+            \ DOXYGEN_HTML_STYLESHEET
+            \ DOXYGEN_HTML_TIMESTAMP
+            \ DOXYGEN_IDL_PROPERTY_SUPPORT
+            \ DOXYGEN_IGNORE_PREFIX
+            \ DOXYGEN_IMAGE_PATH
+            \ DOXYGEN_INCLUDED_BY_GRAPH
+            \ DOXYGEN_INCLUDE_FILE_PATTERNS
+            \ DOXYGEN_INCLUDE_GRAPH
+            \ DOXYGEN_INCLUDE_PATH
+            \ DOXYGEN_INHERIT_DOCS
+            \ DOXYGEN_INLINE_GROUPED_CLASSES
+            \ DOXYGEN_INLINE_INFO
+            \ DOXYGEN_INLINE_INHERITED_MEMB
+            \ DOXYGEN_INLINE_SIMPLE_STRUCTS
+            \ DOXYGEN_INLINE_SOURCES
+            \ DOXYGEN_INPUT
+            \ DOXYGEN_INPUT_ENCODING
+            \ DOXYGEN_INPUT_FILTER
+            \ DOXYGEN_INTERACTIVE_SVG
+            \ DOXYGEN_INTERNAL_DOCS
+            \ DOXYGEN_JAVADOC_AUTOBRIEF
+            \ DOXYGEN_JAVADOC_BANNER
+            \ DOXYGEN_LATEX_BATCHMODE
+            \ DOXYGEN_LATEX_BIB_STYLE
+            \ DOXYGEN_LATEX_CMD_NAME
+            \ DOXYGEN_LATEX_EMOJI_DIRECTORY
+            \ DOXYGEN_LATEX_EXTRA_FILES
+            \ DOXYGEN_LATEX_EXTRA_STYLESHEET
+            \ DOXYGEN_LATEX_FOOTER
+            \ DOXYGEN_LATEX_HEADER
+            \ DOXYGEN_LATEX_HIDE_INDICES
+            \ DOXYGEN_LATEX_MAKEINDEX_CMD
+            \ DOXYGEN_LATEX_OUTPUT
+            \ DOXYGEN_LATEX_SOURCE_CODE
+            \ DOXYGEN_LATEX_TIMESTAMP
+            \ DOXYGEN_LAYOUT_FILE
+            \ DOXYGEN_LOOKUP_CACHE_SIZE
+            \ DOXYGEN_MACRO_EXPANSION
+            \ DOXYGEN_MAKEINDEX_CMD_NAME
+            \ DOXYGEN_MAN_EXTENSION
+            \ DOXYGEN_MAN_LINKS
+            \ DOXYGEN_MAN_OUTPUT
+            \ DOXYGEN_MAN_SUBDIR
+            \ DOXYGEN_MARKDOWN_SUPPORT
+            \ DOXYGEN_MATHJAX_CODEFILE
+            \ DOXYGEN_MATHJAX_EXTENSIONS
+            \ DOXYGEN_MATHJAX_FORMAT
+            \ DOXYGEN_MATHJAX_RELPATH
+            \ DOXYGEN_MAX_DOT_GRAPH_DEPTH
+            \ DOXYGEN_MAX_INITIALIZER_LINES
+            \ DOXYGEN_MSCFILE_DIRS
+            \ DOXYGEN_MULTILINE_CPP_IS_BRIEF
+            \ DOXYGEN_OPTIMIZE_FOR_FORTRAN
+            \ DOXYGEN_OPTIMIZE_OUTPUT_FOR_C
+            \ DOXYGEN_OPTIMIZE_OUTPUT_JAVA
+            \ DOXYGEN_OPTIMIZE_OUTPUT_SLICE
+            \ DOXYGEN_OPTIMIZE_OUTPUT_VHDL
+            \ DOXYGEN_OUTPUT_DIRECTORY
+            \ DOXYGEN_OUTPUT_LANGUAGE
+            \ DOXYGEN_OUTPUT_TEXT_DIRECTION
+            \ DOXYGEN_PAPER_TYPE
+            \ DOXYGEN_PDF_HYPERLINKS
+            \ DOXYGEN_PERLMOD_LATEX
+            \ DOXYGEN_PERLMOD_MAKEVAR_PREFIX
+            \ DOXYGEN_PERLMOD_PRETTY
+            \ DOXYGEN_PLANTUML_CFG_FILE
+            \ DOXYGEN_PLANTUML_INCLUDE_PATH
+            \ DOXYGEN_PLANTUML_JAR_PATH
+            \ DOXYGEN_PREDEFINED
+            \ DOXYGEN_PROJECT_BRIEF
+            \ DOXYGEN_PROJECT_LOGO
+            \ DOXYGEN_PROJECT_NAME
+            \ DOXYGEN_PROJECT_NUMBER
+            \ DOXYGEN_QCH_FILE
+            \ DOXYGEN_QHG_LOCATION
+            \ DOXYGEN_QHP_CUST_FILTER_ATTRS
+            \ DOXYGEN_QHP_CUST_FILTER_NAME
+            \ DOXYGEN_QHP_NAMESPACE
+            \ DOXYGEN_QHP_SECT_FILTER_ATTRS
+            \ DOXYGEN_QHP_VIRTUAL_FOLDER
+            \ DOXYGEN_QT_AUTOBRIEF
+            \ DOXYGEN_QUIET
+            \ DOXYGEN_RECURSIVE
+            \ DOXYGEN_REFERENCED_BY_RELATION
+            \ DOXYGEN_REFERENCES_LINK_SOURCE
+            \ DOXYGEN_REFERENCES_RELATION
+            \ DOXYGEN_REPEAT_BRIEF
+            \ DOXYGEN_RTF_EXTENSIONS_FILE
+            \ DOXYGEN_RTF_HYPERLINKS
+            \ DOXYGEN_RTF_OUTPUT
+            \ DOXYGEN_RTF_SOURCE_CODE
+            \ DOXYGEN_RTF_STYLESHEET_FILE
+            \ DOXYGEN_SEARCHDATA_FILE
+            \ DOXYGEN_SEARCHENGINE
+            \ DOXYGEN_SEARCHENGINE_URL
+            \ DOXYGEN_SEARCH_INCLUDES
+            \ DOXYGEN_SEPARATE_MEMBER_PAGES
+            \ DOXYGEN_SERVER_BASED_SEARCH
+            \ DOXYGEN_SHORT_NAMES
+            \ DOXYGEN_SHOW_FILES
+            \ DOXYGEN_SHOW_GROUPED_MEMB_INC
+            \ DOXYGEN_SHOW_INCLUDE_FILES
+            \ DOXYGEN_SHOW_NAMESPACES
+            \ DOXYGEN_SHOW_USED_FILES
+            \ DOXYGEN_SIP_SUPPORT
+            \ DOXYGEN_SKIP_FUNCTION_MACROS
+            \ DOXYGEN_SORT_BRIEF_DOCS
+            \ DOXYGEN_SORT_BY_SCOPE_NAME
+            \ DOXYGEN_SORT_GROUP_NAMES
+            \ DOXYGEN_SORT_MEMBERS_CTORS_1ST
+            \ DOXYGEN_SORT_MEMBER_DOCS
+            \ DOXYGEN_SOURCE_BROWSER
+            \ DOXYGEN_SOURCE_TOOLTIPS
+            \ DOXYGEN_STRICT_PROTO_MATCHING
+            \ DOXYGEN_STRIP_CODE_COMMENTS
+            \ DOXYGEN_STRIP_FROM_INC_PATH
+            \ DOXYGEN_STRIP_FROM_PATH
+            \ DOXYGEN_SUBGROUPING
+            \ DOXYGEN_TAB_SIZE
+            \ DOXYGEN_TAGFILES
+            \ DOXYGEN_TCL_SUBST
+            \ DOXYGEN_TEMPLATE_RELATIONS
+            \ DOXYGEN_TOC_EXPAND
+            \ DOXYGEN_TOC_INCLUDE_HEADINGS
+            \ DOXYGEN_TREEVIEW_WIDTH
+            \ DOXYGEN_TYPEDEF_HIDES_STRUCT
+            \ DOXYGEN_UML_LIMIT_NUM_FIELDS
+            \ DOXYGEN_UML_LOOK
+            \ DOXYGEN_USE_HTAGS
+            \ DOXYGEN_USE_MATHJAX
+            \ DOXYGEN_USE_MDFILE_AS_MAINPAGE
+            \ DOXYGEN_USE_PDFLATEX
+            \ DOXYGEN_VERBATIM_HEADERS
+            \ DOXYGEN_VERBATIM_VARS
+            \ DOXYGEN_VERSION
+            \ DOXYGEN_WARNINGS
+            \ DOXYGEN_WARN_AS_ERROR
+            \ DOXYGEN_WARN_FORMAT
+            \ DOXYGEN_WARN_IF_DOC_ERROR
+            \ DOXYGEN_WARN_IF_UNDOCUMENTED
+            \ DOXYGEN_WARN_LOGFILE
+            \ DOXYGEN_WARN_NO_PARAMDOC
+            \ DOXYGEN_XML_NS_MEMB_FILE_SCOPE
+            \ DOXYGEN_XML_OUTPUT
+            \ DOXYGEN_XML_PROGRAMLISTING
             \ ENV
             \ EXECUTABLE_OUTPUT_PATH
             \ GHS-MULTI
@@ -1540,9 +1946,11 @@
             \ BUILD_BYPRODUCTS
             \ BUILD_COMMAND
             \ BUILD_IN_SOURCE
+            \ CHECKOUT
             \ CMAKE_ARGS
             \ CMAKE_CACHE_ARGS
             \ CMAKE_CACHE_DEFAULT_ARGS
+            \ CMAKE_EP_GIT_REMOTE_UPDATE_STRATEGY
             \ CMAKE_TLS_CAINFO
             \ CMAKE_TLS_VERIFY
             \ COMMENT
@@ -1567,14 +1975,17 @@
             \ EP_STEP_TARGETS
             \ EP_UPDATE_DISCONNECTED
             \ EXCLUDE_FROM_ALL
+            \ FALSE
             \ FORCE
             \ GHS
             \ GIT_CONFIG
             \ GIT_PROGRESS
             \ GIT_REMOTE_NAME
+            \ GIT_REMOTE_UPDATE_STRATEGY
             \ GIT_REPOSITORY
             \ GIT_SHALLOW
             \ GIT_SUBMODULES
+            \ GIT_SUBMODULES_RECURSE
             \ GIT_TAG
             \ HG_REPOSITORY
             \ HG_TAG
@@ -1582,6 +1993,7 @@
             \ HTTP_PASSWORD
             \ HTTP_USERNAME
             \ IGNORED
+            \ INACTIVITY_TIMEOUT
             \ INDEPENDENT_STEP_TARGETS
             \ INSTALL_COMMAND
             \ INSTALL_DIR
@@ -1608,6 +2020,8 @@
             \ PATCH_COMMAND
             \ PREFIX
             \ PROPERTY
+            \ REBASE
+            \ REBASE_CHECKOUT
             \ REQUIRED
             \ SOURCE_DIR
             \ SOURCE_SUBDIR
@@ -1632,6 +2046,7 @@
             \ UPDATE_DISCONNECTED
             \ URL
             \ URL_HASH
+            \ URL_MD5
             \ USES_TERMINAL_BUILD
             \ USES_TERMINAL_CONFIGURE
             \ USES_TERMINAL_DOWNLOAD
@@ -1670,12 +2085,16 @@
             \ MAIN_DEPENDENCY
             \ NOT
             \ OUTPUT
+            \ PATH
             \ POST_BUILD
             \ PRE_BUILD
             \ PRE_LINK
             \ SYMBOLIC
             \ TARGET_FILE
+            \ TARGET_LINKER_FILE
+            \ TARGET_PDB_FILE
             \ TARGET_PROPERTY
+            \ TARGET_SONAME_FILE
             \ USES_TERMINAL
             \ VERBATIM
             \ WORKING_DIRECTORY
@@ -1694,8 +2113,13 @@
             \ JOB_POOL
             \ JOB_POOLS
             \ JOIN
+            \ PATH
             \ SOURCES
+            \ TARGET_FILE
+            \ TARGET_LINKER_FILE
+            \ TARGET_PDB_FILE
             \ TARGET_PROPERTY
+            \ TARGET_SONAME_FILE
             \ USES_TERMINAL
             \ VERBATIM
             \ WORKING_DIRECTORY
@@ -1709,6 +2133,7 @@
 
 syn keyword cmakeKWadd_executable contained
             \ ALIAS
+            \ ALIAS_GLOBAL
             \ CONFIG
             \ EXCLUDE_FROM_ALL
             \ GLOBAL
@@ -1724,6 +2149,7 @@
 
 syn keyword cmakeKWadd_library contained
             \ ALIAS
+            \ ALIAS_GLOBAL
             \ ARCHIVE_OUTPUT_DIRECTORY
             \ CLI
             \ CONFIG
@@ -1734,11 +2160,15 @@
             \ HEADER_FILE_ONLY
             \ IMPORTED
             \ IMPORTED_
+            \ IMPORTED_IMPLIB
+            \ IMPORTED_IMPLIB_
             \ IMPORTED_LOCATION
             \ IMPORTED_LOCATION_
             \ IMPORTED_OBJECTS
             \ IMPORTED_OBJECTS_
+            \ INTERFACE
             \ INTERFACE_
+            \ INTERFACE_SOURCES
             \ LIBRARY_OUTPUT_DIRECTORY
             \ MODULE
             \ OBJECT
@@ -1748,17 +2178,23 @@
             \ POST_BUILD
             \ PRE_BUILD
             \ PRE_LINK
-            \ PUBLIC_HEADER
+            \ PRIVATE
+            \ PUBLIC
             \ RUNTIME_OUTPUT_DIRECTORY
             \ SHARED
+            \ SOURCES
             \ STATIC
             \ TARGET_OBJECTS
             \ UNKNOWN
 
 syn keyword cmakeKWadd_link_options contained
             \ CMAKE_
+            \ CUDA_RESOLVE_DEVICE_SYMBOLS
+            \ CUDA_SEPARABLE_COMPILATION
+            \ DEVICE_LINK
             \ GCC
             \ GNU
+            \ HOST_LINK
             \ LANG
             \ LINKER
             \ LINK_OPTIONS
@@ -1774,6 +2210,7 @@
 syn keyword cmakeKWadd_test contained
             \ BUILD_TESTING
             \ COMMAND
+            \ COMMAND_EXPAND_LISTS
             \ CONFIGURATIONS
             \ FAIL_REGULAR_EXPRESSION
             \ NAME
@@ -1815,6 +2252,23 @@
             \ TOTAL_PHYSICAL_MEMORY
             \ TOTAL_VIRTUAL_MEMORY
 
+syn keyword cmakeKWcmake_language contained
+            \ AND
+            \ CALL
+            \ CANCEL_CALL
+            \ CODE
+            \ DEFER
+            \ DIRECTORY
+            \ EVAL
+            \ FALSE
+            \ GET_CALL_IDS
+            \ ID
+            \ ID_VAR
+            \ OR
+            \ STATUS
+            \ TRUE
+            \ WRITE
+
 syn keyword cmakeKWcmake_minimum_required contained
             \ FATAL_ERROR
             \ VERSION
@@ -1844,6 +2298,72 @@
             \ _KEYWORDS_MISSING_VALUES
             \ _UNPARSED_ARGUMENTS
 
+syn keyword cmakeKWcmake_path contained
+            \ ABSOLUTE_PATH
+            \ AND
+            \ APPEND
+            \ BASE_DIRECTORY
+            \ CMAKE_PATH
+            \ COMPARE
+            \ CONCAT
+            \ CONVERT
+            \ ELSEIF
+            \ ENDIF
+            \ EXTENSION
+            \ EXTENSION_DEF
+            \ FALSE
+            \ FILENAME_DEF
+            \ GET
+            \ GET_EXTENSION
+            \ GET_FILENAME
+            \ GET_PARENT_PATH
+            \ GET_RELATIVE_PATH
+            \ GET_ROOT_DIRECTORY
+            \ GET_ROOT_NAME
+            \ GET_ROOT_PATH
+            \ GET_STEM
+            \ HASH
+            \ HAS_EXTENSION
+            \ HAS_FILENAME
+            \ HAS_PARENT_PATH
+            \ HAS_RELATIVE_PATH
+            \ HAS_ROOT_DIRECTORY
+            \ HAS_ROOT_NAME
+            \ HAS_ROOT_PATH
+            \ HAS_STEM
+            \ IF
+            \ IS_ABSOLUTE
+            \ IS_PREFIX
+            \ IS_RELATIVE
+            \ LAST_ONLY
+            \ MATCHES
+            \ NATIVE_PATH
+            \ NORMALIZE
+            \ NORMAL_PATH
+            \ NOT
+            \ NOT_EQUAL
+            \ OP
+            \ OS
+            \ OUTPUT_VARIABLE
+            \ PARENT_PATH
+            \ PROXIMATE_PATH
+            \ REAL_PATH
+            \ RELATIVE_PATH
+            \ REMOVE_EXTENSION
+            \ REMOVE_FILENAME
+            \ REPLACE_EXTENSION
+            \ REPLACE_FILENAME
+            \ RETURN
+            \ ROOT_DIRECTORY
+            \ ROOT_NAME
+            \ ROOT_PATH
+            \ STEM
+            \ STREQUAL
+            \ TO_CMAKE_PATH_LIST
+            \ TO_NATIVE_PATH_LIST
+            \ TRUE
+            \ XOR
+
 syn keyword cmakeKWcmake_policy contained
             \ CMAKE_POLICY_DEFAULT_CMP
             \ CMP
@@ -1861,10 +2381,13 @@
             \ CRLF
             \ DOS
             \ ESCAPE_QUOTES
+            \ FILE_PERMISSIONS
             \ FOO_ENABLE
             \ FOO_STRING
             \ LF
             \ NEWLINE_STYLE
+            \ NO_SOURCE_PERMISSIONS
+            \ USE_SOURCE_PERMISSIONS
             \ VAR
 
 syn keyword cmakeKWcreate_test_sourcelist contained
@@ -1934,6 +2457,7 @@
 
 syn keyword cmakeKWctest_start contained
             \ APPEND
+            \ GROUP
             \ QUIET
             \ TAG
             \ TRACK
@@ -1956,6 +2480,7 @@
             \ SUBMIT_URL
 
 syn keyword cmakeKWctest_test contained
+            \ AFTER_TIMEOUT
             \ APPEND
             \ BUILD
             \ CAPTURE_CMAKE_ERROR
@@ -1971,12 +2496,17 @@
             \ ON
             \ PARALLEL_LEVEL
             \ QUIET
+            \ REPEAT
+            \ RESOURCE_SPEC_FILE
             \ RETURN_VALUE
             \ SCHEDULE_RANDOM
             \ START
+            \ STOP_ON_FAILURE
             \ STOP_TIME
             \ STRIDE
             \ TEST_LOAD
+            \ UNTIL_FAIL
+            \ UNTIL_PASS
 
 syn keyword cmakeKWctest_update contained
             \ CAPTURE_CMAKE_ERROR
@@ -2004,9 +2534,18 @@
             \ TEST
             \ VARIABLE
 
+syn keyword cmakeKWdoxygen_add_docs contained
+            \ ALL
+            \ COMMENT
+            \ USE_STAMP_FILE
+            \ WORKING_DIRECTORY
+
 syn keyword cmakeKWenable_language contained
             \ ASM
             \ CUDA
+            \ ISPC
+            \ OBJC
+            \ OBJCXX
             \ OPTIONAL
 
 syn keyword cmakeKWenable_testing contained
@@ -2019,15 +2558,20 @@
 
 syn keyword cmakeKWexecute_process contained
             \ ANSI
+            \ ANY
             \ AUTO
             \ COMMAND
             \ COMMAND_ECHO
+            \ COMMAND_ERROR_IS_FATAL
+            \ ECHO_ERROR_VARIABLE
+            \ ECHO_OUTPUT_VARIABLE
             \ ENCODING
             \ ERROR_FILE
             \ ERROR_QUIET
             \ ERROR_STRIP_TRAILING_WHITESPACE
             \ ERROR_VARIABLE
             \ INPUT_FILE
+            \ LAST
             \ NONE
             \ OEM
             \ OUTPUT_FILE
@@ -2069,63 +2613,107 @@
 syn keyword cmakeKWfile contained
             \ ALGO
             \ APPEND
+            \ ARCHIVE_CREATE
+            \ ARCHIVE_EXTRACT
             \ ASCII
+            \ BASE_DIRECTORY
+            \ BUNDLE_EXECUTABLE
+            \ CHMOD
+            \ CHMOD_RECURSE
+            \ CMAKE_GET_RUNTIME_DEPENDENCIES_COMMAND
+            \ CMAKE_GET_RUNTIME_DEPENDENCIES_PLATFORM
+            \ CMAKE_GET_RUNTIME_DEPENDENCIES_TOOL
+            \ CMAKE_OBJDUMP
             \ CMAKE_TLS_CAINFO
             \ CMAKE_TLS_VERIFY
+            \ CODE
+            \ COMPILE_FEATURES
+            \ COMPRESSION
+            \ COMPRESSION_LEVEL
             \ CONDITION
-            \ CONFIG
+            \ CONFIGURE
             \ CONFIGURE_DEPENDS
+            \ CONFLICTING_DEPENDENCIES_PREFIX
             \ CONTENT
+            \ CONVERT
             \ COPY
             \ COPY_ON_ERROR
             \ CREATE_LINK
+            \ CRLF
             \ DESTINATION
+            \ DIRECTORIES
             \ DIRECTORY_PERMISSIONS
+            \ DLL
+            \ DOS
             \ DOWNLOAD
             \ ENCODING
-            \ EXCLUDE
+            \ ESCAPE_QUOTES
+            \ EXECUTABLES
             \ EXPECTED_HASH
             \ FILES_MATCHING
             \ FILE_PERMISSIONS
             \ FOLLOW_SYMLINKS
             \ FOLLOW_SYMLINK_CHAIN
+            \ FORMAT
             \ FUNCTION
             \ GENERATE
+            \ GET_RUNTIME_DEPENDENCIES
             \ GLOB
             \ GLOB_RECURSE
+            \ GROUP_EXECUTE
+            \ GROUP_READ
+            \ GROUP_WRITE
             \ GUARD
             \ HASH
             \ HEX
             \ HTTPHEADER
             \ IGNORED
             \ INACTIVITY_TIMEOUT
+            \ INPUT
             \ INSTALL
             \ IS_ABSOLUTE
             \ LENGTH_MAXIMUM
             \ LENGTH_MINIMUM
             \ LF
+            \ LIBRARIES
             \ LIMIT
             \ LIMIT_COUNT
             \ LIMIT_INPUT
             \ LIMIT_OUTPUT
             \ LIST_DIRECTORIES
+            \ LIST_ONLY
             \ LOCK
             \ LOG
             \ MAKE_DIRECTORY
+            \ MODULES
+            \ MTIME
+            \ MYLIBRARY
             \ NETRC
             \ NETRC_FILE
             \ NEWLINE_CONSUME
+            \ NEWLINE_STYLE
             \ NOT
             \ NO_HEX_CONVERSION
             \ NO_SOURCE_PERMISSIONS
             \ OFFSET
-            \ OLD
+            \ ONLY
             \ OPTIONAL
             \ OUTPUT
+            \ OWNER_EXECUTE
+            \ OWNER_READ
+            \ OWNER_WRITE
+            \ PATHS
             \ PATTERN
+            \ PATTERNS
+            \ PERMISSIONS
+            \ POST_EXCLUDE_REGEXES
+            \ POST_INCLUDE_REGEXES
+            \ PRE_EXCLUDE_REGEXES
+            \ PRE_INCLUDE_REGEXES
             \ PROCESS
             \ READ
             \ READ_SYMLINK
+            \ REAL_PATH
             \ REGEX
             \ RELATIVE_PATH
             \ RELEASE
@@ -2133,33 +2721,51 @@
             \ REMOVE_RECURSE
             \ RENAME
             \ REQUIRED
+            \ RESOLVED_DEPENDENCIES_VAR
             \ RESULT
             \ RESULT_VARIABLE
+            \ RPATH
+            \ RUNPATH
+            \ SCRIPT
+            \ SHARED
             \ SHOW_PROGRESS
             \ SIZE
             \ SSL
+            \ STATIC
             \ STATUS
             \ STRINGS
             \ SYMBOLIC
+            \ TARGET
+            \ TARGET_PROPERTY
             \ TIMESTAMP
             \ TLS_CAINFO
             \ TLS_VERIFY
             \ TOUCH
             \ TOUCH_NOCREATE
             \ TO_CMAKE_PATH
+            \ TO_CMAKE_PATH_LIST
             \ TO_NATIVE_PATH
+            \ TO_NATIVE_PATH_LIST
+            \ UNRESOLVED_DEPENDENCIES_VAR
             \ UPLOAD
             \ URL
             \ USERPWD
             \ USE_SOURCE_PERMISSIONS
             \ UTC
             \ UTF
+            \ VERBOSE
+            \ WORLD_EXECUTE
+            \ WORLD_READ
+            \ WORLD_WRITE
             \ WRITE
+            \ XZ
+            \ _FILENAMES
 
 syn keyword cmakeKWfind_file contained
             \ CMAKE_FIND_ROOT_PATH_BOTH
             \ DOC
             \ DVAR
+            \ FALSE
             \ HINTS
             \ INCLUDE
             \ NAMES
@@ -2173,14 +2779,16 @@
             \ ONLY_CMAKE_FIND_ROOT_PATH
             \ PATHS
             \ PATH_SUFFIXES
+            \ REQUIRED
             \ VAR
 
 syn keyword cmakeKWfind_library contained
             \ CMAKE_FIND_ROOT_PATH_BOTH
             \ DOC
             \ DVAR
+            \ FALSE
             \ HINTS
-            \ LIB
+            \ INCLUDE
             \ NAMES
             \ NAMES_PER_DIR
             \ NO_CMAKE_ENVIRONMENT_PATH
@@ -2193,12 +2801,14 @@
             \ ONLY_CMAKE_FIND_ROOT_PATH
             \ PATHS
             \ PATH_SUFFIXES
+            \ REQUIRED
             \ VAR
 
 syn keyword cmakeKWfind_package contained
             \ ABI
             \ BUNDLE
             \ CMAKE_DISABLE_FIND_PACKAGE_
+            \ CMAKE_REQUIRE_FIND_PACKAGE_
             \ CMAKE_FIND_ROOT_PATH_BOTH
             \ COMPONENTS
             \ CONFIG
@@ -2206,8 +2816,12 @@
             \ DEC
             \ DVAR
             \ EXACT
+            \ EXCLUDE
+            \ FALSE
+            \ FIND_PACKAGE_VERSION_FORMAT
             \ FRAMEWORK
             \ HINTS
+            \ INCLUDE
             \ MODULE
             \ NAMES
             \ NATURAL
@@ -2227,12 +2841,26 @@
             \ OPTIONAL_COMPONENTS
             \ PACKAGE_FIND_NAME
             \ PACKAGE_FIND_VERSION
+            \ PACKAGE_FIND_VERSION_COMPLETE
             \ PACKAGE_FIND_VERSION_COUNT
             \ PACKAGE_FIND_VERSION_MAJOR
+            \ PACKAGE_FIND_VERSION_MAX
+            \ PACKAGE_FIND_VERSION_MAX_COUNT
+            \ PACKAGE_FIND_VERSION_MAX_MAJOR
+            \ PACKAGE_FIND_VERSION_MAX_MINOR
+            \ PACKAGE_FIND_VERSION_MAX_PATCH
+            \ PACKAGE_FIND_VERSION_MAX_TWEAK
             \ PACKAGE_FIND_VERSION_MINOR
+            \ PACKAGE_FIND_VERSION_MIN_COUNT
+            \ PACKAGE_FIND_VERSION_MIN_MAJOR
+            \ PACKAGE_FIND_VERSION_MIN_MINOR
+            \ PACKAGE_FIND_VERSION_MIN_PATCH
+            \ PACKAGE_FIND_VERSION_MIN_TWEAK
             \ PACKAGE_FIND_VERSION_PATCH
+            \ PACKAGE_FIND_VERSION_RANGE
+            \ PACKAGE_FIND_VERSION_RANGE_MAX
+            \ PACKAGE_FIND_VERSION_RANGE_MIN
             \ PACKAGE_FIND_VERSION_TWEAK
-            \ PACKAGE_VERSION
             \ PACKAGE_VERSION_COMPATIBLE
             \ PACKAGE_VERSION_EXACT
             \ PACKAGE_VERSION_UNSUITABLE
@@ -2257,6 +2885,7 @@
             \ CMAKE_FIND_ROOT_PATH_BOTH
             \ DOC
             \ DVAR
+            \ FALSE
             \ HINTS
             \ INCLUDE
             \ NAMES
@@ -2270,12 +2899,14 @@
             \ ONLY_CMAKE_FIND_ROOT_PATH
             \ PATHS
             \ PATH_SUFFIXES
+            \ REQUIRED
             \ VAR
 
 syn keyword cmakeKWfind_program contained
             \ CMAKE_FIND_ROOT_PATH_BOTH
             \ DOC
             \ DVAR
+            \ FALSE
             \ HINTS
             \ NAMES
             \ NAMES_PER_DIR
@@ -2289,22 +2920,26 @@
             \ ONLY_CMAKE_FIND_ROOT_PATH
             \ PATHS
             \ PATH_SUFFIXES
+            \ REQUIRED
             \ VAR
 
 syn keyword cmakeKWfltk_wrap_ui contained
             \ FLTK
 
 syn keyword cmakeKWforeach contained
+            \ APPEND
             \ IN
             \ ITEMS
             \ LISTS
             \ RANGE
             \ STATUS
+            \ ZIP_LISTS
 
 syn keyword cmakeKWfunction contained
             \ ARGC
             \ ARGN
             \ ARGV
+            \ CALL
             \ FOO
             \ PARENT_SCOPE
 
@@ -2332,6 +2967,7 @@
             \ PROGRAM
             \ PROGRAM_ARGS
             \ REALPATH
+            \ REAL_PATH
 
 syn keyword cmakeKWget_property contained
             \ BRIEF_DOCS
@@ -2344,13 +2980,15 @@
             \ SET
             \ SOURCE
             \ TARGET
+            \ TARGET_DIRECTORY
             \ TEST
             \ VARIABLE
 
 syn keyword cmakeKWget_source_file_property contained
+            \ DIRECTORY
             \ INHERITED
             \ LOCATION
-            \ VAR
+            \ TARGET_DIRECTORY
 
 syn keyword cmakeKWget_target_property contained
             \ INHERITED
@@ -2426,6 +3064,7 @@
 
 syn keyword cmakeKWinstall contained
             \ AFTER
+            \ AIX
             \ APT
             \ ARCHIVE
             \ BEFORE
@@ -2459,6 +3098,7 @@
             \ DIRECTORY_PERMISSIONS
             \ DLL
             \ DOC
+            \ ENABLE_EXPORTS
             \ EXCLUDE_FROM_ALL
             \ EXPORT
             \ EXPORT_ANDROID_MK
@@ -2564,6 +3204,7 @@
             \ INTERNAL
             \ JOIN
             \ LENGTH
+            \ NATURAL
             \ ORDER
             \ OUTPUT_VARIABLE
             \ PARENT_SCOPE
@@ -2599,6 +3240,7 @@
             \ ARGC
             \ ARGN
             \ ARGV
+            \ CALL
             \ DEFINED
             \ FOO
             \ GREATER
@@ -2615,12 +3257,18 @@
             \ OUTPUT_FORMAT
 
 syn keyword cmakeKWmessage contained
+            \ APPEND
             \ AUTHOR_WARNING
+            \ CHECK_
+            \ CHECK_FAIL
+            \ CHECK_PASS
+            \ CHECK_START
             \ DEBUG
             \ DEPRECATION
             \ FATAL_ERROR
             \ GUI
             \ NOTICE
+            \ POP_BACK
             \ SEND_ERROR
             \ STATUS
             \ TRACE
@@ -2637,15 +3285,18 @@
             \ CUDA
             \ DESCRIPTION
             \ HOMEPAGE_URL
+            \ ISPC
             \ LANGUAGES
             \ NAME
             \ NONE
+            \ OBJC
+            \ OBJCXX
             \ PROJECT
             \ VERSION
             \ _BINARY_DIR
             \ _DESCRIPTION
             \ _HOMEPAGE_URL
-            \ _INCLUDE
+            \ _INCLUDE_BEFORE
             \ _SOURCE_DIR
             \ _VERSION
             \ _VERSION_MAJOR
@@ -2663,9 +3314,14 @@
             \ VALUE
             \ VAR
 
+syn keyword cmakeKWreturn contained
+            \ DEFER
+
 syn keyword cmakeKWseparate_arguments contained
             \ MSDN
             \ NATIVE_COMMAND
+            \ PROGRAM
+            \ SEPARATE_ARGS
             \ UNIX_COMMAND
             \ WINDOWS_COMMAND
 
@@ -2694,12 +3350,15 @@
             \ PROPERTY
             \ SOURCE
             \ TARGET
+            \ TARGET_DIRECTORY
             \ TEST
             \ WIX
 
 syn keyword cmakeKWset_source_files_properties contained
+            \ DIRECTORY
             \ PROPERTIES
             \ SOURCE
+            \ TARGET_DIRECTORY
 
 syn keyword cmakeKWset_target_properties contained
             \ PROPERTIES
@@ -2709,6 +3368,9 @@
             \ PROPERTIES
             \ TEST
 
+syn keyword cmakeKWsite_name contained
+            \ HOSTNAME
+
 syn keyword cmakeKWsource_group contained
             \ FILES
             \ PREFIX
@@ -2718,20 +3380,27 @@
 syn keyword cmakeKWstring contained
             \ ALPHABET
             \ APPEND
+            \ ARRAY
             \ ASCII
+            \ BOOLEAN
             \ CMAKE_MATCH_
             \ COMPARE
             \ CONCAT
             \ CONFIGURE
             \ EQUAL
+            \ ERROR_VARIABLE
             \ ESCAPE_QUOTES
             \ FIND
             \ GENEX_STRIP
+            \ GET
             \ GREATER
             \ GREATER_EQUAL
             \ GUID
             \ HASH
+            \ HEX
             \ JOIN
+            \ JSON
+            \ JSONLENGTH
             \ LENGTH
             \ LESS
             \ LESS_EQUAL
@@ -2739,17 +3408,24 @@
             \ MATCH
             \ MATCHALL
             \ MATCHES
+            \ MEMBER
             \ NAMESPACE
             \ NOTEQUAL
+            \ NULL
+            \ NUMBER
+            \ OBJECT
+            \ OFF
             \ ONLY
             \ PREPEND
             \ RANDOM
             \ RANDOM_SEED
             \ REGEX
+            \ REMOVE
             \ REPEAT
             \ REPLACE
             \ REVERSE
             \ RFC
+            \ SET
             \ SHA
             \ SOURCE_DATE_EPOCH
             \ STRIP
@@ -2852,8 +3528,12 @@
             \ ALIAS
             \ BEFORE
             \ CMAKE_
+            \ CUDA_RESOLVE_DEVICE_SYMBOLS
+            \ CUDA_SEPARABLE_COMPILATION
+            \ DEVICE_LINK
             \ GCC
             \ GNU
+            \ HOST_LINK
             \ IMPORTED
             \ INTERFACE
             \ INTERFACE_LINK_OPTIONS
@@ -2869,9 +3549,23 @@
             \ _LINKER_WRAPPER_FLAG_SEP
 
 syn keyword cmakeKWtarget_precompile_headers contained
+            \ ALIAS
+            \ ANGLE
+            \ BUILD_INTERFACE
+            \ COMPILE_LANGUAGE
+            \ DISABLE_PRECOMPILE_HEADERS
+            \ EXPORT
+            \ FI
+            \ GCC
+            \ IMPORTED
             \ INTERFACE
+            \ INTERFACE_PRECOMPILE_HEADERS
+            \ PRECOMPILE_HEADERS
+            \ PRECOMPILE_HEADERS_REUSE_FROM
             \ PRIVATE
             \ PUBLIC
+            \ REUSE_FROM
+            \ SKIP_PRECOMPILE_HEADERS
 
 syn keyword cmakeKWtarget_sources contained
             \ ALIAS
@@ -2910,6 +3604,12 @@
             \ LINK_OPTIONS
             \ MULTI
             \ NOT
+            \ OBJCXX_EXTENSIONS
+            \ OBJCXX_STANDARD
+            \ OBJCXX_STANDARD_REQUIRED
+            \ OBJC_EXTENSIONS
+            \ OBJC_STANDARD
+            \ OBJC_STANDARD_REQUIRED
             \ OUTPUT_VARIABLE
             \ PRIVATE
             \ SOURCES
@@ -2955,7 +3655,14 @@
             \ TEST_VARIABLE
 
 syn keyword cmakeKWvariable_watch contained
+            \ APPEND
             \ COMMAND
+            \ DEFINED
+            \ MODIFIED_ACCESS
+            \ READ_ACCESS
+            \ REMOVED_ACCESS
+            \ UNKNOWN_MODIFIED_ACCESS
+            \ UNKNOWN_READ_ACCESS
 
 syn keyword cmakeKWwrite_file contained
             \ APPEND
@@ -2987,39 +3694,49 @@
             \ CONFIGURATION
             \ CUDA_COMPILER_ID
             \ CUDA_COMPILER_VERSION
+            \ CUDA_RESOLVE_DEVICE_SYMBOLS
+            \ CUDA_SEPARABLE_COMPILATION
             \ CUSTOM_KEYS
             \ CXX_COMPILER_ID
             \ CXX_COMPILER_VERSION
+            \ CXX_CONFIG
             \ CXX_STANDARD
             \ C_COMPILER_ID
             \ C_COMPILER_VERSION
             \ C_STANDARD
             \ DEBUG_MODE
             \ DEBUG_POSTFIX
+            \ DEVICE_LINK
+            \ DLL
             \ EXCLUDE
             \ EXPORT
             \ FALSE
             \ FILTER
             \ FOO_EXTRA_THINGS
-            \ Fortran_COMPILER_ID
-            \ Fortran_COMPILER_VERSION
             \ GENERATE
             \ GENEX_EVAL
             \ GNU
+            \ HOST_LINK
             \ IF
             \ IGNORE
             \ IMPORT_PREFIX
             \ IMPORT_SUFFIX
             \ INCLUDE_DIRECTORIES
             \ INSTALL_INTERFACE
+            \ INSTALL_NAME_DIR
             \ INSTALL_PREFIX
+            \ INTERFACE
             \ INTERFACE_LINK_LIBRARIES
             \ IN_LIST
+            \ ISPC_COMPILER_ID
+            \ ISPC_COMPILER_VERSION
             \ JOIN
             \ LANG
             \ LANG_COMPILER_ID
             \ LIBRARY_OUTPUT_NAME
             \ LIBRARY_OUTPUT_NAME_
+            \ LINK_LANGUAGE
+            \ LINK_LANG_AND_ID
             \ LINK_LIBRARIES
             \ LINK_ONLY
             \ LOWER_CASE
@@ -3027,6 +3744,10 @@
             \ MAP_IMPORTED_CONFIG_
             \ NO
             \ NOT
+            \ OBJCXX_COMPILER_ID
+            \ OBJCXX_COMPILER_VERSION
+            \ OBJC_COMPILER_ID
+            \ OBJC_COMPILER_VERSION
             \ OFF
             \ OLD_COMPILER
             \ OUTPUT_NAME
@@ -3045,6 +3766,7 @@
             \ SDK
             \ SEMICOLON
             \ SHELL_PATH
+            \ STATIC
             \ STREQUAL
             \ TARGET_BUNDLE_CONTENT_DIR
             \ TARGET_BUNDLE_DIR
@@ -3099,8 +3821,10 @@
             \ break
             \ build_command
             \ cmake_host_system_information
+            \ cmake_language
             \ cmake_minimum_required
             \ cmake_parse_arguments
+            \ cmake_path
             \ cmake_policy
             \ configure_file
             \ continue
@@ -3257,8 +3981,10 @@
 hi def link cmakeKWadd_test ModeMsg
 hi def link cmakeKWbuild_command ModeMsg
 hi def link cmakeKWcmake_host_system_information ModeMsg
+hi def link cmakeKWcmake_language ModeMsg
 hi def link cmakeKWcmake_minimum_required ModeMsg
 hi def link cmakeKWcmake_parse_arguments ModeMsg
+hi def link cmakeKWcmake_path ModeMsg
 hi def link cmakeKWcmake_policy ModeMsg
 hi def link cmakeKWconfigure_file ModeMsg
 hi def link cmakeKWcreate_test_sourcelist ModeMsg
@@ -3273,6 +3999,7 @@
 hi def link cmakeKWctest_update ModeMsg
 hi def link cmakeKWctest_upload ModeMsg
 hi def link cmakeKWdefine_property ModeMsg
+hi def link cmakeKWdoxygen_add_docs ModeMsg
 hi def link cmakeKWenable_language ModeMsg
 hi def link cmakeKWenable_testing ModeMsg
 hi def link cmakeKWexec_program ModeMsg
@@ -3317,6 +4044,7 @@
 hi def link cmakeKWqt_wrap_cpp ModeMsg
 hi def link cmakeKWqt_wrap_ui ModeMsg
 hi def link cmakeKWremove ModeMsg
+hi def link cmakeKWreturn ModeMsg
 hi def link cmakeKWseparate_arguments ModeMsg
 hi def link cmakeKWset ModeMsg
 hi def link cmakeKWset_directory_properties ModeMsg
@@ -3324,6 +4052,7 @@
 hi def link cmakeKWset_source_files_properties ModeMsg
 hi def link cmakeKWset_target_properties ModeMsg
 hi def link cmakeKWset_tests_properties ModeMsg
+hi def link cmakeKWsite_name ModeMsg
 hi def link cmakeKWsource_group ModeMsg
 hi def link cmakeKWstring ModeMsg
 hi def link cmakeKWsubdirs ModeMsg
